Skip to main content

matrixcode_core/matrixrpc/
mod.rs

1//! MatrixRPC - Dynamic Extension Protocol
2//!
3//! A JSON-RPC 2.0 based protocol for dynamic extension communication.
4//! Supports both Stdio and TCP transport modes.
5//!
6//! # Architecture
7//!
8//! ```text
9//! +----------------+     +----------------+     +----------------+
10//! |   Extension    | <--|   Transport    |<-->|   Host/App     |
11//! |   (Plugin)     | -->|   (Stdio/TCP)  | -->|   (Core)       |
12//! +----------------+     +----------------+     +----------------+
13//! ```
14//!
15//! # Components
16//!
17//! - `protocol`: JSON-RPC 2.0 types (Request, Response, Error, etc.)
18//! - `transport`: Communication layer (Stdio, TCP)
19//! - `config`: Configuration loading (matrixrpc.toml)
20//! - `service`: Extension service data models
21//! - `registry`: Service registration and discovery
22//! - `lifecycle`: Connection and lifecycle management
23//! - `router`: Tool and node routing logic
24//! - `executor`: Tool and node execution with transport
25//! - `callback`: AI, tool, and context callback handling
26//! - `gateway`: Unified entry point coordinating all components
27//!
28//! # Example
29//!
30//! ```no_run
31//! use matrixcode_core::matrixrpc::{ExtensionGateway, ServiceRegistrationRequest};
32//! use matrixcode_core::matrixrpc::transport::{StdioTransport, Transport};
33//! use matrixcode_core::matrixrpc::protocol::JsonRpcRequest;
34//! use serde_json::json;
35//!
36//! #[tokio::main]
37//! async fn main() -> std::io::Result<()> {
38//!     // Create extension gateway
39//!     let gateway = ExtensionGateway::new();
40//!
41//!     // Register a service
42//!     let request = ServiceRegistrationRequest::new("my-plugin", "1.0.0");
43//!     let service_id = gateway.register_service(request).await.unwrap();
44//!
45//!     // Create a stdio transport
46//!     let mut transport = StdioTransport::new();
47//!
48//!     // Send a request
49//!     let request = JsonRpcRequest::new("initialize")
50//!         .params(json!({"version": "1.0"}));
51//!     transport.send(&request.into()).await?;
52//!
53//!     // Receive response
54//!     if let Some(response) = transport.receive().await? {
55//!         println!("Response: {:?}", response);
56//!     }
57//!
58//!     Ok(())
59//! }
60//! ```
61
62pub mod callback;
63pub mod config;
64pub mod executor;
65pub mod gateway;
66pub mod lifecycle;
67pub mod protocol;
68pub mod registry;
69pub mod router;
70pub mod service;
71pub mod transport;
72
73// Re-export commonly used types
74pub use config::{
75    ConfigError, GlobalConfig, MatrixRpcConfig, ServiceDefinition, ServiceTransportType,
76    CONFIG_FILE_NAME,
77};
78pub use executor::{
79    ExecutionConfig, NodeExecutionConfig, NodeExecutionResult, NodeExecutionStatus, NodeExecutor,
80    NodeExecutorError, RetryStrategy, ToolExecutor, ToolExecutorError,
81};
82pub use gateway::{
83    ExtensionGateway, GatewayConfig, GatewayError, GatewayEvent, GatewayStats,
84    ServiceRegistrationRequest,
85};
86pub use lifecycle::{LifecycleConfig, LifecycleError, LifecycleEvent, LifecycleManager};
87pub use protocol::{
88    ErrorCode, JsonRpcError, JsonRpcId, JsonRpcMessage, JsonRpcRequest, JsonRpcResponse,
89};
90pub use registry::{
91    RegistryBuilder, RegistryError, RegistryService, RegistryStats, ServiceFilter,
92};
93pub use router::{
94    NodeCapability, NodeContext, NodeDefinition, NodeRouter, NodeRouterError, NodeRouteResult,
95    NodeType, ToolDefinition, ToolRouter, ToolRouterError, ToolRouteResult,
96};
97pub use service::{
98    Capability, ExtensionService, RegistrationInfo, ServiceId, ServiceStatus, TransportConfig,
99    TransportType,
100};
101pub use transport::{
102    FrameCodec, StdioTransport, Transport, TransportConfig as TransportSettings,
103};
104pub use callback::{
105    CallbackConfig, CallbackError, CallbackHandler, CallbackResult, CallbackType,
106    AiCallbackHandler, AiCallbackRequest, AiCallbackResult,
107    ToolCallbackHandler, ToolCallbackRequest, ToolCallbackResult,
108    ContextCallbackHandler, ContextCallbackRequest, ContextCallbackResult, ContextOperation,
109    SecurityValidator, SecurityError, TokenInfo, ValidationResult,
110};