yao/sandbox/ipc/types.go
Max add0424576 Refactor session cleanup logic to ensure single execution and improve resource management
- 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.
2026-02-26 15:35:47 +08:00

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"`
}