/** * CardRenderMcpServer —— 进程内 {@link IMcpServer} 实现,做卡片的 list 与 render。 * * 接入结构沿用 ry/dev 方案:作为 {@link IMcpServer} 经 * `IMcpServerProvider → IMcpServer → IAgentToolDescriptor` 管线汇入 `agentReq.tools`, * 组合根无需为卡片另开装配分支。实现以 sprint 方案为准:`callTool` 调用 sprint 的 * {@link executeCardPresentation}(`executeA2UICardResolver` 解析 → 注入视图模型), * 返回 {@link IAgentPresentationToolResult};经 `toPiAgentTools` 的 `details` 通道 * 与 `translateEvents` 拆 `a2ui_card` 事件,旁路推 UI(完整卡片不进 LLM 文本)。 * * `mcpTools`(resolver 调用链依赖的其它 MCP 工具)与 `runtimeContext`(threadId/agentId) * 在 `AgentRuntime.runAgentLoop` 收集完 MCP 工具后才齐备,故由组合根在构造本 server 时 * 注入(see {@link AgentRuntime.runAgentLoop}),而非在 `IMcpServerProvider.servers()` 阶段。 * * proxy 化后:不再吃预先展开的 `IAgentToolDescriptor[]`,改吃 {@link IMcpToolRegistry}—— * resolver 调用链按需 `resolve(resourceId, toolName)` 取得 MCP 工具句柄(可能触发懒连接), * 这样 MCP 工具不必在 run 开始就全量连入。 */ import type { ICardResource } from '../vendor/linkque-agent-protocol/index.js'; import type { A2UICardRuntimeContext } from '../vendor/agent-a2ui-card-contract/index.js'; import type { IAgentToolDescriptor, IMcpServer, IMcpToolRegistry } from './ports.js'; /** 进程内卡片 MCP server:把 ICardResource[] 暴露成可调用工具。 */ export declare class CardRenderMcpServer implements IMcpServer { private readonly resources; private readonly registry; private readonly runtimeContext; /** 精确 MCP Resource ID;卡片 server 统一用固定标识(仅诊断/隔离用)。 */ readonly resourceId = "card-render"; readonly serverName = "card-render"; /** * @param resources 卡片资源配置(ICardResource[])。 * @param registry MCP 工具注册表(resolver 调用链按需解析 MCP 工具句柄)。 * @param runtimeContext A2UI 运行时上下文(threadId/agentId 等可信字段)。 */ constructor(resources: ICardResource[], registry: IMcpToolRegistry, runtimeContext: A2UICardRuntimeContext); listTools(): Promise; callTool(name: string, args: unknown, signal?: AbortSignal): Promise; close(): Promise; }