@moltzap/client 2026.528.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 (367) 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 -38
  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/presence.d.ts +0 -11
  223. package/dist/cli/commands/presence.d.ts.map +0 -1
  224. package/dist/cli/commands/presence.js +0 -33
  225. package/dist/cli/commands/presence.js.map +0 -1
  226. package/dist/cli/commands/register.test.d.ts +0 -2
  227. package/dist/cli/commands/register.test.d.ts.map +0 -1
  228. package/dist/cli/commands/register.test.js +0 -91
  229. package/dist/cli/commands/register.test.js.map +0 -1
  230. package/dist/cli/commands/send.test.d.ts +0 -2
  231. package/dist/cli/commands/send.test.d.ts.map +0 -1
  232. package/dist/cli/commands/send.test.js +0 -59
  233. package/dist/cli/commands/send.test.js.map +0 -1
  234. package/dist/cli/commands/start.test.d.ts +0 -2
  235. package/dist/cli/commands/start.test.d.ts.map +0 -1
  236. package/dist/cli/commands/start.test.js +0 -624
  237. package/dist/cli/commands/start.test.js.map +0 -1
  238. package/dist/cli/commands/whoami.d.ts +0 -8
  239. package/dist/cli/commands/whoami.d.ts.map +0 -1
  240. package/dist/cli/commands/whoami.js +0 -28
  241. package/dist/cli/commands/whoami.js.map +0 -1
  242. package/dist/cli/config.d.ts +0 -66
  243. package/dist/cli/config.d.ts.map +0 -1
  244. package/dist/cli/config.js +0 -148
  245. package/dist/cli/config.js.map +0 -1
  246. package/dist/cli/config.test.d.ts +0 -2
  247. package/dist/cli/config.test.d.ts.map +0 -1
  248. package/dist/cli/config.test.js +0 -89
  249. package/dist/cli/config.test.js.map +0 -1
  250. package/dist/cli/http-client.d.ts +0 -17
  251. package/dist/cli/http-client.d.ts.map +0 -1
  252. package/dist/cli/http-client.js +0 -38
  253. package/dist/cli/http-client.js.map +0 -1
  254. package/dist/cli/profile.d.ts +0 -126
  255. package/dist/cli/profile.d.ts.map +0 -1
  256. package/dist/cli/profile.js +0 -231
  257. package/dist/cli/profile.js.map +0 -1
  258. package/dist/cli/profile.test.d.ts +0 -2
  259. package/dist/cli/profile.test.d.ts.map +0 -1
  260. package/dist/cli/profile.test.js +0 -369
  261. package/dist/cli/profile.test.js.map +0 -1
  262. package/dist/cli/transport.test.d.ts +0 -2
  263. package/dist/cli/transport.test.d.ts.map +0 -1
  264. package/dist/cli/transport.test.js +0 -312
  265. package/dist/cli/transport.test.js.map +0 -1
  266. package/dist/notification/__tests__/filter-equivalence.test.d.ts +0 -2
  267. package/dist/notification/__tests__/filter-equivalence.test.d.ts.map +0 -1
  268. package/dist/notification/__tests__/filter-equivalence.test.js +0 -123
  269. package/dist/notification/__tests__/filter-equivalence.test.js.map +0 -1
  270. package/dist/notification/__tests__/snapshot-semantics.test.d.ts +0 -2
  271. package/dist/notification/__tests__/snapshot-semantics.test.d.ts.map +0 -1
  272. package/dist/notification/__tests__/snapshot-semantics.test.js +0 -261
  273. package/dist/notification/__tests__/snapshot-semantics.test.js.map +0 -1
  274. package/dist/notification/__tests__/snapshot-semantics.types-check.d.ts.map +0 -1
  275. package/dist/notification/__tests__/snapshot-semantics.types-check.js +0 -62
  276. package/dist/notification/__tests__/snapshot-semantics.types-check.js.map +0 -1
  277. package/dist/pagination.test.d.ts +0 -2
  278. package/dist/pagination.test.d.ts.map +0 -1
  279. package/dist/pagination.test.js +0 -72
  280. package/dist/pagination.test.js.map +0 -1
  281. package/dist/runtime/close-info.d.ts +0 -84
  282. package/dist/runtime/close-info.d.ts.map +0 -1
  283. package/dist/runtime/close-info.js +0 -102
  284. package/dist/runtime/close-info.js.map +0 -1
  285. package/dist/runtime/close-info.test.d.ts +0 -2
  286. package/dist/runtime/close-info.test.d.ts.map +0 -1
  287. package/dist/runtime/close-info.test.js +0 -109
  288. package/dist/runtime/close-info.test.js.map +0 -1
  289. package/dist/runtime/errors.d.ts +0 -11
  290. package/dist/runtime/errors.d.ts.map +0 -1
  291. package/dist/runtime/errors.js +0 -41
  292. package/dist/runtime/errors.js.map +0 -1
  293. package/dist/runtime/errors.test.d.ts +0 -2
  294. package/dist/runtime/errors.test.d.ts.map +0 -1
  295. package/dist/runtime/errors.test.js +0 -79
  296. package/dist/runtime/errors.test.js.map +0 -1
  297. package/dist/runtime/frame.d.ts +0 -8
  298. package/dist/runtime/frame.d.ts.map +0 -1
  299. package/dist/runtime/frame.js +0 -12
  300. package/dist/runtime/frame.js.map +0 -1
  301. package/dist/runtime/frame.test.d.ts +0 -2
  302. package/dist/runtime/frame.test.d.ts.map +0 -1
  303. package/dist/runtime/frame.test.js +0 -59
  304. package/dist/runtime/frame.test.js.map +0 -1
  305. package/dist/runtime/index.d.ts +0 -10
  306. package/dist/runtime/index.d.ts.map +0 -1
  307. package/dist/runtime/index.js +0 -9
  308. package/dist/runtime/index.js.map +0 -1
  309. package/dist/runtime/local-history.d.ts.map +0 -1
  310. package/dist/runtime/local-history.js.map +0 -1
  311. package/dist/runtime/local-service-commands.d.ts +0 -26
  312. package/dist/runtime/local-service-commands.d.ts.map +0 -1
  313. package/dist/runtime/local-service-commands.js +0 -29
  314. package/dist/runtime/local-service-commands.js.map +0 -1
  315. package/dist/runtime/local-socket-server.d.ts +0 -20
  316. package/dist/runtime/local-socket-server.d.ts.map +0 -1
  317. package/dist/runtime/local-socket-server.js.map +0 -1
  318. package/dist/runtime/refs.d.ts.map +0 -1
  319. package/dist/runtime/refs.js.map +0 -1
  320. package/dist/runtime/runtime.test.d.ts +0 -2
  321. package/dist/runtime/runtime.test.d.ts.map +0 -1
  322. package/dist/runtime/runtime.test.js +0 -37
  323. package/dist/runtime/runtime.test.js.map +0 -1
  324. package/dist/runtime/service-helpers.d.ts.map +0 -1
  325. package/dist/runtime/service-helpers.js.map +0 -1
  326. package/dist/runtime/service-teardown.d.ts +0 -5
  327. package/dist/runtime/service-teardown.d.ts.map +0 -1
  328. package/dist/runtime/service-teardown.js +0 -36
  329. package/dist/runtime/service-teardown.js.map +0 -1
  330. package/dist/runtime/service-teardown.test.d.ts +0 -2
  331. package/dist/runtime/service-teardown.test.d.ts.map +0 -1
  332. package/dist/runtime/service-teardown.test.js +0 -80
  333. package/dist/runtime/service-teardown.test.js.map +0 -1
  334. package/dist/runtime/subscribers.d.ts +0 -152
  335. package/dist/runtime/subscribers.d.ts.map +0 -1
  336. package/dist/runtime/subscribers.js +0 -222
  337. package/dist/runtime/subscribers.js.map +0 -1
  338. package/dist/service-socket-path.test.d.ts +0 -2
  339. package/dist/service-socket-path.test.d.ts.map +0 -1
  340. package/dist/service-socket-path.test.js +0 -87
  341. package/dist/service-socket-path.test.js.map +0 -1
  342. package/dist/service.test.d.ts +0 -2
  343. package/dist/service.test.d.ts.map +0 -1
  344. package/dist/service.test.js +0 -796
  345. package/dist/service.test.js.map +0 -1
  346. package/dist/test/index.d.ts +0 -47
  347. package/dist/test/index.d.ts.map +0 -1
  348. package/dist/test/index.js +0 -39
  349. package/dist/test/index.js.map +0 -1
  350. package/dist/test-utils/conformance-adapter.d.ts +0 -40
  351. package/dist/test-utils/conformance-adapter.d.ts.map +0 -1
  352. package/dist/test-utils/conformance-adapter.js +0 -250
  353. package/dist/test-utils/conformance-adapter.js.map +0 -1
  354. package/dist/tm-client-test-support.d.ts +0 -184
  355. package/dist/tm-client-test-support.d.ts.map +0 -1
  356. package/dist/tm-client-test-support.js +0 -466
  357. package/dist/tm-client-test-support.js.map +0 -1
  358. package/dist/tm-client.d.ts +0 -269
  359. package/dist/tm-client.d.ts.map +0 -1
  360. package/dist/tm-client.js +0 -518
  361. package/dist/tm-client.js.map +0 -1
  362. package/dist/tm-client.test.d.ts +0 -2
  363. package/dist/tm-client.test.d.ts.map +0 -1
  364. package/dist/tm-client.test.js +0 -490
  365. package/dist/tm-client.test.js.map +0 -1
  366. /package/dist/{runtime/refs.d.ts → refs.d.ts} +0 -0
  367. /package/dist/{runtime/refs.js → refs.js} +0 -0
