@harrylabsj/kiwi 0.6.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.
Files changed (636) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +150 -0
  3. package/contracts/candidate-agent-dto-1.0.README.md +39 -0
  4. package/contracts/candidate-agent-dto-1.0.schema.json +172 -0
  5. package/contracts/interop/kiwi-buyer-message-send.json +43 -0
  6. package/contracts/interop/knp-data-part-examples.json +243 -0
  7. package/contracts/kiwi-catalog/1.0/agent-record.schema.json +78 -0
  8. package/contracts/kiwi-catalog/1.0/listing-record.schema.json +88 -0
  9. package/contracts/kiwi-catalog/1.0/listing-search-result.schema.json +60 -0
  10. package/contracts/negotiation/1.0/schema.json +501 -0
  11. package/contracts/shopping.negotiation/0.1/capabilities.schema.json +47 -0
  12. package/contracts/shopping.negotiation/0.1/decision.schema.json +120 -0
  13. package/contracts/shopping.negotiation/0.1/policy-result.schema.json +52 -0
  14. package/contracts/shopping.negotiation/0.1/snapshot.schema.json +172 -0
  15. package/dist/a2a/client/client.d.ts +33 -0
  16. package/dist/a2a/client/client.js +161 -0
  17. package/dist/a2a/client/client.js.map +1 -0
  18. package/dist/a2a/client/error.d.ts +35 -0
  19. package/dist/a2a/client/error.js +34 -0
  20. package/dist/a2a/client/error.js.map +1 -0
  21. package/dist/a2a/client/index.d.ts +29 -0
  22. package/dist/a2a/client/index.js +26 -0
  23. package/dist/a2a/client/index.js.map +1 -0
  24. package/dist/a2a/client/jsonrpc.d.ts +49 -0
  25. package/dist/a2a/client/jsonrpc.js +85 -0
  26. package/dist/a2a/client/jsonrpc.js.map +1 -0
  27. package/dist/a2a/client/parse.d.ts +18 -0
  28. package/dist/a2a/client/parse.js +134 -0
  29. package/dist/a2a/client/parse.js.map +1 -0
  30. package/dist/a2a/client/types.d.ts +102 -0
  31. package/dist/a2a/client/types.js +26 -0
  32. package/dist/a2a/client/types.js.map +1 -0
  33. package/dist/a2a/client/url-policy.d.ts +44 -0
  34. package/dist/a2a/client/url-policy.js +242 -0
  35. package/dist/a2a/client/url-policy.js.map +1 -0
  36. package/dist/a2a/negotiate.d.ts +68 -0
  37. package/dist/a2a/negotiate.js +288 -0
  38. package/dist/a2a/negotiate.js.map +1 -0
  39. package/dist/a2a/node.d.ts +37 -0
  40. package/dist/a2a/node.js +155 -0
  41. package/dist/a2a/node.js.map +1 -0
  42. package/dist/a2a/server/auth.d.ts +38 -0
  43. package/dist/a2a/server/auth.js +112 -0
  44. package/dist/a2a/server/auth.js.map +1 -0
  45. package/dist/a2a/server/card.d.ts +19 -0
  46. package/dist/a2a/server/card.js +81 -0
  47. package/dist/a2a/server/card.js.map +1 -0
  48. package/dist/a2a/server/errors.d.ts +109 -0
  49. package/dist/a2a/server/errors.js +178 -0
  50. package/dist/a2a/server/errors.js.map +1 -0
  51. package/dist/a2a/server/handler.d.ts +22 -0
  52. package/dist/a2a/server/handler.js +57 -0
  53. package/dist/a2a/server/handler.js.map +1 -0
  54. package/dist/a2a/server/inbound-message.d.ts +37 -0
  55. package/dist/a2a/server/inbound-message.js +104 -0
  56. package/dist/a2a/server/inbound-message.js.map +1 -0
  57. package/dist/a2a/server/index.d.ts +43 -0
  58. package/dist/a2a/server/index.js +42 -0
  59. package/dist/a2a/server/index.js.map +1 -0
  60. package/dist/a2a/server/merchant-handler.d.ts +69 -0
  61. package/dist/a2a/server/merchant-handler.js +316 -0
  62. package/dist/a2a/server/merchant-handler.js.map +1 -0
  63. package/dist/a2a/server/pipeline.d.ts +69 -0
  64. package/dist/a2a/server/pipeline.js +329 -0
  65. package/dist/a2a/server/pipeline.js.map +1 -0
  66. package/dist/a2a/server/server.d.ts +64 -0
  67. package/dist/a2a/server/server.js +420 -0
  68. package/dist/a2a/server/server.js.map +1 -0
  69. package/dist/a2a/server/task-registry.d.ts +31 -0
  70. package/dist/a2a/server/task-registry.js +67 -0
  71. package/dist/a2a/server/task-registry.js.map +1 -0
  72. package/dist/a2a/server/throttle.d.ts +154 -0
  73. package/dist/a2a/server/throttle.js +289 -0
  74. package/dist/a2a/server/throttle.js.map +1 -0
  75. package/dist/a2a/server/types.d.ts +191 -0
  76. package/dist/a2a/server/types.js +17 -0
  77. package/dist/a2a/server/types.js.map +1 -0
  78. package/dist/a2a/server/ucp.d.ts +49 -0
  79. package/dist/a2a/server/ucp.js +85 -0
  80. package/dist/a2a/server/ucp.js.map +1 -0
  81. package/dist/a2a/task/index.d.ts +24 -0
  82. package/dist/a2a/task/index.js +22 -0
  83. package/dist/a2a/task/index.js.map +1 -0
  84. package/dist/a2a/task/ledger.d.ts +48 -0
  85. package/dist/a2a/task/ledger.js +65 -0
  86. package/dist/a2a/task/ledger.js.map +1 -0
  87. package/dist/a2a/task/poller.d.ts +93 -0
  88. package/dist/a2a/task/poller.js +184 -0
  89. package/dist/a2a/task/poller.js.map +1 -0
  90. package/dist/a2a/task/state.d.ts +72 -0
  91. package/dist/a2a/task/state.js +119 -0
  92. package/dist/a2a/task/state.js.map +1 -0
  93. package/dist/a2a/ucp-agent.d.ts +49 -0
  94. package/dist/a2a/ucp-agent.js +78 -0
  95. package/dist/a2a/ucp-agent.js.map +1 -0
  96. package/dist/agent/agent-db.d.ts +31 -0
  97. package/dist/agent/agent-db.js +91 -0
  98. package/dist/agent/agent-db.js.map +1 -0
  99. package/dist/agent/buyer/buyer-tools.d.ts +70 -0
  100. package/dist/agent/buyer/buyer-tools.js +1353 -0
  101. package/dist/agent/buyer/buyer-tools.js.map +1 -0
  102. package/dist/agent/buyer/ranker.d.ts +53 -0
  103. package/dist/agent/buyer/ranker.js +153 -0
  104. package/dist/agent/buyer/ranker.js.map +1 -0
  105. package/dist/agent/buyer/scheduler.d.ts +58 -0
  106. package/dist/agent/buyer/scheduler.js +317 -0
  107. package/dist/agent/buyer/scheduler.js.map +1 -0
  108. package/dist/agent/buyer/search-loop.d.ts +42 -0
  109. package/dist/agent/buyer/search-loop.js +280 -0
  110. package/dist/agent/buyer/search-loop.js.map +1 -0
  111. package/dist/agent/buyer/task-store.d.ts +178 -0
  112. package/dist/agent/buyer/task-store.js +637 -0
  113. package/dist/agent/buyer/task-store.js.map +1 -0
  114. package/dist/agent/buyer/types.d.ts +222 -0
  115. package/dist/agent/buyer/types.js +124 -0
  116. package/dist/agent/buyer/types.js.map +1 -0
  117. package/dist/agent/chat-tools.d.ts +41 -0
  118. package/dist/agent/chat-tools.js +193 -0
  119. package/dist/agent/chat-tools.js.map +1 -0
  120. package/dist/agent/chat-tui.d.ts +49 -0
  121. package/dist/agent/chat-tui.js +314 -0
  122. package/dist/agent/chat-tui.js.map +1 -0
  123. package/dist/agent/connector/fake-connector.d.ts +50 -0
  124. package/dist/agent/connector/fake-connector.js +138 -0
  125. package/dist/agent/connector/fake-connector.js.map +1 -0
  126. package/dist/agent/connector/http-connector.d.ts +49 -0
  127. package/dist/agent/connector/http-connector.js +208 -0
  128. package/dist/agent/connector/http-connector.js.map +1 -0
  129. package/dist/agent/connector/types.d.ts +103 -0
  130. package/dist/agent/connector/types.js +97 -0
  131. package/dist/agent/connector/types.js.map +1 -0
  132. package/dist/agent/fake-chat-model.d.ts +22 -0
  133. package/dist/agent/fake-chat-model.js +134 -0
  134. package/dist/agent/fake-chat-model.js.map +1 -0
  135. package/dist/agent/kernel.d.ts +258 -0
  136. package/dist/agent/kernel.js +1099 -0
  137. package/dist/agent/kernel.js.map +1 -0
  138. package/dist/agent/memory/schema.d.ts +32 -0
  139. package/dist/agent/memory/schema.js +291 -0
  140. package/dist/agent/memory/schema.js.map +1 -0
  141. package/dist/agent/memory/store.d.ts +193 -0
  142. package/dist/agent/memory/store.js +881 -0
  143. package/dist/agent/memory/store.js.map +1 -0
  144. package/dist/agent/memory/types.d.ts +139 -0
  145. package/dist/agent/memory/types.js +119 -0
  146. package/dist/agent/memory/types.js.map +1 -0
  147. package/dist/agent/memory/vault.d.ts +49 -0
  148. package/dist/agent/memory/vault.js +125 -0
  149. package/dist/agent/memory/vault.js.map +1 -0
  150. package/dist/agent/merchant/action-candidate.d.ts +106 -0
  151. package/dist/agent/merchant/action-candidate.js +241 -0
  152. package/dist/agent/merchant/action-candidate.js.map +1 -0
  153. package/dist/agent/merchant/credential-broker.d.ts +67 -0
  154. package/dist/agent/merchant/credential-broker.js +76 -0
  155. package/dist/agent/merchant/credential-broker.js.map +1 -0
  156. package/dist/agent/merchant/fake-merchant-client.d.ts +47 -0
  157. package/dist/agent/merchant/fake-merchant-client.js +143 -0
  158. package/dist/agent/merchant/fake-merchant-client.js.map +1 -0
  159. package/dist/agent/merchant/merchant-client.d.ts +49 -0
  160. package/dist/agent/merchant/merchant-client.js +186 -0
  161. package/dist/agent/merchant/merchant-client.js.map +1 -0
  162. package/dist/agent/merchant/merchant-tools.d.ts +74 -0
  163. package/dist/agent/merchant/merchant-tools.js +582 -0
  164. package/dist/agent/merchant/merchant-tools.js.map +1 -0
  165. package/dist/agent/merchant/types.d.ts +119 -0
  166. package/dist/agent/merchant/types.js +133 -0
  167. package/dist/agent/merchant/types.js.map +1 -0
  168. package/dist/agent/mode.d.ts +32 -0
  169. package/dist/agent/mode.js +34 -0
  170. package/dist/agent/mode.js.map +1 -0
  171. package/dist/agent/negotiation-chat.d.ts +81 -0
  172. package/dist/agent/negotiation-chat.js +330 -0
  173. package/dist/agent/negotiation-chat.js.map +1 -0
  174. package/dist/agent/session.d.ts +22 -0
  175. package/dist/agent/session.js +164 -0
  176. package/dist/agent/session.js.map +1 -0
  177. package/dist/agent/system-prompt.d.ts +26 -0
  178. package/dist/agent/system-prompt.js +77 -0
  179. package/dist/agent/system-prompt.js.map +1 -0
  180. package/dist/agent/write-gate.d.ts +98 -0
  181. package/dist/agent/write-gate.js +76 -0
  182. package/dist/agent/write-gate.js.map +1 -0
  183. package/dist/cli.d.ts +18 -0
  184. package/dist/cli.js +1139 -0
  185. package/dist/cli.js.map +1 -0
  186. package/dist/commerce/data-source.d.ts +88 -0
  187. package/dist/commerce/data-source.js +25 -0
  188. package/dist/commerce/data-source.js.map +1 -0
  189. package/dist/commerce/erp-source.d.ts +51 -0
  190. package/dist/commerce/erp-source.js +184 -0
  191. package/dist/commerce/erp-source.js.map +1 -0
  192. package/dist/commerce/fake-client.d.ts +167 -0
  193. package/dist/commerce/fake-client.js +549 -0
  194. package/dist/commerce/fake-client.js.map +1 -0
  195. package/dist/commerce/http-client.d.ts +73 -0
  196. package/dist/commerce/http-client.js +284 -0
  197. package/dist/commerce/http-client.js.map +1 -0
  198. package/dist/commerce/local-db-source.d.ts +50 -0
  199. package/dist/commerce/local-db-source.js +162 -0
  200. package/dist/commerce/local-db-source.js.map +1 -0
  201. package/dist/commerce/shopping-cli-source.d.ts +57 -0
  202. package/dist/commerce/shopping-cli-source.js +206 -0
  203. package/dist/commerce/shopping-cli-source.js.map +1 -0
  204. package/dist/commerce/types.d.ts +146 -0
  205. package/dist/commerce/types.js +31 -0
  206. package/dist/commerce/types.js.map +1 -0
  207. package/dist/config/profile.d.ts +122 -0
  208. package/dist/config/profile.js +386 -0
  209. package/dist/config/profile.js.map +1 -0
  210. package/dist/contracts/negotiation-schema.d.ts +28 -0
  211. package/dist/contracts/negotiation-schema.js +101 -0
  212. package/dist/contracts/negotiation-schema.js.map +1 -0
  213. package/dist/contracts/schemas.d.ts +31 -0
  214. package/dist/contracts/schemas.js +122 -0
  215. package/dist/contracts/schemas.js.map +1 -0
  216. package/dist/counterparty/a2a-direct/index.d.ts +41 -0
  217. package/dist/counterparty/a2a-direct/index.js +330 -0
  218. package/dist/counterparty/a2a-direct/index.js.map +1 -0
  219. package/dist/counterparty/channel.d.ts +200 -0
  220. package/dist/counterparty/channel.js +61 -0
  221. package/dist/counterparty/channel.js.map +1 -0
  222. package/dist/counterparty/index.d.ts +28 -0
  223. package/dist/counterparty/index.js +24 -0
  224. package/dist/counterparty/index.js.map +1 -0
  225. package/dist/counterparty/platform-api/index.d.ts +41 -0
  226. package/dist/counterparty/platform-api/index.js +65 -0
  227. package/dist/counterparty/platform-api/index.js.map +1 -0
  228. package/dist/counterparty/registry.d.ts +51 -0
  229. package/dist/counterparty/registry.js +71 -0
  230. package/dist/counterparty/registry.js.map +1 -0
  231. package/dist/counterparty/shopping-cli-hosted/index.d.ts +36 -0
  232. package/dist/counterparty/shopping-cli-hosted/index.js +337 -0
  233. package/dist/counterparty/shopping-cli-hosted/index.js.map +1 -0
  234. package/dist/discovery/agent-card/error.d.ts +28 -0
  235. package/dist/discovery/agent-card/error.js +31 -0
  236. package/dist/discovery/agent-card/error.js.map +1 -0
  237. package/dist/discovery/agent-card/extensions.d.ts +20 -0
  238. package/dist/discovery/agent-card/extensions.js +59 -0
  239. package/dist/discovery/agent-card/extensions.js.map +1 -0
  240. package/dist/discovery/agent-card/index.d.ts +29 -0
  241. package/dist/discovery/agent-card/index.js +38 -0
  242. package/dist/discovery/agent-card/index.js.map +1 -0
  243. package/dist/discovery/agent-card/secrets.d.ts +30 -0
  244. package/dist/discovery/agent-card/secrets.js +240 -0
  245. package/dist/discovery/agent-card/secrets.js.map +1 -0
  246. package/dist/discovery/agent-card/types.d.ts +110 -0
  247. package/dist/discovery/agent-card/types.js +37 -0
  248. package/dist/discovery/agent-card/types.js.map +1 -0
  249. package/dist/discovery/agent-card/validate.d.ts +31 -0
  250. package/dist/discovery/agent-card/validate.js +210 -0
  251. package/dist/discovery/agent-card/validate.js.map +1 -0
  252. package/dist/discovery/capability/error.d.ts +23 -0
  253. package/dist/discovery/capability/error.js +28 -0
  254. package/dist/discovery/capability/error.js.map +1 -0
  255. package/dist/discovery/capability/index.d.ts +21 -0
  256. package/dist/discovery/capability/index.js +21 -0
  257. package/dist/discovery/capability/index.js.map +1 -0
  258. package/dist/discovery/capability/intersect.d.ts +56 -0
  259. package/dist/discovery/capability/intersect.js +137 -0
  260. package/dist/discovery/capability/intersect.js.map +1 -0
  261. package/dist/discovery/catalog-source/errors.d.ts +32 -0
  262. package/dist/discovery/catalog-source/errors.js +41 -0
  263. package/dist/discovery/catalog-source/errors.js.map +1 -0
  264. package/dist/discovery/catalog-source/index.d.ts +30 -0
  265. package/dist/discovery/catalog-source/index.js +29 -0
  266. package/dist/discovery/catalog-source/index.js.map +1 -0
  267. package/dist/discovery/catalog-source/kiwi-record.d.ts +183 -0
  268. package/dist/discovery/catalog-source/kiwi-record.js +72 -0
  269. package/dist/discovery/catalog-source/kiwi-record.js.map +1 -0
  270. package/dist/discovery/catalog-source/kiwi-schema.d.ts +33 -0
  271. package/dist/discovery/catalog-source/kiwi-schema.js +106 -0
  272. package/dist/discovery/catalog-source/kiwi-schema.js.map +1 -0
  273. package/dist/discovery/catalog-source/kiwi-source.d.ts +38 -0
  274. package/dist/discovery/catalog-source/kiwi-source.js +318 -0
  275. package/dist/discovery/catalog-source/kiwi-source.js.map +1 -0
  276. package/dist/discovery/catalog-source/register.d.ts +48 -0
  277. package/dist/discovery/catalog-source/register.js +83 -0
  278. package/dist/discovery/catalog-source/register.js.map +1 -0
  279. package/dist/discovery/catalog-source/schema.d.ts +21 -0
  280. package/dist/discovery/catalog-source/schema.js +63 -0
  281. package/dist/discovery/catalog-source/schema.js.map +1 -0
  282. package/dist/discovery/catalog-source/source.d.ts +45 -0
  283. package/dist/discovery/catalog-source/source.js +197 -0
  284. package/dist/discovery/catalog-source/source.js.map +1 -0
  285. package/dist/discovery/catalog-source/types.d.ts +122 -0
  286. package/dist/discovery/catalog-source/types.js +30 -0
  287. package/dist/discovery/catalog-source/types.js.map +1 -0
  288. package/dist/discovery/index.d.ts +25 -0
  289. package/dist/discovery/index.js +25 -0
  290. package/dist/discovery/index.js.map +1 -0
  291. package/dist/discovery/resolve.d.ts +175 -0
  292. package/dist/discovery/resolve.js +367 -0
  293. package/dist/discovery/resolve.js.map +1 -0
  294. package/dist/discovery/ucp/error.d.ts +25 -0
  295. package/dist/discovery/ucp/error.js +27 -0
  296. package/dist/discovery/ucp/error.js.map +1 -0
  297. package/dist/discovery/ucp/index.d.ts +33 -0
  298. package/dist/discovery/ucp/index.js +28 -0
  299. package/dist/discovery/ucp/index.js.map +1 -0
  300. package/dist/discovery/ucp/intersect.d.ts +148 -0
  301. package/dist/discovery/ucp/intersect.js +312 -0
  302. package/dist/discovery/ucp/intersect.js.map +1 -0
  303. package/dist/discovery/ucp/resolver.d.ts +62 -0
  304. package/dist/discovery/ucp/resolver.js +214 -0
  305. package/dist/discovery/ucp/resolver.js.map +1 -0
  306. package/dist/discovery/ucp/types.d.ts +97 -0
  307. package/dist/discovery/ucp/types.js +103 -0
  308. package/dist/discovery/ucp/types.js.map +1 -0
  309. package/dist/discovery/ucp/validate.d.ts +38 -0
  310. package/dist/discovery/ucp/validate.js +232 -0
  311. package/dist/discovery/ucp/validate.js.map +1 -0
  312. package/dist/discovery/ucp/vendor.d.ts +60 -0
  313. package/dist/discovery/ucp/vendor.js +61 -0
  314. package/dist/discovery/ucp/vendor.js.map +1 -0
  315. package/dist/doctor.d.ts +26 -0
  316. package/dist/doctor.js +113 -0
  317. package/dist/doctor.js.map +1 -0
  318. package/dist/exit-codes.d.ts +26 -0
  319. package/dist/exit-codes.js +27 -0
  320. package/dist/exit-codes.js.map +1 -0
  321. package/dist/fanout/disclosure.d.ts +138 -0
  322. package/dist/fanout/disclosure.js +188 -0
  323. package/dist/fanout/disclosure.js.map +1 -0
  324. package/dist/fanout/index.d.ts +32 -0
  325. package/dist/fanout/index.js +30 -0
  326. package/dist/fanout/index.js.map +1 -0
  327. package/dist/fanout/orchestrator.d.ts +153 -0
  328. package/dist/fanout/orchestrator.js +439 -0
  329. package/dist/fanout/orchestrator.js.map +1 -0
  330. package/dist/fanout/policy.d.ts +128 -0
  331. package/dist/fanout/policy.js +130 -0
  332. package/dist/fanout/policy.js.map +1 -0
  333. package/dist/handoff/acp-commerce.d.ts +58 -0
  334. package/dist/handoff/acp-commerce.js +69 -0
  335. package/dist/handoff/acp-commerce.js.map +1 -0
  336. package/dist/handoff/authorization.d.ts +127 -0
  337. package/dist/handoff/authorization.js +107 -0
  338. package/dist/handoff/authorization.js.map +1 -0
  339. package/dist/handoff/candidate.d.ts +94 -0
  340. package/dist/handoff/candidate.js +172 -0
  341. package/dist/handoff/candidate.js.map +1 -0
  342. package/dist/handoff/channel.d.ts +88 -0
  343. package/dist/handoff/channel.js +189 -0
  344. package/dist/handoff/channel.js.map +1 -0
  345. package/dist/handoff/completion.d.ts +44 -0
  346. package/dist/handoff/completion.js +136 -0
  347. package/dist/handoff/completion.js.map +1 -0
  348. package/dist/handoff/delivery.d.ts +59 -0
  349. package/dist/handoff/delivery.js +185 -0
  350. package/dist/handoff/delivery.js.map +1 -0
  351. package/dist/handoff/destination.d.ts +39 -0
  352. package/dist/handoff/destination.js +99 -0
  353. package/dist/handoff/destination.js.map +1 -0
  354. package/dist/handoff/errors.d.ts +34 -0
  355. package/dist/handoff/errors.js +47 -0
  356. package/dist/handoff/errors.js.map +1 -0
  357. package/dist/handoff/idempotency.d.ts +51 -0
  358. package/dist/handoff/idempotency.js +168 -0
  359. package/dist/handoff/idempotency.js.map +1 -0
  360. package/dist/handoff/index.d.ts +46 -0
  361. package/dist/handoff/index.js +48 -0
  362. package/dist/handoff/index.js.map +1 -0
  363. package/dist/handoff/ledger.d.ts +94 -0
  364. package/dist/handoff/ledger.js +195 -0
  365. package/dist/handoff/ledger.js.map +1 -0
  366. package/dist/handoff/lifecycle.d.ts +29 -0
  367. package/dist/handoff/lifecycle.js +102 -0
  368. package/dist/handoff/lifecycle.js.map +1 -0
  369. package/dist/handoff/metrics.d.ts +56 -0
  370. package/dist/handoff/metrics.js +78 -0
  371. package/dist/handoff/metrics.js.map +1 -0
  372. package/dist/handoff/operator-approval.d.ts +143 -0
  373. package/dist/handoff/operator-approval.js +287 -0
  374. package/dist/handoff/operator-approval.js.map +1 -0
  375. package/dist/handoff/order-record.d.ts +104 -0
  376. package/dist/handoff/order-record.js +235 -0
  377. package/dist/handoff/order-record.js.map +1 -0
  378. package/dist/handoff/package.d.ts +102 -0
  379. package/dist/handoff/package.js +132 -0
  380. package/dist/handoff/package.js.map +1 -0
  381. package/dist/handoff/transaction.d.ts +96 -0
  382. package/dist/handoff/transaction.js +263 -0
  383. package/dist/handoff/transaction.js.map +1 -0
  384. package/dist/handoff/ucp-checkout/cart-channel.d.ts +111 -0
  385. package/dist/handoff/ucp-checkout/cart-channel.js +370 -0
  386. package/dist/handoff/ucp-checkout/cart-channel.js.map +1 -0
  387. package/dist/handoff/ucp-checkout/cart-parse.d.ts +22 -0
  388. package/dist/handoff/ucp-checkout/cart-parse.js +102 -0
  389. package/dist/handoff/ucp-checkout/cart-parse.js.map +1 -0
  390. package/dist/handoff/ucp-checkout/cart-types.d.ts +93 -0
  391. package/dist/handoff/ucp-checkout/cart-types.js +38 -0
  392. package/dist/handoff/ucp-checkout/cart-types.js.map +1 -0
  393. package/dist/handoff/ucp-checkout/channel.d.ts +159 -0
  394. package/dist/handoff/ucp-checkout/channel.js +636 -0
  395. package/dist/handoff/ucp-checkout/channel.js.map +1 -0
  396. package/dist/handoff/ucp-checkout/client.d.ts +88 -0
  397. package/dist/handoff/ucp-checkout/client.js +228 -0
  398. package/dist/handoff/ucp-checkout/client.js.map +1 -0
  399. package/dist/handoff/ucp-checkout/endpoint.d.ts +36 -0
  400. package/dist/handoff/ucp-checkout/endpoint.js +145 -0
  401. package/dist/handoff/ucp-checkout/endpoint.js.map +1 -0
  402. package/dist/handoff/ucp-checkout/index.d.ts +35 -0
  403. package/dist/handoff/ucp-checkout/index.js +36 -0
  404. package/dist/handoff/ucp-checkout/index.js.map +1 -0
  405. package/dist/handoff/ucp-checkout/parse.d.ts +71 -0
  406. package/dist/handoff/ucp-checkout/parse.js +349 -0
  407. package/dist/handoff/ucp-checkout/parse.js.map +1 -0
  408. package/dist/handoff/ucp-checkout/totals.d.ts +41 -0
  409. package/dist/handoff/ucp-checkout/totals.js +36 -0
  410. package/dist/handoff/ucp-checkout/totals.js.map +1 -0
  411. package/dist/handoff/ucp-checkout/types.d.ts +149 -0
  412. package/dist/handoff/ucp-checkout/types.js +58 -0
  413. package/dist/handoff/ucp-checkout/types.js.map +1 -0
  414. package/dist/handoff/url-safety.d.ts +44 -0
  415. package/dist/handoff/url-safety.js +121 -0
  416. package/dist/handoff/url-safety.js.map +1 -0
  417. package/dist/i18n.d.ts +24 -0
  418. package/dist/i18n.js +27 -0
  419. package/dist/i18n.js.map +1 -0
  420. package/dist/negotiation/action-candidate.d.ts +97 -0
  421. package/dist/negotiation/action-candidate.js +160 -0
  422. package/dist/negotiation/action-candidate.js.map +1 -0
  423. package/dist/negotiation/condition/evaluator.d.ts +36 -0
  424. package/dist/negotiation/condition/evaluator.js +123 -0
  425. package/dist/negotiation/condition/evaluator.js.map +1 -0
  426. package/dist/negotiation/context-map/index.d.ts +23 -0
  427. package/dist/negotiation/context-map/index.js +22 -0
  428. package/dist/negotiation/context-map/index.js.map +1 -0
  429. package/dist/negotiation/context-map/store.d.ts +51 -0
  430. package/dist/negotiation/context-map/store.js +186 -0
  431. package/dist/negotiation/context-map/store.js.map +1 -0
  432. package/dist/negotiation/context-map/types.d.ts +29 -0
  433. package/dist/negotiation/context-map/types.js +57 -0
  434. package/dist/negotiation/context-map/types.js.map +1 -0
  435. package/dist/negotiation/domain/common.d.ts +95 -0
  436. package/dist/negotiation/domain/common.js +216 -0
  437. package/dist/negotiation/domain/common.js.map +1 -0
  438. package/dist/negotiation/domain/envelope.d.ts +55 -0
  439. package/dist/negotiation/domain/envelope.js +110 -0
  440. package/dist/negotiation/domain/envelope.js.map +1 -0
  441. package/dist/negotiation/domain/identifiers.d.ts +65 -0
  442. package/dist/negotiation/domain/identifiers.js +130 -0
  443. package/dist/negotiation/domain/identifiers.js.map +1 -0
  444. package/dist/negotiation/domain/objects.d.ts +149 -0
  445. package/dist/negotiation/domain/objects.js +335 -0
  446. package/dist/negotiation/domain/objects.js.map +1 -0
  447. package/dist/negotiation/idempotency/index.d.ts +26 -0
  448. package/dist/negotiation/idempotency/index.js +25 -0
  449. package/dist/negotiation/idempotency/index.js.map +1 -0
  450. package/dist/negotiation/idempotency/store.d.ts +52 -0
  451. package/dist/negotiation/idempotency/store.js +189 -0
  452. package/dist/negotiation/idempotency/store.js.map +1 -0
  453. package/dist/negotiation/idempotency/types.d.ts +102 -0
  454. package/dist/negotiation/idempotency/types.js +47 -0
  455. package/dist/negotiation/idempotency/types.js.map +1 -0
  456. package/dist/negotiation/jcs.d.ts +21 -0
  457. package/dist/negotiation/jcs.js +114 -0
  458. package/dist/negotiation/jcs.js.map +1 -0
  459. package/dist/negotiation/ledger/event.d.ts +142 -0
  460. package/dist/negotiation/ledger/event.js +206 -0
  461. package/dist/negotiation/ledger/event.js.map +1 -0
  462. package/dist/negotiation/ledger/index.d.ts +26 -0
  463. package/dist/negotiation/ledger/index.js +25 -0
  464. package/dist/negotiation/ledger/index.js.map +1 -0
  465. package/dist/negotiation/ledger/store.d.ts +97 -0
  466. package/dist/negotiation/ledger/store.js +338 -0
  467. package/dist/negotiation/ledger/store.js.map +1 -0
  468. package/dist/negotiation/prompt.d.ts +34 -0
  469. package/dist/negotiation/prompt.js +113 -0
  470. package/dist/negotiation/prompt.js.map +1 -0
  471. package/dist/negotiation/recovery/index.d.ts +26 -0
  472. package/dist/negotiation/recovery/index.js +24 -0
  473. package/dist/negotiation/recovery/index.js.map +1 -0
  474. package/dist/negotiation/recovery/outbound.d.ts +49 -0
  475. package/dist/negotiation/recovery/outbound.js +34 -0
  476. package/dist/negotiation/recovery/outbound.js.map +1 -0
  477. package/dist/negotiation/recovery/recover.d.ts +59 -0
  478. package/dist/negotiation/recovery/recover.js +486 -0
  479. package/dist/negotiation/recovery/recover.js.map +1 -0
  480. package/dist/negotiation/recovery/types.d.ts +85 -0
  481. package/dist/negotiation/recovery/types.js +17 -0
  482. package/dist/negotiation/recovery/types.js.map +1 -0
  483. package/dist/negotiation/state/phase.d.ts +70 -0
  484. package/dist/negotiation/state/phase.js +200 -0
  485. package/dist/negotiation/state/phase.js.map +1 -0
  486. package/dist/negotiation/types.d.ts +139 -0
  487. package/dist/negotiation/types.js +24 -0
  488. package/dist/negotiation/types.js.map +1 -0
  489. package/dist/net/safe-http.d.ts +54 -0
  490. package/dist/net/safe-http.js +116 -0
  491. package/dist/net/safe-http.js.map +1 -0
  492. package/dist/operator/controller.d.ts +181 -0
  493. package/dist/operator/controller.js +784 -0
  494. package/dist/operator/controller.js.map +1 -0
  495. package/dist/operator/runner.d.ts +128 -0
  496. package/dist/operator/runner.js +248 -0
  497. package/dist/operator/runner.js.map +1 -0
  498. package/dist/operator/store.d.ts +39 -0
  499. package/dist/operator/store.js +169 -0
  500. package/dist/operator/store.js.map +1 -0
  501. package/dist/operator/strategy.d.ts +54 -0
  502. package/dist/operator/strategy.js +249 -0
  503. package/dist/operator/strategy.js.map +1 -0
  504. package/dist/operator/tui.d.ts +27 -0
  505. package/dist/operator/tui.js +395 -0
  506. package/dist/operator/tui.js.map +1 -0
  507. package/dist/operator/types.d.ts +224 -0
  508. package/dist/operator/types.js +17 -0
  509. package/dist/operator/types.js.map +1 -0
  510. package/dist/product-buyer.d.ts +74 -0
  511. package/dist/product-buyer.js +161 -0
  512. package/dist/product-buyer.js.map +1 -0
  513. package/dist/product-cli.d.ts +56 -0
  514. package/dist/product-cli.js +175 -0
  515. package/dist/product-cli.js.map +1 -0
  516. package/dist/product-compat.d.ts +50 -0
  517. package/dist/product-compat.js +63 -0
  518. package/dist/product-compat.js.map +1 -0
  519. package/dist/product-init.d.ts +73 -0
  520. package/dist/product-init.js +203 -0
  521. package/dist/product-init.js.map +1 -0
  522. package/dist/product-publish.d.ts +85 -0
  523. package/dist/product-publish.js +216 -0
  524. package/dist/product-publish.js.map +1 -0
  525. package/dist/protocol/legacy-shopping-negotiation/adapter.d.ts +42 -0
  526. package/dist/protocol/legacy-shopping-negotiation/adapter.js +561 -0
  527. package/dist/protocol/legacy-shopping-negotiation/adapter.js.map +1 -0
  528. package/dist/protocol/legacy-shopping-negotiation/mapping.d.ts +78 -0
  529. package/dist/protocol/legacy-shopping-negotiation/mapping.js +321 -0
  530. package/dist/protocol/legacy-shopping-negotiation/mapping.js.map +1 -0
  531. package/dist/protocol/legacy-shopping-negotiation/money.d.ts +49 -0
  532. package/dist/protocol/legacy-shopping-negotiation/money.js +70 -0
  533. package/dist/protocol/legacy-shopping-negotiation/money.js.map +1 -0
  534. package/dist/protocol/legacy-shopping-negotiation/types.d.ts +107 -0
  535. package/dist/protocol/legacy-shopping-negotiation/types.js +34 -0
  536. package/dist/protocol/legacy-shopping-negotiation/types.js.map +1 -0
  537. package/dist/runtime/buyer-policy.d.ts +58 -0
  538. package/dist/runtime/buyer-policy.js +89 -0
  539. package/dist/runtime/buyer-policy.js.map +1 -0
  540. package/dist/runtime/fake-model.d.ts +77 -0
  541. package/dist/runtime/fake-model.js +307 -0
  542. package/dist/runtime/fake-model.js.map +1 -0
  543. package/dist/runtime/foreground.d.ts +56 -0
  544. package/dist/runtime/foreground.js +97 -0
  545. package/dist/runtime/foreground.js.map +1 -0
  546. package/dist/runtime/heartbeat.d.ts +36 -0
  547. package/dist/runtime/heartbeat.js +49 -0
  548. package/dist/runtime/heartbeat.js.map +1 -0
  549. package/dist/runtime/merchant-turn.d.ts +35 -0
  550. package/dist/runtime/merchant-turn.js +20 -0
  551. package/dist/runtime/merchant-turn.js.map +1 -0
  552. package/dist/runtime/model.d.ts +40 -0
  553. package/dist/runtime/model.js +86 -0
  554. package/dist/runtime/model.js.map +1 -0
  555. package/dist/runtime/negotiation-turn.d.ts +101 -0
  556. package/dist/runtime/negotiation-turn.js +317 -0
  557. package/dist/runtime/negotiation-turn.js.map +1 -0
  558. package/dist/runtime/tools.d.ts +64 -0
  559. package/dist/runtime/tools.js +236 -0
  560. package/dist/runtime/tools.js.map +1 -0
  561. package/dist/supervisor/init.d.ts +31 -0
  562. package/dist/supervisor/init.js +222 -0
  563. package/dist/supervisor/init.js.map +1 -0
  564. package/dist/supervisor/logs.d.ts +28 -0
  565. package/dist/supervisor/logs.js +101 -0
  566. package/dist/supervisor/logs.js.map +1 -0
  567. package/dist/supervisor/manage.d.ts +72 -0
  568. package/dist/supervisor/manage.js +419 -0
  569. package/dist/supervisor/manage.js.map +1 -0
  570. package/dist/supervisor/manifest.d.ts +69 -0
  571. package/dist/supervisor/manifest.js +209 -0
  572. package/dist/supervisor/manifest.js.map +1 -0
  573. package/dist/supervisor/stack-config.d.ts +79 -0
  574. package/dist/supervisor/stack-config.js +262 -0
  575. package/dist/supervisor/stack-config.js.map +1 -0
  576. package/dist/supervisor/wrapper.d.ts +17 -0
  577. package/dist/supervisor/wrapper.js +138 -0
  578. package/dist/supervisor/wrapper.js.map +1 -0
  579. package/dist/trust/identity/auth-verifier.d.ts +96 -0
  580. package/dist/trust/identity/auth-verifier.js +166 -0
  581. package/dist/trust/identity/auth-verifier.js.map +1 -0
  582. package/dist/trust/identity/identity-binding.d.ts +63 -0
  583. package/dist/trust/identity/identity-binding.js +59 -0
  584. package/dist/trust/identity/identity-binding.js.map +1 -0
  585. package/dist/trust/identity/index.d.ts +38 -0
  586. package/dist/trust/identity/index.js +31 -0
  587. package/dist/trust/identity/index.js.map +1 -0
  588. package/dist/trust/identity/jws.d.ts +64 -0
  589. package/dist/trust/identity/jws.js +178 -0
  590. package/dist/trust/identity/jws.js.map +1 -0
  591. package/dist/trust/identity/keys.d.ts +71 -0
  592. package/dist/trust/identity/keys.js +118 -0
  593. package/dist/trust/identity/keys.js.map +1 -0
  594. package/dist/trust/identity/message-signature.d.ts +105 -0
  595. package/dist/trust/identity/message-signature.js +297 -0
  596. package/dist/trust/identity/message-signature.js.map +1 -0
  597. package/dist/trust/identity/nonce.d.ts +45 -0
  598. package/dist/trust/identity/nonce.js +50 -0
  599. package/dist/trust/identity/nonce.js.map +1 -0
  600. package/dist/trust/identity/signature-base.d.ts +84 -0
  601. package/dist/trust/identity/signature-base.js +261 -0
  602. package/dist/trust/identity/signature-base.js.map +1 -0
  603. package/dist/trust/identity/trust-policy.d.ts +92 -0
  604. package/dist/trust/identity/trust-policy.js +95 -0
  605. package/dist/trust/identity/trust-policy.js.map +1 -0
  606. package/dist/trust/index.d.ts +21 -0
  607. package/dist/trust/index.js +22 -0
  608. package/dist/trust/index.js.map +1 -0
  609. package/dist/trust/records/evaluator.d.ts +76 -0
  610. package/dist/trust/records/evaluator.js +122 -0
  611. package/dist/trust/records/evaluator.js.map +1 -0
  612. package/dist/trust/records/index.d.ts +28 -0
  613. package/dist/trust/records/index.js +26 -0
  614. package/dist/trust/records/index.js.map +1 -0
  615. package/dist/trust/records/store.d.ts +75 -0
  616. package/dist/trust/records/store.js +339 -0
  617. package/dist/trust/records/store.js.map +1 -0
  618. package/dist/trust/records/types.d.ts +159 -0
  619. package/dist/trust/records/types.js +40 -0
  620. package/dist/trust/records/types.js.map +1 -0
  621. package/dist/tui/banner.d.ts +46 -0
  622. package/dist/tui/banner.js +99 -0
  623. package/dist/tui/banner.js.map +1 -0
  624. package/dist/tui/styles.d.ts +70 -0
  625. package/dist/tui/styles.js +197 -0
  626. package/dist/tui/styles.js.map +1 -0
  627. package/dist/tui/theme.d.ts +63 -0
  628. package/dist/tui/theme.js +136 -0
  629. package/dist/tui/theme.js.map +1 -0
  630. package/examples/profiles/buyer.deepseek.yaml +34 -0
  631. package/examples/profiles/buyer.fake.yaml +36 -0
  632. package/examples/profiles/buyer.local.yaml +40 -0
  633. package/examples/profiles/merchant.deepseek.yaml +32 -0
  634. package/examples/profiles/merchant.fake.yaml +31 -0
  635. package/examples/profiles/merchant.local.yaml +34 -0
  636. package/package.json +55 -0
