@moltzap/client 2026.529.0 → 2026.717.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 (363) hide show
  1. package/dist/agent-client.d.ts +2 -65
  2. package/dist/agent-client.d.ts.map +1 -1
  3. package/dist/agent-client.js +1 -286
  4. package/dist/agent-client.js.map +1 -1
  5. package/dist/app-client.d.ts +3 -0
  6. package/dist/app-client.d.ts.map +1 -0
  7. package/dist/app-client.js +2 -0
  8. package/dist/app-client.js.map +1 -0
  9. package/dist/auth.d.ts +6 -15
  10. package/dist/auth.d.ts.map +1 -1
  11. package/dist/auth.js +12 -16
  12. package/dist/auth.js.map +1 -1
  13. package/dist/channel-base/format-cross-conv.d.ts +10 -15
  14. package/dist/channel-base/format-cross-conv.d.ts.map +1 -1
  15. package/dist/channel-base/format-cross-conv.js +10 -15
  16. package/dist/channel-base/format-cross-conv.js.map +1 -1
  17. package/dist/channel-base/format-group-block.d.ts +8 -10
  18. package/dist/channel-base/format-group-block.d.ts.map +1 -1
  19. package/dist/channel-base/format-group-block.js +8 -10
  20. package/dist/channel-base/format-group-block.js.map +1 -1
  21. package/dist/channel-base/index.d.ts +3 -62
  22. package/dist/channel-base/index.d.ts.map +1 -1
  23. package/dist/channel-base/index.js +2 -65
  24. package/dist/channel-base/index.js.map +1 -1
  25. package/dist/channel-base/lease-guard.d.ts +0 -2
  26. package/dist/channel-base/lease-guard.d.ts.map +1 -1
  27. package/dist/channel-base/lease-guard.js +0 -2
  28. package/dist/channel-base/lease-guard.js.map +1 -1
  29. package/dist/channel-base/lease-store.d.ts +2 -3
  30. package/dist/channel-base/lease-store.d.ts.map +1 -1
  31. package/dist/channel-base/lease-store.js +2 -3
  32. package/dist/channel-base/lease-store.js.map +1 -1
  33. package/dist/channel-base/lease.d.ts +25 -31
  34. package/dist/channel-base/lease.d.ts.map +1 -1
  35. package/dist/channel-base/lease.js +29 -45
  36. package/dist/channel-base/lease.js.map +1 -1
  37. package/dist/channel-core-enrichment.d.ts +1 -1
  38. package/dist/channel-core-enrichment.d.ts.map +1 -1
  39. package/dist/channel-core-test-support.d.ts +17 -11
  40. package/dist/channel-core-test-support.d.ts.map +1 -1
  41. package/dist/channel-core-test-support.js +5 -6
  42. package/dist/channel-core-test-support.js.map +1 -1
  43. package/dist/channel-core.d.ts +24 -29
  44. package/dist/channel-core.d.ts.map +1 -1
  45. package/dist/channel-core.js +18 -42
  46. package/dist/channel-core.js.map +1 -1
  47. package/dist/cli/commands/agents.d.ts +3 -6
  48. package/dist/cli/commands/agents.d.ts.map +1 -1
  49. package/dist/cli/commands/agents.js +14 -50
  50. package/dist/cli/commands/agents.js.map +1 -1
  51. package/dist/cli/commands/contacts.d.ts +5 -6
  52. package/dist/cli/commands/contacts.d.ts.map +1 -1
  53. package/dist/cli/commands/contacts.js +15 -43
  54. package/dist/cli/commands/contacts.js.map +1 -1
  55. package/dist/cli/commands/conversations.d.ts +8 -18
  56. package/dist/cli/commands/conversations.d.ts.map +1 -1
  57. package/dist/cli/commands/conversations.js +14 -65
  58. package/dist/cli/commands/conversations.js.map +1 -1
  59. package/dist/cli/commands/messages.d.ts +13 -35
  60. package/dist/cli/commands/messages.d.ts.map +1 -1
  61. package/dist/cli/commands/messages.js +21 -46
  62. package/dist/cli/commands/messages.js.map +1 -1
  63. package/dist/cli/commands/register.d.ts +10 -12
  64. package/dist/cli/commands/register.d.ts.map +1 -1
  65. package/dist/cli/commands/register.js +47 -133
  66. package/dist/cli/commands/register.js.map +1 -1
  67. package/dist/cli/commands/send.d.ts +23 -36
  68. package/dist/cli/commands/send.d.ts.map +1 -1
  69. package/dist/cli/commands/send.js +25 -72
  70. package/dist/cli/commands/send.js.map +1 -1
  71. package/dist/cli/commands/start.d.ts +10 -124
  72. package/dist/cli/commands/start.d.ts.map +1 -1
  73. package/dist/cli/commands/start.js +28 -510
  74. package/dist/cli/commands/start.js.map +1 -1
  75. package/dist/cli/commands/status.d.ts +1 -1
  76. package/dist/cli/commands/status.d.ts.map +1 -1
  77. package/dist/cli/commands/status.js +8 -9
  78. package/dist/cli/commands/status.js.map +1 -1
  79. package/dist/cli/commands/test-transport.d.ts +12 -5
  80. package/dist/cli/commands/test-transport.d.ts.map +1 -1
  81. package/dist/cli/commands/test-transport.js +15 -15
  82. package/dist/cli/commands/test-transport.js.map +1 -1
  83. package/dist/cli/index.js +13 -40
  84. package/dist/cli/index.js.map +1 -1
  85. package/dist/cli/output.d.ts +4 -0
  86. package/dist/cli/output.d.ts.map +1 -0
  87. package/dist/cli/output.js +9 -0
  88. package/dist/cli/output.js.map +1 -0
  89. package/dist/cli/socket-client.d.ts +7 -14
  90. package/dist/cli/socket-client.d.ts.map +1 -1
  91. package/dist/cli/socket-client.js +15 -38
  92. package/dist/cli/socket-client.js.map +1 -1
  93. package/dist/cli/transport.d.ts +53 -116
  94. package/dist/cli/transport.d.ts.map +1 -1
  95. package/dist/cli/transport.js +45 -295
  96. package/dist/cli/transport.js.map +1 -1
  97. package/dist/config.d.ts +24 -0
  98. package/dist/config.d.ts.map +1 -0
  99. package/dist/config.js +35 -0
  100. package/dist/config.js.map +1 -0
  101. package/dist/config.test-utils.d.ts +13 -0
  102. package/dist/config.test-utils.d.ts.map +1 -0
  103. package/dist/config.test-utils.js +46 -0
  104. package/dist/config.test-utils.js.map +1 -0
  105. package/dist/index.d.ts +3 -8
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +2 -12
  108. package/dist/index.js.map +1 -1
  109. package/dist/local-daemon-rpc.d.ts +259 -8
  110. package/dist/local-daemon-rpc.d.ts.map +1 -1
  111. package/dist/local-daemon-rpc.js +189 -12
  112. package/dist/local-daemon-rpc.js.map +1 -1
  113. package/dist/{runtime/local-history.d.ts → local-history.d.ts} +16 -21
  114. package/dist/local-history.d.ts.map +1 -0
  115. package/dist/{runtime/local-history.js → local-history.js} +16 -21
  116. package/dist/local-history.js.map +1 -0
  117. package/dist/local-paths.d.ts +0 -2
  118. package/dist/local-paths.d.ts.map +1 -1
  119. package/dist/local-paths.js +0 -4
  120. package/dist/local-paths.js.map +1 -1
  121. package/dist/local-socket-server.d.ts +22 -0
  122. package/dist/local-socket-server.d.ts.map +1 -0
  123. package/dist/{runtime/local-socket-server.js → local-socket-server.js} +4 -9
  124. package/dist/local-socket-server.js.map +1 -0
  125. package/dist/message-rendering.d.ts +3 -0
  126. package/dist/message-rendering.d.ts.map +1 -0
  127. package/dist/message-rendering.js +7 -0
  128. package/dist/message-rendering.js.map +1 -0
  129. package/dist/notification/__tests__/{snapshot-semantics.types-check.d.ts → subscribe-signatures.types-check.d.ts} +1 -1
  130. package/dist/notification/__tests__/subscribe-signatures.types-check.d.ts.map +1 -0
  131. package/dist/notification/__tests__/subscribe-signatures.types-check.js +55 -0
  132. package/dist/notification/__tests__/subscribe-signatures.types-check.js.map +1 -0
  133. package/dist/notification/errors.d.ts +18 -6
  134. package/dist/notification/errors.d.ts.map +1 -1
  135. package/dist/notification/errors.js +13 -15
  136. package/dist/notification/errors.js.map +1 -1
  137. package/dist/notification/index.d.ts +5 -0
  138. package/dist/notification/index.d.ts.map +1 -0
  139. package/dist/notification/index.js +5 -0
  140. package/dist/notification/index.js.map +1 -0
  141. package/dist/notification/stream.d.ts +33 -49
  142. package/dist/notification/stream.d.ts.map +1 -1
  143. package/dist/notification/stream.js +33 -76
  144. package/dist/notification/stream.js.map +1 -1
  145. package/dist/pagination.d.ts +20 -10
  146. package/dist/pagination.d.ts.map +1 -1
  147. package/dist/pagination.js +8 -9
  148. package/dist/pagination.js.map +1 -1
  149. package/dist/profile.d.ts +92 -0
  150. package/dist/profile.d.ts.map +1 -0
  151. package/dist/profile.js +149 -0
  152. package/dist/profile.js.map +1 -0
  153. package/dist/refs.d.ts.map +1 -0
  154. package/dist/refs.js.map +1 -0
  155. package/dist/service-archive-purge.d.ts +2 -1
  156. package/dist/service-archive-purge.d.ts.map +1 -1
  157. package/dist/service-archive-purge.js.map +1 -1
  158. package/dist/{runtime/service-helpers.d.ts → service-helpers.d.ts} +5 -11
  159. package/dist/service-helpers.d.ts.map +1 -0
  160. package/dist/{runtime/service-helpers.js → service-helpers.js} +2 -9
  161. package/dist/service-helpers.js.map +1 -0
  162. package/dist/service-local-daemon.d.ts +22 -0
  163. package/dist/service-local-daemon.d.ts.map +1 -0
  164. package/dist/service-local-daemon.js +185 -0
  165. package/dist/service-local-daemon.js.map +1 -0
  166. package/dist/service.d.ts +65 -57
  167. package/dist/service.d.ts.map +1 -1
  168. package/dist/service.js +205 -156
  169. package/dist/service.js.map +1 -1
  170. package/dist/test-utils/channel-service-fixture.d.ts +3 -2
  171. package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
  172. package/dist/test-utils/channel-service-fixture.js.map +1 -1
  173. package/dist/test-utils/fake-service.d.ts +26 -18
  174. package/dist/test-utils/fake-service.d.ts.map +1 -1
  175. package/dist/test-utils/fake-service.js +28 -42
  176. package/dist/test-utils/fake-service.js.map +1 -1
  177. package/dist/test-utils/ids.d.ts +3 -1
  178. package/dist/test-utils/ids.d.ts.map +1 -1
  179. package/dist/test-utils/ids.js.map +1 -1
  180. package/dist/test-utils/index.d.ts +9 -2
  181. package/dist/test-utils/index.d.ts.map +1 -1
  182. package/dist/test-utils/index.js +8 -1
  183. package/dist/test-utils/index.js.map +1 -1
  184. package/dist/test-utils/standalone-provisioning.d.ts +17 -0
  185. package/dist/test-utils/standalone-provisioning.d.ts.map +1 -0
  186. package/dist/test-utils/standalone-provisioning.js +14 -0
  187. package/dist/test-utils/standalone-provisioning.js.map +1 -0
  188. package/dist/tsconfig.tsbuildinfo +1 -0
  189. package/package.json +39 -17
  190. package/dist/auth.test.d.ts +0 -2
  191. package/dist/auth.test.d.ts.map +0 -1
  192. package/dist/auth.test.js +0 -121
  193. package/dist/auth.test.js.map +0 -1
  194. package/dist/channel-core-context.test.d.ts +0 -2
  195. package/dist/channel-core-context.test.d.ts.map +0 -1
  196. package/dist/channel-core-context.test.js +0 -342
  197. package/dist/channel-core-context.test.js.map +0 -1
  198. package/dist/channel-core-dispatch.test.d.ts +0 -2
  199. package/dist/channel-core-dispatch.test.d.ts.map +0 -1
  200. package/dist/channel-core-dispatch.test.js +0 -557
  201. package/dist/channel-core-dispatch.test.js.map +0 -1
  202. package/dist/channel-core.test.d.ts +0 -2
  203. package/dist/channel-core.test.d.ts.map +0 -1
  204. package/dist/channel-core.test.js +0 -232
  205. package/dist/channel-core.test.js.map +0 -1
  206. package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts +0 -2
  207. package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts.map +0 -1
  208. package/dist/cli/__tests__/cli-multi-agent.int.test.js +0 -132
  209. package/dist/cli/__tests__/cli-multi-agent.int.test.js.map +0 -1
  210. package/dist/cli/commands/invite.d.ts +0 -7
  211. package/dist/cli/commands/invite.d.ts.map +0 -1
  212. package/dist/cli/commands/invite.js +0 -11
  213. package/dist/cli/commands/invite.js.map +0 -1
  214. package/dist/cli/commands/messages.test.d.ts +0 -2
  215. package/dist/cli/commands/messages.test.d.ts.map +0 -1
  216. package/dist/cli/commands/messages.test.js +0 -99
  217. package/dist/cli/commands/messages.test.js.map +0 -1
  218. package/dist/cli/commands/ping.d.ts +0 -7
  219. package/dist/cli/commands/ping.d.ts.map +0 -1
  220. package/dist/cli/commands/ping.js +0 -37
  221. package/dist/cli/commands/ping.js.map +0 -1
  222. package/dist/cli/commands/register.test.d.ts +0 -2
  223. package/dist/cli/commands/register.test.d.ts.map +0 -1
  224. package/dist/cli/commands/register.test.js +0 -91
  225. package/dist/cli/commands/register.test.js.map +0 -1
  226. package/dist/cli/commands/send.test.d.ts +0 -2
  227. package/dist/cli/commands/send.test.d.ts.map +0 -1
  228. package/dist/cli/commands/send.test.js +0 -59
  229. package/dist/cli/commands/send.test.js.map +0 -1
  230. package/dist/cli/commands/start.test.d.ts +0 -2
  231. package/dist/cli/commands/start.test.d.ts.map +0 -1
  232. package/dist/cli/commands/start.test.js +0 -624
  233. package/dist/cli/commands/start.test.js.map +0 -1
  234. package/dist/cli/commands/whoami.d.ts +0 -8
  235. package/dist/cli/commands/whoami.d.ts.map +0 -1
  236. package/dist/cli/commands/whoami.js +0 -28
  237. package/dist/cli/commands/whoami.js.map +0 -1
  238. package/dist/cli/config.d.ts +0 -66
  239. package/dist/cli/config.d.ts.map +0 -1
  240. package/dist/cli/config.js +0 -148
  241. package/dist/cli/config.js.map +0 -1
  242. package/dist/cli/config.test.d.ts +0 -2
  243. package/dist/cli/config.test.d.ts.map +0 -1
  244. package/dist/cli/config.test.js +0 -89
  245. package/dist/cli/config.test.js.map +0 -1
  246. package/dist/cli/http-client.d.ts +0 -17
  247. package/dist/cli/http-client.d.ts.map +0 -1
  248. package/dist/cli/http-client.js +0 -38
  249. package/dist/cli/http-client.js.map +0 -1
  250. package/dist/cli/profile.d.ts +0 -126
  251. package/dist/cli/profile.d.ts.map +0 -1
  252. package/dist/cli/profile.js +0 -231
  253. package/dist/cli/profile.js.map +0 -1
  254. package/dist/cli/profile.test.d.ts +0 -2
  255. package/dist/cli/profile.test.d.ts.map +0 -1
  256. package/dist/cli/profile.test.js +0 -369
  257. package/dist/cli/profile.test.js.map +0 -1
  258. package/dist/cli/transport.test.d.ts +0 -2
  259. package/dist/cli/transport.test.d.ts.map +0 -1
  260. package/dist/cli/transport.test.js +0 -312
  261. package/dist/cli/transport.test.js.map +0 -1
  262. package/dist/notification/__tests__/filter-equivalence.test.d.ts +0 -2
  263. package/dist/notification/__tests__/filter-equivalence.test.d.ts.map +0 -1
  264. package/dist/notification/__tests__/filter-equivalence.test.js +0 -123
  265. package/dist/notification/__tests__/filter-equivalence.test.js.map +0 -1
  266. package/dist/notification/__tests__/snapshot-semantics.test.d.ts +0 -2
  267. package/dist/notification/__tests__/snapshot-semantics.test.d.ts.map +0 -1
  268. package/dist/notification/__tests__/snapshot-semantics.test.js +0 -261
  269. package/dist/notification/__tests__/snapshot-semantics.test.js.map +0 -1
  270. package/dist/notification/__tests__/snapshot-semantics.types-check.d.ts.map +0 -1
  271. package/dist/notification/__tests__/snapshot-semantics.types-check.js +0 -62
  272. package/dist/notification/__tests__/snapshot-semantics.types-check.js.map +0 -1
  273. package/dist/pagination.test.d.ts +0 -2
  274. package/dist/pagination.test.d.ts.map +0 -1
  275. package/dist/pagination.test.js +0 -72
  276. package/dist/pagination.test.js.map +0 -1
  277. package/dist/runtime/close-info.d.ts +0 -84
  278. package/dist/runtime/close-info.d.ts.map +0 -1
  279. package/dist/runtime/close-info.js +0 -102
  280. package/dist/runtime/close-info.js.map +0 -1
  281. package/dist/runtime/close-info.test.d.ts +0 -2
  282. package/dist/runtime/close-info.test.d.ts.map +0 -1
  283. package/dist/runtime/close-info.test.js +0 -109
  284. package/dist/runtime/close-info.test.js.map +0 -1
  285. package/dist/runtime/errors.d.ts +0 -11
  286. package/dist/runtime/errors.d.ts.map +0 -1
  287. package/dist/runtime/errors.js +0 -41
  288. package/dist/runtime/errors.js.map +0 -1
  289. package/dist/runtime/errors.test.d.ts +0 -2
  290. package/dist/runtime/errors.test.d.ts.map +0 -1
  291. package/dist/runtime/errors.test.js +0 -79
  292. package/dist/runtime/errors.test.js.map +0 -1
  293. package/dist/runtime/frame.d.ts +0 -8
  294. package/dist/runtime/frame.d.ts.map +0 -1
  295. package/dist/runtime/frame.js +0 -12
  296. package/dist/runtime/frame.js.map +0 -1
  297. package/dist/runtime/frame.test.d.ts +0 -2
  298. package/dist/runtime/frame.test.d.ts.map +0 -1
  299. package/dist/runtime/frame.test.js +0 -59
  300. package/dist/runtime/frame.test.js.map +0 -1
  301. package/dist/runtime/index.d.ts +0 -10
  302. package/dist/runtime/index.d.ts.map +0 -1
  303. package/dist/runtime/index.js +0 -9
  304. package/dist/runtime/index.js.map +0 -1
  305. package/dist/runtime/local-history.d.ts.map +0 -1
  306. package/dist/runtime/local-history.js.map +0 -1
  307. package/dist/runtime/local-service-commands.d.ts +0 -26
  308. package/dist/runtime/local-service-commands.d.ts.map +0 -1
  309. package/dist/runtime/local-service-commands.js +0 -29
  310. package/dist/runtime/local-service-commands.js.map +0 -1
  311. package/dist/runtime/local-socket-server.d.ts +0 -20
  312. package/dist/runtime/local-socket-server.d.ts.map +0 -1
  313. package/dist/runtime/local-socket-server.js.map +0 -1
  314. package/dist/runtime/refs.d.ts.map +0 -1
  315. package/dist/runtime/refs.js.map +0 -1
  316. package/dist/runtime/runtime.test.d.ts +0 -2
  317. package/dist/runtime/runtime.test.d.ts.map +0 -1
  318. package/dist/runtime/runtime.test.js +0 -37
  319. package/dist/runtime/runtime.test.js.map +0 -1
  320. package/dist/runtime/service-helpers.d.ts.map +0 -1
  321. package/dist/runtime/service-helpers.js.map +0 -1
  322. package/dist/runtime/service-teardown.d.ts +0 -5
  323. package/dist/runtime/service-teardown.d.ts.map +0 -1
  324. package/dist/runtime/service-teardown.js +0 -36
  325. package/dist/runtime/service-teardown.js.map +0 -1
  326. package/dist/runtime/service-teardown.test.d.ts +0 -2
  327. package/dist/runtime/service-teardown.test.d.ts.map +0 -1
  328. package/dist/runtime/service-teardown.test.js +0 -80
  329. package/dist/runtime/service-teardown.test.js.map +0 -1
  330. package/dist/runtime/subscribers.d.ts +0 -152
  331. package/dist/runtime/subscribers.d.ts.map +0 -1
  332. package/dist/runtime/subscribers.js +0 -222
  333. package/dist/runtime/subscribers.js.map +0 -1
  334. package/dist/service-socket-path.test.d.ts +0 -2
  335. package/dist/service-socket-path.test.d.ts.map +0 -1
  336. package/dist/service-socket-path.test.js +0 -87
  337. package/dist/service-socket-path.test.js.map +0 -1
  338. package/dist/service.test.d.ts +0 -2
  339. package/dist/service.test.d.ts.map +0 -1
  340. package/dist/service.test.js +0 -796
  341. package/dist/service.test.js.map +0 -1
  342. package/dist/test/index.d.ts +0 -47
  343. package/dist/test/index.d.ts.map +0 -1
  344. package/dist/test/index.js +0 -39
  345. package/dist/test/index.js.map +0 -1
  346. package/dist/test-utils/conformance-adapter.d.ts +0 -40
  347. package/dist/test-utils/conformance-adapter.d.ts.map +0 -1
  348. package/dist/test-utils/conformance-adapter.js +0 -250
  349. package/dist/test-utils/conformance-adapter.js.map +0 -1
  350. package/dist/tm-client-test-support.d.ts +0 -184
  351. package/dist/tm-client-test-support.d.ts.map +0 -1
  352. package/dist/tm-client-test-support.js +0 -466
  353. package/dist/tm-client-test-support.js.map +0 -1
  354. package/dist/tm-client.d.ts +0 -269
  355. package/dist/tm-client.d.ts.map +0 -1
  356. package/dist/tm-client.js +0 -518
  357. package/dist/tm-client.js.map +0 -1
  358. package/dist/tm-client.test.d.ts +0 -2
  359. package/dist/tm-client.test.d.ts.map +0 -1
  360. package/dist/tm-client.test.js +0 -490
  361. package/dist/tm-client.test.js.map +0 -1
  362. /package/dist/{runtime/refs.d.ts → refs.d.ts} +0 -0
  363. /package/dist/{runtime/refs.js → refs.js} +0 -0
