agent-relay 2.3.14 → 2.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1420) hide show
  1. package/README.md +42 -176
  2. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  3. package/bin/agent-relay-broker-darwin-x64 +0 -0
  4. package/bin/agent-relay-broker-linux-arm64 +0 -0
  5. package/bin/agent-relay-broker-linux-x64 +0 -0
  6. package/dist/index.cjs +50319 -63390
  7. package/dist/src/cli/bootstrap.d.ts +6 -0
  8. package/dist/src/cli/bootstrap.d.ts.map +1 -0
  9. package/dist/src/cli/bootstrap.js +109 -0
  10. package/dist/src/cli/bootstrap.js.map +1 -0
  11. package/dist/src/cli/commands/agent-management.d.ts +51 -0
  12. package/dist/src/cli/commands/agent-management.d.ts.map +1 -0
  13. package/dist/src/cli/commands/agent-management.js +290 -0
  14. package/dist/src/cli/commands/agent-management.js.map +1 -0
  15. package/dist/src/cli/commands/auth.d.ts +9 -0
  16. package/dist/src/cli/commands/auth.d.ts.map +1 -0
  17. package/dist/src/cli/commands/auth.js +33 -0
  18. package/dist/src/cli/commands/auth.js.map +1 -0
  19. package/dist/src/cli/commands/cloud.d.ts +18 -0
  20. package/dist/src/cli/commands/cloud.d.ts.map +1 -0
  21. package/dist/src/cli/commands/cloud.js +392 -0
  22. package/dist/src/cli/commands/cloud.js.map +1 -0
  23. package/dist/src/cli/commands/core.d.ts +107 -0
  24. package/dist/src/cli/commands/core.d.ts.map +1 -0
  25. package/dist/src/cli/commands/core.js +299 -0
  26. package/dist/src/cli/commands/core.js.map +1 -0
  27. package/dist/src/cli/commands/doctor.d.ts +1 -1
  28. package/dist/src/cli/commands/doctor.d.ts.map +1 -1
  29. package/dist/src/cli/commands/doctor.js +1 -485
  30. package/dist/src/cli/commands/doctor.js.map +1 -1
  31. package/dist/src/cli/commands/messaging.d.ts +61 -0
  32. package/dist/src/cli/commands/messaging.d.ts.map +1 -0
  33. package/dist/src/cli/commands/messaging.js +213 -0
  34. package/dist/src/cli/commands/messaging.js.map +1 -0
  35. package/dist/src/cli/commands/monitoring.d.ts +57 -0
  36. package/dist/src/cli/commands/monitoring.d.ts.map +1 -0
  37. package/dist/src/cli/commands/monitoring.js +350 -0
  38. package/dist/src/cli/commands/monitoring.js.map +1 -0
  39. package/dist/src/cli/commands/setup.d.ts +29 -0
  40. package/dist/src/cli/commands/setup.d.ts.map +1 -0
  41. package/dist/src/cli/commands/setup.js +324 -0
  42. package/dist/src/cli/commands/setup.js.map +1 -0
  43. package/dist/src/cli/commands/swarm.d.ts +3 -0
  44. package/dist/src/cli/commands/swarm.d.ts.map +1 -0
  45. package/dist/src/cli/commands/swarm.js +108 -0
  46. package/dist/src/cli/commands/swarm.js.map +1 -0
  47. package/dist/src/cli/index.d.ts +1 -28
  48. package/dist/src/cli/index.d.ts.map +1 -1
  49. package/dist/src/cli/index.js +4 -4936
  50. package/dist/src/cli/index.js.map +1 -1
  51. package/dist/src/cli/lib/agent-management-listing.d.ts +39 -0
  52. package/dist/src/cli/lib/agent-management-listing.d.ts.map +1 -0
  53. package/dist/src/cli/lib/agent-management-listing.js +253 -0
  54. package/dist/src/cli/lib/agent-management-listing.js.map +1 -0
  55. package/dist/src/cli/lib/auth-ssh.d.ts +48 -0
  56. package/dist/src/cli/lib/auth-ssh.d.ts.map +1 -0
  57. package/dist/src/cli/lib/auth-ssh.js +572 -0
  58. package/dist/src/cli/lib/auth-ssh.js.map +1 -0
  59. package/dist/src/cli/lib/bridge.d.ts +8 -0
  60. package/dist/src/cli/lib/bridge.d.ts.map +1 -0
  61. package/dist/src/cli/lib/bridge.js +100 -0
  62. package/dist/src/cli/lib/bridge.js.map +1 -0
  63. package/dist/src/cli/lib/broker-lifecycle.d.ts +20 -0
  64. package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -0
  65. package/dist/src/cli/lib/broker-lifecycle.js +843 -0
  66. package/dist/src/cli/lib/broker-lifecycle.js.map +1 -0
  67. package/dist/src/cli/lib/client-factory.d.ts +24 -0
  68. package/dist/src/cli/lib/client-factory.d.ts.map +1 -0
  69. package/dist/src/cli/lib/client-factory.js +20 -0
  70. package/dist/src/cli/lib/client-factory.js.map +1 -0
  71. package/dist/src/cli/lib/cloud-client.d.ts +39 -0
  72. package/dist/src/cli/lib/cloud-client.d.ts.map +1 -0
  73. package/dist/src/cli/lib/cloud-client.js +120 -0
  74. package/dist/src/cli/lib/cloud-client.js.map +1 -0
  75. package/dist/src/cli/lib/core-maintenance.d.ts +13 -0
  76. package/dist/src/cli/lib/core-maintenance.d.ts.map +1 -0
  77. package/dist/src/cli/lib/core-maintenance.js +250 -0
  78. package/dist/src/cli/lib/core-maintenance.js.map +1 -0
  79. package/dist/src/cli/lib/doctor.d.ts +2 -0
  80. package/dist/src/cli/lib/doctor.d.ts.map +1 -0
  81. package/dist/src/cli/lib/doctor.js +484 -0
  82. package/dist/src/cli/lib/doctor.js.map +1 -0
  83. package/dist/src/cli/lib/formatting.d.ts +8 -0
  84. package/dist/src/cli/lib/formatting.d.ts.map +1 -0
  85. package/dist/src/cli/lib/formatting.js +48 -0
  86. package/dist/src/cli/lib/formatting.js.map +1 -0
  87. package/dist/src/cli/lib/index.d.ts +5 -0
  88. package/dist/src/cli/lib/index.d.ts.map +1 -0
  89. package/dist/src/cli/lib/index.js +5 -0
  90. package/dist/src/cli/lib/index.js.map +1 -0
  91. package/dist/src/cli/lib/jsonc.d.ts +8 -0
  92. package/dist/src/cli/lib/jsonc.d.ts.map +1 -0
  93. package/dist/src/cli/lib/jsonc.js +88 -0
  94. package/dist/src/cli/lib/jsonc.js.map +1 -0
  95. package/dist/src/cli/lib/monitoring-health.d.ts +32 -0
  96. package/dist/src/cli/lib/monitoring-health.d.ts.map +1 -0
  97. package/dist/src/cli/lib/monitoring-health.js +2 -0
  98. package/dist/src/cli/lib/monitoring-health.js.map +1 -0
  99. package/dist/src/cli/lib/paths.d.ts +2 -0
  100. package/dist/src/cli/lib/paths.d.ts.map +1 -0
  101. package/dist/src/cli/lib/paths.js +5 -0
  102. package/dist/src/cli/lib/paths.js.map +1 -0
  103. package/dist/src/index.d.ts +1 -5
  104. package/dist/src/index.d.ts.map +1 -1
  105. package/dist/src/index.js +1 -5
  106. package/dist/src/index.js.map +1 -1
  107. package/install.sh +0 -30
  108. package/package.json +84 -98
  109. package/packages/acp-bridge/README.md +8 -8
  110. package/packages/acp-bridge/dist/acp-agent.d.ts +8 -7
  111. package/packages/acp-bridge/dist/acp-agent.d.ts.map +1 -1
  112. package/packages/acp-bridge/dist/acp-agent.js +118 -143
  113. package/packages/acp-bridge/dist/acp-agent.js.map +1 -1
  114. package/packages/acp-bridge/dist/cli.d.ts +1 -1
  115. package/packages/acp-bridge/dist/cli.js +3 -3
  116. package/packages/acp-bridge/dist/index.d.ts +2 -2
  117. package/packages/acp-bridge/dist/index.d.ts.map +1 -1
  118. package/packages/acp-bridge/dist/index.js +1 -1
  119. package/packages/acp-bridge/dist/index.js.map +1 -1
  120. package/packages/acp-bridge/dist/types.d.ts +3 -3
  121. package/packages/acp-bridge/package.json +3 -3
  122. package/packages/acp-bridge/src/acp-agent.ts +123 -160
  123. package/packages/acp-bridge/src/cli.ts +3 -3
  124. package/packages/acp-bridge/src/index.ts +2 -2
  125. package/packages/acp-bridge/src/types.ts +3 -3
  126. package/packages/config/dist/bridge-config.d.ts +5 -5
  127. package/packages/config/dist/bridge-config.d.ts.map +1 -1
  128. package/packages/config/dist/bridge-config.js +16 -9
  129. package/packages/config/dist/bridge-config.js.map +1 -1
  130. package/packages/config/dist/cli-auth-config.d.ts +1 -1
  131. package/packages/config/dist/cli-auth-config.js +1 -1
  132. package/packages/config/dist/cli-registry.generated.d.ts +340 -0
  133. package/packages/config/dist/cli-registry.generated.d.ts.map +1 -0
  134. package/packages/config/dist/cli-registry.generated.js +297 -0
  135. package/packages/config/dist/cli-registry.generated.js.map +1 -0
  136. package/packages/config/dist/index.d.ts +1 -0
  137. package/packages/config/dist/index.d.ts.map +1 -1
  138. package/packages/config/dist/index.js +1 -0
  139. package/packages/config/dist/index.js.map +1 -1
  140. package/packages/config/dist/project-namespace.d.ts +9 -9
  141. package/packages/config/dist/project-namespace.js +3 -3
  142. package/packages/config/dist/relay-config.d.ts +1 -1
  143. package/packages/config/dist/relay-config.js +1 -1
  144. package/packages/config/dist/schemas.js +1 -1
  145. package/packages/config/dist/shadow-config.d.ts +2 -1
  146. package/packages/config/dist/shadow-config.d.ts.map +1 -1
  147. package/packages/config/dist/shadow-config.js.map +1 -1
  148. package/packages/config/package.json +2 -3
  149. package/packages/config/src/bridge-config.test.ts +20 -6
  150. package/packages/config/src/bridge-config.ts +20 -10
  151. package/packages/config/src/cli-auth-config.ts +1 -1
  152. package/packages/config/src/cli-registry.generated.ts +328 -0
  153. package/packages/config/src/index.ts +1 -0
  154. package/packages/config/src/project-namespace.ts +9 -9
  155. package/packages/config/src/relay-config.ts +1 -1
  156. package/packages/config/src/schemas.ts +1 -1
  157. package/packages/config/src/shadow-config.ts +8 -1
  158. package/packages/contracts/fixtures/error-fixtures.json +42 -0
  159. package/packages/contracts/fixtures/event-fixtures.json +161 -0
  160. package/packages/contracts/fixtures/health-fixtures.json +35 -0
  161. package/packages/contracts/fixtures/identity-fixtures.json +58 -0
  162. package/packages/contracts/fixtures/replay-fixtures.json +33 -0
  163. package/packages/hooks/dist/inbox-check/types.d.ts +2 -2
  164. package/packages/hooks/dist/types.d.ts +9 -3
  165. package/packages/hooks/dist/types.d.ts.map +1 -1
  166. package/packages/hooks/dist/types.js +1 -1
  167. package/packages/hooks/dist/types.js.map +1 -1
  168. package/packages/hooks/package.json +5 -5
  169. package/packages/hooks/src/inbox-check/types.ts +2 -2
  170. package/packages/hooks/src/types.ts +11 -3
  171. package/packages/memory/package.json +2 -2
  172. package/packages/policy/package.json +2 -2
  173. package/packages/sdk/.mcp.json +14 -0
  174. package/packages/sdk/.trajectories/active/traj_1771875803391_84ca57b2.json +50 -0
  175. package/packages/sdk/.trajectories/active/traj_1771891934534_06504121.json +50 -0
  176. package/packages/sdk/.trajectories/active/traj_1771891957929_211afc4e.json +50 -0
  177. package/packages/sdk/.trajectories/active/traj_1771891982509_38c84638.json +50 -0
  178. package/packages/sdk/.trajectories/completed/traj_1771875803188_cd6d181c.json +80 -0
  179. package/packages/sdk/.trajectories/completed/traj_1771875803204_f2aeb8c8.json +80 -0
  180. package/packages/sdk/.trajectories/completed/traj_1771875803210_d65f3f1a.json +80 -0
  181. package/packages/sdk/.trajectories/completed/traj_1771875803218_e454a25d.json +80 -0
  182. package/packages/sdk/.trajectories/completed/traj_1771875803223_d7a64815.json +80 -0
  183. package/packages/sdk/.trajectories/completed/traj_1771875803227_7e56da5b.json +80 -0
  184. package/packages/sdk/.trajectories/completed/traj_1771875803235_4fbf93b4.json +80 -0
  185. package/packages/sdk/.trajectories/completed/traj_1771875803243_47931c71.json +80 -0
  186. package/packages/sdk/.trajectories/completed/traj_1771875803258_3816f3fe.json +80 -0
  187. package/packages/sdk/.trajectories/completed/traj_1771875803268_8061140e.json +80 -0
  188. package/packages/sdk/.trajectories/completed/traj_1771875803326_ae6f9c78.json +80 -0
  189. package/packages/sdk/.trajectories/completed/traj_1771875808396_cbde0a6c.json +91 -0
  190. package/packages/sdk/.trajectories/completed/traj_1771875812026_aa2442bb.json +91 -0
  191. package/packages/sdk/.trajectories/completed/traj_1771875815431_c2c656c5.json +91 -0
  192. package/packages/sdk/.trajectories/completed/traj_1771875818645_3a4dbf02.json +91 -0
  193. package/packages/sdk/.trajectories/completed/traj_1771891934403_24923c03.json +80 -0
  194. package/packages/sdk/.trajectories/completed/traj_1771891934421_dca16e24.json +80 -0
  195. package/packages/sdk/.trajectories/completed/traj_1771891934430_057706f7.json +80 -0
  196. package/packages/sdk/.trajectories/completed/traj_1771891934442_faf97382.json +80 -0
  197. package/packages/sdk/.trajectories/completed/traj_1771891934454_5542ecd5.json +80 -0
  198. package/packages/sdk/.trajectories/completed/traj_1771891934464_12202a08.json +80 -0
  199. package/packages/sdk/.trajectories/completed/traj_1771891934487_94378275.json +80 -0
  200. package/packages/sdk/.trajectories/completed/traj_1771891934503_ca728c13.json +80 -0
  201. package/packages/sdk/.trajectories/completed/traj_1771891934519_100af69a.json +80 -0
  202. package/packages/sdk/.trajectories/completed/traj_1771891934536_62ad39d9.json +80 -0
  203. package/packages/sdk/.trajectories/completed/traj_1771891934553_d6798a52.json +80 -0
  204. package/packages/sdk/.trajectories/completed/traj_1771891939537_541c8096.json +91 -0
  205. package/packages/sdk/.trajectories/completed/traj_1771891942985_36ab9a4d.json +91 -0
  206. package/packages/sdk/.trajectories/completed/traj_1771891946453_e8a6e05f.json +91 -0
  207. package/packages/sdk/.trajectories/completed/traj_1771891949838_5de0de84.json +91 -0
  208. package/packages/sdk/.trajectories/completed/traj_1771891957807_0ecfb4f4.json +80 -0
  209. package/packages/sdk/.trajectories/completed/traj_1771891957827_c4539239.json +80 -0
  210. package/packages/sdk/.trajectories/completed/traj_1771891957836_91168b48.json +80 -0
  211. package/packages/sdk/.trajectories/completed/traj_1771891957848_8c5cad0b.json +80 -0
  212. package/packages/sdk/.trajectories/completed/traj_1771891957857_0986b293.json +80 -0
  213. package/packages/sdk/.trajectories/completed/traj_1771891957872_8a3113af.json +80 -0
  214. package/packages/sdk/.trajectories/completed/traj_1771891957884_0bb85208.json +80 -0
  215. package/packages/sdk/.trajectories/completed/traj_1771891957892_86c75e2e.json +80 -0
  216. package/packages/sdk/.trajectories/completed/traj_1771891957907_98ca0e6f.json +80 -0
  217. package/packages/sdk/.trajectories/completed/traj_1771891957918_d9091231.json +80 -0
  218. package/packages/sdk/.trajectories/completed/traj_1771891957931_dcaf77ed.json +80 -0
  219. package/packages/sdk/.trajectories/completed/traj_1771891962931_eb1fdee2.json +91 -0
  220. package/packages/sdk/.trajectories/completed/traj_1771891966262_9061a93f.json +91 -0
  221. package/packages/sdk/.trajectories/completed/traj_1771891969915_1adaba19.json +91 -0
  222. package/packages/sdk/.trajectories/completed/traj_1771891973588_f08b79e9.json +91 -0
  223. package/packages/sdk/.trajectories/completed/traj_1771891982421_f1985bce.json +80 -0
  224. package/packages/sdk/.trajectories/completed/traj_1771891982432_e7a84163.json +80 -0
  225. package/packages/sdk/.trajectories/completed/traj_1771891982447_369b842a.json +80 -0
  226. package/packages/sdk/.trajectories/completed/traj_1771891982469_5fc45199.json +80 -0
  227. package/packages/sdk/.trajectories/completed/traj_1771891982495_454c7cb3.json +80 -0
  228. package/packages/sdk/.trajectories/completed/traj_1771891982514_08098e03.json +80 -0
  229. package/packages/sdk/.trajectories/completed/traj_1771891982526_b351d778.json +80 -0
  230. package/packages/sdk/.trajectories/completed/traj_1771891982533_fa542d83.json +80 -0
  231. package/packages/sdk/.trajectories/completed/traj_1771891982540_18ab24dc.json +80 -0
  232. package/packages/sdk/.trajectories/completed/traj_1771891982544_5b4fa163.json +80 -0
  233. package/packages/sdk/.trajectories/completed/traj_1771891982548_c13f089a.json +80 -0
  234. package/packages/sdk/.trajectories/completed/traj_1771891987510_23f6da1f.json +91 -0
  235. package/packages/sdk/.trajectories/completed/traj_1771891991466_912c2e04.json +91 -0
  236. package/packages/sdk/.trajectories/completed/traj_1771891994891_60604be2.json +91 -0
  237. package/packages/sdk/.trajectories/completed/traj_1771891998370_cfaf9b8b.json +91 -0
  238. package/packages/sdk/README.md +68 -838
  239. package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts +2 -0
  240. package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts.map +1 -0
  241. package/packages/sdk/dist/__tests__/contract-fixtures.test.js +85 -0
  242. package/packages/sdk/dist/__tests__/contract-fixtures.test.js.map +1 -0
  243. package/packages/sdk/dist/__tests__/facade.test.js +305 -0
  244. package/packages/sdk/dist/__tests__/facade.test.js.map +1 -0
  245. package/packages/sdk/dist/__tests__/integration.test.js +169 -0
  246. package/packages/sdk/dist/__tests__/integration.test.js.map +1 -0
  247. package/packages/sdk/dist/__tests__/pty.test.d.ts +2 -0
  248. package/packages/sdk/dist/__tests__/pty.test.d.ts.map +1 -0
  249. package/packages/sdk/dist/__tests__/pty.test.js +20 -0
  250. package/packages/sdk/dist/__tests__/pty.test.js.map +1 -0
  251. package/packages/sdk/dist/__tests__/quickstart.test.js +176 -0
  252. package/packages/sdk/dist/__tests__/quickstart.test.js.map +1 -0
  253. package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts +2 -0
  254. package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts.map +1 -0
  255. package/packages/sdk/dist/__tests__/spawn-from-env.test.js +206 -0
  256. package/packages/sdk/dist/__tests__/spawn-from-env.test.js.map +1 -0
  257. package/packages/sdk/dist/__tests__/unit.test.js +347 -0
  258. package/packages/sdk/dist/__tests__/unit.test.js.map +1 -0
  259. package/packages/sdk/dist/client.d.ts +140 -526
  260. package/packages/sdk/dist/client.d.ts.map +1 -1
  261. package/packages/sdk/dist/client.js +430 -1509
  262. package/packages/sdk/dist/client.js.map +1 -1
  263. package/packages/sdk/dist/examples/workflow-superiority.d.ts +32 -0
  264. package/packages/sdk/dist/examples/workflow-superiority.d.ts.map +1 -0
  265. package/packages/sdk/dist/examples/workflow-superiority.js +1421 -0
  266. package/packages/sdk/dist/examples/workflow-superiority.js.map +1 -0
  267. package/packages/sdk/dist/index.d.ts +13 -20
  268. package/packages/sdk/dist/index.d.ts.map +1 -1
  269. package/packages/sdk/dist/index.js +12 -26
  270. package/packages/sdk/dist/index.js.map +1 -1
  271. package/packages/sdk/dist/logs.d.ts +70 -25
  272. package/packages/sdk/dist/logs.d.ts.map +1 -1
  273. package/packages/sdk/dist/logs.js +238 -42
  274. package/packages/sdk/dist/logs.js.map +1 -1
  275. package/packages/sdk/dist/models.d.ts +9 -0
  276. package/packages/sdk/dist/models.d.ts.map +1 -0
  277. package/packages/sdk/dist/models.js +17 -0
  278. package/packages/sdk/dist/models.js.map +1 -0
  279. package/packages/sdk/dist/protocol.d.ts +366 -0
  280. package/packages/sdk/dist/protocol.d.ts.map +1 -0
  281. package/packages/sdk/dist/pty.d.ts.map +1 -0
  282. package/packages/sdk/dist/pty.js +26 -0
  283. package/packages/sdk/dist/pty.js.map +1 -0
  284. package/packages/sdk/dist/relay-adapter.d.ts +139 -0
  285. package/packages/sdk/dist/relay-adapter.d.ts.map +1 -0
  286. package/packages/sdk/dist/relay-adapter.js +210 -0
  287. package/packages/sdk/dist/relay-adapter.js.map +1 -0
  288. package/packages/sdk/dist/relay.d.ts +304 -0
  289. package/packages/sdk/dist/relay.d.ts.map +1 -0
  290. package/packages/sdk/dist/relay.js +910 -0
  291. package/packages/sdk/dist/relay.js.map +1 -0
  292. package/packages/sdk/dist/shadow.d.ts +101 -0
  293. package/packages/sdk/dist/shadow.d.ts.map +1 -0
  294. package/packages/sdk/dist/shadow.js.map +1 -0
  295. package/packages/sdk/dist/spawn-from-env.d.ts +77 -0
  296. package/packages/sdk/dist/spawn-from-env.d.ts.map +1 -0
  297. package/packages/sdk/dist/spawn-from-env.js +172 -0
  298. package/packages/sdk/dist/spawn-from-env.js.map +1 -0
  299. package/packages/sdk/dist/workflows/builder.d.ts +114 -0
  300. package/packages/sdk/dist/workflows/builder.d.ts.map +1 -0
  301. package/packages/sdk/dist/workflows/builder.js +201 -0
  302. package/packages/sdk/dist/workflows/builder.js.map +1 -0
  303. package/packages/sdk/dist/workflows/cli.d.ts +11 -0
  304. package/packages/sdk/dist/workflows/cli.d.ts.map +1 -0
  305. package/packages/sdk/dist/workflows/cli.js +144 -0
  306. package/packages/sdk/dist/workflows/cli.js.map +1 -0
  307. package/packages/sdk/dist/workflows/coordinator.d.ts +73 -0
  308. package/packages/sdk/dist/workflows/coordinator.d.ts.map +1 -0
  309. package/packages/sdk/dist/workflows/coordinator.js +647 -0
  310. package/packages/sdk/dist/workflows/coordinator.js.map +1 -0
  311. package/packages/sdk/dist/workflows/custom-steps.d.ts +73 -0
  312. package/packages/sdk/dist/workflows/custom-steps.d.ts.map +1 -0
  313. package/packages/sdk/dist/workflows/custom-steps.js +321 -0
  314. package/packages/sdk/dist/workflows/custom-steps.js.map +1 -0
  315. package/packages/sdk/dist/workflows/dry-run-format.d.ts +6 -0
  316. package/packages/sdk/dist/workflows/dry-run-format.d.ts.map +1 -0
  317. package/packages/sdk/dist/workflows/dry-run-format.js +68 -0
  318. package/packages/sdk/dist/workflows/dry-run-format.js.map +1 -0
  319. package/packages/sdk/dist/workflows/file-db.d.ts +33 -0
  320. package/packages/sdk/dist/workflows/file-db.d.ts.map +1 -0
  321. package/packages/sdk/dist/workflows/file-db.js +108 -0
  322. package/packages/sdk/dist/workflows/file-db.js.map +1 -0
  323. package/packages/sdk/dist/workflows/index.d.ts +15 -0
  324. package/packages/sdk/dist/workflows/index.d.ts.map +1 -0
  325. package/packages/sdk/dist/workflows/index.js +15 -0
  326. package/packages/sdk/dist/workflows/index.js.map +1 -0
  327. package/packages/sdk/dist/workflows/run.d.ts +38 -0
  328. package/packages/sdk/dist/workflows/run.d.ts.map +1 -0
  329. package/packages/sdk/dist/workflows/run.js +25 -0
  330. package/packages/sdk/dist/workflows/run.js.map +1 -0
  331. package/packages/sdk/dist/workflows/runner.d.ts +320 -0
  332. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -0
  333. package/packages/sdk/dist/workflows/runner.js +2821 -0
  334. package/packages/sdk/dist/workflows/runner.js.map +1 -0
  335. package/packages/sdk/dist/workflows/templates.d.ts +47 -0
  336. package/packages/sdk/dist/workflows/templates.d.ts.map +1 -0
  337. package/packages/sdk/dist/workflows/templates.js +405 -0
  338. package/packages/sdk/dist/workflows/templates.js.map +1 -0
  339. package/packages/sdk/dist/workflows/trajectory.d.ts +87 -0
  340. package/packages/sdk/dist/workflows/trajectory.d.ts.map +1 -0
  341. package/packages/sdk/dist/workflows/trajectory.js +441 -0
  342. package/packages/sdk/dist/workflows/trajectory.js.map +1 -0
  343. package/packages/sdk/dist/workflows/types.d.ts +306 -0
  344. package/packages/sdk/dist/workflows/types.d.ts.map +1 -0
  345. package/packages/sdk/dist/workflows/types.js +23 -0
  346. package/packages/sdk/dist/workflows/types.js.map +1 -0
  347. package/packages/sdk/dist/workflows/validator.d.ts +11 -0
  348. package/packages/sdk/dist/workflows/validator.d.ts.map +1 -0
  349. package/packages/sdk/dist/workflows/validator.js +128 -0
  350. package/packages/sdk/dist/workflows/validator.js.map +1 -0
  351. package/packages/sdk/package.json +59 -53
  352. package/packages/sdk/scripts/bundle-agent-relay.mjs +53 -0
  353. package/packages/sdk/src/__tests__/contract-fixtures.test.ts +122 -0
  354. package/packages/sdk/src/__tests__/error-scenarios.test.ts +682 -0
  355. package/packages/sdk/src/__tests__/facade.test.ts +364 -0
  356. package/packages/sdk/src/__tests__/idle-nudge.test.ts +438 -0
  357. package/packages/sdk/src/__tests__/integration.test.ts +204 -0
  358. package/packages/sdk/src/__tests__/orchestration-upgrades.test.ts +797 -0
  359. package/packages/sdk/src/__tests__/pty.test.ts +24 -0
  360. package/packages/sdk/src/__tests__/quickstart.test.ts +198 -0
  361. package/packages/sdk/src/__tests__/spawn-from-env.test.ts +282 -0
  362. package/packages/sdk/src/__tests__/swarm-coordinator.test.ts +909 -0
  363. package/packages/sdk/src/__tests__/unit.test.ts +435 -0
  364. package/packages/sdk/src/__tests__/workflow-runner.test.ts +489 -0
  365. package/packages/sdk/src/__tests__/yaml-validation.test.ts +890 -0
  366. package/packages/sdk/src/client.ts +527 -1911
  367. package/packages/sdk/src/examples/workflow-superiority.ts +1485 -0
  368. package/packages/sdk/src/examples/workflows/README.md +156 -0
  369. package/packages/sdk/src/examples/workflows/ralph-overnight.yaml +421 -0
  370. package/packages/sdk/src/examples/workflows/ralph-swarm.yaml +411 -0
  371. package/packages/sdk/src/examples/workflows/ralph-tdd.yaml +259 -0
  372. package/packages/sdk/src/index.ts +13 -116
  373. package/packages/sdk/src/logs.ts +282 -54
  374. package/packages/sdk/src/models.ts +36 -0
  375. package/packages/sdk/src/protocol.ts +385 -0
  376. package/packages/sdk/src/pty.ts +35 -0
  377. package/packages/sdk/src/relay-adapter.ts +316 -0
  378. package/packages/sdk/src/relay.ts +1147 -0
  379. package/packages/sdk/src/shadow.ts +228 -0
  380. package/packages/sdk/src/spawn-from-env.ts +245 -0
  381. package/packages/sdk/src/workflows/README.md +656 -0
  382. package/packages/sdk/src/workflows/builder.ts +278 -0
  383. package/packages/sdk/src/workflows/builtin-templates/bug-fix.yaml +135 -0
  384. package/packages/sdk/src/workflows/builtin-templates/code-review.yaml +133 -0
  385. package/packages/sdk/src/workflows/builtin-templates/competitive.yaml +103 -0
  386. package/packages/sdk/src/workflows/builtin-templates/documentation.yaml +120 -0
  387. package/packages/sdk/src/workflows/builtin-templates/feature-dev.yaml +142 -0
  388. package/packages/sdk/src/workflows/builtin-templates/refactor.yaml +141 -0
  389. package/packages/sdk/src/workflows/builtin-templates/review-loop.yaml +223 -0
  390. package/packages/sdk/src/workflows/builtin-templates/security-audit.yaml +129 -0
  391. package/packages/sdk/src/workflows/cli.ts +162 -0
  392. package/packages/sdk/src/workflows/coordinator.ts +842 -0
  393. package/packages/sdk/src/workflows/custom-steps.ts +450 -0
  394. package/packages/sdk/src/workflows/dry-run-format.ts +75 -0
  395. package/packages/sdk/src/workflows/file-db.ts +117 -0
  396. package/packages/sdk/src/workflows/index.ts +24 -0
  397. package/packages/sdk/src/workflows/run.ts +72 -0
  398. package/packages/sdk/src/workflows/runner.ts +3409 -0
  399. package/packages/sdk/src/workflows/schema.json +651 -0
  400. package/packages/sdk/src/workflows/templates.ts +552 -0
  401. package/packages/sdk/src/workflows/trajectory.ts +631 -0
  402. package/packages/sdk/src/workflows/types.ts +389 -0
  403. package/packages/sdk/src/workflows/validator.ts +151 -0
  404. package/packages/sdk/tsconfig.build.json +25 -0
  405. package/packages/sdk/tsconfig.json +17 -18
  406. package/packages/sdk/vitest.config.ts +1 -1
  407. package/packages/sdk-py/README.md +106 -21
  408. package/packages/sdk-py/agent_relay/__init__.py +21 -0
  409. package/packages/sdk-py/agent_relay/models.py +206 -0
  410. package/packages/sdk-py/pyproject.toml +2 -2
  411. package/packages/sdk-py/src/agent_relay/__init__.py +76 -0
  412. package/packages/sdk-py/src/agent_relay/builder.py +430 -109
  413. package/packages/sdk-py/src/agent_relay/templates.py +197 -0
  414. package/packages/sdk-py/src/agent_relay/types.py +489 -15
  415. package/packages/sdk-py/tests/test_builder.py +115 -1
  416. package/packages/sdk-py/tests/test_workflow_templates.py +450 -0
  417. package/packages/shared/cli-registry.yaml +193 -0
  418. package/packages/shared/codegen-py.mjs +215 -0
  419. package/packages/shared/codegen-ts.mjs +227 -0
  420. package/packages/telemetry/dist/events.d.ts +8 -8
  421. package/packages/telemetry/dist/index.d.ts +1 -1
  422. package/packages/telemetry/package.json +2 -2
  423. package/packages/telemetry/src/events.ts +9 -9
  424. package/packages/telemetry/src/index.ts +2 -2
  425. package/packages/trajectory/package.json +2 -2
  426. package/packages/user-directory/dist/user-directory.js +1 -1
  427. package/packages/user-directory/dist/user-directory.js.map +1 -1
  428. package/packages/user-directory/package.json +2 -2
  429. package/packages/user-directory/src/user-directory.ts +1 -1
  430. package/packages/utils/dist/cjs/client-helpers.js +4 -4
  431. package/packages/utils/dist/cjs/discovery.js +9 -6
  432. package/packages/utils/dist/cjs/errors.js +5 -5
  433. package/packages/utils/dist/cjs/legacy-protocol.js +70 -0
  434. package/packages/utils/dist/cjs/logger.js +3 -3
  435. package/packages/utils/dist/cjs/precompiled-patterns.js +33 -2
  436. package/packages/utils/dist/cjs/relay-pty-path.js +0 -6
  437. package/packages/utils/dist/client-helpers.d.ts +1 -1
  438. package/packages/utils/dist/client-helpers.d.ts.map +1 -1
  439. package/packages/utils/dist/client-helpers.js +1 -1
  440. package/packages/utils/dist/client-helpers.js.map +1 -1
  441. package/packages/utils/dist/discovery.d.ts +7 -7
  442. package/packages/utils/dist/discovery.d.ts.map +1 -1
  443. package/packages/utils/dist/discovery.js +20 -17
  444. package/packages/utils/dist/discovery.js.map +1 -1
  445. package/packages/utils/dist/errors.d.ts +1 -1
  446. package/packages/utils/dist/errors.js +3 -3
  447. package/packages/utils/dist/legacy-protocol.d.ts +46 -0
  448. package/packages/utils/dist/legacy-protocol.d.ts.map +1 -0
  449. package/packages/utils/dist/legacy-protocol.js +47 -0
  450. package/packages/utils/dist/legacy-protocol.js.map +1 -0
  451. package/packages/utils/dist/logger.d.ts +2 -2
  452. package/packages/utils/dist/logger.js +2 -2
  453. package/packages/utils/dist/precompiled-patterns.d.ts.map +1 -1
  454. package/packages/utils/dist/precompiled-patterns.js +28 -2
  455. package/packages/utils/dist/precompiled-patterns.js.map +1 -1
  456. package/packages/utils/dist/relay-pty-path.d.ts.map +1 -1
  457. package/packages/utils/dist/relay-pty-path.js +1 -10
  458. package/packages/utils/dist/relay-pty-path.js.map +1 -1
  459. package/packages/utils/package.json +2 -3
  460. package/packages/utils/src/client-helpers.ts +1 -1
  461. package/packages/utils/src/consolidation.test.ts +3 -3
  462. package/packages/utils/src/discovery.test.ts +3 -3
  463. package/packages/utils/src/discovery.ts +21 -18
  464. package/packages/utils/src/errors.test.ts +6 -11
  465. package/packages/utils/src/errors.ts +3 -3
  466. package/packages/utils/src/legacy-protocol.ts +151 -0
  467. package/packages/utils/src/logger.ts +2 -2
  468. package/packages/utils/src/precompiled-patterns.test.ts +8 -0
  469. package/packages/utils/src/precompiled-patterns.ts +40 -2
  470. package/packages/utils/src/relay-pty-path.test.ts +23 -34
  471. package/packages/utils/src/relay-pty-path.ts +1 -11
  472. package/relay-snippets/agent-relay-protocol.md +6 -43
  473. package/relay-snippets/agent-relay-snippet.md +59 -203
  474. package/scripts/postinstall.js +44 -171
  475. package/bin/relay-pty-darwin-arm64 +0 -0
  476. package/bin/relay-pty-darwin-x64 +0 -0
  477. package/bin/relay-pty-linux-arm64 +0 -0
  478. package/bin/relay-pty-linux-x64 +0 -0
  479. package/dist/src/bridge/index.d.ts +0 -8
  480. package/dist/src/bridge/index.d.ts.map +0 -1
  481. package/dist/src/bridge/index.js +0 -8
  482. package/dist/src/bridge/index.js.map +0 -1
  483. package/dist/src/continuity/index.d.ts +0 -5
  484. package/dist/src/continuity/index.d.ts.map +0 -1
  485. package/dist/src/continuity/index.js +0 -5
  486. package/dist/src/continuity/index.js.map +0 -1
  487. package/dist/src/daemon/index.d.ts +0 -8
  488. package/dist/src/daemon/index.d.ts.map +0 -1
  489. package/dist/src/daemon/index.js +0 -9
  490. package/dist/src/daemon/index.js.map +0 -1
  491. package/dist/src/protocol/index.d.ts +0 -8
  492. package/dist/src/protocol/index.d.ts.map +0 -1
  493. package/dist/src/protocol/index.js +0 -8
  494. package/dist/src/protocol/index.js.map +0 -1
  495. package/dist/src/resiliency/index.d.ts +0 -5
  496. package/dist/src/resiliency/index.d.ts.map +0 -1
  497. package/dist/src/resiliency/index.js +0 -5
  498. package/dist/src/resiliency/index.js.map +0 -1
  499. package/dist/src/state/index.d.ts +0 -5
  500. package/dist/src/state/index.d.ts.map +0 -1
  501. package/dist/src/state/index.js +0 -5
  502. package/dist/src/state/index.js.map +0 -1
  503. package/dist/src/storage/index.d.ts +0 -8
  504. package/dist/src/storage/index.d.ts.map +0 -1
  505. package/dist/src/storage/index.js +0 -8
  506. package/dist/src/storage/index.js.map +0 -1
  507. package/dist/src/wrapper/index.d.ts +0 -8
  508. package/dist/src/wrapper/index.d.ts.map +0 -1
  509. package/dist/src/wrapper/index.js +0 -11
  510. package/dist/src/wrapper/index.js.map +0 -1
  511. package/packages/bridge/dist/cli-resolution.d.ts +0 -32
  512. package/packages/bridge/dist/cli-resolution.d.ts.map +0 -1
  513. package/packages/bridge/dist/cli-resolution.js +0 -88
  514. package/packages/bridge/dist/cli-resolution.js.map +0 -1
  515. package/packages/bridge/dist/index.d.ts +0 -9
  516. package/packages/bridge/dist/index.d.ts.map +0 -1
  517. package/packages/bridge/dist/index.js +0 -11
  518. package/packages/bridge/dist/index.js.map +0 -1
  519. package/packages/bridge/dist/multi-project-client.d.ts +0 -99
  520. package/packages/bridge/dist/multi-project-client.d.ts.map +0 -1
  521. package/packages/bridge/dist/multi-project-client.js +0 -389
  522. package/packages/bridge/dist/multi-project-client.js.map +0 -1
  523. package/packages/bridge/dist/shadow-cli.d.ts +0 -17
  524. package/packages/bridge/dist/shadow-cli.d.ts.map +0 -1
  525. package/packages/bridge/dist/shadow-cli.js +0 -75
  526. package/packages/bridge/dist/shadow-cli.js.map +0 -1
  527. package/packages/bridge/dist/spawner.d.ts +0 -263
  528. package/packages/bridge/dist/spawner.d.ts.map +0 -1
  529. package/packages/bridge/dist/spawner.js +0 -1758
  530. package/packages/bridge/dist/spawner.js.map +0 -1
  531. package/packages/bridge/dist/types.d.ts +0 -141
  532. package/packages/bridge/dist/types.d.ts.map +0 -1
  533. package/packages/bridge/dist/types.js +0 -6
  534. package/packages/bridge/dist/types.js.map +0 -1
  535. package/packages/bridge/dist/utils.d.ts +0 -39
  536. package/packages/bridge/dist/utils.d.ts.map +0 -1
  537. package/packages/bridge/dist/utils.js +0 -98
  538. package/packages/bridge/dist/utils.js.map +0 -1
  539. package/packages/bridge/package.json +0 -45
  540. package/packages/bridge/src/cli-resolution.test.ts +0 -225
  541. package/packages/bridge/src/cli-resolution.ts +0 -100
  542. package/packages/bridge/src/index.ts +0 -34
  543. package/packages/bridge/src/multi-project-client.test.ts +0 -340
  544. package/packages/bridge/src/multi-project-client.ts +0 -469
  545. package/packages/bridge/src/shadow-cli.ts +0 -95
  546. package/packages/bridge/src/spawner-mcp.test.ts +0 -505
  547. package/packages/bridge/src/spawner.ts +0 -2067
  548. package/packages/bridge/src/types.ts +0 -153
  549. package/packages/bridge/src/utils.test.ts +0 -235
  550. package/packages/bridge/src/utils.ts +0 -113
  551. package/packages/bridge/tsconfig.json +0 -29
  552. package/packages/bridge/vitest.config.ts +0 -9
  553. package/packages/broker-sdk/README.md +0 -97
  554. package/packages/broker-sdk/dist/__tests__/facade.test.js +0 -257
  555. package/packages/broker-sdk/dist/__tests__/facade.test.js.map +0 -1
  556. package/packages/broker-sdk/dist/__tests__/integration.test.js +0 -139
  557. package/packages/broker-sdk/dist/__tests__/integration.test.js.map +0 -1
  558. package/packages/broker-sdk/dist/__tests__/quickstart.test.js +0 -176
  559. package/packages/broker-sdk/dist/__tests__/quickstart.test.js.map +0 -1
  560. package/packages/broker-sdk/dist/__tests__/unit.test.js +0 -192
  561. package/packages/broker-sdk/dist/__tests__/unit.test.js.map +0 -1
  562. package/packages/broker-sdk/dist/client.d.ts +0 -95
  563. package/packages/broker-sdk/dist/client.d.ts.map +0 -1
  564. package/packages/broker-sdk/dist/client.js +0 -372
  565. package/packages/broker-sdk/dist/client.js.map +0 -1
  566. package/packages/broker-sdk/dist/index.d.ts +0 -10
  567. package/packages/broker-sdk/dist/index.d.ts.map +0 -1
  568. package/packages/broker-sdk/dist/index.js +0 -10
  569. package/packages/broker-sdk/dist/index.js.map +0 -1
  570. package/packages/broker-sdk/dist/logs.d.ts +0 -47
  571. package/packages/broker-sdk/dist/logs.d.ts.map +0 -1
  572. package/packages/broker-sdk/dist/logs.js +0 -137
  573. package/packages/broker-sdk/dist/logs.js.map +0 -1
  574. package/packages/broker-sdk/dist/protocol.d.ts +0 -258
  575. package/packages/broker-sdk/dist/protocol.d.ts.map +0 -1
  576. package/packages/broker-sdk/dist/pty.d.ts.map +0 -1
  577. package/packages/broker-sdk/dist/pty.js +0 -14
  578. package/packages/broker-sdk/dist/pty.js.map +0 -1
  579. package/packages/broker-sdk/dist/relay.d.ts +0 -178
  580. package/packages/broker-sdk/dist/relay.d.ts.map +0 -1
  581. package/packages/broker-sdk/dist/relay.js +0 -494
  582. package/packages/broker-sdk/dist/relay.js.map +0 -1
  583. package/packages/broker-sdk/dist/relaycast.d.ts +0 -73
  584. package/packages/broker-sdk/dist/relaycast.d.ts.map +0 -1
  585. package/packages/broker-sdk/dist/relaycast.js +0 -184
  586. package/packages/broker-sdk/dist/relaycast.js.map +0 -1
  587. package/packages/broker-sdk/dist/shadow.d.ts +0 -100
  588. package/packages/broker-sdk/dist/shadow.d.ts.map +0 -1
  589. package/packages/broker-sdk/dist/shadow.js.map +0 -1
  590. package/packages/broker-sdk/dist/workflows/builder.d.ts +0 -101
  591. package/packages/broker-sdk/dist/workflows/builder.d.ts.map +0 -1
  592. package/packages/broker-sdk/dist/workflows/builder.js +0 -179
  593. package/packages/broker-sdk/dist/workflows/builder.js.map +0 -1
  594. package/packages/broker-sdk/dist/workflows/cli.d.ts +0 -10
  595. package/packages/broker-sdk/dist/workflows/cli.d.ts.map +0 -1
  596. package/packages/broker-sdk/dist/workflows/cli.js +0 -82
  597. package/packages/broker-sdk/dist/workflows/cli.js.map +0 -1
  598. package/packages/broker-sdk/dist/workflows/coordinator.d.ts +0 -69
  599. package/packages/broker-sdk/dist/workflows/coordinator.d.ts.map +0 -1
  600. package/packages/broker-sdk/dist/workflows/coordinator.js +0 -585
  601. package/packages/broker-sdk/dist/workflows/coordinator.js.map +0 -1
  602. package/packages/broker-sdk/dist/workflows/index.d.ts +0 -11
  603. package/packages/broker-sdk/dist/workflows/index.d.ts.map +0 -1
  604. package/packages/broker-sdk/dist/workflows/index.js +0 -11
  605. package/packages/broker-sdk/dist/workflows/index.js.map +0 -1
  606. package/packages/broker-sdk/dist/workflows/run.d.ts +0 -33
  607. package/packages/broker-sdk/dist/workflows/run.d.ts.map +0 -1
  608. package/packages/broker-sdk/dist/workflows/run.js +0 -28
  609. package/packages/broker-sdk/dist/workflows/run.js.map +0 -1
  610. package/packages/broker-sdk/dist/workflows/runner.d.ts +0 -140
  611. package/packages/broker-sdk/dist/workflows/runner.d.ts.map +0 -1
  612. package/packages/broker-sdk/dist/workflows/runner.js +0 -962
  613. package/packages/broker-sdk/dist/workflows/runner.js.map +0 -1
  614. package/packages/broker-sdk/dist/workflows/templates.d.ts +0 -47
  615. package/packages/broker-sdk/dist/workflows/templates.d.ts.map +0 -1
  616. package/packages/broker-sdk/dist/workflows/templates.js +0 -395
  617. package/packages/broker-sdk/dist/workflows/templates.js.map +0 -1
  618. package/packages/broker-sdk/dist/workflows/trajectory.d.ts +0 -80
  619. package/packages/broker-sdk/dist/workflows/trajectory.d.ts.map +0 -1
  620. package/packages/broker-sdk/dist/workflows/trajectory.js +0 -362
  621. package/packages/broker-sdk/dist/workflows/trajectory.js.map +0 -1
  622. package/packages/broker-sdk/dist/workflows/types.d.ts +0 -140
  623. package/packages/broker-sdk/dist/workflows/types.d.ts.map +0 -1
  624. package/packages/broker-sdk/dist/workflows/types.js +0 -8
  625. package/packages/broker-sdk/dist/workflows/types.js.map +0 -1
  626. package/packages/broker-sdk/package.json +0 -81
  627. package/packages/broker-sdk/scripts/bundle-agent-relay.mjs +0 -53
  628. package/packages/broker-sdk/src/__tests__/error-scenarios.test.ts +0 -682
  629. package/packages/broker-sdk/src/__tests__/facade.test.ts +0 -296
  630. package/packages/broker-sdk/src/__tests__/integration.test.ts +0 -170
  631. package/packages/broker-sdk/src/__tests__/quickstart.test.ts +0 -198
  632. package/packages/broker-sdk/src/__tests__/swarm-coordinator.test.ts +0 -772
  633. package/packages/broker-sdk/src/__tests__/unit.test.ts +0 -243
  634. package/packages/broker-sdk/src/__tests__/workflow-runner.test.ts +0 -333
  635. package/packages/broker-sdk/src/client.ts +0 -510
  636. package/packages/broker-sdk/src/index.ts +0 -9
  637. package/packages/broker-sdk/src/logs.ts +0 -163
  638. package/packages/broker-sdk/src/protocol.ts +0 -276
  639. package/packages/broker-sdk/src/pty.ts +0 -16
  640. package/packages/broker-sdk/src/relay.ts +0 -625
  641. package/packages/broker-sdk/src/relaycast.ts +0 -221
  642. package/packages/broker-sdk/src/shadow.ts +0 -230
  643. package/packages/broker-sdk/src/workflows/README.md +0 -544
  644. package/packages/broker-sdk/src/workflows/builder.ts +0 -241
  645. package/packages/broker-sdk/src/workflows/builtin-templates/bug-fix.yaml +0 -75
  646. package/packages/broker-sdk/src/workflows/builtin-templates/code-review.yaml +0 -82
  647. package/packages/broker-sdk/src/workflows/builtin-templates/documentation.yaml +0 -70
  648. package/packages/broker-sdk/src/workflows/builtin-templates/feature-dev.yaml +0 -76
  649. package/packages/broker-sdk/src/workflows/builtin-templates/refactor.yaml +0 -82
  650. package/packages/broker-sdk/src/workflows/builtin-templates/security-audit.yaml +0 -84
  651. package/packages/broker-sdk/src/workflows/cli.ts +0 -93
  652. package/packages/broker-sdk/src/workflows/coordinator.ts +0 -758
  653. package/packages/broker-sdk/src/workflows/index.ts +0 -10
  654. package/packages/broker-sdk/src/workflows/run.ts +0 -55
  655. package/packages/broker-sdk/src/workflows/runner.ts +0 -1271
  656. package/packages/broker-sdk/src/workflows/schema.json +0 -333
  657. package/packages/broker-sdk/src/workflows/templates.ts +0 -544
  658. package/packages/broker-sdk/src/workflows/trajectory.ts +0 -507
  659. package/packages/broker-sdk/src/workflows/types.ts +0 -208
  660. package/packages/broker-sdk/tsconfig.json +0 -22
  661. package/packages/broker-sdk/vitest.config.ts +0 -9
  662. package/packages/continuity/dist/formatter.d.ts +0 -57
  663. package/packages/continuity/dist/formatter.d.ts.map +0 -1
  664. package/packages/continuity/dist/formatter.js +0 -448
  665. package/packages/continuity/dist/formatter.js.map +0 -1
  666. package/packages/continuity/dist/handoff-store.d.ts +0 -67
  667. package/packages/continuity/dist/handoff-store.d.ts.map +0 -1
  668. package/packages/continuity/dist/handoff-store.js +0 -472
  669. package/packages/continuity/dist/handoff-store.js.map +0 -1
  670. package/packages/continuity/dist/index.d.ts +0 -10
  671. package/packages/continuity/dist/index.d.ts.map +0 -1
  672. package/packages/continuity/dist/index.js +0 -11
  673. package/packages/continuity/dist/index.js.map +0 -1
  674. package/packages/continuity/dist/ledger-store.d.ts +0 -110
  675. package/packages/continuity/dist/ledger-store.d.ts.map +0 -1
  676. package/packages/continuity/dist/ledger-store.js +0 -500
  677. package/packages/continuity/dist/ledger-store.js.map +0 -1
  678. package/packages/continuity/dist/manager.d.ts +0 -183
  679. package/packages/continuity/dist/manager.d.ts.map +0 -1
  680. package/packages/continuity/dist/manager.js +0 -616
  681. package/packages/continuity/dist/manager.js.map +0 -1
  682. package/packages/continuity/dist/parser.d.ts +0 -76
  683. package/packages/continuity/dist/parser.d.ts.map +0 -1
  684. package/packages/continuity/dist/parser.js +0 -579
  685. package/packages/continuity/dist/parser.js.map +0 -1
  686. package/packages/continuity/dist/types.d.ts +0 -180
  687. package/packages/continuity/dist/types.d.ts.map +0 -1
  688. package/packages/continuity/dist/types.js +0 -2
  689. package/packages/continuity/dist/types.js.map +0 -1
  690. package/packages/continuity/package.json +0 -40
  691. package/packages/continuity/src/formatter.ts +0 -536
  692. package/packages/continuity/src/handoff-store.ts +0 -523
  693. package/packages/continuity/src/index.ts +0 -12
  694. package/packages/continuity/src/ledger-store.ts +0 -594
  695. package/packages/continuity/src/manager.test.ts +0 -291
  696. package/packages/continuity/src/manager.ts +0 -774
  697. package/packages/continuity/src/parser.test.ts +0 -292
  698. package/packages/continuity/src/parser.ts +0 -680
  699. package/packages/continuity/src/types.ts +0 -211
  700. package/packages/continuity/tsconfig.json +0 -21
  701. package/packages/continuity/vitest.config.ts +0 -9
  702. package/packages/daemon/dist/agent-manager.d.ts +0 -134
  703. package/packages/daemon/dist/agent-manager.d.ts.map +0 -1
  704. package/packages/daemon/dist/agent-manager.js +0 -578
  705. package/packages/daemon/dist/agent-manager.js.map +0 -1
  706. package/packages/daemon/dist/agent-registry.d.ts +0 -99
  707. package/packages/daemon/dist/agent-registry.d.ts.map +0 -1
  708. package/packages/daemon/dist/agent-registry.js +0 -213
  709. package/packages/daemon/dist/agent-registry.js.map +0 -1
  710. package/packages/daemon/dist/agent-signing.d.ts +0 -158
  711. package/packages/daemon/dist/agent-signing.d.ts.map +0 -1
  712. package/packages/daemon/dist/agent-signing.js +0 -523
  713. package/packages/daemon/dist/agent-signing.js.map +0 -1
  714. package/packages/daemon/dist/api.d.ts +0 -106
  715. package/packages/daemon/dist/api.d.ts.map +0 -1
  716. package/packages/daemon/dist/api.js +0 -895
  717. package/packages/daemon/dist/api.js.map +0 -1
  718. package/packages/daemon/dist/auth.d.ts +0 -94
  719. package/packages/daemon/dist/auth.d.ts.map +0 -1
  720. package/packages/daemon/dist/auth.js +0 -197
  721. package/packages/daemon/dist/auth.js.map +0 -1
  722. package/packages/daemon/dist/channel-membership-store.d.ts +0 -55
  723. package/packages/daemon/dist/channel-membership-store.d.ts.map +0 -1
  724. package/packages/daemon/dist/channel-membership-store.js +0 -176
  725. package/packages/daemon/dist/channel-membership-store.js.map +0 -1
  726. package/packages/daemon/dist/cli-auth.d.ts +0 -97
  727. package/packages/daemon/dist/cli-auth.d.ts.map +0 -1
  728. package/packages/daemon/dist/cli-auth.js +0 -808
  729. package/packages/daemon/dist/cli-auth.js.map +0 -1
  730. package/packages/daemon/dist/cloud-sync.d.ts +0 -263
  731. package/packages/daemon/dist/cloud-sync.d.ts.map +0 -1
  732. package/packages/daemon/dist/cloud-sync.js +0 -820
  733. package/packages/daemon/dist/cloud-sync.js.map +0 -1
  734. package/packages/daemon/dist/connection.d.ts +0 -137
  735. package/packages/daemon/dist/connection.d.ts.map +0 -1
  736. package/packages/daemon/dist/connection.js +0 -465
  737. package/packages/daemon/dist/connection.js.map +0 -1
  738. package/packages/daemon/dist/consensus-integration.d.ts +0 -168
  739. package/packages/daemon/dist/consensus-integration.d.ts.map +0 -1
  740. package/packages/daemon/dist/consensus-integration.js +0 -371
  741. package/packages/daemon/dist/consensus-integration.js.map +0 -1
  742. package/packages/daemon/dist/consensus.d.ts +0 -269
  743. package/packages/daemon/dist/consensus.d.ts.map +0 -1
  744. package/packages/daemon/dist/consensus.js +0 -632
  745. package/packages/daemon/dist/consensus.js.map +0 -1
  746. package/packages/daemon/dist/delivery-tracker.d.ts +0 -34
  747. package/packages/daemon/dist/delivery-tracker.d.ts.map +0 -1
  748. package/packages/daemon/dist/delivery-tracker.js +0 -104
  749. package/packages/daemon/dist/delivery-tracker.js.map +0 -1
  750. package/packages/daemon/dist/enhanced-features.d.ts +0 -118
  751. package/packages/daemon/dist/enhanced-features.d.ts.map +0 -1
  752. package/packages/daemon/dist/enhanced-features.js +0 -177
  753. package/packages/daemon/dist/enhanced-features.js.map +0 -1
  754. package/packages/daemon/dist/index.d.ts +0 -29
  755. package/packages/daemon/dist/index.d.ts.map +0 -1
  756. package/packages/daemon/dist/index.js +0 -34
  757. package/packages/daemon/dist/index.js.map +0 -1
  758. package/packages/daemon/dist/orchestrator.d.ts +0 -217
  759. package/packages/daemon/dist/orchestrator.d.ts.map +0 -1
  760. package/packages/daemon/dist/orchestrator.js +0 -1172
  761. package/packages/daemon/dist/orchestrator.js.map +0 -1
  762. package/packages/daemon/dist/rate-limiter.d.ts +0 -68
  763. package/packages/daemon/dist/rate-limiter.d.ts.map +0 -1
  764. package/packages/daemon/dist/rate-limiter.js +0 -130
  765. package/packages/daemon/dist/rate-limiter.js.map +0 -1
  766. package/packages/daemon/dist/registry.d.ts +0 -9
  767. package/packages/daemon/dist/registry.d.ts.map +0 -1
  768. package/packages/daemon/dist/registry.js +0 -9
  769. package/packages/daemon/dist/registry.js.map +0 -1
  770. package/packages/daemon/dist/repo-manager.d.ts +0 -116
  771. package/packages/daemon/dist/repo-manager.d.ts.map +0 -1
  772. package/packages/daemon/dist/repo-manager.js +0 -384
  773. package/packages/daemon/dist/repo-manager.js.map +0 -1
  774. package/packages/daemon/dist/router.d.ts +0 -389
  775. package/packages/daemon/dist/router.d.ts.map +0 -1
  776. package/packages/daemon/dist/router.js +0 -1607
  777. package/packages/daemon/dist/router.js.map +0 -1
  778. package/packages/daemon/dist/server.d.ts +0 -201
  779. package/packages/daemon/dist/server.d.ts.map +0 -1
  780. package/packages/daemon/dist/server.js +0 -1791
  781. package/packages/daemon/dist/server.js.map +0 -1
  782. package/packages/daemon/dist/spawn-manager.d.ts +0 -119
  783. package/packages/daemon/dist/spawn-manager.d.ts.map +0 -1
  784. package/packages/daemon/dist/spawn-manager.js +0 -319
  785. package/packages/daemon/dist/spawn-manager.js.map +0 -1
  786. package/packages/daemon/dist/sync-queue.d.ts +0 -116
  787. package/packages/daemon/dist/sync-queue.d.ts.map +0 -1
  788. package/packages/daemon/dist/sync-queue.js +0 -361
  789. package/packages/daemon/dist/sync-queue.js.map +0 -1
  790. package/packages/daemon/dist/types.d.ts +0 -133
  791. package/packages/daemon/dist/types.d.ts.map +0 -1
  792. package/packages/daemon/dist/types.js +0 -6
  793. package/packages/daemon/dist/types.js.map +0 -1
  794. package/packages/daemon/dist/workspace-manager.d.ts +0 -80
  795. package/packages/daemon/dist/workspace-manager.d.ts.map +0 -1
  796. package/packages/daemon/dist/workspace-manager.js +0 -314
  797. package/packages/daemon/dist/workspace-manager.js.map +0 -1
  798. package/packages/daemon/package.json +0 -56
  799. package/packages/daemon/src/agent-manager.ts +0 -679
  800. package/packages/daemon/src/agent-registry.ts +0 -284
  801. package/packages/daemon/src/agent-signing.ts +0 -707
  802. package/packages/daemon/src/api.ts +0 -1034
  803. package/packages/daemon/src/auth.ts +0 -276
  804. package/packages/daemon/src/channel-membership-store.ts +0 -217
  805. package/packages/daemon/src/cli-auth.ts +0 -945
  806. package/packages/daemon/src/cloud-sync.ts +0 -1100
  807. package/packages/daemon/src/connection.ts +0 -561
  808. package/packages/daemon/src/consensus-integration.ts +0 -510
  809. package/packages/daemon/src/consensus.ts +0 -848
  810. package/packages/daemon/src/delivery-tracker.ts +0 -145
  811. package/packages/daemon/src/enhanced-features.ts +0 -390
  812. package/packages/daemon/src/index.ts +0 -48
  813. package/packages/daemon/src/orchestrator.test.ts +0 -231
  814. package/packages/daemon/src/orchestrator.ts +0 -1376
  815. package/packages/daemon/src/rate-limiter.ts +0 -172
  816. package/packages/daemon/src/registry.ts +0 -8
  817. package/packages/daemon/src/repo-manager.ts +0 -468
  818. package/packages/daemon/src/router.test.ts +0 -181
  819. package/packages/daemon/src/router.ts +0 -1925
  820. package/packages/daemon/src/server.ts +0 -2051
  821. package/packages/daemon/src/spawn-manager-set-model.test.ts +0 -144
  822. package/packages/daemon/src/spawn-manager.ts +0 -415
  823. package/packages/daemon/src/sync-queue.ts +0 -477
  824. package/packages/daemon/src/types.ts +0 -158
  825. package/packages/daemon/src/workspace-manager.ts +0 -371
  826. package/packages/daemon/tsconfig.json +0 -21
  827. package/packages/daemon/vitest.config.ts +0 -9
  828. package/packages/mcp/CHANGELOG.md +0 -28
  829. package/packages/mcp/LICENSE +0 -190
  830. package/packages/mcp/README.md +0 -266
  831. package/packages/mcp/dist/bin.d.ts +0 -12
  832. package/packages/mcp/dist/bin.d.ts.map +0 -1
  833. package/packages/mcp/dist/bin.js +0 -179
  834. package/packages/mcp/dist/bin.js.map +0 -1
  835. package/packages/mcp/dist/client-adapter.d.ts +0 -164
  836. package/packages/mcp/dist/client-adapter.d.ts.map +0 -1
  837. package/packages/mcp/dist/client-adapter.js +0 -231
  838. package/packages/mcp/dist/client-adapter.js.map +0 -1
  839. package/packages/mcp/dist/cloud.d.ts +0 -13
  840. package/packages/mcp/dist/cloud.d.ts.map +0 -1
  841. package/packages/mcp/dist/cloud.js +0 -25
  842. package/packages/mcp/dist/cloud.js.map +0 -1
  843. package/packages/mcp/dist/errors.d.ts +0 -9
  844. package/packages/mcp/dist/errors.d.ts.map +0 -1
  845. package/packages/mcp/dist/errors.js +0 -9
  846. package/packages/mcp/dist/errors.js.map +0 -1
  847. package/packages/mcp/dist/file-transport.d.ts +0 -103
  848. package/packages/mcp/dist/file-transport.d.ts.map +0 -1
  849. package/packages/mcp/dist/file-transport.js +0 -204
  850. package/packages/mcp/dist/file-transport.js.map +0 -1
  851. package/packages/mcp/dist/hybrid-client.d.ts +0 -5
  852. package/packages/mcp/dist/hybrid-client.d.ts.map +0 -1
  853. package/packages/mcp/dist/hybrid-client.js +0 -23
  854. package/packages/mcp/dist/hybrid-client.js.map +0 -1
  855. package/packages/mcp/dist/index.d.ts +0 -11
  856. package/packages/mcp/dist/index.d.ts.map +0 -1
  857. package/packages/mcp/dist/index.js +0 -25
  858. package/packages/mcp/dist/index.js.map +0 -1
  859. package/packages/mcp/dist/install-cli.d.ts +0 -35
  860. package/packages/mcp/dist/install-cli.d.ts.map +0 -1
  861. package/packages/mcp/dist/install-cli.js +0 -157
  862. package/packages/mcp/dist/install-cli.js.map +0 -1
  863. package/packages/mcp/dist/install.d.ts +0 -123
  864. package/packages/mcp/dist/install.d.ts.map +0 -1
  865. package/packages/mcp/dist/install.js +0 -661
  866. package/packages/mcp/dist/install.js.map +0 -1
  867. package/packages/mcp/dist/prompts/index.d.ts +0 -2
  868. package/packages/mcp/dist/prompts/index.d.ts.map +0 -1
  869. package/packages/mcp/dist/prompts/index.js +0 -2
  870. package/packages/mcp/dist/prompts/index.js.map +0 -1
  871. package/packages/mcp/dist/prompts/protocol.d.ts +0 -11
  872. package/packages/mcp/dist/prompts/protocol.d.ts.map +0 -1
  873. package/packages/mcp/dist/prompts/protocol.js +0 -160
  874. package/packages/mcp/dist/prompts/protocol.js.map +0 -1
  875. package/packages/mcp/dist/resources/agents.d.ts +0 -11
  876. package/packages/mcp/dist/resources/agents.d.ts.map +0 -1
  877. package/packages/mcp/dist/resources/agents.js +0 -17
  878. package/packages/mcp/dist/resources/agents.js.map +0 -1
  879. package/packages/mcp/dist/resources/inbox.d.ts +0 -11
  880. package/packages/mcp/dist/resources/inbox.d.ts.map +0 -1
  881. package/packages/mcp/dist/resources/inbox.js +0 -17
  882. package/packages/mcp/dist/resources/inbox.js.map +0 -1
  883. package/packages/mcp/dist/resources/index.d.ts +0 -4
  884. package/packages/mcp/dist/resources/index.d.ts.map +0 -1
  885. package/packages/mcp/dist/resources/index.js +0 -4
  886. package/packages/mcp/dist/resources/index.js.map +0 -1
  887. package/packages/mcp/dist/resources/project.d.ts +0 -11
  888. package/packages/mcp/dist/resources/project.d.ts.map +0 -1
  889. package/packages/mcp/dist/resources/project.js +0 -21
  890. package/packages/mcp/dist/resources/project.js.map +0 -1
  891. package/packages/mcp/dist/server.d.ts +0 -23
  892. package/packages/mcp/dist/server.d.ts.map +0 -1
  893. package/packages/mcp/dist/server.js +0 -317
  894. package/packages/mcp/dist/server.js.map +0 -1
  895. package/packages/mcp/dist/simple.d.ts +0 -170
  896. package/packages/mcp/dist/simple.d.ts.map +0 -1
  897. package/packages/mcp/dist/simple.js +0 -120
  898. package/packages/mcp/dist/simple.js.map +0 -1
  899. package/packages/mcp/dist/tools/index.d.ts +0 -20
  900. package/packages/mcp/dist/tools/index.d.ts.map +0 -1
  901. package/packages/mcp/dist/tools/index.js +0 -20
  902. package/packages/mcp/dist/tools/index.js.map +0 -1
  903. package/packages/mcp/dist/tools/relay-broadcast.d.ts +0 -20
  904. package/packages/mcp/dist/tools/relay-broadcast.d.ts.map +0 -1
  905. package/packages/mcp/dist/tools/relay-broadcast.js +0 -25
  906. package/packages/mcp/dist/tools/relay-broadcast.js.map +0 -1
  907. package/packages/mcp/dist/tools/relay-channel.d.ts +0 -75
  908. package/packages/mcp/dist/tools/relay-channel.d.ts.map +0 -1
  909. package/packages/mcp/dist/tools/relay-channel.js +0 -124
  910. package/packages/mcp/dist/tools/relay-channel.js.map +0 -1
  911. package/packages/mcp/dist/tools/relay-connected.d.ts +0 -17
  912. package/packages/mcp/dist/tools/relay-connected.d.ts.map +0 -1
  913. package/packages/mcp/dist/tools/relay-connected.js +0 -54
  914. package/packages/mcp/dist/tools/relay-connected.js.map +0 -1
  915. package/packages/mcp/dist/tools/relay-consensus.d.ts +0 -45
  916. package/packages/mcp/dist/tools/relay-consensus.d.ts.map +0 -1
  917. package/packages/mcp/dist/tools/relay-consensus.js +0 -80
  918. package/packages/mcp/dist/tools/relay-consensus.js.map +0 -1
  919. package/packages/mcp/dist/tools/relay-continuity.d.ts +0 -35
  920. package/packages/mcp/dist/tools/relay-continuity.d.ts.map +0 -1
  921. package/packages/mcp/dist/tools/relay-continuity.js +0 -101
  922. package/packages/mcp/dist/tools/relay-continuity.js.map +0 -1
  923. package/packages/mcp/dist/tools/relay-health.d.ts +0 -20
  924. package/packages/mcp/dist/tools/relay-health.d.ts.map +0 -1
  925. package/packages/mcp/dist/tools/relay-health.js +0 -130
  926. package/packages/mcp/dist/tools/relay-health.js.map +0 -1
  927. package/packages/mcp/dist/tools/relay-inbox.d.ts +0 -26
  928. package/packages/mcp/dist/tools/relay-inbox.d.ts.map +0 -1
  929. package/packages/mcp/dist/tools/relay-inbox.js +0 -58
  930. package/packages/mcp/dist/tools/relay-inbox.js.map +0 -1
  931. package/packages/mcp/dist/tools/relay-logs.d.ts +0 -20
  932. package/packages/mcp/dist/tools/relay-logs.d.ts.map +0 -1
  933. package/packages/mcp/dist/tools/relay-logs.js +0 -90
  934. package/packages/mcp/dist/tools/relay-logs.js.map +0 -1
  935. package/packages/mcp/dist/tools/relay-messages.d.ts +0 -32
  936. package/packages/mcp/dist/tools/relay-messages.d.ts.map +0 -1
  937. package/packages/mcp/dist/tools/relay-messages.js +0 -61
  938. package/packages/mcp/dist/tools/relay-messages.js.map +0 -1
  939. package/packages/mcp/dist/tools/relay-metrics.d.ts +0 -17
  940. package/packages/mcp/dist/tools/relay-metrics.d.ts.map +0 -1
  941. package/packages/mcp/dist/tools/relay-metrics.js +0 -124
  942. package/packages/mcp/dist/tools/relay-metrics.js.map +0 -1
  943. package/packages/mcp/dist/tools/relay-release.d.ts +0 -20
  944. package/packages/mcp/dist/tools/relay-release.d.ts.map +0 -1
  945. package/packages/mcp/dist/tools/relay-release.js +0 -44
  946. package/packages/mcp/dist/tools/relay-release.js.map +0 -1
  947. package/packages/mcp/dist/tools/relay-remove-agent.d.ts +0 -20
  948. package/packages/mcp/dist/tools/relay-remove-agent.d.ts.map +0 -1
  949. package/packages/mcp/dist/tools/relay-remove-agent.js +0 -50
  950. package/packages/mcp/dist/tools/relay-remove-agent.js.map +0 -1
  951. package/packages/mcp/dist/tools/relay-send.d.ts +0 -29
  952. package/packages/mcp/dist/tools/relay-send.d.ts.map +0 -1
  953. package/packages/mcp/dist/tools/relay-send.js +0 -73
  954. package/packages/mcp/dist/tools/relay-send.js.map +0 -1
  955. package/packages/mcp/dist/tools/relay-set-model.d.ts +0 -23
  956. package/packages/mcp/dist/tools/relay-set-model.d.ts.map +0 -1
  957. package/packages/mcp/dist/tools/relay-set-model.js +0 -52
  958. package/packages/mcp/dist/tools/relay-set-model.js.map +0 -1
  959. package/packages/mcp/dist/tools/relay-shadow.d.ts +0 -30
  960. package/packages/mcp/dist/tools/relay-shadow.d.ts.map +0 -1
  961. package/packages/mcp/dist/tools/relay-shadow.js +0 -55
  962. package/packages/mcp/dist/tools/relay-shadow.js.map +0 -1
  963. package/packages/mcp/dist/tools/relay-spawn.d.ts +0 -36
  964. package/packages/mcp/dist/tools/relay-spawn.d.ts.map +0 -1
  965. package/packages/mcp/dist/tools/relay-spawn.js +0 -73
  966. package/packages/mcp/dist/tools/relay-spawn.js.map +0 -1
  967. package/packages/mcp/dist/tools/relay-status.d.ts +0 -11
  968. package/packages/mcp/dist/tools/relay-status.d.ts.map +0 -1
  969. package/packages/mcp/dist/tools/relay-status.js +0 -43
  970. package/packages/mcp/dist/tools/relay-status.js.map +0 -1
  971. package/packages/mcp/dist/tools/relay-subscribe.d.ts +0 -27
  972. package/packages/mcp/dist/tools/relay-subscribe.d.ts.map +0 -1
  973. package/packages/mcp/dist/tools/relay-subscribe.js +0 -49
  974. package/packages/mcp/dist/tools/relay-subscribe.js.map +0 -1
  975. package/packages/mcp/dist/tools/relay-who.d.ts +0 -20
  976. package/packages/mcp/dist/tools/relay-who.d.ts.map +0 -1
  977. package/packages/mcp/dist/tools/relay-who.js +0 -62
  978. package/packages/mcp/dist/tools/relay-who.js.map +0 -1
  979. package/packages/mcp/package.json +0 -82
  980. package/packages/mcp/src/bin.ts +0 -200
  981. package/packages/mcp/src/client-adapter.ts +0 -358
  982. package/packages/mcp/src/cloud.ts +0 -41
  983. package/packages/mcp/src/errors.ts +0 -17
  984. package/packages/mcp/src/file-transport.ts +0 -275
  985. package/packages/mcp/src/hybrid-client.ts +0 -25
  986. package/packages/mcp/src/index.ts +0 -143
  987. package/packages/mcp/src/install-cli.ts +0 -210
  988. package/packages/mcp/src/install.ts +0 -820
  989. package/packages/mcp/src/prompts/index.ts +0 -1
  990. package/packages/mcp/src/prompts/protocol.ts +0 -164
  991. package/packages/mcp/src/resources/agents.ts +0 -21
  992. package/packages/mcp/src/resources/inbox.ts +0 -21
  993. package/packages/mcp/src/resources/index.ts +0 -3
  994. package/packages/mcp/src/resources/project.ts +0 -29
  995. package/packages/mcp/src/server.ts +0 -475
  996. package/packages/mcp/src/simple.ts +0 -214
  997. package/packages/mcp/src/tools/index.ts +0 -155
  998. package/packages/mcp/src/tools/relay-broadcast.ts +0 -32
  999. package/packages/mcp/src/tools/relay-channel.ts +0 -151
  1000. package/packages/mcp/src/tools/relay-connected.ts +0 -67
  1001. package/packages/mcp/src/tools/relay-consensus.ts +0 -92
  1002. package/packages/mcp/src/tools/relay-continuity.ts +0 -127
  1003. package/packages/mcp/src/tools/relay-health.ts +0 -148
  1004. package/packages/mcp/src/tools/relay-inbox.ts +0 -70
  1005. package/packages/mcp/src/tools/relay-logs.ts +0 -106
  1006. package/packages/mcp/src/tools/relay-messages.ts +0 -66
  1007. package/packages/mcp/src/tools/relay-metrics.ts +0 -142
  1008. package/packages/mcp/src/tools/relay-release.ts +0 -54
  1009. package/packages/mcp/src/tools/relay-remove-agent.ts +0 -58
  1010. package/packages/mcp/src/tools/relay-send.ts +0 -84
  1011. package/packages/mcp/src/tools/relay-set-model.ts +0 -62
  1012. package/packages/mcp/src/tools/relay-shadow.ts +0 -67
  1013. package/packages/mcp/src/tools/relay-spawn.ts +0 -87
  1014. package/packages/mcp/src/tools/relay-status.ts +0 -57
  1015. package/packages/mcp/src/tools/relay-subscribe.ts +0 -61
  1016. package/packages/mcp/src/tools/relay-who.ts +0 -75
  1017. package/packages/mcp/tests/client.test.ts +0 -451
  1018. package/packages/mcp/tests/discover.test.ts +0 -256
  1019. package/packages/mcp/tests/install.test.ts +0 -123
  1020. package/packages/mcp/tests/prompts.test.ts +0 -12
  1021. package/packages/mcp/tests/resources.test.ts +0 -53
  1022. package/packages/mcp/tests/tools.test.ts +0 -1516
  1023. package/packages/mcp/tsconfig.json +0 -22
  1024. package/packages/mcp/vitest.config.ts +0 -9
  1025. package/packages/protocol/dist/channels.d.ts +0 -137
  1026. package/packages/protocol/dist/channels.d.ts.map +0 -1
  1027. package/packages/protocol/dist/channels.js +0 -154
  1028. package/packages/protocol/dist/channels.js.map +0 -1
  1029. package/packages/protocol/dist/framing.d.ts +0 -80
  1030. package/packages/protocol/dist/framing.d.ts.map +0 -1
  1031. package/packages/protocol/dist/framing.js +0 -206
  1032. package/packages/protocol/dist/framing.js.map +0 -1
  1033. package/packages/protocol/dist/id-generator.d.ts +0 -35
  1034. package/packages/protocol/dist/id-generator.d.ts.map +0 -1
  1035. package/packages/protocol/dist/id-generator.js +0 -60
  1036. package/packages/protocol/dist/id-generator.js.map +0 -1
  1037. package/packages/protocol/dist/index.d.ts +0 -5
  1038. package/packages/protocol/dist/index.d.ts.map +0 -1
  1039. package/packages/protocol/dist/index.js +0 -5
  1040. package/packages/protocol/dist/index.js.map +0 -1
  1041. package/packages/protocol/dist/relay-pty-schemas.d.ts +0 -340
  1042. package/packages/protocol/dist/relay-pty-schemas.d.ts.map +0 -1
  1043. package/packages/protocol/dist/relay-pty-schemas.js +0 -60
  1044. package/packages/protocol/dist/relay-pty-schemas.js.map +0 -1
  1045. package/packages/protocol/dist/types.d.ts +0 -793
  1046. package/packages/protocol/dist/types.d.ts.map +0 -1
  1047. package/packages/protocol/dist/types.js +0 -8
  1048. package/packages/protocol/dist/types.js.map +0 -1
  1049. package/packages/protocol/package.json +0 -61
  1050. package/packages/protocol/src/channels.test.ts +0 -330
  1051. package/packages/protocol/src/channels.ts +0 -270
  1052. package/packages/protocol/src/framing.test.ts +0 -164
  1053. package/packages/protocol/src/framing.ts +0 -242
  1054. package/packages/protocol/src/id-generator.ts +0 -69
  1055. package/packages/protocol/src/index.ts +0 -4
  1056. package/packages/protocol/src/relay-pty-schemas.ts +0 -400
  1057. package/packages/protocol/src/types.test.ts +0 -271
  1058. package/packages/protocol/src/types.ts +0 -988
  1059. package/packages/protocol/tsconfig.json +0 -21
  1060. package/packages/protocol/vitest.config.ts +0 -9
  1061. package/packages/resiliency/dist/cgroup-manager.d.ts +0 -152
  1062. package/packages/resiliency/dist/cgroup-manager.d.ts.map +0 -1
  1063. package/packages/resiliency/dist/cgroup-manager.js +0 -394
  1064. package/packages/resiliency/dist/cgroup-manager.js.map +0 -1
  1065. package/packages/resiliency/dist/context-persistence.d.ts +0 -140
  1066. package/packages/resiliency/dist/context-persistence.d.ts.map +0 -1
  1067. package/packages/resiliency/dist/context-persistence.js +0 -397
  1068. package/packages/resiliency/dist/context-persistence.js.map +0 -1
  1069. package/packages/resiliency/dist/crash-insights.d.ts +0 -156
  1070. package/packages/resiliency/dist/crash-insights.d.ts.map +0 -1
  1071. package/packages/resiliency/dist/crash-insights.js +0 -492
  1072. package/packages/resiliency/dist/crash-insights.js.map +0 -1
  1073. package/packages/resiliency/dist/gossip-health.d.ts +0 -137
  1074. package/packages/resiliency/dist/gossip-health.d.ts.map +0 -1
  1075. package/packages/resiliency/dist/gossip-health.js +0 -241
  1076. package/packages/resiliency/dist/gossip-health.js.map +0 -1
  1077. package/packages/resiliency/dist/health-monitor.d.ts +0 -97
  1078. package/packages/resiliency/dist/health-monitor.d.ts.map +0 -1
  1079. package/packages/resiliency/dist/health-monitor.js +0 -291
  1080. package/packages/resiliency/dist/health-monitor.js.map +0 -1
  1081. package/packages/resiliency/dist/index.d.ts +0 -69
  1082. package/packages/resiliency/dist/index.d.ts.map +0 -1
  1083. package/packages/resiliency/dist/index.js +0 -69
  1084. package/packages/resiliency/dist/index.js.map +0 -1
  1085. package/packages/resiliency/dist/leader-watchdog.d.ts +0 -109
  1086. package/packages/resiliency/dist/leader-watchdog.d.ts.map +0 -1
  1087. package/packages/resiliency/dist/leader-watchdog.js +0 -189
  1088. package/packages/resiliency/dist/leader-watchdog.js.map +0 -1
  1089. package/packages/resiliency/dist/logger.d.ts +0 -114
  1090. package/packages/resiliency/dist/logger.d.ts.map +0 -1
  1091. package/packages/resiliency/dist/logger.js +0 -250
  1092. package/packages/resiliency/dist/logger.js.map +0 -1
  1093. package/packages/resiliency/dist/memory-monitor.d.ts +0 -172
  1094. package/packages/resiliency/dist/memory-monitor.d.ts.map +0 -1
  1095. package/packages/resiliency/dist/memory-monitor.js +0 -599
  1096. package/packages/resiliency/dist/memory-monitor.js.map +0 -1
  1097. package/packages/resiliency/dist/metrics.d.ts +0 -115
  1098. package/packages/resiliency/dist/metrics.d.ts.map +0 -1
  1099. package/packages/resiliency/dist/metrics.js +0 -239
  1100. package/packages/resiliency/dist/metrics.js.map +0 -1
  1101. package/packages/resiliency/dist/provider-context.d.ts +0 -100
  1102. package/packages/resiliency/dist/provider-context.d.ts.map +0 -1
  1103. package/packages/resiliency/dist/provider-context.js +0 -362
  1104. package/packages/resiliency/dist/provider-context.js.map +0 -1
  1105. package/packages/resiliency/dist/stateless-lead.d.ts +0 -149
  1106. package/packages/resiliency/dist/stateless-lead.d.ts.map +0 -1
  1107. package/packages/resiliency/dist/stateless-lead.js +0 -308
  1108. package/packages/resiliency/dist/stateless-lead.js.map +0 -1
  1109. package/packages/resiliency/dist/supervisor.d.ts +0 -147
  1110. package/packages/resiliency/dist/supervisor.d.ts.map +0 -1
  1111. package/packages/resiliency/dist/supervisor.js +0 -459
  1112. package/packages/resiliency/dist/supervisor.js.map +0 -1
  1113. package/packages/resiliency/package.json +0 -38
  1114. package/packages/resiliency/src/cgroup-manager.ts +0 -468
  1115. package/packages/resiliency/src/context-persistence.ts +0 -538
  1116. package/packages/resiliency/src/crash-insights.test.ts +0 -620
  1117. package/packages/resiliency/src/crash-insights.ts +0 -660
  1118. package/packages/resiliency/src/gossip-health.ts +0 -333
  1119. package/packages/resiliency/src/health-monitor.ts +0 -371
  1120. package/packages/resiliency/src/index.ts +0 -157
  1121. package/packages/resiliency/src/leader-watchdog.ts +0 -260
  1122. package/packages/resiliency/src/logger.ts +0 -320
  1123. package/packages/resiliency/src/memory-monitor.test.ts +0 -637
  1124. package/packages/resiliency/src/memory-monitor.ts +0 -740
  1125. package/packages/resiliency/src/metrics.ts +0 -311
  1126. package/packages/resiliency/src/provider-context.ts +0 -452
  1127. package/packages/resiliency/src/stateless-lead.ts +0 -408
  1128. package/packages/resiliency/src/supervisor.ts +0 -578
  1129. package/packages/resiliency/tsconfig.json +0 -21
  1130. package/packages/resiliency/vitest.config.ts +0 -9
  1131. package/packages/sdk/dist/discovery.d.ts +0 -10
  1132. package/packages/sdk/dist/discovery.d.ts.map +0 -1
  1133. package/packages/sdk/dist/discovery.js +0 -22
  1134. package/packages/sdk/dist/discovery.js.map +0 -1
  1135. package/packages/sdk/dist/errors.d.ts +0 -9
  1136. package/packages/sdk/dist/errors.d.ts.map +0 -1
  1137. package/packages/sdk/dist/errors.js +0 -9
  1138. package/packages/sdk/dist/errors.js.map +0 -1
  1139. package/packages/sdk/dist/protocol/index.d.ts +0 -8
  1140. package/packages/sdk/dist/protocol/index.d.ts.map +0 -1
  1141. package/packages/sdk/dist/protocol/index.js +0 -8
  1142. package/packages/sdk/dist/protocol/index.js.map +0 -1
  1143. package/packages/sdk/examples/SWARM_CAPABILITIES.md +0 -498
  1144. package/packages/sdk/examples/SWARM_PATTERNS.md +0 -541
  1145. package/packages/sdk/src/client.test.ts +0 -1041
  1146. package/packages/sdk/src/discovery.ts +0 -38
  1147. package/packages/sdk/src/errors.ts +0 -17
  1148. package/packages/sdk/src/logs.test.ts +0 -98
  1149. package/packages/sdk/src/protocol/framing.test.ts +0 -164
  1150. package/packages/sdk/src/protocol/index.ts +0 -8
  1151. package/packages/spawner/.trajectories/index.json +0 -5
  1152. package/packages/spawner/API.md +0 -256
  1153. package/packages/spawner/dist/index.d.ts +0 -8
  1154. package/packages/spawner/dist/index.d.ts.map +0 -1
  1155. package/packages/spawner/dist/index.js +0 -8
  1156. package/packages/spawner/dist/index.js.map +0 -1
  1157. package/packages/spawner/dist/types.d.ts +0 -552
  1158. package/packages/spawner/dist/types.d.ts.map +0 -1
  1159. package/packages/spawner/dist/types.js +0 -193
  1160. package/packages/spawner/dist/types.js.map +0 -1
  1161. package/packages/spawner/package.json +0 -47
  1162. package/packages/spawner/src/index.ts +0 -8
  1163. package/packages/spawner/src/types.test.ts +0 -385
  1164. package/packages/spawner/src/types.ts +0 -228
  1165. package/packages/spawner/tsconfig.json +0 -19
  1166. package/packages/spawner/vitest.config.ts +0 -9
  1167. package/packages/state/dist/agent-state.d.ts +0 -40
  1168. package/packages/state/dist/agent-state.d.ts.map +0 -1
  1169. package/packages/state/dist/agent-state.js +0 -120
  1170. package/packages/state/dist/agent-state.js.map +0 -1
  1171. package/packages/state/dist/index.d.ts +0 -8
  1172. package/packages/state/dist/index.d.ts.map +0 -1
  1173. package/packages/state/dist/index.js +0 -8
  1174. package/packages/state/dist/index.js.map +0 -1
  1175. package/packages/state/package.json +0 -37
  1176. package/packages/state/src/agent-state.test.ts +0 -335
  1177. package/packages/state/src/agent-state.ts +0 -153
  1178. package/packages/state/src/index.ts +0 -12
  1179. package/packages/state/tsconfig.json +0 -21
  1180. package/packages/state/vitest.config.ts +0 -9
  1181. package/packages/storage/dist/adapter.d.ts +0 -189
  1182. package/packages/storage/dist/adapter.d.ts.map +0 -1
  1183. package/packages/storage/dist/adapter.js +0 -267
  1184. package/packages/storage/dist/adapter.js.map +0 -1
  1185. package/packages/storage/dist/batched-sqlite-adapter.d.ts +0 -75
  1186. package/packages/storage/dist/batched-sqlite-adapter.d.ts.map +0 -1
  1187. package/packages/storage/dist/batched-sqlite-adapter.js +0 -189
  1188. package/packages/storage/dist/batched-sqlite-adapter.js.map +0 -1
  1189. package/packages/storage/dist/dead-letter-queue.d.ts +0 -196
  1190. package/packages/storage/dist/dead-letter-queue.d.ts.map +0 -1
  1191. package/packages/storage/dist/dead-letter-queue.js +0 -427
  1192. package/packages/storage/dist/dead-letter-queue.js.map +0 -1
  1193. package/packages/storage/dist/dlq-adapter.d.ts +0 -195
  1194. package/packages/storage/dist/dlq-adapter.d.ts.map +0 -1
  1195. package/packages/storage/dist/dlq-adapter.js +0 -664
  1196. package/packages/storage/dist/dlq-adapter.js.map +0 -1
  1197. package/packages/storage/dist/index.d.ts +0 -6
  1198. package/packages/storage/dist/index.d.ts.map +0 -1
  1199. package/packages/storage/dist/index.js +0 -7
  1200. package/packages/storage/dist/index.js.map +0 -1
  1201. package/packages/storage/dist/jsonl-adapter.d.ts +0 -91
  1202. package/packages/storage/dist/jsonl-adapter.d.ts.map +0 -1
  1203. package/packages/storage/dist/jsonl-adapter.js +0 -580
  1204. package/packages/storage/dist/jsonl-adapter.js.map +0 -1
  1205. package/packages/storage/dist/sqlite-adapter.d.ts +0 -131
  1206. package/packages/storage/dist/sqlite-adapter.d.ts.map +0 -1
  1207. package/packages/storage/dist/sqlite-adapter.js +0 -865
  1208. package/packages/storage/dist/sqlite-adapter.js.map +0 -1
  1209. package/packages/storage/package.json +0 -74
  1210. package/packages/storage/src/adapter.ts +0 -446
  1211. package/packages/storage/src/batched-sqlite-adapter.test.ts +0 -256
  1212. package/packages/storage/src/batched-sqlite-adapter.ts +0 -239
  1213. package/packages/storage/src/dead-letter-queue.ts +0 -643
  1214. package/packages/storage/src/dlq-adapter.test.ts +0 -509
  1215. package/packages/storage/src/dlq-adapter.ts +0 -954
  1216. package/packages/storage/src/index.ts +0 -6
  1217. package/packages/storage/src/jsonl-adapter.test.ts +0 -239
  1218. package/packages/storage/src/jsonl-adapter.ts +0 -704
  1219. package/packages/storage/src/memory-adapter.test.ts +0 -36
  1220. package/packages/storage/src/sqlite-adapter.test.ts +0 -580
  1221. package/packages/storage/src/sqlite-adapter.ts +0 -1099
  1222. package/packages/storage/tsconfig.json +0 -21
  1223. package/packages/storage/vitest.config.ts +0 -9
  1224. package/packages/wrapper/dist/__fixtures__/claude-outputs.d.ts +0 -49
  1225. package/packages/wrapper/dist/__fixtures__/claude-outputs.d.ts.map +0 -1
  1226. package/packages/wrapper/dist/__fixtures__/claude-outputs.js +0 -443
  1227. package/packages/wrapper/dist/__fixtures__/claude-outputs.js.map +0 -1
  1228. package/packages/wrapper/dist/__fixtures__/codex-outputs.d.ts +0 -9
  1229. package/packages/wrapper/dist/__fixtures__/codex-outputs.d.ts.map +0 -1
  1230. package/packages/wrapper/dist/__fixtures__/codex-outputs.js +0 -94
  1231. package/packages/wrapper/dist/__fixtures__/codex-outputs.js.map +0 -1
  1232. package/packages/wrapper/dist/__fixtures__/gemini-outputs.d.ts +0 -19
  1233. package/packages/wrapper/dist/__fixtures__/gemini-outputs.d.ts.map +0 -1
  1234. package/packages/wrapper/dist/__fixtures__/gemini-outputs.js +0 -144
  1235. package/packages/wrapper/dist/__fixtures__/gemini-outputs.js.map +0 -1
  1236. package/packages/wrapper/dist/__fixtures__/index.d.ts +0 -68
  1237. package/packages/wrapper/dist/__fixtures__/index.d.ts.map +0 -1
  1238. package/packages/wrapper/dist/__fixtures__/index.js +0 -44
  1239. package/packages/wrapper/dist/__fixtures__/index.js.map +0 -1
  1240. package/packages/wrapper/dist/auth-detection.d.ts +0 -49
  1241. package/packages/wrapper/dist/auth-detection.d.ts.map +0 -1
  1242. package/packages/wrapper/dist/auth-detection.js +0 -199
  1243. package/packages/wrapper/dist/auth-detection.js.map +0 -1
  1244. package/packages/wrapper/dist/base-wrapper.d.ts +0 -254
  1245. package/packages/wrapper/dist/base-wrapper.d.ts.map +0 -1
  1246. package/packages/wrapper/dist/base-wrapper.js +0 -664
  1247. package/packages/wrapper/dist/base-wrapper.js.map +0 -1
  1248. package/packages/wrapper/dist/client.d.ts +0 -291
  1249. package/packages/wrapper/dist/client.d.ts.map +0 -1
  1250. package/packages/wrapper/dist/client.js +0 -926
  1251. package/packages/wrapper/dist/client.js.map +0 -1
  1252. package/packages/wrapper/dist/id-generator.d.ts +0 -35
  1253. package/packages/wrapper/dist/id-generator.d.ts.map +0 -1
  1254. package/packages/wrapper/dist/id-generator.js +0 -60
  1255. package/packages/wrapper/dist/id-generator.js.map +0 -1
  1256. package/packages/wrapper/dist/idle-detector.d.ts +0 -114
  1257. package/packages/wrapper/dist/idle-detector.d.ts.map +0 -1
  1258. package/packages/wrapper/dist/idle-detector.js +0 -317
  1259. package/packages/wrapper/dist/idle-detector.js.map +0 -1
  1260. package/packages/wrapper/dist/inbox.d.ts +0 -37
  1261. package/packages/wrapper/dist/inbox.d.ts.map +0 -1
  1262. package/packages/wrapper/dist/inbox.js +0 -73
  1263. package/packages/wrapper/dist/inbox.js.map +0 -1
  1264. package/packages/wrapper/dist/index.d.ts +0 -40
  1265. package/packages/wrapper/dist/index.d.ts.map +0 -1
  1266. package/packages/wrapper/dist/index.js +0 -53
  1267. package/packages/wrapper/dist/index.js.map +0 -1
  1268. package/packages/wrapper/dist/opencode-api.d.ts +0 -106
  1269. package/packages/wrapper/dist/opencode-api.d.ts.map +0 -1
  1270. package/packages/wrapper/dist/opencode-api.js +0 -219
  1271. package/packages/wrapper/dist/opencode-api.js.map +0 -1
  1272. package/packages/wrapper/dist/opencode-wrapper.d.ts +0 -161
  1273. package/packages/wrapper/dist/opencode-wrapper.d.ts.map +0 -1
  1274. package/packages/wrapper/dist/opencode-wrapper.js +0 -438
  1275. package/packages/wrapper/dist/opencode-wrapper.js.map +0 -1
  1276. package/packages/wrapper/dist/parser.d.ts +0 -236
  1277. package/packages/wrapper/dist/parser.d.ts.map +0 -1
  1278. package/packages/wrapper/dist/parser.js +0 -1238
  1279. package/packages/wrapper/dist/parser.js.map +0 -1
  1280. package/packages/wrapper/dist/prompt-composer.d.ts +0 -67
  1281. package/packages/wrapper/dist/prompt-composer.d.ts.map +0 -1
  1282. package/packages/wrapper/dist/prompt-composer.js +0 -168
  1283. package/packages/wrapper/dist/prompt-composer.js.map +0 -1
  1284. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +0 -486
  1285. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts.map +0 -1
  1286. package/packages/wrapper/dist/relay-pty-orchestrator.js +0 -2550
  1287. package/packages/wrapper/dist/relay-pty-orchestrator.js.map +0 -1
  1288. package/packages/wrapper/dist/shared.d.ts +0 -262
  1289. package/packages/wrapper/dist/shared.d.ts.map +0 -1
  1290. package/packages/wrapper/dist/shared.js +0 -507
  1291. package/packages/wrapper/dist/shared.js.map +0 -1
  1292. package/packages/wrapper/dist/stuck-detector.d.ts +0 -161
  1293. package/packages/wrapper/dist/stuck-detector.d.ts.map +0 -1
  1294. package/packages/wrapper/dist/stuck-detector.js +0 -402
  1295. package/packages/wrapper/dist/stuck-detector.js.map +0 -1
  1296. package/packages/wrapper/dist/tmux-resolver.d.ts +0 -55
  1297. package/packages/wrapper/dist/tmux-resolver.d.ts.map +0 -1
  1298. package/packages/wrapper/dist/tmux-resolver.js +0 -175
  1299. package/packages/wrapper/dist/tmux-resolver.js.map +0 -1
  1300. package/packages/wrapper/dist/tmux-wrapper.d.ts +0 -352
  1301. package/packages/wrapper/dist/tmux-wrapper.d.ts.map +0 -1
  1302. package/packages/wrapper/dist/tmux-wrapper.js +0 -1816
  1303. package/packages/wrapper/dist/tmux-wrapper.js.map +0 -1
  1304. package/packages/wrapper/dist/trajectory-integration.d.ts +0 -292
  1305. package/packages/wrapper/dist/trajectory-integration.d.ts.map +0 -1
  1306. package/packages/wrapper/dist/trajectory-integration.js +0 -979
  1307. package/packages/wrapper/dist/trajectory-integration.js.map +0 -1
  1308. package/packages/wrapper/dist/wrapper-events.d.ts +0 -489
  1309. package/packages/wrapper/dist/wrapper-events.d.ts.map +0 -1
  1310. package/packages/wrapper/dist/wrapper-events.js +0 -252
  1311. package/packages/wrapper/dist/wrapper-events.js.map +0 -1
  1312. package/packages/wrapper/dist/wrapper-types.d.ts +0 -41
  1313. package/packages/wrapper/dist/wrapper-types.d.ts.map +0 -1
  1314. package/packages/wrapper/dist/wrapper-types.js +0 -7
  1315. package/packages/wrapper/dist/wrapper-types.js.map +0 -1
  1316. package/packages/wrapper/package.json +0 -60
  1317. package/packages/wrapper/src/__fixtures__/claude-outputs.ts +0 -471
  1318. package/packages/wrapper/src/__fixtures__/codex-outputs.ts +0 -99
  1319. package/packages/wrapper/src/__fixtures__/gemini-outputs.ts +0 -151
  1320. package/packages/wrapper/src/__fixtures__/index.ts +0 -47
  1321. package/packages/wrapper/src/auth-detection.ts +0 -244
  1322. package/packages/wrapper/src/base-wrapper.test.ts +0 -589
  1323. package/packages/wrapper/src/base-wrapper.ts +0 -841
  1324. package/packages/wrapper/src/client.test.ts +0 -351
  1325. package/packages/wrapper/src/client.ts +0 -1166
  1326. package/packages/wrapper/src/id-generator.test.ts +0 -71
  1327. package/packages/wrapper/src/id-generator.ts +0 -69
  1328. package/packages/wrapper/src/idle-detector.test.ts +0 -418
  1329. package/packages/wrapper/src/idle-detector.ts +0 -384
  1330. package/packages/wrapper/src/inbox.test.ts +0 -233
  1331. package/packages/wrapper/src/inbox.ts +0 -89
  1332. package/packages/wrapper/src/index.ts +0 -199
  1333. package/packages/wrapper/src/opencode-api.test.ts +0 -292
  1334. package/packages/wrapper/src/opencode-api.ts +0 -285
  1335. package/packages/wrapper/src/opencode-wrapper.ts +0 -541
  1336. package/packages/wrapper/src/parser.regression.test.ts +0 -251
  1337. package/packages/wrapper/src/parser.test.ts +0 -1359
  1338. package/packages/wrapper/src/parser.ts +0 -1477
  1339. package/packages/wrapper/src/prompt-composer.test.ts +0 -219
  1340. package/packages/wrapper/src/prompt-composer.ts +0 -231
  1341. package/packages/wrapper/src/relay-pty-orchestrator.test.ts +0 -1386
  1342. package/packages/wrapper/src/relay-pty-orchestrator.ts +0 -3041
  1343. package/packages/wrapper/src/shared.test.ts +0 -467
  1344. package/packages/wrapper/src/shared.ts +0 -652
  1345. package/packages/wrapper/src/stuck-detector.test.ts +0 -303
  1346. package/packages/wrapper/src/stuck-detector.ts +0 -511
  1347. package/packages/wrapper/src/tmux-resolver.test.ts +0 -104
  1348. package/packages/wrapper/src/tmux-resolver.ts +0 -207
  1349. package/packages/wrapper/src/tmux-wrapper.test.ts +0 -316
  1350. package/packages/wrapper/src/tmux-wrapper.ts +0 -2095
  1351. package/packages/wrapper/src/trajectory-detection.test.ts +0 -151
  1352. package/packages/wrapper/src/trajectory-integration.ts +0 -1261
  1353. package/packages/wrapper/src/wrapper-events.ts +0 -395
  1354. package/packages/wrapper/src/wrapper-types.ts +0 -45
  1355. package/packages/wrapper/tsconfig.json +0 -19
  1356. package/packages/wrapper/vitest.config.ts +0 -9
  1357. /package/packages/{broker-sdk → sdk}/dist/__tests__/facade.test.d.ts +0 -0
  1358. /package/packages/{broker-sdk → sdk}/dist/__tests__/facade.test.d.ts.map +0 -0
  1359. /package/packages/{broker-sdk → sdk}/dist/__tests__/integration.test.d.ts +0 -0
  1360. /package/packages/{broker-sdk → sdk}/dist/__tests__/integration.test.d.ts.map +0 -0
  1361. /package/packages/{broker-sdk → sdk}/dist/__tests__/quickstart.test.d.ts +0 -0
  1362. /package/packages/{broker-sdk → sdk}/dist/__tests__/quickstart.test.d.ts.map +0 -0
  1363. /package/packages/{broker-sdk → sdk}/dist/__tests__/unit.test.d.ts +0 -0
  1364. /package/packages/{broker-sdk → sdk}/dist/__tests__/unit.test.d.ts.map +0 -0
  1365. /package/packages/{broker-sdk → sdk}/dist/browser.d.ts +0 -0
  1366. /package/packages/{broker-sdk → sdk}/dist/browser.d.ts.map +0 -0
  1367. /package/packages/{broker-sdk → sdk}/dist/browser.js +0 -0
  1368. /package/packages/{broker-sdk → sdk}/dist/browser.js.map +0 -0
  1369. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.d.ts +0 -0
  1370. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.d.ts.map +0 -0
  1371. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.js +0 -0
  1372. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.js.map +0 -0
  1373. /package/packages/{broker-sdk → sdk}/dist/consensus.d.ts +0 -0
  1374. /package/packages/{broker-sdk → sdk}/dist/consensus.d.ts.map +0 -0
  1375. /package/packages/{broker-sdk → sdk}/dist/consensus.js +0 -0
  1376. /package/packages/{broker-sdk → sdk}/dist/consensus.js.map +0 -0
  1377. /package/packages/{broker-sdk → sdk}/dist/examples/demo.d.ts +0 -0
  1378. /package/packages/{broker-sdk → sdk}/dist/examples/demo.d.ts.map +0 -0
  1379. /package/packages/{broker-sdk → sdk}/dist/examples/demo.js +0 -0
  1380. /package/packages/{broker-sdk → sdk}/dist/examples/demo.js.map +0 -0
  1381. /package/packages/{broker-sdk → sdk}/dist/examples/example.d.ts +0 -0
  1382. /package/packages/{broker-sdk → sdk}/dist/examples/example.d.ts.map +0 -0
  1383. /package/packages/{broker-sdk → sdk}/dist/examples/example.js +0 -0
  1384. /package/packages/{broker-sdk → sdk}/dist/examples/example.js.map +0 -0
  1385. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.d.ts +0 -0
  1386. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.d.ts.map +0 -0
  1387. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.js +0 -0
  1388. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.js.map +0 -0
  1389. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.d.ts +0 -0
  1390. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.d.ts.map +0 -0
  1391. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.js +0 -0
  1392. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.js.map +0 -0
  1393. /package/packages/{broker-sdk → sdk}/dist/protocol.js +0 -0
  1394. /package/packages/{broker-sdk → sdk}/dist/protocol.js.map +0 -0
  1395. /package/packages/{broker-sdk → sdk}/dist/pty.d.ts +0 -0
  1396. /package/packages/{broker-sdk → sdk}/dist/shadow.js +0 -0
  1397. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.d.ts +0 -0
  1398. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.d.ts.map +0 -0
  1399. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.js +0 -0
  1400. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.js.map +0 -0
  1401. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.d.ts +0 -0
  1402. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.d.ts.map +0 -0
  1403. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.js +0 -0
  1404. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.js.map +0 -0
  1405. /package/packages/{broker-sdk → sdk}/dist/workflows/state.d.ts +0 -0
  1406. /package/packages/{broker-sdk → sdk}/dist/workflows/state.d.ts.map +0 -0
  1407. /package/packages/{broker-sdk → sdk}/dist/workflows/state.js +0 -0
  1408. /package/packages/{broker-sdk → sdk}/dist/workflows/state.js.map +0 -0
  1409. /package/packages/{broker-sdk → sdk}/src/__tests__/workflow-trajectory.test.ts +0 -0
  1410. /package/packages/{broker-sdk → sdk}/src/browser.ts +0 -0
  1411. /package/packages/{broker-sdk → sdk}/src/consensus-helpers.ts +0 -0
  1412. /package/packages/{broker-sdk → sdk}/src/consensus.ts +0 -0
  1413. /package/packages/{broker-sdk → sdk}/src/examples/demo.ts +0 -0
  1414. /package/packages/{broker-sdk → sdk}/src/examples/example.ts +0 -0
  1415. /package/packages/{broker-sdk → sdk}/src/examples/quickstart.ts +0 -0
  1416. /package/packages/{broker-sdk → sdk}/src/examples/ralph-loop.ts +0 -0
  1417. /package/packages/{broker-sdk → sdk}/src/examples/sample-prd.json +0 -0
  1418. /package/packages/{broker-sdk → sdk}/src/workflows/barrier.ts +0 -0
  1419. /package/packages/{broker-sdk → sdk}/src/workflows/memory-db.ts +0 -0
  1420. /package/packages/{broker-sdk → sdk}/src/workflows/state.ts +0 -0
