@harrylabsj/kiwi 0.7.4 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/a2a/client/client.d.ts +7 -2
- package/dist/a2a/client/client.js +34 -5
- package/dist/a2a/client/client.js.map +1 -1
- package/dist/a2a/client/jsonrpc.js +2 -1
- package/dist/a2a/client/jsonrpc.js.map +1 -1
- package/dist/a2a/client/parse.js +6 -2
- package/dist/a2a/client/parse.js.map +1 -1
- package/dist/a2a/client/types.d.ts +11 -0
- package/dist/a2a/client/url-policy.js +29 -0
- package/dist/a2a/client/url-policy.js.map +1 -1
- package/dist/a2a/node.d.ts +7 -0
- package/dist/a2a/node.js +32 -3
- package/dist/a2a/node.js.map +1 -1
- package/dist/a2a/server/card.d.ts +6 -0
- package/dist/a2a/server/card.js +42 -0
- package/dist/a2a/server/card.js.map +1 -1
- package/dist/a2a/server/errors.d.ts +12 -2
- package/dist/a2a/server/errors.js +13 -2
- package/dist/a2a/server/errors.js.map +1 -1
- package/dist/a2a/server/generic-responder.d.ts +48 -0
- package/dist/a2a/server/generic-responder.js +57 -0
- package/dist/a2a/server/generic-responder.js.map +1 -0
- package/dist/a2a/server/index.d.ts +2 -0
- package/dist/a2a/server/index.js +2 -0
- package/dist/a2a/server/index.js.map +1 -1
- package/dist/a2a/server/merchant-handler.d.ts +12 -1
- package/dist/a2a/server/merchant-handler.js +96 -22
- package/dist/a2a/server/merchant-handler.js.map +1 -1
- package/dist/a2a/server/pipeline.d.ts +28 -0
- package/dist/a2a/server/pipeline.js +66 -3
- package/dist/a2a/server/pipeline.js.map +1 -1
- package/dist/a2a/server/server.d.ts +12 -0
- package/dist/a2a/server/server.js +255 -11
- package/dist/a2a/server/server.js.map +1 -1
- package/dist/a2a/server/task-registry.d.ts +8 -0
- package/dist/a2a/server/task-registry.js +17 -0
- package/dist/a2a/server/task-registry.js.map +1 -1
- package/dist/a2a/server/throttle.d.ts +13 -0
- package/dist/a2a/server/throttle.js +41 -1
- package/dist/a2a/server/throttle.js.map +1 -1
- package/dist/a2a/server/types.d.ts +6 -0
- package/dist/a2a/v1/headers.d.ts +33 -0
- package/dist/a2a/v1/headers.js +56 -0
- package/dist/a2a/v1/headers.js.map +1 -0
- package/dist/a2a/v1/methods.d.ts +52 -0
- package/dist/a2a/v1/methods.js +75 -0
- package/dist/a2a/v1/methods.js.map +1 -0
- package/dist/a2a/v1/part.d.ts +48 -0
- package/dist/a2a/v1/part.js +63 -0
- package/dist/a2a/v1/part.js.map +1 -0
- package/dist/a2a/v1/types.d.ts +94 -0
- package/dist/a2a/v1/types.js +62 -0
- package/dist/a2a/v1/types.js.map +1 -0
- package/dist/agent/buyer/buyer-tools.js +92 -19
- package/dist/agent/buyer/buyer-tools.js.map +1 -1
- package/dist/agent/buyer/search-loop.js +17 -2
- package/dist/agent/buyer/search-loop.js.map +1 -1
- package/dist/agent/buyer/types.js +4 -1
- package/dist/agent/buyer/types.js.map +1 -1
- package/dist/agent/kernel.js +70 -25
- package/dist/agent/kernel.js.map +1 -1
- package/dist/agent/merchant/action-candidate.d.ts +10 -0
- package/dist/agent/merchant/action-candidate.js +36 -4
- package/dist/agent/merchant/action-candidate.js.map +1 -1
- package/dist/agent/merchant/merchant-client.d.ts +4 -1
- package/dist/agent/merchant/merchant-client.js +41 -29
- package/dist/agent/merchant/merchant-client.js.map +1 -1
- package/dist/agent/negotiation-chat.d.ts +11 -0
- package/dist/agent/negotiation-chat.js +15 -0
- package/dist/agent/negotiation-chat.js.map +1 -1
- package/dist/agent/system-prompt.js +1 -1
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/agent/write-gate.d.ts +4 -0
- package/dist/agent/write-gate.js +9 -3
- package/dist/agent/write-gate.js.map +1 -1
- package/dist/cli.d.ts +7 -0
- package/dist/cli.js +51 -7
- package/dist/cli.js.map +1 -1
- package/dist/commerce/data-source.d.ts +11 -1
- package/dist/commerce/data-source.js.map +1 -1
- package/dist/commerce/shopping-cli-source.js +10 -0
- package/dist/commerce/shopping-cli-source.js.map +1 -1
- package/dist/config/profile.d.ts +2 -0
- package/dist/config/profile.js +21 -7
- package/dist/config/profile.js.map +1 -1
- package/dist/demo/demo-runner.d.ts +81 -0
- package/dist/demo/demo-runner.js +344 -0
- package/dist/demo/demo-runner.js.map +1 -0
- package/dist/discovery/agent-card/types.d.ts +3 -0
- package/dist/discovery/agent-card/validate.js +7 -0
- package/dist/discovery/agent-card/validate.js.map +1 -1
- package/dist/discovery/catalog-source/register.d.ts +5 -1
- package/dist/discovery/catalog-source/register.js +14 -3
- package/dist/discovery/catalog-source/register.js.map +1 -1
- package/dist/discovery/resolve.js +3 -0
- package/dist/discovery/resolve.js.map +1 -1
- package/dist/discovery/ucp/resolver.d.ts +2 -0
- package/dist/discovery/ucp/resolver.js +3 -1
- package/dist/discovery/ucp/resolver.js.map +1 -1
- package/dist/handoff/ledger.js +23 -5
- package/dist/handoff/ledger.js.map +1 -1
- package/dist/handoff/order-record.js +26 -4
- package/dist/handoff/order-record.js.map +1 -1
- package/dist/handoff/transaction.js +13 -3
- package/dist/handoff/transaction.js.map +1 -1
- package/dist/negotiation/lease/store.js +14 -4
- package/dist/negotiation/lease/store.js.map +1 -1
- package/dist/negotiation/state/phase.js +12 -0
- package/dist/negotiation/state/phase.js.map +1 -1
- package/dist/net/safe-http.js +9 -1
- package/dist/net/safe-http.js.map +1 -1
- package/dist/operator/controller.d.ts +3 -0
- package/dist/operator/controller.js +18 -5
- package/dist/operator/controller.js.map +1 -1
- package/dist/product-buyer.d.ts +5 -0
- package/dist/product-buyer.js +1 -1
- package/dist/product-buyer.js.map +1 -1
- package/dist/product-cli.d.ts +10 -3
- package/dist/product-cli.js +13 -5
- package/dist/product-cli.js.map +1 -1
- package/dist/product-init.d.ts +6 -0
- package/dist/product-init.js +1 -1
- package/dist/product-init.js.map +1 -1
- package/dist/supervisor/manage.d.ts +5 -1
- package/dist/supervisor/manage.js +100 -9
- package/dist/supervisor/manage.js.map +1 -1
- package/dist/trust/identity/auth-verifier.d.ts +8 -0
- package/dist/trust/identity/auth-verifier.js +14 -0
- package/dist/trust/identity/auth-verifier.js.map +1 -1
- package/dist/weixin/credentials.js +15 -4
- package/dist/weixin/credentials.js.map +1 -1
- package/dist/weixin/ilink-client.d.ts +9 -0
- package/dist/weixin/ilink-client.js +46 -0
- package/dist/weixin/ilink-client.js.map +1 -1
- package/dist/weixin/login.js +5 -2
- package/dist/weixin/login.js.map +1 -1
- package/examples/profiles/merchant.deepseek.yaml +1 -0
- package/examples/profiles/merchant.fake.yaml +1 -0
- package/examples/profiles/merchant.local.yaml +1 -0
- package/package.json +8 -3
|
@@ -71,6 +71,8 @@ export const DEFAULT_THROTTLE_TIERS = {
|
|
|
71
71
|
};
|
|
72
72
|
export const DEFAULT_WINDOW_MS = 60_000;
|
|
73
73
|
export const DEFAULT_UNVERIFIED_SCALE = 0.5;
|
|
74
|
+
/** 审查 K-L3:限流 Map 全量清扫周期(毫秒,默认 60s)。 */
|
|
75
|
+
export const THROTTLE_SWEEP_INTERVAL_MS = 60_000;
|
|
74
76
|
// ---------------------------------------------------------------------------
|
|
75
77
|
// 工具
|
|
76
78
|
// ---------------------------------------------------------------------------
|
|
@@ -126,11 +128,17 @@ export class A2AServerThrottle {
|
|
|
126
128
|
malformedWindow = new Map();
|
|
127
129
|
/** per-identity 主键 → 当前在途任务数。 */
|
|
128
130
|
inflight = new Map();
|
|
131
|
+
sweepIntervalMs;
|
|
132
|
+
lastSweepAt = 0;
|
|
129
133
|
constructor(options = {}) {
|
|
130
134
|
this.windowMs = options.windowMs ?? DEFAULT_WINDOW_MS;
|
|
131
135
|
if (!Number.isFinite(this.windowMs) || this.windowMs <= 0) {
|
|
132
136
|
throw new TypeError("A2AServerThrottle: windowMs must be a positive number");
|
|
133
137
|
}
|
|
138
|
+
this.sweepIntervalMs = options.sweepIntervalMs ?? THROTTLE_SWEEP_INTERVAL_MS;
|
|
139
|
+
if (!Number.isFinite(this.sweepIntervalMs) || this.sweepIntervalMs <= 0) {
|
|
140
|
+
throw new TypeError("A2AServerThrottle: sweepIntervalMs must be a positive number");
|
|
141
|
+
}
|
|
134
142
|
this.unverifiedScale = options.unverifiedIdentityScale ?? DEFAULT_UNVERIFIED_SCALE;
|
|
135
143
|
if (!Number.isFinite(this.unverifiedScale) ||
|
|
136
144
|
this.unverifiedScale <= 0 ||
|
|
@@ -201,14 +209,41 @@ export class A2AServerThrottle {
|
|
|
201
209
|
arr.push(now);
|
|
202
210
|
map.set(key, arr);
|
|
203
211
|
}
|
|
212
|
+
/** 审查 K-L3:全量清扫已过期窗口的键——windowEntries 只在再次访问该键时
|
|
213
|
+
* 修剪,一次性身份轮换的键永不再次访问、永久残留(长驻服务内存无界增长)。
|
|
214
|
+
* 每 sweepIntervalMs 调一次,Map 有界于「最近活跃身份」。 */
|
|
215
|
+
sweep(now) {
|
|
216
|
+
const cutoff = now - this.windowMs;
|
|
217
|
+
for (const map of [this.identityWindow, this.domainWindow, this.malformedWindow]) {
|
|
218
|
+
for (const [key, arr] of map) {
|
|
219
|
+
let start = 0;
|
|
220
|
+
while (start < arr.length && arr[start] <= cutoff)
|
|
221
|
+
start += 1;
|
|
222
|
+
if (start === 0)
|
|
223
|
+
continue;
|
|
224
|
+
const kept = arr.slice(start);
|
|
225
|
+
if (kept.length === 0)
|
|
226
|
+
map.delete(key);
|
|
227
|
+
else
|
|
228
|
+
map.set(key, kept);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
sweepIfDue(now) {
|
|
233
|
+
if (now - this.lastSweepAt >= this.sweepIntervalMs) {
|
|
234
|
+
this.lastSweepAt = now;
|
|
235
|
+
this.sweep(now);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
204
238
|
// -- 公开判定 --------------------------------------------------------------
|
|
205
239
|
/**
|
|
206
240
|
* 限流判定(consume:允许的请求计入各自窗口)。判定顺序:malformed budget 阻断 →
|
|
207
241
|
* per-identity → per-domain。拒绝携带档位 retry_after。
|
|
208
242
|
*/
|
|
209
243
|
check(req) {
|
|
210
|
-
const tier = this.resolveTier(req);
|
|
211
244
|
const now = this.now();
|
|
245
|
+
this.sweepIfDue(now); // 审查 K-L3:限流 Map 有界
|
|
246
|
+
const tier = this.resolveTier(req);
|
|
212
247
|
const idKey = this.identityKeyOf(req);
|
|
213
248
|
if (this.isMalformedBlocked(idKey, tier.malformedBudget, now)) {
|
|
214
249
|
return {
|
|
@@ -251,6 +286,7 @@ export class A2AServerThrottle {
|
|
|
251
286
|
*/
|
|
252
287
|
recordMalformed(req) {
|
|
253
288
|
const now = this.now();
|
|
289
|
+
this.sweepIfDue(now); // 审查 K-L3
|
|
254
290
|
this.record(this.malformedWindow, this.identityKeyOf(req), now);
|
|
255
291
|
if (req.domain !== undefined) {
|
|
256
292
|
this.record(this.malformedWindow, this.domainKeyOf(req.domain), now);
|
|
@@ -285,5 +321,9 @@ export class A2AServerThrottle {
|
|
|
285
321
|
isMalformedBlocked(key, budget, now) {
|
|
286
322
|
return this.windowEntries(this.malformedWindow, key, now).length >= budget;
|
|
287
323
|
}
|
|
324
|
+
/** 诊断:当前 identity 窗口键数(审查 K-L3 内存有界性验证/监控用)。 */
|
|
325
|
+
get debugIdentityWindowSize() {
|
|
326
|
+
return this.identityWindow.size;
|
|
327
|
+
}
|
|
288
328
|
}
|
|
289
329
|
//# sourceMappingURL=throttle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/a2a/server/throttle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,GAEb,MAAM,sCAAsC,CAAC;AAuB9C,kCAAkC;AAClC,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACvD,EAAE,EAAE;QACF,yBAAyB,EAAE,EAAE;QAC7B,uBAAuB,EAAE,EAAE;QAC3B,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,CAAC;QAClB,iBAAiB,EAAE,CAAC;KACrB;IACD,EAAE,EAAE;QACF,yBAAyB,EAAE,EAAE;QAC7B,uBAAuB,EAAE,EAAE;QAC3B,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,CAAC;QAClB,iBAAiB,EAAE,CAAC;KACrB;IACD,EAAE,EAAE;QACF,yBAAyB,EAAE,EAAE;QAC7B,uBAAuB,EAAE,GAAG;QAC5B,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,EAAE;QACnB,iBAAiB,EAAE,CAAC;KACrB;IACD,EAAE,EAAE;QACF,yBAAyB,EAAE,GAAG;QAC9B,uBAAuB,EAAE,GAAG;QAC5B,kBAAkB,EAAE,EAAE;QACtB,eAAe,EAAE,EAAE;QACnB,iBAAiB,EAAE,CAAC;KACrB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/a2a/server/throttle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,GAEb,MAAM,sCAAsC,CAAC;AAuB9C,kCAAkC;AAClC,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACvD,EAAE,EAAE;QACF,yBAAyB,EAAE,EAAE;QAC7B,uBAAuB,EAAE,EAAE;QAC3B,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,CAAC;QAClB,iBAAiB,EAAE,CAAC;KACrB;IACD,EAAE,EAAE;QACF,yBAAyB,EAAE,EAAE;QAC7B,uBAAuB,EAAE,EAAE;QAC3B,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,CAAC;QAClB,iBAAiB,EAAE,CAAC;KACrB;IACD,EAAE,EAAE;QACF,yBAAyB,EAAE,EAAE;QAC7B,uBAAuB,EAAE,GAAG;QAC5B,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,EAAE;QACnB,iBAAiB,EAAE,CAAC;KACrB;IACD,EAAE,EAAE;QACF,yBAAyB,EAAE,GAAG;QAC9B,uBAAuB,EAAE,GAAG;QAC5B,kBAAkB,EAAE,EAAE;QACtB,eAAe,EAAE,EAAE;QACnB,iBAAiB,EAAE,CAAC;KACrB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,wCAAwC;AACxC,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AA2CjD,8EAA8E;AAC9E,KAAK;AACL,8EAA8E;AAE9E,+DAA+D;AAC/D,MAAM,UAAU,oBAAoB,CAAC,UAAmB;IACtD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACpE,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,SAAS,eAAe,CAAC,KAAiB,EAAE,IAAqB;IAC/D,MAAM,MAAM,GAA4B;QACtC,CAAC,2BAA2B,EAAE,IAAI,CAAC,yBAAyB,CAAC;QAC7D,CAAC,yBAAyB,EAAE,IAAI,CAAC,uBAAuB,CAAC;QACzD,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC;QAC/C,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC;QACzC,CAAC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC;KAC9C,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,SAAS,CACjB,2BAA2B,KAAK,IAAI,IAAI,wCAAwC,KAAK,GAAG,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IACX,QAAQ,CAAS;IACjB,KAAK,CAAoB;IACzB,eAAe,CAAS;IACxB,GAAG,CAAe;IAEnC,wDAAwD;IACvC,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9D,0BAA0B;IACT,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5D,0EAA0E;IACzD,eAAe,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/D,iCAAiC;IAChB,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,eAAe,CAAS;IACjC,WAAW,GAAG,CAAC,CAAC;IAExB,YAAY,UAA2B,EAAE;QACvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,0BAA0B,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,uBAAuB,IAAI,wBAAwB,CAAC;QACnF,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;YACtC,IAAI,CAAC,eAAe,IAAI,CAAC;YACzB,IAAI,CAAC,eAAe,GAAG,CAAC,EACxB,CAAC;YACD,MAAM,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7D,KAAK,MAAM,KAAK,IAAI,YAAY;YAAE,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,0EAA0E;IAE1E;;;;OAIG;IACK,aAAa,CAAC,GAAoB;QACxC,IAAI,GAAG,CAAC,gBAAgB,KAAK,IAAI;YAAE,OAAO,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/D,OAAO,QAAQ,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;IACrD,CAAC;IAEO,WAAW,CAAC,MAAc;QAChC,OAAO,OAAO,MAAM,EAAE,CAAC;IACzB,CAAC;IAED;;;OAGG;IACK,WAAW,CAAC,GAAoB;QACtC,MAAM,KAAK,GACT,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,MAAM,SAAS,GAAG,GAAG,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3F,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;YACnC,IAAI,GAAG;gBACL,GAAG,IAAI;gBACP,yBAAyB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,CAAC;gBAC1F,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC;aAC7E,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uEAAuE;IAEvE,0DAA0D;IAClD,aAAa,CAAC,GAA0B,EAAE,GAAW,EAAE,GAAW;QACxE,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,KAAK,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAE,IAAI,MAAM;YAAE,KAAK,IAAI,CAAC,CAAC;QAC/D,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;YAClC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,YAAY,CAClB,GAA0B,EAC1B,GAAW,EACX,KAAa,EACb,GAAW;QAEX,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;IAC3D,CAAC;IAEO,MAAM,CAAC,GAA0B,EAAE,GAAW,EAAE,GAAW;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC;IAED;;iDAE6C;IACrC,KAAK,CAAC,GAAW;QACvB,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACjF,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;gBAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,OAAO,KAAK,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAE,IAAI,MAAM;oBAAE,KAAK,IAAI,CAAC,CAAC;gBAC/D,IAAI,KAAK,KAAK,CAAC;oBAAE,SAAS;gBAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAClC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,GAAW;QAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACnD,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,yEAAyE;IAEzE;;;OAGG;IACH,KAAK,CAAC,GAAoB;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,MAAM,EAAE,+CAA+C;aACxD,CAAC;QACJ,CAAC;QACD,IACE,GAAG,CAAC,MAAM,KAAK,SAAS;YACxB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,EAChF,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,MAAM,EAAE,kDAAkD,GAAG,CAAC,MAAM,GAAG;aACxE,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,GAAG,CAAC,EAAE,CAAC;YACvF,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,MAAM,EAAE,kCAAkC;aAC3C,CAAC;QACJ,CAAC;QACD,IACE,GAAG,CAAC,MAAM,KAAK,SAAS;YACxB,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAC5B,IAAI,CAAC,uBAAuB,EAC5B,GAAG,CACJ,EACD,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,MAAM,EAAE,8CAA8C,GAAG,CAAC,MAAM,GAAG;aACpE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAChG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,GAAoB;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAChE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,SAAS,CAAC,GAAoB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACvC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,MAAM,EAAE,iCAAiC;aAC1C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACpC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,wCAAwC;IACxC,SAAS,CAAC,GAAoB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO;QAClD,IAAI,OAAO,KAAK,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;YACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEO,kBAAkB,CAAC,GAAW,EAAE,MAAc,EAAE,GAAW;QACjE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC;IAC7E,CAAC;IAED,gDAAgD;IAChD,IAAI,uBAAuB;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -34,6 +34,7 @@ import type { LedgerStore } from "../../negotiation/ledger/index.js";
|
|
|
34
34
|
import type { UcpPublishOptions } from "./ucp.js";
|
|
35
35
|
import type { A2AServerThrottle, ThrottleOptions } from "./throttle.js";
|
|
36
36
|
import type { TrustLevel } from "../../trust/identity/trust-policy.js";
|
|
37
|
+
import type { GenericMessageResponder } from "./generic-responder.js";
|
|
37
38
|
/** Agent Card 本地配置(基线 §26 / 子规范 §24.1 Discovery)。 */
|
|
38
39
|
export interface AgentCardConfig {
|
|
39
40
|
/** Agent 名称。 */
|
|
@@ -188,4 +189,9 @@ export interface A2AServerOptions {
|
|
|
188
189
|
* 传 ThrottleOptions 由 server 构造;也可直接注入 A2AServerThrottle 实例(测试用)。
|
|
189
190
|
*/
|
|
190
191
|
throttle?: ThrottleOptions | A2AServerThrottle;
|
|
192
|
+
/**
|
|
193
|
+
* 通用(非 KNP)A2A 消息响应器(issue 10 / TCK)。缺省用 spec 一致的回显;
|
|
194
|
+
* conformance SUT 注入 TCK 参考场景(messageId 前缀路由)。
|
|
195
|
+
*/
|
|
196
|
+
genericResponder?: GenericMessageResponder;
|
|
191
197
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
export declare const A2A_VERSION_HEADER = "A2A-Version";
|
|
17
|
+
export declare const A2A_EXTENSIONS_HEADER = "A2A-Extensions";
|
|
18
|
+
/** 支持的最高协议版本(本实现)。 */
|
|
19
|
+
export declare const SUPPORTED_A2A_VERSION = "1.0";
|
|
20
|
+
/** KNP extension path(与 Agent Card 声明单一来源)。 */
|
|
21
|
+
export declare const KNP_EXTENSION_PATH = "/a2a/extensions/negotiation/1.0";
|
|
22
|
+
/** 解析 `A2A-Version` 头:空/缺省 → undefined;否则 trim 后返回。 */
|
|
23
|
+
export declare function parseVersion(header: string | undefined): string | undefined;
|
|
24
|
+
/** 解析 `A2A-Extensions` 头:逗号分隔 URI,去空白,过滤空。 */
|
|
25
|
+
export declare function parseExtensions(header: string | undefined): string[];
|
|
26
|
+
/**
|
|
27
|
+
* 激活/拒绝扩展(fail-closed):
|
|
28
|
+
* - 请求声明了服务器**不支持的扩展** → 抛错(未知扩展拒绝);
|
|
29
|
+
* - 支持集内含 KNP extension path → `knpActive: true`。
|
|
30
|
+
*/
|
|
31
|
+
export declare function activateKnp(extensions: string[], supportedUris: ReadonlySet<string>): {
|
|
32
|
+
knpActive: boolean;
|
|
33
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* A2A 请求头(issue 05):`A2A-Version` 解析/校验、`A2A-Extensions` 激活 KNP /
|
|
18
|
+
* 未知扩展 fail-closed。KNP extension path 与 Card 声明单一来源
|
|
19
|
+
* (`discovery/agent-card/types.ts` 的 `KIWI_NEGOTIATION_EXTENSION_PATH`)。
|
|
20
|
+
*/
|
|
21
|
+
import { KIWI_NEGOTIATION_EXTENSION_PATH } from "../../discovery/agent-card/index.js";
|
|
22
|
+
export const A2A_VERSION_HEADER = "A2A-Version";
|
|
23
|
+
export const A2A_EXTENSIONS_HEADER = "A2A-Extensions";
|
|
24
|
+
/** 支持的最高协议版本(本实现)。 */
|
|
25
|
+
export const SUPPORTED_A2A_VERSION = "1.0";
|
|
26
|
+
/** KNP extension path(与 Agent Card 声明单一来源)。 */
|
|
27
|
+
export const KNP_EXTENSION_PATH = KIWI_NEGOTIATION_EXTENSION_PATH;
|
|
28
|
+
/** 解析 `A2A-Version` 头:空/缺省 → undefined;否则 trim 后返回。 */
|
|
29
|
+
export function parseVersion(header) {
|
|
30
|
+
if (header === undefined)
|
|
31
|
+
return undefined;
|
|
32
|
+
const v = header.trim();
|
|
33
|
+
return v === "" ? undefined : v;
|
|
34
|
+
}
|
|
35
|
+
/** 解析 `A2A-Extensions` 头:逗号分隔 URI,去空白,过滤空。 */
|
|
36
|
+
export function parseExtensions(header) {
|
|
37
|
+
if (header === undefined || header.trim() === "")
|
|
38
|
+
return [];
|
|
39
|
+
return header
|
|
40
|
+
.split(",")
|
|
41
|
+
.map((s) => s.trim())
|
|
42
|
+
.filter((s) => s !== "");
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 激活/拒绝扩展(fail-closed):
|
|
46
|
+
* - 请求声明了服务器**不支持的扩展** → 抛错(未知扩展拒绝);
|
|
47
|
+
* - 支持集内含 KNP extension path → `knpActive: true`。
|
|
48
|
+
*/
|
|
49
|
+
export function activateKnp(extensions, supportedUris) {
|
|
50
|
+
const unknown = extensions.filter((uri) => !supportedUris.has(uri));
|
|
51
|
+
if (unknown.length > 0) {
|
|
52
|
+
throw new Error(`unsupported A2A extension(s): ${unknown.join(", ")}`);
|
|
53
|
+
}
|
|
54
|
+
return { knpActive: extensions.some((uri) => uri.endsWith(KNP_EXTENSION_PATH)) };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../../src/a2a/v1/headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;GAIG;AAEH,OAAO,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAC;AAEtF,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AACtD,sBAAsB;AACtB,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAE3C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,+BAA+B,CAAC;AAElE,uDAAuD;AACvD,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACxB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,eAAe,CAAC,MAA0B;IACxD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC5D,OAAO,MAAM;SACV,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,UAAoB,EACpB,aAAkC;IAElC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* A2A JSON-RPC 方法名(issue 03)。
|
|
18
|
+
*
|
|
19
|
+
* 1.0 方法名与 0.3 legacy 不同:`SendMessage` vs `message/send`、`GetTask` vs
|
|
20
|
+
* `tasks/get` 等。本文件是方法名 + v1↔legacy 映射的单一来源——声明门禁
|
|
21
|
+
* (tests/a2a-version-declaration.test.ts)与双栈 client/server 都从这读取。
|
|
22
|
+
*/
|
|
23
|
+
/** A2A 1.0 方法名常量。 */
|
|
24
|
+
export declare const METHOD_SEND_MESSAGE = "SendMessage";
|
|
25
|
+
export declare const METHOD_GET_TASK = "GetTask";
|
|
26
|
+
export declare const METHOD_LIST_TASKS = "ListTasks";
|
|
27
|
+
export declare const METHOD_CANCEL_TASK = "CancelTask";
|
|
28
|
+
export declare const METHOD_SUBSCRIBE_TO_TASK = "SubscribeToTask";
|
|
29
|
+
/** A2A 1.0: GetExtendedAgentCard(issue 10 / TCK CARD-EXT-001)。 */
|
|
30
|
+
export declare const METHOD_GET_EXTENDED_AGENT_CARD = "GetExtendedAgentCard";
|
|
31
|
+
/** A2A 1.0: SendStreamingMessage(issue 10 / TCK JSONRPC-SSE-002:不支持流式 → -32004)。 */
|
|
32
|
+
export declare const METHOD_SEND_STREAMING_MESSAGE = "SendStreamingMessage";
|
|
33
|
+
/** A2A 1.0 push 通知配置方法(issue 10 / TCK JSONRPC-SSE-002:不支持推送 → -32003)。 */
|
|
34
|
+
export declare const METHOD_CREATE_PUSH_CONFIG = "CreateTaskPushNotificationConfig";
|
|
35
|
+
export declare const METHOD_GET_PUSH_CONFIG = "GetTaskPushNotificationConfig";
|
|
36
|
+
export declare const METHOD_LIST_PUSH_CONFIGS = "ListTaskPushNotificationConfigs";
|
|
37
|
+
export declare const METHOD_DELETE_PUSH_CONFIG = "DeleteTaskPushNotificationConfig";
|
|
38
|
+
/** A2A 0.3 legacy 方法名常量。 */
|
|
39
|
+
export declare const LEGACY_METHOD_SEND_MESSAGE = "message/send";
|
|
40
|
+
export declare const LEGACY_METHOD_GET_TASK = "tasks/get";
|
|
41
|
+
/** 1.0 → legacy 映射(1.0 方法名 → 0.3 方法名)。 */
|
|
42
|
+
export declare const V1_TO_LEGACY: Readonly<Record<string, string>>;
|
|
43
|
+
/** legacy → 1.0 映射(0.3 方法名 → 1.0 方法名)。 */
|
|
44
|
+
export declare const LEGACY_TO_V1: Readonly<Record<string, string>>;
|
|
45
|
+
/** 全部 1.0 方法名集合。 */
|
|
46
|
+
export declare const V1_METHODS: ReadonlySet<string>;
|
|
47
|
+
/** 全部 0.3 legacy 方法名集合。 */
|
|
48
|
+
export declare const LEGACY_METHODS: ReadonlySet<string>;
|
|
49
|
+
/** 给定方法名是否为 1.0 方法。 */
|
|
50
|
+
export declare function isV1Method(method: string): boolean;
|
|
51
|
+
/** 给定方法名是否为 0.3 legacy 方法。 */
|
|
52
|
+
export declare function isLegacyMethod(method: string): boolean;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* A2A JSON-RPC 方法名(issue 03)。
|
|
18
|
+
*
|
|
19
|
+
* 1.0 方法名与 0.3 legacy 不同:`SendMessage` vs `message/send`、`GetTask` vs
|
|
20
|
+
* `tasks/get` 等。本文件是方法名 + v1↔legacy 映射的单一来源——声明门禁
|
|
21
|
+
* (tests/a2a-version-declaration.test.ts)与双栈 client/server 都从这读取。
|
|
22
|
+
*/
|
|
23
|
+
/** A2A 1.0 方法名常量。 */
|
|
24
|
+
export const METHOD_SEND_MESSAGE = "SendMessage";
|
|
25
|
+
export const METHOD_GET_TASK = "GetTask";
|
|
26
|
+
export const METHOD_LIST_TASKS = "ListTasks";
|
|
27
|
+
export const METHOD_CANCEL_TASK = "CancelTask";
|
|
28
|
+
export const METHOD_SUBSCRIBE_TO_TASK = "SubscribeToTask";
|
|
29
|
+
/** A2A 1.0: GetExtendedAgentCard(issue 10 / TCK CARD-EXT-001)。 */
|
|
30
|
+
export const METHOD_GET_EXTENDED_AGENT_CARD = "GetExtendedAgentCard";
|
|
31
|
+
/** A2A 1.0: SendStreamingMessage(issue 10 / TCK JSONRPC-SSE-002:不支持流式 → -32004)。 */
|
|
32
|
+
export const METHOD_SEND_STREAMING_MESSAGE = "SendStreamingMessage";
|
|
33
|
+
/** A2A 1.0 push 通知配置方法(issue 10 / TCK JSONRPC-SSE-002:不支持推送 → -32003)。 */
|
|
34
|
+
export const METHOD_CREATE_PUSH_CONFIG = "CreateTaskPushNotificationConfig";
|
|
35
|
+
export const METHOD_GET_PUSH_CONFIG = "GetTaskPushNotificationConfig";
|
|
36
|
+
export const METHOD_LIST_PUSH_CONFIGS = "ListTaskPushNotificationConfigs";
|
|
37
|
+
export const METHOD_DELETE_PUSH_CONFIG = "DeleteTaskPushNotificationConfig";
|
|
38
|
+
/** A2A 0.3 legacy 方法名常量。 */
|
|
39
|
+
export const LEGACY_METHOD_SEND_MESSAGE = "message/send";
|
|
40
|
+
export const LEGACY_METHOD_GET_TASK = "tasks/get";
|
|
41
|
+
/** 1.0 → legacy 映射(1.0 方法名 → 0.3 方法名)。 */
|
|
42
|
+
export const V1_TO_LEGACY = {
|
|
43
|
+
[METHOD_SEND_MESSAGE]: LEGACY_METHOD_SEND_MESSAGE,
|
|
44
|
+
[METHOD_GET_TASK]: LEGACY_METHOD_GET_TASK,
|
|
45
|
+
};
|
|
46
|
+
/** legacy → 1.0 映射(0.3 方法名 → 1.0 方法名)。 */
|
|
47
|
+
export const LEGACY_TO_V1 = Object.fromEntries(Object.entries(V1_TO_LEGACY).map(([v1, legacy]) => [legacy, v1]));
|
|
48
|
+
/** 全部 1.0 方法名集合。 */
|
|
49
|
+
export const V1_METHODS = new Set([
|
|
50
|
+
METHOD_SEND_MESSAGE,
|
|
51
|
+
METHOD_GET_TASK,
|
|
52
|
+
METHOD_LIST_TASKS,
|
|
53
|
+
METHOD_CANCEL_TASK,
|
|
54
|
+
METHOD_SUBSCRIBE_TO_TASK,
|
|
55
|
+
METHOD_GET_EXTENDED_AGENT_CARD,
|
|
56
|
+
METHOD_SEND_STREAMING_MESSAGE,
|
|
57
|
+
METHOD_CREATE_PUSH_CONFIG,
|
|
58
|
+
METHOD_GET_PUSH_CONFIG,
|
|
59
|
+
METHOD_LIST_PUSH_CONFIGS,
|
|
60
|
+
METHOD_DELETE_PUSH_CONFIG,
|
|
61
|
+
]);
|
|
62
|
+
/** 全部 0.3 legacy 方法名集合。 */
|
|
63
|
+
export const LEGACY_METHODS = new Set([
|
|
64
|
+
LEGACY_METHOD_SEND_MESSAGE,
|
|
65
|
+
LEGACY_METHOD_GET_TASK,
|
|
66
|
+
]);
|
|
67
|
+
/** 给定方法名是否为 1.0 方法。 */
|
|
68
|
+
export function isV1Method(method) {
|
|
69
|
+
return V1_METHODS.has(method);
|
|
70
|
+
}
|
|
71
|
+
/** 给定方法名是否为 0.3 legacy 方法。 */
|
|
72
|
+
export function isLegacyMethod(method) {
|
|
73
|
+
return LEGACY_METHODS.has(method);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=methods.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"methods.js","sourceRoot":"","sources":["../../../src/a2a/v1/methods.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;GAMG;AAEH,qBAAqB;AACrB,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAC/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;AAC1D,kEAAkE;AAClE,MAAM,CAAC,MAAM,8BAA8B,GAAG,sBAAsB,CAAC;AACrE,oFAAoF;AACpF,MAAM,CAAC,MAAM,6BAA6B,GAAG,sBAAsB,CAAC;AACpE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,yBAAyB,GAAG,kCAAkC,CAAC;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG,+BAA+B,CAAC;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,iCAAiC,CAAC;AAC1E,MAAM,CAAC,MAAM,yBAAyB,GAAG,kCAAkC,CAAC;AAE5E,4BAA4B;AAC5B,MAAM,CAAC,MAAM,0BAA0B,GAAG,cAAc,CAAC;AACzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAAC;AAElD,0CAA0C;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAqC;IAC5D,CAAC,mBAAmB,CAAC,EAAE,0BAA0B;IACjD,CAAC,eAAe,CAAC,EAAE,sBAAsB;CAC1C,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAqC,MAAM,CAAC,WAAW,CAC9E,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CACjE,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAC;IACrD,mBAAmB;IACnB,eAAe;IACf,iBAAiB;IACjB,kBAAkB;IAClB,wBAAwB;IACxB,8BAA8B;IAC9B,6BAA6B;IAC7B,yBAAyB;IACzB,sBAAsB;IACtB,wBAAwB;IACxB,yBAAyB;CAC1B,CAAC,CAAC;AAEH,2BAA2B;AAC3B,MAAM,CAAC,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IACzD,0BAA0B;IAC1B,sBAAsB;CACvB,CAAC,CAAC;AAEH,uBAAuB;AACvB,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* A2A Part 编解码 + KNP DataPart 映射(issue 04,高风险点)。
|
|
18
|
+
*
|
|
19
|
+
* 0.3(`{kind:"text"|"data"}`)↔ 1.0(统一 Part,字段存在性判别)双向转换。
|
|
20
|
+
* KNP 载荷(`knp_envelope` / `agreement`)必须无损往返——磋商内核(envelope
|
|
21
|
+
* 解析/相位机)100% 复用,只在传输帧层转换。
|
|
22
|
+
*/
|
|
23
|
+
import type { A2APart } from "../client/types.js";
|
|
24
|
+
import type { A2AV1Part, DataPart } from "./types.js";
|
|
25
|
+
/** KNP 载荷承载的 mediaType(KNP envelope 是 JSON)。 */
|
|
26
|
+
export declare const KNP_DATA_MEDIA_TYPE = "application/json";
|
|
27
|
+
/**
|
|
28
|
+
* 0.3 Part → 1.0 统一 Part。
|
|
29
|
+
* - text → TextPart;
|
|
30
|
+
* - data → DataPart(data 原样 + KNP mediaType)。
|
|
31
|
+
*/
|
|
32
|
+
export declare function encodeV1Part(legacy: A2APart): A2AV1Part;
|
|
33
|
+
/**
|
|
34
|
+
* 1.0 统一 Part → 0.3 Part。
|
|
35
|
+
* - TextPart → text;
|
|
36
|
+
* - DataPart → data(原样还原)。
|
|
37
|
+
* - URLPart/FilePart 在 0.3 模型无等价(0.3 只建模 text/data)→ fail-closed。
|
|
38
|
+
*/
|
|
39
|
+
export declare function decodeV1Part(v1: A2AV1Part): A2APart;
|
|
40
|
+
/** 识别 KNP 载荷 Part(data 内含 knp_envelope 或 agreement)。 */
|
|
41
|
+
export declare function isKnpDataPart(part: A2AV1Part): part is DataPart;
|
|
42
|
+
/**
|
|
43
|
+
* 输入 Part 是否受支持(issue 10 / TCK CORE-SEND-003)。fail-closed:未知
|
|
44
|
+
* 形状一律不支持。TextPart 直接支持;DataPart 仅当 mediaType 为
|
|
45
|
+
* application/json(含 KNP);带其他 mediaType(如 raw/file/url)不支持 →
|
|
46
|
+
* server 返回 ContentTypeNotSupportedError(-32005),而非内部错误。
|
|
47
|
+
*/
|
|
48
|
+
export declare function isV1InputPartSupported(part: A2AV1Part): boolean;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/** KNP 载荷承载的 mediaType(KNP envelope 是 JSON)。 */
|
|
17
|
+
export const KNP_DATA_MEDIA_TYPE = "application/json";
|
|
18
|
+
/**
|
|
19
|
+
* 0.3 Part → 1.0 统一 Part。
|
|
20
|
+
* - text → TextPart;
|
|
21
|
+
* - data → DataPart(data 原样 + KNP mediaType)。
|
|
22
|
+
*/
|
|
23
|
+
export function encodeV1Part(legacy) {
|
|
24
|
+
if (legacy.kind === "text")
|
|
25
|
+
return { text: legacy.text };
|
|
26
|
+
return { data: legacy.data, mediaType: KNP_DATA_MEDIA_TYPE };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 1.0 统一 Part → 0.3 Part。
|
|
30
|
+
* - TextPart → text;
|
|
31
|
+
* - DataPart → data(原样还原)。
|
|
32
|
+
* - URLPart/FilePart 在 0.3 模型无等价(0.3 只建模 text/data)→ fail-closed。
|
|
33
|
+
*/
|
|
34
|
+
export function decodeV1Part(v1) {
|
|
35
|
+
if ("text" in v1)
|
|
36
|
+
return { kind: "text", text: v1.text };
|
|
37
|
+
if ("data" in v1)
|
|
38
|
+
return { kind: "data", data: v1.data };
|
|
39
|
+
throw new Error(`v1 Part 无法映射到 0.3 模型(0.3 只建模 text/data):${JSON.stringify(v1).slice(0, 200)}`);
|
|
40
|
+
}
|
|
41
|
+
/** 识别 KNP 载荷 Part(data 内含 knp_envelope 或 agreement)。 */
|
|
42
|
+
export function isKnpDataPart(part) {
|
|
43
|
+
if (!("data" in part))
|
|
44
|
+
return false;
|
|
45
|
+
return "knp_envelope" in part.data || "agreement" in part.data;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 输入 Part 是否受支持(issue 10 / TCK CORE-SEND-003)。fail-closed:未知
|
|
49
|
+
* 形状一律不支持。TextPart 直接支持;DataPart 仅当 mediaType 为
|
|
50
|
+
* application/json(含 KNP);带其他 mediaType(如 raw/file/url)不支持 →
|
|
51
|
+
* server 返回 ContentTypeNotSupportedError(-32005),而非内部错误。
|
|
52
|
+
*/
|
|
53
|
+
export function isV1InputPartSupported(part) {
|
|
54
|
+
if (typeof part !== "object" || part === null)
|
|
55
|
+
return false;
|
|
56
|
+
if ("text" in part)
|
|
57
|
+
return true;
|
|
58
|
+
const mediaType = "mediaType" in part && typeof part.mediaType === "string" ? part.mediaType : undefined;
|
|
59
|
+
if (mediaType === undefined)
|
|
60
|
+
return false;
|
|
61
|
+
return mediaType.startsWith("text/") || mediaType === "application/json";
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=part.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"part.js","sourceRoot":"","sources":["../../../src/a2a/v1/part.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAaH,gDAAgD;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACzD,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,EAAa;IACxC,IAAI,MAAM,IAAI,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IACzD,IAAI,MAAM,IAAI,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,IAAI,KAAK,CACb,2CAA2C,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC9E,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,cAAc,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAe;IACpD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,SAAS,GACb,WAAW,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,KAAK,kBAAkB,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* A2A 1.0 域模型(issue 02)。
|
|
18
|
+
*
|
|
19
|
+
* 与 0.3(`src/a2a/client/types.ts`)的差异:
|
|
20
|
+
* - **统一 Part**:字段存在性判别(有 `text`=Text / `data`=Data / `url`=URL /
|
|
21
|
+
* `raw`=File),**无 `kind` 字段**;`mimeType` → `mediaType`;
|
|
22
|
+
* - **Role**:`ROLE_AGENT` / `ROLE_USER` 命名常量;
|
|
23
|
+
* - **TaskState**:大写下划线枚举,含 1.0 新增 `REJECTED` / `AUTH_REQUIRED` /
|
|
24
|
+
* `UNSPECIFIED`(0.3 的 `unknown` 在 1.0 语义为 `UNSPECIFIED`)。
|
|
25
|
+
*
|
|
26
|
+
* 词表单一来源(仿照 `handoff/destination.ts` 纪律):本文件是 v1 词表的唯一
|
|
27
|
+
* 权威,编解码/双栈/TCK 全部从这里导入,不散落字符串。
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* A2A 1.0 Role(wire 值 = proto 枚举名,官方 SDK `@a2a-js/sdk` 如此序列化)。
|
|
31
|
+
* 输入侧兼容小写 `user`/`agent`(server 归一化,见 normalizeV1Role)。
|
|
32
|
+
*/
|
|
33
|
+
export declare const ROLE_AGENT: "ROLE_AGENT";
|
|
34
|
+
export declare const ROLE_USER: "ROLE_USER";
|
|
35
|
+
export type A2ARole = typeof ROLE_AGENT | typeof ROLE_USER;
|
|
36
|
+
/**
|
|
37
|
+
* A2A 1.0 TaskState(wire 值 = proto 枚举名 `TASK_STATE_*`,官方 SDK 如此)。
|
|
38
|
+
* 0.3 `unknown` → 1.0 `TASK_STATE_UNSPECIFIED`。
|
|
39
|
+
*/
|
|
40
|
+
export declare const A2A_TASK_STATES: readonly ["TASK_STATE_SUBMITTED", "TASK_STATE_WORKING", "TASK_STATE_INPUT_REQUIRED", "TASK_STATE_COMPLETED", "TASK_STATE_CANCELED", "TASK_STATE_FAILED", "TASK_STATE_REJECTED", "TASK_STATE_AUTH_REQUIRED", "TASK_STATE_UNSPECIFIED"];
|
|
41
|
+
export type A2ATaskState = (typeof A2A_TASK_STATES)[number];
|
|
42
|
+
/** 0.3 内部小写状态 → 1.0 wire TaskState(server 出站用)。 */
|
|
43
|
+
export declare const LEGACY_TO_V1_STATE: Readonly<Record<string, string>>;
|
|
44
|
+
/** 1.0 wire TaskState → 0.3 内部小写状态(client 入站用)。 */
|
|
45
|
+
export declare const V1_STATE_TO_LEGACY: Readonly<Record<string, string>>;
|
|
46
|
+
/** A2A 1.0 统一 Part:字段存在性判别(无 `kind`)。 */
|
|
47
|
+
export type A2AV1Part = TextPart | DataPart | FilePart | URLPart;
|
|
48
|
+
/** Text Part(有 `text` 字段即判别)。 */
|
|
49
|
+
export interface TextPart {
|
|
50
|
+
text: string;
|
|
51
|
+
}
|
|
52
|
+
/** Data Part(有 `data` 字段即判别;KNP 载荷载体,`mediaType` 可选)。 */
|
|
53
|
+
export interface DataPart {
|
|
54
|
+
data: Record<string, unknown>;
|
|
55
|
+
mediaType?: string;
|
|
56
|
+
}
|
|
57
|
+
/** File Part(有 `raw` 字段即判别;`raw` 为 base64,必须带 `mediaType`)。 */
|
|
58
|
+
export interface FilePart {
|
|
59
|
+
raw: string;
|
|
60
|
+
mediaType: string;
|
|
61
|
+
}
|
|
62
|
+
/** URL Part(有 `url` 字段即判别)。 */
|
|
63
|
+
export interface URLPart {
|
|
64
|
+
url: string;
|
|
65
|
+
}
|
|
66
|
+
/** A2A 1.0 Message。 */
|
|
67
|
+
export interface A2AV1Message {
|
|
68
|
+
role: A2ARole;
|
|
69
|
+
parts: A2AV1Part[];
|
|
70
|
+
messageId: string;
|
|
71
|
+
taskId?: string;
|
|
72
|
+
contextId?: string;
|
|
73
|
+
metadata?: Record<string, unknown>;
|
|
74
|
+
}
|
|
75
|
+
/** A2A 1.0 TaskStatus。 */
|
|
76
|
+
export interface A2AV1TaskStatus {
|
|
77
|
+
state: A2ATaskState;
|
|
78
|
+
message?: A2AV1Message;
|
|
79
|
+
timestamp?: string;
|
|
80
|
+
}
|
|
81
|
+
/** A2A 1.0 Artifact。 */
|
|
82
|
+
export interface A2AV1Artifact {
|
|
83
|
+
parts: A2AV1Part[];
|
|
84
|
+
artifactId?: string;
|
|
85
|
+
metadata?: Record<string, unknown>;
|
|
86
|
+
}
|
|
87
|
+
/** A2A 1.0 Task。 */
|
|
88
|
+
export interface A2AV1Task {
|
|
89
|
+
id: string;
|
|
90
|
+
status: A2AV1TaskStatus;
|
|
91
|
+
artifacts?: A2AV1Artifact[];
|
|
92
|
+
contextId?: string;
|
|
93
|
+
metadata?: Record<string, unknown>;
|
|
94
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* A2A 1.0 域模型(issue 02)。
|
|
18
|
+
*
|
|
19
|
+
* 与 0.3(`src/a2a/client/types.ts`)的差异:
|
|
20
|
+
* - **统一 Part**:字段存在性判别(有 `text`=Text / `data`=Data / `url`=URL /
|
|
21
|
+
* `raw`=File),**无 `kind` 字段**;`mimeType` → `mediaType`;
|
|
22
|
+
* - **Role**:`ROLE_AGENT` / `ROLE_USER` 命名常量;
|
|
23
|
+
* - **TaskState**:大写下划线枚举,含 1.0 新增 `REJECTED` / `AUTH_REQUIRED` /
|
|
24
|
+
* `UNSPECIFIED`(0.3 的 `unknown` 在 1.0 语义为 `UNSPECIFIED`)。
|
|
25
|
+
*
|
|
26
|
+
* 词表单一来源(仿照 `handoff/destination.ts` 纪律):本文件是 v1 词表的唯一
|
|
27
|
+
* 权威,编解码/双栈/TCK 全部从这里导入,不散落字符串。
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* A2A 1.0 Role(wire 值 = proto 枚举名,官方 SDK `@a2a-js/sdk` 如此序列化)。
|
|
31
|
+
* 输入侧兼容小写 `user`/`agent`(server 归一化,见 normalizeV1Role)。
|
|
32
|
+
*/
|
|
33
|
+
export const ROLE_AGENT = "ROLE_AGENT";
|
|
34
|
+
export const ROLE_USER = "ROLE_USER";
|
|
35
|
+
/**
|
|
36
|
+
* A2A 1.0 TaskState(wire 值 = proto 枚举名 `TASK_STATE_*`,官方 SDK 如此)。
|
|
37
|
+
* 0.3 `unknown` → 1.0 `TASK_STATE_UNSPECIFIED`。
|
|
38
|
+
*/
|
|
39
|
+
export const A2A_TASK_STATES = [
|
|
40
|
+
"TASK_STATE_SUBMITTED",
|
|
41
|
+
"TASK_STATE_WORKING",
|
|
42
|
+
"TASK_STATE_INPUT_REQUIRED",
|
|
43
|
+
"TASK_STATE_COMPLETED",
|
|
44
|
+
"TASK_STATE_CANCELED",
|
|
45
|
+
"TASK_STATE_FAILED",
|
|
46
|
+
"TASK_STATE_REJECTED",
|
|
47
|
+
"TASK_STATE_AUTH_REQUIRED",
|
|
48
|
+
"TASK_STATE_UNSPECIFIED",
|
|
49
|
+
];
|
|
50
|
+
/** 0.3 内部小写状态 → 1.0 wire TaskState(server 出站用)。 */
|
|
51
|
+
export const LEGACY_TO_V1_STATE = {
|
|
52
|
+
submitted: "TASK_STATE_SUBMITTED",
|
|
53
|
+
working: "TASK_STATE_WORKING",
|
|
54
|
+
"input-required": "TASK_STATE_INPUT_REQUIRED",
|
|
55
|
+
completed: "TASK_STATE_COMPLETED",
|
|
56
|
+
canceled: "TASK_STATE_CANCELED",
|
|
57
|
+
failed: "TASK_STATE_FAILED",
|
|
58
|
+
unknown: "TASK_STATE_UNSPECIFIED",
|
|
59
|
+
};
|
|
60
|
+
/** 1.0 wire TaskState → 0.3 内部小写状态(client 入站用)。 */
|
|
61
|
+
export const V1_STATE_TO_LEGACY = Object.fromEntries(Object.entries(LEGACY_TO_V1_STATE).map(([legacy, v1]) => [v1, legacy]));
|
|
62
|
+
//# sourceMappingURL=types.js.map
|