@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,122 @@
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
+ * trust/records — 评估器(从事实观察推导 trust_level 建议值,基线 §27 / §28)。
18
+ *
19
+ * 评估规则确定、可测、无模型参与:
20
+ * - 初始 T0;
21
+ * - 成功交换 ≥ successToT1 → T1(成功发现/交互);
22
+ * - 连续验签成功 ≥ consecutiveVerifiedToT2 → T2(验签身份连续有效);
23
+ * - 对端在 establishedRelationships(部署配置)→ T3;
24
+ * - signature_failure / replay 超阈值,或存在 third_party_adjudicated 争议
25
+ * → 拒绝(rejected),level 置 T0(fail-closed,§4.6);
26
+ * - 未解决争议保守封顶:mutually_acknowledged → 封顶 T1;local_asserted → 封顶 T2。
27
+ *
28
+ * 维度分离(§27/§28):trust level 只控制协议/自动化风险。dispute 是 reputation
29
+ * 维度 —— 评估器只对已知事实做保守封顶/拒绝,不把本地单方标记伪装成全球事实,
30
+ * 也不让 reputation 直接写进协议 level。reputation 以 ReputationSignal 透传,
31
+ * 无数据时 Ranker 侧拿到显式 unknown(绝不 0.5)。
32
+ */
33
+ import { trustLevelRank } from "../identity/trust-policy.js";
34
+ export const DEFAULT_TRUST_EVALUATOR_CONFIG = {
35
+ successToT1: 1,
36
+ consecutiveVerifiedToT2: 3,
37
+ signatureFailureRejectThreshold: 3,
38
+ replayRejectThreshold: 2,
39
+ };
40
+ /** 无 reputation 数据的默认来源:恒返回显式 unknown(§27:绝不 0.5)。 */
41
+ export const NO_REPUTATION = {
42
+ score: () => ({ status: "unknown" }),
43
+ };
44
+ /** 把 record 转成 evaluatePolicy 的 record 输入(WP1 集成,见 trust-policy.ts)。 */
45
+ export function recordPolicyInput(record) {
46
+ return { trustLevel: record.trust_level, rejected: record.rejected };
47
+ }
48
+ function hasDispute(record, classification) {
49
+ return record.local_asserted_disputes.some((d) => d.classification === classification);
50
+ }
51
+ function hasUnresolvedDispute(record, classification) {
52
+ return record.local_asserted_disputes.some((d) => d.classification === classification && d.resolved !== true);
53
+ }
54
+ /**
55
+ * 从事实推导 trust_level 建议值(纯函数,无模型参与)。输入是 record 的事实面,
56
+ * 结论字段(trust_level / rejected / evaluated_at)不参与推导。
57
+ */
58
+ export function evaluateTrustRecord(record, options = {}) {
59
+ const cfg = options.config ?? DEFAULT_TRUST_EVALUATOR_CONFIG;
60
+ const reputation = options.reputation?.score(record.counterparty_identity) ??
61
+ NO_REPUTATION.score(record.counterparty_identity);
62
+ // 1. 拒绝门(硬阈值,先于升级判定,fail-closed)。
63
+ if (record.signature_failure_count >= cfg.signatureFailureRejectThreshold) {
64
+ return {
65
+ level: "T0",
66
+ rejected: true,
67
+ reason: `signature_failure_count ${record.signature_failure_count} >= ${cfg.signatureFailureRejectThreshold}`,
68
+ applied: ["rejected_signature_failures"],
69
+ reputation,
70
+ };
71
+ }
72
+ if (record.replay_detected_count >= cfg.replayRejectThreshold) {
73
+ return {
74
+ level: "T0",
75
+ rejected: true,
76
+ reason: `replay_detected_count ${record.replay_detected_count} >= ${cfg.replayRejectThreshold}`,
77
+ applied: ["rejected_replay"],
78
+ reputation,
79
+ };
80
+ }
81
+ if (hasDispute(record, "third_party_adjudicated")) {
82
+ return {
83
+ level: "T0",
84
+ rejected: true,
85
+ reason: "third_party_adjudicated dispute on record (adjudicated against counterparty)",
86
+ applied: ["rejected_adjudicated_dispute"],
87
+ reputation,
88
+ };
89
+ }
90
+ // 2. 升级路径(一次性取最高)。
91
+ let level;
92
+ const applied = [];
93
+ if (options.establishedRelationships?.has(record.counterparty_identity)) {
94
+ level = "T3";
95
+ applied.push("established_relationship_t3");
96
+ }
97
+ else if (record.consecutive_verified_exchanges >= cfg.consecutiveVerifiedToT2) {
98
+ level = "T2";
99
+ applied.push("signature_continuity_t2");
100
+ }
101
+ else if (record.successful_exchanges >= cfg.successToT1) {
102
+ level = "T1";
103
+ applied.push("successful_exchange_t1");
104
+ }
105
+ else {
106
+ level = "T0";
107
+ applied.push("initial_t0");
108
+ }
109
+ // 3. 未解决争议保守封顶(只降不升)。
110
+ if (hasUnresolvedDispute(record, "mutually_acknowledged") &&
111
+ trustLevelRank(level) > trustLevelRank("T1")) {
112
+ level = "T1";
113
+ applied.push("capped_mutual_dispute");
114
+ }
115
+ if (hasUnresolvedDispute(record, "local_asserted") &&
116
+ trustLevelRank(level) > trustLevelRank("T2")) {
117
+ level = "T2";
118
+ applied.push("capped_local_dispute");
119
+ }
120
+ return { level, rejected: false, applied, reputation };
121
+ }
122
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../src/trust/records/evaluator.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
+ /**
17
+ * trust/records — WP1 CounterpartyTrustRecord(对端信任记录)。
18
+ *
19
+ * 观察是事实,评估是结论,两者分离:TrustRecordStore.observe 只聚合事实;
20
+ * 评估器从事实推导 trust_level 建议值(T0-T3)。TrustPolicy 可选用 record 作为
21
+ * 输入(trust-policy.ts 的 PolicyEvaluationInput.record)。
22
+ */
23
+ export { TrustRecordStore } from "./store.js";
24
+ export type { EvaluateResult, ObservationResult, TrustRecordStoreOptions } from "./store.js";
25
+ export { DEFAULT_TRUST_EVALUATOR_CONFIG, evaluateTrustRecord, NO_REPUTATION, recordPolicyInput, } from "./evaluator.js";
26
+ export type { EvaluateOptions, EvaluationResult, EvaluationRule, TrustEvaluatorConfig, } from "./evaluator.js";
27
+ export { computeAgentCardFingerprint, DISPUTE_CLASSIFICATIONS, TRUST_RECORD_SCHEMA_VERSION, } from "./types.js";
28
+ export type { AgentCardIdentityMaterial, CounterpartyTrustRecord, DisputeClassification, DisputeRecord, ObservationKind, ReputationSignal, ReputationSource, TrustObservation, TrustRecordFacts, } from "./types.js";
@@ -0,0 +1,26 @@
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
+ * trust/records — WP1 CounterpartyTrustRecord(对端信任记录)。
18
+ *
19
+ * 观察是事实,评估是结论,两者分离:TrustRecordStore.observe 只聚合事实;
20
+ * 评估器从事实推导 trust_level 建议值(T0-T3)。TrustPolicy 可选用 record 作为
21
+ * 输入(trust-policy.ts 的 PolicyEvaluationInput.record)。
22
+ */
23
+ export { TrustRecordStore } from "./store.js";
24
+ export { DEFAULT_TRUST_EVALUATOR_CONFIG, evaluateTrustRecord, NO_REPUTATION, recordPolicyInput, } from "./evaluator.js";
25
+ export { computeAgentCardFingerprint, DISPUTE_CLASSIFICATIONS, TRUST_RECORD_SCHEMA_VERSION, } from "./types.js";
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/trust/records/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,EACnB,aAAa,EACb,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAQxB,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,YAAY,CAAC"}
@@ -0,0 +1,75 @@
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 { EvaluationResult, EvaluateOptions } from "./evaluator.js";
17
+ import type { CounterpartyTrustRecord, TrustObservation } from "./types.js";
18
+ export interface TrustRecordStoreOptions {
19
+ /** 基础数据目录;记录落在 `<dir>/trust/`。 */
20
+ dir: string;
21
+ /** 可注入时钟(RFC 3339);缺省用 new Date().toISOString()。 */
22
+ now?: () => string;
23
+ /** 评估器配置(阈值 / establishedRelationships / reputation 来源)。 */
24
+ evaluator?: EvaluateOptions;
25
+ }
26
+ export interface ObservationResult {
27
+ /** 更新后的完整 record(含新推导的结论)。 */
28
+ record: CounterpartyTrustRecord;
29
+ /** 本次评估结论。 */
30
+ evaluation: EvaluationResult;
31
+ /** Agent Card 指纹是否变化(告警信号;持久化于 fingerprint_changes)。 */
32
+ fingerprintChanged: boolean;
33
+ previousFingerprint?: string;
34
+ currentFingerprint?: string;
35
+ }
36
+ export interface EvaluateResult {
37
+ record: CounterpartyTrustRecord;
38
+ evaluation: EvaluationResult;
39
+ }
40
+ export declare class TrustRecordStore {
41
+ private readonly baseDir;
42
+ private readonly trustDir;
43
+ private readonly now;
44
+ private readonly evaluator;
45
+ constructor(options: TrustRecordStoreOptions);
46
+ private ensureTrustDir;
47
+ /** 对端身份 → 安全文件名:`trust-<sha256(identity)>.json`(身份在文件内自描述)。 */
48
+ private filePathFor;
49
+ /** 原子写(对齐 supervisor/manifest.ts:同目录临时文件 + fsync + rename,0600)。 */
50
+ private writeFileAtomic;
51
+ /**
52
+ * 读取并校验记录;缺失或形状非法返回 null。损坏记录视同未知(对端回到 T0):
53
+ * fail-closed —— 宁可信得少,不可把结论建立在被破坏的记录上。
54
+ */
55
+ private readRecord;
56
+ private parseRecord;
57
+ /** 读取记录;未知/损坏返回 null。 */
58
+ get(identity: string): CounterpartyTrustRecord | null;
59
+ /** 是否存在记录。 */
60
+ has(identity: string): boolean;
61
+ /** 所有已落账的对端身份。 */
62
+ list(): string[];
63
+ /** 删除记录;不存在返回 false。 */
64
+ remove(identity: string): boolean;
65
+ /**
66
+ * 追加一条事实观察并落盘。只改事实面;结论由评估器重新推导(评估得出而非自填)。
67
+ * 指纹与已存不同 → 返回 fingerprintChanged 告警,并持久化计数。
68
+ */
69
+ observe(input: TrustObservation): ObservationResult;
70
+ /**
71
+ * 对已落盘记录重新推导结论并落盘(如部署配置 establishedRelationships 变化后
72
+ * 重新评估)。只改结论,不改事实。无记录返回 null。
73
+ */
74
+ evaluate(identity: string): EvaluateResult | null;
75
+ }
@@ -0,0 +1,339 @@
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
+ * trust/records — TrustRecordStore:CounterpartyTrustRecord 持久化 + 观察聚合
18
+ * (基线 §27 / §28 / WP1)。
19
+ *
20
+ * 观察是事实,评估是结论,两者分离:
21
+ * - observe(observation):append 一条事实观察,只改事实面;trust_level /
22
+ * rejected 由评估器重新推导,observe 本身无法直接写结论(TrustObservation
23
+ * 没有 level 字段)。
24
+ * - evaluate(identity):对已落盘记录按当前事实 + 部署配置重新推导并落盘结论。
25
+ *
26
+ * 持久化(对齐 idempotency/ledger 的原子写):目录 0700、文件 0600;写采用
27
+ * 同目录临时文件(wx + fsync)+ rename,要么旧记录完整,要么新记录完整,永不撕裂。
28
+ * 读侧校验记录形状,损坏记录返回 null(→ 对端视为未知 T0,fail-closed)。
29
+ *
30
+ * Agent Card 指纹变更检测:observe 发现携带指纹与已存指纹不同时产生告警信号
31
+ * (fingerprintChanged),并持久化 fingerprint_changes 计数 —— 即使调用方错过
32
+ * 返回值,重启后 get() 也能发现身份锚发生过变更(不是静默接受)。
33
+ */
34
+ import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readdirSync, readFileSync, renameSync, rmSync, writeSync, } from "node:fs";
35
+ import path from "node:path";
36
+ import { sha256Hex } from "../../negotiation/jcs.js";
37
+ import { isTrustLevel } from "../identity/trust-policy.js";
38
+ import { evaluateTrustRecord } from "./evaluator.js";
39
+ import { DISPUTE_CLASSIFICATIONS, TRUST_RECORD_SCHEMA_VERSION } from "./types.js";
40
+ let tmpSeq = 0;
41
+ function isCount(v) {
42
+ return typeof v === "number" && Number.isInteger(v) && v >= 0;
43
+ }
44
+ function isStringMap(v) {
45
+ return (v !== null &&
46
+ typeof v === "object" &&
47
+ !Array.isArray(v) &&
48
+ Object.values(v).every((x) => typeof x === "string"));
49
+ }
50
+ function isDisputeRecord(v) {
51
+ if (v === null || typeof v !== "object" || Array.isArray(v))
52
+ return false;
53
+ const d = v;
54
+ return (typeof d.dispute_id === "string" &&
55
+ typeof d.occurred_at === "string" &&
56
+ typeof d.classification === "string" &&
57
+ DISPUTE_CLASSIFICATIONS.includes(d.classification));
58
+ }
59
+ function optionalString(v) {
60
+ return typeof v === "string" ? v : undefined;
61
+ }
62
+ function appendDispute(existing, input, observedAt) {
63
+ const classification = input.dispute?.classification ?? "local_asserted";
64
+ const reason = input.dispute?.reason;
65
+ const disputeId = input.dispute?.dispute_id ??
66
+ `dispute-${sha256Hex(`${input.counterparty_identity}|${classification}|${reason ?? ""}|${observedAt}`)}`;
67
+ const index = existing.findIndex((d) => d.dispute_id === disputeId);
68
+ if (index !== -1) {
69
+ // 同 id 观察:只做状态更新(如 resolved/reason),不重复追加。
70
+ const current = existing[index];
71
+ const next = [...existing];
72
+ next[index] = {
73
+ ...current,
74
+ ...(input.dispute?.resolved !== undefined ? { resolved: input.dispute.resolved } : {}),
75
+ ...(reason !== undefined ? { reason } : {}),
76
+ };
77
+ return next;
78
+ }
79
+ const entry = { dispute_id: disputeId, classification, occurred_at: observedAt };
80
+ if (reason !== undefined)
81
+ entry.reason = reason;
82
+ if (input.dispute?.resolved !== undefined)
83
+ entry.resolved = input.dispute.resolved;
84
+ return [...existing, entry];
85
+ }
86
+ export class TrustRecordStore {
87
+ baseDir;
88
+ trustDir;
89
+ now;
90
+ evaluator;
91
+ constructor(options) {
92
+ this.baseDir = options.dir;
93
+ this.trustDir = path.join(options.dir, "trust");
94
+ this.now = options.now ?? (() => new Date().toISOString());
95
+ this.evaluator = options.evaluator ?? {};
96
+ }
97
+ ensureTrustDir() {
98
+ mkdirSync(this.trustDir, { recursive: true, mode: 0o700 });
99
+ chmodSync(this.trustDir, 0o700);
100
+ return this.trustDir;
101
+ }
102
+ /** 对端身份 → 安全文件名:`trust-<sha256(identity)>.json`(身份在文件内自描述)。 */
103
+ filePathFor(identity) {
104
+ const dir = this.ensureTrustDir();
105
+ return path.resolve(dir, `trust-${sha256Hex(identity)}.json`);
106
+ }
107
+ /** 原子写(对齐 supervisor/manifest.ts:同目录临时文件 + fsync + rename,0600)。 */
108
+ writeFileAtomic(filePath, record) {
109
+ const tmp = `${filePath}.tmp-${process.pid}-${++tmpSeq}`;
110
+ const fd = openSync(tmp, "wx", 0o600);
111
+ try {
112
+ writeSync(fd, `${JSON.stringify(record, null, 2)}\n`);
113
+ fsyncSync(fd);
114
+ }
115
+ finally {
116
+ closeSync(fd);
117
+ }
118
+ renameSync(tmp, filePath);
119
+ chmodSync(filePath, 0o600);
120
+ }
121
+ /**
122
+ * 读取并校验记录;缺失或形状非法返回 null。损坏记录视同未知(对端回到 T0):
123
+ * fail-closed —— 宁可信得少,不可把结论建立在被破坏的记录上。
124
+ */
125
+ readRecord(identity) {
126
+ const filePath = this.filePathFor(identity);
127
+ if (!existsSync(filePath))
128
+ return null;
129
+ return this.parseRecord(filePath);
130
+ }
131
+ parseRecord(filePath) {
132
+ let raw;
133
+ try {
134
+ raw = readFileSync(filePath, "utf-8");
135
+ }
136
+ catch {
137
+ return null;
138
+ }
139
+ let value;
140
+ try {
141
+ value = JSON.parse(raw);
142
+ }
143
+ catch {
144
+ return null;
145
+ }
146
+ if (value === null || typeof value !== "object" || Array.isArray(value))
147
+ return null;
148
+ const r = value;
149
+ if (typeof r.counterparty_identity !== "string" ||
150
+ r.counterparty_identity.length === 0 ||
151
+ typeof r.first_seen !== "string" ||
152
+ typeof r.last_seen !== "string" ||
153
+ typeof r.evaluated_at !== "string" ||
154
+ !isTrustLevel(r.trust_level) ||
155
+ !isCount(r.successful_exchanges) ||
156
+ !isCount(r.consecutive_verified_exchanges) ||
157
+ !isCount(r.invalid_schema_count) ||
158
+ !isCount(r.timeout_count) ||
159
+ !isCount(r.replay_detected_count) ||
160
+ !isCount(r.signature_failure_count) ||
161
+ !isCount(r.fingerprint_changes) ||
162
+ r.schema_version !== TRUST_RECORD_SCHEMA_VERSION ||
163
+ !Array.isArray(r.local_asserted_disputes) ||
164
+ !r.local_asserted_disputes.every(isDisputeRecord) ||
165
+ !isStringMap(r.capability_versions)) {
166
+ return null;
167
+ }
168
+ return {
169
+ counterparty_identity: r.counterparty_identity,
170
+ domain: optionalString(r.domain),
171
+ agent_card_fingerprint: optionalString(r.agent_card_fingerprint),
172
+ provider: optionalString(r.provider),
173
+ capability_versions: r.capability_versions,
174
+ first_seen: r.first_seen,
175
+ last_seen: r.last_seen,
176
+ last_fingerprint_change_at: optionalString(r.last_fingerprint_change_at),
177
+ successful_exchanges: r.successful_exchanges,
178
+ consecutive_verified_exchanges: r.consecutive_verified_exchanges,
179
+ invalid_schema_count: r.invalid_schema_count,
180
+ timeout_count: r.timeout_count,
181
+ replay_detected_count: r.replay_detected_count,
182
+ signature_failure_count: r.signature_failure_count,
183
+ local_asserted_disputes: r.local_asserted_disputes,
184
+ fingerprint_changes: r.fingerprint_changes,
185
+ schema_version: TRUST_RECORD_SCHEMA_VERSION,
186
+ trust_level: r.trust_level,
187
+ evaluated_at: r.evaluated_at,
188
+ rejected: typeof r.rejected === "boolean" ? r.rejected : false,
189
+ rejection_reason: optionalString(r.rejection_reason),
190
+ };
191
+ }
192
+ /** 读取记录;未知/损坏返回 null。 */
193
+ get(identity) {
194
+ return this.readRecord(identity);
195
+ }
196
+ /** 是否存在记录。 */
197
+ has(identity) {
198
+ return this.readRecord(identity) !== null;
199
+ }
200
+ /** 所有已落账的对端身份。 */
201
+ list() {
202
+ const dir = this.ensureTrustDir();
203
+ const out = [];
204
+ for (const name of readdirSync(dir)) {
205
+ if (!name.startsWith("trust-") || !name.endsWith(".json"))
206
+ continue;
207
+ const record = this.parseRecord(path.join(dir, name));
208
+ if (record !== null)
209
+ out.push(record.counterparty_identity);
210
+ }
211
+ return out;
212
+ }
213
+ /** 删除记录;不存在返回 false。 */
214
+ remove(identity) {
215
+ const filePath = this.filePathFor(identity);
216
+ if (!existsSync(filePath))
217
+ return false;
218
+ rmSync(filePath);
219
+ return true;
220
+ }
221
+ /**
222
+ * 追加一条事实观察并落盘。只改事实面;结论由评估器重新推导(评估得出而非自填)。
223
+ * 指纹与已存不同 → 返回 fingerprintChanged 告警,并持久化计数。
224
+ */
225
+ observe(input) {
226
+ const identity = input.counterparty_identity;
227
+ if (identity.length === 0) {
228
+ throw new TypeError("TrustRecordStore.observe: counterparty_identity must be non-empty");
229
+ }
230
+ const observedAt = input.observed_at ?? this.now();
231
+ const existing = this.readRecord(identity);
232
+ const record = existing ?? {
233
+ counterparty_identity: identity,
234
+ domain: undefined,
235
+ agent_card_fingerprint: undefined,
236
+ provider: undefined,
237
+ capability_versions: {},
238
+ first_seen: observedAt,
239
+ last_seen: observedAt,
240
+ successful_exchanges: 0,
241
+ consecutive_verified_exchanges: 0,
242
+ invalid_schema_count: 0,
243
+ timeout_count: 0,
244
+ replay_detected_count: 0,
245
+ signature_failure_count: 0,
246
+ local_asserted_disputes: [],
247
+ fingerprint_changes: 0,
248
+ schema_version: TRUST_RECORD_SCHEMA_VERSION,
249
+ trust_level: "T0",
250
+ evaluated_at: observedAt,
251
+ rejected: false,
252
+ };
253
+ if (Date.parse(observedAt) < Date.parse(record.first_seen))
254
+ record.first_seen = observedAt;
255
+ if (Date.parse(observedAt) > Date.parse(record.last_seen))
256
+ record.last_seen = observedAt;
257
+ if (input.domain !== undefined && record.domain === undefined)
258
+ record.domain = input.domain;
259
+ if (input.provider !== undefined && record.provider === undefined)
260
+ record.provider = input.provider;
261
+ // Agent Card 指纹变更检测(identity 锚;告警而非静默接受)。
262
+ let fingerprintChanged = false;
263
+ const previousFingerprint = record.agent_card_fingerprint;
264
+ if (input.agent_card_fingerprint !== undefined) {
265
+ if (record.agent_card_fingerprint === undefined) {
266
+ record.agent_card_fingerprint = input.agent_card_fingerprint;
267
+ }
268
+ else if (record.agent_card_fingerprint !== input.agent_card_fingerprint) {
269
+ fingerprintChanged = true;
270
+ record.fingerprint_changes += 1;
271
+ record.last_fingerprint_change_at = observedAt;
272
+ record.agent_card_fingerprint = input.agent_card_fingerprint;
273
+ // 身份锚变更:先前的验签连续性不再适用于新 identity 材料。
274
+ record.consecutive_verified_exchanges = 0;
275
+ }
276
+ }
277
+ switch (input.kind) {
278
+ case "exchange_success":
279
+ record.successful_exchanges += 1;
280
+ record.consecutive_verified_exchanges += 1;
281
+ if (input.capability_versions !== undefined) {
282
+ record.capability_versions = {
283
+ ...record.capability_versions,
284
+ ...input.capability_versions,
285
+ };
286
+ }
287
+ break;
288
+ case "schema_invalid":
289
+ record.invalid_schema_count += 1;
290
+ break;
291
+ case "timeout":
292
+ record.timeout_count += 1;
293
+ break;
294
+ case "replay_detected":
295
+ record.replay_detected_count += 1;
296
+ record.consecutive_verified_exchanges = 0;
297
+ break;
298
+ case "signature_failure":
299
+ record.signature_failure_count += 1;
300
+ record.consecutive_verified_exchanges = 0;
301
+ break;
302
+ case "dispute":
303
+ record.local_asserted_disputes = appendDispute(record.local_asserted_disputes, input, observedAt);
304
+ break;
305
+ }
306
+ // 结论只由评估器推导。
307
+ const evaluation = evaluateTrustRecord(record, this.evaluator);
308
+ record.trust_level = evaluation.level;
309
+ record.rejected = evaluation.rejected;
310
+ record.rejection_reason = evaluation.rejected ? evaluation.reason : undefined;
311
+ record.evaluated_at = observedAt;
312
+ this.writeFileAtomic(this.filePathFor(identity), record);
313
+ return {
314
+ record,
315
+ evaluation,
316
+ fingerprintChanged,
317
+ ...(fingerprintChanged
318
+ ? { previousFingerprint, currentFingerprint: record.agent_card_fingerprint }
319
+ : {}),
320
+ };
321
+ }
322
+ /**
323
+ * 对已落盘记录重新推导结论并落盘(如部署配置 establishedRelationships 变化后
324
+ * 重新评估)。只改结论,不改事实。无记录返回 null。
325
+ */
326
+ evaluate(identity) {
327
+ const record = this.readRecord(identity);
328
+ if (record === null)
329
+ return null;
330
+ const evaluation = evaluateTrustRecord(record, this.evaluator);
331
+ record.trust_level = evaluation.level;
332
+ record.rejected = evaluation.rejected;
333
+ record.rejection_reason = evaluation.rejected ? evaluation.reason : undefined;
334
+ record.evaluated_at = this.now();
335
+ this.writeFileAtomic(this.filePathFor(identity), record);
336
+ return { record, evaluation };
337
+ }
338
+ }
339
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/trust/records/store.ts"],"names":[],"mappings":"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"}