agent-relay 2.3.13 → 2.3.15

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 (1420) hide show
  1. package/README.md +42 -176
  2. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  3. package/bin/agent-relay-broker-darwin-x64 +0 -0
  4. package/bin/agent-relay-broker-linux-arm64 +0 -0
  5. package/bin/agent-relay-broker-linux-x64 +0 -0
  6. package/dist/index.cjs +50319 -63390
  7. package/dist/src/cli/bootstrap.d.ts +6 -0
  8. package/dist/src/cli/bootstrap.d.ts.map +1 -0
  9. package/dist/src/cli/bootstrap.js +109 -0
  10. package/dist/src/cli/bootstrap.js.map +1 -0
  11. package/dist/src/cli/commands/agent-management.d.ts +51 -0
  12. package/dist/src/cli/commands/agent-management.d.ts.map +1 -0
  13. package/dist/src/cli/commands/agent-management.js +290 -0
  14. package/dist/src/cli/commands/agent-management.js.map +1 -0
  15. package/dist/src/cli/commands/auth.d.ts +9 -0
  16. package/dist/src/cli/commands/auth.d.ts.map +1 -0
  17. package/dist/src/cli/commands/auth.js +33 -0
  18. package/dist/src/cli/commands/auth.js.map +1 -0
  19. package/dist/src/cli/commands/cloud.d.ts +18 -0
  20. package/dist/src/cli/commands/cloud.d.ts.map +1 -0
  21. package/dist/src/cli/commands/cloud.js +392 -0
  22. package/dist/src/cli/commands/cloud.js.map +1 -0
  23. package/dist/src/cli/commands/core.d.ts +107 -0
  24. package/dist/src/cli/commands/core.d.ts.map +1 -0
  25. package/dist/src/cli/commands/core.js +299 -0
  26. package/dist/src/cli/commands/core.js.map +1 -0
  27. package/dist/src/cli/commands/doctor.d.ts +1 -1
  28. package/dist/src/cli/commands/doctor.d.ts.map +1 -1
  29. package/dist/src/cli/commands/doctor.js +1 -485
  30. package/dist/src/cli/commands/doctor.js.map +1 -1
  31. package/dist/src/cli/commands/messaging.d.ts +61 -0
  32. package/dist/src/cli/commands/messaging.d.ts.map +1 -0
  33. package/dist/src/cli/commands/messaging.js +213 -0
  34. package/dist/src/cli/commands/messaging.js.map +1 -0
  35. package/dist/src/cli/commands/monitoring.d.ts +57 -0
  36. package/dist/src/cli/commands/monitoring.d.ts.map +1 -0
  37. package/dist/src/cli/commands/monitoring.js +350 -0
  38. package/dist/src/cli/commands/monitoring.js.map +1 -0
  39. package/dist/src/cli/commands/setup.d.ts +29 -0
  40. package/dist/src/cli/commands/setup.d.ts.map +1 -0
  41. package/dist/src/cli/commands/setup.js +324 -0
  42. package/dist/src/cli/commands/setup.js.map +1 -0
  43. package/dist/src/cli/commands/swarm.d.ts +3 -0
  44. package/dist/src/cli/commands/swarm.d.ts.map +1 -0
  45. package/dist/src/cli/commands/swarm.js +108 -0
  46. package/dist/src/cli/commands/swarm.js.map +1 -0
  47. package/dist/src/cli/index.d.ts +1 -28
  48. package/dist/src/cli/index.d.ts.map +1 -1
  49. package/dist/src/cli/index.js +4 -4936
  50. package/dist/src/cli/index.js.map +1 -1
  51. package/dist/src/cli/lib/agent-management-listing.d.ts +39 -0
  52. package/dist/src/cli/lib/agent-management-listing.d.ts.map +1 -0
  53. package/dist/src/cli/lib/agent-management-listing.js +253 -0
  54. package/dist/src/cli/lib/agent-management-listing.js.map +1 -0
  55. package/dist/src/cli/lib/auth-ssh.d.ts +48 -0
  56. package/dist/src/cli/lib/auth-ssh.d.ts.map +1 -0
  57. package/dist/src/cli/lib/auth-ssh.js +572 -0
  58. package/dist/src/cli/lib/auth-ssh.js.map +1 -0
  59. package/dist/src/cli/lib/bridge.d.ts +8 -0
  60. package/dist/src/cli/lib/bridge.d.ts.map +1 -0
  61. package/dist/src/cli/lib/bridge.js +100 -0
  62. package/dist/src/cli/lib/bridge.js.map +1 -0
  63. package/dist/src/cli/lib/broker-lifecycle.d.ts +20 -0
  64. package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -0
  65. package/dist/src/cli/lib/broker-lifecycle.js +843 -0
  66. package/dist/src/cli/lib/broker-lifecycle.js.map +1 -0
  67. package/dist/src/cli/lib/client-factory.d.ts +24 -0
  68. package/dist/src/cli/lib/client-factory.d.ts.map +1 -0
  69. package/dist/src/cli/lib/client-factory.js +20 -0
  70. package/dist/src/cli/lib/client-factory.js.map +1 -0
  71. package/dist/src/cli/lib/cloud-client.d.ts +39 -0
  72. package/dist/src/cli/lib/cloud-client.d.ts.map +1 -0
  73. package/dist/src/cli/lib/cloud-client.js +120 -0
  74. package/dist/src/cli/lib/cloud-client.js.map +1 -0
  75. package/dist/src/cli/lib/core-maintenance.d.ts +13 -0
  76. package/dist/src/cli/lib/core-maintenance.d.ts.map +1 -0
  77. package/dist/src/cli/lib/core-maintenance.js +250 -0
  78. package/dist/src/cli/lib/core-maintenance.js.map +1 -0
  79. package/dist/src/cli/lib/doctor.d.ts +2 -0
  80. package/dist/src/cli/lib/doctor.d.ts.map +1 -0
  81. package/dist/src/cli/lib/doctor.js +484 -0
  82. package/dist/src/cli/lib/doctor.js.map +1 -0
  83. package/dist/src/cli/lib/formatting.d.ts +8 -0
  84. package/dist/src/cli/lib/formatting.d.ts.map +1 -0
  85. package/dist/src/cli/lib/formatting.js +48 -0
  86. package/dist/src/cli/lib/formatting.js.map +1 -0
  87. package/dist/src/cli/lib/index.d.ts +5 -0
  88. package/dist/src/cli/lib/index.d.ts.map +1 -0
  89. package/dist/src/cli/lib/index.js +5 -0
  90. package/dist/src/cli/lib/index.js.map +1 -0
  91. package/dist/src/cli/lib/jsonc.d.ts +8 -0
  92. package/dist/src/cli/lib/jsonc.d.ts.map +1 -0
  93. package/dist/src/cli/lib/jsonc.js +88 -0
  94. package/dist/src/cli/lib/jsonc.js.map +1 -0
  95. package/dist/src/cli/lib/monitoring-health.d.ts +32 -0
  96. package/dist/src/cli/lib/monitoring-health.d.ts.map +1 -0
  97. package/dist/src/cli/lib/monitoring-health.js +2 -0
  98. package/dist/src/cli/lib/monitoring-health.js.map +1 -0
  99. package/dist/src/cli/lib/paths.d.ts +2 -0
  100. package/dist/src/cli/lib/paths.d.ts.map +1 -0
  101. package/dist/src/cli/lib/paths.js +5 -0
  102. package/dist/src/cli/lib/paths.js.map +1 -0
  103. package/dist/src/index.d.ts +1 -5
  104. package/dist/src/index.d.ts.map +1 -1
  105. package/dist/src/index.js +1 -5
  106. package/dist/src/index.js.map +1 -1
  107. package/install.sh +0 -30
  108. package/package.json +84 -98
  109. package/packages/acp-bridge/README.md +8 -8
  110. package/packages/acp-bridge/dist/acp-agent.d.ts +8 -7
  111. package/packages/acp-bridge/dist/acp-agent.d.ts.map +1 -1
  112. package/packages/acp-bridge/dist/acp-agent.js +118 -143
  113. package/packages/acp-bridge/dist/acp-agent.js.map +1 -1
  114. package/packages/acp-bridge/dist/cli.d.ts +1 -1
  115. package/packages/acp-bridge/dist/cli.js +3 -3
  116. package/packages/acp-bridge/dist/index.d.ts +2 -2
  117. package/packages/acp-bridge/dist/index.d.ts.map +1 -1
  118. package/packages/acp-bridge/dist/index.js +1 -1
  119. package/packages/acp-bridge/dist/index.js.map +1 -1
  120. package/packages/acp-bridge/dist/types.d.ts +3 -3
  121. package/packages/acp-bridge/package.json +3 -3
  122. package/packages/acp-bridge/src/acp-agent.ts +123 -160
  123. package/packages/acp-bridge/src/cli.ts +3 -3
  124. package/packages/acp-bridge/src/index.ts +2 -2
  125. package/packages/acp-bridge/src/types.ts +3 -3
  126. package/packages/config/dist/bridge-config.d.ts +5 -5
  127. package/packages/config/dist/bridge-config.d.ts.map +1 -1
  128. package/packages/config/dist/bridge-config.js +16 -9
  129. package/packages/config/dist/bridge-config.js.map +1 -1
  130. package/packages/config/dist/cli-auth-config.d.ts +1 -1
  131. package/packages/config/dist/cli-auth-config.js +1 -1
  132. package/packages/config/dist/cli-registry.generated.d.ts +340 -0
  133. package/packages/config/dist/cli-registry.generated.d.ts.map +1 -0
  134. package/packages/config/dist/cli-registry.generated.js +297 -0
  135. package/packages/config/dist/cli-registry.generated.js.map +1 -0
  136. package/packages/config/dist/index.d.ts +1 -0
  137. package/packages/config/dist/index.d.ts.map +1 -1
  138. package/packages/config/dist/index.js +1 -0
  139. package/packages/config/dist/index.js.map +1 -1
  140. package/packages/config/dist/project-namespace.d.ts +9 -9
  141. package/packages/config/dist/project-namespace.js +3 -3
  142. package/packages/config/dist/relay-config.d.ts +1 -1
  143. package/packages/config/dist/relay-config.js +1 -1
  144. package/packages/config/dist/schemas.js +1 -1
  145. package/packages/config/dist/shadow-config.d.ts +2 -1
  146. package/packages/config/dist/shadow-config.d.ts.map +1 -1
  147. package/packages/config/dist/shadow-config.js.map +1 -1
  148. package/packages/config/package.json +2 -3
  149. package/packages/config/src/bridge-config.test.ts +20 -6
  150. package/packages/config/src/bridge-config.ts +20 -10
  151. package/packages/config/src/cli-auth-config.ts +1 -1
  152. package/packages/config/src/cli-registry.generated.ts +328 -0
  153. package/packages/config/src/index.ts +1 -0
  154. package/packages/config/src/project-namespace.ts +9 -9
  155. package/packages/config/src/relay-config.ts +1 -1
  156. package/packages/config/src/schemas.ts +1 -1
  157. package/packages/config/src/shadow-config.ts +8 -1
  158. package/packages/contracts/fixtures/error-fixtures.json +42 -0
  159. package/packages/contracts/fixtures/event-fixtures.json +161 -0
  160. package/packages/contracts/fixtures/health-fixtures.json +35 -0
  161. package/packages/contracts/fixtures/identity-fixtures.json +58 -0
  162. package/packages/contracts/fixtures/replay-fixtures.json +33 -0
  163. package/packages/hooks/dist/inbox-check/types.d.ts +2 -2
  164. package/packages/hooks/dist/types.d.ts +9 -3
  165. package/packages/hooks/dist/types.d.ts.map +1 -1
  166. package/packages/hooks/dist/types.js +1 -1
  167. package/packages/hooks/dist/types.js.map +1 -1
  168. package/packages/hooks/package.json +5 -5
  169. package/packages/hooks/src/inbox-check/types.ts +2 -2
  170. package/packages/hooks/src/types.ts +11 -3
  171. package/packages/memory/package.json +2 -2
  172. package/packages/policy/package.json +2 -2
  173. package/packages/sdk/.mcp.json +14 -0
  174. package/packages/sdk/.trajectories/active/traj_1771875803391_84ca57b2.json +50 -0
  175. package/packages/sdk/.trajectories/active/traj_1771891934534_06504121.json +50 -0
  176. package/packages/sdk/.trajectories/active/traj_1771891957929_211afc4e.json +50 -0
  177. package/packages/sdk/.trajectories/active/traj_1771891982509_38c84638.json +50 -0
  178. package/packages/sdk/.trajectories/completed/traj_1771875803188_cd6d181c.json +80 -0
  179. package/packages/sdk/.trajectories/completed/traj_1771875803204_f2aeb8c8.json +80 -0
  180. package/packages/sdk/.trajectories/completed/traj_1771875803210_d65f3f1a.json +80 -0
  181. package/packages/sdk/.trajectories/completed/traj_1771875803218_e454a25d.json +80 -0
  182. package/packages/sdk/.trajectories/completed/traj_1771875803223_d7a64815.json +80 -0
  183. package/packages/sdk/.trajectories/completed/traj_1771875803227_7e56da5b.json +80 -0
  184. package/packages/sdk/.trajectories/completed/traj_1771875803235_4fbf93b4.json +80 -0
  185. package/packages/sdk/.trajectories/completed/traj_1771875803243_47931c71.json +80 -0
  186. package/packages/sdk/.trajectories/completed/traj_1771875803258_3816f3fe.json +80 -0
  187. package/packages/sdk/.trajectories/completed/traj_1771875803268_8061140e.json +80 -0
  188. package/packages/sdk/.trajectories/completed/traj_1771875803326_ae6f9c78.json +80 -0
  189. package/packages/sdk/.trajectories/completed/traj_1771875808396_cbde0a6c.json +91 -0
  190. package/packages/sdk/.trajectories/completed/traj_1771875812026_aa2442bb.json +91 -0
  191. package/packages/sdk/.trajectories/completed/traj_1771875815431_c2c656c5.json +91 -0
  192. package/packages/sdk/.trajectories/completed/traj_1771875818645_3a4dbf02.json +91 -0
  193. package/packages/sdk/.trajectories/completed/traj_1771891934403_24923c03.json +80 -0
  194. package/packages/sdk/.trajectories/completed/traj_1771891934421_dca16e24.json +80 -0
  195. package/packages/sdk/.trajectories/completed/traj_1771891934430_057706f7.json +80 -0
  196. package/packages/sdk/.trajectories/completed/traj_1771891934442_faf97382.json +80 -0
  197. package/packages/sdk/.trajectories/completed/traj_1771891934454_5542ecd5.json +80 -0
  198. package/packages/sdk/.trajectories/completed/traj_1771891934464_12202a08.json +80 -0
  199. package/packages/sdk/.trajectories/completed/traj_1771891934487_94378275.json +80 -0
  200. package/packages/sdk/.trajectories/completed/traj_1771891934503_ca728c13.json +80 -0
  201. package/packages/sdk/.trajectories/completed/traj_1771891934519_100af69a.json +80 -0
  202. package/packages/sdk/.trajectories/completed/traj_1771891934536_62ad39d9.json +80 -0
  203. package/packages/sdk/.trajectories/completed/traj_1771891934553_d6798a52.json +80 -0
  204. package/packages/sdk/.trajectories/completed/traj_1771891939537_541c8096.json +91 -0
  205. package/packages/sdk/.trajectories/completed/traj_1771891942985_36ab9a4d.json +91 -0
  206. package/packages/sdk/.trajectories/completed/traj_1771891946453_e8a6e05f.json +91 -0
  207. package/packages/sdk/.trajectories/completed/traj_1771891949838_5de0de84.json +91 -0
  208. package/packages/sdk/.trajectories/completed/traj_1771891957807_0ecfb4f4.json +80 -0
  209. package/packages/sdk/.trajectories/completed/traj_1771891957827_c4539239.json +80 -0
  210. package/packages/sdk/.trajectories/completed/traj_1771891957836_91168b48.json +80 -0
  211. package/packages/sdk/.trajectories/completed/traj_1771891957848_8c5cad0b.json +80 -0
  212. package/packages/sdk/.trajectories/completed/traj_1771891957857_0986b293.json +80 -0
  213. package/packages/sdk/.trajectories/completed/traj_1771891957872_8a3113af.json +80 -0
  214. package/packages/sdk/.trajectories/completed/traj_1771891957884_0bb85208.json +80 -0
  215. package/packages/sdk/.trajectories/completed/traj_1771891957892_86c75e2e.json +80 -0
  216. package/packages/sdk/.trajectories/completed/traj_1771891957907_98ca0e6f.json +80 -0
  217. package/packages/sdk/.trajectories/completed/traj_1771891957918_d9091231.json +80 -0
  218. package/packages/sdk/.trajectories/completed/traj_1771891957931_dcaf77ed.json +80 -0
  219. package/packages/sdk/.trajectories/completed/traj_1771891962931_eb1fdee2.json +91 -0
  220. package/packages/sdk/.trajectories/completed/traj_1771891966262_9061a93f.json +91 -0
  221. package/packages/sdk/.trajectories/completed/traj_1771891969915_1adaba19.json +91 -0
  222. package/packages/sdk/.trajectories/completed/traj_1771891973588_f08b79e9.json +91 -0
  223. package/packages/sdk/.trajectories/completed/traj_1771891982421_f1985bce.json +80 -0
  224. package/packages/sdk/.trajectories/completed/traj_1771891982432_e7a84163.json +80 -0
  225. package/packages/sdk/.trajectories/completed/traj_1771891982447_369b842a.json +80 -0
  226. package/packages/sdk/.trajectories/completed/traj_1771891982469_5fc45199.json +80 -0
  227. package/packages/sdk/.trajectories/completed/traj_1771891982495_454c7cb3.json +80 -0
  228. package/packages/sdk/.trajectories/completed/traj_1771891982514_08098e03.json +80 -0
  229. package/packages/sdk/.trajectories/completed/traj_1771891982526_b351d778.json +80 -0
  230. package/packages/sdk/.trajectories/completed/traj_1771891982533_fa542d83.json +80 -0
  231. package/packages/sdk/.trajectories/completed/traj_1771891982540_18ab24dc.json +80 -0
  232. package/packages/sdk/.trajectories/completed/traj_1771891982544_5b4fa163.json +80 -0
  233. package/packages/sdk/.trajectories/completed/traj_1771891982548_c13f089a.json +80 -0
  234. package/packages/sdk/.trajectories/completed/traj_1771891987510_23f6da1f.json +91 -0
  235. package/packages/sdk/.trajectories/completed/traj_1771891991466_912c2e04.json +91 -0
  236. package/packages/sdk/.trajectories/completed/traj_1771891994891_60604be2.json +91 -0
  237. package/packages/sdk/.trajectories/completed/traj_1771891998370_cfaf9b8b.json +91 -0
  238. package/packages/sdk/README.md +68 -838
  239. package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts +2 -0
  240. package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts.map +1 -0
  241. package/packages/sdk/dist/__tests__/contract-fixtures.test.js +85 -0
  242. package/packages/sdk/dist/__tests__/contract-fixtures.test.js.map +1 -0
  243. package/packages/sdk/dist/__tests__/facade.test.js +305 -0
  244. package/packages/sdk/dist/__tests__/facade.test.js.map +1 -0
  245. package/packages/sdk/dist/__tests__/integration.test.js +169 -0
  246. package/packages/sdk/dist/__tests__/integration.test.js.map +1 -0
  247. package/packages/sdk/dist/__tests__/pty.test.d.ts +2 -0
  248. package/packages/sdk/dist/__tests__/pty.test.d.ts.map +1 -0
  249. package/packages/sdk/dist/__tests__/pty.test.js +20 -0
  250. package/packages/sdk/dist/__tests__/pty.test.js.map +1 -0
  251. package/packages/sdk/dist/__tests__/quickstart.test.js +176 -0
  252. package/packages/sdk/dist/__tests__/quickstart.test.js.map +1 -0
  253. package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts +2 -0
  254. package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts.map +1 -0
  255. package/packages/sdk/dist/__tests__/spawn-from-env.test.js +206 -0
  256. package/packages/sdk/dist/__tests__/spawn-from-env.test.js.map +1 -0
  257. package/packages/sdk/dist/__tests__/unit.test.js +347 -0
  258. package/packages/sdk/dist/__tests__/unit.test.js.map +1 -0
  259. package/packages/sdk/dist/client.d.ts +140 -526
  260. package/packages/sdk/dist/client.d.ts.map +1 -1
  261. package/packages/sdk/dist/client.js +430 -1509
  262. package/packages/sdk/dist/client.js.map +1 -1
  263. package/packages/sdk/dist/examples/workflow-superiority.d.ts +32 -0
  264. package/packages/sdk/dist/examples/workflow-superiority.d.ts.map +1 -0
  265. package/packages/sdk/dist/examples/workflow-superiority.js +1421 -0
  266. package/packages/sdk/dist/examples/workflow-superiority.js.map +1 -0
  267. package/packages/sdk/dist/index.d.ts +13 -20
  268. package/packages/sdk/dist/index.d.ts.map +1 -1
  269. package/packages/sdk/dist/index.js +12 -26
  270. package/packages/sdk/dist/index.js.map +1 -1
  271. package/packages/sdk/dist/logs.d.ts +70 -25
  272. package/packages/sdk/dist/logs.d.ts.map +1 -1
  273. package/packages/sdk/dist/logs.js +238 -42
  274. package/packages/sdk/dist/logs.js.map +1 -1
  275. package/packages/sdk/dist/models.d.ts +9 -0
  276. package/packages/sdk/dist/models.d.ts.map +1 -0
  277. package/packages/sdk/dist/models.js +17 -0
  278. package/packages/sdk/dist/models.js.map +1 -0
  279. package/packages/sdk/dist/protocol.d.ts +366 -0
  280. package/packages/sdk/dist/protocol.d.ts.map +1 -0
  281. package/packages/sdk/dist/pty.d.ts.map +1 -0
  282. package/packages/sdk/dist/pty.js +26 -0
  283. package/packages/sdk/dist/pty.js.map +1 -0
  284. package/packages/sdk/dist/relay-adapter.d.ts +139 -0
  285. package/packages/sdk/dist/relay-adapter.d.ts.map +1 -0
  286. package/packages/sdk/dist/relay-adapter.js +210 -0
  287. package/packages/sdk/dist/relay-adapter.js.map +1 -0
  288. package/packages/sdk/dist/relay.d.ts +304 -0
  289. package/packages/sdk/dist/relay.d.ts.map +1 -0
  290. package/packages/sdk/dist/relay.js +910 -0
  291. package/packages/sdk/dist/relay.js.map +1 -0
  292. package/packages/sdk/dist/shadow.d.ts +101 -0
  293. package/packages/sdk/dist/shadow.d.ts.map +1 -0
  294. package/packages/sdk/dist/shadow.js.map +1 -0
  295. package/packages/sdk/dist/spawn-from-env.d.ts +77 -0
  296. package/packages/sdk/dist/spawn-from-env.d.ts.map +1 -0
  297. package/packages/sdk/dist/spawn-from-env.js +172 -0
  298. package/packages/sdk/dist/spawn-from-env.js.map +1 -0
  299. package/packages/sdk/dist/workflows/builder.d.ts +114 -0
  300. package/packages/sdk/dist/workflows/builder.d.ts.map +1 -0
  301. package/packages/sdk/dist/workflows/builder.js +201 -0
  302. package/packages/sdk/dist/workflows/builder.js.map +1 -0
  303. package/packages/sdk/dist/workflows/cli.d.ts +11 -0
  304. package/packages/sdk/dist/workflows/cli.d.ts.map +1 -0
  305. package/packages/sdk/dist/workflows/cli.js +144 -0
  306. package/packages/sdk/dist/workflows/cli.js.map +1 -0
  307. package/packages/sdk/dist/workflows/coordinator.d.ts +73 -0
  308. package/packages/sdk/dist/workflows/coordinator.d.ts.map +1 -0
  309. package/packages/sdk/dist/workflows/coordinator.js +647 -0
  310. package/packages/sdk/dist/workflows/coordinator.js.map +1 -0
  311. package/packages/sdk/dist/workflows/custom-steps.d.ts +73 -0
  312. package/packages/sdk/dist/workflows/custom-steps.d.ts.map +1 -0
  313. package/packages/sdk/dist/workflows/custom-steps.js +321 -0
  314. package/packages/sdk/dist/workflows/custom-steps.js.map +1 -0
  315. package/packages/sdk/dist/workflows/dry-run-format.d.ts +6 -0
  316. package/packages/sdk/dist/workflows/dry-run-format.d.ts.map +1 -0
  317. package/packages/sdk/dist/workflows/dry-run-format.js +68 -0
  318. package/packages/sdk/dist/workflows/dry-run-format.js.map +1 -0
  319. package/packages/sdk/dist/workflows/file-db.d.ts +33 -0
  320. package/packages/sdk/dist/workflows/file-db.d.ts.map +1 -0
  321. package/packages/sdk/dist/workflows/file-db.js +108 -0
  322. package/packages/sdk/dist/workflows/file-db.js.map +1 -0
  323. package/packages/sdk/dist/workflows/index.d.ts +15 -0
  324. package/packages/sdk/dist/workflows/index.d.ts.map +1 -0
  325. package/packages/sdk/dist/workflows/index.js +15 -0
  326. package/packages/sdk/dist/workflows/index.js.map +1 -0
  327. package/packages/sdk/dist/workflows/run.d.ts +38 -0
  328. package/packages/sdk/dist/workflows/run.d.ts.map +1 -0
  329. package/packages/sdk/dist/workflows/run.js +25 -0
  330. package/packages/sdk/dist/workflows/run.js.map +1 -0
  331. package/packages/sdk/dist/workflows/runner.d.ts +320 -0
  332. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -0
  333. package/packages/sdk/dist/workflows/runner.js +2821 -0
  334. package/packages/sdk/dist/workflows/runner.js.map +1 -0
  335. package/packages/sdk/dist/workflows/templates.d.ts +47 -0
  336. package/packages/sdk/dist/workflows/templates.d.ts.map +1 -0
  337. package/packages/sdk/dist/workflows/templates.js +405 -0
  338. package/packages/sdk/dist/workflows/templates.js.map +1 -0
  339. package/packages/sdk/dist/workflows/trajectory.d.ts +87 -0
  340. package/packages/sdk/dist/workflows/trajectory.d.ts.map +1 -0
  341. package/packages/sdk/dist/workflows/trajectory.js +441 -0
  342. package/packages/sdk/dist/workflows/trajectory.js.map +1 -0
  343. package/packages/sdk/dist/workflows/types.d.ts +306 -0
  344. package/packages/sdk/dist/workflows/types.d.ts.map +1 -0
  345. package/packages/sdk/dist/workflows/types.js +23 -0
  346. package/packages/sdk/dist/workflows/types.js.map +1 -0
  347. package/packages/sdk/dist/workflows/validator.d.ts +11 -0
  348. package/packages/sdk/dist/workflows/validator.d.ts.map +1 -0
  349. package/packages/sdk/dist/workflows/validator.js +128 -0
  350. package/packages/sdk/dist/workflows/validator.js.map +1 -0
  351. package/packages/sdk/package.json +59 -53
  352. package/packages/sdk/scripts/bundle-agent-relay.mjs +53 -0
  353. package/packages/sdk/src/__tests__/contract-fixtures.test.ts +122 -0
  354. package/packages/sdk/src/__tests__/error-scenarios.test.ts +682 -0
  355. package/packages/sdk/src/__tests__/facade.test.ts +364 -0
  356. package/packages/sdk/src/__tests__/idle-nudge.test.ts +438 -0
  357. package/packages/sdk/src/__tests__/integration.test.ts +204 -0
  358. package/packages/sdk/src/__tests__/orchestration-upgrades.test.ts +797 -0
  359. package/packages/sdk/src/__tests__/pty.test.ts +24 -0
  360. package/packages/sdk/src/__tests__/quickstart.test.ts +198 -0
  361. package/packages/sdk/src/__tests__/spawn-from-env.test.ts +282 -0
  362. package/packages/sdk/src/__tests__/swarm-coordinator.test.ts +909 -0
  363. package/packages/sdk/src/__tests__/unit.test.ts +435 -0
  364. package/packages/sdk/src/__tests__/workflow-runner.test.ts +489 -0
  365. package/packages/sdk/src/__tests__/yaml-validation.test.ts +890 -0
  366. package/packages/sdk/src/client.ts +527 -1911
  367. package/packages/sdk/src/examples/workflow-superiority.ts +1485 -0
  368. package/packages/sdk/src/examples/workflows/README.md +156 -0
  369. package/packages/sdk/src/examples/workflows/ralph-overnight.yaml +421 -0
  370. package/packages/sdk/src/examples/workflows/ralph-swarm.yaml +411 -0
  371. package/packages/sdk/src/examples/workflows/ralph-tdd.yaml +259 -0
  372. package/packages/sdk/src/index.ts +13 -116
  373. package/packages/sdk/src/logs.ts +282 -54
  374. package/packages/sdk/src/models.ts +36 -0
  375. package/packages/sdk/src/protocol.ts +385 -0
  376. package/packages/sdk/src/pty.ts +35 -0
  377. package/packages/sdk/src/relay-adapter.ts +316 -0
  378. package/packages/sdk/src/relay.ts +1147 -0
  379. package/packages/sdk/src/shadow.ts +228 -0
  380. package/packages/sdk/src/spawn-from-env.ts +245 -0
  381. package/packages/sdk/src/workflows/README.md +656 -0
  382. package/packages/sdk/src/workflows/builder.ts +278 -0
  383. package/packages/sdk/src/workflows/builtin-templates/bug-fix.yaml +135 -0
  384. package/packages/sdk/src/workflows/builtin-templates/code-review.yaml +133 -0
  385. package/packages/sdk/src/workflows/builtin-templates/competitive.yaml +103 -0
  386. package/packages/sdk/src/workflows/builtin-templates/documentation.yaml +120 -0
  387. package/packages/sdk/src/workflows/builtin-templates/feature-dev.yaml +142 -0
  388. package/packages/sdk/src/workflows/builtin-templates/refactor.yaml +141 -0
  389. package/packages/sdk/src/workflows/builtin-templates/review-loop.yaml +223 -0
  390. package/packages/sdk/src/workflows/builtin-templates/security-audit.yaml +129 -0
  391. package/packages/sdk/src/workflows/cli.ts +162 -0
  392. package/packages/sdk/src/workflows/coordinator.ts +842 -0
  393. package/packages/sdk/src/workflows/custom-steps.ts +450 -0
  394. package/packages/sdk/src/workflows/dry-run-format.ts +75 -0
  395. package/packages/sdk/src/workflows/file-db.ts +117 -0
  396. package/packages/sdk/src/workflows/index.ts +24 -0
  397. package/packages/sdk/src/workflows/run.ts +72 -0
  398. package/packages/sdk/src/workflows/runner.ts +3409 -0
  399. package/packages/sdk/src/workflows/schema.json +651 -0
  400. package/packages/sdk/src/workflows/templates.ts +552 -0
  401. package/packages/sdk/src/workflows/trajectory.ts +631 -0
  402. package/packages/sdk/src/workflows/types.ts +389 -0
  403. package/packages/sdk/src/workflows/validator.ts +151 -0
  404. package/packages/sdk/tsconfig.build.json +25 -0
  405. package/packages/sdk/tsconfig.json +17 -18
  406. package/packages/sdk/vitest.config.ts +1 -1
  407. package/packages/sdk-py/README.md +106 -21
  408. package/packages/sdk-py/agent_relay/__init__.py +21 -0
  409. package/packages/sdk-py/agent_relay/models.py +206 -0
  410. package/packages/sdk-py/pyproject.toml +2 -2
  411. package/packages/sdk-py/src/agent_relay/__init__.py +76 -0
  412. package/packages/sdk-py/src/agent_relay/builder.py +430 -109
  413. package/packages/sdk-py/src/agent_relay/templates.py +197 -0
  414. package/packages/sdk-py/src/agent_relay/types.py +489 -15
  415. package/packages/sdk-py/tests/test_builder.py +115 -1
  416. package/packages/sdk-py/tests/test_workflow_templates.py +450 -0
  417. package/packages/shared/cli-registry.yaml +193 -0
  418. package/packages/shared/codegen-py.mjs +215 -0
  419. package/packages/shared/codegen-ts.mjs +227 -0
  420. package/packages/telemetry/dist/events.d.ts +8 -8
  421. package/packages/telemetry/dist/index.d.ts +1 -1
  422. package/packages/telemetry/package.json +2 -2
  423. package/packages/telemetry/src/events.ts +9 -9
  424. package/packages/telemetry/src/index.ts +2 -2
  425. package/packages/trajectory/package.json +2 -2
  426. package/packages/user-directory/dist/user-directory.js +1 -1
  427. package/packages/user-directory/dist/user-directory.js.map +1 -1
  428. package/packages/user-directory/package.json +2 -2
  429. package/packages/user-directory/src/user-directory.ts +1 -1
  430. package/packages/utils/dist/cjs/client-helpers.js +4 -4
  431. package/packages/utils/dist/cjs/discovery.js +9 -6
  432. package/packages/utils/dist/cjs/errors.js +5 -5
  433. package/packages/utils/dist/cjs/legacy-protocol.js +70 -0
  434. package/packages/utils/dist/cjs/logger.js +3 -3
  435. package/packages/utils/dist/cjs/precompiled-patterns.js +33 -2
  436. package/packages/utils/dist/cjs/relay-pty-path.js +0 -6
  437. package/packages/utils/dist/client-helpers.d.ts +1 -1
  438. package/packages/utils/dist/client-helpers.d.ts.map +1 -1
  439. package/packages/utils/dist/client-helpers.js +1 -1
  440. package/packages/utils/dist/client-helpers.js.map +1 -1
  441. package/packages/utils/dist/discovery.d.ts +7 -7
  442. package/packages/utils/dist/discovery.d.ts.map +1 -1
  443. package/packages/utils/dist/discovery.js +20 -17
  444. package/packages/utils/dist/discovery.js.map +1 -1
  445. package/packages/utils/dist/errors.d.ts +1 -1
  446. package/packages/utils/dist/errors.js +3 -3
  447. package/packages/utils/dist/legacy-protocol.d.ts +46 -0
  448. package/packages/utils/dist/legacy-protocol.d.ts.map +1 -0
  449. package/packages/utils/dist/legacy-protocol.js +47 -0
  450. package/packages/utils/dist/legacy-protocol.js.map +1 -0
  451. package/packages/utils/dist/logger.d.ts +2 -2
  452. package/packages/utils/dist/logger.js +2 -2
  453. package/packages/utils/dist/precompiled-patterns.d.ts.map +1 -1
  454. package/packages/utils/dist/precompiled-patterns.js +28 -2
  455. package/packages/utils/dist/precompiled-patterns.js.map +1 -1
  456. package/packages/utils/dist/relay-pty-path.d.ts.map +1 -1
  457. package/packages/utils/dist/relay-pty-path.js +1 -10
  458. package/packages/utils/dist/relay-pty-path.js.map +1 -1
  459. package/packages/utils/package.json +2 -3
  460. package/packages/utils/src/client-helpers.ts +1 -1
  461. package/packages/utils/src/consolidation.test.ts +3 -3
  462. package/packages/utils/src/discovery.test.ts +3 -3
  463. package/packages/utils/src/discovery.ts +21 -18
  464. package/packages/utils/src/errors.test.ts +6 -11
  465. package/packages/utils/src/errors.ts +3 -3
  466. package/packages/utils/src/legacy-protocol.ts +151 -0
  467. package/packages/utils/src/logger.ts +2 -2
  468. package/packages/utils/src/precompiled-patterns.test.ts +8 -0
  469. package/packages/utils/src/precompiled-patterns.ts +40 -2
  470. package/packages/utils/src/relay-pty-path.test.ts +23 -34
  471. package/packages/utils/src/relay-pty-path.ts +1 -11
  472. package/relay-snippets/agent-relay-protocol.md +6 -43
  473. package/relay-snippets/agent-relay-snippet.md +59 -203
  474. package/scripts/postinstall.js +44 -171
  475. package/bin/relay-pty-darwin-arm64 +0 -0
  476. package/bin/relay-pty-darwin-x64 +0 -0
  477. package/bin/relay-pty-linux-arm64 +0 -0
  478. package/bin/relay-pty-linux-x64 +0 -0
  479. package/dist/src/bridge/index.d.ts +0 -8
  480. package/dist/src/bridge/index.d.ts.map +0 -1
  481. package/dist/src/bridge/index.js +0 -8
  482. package/dist/src/bridge/index.js.map +0 -1
  483. package/dist/src/continuity/index.d.ts +0 -5
  484. package/dist/src/continuity/index.d.ts.map +0 -1
  485. package/dist/src/continuity/index.js +0 -5
  486. package/dist/src/continuity/index.js.map +0 -1
  487. package/dist/src/daemon/index.d.ts +0 -8
  488. package/dist/src/daemon/index.d.ts.map +0 -1
  489. package/dist/src/daemon/index.js +0 -9
  490. package/dist/src/daemon/index.js.map +0 -1
  491. package/dist/src/protocol/index.d.ts +0 -8
  492. package/dist/src/protocol/index.d.ts.map +0 -1
  493. package/dist/src/protocol/index.js +0 -8
  494. package/dist/src/protocol/index.js.map +0 -1
  495. package/dist/src/resiliency/index.d.ts +0 -5
  496. package/dist/src/resiliency/index.d.ts.map +0 -1
  497. package/dist/src/resiliency/index.js +0 -5
  498. package/dist/src/resiliency/index.js.map +0 -1
  499. package/dist/src/state/index.d.ts +0 -5
  500. package/dist/src/state/index.d.ts.map +0 -1
  501. package/dist/src/state/index.js +0 -5
  502. package/dist/src/state/index.js.map +0 -1
  503. package/dist/src/storage/index.d.ts +0 -8
  504. package/dist/src/storage/index.d.ts.map +0 -1
  505. package/dist/src/storage/index.js +0 -8
  506. package/dist/src/storage/index.js.map +0 -1
  507. package/dist/src/wrapper/index.d.ts +0 -8
  508. package/dist/src/wrapper/index.d.ts.map +0 -1
  509. package/dist/src/wrapper/index.js +0 -11
  510. package/dist/src/wrapper/index.js.map +0 -1
  511. package/packages/bridge/dist/cli-resolution.d.ts +0 -32
  512. package/packages/bridge/dist/cli-resolution.d.ts.map +0 -1
  513. package/packages/bridge/dist/cli-resolution.js +0 -88
  514. package/packages/bridge/dist/cli-resolution.js.map +0 -1
  515. package/packages/bridge/dist/index.d.ts +0 -9
  516. package/packages/bridge/dist/index.d.ts.map +0 -1
  517. package/packages/bridge/dist/index.js +0 -11
  518. package/packages/bridge/dist/index.js.map +0 -1
  519. package/packages/bridge/dist/multi-project-client.d.ts +0 -99
  520. package/packages/bridge/dist/multi-project-client.d.ts.map +0 -1
  521. package/packages/bridge/dist/multi-project-client.js +0 -389
  522. package/packages/bridge/dist/multi-project-client.js.map +0 -1
  523. package/packages/bridge/dist/shadow-cli.d.ts +0 -17
  524. package/packages/bridge/dist/shadow-cli.d.ts.map +0 -1
  525. package/packages/bridge/dist/shadow-cli.js +0 -75
  526. package/packages/bridge/dist/shadow-cli.js.map +0 -1
  527. package/packages/bridge/dist/spawner.d.ts +0 -263
  528. package/packages/bridge/dist/spawner.d.ts.map +0 -1
  529. package/packages/bridge/dist/spawner.js +0 -1758
  530. package/packages/bridge/dist/spawner.js.map +0 -1
  531. package/packages/bridge/dist/types.d.ts +0 -141
  532. package/packages/bridge/dist/types.d.ts.map +0 -1
  533. package/packages/bridge/dist/types.js +0 -6
  534. package/packages/bridge/dist/types.js.map +0 -1
  535. package/packages/bridge/dist/utils.d.ts +0 -39
  536. package/packages/bridge/dist/utils.d.ts.map +0 -1
  537. package/packages/bridge/dist/utils.js +0 -98
  538. package/packages/bridge/dist/utils.js.map +0 -1
  539. package/packages/bridge/package.json +0 -45
  540. package/packages/bridge/src/cli-resolution.test.ts +0 -225
  541. package/packages/bridge/src/cli-resolution.ts +0 -100
  542. package/packages/bridge/src/index.ts +0 -34
  543. package/packages/bridge/src/multi-project-client.test.ts +0 -340
  544. package/packages/bridge/src/multi-project-client.ts +0 -469
  545. package/packages/bridge/src/shadow-cli.ts +0 -95
  546. package/packages/bridge/src/spawner-mcp.test.ts +0 -505
  547. package/packages/bridge/src/spawner.ts +0 -2067
  548. package/packages/bridge/src/types.ts +0 -153
  549. package/packages/bridge/src/utils.test.ts +0 -235
  550. package/packages/bridge/src/utils.ts +0 -113
  551. package/packages/bridge/tsconfig.json +0 -29
  552. package/packages/bridge/vitest.config.ts +0 -9
  553. package/packages/broker-sdk/README.md +0 -97
  554. package/packages/broker-sdk/dist/__tests__/facade.test.js +0 -257
  555. package/packages/broker-sdk/dist/__tests__/facade.test.js.map +0 -1
  556. package/packages/broker-sdk/dist/__tests__/integration.test.js +0 -139
  557. package/packages/broker-sdk/dist/__tests__/integration.test.js.map +0 -1
  558. package/packages/broker-sdk/dist/__tests__/quickstart.test.js +0 -176
  559. package/packages/broker-sdk/dist/__tests__/quickstart.test.js.map +0 -1
  560. package/packages/broker-sdk/dist/__tests__/unit.test.js +0 -192
  561. package/packages/broker-sdk/dist/__tests__/unit.test.js.map +0 -1
  562. package/packages/broker-sdk/dist/client.d.ts +0 -95
  563. package/packages/broker-sdk/dist/client.d.ts.map +0 -1
  564. package/packages/broker-sdk/dist/client.js +0 -372
  565. package/packages/broker-sdk/dist/client.js.map +0 -1
  566. package/packages/broker-sdk/dist/index.d.ts +0 -10
  567. package/packages/broker-sdk/dist/index.d.ts.map +0 -1
  568. package/packages/broker-sdk/dist/index.js +0 -10
  569. package/packages/broker-sdk/dist/index.js.map +0 -1
  570. package/packages/broker-sdk/dist/logs.d.ts +0 -47
  571. package/packages/broker-sdk/dist/logs.d.ts.map +0 -1
  572. package/packages/broker-sdk/dist/logs.js +0 -137
  573. package/packages/broker-sdk/dist/logs.js.map +0 -1
  574. package/packages/broker-sdk/dist/protocol.d.ts +0 -254
  575. package/packages/broker-sdk/dist/protocol.d.ts.map +0 -1
  576. package/packages/broker-sdk/dist/pty.d.ts.map +0 -1
  577. package/packages/broker-sdk/dist/pty.js +0 -14
  578. package/packages/broker-sdk/dist/pty.js.map +0 -1
  579. package/packages/broker-sdk/dist/relay.d.ts +0 -172
  580. package/packages/broker-sdk/dist/relay.d.ts.map +0 -1
  581. package/packages/broker-sdk/dist/relay.js +0 -486
  582. package/packages/broker-sdk/dist/relay.js.map +0 -1
  583. package/packages/broker-sdk/dist/relaycast.d.ts +0 -67
  584. package/packages/broker-sdk/dist/relaycast.d.ts.map +0 -1
  585. package/packages/broker-sdk/dist/relaycast.js +0 -150
  586. package/packages/broker-sdk/dist/relaycast.js.map +0 -1
  587. package/packages/broker-sdk/dist/shadow.d.ts +0 -100
  588. package/packages/broker-sdk/dist/shadow.d.ts.map +0 -1
  589. package/packages/broker-sdk/dist/shadow.js.map +0 -1
  590. package/packages/broker-sdk/dist/workflows/builder.d.ts +0 -101
  591. package/packages/broker-sdk/dist/workflows/builder.d.ts.map +0 -1
  592. package/packages/broker-sdk/dist/workflows/builder.js +0 -179
  593. package/packages/broker-sdk/dist/workflows/builder.js.map +0 -1
  594. package/packages/broker-sdk/dist/workflows/cli.d.ts +0 -10
  595. package/packages/broker-sdk/dist/workflows/cli.d.ts.map +0 -1
  596. package/packages/broker-sdk/dist/workflows/cli.js +0 -82
  597. package/packages/broker-sdk/dist/workflows/cli.js.map +0 -1
  598. package/packages/broker-sdk/dist/workflows/coordinator.d.ts +0 -69
  599. package/packages/broker-sdk/dist/workflows/coordinator.d.ts.map +0 -1
  600. package/packages/broker-sdk/dist/workflows/coordinator.js +0 -585
  601. package/packages/broker-sdk/dist/workflows/coordinator.js.map +0 -1
  602. package/packages/broker-sdk/dist/workflows/index.d.ts +0 -11
  603. package/packages/broker-sdk/dist/workflows/index.d.ts.map +0 -1
  604. package/packages/broker-sdk/dist/workflows/index.js +0 -11
  605. package/packages/broker-sdk/dist/workflows/index.js.map +0 -1
  606. package/packages/broker-sdk/dist/workflows/run.d.ts +0 -33
  607. package/packages/broker-sdk/dist/workflows/run.d.ts.map +0 -1
  608. package/packages/broker-sdk/dist/workflows/run.js +0 -28
  609. package/packages/broker-sdk/dist/workflows/run.js.map +0 -1
  610. package/packages/broker-sdk/dist/workflows/runner.d.ts +0 -136
  611. package/packages/broker-sdk/dist/workflows/runner.d.ts.map +0 -1
  612. package/packages/broker-sdk/dist/workflows/runner.js +0 -900
  613. package/packages/broker-sdk/dist/workflows/runner.js.map +0 -1
  614. package/packages/broker-sdk/dist/workflows/templates.d.ts +0 -47
  615. package/packages/broker-sdk/dist/workflows/templates.d.ts.map +0 -1
  616. package/packages/broker-sdk/dist/workflows/templates.js +0 -395
  617. package/packages/broker-sdk/dist/workflows/templates.js.map +0 -1
  618. package/packages/broker-sdk/dist/workflows/trajectory.d.ts +0 -80
  619. package/packages/broker-sdk/dist/workflows/trajectory.d.ts.map +0 -1
  620. package/packages/broker-sdk/dist/workflows/trajectory.js +0 -362
  621. package/packages/broker-sdk/dist/workflows/trajectory.js.map +0 -1
  622. package/packages/broker-sdk/dist/workflows/types.d.ts +0 -140
  623. package/packages/broker-sdk/dist/workflows/types.d.ts.map +0 -1
  624. package/packages/broker-sdk/dist/workflows/types.js +0 -8
  625. package/packages/broker-sdk/dist/workflows/types.js.map +0 -1
  626. package/packages/broker-sdk/package.json +0 -81
  627. package/packages/broker-sdk/scripts/bundle-agent-relay.mjs +0 -53
  628. package/packages/broker-sdk/src/__tests__/error-scenarios.test.ts +0 -682
  629. package/packages/broker-sdk/src/__tests__/facade.test.ts +0 -296
  630. package/packages/broker-sdk/src/__tests__/integration.test.ts +0 -170
  631. package/packages/broker-sdk/src/__tests__/quickstart.test.ts +0 -198
  632. package/packages/broker-sdk/src/__tests__/swarm-coordinator.test.ts +0 -772
  633. package/packages/broker-sdk/src/__tests__/unit.test.ts +0 -243
  634. package/packages/broker-sdk/src/__tests__/workflow-runner.test.ts +0 -333
  635. package/packages/broker-sdk/src/client.ts +0 -510
  636. package/packages/broker-sdk/src/index.ts +0 -9
  637. package/packages/broker-sdk/src/logs.ts +0 -163
  638. package/packages/broker-sdk/src/protocol.ts +0 -271
  639. package/packages/broker-sdk/src/pty.ts +0 -16
  640. package/packages/broker-sdk/src/relay.ts +0 -614
  641. package/packages/broker-sdk/src/relaycast.ts +0 -185
  642. package/packages/broker-sdk/src/shadow.ts +0 -230
  643. package/packages/broker-sdk/src/workflows/README.md +0 -514
  644. package/packages/broker-sdk/src/workflows/builder.ts +0 -241
  645. package/packages/broker-sdk/src/workflows/builtin-templates/bug-fix.yaml +0 -75
  646. package/packages/broker-sdk/src/workflows/builtin-templates/code-review.yaml +0 -82
  647. package/packages/broker-sdk/src/workflows/builtin-templates/documentation.yaml +0 -70
  648. package/packages/broker-sdk/src/workflows/builtin-templates/feature-dev.yaml +0 -76
  649. package/packages/broker-sdk/src/workflows/builtin-templates/refactor.yaml +0 -82
  650. package/packages/broker-sdk/src/workflows/builtin-templates/security-audit.yaml +0 -84
  651. package/packages/broker-sdk/src/workflows/cli.ts +0 -93
  652. package/packages/broker-sdk/src/workflows/coordinator.ts +0 -758
  653. package/packages/broker-sdk/src/workflows/index.ts +0 -10
  654. package/packages/broker-sdk/src/workflows/run.ts +0 -55
  655. package/packages/broker-sdk/src/workflows/runner.ts +0 -1184
  656. package/packages/broker-sdk/src/workflows/schema.json +0 -333
  657. package/packages/broker-sdk/src/workflows/templates.ts +0 -544
  658. package/packages/broker-sdk/src/workflows/trajectory.ts +0 -507
  659. package/packages/broker-sdk/src/workflows/types.ts +0 -208
  660. package/packages/broker-sdk/tsconfig.json +0 -22
  661. package/packages/broker-sdk/vitest.config.ts +0 -9
  662. package/packages/continuity/dist/formatter.d.ts +0 -57
  663. package/packages/continuity/dist/formatter.d.ts.map +0 -1
  664. package/packages/continuity/dist/formatter.js +0 -448
  665. package/packages/continuity/dist/formatter.js.map +0 -1
  666. package/packages/continuity/dist/handoff-store.d.ts +0 -67
  667. package/packages/continuity/dist/handoff-store.d.ts.map +0 -1
  668. package/packages/continuity/dist/handoff-store.js +0 -472
  669. package/packages/continuity/dist/handoff-store.js.map +0 -1
  670. package/packages/continuity/dist/index.d.ts +0 -10
  671. package/packages/continuity/dist/index.d.ts.map +0 -1
  672. package/packages/continuity/dist/index.js +0 -11
  673. package/packages/continuity/dist/index.js.map +0 -1
  674. package/packages/continuity/dist/ledger-store.d.ts +0 -110
  675. package/packages/continuity/dist/ledger-store.d.ts.map +0 -1
  676. package/packages/continuity/dist/ledger-store.js +0 -500
  677. package/packages/continuity/dist/ledger-store.js.map +0 -1
  678. package/packages/continuity/dist/manager.d.ts +0 -183
  679. package/packages/continuity/dist/manager.d.ts.map +0 -1
  680. package/packages/continuity/dist/manager.js +0 -616
  681. package/packages/continuity/dist/manager.js.map +0 -1
  682. package/packages/continuity/dist/parser.d.ts +0 -76
  683. package/packages/continuity/dist/parser.d.ts.map +0 -1
  684. package/packages/continuity/dist/parser.js +0 -579
  685. package/packages/continuity/dist/parser.js.map +0 -1
  686. package/packages/continuity/dist/types.d.ts +0 -180
  687. package/packages/continuity/dist/types.d.ts.map +0 -1
  688. package/packages/continuity/dist/types.js +0 -2
  689. package/packages/continuity/dist/types.js.map +0 -1
  690. package/packages/continuity/package.json +0 -40
  691. package/packages/continuity/src/formatter.ts +0 -536
  692. package/packages/continuity/src/handoff-store.ts +0 -523
  693. package/packages/continuity/src/index.ts +0 -12
  694. package/packages/continuity/src/ledger-store.ts +0 -594
  695. package/packages/continuity/src/manager.test.ts +0 -291
  696. package/packages/continuity/src/manager.ts +0 -774
  697. package/packages/continuity/src/parser.test.ts +0 -292
  698. package/packages/continuity/src/parser.ts +0 -680
  699. package/packages/continuity/src/types.ts +0 -211
  700. package/packages/continuity/tsconfig.json +0 -21
  701. package/packages/continuity/vitest.config.ts +0 -9
  702. package/packages/daemon/dist/agent-manager.d.ts +0 -134
  703. package/packages/daemon/dist/agent-manager.d.ts.map +0 -1
  704. package/packages/daemon/dist/agent-manager.js +0 -578
  705. package/packages/daemon/dist/agent-manager.js.map +0 -1
  706. package/packages/daemon/dist/agent-registry.d.ts +0 -99
  707. package/packages/daemon/dist/agent-registry.d.ts.map +0 -1
  708. package/packages/daemon/dist/agent-registry.js +0 -213
  709. package/packages/daemon/dist/agent-registry.js.map +0 -1
  710. package/packages/daemon/dist/agent-signing.d.ts +0 -158
  711. package/packages/daemon/dist/agent-signing.d.ts.map +0 -1
  712. package/packages/daemon/dist/agent-signing.js +0 -523
  713. package/packages/daemon/dist/agent-signing.js.map +0 -1
  714. package/packages/daemon/dist/api.d.ts +0 -106
  715. package/packages/daemon/dist/api.d.ts.map +0 -1
  716. package/packages/daemon/dist/api.js +0 -895
  717. package/packages/daemon/dist/api.js.map +0 -1
  718. package/packages/daemon/dist/auth.d.ts +0 -94
  719. package/packages/daemon/dist/auth.d.ts.map +0 -1
  720. package/packages/daemon/dist/auth.js +0 -197
  721. package/packages/daemon/dist/auth.js.map +0 -1
  722. package/packages/daemon/dist/channel-membership-store.d.ts +0 -55
  723. package/packages/daemon/dist/channel-membership-store.d.ts.map +0 -1
  724. package/packages/daemon/dist/channel-membership-store.js +0 -176
  725. package/packages/daemon/dist/channel-membership-store.js.map +0 -1
  726. package/packages/daemon/dist/cli-auth.d.ts +0 -97
  727. package/packages/daemon/dist/cli-auth.d.ts.map +0 -1
  728. package/packages/daemon/dist/cli-auth.js +0 -808
  729. package/packages/daemon/dist/cli-auth.js.map +0 -1
  730. package/packages/daemon/dist/cloud-sync.d.ts +0 -263
  731. package/packages/daemon/dist/cloud-sync.d.ts.map +0 -1
  732. package/packages/daemon/dist/cloud-sync.js +0 -820
  733. package/packages/daemon/dist/cloud-sync.js.map +0 -1
  734. package/packages/daemon/dist/connection.d.ts +0 -137
  735. package/packages/daemon/dist/connection.d.ts.map +0 -1
  736. package/packages/daemon/dist/connection.js +0 -465
  737. package/packages/daemon/dist/connection.js.map +0 -1
  738. package/packages/daemon/dist/consensus-integration.d.ts +0 -168
  739. package/packages/daemon/dist/consensus-integration.d.ts.map +0 -1
  740. package/packages/daemon/dist/consensus-integration.js +0 -371
  741. package/packages/daemon/dist/consensus-integration.js.map +0 -1
  742. package/packages/daemon/dist/consensus.d.ts +0 -269
  743. package/packages/daemon/dist/consensus.d.ts.map +0 -1
  744. package/packages/daemon/dist/consensus.js +0 -632
  745. package/packages/daemon/dist/consensus.js.map +0 -1
  746. package/packages/daemon/dist/delivery-tracker.d.ts +0 -34
  747. package/packages/daemon/dist/delivery-tracker.d.ts.map +0 -1
  748. package/packages/daemon/dist/delivery-tracker.js +0 -104
  749. package/packages/daemon/dist/delivery-tracker.js.map +0 -1
  750. package/packages/daemon/dist/enhanced-features.d.ts +0 -118
  751. package/packages/daemon/dist/enhanced-features.d.ts.map +0 -1
  752. package/packages/daemon/dist/enhanced-features.js +0 -177
  753. package/packages/daemon/dist/enhanced-features.js.map +0 -1
  754. package/packages/daemon/dist/index.d.ts +0 -29
  755. package/packages/daemon/dist/index.d.ts.map +0 -1
  756. package/packages/daemon/dist/index.js +0 -34
  757. package/packages/daemon/dist/index.js.map +0 -1
  758. package/packages/daemon/dist/orchestrator.d.ts +0 -217
  759. package/packages/daemon/dist/orchestrator.d.ts.map +0 -1
  760. package/packages/daemon/dist/orchestrator.js +0 -1172
  761. package/packages/daemon/dist/orchestrator.js.map +0 -1
  762. package/packages/daemon/dist/rate-limiter.d.ts +0 -68
  763. package/packages/daemon/dist/rate-limiter.d.ts.map +0 -1
  764. package/packages/daemon/dist/rate-limiter.js +0 -130
  765. package/packages/daemon/dist/rate-limiter.js.map +0 -1
  766. package/packages/daemon/dist/registry.d.ts +0 -9
  767. package/packages/daemon/dist/registry.d.ts.map +0 -1
  768. package/packages/daemon/dist/registry.js +0 -9
  769. package/packages/daemon/dist/registry.js.map +0 -1
  770. package/packages/daemon/dist/repo-manager.d.ts +0 -116
  771. package/packages/daemon/dist/repo-manager.d.ts.map +0 -1
  772. package/packages/daemon/dist/repo-manager.js +0 -384
  773. package/packages/daemon/dist/repo-manager.js.map +0 -1
  774. package/packages/daemon/dist/router.d.ts +0 -389
  775. package/packages/daemon/dist/router.d.ts.map +0 -1
  776. package/packages/daemon/dist/router.js +0 -1607
  777. package/packages/daemon/dist/router.js.map +0 -1
  778. package/packages/daemon/dist/server.d.ts +0 -201
  779. package/packages/daemon/dist/server.d.ts.map +0 -1
  780. package/packages/daemon/dist/server.js +0 -1791
  781. package/packages/daemon/dist/server.js.map +0 -1
  782. package/packages/daemon/dist/spawn-manager.d.ts +0 -119
  783. package/packages/daemon/dist/spawn-manager.d.ts.map +0 -1
  784. package/packages/daemon/dist/spawn-manager.js +0 -319
  785. package/packages/daemon/dist/spawn-manager.js.map +0 -1
  786. package/packages/daemon/dist/sync-queue.d.ts +0 -116
  787. package/packages/daemon/dist/sync-queue.d.ts.map +0 -1
  788. package/packages/daemon/dist/sync-queue.js +0 -361
  789. package/packages/daemon/dist/sync-queue.js.map +0 -1
  790. package/packages/daemon/dist/types.d.ts +0 -133
  791. package/packages/daemon/dist/types.d.ts.map +0 -1
  792. package/packages/daemon/dist/types.js +0 -6
  793. package/packages/daemon/dist/types.js.map +0 -1
  794. package/packages/daemon/dist/workspace-manager.d.ts +0 -80
  795. package/packages/daemon/dist/workspace-manager.d.ts.map +0 -1
  796. package/packages/daemon/dist/workspace-manager.js +0 -314
  797. package/packages/daemon/dist/workspace-manager.js.map +0 -1
  798. package/packages/daemon/package.json +0 -56
  799. package/packages/daemon/src/agent-manager.ts +0 -679
  800. package/packages/daemon/src/agent-registry.ts +0 -284
  801. package/packages/daemon/src/agent-signing.ts +0 -707
  802. package/packages/daemon/src/api.ts +0 -1034
  803. package/packages/daemon/src/auth.ts +0 -276
  804. package/packages/daemon/src/channel-membership-store.ts +0 -217
  805. package/packages/daemon/src/cli-auth.ts +0 -945
  806. package/packages/daemon/src/cloud-sync.ts +0 -1100
  807. package/packages/daemon/src/connection.ts +0 -561
  808. package/packages/daemon/src/consensus-integration.ts +0 -510
  809. package/packages/daemon/src/consensus.ts +0 -848
  810. package/packages/daemon/src/delivery-tracker.ts +0 -145
  811. package/packages/daemon/src/enhanced-features.ts +0 -390
  812. package/packages/daemon/src/index.ts +0 -48
  813. package/packages/daemon/src/orchestrator.test.ts +0 -231
  814. package/packages/daemon/src/orchestrator.ts +0 -1376
  815. package/packages/daemon/src/rate-limiter.ts +0 -172
  816. package/packages/daemon/src/registry.ts +0 -8
  817. package/packages/daemon/src/repo-manager.ts +0 -468
  818. package/packages/daemon/src/router.test.ts +0 -181
  819. package/packages/daemon/src/router.ts +0 -1925
  820. package/packages/daemon/src/server.ts +0 -2051
  821. package/packages/daemon/src/spawn-manager-set-model.test.ts +0 -144
  822. package/packages/daemon/src/spawn-manager.ts +0 -415
  823. package/packages/daemon/src/sync-queue.ts +0 -477
  824. package/packages/daemon/src/types.ts +0 -158
  825. package/packages/daemon/src/workspace-manager.ts +0 -371
  826. package/packages/daemon/tsconfig.json +0 -21
  827. package/packages/daemon/vitest.config.ts +0 -9
  828. package/packages/mcp/CHANGELOG.md +0 -28
  829. package/packages/mcp/LICENSE +0 -190
  830. package/packages/mcp/README.md +0 -266
  831. package/packages/mcp/dist/bin.d.ts +0 -12
  832. package/packages/mcp/dist/bin.d.ts.map +0 -1
  833. package/packages/mcp/dist/bin.js +0 -179
  834. package/packages/mcp/dist/bin.js.map +0 -1
  835. package/packages/mcp/dist/client-adapter.d.ts +0 -164
  836. package/packages/mcp/dist/client-adapter.d.ts.map +0 -1
  837. package/packages/mcp/dist/client-adapter.js +0 -231
  838. package/packages/mcp/dist/client-adapter.js.map +0 -1
  839. package/packages/mcp/dist/cloud.d.ts +0 -13
  840. package/packages/mcp/dist/cloud.d.ts.map +0 -1
  841. package/packages/mcp/dist/cloud.js +0 -25
  842. package/packages/mcp/dist/cloud.js.map +0 -1
  843. package/packages/mcp/dist/errors.d.ts +0 -9
  844. package/packages/mcp/dist/errors.d.ts.map +0 -1
  845. package/packages/mcp/dist/errors.js +0 -9
  846. package/packages/mcp/dist/errors.js.map +0 -1
  847. package/packages/mcp/dist/file-transport.d.ts +0 -103
  848. package/packages/mcp/dist/file-transport.d.ts.map +0 -1
  849. package/packages/mcp/dist/file-transport.js +0 -204
  850. package/packages/mcp/dist/file-transport.js.map +0 -1
  851. package/packages/mcp/dist/hybrid-client.d.ts +0 -5
  852. package/packages/mcp/dist/hybrid-client.d.ts.map +0 -1
  853. package/packages/mcp/dist/hybrid-client.js +0 -23
  854. package/packages/mcp/dist/hybrid-client.js.map +0 -1
  855. package/packages/mcp/dist/index.d.ts +0 -11
  856. package/packages/mcp/dist/index.d.ts.map +0 -1
  857. package/packages/mcp/dist/index.js +0 -25
  858. package/packages/mcp/dist/index.js.map +0 -1
  859. package/packages/mcp/dist/install-cli.d.ts +0 -35
  860. package/packages/mcp/dist/install-cli.d.ts.map +0 -1
  861. package/packages/mcp/dist/install-cli.js +0 -157
  862. package/packages/mcp/dist/install-cli.js.map +0 -1
  863. package/packages/mcp/dist/install.d.ts +0 -123
  864. package/packages/mcp/dist/install.d.ts.map +0 -1
  865. package/packages/mcp/dist/install.js +0 -661
  866. package/packages/mcp/dist/install.js.map +0 -1
  867. package/packages/mcp/dist/prompts/index.d.ts +0 -2
  868. package/packages/mcp/dist/prompts/index.d.ts.map +0 -1
  869. package/packages/mcp/dist/prompts/index.js +0 -2
  870. package/packages/mcp/dist/prompts/index.js.map +0 -1
  871. package/packages/mcp/dist/prompts/protocol.d.ts +0 -11
  872. package/packages/mcp/dist/prompts/protocol.d.ts.map +0 -1
  873. package/packages/mcp/dist/prompts/protocol.js +0 -160
  874. package/packages/mcp/dist/prompts/protocol.js.map +0 -1
  875. package/packages/mcp/dist/resources/agents.d.ts +0 -11
  876. package/packages/mcp/dist/resources/agents.d.ts.map +0 -1
  877. package/packages/mcp/dist/resources/agents.js +0 -17
  878. package/packages/mcp/dist/resources/agents.js.map +0 -1
  879. package/packages/mcp/dist/resources/inbox.d.ts +0 -11
  880. package/packages/mcp/dist/resources/inbox.d.ts.map +0 -1
  881. package/packages/mcp/dist/resources/inbox.js +0 -17
  882. package/packages/mcp/dist/resources/inbox.js.map +0 -1
  883. package/packages/mcp/dist/resources/index.d.ts +0 -4
  884. package/packages/mcp/dist/resources/index.d.ts.map +0 -1
  885. package/packages/mcp/dist/resources/index.js +0 -4
  886. package/packages/mcp/dist/resources/index.js.map +0 -1
  887. package/packages/mcp/dist/resources/project.d.ts +0 -11
  888. package/packages/mcp/dist/resources/project.d.ts.map +0 -1
  889. package/packages/mcp/dist/resources/project.js +0 -21
  890. package/packages/mcp/dist/resources/project.js.map +0 -1
  891. package/packages/mcp/dist/server.d.ts +0 -23
  892. package/packages/mcp/dist/server.d.ts.map +0 -1
  893. package/packages/mcp/dist/server.js +0 -317
  894. package/packages/mcp/dist/server.js.map +0 -1
  895. package/packages/mcp/dist/simple.d.ts +0 -170
  896. package/packages/mcp/dist/simple.d.ts.map +0 -1
  897. package/packages/mcp/dist/simple.js +0 -120
  898. package/packages/mcp/dist/simple.js.map +0 -1
  899. package/packages/mcp/dist/tools/index.d.ts +0 -20
  900. package/packages/mcp/dist/tools/index.d.ts.map +0 -1
  901. package/packages/mcp/dist/tools/index.js +0 -20
  902. package/packages/mcp/dist/tools/index.js.map +0 -1
  903. package/packages/mcp/dist/tools/relay-broadcast.d.ts +0 -20
  904. package/packages/mcp/dist/tools/relay-broadcast.d.ts.map +0 -1
  905. package/packages/mcp/dist/tools/relay-broadcast.js +0 -25
  906. package/packages/mcp/dist/tools/relay-broadcast.js.map +0 -1
  907. package/packages/mcp/dist/tools/relay-channel.d.ts +0 -75
  908. package/packages/mcp/dist/tools/relay-channel.d.ts.map +0 -1
  909. package/packages/mcp/dist/tools/relay-channel.js +0 -124
  910. package/packages/mcp/dist/tools/relay-channel.js.map +0 -1
  911. package/packages/mcp/dist/tools/relay-connected.d.ts +0 -17
  912. package/packages/mcp/dist/tools/relay-connected.d.ts.map +0 -1
  913. package/packages/mcp/dist/tools/relay-connected.js +0 -54
  914. package/packages/mcp/dist/tools/relay-connected.js.map +0 -1
  915. package/packages/mcp/dist/tools/relay-consensus.d.ts +0 -45
  916. package/packages/mcp/dist/tools/relay-consensus.d.ts.map +0 -1
  917. package/packages/mcp/dist/tools/relay-consensus.js +0 -80
  918. package/packages/mcp/dist/tools/relay-consensus.js.map +0 -1
  919. package/packages/mcp/dist/tools/relay-continuity.d.ts +0 -35
  920. package/packages/mcp/dist/tools/relay-continuity.d.ts.map +0 -1
  921. package/packages/mcp/dist/tools/relay-continuity.js +0 -101
  922. package/packages/mcp/dist/tools/relay-continuity.js.map +0 -1
  923. package/packages/mcp/dist/tools/relay-health.d.ts +0 -20
  924. package/packages/mcp/dist/tools/relay-health.d.ts.map +0 -1
  925. package/packages/mcp/dist/tools/relay-health.js +0 -130
  926. package/packages/mcp/dist/tools/relay-health.js.map +0 -1
  927. package/packages/mcp/dist/tools/relay-inbox.d.ts +0 -26
  928. package/packages/mcp/dist/tools/relay-inbox.d.ts.map +0 -1
  929. package/packages/mcp/dist/tools/relay-inbox.js +0 -58
  930. package/packages/mcp/dist/tools/relay-inbox.js.map +0 -1
  931. package/packages/mcp/dist/tools/relay-logs.d.ts +0 -20
  932. package/packages/mcp/dist/tools/relay-logs.d.ts.map +0 -1
  933. package/packages/mcp/dist/tools/relay-logs.js +0 -90
  934. package/packages/mcp/dist/tools/relay-logs.js.map +0 -1
  935. package/packages/mcp/dist/tools/relay-messages.d.ts +0 -32
  936. package/packages/mcp/dist/tools/relay-messages.d.ts.map +0 -1
  937. package/packages/mcp/dist/tools/relay-messages.js +0 -61
  938. package/packages/mcp/dist/tools/relay-messages.js.map +0 -1
  939. package/packages/mcp/dist/tools/relay-metrics.d.ts +0 -17
  940. package/packages/mcp/dist/tools/relay-metrics.d.ts.map +0 -1
  941. package/packages/mcp/dist/tools/relay-metrics.js +0 -124
  942. package/packages/mcp/dist/tools/relay-metrics.js.map +0 -1
  943. package/packages/mcp/dist/tools/relay-release.d.ts +0 -20
  944. package/packages/mcp/dist/tools/relay-release.d.ts.map +0 -1
  945. package/packages/mcp/dist/tools/relay-release.js +0 -44
  946. package/packages/mcp/dist/tools/relay-release.js.map +0 -1
  947. package/packages/mcp/dist/tools/relay-remove-agent.d.ts +0 -20
  948. package/packages/mcp/dist/tools/relay-remove-agent.d.ts.map +0 -1
  949. package/packages/mcp/dist/tools/relay-remove-agent.js +0 -50
  950. package/packages/mcp/dist/tools/relay-remove-agent.js.map +0 -1
  951. package/packages/mcp/dist/tools/relay-send.d.ts +0 -29
  952. package/packages/mcp/dist/tools/relay-send.d.ts.map +0 -1
  953. package/packages/mcp/dist/tools/relay-send.js +0 -73
  954. package/packages/mcp/dist/tools/relay-send.js.map +0 -1
  955. package/packages/mcp/dist/tools/relay-set-model.d.ts +0 -23
  956. package/packages/mcp/dist/tools/relay-set-model.d.ts.map +0 -1
  957. package/packages/mcp/dist/tools/relay-set-model.js +0 -52
  958. package/packages/mcp/dist/tools/relay-set-model.js.map +0 -1
  959. package/packages/mcp/dist/tools/relay-shadow.d.ts +0 -30
  960. package/packages/mcp/dist/tools/relay-shadow.d.ts.map +0 -1
  961. package/packages/mcp/dist/tools/relay-shadow.js +0 -55
  962. package/packages/mcp/dist/tools/relay-shadow.js.map +0 -1
  963. package/packages/mcp/dist/tools/relay-spawn.d.ts +0 -36
  964. package/packages/mcp/dist/tools/relay-spawn.d.ts.map +0 -1
  965. package/packages/mcp/dist/tools/relay-spawn.js +0 -73
  966. package/packages/mcp/dist/tools/relay-spawn.js.map +0 -1
  967. package/packages/mcp/dist/tools/relay-status.d.ts +0 -11
  968. package/packages/mcp/dist/tools/relay-status.d.ts.map +0 -1
  969. package/packages/mcp/dist/tools/relay-status.js +0 -43
  970. package/packages/mcp/dist/tools/relay-status.js.map +0 -1
  971. package/packages/mcp/dist/tools/relay-subscribe.d.ts +0 -27
  972. package/packages/mcp/dist/tools/relay-subscribe.d.ts.map +0 -1
  973. package/packages/mcp/dist/tools/relay-subscribe.js +0 -49
  974. package/packages/mcp/dist/tools/relay-subscribe.js.map +0 -1
  975. package/packages/mcp/dist/tools/relay-who.d.ts +0 -20
  976. package/packages/mcp/dist/tools/relay-who.d.ts.map +0 -1
  977. package/packages/mcp/dist/tools/relay-who.js +0 -62
  978. package/packages/mcp/dist/tools/relay-who.js.map +0 -1
  979. package/packages/mcp/package.json +0 -82
  980. package/packages/mcp/src/bin.ts +0 -200
  981. package/packages/mcp/src/client-adapter.ts +0 -358
  982. package/packages/mcp/src/cloud.ts +0 -41
  983. package/packages/mcp/src/errors.ts +0 -17
  984. package/packages/mcp/src/file-transport.ts +0 -275
  985. package/packages/mcp/src/hybrid-client.ts +0 -25
  986. package/packages/mcp/src/index.ts +0 -143
  987. package/packages/mcp/src/install-cli.ts +0 -210
  988. package/packages/mcp/src/install.ts +0 -820
  989. package/packages/mcp/src/prompts/index.ts +0 -1
  990. package/packages/mcp/src/prompts/protocol.ts +0 -164
  991. package/packages/mcp/src/resources/agents.ts +0 -21
  992. package/packages/mcp/src/resources/inbox.ts +0 -21
  993. package/packages/mcp/src/resources/index.ts +0 -3
  994. package/packages/mcp/src/resources/project.ts +0 -29
  995. package/packages/mcp/src/server.ts +0 -475
  996. package/packages/mcp/src/simple.ts +0 -214
  997. package/packages/mcp/src/tools/index.ts +0 -155
  998. package/packages/mcp/src/tools/relay-broadcast.ts +0 -32
  999. package/packages/mcp/src/tools/relay-channel.ts +0 -151
  1000. package/packages/mcp/src/tools/relay-connected.ts +0 -67
  1001. package/packages/mcp/src/tools/relay-consensus.ts +0 -92
  1002. package/packages/mcp/src/tools/relay-continuity.ts +0 -127
  1003. package/packages/mcp/src/tools/relay-health.ts +0 -148
  1004. package/packages/mcp/src/tools/relay-inbox.ts +0 -70
  1005. package/packages/mcp/src/tools/relay-logs.ts +0 -106
  1006. package/packages/mcp/src/tools/relay-messages.ts +0 -66
  1007. package/packages/mcp/src/tools/relay-metrics.ts +0 -142
  1008. package/packages/mcp/src/tools/relay-release.ts +0 -54
  1009. package/packages/mcp/src/tools/relay-remove-agent.ts +0 -58
  1010. package/packages/mcp/src/tools/relay-send.ts +0 -84
  1011. package/packages/mcp/src/tools/relay-set-model.ts +0 -62
  1012. package/packages/mcp/src/tools/relay-shadow.ts +0 -67
  1013. package/packages/mcp/src/tools/relay-spawn.ts +0 -87
  1014. package/packages/mcp/src/tools/relay-status.ts +0 -57
  1015. package/packages/mcp/src/tools/relay-subscribe.ts +0 -61
  1016. package/packages/mcp/src/tools/relay-who.ts +0 -75
  1017. package/packages/mcp/tests/client.test.ts +0 -451
  1018. package/packages/mcp/tests/discover.test.ts +0 -256
  1019. package/packages/mcp/tests/install.test.ts +0 -123
  1020. package/packages/mcp/tests/prompts.test.ts +0 -12
  1021. package/packages/mcp/tests/resources.test.ts +0 -53
  1022. package/packages/mcp/tests/tools.test.ts +0 -1516
  1023. package/packages/mcp/tsconfig.json +0 -22
  1024. package/packages/mcp/vitest.config.ts +0 -9
  1025. package/packages/protocol/dist/channels.d.ts +0 -137
  1026. package/packages/protocol/dist/channels.d.ts.map +0 -1
  1027. package/packages/protocol/dist/channels.js +0 -154
  1028. package/packages/protocol/dist/channels.js.map +0 -1
  1029. package/packages/protocol/dist/framing.d.ts +0 -80
  1030. package/packages/protocol/dist/framing.d.ts.map +0 -1
  1031. package/packages/protocol/dist/framing.js +0 -206
  1032. package/packages/protocol/dist/framing.js.map +0 -1
  1033. package/packages/protocol/dist/id-generator.d.ts +0 -35
  1034. package/packages/protocol/dist/id-generator.d.ts.map +0 -1
  1035. package/packages/protocol/dist/id-generator.js +0 -60
  1036. package/packages/protocol/dist/id-generator.js.map +0 -1
  1037. package/packages/protocol/dist/index.d.ts +0 -5
  1038. package/packages/protocol/dist/index.d.ts.map +0 -1
  1039. package/packages/protocol/dist/index.js +0 -5
  1040. package/packages/protocol/dist/index.js.map +0 -1
  1041. package/packages/protocol/dist/relay-pty-schemas.d.ts +0 -340
  1042. package/packages/protocol/dist/relay-pty-schemas.d.ts.map +0 -1
  1043. package/packages/protocol/dist/relay-pty-schemas.js +0 -60
  1044. package/packages/protocol/dist/relay-pty-schemas.js.map +0 -1
  1045. package/packages/protocol/dist/types.d.ts +0 -793
  1046. package/packages/protocol/dist/types.d.ts.map +0 -1
  1047. package/packages/protocol/dist/types.js +0 -8
  1048. package/packages/protocol/dist/types.js.map +0 -1
  1049. package/packages/protocol/package.json +0 -61
  1050. package/packages/protocol/src/channels.test.ts +0 -330
  1051. package/packages/protocol/src/channels.ts +0 -270
  1052. package/packages/protocol/src/framing.test.ts +0 -164
  1053. package/packages/protocol/src/framing.ts +0 -242
  1054. package/packages/protocol/src/id-generator.ts +0 -69
  1055. package/packages/protocol/src/index.ts +0 -4
  1056. package/packages/protocol/src/relay-pty-schemas.ts +0 -400
  1057. package/packages/protocol/src/types.test.ts +0 -271
  1058. package/packages/protocol/src/types.ts +0 -988
  1059. package/packages/protocol/tsconfig.json +0 -21
  1060. package/packages/protocol/vitest.config.ts +0 -9
  1061. package/packages/resiliency/dist/cgroup-manager.d.ts +0 -152
  1062. package/packages/resiliency/dist/cgroup-manager.d.ts.map +0 -1
  1063. package/packages/resiliency/dist/cgroup-manager.js +0 -394
  1064. package/packages/resiliency/dist/cgroup-manager.js.map +0 -1
  1065. package/packages/resiliency/dist/context-persistence.d.ts +0 -140
  1066. package/packages/resiliency/dist/context-persistence.d.ts.map +0 -1
  1067. package/packages/resiliency/dist/context-persistence.js +0 -397
  1068. package/packages/resiliency/dist/context-persistence.js.map +0 -1
  1069. package/packages/resiliency/dist/crash-insights.d.ts +0 -156
  1070. package/packages/resiliency/dist/crash-insights.d.ts.map +0 -1
  1071. package/packages/resiliency/dist/crash-insights.js +0 -492
  1072. package/packages/resiliency/dist/crash-insights.js.map +0 -1
  1073. package/packages/resiliency/dist/gossip-health.d.ts +0 -137
  1074. package/packages/resiliency/dist/gossip-health.d.ts.map +0 -1
  1075. package/packages/resiliency/dist/gossip-health.js +0 -241
  1076. package/packages/resiliency/dist/gossip-health.js.map +0 -1
  1077. package/packages/resiliency/dist/health-monitor.d.ts +0 -97
  1078. package/packages/resiliency/dist/health-monitor.d.ts.map +0 -1
  1079. package/packages/resiliency/dist/health-monitor.js +0 -291
  1080. package/packages/resiliency/dist/health-monitor.js.map +0 -1
  1081. package/packages/resiliency/dist/index.d.ts +0 -69
  1082. package/packages/resiliency/dist/index.d.ts.map +0 -1
  1083. package/packages/resiliency/dist/index.js +0 -69
  1084. package/packages/resiliency/dist/index.js.map +0 -1
  1085. package/packages/resiliency/dist/leader-watchdog.d.ts +0 -109
  1086. package/packages/resiliency/dist/leader-watchdog.d.ts.map +0 -1
  1087. package/packages/resiliency/dist/leader-watchdog.js +0 -189
  1088. package/packages/resiliency/dist/leader-watchdog.js.map +0 -1
  1089. package/packages/resiliency/dist/logger.d.ts +0 -114
  1090. package/packages/resiliency/dist/logger.d.ts.map +0 -1
  1091. package/packages/resiliency/dist/logger.js +0 -250
  1092. package/packages/resiliency/dist/logger.js.map +0 -1
  1093. package/packages/resiliency/dist/memory-monitor.d.ts +0 -172
  1094. package/packages/resiliency/dist/memory-monitor.d.ts.map +0 -1
  1095. package/packages/resiliency/dist/memory-monitor.js +0 -599
  1096. package/packages/resiliency/dist/memory-monitor.js.map +0 -1
  1097. package/packages/resiliency/dist/metrics.d.ts +0 -115
  1098. package/packages/resiliency/dist/metrics.d.ts.map +0 -1
  1099. package/packages/resiliency/dist/metrics.js +0 -239
  1100. package/packages/resiliency/dist/metrics.js.map +0 -1
  1101. package/packages/resiliency/dist/provider-context.d.ts +0 -100
  1102. package/packages/resiliency/dist/provider-context.d.ts.map +0 -1
  1103. package/packages/resiliency/dist/provider-context.js +0 -362
  1104. package/packages/resiliency/dist/provider-context.js.map +0 -1
  1105. package/packages/resiliency/dist/stateless-lead.d.ts +0 -149
  1106. package/packages/resiliency/dist/stateless-lead.d.ts.map +0 -1
  1107. package/packages/resiliency/dist/stateless-lead.js +0 -308
  1108. package/packages/resiliency/dist/stateless-lead.js.map +0 -1
  1109. package/packages/resiliency/dist/supervisor.d.ts +0 -147
  1110. package/packages/resiliency/dist/supervisor.d.ts.map +0 -1
  1111. package/packages/resiliency/dist/supervisor.js +0 -459
  1112. package/packages/resiliency/dist/supervisor.js.map +0 -1
  1113. package/packages/resiliency/package.json +0 -38
  1114. package/packages/resiliency/src/cgroup-manager.ts +0 -468
  1115. package/packages/resiliency/src/context-persistence.ts +0 -538
  1116. package/packages/resiliency/src/crash-insights.test.ts +0 -620
  1117. package/packages/resiliency/src/crash-insights.ts +0 -660
  1118. package/packages/resiliency/src/gossip-health.ts +0 -333
  1119. package/packages/resiliency/src/health-monitor.ts +0 -371
  1120. package/packages/resiliency/src/index.ts +0 -157
  1121. package/packages/resiliency/src/leader-watchdog.ts +0 -260
  1122. package/packages/resiliency/src/logger.ts +0 -320
  1123. package/packages/resiliency/src/memory-monitor.test.ts +0 -637
  1124. package/packages/resiliency/src/memory-monitor.ts +0 -740
  1125. package/packages/resiliency/src/metrics.ts +0 -311
  1126. package/packages/resiliency/src/provider-context.ts +0 -452
  1127. package/packages/resiliency/src/stateless-lead.ts +0 -408
  1128. package/packages/resiliency/src/supervisor.ts +0 -578
  1129. package/packages/resiliency/tsconfig.json +0 -21
  1130. package/packages/resiliency/vitest.config.ts +0 -9
  1131. package/packages/sdk/dist/discovery.d.ts +0 -10
  1132. package/packages/sdk/dist/discovery.d.ts.map +0 -1
  1133. package/packages/sdk/dist/discovery.js +0 -22
  1134. package/packages/sdk/dist/discovery.js.map +0 -1
  1135. package/packages/sdk/dist/errors.d.ts +0 -9
  1136. package/packages/sdk/dist/errors.d.ts.map +0 -1
  1137. package/packages/sdk/dist/errors.js +0 -9
  1138. package/packages/sdk/dist/errors.js.map +0 -1
  1139. package/packages/sdk/dist/protocol/index.d.ts +0 -8
  1140. package/packages/sdk/dist/protocol/index.d.ts.map +0 -1
  1141. package/packages/sdk/dist/protocol/index.js +0 -8
  1142. package/packages/sdk/dist/protocol/index.js.map +0 -1
  1143. package/packages/sdk/examples/SWARM_CAPABILITIES.md +0 -498
  1144. package/packages/sdk/examples/SWARM_PATTERNS.md +0 -541
  1145. package/packages/sdk/src/client.test.ts +0 -1041
  1146. package/packages/sdk/src/discovery.ts +0 -38
  1147. package/packages/sdk/src/errors.ts +0 -17
  1148. package/packages/sdk/src/logs.test.ts +0 -98
  1149. package/packages/sdk/src/protocol/framing.test.ts +0 -164
  1150. package/packages/sdk/src/protocol/index.ts +0 -8
  1151. package/packages/spawner/.trajectories/index.json +0 -5
  1152. package/packages/spawner/API.md +0 -256
  1153. package/packages/spawner/dist/index.d.ts +0 -8
  1154. package/packages/spawner/dist/index.d.ts.map +0 -1
  1155. package/packages/spawner/dist/index.js +0 -8
  1156. package/packages/spawner/dist/index.js.map +0 -1
  1157. package/packages/spawner/dist/types.d.ts +0 -552
  1158. package/packages/spawner/dist/types.d.ts.map +0 -1
  1159. package/packages/spawner/dist/types.js +0 -193
  1160. package/packages/spawner/dist/types.js.map +0 -1
  1161. package/packages/spawner/package.json +0 -47
  1162. package/packages/spawner/src/index.ts +0 -8
  1163. package/packages/spawner/src/types.test.ts +0 -385
  1164. package/packages/spawner/src/types.ts +0 -228
  1165. package/packages/spawner/tsconfig.json +0 -19
  1166. package/packages/spawner/vitest.config.ts +0 -9
  1167. package/packages/state/dist/agent-state.d.ts +0 -40
  1168. package/packages/state/dist/agent-state.d.ts.map +0 -1
  1169. package/packages/state/dist/agent-state.js +0 -120
  1170. package/packages/state/dist/agent-state.js.map +0 -1
  1171. package/packages/state/dist/index.d.ts +0 -8
  1172. package/packages/state/dist/index.d.ts.map +0 -1
  1173. package/packages/state/dist/index.js +0 -8
  1174. package/packages/state/dist/index.js.map +0 -1
  1175. package/packages/state/package.json +0 -37
  1176. package/packages/state/src/agent-state.test.ts +0 -335
  1177. package/packages/state/src/agent-state.ts +0 -153
  1178. package/packages/state/src/index.ts +0 -12
  1179. package/packages/state/tsconfig.json +0 -21
  1180. package/packages/state/vitest.config.ts +0 -9
  1181. package/packages/storage/dist/adapter.d.ts +0 -189
  1182. package/packages/storage/dist/adapter.d.ts.map +0 -1
  1183. package/packages/storage/dist/adapter.js +0 -267
  1184. package/packages/storage/dist/adapter.js.map +0 -1
  1185. package/packages/storage/dist/batched-sqlite-adapter.d.ts +0 -75
  1186. package/packages/storage/dist/batched-sqlite-adapter.d.ts.map +0 -1
  1187. package/packages/storage/dist/batched-sqlite-adapter.js +0 -189
  1188. package/packages/storage/dist/batched-sqlite-adapter.js.map +0 -1
  1189. package/packages/storage/dist/dead-letter-queue.d.ts +0 -196
  1190. package/packages/storage/dist/dead-letter-queue.d.ts.map +0 -1
  1191. package/packages/storage/dist/dead-letter-queue.js +0 -427
  1192. package/packages/storage/dist/dead-letter-queue.js.map +0 -1
  1193. package/packages/storage/dist/dlq-adapter.d.ts +0 -195
  1194. package/packages/storage/dist/dlq-adapter.d.ts.map +0 -1
  1195. package/packages/storage/dist/dlq-adapter.js +0 -664
  1196. package/packages/storage/dist/dlq-adapter.js.map +0 -1
  1197. package/packages/storage/dist/index.d.ts +0 -6
  1198. package/packages/storage/dist/index.d.ts.map +0 -1
  1199. package/packages/storage/dist/index.js +0 -7
  1200. package/packages/storage/dist/index.js.map +0 -1
  1201. package/packages/storage/dist/jsonl-adapter.d.ts +0 -91
  1202. package/packages/storage/dist/jsonl-adapter.d.ts.map +0 -1
  1203. package/packages/storage/dist/jsonl-adapter.js +0 -580
  1204. package/packages/storage/dist/jsonl-adapter.js.map +0 -1
  1205. package/packages/storage/dist/sqlite-adapter.d.ts +0 -131
  1206. package/packages/storage/dist/sqlite-adapter.d.ts.map +0 -1
  1207. package/packages/storage/dist/sqlite-adapter.js +0 -865
  1208. package/packages/storage/dist/sqlite-adapter.js.map +0 -1
  1209. package/packages/storage/package.json +0 -74
  1210. package/packages/storage/src/adapter.ts +0 -446
  1211. package/packages/storage/src/batched-sqlite-adapter.test.ts +0 -256
  1212. package/packages/storage/src/batched-sqlite-adapter.ts +0 -239
  1213. package/packages/storage/src/dead-letter-queue.ts +0 -643
  1214. package/packages/storage/src/dlq-adapter.test.ts +0 -509
  1215. package/packages/storage/src/dlq-adapter.ts +0 -954
  1216. package/packages/storage/src/index.ts +0 -6
  1217. package/packages/storage/src/jsonl-adapter.test.ts +0 -239
  1218. package/packages/storage/src/jsonl-adapter.ts +0 -704
  1219. package/packages/storage/src/memory-adapter.test.ts +0 -36
  1220. package/packages/storage/src/sqlite-adapter.test.ts +0 -580
  1221. package/packages/storage/src/sqlite-adapter.ts +0 -1099
  1222. package/packages/storage/tsconfig.json +0 -21
  1223. package/packages/storage/vitest.config.ts +0 -9
  1224. package/packages/wrapper/dist/__fixtures__/claude-outputs.d.ts +0 -49
  1225. package/packages/wrapper/dist/__fixtures__/claude-outputs.d.ts.map +0 -1
  1226. package/packages/wrapper/dist/__fixtures__/claude-outputs.js +0 -443
  1227. package/packages/wrapper/dist/__fixtures__/claude-outputs.js.map +0 -1
  1228. package/packages/wrapper/dist/__fixtures__/codex-outputs.d.ts +0 -9
  1229. package/packages/wrapper/dist/__fixtures__/codex-outputs.d.ts.map +0 -1
  1230. package/packages/wrapper/dist/__fixtures__/codex-outputs.js +0 -94
  1231. package/packages/wrapper/dist/__fixtures__/codex-outputs.js.map +0 -1
  1232. package/packages/wrapper/dist/__fixtures__/gemini-outputs.d.ts +0 -19
  1233. package/packages/wrapper/dist/__fixtures__/gemini-outputs.d.ts.map +0 -1
  1234. package/packages/wrapper/dist/__fixtures__/gemini-outputs.js +0 -144
  1235. package/packages/wrapper/dist/__fixtures__/gemini-outputs.js.map +0 -1
  1236. package/packages/wrapper/dist/__fixtures__/index.d.ts +0 -68
  1237. package/packages/wrapper/dist/__fixtures__/index.d.ts.map +0 -1
  1238. package/packages/wrapper/dist/__fixtures__/index.js +0 -44
  1239. package/packages/wrapper/dist/__fixtures__/index.js.map +0 -1
  1240. package/packages/wrapper/dist/auth-detection.d.ts +0 -49
  1241. package/packages/wrapper/dist/auth-detection.d.ts.map +0 -1
  1242. package/packages/wrapper/dist/auth-detection.js +0 -199
  1243. package/packages/wrapper/dist/auth-detection.js.map +0 -1
  1244. package/packages/wrapper/dist/base-wrapper.d.ts +0 -254
  1245. package/packages/wrapper/dist/base-wrapper.d.ts.map +0 -1
  1246. package/packages/wrapper/dist/base-wrapper.js +0 -664
  1247. package/packages/wrapper/dist/base-wrapper.js.map +0 -1
  1248. package/packages/wrapper/dist/client.d.ts +0 -291
  1249. package/packages/wrapper/dist/client.d.ts.map +0 -1
  1250. package/packages/wrapper/dist/client.js +0 -926
  1251. package/packages/wrapper/dist/client.js.map +0 -1
  1252. package/packages/wrapper/dist/id-generator.d.ts +0 -35
  1253. package/packages/wrapper/dist/id-generator.d.ts.map +0 -1
  1254. package/packages/wrapper/dist/id-generator.js +0 -60
  1255. package/packages/wrapper/dist/id-generator.js.map +0 -1
  1256. package/packages/wrapper/dist/idle-detector.d.ts +0 -114
  1257. package/packages/wrapper/dist/idle-detector.d.ts.map +0 -1
  1258. package/packages/wrapper/dist/idle-detector.js +0 -317
  1259. package/packages/wrapper/dist/idle-detector.js.map +0 -1
  1260. package/packages/wrapper/dist/inbox.d.ts +0 -37
  1261. package/packages/wrapper/dist/inbox.d.ts.map +0 -1
  1262. package/packages/wrapper/dist/inbox.js +0 -73
  1263. package/packages/wrapper/dist/inbox.js.map +0 -1
  1264. package/packages/wrapper/dist/index.d.ts +0 -40
  1265. package/packages/wrapper/dist/index.d.ts.map +0 -1
  1266. package/packages/wrapper/dist/index.js +0 -53
  1267. package/packages/wrapper/dist/index.js.map +0 -1
  1268. package/packages/wrapper/dist/opencode-api.d.ts +0 -106
  1269. package/packages/wrapper/dist/opencode-api.d.ts.map +0 -1
  1270. package/packages/wrapper/dist/opencode-api.js +0 -219
  1271. package/packages/wrapper/dist/opencode-api.js.map +0 -1
  1272. package/packages/wrapper/dist/opencode-wrapper.d.ts +0 -161
  1273. package/packages/wrapper/dist/opencode-wrapper.d.ts.map +0 -1
  1274. package/packages/wrapper/dist/opencode-wrapper.js +0 -438
  1275. package/packages/wrapper/dist/opencode-wrapper.js.map +0 -1
  1276. package/packages/wrapper/dist/parser.d.ts +0 -236
  1277. package/packages/wrapper/dist/parser.d.ts.map +0 -1
  1278. package/packages/wrapper/dist/parser.js +0 -1238
  1279. package/packages/wrapper/dist/parser.js.map +0 -1
  1280. package/packages/wrapper/dist/prompt-composer.d.ts +0 -67
  1281. package/packages/wrapper/dist/prompt-composer.d.ts.map +0 -1
  1282. package/packages/wrapper/dist/prompt-composer.js +0 -168
  1283. package/packages/wrapper/dist/prompt-composer.js.map +0 -1
  1284. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +0 -486
  1285. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts.map +0 -1
  1286. package/packages/wrapper/dist/relay-pty-orchestrator.js +0 -2550
  1287. package/packages/wrapper/dist/relay-pty-orchestrator.js.map +0 -1
  1288. package/packages/wrapper/dist/shared.d.ts +0 -262
  1289. package/packages/wrapper/dist/shared.d.ts.map +0 -1
  1290. package/packages/wrapper/dist/shared.js +0 -507
  1291. package/packages/wrapper/dist/shared.js.map +0 -1
  1292. package/packages/wrapper/dist/stuck-detector.d.ts +0 -161
  1293. package/packages/wrapper/dist/stuck-detector.d.ts.map +0 -1
  1294. package/packages/wrapper/dist/stuck-detector.js +0 -402
  1295. package/packages/wrapper/dist/stuck-detector.js.map +0 -1
  1296. package/packages/wrapper/dist/tmux-resolver.d.ts +0 -55
  1297. package/packages/wrapper/dist/tmux-resolver.d.ts.map +0 -1
  1298. package/packages/wrapper/dist/tmux-resolver.js +0 -175
  1299. package/packages/wrapper/dist/tmux-resolver.js.map +0 -1
  1300. package/packages/wrapper/dist/tmux-wrapper.d.ts +0 -352
  1301. package/packages/wrapper/dist/tmux-wrapper.d.ts.map +0 -1
  1302. package/packages/wrapper/dist/tmux-wrapper.js +0 -1816
  1303. package/packages/wrapper/dist/tmux-wrapper.js.map +0 -1
  1304. package/packages/wrapper/dist/trajectory-integration.d.ts +0 -292
  1305. package/packages/wrapper/dist/trajectory-integration.d.ts.map +0 -1
  1306. package/packages/wrapper/dist/trajectory-integration.js +0 -979
  1307. package/packages/wrapper/dist/trajectory-integration.js.map +0 -1
  1308. package/packages/wrapper/dist/wrapper-events.d.ts +0 -489
  1309. package/packages/wrapper/dist/wrapper-events.d.ts.map +0 -1
  1310. package/packages/wrapper/dist/wrapper-events.js +0 -252
  1311. package/packages/wrapper/dist/wrapper-events.js.map +0 -1
  1312. package/packages/wrapper/dist/wrapper-types.d.ts +0 -41
  1313. package/packages/wrapper/dist/wrapper-types.d.ts.map +0 -1
  1314. package/packages/wrapper/dist/wrapper-types.js +0 -7
  1315. package/packages/wrapper/dist/wrapper-types.js.map +0 -1
  1316. package/packages/wrapper/package.json +0 -60
  1317. package/packages/wrapper/src/__fixtures__/claude-outputs.ts +0 -471
  1318. package/packages/wrapper/src/__fixtures__/codex-outputs.ts +0 -99
  1319. package/packages/wrapper/src/__fixtures__/gemini-outputs.ts +0 -151
  1320. package/packages/wrapper/src/__fixtures__/index.ts +0 -47
  1321. package/packages/wrapper/src/auth-detection.ts +0 -244
  1322. package/packages/wrapper/src/base-wrapper.test.ts +0 -589
  1323. package/packages/wrapper/src/base-wrapper.ts +0 -841
  1324. package/packages/wrapper/src/client.test.ts +0 -351
  1325. package/packages/wrapper/src/client.ts +0 -1166
  1326. package/packages/wrapper/src/id-generator.test.ts +0 -71
  1327. package/packages/wrapper/src/id-generator.ts +0 -69
  1328. package/packages/wrapper/src/idle-detector.test.ts +0 -418
  1329. package/packages/wrapper/src/idle-detector.ts +0 -384
  1330. package/packages/wrapper/src/inbox.test.ts +0 -233
  1331. package/packages/wrapper/src/inbox.ts +0 -89
  1332. package/packages/wrapper/src/index.ts +0 -199
  1333. package/packages/wrapper/src/opencode-api.test.ts +0 -292
  1334. package/packages/wrapper/src/opencode-api.ts +0 -285
  1335. package/packages/wrapper/src/opencode-wrapper.ts +0 -541
  1336. package/packages/wrapper/src/parser.regression.test.ts +0 -251
  1337. package/packages/wrapper/src/parser.test.ts +0 -1359
  1338. package/packages/wrapper/src/parser.ts +0 -1477
  1339. package/packages/wrapper/src/prompt-composer.test.ts +0 -219
  1340. package/packages/wrapper/src/prompt-composer.ts +0 -231
  1341. package/packages/wrapper/src/relay-pty-orchestrator.test.ts +0 -1386
  1342. package/packages/wrapper/src/relay-pty-orchestrator.ts +0 -3041
  1343. package/packages/wrapper/src/shared.test.ts +0 -467
  1344. package/packages/wrapper/src/shared.ts +0 -652
  1345. package/packages/wrapper/src/stuck-detector.test.ts +0 -303
  1346. package/packages/wrapper/src/stuck-detector.ts +0 -511
  1347. package/packages/wrapper/src/tmux-resolver.test.ts +0 -104
  1348. package/packages/wrapper/src/tmux-resolver.ts +0 -207
  1349. package/packages/wrapper/src/tmux-wrapper.test.ts +0 -316
  1350. package/packages/wrapper/src/tmux-wrapper.ts +0 -2095
  1351. package/packages/wrapper/src/trajectory-detection.test.ts +0 -151
  1352. package/packages/wrapper/src/trajectory-integration.ts +0 -1261
  1353. package/packages/wrapper/src/wrapper-events.ts +0 -395
  1354. package/packages/wrapper/src/wrapper-types.ts +0 -45
  1355. package/packages/wrapper/tsconfig.json +0 -19
  1356. package/packages/wrapper/vitest.config.ts +0 -9
  1357. /package/packages/{broker-sdk → sdk}/dist/__tests__/facade.test.d.ts +0 -0
  1358. /package/packages/{broker-sdk → sdk}/dist/__tests__/facade.test.d.ts.map +0 -0
  1359. /package/packages/{broker-sdk → sdk}/dist/__tests__/integration.test.d.ts +0 -0
  1360. /package/packages/{broker-sdk → sdk}/dist/__tests__/integration.test.d.ts.map +0 -0
  1361. /package/packages/{broker-sdk → sdk}/dist/__tests__/quickstart.test.d.ts +0 -0
  1362. /package/packages/{broker-sdk → sdk}/dist/__tests__/quickstart.test.d.ts.map +0 -0
  1363. /package/packages/{broker-sdk → sdk}/dist/__tests__/unit.test.d.ts +0 -0
  1364. /package/packages/{broker-sdk → sdk}/dist/__tests__/unit.test.d.ts.map +0 -0
  1365. /package/packages/{broker-sdk → sdk}/dist/browser.d.ts +0 -0
  1366. /package/packages/{broker-sdk → sdk}/dist/browser.d.ts.map +0 -0
  1367. /package/packages/{broker-sdk → sdk}/dist/browser.js +0 -0
  1368. /package/packages/{broker-sdk → sdk}/dist/browser.js.map +0 -0
  1369. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.d.ts +0 -0
  1370. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.d.ts.map +0 -0
  1371. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.js +0 -0
  1372. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.js.map +0 -0
  1373. /package/packages/{broker-sdk → sdk}/dist/consensus.d.ts +0 -0
  1374. /package/packages/{broker-sdk → sdk}/dist/consensus.d.ts.map +0 -0
  1375. /package/packages/{broker-sdk → sdk}/dist/consensus.js +0 -0
  1376. /package/packages/{broker-sdk → sdk}/dist/consensus.js.map +0 -0
  1377. /package/packages/{broker-sdk → sdk}/dist/examples/demo.d.ts +0 -0
  1378. /package/packages/{broker-sdk → sdk}/dist/examples/demo.d.ts.map +0 -0
  1379. /package/packages/{broker-sdk → sdk}/dist/examples/demo.js +0 -0
  1380. /package/packages/{broker-sdk → sdk}/dist/examples/demo.js.map +0 -0
  1381. /package/packages/{broker-sdk → sdk}/dist/examples/example.d.ts +0 -0
  1382. /package/packages/{broker-sdk → sdk}/dist/examples/example.d.ts.map +0 -0
  1383. /package/packages/{broker-sdk → sdk}/dist/examples/example.js +0 -0
  1384. /package/packages/{broker-sdk → sdk}/dist/examples/example.js.map +0 -0
  1385. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.d.ts +0 -0
  1386. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.d.ts.map +0 -0
  1387. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.js +0 -0
  1388. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.js.map +0 -0
  1389. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.d.ts +0 -0
  1390. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.d.ts.map +0 -0
  1391. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.js +0 -0
  1392. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.js.map +0 -0
  1393. /package/packages/{broker-sdk → sdk}/dist/protocol.js +0 -0
  1394. /package/packages/{broker-sdk → sdk}/dist/protocol.js.map +0 -0
  1395. /package/packages/{broker-sdk → sdk}/dist/pty.d.ts +0 -0
  1396. /package/packages/{broker-sdk → sdk}/dist/shadow.js +0 -0
  1397. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.d.ts +0 -0
  1398. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.d.ts.map +0 -0
  1399. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.js +0 -0
  1400. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.js.map +0 -0
  1401. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.d.ts +0 -0
  1402. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.d.ts.map +0 -0
  1403. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.js +0 -0
  1404. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.js.map +0 -0
  1405. /package/packages/{broker-sdk → sdk}/dist/workflows/state.d.ts +0 -0
  1406. /package/packages/{broker-sdk → sdk}/dist/workflows/state.d.ts.map +0 -0
  1407. /package/packages/{broker-sdk → sdk}/dist/workflows/state.js +0 -0
  1408. /package/packages/{broker-sdk → sdk}/dist/workflows/state.js.map +0 -0
  1409. /package/packages/{broker-sdk → sdk}/src/__tests__/workflow-trajectory.test.ts +0 -0
  1410. /package/packages/{broker-sdk → sdk}/src/browser.ts +0 -0
  1411. /package/packages/{broker-sdk → sdk}/src/consensus-helpers.ts +0 -0
  1412. /package/packages/{broker-sdk → sdk}/src/consensus.ts +0 -0
  1413. /package/packages/{broker-sdk → sdk}/src/examples/demo.ts +0 -0
  1414. /package/packages/{broker-sdk → sdk}/src/examples/example.ts +0 -0
  1415. /package/packages/{broker-sdk → sdk}/src/examples/quickstart.ts +0 -0
  1416. /package/packages/{broker-sdk → sdk}/src/examples/ralph-loop.ts +0 -0
  1417. /package/packages/{broker-sdk → sdk}/src/examples/sample-prd.json +0 -0
  1418. /package/packages/{broker-sdk → sdk}/src/workflows/barrier.ts +0 -0
  1419. /package/packages/{broker-sdk → sdk}/src/workflows/memory-db.ts +0 -0
  1420. /package/packages/{broker-sdk → sdk}/src/workflows/state.ts +0 -0