@@ -4,8 +4,7 @@ import { Option } from "effect";
4
4
  * `moltzap register <name> <invite-code> [-d description] [--profile <name>] [--no-persist]`
5
5
  *
6
6
  * POST /api/v1/auth/register, then (by default) persist the result into
7
- * both `~/.moltzap/config.json` and the OpenClaw channel config so the
8
- * channel picks it up on its next file-watcher cycle.
7
+ * `~/.moltzap/config.json`.
9
8
  *
10
9
  * ```mermaid
11
10
  * sequenceDiagram
@@ -17,32 +16,31 @@ import { Option } from "effect";
17
16
  * participant fs
18
17
  *
19
18
  * shell->>cli: moltzap register <name> <code>
20
- * Note over cli: parse args + NAME_PATTERN test<br>fail → console.error + process.exit(1)
19
+ * Note over cli: parse args + shared profile-name schema
21
20
  * cli->>reg: handler({name, inviteCode, ...})
22
21
  * reg->>http: registerAgent(name, inviteCode, desc)
23
22
  * http->>server: POST /api/v1/auth/register
24
- * server-->>http: 200 {agentId, apiKey, claimUrl}
23
+ * server-->>http: 200 {agentId, apiKey}
25
24
  * http-->>reg: RegisterResponse
26
25
  * alt --no-persist
27
26
  * reg-->>shell: stdout — print response
28
27
  * else default
29
- * reg->>fs: persistRegistration<br>profile? writeProfile : updateConfig<br>+ writeOpenClawChannelConfig
28
+ * reg->>fs: persistRegistration; writeProfile
30
29
  * reg-->>shell: stdout — Agent registered
31
30
  * end
32
31
  * ```
