agent-relay 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (668) hide show
  1. package/.gitattributes +3 -0
  2. package/.nvmrc +1 -0
  3. package/.trajectories/agent-relay-322-324.md +17 -0
  4. package/.trajectories/completed/2026-01/traj_03zupyv1s7b9.json +49 -0
  5. package/.trajectories/completed/2026-01/traj_03zupyv1s7b9.md +31 -0
  6. package/.trajectories/completed/2026-01/traj_0zacdjl1g4ht.json +125 -0
  7. package/.trajectories/completed/2026-01/traj_0zacdjl1g4ht.md +62 -0
  8. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.json +65 -0
  9. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.md +37 -0
  10. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.json +65 -0
  11. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.md +37 -0
  12. package/.trajectories/completed/2026-01/traj_1rp3rges5811.json +49 -0
  13. package/.trajectories/completed/2026-01/traj_1rp3rges5811.md +31 -0
  14. package/.trajectories/completed/2026-01/traj_22bhyulruouw.json +113 -0
  15. package/.trajectories/completed/2026-01/traj_22bhyulruouw.md +57 -0
  16. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.json +53 -0
  17. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.md +32 -0
  18. package/.trajectories/completed/2026-01/traj_33iuy72sezbk.json +49 -0
  19. package/.trajectories/completed/2026-01/traj_33iuy72sezbk.md +31 -0
  20. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.json +26 -0
  21. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.md +6 -0
  22. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.json +47 -0
  23. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.md +32 -0
  24. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.json +53 -0
  25. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.md +32 -0
  26. package/.trajectories/completed/2026-01/traj_5ammh5qtvklq.json +77 -0
  27. package/.trajectories/completed/2026-01/traj_5ammh5qtvklq.md +42 -0
  28. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.json +59 -0
  29. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.md +33 -0
  30. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.json +53 -0
  31. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.md +32 -0
  32. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.json +48 -0
  33. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.md +24 -0
  34. package/.trajectories/completed/2026-01/traj_6mieijqyvaag.json +77 -0
  35. package/.trajectories/completed/2026-01/traj_6mieijqyvaag.md +42 -0
  36. package/.trajectories/completed/2026-01/traj_78ffm31jn3uk.json +77 -0
  37. package/.trajectories/completed/2026-01/traj_78ffm31jn3uk.md +42 -0
  38. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.json +209 -0
  39. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.md +97 -0
  40. package/.trajectories/completed/2026-01/traj_94gnp3k30goq.json +66 -0
  41. package/.trajectories/completed/2026-01/traj_94gnp3k30goq.md +36 -0
  42. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.json +48 -0
  43. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.md +24 -0
  44. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.json +49 -0
  45. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.md +23 -0
  46. package/.trajectories/completed/2026-01/traj_avqeghu6pz5a.json +40 -0
  47. package/.trajectories/completed/2026-01/traj_avqeghu6pz5a.md +22 -0
  48. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.json +53 -0
  49. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.md +32 -0
  50. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.json +49 -0
  51. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.md +31 -0
  52. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.json +26 -0
  53. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.md +6 -0
  54. package/.trajectories/completed/2026-01/traj_dcsp9s8y01ra.json +121 -0
  55. package/.trajectories/completed/2026-01/traj_dcsp9s8y01ra.md +29 -0
  56. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.json +59 -0
  57. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.md +37 -0
  58. package/.trajectories/completed/2026-01/traj_fhx9irlckht6.json +53 -0
  59. package/.trajectories/completed/2026-01/traj_fhx9irlckht6.md +32 -0
  60. package/.trajectories/completed/2026-01/traj_fqduidx3xbtp.json +101 -0
  61. package/.trajectories/completed/2026-01/traj_fqduidx3xbtp.md +52 -0
  62. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.json +77 -0
  63. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.md +42 -0
  64. package/.trajectories/completed/2026-01/traj_gjdre5voouod.json +53 -0
  65. package/.trajectories/completed/2026-01/traj_gjdre5voouod.md +32 -0
  66. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.json +25 -0
  67. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.md +15 -0
  68. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.json +101 -0
  69. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.md +44 -0
  70. package/.trajectories/completed/2026-01/traj_hf81ey93uz6t.json +49 -0
  71. package/.trajectories/completed/2026-01/traj_hf81ey93uz6t.md +31 -0
  72. package/.trajectories/completed/2026-01/traj_hfmki2jr9d4r.json +65 -0
  73. package/.trajectories/completed/2026-01/traj_hfmki2jr9d4r.md +37 -0
  74. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.json +22 -0
  75. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.md +5 -0
  76. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.json +53 -0
  77. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.md +32 -0
  78. package/.trajectories/completed/2026-01/traj_lq450ly148uw.json +49 -0
  79. package/.trajectories/completed/2026-01/traj_lq450ly148uw.md +31 -0
  80. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.json +25 -0
  81. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.md +15 -0
  82. package/.trajectories/completed/2026-01/traj_multi_server_arch.md +101 -0
  83. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.json +53 -0
  84. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.md +32 -0
  85. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.json +53 -0
  86. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.md +32 -0
  87. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.json +48 -0
  88. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.md +24 -0
  89. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.json +53 -0
  90. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.md +32 -0
  91. package/.trajectories/completed/2026-01/traj_psd9ob0j2ru3.json +27 -0
  92. package/.trajectories/completed/2026-01/traj_psd9ob0j2ru3.md +14 -0
  93. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.json +77 -0
  94. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.md +42 -0
  95. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.json +53 -0
  96. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.md +32 -0
  97. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.json +83 -0
  98. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.md +47 -0
  99. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.json +59 -0
  100. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.md +37 -0
  101. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.json +48 -0
  102. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.md +16 -0
  103. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.json +59 -0
  104. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.md +37 -0
  105. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.json +53 -0
  106. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.md +32 -0
  107. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.json +84 -0
  108. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.md +109 -0
  109. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.json +53 -0
  110. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.md +32 -0
  111. package/.trajectories/completed/2026-01/traj_ub8csuv3lcv4.json +53 -0
  112. package/.trajectories/completed/2026-01/traj_ub8csuv3lcv4.md +32 -0
  113. package/.trajectories/completed/2026-01/traj_uc29tlso8i9s.json +186 -0
  114. package/.trajectories/completed/2026-01/traj_uc29tlso8i9s.md +86 -0
  115. package/.trajectories/completed/2026-01/traj_ui9b4tqxoa7j.json +77 -0
  116. package/.trajectories/completed/2026-01/traj_ui9b4tqxoa7j.md +42 -0
  117. package/.trajectories/completed/2026-01/traj_v87hypnongqx.json +71 -0
  118. package/.trajectories/completed/2026-01/traj_v87hypnongqx.md +42 -0
  119. package/.trajectories/completed/2026-01/traj_v9dkdoxylyid.json +89 -0
  120. package/.trajectories/completed/2026-01/traj_v9dkdoxylyid.md +47 -0
  121. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.json +53 -0
  122. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.md +32 -0
  123. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.json +20 -0
  124. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.md +6 -0
  125. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.json +175 -0
  126. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.md +82 -0
  127. package/.trajectories/completed/2026-01/traj_xy9vifpqet80.json +65 -0
  128. package/.trajectories/completed/2026-01/traj_xy9vifpqet80.md +37 -0
  129. package/.trajectories/completed/2026-01/traj_y7aiwijyfmmv.json +49 -0
  130. package/.trajectories/completed/2026-01/traj_y7aiwijyfmmv.md +31 -0
  131. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.json +47 -0
  132. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.md +32 -0
  133. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.json +59 -0
  134. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.md +37 -0
  135. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.json +53 -0
  136. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.md +32 -0
  137. package/.trajectories/consolidate-settings-panel.md +24 -0
  138. package/.trajectories/gh-cli-user-token.md +26 -0
  139. package/.trajectories/index.json +468 -0
  140. package/ARCHITECTURE.md +1245 -0
  141. package/TESTING.md +278 -0
  142. package/deploy/init-db.sql +5 -0
  143. package/deploy/scripts/setup-fly-workspaces.sh +69 -0
  144. package/deploy/scripts/setup-railway.sh +75 -0
  145. package/deploy/workspace/codex.config.toml +15 -0
  146. package/deploy/workspace/entrypoint-browser.sh +118 -0
  147. package/deploy/workspace/entrypoint.sh +508 -0
  148. package/deploy/workspace/git-credential-relay +126 -0
  149. package/dist/bridge/spawner.d.ts +7 -0
  150. package/dist/bridge/spawner.js +40 -9
  151. package/dist/bridge/types.d.ts +2 -0
  152. package/dist/cli/index.js +260 -1
  153. package/dist/cloud/api/admin.d.ts +8 -0
  154. package/dist/cloud/api/admin.js +212 -0
  155. package/dist/cloud/api/auth.js +8 -0
  156. package/dist/cloud/api/billing.d.ts +0 -10
  157. package/dist/cloud/api/billing.js +278 -67
  158. package/dist/cloud/api/codex-auth-helper.d.ts +21 -0
  159. package/dist/cloud/api/codex-auth-helper.js +307 -0
  160. package/dist/cloud/api/coordinators.js +402 -0
  161. package/dist/cloud/api/daemons.js +15 -11
  162. package/dist/cloud/api/git.js +127 -19
  163. package/dist/cloud/api/github-app.js +42 -8
  164. package/dist/cloud/api/nango-auth.js +297 -16
  165. package/dist/cloud/api/onboarding.js +112 -35
  166. package/dist/cloud/api/providers.js +12 -16
  167. package/dist/cloud/api/repos.d.ts +1 -0
  168. package/dist/cloud/api/repos.js +311 -49
  169. package/dist/cloud/api/test-helpers.js +40 -0
  170. package/dist/cloud/api/usage.js +13 -0
  171. package/dist/cloud/api/webhooks.d.ts +1 -0
  172. package/dist/cloud/api/webhooks.js +149 -0
  173. package/dist/cloud/api/workspaces.d.ts +18 -0
  174. package/dist/cloud/api/workspaces.js +1042 -21
  175. package/dist/cloud/billing/plans.js +19 -19
  176. package/dist/cloud/config.d.ts +8 -0
  177. package/dist/cloud/config.js +15 -0
  178. package/dist/cloud/db/drizzle.d.ts +5 -2
  179. package/dist/cloud/db/drizzle.js +27 -20
  180. package/dist/cloud/db/schema.d.ts +19 -51
  181. package/dist/cloud/db/schema.js +5 -4
  182. package/dist/cloud/index.d.ts +0 -1
  183. package/dist/cloud/index.js +0 -1
  184. package/dist/cloud/provisioner/index.d.ts +125 -1
  185. package/dist/cloud/provisioner/index.js +939 -53
  186. package/dist/cloud/server.js +161 -16
  187. package/dist/cloud/services/compute-enforcement.d.ts +57 -0
  188. package/dist/cloud/services/compute-enforcement.js +175 -0
  189. package/dist/cloud/services/index.d.ts +2 -0
  190. package/dist/cloud/services/index.js +4 -0
  191. package/dist/cloud/services/intro-expiration.d.ts +55 -0
  192. package/dist/cloud/services/intro-expiration.js +211 -0
  193. package/dist/cloud/services/nango.d.ts +74 -0
  194. package/dist/cloud/services/nango.js +218 -5
  195. package/dist/cloud/services/planLimits.d.ts +22 -0
  196. package/dist/cloud/services/planLimits.js +58 -5
  197. package/dist/cloud/services/ssh-security.d.ts +31 -0
  198. package/dist/cloud/services/ssh-security.js +63 -0
  199. package/dist/continuity/manager.d.ts +5 -0
  200. package/dist/continuity/manager.js +56 -2
  201. package/dist/daemon/api.d.ts +2 -0
  202. package/dist/daemon/api.js +214 -5
  203. package/dist/daemon/cli-auth.d.ts +13 -1
  204. package/dist/daemon/cli-auth.js +166 -47
  205. package/dist/daemon/connection.d.ts +7 -1
  206. package/dist/daemon/connection.js +15 -0
  207. package/dist/daemon/orchestrator.d.ts +2 -0
  208. package/dist/daemon/orchestrator.js +26 -0
  209. package/dist/daemon/repo-manager.d.ts +116 -0
  210. package/dist/daemon/repo-manager.js +384 -0
  211. package/dist/daemon/router.d.ts +60 -1
  212. package/dist/daemon/router.js +281 -20
  213. package/dist/daemon/user-directory.d.ts +111 -0
  214. package/dist/daemon/user-directory.js +233 -0
  215. package/dist/dashboard/out/404.html +1 -1
  216. package/dist/dashboard/out/_next/static/T1tgCqVWHFIkV7ClEtzD7/_ssgManifest.js +1 -0
  217. package/dist/dashboard/out/_next/static/chunks/532-bace199897eeab37.js +9 -0
  218. package/dist/dashboard/out/_next/static/chunks/766-b54f0853794b78c3.js +1 -0
  219. package/dist/dashboard/out/_next/static/chunks/83-b51836037078006c.js +1 -0
  220. package/dist/dashboard/out/_next/static/chunks/891-6cd50de1224f70bb.js +1 -0
  221. package/dist/dashboard/out/_next/static/chunks/899-bb19a9b3d9b39ea6.js +1 -0
  222. package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-8939b0fc700f7eca.js +1 -0
  223. package/dist/dashboard/out/_next/static/chunks/app/app/page-5af1b6b439858aa6.js +1 -0
  224. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-ac39dc0cc3c26fa7.js +1 -0
  225. package/dist/dashboard/out/_next/static/chunks/app/{page-daf87e86f783f980.js → page-4a5938c18a11a654.js} +1 -1
  226. package/dist/dashboard/out/_next/static/chunks/app/providers/page-ac3a6ac433fd6001.js +1 -0
  227. package/dist/dashboard/out/_next/static/chunks/app/providers/setup/[provider]/page-09f9caae98a18c09.js +1 -0
  228. package/dist/dashboard/out/_next/static/chunks/{main-97850e03d723ea8c.js → main-2ee6beb2ae96d210.js} +1 -1
  229. package/dist/dashboard/out/_next/static/css/85d2af9c7ac74d62.css +1 -0
  230. package/dist/dashboard/out/_next/static/css/fe4b28883eeff359.css +1 -0
  231. package/dist/dashboard/out/app/onboarding.html +1 -0
  232. package/dist/dashboard/out/app/onboarding.txt +7 -0
  233. package/dist/dashboard/out/app.html +1 -1
  234. package/dist/dashboard/out/app.txt +3 -3
  235. package/dist/dashboard/out/apple-icon.png +0 -0
  236. package/dist/dashboard/out/connect-repos.html +1 -1
  237. package/dist/dashboard/out/connect-repos.txt +3 -3
  238. package/dist/dashboard/out/history.html +1 -1
  239. package/dist/dashboard/out/history.txt +3 -3
  240. package/dist/dashboard/out/index.html +1 -1
  241. package/dist/dashboard/out/index.txt +3 -3
  242. package/dist/dashboard/out/login.html +2 -2
  243. package/dist/dashboard/out/login.txt +3 -3
  244. package/dist/dashboard/out/metrics.html +1 -1
  245. package/dist/dashboard/out/metrics.txt +3 -3
  246. package/dist/dashboard/out/pricing.html +3 -3
  247. package/dist/dashboard/out/pricing.txt +3 -3
  248. package/dist/dashboard/out/providers/setup/claude.html +1 -0
  249. package/dist/dashboard/out/providers/setup/claude.txt +8 -0
  250. package/dist/dashboard/out/providers/setup/codex.html +1 -0
  251. package/dist/dashboard/out/providers/setup/codex.txt +8 -0
  252. package/dist/dashboard/out/providers.html +1 -1
  253. package/dist/dashboard/out/providers.txt +3 -3
  254. package/dist/dashboard/out/signup.html +2 -2
  255. package/dist/dashboard/out/signup.txt +3 -3
  256. package/dist/dashboard-server/server.js +316 -12
  257. package/dist/dashboard-server/user-bridge.d.ts +103 -0
  258. package/dist/dashboard-server/user-bridge.js +189 -0
  259. package/dist/protocol/channels.d.ts +205 -0
  260. package/dist/protocol/channels.js +154 -0
  261. package/dist/protocol/types.d.ts +13 -1
  262. package/dist/resiliency/provider-context.js +2 -0
  263. package/dist/shared/cli-auth-config.d.ts +19 -0
  264. package/dist/shared/cli-auth-config.js +58 -2
  265. package/dist/utils/agent-config.js +1 -1
  266. package/dist/wrapper/auth-detection.d.ts +49 -0
  267. package/dist/wrapper/auth-detection.js +192 -0
  268. package/dist/wrapper/base-wrapper.d.ts +153 -0
  269. package/dist/wrapper/base-wrapper.js +393 -0
  270. package/dist/wrapper/client.d.ts +7 -1
  271. package/dist/wrapper/client.js +3 -0
  272. package/dist/wrapper/index.d.ts +1 -0
  273. package/dist/wrapper/index.js +4 -3
  274. package/dist/wrapper/pty-wrapper.d.ts +62 -84
  275. package/dist/wrapper/pty-wrapper.js +154 -180
  276. package/dist/wrapper/tmux-wrapper.d.ts +41 -66
  277. package/dist/wrapper/tmux-wrapper.js +90 -134
  278. package/package.json +5 -12
  279. package/scripts/postinstall.js +11 -155
  280. package/scripts/test-interactive-terminal.sh +248 -0
  281. package/test-push.txt +1 -0
  282. package/bin/tmux +0 -0
  283. package/dist/bridge/config.d.ts.map +0 -1
  284. package/dist/bridge/config.js.map +0 -1
  285. package/dist/bridge/index.d.ts.map +0 -1
  286. package/dist/bridge/index.js.map +0 -1
  287. package/dist/bridge/multi-project-client.d.ts.map +0 -1
  288. package/dist/bridge/multi-project-client.js.map +0 -1
  289. package/dist/bridge/shadow-cli.d.ts.map +0 -1
  290. package/dist/bridge/shadow-cli.js.map +0 -1
  291. package/dist/bridge/shadow-config.d.ts.map +0 -1
  292. package/dist/bridge/shadow-config.js.map +0 -1
  293. package/dist/bridge/spawner.d.ts.map +0 -1
  294. package/dist/bridge/spawner.js.map +0 -1
  295. package/dist/bridge/teams-config.d.ts.map +0 -1
  296. package/dist/bridge/teams-config.js.map +0 -1
  297. package/dist/bridge/types.d.ts.map +0 -1
  298. package/dist/bridge/types.js.map +0 -1
  299. package/dist/bridge/utils.d.ts.map +0 -1
  300. package/dist/bridge/utils.js.map +0 -1
  301. package/dist/cli/index.d.ts.map +0 -1
  302. package/dist/cli/index.js.map +0 -1
  303. package/dist/cloud/api/auth.d.ts.map +0 -1
  304. package/dist/cloud/api/auth.js.map +0 -1
  305. package/dist/cloud/api/billing.d.ts.map +0 -1
  306. package/dist/cloud/api/billing.js.map +0 -1
  307. package/dist/cloud/api/cli-pty-runner.d.ts.map +0 -1
  308. package/dist/cloud/api/cli-pty-runner.js.map +0 -1
  309. package/dist/cloud/api/coordinators.d.ts.map +0 -1
  310. package/dist/cloud/api/coordinators.js.map +0 -1
  311. package/dist/cloud/api/daemons.d.ts.map +0 -1
  312. package/dist/cloud/api/daemons.js.map +0 -1
  313. package/dist/cloud/api/generic-webhooks.d.ts.map +0 -1
  314. package/dist/cloud/api/generic-webhooks.js.map +0 -1
  315. package/dist/cloud/api/git.d.ts.map +0 -1
  316. package/dist/cloud/api/git.js.map +0 -1
  317. package/dist/cloud/api/github-app.d.ts.map +0 -1
  318. package/dist/cloud/api/github-app.js.map +0 -1
  319. package/dist/cloud/api/middleware/planLimits.d.ts.map +0 -1
  320. package/dist/cloud/api/middleware/planLimits.js.map +0 -1
  321. package/dist/cloud/api/monitoring.d.ts.map +0 -1
  322. package/dist/cloud/api/monitoring.js.map +0 -1
  323. package/dist/cloud/api/nango-auth.d.ts.map +0 -1
  324. package/dist/cloud/api/nango-auth.js.map +0 -1
  325. package/dist/cloud/api/onboarding.d.ts.map +0 -1
  326. package/dist/cloud/api/onboarding.js.map +0 -1
  327. package/dist/cloud/api/policy.d.ts.map +0 -1
  328. package/dist/cloud/api/policy.js.map +0 -1
  329. package/dist/cloud/api/providers.d.ts.map +0 -1
  330. package/dist/cloud/api/providers.js.map +0 -1
  331. package/dist/cloud/api/repos.d.ts.map +0 -1
  332. package/dist/cloud/api/repos.js.map +0 -1
  333. package/dist/cloud/api/teams.d.ts.map +0 -1
  334. package/dist/cloud/api/teams.js.map +0 -1
  335. package/dist/cloud/api/test-helpers.d.ts.map +0 -1
  336. package/dist/cloud/api/test-helpers.js.map +0 -1
  337. package/dist/cloud/api/usage.d.ts.map +0 -1
  338. package/dist/cloud/api/usage.js.map +0 -1
  339. package/dist/cloud/api/webhooks.d.ts.map +0 -1
  340. package/dist/cloud/api/webhooks.js.map +0 -1
  341. package/dist/cloud/api/workspaces.d.ts.map +0 -1
  342. package/dist/cloud/api/workspaces.js.map +0 -1
  343. package/dist/cloud/billing/index.d.ts.map +0 -1
  344. package/dist/cloud/billing/index.js.map +0 -1
  345. package/dist/cloud/billing/plans.d.ts.map +0 -1
  346. package/dist/cloud/billing/plans.js.map +0 -1
  347. package/dist/cloud/billing/service.d.ts.map +0 -1
  348. package/dist/cloud/billing/service.js.map +0 -1
  349. package/dist/cloud/billing/types.d.ts.map +0 -1
  350. package/dist/cloud/billing/types.js.map +0 -1
  351. package/dist/cloud/config.d.ts.map +0 -1
  352. package/dist/cloud/config.js.map +0 -1
  353. package/dist/cloud/db/drizzle.d.ts.map +0 -1
  354. package/dist/cloud/db/drizzle.js.map +0 -1
  355. package/dist/cloud/db/index.d.ts.map +0 -1
  356. package/dist/cloud/db/index.js.map +0 -1
  357. package/dist/cloud/db/schema.d.ts.map +0 -1
  358. package/dist/cloud/db/schema.js.map +0 -1
  359. package/dist/cloud/index.d.ts.map +0 -1
  360. package/dist/cloud/index.js.map +0 -1
  361. package/dist/cloud/provisioner/index.d.ts.map +0 -1
  362. package/dist/cloud/provisioner/index.js.map +0 -1
  363. package/dist/cloud/server.d.ts.map +0 -1
  364. package/dist/cloud/server.js.map +0 -1
  365. package/dist/cloud/services/auto-scaler.d.ts.map +0 -1
  366. package/dist/cloud/services/auto-scaler.js.map +0 -1
  367. package/dist/cloud/services/capacity-manager.d.ts.map +0 -1
  368. package/dist/cloud/services/capacity-manager.js.map +0 -1
  369. package/dist/cloud/services/ci-agent-spawner.d.ts.map +0 -1
  370. package/dist/cloud/services/ci-agent-spawner.js.map +0 -1
  371. package/dist/cloud/services/coordinator.d.ts.map +0 -1
  372. package/dist/cloud/services/coordinator.js.map +0 -1
  373. package/dist/cloud/services/index.d.ts.map +0 -1
  374. package/dist/cloud/services/index.js.map +0 -1
  375. package/dist/cloud/services/mention-handler.d.ts.map +0 -1
  376. package/dist/cloud/services/mention-handler.js.map +0 -1
  377. package/dist/cloud/services/nango.d.ts.map +0 -1
  378. package/dist/cloud/services/nango.js.map +0 -1
  379. package/dist/cloud/services/persistence.d.ts.map +0 -1
  380. package/dist/cloud/services/persistence.js.map +0 -1
  381. package/dist/cloud/services/planLimits.d.ts.map +0 -1
  382. package/dist/cloud/services/planLimits.js.map +0 -1
  383. package/dist/cloud/services/scaling-orchestrator.d.ts.map +0 -1
  384. package/dist/cloud/services/scaling-orchestrator.js.map +0 -1
  385. package/dist/cloud/services/scaling-policy.d.ts.map +0 -1
  386. package/dist/cloud/services/scaling-policy.js.map +0 -1
  387. package/dist/cloud/vault/index.d.ts +0 -76
  388. package/dist/cloud/vault/index.d.ts.map +0 -1
  389. package/dist/cloud/vault/index.js +0 -219
  390. package/dist/cloud/vault/index.js.map +0 -1
  391. package/dist/cloud/webhooks/index.d.ts.map +0 -1
  392. package/dist/cloud/webhooks/index.js.map +0 -1
  393. package/dist/cloud/webhooks/parsers/github.d.ts.map +0 -1
  394. package/dist/cloud/webhooks/parsers/github.js.map +0 -1
  395. package/dist/cloud/webhooks/parsers/index.d.ts.map +0 -1
  396. package/dist/cloud/webhooks/parsers/index.js.map +0 -1
  397. package/dist/cloud/webhooks/parsers/linear.d.ts.map +0 -1
  398. package/dist/cloud/webhooks/parsers/linear.js.map +0 -1
  399. package/dist/cloud/webhooks/parsers/slack.d.ts.map +0 -1
  400. package/dist/cloud/webhooks/parsers/slack.js.map +0 -1
  401. package/dist/cloud/webhooks/responders/github.d.ts.map +0 -1
  402. package/dist/cloud/webhooks/responders/github.js.map +0 -1
  403. package/dist/cloud/webhooks/responders/index.d.ts.map +0 -1
  404. package/dist/cloud/webhooks/responders/index.js.map +0 -1
  405. package/dist/cloud/webhooks/responders/linear.d.ts.map +0 -1
  406. package/dist/cloud/webhooks/responders/linear.js.map +0 -1
  407. package/dist/cloud/webhooks/responders/slack.d.ts.map +0 -1
  408. package/dist/cloud/webhooks/responders/slack.js.map +0 -1
  409. package/dist/cloud/webhooks/router.d.ts.map +0 -1
  410. package/dist/cloud/webhooks/router.js.map +0 -1
  411. package/dist/cloud/webhooks/rules-engine.d.ts.map +0 -1
  412. package/dist/cloud/webhooks/rules-engine.js.map +0 -1
  413. package/dist/cloud/webhooks/types.d.ts.map +0 -1
  414. package/dist/cloud/webhooks/types.js.map +0 -1
  415. package/dist/continuity/formatter.d.ts.map +0 -1
  416. package/dist/continuity/formatter.js.map +0 -1
  417. package/dist/continuity/handoff-store.d.ts.map +0 -1
  418. package/dist/continuity/handoff-store.js.map +0 -1
  419. package/dist/continuity/index.d.ts.map +0 -1
  420. package/dist/continuity/index.js.map +0 -1
  421. package/dist/continuity/ledger-store.d.ts.map +0 -1
  422. package/dist/continuity/ledger-store.js.map +0 -1
  423. package/dist/continuity/manager.d.ts.map +0 -1
  424. package/dist/continuity/manager.js.map +0 -1
  425. package/dist/continuity/parser.d.ts.map +0 -1
  426. package/dist/continuity/parser.js.map +0 -1
  427. package/dist/continuity/types.d.ts.map +0 -1
  428. package/dist/continuity/types.js.map +0 -1
  429. package/dist/daemon/agent-manager.d.ts.map +0 -1
  430. package/dist/daemon/agent-manager.js.map +0 -1
  431. package/dist/daemon/agent-registry.d.ts.map +0 -1
  432. package/dist/daemon/agent-registry.js.map +0 -1
  433. package/dist/daemon/api.d.ts.map +0 -1
  434. package/dist/daemon/api.js.map +0 -1
  435. package/dist/daemon/auth.d.ts.map +0 -1
  436. package/dist/daemon/auth.js.map +0 -1
  437. package/dist/daemon/cli-auth.d.ts.map +0 -1
  438. package/dist/daemon/cli-auth.js.map +0 -1
  439. package/dist/daemon/cloud-sync.d.ts.map +0 -1
  440. package/dist/daemon/cloud-sync.js.map +0 -1
  441. package/dist/daemon/connection.d.ts.map +0 -1
  442. package/dist/daemon/connection.js.map +0 -1
  443. package/dist/daemon/index.d.ts.map +0 -1
  444. package/dist/daemon/index.js.map +0 -1
  445. package/dist/daemon/orchestrator.d.ts.map +0 -1
  446. package/dist/daemon/orchestrator.js.map +0 -1
  447. package/dist/daemon/registry.d.ts.map +0 -1
  448. package/dist/daemon/registry.js.map +0 -1
  449. package/dist/daemon/router.d.ts.map +0 -1
  450. package/dist/daemon/router.js.map +0 -1
  451. package/dist/daemon/server.d.ts.map +0 -1
  452. package/dist/daemon/server.js.map +0 -1
  453. package/dist/daemon/services/browser-testing.d.ts.map +0 -1
  454. package/dist/daemon/services/browser-testing.js.map +0 -1
  455. package/dist/daemon/services/container-spawner.d.ts.map +0 -1
  456. package/dist/daemon/services/container-spawner.js.map +0 -1
  457. package/dist/daemon/types.d.ts.map +0 -1
  458. package/dist/daemon/types.js.map +0 -1
  459. package/dist/daemon/workspace-manager.d.ts.map +0 -1
  460. package/dist/daemon/workspace-manager.js.map +0 -1
  461. package/dist/dashboard/out/_next/static/H5aWG0udPB4iOUIl_gytz/_ssgManifest.js +0 -1
  462. package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +0 -1
  463. package/dist/dashboard/out/_next/static/chunks/724-73c1ee5f60abe860.js +0 -9
  464. package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +0 -1
  465. package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +0 -1
  466. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1081dd190a331a91.js +0 -1
  467. package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +0 -1
  468. package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +0 -1
  469. package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +0 -1
  470. package/dist/dashboard-server/metrics.d.ts.map +0 -1
  471. package/dist/dashboard-server/metrics.js.map +0 -1
  472. package/dist/dashboard-server/needs-attention.d.ts.map +0 -1
  473. package/dist/dashboard-server/needs-attention.js.map +0 -1
  474. package/dist/dashboard-server/server.d.ts.map +0 -1
  475. package/dist/dashboard-server/server.js.map +0 -1
  476. package/dist/dashboard-server/start.d.ts.map +0 -1
  477. package/dist/dashboard-server/start.js.map +0 -1
  478. package/dist/hooks/emitter.d.ts.map +0 -1
  479. package/dist/hooks/emitter.js.map +0 -1
  480. package/dist/hooks/inbox-check/hook.d.ts.map +0 -1
  481. package/dist/hooks/inbox-check/hook.js.map +0 -1
  482. package/dist/hooks/inbox-check/index.d.ts.map +0 -1
  483. package/dist/hooks/inbox-check/index.js.map +0 -1
  484. package/dist/hooks/inbox-check/types.d.ts.map +0 -1
  485. package/dist/hooks/inbox-check/types.js.map +0 -1
  486. package/dist/hooks/inbox-check/utils.d.ts.map +0 -1
  487. package/dist/hooks/inbox-check/utils.js.map +0 -1
  488. package/dist/hooks/index.d.ts.map +0 -1
  489. package/dist/hooks/index.js.map +0 -1
  490. package/dist/hooks/registry.d.ts.map +0 -1
  491. package/dist/hooks/registry.js.map +0 -1
  492. package/dist/hooks/trajectory-hooks.d.ts.map +0 -1
  493. package/dist/hooks/trajectory-hooks.js.map +0 -1
  494. package/dist/hooks/types.d.ts.map +0 -1
  495. package/dist/hooks/types.js.map +0 -1
  496. package/dist/index.d.ts.map +0 -1
  497. package/dist/index.js.map +0 -1
  498. package/dist/memory/adapters/index.d.ts.map +0 -1
  499. package/dist/memory/adapters/index.js.map +0 -1
  500. package/dist/memory/adapters/inmemory.d.ts.map +0 -1
  501. package/dist/memory/adapters/inmemory.js.map +0 -1
  502. package/dist/memory/adapters/supermemory.d.ts.map +0 -1
  503. package/dist/memory/adapters/supermemory.js.map +0 -1
  504. package/dist/memory/factory.d.ts.map +0 -1
  505. package/dist/memory/factory.js.map +0 -1
  506. package/dist/memory/index.d.ts.map +0 -1
  507. package/dist/memory/index.js.map +0 -1
  508. package/dist/memory/memory-hooks.d.ts.map +0 -1
  509. package/dist/memory/memory-hooks.js.map +0 -1
  510. package/dist/memory/service.d.ts.map +0 -1
  511. package/dist/memory/service.js.map +0 -1
  512. package/dist/memory/types.d.ts.map +0 -1
  513. package/dist/memory/types.js.map +0 -1
  514. package/dist/policy/agent-policy.d.ts.map +0 -1
  515. package/dist/policy/agent-policy.js.map +0 -1
  516. package/dist/policy/cloud-policy-fetcher.d.ts.map +0 -1
  517. package/dist/policy/cloud-policy-fetcher.js.map +0 -1
  518. package/dist/protocol/framing.d.ts.map +0 -1
  519. package/dist/protocol/framing.js.map +0 -1
  520. package/dist/protocol/index.d.ts.map +0 -1
  521. package/dist/protocol/index.js.map +0 -1
  522. package/dist/protocol/types.d.ts.map +0 -1
  523. package/dist/protocol/types.js.map +0 -1
  524. package/dist/resiliency/context-persistence.d.ts.map +0 -1
  525. package/dist/resiliency/context-persistence.js.map +0 -1
  526. package/dist/resiliency/crash-insights.d.ts.map +0 -1
  527. package/dist/resiliency/crash-insights.js.map +0 -1
  528. package/dist/resiliency/gossip-health.d.ts.map +0 -1
  529. package/dist/resiliency/gossip-health.js.map +0 -1
  530. package/dist/resiliency/health-monitor.d.ts.map +0 -1
  531. package/dist/resiliency/health-monitor.js.map +0 -1
  532. package/dist/resiliency/index.d.ts.map +0 -1
  533. package/dist/resiliency/index.js.map +0 -1
  534. package/dist/resiliency/leader-watchdog.d.ts.map +0 -1
  535. package/dist/resiliency/leader-watchdog.js.map +0 -1
  536. package/dist/resiliency/logger.d.ts.map +0 -1
  537. package/dist/resiliency/logger.js.map +0 -1
  538. package/dist/resiliency/memory-monitor.d.ts.map +0 -1
  539. package/dist/resiliency/memory-monitor.js.map +0 -1
  540. package/dist/resiliency/metrics.d.ts.map +0 -1
  541. package/dist/resiliency/metrics.js.map +0 -1
  542. package/dist/resiliency/provider-context.d.ts.map +0 -1
  543. package/dist/resiliency/provider-context.js.map +0 -1
  544. package/dist/resiliency/stateless-lead.d.ts.map +0 -1
  545. package/dist/resiliency/stateless-lead.js.map +0 -1
  546. package/dist/resiliency/supervisor.d.ts.map +0 -1
  547. package/dist/resiliency/supervisor.js.map +0 -1
  548. package/dist/shared/cli-auth-config.d.ts.map +0 -1
  549. package/dist/shared/cli-auth-config.js.map +0 -1
  550. package/dist/state/agent-state.d.ts.map +0 -1
  551. package/dist/state/agent-state.js.map +0 -1
  552. package/dist/storage/adapter.d.ts.map +0 -1
  553. package/dist/storage/adapter.js.map +0 -1
  554. package/dist/storage/sqlite-adapter.d.ts.map +0 -1
  555. package/dist/storage/sqlite-adapter.js.map +0 -1
  556. package/dist/trajectory/config.d.ts.map +0 -1
  557. package/dist/trajectory/config.js.map +0 -1
  558. package/dist/trajectory/index.d.ts.map +0 -1
  559. package/dist/trajectory/index.js.map +0 -1
  560. package/dist/trajectory/integration.d.ts.map +0 -1
  561. package/dist/trajectory/integration.js.map +0 -1
  562. package/dist/utils/agent-config.d.ts.map +0 -1
  563. package/dist/utils/agent-config.js.map +0 -1
  564. package/dist/utils/command-resolver.d.ts.map +0 -1
  565. package/dist/utils/command-resolver.js.map +0 -1
  566. package/dist/utils/index.d.ts.map +0 -1
  567. package/dist/utils/index.js.map +0 -1
  568. package/dist/utils/logger.d.ts.map +0 -1
  569. package/dist/utils/logger.js.map +0 -1
  570. package/dist/utils/name-generator.d.ts.map +0 -1
  571. package/dist/utils/name-generator.js.map +0 -1
  572. package/dist/utils/project-namespace.d.ts.map +0 -1
  573. package/dist/utils/project-namespace.js.map +0 -1
  574. package/dist/utils/tmux-resolver.d.ts.map +0 -1
  575. package/dist/utils/tmux-resolver.js.map +0 -1
  576. package/dist/utils/update-checker.d.ts.map +0 -1
  577. package/dist/utils/update-checker.js.map +0 -1
  578. package/dist/wrapper/client.d.ts.map +0 -1
  579. package/dist/wrapper/client.js.map +0 -1
  580. package/dist/wrapper/inbox.d.ts.map +0 -1
  581. package/dist/wrapper/inbox.js.map +0 -1
  582. package/dist/wrapper/index.d.ts.map +0 -1
  583. package/dist/wrapper/index.js.map +0 -1
  584. package/dist/wrapper/parser.d.ts.map +0 -1
  585. package/dist/wrapper/parser.js.map +0 -1
  586. package/dist/wrapper/pty-wrapper.d.ts.map +0 -1
  587. package/dist/wrapper/pty-wrapper.js.map +0 -1
  588. package/dist/wrapper/shared.d.ts.map +0 -1
  589. package/dist/wrapper/shared.js.map +0 -1
  590. package/dist/wrapper/tmux-wrapper.d.ts.map +0 -1
  591. package/dist/wrapper/tmux-wrapper.js.map +0 -1
  592. package/docs/AGENTS.md +0 -513
  593. package/docs/ARCHITECTURE_DECISIONS.md +0 -175
  594. package/docs/CLOUD-ARCHITECTURE.md +0 -804
  595. package/docs/CLOUD-ONBOARDING-DESIGN.md +0 -1983
  596. package/docs/CONTRIBUTING.md +0 -151
  597. package/docs/HOOKS_API.md +0 -394
  598. package/docs/INTEGRATION-GUIDE.md +0 -926
  599. package/docs/PROTOCOL.md +0 -325
  600. package/docs/WRAPPER_EVENTS.md +0 -358
  601. package/docs/agent-policy-snippet.md +0 -40
  602. package/docs/agent-relay-protocol.md +0 -238
  603. package/docs/agent-relay-snippet.md +0 -174
  604. package/docs/archive/CHANGELOG.md +0 -11
  605. package/docs/archive/CLI-SIMPLIFICATION-COMPLETE.md +0 -48
  606. package/docs/archive/DESIGN_BRIDGE_STAFFING.md +0 -878
  607. package/docs/archive/DESIGN_V2.md +0 -1079
  608. package/docs/archive/EXECUTIVE_SUMMARY.md +0 -358
  609. package/docs/archive/MONETIZATION.md +0 -1679
  610. package/docs/archive/PROPOSAL-trajectories.md +0 -1582
  611. package/docs/archive/ROADMAP.md +0 -329
  612. package/docs/archive/SCALING_ANALYSIS.md +0 -280
  613. package/docs/archive/TESTING_PRESENCE_FEATURES.md +0 -327
  614. package/docs/archive/TMUX_IMPLEMENTATION_NOTES.md +0 -364
  615. package/docs/archive/TMUX_IMPROVEMENTS.md +0 -968
  616. package/docs/archive/dashboard-v2-plan.md +0 -179
  617. package/docs/archive/removable-code-analysis.md +0 -24
  618. package/docs/competitive/GASTOWN.md +0 -451
  619. package/docs/competitive/MCP_AGENT_MAIL.md +0 -389
  620. package/docs/competitive/OVERVIEW.md +0 -898
  621. package/docs/competitive/README.md +0 -34
  622. package/docs/competitive/TMUX_ORCHESTRATOR.md +0 -605
  623. package/docs/dashboard.png +0 -0
  624. package/docs/design/ci-failure-webhooks.md +0 -812
  625. package/docs/design/comprehensive-integrations.md +0 -238
  626. package/docs/design/e2b-sandbox-integration.md +0 -504
  627. package/docs/design/github-app-permissions.md +0 -264
  628. package/docs/guides/CLOUD.md +0 -236
  629. package/docs/guides/LOCAL.md +0 -535
  630. package/docs/guides/SELF-HOSTED.md +0 -494
  631. package/docs/local-testing.md +0 -428
  632. package/docs/proposals/continuous-claude-integration.md +0 -622
  633. package/docs/proposals/custom-commands.md +0 -368
  634. package/docs/proposals/shadow-as-subagent.md +0 -765
  635. package/docs/proposals/slack-bot-integration.md +0 -1457
  636. package/docs/tasks/global-skills-system.tasks.md +0 -230
  637. package/docs/tasks/webhook-integrations.tasks.md +0 -184
  638. package/docs/tasks/workspace-capabilities.tasks.md +0 -121
  639. package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +0 -366
  640. package/scripts/cloud-setup.sh +0 -96
  641. package/scripts/dev/PUBLIC_RELEASE_PLAN.md +0 -88
  642. package/scripts/dev/dev-team-setup.sh +0 -431
  643. package/scripts/e2e-test.sh +0 -119
  644. package/scripts/games/game-protocol.md +0 -79
  645. package/scripts/games/hearts-setup.sh +0 -264
  646. package/scripts/manual-qa.sh +0 -293
  647. package/scripts/run-cloud-qa.sh +0 -220
  648. package/scripts/test-cli-auth/Dockerfile +0 -44
  649. package/scripts/test-cli-auth/Dockerfile.real +0 -79
  650. package/scripts/test-cli-auth/README.md +0 -286
  651. package/scripts/test-cli-auth/ci-test-real-clis.ts +0 -251
  652. package/scripts/test-cli-auth/ci-test-runner.ts +0 -263
  653. package/scripts/test-cli-auth/mock-cli.sh +0 -147
  654. package/scripts/test-cli-auth/package.json +0 -14
  655. package/scripts/test-cli-auth/test-oauth-flow.ts +0 -220
  656. package/scripts/test-pty-input-auto.js +0 -222
  657. package/scripts/test-pty-input.js +0 -150
  658. package/scripts/tictactoe-setup.sh +0 -181
  659. /package/dist/dashboard/out/_next/static/{H5aWG0udPB4iOUIl_gytz → T1tgCqVWHFIkV7ClEtzD7}/_buildManifest.js +0 -0
  660. /package/dist/dashboard/out/_next/static/chunks/{117-b100311aff8d5c61.js → 117-f7b8ab0809342e77.js} +0 -0
  661. /package/dist/dashboard/out/_next/static/chunks/{648-a13d3c2b1be45466.js → 648-5cc6e1921389a58a.js} +0 -0
  662. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-a4973f3e3c82fb67.js → page-53b8a69f76db17d0.js} +0 -0
  663. /package/dist/dashboard/out/_next/static/chunks/app/connect-repos/{page-dc2e3a1a22478efc.js → page-f45ecbc3e06134fc.js} +0 -0
  664. /package/dist/dashboard/out/_next/static/chunks/app/history/{page-56a8b4616a90dc43.js → page-8c8bed33beb2bf1c.js} +0 -0
  665. /package/dist/dashboard/out/_next/static/chunks/app/login/{page-3eac37ea6f5dd153.js → page-16f3b49e55b1e0ed.js} +0 -0
  666. /package/dist/dashboard/out/_next/static/chunks/app/pricing/{page-4d72d5a5d8a9b618.js → page-982a7000fee44014.js} +0 -0
  667. /package/dist/dashboard/out/_next/static/chunks/app/signup/{page-fee4ed1709070bcd.js → page-547dd0ca55ecd0ba.js} +0 -0
  668. /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-bf46c09eb57e019c.js → fd9d1056-609918ca7b6280bb.js} +0 -0
