agent-relay 1.2.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 (540) 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/TESTING.md +278 -0
  96. package/deploy/init-db.sql +5 -0
  97. package/deploy/scripts/setup-fly-workspaces.sh +69 -0
  98. package/deploy/scripts/setup-railway.sh +75 -0
  99. package/deploy/workspace/entrypoint-browser.sh +118 -0
  100. package/deploy/workspace/entrypoint.sh +348 -0
  101. package/deploy/workspace/git-credential-relay +111 -0
  102. package/dist/cli/index.js +218 -1
  103. package/dist/cloud/api/billing.js +30 -9
  104. package/dist/cloud/api/codex-auth-helper.d.ts +15 -0
  105. package/dist/cloud/api/codex-auth-helper.js +100 -0
  106. package/dist/cloud/api/git.js +24 -3
  107. package/dist/cloud/api/onboarding.js +15 -2
  108. package/dist/cloud/api/repos.d.ts +1 -0
  109. package/dist/cloud/api/repos.js +186 -0
  110. package/dist/cloud/api/webhooks.d.ts +1 -0
  111. package/dist/cloud/api/webhooks.js +149 -0
  112. package/dist/cloud/api/workspaces.js +97 -6
  113. package/dist/cloud/billing/plans.js +19 -19
  114. package/dist/cloud/provisioner/index.d.ts +32 -0
  115. package/dist/cloud/provisioner/index.js +362 -21
  116. package/dist/cloud/server.js +6 -1
  117. package/dist/cloud/services/nango.d.ts +60 -0
  118. package/dist/cloud/services/nango.js +153 -0
  119. package/dist/cloud/services/planLimits.d.ts +22 -0
  120. package/dist/cloud/services/planLimits.js +58 -5
  121. package/dist/dashboard/out/404.html +1 -1
  122. package/dist/dashboard/out/_next/static/chunks/699-3b1cd6618a45d259.js +1 -0
  123. package/dist/dashboard/out/_next/static/chunks/766-1f2dd8cb7f766b0b.js +1 -0
  124. package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-3fdfa60e53f2810d.js +1 -0
  125. package/dist/dashboard/out/_next/static/chunks/app/app/page-e6381e5a6e1fbcfd.js +1 -0
  126. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-3538dfe0ffe984b8.js +1 -0
  127. package/dist/dashboard/out/_next/static/chunks/app/history/{page-56a8b4616a90dc43.js → page-abb9ab2d329f56e9.js} +1 -1
  128. package/dist/dashboard/out/_next/static/chunks/app/layout-c0d118c0f92d969c.js +1 -0
  129. package/dist/dashboard/out/_next/static/chunks/app/login/{page-3eac37ea6f5dd153.js → page-c22d080201cbd9fb.js} +1 -1
  130. package/dist/dashboard/out/_next/static/chunks/app/metrics/{page-1081dd190a331a91.js → page-67a3e98d9a43a6ed.js} +1 -1
  131. package/dist/dashboard/out/_next/static/chunks/app/{page-daf87e86f783f980.js → page-77e9c65420a06cfb.js} +1 -1
  132. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-b08ed1c34d14434a.js +1 -0
  133. package/dist/dashboard/out/_next/static/chunks/app/providers/page-e88bc117ef7671c3.js +1 -0
  134. package/dist/dashboard/out/_next/static/chunks/app/signup/{page-fee4ed1709070bcd.js → page-68d34f50baa8ab6b.js} +1 -1
  135. package/dist/dashboard/out/_next/static/chunks/{main-app-5d692157a8eb1fd9.js → main-app-6e8e8d3ef4e0192a.js} +1 -1
  136. package/dist/dashboard/out/_next/static/chunks/{main-97850e03d723ea8c.js → main-ed4e1fb6f29c34cf.js} +1 -1
  137. package/dist/dashboard/out/_next/static/css/7c3ae9e8617d42a5.css +1 -0
  138. package/dist/dashboard/out/app/onboarding.html +1 -0
  139. package/dist/dashboard/out/app/onboarding.txt +7 -0
  140. package/dist/dashboard/out/app.html +1 -1
  141. package/dist/dashboard/out/app.txt +2 -2
  142. package/dist/dashboard/out/connect-repos.html +1 -1
  143. package/dist/dashboard/out/connect-repos.txt +2 -2
  144. package/dist/dashboard/out/history.html +1 -1
  145. package/dist/dashboard/out/history.txt +2 -2
  146. package/dist/dashboard/out/index.html +1 -1
  147. package/dist/dashboard/out/index.txt +2 -2
  148. package/dist/dashboard/out/login.html +2 -2
  149. package/dist/dashboard/out/login.txt +2 -2
  150. package/dist/dashboard/out/metrics.html +1 -1
  151. package/dist/dashboard/out/metrics.txt +2 -2
  152. package/dist/dashboard/out/pricing.html +3 -3
  153. package/dist/dashboard/out/pricing.txt +2 -2
  154. package/dist/dashboard/out/providers.html +1 -1
  155. package/dist/dashboard/out/providers.txt +2 -2
  156. package/dist/dashboard/out/signup.html +2 -2
  157. package/dist/dashboard/out/signup.txt +2 -2
  158. package/package.json +2 -11
  159. package/test-push.txt +1 -0
  160. package/bin/tmux +0 -0
  161. package/dist/bridge/config.d.ts.map +0 -1
  162. package/dist/bridge/config.js.map +0 -1
  163. package/dist/bridge/index.d.ts.map +0 -1
  164. package/dist/bridge/index.js.map +0 -1
  165. package/dist/bridge/multi-project-client.d.ts.map +0 -1
  166. package/dist/bridge/multi-project-client.js.map +0 -1
  167. package/dist/bridge/shadow-cli.d.ts.map +0 -1
  168. package/dist/bridge/shadow-cli.js.map +0 -1
  169. package/dist/bridge/shadow-config.d.ts.map +0 -1
  170. package/dist/bridge/shadow-config.js.map +0 -1
  171. package/dist/bridge/spawner.d.ts.map +0 -1
  172. package/dist/bridge/spawner.js.map +0 -1
  173. package/dist/bridge/teams-config.d.ts.map +0 -1
  174. package/dist/bridge/teams-config.js.map +0 -1
  175. package/dist/bridge/types.d.ts.map +0 -1
  176. package/dist/bridge/types.js.map +0 -1
  177. package/dist/bridge/utils.d.ts.map +0 -1
  178. package/dist/bridge/utils.js.map +0 -1
  179. package/dist/cli/index.d.ts.map +0 -1
  180. package/dist/cli/index.js.map +0 -1
  181. package/dist/cloud/api/auth.d.ts.map +0 -1
  182. package/dist/cloud/api/auth.js.map +0 -1
  183. package/dist/cloud/api/billing.d.ts.map +0 -1
  184. package/dist/cloud/api/billing.js.map +0 -1
  185. package/dist/cloud/api/cli-pty-runner.d.ts.map +0 -1
  186. package/dist/cloud/api/cli-pty-runner.js.map +0 -1
  187. package/dist/cloud/api/coordinators.d.ts.map +0 -1
  188. package/dist/cloud/api/coordinators.js.map +0 -1
  189. package/dist/cloud/api/daemons.d.ts.map +0 -1
  190. package/dist/cloud/api/daemons.js.map +0 -1
  191. package/dist/cloud/api/generic-webhooks.d.ts.map +0 -1
  192. package/dist/cloud/api/generic-webhooks.js.map +0 -1
  193. package/dist/cloud/api/git.d.ts.map +0 -1
  194. package/dist/cloud/api/git.js.map +0 -1
  195. package/dist/cloud/api/github-app.d.ts.map +0 -1
  196. package/dist/cloud/api/github-app.js.map +0 -1
  197. package/dist/cloud/api/middleware/planLimits.d.ts.map +0 -1
  198. package/dist/cloud/api/middleware/planLimits.js.map +0 -1
  199. package/dist/cloud/api/monitoring.d.ts.map +0 -1
  200. package/dist/cloud/api/monitoring.js.map +0 -1
  201. package/dist/cloud/api/nango-auth.d.ts.map +0 -1
  202. package/dist/cloud/api/nango-auth.js.map +0 -1
  203. package/dist/cloud/api/onboarding.d.ts.map +0 -1
  204. package/dist/cloud/api/onboarding.js.map +0 -1
  205. package/dist/cloud/api/policy.d.ts.map +0 -1
  206. package/dist/cloud/api/policy.js.map +0 -1
  207. package/dist/cloud/api/providers.d.ts.map +0 -1
  208. package/dist/cloud/api/providers.js.map +0 -1
  209. package/dist/cloud/api/repos.d.ts.map +0 -1
  210. package/dist/cloud/api/repos.js.map +0 -1
  211. package/dist/cloud/api/teams.d.ts.map +0 -1
  212. package/dist/cloud/api/teams.js.map +0 -1
  213. package/dist/cloud/api/test-helpers.d.ts.map +0 -1
  214. package/dist/cloud/api/test-helpers.js.map +0 -1
  215. package/dist/cloud/api/usage.d.ts.map +0 -1
  216. package/dist/cloud/api/usage.js.map +0 -1
  217. package/dist/cloud/api/webhooks.d.ts.map +0 -1
  218. package/dist/cloud/api/webhooks.js.map +0 -1
  219. package/dist/cloud/api/workspaces.d.ts.map +0 -1
  220. package/dist/cloud/api/workspaces.js.map +0 -1
  221. package/dist/cloud/billing/index.d.ts.map +0 -1
  222. package/dist/cloud/billing/index.js.map +0 -1
  223. package/dist/cloud/billing/plans.d.ts.map +0 -1
  224. package/dist/cloud/billing/plans.js.map +0 -1
  225. package/dist/cloud/billing/service.d.ts.map +0 -1
  226. package/dist/cloud/billing/service.js.map +0 -1
  227. package/dist/cloud/billing/types.d.ts.map +0 -1
  228. package/dist/cloud/billing/types.js.map +0 -1
  229. package/dist/cloud/config.d.ts.map +0 -1
  230. package/dist/cloud/config.js.map +0 -1
  231. package/dist/cloud/db/drizzle.d.ts.map +0 -1
  232. package/dist/cloud/db/drizzle.js.map +0 -1
  233. package/dist/cloud/db/index.d.ts.map +0 -1
  234. package/dist/cloud/db/index.js.map +0 -1
  235. package/dist/cloud/db/schema.d.ts.map +0 -1
  236. package/dist/cloud/db/schema.js.map +0 -1
  237. package/dist/cloud/index.d.ts.map +0 -1
  238. package/dist/cloud/index.js.map +0 -1
  239. package/dist/cloud/provisioner/index.d.ts.map +0 -1
  240. package/dist/cloud/provisioner/index.js.map +0 -1
  241. package/dist/cloud/server.d.ts.map +0 -1
  242. package/dist/cloud/server.js.map +0 -1
  243. package/dist/cloud/services/auto-scaler.d.ts.map +0 -1
  244. package/dist/cloud/services/auto-scaler.js.map +0 -1
  245. package/dist/cloud/services/capacity-manager.d.ts.map +0 -1
  246. package/dist/cloud/services/capacity-manager.js.map +0 -1
  247. package/dist/cloud/services/ci-agent-spawner.d.ts.map +0 -1
  248. package/dist/cloud/services/ci-agent-spawner.js.map +0 -1
  249. package/dist/cloud/services/coordinator.d.ts.map +0 -1
  250. package/dist/cloud/services/coordinator.js.map +0 -1
  251. package/dist/cloud/services/index.d.ts.map +0 -1
  252. package/dist/cloud/services/index.js.map +0 -1
  253. package/dist/cloud/services/mention-handler.d.ts.map +0 -1
  254. package/dist/cloud/services/mention-handler.js.map +0 -1
  255. package/dist/cloud/services/nango.d.ts.map +0 -1
  256. package/dist/cloud/services/nango.js.map +0 -1
  257. package/dist/cloud/services/persistence.d.ts.map +0 -1
  258. package/dist/cloud/services/persistence.js.map +0 -1
  259. package/dist/cloud/services/planLimits.d.ts.map +0 -1
  260. package/dist/cloud/services/planLimits.js.map +0 -1
  261. package/dist/cloud/services/scaling-orchestrator.d.ts.map +0 -1
  262. package/dist/cloud/services/scaling-orchestrator.js.map +0 -1
  263. package/dist/cloud/services/scaling-policy.d.ts.map +0 -1
  264. package/dist/cloud/services/scaling-policy.js.map +0 -1
  265. package/dist/cloud/vault/index.d.ts.map +0 -1
  266. package/dist/cloud/vault/index.js.map +0 -1
  267. package/dist/cloud/webhooks/index.d.ts.map +0 -1
  268. package/dist/cloud/webhooks/index.js.map +0 -1
  269. package/dist/cloud/webhooks/parsers/github.d.ts.map +0 -1
  270. package/dist/cloud/webhooks/parsers/github.js.map +0 -1
  271. package/dist/cloud/webhooks/parsers/index.d.ts.map +0 -1
  272. package/dist/cloud/webhooks/parsers/index.js.map +0 -1
  273. package/dist/cloud/webhooks/parsers/linear.d.ts.map +0 -1
  274. package/dist/cloud/webhooks/parsers/linear.js.map +0 -1
  275. package/dist/cloud/webhooks/parsers/slack.d.ts.map +0 -1
  276. package/dist/cloud/webhooks/parsers/slack.js.map +0 -1
  277. package/dist/cloud/webhooks/responders/github.d.ts.map +0 -1
  278. package/dist/cloud/webhooks/responders/github.js.map +0 -1
  279. package/dist/cloud/webhooks/responders/index.d.ts.map +0 -1
  280. package/dist/cloud/webhooks/responders/index.js.map +0 -1
  281. package/dist/cloud/webhooks/responders/linear.d.ts.map +0 -1
  282. package/dist/cloud/webhooks/responders/linear.js.map +0 -1
  283. package/dist/cloud/webhooks/responders/slack.d.ts.map +0 -1
  284. package/dist/cloud/webhooks/responders/slack.js.map +0 -1
  285. package/dist/cloud/webhooks/router.d.ts.map +0 -1
  286. package/dist/cloud/webhooks/router.js.map +0 -1
  287. package/dist/cloud/webhooks/rules-engine.d.ts.map +0 -1
  288. package/dist/cloud/webhooks/rules-engine.js.map +0 -1
  289. package/dist/cloud/webhooks/types.d.ts.map +0 -1
  290. package/dist/cloud/webhooks/types.js.map +0 -1
  291. package/dist/continuity/formatter.d.ts.map +0 -1
  292. package/dist/continuity/formatter.js.map +0 -1
  293. package/dist/continuity/handoff-store.d.ts.map +0 -1
  294. package/dist/continuity/handoff-store.js.map +0 -1
  295. package/dist/continuity/index.d.ts.map +0 -1
  296. package/dist/continuity/index.js.map +0 -1
  297. package/dist/continuity/ledger-store.d.ts.map +0 -1
  298. package/dist/continuity/ledger-store.js.map +0 -1
  299. package/dist/continuity/manager.d.ts.map +0 -1
  300. package/dist/continuity/manager.js.map +0 -1
  301. package/dist/continuity/parser.d.ts.map +0 -1
  302. package/dist/continuity/parser.js.map +0 -1
  303. package/dist/continuity/types.d.ts.map +0 -1
  304. package/dist/continuity/types.js.map +0 -1
  305. package/dist/daemon/agent-manager.d.ts.map +0 -1
  306. package/dist/daemon/agent-manager.js.map +0 -1
  307. package/dist/daemon/agent-registry.d.ts.map +0 -1
  308. package/dist/daemon/agent-registry.js.map +0 -1
  309. package/dist/daemon/api.d.ts.map +0 -1
  310. package/dist/daemon/api.js.map +0 -1
  311. package/dist/daemon/auth.d.ts.map +0 -1
  312. package/dist/daemon/auth.js.map +0 -1
  313. package/dist/daemon/cli-auth.d.ts.map +0 -1
  314. package/dist/daemon/cli-auth.js.map +0 -1
  315. package/dist/daemon/cloud-sync.d.ts.map +0 -1
  316. package/dist/daemon/cloud-sync.js.map +0 -1
  317. package/dist/daemon/connection.d.ts.map +0 -1
  318. package/dist/daemon/connection.js.map +0 -1
  319. package/dist/daemon/index.d.ts.map +0 -1
  320. package/dist/daemon/index.js.map +0 -1
  321. package/dist/daemon/orchestrator.d.ts.map +0 -1
  322. package/dist/daemon/orchestrator.js.map +0 -1
  323. package/dist/daemon/registry.d.ts.map +0 -1
  324. package/dist/daemon/registry.js.map +0 -1
  325. package/dist/daemon/router.d.ts.map +0 -1
  326. package/dist/daemon/router.js.map +0 -1
  327. package/dist/daemon/server.d.ts.map +0 -1
  328. package/dist/daemon/server.js.map +0 -1
  329. package/dist/daemon/services/browser-testing.d.ts.map +0 -1
  330. package/dist/daemon/services/browser-testing.js.map +0 -1
  331. package/dist/daemon/services/container-spawner.d.ts.map +0 -1
  332. package/dist/daemon/services/container-spawner.js.map +0 -1
  333. package/dist/daemon/types.d.ts.map +0 -1
  334. package/dist/daemon/types.js.map +0 -1
  335. package/dist/daemon/workspace-manager.d.ts.map +0 -1
  336. package/dist/daemon/workspace-manager.js.map +0 -1
  337. package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +0 -1
  338. package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +0 -1
  339. package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +0 -1
  340. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-dc2e3a1a22478efc.js +0 -1
  341. package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +0 -1
  342. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-4d72d5a5d8a9b618.js +0 -1
  343. package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +0 -1
  344. package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +0 -1
  345. package/dist/dashboard-server/metrics.d.ts.map +0 -1
  346. package/dist/dashboard-server/metrics.js.map +0 -1
  347. package/dist/dashboard-server/needs-attention.d.ts.map +0 -1
  348. package/dist/dashboard-server/needs-attention.js.map +0 -1
  349. package/dist/dashboard-server/server.d.ts.map +0 -1
  350. package/dist/dashboard-server/server.js.map +0 -1
  351. package/dist/dashboard-server/start.d.ts.map +0 -1
  352. package/dist/dashboard-server/start.js.map +0 -1
  353. package/dist/hooks/emitter.d.ts.map +0 -1
  354. package/dist/hooks/emitter.js.map +0 -1
  355. package/dist/hooks/inbox-check/hook.d.ts.map +0 -1
  356. package/dist/hooks/inbox-check/hook.js.map +0 -1
  357. package/dist/hooks/inbox-check/index.d.ts.map +0 -1
  358. package/dist/hooks/inbox-check/index.js.map +0 -1
  359. package/dist/hooks/inbox-check/types.d.ts.map +0 -1
  360. package/dist/hooks/inbox-check/types.js.map +0 -1
  361. package/dist/hooks/inbox-check/utils.d.ts.map +0 -1
  362. package/dist/hooks/inbox-check/utils.js.map +0 -1
  363. package/dist/hooks/index.d.ts.map +0 -1
  364. package/dist/hooks/index.js.map +0 -1
  365. package/dist/hooks/registry.d.ts.map +0 -1
  366. package/dist/hooks/registry.js.map +0 -1
  367. package/dist/hooks/trajectory-hooks.d.ts.map +0 -1
  368. package/dist/hooks/trajectory-hooks.js.map +0 -1
  369. package/dist/hooks/types.d.ts.map +0 -1
  370. package/dist/hooks/types.js.map +0 -1
  371. package/dist/index.d.ts.map +0 -1
  372. package/dist/index.js.map +0 -1
  373. package/dist/memory/adapters/index.d.ts.map +0 -1
  374. package/dist/memory/adapters/index.js.map +0 -1
  375. package/dist/memory/adapters/inmemory.d.ts.map +0 -1
  376. package/dist/memory/adapters/inmemory.js.map +0 -1
  377. package/dist/memory/adapters/supermemory.d.ts.map +0 -1
  378. package/dist/memory/adapters/supermemory.js.map +0 -1
  379. package/dist/memory/factory.d.ts.map +0 -1
  380. package/dist/memory/factory.js.map +0 -1
  381. package/dist/memory/index.d.ts.map +0 -1
  382. package/dist/memory/index.js.map +0 -1
  383. package/dist/memory/memory-hooks.d.ts.map +0 -1
  384. package/dist/memory/memory-hooks.js.map +0 -1
  385. package/dist/memory/service.d.ts.map +0 -1
  386. package/dist/memory/service.js.map +0 -1
  387. package/dist/memory/types.d.ts.map +0 -1
  388. package/dist/memory/types.js.map +0 -1
  389. package/dist/policy/agent-policy.d.ts.map +0 -1
  390. package/dist/policy/agent-policy.js.map +0 -1
  391. package/dist/policy/cloud-policy-fetcher.d.ts.map +0 -1
  392. package/dist/policy/cloud-policy-fetcher.js.map +0 -1
  393. package/dist/protocol/framing.d.ts.map +0 -1
  394. package/dist/protocol/framing.js.map +0 -1
  395. package/dist/protocol/index.d.ts.map +0 -1
  396. package/dist/protocol/index.js.map +0 -1
  397. package/dist/protocol/types.d.ts.map +0 -1
  398. package/dist/protocol/types.js.map +0 -1
  399. package/dist/resiliency/context-persistence.d.ts.map +0 -1
  400. package/dist/resiliency/context-persistence.js.map +0 -1
  401. package/dist/resiliency/crash-insights.d.ts.map +0 -1
  402. package/dist/resiliency/crash-insights.js.map +0 -1
  403. package/dist/resiliency/gossip-health.d.ts.map +0 -1
  404. package/dist/resiliency/gossip-health.js.map +0 -1
  405. package/dist/resiliency/health-monitor.d.ts.map +0 -1
  406. package/dist/resiliency/health-monitor.js.map +0 -1
  407. package/dist/resiliency/index.d.ts.map +0 -1
  408. package/dist/resiliency/index.js.map +0 -1
  409. package/dist/resiliency/leader-watchdog.d.ts.map +0 -1
  410. package/dist/resiliency/leader-watchdog.js.map +0 -1
  411. package/dist/resiliency/logger.d.ts.map +0 -1
  412. package/dist/resiliency/logger.js.map +0 -1
  413. package/dist/resiliency/memory-monitor.d.ts.map +0 -1
  414. package/dist/resiliency/memory-monitor.js.map +0 -1
  415. package/dist/resiliency/metrics.d.ts.map +0 -1
  416. package/dist/resiliency/metrics.js.map +0 -1
  417. package/dist/resiliency/provider-context.d.ts.map +0 -1
  418. package/dist/resiliency/provider-context.js.map +0 -1
  419. package/dist/resiliency/stateless-lead.d.ts.map +0 -1
  420. package/dist/resiliency/stateless-lead.js.map +0 -1
  421. package/dist/resiliency/supervisor.d.ts.map +0 -1
  422. package/dist/resiliency/supervisor.js.map +0 -1
  423. package/dist/shared/cli-auth-config.d.ts.map +0 -1
  424. package/dist/shared/cli-auth-config.js.map +0 -1
  425. package/dist/state/agent-state.d.ts.map +0 -1
  426. package/dist/state/agent-state.js.map +0 -1
  427. package/dist/storage/adapter.d.ts.map +0 -1
  428. package/dist/storage/adapter.js.map +0 -1
  429. package/dist/storage/sqlite-adapter.d.ts.map +0 -1
  430. package/dist/storage/sqlite-adapter.js.map +0 -1
  431. package/dist/trajectory/config.d.ts.map +0 -1
  432. package/dist/trajectory/config.js.map +0 -1
  433. package/dist/trajectory/index.d.ts.map +0 -1
  434. package/dist/trajectory/index.js.map +0 -1
  435. package/dist/trajectory/integration.d.ts.map +0 -1
  436. package/dist/trajectory/integration.js.map +0 -1
  437. package/dist/utils/agent-config.d.ts.map +0 -1
  438. package/dist/utils/agent-config.js.map +0 -1
  439. package/dist/utils/command-resolver.d.ts.map +0 -1
  440. package/dist/utils/command-resolver.js.map +0 -1
  441. package/dist/utils/index.d.ts.map +0 -1
  442. package/dist/utils/index.js.map +0 -1
  443. package/dist/utils/logger.d.ts.map +0 -1
  444. package/dist/utils/logger.js.map +0 -1
  445. package/dist/utils/name-generator.d.ts.map +0 -1
  446. package/dist/utils/name-generator.js.map +0 -1
  447. package/dist/utils/project-namespace.d.ts.map +0 -1
  448. package/dist/utils/project-namespace.js.map +0 -1
  449. package/dist/utils/tmux-resolver.d.ts.map +0 -1
  450. package/dist/utils/tmux-resolver.js.map +0 -1
  451. package/dist/utils/update-checker.d.ts.map +0 -1
  452. package/dist/utils/update-checker.js.map +0 -1
  453. package/dist/wrapper/client.d.ts.map +0 -1
  454. package/dist/wrapper/client.js.map +0 -1
  455. package/dist/wrapper/inbox.d.ts.map +0 -1
  456. package/dist/wrapper/inbox.js.map +0 -1
  457. package/dist/wrapper/index.d.ts.map +0 -1
  458. package/dist/wrapper/index.js.map +0 -1
  459. package/dist/wrapper/parser.d.ts.map +0 -1
  460. package/dist/wrapper/parser.js.map +0 -1
  461. package/dist/wrapper/pty-wrapper.d.ts.map +0 -1
  462. package/dist/wrapper/pty-wrapper.js.map +0 -1
  463. package/dist/wrapper/shared.d.ts.map +0 -1
  464. package/dist/wrapper/shared.js.map +0 -1
  465. package/dist/wrapper/tmux-wrapper.d.ts.map +0 -1
  466. package/dist/wrapper/tmux-wrapper.js.map +0 -1
  467. package/docs/AGENTS.md +0 -513
  468. package/docs/ARCHITECTURE_DECISIONS.md +0 -175
  469. package/docs/CLOUD-ARCHITECTURE.md +0 -804
  470. package/docs/CLOUD-ONBOARDING-DESIGN.md +0 -1983
  471. package/docs/CONTRIBUTING.md +0 -151
  472. package/docs/HOOKS_API.md +0 -394
  473. package/docs/INTEGRATION-GUIDE.md +0 -926
  474. package/docs/PROTOCOL.md +0 -325
  475. package/docs/WRAPPER_EVENTS.md +0 -358
  476. package/docs/agent-policy-snippet.md +0 -40
  477. package/docs/agent-relay-protocol.md +0 -238
  478. package/docs/agent-relay-snippet.md +0 -174
  479. package/docs/archive/CHANGELOG.md +0 -11
  480. package/docs/archive/CLI-SIMPLIFICATION-COMPLETE.md +0 -48
  481. package/docs/archive/DESIGN_BRIDGE_STAFFING.md +0 -878
  482. package/docs/archive/DESIGN_V2.md +0 -1079
  483. package/docs/archive/EXECUTIVE_SUMMARY.md +0 -358
  484. package/docs/archive/MONETIZATION.md +0 -1679
  485. package/docs/archive/PROPOSAL-trajectories.md +0 -1582
  486. package/docs/archive/ROADMAP.md +0 -329
  487. package/docs/archive/SCALING_ANALYSIS.md +0 -280
  488. package/docs/archive/TESTING_PRESENCE_FEATURES.md +0 -327
  489. package/docs/archive/TMUX_IMPLEMENTATION_NOTES.md +0 -364
  490. package/docs/archive/TMUX_IMPROVEMENTS.md +0 -968
  491. package/docs/archive/dashboard-v2-plan.md +0 -179
  492. package/docs/archive/removable-code-analysis.md +0 -24
  493. package/docs/competitive/GASTOWN.md +0 -451
  494. package/docs/competitive/MCP_AGENT_MAIL.md +0 -389
  495. package/docs/competitive/OVERVIEW.md +0 -898
  496. package/docs/competitive/README.md +0 -34
  497. package/docs/competitive/TMUX_ORCHESTRATOR.md +0 -605
  498. package/docs/dashboard.png +0 -0
  499. package/docs/design/ci-failure-webhooks.md +0 -812
  500. package/docs/design/comprehensive-integrations.md +0 -238
  501. package/docs/design/e2b-sandbox-integration.md +0 -504
  502. package/docs/design/github-app-permissions.md +0 -264
  503. package/docs/guides/CLOUD.md +0 -236
  504. package/docs/guides/LOCAL.md +0 -535
  505. package/docs/guides/SELF-HOSTED.md +0 -494
  506. package/docs/local-testing.md +0 -428
  507. package/docs/proposals/continuous-claude-integration.md +0 -622
  508. package/docs/proposals/custom-commands.md +0 -368
  509. package/docs/proposals/shadow-as-subagent.md +0 -765
  510. package/docs/proposals/slack-bot-integration.md +0 -1457
  511. package/docs/tasks/global-skills-system.tasks.md +0 -230
  512. package/docs/tasks/webhook-integrations.tasks.md +0 -184
  513. package/docs/tasks/workspace-capabilities.tasks.md +0 -121
  514. package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +0 -366
  515. package/scripts/cloud-setup.sh +0 -96
  516. package/scripts/dev/PUBLIC_RELEASE_PLAN.md +0 -88
  517. package/scripts/dev/dev-team-setup.sh +0 -431
  518. package/scripts/e2e-test.sh +0 -119
  519. package/scripts/games/game-protocol.md +0 -79
  520. package/scripts/games/hearts-setup.sh +0 -264
  521. package/scripts/manual-qa.sh +0 -293
  522. package/scripts/run-cloud-qa.sh +0 -220
  523. package/scripts/test-cli-auth/Dockerfile +0 -44
  524. package/scripts/test-cli-auth/Dockerfile.real +0 -79
  525. package/scripts/test-cli-auth/README.md +0 -286
  526. package/scripts/test-cli-auth/ci-test-real-clis.ts +0 -251
  527. package/scripts/test-cli-auth/ci-test-runner.ts +0 -263
  528. package/scripts/test-cli-auth/mock-cli.sh +0 -147
  529. package/scripts/test-cli-auth/package.json +0 -14
  530. package/scripts/test-cli-auth/test-oauth-flow.ts +0 -220
  531. package/scripts/test-pty-input-auto.js +0 -222
  532. package/scripts/test-pty-input.js +0 -150
  533. package/scripts/tictactoe-setup.sh +0 -181
  534. /package/dist/dashboard/out/_next/static/chunks/{117-b100311aff8d5c61.js → 117-f7b8ab0809342e77.js} +0 -0
  535. /package/dist/dashboard/out/_next/static/chunks/{648-a13d3c2b1be45466.js → 648-5cc6e1921389a58a.js} +0 -0
  536. /package/dist/dashboard/out/_next/static/chunks/{724-73c1ee5f60abe860.js → 724-2dae7627550ab88f.js} +0 -0
  537. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-a4973f3e3c82fb67.js → page-53b8a69f76db17d0.js} +0 -0
  538. /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-bf46c09eb57e019c.js → fd9d1056-609918ca7b6280bb.js} +0 -0
  539. /package/dist/dashboard/out/_next/static/{H5aWG0udPB4iOUIl_gytz → wPgKJtcOmTFLpUncDg16A}/_buildManifest.js +0 -0
  540. /package/dist/dashboard/out/_next/static/{H5aWG0udPB4iOUIl_gytz → wPgKJtcOmTFLpUncDg16A}/_ssgManifest.js +0 -0
