import type { IncomingMessage, ServerResponse } from 'http'; import { type A2AServerAgentConfig, type A2AServerHandlerOptions, type A2ASendTaskParams, type A2ATask, type A2ARunContext, type AgentEngine, type AgentEvent, type RunOptions } from '@cicctencent/agent-core'; /** * 请求级上下文:透传原始 HTTP 请求,供多租户/鉴权场景解析租户标识。 * * 单租户应用可忽略该参数;多租户(如 Midway 的 applicationId) * 可从 `req` 上挂载的框架字段或 query 中解析出租户后再选择引擎。 */ export interface A2ARequestContext { /** 原始 HTTP 请求对象(Express 的 Request / Midway 的 ctx.req 等) */ req: IncomingMessage; } export interface A2AHttpHandlerOptions { /** * Agent Card 配置(名称、描述、URL、技能等)。 * * 传函数时每次请求动态求值(并可读取请求上下文,用于按租户返回不同卡片); * 传对象时在创建时求值一次(静态卡片)。 */ agentConfig: A2AServerAgentConfig | ((ctx: A2ARequestContext) => A2AServerAgentConfig | Promise); /** * 引擎工厂(便捷路径):根据 A2A 请求参数(及请求上下文)返回 AgentEngine 实例。 * * 第二个参数携带原始 HTTP 请求,多租户场景可据此解析租户后选择引擎。 * 与 `runTask` 二选一。 */ getEngine?: (params: A2ASendTaskParams, ctx: A2ARequestContext) => AgentEngine | Promise; /** * 自定义任务执行器(高级路径):由应用自行产出事件流。 * * 适用于运行需要经过应用服务层(多租户解析、线程落库、可观测性)的场景, * 内核仍负责任务状态机、心跳、取消与事件映射。与 `getEngine` 二选一。 */ runTask?: (runCtx: A2ARunContext, ctx: A2ARequestContext) => AsyncIterable; /** 可选:为每次 run 构建自定义 RunOptions(同样可读取请求上下文) */ buildRunOptions?: (params: A2ASendTaskParams, task: A2ATask, ctx: A2ARequestContext) => Partial | Promise>; /** 任务存储(默认内存) */ taskStore?: A2AServerHandlerOptions['taskStore']; /** * 自定义引擎事件 → A2A 事件映射(按事件类型覆盖内置映射)。 * 用于接入方定制事件形态或支持自有事件类型。 */ eventMappers?: A2AServerHandlerOptions['eventMappers']; /** 未识别事件的兜底策略,默认 `'drop'` */ unknownEventStrategy?: A2AServerHandlerOptions['unknownEventStrategy']; /** * SSE 心跳间隔(毫秒),默认 15000;设为 0 关闭。 * * 心跳以 SSE 注释帧(`: keep-alive`)下发,不污染业务事件流, * 用于防止 Nginx 等反向代理在长工具调用期间因空闲而断连。 */ heartbeatIntervalMs?: number; /** 任务生命周期钩子(落库、指标等) */ onTaskCreated?: A2AServerHandlerOptions['onTaskCreated']; onTaskUpdated?: A2AServerHandlerOptions['onTaskUpdated']; } /** * 创建 A2A HTTP 处理器。 * * 返回一个 (req, res) 函数,可直接挂载到 Express app 或 Midway controller。 * * @example Express * app.get('/.well-known/agent.json', handler); * app.post('/a2a', handler); * * @example Midway * @Get('/.well-known/agent.json') * async card() { return handler(this.ctx.request, this.ctx.response); } */ export declare function createA2AHttpHandler(options: A2AHttpHandlerOptions): (req: IncomingMessage, res: ServerResponse) => Promise; //# sourceMappingURL=a2a-http-adapter.d.ts.map