@@ -1,1791 +0,0 @@
1
- /**
2
- * Agent Relay Daemon Server
3
- * Main entry point for the relay daemon.
4
- */
5
- import net from 'node:net';
6
- import fs from 'node:fs';
7
- import path from 'node:path';
8
- import os from 'node:os';
9
- import { createRequire } from 'node:module';
10
- import { Connection, DEFAULT_CONFIG } from './connection.js';
11
- import { Router } from './router.js';
12
- import { PROTOCOL_VERSION, } from '@agent-relay/protocol/types';
13
- import { SpawnManager } from './spawn-manager.js';
14
- import { createStorageAdapter } from '@agent-relay/storage/adapter';
15
- import { getProjectPaths, saveRuntimeConfig, clearRuntimeConfig } from '@agent-relay/config';
16
- import { AgentRegistry } from './agent-registry.js';
17
- import { daemonLog as log } from '@agent-relay/utils/logger';
18
- import { getCloudSync } from './cloud-sync.js';
19
- import { getMemoryMonitor } from '@agent-relay/resiliency';
20
- import { generateId } from '@agent-relay/wrapper';
21
- import { createConsensusIntegration, } from './consensus-integration.js';
22
- import { initTelemetry, track, shutdown as shutdownTelemetry, } from '@agent-relay/telemetry';
23
- // Get version: prefer build-time injected version (for standalone binaries), fall back to package.json
24
- const DAEMON_VERSION = (() => {
25
- const envVersion = process.env.AGENT_RELAY_VERSION;
26
- if (envVersion)
27
- return envVersion;
28
- try {
29
- const require = createRequire(import.meta.url);
30
- const packageJson = require('../package.json');
31
- return packageJson.version;
32
- }
33
- catch {
34
- return 'unknown';
35
- }
36
- })();
37
- export const DEFAULT_SOCKET_PATH = '/tmp/agent-relay.sock';
38
- export const DEFAULT_DAEMON_CONFIG = {
39
- ...DEFAULT_CONFIG,
40
- socketPath: DEFAULT_SOCKET_PATH,
41
- pidFilePath: `${DEFAULT_SOCKET_PATH}.pid`,
42
- };
43
- export class Daemon {
44
- server;
45
- router;
46
- config;
47
- running = false;
48
- connections = new Set();
49
- pendingAcks = new Map();
50
- storage;
51
- storageInitialized = false;
52
- registry;
53
- processingStateInterval;
54
- cloudSync;
55
- remoteAgents = [];
56
- remoteUsers = [];
57
- consensus;
58
- cloudSyncDebounceTimer;
59
- spawnManager;
60
- shuttingDown = false;
61
- storageHealth;
62
- /** Telemetry tracking */
63
- startTime;
64
- agentSpawnCount = 0;
65
- /** Callback for log output from agents (used by dashboard for streaming) */
66
- onLogOutput;
67
- /** Interval for writing processing state file (500ms for responsive UI) */
68
- static PROCESSING_STATE_INTERVAL_MS = 500;
69
- static DEFAULT_SYNC_TIMEOUT_MS = 30000;
70
- constructor(config = {}) {
71
- this.config = { ...DEFAULT_DAEMON_CONFIG, ...config };
72
- if (config.socketPath && !config.pidFilePath) {
73
- this.config.pidFilePath = `${config.socketPath}.pid`;
74
- }
75
- // Default teamDir to same directory as socket, but avoid /tmp directly
76
- // because macOS can clean temp files causing atomic write failures
77
- if (!this.config.teamDir) {
78
- const socketDir = path.dirname(this.config.socketPath);
79
- // If socket is in /tmp or /private/tmp, use a subdirectory
80
- if (socketDir === '/tmp' || socketDir === '/private/tmp') {
81
- this.config.teamDir = path.join(socketDir, 'agent-relay-state');
82
- }
83
- else {
84
- this.config.teamDir = socketDir;
85
- }
86
- }
87
- if (this.config.teamDir) {
88
- this.registry = new AgentRegistry(this.config.teamDir);
89
- }
90
- // SpawnManager is initialized in start() after router is created
91
- // so we can wire up onMarkSpawning/onClearSpawning callbacks
92
- // Storage is initialized lazily in start() to support async createStorageAdapter
93
- this.server = net.createServer(this.handleConnection.bind(this));
94
- }
95
- /**
96
- * Write current agents to agents.json for dashboard consumption.
97
- */
98
- writeAgentsFile() {
99
- if (!this.registry)
100
- return;
101
- // The registry persists on every update; this is a no-op helper for symmetry.
102
- const agents = this.registry.getAgents();
103
- try {
104
- const targetDir = this.config.teamDir ?? path.dirname(this.config.socketPath);
105
- const targetPath = path.join(targetDir, 'agents.json');
106
- // Ensure directory exists (defensive - may have been deleted)
107
- if (!fs.existsSync(targetDir)) {
108
- fs.mkdirSync(targetDir, { recursive: true });
109
- }
110
- const data = JSON.stringify({ agents }, null, 2);
111
- // Write atomically: write to temp file first, then rename
112
- // This prevents race conditions where readers see partial/empty data
113
- const tempPath = `${targetPath}.tmp`;
114
- fs.writeFileSync(tempPath, data, 'utf-8');
115
- fs.renameSync(tempPath, targetPath);
116
- }
117
- catch (err) {
118
- log.error('Failed to write agents.json', { error: String(err) });
119
- }
120
- }
121
- /**
122
- * Write processing state to processing-state.json for dashboard consumption.
123
- * This file contains agents currently processing/thinking after receiving a message.
124
- */
125
- writeProcessingStateFile() {
126
- // Skip writes during shutdown to avoid race conditions with directory cleanup
127
- if (this.shuttingDown)
128
- return;
129
- try {
130
- const processingAgents = this.router.getProcessingAgents();
131
- const targetDir = this.config.teamDir ?? path.dirname(this.config.socketPath);
132
- const targetPath = path.join(targetDir, 'processing-state.json');
133
- // Ensure directory exists (defensive - may have been deleted)
134
- if (!fs.existsSync(targetDir)) {
135
- fs.mkdirSync(targetDir, { recursive: true });
136
- }
137
- const data = JSON.stringify({ processingAgents, updatedAt: Date.now() }, null, 2);
138
- const tempPath = `${targetPath}.tmp`;
139
- fs.writeFileSync(tempPath, data, 'utf-8');
140
- fs.renameSync(tempPath, targetPath);
141
- }
142
- catch (err) {
143
- // Suppress ENOENT errors during shutdown race conditions
144
- if (!this.shuttingDown) {
145
- log.error('Failed to write processing-state.json', { error: String(err) });
146
- }
147
- }
148
- }
149
- /**
150
- * Write currently connected agents to connected-agents.json for CLI consumption.
151
- * This file contains agents with active socket connections (vs agents.json which is historical).
152
- */
153
- writeConnectedAgentsFile() {
154
- try {
155
- const connectedAgents = this.router.getAgents();
156
- const connectedUsers = this.router.getUsers();
157
- const targetDir = this.config.teamDir ?? path.dirname(this.config.socketPath);
158
- const targetPath = path.join(targetDir, 'connected-agents.json');
159
- // Debug: log what we're writing
160
- log.info('Writing connected-agents.json', {
161
- agents: connectedAgents.join(','),
162
- path: targetPath,
163
- teamDir: this.config.teamDir,
164
- });
165
- // Ensure directory exists (defensive - may have been deleted)
166
- if (!fs.existsSync(targetDir)) {
167
- fs.mkdirSync(targetDir, { recursive: true });
168
- }
169
- const data = JSON.stringify({
170
- agents: connectedAgents,
171
- users: connectedUsers,
172
- updatedAt: Date.now(),
173
- }, null, 2);
174
- const tempPath = `${targetPath}.tmp`;
175
- fs.writeFileSync(tempPath, data, 'utf-8');
176
- fs.renameSync(tempPath, targetPath);
177
- }
178
- catch (err) {
179
- log.error('Failed to write connected-agents.json', { error: String(err) });
180
- }
181
- }
182
- /**
183
- * Mark an agent as spawning (before HELLO completes).
184
- * Messages sent to this agent will be queued for delivery after registration.
185
- * Call this before starting the agent's PTY process.
186
- */
187
- markSpawning(agentName) {
188
- this.router.markSpawning(agentName);
189
- }
190
- /**
191
- * Clear the spawning flag for an agent.
192
- * Called when spawn fails or is cancelled (successful registration clears automatically).
193
- */
194
- clearSpawning(agentName) {
195
- this.router.clearSpawning(agentName);
196
- }
197
- /**
198
- * Remove a stale agent from the router (used when process dies without clean disconnect).
199
- * This is called by the orchestrator's health monitoring when a PID is detected as dead.
200
- */
201
- removeStaleAgent(agentName) {
202
- const removed = this.router.forceRemoveAgent(agentName);
203
- if (removed) {
204
- // Notify cloud sync about agent removal
205
- this.notifyCloudSync();
206
- // Update connected-agents.json to reflect the removal
207
- this.writeConnectedAgentsFile();
208
- log.info('Removed stale agent from router', { agentName });
209
- }
210
- return removed;
211
- }
212
- /**
213
- * Initialize storage adapter (called during start).
214
- */
215
- async initStorage() {
216
- if (this.storageInitialized)
217
- return;
218
- if (this.config.storageAdapter) {
219
- // Use explicitly provided adapter
220
- this.storage = this.config.storageAdapter;
221
- }
222
- else {
223
- // Create adapter based on config/env
224
- const storagePath = this.config.storagePath ??
225
- path.join(path.dirname(this.config.socketPath), 'agent-relay.sqlite');
226
- this.storage = await createStorageAdapter(storagePath, this.config.storageConfig);
227
- }
228
- let channelMembershipStore;
229
- const workspaceId = process.env.RELAY_WORKSPACE_ID
230
- || process.env.AGENT_RELAY_WORKSPACE_ID
231
- || process.env.WORKSPACE_ID;
232
- const databaseUrl = process.env.CLOUD_DATABASE_URL
233
- || process.env.DATABASE_URL
234
- || process.env.AGENT_RELAY_STORAGE_URL;
235
- const isPostgresUrl = databaseUrl?.startsWith('postgres://') || databaseUrl?.startsWith('postgresql://');
236
- if (workspaceId && isPostgresUrl && databaseUrl) {
237
- try {
238
- const { CloudChannelMembershipStore } = await import('./channel-membership-store.js');
239
- channelMembershipStore = new CloudChannelMembershipStore({ workspaceId, databaseUrl });
240
- log.info('Channel membership store enabled (cloud DB)', { workspaceId });
241
- }
242
- catch (err) {
243
- log.error('Failed to initialize channel membership store', { error: String(err) });
244
- }
245
- }
246
- else {
247
- log.debug('Channel membership store disabled (missing workspaceId or Postgres database URL)');
248
- }
249
- this.router = new Router({
250
- storage: this.storage,
251
- registry: this.registry,
252
- onProcessingStateChange: () => this.writeProcessingStateFile(),
253
- crossMachineHandler: {
254
- sendCrossMachineMessage: this.sendCrossMachineMessage.bind(this),
255
- isRemoteAgent: this.isRemoteAgent.bind(this),
256
- isRemoteUser: this.isRemoteUser.bind(this),
257
- },
258
- channelMembershipStore,
259
- });
260
- // Initialize SpawnManager if enabled (after router, so we can wire callbacks)
261
- if (this.config.spawnManager) {
262
- const spawnConfig = typeof this.config.spawnManager === 'object'
263
- ? this.config.spawnManager
264
- : {};
265
- // Derive projectRoot from teamDir (teamDir is typically {projectRoot}/.agent-relay/)
266
- const projectRoot = spawnConfig.projectRoot || path.dirname(this.config.teamDir || this.config.socketPath);
267
- this.spawnManager = new SpawnManager({
268
- projectRoot,
269
- socketPath: this.config.socketPath,
270
- ...spawnConfig,
271
- // Track spawn count for telemetry
272
- onAgentSpawn: () => {
273
- this.agentSpawnCount++;
274
- },
275
- // Wire spawn tracking to router so messages are queued during spawn
276
- onMarkSpawning: (name) => this.router.markSpawning(name),
277
- onClearSpawning: (name) => this.router.clearSpawning(name),
278
- // Fallback for releasing agents not spawned by this instance
279
- onReleaseFallback: async (agentName, _reason) => {
280
- // Check if agent is connected to the router
281
- if (this.router.forceRemoveAgent(agentName)) {
282
- log.info(`Release fallback: force-disconnected agent ${agentName}`);
283
- // Also clean up from storage if available
284
- if (this.storage?.removeAgent) {
285
- try {
286
- await this.storage.removeAgent(agentName);
287
- }
288
- catch (err) {
289
- log.warn(`Failed to remove agent ${agentName} from storage:`, { error: String(err) });
290
- }
291
- }
292
- return true;
293
- }
294
- return false;
295
- },
296
- });
297
- log.info('SpawnManager initialized with spawn tracking callbacks');
298
- }
299
- // Initialize consensus (enabled by default, can be disabled with consensus: false)
300
- if (this.config.consensus !== false) {
301
- const consensusConfig = typeof this.config.consensus === 'object'
302
- ? this.config.consensus
303
- : {};
304
- this.consensus = createConsensusIntegration(this.router, consensusConfig);
305
- log.info('Consensus mechanism enabled');
306
- }
307
- this.storageInitialized = true;
308
- }
309
- /**
310
- * Start the daemon.
311
- */
312
- async start() {
313
- if (this.running)
314
- return;
315
- // Initialize telemetry (don't show notice - CLI handles that)
316
- initTelemetry({ showNotice: false });
317
- this.startTime = Date.now();
318
- this.agentSpawnCount = 0;
319
- // Initialize storage
320
- await this.initStorage();
321
- // Storage health check: warn if non-persistent (e.g., in-memory fallback)
322
- try {
323
- if (this.storage?.healthCheck) {
324
- this.storageHealth = await this.storage.healthCheck();
325
- if (!this.storageHealth.persistent) {
326
- console.warn('[daemon] ⚠️ Running in non-persistent mode!');
327
- console.warn('[daemon] Messages will be lost on restart.');
328
- }
329
- }
330
- }
331
- catch (err) {
332
- log.warn('Storage health check failed', { error: String(err) });
333
- }
334
- // Save runtime config so CLI commands can use the same storage type
335
- try {
336
- saveRuntimeConfig({
337
- storageType: this.storageHealth?.driver ?? this.config.storageConfig?.type ?? 'jsonl',
338
- daemonPid: process.pid,
339
- startedAt: new Date().toISOString(),
340
- version: DAEMON_VERSION,
341
- });
342
- }
343
- catch (err) {
344
- log.warn('Failed to save runtime config', { error: String(err) });
345
- }
346
- // Restore channel memberships from persisted storage (cloud DB or SQLite)
347
- await this.router.restoreChannelMemberships();
348
- // Initialize cloud sync if configured
349
- await this.initCloudSync();
350
- // Clean up stale socket (symlinks, sockets OK — refuse regular files)
351
- // Use lstatSync directly to detect broken symlinks (existsSync follows
352
- // symlinks and returns false for dangling ones, leaving them uncleaned)
353
- let lstat = null;
354
- try {
355
- lstat = fs.lstatSync(this.config.socketPath);
356
- }
357
- catch {
358
- // ENOENT — nothing at this path, proceed to listen
359
- }
360
- if (lstat) {
361
- if (lstat.isSymbolicLink()) {
362
- // Symlinks (e.g., /tmp/agent-relay.sock -> project/.agent-relay/relay.sock)
363
- // are safe to replace — they don't destroy the target
364
- fs.unlinkSync(this.config.socketPath);
365
- }
366
- else if (lstat.isSocket()) {
367
- // Check if socket is actively in use by another daemon
368
- const alive = await new Promise((resolve) => {
369
- const client = net.createConnection(this.config.socketPath);
370
- client.on('connect', () => { client.destroy(); resolve(true); });
371
- client.on('error', () => resolve(false));
372
- });
373
- if (alive) {
374
- throw new Error(`Another daemon is already listening on ${this.config.socketPath}`);
375
- }
376
- fs.unlinkSync(this.config.socketPath);
377
- }
378
- else {
379
- throw new Error(`Refusing to unlink non-socket at ${this.config.socketPath}`);
380
- }
381
- }
382
- // Clean up stale mcp-identity-* files from previous runs
383
- // These are left behind when agents crash or aren't cleaned up properly
384
- const dataDir = path.dirname(this.config.socketPath);
385
- try {
386
- const files = fs.readdirSync(dataDir);
387
- for (const file of files) {
388
- if (file.startsWith('mcp-identity-')) {
389
- const match = file.match(/mcp-identity-(\d+)/);
390
- if (match) {
391
- const identityPid = parseInt(match[1], 10);
392
- // Check if process is still running
393
- let isRunning = false;
394
- try {
395
- process.kill(identityPid, 0);
396
- isRunning = true;
397
- }
398
- catch {
399
- // Process not running
400
- }
401
- if (!isRunning) {
402
- const identityPath = path.join(dataDir, file);
403
- fs.unlinkSync(identityPath);
404
- log.info('Cleaned up stale identity file', { file });
405
- }
406
- }
407
- }
408
- }
409
- }
410
- catch (err) {
411
- log.warn('Failed to clean up stale identity files', { error: String(err) });
412
- }
413
- // Ensure socket directory exists
414
- const socketDir = path.dirname(this.config.socketPath);
415
- if (!fs.existsSync(socketDir)) {
416
- fs.mkdirSync(socketDir, { recursive: true });
417
- }
418
- // Ensure team directory exists for state files (agents.json, processing-state.json, etc.)
419
- // Always check and create, even if same as socketDir, to handle edge cases
420
- const teamDir = this.config.teamDir ?? socketDir;
421
- if (!fs.existsSync(teamDir)) {
422
- fs.mkdirSync(teamDir, { recursive: true });
423
- }
424
- // Set up inbox symlink for workspace namespacing
425
- // Daemon delivers to legacy path (/tmp/relay-inbox), symlink points to workspace path
426
- // This allows agents to use simple instructions while maintaining workspace isolation
427
- const workspaceId = process.env.RELAY_WORKSPACE_ID
428
- || process.env.AGENT_RELAY_WORKSPACE_ID
429
- || process.env.WORKSPACE_ID;
430
- const legacyInboxPath = '/tmp/relay-inbox';
431
- let inboxPath = legacyInboxPath;
432
- if (workspaceId) {
433
- // Workspace-namespaced inbox directory
434
- inboxPath = `/tmp/relay/${workspaceId}/inbox`;
435
- try {
436
- // Ensure workspace inbox directory exists
437
- const inboxDir = path.dirname(inboxPath);
438
- if (!fs.existsSync(inboxDir)) {
439
- fs.mkdirSync(inboxDir, { recursive: true });
440
- }
441
- if (!fs.existsSync(inboxPath)) {
442
- fs.mkdirSync(inboxPath, { recursive: true });
443
- }
444
- // Ensure legacy inbox parent directory exists
445
- const legacyInboxParent = path.dirname(legacyInboxPath);
446
- if (!fs.existsSync(legacyInboxParent)) {
447
- fs.mkdirSync(legacyInboxParent, { recursive: true });
448
- }
449
- // Create symlink from legacy path to workspace path
450
- // If legacy path exists as a regular directory, remove it first
451
- if (fs.existsSync(legacyInboxPath)) {
452
- try {
453
- const stats = fs.lstatSync(legacyInboxPath);
454
- if (stats.isSymbolicLink()) {
455
- // Already a symlink - remove and recreate to ensure correct target
456
- fs.unlinkSync(legacyInboxPath);
457
- }
458
- else if (stats.isDirectory()) {
459
- // Regular directory - remove it (may have stale files from previous run)
460
- fs.rmSync(legacyInboxPath, { recursive: true, force: true });
461
- }
462
- }
463
- catch {
464
- // Ignore errors during cleanup
465
- }
466
- }
467
- // Create the symlink: legacy path -> workspace path
468
- fs.symlinkSync(inboxPath, legacyInboxPath);
469
- log.info('Created inbox symlink', { from: legacyInboxPath, to: inboxPath });
470
- }
471
- catch (err) {
472
- log.error('Failed to set up inbox symlink', { error: err.message });
473
- // Fall back to creating legacy directory directly
474
- try {
475
- if (!fs.existsSync(legacyInboxPath)) {
476
- fs.mkdirSync(legacyInboxPath, { recursive: true });
477
- }
478
- }
479
- catch {
480
- // Ignore
481
- }
482
- }
483
- }
484
- else {
485
- // No workspace ID - just ensure legacy inbox directory exists
486
- try {
487
- if (!fs.existsSync(legacyInboxPath)) {
488
- fs.mkdirSync(legacyInboxPath, { recursive: true });
489
- }
490
- }
491
- catch (err) {
492
- log.error('Failed to create inbox directory', { error: err.message });
493
- }
494
- }
495
- return new Promise((resolve, reject) => {
496
- this.server.on('error', reject);
497
- this.server.listen(this.config.socketPath, () => {
498
- this.running = true;
499
- // Set restrictive permissions
500
- fs.chmodSync(this.config.socketPath, 0o600);
501
- fs.writeFileSync(this.config.pidFilePath, `${process.pid}\n`, 'utf-8');
502
- // Start periodic processing state updates for dashboard
503
- this.processingStateInterval = setInterval(() => {
504
- this.writeProcessingStateFile();
505
- }, Daemon.PROCESSING_STATE_INTERVAL_MS);
506
- // Write active daemon marker for cross-cwd discovery
507
- try {
508
- const markerDir = path.join(os.homedir(), '.agent-relay');
509
- if (!fs.existsSync(markerDir)) {
510
- fs.mkdirSync(markerDir, { recursive: true });
511
- }
512
- // Derive projectRoot from socket path (e.g., /project/.agent-relay/relay.sock -> /project)
513
- // Only valid for project-namespaced sockets, not the default /tmp/agent-relay.sock
514
- const socketDir = path.dirname(this.config.socketPath);
515
- const isProjectSocket = path.basename(socketDir) === '.agent-relay';
516
- const projectRoot = isProjectSocket ? path.dirname(socketDir) : undefined;
517
- const markerData = JSON.stringify({
518
- socketPath: this.config.socketPath,
519
- ...(projectRoot && { projectRoot }),
520
- pid: process.pid,
521
- startedAt: new Date().toISOString(),
522
- }, null, 2);
523
- fs.writeFileSync(path.join(markerDir, 'active-daemon.json'), markerData, 'utf-8');
524
- }
525
- catch (err) {
526
- log.warn('Failed to write active daemon marker', { error: String(err) });
527
- }
528
- // Track daemon start
529
- track('daemon_start', {});
530
- log.info('Listening', { socketPath: this.config.socketPath });
531
- resolve();
532
- });
533
- });
534
- }
535
- /**
536
- * Initialize cloud sync service for cross-machine agent communication.
537
- */
538
- async initCloudSync() {
539
- // Check for cloud config file OR environment variables
540
- const dataDir = process.env.AGENT_RELAY_DATA_DIR ||
541
- path.join(os.homedir(), '.local', 'share', 'agent-relay');
542
- const configPath = path.join(dataDir, 'cloud-config.json');
543
- const hasConfigFile = fs.existsSync(configPath);
544
- const hasEnvApiKey = !!process.env.AGENT_RELAY_API_KEY;
545
- // Allow cloud sync if config file exists OR API key is set via env var
546
- // This enables cloud-hosted workspaces (Fly.io) to sync messages without a config file
547
- if (!hasConfigFile && !hasEnvApiKey) {
548
- log.info('Cloud sync disabled (not linked to cloud)');
549
- return;
550
- }
551
- try {
552
- let apiKey;
553
- let cloudUrl;
554
- if (hasConfigFile) {
555
- // Use config file (local daemons linked via CLI)
556
- const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
557
- apiKey = config.apiKey;
558
- cloudUrl = config.cloudUrl;
559
- }
560
- else {
561
- // Use env vars (cloud-hosted workspaces like Fly.io)
562
- apiKey = process.env.AGENT_RELAY_API_KEY;
563
- // CLOUD_API_URL is set by Fly.io provisioner, AGENT_RELAY_CLOUD_URL is the standard
564
- cloudUrl = process.env.AGENT_RELAY_CLOUD_URL || process.env.CLOUD_API_URL;
565
- log.info('Using environment variables for cloud sync', { hasApiKey: !!apiKey, hasCloudUrl: !!cloudUrl });
566
- }
567
- // Get project root for workspace detection via git remote
568
- const projectPaths = getProjectPaths();
569
- this.cloudSync = getCloudSync({
570
- apiKey,
571
- cloudUrl: cloudUrl || this.config.cloudUrl,
572
- enabled: this.config.cloudSync !== false,
573
- projectDirectory: projectPaths.projectRoot,
574
- });
575
- // Listen for remote agent updates
576
- this.cloudSync.on('remote-agents-updated', (agents) => {
577
- this.remoteAgents = agents;
578
- log.info('Remote agents updated', { count: agents.length });
579
- this.writeRemoteAgentsFile();
580
- });
581
- // Listen for remote user updates (humans connected via cloud dashboard)
582
- this.cloudSync.on('remote-users-updated', (users) => {
583
- this.remoteUsers = users;
584
- log.info('Remote users updated', { count: users.length });
585
- this.writeRemoteUsersFile();
586
- });
587
- // Listen for cross-machine messages
588
- this.cloudSync.on('cross-machine-message', (msg) => {
589
- this.handleCrossMachineMessage(msg);
590
- });
591
- // Listen for cloud commands (e.g., credential refresh)
592
- this.cloudSync.on('command', (cmd) => {
593
- log.info('Cloud command received', { type: cmd.type });
594
- // Handle commands like credential updates, config changes, etc.
595
- });
596
- await this.cloudSync.start();
597
- // Set storage adapter for message sync to cloud
598
- if (this.storage) {
599
- this.cloudSync.setStorage(this.storage);
600
- }
601
- // Set metrics provider for agent metrics sync to cloud
602
- // Uses the singleton memory monitor from @agent-relay/resiliency
603
- const memoryMonitor = getMemoryMonitor();
604
- const metricsProvider = {
605
- getAll: () => {
606
- return memoryMonitor.getAll().map(m => ({
607
- name: m.name,
608
- pid: m.pid,
609
- status: m.alertLevel === 'normal' ? 'running' : m.alertLevel,
610
- rssBytes: m.current.rssBytes,
611
- heapUsedBytes: m.current.heapUsedBytes,
612
- heapTotalBytes: m.current.heapTotalBytes,
613
- cpuPercent: m.current.cpuPercent,
614
- trend: m.trend,
615
- trendRatePerMinute: m.trendRatePerMinute,
616
- alertLevel: m.alertLevel,
617
- highWatermark: m.highWatermark,
618
- averageRss: m.averageRss,
619
- uptimeMs: m.uptimeMs,
620
- startedAt: m.startedAt,
621
- }));
622
- },
623
- };
624
- this.cloudSync.setMetricsProvider(metricsProvider);
625
- log.info('Cloud sync enabled');
626
- }
627
- catch (err) {
628
- log.error('Failed to initialize cloud sync', { error: String(err) });
629
- }
630
- }
631
- /**
632
- * Write remote agents to file for dashboard consumption.
633
- */
634
- writeRemoteAgentsFile() {
635
- try {
636
- const targetPath = path.join(this.config.teamDir ?? path.dirname(this.config.socketPath), 'remote-agents.json');
637
- const data = JSON.stringify({
638
- agents: this.remoteAgents,
639
- updatedAt: Date.now(),
640
- }, null, 2);
641
- const tempPath = `${targetPath}.tmp`;
642
- fs.writeFileSync(tempPath, data, 'utf-8');
643
- fs.renameSync(tempPath, targetPath);
644
- }
645
- catch (err) {
646
- log.error('Failed to write remote-agents.json', { error: String(err) });
647
- }
648
- }
649
- /**
650
- * Write remote users to file for dashboard consumption.
651
- * Remote users are humans connected via the cloud dashboard.
652
- */
653
- writeRemoteUsersFile() {
654
- try {
655
- const targetPath = path.join(this.config.teamDir ?? path.dirname(this.config.socketPath), 'remote-users.json');
656
- const data = JSON.stringify({
657
- users: this.remoteUsers,
658
- updatedAt: Date.now(),
659
- }, null, 2);
660
- const tempPath = `${targetPath}.tmp`;
661
- fs.writeFileSync(tempPath, data, 'utf-8');
662
- fs.renameSync(tempPath, targetPath);
663
- }
664
- catch (err) {
665
- log.error('Failed to write remote-users.json', { error: String(err) });
666
- }
667
- }
668
- /**
669
- * Handle incoming message from another machine via cloud.
670
- */
671
- handleCrossMachineMessage(msg) {
672
- log.info('Cross-machine message received', {
673
- from: `${msg.from.daemonName}:${msg.from.agent}`,
674
- to: msg.to,
675
- });
676
- // Handle spawn commands from cloud
677
- if (msg.to === '__spawner__' && msg.metadata?.type === 'spawn_command') {
678
- this.handleCloudSpawnCommand(msg);
679
- return;
680
- }
681
- // Find local agent
682
- const targetConnection = Array.from(this.connections).find(c => c.agentName === msg.to);
683
- if (!targetConnection) {
684
- log.warn('Target agent not found locally', { agent: msg.to });
685
- return;
686
- }
687
- // Inject message to local agent
688
- const envelope = {
689
- v: 1,
690
- type: 'SEND',
691
- id: generateId(),
692
- ts: Date.now(),
693
- from: `${msg.from.daemonName}:${msg.from.agent}`,
694
- to: msg.to,
695
- payload: {
696
- kind: 'message',
697
- body: msg.content,
698
- data: {
699
- _crossMachine: true,
700
- _fromDaemon: msg.from.daemonId,
701
- _fromDaemonName: msg.from.daemonName,
702
- ...msg.metadata,
703
- },
704
- },
705
- };
706
- this.router.route(targetConnection, envelope);
707
- }
708
- /**
709
- * Handle a spawn command received from the cloud (e.g., Slack orchestrator).
710
- * Parses the spawn_agent command and uses SpawnManager to spawn the agent locally.
711
- */
712
- async handleCloudSpawnCommand(msg) {
713
- if (!this.spawnManager) {
714
- log.warn('Cannot handle cloud spawn command: SpawnManager not enabled');
715
- return;
716
- }
717
- try {
718
- const command = JSON.parse(msg.content);
719
- if (command.type !== 'spawn_agent') {
720
- log.warn('Unknown cloud spawn command type', { type: command.type });
721
- return;
722
- }
723
- log.info('Spawning agent from cloud command', {
724
- name: command.agentName,
725
- cli: command.cli,
726
- source: msg.from.agent,
727
- });
728
- const spawner = this.spawnManager.getSpawner();
729
- const result = await spawner.spawn({
730
- name: command.agentName,
731
- cli: command.cli,
732
- task: command.task || 'You were spawned by the cloud orchestrator. Check your inbox for messages.',
733
- spawnerName: msg.from.agent,
734
- });
735
- if (result.success) {
736
- log.info('Cloud-spawned agent started', {
737
- name: command.agentName,
738
- pid: result.pid,
739
- });
740
- }
741
- else {
742
- log.error('Cloud spawn failed', {
743
- name: command.agentName,
744
- error: result.error,
745
- });
746
- }
747
- }
748
- catch (err) {
749
- const error = err instanceof Error ? err.message : String(err);
750
- log.error('Failed to parse cloud spawn command', { error });
751
- }
752
- }
753
- /**
754
- * Send message to agent on another machine via cloud.
755
- */
756
- async sendCrossMachineMessage(targetDaemonId, targetAgent, fromAgent, content, metadata) {
757
- if (!this.cloudSync?.isConnected()) {
758
- log.warn('Cannot send cross-machine message: not connected to cloud');
759
- return false;
760
- }
761
- try {
762
- await this.cloudSync.sendCrossMachineMessage(targetDaemonId, targetAgent, fromAgent, content, metadata);
763
- return true;
764
- }
765
- catch (err) {
766
- log.error('Failed to send cross-machine message', { error: String(err) });
767
- return false;
768
- }
769
- }
770
- /**
771
- * Get list of remote agents (from other machines).
772
- */
773
- getRemoteAgents() {
774
- return this.remoteAgents;
775
- }
776
- /**
777
- * Check if an agent is on a remote machine.
778
- */
779
- isRemoteAgent(agentName) {
780
- return this.remoteAgents.find(a => a.name === agentName);
781
- }
782
- /**
783
- * Check if a user is on a remote machine (connected via cloud dashboard).
784
- */
785
- isRemoteUser(userName) {
786
- return this.remoteUsers.find(u => u.name === userName);
787
- }
788
- /**
789
- * Notify cloud sync about local agent changes.
790
- * Debounced to prevent flooding the cloud API with rapid connect/disconnect events.
791
- */
792
- notifyCloudSync() {
793
- if (!this.cloudSync?.isConnected())
794
- return;
795
- // Debounce: clear any pending sync and schedule a new one
796
- if (this.cloudSyncDebounceTimer) {
797
- clearTimeout(this.cloudSyncDebounceTimer);
798
- }
799
- this.cloudSyncDebounceTimer = setTimeout(() => {
800
- this.cloudSyncDebounceTimer = undefined;
801
- this.doCloudSync();
802
- }, 1000); // 1 second debounce
803
- }
804
- /**
805
- * Actually perform the cloud sync (called after debounce).
806
- */
807
- doCloudSync() {
808
- if (!this.cloudSync?.isConnected())
809
- return;
810
- // Get AI agents (exclude internal ones like Dashboard)
811
- const aiAgents = Array.from(this.connections)
812
- .filter(c => {
813
- if (!c.agentName)
814
- return false;
815
- if (c.entityType === 'user')
816
- return false;
817
- if (this.isInternalAgent(c.agentName))
818
- return false;
819
- return true;
820
- })
821
- .map(c => ({
822
- name: c.agentName,
823
- status: 'online',
824
- isHuman: false,
825
- }));
826
- // Get human users (entityType === 'user', exclude Dashboard)
827
- const humanUsers = Array.from(this.connections)
828
- .filter(c => {
829
- if (!c.agentName)
830
- return false;
831
- if (c.entityType !== 'user')
832
- return false;
833
- if (this.isInternalAgent(c.agentName))
834
- return false;
835
- return true;
836
- })
837
- .map(c => ({
838
- name: c.agentName,
839
- status: 'online',
840
- isHuman: true,
841
- avatarUrl: c.avatarUrl,
842
- }));
843
- this.cloudSync.updateAgents([...aiAgents, ...humanUsers]);
844
- }
845
- /**
846
- * Check if an agent is internal (should be hidden from cloud sync and listings).
847
- */
848
- isInternalAgent(name) {
849
- if (name.startsWith('__'))
850
- return true;
851
- // Dashboard and cli are internal system agents
852
- return name === 'Dashboard' || name === 'cli';
853
- }
854
- /**
855
- * Stop the daemon.
856
- */
857
- async stop() {
858
- if (!this.running)
859
- return;
860
- // Mark as shutting down to prevent race conditions with state file writes
861
- this.shuttingDown = true;
862
- // Track daemon stop
863
- const uptimeSeconds = this.startTime
864
- ? Math.floor((Date.now() - this.startTime) / 1000)
865
- : 0;
866
- track('daemon_stop', {
867
- uptime_seconds: uptimeSeconds,
868
- agent_spawn_count: this.agentSpawnCount,
869
- });
870
- // Shutdown telemetry (flush pending events)
871
- await shutdownTelemetry();
872
- // Stop cloud sync
873
- if (this.cloudSync) {
874
- this.cloudSync.stop();
875
- this.cloudSync = undefined;
876
- }
877
- // Clear cloud sync debounce timer
878
- if (this.cloudSyncDebounceTimer) {
879
- clearTimeout(this.cloudSyncDebounceTimer);
880
- this.cloudSyncDebounceTimer = undefined;
881
- }
882
- // Stop processing state updates
883
- if (this.processingStateInterval) {
884
- clearInterval(this.processingStateInterval);
885
- this.processingStateInterval = undefined;
886
- }
887
- // Close all active connections
888
- for (const connection of this.connections) {
889
- connection.close();
890
- }
891
- this.connections.clear();
892
- return new Promise((resolve) => {
893
- this.server.close(() => {
894
- this.running = false;
895
- // Clean up socket file
896
- if (fs.existsSync(this.config.socketPath)) {
897
- fs.unlinkSync(this.config.socketPath);
898
- }
899
- // Clean up pid file
900
- if (fs.existsSync(this.config.pidFilePath)) {
901
- fs.unlinkSync(this.config.pidFilePath);
902
- }
903
- // Clear runtime config
904
- try {
905
- clearRuntimeConfig();
906
- }
907
- catch {
908
- // Ignore errors during shutdown
909
- }
910
- // Remove active daemon marker only if we own it
911
- try {
912
- const markerPath = path.join(os.homedir(), '.agent-relay', 'active-daemon.json');
913
- if (fs.existsSync(markerPath)) {
914
- const marker = JSON.parse(fs.readFileSync(markerPath, 'utf-8'));
915
- if (marker.pid === process.pid) {
916
- fs.unlinkSync(markerPath);
917
- }
918
- }
919
- }
920
- catch {
921
- // Ignore errors during shutdown
922
- }
923
- if (this.storage?.close) {
924
- this.storage.close().catch((err) => {
925
- log.error('Failed to close storage', { error: String(err) });
926
- });
927
- }
928
- log.info('Stopped');
929
- resolve();
930
- });
931
- });
932
- }
933
- /**
934
- * Handle new connection.
935
- */
936
- handleConnection(socket) {
937
- log.debug('New connection');
938
- const resumeHandler = this.storage?.getSessionByResumeToken
939
- ? async ({ agent, resumeToken }) => {
940
- const session = await this.storage.getSessionByResumeToken(resumeToken);
941
- if (!session || session.agentName !== agent)
942
- return null;
943
- let seedSequences;
944
- if (this.storage?.getMaxSeqByStream) {
945
- const streams = await this.storage.getMaxSeqByStream(agent, session.id);
946
- seedSequences = streams.map(s => ({
947
- topic: s.topic ?? 'default',
948
- peer: s.peer,
949
- seq: s.maxSeq,
950
- }));
951
- }
952
- return {
953
- sessionId: session.id,
954
- resumeToken: session.resumeToken ?? resumeToken,
955
- seedSequences,
956
- };
957
- }
958
- : undefined;
959
- // Provide processing state callback for heartbeat exemption
960
- const isProcessing = (agentName) => this.router.isAgentProcessing(agentName);
961
- const connection = new Connection(socket, { ...this.config, resumeHandler, isProcessing });
962
- this.connections.add(connection);
963
- connection.onMessage = (envelope) => {
964
- this.handleMessage(connection, envelope);
965
- };
966
- connection.onAck = (envelope) => {
967
- this.handleAck(connection, envelope);
968
- };
969
- // Update lastSeen on successful heartbeat to keep agent status fresh
970
- connection.onPong = () => {
971
- if (connection.agentName) {
972
- this.registry?.touch(connection.agentName);
973
- }
974
- };
975
- // Register agent when connection becomes active (after successful handshake)
976
- connection.onActive = () => {
977
- if (connection.agentName) {
978
- this.router.register(connection);
979
- log.info('Agent registered', { agent: connection.agentName });
980
- // Registry handles persistence internally via save()
981
- this.registry?.registerOrUpdate({
982
- name: connection.agentName,
983
- cli: connection.cli,
984
- program: connection.program,
985
- model: connection.model,
986
- task: connection.task,
987
- workingDirectory: connection.workingDirectory,
988
- team: connection.team,
989
- });
990
- // Auto-join all agents to #general channel
991
- this.router.autoJoinChannel(connection.agentName, '#general');
992
- // Record session start
993
- if (this.storage?.startSession) {
994
- const projectPaths = getProjectPaths();
995
- const storage = this.storage;
996
- const persistSession = async () => {
997
- let startedAt = Date.now();
998
- if (connection.isResumed && storage.getSessionByResumeToken) {
999
- const existing = await storage.getSessionByResumeToken(connection.resumeToken);
1000
- if (existing?.startedAt) {
1001
- startedAt = existing.startedAt;
1002
- }
1003
- }
1004
- await storage.startSession({
1005
- id: connection.sessionId,
1006
- agentName: connection.agentName,
1007
- cli: connection.cli,
1008
- projectId: projectPaths.projectId,
1009
- projectRoot: projectPaths.projectRoot,
1010
- startedAt,
1011
- resumeToken: connection.resumeToken,
1012
- });
1013
- };
1014
- persistSession().catch(err => log.error('Failed to record session start', { error: String(err) }));
1015
- }
1016
- }
1017
- // Replay pending deliveries for resumed sessions (unacked messages from previous session)
1018
- if (connection.isResumed) {
1019
- this.router.replayPending(connection).catch(err => {
1020
- log.error('Failed to replay pending messages', { error: String(err) });
1021
- });
1022
- }
1023
- // Deliver any messages that were sent while this agent was offline
1024
- // This handles messages sent during spawn timing gaps or brief disconnections
1025
- this.router.deliverPendingMessages(connection).catch(err => {
1026
- log.error('Failed to deliver pending messages', { error: String(err) });
1027
- });
1028
- // Auto-rejoin channels that the agent was a member of before daemon restart
1029
- // This restores channel memberships from persisted storage (cloud DB or SQLite)
1030
- if (connection.agentName) {
1031
- this.router.autoRejoinChannelsForAgent(connection.agentName).catch(err => {
1032
- log.error('Failed to auto-rejoin channels', { error: String(err) });
1033
- });
1034
- }
1035
- // Notify cloud sync about agent changes
1036
- this.notifyCloudSync();
1037
- // Update connected agents file for CLI
1038
- this.writeConnectedAgentsFile();
1039
- // Broadcast AGENT_READY event to all connected clients
1040
- // This allows spawning clients to know when their spawned agent is ready
1041
- if (connection.agentName) {
1042
- this.broadcastAgentReady(connection);
1043
- }
1044
- };
1045
- connection.onClose = () => {
1046
- log.debug('Connection closed', { agent: connection.agentName ?? connection.id });
1047
- this.connections.delete(connection);
1048
- this.clearPendingAcksForConnection(connection.id);
1049
- this.router.unregister(connection);
1050
- // Registry handles persistence internally via touch() -> save()
1051
- if (connection.agentName) {
1052
- this.registry?.touch(connection.agentName);
1053
- }
1054
- // Record session end (disconnect - agent may still mark it closed explicitly)
1055
- if (this.storage?.endSession) {
1056
- this.storage.endSession(connection.sessionId, { closedBy: 'disconnect' })
1057
- .catch(err => log.error('Failed to record session end', { error: String(err) }));
1058
- }
1059
- // Notify cloud sync about agent changes
1060
- this.notifyCloudSync();
1061
- // Update connected agents file for CLI
1062
- this.writeConnectedAgentsFile();
1063
- };
1064
- connection.onError = (error) => {
1065
- log.error('Connection error', { error: error.message });
1066
- this.connections.delete(connection);
1067
- this.clearPendingAcksForConnection(connection.id);
1068
- this.router.unregister(connection);
1069
- // Registry handles persistence internally via touch() -> save()
1070
- if (connection.agentName) {
1071
- this.registry?.touch(connection.agentName);
1072
- }
1073
- // Record session end on error
1074
- if (this.storage?.endSession) {
1075
- this.storage.endSession(connection.sessionId, { closedBy: 'error' })
1076
- .catch(err => log.error('Failed to record session end', { error: String(err) }));
1077
- }
1078
- // Update connected agents file for CLI
1079
- this.writeConnectedAgentsFile();
1080
- };
1081
- }
1082
- /**
1083
- * Handle incoming message from a connection.
1084
- */
1085
- handleMessage(connection, envelope) {
1086
- switch (envelope.type) {
1087
- case 'SEND': {
1088
- const sendEnvelope = envelope;
1089
- const membershipUpdate = sendEnvelope.payload.data?._channelMembershipUpdate;
1090
- if (membershipUpdate && sendEnvelope.to === '_router') {
1091
- this.router.handleMembershipUpdate({
1092
- channel: membershipUpdate.channel ?? '',
1093
- member: membershipUpdate.member ?? '',
1094
- action: membershipUpdate.action ?? 'join',
1095
- });
1096
- return;
1097
- }
1098
- // Check for consensus commands (messages to _consensus)
1099
- if (this.consensus?.enabled && sendEnvelope.to === '_consensus') {
1100
- const from = connection.agentName ?? 'unknown';
1101
- const result = this.consensus.processIncomingMessage(from, sendEnvelope.payload.body);
1102
- if (result.isConsensusCommand) {
1103
- log.info(`Consensus ${result.type} from ${from}`, {
1104
- success: result.result?.success,
1105
- proposalId: result.result?.proposal?.id,
1106
- });
1107
- // Don't route consensus commands to the router
1108
- return;
1109
- }
1110
- }
1111
- const syncMeta = sendEnvelope.payload_meta?.sync;
1112
- if (syncMeta?.blocking) {
1113
- if (!syncMeta.correlationId) {
1114
- this.sendErrorEnvelope(connection, 'Missing sync correlationId for blocking SEND');
1115
- return;
1116
- }
1117
- const registered = this.registerPendingAck(connection, syncMeta.correlationId, syncMeta.timeoutMs);
1118
- if (!registered) {
1119
- return;
1120
- }
1121
- }
1122
- this.router.route(connection, sendEnvelope);
1123
- break;
1124
- }
1125
- case 'SUBSCRIBE':
1126
- if (connection.agentName && envelope.topic) {
1127
- this.router.subscribe(connection.agentName, envelope.topic);
1128
- }
1129
- break;
1130
- case 'UNSUBSCRIBE':
1131
- if (connection.agentName && envelope.topic) {
1132
- this.router.unsubscribe(connection.agentName, envelope.topic);
1133
- }
1134
- break;
1135
- case 'SHADOW_BIND':
1136
- if (connection.agentName) {
1137
- const payload = envelope.payload;
1138
- this.router.bindShadow(connection.agentName, payload.primaryAgent, {
1139
- speakOn: payload.speakOn,
1140
- receiveIncoming: payload.receiveIncoming,
1141
- receiveOutgoing: payload.receiveOutgoing,
1142
- });
1143
- }
1144
- break;
1145
- case 'SHADOW_UNBIND':
1146
- if (connection.agentName) {
1147
- const payload = envelope.payload;
1148
- // Verify the shadow is actually bound to the specified primary
1149
- const currentPrimary = this.router.getPrimaryForShadow(connection.agentName);
1150
- if (currentPrimary === payload.primaryAgent) {
1151
- this.router.unbindShadow(connection.agentName);
1152
- }
1153
- }
1154
- break;
1155
- case 'LOG':
1156
- // Handle log output from daemon-connected agents
1157
- if (connection.agentName) {
1158
- const payload = envelope.payload;
1159
- const timestamp = payload.timestamp ?? envelope.ts;
1160
- // Forward to dashboard via callback
1161
- if (this.onLogOutput) {
1162
- this.onLogOutput(connection.agentName, payload.data, timestamp);
1163
- }
1164
- }
1165
- break;
1166
- // Channel messaging handlers
1167
- case 'CHANNEL_JOIN': {
1168
- const channelEnvelope = envelope;
1169
- log.info(`Channel join: ${connection.agentName} -> ${channelEnvelope.payload.channel}`);
1170
- this.router.handleChannelJoin(connection, channelEnvelope);
1171
- break;
1172
- }
1173
- case 'CHANNEL_LEAVE': {
1174
- const channelEnvelope = envelope;
1175
- log.info(`Channel leave: ${connection.agentName} <- ${channelEnvelope.payload.channel}`);
1176
- this.router.handleChannelLeave(connection, channelEnvelope);
1177
- break;
1178
- }
1179
- case 'CHANNEL_MESSAGE': {
1180
- const channelEnvelope = envelope;
1181
- log.info(`CHANNEL_MESSAGE received: from=${connection.agentName} channel=${channelEnvelope.payload.channel}`);
1182
- this.router.routeChannelMessage(connection, channelEnvelope);
1183
- break;
1184
- }
1185
- // Spawn/release handlers (protocol-based agent spawning)
1186
- case 'SPAWN': {
1187
- if (!this.spawnManager) {
1188
- this.sendErrorEnvelope(connection, 'SpawnManager not enabled. Configure spawnManager: true in daemon config.');
1189
- break;
1190
- }
1191
- const spawnEnvelope = envelope;
1192
- log.info(`SPAWN request: from=${connection.agentName} agent=${spawnEnvelope.payload.name} cli=${spawnEnvelope.payload.cli}`);
1193
- this.spawnManager.handleSpawn(connection, spawnEnvelope);
1194
- break;
1195
- }
1196
- case 'RELEASE': {
1197
- if (!this.spawnManager) {
1198
- this.sendErrorEnvelope(connection, 'SpawnManager not enabled. Configure spawnManager: true in daemon config.');
1199
- break;
1200
- }
1201
- const releaseEnvelope = envelope;
1202
- log.info(`RELEASE request: from=${connection.agentName} agent=${releaseEnvelope.payload.name}`);
1203
- this.spawnManager.handleRelease(connection, releaseEnvelope);
1204
- break;
1205
- }
1206
- case 'SEND_INPUT': {
1207
- if (!this.spawnManager) {
1208
- this.sendErrorEnvelope(connection, 'SpawnManager not enabled. Configure spawnManager: true in daemon config.');
1209
- break;
1210
- }
1211
- const sendInputEnvelope = envelope;
1212
- log.info(`SEND_INPUT request: from=${connection.agentName} agent=${sendInputEnvelope.payload.name}`);
1213
- this.spawnManager.handleSendInput(connection, sendInputEnvelope);
1214
- break;
1215
- }
1216
- case 'SET_MODEL': {
1217
- if (!this.spawnManager) {
1218
- this.sendErrorEnvelope(connection, 'SpawnManager not enabled. Configure spawnManager: true in daemon config.');
1219
- break;
1220
- }
1221
- const setModelEnvelope = envelope;
1222
- log.info(`SET_MODEL request: from=${connection.agentName} agent=${setModelEnvelope.payload.name} model=${setModelEnvelope.payload.model}`);
1223
- this.spawnManager.handleSetModel(connection, setModelEnvelope);
1224
- break;
1225
- }
1226
- case 'LIST_WORKERS': {
1227
- if (!this.spawnManager) {
1228
- this.sendErrorEnvelope(connection, 'SpawnManager not enabled. Configure spawnManager: true in daemon config.');
1229
- break;
1230
- }
1231
- const listWorkersEnvelope = envelope;
1232
- log.info(`LIST_WORKERS request: from=${connection.agentName}`);
1233
- this.spawnManager.handleListWorkers(connection, listWorkersEnvelope);
1234
- break;
1235
- }
1236
- // Query handlers (MCP/client requests)
1237
- case 'STATUS': {
1238
- const uptimeMs = this.startTime ? Date.now() - this.startTime : 0;
1239
- const sendStatus = async () => {
1240
- let storageHealth;
1241
- if (this.storage?.healthCheck) {
1242
- try {
1243
- storageHealth = await this.storage.healthCheck();
1244
- this.storageHealth = storageHealth;
1245
- }
1246
- catch (err) {
1247
- log.warn('STATUS: storage health check failed', { error: String(err) });
1248
- storageHealth = this.storageHealth;
1249
- }
1250
- }
1251
- const response = {
1252
- v: PROTOCOL_VERSION,
1253
- type: 'STATUS_RESPONSE',
1254
- id: envelope.id,
1255
- ts: Date.now(),
1256
- payload: {
1257
- version: DAEMON_VERSION,
1258
- uptime: uptimeMs,
1259
- cloudConnected: this.cloudSync?.isConnected() ?? false,
1260
- agentCount: this.router.connectionCount,
1261
- storage: storageHealth,
1262
- },
1263
- };
1264
- connection.send(response);
1265
- };
1266
- sendStatus().catch(err => {
1267
- log.error('Failed to send STATUS response', { error: String(err) });
1268
- });
1269
- break;
1270
- }
1271
- case 'INBOX': {
1272
- const inboxPayload = envelope.payload;
1273
- const agentName = inboxPayload.agent || connection.agentName;
1274
- // Get messages from storage
1275
- const getInboxMessages = async () => {
1276
- if (!this.storage?.getMessages) {
1277
- return [];
1278
- }
1279
- try {
1280
- // If channel is specified, get channel messages; otherwise get DMs to agent
1281
- const toFilter = inboxPayload.channel || agentName;
1282
- const messages = await this.storage.getMessages({
1283
- to: toFilter,
1284
- from: inboxPayload.from,
1285
- limit: inboxPayload.limit || 50,
1286
- unreadOnly: inboxPayload.unreadOnly,
1287
- });
1288
- return messages.map(m => ({
1289
- id: m.id,
1290
- from: m.from,
1291
- body: m.body,
1292
- channel: m.data?.channel,
1293
- thread: m.thread,
1294
- timestamp: m.ts,
1295
- }));
1296
- }
1297
- catch {
1298
- return [];
1299
- }
1300
- };
1301
- getInboxMessages().then(messages => {
1302
- const response = {
1303
- v: PROTOCOL_VERSION,
1304
- type: 'INBOX_RESPONSE',
1305
- id: envelope.id,
1306
- ts: Date.now(),
1307
- payload: { messages },
1308
- };
1309
- connection.send(response);
1310
- }).catch(err => {
1311
- this.sendErrorEnvelope(connection, `Failed to get inbox: ${err.message}`);
1312
- });
1313
- break;
1314
- }
1315
- case 'MESSAGES_QUERY': {
1316
- // Query all messages (used by dashboard) - not filtered by recipient
1317
- const queryPayload = envelope.payload;
1318
- const getMessages = async () => {
1319
- if (!this.storage?.getMessages) {
1320
- return [];
1321
- }
1322
- try {
1323
- const messages = await this.storage.getMessages({
1324
- limit: queryPayload.limit || 100,
1325
- sinceTs: queryPayload.sinceTs,
1326
- from: queryPayload.from,
1327
- to: queryPayload.to,
1328
- thread: queryPayload.thread,
1329
- order: queryPayload.order || 'desc',
1330
- });
1331
- return messages.map(m => ({
1332
- id: m.id,
1333
- from: m.from,
1334
- to: m.to,
1335
- body: m.body,
1336
- channel: m.data?.channel,
1337
- thread: m.thread,
1338
- timestamp: m.ts,
1339
- status: m.status,
1340
- isBroadcast: m.is_broadcast,
1341
- replyCount: m.replyCount,
1342
- data: m.data,
1343
- }));
1344
- }
1345
- catch {
1346
- return [];
1347
- }
1348
- };
1349
- getMessages().then(messages => {
1350
- const response = {
1351
- v: PROTOCOL_VERSION,
1352
- type: 'MESSAGES_RESPONSE',
1353
- id: envelope.id,
1354
- ts: Date.now(),
1355
- payload: { messages },
1356
- };
1357
- connection.send(response);
1358
- }).catch(err => {
1359
- this.sendErrorEnvelope(connection, `Failed to get messages: ${err.message}`);
1360
- });
1361
- break;
1362
- }
1363
- case 'LIST_AGENTS': {
1364
- const listPayload = envelope.payload;
1365
- // Get connected agents from router
1366
- const connectedAgents = this.router.getAgents();
1367
- // Get all agents from registry for metadata lookup
1368
- const registryAgents = this.registry?.getAgents() ?? [];
1369
- const registryMap = new Map(registryAgents.map(a => [a.name, a]));
1370
- // Get active workers from spawn manager for PID lookup
1371
- const activeWorkers = this.spawnManager?.getActiveWorkers() ?? [];
1372
- const workerMap = new Map(activeWorkers.map(w => [w.name, w]));
1373
- // Build agent list from connected agents
1374
- const agents = connectedAgents
1375
- .filter(name => !this.isInternalAgent(name))
1376
- .map(name => {
1377
- const registryAgent = registryMap.get(name);
1378
- const conn = this.router.getConnection(name);
1379
- const worker = workerMap.get(name);
1380
- return {
1381
- name,
1382
- cli: conn?.cli ?? registryAgent?.cli,
1383
- idle: false, // Connected agents are not idle
1384
- parent: worker?.spawnerName,
1385
- team: conn?.team ?? worker?.team,
1386
- pid: worker?.pid,
1387
- };
1388
- });
1389
- // Optionally include idle agents from registry
1390
- if (listPayload.includeIdle && this.registry) {
1391
- for (const agent of registryAgents) {
1392
- if (!connectedAgents.includes(agent.name) && !this.isInternalAgent(agent.name)) {
1393
- agents.push({
1394
- name: agent.name,
1395
- cli: agent.cli,
1396
- idle: true,
1397
- parent: undefined,
1398
- team: agent.team,
1399
- pid: undefined,
1400
- });
1401
- }
1402
- }
1403
- }
1404
- const response = {
1405
- v: PROTOCOL_VERSION,
1406
- type: 'LIST_AGENTS_RESPONSE',
1407
- id: envelope.id,
1408
- ts: Date.now(),
1409
- payload: { agents },
1410
- };
1411
- connection.send(response);
1412
- break;
1413
- }
1414
- case 'LIST_CONNECTED_AGENTS': {
1415
- // Returns only currently connected agents (not historical/registered agents)
1416
- const connectedAgentNames = this.router.getAgents();
1417
- const registryAgents = this.registry?.getAgents() ?? [];
1418
- const registryMap = new Map(registryAgents.map(a => [a.name, a]));
1419
- // Get active workers from spawn manager for PID lookup
1420
- const workers = this.spawnManager?.getActiveWorkers() ?? [];
1421
- const workersByName = new Map(workers.map(w => [w.name, w]));
1422
- const agents = connectedAgentNames
1423
- .filter(name => !this.isInternalAgent(name))
1424
- .map(name => {
1425
- const registryAgent = registryMap.get(name);
1426
- const conn = this.router.getConnection(name);
1427
- const worker = workersByName.get(name);
1428
- return {
1429
- name,
1430
- cli: conn?.cli ?? registryAgent?.cli,
1431
- idle: false,
1432
- parent: worker?.spawnerName,
1433
- team: conn?.team ?? worker?.team,
1434
- pid: worker?.pid,
1435
- };
1436
- });
1437
- const connectedResponse = {
1438
- v: PROTOCOL_VERSION,
1439
- type: 'LIST_CONNECTED_AGENTS_RESPONSE',
1440
- id: envelope.id,
1441
- ts: Date.now(),
1442
- payload: { agents },
1443
- };
1444
- connection.send(connectedResponse);
1445
- break;
1446
- }
1447
- case 'REMOVE_AGENT': {
1448
- const removePayload = envelope.payload;
1449
- const agentName = removePayload.name;
1450
- // Validate agent name
1451
- if (!agentName || typeof agentName !== 'string' || agentName.length === 0) {
1452
- const errorResponse = {
1453
- v: PROTOCOL_VERSION,
1454
- type: 'REMOVE_AGENT_RESPONSE',
1455
- id: envelope.id,
1456
- ts: Date.now(),
1457
- payload: { success: false, removed: false, message: 'Invalid agent name: name is required' },
1458
- };
1459
- connection.send(errorResponse);
1460
- break;
1461
- }
1462
- if (agentName.length > 128) {
1463
- const errorResponse = {
1464
- v: PROTOCOL_VERSION,
1465
- type: 'REMOVE_AGENT_RESPONSE',
1466
- id: envelope.id,
1467
- ts: Date.now(),
1468
- payload: { success: false, removed: false, message: 'Invalid agent name: exceeds 128 characters' },
1469
- };
1470
- connection.send(errorResponse);
1471
- break;
1472
- }
1473
- const doRemove = async () => {
1474
- let removed = false;
1475
- let message = '';
1476
- // Remove from registry (agents.json)
1477
- if (this.registry) {
1478
- const wasInRegistry = this.registry.getAgents().some(a => a.name === agentName);
1479
- if (wasInRegistry) {
1480
- this.registry.remove(agentName);
1481
- removed = true;
1482
- message = `Removed ${agentName} from registry`;
1483
- }
1484
- }
1485
- // Remove from storage (sessions table) if storage is available
1486
- if (this.storage?.removeAgent) {
1487
- await this.storage.removeAgent(agentName);
1488
- if (!removed) {
1489
- removed = true;
1490
- message = `Removed ${agentName} from storage`;
1491
- }
1492
- else {
1493
- message += ' and storage';
1494
- }
1495
- }
1496
- // Optionally remove messages
1497
- if (removePayload.removeMessages && this.storage?.removeMessagesForAgent) {
1498
- await this.storage.removeMessagesForAgent(agentName);
1499
- message += ' (including messages)';
1500
- }
1501
- // Force remove from router if still connected (shouldn't be, but just in case)
1502
- if (this.router.forceRemoveAgent(agentName)) {
1503
- message += ', disconnected from router';
1504
- // Notify cloud sync and update connected-agents.json
1505
- this.notifyCloudSync();
1506
- this.writeConnectedAgentsFile();
1507
- }
1508
- if (!removed) {
1509
- message = `Agent ${agentName} not found in registry or storage`;
1510
- }
1511
- return { removed, message };
1512
- };
1513
- doRemove().then(({ removed, message }) => {
1514
- const removeResponse = {
1515
- v: PROTOCOL_VERSION,
1516
- type: 'REMOVE_AGENT_RESPONSE',
1517
- id: envelope.id,
1518
- ts: Date.now(),
1519
- payload: { success: removed, removed, message },
1520
- };
1521
- connection.send(removeResponse);
1522
- }).catch(err => {
1523
- const removeResponse = {
1524
- v: PROTOCOL_VERSION,
1525
- type: 'REMOVE_AGENT_RESPONSE',
1526
- id: envelope.id,
1527
- ts: Date.now(),
1528
- payload: { success: false, removed: false, message: `Error: ${err.message}` },
1529
- };
1530
- connection.send(removeResponse);
1531
- });
1532
- break;
1533
- }
1534
- case 'HEALTH': {
1535
- const healthPayload = envelope.payload;
1536
- // Compute health based on available data
1537
- const connectedAgents = this.router.getAgents();
1538
- const registryAgents = this.registry?.getAgents() ?? [];
1539
- const agentCount = connectedAgents.filter(n => !this.isInternalAgent(n)).length;
1540
- // Basic health computation
1541
- const issues = [];
1542
- const recommendations = [];
1543
- let healthScore = 100;
1544
- // Check for memory issues via memory monitor
1545
- const memoryMonitor = getMemoryMonitor();
1546
- const memoryMetrics = memoryMonitor.getAll();
1547
- const criticalAgents = memoryMetrics.filter(m => m.alertLevel === 'critical');
1548
- const warningAgents = memoryMetrics.filter(m => m.alertLevel === 'warning');
1549
- if (criticalAgents.length > 0) {
1550
- healthScore -= 30;
1551
- for (const agent of criticalAgents) {
1552
- issues.push({ severity: 'critical', message: `${agent.name} has critical memory usage` });
1553
- }
1554
- recommendations.push('Consider releasing some agents to free memory');
1555
- }
1556
- if (warningAgents.length > 0) {
1557
- healthScore -= 10;
1558
- for (const agent of warningAgents) {
1559
- issues.push({ severity: 'warning', message: `${agent.name} has high memory usage` });
1560
- }
1561
- }
1562
- // Check cloud sync status
1563
- if (!this.cloudSync?.isConnected()) {
1564
- issues.push({ severity: 'info', message: 'Cloud sync not connected' });
1565
- }
1566
- const summary = healthScore >= 80 ? 'System is healthy' :
1567
- healthScore >= 50 ? 'System has some issues' :
1568
- 'System needs attention';
1569
- const healthResponse = {
1570
- v: PROTOCOL_VERSION,
1571
- type: 'HEALTH_RESPONSE',
1572
- id: envelope.id,
1573
- ts: Date.now(),
1574
- payload: {
1575
- healthScore: Math.max(0, healthScore),
1576
- summary,
1577
- issues,
1578
- recommendations,
1579
- crashes: [], // Would need crash tracking implementation
1580
- alerts: [], // Would need alert tracking implementation
1581
- stats: {
1582
- totalCrashes24h: 0,
1583
- totalAlerts24h: 0,
1584
- agentCount,
1585
- },
1586
- },
1587
- };
1588
- connection.send(healthResponse);
1589
- break;
1590
- }
1591
- case 'METRICS': {
1592
- const metricsPayload = envelope.payload;
1593
- // Get metrics from memory monitor
1594
- const memoryMonitor = getMemoryMonitor();
1595
- let metrics = memoryMonitor.getAll();
1596
- // Filter to specific agent if requested
1597
- if (metricsPayload.agent) {
1598
- metrics = metrics.filter(m => m.name === metricsPayload.agent);
1599
- }
1600
- // Convert to response format
1601
- const agents = metrics.map(m => ({
1602
- name: m.name,
1603
- pid: m.pid,
1604
- status: m.alertLevel === 'normal' ? 'running' : m.alertLevel,
1605
- rssBytes: m.current.rssBytes,
1606
- cpuPercent: m.current.cpuPercent,
1607
- trend: m.trend,
1608
- alertLevel: m.alertLevel,
1609
- highWatermark: m.highWatermark,
1610
- uptimeMs: m.uptimeMs,
1611
- }));
1612
- // System metrics
1613
- const system = {
1614
- totalMemory: os.totalmem(),
1615
- freeMemory: os.freemem(),
1616
- heapUsed: process.memoryUsage().heapUsed,
1617
- };
1618
- const metricsResponse = {
1619
- v: PROTOCOL_VERSION,
1620
- type: 'METRICS_RESPONSE',
1621
- id: envelope.id,
1622
- ts: Date.now(),
1623
- payload: { agents, system },
1624
- };
1625
- connection.send(metricsResponse);
1626
- break;
1627
- }
1628
- }
1629
- }
1630
- handleAck(connection, envelope) {
1631
- this.router.handleAck(connection, envelope);
1632
- const correlationId = envelope.payload.correlationId;
1633
- if (!correlationId)
1634
- return;
1635
- const pending = this.pendingAcks.get(correlationId);
1636
- if (!pending)
1637
- return;
1638
- clearTimeout(pending.timeoutHandle);
1639
- this.pendingAcks.delete(correlationId);
1640
- const forwardAck = {
1641
- v: envelope.v,
1642
- type: 'ACK',
1643
- id: generateId(),
1644
- ts: Date.now(),
1645
- from: connection.agentName,
1646
- to: pending.connection.agentName,
1647
- payload: envelope.payload,
1648
- };
1649
- pending.connection.send(forwardAck);
1650
- }
1651
- registerPendingAck(connection, correlationId, timeoutMs) {
1652
- if (this.pendingAcks.has(correlationId)) {
1653
- this.sendErrorEnvelope(connection, `Duplicate correlationId: ${correlationId}`);
1654
- return false;
1655
- }
1656
- const timeout = timeoutMs ?? Daemon.DEFAULT_SYNC_TIMEOUT_MS;
1657
- const timeoutHandle = setTimeout(() => {
1658
- this.pendingAcks.delete(correlationId);
1659
- this.sendErrorEnvelope(connection, `ACK timeout after ${timeout}ms`);
1660
- }, timeout);
1661
- this.pendingAcks.set(correlationId, {
1662
- correlationId,
1663
- connectionId: connection.id,
1664
- connection,
1665
- timeoutHandle,
1666
- });
1667
- return true;
1668
- }
1669
- clearPendingAcksForConnection(connectionId) {
1670
- for (const [correlationId, pending] of this.pendingAcks.entries()) {
1671
- if (pending.connectionId !== connectionId)
1672
- continue;
1673
- clearTimeout(pending.timeoutHandle);
1674
- this.pendingAcks.delete(correlationId);
1675
- }
1676
- }
1677
- sendErrorEnvelope(connection, message) {
1678
- const errorEnvelope = {
1679
- v: PROTOCOL_VERSION,
1680
- type: 'ERROR',
1681
- id: generateId(),
1682
- ts: Date.now(),
1683
- payload: {
1684
- code: 'INTERNAL',
1685
- message,
1686
- fatal: false,
1687
- },
1688
- };
1689
- connection.send(errorEnvelope);
1690
- }
1691
- /**
1692
- * Get list of connected agents.
1693
- */
1694
- getAgents() {
1695
- return this.router.getAgents();
1696
- }
1697
- /**
1698
- * Broadcast a system message to all connected agents.
1699
- * Used for system notifications like agent death announcements.
1700
- */
1701
- broadcastSystemMessage(message, data) {
1702
- this.router.broadcastSystemMessage(message, data);
1703
- }
1704
- /**
1705
- * Broadcast AGENT_READY event when an agent completes connection.
1706
- * This allows spawning clients to know when their spawned agent is ready to receive messages.
1707
- */
1708
- broadcastAgentReady(connection) {
1709
- const payload = {
1710
- name: connection.agentName,
1711
- cli: connection.cli,
1712
- task: connection.task,
1713
- connectedAt: Date.now(),
1714
- };
1715
- const envelope = {
1716
- v: PROTOCOL_VERSION,
1717
- type: 'AGENT_READY',
1718
- id: generateId(),
1719
- ts: Date.now(),
1720
- payload,
1721
- };
1722
- // Broadcast to all connections except the one that just connected
1723
- for (const conn of this.connections) {
1724
- if (conn.id !== connection.id && conn.state === 'ACTIVE') {
1725
- conn.send(envelope);
1726
- }
1727
- }
1728
- log.info('Broadcast AGENT_READY', { agent: connection.agentName });
1729
- }
1730
- /**
1731
- * Get connection count.
1732
- */
1733
- get connectionCount() {
1734
- return this.router.connectionCount;
1735
- }
1736
- /**
1737
- * Check if daemon is running.
1738
- */
1739
- get isRunning() {
1740
- return this.running;
1741
- }
1742
- /**
1743
- * Check if consensus is enabled.
1744
- */
1745
- get consensusEnabled() {
1746
- return this.consensus?.enabled ?? false;
1747
- }
1748
- /**
1749
- * Get the consensus integration (for API access).
1750
- */
1751
- getConsensus() {
1752
- return this.consensus;
1753
- }
1754
- /**
1755
- * Get the SpawnManager instance.
1756
- * Used by co-located services (e.g. dashboard-server) to access
1757
- * spawner read operations (logs, worker listing) without going
1758
- * through the protocol socket.
1759
- */
1760
- getSpawnManager() {
1761
- return this.spawnManager;
1762
- }
1763
- }
1764
- // Run as standalone if executed directly (not in bundled CLI)
1765
- // In bundled builds, AGENT_RELAY_VERSION is defined, so we skip auto-start
1766
- // The CLI handles daemon startup via the 'up' command
1767
- // Also verify the script path ends with server.ts/server.js to avoid triggering
1768
- // inside Bun compiled binaries (e.g., dashboard binary) that bundle this file
1769
- const scriptPath = new URL(import.meta.url).pathname;
1770
- const isServerScript = scriptPath.endsWith('/server.ts') || scriptPath.endsWith('/server.js');
1771
- const isMainModule = isServerScript &&
1772
- import.meta.url === `file://${process.argv[1]}` &&
1773
- !process.env.AGENT_RELAY_VERSION;
1774
- if (isMainModule) {
1775
- const daemon = new Daemon();
1776
- process.on('SIGINT', async () => {
1777
- log.info('Shutting down (SIGINT)');
1778
- await daemon.stop();
1779
- process.exit(0);
1780
- });
1781
- process.on('SIGTERM', async () => {
1782
- log.info('Shutting down (SIGTERM)');
1783
- await daemon.stop();
1784
- process.exit(0);
1785
- });
1786
- daemon.start().catch((err) => {
1787
- log.error('Failed to start', { error: String(err) });
1788
- process.exit(1);
1789
- });
1790
- }
1791
- //# sourceMappingURL=server.js.map