@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,386 @@
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
+ * Agent profile loading and validation.
18
+ *
19
+ * Profiles are YAML. Secrets are NEVER stored in the profile: `token_env`
20
+ * and `api_key_env` name environment variables that must be set. Loading a
21
+ * profile never resolves or logs secret values; resolution happens lazily
22
+ * at the point of use via `resolveSecret()`.
23
+ *
24
+ * Validation is fail-closed: unknown fields are rejected, numbers must be
25
+ * finite, runtime limits have hard upper bounds, and cleartext HTTP base
26
+ * URLs are only accepted for loopback hosts.
27
+ */
28
+ import { readFileSync, statSync } from "node:fs";
29
+ import { parse as parseYaml } from "yaml";
30
+ import { PROTOCOL_VERSION } from "../negotiation/types.js";
31
+ export const RUNTIME_VERSION = "0.6.0";
32
+ export const THINKING_LEVELS = ["off", "minimal", "low", "medium", "high"];
33
+ /** API ids supported by the pinned pi-ai 0.83.0 (its KnownApi union). */
34
+ export const SUPPORTED_MODEL_APIS = [
35
+ "openai-completions",
36
+ "openai-responses",
37
+ "azure-openai-responses",
38
+ "openai-codex-responses",
39
+ "anthropic-messages",
40
+ "bedrock-converse-stream",
41
+ "google-generative-ai",
42
+ "google-vertex",
43
+ "mistral-conversations",
44
+ "pi-messages",
45
+ ];
46
+ /**
47
+ * Commerce credential scopes (design §15.4). Credentials are held separately
48
+ * by scope; the model only ever sees tools, never tokens. When a scope has no
49
+ * credential configured, the corresponding write tools fail closed.
50
+ */
51
+ export const COMMERCE_CREDENTIAL_SCOPES = ["negotiation", "catalog", "inventory"];
52
+ export class ProfileError extends Error {
53
+ constructor(message) {
54
+ super(message);
55
+ this.name = "ProfileError";
56
+ }
57
+ }
58
+ const REQUIRED_ENV_REF = /^[A-Z][A-Z0-9_]*$/;
59
+ /** Hard upper bounds for runtime limits. */
60
+ export const RUNTIME_LIMITS = {
61
+ max_model_steps: 20,
62
+ max_retries: 5,
63
+ turn_timeout_seconds: 3600,
64
+ poll_interval_seconds: 3600,
65
+ };
66
+ const TOP_LEVEL_KEYS = [
67
+ "runtime_version",
68
+ "protocol_version",
69
+ "agent_id",
70
+ "role",
71
+ "owner_id",
72
+ "commerce",
73
+ "model",
74
+ "runtime",
75
+ "merchant_policy",
76
+ "buyer_policy",
77
+ ];
78
+ const COMMERCE_KEYS = ["base_url", "token_env", "backend", "credentials"];
79
+ const MODEL_KEYS = [
80
+ "provider",
81
+ "model",
82
+ "api_key_env",
83
+ "api",
84
+ "base_url",
85
+ "thinking_level",
86
+ ];
87
+ const RUNTIME_KEYS = [
88
+ "mode",
89
+ "poll_interval_seconds",
90
+ "turn_timeout_seconds",
91
+ "max_model_steps",
92
+ "max_retries",
93
+ ];
94
+ const MERCHANT_POLICY_KEYS = [
95
+ "min_unit_price_private",
96
+ "max_auto_discount_percent",
97
+ "inventory_source",
98
+ "quote_ttl_seconds",
99
+ "auto_negotiate",
100
+ "human_review_on",
101
+ ];
102
+ const BUYER_POLICY_KEYS = [
103
+ "target_skus",
104
+ "quantity",
105
+ "max_total_price_private",
106
+ "acceptable_eta_latest",
107
+ "required_after_sales_terms",
108
+ "auto_negotiate",
109
+ "human_review_on",
110
+ ];
111
+ /** RFC 3339 date-time with an explicit timezone (offset or Z); naive times fail closed. */
112
+ const RFC3339_TZ = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/;
113
+ /** Validate an RFC 3339 timestamp that must carry a timezone. */
114
+ export function isRfc3339WithTimezone(value) {
115
+ return typeof value === "string" && RFC3339_TZ.test(value) && !Number.isNaN(Date.parse(value));
116
+ }
117
+ /** Hosts allowed to use cleartext HTTP. Everything else requires HTTPS. */
118
+ const LOOPBACK_HOSTNAMES = new Set(["localhost", "127.0.0.1", "[::1]", "::1"]);
119
+ function isObject(v) {
120
+ return typeof v === "object" && v !== null && !Array.isArray(v);
121
+ }
122
+ function req(cond, message) {
123
+ if (!cond)
124
+ throw new ProfileError(message);
125
+ }
126
+ function rejectUnknownKeys(obj, allowed, section, source) {
127
+ for (const key of Object.keys(obj)) {
128
+ if (!allowed.includes(key)) {
129
+ throw new ProfileError(`${source}: ${section} has unknown field "${key}"`);
130
+ }
131
+ }
132
+ }
133
+ function reqFinite(value, field, source) {
134
+ req(typeof value === "number" && Number.isFinite(value), `${source}: ${field} must be a finite number (NaN/Infinity are not allowed)`);
135
+ }
136
+ /**
137
+ * Validate a base URL: http(s) only, no embedded credentials, and cleartext
138
+ * HTTP only for loopback hosts (localhost / 127.0.0.1 / ::1).
139
+ */
140
+ export function assertSecureBaseUrl(value, field, source) {
141
+ req(typeof value === "string" && value.length > 0, `${source}: ${field} is required`);
142
+ let url;
143
+ try {
144
+ url = new URL(value);
145
+ }
146
+ catch {
147
+ throw new ProfileError(`${source}: ${field} must be a valid URL`);
148
+ }
149
+ req(url.protocol === "https:" || url.protocol === "http:", `${source}: ${field} must use http or https (got ${url.protocol})`);
150
+ req(url.username === "" && url.password === "", `${source}: ${field} must not embed credentials (userinfo)`);
151
+ if (url.protocol === "http:") {
152
+ req(LOOPBACK_HOSTNAMES.has(url.hostname.toLowerCase()), `${source}: ${field} uses cleartext HTTP; only loopback hosts (localhost, 127.0.0.1, ::1) may use HTTP — use HTTPS for remote hosts`);
153
+ }
154
+ return value;
155
+ }
156
+ /** Load, parse and validate a profile file. Never reads secret env values. */
157
+ export function loadProfile(path) {
158
+ // 权限检查(评审项 L5):profile 含私有策略值(max_total_price_private 等)
159
+ // ——与数据目录 0700/0600 约定对齐,过宽权限告警(不阻断:历史文件常见
160
+ // 0644,doctor 已做 inline-secret 扫描兜底)。
161
+ try {
162
+ const st = statSync(path);
163
+ if ((st.mode & 0o077) !== 0) {
164
+ console.warn(`[profile] ${path} is group/world-readable (mode ${(st.mode & 0o777).toString(8)}); ` +
165
+ "consider chmod 600 (contains private policy values)");
166
+ }
167
+ }
168
+ catch {
169
+ // stat 失败由下方 readFileSync 的清晰错误兜底。
170
+ }
171
+ let raw;
172
+ try {
173
+ raw = readFileSync(path, "utf-8");
174
+ }
175
+ catch (err) {
176
+ throw new ProfileError(`Cannot read profile ${path}: ${err instanceof Error ? err.message : String(err)}`);
177
+ }
178
+ let data;
179
+ try {
180
+ data = parseYaml(raw);
181
+ }
182
+ catch (err) {
183
+ throw new ProfileError(`Invalid YAML in ${path}: ${err instanceof Error ? err.message : String(err)}`);
184
+ }
185
+ return validateProfile(data, path);
186
+ }
187
+ export function validateProfile(data, source) {
188
+ req(isObject(data), `${source}: profile must be a YAML mapping`);
189
+ const p = data;
190
+ // runtime_version 是"生成该 profile 的运行时版本":只做格式校验,不 gate
191
+ // 精确相等(版本单源评审项:RUNTIME_VERSION 升级不应让全部既有 profile
192
+ // 失效——0.5.0 的 profile 在新代码上必须继续可加载)。
193
+ req(typeof p.runtime_version === "string" && /^\d+\.\d+\.\d+$/.test(p.runtime_version), `${source}: runtime_version must be a semantic version like ${RUNTIME_VERSION}`);
194
+ req(p.protocol_version === PROTOCOL_VERSION, `${source}: protocol_version must be ${PROTOCOL_VERSION}`);
195
+ req(typeof p.agent_id === "string" && p.agent_id.length > 0, `${source}: agent_id is required`);
196
+ req(p.role === "buyer" || p.role === "merchant", `${source}: role must be buyer or merchant`);
197
+ req(typeof p.owner_id === "string" && p.owner_id.length > 0, `${source}: owner_id is required`);
198
+ req(isObject(p.commerce), `${source}: commerce section is required`);
199
+ const commerce = p.commerce;
200
+ const commerceBaseUrl = assertSecureBaseUrl(commerce.base_url, "commerce.base_url", source);
201
+ req(typeof commerce.token_env === "string" && REQUIRED_ENV_REF.test(commerce.token_env), `${source}: commerce.token_env must name an environment variable (e.g. SHOPPING_AGENT_TOKEN); secrets must not be written into the profile`);
202
+ req(commerce.backend === "local_marketplace" || commerce.backend === "external_platform", `${source}: commerce.backend must be local_marketplace or external_platform`);
203
+ // Optional per-scope credential env refs (§15.4). Fail closed on unknown
204
+ // scopes, missing token_env, or inline secret values — just like token_env.
205
+ let credentials;
206
+ if (commerce.credentials !== undefined) {
207
+ req(isObject(commerce.credentials), `${source}: commerce.credentials must be a mapping`);
208
+ for (const scope of Object.keys(commerce.credentials)) {
209
+ req(COMMERCE_CREDENTIAL_SCOPES.includes(scope), `${source}: commerce.credentials has unknown scope "${scope}" (expected ${COMMERCE_CREDENTIAL_SCOPES.join("/")})`);
210
+ const entry = commerce.credentials[scope];
211
+ req(isObject(entry), `${source}: commerce.credentials.${scope} must be a mapping`);
212
+ req(typeof entry.token_env === "string" && REQUIRED_ENV_REF.test(entry.token_env), `${source}: commerce.credentials.${scope}.token_env must name an environment variable`);
213
+ req(Object.keys(entry).length === 1, `${source}: commerce.credentials.${scope} only supports token_env`);
214
+ }
215
+ credentials = Object.fromEntries(COMMERCE_CREDENTIAL_SCOPES.map((scope) => {
216
+ const entry = commerce.credentials[scope];
217
+ return entry === undefined ? [] : [scope, { token_env: entry.token_env }];
218
+ }).filter((pair) => pair.length > 0));
219
+ }
220
+ rejectUnknownKeys(commerce, COMMERCE_KEYS, "commerce", source);
221
+ req(isObject(p.model), `${source}: model section is required`);
222
+ const model = p.model;
223
+ req(typeof model.provider === "string" && model.provider.length > 0, `${source}: model.provider is required`);
224
+ req(typeof model.model === "string" && model.model.length > 0, `${source}: model.model is required`);
225
+ if (model.api_key_env !== undefined) {
226
+ req(typeof model.api_key_env === "string" && REQUIRED_ENV_REF.test(model.api_key_env), `${source}: model.api_key_env must name an environment variable`);
227
+ }
228
+ if (model.api !== undefined) {
229
+ req(typeof model.api === "string" && SUPPORTED_MODEL_APIS.includes(model.api), `${source}: model.api must be one of: ${SUPPORTED_MODEL_APIS.join(", ")}`);
230
+ }
231
+ let modelBaseUrl;
232
+ if (model.base_url !== undefined) {
233
+ modelBaseUrl = assertSecureBaseUrl(model.base_url, "model.base_url", source);
234
+ }
235
+ if (model.thinking_level !== undefined) {
236
+ req(typeof model.thinking_level === "string" &&
237
+ THINKING_LEVELS.includes(model.thinking_level), `${source}: model.thinking_level must be one of: ${THINKING_LEVELS.join(", ")}`);
238
+ }
239
+ rejectUnknownKeys(model, MODEL_KEYS, "model", source);
240
+ req(isObject(p.runtime), `${source}: runtime section is required`);
241
+ const runtime = p.runtime;
242
+ req(runtime.mode === "once" || runtime.mode === "foreground", `${source}: runtime.mode must be once or foreground`);
243
+ reqFinite(runtime.poll_interval_seconds, "runtime.poll_interval_seconds", source);
244
+ req(runtime.poll_interval_seconds > 0 &&
245
+ runtime.poll_interval_seconds <= RUNTIME_LIMITS.poll_interval_seconds, `${source}: runtime.poll_interval_seconds must be > 0 and <= ${RUNTIME_LIMITS.poll_interval_seconds}`);
246
+ reqFinite(runtime.turn_timeout_seconds, "runtime.turn_timeout_seconds", source);
247
+ req(runtime.turn_timeout_seconds > 0 &&
248
+ runtime.turn_timeout_seconds <= RUNTIME_LIMITS.turn_timeout_seconds, `${source}: runtime.turn_timeout_seconds must be > 0 and <= ${RUNTIME_LIMITS.turn_timeout_seconds}`);
249
+ req(Number.isInteger(runtime.max_model_steps) && runtime.max_model_steps >= 1, `${source}: runtime.max_model_steps must be an integer >= 1`);
250
+ req(runtime.max_model_steps <= RUNTIME_LIMITS.max_model_steps, `${source}: runtime.max_model_steps must be <= ${RUNTIME_LIMITS.max_model_steps}`);
251
+ req(Number.isInteger(runtime.max_retries) && runtime.max_retries >= 0, `${source}: runtime.max_retries must be an integer >= 0`);
252
+ req(runtime.max_retries <= RUNTIME_LIMITS.max_retries, `${source}: runtime.max_retries must be <= ${RUNTIME_LIMITS.max_retries}`);
253
+ rejectUnknownKeys(runtime, RUNTIME_KEYS, "runtime", source);
254
+ let merchantPolicy;
255
+ if (p.merchant_policy !== undefined) {
256
+ req(isObject(p.merchant_policy), `${source}: merchant_policy must be a mapping`);
257
+ const mp = p.merchant_policy;
258
+ rejectUnknownKeys(mp, MERCHANT_POLICY_KEYS, "merchant_policy", source);
259
+ if (mp.min_unit_price_private !== undefined) {
260
+ reqFinite(mp.min_unit_price_private, "merchant_policy.min_unit_price_private", source);
261
+ req(mp.min_unit_price_private >= 0, `${source}: merchant_policy.min_unit_price_private must be >= 0`);
262
+ }
263
+ if (mp.max_auto_discount_percent !== undefined) {
264
+ reqFinite(mp.max_auto_discount_percent, "merchant_policy.max_auto_discount_percent", source);
265
+ req(mp.max_auto_discount_percent >= 0 && mp.max_auto_discount_percent <= 100, `${source}: merchant_policy.max_auto_discount_percent must be between 0 and 100`);
266
+ }
267
+ if (mp.inventory_source !== undefined) {
268
+ req(typeof mp.inventory_source === "string" && mp.inventory_source.length > 0, `${source}: merchant_policy.inventory_source must be a non-empty string`);
269
+ }
270
+ if (mp.quote_ttl_seconds !== undefined) {
271
+ reqFinite(mp.quote_ttl_seconds, "merchant_policy.quote_ttl_seconds", source);
272
+ req(mp.quote_ttl_seconds > 0, `${source}: merchant_policy.quote_ttl_seconds must be > 0`);
273
+ }
274
+ if (mp.auto_negotiate !== undefined) {
275
+ req(typeof mp.auto_negotiate === "boolean", `${source}: merchant_policy.auto_negotiate must be a boolean`);
276
+ }
277
+ if (mp.human_review_on !== undefined) {
278
+ req(Array.isArray(mp.human_review_on) &&
279
+ mp.human_review_on.every((c) => typeof c === "string" && c.length > 0), `${source}: merchant_policy.human_review_on must be a list of non-empty strings`);
280
+ }
281
+ merchantPolicy = { ...mp };
282
+ }
283
+ let buyerPolicy;
284
+ if (p.buyer_policy !== undefined) {
285
+ req(isObject(p.buyer_policy), `${source}: buyer_policy must be a mapping`);
286
+ const bp = p.buyer_policy;
287
+ rejectUnknownKeys(bp, BUYER_POLICY_KEYS, "buyer_policy", source);
288
+ // All buyer_policy fields are required: the local private gate must not
289
+ // silently run with a half-specified policy.
290
+ for (const key of BUYER_POLICY_KEYS) {
291
+ req(bp[key] !== undefined, `${source}: buyer_policy.${key} is required`);
292
+ }
293
+ req(Array.isArray(bp.target_skus) &&
294
+ bp.target_skus.every((s) => typeof s === "string" && s.length > 0), `${source}: buyer_policy.target_skus must be a list of non-empty strings`);
295
+ req(Number.isInteger(bp.quantity) && bp.quantity >= 1, `${source}: buyer_policy.quantity must be a positive integer`);
296
+ reqFinite(bp.max_total_price_private, "buyer_policy.max_total_price_private", source);
297
+ req(bp.max_total_price_private >= 0, `${source}: buyer_policy.max_total_price_private must be >= 0`);
298
+ req(isRfc3339WithTimezone(bp.acceptable_eta_latest), `${source}: buyer_policy.acceptable_eta_latest must be an RFC 3339 date-time with an explicit timezone (e.g. 2026-08-05T18:00:00+08:00)`);
299
+ req(Array.isArray(bp.required_after_sales_terms) &&
300
+ bp.required_after_sales_terms.every((s) => typeof s === "string" && s.length > 0), `${source}: buyer_policy.required_after_sales_terms must be a list of non-empty strings`);
301
+ req(typeof bp.auto_negotiate === "boolean", `${source}: buyer_policy.auto_negotiate must be a boolean`);
302
+ req(Array.isArray(bp.human_review_on) &&
303
+ bp.human_review_on.every((c) => typeof c === "string" && c.length > 0), `${source}: buyer_policy.human_review_on must be a list of non-empty strings`);
304
+ buyerPolicy = { ...bp };
305
+ }
306
+ // Role <-> private policy binding: exactly one, matching the role.
307
+ if (p.role === "buyer") {
308
+ req(buyerPolicy !== undefined, `${source}: role=buyer requires a buyer_policy section`);
309
+ req(merchantPolicy === undefined, `${source}: role=buyer must not define merchant_policy (policies are role-exclusive)`);
310
+ }
311
+ else {
312
+ req(merchantPolicy !== undefined, `${source}: role=merchant requires a merchant_policy section`);
313
+ req(buyerPolicy === undefined, `${source}: role=merchant must not define buyer_policy (policies are role-exclusive)`);
314
+ }
315
+ rejectUnknownKeys(p, TOP_LEVEL_KEYS, "profile", source);
316
+ const profile = {
317
+ runtime_version: p.runtime_version,
318
+ protocol_version: p.protocol_version,
319
+ agent_id: p.agent_id,
320
+ role: p.role,
321
+ owner_id: p.owner_id,
322
+ commerce: {
323
+ base_url: commerceBaseUrl,
324
+ token_env: commerce.token_env,
325
+ backend: commerce.backend,
326
+ ...(credentials !== undefined ? { credentials } : {}),
327
+ },
328
+ model: {
329
+ provider: model.provider,
330
+ model: model.model,
331
+ ...(model.api_key_env !== undefined ? { api_key_env: model.api_key_env } : {}),
332
+ ...(model.api !== undefined ? { api: model.api } : {}),
333
+ ...(modelBaseUrl !== undefined ? { base_url: modelBaseUrl } : {}),
334
+ ...(model.thinking_level !== undefined
335
+ ? { thinking_level: model.thinking_level }
336
+ : {}),
337
+ },
338
+ runtime: {
339
+ mode: runtime.mode,
340
+ poll_interval_seconds: runtime.poll_interval_seconds,
341
+ turn_timeout_seconds: runtime.turn_timeout_seconds,
342
+ max_model_steps: runtime.max_model_steps,
343
+ max_retries: runtime.max_retries,
344
+ },
345
+ ...(merchantPolicy !== undefined ? { merchant_policy: merchantPolicy } : {}),
346
+ ...(buyerPolicy !== undefined ? { buyer_policy: buyerPolicy } : {}),
347
+ };
348
+ return profile;
349
+ }
350
+ /**
351
+ * Resolve a secret from an environment variable reference. Throws
352
+ * ProfileError when unset — callers map this to the config exit code.
353
+ */
354
+ export function resolveSecret(envName, what) {
355
+ const value = process.env[envName];
356
+ if (value === undefined || value === "") {
357
+ throw new ProfileError(`${what}: environment variable ${envName} is not set`);
358
+ }
359
+ return value;
360
+ }
361
+ /** Scan loaded profile data for accidentally inlined secrets. */
362
+ export function findInlineSecrets(data) {
363
+ const suspicious = ["api_key", "token", "secret", "password"];
364
+ const hits = [];
365
+ const walk = (node, path) => {
366
+ if (Array.isArray(node)) {
367
+ node.forEach((v, i) => walk(v, `${path}[${i}]`));
368
+ return;
369
+ }
370
+ if (isObject(node)) {
371
+ for (const [k, v] of Object.entries(node)) {
372
+ const keyPath = path ? `${path}.${k}` : k;
373
+ if (typeof v === "string" &&
374
+ suspicious.some((s) => k.toLowerCase().includes(s)) &&
375
+ !k.endsWith("_env") &&
376
+ v.length > 0) {
377
+ hits.push(keyPath);
378
+ }
379
+ walk(v, keyPath);
380
+ }
381
+ }
382
+ };
383
+ walk(data, "");
384
+ return hits;
385
+ }
386
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/config/profile.ts"],"names":[],"mappings":"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"}
@@ -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
+ export type NegotiationObjectName = "inquiry" | "rfq" | "offer" | "counter_offer" | "conditional_offer" | "clarification" | "clarification_response" | "accept_nonbinding" | "withdraw" | "decline" | "cancel" | "accepted_nonbinding_agreement";
17
+ /** Resolve the repository/package root from this module's location. */
18
+ export declare function packageRoot(): string;
19
+ export declare function loadNegotiationSchema(): Record<string, unknown>;
20
+ /** 校验完整 Envelope 是否满足 KNP/1.0 schema(含 action↔payload 一致性)。返回错误列表(空 = 合法)。 */
21
+ export declare function validateEnvelopeAgainstSchema(envelope: unknown): string[];
22
+ /**
23
+ * 校验单个 Negotiation Object(§9–§17 各 payload,或 AcceptedNonbindingAgreement
24
+ * artifact)是否满足对应 $defs。返回错误列表(空 = 合法)。
25
+ */
26
+ export declare function validateNegotiationObject(name: NegotiationObjectName, value: unknown): string[];
27
+ /** 断言合法;非法时抛错。 */
28
+ export declare function assertNegotiationEnvelopeValid(envelope: unknown, what: string): void;
@@ -0,0 +1,101 @@
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
+ * KNP/1.0 冻结 schema 加载与校验(基线 §41 #7 九类核心对象)。
18
+ *
19
+ * JSON 文件 contracts/negotiation/1.0/schema.json 是唯一权威源(与发布到
20
+ * https://kiwi.harrylabsj.com/schemas/negotiation/1.0/schema.json 的内容一致)。
21
+ * 校验使用 ajv 2020 + ajv-formats:Envelope 整体经 validateEnvelopeAgainstSchema;
22
+ * 单个对象(如 AcceptedNonbindingAgreement artifact)经 validateNegotiationObject
23
+ * 直接对 $defs 校验,不依赖 Envelope 包装。
24
+ */
25
+ import { readFileSync } from "node:fs";
26
+ import { createRequire } from "node:module";
27
+ import path from "node:path";
28
+ import { fileURLToPath } from "node:url";
29
+ // ajv is CommonJS; under NodeNext + verbatimModuleSyntax load it explicitly
30
+ // (same pattern as src/contracts/schemas.ts).
31
+ const require = createRequire(import.meta.url);
32
+ const Ajv2020 = require("ajv/dist/2020.js");
33
+ const addFormats = require("ajv-formats");
34
+ const SCHEMA_REL = ["contracts", "negotiation", "1.0", "schema.json"];
35
+ /** Resolve the repository/package root from this module's location. */
36
+ export function packageRoot() {
37
+ const here = path.dirname(fileURLToPath(import.meta.url));
38
+ // dist/contracts/negotiation-schema.js -> <root>; src/... -> <root>
39
+ return path.resolve(here, "..", "..");
40
+ }
41
+ let schema;
42
+ export function loadNegotiationSchema() {
43
+ if (schema === undefined) {
44
+ const file = path.join(packageRoot(), ...SCHEMA_REL);
45
+ schema = JSON.parse(readFileSync(file, "utf-8"));
46
+ }
47
+ return schema;
48
+ }
49
+ let ajv;
50
+ const envelopeValidatorCache = new Map();
51
+ const objectValidatorCache = new Map();
52
+ function getAjv() {
53
+ if (!ajv) {
54
+ ajv = new Ajv2020({ allErrors: true, strict: true });
55
+ addFormats(ajv);
56
+ }
57
+ return ajv;
58
+ }
59
+ function formatErrors(validate) {
60
+ return (validate.errors ?? []).map((e) => `${e.instancePath || "/"} ${e.message ?? "invalid"}`.trim());
61
+ }
62
+ /** 校验完整 Envelope 是否满足 KNP/1.0 schema(含 action↔payload 一致性)。返回错误列表(空 = 合法)。 */
63
+ export function validateEnvelopeAgainstSchema(envelope) {
64
+ let validate = envelopeValidatorCache.get("envelope");
65
+ if (validate === undefined) {
66
+ validate = getAjv().compile(loadNegotiationSchema());
67
+ envelopeValidatorCache.set("envelope", validate);
68
+ }
69
+ if (validate(envelope))
70
+ return [];
71
+ return formatErrors(validate);
72
+ }
73
+ /**
74
+ * 校验单个 Negotiation Object(§9–§17 各 payload,或 AcceptedNonbindingAgreement
75
+ * artifact)是否满足对应 $defs。返回错误列表(空 = 合法)。
76
+ */
77
+ export function validateNegotiationObject(name, value) {
78
+ let validate = objectValidatorCache.get(name);
79
+ if (validate === undefined) {
80
+ const full = loadNegotiationSchema();
81
+ // 2020-12:$ref 可与 $defs 并列,直接对单个 $def 编译。不给 $id,避免与
82
+ // 已注册的完整 schema 发生 $id 冲突。
83
+ const sub = {
84
+ $ref: `#/$defs/${name}`,
85
+ $defs: full.$defs,
86
+ };
87
+ validate = getAjv().compile(sub);
88
+ objectValidatorCache.set(name, validate);
89
+ }
90
+ if (validate(value))
91
+ return [];
92
+ return formatErrors(validate);
93
+ }
94
+ /** 断言合法;非法时抛错。 */
95
+ export function assertNegotiationEnvelopeValid(envelope, what) {
96
+ const errors = validateEnvelopeAgainstSchema(envelope);
97
+ if (errors.length > 0) {
98
+ throw new Error(`${what} failed KNP/1.0 schema validation: ${errors.join("; ")}`);
99
+ }
100
+ }
101
+ //# sourceMappingURL=negotiation-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"negotiation-schema.js","sourceRoot":"","sources":["../../src/contracts/negotiation-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
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 { ValidateFunction } from "ajv";
17
+ export type SchemaName = "decision" | "snapshot" | "policy-result" | "capabilities";
18
+ /** Resolve the repository/package root from this module's location. */
19
+ export declare function packageRoot(): string;
20
+ export declare function contractDir(): string;
21
+ export declare function loadSchema(name: SchemaName): Record<string, unknown>;
22
+ /**
23
+ * Inline local "#/$defs/..." references. Pi validates tool arguments with
24
+ * TypeBox, which does not resolve $ref; the frozen schema files stay
25
+ * untouched and we hand Pi a self-contained equivalent.
26
+ */
27
+ export declare function dereferenceSchema(schema: Record<string, unknown>): Record<string, unknown>;
28
+ export declare function getValidator(name: SchemaName): ValidateFunction;
29
+ /** Validate data against a frozen schema; returns a list of human-readable errors (empty = valid). */
30
+ export declare function validateAgainst(name: SchemaName, data: unknown): string[];
31
+ export declare function assertValid<T>(name: SchemaName, data: unknown, what: string): T;