agent-relay 1.1.0 → 1.2.3

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 (567) hide show
  1. package/.gitattributes +3 -0
  2. package/.nvmrc +1 -0
  3. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.json +65 -0
  4. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.md +37 -0
  5. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.json +65 -0
  6. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.md +37 -0
  7. package/.trajectories/completed/2026-01/traj_1rp3rges5811.json +49 -0
  8. package/.trajectories/completed/2026-01/traj_1rp3rges5811.md +31 -0
  9. package/.trajectories/completed/2026-01/traj_22bhyulruouw.json +113 -0
  10. package/.trajectories/completed/2026-01/traj_22bhyulruouw.md +57 -0
  11. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.json +53 -0
  12. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.md +32 -0
  13. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.json +26 -0
  14. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.md +6 -0
  15. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.json +47 -0
  16. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.md +32 -0
  17. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.json +53 -0
  18. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.md +32 -0
  19. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.json +59 -0
  20. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.md +33 -0
  21. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.json +53 -0
  22. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.md +32 -0
  23. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.json +48 -0
  24. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.md +24 -0
  25. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.json +209 -0
  26. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.md +97 -0
  27. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.json +48 -0
  28. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.md +24 -0
  29. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.json +49 -0
  30. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.md +23 -0
  31. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.json +53 -0
  32. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.md +32 -0
  33. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.json +49 -0
  34. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.md +31 -0
  35. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.json +26 -0
  36. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.md +6 -0
  37. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.json +59 -0
  38. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.md +37 -0
  39. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.json +77 -0
  40. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.md +42 -0
  41. package/.trajectories/completed/2026-01/traj_gjdre5voouod.json +53 -0
  42. package/.trajectories/completed/2026-01/traj_gjdre5voouod.md +32 -0
  43. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.json +25 -0
  44. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.md +15 -0
  45. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.json +101 -0
  46. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.md +44 -0
  47. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.json +22 -0
  48. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.md +5 -0
  49. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.json +53 -0
  50. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.md +32 -0
  51. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.json +25 -0
  52. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.md +15 -0
  53. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.json +53 -0
  54. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.md +32 -0
  55. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.json +53 -0
  56. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.md +32 -0
  57. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.json +48 -0
  58. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.md +24 -0
  59. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.json +53 -0
  60. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.md +32 -0
  61. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.json +77 -0
  62. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.md +42 -0
  63. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.json +53 -0
  64. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.md +32 -0
  65. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.json +83 -0
  66. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.md +47 -0
  67. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.json +59 -0
  68. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.md +37 -0
  69. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.json +48 -0
  70. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.md +16 -0
  71. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.json +59 -0
  72. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.md +37 -0
  73. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.json +53 -0
  74. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.md +32 -0
  75. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.json +84 -0
  76. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.md +109 -0
  77. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.json +53 -0
  78. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.md +32 -0
  79. package/.trajectories/completed/2026-01/traj_v87hypnongqx.json +71 -0
  80. package/.trajectories/completed/2026-01/traj_v87hypnongqx.md +42 -0
  81. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.json +53 -0
  82. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.md +32 -0
  83. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.json +20 -0
  84. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.md +6 -0
  85. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.json +175 -0
  86. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.md +82 -0
  87. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.json +47 -0
  88. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.md +32 -0
  89. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.json +59 -0
  90. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.md +37 -0
  91. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.json +53 -0
  92. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.md +32 -0
  93. package/.trajectories/index.json +314 -0
  94. package/ARCHITECTURE.md +1245 -0
  95. package/README.md +1 -1
  96. package/TESTING.md +278 -0
  97. package/deploy/init-db.sql +5 -0
  98. package/deploy/scripts/setup-fly-workspaces.sh +69 -0
  99. package/deploy/scripts/setup-railway.sh +75 -0
  100. package/deploy/workspace/entrypoint-browser.sh +118 -0
  101. package/deploy/workspace/entrypoint.sh +348 -0
  102. package/deploy/workspace/git-credential-relay +111 -0
  103. package/dist/bridge/spawner.d.ts +53 -0
  104. package/dist/bridge/spawner.js +203 -19
  105. package/dist/bridge/types.d.ts +12 -0
  106. package/dist/cli/index.js +618 -5
  107. package/dist/cloud/api/auth.d.ts +3 -2
  108. package/dist/cloud/api/auth.js +10 -98
  109. package/dist/cloud/api/billing.js +30 -9
  110. package/dist/cloud/api/cli-pty-runner.d.ts +54 -0
  111. package/dist/cloud/api/cli-pty-runner.js +119 -0
  112. package/dist/cloud/api/codex-auth-helper.d.ts +15 -0
  113. package/dist/cloud/api/codex-auth-helper.js +100 -0
  114. package/dist/cloud/api/generic-webhooks.d.ts +8 -0
  115. package/dist/cloud/api/generic-webhooks.js +129 -0
  116. package/dist/cloud/api/git.d.ts +8 -0
  117. package/dist/cloud/api/git.js +152 -0
  118. package/dist/cloud/api/github-app.d.ts +11 -0
  119. package/dist/cloud/api/github-app.js +189 -0
  120. package/dist/cloud/api/middleware/planLimits.d.ts +7 -0
  121. package/dist/cloud/api/middleware/planLimits.js +39 -1
  122. package/dist/cloud/api/monitoring.d.ts +11 -0
  123. package/dist/cloud/api/monitoring.js +578 -0
  124. package/dist/cloud/api/nango-auth.d.ts +9 -0
  125. package/dist/cloud/api/nango-auth.js +377 -0
  126. package/dist/cloud/api/onboarding.d.ts +8 -1
  127. package/dist/cloud/api/onboarding.js +313 -119
  128. package/dist/cloud/api/policy.d.ts +8 -0
  129. package/dist/cloud/api/policy.js +229 -0
  130. package/dist/cloud/api/providers.js +114 -42
  131. package/dist/cloud/api/repos.d.ts +1 -0
  132. package/dist/cloud/api/repos.js +186 -0
  133. package/dist/cloud/api/test-helpers.d.ts +10 -0
  134. package/dist/cloud/api/test-helpers.js +575 -0
  135. package/dist/cloud/api/webhooks.d.ts +8 -0
  136. package/dist/cloud/api/webhooks.js +645 -0
  137. package/dist/cloud/api/workspaces.js +320 -12
  138. package/dist/cloud/billing/plans.js +32 -19
  139. package/dist/cloud/billing/types.d.ts +9 -3
  140. package/dist/cloud/config.d.ts +9 -2
  141. package/dist/cloud/config.js +13 -4
  142. package/dist/cloud/db/drizzle.d.ts +84 -1
  143. package/dist/cloud/db/drizzle.js +470 -0
  144. package/dist/cloud/db/index.d.ts +9 -4
  145. package/dist/cloud/db/index.js +11 -3
  146. package/dist/cloud/db/schema.d.ts +3283 -556
  147. package/dist/cloud/db/schema.js +314 -1
  148. package/dist/cloud/index.d.ts +1 -0
  149. package/dist/cloud/index.js +2 -0
  150. package/dist/cloud/provisioner/index.d.ts +56 -0
  151. package/dist/cloud/provisioner/index.js +676 -34
  152. package/dist/cloud/server.d.ts +1 -0
  153. package/dist/cloud/server.js +362 -13
  154. package/dist/cloud/services/auto-scaler.d.ts +152 -0
  155. package/dist/cloud/services/auto-scaler.js +439 -0
  156. package/dist/cloud/services/capacity-manager.d.ts +148 -0
  157. package/dist/cloud/services/capacity-manager.js +449 -0
  158. package/dist/cloud/services/ci-agent-spawner.d.ts +49 -0
  159. package/dist/cloud/services/ci-agent-spawner.js +373 -0
  160. package/dist/cloud/services/index.d.ts +12 -0
  161. package/dist/cloud/services/index.js +15 -0
  162. package/dist/cloud/services/mention-handler.d.ts +65 -0
  163. package/dist/cloud/services/mention-handler.js +405 -0
  164. package/dist/cloud/services/nango.d.ts +186 -0
  165. package/dist/cloud/services/nango.js +344 -0
  166. package/dist/cloud/services/persistence.d.ts +131 -0
  167. package/dist/cloud/services/persistence.js +200 -0
  168. package/dist/cloud/services/planLimits.d.ts +37 -0
  169. package/dist/cloud/services/planLimits.js +86 -5
  170. package/dist/cloud/services/scaling-orchestrator.d.ts +159 -0
  171. package/dist/cloud/services/scaling-orchestrator.js +502 -0
  172. package/dist/cloud/services/scaling-policy.d.ts +121 -0
  173. package/dist/cloud/services/scaling-policy.js +415 -0
  174. package/dist/cloud/vault/index.js +1 -1
  175. package/dist/cloud/webhooks/index.d.ts +24 -0
  176. package/dist/cloud/webhooks/index.js +29 -0
  177. package/dist/cloud/webhooks/parsers/github.d.ts +8 -0
  178. package/dist/cloud/webhooks/parsers/github.js +234 -0
  179. package/dist/cloud/webhooks/parsers/index.d.ts +23 -0
  180. package/dist/cloud/webhooks/parsers/index.js +30 -0
  181. package/dist/cloud/webhooks/parsers/linear.d.ts +9 -0
  182. package/dist/cloud/webhooks/parsers/linear.js +258 -0
  183. package/dist/cloud/webhooks/parsers/slack.d.ts +9 -0
  184. package/dist/cloud/webhooks/parsers/slack.js +214 -0
  185. package/dist/cloud/webhooks/responders/github.d.ts +8 -0
  186. package/dist/cloud/webhooks/responders/github.js +73 -0
  187. package/dist/cloud/webhooks/responders/index.d.ts +23 -0
  188. package/dist/cloud/webhooks/responders/index.js +30 -0
  189. package/dist/cloud/webhooks/responders/linear.d.ts +9 -0
  190. package/dist/cloud/webhooks/responders/linear.js +149 -0
  191. package/dist/cloud/webhooks/responders/slack.d.ts +20 -0
  192. package/dist/cloud/webhooks/responders/slack.js +178 -0
  193. package/dist/cloud/webhooks/router.d.ts +25 -0
  194. package/dist/cloud/webhooks/router.js +504 -0
  195. package/dist/cloud/webhooks/rules-engine.d.ts +24 -0
  196. package/dist/cloud/webhooks/rules-engine.js +287 -0
  197. package/dist/cloud/webhooks/types.d.ts +186 -0
  198. package/dist/cloud/webhooks/types.js +8 -0
  199. package/dist/continuity/formatter.d.ts +51 -0
  200. package/dist/continuity/formatter.js +313 -0
  201. package/dist/continuity/handoff-store.d.ts +67 -0
  202. package/dist/continuity/handoff-store.js +472 -0
  203. package/dist/continuity/index.d.ts +45 -0
  204. package/dist/continuity/index.js +48 -0
  205. package/dist/continuity/ledger-store.d.ts +110 -0
  206. package/dist/continuity/ledger-store.js +500 -0
  207. package/dist/continuity/manager.d.ts +178 -0
  208. package/dist/continuity/manager.js +562 -0
  209. package/dist/continuity/parser.d.ts +76 -0
  210. package/dist/continuity/parser.js +579 -0
  211. package/dist/continuity/types.d.ts +180 -0
  212. package/dist/continuity/types.js +9 -0
  213. package/dist/daemon/agent-manager.d.ts +27 -0
  214. package/dist/daemon/agent-manager.js +107 -6
  215. package/dist/daemon/agent-registry.d.ts +32 -0
  216. package/dist/daemon/agent-registry.js +42 -2
  217. package/dist/daemon/api.d.ts +12 -0
  218. package/dist/daemon/api.js +131 -2
  219. package/dist/daemon/cli-auth.d.ts +67 -0
  220. package/dist/daemon/cli-auth.js +537 -0
  221. package/dist/daemon/cloud-sync.js +9 -7
  222. package/dist/daemon/orchestrator.js +30 -0
  223. package/dist/daemon/router.d.ts +5 -0
  224. package/dist/daemon/router.js +78 -26
  225. package/dist/daemon/server.d.ts +5 -0
  226. package/dist/daemon/server.js +9 -1
  227. package/dist/daemon/services/browser-testing.d.ts +88 -0
  228. package/dist/daemon/services/browser-testing.js +244 -0
  229. package/dist/daemon/services/container-spawner.d.ts +135 -0
  230. package/dist/daemon/services/container-spawner.js +313 -0
  231. package/dist/daemon/types.d.ts +5 -1
  232. package/dist/dashboard/out/404.html +1 -1
  233. package/dist/dashboard/out/_next/static/chunks/116-2502180def231162.js +1 -0
  234. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
  235. package/dist/dashboard/out/_next/static/chunks/699-3b1cd6618a45d259.js +1 -0
  236. package/dist/dashboard/out/_next/static/chunks/724-2dae7627550ab88f.js +9 -0
  237. package/dist/dashboard/out/_next/static/chunks/766-1f2dd8cb7f766b0b.js +1 -0
  238. package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-3fdfa60e53f2810d.js +1 -0
  239. package/dist/dashboard/out/_next/static/chunks/app/app/page-e6381e5a6e1fbcfd.js +1 -0
  240. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-3538dfe0ffe984b8.js +1 -0
  241. package/dist/dashboard/out/_next/static/chunks/app/history/{page-b6edd4dde8d08194.js → page-abb9ab2d329f56e9.js} +1 -1
  242. package/dist/dashboard/out/_next/static/chunks/app/layout-c0d118c0f92d969c.js +1 -0
  243. package/dist/dashboard/out/_next/static/chunks/app/login/page-c22d080201cbd9fb.js +1 -0
  244. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-67a3e98d9a43a6ed.js +1 -0
  245. package/dist/dashboard/out/_next/static/chunks/app/page-77e9c65420a06cfb.js +1 -0
  246. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-b08ed1c34d14434a.js +1 -0
  247. package/dist/dashboard/out/_next/static/chunks/app/providers/page-e88bc117ef7671c3.js +1 -0
  248. package/dist/dashboard/out/_next/static/chunks/app/signup/page-68d34f50baa8ab6b.js +1 -0
  249. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
  250. package/dist/dashboard/out/_next/static/chunks/{main-app-5d692157a8eb1fd9.js → main-app-6e8e8d3ef4e0192a.js} +1 -1
  251. package/dist/dashboard/out/_next/static/chunks/{main-c2f423b9c9f4591b.js → main-ed4e1fb6f29c34cf.js} +1 -1
  252. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
  253. package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +1 -0
  254. package/dist/dashboard/out/_next/static/css/7c3ae9e8617d42a5.css +1 -0
  255. package/dist/dashboard/out/app/onboarding.html +1 -0
  256. package/dist/dashboard/out/app/onboarding.txt +7 -0
  257. package/dist/dashboard/out/app.html +1 -14
  258. package/dist/dashboard/out/app.txt +2 -2
  259. package/dist/dashboard/out/connect-repos.html +1 -0
  260. package/dist/dashboard/out/connect-repos.txt +7 -0
  261. package/dist/dashboard/out/history.html +1 -1
  262. package/dist/dashboard/out/history.txt +2 -2
  263. package/dist/dashboard/out/index.html +1 -1
  264. package/dist/dashboard/out/index.txt +2 -2
  265. package/dist/dashboard/out/login.html +6 -0
  266. package/dist/dashboard/out/login.txt +7 -0
  267. package/dist/dashboard/out/metrics.html +1 -1
  268. package/dist/dashboard/out/metrics.txt +2 -2
  269. package/dist/dashboard/out/pricing.html +3 -3
  270. package/dist/dashboard/out/pricing.txt +2 -2
  271. package/dist/dashboard/out/providers.html +1 -0
  272. package/dist/dashboard/out/providers.txt +7 -0
  273. package/dist/dashboard/out/signup.html +6 -0
  274. package/dist/dashboard/out/signup.txt +7 -0
  275. package/dist/dashboard-server/server.js +1308 -8
  276. package/dist/hooks/emitter.d.ts +40 -0
  277. package/dist/hooks/emitter.js +63 -0
  278. package/dist/hooks/index.d.ts +3 -0
  279. package/dist/hooks/index.js +3 -0
  280. package/dist/hooks/registry.d.ts +173 -0
  281. package/dist/hooks/registry.js +476 -0
  282. package/dist/hooks/trajectory-hooks.d.ts +52 -0
  283. package/dist/hooks/trajectory-hooks.js +183 -0
  284. package/dist/hooks/types.d.ts +141 -0
  285. package/dist/index.d.ts +2 -0
  286. package/dist/index.js +3 -0
  287. package/dist/memory/adapters/index.d.ts +8 -0
  288. package/dist/memory/adapters/index.js +8 -0
  289. package/dist/memory/adapters/inmemory.d.ts +59 -0
  290. package/dist/memory/adapters/inmemory.js +195 -0
  291. package/dist/memory/adapters/supermemory.d.ts +71 -0
  292. package/dist/memory/adapters/supermemory.js +338 -0
  293. package/dist/memory/factory.d.ts +48 -0
  294. package/dist/memory/factory.js +143 -0
  295. package/dist/memory/index.d.ts +32 -0
  296. package/dist/memory/index.js +32 -0
  297. package/dist/memory/memory-hooks.d.ts +60 -0
  298. package/dist/memory/memory-hooks.js +313 -0
  299. package/dist/memory/service.d.ts +49 -0
  300. package/dist/memory/service.js +146 -0
  301. package/dist/memory/types.d.ts +195 -0
  302. package/dist/memory/types.js +8 -0
  303. package/dist/policy/agent-policy.d.ts +225 -0
  304. package/dist/policy/agent-policy.js +665 -0
  305. package/dist/policy/cloud-policy-fetcher.d.ts +12 -0
  306. package/dist/policy/cloud-policy-fetcher.js +64 -0
  307. package/dist/resiliency/crash-insights.d.ts +156 -0
  308. package/dist/resiliency/crash-insights.js +492 -0
  309. package/dist/resiliency/gossip-health.d.ts +137 -0
  310. package/dist/resiliency/gossip-health.js +241 -0
  311. package/dist/resiliency/index.d.ts +5 -0
  312. package/dist/resiliency/index.js +5 -0
  313. package/dist/resiliency/leader-watchdog.d.ts +109 -0
  314. package/dist/resiliency/leader-watchdog.js +189 -0
  315. package/dist/resiliency/memory-monitor.d.ts +172 -0
  316. package/dist/resiliency/memory-monitor.js +593 -0
  317. package/dist/resiliency/stateless-lead.d.ts +149 -0
  318. package/dist/resiliency/stateless-lead.js +308 -0
  319. package/dist/resiliency/supervisor.d.ts +38 -0
  320. package/dist/resiliency/supervisor.js +122 -0
  321. package/dist/shared/cli-auth-config.d.ts +91 -0
  322. package/dist/shared/cli-auth-config.js +264 -0
  323. package/dist/storage/adapter.d.ts +1 -1
  324. package/dist/trajectory/config.d.ts +84 -0
  325. package/dist/trajectory/config.js +163 -0
  326. package/dist/trajectory/index.d.ts +8 -0
  327. package/dist/trajectory/index.js +8 -0
  328. package/dist/trajectory/integration.d.ts +292 -0
  329. package/dist/trajectory/integration.js +834 -0
  330. package/dist/utils/logger.js +1 -1
  331. package/dist/utils/project-namespace.d.ts +24 -0
  332. package/dist/utils/project-namespace.js +84 -0
  333. package/dist/wrapper/parser.d.ts +10 -0
  334. package/dist/wrapper/parser.js +100 -33
  335. package/dist/wrapper/pty-wrapper.d.ts +197 -16
  336. package/dist/wrapper/pty-wrapper.js +943 -106
  337. package/dist/wrapper/shared.d.ts +165 -0
  338. package/dist/wrapper/shared.js +270 -0
  339. package/dist/wrapper/tmux-wrapper.d.ts +73 -11
  340. package/dist/wrapper/tmux-wrapper.js +541 -120
  341. package/package.json +16 -16
  342. package/scripts/postinstall.js +60 -0
  343. package/test-push.txt +1 -0
  344. package/bin/tmux +0 -0
  345. package/dist/bridge/config.d.ts.map +0 -1
  346. package/dist/bridge/config.js.map +0 -1
  347. package/dist/bridge/index.d.ts.map +0 -1
  348. package/dist/bridge/index.js.map +0 -1
  349. package/dist/bridge/multi-project-client.d.ts.map +0 -1
  350. package/dist/bridge/multi-project-client.js.map +0 -1
  351. package/dist/bridge/shadow-cli.d.ts.map +0 -1
  352. package/dist/bridge/shadow-cli.js.map +0 -1
  353. package/dist/bridge/shadow-config.d.ts.map +0 -1
  354. package/dist/bridge/shadow-config.js.map +0 -1
  355. package/dist/bridge/spawner.d.ts.map +0 -1
  356. package/dist/bridge/spawner.js.map +0 -1
  357. package/dist/bridge/teams-config.d.ts.map +0 -1
  358. package/dist/bridge/teams-config.js.map +0 -1
  359. package/dist/bridge/types.d.ts.map +0 -1
  360. package/dist/bridge/types.js.map +0 -1
  361. package/dist/bridge/utils.d.ts.map +0 -1
  362. package/dist/bridge/utils.js.map +0 -1
  363. package/dist/cli/index.d.ts.map +0 -1
  364. package/dist/cli/index.js.map +0 -1
  365. package/dist/cloud/api/auth.d.ts.map +0 -1
  366. package/dist/cloud/api/auth.js.map +0 -1
  367. package/dist/cloud/api/billing.d.ts.map +0 -1
  368. package/dist/cloud/api/billing.js.map +0 -1
  369. package/dist/cloud/api/coordinators.d.ts.map +0 -1
  370. package/dist/cloud/api/coordinators.js.map +0 -1
  371. package/dist/cloud/api/daemons.d.ts.map +0 -1
  372. package/dist/cloud/api/daemons.js.map +0 -1
  373. package/dist/cloud/api/middleware/planLimits.d.ts.map +0 -1
  374. package/dist/cloud/api/middleware/planLimits.js.map +0 -1
  375. package/dist/cloud/api/onboarding.d.ts.map +0 -1
  376. package/dist/cloud/api/onboarding.js.map +0 -1
  377. package/dist/cloud/api/providers.d.ts.map +0 -1
  378. package/dist/cloud/api/providers.js.map +0 -1
  379. package/dist/cloud/api/repos.d.ts.map +0 -1
  380. package/dist/cloud/api/repos.js.map +0 -1
  381. package/dist/cloud/api/teams.d.ts.map +0 -1
  382. package/dist/cloud/api/teams.js.map +0 -1
  383. package/dist/cloud/api/usage.d.ts.map +0 -1
  384. package/dist/cloud/api/usage.js.map +0 -1
  385. package/dist/cloud/api/workspaces.d.ts.map +0 -1
  386. package/dist/cloud/api/workspaces.js.map +0 -1
  387. package/dist/cloud/billing/index.d.ts.map +0 -1
  388. package/dist/cloud/billing/index.js.map +0 -1
  389. package/dist/cloud/billing/plans.d.ts.map +0 -1
  390. package/dist/cloud/billing/plans.js.map +0 -1
  391. package/dist/cloud/billing/service.d.ts.map +0 -1
  392. package/dist/cloud/billing/service.js.map +0 -1
  393. package/dist/cloud/billing/types.d.ts.map +0 -1
  394. package/dist/cloud/billing/types.js.map +0 -1
  395. package/dist/cloud/config.d.ts.map +0 -1
  396. package/dist/cloud/config.js.map +0 -1
  397. package/dist/cloud/db/drizzle.d.ts.map +0 -1
  398. package/dist/cloud/db/drizzle.js.map +0 -1
  399. package/dist/cloud/db/index.d.ts.map +0 -1
  400. package/dist/cloud/db/index.js.map +0 -1
  401. package/dist/cloud/db/schema.d.ts.map +0 -1
  402. package/dist/cloud/db/schema.js.map +0 -1
  403. package/dist/cloud/index.d.ts.map +0 -1
  404. package/dist/cloud/index.js.map +0 -1
  405. package/dist/cloud/provisioner/index.d.ts.map +0 -1
  406. package/dist/cloud/provisioner/index.js.map +0 -1
  407. package/dist/cloud/server.d.ts.map +0 -1
  408. package/dist/cloud/server.js.map +0 -1
  409. package/dist/cloud/services/coordinator.d.ts.map +0 -1
  410. package/dist/cloud/services/coordinator.js.map +0 -1
  411. package/dist/cloud/services/planLimits.d.ts.map +0 -1
  412. package/dist/cloud/services/planLimits.js.map +0 -1
  413. package/dist/cloud/vault/index.d.ts.map +0 -1
  414. package/dist/cloud/vault/index.js.map +0 -1
  415. package/dist/daemon/agent-manager.d.ts.map +0 -1
  416. package/dist/daemon/agent-manager.js.map +0 -1
  417. package/dist/daemon/agent-registry.d.ts.map +0 -1
  418. package/dist/daemon/agent-registry.js.map +0 -1
  419. package/dist/daemon/api.d.ts.map +0 -1
  420. package/dist/daemon/api.js.map +0 -1
  421. package/dist/daemon/auth.d.ts.map +0 -1
  422. package/dist/daemon/auth.js.map +0 -1
  423. package/dist/daemon/cloud-sync.d.ts.map +0 -1
  424. package/dist/daemon/cloud-sync.js.map +0 -1
  425. package/dist/daemon/connection.d.ts.map +0 -1
  426. package/dist/daemon/connection.js.map +0 -1
  427. package/dist/daemon/index.d.ts.map +0 -1
  428. package/dist/daemon/index.js.map +0 -1
  429. package/dist/daemon/orchestrator.d.ts.map +0 -1
  430. package/dist/daemon/orchestrator.js.map +0 -1
  431. package/dist/daemon/registry.d.ts.map +0 -1
  432. package/dist/daemon/registry.js.map +0 -1
  433. package/dist/daemon/router.d.ts.map +0 -1
  434. package/dist/daemon/router.js.map +0 -1
  435. package/dist/daemon/server.d.ts.map +0 -1
  436. package/dist/daemon/server.js.map +0 -1
  437. package/dist/daemon/types.d.ts.map +0 -1
  438. package/dist/daemon/types.js.map +0 -1
  439. package/dist/daemon/workspace-manager.d.ts.map +0 -1
  440. package/dist/daemon/workspace-manager.js.map +0 -1
  441. package/dist/dashboard/out/_next/static/chunks/693-7b3301d8f6bc5014.js +0 -1
  442. package/dist/dashboard/out/_next/static/chunks/713-f78477eb185f1f4d.js +0 -1
  443. package/dist/dashboard/out/_next/static/chunks/766-e53e1cfe39b0b5b5.js +0 -1
  444. package/dist/dashboard/out/_next/static/chunks/900-037c64bfd797fb2a.js +0 -1
  445. package/dist/dashboard/out/_next/static/chunks/app/app/page-e3d9e1f4466b9bae.js +0 -1
  446. package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +0 -1
  447. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-e68825a81db67ba1.js +0 -1
  448. package/dist/dashboard/out/_next/static/chunks/app/page-cc108bf68c8a657f.js +0 -1
  449. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-d80e03a5297f95b6.js +0 -1
  450. package/dist/dashboard/out/_next/static/chunks/webpack-a5acc2831d094776.js +0 -1
  451. package/dist/dashboard/out/_next/static/css/79b80143647a07d7.css +0 -1
  452. package/dist/dashboard/out/_next/static/css/8cf277370ad48cfe.css +0 -1
  453. package/dist/dashboard-server/metrics.d.ts.map +0 -1
  454. package/dist/dashboard-server/metrics.js.map +0 -1
  455. package/dist/dashboard-server/needs-attention.d.ts.map +0 -1
  456. package/dist/dashboard-server/needs-attention.js.map +0 -1
  457. package/dist/dashboard-server/server.d.ts.map +0 -1
  458. package/dist/dashboard-server/server.js.map +0 -1
  459. package/dist/dashboard-server/start.d.ts.map +0 -1
  460. package/dist/dashboard-server/start.js.map +0 -1
  461. package/dist/hooks/inbox-check/hook.d.ts.map +0 -1
  462. package/dist/hooks/inbox-check/hook.js.map +0 -1
  463. package/dist/hooks/inbox-check/index.d.ts.map +0 -1
  464. package/dist/hooks/inbox-check/index.js.map +0 -1
  465. package/dist/hooks/inbox-check/types.d.ts.map +0 -1
  466. package/dist/hooks/inbox-check/types.js.map +0 -1
  467. package/dist/hooks/inbox-check/utils.d.ts.map +0 -1
  468. package/dist/hooks/inbox-check/utils.js.map +0 -1
  469. package/dist/hooks/index.d.ts.map +0 -1
  470. package/dist/hooks/index.js.map +0 -1
  471. package/dist/hooks/types.d.ts.map +0 -1
  472. package/dist/hooks/types.js.map +0 -1
  473. package/dist/index.d.ts.map +0 -1
  474. package/dist/index.js.map +0 -1
  475. package/dist/protocol/framing.d.ts.map +0 -1
  476. package/dist/protocol/framing.js.map +0 -1
  477. package/dist/protocol/index.d.ts.map +0 -1
  478. package/dist/protocol/index.js.map +0 -1
  479. package/dist/protocol/types.d.ts.map +0 -1
  480. package/dist/protocol/types.js.map +0 -1
  481. package/dist/resiliency/context-persistence.d.ts.map +0 -1
  482. package/dist/resiliency/context-persistence.js.map +0 -1
  483. package/dist/resiliency/health-monitor.d.ts.map +0 -1
  484. package/dist/resiliency/health-monitor.js.map +0 -1
  485. package/dist/resiliency/index.d.ts.map +0 -1
  486. package/dist/resiliency/index.js.map +0 -1
  487. package/dist/resiliency/logger.d.ts.map +0 -1
  488. package/dist/resiliency/logger.js.map +0 -1
  489. package/dist/resiliency/metrics.d.ts.map +0 -1
  490. package/dist/resiliency/metrics.js.map +0 -1
  491. package/dist/resiliency/provider-context.d.ts.map +0 -1
  492. package/dist/resiliency/provider-context.js.map +0 -1
  493. package/dist/resiliency/supervisor.d.ts.map +0 -1
  494. package/dist/resiliency/supervisor.js.map +0 -1
  495. package/dist/state/agent-state.d.ts.map +0 -1
  496. package/dist/state/agent-state.js.map +0 -1
  497. package/dist/storage/adapter.d.ts.map +0 -1
  498. package/dist/storage/adapter.js.map +0 -1
  499. package/dist/storage/sqlite-adapter.d.ts.map +0 -1
  500. package/dist/storage/sqlite-adapter.js.map +0 -1
  501. package/dist/utils/agent-config.d.ts.map +0 -1
  502. package/dist/utils/agent-config.js.map +0 -1
  503. package/dist/utils/command-resolver.d.ts.map +0 -1
  504. package/dist/utils/command-resolver.js.map +0 -1
  505. package/dist/utils/index.d.ts.map +0 -1
  506. package/dist/utils/index.js.map +0 -1
  507. package/dist/utils/logger.d.ts.map +0 -1
  508. package/dist/utils/logger.js.map +0 -1
  509. package/dist/utils/name-generator.d.ts.map +0 -1
  510. package/dist/utils/name-generator.js.map +0 -1
  511. package/dist/utils/project-namespace.d.ts.map +0 -1
  512. package/dist/utils/project-namespace.js.map +0 -1
  513. package/dist/utils/tmux-resolver.d.ts.map +0 -1
  514. package/dist/utils/tmux-resolver.js.map +0 -1
  515. package/dist/utils/update-checker.d.ts.map +0 -1
  516. package/dist/utils/update-checker.js.map +0 -1
  517. package/dist/wrapper/client.d.ts.map +0 -1
  518. package/dist/wrapper/client.js.map +0 -1
  519. package/dist/wrapper/inbox.d.ts.map +0 -1
  520. package/dist/wrapper/inbox.js.map +0 -1
  521. package/dist/wrapper/index.d.ts.map +0 -1
  522. package/dist/wrapper/index.js.map +0 -1
  523. package/dist/wrapper/parser.d.ts.map +0 -1
  524. package/dist/wrapper/parser.js.map +0 -1
  525. package/dist/wrapper/pty-wrapper.d.ts.map +0 -1
  526. package/dist/wrapper/pty-wrapper.js.map +0 -1
  527. package/dist/wrapper/tmux-wrapper.d.ts.map +0 -1
  528. package/dist/wrapper/tmux-wrapper.js.map +0 -1
  529. package/docs/AGENTS.md +0 -513
  530. package/docs/ARCHITECTURE_DECISIONS.md +0 -175
  531. package/docs/CHANGELOG.md +0 -11
  532. package/docs/CLI-SIMPLIFICATION-COMPLETE.md +0 -48
  533. package/docs/CLOUD-ARCHITECTURE.md +0 -652
  534. package/docs/CLOUD-ONBOARDING-DESIGN.md +0 -1983
  535. package/docs/COMPETITIVE_ANALYSIS.md +0 -897
  536. package/docs/CONTRIBUTING.md +0 -151
  537. package/docs/DESIGN_BRIDGE_STAFFING.md +0 -878
  538. package/docs/DESIGN_V2.md +0 -1079
  539. package/docs/INTEGRATION-GUIDE.md +0 -926
  540. package/docs/MONETIZATION.md +0 -1679
  541. package/docs/PROPOSAL-trajectories.md +0 -1582
  542. package/docs/PROTOCOL.md +0 -325
  543. package/docs/SCALING_ANALYSIS.md +0 -280
  544. package/docs/TESTING_PRESENCE_FEATURES.md +0 -327
  545. package/docs/TMUX_IMPLEMENTATION_NOTES.md +0 -364
  546. package/docs/TMUX_IMPROVEMENTS.md +0 -968
  547. package/docs/agent-relay-snippet.md +0 -168
  548. package/docs/competitive-analysis-mcp-agent-mail.md +0 -389
  549. package/docs/dashboard-v2-plan.md +0 -179
  550. package/docs/guides/CLOUD.md +0 -236
  551. package/docs/guides/LOCAL.md +0 -535
  552. package/docs/guides/SELF-HOSTED.md +0 -494
  553. package/docs/proposals/shadow-as-subagent.md +0 -765
  554. package/docs/proposals/slack-bot-integration.md +0 -1457
  555. package/docs/removable-code-analysis.md +0 -24
  556. package/scripts/dev/PUBLIC_RELEASE_PLAN.md +0 -88
  557. package/scripts/dev/dev-team-setup.sh +0 -431
  558. package/scripts/e2e-test.sh +0 -119
  559. package/scripts/games/game-protocol.md +0 -79
  560. package/scripts/games/hearts-setup.sh +0 -264
  561. package/scripts/tictactoe-setup.sh +0 -181
  562. /package/dist/dashboard/out/_next/static/chunks/{117-b2cd8d6485aacf2b.js → 117-f7b8ab0809342e77.js} +0 -0
  563. /package/dist/dashboard/out/_next/static/chunks/{648-8f3f26864ce515e5.js → 648-5cc6e1921389a58a.js} +0 -0
  564. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-0b990dbb71d72a98.js → page-53b8a69f76db17d0.js} +0 -0
  565. /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-bf46c09eb57e019c.js → fd9d1056-609918ca7b6280bb.js} +0 -0
  566. /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → wPgKJtcOmTFLpUncDg16A}/_buildManifest.js +0 -0
  567. /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → wPgKJtcOmTFLpUncDg16A}/_ssgManifest.js +0 -0
