@harrylabsj/kiwi 0.6.0 → 0.6.2

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.
Files changed (167) hide show
  1. package/README.md +21 -0
  2. package/contracts/candidate-agent-dto-1.0.README.md +12 -8
  3. package/contracts/conformance/python-service/README.md +19 -0
  4. package/contracts/conformance/python-service/run.py +134 -0
  5. package/contracts/kiwi-catalog/1.0/listing-record.schema.json +11 -1
  6. package/contracts/kiwi-contracts.lock.json +7 -0
  7. package/contracts/manifest.json +61 -0
  8. package/contracts/vectors/candidate-agent.invalid-private-field.json +7 -0
  9. package/contracts/vectors/candidate-agent.valid.json +26 -0
  10. package/dist/a2a/client/client.js +39 -34
  11. package/dist/a2a/client/client.js.map +1 -1
  12. package/dist/a2a/client/url-policy.d.ts +8 -1
  13. package/dist/a2a/client/url-policy.js +18 -2
  14. package/dist/a2a/client/url-policy.js.map +1 -1
  15. package/dist/a2a/clock.d.ts +30 -0
  16. package/dist/a2a/clock.js +39 -0
  17. package/dist/a2a/clock.js.map +1 -0
  18. package/dist/a2a/negotiate.d.ts +6 -0
  19. package/dist/a2a/negotiate.js +10 -12
  20. package/dist/a2a/negotiate.js.map +1 -1
  21. package/dist/a2a/node.d.ts +23 -3
  22. package/dist/a2a/node.js +128 -18
  23. package/dist/a2a/node.js.map +1 -1
  24. package/dist/a2a/server/merchant-handler.d.ts +4 -0
  25. package/dist/a2a/server/merchant-handler.js +238 -25
  26. package/dist/a2a/server/merchant-handler.js.map +1 -1
  27. package/dist/a2a/server/pipeline.d.ts +17 -0
  28. package/dist/a2a/server/pipeline.js +89 -1
  29. package/dist/a2a/server/pipeline.js.map +1 -1
  30. package/dist/a2a/server/ucp.d.ts +30 -2
  31. package/dist/a2a/server/ucp.js +23 -14
  32. package/dist/a2a/server/ucp.js.map +1 -1
  33. package/dist/agent/agent-db.js +5 -0
  34. package/dist/agent/agent-db.js.map +1 -1
  35. package/dist/agent/buyer/buyer-tools.d.ts +5 -0
  36. package/dist/agent/buyer/buyer-tools.js +8 -1
  37. package/dist/agent/buyer/buyer-tools.js.map +1 -1
  38. package/dist/agent/buyer/types.d.ts +0 -25
  39. package/dist/agent/buyer/types.js.map +1 -1
  40. package/dist/agent/kernel-builder.d.ts +27 -0
  41. package/dist/agent/kernel-builder.js +180 -0
  42. package/dist/agent/kernel-builder.js.map +1 -0
  43. package/dist/agent/kernel.d.ts +6 -0
  44. package/dist/agent/kernel.js +95 -8
  45. package/dist/agent/kernel.js.map +1 -1
  46. package/dist/agent/memory/store.d.ts +5 -0
  47. package/dist/agent/memory/store.js +29 -1
  48. package/dist/agent/memory/store.js.map +1 -1
  49. package/dist/agent/merchant/action-candidate.js +15 -1
  50. package/dist/agent/merchant/action-candidate.js.map +1 -1
  51. package/dist/agent/merchant/merchant-client.js +22 -4
  52. package/dist/agent/merchant/merchant-client.js.map +1 -1
  53. package/dist/agent/merchant/types.d.ts +5 -2
  54. package/dist/agent/merchant/types.js +6 -2
  55. package/dist/agent/merchant/types.js.map +1 -1
  56. package/dist/agent/negotiation-chat.js +34 -14
  57. package/dist/agent/negotiation-chat.js.map +1 -1
  58. package/dist/cli.d.ts +56 -0
  59. package/dist/cli.js +141 -156
  60. package/dist/cli.js.map +1 -1
  61. package/dist/commerce/data-source.d.ts +7 -3
  62. package/dist/commerce/data-source.js.map +1 -1
  63. package/dist/commerce/http-client.js +35 -31
  64. package/dist/commerce/http-client.js.map +1 -1
  65. package/dist/commerce/shopping-cli-source.js +66 -48
  66. package/dist/commerce/shopping-cli-source.js.map +1 -1
  67. package/dist/config/profile.d.ts +7 -0
  68. package/dist/config/profile.js +23 -0
  69. package/dist/config/profile.js.map +1 -1
  70. package/dist/counterparty/a2a-direct/index.d.ts +5 -0
  71. package/dist/counterparty/a2a-direct/index.js +24 -0
  72. package/dist/counterparty/a2a-direct/index.js.map +1 -1
  73. package/dist/counterparty/shopping-cli-hosted/index.js +52 -19
  74. package/dist/counterparty/shopping-cli-hosted/index.js.map +1 -1
  75. package/dist/discovery/catalog-source/kiwi-record.d.ts +3 -0
  76. package/dist/discovery/catalog-source/kiwi-record.js.map +1 -1
  77. package/dist/discovery/catalog-source/kiwi-source.js +46 -36
  78. package/dist/discovery/catalog-source/kiwi-source.js.map +1 -1
  79. package/dist/discovery/catalog-source/register.d.ts +6 -0
  80. package/dist/discovery/catalog-source/register.js +27 -8
  81. package/dist/discovery/catalog-source/register.js.map +1 -1
  82. package/dist/discovery/catalog-source/source.js +39 -35
  83. package/dist/discovery/catalog-source/source.js.map +1 -1
  84. package/dist/discovery/resolve.d.ts +15 -0
  85. package/dist/discovery/resolve.js +59 -35
  86. package/dist/discovery/resolve.js.map +1 -1
  87. package/dist/discovery/ucp/index.d.ts +1 -1
  88. package/dist/discovery/ucp/index.js +1 -1
  89. package/dist/discovery/ucp/index.js.map +1 -1
  90. package/dist/discovery/ucp/resolver.d.ts +5 -0
  91. package/dist/discovery/ucp/resolver.js +65 -38
  92. package/dist/discovery/ucp/resolver.js.map +1 -1
  93. package/dist/discovery/ucp/vendor.d.ts +1 -1
  94. package/dist/discovery/ucp/vendor.js +1 -1
  95. package/dist/handoff/delivery.d.ts +4 -2
  96. package/dist/handoff/delivery.js +6 -1
  97. package/dist/handoff/delivery.js.map +1 -1
  98. package/dist/handoff/errors.d.ts +1 -1
  99. package/dist/handoff/errors.js +1 -0
  100. package/dist/handoff/errors.js.map +1 -1
  101. package/dist/handoff/idempotency.d.ts +10 -1
  102. package/dist/handoff/idempotency.js +13 -3
  103. package/dist/handoff/idempotency.js.map +1 -1
  104. package/dist/handoff/index.d.ts +1 -1
  105. package/dist/handoff/index.js +1 -1
  106. package/dist/handoff/index.js.map +1 -1
  107. package/dist/handoff/ledger.d.ts +9 -0
  108. package/dist/handoff/ledger.js +66 -0
  109. package/dist/handoff/ledger.js.map +1 -1
  110. package/dist/handoff/transaction.d.ts +21 -3
  111. package/dist/handoff/transaction.js +50 -11
  112. package/dist/handoff/transaction.js.map +1 -1
  113. package/dist/handoff/ucp-checkout/channel.js +15 -10
  114. package/dist/handoff/ucp-checkout/channel.js.map +1 -1
  115. package/dist/negotiation/jcs.js +11 -8
  116. package/dist/negotiation/jcs.js.map +1 -1
  117. package/dist/negotiation/lease/store.d.ts +25 -0
  118. package/dist/negotiation/lease/store.js +101 -0
  119. package/dist/negotiation/lease/store.js.map +1 -0
  120. package/dist/negotiation/recovery/recover.js +25 -1
  121. package/dist/negotiation/recovery/recover.js.map +1 -1
  122. package/dist/negotiation/state/phase.js +12 -4
  123. package/dist/negotiation/state/phase.js.map +1 -1
  124. package/dist/operator/runner.d.ts +11 -0
  125. package/dist/operator/runner.js +20 -1
  126. package/dist/operator/runner.js.map +1 -1
  127. package/dist/product-catalog.d.ts +43 -0
  128. package/dist/product-catalog.js +60 -0
  129. package/dist/product-catalog.js.map +1 -0
  130. package/dist/product-cli.d.ts +1 -1
  131. package/dist/product-cli.js +1 -1
  132. package/dist/product-publish.d.ts +15 -17
  133. package/dist/product-publish.js +279 -46
  134. package/dist/product-publish.js.map +1 -1
  135. package/dist/supervisor/stack-config.d.ts +6 -1
  136. package/dist/supervisor/stack-config.js +11 -3
  137. package/dist/supervisor/stack-config.js.map +1 -1
  138. package/dist/trust/identity/message-signature.js +17 -0
  139. package/dist/trust/identity/message-signature.js.map +1 -1
  140. package/dist/weixin/channel.d.ts +89 -0
  141. package/dist/weixin/channel.js +370 -0
  142. package/dist/weixin/channel.js.map +1 -0
  143. package/dist/weixin/cli-weixin.d.ts +29 -0
  144. package/dist/weixin/cli-weixin.js +130 -0
  145. package/dist/weixin/cli-weixin.js.map +1 -0
  146. package/dist/weixin/credentials.d.ts +33 -0
  147. package/dist/weixin/credentials.js +107 -0
  148. package/dist/weixin/credentials.js.map +1 -0
  149. package/dist/weixin/ilink-client.d.ts +44 -0
  150. package/dist/weixin/ilink-client.js +287 -0
  151. package/dist/weixin/ilink-client.js.map +1 -0
  152. package/dist/weixin/login.d.ts +37 -0
  153. package/dist/weixin/login.js +93 -0
  154. package/dist/weixin/login.js.map +1 -0
  155. package/dist/weixin/qr.d.ts +26 -0
  156. package/dist/weixin/qr.js +525 -0
  157. package/dist/weixin/qr.js.map +1 -0
  158. package/dist/weixin/types.d.ts +114 -0
  159. package/dist/weixin/types.js +48 -0
  160. package/dist/weixin/types.js.map +1 -0
  161. package/package.json +12 -2
  162. package/dist/commerce/erp-source.d.ts +0 -51
  163. package/dist/commerce/erp-source.js +0 -184
  164. package/dist/commerce/erp-source.js.map +0 -1
  165. package/dist/commerce/local-db-source.d.ts +0 -50
  166. package/dist/commerce/local-db-source.js +0 -162
  167. 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"}
