@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,23 @@
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
+ * Capability intersection 错误。无共同可协商 binding 时抛
18
+ * `capability_incompatible`(基线 §4.6 / §32)。
19
+ */
20
+ export declare class CapabilityError extends Error {
21
+ readonly code: "capability_incompatible";
22
+ constructor(message: string);
23
+ }
@@ -0,0 +1,28 @@
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
+ * Capability intersection 错误。无共同可协商 binding 时抛
18
+ * `capability_incompatible`(基线 §4.6 / §32)。
19
+ */
20
+ export class CapabilityError extends Error {
21
+ code;
22
+ constructor(message) {
23
+ super(message);
24
+ this.name = "CapabilityError";
25
+ this.code = "capability_incompatible";
26
+ }
27
+ }
28
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/discovery/capability/error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AAEH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAA4B;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,21 @@
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
+ * discovery/capability — 双方 capability intersection(基线 §3.1 / §33)。
18
+ */
19
+ export { DEFAULT_BINDING_PREFERENCE, intersectCapabilities, requireCompatibleCapabilities, } from "./intersect.js";
20
+ export type { CapabilityIntersection, IncompatibleBinding, IntersectOptions } from "./intersect.js";
21
+ export { CapabilityError } from "./error.js";
@@ -0,0 +1,21 @@
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
+ * discovery/capability — 双方 capability intersection(基线 §3.1 / §33)。
18
+ */
19
+ export { DEFAULT_BINDING_PREFERENCE, intersectCapabilities, requireCompatibleCapabilities, } from "./intersect.js";
20
+ export { CapabilityError } from "./error.js";
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/discovery/capability/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;GAEG;AAEH,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Copyright 2026 harrylabsj
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import type { AgentCard, AgentInterface } from "../agent-card/types.js";
17
+ /** core binding 的确定性选择顺序:JSONRPC 优先,其次 GRPC,最后 HTTP+JSON。 */
18
+ export declare const DEFAULT_BINDING_PREFERENCE: readonly string[];
19
+ export interface IncompatibleBinding {
20
+ binding: string;
21
+ localVersion?: string;
22
+ remoteVersion?: string;
23
+ reason: string;
24
+ }
25
+ export interface CapabilityIntersection {
26
+ /** 是否存在共同 core binding 且协议版本兼容。 */
27
+ compatible: boolean;
28
+ /**
29
+ * 共同且版本兼容的 core binding 的远端接口;调用方可按顺序逐个尝试。
30
+ * 数组顺序即 preference 顺序。
31
+ */
32
+ candidates: AgentInterface[];
33
+ /** 确定性选出的单一 binding 的远端接口;无兼容候选时为 undefined。 */
34
+ selected?: AgentInterface;
35
+ /** 双方都有但协议版本不兼容的 binding(fail-closed,§4.6)。 */
36
+ incompatible: IncompatibleBinding[];
37
+ /** 双方共同支持但不是 core binding 的 binding——不选择(§26)。 */
38
+ unknownShared: string[];
39
+ /** 只在一方出现、无法协商的 binding(仅诊断)。 */
40
+ oneSided: string[];
41
+ }
42
+ export interface IntersectOptions {
43
+ /** core binding 选择顺序。默认 JSONRPC > GRPC > HTTP+JSON。 */
44
+ preference?: readonly string[];
45
+ /** 版本兼容判定;默认精确字符串匹配,缺省版本视为不兼容。 */
46
+ versionMatch?: (localVersion: string | undefined, remoteVersion: string | undefined) => boolean;
47
+ }
48
+ /**
49
+ * 双方 supportedInterfaces 的交集。
50
+ *
51
+ * 版本兼容定义(默认):双方都声明了该 binding 的 protocolVersion 且字符串相等。
52
+ * 任一方的版本缺省、或双方版本不同,该 binding 即视为不兼容(fail-closed)。
53
+ */
54
+ export declare function intersectCapabilities(local: AgentCard | AgentInterface[], remote: AgentCard | AgentInterface[], options?: IntersectOptions): CapabilityIntersection;
55
+ /** 无共同可协商 binding 时抛 CapabilityError(fail-closed 断言)。 */
56
+ export declare function requireCompatibleCapabilities(local: AgentCard | AgentInterface[], remote: AgentCard | AgentInterface[], options?: IntersectOptions): CapabilityIntersection;
@@ -0,0 +1,137 @@
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
+ * Capability intersection(基线 §3.1 / §33 AgentDiscovery:capability intersection)。
18
+ *
19
+ * 双方各持一组 `supportedInterfaces`;Kiwi MUST 从中选择双方共同支持的 binding,
20
+ * 不得把某一种 binding 硬编码为协议本身(§3.1)。本模块:
21
+ *
22
+ * - 计算共同 binding 及其协议版本兼容性(未知版本 fail-closed,§4.6);
23
+ * - core binding(JSONRPC/GRPC/HTTP+JSON)中确定性地选一个作为 `selected`;
24
+ * - 未知(非 core)binding 出现在 `unknownShared` 但**不选择**(§26 不拒绝但不选择);
25
+ * - 任一 binding 仅一方支持时记入 `oneSided`(诊断用)。
26
+ *
27
+ * 版本兼容默认精确匹配;可通过 `versionMatch` 注入未来 semver 匹配策略。
28
+ */
29
+ import { isCoreProtocolBinding } from "../agent-card/types.js";
30
+ import { CapabilityError } from "./error.js";
31
+ /** core binding 的确定性选择顺序:JSONRPC 优先,其次 GRPC,最后 HTTP+JSON。 */
32
+ export const DEFAULT_BINDING_PREFERENCE = ["JSONRPC", "GRPC", "HTTP+JSON"];
33
+ function toInterfaces(card) {
34
+ if (Array.isArray(card))
35
+ return card;
36
+ return card.supportedInterfaces;
37
+ }
38
+ /** 同 binding 名合并多接口声明(同一 binding 出现多次时取全部,供版本匹配)。 */
39
+ function indexByBinding(interfaces) {
40
+ const map = new Map();
41
+ for (const iface of interfaces) {
42
+ const entry = { version: iface.protocolVersion, iface };
43
+ const list = map.get(iface.protocolBinding);
44
+ if (list === undefined) {
45
+ map.set(iface.protocolBinding, [entry]);
46
+ }
47
+ else {
48
+ list.push(entry);
49
+ }
50
+ }
51
+ return map;
52
+ }
53
+ /**
54
+ * 双方 supportedInterfaces 的交集。
55
+ *
56
+ * 版本兼容定义(默认):双方都声明了该 binding 的 protocolVersion 且字符串相等。
57
+ * 任一方的版本缺省、或双方版本不同,该 binding 即视为不兼容(fail-closed)。
58
+ */
59
+ export function intersectCapabilities(local, remote, options = {}) {
60
+ const preference = options.preference ?? DEFAULT_BINDING_PREFERENCE;
61
+ const versionMatch = options.versionMatch ?? ((l, r) => l !== undefined && l === r);
62
+ const localInterfaces = toInterfaces(local);
63
+ const remoteInterfaces = toInterfaces(remote);
64
+ const localByBinding = indexByBinding(localInterfaces);
65
+ const remoteByBinding = indexByBinding(remoteInterfaces);
66
+ const allBindings = new Set([...localByBinding.keys(), ...remoteByBinding.keys()]);
67
+ const candidates = [];
68
+ const incompatible = [];
69
+ const unknownShared = [];
70
+ const oneSided = [];
71
+ for (const binding of allBindings) {
72
+ const localEntries = localByBinding.get(binding);
73
+ const remoteEntries = remoteByBinding.get(binding);
74
+ const localPresent = localEntries !== undefined;
75
+ const remotePresent = remoteEntries !== undefined;
76
+ if (!localPresent || !remotePresent) {
77
+ if (isCoreProtocolBinding(binding)) {
78
+ oneSided.push(binding);
79
+ }
80
+ continue;
81
+ }
82
+ // 双方都有。对同一 binding 的多份声明,取任一可兼容组合。
83
+ const matched = remoteEntries?.find((remoteEntry) => (localEntries ?? []).some((localEntry) => versionMatch(localEntry.version, remoteEntry.version)));
84
+ if (matched === undefined) {
85
+ const localVersion = localEntries?.[0]?.version;
86
+ const remoteVersion = remoteEntries?.[0]?.version;
87
+ incompatible.push({
88
+ binding,
89
+ localVersion,
90
+ remoteVersion,
91
+ reason: localVersion === undefined || remoteVersion === undefined
92
+ ? "protocolVersion missing on one side (fail-closed)"
93
+ : `protocolVersion mismatch: local ${localVersion} vs remote ${remoteVersion}`,
94
+ });
95
+ continue;
96
+ }
97
+ if (!isCoreProtocolBinding(binding)) {
98
+ unknownShared.push(binding);
99
+ continue;
100
+ }
101
+ candidates.push(matched.iface);
102
+ }
103
+ // 按 preference 顺序稳定排序:preference 中靠前的 binding 优先。
104
+ const preferenceRank = new Map(preference.map((b, i) => [b, i]));
105
+ candidates.sort((a, b) => {
106
+ const ra = preferenceRank.get(a.protocolBinding) ?? Number.POSITIVE_INFINITY;
107
+ const rb = preferenceRank.get(b.protocolBinding) ?? Number.POSITIVE_INFINITY;
108
+ return ra - rb;
109
+ });
110
+ const selected = candidates.length > 0 ? candidates[0] : undefined;
111
+ return {
112
+ compatible: candidates.length > 0,
113
+ candidates,
114
+ selected,
115
+ incompatible,
116
+ unknownShared,
117
+ oneSided,
118
+ };
119
+ }
120
+ /** 无共同可协商 binding 时抛 CapabilityError(fail-closed 断言)。 */
121
+ export function requireCompatibleCapabilities(local, remote, options = {}) {
122
+ const intersection = intersectCapabilities(local, remote, options);
123
+ if (!intersection.compatible) {
124
+ const detail = [
125
+ ...intersection.incompatible,
126
+ ...intersection.oneSided.map((b) => ({
127
+ binding: b,
128
+ reason: "binding supported by only one side",
129
+ })),
130
+ ]
131
+ .map((i) => `${i.binding} (${i.reason})`)
132
+ .join("; ");
133
+ throw new CapabilityError(`no common compatible A2A binding: ${detail || "no shared protocolBinding"}`);
134
+ }
135
+ return intersection;
136
+ }
137
+ //# sourceMappingURL=intersect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intersect.js","sourceRoot":"","sources":["../../../src/discovery/capability/intersect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
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
+ * ShoppingCliCatalogSource 错误(fail-closed,基线 §4.6 / 设计 §17.1)。
18
+ *
19
+ * 任何校验 / 网络失败都必须抛 CatalogSourceError,绝不静默容错、不自动降级:
20
+ * - invalid_input 调用方给了非法查询(类型 / 取值错误);
21
+ * - request_failed HTTP 非 2xx、网络异常或超时;
22
+ * - response_invalid 响应体不是契约要求的信封结构(缺 results / catalog_agent);
23
+ * - contract_violation 候选元素未通过 CandidateAgent DTO schema 校验,或 contract
24
+ * 注解非 candidate-agent / 非 1.x(视为协议级违规)。
25
+ */
26
+ export declare const CATALOG_SOURCE_ERROR_CODES: readonly ["invalid_input", "request_failed", "response_invalid", "contract_violation"];
27
+ export type CatalogSourceErrorCode = (typeof CATALOG_SOURCE_ERROR_CODES)[number];
28
+ /** Catalog 读取失败。带错误码;fail-closed,调用方不得吞掉。 */
29
+ export declare class CatalogSourceError extends Error {
30
+ readonly code: CatalogSourceErrorCode;
31
+ constructor(code: CatalogSourceErrorCode, message: string);
32
+ }
@@ -0,0 +1,41 @@
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
+ * ShoppingCliCatalogSource 错误(fail-closed,基线 §4.6 / 设计 §17.1)。
18
+ *
19
+ * 任何校验 / 网络失败都必须抛 CatalogSourceError,绝不静默容错、不自动降级:
20
+ * - invalid_input 调用方给了非法查询(类型 / 取值错误);
21
+ * - request_failed HTTP 非 2xx、网络异常或超时;
22
+ * - response_invalid 响应体不是契约要求的信封结构(缺 results / catalog_agent);
23
+ * - contract_violation 候选元素未通过 CandidateAgent DTO schema 校验,或 contract
24
+ * 注解非 candidate-agent / 非 1.x(视为协议级违规)。
25
+ */
26
+ export const CATALOG_SOURCE_ERROR_CODES = [
27
+ "invalid_input",
28
+ "request_failed",
29
+ "response_invalid",
30
+ "contract_violation",
31
+ ];
32
+ /** Catalog 读取失败。带错误码;fail-closed,调用方不得吞掉。 */
33
+ export class CatalogSourceError extends Error {
34
+ code;
35
+ constructor(code, message) {
36
+ super(message);
37
+ this.name = "CatalogSourceError";
38
+ this.code = code;
39
+ }
40
+ }
41
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/discovery/catalog-source/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;CACZ,CAAC;AAIX,6CAA6C;AAC7C,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAyB;IAEtC,YAAY,IAA4B,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,30 @@
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
+ * catalog-source —— ShoppingCliCatalogSource(设计 §21 仓库归属:Kiwi 侧消费端)。
18
+ *
19
+ * 从 shopping-cli Commerce Agent Catalog 读取 CandidateAgent;候选不是已证明的
20
+ * 在线身份(契约 §1),升级为 CounterpartyProfile 由 AgentDiscovery.resolveViaCatalog
21
+ * 完成。本桶只含 source 自身,集成在 ../resolve.ts。
22
+ */
23
+ export { ShoppingCliCatalogSource } from "./source.js";
24
+ export type { CatalogSourceDeps } from "./source.js";
25
+ export { KiwiCatalogSource } from "./kiwi-source.js";
26
+ export { CatalogSourceError } from "./errors.js";
27
+ export type { CatalogSourceErrorCode } from "./errors.js";
28
+ export { validateCatalogAgentRecord, validateListingRecord, validateListingSearchResult } from "./kiwi-schema.js";
29
+ export { normalizeCatalogAgent, type AdministrativeState, type CatalogAgentRecord, type CatalogSkill, type FreshnessState, type KiwiCatalogSearchQuery, type KiwiListingSearchQuery, type ListingAgentProjection, type ListingFreshnessState, type ListingMatch, type ListingMerchantSummary, type ListingRecord, type ListingSearchResult, type ListingType, type PublicationState, type VerificationLevel, } from "./kiwi-record.js";
30
+ export { normalizeHostingMode, type CandidateAgent, type CandidateContract, type CandidateDiscovery, type CandidateHosting, type CandidateMerchant, type CandidateSkill, type CandidateVerification, type CatalogSearchQuery, type CatalogSource, type HostingMode, type RawHostingMode, type VerificationStatus, } from "./types.js";
@@ -0,0 +1,29 @@
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
+ * catalog-source —— ShoppingCliCatalogSource(设计 §21 仓库归属:Kiwi 侧消费端)。
18
+ *
19
+ * 从 shopping-cli Commerce Agent Catalog 读取 CandidateAgent;候选不是已证明的
20
+ * 在线身份(契约 §1),升级为 CounterpartyProfile 由 AgentDiscovery.resolveViaCatalog
21
+ * 完成。本桶只含 source 自身,集成在 ../resolve.ts。
22
+ */
23
+ export { ShoppingCliCatalogSource } from "./source.js";
24
+ export { KiwiCatalogSource } from "./kiwi-source.js";
25
+ export { CatalogSourceError } from "./errors.js";
26
+ export { validateCatalogAgentRecord, validateListingRecord, validateListingSearchResult } from "./kiwi-schema.js";
27
+ export { normalizeCatalogAgent, } from "./kiwi-record.js";
28
+ export { normalizeHostingMode, } from "./types.js";
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/discovery/catalog-source/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAClH,OAAO,EACL,qBAAqB,GAgBtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,GAarB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,183 @@
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
+ * kiwi-catalog CatalogAgentRecord —— /v1/agents wire 形状的 TS 投影。
18
+ *
19
+ * 契约来源:contracts/kiwi-catalog/1.0/agent-record.schema.json(产品文档
20
+ * kiwi-catalog v0.3 §6/§7)。运行时校验以 ajv 编译后的 schema 为准(kiwi-schema.ts)。
21
+ *
22
+ * 三正交状态域(v0.3 §7,MUST NOT 坍缩为一个状态机):
23
+ * - VerificationLevel:证据链级别(可降级,历史证据可审计);
24
+ * - FreshnessState:profile 新鲜度 / 可达性(FRESH/STALE/UNREACHABLE);
25
+ * - AdministrativeState:治理处置(ACTIVE/SUSPENDED/REJECTED 终态)。
26
+ *
27
+ * `normalizeCatalogAgent` 把 record 折叠成 CandidateAgent 共享候选形状(DTO 1.0),
28
+ * 供 AgentDiscovery.resolveViaCatalog 复用同一升级路径;折叠优先级:
29
+ * rejected > suspended > unreachable > stale > verification_level
30
+ * (行政处置最重,其次可达性,再其次新鲜度——与 legacy BLOCKED 状态集语义一致)。
31
+ */
32
+ import type { DestinationType } from "../../handoff/destination.js";
33
+ import type { CandidateAgent, CatalogSearchQuery, HostingMode } from "./types.js";
34
+ /** 验证级别(v0.3 §7.1)。 */
35
+ export type VerificationLevel = "discovered" | "profile_valid" | "domain_verified" | "agent_verified" | "commerce_verified";
36
+ /** 新鲜度 / 可达性(v0.3 §7.2)。 */
37
+ export type FreshnessState = "fresh" | "stale" | "unreachable";
38
+ /** 行政处置(v0.3 §7.3)。 */
39
+ export type AdministrativeState = "active" | "suspended" | "rejected";
40
+ /** kiwi-catalog agent 公开记录(public-only,完成定义 #8)。 */
41
+ export interface CatalogAgentRecord {
42
+ readonly catalog_agent_id: string;
43
+ readonly principal_type: "buyer" | "merchant";
44
+ readonly merchant_id?: string;
45
+ readonly display_name: string;
46
+ readonly canonical_domain: string;
47
+ readonly agent_card_url?: string;
48
+ readonly ucp_profile_url?: string;
49
+ readonly protocols?: Readonly<Record<string, readonly string[]>>;
50
+ readonly capabilities?: readonly string[];
51
+ readonly skills?: readonly CatalogSkill[];
52
+ readonly hosting_mode: HostingMode;
53
+ readonly handoff_destination_types?: readonly DestinationType[];
54
+ readonly verification_level: VerificationLevel;
55
+ readonly freshness_state: FreshnessState;
56
+ readonly administrative_state: AdministrativeState;
57
+ readonly last_verified_at?: string;
58
+ readonly fresh_until?: string;
59
+ readonly created_at: string;
60
+ readonly updated_at: string;
61
+ }
62
+ /** 公开 skill(v0.3 §6,与 DTO 1.0 CandidateSkill 同形)。 */
63
+ export interface CatalogSkill {
64
+ readonly skill_id: string;
65
+ readonly name: string;
66
+ readonly description?: string;
67
+ readonly tags?: readonly string[];
68
+ }
69
+ /**
70
+ * kiwi-catalog 富搜索查询(新 API /v1/agents/search;词表单一来源)。
71
+ * 继承共享 CatalogSearchQuery(hosting_mode 接受 canonical + legacy 别名——
72
+ * record schema 的 hosting_mode 枚举两者都收),新增三态域过滤与
73
+ * `handoff_destination_types`(精确 KTH destination_type 词表,禁止平行词表)。
74
+ */
75
+ export interface KiwiCatalogSearchQuery extends Omit<CatalogSearchQuery, "category" | "region" | "skill"> {
76
+ verification_level?: VerificationLevel;
77
+ freshness_state?: FreshnessState;
78
+ administrative_state?: AdministrativeState;
79
+ /** 精确匹配 KTH destination_type(禁止 supports_* 平行词表)。 */
80
+ handoff_destination_types?: readonly DestinationType[];
81
+ /** 分页游标(searchRecords 内部翻页用;调用方无需直接设置)。 */
82
+ cursor?: string;
83
+ }
84
+ /** listing 类型(v0.4 §4/§5;词表单一来源见 listing-record.schema.json)。 */
85
+ export type ListingType = "product" | "capability";
86
+ /** Listing 发布状态(v0.4 §7.1;大写,与 Agent 域小写 administrative_state 拼写区分)。 */
87
+ export type PublicationState = "ACTIVE" | "WITHDRAWN" | "SUSPENDED";
88
+ /** Listing 新鲜度(v0.4 §7.2;FRESH/STALE 两态,独立于 Agent freshness 三态)。 */
89
+ export type ListingFreshnessState = "FRESH" | "STALE";
90
+ /**
91
+ * kiwi-catalog ListingRecord —— /v1/listings wire 形状的 TS 投影(v0.4 §4/§5)。
92
+ *
93
+ * public-only discovery projection:不得携带 cost / floor price / 私有库存 /
94
+ * 凭据(v0.4 §4.2)。`listing_freshness_state` 与 `owner_agent_id` 的 Agent
95
+ * `freshness_state` 是两套独立状态(v0.4 §7.2);CapabilityListing 不携带
96
+ * `handoff_destination_types`。
97
+ */
98
+ export interface ListingRecord {
99
+ readonly listing_id: string;
100
+ readonly listing_type: ListingType;
101
+ readonly owner_agent_id: string;
102
+ readonly merchant_id: string;
103
+ readonly source_product_ref?: string;
104
+ readonly source_revision?: string;
105
+ readonly title: string;
106
+ readonly summary?: string;
107
+ readonly category: string;
108
+ readonly brand?: string;
109
+ readonly attributes?: Readonly<Record<string, string | number | boolean>>;
110
+ readonly regions?: readonly string[];
111
+ readonly tags?: readonly string[];
112
+ readonly commercial_hints?: Readonly<{
113
+ moq?: number;
114
+ price_range_hint?: string;
115
+ availability_hint?: string;
116
+ lead_time_hint?: string;
117
+ supports_bulk_quote?: boolean;
118
+ supports_customization?: boolean;
119
+ fulfillment_regions?: readonly string[];
120
+ }>;
121
+ readonly handoff_destination_types?: readonly DestinationType[];
122
+ readonly listing_digest: string;
123
+ readonly publication_state: PublicationState;
124
+ readonly listing_freshness_state: ListingFreshnessState;
125
+ readonly published_at: string;
126
+ readonly updated_at: string;
127
+ readonly fresh_until: string;
128
+ }
129
+ /** 搜索结果中的 merchant 投影(v0.4 §9)。 */
130
+ export interface ListingMerchantSummary {
131
+ readonly merchant_id: string;
132
+ readonly display_name: string;
133
+ }
134
+ /** 搜索结果中的 owner Agent 投影(join 自 catalog_agents;不复制 endpoint)。 */
135
+ export interface ListingAgentProjection {
136
+ readonly catalog_agent_id: string;
137
+ readonly verification_level: VerificationLevel;
138
+ readonly freshness_state: FreshnessState;
139
+ readonly administrative_state: AdministrativeState;
140
+ }
141
+ /** match/reason 字段(v0.4 §9,optional)。 */
142
+ export interface ListingMatch {
143
+ readonly matched_category?: boolean;
144
+ readonly matched_region?: boolean;
145
+ readonly matched_brand?: boolean;
146
+ readonly score?: number;
147
+ }
148
+ /** /v1/listings/search 单个结果(v0.4 §9;authority/requires_direct_confirmation 恒值)。 */
149
+ export interface ListingSearchResult {
150
+ readonly listing: ListingRecord;
151
+ readonly merchant: ListingMerchantSummary;
152
+ readonly agent: ListingAgentProjection;
153
+ readonly listing_freshness_state: ListingFreshnessState;
154
+ readonly authority: "discovery_projection";
155
+ readonly requires_direct_confirmation: true;
156
+ readonly match?: ListingMatch;
157
+ }
158
+ /**
159
+ * kiwi-catalog listing 搜索查询(v0.4 §8 query 面;词表单一来源)。
160
+ * 与 KiwiCatalogSearchQuery 分离:listing 面有自己的键集与 JSON1 结构化过滤。
161
+ */
162
+ export interface KiwiListingSearchQuery {
163
+ q?: string;
164
+ listing_type?: ListingType;
165
+ category?: string;
166
+ brand?: string;
167
+ region?: string;
168
+ tag?: string;
169
+ min_moq?: number;
170
+ max_moq?: number;
171
+ supports_bulk_quote?: boolean;
172
+ supports_customization?: boolean;
173
+ freshness_state?: ListingFreshnessState;
174
+ handoff_destination_type?: DestinationType;
175
+ limit?: number;
176
+ cursor?: string;
177
+ }
178
+ /**
179
+ * 三态域 record → CandidateAgent DTO 1.0 共享候选形状。
180
+ * 注意:handoff_destination_types **不进入** CandidateAgent(DTO 1.0
181
+ * additionalProperties: false);需要 handoff 词表的消费方走 searchRecords。
182
+ */
183
+ export declare function normalizeCatalogAgent(record: CatalogAgentRecord): CandidateAgent;