@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,178 @@
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
+ * JSON-RPC 错误映射(A2A JSONRPC binding + KNP §18 协议错误)。
18
+ *
19
+ * 分层(子规范 §24 A2A Binding):
20
+ * - transport 层:HTTP 状态码表达帧级/传输级失败(400 解析失败 / 401-403 认证 /
21
+ * 413 body 超限 / 404 未知路径 / 405 方法不允许)。
22
+ * - JSON-RPC 层:合法帧内的失败用 JSON-RPC error object 表达;KNP 协议错误
23
+ * 用固定 code=-32050 携带 `data.protocol_code`(词表见
24
+ * negotiation/domain/common.ts PROTOCOL_ERROR_CODES)。
25
+ *
26
+ * fail-closed(基线 §4.6 / §36):任何无法证明合法即拒绝;内部异常细节一律
27
+ * 不落回远端响应(§4.5 Remote Content Is Untrusted / 不变量 11)。
28
+ *
29
+ * 错误码映射表(本模块为单一事实来源):
30
+ *
31
+ * | 条件 | HTTP | JSON-RPC code | data.protocol_code |
32
+ * |--------------------------------------------------|------|---------------|---------------------------|
33
+ * | body 非 JSON / 非 JSON-RPC 对象 | 400 | -32700 | — |
34
+ * | JSON-RPC 帧非法(非 2.0 / 缺 method / id 非串) | 400 | -32600 | — |
35
+ * | 未知 method | 200 | -32601 | — |
36
+ * | method 参数形状非法 | 200 | -32602 | — |
37
+ * | tasks/get 未知 taskId | 200 | -32004 | — |
38
+ * | A2A Message / KNP envelope schema 非法 | 200 | -32050 | schema_invalid |
39
+ * | KNP 版本不支持 | 200 | -32050 | protocol_version_unsupported |
40
+ * | 幂等同 key 异 digest | 200 | -32050 | idempotency_conflict |
41
+ * | handler 返回协议错误 | 200 | -32050 | <handler.protocolCode> |
42
+ * | handler / ledger 内部异常(不泄漏细节) | 200 | -32603 | temporarily_unavailable |
43
+ * | 认证缺失(未携带凭据) | 401 | -32051 | authentication_required |
44
+ * | 认证失败(凭据无效 / 非 loopback 拒绝) | 403 | -32051 | authorization_failed |
45
+ * | body 超过 maxPayloadBytes | 413 | -32052 | payload_too_large |
46
+ */
47
+ import { NegotiationValidationError } from "../../negotiation/domain/common.js";
48
+ /** JSON-RPC 2.0 标准 code + A2A/KNP 应用 code。 */
49
+ export const JSONRPC_CODES = {
50
+ PARSE_ERROR: -32700,
51
+ INVALID_REQUEST: -32600,
52
+ METHOD_NOT_FOUND: -32601,
53
+ INVALID_PARAMS: -32602,
54
+ INTERNAL_ERROR: -32603,
55
+ /** A2A v1.0: TaskNotFound。 */
56
+ TASK_NOT_FOUND: -32004,
57
+ /** KNP 协议错误载体:真实 code 在 data.protocol_code(§18 词表)。 */
58
+ KNP_PROTOCOL_ERROR: -32050,
59
+ /** 认证失败载体:protocol_code ∈ {authentication_required, authorization_failed}。 */
60
+ AUTH_ERROR: -32051,
61
+ /** body 超限载体:protocol_code = payload_too_large。 */
62
+ PAYLOAD_TOO_LARGE: -32052,
63
+ };
64
+ /**
65
+ * 服务器内协议级失败信号。pipeline / http 层内部抛出,由 JSON-RPC 响应层捕获
66
+ * 并翻译为 error object。message 是给日志/调用方看的通用文案,不含内部细节。
67
+ */
68
+ export class ServerProtocolError extends Error {
69
+ body;
70
+ constructor(body) {
71
+ super(body.message);
72
+ this.name = "ServerProtocolError";
73
+ this.body = body;
74
+ }
75
+ }
76
+ /** KNP 协议错误(§18 词表)。 */
77
+ export function protocolError(code, detail) {
78
+ return new ServerProtocolError({
79
+ code: JSONRPC_CODES.KNP_PROTOCOL_ERROR,
80
+ message: detail,
81
+ data: { protocol_code: code, detail },
82
+ });
83
+ }
84
+ /** 入站内容 schema 非法(§4.6 fail-closed 默认码)。 */
85
+ export function schemaInvalid(detail) {
86
+ return protocolError("schema_invalid", detail);
87
+ }
88
+ /** 内部异常 → 通用错误,绝不携带原始异常 message(§4.5 / §36-11)。 */
89
+ export function internalServerError() {
90
+ return new ServerProtocolError({
91
+ code: JSONRPC_CODES.INTERNAL_ERROR,
92
+ message: "internal error",
93
+ data: { protocol_code: "temporarily_unavailable" },
94
+ });
95
+ }
96
+ /**
97
+ * 认证失败(HTTP 层使用,帧 id 未知故返回 null)。
98
+ * protocol_code ∈ {authentication_required, authorization_failed, identity_rejected,
99
+ * replay_detected}。identity_rejected 与 replay_detected 是 §32 词表里认证相关的
100
+ * 额外结果:身份绑定冲突(403,永久拒绝)与重放(401,换新签名可重试)。
101
+ */
102
+ export function authError(protocolCode) {
103
+ let httpStatus;
104
+ let message;
105
+ switch (protocolCode) {
106
+ case "authentication_required":
107
+ httpStatus = 401;
108
+ message = "authentication required";
109
+ break;
110
+ case "replay_detected":
111
+ httpStatus = 401;
112
+ message = "replay detected";
113
+ break;
114
+ case "authorization_failed":
115
+ httpStatus = 403;
116
+ message = "authorization failed";
117
+ break;
118
+ case "identity_rejected":
119
+ httpStatus = 403;
120
+ message = "identity rejected";
121
+ break;
122
+ }
123
+ return {
124
+ httpStatus,
125
+ body: {
126
+ code: JSONRPC_CODES.AUTH_ERROR,
127
+ message,
128
+ data: { protocol_code: protocolCode },
129
+ },
130
+ };
131
+ }
132
+ /**
133
+ * 限流拒绝(WP3 §31):走既有 KNP 协议错误载体(-32050),protocol_code =
134
+ * rate_limited,data 携带 retry_after(秒)对齐 UCP 429/503 的 backoff 语义。
135
+ */
136
+ export function rateLimited(retryAfterSeconds, detail) {
137
+ return new ServerProtocolError({
138
+ code: JSONRPC_CODES.KNP_PROTOCOL_ERROR,
139
+ message: detail,
140
+ data: { protocol_code: "rate_limited", retry_after: retryAfterSeconds, detail },
141
+ });
142
+ }
143
+ /** 取任意异常的 protocol_code(错误表统一读取口;未知返回 undefined)。 */
144
+ export function protocolCodeOf(err) {
145
+ if (err instanceof ServerProtocolError) {
146
+ const data = err.body.data;
147
+ if (data !== undefined && typeof data.protocol_code === "string") {
148
+ return data.protocol_code;
149
+ }
150
+ }
151
+ if (err instanceof NegotiationValidationError)
152
+ return err.code;
153
+ return undefined;
154
+ }
155
+ /** body 超限(HTTP 层使用)。 */
156
+ export function payloadTooLarge(maxBytes) {
157
+ return {
158
+ httpStatus: 413,
159
+ body: {
160
+ code: JSONRPC_CODES.PAYLOAD_TOO_LARGE,
161
+ message: "request body exceeds maximum payload size",
162
+ data: { protocol_code: "payload_too_large", max_bytes: maxBytes },
163
+ },
164
+ };
165
+ }
166
+ /** 把 KNP 校验错误(validateEnvelope 等)翻译为协议错误。 */
167
+ export function fromNegotiationError(err) {
168
+ return protocolError(err.code, err.message);
169
+ }
170
+ /** 任务不存在(A2A -32004)。 */
171
+ export function taskNotFound(taskId) {
172
+ return {
173
+ code: JSONRPC_CODES.TASK_NOT_FOUND,
174
+ message: `task ${taskId} not found`,
175
+ data: { taskId },
176
+ };
177
+ }
178
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/a2a/server/errors.ts"],"names":[],"mappings":"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"}
@@ -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
+ import type { NegotiationHandler } from "./types.js";
17
+ /** 原样回显已校验 envelope 的安全桩。 */
18
+ export declare function echoHandler(): NegotiationHandler;
19
+ /** 全部拒绝的安全桩(缺省 handler)。 */
20
+ export declare function declineHandler(reasonCode?: string): NegotiationHandler;
21
+ /** 未配置 handler 时的 fail-closed 默认。 */
22
+ export declare function defaultHandler(): NegotiationHandler;
@@ -0,0 +1,57 @@
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
+ * NegotiationHandler 安全桩(接口定义见 types.ts)。
18
+ *
19
+ * 本 WP 不接线真正的 Negotiation Engine(后续 WP)。这里提供两个安全默认:
20
+ * - echoHandler 校验通过后原样回显 KNP envelope(ack: true),无任何副作用,
21
+ * 适合往返测试 / 协议调试。
22
+ * - declineHandler 一律拒绝(reason_code 默认 "handler_not_configured")——
23
+ * fail-closed 默认(§4.6):未配置引擎时不产生任何商业承诺。
24
+ *
25
+ * 两个桩都不触发本地工具、不写 Principal Memory(基线 §4.5 / §36-13)。
26
+ */
27
+ import { uuidv7 } from "../../negotiation/domain/identifiers.js";
28
+ /** 原样回显已校验 envelope 的安全桩。 */
29
+ export function echoHandler() {
30
+ return {
31
+ name: "echo",
32
+ async handle(ctx) {
33
+ return {
34
+ kind: "accepted",
35
+ message: {
36
+ role: "agent",
37
+ parts: [{ kind: "data", data: { knp_envelope: ctx.envelope, ack: true } }],
38
+ messageId: `msg_${uuidv7()}`,
39
+ },
40
+ };
41
+ },
42
+ };
43
+ }
44
+ /** 全部拒绝的安全桩(缺省 handler)。 */
45
+ export function declineHandler(reasonCode = "handler_not_configured") {
46
+ return {
47
+ name: "decline",
48
+ async handle(_ctx) {
49
+ return { kind: "declined", reasonCode };
50
+ },
51
+ };
52
+ }
53
+ /** 未配置 handler 时的 fail-closed 默认。 */
54
+ export function defaultHandler() {
55
+ return declineHandler();
56
+ }
57
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/a2a/server/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAOjE,6BAA6B;AAC7B,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,CAAC,MAAM,CAAC,GAA8B;YACzC,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;oBAC1E,SAAS,EAAE,OAAO,MAAM,EAAE,EAAE;iBAC7B;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,cAAc,CAAC,UAAU,GAAG,wBAAwB;IAClE,OAAO;QACL,IAAI,EAAE,SAAS;QACf,KAAK,CAAC,MAAM,CAAC,IAA+B;YAC1C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,cAAc;IAC5B,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,37 @@
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 Message 严格解析 + KNP envelope 提取(子规范 §24.3)。
18
+ *
19
+ * 所有入站内容视为 untrusted(基线 §4.5 / §36-12):对象形状、字段类型、Part
20
+ * kind、Data Part 结构全部 fail-closed。解析失败抛 schema_invalid
21
+ * (ServerProtocolError,errors.ts),绝不静默容错。
22
+ *
23
+ * KNP 约定(§24.3):结构化 Data Part 的 `knp_envelope` 键携带 Negotiation
24
+ * Envelope;文本 Part 可省略。存在多个 Data Part 时取第一个含 `knp_envelope`
25
+ * 的 Part;同值重复允许,冲突(多个不同 envelope)fail-closed。
26
+ */
27
+ import type { A2AMessage } from "../client/index.js";
28
+ /** Data Part 中携带 KNP envelope 的键名(§24.3 约定)。 */
29
+ export declare const KNP_ENVELOPE_DATA_KEY = "knp_envelope";
30
+ /** 严格解析入站 A2A Message(untrusted)。失败抛 schema_invalid。 */
31
+ export declare function parseInboundMessage(value: unknown): A2AMessage;
32
+ /**
33
+ * 从 A2A Message 的 Data Part 提取 KNP envelope(raw,未校验)。
34
+ * 无 Data Part 携带 `knp_envelope` 或值非对象 → schema_invalid(§24.3)。
35
+ * 多个不同 envelope → schema_invalid(冲突 fail-closed)。
36
+ */
37
+ export declare function extractKnpEnvelope(message: A2AMessage): Record<string, unknown>;
@@ -0,0 +1,104 @@
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 { schemaInvalid } from "./errors.js";
17
+ /** Data Part 中携带 KNP envelope 的键名(§24.3 约定)。 */
18
+ export const KNP_ENVELOPE_DATA_KEY = "knp_envelope";
19
+ function requireObject(value, path) {
20
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
21
+ throw schemaInvalid(`${path} must be an object`);
22
+ }
23
+ return value;
24
+ }
25
+ function requireNonEmptyString(value, path) {
26
+ if (typeof value !== "string" || value.length === 0) {
27
+ throw schemaInvalid(`${path} must be a non-empty string`);
28
+ }
29
+ return value;
30
+ }
31
+ function optionalRecord(value, path) {
32
+ return value === undefined ? undefined : requireObject(value, path);
33
+ }
34
+ function parsePart(value, path) {
35
+ const obj = requireObject(value, path);
36
+ const kind = requireNonEmptyString(obj.kind, `${path}/kind`);
37
+ if (kind === "text") {
38
+ if (typeof obj.text !== "string")
39
+ throw schemaInvalid(`${path}/text must be a string`);
40
+ return { kind: "text", text: obj.text };
41
+ }
42
+ if (kind === "data") {
43
+ return { kind: "data", data: requireObject(obj.data, `${path}/data`) };
44
+ }
45
+ throw schemaInvalid(`${path}/kind is unsupported: ${kind}`);
46
+ }
47
+ /** 严格解析入站 A2A Message(untrusted)。失败抛 schema_invalid。 */
48
+ export function parseInboundMessage(value) {
49
+ const obj = requireObject(value, "params/message");
50
+ const role = obj.role;
51
+ if (role !== "agent" && role !== "user") {
52
+ throw schemaInvalid("params/message/role must be agent or user");
53
+ }
54
+ if (!Array.isArray(obj.parts) || obj.parts.length === 0) {
55
+ throw schemaInvalid("params/message/parts must be a non-empty array");
56
+ }
57
+ const message = {
58
+ role,
59
+ parts: obj.parts.map((part, index) => parsePart(part, `params/message/parts/${index}`)),
60
+ messageId: requireNonEmptyString(obj.messageId, "params/message/messageId"),
61
+ };
62
+ if (obj.taskId !== undefined) {
63
+ message.taskId = requireNonEmptyString(obj.taskId, "params/message/taskId");
64
+ }
65
+ if (obj.contextId !== undefined) {
66
+ message.contextId = requireNonEmptyString(obj.contextId, "params/message/contextId");
67
+ }
68
+ const metadata = optionalRecord(obj.metadata, "params/message/metadata");
69
+ if (metadata !== undefined)
70
+ message.metadata = metadata;
71
+ return message;
72
+ }
73
+ /**
74
+ * 从 A2A Message 的 Data Part 提取 KNP envelope(raw,未校验)。
75
+ * 无 Data Part 携带 `knp_envelope` 或值非对象 → schema_invalid(§24.3)。
76
+ * 多个不同 envelope → schema_invalid(冲突 fail-closed)。
77
+ */
78
+ export function extractKnpEnvelope(message) {
79
+ const envelopes = [];
80
+ for (const part of message.parts) {
81
+ if (part.kind !== "data")
82
+ continue;
83
+ const data = part.data;
84
+ if (!(KNP_ENVELOPE_DATA_KEY in data))
85
+ continue;
86
+ const value = data[KNP_ENVELOPE_DATA_KEY];
87
+ const envelope = requireObject(value, `data.${KNP_ENVELOPE_DATA_KEY}`);
88
+ envelopes.push(envelope);
89
+ }
90
+ if (envelopes.length === 0) {
91
+ throw schemaInvalid(`message has no data part carrying "${KNP_ENVELOPE_DATA_KEY}" (KNP envelope, §24.3)`);
92
+ }
93
+ const first = envelopes[0];
94
+ if (first === undefined) {
95
+ throw schemaInvalid("KNP envelope data part is empty");
96
+ }
97
+ for (const other of envelopes.slice(1)) {
98
+ if (JSON.stringify(other) !== JSON.stringify(first)) {
99
+ throw schemaInvalid("multiple conflicting KNP envelopes in message data parts");
100
+ }
101
+ }
102
+ return first;
103
+ }
104
+ //# sourceMappingURL=inbound-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound-message.js","sourceRoot":"","sources":["../../../src/a2a/server/inbound-message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
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/server — A2A JSONRPC binding 入站 server(WP2,node:http,零新增依赖)。
18
+ *
19
+ * 端点面:
20
+ * GET /.well-known/agent-card.json Agent Card(含 KNP negotiation extension 声明);
21
+ * POST <a2aPath> JSON-RPC:message/send、tasks/get。
22
+ *
23
+ * 安全:所有入站内容 untrusted(基线 §4.5 / §36);schema 不过 → schema_invalid;
24
+ * 未知版本 → protocol_version_unsupported;幂等同 key 异 digest → idempotency_conflict;
25
+ * body 大小上限;body 解析失败 fail-closed;未配置 AuthVerifier 时默认只接受
26
+ * loopback 请求(fail-closed)。
27
+ */
28
+ export { A2AServer } from "./server.js";
29
+ export { buildAgentCard } from "./card.js";
30
+ export { buildUcpProfile, WELL_KNOWN_UCP_PATH } from "./ucp.js";
31
+ export type { BuiltUcpProfile, UcpPublishOptions, UcpVendorOptions } from "./ucp.js";
32
+ export { A2AServerThrottle, DEFAULT_THROTTLE_TIERS, DEFAULT_UNVERIFIED_SCALE, DEFAULT_WINDOW_MS, domainFromUcpProfile, } from "./throttle.js";
33
+ export type { TaskSlotResult, ThrottleDecision, ThrottleOptions, ThrottleRequest, ThrottleTierTable, TrustTierLimits, } from "./throttle.js";
34
+ export { parseUcpAgentHeader, serializeRfc8941String, serializeUcpAgentHeader, UCP_AGENT_HEADER, UCP_AGENT_PROFILE_MEMBER, } from "../ucp-agent.js";
35
+ export { defaultAuthVerifier, LoopbackOnlyAuthVerifier, NoneAuthVerifier, StaticBearerAuthVerifier, } from "./auth.js";
36
+ export { HttpMessageSignatureVerifier } from "../../trust/identity/index.js";
37
+ export { declineHandler, defaultHandler, echoHandler } from "./handler.js";
38
+ export { InboundPipeline } from "./pipeline.js";
39
+ export { TaskRegistry, isKnownTaskState, newArtifactId, newTaskId } from "./task-registry.js";
40
+ export { JSONRPC_CODES, ServerProtocolError, authError, fromNegotiationError, internalServerError, payloadTooLarge, protocolCodeOf, protocolError, rateLimited, schemaInvalid, taskNotFound, } from "./errors.js";
41
+ export type { JsonRpcErrorBody } from "./errors.js";
42
+ export { extractKnpEnvelope, KNP_ENVELOPE_DATA_KEY, parseInboundMessage, } from "./inbound-message.js";
43
+ export type { A2AServerOptions, AgentCardConfig, AgentCardConfigProvider, AuthContext, AuthResult, AuthVerifier, InboundNegotiationContext, NegotiationHandler, NegotiationHandlerResult, } from "./types.js";
@@ -0,0 +1,42 @@
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/server — A2A JSONRPC binding 入站 server(WP2,node:http,零新增依赖)。
18
+ *
19
+ * 端点面:
20
+ * GET /.well-known/agent-card.json Agent Card(含 KNP negotiation extension 声明);
21
+ * POST <a2aPath> JSON-RPC:message/send、tasks/get。
22
+ *
23
+ * 安全:所有入站内容 untrusted(基线 §4.5 / §36);schema 不过 → schema_invalid;
24
+ * 未知版本 → protocol_version_unsupported;幂等同 key 异 digest → idempotency_conflict;
25
+ * body 大小上限;body 解析失败 fail-closed;未配置 AuthVerifier 时默认只接受
26
+ * loopback 请求(fail-closed)。
27
+ */
28
+ export { A2AServer } from "./server.js";
29
+ export { buildAgentCard } from "./card.js";
30
+ export { buildUcpProfile, WELL_KNOWN_UCP_PATH } from "./ucp.js";
31
+ export { A2AServerThrottle, DEFAULT_THROTTLE_TIERS, DEFAULT_UNVERIFIED_SCALE, DEFAULT_WINDOW_MS, domainFromUcpProfile, } from "./throttle.js";
32
+ export { parseUcpAgentHeader, serializeRfc8941String, serializeUcpAgentHeader, UCP_AGENT_HEADER, UCP_AGENT_PROFILE_MEMBER, } from "../ucp-agent.js";
33
+ export { defaultAuthVerifier, LoopbackOnlyAuthVerifier, NoneAuthVerifier, StaticBearerAuthVerifier, } from "./auth.js";
34
+ // WP5 完整身份方案(RFC 9421 HTTP Message Signature + Agent Card JWS +
35
+ // TrustPolicy + 身份绑定)。实现位于 src/trust/identity。
36
+ export { HttpMessageSignatureVerifier } from "../../trust/identity/index.js";
37
+ export { declineHandler, defaultHandler, echoHandler } from "./handler.js";
38
+ export { InboundPipeline } from "./pipeline.js";
39
+ export { TaskRegistry, isKnownTaskState, newArtifactId, newTaskId } from "./task-registry.js";
40
+ export { JSONRPC_CODES, ServerProtocolError, authError, fromNegotiationError, internalServerError, payloadTooLarge, protocolCodeOf, protocolError, rateLimited, schemaInvalid, taskNotFound, } from "./errors.js";
41
+ export { extractKnpEnvelope, KNP_ENVELOPE_DATA_KEY, parseInboundMessage, } from "./inbound-message.js";
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEhE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AASvB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,WAAW,CAAC;AACnB,gEAAgE;AAChE,+CAA+C;AAC/C,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,69 @@
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
+ * 生产 merchant A2A handler(`kiwi agent serve` 用)——脚本化 KNP 磋商:
18
+ *
19
+ * rfq/inquiry → offer;offer → counter_offer(还价到 DEAL 价);
20
+ * counter_offer → conditional_offer;clarification → 文字澄清应答;
21
+ * accept_nonbinding → agreement artifact(三副作用 flag 恒 false);
22
+ * withdraw/decline/cancel → 文字确认。
23
+ *
24
+ * 每个出站回复落 merchant 侧 Ledger(append-only,§22)。这是 `kiwi agent serve`
25
+ * 的确定性 merchant 行为;未来可替换为 LLM 驱动的 Negotiation Engine(同一 handler 接缝)。
26
+ */
27
+ import type { CommerceDataSource } from "../../commerce/data-source.js";
28
+ import { LedgerStore } from "../../negotiation/ledger/index.js";
29
+ import type { NegotiationHandler } from "./types.js";
30
+ export declare const MERCHANT_CAPABILITY = "com.harrylabsj.kiwi.shopping.negotiation";
31
+ export declare const MERCHANT_SKU = "SKU-001";
32
+ export declare const MERCHANT_CURRENCY = "CNY";
33
+ export declare const MERCHANT_OFFER_PRICE_MINOR = 85000;
34
+ export declare const MERCHANT_DEAL_PRICE_MINOR = 83500;
35
+ export declare const MERCHANT_QUANTITY = 200;
36
+ export declare const MERCHANT_DELIVERY_BEFORE = "2026-08-20T18:00:00Z";
37
+ export interface MerchantHandlerOptions {
38
+ ledger: LedgerStore;
39
+ now: () => string;
40
+ sender: string;
41
+ counterparty: string;
42
+ /** rfq→offer 的初始报价(amount_minor);缺省 85000。 */
43
+ offerPriceMinor?: number;
44
+ /** 真实商品源(接 shopping-cli /products/{sku} 等开放商品层);缺省用内置演示价。 */
45
+ productSource?: MerchantProductSource;
46
+ /** 条件成交折扣百分比(deal = base × (1 - pct/100));缺省 5。 */
47
+ dealDiscountPercent?: number;
48
+ }
49
+ /**
50
+ * 真实商品源:给定 SKU 返回价目(shopping-cli 开放层/ERP/商品表均可接入)。
51
+ * `price` 单位为**元**(major units,与 resolveProduct 的 `*100 → amount_minor`
52
+ * 约定一致,也符合 shopping-cli wire 值;测试桩 `{price: 99}` → 9900 minor 同此)。
53
+ */
54
+ export interface MerchantProductSource {
55
+ getProduct(sku: string): Promise<{
56
+ price: number;
57
+ currency: string;
58
+ title?: string;
59
+ stock?: number;
60
+ }>;
61
+ }
62
+ /**
63
+ * 把 CommerceDataSource(v0.7.0 数据侧边界)适配成 MerchantProductSource。
64
+ * price_minor(分)→ 元(major)转换在此完成,与接口"元"单位约定一致;
65
+ * 未知 SKU → 抛错(resolveProduct 回退演示价,缺省行为不变)。
66
+ */
67
+ export declare function dataSourceProductSource(dataSource: CommerceDataSource): MerchantProductSource;
68
+ /** 构造生产 merchant KNP handler。 */
69
+ export declare function createMerchantHandler(options: MerchantHandlerOptions): NegotiationHandler;