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};