@@ -1,512 +1,35 @@
1
- /* eslint-disable jsdoc/text-escaping -- mermaid sequenceDiagram blocks need literal `<br>` (HTML5) for renderer compatibility; the escape would render as literal text. */
2
- /**
3
- * `moltzap start &lt;name> &lt;participant>... [--message &lt;text>] [--app-id &lt;uuid>]`
4
- *
5
- * Single-command composition over the protocol's atomic
6
- * `TaskRequest({ appId, invitedAgentIds, initialConversation })` plus
7
- * an optional follow-up `MessagesSend`. Replaces the legacy two-step
8
- * `conversations create` -> `send conv:&lt;id> &lt;text>` workflow for the
9
- * common case. DM-vs-Group is implicit from participant count.
10
- *
11
- * ```mermaid
12
- * sequenceDiagram
13
- * participant shell
14
- * participant cli as effect-cli
15
- * participant start as startCommandHandler
16
- * participant tx as transport.rpc
17
- *
18
- * shell->>cli: moltzap start &lt;name> agent:bob ... [--message] [--app-id]
19
- * cli->>start: StartCommandArgs
20
- * Note over start: 1. validateAppId — bad UUID → exit 64
21
- * Note over start: 2. resolveAgentTokens — classify each token<br>UUID short-circuits, names batch into ONE AgentsLookupByName call
22
- * start->>tx: rpc(AgentsLookupByName, {names})
23
- * tx-->>start: {agents}
24
- * Note over start: unresolved → exit 64
25
- * start->>tx: rpc(TaskRequest, {appId, invitedAgentIds, initialConversation})
26
- * tx-->>start: {task, conversation | null}
27
- * alt conversation present (fresh create)
28
- * Note over start: stdout — Task started — taskId — convId
29
- * else conversation null (dedup hit)
30
- * start->>tx: rpc(TaskConversationList) — follow nextCursor
31
- * tx-->>start: items
32
- * Note over start: findReusableConversation — first non-archived under existing taskId
33
- * alt found
34
- * Note over start: stdout — Task started — reusing existing conversation
35
- * else none usable
36
- * Note over start: stderr — task closed — exit 1
37
- * end
38
- * end
39
- * opt --message
40
- * start->>tx: rpc(MessagesSend, {conversationId, parts})
41
- * alt success
42
- * Note over start: stdout — Message sent — exit 0
43
- * else failure
44
- * Note over start: stderr — Error sending message — exit 2
45
- * end
46
- * end
47
- * ```
48
- *
49
- * **Exit-code contract** — keyed on the stage where the error arose:
50
- *
51
- * | Code | Meaning | Stdout | Stderr |
52
- * |------|--------------------------------------------------------------|-----------------------------------------|----------------------------------------|
53
- * | 0 | Full success (fresh create or dedup reuse) | `Task started: ...` (+ `Message sent`) | empty |
54
- * | 1 | `TaskRequest` wire failure OR dedup hit on closed/unreachable | empty | `Failed: ...` / `Task already exists` |
55
- * | 2 | `TaskRequest` OK, `MessagesSend` failed | `Task started: ...` | `Error sending message: ...` |
56
- * | 64 | Usage error: bad `--app-id` UUID, unresolvable agent token, OR more than 100 distinct name tokens | empty | `Invalid --app-id` / `Cannot resolve "..."` |
57
- *
58
- * Exit 64 matches POSIX `EX_USAGE`. NO rollback on exit 2 — the task
59
- * + empty conversation persist; the user can retry
60
- * `moltzap send conv:&lt;id> &lt;text>`.
61
- *
62
- * The exit-code partition is split:
63
- *
64
- * - `runStartCommand` (outer `Effect.catchAll`) pattern-matches
65
- * `StartCommandError` `_tag` and dispatches to 1 or 64.
66
- * - Inline `process.exit(2)` lives in the handler body for the
67
- * post-`TaskRequest` `MessagesSend` failure. This path cannot route
68
- * through `runStartCommand` because the stdout `Task started: ...`
69
- * line has already been printed; re-throwing would discard it from
70
- * the user's view. The handler uses
71
- * `Effect.either(rpc(MessagesSend, ...))` + `Effect.sync(() => { ...
72
- * process.exit(2) })`.
73
- *
74
- * **Dedup branch** — when `appId === DEFAULT_APP_ID` and the caller
75
- * already owns a task with the exact same `{caller} ∪ invitedAgentIds`
76
- * set, the server returns `{ task, conversation: null }`.
77
- * `handleDedupOutcome` calls `TaskConversationList` (with cursor
78
- * follow capped at `DEDUP_LOOKUP_MAX_PAGES`) and runs
79
- * `findReusableConversation` to find a non-archived conversation
80
- * under the existing task. Found → reuse stdout line; not found →
81
- * closed-task diagnostic + exit 1.
82
- *
83
- * **Zero-participant carve-out** — when `invitedAgentIds === []`, the
84
- * caller-only task path MUST omit `participants` from
85
- * `initialConversation` entirely because
86
- * `InitialConversationSchema.participants` rejects `[]`. The server
87
- * adds the caller to both `task_participants` and
88
- * `conversation_participants` implicitly.
89
- *
90
- * **Why this doesn't reuse `socket-client.ts → resolveParticipant`** —
91
- * that helper hard-wires the daemon-socket path
92
- * (`socket-client.ts → request`), bypassing the CLI `Transport`
93
- * service that `start.ts` uses for `TaskRequest` / `MessagesSend`.
94
- * Mixing the two would make `--as`-mode name lookups hit the daemon
95
- * (potentially absent) and would not be testable via
96
- * `makeFakeTransport`. The local `resolveAgentTokens` goes through
97
- * `transport.ts → rpc` instead and coalesces all name-shaped tokens
98
- * into ONE batched `AgentsLookupByName` call.
99
- *
100
- * Sibling: `packages/protocol/src/task/tasks.ts → TaskRequest` /
101
- * `DEFAULT_APP_ID` / `AppId` — the wire surface this command
102
- * composes. `commands/conversations.ts → createConversation` — the
103
- * legacy two-step path D2 replaces (untouched here; D3 deletes it).
104
- */
105
1
  import { Args, Command, Options } from "@effect/cli";
