import type { A2AAgentCard, A2ASendTaskParams, A2ATask, A2ATaskEvent } from './types.js'; /** * 认证配置(统一 bearer / basic / apiKey / custom 四种方式) * * value 支持 `${env.VAR_NAME}` 模板,运行时从环境变量读取敏感凭证。 */ export interface AuthConfig { /** 认证方式 */ type: 'bearer' | 'basic' | 'apiKey' | 'custom'; /** 认证凭证值(支持 `${env.VAR_NAME}` 模板语法) */ value: string; /** apiKey/custom 模式下的 header 名称(如 X-API-Key) */ name?: string; } /** 将 AuthConfig 转为 HTTP 请求头(value 支持 ${vars.x} / ${env.x} 模板) */ export declare function buildAuthHeaders(auth?: AuthConfig | null, vars?: Record): Record; export interface AgentDebugTrace { step: string; title: string; duration?: string; request?: { url: string; method: string; headers: Record; body?: unknown; }; response?: { status: number; statusText: string; ok: boolean; headers: Record; contentType: string; rawBody?: string; sseParsed?: boolean; }; payload?: unknown; data?: unknown; error?: string; exception?: { name: string; message: string; code?: string; cause?: unknown; }; /** 实际使用的代理地址(由客户端注入;system 模式解析后为具体 URL,direct/none 为 undefined) */ proxy?: string; } export type AgentDebugTraceHandler = (trace: AgentDebugTrace) => void; /** A2A 客户端配置 */ export interface A2AClientOptions { /** 请求超时(毫秒),默认 300000(5分钟) */ timeout?: number; /** SSE 连接超时(毫秒),默认 30000(30秒) */ connectTimeout?: number; /** SSE 逐 chunk 读取超时(毫秒),默认 60000(60秒无数据视为流中断) */ chunkTimeout?: number; /** 自定义 fetch 实现(默认使用 globalThis.fetch) */ fetch?: typeof fetch; /** 自定义请求头(如认证 token);值支持 ${vars.x} / ${env.x} 模板 */ headers?: Record; /** 认证配置(自动转为 headers,与 headers 合并);value 支持 ${vars.x} / ${env.x} 模板 */ auth?: AuthConfig; /** * 运行时变量(如 { userId, userMail })。 * 用于解析 headers / auth 中的 ${vars.x} 占位符。 * 也可在每次调用(sendTask / sendTaskStreaming / getTask / cancelTask / discoverAgent)时按需覆盖。 */ vars?: Record; /** 调试 trace 回调;未传时保持原始执行流程 */ onDebugTrace?: AgentDebugTraceHandler; /** 代理 URL(如 http://127.0.0.1:7890),传入后通过 undici ProxyAgent 走代理,不传则直连 */ proxy?: string; } /** * 轻量 A2A 协议客户端 * * 用法: * const client = new A2AClient(); * const card = await client.discoverAgent('https://example.com'); * const task = await client.sendTask(card.url, { message: ... }); */ export declare class A2AClient { private timeout; private connectTimeout; private chunkTimeout; private fetchFn; /** 鉴权配置(构造时保存,发送时结合运行时变量解析) */ private authConfig?; /** 自定义请求头模板(值可含 ${vars.x} / ${env.x} 占位符,发送时解析) */ private headerTemplates; /** 默认运行时变量 */ private contextVars?; private onDebugTrace?; private proxyUrl?; private proxyDispatcher?; constructor(options?: A2AClientOptions); /** * 更新运行时变量(如 userId / userMail)。 * 后续请求将使用更新后的值解析 ${vars.x} 占位符。 */ setContextVars(vars: Record): void; /** 合并运行时变量:构造时默认 vars + 本次调用传入的 vars(后者优先) */ private mergeVars; /** 解析本次请求生效的请求头(合并 auth + 自定义头,并应用 ${vars.x}/${env.x} 模板) */ private resolveHeaders; /** 对请求体参数进行变量插值(${vars.x}/${env.x}/${x}),深拷贝不改原对象 */ private resolveBody; /** * 通过 base URL 发现远程 Agent * 自动请求 /.well-known/agent.json 并返回 AgentCard */ discoverAgent(baseUrl: string, vars?: Record): Promise; /** 同步发送任务(tasks/send),等待完成后返回完整 Task */ sendTask(agentUrl: string, params: A2ASendTaskParams, vars?: Record): Promise; /** * 流式发送任务(tasks/sendSubscribe),通过回调逐步接收事件 * 返回最后一个 status-update 事件(通常为 final 事件),用于提取最终结果 * * 增强特性: * - connectTimeout: SSE 连接超时(默认 30s) * - chunkTimeout: 逐 chunk 读取超时(默认 60s 无数据视为流中断) * - 外部 AbortSignal 联动(前端断开时中止连接和读取) * - 流异常时保留已接收事件(优雅降级) * * @param abortSignal 外部中止信号(前端断开时中止 SSE 读取) */ sendTaskStreaming(agentUrl: string, params: A2ASendTaskParams, onEvent?: (event: A2ATaskEvent) => void, abortSignal?: AbortSignal, vars?: Record): Promise; /** 查询任务状态(tasks/get) */ getTask(agentUrl: string, taskId: string, historyLength?: number, vars?: Record): Promise; /** 取消任务(tasks/cancel) */ cancelTask(agentUrl: string, taskId: string, vars?: Record): Promise; /** 解析 Agent Card URL */ private resolveAgentCardUrl; /** 发送 JSON-RPC 请求 */ private jsonRpcCall; /** 带 chunkTimeout 的 reader.read()(每次读取单独计时,收到数据即重置) */ private readChunkWithTimeout; /** 带超时的 fetch(自动应用代理 dispatcher,无代理时直连) */ private fetchWithTimeout; private emitDebugTrace; private headersToObject; private normalizeException; } //# sourceMappingURL=client.d.ts.map