@@ -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;
@@ -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 = monotonicNow();
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({ catalog: { source, includeBlocked: false } });
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
- const channel = new A2ADirectChannel({ url: channelCandidate.url, ledger, idempotency, now });
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":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAsB,MAAM,sCAAsC,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,UAAU,GACX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,YAAY,EAAmB,MAAM,YAAY,CAAC;AAE3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,0CAA0C,CAAC;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AACjD,MAAM,CAAC,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAgDhE,MAAM,UAAU,GAAG,CAAC,KAAyB,EAAU,EAAE,CACvD,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvD,qDAAqD;AACrD,MAAM,UAAU,oBAAoB,CAClC,MAAuB,EACvB,SAAqB,YAAY,EAAE;IAEnC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;IACvB,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,aAAa,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,EAAE,QAAQ,IAAI,kBAAkB,CAAC;IACnD,MAAM,QAAQ,GAAG,CAAC,EAAE,cAAc,IAAI,yBAAyB,CAAC;IAChE,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;IAElD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,MAAM,KAAK,IAAI;YACpB,CAAC,CAAC,QAAQ,MAAM,CAAC,KAAK,IAAI,MAAM,oCAAoC;YACpE,CAAC,CAAC,uBAAuB,MAAM,CAAC,KAAK,IAAI,eAAe,yCAAyC,CAAC;IACtG,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO;YACL,4BAA4B,MAAM,CAAC,aAAa,IAAI;YACpD,UAAU,MAAM,CAAC,cAAc,oBAAoB,MAAM,CAAC,YAAY,UAAU;YAChF,WAAW,QAAQ,MAAM,GAAG,OAAO,QAAQ,MAAM;YACjD,YAAY,UAAU,MAAM;YAC5B,+BAA+B,SAAS,QAAQ;YAChD,iCAAiC,WAAW,GAAG;YAC/C,qDAAqD;SACtD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,qDAAqD,MAAM,CAAC,aAAa,IAAI;QAC7E,yBAAyB,MAAM,CAAC,cAAc,iCAAiC,MAAM,CAAC,YAAY,0BAA0B;QAC5H,UAAU,QAAQ,aAAa,GAAG,iBAAiB,QAAQ,EAAE;QAC7D,+BAA+B,UAAU,IAAI,kBAAkB,OAAO;QACtE,kEAAkE,SAAS,IAAI,kBAAkB,iCAAiC;QAClI,4EAA4E,WAAW,GAAG;QAC1F,0GAA0G;KAC3G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AASD,SAAS,YAAY,CAAC,IAAkB;IACtC,OAAO,gBAAgB,CAAC;QACtB,UAAU,EAAE,oBAAoB;QAChC,gBAAgB,EAAE,KAAK;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,aAAa,EAAE;QAChD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,YAAY,EAAE;QAC7C,GAAG,IAAI;KACR,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAClB,aAAqB,EACrB,GAAiB,EACjB,QAAgB,EAChB,GAAW,EACX,cAAsB;IAEtB,OAAO,YAAY,CAAC;QAClB,cAAc,EAAE,aAAa;QAC7B,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,GAAG,EAAE;QACjB,OAAO,EAAE;YACP,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9D,eAAe,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE;SACrD;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CACtB,aAAqB,EACrB,GAAiB,EACjB,SAAiB,EACjB,mBAA2B,EAC3B,QAAgB,EAChB,GAAW,EACX,iBAAyB;IAEzB,OAAO,YAAY,CAAC;QAClB,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,eAAe;QACvB,UAAU,EAAE,GAAG,EAAE;QACjB,OAAO,EAAE;YACP,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,UAAU,EAAE;YACtB,sBAAsB,EAAE,mBAAmB;YAC3C,cAAc,EAAE;gBACd,KAAK,EAAE;oBACL;wBACE,GAAG;wBACH,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;wBAC5C,UAAU,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,iBAAiB,EAAE;qBAC9E;iBACF;aACF;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,aAAqB,EAAE,GAAiB,EAAE,SAAiB,EAAE,OAAe,EAAE,WAAmB;IACvH,OAAO,YAAY,CAAC;QAClB,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,mBAAmB;QAC3B,UAAU,EAAE,GAAG,EAAE;QACjB,OAAO,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE;KACrF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAgH;IAC1I,MAAM,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;IACtC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAA4B,CAAC;IACvH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,IAA4G;IACpI,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAA4B,CAAC;QACjH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAyB;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,kBAAkB,CAAC;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,aAAa,CAAC;IACzC,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAc,IAAI,0BAA0B,CAAC;IAC/E,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,yBAAyB,CAAC;IAC3E,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,gBAAgB,CAAC;IAClE,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,GAAyB,IAAI,CAAC;IACxC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IAEzC,IAAI,CAAC;QACH,oEAAoE;QACpE,+DAA+D;QAC/D,oCAAoC;QACpC,4EAA4E;QAC5E,yEAAyE;QACzE,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,wBAAwB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACnG,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC;YACnC,aAAa,EAAE,OAAO,CAAC,aAAa,KAAK,IAAI;YAC7C,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE;SAC3C,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE,CAAC;QACrD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;QACnH,CAAC;QACD,MAAM,MAAM,GACV,OAAO,CAAC,cAAc,KAAK,SAAS;YAClC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACb,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;QACpF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,aAAa;gBACb,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;gBAC5C,YAAY,EAAE,EAAE;gBAChB,KAAK;gBACL,KAAK,EAAE,gBAAgB,OAAO,CAAC,cAAc,IAAI,EAAE,mBAAmB;aACvE,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC;QACzD,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,cAAc,IAAI,EAAE,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,YAAY,cAAc,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,WAAW,YAAY,EAAE,CAAC,CAAC;QAEtC,uBAAuB;QACvB,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACpE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;QACvG,CAAC;QACD,2CAA2C;QAC3C,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,EAAE,GAAG,EAAE,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACrG,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAC1B,cAAc,EAAE,aAAa;YAC7B,eAAe,EAAE,cAAc;YAC/B,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;SAClC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,EAAE,QAA6C,EAAE,EAAE,CACnE,MAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QAErE,kBAAkB;QAClB,MAAM,GAAG,GAAG,WAAW,CAAC,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QAClG,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAuG,CAAC;QACnI,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QACtG,CAAC;QACD,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,SAAS,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE7C,sCAAsC;QACtC,MAAM,OAAO,GAAG,eAAe,CAC7B,aAAa,EACb,GAAG,EACF,KAAK,CAAC,UAAqB,IAAI,EAAE,EAClC,YAAY,CAAC,QAAQ,EACrB,QAAQ,EACR,GAAG,EACH,iBAAiB,CAClB,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;YACvE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;QAC9G,CAAC;QACD,MAAM,kBAAkB,GAAG,WAAW,CAAC,OAGtC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,qBAAqB,kBAAkB,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC;QAE5G,2CAA2C;QAC3C,MAAM,WAAW,GAAG,wBAAwB,CAAC,kBAA2B,EAAE;YACxE,0BAA0B,EAAE,QAAQ;SACrC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAC3B,aAAa,EACb,GAAG,EACF,WAAW,CAAC,UAAqB,IAAI,EAAE,EACxC,kBAAkB,CAAC,QAAQ,IAAI,EAAE,EACjC,aAAa,CAAC,WAAoB,CAAC,CACpC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;QAC5G,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,SAAS,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO;YACL,EAAE,EAAE,IAAI;YACR,aAAa;YACb,cAAc;YACd,YAAY;YACZ,KAAK;YACL,SAAS;YACT,KAAK,EAAE;gBACL,GAAG;gBACH,QAAQ;gBACR,eAAe;gBACf,cAAc;gBACd,cAAc;aACf;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,aAAa;YACb,cAAc,EAAE,EAAE;YAClB,YAAY,EAAE,EAAE;YAChB,KAAK;YACL,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
@@ -14,20 +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;
23
- /** KIWI_CATALOG_OWNER_TOKEN_SECRET(merchant 注册绑定 owner 语义)。 */
24
+ /** 持久状态目录(审查 BUG-03):提供时 Ledger/幂等/owner 锁落该目录,
25
+ * stop() 不删除——重启后幂等、终态、已发 conditional offer 可恢复;
26
+ * 缺省回退临时目录(demo/测试形态,stop 时删除)。 */
27
+ dataDir?: string;
28
+ /** KIWI_CATALOG_OWNER_TOKEN_SECRET(merchant 注册绑定 owner 语义,legacy HMAC 派生)。 */
24
29
  ownerTokenSecret?: string;