@@ -0,0 +1,49 @@
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
+ import { WELL_KNOWN_UCP_PATH } from "../../discovery/ucp/resolver.js";
17
+ import type { UcpProfile } from "../../discovery/ucp/types.js";
18
+ import type { AgentCardConfig } from "./types.js";
19
+ export { WELL_KNOWN_UCP_PATH };
20
+ /** buildKiwiVendorProfile 透传选项(agentCardUrl 由本模块推导,不在此暴露)。 */
21
+ export interface UcpVendorOptions {
22
+ authority?: string;
23
+ version?: string;
24
+ capabilityName?: string;
25
+ serviceName?: string;
26
+ ucpVersion?: string;
27
+ }
28
+ /** UCP Profile 发布选项(A2AServerOptions.ucp)。 */
29
+ export interface UcpPublishOptions {
30
+ /** 是否发布(缺省 true)。 */
31
+ enabled?: boolean;
32
+ /** 本 server 的 Agent Card well-known 路径(默认 /.well-known/agent-card.json)。 */
33
+ wellKnownPath?: string;
34
+ /** Cache-Control max-age 秒(默认 300,必须 >= 60,UCP 规范强制)。 */
35
+ maxAgeSeconds?: number;
36
+ /** buildKiwiVendorProfile 透传选项(authority 等)。 */
37
+ vendor?: UcpVendorOptions;
38
+ }
39
+ /** buildUcpProfile 的产物:可发布 profile + 计算好的 Cache-Control 头。 */
40
+ export interface BuiltUcpProfile {
41
+ profile: UcpProfile;
42
+ cacheControl: string;
43
+ maxAgeSeconds: number;
44
+ }
45
+ /**
46
+ * 从本地 Agent Card 配置生成 UCP Profile。构建结果强制过 validateUcpProfile
47
+ * 自洽校验(fail-closed:被拒条目存在即抛错,不发布坏 profile)。
48
+ */
49
+ export declare function buildUcpProfile(config: AgentCardConfig, opts?: UcpPublishOptions): BuiltUcpProfile;
@@ -0,0 +1,85 @@
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
+ * UCP Profile 服务化(WP3,基线 §25 / §8.3 / §43)。
18
+ *
19
+ * merchant 侧从 AgentCardConfig 生成 UCP Profile 并在 `GET /.well-known/ucp`
20
+ * 上发布(UCP 规范强制的标准发现入口):
21
+ *
22
+ * - a2a service transport:endpoint 指向本 server 的 Agent Card well-known
23
+ * URL(`<baseUrl>/.well-known/agent-card.json`),基线 §25;
24
+ * - Kiwi vendor capability:`com.harrylabsj.kiwi.shopping.negotiation`(§8.3,
25
+ * 真实 authority `kiwi.harrylabsj.com`,spec/schema 需托管在该域名上)。
26
+ *
27
+ * 不声明任何 `dev.ucp.*` capability:该 namespace 为 UCP 治理机构保留,vendor
28
+ * 不得占用(`dev.ucp.shopping.*` 官方 capability 仅 checkout / cart / order /
29
+ * fulfillment / discount);Kiwi 协商能力以 Vendor Root Capability 形态发布(§25.2)。
30
+ *
31
+ * 构建结果强制过 validateUcpProfile 自洽校验(fail-closed:过不了校验就不发)。
32
+ * 响应头 Cache-Control 由 buildUcpProfile 计算(`public, max-age=N`,N>=60)。
33
+ *
34
+ * 零新增依赖。
35
+ */
36
+ import { buildKiwiVendorProfile } from "../../discovery/ucp/vendor.js";
37
+ import { validateUcpProfile } from "../../discovery/ucp/validate.js";
38
+ import { WELL_KNOWN_UCP_PATH } from "../../discovery/ucp/resolver.js";
39
+ export { WELL_KNOWN_UCP_PATH };
40
+ const DEFAULT_WELL_KNOWN_AGENT_CARD_PATH = "/.well-known/agent-card.json";
41
+ const DEFAULT_MAX_AGE_SECONDS = 300;
42
+ const MIN_MAX_AGE_SECONDS = 60;
43
+ function requireHttpUrl(value, field) {
44
+ let url;
45
+ try {
46
+ url = new URL(value);
47
+ }
48
+ catch {
49
+ throw new Error(`AgentCardConfig: ${field} must be a valid URL (got "${value}")`);
50
+ }
51
+ if (url.protocol !== "https:" && url.protocol !== "http:") {
52
+ throw new Error(`AgentCardConfig: ${field} must use http or https (got ${url.protocol})`);
53
+ }
54
+ if (url.username !== "" || url.password !== "") {
55
+ throw new Error(`AgentCardConfig: ${field} must not embed credentials (userinfo)`);
56
+ }
57
+ return url;
58
+ }
59
+ /**
60
+ * 从本地 Agent Card 配置生成 UCP Profile。构建结果强制过 validateUcpProfile
61
+ * 自洽校验(fail-closed:被拒条目存在即抛错,不发布坏 profile)。
62
+ */
63
+ export function buildUcpProfile(config, opts = {}) {
64
+ const baseUrl = requireHttpUrl(config.baseUrl, "baseUrl");
65
+ const maxAgeSeconds = opts.maxAgeSeconds ?? DEFAULT_MAX_AGE_SECONDS;
66
+ if (!Number.isInteger(maxAgeSeconds) || maxAgeSeconds < MIN_MAX_AGE_SECONDS) {
67
+ throw new Error(`UCP profile Cache-Control max-age must be an integer >= ${MIN_MAX_AGE_SECONDS} (got ${maxAgeSeconds})`);
68
+ }
69
+ const wellKnownPath = opts.wellKnownPath ?? DEFAULT_WELL_KNOWN_AGENT_CARD_PATH;
70
+ const agentCardUrl = new URL(wellKnownPath, baseUrl).href;
71
+ const profile = buildKiwiVendorProfile({ agentCardUrl, ...opts.vendor });
72
+ const validation = validateUcpProfile(profile);
73
+ if (validation.rejected.length > 0) {
74
+ const detail = validation.rejected
75
+ .map((r) => `${r.name} (${r.code})`)
76
+ .join("; ");
77
+ throw new Error(`UCP profile failed validation: ${detail}`);
78
+ }
79
+ return {
80
+ profile: validation.profile,
81
+ cacheControl: `public, max-age=${maxAgeSeconds}`,
82
+ maxAgeSeconds,
83
+ };
84
+ }
85
+ //# sourceMappingURL=ucp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ucp.js","sourceRoot":"","sources":["../../../src/a2a/server/ucp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAItE,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,MAAM,kCAAkC,GAAG,8BAA8B,CAAC;AAC1E,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AA8B/B,SAAS,cAAc,CAAC,KAAa,EAAE,KAAa;IAClD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,8BAA8B,KAAK,IAAI,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,gCAAgC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,wCAAwC,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAuB,EACvB,OAA0B,EAAE;IAE5B,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,uBAAuB,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,mBAAmB,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CACb,2DAA2D,mBAAmB,SAAS,aAAa,GAAG,CACxG,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,kCAAkC,CAAC;IAC/E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IAC1D,MAAM,OAAO,GAAG,sBAAsB,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzE,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;aACnC,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,YAAY,EAAE,mBAAmB,aAAa,EAAE;QAChD,aAAa;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
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/task — A2A Task 生命周期模型 + 轮询器(WP3,基线 §18.3 / §23)。
18
+ */
19
+ export { A2A_TASK_STATES_REAL, A2A_TASK_TERMINAL_STATES, A2A_TASK_TRANSITIONS, isRealTaskState, isTaskState, isTerminalTaskState, isWaitingTaskState, TaskLifecycleTracker, transitionTaskState, TaskStateError, } from "./state.js";
20
+ export type { A2ATaskTerminalState, TaskStateErrorCode } from "./state.js";
21
+ export { recordTaskObservation } from "./ledger.js";
22
+ export type { TaskObservationInput } from "./ledger.js";
23
+ export { A2ATaskPoller } from "./poller.js";
24
+ export type { PollResult, PollStatus, TaskPollerClient, TaskPollerLedgerOptions, TaskPollerOptions, } from "./poller.js";
@@ -0,0 +1,22 @@
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/task — A2A Task 生命周期模型 + 轮询器(WP3,基线 §18.3 / §23)。
18
+ */
19
+ export { A2A_TASK_STATES_REAL, A2A_TASK_TERMINAL_STATES, A2A_TASK_TRANSITIONS, isRealTaskState, isTaskState, isTerminalTaskState, isWaitingTaskState, TaskLifecycleTracker, transitionTaskState, TaskStateError, } from "./state.js";
20
+ export { recordTaskObservation } from "./ledger.js";
21
+ export { A2ATaskPoller } from "./poller.js";
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/task/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;GAEG;AAEH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,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 Task 状态 → Ledger 落账(基线 §22 / §18.3 / 子规范 §28)。
18
+ *
19
+ * 轮询器每次观察到任务状态变化时调用 recordTaskObservation,把远端 taskId /
20
+ * contextId 引用与 task_state 一起落账(§22 要求的 remote contextId/taskId 引用)。
21
+ * event_kind 用 `system`:task 状态不是 KNP phase 转换(state_transition 是
22
+ * NegotiationPhase 维度),也不是消息收发;作为运行时观察证据记录。
23
+ *
24
+ * 不保存 raw chain-of-thought / Vault plaintext(§28 禁词由 LedgerStore.append
25
+ * 强制)。远端 contextId 只作 opaque 引用存储(基线 §9.2 / §6.6),不解析不推断。
26
+ */
27
+ import type { LedgerCapabilitySnapshot, LedgerIdentitySnapshot, LedgerStore } from "../../negotiation/ledger/index.js";
28
+ import type { A2ATaskState } from "../client/index.js";
29
+ export interface TaskObservationInput {
30
+ ledger: LedgerStore;
31
+ negotiation_id: string;
32
+ task_id: string;
33
+ task_state: A2ATaskState;
34
+ /** 远端 A2A contextId(opaque)。 */
35
+ context_id?: string;
36
+ /** 观察时任务携带的最近 messageId(如有)。 */
37
+ message_id?: string;
38
+ identity?: LedgerIdentitySnapshot;
39
+ capability?: LedgerCapabilitySnapshot;
40
+ /** 业务发生时间(RFC 3339)。 */
41
+ occurred_at: string;
42
+ }
43
+ /**
44
+ * 记录一次任务状态观察。调用方保证 task_state 已通过状态机校验
45
+ * (recordTaskObservation 不对状态做业务判定,只落账);task_state 为
46
+ * `unknown` 时 fail-closed 抛错,绝不把不确定状态写进审计链。
47
+ */
48
+ export declare function recordTaskObservation(input: TaskObservationInput): void;
@@ -0,0 +1,65 @@
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
+ const DEFAULT_IDENTITY = {
17
+ sender_identity: "kiwi.a2a.task",
18
+ counterparty_identity: "remote",
19
+ };
20
+ const DEFAULT_CAPABILITY = {
21
+ capability: "a2a.task.observation",
22
+ protocol_version: "1.0",
23
+ };
24
+ /**
25
+ * 单调观察序号(§22 内容寻址)。观测事件是「运行时证据」而非离散逻辑事件:
26
+ * 同一 task_state 可能被多次观察(轮询 / getState),若只按 (task_id,
27
+ * task_state, occurred_at) 寻址,同一毫秒(或冻结时钟)的第二次观测内容
28
+ * 完全相同 → ledger_duplicate_content。序号进入 outcome.result → 参与内容
29
+ * 寻址,使每次观察内容唯一。跨进程重启后从 1 重新开始:occurred_at 通常不同,
30
+ * 不再构成同内容;冻结时钟跨重启是测试态伪影,不作持久化保证。
31
+ */
32
+ let observationSeq = 0;
33
+ function nextObservationSeq() {
34
+ observationSeq += 1;
35
+ return observationSeq;
36
+ }
37
+ /**
38
+ * 记录一次任务状态观察。调用方保证 task_state 已通过状态机校验
39
+ * (recordTaskObservation 不对状态做业务判定,只落账);task_state 为
40
+ * `unknown` 时 fail-closed 抛错,绝不把不确定状态写进审计链。
41
+ */
42
+ export function recordTaskObservation(input) {
43
+ if (input.task_state === "unknown") {
44
+ throw new Error("recordTaskObservation refuses to record unknown task state");
45
+ }
46
+ input.ledger.append({
47
+ event_kind: "system",
48
+ negotiation_id: input.negotiation_id,
49
+ message_id: input.message_id,
50
+ remote_context_id: input.context_id,
51
+ remote_task_id: input.task_id,
52
+ identity: input.identity ?? DEFAULT_IDENTITY,
53
+ capability: input.capability ?? DEFAULT_CAPABILITY,
54
+ outcome: {
55
+ kind: "ok",
56
+ result: {
57
+ task_id: input.task_id,
58
+ task_state: input.task_state,
59
+ observation_seq: nextObservationSeq(),
60
+ },
61
+ },
62
+ occurred_at: input.occurred_at,
63
+ });
64
+ }
65
+ //# sourceMappingURL=ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../src/a2a/task/ledger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAqBH,MAAM,gBAAgB,GAA2B;IAC/C,eAAe,EAAE,eAAe;IAChC,qBAAqB,EAAE,QAAQ;CAChC,CAAC;AAEF,MAAM,kBAAkB,GAA6B;IACnD,UAAU,EAAE,sBAAsB;IAClC,gBAAgB,EAAE,KAAK;CACxB,CAAC;AAEF;;;;;;;GAOG;AACH,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB,SAAS,kBAAkB;IACzB,cAAc,IAAI,CAAC,CAAC;IACpB,OAAO,cAAc,CAAC;AACxB,CAAC;AAiBD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAA2B;IAC/D,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAClB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,iBAAiB,EAAE,KAAK,CAAC,UAAU;QACnC,cAAc,EAAE,KAAK,CAAC,OAAO;QAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,gBAAgB;QAC5C,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,kBAAkB;QAClD,OAAO,EAAE;YACP,IAAI,EAAE,IAAI;YACV,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,eAAe,EAAE,kBAAkB,EAAE;aACtC;SACF;QACD,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,93 @@
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
+ import type { A2ATask, A2ATaskState } from "../client/index.js";
17
+ import type { LedgerCapabilitySnapshot, LedgerIdentitySnapshot, LedgerStore } from "../../negotiation/ledger/index.js";
18
+ /** 轮询客户端最小面:tasks/get 足够。 */
19
+ export interface TaskPollerClient {
20
+ getTask(taskId: string): Promise<A2ATask>;
21
+ }
22
+ export type PollStatus = "completed" | "canceled" | "failed" | "input-required" | "timeout" | "budget_exhausted" | "rejected";
23
+ export interface PollResult {
24
+ status: PollStatus;
25
+ /** 到达终态 / input-required / 最近一次成功取回的任务。 */
26
+ task?: A2ATask;
27
+ /** 最后一次观察到的真实状态(若有)。 */
28
+ state?: A2ATaskState;
29
+ /** 已消耗的 attempt 数(含失败与成功的轮询)。 */
30
+ attempts: number;
31
+ /** rejected / budget_exhausted 时的根因。 */
32
+ lastError?: unknown;
33
+ /** rejected 时的人读原因(未知状态 / 非法转换 / schema 失败等)。 */
34
+ reason?: string;
35
+ }
36
+ export interface TaskPollerLedgerOptions {
37
+ ledger: LedgerStore;
38
+ negotiation_id: string;
39
+ identity?: LedgerIdentitySnapshot;
40
+ capability?: LedgerCapabilitySnapshot;
41
+ }
42
+ export interface TaskPollerOptions {
43
+ client: TaskPollerClient;
44
+ taskId: string;
45
+ /** 轮询带上 contextId(opaque,落账引用用)。 */
46
+ contextId?: string;
47
+ /** 轮询预算(attempt 数,默认 10)。 */
48
+ maxAttempts?: number;
49
+ /** 相对截止 ms;缺省不设墙钟截止(仅受 maxAttempts 约束)。 */
50
+ deadlineMs?: number;
51
+ baseBackoffMs?: number;
52
+ maxBackoffMs?: number;
53
+ backoffMultiplier?: number;
54
+ /** 可注入时钟(ms epoch);缺省 Date.now()。 */
55
+ now?: () => number;
56
+ /** 可注入 sleep;缺省 setTimeout。测试传瞬时 sleep。 */
57
+ sleep?: (ms: number) => Promise<void>;
58
+ /** 任务状态变化时调用(Ledger 落账 + 观察者钩子)。 */
59
+ onStateChanged?: (info: {
60
+ task: A2ATask;
61
+ from: A2ATaskState | null;
62
+ to: A2ATaskState;
63
+ }) => void | Promise<void>;
64
+ /** 提供 ledger + negotiation_id 时,状态变化自动落账。 */
65
+ ledger?: TaskPollerLedgerOptions;
66
+ }
67
+ export declare class A2ATaskPoller {
68
+ private readonly client;
69
+ private readonly taskId;
70
+ private readonly contextId?;
71
+ private readonly maxAttempts;
72
+ private readonly deadlineMs?;
73
+ private readonly baseBackoffMs;
74
+ private readonly maxBackoffMs;
75
+ private readonly backoffMultiplier;
76
+ private readonly now;
77
+ private readonly sleep;
78
+ private readonly onStateChanged?;
79
+ private readonly ledger?;
80
+ constructor(options: TaskPollerOptions);
81
+ /** 第 attempt 次(1-based)尝试后的退避延迟。 */
82
+ private backoffFor;
83
+ private recordObservation;
84
+ /**
85
+ * 轮询到稳定观察点。返回:
86
+ * completed/canceled/failed 远端终态;
87
+ * input-required 远端等待输入(稳定点,轮询不再推进);
88
+ * timeout 墙钟截止先于终态;
89
+ * budget_exhausted 瞬态错误耗尽 attempt 预算;
90
+ * rejected fail-closed(未知状态 / 非法转换 / 不可重试错误)。
91
+ */
92
+ poll(): Promise<PollResult>;
93
+ }
@@ -0,0 +1,184 @@
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 Task 轮询器(基线 §18.3 / §23 恢复第 4 步 "re-fetch remote task state")。
18
+ *
19
+ * 风格对齐仓库 Task Scheduler(src/agent/buyer/scheduler.ts):确定性核心 +
20
+ * 预算/截止约束 + 错误分类收敛,不崩整个 tick。本模块把「预算」具体化为:
21
+ *
22
+ * - maxAttempts 轮询预算(attempt 上限,含首轮);
23
+ * - deadlineMs 从 start 起的绝对截止(墙钟),截止前不再发起新一轮;
24
+ * - baseBackoffMs / maxBackoffMs / backoffMultiplier
25
+ * 指数退避(delay = min(base * mult^(attempt-1), max))。
26
+ *
27
+ * 行为:
28
+ * - 每个 attempt 调 client.getTask(taskId);解析出的状态经
29
+ * TaskLifecycleTracker 校验转换合法性(completed → working 这类非法回退
30
+ * fail-closed,协议违规不猜测)。
31
+ * - 终态(completed/canceled/failed)与 input-required 都是稳定观察点:
32
+ * input-required 表示远端在等输入,轮询不会推进它,返回后由调用方决定。
33
+ * - 瞬态错误(timeout / network / http_status / jsonrpc_error)退避重试;
34
+ * schema_invalid / invalid_response / unsafe_target 或未知状态是
35
+ * fail-closed 的「不可重试」错误 —— 拒绝,不猜测。
36
+ * - 每次任务状态变化经 onStateChanged(含 Ledger 落账)记录证据。
37
+ */
38
+ import { A2AClientError } from "../client/index.js";
39
+ import { isTerminalTaskState, isWaitingTaskState, TaskLifecycleTracker, TaskStateError, } from "./state.js";
40
+ import { recordTaskObservation } from "./ledger.js";
41
+ const DEFAULTS = {
42
+ maxAttempts: 10,
43
+ baseBackoffMs: 250,
44
+ maxBackoffMs: 5000,
45
+ backoffMultiplier: 2,
46
+ };
47
+ export class A2ATaskPoller {
48
+ client;
49
+ taskId;
50
+ contextId;
51
+ maxAttempts;
52
+ deadlineMs;
53
+ baseBackoffMs;
54
+ maxBackoffMs;
55
+ backoffMultiplier;
56
+ now;
57
+ sleep;
58
+ onStateChanged;
59
+ ledger;
60
+ constructor(options) {
61
+ this.client = options.client;
62
+ this.taskId = options.taskId;
63
+ this.contextId = options.contextId;
64
+ this.maxAttempts = options.maxAttempts ?? DEFAULTS.maxAttempts;
65
+ this.deadlineMs = options.deadlineMs;
66
+ this.baseBackoffMs = options.baseBackoffMs ?? DEFAULTS.baseBackoffMs;
67
+ this.maxBackoffMs = options.maxBackoffMs ?? DEFAULTS.maxBackoffMs;
68
+ this.backoffMultiplier = options.backoffMultiplier ?? DEFAULTS.backoffMultiplier;
69
+ this.now = options.now ?? (() => Date.now());
70
+ this.sleep = options.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
71
+ this.onStateChanged = options.onStateChanged;
72
+ this.ledger = options.ledger;
73
+ }
74
+ /** 第 attempt 次(1-based)尝试后的退避延迟。 */
75
+ backoffFor(attempt) {
76
+ const raw = this.baseBackoffMs * Math.pow(this.backoffMultiplier, Math.max(0, attempt - 1));
77
+ return Math.min(raw, this.maxBackoffMs);
78
+ }
79
+ async recordObservation(task, from, to) {
80
+ if (this.ledger !== undefined) {
81
+ recordTaskObservation({
82
+ ledger: this.ledger.ledger,
83
+ negotiation_id: this.ledger.negotiation_id,
84
+ task_id: this.taskId,
85
+ task_state: to,
86
+ context_id: this.contextId ?? task.contextId,
87
+ message_id: task.status.message?.messageId,
88
+ identity: this.ledger.identity,
89
+ capability: this.ledger.capability,
90
+ occurred_at: new Date(this.now()).toISOString(),
91
+ });
92
+ }
93
+ if (this.onStateChanged !== undefined) {
94
+ await this.onStateChanged({ task, from, to });
95
+ }
96
+ }
97
+ /**
98
+ * 轮询到稳定观察点。返回:
99
+ * completed/canceled/failed 远端终态;
100
+ * input-required 远端等待输入(稳定点,轮询不再推进);
101
+ * timeout 墙钟截止先于终态;
102
+ * budget_exhausted 瞬态错误耗尽 attempt 预算;
103
+ * rejected fail-closed(未知状态 / 非法转换 / 不可重试错误)。
104
+ */
105
+ async poll() {
106
+ const start = this.now();
107
+ const deadline = this.deadlineMs === undefined ? Number.POSITIVE_INFINITY : start + this.deadlineMs;
108
+ const tracker = new TaskLifecycleTracker();
109
+ let lastError;
110
+ let lastTask;
111
+ let attempts = 0;
112
+ for (;;) {
113
+ // 截止与预算在每次尝试前检查:attempts 语义 = 已执行的轮询次数。
114
+ if (this.now() >= deadline) {
115
+ return { status: "timeout", attempts, lastError, state: tracker.current() ?? undefined, task: lastTask };
116
+ }
117
+ if (attempts >= this.maxAttempts) {
118
+ return {
119
+ status: "budget_exhausted",
120
+ attempts,
121
+ lastError,
122
+ state: tracker.current() ?? undefined,
123
+ task: lastTask,
124
+ };
125
+ }
126
+ attempts += 1;
127
+ let task;
128
+ try {
129
+ task = await this.client.getTask(this.taskId);
130
+ }
131
+ catch (err) {
132
+ lastError = err;
133
+ lastTask = undefined;
134
+ if (err instanceof A2AClientError) {
135
+ const kind = err.kind;
136
+ if (kind === "schema_invalid" ||
137
+ kind === "invalid_response" ||
138
+ kind === "unsafe_target") {
139
+ // 响应不可信:不重试,fail-closed。
140
+ return { status: "rejected", attempts, lastError: err, reason: kind };
141
+ }
142
+ // timeout / network / http_status / jsonrpc_error → 瞬态,退避重试。
143
+ }
144
+ else {
145
+ return { status: "rejected", attempts, lastError: err, reason: "unknown_error" };
146
+ }
147
+ if (attempts >= this.maxAttempts) {
148
+ return { status: "budget_exhausted", attempts, lastError: err };
149
+ }
150
+ await this.sleep(this.backoffFor(attempts));
151
+ continue;
152
+ }
153
+ lastTask = task;
154
+ const observed = task.status.state;
155
+ const before = tracker.current();
156
+ let after;
157
+ try {
158
+ after = tracker.observe(observed);
159
+ }
160
+ catch (err) {
161
+ lastError = err;
162
+ return {
163
+ status: "rejected",
164
+ attempts,
165
+ lastError: err,
166
+ reason: err instanceof TaskStateError ? err.code : "invalid_state",
167
+ task,
168
+ };
169
+ }
170
+ if (after !== before) {
171
+ await this.recordObservation(task, before, after);
172
+ }
173
+ if (isTerminalTaskState(after) || isWaitingTaskState(after)) {
174
+ return { status: after, attempts, task, state: after };
175
+ }
176
+ // submitted / working:继续轮询。先检查截止,再退避。
177
+ if (this.now() >= deadline) {
178
+ return { status: "timeout", attempts, lastError, state: after, task };
179
+ }
180
+ await this.sleep(this.backoffFor(attempts));
181
+ }
182
+ }
183
+ }
184
+ //# sourceMappingURL=poller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poller.js","sourceRoot":"","sources":["../../../src/a2a/task/poller.ts"],"names":[],"mappings":"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"}