106
- import { Data, Effect, Either, Option } from "effect";
107
- import { AgentsLookupByName, DEFAULT_APP_ID, MessagesSend, TaskConversationList, TaskRequest, } from "@moltzap/protocol";
108
- import { rpc } from "../transport.js";
109
- // ─── Exit-code contract (spec D2 Goal 5 + Goal 7) ─────────────────────────
110
- /**
111
- * Exit-code table for the `moltzap start` command. Values are documented
112
- * in `Command.withDescription` help text below; the handler branches on
113
- * these via `runStartCommand` and inline `process.exit` in the
114
- * partial-success path.
115
- */
2
+ import { Effect, Option } from "effect";
3
+ import { AppIdV4, LocalDaemonCommands, StartParticipant, StartTaskPartialFailure, StartTaskUsageError, } from "../../local-daemon-rpc.js";
4
+ import { command } from "../transport.js";
116
5
  const EXIT_CODES = {
117
6
  SUCCESS: 0,
118
7
  TASK_CREATE_FAILED: 1,
119
8
  PARTIAL_SUCCESS: 2,
120
9
  USAGE_ERROR: 64,
121
10
  };
122
- // ─── Tagged errors (CLI-local) ────────────────────────────────────────────
123
- /**
124
- * `--app-id &lt;value>` failed syntactic UUID v4 validation before any RPC.
125
- * Maps to `EXIT_CODES.USAGE_ERROR`; stderr prints
126
- * `Invalid --app-id: not a UUID`. Local to this module — tests assert
127
- * by exit code + stderr text rather than `expect().toBeInstanceOf(...)`,
128
- * so the class stays unexported per the architect plan.
129
- */
130
- class InvalidAppIdError extends Data.TaggedError("InvalidAppIdError") {
131
- }
132
- /**
133
- * An `agent:&lt;name>` or `agent:&lt;uuid>` participant token could not be
134
- * resolved (name not in the agent roster, or token mis-shaped). Maps
135
- * to `EXIT_CODES.USAGE_ERROR`; stderr names the unresolved token.
136
- *
137
- * Resolver calls `AgentsLookupByName` (a server RPC) for name-shaped
138
- * tokens. That RPC is read-only and does not mutate server state, so
139
- * the partial-failure invariant is unaffected. The spec D2 AC clause
140
- * "NO RPC calls" reads as "NO mutating (TaskRequest / MessagesSend)
141
- * calls" in this plan; see per-flow doc §8 + plan §R5.
142
- */
143
- class UnresolvedParticipantError extends Data.TaggedError("UnresolvedParticipantError") {
144
- }
145
- /**
146
- * Too many DISTINCT name-shaped tokens to batch into one
147
- * `AgentsLookupByName` RPC (schema caps `names` at `maxItems: 100`).
148
- * Maps to `EXIT_CODES.USAGE_ERROR`; stderr names the offending count.
149
- *
150
- * Distinct from `UnresolvedParticipantError` — fires BEFORE any RPC, on
151
- * a count check. Without this carve-out, 101+ unique names would
152
- * trigger an opaque AJV decode failure mapped to exit 1 ("Failed:
153
- * params decode error"); this surfaces it as a usage error instead.
154
- */
155
- class TooManyParticipantNamesError extends Data.TaggedError("TooManyParticipantNamesError") {
156
- }
157
- /**
158
- * Cap pinned to `AgentsLookupByName.params.names: Type.Array(...,
159
- * { maxItems: 100 })`. Drift here vs. the schema causes a confusing
160
- * exit-1 AJV rejection instead of the exit-64 usage error.
161
- */
162
- const MAX_NAME_LOOKUP_BATCH = 100;
163
- // ─── UUID validation ──────────────────────────────────────────────────────
164
- /**
165
- * RFC 4122 UUID v4 regex per plan Invariant 7. The `4` in the third
166
- * group pins the version; the `[89ab]` in the fourth group pins the
167
- * variant. Pre-existing `socket-client.ts -> UUID_RE` accepts any UUID
168
- * version, which would let v3/v5/v7 tokens through; spec D2 Goal 7
169
- * requires v4-specific rejection at exit 64.
170
- */
171
- const UUID_V4_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
172
- const validateAppId = (value) => UUID_V4_RE.test(value)
173
- ? Effect.succeed(value)
174
- : Effect.fail(new InvalidAppIdError({ value }));
175
- // ─── Participant token resolver ───────────────────────────────────────────
176
- const AGENT_TOKEN_PREFIX = "agent:";
177
- const classifyToken = (token) => {
178
- const failShape = Effect.fail(new UnresolvedParticipantError({ token, reason: "shape" }));
179
- if (!token.startsWith(AGENT_TOKEN_PREFIX))
180
- return failShape;
181
- const rest = token.slice(AGENT_TOKEN_PREFIX.length);
182
- if (rest.length === 0)
183
- return failShape;
184
- if (UUID_V4_RE.test(rest)) {
185
- return Effect.succeed({ kind: "uuid", id: rest });
186
- }
187
- return Effect.succeed({ kind: "name", token, name: rest });
188
- };
189
- /**
190
- * Resolve all participant tokens to bare `AgentId`s matching
191
- * `TaskRequest.params.invitedAgentIds: Array(AgentId)` directly (no
192
- * `.map(p => p.id)` step needed).
193
- *
194
- * Failure modes (first in input order wins):
195
- * - Token does not start with `agent:` (or is `agent:` with empty
196
- * name) -> `UnresolvedParticipantError({ reason: "shape" })`.
197
- * - Token is `agent:&lt;name>` and the batched lookup returns no agent
198
- * matching `name` -> `UnresolvedParticipantError({ reason:
199
- * "not-found" })`.
200
- *
201
- * WHY one batched RPC instead of one-per-token: `AgentsLookupByName`
202
- * accepts `names: Array(..., { minItems: 1, maxItems: 100 })`. Coalesce
203
- * unique name-shaped tokens into a single RPC; UUID-shaped tokens skip
204
- * the wire entirely. Resolution map keys on agent name so duplicate
205
- * tokens (`agent:bob agent:bob`) resolve to the same id without
206
- * re-asking the server.
207
- *
208
- * Architect plan §R1 explains why this is a local helper rather than
209
- * reusing `socket-client.ts -> resolveParticipant` (transport mismatch,
210
- * testability, wire-shape match).
211
- */
212
- const uniqueNamesOf = (classified) => Array.from(new Set(classified.flatMap((c) => (c.kind === "name" ? [c.name] : []))));
213
- /**
214
- * Look up `names` in one batched RPC (no-op when empty) and return a
215
- * name→AgentId map keyed by FIRST agent per name. The server's response
216
- * is a flat agents array; mapping by name preserves the pre-P3-2
217
- * tie-break ("first agent wins"). Caps at `MAX_NAME_LOOKUP_BATCH`
218
- * BEFORE the RPC to keep the >100 case as a usage error rather than a
219
- * decode failure.
220
- */
221
- const lookupAgentIdsByName = (names) => Effect.gen(function* () {
222
- const byName = new Map();
223
- if (names.length === 0)
224
- return byName;
225
- if (names.length > MAX_NAME_LOOKUP_BATCH) {
226
- return yield* Effect.fail(new TooManyParticipantNamesError({
227
- count: names.length,
228
- max: MAX_NAME_LOOKUP_BATCH,
229
- }));
230
- }
231
- // Defensive copy: AgentsLookupByName.params.names resolves to
232
- // mutable `string[]` (TypeBox's `Static<Array>`); pass a shallow
233
- // clone so the caller's readonly contract isn't bypassed.
234
- const result = yield* rpc(AgentsLookupByName, { names: [...names] });
235
- for (const agent of result.agents) {
236
- if (!byName.has(agent.name))
237
- byName.set(agent.name, agent.id);
238
- }
239
- return byName;
240
- });
241
- const resolveAgentTokens = (tokens) => Effect.gen(function* () {
242
- const classified = yield* Effect.all(tokens.map(classifyToken));
243
- const agentIdByName = yield* lookupAgentIdsByName(uniqueNamesOf(classified));
244
- // Single for-loop avoids a second `Effect.all` over pure post-batch
245
- // resolution (N extra Effect cells); fail-fast on first miss preserves
246
- // input-order error semantics.
247
- const resolved = [];
248
- for (const entry of classified) {
249
- if (entry.kind === "uuid") {
250
- resolved.push(entry.id);
251
- continue;
252
- }
253
- const id = agentIdByName.get(entry.name);
254
- if (id === undefined) {
255
- return yield* Effect.fail(new UnresolvedParticipantError({
256
- token: entry.token,
257
- reason: "not-found",
258
- }));
259
- }
260
- resolved.push(id);
261
- }
262
- return resolved;
263
- });
264
- // ─── Handler stages ───────────────────────────────────────────────────────
265
- const resolveAppId = (raw) => raw === undefined ? Effect.succeed(DEFAULT_APP_ID) : validateAppId(raw);
266
- const printTaskCreated = (task, conversation) => Effect.sync(() => {
267
- console.log(`Task started: ${task.id} (conversation: ${conversation.id})`);
268
- });
269
- const printTaskReused = (task, conversation) => Effect.sync(() => {
270
- console.log(`Task started: ${task.id} (reusing existing conversation: ${conversation.id})`);
271
- });
272
- const printTaskAlreadyClosed = (taskId) => Effect.sync(() => {
273
- // WHY this single message covers two distinct conditions:
274
- // (a) the existing task has no non-archived conversation, OR
275
- // (b) the dedup-lookup window (1000 rows) did not surface one.
276
- // (b) is rare per the activity-desc server ordering; if a heavy
277
- // user trips it on an active task, the spec D2 amendment N6
278
- // diagnostic is intentionally conservative ("closed") rather than
279
- // claiming false freshness. The follow-up `moltzap conversations
280
- // list` invocation surfaces the real state.
281
- console.error(`Task already exists but is closed: ${taskId}`);
282
- });
283
- const printMessageSent = (messageId) => Effect.sync(() => {
284
- console.log(`Message sent: ${messageId}`);
285
- });
286
- const sendFirstMessage = (taskId, conversationId, text) => Effect.either(rpc(MessagesSend, {
287
- taskId,
288
- conversationId,
289
- parts: [{ type: "text", text }],
290
- })).pipe(Effect.flatMap(Either.match({
291
- onLeft: (err) => Effect.sync(() => {
292
- console.error(`Error sending message: ${err.message}`);
293
- process.exit(EXIT_CODES.PARTIAL_SUCCESS);
294
- }),
295
- onRight: (ok) => printMessageSent(ok.message.id),
296
- })));
297
- const createTaskAtomic = (appId, invitedAgentIds, name) => Effect.gen(function* () {
298
- // Defensive copies: TaskRequest's params type expects mutable arrays
299
- // (TypeBox's Static<Array> resolves to T[], not readonly T[]); pass
300
- // shallow clones so the caller's readonly contract isn't bypassed.
301
- //
302
- // Spec D2 (#599) amendment N7 (zero-participant carve-out):
303
- // `InitialConversationSchema.participants` is `Type.Optional(Type.Array(AgentId,
304
- // { minItems: 1 }))` — an EMPTY array fails server AJV. The
305
- // caller-only path (help text + plan §R4 + `start.test.ts →
306
- // zeroParticipants`) MUST omit `participants` entirely; the server
307
- // adds the caller to `conversation_participants` implicitly. See
308
- // `packages/protocol/src/task/tasks.ts → InitialConversationSchema`.
309
- const initialConversation = invitedAgentIds.length === 0
310
- ? { name }
311
- : { name, participants: [...invitedAgentIds] };
312
- const result = yield* rpc(TaskRequest, {
313
- appId,
314
- invitedAgentIds: [...invitedAgentIds],
315
- initialConversation,
316
- });
317
- if (result.conversation === null) {
318
- // Dedup hit (per `tasks.handlers.ts → maybeTaskCreateDedup`): the
319
- // server matched an existing task by `{caller} ∪ invitedAgentIds`
320
- // and returned it with `conversation: null`. Handler resolves a
321
- // reusable conversation via `findReusableConversation` instead of
322
- // failing.
323
- return { kind: "dedup", task: result.task };
324
- }
325
- return {
326
- kind: "created",
327
- task: result.task,
328
- conversation: result.conversation,
329
- };
330
- });
331
- // ─── Dedup-hit conversation lookup (spec D2 amendment N6) ─────────────────
332
- /**
333
- * Page size + safety cap on `TaskConversationList` follow-up calls. The
334
- * dedup-hit conversation should appear in the first page for any
335
- * recently-touched task (server orders by activity desc, see
336
- * `packages/server/src/task/services/conversation/list-pagination.ts →
337
- * queryConversationListRows`). The cap protects against pathological
338
- * cases where the caller has a very long list and the target task is
339
- * older than the window can see — in which case we surface the closed-
340
- * task diagnostic rather than spin indefinitely.
341
- */
342
- const DEDUP_LOOKUP_PAGE_SIZE = 100;
343
- const DEDUP_LOOKUP_MAX_PAGES = 10;
344
- /**
345
- * P2-A (spec D2 amendment N6) — locate a reusable conversation under a
346
- * dedup-hit task. Tie-break rule: "first match in server iteration
347
- * order" — server sorts by activity desc, so this is equivalent to
348
- * most-recently-active. WHY a small page-count cap: a freshly-touched
349
- * dedup-hit task lives near the top of the activity-sorted list; the
350
- * 1000-row ceiling protects against pathological lists where the
351
- * target is older than the lookup window can see (the closed-task
352
- * diagnostic is the correct fallback per spec D2 amendment N6).
353
- */
354
- /**
355
- * Filter rule for the dedup-hit lookup: (a) the item's `taskId` must
356
- * match the existing task we are reusing (the list is caller-scoped
357
- * across ALL of the caller's tasks, not task-scoped); (b) the
358
- * conversation must be non-archived (server includes archived rows
359
- * unfiltered per `TaskConversationList`'s contract — clients filter
360
- * `archivedAt !== undefined` locally; archived strings are absent
361
- * on the wire when the row is active, never `null`, per
362
- * `ConversationSchema.archivedAt: Type.Optional(DateTimeString)`).
363
- */
364
- const pickReusableFromPage = (items, taskId) => {
365
- const match = items.find((item) => item.taskId === taskId && item.conversation.archivedAt === undefined);
366
- return match === undefined ? null : match.conversation;
367
- };
368
- const findReusableConversation = (taskId) => Effect.gen(function* () {
369
- let cursor = undefined;
370
- for (let page = 0; page < DEDUP_LOOKUP_MAX_PAGES; page++) {
371
- const params = {
372
- limit: DEDUP_LOOKUP_PAGE_SIZE,
373
- };
374
- if (cursor !== undefined)
375
- params.cursor = cursor;
376
- const result = yield* rpc(TaskConversationList, params);
377
- const hit = pickReusableFromPage(result.items, taskId);
378
- if (hit !== null)
379
- return hit;
380
- if (result.nextCursor === undefined)
381
- return null;
382
- cursor = result.nextCursor;
383
- }
384
- return null;
385
- });
386
- /**
387
- * Spec D2 amendment N6 — dedup-hit branch. `TaskConversationList`
388
- * wire failures are captured inline via `Effect.either` (same pattern
389
- * + same reason as `sendFirstMessage`'s partial-success handling)
390
- * because `TaskRequest` already succeeded server-side; routing the
391
- * list error through `runStartCommand`'s `catchAll` would print
392
- * `Failed: &lt;list-error>`, misleading the user into thinking the
393
- * create failed.
394
- */
395
- const onReuseFound = (task, reuse, message) => Effect.zipRight(printTaskReused(task, reuse), Option.match(message, {
396
- onNone: () => Effect.void,
397
- onSome: (m) => sendFirstMessage(task.id, reuse.id, m),
11
+ const startMessage = (outcome) => outcome.reusedConversation
12
+ ? `Task started: ${outcome.taskId} (reusing existing conversation: ${outcome.conversationId})`
13
+ : `Task started: ${outcome.taskId} (conversation: ${outcome.conversationId})`;
14
+ const logStartResult = (result) => Effect.zipRight(Effect.log(startMessage(result)), result.sentMessageId === undefined
15
+ ? Effect.void
16
+ : Effect.log(`Message sent: ${result.sentMessageId}`));
17
+ const startCommandHandler = (args) => command(LocalDaemonCommands.StartTask, {
18
+ name: args.name,
19
+ participants: args.participants,
20
+ ...(args.message === undefined ? {} : { message: args.message }),
21
+ ...(args.appId === undefined ? {} : { appId: args.appId }),
22
+ }).pipe(Effect.flatMap(logStartResult), Effect.withSpan("startCommandHandler"));
23
+ const runStartCommand = (effect) => effect.pipe(Effect.catchTag("StartTaskUsageError", (err) => Effect.logError(err.message).pipe(Effect.zipRight(Effect.sync(() => process.exit(EXIT_CODES.USAGE_ERROR))))), Effect.catchTag("StartTaskPartialFailure", (err) => Effect.zipRight(Effect.log(startMessage(err)), Effect.logError(`Error sending message: ${err.message}`).pipe(Effect.zipRight(Effect.sync(() => process.exit(EXIT_CODES.PARTIAL_SUCCESS)))))), Effect.catchAll((err) => {
24
+ const msg = err.message !== undefined && err.message !== ""
25
+ ? err.message
26
+ : err._tag;
27
+ return Effect.logError(`Failed: ${msg}`).pipe(Effect.zipRight(Effect.sync(() => process.exit(EXIT_CODES.TASK_CREATE_FAILED))));
398
28
  }));
399
- const onReuseNull = (task) => Effect.zipRight(printTaskAlreadyClosed(task.id), Effect.sync(() => {
400
- process.exit(EXIT_CODES.TASK_CREATE_FAILED);
401
- }));
402
- const handleDedupOutcome = (task, message) => Effect.either(findReusableConversation(task.id)).pipe(Effect.flatMap(Either.match({
403
- onLeft: (err) => Effect.sync(() => {
404
- console.error(`Task ${task.id} already exists but reusable-conversation lookup failed: ${err.message}`);
405
- process.exit(EXIT_CODES.TASK_CREATE_FAILED);
406
- }),
407
- onRight: (reuse) => reuse === null
408
- ? onReuseNull(task)
409
- : onReuseFound(task, reuse, message),
410
- })));
411
- // ─── Handler body ─────────────────────────────────────────────────────────
412
- /**
413
- * `moltzap start` handler. Four stages (see per-flow doc 09 §6):
414
- *
415
- * 1. Validate `args.appId` UUID v4 if set; else use `DEFAULT_APP_ID`.
416
- * Failure -> `InvalidAppIdError` -> exit 64 via `runStartCommand`.
417
- * 2. Resolve `args.participants` via `resolveAgentTokens` (single
418
- * batched `AgentsLookupByName` RPC for name-shaped tokens;
419
- * UUID-shaped tokens short-circuit). Any token failure ->
420
- * `UnresolvedParticipantError` -> exit 64.
421
- * 3. `rpc(TaskRequest, { appId, invitedAgentIds, initialConversation })`
422
- * where `initialConversation` carries `participants` ONLY when
423
- * `invitedAgentIds.length > 0` (P2-B). Two success outcomes:
424
- * - `created`: server returned a fresh `conversation`. Print
425
- * `Task started: &lt;taskId> (conversation: &lt;convId>)`.
426
- * - `dedup`: server returned `conversation: null` because
427
- * `{caller} ∪ invitedAgentIds` already owned a task on this
428
- * appId (P2-A). Auto-fetch the most-recently-active non-
429
- * archived conversation under the existing task via
430
- * `findReusableConversation` and print
431
- * `Task started: &lt;taskId> (reusing existing conversation: &lt;convId>)`.
432
- * If no usable conversation exists (closed task, all archived,
433
- * or out of dedup-lookup window), print
434
- * `Task already exists but is closed: &lt;taskId>` to stderr and
435
- * exit 1.
436
- * `TaskRequest` wire failure -> `TransportError` -> exit 1 via
437
- * `runStartCommand`, no stdout.
438
- * 4. If `args.message` is set AND a conversation was produced (either
439
- * kind), call `rpc(MessagesSend, { conversationId, parts: [{ type:
440
- * "text", text }] })` wrapped in `Effect.either`. Success -> print
441
- * `Message sent: &lt;msgId>`, exit 0. Failure -> print
442
- * `Error sending message: &lt;err>` to stderr, exit 2 via inline
443
- * `process.exit` (preserves the already-printed stdout line;
444
- * cannot route through `runStartCommand`).
445
- */
446
- const startCommandHandler = (args) => Effect.gen(function* () {
447
- const appId = yield* resolveAppId(args.appId);
448
- const invitedAgentIds = yield* resolveAgentTokens(args.participants);
449
- const outcome = yield* createTaskAtomic(appId, invitedAgentIds, args.name);
450
- const messageOpt = Option.fromNullable(args.message);
451
- if (outcome.kind === "dedup") {
452
- yield* handleDedupOutcome(outcome.task, messageOpt);
453
- return;
454
- }
455
- yield* printTaskCreated(outcome.task, outcome.conversation);
456
- yield* Option.match(messageOpt, {
457
- onNone: () => Effect.void,
458
- onSome: (m) => sendFirstMessage(outcome.task.id, outcome.conversation.id, m),
459
- });
460
- }).pipe(Effect.withSpan("startCommandHandler"));
461
- // ─── Exit-code dispatcher ─────────────────────────────────────────────────
462
- /**
463
- * Outer adapter that replaces the shared `transport.ts -> runHandler`
464
- * (which collapses every error to exit 1) with a `_tag`-aware mapping
465
- * per the spec D2 exit-code contract:
466
- *
467
- * `InvalidAppIdError` -> 64 + stderr `Invalid --app-id: not a UUID`
468
- * `UnresolvedParticipantError` -> 64 + stderr `Cannot resolve "&lt;token>": &lt;reason>`
469
- * `TooManyParticipantNamesError` -> 64 + stderr `Too many distinct agent names: &lt;count> (max &lt;max>)`
470
- * any other `StartCommandError` -> 1 + stderr `Failed: &lt;err.message>`
471
- *
472
- * The exit-2 partial-success branch runs inline inside
473
- * `startCommandHandler` (after `Task started:` has been printed to
474
- * stdout) and never reaches this adapter — re-throwing the post-
475
- * `TaskRequest` error here would discard the already-printed stdout
476
- * line.
477
- */
478
- const runStartCommand = (effect) => effect.pipe(Effect.catchTag("InvalidAppIdError", () => Effect.sync(() => {
479
- console.error("Invalid --app-id: not a UUID");
480
- process.exit(EXIT_CODES.USAGE_ERROR);
481
- })), Effect.catchTag("UnresolvedParticipantError", (err) => Effect.sync(() => {
482
- console.error(`Cannot resolve "${err.token}": ${err.reason}`);
483
- process.exit(EXIT_CODES.USAGE_ERROR);
484
- })), Effect.catchTag("TooManyParticipantNamesError", (err) => Effect.sync(() => {
485
- console.error(`Too many distinct agent names: ${err.count} (max ${err.max})`);
486
- process.exit(EXIT_CODES.USAGE_ERROR);
487
- })), Effect.catchAll((err) => Effect.sync(() => {
488
- // `Data.TaggedError` populates `message` for every tagged-error
489
- // subclass; `|| err._tag` is a belt-and-suspenders fallback for
490
- // the (impossible-per-Data-contract) empty-message case.
491
- const msg = err.message || err._tag;
492
- console.error(`Failed: ${msg}`);
493
- process.exit(EXIT_CODES.TASK_CREATE_FAILED);
494
- })));
495
- // ─── @effect/cli wiring ───────────────────────────────────────────────────
496
29
  const nameArg = Args.text({ name: "name" }).pipe(Args.withDescription("Conversation name"));
497
- const participantsArg = Args.text({ name: "participant" }).pipe(Args.withDescription("Participant token (e.g. agent:bob or agent:<uuid>). " +
498
- "Zero or more allowed; D2 ACs cover 1 (DM-shape) and >=2 (group-shape)."), Args.repeated);
499
- const messageOption = Options.text("message").pipe(Options.withDescription("First message body. If supplied, MessagesSend runs after the atomic " +
500
- "TaskRequest (separate RPC, not server-atomic)."), Options.optional);
501
- const appIdOption = Options.text("app-id").pipe(Options.withDescription("App UUID v4. Defaults to DEFAULT_APP_ID (D1 #635). Invalid syntax " +
502
- "exits 64 with NO RPC calls (Goal 7)."), Options.optional);
503
- /**
504
- * Test seam: invoke the handler directly with parsed args, bypassing
505
- * `@effect/cli`'s parser. Returns the same `Effect` the `Command.make`
506
- * wrapper would produce, including the `runStartCommand` exit-code
507
- * dispatcher. Tests `Effect.provideService(Transport, fake)` and assert
508
- * `process.exit` was called with the expected code.
509
- */
30
+ const participantsArg = Args.text({ name: "participant" }).pipe(Args.withSchema(StartParticipant), Args.withDescription("Participant token (for example agent:bob)."), Args.repeated);
31
+ const messageOption = Options.text("message").pipe(Options.withDescription("First message body"), Options.optional);
32
+ const appIdOption = Options.text("app-id").pipe(Options.withSchema(AppIdV4), Options.withDescription("App UUID v4. Defaults to the MoltZap app."), Options.optional);
510
33
  export const runStartHandler = (args) => runStartCommand(startCommandHandler(args));
511
34
  export const startCommand = Command.make("start", {
512
35
  name: nameArg,
@@ -518,16 +41,11 @@ export const startCommand = Command.make("start", {
518
41
  participants,
519
42
  message: Option.getOrUndefined(message),
520
43
  appId: Option.getOrUndefined(appId),
521
- })).pipe(Command.withDescription("Start a task with named participants and (optionally) send the " +
522
- "first message in one atomic step. Spec D2 #599 — composes Spec D1 " +
523
- "TaskRequest + MessagesSend.\n" +
524
- "\n" +
525
- "Zero participants creates a caller-only task (rare; usually you " +
526
- "will pass one or more `agent:<name>` tokens).\n" +
44
+ })).pipe(Command.withDescription("Start a task with named participants and optionally send the first message.\n" +
527
45
  "\n" +
528
46
  "Exit codes:\n" +
529
- ` ${EXIT_CODES.SUCCESS} success (TaskRequest + optional MessagesSend resolved)\n` +
530
- ` ${EXIT_CODES.TASK_CREATE_FAILED} TaskRequest failed (stdout empty)\n` +
531
- ` ${EXIT_CODES.PARTIAL_SUCCESS} TaskRequest OK, MessagesSend failed (no rollback)\n` +
532
- ` ${EXIT_CODES.USAGE_ERROR} usage error (bad --app-id UUID, unresolvable agent token, or >${MAX_NAME_LOOKUP_BATCH} distinct name-shaped tokens)`));
47
+ ` ${EXIT_CODES.SUCCESS} success\n` +
48
+ ` ${EXIT_CODES.TASK_CREATE_FAILED} task creation or lookup failed\n` +
49
+ ` ${EXIT_CODES.PARTIAL_SUCCESS} task started, first message failed\n` +
50
+ ` ${EXIT_CODES.USAGE_ERROR} usage error`));
533
51
  //# sourceMappingURL=start.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,5 @@ import { Command } from "@effect/cli";
3
3
  * `moltzap status` — calls the local service's `status` RPC and prints
4
4
  * agent id, live connection state, and conversation count.
5
5
  */
6
- export declare const statusCommand: Command.Command<"status", never, never, {}>;
6
+ export declare const statusCommand: Command.Command<"status", import("../transport.js").Transport, never, {}>;
7
7
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAItC;;;GAGG;AACH,eAAO,MAAM,aAAa,6CAqBzB,CAAC"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAMtC;;;GAGG;AACH,eAAO,MAAM,aAAa,2EAiBzB,CAAC"}
@@ -1,16 +1,15 @@
1
1
  import { Command } from "@effect/cli";
