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,508 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ log() {
6
+ echo "[workspace] $*"
7
+ }
8
+
9
+ # Fix volume permissions and drop to workspace user if running as root
10
+ if [[ "$(id -u)" == "0" ]]; then
11
+ # Fix /data and /workspace permissions before dropping privileges
12
+ # Fresh Fly.io volumes are root-owned, need to chown for workspace user
13
+ log "Fixing volume permissions..."
14
+ chown -R workspace:workspace /data /workspace 2>/dev/null || true
15
+
16
+ # ============================================================================
17
+ # SSH Server Setup (for CLI tunneling - Codex OAuth callback forwarding)
18
+ # When ENABLE_SSH=true, start SSH server on port 2222 for secure tunneling
19
+ # ============================================================================
20
+ if [[ "${ENABLE_SSH:-false}" == "true" ]]; then
21
+ log "Starting SSH server on port 2222..."
22
+
23
+ # Set SSH password for workspace user
24
+ SSH_PASS="${SSH_PASSWORD:-devpassword}"
25
+ echo "workspace:${SSH_PASS}" | chpasswd
26
+
27
+ # Configure SSH server for tunneling
28
+ # - Allow password auth (for CLI simplicity)
29
+ # - Listen on port 2222 (non-privileged)
30
+ # - Allow TCP forwarding (for port tunneling)
31
+ cat > /etc/ssh/sshd_config.d/workspace.conf <<SSHEOF
32
+ Port 2222
33
+ PasswordAuthentication yes
34
+ PermitRootLogin no
35
+ AllowUsers workspace
36
+ AllowTcpForwarding yes
37
+ GatewayPorts no
38
+ X11Forwarding no
39
+ SSHEOF
40
+
41
+ # Start SSH server in background
42
+ /usr/sbin/sshd -e
43
+ log "SSH server started (port 2222, user: workspace)"
44
+ fi
45
+
46
+ # ============================================================================
47
+ # Persist workspace environment for SSH sessions (must be done as root)
48
+ # SSH sessions don't inherit the container's runtime environment, so we write
49
+ # critical variables to /etc/profile.d/ which gets sourced by login shells
50
+ # ============================================================================
51
+ if [[ -n "${CLOUD_API_URL:-}" || -n "${WORKSPACE_ID:-}" ]]; then
52
+ log "Persisting workspace environment for SSH sessions"
53
+ # Compute HOME path for the env file
54
+ _DATA_DIR="${AGENT_RELAY_DATA_DIR:-/data}"
55
+ if [[ -n "${WORKSPACE_OWNER_USER_ID:-}" ]]; then
56
+ _USER_HOME="${_DATA_DIR}/users/${WORKSPACE_OWNER_USER_ID}"
57
+ else
58
+ _USER_HOME="/home/workspace"
59
+ fi
60
+ cat > /etc/profile.d/workspace-env.sh <<ENVEOF
61
+ # Workspace environment variables (auto-generated by entrypoint.sh)
62
+ export WORKSPACE_ID="${WORKSPACE_ID:-}"
63
+ export WORKSPACE_OWNER_USER_ID="${WORKSPACE_OWNER_USER_ID:-}"
64
+ export CLOUD_API_URL="${CLOUD_API_URL:-}"
65
+ export WORKSPACE_TOKEN="${WORKSPACE_TOKEN:-}"
66
+ export WORKSPACE_DIR="${WORKSPACE_DIR:-/workspace}"
67
+ export HOME="${_USER_HOME}"
68
+ export AGENT_RELAY_USER_ID="${WORKSPACE_OWNER_USER_ID:-}"
69
+ export AGENT_RELAY_DATA_DIR="${_DATA_DIR}"
70
+ ENVEOF
71
+ chmod 644 /etc/profile.d/workspace-env.sh
72
+ fi
73
+
74
+ log "Dropping privileges to workspace user..."
75
+ exec gosu workspace "$0" "$@"
76
+ fi
77
+
78
+ PORT="${AGENT_RELAY_DASHBOARD_PORT:-${PORT:-3888}}"
79
+ export AGENT_RELAY_DASHBOARD_PORT="${PORT}"
80
+ export PORT="${PORT}"
81
+
82
+ # Disable auto-updates for AI CLIs in container environments
83
+ # Prevents permission errors when CLIs try to self-update with npm/pip
84
+ export DISABLE_AUTOUPDATER=1
85
+ # Belt-and-suspenders flags to block Codex/OpenAI update checks
86
+ export CODEX_CHECK_FOR_UPDATES=false
87
+ export CODEX_DISABLE_AUTOUPDATE=1
88
+ export OPENAI_CLI_NO_UPDATE=1
89
+ export NO_UPDATE_NOTIFIER=1
90
+ export NPM_CONFIG_UPDATE_NOTIFIER=false
91
+ log "Auto-updates disabled for AI CLIs (container environment)"
92
+
93
+ # ============================================================================
94
+ # Per-user credential storage setup
95
+ # Create user-specific HOME on persistent volume (/data)
96
+ # This enables multi-user workspaces where each user has their own credentials
97
+ # ============================================================================
98
+ DATA_DIR="${AGENT_RELAY_DATA_DIR:-/data}"
99
+ if [[ -n "${WORKSPACE_OWNER_USER_ID:-}" ]]; then
100
+ USER_HOME="${DATA_DIR}/users/${WORKSPACE_OWNER_USER_ID}"
101
+ log "Setting up per-user HOME at ${USER_HOME}"
102
+ mkdir -p "${USER_HOME}"
103
+ mkdir -p "${USER_HOME}/.claude"
104
+ mkdir -p "${USER_HOME}/.codex"
105
+ mkdir -p "${USER_HOME}/.config/gcloud"
106
+ mkdir -p "${USER_HOME}/.config/gh"
107
+ export HOME="${USER_HOME}"
108
+ # Ensure user-local bin is on PATH for per-user shims/wrappers
109
+ export PATH="${HOME}/.local/bin:${PATH}"
110
+ export XDG_CONFIG_HOME="${USER_HOME}/.config"
111
+ export AGENT_RELAY_USER_ID="${WORKSPACE_OWNER_USER_ID}"
112
+ log "HOME set to ${HOME} (user: ${WORKSPACE_OWNER_USER_ID})"
113
+ else
114
+ log "No WORKSPACE_OWNER_USER_ID set, using default HOME: ${HOME}"
115
+ fi
116
+
117
+ WORKSPACE_DIR="${WORKSPACE_DIR:-/workspace}"
118
+ REPO_LIST="${REPOSITORIES:-}"
119
+
120
+ mkdir -p "${WORKSPACE_DIR}"
121
+ cd "${WORKSPACE_DIR}"
122
+
123
+ # Configure Git credentials via the gateway (tokens auto-refresh via Nango)
124
+ # The credential helper fetches fresh tokens from the cloud API on each git operation
125
+ if [[ -n "${CLOUD_API_URL:-}" && -n "${WORKSPACE_ID:-}" && -n "${WORKSPACE_TOKEN:-}" ]]; then
126
+ log "Configuring git credential helper (gateway mode)"
127
+ git config --global credential.helper "/usr/local/bin/git-credential-relay"
128
+ git config --global credential.useHttpPath true
129
+ export GIT_TERMINAL_PROMPT=0
130
+
131
+ # Configure git identity for commits
132
+ # Use env vars if set, otherwise default to "Agent Relay" / "agent@agent-relay.com"
133
+ DEFAULT_GIT_EMAIL="${AGENT_NAME:-agent}@agent-relay.com"
134
+ git config --global user.name "${GIT_USER_NAME:-Agent Relay}"
135
+ git config --global user.email "${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}"
136
+ log "Git identity configured: ${GIT_USER_NAME:-Agent Relay} <${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}>"
137
+
138
+ # Configure gh CLI to use the same token mechanism
139
+ # gh auth login expects a token via stdin or GH_TOKEN env var
140
+ # We'll set up a wrapper that fetches fresh tokens
141
+ mkdir -p "${HOME}/.config/gh"
142
+ cat > "${HOME}/.config/gh/hosts.yml" <<EOF
143
+ github.com:
144
+ oauth_token: placeholder
145
+ git_protocol: https
146
+ EOF
147
+
148
+ # Create gh token wrapper script
149
+ # Uses userToken (OAuth) for gh CLI, not installation token
150
+ cat > "/tmp/gh-token-helper.sh" <<'GHEOF'
151
+ #!/usr/bin/env bash
152
+ # Fetch fresh user OAuth token for gh CLI
153
+ response=$(curl -sf \
154
+ -H "Authorization: Bearer ${WORKSPACE_TOKEN}" \
155
+ "${CLOUD_API_URL}/api/git/token?workspaceId=${WORKSPACE_ID}" 2>/dev/null)
156
+ if [[ -n "$response" ]]; then
157
+ # Prefer userToken (OAuth) for gh CLI, fall back to installation token
158
+ user_token=$(echo "$response" | jq -r '.userToken // empty')
159
+ if [[ -n "$user_token" && "$user_token" != "null" ]]; then
160
+ echo "$user_token"
161
+ else
162
+ echo "$response" | jq -r '.token // empty'
163
+ fi
164
+ fi
165
+ GHEOF
166
+ chmod +x "/tmp/gh-token-helper.sh"
167
+
168
+ # Create gh wrapper that auto-refreshes token on each invocation
169
+ # This ensures gh always has a valid token without agents needing to do anything
170
+ GH_REAL=$(which gh 2>/dev/null || echo "/usr/bin/gh")
171
+ if [[ -x "${GH_REAL}" ]]; then
172
+ cat > "/tmp/gh-wrapper" <<GHWRAPPER
173
+ #!/usr/bin/env bash
174
+ # Auto-refreshing gh wrapper - fetches fresh token on each invocation
175
+ export GH_TOKEN=\$(/tmp/gh-token-helper.sh 2>/dev/null)
176
+ if [[ -z "\${GH_TOKEN}" ]]; then
177
+ echo "gh-wrapper: Failed to fetch GitHub token" >&2
178
+ echo "gh-wrapper: Check CLOUD_API_URL, WORKSPACE_ID, and WORKSPACE_TOKEN are set" >&2
179
+ exit 1
180
+ fi
181
+ exec "${GH_REAL}" "\$@"
182
+ GHWRAPPER
183
+ chmod +x "/tmp/gh-wrapper"
184
+
185
+ # Create symlink or copy to override the real gh
186
+ # We use /usr/local/bin which comes before /usr/bin in PATH
187
+ if [[ -w "/usr/local/bin" ]]; then
188
+ cp "/tmp/gh-wrapper" "/usr/local/bin/gh"
189
+ log "Installed auto-refreshing gh wrapper to /usr/local/bin/gh"
190
+ else
191
+ # If we can't write to /usr/local/bin, add /tmp to PATH
192
+ export PATH="/tmp:${PATH}"
193
+ mv "/tmp/gh-wrapper" "/tmp/gh"
194
+ log "Added auto-refreshing gh wrapper to PATH"
195
+ fi
196
+ fi
197
+
198
+ # Also set GH_TOKEN at startup for any tools that read it directly
199
+ # (The wrapper handles runtime refresh, this is just for initialization)
200
+ export GH_TOKEN=""
201
+ for attempt in 1 2 3; do
202
+ GH_TOKEN=$(/tmp/gh-token-helper.sh 2>/dev/null || echo "")
203
+ if [[ -n "${GH_TOKEN}" ]]; then
204
+ break
205
+ fi
206
+ sleep 1
207
+ done
208
+ if [[ -n "${GH_TOKEN}" ]]; then
209
+ log "GitHub CLI configured with fresh token"
210
+ else
211
+ log "WARN: Could not fetch initial GitHub token for gh CLI"
212
+ fi
213
+
214
+ # Fallback: Use static GITHUB_TOKEN if provided (legacy mode)
215
+ elif [[ -n "${GITHUB_TOKEN:-}" ]]; then
216
+ log "Configuring git credentials (legacy static token mode)"
217
+ GIT_ASKPASS_SCRIPT="/tmp/git-askpass.sh"
218
+ cat > "${GIT_ASKPASS_SCRIPT}" <<'EOF'
219
+ #!/usr/bin/env bash
220
+ prompt="${1:-}"
221
+ if [[ "${prompt}" == *"Username"* ]]; then
222
+ echo "x-access-token"
223
+ else
224
+ echo "${GITHUB_TOKEN}"
225
+ fi
226
+ EOF
227
+ chmod +x "${GIT_ASKPASS_SCRIPT}"
228
+ export GIT_ASKPASS="${GIT_ASKPASS_SCRIPT}"
229
+ export GIT_TERMINAL_PROMPT=0
230
+ export GH_TOKEN="${GITHUB_TOKEN}"
231
+
232
+ # Configure git identity for commits
233
+ DEFAULT_GIT_EMAIL="${AGENT_NAME:-agent}@agent-relay.com"
234
+ git config --global user.name "${GIT_USER_NAME:-Agent Relay}"
235
+ git config --global user.email "${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}"
236
+ log "Git identity configured: ${GIT_USER_NAME:-Agent Relay} <${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}>"
237
+ fi
238
+
239
+ clone_or_update_repo() {
240
+ local repo="$1"
241
+ repo="${repo// /}"
242
+ if [[ -z "${repo}" ]]; then
243
+ return
244
+ fi
245
+
246
+ local repo_name
247
+ repo_name="$(basename "${repo}")"
248
+ local target="${WORKSPACE_DIR}/${repo_name}"
249
+ local url="https://github.com/${repo}.git"
250
+
251
+ if [[ -d "${target}/.git" ]]; then
252
+ log "Updating ${repo}..."
253
+ git -C "${target}" remote set-url origin "${url}" >/dev/null 2>&1 || true
254
+ git -C "${target}" fetch --all --prune >/dev/null 2>&1 || true
255
+ git -C "${target}" pull --ff-only >/dev/null 2>&1 || true
256
+ else
257
+ log "Cloning ${repo}..."
258
+ git clone "${url}" "${target}" >/dev/null 2>&1 || {
259
+ log "WARN: Failed to clone ${repo}"
260
+ }
261
+ fi
262
+
263
+ # Mark directory as safe to prevent "dubious ownership" errors
264
+ # This is needed when git runs as a different user (e.g., root via SSH)
265
+ if [[ -d "${target}/.git" ]]; then
266
+ git config --global --add safe.directory "${target}" 2>/dev/null || true
267
+ fi
268
+ }
269
+
270
+ if [[ -n "${REPO_LIST}" ]]; then
271
+ # Check if we have credentials configured (gateway mode or static token)
272
+ if [[ -z "${GITHUB_TOKEN:-}" && -z "${CLOUD_API_URL:-}" ]]; then
273
+ log "WARN: REPOSITORIES set but no credentials configured; clones may fail."
274
+ fi
275
+
276
+ IFS=',' read -ra repos <<< "${REPO_LIST}"
277
+ for repo in "${repos[@]}"; do
278
+ clone_or_update_repo "${repo}"
279
+ done
280
+ fi
281
+
282
+ # ============================================================================
283
+ # Configure agent policy enforcement for cloud workspaces
284
+ # Policy is fetched from cloud API and enforced at runtime
285
+ # ============================================================================
286
+
287
+ if [[ -n "${CLOUD_API_URL:-}" && -n "${WORKSPACE_ID:-}" ]]; then
288
+ log "Enabling agent policy enforcement"
289
+ export AGENT_POLICY_ENFORCEMENT=1
290
+ # Policy is fetched from ${CLOUD_API_URL}/api/policy/${WORKSPACE_ID}/internal
291
+ fi
292
+
293
+ # ============================================================================
294
+ # Configure AI provider credentials
295
+ # Create credential files that CLIs expect from ENV vars passed by provisioner
296
+ # ============================================================================
297
+
298
+ # Claude CLI expects ~/.claude/.credentials.json (note the dot prefix on filename)
299
+ # Format: { claudeAiOauth: { accessToken: "...", refreshToken: "...", expiresAt: ... } }
300
+ if [[ -n "${ANTHROPIC_TOKEN:-}" ]]; then
301
+ log "Configuring Claude credentials..."
302
+ mkdir -p "${HOME}/.claude"
303
+ cat > "${HOME}/.claude/.credentials.json" <<EOF
304
+ {
305
+ "claudeAiOauth": {
306
+ "accessToken": "${ANTHROPIC_TOKEN}",
307
+ "refreshToken": "${ANTHROPIC_REFRESH_TOKEN:-}",
308
+ "expiresAt": ${ANTHROPIC_TOKEN_EXPIRES_AT:-null}
309
+ }
310
+ }
311
+ EOF
312
+ chmod 600 "${HOME}/.claude/.credentials.json"
313
+ fi
314
+
315
+ # Configure Claude Code for cloud workspaces
316
+ # Create both settings and instructions files
317
+ log "Configuring Claude Code for cloud workspace..."
318
+ mkdir -p "${HOME}/.claude"
319
+
320
+ # Create settings.json to auto-accept permissions (required for cloud workspaces)
321
+ # This tells Claude Code to skip the "Ready to code here?" permission prompt
322
+ # Reference: Claude Code uses this for headless/automated environments
323
+ cat > "${HOME}/.claude/settings.json" <<'SETTINGSEOF'
324
+ {
325
+ "permissions": {
326
+ "allow": [
327
+ "Read",
328
+ "Edit",
329
+ "Write",
330
+ "Bash",
331
+ "Glob",
332
+ "Grep",
333
+ "Task",
334
+ "WebFetch",
335
+ "WebSearch",
336
+ "NotebookEdit",
337
+ "TodoWrite"
338
+ ],
339
+ "deny": []
340
+ },
341
+ "autoApproveApiRequest": true
342
+ }
343
+ SETTINGSEOF
344
+ chmod 600 "${HOME}/.claude/settings.json"
345
+ log "Created Claude Code settings (auto-approve enabled)"
346
+
347
+ # Create CLAUDE.md with agent relay protocol instructions
348
+ # This is loaded automatically by Claude Code and provides the relay protocol
349
+ if [[ -f "/app/docs/agent-relay-snippet.md" ]]; then
350
+ cp "/app/docs/agent-relay-snippet.md" "${HOME}/.claude/CLAUDE.md"
351
+ log "Copied relay protocol from /app/docs/agent-relay-snippet.md"
352
+ else
353
+ # Fallback: create minimal instructions
354
+ log "WARN: /app/docs/agent-relay-snippet.md not found, creating minimal instructions"
355
+ cat > "${HOME}/.claude/CLAUDE.md" <<'RELAYEOF'
356
+ # Agent Relay
357
+
358
+ Real-time agent-to-agent messaging. Output `->relay:` patterns to communicate.
359
+
360
+ ## Sending Messages
361
+
362
+ Use fenced format for reliable delivery:
363
+ ```
364
+ ->relay:AgentName <<<
365
+ Your message here.>>>
366
+ ```
367
+
368
+ Broadcast to all: `->relay:* <<<message>>>`
369
+
370
+ ## Protocol
371
+
372
+ 1. ACK immediately when you receive a task
373
+ 2. Do the work
374
+ 3. Send DONE: summary when complete
375
+
376
+ ## Session Persistence
377
+
378
+ Output periodically to checkpoint progress:
379
+ ```
380
+ [[SUMMARY]]{"currentTask":"...","completedTasks":[...],"context":"..."}[[/SUMMARY]]
381
+ ```
382
+
383
+ When session is complete:
384
+ ```
385
+ [[SESSION_END]]{"summary":"...","completedTasks":[...]}[[/SESSION_END]]
386
+ ```
387
+ RELAYEOF
388
+ fi
389
+ log "Claude Code configuration complete"
390
+
391
+ # Codex CLI settings (always install config to disable auto-updates)
392
+ mkdir -p "${HOME}/.codex"
393
+ if [[ -f "/app/deploy/workspace/codex.config.toml" ]]; then
394
+ cp "/app/deploy/workspace/codex.config.toml" "${HOME}/.codex/config.toml"
395
+ chmod 600 "${HOME}/.codex/config.toml"
396
+ log "Codex configuration applied from codex.config.toml"
397
+ else
398
+ # Fallback: create minimal config (should not happen in production)
399
+ log "WARN: codex.config.toml not found, creating minimal config"
400
+ cat > "${HOME}/.codex/config.toml" <<CODEXCONFIGEOF
401
+ check_for_updates = false
402
+ CODEXCONFIGEOF
403
+ chmod 600 "${HOME}/.codex/config.toml"
404
+ fi
405
+ # Also create JSON config for Codex (some versions read config.json instead of config.toml)
406
+ cat > "${HOME}/.codex/config.json" <<'CODEXJSON'
407
+ {
408
+ "check_for_updates": false
409
+ }
410
+ CODEXJSON
411
+ chmod 600 "${HOME}/.codex/config.json"
412
+
413
+ # NPM wrapper to block Codex self-updates (no-op when Codex tries npm install -g @openai/codex)
414
+ mkdir -p "${HOME}/.local/bin"
415
+ cat > "${HOME}/.local/bin/npm" <<'NPMWRAPPER'
416
+ #!/usr/bin/env bash
417
+ if [[ "$1" == "install" && "$2" == "-g" && "$3" == @openai/codex* ]]; then
418
+ echo "npm wrapper: skipping Codex self-update (auto-update disabled)" >&2
419
+ exit 0
420
+ fi
421
+ exec /usr/local/bin/npm "$@"
422
+ NPMWRAPPER
423
+ chmod +x "${HOME}/.local/bin/npm"
424
+
425
+ # Codex CLI expects ~/.codex/auth.json for credentials
426
+ # Format: { tokens: { access_token: "...", refresh_token: "...", ... } }
427
+ if [[ -n "${OPENAI_TOKEN:-}" ]]; then
428
+ log "Configuring Codex credentials..."
429
+ cat > "${HOME}/.codex/auth.json" <<EOF
430
+ {
431
+ "tokens": {
432
+ "access_token": "${OPENAI_TOKEN}",
433
+ "refresh_token": "${OPENAI_REFRESH_TOKEN:-}"
434
+ }
435
+ }
436
+ EOF
437
+ chmod 600 "${HOME}/.codex/auth.json"
438
+ fi
439
+
440
+ # Google/Gemini - uses application default credentials
441
+ if [[ -n "${GOOGLE_TOKEN:-}" ]]; then
442
+ log "Configuring Google credentials..."
443
+ mkdir -p "${HOME}/.config/gcloud"
444
+ cat > "${HOME}/.config/gcloud/application_default_credentials.json" <<EOF
445
+ {
446
+ "type": "authorized_user",
447
+ "access_token": "${GOOGLE_TOKEN}"
448
+ }
449
+ EOF
450
+ chmod 600 "${HOME}/.config/gcloud/application_default_credentials.json"
451
+ fi
452
+
453
+ # ============================================================================
454
+ # Detect workspace path and start daemon
455
+ # The daemon must start from the same directory that spawned agents will use
456
+ # to ensure consistent socket paths
457
+ # ============================================================================
458
+
459
+ # Function to detect the actual workspace path (same logic as project-namespace.ts)
460
+ detect_workspace_path() {
461
+ local base_dir="${1}"
462
+
463
+ # 1. Explicit override via env var
464
+ if [[ -n "${WORKSPACE_CWD:-}" ]]; then
465
+ echo "${WORKSPACE_CWD}"
466
+ return
467
+ fi
468
+
469
+ # 2. Check if base_dir itself is a git repo
470
+ if [[ -d "${base_dir}/.git" ]]; then
471
+ echo "${base_dir}"
472
+ return
473
+ fi
474
+
475
+ # 3. Scan for cloned repos (directories with .git)
476
+ local first_repo=""
477
+ for dir in "${base_dir}"/*/; do
478
+ if [[ -d "${dir}.git" ]]; then
479
+ # Use first repo found (alphabetically sorted by bash glob)
480
+ first_repo="${dir%/}"
481
+ break
482
+ fi
483
+ done
484
+
485
+ if [[ -n "${first_repo}" ]]; then
486
+ echo "${first_repo}"
487
+ return
488
+ fi
489
+
490
+ # 4. Fall back to base_dir
491
+ echo "${base_dir}"
492
+ }
493
+
494
+ # Detect the actual workspace path
495
+ ACTUAL_WORKSPACE=$(detect_workspace_path "${WORKSPACE_DIR}")
496
+ log "Detected workspace path: ${ACTUAL_WORKSPACE}"
497
+
498
+ # Change to the detected workspace before starting daemon
499
+ cd "${ACTUAL_WORKSPACE}"
500
+
501
+ log "Starting agent-relay daemon on port ${PORT} from ${ACTUAL_WORKSPACE}"
502
+ args=(/app/dist/cli/index.js up --port "${PORT}")
503
+
504
+ if [[ "${SUPERVISOR_ENABLED:-true}" == "true" ]]; then
505
+ args+=("--watch")
506
+ fi
507
+
508
+ exec node "${args[@]}"
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Git Credential Helper for Agent Relay Workspaces
4
+ #
5
+ # This script fetches fresh GitHub tokens from the cloud API gateway.
6
+ # Nango handles token refresh, so tokens are always valid.
7
+ #
8
+ # Usage: git config --global credential.helper /usr/local/bin/git-credential-relay
9
+ #
10
+ # Environment variables:
11
+ # WORKSPACE_ID - Required: The workspace ID for token lookup
12
+ # CLOUD_API_URL - Required: The cloud API base URL
13
+ # WORKSPACE_TOKEN - Required: Bearer token for API auth
14
+ #
15
+
16
+ set -euo pipefail
17
+
18
+ # Debug logging (enable with GIT_CREDENTIAL_DEBUG=1)
19
+ debug() {
20
+ if [[ "${GIT_CREDENTIAL_DEBUG:-}" == "1" ]]; then
21
+ echo "git-credential-relay: $*" >&2
22
+ fi
23
+ }
24
+
25
+ debug "Called with args: $*"
26
+
27
+ # Only handle 'get' operation
28
+ if [[ "${1:-}" != "get" ]]; then
29
+ debug "Ignoring non-get operation"
30
+ exit 0
31
+ fi
32
+
33
+ # Read input from git (protocol=https, host=github.com, etc.)
34
+ declare -A input
35
+ while IFS='=' read -r key value; do
36
+ [[ -z "$key" ]] && break
37
+ input["$key"]="$value"
38
+ done
39
+
40
+ # Only provide credentials for github.com
41
+ host="${input[host]:-}"
42
+ debug "Host: $host"
43
+ if [[ "$host" != "github.com" ]]; then
44
+ debug "Not github.com, skipping"
45
+ exit 0
46
+ fi
47
+
48
+ # Check required environment variables
49
+ if [[ -z "${WORKSPACE_ID:-}" ]]; then
50
+ echo "git-credential-relay: WORKSPACE_ID not set" >&2
51
+ echo "git-credential-relay: Hint - check if env vars are passed to agent process" >&2
52
+ exit 1
53
+ fi
54
+
55
+ if [[ -z "${CLOUD_API_URL:-}" ]]; then
56
+ echo "git-credential-relay: CLOUD_API_URL not set" >&2
57
+ exit 1
58
+ fi
59
+
60
+ if [[ -z "${WORKSPACE_TOKEN:-}" ]]; then
61
+ echo "git-credential-relay: WORKSPACE_TOKEN not set" >&2
62
+ exit 1
63
+ fi
64
+
65
+ debug "Fetching token from ${CLOUD_API_URL}/api/git/token?workspaceId=${WORKSPACE_ID}"
66
+
67
+ # Fetch fresh token from gateway (capture stderr for debugging)
68
+ http_code=""
69
+ response=""
70
+ if [[ "${GIT_CREDENTIAL_DEBUG:-}" == "1" ]]; then
71
+ # With debug, show full curl output
72
+ response=$(curl -sf -w "\n%{http_code}" \
73
+ -H "Authorization: Bearer ${WORKSPACE_TOKEN}" \
74
+ "${CLOUD_API_URL}/api/git/token?workspaceId=${WORKSPACE_ID}" \
75
+ 2>&1) || true
76
+ http_code="${response##*$'\n'}"
77
+ response="${response%$'\n'*}"
78
+ debug "HTTP response code: $http_code"
79
+ debug "Response: ${response:0:200}"
80
+ else
81
+ response=$(curl -sf \
82
+ -H "Authorization: Bearer ${WORKSPACE_TOKEN}" \
83
+ "${CLOUD_API_URL}/api/git/token?workspaceId=${WORKSPACE_ID}" \
84
+ 2>/dev/null) || true
85
+ fi
86
+
87
+ if [[ -z "$response" ]]; then
88
+ echo "git-credential-relay: Failed to fetch token from gateway" >&2
89
+ echo "git-credential-relay: Check that CLOUD_API_URL is accessible: ${CLOUD_API_URL}" >&2
90
+ exit 1
91
+ fi
92
+
93
+ # Parse JSON response using jq (more robust than grep)
94
+ token=$(echo "$response" | jq -r '.token // empty')
95
+ username=$(echo "$response" | jq -r '.username // "x-access-token"')
96
+
97
+ if [[ -z "$token" ]]; then
98
+ # Check if there's an error message with details
99
+ error=$(echo "$response" | jq -r '.error // empty')
100
+ code=$(echo "$response" | jq -r '.code // empty')
101
+ hint=$(echo "$response" | jq -r '.hint // empty')
102
+ details=$(echo "$response" | jq -r '.details // empty')
103
+
104
+ if [[ -n "$error" ]]; then
105
+ echo "git-credential-relay: ERROR: $error" >&2
106
+ if [[ -n "$code" ]]; then
107
+ echo "git-credential-relay: Code: $code" >&2
108
+ fi
109
+ if [[ -n "$hint" ]]; then
110
+ echo "git-credential-relay: Hint: $hint" >&2
111
+ fi
112
+ if [[ -n "$details" ]]; then
113
+ echo "git-credential-relay: Details: $details" >&2
114
+ fi
115
+ else
116
+ echo "git-credential-relay: No token in response" >&2
117
+ debug "Raw response: $response"
118
+ fi
119
+ exit 1
120
+ fi
121
+
122
+ # Output credentials in git credential format
123
+ echo "protocol=https"
124
+ echo "host=github.com"
125
+ echo "username=${username:-x-access-token}"
126
+ echo "password=${token}"
@@ -128,6 +128,13 @@ export declare class AgentSpawner {
128
128
  * Get raw output from a worker
129
129
  */
130
130
  getWorkerRawOutput(name: string): string | null;
131
+ /**
132
+ * Send input to a worker's PTY (for interactive terminal support)
133
+ * @param name - Worker name
134
+ * @param data - Input data to send (keystrokes, text, etc.)
135
+ * @returns true if input was sent, false if worker not found
136
+ */
137
+ sendWorkerInput(name: string, data: string): boolean;
131
138
  /**
132
139
  * Wait for an agent to appear in the registry (agents.json)
133
140
  */