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
@@ -9,7 +9,7 @@ import * as crypto from 'crypto';
9
9
  import * as fs from 'fs/promises';
10
10
  import * as os from 'os';
11
11
  import { createLogger } from '../resiliency/logger.js';
12
- import { CLI_AUTH_CONFIG, stripAnsiCodes, matchesSuccessPattern, findMatchingPrompt, getSupportedProviders, } from '../shared/cli-auth-config.js';
12
+ import { CLI_AUTH_CONFIG, stripAnsiCodes, matchesSuccessPattern, findMatchingPrompt, findMatchingError, getSupportedProviders, } from '../shared/cli-auth-config.js';
13
13
  const logger = createLogger('cli-auth');
14
14
  // Re-export for consumers
15
15
  export { CLI_AUTH_CONFIG, getSupportedProviders };
@@ -123,46 +123,49 @@ export async function startCLIAuth(provider, options = {}) {
123
123
  session.error = 'Timeout waiting for auth completion (5 minutes). Please try again.';
124
124
  }
125
125
  }, config.waitTimeout + OAUTH_COMPLETION_TIMEOUT);
126
- // Keep-alive: Some CLIs timeout if they don't receive stdin input
127
- // Send a space+backspace every 20 seconds to simulate user presence
128
- const keepAliveInterval = setInterval(() => {
129
- if (session.status === 'waiting_auth' && session.process) {
130
- try {
131
- // Send space then backspace - appears as user typing but no net effect
132
- session.process.write(' \b');
133
- logger.debug('Keep-alive ping sent', {
134
- sessionId,
135
- status: session.status,
136
- ageSeconds: Math.round((Date.now() - session.createdAt.getTime()) / 1000),
137
- });
138
- }
139
- catch {
140
- // Process may have exited
141
- }
142
- }
143
- }, 20000);
126
+ // Note: Removed keep-alive mechanism that sent ' \b' every 20 seconds
127
+ // It was interfering with OAuth code paste, causing "invalid code" errors
128
+ // CLIs like Claude don't actually need stdin keep-alive during auth wait
144
129
  proc.onData((data) => {
145
130
  session.output += data;
146
- // Handle prompts
147
- const matchingPrompt = findMatchingPrompt(data, config.prompts, respondedPrompts);
148
- if (matchingPrompt) {
149
- respondedPrompts.add(matchingPrompt.description);
150
- session.promptsHandled.push(matchingPrompt.description);
151
- logger.info('Auto-responding to prompt', { description: matchingPrompt.description });
152
- const delay = matchingPrompt.delay ?? 100;
153
- setTimeout(() => {
154
- try {
155
- proc.write(matchingPrompt.response);
156
- }
157
- catch {
158
- // Process may have exited
159
- }
160
- }, delay);
161
- }
162
- // Extract auth URL
163
131
  const cleanText = stripAnsiCodes(data);
132
+ // Check for error patterns FIRST - if error detected, don't auto-respond to prompts
133
+ // This prevents us from auto-responding to "Press Enter to retry" in error messages
134
+ const matchedError = findMatchingError(data, config.errorPatterns);
135
+ if (matchedError && session.status !== 'error') {
136
+ logger.warn('Auth error detected', {
137
+ provider,
138
+ sessionId,
139
+ errorMessage: matchedError.message,
140
+ recoverable: matchedError.recoverable,
141
+ });
142
+ session.status = 'error';
143
+ session.error = matchedError.message;
144
+ session.errorHint = matchedError.hint;
145
+ session.recoverable = matchedError.recoverable;
146
+ }
147
+ // Don't auto-respond to prompts if we're in error state
148
+ // This prevents responding to "Press Enter to retry" after an error
149
+ if (session.status !== 'error') {
150
+ const matchingPrompt = findMatchingPrompt(data, config.prompts, respondedPrompts);
151
+ if (matchingPrompt) {
152
+ respondedPrompts.add(matchingPrompt.description);
153
+ session.promptsHandled.push(matchingPrompt.description);
154
+ logger.info('Auto-responding to prompt', { description: matchingPrompt.description });
155
+ const delay = matchingPrompt.delay ?? 100;
156
+ setTimeout(() => {
157
+ try {
158
+ proc.write(matchingPrompt.response);
159
+ }
160
+ catch {
161
+ // Process may have exited
162
+ }
163
+ }, delay);
164
+ }
165
+ }
166
+ // Extract auth URL (only if not in error state and don't have URL yet)
164
167
  const match = cleanText.match(config.urlPattern);
165
- if (match && match[1] && !session.authUrl) {
168
+ if (match && match[1] && !session.authUrl && session.status !== 'error') {
166
169
  session.authUrl = match[1];
167
170
  session.status = 'waiting_auth';
168
171
  logger.info('Auth URL captured', { provider, url: session.authUrl });
@@ -172,7 +175,7 @@ export async function startCLIAuth(provider, options = {}) {
172
175
  }
173
176
  // Log all output after auth URL is captured (for debugging)
174
177
  if (session.authUrl) {
175
- const trimmedData = stripAnsiCodes(data).trim();
178
+ const trimmedData = cleanText.trim();
176
179
  if (trimmedData.length > 0) {
177
180
  logger.info('PTY output after auth URL', {
178
181
  provider,
@@ -182,12 +185,18 @@ export async function startCLIAuth(provider, options = {}) {
182
185
  }
183
186
  }
184
187
  // Check for success and try to extract credentials
185
- if (matchesSuccessPattern(data, config.successPatterns)) {
188
+ // Don't override error status - if there was an error, keep it
189
+ if (session.status !== 'error' && matchesSuccessPattern(data, config.successPatterns)) {
186
190
  session.status = 'success';
187
191
  logger.info('Success pattern detected, attempting credential extraction', { provider });
188
192
  // Try to extract credentials immediately (CLI may not exit after success)
189
193
  // Use a small delay to let the CLI finish writing the file
190
194
  setTimeout(async () => {
195
+ // Don't extract if status changed to error (e.g., error detected after success pattern)
196
+ if (session.status === 'error') {
197
+ logger.info('Skipping credential extraction - session is in error state', { provider });
198
+ return;
199
+ }
191
200
  try {
192
201
  const creds = await extractCredentials(provider, config);
193
202
  if (creds) {
@@ -206,7 +215,6 @@ export async function startCLIAuth(provider, options = {}) {
206
215
  proc.onExit(async ({ exitCode }) => {
207
216
  clearTimeout(timeout);
208
217
  clearTimeout(authUrlTimeout);
209
- clearInterval(keepAliveInterval);
210
218
  // Clear process reference so submitAuthCode knows PTY is gone
211
219
  session.process = undefined;
212
220
  // Log full output for debugging PTY exit issues
@@ -221,8 +229,9 @@ export async function startCLIAuth(provider, options = {}) {
221
229
  // Last 500 chars of output for debugging
222
230
  outputTail: cleanOutput.slice(-500),
223
231
  });
224
- // Try to extract credentials
225
- if (session.authUrl || exitCode === 0) {
232
+ // Try to extract credentials (but don't override error status)
233
+ // CLI might exit cleanly (code 0) even after an OAuth error
234
+ if ((session.authUrl || exitCode === 0) && session.status !== 'error') {
226
235
  try {
227
236
  const creds = await extractCredentials(provider, config);
228
237
  if (creds) {
@@ -265,9 +274,12 @@ export function getAuthSession(sessionId) {
265
274
  * Submit auth code to a waiting session
266
275
  * This writes the code to the PTY process stdin
267
276
  *
277
+ * @param sessionId - The auth session ID
278
+ * @param code - The OAuth authorization code
279
+ * @param state - Optional OAuth state parameter for CSRF validation (used by Codex)
268
280
  * @returns Object with success status and optional error message
269
281
  */
270
- export async function submitAuthCode(sessionId, code) {
282
+ export async function submitAuthCode(sessionId, code, state) {
271
283
  // Log all active sessions for debugging
272
284
  const activeSessionIds = Array.from(sessions.keys());
273
285
  logger.info('submitAuthCode called', {
@@ -305,11 +317,14 @@ export async function submitAuthCode(sessionId, code) {
305
317
  outputTail: session.output ? stripAnsiCodes(session.output).slice(-500) : 'no output',
306
318
  });
307
319
  // Try to extract credentials as a fallback - maybe auth completed in browser
320
+ // But don't override error status
308
321
  const config = CLI_AUTH_CONFIG[session.provider];
309
- if (config) {
322
+ if (config && session.status !== 'error') {
310
323
  try {
311
324
  const creds = await extractCredentials(session.provider, config);
312
- if (creds) {
325
+ // Re-check status after async operation (race condition protection)
326
+ // Use type assertion because TypeScript narrowing doesn't account for async race conditions
327
+ if (creds && session.status !== 'error') {
313
328
  session.token = creds.token;
314
329
  session.refreshToken = creds.refreshToken;
315
330
  session.tokenExpiresAt = creds.expiresAt;
@@ -331,8 +346,78 @@ export async function submitAuthCode(sessionId, code) {
331
346
  };
332
347
  }
333
348
  try {
334
- // Clean the code - trim whitespace
335
- const cleanCode = code.trim();
349
+ // Clean the code - trim whitespace and strip state parameter if present
350
+ // Claude OAuth codes come as "CODE#STATE" - we only need the code part
351
+ let cleanCode = code.trim();
352
+ if (cleanCode.includes('#')) {
353
+ const originalCode = cleanCode;
354
+ cleanCode = cleanCode.split('#')[0];
355
+ logger.info('Stripped state parameter from auth code', {
356
+ sessionId,
357
+ originalLength: originalCode.length,
358
+ cleanLength: cleanCode.length,
359
+ });
360
+ }
361
+ // For Codex (openai), forward the callback to the CLI's localhost server
362
+ // instead of writing to PTY stdin. The CLI spawns a localhost server
363
+ // waiting for the OAuth callback.
364
+ if (session.provider === 'openai' && session.authUrl) {
365
+ // Extract the redirect port from the auth URL (usually 1455)
366
+ const redirectMatch = session.authUrl.match(/redirect_uri=http%3A%2F%2Flocalhost%3A(\d+)/);
367
+ const port = redirectMatch ? redirectMatch[1] : '1455';
368
+ logger.info('Forwarding OAuth callback to Codex CLI localhost server', {
369
+ sessionId,
370
+ port,
371
+ codeLength: cleanCode.length,
372
+ hasState: !!state,
373
+ });
374
+ try {
375
+ // Forward the callback to the CLI's localhost server
376
+ // Include state parameter for CSRF validation if provided
377
+ let callbackUrl = `http://localhost:${port}/auth/callback?code=${encodeURIComponent(cleanCode)}`;
378
+ if (state) {
379
+ callbackUrl += `&state=${encodeURIComponent(state)}`;
380
+ }
381
+ const response = await fetch(callbackUrl, {
382
+ method: 'GET',
383
+ signal: AbortSignal.timeout(5000),
384
+ });
385
+ if (response.ok) {
386
+ logger.info('OAuth callback forwarded successfully to Codex CLI', { sessionId, status: response.status });
387
+ // Start polling for credentials
388
+ const config = CLI_AUTH_CONFIG[session.provider];
389
+ if (config) {
390
+ pollForCredentials(session, config);
391
+ }
392
+ return { success: true };
393
+ }
394
+ else {
395
+ // Try to get error details from response body
396
+ let errorBody = '';
397
+ try {
398
+ errorBody = await response.text();
399
+ }
400
+ catch {
401
+ // Ignore
402
+ }
403
+ logger.warn('Codex CLI localhost server returned error', {
404
+ sessionId,
405
+ status: response.status,
406
+ statusText: response.statusText,
407
+ errorBody: errorBody.substring(0, 500), // Limit log size
408
+ callbackUrl: callbackUrl.replace(/code=[^&]+/, 'code=***'), // Redact code
409
+ });
410
+ // Fall through to PTY write as fallback
411
+ }
412
+ }
413
+ catch (err) {
414
+ logger.warn('Failed to forward callback to Codex CLI localhost server', {
415
+ sessionId,
416
+ error: String(err),
417
+ });
418
+ // Fall through to PTY write as fallback
419
+ }
420
+ }
336
421
  logger.info('Writing auth code to PTY', {
337
422
  sessionId,
338
423
  originalLength: code.length,
@@ -382,6 +467,14 @@ async function pollForCredentials(session, config) {
382
467
  try {
383
468
  const creds = await extractCredentials(session.provider, config);
384
469
  if (creds) {
470
+ // Double-check we're not in error state (race condition protection)
471
+ // Use type assertion because TypeScript narrowing doesn't account for async race conditions
472
+ if (session.status === 'error') {
473
+ logger.info('Credentials found but session is in error state, not overriding', {
474
+ provider: session.provider,
475
+ });
476
+ return;
477
+ }
385
478
  session.token = creds.token;
386
479
  session.refreshToken = creds.refreshToken;
387
480
  session.tokenExpiresAt = creds.expiresAt;
@@ -424,9 +517,18 @@ export async function completeAuthSession(sessionId) {
424
517
  const maxAttempts = 15;
425
518
  const pollInterval = 1000;
426
519
  for (let i = 0; i < maxAttempts; i++) {
520
+ // Check if session went into error state
521
+ if (session.status === 'error') {
522
+ return { success: false, error: session.error || 'Authentication failed' };
523
+ }
427
524
  try {
428
525
  const creds = await extractCredentials(session.provider, config);
429
526
  if (creds) {
527
+ // Double-check we're not in error state (race condition protection)
528
+ // Use type assertion because TypeScript narrowing doesn't account for async race conditions
529
+ if (session.status === 'error') {
530
+ return { success: false, error: session.error || 'Authentication failed' };
531
+ }
430
532
  session.token = creds.token;
431
533
  session.refreshToken = creds.refreshToken;
432
534
  session.tokenExpiresAt = creds.expiresAt;
@@ -534,4 +636,21 @@ async function extractCredentials(provider, config) {
534
636
  return null;
535
637
  }
536
638
  }
639
+ /**
640
+ * Check if a provider is authenticated (credentials exist)
641
+ * Used by the auth check endpoint for SSH tunnel flow
642
+ */
643
+ export async function checkProviderAuth(provider) {
644
+ const config = CLI_AUTH_CONFIG[provider];
645
+ if (!config) {
646
+ return false;
647
+ }
648
+ try {
649
+ const creds = await extractCredentials(provider, config);
650
+ return !!creds?.token;
651
+ }
652
+ catch {
653
+ return false;
654
+ }
655
+ }
537
656
  //# sourceMappingURL=cli-auth.js.map
@@ -8,7 +8,7 @@
8
8
  * ERROR -------> CLOSED
9
9
  */
10
10
  import net from 'node:net';
11
- import { type Envelope, type AckPayload } from '../protocol/types.js';
11
+ import { type Envelope, type AckPayload, type EntityType } from '../protocol/types.js';
12
12
  export type ConnectionState = 'CONNECTING' | 'HANDSHAKING' | 'ACTIVE' | 'CLOSING' | 'CLOSED' | 'ERROR';
13
13
  export interface ConnectionConfig {
14
14
  maxFrameBytes: number;
@@ -39,11 +39,14 @@ export declare class Connection {
39
39
  private config;
40
40
  private _state;
41
41
  private _agentName?;
42
+ private _entityType?;
42
43
  private _cli?;
43
44
  private _program?;
44
45
  private _model?;
45
46
  private _task?;
46
47
  private _workingDirectory?;
48
+ private _displayName?;
49
+ private _avatarUrl?;
47
50
  private _sessionId;
48
51
  private _resumeToken;
49
52
  private _isResumed;
@@ -59,11 +62,14 @@ export declare class Connection {
59
62
  constructor(socket: net.Socket, config?: Partial<ConnectionConfig>);
60
63
  get state(): ConnectionState;
61
64
  get agentName(): string | undefined;
65
+ get entityType(): EntityType | undefined;
62
66
  get cli(): string | undefined;
63
67
  get program(): string | undefined;
64
68
  get model(): string | undefined;
65
69
  get task(): string | undefined;
66
70
  get workingDirectory(): string | undefined;
71
+ get displayName(): string | undefined;
72
+ get avatarUrl(): string | undefined;
67
73
  get sessionId(): string;
68
74
  get resumeToken(): string;
69
75
  get isResumed(): boolean;
@@ -23,11 +23,14 @@ export class Connection {
23
23
  config;
24
24
  _state = 'CONNECTING';
25
25
  _agentName;
26
+ _entityType;
26
27
  _cli;
27
28
  _program;
28
29
  _model;
29
30
  _task;
30
31
  _workingDirectory;
32
+ _displayName;
33
+ _avatarUrl;
31
34
  _sessionId;
32
35
  _resumeToken;
33
36
  _isResumed = false;
@@ -58,6 +61,9 @@ export class Connection {
58
61
  get agentName() {
59
62
  return this._agentName;
60
63
  }
64
+ get entityType() {
65
+ return this._entityType;
66
+ }
61
67
  get cli() {
62
68
  return this._cli;
63
69
  }
@@ -73,6 +79,12 @@ export class Connection {
73
79
  get workingDirectory() {
74
80
  return this._workingDirectory;
75
81
  }
82
+ get displayName() {
83
+ return this._displayName;
84
+ }
85
+ get avatarUrl() {
86
+ return this._avatarUrl;
87
+ }
76
88
  get sessionId() {
77
89
  return this._sessionId;
78
90
  }
@@ -133,11 +145,14 @@ export class Connection {
133
145
  return;
134
146
  }
135
147
  this._agentName = envelope.payload.agent;
148
+ this._entityType = envelope.payload.entityType;
136
149
  this._cli = envelope.payload.cli;
137
150
  this._program = envelope.payload.program;
138
151
  this._model = envelope.payload.model;
139
152
  this._task = envelope.payload.task;
140
153
  this._workingDirectory = envelope.payload.workingDirectory;
154
+ this._displayName = envelope.payload.displayName;
155
+ this._avatarUrl = envelope.payload.avatarUrl;
141
156
  // Check for session resume
142
157
  const resumeToken = envelope.payload.session?.resume_token;
143
158
  if (resumeToken) {
@@ -26,6 +26,8 @@ export declare class Orchestrator extends EventEmitter {
26
26
  private sessions;
27
27
  private supervisor;
28
28
  private workspacesFile;
29
+ private clientAlive;
30
+ private pingInterval?;
29
31
  constructor(config?: Partial<OrchestratorConfig>);
30
32
  /**
31
33
  * Start the orchestrator
@@ -39,6 +39,9 @@ export class Orchestrator extends EventEmitter {
39
39
  contextPersistence: { enabled: true, autoInjectOnRestart: true },
40
40
  });
41
41
  workspacesFile;
42
+ // Track alive status for ping/pong keepalive
43
+ clientAlive = new WeakMap();
44
+ pingInterval;
42
45
  constructor(config = {}) {
43
46
  super();
44
47
  this.config = { ...DEFAULT_CONFIG, ...config };
@@ -73,6 +76,18 @@ export class Orchestrator extends EventEmitter {
73
76
  // Setup WebSocket
74
77
  this.wss = new WebSocketServer({ server: this.server });
75
78
  this.wss.on('connection', (ws, req) => this.handleWebSocket(ws, req));
79
+ // Setup ping/pong keepalive (30 second interval)
80
+ this.pingInterval = setInterval(() => {
81
+ this.wss?.clients.forEach((ws) => {
82
+ if (this.clientAlive.get(ws) === false) {
83
+ logger.info('WebSocket client unresponsive, closing');
84
+ ws.terminate();
85
+ return;
86
+ }
87
+ this.clientAlive.set(ws, false);
88
+ ws.ping();
89
+ });
90
+ }, 30000);
76
91
  return new Promise((resolve) => {
77
92
  this.server.listen(this.config.port, this.config.host, () => {
78
93
  logger.info('Orchestrator started', {
@@ -87,6 +102,11 @@ export class Orchestrator extends EventEmitter {
87
102
  */
88
103
  async stop() {
89
104
  logger.info('Stopping orchestrator');
105
+ // Clear ping interval
106
+ if (this.pingInterval) {
107
+ clearInterval(this.pingInterval);
108
+ this.pingInterval = undefined;
109
+ }
90
110
  // Stop all workspace daemons
91
111
  for (const [id] of this.workspaces) {
92
112
  await this.stopWorkspaceDaemon(id);
@@ -501,6 +521,12 @@ export class Orchestrator extends EventEmitter {
501
521
  */
502
522
  handleWebSocket(ws, _req) {
503
523
  logger.info('WebSocket client connected');
524
+ // Mark client as alive for ping/pong keepalive
525
+ this.clientAlive.set(ws, true);
526
+ // Handle pong responses
527
+ ws.on('pong', () => {
528
+ this.clientAlive.set(ws, true);
529
+ });
504
530
  const session = {
505
531
  userId: 'anonymous',
506
532
  githubUsername: 'anonymous',
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Workspace Repository Manager
3
+ *
4
+ * Manages repository cloning, updating, and removal for workspace containers.
5
+ * Uses a file-based tracking system (repos.json) to persist state across restarts.
6
+ *
7
+ * This replaces the static REPOSITORIES env var approach, allowing dynamic
8
+ * repo management without workspace restart.
9
+ */
10
+ import { EventEmitter } from 'events';
11
+ export interface RepoInfo {
12
+ /** Full GitHub repo name (e.g., "owner/repo") */
13
+ fullName: string;
14
+ /** Local directory name */
15
+ localName: string;
16
+ /** Absolute path to the cloned repo */
17
+ path: string;
18
+ /** Current status */
19
+ status: 'cloned' | 'cloning' | 'error' | 'removed';
20
+ /** Last sync timestamp */
21
+ lastSynced?: string;
22
+ /** Default branch */
23
+ defaultBranch?: string;
24
+ /** Error message if status is 'error' */
25
+ error?: string;
26
+ /** When the repo was added */
27
+ addedAt: string;
28
+ }
29
+ export interface ReposConfig {
30
+ version: number;
31
+ workspaceDir: string;
32
+ repos: Record<string, RepoInfo>;
33
+ lastUpdated: string;
34
+ }
35
+ export interface SyncResult {
36
+ success: boolean;
37
+ repo: string;
38
+ action: 'cloned' | 'updated' | 'already_synced' | 'error';
39
+ path?: string;
40
+ error?: string;
41
+ }
42
+ export interface RepoManagerConfig {
43
+ workspaceDir: string;
44
+ configFile?: string;
45
+ }
46
+ export declare class RepoManager extends EventEmitter {
47
+ private workspaceDir;
48
+ private configPath;
49
+ private config;
50
+ constructor(options: RepoManagerConfig);
51
+ /**
52
+ * Load or initialize the repos config file
53
+ */
54
+ private loadConfig;
55
+ /**
56
+ * Save the config to disk
57
+ */
58
+ private saveConfig;
59
+ /**
60
+ * Get all tracked repos
61
+ */
62
+ getRepos(): RepoInfo[];
63
+ /**
64
+ * Get a specific repo by full name
65
+ */
66
+ getRepo(fullName: string): RepoInfo | null;
67
+ /**
68
+ * Sync a repository (clone if new, pull if exists)
69
+ */
70
+ syncRepo(fullName: string): Promise<SyncResult>;
71
+ /**
72
+ * Remove a repository
73
+ */
74
+ removeRepo(fullName: string, deleteFiles?: boolean): Promise<boolean>;
75
+ /**
76
+ * Sync multiple repos (e.g., from initial REPOSITORIES env var)
77
+ */
78
+ syncRepos(fullNames: string[]): Promise<SyncResult[]>;
79
+ /**
80
+ * Initialize from REPOSITORIES env var (backward compatibility)
81
+ */
82
+ initFromEnv(): Promise<SyncResult[]>;
83
+ /**
84
+ * Scan workspace directory for existing repos and register them
85
+ * This handles repos that were cloned by entrypoint.sh before daemon started
86
+ */
87
+ scanExistingRepos(): void;
88
+ /**
89
+ * Clone a repository
90
+ */
91
+ private gitClone;
92
+ /**
93
+ * Pull updates for a repository
94
+ */
95
+ private gitPull;
96
+ /**
97
+ * Get the default branch of a repo
98
+ */
99
+ private getDefaultBranch;
100
+ /**
101
+ * Mark directory as safe for git (prevents "dubious ownership" errors)
102
+ */
103
+ private markSafeDirectory;
104
+ }
105
+ /**
106
+ * Get or create the repo manager instance
107
+ */
108
+ export declare function getRepoManager(workspaceDir?: string): RepoManager;
109
+ /**
110
+ * Initialize repo manager (call at startup)
111
+ *
112
+ * 1. Scans workspace for existing repos (handles entrypoint.sh clones)
113
+ * 2. Syncs any repos from REPOSITORIES env var that aren't already cloned
114
+ */
115
+ export declare function initRepoManager(workspaceDir?: string): Promise<RepoManager>;
116
+ //# sourceMappingURL=repo-manager.d.ts.map