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,366 +0,0 @@
1
- # Resiliency Features Test Plan
2
-
3
- **Date:** 2026-01-01
4
- **Features:** P0-P5 Leader Coordination and Failover
5
- **Branch:** `claude/add-continuous-claude-logic-kba3r`
6
-
7
- ---
8
-
9
- ## Prerequisites
10
-
11
- 1. Build the project: `npm run build`
12
- 2. Have at least 2-3 terminal windows ready
13
- 3. Ensure `.beads/` directory exists with `issues.jsonl`
14
-
15
- ---
16
-
17
- ## P0: Stateless Lead Pattern
18
-
19
- ### Test 1: Lead reads tasks from Beads
20
-
21
- **Setup:**
22
- ```bash
23
- # Add a test task to Beads
24
- echo '{"id":"test-001","title":"Test task for P0","status":"open","priority":1,"created_at":"2026-01-01T00:00:00Z","updated_at":"2026-01-01T00:00:00Z"}' >> .beads/issues.jsonl
25
- ```
26
-
27
- **Test:**
28
- ```typescript
29
- import { createStatelessLead } from './src/resiliency';
30
-
31
- const lead = createStatelessLead('.beads', 'TestLead', 'lead-001', {
32
- sendRelay: async (to, msg) => console.log(`[RELAY] To ${to}: ${msg}`),
33
- getAvailableWorkers: async () => ['Worker1', 'Worker2'],
34
- });
35
-
36
- await lead.start();
37
- // Wait 5 seconds for poll
38
- // Expected: Console shows "Assigned test-001 to Worker1"
39
- ```
40
-
41
- **Verify:**
42
- ```bash
43
- # Check task was assigned in Beads
44
- grep "test-001" .beads/issues.jsonl
45
- # Should show: "status":"in_progress","assignee":"Worker1"
46
- ```
47
-
48
- **Pass criteria:**
49
- - [ ] Task status changed to `in_progress`
50
- - [ ] Task has `assignee` field set
51
- - [ ] Task has `leaseExpires` timestamp
52
-
53
- ---
54
-
55
- ## P1: Task Lease Timeouts
56
-
57
- ### Test 2: Lease expiration returns task to queue
58
-
59
- **Setup:**
60
- ```typescript
61
- // Create lead with short lease (10 seconds for testing)
62
- const lead = new StatelessLeadCoordinator({
63
- beadsDir: '.beads',
64
- agentName: 'TestLead',
65
- agentId: 'lead-001',
66
- pollIntervalMs: 2000,
67
- heartbeatIntervalMs: 5000,
68
- leaseDurationMs: 10000, // 10 second lease
69
- sendRelay: async (to, msg) => console.log(`[RELAY] To ${to}: ${msg}`),
70
- getAvailableWorkers: async () => ['Worker1'],
71
- });
72
- ```
73
-
74
- **Test:**
75
- 1. Start lead - task gets assigned
76
- 2. Wait 15 seconds (lease expires)
77
- 3. Add new worker to available list
78
- 4. Wait for next poll
79
-
80
- **Verify:**
81
- ```bash
82
- # Task should be reassigned after lease expires
83
- grep "test-001" .beads/issues.jsonl
84
- ```
85
-
86
- **Pass criteria:**
87
- - [ ] Task returned to queue after lease expired
88
- - [ ] Task reassigned to new worker on next poll
89
-
90
- ### Test 3: Lease renewal
91
-
92
- **Test:**
93
- ```typescript
94
- // Worker renews lease before expiration
95
- await lead.renewLease('test-001', 'Worker1');
96
- ```
97
-
98
- **Pass criteria:**
99
- - [ ] `leaseExpires` timestamp updated
100
- - [ ] Console shows "Renewed lease for test-001"
101
-
102
- ---
103
-
104
- ## P2: Leader Heartbeat File
105
-
106
- ### Test 4: Heartbeat file created and updated
107
-
108
- **Test:**
109
- ```typescript
110
- const lead = createStatelessLead('.beads', 'TestLead', 'lead-001', {
111
- sendRelay: async () => {},
112
- getAvailableWorkers: async () => [],
113
- });
114
-
115
- await lead.start();
116
- // Wait 15 seconds
117
- ```
118
-
119
- **Verify:**
120
- ```bash
121
- cat .beads/leader-heartbeat.json
122
- ```
123
-
124
- **Expected output:**
125
- ```json
126
- {
127
- "leadName": "TestLead",
128
- "leadId": "lead-001",
129
- "timestamp": 1735689600000,
130
- "activeTaskCount": 0,
131
- "assignedAgents": []
132
- }
133
- ```
134
-
135
- **Pass criteria:**
136
- - [ ] File exists at `.beads/leader-heartbeat.json`
137
- - [ ] `timestamp` updates every 10 seconds
138
- - [ ] `activeTaskCount` reflects assigned tasks
139
-
140
- ---
141
-
142
- ## P3: Watchdog in AgentSupervisor
143
-
144
- ### Test 5: Watchdog detects stale leader
145
-
146
- **Terminal 1 - Start leader:**
147
- ```typescript
148
- import { createStatelessLead } from './src/resiliency';
149
-
150
- const lead = createStatelessLead('.beads', 'Leader1', 'lead-001', {
151
- sendRelay: async () => {},
152
- getAvailableWorkers: async () => [],
153
- });
154
- await lead.start();
155
- console.log('Leader1 started');
156
- ```
157
-
158
- **Terminal 2 - Start watchdog:**
159
- ```typescript
160
- import { createLeaderWatchdog } from './src/resiliency';
161
-
162
- const watchdog = createLeaderWatchdog('.beads', 'Watchdog1', 'watch-001', {
163
- onBecomeLeader: async () => console.log('I AM NOW LEADER!'),
164
- getHealthyAgents: async () => [
165
- { name: 'Watchdog1', id: 'watch-001', spawnedAt: new Date() }
166
- ],
167
- });
168
-
169
- watchdog.on('leaderDetected', (h) => console.log('Leader detected:', h.leadName));
170
- watchdog.on('leaderStale', (d) => console.log('Leader stale!', d));
171
- watchdog.on('becameLeader', () => console.log('Became leader'));
172
-
173
- watchdog.start();
174
- ```
175
-
176
- **Test:**
177
- 1. Both running - watchdog should detect Leader1
178
- 2. Kill Terminal 1 (Ctrl+C)
179
- 3. Wait 35 seconds (stale threshold + check interval)
180
-
181
- **Pass criteria:**
182
- - [ ] Watchdog logs "Leader detected: Leader1"
183
- - [ ] After leader killed, watchdog logs "Leader stale!"
184
- - [ ] Watchdog logs "I AM NOW LEADER!"
185
- - [ ] New heartbeat file shows Watchdog1 as leader
186
-
187
- ---
188
-
189
- ## P4: Gossip-Based Health Broadcast
190
-
191
- ### Test 6: Peer discovery via heartbeats
192
-
193
- **Terminal 1 - Agent A:**
194
- ```typescript
195
- import { createGossipHealth } from './src/resiliency';
196
-
197
- const messages: string[] = [];
198
- const gossipA = createGossipHealth('AgentA', 'a-001', async (msg) => {
199
- messages.push(msg);
200
- console.log('[A broadcast]', msg);
201
- });
202
-
203
- gossipA.on('peerDiscovered', (p) => console.log('Discovered peer:', p.name));
204
- gossipA.start();
205
-
206
- // Simulate receiving B's heartbeat
207
- setTimeout(() => {
208
- const heartbeat = {
209
- type: 'HEARTBEAT',
210
- agent: 'AgentB',
211
- agentId: 'b-001',
212
- timestamp: Date.now(),
213
- load: 0.5,
214
- healthy: true,
215
- isLeader: false,
216
- taskCount: 2,
217
- };
218
- gossipA.processHeartbeat(heartbeat);
219
- }, 5000);
220
- ```
221
-
222
- **Pass criteria:**
223
- - [ ] AgentA broadcasts HEARTBEAT messages
224
- - [ ] "Discovered peer: AgentB" logged
225
- - [ ] `gossipA.getPeers()` returns AgentB
226
-
227
- ### Test 7: Stale peer detection
228
-
229
- **Test:**
230
- ```typescript
231
- // Process old heartbeat
232
- const staleHeartbeat = {
233
- type: 'HEARTBEAT',
234
- agent: 'AgentC',
235
- agentId: 'c-001',
236
- timestamp: Date.now() - 60000, // 1 minute old
237
- load: 0,
238
- healthy: true,
239
- isLeader: false,
240
- taskCount: 0,
241
- };
242
-
243
- gossipA.on('peerStale', (d) => console.log('Peer stale:', d.peer.name));
244
- gossipA.processHeartbeat(staleHeartbeat);
245
-
246
- // Wait for check interval (5 seconds)
247
- ```
248
-
249
- **Pass criteria:**
250
- - [ ] "Peer stale: AgentC" logged within 10 seconds
251
- - [ ] `gossipA.getPeer('AgentC').healthy` is `false`
252
-
253
- ---
254
-
255
- ## P5: Full Leader Election
256
-
257
- ### Test 8: Oldest agent wins election
258
-
259
- **Setup:** Start 3 agents at different times
260
-
261
- **Terminal 1 (start first):**
262
- ```typescript
263
- import { getSupervisor } from './src/resiliency';
264
-
265
- const supervisor = getSupervisor();
266
- supervisor.start();
267
-
268
- supervisor.on('electionStarted', (d) => console.log('Election started:', d));
269
- supervisor.on('electionComplete', (d) => console.log('Election result:', d));
270
- supervisor.on('becameLeader', () => console.log('*** I AM LEADER ***'));
271
-
272
- supervisor.enableLeaderCoordination('.beads', async (to, msg) => {
273
- console.log(`Send to ${to}: ${msg}`);
274
- });
275
-
276
- console.log('Supervisor started at', new Date().toISOString());
277
- ```
278
-
279
- **Verify:**
280
- ```bash
281
- cat .beads/leader-heartbeat.json
282
- # Should show first supervisor as leader
283
- ```
284
-
285
- **Pass criteria:**
286
- - [ ] First started supervisor becomes leader
287
- - [ ] `leader-heartbeat.json` shows correct leader
288
- - [ ] Election uses "oldest" method
289
-
290
- ### Test 9: Failover on leader death
291
-
292
- **Test:**
293
- 1. Start Supervisor A (becomes leader)
294
- 2. Start Supervisor B (detects A as leader)
295
- 3. Kill Supervisor A
296
- 4. Wait 35 seconds
297
-
298
- **Pass criteria:**
299
- - [ ] Supervisor B logs "Leader stale"
300
- - [ ] Supervisor B logs "*** I AM LEADER ***"
301
- - [ ] Heartbeat file updates to show B as leader
302
-
303
- ---
304
-
305
- ## Integration Test: Full Workflow
306
-
307
- ### Test 10: End-to-end task assignment and failover
308
-
309
- **Setup:**
310
- ```bash
311
- # Clear test data
312
- rm -f .beads/leader-heartbeat.json
313
- # Add test tasks
314
- cat >> .beads/issues.jsonl << 'EOF'
315
- {"id":"e2e-001","title":"E2E Test Task 1","status":"open","priority":1,"created_at":"2026-01-01T00:00:00Z","updated_at":"2026-01-01T00:00:00Z"}
316
- {"id":"e2e-002","title":"E2E Test Task 2","status":"open","priority":2,"created_at":"2026-01-01T00:00:00Z","updated_at":"2026-01-01T00:00:00Z"}
317
- EOF
318
- ```
319
-
320
- **Workflow:**
321
- 1. Start Lead agent
322
- 2. Start 2 Worker agents
323
- 3. Verify tasks assigned
324
- 4. Kill Lead agent
325
- 5. Verify new leader elected
326
- 6. Verify tasks continue processing
327
-
328
- **Pass criteria:**
329
- - [ ] Tasks assigned to workers
330
- - [ ] Leader failover completes in <35 seconds
331
- - [ ] No task duplication
332
- - [ ] Orphaned tasks return to queue
333
-
334
- ---
335
-
336
- ## Cleanup
337
-
338
- ```bash
339
- # Remove test data
340
- grep -v "test-001\|e2e-00" .beads/issues.jsonl > .beads/issues.jsonl.tmp
341
- mv .beads/issues.jsonl.tmp .beads/issues.jsonl
342
- rm -f .beads/leader-heartbeat.json
343
- ```
344
-
345
- ---
346
-
347
- ## Summary Checklist
348
-
349
- | Feature | Test | Status |
350
- |---------|------|--------|
351
- | P0: Stateless Lead | Test 1: Lead reads from Beads | โ˜ |
352
- | P1: Lease Timeouts | Test 2: Lease expiration | โ˜ |
353
- | P1: Lease Timeouts | Test 3: Lease renewal | โ˜ |
354
- | P2: Heartbeat File | Test 4: File created/updated | โ˜ |
355
- | P3: Watchdog | Test 5: Stale leader detection | โ˜ |
356
- | P4: Gossip Health | Test 6: Peer discovery | โ˜ |
357
- | P4: Gossip Health | Test 7: Stale peer detection | โ˜ |
358
- | P5: Leader Election | Test 8: Oldest wins | โ˜ |
359
- | P5: Leader Election | Test 9: Failover | โ˜ |
360
- | Integration | Test 10: Full workflow | โ˜ |
361
-
362
- ---
363
-
364
- **Tester:** ____________________
365
- **Date Completed:** ____________________
366
- **Notes:**
@@ -1,96 +0,0 @@
1
- #!/bin/bash
2
- # Cloud local development setup script
3
- # Usage: ./scripts/cloud-setup.sh [--skip-docker] [--skip-migrate] [--skip-data]
4
-
5
- set -e
6
-
7
- SKIP_DOCKER=false
8
- SKIP_MIGRATE=false
9
- SKIP_DATA=false
10
-
11
- # Parse arguments
12
- for arg in "$@"; do
13
- case $arg in
14
- --skip-docker) SKIP_DOCKER=true ;;
15
- --skip-migrate) SKIP_MIGRATE=true ;;
16
- --skip-data) SKIP_DATA=true ;;
17
- esac
18
- done
19
-
20
- echo "๐Ÿš€ Setting up Agent Relay Cloud (local dev)"
21
- echo ""
22
-
23
- # Step 1: Start Docker services
24
- if [ "$SKIP_DOCKER" = false ]; then
25
- echo "๐Ÿ“ฆ Starting Docker services (Postgres + Redis)..."
26
- docker compose -f docker-compose.dev.yml up -d postgres redis
27
-
28
- # Wait for Postgres to be ready
29
- echo "โณ Waiting for Postgres to be ready..."
30
- until docker compose -f docker-compose.dev.yml exec -T postgres pg_isready -U postgres > /dev/null 2>&1; do
31
- sleep 1
32
- done
33
- echo "โœ“ Postgres is ready"
34
- else
35
- echo "โญ๏ธ Skipping Docker setup"
36
- fi
37
-
38
- # Step 2: Build TypeScript
39
- echo ""
40
- echo "๐Ÿ”จ Building TypeScript..."
41
- npm run build > /dev/null 2>&1
42
- echo "โœ“ Build complete"
43
-
44
- # Step 3: Run migrations
45
- if [ "$SKIP_MIGRATE" = false ]; then
46
- echo ""
47
- echo "๐Ÿ“Š Running database migrations..."
48
- npm run db:migrate 2>&1 | grep -E "(Applied|already applied|Error)" || true
49
- echo "โœ“ Migrations complete"
50
- else
51
- echo "โญ๏ธ Skipping migrations"
52
- fi
53
-
54
- # Step 4: Set up test data (only if server is running)
55
- if [ "$SKIP_DATA" = false ]; then
56
- echo ""
57
- echo "๐Ÿงช Setting up test data..."
58
-
59
- # Check if cloud server is running, if not start it temporarily
60
- if ! curl -s http://localhost:4567/api/health > /dev/null 2>&1; then
61
- echo " Starting cloud server temporarily for setup..."
62
- node dist/cloud/index.js &
63
- SERVER_PID=$!
64
- sleep 3
65
- STARTED_SERVER=true
66
- fi
67
-
68
- # Create test data
69
- RESPONSE=$(curl -s -X POST http://localhost:4567/api/test/setup-local-cloud \
70
- -H "Content-Type: application/json" \
71
- -c /tmp/relay-cookies.txt \
72
- -d '{"repoName": "test-org/test-repo", "workspaceName": "Local Dev"}' 2>&1 || echo '{"error": "Failed to connect"}')
73
-
74
- if echo "$RESPONSE" | grep -q '"success":true'; then
75
- echo "โœ“ Test data created"
76
- echo " Cookie saved to /tmp/relay-cookies.txt"
77
- else
78
- echo "โš ๏ธ Could not create test data (server may need to be running)"
79
- fi
80
-
81
- # Stop temp server if we started it
82
- if [ "$STARTED_SERVER" = true ]; then
83
- kill $SERVER_PID 2>/dev/null || true
84
- fi
85
- else
86
- echo "โญ๏ธ Skipping test data setup"
87
- fi
88
-
89
- echo ""
90
- echo "โœ… Setup complete!"
91
- echo ""
92
- echo "To start the cloud server:"
93
- echo " npm run cloud"
94
- echo ""
95
- echo "Then open: http://localhost:4567/app"
96
- echo ""
@@ -1,88 +0,0 @@
1
- # Agent-Relay Public Release Plan
2
-
3
- ## Goal
4
- Prepare agent-relay for public release on npm and GitHub with comprehensive documentation, examples, and polish.
5
-
6
- ## Team Structure
7
-
8
- ### Agent 1: DocWriter (Claude) - Documentation & Examples
9
- **Focus:** User-facing content, tutorials, examples
10
- **Workdir:** `/Users/khaliqgant/Projects/prpm/agent-relay`
11
-
12
- Tasks:
13
- - [ ] Review and improve README.md
14
- - Add GIF/video demo of quick start usage
15
- - Improve quick start section
16
- - Add "Common Use Cases" section
17
- - [ ] Create docs/CONTRIBUTING.md
18
- - [ ] Create examples/ directory with:
19
- - [ ] examples/basic-chat/ - Two agents chatting
20
- - [ ] examples/tic-tac-toe/ - Simple game
21
- - [ ] examples/collaborative-coding/ - Agents working together
22
- - [ ] Update CLI --help text for all commands
23
- - [ ] Document the new inbox-* commands
24
- - [ ] Create API.md documenting the protocol
25
-
26
- ### Agent 2: CodePolish (Claude) - Code Quality & Tests
27
- **Focus:** Test coverage, error handling, code cleanup
28
- **Workdir:** `/Users/khaliqgant/Projects/prpm/agent-relay`
29
-
30
- Tasks:
31
- - [ ] Audit test coverage - identify gaps
32
- - [ ] Add tests for new inbox-poll/write/agents commands
33
- - [ ] Improve error messages (user-friendly)
34
- - [ ] Add input validation to CLI commands
35
- - [ ] Clean up console.log statements (use proper logging)
36
- - [ ] Remove dead code and unused files
37
- - [ ] Review and fix any TypeScript strict mode issues
38
- - [ ] Add JSDoc comments to public APIs
39
-
40
- ### Agent 3: DevOps (Codex) - CI/CD & Publishing
41
- **Focus:** Build, publish, installation
42
- **Workdir:** `/Users/khaliqgant/Projects/prpm/agent-relay`
43
-
44
- Tasks:
45
- - [ ] Review and improve package.json
46
- - Verify all fields for npm publish
47
- - Add repository, bugs, homepage URLs
48
- - Review dependencies (prune unused)
49
- - [ ] Enhance GitHub Actions workflow
50
- - Add npm publish on release
51
- - Add test coverage reporting
52
- - Add build badge to README
53
- - [ ] Review install.sh script
54
- - Test on clean systems
55
- - Improve error handling
56
- - [ ] Add LICENSE file (MIT)
57
- - [ ] Create docs/CHANGELOG.md
58
- - [ ] Test npm pack / npm publish --dry-run
59
- - [ ] Set up GitHub release automation
60
-
61
- ## Coordination Protocol
62
-
63
- Agents communicate via `/tmp/agent-relay-dev/`:
64
- - DocWriter, CodePolish, DevOps each have inbox directories
65
- - Use `agent-relay inbox-*` commands
66
-
67
- ### Message Types
68
- - `STATUS: <doing what>` - Progress update
69
- - `QUESTION: <question>` - Need input from another agent
70
- - `DONE: <task>` - Task completed
71
- - `BLOCKER: <issue>` - Blocked on something
72
- - `HANDOFF: <what>` - Passing work to another agent
73
-
74
- ### Coordination Rules
75
- 1. Before editing a file, announce: `STATUS: Editing <filename>`
76
- 2. After completing a task, broadcast: `DONE: <task description>`
77
- 3. If blocked, ask: `QUESTION: @AgentName <question>`
78
- 4. Check inbox after each major task
79
-
80
- ## Success Criteria
81
- - [ ] npm install agent-relay works
82
- - [ ] All CLI commands have --help
83
- - [ ] README has working quick start
84
- - [ ] 3+ working examples
85
- - [ ] Test coverage > 80%
86
- - [ ] No TypeScript errors in strict mode
87
- - [ ] GitHub Actions green
88
- - [ ] Clean npm audit