@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,395 @@
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
+ * Operator TUI (design §11–§12) — plain node:readline over injected streams.
18
+ * No UI dependency, no TTY requirement: input/output are injected, so tests
19
+ * drive it with in-memory streams. The TUI only renders controller state and
20
+ * calls typed OperatorController methods; no state transitions live here.
21
+ *
22
+ * Visibility labels follow design §11: 私有 (operator-only), 公开草稿
23
+ * (public draft, sent only after approval), 已发送 (authoritative), 建议
24
+ * (manual-mode advice). Decision summaries are concise lines — never raw
25
+ * chain-of-thought.
26
+ */
27
+ import readline from "node:readline";
28
+ import { EXIT } from "../exit-codes.js";
29
+ import { createTheme } from "../tui/styles.js";
30
+ const COMMANDS = `/mode <autopilot|supervised|manual> [confirm] 切换运行模式
31
+ /strategy [confirm] 查看有效策略;confirm 确认放宽变更
32
+ /approve 批准当前候选决策
33
+ /reject [原因] 驳回当前候选并放弃该轮
34
+ /revise <指令> 带新指令重新生成候选
35
+ /pause 停止领取新消息
36
+ /resume 恢复领取消息
37
+ /why 解释当前候选与策略命中
38
+ /history [n] 查看最近 n 条操作者事件
39
+ /usage 查看会话用量
40
+ /quit 安全退出`;
41
+ function modeLabel(mode) {
42
+ return mode === "autopilot" ? "Autopilot" : mode === "manual" ? "Manual" : "Supervised";
43
+ }
44
+ /** Bare natural-language aliases for the slash commands (design §12). */
45
+ const BARE_APPROVE = /^(approve|accept|批准)$/i;
46
+ const BARE_REJECT = /^(reject|驳回|拒绝)$/i;
47
+ const BARE_REVISE = /^(revise|重算|重来|重新生成)\s+(.+)$/i;
48
+ /**
49
+ * Map a bare (no-slash) operator line to its slash command, so `approve` /
50
+ * `reject` / `revise <指令>` are not swallowed as strategy preferences.
51
+ * Returns undefined when the line is not a known command alias.
52
+ */
53
+ function mapBareCommand(line) {
54
+ const trimmed = line.trim();
55
+ if (BARE_APPROVE.test(trimmed))
56
+ return "/approve";
57
+ if (BARE_REJECT.test(trimmed))
58
+ return "/reject";
59
+ const revise = BARE_REVISE.exec(trimmed);
60
+ if (revise !== null && revise[2] !== undefined)
61
+ return `/revise ${revise[2].trim()}`;
62
+ return undefined;
63
+ }
64
+ function renderHeader(controller, write, theme) {
65
+ const state = controller.getState();
66
+ const profile = controller.profile;
67
+ const roleLabel = profile.role === "buyer" ? "Buyer" : "Merchant";
68
+ // segments 拼接与旧文本逐字节一致(off 模式),TTY 下按语义着色
69
+ write(theme.segments([
70
+ { text: `Kiwi ${roleLabel}`, color: "primary", bold: true },
71
+ profile.agent_id,
72
+ { text: modeLabel(state.mode), color: modeColor(state.mode) },
73
+ ...(state.paused ? [{ text: "已暂停", color: "warn" }] : []),
74
+ ]));
75
+ write(theme.enabled
76
+ ? `${theme.paint("会话:", "accent")} ${profile.commerce.base_url} · ${theme.paint("输入 /help 查看命令", "muted", { dim: true })}`
77
+ : `会话: ${profile.commerce.base_url} · 输入 /help 查看命令`);
78
+ }
79
+ function modeColor(mode) {
80
+ return mode === "autopilot" ? "accent" : mode === "supervised" ? "primary" : "warn";
81
+ }
82
+ function renderCandidate(controller, candidate, write, theme) {
83
+ // panel 化:TTY 下 box 包裹;off 下 `─`×56 + 内容(legacy 逐字节复刻)
84
+ const lines = [];
85
+ const counterpart = controller.lastCounterpartMessage;
86
+ if (counterpart !== undefined)
87
+ lines.push(`对方: ${counterpart}`);
88
+ lines.push("Kiwi 分析:");
89
+ for (const line of candidate.analysis)
90
+ lines.push(` · ${line}`);
91
+ if (candidate.route === "advice_only") {
92
+ lines.push(`建议(manual 模式,不自动提交): ${candidate.decision.public_message}`);
93
+ lines.push(`候选 ${candidate.candidate_id} 仅建议 · /reject 放弃 · /revise <指令> 重算`);
94
+ }
95
+ else {
96
+ lines.push(`公开草稿: ${candidate.decision.public_message}`);
97
+ lines.push(`候选 ${candidate.candidate_id} 等待批准:/approve 批准 · /revise <指令> 重算 · /reject 驳回`);
98
+ }
99
+ write(theme.panel(lines, { legacySeparator: true }));
100
+ }
101
+ function renderPrepare(controller, result, write, theme) {
102
+ switch (result.kind) {
103
+ case "awaiting_approval":
104
+ case "advice_ready":
105
+ renderCandidate(controller, result.candidate, write, theme);
106
+ break;
107
+ case "auto_submitted":
108
+ write(`[已发送] autopilot 已自动提交 ${result.candidate_id}(${result.policy_result}` +
109
+ `${result.message_id !== undefined ? `,正式消息 #${result.message_id}` : ""})。`);
110
+ break;
111
+ case "blocked":
112
+ write(`[私有] ${result.reason}`);
113
+ break;
114
+ case "no_work":
115
+ write("[私有] 当前没有待处理消息。");
116
+ break;
117
+ }
118
+ }
119
+ function renderApproval(result, write) {
120
+ switch (result.kind) {
121
+ case "submitted":
122
+ if (result.settlement === "completed") {
123
+ write(`[已发送] 决策已提交(${result.policy_result}` +
124
+ `${result.message_id !== undefined ? `,正式消息 #${result.message_id}` : ""})。`);
125
+ }
126
+ else {
127
+ write(`[私有] 提交未通过策略门(${result.policy_result}),本轮已标记失败,不会重发。`);
128
+ }
129
+ break;
130
+ case "replayed":
131
+ write(`[私有] 候选 ${result.candidate_id} 已提交过,批准命令幂等重放,不产生重复消息。`);
132
+ break;
133
+ case "invalid":
134
+ write(`[私有] ${result.reason}`);
135
+ break;
136
+ }
137
+ }
138
+ function renderStrategy(controller, write) {
139
+ const strategy = controller.getState().strategy;
140
+ write("[私有] 当前有效策略:");
141
+ if (strategy.directives.length === 0 && strategy.pending_relax === undefined) {
142
+ write(" (暂无会话策略;硬约束来自 profile,模型无权突破)");
143
+ }
144
+ for (const d of strategy.directives) {
145
+ write(` · [${d.kind}/${d.scope}] ${d.summary}`);
146
+ }
147
+ if (strategy.pending_relax !== undefined) {
148
+ write(` · 待确认(relax): ${strategy.pending_relax.summary} — /strategy confirm 应用`);
149
+ }
150
+ }
151
+ function renderWhy(controller, write) {
152
+ const report = controller.why();
153
+ write("[私有] 决策说明:");
154
+ if (report.note !== undefined)
155
+ write(` ${report.note}`);
156
+ if (report.candidate_id !== undefined) {
157
+ write(` 候选: ${report.candidate_id} · 路由: ${report.route ?? ""}`);
158
+ }
159
+ for (const line of report.analysis)
160
+ write(` · ${line}`);
161
+ if (report.reason_codes.length > 0)
162
+ write(` 理由代码: ${report.reason_codes.join(", ")}`);
163
+ if (report.active_directives.length > 0) {
164
+ write(" 生效指令:");
165
+ for (const d of report.active_directives)
166
+ write(` · ${d}`);
167
+ }
168
+ }
169
+ function renderHistory(controller, arg, write) {
170
+ const n = Number.parseInt(arg, 10);
171
+ const events = controller.history(Number.isInteger(n) && n > 0 ? n : 10);
172
+ write(`[私有] 最近 ${events.length} 条事件:`);
173
+ for (const event of events) {
174
+ write(` ${event.occurred_at} [${event.visibility}] ${event.type}${eventSummary(event)}`);
175
+ }
176
+ }
177
+ function eventSummary(event) {
178
+ switch (event.type) {
179
+ case "operator.message":
180
+ return ` ${event.payload.text}`;
181
+ case "strategy.patch.proposed":
182
+ case "strategy.patch.applied":
183
+ case "strategy.patch.rejected":
184
+ return ` ${event.payload.patch.kind}: ${event.payload.patch.summary}`;
185
+ case "mode.changed":
186
+ return ` ${event.payload.from} -> ${event.payload.to}`;
187
+ case "candidate.generated":
188
+ return ` ${event.payload.candidate.candidate_id} (${event.payload.candidate.route})`;
189
+ case "candidate.approved":
190
+ case "candidate.rejected":
191
+ case "candidate.revised":
192
+ case "decision.submitted":
193
+ return ` ${event.payload.candidate_id}`;
194
+ case "turn.settled":
195
+ return ` ${event.payload.candidate_id} ${event.payload.settlement}`;
196
+ default:
197
+ return "";
198
+ }
199
+ }
200
+ function renderUsage(controller, write) {
201
+ const stats = controller.usage();
202
+ write("[私有] 会话用量:");
203
+ write(` 操作者消息: ${stats.operator_messages} · 策略应用/拒绝: ${stats.patches_applied}/${stats.patches_rejected}`);
204
+ write(` 候选: ${stats.candidates_generated} · 提交: ${stats.decisions_submitted} · ` +
205
+ `批准/驳回/重算: ${stats.approvals}/${stats.rejections}/${stats.revisions} · 事件: ${stats.events}`);
206
+ write(" 模型 token: 不适用(v0.2.0 确定性后端;Pi 后端接入后展示)");
207
+ }
208
+ async function handleCommand(controller, line, write, theme) {
209
+ const parts = line.split(/\s+/);
210
+ const command = parts[0] ?? "";
211
+ const rest = parts.slice(1);
212
+ const arg = rest.join(" ").trim();
213
+ const state = controller.getState();
214
+ switch (command) {
215
+ case "/mode": {
216
+ if (arg === "") {
217
+ write(`当前模式: ${modeLabel(state.mode)}`);
218
+ return;
219
+ }
220
+ const target = rest[0] ?? "";
221
+ const result = await controller.setMode(target, {
222
+ confirmed: rest[1] === "confirm",
223
+ });
224
+ if (result.kind === "changed")
225
+ write(`[私有] 模式已切换为 ${modeLabel(result.mode)}。`);
226
+ else if (result.kind === "needs_confirmation")
227
+ write(`[私有] ${result.reason}`);
228
+ else if (result.kind === "unchanged")
229
+ write(`[私有] 已是 ${modeLabel(result.mode)}。`);
230
+ else
231
+ write(`[私有] ${result.error}`);
232
+ return;
233
+ }
234
+ case "/strategy": {
235
+ if (arg === "confirm") {
236
+ const result = await controller.confirmStrategy();
237
+ write(result.ok ? "[私有] 已确认并应用放宽变更。" : `[私有] ${result.error}`);
238
+ return;
239
+ }
240
+ renderStrategy(controller, write);
241
+ return;
242
+ }
243
+ case "/approve": {
244
+ renderApproval(await controller.approve(), write);
245
+ return;
246
+ }
247
+ case "/reject": {
248
+ const result = await controller.reject(undefined, arg === "" ? undefined : arg);
249
+ write(result.ok ? "[私有] 已驳回当前候选,本轮不会提交。" : `[私有] ${result.error}`);
250
+ return;
251
+ }
252
+ case "/revise": {
253
+ renderPrepare(controller, await controller.revise(arg), write, theme);
254
+ return;
255
+ }
256
+ case "/pause": {
257
+ await controller.pause();
258
+ write("[私有] 已暂停:不会领取新消息(在途候选仍可处理)。");
259
+ return;
260
+ }
261
+ case "/resume": {
262
+ await controller.resume();
263
+ write("[私有] 已恢复领取消息。");
264
+ return;
265
+ }
266
+ case "/why": {
267
+ renderWhy(controller, write);
268
+ return;
269
+ }
270
+ case "/history": {
271
+ renderHistory(controller, arg, write);
272
+ return;
273
+ }
274
+ case "/usage": {
275
+ renderUsage(controller, write);
276
+ return;
277
+ }
278
+ case "/quit": {
279
+ write("[私有] 正在安全退出…");
280
+ const result = await controller.shutdown();
281
+ if (result.abandoned_candidate !== undefined) {
282
+ write(`[私有] 在途候选 ${result.abandoned_candidate} 已放弃(claim abandoned,未提交)。`);
283
+ }
284
+ write("[私有] 已退出。");
285
+ return;
286
+ }
287
+ case "/help": {
288
+ write(COMMANDS);
289
+ return;
290
+ }
291
+ default:
292
+ write(`[私有] 未知命令 ${command},输入 /help 查看命令。`);
293
+ }
294
+ }
295
+ async function handleLine(controller, line, write, theme) {
296
+ if (line.startsWith("/")) {
297
+ await handleCommand(controller, line, write, theme);
298
+ return;
299
+ }
300
+ const bare = mapBareCommand(line);
301
+ if (bare !== undefined) {
302
+ await handleCommand(controller, bare, write, theme);
303
+ return;
304
+ }
305
+ const result = await controller.sendOperatorMessage(line);
306
+ if (result.kind === "applied") {
307
+ write(`[私有] 策略已应用(${result.patch.kind}):${result.patch.summary}`);
308
+ }
309
+ else if (result.kind === "needs_confirmation") {
310
+ write(`[私有] 该变更放宽约束:${result.patch.summary}`);
311
+ write("[私有] 输入 /strategy confirm 确认应用,或继续输入其他指令忽略。");
312
+ }
313
+ else if (result.patch?.kind === "chat") {
314
+ write(`[私有] 该消息未作为策略指令:${result.reason}`);
315
+ }
316
+ else if (result.patch?.kind === "out_of_scope") {
317
+ write(`[私有] 超出 Kiwi v0.2 能力范围:${result.reason}`);
318
+ }
319
+ else {
320
+ write(`[私有] 已拒绝:${result.reason}`);
321
+ }
322
+ }
323
+ /**
324
+ * Run the TUI loop. Resolves EXIT.OK on /quit or EOF; on EOF without /quit
325
+ * the controller is still shut down safely (pending candidate abandoned).
326
+ */
327
+ export async function runTui(options) {
328
+ const { controller, input, output } = options;
329
+ // Neural Awakening 主题(参照 hermes):非 TTY 时所有样式直通原文。
330
+ const theme = createTheme(output);
331
+ const write = (text) => {
332
+ output.write(`${theme.decorate(text)}\n`);
333
+ };
334
+ renderHeader(controller, write, theme);
335
+ // Initial pull: show the current candidate (supervised never submits here).
336
+ const initial = await controller.prepareNextCandidate();
337
+ if (initial.kind !== "no_work" && initial.kind !== "blocked") {
338
+ renderPrepare(controller, initial, write, theme);
339
+ }
340
+ const rl = readline.createInterface({
341
+ input,
342
+ output,
343
+ terminal: input.isTTY === true,
344
+ prompt: theme.enabled ? theme.paint("kiwi> ", "accent") : "kiwi> ",
345
+ });
346
+ // EOF (Ctrl-D, or an injected stream that ends) closes the interface while
347
+ // the last command is still being awaited; prompting a closed readline
348
+ // throws ERR_USE_AFTER_CLOSE, so track it and skip the re-prompt.
349
+ let rlClosed = false;
350
+ rl.once("close", () => {
351
+ rlClosed = true;
352
+ });
353
+ // 状态栏 + prompt 重绘(TTY-only;非 TTY 零额外字节)。
354
+ const refreshPrompt = () => {
355
+ if (rlClosed)
356
+ return;
357
+ if (theme.enabled) {
358
+ output.write("\r\u001b[K");
359
+ const state = controller.getState();
360
+ const roleLabel = controller.profile.role === "buyer" ? "Buyer" : "Merchant";
361
+ output.write(`${theme.statusBar([
362
+ { text: `Kiwi ${roleLabel}`, color: "primary", bold: true },
363
+ controller.profile.agent_id,
364
+ { text: modeLabel(state.mode), color: modeColor(state.mode) },
365
+ ...(state.paused ? [{ text: "已暂停", color: "warn" }] : []),
366
+ ])}\n`);
367
+ }
368
+ rl.prompt();
369
+ };
370
+ refreshPrompt();
371
+ for await (const rawLine of rl) {
372
+ const line = String(rawLine).trim();
373
+ if (line !== "") {
374
+ await handleLine(controller, line, write, theme);
375
+ }
376
+ if (controller.getState().shutdown)
377
+ break;
378
+ // After each command, surface newly arrived work (never auto-submits in
379
+ // supervised/manual; prepare is a no-op while one candidate is pending).
380
+ if (!controller.getState().paused && controller.getState().approval.kind === "idle") {
381
+ const prepared = await controller.prepareNextCandidate();
382
+ if (prepared.kind !== "no_work" && prepared.kind !== "blocked") {
383
+ renderPrepare(controller, prepared, write, theme);
384
+ }
385
+ }
386
+ if (!rlClosed)
387
+ refreshPrompt();
388
+ }
389
+ rl.close();
390
+ if (!controller.getState().shutdown) {
391
+ await controller.shutdown();
392
+ }
393
+ return EXIT.OK;
394
+ }
395
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/operator/tui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,224 @@
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
+ * Operator control plane types (docs/operator-tui-v0.2.md §5–§10).
18
+ *
19
+ * Three state domains stay separate: the marketplace conversation (owned by
20
+ * shopping-cli), the operator session (this private event stream), and the
21
+ * reasoning session (per-turn, never persisted here). Operator state is
22
+ * derived by folding an append-only event log; nothing here calls HTTP or
23
+ * holds secrets — formal writes stay behind CommerceClient.
24
+ */
25
+ import type { DecisionAction, NegotiationDecision, Role } from "../negotiation/types.js";
26
+ /** Runtime modes (design §9). Default is `supervised`. */
27
+ export type OperatorMode = "autopilot" | "supervised" | "manual";
28
+ export declare const OPERATOR_MODES: readonly OperatorMode[];
29
+ /**
30
+ * Strategy patch risk classes (design §8).
31
+ *
32
+ * `forbidden` attacks a product boundary and is always refused;
33
+ * `out_of_scope` is a task Kiwi v0.2 does not execute (listing/inventory/
34
+ * refunds) — also refused, never applied; `chat` is operator chatter that is
35
+ * not a strategy statement — also refused, never applied. Only tighten /
36
+ * soft_preference / relax shape the effective strategy.
37
+ */
38
+ export type PatchKind = "tighten" | "soft_preference" | "relax" | "forbidden" | "out_of_scope" | "chat";
39
+ /** `turn` directives expire after one candidate settles; `session` persist. */
40
+ export type PatchScope = "session" | "turn";
41
+ /**
42
+ * Structured result of compiling one operator message. The raw text never
43
+ * enters the negotiation prompt directly; only the classified patch is kept.
44
+ */
45
+ export interface StrategyPatch {
46
+ kind: PatchKind;
47
+ scope: PatchScope;
48
+ /** One-line operator-facing summary of what was understood. */
49
+ summary: string;
50
+ /** Normalized directive text, kept private and applied to future turns. */
51
+ directive: string;
52
+ /** relax patches never apply without an explicit second confirmation. */
53
+ requires_confirmation: boolean;
54
+ /** Deterministic rule ids that produced this classification (for /why). */
55
+ matched_rules: string[];
56
+ }
57
+ /** Patch kinds that may end up in the effective strategy (never-applied kinds excluded). */
58
+ export type AppliedPatchKind = Exclude<PatchKind, "forbidden" | "out_of_scope" | "chat">;
59
+ /** An applied strategy directive inside the effective strategy. */
60
+ export interface StrategyDirective {
61
+ kind: AppliedPatchKind;
62
+ scope: PatchScope;
63
+ directive: string;
64
+ summary: string;
65
+ applied_at: string;
66
+ }
67
+ /**
68
+ * The compiled session view: applied directives plus at most one relax patch
69
+ * awaiting explicit confirmation. HardPolicy (profile buyer_policy /
70
+ * merchant_policy) is NOT here — it lives in the profile and can never be
71
+ * widened by a patch.
72
+ */
73
+ export interface EffectiveStrategy {
74
+ version: 1;
75
+ directives: StrategyDirective[];
76
+ /** relax patch waiting for the operator's explicit confirmation. */
77
+ pending_relax?: StrategyPatch;
78
+ }
79
+ /** Approval-gate routing for a generated candidate (design §9). */
80
+ export type CandidateRoute = "auto_submit" | "await_approval" | "advice_only";
81
+ export type CandidateStatus = "awaiting_approval" | "advice_only" | "approved" | "submitted" | "settled" | "rejected" | "superseded" | "expired";
82
+ /** Claim binding a candidate replies to; re-validated before any submit. */
83
+ export interface CandidateBinding {
84
+ conversation_id: string;
85
+ message_id: number;
86
+ idempotency_key: string;
87
+ }
88
+ /**
89
+ * An untrusted decision candidate. In supervised mode it is never submitted
90
+ * before `/approve`; in manual mode it is advice only. `decision.public_message`
91
+ * is the 公开草稿 (public draft) shown to the operator.
92
+ */
93
+ export interface Candidate {
94
+ candidate_id: string;
95
+ binding: CandidateBinding;
96
+ decision: NegotiationDecision;
97
+ /** Concise decision-summary lines — never raw chain-of-thought. */
98
+ analysis: string[];
99
+ route: CandidateRoute;
100
+ status: CandidateStatus;
101
+ created_at: string;
102
+ }
103
+ /** Approval sub-state of the operator session (design §10, reduced). */
104
+ export type ApprovalState = {
105
+ kind: "idle";
106
+ } | {
107
+ kind: "awaiting_approval";
108
+ candidate_id: string;
109
+ } | {
110
+ kind: "advice_ready";
111
+ candidate_id: string;
112
+ };
113
+ /** Event visibility (design §6). Private events never leave this process. */
114
+ export type EventVisibility = "private" | "public_draft" | "public_sent";
115
+ interface OperatorEventBase {
116
+ event_id: string;
117
+ occurred_at: string;
118
+ agent_id: string;
119
+ role: Role;
120
+ visibility: EventVisibility;
121
+ /** Operator identity source, e.g. "local_tui". */
122
+ origin: string;
123
+ }
124
+ /** Append-only operator event stream (design §6). */
125
+ export type OperatorEvent = OperatorEventBase & ({
126
+ type: "operator.message";
127
+ payload: {
128
+ text: string;
129
+ };
130
+ } | {
131
+ type: "strategy.patch.proposed";
132
+ payload: {
133
+ patch: StrategyPatch;
134
+ };
135
+ } | {
136
+ type: "strategy.patch.applied";
137
+ payload: {
138
+ patch: StrategyPatch;
139
+ };
140
+ } | {
141
+ type: "strategy.patch.rejected";
142
+ payload: {
143
+ patch: StrategyPatch;
144
+ reason: string;
145
+ };
146
+ } | {
147
+ type: "mode.changed";
148
+ payload: {
149
+ from: OperatorMode;
150
+ to: OperatorMode;
151
+ };
152
+ } | {
153
+ type: "negotiation.paused";
154
+ payload: {
155
+ reason?: string;
156
+ };
157
+ } | {
158
+ type: "negotiation.resumed";
159
+ payload: {
160
+ reason?: string;
161
+ };
162
+ } | {
163
+ type: "candidate.generated";
164
+ payload: {
165
+ candidate: Candidate;
166
+ };
167
+ } | {
168
+ type: "candidate.approved";
169
+ payload: {
170
+ candidate_id: string;
171
+ };
172
+ } | {
173
+ type: "candidate.rejected";
174
+ payload: {
175
+ candidate_id: string;
176
+ reason?: string;
177
+ };
178
+ } | {
179
+ type: "candidate.revised";
180
+ payload: {
181
+ candidate_id: string;
182
+ instruction: string;
183
+ };
184
+ } | {
185
+ type: "decision.submitted";
186
+ payload: {
187
+ candidate_id: string;
188
+ action: DecisionAction;
189
+ policy_result: string;
190
+ message_id?: number;
191
+ };
192
+ } | {
193
+ type: "turn.settled";
194
+ payload: {
195
+ candidate_id: string;
196
+ settlement: "completed" | "failed" | "abandoned";
197
+ reason?: string;
198
+ };
199
+ });
200
+ export type OperatorEventType = OperatorEvent["type"];
201
+ /** Counters surfaced by `/usage`. Model tokens are backend-dependent. */
202
+ export interface OperatorStats {
203
+ operator_messages: number;
204
+ patches_applied: number;
205
+ patches_rejected: number;
206
+ candidates_generated: number;
207
+ decisions_submitted: number;
208
+ approvals: number;
209
+ rejections: number;
210
+ revisions: number;
211
+ }
212
+ /** The reduced operator session, rebuilt by folding the event stream. */
213
+ export interface OperatorState {
214
+ started: boolean;
215
+ shutdown: boolean;
216
+ mode: OperatorMode;
217
+ paused: boolean;
218
+ strategy: EffectiveStrategy;
219
+ approval: ApprovalState;
220
+ candidates: Map<string, Candidate>;
221
+ stats: OperatorStats;
222
+ event_count: number;
223
+ }
224
+ export {};
@@ -0,0 +1,17 @@
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 const OPERATOR_MODES = ["autopilot", "supervised", "manual"];
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/operator/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,MAAM,CAAC,MAAM,cAAc,GAA4B,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC"}