@absolutejs/a2a (英语)
A2A 协议 1.0 国家 绝对JS的JSON-RPC客户端和服务器. 执行 代理卡的发现、消息、流线、任务订阅、过滤和 添加任务列表、 推动通知配置、 认证扩展 卡片、明确版本和扩展谈判以及绝对JS代理 执行.
机构是所需的东道对等单位(>=0.7.1 <0.8.0),而不是捆绑的依赖.
因此,主机拥有一个行动分类账和一个全A2A的合同版本
以及其他运输工具 此包件测试精确 0.7.1· ;
支持新的机构未成年人需要明确释放兼容性.
参考议定书: https://a2a-protocol.org/latest/profitation.com. 互联网档案馆的存檔,存档日期2013-12-11
协议版本是故意被封住的. A2A 1.0更改了JSON-RPC 方法名称和 0. 3 的代理卡形状; 此软件包不沉默 降级,失去安全或行为.
发现和RPC客户端需要本地主机以外的 HTTPS, 拒绝证书 在URL和重定向中执行超时和响应大小限制,并验证 反应媒体类型。 服务器在解析正文前进行认证, 封顶请求 大小,将每个任务绑定起来,并将配置推到经认证的呼叫器,以及 拒绝发布未配置的可选能力.
import { createA2aHandler, createPostgresA2aTaskStore } from "@absolutejs/a2a";
const a2a = createA2aHandler({
path: "/a2a",
agentCard: {
name: "Support Agent",
description: "Resolves customer support cases.",
version: "1.0.0",
supportedInterfaces: [
{
protocolBinding: "JSONRPC",
protocolVersion: "1.0",
url: "https://example.com/a2a",
},
],
capabilities: {},
defaultInputModes: ["text/plain"],
defaultOutputModes: ["text/plain"],
skills: [],
},
authorize: verifyA2aBearer,
taskStore: createPostgresA2aTaskStore({ client }),
agency: { agency },
sendMessage: async ({ message }) => ({
task: await startSupportTask(message),
}),
});
同一处理器支持A2A 1.0 选取方法的广告 配置能力:
import { createMemoryA2aPushNotificationConfigStore } from "@absolutejs/a2a";
const a2a = createA2aHandler({
// ...the required configuration above
pushNotifications: {
store: createMemoryA2aPushNotificationConfigStore(),
},
extendedAgentCard: authenticatedCard,
sendStreamingMessage: async function* (request, context) {
yield* runAgentStream(request, context);
},
subscribeToTask: async function* (task, context) {
yield* subscribeToAgentTask(task, context);
},
});
用于生产推力配置存储,执行
A2aPushNotificationConfigStore 与授权键隔离相同的
包括记忆存储器。 Webhook 交付应独立解决 DNS,
屏蔽私有和链接- 本地目的地, 避免重定向, 每个都认证
请求,并重试一能.
当策略需要批准时, 服务器返回一个 A2A 扩展错误
工程处 actionId经批准后,将同一请求重新发送至
metadata[ABSOLUTE_AGENCY_EXTENSION].actionId;机构重新评估政策,
并记录执行收据.
任务所有权总是按授权结果键. 打电话的人不能 探测、 列出、 取消或覆盖另一个呼叫者的任务, 以及 PostgreSQL 更新 从解剖角度保护终端任务.
运营多代理机队的主机可以在 授权结果并使用单独的运算符视图。 标签从未读取 从 A2A 请求数据。 操作结果省略任务文物和历史,除非 明确要求,所以状态控制台不会意外检索任务 载荷.
const taskStore = createPostgresA2aTaskStore({ client });
const authorized = {
actor,
authorizationKey,
caller,
ok: true as const,
taskLabels: { clientId: actor.agentId, tenantId: tenant.id },
};
const posture = await taskStore.listForOperator({
labels: { tenantId: tenant.id },
pageSize: 25,
});