33
32
  *
34
33
  * Options:
35
- * --profile &lt;name> write under `profiles.&lt;name>` instead of the
36
- * legacy top-level keys.
37
- * --no-persist print to stdout only; no writes to either
38
- * `~/.moltzap/config.json` or
39
- * `~/.openclaw/openclaw.json`.
34
+ * --profile &lt;name> write under `profiles.&lt;name>`; omitted uses
35
+ * the agent name as the profile name.
36
+ * --no-persist print non-secret registration details only; no writes to
37
+ * `~/.moltzap/config.json`.
40
38
  */
41
39
  export declare const registerCommand: Command.Command<"register", never, never, {
42
- readonly name: string;
40
+ readonly name: string & import("effect/Brand").Brand<"ProfileName">;
43
41
  readonly inviteCode: string;
44
42
  readonly description: Option.Option<string>;
45
- readonly profile: Option.Option<string>;
43
+ readonly profile: Option.Option<string & import("effect/Brand").Brand<"ProfileName">>;
46
44
  readonly noPersist: boolean;
47
45
  }>;
48
46
  //# sourceMappingURL=register.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAW,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAkB,MAAM,EAAE,MAAM,QAAQ,CAAC;AA0PhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,eAAe;;;;;;EA2C3B,CAAC"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAW,MAAM,aAAa,CAAC;AACrD,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AA8FxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,eAAe;;;;;;EAmD3B,CAAC"}
@@ -1,130 +1,45 @@
1
- /* eslint-disable jsdoc/text-escaping -- mermaid sequenceDiagram blocks need literal `<br>` (HTML5) for renderer compatibility; the escape would render as literal text. */
2
1
  import { Args, Command, Options } from "@effect/cli";
3
- import { FileSystem } from "@effect/platform";
4
- import { NodeFileSystem } from "@effect/platform-node";
5
- import { Effect, Either, Option } from "effect";
6
- import { getOpenClawConfigDir, getOpenClawConfigPath, } from "../../local-paths.js";
7
- import { getServerUrl, updateConfig } from "../config.js";
8
- import { registerAgent } from "../http-client.js";
9
- import { emitNoPersist, parseProfileName, writeProfile, } from "../profile.js";
10
- const NAME_PATTERN = /^[a-z0-9][a-z0-9-]{1,30}[a-z0-9]$/;
11
- const JSON_INDENT_SPACES = 2;
12
- function parseOpenClawConfig(contents) {
13
- return Effect.try({
14
- try: () => JSON.parse(contents),
15
- catch: (err) => err,
16
- });
17
- }
18
- function readExistingOpenClawConfig(fileSystem, configPath) {
19
- return fileSystem.exists(configPath).pipe(Effect.flatMap((exists) => {
20
- if (!exists)
21
- return Effect.succeed({});
22
- return fileSystem
23
- .readFileString(configPath, "utf-8")
24
- .pipe(Effect.flatMap(parseOpenClawConfig));
25
- }));
26
- }
27
- /**
28
- * Write channel config directly to the OpenClaw JSON file.
29
- * Avoids `openclaw config set` which triggers both a file-watcher restart
30
- * AND an internal notification — causing a double-SIGUSR1 race that leaves
31
- * the gateway stuck in draining mode. Direct file write triggers only the
32
- * file watcher → one clean restart.
33
- *
34
- * Per architect design rev 4 finding 2, this side effect is gated by the
35
- * caller: `--no-persist` skips this call entirely (Invariant §4.4).
36
- */
37
- const writeOpenClawChannelConfig = (account) => Effect.gen(function* () {
38
- const fileSystem = yield* FileSystem.FileSystem;
39
- const configDir = getOpenClawConfigDir();
40
- const configPath = getOpenClawConfigPath();
41
- let config = {};
42
- const existingConfig = yield* readExistingOpenClawConfig(fileSystem, configPath).pipe(Effect.either);
43
- yield* Either.match(existingConfig, {
44
- onLeft: (err) => Effect.logWarning(`moltzap: existing openclaw.json unreadable, starting fresh: ${err instanceof Error ? err.message : String(err)}`),
45
- onRight: (value) => Effect.sync(() => {
46
- config = value;
47
- }),
48
- });
49
- const channels = config.channels ?? {};
50
- channels.moltzap = {
51
- accounts: [{ id: "default", ...account }],
52
- };
53
- config.channels = channels;
54
- yield* fileSystem.makeDirectory(configDir, { recursive: true });
55
- yield* fileSystem.writeFileString(configPath, JSON.stringify(config, null, JSON_INDENT_SPACES) + "\n");
56
- }).pipe(Effect.provide(NodeFileSystem.layer), Effect.either, Effect.flatMap(Either.match({
57
- onLeft: (err) => Effect.fail(err instanceof Error ? err : new Error(String(err))),
58
- onRight: (value) => Effect.succeed(value),
59
- })));
60
- const nameArg = Args.text({ name: "name" }).pipe(Args.withDescription("Agent name (lowercase alphanumeric, 3-32 chars)"));
2
+ import { Effect, Option } from "effect";
3
+ import { getHttpUrl, getServerUrl } from "../../config.js";
4
+ import { registerAgent } from "../../auth.js";
5
+ import { emitNoPersist, ProfileName, writeProfile, } from "../../profile.js";
6
+ import { logLines } from "../output.js";
7
+ const nameArg = Args.text({ name: "name" }).pipe(Args.withSchema(ProfileName), Args.withDescription("Agent name (lowercase alphanumeric, 3-32 chars)"));
61
8
  const inviteCodeArg = Args.text({ name: "invite-code" }).pipe(Args.withDescription("Invite code from your invite URL"));