2
2
  import { Effect } from "effect";
3
- import { LocalServiceCommands, requestLocalService } from "../socket-client.js";
3
+ import { LocalDaemonCommands } from "../../local-daemon-rpc.js";
4
+ import { command, runHandler } from "../transport.js";
5
+ import { logLines } from "../output.js";
4
6
  /**
5
7
  * `moltzap status` — calls the local service's `status` RPC and prints
6
8
  * agent id, live connection state, and conversation count.
7
9
  */
8
- export const statusCommand = Command.make("status", {}, () => requestLocalService(LocalServiceCommands.Status).pipe(Effect.tap((result) => Effect.sync(() => {
9
- console.log(`Agent ID: ${result.agentId ?? "none"}`);
10
- console.log(`Connected: ${result.connected}`);
11
- console.log(`Conversations: ${result.conversations}`);
12
- })), Effect.asVoid, Effect.catchAll((err) => Effect.sync(() => {
13
- console.error(`Failed: ${err.message}`);
14
- process.exit(1);
15
- })))).pipe(Command.withDescription("Show agent connection status and conversation summary"));
10
+ export const statusCommand = Command.make("status", {}, () => runHandler(command(LocalDaemonCommands.Status, {}).pipe(Effect.flatMap((result) => logLines([
11
+ `Agent ID: ${result.agentId ?? "none"}`,
12
+ `Connected: ${result.connected}`,
13
+ `Conversations: ${result.conversations}`,
14
+ ])), Effect.asVoid))).pipe(Command.withDescription("Show agent connection status and conversation summary"));
16
15
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAC3D,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,CACnD,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACpB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;IACf,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;AACzD,CAAC,CAAC,CACH,EACD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CACtB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CACH,CACF,CACF,CAAC,IAAI,CACJ,OAAO,CAAC,eAAe,CACrB,uDAAuD,CACxD,CACF,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAC3D,UAAU,CACR,OAAO,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,QAAQ,CAAC;IACP,mBAAmB,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE;IAC7C,mBAAmB,MAAM,CAAC,SAAS,EAAE;IACrC,mBAAmB,MAAM,CAAC,aAAa,EAAE;CAC1C,CAAC,CACH,EACD,MAAM,CAAC,MAAM,CACd,CACF,CACF,CAAC,IAAI,CACJ,OAAO,CAAC,eAAe,CACrB,uDAAuD,CACxD,CACF,CAAC"}