/** * Agent · MCP 智能体 Web 客户端 — 全局类型声明 * * 本项目使用 TypeScript 工具链做类型检查(tsc --noEmit), * 源码使用 JSDoc 风格的 JavaScript(allowJs: true)。 */ // ============================================================ // MCP 协议相关类型(JSON-RPC 2.0) // ============================================================ export type JsonRpcId = number | string | null; export interface JsonRpcRequest

{ jsonrpc: '2.0'; id: JsonRpcId; method: string; params?: P; } export interface JsonRpcResponse { jsonrpc: '2.0'; id: JsonRpcId; result?: R; error?: JsonRpcError; } export interface JsonRpcError { code: number; message: string; data?: unknown; } export interface JsonRpcNotification

{ jsonrpc: '2.0'; method: string; params?: P; } // ============================================================ // MCP 工具相关类型 // ============================================================ export interface McpToolSchema { type: 'function'; function: { name: string; description?: string; parameters: Record; }; } export interface McpToolCall { id: string; name: string; arguments: Record; } export interface McpToolResult { ok: boolean; result?: unknown; error?: string; errorName?: string; } // ============================================================ // 模型源 client 接口(4 个 client 共用) // ============================================================ export type ModelSource = 'ollama' | 'omlx' | 'sparkle' | 'anthropic'; export type Protocol = 'anthropic' | 'openai'; export interface ModelConfig { baseUrl: string; apiKey?: string; model: string; thinkingField?: string; } export interface ChatRequest { messages: ChatMessage[]; tools?: McpToolSchema[]; signal?: AbortSignal; onEvent?: (event: ChatEvent) => void; } export interface ChatMessage { role: 'system' | 'user' | 'assistant' | 'tool'; content: string | null; tool_calls?: Array<{ id: string; type: 'function'; function: { name: string; arguments: string }; }>; tool_call_id?: string; } export interface ChatResult { text: string; thinking: string; toolCalls: McpToolCall[]; usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number; }; } export type ChatEvent = | { type: 'thinking'; value: string } | { type: 'content'; value: string } | { type: 'usage'; value: ChatResult['usage'] }; // ============================================================ // 假名映射(认知隔离) // ============================================================ export interface PidEntry { name?: string; id?: string | number; team?: string; } export type PidMap = Record; export type TokenKind = | 'NAME' | 'ID' | 'STATION' | 'CAR' | 'TRAIN' | 'TEAM'; export interface MaskingConfig { enabled: boolean; ttlMs: number; }