@harrylabsj/kiwi 0.6.1 → 0.7.0
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/README.md +28 -0
- package/contracts/candidate-agent-dto-1.0.README.md +12 -8
- package/contracts/conformance/python-service/README.md +19 -0
- package/contracts/conformance/python-service/run.py +134 -0
- package/contracts/kiwi-catalog/1.0/listing-record.schema.json +11 -1
- package/contracts/kiwi-contracts.lock.json +7 -0
- package/contracts/manifest.json +61 -0
- package/contracts/vectors/candidate-agent.invalid-private-field.json +7 -0
- package/contracts/vectors/candidate-agent.valid.json +26 -0
- package/dist/a2a/client/client.js +39 -34
- package/dist/a2a/client/client.js.map +1 -1
- package/dist/a2a/client/url-policy.d.ts +8 -1
- package/dist/a2a/client/url-policy.js +18 -2
- package/dist/a2a/client/url-policy.js.map +1 -1
- package/dist/a2a/clock.d.ts +30 -0
- package/dist/a2a/clock.js +39 -0
- package/dist/a2a/clock.js.map +1 -0
- package/dist/a2a/negotiate.d.ts +6 -0
- package/dist/a2a/negotiate.js +10 -12
- package/dist/a2a/negotiate.js.map +1 -1
- package/dist/a2a/node.d.ts +20 -2
- package/dist/a2a/node.js +165 -19
- package/dist/a2a/node.js.map +1 -1
- package/dist/a2a/server/auth.js +11 -2
- package/dist/a2a/server/auth.js.map +1 -1
- package/dist/a2a/server/merchant-handler.d.ts +4 -0
- package/dist/a2a/server/merchant-handler.js +283 -27
- package/dist/a2a/server/merchant-handler.js.map +1 -1
- package/dist/a2a/server/pipeline.d.ts +17 -0
- package/dist/a2a/server/pipeline.js +89 -1
- package/dist/a2a/server/pipeline.js.map +1 -1
- package/dist/a2a/server/ucp.d.ts +30 -2
- package/dist/a2a/server/ucp.js +23 -14
- package/dist/a2a/server/ucp.js.map +1 -1
- package/dist/agent/agent-db.js +5 -0
- package/dist/agent/agent-db.js.map +1 -1
- package/dist/agent/buyer/buyer-tools.d.ts +5 -0
- package/dist/agent/buyer/buyer-tools.js +75 -7
- package/dist/agent/buyer/buyer-tools.js.map +1 -1
- package/dist/agent/buyer/search-loop.d.ts +3 -0
- package/dist/agent/buyer/search-loop.js +129 -0
- package/dist/agent/buyer/search-loop.js.map +1 -1
- package/dist/agent/buyer/task-store.d.ts +2 -0
- package/dist/agent/buyer/task-store.js +11 -7
- package/dist/agent/buyer/task-store.js.map +1 -1
- package/dist/agent/kernel.d.ts +6 -0
- package/dist/agent/kernel.js +100 -10
- package/dist/agent/kernel.js.map +1 -1
- package/dist/agent/memory/schema.d.ts +1 -1
- package/dist/agent/memory/schema.js +7 -1
- package/dist/agent/memory/schema.js.map +1 -1
- package/dist/agent/memory/store.d.ts +5 -0
- package/dist/agent/memory/store.js +29 -1
- package/dist/agent/memory/store.js.map +1 -1
- package/dist/agent/merchant/action-candidate.js +15 -1
- package/dist/agent/merchant/action-candidate.js.map +1 -1
- package/dist/agent/merchant/merchant-client.js +22 -4
- package/dist/agent/merchant/merchant-client.js.map +1 -1
- package/dist/agent/merchant/types.d.ts +5 -2
- package/dist/agent/merchant/types.js +6 -2
- package/dist/agent/merchant/types.js.map +1 -1
- package/dist/agent/negotiation-chat.js +34 -14
- package/dist/agent/negotiation-chat.js.map +1 -1
- package/dist/cli.d.ts +56 -0
- package/dist/cli.js +51 -3
- package/dist/cli.js.map +1 -1
- package/dist/commerce/data-source.d.ts +3 -0
- package/dist/commerce/data-source.js.map +1 -1
- package/dist/commerce/http-client.js +35 -31
- package/dist/commerce/http-client.js.map +1 -1
- package/dist/commerce/shopping-cli-source.js +63 -46
- package/dist/commerce/shopping-cli-source.js.map +1 -1
- package/dist/counterparty/a2a-direct/index.d.ts +5 -0
- package/dist/counterparty/a2a-direct/index.js +24 -0
- package/dist/counterparty/a2a-direct/index.js.map +1 -1
- package/dist/counterparty/shopping-cli-hosted/index.js +52 -19
- package/dist/counterparty/shopping-cli-hosted/index.js.map +1 -1
- package/dist/discovery/catalog-source/kiwi-record.d.ts +2 -0
- package/dist/discovery/catalog-source/kiwi-record.js.map +1 -1
- package/dist/discovery/catalog-source/kiwi-source.js +39 -35
- package/dist/discovery/catalog-source/kiwi-source.js.map +1 -1
- package/dist/discovery/catalog-source/register.js +12 -1
- package/dist/discovery/catalog-source/register.js.map +1 -1
- package/dist/discovery/catalog-source/source.js +39 -35
- package/dist/discovery/catalog-source/source.js.map +1 -1
- package/dist/discovery/resolve.d.ts +15 -0
- package/dist/discovery/resolve.js +59 -35
- package/dist/discovery/resolve.js.map +1 -1
- package/dist/discovery/ucp/index.d.ts +1 -1
- package/dist/discovery/ucp/index.js +1 -1
- package/dist/discovery/ucp/index.js.map +1 -1
- package/dist/discovery/ucp/resolver.d.ts +5 -0
- package/dist/discovery/ucp/resolver.js +65 -38
- package/dist/discovery/ucp/resolver.js.map +1 -1
- package/dist/discovery/ucp/vendor.d.ts +1 -1
- package/dist/discovery/ucp/vendor.js +1 -1
- package/dist/handoff/delivery.d.ts +4 -2
- package/dist/handoff/delivery.js +6 -1
- package/dist/handoff/delivery.js.map +1 -1
- package/dist/handoff/index.d.ts +1 -1
- package/dist/handoff/index.js +1 -1
- package/dist/handoff/index.js.map +1 -1
- package/dist/handoff/ledger.d.ts +9 -0
- package/dist/handoff/ledger.js +66 -0
- package/dist/handoff/ledger.js.map +1 -1
- package/dist/handoff/transaction.d.ts +21 -3
- package/dist/handoff/transaction.js +37 -5
- package/dist/handoff/transaction.js.map +1 -1
- package/dist/handoff/ucp-checkout/channel.js +15 -10
- package/dist/handoff/ucp-checkout/channel.js.map +1 -1
- package/dist/negotiation/jcs.js +11 -8
- package/dist/negotiation/jcs.js.map +1 -1
- package/dist/negotiation/lease/store.d.ts +25 -0
- package/dist/negotiation/lease/store.js +101 -0
- package/dist/negotiation/lease/store.js.map +1 -0
- package/dist/negotiation/recovery/recover.js +25 -1
- package/dist/negotiation/recovery/recover.js.map +1 -1
- package/dist/operator/runner.d.ts +11 -0
- package/dist/operator/runner.js +20 -1
- package/dist/operator/runner.js.map +1 -1
- package/dist/product-catalog.d.ts +1 -1
- package/dist/product-catalog.js +3 -3
- package/dist/product-catalog.js.map +1 -1
- package/dist/product-cli.d.ts +1 -1
- package/dist/product-cli.js +1 -1
- package/dist/product-publish.d.ts +5 -0
- package/dist/product-publish.js +112 -7
- package/dist/product-publish.js.map +1 -1
- package/dist/supervisor/stack-config.d.ts +6 -1
- package/dist/supervisor/stack-config.js +11 -3
- package/dist/supervisor/stack-config.js.map +1 -1
- package/dist/trust/identity/message-signature.js +17 -0
- package/dist/trust/identity/message-signature.js.map +1 -1
- package/dist/weixin/channel.d.ts +2 -0
- package/dist/weixin/channel.js +17 -3
- package/dist/weixin/channel.js.map +1 -1
- package/dist/weixin/cli-weixin.js +2 -0
- package/dist/weixin/cli-weixin.js.map +1 -1
- package/dist/weixin/ilink-client.d.ts +1 -1
- package/dist/weixin/ilink-client.js +26 -1
- package/dist/weixin/ilink-client.js.map +1 -1
- package/dist/weixin/login.d.ts +3 -0
- package/dist/weixin/login.js +1 -1
- package/dist/weixin/login.js.map +1 -1
- package/package.json +9 -2
- package/dist/commerce/erp-source.d.ts +0 -51
- package/dist/commerce/erp-source.js +0 -184
- package/dist/commerce/erp-source.js.map +0 -1
- package/dist/commerce/local-db-source.d.ts +0 -50
- package/dist/commerce/local-db-source.js +0 -162
- package/dist/commerce/local-db-source.js.map +0 -1
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
* 现实单调时钟(审查 BUG-01):生产路径不得使用固定日期基准——此前
|
|
18
|
+
* node.ts / negotiate.ts 各自实现 monotonicNow,从固定 2026-08-07 起步、
|
|
19
|
+
* 每次调用只 +1ms。第三方会收到历史时间戳或已过期报价,本机又用同一假
|
|
20
|
+
* 时钟判断过期,形成"本机接受、外部拒绝"的互操作分裂;重启还会把时钟
|
|
21
|
+
* 重置回同一历史起点。
|
|
22
|
+
*
|
|
23
|
+
* 语义:返回墙钟 ISO 时间,但保证同进程内严格单调(max(墙钟, prev+1))——
|
|
24
|
+
* 同一毫秒的多个事件不会产生相同时间戳(ledger 内容去重依赖相同内容,
|
|
25
|
+
* 时间戳不参与去重键,但 created_at 必须与现实时间一致)。
|
|
26
|
+
*
|
|
27
|
+
* 测试可注入固定时间源:createMonotonicClock(() => Date.parse("..."))。
|
|
28
|
+
*/
|
|
29
|
+
/** 构造现实单调时钟:返回 ISO 字符串,同进程内严格递增。 */
|
|
30
|
+
export function createMonotonicClock(nowFn = Date.now) {
|
|
31
|
+
let previous = 0;
|
|
32
|
+
return () => {
|
|
33
|
+
const wall = nowFn();
|
|
34
|
+
const t = Number.isFinite(wall) && wall > previous ? wall : previous + 1;
|
|
35
|
+
previous = t;
|
|
36
|
+
return new Date(t).toISOString();
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=clock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/a2a/clock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;GAYG;AAEH,oCAAoC;AACpC,MAAM,UAAU,oBAAoB,CAAC,QAAsB,IAAI,CAAC,GAAG;IACjE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,OAAO,GAAG,EAAE;QACV,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QACzE,QAAQ,GAAG,CAAC,CAAC;QACb,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/a2a/negotiate.d.ts
CHANGED
|
@@ -41,6 +41,12 @@ export interface NegotiateOptions {
|
|
|
41
41
|
deliveryBefore?: string;
|
|
42
42
|
/** 发送方身份(缺省 buyer:a2a-demo)。 */
|
|
43
43
|
senderIdentity?: string;
|
|
44
|
+
/**
|
|
45
|
+
* 本地开发 loopback 放行(透传给 AgentDiscovery;缺省 false,fail-closed)。
|
|
46
|
+
* 仅显式传 true 允许发现阶段访问 127.0.0.1 / ::1 / localhost 上的 Agent Card
|
|
47
|
+
* 与 A2A direct interface;私网/保留网段始终拒绝。
|
|
48
|
+
*/
|
|
49
|
+
allowLoopback?: boolean;
|
|
44
50
|
}
|
|
45
51
|
export interface NegotiateResult {
|
|
46
52
|
ok: boolean;
|
package/dist/a2a/negotiate.js
CHANGED
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
* 确定性(不依赖 LLM):与 a2a-agent.mjs 同一语义,供对话内 /negotiate 复用。
|
|
22
22
|
*/
|
|
23
23
|
import { mkdtempSync, rmSync } from "node:fs";
|
|
24
|
+
import { createMonotonicClock } from "./clock.js";
|
|
25
|
+
import { FileLeaseStore } from "../negotiation/lease/store.js";
|
|
24
26
|
import { tmpdir } from "node:os";
|
|
25
27
|
import path from "node:path";
|
|
26
28
|
import { ShoppingCliCatalogSource } from "../discovery/catalog-source/index.js";
|
|
@@ -76,15 +78,6 @@ export function summarizeNegotiation(result, locale = detectLocale()) {
|
|
|
76
78
|
`Agreement is nonbinding — no order, no inventory reservation, no payment authorization (§41 #25/#26/#27)`,
|
|
77
79
|
].join("\n");
|
|
78
80
|
}
|
|
79
|
-
function monotonicNow() {
|
|
80
|
-
let tick = 0;
|
|
81
|
-
const base = Date.parse("2026-08-07T00:00:00.000Z");
|
|
82
|
-
return () => {
|
|
83
|
-
const t = new Date(base + tick);
|
|
84
|
-
tick += 1;
|
|
85
|
-
return t.toISOString();
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
81
|
function seedEnvelope(seed) {
|
|
89
82
|
return finalizeEnvelope({
|
|
90
83
|
capability: NEGOTIATE_CAPABILITY,
|
|
@@ -170,7 +163,7 @@ export async function negotiateWithAgent(options) {
|
|
|
170
163
|
const deliveryBefore = options.deliveryBefore ?? NEGOTIATE_DELIVERY_BEFORE;
|
|
171
164
|
const senderIdentity = options.senderIdentity ?? "buyer:a2a-demo";
|
|
172
165
|
const dir = mkdtempSync(path.join(tmpdir(), "kiwi-a2a-negotiate-"));
|
|
173
|
-
const now =
|
|
166
|
+
const now = createMonotonicClock();
|
|
174
167
|
const ledger = new LedgerStore({ dir, now });
|
|
175
168
|
const idempotency = new IdempotencyStore({ dir, now });
|
|
176
169
|
const steps = [];
|
|
@@ -183,7 +176,10 @@ export async function negotiateWithAgent(options) {
|
|
|
183
176
|
// CD #27:Buyer 可注入 KiwiCatalogSource(listing → owner_agent_id → getRecord →
|
|
184
177
|
// resolveViaCatalog fresh verify 全链);缺省 legacy ShoppingCliCatalogSource。
|
|
185
178
|
const source = options.catalogSource ?? new ShoppingCliCatalogSource({ baseUrl: options.catalog });
|
|
186
|
-
const discovery = new AgentDiscovery({
|
|
179
|
+
const discovery = new AgentDiscovery({
|
|
180
|
+
allowLoopback: options.allowLoopback === true,
|
|
181
|
+
catalog: { source, includeBlocked: false },
|
|
182
|
+
});
|
|
187
183
|
const resolved = await discovery.resolveViaCatalog();
|
|
188
184
|
if (resolved.length === 0) {
|
|
189
185
|
return { ok: false, negotiationId, catalogAgentId: "", agentCardUrl: "", steps, error: "catalog 里没有可发现的 agent" };
|
|
@@ -210,7 +206,9 @@ export async function negotiateWithAgent(options) {
|
|
|
210
206
|
if (channelCandidate === null || channelCandidate.url === undefined) {
|
|
211
207
|
return { ok: false, negotiationId, catalogAgentId, agentCardUrl, steps, error: "无 a2a-direct 通道候选" };
|
|
212
208
|
}
|
|
213
|
-
|
|
209
|
+
// 审查 BUG-07:共享持久目录的租约——出站 send 全临界区单 owner
|
|
210
|
+
const lease = new FileLeaseStore(dir);
|
|
211
|
+
const channel = new A2ADirectChannel({ url: channelCandidate.url, ledger, idempotency, now, lease });
|
|
214
212
|
handle = await channel.open({
|
|
215
213
|
negotiation_id: negotiationId,
|
|
216
214
|
sender_identity: senderIdentity,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"negotiate.js","sourceRoot":"","sources":["../../src/a2a/negotiate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"negotiate.js","sourceRoot":"","sources":["../../src/a2a/negotiate.ts"],"names":[],"mappings":"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"}
|
package/dist/a2a/node.d.ts
CHANGED
|
@@ -14,22 +14,40 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import type { AgentProfile } from "../config/profile.js";
|
|
17
|
+
import type { AuthVerifier } from "./server/types.js";
|
|
17
18
|
export interface A2aNodeOptions {
|
|
18
19
|
profile: AgentProfile;
|
|
19
20
|
/** agent catalog base URL(merchant 自动注册用)。 */
|
|
20
21
|
catalog?: string;
|
|
21
22
|
/** 首选端口(缺省按角色:merchant 9000 / buyer 9001)。占用则自动换。 */
|
|
22
23
|
preferredPort?: number;
|
|
24
|
+
/** 持久状态目录(审查 BUG-03):提供时 Ledger/幂等/owner 锁落该目录,
|
|
25
|
+
* stop() 不删除——重启后幂等、终态、已发 conditional offer 可恢复;
|
|
26
|
+
* 缺省回退临时目录(demo/测试形态,stop 时删除)。 */
|
|
27
|
+
dataDir?: string;
|
|
23
28
|
/** KIWI_CATALOG_OWNER_TOKEN_SECRET(merchant 注册绑定 owner 语义,legacy HMAC 派生)。 */
|
|
24
29
|
ownerTokenSecret?: string;
|
|
25
30
|
/** 商家自己的随机 owner token(v12+ 双路径;平台 secret 不落商家服务器)。 */
|
|
26
31
|
ownerToken?: string;
|
|
32
|
+
/**
|
|
33
|
+
* 对外广告的 base URL(如 `https://veyquo.com`)——节点**仍监听
|
|
34
|
+
* 127.0.0.1**(Caddy 等反向代理把公网流量转到回环),但 Agent Card /
|
|
35
|
+
* UCP / catalog 注册都广告该公网地址。缺省 `KIWI_A2A_PUBLIC_URL` 环境
|
|
36
|
+
* 变量;两者都不设则广告回环地址(本地形态)。
|
|
37
|
+
*/
|
|
38
|
+
publicBaseUrl?: string;
|
|
39
|
+
/** 入站认证验证器(审查 BUG-02):广告地址非 loopback 时**必须**提供——
|
|
40
|
+
* 缺省 LoopbackOnlyAuthVerifier 只信 socket 来源,反代从 127.0.0.1
|
|
41
|
+
* 连接时外部请求在应用层就是 loopback 并被认证通过。未配置则启动失败。 */
|
|
42
|
+
authVerifier?: AuthVerifier;
|
|
27
43
|
}
|
|
28
44
|
export interface A2aNodeHandle {
|
|
29
45
|
role: "buyer" | "merchant";
|
|
30
|
-
/**
|
|
46
|
+
/** 实际监听的回环 base URL(本机控制/测试用)。 */
|
|
31
47
|
url: string;
|
|
32
|
-
/**
|
|
48
|
+
/** 对外广告的 base URL(publicBaseUrl 覆盖时是公网 HTTPS,否则同 url)。 */
|
|
49
|
+
advertisedUrl: string;
|
|
50
|
+
/** Agent Card well-known URL(对外广告地址)。 */
|
|
33
51
|
agentCardUrl: string;
|
|
34
52
|
/** 注册进 catalog 的 catalog_agent_id(merchant 角色且有 catalog 时)。 */
|
|
35
53
|
catalogAgentId?: string;
|
package/dist/a2a/node.js
CHANGED
|
@@ -24,10 +24,11 @@
|
|
|
24
24
|
* 端口按角色:merchant→9000、buyer→9001(KIWI_A2A_PORT 覆盖);占用则
|
|
25
25
|
* pickFreePort 自动换。
|
|
26
26
|
*/
|
|
27
|
-
import { mkdtempSync, rmSync } from "node:fs";
|
|
27
|
+
import { closeSync, existsSync, mkdirSync, mkdtempSync, openSync, readFileSync, rmSync, unlinkSync, writeSync, } from "node:fs";
|
|
28
|
+
import { createMonotonicClock } from "./clock.js";
|
|
28
29
|
import { tmpdir } from "node:os";
|
|
29
30
|
import path from "node:path";
|
|
30
|
-
import { A2AServer } from "./server/index.js";
|
|
31
|
+
import { A2AServer, LoopbackOnlyAuthVerifier, NoneAuthVerifier, StaticBearerAuthVerifier, } from "./server/index.js";
|
|
31
32
|
import { defaultHandler } from "./server/handler.js";
|
|
32
33
|
import { createMerchantHandler } from "./server/merchant-handler.js";
|
|
33
34
|
import { LedgerStore } from "../negotiation/ledger/index.js";
|
|
@@ -36,16 +37,9 @@ import { pickFreePort } from "../supervisor/stack-config.js";
|
|
|
36
37
|
import { registerCatalogAgent } from "../discovery/catalog-source/register.js";
|
|
37
38
|
import { HttpMerchantClient } from "../agent/merchant/merchant-client.js";
|
|
38
39
|
import { ProfileCredentialBroker } from "../agent/merchant/credential-broker.js";
|
|
39
|
-
/**
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const base = Date.parse("2026-08-07T00:00:00.000Z");
|
|
43
|
-
return () => {
|
|
44
|
-
const t = new Date(base + tick);
|
|
45
|
-
tick += 1;
|
|
46
|
-
return t.toISOString();
|
|
47
|
-
};
|
|
48
|
-
}
|
|
40
|
+
/** 现实单调时钟(审查 BUG-01):墙钟 + 同进程严格单调;生产不得用固定
|
|
41
|
+
* 日期基准(第三方会收到历史时间戳/已过期报价,重启还会回退历史)。 */
|
|
42
|
+
const monotonicNow = createMonotonicClock;
|
|
49
43
|
/** 优先监听 preferredPort;被占用则换空闲端口。 */
|
|
50
44
|
async function listenPort(preferred) {
|
|
51
45
|
// 尝试 preferred:失败(EADDRINUSE)则 pickFreePort。
|
|
@@ -79,13 +73,151 @@ function buildProductSource(profile) {
|
|
|
79
73
|
},
|
|
80
74
|
};
|
|
81
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* 解析对外广告的 base URL:显式 `publicBaseUrl`/`KIWI_A2A_PUBLIC_URL` 优先,
|
|
78
|
+
* 缺省回退本机回环(自动回环 URL 允许 http)。
|
|
79
|
+
*
|
|
80
|
+
* 审查 P1-08:显式广告地址只接受 **HTTPS origin**——拒绝远程(非回环)
|
|
81
|
+
* http、userinfo、path、query、fragment(`https://<host>` 唯一合法形态)。
|
|
82
|
+
* 广告地址是 Agent Card / UCP / catalog 注册的对外身份,携带路径或凭据会
|
|
83
|
+
* 污染 well-known URL 构造与域控制验证。fail-closed:错误公网配置在启动即
|
|
84
|
+
* 失败,不带着错误身份对外服务。
|
|
85
|
+
*/
|
|
86
|
+
function resolveAdvertisedBase(publicBaseUrl, loopbackUrl) {
|
|
87
|
+
const raw = (publicBaseUrl ?? process.env.KIWI_A2A_PUBLIC_URL ?? "").trim();
|
|
88
|
+
if (raw === "")
|
|
89
|
+
return loopbackUrl;
|
|
90
|
+
const normalized = raw.replace(/\/+$/, "");
|
|
91
|
+
let parsed;
|
|
92
|
+
try {
|
|
93
|
+
parsed = new URL(normalized);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
throw new Error(`KIWI_A2A_PUBLIC_URL 不是合法 URL: ${raw}(应为 https://<host> 形式)`);
|
|
97
|
+
}
|
|
98
|
+
if (parsed.protocol !== "https:") {
|
|
99
|
+
throw new Error(`KIWI_A2A_PUBLIC_URL 必须是 https URL(公网广告不接受 http): ${raw}`);
|
|
100
|
+
}
|
|
101
|
+
if (parsed.username !== "" || parsed.password !== "") {
|
|
102
|
+
throw new Error(`KIWI_A2A_PUBLIC_URL 不得内嵌凭据(userinfo): ${raw}`);
|
|
103
|
+
}
|
|
104
|
+
if (parsed.search !== "" || parsed.hash !== "") {
|
|
105
|
+
throw new Error(`KIWI_A2A_PUBLIC_URL 不得包含 query/fragment(应为 https://<host>): ${raw}`);
|
|
106
|
+
}
|
|
107
|
+
if (parsed.pathname !== "" && parsed.pathname !== "/") {
|
|
108
|
+
throw new Error(`KIWI_A2A_PUBLIC_URL 不得包含路径(应为 https://<host> 形式): ${raw}`);
|
|
109
|
+
}
|
|
110
|
+
return normalized;
|
|
111
|
+
}
|
|
112
|
+
/** 广告地址是否 loopback(本地形态)。 */
|
|
113
|
+
function isLoopbackAdvertised(value) {
|
|
114
|
+
try {
|
|
115
|
+
const hostname = new URL(value).hostname;
|
|
116
|
+
return hostname === "127.0.0.1" || hostname === "localhost" || hostname === "::1";
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** 从 KIWI_A2A_AUTH env 构造 authVerifier(公网广告形态的认证边界,审查 BUG-02)。
|
|
123
|
+
*
|
|
124
|
+
* - ``loopback`` → LoopbackOnlyAuthVerifier:只信 loopback socket 来源(Caddy
|
|
125
|
+
* 反代从 127.0.0.1 连接时的应用层信任边界,可审计的代理认证契约);
|
|
126
|
+
* - ``none`` → NoneAuthVerifier:总是放行(显式可信网络/测试);
|
|
127
|
+
* - ``bearer:<token>`` → StaticBearerAuthVerifier:校验 Authorization Bearer。
|
|
128
|
+
* 未配置 → undefined(公网广告形态下守卫拒绝启动,fail-closed)。
|
|
129
|
+
*/
|
|
130
|
+
function authVerifierFromEnv() {
|
|
131
|
+
const raw = (process.env.KIWI_A2A_AUTH ?? "").trim();
|
|
132
|
+
if (raw === "")
|
|
133
|
+
return undefined;
|
|
134
|
+
if (raw === "loopback")
|
|
135
|
+
return new LoopbackOnlyAuthVerifier();
|
|
136
|
+
if (raw === "none")
|
|
137
|
+
return new NoneAuthVerifier();
|
|
138
|
+
if (raw.startsWith("bearer:")) {
|
|
139
|
+
const token = raw.slice("bearer:".length).trim();
|
|
140
|
+
if (token === "")
|
|
141
|
+
throw new Error("KIWI_A2A_AUTH=bearer:<token> 需要非空 token");
|
|
142
|
+
return new StaticBearerAuthVerifier(token);
|
|
143
|
+
}
|
|
144
|
+
throw new Error(`KIWI_A2A_AUTH 未知模式: ${raw}(可选 loopback | none | bearer:<token>)`);
|
|
145
|
+
}
|
|
82
146
|
/** 启动一个 A2A 节点(按 profile 角色)。 */
|
|
83
147
|
export async function startA2aNode(options) {
|
|
84
148
|
const { profile } = options;
|
|
85
149
|
const role = profile.role;
|
|
86
150
|
const preferred = options.preferredPort ?? (Number(process.env.KIWI_A2A_PORT ?? "") || (role === "merchant" ? 9000 : 9001));
|
|
87
151
|
const { port, url } = await listenPort(preferred);
|
|
88
|
-
const
|
|
152
|
+
const advertisedBase = resolveAdvertisedBase(options.publicBaseUrl, url);
|
|
153
|
+
// 审查 BUG-02:公网广告形态必须显式认证——LoopbackOnlyAuthVerifier 只信
|
|
154
|
+
// socket 来源,反代从 127.0.0.1 连接时外部请求在应用层就是 loopback。
|
|
155
|
+
// 未配置验证器则启动失败(fail-closed),不带着错误身份对外服务。
|
|
156
|
+
// authVerifier 来源:options 直传优先,否则 KIWI_A2A_AUTH env
|
|
157
|
+
// (loopback | none | bearer:<token>)。
|
|
158
|
+
const authVerifier = options.authVerifier ?? authVerifierFromEnv();
|
|
159
|
+
if (!isLoopbackAdvertised(advertisedBase) && authVerifier === undefined) {
|
|
160
|
+
throw new Error(`广告地址 ${advertisedBase} 不是 loopback:必须配置 authVerifier` +
|
|
161
|
+
`(KIWI_A2A_AUTH=loopback|none|bearer:<token>,或 HTTP Message Signature 验证器),` +
|
|
162
|
+
`否则反向代理连接会被误当本机可信`);
|
|
163
|
+
}
|
|
164
|
+
// 审查 P2-E:loopback 模式 + 公网广告地址是部署脚枪——节点只绑定
|
|
165
|
+
// 127.0.0.1,经反代转发的公网流量在应用层全是 loopback 一律放行,认证
|
|
166
|
+
// 形同虚设(功能等价 none)。不改默认行为(反代自己做强认证时 loopback
|
|
167
|
+
// 仍是合法的代理即边界契约),但醒目告警:认证责任全在反代。
|
|
168
|
+
if (!isLoopbackAdvertised(advertisedBase) && authVerifier?.name === "loopback-only") {
|
|
169
|
+
process.stderr.write(`⚠️ [kiwi] 广告地址 ${advertisedBase} 是公网地址,但 KIWI_A2A_AUTH=loopback:` +
|
|
170
|
+
`节点只校验 socket 来源,经反向代理转发的公网请求在应用层全部是 loopback 一律放行,` +
|
|
171
|
+
`等价于无应用层认证——认证责任完全在反代(反代必须自己做强认证并把它当作信任边界)。` +
|
|
172
|
+
`公网节点建议使用 KIWI_A2A_AUTH=bearer:<token> 或 HTTP Message Signature 验证器。\n`);
|
|
173
|
+
}
|
|
174
|
+
// 审查 BUG-03:持久形态(dataDir)——Ledger/幂等落 <dataDir>/a2a/,
|
|
175
|
+
// stop 不删除;临时形态(demo/测试)维持 mkdtemp + stop 删除。
|
|
176
|
+
const isEphemeral = options.dataDir === undefined;
|
|
177
|
+
const dir = isEphemeral
|
|
178
|
+
? mkdtempSync(path.join(tmpdir(), "kiwi-a2a-node-"))
|
|
179
|
+
: (() => {
|
|
180
|
+
const stateDir = path.join(options.dataDir, "a2a");
|
|
181
|
+
mkdirSync(stateDir, { recursive: true, mode: 0o700 });
|
|
182
|
+
return stateDir;
|
|
183
|
+
})();
|
|
184
|
+
// 单 owner 协调(审查 BUG-03):同一状态目录只允许一个节点实例——exclusive
|
|
185
|
+
// lock 文件 + PID;崩溃残留(PID 已死)自动接管,存活实例则启动失败。
|
|
186
|
+
let releaseOwnerLock;
|
|
187
|
+
if (!isEphemeral) {
|
|
188
|
+
const lockPath = path.join(dir, "owner.lock");
|
|
189
|
+
const stealIfStale = () => {
|
|
190
|
+
if (!existsSync(lockPath))
|
|
191
|
+
return;
|
|
192
|
+
const pidText = readFileSync(lockPath, "utf-8").trim();
|
|
193
|
+
const pid = Number(pidText);
|
|
194
|
+
if (Number.isInteger(pid) && pid > 0) {
|
|
195
|
+
try {
|
|
196
|
+
process.kill(pid, 0); // 存活 → 不接管
|
|
197
|
+
throw new Error(`A2A 状态目录已被其他进程占用(pid ${pid}):${dir}——请先停止该进程或换 --data-dir`);
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
if (err instanceof Error && err.message.startsWith("A2A 状态目录"))
|
|
201
|
+
throw err;
|
|
202
|
+
// ESRCH:进程已死,残留锁可接管
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
unlinkSync(lockPath);
|
|
206
|
+
};
|
|
207
|
+
stealIfStale();
|
|
208
|
+
const fd = openSync(lockPath, "wx");
|
|
209
|
+
writeSync(fd, String(process.pid));
|
|
210
|
+
closeSync(fd);
|
|
211
|
+
releaseOwnerLock = () => {
|
|
212
|
+
try {
|
|
213
|
+
unlinkSync(lockPath);
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// 已不存在/无权限:忽略
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
process.once("exit", releaseOwnerLock);
|
|
220
|
+
}
|
|
89
221
|
const now = monotonicNow();
|
|
90
222
|
const ledger = new LedgerStore({ dir, now });
|
|
91
223
|
const idempotency = new IdempotencyStore({ dir, now });
|
|
@@ -98,7 +230,7 @@ export async function startA2aNode(options) {
|
|
|
98
230
|
productSource: buildProductSource(profile),
|
|
99
231
|
})
|
|
100
232
|
: defaultHandler();
|
|
101
|
-
const holder = { baseUrl:
|
|
233
|
+
const holder = { baseUrl: advertisedBase };
|
|
102
234
|
const server = new A2AServer({
|
|
103
235
|
// A2AServerOptions.card 是 AgentCardConfigProvider:返回 config,server 内部再 buildAgentCard。
|
|
104
236
|
// name 用干净显示名,不掺 agent_id(形如 agent:token,会被 card secret 扫描器判为 card_has_secret)。
|
|
@@ -110,26 +242,35 @@ export async function startA2aNode(options) {
|
|
|
110
242
|
baseUrl: holder.baseUrl,
|
|
111
243
|
a2aPath: "/",
|
|
112
244
|
}),
|
|
245
|
+
// 发布 UCP Profile(/.well-known/ucp):注册广告了 ucp_profile_url,
|
|
246
|
+
// 端点就必须真实可拉——否则 catalog 验证的 profile 阶段拉 UCP 404 →
|
|
247
|
+
// freshness=unreachable → buyer 发现被 BLOCKED 列表挡掉。
|
|
248
|
+
ucp: true,
|
|
113
249
|
ledger,
|
|
114
250
|
idempotency,
|
|
115
251
|
handler,
|
|
116
252
|
now,
|
|
253
|
+
...(authVerifier !== undefined ? { authVerifier } : {}),
|
|
117
254
|
});
|
|
118
255
|
const httpServer = server.createServer();
|
|
119
256
|
await new Promise((resolve) => httpServer.listen(port, "127.0.0.1", () => resolve()));
|
|
120
|
-
holder.baseUrl =
|
|
121
|
-
const agentCardUrl = `${
|
|
257
|
+
holder.baseUrl = advertisedBase;
|
|
258
|
+
const agentCardUrl = `${advertisedBase}/.well-known/agent-card.json`;
|
|
122
259
|
// merchant 角色:自动注册进 catalog(buyer 据此发现)。
|
|
123
260
|
let catalogAgentId;
|
|
124
261
|
if (role === "merchant" && options.catalog !== undefined) {
|
|
125
262
|
const safeAgentId = profile.agent_id.replace(/[^a-z0-9-]/gi, "-").toLowerCase();
|
|
126
|
-
|
|
263
|
+
// 注册域名:显式 KIWI_CATALOG_DOMAIN 优先;有公网广告地址则取其
|
|
264
|
+
// hostname(域名就是对外身份,catalog 据此做 well-known 域控制验证);
|
|
265
|
+
// 否则本地形态回退占位域名。
|
|
266
|
+
const domain = process.env.KIWI_CATALOG_DOMAIN ??
|
|
267
|
+
(advertisedBase !== url ? new URL(advertisedBase).hostname : `merchant-${safeAgentId}.local`);
|
|
127
268
|
try {
|
|
128
269
|
const reg = await registerCatalogAgent({
|
|
129
270
|
catalogBaseUrl: options.catalog,
|
|
130
271
|
domain,
|
|
131
272
|
agentCardUrl,
|
|
132
|
-
ucpProfileUrl: `${
|
|
273
|
+
ucpProfileUrl: `${advertisedBase}/.well-known/ucp`,
|
|
133
274
|
merchantId: profile.agent_id,
|
|
134
275
|
ownerToken: options.ownerToken,
|
|
135
276
|
ownerTokenSecret: options.ownerTokenSecret,
|
|
@@ -144,12 +285,17 @@ export async function startA2aNode(options) {
|
|
|
144
285
|
return {
|
|
145
286
|
role,
|
|
146
287
|
url,
|
|
288
|
+
advertisedUrl: advertisedBase,
|
|
147
289
|
agentCardUrl,
|
|
148
290
|
catalogAgentId,
|
|
149
291
|
async stop() {
|
|
150
292
|
httpServer.closeAllConnections?.();
|
|
151
293
|
await new Promise((resolve) => httpServer.close(() => resolve()));
|
|
152
|
-
|
|
294
|
+
// 审查 BUG-03:持久形态不删除状态目录(重启恢复依赖它);临时形态
|
|
295
|
+
// (demo/测试)维持删除。owner 锁总是释放。
|
|
296
|
+
releaseOwnerLock?.();
|
|
297
|
+
if (isEphemeral)
|
|
298
|
+
rmSync(dir, { recursive: true, force: true });
|
|
153
299
|
},
|
|
154
300
|
};
|
|
155
301
|
}
|
package/dist/a2a/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/a2a/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/a2a/node.ts"],"names":[],"mappings":"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"}
|
package/dist/a2a/server/auth.js
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
* identity 为 identity(同一 token 的客户端共享一个幂等身份,message_id 不
|
|
31
31
|
* 冲突即不会误判 —— 幂等冲突仅在同 message_id 异 digest 时触发)。
|
|
32
32
|
*/
|
|
33
|
+
import { timingSafeEqual } from "node:crypto";
|
|
33
34
|
import { isLoopbackHost } from "../client/url-policy.js";
|
|
34
35
|
/** IPv4-mapped IPv6(::ffff:127.0.0.1)剥前缀后按内嵌 IPv4 判定 loopback。 */
|
|
35
36
|
function isLoopbackAddress(addr) {
|
|
@@ -44,6 +45,14 @@ export class NoneAuthVerifier {
|
|
|
44
45
|
return { authenticated: true, identity: "anonymous" };
|
|
45
46
|
}
|
|
46
47
|
}
|
|
48
|
+
/** 常量时间 token 比较:长度恒等预检 + timingSafeEqual(审查 P2-D:此前
|
|
49
|
+
* `presented !== this.token` 逐字节短路,构成时序侧信道)。与
|
|
50
|
+
* agent/memory/vault.ts fingerprintEquals 同一模式。 */
|
|
51
|
+
function tokenEquals(presented, expected) {
|
|
52
|
+
const a = Buffer.from(presented, "utf8");
|
|
53
|
+
const b = Buffer.from(expected, "utf8");
|
|
54
|
+
return a.length === b.length && timingSafeEqual(a, b);
|
|
55
|
+
}
|
|
47
56
|
/** 静态 Bearer token 校验。 */
|
|
48
57
|
export class StaticBearerAuthVerifier {
|
|
49
58
|
name = "static-bearer";
|
|
@@ -72,8 +81,8 @@ export class StaticBearerAuthVerifier {
|
|
|
72
81
|
reason: "Authorization header is not a bearer token",
|
|
73
82
|
};
|
|
74
83
|
}
|
|
75
|
-
const presented = match[1];
|
|
76
|
-
if (presented
|
|
84
|
+
const presented = match[1] ?? "";
|
|
85
|
+
if (!tokenEquals(presented, this.token)) {
|
|
77
86
|
return {
|
|
78
87
|
authenticated: false,
|
|
79
88
|
protocolCode: "authorization_failed",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/a2a/server/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGzD,kEAAkE;AAClE,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrF,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,qCAAqC;AACrC,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,IAAiB;QACtB,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxD,CAAC;CACF;AAED,0BAA0B;AAC1B,MAAM,OAAO,wBAAwB;IAC1B,IAAI,GAAG,eAAe,CAAC;IACf,KAAK,CAAS;IACd,QAAQ,CAAS;IAElC,YAAY,KAAa,EAAE,UAAiC,EAAE;QAC5D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAC/F,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,GAAgB;QACrB,MAAM,MAAM,GAAG,GAAG,CAAC,mBAAmB,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAC1C,OAAO;gBACL,aAAa,EAAE,KAAK;gBACpB,YAAY,EAAE,yBAAyB;gBACvC,MAAM,EAAE,8BAA8B;aACvC,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO;gBACL,aAAa,EAAE,KAAK;gBACpB,YAAY,EAAE,sBAAsB;gBACpC,MAAM,EAAE,4CAA4C;aACrD,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/a2a/server/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,5 +65,9 @@ export interface MerchantProductSource {
|
|
|
65
65
|
* 未知 SKU → 抛错(resolveProduct 回退演示价,缺省行为不变)。
|
|
66
66
|
*/
|
|
67
67
|
export declare function dataSourceProductSource(dataSource: CommerceDataSource): MerchantProductSource;
|
|
68
|
+
/** offer 有效期(审查 P3:此前 valid_until 硬编码 2099——§11 "Offer with
|
|
69
|
+
* valid_until MUST NOT be accepted after that timestamp" 永不生效,陈旧
|
|
70
|
+
* 报价可被无限期接受)。24h 窗口,accept 时校验(offer_expired 拒绝)。 */
|
|
71
|
+
export declare const OFFER_VALIDITY_MS: number;
|
|
68
72
|
/** 构造生产 merchant KNP handler。 */
|
|
69
73
|
export declare function createMerchantHandler(options: MerchantHandlerOptions): NegotiationHandler;
|