import type { ToolMetadata, MessagePartToolCall } from '@agforge/core'; /** * Agent 拦截器侧的权限管理器接口。 * * 与工具侧 `ToolPermissionManager` 的区别:额外携带 `metadata` 和 `message` 参数, * 实现方可根据工具身份(name、mcp 来源等)和调用上下文做差异化策略。 * * 本拦截器通过闭包将 `metadata` 和 `message` 自动绑定, * 转换为工具侧简化接口 `ToolPermissionManager.request(urn)`,工具无需感知元信息。 * * @example 实现差异化权限策略 * ```typescript * const permissionManager: PermissionManager = { * async request(urn, metadata, message) { * // 根据工具名称或 MCP 来源做差异化处理 * if (metadata.name.startsWith('mcp_')) { * await requireUserApproval(urn, metadata); * } * }, * }; * ``` */ export type PermissionManager = { /** * 请求资源点的权限,请求失败报错。 * * @param urn 资源标识符(URL 格式) * @param metadata 工具元信息(含 name、description、parameters,以及可选的扩展字段) * @param message 工具调用消息(含 toolId、arguments 等) */ request(urn: URL, metadata: ToolMetadata, message: MessagePartToolCall): Promise; };