30
+ /** 商家自己的随机 owner token(v12+ 双路径;平台 secret 不落商家服务器)。 */
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;
25
43
  }
26
44
  export interface A2aNodeHandle {
27
45
  role: "buyer" | "merchant";
28
- /** 节点 base URL */
46
+ /** 实际监听的回环 base URL(本机控制/测试用)。 */
29
47
  url: string;
30
- /** Agent Card well-known URL */
48
+ /** 对外广告的 base URL(publicBaseUrl 覆盖时是公网 HTTPS,否则同 url)。 */
49
+ advertisedUrl: string;
50
+ /** Agent Card well-known URL(对外广告地址)。 */
31
51
  agentCardUrl: string;
32
52
  /** 注册进 catalog 的 catalog_agent_id(merchant 角色且有 catalog 时)。 */
33
53
  catalogAgentId?: string;
package/dist/a2a/node.js CHANGED
@@ -24,7 +24,8 @@
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
31
  import { A2AServer } from "./server/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
- /** 单调递增时钟:同内容事件在同一毫秒会触发 ledger 内容去重。 */
40
- function monotonicNow() {
41
- let tick = 0;
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,114 @@ 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
+ }
82
122
  /** 启动一个 A2A 节点(按 profile 角色)。 */
83
123
  export async function startA2aNode(options) {
84
124
  const { profile } = options;
85
125
  const role = profile.role;
86
126
  const preferred = options.preferredPort ?? (Number(process.env.KIWI_A2A_PORT ?? "") || (role === "merchant" ? 9000 : 9001));
87
127
  const { port, url } = await listenPort(preferred);
88
- const dir = mkdtempSync(path.join(tmpdir(), "kiwi-a2a-node-"));
128
+ const advertisedBase = resolveAdvertisedBase(options.publicBaseUrl, url);
129
+ // 审查 BUG-02:公网广告形态必须显式认证——LoopbackOnlyAuthVerifier 只信
130
+ // socket 来源,反代从 127.0.0.1 连接时外部请求在应用层就是 loopback。
131
+ // 未配置验证器则启动失败(fail-closed),不带着错误身份对外服务。
132
+ if (!isLoopbackAdvertised(advertisedBase) && options.authVerifier === undefined) {
133
+ throw new Error(`广告地址 ${advertisedBase} 不是 loopback:必须配置 authVerifier` +
134
+ `(HTTP Message Signature 验证器或明确的可审计代理认证契约),` +
135
+ `否则反向代理连接会被误当本机可信`);
136
+ }
137
+ // 审查 BUG-03:持久形态(dataDir)——Ledger/幂等落 <dataDir>/a2a/,
138
+ // stop 不删除;临时形态(demo/测试)维持 mkdtemp + stop 删除。
139
+ const isEphemeral = options.dataDir === undefined;
140
+ const dir = isEphemeral
141
+ ? mkdtempSync(path.join(tmpdir(), "kiwi-a2a-node-"))
142
+ : (() => {
143
+ const stateDir = path.join(options.dataDir, "a2a");
144
+ mkdirSync(stateDir, { recursive: true, mode: 0o700 });
145
+ return stateDir;
146
+ })();
147
+ // 单 owner 协调(审查 BUG-03):同一状态目录只允许一个节点实例——exclusive
148
+ // lock 文件 + PID;崩溃残留(PID 已死)自动接管,存活实例则启动失败。
149
+ let releaseOwnerLock;
150
+ if (!isEphemeral) {
151
+ const lockPath = path.join(dir, "owner.lock");
152
+ const stealIfStale = () => {
153
+ if (!existsSync(lockPath))
154
+ return;
155
+ const pidText = readFileSync(lockPath, "utf-8").trim();
156
+ const pid = Number(pidText);
157
+ if (Number.isInteger(pid) && pid > 0) {
158
+ try {
159
+ process.kill(pid, 0); // 存活 → 不接管
160
+ throw new Error(`A2A 状态目录已被其他进程占用(pid ${pid}):${dir}——请先停止该进程或换 --data-dir`);
161
+ }
162
+ catch (err) {
163
+ if (err instanceof Error && err.message.startsWith("A2A 状态目录"))
164
+ throw err;
165
+ // ESRCH:进程已死,残留锁可接管
166
+ }
167
+ }
168
+ unlinkSync(lockPath);
169
+ };
170
+ stealIfStale();
171
+ const fd = openSync(lockPath, "wx");
172
+ writeSync(fd, String(process.pid));
173
+ closeSync(fd);
174
+ releaseOwnerLock = () => {
175
+ try {
176
+ unlinkSync(lockPath);
177
+ }
178
+ catch {
179
+ // 已不存在/无权限:忽略
180
+ }
181
+ };
182
+ process.once("exit", releaseOwnerLock);
183
+ }
89
184
  const now = monotonicNow();
90
185
  const ledger = new LedgerStore({ dir, now });
91
186
  const idempotency = new IdempotencyStore({ dir, now });
@@ -98,7 +193,7 @@ export async function startA2aNode(options) {
98
193
  productSource: buildProductSource(profile),
99
194
  })
100
195
  : defaultHandler();
101
- const holder = { baseUrl: url };
196
+ const holder = { baseUrl: advertisedBase };
102
197
  const server = new A2AServer({
103
198
  // A2AServerOptions.card 是 AgentCardConfigProvider:返回 config,server 内部再 buildAgentCard。
104
199
  // name 用干净显示名,不掺 agent_id(形如 agent:token,会被 card secret 扫描器判为 card_has_secret)。
@@ -110,27 +205,37 @@ export async function startA2aNode(options) {
110
205
  baseUrl: holder.baseUrl,
111
206
  a2aPath: "/",
112
207
  }),
208
+ // 发布 UCP Profile(/.well-known/ucp):注册广告了 ucp_profile_url,
209
+ // 端点就必须真实可拉——否则 catalog 验证的 profile 阶段拉 UCP 404 →
210
+ // freshness=unreachable → buyer 发现被 BLOCKED 列表挡掉。
211
+ ucp: true,
113
212
  ledger,
114
213
  idempotency,
115
214
  handler,
116
215
  now,
216
+ ...(options.authVerifier !== undefined ? { authVerifier: options.authVerifier } : {}),
117
217
  });
