- Replace direct cleanup calls in the Close method with a sync.Once mechanism to guarantee that cleanup runs only once. - Remove the cleanup method and integrate its functionality into the Close method, streamlining resource management. - Update the serve method to call Close for cleanup, enhancing clarity and consistency in session termination.
140 lines
4.2 KiB
Go
140 lines
4.2 KiB
Go
package ipc
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net"
|
|
"sync"
|
|
)
|
|
|
|
// Session represents an IPC session for a sandbox container
|
|
type Session struct {
|
|
ID string // Session ID (usually equals chatID)
|
|
SocketPath string // Unix socket path
|
|
Listener net.Listener // Socket listener
|
|
Conn net.Conn // Current connection
|
|
Context *AgentContext // Agent context
|
|
MCPTools map[string]*MCPTool // Authorized MCP tools
|
|
cancel context.CancelFunc // Cancel function for cleanup
|
|
closeOnce sync.Once // Ensures cleanup runs exactly once
|
|
}
|
|
|
|
// AgentContext holds context information for the agent
|
|
type AgentContext struct {
|
|
UserID string // User identifier
|
|
ChatID string // Chat/session identifier
|
|
Locale string // Locale for i18n
|
|
}
|
|
|
|
// MCPTool represents an MCP tool that can be called
|
|
type MCPTool struct {
|
|
Name string // Tool name
|
|
Description string // Tool description
|
|
Process string // Yao process name to execute
|
|
InputSchema json.RawMessage // JSON Schema for input validation
|
|
}
|
|
|
|
// JSONRPCRequest represents a JSON-RPC 2.0 request
|
|
type JSONRPCRequest struct {
|
|
JSONRPC string `json:"jsonrpc"`
|
|
ID interface{} `json:"id,omitempty"`
|
|
Method string `json:"method"`
|
|
Params json.RawMessage `json:"params,omitempty"`
|
|
}
|
|
|
|
// JSONRPCResponse represents a JSON-RPC 2.0 response
|
|
type JSONRPCResponse struct {
|
|
JSONRPC string `json:"jsonrpc"`
|
|
ID interface{} `json:"id,omitempty"`
|
|
Result interface{} `json:"result,omitempty"`
|
|
Error *JSONRPCError `json:"error,omitempty"`
|
|
}
|
|
|
|
// JSONRPCError represents a JSON-RPC 2.0 error
|
|
type JSONRPCError struct {
|
|
Code int `json:"code"`
|
|
Message string `json:"message"`
|
|
Data interface{} `json:"data,omitempty"`
|
|
}
|
|
|
|
// Standard JSON-RPC error codes
|
|
const (
|
|
ErrCodeParse = -32700 // Parse error
|
|
ErrCodeInvalidRequest = -32600 // Invalid request
|
|
ErrCodeMethodNotFound = -32601 // Method not found
|
|
ErrCodeInvalidParams = -32602 // Invalid params
|
|
ErrCodeInternal = -32603 // Internal error
|
|
)
|
|
|
|
// ToolCallParams represents parameters for tools/call
|
|
type ToolCallParams struct {
|
|
Name string `json:"name"`
|
|
Arguments map[string]interface{} `json:"arguments"`
|
|
}
|
|
|
|
// ToolResult represents the result of a tool call
|
|
type ToolResult struct {
|
|
Content []ToolContent `json:"content"`
|
|
IsError bool `json:"isError,omitempty"`
|
|
}
|
|
|
|
// ToolContent represents content in a tool result
|
|
type ToolContent struct {
|
|
Type string `json:"type"` // "text" or "resource"
|
|
Text string `json:"text,omitempty"`
|
|
}
|
|
|
|
// InitializeParams represents parameters for initialize method
|
|
type InitializeParams struct {
|
|
ProtocolVersion string `json:"protocolVersion"`
|
|
Capabilities Capabilities `json:"capabilities"`
|
|
ClientInfo ClientInfo `json:"clientInfo"`
|
|
}
|
|
|
|
// Capabilities represents MCP capabilities
|
|
type Capabilities struct {
|
|
Tools *ToolsCapability `json:"tools,omitempty"`
|
|
Resources *ResourcesCapability `json:"resources,omitempty"`
|
|
}
|
|
|
|
// ToolsCapability represents tools capability
|
|
type ToolsCapability struct {
|
|
ListChanged bool `json:"listChanged,omitempty"`
|
|
}
|
|
|
|
// ResourcesCapability represents resources capability
|
|
type ResourcesCapability struct {
|
|
Subscribe bool `json:"subscribe,omitempty"`
|
|
ListChanged bool `json:"listChanged,omitempty"`
|
|
}
|
|
|
|
// ClientInfo represents client information
|
|
type ClientInfo struct {
|
|
Name string `json:"name"`
|
|
Version string `json:"version"`
|
|
}
|
|
|
|
// ServerInfo represents server information
|
|
type ServerInfo struct {
|
|
Name string `json:"name"`
|
|
Version string `json:"version"`
|
|
}
|
|
|
|
// InitializeResult represents the result of initialize
|
|
type InitializeResult struct {
|
|
ProtocolVersion string `json:"protocolVersion"`
|
|
Capabilities Capabilities `json:"capabilities"`
|
|
ServerInfo ServerInfo `json:"serverInfo"`
|
|
}
|
|
|
|
// Tool represents a tool in tools/list response
|
|
type Tool struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description,omitempty"`
|
|
InputSchema json.RawMessage `json:"inputSchema"`
|
|
}
|
|
|
|
// ToolsListResult represents the result of tools/list
|
|
type ToolsListResult struct {
|
|
Tools []Tool `json:"tools"`
|
|
}
|