agent-relay 2.3.13 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1421) 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 +50288 -63371
  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/bin/agent-relay-broker +0 -0
  240. package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts +2 -0
  241. package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts.map +1 -0
  242. package/packages/sdk/dist/__tests__/contract-fixtures.test.js +85 -0
  243. package/packages/sdk/dist/__tests__/contract-fixtures.test.js.map +1 -0
  244. package/packages/sdk/dist/__tests__/facade.test.js +305 -0
  245. package/packages/sdk/dist/__tests__/facade.test.js.map +1 -0
  246. package/packages/sdk/dist/__tests__/integration.test.js +169 -0
  247. package/packages/sdk/dist/__tests__/integration.test.js.map +1 -0
  248. package/packages/sdk/dist/__tests__/pty.test.d.ts +2 -0
  249. package/packages/sdk/dist/__tests__/pty.test.d.ts.map +1 -0
  250. package/packages/sdk/dist/__tests__/pty.test.js +20 -0
  251. package/packages/sdk/dist/__tests__/pty.test.js.map +1 -0
  252. package/packages/sdk/dist/__tests__/quickstart.test.js +176 -0
  253. package/packages/sdk/dist/__tests__/quickstart.test.js.map +1 -0
  254. package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts +2 -0
  255. package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts.map +1 -0
  256. package/packages/sdk/dist/__tests__/spawn-from-env.test.js +206 -0
  257. package/packages/sdk/dist/__tests__/spawn-from-env.test.js.map +1 -0
  258. package/packages/sdk/dist/__tests__/unit.test.js +347 -0
  259. package/packages/sdk/dist/__tests__/unit.test.js.map +1 -0
  260. package/packages/sdk/dist/client.d.ts +140 -526
  261. package/packages/sdk/dist/client.d.ts.map +1 -1
  262. package/packages/sdk/dist/client.js +416 -1509
  263. package/packages/sdk/dist/client.js.map +1 -1
  264. package/packages/sdk/dist/examples/workflow-superiority.d.ts +32 -0
  265. package/packages/sdk/dist/examples/workflow-superiority.d.ts.map +1 -0
  266. package/packages/sdk/dist/examples/workflow-superiority.js +1421 -0
  267. package/packages/sdk/dist/examples/workflow-superiority.js.map +1 -0
  268. package/packages/sdk/dist/index.d.ts +13 -20
  269. package/packages/sdk/dist/index.d.ts.map +1 -1
  270. package/packages/sdk/dist/index.js +12 -26
  271. package/packages/sdk/dist/index.js.map +1 -1
  272. package/packages/sdk/dist/logs.d.ts +70 -25
  273. package/packages/sdk/dist/logs.d.ts.map +1 -1
  274. package/packages/sdk/dist/logs.js +238 -42
  275. package/packages/sdk/dist/logs.js.map +1 -1
  276. package/packages/sdk/dist/models.d.ts +9 -0
  277. package/packages/sdk/dist/models.d.ts.map +1 -0
  278. package/packages/sdk/dist/models.js +17 -0
  279. package/packages/sdk/dist/models.js.map +1 -0
  280. package/packages/sdk/dist/protocol.d.ts +366 -0
  281. package/packages/sdk/dist/protocol.d.ts.map +1 -0
  282. package/packages/sdk/dist/pty.d.ts.map +1 -0
  283. package/packages/sdk/dist/pty.js +26 -0
  284. package/packages/sdk/dist/pty.js.map +1 -0
  285. package/packages/sdk/dist/relay-adapter.d.ts +139 -0
  286. package/packages/sdk/dist/relay-adapter.d.ts.map +1 -0
  287. package/packages/sdk/dist/relay-adapter.js +210 -0
  288. package/packages/sdk/dist/relay-adapter.js.map +1 -0
  289. package/packages/sdk/dist/relay.d.ts +304 -0
  290. package/packages/sdk/dist/relay.d.ts.map +1 -0
  291. package/packages/sdk/dist/relay.js +910 -0
  292. package/packages/sdk/dist/relay.js.map +1 -0
  293. package/packages/sdk/dist/shadow.d.ts +101 -0
  294. package/packages/sdk/dist/shadow.d.ts.map +1 -0
  295. package/packages/sdk/dist/shadow.js.map +1 -0
  296. package/packages/sdk/dist/spawn-from-env.d.ts +77 -0
  297. package/packages/sdk/dist/spawn-from-env.d.ts.map +1 -0
  298. package/packages/sdk/dist/spawn-from-env.js +172 -0
  299. package/packages/sdk/dist/spawn-from-env.js.map +1 -0
  300. package/packages/sdk/dist/workflows/builder.d.ts +114 -0
  301. package/packages/sdk/dist/workflows/builder.d.ts.map +1 -0
  302. package/packages/sdk/dist/workflows/builder.js +201 -0
  303. package/packages/sdk/dist/workflows/builder.js.map +1 -0
  304. package/packages/sdk/dist/workflows/cli.d.ts +11 -0
  305. package/packages/sdk/dist/workflows/cli.d.ts.map +1 -0
  306. package/packages/sdk/dist/workflows/cli.js +144 -0
  307. package/packages/sdk/dist/workflows/cli.js.map +1 -0
  308. package/packages/sdk/dist/workflows/coordinator.d.ts +73 -0
  309. package/packages/sdk/dist/workflows/coordinator.d.ts.map +1 -0
  310. package/packages/sdk/dist/workflows/coordinator.js +647 -0
  311. package/packages/sdk/dist/workflows/coordinator.js.map +1 -0
  312. package/packages/sdk/dist/workflows/custom-steps.d.ts +73 -0
  313. package/packages/sdk/dist/workflows/custom-steps.d.ts.map +1 -0
  314. package/packages/sdk/dist/workflows/custom-steps.js +321 -0
  315. package/packages/sdk/dist/workflows/custom-steps.js.map +1 -0
  316. package/packages/sdk/dist/workflows/dry-run-format.d.ts +6 -0
  317. package/packages/sdk/dist/workflows/dry-run-format.d.ts.map +1 -0
  318. package/packages/sdk/dist/workflows/dry-run-format.js +68 -0
  319. package/packages/sdk/dist/workflows/dry-run-format.js.map +1 -0
  320. package/packages/sdk/dist/workflows/file-db.d.ts +33 -0
  321. package/packages/sdk/dist/workflows/file-db.d.ts.map +1 -0
  322. package/packages/sdk/dist/workflows/file-db.js +108 -0
  323. package/packages/sdk/dist/workflows/file-db.js.map +1 -0
  324. package/packages/sdk/dist/workflows/index.d.ts +15 -0
  325. package/packages/sdk/dist/workflows/index.d.ts.map +1 -0
  326. package/packages/sdk/dist/workflows/index.js +15 -0
  327. package/packages/sdk/dist/workflows/index.js.map +1 -0
  328. package/packages/sdk/dist/workflows/run.d.ts +38 -0
  329. package/packages/sdk/dist/workflows/run.d.ts.map +1 -0
  330. package/packages/sdk/dist/workflows/run.js +25 -0
  331. package/packages/sdk/dist/workflows/run.js.map +1 -0
  332. package/packages/sdk/dist/workflows/runner.d.ts +320 -0
  333. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -0
  334. package/packages/sdk/dist/workflows/runner.js +2821 -0
  335. package/packages/sdk/dist/workflows/runner.js.map +1 -0
  336. package/packages/sdk/dist/workflows/templates.d.ts +47 -0
  337. package/packages/sdk/dist/workflows/templates.d.ts.map +1 -0
  338. package/packages/sdk/dist/workflows/templates.js +405 -0
  339. package/packages/sdk/dist/workflows/templates.js.map +1 -0
  340. package/packages/sdk/dist/workflows/trajectory.d.ts +87 -0
  341. package/packages/sdk/dist/workflows/trajectory.d.ts.map +1 -0
  342. package/packages/sdk/dist/workflows/trajectory.js +441 -0
  343. package/packages/sdk/dist/workflows/trajectory.js.map +1 -0
  344. package/packages/sdk/dist/workflows/types.d.ts +306 -0
  345. package/packages/sdk/dist/workflows/types.d.ts.map +1 -0
  346. package/packages/sdk/dist/workflows/types.js +23 -0
  347. package/packages/sdk/dist/workflows/types.js.map +1 -0
  348. package/packages/sdk/dist/workflows/validator.d.ts +11 -0
  349. package/packages/sdk/dist/workflows/validator.d.ts.map +1 -0
  350. package/packages/sdk/dist/workflows/validator.js +128 -0
  351. package/packages/sdk/dist/workflows/validator.js.map +1 -0
  352. package/packages/sdk/package.json +59 -53
  353. package/packages/sdk/scripts/bundle-agent-relay.mjs +53 -0
  354. package/packages/sdk/src/__tests__/contract-fixtures.test.ts +122 -0
  355. package/packages/sdk/src/__tests__/error-scenarios.test.ts +682 -0
  356. package/packages/sdk/src/__tests__/facade.test.ts +364 -0
  357. package/packages/sdk/src/__tests__/idle-nudge.test.ts +438 -0
  358. package/packages/sdk/src/__tests__/integration.test.ts +204 -0
  359. package/packages/sdk/src/__tests__/orchestration-upgrades.test.ts +797 -0
  360. package/packages/sdk/src/__tests__/pty.test.ts +24 -0
  361. package/packages/sdk/src/__tests__/quickstart.test.ts +198 -0
  362. package/packages/sdk/src/__tests__/spawn-from-env.test.ts +282 -0
  363. package/packages/sdk/src/__tests__/swarm-coordinator.test.ts +909 -0
  364. package/packages/sdk/src/__tests__/unit.test.ts +435 -0
  365. package/packages/sdk/src/__tests__/workflow-runner.test.ts +489 -0
  366. package/packages/sdk/src/__tests__/yaml-validation.test.ts +890 -0
  367. package/packages/sdk/src/client.ts +514 -1912
  368. package/packages/sdk/src/examples/workflow-superiority.ts +1485 -0
  369. package/packages/sdk/src/examples/workflows/README.md +156 -0
  370. package/packages/sdk/src/examples/workflows/ralph-overnight.yaml +421 -0
  371. package/packages/sdk/src/examples/workflows/ralph-swarm.yaml +411 -0
  372. package/packages/sdk/src/examples/workflows/ralph-tdd.yaml +259 -0
  373. package/packages/sdk/src/index.ts +13 -116
  374. package/packages/sdk/src/logs.ts +282 -54
  375. package/packages/sdk/src/models.ts +36 -0
  376. package/packages/sdk/src/protocol.ts +385 -0
  377. package/packages/sdk/src/pty.ts +35 -0
  378. package/packages/sdk/src/relay-adapter.ts +316 -0
  379. package/packages/sdk/src/relay.ts +1147 -0
  380. package/packages/sdk/src/shadow.ts +228 -0
  381. package/packages/sdk/src/spawn-from-env.ts +245 -0
  382. package/packages/sdk/src/workflows/README.md +656 -0
  383. package/packages/sdk/src/workflows/builder.ts +278 -0
  384. package/packages/sdk/src/workflows/builtin-templates/bug-fix.yaml +135 -0
  385. package/packages/sdk/src/workflows/builtin-templates/code-review.yaml +133 -0
  386. package/packages/sdk/src/workflows/builtin-templates/competitive.yaml +103 -0
  387. package/packages/sdk/src/workflows/builtin-templates/documentation.yaml +120 -0
  388. package/packages/sdk/src/workflows/builtin-templates/feature-dev.yaml +142 -0
  389. package/packages/sdk/src/workflows/builtin-templates/refactor.yaml +141 -0
  390. package/packages/sdk/src/workflows/builtin-templates/review-loop.yaml +223 -0
  391. package/packages/sdk/src/workflows/builtin-templates/security-audit.yaml +129 -0
  392. package/packages/sdk/src/workflows/cli.ts +162 -0
  393. package/packages/sdk/src/workflows/coordinator.ts +842 -0
  394. package/packages/sdk/src/workflows/custom-steps.ts +450 -0
  395. package/packages/sdk/src/workflows/dry-run-format.ts +75 -0
  396. package/packages/sdk/src/workflows/file-db.ts +117 -0
  397. package/packages/sdk/src/workflows/index.ts +24 -0
  398. package/packages/sdk/src/workflows/run.ts +72 -0
  399. package/packages/sdk/src/workflows/runner.ts +3409 -0
  400. package/packages/sdk/src/workflows/schema.json +651 -0
  401. package/packages/sdk/src/workflows/templates.ts +552 -0
  402. package/packages/sdk/src/workflows/trajectory.ts +631 -0
  403. package/packages/sdk/src/workflows/types.ts +389 -0
  404. package/packages/sdk/src/workflows/validator.ts +151 -0
  405. package/packages/sdk/tsconfig.build.json +25 -0
  406. package/packages/sdk/tsconfig.json +17 -18
  407. package/packages/sdk/vitest.config.ts +1 -1
  408. package/packages/sdk-py/README.md +106 -21
  409. package/packages/sdk-py/agent_relay/__init__.py +21 -0
  410. package/packages/sdk-py/agent_relay/models.py +206 -0
  411. package/packages/sdk-py/pyproject.toml +2 -2
  412. package/packages/sdk-py/src/agent_relay/__init__.py +76 -0
  413. package/packages/sdk-py/src/agent_relay/builder.py +430 -109
  414. package/packages/sdk-py/src/agent_relay/templates.py +197 -0
  415. package/packages/sdk-py/src/agent_relay/types.py +489 -15
  416. package/packages/sdk-py/tests/test_builder.py +115 -1
  417. package/packages/sdk-py/tests/test_workflow_templates.py +450 -0
  418. package/packages/shared/cli-registry.yaml +193 -0
  419. package/packages/shared/codegen-py.mjs +215 -0
  420. package/packages/shared/codegen-ts.mjs +227 -0
  421. package/packages/telemetry/dist/events.d.ts +8 -8
  422. package/packages/telemetry/dist/index.d.ts +1 -1
  423. package/packages/telemetry/package.json +2 -2
  424. package/packages/telemetry/src/events.ts +9 -9
  425. package/packages/telemetry/src/index.ts +2 -2
  426. package/packages/trajectory/package.json +2 -2
  427. package/packages/user-directory/dist/user-directory.js +1 -1
  428. package/packages/user-directory/dist/user-directory.js.map +1 -1
  429. package/packages/user-directory/package.json +2 -2
  430. package/packages/user-directory/src/user-directory.ts +1 -1
  431. package/packages/utils/dist/cjs/client-helpers.js +4 -4
  432. package/packages/utils/dist/cjs/discovery.js +9 -6
  433. package/packages/utils/dist/cjs/errors.js +5 -5
  434. package/packages/utils/dist/cjs/legacy-protocol.js +70 -0
  435. package/packages/utils/dist/cjs/logger.js +3 -3
  436. package/packages/utils/dist/cjs/precompiled-patterns.js +33 -2
  437. package/packages/utils/dist/cjs/relay-pty-path.js +0 -6
  438. package/packages/utils/dist/client-helpers.d.ts +1 -1
  439. package/packages/utils/dist/client-helpers.d.ts.map +1 -1
  440. package/packages/utils/dist/client-helpers.js +1 -1
  441. package/packages/utils/dist/client-helpers.js.map +1 -1
  442. package/packages/utils/dist/discovery.d.ts +7 -7
  443. package/packages/utils/dist/discovery.d.ts.map +1 -1
  444. package/packages/utils/dist/discovery.js +20 -17
  445. package/packages/utils/dist/discovery.js.map +1 -1
  446. package/packages/utils/dist/errors.d.ts +1 -1
  447. package/packages/utils/dist/errors.js +3 -3
  448. package/packages/utils/dist/legacy-protocol.d.ts +46 -0
  449. package/packages/utils/dist/legacy-protocol.d.ts.map +1 -0
  450. package/packages/utils/dist/legacy-protocol.js +47 -0
  451. package/packages/utils/dist/legacy-protocol.js.map +1 -0
  452. package/packages/utils/dist/logger.d.ts +2 -2
  453. package/packages/utils/dist/logger.js +2 -2
  454. package/packages/utils/dist/precompiled-patterns.d.ts.map +1 -1
  455. package/packages/utils/dist/precompiled-patterns.js +28 -2
  456. package/packages/utils/dist/precompiled-patterns.js.map +1 -1
  457. package/packages/utils/dist/relay-pty-path.d.ts.map +1 -1
  458. package/packages/utils/dist/relay-pty-path.js +1 -10
  459. package/packages/utils/dist/relay-pty-path.js.map +1 -1
  460. package/packages/utils/package.json +2 -3
  461. package/packages/utils/src/client-helpers.ts +1 -1
  462. package/packages/utils/src/consolidation.test.ts +3 -3
  463. package/packages/utils/src/discovery.test.ts +3 -3
  464. package/packages/utils/src/discovery.ts +21 -18
  465. package/packages/utils/src/errors.test.ts +6 -11
  466. package/packages/utils/src/errors.ts +3 -3
  467. package/packages/utils/src/legacy-protocol.ts +151 -0
  468. package/packages/utils/src/logger.ts +2 -2
  469. package/packages/utils/src/precompiled-patterns.test.ts +8 -0
  470. package/packages/utils/src/precompiled-patterns.ts +40 -2
  471. package/packages/utils/src/relay-pty-path.test.ts +23 -34
  472. package/packages/utils/src/relay-pty-path.ts +1 -11
  473. package/relay-snippets/agent-relay-protocol.md +6 -43
  474. package/relay-snippets/agent-relay-snippet.md +59 -203
  475. package/scripts/postinstall.js +44 -171
  476. package/bin/relay-pty-darwin-arm64 +0 -0
  477. package/bin/relay-pty-darwin-x64 +0 -0
  478. package/bin/relay-pty-linux-arm64 +0 -0
  479. package/bin/relay-pty-linux-x64 +0 -0
  480. package/dist/src/bridge/index.d.ts +0 -8
  481. package/dist/src/bridge/index.d.ts.map +0 -1
  482. package/dist/src/bridge/index.js +0 -8
  483. package/dist/src/bridge/index.js.map +0 -1
  484. package/dist/src/continuity/index.d.ts +0 -5
  485. package/dist/src/continuity/index.d.ts.map +0 -1
  486. package/dist/src/continuity/index.js +0 -5
  487. package/dist/src/continuity/index.js.map +0 -1
  488. package/dist/src/daemon/index.d.ts +0 -8
  489. package/dist/src/daemon/index.d.ts.map +0 -1
  490. package/dist/src/daemon/index.js +0 -9
  491. package/dist/src/daemon/index.js.map +0 -1
  492. package/dist/src/protocol/index.d.ts +0 -8
  493. package/dist/src/protocol/index.d.ts.map +0 -1
  494. package/dist/src/protocol/index.js +0 -8
  495. package/dist/src/protocol/index.js.map +0 -1
  496. package/dist/src/resiliency/index.d.ts +0 -5
  497. package/dist/src/resiliency/index.d.ts.map +0 -1
  498. package/dist/src/resiliency/index.js +0 -5
  499. package/dist/src/resiliency/index.js.map +0 -1
  500. package/dist/src/state/index.d.ts +0 -5
  501. package/dist/src/state/index.d.ts.map +0 -1
  502. package/dist/src/state/index.js +0 -5
  503. package/dist/src/state/index.js.map +0 -1
  504. package/dist/src/storage/index.d.ts +0 -8
  505. package/dist/src/storage/index.d.ts.map +0 -1
  506. package/dist/src/storage/index.js +0 -8
  507. package/dist/src/storage/index.js.map +0 -1
  508. package/dist/src/wrapper/index.d.ts +0 -8
  509. package/dist/src/wrapper/index.d.ts.map +0 -1
  510. package/dist/src/wrapper/index.js +0 -11
  511. package/dist/src/wrapper/index.js.map +0 -1
  512. package/packages/bridge/dist/cli-resolution.d.ts +0 -32
  513. package/packages/bridge/dist/cli-resolution.d.ts.map +0 -1
  514. package/packages/bridge/dist/cli-resolution.js +0 -88
  515. package/packages/bridge/dist/cli-resolution.js.map +0 -1
  516. package/packages/bridge/dist/index.d.ts +0 -9
  517. package/packages/bridge/dist/index.d.ts.map +0 -1
  518. package/packages/bridge/dist/index.js +0 -11
  519. package/packages/bridge/dist/index.js.map +0 -1
  520. package/packages/bridge/dist/multi-project-client.d.ts +0 -99
  521. package/packages/bridge/dist/multi-project-client.d.ts.map +0 -1
  522. package/packages/bridge/dist/multi-project-client.js +0 -389
  523. package/packages/bridge/dist/multi-project-client.js.map +0 -1
  524. package/packages/bridge/dist/shadow-cli.d.ts +0 -17
  525. package/packages/bridge/dist/shadow-cli.d.ts.map +0 -1
  526. package/packages/bridge/dist/shadow-cli.js +0 -75
  527. package/packages/bridge/dist/shadow-cli.js.map +0 -1
  528. package/packages/bridge/dist/spawner.d.ts +0 -263
  529. package/packages/bridge/dist/spawner.d.ts.map +0 -1
  530. package/packages/bridge/dist/spawner.js +0 -1758
  531. package/packages/bridge/dist/spawner.js.map +0 -1
  532. package/packages/bridge/dist/types.d.ts +0 -141
  533. package/packages/bridge/dist/types.d.ts.map +0 -1
  534. package/packages/bridge/dist/types.js +0 -6
  535. package/packages/bridge/dist/types.js.map +0 -1
  536. package/packages/bridge/dist/utils.d.ts +0 -39
  537. package/packages/bridge/dist/utils.d.ts.map +0 -1
  538. package/packages/bridge/dist/utils.js +0 -98
  539. package/packages/bridge/dist/utils.js.map +0 -1
  540. package/packages/bridge/package.json +0 -45
  541. package/packages/bridge/src/cli-resolution.test.ts +0 -225
  542. package/packages/bridge/src/cli-resolution.ts +0 -100
  543. package/packages/bridge/src/index.ts +0 -34
  544. package/packages/bridge/src/multi-project-client.test.ts +0 -340
  545. package/packages/bridge/src/multi-project-client.ts +0 -469
  546. package/packages/bridge/src/shadow-cli.ts +0 -95
  547. package/packages/bridge/src/spawner-mcp.test.ts +0 -505
  548. package/packages/bridge/src/spawner.ts +0 -2067
  549. package/packages/bridge/src/types.ts +0 -153
  550. package/packages/bridge/src/utils.test.ts +0 -235
  551. package/packages/bridge/src/utils.ts +0 -113
  552. package/packages/bridge/tsconfig.json +0 -29
  553. package/packages/bridge/vitest.config.ts +0 -9
  554. package/packages/broker-sdk/README.md +0 -97
  555. package/packages/broker-sdk/dist/__tests__/facade.test.js +0 -257
  556. package/packages/broker-sdk/dist/__tests__/facade.test.js.map +0 -1
  557. package/packages/broker-sdk/dist/__tests__/integration.test.js +0 -139
  558. package/packages/broker-sdk/dist/__tests__/integration.test.js.map +0 -1
  559. package/packages/broker-sdk/dist/__tests__/quickstart.test.js +0 -176
  560. package/packages/broker-sdk/dist/__tests__/quickstart.test.js.map +0 -1
  561. package/packages/broker-sdk/dist/__tests__/unit.test.js +0 -192
  562. package/packages/broker-sdk/dist/__tests__/unit.test.js.map +0 -1
  563. package/packages/broker-sdk/dist/client.d.ts +0 -95
  564. package/packages/broker-sdk/dist/client.d.ts.map +0 -1
  565. package/packages/broker-sdk/dist/client.js +0 -372
  566. package/packages/broker-sdk/dist/client.js.map +0 -1
  567. package/packages/broker-sdk/dist/index.d.ts +0 -10
  568. package/packages/broker-sdk/dist/index.d.ts.map +0 -1
  569. package/packages/broker-sdk/dist/index.js +0 -10
  570. package/packages/broker-sdk/dist/index.js.map +0 -1
  571. package/packages/broker-sdk/dist/logs.d.ts +0 -47
  572. package/packages/broker-sdk/dist/logs.d.ts.map +0 -1
  573. package/packages/broker-sdk/dist/logs.js +0 -137
  574. package/packages/broker-sdk/dist/logs.js.map +0 -1
  575. package/packages/broker-sdk/dist/protocol.d.ts +0 -254
  576. package/packages/broker-sdk/dist/protocol.d.ts.map +0 -1
  577. package/packages/broker-sdk/dist/pty.d.ts.map +0 -1
  578. package/packages/broker-sdk/dist/pty.js +0 -14
  579. package/packages/broker-sdk/dist/pty.js.map +0 -1
  580. package/packages/broker-sdk/dist/relay.d.ts +0 -172
  581. package/packages/broker-sdk/dist/relay.d.ts.map +0 -1
  582. package/packages/broker-sdk/dist/relay.js +0 -486
  583. package/packages/broker-sdk/dist/relay.js.map +0 -1
  584. package/packages/broker-sdk/dist/relaycast.d.ts +0 -67
  585. package/packages/broker-sdk/dist/relaycast.d.ts.map +0 -1
  586. package/packages/broker-sdk/dist/relaycast.js +0 -150
  587. package/packages/broker-sdk/dist/relaycast.js.map +0 -1
  588. package/packages/broker-sdk/dist/shadow.d.ts +0 -100
  589. package/packages/broker-sdk/dist/shadow.d.ts.map +0 -1
  590. package/packages/broker-sdk/dist/shadow.js.map +0 -1
  591. package/packages/broker-sdk/dist/workflows/builder.d.ts +0 -101
  592. package/packages/broker-sdk/dist/workflows/builder.d.ts.map +0 -1
  593. package/packages/broker-sdk/dist/workflows/builder.js +0 -179
  594. package/packages/broker-sdk/dist/workflows/builder.js.map +0 -1
  595. package/packages/broker-sdk/dist/workflows/cli.d.ts +0 -10
  596. package/packages/broker-sdk/dist/workflows/cli.d.ts.map +0 -1
  597. package/packages/broker-sdk/dist/workflows/cli.js +0 -82
  598. package/packages/broker-sdk/dist/workflows/cli.js.map +0 -1
  599. package/packages/broker-sdk/dist/workflows/coordinator.d.ts +0 -69
  600. package/packages/broker-sdk/dist/workflows/coordinator.d.ts.map +0 -1
  601. package/packages/broker-sdk/dist/workflows/coordinator.js +0 -585
  602. package/packages/broker-sdk/dist/workflows/coordinator.js.map +0 -1
  603. package/packages/broker-sdk/dist/workflows/index.d.ts +0 -11
  604. package/packages/broker-sdk/dist/workflows/index.d.ts.map +0 -1
  605. package/packages/broker-sdk/dist/workflows/index.js +0 -11
  606. package/packages/broker-sdk/dist/workflows/index.js.map +0 -1
  607. package/packages/broker-sdk/dist/workflows/run.d.ts +0 -33
  608. package/packages/broker-sdk/dist/workflows/run.d.ts.map +0 -1
  609. package/packages/broker-sdk/dist/workflows/run.js +0 -28
  610. package/packages/broker-sdk/dist/workflows/run.js.map +0 -1
  611. package/packages/broker-sdk/dist/workflows/runner.d.ts +0 -136
  612. package/packages/broker-sdk/dist/workflows/runner.d.ts.map +0 -1
  613. package/packages/broker-sdk/dist/workflows/runner.js +0 -900
  614. package/packages/broker-sdk/dist/workflows/runner.js.map +0 -1
  615. package/packages/broker-sdk/dist/workflows/templates.d.ts +0 -47
  616. package/packages/broker-sdk/dist/workflows/templates.d.ts.map +0 -1
  617. package/packages/broker-sdk/dist/workflows/templates.js +0 -395
  618. package/packages/broker-sdk/dist/workflows/templates.js.map +0 -1
  619. package/packages/broker-sdk/dist/workflows/trajectory.d.ts +0 -80
  620. package/packages/broker-sdk/dist/workflows/trajectory.d.ts.map +0 -1
  621. package/packages/broker-sdk/dist/workflows/trajectory.js +0 -362
  622. package/packages/broker-sdk/dist/workflows/trajectory.js.map +0 -1
  623. package/packages/broker-sdk/dist/workflows/types.d.ts +0 -140
  624. package/packages/broker-sdk/dist/workflows/types.d.ts.map +0 -1
  625. package/packages/broker-sdk/dist/workflows/types.js +0 -8
  626. package/packages/broker-sdk/dist/workflows/types.js.map +0 -1
  627. package/packages/broker-sdk/package.json +0 -81
  628. package/packages/broker-sdk/scripts/bundle-agent-relay.mjs +0 -53
  629. package/packages/broker-sdk/src/__tests__/error-scenarios.test.ts +0 -682
  630. package/packages/broker-sdk/src/__tests__/facade.test.ts +0 -296
  631. package/packages/broker-sdk/src/__tests__/integration.test.ts +0 -170
  632. package/packages/broker-sdk/src/__tests__/quickstart.test.ts +0 -198
  633. package/packages/broker-sdk/src/__tests__/swarm-coordinator.test.ts +0 -772
  634. package/packages/broker-sdk/src/__tests__/unit.test.ts +0 -243
  635. package/packages/broker-sdk/src/__tests__/workflow-runner.test.ts +0 -333
  636. package/packages/broker-sdk/src/client.ts +0 -510
  637. package/packages/broker-sdk/src/index.ts +0 -9
  638. package/packages/broker-sdk/src/logs.ts +0 -163
  639. package/packages/broker-sdk/src/protocol.ts +0 -271
  640. package/packages/broker-sdk/src/pty.ts +0 -16
  641. package/packages/broker-sdk/src/relay.ts +0 -614
  642. package/packages/broker-sdk/src/relaycast.ts +0 -185
  643. package/packages/broker-sdk/src/shadow.ts +0 -230
  644. package/packages/broker-sdk/src/workflows/README.md +0 -514
  645. package/packages/broker-sdk/src/workflows/builder.ts +0 -241
  646. package/packages/broker-sdk/src/workflows/builtin-templates/bug-fix.yaml +0 -75
  647. package/packages/broker-sdk/src/workflows/builtin-templates/code-review.yaml +0 -82
  648. package/packages/broker-sdk/src/workflows/builtin-templates/documentation.yaml +0 -70
  649. package/packages/broker-sdk/src/workflows/builtin-templates/feature-dev.yaml +0 -76
  650. package/packages/broker-sdk/src/workflows/builtin-templates/refactor.yaml +0 -82
  651. package/packages/broker-sdk/src/workflows/builtin-templates/security-audit.yaml +0 -84
  652. package/packages/broker-sdk/src/workflows/cli.ts +0 -93
  653. package/packages/broker-sdk/src/workflows/coordinator.ts +0 -758
  654. package/packages/broker-sdk/src/workflows/index.ts +0 -10
  655. package/packages/broker-sdk/src/workflows/run.ts +0 -55
  656. package/packages/broker-sdk/src/workflows/runner.ts +0 -1184
  657. package/packages/broker-sdk/src/workflows/schema.json +0 -333
  658. package/packages/broker-sdk/src/workflows/templates.ts +0 -544
  659. package/packages/broker-sdk/src/workflows/trajectory.ts +0 -507
  660. package/packages/broker-sdk/src/workflows/types.ts +0 -208
  661. package/packages/broker-sdk/tsconfig.json +0 -22
  662. package/packages/broker-sdk/vitest.config.ts +0 -9
  663. package/packages/continuity/dist/formatter.d.ts +0 -57
  664. package/packages/continuity/dist/formatter.d.ts.map +0 -1
  665. package/packages/continuity/dist/formatter.js +0 -448
  666. package/packages/continuity/dist/formatter.js.map +0 -1
  667. package/packages/continuity/dist/handoff-store.d.ts +0 -67
  668. package/packages/continuity/dist/handoff-store.d.ts.map +0 -1
  669. package/packages/continuity/dist/handoff-store.js +0 -472
  670. package/packages/continuity/dist/handoff-store.js.map +0 -1
  671. package/packages/continuity/dist/index.d.ts +0 -10
  672. package/packages/continuity/dist/index.d.ts.map +0 -1
  673. package/packages/continuity/dist/index.js +0 -11
  674. package/packages/continuity/dist/index.js.map +0 -1
  675. package/packages/continuity/dist/ledger-store.d.ts +0 -110
  676. package/packages/continuity/dist/ledger-store.d.ts.map +0 -1
  677. package/packages/continuity/dist/ledger-store.js +0 -500
  678. package/packages/continuity/dist/ledger-store.js.map +0 -1
  679. package/packages/continuity/dist/manager.d.ts +0 -183
  680. package/packages/continuity/dist/manager.d.ts.map +0 -1
  681. package/packages/continuity/dist/manager.js +0 -616
  682. package/packages/continuity/dist/manager.js.map +0 -1
  683. package/packages/continuity/dist/parser.d.ts +0 -76
  684. package/packages/continuity/dist/parser.d.ts.map +0 -1
  685. package/packages/continuity/dist/parser.js +0 -579
  686. package/packages/continuity/dist/parser.js.map +0 -1
  687. package/packages/continuity/dist/types.d.ts +0 -180
  688. package/packages/continuity/dist/types.d.ts.map +0 -1
  689. package/packages/continuity/dist/types.js +0 -2
  690. package/packages/continuity/dist/types.js.map +0 -1
  691. package/packages/continuity/package.json +0 -40
  692. package/packages/continuity/src/formatter.ts +0 -536
  693. package/packages/continuity/src/handoff-store.ts +0 -523
  694. package/packages/continuity/src/index.ts +0 -12
  695. package/packages/continuity/src/ledger-store.ts +0 -594
  696. package/packages/continuity/src/manager.test.ts +0 -291
  697. package/packages/continuity/src/manager.ts +0 -774
  698. package/packages/continuity/src/parser.test.ts +0 -292
  699. package/packages/continuity/src/parser.ts +0 -680
  700. package/packages/continuity/src/types.ts +0 -211
  701. package/packages/continuity/tsconfig.json +0 -21
  702. package/packages/continuity/vitest.config.ts +0 -9
  703. package/packages/daemon/dist/agent-manager.d.ts +0 -134
  704. package/packages/daemon/dist/agent-manager.d.ts.map +0 -1
  705. package/packages/daemon/dist/agent-manager.js +0 -578
  706. package/packages/daemon/dist/agent-manager.js.map +0 -1
  707. package/packages/daemon/dist/agent-registry.d.ts +0 -99
  708. package/packages/daemon/dist/agent-registry.d.ts.map +0 -1
  709. package/packages/daemon/dist/agent-registry.js +0 -213
  710. package/packages/daemon/dist/agent-registry.js.map +0 -1
  711. package/packages/daemon/dist/agent-signing.d.ts +0 -158
  712. package/packages/daemon/dist/agent-signing.d.ts.map +0 -1
  713. package/packages/daemon/dist/agent-signing.js +0 -523
  714. package/packages/daemon/dist/agent-signing.js.map +0 -1
  715. package/packages/daemon/dist/api.d.ts +0 -106
  716. package/packages/daemon/dist/api.d.ts.map +0 -1
  717. package/packages/daemon/dist/api.js +0 -895
  718. package/packages/daemon/dist/api.js.map +0 -1
  719. package/packages/daemon/dist/auth.d.ts +0 -94
  720. package/packages/daemon/dist/auth.d.ts.map +0 -1
  721. package/packages/daemon/dist/auth.js +0 -197
  722. package/packages/daemon/dist/auth.js.map +0 -1
  723. package/packages/daemon/dist/channel-membership-store.d.ts +0 -55
  724. package/packages/daemon/dist/channel-membership-store.d.ts.map +0 -1
  725. package/packages/daemon/dist/channel-membership-store.js +0 -176
  726. package/packages/daemon/dist/channel-membership-store.js.map +0 -1
  727. package/packages/daemon/dist/cli-auth.d.ts +0 -97
  728. package/packages/daemon/dist/cli-auth.d.ts.map +0 -1
  729. package/packages/daemon/dist/cli-auth.js +0 -808
  730. package/packages/daemon/dist/cli-auth.js.map +0 -1
  731. package/packages/daemon/dist/cloud-sync.d.ts +0 -263
  732. package/packages/daemon/dist/cloud-sync.d.ts.map +0 -1
  733. package/packages/daemon/dist/cloud-sync.js +0 -820
  734. package/packages/daemon/dist/cloud-sync.js.map +0 -1
  735. package/packages/daemon/dist/connection.d.ts +0 -137
  736. package/packages/daemon/dist/connection.d.ts.map +0 -1
  737. package/packages/daemon/dist/connection.js +0 -465
  738. package/packages/daemon/dist/connection.js.map +0 -1
  739. package/packages/daemon/dist/consensus-integration.d.ts +0 -168
  740. package/packages/daemon/dist/consensus-integration.d.ts.map +0 -1
  741. package/packages/daemon/dist/consensus-integration.js +0 -371
  742. package/packages/daemon/dist/consensus-integration.js.map +0 -1
  743. package/packages/daemon/dist/consensus.d.ts +0 -269
  744. package/packages/daemon/dist/consensus.d.ts.map +0 -1
  745. package/packages/daemon/dist/consensus.js +0 -632
  746. package/packages/daemon/dist/consensus.js.map +0 -1
  747. package/packages/daemon/dist/delivery-tracker.d.ts +0 -34
  748. package/packages/daemon/dist/delivery-tracker.d.ts.map +0 -1
  749. package/packages/daemon/dist/delivery-tracker.js +0 -104
  750. package/packages/daemon/dist/delivery-tracker.js.map +0 -1
  751. package/packages/daemon/dist/enhanced-features.d.ts +0 -118
  752. package/packages/daemon/dist/enhanced-features.d.ts.map +0 -1
  753. package/packages/daemon/dist/enhanced-features.js +0 -177
  754. package/packages/daemon/dist/enhanced-features.js.map +0 -1
  755. package/packages/daemon/dist/index.d.ts +0 -29
  756. package/packages/daemon/dist/index.d.ts.map +0 -1
  757. package/packages/daemon/dist/index.js +0 -34
  758. package/packages/daemon/dist/index.js.map +0 -1
  759. package/packages/daemon/dist/orchestrator.d.ts +0 -217
  760. package/packages/daemon/dist/orchestrator.d.ts.map +0 -1
  761. package/packages/daemon/dist/orchestrator.js +0 -1172
  762. package/packages/daemon/dist/orchestrator.js.map +0 -1
  763. package/packages/daemon/dist/rate-limiter.d.ts +0 -68
  764. package/packages/daemon/dist/rate-limiter.d.ts.map +0 -1
  765. package/packages/daemon/dist/rate-limiter.js +0 -130
  766. package/packages/daemon/dist/rate-limiter.js.map +0 -1
  767. package/packages/daemon/dist/registry.d.ts +0 -9
  768. package/packages/daemon/dist/registry.d.ts.map +0 -1
  769. package/packages/daemon/dist/registry.js +0 -9
  770. package/packages/daemon/dist/registry.js.map +0 -1
  771. package/packages/daemon/dist/repo-manager.d.ts +0 -116
  772. package/packages/daemon/dist/repo-manager.d.ts.map +0 -1
  773. package/packages/daemon/dist/repo-manager.js +0 -384
  774. package/packages/daemon/dist/repo-manager.js.map +0 -1
  775. package/packages/daemon/dist/router.d.ts +0 -389
  776. package/packages/daemon/dist/router.d.ts.map +0 -1
  777. package/packages/daemon/dist/router.js +0 -1607
  778. package/packages/daemon/dist/router.js.map +0 -1
  779. package/packages/daemon/dist/server.d.ts +0 -201
  780. package/packages/daemon/dist/server.d.ts.map +0 -1
  781. package/packages/daemon/dist/server.js +0 -1791
  782. package/packages/daemon/dist/server.js.map +0 -1
  783. package/packages/daemon/dist/spawn-manager.d.ts +0 -119
  784. package/packages/daemon/dist/spawn-manager.d.ts.map +0 -1
  785. package/packages/daemon/dist/spawn-manager.js +0 -319
  786. package/packages/daemon/dist/spawn-manager.js.map +0 -1
  787. package/packages/daemon/dist/sync-queue.d.ts +0 -116
  788. package/packages/daemon/dist/sync-queue.d.ts.map +0 -1
  789. package/packages/daemon/dist/sync-queue.js +0 -361
  790. package/packages/daemon/dist/sync-queue.js.map +0 -1
  791. package/packages/daemon/dist/types.d.ts +0 -133
  792. package/packages/daemon/dist/types.d.ts.map +0 -1
  793. package/packages/daemon/dist/types.js +0 -6
  794. package/packages/daemon/dist/types.js.map +0 -1
  795. package/packages/daemon/dist/workspace-manager.d.ts +0 -80
  796. package/packages/daemon/dist/workspace-manager.d.ts.map +0 -1
  797. package/packages/daemon/dist/workspace-manager.js +0 -314
  798. package/packages/daemon/dist/workspace-manager.js.map +0 -1
  799. package/packages/daemon/package.json +0 -56
  800. package/packages/daemon/src/agent-manager.ts +0 -679
  801. package/packages/daemon/src/agent-registry.ts +0 -284
  802. package/packages/daemon/src/agent-signing.ts +0 -707
  803. package/packages/daemon/src/api.ts +0 -1034
  804. package/packages/daemon/src/auth.ts +0 -276
  805. package/packages/daemon/src/channel-membership-store.ts +0 -217
  806. package/packages/daemon/src/cli-auth.ts +0 -945
  807. package/packages/daemon/src/cloud-sync.ts +0 -1100
  808. package/packages/daemon/src/connection.ts +0 -561
  809. package/packages/daemon/src/consensus-integration.ts +0 -510
  810. package/packages/daemon/src/consensus.ts +0 -848
  811. package/packages/daemon/src/delivery-tracker.ts +0 -145
  812. package/packages/daemon/src/enhanced-features.ts +0 -390
  813. package/packages/daemon/src/index.ts +0 -48
  814. package/packages/daemon/src/orchestrator.test.ts +0 -231
  815. package/packages/daemon/src/orchestrator.ts +0 -1376
  816. package/packages/daemon/src/rate-limiter.ts +0 -172
  817. package/packages/daemon/src/registry.ts +0 -8
  818. package/packages/daemon/src/repo-manager.ts +0 -468
  819. package/packages/daemon/src/router.test.ts +0 -181
  820. package/packages/daemon/src/router.ts +0 -1925
  821. package/packages/daemon/src/server.ts +0 -2051
  822. package/packages/daemon/src/spawn-manager-set-model.test.ts +0 -144
  823. package/packages/daemon/src/spawn-manager.ts +0 -415
  824. package/packages/daemon/src/sync-queue.ts +0 -477
  825. package/packages/daemon/src/types.ts +0 -158
  826. package/packages/daemon/src/workspace-manager.ts +0 -371
  827. package/packages/daemon/tsconfig.json +0 -21
  828. package/packages/daemon/vitest.config.ts +0 -9
  829. package/packages/mcp/CHANGELOG.md +0 -28
  830. package/packages/mcp/LICENSE +0 -190
  831. package/packages/mcp/README.md +0 -266
  832. package/packages/mcp/dist/bin.d.ts +0 -12
  833. package/packages/mcp/dist/bin.d.ts.map +0 -1
  834. package/packages/mcp/dist/bin.js +0 -179
  835. package/packages/mcp/dist/bin.js.map +0 -1
  836. package/packages/mcp/dist/client-adapter.d.ts +0 -164
  837. package/packages/mcp/dist/client-adapter.d.ts.map +0 -1
  838. package/packages/mcp/dist/client-adapter.js +0 -231
  839. package/packages/mcp/dist/client-adapter.js.map +0 -1
  840. package/packages/mcp/dist/cloud.d.ts +0 -13
  841. package/packages/mcp/dist/cloud.d.ts.map +0 -1
  842. package/packages/mcp/dist/cloud.js +0 -25
  843. package/packages/mcp/dist/cloud.js.map +0 -1
  844. package/packages/mcp/dist/errors.d.ts +0 -9
  845. package/packages/mcp/dist/errors.d.ts.map +0 -1
  846. package/packages/mcp/dist/errors.js +0 -9
  847. package/packages/mcp/dist/errors.js.map +0 -1
  848. package/packages/mcp/dist/file-transport.d.ts +0 -103
  849. package/packages/mcp/dist/file-transport.d.ts.map +0 -1
  850. package/packages/mcp/dist/file-transport.js +0 -204
  851. package/packages/mcp/dist/file-transport.js.map +0 -1
  852. package/packages/mcp/dist/hybrid-client.d.ts +0 -5
  853. package/packages/mcp/dist/hybrid-client.d.ts.map +0 -1
  854. package/packages/mcp/dist/hybrid-client.js +0 -23
  855. package/packages/mcp/dist/hybrid-client.js.map +0 -1
  856. package/packages/mcp/dist/index.d.ts +0 -11
  857. package/packages/mcp/dist/index.d.ts.map +0 -1
  858. package/packages/mcp/dist/index.js +0 -25
  859. package/packages/mcp/dist/index.js.map +0 -1
  860. package/packages/mcp/dist/install-cli.d.ts +0 -35
  861. package/packages/mcp/dist/install-cli.d.ts.map +0 -1
  862. package/packages/mcp/dist/install-cli.js +0 -157
  863. package/packages/mcp/dist/install-cli.js.map +0 -1
  864. package/packages/mcp/dist/install.d.ts +0 -123
  865. package/packages/mcp/dist/install.d.ts.map +0 -1
  866. package/packages/mcp/dist/install.js +0 -661
  867. package/packages/mcp/dist/install.js.map +0 -1
  868. package/packages/mcp/dist/prompts/index.d.ts +0 -2
  869. package/packages/mcp/dist/prompts/index.d.ts.map +0 -1
  870. package/packages/mcp/dist/prompts/index.js +0 -2
  871. package/packages/mcp/dist/prompts/index.js.map +0 -1
  872. package/packages/mcp/dist/prompts/protocol.d.ts +0 -11
  873. package/packages/mcp/dist/prompts/protocol.d.ts.map +0 -1
  874. package/packages/mcp/dist/prompts/protocol.js +0 -160
  875. package/packages/mcp/dist/prompts/protocol.js.map +0 -1
  876. package/packages/mcp/dist/resources/agents.d.ts +0 -11
  877. package/packages/mcp/dist/resources/agents.d.ts.map +0 -1
  878. package/packages/mcp/dist/resources/agents.js +0 -17
  879. package/packages/mcp/dist/resources/agents.js.map +0 -1
  880. package/packages/mcp/dist/resources/inbox.d.ts +0 -11
  881. package/packages/mcp/dist/resources/inbox.d.ts.map +0 -1
  882. package/packages/mcp/dist/resources/inbox.js +0 -17
  883. package/packages/mcp/dist/resources/inbox.js.map +0 -1
  884. package/packages/mcp/dist/resources/index.d.ts +0 -4
  885. package/packages/mcp/dist/resources/index.d.ts.map +0 -1
  886. package/packages/mcp/dist/resources/index.js +0 -4
  887. package/packages/mcp/dist/resources/index.js.map +0 -1
  888. package/packages/mcp/dist/resources/project.d.ts +0 -11
  889. package/packages/mcp/dist/resources/project.d.ts.map +0 -1
  890. package/packages/mcp/dist/resources/project.js +0 -21
  891. package/packages/mcp/dist/resources/project.js.map +0 -1
  892. package/packages/mcp/dist/server.d.ts +0 -23
  893. package/packages/mcp/dist/server.d.ts.map +0 -1
  894. package/packages/mcp/dist/server.js +0 -317
  895. package/packages/mcp/dist/server.js.map +0 -1
  896. package/packages/mcp/dist/simple.d.ts +0 -170
  897. package/packages/mcp/dist/simple.d.ts.map +0 -1
  898. package/packages/mcp/dist/simple.js +0 -120
  899. package/packages/mcp/dist/simple.js.map +0 -1
  900. package/packages/mcp/dist/tools/index.d.ts +0 -20
  901. package/packages/mcp/dist/tools/index.d.ts.map +0 -1
  902. package/packages/mcp/dist/tools/index.js +0 -20
  903. package/packages/mcp/dist/tools/index.js.map +0 -1
  904. package/packages/mcp/dist/tools/relay-broadcast.d.ts +0 -20
  905. package/packages/mcp/dist/tools/relay-broadcast.d.ts.map +0 -1
  906. package/packages/mcp/dist/tools/relay-broadcast.js +0 -25
  907. package/packages/mcp/dist/tools/relay-broadcast.js.map +0 -1
  908. package/packages/mcp/dist/tools/relay-channel.d.ts +0 -75
  909. package/packages/mcp/dist/tools/relay-channel.d.ts.map +0 -1
  910. package/packages/mcp/dist/tools/relay-channel.js +0 -124
  911. package/packages/mcp/dist/tools/relay-channel.js.map +0 -1
  912. package/packages/mcp/dist/tools/relay-connected.d.ts +0 -17
  913. package/packages/mcp/dist/tools/relay-connected.d.ts.map +0 -1
  914. package/packages/mcp/dist/tools/relay-connected.js +0 -54
  915. package/packages/mcp/dist/tools/relay-connected.js.map +0 -1
  916. package/packages/mcp/dist/tools/relay-consensus.d.ts +0 -45
  917. package/packages/mcp/dist/tools/relay-consensus.d.ts.map +0 -1
  918. package/packages/mcp/dist/tools/relay-consensus.js +0 -80
  919. package/packages/mcp/dist/tools/relay-consensus.js.map +0 -1
  920. package/packages/mcp/dist/tools/relay-continuity.d.ts +0 -35
  921. package/packages/mcp/dist/tools/relay-continuity.d.ts.map +0 -1
  922. package/packages/mcp/dist/tools/relay-continuity.js +0 -101
  923. package/packages/mcp/dist/tools/relay-continuity.js.map +0 -1
  924. package/packages/mcp/dist/tools/relay-health.d.ts +0 -20
  925. package/packages/mcp/dist/tools/relay-health.d.ts.map +0 -1
  926. package/packages/mcp/dist/tools/relay-health.js +0 -130
  927. package/packages/mcp/dist/tools/relay-health.js.map +0 -1
  928. package/packages/mcp/dist/tools/relay-inbox.d.ts +0 -26
  929. package/packages/mcp/dist/tools/relay-inbox.d.ts.map +0 -1
  930. package/packages/mcp/dist/tools/relay-inbox.js +0 -58
  931. package/packages/mcp/dist/tools/relay-inbox.js.map +0 -1
  932. package/packages/mcp/dist/tools/relay-logs.d.ts +0 -20
  933. package/packages/mcp/dist/tools/relay-logs.d.ts.map +0 -1
  934. package/packages/mcp/dist/tools/relay-logs.js +0 -90
  935. package/packages/mcp/dist/tools/relay-logs.js.map +0 -1
  936. package/packages/mcp/dist/tools/relay-messages.d.ts +0 -32
  937. package/packages/mcp/dist/tools/relay-messages.d.ts.map +0 -1
  938. package/packages/mcp/dist/tools/relay-messages.js +0 -61
  939. package/packages/mcp/dist/tools/relay-messages.js.map +0 -1
  940. package/packages/mcp/dist/tools/relay-metrics.d.ts +0 -17
  941. package/packages/mcp/dist/tools/relay-metrics.d.ts.map +0 -1
  942. package/packages/mcp/dist/tools/relay-metrics.js +0 -124
  943. package/packages/mcp/dist/tools/relay-metrics.js.map +0 -1
  944. package/packages/mcp/dist/tools/relay-release.d.ts +0 -20
  945. package/packages/mcp/dist/tools/relay-release.d.ts.map +0 -1
  946. package/packages/mcp/dist/tools/relay-release.js +0 -44
  947. package/packages/mcp/dist/tools/relay-release.js.map +0 -1
  948. package/packages/mcp/dist/tools/relay-remove-agent.d.ts +0 -20
  949. package/packages/mcp/dist/tools/relay-remove-agent.d.ts.map +0 -1
  950. package/packages/mcp/dist/tools/relay-remove-agent.js +0 -50
  951. package/packages/mcp/dist/tools/relay-remove-agent.js.map +0 -1
  952. package/packages/mcp/dist/tools/relay-send.d.ts +0 -29
  953. package/packages/mcp/dist/tools/relay-send.d.ts.map +0 -1
  954. package/packages/mcp/dist/tools/relay-send.js +0 -73
  955. package/packages/mcp/dist/tools/relay-send.js.map +0 -1
  956. package/packages/mcp/dist/tools/relay-set-model.d.ts +0 -23
  957. package/packages/mcp/dist/tools/relay-set-model.d.ts.map +0 -1
  958. package/packages/mcp/dist/tools/relay-set-model.js +0 -52
  959. package/packages/mcp/dist/tools/relay-set-model.js.map +0 -1
  960. package/packages/mcp/dist/tools/relay-shadow.d.ts +0 -30
  961. package/packages/mcp/dist/tools/relay-shadow.d.ts.map +0 -1
  962. package/packages/mcp/dist/tools/relay-shadow.js +0 -55
  963. package/packages/mcp/dist/tools/relay-shadow.js.map +0 -1
  964. package/packages/mcp/dist/tools/relay-spawn.d.ts +0 -36
  965. package/packages/mcp/dist/tools/relay-spawn.d.ts.map +0 -1
  966. package/packages/mcp/dist/tools/relay-spawn.js +0 -73
  967. package/packages/mcp/dist/tools/relay-spawn.js.map +0 -1
  968. package/packages/mcp/dist/tools/relay-status.d.ts +0 -11
  969. package/packages/mcp/dist/tools/relay-status.d.ts.map +0 -1
  970. package/packages/mcp/dist/tools/relay-status.js +0 -43
  971. package/packages/mcp/dist/tools/relay-status.js.map +0 -1
  972. package/packages/mcp/dist/tools/relay-subscribe.d.ts +0 -27
  973. package/packages/mcp/dist/tools/relay-subscribe.d.ts.map +0 -1
  974. package/packages/mcp/dist/tools/relay-subscribe.js +0 -49
  975. package/packages/mcp/dist/tools/relay-subscribe.js.map +0 -1
  976. package/packages/mcp/dist/tools/relay-who.d.ts +0 -20
  977. package/packages/mcp/dist/tools/relay-who.d.ts.map +0 -1
  978. package/packages/mcp/dist/tools/relay-who.js +0 -62
  979. package/packages/mcp/dist/tools/relay-who.js.map +0 -1
  980. package/packages/mcp/package.json +0 -82
  981. package/packages/mcp/src/bin.ts +0 -200
  982. package/packages/mcp/src/client-adapter.ts +0 -358
  983. package/packages/mcp/src/cloud.ts +0 -41
  984. package/packages/mcp/src/errors.ts +0 -17
  985. package/packages/mcp/src/file-transport.ts +0 -275
  986. package/packages/mcp/src/hybrid-client.ts +0 -25
  987. package/packages/mcp/src/index.ts +0 -143
  988. package/packages/mcp/src/install-cli.ts +0 -210
  989. package/packages/mcp/src/install.ts +0 -820
  990. package/packages/mcp/src/prompts/index.ts +0 -1
  991. package/packages/mcp/src/prompts/protocol.ts +0 -164
  992. package/packages/mcp/src/resources/agents.ts +0 -21
  993. package/packages/mcp/src/resources/inbox.ts +0 -21
  994. package/packages/mcp/src/resources/index.ts +0 -3
  995. package/packages/mcp/src/resources/project.ts +0 -29
  996. package/packages/mcp/src/server.ts +0 -475
  997. package/packages/mcp/src/simple.ts +0 -214
  998. package/packages/mcp/src/tools/index.ts +0 -155
  999. package/packages/mcp/src/tools/relay-broadcast.ts +0 -32
  1000. package/packages/mcp/src/tools/relay-channel.ts +0 -151
  1001. package/packages/mcp/src/tools/relay-connected.ts +0 -67
  1002. package/packages/mcp/src/tools/relay-consensus.ts +0 -92
  1003. package/packages/mcp/src/tools/relay-continuity.ts +0 -127
  1004. package/packages/mcp/src/tools/relay-health.ts +0 -148
  1005. package/packages/mcp/src/tools/relay-inbox.ts +0 -70
  1006. package/packages/mcp/src/tools/relay-logs.ts +0 -106
  1007. package/packages/mcp/src/tools/relay-messages.ts +0 -66
  1008. package/packages/mcp/src/tools/relay-metrics.ts +0 -142
  1009. package/packages/mcp/src/tools/relay-release.ts +0 -54
  1010. package/packages/mcp/src/tools/relay-remove-agent.ts +0 -58
  1011. package/packages/mcp/src/tools/relay-send.ts +0 -84
  1012. package/packages/mcp/src/tools/relay-set-model.ts +0 -62
  1013. package/packages/mcp/src/tools/relay-shadow.ts +0 -67
  1014. package/packages/mcp/src/tools/relay-spawn.ts +0 -87
  1015. package/packages/mcp/src/tools/relay-status.ts +0 -57
  1016. package/packages/mcp/src/tools/relay-subscribe.ts +0 -61
  1017. package/packages/mcp/src/tools/relay-who.ts +0 -75
  1018. package/packages/mcp/tests/client.test.ts +0 -451
  1019. package/packages/mcp/tests/discover.test.ts +0 -256
  1020. package/packages/mcp/tests/install.test.ts +0 -123
  1021. package/packages/mcp/tests/prompts.test.ts +0 -12
  1022. package/packages/mcp/tests/resources.test.ts +0 -53
  1023. package/packages/mcp/tests/tools.test.ts +0 -1516
  1024. package/packages/mcp/tsconfig.json +0 -22
  1025. package/packages/mcp/vitest.config.ts +0 -9
  1026. package/packages/protocol/dist/channels.d.ts +0 -137
  1027. package/packages/protocol/dist/channels.d.ts.map +0 -1
  1028. package/packages/protocol/dist/channels.js +0 -154
  1029. package/packages/protocol/dist/channels.js.map +0 -1
  1030. package/packages/protocol/dist/framing.d.ts +0 -80
  1031. package/packages/protocol/dist/framing.d.ts.map +0 -1
  1032. package/packages/protocol/dist/framing.js +0 -206
  1033. package/packages/protocol/dist/framing.js.map +0 -1
  1034. package/packages/protocol/dist/id-generator.d.ts +0 -35
  1035. package/packages/protocol/dist/id-generator.d.ts.map +0 -1
  1036. package/packages/protocol/dist/id-generator.js +0 -60
  1037. package/packages/protocol/dist/id-generator.js.map +0 -1
  1038. package/packages/protocol/dist/index.d.ts +0 -5
  1039. package/packages/protocol/dist/index.d.ts.map +0 -1
  1040. package/packages/protocol/dist/index.js +0 -5
  1041. package/packages/protocol/dist/index.js.map +0 -1
  1042. package/packages/protocol/dist/relay-pty-schemas.d.ts +0 -340
  1043. package/packages/protocol/dist/relay-pty-schemas.d.ts.map +0 -1
  1044. package/packages/protocol/dist/relay-pty-schemas.js +0 -60
  1045. package/packages/protocol/dist/relay-pty-schemas.js.map +0 -1
  1046. package/packages/protocol/dist/types.d.ts +0 -793
  1047. package/packages/protocol/dist/types.d.ts.map +0 -1
  1048. package/packages/protocol/dist/types.js +0 -8
  1049. package/packages/protocol/dist/types.js.map +0 -1
  1050. package/packages/protocol/package.json +0 -61
  1051. package/packages/protocol/src/channels.test.ts +0 -330
  1052. package/packages/protocol/src/channels.ts +0 -270
  1053. package/packages/protocol/src/framing.test.ts +0 -164
  1054. package/packages/protocol/src/framing.ts +0 -242
  1055. package/packages/protocol/src/id-generator.ts +0 -69
  1056. package/packages/protocol/src/index.ts +0 -4
  1057. package/packages/protocol/src/relay-pty-schemas.ts +0 -400
  1058. package/packages/protocol/src/types.test.ts +0 -271
  1059. package/packages/protocol/src/types.ts +0 -988
  1060. package/packages/protocol/tsconfig.json +0 -21
  1061. package/packages/protocol/vitest.config.ts +0 -9
  1062. package/packages/resiliency/dist/cgroup-manager.d.ts +0 -152
  1063. package/packages/resiliency/dist/cgroup-manager.d.ts.map +0 -1
  1064. package/packages/resiliency/dist/cgroup-manager.js +0 -394
  1065. package/packages/resiliency/dist/cgroup-manager.js.map +0 -1
  1066. package/packages/resiliency/dist/context-persistence.d.ts +0 -140
  1067. package/packages/resiliency/dist/context-persistence.d.ts.map +0 -1
  1068. package/packages/resiliency/dist/context-persistence.js +0 -397
  1069. package/packages/resiliency/dist/context-persistence.js.map +0 -1
  1070. package/packages/resiliency/dist/crash-insights.d.ts +0 -156
  1071. package/packages/resiliency/dist/crash-insights.d.ts.map +0 -1
  1072. package/packages/resiliency/dist/crash-insights.js +0 -492
  1073. package/packages/resiliency/dist/crash-insights.js.map +0 -1
  1074. package/packages/resiliency/dist/gossip-health.d.ts +0 -137
  1075. package/packages/resiliency/dist/gossip-health.d.ts.map +0 -1
  1076. package/packages/resiliency/dist/gossip-health.js +0 -241
  1077. package/packages/resiliency/dist/gossip-health.js.map +0 -1
  1078. package/packages/resiliency/dist/health-monitor.d.ts +0 -97
  1079. package/packages/resiliency/dist/health-monitor.d.ts.map +0 -1
  1080. package/packages/resiliency/dist/health-monitor.js +0 -291
  1081. package/packages/resiliency/dist/health-monitor.js.map +0 -1
  1082. package/packages/resiliency/dist/index.d.ts +0 -69
  1083. package/packages/resiliency/dist/index.d.ts.map +0 -1
  1084. package/packages/resiliency/dist/index.js +0 -69
  1085. package/packages/resiliency/dist/index.js.map +0 -1
  1086. package/packages/resiliency/dist/leader-watchdog.d.ts +0 -109
  1087. package/packages/resiliency/dist/leader-watchdog.d.ts.map +0 -1
  1088. package/packages/resiliency/dist/leader-watchdog.js +0 -189
  1089. package/packages/resiliency/dist/leader-watchdog.js.map +0 -1
  1090. package/packages/resiliency/dist/logger.d.ts +0 -114
  1091. package/packages/resiliency/dist/logger.d.ts.map +0 -1
  1092. package/packages/resiliency/dist/logger.js +0 -250
  1093. package/packages/resiliency/dist/logger.js.map +0 -1
  1094. package/packages/resiliency/dist/memory-monitor.d.ts +0 -172
  1095. package/packages/resiliency/dist/memory-monitor.d.ts.map +0 -1
  1096. package/packages/resiliency/dist/memory-monitor.js +0 -599
  1097. package/packages/resiliency/dist/memory-monitor.js.map +0 -1
  1098. package/packages/resiliency/dist/metrics.d.ts +0 -115
  1099. package/packages/resiliency/dist/metrics.d.ts.map +0 -1
  1100. package/packages/resiliency/dist/metrics.js +0 -239
  1101. package/packages/resiliency/dist/metrics.js.map +0 -1
  1102. package/packages/resiliency/dist/provider-context.d.ts +0 -100
  1103. package/packages/resiliency/dist/provider-context.d.ts.map +0 -1
  1104. package/packages/resiliency/dist/provider-context.js +0 -362
  1105. package/packages/resiliency/dist/provider-context.js.map +0 -1
  1106. package/packages/resiliency/dist/stateless-lead.d.ts +0 -149
  1107. package/packages/resiliency/dist/stateless-lead.d.ts.map +0 -1
  1108. package/packages/resiliency/dist/stateless-lead.js +0 -308
  1109. package/packages/resiliency/dist/stateless-lead.js.map +0 -1
  1110. package/packages/resiliency/dist/supervisor.d.ts +0 -147
  1111. package/packages/resiliency/dist/supervisor.d.ts.map +0 -1
  1112. package/packages/resiliency/dist/supervisor.js +0 -459
  1113. package/packages/resiliency/dist/supervisor.js.map +0 -1
  1114. package/packages/resiliency/package.json +0 -38
  1115. package/packages/resiliency/src/cgroup-manager.ts +0 -468
  1116. package/packages/resiliency/src/context-persistence.ts +0 -538
  1117. package/packages/resiliency/src/crash-insights.test.ts +0 -620
  1118. package/packages/resiliency/src/crash-insights.ts +0 -660
  1119. package/packages/resiliency/src/gossip-health.ts +0 -333
  1120. package/packages/resiliency/src/health-monitor.ts +0 -371
  1121. package/packages/resiliency/src/index.ts +0 -157
  1122. package/packages/resiliency/src/leader-watchdog.ts +0 -260
  1123. package/packages/resiliency/src/logger.ts +0 -320
  1124. package/packages/resiliency/src/memory-monitor.test.ts +0 -637
  1125. package/packages/resiliency/src/memory-monitor.ts +0 -740
  1126. package/packages/resiliency/src/metrics.ts +0 -311
  1127. package/packages/resiliency/src/provider-context.ts +0 -452
  1128. package/packages/resiliency/src/stateless-lead.ts +0 -408
  1129. package/packages/resiliency/src/supervisor.ts +0 -578
  1130. package/packages/resiliency/tsconfig.json +0 -21
  1131. package/packages/resiliency/vitest.config.ts +0 -9
  1132. package/packages/sdk/dist/discovery.d.ts +0 -10
  1133. package/packages/sdk/dist/discovery.d.ts.map +0 -1
  1134. package/packages/sdk/dist/discovery.js +0 -22
  1135. package/packages/sdk/dist/discovery.js.map +0 -1
  1136. package/packages/sdk/dist/errors.d.ts +0 -9
  1137. package/packages/sdk/dist/errors.d.ts.map +0 -1
  1138. package/packages/sdk/dist/errors.js +0 -9
  1139. package/packages/sdk/dist/errors.js.map +0 -1
  1140. package/packages/sdk/dist/protocol/index.d.ts +0 -8
  1141. package/packages/sdk/dist/protocol/index.d.ts.map +0 -1
  1142. package/packages/sdk/dist/protocol/index.js +0 -8
  1143. package/packages/sdk/dist/protocol/index.js.map +0 -1
  1144. package/packages/sdk/examples/SWARM_CAPABILITIES.md +0 -498
  1145. package/packages/sdk/examples/SWARM_PATTERNS.md +0 -541
  1146. package/packages/sdk/src/client.test.ts +0 -1041
  1147. package/packages/sdk/src/discovery.ts +0 -38
  1148. package/packages/sdk/src/errors.ts +0 -17
  1149. package/packages/sdk/src/logs.test.ts +0 -98
  1150. package/packages/sdk/src/protocol/framing.test.ts +0 -164
  1151. package/packages/sdk/src/protocol/index.ts +0 -8
  1152. package/packages/spawner/.trajectories/index.json +0 -5
  1153. package/packages/spawner/API.md +0 -256
  1154. package/packages/spawner/dist/index.d.ts +0 -8
  1155. package/packages/spawner/dist/index.d.ts.map +0 -1
  1156. package/packages/spawner/dist/index.js +0 -8
  1157. package/packages/spawner/dist/index.js.map +0 -1
  1158. package/packages/spawner/dist/types.d.ts +0 -552
  1159. package/packages/spawner/dist/types.d.ts.map +0 -1
  1160. package/packages/spawner/dist/types.js +0 -193
  1161. package/packages/spawner/dist/types.js.map +0 -1
  1162. package/packages/spawner/package.json +0 -47
  1163. package/packages/spawner/src/index.ts +0 -8
  1164. package/packages/spawner/src/types.test.ts +0 -385
  1165. package/packages/spawner/src/types.ts +0 -228
  1166. package/packages/spawner/tsconfig.json +0 -19
  1167. package/packages/spawner/vitest.config.ts +0 -9
  1168. package/packages/state/dist/agent-state.d.ts +0 -40
  1169. package/packages/state/dist/agent-state.d.ts.map +0 -1
  1170. package/packages/state/dist/agent-state.js +0 -120
  1171. package/packages/state/dist/agent-state.js.map +0 -1
  1172. package/packages/state/dist/index.d.ts +0 -8
  1173. package/packages/state/dist/index.d.ts.map +0 -1
  1174. package/packages/state/dist/index.js +0 -8
  1175. package/packages/state/dist/index.js.map +0 -1
  1176. package/packages/state/package.json +0 -37
  1177. package/packages/state/src/agent-state.test.ts +0 -335
  1178. package/packages/state/src/agent-state.ts +0 -153
  1179. package/packages/state/src/index.ts +0 -12
  1180. package/packages/state/tsconfig.json +0 -21
  1181. package/packages/state/vitest.config.ts +0 -9
  1182. package/packages/storage/dist/adapter.d.ts +0 -189
  1183. package/packages/storage/dist/adapter.d.ts.map +0 -1
  1184. package/packages/storage/dist/adapter.js +0 -267
  1185. package/packages/storage/dist/adapter.js.map +0 -1
  1186. package/packages/storage/dist/batched-sqlite-adapter.d.ts +0 -75
  1187. package/packages/storage/dist/batched-sqlite-adapter.d.ts.map +0 -1
  1188. package/packages/storage/dist/batched-sqlite-adapter.js +0 -189
  1189. package/packages/storage/dist/batched-sqlite-adapter.js.map +0 -1
  1190. package/packages/storage/dist/dead-letter-queue.d.ts +0 -196
  1191. package/packages/storage/dist/dead-letter-queue.d.ts.map +0 -1
  1192. package/packages/storage/dist/dead-letter-queue.js +0 -427
  1193. package/packages/storage/dist/dead-letter-queue.js.map +0 -1
  1194. package/packages/storage/dist/dlq-adapter.d.ts +0 -195
  1195. package/packages/storage/dist/dlq-adapter.d.ts.map +0 -1
  1196. package/packages/storage/dist/dlq-adapter.js +0 -664
  1197. package/packages/storage/dist/dlq-adapter.js.map +0 -1
  1198. package/packages/storage/dist/index.d.ts +0 -6
  1199. package/packages/storage/dist/index.d.ts.map +0 -1
  1200. package/packages/storage/dist/index.js +0 -7
  1201. package/packages/storage/dist/index.js.map +0 -1
  1202. package/packages/storage/dist/jsonl-adapter.d.ts +0 -91
  1203. package/packages/storage/dist/jsonl-adapter.d.ts.map +0 -1
  1204. package/packages/storage/dist/jsonl-adapter.js +0 -580
  1205. package/packages/storage/dist/jsonl-adapter.js.map +0 -1
  1206. package/packages/storage/dist/sqlite-adapter.d.ts +0 -131
  1207. package/packages/storage/dist/sqlite-adapter.d.ts.map +0 -1
  1208. package/packages/storage/dist/sqlite-adapter.js +0 -865
  1209. package/packages/storage/dist/sqlite-adapter.js.map +0 -1
  1210. package/packages/storage/package.json +0 -74
  1211. package/packages/storage/src/adapter.ts +0 -446
  1212. package/packages/storage/src/batched-sqlite-adapter.test.ts +0 -256
  1213. package/packages/storage/src/batched-sqlite-adapter.ts +0 -239
  1214. package/packages/storage/src/dead-letter-queue.ts +0 -643
  1215. package/packages/storage/src/dlq-adapter.test.ts +0 -509
  1216. package/packages/storage/src/dlq-adapter.ts +0 -954
  1217. package/packages/storage/src/index.ts +0 -6
  1218. package/packages/storage/src/jsonl-adapter.test.ts +0 -239
  1219. package/packages/storage/src/jsonl-adapter.ts +0 -704
  1220. package/packages/storage/src/memory-adapter.test.ts +0 -36
  1221. package/packages/storage/src/sqlite-adapter.test.ts +0 -580
  1222. package/packages/storage/src/sqlite-adapter.ts +0 -1099
  1223. package/packages/storage/tsconfig.json +0 -21
  1224. package/packages/storage/vitest.config.ts +0 -9
  1225. package/packages/wrapper/dist/__fixtures__/claude-outputs.d.ts +0 -49
  1226. package/packages/wrapper/dist/__fixtures__/claude-outputs.d.ts.map +0 -1
  1227. package/packages/wrapper/dist/__fixtures__/claude-outputs.js +0 -443
  1228. package/packages/wrapper/dist/__fixtures__/claude-outputs.js.map +0 -1
  1229. package/packages/wrapper/dist/__fixtures__/codex-outputs.d.ts +0 -9
  1230. package/packages/wrapper/dist/__fixtures__/codex-outputs.d.ts.map +0 -1
  1231. package/packages/wrapper/dist/__fixtures__/codex-outputs.js +0 -94
  1232. package/packages/wrapper/dist/__fixtures__/codex-outputs.js.map +0 -1
  1233. package/packages/wrapper/dist/__fixtures__/gemini-outputs.d.ts +0 -19
  1234. package/packages/wrapper/dist/__fixtures__/gemini-outputs.d.ts.map +0 -1
  1235. package/packages/wrapper/dist/__fixtures__/gemini-outputs.js +0 -144
  1236. package/packages/wrapper/dist/__fixtures__/gemini-outputs.js.map +0 -1
  1237. package/packages/wrapper/dist/__fixtures__/index.d.ts +0 -68
  1238. package/packages/wrapper/dist/__fixtures__/index.d.ts.map +0 -1
  1239. package/packages/wrapper/dist/__fixtures__/index.js +0 -44
  1240. package/packages/wrapper/dist/__fixtures__/index.js.map +0 -1
  1241. package/packages/wrapper/dist/auth-detection.d.ts +0 -49
  1242. package/packages/wrapper/dist/auth-detection.d.ts.map +0 -1
  1243. package/packages/wrapper/dist/auth-detection.js +0 -199
  1244. package/packages/wrapper/dist/auth-detection.js.map +0 -1
  1245. package/packages/wrapper/dist/base-wrapper.d.ts +0 -254
  1246. package/packages/wrapper/dist/base-wrapper.d.ts.map +0 -1
  1247. package/packages/wrapper/dist/base-wrapper.js +0 -664
  1248. package/packages/wrapper/dist/base-wrapper.js.map +0 -1
  1249. package/packages/wrapper/dist/client.d.ts +0 -291
  1250. package/packages/wrapper/dist/client.d.ts.map +0 -1
  1251. package/packages/wrapper/dist/client.js +0 -926
  1252. package/packages/wrapper/dist/client.js.map +0 -1
  1253. package/packages/wrapper/dist/id-generator.d.ts +0 -35
  1254. package/packages/wrapper/dist/id-generator.d.ts.map +0 -1
  1255. package/packages/wrapper/dist/id-generator.js +0 -60
  1256. package/packages/wrapper/dist/id-generator.js.map +0 -1
  1257. package/packages/wrapper/dist/idle-detector.d.ts +0 -114
  1258. package/packages/wrapper/dist/idle-detector.d.ts.map +0 -1
  1259. package/packages/wrapper/dist/idle-detector.js +0 -317
  1260. package/packages/wrapper/dist/idle-detector.js.map +0 -1
  1261. package/packages/wrapper/dist/inbox.d.ts +0 -37
  1262. package/packages/wrapper/dist/inbox.d.ts.map +0 -1
  1263. package/packages/wrapper/dist/inbox.js +0 -73
  1264. package/packages/wrapper/dist/inbox.js.map +0 -1
  1265. package/packages/wrapper/dist/index.d.ts +0 -40
  1266. package/packages/wrapper/dist/index.d.ts.map +0 -1
  1267. package/packages/wrapper/dist/index.js +0 -53
  1268. package/packages/wrapper/dist/index.js.map +0 -1
  1269. package/packages/wrapper/dist/opencode-api.d.ts +0 -106
  1270. package/packages/wrapper/dist/opencode-api.d.ts.map +0 -1
  1271. package/packages/wrapper/dist/opencode-api.js +0 -219
  1272. package/packages/wrapper/dist/opencode-api.js.map +0 -1
  1273. package/packages/wrapper/dist/opencode-wrapper.d.ts +0 -161
  1274. package/packages/wrapper/dist/opencode-wrapper.d.ts.map +0 -1
  1275. package/packages/wrapper/dist/opencode-wrapper.js +0 -438
  1276. package/packages/wrapper/dist/opencode-wrapper.js.map +0 -1
  1277. package/packages/wrapper/dist/parser.d.ts +0 -236
  1278. package/packages/wrapper/dist/parser.d.ts.map +0 -1
  1279. package/packages/wrapper/dist/parser.js +0 -1238
  1280. package/packages/wrapper/dist/parser.js.map +0 -1
  1281. package/packages/wrapper/dist/prompt-composer.d.ts +0 -67
  1282. package/packages/wrapper/dist/prompt-composer.d.ts.map +0 -1
  1283. package/packages/wrapper/dist/prompt-composer.js +0 -168
  1284. package/packages/wrapper/dist/prompt-composer.js.map +0 -1
  1285. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +0 -486
  1286. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts.map +0 -1
  1287. package/packages/wrapper/dist/relay-pty-orchestrator.js +0 -2550
  1288. package/packages/wrapper/dist/relay-pty-orchestrator.js.map +0 -1
  1289. package/packages/wrapper/dist/shared.d.ts +0 -262
  1290. package/packages/wrapper/dist/shared.d.ts.map +0 -1
  1291. package/packages/wrapper/dist/shared.js +0 -507
  1292. package/packages/wrapper/dist/shared.js.map +0 -1
  1293. package/packages/wrapper/dist/stuck-detector.d.ts +0 -161
  1294. package/packages/wrapper/dist/stuck-detector.d.ts.map +0 -1
  1295. package/packages/wrapper/dist/stuck-detector.js +0 -402
  1296. package/packages/wrapper/dist/stuck-detector.js.map +0 -1
  1297. package/packages/wrapper/dist/tmux-resolver.d.ts +0 -55
  1298. package/packages/wrapper/dist/tmux-resolver.d.ts.map +0 -1
  1299. package/packages/wrapper/dist/tmux-resolver.js +0 -175
  1300. package/packages/wrapper/dist/tmux-resolver.js.map +0 -1
  1301. package/packages/wrapper/dist/tmux-wrapper.d.ts +0 -352
  1302. package/packages/wrapper/dist/tmux-wrapper.d.ts.map +0 -1
  1303. package/packages/wrapper/dist/tmux-wrapper.js +0 -1816
  1304. package/packages/wrapper/dist/tmux-wrapper.js.map +0 -1
  1305. package/packages/wrapper/dist/trajectory-integration.d.ts +0 -292
  1306. package/packages/wrapper/dist/trajectory-integration.d.ts.map +0 -1
  1307. package/packages/wrapper/dist/trajectory-integration.js +0 -979
  1308. package/packages/wrapper/dist/trajectory-integration.js.map +0 -1
  1309. package/packages/wrapper/dist/wrapper-events.d.ts +0 -489
  1310. package/packages/wrapper/dist/wrapper-events.d.ts.map +0 -1
  1311. package/packages/wrapper/dist/wrapper-events.js +0 -252
  1312. package/packages/wrapper/dist/wrapper-events.js.map +0 -1
  1313. package/packages/wrapper/dist/wrapper-types.d.ts +0 -41
  1314. package/packages/wrapper/dist/wrapper-types.d.ts.map +0 -1
  1315. package/packages/wrapper/dist/wrapper-types.js +0 -7
  1316. package/packages/wrapper/dist/wrapper-types.js.map +0 -1
  1317. package/packages/wrapper/package.json +0 -60
  1318. package/packages/wrapper/src/__fixtures__/claude-outputs.ts +0 -471
  1319. package/packages/wrapper/src/__fixtures__/codex-outputs.ts +0 -99
  1320. package/packages/wrapper/src/__fixtures__/gemini-outputs.ts +0 -151
  1321. package/packages/wrapper/src/__fixtures__/index.ts +0 -47
  1322. package/packages/wrapper/src/auth-detection.ts +0 -244
  1323. package/packages/wrapper/src/base-wrapper.test.ts +0 -589
  1324. package/packages/wrapper/src/base-wrapper.ts +0 -841
  1325. package/packages/wrapper/src/client.test.ts +0 -351
  1326. package/packages/wrapper/src/client.ts +0 -1166
  1327. package/packages/wrapper/src/id-generator.test.ts +0 -71
  1328. package/packages/wrapper/src/id-generator.ts +0 -69
  1329. package/packages/wrapper/src/idle-detector.test.ts +0 -418
  1330. package/packages/wrapper/src/idle-detector.ts +0 -384
  1331. package/packages/wrapper/src/inbox.test.ts +0 -233
  1332. package/packages/wrapper/src/inbox.ts +0 -89
  1333. package/packages/wrapper/src/index.ts +0 -199
  1334. package/packages/wrapper/src/opencode-api.test.ts +0 -292
  1335. package/packages/wrapper/src/opencode-api.ts +0 -285
  1336. package/packages/wrapper/src/opencode-wrapper.ts +0 -541
  1337. package/packages/wrapper/src/parser.regression.test.ts +0 -251
  1338. package/packages/wrapper/src/parser.test.ts +0 -1359
  1339. package/packages/wrapper/src/parser.ts +0 -1477
  1340. package/packages/wrapper/src/prompt-composer.test.ts +0 -219
  1341. package/packages/wrapper/src/prompt-composer.ts +0 -231
  1342. package/packages/wrapper/src/relay-pty-orchestrator.test.ts +0 -1386
  1343. package/packages/wrapper/src/relay-pty-orchestrator.ts +0 -3041
  1344. package/packages/wrapper/src/shared.test.ts +0 -467
  1345. package/packages/wrapper/src/shared.ts +0 -652
  1346. package/packages/wrapper/src/stuck-detector.test.ts +0 -303
  1347. package/packages/wrapper/src/stuck-detector.ts +0 -511
  1348. package/packages/wrapper/src/tmux-resolver.test.ts +0 -104
  1349. package/packages/wrapper/src/tmux-resolver.ts +0 -207
  1350. package/packages/wrapper/src/tmux-wrapper.test.ts +0 -316
  1351. package/packages/wrapper/src/tmux-wrapper.ts +0 -2095
  1352. package/packages/wrapper/src/trajectory-detection.test.ts +0 -151
  1353. package/packages/wrapper/src/trajectory-integration.ts +0 -1261
  1354. package/packages/wrapper/src/wrapper-events.ts +0 -395
  1355. package/packages/wrapper/src/wrapper-types.ts +0 -45
  1356. package/packages/wrapper/tsconfig.json +0 -19
  1357. package/packages/wrapper/vitest.config.ts +0 -9
  1358. /package/packages/{broker-sdk → sdk}/dist/__tests__/facade.test.d.ts +0 -0
  1359. /package/packages/{broker-sdk → sdk}/dist/__tests__/facade.test.d.ts.map +0 -0
  1360. /package/packages/{broker-sdk → sdk}/dist/__tests__/integration.test.d.ts +0 -0
  1361. /package/packages/{broker-sdk → sdk}/dist/__tests__/integration.test.d.ts.map +0 -0
  1362. /package/packages/{broker-sdk → sdk}/dist/__tests__/quickstart.test.d.ts +0 -0
  1363. /package/packages/{broker-sdk → sdk}/dist/__tests__/quickstart.test.d.ts.map +0 -0
  1364. /package/packages/{broker-sdk → sdk}/dist/__tests__/unit.test.d.ts +0 -0
  1365. /package/packages/{broker-sdk → sdk}/dist/__tests__/unit.test.d.ts.map +0 -0
  1366. /package/packages/{broker-sdk → sdk}/dist/browser.d.ts +0 -0
  1367. /package/packages/{broker-sdk → sdk}/dist/browser.d.ts.map +0 -0
  1368. /package/packages/{broker-sdk → sdk}/dist/browser.js +0 -0
  1369. /package/packages/{broker-sdk → sdk}/dist/browser.js.map +0 -0
  1370. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.d.ts +0 -0
  1371. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.d.ts.map +0 -0
  1372. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.js +0 -0
  1373. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.js.map +0 -0
  1374. /package/packages/{broker-sdk → sdk}/dist/consensus.d.ts +0 -0
  1375. /package/packages/{broker-sdk → sdk}/dist/consensus.d.ts.map +0 -0
  1376. /package/packages/{broker-sdk → sdk}/dist/consensus.js +0 -0
  1377. /package/packages/{broker-sdk → sdk}/dist/consensus.js.map +0 -0
  1378. /package/packages/{broker-sdk → sdk}/dist/examples/demo.d.ts +0 -0
  1379. /package/packages/{broker-sdk → sdk}/dist/examples/demo.d.ts.map +0 -0
  1380. /package/packages/{broker-sdk → sdk}/dist/examples/demo.js +0 -0
  1381. /package/packages/{broker-sdk → sdk}/dist/examples/demo.js.map +0 -0
  1382. /package/packages/{broker-sdk → sdk}/dist/examples/example.d.ts +0 -0
  1383. /package/packages/{broker-sdk → sdk}/dist/examples/example.d.ts.map +0 -0
  1384. /package/packages/{broker-sdk → sdk}/dist/examples/example.js +0 -0
  1385. /package/packages/{broker-sdk → sdk}/dist/examples/example.js.map +0 -0
  1386. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.d.ts +0 -0
  1387. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.d.ts.map +0 -0
  1388. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.js +0 -0
  1389. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.js.map +0 -0
  1390. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.d.ts +0 -0
  1391. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.d.ts.map +0 -0
  1392. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.js +0 -0
  1393. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.js.map +0 -0
  1394. /package/packages/{broker-sdk → sdk}/dist/protocol.js +0 -0
  1395. /package/packages/{broker-sdk → sdk}/dist/protocol.js.map +0 -0
  1396. /package/packages/{broker-sdk → sdk}/dist/pty.d.ts +0 -0
  1397. /package/packages/{broker-sdk → sdk}/dist/shadow.js +0 -0
  1398. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.d.ts +0 -0
  1399. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.d.ts.map +0 -0
  1400. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.js +0 -0
  1401. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.js.map +0 -0
  1402. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.d.ts +0 -0
  1403. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.d.ts.map +0 -0
  1404. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.js +0 -0
  1405. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.js.map +0 -0
  1406. /package/packages/{broker-sdk → sdk}/dist/workflows/state.d.ts +0 -0
  1407. /package/packages/{broker-sdk → sdk}/dist/workflows/state.d.ts.map +0 -0
  1408. /package/packages/{broker-sdk → sdk}/dist/workflows/state.js +0 -0
  1409. /package/packages/{broker-sdk → sdk}/dist/workflows/state.js.map +0 -0
  1410. /package/packages/{broker-sdk → sdk}/src/__tests__/workflow-trajectory.test.ts +0 -0
  1411. /package/packages/{broker-sdk → sdk}/src/browser.ts +0 -0
  1412. /package/packages/{broker-sdk → sdk}/src/consensus-helpers.ts +0 -0
  1413. /package/packages/{broker-sdk → sdk}/src/consensus.ts +0 -0
  1414. /package/packages/{broker-sdk → sdk}/src/examples/demo.ts +0 -0
  1415. /package/packages/{broker-sdk → sdk}/src/examples/example.ts +0 -0
  1416. /package/packages/{broker-sdk → sdk}/src/examples/quickstart.ts +0 -0
  1417. /package/packages/{broker-sdk → sdk}/src/examples/ralph-loop.ts +0 -0
  1418. /package/packages/{broker-sdk → sdk}/src/examples/sample-prd.json +0 -0
  1419. /package/packages/{broker-sdk → sdk}/src/workflows/barrier.ts +0 -0
  1420. /package/packages/{broker-sdk → sdk}/src/workflows/memory-db.ts +0 -0
  1421. /package/packages/{broker-sdk → sdk}/src/workflows/state.ts +0 -0
@@ -1,1591 +1,498 @@
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
+ const bundled = path.resolve(moduleDir, '..', 'bin', brokerExe);
486
+ if (fs.existsSync(bundled)) {
487
+ return bundled;
488
+ }
489
+ // 3. Check for standalone broker binary in ~/.agent-relay/bin/ (install.sh)
490
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '';
491
+ const standaloneBroker = path.join(homeDir, '.agent-relay', 'bin', brokerExe);
492
+ if (fs.existsSync(standaloneBroker)) {
493
+ return standaloneBroker;
494
+ }
495
+ // 4. Fall back to agent-relay on PATH (may be Node CLI — will fail for broker ops)
496
+ return 'agent-relay';
1590
497
  }
1591
498
  //# sourceMappingURL=client.js.map