package/docs/PROTOCOL.md DELETED
@@ -1,325 +0,0 @@
1
- # Agent Relay Protocol Specification
2
-
3
- Version 1.0
4
-
5
- ## Goals
6
-
7
- - Low-latency local IPC (<5ms)
8
- - Strict framing with backpressure
9
- - At-least-once delivery (optional exactly-once within session)
10
- - Reconnect + state resync
11
- - Simple to implement in Rust/Go/TypeScript
12
-
13
- ## Non-Goals
14
-
15
- - Cross-host networking
16
- - Encryption (local-only)
17
- - Unbounded buffering
18
-
19
- ---
20
-
21
- ## 1. Transport
22
-
23
- **Preferred:** Unix Domain Socket (stream)
24
- - Path: `/tmp/agent-relay.sock` (configurable)
25
-
26
- **Windows fallback:** Named Pipe
27
- - Path: `\\.\pipe\agent-relay`
28
-
29
- **Connection model:** Each wrapper opens 1 duplex stream to daemon.
30
-
31
- ---
32
-
33
- ## 2. Framing
34
-
35
- Stream is a sequence of frames.
36
-
37
- ### Frame Header
38
- - 4-byte big-endian unsigned length `N` (bytes)
39
- - Followed by `N` bytes UTF-8 JSON
40
-
41
- ### Limits
42
- - `N` MUST be <= `max_frame_bytes` (default: 1 MiB)
43
- - If exceeded, daemon closes connection with error
44
- - JSON payload MUST be an object
45
-
46
- ### Example (pseudo)
47
- ```
48
- 0000003A {"v":1,"type":"HELLO","agent":"claude-1",...}
49
- ```
50
- Where `0x3A` (58) is the byte length of the JSON payload.
51
-
52
- ---
53
-
54
- ## 3. Envelope
55
-
56
- All messages are `Envelope` objects:
57
-
58
- ```typescript
59
- interface Envelope {
60
- v: 1; // Protocol version
61
- type: MessageType; // See below
62
- id: string; // Unique per-sender (UUIDv4)
63
- ts: number; // Milliseconds since epoch
64
- from?: string; // Agent name (set by daemon)
65
- to?: string | '*'; // Target or broadcast
66
- topic?: string; // Optional topic/channel
67
- payload: object; // Type-specific payload
68
- }
69
- ```
70
-
71
- ### Message Types
72
-
73
- | Type | Direction | Purpose |
74
- |------|-----------|---------|
75
- | `HELLO` | Client→Server | Initiate handshake |
76
- | `WELCOME` | Server→Client | Confirm session |
77
- | `SEND` | Client→Server | Send message |
78
- | `DELIVER` | Server→Client | Deliver message |
79
- | `ACK` | Both | Acknowledge receipt |
80
- | `NACK` | Both | Negative acknowledgment |
81
- | `PING` | Server→Client | Heartbeat |
82
- | `PONG` | Client→Server | Heartbeat response |
83
- | `ERROR` | Server→Client | Error notification |
84
- | `BUSY` | Server→Client | Backpressure signal |
85
- | `RESUME` | Client→Server | Resume session |
86
- | `SYNC` | Server→Client | State sync info |
87
- | `BYE` | Both | Graceful disconnect |
88
- | `SUBSCRIBE` | Client→Server | Subscribe to topic |
89
- | `UNSUBSCRIBE` | Client→Server | Unsubscribe from topic |
90
-
91
- ---
92
-
93
- ## 4. Handshake
94
-
95
- ### New Session
96
-
97
- **Client → Server: HELLO**
98
- ```json
99
- {
100
- "v": 1,
101
- "type": "HELLO",
102
- "id": "uuid",
103
- "ts": 1734440000000,
104
- "payload": {
105
- "agent": "claude-1",
106
- "capabilities": {
107
- "ack": true,
108
- "resume": true,
109
- "max_inflight": 256,
110
- "supports_topics": true
111
- },
112
- "session": {
113
- "resume_token": "optional-previous-token"
114
- }
115
- }
116
- }
117
- ```
118
-
119
- **Server → Client: WELCOME**
120
- ```json
121
- {
122
- "v": 1,
123
- "type": "WELCOME",
124
- "id": "uuid",
125
- "ts": 1734440000001,
126
- "payload": {
127
- "session_id": "s-abc123",
128
- "resume_token": "new-token-for-reconnect",
129
- "server": {
130
- "max_frame_bytes": 1048576,
131
- "heartbeat_ms": 5000
132
- }
133
- }
134
- }
135
- ```
136
-
137
- ---
138
-
139
- ## 5. Sending and Delivery
140
-
141
- ### Client → Server: SEND
142
- ```json
143
- {
144
- "v": 1,
145
- "type": "SEND",
146
- "id": "m-001",
147
- "ts": 1734440000100,
148
- "to": "codex-1",
149
- "topic": "chat",
150
- "payload": {
151
- "kind": "message",
152
- "body": "Your turn",
153
- "data": {}
154
- },
155
- "payload_meta": {
156
- "requires_ack": true,
157
- "ttl_ms": 60000
158
- }
159
- }
160
- ```
161
-
162
- ### Server → Recipient: DELIVER
163
- ```json
164
- {
165
- "v": 1,
166
- "type": "DELIVER",
167
- "id": "d-001",
168
- "ts": 1734440000102,
169
- "from": "claude-1",
170
- "to": "codex-1",
171
- "topic": "chat",
172
- "payload": {
173
- "kind": "message",
174
- "body": "Your turn",
175
- "data": {}
176
- },
177
- "delivery": {
178
- "seq": 42,
179
- "session_id": "s-abc123"
180
- }
181
- }
182
- ```
183
-
184
- ### Recipient → Server: ACK
185
- ```json
186
- {
187
- "v": 1,
188
- "type": "ACK",
189
- "id": "uuid",
190
- "ts": 1734440000103,
191
- "payload": {
192
- "ack_id": "d-001",
193
- "seq": 42
194
- }
195
- }
196
- ```
197
-
198
- ### Ordering Guarantee
199
-
200
- Per `(topic, from → to)` stream, daemon guarantees in-order DELIVER by `delivery.seq`.
201
-
202
- No global ordering across topics.
203
-
204
- ---
205
-
206
- ## 6. Backpressure
207
-
208
- Backpressure signaling is reserved for future versions. The current daemon is best-effort and does not implement bounded outbound queues or `BUSY` responses.
209
-
210
- ### Server → Client: BUSY
211
- ```json
212
- {
213
- "v": 1,
214
- "type": "BUSY",
215
- "id": "uuid",
216
- "ts": 1734440000300,
217
- "payload": {
218
- "retry_after_ms": 50,
219
- "queue_depth": 1000
220
- }
221
- }
222
- ```
223
-
224
- Client should back off (exponential with jitter).
225
-
226
- ---
227
-
228
- ## 7. Heartbeats
229
-
230
- - Daemon sends PING every `heartbeat_ms` if idle
231
- - Wrapper replies PONG with same nonce
232
- - Missing PONG for `2 * heartbeat_ms` → connection dead
233
-
234
- ---
235
-
236
- ## 8. Reconnect / Resume
237
-
238
- ### Client → Server: RESUME
239
- ```json
240
- {
241
- "v": 1,
242
- "type": "RESUME",
243
- "id": "uuid",
244
- "ts": 1734440001000,
245
- "payload": {
246
- "session_id": "s-abc123",
247
- "agent": "claude-1",
248
- "streams": {
249
- "chat": { "last_seq": 45 }
250
- }
251
- }
252
- }
253
- ```
254
-
255
- ### Server → Client: SYNC
256
- ```json
257
- {
258
- "v": 1,
259
- "type": "SYNC",
260
- "id": "uuid",
261
- "ts": 1734440001001,
262
- "payload": {
263
- "session_id": "s-abc123",
264
- "streams": [
265
- { "topic": "chat", "peer": "codex-1", "last_seq": 45, "server_last_seq": 49 }
266
- ]
267
- }
268
- }
269
- ```
270
-
271
- Server then replays DELIVER messages from `last_seq + 1` to `server_last_seq`.
272
-
273
- ### Stale Resume
274
-
275
- If resume gap exceeds retention, server sends NACK with code "STALE".
276
- Client should send fresh HELLO.
277
-
278
- ---
279
-
280
- ## 9. PTY Pattern Extractor
281
-
282
- ### Fenced Format (default, recommended)
283
-
284
- ```
285
- ->relay:codex-1 <<<
286
- Your turn to play>>>
287
-
288
- ->relay:* <<<
289
- Hello everyone>>>
290
- ```
291
-
292
- **Always use the fenced format** for reliable message delivery. The `<<<` opens, `>>>` closes at end of last line.
293
-
294
- ### Block Format (structured data)
295
-
296
- ```
297
- [[RELAY]]
298
- {"to": "*", "type": "message", "body": "Hello everyone"}
299
- [[/RELAY]]
300
- ```
301
-
302
- ### Rules
303
-
304
- 1. Fenced: `->relay:AgentName <<<` starts message, `>>>` ends it
305
- 2. Block: Only parse when `[[RELAY]]` at start of line
306
- 3. Pattern must be at start of line, not in code fences
307
- 4. Escape: `\->relay:` outputs literal `->relay:`
308
-
309
- ---
310
-
311
- ## 10. Connection Lifecycle
312
-
313
- ```
314
- DISCONNECTED → CONNECTING → HANDSHAKING → READY
315
- ↑ ↓
316
- BACKOFF ←─────── ERROR
317
- ```
318
-
319
- ### Backoff Strategy
320
-
321
- - Initial: 100ms
322
- - Multiplier: 2x
323
- - Max: 30s
324
- - Jitter: ±15%
325
- - Max attempts: 10
@@ -1,280 +0,0 @@
1
- # Scaling Analysis: Is the TUI Dashboard Worth It?
2
-
3
- ## The Question
4
-
5
- The proposed changes add significant complexity:
6
- - TUI dashboard with `blessed` library
7
- - Daemon event streaming
8
- - Activity state reporting from wrappers
9
- - New CLI commands
10
-
11
- **Is this the right approach, or is there a simpler path?**
12
-
13
- ---
14
-
15
- ## Behavior Comparison
16
-
17
- ### Current (2-3 Agents)
18
-
19
- ```bash
20
- # Terminal 1
21
- agent-relay -n Alice claude
22
- # You're IN Alice's tmux, working
23
-
24
- # Terminal 2
25
- agent-relay -n Bob claude
26
- # You're IN Bob's tmux
27
-
28
- # To switch: Alt+Tab between terminal windows
29
- # To see status: mentally track what each is doing
30
- ```
31
-
32
- **Works fine because:** You can hold 2-3 contexts in your head.
33
-
34
- ### Proposed (5-10 Agents)
35
-
36
- ```bash
37
- # Terminal 1
38
- agent-relay up # Start daemon
39
- agent-relay watch # TUI dashboard
40
-
41
- ┌─ Agent Relay ───────────────────────────────┐
42
- │ ● Alice active 12↑ 8↓ │
43
- │ ● Bob typing 5↑ 14↓ │
44
- │ ○ Charlie offline queued: 3 │
45
- │ ... │
46
- └─────────────────────────────────────────────┘
47
-
48
- # Press 'a' → attach to native tmux
49
- # Ctrl+B d → back to TUI
50
- ```
51
-
52
- **Adds complexity:**
53
- - blessed dependency (~500KB)
54
- - Event stream protocol
55
- - Activity reporting
56
- - More state to track in daemon
57
-
58
- ---
59
-
60
- ## Alternative: Just Use tmux Better
61
-
62
- tmux already has multi-pane and multi-window support. Why not leverage it?
63
-
64
- ### Simpler Approach: Native tmux Layout
65
-
66
- ```bash
67
- # Start all agents in one tmux session with multiple windows
68
- agent-relay team start
69
-
70
- # Creates tmux session "relay-team" with:
71
- # - Window 0: Alice (claude)
72
- # - Window 1: Bob (claude)
73
- # - Window 2: Charlie (claude)
74
- # - Window 3: Status pane (tail -f on logs)
75
-
76
- # Switch windows: Ctrl+B 0, Ctrl+B 1, Ctrl+B 2...
77
- # Or use: Ctrl+B w (window list)
78
- ```
79
-
80
- **Implementation (50 lines, not 500):**
81
-
82
- ```bash
83
- #!/bin/bash
84
- # agent-relay team start
85
-
86
- TEAM_SESSION="relay-team"
87
- AGENTS=$(cat teams.json | jq -r '.agents[].name')
88
-
89
- tmux new-session -d -s "$TEAM_SESSION"
90
-
91
- i=0
92
- for agent in $AGENTS; do
93
- if [ $i -eq 0 ]; then
94
- tmux send-keys -t "$TEAM_SESSION" "agent-relay -n $agent claude" Enter
95
- else
96
- tmux new-window -t "$TEAM_SESSION"
97
- tmux send-keys -t "$TEAM_SESSION" "agent-relay -n $agent claude" Enter
98
- fi
99
- ((i++))
100
- done
101
-
102
- # Add status window
103
- tmux new-window -t "$TEAM_SESSION" -n "status"
104
- tmux send-keys -t "$TEAM_SESSION:status" "watch -n1 agent-relay agents" Enter
105
-
106
- tmux attach -t "$TEAM_SESSION"
107
- ```
108
-
109
- **User experience:**
110
- ```
111
- Ctrl+B w → Shows window list:
112
- 0: Alice (attached)
113
- 1: Bob
114
- 2: Charlie
115
- 3: status
116
-
117
- Ctrl+B 1 → Jump to Bob
118
- Ctrl+B 3 → See status (agent-relay agents output)
119
- ```
120
-
121
- ---
122
-
123
- ## Comparison: TUI vs Native tmux
124
-
125
- | Aspect | TUI Dashboard (blessed) | Native tmux Windows |
126
- |--------|------------------------|---------------------|
127
- | **Lines of code** | ~500 | ~50 |
128
- | **Dependencies** | blessed (~500KB) | None (tmux built-in) |
129
- | **Learning curve** | New UI to learn | tmux you already know |
130
- | **Real-time updates** | Yes (event stream) | Yes (watch command) |
131
- | **Quick switch** | Press 'a', select | Ctrl+B {number} |
132
- | **See all at once** | TUI list | Ctrl+B w (window list) |
133
- | **Native experience** | Detach TUI → attach tmux | Already in tmux |
134
- | **Maintenance** | blessed updates, bugs | tmux is stable |
135
-
136
- ---
137
-
138
- ## What We Actually Need for Scaling
139
-
140
- Let's separate "nice to have" from "essential":
141
-
142
- ### Essential (for 5-10 agents)
143
-
144
- 1. **Quick overview of all agents** → `agent-relay agents` (already proposed)
145
- 2. **Know who's busy vs idle** → Activity state in agents output
146
- 3. **Message history** → `agent-relay history` (already proposed)
147
- 4. **Quick attach** → `agent-relay attach Alice`
148
- 5. **Group messaging** → `->relay:@backend` (already proposed)
149
-
150
- ### Nice to Have (but complex)
151
-
152
- 1. **Real-time TUI dashboard** → Use `watch` instead
153
- 2. **Event streaming** → Poll daemon status instead
154
- 3. **Typing indicators** → Not critical for coordination
155
-
156
- ---
157
-
158
- ## Recommended Simpler Approach
159
-
160
- ### Phase 5 Revised: Minimal Scaling
161
-
162
- ```bash
163
- # 1. Better status command (essential)
164
- $ agent-relay agents
165
- NAME STATUS MESSAGES LAST SEEN
166
- Alice active 12↑ 8↓ now
167
- Bob idle 5↑ 14↓ 30s ago
168
- Charlie offline queued: 3 5m ago
169
-
170
- # 2. Quick attach (essential)
171
- $ agent-relay attach Alice
172
- # Attaches to relay-Alice-* session
173
-
174
- # 3. Team layout (essential)
175
- $ agent-relay team start
176
- # Creates multi-window tmux session
177
- # Use Ctrl+B w to see all, Ctrl+B {n} to switch
178
-
179
- # 4. Live status (nice to have, zero code)
180
- $ watch -n2 agent-relay agents
181
- # Updates every 2 seconds
182
-
183
- # 5. Message history (essential)
184
- $ agent-relay history --last 20
185
- 14:23:01 Alice → Bob: Can you check the API?
186
- 14:23:15 Bob → Alice: On it
187
- ...
188
- ```
189
-
190
- ### Implementation Effort
191
-
192
- | Feature | Complex TUI Approach | Simpler Approach |
193
- |---------|---------------------|------------------|
194
- | TUI dashboard | 2 days + blessed dep | 0 (use `watch`) |
195
- | Event stream | 1 day + protocol change | 0 (poll status) |
196
- | Activity reporting | 1 day | 0.5 day (just in status) |
197
- | Team layout | Already proposed | Same (0.5 day) |
198
- | Better agents cmd | Same | Same (0.5 day) |
199
- | History command | Same | Same (0.5 day) |
200
- | **Total** | **5+ days** | **2 days** |
201
-
202
- ---
203
-
204
- ## Verdict: Skip the TUI, Use tmux
205
-
206
- The TUI dashboard is over-engineered. tmux already provides:
207
- - Multi-window switching (Ctrl+B w)
208
- - Split panes (Ctrl+B %)
209
- - Session persistence
210
- - Window list
211
-
212
- **What we actually need:**
213
-
214
- 1. **`agent-relay agents`** - Show status with activity state
215
- 2. **`agent-relay attach <name>`** - Quick attach helper
216
- 3. **`agent-relay team start`** - Multi-window tmux layout
217
- 4. **`agent-relay history`** - Query past messages
218
-
219
- **What we DON'T need:**
220
-
221
- 1. ❌ blessed TUI dependency
222
- 2. ❌ Event streaming from daemon
223
- 3. ❌ Complex activity reporting protocol
224
- 4. ❌ Real-time typing indicators
225
-
226
- ---
227
-
228
- ## Updated Design Recommendation
229
-
230
- ### Keep from Phase 5:
231
- - Agent groups (`->relay:@backend`)
232
- - Message priority (`!`, `?`)
233
- - `agent-relay agents` command
234
- - `agent-relay history` command
235
-
236
- ### Replace TUI with:
237
- ```bash
238
- # Multi-window tmux session
239
- agent-relay team start # Creates relay-team session
240
- agent-relay team attach # Attach to existing
241
- agent-relay team add Bob # Add agent to running team
242
-
243
- # Quick attach to single agent
244
- agent-relay attach Alice
245
-
246
- # Live status (zero code, just docs)
247
- watch -n2 agent-relay agents
248
- ```
249
-
250
- ### Effort Saved:
251
- - No blessed dependency
252
- - No event streaming protocol
253
- - No TUI code maintenance
254
- - 3+ days of implementation saved
255
-
256
- ---
257
-
258
- ## Behavior Impact Summary
259
-
260
- | Scenario | TUI Approach | Simpler Approach |
261
- |----------|--------------|------------------|
262
- | See all agents | Open TUI, see list | `agent-relay agents` or `Ctrl+B w` |
263
- | Switch to Bob | Press 'a', select Bob | `Ctrl+B 1` or `agent-relay attach Bob` |
264
- | Check if Alice is busy | See "typing..." in TUI | Check status column in agents |
265
- | Send message to group | Same | Same (`->relay:@backend`) |
266
- | View history | Press 'h' in TUI | `agent-relay history` |
267
-
268
- **The simpler approach does everything the TUI does, with 80% less code.**
269
-
270
- ---
271
-
272
- ## Final Recommendation
273
-
274
- 1. **Don't build the TUI dashboard** - It's solving a problem tmux already solves
275
- 2. **Do add `agent-relay team`** - Leverages tmux's native multi-window
276
- 3. **Do improve `agent-relay agents`** - Add activity state, message counts
277
- 4. **Do add `agent-relay history`** - Query past messages
278
- 5. **Document `watch` trick** - Free live updates
279
-
280
- This keeps the simplicity advantage while scaling to 10+ agents.