62
9
  const descriptionOption = Options.text("description").pipe(Options.withAlias("d"), Options.withDescription("Agent description"), Options.optional);
63
- // Spec sbd#177 rev 3 §5.2 barrel edits: --profile and --no-persist.
64
- //
65
- // NOTE on `--profile` routing: `register` consumes `--profile` locally because
66
- // it writes a NEW profile. Parent-level `moltzap --profile <name>` still means
67
- // "load an existing profile" for transport selection, and would reject the new
68
- // profile before this command could create it.
69
- const profileOption = Options.text("profile").pipe(Options.withDescription("Named profile to register under. Writes the new apiKey to " +
70
- "`profiles.<name>` in ~/.moltzap/config.json. Omit to overwrite the " +
71
- "legacy top-level record (the default profile). Other subcommands " +
10
+ // `register` consumes `--profile` locally because it writes a NEW profile.
11
+ // Parent-level `moltzap --profile <name>` means "load an existing profile"
12
+ // for transport selection, and would reject the new profile before this
13
+ // command could create it.
14
+ const profileOption = Options.text("profile").pipe(Options.withSchema(ProfileName), Options.withDescription("Named profile to register under. Writes the new apiKey to " +
15
+ "`profiles.<name>` in ~/.moltzap/config.json. Omit to use the " +
16
+ "agent name as the profile name. Other subcommands " +
72
17
  "select an existing profile via the global `--profile` flag (see " +
73
18
  "`moltzap --help`)."), Options.optional);
74
- const noPersistFlag = Options.boolean("no-persist").pipe(Options.withDescription("Do not write the registered key to ~/.moltzap/config.json or " +
75
- "~/.openclaw/openclaw.json. Prints the apiKey and claim URL to stdout " +
76
- "so the caller can capture them (e.g. into an env var for use with " +
77
- "`--as $KEY`) without mutating either config tree."));
78
- function invalidAgentName(name) {
79
- return Effect.sync(() => {
80
- console.error(`Invalid agent name "${name}". Must be 3-32 chars, lowercase alphanumeric and hyphens, cannot start or end with a hyphen.`);
81
- process.exit(1);
82
- });
83
- }
84
- function profileRecordFrom(name, result, serverUrl) {
19
+ const noPersistFlag = Options.boolean("no-persist").pipe(Options.withDescription("Do not write the registered key to ~/.moltzap/config.json. Prints the " +
20
+ "agent id without mutating client config."));
21
+ function profileRecordFrom(name, result) {
85
22
  return {
23
+ agentId: result.agentId,
86
24
  apiKey: result.apiKey,
87
25
  agentName: name,
88
- serverUrl,
89
- registeredAt: new Date().toISOString(),
90
26
  };
91
27
  }
92
- function printNoPersistRegistration(name, result, emitted) {
93
- console.log(`Agent "${name}" registered (not persisted).`);
94
- console.log(` Agent ID: ${result.agentId}`);
95
- console.log(` API Key: ${emitted.record.apiKey}`);
96
- console.log(` Server URL: ${emitted.record.serverUrl}`);
97
- console.log(` Claim URL: ${result.claimUrl}`);
98
- console.log("\nShare the claim URL with the agent's owner to verify ownership.");
28
+ function printRegistration(headline, result, serverUrl) {
29
+ return logLines([
30
+ headline,
31
+ ` Agent ID: ${result.agentId}`,
32
+ ` Server URL: ${serverUrl}`,
33
+ ]);
99
34
  }
100
- function printPersistedRegistration(name, result, serverUrl) {
101
- console.log(`Agent "${name}" registered and channel configured.`);
102
- console.log(` Agent ID: ${result.agentId}`);
103
- console.log(` API Key: ${result.apiKey}`);
104
- console.log(` Server URL: ${serverUrl}`);
105
- console.log(` Claim URL: ${result.claimUrl}`);
106
- console.log("\nShare the claim URL with the agent's owner to verify ownership.");
107
- }
108
- function persistRegistration({ profile, record, result, serverUrl, name, }) {
109
- if (Option.isSome(profile)) {
110
- return parseProfileName(profile.value).pipe(Effect.flatMap((profileName) => writeProfile(profileName, record)));
111
- }
112
- return updateConfig(() => ({
113
- serverUrl,
114
- apiKey: result.apiKey,
115
- agentName: name,
116
- })).pipe(Effect.zipRight(writeOpenClawChannelConfig({
117
- apiKey: result.apiKey,
118
- serverUrl,
119
- agentName: name,
120
- })));
35
+ function persistRegistration({ profile, record, name, }) {
36
+ return writeProfile(Option.getOrElse(profile, () => name), record);
121
37
  }
122
38
  /**
123
39
  * `moltzap register &lt;name> &lt;invite-code> [-d description] [--profile &lt;name>] [--no-persist]`
124
40
  *
125
41
  * POST /api/v1/auth/register, then (by default) persist the result into
126
- * both `~/.moltzap/config.json` and the OpenClaw channel config so the
127
- * channel picks it up on its next file-watcher cycle.
42
+ * `~/.moltzap/config.json`.
128
43
  *
129
44
  * ```mermaid
130
45
  * sequenceDiagram
@@ -136,26 +51,25 @@ function persistRegistration({ profile, record, result, serverUrl, name, }) {
136
51
  * participant fs
137
52
  *
138
53
  * shell->>cli: moltzap register &lt;name> &lt;code>
139
- * Note over cli: parse args + NAME_PATTERN test<br>fail → console.error + process.exit(1)
54
+ * Note over cli: parse args + shared profile-name schema
140
55
  * cli->>reg: handler({name, inviteCode, ...})
141
56
  * reg->>http: registerAgent(name, inviteCode, desc)
142
57
  * http->>server: POST /api/v1/auth/register
143
- * server-->>http: 200 {agentId, apiKey, claimUrl}
58
+ * server-->>http: 200 {agentId, apiKey}
144
59
  * http-->>reg: RegisterResponse
145
60
  * alt --no-persist
146
61
  * reg-->>shell: stdout — print response
147
62
  * else default
148
- * reg->>fs: persistRegistration<br>profile? writeProfile : updateConfig<br>+ writeOpenClawChannelConfig
63
+ * reg->>fs: persistRegistration; writeProfile
149
64
  * reg-->>shell: stdout — Agent registered
150
65
  * end
151
66
  * ```
152
67
  *
153
68
  * Options:
154
- * --profile &lt;name> write under `profiles.&lt;name>` instead of the
155
- * legacy top-level keys.
156
- * --no-persist print to stdout only; no writes to either
157
- * `~/.moltzap/config.json` or
158
- * `~/.openclaw/openclaw.json`.
69
+ * --profile &lt;name> write under `profiles.&lt;name>`; omitted uses
70
+ * the agent name as the profile name.
71
+ * --no-persist print non-secret registration details only; no writes to
72
+ * `~/.moltzap/config.json`.
159
73
  */
160
74
  export const registerCommand = Command.make("register", {
161
75
  name: nameArg,
@@ -164,26 +78,26 @@ export const registerCommand = Command.make("register", {
164
78
  profile: profileOption,
165
79
  noPersist: noPersistFlag,
166
80
  }, ({ name, inviteCode, description, profile, noPersist }) => {
167
- if (!NAME_PATTERN.test(name)) {
168
- return invalidAgentName(name);
169
- }
170
81
  const desc = Option.isSome(description) ? description.value : undefined;
171
82
  return Effect.gen(function* () {
172
- const result = yield* registerAgent(name, inviteCode, desc);
83
+ const httpUrl = yield* getHttpUrl;
84
+ const result = yield* registerAgent(httpUrl, name, {
85
+ inviteCode,
86
+ ...(desc === undefined ? {} : { description: desc }),
87
+ });
173
88
  const serverUrl = yield* getServerUrl;
174
- const record = profileRecordFrom(name, result, serverUrl);
89
+ const record = profileRecordFrom(name, result);
175
90
  if (noPersist) {
176
- // Invariant §4.4: no writes to ~/.moltzap/ or ~/.openclaw/.
177
- const emitted = yield* emitNoPersist(record);
178
- printNoPersistRegistration(name, result, emitted);
91
+ // No writes to ~/.moltzap/.
92
+ yield* emitNoPersist(record);
93
+ yield* printRegistration(`Agent "${name}" registered (not persisted).`, result, serverUrl);
179
94
  return;
180
95
  }
181
- yield* persistRegistration({ profile, record, result, serverUrl, name });
182
- printPersistedRegistration(name, result, serverUrl);
183
- }).pipe(Effect.withSpan("registerCommand"), Effect.catchAll((err) => Effect.sync(() => {
96
+ yield* persistRegistration({ profile, record, name });
97
+ yield* printRegistration(`Agent "${name}" registered and profile saved.`, result, serverUrl);
98
+ }).pipe(Effect.withSpan("registerCommand"), Effect.catchAll((err) => {
184
99
  const msg = err instanceof Error ? err.message : String(err);
185
- console.error(`Registration failed: ${msg}`);
186
- process.exit(1);
187
- })));
100
+ return Effect.logError(`Registration failed: ${msg}`).pipe(Effect.zipRight(Effect.sync(() => process.exit(1))));
101
+ }));
188
102
  }).pipe(Command.withDescription("Register a new agent on MoltZap (requires invite code)"));
189
103
  //# sourceMappingURL=register.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,32 @@
1
1
  import { Command } from "@effect/cli";
2
2
  import { Option } from "effect";
3
- import { ConversationId, TaskId } from "@moltzap/protocol/task";
3
+ import { type SendTarget as SendTargetValue } from "../../local-daemon-rpc.js";
4
+ import type { Transport } from "../transport.js";
5
+ import { MessageId } from "@moltzap/protocol/conversation";
6
+ type SendCommandParsed = {
7
+ readonly target: SendTargetValue;
8
+ readonly message: string;
9
+ readonly replyTo: Option.Option<MessageId>;
10
+ };
4
11
  /**
5
12
  * `moltzap send task:&lt;taskId>:&lt;convId> &lt;message> [--reply-to &lt;id>]` —
6
13
  * socket-call into the local MoltZapService to enqueue an outbound
7
- * `messages/send` against an existing (taskId, conversationId) pair.
8
- * D3 (#600) made `taskId` REQUIRED on the wire, so the CLI target
9
- * always carries both ids; bare `agent:` / `conv:` shortcuts retire.
14
+ * `agent/message/send` against an existing (taskId, conversationId) pair.
15
+ * `taskId` is REQUIRED on the wire, so the CLI target always carries both
16
+ * ids.
10
17
  *
11
18
  * Identity selection is driven by the parent `@effect/cli` options
12
19
  * wired in `cli/index.ts`:
13
20
  *
14
- * --as &lt;apiKey> Send as the agent owning the given API key.
15
- * Bypasses the local daemon socket; dials the
16
- * server directly. Useful in multi-agent
17
- * workflows where the same host registers more
18
- * than one agent.
19
21
  * --profile &lt;name> Load the named profile from
20
- * ~/.moltzap/config.json and send as that agent.
21
- * Short for looking up the apiKey out of the
22
- * profile and passing it as --as.
22
+ * ~/.moltzap/config.json and send through that
23
+ * agent's local daemon socket.
23
24
  *
24
- * If neither is provided, the command uses the legacy default profile
25
- * (top-level apiKey in ~/.moltzap/config.json) — the identity set by
26
- * the most recent `moltzap register` that did not use `--profile` or
27
- * `--no-persist`.
25
+ * If no profile is provided, the command uses the default local daemon socket.
28
26
  *
29
27
  * Examples:
30
28
  * moltzap send task:$TID:$CID "hello" # default identity
31
29
  * moltzap --profile alice send task:$TID:$CID "hello" # send as alice
32
- * moltzap --as $BOB_API_KEY send task:$TID:$CID "ack" # send as bob
33
30
  *
34
31
  * Default path delegates to the local channel daemon via a
35
32
  * Unix-socket RPC; it does NOT mint its own `MoltZapAgentClient`.
@@ -44,28 +41,18 @@ import { ConversationId, TaskId } from "@moltzap/protocol/task";
44
41
  *
45
42
  * shell->>cli: moltzap send task:taskId:convId msg
46
43
  * cli->>send: handler({target, message, replyTo})
47
- * send->>sock: request(MessagesSend, {taskId, conversationId, parts})
44
+ * send->>sock: command(cli/send, {target, message, replyToId?})
48
45
  * Note over sock: NodeSocket.makeNet(~/.moltzap/service.sock, 10s) — ENOENT/ECONNREFUSED → SocketRequestError "not running"
49
- * sock->>daemon: NDJSON RPC — LocalDaemonCall — method messages/send
50
- * Note over daemon: handleSocketRequest → sendRpc(MessagesSend) → agent-client → server
51
- * daemon-->>sock: {message: {id}}
52
- * Note over sock: definition.validateResult
53
- * sock-->>send: {message: {id}}
46
+ * sock->>daemon: NDJSON RPC — cli/send
47
+ * Note over daemon: LocalDaemonRpcs handler → MessagesSend → agent-client → server
48
+ * daemon-->>sock: {messageId}
49
+ * sock-->>send: {messageId}
54
50
  * send-->>shell: stdout — Message sent (id)
55
51
  * ```
56
52
  *
57
- * `--as` and `--profile` bypass the daemon socket and dial the server
58
- * directly. New v2 subcommands (`apps/*`, `messages list`,
59
- * `conversations {get,archive,unarchive}`) honor those flags today;
60
- * `moltzap send` itself is still on the daemon socket pending the v2
61
- * transport rewire.
53
+ * `--profile` selects the per-agent daemon socket; credentials remain owned
54
+ * by the running MoltZapService.
62
55
  */
63
- export declare const sendCommand: Command.Command<"send", never, never, {
64
- readonly target: {
65
- taskId: TaskId;
66
- conversationId: ConversationId;
67
- };
68
- readonly message: string;
69
- readonly replyTo: Option.Option<string & import("effect/Brand").Brand<"MessageId">>;
70
- }>;
56
+ export declare const sendCommand: Command.Command<"send", Transport, never, SendCommandParsed>;
57
+ export {};
71
58
  //# sourceMappingURL=send.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAoB,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAgB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAK9C,OAAO,EAAE,cAAc,EAAa,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAoD3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,eAAO,MAAM,WAAW;;gBAhGH,MAAM;wBAAkB,cAAc;;;;EAiI1D,CAAC"}
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAW,MAAM,aAAa,CAAC;AACrD,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAGL,KAAK,UAAU,IAAI,eAAe,EACnC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;CAC5C,CAAC;AAiBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,eAAO,MAAM,WAAW,EAAE,OAAO,CAAC,OAAO,CACvC,MAAM,EACN,SAAS,EACT,KAAK,EACL,iBAAiB,CA0BlB,CAAC"}
@@ -1,66 +1,30 @@
1
- import { Args, Command, HelpDoc, Options } from "@effect/cli";
2
- import { Data, Effect, Option } from "effect";
3
- import { Value } from "@sinclair/typebox/value";
4
- import { request } from "../socket-client.js";
5
- import { MessagesSend } from "@moltzap/protocol";
6
- import { ConversationId, MessageId, TaskId } from "@moltzap/protocol/task";
7
- const TASK_CONVERSATION_TARGET_PREFIX = "task:";
8
- class SendTargetMalformedError extends Data.TaggedError("SendTargetMalformedError") {
9
- get message() {
10
- return `invalid target ${this.target}: ${this.reason}`;
11
- }
12
- }
13
- const targetArg = Args.text({ name: "target" }).pipe(Args.withDescription("Target task+conversation as task:<taskId>:<convId>"), Args.mapTryCatch((raw) => {
14
- if (!raw.startsWith(TASK_CONVERSATION_TARGET_PREFIX)) {
15
- throw new SendTargetMalformedError({
16
- target: raw,
17
- reason: `missing '${TASK_CONVERSATION_TARGET_PREFIX}' prefix`,
18
- });
19
- }
20
- const rest = raw.slice(TASK_CONVERSATION_TARGET_PREFIX.length);
21
- const [tid, cid] = rest.split(":");
22
- if (!tid || !cid) {
23
- throw new SendTargetMalformedError({
24
- target: raw,
25
- reason: "expected task:<taskId>:<conversationId>",
26
- });
27
- }
28
- return {
29
- taskId: Value.Decode(TaskId, tid),
30
- conversationId: Value.Decode(ConversationId, cid),
31
- };
32
- }, (err) => HelpDoc.p(`invalid target: ${String(err)}`)));
1
+ import { Args, Command, Options } from "@effect/cli";
2
+ import { Effect, Option } from "effect";
3
+ import { LocalDaemonCommands, SendTarget, } from "../../local-daemon-rpc.js";
4
+ import { command, runHandler } from "../transport.js";
5
+ import { MessageId } from "@moltzap/protocol/conversation";
6
+ const targetArg = Args.text({ name: "target" }).pipe(Args.withSchema(SendTarget), Args.withDescription("Target task+conversation as task:<taskId>:<convId>"));
33
7
  const messageArg = Args.text({ name: "message" }).pipe(Args.withDescription("Message text"));
34
- const replyToOption = Options.text("reply-to").pipe(Options.withDescription("Reply to a specific message"), Options.mapTryCatch((raw) => Value.Decode(MessageId, raw), (err) => HelpDoc.p(`invalid --reply-to: ${String(err)}`)), Options.optional);
8
+ const replyToOption = Options.text("reply-to").pipe(Options.withSchema(MessageId), Options.withDescription("Reply to a specific message"), Options.optional);
35
9
  /**
36
10
  * `moltzap send task:&lt;taskId>:&lt;convId> &lt;message> [--reply-to &lt;id>]` —
37
11
  * socket-call into the local MoltZapService to enqueue an outbound
38
- * `messages/send` against an existing (taskId, conversationId) pair.
39
- * D3 (#600) made `taskId` REQUIRED on the wire, so the CLI target
40
- * always carries both ids; bare `agent:` / `conv:` shortcuts retire.
12
+ * `agent/message/send` against an existing (taskId, conversationId) pair.
13
+ * `taskId` is REQUIRED on the wire, so the CLI target always carries both
14
+ * ids.
41
15
  *
42
16
  * Identity selection is driven by the parent `@effect/cli` options
43
17
  * wired in `cli/index.ts`:
44
18
  *
45
- * --as &lt;apiKey> Send as the agent owning the given API key.
46
- * Bypasses the local daemon socket; dials the
47
- * server directly. Useful in multi-agent
48
- * workflows where the same host registers more
49
- * than one agent.
50
19
  * --profile &lt;name> Load the named profile from
51
- * ~/.moltzap/config.json and send as that agent.
52
- * Short for looking up the apiKey out of the
53
- * profile and passing it as --as.
20
+ * ~/.moltzap/config.json and send through that
21
+ * agent's local daemon socket.
54
22
  *
55
- * If neither is provided, the command uses the legacy default profile
56
- * (top-level apiKey in ~/.moltzap/config.json) — the identity set by
57
- * the most recent `moltzap register` that did not use `--profile` or
58
- * `--no-persist`.
23
+ * If no profile is provided, the command uses the default local daemon socket.
59
24
  *
60
25
  * Examples:
61
26
  * moltzap send task:$TID:$CID "hello" # default identity
62
27
  * moltzap --profile alice send task:$TID:$CID "hello" # send as alice
63
- * moltzap --as $BOB_API_KEY send task:$TID:$CID "ack" # send as bob
64
28
  *
65
29
  * Default path delegates to the local channel daemon via a
66
30
  * Unix-socket RPC; it does NOT mint its own `MoltZapAgentClient`.
@@ -75,38 +39,27 @@ const replyToOption = Options.text("reply-to").pipe(Options.withDescription("Rep
75
39
  *
76
40
  * shell->>cli: moltzap send task:taskId:convId msg
77
41
  * cli->>send: handler({target, message, replyTo})
78
- * send->>sock: request(MessagesSend, {taskId, conversationId, parts})
42
+ * send->>sock: command(cli/send, {target, message, replyToId?})
79
43
  * Note over sock: NodeSocket.makeNet(~/.moltzap/service.sock, 10s) — ENOENT/ECONNREFUSED → SocketRequestError "not running"
80
- * sock->>daemon: NDJSON RPC — LocalDaemonCall — method messages/send
81
- * Note over daemon: handleSocketRequest → sendRpc(MessagesSend) → agent-client → server
82
- * daemon-->>sock: {message: {id}}
83
- * Note over sock: definition.validateResult
84
- * sock-->>send: {message: {id}}
44
+ * sock->>daemon: NDJSON RPC — cli/send
45
+ * Note over daemon: LocalDaemonRpcs handler → MessagesSend → agent-client → server
46
+ * daemon-->>sock: {messageId}
47
+ * sock-->>send: {messageId}
85
48
  * send-->>shell: stdout — Message sent (id)
86
49
  * ```
87
50
  *
88
- * `--as` and `--profile` bypass the daemon socket and dial the server
89
- * directly. New v2 subcommands (`apps/*`, `messages list`,
90
- * `conversations {get,archive,unarchive}`) honor those flags today;
91
- * `moltzap send` itself is still on the daemon socket pending the v2
92
- * transport rewire.
51
+ * `--profile` selects the per-agent daemon socket; credentials remain owned
52
+ * by the running MoltZapService.
93
53
  */
94
54
  export const sendCommand = Command.make("send", { target: targetArg, message: messageArg, replyTo: replyToOption }, ({ target, message, replyTo }) => {
95
55
  const reply = Option.isSome(replyTo)
96
56
  ? { replyToId: replyTo.value }
97
57
  : {};
98
- return request(MessagesSend, {
99
- taskId: target.taskId,
100
- conversationId: target.conversationId,
101
- parts: [{ type: "text", text: message }],
58
+ return runHandler(command(LocalDaemonCommands.Send, {
59
+ target,
60
+ message,
102
61
  ...reply,
103
- }).pipe(Effect.tap((result) => Effect.sync(() => {
104
- const r = result;
105
- console.log(`Message sent (id: ${r.message.id})`);
106
- })), Effect.asVoid, Effect.catchAll((err) => Effect.sync(() => {
107
- console.error(`Failed: ${err.message}`);
108
- process.exit(1);
109
- })));
62
+ }).pipe(Effect.flatMap((result) => Effect.log(`Message sent (id: ${result.messageId})`)), Effect.asVoid));
110
63
  }).pipe(Command.withDescription("Send a message to task:<taskId>:<conversationId>. " +
111
- "Identity follows the global --as / --profile flags."));
64
+ "Identity follows the global --profile flag."));
112
65
  //# sourceMappingURL=send.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EACL,mBAAmB,EACnB,UAAU,GAEX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAQ3D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAClD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAC3B,IAAI,CAAC,eAAe,CAAC,oDAAoD,CAAC,CAC3E,CAAC;AAEF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CACpD,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CACrC,CAAC;AAEF,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CACjD,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAC7B,OAAO,CAAC,eAAe,CAAC,6BAA6B,CAAC,EACtD,OAAO,CAAC,QAAQ,CACjB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,CAAC,MAAM,WAAW,GAKpB,OAAO,CAAC,IAAI,CACd,MAAM,EACN,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,EAClE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;IAC/B,MAAM,KAAK,GAA8B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7D,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE;QAC9B,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,UAAU,CACf,OAAO,CAAC,mBAAmB,CAAC,IAAI,EAAE;QAChC,MAAM;QACN,OAAO;QACP,GAAG,KAAK;KACT,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,MAAM,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,SAAS,GAAG,CAAC,CACrD,EACD,MAAM,CAAC,MAAM,CACd,CACF,CAAC;AACJ,CAAC,CACF,CAAC,IAAI,CACJ,OAAO,CAAC,eAAe,CACrB,oDAAoD;IAClD,6CAA6C,CAChD,CACF,CAAC"}