Expand description
MatrixRPC - Dynamic Extension Protocol
A JSON-RPC 2.0 based protocol for dynamic extension communication. Supports both Stdio and TCP transport modes.
§Architecture
+----------------+ +----------------+ +----------------+
| Extension | <--| Transport |<-->| Host/App |
| (Plugin) | -->| (Stdio/TCP) | -->| (Core) |
+----------------+ +----------------+ +----------------+§Components
protocol: JSON-RPC 2.0 types (Request, Response, Error, etc.)transport: Communication layer (Stdio, TCP)config: Configuration loading (matrixrpc.toml)service: Extension service data modelsregistry: Service registration and discoverylifecycle: Connection and lifecycle managementrouter: Tool and node routing logicexecutor: Tool and node execution with transportcallback: AI, tool, and context callback handlinggateway: Unified entry point coordinating all components
§Example
use matrixcode_core::matrixrpc::{ExtensionGateway, ServiceRegistrationRequest};
use matrixcode_core::matrixrpc::transport::{StdioTransport, Transport};
use matrixcode_core::matrixrpc::protocol::JsonRpcRequest;
use serde_json::json;
#[tokio::main]
async fn main() -> std::io::Result<()> {
// Create extension gateway
let gateway = ExtensionGateway::new();
// Register a service
let request = ServiceRegistrationRequest::new("my-plugin", "1.0.0");
let service_id = gateway.register_service(request).await.unwrap();
// Create a stdio transport
let mut transport = StdioTransport::new();
// Send a request
let request = JsonRpcRequest::new("initialize")
.params(json!({"version": "1.0"}));
transport.send(&request.into()).await?;
// Receive response
if let Some(response) = transport.receive().await? {
println!("Response: {:?}", response);
}
Ok(())
}Re-exports§
pub use config::ConfigError;pub use config::GlobalConfig;pub use config::MatrixRpcConfig;pub use config::ServiceDefinition;pub use config::ServiceTransportType;pub use config::CONFIG_FILE_NAME;pub use executor::ExecutionConfig;pub use executor::NodeExecutionConfig;pub use executor::NodeExecutionResult;pub use executor::NodeExecutionStatus;pub use executor::NodeExecutor;pub use executor::NodeExecutorError;pub use executor::RetryStrategy;pub use executor::ToolExecutor;pub use executor::ToolExecutorError;pub use gateway::ExtensionGateway;pub use gateway::GatewayConfig;pub use gateway::GatewayError;pub use gateway::GatewayEvent;pub use gateway::GatewayStats;pub use gateway::ServiceRegistrationRequest;pub use lifecycle::LifecycleConfig;pub use lifecycle::LifecycleError;pub use lifecycle::LifecycleEvent;pub use lifecycle::LifecycleManager;pub use protocol::ErrorCode;pub use protocol::JsonRpcError;pub use protocol::JsonRpcId;pub use protocol::JsonRpcMessage;pub use protocol::JsonRpcRequest;pub use protocol::JsonRpcResponse;pub use registry::RegistryBuilder;pub use registry::RegistryError;pub use registry::RegistryService;pub use registry::RegistryStats;pub use registry::ServiceFilter;pub use router::NodeCapability;pub use router::NodeContext;pub use router::NodeDefinition;pub use router::NodeRouter;pub use router::NodeRouterError;pub use router::NodeRouteResult;pub use router::NodeType;pub use router::ToolDefinition;pub use router::ToolRouter;pub use router::ToolRouterError;pub use router::ToolRouteResult;pub use service::Capability;pub use service::ExtensionService;pub use service::RegistrationInfo;pub use service::ServiceId;pub use service::ServiceStatus;pub use service::TransportConfig;pub use service::TransportType;pub use transport::FrameCodec;pub use transport::StdioTransport;pub use transport::Transport;pub use transport::TransportConfig as TransportSettings;pub use callback::CallbackConfig;pub use callback::CallbackError;pub use callback::CallbackHandler;pub use callback::CallbackResult;pub use callback::CallbackType;pub use callback::AiCallbackHandler;pub use callback::AiCallbackRequest;pub use callback::AiCallbackResult;pub use callback::ToolCallbackHandler;pub use callback::ToolCallbackRequest;pub use callback::ToolCallbackResult;pub use callback::ContextCallbackHandler;pub use callback::ContextCallbackRequest;pub use callback::ContextCallbackResult;pub use callback::ContextOperation;pub use callback::SecurityValidator;pub use callback::SecurityError;pub use callback::TokenInfo;pub use callback::ValidationResult;
Modules§
- callback
- Callback Module
- config
- MatrixRPC Configuration
- executor
- Executor Module
- gateway
- Extension Gateway
- lifecycle
- Lifecycle Management Module
- protocol
- JSON-RPC 2.0 Protocol Types
- registry
- Registry Service Module
- router
- Router Module
- service
- MatrixRPC Extension Service Data Models
- transport
- Transport Layer for MatrixRPC