@@ -1,1591 +1,512 @@
1
- /**
2
- * RelayClient - Agent Relay SDK Client
3
- * @agent-relay/sdk
4
- *
5
- * Lightweight client for agent-to-agent communication via Agent Relay daemon.
6
- */
7
- import net from 'node:net';
8
- import { randomUUID } from 'node:crypto';
9
- import { discoverSocket } from '@agent-relay/utils/discovery';
10
- import { DaemonNotRunningError, ConnectionError } from '@agent-relay/utils/errors';
11
- // Import shared protocol types and framing utilities from @agent-relay/protocol
12
- import { PROTOCOL_VERSION, encodeFrameLegacy, FrameParser, } from '@agent-relay/protocol';
13
- const DEFAULT_SOCKET_PATH = '/tmp/agent-relay.sock';
14
- /**
15
- * Resolve the socket path using discovery if not explicitly provided.
16
- * Falls back to /tmp/agent-relay.sock if discovery fails.
17
- */
18
- function resolveSocketPath(configPath) {
19
- if (configPath)
20
- return configPath;
21
- const discovery = discoverSocket();
22
- return discovery?.socketPath || DEFAULT_SOCKET_PATH;
23
- }
24
- const DEFAULT_CLIENT_CONFIG = {
25
- socketPath: DEFAULT_SOCKET_PATH,
26
- agentName: 'agent',
27
- cli: undefined,
28
- quiet: false,
29
- reconnect: true,
30
- maxReconnectAttempts: 10,
31
- reconnectDelayMs: 1000, // Increased from 100ms to prevent reconnect storms
32
- reconnectMaxDelayMs: 30000,
33
- };
34
- // Simple ID generator
35
- let idCounter = 0;
36
- function generateId() {
37
- return `${Date.now().toString(36)}-${(++idCounter).toString(36)}`;
38
- }
39
- /**
40
- * Circular buffer for O(1) deduplication with bounded memory.
41
- */
42
- class CircularDedupeCache {
43
- ids = new Set();
44
- ring;
45
- head = 0;
46
- capacity;
47
- constructor(capacity = 2000) {
48
- this.capacity = capacity;
49
- this.ring = new Array(capacity);
50
- }
51
- check(id) {
52
- if (this.ids.has(id))
53
- return true;
54
- if (this.ids.size >= this.capacity) {
55
- const oldest = this.ring[this.head];
56
- if (oldest)
57
- this.ids.delete(oldest);
58
- }
59
- this.ring[this.head] = id;
60
- this.ids.add(id);
61
- this.head = (this.head + 1) % this.capacity;
62
- return false;
63
- }
64
- clear() {
65
- this.ids.clear();
66
- this.ring = new Array(this.capacity);
67
- this.head = 0;
1
+ import { once } from 'node:events';
2
+ import { spawn } from 'node:child_process';
3
+ import { createInterface } from 'node:readline';
4
+ import fs from 'node:fs';
5
+ import os from 'node:os';
6
+ import path from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { PROTOCOL_VERSION, } from './protocol.js';
9
+ export class AgentRelayProtocolError extends Error {
10
+ code;
11
+ retryable;
12
+ data;
13
+ constructor(payload) {
14
+ super(payload.message);
15
+ this.name = 'AgentRelayProtocolError';
16
+ this.code = payload.code;
17
+ this.retryable = payload.retryable;
18
+ this.data = payload.data;
68
19
  }
69
20
  }
70
- /**
71
- * RelayClient for agent-to-agent communication.
72
- */
73
- export class RelayClient {
74
- config;
75
- socket;
76
- parser;
77
- _state = 'DISCONNECTED';
78
- sessionId;
79
- resumeToken;
80
- reconnectAttempts = 0;
81
- reconnectDelay;
82
- reconnectTimer;
83
- _destroyed = false;
84
- dedupeCache = new CircularDedupeCache(2000);
85
- writeQueue = [];
86
- writeScheduled = false;
87
- pendingSyncAcks = new Map();
88
- pendingSpawns = new Map();
89
- pendingReleases = new Map();
90
- pendingSendInputs = new Map();
91
- pendingSetModels = new Map();
92
- pendingListWorkers = new Map();
93
- pendingQueries = new Map();
94
- pendingRequests = new Map();
95
- pendingAgentReady = new Map();
96
- // Event handlers
97
- onMessage;
98
- /**
99
- * Callback for channel messages.
100
- */
101
- onChannelMessage;
102
- onStateChange;
103
- onError;
104
- /**
105
- * Callback when an agent becomes ready (completes HELLO/WELCOME handshake).
106
- * This is broadcast by the daemon when any agent connects.
107
- * Useful for knowing when a spawned agent is ready to receive messages.
108
- */
109
- onAgentReady;
110
- constructor(config = {}) {
111
- this.config = { ...DEFAULT_CLIENT_CONFIG, ...config };
112
- // Use socket discovery if no explicit socketPath was provided
113
- if (!config.socketPath) {
114
- this.config.socketPath = resolveSocketPath();
115
- }
116
- this.parser = new FrameParser();
117
- this.parser.setLegacyMode(true);
118
- this.reconnectDelay = this.config.reconnectDelayMs;
119
- }
120
- get state() {
121
- return this._state;
21
+ export class AgentRelayProcessError extends Error {
22
+ constructor(message) {
23
+ super(message);
24
+ this.name = 'AgentRelayProcessError';
122
25
  }
123
- get agentName() {
124
- return this.config.agentName;
26
+ }
27
+ export class AgentRelayClient {
28
+ options;
29
+ child;
30
+ stdoutRl;
31
+ stderrRl;
32
+ lastStderrLine;
33
+ requestSeq = 0;
34
+ pending = new Map();
35
+ startingPromise;
36
+ eventListeners = new Set();
37
+ stderrListeners = new Set();
38
+ eventBuffer = [];
39
+ maxBufferSize = 1000;
40
+ exitPromise;
41
+ /** The workspace key returned by the broker in its hello_ack response. */
42
+ workspaceKey;
43
+ constructor(options = {}) {
44
+ this.options = {
45
+ binaryPath: options.binaryPath ?? resolveDefaultBinaryPath(),
46
+ binaryArgs: options.binaryArgs ?? [],
47
+ brokerName: options.brokerName ?? (path.basename(options.cwd ?? process.cwd()) || 'project'),
48
+ channels: options.channels ?? ['general'],
49
+ cwd: options.cwd ?? process.cwd(),
50
+ env: options.env ?? process.env,
51
+ requestTimeoutMs: options.requestTimeoutMs ?? 10_000,
52
+ shutdownTimeoutMs: options.shutdownTimeoutMs ?? 3_000,
53
+ clientName: options.clientName ?? '@agent-relay/sdk',
54
+ clientVersion: options.clientVersion ?? '0.1.0',
55
+ };
125
56
  }
126
- get currentSessionId() {
127
- return this.sessionId;
57
+ static async start(options = {}) {
58
+ const client = new AgentRelayClient(options);
59
+ await client.start();
60
+ return client;
128
61
  }
129
- /**
130
- * Connect to the relay daemon.
131
- */
132
- connect() {
133
- if (this._state !== 'DISCONNECTED' && this._state !== 'BACKOFF') {
134
- return Promise.resolve();
135
- }
136
- return new Promise((resolve, reject) => {
137
- let settled = false;
138
- const settleResolve = () => {
139
- if (settled)
140
- return;
141
- settled = true;
142
- resolve();
143
- };
144
- const settleReject = (err) => {
145
- if (settled)
146
- return;
147
- settled = true;
148
- reject(err);
149
- };
150
- this.setState('CONNECTING');
151
- this.socket = net.createConnection(this.config.socketPath, () => {
152
- this.setState('HANDSHAKING');
153
- this.sendHello();
154
- });
155
- this.socket.on('data', (data) => this.handleData(data));
156
- this.socket.on('close', () => {
157
- this.handleDisconnect();
158
- });
159
- this.socket.on('error', (err) => {
160
- if (this._state === 'CONNECTING') {
161
- const errno = err.code;
162
- if (errno === 'ECONNREFUSED' || errno === 'ENOENT') {
163
- settleReject(new DaemonNotRunningError(`Cannot connect to daemon at ${this.config.socketPath}`));
164
- }
165
- else {
166
- settleReject(new ConnectionError(err.message));
167
- }
168
- }
169
- this.handleError(err);
170
- });
171
- const checkReady = setInterval(() => {
172
- if (this._state === 'READY') {
173
- clearInterval(checkReady);
174
- clearTimeout(timeout);
175
- settleResolve();
176
- }
177
- }, 10);
178
- const timeout = setTimeout(() => {
179
- if (this._state !== 'READY') {
180
- clearInterval(checkReady);
181
- this.socket?.destroy();
182
- settleReject(new Error('Connection timeout'));
183
- }
184
- }, 5000);
185
- });
62
+ onEvent(listener) {
63
+ this.eventListeners.add(listener);
64
+ return () => {
65
+ this.eventListeners.delete(listener);
66
+ };
186
67
  }
187
- /**
188
- * Disconnect from the relay daemon.
189
- */
190
- disconnect() {
191
- if (this.reconnectTimer) {
192
- clearTimeout(this.reconnectTimer);
193
- this.reconnectTimer = undefined;
194
- }
195
- if (this.socket) {
196
- this.send({
197
- v: PROTOCOL_VERSION,
198
- type: 'BYE',
199
- id: generateId(),
200
- ts: Date.now(),
201
- payload: {},
202
- });
203
- this.socket.end();
204
- this.socket = undefined;
68
+ queryEvents(filter) {
69
+ let events = [...this.eventBuffer];
70
+ if (filter?.kind) {
71
+ events = events.filter((event) => event.kind === filter.kind);
205
72
  }
206
- this.setState('DISCONNECTED');
207
- }
208
- /**
209
- * Permanently destroy the client.
210
- */
211
- destroy() {
212
- this._destroyed = true;
213
- this.disconnect();
214
- }
215
- /**
216
- * Send a message to another agent.
217
- */
218
- sendMessage(to, body, kind = 'message', data, thread, meta) {
219
- if (this._state !== 'READY') {
220
- return false;
73
+ if (filter?.name) {
74
+ events = events.filter((event) => 'name' in event && event.name === filter.name);
221
75
  }
222
- const envelope = {
223
- v: PROTOCOL_VERSION,
224
- type: 'SEND',
225
- id: generateId(),
226
- ts: Date.now(),
227
- to,
228
- payload: {
229
- kind,
230
- body,
231
- data,
232
- thread,
233
- },
234
- payload_meta: meta,
235
- };
236
- return this.send(envelope);
237
- }
238
- /**
239
- * Send an ACK for a delivered message.
240
- */
241
- sendAck(payload) {
242
- if (this._state !== 'READY') {
243
- return false;
76
+ const since = filter?.since;
77
+ if (since !== undefined) {
78
+ events = events.filter((event) => 'timestamp' in event && typeof event.timestamp === 'number' && event.timestamp >= since);
244
79
  }
245
- const envelope = {
246
- v: PROTOCOL_VERSION,
247
- type: 'ACK',
248
- id: generateId(),
249
- ts: Date.now(),
250
- payload,
251
- };
252
- return this.send(envelope);
253
- }
254
- /**
255
- * Send a message and wait for ACK response.
256
- */
257
- async sendAndWait(to, body, options = {}) {
258
- if (this._state !== 'READY') {
259
- throw new Error('Client not ready');
80
+ const limit = filter?.limit;
81
+ if (limit !== undefined) {
82
+ events = events.slice(-limit);
260
83
  }
261
- const correlationId = randomUUID();
262
- const timeoutMs = options.timeoutMs ?? 30000;
263
- const kind = options.kind ?? 'message';
264
- return new Promise((resolve, reject) => {
265
- const timeoutHandle = setTimeout(() => {
266
- this.pendingSyncAcks.delete(correlationId);
267
- reject(new Error(`ACK timeout after ${timeoutMs}ms`));
268
- }, timeoutMs);
269
- this.pendingSyncAcks.set(correlationId, { resolve, reject, timeoutHandle });
270
- const envelope = {
271
- v: PROTOCOL_VERSION,
272
- type: 'SEND',
273
- id: generateId(),
274
- ts: Date.now(),
275
- to,
276
- payload: {
277
- kind,
278
- body,
279
- data: options.data,
280
- thread: options.thread,
281
- },
282
- payload_meta: {
283
- sync: {
284
- correlationId,
285
- timeoutMs,
286
- blocking: true,
287
- },
288
- },
289
- };
290
- const sent = this.send(envelope);
291
- if (!sent) {
292
- clearTimeout(timeoutHandle);
293
- this.pendingSyncAcks.delete(correlationId);
294
- reject(new Error('Failed to send message'));
295
- }
296
- });
84
+ return events;
297
85
  }
298
- /**
299
- * Send a request to another agent and wait for their response.
300
- *
301
- * This implements a request/response pattern where the message is sent with
302
- * a correlation ID, and the method waits for the target agent to respond
303
- * with a message containing that correlation ID.
304
- *
305
- * @example
306
- * ```typescript
307
- * // Simple request
308
- * const response = await client.request('Worker', 'Process this task');
309
- * console.log(response.body); // Worker's response
310
- *
311
- * // With options
312
- * const response = await client.request('Worker', 'Process task', {
313
- * timeout: 60000,
314
- * data: { taskId: '123', priority: 'high' },
315
- * thread: 'task-thread-1',
316
- * });
317
- * ```
318
- *
319
- * @param to - Target agent name
320
- * @param body - Request message body
321
- * @param options - Request options (timeout, data, thread, kind)
322
- * @returns Promise that resolves with the response from the target agent
323
- * @throws Error if client is not ready, send fails, timeout occurs, or agent disconnects
324
- */
325
- async request(to, body, options = {}) {
326
- if (this._state !== 'READY') {
327
- throw new Error('Client not ready');
328
- }
329
- const correlationId = randomUUID();
330
- const timeoutMs = options.timeout ?? 30000;
331
- const kind = options.kind ?? 'message';
332
- return new Promise((resolve, reject) => {
333
- const timeoutHandle = setTimeout(() => {
334
- this.pendingRequests.delete(correlationId);
335
- reject(new Error(`Request timeout after ${timeoutMs}ms waiting for response from ${to}`));
336
- }, timeoutMs);
337
- this.pendingRequests.set(correlationId, {
338
- resolve,
339
- reject,
340
- timeoutHandle,
341
- targetAgent: to,
342
- });
343
- const envelope = {
344
- v: PROTOCOL_VERSION,
345
- type: 'SEND',
346
- id: generateId(),
347
- ts: Date.now(),
348
- to,
349
- payload: {
350
- kind,
351
- body,
352
- data: {
353
- ...options.data,
354
- _correlationId: correlationId,
355
- },
356
- thread: options.thread,
357
- },
358
- payload_meta: {
359
- replyTo: correlationId,
360
- },
361
- };
362
- const sent = this.send(envelope);
363
- if (!sent) {
364
- clearTimeout(timeoutHandle);
365
- this.pendingRequests.delete(correlationId);
366
- reject(new Error('Failed to send request'));
86
+ getLastEvent(kind, name) {
87
+ for (let i = this.eventBuffer.length - 1; i >= 0; i -= 1) {
88
+ const event = this.eventBuffer[i];
89
+ if (event.kind === kind && (!name || ('name' in event && event.name === name))) {
90
+ return event;
367
91
  }
368
- });
369
- }
370
- /**
371
- * Respond to a request from another agent.
372
- *
373
- * This is a convenience method for responding to messages that have a
374
- * correlation ID. The response will be routed back to the requesting agent.
375
- *
376
- * @param correlationId - The correlation ID from the original request (from data._correlationId or meta.replyTo)
377
- * @param to - Target agent (the one who sent the original request)
378
- * @param body - Response body
379
- * @param data - Optional structured data to include in the response
380
- * @returns true if the message was sent
381
- */
382
- respond(correlationId, to, body, data) {
383
- if (this._state !== 'READY') {
384
- return false;
385
92
  }
386
- const envelope = {
387
- v: PROTOCOL_VERSION,
388
- type: 'SEND',
389
- id: generateId(),
390
- ts: Date.now(),
391
- to,
392
- payload: {
393
- kind: 'message',
394
- body,
395
- data: {
396
- ...data,
397
- _correlationId: correlationId,
398
- _isResponse: true,
399
- },
400
- },
401
- payload_meta: {
402
- replyTo: correlationId,
403
- },
404
- };
405
- return this.send(envelope);
406
- }
407
- /**
408
- * Broadcast a message to all agents.
409
- */
410
- broadcast(body, kind = 'message', data) {
411
- return this.sendMessage('*', body, kind, data);
412
- }
413
- /**
414
- * Subscribe to a topic.
415
- */
416
- subscribe(topic) {
417
- if (this._state !== 'READY')
418
- return false;
419
- return this.send({
420
- v: PROTOCOL_VERSION,
421
- type: 'SUBSCRIBE',
422
- id: generateId(),
423
- ts: Date.now(),
424
- topic,
425
- payload: {},
426
- });
427
- }
428
- /**
429
- * Unsubscribe from a topic.
430
- */
431
- unsubscribe(topic) {
432
- if (this._state !== 'READY')
433
- return false;
434
- return this.send({
435
- v: PROTOCOL_VERSION,
436
- type: 'UNSUBSCRIBE',
437
- id: generateId(),
438
- ts: Date.now(),
439
- topic,
440
- payload: {},
441
- });
442
- }
443
- /**
444
- * Bind as a shadow to a primary agent.
445
- */
446
- bindAsShadow(primaryAgent, options = {}) {
447
- if (this._state !== 'READY')
448
- return false;
449
- return this.send({
450
- v: PROTOCOL_VERSION,
451
- type: 'SHADOW_BIND',
452
- id: generateId(),
453
- ts: Date.now(),
454
- payload: {
455
- primaryAgent,
456
- speakOn: options.speakOn,
457
- receiveIncoming: options.receiveIncoming,
458
- receiveOutgoing: options.receiveOutgoing,
459
- },
460
- });
461
- }
462
- /**
463
- * Unbind from a primary agent.
464
- */
465
- unbindAsShadow(primaryAgent) {
466
- if (this._state !== 'READY')
467
- return false;
468
- return this.send({
469
- v: PROTOCOL_VERSION,
470
- type: 'SHADOW_UNBIND',
471
- id: generateId(),
472
- ts: Date.now(),
473
- payload: {
474
- primaryAgent,
475
- },
476
- });
93
+ return undefined;
477
94
  }
478
- /**
479
- * Send log output to the daemon for dashboard streaming.
480
- */
481
- sendLog(data) {
482
- if (this._state !== 'READY') {
483
- return false;
484
- }
485
- const envelope = {
486
- v: PROTOCOL_VERSION,
487
- type: 'LOG',
488
- id: generateId(),
489
- ts: Date.now(),
490
- payload: {
491
- data,
492
- timestamp: Date.now(),
493
- },
95
+ onBrokerStderr(listener) {
96
+ this.stderrListeners.add(listener);
97
+ return () => {
98
+ this.stderrListeners.delete(listener);
494
99
  };
495
- return this.send(envelope);
496
100
  }
497
- // =============================================================================
498
- // Spawn/Release Operations
499
- // =============================================================================
500
- /**
501
- * Spawn a new agent via the relay daemon.
502
- * @param options - Spawn options
503
- * @param options.name - Name for the new agent
504
- * @param options.cli - CLI to use (claude, codex, gemini, etc.)
505
- * @param options.task - Task description
506
- * @param options.cwd - Working directory
507
- * @param options.team - Team name
508
- * @param options.interactive - Interactive mode
509
- * @param options.shadowMode - Shadow execution mode ('subagent' or 'process')
510
- * @param options.shadowOf - Spawn as shadow of this agent
511
- * @param options.shadowAgent - Shadow agent profile to use (for subagent mode)
512
- * @param options.shadowTriggers - When to trigger the shadow (for subagent mode)
513
- * @param options.shadowSpeakOn - Shadow speak-on triggers
514
- * @param options.waitForReady - Wait for the agent to be ready before resolving (default: false)
515
- * @param options.readyTimeoutMs - Timeout for agent to become ready (default: 60000ms)
516
- * @param timeoutMs - Timeout for spawn operation (default: 60000ms)
517
- * @returns Spawn result. When waitForReady is true, includes `ready` and `readyInfo` fields.
518
- */
519
- async spawn(options, timeoutMs = 60000) {
520
- if (this._state !== 'READY') {
521
- throw new Error('Client not ready');
522
- }
523
- const envelopeId = generateId();
524
- const waitForReady = options.waitForReady ?? false;
525
- const readyTimeoutMs = options.readyTimeoutMs ?? 60000;
526
- // If waitForReady, set up the agent ready listener BEFORE spawning
527
- // This ensures we don't miss the AGENT_READY event if it arrives quickly
528
- let readyPromise;
529
- if (waitForReady) {
530
- // Check if we're already waiting for this agent (prevents overwriting existing waiter)
531
- if (this.pendingAgentReady.has(options.name)) {
532
- throw new Error(`Already waiting for agent ${options.name} to be ready`);
533
- }
534
- readyPromise = new Promise((resolve, reject) => {
535
- const timeoutHandle = setTimeout(() => {
536
- this.pendingAgentReady.delete(options.name);
537
- reject(new Error(`Agent ${options.name} did not become ready within ${readyTimeoutMs}ms`));
538
- }, readyTimeoutMs);
539
- this.pendingAgentReady.set(options.name, { resolve, reject, timeoutHandle });
540
- });
101
+ async start() {
102
+ if (this.child) {
103
+ return;
541
104
  }
542
- // Send the spawn request
543
- const spawnResult = await new Promise((resolve, reject) => {
544
- const timeoutHandle = setTimeout(() => {
545
- this.pendingSpawns.delete(envelopeId);
546
- // Also clean up pending agent ready if spawn times out
547
- if (waitForReady) {
548
- const pending = this.pendingAgentReady.get(options.name);
549
- if (pending) {
550
- clearTimeout(pending.timeoutHandle);
551
- this.pendingAgentReady.delete(options.name);
552
- }
553
- }
554
- reject(new Error(`Spawn timeout after ${timeoutMs}ms`));
555
- }, timeoutMs);
556
- this.pendingSpawns.set(envelopeId, { resolve, reject, timeoutHandle });
557
- const envelope = {
558
- v: PROTOCOL_VERSION,
559
- type: 'SPAWN',
560
- id: envelopeId,
561
- ts: Date.now(),
562
- payload: {
563
- name: options.name,
564
- cli: options.cli,
565
- task: options.task || '',
566
- cwd: options.cwd,
567
- team: options.team,
568
- model: options.model,
569
- interactive: options.interactive,
570
- shadowMode: options.shadowMode,
571
- shadowOf: options.shadowOf,
572
- shadowAgent: options.shadowAgent,
573
- shadowTriggers: options.shadowTriggers,
574
- shadowSpeakOn: options.shadowSpeakOn,
575
- userId: options.userId,
576
- includeWorkflowConventions: options.includeWorkflowConventions,
577
- spawnerName: options.spawnerName || this.config.agentName,
578
- },
579
- };
580
- const sent = this.send(envelope);
581
- if (!sent) {
582
- clearTimeout(timeoutHandle);
583
- this.pendingSpawns.delete(envelopeId);
584
- // Also clean up pending agent ready if send fails
585
- if (waitForReady) {
586
- const pending = this.pendingAgentReady.get(options.name);
587
- if (pending) {
588
- clearTimeout(pending.timeoutHandle);
589
- this.pendingAgentReady.delete(options.name);
590
- }
591
- }
592
- reject(new Error('Failed to send spawn message'));
593
- }
594
- });
595
- // If spawn failed or we don't need to wait for ready, return immediately
596
- if (!spawnResult.success || !waitForReady || !readyPromise) {
597
- // Clean up pending agent ready if spawn failed
598
- if (!spawnResult.success && waitForReady) {
599
- const pending = this.pendingAgentReady.get(options.name);
600
- if (pending) {
601
- clearTimeout(pending.timeoutHandle);
602
- this.pendingAgentReady.delete(options.name);
603
- }
604
- }
605
- return spawnResult;
105
+ if (this.startingPromise) {
106
+ return this.startingPromise;
606
107
  }
607
- // Wait for the agent to become ready
108
+ this.startingPromise = this.startInternal();
608
109
  try {
609
- const readyInfo = await readyPromise;
610
- return {
611
- ...spawnResult,
612
- ready: true,
613
- readyInfo,
614
- };
110
+ await this.startingPromise;
615
111
  }
616
- catch (err) {
617
- // Agent spawned but didn't become ready in time
618
- // Return the spawn result with ready: false
619
- return {
620
- ...spawnResult,
621
- ready: false,
622
- };
112
+ finally {
113
+ this.startingPromise = undefined;
623
114
  }
624
115
  }
625
116
  /**
626
- * Wait for an agent to become ready (complete HELLO/WELCOME handshake).
627
- * This is useful when you want to wait for an agent that was spawned through
628
- * another mechanism, or to verify an agent is connected before sending messages.
629
- *
630
- * @example
631
- * ```typescript
632
- * // Wait for an agent that might be spawning
633
- * try {
634
- * const readyInfo = await client.waitForAgentReady('Worker', 30000);
635
- * console.log(`Worker is ready: ${readyInfo.cli}`);
636
- * } catch (err) {
637
- * console.error('Worker did not become ready in time');
638
- * }
639
- * ```
640
- *
641
- * @param name - Agent name to wait for
642
- * @param timeoutMs - Timeout in milliseconds (default: 60000ms)
643
- * @returns Promise that resolves with AgentReadyPayload when the agent connects
644
- * @throws Error if the agent doesn't become ready within the timeout
117
+ * Pre-register a batch of agents with Relaycast before their steps execute.
118
+ * The broker warms its token cache in parallel; subsequent spawn_agent calls
119
+ * hit the cache rather than waiting on individual HTTP registrations.
120
+ * Fire-and-forget from the caller's perspective — broker responds immediately
121
+ * and registers in the background.
645
122
  */
646
- async waitForAgentReady(name, timeoutMs = 60000) {
647
- if (this._state !== 'READY') {
648
- throw new Error('Client not ready');
649
- }
650
- // Check if we're already waiting for this agent
651
- if (this.pendingAgentReady.has(name)) {
652
- throw new Error(`Already waiting for agent ${name} to be ready`);
653
- }
654
- return new Promise((resolve, reject) => {
655
- const timeoutHandle = setTimeout(() => {
656
- this.pendingAgentReady.delete(name);
657
- reject(new Error(`Agent ${name} did not become ready within ${timeoutMs}ms`));
658
- }, timeoutMs);
659
- this.pendingAgentReady.set(name, { resolve, reject, timeoutHandle });
123
+ async preflightAgents(agents) {
124
+ if (agents.length === 0)
125
+ return;
126
+ await this.start();
127
+ await this.requestOk('preflight_agents', { agents });
128
+ }
129
+ async spawnPty(input) {
130
+ await this.start();
131
+ const args = buildPtyArgsWithModel(input.cli, input.args ?? [], input.model);
132
+ const agent = {
133
+ name: input.name,
134
+ runtime: 'pty',
135
+ cli: input.cli,
136
+ args,
137
+ channels: input.channels ?? [],
138
+ model: input.model,
139
+ cwd: input.cwd ?? this.options.cwd,
140
+ team: input.team,
141
+ shadow_of: input.shadowOf,
142
+ shadow_mode: input.shadowMode,
143
+ restart_policy: input.restartPolicy,
144
+ };
145
+ const result = await this.requestOk('spawn_agent', {
146
+ agent,
147
+ ...(input.task != null ? { initial_task: input.task } : {}),
148
+ ...(input.idleThresholdSecs != null ? { idle_threshold_secs: input.idleThresholdSecs } : {}),
149
+ ...(input.continueFrom != null ? { continue_from: input.continueFrom } : {}),
660
150
  });
661
- }
662
- /**
663
- * Release (terminate) an agent via the relay daemon.
664
- * @param name - Agent name to release
665
- * @param timeoutMs - Timeout for release operation (default: 10000ms)
666
- */
667
- async release(name, reason, timeoutMs = 10000) {
668
- if (this._state !== 'READY') {
669
- throw new Error('Client not ready');
670
- }
671
- const envelopeId = generateId();
672
- return new Promise((resolve, reject) => {
673
- const timeoutHandle = setTimeout(() => {
674
- this.pendingReleases.delete(envelopeId);
675
- reject(new Error(`Release timeout after ${timeoutMs}ms`));
676
- }, timeoutMs);
677
- this.pendingReleases.set(envelopeId, { resolve, reject, timeoutHandle });
678
- const envelope = {
679
- v: PROTOCOL_VERSION,
680
- type: 'RELEASE',
681
- id: envelopeId,
682
- ts: Date.now(),
683
- payload: {
684
- name,
685
- reason,
686
- },
687
- };
688
- const sent = this.send(envelope);
689
- if (!sent) {
690
- clearTimeout(timeoutHandle);
691
- this.pendingReleases.delete(envelopeId);
692
- reject(new Error('Failed to send release message'));
693
- }
151
+ return result;
152
+ }
153
+ async spawnHeadlessClaude(input) {
154
+ await this.start();
155
+ const agent = {
156
+ name: input.name,
157
+ runtime: 'headless_claude',
158
+ args: input.args ?? [],
159
+ channels: input.channels ?? [],
160
+ };
161
+ const result = await this.requestOk('spawn_agent', {
162
+ agent,
163
+ ...(input.task != null ? { initial_task: input.task } : {}),
694
164
  });
165
+ return result;
695
166
  }
696
- /**
697
- * Send input data to a spawned agent's PTY.
698
- * @param name - Agent name to send input to
699
- * @param data - Input data to send
700
- * @param timeoutMs - Timeout for the operation (default: 10000ms)
701
- */
702
- async sendWorkerInput(name, data, timeoutMs = 10000) {
703
- if (this._state !== 'READY') {
704
- throw new Error('Client not ready');
705
- }
706
- const envelopeId = generateId();
707
- return new Promise((resolve, reject) => {
708
- const timeoutHandle = setTimeout(() => {
709
- this.pendingSendInputs.delete(envelopeId);
710
- reject(new Error(`Send input timeout after ${timeoutMs}ms`));
711
- }, timeoutMs);
712
- this.pendingSendInputs.set(envelopeId, { resolve, reject, timeoutHandle });
713
- const envelope = {
714
- v: PROTOCOL_VERSION,
715
- type: 'SEND_INPUT',
716
- id: envelopeId,
717
- ts: Date.now(),
718
- payload: {
719
- name,
720
- data,
721
- },
722
- };
723
- const sent = this.send(envelope);
724
- if (!sent) {
725
- clearTimeout(timeoutHandle);
726
- this.pendingSendInputs.delete(envelopeId);
727
- reject(new Error('Failed to send input message'));
728
- }
729
- });
167
+ async release(name, reason) {
168
+ await this.start();
169
+ return this.requestOk('release_agent', { name, reason });
730
170
  }
731
- /**
732
- * Change the model of a running spawned agent.
733
- * The command waits for the agent to be idle before sending the model switch command.
734
- *
735
- * @param name - Agent name to switch model for
736
- * @param model - Target model (e.g., 'opus', 'sonnet', 'haiku')
737
- * @param options - Options including idle wait timeout
738
- * @param operationTimeoutMs - Timeout for the overall protocol operation (default: 45000ms)
739
- */
740
- async setWorkerModel(name, model, options, operationTimeoutMs = 45000) {
741
- if (this._state !== 'READY') {
742
- throw new Error('Client not ready');
743
- }
744
- const envelopeId = generateId();
745
- return new Promise((resolve, reject) => {
746
- const timeoutHandle = setTimeout(() => {
747
- this.pendingSetModels.delete(envelopeId);
748
- reject(new Error(`Set model timeout after ${operationTimeoutMs}ms`));
749
- }, operationTimeoutMs);
750
- this.pendingSetModels.set(envelopeId, { resolve, reject, timeoutHandle });
751
- const envelope = {
752
- v: PROTOCOL_VERSION,
753
- type: 'SET_MODEL',
754
- id: envelopeId,
755
- ts: Date.now(),
756
- payload: {
757
- name,
758
- model,
759
- timeoutMs: options?.timeoutMs,
760
- },
761
- };
762
- const sent = this.send(envelope);
763
- if (!sent) {
764
- clearTimeout(timeoutHandle);
765
- this.pendingSetModels.delete(envelopeId);
766
- reject(new Error('Failed to send set model message'));
767
- }
768
- });
171
+ async sendInput(name, data) {
172
+ await this.start();
173
+ return this.requestOk('send_input', { name, data });
769
174
  }
770
- /**
771
- * List active spawned workers.
772
- * @param timeoutMs - Timeout for the operation (default: 10000ms)
773
- */
774
- async listWorkers(timeoutMs = 10000) {
775
- if (this._state !== 'READY') {
776
- throw new Error('Client not ready');
777
- }
778
- const envelopeId = generateId();
779
- return new Promise((resolve, reject) => {
780
- const timeoutHandle = setTimeout(() => {
781
- this.pendingListWorkers.delete(envelopeId);
782
- reject(new Error(`List workers timeout after ${timeoutMs}ms`));
783
- }, timeoutMs);
784
- this.pendingListWorkers.set(envelopeId, { resolve, reject, timeoutHandle });
785
- const envelope = {
786
- v: PROTOCOL_VERSION,
787
- type: 'LIST_WORKERS',
788
- id: envelopeId,
789
- ts: Date.now(),
790
- payload: {},
791
- };
792
- const sent = this.send(envelope);
793
- if (!sent) {
794
- clearTimeout(timeoutHandle);
795
- this.pendingListWorkers.delete(envelopeId);
796
- reject(new Error('Failed to send list workers message'));
797
- }
175
+ async setModel(name, model, opts) {
176
+ await this.start();
177
+ return this.requestOk('set_model', {
178
+ name,
179
+ model,
180
+ timeout_ms: opts?.timeoutMs,
798
181
  });
799
182
  }
800
- // =============================================================================
801
- // Channel Operations
802
- // =============================================================================
803
- /**
804
- * Join a channel.
805
- * @param channel - Channel name (e.g., '#general', 'dm:alice:bob')
806
- * @param displayName - Optional display name for this member
807
- */
808
- joinChannel(channel, displayName) {
809
- if (this._state !== 'READY') {
810
- return false;
811
- }
812
- const envelope = {
813
- v: PROTOCOL_VERSION,
814
- type: 'CHANNEL_JOIN',
815
- id: generateId(),
816
- ts: Date.now(),
817
- payload: {
818
- channel,
819
- displayName,
820
- },
821
- };
822
- return this.send(envelope);
823
- }
824
- /**
825
- * Admin join: Add any member to a channel (does not require member to be connected).
826
- * @param channel - Channel name
827
- * @param member - Name of the member to add
828
- */
829
- adminJoinChannel(channel, member) {
830
- if (this._state !== 'READY') {
831
- return false;
832
- }
833
- const envelope = {
834
- v: PROTOCOL_VERSION,
835
- type: 'CHANNEL_JOIN',
836
- id: generateId(),
837
- ts: Date.now(),
838
- payload: {
839
- channel,
840
- member,
841
- },
842
- };
843
- return this.send(envelope);
844
- }
845
- /**
846
- * Leave a channel.
847
- * @param channel - Channel name to leave
848
- * @param reason - Optional reason for leaving
849
- */
850
- leaveChannel(channel, reason) {
851
- if (this._state !== 'READY')
852
- return false;
853
- const envelope = {
854
- v: PROTOCOL_VERSION,
855
- type: 'CHANNEL_LEAVE',
856
- id: generateId(),
857
- ts: Date.now(),
858
- payload: {
859
- channel,
860
- reason,
861
- },
862
- };
863
- return this.send(envelope);
864
- }
865
- /**
866
- * Admin remove: Remove any member from a channel.
867
- * @param channel - Channel name
868
- * @param member - Name of the member to remove
869
- */
870
- adminRemoveMember(channel, member) {
871
- if (this._state !== 'READY') {
872
- return false;
873
- }
874
- const envelope = {
875
- v: PROTOCOL_VERSION,
876
- type: 'CHANNEL_LEAVE',
877
- id: generateId(),
878
- ts: Date.now(),
879
- payload: {
880
- channel,
881
- member,
882
- },
883
- };
884
- return this.send(envelope);
885
- }
886
- /**
887
- * Send a message to a channel.
888
- * @param channel - Channel name
889
- * @param body - Message content
890
- * @param options - Optional thread, mentions, attachments
891
- */
892
- sendChannelMessage(channel, body, options) {
893
- if (this._state !== 'READY') {
894
- return false;
895
- }
896
- const envelope = {
897
- v: PROTOCOL_VERSION,
898
- type: 'CHANNEL_MESSAGE',
899
- id: generateId(),
900
- ts: Date.now(),
901
- payload: {
902
- channel,
903
- body,
904
- thread: options?.thread,
905
- mentions: options?.mentions,
906
- attachments: options?.attachments,
907
- data: options?.data,
908
- },
909
- };
910
- return this.send(envelope);
911
- }
912
- // =============================================================================
913
- // Consensus Operations
914
- // =============================================================================
915
- /**
916
- * Create a consensus proposal.
917
- *
918
- * The proposal will be broadcast to all participants. They can vote using
919
- * the `vote()` method. Results are delivered via `onMessage` callback.
920
- *
921
- * @example
922
- * ```typescript
923
- * client.createProposal({
924
- * title: 'Approve API design',
925
- * description: 'Should we proceed with the REST API design?',
926
- * participants: ['Developer', 'Reviewer', 'Lead'],
927
- * consensusType: 'majority',
928
- * });
929
- * ```
930
- *
931
- * @param options - Proposal options
932
- * @returns true if the message was sent
933
- */
934
- createProposal(options) {
935
- if (this._state !== 'READY') {
936
- return false;
937
- }
938
- // Build the PROPOSE command message
939
- const lines = [
940
- `PROPOSE: ${options.title}`,
941
- `TYPE: ${options.consensusType ?? 'majority'}`,
942
- `PARTICIPANTS: ${options.participants.join(', ')}`,
943
- `DESCRIPTION: ${options.description}`,
944
- ];
945
- if (options.timeoutMs !== undefined) {
946
- lines.push(`TIMEOUT: ${options.timeoutMs}`);
947
- }
948
- if (options.quorum !== undefined) {
949
- lines.push(`QUORUM: ${options.quorum}`);
950
- }
951
- if (options.threshold !== undefined) {
952
- lines.push(`THRESHOLD: ${options.threshold}`);
953
- }
954
- const body = lines.join('\n');
955
- // Send to the special _consensus recipient
956
- return this.sendMessage('_consensus', body, 'action');
183
+ async getMetrics(agent) {
184
+ await this.start();
185
+ return this.requestOk('get_metrics', { agent });
957
186
  }
958
- /**
959
- * Vote on a consensus proposal.
960
- *
961
- * @example
962
- * ```typescript
963
- * // Approve with a reason
964
- * client.vote({
965
- * proposalId: 'prop_123',
966
- * value: 'approve',
967
- * reason: 'Looks good to me',
968
- * });
969
- *
970
- * // Reject without reason
971
- * client.vote({ proposalId: 'prop_123', value: 'reject' });
972
- * ```
973
- *
974
- * @param options - Vote options
975
- * @returns true if the message was sent
976
- */
977
- vote(options) {
978
- if (this._state !== 'READY') {
979
- return false;
980
- }
981
- // Build the VOTE command
982
- let body = `VOTE ${options.proposalId} ${options.value}`;
983
- if (options.reason) {
984
- body += ` ${options.reason}`;
985
- }
986
- // Send to the special _consensus recipient
987
- return this.sendMessage('_consensus', body, 'action');
187
+ async getCrashInsights() {
188
+ await this.start();
189
+ return this.requestOk('get_crash_insights', {});
988
190
  }
989
- // =============================================================================
990
- // Query Operations
991
- // =============================================================================
992
- /**
993
- * Send a query to the daemon and wait for a response.
994
- * @internal
995
- */
996
- async query(type, payload, timeoutMs = 5000) {
997
- if (this._state !== 'READY') {
998
- throw new Error('Client not ready');
999
- }
1000
- const envelopeId = generateId();
1001
- return new Promise((resolve, reject) => {
1002
- const timeoutHandle = setTimeout(() => {
1003
- this.pendingQueries.delete(envelopeId);
1004
- reject(new Error(`Query timeout after ${timeoutMs}ms`));
1005
- }, timeoutMs);
1006
- this.pendingQueries.set(envelopeId, {
1007
- resolve: resolve,
1008
- reject,
1009
- timeoutHandle,
191
+ async sendMessage(input) {
192
+ await this.start();
193
+ try {
194
+ return await this.requestOk('send_message', {
195
+ to: input.to,
196
+ text: input.text,
197
+ from: input.from,
198
+ thread_id: input.threadId,
199
+ priority: input.priority,
200
+ data: input.data,
1010
201
  });
1011
- const envelope = {
1012
- v: PROTOCOL_VERSION,
1013
- type: type,
1014
- id: envelopeId,
1015
- ts: Date.now(),
1016
- payload,
1017
- };
1018
- const sent = this.send(envelope);
1019
- if (!sent) {
1020
- clearTimeout(timeoutHandle);
1021
- this.pendingQueries.delete(envelopeId);
1022
- reject(new Error(`Failed to send ${type} query`));
202
+ }
203
+ catch (error) {
204
+ if (error instanceof AgentRelayProtocolError && error.code === 'unsupported_operation') {
205
+ return { event_id: 'unsupported_operation', targets: [] };
1023
206
  }
1024
- });
1025
- }
1026
- /**
1027
- * Get daemon status information.
1028
- * @returns Daemon status including version, uptime, and counts
1029
- */
1030
- async getStatus() {
1031
- return this.query('STATUS', {});
1032
- }
1033
- /**
1034
- * Get messages from the inbox.
1035
- * @param options - Filter options
1036
- * @param options.limit - Maximum number of messages to return
1037
- * @param options.unreadOnly - Only return unread messages
1038
- * @param options.from - Filter by sender
1039
- * @param options.channel - Filter by channel
1040
- * @returns Array of inbox messages
1041
- */
1042
- async getInbox(options = {}) {
1043
- const payload = {
1044
- agent: this.config.agentName,
1045
- limit: options.limit,
1046
- unreadOnly: options.unreadOnly,
1047
- from: options.from,
1048
- channel: options.channel,
1049
- };
1050
- const response = await this.query('INBOX', payload);
1051
- return response.messages || [];
1052
- }
1053
- /**
1054
- * Query all messages (not filtered by recipient).
1055
- * Used by dashboard to get message history.
1056
- * @param options - Query options
1057
- * @param options.limit - Maximum number of messages to return (default: 100)
1058
- * @param options.sinceTs - Only return messages after this timestamp
1059
- * @param options.from - Filter by sender
1060
- * @param options.to - Filter by recipient
1061
- * @param options.thread - Filter by thread ID
1062
- * @param options.order - Sort order ('asc' or 'desc', default: 'desc')
1063
- * @returns Array of messages
1064
- */
1065
- async queryMessages(options = {}) {
1066
- const payload = {
1067
- limit: options.limit,
1068
- sinceTs: options.sinceTs,
1069
- from: options.from,
1070
- to: options.to,
1071
- thread: options.thread,
1072
- order: options.order,
1073
- };
1074
- const response = await this.query('MESSAGES_QUERY', payload);
1075
- return response.messages || [];
1076
- }
1077
- /**
1078
- * List online agents.
1079
- * @param options - Filter options
1080
- * @param options.includeIdle - Include idle agents (default: true)
1081
- * @param options.project - Filter by project
1082
- * @returns Array of agent info
1083
- */
1084
- async listAgents(options = {}) {
1085
- const payload = {
1086
- includeIdle: options.includeIdle ?? true,
1087
- project: options.project,
1088
- };
1089
- const response = await this.query('LIST_AGENTS', payload);
1090
- return response.agents || [];
1091
- }
1092
- /**
1093
- * Get system health information.
1094
- * @param options - Include options
1095
- * @param options.includeCrashes - Include crash history (default: true)
1096
- * @param options.includeAlerts - Include alerts (default: true)
1097
- * @returns Health information including score, issues, and recommendations
1098
- */
1099
- async getHealth(options = {}) {
1100
- const payload = {
1101
- includeCrashes: options.includeCrashes ?? true,
1102
- includeAlerts: options.includeAlerts ?? true,
1103
- };
1104
- return this.query('HEALTH', payload);
1105
- }
1106
- /**
1107
- * Get resource metrics for agents.
1108
- * @param options - Filter options
1109
- * @param options.agent - Filter to a specific agent
1110
- * @returns Metrics including memory, CPU, and system info
1111
- */
1112
- async getMetrics(options = {}) {
1113
- const payload = {
1114
- agent: options.agent,
1115
- };
1116
- return this.query('METRICS', payload);
1117
- }
1118
- /**
1119
- * List only currently connected agents (not historical/registered agents).
1120
- * Use this instead of listAgents() when you need accurate liveness information.
1121
- * @param options - Filter options
1122
- * @param options.project - Filter by project
1123
- * @returns Array of currently connected agent info
1124
- */
1125
- async listConnectedAgents(options = {}) {
1126
- const payload = {
1127
- project: options.project,
1128
- };
1129
- const response = await this.query('LIST_CONNECTED_AGENTS', payload);
1130
- return response.agents || [];
1131
- }
1132
- /**
1133
- * Remove an agent from the registry (sessions, agents.json).
1134
- * Use this to clean up stale agents that are no longer needed.
1135
- * @param name - Agent name to remove
1136
- * @param options - Removal options
1137
- * @param options.removeMessages - Also remove all messages from/to this agent (default: false)
1138
- * @returns Result indicating if the agent was removed
1139
- */
1140
- async removeAgent(name, options = {}) {
1141
- const payload = {
1142
- name,
1143
- removeMessages: options.removeMessages,
1144
- };
1145
- return this.query('REMOVE_AGENT', payload);
1146
- }
1147
- // Private methods
1148
- setState(state) {
1149
- this._state = state;
1150
- if (this.onStateChange) {
1151
- this.onStateChange(state);
207
+ throw error;
1152
208
  }
1153
209
  }
1154
- sendHello() {
1155
- const hello = {
1156
- v: PROTOCOL_VERSION,
1157
- type: 'HELLO',
1158
- id: generateId(),
1159
- ts: Date.now(),
1160
- payload: {
1161
- agent: this.config.agentName,
1162
- entityType: this.config.entityType,
1163
- cli: this.config.cli,
1164
- program: this.config.program,
1165
- model: this.config.model,
1166
- task: this.config.task,
1167
- workingDirectory: this.config.workingDirectory,
1168
- team: this.config.team,
1169
- displayName: this.config.displayName,
1170
- avatarUrl: this.config.avatarUrl,
1171
- capabilities: {
1172
- ack: true,
1173
- resume: true,
1174
- max_inflight: 256,
1175
- supports_topics: true,
1176
- },
1177
- session: this.resumeToken ? { resume_token: this.resumeToken } : undefined,
1178
- _isSystemComponent: this.config._isSystemComponent,
1179
- },
1180
- };
1181
- this.send(hello);
210
+ async listAgents() {
211
+ await this.start();
212
+ const result = await this.requestOk('list_agents', {});
213
+ return result.agents;
1182
214
  }
1183
- send(envelope) {
1184
- if (!this.socket)
1185
- return false;
1186
- try {
1187
- const frame = encodeFrameLegacy(envelope);
1188
- this.writeQueue.push(frame);
1189
- if (!this.writeScheduled) {
1190
- this.writeScheduled = true;
1191
- setImmediate(() => this.flushWrites());
1192
- }
1193
- return true;
1194
- }
1195
- catch (err) {
1196
- this.handleError(err);
1197
- return false;
1198
- }
215
+ async getStatus() {
216
+ await this.start();
217
+ return this.requestOk('get_status', {});
1199
218
  }
1200
- flushWrites() {
1201
- this.writeScheduled = false;
1202
- if (this.writeQueue.length === 0 || !this.socket)
219
+ async shutdown() {
220
+ if (!this.child) {
1203
221
  return;
1204
- if (this.writeQueue.length === 1) {
1205
- this.socket.write(this.writeQueue[0]);
1206
- }
1207
- else {
1208
- this.socket.write(Buffer.concat(this.writeQueue));
1209
222
  }
1210
- this.writeQueue = [];
1211
- }
1212
- handleData(data) {
1213
223
  try {
1214
- const frames = this.parser.push(data);
1215
- for (const frame of frames) {
1216
- this.processFrame(frame);
1217
- }
224
+ await this.requestOk('shutdown', {});
1218
225
  }
1219
- catch (err) {
1220
- this.handleError(err);
226
+ catch {
227
+ // Continue shutdown path if broker is already unhealthy.
1221
228
  }
1222
- }
1223
- processFrame(envelope) {
1224
- switch (envelope.type) {
1225
- case 'WELCOME':
1226
- this.handleWelcome(envelope);
1227
- break;
1228
- case 'DELIVER':
1229
- this.handleDeliver(envelope);
1230
- break;
1231
- case 'CHANNEL_MESSAGE':
1232
- this.handleChannelMessage(envelope);
1233
- break;
1234
- case 'PING':
1235
- this.handlePing(envelope);
1236
- break;
1237
- case 'ACK':
1238
- this.handleAck(envelope);
1239
- break;
1240
- case 'SPAWN_RESULT':
1241
- this.handleSpawnResult(envelope);
1242
- break;
1243
- case 'RELEASE_RESULT':
1244
- this.handleReleaseResult(envelope);
1245
- break;
1246
- case 'SEND_INPUT_RESULT':
1247
- this.handleSendInputResult(envelope);
1248
- break;
1249
- case 'SET_MODEL_RESULT':
1250
- this.handleSetModelResult(envelope);
1251
- break;
1252
- case 'LIST_WORKERS_RESULT':
1253
- this.handleListWorkersResult(envelope);
1254
- break;
1255
- case 'AGENT_READY':
1256
- this.handleAgentReady(envelope);
1257
- break;
1258
- case 'ERROR':
1259
- this.handleErrorFrame(envelope);
1260
- break;
1261
- case 'BUSY':
1262
- if (!this.config.quiet) {
1263
- console.warn('[sdk] Server busy, backing off');
1264
- }
1265
- break;
1266
- case 'STATUS_RESPONSE':
1267
- case 'INBOX_RESPONSE':
1268
- case 'MESSAGES_RESPONSE':
1269
- case 'LIST_AGENTS_RESPONSE':
1270
- case 'LIST_CONNECTED_AGENTS_RESPONSE':
1271
- case 'REMOVE_AGENT_RESPONSE':
1272
- case 'HEALTH_RESPONSE':
1273
- case 'METRICS_RESPONSE':
1274
- this.handleQueryResponse(envelope);
1275
- break;
229
+ const child = this.child;
230
+ const wait = this.exitPromise ?? Promise.resolve();
231
+ const timeout = setTimeout(() => {
232
+ if (!child.killed) {
233
+ child.kill('SIGTERM');
234
+ }
235
+ }, this.options.shutdownTimeoutMs);
236
+ try {
237
+ await wait;
1276
238
  }
1277
- }
1278
- handleWelcome(envelope) {
1279
- this.sessionId = envelope.payload.session_id;
1280
- this.resumeToken = envelope.payload.resume_token;
1281
- this.reconnectAttempts = 0;
1282
- this.reconnectDelay = this.config.reconnectDelayMs;
1283
- this.setState('READY');
1284
- if (!this.config.quiet) {
1285
- console.log(`[sdk] Connected as ${this.config.agentName} (session: ${this.sessionId})`);
239
+ finally {
240
+ clearTimeout(timeout);
241
+ if (this.child) {
242
+ this.child.kill('SIGKILL');
243
+ }
1286
244
  }
1287
245
  }
1288
- handleDeliver(envelope) {
1289
- // Send ACK
1290
- this.send({
1291
- v: PROTOCOL_VERSION,
1292
- type: 'ACK',
1293
- id: generateId(),
1294
- ts: Date.now(),
1295
- payload: {
1296
- ack_id: envelope.id,
1297
- seq: envelope.delivery.seq,
1298
- },
1299
- });
1300
- const duplicate = this.dedupeCache.check(envelope.id);
1301
- if (duplicate) {
246
+ async waitForExit() {
247
+ if (!this.child) {
1302
248
  return;
1303
249
  }
1304
- // Check if this is a response to a pending request
1305
- const correlationId = this.extractCorrelationId(envelope);
1306
- if (correlationId && envelope.from) {
1307
- const pending = this.pendingRequests.get(correlationId);
1308
- if (pending) {
1309
- // This is a response to our request
1310
- clearTimeout(pending.timeoutHandle);
1311
- this.pendingRequests.delete(correlationId);
1312
- pending.resolve({
1313
- from: envelope.from,
1314
- body: envelope.payload.body,
1315
- data: envelope.payload.data,
1316
- correlationId,
1317
- thread: envelope.payload.thread,
1318
- payload: envelope.payload,
1319
- });
1320
- // Still call onMessage so the app is aware of the response if needed
250
+ await this.exitPromise;
251
+ }
252
+ async startInternal() {
253
+ const resolvedBinary = expandTilde(this.options.binaryPath);
254
+ if (isExplicitPath(this.options.binaryPath) && !fs.existsSync(resolvedBinary)) {
255
+ throw new AgentRelayProcessError(`broker binary not found: ${this.options.binaryPath}`);
256
+ }
257
+ this.lastStderrLine = undefined;
258
+ const args = [
259
+ 'init',
260
+ '--name',
261
+ this.options.brokerName,
262
+ '--channels',
263
+ this.options.channels.join(','),
264
+ ...this.options.binaryArgs,
265
+ ];
266
+ // Ensure the SDK bin directory (containing agent-relay-broker + relay_send) is on
267
+ // PATH so spawned workers can find relay_send without any user setup.
268
+ const env = { ...this.options.env };
269
+ if (isExplicitPath(this.options.binaryPath)) {
270
+ const binDir = path.dirname(path.resolve(resolvedBinary));
271
+ const currentPath = env.PATH ?? env.Path ?? '';
272
+ if (!currentPath.split(path.delimiter).includes(binDir)) {
273
+ env.PATH = `${binDir}${path.delimiter}${currentPath}`;
1321
274
  }
1322
275
  }
1323
- if (this.onMessage && envelope.from) {
1324
- this.onMessage(envelope.from, envelope.payload, envelope.id, envelope.payload_meta, envelope.delivery.originalTo);
276
+ console.log(`[broker] Starting: ${resolvedBinary} ${args.join(' ')}`);
277
+ const child = spawn(resolvedBinary, args, {
278
+ cwd: this.options.cwd,
279
+ env,
280
+ stdio: 'pipe',
281
+ });
282
+ this.child = child;
283
+ this.stdoutRl = createInterface({ input: child.stdout, crlfDelay: Infinity });
284
+ this.stderrRl = createInterface({ input: child.stderr, crlfDelay: Infinity });
285
+ this.stdoutRl.on('line', (line) => {
286
+ this.handleStdoutLine(line);
287
+ });
288
+ this.stderrRl.on('line', (line) => {
289
+ const trimmed = line.trim();
290
+ if (trimmed) {
291
+ this.lastStderrLine = trimmed;
292
+ }
293
+ for (const listener of this.stderrListeners) {
294
+ listener(line);
295
+ }
296
+ });
297
+ this.exitPromise = new Promise((resolve) => {
298
+ child.once('exit', (code, signal) => {
299
+ const detail = this.lastStderrLine ? `: ${this.lastStderrLine}` : '';
300
+ const error = new AgentRelayProcessError(`broker exited (code=${code ?? 'null'}, signal=${signal ?? 'null'})${detail}`);
301
+ this.failAllPending(error);
302
+ this.disposeProcessHandles();
303
+ resolve();
304
+ });
305
+ child.once('error', (error) => {
306
+ this.failAllPending(error);
307
+ this.disposeProcessHandles();
308
+ resolve();
309
+ });
310
+ });
311
+ const helloAck = await this.requestHello();
312
+ console.log('[broker] Broker ready (hello handshake complete)');
313
+ if (helloAck.workspace_key) {
314
+ this.workspaceKey = helloAck.workspace_key;
315
+ }
316
+ }
317
+ disposeProcessHandles() {
318
+ this.stdoutRl?.close();
319
+ this.stderrRl?.close();
320
+ this.stdoutRl = undefined;
321
+ this.stderrRl = undefined;
322
+ this.lastStderrLine = undefined;
323
+ this.child = undefined;
324
+ this.exitPromise = undefined;
325
+ }
326
+ failAllPending(error) {
327
+ for (const pending of this.pending.values()) {
328
+ clearTimeout(pending.timeout);
329
+ pending.reject(error);
1325
330
  }
331
+ this.pending.clear();
1326
332
  }
1327
- /**
1328
- * Extract correlation ID from a delivered message.
1329
- * Checks both payload_meta.replyTo and payload.data._correlationId
1330
- */
1331
- extractCorrelationId(envelope) {
1332
- // Check payload_meta.replyTo first (the preferred location)
1333
- if (envelope.payload_meta?.replyTo) {
1334
- return envelope.payload_meta.replyTo;
1335
- }
1336
- // Fall back to checking data._correlationId
1337
- if (envelope.payload.data && typeof envelope.payload.data._correlationId === 'string') {
1338
- return envelope.payload.data._correlationId;
333
+ handleStdoutLine(line) {
334
+ let parsed;
335
+ try {
336
+ parsed = JSON.parse(line);
1339
337
  }
1340
- return undefined;
1341
- }
1342
- handleChannelMessage(envelope) {
1343
- const duplicate = this.dedupeCache.check(envelope.id);
1344
- if (duplicate) {
338
+ catch {
339
+ // Non-protocol output should not crash the SDK.
1345
340
  return;
1346
341
  }
1347
- // Notify channel message handler
1348
- if (this.onChannelMessage && envelope.from) {
1349
- this.onChannelMessage(envelope.from, envelope.payload.channel, envelope.payload.body, envelope);
1350
- }
1351
- // Also call onMessage for backwards compatibility
1352
- if (this.onMessage && envelope.from) {
1353
- const sendPayload = {
1354
- kind: 'message',
1355
- body: envelope.payload.body,
1356
- data: {
1357
- _isChannelMessage: true,
1358
- _channel: envelope.payload.channel,
1359
- _mentions: envelope.payload.mentions,
1360
- },
1361
- thread: envelope.payload.thread,
1362
- };
1363
- this.onMessage(envelope.from, sendPayload, envelope.id, undefined, envelope.payload.channel);
1364
- }
1365
- }
1366
- handleAck(envelope) {
1367
- const correlationId = envelope.payload.correlationId;
1368
- if (!correlationId)
1369
- return;
1370
- const pending = this.pendingSyncAcks.get(correlationId);
1371
- if (!pending)
1372
- return;
1373
- clearTimeout(pending.timeoutHandle);
1374
- this.pendingSyncAcks.delete(correlationId);
1375
- pending.resolve(envelope.payload);
1376
- }
1377
- handleSpawnResult(envelope) {
1378
- const replyTo = envelope.payload.replyTo;
1379
- if (!replyTo)
1380
- return;
1381
- const pending = this.pendingSpawns.get(replyTo);
1382
- if (!pending)
1383
- return;
1384
- clearTimeout(pending.timeoutHandle);
1385
- this.pendingSpawns.delete(replyTo);
1386
- pending.resolve(envelope.payload);
1387
- }
1388
- handleReleaseResult(envelope) {
1389
- const replyTo = envelope.payload.replyTo;
1390
- if (!replyTo)
1391
- return;
1392
- const pending = this.pendingReleases.get(replyTo);
1393
- if (!pending)
1394
- return;
1395
- clearTimeout(pending.timeoutHandle);
1396
- this.pendingReleases.delete(replyTo);
1397
- pending.resolve(envelope.payload);
1398
- }
1399
- handleSendInputResult(envelope) {
1400
- const replyTo = envelope.payload.replyTo;
1401
- if (!replyTo)
342
+ if (!parsed || typeof parsed !== 'object') {
1402
343
  return;
1403
- const pending = this.pendingSendInputs.get(replyTo);
1404
- if (!pending)
1405
- return;
1406
- clearTimeout(pending.timeoutHandle);
1407
- this.pendingSendInputs.delete(replyTo);
1408
- pending.resolve(envelope.payload);
1409
- }
1410
- handleSetModelResult(envelope) {
1411
- const replyTo = envelope.payload.replyTo;
1412
- if (!replyTo)
1413
- return;
1414
- const pending = this.pendingSetModels.get(replyTo);
1415
- if (!pending)
1416
- return;
1417
- clearTimeout(pending.timeoutHandle);
1418
- this.pendingSetModels.delete(replyTo);
1419
- pending.resolve(envelope.payload);
1420
- }
1421
- handleListWorkersResult(envelope) {
1422
- const replyTo = envelope.payload.replyTo;
1423
- if (!replyTo)
1424
- return;
1425
- const pending = this.pendingListWorkers.get(replyTo);
1426
- if (!pending)
1427
- return;
1428
- clearTimeout(pending.timeoutHandle);
1429
- this.pendingListWorkers.delete(replyTo);
1430
- pending.resolve(envelope.payload);
1431
- }
1432
- handleAgentReady(envelope) {
1433
- const agentName = envelope.payload.name;
1434
- // Resolve any pending waitForReady promises for this agent
1435
- const pending = this.pendingAgentReady.get(agentName);
1436
- if (pending) {
1437
- clearTimeout(pending.timeoutHandle);
1438
- this.pendingAgentReady.delete(agentName);
1439
- pending.resolve(envelope.payload);
1440
344
  }
1441
- // Call the onAgentReady callback if registered
1442
- if (this.onAgentReady) {
1443
- this.onAgentReady(envelope.payload);
1444
- }
1445
- }
1446
- handleQueryResponse(envelope) {
1447
- // Query responses use the envelope id to match requests
1448
- const pending = this.pendingQueries.get(envelope.id);
1449
- if (!pending)
345
+ if (parsed.v !== PROTOCOL_VERSION || typeof parsed.type !== 'string') {
1450
346
  return;
1451
- clearTimeout(pending.timeoutHandle);
1452
- this.pendingQueries.delete(envelope.id);
1453
- pending.resolve(envelope.payload);
1454
- }
1455
- handlePing(envelope) {
1456
- this.send({
1457
- v: PROTOCOL_VERSION,
1458
- type: 'PONG',
1459
- id: generateId(),
1460
- ts: Date.now(),
1461
- payload: envelope.payload ?? {},
1462
- });
1463
- }
1464
- handleErrorFrame(envelope) {
1465
- if (!this.config.quiet) {
1466
- console.error('[sdk] Server error:', envelope.payload);
1467
- }
1468
- if (envelope.payload.code === 'RESUME_TOO_OLD') {
1469
- this.resumeToken = undefined;
1470
- this.sessionId = undefined;
1471
347
  }
1472
- // Fatal errors (like DUPLICATE_CONNECTION) should prevent reconnection
1473
- if (envelope.payload.fatal) {
1474
- if (!this.config.quiet) {
1475
- console.error('[sdk] Fatal error received, will not reconnect:', envelope.payload.message);
348
+ const envelope = {
349
+ v: parsed.v,
350
+ type: parsed.type,
351
+ request_id: parsed.request_id,
352
+ payload: parsed.payload,
353
+ };
354
+ if (envelope.type === 'event') {
355
+ const payload = envelope.payload;
356
+ this.eventBuffer.push(payload);
357
+ if (this.eventBuffer.length > this.maxBufferSize) {
358
+ this.eventBuffer.shift();
359
+ }
360
+ for (const listener of this.eventListeners) {
361
+ listener(payload);
1476
362
  }
1477
- this._destroyed = true;
1478
- }
1479
- }
1480
- handleDisconnect() {
1481
- this.parser.reset();
1482
- this.socket = undefined;
1483
- this.rejectPendingSyncAcks(new Error('Disconnected while awaiting ACK'));
1484
- this.rejectPendingSpawns(new Error('Disconnected while awaiting spawn result'));
1485
- this.rejectPendingReleases(new Error('Disconnected while awaiting release result'));
1486
- this.rejectPendingSendInputs(new Error('Disconnected while awaiting send input result'));
1487
- this.rejectPendingSetModels(new Error('Disconnected while awaiting set model result'));
1488
- this.rejectPendingListWorkers(new Error('Disconnected while awaiting list workers result'));
1489
- this.rejectPendingQueries(new Error('Disconnected while awaiting query response'));
1490
- this.rejectPendingRequests(new Error('Disconnected while awaiting request response'));
1491
- this.rejectPendingAgentReady(new Error('Disconnected while awaiting agent ready'));
1492
- if (this._destroyed) {
1493
- this.setState('DISCONNECTED');
1494
363
  return;
1495
364
  }
1496
- if (this.config.reconnect && this.reconnectAttempts < this.config.maxReconnectAttempts) {
1497
- this.scheduleReconnect();
365
+ if (!envelope.request_id) {
366
+ return;
1498
367
  }
1499
- else {
1500
- this.setState('DISCONNECTED');
1501
- if (this.reconnectAttempts >= this.config.maxReconnectAttempts && !this.config.quiet) {
1502
- console.error(`[sdk] Max reconnect attempts reached (${this.config.maxReconnectAttempts}), giving up`);
1503
- }
368
+ const pending = this.pending.get(envelope.request_id);
369
+ if (!pending) {
370
+ return;
1504
371
  }
1505
- }
1506
- handleError(error) {
1507
- if (!this.config.quiet) {
1508
- console.error('[sdk] Error:', error.message);
372
+ if (envelope.type === 'error') {
373
+ clearTimeout(pending.timeout);
374
+ this.pending.delete(envelope.request_id);
375
+ pending.reject(new AgentRelayProtocolError(envelope.payload));
376
+ return;
1509
377
  }
1510
- if (this.onError) {
1511
- this.onError(error);
378
+ if (envelope.type !== pending.expectedType) {
379
+ clearTimeout(pending.timeout);
380
+ this.pending.delete(envelope.request_id);
381
+ pending.reject(new AgentRelayProcessError(`unexpected response type '${envelope.type}' for request '${envelope.request_id}' (expected '${pending.expectedType}')`));
382
+ return;
1512
383
  }
384
+ clearTimeout(pending.timeout);
385
+ this.pending.delete(envelope.request_id);
386
+ pending.resolve(envelope);
1513
387
  }
1514
- rejectPendingSyncAcks(error) {
1515
- for (const [correlationId, pending] of this.pendingSyncAcks.entries()) {
1516
- clearTimeout(pending.timeoutHandle);
1517
- pending.reject(error);
1518
- this.pendingSyncAcks.delete(correlationId);
1519
- }
388
+ async requestHello() {
389
+ const payload = {
390
+ client_name: this.options.clientName,
391
+ client_version: this.options.clientVersion,
392
+ };
393
+ const frame = await this.sendRequest('hello', payload, 'hello_ack');
394
+ return frame.payload;
1520
395
  }
1521
- rejectPendingSpawns(error) {
1522
- for (const [id, pending] of this.pendingSpawns.entries()) {
1523
- clearTimeout(pending.timeoutHandle);
1524
- pending.reject(error);
1525
- this.pendingSpawns.delete(id);
1526
- }
396
+ async requestOk(type, payload) {
397
+ const frame = await this.sendRequest(type, payload, 'ok');
398
+ const result = frame.payload;
399
+ return result.result;
1527
400
  }
1528
- rejectPendingReleases(error) {
1529
- for (const [id, pending] of this.pendingReleases.entries()) {
1530
- clearTimeout(pending.timeoutHandle);
1531
- pending.reject(error);
1532
- this.pendingReleases.delete(id);
401
+ async sendRequest(type, payload, expectedType) {
402
+ if (!this.child) {
403
+ throw new AgentRelayProcessError('broker is not running');
1533
404
  }
1534
- }
1535
- rejectPendingSendInputs(error) {
1536
- for (const [id, pending] of this.pendingSendInputs.entries()) {
1537
- clearTimeout(pending.timeoutHandle);
1538
- pending.reject(error);
1539
- this.pendingSendInputs.delete(id);
405
+ const requestId = `req_${++this.requestSeq}`;
406
+ const message = {
407
+ v: PROTOCOL_VERSION,
408
+ type,
409
+ request_id: requestId,
410
+ payload,
411
+ };
412
+ const responsePromise = new Promise((resolve, reject) => {
413
+ const timeout = setTimeout(() => {
414
+ this.pending.delete(requestId);
415
+ reject(new AgentRelayProcessError(`request timed out after ${this.options.requestTimeoutMs}ms (type='${type}', request_id='${requestId}')`));
416
+ }, this.options.requestTimeoutMs);
417
+ this.pending.set(requestId, {
418
+ expectedType,
419
+ resolve,
420
+ reject,
421
+ timeout,
422
+ });
423
+ });
424
+ const line = `${JSON.stringify(message)}\n`;
425
+ if (!this.child.stdin.write(line)) {
426
+ await once(this.child.stdin, 'drain');
1540
427
  }
428
+ return responsePromise;
1541
429
  }
1542
- rejectPendingSetModels(error) {
1543
- for (const [id, pending] of this.pendingSetModels.entries()) {
1544
- clearTimeout(pending.timeoutHandle);
1545
- pending.reject(error);
1546
- this.pendingSetModels.delete(id);
1547
- }
430
+ }
431
+ const CLI_MODEL_FLAG_CLIS = new Set(['claude', 'codex', 'gemini', 'goose', 'aider']);
432
+ const CLI_DEFAULT_ARGS = {
433
+ codex: ['-c', 'check_for_update_on_startup=false'],
434
+ };
435
+ function buildPtyArgsWithModel(cli, args, model) {
436
+ const cliName = cli.split(':')[0].trim().toLowerCase();
437
+ const defaultArgs = CLI_DEFAULT_ARGS[cliName] ?? [];
438
+ const baseArgs = [...defaultArgs, ...args];
439
+ if (!model) {
440
+ return baseArgs;
1548
441
  }
1549
- rejectPendingListWorkers(error) {
1550
- for (const [id, pending] of this.pendingListWorkers.entries()) {
1551
- clearTimeout(pending.timeoutHandle);
1552
- pending.reject(error);
1553
- this.pendingListWorkers.delete(id);
1554
- }
442
+ if (!CLI_MODEL_FLAG_CLIS.has(cliName)) {
443
+ return baseArgs;
1555
444
  }
1556
- rejectPendingQueries(error) {
1557
- for (const [id, pending] of this.pendingQueries.entries()) {
1558
- clearTimeout(pending.timeoutHandle);
1559
- pending.reject(error);
1560
- this.pendingQueries.delete(id);
1561
- }
445
+ if (hasModelArg(baseArgs)) {
446
+ return baseArgs;
1562
447
  }
1563
- rejectPendingRequests(error) {
1564
- for (const [correlationId, pending] of this.pendingRequests.entries()) {
1565
- clearTimeout(pending.timeoutHandle);
1566
- pending.reject(error);
1567
- this.pendingRequests.delete(correlationId);
448
+ return ['--model', model, ...baseArgs];
449
+ }
450
+ function hasModelArg(args) {
451
+ for (let i = 0; i < args.length; i += 1) {
452
+ const arg = args[i];
453
+ if (arg === '--model') {
454
+ return true;
1568
455
  }
1569
- }
1570
- rejectPendingAgentReady(error) {
1571
- for (const [agentName, pending] of this.pendingAgentReady.entries()) {
1572
- clearTimeout(pending.timeoutHandle);
1573
- pending.reject(error);
1574
- this.pendingAgentReady.delete(agentName);
456
+ if (arg.startsWith('--model=')) {
457
+ return true;
1575
458
  }
1576
459
  }
1577
- scheduleReconnect() {
1578
- this.setState('BACKOFF');
1579
- this.reconnectAttempts++;
1580
- const jitter = Math.random() * 0.3 + 0.85;
1581
- const delay = Math.min(this.reconnectDelay * jitter, this.config.reconnectMaxDelayMs);
1582
- this.reconnectDelay *= 2;
1583
- if (!this.config.quiet) {
1584
- console.log(`[sdk] Reconnecting in ${Math.round(delay)}ms (attempt ${this.reconnectAttempts})`);
1585
- }
1586
- this.reconnectTimer = setTimeout(() => {
1587
- this.connect().catch(() => { });
1588
- }, delay);
460
+ return false;
461
+ }
462
+ function expandTilde(p) {
463
+ if (p === '~' || p.startsWith('~/') || p.startsWith('~\\')) {
464
+ const home = os.homedir();
465
+ return path.join(home, p.slice(2));
1589
466
  }
467
+ return p;
468
+ }
469
+ function isExplicitPath(binaryPath) {
470
+ return (binaryPath.includes('/') ||
471
+ binaryPath.includes('\\') ||
472
+ binaryPath.startsWith('.') ||
473
+ binaryPath.startsWith('~'));
474
+ }
475
+ function resolveDefaultBinaryPath() {
476
+ const brokerExe = process.platform === 'win32' ? 'agent-relay-broker.exe' : 'agent-relay-broker';
477
+ const moduleDir = path.dirname(fileURLToPath(import.meta.url));
478
+ // 1. In a source checkout, prefer Cargo's release binary to avoid stale bundled
479
+ // copies when local dev rebuilds happen while broker processes are running.
480
+ const workspaceRelease = path.resolve(moduleDir, '..', '..', '..', 'target', 'release', brokerExe);
481
+ if (fs.existsSync(workspaceRelease)) {
482
+ return workspaceRelease;
483
+ }
484
+ // 2. Check for bundled broker binary in SDK package (npm install)
485
+ // Try platform-specific name first (CI publishes per-platform binaries),
486
+ // then fall back to the generic name (local dev / postinstall copy).
487
+ const binDir = path.resolve(moduleDir, '..', 'bin');
488
+ const platformMap = {
489
+ darwin: { arm64: 'darwin-arm64', x64: 'darwin-x64' },
490
+ linux: { arm64: 'linux-arm64', x64: 'linux-x64' },
491
+ };
492
+ const suffix = platformMap[process.platform]?.[process.arch];
493
+ if (suffix) {
494
+ const platformBinary = path.join(binDir, `agent-relay-broker-${suffix}`);
495
+ if (fs.existsSync(platformBinary)) {
496
+ return platformBinary;
497
+ }
498
+ }
499
+ const bundled = path.join(binDir, brokerExe);
500
+ if (fs.existsSync(bundled)) {
501
+ return bundled;
502
+ }
503
+ // 3. Check for standalone broker binary in ~/.agent-relay/bin/ (install.sh)
504
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '';
505
+ const standaloneBroker = path.join(homeDir, '.agent-relay', 'bin', brokerExe);
506
+ if (fs.existsSync(standaloneBroker)) {
507
+ return standaloneBroker;
508
+ }
509
+ // 4. Fall back to agent-relay on PATH (may be Node CLI — will fail for broker ops)
510
+ return 'agent-relay';
1590
511
  }
1591
512
  //# sourceMappingURL=client.js.map