agent-relay 2.3.13 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1421) hide show
  1. package/README.md +42 -176
  2. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  3. package/bin/agent-relay-broker-darwin-x64 +0 -0
  4. package/bin/agent-relay-broker-linux-arm64 +0 -0
  5. package/bin/agent-relay-broker-linux-x64 +0 -0
  6. package/dist/index.cjs +50288 -63371
  7. package/dist/src/cli/bootstrap.d.ts +6 -0
  8. package/dist/src/cli/bootstrap.d.ts.map +1 -0
  9. package/dist/src/cli/bootstrap.js +109 -0
  10. package/dist/src/cli/bootstrap.js.map +1 -0
  11. package/dist/src/cli/commands/agent-management.d.ts +51 -0
  12. package/dist/src/cli/commands/agent-management.d.ts.map +1 -0
  13. package/dist/src/cli/commands/agent-management.js +290 -0
  14. package/dist/src/cli/commands/agent-management.js.map +1 -0
  15. package/dist/src/cli/commands/auth.d.ts +9 -0
  16. package/dist/src/cli/commands/auth.d.ts.map +1 -0
  17. package/dist/src/cli/commands/auth.js +33 -0
  18. package/dist/src/cli/commands/auth.js.map +1 -0
  19. package/dist/src/cli/commands/cloud.d.ts +18 -0
  20. package/dist/src/cli/commands/cloud.d.ts.map +1 -0
  21. package/dist/src/cli/commands/cloud.js +392 -0
  22. package/dist/src/cli/commands/cloud.js.map +1 -0
  23. package/dist/src/cli/commands/core.d.ts +107 -0
  24. package/dist/src/cli/commands/core.d.ts.map +1 -0
  25. package/dist/src/cli/commands/core.js +299 -0
  26. package/dist/src/cli/commands/core.js.map +1 -0
  27. package/dist/src/cli/commands/doctor.d.ts +1 -1
  28. package/dist/src/cli/commands/doctor.d.ts.map +1 -1
  29. package/dist/src/cli/commands/doctor.js +1 -485
  30. package/dist/src/cli/commands/doctor.js.map +1 -1
  31. package/dist/src/cli/commands/messaging.d.ts +61 -0
  32. package/dist/src/cli/commands/messaging.d.ts.map +1 -0
  33. package/dist/src/cli/commands/messaging.js +213 -0
  34. package/dist/src/cli/commands/messaging.js.map +1 -0
  35. package/dist/src/cli/commands/monitoring.d.ts +57 -0
  36. package/dist/src/cli/commands/monitoring.d.ts.map +1 -0
  37. package/dist/src/cli/commands/monitoring.js +350 -0
  38. package/dist/src/cli/commands/monitoring.js.map +1 -0
  39. package/dist/src/cli/commands/setup.d.ts +29 -0
  40. package/dist/src/cli/commands/setup.d.ts.map +1 -0
  41. package/dist/src/cli/commands/setup.js +324 -0
  42. package/dist/src/cli/commands/setup.js.map +1 -0
  43. package/dist/src/cli/commands/swarm.d.ts +3 -0
  44. package/dist/src/cli/commands/swarm.d.ts.map +1 -0
  45. package/dist/src/cli/commands/swarm.js +108 -0
  46. package/dist/src/cli/commands/swarm.js.map +1 -0
  47. package/dist/src/cli/index.d.ts +1 -28
  48. package/dist/src/cli/index.d.ts.map +1 -1
  49. package/dist/src/cli/index.js +4 -4936
  50. package/dist/src/cli/index.js.map +1 -1
  51. package/dist/src/cli/lib/agent-management-listing.d.ts +39 -0
  52. package/dist/src/cli/lib/agent-management-listing.d.ts.map +1 -0
  53. package/dist/src/cli/lib/agent-management-listing.js +253 -0
  54. package/dist/src/cli/lib/agent-management-listing.js.map +1 -0
  55. package/dist/src/cli/lib/auth-ssh.d.ts +48 -0
  56. package/dist/src/cli/lib/auth-ssh.d.ts.map +1 -0
  57. package/dist/src/cli/lib/auth-ssh.js +572 -0
  58. package/dist/src/cli/lib/auth-ssh.js.map +1 -0
  59. package/dist/src/cli/lib/bridge.d.ts +8 -0
  60. package/dist/src/cli/lib/bridge.d.ts.map +1 -0
  61. package/dist/src/cli/lib/bridge.js +100 -0
  62. package/dist/src/cli/lib/bridge.js.map +1 -0
  63. package/dist/src/cli/lib/broker-lifecycle.d.ts +20 -0
  64. package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -0
  65. package/dist/src/cli/lib/broker-lifecycle.js +843 -0
  66. package/dist/src/cli/lib/broker-lifecycle.js.map +1 -0
  67. package/dist/src/cli/lib/client-factory.d.ts +24 -0
  68. package/dist/src/cli/lib/client-factory.d.ts.map +1 -0
  69. package/dist/src/cli/lib/client-factory.js +20 -0
  70. package/dist/src/cli/lib/client-factory.js.map +1 -0
  71. package/dist/src/cli/lib/cloud-client.d.ts +39 -0
  72. package/dist/src/cli/lib/cloud-client.d.ts.map +1 -0
  73. package/dist/src/cli/lib/cloud-client.js +120 -0
  74. package/dist/src/cli/lib/cloud-client.js.map +1 -0
  75. package/dist/src/cli/lib/core-maintenance.d.ts +13 -0
  76. package/dist/src/cli/lib/core-maintenance.d.ts.map +1 -0
  77. package/dist/src/cli/lib/core-maintenance.js +250 -0
  78. package/dist/src/cli/lib/core-maintenance.js.map +1 -0
  79. package/dist/src/cli/lib/doctor.d.ts +2 -0
  80. package/dist/src/cli/lib/doctor.d.ts.map +1 -0
  81. package/dist/src/cli/lib/doctor.js +484 -0
  82. package/dist/src/cli/lib/doctor.js.map +1 -0
  83. package/dist/src/cli/lib/formatting.d.ts +8 -0
  84. package/dist/src/cli/lib/formatting.d.ts.map +1 -0
  85. package/dist/src/cli/lib/formatting.js +48 -0
  86. package/dist/src/cli/lib/formatting.js.map +1 -0
  87. package/dist/src/cli/lib/index.d.ts +5 -0
  88. package/dist/src/cli/lib/index.d.ts.map +1 -0
  89. package/dist/src/cli/lib/index.js +5 -0
  90. package/dist/src/cli/lib/index.js.map +1 -0
  91. package/dist/src/cli/lib/jsonc.d.ts +8 -0
  92. package/dist/src/cli/lib/jsonc.d.ts.map +1 -0
  93. package/dist/src/cli/lib/jsonc.js +88 -0
  94. package/dist/src/cli/lib/jsonc.js.map +1 -0
  95. package/dist/src/cli/lib/monitoring-health.d.ts +32 -0
  96. package/dist/src/cli/lib/monitoring-health.d.ts.map +1 -0
  97. package/dist/src/cli/lib/monitoring-health.js +2 -0
  98. package/dist/src/cli/lib/monitoring-health.js.map +1 -0
  99. package/dist/src/cli/lib/paths.d.ts +2 -0
  100. package/dist/src/cli/lib/paths.d.ts.map +1 -0
  101. package/dist/src/cli/lib/paths.js +5 -0
  102. package/dist/src/cli/lib/paths.js.map +1 -0
  103. package/dist/src/index.d.ts +1 -5
  104. package/dist/src/index.d.ts.map +1 -1
  105. package/dist/src/index.js +1 -5
  106. package/dist/src/index.js.map +1 -1
  107. package/install.sh +0 -30
  108. package/package.json +84 -98
  109. package/packages/acp-bridge/README.md +8 -8
  110. package/packages/acp-bridge/dist/acp-agent.d.ts +8 -7
  111. package/packages/acp-bridge/dist/acp-agent.d.ts.map +1 -1
  112. package/packages/acp-bridge/dist/acp-agent.js +118 -143
  113. package/packages/acp-bridge/dist/acp-agent.js.map +1 -1
  114. package/packages/acp-bridge/dist/cli.d.ts +1 -1
  115. package/packages/acp-bridge/dist/cli.js +3 -3
  116. package/packages/acp-bridge/dist/index.d.ts +2 -2
  117. package/packages/acp-bridge/dist/index.d.ts.map +1 -1
  118. package/packages/acp-bridge/dist/index.js +1 -1
  119. package/packages/acp-bridge/dist/index.js.map +1 -1
  120. package/packages/acp-bridge/dist/types.d.ts +3 -3
  121. package/packages/acp-bridge/package.json +3 -3
  122. package/packages/acp-bridge/src/acp-agent.ts +123 -160
  123. package/packages/acp-bridge/src/cli.ts +3 -3
  124. package/packages/acp-bridge/src/index.ts +2 -2
  125. package/packages/acp-bridge/src/types.ts +3 -3
  126. package/packages/config/dist/bridge-config.d.ts +5 -5
  127. package/packages/config/dist/bridge-config.d.ts.map +1 -1
  128. package/packages/config/dist/bridge-config.js +16 -9
  129. package/packages/config/dist/bridge-config.js.map +1 -1
  130. package/packages/config/dist/cli-auth-config.d.ts +1 -1
  131. package/packages/config/dist/cli-auth-config.js +1 -1
  132. package/packages/config/dist/cli-registry.generated.d.ts +340 -0
  133. package/packages/config/dist/cli-registry.generated.d.ts.map +1 -0
  134. package/packages/config/dist/cli-registry.generated.js +297 -0
  135. package/packages/config/dist/cli-registry.generated.js.map +1 -0
  136. package/packages/config/dist/index.d.ts +1 -0
  137. package/packages/config/dist/index.d.ts.map +1 -1
  138. package/packages/config/dist/index.js +1 -0
  139. package/packages/config/dist/index.js.map +1 -1
  140. package/packages/config/dist/project-namespace.d.ts +9 -9
  141. package/packages/config/dist/project-namespace.js +3 -3
  142. package/packages/config/dist/relay-config.d.ts +1 -1
  143. package/packages/config/dist/relay-config.js +1 -1
  144. package/packages/config/dist/schemas.js +1 -1
  145. package/packages/config/dist/shadow-config.d.ts +2 -1
  146. package/packages/config/dist/shadow-config.d.ts.map +1 -1
  147. package/packages/config/dist/shadow-config.js.map +1 -1
  148. package/packages/config/package.json +2 -3
  149. package/packages/config/src/bridge-config.test.ts +20 -6
  150. package/packages/config/src/bridge-config.ts +20 -10
  151. package/packages/config/src/cli-auth-config.ts +1 -1
  152. package/packages/config/src/cli-registry.generated.ts +328 -0
  153. package/packages/config/src/index.ts +1 -0
  154. package/packages/config/src/project-namespace.ts +9 -9
  155. package/packages/config/src/relay-config.ts +1 -1
  156. package/packages/config/src/schemas.ts +1 -1
  157. package/packages/config/src/shadow-config.ts +8 -1
  158. package/packages/contracts/fixtures/error-fixtures.json +42 -0
  159. package/packages/contracts/fixtures/event-fixtures.json +161 -0
  160. package/packages/contracts/fixtures/health-fixtures.json +35 -0
  161. package/packages/contracts/fixtures/identity-fixtures.json +58 -0
  162. package/packages/contracts/fixtures/replay-fixtures.json +33 -0
  163. package/packages/hooks/dist/inbox-check/types.d.ts +2 -2
  164. package/packages/hooks/dist/types.d.ts +9 -3
  165. package/packages/hooks/dist/types.d.ts.map +1 -1
  166. package/packages/hooks/dist/types.js +1 -1
  167. package/packages/hooks/dist/types.js.map +1 -1
  168. package/packages/hooks/package.json +5 -5
  169. package/packages/hooks/src/inbox-check/types.ts +2 -2
  170. package/packages/hooks/src/types.ts +11 -3
  171. package/packages/memory/package.json +2 -2
  172. package/packages/policy/package.json +2 -2
  173. package/packages/sdk/.mcp.json +14 -0
  174. package/packages/sdk/.trajectories/active/traj_1771875803391_84ca57b2.json +50 -0
  175. package/packages/sdk/.trajectories/active/traj_1771891934534_06504121.json +50 -0
  176. package/packages/sdk/.trajectories/active/traj_1771891957929_211afc4e.json +50 -0
  177. package/packages/sdk/.trajectories/active/traj_1771891982509_38c84638.json +50 -0
  178. package/packages/sdk/.trajectories/completed/traj_1771875803188_cd6d181c.json +80 -0
  179. package/packages/sdk/.trajectories/completed/traj_1771875803204_f2aeb8c8.json +80 -0
  180. package/packages/sdk/.trajectories/completed/traj_1771875803210_d65f3f1a.json +80 -0
  181. package/packages/sdk/.trajectories/completed/traj_1771875803218_e454a25d.json +80 -0
  182. package/packages/sdk/.trajectories/completed/traj_1771875803223_d7a64815.json +80 -0
  183. package/packages/sdk/.trajectories/completed/traj_1771875803227_7e56da5b.json +80 -0
  184. package/packages/sdk/.trajectories/completed/traj_1771875803235_4fbf93b4.json +80 -0
  185. package/packages/sdk/.trajectories/completed/traj_1771875803243_47931c71.json +80 -0
  186. package/packages/sdk/.trajectories/completed/traj_1771875803258_3816f3fe.json +80 -0
  187. package/packages/sdk/.trajectories/completed/traj_1771875803268_8061140e.json +80 -0
  188. package/packages/sdk/.trajectories/completed/traj_1771875803326_ae6f9c78.json +80 -0
  189. package/packages/sdk/.trajectories/completed/traj_1771875808396_cbde0a6c.json +91 -0
  190. package/packages/sdk/.trajectories/completed/traj_1771875812026_aa2442bb.json +91 -0
  191. package/packages/sdk/.trajectories/completed/traj_1771875815431_c2c656c5.json +91 -0
  192. package/packages/sdk/.trajectories/completed/traj_1771875818645_3a4dbf02.json +91 -0
  193. package/packages/sdk/.trajectories/completed/traj_1771891934403_24923c03.json +80 -0
  194. package/packages/sdk/.trajectories/completed/traj_1771891934421_dca16e24.json +80 -0
  195. package/packages/sdk/.trajectories/completed/traj_1771891934430_057706f7.json +80 -0
  196. package/packages/sdk/.trajectories/completed/traj_1771891934442_faf97382.json +80 -0
  197. package/packages/sdk/.trajectories/completed/traj_1771891934454_5542ecd5.json +80 -0
  198. package/packages/sdk/.trajectories/completed/traj_1771891934464_12202a08.json +80 -0
  199. package/packages/sdk/.trajectories/completed/traj_1771891934487_94378275.json +80 -0
  200. package/packages/sdk/.trajectories/completed/traj_1771891934503_ca728c13.json +80 -0
  201. package/packages/sdk/.trajectories/completed/traj_1771891934519_100af69a.json +80 -0
  202. package/packages/sdk/.trajectories/completed/traj_1771891934536_62ad39d9.json +80 -0
  203. package/packages/sdk/.trajectories/completed/traj_1771891934553_d6798a52.json +80 -0
  204. package/packages/sdk/.trajectories/completed/traj_1771891939537_541c8096.json +91 -0
  205. package/packages/sdk/.trajectories/completed/traj_1771891942985_36ab9a4d.json +91 -0
  206. package/packages/sdk/.trajectories/completed/traj_1771891946453_e8a6e05f.json +91 -0
  207. package/packages/sdk/.trajectories/completed/traj_1771891949838_5de0de84.json +91 -0
  208. package/packages/sdk/.trajectories/completed/traj_1771891957807_0ecfb4f4.json +80 -0
  209. package/packages/sdk/.trajectories/completed/traj_1771891957827_c4539239.json +80 -0
  210. package/packages/sdk/.trajectories/completed/traj_1771891957836_91168b48.json +80 -0
  211. package/packages/sdk/.trajectories/completed/traj_1771891957848_8c5cad0b.json +80 -0
  212. package/packages/sdk/.trajectories/completed/traj_1771891957857_0986b293.json +80 -0
  213. package/packages/sdk/.trajectories/completed/traj_1771891957872_8a3113af.json +80 -0
  214. package/packages/sdk/.trajectories/completed/traj_1771891957884_0bb85208.json +80 -0
  215. package/packages/sdk/.trajectories/completed/traj_1771891957892_86c75e2e.json +80 -0
  216. package/packages/sdk/.trajectories/completed/traj_1771891957907_98ca0e6f.json +80 -0
  217. package/packages/sdk/.trajectories/completed/traj_1771891957918_d9091231.json +80 -0
  218. package/packages/sdk/.trajectories/completed/traj_1771891957931_dcaf77ed.json +80 -0
  219. package/packages/sdk/.trajectories/completed/traj_1771891962931_eb1fdee2.json +91 -0
  220. package/packages/sdk/.trajectories/completed/traj_1771891966262_9061a93f.json +91 -0
  221. package/packages/sdk/.trajectories/completed/traj_1771891969915_1adaba19.json +91 -0
  222. package/packages/sdk/.trajectories/completed/traj_1771891973588_f08b79e9.json +91 -0
  223. package/packages/sdk/.trajectories/completed/traj_1771891982421_f1985bce.json +80 -0
  224. package/packages/sdk/.trajectories/completed/traj_1771891982432_e7a84163.json +80 -0
  225. package/packages/sdk/.trajectories/completed/traj_1771891982447_369b842a.json +80 -0
  226. package/packages/sdk/.trajectories/completed/traj_1771891982469_5fc45199.json +80 -0
  227. package/packages/sdk/.trajectories/completed/traj_1771891982495_454c7cb3.json +80 -0
  228. package/packages/sdk/.trajectories/completed/traj_1771891982514_08098e03.json +80 -0
  229. package/packages/sdk/.trajectories/completed/traj_1771891982526_b351d778.json +80 -0
  230. package/packages/sdk/.trajectories/completed/traj_1771891982533_fa542d83.json +80 -0
  231. package/packages/sdk/.trajectories/completed/traj_1771891982540_18ab24dc.json +80 -0
  232. package/packages/sdk/.trajectories/completed/traj_1771891982544_5b4fa163.json +80 -0
  233. package/packages/sdk/.trajectories/completed/traj_1771891982548_c13f089a.json +80 -0
  234. package/packages/sdk/.trajectories/completed/traj_1771891987510_23f6da1f.json +91 -0
  235. package/packages/sdk/.trajectories/completed/traj_1771891991466_912c2e04.json +91 -0
  236. package/packages/sdk/.trajectories/completed/traj_1771891994891_60604be2.json +91 -0
  237. package/packages/sdk/.trajectories/completed/traj_1771891998370_cfaf9b8b.json +91 -0
  238. package/packages/sdk/README.md +68 -838
  239. package/packages/sdk/bin/agent-relay-broker +0 -0
  240. package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts +2 -0
  241. package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts.map +1 -0
  242. package/packages/sdk/dist/__tests__/contract-fixtures.test.js +85 -0
  243. package/packages/sdk/dist/__tests__/contract-fixtures.test.js.map +1 -0
  244. package/packages/sdk/dist/__tests__/facade.test.js +305 -0
  245. package/packages/sdk/dist/__tests__/facade.test.js.map +1 -0
  246. package/packages/sdk/dist/__tests__/integration.test.js +169 -0
  247. package/packages/sdk/dist/__tests__/integration.test.js.map +1 -0
  248. package/packages/sdk/dist/__tests__/pty.test.d.ts +2 -0
  249. package/packages/sdk/dist/__tests__/pty.test.d.ts.map +1 -0
  250. package/packages/sdk/dist/__tests__/pty.test.js +20 -0
  251. package/packages/sdk/dist/__tests__/pty.test.js.map +1 -0
  252. package/packages/sdk/dist/__tests__/quickstart.test.js +176 -0
  253. package/packages/sdk/dist/__tests__/quickstart.test.js.map +1 -0
  254. package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts +2 -0
  255. package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts.map +1 -0
  256. package/packages/sdk/dist/__tests__/spawn-from-env.test.js +206 -0
  257. package/packages/sdk/dist/__tests__/spawn-from-env.test.js.map +1 -0
  258. package/packages/sdk/dist/__tests__/unit.test.js +347 -0
  259. package/packages/sdk/dist/__tests__/unit.test.js.map +1 -0
  260. package/packages/sdk/dist/client.d.ts +140 -526
  261. package/packages/sdk/dist/client.d.ts.map +1 -1
  262. package/packages/sdk/dist/client.js +416 -1509
  263. package/packages/sdk/dist/client.js.map +1 -1
  264. package/packages/sdk/dist/examples/workflow-superiority.d.ts +32 -0
  265. package/packages/sdk/dist/examples/workflow-superiority.d.ts.map +1 -0
  266. package/packages/sdk/dist/examples/workflow-superiority.js +1421 -0
  267. package/packages/sdk/dist/examples/workflow-superiority.js.map +1 -0
  268. package/packages/sdk/dist/index.d.ts +13 -20
  269. package/packages/sdk/dist/index.d.ts.map +1 -1
  270. package/packages/sdk/dist/index.js +12 -26
  271. package/packages/sdk/dist/index.js.map +1 -1
  272. package/packages/sdk/dist/logs.d.ts +70 -25
  273. package/packages/sdk/dist/logs.d.ts.map +1 -1
  274. package/packages/sdk/dist/logs.js +238 -42
  275. package/packages/sdk/dist/logs.js.map +1 -1
  276. package/packages/sdk/dist/models.d.ts +9 -0
  277. package/packages/sdk/dist/models.d.ts.map +1 -0
  278. package/packages/sdk/dist/models.js +17 -0
  279. package/packages/sdk/dist/models.js.map +1 -0
  280. package/packages/sdk/dist/protocol.d.ts +366 -0
  281. package/packages/sdk/dist/protocol.d.ts.map +1 -0
  282. package/packages/sdk/dist/pty.d.ts.map +1 -0
  283. package/packages/sdk/dist/pty.js +26 -0
  284. package/packages/sdk/dist/pty.js.map +1 -0
  285. package/packages/sdk/dist/relay-adapter.d.ts +139 -0
  286. package/packages/sdk/dist/relay-adapter.d.ts.map +1 -0
  287. package/packages/sdk/dist/relay-adapter.js +210 -0
  288. package/packages/sdk/dist/relay-adapter.js.map +1 -0
  289. package/packages/sdk/dist/relay.d.ts +304 -0
  290. package/packages/sdk/dist/relay.d.ts.map +1 -0
  291. package/packages/sdk/dist/relay.js +910 -0
  292. package/packages/sdk/dist/relay.js.map +1 -0
  293. package/packages/sdk/dist/shadow.d.ts +101 -0
  294. package/packages/sdk/dist/shadow.d.ts.map +1 -0
  295. package/packages/sdk/dist/shadow.js.map +1 -0
  296. package/packages/sdk/dist/spawn-from-env.d.ts +77 -0
  297. package/packages/sdk/dist/spawn-from-env.d.ts.map +1 -0
  298. package/packages/sdk/dist/spawn-from-env.js +172 -0
  299. package/packages/sdk/dist/spawn-from-env.js.map +1 -0
  300. package/packages/sdk/dist/workflows/builder.d.ts +114 -0
  301. package/packages/sdk/dist/workflows/builder.d.ts.map +1 -0
  302. package/packages/sdk/dist/workflows/builder.js +201 -0
  303. package/packages/sdk/dist/workflows/builder.js.map +1 -0
  304. package/packages/sdk/dist/workflows/cli.d.ts +11 -0
  305. package/packages/sdk/dist/workflows/cli.d.ts.map +1 -0
  306. package/packages/sdk/dist/workflows/cli.js +144 -0
  307. package/packages/sdk/dist/workflows/cli.js.map +1 -0
  308. package/packages/sdk/dist/workflows/coordinator.d.ts +73 -0
  309. package/packages/sdk/dist/workflows/coordinator.d.ts.map +1 -0
  310. package/packages/sdk/dist/workflows/coordinator.js +647 -0
  311. package/packages/sdk/dist/workflows/coordinator.js.map +1 -0
  312. package/packages/sdk/dist/workflows/custom-steps.d.ts +73 -0
  313. package/packages/sdk/dist/workflows/custom-steps.d.ts.map +1 -0
  314. package/packages/sdk/dist/workflows/custom-steps.js +321 -0
  315. package/packages/sdk/dist/workflows/custom-steps.js.map +1 -0
  316. package/packages/sdk/dist/workflows/dry-run-format.d.ts +6 -0
  317. package/packages/sdk/dist/workflows/dry-run-format.d.ts.map +1 -0
  318. package/packages/sdk/dist/workflows/dry-run-format.js +68 -0
  319. package/packages/sdk/dist/workflows/dry-run-format.js.map +1 -0
  320. package/packages/sdk/dist/workflows/file-db.d.ts +33 -0
  321. package/packages/sdk/dist/workflows/file-db.d.ts.map +1 -0
  322. package/packages/sdk/dist/workflows/file-db.js +108 -0
  323. package/packages/sdk/dist/workflows/file-db.js.map +1 -0
  324. package/packages/sdk/dist/workflows/index.d.ts +15 -0
  325. package/packages/sdk/dist/workflows/index.d.ts.map +1 -0
  326. package/packages/sdk/dist/workflows/index.js +15 -0
  327. package/packages/sdk/dist/workflows/index.js.map +1 -0
  328. package/packages/sdk/dist/workflows/run.d.ts +38 -0
  329. package/packages/sdk/dist/workflows/run.d.ts.map +1 -0
  330. package/packages/sdk/dist/workflows/run.js +25 -0
  331. package/packages/sdk/dist/workflows/run.js.map +1 -0
  332. package/packages/sdk/dist/workflows/runner.d.ts +320 -0
  333. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -0
  334. package/packages/sdk/dist/workflows/runner.js +2821 -0
  335. package/packages/sdk/dist/workflows/runner.js.map +1 -0
  336. package/packages/sdk/dist/workflows/templates.d.ts +47 -0
  337. package/packages/sdk/dist/workflows/templates.d.ts.map +1 -0
  338. package/packages/sdk/dist/workflows/templates.js +405 -0
  339. package/packages/sdk/dist/workflows/templates.js.map +1 -0
  340. package/packages/sdk/dist/workflows/trajectory.d.ts +87 -0
  341. package/packages/sdk/dist/workflows/trajectory.d.ts.map +1 -0
  342. package/packages/sdk/dist/workflows/trajectory.js +441 -0
  343. package/packages/sdk/dist/workflows/trajectory.js.map +1 -0
  344. package/packages/sdk/dist/workflows/types.d.ts +306 -0
  345. package/packages/sdk/dist/workflows/types.d.ts.map +1 -0
  346. package/packages/sdk/dist/workflows/types.js +23 -0
  347. package/packages/sdk/dist/workflows/types.js.map +1 -0
  348. package/packages/sdk/dist/workflows/validator.d.ts +11 -0
  349. package/packages/sdk/dist/workflows/validator.d.ts.map +1 -0
  350. package/packages/sdk/dist/workflows/validator.js +128 -0
  351. package/packages/sdk/dist/workflows/validator.js.map +1 -0
  352. package/packages/sdk/package.json +59 -53
  353. package/packages/sdk/scripts/bundle-agent-relay.mjs +53 -0
  354. package/packages/sdk/src/__tests__/contract-fixtures.test.ts +122 -0
  355. package/packages/sdk/src/__tests__/error-scenarios.test.ts +682 -0
  356. package/packages/sdk/src/__tests__/facade.test.ts +364 -0
  357. package/packages/sdk/src/__tests__/idle-nudge.test.ts +438 -0
  358. package/packages/sdk/src/__tests__/integration.test.ts +204 -0
  359. package/packages/sdk/src/__tests__/orchestration-upgrades.test.ts +797 -0
  360. package/packages/sdk/src/__tests__/pty.test.ts +24 -0
  361. package/packages/sdk/src/__tests__/quickstart.test.ts +198 -0
  362. package/packages/sdk/src/__tests__/spawn-from-env.test.ts +282 -0
  363. package/packages/sdk/src/__tests__/swarm-coordinator.test.ts +909 -0
  364. package/packages/sdk/src/__tests__/unit.test.ts +435 -0
  365. package/packages/sdk/src/__tests__/workflow-runner.test.ts +489 -0
  366. package/packages/sdk/src/__tests__/yaml-validation.test.ts +890 -0
  367. package/packages/sdk/src/client.ts +514 -1912
  368. package/packages/sdk/src/examples/workflow-superiority.ts +1485 -0
  369. package/packages/sdk/src/examples/workflows/README.md +156 -0
  370. package/packages/sdk/src/examples/workflows/ralph-overnight.yaml +421 -0
  371. package/packages/sdk/src/examples/workflows/ralph-swarm.yaml +411 -0
  372. package/packages/sdk/src/examples/workflows/ralph-tdd.yaml +259 -0
  373. package/packages/sdk/src/index.ts +13 -116
  374. package/packages/sdk/src/logs.ts +282 -54
  375. package/packages/sdk/src/models.ts +36 -0
  376. package/packages/sdk/src/protocol.ts +385 -0
  377. package/packages/sdk/src/pty.ts +35 -0
  378. package/packages/sdk/src/relay-adapter.ts +316 -0
  379. package/packages/sdk/src/relay.ts +1147 -0
  380. package/packages/sdk/src/shadow.ts +228 -0
  381. package/packages/sdk/src/spawn-from-env.ts +245 -0
  382. package/packages/sdk/src/workflows/README.md +656 -0
  383. package/packages/sdk/src/workflows/builder.ts +278 -0
  384. package/packages/sdk/src/workflows/builtin-templates/bug-fix.yaml +135 -0
  385. package/packages/sdk/src/workflows/builtin-templates/code-review.yaml +133 -0
  386. package/packages/sdk/src/workflows/builtin-templates/competitive.yaml +103 -0
  387. package/packages/sdk/src/workflows/builtin-templates/documentation.yaml +120 -0
  388. package/packages/sdk/src/workflows/builtin-templates/feature-dev.yaml +142 -0
  389. package/packages/sdk/src/workflows/builtin-templates/refactor.yaml +141 -0
  390. package/packages/sdk/src/workflows/builtin-templates/review-loop.yaml +223 -0
  391. package/packages/sdk/src/workflows/builtin-templates/security-audit.yaml +129 -0
  392. package/packages/sdk/src/workflows/cli.ts +162 -0
  393. package/packages/sdk/src/workflows/coordinator.ts +842 -0
  394. package/packages/sdk/src/workflows/custom-steps.ts +450 -0
  395. package/packages/sdk/src/workflows/dry-run-format.ts +75 -0
  396. package/packages/sdk/src/workflows/file-db.ts +117 -0
  397. package/packages/sdk/src/workflows/index.ts +24 -0
  398. package/packages/sdk/src/workflows/run.ts +72 -0
  399. package/packages/sdk/src/workflows/runner.ts +3409 -0
  400. package/packages/sdk/src/workflows/schema.json +651 -0
  401. package/packages/sdk/src/workflows/templates.ts +552 -0
  402. package/packages/sdk/src/workflows/trajectory.ts +631 -0
  403. package/packages/sdk/src/workflows/types.ts +389 -0
  404. package/packages/sdk/src/workflows/validator.ts +151 -0
  405. package/packages/sdk/tsconfig.build.json +25 -0
  406. package/packages/sdk/tsconfig.json +17 -18
  407. package/packages/sdk/vitest.config.ts +1 -1
  408. package/packages/sdk-py/README.md +106 -21
  409. package/packages/sdk-py/agent_relay/__init__.py +21 -0
  410. package/packages/sdk-py/agent_relay/models.py +206 -0
  411. package/packages/sdk-py/pyproject.toml +2 -2
  412. package/packages/sdk-py/src/agent_relay/__init__.py +76 -0
  413. package/packages/sdk-py/src/agent_relay/builder.py +430 -109
  414. package/packages/sdk-py/src/agent_relay/templates.py +197 -0
  415. package/packages/sdk-py/src/agent_relay/types.py +489 -15
  416. package/packages/sdk-py/tests/test_builder.py +115 -1
  417. package/packages/sdk-py/tests/test_workflow_templates.py +450 -0
  418. package/packages/shared/cli-registry.yaml +193 -0
  419. package/packages/shared/codegen-py.mjs +215 -0
  420. package/packages/shared/codegen-ts.mjs +227 -0
  421. package/packages/telemetry/dist/events.d.ts +8 -8
  422. package/packages/telemetry/dist/index.d.ts +1 -1
  423. package/packages/telemetry/package.json +2 -2
  424. package/packages/telemetry/src/events.ts +9 -9
  425. package/packages/telemetry/src/index.ts +2 -2
  426. package/packages/trajectory/package.json +2 -2
  427. package/packages/user-directory/dist/user-directory.js +1 -1
  428. package/packages/user-directory/dist/user-directory.js.map +1 -1
  429. package/packages/user-directory/package.json +2 -2
  430. package/packages/user-directory/src/user-directory.ts +1 -1
  431. package/packages/utils/dist/cjs/client-helpers.js +4 -4
  432. package/packages/utils/dist/cjs/discovery.js +9 -6
  433. package/packages/utils/dist/cjs/errors.js +5 -5
  434. package/packages/utils/dist/cjs/legacy-protocol.js +70 -0
  435. package/packages/utils/dist/cjs/logger.js +3 -3
  436. package/packages/utils/dist/cjs/precompiled-patterns.js +33 -2
  437. package/packages/utils/dist/cjs/relay-pty-path.js +0 -6
  438. package/packages/utils/dist/client-helpers.d.ts +1 -1
  439. package/packages/utils/dist/client-helpers.d.ts.map +1 -1
  440. package/packages/utils/dist/client-helpers.js +1 -1
  441. package/packages/utils/dist/client-helpers.js.map +1 -1
  442. package/packages/utils/dist/discovery.d.ts +7 -7
  443. package/packages/utils/dist/discovery.d.ts.map +1 -1
  444. package/packages/utils/dist/discovery.js +20 -17
  445. package/packages/utils/dist/discovery.js.map +1 -1
  446. package/packages/utils/dist/errors.d.ts +1 -1
  447. package/packages/utils/dist/errors.js +3 -3
  448. package/packages/utils/dist/legacy-protocol.d.ts +46 -0
  449. package/packages/utils/dist/legacy-protocol.d.ts.map +1 -0
  450. package/packages/utils/dist/legacy-protocol.js +47 -0
  451. package/packages/utils/dist/legacy-protocol.js.map +1 -0
  452. package/packages/utils/dist/logger.d.ts +2 -2
  453. package/packages/utils/dist/logger.js +2 -2
  454. package/packages/utils/dist/precompiled-patterns.d.ts.map +1 -1
  455. package/packages/utils/dist/precompiled-patterns.js +28 -2
  456. package/packages/utils/dist/precompiled-patterns.js.map +1 -1
  457. package/packages/utils/dist/relay-pty-path.d.ts.map +1 -1
  458. package/packages/utils/dist/relay-pty-path.js +1 -10
  459. package/packages/utils/dist/relay-pty-path.js.map +1 -1
  460. package/packages/utils/package.json +2 -3
  461. package/packages/utils/src/client-helpers.ts +1 -1
  462. package/packages/utils/src/consolidation.test.ts +3 -3
  463. package/packages/utils/src/discovery.test.ts +3 -3
  464. package/packages/utils/src/discovery.ts +21 -18
  465. package/packages/utils/src/errors.test.ts +6 -11
  466. package/packages/utils/src/errors.ts +3 -3
  467. package/packages/utils/src/legacy-protocol.ts +151 -0
  468. package/packages/utils/src/logger.ts +2 -2
  469. package/packages/utils/src/precompiled-patterns.test.ts +8 -0
  470. package/packages/utils/src/precompiled-patterns.ts +40 -2
  471. package/packages/utils/src/relay-pty-path.test.ts +23 -34
  472. package/packages/utils/src/relay-pty-path.ts +1 -11
  473. package/relay-snippets/agent-relay-protocol.md +6 -43
  474. package/relay-snippets/agent-relay-snippet.md +59 -203
  475. package/scripts/postinstall.js +44 -171
  476. package/bin/relay-pty-darwin-arm64 +0 -0
  477. package/bin/relay-pty-darwin-x64 +0 -0
  478. package/bin/relay-pty-linux-arm64 +0 -0
  479. package/bin/relay-pty-linux-x64 +0 -0
  480. package/dist/src/bridge/index.d.ts +0 -8
  481. package/dist/src/bridge/index.d.ts.map +0 -1
  482. package/dist/src/bridge/index.js +0 -8
  483. package/dist/src/bridge/index.js.map +0 -1
  484. package/dist/src/continuity/index.d.ts +0 -5
  485. package/dist/src/continuity/index.d.ts.map +0 -1
  486. package/dist/src/continuity/index.js +0 -5
  487. package/dist/src/continuity/index.js.map +0 -1
  488. package/dist/src/daemon/index.d.ts +0 -8
  489. package/dist/src/daemon/index.d.ts.map +0 -1
  490. package/dist/src/daemon/index.js +0 -9
  491. package/dist/src/daemon/index.js.map +0 -1
  492. package/dist/src/protocol/index.d.ts +0 -8
  493. package/dist/src/protocol/index.d.ts.map +0 -1
  494. package/dist/src/protocol/index.js +0 -8
  495. package/dist/src/protocol/index.js.map +0 -1
  496. package/dist/src/resiliency/index.d.ts +0 -5
  497. package/dist/src/resiliency/index.d.ts.map +0 -1
  498. package/dist/src/resiliency/index.js +0 -5
  499. package/dist/src/resiliency/index.js.map +0 -1
  500. package/dist/src/state/index.d.ts +0 -5
  501. package/dist/src/state/index.d.ts.map +0 -1
  502. package/dist/src/state/index.js +0 -5
  503. package/dist/src/state/index.js.map +0 -1
  504. package/dist/src/storage/index.d.ts +0 -8
  505. package/dist/src/storage/index.d.ts.map +0 -1
  506. package/dist/src/storage/index.js +0 -8
  507. package/dist/src/storage/index.js.map +0 -1
  508. package/dist/src/wrapper/index.d.ts +0 -8
  509. package/dist/src/wrapper/index.d.ts.map +0 -1
  510. package/dist/src/wrapper/index.js +0 -11
  511. package/dist/src/wrapper/index.js.map +0 -1
  512. package/packages/bridge/dist/cli-resolution.d.ts +0 -32
  513. package/packages/bridge/dist/cli-resolution.d.ts.map +0 -1
  514. package/packages/bridge/dist/cli-resolution.js +0 -88
  515. package/packages/bridge/dist/cli-resolution.js.map +0 -1
  516. package/packages/bridge/dist/index.d.ts +0 -9
  517. package/packages/bridge/dist/index.d.ts.map +0 -1
  518. package/packages/bridge/dist/index.js +0 -11
  519. package/packages/bridge/dist/index.js.map +0 -1
  520. package/packages/bridge/dist/multi-project-client.d.ts +0 -99
  521. package/packages/bridge/dist/multi-project-client.d.ts.map +0 -1
  522. package/packages/bridge/dist/multi-project-client.js +0 -389
  523. package/packages/bridge/dist/multi-project-client.js.map +0 -1
  524. package/packages/bridge/dist/shadow-cli.d.ts +0 -17
  525. package/packages/bridge/dist/shadow-cli.d.ts.map +0 -1
  526. package/packages/bridge/dist/shadow-cli.js +0 -75
  527. package/packages/bridge/dist/shadow-cli.js.map +0 -1
  528. package/packages/bridge/dist/spawner.d.ts +0 -263
  529. package/packages/bridge/dist/spawner.d.ts.map +0 -1
  530. package/packages/bridge/dist/spawner.js +0 -1758
  531. package/packages/bridge/dist/spawner.js.map +0 -1
  532. package/packages/bridge/dist/types.d.ts +0 -141
  533. package/packages/bridge/dist/types.d.ts.map +0 -1
  534. package/packages/bridge/dist/types.js +0 -6
  535. package/packages/bridge/dist/types.js.map +0 -1
  536. package/packages/bridge/dist/utils.d.ts +0 -39
  537. package/packages/bridge/dist/utils.d.ts.map +0 -1
  538. package/packages/bridge/dist/utils.js +0 -98
  539. package/packages/bridge/dist/utils.js.map +0 -1
  540. package/packages/bridge/package.json +0 -45
  541. package/packages/bridge/src/cli-resolution.test.ts +0 -225
  542. package/packages/bridge/src/cli-resolution.ts +0 -100
  543. package/packages/bridge/src/index.ts +0 -34
  544. package/packages/bridge/src/multi-project-client.test.ts +0 -340
  545. package/packages/bridge/src/multi-project-client.ts +0 -469
  546. package/packages/bridge/src/shadow-cli.ts +0 -95
  547. package/packages/bridge/src/spawner-mcp.test.ts +0 -505
  548. package/packages/bridge/src/spawner.ts +0 -2067
  549. package/packages/bridge/src/types.ts +0 -153
  550. package/packages/bridge/src/utils.test.ts +0 -235
  551. package/packages/bridge/src/utils.ts +0 -113
  552. package/packages/bridge/tsconfig.json +0 -29
  553. package/packages/bridge/vitest.config.ts +0 -9
  554. package/packages/broker-sdk/README.md +0 -97
  555. package/packages/broker-sdk/dist/__tests__/facade.test.js +0 -257
  556. package/packages/broker-sdk/dist/__tests__/facade.test.js.map +0 -1
  557. package/packages/broker-sdk/dist/__tests__/integration.test.js +0 -139
  558. package/packages/broker-sdk/dist/__tests__/integration.test.js.map +0 -1
  559. package/packages/broker-sdk/dist/__tests__/quickstart.test.js +0 -176
  560. package/packages/broker-sdk/dist/__tests__/quickstart.test.js.map +0 -1
  561. package/packages/broker-sdk/dist/__tests__/unit.test.js +0 -192
  562. package/packages/broker-sdk/dist/__tests__/unit.test.js.map +0 -1
  563. package/packages/broker-sdk/dist/client.d.ts +0 -95
  564. package/packages/broker-sdk/dist/client.d.ts.map +0 -1
  565. package/packages/broker-sdk/dist/client.js +0 -372
  566. package/packages/broker-sdk/dist/client.js.map +0 -1
  567. package/packages/broker-sdk/dist/index.d.ts +0 -10
  568. package/packages/broker-sdk/dist/index.d.ts.map +0 -1
  569. package/packages/broker-sdk/dist/index.js +0 -10
  570. package/packages/broker-sdk/dist/index.js.map +0 -1
  571. package/packages/broker-sdk/dist/logs.d.ts +0 -47
  572. package/packages/broker-sdk/dist/logs.d.ts.map +0 -1
  573. package/packages/broker-sdk/dist/logs.js +0 -137
  574. package/packages/broker-sdk/dist/logs.js.map +0 -1
  575. package/packages/broker-sdk/dist/protocol.d.ts +0 -254
  576. package/packages/broker-sdk/dist/protocol.d.ts.map +0 -1
  577. package/packages/broker-sdk/dist/pty.d.ts.map +0 -1
  578. package/packages/broker-sdk/dist/pty.js +0 -14
  579. package/packages/broker-sdk/dist/pty.js.map +0 -1
  580. package/packages/broker-sdk/dist/relay.d.ts +0 -172
  581. package/packages/broker-sdk/dist/relay.d.ts.map +0 -1
  582. package/packages/broker-sdk/dist/relay.js +0 -486
  583. package/packages/broker-sdk/dist/relay.js.map +0 -1
  584. package/packages/broker-sdk/dist/relaycast.d.ts +0 -67
  585. package/packages/broker-sdk/dist/relaycast.d.ts.map +0 -1
  586. package/packages/broker-sdk/dist/relaycast.js +0 -150
  587. package/packages/broker-sdk/dist/relaycast.js.map +0 -1
  588. package/packages/broker-sdk/dist/shadow.d.ts +0 -100
  589. package/packages/broker-sdk/dist/shadow.d.ts.map +0 -1
  590. package/packages/broker-sdk/dist/shadow.js.map +0 -1
  591. package/packages/broker-sdk/dist/workflows/builder.d.ts +0 -101
  592. package/packages/broker-sdk/dist/workflows/builder.d.ts.map +0 -1
  593. package/packages/broker-sdk/dist/workflows/builder.js +0 -179
  594. package/packages/broker-sdk/dist/workflows/builder.js.map +0 -1
  595. package/packages/broker-sdk/dist/workflows/cli.d.ts +0 -10
  596. package/packages/broker-sdk/dist/workflows/cli.d.ts.map +0 -1
  597. package/packages/broker-sdk/dist/workflows/cli.js +0 -82
  598. package/packages/broker-sdk/dist/workflows/cli.js.map +0 -1
  599. package/packages/broker-sdk/dist/workflows/coordinator.d.ts +0 -69
  600. package/packages/broker-sdk/dist/workflows/coordinator.d.ts.map +0 -1
  601. package/packages/broker-sdk/dist/workflows/coordinator.js +0 -585
  602. package/packages/broker-sdk/dist/workflows/coordinator.js.map +0 -1
  603. package/packages/broker-sdk/dist/workflows/index.d.ts +0 -11
  604. package/packages/broker-sdk/dist/workflows/index.d.ts.map +0 -1
  605. package/packages/broker-sdk/dist/workflows/index.js +0 -11
  606. package/packages/broker-sdk/dist/workflows/index.js.map +0 -1
  607. package/packages/broker-sdk/dist/workflows/run.d.ts +0 -33
  608. package/packages/broker-sdk/dist/workflows/run.d.ts.map +0 -1
  609. package/packages/broker-sdk/dist/workflows/run.js +0 -28
  610. package/packages/broker-sdk/dist/workflows/run.js.map +0 -1
  611. package/packages/broker-sdk/dist/workflows/runner.d.ts +0 -136
  612. package/packages/broker-sdk/dist/workflows/runner.d.ts.map +0 -1
  613. package/packages/broker-sdk/dist/workflows/runner.js +0 -900
  614. package/packages/broker-sdk/dist/workflows/runner.js.map +0 -1
  615. package/packages/broker-sdk/dist/workflows/templates.d.ts +0 -47
  616. package/packages/broker-sdk/dist/workflows/templates.d.ts.map +0 -1
  617. package/packages/broker-sdk/dist/workflows/templates.js +0 -395
  618. package/packages/broker-sdk/dist/workflows/templates.js.map +0 -1
  619. package/packages/broker-sdk/dist/workflows/trajectory.d.ts +0 -80
  620. package/packages/broker-sdk/dist/workflows/trajectory.d.ts.map +0 -1
  621. package/packages/broker-sdk/dist/workflows/trajectory.js +0 -362
  622. package/packages/broker-sdk/dist/workflows/trajectory.js.map +0 -1
  623. package/packages/broker-sdk/dist/workflows/types.d.ts +0 -140
  624. package/packages/broker-sdk/dist/workflows/types.d.ts.map +0 -1
  625. package/packages/broker-sdk/dist/workflows/types.js +0 -8
  626. package/packages/broker-sdk/dist/workflows/types.js.map +0 -1
  627. package/packages/broker-sdk/package.json +0 -81
  628. package/packages/broker-sdk/scripts/bundle-agent-relay.mjs +0 -53
  629. package/packages/broker-sdk/src/__tests__/error-scenarios.test.ts +0 -682
  630. package/packages/broker-sdk/src/__tests__/facade.test.ts +0 -296
  631. package/packages/broker-sdk/src/__tests__/integration.test.ts +0 -170
  632. package/packages/broker-sdk/src/__tests__/quickstart.test.ts +0 -198
  633. package/packages/broker-sdk/src/__tests__/swarm-coordinator.test.ts +0 -772
  634. package/packages/broker-sdk/src/__tests__/unit.test.ts +0 -243
  635. package/packages/broker-sdk/src/__tests__/workflow-runner.test.ts +0 -333
  636. package/packages/broker-sdk/src/client.ts +0 -510
  637. package/packages/broker-sdk/src/index.ts +0 -9
  638. package/packages/broker-sdk/src/logs.ts +0 -163
  639. package/packages/broker-sdk/src/protocol.ts +0 -271
  640. package/packages/broker-sdk/src/pty.ts +0 -16
  641. package/packages/broker-sdk/src/relay.ts +0 -614
  642. package/packages/broker-sdk/src/relaycast.ts +0 -185
  643. package/packages/broker-sdk/src/shadow.ts +0 -230
  644. package/packages/broker-sdk/src/workflows/README.md +0 -514
  645. package/packages/broker-sdk/src/workflows/builder.ts +0 -241
  646. package/packages/broker-sdk/src/workflows/builtin-templates/bug-fix.yaml +0 -75
  647. package/packages/broker-sdk/src/workflows/builtin-templates/code-review.yaml +0 -82
  648. package/packages/broker-sdk/src/workflows/builtin-templates/documentation.yaml +0 -70
  649. package/packages/broker-sdk/src/workflows/builtin-templates/feature-dev.yaml +0 -76
  650. package/packages/broker-sdk/src/workflows/builtin-templates/refactor.yaml +0 -82
  651. package/packages/broker-sdk/src/workflows/builtin-templates/security-audit.yaml +0 -84
  652. package/packages/broker-sdk/src/workflows/cli.ts +0 -93
  653. package/packages/broker-sdk/src/workflows/coordinator.ts +0 -758
  654. package/packages/broker-sdk/src/workflows/index.ts +0 -10
  655. package/packages/broker-sdk/src/workflows/run.ts +0 -55
  656. package/packages/broker-sdk/src/workflows/runner.ts +0 -1184
  657. package/packages/broker-sdk/src/workflows/schema.json +0 -333
  658. package/packages/broker-sdk/src/workflows/templates.ts +0 -544
  659. package/packages/broker-sdk/src/workflows/trajectory.ts +0 -507
  660. package/packages/broker-sdk/src/workflows/types.ts +0 -208
  661. package/packages/broker-sdk/tsconfig.json +0 -22
  662. package/packages/broker-sdk/vitest.config.ts +0 -9
  663. package/packages/continuity/dist/formatter.d.ts +0 -57
  664. package/packages/continuity/dist/formatter.d.ts.map +0 -1
  665. package/packages/continuity/dist/formatter.js +0 -448
  666. package/packages/continuity/dist/formatter.js.map +0 -1
  667. package/packages/continuity/dist/handoff-store.d.ts +0 -67
  668. package/packages/continuity/dist/handoff-store.d.ts.map +0 -1
  669. package/packages/continuity/dist/handoff-store.js +0 -472
  670. package/packages/continuity/dist/handoff-store.js.map +0 -1
  671. package/packages/continuity/dist/index.d.ts +0 -10
  672. package/packages/continuity/dist/index.d.ts.map +0 -1
  673. package/packages/continuity/dist/index.js +0 -11
  674. package/packages/continuity/dist/index.js.map +0 -1
  675. package/packages/continuity/dist/ledger-store.d.ts +0 -110
  676. package/packages/continuity/dist/ledger-store.d.ts.map +0 -1
  677. package/packages/continuity/dist/ledger-store.js +0 -500
  678. package/packages/continuity/dist/ledger-store.js.map +0 -1
  679. package/packages/continuity/dist/manager.d.ts +0 -183
  680. package/packages/continuity/dist/manager.d.ts.map +0 -1
  681. package/packages/continuity/dist/manager.js +0 -616
  682. package/packages/continuity/dist/manager.js.map +0 -1
  683. package/packages/continuity/dist/parser.d.ts +0 -76
  684. package/packages/continuity/dist/parser.d.ts.map +0 -1
  685. package/packages/continuity/dist/parser.js +0 -579
  686. package/packages/continuity/dist/parser.js.map +0 -1
  687. package/packages/continuity/dist/types.d.ts +0 -180
  688. package/packages/continuity/dist/types.d.ts.map +0 -1
  689. package/packages/continuity/dist/types.js +0 -2
  690. package/packages/continuity/dist/types.js.map +0 -1
  691. package/packages/continuity/package.json +0 -40
  692. package/packages/continuity/src/formatter.ts +0 -536
  693. package/packages/continuity/src/handoff-store.ts +0 -523
  694. package/packages/continuity/src/index.ts +0 -12
  695. package/packages/continuity/src/ledger-store.ts +0 -594
  696. package/packages/continuity/src/manager.test.ts +0 -291
  697. package/packages/continuity/src/manager.ts +0 -774
  698. package/packages/continuity/src/parser.test.ts +0 -292
  699. package/packages/continuity/src/parser.ts +0 -680
  700. package/packages/continuity/src/types.ts +0 -211
  701. package/packages/continuity/tsconfig.json +0 -21
  702. package/packages/continuity/vitest.config.ts +0 -9
  703. package/packages/daemon/dist/agent-manager.d.ts +0 -134
  704. package/packages/daemon/dist/agent-manager.d.ts.map +0 -1
  705. package/packages/daemon/dist/agent-manager.js +0 -578
  706. package/packages/daemon/dist/agent-manager.js.map +0 -1
  707. package/packages/daemon/dist/agent-registry.d.ts +0 -99
  708. package/packages/daemon/dist/agent-registry.d.ts.map +0 -1
  709. package/packages/daemon/dist/agent-registry.js +0 -213
  710. package/packages/daemon/dist/agent-registry.js.map +0 -1
  711. package/packages/daemon/dist/agent-signing.d.ts +0 -158
  712. package/packages/daemon/dist/agent-signing.d.ts.map +0 -1
  713. package/packages/daemon/dist/agent-signing.js +0 -523
  714. package/packages/daemon/dist/agent-signing.js.map +0 -1
  715. package/packages/daemon/dist/api.d.ts +0 -106
  716. package/packages/daemon/dist/api.d.ts.map +0 -1
  717. package/packages/daemon/dist/api.js +0 -895
  718. package/packages/daemon/dist/api.js.map +0 -1
  719. package/packages/daemon/dist/auth.d.ts +0 -94
  720. package/packages/daemon/dist/auth.d.ts.map +0 -1
  721. package/packages/daemon/dist/auth.js +0 -197
  722. package/packages/daemon/dist/auth.js.map +0 -1
  723. package/packages/daemon/dist/channel-membership-store.d.ts +0 -55
  724. package/packages/daemon/dist/channel-membership-store.d.ts.map +0 -1
  725. package/packages/daemon/dist/channel-membership-store.js +0 -176
  726. package/packages/daemon/dist/channel-membership-store.js.map +0 -1
  727. package/packages/daemon/dist/cli-auth.d.ts +0 -97
  728. package/packages/daemon/dist/cli-auth.d.ts.map +0 -1
  729. package/packages/daemon/dist/cli-auth.js +0 -808
  730. package/packages/daemon/dist/cli-auth.js.map +0 -1
  731. package/packages/daemon/dist/cloud-sync.d.ts +0 -263
  732. package/packages/daemon/dist/cloud-sync.d.ts.map +0 -1
  733. package/packages/daemon/dist/cloud-sync.js +0 -820
  734. package/packages/daemon/dist/cloud-sync.js.map +0 -1
  735. package/packages/daemon/dist/connection.d.ts +0 -137
  736. package/packages/daemon/dist/connection.d.ts.map +0 -1
  737. package/packages/daemon/dist/connection.js +0 -465
  738. package/packages/daemon/dist/connection.js.map +0 -1
  739. package/packages/daemon/dist/consensus-integration.d.ts +0 -168
  740. package/packages/daemon/dist/consensus-integration.d.ts.map +0 -1
  741. package/packages/daemon/dist/consensus-integration.js +0 -371
  742. package/packages/daemon/dist/consensus-integration.js.map +0 -1
  743. package/packages/daemon/dist/consensus.d.ts +0 -269
  744. package/packages/daemon/dist/consensus.d.ts.map +0 -1
  745. package/packages/daemon/dist/consensus.js +0 -632
  746. package/packages/daemon/dist/consensus.js.map +0 -1
  747. package/packages/daemon/dist/delivery-tracker.d.ts +0 -34
  748. package/packages/daemon/dist/delivery-tracker.d.ts.map +0 -1
  749. package/packages/daemon/dist/delivery-tracker.js +0 -104
  750. package/packages/daemon/dist/delivery-tracker.js.map +0 -1
  751. package/packages/daemon/dist/enhanced-features.d.ts +0 -118
  752. package/packages/daemon/dist/enhanced-features.d.ts.map +0 -1
  753. package/packages/daemon/dist/enhanced-features.js +0 -177
  754. package/packages/daemon/dist/enhanced-features.js.map +0 -1
  755. package/packages/daemon/dist/index.d.ts +0 -29
  756. package/packages/daemon/dist/index.d.ts.map +0 -1
  757. package/packages/daemon/dist/index.js +0 -34
  758. package/packages/daemon/dist/index.js.map +0 -1
  759. package/packages/daemon/dist/orchestrator.d.ts +0 -217
  760. package/packages/daemon/dist/orchestrator.d.ts.map +0 -1
  761. package/packages/daemon/dist/orchestrator.js +0 -1172
  762. package/packages/daemon/dist/orchestrator.js.map +0 -1
  763. package/packages/daemon/dist/rate-limiter.d.ts +0 -68
  764. package/packages/daemon/dist/rate-limiter.d.ts.map +0 -1
  765. package/packages/daemon/dist/rate-limiter.js +0 -130
  766. package/packages/daemon/dist/rate-limiter.js.map +0 -1
  767. package/packages/daemon/dist/registry.d.ts +0 -9
  768. package/packages/daemon/dist/registry.d.ts.map +0 -1
  769. package/packages/daemon/dist/registry.js +0 -9
  770. package/packages/daemon/dist/registry.js.map +0 -1
  771. package/packages/daemon/dist/repo-manager.d.ts +0 -116
  772. package/packages/daemon/dist/repo-manager.d.ts.map +0 -1
  773. package/packages/daemon/dist/repo-manager.js +0 -384
  774. package/packages/daemon/dist/repo-manager.js.map +0 -1
  775. package/packages/daemon/dist/router.d.ts +0 -389
  776. package/packages/daemon/dist/router.d.ts.map +0 -1
  777. package/packages/daemon/dist/router.js +0 -1607
  778. package/packages/daemon/dist/router.js.map +0 -1
  779. package/packages/daemon/dist/server.d.ts +0 -201
  780. package/packages/daemon/dist/server.d.ts.map +0 -1
  781. package/packages/daemon/dist/server.js +0 -1791
  782. package/packages/daemon/dist/server.js.map +0 -1
  783. package/packages/daemon/dist/spawn-manager.d.ts +0 -119
  784. package/packages/daemon/dist/spawn-manager.d.ts.map +0 -1
  785. package/packages/daemon/dist/spawn-manager.js +0 -319
  786. package/packages/daemon/dist/spawn-manager.js.map +0 -1
  787. package/packages/daemon/dist/sync-queue.d.ts +0 -116
  788. package/packages/daemon/dist/sync-queue.d.ts.map +0 -1
  789. package/packages/daemon/dist/sync-queue.js +0 -361
  790. package/packages/daemon/dist/sync-queue.js.map +0 -1
  791. package/packages/daemon/dist/types.d.ts +0 -133
  792. package/packages/daemon/dist/types.d.ts.map +0 -1
  793. package/packages/daemon/dist/types.js +0 -6
  794. package/packages/daemon/dist/types.js.map +0 -1
  795. package/packages/daemon/dist/workspace-manager.d.ts +0 -80
  796. package/packages/daemon/dist/workspace-manager.d.ts.map +0 -1
  797. package/packages/daemon/dist/workspace-manager.js +0 -314
  798. package/packages/daemon/dist/workspace-manager.js.map +0 -1
  799. package/packages/daemon/package.json +0 -56
  800. package/packages/daemon/src/agent-manager.ts +0 -679
  801. package/packages/daemon/src/agent-registry.ts +0 -284
  802. package/packages/daemon/src/agent-signing.ts +0 -707
  803. package/packages/daemon/src/api.ts +0 -1034
  804. package/packages/daemon/src/auth.ts +0 -276
  805. package/packages/daemon/src/channel-membership-store.ts +0 -217
  806. package/packages/daemon/src/cli-auth.ts +0 -945
  807. package/packages/daemon/src/cloud-sync.ts +0 -1100
  808. package/packages/daemon/src/connection.ts +0 -561
  809. package/packages/daemon/src/consensus-integration.ts +0 -510
  810. package/packages/daemon/src/consensus.ts +0 -848
  811. package/packages/daemon/src/delivery-tracker.ts +0 -145
  812. package/packages/daemon/src/enhanced-features.ts +0 -390
  813. package/packages/daemon/src/index.ts +0 -48
  814. package/packages/daemon/src/orchestrator.test.ts +0 -231
  815. package/packages/daemon/src/orchestrator.ts +0 -1376
  816. package/packages/daemon/src/rate-limiter.ts +0 -172
  817. package/packages/daemon/src/registry.ts +0 -8
  818. package/packages/daemon/src/repo-manager.ts +0 -468
  819. package/packages/daemon/src/router.test.ts +0 -181
  820. package/packages/daemon/src/router.ts +0 -1925
  821. package/packages/daemon/src/server.ts +0 -2051
  822. package/packages/daemon/src/spawn-manager-set-model.test.ts +0 -144
  823. package/packages/daemon/src/spawn-manager.ts +0 -415
  824. package/packages/daemon/src/sync-queue.ts +0 -477
  825. package/packages/daemon/src/types.ts +0 -158
  826. package/packages/daemon/src/workspace-manager.ts +0 -371
  827. package/packages/daemon/tsconfig.json +0 -21
  828. package/packages/daemon/vitest.config.ts +0 -9
  829. package/packages/mcp/CHANGELOG.md +0 -28
  830. package/packages/mcp/LICENSE +0 -190
  831. package/packages/mcp/README.md +0 -266
  832. package/packages/mcp/dist/bin.d.ts +0 -12
  833. package/packages/mcp/dist/bin.d.ts.map +0 -1
  834. package/packages/mcp/dist/bin.js +0 -179
  835. package/packages/mcp/dist/bin.js.map +0 -1
  836. package/packages/mcp/dist/client-adapter.d.ts +0 -164
  837. package/packages/mcp/dist/client-adapter.d.ts.map +0 -1
  838. package/packages/mcp/dist/client-adapter.js +0 -231
  839. package/packages/mcp/dist/client-adapter.js.map +0 -1
  840. package/packages/mcp/dist/cloud.d.ts +0 -13
  841. package/packages/mcp/dist/cloud.d.ts.map +0 -1
  842. package/packages/mcp/dist/cloud.js +0 -25
  843. package/packages/mcp/dist/cloud.js.map +0 -1
  844. package/packages/mcp/dist/errors.d.ts +0 -9
  845. package/packages/mcp/dist/errors.d.ts.map +0 -1
  846. package/packages/mcp/dist/errors.js +0 -9
  847. package/packages/mcp/dist/errors.js.map +0 -1
  848. package/packages/mcp/dist/file-transport.d.ts +0 -103
  849. package/packages/mcp/dist/file-transport.d.ts.map +0 -1
  850. package/packages/mcp/dist/file-transport.js +0 -204
  851. package/packages/mcp/dist/file-transport.js.map +0 -1
  852. package/packages/mcp/dist/hybrid-client.d.ts +0 -5
  853. package/packages/mcp/dist/hybrid-client.d.ts.map +0 -1
  854. package/packages/mcp/dist/hybrid-client.js +0 -23
  855. package/packages/mcp/dist/hybrid-client.js.map +0 -1
  856. package/packages/mcp/dist/index.d.ts +0 -11
  857. package/packages/mcp/dist/index.d.ts.map +0 -1
  858. package/packages/mcp/dist/index.js +0 -25
  859. package/packages/mcp/dist/index.js.map +0 -1
  860. package/packages/mcp/dist/install-cli.d.ts +0 -35
  861. package/packages/mcp/dist/install-cli.d.ts.map +0 -1
  862. package/packages/mcp/dist/install-cli.js +0 -157
  863. package/packages/mcp/dist/install-cli.js.map +0 -1
  864. package/packages/mcp/dist/install.d.ts +0 -123
  865. package/packages/mcp/dist/install.d.ts.map +0 -1
  866. package/packages/mcp/dist/install.js +0 -661
  867. package/packages/mcp/dist/install.js.map +0 -1
  868. package/packages/mcp/dist/prompts/index.d.ts +0 -2
  869. package/packages/mcp/dist/prompts/index.d.ts.map +0 -1
  870. package/packages/mcp/dist/prompts/index.js +0 -2
  871. package/packages/mcp/dist/prompts/index.js.map +0 -1
  872. package/packages/mcp/dist/prompts/protocol.d.ts +0 -11
  873. package/packages/mcp/dist/prompts/protocol.d.ts.map +0 -1
  874. package/packages/mcp/dist/prompts/protocol.js +0 -160
  875. package/packages/mcp/dist/prompts/protocol.js.map +0 -1
  876. package/packages/mcp/dist/resources/agents.d.ts +0 -11
  877. package/packages/mcp/dist/resources/agents.d.ts.map +0 -1
  878. package/packages/mcp/dist/resources/agents.js +0 -17
  879. package/packages/mcp/dist/resources/agents.js.map +0 -1
  880. package/packages/mcp/dist/resources/inbox.d.ts +0 -11
  881. package/packages/mcp/dist/resources/inbox.d.ts.map +0 -1
  882. package/packages/mcp/dist/resources/inbox.js +0 -17
  883. package/packages/mcp/dist/resources/inbox.js.map +0 -1
  884. package/packages/mcp/dist/resources/index.d.ts +0 -4
  885. package/packages/mcp/dist/resources/index.d.ts.map +0 -1
  886. package/packages/mcp/dist/resources/index.js +0 -4
  887. package/packages/mcp/dist/resources/index.js.map +0 -1
  888. package/packages/mcp/dist/resources/project.d.ts +0 -11
  889. package/packages/mcp/dist/resources/project.d.ts.map +0 -1
  890. package/packages/mcp/dist/resources/project.js +0 -21
  891. package/packages/mcp/dist/resources/project.js.map +0 -1
  892. package/packages/mcp/dist/server.d.ts +0 -23
  893. package/packages/mcp/dist/server.d.ts.map +0 -1
  894. package/packages/mcp/dist/server.js +0 -317
  895. package/packages/mcp/dist/server.js.map +0 -1
  896. package/packages/mcp/dist/simple.d.ts +0 -170
  897. package/packages/mcp/dist/simple.d.ts.map +0 -1
  898. package/packages/mcp/dist/simple.js +0 -120
  899. package/packages/mcp/dist/simple.js.map +0 -1
  900. package/packages/mcp/dist/tools/index.d.ts +0 -20
  901. package/packages/mcp/dist/tools/index.d.ts.map +0 -1
  902. package/packages/mcp/dist/tools/index.js +0 -20
  903. package/packages/mcp/dist/tools/index.js.map +0 -1
  904. package/packages/mcp/dist/tools/relay-broadcast.d.ts +0 -20
  905. package/packages/mcp/dist/tools/relay-broadcast.d.ts.map +0 -1
  906. package/packages/mcp/dist/tools/relay-broadcast.js +0 -25
  907. package/packages/mcp/dist/tools/relay-broadcast.js.map +0 -1
  908. package/packages/mcp/dist/tools/relay-channel.d.ts +0 -75
  909. package/packages/mcp/dist/tools/relay-channel.d.ts.map +0 -1
  910. package/packages/mcp/dist/tools/relay-channel.js +0 -124
  911. package/packages/mcp/dist/tools/relay-channel.js.map +0 -1
  912. package/packages/mcp/dist/tools/relay-connected.d.ts +0 -17
  913. package/packages/mcp/dist/tools/relay-connected.d.ts.map +0 -1
  914. package/packages/mcp/dist/tools/relay-connected.js +0 -54
  915. package/packages/mcp/dist/tools/relay-connected.js.map +0 -1
  916. package/packages/mcp/dist/tools/relay-consensus.d.ts +0 -45
  917. package/packages/mcp/dist/tools/relay-consensus.d.ts.map +0 -1
  918. package/packages/mcp/dist/tools/relay-consensus.js +0 -80
  919. package/packages/mcp/dist/tools/relay-consensus.js.map +0 -1
  920. package/packages/mcp/dist/tools/relay-continuity.d.ts +0 -35
  921. package/packages/mcp/dist/tools/relay-continuity.d.ts.map +0 -1
  922. package/packages/mcp/dist/tools/relay-continuity.js +0 -101
  923. package/packages/mcp/dist/tools/relay-continuity.js.map +0 -1
  924. package/packages/mcp/dist/tools/relay-health.d.ts +0 -20
  925. package/packages/mcp/dist/tools/relay-health.d.ts.map +0 -1
  926. package/packages/mcp/dist/tools/relay-health.js +0 -130
  927. package/packages/mcp/dist/tools/relay-health.js.map +0 -1
  928. package/packages/mcp/dist/tools/relay-inbox.d.ts +0 -26
  929. package/packages/mcp/dist/tools/relay-inbox.d.ts.map +0 -1
  930. package/packages/mcp/dist/tools/relay-inbox.js +0 -58
  931. package/packages/mcp/dist/tools/relay-inbox.js.map +0 -1
  932. package/packages/mcp/dist/tools/relay-logs.d.ts +0 -20
  933. package/packages/mcp/dist/tools/relay-logs.d.ts.map +0 -1
  934. package/packages/mcp/dist/tools/relay-logs.js +0 -90
  935. package/packages/mcp/dist/tools/relay-logs.js.map +0 -1
  936. package/packages/mcp/dist/tools/relay-messages.d.ts +0 -32
  937. package/packages/mcp/dist/tools/relay-messages.d.ts.map +0 -1
  938. package/packages/mcp/dist/tools/relay-messages.js +0 -61
  939. package/packages/mcp/dist/tools/relay-messages.js.map +0 -1
  940. package/packages/mcp/dist/tools/relay-metrics.d.ts +0 -17
  941. package/packages/mcp/dist/tools/relay-metrics.d.ts.map +0 -1
  942. package/packages/mcp/dist/tools/relay-metrics.js +0 -124
  943. package/packages/mcp/dist/tools/relay-metrics.js.map +0 -1
  944. package/packages/mcp/dist/tools/relay-release.d.ts +0 -20
  945. package/packages/mcp/dist/tools/relay-release.d.ts.map +0 -1
  946. package/packages/mcp/dist/tools/relay-release.js +0 -44
  947. package/packages/mcp/dist/tools/relay-release.js.map +0 -1
  948. package/packages/mcp/dist/tools/relay-remove-agent.d.ts +0 -20
  949. package/packages/mcp/dist/tools/relay-remove-agent.d.ts.map +0 -1
  950. package/packages/mcp/dist/tools/relay-remove-agent.js +0 -50
  951. package/packages/mcp/dist/tools/relay-remove-agent.js.map +0 -1
  952. package/packages/mcp/dist/tools/relay-send.d.ts +0 -29
  953. package/packages/mcp/dist/tools/relay-send.d.ts.map +0 -1
  954. package/packages/mcp/dist/tools/relay-send.js +0 -73
  955. package/packages/mcp/dist/tools/relay-send.js.map +0 -1
  956. package/packages/mcp/dist/tools/relay-set-model.d.ts +0 -23
  957. package/packages/mcp/dist/tools/relay-set-model.d.ts.map +0 -1
  958. package/packages/mcp/dist/tools/relay-set-model.js +0 -52
  959. package/packages/mcp/dist/tools/relay-set-model.js.map +0 -1
  960. package/packages/mcp/dist/tools/relay-shadow.d.ts +0 -30
  961. package/packages/mcp/dist/tools/relay-shadow.d.ts.map +0 -1
  962. package/packages/mcp/dist/tools/relay-shadow.js +0 -55
  963. package/packages/mcp/dist/tools/relay-shadow.js.map +0 -1
  964. package/packages/mcp/dist/tools/relay-spawn.d.ts +0 -36
  965. package/packages/mcp/dist/tools/relay-spawn.d.ts.map +0 -1
  966. package/packages/mcp/dist/tools/relay-spawn.js +0 -73
  967. package/packages/mcp/dist/tools/relay-spawn.js.map +0 -1
  968. package/packages/mcp/dist/tools/relay-status.d.ts +0 -11
  969. package/packages/mcp/dist/tools/relay-status.d.ts.map +0 -1
  970. package/packages/mcp/dist/tools/relay-status.js +0 -43
  971. package/packages/mcp/dist/tools/relay-status.js.map +0 -1
  972. package/packages/mcp/dist/tools/relay-subscribe.d.ts +0 -27
  973. package/packages/mcp/dist/tools/relay-subscribe.d.ts.map +0 -1
  974. package/packages/mcp/dist/tools/relay-subscribe.js +0 -49
  975. package/packages/mcp/dist/tools/relay-subscribe.js.map +0 -1
  976. package/packages/mcp/dist/tools/relay-who.d.ts +0 -20
  977. package/packages/mcp/dist/tools/relay-who.d.ts.map +0 -1
  978. package/packages/mcp/dist/tools/relay-who.js +0 -62
  979. package/packages/mcp/dist/tools/relay-who.js.map +0 -1
  980. package/packages/mcp/package.json +0 -82
  981. package/packages/mcp/src/bin.ts +0 -200
  982. package/packages/mcp/src/client-adapter.ts +0 -358
  983. package/packages/mcp/src/cloud.ts +0 -41
  984. package/packages/mcp/src/errors.ts +0 -17
  985. package/packages/mcp/src/file-transport.ts +0 -275
  986. package/packages/mcp/src/hybrid-client.ts +0 -25
  987. package/packages/mcp/src/index.ts +0 -143
  988. package/packages/mcp/src/install-cli.ts +0 -210
  989. package/packages/mcp/src/install.ts +0 -820
  990. package/packages/mcp/src/prompts/index.ts +0 -1
  991. package/packages/mcp/src/prompts/protocol.ts +0 -164
  992. package/packages/mcp/src/resources/agents.ts +0 -21
  993. package/packages/mcp/src/resources/inbox.ts +0 -21
  994. package/packages/mcp/src/resources/index.ts +0 -3
  995. package/packages/mcp/src/resources/project.ts +0 -29
  996. package/packages/mcp/src/server.ts +0 -475
  997. package/packages/mcp/src/simple.ts +0 -214
  998. package/packages/mcp/src/tools/index.ts +0 -155
  999. package/packages/mcp/src/tools/relay-broadcast.ts +0 -32
  1000. package/packages/mcp/src/tools/relay-channel.ts +0 -151
  1001. package/packages/mcp/src/tools/relay-connected.ts +0 -67
  1002. package/packages/mcp/src/tools/relay-consensus.ts +0 -92
  1003. package/packages/mcp/src/tools/relay-continuity.ts +0 -127
  1004. package/packages/mcp/src/tools/relay-health.ts +0 -148
  1005. package/packages/mcp/src/tools/relay-inbox.ts +0 -70
  1006. package/packages/mcp/src/tools/relay-logs.ts +0 -106
  1007. package/packages/mcp/src/tools/relay-messages.ts +0 -66
  1008. package/packages/mcp/src/tools/relay-metrics.ts +0 -142
  1009. package/packages/mcp/src/tools/relay-release.ts +0 -54
  1010. package/packages/mcp/src/tools/relay-remove-agent.ts +0 -58
  1011. package/packages/mcp/src/tools/relay-send.ts +0 -84
  1012. package/packages/mcp/src/tools/relay-set-model.ts +0 -62
  1013. package/packages/mcp/src/tools/relay-shadow.ts +0 -67
  1014. package/packages/mcp/src/tools/relay-spawn.ts +0 -87
  1015. package/packages/mcp/src/tools/relay-status.ts +0 -57
  1016. package/packages/mcp/src/tools/relay-subscribe.ts +0 -61
  1017. package/packages/mcp/src/tools/relay-who.ts +0 -75
  1018. package/packages/mcp/tests/client.test.ts +0 -451
  1019. package/packages/mcp/tests/discover.test.ts +0 -256
  1020. package/packages/mcp/tests/install.test.ts +0 -123
  1021. package/packages/mcp/tests/prompts.test.ts +0 -12
  1022. package/packages/mcp/tests/resources.test.ts +0 -53
  1023. package/packages/mcp/tests/tools.test.ts +0 -1516
  1024. package/packages/mcp/tsconfig.json +0 -22
  1025. package/packages/mcp/vitest.config.ts +0 -9
  1026. package/packages/protocol/dist/channels.d.ts +0 -137
  1027. package/packages/protocol/dist/channels.d.ts.map +0 -1
  1028. package/packages/protocol/dist/channels.js +0 -154
  1029. package/packages/protocol/dist/channels.js.map +0 -1
  1030. package/packages/protocol/dist/framing.d.ts +0 -80
  1031. package/packages/protocol/dist/framing.d.ts.map +0 -1
  1032. package/packages/protocol/dist/framing.js +0 -206
  1033. package/packages/protocol/dist/framing.js.map +0 -1
  1034. package/packages/protocol/dist/id-generator.d.ts +0 -35
  1035. package/packages/protocol/dist/id-generator.d.ts.map +0 -1
  1036. package/packages/protocol/dist/id-generator.js +0 -60
  1037. package/packages/protocol/dist/id-generator.js.map +0 -1
  1038. package/packages/protocol/dist/index.d.ts +0 -5
  1039. package/packages/protocol/dist/index.d.ts.map +0 -1
  1040. package/packages/protocol/dist/index.js +0 -5
  1041. package/packages/protocol/dist/index.js.map +0 -1
  1042. package/packages/protocol/dist/relay-pty-schemas.d.ts +0 -340
  1043. package/packages/protocol/dist/relay-pty-schemas.d.ts.map +0 -1
  1044. package/packages/protocol/dist/relay-pty-schemas.js +0 -60
  1045. package/packages/protocol/dist/relay-pty-schemas.js.map +0 -1
  1046. package/packages/protocol/dist/types.d.ts +0 -793
  1047. package/packages/protocol/dist/types.d.ts.map +0 -1
  1048. package/packages/protocol/dist/types.js +0 -8
  1049. package/packages/protocol/dist/types.js.map +0 -1
  1050. package/packages/protocol/package.json +0 -61
  1051. package/packages/protocol/src/channels.test.ts +0 -330
  1052. package/packages/protocol/src/channels.ts +0 -270
  1053. package/packages/protocol/src/framing.test.ts +0 -164
  1054. package/packages/protocol/src/framing.ts +0 -242
  1055. package/packages/protocol/src/id-generator.ts +0 -69
  1056. package/packages/protocol/src/index.ts +0 -4
  1057. package/packages/protocol/src/relay-pty-schemas.ts +0 -400
  1058. package/packages/protocol/src/types.test.ts +0 -271
  1059. package/packages/protocol/src/types.ts +0 -988
  1060. package/packages/protocol/tsconfig.json +0 -21
  1061. package/packages/protocol/vitest.config.ts +0 -9
  1062. package/packages/resiliency/dist/cgroup-manager.d.ts +0 -152
  1063. package/packages/resiliency/dist/cgroup-manager.d.ts.map +0 -1
  1064. package/packages/resiliency/dist/cgroup-manager.js +0 -394
  1065. package/packages/resiliency/dist/cgroup-manager.js.map +0 -1
  1066. package/packages/resiliency/dist/context-persistence.d.ts +0 -140
  1067. package/packages/resiliency/dist/context-persistence.d.ts.map +0 -1
  1068. package/packages/resiliency/dist/context-persistence.js +0 -397
  1069. package/packages/resiliency/dist/context-persistence.js.map +0 -1
  1070. package/packages/resiliency/dist/crash-insights.d.ts +0 -156
  1071. package/packages/resiliency/dist/crash-insights.d.ts.map +0 -1
  1072. package/packages/resiliency/dist/crash-insights.js +0 -492
  1073. package/packages/resiliency/dist/crash-insights.js.map +0 -1
  1074. package/packages/resiliency/dist/gossip-health.d.ts +0 -137
  1075. package/packages/resiliency/dist/gossip-health.d.ts.map +0 -1
  1076. package/packages/resiliency/dist/gossip-health.js +0 -241
  1077. package/packages/resiliency/dist/gossip-health.js.map +0 -1
  1078. package/packages/resiliency/dist/health-monitor.d.ts +0 -97
  1079. package/packages/resiliency/dist/health-monitor.d.ts.map +0 -1
  1080. package/packages/resiliency/dist/health-monitor.js +0 -291
  1081. package/packages/resiliency/dist/health-monitor.js.map +0 -1
  1082. package/packages/resiliency/dist/index.d.ts +0 -69
  1083. package/packages/resiliency/dist/index.d.ts.map +0 -1
  1084. package/packages/resiliency/dist/index.js +0 -69
  1085. package/packages/resiliency/dist/index.js.map +0 -1
  1086. package/packages/resiliency/dist/leader-watchdog.d.ts +0 -109
  1087. package/packages/resiliency/dist/leader-watchdog.d.ts.map +0 -1
  1088. package/packages/resiliency/dist/leader-watchdog.js +0 -189
  1089. package/packages/resiliency/dist/leader-watchdog.js.map +0 -1
  1090. package/packages/resiliency/dist/logger.d.ts +0 -114
  1091. package/packages/resiliency/dist/logger.d.ts.map +0 -1
  1092. package/packages/resiliency/dist/logger.js +0 -250
  1093. package/packages/resiliency/dist/logger.js.map +0 -1
  1094. package/packages/resiliency/dist/memory-monitor.d.ts +0 -172
  1095. package/packages/resiliency/dist/memory-monitor.d.ts.map +0 -1
  1096. package/packages/resiliency/dist/memory-monitor.js +0 -599
  1097. package/packages/resiliency/dist/memory-monitor.js.map +0 -1
  1098. package/packages/resiliency/dist/metrics.d.ts +0 -115
  1099. package/packages/resiliency/dist/metrics.d.ts.map +0 -1
  1100. package/packages/resiliency/dist/metrics.js +0 -239
  1101. package/packages/resiliency/dist/metrics.js.map +0 -1
  1102. package/packages/resiliency/dist/provider-context.d.ts +0 -100
  1103. package/packages/resiliency/dist/provider-context.d.ts.map +0 -1
  1104. package/packages/resiliency/dist/provider-context.js +0 -362
  1105. package/packages/resiliency/dist/provider-context.js.map +0 -1
  1106. package/packages/resiliency/dist/stateless-lead.d.ts +0 -149
  1107. package/packages/resiliency/dist/stateless-lead.d.ts.map +0 -1
  1108. package/packages/resiliency/dist/stateless-lead.js +0 -308
  1109. package/packages/resiliency/dist/stateless-lead.js.map +0 -1
  1110. package/packages/resiliency/dist/supervisor.d.ts +0 -147
  1111. package/packages/resiliency/dist/supervisor.d.ts.map +0 -1
  1112. package/packages/resiliency/dist/supervisor.js +0 -459
  1113. package/packages/resiliency/dist/supervisor.js.map +0 -1
  1114. package/packages/resiliency/package.json +0 -38
  1115. package/packages/resiliency/src/cgroup-manager.ts +0 -468
  1116. package/packages/resiliency/src/context-persistence.ts +0 -538
  1117. package/packages/resiliency/src/crash-insights.test.ts +0 -620
  1118. package/packages/resiliency/src/crash-insights.ts +0 -660
  1119. package/packages/resiliency/src/gossip-health.ts +0 -333
  1120. package/packages/resiliency/src/health-monitor.ts +0 -371
  1121. package/packages/resiliency/src/index.ts +0 -157
  1122. package/packages/resiliency/src/leader-watchdog.ts +0 -260
  1123. package/packages/resiliency/src/logger.ts +0 -320
  1124. package/packages/resiliency/src/memory-monitor.test.ts +0 -637
  1125. package/packages/resiliency/src/memory-monitor.ts +0 -740
  1126. package/packages/resiliency/src/metrics.ts +0 -311
  1127. package/packages/resiliency/src/provider-context.ts +0 -452
  1128. package/packages/resiliency/src/stateless-lead.ts +0 -408
  1129. package/packages/resiliency/src/supervisor.ts +0 -578
  1130. package/packages/resiliency/tsconfig.json +0 -21
  1131. package/packages/resiliency/vitest.config.ts +0 -9
  1132. package/packages/sdk/dist/discovery.d.ts +0 -10
  1133. package/packages/sdk/dist/discovery.d.ts.map +0 -1
  1134. package/packages/sdk/dist/discovery.js +0 -22
  1135. package/packages/sdk/dist/discovery.js.map +0 -1
  1136. package/packages/sdk/dist/errors.d.ts +0 -9
  1137. package/packages/sdk/dist/errors.d.ts.map +0 -1
  1138. package/packages/sdk/dist/errors.js +0 -9
  1139. package/packages/sdk/dist/errors.js.map +0 -1
  1140. package/packages/sdk/dist/protocol/index.d.ts +0 -8
  1141. package/packages/sdk/dist/protocol/index.d.ts.map +0 -1
  1142. package/packages/sdk/dist/protocol/index.js +0 -8
  1143. package/packages/sdk/dist/protocol/index.js.map +0 -1
  1144. package/packages/sdk/examples/SWARM_CAPABILITIES.md +0 -498
  1145. package/packages/sdk/examples/SWARM_PATTERNS.md +0 -541
  1146. package/packages/sdk/src/client.test.ts +0 -1041
  1147. package/packages/sdk/src/discovery.ts +0 -38
  1148. package/packages/sdk/src/errors.ts +0 -17
  1149. package/packages/sdk/src/logs.test.ts +0 -98
  1150. package/packages/sdk/src/protocol/framing.test.ts +0 -164
  1151. package/packages/sdk/src/protocol/index.ts +0 -8
  1152. package/packages/spawner/.trajectories/index.json +0 -5
  1153. package/packages/spawner/API.md +0 -256
  1154. package/packages/spawner/dist/index.d.ts +0 -8
  1155. package/packages/spawner/dist/index.d.ts.map +0 -1
  1156. package/packages/spawner/dist/index.js +0 -8
  1157. package/packages/spawner/dist/index.js.map +0 -1
  1158. package/packages/spawner/dist/types.d.ts +0 -552
  1159. package/packages/spawner/dist/types.d.ts.map +0 -1
  1160. package/packages/spawner/dist/types.js +0 -193
  1161. package/packages/spawner/dist/types.js.map +0 -1
  1162. package/packages/spawner/package.json +0 -47
  1163. package/packages/spawner/src/index.ts +0 -8
  1164. package/packages/spawner/src/types.test.ts +0 -385
  1165. package/packages/spawner/src/types.ts +0 -228
  1166. package/packages/spawner/tsconfig.json +0 -19
  1167. package/packages/spawner/vitest.config.ts +0 -9
  1168. package/packages/state/dist/agent-state.d.ts +0 -40
  1169. package/packages/state/dist/agent-state.d.ts.map +0 -1
  1170. package/packages/state/dist/agent-state.js +0 -120
  1171. package/packages/state/dist/agent-state.js.map +0 -1
  1172. package/packages/state/dist/index.d.ts +0 -8
  1173. package/packages/state/dist/index.d.ts.map +0 -1
  1174. package/packages/state/dist/index.js +0 -8
  1175. package/packages/state/dist/index.js.map +0 -1
  1176. package/packages/state/package.json +0 -37
  1177. package/packages/state/src/agent-state.test.ts +0 -335
  1178. package/packages/state/src/agent-state.ts +0 -153
  1179. package/packages/state/src/index.ts +0 -12
  1180. package/packages/state/tsconfig.json +0 -21
  1181. package/packages/state/vitest.config.ts +0 -9
  1182. package/packages/storage/dist/adapter.d.ts +0 -189
  1183. package/packages/storage/dist/adapter.d.ts.map +0 -1
  1184. package/packages/storage/dist/adapter.js +0 -267
  1185. package/packages/storage/dist/adapter.js.map +0 -1
  1186. package/packages/storage/dist/batched-sqlite-adapter.d.ts +0 -75
  1187. package/packages/storage/dist/batched-sqlite-adapter.d.ts.map +0 -1
  1188. package/packages/storage/dist/batched-sqlite-adapter.js +0 -189
  1189. package/packages/storage/dist/batched-sqlite-adapter.js.map +0 -1
  1190. package/packages/storage/dist/dead-letter-queue.d.ts +0 -196
  1191. package/packages/storage/dist/dead-letter-queue.d.ts.map +0 -1
  1192. package/packages/storage/dist/dead-letter-queue.js +0 -427
  1193. package/packages/storage/dist/dead-letter-queue.js.map +0 -1
  1194. package/packages/storage/dist/dlq-adapter.d.ts +0 -195
  1195. package/packages/storage/dist/dlq-adapter.d.ts.map +0 -1
  1196. package/packages/storage/dist/dlq-adapter.js +0 -664
  1197. package/packages/storage/dist/dlq-adapter.js.map +0 -1
  1198. package/packages/storage/dist/index.d.ts +0 -6
  1199. package/packages/storage/dist/index.d.ts.map +0 -1
  1200. package/packages/storage/dist/index.js +0 -7
  1201. package/packages/storage/dist/index.js.map +0 -1
  1202. package/packages/storage/dist/jsonl-adapter.d.ts +0 -91
  1203. package/packages/storage/dist/jsonl-adapter.d.ts.map +0 -1
  1204. package/packages/storage/dist/jsonl-adapter.js +0 -580
  1205. package/packages/storage/dist/jsonl-adapter.js.map +0 -1
  1206. package/packages/storage/dist/sqlite-adapter.d.ts +0 -131
  1207. package/packages/storage/dist/sqlite-adapter.d.ts.map +0 -1
  1208. package/packages/storage/dist/sqlite-adapter.js +0 -865
  1209. package/packages/storage/dist/sqlite-adapter.js.map +0 -1
  1210. package/packages/storage/package.json +0 -74
  1211. package/packages/storage/src/adapter.ts +0 -446
  1212. package/packages/storage/src/batched-sqlite-adapter.test.ts +0 -256
  1213. package/packages/storage/src/batched-sqlite-adapter.ts +0 -239
  1214. package/packages/storage/src/dead-letter-queue.ts +0 -643
  1215. package/packages/storage/src/dlq-adapter.test.ts +0 -509
  1216. package/packages/storage/src/dlq-adapter.ts +0 -954
  1217. package/packages/storage/src/index.ts +0 -6
  1218. package/packages/storage/src/jsonl-adapter.test.ts +0 -239
  1219. package/packages/storage/src/jsonl-adapter.ts +0 -704
  1220. package/packages/storage/src/memory-adapter.test.ts +0 -36
  1221. package/packages/storage/src/sqlite-adapter.test.ts +0 -580
  1222. package/packages/storage/src/sqlite-adapter.ts +0 -1099
  1223. package/packages/storage/tsconfig.json +0 -21
  1224. package/packages/storage/vitest.config.ts +0 -9
  1225. package/packages/wrapper/dist/__fixtures__/claude-outputs.d.ts +0 -49
  1226. package/packages/wrapper/dist/__fixtures__/claude-outputs.d.ts.map +0 -1
  1227. package/packages/wrapper/dist/__fixtures__/claude-outputs.js +0 -443
  1228. package/packages/wrapper/dist/__fixtures__/claude-outputs.js.map +0 -1
  1229. package/packages/wrapper/dist/__fixtures__/codex-outputs.d.ts +0 -9
  1230. package/packages/wrapper/dist/__fixtures__/codex-outputs.d.ts.map +0 -1
  1231. package/packages/wrapper/dist/__fixtures__/codex-outputs.js +0 -94
  1232. package/packages/wrapper/dist/__fixtures__/codex-outputs.js.map +0 -1
  1233. package/packages/wrapper/dist/__fixtures__/gemini-outputs.d.ts +0 -19
  1234. package/packages/wrapper/dist/__fixtures__/gemini-outputs.d.ts.map +0 -1
  1235. package/packages/wrapper/dist/__fixtures__/gemini-outputs.js +0 -144
  1236. package/packages/wrapper/dist/__fixtures__/gemini-outputs.js.map +0 -1
  1237. package/packages/wrapper/dist/__fixtures__/index.d.ts +0 -68
  1238. package/packages/wrapper/dist/__fixtures__/index.d.ts.map +0 -1
  1239. package/packages/wrapper/dist/__fixtures__/index.js +0 -44
  1240. package/packages/wrapper/dist/__fixtures__/index.js.map +0 -1
  1241. package/packages/wrapper/dist/auth-detection.d.ts +0 -49
  1242. package/packages/wrapper/dist/auth-detection.d.ts.map +0 -1
  1243. package/packages/wrapper/dist/auth-detection.js +0 -199
  1244. package/packages/wrapper/dist/auth-detection.js.map +0 -1
  1245. package/packages/wrapper/dist/base-wrapper.d.ts +0 -254
  1246. package/packages/wrapper/dist/base-wrapper.d.ts.map +0 -1
  1247. package/packages/wrapper/dist/base-wrapper.js +0 -664
  1248. package/packages/wrapper/dist/base-wrapper.js.map +0 -1
  1249. package/packages/wrapper/dist/client.d.ts +0 -291
  1250. package/packages/wrapper/dist/client.d.ts.map +0 -1
  1251. package/packages/wrapper/dist/client.js +0 -926
  1252. package/packages/wrapper/dist/client.js.map +0 -1
  1253. package/packages/wrapper/dist/id-generator.d.ts +0 -35
  1254. package/packages/wrapper/dist/id-generator.d.ts.map +0 -1
  1255. package/packages/wrapper/dist/id-generator.js +0 -60
  1256. package/packages/wrapper/dist/id-generator.js.map +0 -1
  1257. package/packages/wrapper/dist/idle-detector.d.ts +0 -114
  1258. package/packages/wrapper/dist/idle-detector.d.ts.map +0 -1
  1259. package/packages/wrapper/dist/idle-detector.js +0 -317
  1260. package/packages/wrapper/dist/idle-detector.js.map +0 -1
  1261. package/packages/wrapper/dist/inbox.d.ts +0 -37
  1262. package/packages/wrapper/dist/inbox.d.ts.map +0 -1
  1263. package/packages/wrapper/dist/inbox.js +0 -73
  1264. package/packages/wrapper/dist/inbox.js.map +0 -1
  1265. package/packages/wrapper/dist/index.d.ts +0 -40
  1266. package/packages/wrapper/dist/index.d.ts.map +0 -1
  1267. package/packages/wrapper/dist/index.js +0 -53
  1268. package/packages/wrapper/dist/index.js.map +0 -1
  1269. package/packages/wrapper/dist/opencode-api.d.ts +0 -106
  1270. package/packages/wrapper/dist/opencode-api.d.ts.map +0 -1
  1271. package/packages/wrapper/dist/opencode-api.js +0 -219
  1272. package/packages/wrapper/dist/opencode-api.js.map +0 -1
  1273. package/packages/wrapper/dist/opencode-wrapper.d.ts +0 -161
  1274. package/packages/wrapper/dist/opencode-wrapper.d.ts.map +0 -1
  1275. package/packages/wrapper/dist/opencode-wrapper.js +0 -438
  1276. package/packages/wrapper/dist/opencode-wrapper.js.map +0 -1
  1277. package/packages/wrapper/dist/parser.d.ts +0 -236
  1278. package/packages/wrapper/dist/parser.d.ts.map +0 -1
  1279. package/packages/wrapper/dist/parser.js +0 -1238
  1280. package/packages/wrapper/dist/parser.js.map +0 -1
  1281. package/packages/wrapper/dist/prompt-composer.d.ts +0 -67
  1282. package/packages/wrapper/dist/prompt-composer.d.ts.map +0 -1
  1283. package/packages/wrapper/dist/prompt-composer.js +0 -168
  1284. package/packages/wrapper/dist/prompt-composer.js.map +0 -1
  1285. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +0 -486
  1286. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts.map +0 -1
  1287. package/packages/wrapper/dist/relay-pty-orchestrator.js +0 -2550
  1288. package/packages/wrapper/dist/relay-pty-orchestrator.js.map +0 -1
  1289. package/packages/wrapper/dist/shared.d.ts +0 -262
  1290. package/packages/wrapper/dist/shared.d.ts.map +0 -1
  1291. package/packages/wrapper/dist/shared.js +0 -507
  1292. package/packages/wrapper/dist/shared.js.map +0 -1
  1293. package/packages/wrapper/dist/stuck-detector.d.ts +0 -161
  1294. package/packages/wrapper/dist/stuck-detector.d.ts.map +0 -1
  1295. package/packages/wrapper/dist/stuck-detector.js +0 -402
  1296. package/packages/wrapper/dist/stuck-detector.js.map +0 -1
  1297. package/packages/wrapper/dist/tmux-resolver.d.ts +0 -55
  1298. package/packages/wrapper/dist/tmux-resolver.d.ts.map +0 -1
  1299. package/packages/wrapper/dist/tmux-resolver.js +0 -175
  1300. package/packages/wrapper/dist/tmux-resolver.js.map +0 -1
  1301. package/packages/wrapper/dist/tmux-wrapper.d.ts +0 -352
  1302. package/packages/wrapper/dist/tmux-wrapper.d.ts.map +0 -1
  1303. package/packages/wrapper/dist/tmux-wrapper.js +0 -1816
  1304. package/packages/wrapper/dist/tmux-wrapper.js.map +0 -1
  1305. package/packages/wrapper/dist/trajectory-integration.d.ts +0 -292
  1306. package/packages/wrapper/dist/trajectory-integration.d.ts.map +0 -1
  1307. package/packages/wrapper/dist/trajectory-integration.js +0 -979
  1308. package/packages/wrapper/dist/trajectory-integration.js.map +0 -1
  1309. package/packages/wrapper/dist/wrapper-events.d.ts +0 -489
  1310. package/packages/wrapper/dist/wrapper-events.d.ts.map +0 -1
  1311. package/packages/wrapper/dist/wrapper-events.js +0 -252
  1312. package/packages/wrapper/dist/wrapper-events.js.map +0 -1
  1313. package/packages/wrapper/dist/wrapper-types.d.ts +0 -41
  1314. package/packages/wrapper/dist/wrapper-types.d.ts.map +0 -1
  1315. package/packages/wrapper/dist/wrapper-types.js +0 -7
  1316. package/packages/wrapper/dist/wrapper-types.js.map +0 -1
  1317. package/packages/wrapper/package.json +0 -60
  1318. package/packages/wrapper/src/__fixtures__/claude-outputs.ts +0 -471
  1319. package/packages/wrapper/src/__fixtures__/codex-outputs.ts +0 -99
  1320. package/packages/wrapper/src/__fixtures__/gemini-outputs.ts +0 -151
  1321. package/packages/wrapper/src/__fixtures__/index.ts +0 -47
  1322. package/packages/wrapper/src/auth-detection.ts +0 -244
  1323. package/packages/wrapper/src/base-wrapper.test.ts +0 -589
  1324. package/packages/wrapper/src/base-wrapper.ts +0 -841
  1325. package/packages/wrapper/src/client.test.ts +0 -351
  1326. package/packages/wrapper/src/client.ts +0 -1166
  1327. package/packages/wrapper/src/id-generator.test.ts +0 -71
  1328. package/packages/wrapper/src/id-generator.ts +0 -69
  1329. package/packages/wrapper/src/idle-detector.test.ts +0 -418
  1330. package/packages/wrapper/src/idle-detector.ts +0 -384
  1331. package/packages/wrapper/src/inbox.test.ts +0 -233
  1332. package/packages/wrapper/src/inbox.ts +0 -89
  1333. package/packages/wrapper/src/index.ts +0 -199
  1334. package/packages/wrapper/src/opencode-api.test.ts +0 -292
  1335. package/packages/wrapper/src/opencode-api.ts +0 -285
  1336. package/packages/wrapper/src/opencode-wrapper.ts +0 -541
  1337. package/packages/wrapper/src/parser.regression.test.ts +0 -251
  1338. package/packages/wrapper/src/parser.test.ts +0 -1359
  1339. package/packages/wrapper/src/parser.ts +0 -1477
  1340. package/packages/wrapper/src/prompt-composer.test.ts +0 -219
  1341. package/packages/wrapper/src/prompt-composer.ts +0 -231
  1342. package/packages/wrapper/src/relay-pty-orchestrator.test.ts +0 -1386
  1343. package/packages/wrapper/src/relay-pty-orchestrator.ts +0 -3041
  1344. package/packages/wrapper/src/shared.test.ts +0 -467
  1345. package/packages/wrapper/src/shared.ts +0 -652
  1346. package/packages/wrapper/src/stuck-detector.test.ts +0 -303
  1347. package/packages/wrapper/src/stuck-detector.ts +0 -511
  1348. package/packages/wrapper/src/tmux-resolver.test.ts +0 -104
  1349. package/packages/wrapper/src/tmux-resolver.ts +0 -207
  1350. package/packages/wrapper/src/tmux-wrapper.test.ts +0 -316
  1351. package/packages/wrapper/src/tmux-wrapper.ts +0 -2095
  1352. package/packages/wrapper/src/trajectory-detection.test.ts +0 -151
  1353. package/packages/wrapper/src/trajectory-integration.ts +0 -1261
  1354. package/packages/wrapper/src/wrapper-events.ts +0 -395
  1355. package/packages/wrapper/src/wrapper-types.ts +0 -45
  1356. package/packages/wrapper/tsconfig.json +0 -19
  1357. package/packages/wrapper/vitest.config.ts +0 -9
  1358. /package/packages/{broker-sdk → sdk}/dist/__tests__/facade.test.d.ts +0 -0
  1359. /package/packages/{broker-sdk → sdk}/dist/__tests__/facade.test.d.ts.map +0 -0
  1360. /package/packages/{broker-sdk → sdk}/dist/__tests__/integration.test.d.ts +0 -0
  1361. /package/packages/{broker-sdk → sdk}/dist/__tests__/integration.test.d.ts.map +0 -0
  1362. /package/packages/{broker-sdk → sdk}/dist/__tests__/quickstart.test.d.ts +0 -0
  1363. /package/packages/{broker-sdk → sdk}/dist/__tests__/quickstart.test.d.ts.map +0 -0
  1364. /package/packages/{broker-sdk → sdk}/dist/__tests__/unit.test.d.ts +0 -0
  1365. /package/packages/{broker-sdk → sdk}/dist/__tests__/unit.test.d.ts.map +0 -0
  1366. /package/packages/{broker-sdk → sdk}/dist/browser.d.ts +0 -0
  1367. /package/packages/{broker-sdk → sdk}/dist/browser.d.ts.map +0 -0
  1368. /package/packages/{broker-sdk → sdk}/dist/browser.js +0 -0
  1369. /package/packages/{broker-sdk → sdk}/dist/browser.js.map +0 -0
  1370. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.d.ts +0 -0
  1371. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.d.ts.map +0 -0
  1372. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.js +0 -0
  1373. /package/packages/{broker-sdk → sdk}/dist/consensus-helpers.js.map +0 -0
  1374. /package/packages/{broker-sdk → sdk}/dist/consensus.d.ts +0 -0
  1375. /package/packages/{broker-sdk → sdk}/dist/consensus.d.ts.map +0 -0
  1376. /package/packages/{broker-sdk → sdk}/dist/consensus.js +0 -0
  1377. /package/packages/{broker-sdk → sdk}/dist/consensus.js.map +0 -0
  1378. /package/packages/{broker-sdk → sdk}/dist/examples/demo.d.ts +0 -0
  1379. /package/packages/{broker-sdk → sdk}/dist/examples/demo.d.ts.map +0 -0
  1380. /package/packages/{broker-sdk → sdk}/dist/examples/demo.js +0 -0
  1381. /package/packages/{broker-sdk → sdk}/dist/examples/demo.js.map +0 -0
  1382. /package/packages/{broker-sdk → sdk}/dist/examples/example.d.ts +0 -0
  1383. /package/packages/{broker-sdk → sdk}/dist/examples/example.d.ts.map +0 -0
  1384. /package/packages/{broker-sdk → sdk}/dist/examples/example.js +0 -0
  1385. /package/packages/{broker-sdk → sdk}/dist/examples/example.js.map +0 -0
  1386. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.d.ts +0 -0
  1387. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.d.ts.map +0 -0
  1388. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.js +0 -0
  1389. /package/packages/{broker-sdk → sdk}/dist/examples/quickstart.js.map +0 -0
  1390. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.d.ts +0 -0
  1391. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.d.ts.map +0 -0
  1392. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.js +0 -0
  1393. /package/packages/{broker-sdk → sdk}/dist/examples/ralph-loop.js.map +0 -0
  1394. /package/packages/{broker-sdk → sdk}/dist/protocol.js +0 -0
  1395. /package/packages/{broker-sdk → sdk}/dist/protocol.js.map +0 -0
  1396. /package/packages/{broker-sdk → sdk}/dist/pty.d.ts +0 -0
  1397. /package/packages/{broker-sdk → sdk}/dist/shadow.js +0 -0
  1398. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.d.ts +0 -0
  1399. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.d.ts.map +0 -0
  1400. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.js +0 -0
  1401. /package/packages/{broker-sdk → sdk}/dist/workflows/barrier.js.map +0 -0
  1402. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.d.ts +0 -0
  1403. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.d.ts.map +0 -0
  1404. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.js +0 -0
  1405. /package/packages/{broker-sdk → sdk}/dist/workflows/memory-db.js.map +0 -0
  1406. /package/packages/{broker-sdk → sdk}/dist/workflows/state.d.ts +0 -0
  1407. /package/packages/{broker-sdk → sdk}/dist/workflows/state.d.ts.map +0 -0
  1408. /package/packages/{broker-sdk → sdk}/dist/workflows/state.js +0 -0
  1409. /package/packages/{broker-sdk → sdk}/dist/workflows/state.js.map +0 -0
  1410. /package/packages/{broker-sdk → sdk}/src/__tests__/workflow-trajectory.test.ts +0 -0
  1411. /package/packages/{broker-sdk → sdk}/src/browser.ts +0 -0
  1412. /package/packages/{broker-sdk → sdk}/src/consensus-helpers.ts +0 -0
  1413. /package/packages/{broker-sdk → sdk}/src/consensus.ts +0 -0
  1414. /package/packages/{broker-sdk → sdk}/src/examples/demo.ts +0 -0
  1415. /package/packages/{broker-sdk → sdk}/src/examples/example.ts +0 -0
  1416. /package/packages/{broker-sdk → sdk}/src/examples/quickstart.ts +0 -0
  1417. /package/packages/{broker-sdk → sdk}/src/examples/ralph-loop.ts +0 -0
  1418. /package/packages/{broker-sdk → sdk}/src/examples/sample-prd.json +0 -0
  1419. /package/packages/{broker-sdk → sdk}/src/workflows/barrier.ts +0 -0
  1420. /package/packages/{broker-sdk → sdk}/src/workflows/memory-db.ts +0 -0
  1421. /package/packages/{broker-sdk → sdk}/src/workflows/state.ts +0 -0