@@ -0,0 +1,32 @@
1
+ # Trajectory: Implement GitHub repo permission API via Nango for dashboard access
2
+
3
+ > **Status:** ✅ Completed
4
+ > **Task:** agent-relay-460
5
+ > **Confidence:** 90%
6
+ > **Started:** January 5, 2026 at 10:10 PM
7
+ > **Completed:** January 5, 2026 at 10:13 PM
8
+
9
+ ---
10
+
11
+ ## Summary
12
+
13
+ Implemented GitHub repo permission API via Nango for dashboard access control. Added checkUserRepoAccess() and listUserAccessibleRepos() to NangoService, plus three API endpoints: GET /api/repos/check-access/:owner/:repo, GET /api/repos/accessible, POST /api/repos/check-access-bulk
14
+
15
+ **Approach:** Standard approach
16
+
17
+ ---
18
+
19
+ ## Key Decisions
20
+
21
+ ### Implemented three new Nango-based API endpoints for GitHub repo permissions
22
+ - **Chose:** Implemented three new Nango-based API endpoints for GitHub repo permissions
23
+ - **Reasoning:** Used user's OAuth connection via Nango proxy to check repo access. Endpoints: /api/repos/check-access/:owner/:repo, /api/repos/accessible, /api/repos/check-access-bulk
24
+
25
+ ---
26
+
27
+ ## Chapters
28
+
29
+ ### 1. Work
30
+ *Agent: default*
31
+
32
+ - Implemented three new Nango-based API endpoints for GitHub repo permissions: Implemented three new Nango-based API endpoints for GitHub repo permissions
@@ -0,0 +1,84 @@
1
+ {
2
+ "id": "traj_tmux_orchestrator_analysis",
3
+ "title": "Tmux-Orchestrator competitive analysis",
4
+ "task": "analyze-tmux-orchestrator",
5
+ "status": "completed",
6
+ "startedAt": "2026-01-04T09:00:00.000Z",
7
+ "completedAt": "2026-01-04T09:30:00.000Z",
8
+ "confidence": 0.9,
9
+ "summary": "Competitive analysis of Tmux-Orchestrator validated our architecture - real-time messaging + continuity already covers their solutions",
10
+ "decisions": [
11
+ {
12
+ "decision": "Continuity context already works on spawn - no new feature needed",
13
+ "reasoning": "PtyWrapper.injectContinuityContext() already loads ledger + handoff and injects on agent spawn",
14
+ "timestamp": "2026-01-04T09:15:00.000Z"
15
+ },
16
+ {
17
+ "decision": "Use trajectories for learnings instead of separate learning repository",
18
+ "reasoning": "Trajectories already capture learnings via trail complete --learnings. Just need search functionality.",
19
+ "timestamp": "2026-01-04T09:20:00.000Z"
20
+ },
21
+ {
22
+ "decision": "Self-scheduling is the key missing feature for 24/7 autonomy",
23
+ "reasoning": "Tmux-Orchestrator's schedule_with_note.sh enables agents to wake themselves up. We need ->relay:schedule command.",
24
+ "timestamp": "2026-01-04T09:25:00.000Z"
25
+ },
26
+ {
27
+ "decision": "Skip git commit tracking - requires git worktree architecture we don't have",
28
+ "reasoning": "Tmux-Orchestrator's 30-minute commit rule assumes per-agent git worktrees. Not applicable to our current single-repo model.",
29
+ "timestamp": "2026-01-04T09:28:00.000Z"
30
+ },
31
+ {
32
+ "decision": "No beads needed - our architecture already covers their solutions",
33
+ "reasoning": "Self-scheduling solved by real-time messaging (agents wake each other). Context notes solved by continuity. Analysis validated our approach rather than finding gaps.",
34
+ "timestamp": "2026-01-04T09:35:00.000Z"
35
+ }
36
+ ],
37
+ "learnings": [
38
+ "Tmux-Orchestrator pioneered 24/7 autonomous agent operation using tmux persistence + self-scheduling",
39
+ "Real-time messaging replaces scheduling - agents can wake each other instantly instead of scheduling delayed self-messages",
40
+ "Our continuity system (ledger + handoff injection on spawn) covers their context notes pattern",
41
+ "Fixed 3-tier hierarchy (Orchestrator→PM→Engineer) solves context window limits but is less flexible than relay's any-topology approach",
42
+ "Shell script + timing delays (~500ms) is simpler but 100x slower than our Unix socket (<5ms)",
43
+ "Self-scheduling with context notes is the killer feature for autonomous operation",
44
+ "Our continuity system (ledger + handoff) already covers spawn context injection",
45
+ "Trajectory learnings field already exists - just need search/index functionality"
46
+ ],
47
+ "chapters": [
48
+ {
49
+ "phase": "plan",
50
+ "agent": "default",
51
+ "events": [
52
+ "Fetched Tmux-Orchestrator README and CLAUDE.md from GitHub",
53
+ "Reviewed existing competitive analyses format (GASTOWN.md, MCP_AGENT_MAIL.md)"
54
+ ]
55
+ },
56
+ {
57
+ "phase": "execute",
58
+ "agent": "default",
59
+ "events": [
60
+ "Created docs/competitive/TMUX_ORCHESTRATOR.md with full analysis",
61
+ "Updated OVERVIEW.md comparison matrix with Tmux-Orchestrator",
62
+ "Updated README.md with new analysis link"
63
+ ]
64
+ },
65
+ {
66
+ "phase": "execute",
67
+ "agent": "default",
68
+ "events": [
69
+ "Created 5 beads for features to adopt",
70
+ "Reviewed existing continuity system - found spawn context already works",
71
+ "Updated beads to reflect existing functionality"
72
+ ]
73
+ },
74
+ {
75
+ "phase": "review",
76
+ "agent": "default",
77
+ "events": [
78
+ "Confirmed PtyWrapper.injectContinuityContext() handles spawn context",
79
+ "Confirmed trajectories already capture learnings field",
80
+ "Identified self-scheduling as the truly new feature needed"
81
+ ]
82
+ }
83
+ ]
84
+ }
@@ -0,0 +1,109 @@
1
+ # Trajectory: Tmux-Orchestrator competitive analysis
2
+
3
+ > **Status:** Completed
4
+ > **Task:** analyze-tmux-orchestrator
5
+ > **Started:** January 4, 2026 at 09:00 AM
6
+ > **Completed:** January 4, 2026 at 09:30 AM
7
+ > **Confidence:** 0.9
8
+
9
+ ---
10
+
11
+ ## Summary
12
+
13
+ Comprehensive competitive analysis of Tmux-Orchestrator vs Agent Relay, identified key features to adopt.
14
+
15
+ ---
16
+
17
+ ## Key Decisions
18
+
19
+ ### 1. Continuity context already works on spawn - no new feature needed
20
+ - **Reasoning:** PtyWrapper.injectContinuityContext() already loads ledger + handoff and injects on agent spawn
21
+
22
+ ### 2. Use trajectories for learnings instead of separate learning repository
23
+ - **Reasoning:** Trajectories already capture learnings via trail complete --learnings. Just need search functionality.
24
+
25
+ ### 3. Self-scheduling is the key missing feature for 24/7 autonomy
26
+ - **Reasoning:** Tmux-Orchestrator's schedule_with_note.sh enables agents to wake themselves up. We need ->relay:schedule command.
27
+
28
+ ### 4. Skip git commit tracking - requires git worktree architecture we don't have
29
+ - **Reasoning:** Tmux-Orchestrator's 30-minute commit rule assumes per-agent git worktrees. Not applicable to our current single-repo model.
30
+
31
+ ---
32
+
33
+ ## Learnings
34
+
35
+ 1. **Tmux-Orchestrator pioneered 24/7 autonomous agent operation** using tmux persistence + self-scheduling
36
+
37
+ 2. **Git commit tracking requires per-agent worktrees** - their 30-min rule isn't applicable without that architecture
38
+
39
+ 3. **Fixed 3-tier hierarchy** (Orchestrator→PM→Engineer) solves context window limits but is less flexible than relay's any-topology approach
40
+
41
+ 4. **Shell script + timing delays (~500ms)** is simpler but 100x slower than our Unix socket (<5ms)
42
+
43
+ 5. **Self-scheduling with context notes** is the killer feature for autonomous operation
44
+
45
+ 6. **Our continuity system already covers spawn context** - ledger + handoff injection works
46
+
47
+ 7. **Trajectory learnings field already exists** - just need search/index functionality
48
+
49
+ ---
50
+
51
+ ## Chapters
52
+
53
+ ### 1. Plan
54
+ *Agent: default*
55
+
56
+ - Fetched Tmux-Orchestrator README and CLAUDE.md from GitHub
57
+ - Reviewed existing competitive analyses format (GASTOWN.md, MCP_AGENT_MAIL.md)
58
+
59
+ ### 2. Execute
60
+ *Agent: default*
61
+
62
+ - Created docs/competitive/TMUX_ORCHESTRATOR.md with full analysis
63
+ - Updated OVERVIEW.md comparison matrix with Tmux-Orchestrator
64
+ - Updated README.md with new analysis link
65
+
66
+ ### 3. Execute
67
+ *Agent: default*
68
+
69
+ - Created 5 beads for features to adopt
70
+ - Reviewed existing continuity system - found spawn context already works
71
+ - Updated beads to reflect existing functionality
72
+
73
+ ### 4. Review
74
+ *Agent: default*
75
+
76
+ - Confirmed PtyWrapper.injectContinuityContext() handles spawn context
77
+ - Confirmed trajectories already capture learnings field
78
+ - Identified self-scheduling as the truly new feature needed
79
+
80
+ ---
81
+
82
+ ## Beads Created
83
+
84
+ **None** - Analysis validated our existing architecture covers their solutions.
85
+
86
+ ### What They Built vs What We Have
87
+
88
+ | Their Solution | Our Solution |
89
+ |----------------|--------------|
90
+ | Self-scheduling (wake up) | Real-time messaging (agents wake each other) |
91
+ | Context notes for spawn | Continuity injection (ledger + handoff) |
92
+ | Git commit tracking | N/A (needs worktrees) |
93
+ | LEARNINGS.md | Trajectories with learnings field |
94
+ | ~500ms timing delays | <5ms Unix socket |
95
+
96
+ ### Key Insight
97
+ Tmux-Orchestrator pioneered autonomous agents with shell scripts. Our architecture (real-time messaging + continuity) is the next evolution - we've already solved their problems more elegantly.
98
+
99
+ ---
100
+
101
+ ## Files Changed
102
+
103
+ - `docs/competitive/TMUX_ORCHESTRATOR.md` - New analysis (600+ lines)
104
+ - `docs/competitive/README.md` - Added to table
105
+ - `docs/competitive/OVERVIEW.md` - Added to comparison matrix
106
+
107
+ ---
108
+
109
+ *Trajectory completed 2026-01-04*
@@ -0,0 +1,53 @@
1
+ {
2
+ "id": "traj_u9n9eqasw16k",
3
+ "version": 1,
4
+ "task": {
5
+ "title": "Backend trajectory data-loading fix review",
6
+ "source": {
7
+ "system": "plain",
8
+ "id": "backend-review"
9
+ }
10
+ },
11
+ "status": "completed",
12
+ "startedAt": "2026-01-03T14:40:11.376Z",
13
+ "agents": [
14
+ {
15
+ "name": "CodeReviewer",
16
+ "role": "lead",
17
+ "joinedAt": "2026-01-03T14:40:11.377Z"
18
+ }
19
+ ],
20
+ "chapters": [
21
+ {
22
+ "id": "chap_xfg9tvbm40wy",
23
+ "title": "Work",
24
+ "agentName": "default",
25
+ "startedAt": "2026-01-03T14:41:43.249Z",
26
+ "events": [
27
+ {
28
+ "ts": 1767451303250,
29
+ "type": "decision",
30
+ "content": "Active trajectories lose status coloring: Active trajectories lose status coloring",
31
+ "raw": {
32
+ "question": "Active trajectories lose status coloring",
33
+ "chosen": "Active trajectories lose status coloring",
34
+ "alternatives": [],
35
+ "reasoning": "mapEventStatus doesn't map 'active' so in-progress runs show no status indicator"
36
+ },
37
+ "significance": "high"
38
+ }
39
+ ],
40
+ "endedAt": "2026-01-03T14:41:50.001Z"
41
+ }
42
+ ],
43
+ "commits": [],
44
+ "filesChanged": [],
45
+ "projectId": "/Users/khaliqgant/Projects/agent-workforce/relay",
46
+ "tags": [],
47
+ "completedAt": "2026-01-03T14:41:50.001Z",
48
+ "retrospective": {
49
+ "summary": "Reviewed backend filesystem trajectory loading; flagged missing 'active' status mapping",
50
+ "approach": "Standard approach",
51
+ "confidence": 0.78
52
+ }
53
+ }
@@ -0,0 +1,32 @@
1
+ # Trajectory: Backend trajectory data-loading fix review
2
+
3
+ > **Status:** ✅ Completed
4
+ > **Task:** backend-review
5
+ > **Confidence:** 78%
6
+ > **Started:** January 3, 2026 at 03:40 PM
7
+ > **Completed:** January 3, 2026 at 03:41 PM
8
+
9
+ ---
10
+
11
+ ## Summary
12
+
13
+ Reviewed backend filesystem trajectory loading; flagged missing 'active' status mapping
14
+
15
+ **Approach:** Standard approach
16
+
17
+ ---
18
+
19
+ ## Key Decisions
20
+
21
+ ### Active trajectories lose status coloring
22
+ - **Chose:** Active trajectories lose status coloring
23
+ - **Reasoning:** mapEventStatus doesn't map 'active' so in-progress runs show no status indicator
24
+
25
+ ---
26
+
27
+ ## Chapters
28
+
29
+ ### 1. Work
30
+ *Agent: default*
31
+
32
+ - Active trajectories lose status coloring: Active trajectories lose status coloring
@@ -0,0 +1,53 @@
1
+ {
2
+ "id": "traj_ub8csuv3lcv4",
3
+ "version": 1,
4
+ "task": {
5
+ "title": "Fix WebSocket disconnections for workspace instances",
6
+ "source": {
7
+ "system": "plain",
8
+ "id": "workspace-websocket-stability"
9
+ }
10
+ },
11
+ "status": "completed",
12
+ "startedAt": "2026-01-06T18:13:23.603Z",
13
+ "agents": [
14
+ {
15
+ "name": "default",
16
+ "role": "lead",
17
+ "joinedAt": "2026-01-06T18:13:35.723Z"
18
+ }
19
+ ],
20
+ "chapters": [
21
+ {
22
+ "id": "chap_e4vj0j8ig7ma",
23
+ "title": "Work",
24
+ "agentName": "default",
25
+ "startedAt": "2026-01-06T18:13:35.723Z",
26
+ "events": [
27
+ {
28
+ "ts": 1767723215725,
29
+ "type": "decision",
30
+ "content": "Add ping/pong keepalive to main and bridge WebSockets: Add ping/pong keepalive to main and bridge WebSockets",
31
+ "raw": {
32
+ "question": "Add ping/pong keepalive to main and bridge WebSockets",
33
+ "chosen": "Add ping/pong keepalive to main and bridge WebSockets",
34
+ "alternatives": [],
35
+ "reasoning": "Main dashboard and bridge WebSocket endpoints were missing ping/pong keepalive, while logs and presence endpoints had it. Without keepalive, TCP/proxy timeouts kill idle connections (typically 60-120s)."
36
+ },
37
+ "significance": "high"
38
+ }
39
+ ],
40
+ "endedAt": "2026-01-06T18:16:51.462Z"
41
+ }
42
+ ],
43
+ "commits": [],
44
+ "filesChanged": [],
45
+ "projectId": "/home/user/relay",
46
+ "tags": [],
47
+ "completedAt": "2026-01-06T18:16:51.462Z",
48
+ "retrospective": {
49
+ "summary": "Added ping/pong keepalive to main and bridge WebSockets to fix connection instability",
50
+ "approach": "Standard approach",
51
+ "confidence": 0.9
52
+ }
53
+ }
@@ -0,0 +1,32 @@
1
+ # Trajectory: Fix WebSocket disconnections for workspace instances
2
+
3
+ > **Status:** ✅ Completed
4
+ > **Task:** workspace-websocket-stability
5
+ > **Confidence:** 90%
6
+ > **Started:** January 6, 2026 at 06:13 PM
7
+ > **Completed:** January 6, 2026 at 06:16 PM
8
+
9
+ ---
10
+
11
+ ## Summary
12
+
13
+ Added ping/pong keepalive to main and bridge WebSockets to fix connection instability
14
+
15
+ **Approach:** Standard approach
16
+
17
+ ---
18
+
19
+ ## Key Decisions
20
+
21
+ ### Add ping/pong keepalive to main and bridge WebSockets
22
+ - **Chose:** Add ping/pong keepalive to main and bridge WebSockets
23
+ - **Reasoning:** Main dashboard and bridge WebSocket endpoints were missing ping/pong keepalive, while logs and presence endpoints had it. Without keepalive, TCP/proxy timeouts kill idle connections (typically 60-120s).
24
+
25
+ ---
26
+
27
+ ## Chapters
28
+
29
+ ### 1. Work
30
+ *Agent: default*
31
+
32
+ - Add ping/pong keepalive to main and bridge WebSockets: Add ping/pong keepalive to main and bridge WebSockets
@@ -0,0 +1,186 @@
1
+ {
2
+ "id": "traj_uc29tlso8i9s",
3
+ "version": 1,
4
+ "task": {
5
+ "title": "Production-ready SSH tunneling for Codex OAuth with security hardening"
6
+ },
7
+ "status": "completed",
8
+ "startedAt": "2026-01-07T10:08:04.299Z",
9
+ "agents": [
10
+ {
11
+ "name": "khaliqgant",
12
+ "role": "lead",
13
+ "joinedAt": "2026-01-07T10:08:04.300Z"
14
+ },
15
+ {
16
+ "name": "default",
17
+ "role": "contributor",
18
+ "joinedAt": "2026-01-07T10:08:04.710Z"
19
+ }
20
+ ],
21
+ "chapters": [
22
+ {
23
+ "id": "chap_8omowh9k21wa",
24
+ "title": "Work",
25
+ "agentName": "default",
26
+ "startedAt": "2026-01-07T10:08:04.710Z",
27
+ "events": [
28
+ {
29
+ "ts": 1767780484710,
30
+ "type": "decision",
31
+ "content": "Changed UsageBanner intro bonus from purple to cyan: Changed UsageBanner intro bonus from purple to cyan",
32
+ "raw": {
33
+ "question": "Changed UsageBanner intro bonus from purple to cyan",
34
+ "chosen": "Changed UsageBanner intro bonus from purple to cyan",
35
+ "alternatives": [],
36
+ "reasoning": "Brand consistency - cyan is primary accent color, purple was off-brand"
37
+ },
38
+ "significance": "high"
39
+ },
40
+ {
41
+ "ts": 1767780493469,
42
+ "type": "decision",
43
+ "content": "Added landing page auth check - shows Go to App when logged in: Added landing page auth check - shows Go to App when logged in",
44
+ "raw": {
45
+ "question": "Added landing page auth check - shows Go to App when logged in",
46
+ "chosen": "Added landing page auth check - shows Go to App when logged in",
47
+ "alternatives": [],
48
+ "reasoning": "Better UX for returning users who shouldn't see Sign In buttons"
49
+ },
50
+ "significance": "high"
51
+ },
52
+ {
53
+ "ts": 1767780494224,
54
+ "type": "decision",
55
+ "content": "Expose SSH port 2222 publicly on Fly.io via TCP service: Expose SSH port 2222 publicly on Fly.io via TCP service",
56
+ "raw": {
57
+ "question": "Expose SSH port 2222 publicly on Fly.io via TCP service",
58
+ "chosen": "Expose SSH port 2222 publicly on Fly.io via TCP service",
59
+ "alternatives": [],
60
+ "reasoning": "Internal .internal hostnames aren't routable from user machines. Public SSH with unique passwords per workspace is secure enough for production."
61
+ },
62
+ "significance": "high"
63
+ },
64
+ {
65
+ "ts": 1767780500783,
66
+ "type": "decision",
67
+ "content": "Updated CTA terminal to show realistic CLI flow (cloud link + send): Updated CTA terminal to show realistic CLI flow (cloud link + send)",
68
+ "raw": {
69
+ "question": "Updated CTA terminal to show realistic CLI flow (cloud link + send)",
70
+ "chosen": "Updated CTA terminal to show realistic CLI flow (cloud link + send)",
71
+ "alternatives": [],
72
+ "reasoning": "Previous mock commands were inaccurate. Now shows actual agent-relay cloud commands"
73
+ },
74
+ "significance": "high"
75
+ },
76
+ {
77
+ "ts": 1767780501007,
78
+ "type": "decision",
79
+ "content": "Use deterministic password derivation instead of storage: Use deterministic password derivation instead of storage",
80
+ "raw": {
81
+ "question": "Use deterministic password derivation instead of storage",
82
+ "chosen": "Use deterministic password derivation instead of storage",
83
+ "alternatives": [],
84
+ "reasoning": "SHA-256(workspaceId + salt) produces unique passwords without database storage. Both cloud server and container can derive the same password independently. 96 bits of entropy is sufficient."
85
+ },
86
+ "significance": "high"
87
+ },
88
+ {
89
+ "ts": 1767780508469,
90
+ "type": "decision",
91
+ "content": "Create shared ssh-security.ts utility: Create shared ssh-security.ts utility",
92
+ "raw": {
93
+ "question": "Create shared ssh-security.ts utility",
94
+ "chosen": "Create shared ssh-security.ts utility",
95
+ "alternatives": [],
96
+ "reasoning": "Password derivation was duplicated in provisioner and codex-auth-helper. Single source of truth prevents bugs if algorithm changes. Also adds startup validation."
97
+ },
98
+ "significance": "high"
99
+ },
100
+ {
101
+ "ts": 1767780510961,
102
+ "type": "decision",
103
+ "content": "Fixed TypeScript error: Promise<never> to Promise<void>: Fixed TypeScript error: Promise<never> to Promise<void>",
104
+ "raw": {
105
+ "question": "Fixed TypeScript error: Promise<never> to Promise<void>",
106
+ "chosen": "Fixed TypeScript error: Promise<never> to Promise<void>",
107
+ "alternatives": [],
108
+ "reasoning": "Promise<never> caused control flow analysis to mark subsequent code as unreachable"
109
+ },
110
+ "significance": "high"
111
+ },
112
+ {
113
+ "ts": 1767780517965,
114
+ "type": "decision",
115
+ "content": "Keep password-based SSH for now, defer key-based auth: Keep password-based SSH for now, defer key-based auth",
116
+ "raw": {
117
+ "question": "Keep password-based SSH for now, defer key-based auth",
118
+ "chosen": "Keep password-based SSH for now, defer key-based auth",
119
+ "alternatives": [],
120
+ "reasoning": "Password-based is simpler to implement and per-workspace unique passwords provide reasonable security. Key-based auth would require container-side authorized_keys management - tracked as future improvement in agent-relay-476."
121
+ },
122
+ "significance": "high"
123
+ },
124
+ {
125
+ "ts": 1767780523070,
126
+ "type": "decision",
127
+ "content": "Settings page: replaced sidebar with always-visible horizontal tabs: Settings page: replaced sidebar with always-visible horizontal tabs",
128
+ "raw": {
129
+ "question": "Settings page: replaced sidebar with always-visible horizontal tabs",
130
+ "chosen": "Settings page: replaced sidebar with always-visible horizontal tabs",
131
+ "alternatives": [],
132
+ "reasoning": "Desktop sidebar wasn't rendering for user. Horizontal tabs provide consistent navigation on all screen sizes"
133
+ },
134
+ "significance": "high"
135
+ },
136
+ {
137
+ "ts": 1767780530293,
138
+ "type": "decision",
139
+ "content": "Billing API: respect database user.plan when no Stripe subscription: Billing API: respect database user.plan when no Stripe subscription",
140
+ "raw": {
141
+ "question": "Billing API: respect database user.plan when no Stripe subscription",
142
+ "chosen": "Billing API: respect database user.plan when no Stripe subscription",
143
+ "alternatives": [],
144
+ "reasoning": "Allows manual plan overrides in database to take effect without Stripe subscription"
145
+ },
146
+ "significance": "high"
147
+ },
148
+ {
149
+ "ts": 1767780538628,
150
+ "type": "decision",
151
+ "content": "Billing panel: dynamic tier descriptions and smart plan recommendations: Billing panel: dynamic tier descriptions and smart plan recommendations",
152
+ "raw": {
153
+ "question": "Billing panel: dynamic tier descriptions and smart plan recommendations",
154
+ "chosen": "Billing panel: dynamic tier descriptions and smart plan recommendations",
155
+ "alternatives": [],
156
+ "reasoning": "Fixed hardcoded Free tier text. Only highlight upgrades, not downgrades (no Pro promotion to Team users)"
157
+ },
158
+ "significance": "high"
159
+ },
160
+ {
161
+ "ts": 1767780548294,
162
+ "type": "decision",
163
+ "content": "Aligned workspace Codex auth with /app onboarding: Aligned workspace Codex auth with /app onboarding",
164
+ "raw": {
165
+ "question": "Aligned workspace Codex auth with /app onboarding",
166
+ "chosen": "Aligned workspace Codex auth with /app onboarding",
167
+ "alternatives": [],
168
+ "reasoning": "Added supportsDeviceFlow prop to ProviderAuthFlow to match /app page props"
169
+ },
170
+ "significance": "high"
171
+ }
172
+ ],
173
+ "endedAt": "2026-01-07T10:09:10.870Z"
174
+ }
175
+ ],
176
+ "commits": [],
177
+ "filesChanged": [],
178
+ "projectId": "/Users/khaliqgant/Projects/agent-workforce/relay",
179
+ "tags": [],
180
+ "completedAt": "2026-01-07T10:09:10.870Z",
181
+ "retrospective": {
182
+ "summary": "Implemented production-ready SSH tunneling for Codex OAuth. Key changes: (1) Exposed SSH port 2222 publicly on Fly.io via TCP service, (2) Changed from .internal to .fly.dev hostname for public routing, (3) Created shared ssh-security.ts with deterministic password derivation (SHA-256 of workspaceId + salt), (4) Added startup validation for SSH_PASSWORD_SALT env var, (5) Created beads for future improvements: rate limiting, key-based auth, time-limited access.",
183
+ "approach": "Standard approach",
184
+ "confidence": 0.85
185
+ }
186
+ }
@@ -0,0 +1,86 @@
1
+ # Trajectory: Production-ready SSH tunneling for Codex OAuth with security hardening
2
+
3
+ > **Status:** ✅ Completed
4
+ > **Confidence:** 85%
5
+ > **Started:** January 7, 2026 at 11:08 AM
6
+ > **Completed:** January 7, 2026 at 11:09 AM
7
+
8
+ ---
9
+
10
+ ## Summary
11
+
12
+ Implemented production-ready SSH tunneling for Codex OAuth. Key changes: (1) Exposed SSH port 2222 publicly on Fly.io via TCP service, (2) Changed from .internal to .fly.dev hostname for public routing, (3) Created shared ssh-security.ts with deterministic password derivation (SHA-256 of workspaceId + salt), (4) Added startup validation for SSH_PASSWORD_SALT env var, (5) Created beads for future improvements: rate limiting, key-based auth, time-limited access.
13
+
14
+ **Approach:** Standard approach
15
+
16
+ ---
17
+
18
+ ## Key Decisions
19
+
20
+ ### Changed UsageBanner intro bonus from purple to cyan
21
+ - **Chose:** Changed UsageBanner intro bonus from purple to cyan
22
+ - **Reasoning:** Brand consistency - cyan is primary accent color, purple was off-brand
23
+
24
+ ### Added landing page auth check - shows Go to App when logged in
25
+ - **Chose:** Added landing page auth check - shows Go to App when logged in
26
+ - **Reasoning:** Better UX for returning users who shouldn't see Sign In buttons
27
+
28
+ ### Expose SSH port 2222 publicly on Fly.io via TCP service
29
+ - **Chose:** Expose SSH port 2222 publicly on Fly.io via TCP service
30
+ - **Reasoning:** Internal .internal hostnames aren't routable from user machines. Public SSH with unique passwords per workspace is secure enough for production.
31
+
32
+ ### Updated CTA terminal to show realistic CLI flow (cloud link + send)
33
+ - **Chose:** Updated CTA terminal to show realistic CLI flow (cloud link + send)
34
+ - **Reasoning:** Previous mock commands were inaccurate. Now shows actual agent-relay cloud commands
35
+
36
+ ### Use deterministic password derivation instead of storage
37
+ - **Chose:** Use deterministic password derivation instead of storage
38
+ - **Reasoning:** SHA-256(workspaceId + salt) produces unique passwords without database storage. Both cloud server and container can derive the same password independently. 96 bits of entropy is sufficient.
39
+
40
+ ### Create shared ssh-security.ts utility
41
+ - **Chose:** Create shared ssh-security.ts utility
42
+ - **Reasoning:** Password derivation was duplicated in provisioner and codex-auth-helper. Single source of truth prevents bugs if algorithm changes. Also adds startup validation.
43
+
44
+ ### Fixed TypeScript error: Promise<never> to Promise<void>
45
+ - **Chose:** Fixed TypeScript error: Promise<never> to Promise<void>
46
+ - **Reasoning:** Promise<never> caused control flow analysis to mark subsequent code as unreachable
47
+
48
+ ### Keep password-based SSH for now, defer key-based auth
49
+ - **Chose:** Keep password-based SSH for now, defer key-based auth
50
+ - **Reasoning:** Password-based is simpler to implement and per-workspace unique passwords provide reasonable security. Key-based auth would require container-side authorized_keys management - tracked as future improvement in agent-relay-476.
51
+
52
+ ### Settings page: replaced sidebar with always-visible horizontal tabs
53
+ - **Chose:** Settings page: replaced sidebar with always-visible horizontal tabs
54
+ - **Reasoning:** Desktop sidebar wasn't rendering for user. Horizontal tabs provide consistent navigation on all screen sizes
55
+
56
+ ### Billing API: respect database user.plan when no Stripe subscription
57
+ - **Chose:** Billing API: respect database user.plan when no Stripe subscription
58
+ - **Reasoning:** Allows manual plan overrides in database to take effect without Stripe subscription
59
+
60
+ ### Billing panel: dynamic tier descriptions and smart plan recommendations
61
+ - **Chose:** Billing panel: dynamic tier descriptions and smart plan recommendations
62
+ - **Reasoning:** Fixed hardcoded Free tier text. Only highlight upgrades, not downgrades (no Pro promotion to Team users)
63
+
64
+ ### Aligned workspace Codex auth with /app onboarding
65
+ - **Chose:** Aligned workspace Codex auth with /app onboarding
66
+ - **Reasoning:** Added supportsDeviceFlow prop to ProviderAuthFlow to match /app page props
67
+
68
+ ---
69
+
70
+ ## Chapters
71
+
72
+ ### 1. Work
73
+ *Agent: default*
74
+
75
+ - Changed UsageBanner intro bonus from purple to cyan: Changed UsageBanner intro bonus from purple to cyan
76
+ - Added landing page auth check - shows Go to App when logged in: Added landing page auth check - shows Go to App when logged in
77
+ - Expose SSH port 2222 publicly on Fly.io via TCP service: Expose SSH port 2222 publicly on Fly.io via TCP service
78
+ - Updated CTA terminal to show realistic CLI flow (cloud link + send): Updated CTA terminal to show realistic CLI flow (cloud link + send)
79
+ - Use deterministic password derivation instead of storage: Use deterministic password derivation instead of storage
80
+ - Create shared ssh-security.ts utility: Create shared ssh-security.ts utility
81
+ - Fixed TypeScript error: Promise<never> to Promise<void>: Fixed TypeScript error: Promise<never> to Promise<void>
82
+ - Keep password-based SSH for now, defer key-based auth: Keep password-based SSH for now, defer key-based auth
83
+ - Settings page: replaced sidebar with always-visible horizontal tabs: Settings page: replaced sidebar with always-visible horizontal tabs
84
+ - Billing API: respect database user.plan when no Stripe subscription: Billing API: respect database user.plan when no Stripe subscription
85
+ - Billing panel: dynamic tier descriptions and smart plan recommendations: Billing panel: dynamic tier descriptions and smart plan recommendations
86
+ - Aligned workspace Codex auth with /app onboarding: Aligned workspace Codex auth with /app onboarding