118
218
  const httpServer = server.createServer();
119
219
  await new Promise((resolve) => httpServer.listen(port, "127.0.0.1", () => resolve()));
120
- holder.baseUrl = url;
121
- const agentCardUrl = `${url}/.well-known/agent-card.json`;
220
+ holder.baseUrl = advertisedBase;
221
+ const agentCardUrl = `${advertisedBase}/.well-known/agent-card.json`;
122
222
  // merchant 角色:自动注册进 catalog(buyer 据此发现)。
123
223
  let catalogAgentId;
124
224
  if (role === "merchant" && options.catalog !== undefined) {
125
225
  const safeAgentId = profile.agent_id.replace(/[^a-z0-9-]/gi, "-").toLowerCase();
126
- const domain = process.env.KIWI_CATALOG_DOMAIN ?? `merchant-${safeAgentId}.local`;
226
+ // 注册域名:显式 KIWI_CATALOG_DOMAIN 优先;有公网广告地址则取其
227
+ // hostname(域名就是对外身份,catalog 据此做 well-known 域控制验证);
228
+ // 否则本地形态回退占位域名。
229
+ const domain = process.env.KIWI_CATALOG_DOMAIN ??
230
+ (advertisedBase !== url ? new URL(advertisedBase).hostname : `merchant-${safeAgentId}.local`);
127
231
  try {
128
232
  const reg = await registerCatalogAgent({
129
233
  catalogBaseUrl: options.catalog,
130
234
  domain,
131
235
  agentCardUrl,
132
- ucpProfileUrl: `${url}/.well-known/ucp`,
236
+ ucpProfileUrl: `${advertisedBase}/.well-known/ucp`,
133
237
  merchantId: profile.agent_id,
238
+ ownerToken: options.ownerToken,
134
239
  ownerTokenSecret: options.ownerTokenSecret,
135
240
  });
136
241
  catalogAgentId = reg.catalogAgentId;
@@ -143,12 +248,17 @@ export async function startA2aNode(options) {
143
248
  return {
144
249
  role,
145
250
  url,
251
+ advertisedUrl: advertisedBase,
146
252
  agentCardUrl,
147
253
  catalogAgentId,
148
254
  async stop() {
149
255
  httpServer.closeAllConnections?.();
150
256
  await new Promise((resolve) => httpServer.close(() => resolve()));
151
- rmSync(dir, { recursive: true, force: true });
257
+ // 审查 BUG-03:持久形态不删除状态目录(重启恢复依赖它);临时形态
258
+ // (demo/测试)维持删除。owner 锁总是释放。
259
+ releaseOwnerLock?.();
260
+ if (isEphemeral)
261
+ rmSync(dir, { recursive: true, force: true });
152
262
  },
153
263
  };
154
264
  }
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/a2a/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/a2a/node.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;