@@ -1,1607 +0,0 @@
1
- /**
2
- * Message router for the agent relay daemon.
3
- * Handles routing messages between agents, topic subscriptions, and broadcast.
4
- */
5
- import { generateId } from '@agent-relay/wrapper';
6
- import { PROTOCOL_VERSION, } from '@agent-relay/protocol/types';
7
- import { routerLog } from '@agent-relay/utils/logger';
8
- import { RateLimiter, NoOpRateLimiter } from './rate-limiter.js';
9
- import * as crypto from 'node:crypto';
10
- import { DeliveryTracker, } from './delivery-tracker.js';
11
- export class Router {
12
- storage;
13
- channelMembershipStore;
14
- connections = new Map(); // connectionId -> Connection
15
- agents = new Map(); // agentName -> Connection
16
- subscriptions = new Map(); // topic -> Set<agentName>
17
- processingAgents = new Map(); // agentName -> processing state
18
- registry;
19
- crossMachineHandler;
20
- deliveryTracker;
21
- /** Shadow relationships: primaryAgent -> list of shadow configs */
22
- shadowsByPrimary = new Map();
23
- /** Reverse lookup: shadowAgent -> primaryAgent (for cleanup) */
24
- primaryByShadow = new Map();
25
- /** Channel membership: channel -> Set of member names */
26
- channels = new Map();
27
- /** User entities (human users, not agents) - supports multiple connections per user (multi-tab) */
28
- users = new Map();
29
- /** Reverse lookup: member name -> Set of channels they're in */
30
- memberChannels = new Map();
31
- /**
32
- * Agents that are currently being spawned but haven't completed HELLO yet.
33
- * Maps agent name to timestamp when spawn started.
34
- * Messages sent to these agents will be queued for delivery after HELLO completes.
35
- */
36
- spawningAgents = new Map();
37
- /**
38
- * Recently disconnected user-type connections (e.g., __cli_sender__).
39
- * Maps agent name to disconnect timestamp.
40
- * Messages to these users are persisted so they appear in the dashboard.
41
- */
42
- recentlyDisconnectedUsers = new Map();
43
- static RECENT_USER_TTL_MS = 5 * 60 * 1000; // 5 minutes
44
- /** Default timeout for processing indicator (30 seconds) */
45
- static PROCESSING_TIMEOUT_MS = 30_000;
46
- /** Timeout for spawning agent entries (60 seconds) */
47
- static SPAWNING_TIMEOUT_MS = 60_000;
48
- /** Callback when processing state changes (for real-time dashboard updates) */
49
- onProcessingStateChange;
50
- /** Rate limiter for per-agent throttling */
51
- rateLimiter;
52
- constructor(options = {}) {
53
- this.storage = options.storage;
54
- this.channelMembershipStore = options.channelMembershipStore;
55
- this.registry = options.registry;
56
- this.onProcessingStateChange = options.onProcessingStateChange;
57
- this.crossMachineHandler = options.crossMachineHandler;
58
- this.deliveryTracker = new DeliveryTracker({
59
- storage: this.storage,
60
- delivery: options.delivery,
61
- getConnection: (id) => this.connections.get(id),
62
- });
63
- // Initialize rate limiter (null = disabled)
64
- this.rateLimiter = options.rateLimit === null
65
- ? new NoOpRateLimiter()
66
- : new RateLimiter(options.rateLimit);
67
- }
68
- /**
69
- * Restore channel memberships from persisted storage.
70
- */
71
- async restoreChannelMemberships() {
72
- if (!this.storage && !this.channelMembershipStore)
73
- return;
74
- try {
75
- if (this.channelMembershipStore) {
76
- const memberships = await this.channelMembershipStore.loadMemberships();
77
- for (const membership of memberships) {
78
- this.handleMembershipUpdate({
79
- channel: membership.channel,
80
- member: membership.member,
81
- action: 'join',
82
- });
83
- }
84
- }
85
- if (this.storage) {
86
- const messages = await this.storage.getMessages({ order: 'asc' });
87
- for (const msg of messages) {
88
- const channel = msg.to;
89
- const data = msg.data;
90
- const membership = data?._channelMembership;
91
- if (!channel || !membership?.member) {
92
- continue;
93
- }
94
- const action = membership.action ?? 'join';
95
- this.handleMembershipUpdate({
96
- channel,
97
- member: membership.member,
98
- action,
99
- });
100
- }
101
- }
102
- }
103
- catch (err) {
104
- routerLog.error('Failed to restore channel memberships', { error: String(err) });
105
- }
106
- }
107
- /**
108
- * Set or update the cross-machine handler.
109
- */
110
- setCrossMachineHandler(handler) {
111
- this.crossMachineHandler = handler;
112
- }
113
- /**
114
- * Mark an agent as spawning (before HELLO completes).
115
- * Messages sent to this agent will be queued for delivery after registration.
116
- */
117
- markSpawning(agentName) {
118
- this.spawningAgents.set(agentName, Date.now());
119
- routerLog.info(`Agent marked as spawning: ${agentName}`, {
120
- currentSpawning: Array.from(this.spawningAgents.keys()),
121
- });
122
- // Clean up stale spawning entries
123
- this.cleanupStaleSpawning();
124
- }
125
- /**
126
- * Clear the spawning flag for an agent.
127
- * Called when agent completes registration or spawn fails.
128
- */
129
- clearSpawning(agentName) {
130
- if (this.spawningAgents.delete(agentName)) {
131
- routerLog.debug(`Agent spawning flag cleared: ${agentName}`);
132
- }
133
- }
134
- /**
135
- * Check if an agent is currently spawning.
136
- */
137
- isSpawning(agentName) {
138
- const timestamp = this.spawningAgents.get(agentName);
139
- if (!timestamp)
140
- return false;
141
- // Check if spawn has timed out
142
- if (Date.now() - timestamp > Router.SPAWNING_TIMEOUT_MS) {
143
- this.spawningAgents.delete(agentName);
144
- return false;
145
- }
146
- return true;
147
- }
148
- /**
149
- * Clean up spawning entries older than SPAWNING_TIMEOUT_MS.
150
- */
151
- cleanupStaleSpawning() {
152
- const now = Date.now();
153
- for (const [name, timestamp] of this.spawningAgents) {
154
- if (now - timestamp > Router.SPAWNING_TIMEOUT_MS) {
155
- this.spawningAgents.delete(name);
156
- routerLog.debug(`Cleaned up stale spawning entry: ${name}`);
157
- }
158
- }
159
- this.cleanupStaleRecentUsers();
160
- }
161
- /**
162
- * Clean up recently-disconnected user entries older than RECENT_USER_TTL_MS.
163
- * Called from both cleanupStaleSpawning() and unregister() to prevent unbounded growth.
164
- */
165
- cleanupStaleRecentUsers() {
166
- const now = Date.now();
167
- for (const [name, timestamp] of this.recentlyDisconnectedUsers) {
168
- if (now - timestamp > Router.RECENT_USER_TTL_MS) {
169
- this.recentlyDisconnectedUsers.delete(name);
170
- routerLog.debug(`Cleaned up stale recently-disconnected user: ${name}`);
171
- }
172
- }
173
- }
174
- /**
175
- * Register a connection after successful handshake.
176
- */
177
- register(connection) {
178
- this.connections.set(connection.id, connection);
179
- if (connection.agentName) {
180
- const isUser = connection.entityType === 'user';
181
- if (isUser) {
182
- // Users can have multiple connections (e.g., multiple browser tabs)
183
- // Track ALL connections per user so messages reach all tabs
184
- if (!this.users.has(connection.agentName)) {
185
- this.users.set(connection.agentName, new Set());
186
- }
187
- this.users.get(connection.agentName).add(connection);
188
- // Clear recently-disconnected tracking since user is back online
189
- this.recentlyDisconnectedUsers.delete(connection.agentName);
190
- routerLog.info(`User registered: ${connection.agentName} (${this.users.get(connection.agentName).size} connections)`);
191
- }
192
- else {
193
- // Handle existing agent connection with same name (disconnect old)
194
- const existing = this.agents.get(connection.agentName);
195
- if (existing && existing.id !== connection.id) {
196
- routerLog.warn('Duplicate agent connection detected, closing old connection', {
197
- agent: connection.agentName,
198
- oldConnectionId: existing.id,
199
- newConnectionId: connection.id,
200
- });
201
- // Send fatal error before closing to prevent reconnection loop
202
- const errorEnvelope = {
203
- v: PROTOCOL_VERSION,
204
- type: 'ERROR',
205
- id: generateId(),
206
- ts: Date.now(),
207
- payload: {
208
- code: 'DUPLICATE_CONNECTION',
209
- message: `Another agent with name "${connection.agentName}" connected. This connection will be closed.`,
210
- fatal: true,
211
- },
212
- };
213
- existing.send(errorEnvelope);
214
- existing.close();
215
- this.connections.delete(existing.id);
216
- }
217
- this.agents.set(connection.agentName, connection);
218
- // Clear spawning flag now that agent has completed registration
219
- this.clearSpawning(connection.agentName);
220
- this.registry?.registerOrUpdate({
221
- name: connection.agentName,
222
- cli: connection.cli,
223
- program: connection.program,
224
- model: connection.model,
225
- task: connection.task,
226
- workingDirectory: connection.workingDirectory,
227
- });
228
- }
229
- }
230
- }
231
- /**
232
- * Unregister a connection.
233
- */
234
- unregister(connection) {
235
- this.connections.delete(connection.id);
236
- if (connection.agentName) {
237
- const isUser = connection.entityType === 'user';
238
- let wasCurrentConnection = false;
239
- if (isUser) {
240
- const userConnections = this.users.get(connection.agentName);
241
- if (userConnections) {
242
- userConnections.delete(connection);
243
- if (userConnections.size === 0) {
244
- this.users.delete(connection.agentName);
245
- wasCurrentConnection = true;
246
- // Track recently disconnected users so messages to them are persisted
247
- // (e.g., agent replies to __cli_sender__ show up in dashboard)
248
- this.recentlyDisconnectedUsers.set(connection.agentName, Date.now());
249
- routerLog.info(`User fully unregistered: ${connection.agentName} (all connections closed, tracked for ${Router.RECENT_USER_TTL_MS / 1000}s)`);
250
- // Clean up stale entries on each disconnect so the map doesn't grow unbounded
251
- this.cleanupStaleRecentUsers();
252
- }
253
- else {
254
- routerLog.debug(`User connection closed: ${connection.agentName} (${userConnections.size} connections remaining)`);
255
- }
256
- }
257
- }
258
- else {
259
- const current = this.agents.get(connection.agentName);
260
- if (current?.id === connection.id) {
261
- this.agents.delete(connection.agentName);
262
- wasCurrentConnection = true;
263
- }
264
- }
265
- // Only clean up channel/subscription state if this was the current connection.
266
- // If a new connection replaced this one, we don't want to remove channel memberships
267
- // that the new connection should inherit.
268
- if (wasCurrentConnection) {
269
- // Remove from all subscriptions
270
- for (const subscribers of this.subscriptions.values()) {
271
- subscribers.delete(connection.agentName);
272
- }
273
- // Remove from all channels and notify remaining members
274
- this.removeFromAllChannels(connection.agentName);
275
- // Clean up shadow relationships
276
- this.unbindShadow(connection.agentName);
277
- // Clear processing state
278
- this.clearProcessing(connection.agentName);
279
- }
280
- }
281
- this.clearPendingForConnection(connection.id);
282
- }
283
- /**
284
- * Remove a member from all channels they're in.
285
- */
286
- removeFromAllChannels(memberName) {
287
- const memberChannelSet = this.memberChannels.get(memberName);
288
- if (!memberChannelSet)
289
- return;
290
- for (const channelName of memberChannelSet) {
291
- const members = this.channels.get(channelName);
292
- if (members) {
293
- members.delete(memberName);
294
- // Clean up empty channels
295
- if (members.size === 0) {
296
- this.channels.delete(channelName);
297
- }
298
- }
299
- }
300
- this.memberChannels.delete(memberName);
301
- }
302
- /**
303
- * Subscribe an agent to a topic.
304
- */
305
- subscribe(agentName, topic) {
306
- let subscribers = this.subscriptions.get(topic);
307
- if (!subscribers) {
308
- subscribers = new Set();
309
- this.subscriptions.set(topic, subscribers);
310
- }
311
- subscribers.add(agentName);
312
- }
313
- /**
314
- * Unsubscribe an agent from a topic.
315
- */
316
- unsubscribe(agentName, topic) {
317
- const subscribers = this.subscriptions.get(topic);
318
- if (subscribers) {
319
- subscribers.delete(agentName);
320
- if (subscribers.size === 0) {
321
- this.subscriptions.delete(topic);
322
- }
323
- }
324
- }
325
- /**
326
- * Bind a shadow agent to a primary agent.
327
- * The shadow will receive copies of messages to/from the primary.
328
- */
329
- bindShadow(shadowAgent, primaryAgent, options = {}) {
330
- // Clean up any existing shadow binding for this shadow
331
- this.unbindShadow(shadowAgent);
332
- const relationship = {
333
- shadowAgent,
334
- primaryAgent,
335
- speakOn: options.speakOn ?? ['EXPLICIT_ASK'],
336
- receiveIncoming: options.receiveIncoming ?? true,
337
- receiveOutgoing: options.receiveOutgoing ?? true,
338
- };
339
- // Add to primary's shadow list
340
- let shadows = this.shadowsByPrimary.get(primaryAgent);
341
- if (!shadows) {
342
- shadows = [];
343
- this.shadowsByPrimary.set(primaryAgent, shadows);
344
- }
345
- shadows.push(relationship);
346
- // Set reverse lookup
347
- this.primaryByShadow.set(shadowAgent, primaryAgent);
348
- routerLog.info(`Shadow bound: ${shadowAgent} -> ${primaryAgent}`, { speakOn: relationship.speakOn });
349
- }
350
- /**
351
- * Unbind a shadow agent from its primary.
352
- */
353
- unbindShadow(shadowAgent) {
354
- const primaryAgent = this.primaryByShadow.get(shadowAgent);
355
- if (!primaryAgent)
356
- return;
357
- // Remove from primary's shadow list
358
- const shadows = this.shadowsByPrimary.get(primaryAgent);
359
- if (shadows) {
360
- const updatedShadows = shadows.filter(s => s.shadowAgent !== shadowAgent);
361
- if (updatedShadows.length === 0) {
362
- this.shadowsByPrimary.delete(primaryAgent);
363
- }
364
- else {
365
- this.shadowsByPrimary.set(primaryAgent, updatedShadows);
366
- }
367
- }
368
- // Remove reverse lookup
369
- this.primaryByShadow.delete(shadowAgent);
370
- routerLog.info(`Shadow unbound: ${shadowAgent} from ${primaryAgent}`);
371
- }
372
- /**
373
- * Get all shadows for a primary agent.
374
- */
375
- getShadowsForPrimary(primaryAgent) {
376
- return this.shadowsByPrimary.get(primaryAgent) ?? [];
377
- }
378
- /**
379
- * Get the primary agent for a shadow, if any.
380
- */
381
- getPrimaryForShadow(shadowAgent) {
382
- return this.primaryByShadow.get(shadowAgent);
383
- }
384
- /**
385
- * Emit a trigger event for an agent's shadows.
386
- * Shadows configured to speakOn this trigger will receive a notification.
387
- * @param primaryAgent The agent whose shadows should be notified
388
- * @param trigger The trigger event that occurred
389
- * @param context Optional context data about the trigger
390
- */
391
- emitShadowTrigger(primaryAgent, trigger, context) {
392
- const shadows = this.shadowsByPrimary.get(primaryAgent);
393
- if (!shadows || shadows.length === 0)
394
- return;
395
- for (const shadow of shadows) {
396
- // Check if this shadow is configured to speak on this trigger
397
- if (!shadow.speakOn.includes(trigger) && !shadow.speakOn.includes('ALL_MESSAGES')) {
398
- continue;
399
- }
400
- const target = this.agents.get(shadow.shadowAgent);
401
- if (!target)
402
- continue;
403
- // Create a trigger notification envelope
404
- const triggerEnvelope = {
405
- v: PROTOCOL_VERSION,
406
- type: 'SEND',
407
- id: generateId(),
408
- ts: Date.now(),
409
- from: primaryAgent,
410
- to: shadow.shadowAgent,
411
- payload: {
412
- kind: 'action',
413
- body: `SHADOW_TRIGGER:${trigger}`,
414
- data: {
415
- _shadowTrigger: trigger,
416
- _shadowOf: primaryAgent,
417
- _triggerContext: context,
418
- },
419
- },
420
- };
421
- const deliver = this.createDeliverEnvelope(primaryAgent, shadow.shadowAgent, triggerEnvelope, target);
422
- const sent = target.send(deliver);
423
- if (sent) {
424
- this.trackDelivery(target, deliver);
425
- routerLog.debug(`Shadow trigger ${trigger} sent to ${shadow.shadowAgent}`, { primary: primaryAgent });
426
- // Set processing state for triggered shadows - they're expected to respond
427
- this.setProcessing(shadow.shadowAgent, deliver.id);
428
- }
429
- }
430
- }
431
- /**
432
- * Check if a shadow should speak based on a specific trigger.
433
- */
434
- shouldShadowSpeak(shadowAgent, trigger) {
435
- const primaryAgent = this.primaryByShadow.get(shadowAgent);
436
- if (!primaryAgent)
437
- return true; // Not a shadow, can always speak
438
- const shadows = this.shadowsByPrimary.get(primaryAgent);
439
- if (!shadows)
440
- return true;
441
- const relationship = shadows.find(s => s.shadowAgent === shadowAgent);
442
- if (!relationship)
443
- return true;
444
- return relationship.speakOn.includes(trigger) || relationship.speakOn.includes('ALL_MESSAGES');
445
- }
446
- /**
447
- * Route a SEND message to its destination(s).
448
- */
449
- route(from, envelope) {
450
- // Check if this is a cross-machine message (injected from cloud)
451
- const isCrossMachine = envelope.payload?.data?._crossMachine === true;
452
- // Use envelope.from for cross-machine messages where the connection is the recipient,
453
- // otherwise use the connection's agent name (normal local messages)
454
- const senderName = isCrossMachine ? envelope.from : (envelope.from || from.agentName);
455
- if (!senderName) {
456
- routerLog.warn('Dropping message - sender has no name');
457
- return;
458
- }
459
- // Skip rate limiting, processing state, and send recording for cross-machine messages
460
- // These only apply to local agents sending messages
461
- if (!isCrossMachine) {
462
- // Check rate limit
463
- if (!this.rateLimiter.tryAcquire(senderName)) {
464
- routerLog.warn(`Rate limited: ${senderName}`);
465
- return;
466
- }
467
- // Agent is responding - clear their processing state
468
- this.clearProcessing(senderName);
469
- this.registry?.recordSend(senderName);
470
- }
471
- const to = envelope.to;
472
- const topic = envelope.topic;
473
- routerLog.debug(`Route ${senderName} -> ${to}`, { preview: typeof envelope.payload.body === 'string' ? envelope.payload.body.substring(0, 50) : JSON.stringify(envelope.payload.body)?.substring(0, 50) });
474
- if (to === '*') {
475
- // Broadcast to all (except sender)
476
- this.broadcast(senderName, envelope, topic);
477
- }
478
- else if (to === '@users') {
479
- // Broadcast to all human users only (not agents)
480
- this.broadcastToUsers(senderName, envelope);
481
- }
482
- else if (to) {
483
- // Direct message
484
- this.sendDirect(senderName, to, envelope);
485
- }
486
- // Route copies to shadows of the sender (outgoing messages)
487
- this.routeToShadows(senderName, envelope, 'outgoing');
488
- // Route copies to shadows of the recipient (incoming messages)
489
- if (to && to !== '*') {
490
- this.routeToShadows(to, envelope, 'incoming', senderName);
491
- }
492
- }
493
- /**
494
- * Route a copy of a message to shadows of an agent.
495
- * @param primaryAgent The primary agent whose shadows should receive the message
496
- * @param envelope The original message envelope
497
- * @param direction Whether this is an 'incoming' or 'outgoing' message for the primary
498
- * @param actualFrom Override the 'from' field (for incoming messages, use original sender)
499
- */
500
- routeToShadows(primaryAgent, envelope, direction, actualFrom) {
501
- const shadows = this.shadowsByPrimary.get(primaryAgent);
502
- if (!shadows || shadows.length === 0)
503
- return;
504
- for (const shadow of shadows) {
505
- // Check if shadow wants this direction
506
- if (direction === 'incoming' && shadow.receiveIncoming === false)
507
- continue;
508
- if (direction === 'outgoing' && shadow.receiveOutgoing === false)
509
- continue;
510
- // Don't send to self
511
- if (shadow.shadowAgent === (actualFrom ?? primaryAgent))
512
- continue;
513
- const target = this.agents.get(shadow.shadowAgent);
514
- if (!target)
515
- continue;
516
- // Create a shadow copy envelope with metadata indicating it's a shadow copy
517
- const shadowEnvelope = {
518
- ...envelope,
519
- payload: {
520
- ...envelope.payload,
521
- data: {
522
- ...envelope.payload.data,
523
- _shadowCopy: true,
524
- _shadowOf: primaryAgent,
525
- _shadowDirection: direction,
526
- },
527
- },
528
- };
529
- const deliver = this.createDeliverEnvelope(actualFrom ?? primaryAgent, shadow.shadowAgent, shadowEnvelope, target);
530
- const sent = target.send(deliver);
531
- if (sent) {
532
- this.trackDelivery(target, deliver);
533
- routerLog.debug(`Shadow copy to ${shadow.shadowAgent}`, { direction, primary: primaryAgent });
534
- // Note: Don't set processing state for shadow copies - shadow stays passive
535
- }
536
- }
537
- }
538
- /**
539
- * Send a direct message to a specific agent.
540
- *
541
- * If the target agent is offline but known (has connected before),
542
- * the message is persisted for delivery when the agent reconnects.
543
- * This prevents silent message drops during brief disconnections or spawn timing issues.
544
- */
545
- sendDirect(from, to, envelope) {
546
- // Check for agent first, then user connections
547
- const agentTarget = this.agents.get(to);
548
- const userConnections = this.users.get(to);
549
- const hasTarget = agentTarget || (userConnections && userConnections.size > 0);
550
- // If target not found locally, check remote
551
- if (!hasTarget) {
552
- const remoteAgent = this.crossMachineHandler?.isRemoteAgent(to);
553
- if (remoteAgent) {
554
- routerLog.info(`Routing to remote agent: ${to}`, { daemonName: remoteAgent.daemonName });
555
- return this.sendToRemoteAgent(from, to, envelope, remoteAgent);
556
- }
557
- // Also check if it's a remote user (human connected via cloud dashboard)
558
- const remoteUser = this.crossMachineHandler?.isRemoteUser?.(to);
559
- if (remoteUser) {
560
- routerLog.info(`Routing to remote user: ${to}`, { daemonName: remoteUser.daemonName });
561
- return this.sendToRemoteAgent(from, to, envelope, remoteUser);
562
- }
563
- // Check if this is a known agent (has connected before) - queue for later delivery
564
- // This prevents message drops during brief disconnections or spawn timing issues
565
- if (this.registry?.has(to)) {
566
- routerLog.info(`Target "${to}" offline but known, queueing message for delivery on reconnect`);
567
- this.persistMessageForOfflineAgent(from, to, envelope);
568
- return true; // Message accepted (queued), not dropped
569
- }
570
- // Check if target is a recently disconnected user (e.g., __cli_sender__)
571
- // Persist the message so it appears in dashboard history even though the user disconnected
572
- const recentUserTs = this.recentlyDisconnectedUsers.get(to);
573
- if (recentUserTs && Date.now() - recentUserTs < Router.RECENT_USER_TTL_MS) {
574
- routerLog.info(`Target "${to}" is a recently disconnected user, persisting message for dashboard visibility`);
575
- this.persistMessageForOfflineAgent(from, to, envelope);
576
- return true; // Message accepted (persisted), not dropped
577
- }
578
- // Check if agent is currently spawning (pre-HELLO) - queue for delivery after registration
579
- // This handles the race condition between spawn completion and HELLO handshake
580
- const spawning = this.isSpawning(to);
581
- routerLog.debug(`Spawning check for "${to}": ${spawning}`, {
582
- spawningAgents: Array.from(this.spawningAgents.keys()),
583
- hasStorage: !!this.storage,
584
- });
585
- if (spawning) {
586
- routerLog.info(`Target "${to}" is spawning, queueing message for delivery after registration`);
587
- this.persistMessageForOfflineAgent(from, to, envelope);
588
- return true; // Message accepted (queued), not dropped
589
- }
590
- routerLog.warn(`Target "${to}" not found and unknown`, { availableAgents: Array.from(this.agents.keys()), spawningAgents: Array.from(this.spawningAgents.keys()) });
591
- return false;
592
- }
593
- // For user targets, send to ALL connections (multi-tab support)
594
- if (userConnections && userConnections.size > 0) {
595
- let anySent = false;
596
- for (const userConn of userConnections) {
597
- const deliver = this.createDeliverEnvelope(from, to, envelope, userConn);
598
- const sent = userConn.send(deliver);
599
- if (sent)
600
- anySent = true;
601
- routerLog.debug(`Delivered ${from} -> ${to} (user connection ${userConn.id})`, {
602
- success: sent,
603
- preview: typeof envelope.payload.body === 'string' ? envelope.payload.body.substring(0, 40) : JSON.stringify(envelope.payload.body)?.substring(0, 40),
604
- });
605
- // Persist only once (for the first connection)
606
- if (userConn === [...userConnections][0]) {
607
- this.persistDeliverEnvelope(deliver);
608
- }
609
- if (sent) {
610
- this.trackDelivery(userConn, deliver);
611
- }
612
- }
613
- if (anySent) {
614
- this.registry?.recordReceive(to);
615
- }
616
- return anySent;
617
- }
618
- // For agent targets, send to single connection
619
- const target = agentTarget;
620
- const deliver = this.createDeliverEnvelope(from, to, envelope, target);
621
- const sent = target.send(deliver);
622
- routerLog.debug(`Delivered ${from} -> ${to}`, { success: sent, preview: typeof envelope.payload.body === 'string' ? envelope.payload.body.substring(0, 40) : JSON.stringify(envelope.payload.body)?.substring(0, 40) });
623
- this.persistDeliverEnvelope(deliver);
624
- if (sent) {
625
- this.trackDelivery(target, deliver);
626
- this.registry?.recordReceive(to);
627
- this.setProcessing(to, deliver.id);
628
- }
629
- return sent;
630
- }
631
- /**
632
- * Send a message to an agent on a remote machine via cloud.
633
- */
634
- sendToRemoteAgent(from, to, envelope, remoteAgent) {
635
- if (!this.crossMachineHandler) {
636
- routerLog.warn('Cross-machine handler not available');
637
- return false;
638
- }
639
- // Send asynchronously via cloud
640
- this.crossMachineHandler.sendCrossMachineMessage(remoteAgent.daemonId, to, from, envelope.payload.body, {
641
- topic: envelope.topic,
642
- thread: envelope.payload.thread,
643
- kind: envelope.payload.kind,
644
- data: envelope.payload.data,
645
- originalId: envelope.id,
646
- }).then((sent) => {
647
- if (sent) {
648
- routerLog.info(`Cross-machine message sent to ${to}`, { daemonName: remoteAgent.daemonName });
649
- // Persist as cross-machine message
650
- this.storage?.saveMessage({
651
- id: envelope.id || `cross-${Date.now()}`,
652
- ts: Date.now(),
653
- from,
654
- to,
655
- topic: envelope.topic,
656
- kind: envelope.payload.kind,
657
- body: envelope.payload.body,
658
- data: {
659
- ...envelope.payload.data,
660
- _crossMachine: true,
661
- _targetDaemon: remoteAgent.daemonId,
662
- _targetDaemonName: remoteAgent.daemonName,
663
- },
664
- thread: envelope.payload.thread,
665
- status: 'unread',
666
- is_urgent: false,
667
- is_broadcast: false,
668
- }).catch(err => routerLog.error('Failed to persist cross-machine message', { error: String(err) }));
669
- }
670
- else {
671
- routerLog.error(`Failed to send cross-machine message to ${to}`);
672
- }
673
- }).catch(err => {
674
- routerLog.error('Cross-machine send error', { error: String(err) });
675
- });
676
- // Return true immediately - message is queued
677
- return true;
678
- }
679
- /**
680
- * Broadcast to all agents (optionally filtered by topic subscription).
681
- */
682
- broadcast(from, envelope, topic) {
683
- // Build recipients list from both agents and users
684
- const recipients = topic
685
- ? this.subscriptions.get(topic) ?? new Set()
686
- : new Set([...this.agents.keys(), ...this.users.keys()]);
687
- for (const recipientName of recipients) {
688
- if (recipientName === from)
689
- continue; // Don't send to self
690
- // Check agents first
691
- const agentTarget = this.agents.get(recipientName);
692
- if (agentTarget) {
693
- const deliver = this.createDeliverEnvelope(from, recipientName, envelope, agentTarget);
694
- const sent = agentTarget.send(deliver);
695
- this.persistDeliverEnvelope(deliver, true); // Mark as broadcast
696
- if (sent) {
697
- this.trackDelivery(agentTarget, deliver);
698
- this.registry?.recordReceive(recipientName);
699
- this.setProcessing(recipientName, deliver.id);
700
- }
701
- continue;
702
- }
703
- // Check user connections (send to all connections for multi-tab)
704
- const userConnections = this.users.get(recipientName);
705
- if (userConnections && userConnections.size > 0) {
706
- let persisted = false;
707
- for (const userConn of userConnections) {
708
- const deliver = this.createDeliverEnvelope(from, recipientName, envelope, userConn);
709
- const sent = userConn.send(deliver);
710
- if (!persisted) {
711
- this.persistDeliverEnvelope(deliver, true); // Mark as broadcast, persist once
712
- persisted = true;
713
- }
714
- if (sent) {
715
- this.trackDelivery(userConn, deliver);
716
- this.registry?.recordReceive(recipientName);
717
- }
718
- }
719
- }
720
- }
721
- }
722
- /**
723
- * Broadcast a message to all human users (not agents).
724
- * Used for system notifications that only humans should see.
725
- */
726
- broadcastToUsers(from, envelope) {
727
- for (const [userName, userConnections] of this.users) {
728
- if (userName === from)
729
- continue; // Don't send to self
730
- if (userConnections.size === 0)
731
- continue;
732
- let persisted = false;
733
- for (const userConn of userConnections) {
734
- const deliver = this.createDeliverEnvelope(from, userName, envelope, userConn);
735
- const sent = userConn.send(deliver);
736
- if (!persisted) {
737
- this.persistDeliverEnvelope(deliver, true); // Mark as broadcast, persist once
738
- persisted = true;
739
- }
740
- if (sent) {
741
- this.trackDelivery(userConn, deliver);
742
- this.registry?.recordReceive(userName);
743
- routerLog.debug(`Broadcast to user ${userName} (connection ${userConn.id})`);
744
- }
745
- }
746
- }
747
- }
748
- /**
749
- * Create a DELIVER envelope from a SEND.
750
- */
751
- createDeliverEnvelope(from, to, original, target) {
752
- // Preserve the original 'to' field for broadcasts so agents know to reply to '*'
753
- const originalTo = original.to;
754
- return {
755
- v: PROTOCOL_VERSION,
756
- type: 'DELIVER',
757
- id: generateId(),
758
- ts: Date.now(),
759
- from,
760
- to,
761
- topic: original.topic,
762
- payload: original.payload,
763
- payload_meta: original.payload_meta,
764
- delivery: {
765
- seq: target.getNextSeq(original.topic ?? 'default', from),
766
- session_id: target.sessionId,
767
- originalTo: originalTo !== to ? originalTo : undefined, // Only include if different
768
- },
769
- };
770
- }
771
- /**
772
- * Persist a delivered message if storage is configured.
773
- */
774
- persistDeliverEnvelope(envelope, isBroadcast = false) {
775
- if (!this.storage)
776
- return;
777
- this.storage.saveMessage({
778
- id: envelope.id,
779
- ts: envelope.ts,
780
- from: envelope.from ?? 'unknown',
781
- to: envelope.to ?? 'unknown',
782
- topic: envelope.topic,
783
- kind: envelope.payload.kind,
784
- body: envelope.payload.body,
785
- data: envelope.payload.data,
786
- payloadMeta: envelope.payload_meta,
787
- thread: envelope.payload.thread,
788
- deliverySeq: envelope.delivery.seq,
789
- deliverySessionId: envelope.delivery.session_id,
790
- sessionId: envelope.delivery.session_id,
791
- status: 'unread',
792
- is_urgent: false,
793
- is_broadcast: isBroadcast || envelope.to === '*',
794
- }).catch((err) => {
795
- routerLog.error('Failed to persist message', { error: String(err) });
796
- });
797
- }
798
- /**
799
- * Persist a message for an offline agent.
800
- * Called when a message is sent to a known agent that is not currently connected.
801
- * The message is marked with _offlineQueued and will be delivered when the agent reconnects.
802
- */
803
- persistMessageForOfflineAgent(from, to, envelope) {
804
- if (!this.storage) {
805
- routerLog.warn('Cannot queue offline message: no storage configured');
806
- return;
807
- }
808
- routerLog.info(`Persisting offline message for "${to}"`, {
809
- from,
810
- messageId: envelope.id,
811
- bodyPreview: typeof envelope.payload.body === 'string' ? envelope.payload.body.substring(0, 50) : JSON.stringify(envelope.payload.body)?.substring(0, 50),
812
- });
813
- this.storage.saveMessage({
814
- id: envelope.id || generateId(),
815
- ts: Date.now(),
816
- from,
817
- to,
818
- topic: envelope.topic,
819
- kind: envelope.payload.kind,
820
- body: envelope.payload.body,
821
- data: {
822
- ...envelope.payload.data,
823
- _offlineQueued: true, // Mark as queued for offline delivery
824
- _queuedAt: Date.now(),
825
- },
826
- payloadMeta: envelope.payload_meta,
827
- thread: envelope.payload.thread,
828
- status: 'unread', // Unread = pending delivery
829
- is_urgent: false,
830
- is_broadcast: false,
831
- }).catch((err) => {
832
- routerLog.error('Failed to persist offline message', { error: String(err), to });
833
- });
834
- }
835
- /**
836
- * Deliver pending messages to an agent that just connected.
837
- * Queries for unread messages addressed to this agent that were queued while offline.
838
- * This handles messages that were sent while the agent was offline.
839
- */
840
- async deliverPendingMessages(connection) {
841
- const agentName = connection.agentName;
842
- if (!agentName)
843
- return;
844
- if (!this.storage?.getMessages)
845
- return;
846
- try {
847
- // Query for unread messages addressed to this agent
848
- const pendingMessages = await this.storage.getMessages({
849
- to: agentName,
850
- unreadOnly: true,
851
- order: 'asc', // Deliver oldest first
852
- });
853
- // Filter to only include offline-queued messages (not already-delivered unacked messages)
854
- const offlineMessages = pendingMessages.filter(msg => msg.data?._offlineQueued === true).sort((a, b) => a.ts - b.ts);
855
- if (offlineMessages.length === 0)
856
- return;
857
- routerLog.info(`Delivering ${offlineMessages.length} pending messages to ${agentName}`);
858
- for (const msg of offlineMessages) {
859
- // Create deliver envelope
860
- const deliverEnvelope = {
861
- v: PROTOCOL_VERSION,
862
- type: 'DELIVER',
863
- id: generateId(),
864
- ts: Date.now(),
865
- from: msg.from,
866
- to: agentName,
867
- topic: msg.topic,
868
- payload: {
869
- body: msg.body,
870
- kind: msg.kind,
871
- data: msg.data,
872
- thread: msg.thread,
873
- },
874
- payload_meta: msg.payloadMeta,
875
- delivery: {
876
- seq: connection.getNextSeq(msg.topic ?? 'default', msg.from),
877
- session_id: connection.sessionId,
878
- },
879
- };
880
- const sent = connection.send(deliverEnvelope);
881
- if (sent) {
882
- this.trackDelivery(connection, deliverEnvelope);
883
- this.registry?.recordReceive(agentName);
884
- this.setProcessing(agentName, deliverEnvelope.id);
885
- // Mark original message as delivered (update status)
886
- if (this.storage.updateMessageStatus) {
887
- await this.storage.updateMessageStatus(msg.id, 'read');
888
- }
889
- routerLog.info(`Delivered pending message to ${agentName}`, {
890
- from: msg.from,
891
- preview: msg.body.substring(0, 40),
892
- });
893
- }
894
- else {
895
- routerLog.warn(`Failed to deliver pending message to ${agentName}`);
896
- }
897
- }
898
- }
899
- catch (err) {
900
- routerLog.error('Failed to deliver pending messages', { error: String(err), agentName });
901
- }
902
- }
903
- /**
904
- * Get list of connected agent names.
905
- */
906
- getAgents() {
907
- return Array.from(this.agents.keys());
908
- }
909
- /**
910
- * Get connection by agent name.
911
- */
912
- getConnection(agentName) {
913
- return this.agents.get(agentName);
914
- }
915
- /**
916
- * Force remove an agent from the router (used when process dies without clean disconnect).
917
- * This cleans up the agent's connection and subscriptions without needing the connection object.
918
- */
919
- forceRemoveAgent(agentName) {
920
- const connection = this.agents.get(agentName);
921
- if (!connection) {
922
- routerLog.debug(`forceRemoveAgent: agent ${agentName} not found in router`);
923
- return false;
924
- }
925
- routerLog.info(`Force removing stale agent: ${agentName}`);
926
- // Remove from agents map
927
- this.agents.delete(agentName);
928
- // Remove from all channel subscriptions
929
- for (const [channel, subscribers] of this.subscriptions) {
930
- if (subscribers.delete(agentName)) {
931
- routerLog.debug(`Removed ${agentName} from channel ${channel}`);
932
- }
933
- }
934
- // Remove from connections map
935
- this.connections.delete(connection.id);
936
- // Clear any pending deliveries
937
- this.deliveryTracker.clearPendingForConnection(connection.id);
938
- // Clean up channel memberships (same as unregister)
939
- this.removeFromAllChannels(agentName);
940
- // Clean up shadow relationships
941
- this.unbindShadow(agentName);
942
- // Clear processing state
943
- this.clearProcessing(agentName);
944
- return true;
945
- }
946
- /**
947
- * Get number of active connections.
948
- */
949
- get connectionCount() {
950
- return this.connections.size;
951
- }
952
- get pendingDeliveryCount() {
953
- return this.deliveryTracker.pendingCount;
954
- }
955
- /**
956
- * Get rate limiter statistics.
957
- */
958
- getRateLimiterStats() {
959
- return this.rateLimiter.getStats();
960
- }
961
- /**
962
- * Reset rate limit for a specific agent (admin operation).
963
- */
964
- resetRateLimit(agentName) {
965
- this.rateLimiter.reset(agentName);
966
- }
967
- /**
968
- * Get list of agents currently processing (thinking).
969
- * Returns an object with agent names as keys and processing info as values.
970
- */
971
- getProcessingAgents() {
972
- const result = {};
973
- for (const [name, state] of this.processingAgents.entries()) {
974
- result[name] = { startedAt: state.startedAt, messageId: state.messageId };
975
- }
976
- return result;
977
- }
978
- /**
979
- * Check if a specific agent is processing.
980
- */
981
- isAgentProcessing(agentName) {
982
- return this.processingAgents.has(agentName);
983
- }
984
- /**
985
- * Mark an agent as processing (called when they receive a message).
986
- */
987
- setProcessing(agentName, messageId) {
988
- // Clear any existing processing state
989
- this.clearProcessing(agentName);
990
- const timer = setTimeout(() => {
991
- this.clearProcessing(agentName);
992
- routerLog.warn(`Processing timeout for ${agentName}`);
993
- }, Router.PROCESSING_TIMEOUT_MS);
994
- this.processingAgents.set(agentName, {
995
- startedAt: Date.now(),
996
- messageId,
997
- timer,
998
- });
999
- routerLog.debug(`${agentName} started processing`, { messageId });
1000
- this.onProcessingStateChange?.();
1001
- }
1002
- /**
1003
- * Clear processing state for an agent (called when they send a message).
1004
- */
1005
- clearProcessing(agentName) {
1006
- const state = this.processingAgents.get(agentName);
1007
- if (state) {
1008
- if (state.timer) {
1009
- clearTimeout(state.timer);
1010
- }
1011
- this.processingAgents.delete(agentName);
1012
- routerLog.debug(`${agentName} finished processing`);
1013
- this.onProcessingStateChange?.();
1014
- }
1015
- }
1016
- /**
1017
- * Handle ACK for previously delivered messages.
1018
- */
1019
- handleAck(connection, envelope) {
1020
- const ackId = envelope.payload.ack_id;
1021
- this.deliveryTracker.handleAck(connection.id, ackId);
1022
- }
1023
- /**
1024
- * Clear pending deliveries for a connection (e.g., on disconnect).
1025
- */
1026
- clearPendingForConnection(connectionId) {
1027
- this.deliveryTracker.clearPendingForConnection(connectionId);
1028
- }
1029
- /**
1030
- * Track a delivery and schedule retries until ACKed or TTL/attempts exhausted.
1031
- */
1032
- trackDelivery(target, deliver) {
1033
- this.deliveryTracker.track(target, deliver);
1034
- }
1035
- /**
1036
- * Broadcast a system message to all connected agents.
1037
- * Used for system notifications like agent death announcements.
1038
- */
1039
- broadcastSystemMessage(message, data) {
1040
- const envelope = {
1041
- v: PROTOCOL_VERSION,
1042
- type: 'SEND',
1043
- id: generateId(),
1044
- ts: Date.now(),
1045
- from: '_system',
1046
- to: '*',
1047
- payload: {
1048
- kind: 'message',
1049
- body: message,
1050
- data: {
1051
- ...data,
1052
- _isSystemMessage: true,
1053
- },
1054
- },
1055
- };
1056
- // Broadcast to all agents
1057
- for (const [agentName, connection] of this.agents.entries()) {
1058
- const deliver = this.createDeliverEnvelope('_system', agentName, envelope, connection);
1059
- const sent = connection.send(deliver);
1060
- if (sent) {
1061
- routerLog.debug(`System broadcast sent to ${agentName}`);
1062
- }
1063
- }
1064
- }
1065
- /**
1066
- * Replay any pending (unacked) messages for a resumed session.
1067
- */
1068
- async replayPending(connection) {
1069
- if (!this.storage?.getPendingMessagesForSession || !connection.agentName) {
1070
- return;
1071
- }
1072
- const pending = await this.storage.getPendingMessagesForSession(connection.agentName, connection.sessionId);
1073
- if (!pending.length)
1074
- return;
1075
- routerLog.info(`Replaying ${pending.length} messages to ${connection.agentName}`);
1076
- for (const msg of pending) {
1077
- const deliver = {
1078
- v: PROTOCOL_VERSION,
1079
- type: 'DELIVER',
1080
- id: msg.id,
1081
- ts: msg.ts,
1082
- from: msg.from,
1083
- to: msg.to,
1084
- topic: msg.topic,
1085
- payload: {
1086
- kind: msg.kind,
1087
- body: msg.body,
1088
- data: msg.data,
1089
- thread: msg.thread,
1090
- },
1091
- payload_meta: msg.payloadMeta,
1092
- delivery: {
1093
- seq: msg.deliverySeq ?? connection.getNextSeq(msg.topic ?? 'default', msg.from),
1094
- session_id: msg.deliverySessionId ?? connection.sessionId,
1095
- },
1096
- };
1097
- const sent = connection.send(deliver);
1098
- if (sent) {
1099
- this.trackDelivery(connection, deliver);
1100
- }
1101
- }
1102
- }
1103
- // ==================== Channel Methods ====================
1104
- /**
1105
- * Handle a CHANNEL_JOIN message.
1106
- * Adds the member to the channel and notifies existing members.
1107
- * If payload.member is set, adds that member (admin mode).
1108
- * Otherwise, adds the connection's agent name.
1109
- */
1110
- handleChannelJoin(connection, envelope) {
1111
- // Use payload.member if provided (admin mode), otherwise use connection's name
1112
- const memberName = envelope.payload.member ?? connection.agentName;
1113
- if (!memberName) {
1114
- routerLog.warn('CHANNEL_JOIN from connection without name and no member specified');
1115
- return;
1116
- }
1117
- const channel = envelope.payload.channel;
1118
- const isAdminJoin = Boolean(envelope.payload.member);
1119
- // Get or create channel
1120
- let members = this.channels.get(channel);
1121
- if (!members) {
1122
- members = new Set();
1123
- this.channels.set(channel, members);
1124
- }
1125
- // Check if already a member
1126
- if (members.has(memberName)) {
1127
- routerLog.debug(`${memberName} already in ${channel}`);
1128
- return;
1129
- }
1130
- // Only notify existing members for non-admin joins (agents joining themselves)
1131
- // Admin joins are silent to avoid spamming notifications when syncing
1132
- if (!isAdminJoin) {
1133
- const existingMembers = members ? Array.from(members) : [];
1134
- for (const existingMember of existingMembers) {
1135
- const memberConn = this.getConnectionByName(existingMember);
1136
- if (memberConn) {
1137
- const joinNotification = {
1138
- v: PROTOCOL_VERSION,
1139
- type: 'CHANNEL_JOIN',
1140
- id: generateId(),
1141
- ts: Date.now(),
1142
- from: memberName,
1143
- payload: envelope.payload,
1144
- };
1145
- memberConn.send(joinNotification);
1146
- }
1147
- }
1148
- }
1149
- const added = this.addChannelMember(channel, memberName, { persist: true });
1150
- if (!added) {
1151
- routerLog.debug(`${memberName} already in ${channel}`);
1152
- return;
1153
- }
1154
- routerLog.info(`${memberName} joined ${channel} (${this.channels.get(channel)?.size ?? 0} members)${isAdminJoin ? ' [admin]' : ''}`);
1155
- }
1156
- /**
1157
- * Handle a CHANNEL_LEAVE message.
1158
- * Removes the member from the channel and notifies remaining members.
1159
- * If payload.member is provided, removes that member instead (admin mode).
1160
- */
1161
- handleChannelLeave(connection, envelope) {
1162
- // Use payload.member if provided (admin mode), otherwise use connection's name
1163
- const memberName = envelope.payload.member ?? connection.agentName;
1164
- if (!memberName) {
1165
- routerLog.warn('CHANNEL_LEAVE from connection without name and no member specified');
1166
- return;
1167
- }
1168
- const channel = envelope.payload.channel;
1169
- const isAdminRemove = Boolean(envelope.payload.member);
1170
- const members = this.channels.get(channel);
1171
- if (!members || !members.has(memberName)) {
1172
- routerLog.debug(`${memberName} not in ${channel}, ignoring leave`);
1173
- return;
1174
- }
1175
- const removed = this.removeChannelMember(channel, memberName, { persist: true });
1176
- if (!removed) {
1177
- routerLog.debug(`${memberName} not in ${channel}, ignoring leave`);
1178
- return;
1179
- }
1180
- // Only notify remaining members for non-admin removes
1181
- // Admin removes are silent to avoid spamming notifications
1182
- if (!isAdminRemove) {
1183
- const remainingMembers = this.channels.get(channel);
1184
- if (remainingMembers) {
1185
- for (const remainingMember of remainingMembers) {
1186
- const memberConn = this.getConnectionByName(remainingMember);
1187
- if (memberConn) {
1188
- const leaveNotification = {
1189
- v: PROTOCOL_VERSION,
1190
- type: 'CHANNEL_LEAVE',
1191
- id: generateId(),
1192
- ts: Date.now(),
1193
- from: memberName,
1194
- payload: envelope.payload,
1195
- };
1196
- memberConn.send(leaveNotification);
1197
- }
1198
- }
1199
- }
1200
- }
1201
- routerLog.info(`${memberName} left ${channel}${isAdminRemove ? ' [admin]' : ''}`);
1202
- }
1203
- /**
1204
- * Route a channel message to all members except the sender.
1205
- */
1206
- routeChannelMessage(connection, envelope) {
1207
- const senderName = connection.agentName;
1208
- if (!senderName) {
1209
- routerLog.warn('CHANNEL_MESSAGE from connection without name');
1210
- return;
1211
- }
1212
- const channel = envelope.payload.channel;
1213
- const members = this.channels.get(channel);
1214
- routerLog.info(`routeChannelMessage: channel=${channel} sender=${senderName} members=${members ? Array.from(members).join(',') : 'NONE'}`);
1215
- if (!members) {
1216
- routerLog.warn(`Message to non-existent channel ${channel} (available channels: ${Array.from(this.channels.keys()).join(', ')})`);
1217
- return;
1218
- }
1219
- // Case-insensitive membership check
1220
- const senderMemberName = this.findMemberInSet(members, senderName);
1221
- if (!senderMemberName) {
1222
- routerLog.warn(`${senderName} not a member of ${channel} (members: ${Array.from(members).join(', ')})`);
1223
- return;
1224
- }
1225
- // Route to all members except the sender (no echo)
1226
- const allMembers = Array.from(members);
1227
- routerLog.info(`Routing channel message from ${senderName} to ${channel}`, {
1228
- totalMembers: allMembers.length,
1229
- members: allMembers,
1230
- });
1231
- let deliveredCount = 0;
1232
- const undeliveredMembers = [];
1233
- const connectedAgents = Array.from(this.agents.keys());
1234
- const connectedUsers = Array.from(this.users.keys());
1235
- routerLog.info(`Connected entities: agents=[${connectedAgents.join(',')}] users=[${connectedUsers.join(',')}]`);
1236
- for (const memberName of members) {
1237
- // Case-insensitive comparison to skip sender
1238
- if (this.namesMatch(memberName, senderName)) {
1239
- continue;
1240
- }
1241
- // Check for agent connection first
1242
- const agentConn = this.agents.get(memberName);
1243
- if (agentConn) {
1244
- const deliverEnvelope = {
1245
- v: PROTOCOL_VERSION,
1246
- type: 'CHANNEL_MESSAGE',
1247
- id: generateId(),
1248
- ts: Date.now(),
1249
- from: senderName,
1250
- payload: envelope.payload,
1251
- };
1252
- const sent = agentConn.send(deliverEnvelope);
1253
- if (sent) {
1254
- deliveredCount++;
1255
- routerLog.info(`Delivered to ${memberName} (agent)`);
1256
- }
1257
- else {
1258
- routerLog.warn(`Failed to send to ${memberName}`);
1259
- undeliveredMembers.push(memberName);
1260
- }
1261
- continue;
1262
- }
1263
- // Check for user connections (send to ALL for multi-tab support)
1264
- const userConnections = this.users.get(memberName);
1265
- if (userConnections && userConnections.size > 0) {
1266
- let anyDelivered = false;
1267
- for (const userConn of userConnections) {
1268
- const deliverEnvelope = {
1269
- v: PROTOCOL_VERSION,
1270
- type: 'CHANNEL_MESSAGE',
1271
- id: generateId(),
1272
- ts: Date.now(),
1273
- from: senderName,
1274
- payload: envelope.payload,
1275
- };
1276
- const sent = userConn.send(deliverEnvelope);
1277
- if (sent) {
1278
- anyDelivered = true;
1279
- routerLog.info(`Delivered to ${memberName} (user connection ${userConn.id})`);
1280
- }
1281
- }
1282
- if (anyDelivered) {
1283
- deliveredCount++;
1284
- }
1285
- else {
1286
- routerLog.warn(`Failed to send to any connection for user ${memberName}`);
1287
- undeliveredMembers.push(memberName);
1288
- }
1289
- continue;
1290
- }
1291
- // Member not connected
1292
- routerLog.warn(`Member ${memberName} is registered in channel but NOT connected to daemon - message not delivered`);
1293
- undeliveredMembers.push(memberName);
1294
- }
1295
- // Persist channel message
1296
- this.persistChannelMessage(envelope, senderName);
1297
- const recipientCount = allMembers.length - 1; // Exclude sender
1298
- routerLog.info(`${senderName} -> ${channel}: delivered to ${deliveredCount}/${recipientCount} members`);
1299
- // Log warning if some members didn't receive the message
1300
- if (undeliveredMembers.length > 0) {
1301
- routerLog.warn(`Channel message undelivered to: [${undeliveredMembers.join(', ')}] - these agents may need to reconnect to the relay daemon`);
1302
- }
1303
- }
1304
- /**
1305
- * Persist a channel message to storage.
1306
- */
1307
- persistChannelMessage(envelope, from) {
1308
- if (!this.storage)
1309
- return;
1310
- const payloadData = {
1311
- ...envelope.payload.data,
1312
- _isChannelMessage: true,
1313
- _channel: envelope.payload.channel,
1314
- _mentions: envelope.payload.mentions,
1315
- };
1316
- this.storage.saveMessage({
1317
- id: envelope.id,
1318
- ts: envelope.ts,
1319
- from,
1320
- to: envelope.payload.channel, // Channel name as "to"
1321
- topic: undefined,
1322
- kind: 'message',
1323
- body: envelope.payload.body,
1324
- data: payloadData,
1325
- thread: envelope.payload.thread,
1326
- status: 'unread',
1327
- is_urgent: false,
1328
- is_broadcast: true, // Channel messages are effectively broadcasts
1329
- }).catch((err) => {
1330
- routerLog.error('Failed to persist channel message', { error: String(err) });
1331
- });
1332
- }
1333
- persistChannelMembership(channel, member, action, opts) {
1334
- if (this.storage) {
1335
- this.storage.saveMessage({
1336
- id: crypto.randomUUID(),
1337
- ts: Date.now(),
1338
- from: '__system__',
1339
- to: channel,
1340
- topic: undefined,
1341
- kind: 'state', // membership events stored as state
1342
- body: `${action}:${member}`,
1343
- data: {
1344
- _channelMembership: {
1345
- member,
1346
- action,
1347
- invitedBy: opts?.invitedBy,
1348
- },
1349
- },
1350
- status: 'read',
1351
- is_urgent: false,
1352
- is_broadcast: true,
1353
- }).catch((err) => {
1354
- routerLog.error('Failed to persist channel membership', { error: String(err) });
1355
- });
1356
- }
1357
- if (this.channelMembershipStore) {
1358
- const persistPromise = action === 'leave'
1359
- ? this.channelMembershipStore.removeMember(channel, member)
1360
- : this.channelMembershipStore.addMember(channel, member);
1361
- persistPromise.catch((err) => {
1362
- routerLog.error('Failed to sync channel membership to cloud store', {
1363
- channel,
1364
- member,
1365
- action,
1366
- error: err instanceof Error ? err.message : String(err),
1367
- });
1368
- });
1369
- }
1370
- }
1371
- /**
1372
- * Get all members of a channel.
1373
- */
1374
- getChannelMembers(channel) {
1375
- const members = this.channels.get(channel);
1376
- return members ? Array.from(members) : [];
1377
- }
1378
- /**
1379
- * Get all channels.
1380
- */
1381
- getChannels() {
1382
- return Array.from(this.channels.keys());
1383
- }
1384
- /**
1385
- * Get all channels a member is in.
1386
- */
1387
- getChannelsForMember(memberName) {
1388
- const channels = this.memberChannels.get(memberName);
1389
- return channels ? Array.from(channels) : [];
1390
- }
1391
- /**
1392
- * Check if a name belongs to a user (not an agent).
1393
- */
1394
- isUser(name) {
1395
- return this.users.has(name);
1396
- }
1397
- /**
1398
- * Check if a name belongs to an agent (not a user).
1399
- */
1400
- isAgent(name) {
1401
- return this.agents.has(name);
1402
- }
1403
- /**
1404
- * Get list of connected user names (human users only).
1405
- */
1406
- getUsers() {
1407
- return Array.from(this.users.keys());
1408
- }
1409
- /**
1410
- * Get a connection by name (checks both agents and users).
1411
- * Uses case-insensitive lookup to handle mismatched casing.
1412
- * For users with multiple connections, returns the first connection.
1413
- */
1414
- getConnectionByName(name) {
1415
- // Try exact match for agent first
1416
- const agentExact = this.agents.get(name);
1417
- if (agentExact)
1418
- return agentExact;
1419
- // Try exact match for user (get first connection from set)
1420
- const userConnections = this.users.get(name);
1421
- if (userConnections && userConnections.size > 0) {
1422
- return [...userConnections][0];
1423
- }
1424
- // Fall back to case-insensitive search
1425
- const lowerName = name.toLowerCase();
1426
- for (const [key, conn] of this.agents) {
1427
- if (key.toLowerCase() === lowerName)
1428
- return conn;
1429
- }
1430
- for (const [key, conns] of this.users) {
1431
- if (key.toLowerCase() === lowerName && conns.size > 0) {
1432
- return [...conns][0];
1433
- }
1434
- }
1435
- return undefined;
1436
- }
1437
- /**
1438
- * Check if a member is in a Set (case-insensitive).
1439
- * Returns the actual stored name if found, undefined otherwise.
1440
- */
1441
- findMemberInSet(members, name) {
1442
- // Try exact match first
1443
- if (members.has(name))
1444
- return name;
1445
- // Fall back to case-insensitive search
1446
- const lowerName = name.toLowerCase();
1447
- for (const member of members) {
1448
- if (member.toLowerCase() === lowerName)
1449
- return member;
1450
- }
1451
- return undefined;
1452
- }
1453
- /**
1454
- * Check if two names match (case-insensitive).
1455
- */
1456
- namesMatch(a, b) {
1457
- return a.toLowerCase() === b.toLowerCase();
1458
- }
1459
- /**
1460
- * Auto-join a member to a channel without notifications.
1461
- * Used for default channel membership (e.g., #general).
1462
- * @param memberName - The agent or user name to add
1463
- * @param channel - The channel to join (e.g., '#general')
1464
- */
1465
- autoJoinChannel(memberName, channel, options) {
1466
- // Get or create channel
1467
- let members = this.channels.get(channel);
1468
- if (!members) {
1469
- members = new Set();
1470
- this.channels.set(channel, members);
1471
- }
1472
- // Check if already a member
1473
- const added = this.addChannelMember(channel, memberName, { persist: options?.persist });
1474
- if (added) {
1475
- routerLog.debug(`Auto-joined ${memberName} to ${channel}`);
1476
- }
1477
- }
1478
- addChannelMember(channel, memberName, options) {
1479
- let members = this.channels.get(channel);
1480
- if (!members) {
1481
- members = new Set();
1482
- this.channels.set(channel, members);
1483
- }
1484
- // Case-insensitive check for existing membership
1485
- const existingMember = this.findMemberInSet(members, memberName);
1486
- if (existingMember) {
1487
- return false;
1488
- }
1489
- members.add(memberName);
1490
- const memberChannelSet = this.memberChannels.get(memberName) ?? new Set();
1491
- memberChannelSet.add(channel);
1492
- this.memberChannels.set(memberName, memberChannelSet);
1493
- if (options?.persist ?? true) {
1494
- this.persistChannelMembership(channel, memberName, 'join');
1495
- }
1496
- return true;
1497
- }
1498
- removeChannelMember(channel, memberName, options) {
1499
- const members = this.channels.get(channel);
1500
- if (!members) {
1501
- return false;
1502
- }
1503
- // Case-insensitive lookup to find actual stored name
1504
- const actualMemberName = this.findMemberInSet(members, memberName);
1505
- if (!actualMemberName) {
1506
- return false;
1507
- }
1508
- members.delete(actualMemberName);
1509
- if (members.size === 0) {
1510
- this.channels.delete(channel);
1511
- }
1512
- // Also try case-insensitive for memberChannels cleanup
1513
- const memberChannelSet = this.memberChannels.get(actualMemberName) ?? this.memberChannels.get(memberName);
1514
- if (memberChannelSet) {
1515
- memberChannelSet.delete(channel);
1516
- if (memberChannelSet.size === 0) {
1517
- this.memberChannels.delete(actualMemberName);
1518
- this.memberChannels.delete(memberName); // Clean up both potential keys
1519
- }
1520
- }
1521
- if (options?.persist ?? true) {
1522
- this.persistChannelMembership(channel, actualMemberName, 'leave');
1523
- }
1524
- return true;
1525
- }
1526
- handleMembershipUpdate(update) {
1527
- if (!update.channel || !update.member) {
1528
- return;
1529
- }
1530
- if (update.action === 'leave') {
1531
- this.removeChannelMember(update.channel, update.member, { persist: false });
1532
- }
1533
- else {
1534
- this.addChannelMember(update.channel, update.member, { persist: false });
1535
- }
1536
- }
1537
- /**
1538
- * Auto-rejoin an agent to their persisted channels on reconnect.
1539
- * This handles daemon restarts where in-memory channel state is lost.
1540
- * Queries both cloud DB (if available) and SQLite storage for memberships.
1541
- * Uses silent/admin mode to avoid spamming join notifications.
1542
- */
1543
- async autoRejoinChannelsForAgent(agentName) {
1544
- const channelsToJoin = new Set();
1545
- // Query cloud DB if available
1546
- if (this.channelMembershipStore?.loadMembershipsForAgent) {
1547
- try {
1548
- const cloudMemberships = await this.channelMembershipStore.loadMembershipsForAgent(agentName);
1549
- for (const membership of cloudMemberships) {
1550
- channelsToJoin.add(membership.channel);
1551
- }
1552
- if (cloudMemberships.length > 0) {
1553
- routerLog.debug(`Found ${cloudMemberships.length} channel memberships for ${agentName} in cloud DB`);
1554
- }
1555
- }
1556
- catch (err) {
1557
- routerLog.error('Failed to query cloud DB for channel memberships', {
1558
- agentName,
1559
- error: String(err),
1560
- });
1561
- }
1562
- }
1563
- // Query SQLite storage if available
1564
- if (this.storage?.getChannelMembershipsForAgent) {
1565
- try {
1566
- const sqliteMemberships = await this.storage.getChannelMembershipsForAgent(agentName);
1567
- for (const channel of sqliteMemberships) {
1568
- channelsToJoin.add(channel);
1569
- }
1570
- if (sqliteMemberships.length > 0) {
1571
- routerLog.debug(`Found ${sqliteMemberships.length} channel memberships for ${agentName} in SQLite`);
1572
- }
1573
- }
1574
- catch (err) {
1575
- routerLog.error('Failed to query SQLite for channel memberships', {
1576
- agentName,
1577
- error: String(err),
1578
- });
1579
- }
1580
- }
1581
- if (channelsToJoin.size === 0) {
1582
- routerLog.debug(`No persisted channel memberships found for ${agentName}`);
1583
- return;
1584
- }
1585
- // Rejoin channels silently (don't notify other members)
1586
- let rejoinedCount = 0;
1587
- for (const channel of channelsToJoin) {
1588
- // Skip if already in channel (handles deduplication)
1589
- const members = this.channels.get(channel);
1590
- if (members && this.findMemberInSet(members, agentName)) {
1591
- routerLog.debug(`${agentName} already in ${channel}, skipping auto-rejoin`);
1592
- continue;
1593
- }
1594
- // Add to channel without persisting (already persisted) or notifying
1595
- const added = this.addChannelMember(channel, agentName, { persist: false });
1596
- if (added) {
1597
- rejoinedCount++;
1598
- }
1599
- }
1600
- if (rejoinedCount > 0) {
1601
- routerLog.info(`Auto-rejoined ${agentName} to ${rejoinedCount} channels`, {
1602
- channels: Array.from(channelsToJoin),
1603
- });
1604
- }
1605
- }
1606
- }
1607
- //# sourceMappingURL=router.js.map