@@ -1,329 +0,0 @@
1
- # Agent Relay Roadmap
2
-
3
- This roadmap tracks planned improvements, bug fixes, and new features for agent-relay. Issues are tracked in [Beads](https://github.com/steveyegge/beads).
4
-
5
- **Last Updated:** 2025-12-20
6
-
7
- ---
8
-
9
- ## Overview
10
-
11
- | Category | Open | In Progress |
12
- |----------|------|-------------|
13
- | Bugs | 4 | 0 |
14
- | Features | 7 | 1 |
15
- | Tasks | 7 | 1 |
16
- | **Total** | **18** | **2** |
17
-
18
- ---
19
-
20
- ## Bugs
21
-
22
- ### `agent-relay-ahe` Session resume not implemented
23
- **Status:** Open | **Priority:** P2
24
-
25
- Session resume tokens are received but not persisted or validated. The server always responds with `RESUME_TOO_OLD`, breaking the resume capability advertised in the protocol.
26
-
27
- **Location:** `src/daemon/connection.ts:140-143`
28
-
29
- **Required Work:**
30
- - Implement token persistence
31
- - Add session state recovery
32
- - Validate resume tokens on reconnect
33
-
34
- ---
35
-
36
- ### `agent-relay-5af` Hook doesn't integrate with daemon-based messaging
37
- **Status:** Open | **Priority:** P2
38
-
39
- The inbox-check hook reads from file-based inbox but the daemon uses SQLite. When using daemon mode, the hook won't see messages.
40
-
41
- **Location:** `src/hooks/inbox-check/hook.ts`
42
-
43
- **Required Work:**
44
- - Query daemon storage from hook, OR
45
- - Ensure inbox files are written in daemon mode too
46
-
47
- ---
48
-
49
- ### `agent-relay-6rz` Message injection timing can cause race conditions
50
- **Status:** Open | **Priority:** P2
51
-
52
- Injection waits for 'idle' (1.5s since last output) but this is fragile. If agent produces output during injection, messages could interleave.
53
-
54
- **Location:** `src/wrapper/tmux-wrapper.ts:564-569`
55
-
56
- **Required Work:**
57
- - Input buffer detection
58
- - Bracketed paste mode support
59
- - Agent-specific injection strategies
60
-
61
- ---
62
-
63
- ### `agent-relay-8nx` SIGINT/SIGTERM handlers don't await cleanup
64
- **Status:** Open | **Priority:** P2
65
-
66
- SIGINT handlers call `stop()` but `process.exit(0)` runs immediately. The `stop()` is async but not awaited, potentially leaving socket files or incomplete shutdown.
67
-
68
- **Location:** `src/cli/index.ts:74-77`
69
-
70
- **Required Work:**
71
- - Await async cleanup before exit
72
- - Ensure socket files are removed
73
- - Add timeout for cleanup operations
74
-
75
- ---
76
-
77
- ## Features
78
-
79
- ### `agent-relay-ghy` Team config: auto-spawn agents from teams.json
80
- **Status:** In Progress | **Priority:** P2
81
-
82
- When a project has a `teams.json` config file, `agent-relay up` should either auto-spawn terminal sessions for each agent or validate names against the config.
83
-
84
- **teams.json format:**
85
- ```json
86
- {
87
- "team": "my-project",
88
- "agents": [
89
- {"name": "Coordinator", "cli": "claude", "role": "coordinator"},
90
- {"name": "LeadDev", "cli": "claude", "role": "developer"}
91
- ],
92
- "autoSpawn": false
93
- }
94
- ```
95
-
96
- **Commands:**
97
- - `agent-relay up --spawn` - force spawn all agents
98
- - `agent-relay up --no-spawn` - just start daemon, manual agent starts
99
-
100
- ---
101
-
102
- ### `agent-relay-2z1` ACK messages not used for reliability
103
- **Status:** Open | **Priority:** P2
104
-
105
- ACK messages are accepted but not processed. The protocol supports reliable delivery with ACK/NACK but it's not implemented.
106
-
107
- **Location:** `src/daemon/connection.ts:114-116`
108
-
109
- **Required Work:**
110
- - Track unACKed messages
111
- - Implement retry logic
112
- - Add configurable TTL for messages
113
-
114
- ---
115
-
116
- ### `agent-relay-go9` PostgreSQL storage adapter
117
- **Status:** Open | **Priority:** P2
118
-
119
- PostgreSQL is listed as a storage option but throws "not yet implemented". For production multi-node deployments, SQLite won't scale.
120
-
121
- **Location:** `src/storage/adapter.ts:152-162`
122
-
123
- **Required Work:**
124
- - Implement PostgreSQL adapter
125
- - Add connection pooling
126
- - Support distributed storage for multi-node setups
127
-
128
- ---
129
-
130
- ### `agent-relay-sio` Graceful degradation when daemon unavailable
131
- **Status:** Open | **Priority:** P2
132
-
133
- Daemon connection failures are silently caught with no recovery mechanism.
134
-
135
- **Location:** `src/wrapper/tmux-wrapper.ts:195-197`
136
-
137
- **Required Work:**
138
- - Periodic reconnection attempts
139
- - Queue messages for later delivery
140
- - Visual indicator in terminal showing connection status
141
-
142
- ---
143
-
144
- ### `agent-relay-dyr` Authentication between agents
145
- **Status:** Open | **Priority:** P2
146
-
147
- Any process can connect to the daemon socket and impersonate any agent name. No authentication exists.
148
-
149
- **Required Work:**
150
- - Per-agent tokens/secrets
151
- - Socket permission checks
152
- - Optional TLS for non-localhost deployments
153
-
154
- ---
155
-
156
- ### `agent-relay-0bn` Dashboard real-time connection status
157
- **Status:** Open | **Priority:** P2
158
-
159
- Dashboard shows agent status from messages but doesn't show live connection status (connected/disconnected).
160
-
161
- **Required Work:**
162
- - Show online/offline indicators
163
- - Display last-seen timestamps
164
- - Real-time connection state from daemon
165
-
166
- ---
167
-
168
- ### `agent-relay-52d` Metrics/observability for daemon
169
- **Status:** Open | **Priority:** P2
170
-
171
- No way to monitor daemon health, message throughput, or agent activity.
172
-
173
- **Required Work:**
174
- - `/metrics` endpoint for Prometheus
175
- - Message count/rate stats
176
- - Connection lifecycle events
177
- - Error rate tracking
178
-
179
- ---
180
-
181
- ### `agent-relay-8ff` Agent list command in CLI
182
- **Status:** Open | **Priority:** P2
183
-
184
- CLI has `up/down/status/read` but no way to list connected agents or see message history from command line.
185
-
186
- **Required Work:**
187
- - `agent-relay agents` - list connected agents
188
- - `agent-relay history` - show recent messages
189
- - `agent-relay send <agent> <msg>` - send from CLI
190
-
191
- ---
192
-
193
- ## Tasks
194
-
195
- ### `agent-relay-8z1` Add CLI tests for new command structure
196
- **Status:** In Progress | **Priority:** P2
197
-
198
- Add comprehensive tests for CLI commands after command consolidation.
199
-
200
- **Blocked by:** Command consolidation tasks (closed)
201
-
202
- ---
203
-
204
- ### `agent-relay-hks` Increase test coverage
205
- **Status:** Open | **Priority:** P2
206
-
207
- Current coverage is only **39% overall**. Key files with 0% coverage:
208
- - `daemon/server.ts`
209
- - `dashboard/server.ts`
210
- - `cli/index.ts`
211
- - `wrapper/client.ts`
212
- - `wrapper/tmux-wrapper.ts`
213
- - `utils/project-namespace.ts`
214
-
215
- **Required Work:**
216
- - Integration tests for daemon startup/shutdown lifecycle
217
- - CLI command tests
218
- - End-to-end message flow tests
219
-
220
- ---
221
-
222
- ### `agent-relay-v57` Message expiration/cleanup in SQLite
223
- **Status:** Open | **Priority:** P2
224
-
225
- SQLite adapter has no TTL or cleanup mechanism for old messages. Database will grow unbounded over time.
226
-
227
- **Location:** `src/storage/sqlite-adapter.ts`
228
-
229
- **Required Work:**
230
- - Configurable message retention period
231
- - Automatic cleanup job
232
- - Leverage existing `ts` column index
233
-
234
- ---
235
-
236
- ### `agent-relay-kzw` Project namespace uses /tmp
237
- **Status:** Open | **Priority:** P2
238
-
239
- `BASE_DIR` is `/tmp/agent-relay`. On macOS/Linux, `/tmp` is cleared on reboot, losing all message history.
240
-
241
- **Location:** `src/utils/project-namespace.ts:13`
242
-
243
- **Required Work:**
244
- - XDG_DATA_HOME fallback
245
- - `~/.agent-relay` option
246
- - Per-project `.agent-relay` folder
247
-
248
- ---
249
-
250
- ### `agent-relay-37i` Message deduplication memory limits
251
- **Status:** Open | **Priority:** P2
252
-
253
- `sentMessageHashes` is a Set that grows unbounded. For long-running sessions, this could cause memory issues.
254
-
255
- **Location:** `src/wrapper/tmux-wrapper.ts:65`
256
-
257
- **Required Work:**
258
- - Max size with LRU eviction
259
- - Time-based expiration
260
- - Bloom filter alternative for memory efficiency
261
-
262
- ---
263
-
264
- ### `agent-relay-5g0` Heartbeat timeout configuration
265
- **Status:** Open | **Priority:** P2
266
-
267
- Heartbeat timeout is hardcoded as 2x `heartbeatMs`. Heartbeat failures immediately kill the connection.
268
-
269
- **Location:** `src/daemon/connection.ts:196`
270
-
271
- **Required Work:**
272
- - Independent timeout configuration
273
- - Exponential backoff for transient issues
274
-
275
- ---
276
-
277
- ### `agent-relay-7bp` Memory storage adapter limits
278
- **Status:** Open | **Priority:** P2
279
-
280
- MemoryStorageAdapter hard-codes 1000 message limit.
281
-
282
- **Location:** `src/storage/adapter.ts:60-63`
283
-
284
- **Required Work:**
285
- - Configurable limit
286
- - LRU eviction instead of slice
287
-
288
- ---
289
-
290
- ### `agent-relay-47z` Express 5 compatibility verification
291
- **Status:** Open | **Priority:** P2
292
-
293
- `package.json` uses `express@5.2.1` which has breaking changes from Express 4.
294
-
295
- **Required Work:**
296
- - Verify error handling middleware patterns
297
- - Check router behavior
298
- - Validate body parsing (express.json vs body-parser)
299
-
300
- ---
301
-
302
- ## Recently Completed
303
-
304
- ### `agent-relay-ucw` Dashboard: multi-project navigation or dynamic port allocation
305
- **Status:** Closed | **Completed:** 2025-12-20
306
-
307
- Fixed dashboard to warn when requested port is busy and return the actual port. CLI now awaits and logs the real URL.
308
-
309
- ---
310
-
311
- ## Priority Legend
312
-
313
- | Priority | Meaning |
314
- |----------|---------|
315
- | P0 | Critical - blocking users |
316
- | P1 | High - significant impact |
317
- | P2 | Medium - normal priority |
318
- | P3 | Low - nice to have |
319
-
320
- ---
321
-
322
- ## Contributing
323
-
324
- To work on an issue:
325
- 1. Run `bd ready` to see available work
326
- 2. Claim with `bd update <id> --status=in_progress`
327
- 3. Complete work and close with `bd close <id>`
328
-
329
- See [CLAUDE.md](./CLAUDE.md) for development workflow details.
@@ -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.