agent-relay 1.1.0 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. package/.gitattributes +3 -0
  2. package/.nvmrc +1 -0
  3. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.json +65 -0
  4. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.md +37 -0
  5. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.json +65 -0
  6. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.md +37 -0
  7. package/.trajectories/completed/2026-01/traj_1rp3rges5811.json +49 -0
  8. package/.trajectories/completed/2026-01/traj_1rp3rges5811.md +31 -0
  9. package/.trajectories/completed/2026-01/traj_22bhyulruouw.json +113 -0
  10. package/.trajectories/completed/2026-01/traj_22bhyulruouw.md +57 -0
  11. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.json +53 -0
  12. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.md +32 -0
  13. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.json +26 -0
  14. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.md +6 -0
  15. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.json +47 -0
  16. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.md +32 -0
  17. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.json +53 -0
  18. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.md +32 -0
  19. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.json +59 -0
  20. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.md +33 -0
  21. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.json +53 -0
  22. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.md +32 -0
  23. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.json +48 -0
  24. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.md +24 -0
  25. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.json +209 -0
  26. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.md +97 -0
  27. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.json +48 -0
  28. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.md +24 -0
  29. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.json +49 -0
  30. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.md +23 -0
  31. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.json +53 -0
  32. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.md +32 -0
  33. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.json +49 -0
  34. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.md +31 -0
  35. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.json +26 -0
  36. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.md +6 -0
  37. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.json +59 -0
  38. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.md +37 -0
  39. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.json +77 -0
  40. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.md +42 -0
  41. package/.trajectories/completed/2026-01/traj_gjdre5voouod.json +53 -0
  42. package/.trajectories/completed/2026-01/traj_gjdre5voouod.md +32 -0
  43. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.json +25 -0
  44. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.md +15 -0
  45. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.json +101 -0
  46. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.md +44 -0
  47. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.json +22 -0
  48. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.md +5 -0
  49. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.json +53 -0
  50. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.md +32 -0
  51. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.json +25 -0
  52. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.md +15 -0
  53. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.json +53 -0
  54. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.md +32 -0
  55. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.json +53 -0
  56. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.md +32 -0
  57. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.json +48 -0
  58. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.md +24 -0
  59. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.json +53 -0
  60. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.md +32 -0
  61. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.json +77 -0
  62. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.md +42 -0
  63. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.json +53 -0
  64. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.md +32 -0
  65. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.json +83 -0
  66. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.md +47 -0
  67. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.json +59 -0
  68. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.md +37 -0
  69. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.json +48 -0
  70. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.md +16 -0
  71. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.json +59 -0
  72. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.md +37 -0
  73. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.json +53 -0
  74. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.md +32 -0
  75. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.json +84 -0
  76. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.md +109 -0
  77. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.json +53 -0
  78. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.md +32 -0
  79. package/.trajectories/completed/2026-01/traj_v87hypnongqx.json +71 -0
  80. package/.trajectories/completed/2026-01/traj_v87hypnongqx.md +42 -0
  81. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.json +53 -0
  82. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.md +32 -0
  83. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.json +20 -0
  84. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.md +6 -0
  85. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.json +175 -0
  86. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.md +82 -0
  87. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.json +47 -0
  88. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.md +32 -0
  89. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.json +59 -0
  90. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.md +37 -0
  91. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.json +53 -0
  92. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.md +32 -0
  93. package/.trajectories/index.json +314 -0
  94. package/ARCHITECTURE.md +1245 -0
  95. package/README.md +1 -1
  96. package/TESTING.md +278 -0
  97. package/deploy/init-db.sql +5 -0
  98. package/deploy/scripts/setup-fly-workspaces.sh +69 -0
  99. package/deploy/scripts/setup-railway.sh +75 -0
  100. package/deploy/workspace/entrypoint-browser.sh +118 -0
  101. package/deploy/workspace/entrypoint.sh +348 -0
  102. package/deploy/workspace/git-credential-relay +111 -0
  103. package/dist/bridge/spawner.d.ts +53 -0
  104. package/dist/bridge/spawner.js +203 -19
  105. package/dist/bridge/types.d.ts +12 -0
  106. package/dist/cli/index.js +618 -5
  107. package/dist/cloud/api/auth.d.ts +3 -2
  108. package/dist/cloud/api/auth.js +10 -98
  109. package/dist/cloud/api/billing.js +30 -9
  110. package/dist/cloud/api/cli-pty-runner.d.ts +54 -0
  111. package/dist/cloud/api/cli-pty-runner.js +119 -0
  112. package/dist/cloud/api/codex-auth-helper.d.ts +15 -0
  113. package/dist/cloud/api/codex-auth-helper.js +100 -0
  114. package/dist/cloud/api/generic-webhooks.d.ts +8 -0
  115. package/dist/cloud/api/generic-webhooks.js +129 -0
  116. package/dist/cloud/api/git.d.ts +8 -0
  117. package/dist/cloud/api/git.js +152 -0
  118. package/dist/cloud/api/github-app.d.ts +11 -0
  119. package/dist/cloud/api/github-app.js +189 -0
  120. package/dist/cloud/api/middleware/planLimits.d.ts +7 -0
  121. package/dist/cloud/api/middleware/planLimits.js +39 -1
  122. package/dist/cloud/api/monitoring.d.ts +11 -0
  123. package/dist/cloud/api/monitoring.js +578 -0
  124. package/dist/cloud/api/nango-auth.d.ts +9 -0
  125. package/dist/cloud/api/nango-auth.js +377 -0
  126. package/dist/cloud/api/onboarding.d.ts +8 -1
  127. package/dist/cloud/api/onboarding.js +313 -119
  128. package/dist/cloud/api/policy.d.ts +8 -0
  129. package/dist/cloud/api/policy.js +229 -0
  130. package/dist/cloud/api/providers.js +114 -42
  131. package/dist/cloud/api/repos.d.ts +1 -0
  132. package/dist/cloud/api/repos.js +186 -0
  133. package/dist/cloud/api/test-helpers.d.ts +10 -0
  134. package/dist/cloud/api/test-helpers.js +575 -0
  135. package/dist/cloud/api/webhooks.d.ts +8 -0
  136. package/dist/cloud/api/webhooks.js +645 -0
  137. package/dist/cloud/api/workspaces.js +320 -12
  138. package/dist/cloud/billing/plans.js +32 -19
  139. package/dist/cloud/billing/types.d.ts +9 -3
  140. package/dist/cloud/config.d.ts +9 -2
  141. package/dist/cloud/config.js +13 -4
  142. package/dist/cloud/db/drizzle.d.ts +84 -1
  143. package/dist/cloud/db/drizzle.js +470 -0
  144. package/dist/cloud/db/index.d.ts +9 -4
  145. package/dist/cloud/db/index.js +11 -3
  146. package/dist/cloud/db/schema.d.ts +3283 -556
  147. package/dist/cloud/db/schema.js +314 -1
  148. package/dist/cloud/index.d.ts +1 -0
  149. package/dist/cloud/index.js +2 -0
  150. package/dist/cloud/provisioner/index.d.ts +56 -0
  151. package/dist/cloud/provisioner/index.js +676 -34
  152. package/dist/cloud/server.d.ts +1 -0
  153. package/dist/cloud/server.js +362 -13
  154. package/dist/cloud/services/auto-scaler.d.ts +152 -0
  155. package/dist/cloud/services/auto-scaler.js +439 -0
  156. package/dist/cloud/services/capacity-manager.d.ts +148 -0
  157. package/dist/cloud/services/capacity-manager.js +449 -0
  158. package/dist/cloud/services/ci-agent-spawner.d.ts +49 -0
  159. package/dist/cloud/services/ci-agent-spawner.js +373 -0
  160. package/dist/cloud/services/index.d.ts +12 -0
  161. package/dist/cloud/services/index.js +15 -0
  162. package/dist/cloud/services/mention-handler.d.ts +65 -0
  163. package/dist/cloud/services/mention-handler.js +405 -0
  164. package/dist/cloud/services/nango.d.ts +186 -0
  165. package/dist/cloud/services/nango.js +344 -0
  166. package/dist/cloud/services/persistence.d.ts +131 -0
  167. package/dist/cloud/services/persistence.js +200 -0
  168. package/dist/cloud/services/planLimits.d.ts +37 -0
  169. package/dist/cloud/services/planLimits.js +86 -5
  170. package/dist/cloud/services/scaling-orchestrator.d.ts +159 -0
  171. package/dist/cloud/services/scaling-orchestrator.js +502 -0
  172. package/dist/cloud/services/scaling-policy.d.ts +121 -0
  173. package/dist/cloud/services/scaling-policy.js +415 -0
  174. package/dist/cloud/vault/index.js +1 -1
  175. package/dist/cloud/webhooks/index.d.ts +24 -0
  176. package/dist/cloud/webhooks/index.js +29 -0
  177. package/dist/cloud/webhooks/parsers/github.d.ts +8 -0
  178. package/dist/cloud/webhooks/parsers/github.js +234 -0
  179. package/dist/cloud/webhooks/parsers/index.d.ts +23 -0
  180. package/dist/cloud/webhooks/parsers/index.js +30 -0
  181. package/dist/cloud/webhooks/parsers/linear.d.ts +9 -0
  182. package/dist/cloud/webhooks/parsers/linear.js +258 -0
  183. package/dist/cloud/webhooks/parsers/slack.d.ts +9 -0
  184. package/dist/cloud/webhooks/parsers/slack.js +214 -0
  185. package/dist/cloud/webhooks/responders/github.d.ts +8 -0
  186. package/dist/cloud/webhooks/responders/github.js +73 -0
  187. package/dist/cloud/webhooks/responders/index.d.ts +23 -0
  188. package/dist/cloud/webhooks/responders/index.js +30 -0
  189. package/dist/cloud/webhooks/responders/linear.d.ts +9 -0
  190. package/dist/cloud/webhooks/responders/linear.js +149 -0
  191. package/dist/cloud/webhooks/responders/slack.d.ts +20 -0
  192. package/dist/cloud/webhooks/responders/slack.js +178 -0
  193. package/dist/cloud/webhooks/router.d.ts +25 -0
  194. package/dist/cloud/webhooks/router.js +504 -0
  195. package/dist/cloud/webhooks/rules-engine.d.ts +24 -0
  196. package/dist/cloud/webhooks/rules-engine.js +287 -0
  197. package/dist/cloud/webhooks/types.d.ts +186 -0
  198. package/dist/cloud/webhooks/types.js +8 -0
  199. package/dist/continuity/formatter.d.ts +51 -0
  200. package/dist/continuity/formatter.js +313 -0
  201. package/dist/continuity/handoff-store.d.ts +67 -0
  202. package/dist/continuity/handoff-store.js +472 -0
  203. package/dist/continuity/index.d.ts +45 -0
  204. package/dist/continuity/index.js +48 -0
  205. package/dist/continuity/ledger-store.d.ts +110 -0
  206. package/dist/continuity/ledger-store.js +500 -0
  207. package/dist/continuity/manager.d.ts +178 -0
  208. package/dist/continuity/manager.js +562 -0
  209. package/dist/continuity/parser.d.ts +76 -0
  210. package/dist/continuity/parser.js +579 -0
  211. package/dist/continuity/types.d.ts +180 -0
  212. package/dist/continuity/types.js +9 -0
  213. package/dist/daemon/agent-manager.d.ts +27 -0
  214. package/dist/daemon/agent-manager.js +107 -6
  215. package/dist/daemon/agent-registry.d.ts +32 -0
  216. package/dist/daemon/agent-registry.js +42 -2
  217. package/dist/daemon/api.d.ts +12 -0
  218. package/dist/daemon/api.js +131 -2
  219. package/dist/daemon/cli-auth.d.ts +67 -0
  220. package/dist/daemon/cli-auth.js +537 -0
  221. package/dist/daemon/cloud-sync.js +9 -7
  222. package/dist/daemon/orchestrator.js +30 -0
  223. package/dist/daemon/router.d.ts +5 -0
  224. package/dist/daemon/router.js +78 -26
  225. package/dist/daemon/server.d.ts +5 -0
  226. package/dist/daemon/server.js +9 -1
  227. package/dist/daemon/services/browser-testing.d.ts +88 -0
  228. package/dist/daemon/services/browser-testing.js +244 -0
  229. package/dist/daemon/services/container-spawner.d.ts +135 -0
  230. package/dist/daemon/services/container-spawner.js +313 -0
  231. package/dist/daemon/types.d.ts +5 -1
  232. package/dist/dashboard/out/404.html +1 -1
  233. package/dist/dashboard/out/_next/static/chunks/116-2502180def231162.js +1 -0
  234. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
  235. package/dist/dashboard/out/_next/static/chunks/699-3b1cd6618a45d259.js +1 -0
  236. package/dist/dashboard/out/_next/static/chunks/724-2dae7627550ab88f.js +9 -0
  237. package/dist/dashboard/out/_next/static/chunks/766-1f2dd8cb7f766b0b.js +1 -0
  238. package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-3fdfa60e53f2810d.js +1 -0
  239. package/dist/dashboard/out/_next/static/chunks/app/app/page-e6381e5a6e1fbcfd.js +1 -0
  240. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-3538dfe0ffe984b8.js +1 -0
  241. package/dist/dashboard/out/_next/static/chunks/app/history/{page-b6edd4dde8d08194.js → page-abb9ab2d329f56e9.js} +1 -1
  242. package/dist/dashboard/out/_next/static/chunks/app/layout-c0d118c0f92d969c.js +1 -0
  243. package/dist/dashboard/out/_next/static/chunks/app/login/page-c22d080201cbd9fb.js +1 -0
  244. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-67a3e98d9a43a6ed.js +1 -0
  245. package/dist/dashboard/out/_next/static/chunks/app/page-77e9c65420a06cfb.js +1 -0
  246. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-b08ed1c34d14434a.js +1 -0
  247. package/dist/dashboard/out/_next/static/chunks/app/providers/page-e88bc117ef7671c3.js +1 -0
  248. package/dist/dashboard/out/_next/static/chunks/app/signup/page-68d34f50baa8ab6b.js +1 -0
  249. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
  250. package/dist/dashboard/out/_next/static/chunks/{main-app-5d692157a8eb1fd9.js → main-app-6e8e8d3ef4e0192a.js} +1 -1
  251. package/dist/dashboard/out/_next/static/chunks/{main-c2f423b9c9f4591b.js → main-ed4e1fb6f29c34cf.js} +1 -1
  252. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
  253. package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +1 -0
  254. package/dist/dashboard/out/_next/static/css/7c3ae9e8617d42a5.css +1 -0
  255. package/dist/dashboard/out/app/onboarding.html +1 -0
  256. package/dist/dashboard/out/app/onboarding.txt +7 -0
  257. package/dist/dashboard/out/app.html +1 -14
  258. package/dist/dashboard/out/app.txt +2 -2
  259. package/dist/dashboard/out/connect-repos.html +1 -0
  260. package/dist/dashboard/out/connect-repos.txt +7 -0
  261. package/dist/dashboard/out/history.html +1 -1
  262. package/dist/dashboard/out/history.txt +2 -2
  263. package/dist/dashboard/out/index.html +1 -1
  264. package/dist/dashboard/out/index.txt +2 -2
  265. package/dist/dashboard/out/login.html +6 -0
  266. package/dist/dashboard/out/login.txt +7 -0
  267. package/dist/dashboard/out/metrics.html +1 -1
  268. package/dist/dashboard/out/metrics.txt +2 -2
  269. package/dist/dashboard/out/pricing.html +3 -3
  270. package/dist/dashboard/out/pricing.txt +2 -2
  271. package/dist/dashboard/out/providers.html +1 -0
  272. package/dist/dashboard/out/providers.txt +7 -0
  273. package/dist/dashboard/out/signup.html +6 -0
  274. package/dist/dashboard/out/signup.txt +7 -0
  275. package/dist/dashboard-server/server.js +1308 -8
  276. package/dist/hooks/emitter.d.ts +40 -0
  277. package/dist/hooks/emitter.js +63 -0
  278. package/dist/hooks/index.d.ts +3 -0
  279. package/dist/hooks/index.js +3 -0
  280. package/dist/hooks/registry.d.ts +173 -0
  281. package/dist/hooks/registry.js +476 -0
  282. package/dist/hooks/trajectory-hooks.d.ts +52 -0
  283. package/dist/hooks/trajectory-hooks.js +183 -0
  284. package/dist/hooks/types.d.ts +141 -0
  285. package/dist/index.d.ts +2 -0
  286. package/dist/index.js +3 -0
  287. package/dist/memory/adapters/index.d.ts +8 -0
  288. package/dist/memory/adapters/index.js +8 -0
  289. package/dist/memory/adapters/inmemory.d.ts +59 -0
  290. package/dist/memory/adapters/inmemory.js +195 -0
  291. package/dist/memory/adapters/supermemory.d.ts +71 -0
  292. package/dist/memory/adapters/supermemory.js +338 -0
  293. package/dist/memory/factory.d.ts +48 -0
  294. package/dist/memory/factory.js +143 -0
  295. package/dist/memory/index.d.ts +32 -0
  296. package/dist/memory/index.js +32 -0
  297. package/dist/memory/memory-hooks.d.ts +60 -0
  298. package/dist/memory/memory-hooks.js +313 -0
  299. package/dist/memory/service.d.ts +49 -0
  300. package/dist/memory/service.js +146 -0
  301. package/dist/memory/types.d.ts +195 -0
  302. package/dist/memory/types.js +8 -0
  303. package/dist/policy/agent-policy.d.ts +225 -0
  304. package/dist/policy/agent-policy.js +665 -0
  305. package/dist/policy/cloud-policy-fetcher.d.ts +12 -0
  306. package/dist/policy/cloud-policy-fetcher.js +64 -0
  307. package/dist/resiliency/crash-insights.d.ts +156 -0
  308. package/dist/resiliency/crash-insights.js +492 -0
  309. package/dist/resiliency/gossip-health.d.ts +137 -0
  310. package/dist/resiliency/gossip-health.js +241 -0
  311. package/dist/resiliency/index.d.ts +5 -0
  312. package/dist/resiliency/index.js +5 -0
  313. package/dist/resiliency/leader-watchdog.d.ts +109 -0
  314. package/dist/resiliency/leader-watchdog.js +189 -0
  315. package/dist/resiliency/memory-monitor.d.ts +172 -0
  316. package/dist/resiliency/memory-monitor.js +593 -0
  317. package/dist/resiliency/stateless-lead.d.ts +149 -0
  318. package/dist/resiliency/stateless-lead.js +308 -0
  319. package/dist/resiliency/supervisor.d.ts +38 -0
  320. package/dist/resiliency/supervisor.js +122 -0
  321. package/dist/shared/cli-auth-config.d.ts +91 -0
  322. package/dist/shared/cli-auth-config.js +264 -0
  323. package/dist/storage/adapter.d.ts +1 -1
  324. package/dist/trajectory/config.d.ts +84 -0
  325. package/dist/trajectory/config.js +163 -0
  326. package/dist/trajectory/index.d.ts +8 -0
  327. package/dist/trajectory/index.js +8 -0
  328. package/dist/trajectory/integration.d.ts +292 -0
  329. package/dist/trajectory/integration.js +834 -0
  330. package/dist/utils/logger.js +1 -1
  331. package/dist/utils/project-namespace.d.ts +24 -0
  332. package/dist/utils/project-namespace.js +84 -0
  333. package/dist/wrapper/parser.d.ts +10 -0
  334. package/dist/wrapper/parser.js +100 -33
  335. package/dist/wrapper/pty-wrapper.d.ts +197 -16
  336. package/dist/wrapper/pty-wrapper.js +943 -106
  337. package/dist/wrapper/shared.d.ts +165 -0
  338. package/dist/wrapper/shared.js +270 -0
  339. package/dist/wrapper/tmux-wrapper.d.ts +73 -11
  340. package/dist/wrapper/tmux-wrapper.js +541 -120
  341. package/package.json +16 -16
  342. package/scripts/postinstall.js +60 -0
  343. package/test-push.txt +1 -0
  344. package/bin/tmux +0 -0
  345. package/dist/bridge/config.d.ts.map +0 -1
  346. package/dist/bridge/config.js.map +0 -1
  347. package/dist/bridge/index.d.ts.map +0 -1
  348. package/dist/bridge/index.js.map +0 -1
  349. package/dist/bridge/multi-project-client.d.ts.map +0 -1
  350. package/dist/bridge/multi-project-client.js.map +0 -1
  351. package/dist/bridge/shadow-cli.d.ts.map +0 -1
  352. package/dist/bridge/shadow-cli.js.map +0 -1
  353. package/dist/bridge/shadow-config.d.ts.map +0 -1
  354. package/dist/bridge/shadow-config.js.map +0 -1
  355. package/dist/bridge/spawner.d.ts.map +0 -1
  356. package/dist/bridge/spawner.js.map +0 -1
  357. package/dist/bridge/teams-config.d.ts.map +0 -1
  358. package/dist/bridge/teams-config.js.map +0 -1
  359. package/dist/bridge/types.d.ts.map +0 -1
  360. package/dist/bridge/types.js.map +0 -1
  361. package/dist/bridge/utils.d.ts.map +0 -1
  362. package/dist/bridge/utils.js.map +0 -1
  363. package/dist/cli/index.d.ts.map +0 -1
  364. package/dist/cli/index.js.map +0 -1
  365. package/dist/cloud/api/auth.d.ts.map +0 -1
  366. package/dist/cloud/api/auth.js.map +0 -1
  367. package/dist/cloud/api/billing.d.ts.map +0 -1
  368. package/dist/cloud/api/billing.js.map +0 -1
  369. package/dist/cloud/api/coordinators.d.ts.map +0 -1
  370. package/dist/cloud/api/coordinators.js.map +0 -1
  371. package/dist/cloud/api/daemons.d.ts.map +0 -1
  372. package/dist/cloud/api/daemons.js.map +0 -1
  373. package/dist/cloud/api/middleware/planLimits.d.ts.map +0 -1
  374. package/dist/cloud/api/middleware/planLimits.js.map +0 -1
  375. package/dist/cloud/api/onboarding.d.ts.map +0 -1
  376. package/dist/cloud/api/onboarding.js.map +0 -1
  377. package/dist/cloud/api/providers.d.ts.map +0 -1
  378. package/dist/cloud/api/providers.js.map +0 -1
  379. package/dist/cloud/api/repos.d.ts.map +0 -1
  380. package/dist/cloud/api/repos.js.map +0 -1
  381. package/dist/cloud/api/teams.d.ts.map +0 -1
  382. package/dist/cloud/api/teams.js.map +0 -1
  383. package/dist/cloud/api/usage.d.ts.map +0 -1
  384. package/dist/cloud/api/usage.js.map +0 -1
  385. package/dist/cloud/api/workspaces.d.ts.map +0 -1
  386. package/dist/cloud/api/workspaces.js.map +0 -1
  387. package/dist/cloud/billing/index.d.ts.map +0 -1
  388. package/dist/cloud/billing/index.js.map +0 -1
  389. package/dist/cloud/billing/plans.d.ts.map +0 -1
  390. package/dist/cloud/billing/plans.js.map +0 -1
  391. package/dist/cloud/billing/service.d.ts.map +0 -1
  392. package/dist/cloud/billing/service.js.map +0 -1
  393. package/dist/cloud/billing/types.d.ts.map +0 -1
  394. package/dist/cloud/billing/types.js.map +0 -1
  395. package/dist/cloud/config.d.ts.map +0 -1
  396. package/dist/cloud/config.js.map +0 -1
  397. package/dist/cloud/db/drizzle.d.ts.map +0 -1
  398. package/dist/cloud/db/drizzle.js.map +0 -1
  399. package/dist/cloud/db/index.d.ts.map +0 -1
  400. package/dist/cloud/db/index.js.map +0 -1
  401. package/dist/cloud/db/schema.d.ts.map +0 -1
  402. package/dist/cloud/db/schema.js.map +0 -1
  403. package/dist/cloud/index.d.ts.map +0 -1
  404. package/dist/cloud/index.js.map +0 -1
  405. package/dist/cloud/provisioner/index.d.ts.map +0 -1
  406. package/dist/cloud/provisioner/index.js.map +0 -1
  407. package/dist/cloud/server.d.ts.map +0 -1
  408. package/dist/cloud/server.js.map +0 -1
  409. package/dist/cloud/services/coordinator.d.ts.map +0 -1
  410. package/dist/cloud/services/coordinator.js.map +0 -1
  411. package/dist/cloud/services/planLimits.d.ts.map +0 -1
  412. package/dist/cloud/services/planLimits.js.map +0 -1
  413. package/dist/cloud/vault/index.d.ts.map +0 -1
  414. package/dist/cloud/vault/index.js.map +0 -1
  415. package/dist/daemon/agent-manager.d.ts.map +0 -1
  416. package/dist/daemon/agent-manager.js.map +0 -1
  417. package/dist/daemon/agent-registry.d.ts.map +0 -1
  418. package/dist/daemon/agent-registry.js.map +0 -1
  419. package/dist/daemon/api.d.ts.map +0 -1
  420. package/dist/daemon/api.js.map +0 -1
  421. package/dist/daemon/auth.d.ts.map +0 -1
  422. package/dist/daemon/auth.js.map +0 -1
  423. package/dist/daemon/cloud-sync.d.ts.map +0 -1
  424. package/dist/daemon/cloud-sync.js.map +0 -1
  425. package/dist/daemon/connection.d.ts.map +0 -1
  426. package/dist/daemon/connection.js.map +0 -1
  427. package/dist/daemon/index.d.ts.map +0 -1
  428. package/dist/daemon/index.js.map +0 -1
  429. package/dist/daemon/orchestrator.d.ts.map +0 -1
  430. package/dist/daemon/orchestrator.js.map +0 -1
  431. package/dist/daemon/registry.d.ts.map +0 -1
  432. package/dist/daemon/registry.js.map +0 -1
  433. package/dist/daemon/router.d.ts.map +0 -1
  434. package/dist/daemon/router.js.map +0 -1
  435. package/dist/daemon/server.d.ts.map +0 -1
  436. package/dist/daemon/server.js.map +0 -1
  437. package/dist/daemon/types.d.ts.map +0 -1
  438. package/dist/daemon/types.js.map +0 -1
  439. package/dist/daemon/workspace-manager.d.ts.map +0 -1
  440. package/dist/daemon/workspace-manager.js.map +0 -1
  441. package/dist/dashboard/out/_next/static/chunks/693-7b3301d8f6bc5014.js +0 -1
  442. package/dist/dashboard/out/_next/static/chunks/713-f78477eb185f1f4d.js +0 -1
  443. package/dist/dashboard/out/_next/static/chunks/766-e53e1cfe39b0b5b5.js +0 -1
  444. package/dist/dashboard/out/_next/static/chunks/900-037c64bfd797fb2a.js +0 -1
  445. package/dist/dashboard/out/_next/static/chunks/app/app/page-e3d9e1f4466b9bae.js +0 -1
  446. package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +0 -1
  447. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-e68825a81db67ba1.js +0 -1
  448. package/dist/dashboard/out/_next/static/chunks/app/page-cc108bf68c8a657f.js +0 -1
  449. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-d80e03a5297f95b6.js +0 -1
  450. package/dist/dashboard/out/_next/static/chunks/webpack-a5acc2831d094776.js +0 -1
  451. package/dist/dashboard/out/_next/static/css/79b80143647a07d7.css +0 -1
  452. package/dist/dashboard/out/_next/static/css/8cf277370ad48cfe.css +0 -1
  453. package/dist/dashboard-server/metrics.d.ts.map +0 -1
  454. package/dist/dashboard-server/metrics.js.map +0 -1
  455. package/dist/dashboard-server/needs-attention.d.ts.map +0 -1
  456. package/dist/dashboard-server/needs-attention.js.map +0 -1
  457. package/dist/dashboard-server/server.d.ts.map +0 -1
  458. package/dist/dashboard-server/server.js.map +0 -1
  459. package/dist/dashboard-server/start.d.ts.map +0 -1
  460. package/dist/dashboard-server/start.js.map +0 -1
  461. package/dist/hooks/inbox-check/hook.d.ts.map +0 -1
  462. package/dist/hooks/inbox-check/hook.js.map +0 -1
  463. package/dist/hooks/inbox-check/index.d.ts.map +0 -1
  464. package/dist/hooks/inbox-check/index.js.map +0 -1
  465. package/dist/hooks/inbox-check/types.d.ts.map +0 -1
  466. package/dist/hooks/inbox-check/types.js.map +0 -1
  467. package/dist/hooks/inbox-check/utils.d.ts.map +0 -1
  468. package/dist/hooks/inbox-check/utils.js.map +0 -1
  469. package/dist/hooks/index.d.ts.map +0 -1
  470. package/dist/hooks/index.js.map +0 -1
  471. package/dist/hooks/types.d.ts.map +0 -1
  472. package/dist/hooks/types.js.map +0 -1
  473. package/dist/index.d.ts.map +0 -1
  474. package/dist/index.js.map +0 -1
  475. package/dist/protocol/framing.d.ts.map +0 -1
  476. package/dist/protocol/framing.js.map +0 -1
  477. package/dist/protocol/index.d.ts.map +0 -1
  478. package/dist/protocol/index.js.map +0 -1
  479. package/dist/protocol/types.d.ts.map +0 -1
  480. package/dist/protocol/types.js.map +0 -1
  481. package/dist/resiliency/context-persistence.d.ts.map +0 -1
  482. package/dist/resiliency/context-persistence.js.map +0 -1
  483. package/dist/resiliency/health-monitor.d.ts.map +0 -1
  484. package/dist/resiliency/health-monitor.js.map +0 -1
  485. package/dist/resiliency/index.d.ts.map +0 -1
  486. package/dist/resiliency/index.js.map +0 -1
  487. package/dist/resiliency/logger.d.ts.map +0 -1
  488. package/dist/resiliency/logger.js.map +0 -1
  489. package/dist/resiliency/metrics.d.ts.map +0 -1
  490. package/dist/resiliency/metrics.js.map +0 -1
  491. package/dist/resiliency/provider-context.d.ts.map +0 -1
  492. package/dist/resiliency/provider-context.js.map +0 -1
  493. package/dist/resiliency/supervisor.d.ts.map +0 -1
  494. package/dist/resiliency/supervisor.js.map +0 -1
  495. package/dist/state/agent-state.d.ts.map +0 -1
  496. package/dist/state/agent-state.js.map +0 -1
  497. package/dist/storage/adapter.d.ts.map +0 -1
  498. package/dist/storage/adapter.js.map +0 -1
  499. package/dist/storage/sqlite-adapter.d.ts.map +0 -1
  500. package/dist/storage/sqlite-adapter.js.map +0 -1
  501. package/dist/utils/agent-config.d.ts.map +0 -1
  502. package/dist/utils/agent-config.js.map +0 -1
  503. package/dist/utils/command-resolver.d.ts.map +0 -1
  504. package/dist/utils/command-resolver.js.map +0 -1
  505. package/dist/utils/index.d.ts.map +0 -1
  506. package/dist/utils/index.js.map +0 -1
  507. package/dist/utils/logger.d.ts.map +0 -1
  508. package/dist/utils/logger.js.map +0 -1
  509. package/dist/utils/name-generator.d.ts.map +0 -1
  510. package/dist/utils/name-generator.js.map +0 -1
  511. package/dist/utils/project-namespace.d.ts.map +0 -1
  512. package/dist/utils/project-namespace.js.map +0 -1
  513. package/dist/utils/tmux-resolver.d.ts.map +0 -1
  514. package/dist/utils/tmux-resolver.js.map +0 -1
  515. package/dist/utils/update-checker.d.ts.map +0 -1
  516. package/dist/utils/update-checker.js.map +0 -1
  517. package/dist/wrapper/client.d.ts.map +0 -1
  518. package/dist/wrapper/client.js.map +0 -1
  519. package/dist/wrapper/inbox.d.ts.map +0 -1
  520. package/dist/wrapper/inbox.js.map +0 -1
  521. package/dist/wrapper/index.d.ts.map +0 -1
  522. package/dist/wrapper/index.js.map +0 -1
  523. package/dist/wrapper/parser.d.ts.map +0 -1
  524. package/dist/wrapper/parser.js.map +0 -1
  525. package/dist/wrapper/pty-wrapper.d.ts.map +0 -1
  526. package/dist/wrapper/pty-wrapper.js.map +0 -1
  527. package/dist/wrapper/tmux-wrapper.d.ts.map +0 -1
  528. package/dist/wrapper/tmux-wrapper.js.map +0 -1
  529. package/docs/AGENTS.md +0 -513
  530. package/docs/ARCHITECTURE_DECISIONS.md +0 -175
  531. package/docs/CHANGELOG.md +0 -11
  532. package/docs/CLI-SIMPLIFICATION-COMPLETE.md +0 -48
  533. package/docs/CLOUD-ARCHITECTURE.md +0 -652
  534. package/docs/CLOUD-ONBOARDING-DESIGN.md +0 -1983
  535. package/docs/COMPETITIVE_ANALYSIS.md +0 -897
  536. package/docs/CONTRIBUTING.md +0 -151
  537. package/docs/DESIGN_BRIDGE_STAFFING.md +0 -878
  538. package/docs/DESIGN_V2.md +0 -1079
  539. package/docs/INTEGRATION-GUIDE.md +0 -926
  540. package/docs/MONETIZATION.md +0 -1679
  541. package/docs/PROPOSAL-trajectories.md +0 -1582
  542. package/docs/PROTOCOL.md +0 -325
  543. package/docs/SCALING_ANALYSIS.md +0 -280
  544. package/docs/TESTING_PRESENCE_FEATURES.md +0 -327
  545. package/docs/TMUX_IMPLEMENTATION_NOTES.md +0 -364
  546. package/docs/TMUX_IMPROVEMENTS.md +0 -968
  547. package/docs/agent-relay-snippet.md +0 -168
  548. package/docs/competitive-analysis-mcp-agent-mail.md +0 -389
  549. package/docs/dashboard-v2-plan.md +0 -179
  550. package/docs/guides/CLOUD.md +0 -236
  551. package/docs/guides/LOCAL.md +0 -535
  552. package/docs/guides/SELF-HOSTED.md +0 -494
  553. package/docs/proposals/shadow-as-subagent.md +0 -765
  554. package/docs/proposals/slack-bot-integration.md +0 -1457
  555. package/docs/removable-code-analysis.md +0 -24
  556. package/scripts/dev/PUBLIC_RELEASE_PLAN.md +0 -88
  557. package/scripts/dev/dev-team-setup.sh +0 -431
  558. package/scripts/e2e-test.sh +0 -119
  559. package/scripts/games/game-protocol.md +0 -79
  560. package/scripts/games/hearts-setup.sh +0 -264
  561. package/scripts/tictactoe-setup.sh +0 -181
  562. /package/dist/dashboard/out/_next/static/chunks/{117-b2cd8d6485aacf2b.js → 117-f7b8ab0809342e77.js} +0 -0
  563. /package/dist/dashboard/out/_next/static/chunks/{648-8f3f26864ce515e5.js → 648-5cc6e1921389a58a.js} +0 -0
  564. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-0b990dbb71d72a98.js → page-53b8a69f76db17d0.js} +0 -0
  565. /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-bf46c09eb57e019c.js → fd9d1056-609918ca7b6280bb.js} +0 -0
  566. /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → wPgKJtcOmTFLpUncDg16A}/_buildManifest.js +0 -0
  567. /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → wPgKJtcOmTFLpUncDg16A}/_ssgManifest.js +0 -0
@@ -17,16 +17,55 @@ export const users = pgTable('users', {
17
17
  email: varchar('email', { length: 255 }),
18
18
  avatarUrl: varchar('avatar_url', { length: 512 }),
19
19
  plan: varchar('plan', { length: 50 }).notNull().default('free'),
20
+ // Nango OAuth connections
21
+ nangoConnectionId: varchar('nango_connection_id', { length: 255 }), // Permanent login connection
22
+ incomingConnectionId: varchar('incoming_connection_id', { length: 255 }), // Temp polling connection
23
+ pendingInstallationRequest: timestamp('pending_installation_request'), // Org approval wait
20
24
  onboardingCompletedAt: timestamp('onboarding_completed_at'),
21
25
  createdAt: timestamp('created_at').defaultNow().notNull(),
22
26
  updatedAt: timestamp('updated_at').defaultNow().notNull(),
23
- });
27
+ }, (table) => ({
28
+ nangoConnectionIdx: index('idx_users_nango_connection').on(table.nangoConnectionId),
29
+ incomingConnectionIdx: index('idx_users_incoming_connection').on(table.incomingConnectionId),
30
+ }));
24
31
  export const usersRelations = relations(users, ({ many }) => ({
25
32
  credentials: many(credentials),
26
33
  workspaces: many(workspaces),
27
34
  projectGroups: many(projectGroups),
28
35
  repositories: many(repositories),
29
36
  linkedDaemons: many(linkedDaemons),
37
+ installedGitHubApps: many(githubInstallations),
38
+ }));
39
+ // ============================================================================
40
+ // GitHub App Installations
41
+ // ============================================================================
42
+ export const githubInstallations = pgTable('github_installations', {
43
+ id: uuid('id').primaryKey().defaultRandom(),
44
+ installationId: varchar('installation_id', { length: 255 }).unique().notNull(),
45
+ accountType: varchar('account_type', { length: 50 }).notNull(), // 'user' | 'organization'
46
+ accountLogin: varchar('account_login', { length: 255 }).notNull(),
47
+ accountId: varchar('account_id', { length: 255 }).notNull(),
48
+ installedById: uuid('installed_by_id').references(() => users.id, { onDelete: 'set null' }),
49
+ // Permissions granted to the installation
50
+ permissions: jsonb('permissions').$type().default({}),
51
+ // Events the installation is subscribed to
52
+ events: text('events').array(),
53
+ // Installation state
54
+ suspended: boolean('suspended').notNull().default(false),
55
+ suspendedAt: timestamp('suspended_at'),
56
+ suspendedBy: varchar('suspended_by', { length: 255 }),
57
+ createdAt: timestamp('created_at').defaultNow().notNull(),
58
+ updatedAt: timestamp('updated_at').defaultNow().notNull(),
59
+ }, (table) => ({
60
+ accountLoginIdx: index('idx_github_installations_account_login').on(table.accountLogin),
61
+ installedByIdx: index('idx_github_installations_installed_by').on(table.installedById),
62
+ }));
63
+ export const githubInstallationsRelations = relations(githubInstallations, ({ one, many }) => ({
64
+ installedBy: one(users, {
65
+ fields: [githubInstallations.installedById],
66
+ references: [users.id],
67
+ }),
68
+ repositories: many(repositories),
30
69
  }));
31
70
  // ============================================================================
32
71
  // Credentials (provider tokens)
@@ -144,6 +183,9 @@ export const repositories = pgTable('repositories', {
144
183
  userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
145
184
  workspaceId: uuid('workspace_id').references(() => workspaces.id, { onDelete: 'set null' }),
146
185
  projectGroupId: uuid('project_group_id').references(() => projectGroups.id, { onDelete: 'set null' }),
186
+ // GitHub App installation that provides access to this repo
187
+ installationId: uuid('installation_id').references(() => githubInstallations.id, { onDelete: 'set null' }),
188
+ nangoConnectionId: varchar('nango_connection_id', { length: 255 }),
147
189
  githubFullName: varchar('github_full_name', { length: 255 }).notNull(),
148
190
  githubId: bigint('github_id', { mode: 'number' }).notNull(),
149
191
  defaultBranch: varchar('default_branch', { length: 255 }).notNull().default('main'),
@@ -159,6 +201,8 @@ export const repositories = pgTable('repositories', {
159
201
  userIdIdx: index('idx_repositories_user_id').on(table.userId),
160
202
  workspaceIdIdx: index('idx_repositories_workspace_id').on(table.workspaceId),
161
203
  projectGroupIdIdx: index('idx_repositories_project_group_id').on(table.projectGroupId),
204
+ installationIdIdx: index('idx_repositories_installation_id').on(table.installationId),
205
+ nangoConnectionIdx: index('idx_repositories_nango_connection').on(table.nangoConnectionId),
162
206
  }));
163
207
  export const repositoriesRelations = relations(repositories, ({ one }) => ({
164
208
  user: one(users, {
@@ -173,6 +217,10 @@ export const repositoriesRelations = relations(repositories, ({ one }) => ({
173
217
  fields: [repositories.projectGroupId],
174
218
  references: [projectGroups.id],
175
219
  }),
220
+ installation: one(githubInstallations, {
221
+ fields: [repositories.installationId],
222
+ references: [githubInstallations.id],
223
+ }),
176
224
  }));
177
225
  // ============================================================================
178
226
  // Linked Daemons (local agent-relay instances)
@@ -231,4 +279,269 @@ export const usageRecords = pgTable('usage_records', {
231
279
  userIdIdx: index('idx_usage_records_user_id').on(table.userId),
232
280
  recordedAtIdx: index('idx_usage_records_recorded_at').on(table.recordedAt),
233
281
  }));
282
+ // ============================================================================
283
+ // Agent Sessions (cloud persistence for PtyWrapper agents)
284
+ // ============================================================================
285
+ export const agentSessions = pgTable('agent_sessions', {
286
+ id: uuid('id').primaryKey().defaultRandom(),
287
+ workspaceId: uuid('workspace_id').notNull().references(() => workspaces.id, { onDelete: 'cascade' }),
288
+ agentName: varchar('agent_name', { length: 255 }).notNull(),
289
+ status: varchar('status', { length: 50 }).notNull().default('active'),
290
+ startedAt: timestamp('started_at').defaultNow().notNull(),
291
+ endedAt: timestamp('ended_at'),
292
+ endMarker: jsonb('end_marker').$type(),
293
+ metadata: jsonb('metadata').notNull().default({}),
294
+ }, (table) => ({
295
+ workspaceIdIdx: index('idx_agent_sessions_workspace_id').on(table.workspaceId),
296
+ agentNameIdx: index('idx_agent_sessions_agent_name').on(table.agentName),
297
+ statusIdx: index('idx_agent_sessions_status').on(table.status),
298
+ }));
299
+ // ============================================================================
300
+ // Agent Summaries (cloud persistence for [[SUMMARY]] blocks)
301
+ // ============================================================================
302
+ export const agentSummaries = pgTable('agent_summaries', {
303
+ id: uuid('id').primaryKey().defaultRandom(),
304
+ sessionId: uuid('session_id').notNull().references(() => agentSessions.id, { onDelete: 'cascade' }),
305
+ agentName: varchar('agent_name', { length: 255 }).notNull(),
306
+ summary: jsonb('summary').$type().notNull(),
307
+ createdAt: timestamp('created_at').defaultNow().notNull(),
308
+ }, (table) => ({
309
+ sessionIdIdx: index('idx_agent_summaries_session_id').on(table.sessionId),
310
+ agentNameIdx: index('idx_agent_summaries_agent_name').on(table.agentName),
311
+ }));
312
+ export const agentMetrics = pgTable('agent_metrics', {
313
+ id: uuid('id').primaryKey().defaultRandom(),
314
+ daemonId: uuid('daemon_id').notNull().references(() => linkedDaemons.id, { onDelete: 'cascade' }),
315
+ agentName: varchar('agent_name', { length: 255 }).notNull(),
316
+ pid: bigint('pid', { mode: 'number' }),
317
+ status: varchar('status', { length: 50 }).notNull().default('unknown'),
318
+ // Current memory snapshot
319
+ rssBytes: bigint('rss_bytes', { mode: 'number' }),
320
+ heapUsedBytes: bigint('heap_used_bytes', { mode: 'number' }),
321
+ cpuPercent: bigint('cpu_percent', { mode: 'number' }),
322
+ // Trend data
323
+ trend: varchar('trend', { length: 20 }),
324
+ trendRatePerMinute: bigint('trend_rate_per_minute', { mode: 'number' }),
325
+ alertLevel: varchar('alert_level', { length: 20 }).default('normal'),
326
+ // Watermarks
327
+ highWatermark: bigint('high_watermark', { mode: 'number' }),
328
+ averageRss: bigint('average_rss', { mode: 'number' }),
329
+ // Full metrics JSON for detailed data
330
+ metricsData: jsonb('metrics_data').$type(),
331
+ // Timestamps
332
+ uptimeMs: bigint('uptime_ms', { mode: 'number' }),
333
+ startedAt: timestamp('started_at'),
334
+ recordedAt: timestamp('recorded_at').defaultNow().notNull(),
335
+ }, (table) => ({
336
+ daemonIdIdx: index('idx_agent_metrics_daemon_id').on(table.daemonId),
337
+ agentNameIdx: index('idx_agent_metrics_agent_name').on(table.agentName),
338
+ recordedAtIdx: index('idx_agent_metrics_recorded_at').on(table.recordedAt),
339
+ alertLevelIdx: index('idx_agent_metrics_alert_level').on(table.alertLevel),
340
+ }));
341
+ export const agentMetricsRelations = relations(agentMetrics, ({ one }) => ({
342
+ daemon: one(linkedDaemons, {
343
+ fields: [agentMetrics.daemonId],
344
+ references: [linkedDaemons.id],
345
+ }),
346
+ }));
347
+ // ============================================================================
348
+ // Agent Crashes (crash history with insights)
349
+ // ============================================================================
350
+ export const agentCrashes = pgTable('agent_crashes', {
351
+ id: uuid('id').primaryKey().defaultRandom(),
352
+ daemonId: uuid('daemon_id').notNull().references(() => linkedDaemons.id, { onDelete: 'cascade' }),
353
+ agentName: varchar('agent_name', { length: 255 }).notNull(),
354
+ pid: bigint('pid', { mode: 'number' }),
355
+ exitCode: bigint('exit_code', { mode: 'number' }),
356
+ signal: varchar('signal', { length: 50 }),
357
+ reason: text('reason'),
358
+ // Crash analysis
359
+ likelyCause: varchar('likely_cause', { length: 50 }),
360
+ confidence: varchar('confidence', { length: 20 }),
361
+ summary: text('summary'),
362
+ // Memory state at crash
363
+ peakMemory: bigint('peak_memory', { mode: 'number' }),
364
+ lastKnownMemory: bigint('last_known_memory', { mode: 'number' }),
365
+ memoryTrend: varchar('memory_trend', { length: 20 }),
366
+ // Full insight data
367
+ insightData: jsonb('insight_data').$type(),
368
+ // Last output (truncated)
369
+ lastOutput: text('last_output'),
370
+ crashedAt: timestamp('crashed_at').defaultNow().notNull(),
371
+ }, (table) => ({
372
+ daemonIdIdx: index('idx_agent_crashes_daemon_id').on(table.daemonId),
373
+ agentNameIdx: index('idx_agent_crashes_agent_name').on(table.agentName),
374
+ crashedAtIdx: index('idx_agent_crashes_crashed_at').on(table.crashedAt),
375
+ likelyCauseIdx: index('idx_agent_crashes_likely_cause').on(table.likelyCause),
376
+ }));
377
+ export const agentCrashesRelations = relations(agentCrashes, ({ one }) => ({
378
+ daemon: one(linkedDaemons, {
379
+ fields: [agentCrashes.daemonId],
380
+ references: [linkedDaemons.id],
381
+ }),
382
+ }));
383
+ // ============================================================================
384
+ // Memory Alerts (proactive alerting history)
385
+ // ============================================================================
386
+ export const memoryAlerts = pgTable('memory_alerts', {
387
+ id: uuid('id').primaryKey().defaultRandom(),
388
+ daemonId: uuid('daemon_id').notNull().references(() => linkedDaemons.id, { onDelete: 'cascade' }),
389
+ agentName: varchar('agent_name', { length: 255 }).notNull(),
390
+ alertType: varchar('alert_type', { length: 50 }).notNull(), // warning, critical, oom_imminent, trend_warning, recovered
391
+ currentRss: bigint('current_rss', { mode: 'number' }),
392
+ threshold: bigint('threshold', { mode: 'number' }),
393
+ message: text('message'),
394
+ recommendation: text('recommendation'),
395
+ acknowledged: boolean('acknowledged').default(false),
396
+ acknowledgedAt: timestamp('acknowledged_at'),
397
+ createdAt: timestamp('created_at').defaultNow().notNull(),
398
+ }, (table) => ({
399
+ daemonIdIdx: index('idx_memory_alerts_daemon_id').on(table.daemonId),
400
+ agentNameIdx: index('idx_memory_alerts_agent_name').on(table.agentName),
401
+ alertTypeIdx: index('idx_memory_alerts_alert_type').on(table.alertType),
402
+ createdAtIdx: index('idx_memory_alerts_created_at').on(table.createdAt),
403
+ }));
404
+ export const memoryAlertsRelations = relations(memoryAlerts, ({ one }) => ({
405
+ daemon: one(linkedDaemons, {
406
+ fields: [memoryAlerts.daemonId],
407
+ references: [linkedDaemons.id],
408
+ }),
409
+ }));
410
+ export const ciFailureEvents = pgTable('ci_failure_events', {
411
+ id: uuid('id').primaryKey().defaultRandom(),
412
+ repositoryId: uuid('repository_id').references(() => repositories.id, { onDelete: 'cascade' }),
413
+ repository: varchar('repository', { length: 255 }).notNull(), // org/repo format
414
+ prNumber: bigint('pr_number', { mode: 'number' }),
415
+ branch: varchar('branch', { length: 255 }),
416
+ commitSha: varchar('commit_sha', { length: 40 }),
417
+ checkName: varchar('check_name', { length: 255 }).notNull(),
418
+ checkId: bigint('check_id', { mode: 'number' }).notNull(),
419
+ conclusion: varchar('conclusion', { length: 50 }).notNull(), // failure, cancelled, timed_out, etc.
420
+ failureTitle: text('failure_title'),
421
+ failureSummary: text('failure_summary'),
422
+ failureDetails: text('failure_details'),
423
+ annotations: jsonb('annotations').$type().default([]),
424
+ workflowName: varchar('workflow_name', { length: 255 }),
425
+ workflowRunId: bigint('workflow_run_id', { mode: 'number' }),
426
+ // Processing state
427
+ processedAt: timestamp('processed_at'),
428
+ agentSpawned: boolean('agent_spawned').default(false),
429
+ createdAt: timestamp('created_at').defaultNow().notNull(),
430
+ }, (table) => ({
431
+ repositoryIdx: index('idx_ci_failure_events_repository').on(table.repository),
432
+ prNumberIdx: index('idx_ci_failure_events_pr_number').on(table.prNumber),
433
+ checkNameIdx: index('idx_ci_failure_events_check_name').on(table.checkName),
434
+ createdAtIdx: index('idx_ci_failure_events_created_at').on(table.createdAt),
435
+ repoPrIdx: index('idx_ci_failure_events_repo_pr').on(table.repository, table.prNumber),
436
+ }));
437
+ export const ciFailureEventsRelations = relations(ciFailureEvents, ({ one, many }) => ({
438
+ repositoryRef: one(repositories, {
439
+ fields: [ciFailureEvents.repositoryId],
440
+ references: [repositories.id],
441
+ }),
442
+ fixAttempts: many(ciFixAttempts),
443
+ }));
444
+ // ============================================================================
445
+ // CI Fix Attempts (agent responses to failures)
446
+ // ============================================================================
447
+ export const ciFixAttempts = pgTable('ci_fix_attempts', {
448
+ id: uuid('id').primaryKey().defaultRandom(),
449
+ failureEventId: uuid('failure_event_id').notNull().references(() => ciFailureEvents.id, { onDelete: 'cascade' }),
450
+ agentId: varchar('agent_id', { length: 255 }).notNull(),
451
+ agentName: varchar('agent_name', { length: 255 }).notNull(),
452
+ status: varchar('status', { length: 50 }).notNull().default('pending'), // pending, in_progress, success, failed
453
+ commitSha: varchar('commit_sha', { length: 40 }),
454
+ errorMessage: text('error_message'),
455
+ // Timing
456
+ startedAt: timestamp('started_at').defaultNow().notNull(),
457
+ completedAt: timestamp('completed_at'),
458
+ }, (table) => ({
459
+ failureEventIdx: index('idx_ci_fix_attempts_failure_event').on(table.failureEventId),
460
+ statusIdx: index('idx_ci_fix_attempts_status').on(table.status),
461
+ agentIdIdx: index('idx_ci_fix_attempts_agent_id').on(table.agentId),
462
+ }));
463
+ export const ciFixAttemptsRelations = relations(ciFixAttempts, ({ one }) => ({
464
+ failureEvent: one(ciFailureEvents, {
465
+ fields: [ciFixAttempts.failureEventId],
466
+ references: [ciFailureEvents.id],
467
+ }),
468
+ }));
469
+ // ============================================================================
470
+ // GitHub Issue Assignments (agent handling of issues)
471
+ // ============================================================================
472
+ export const issueAssignments = pgTable('issue_assignments', {
473
+ id: uuid('id').primaryKey().defaultRandom(),
474
+ repositoryId: uuid('repository_id').references(() => repositories.id, { onDelete: 'cascade' }),
475
+ repository: varchar('repository', { length: 255 }).notNull(), // org/repo format
476
+ issueNumber: bigint('issue_number', { mode: 'number' }).notNull(),
477
+ issueTitle: text('issue_title').notNull(),
478
+ issueBody: text('issue_body'),
479
+ issueUrl: varchar('issue_url', { length: 512 }),
480
+ // Assignment details
481
+ agentId: varchar('agent_id', { length: 255 }),
482
+ agentName: varchar('agent_name', { length: 255 }),
483
+ assignedAt: timestamp('assigned_at'),
484
+ // Status tracking
485
+ status: varchar('status', { length: 50 }).notNull().default('pending'), // pending, assigned, in_progress, resolved, closed
486
+ resolution: text('resolution'),
487
+ // PR created to fix the issue
488
+ linkedPrNumber: bigint('linked_pr_number', { mode: 'number' }),
489
+ // Metadata
490
+ labels: text('labels').array(),
491
+ priority: varchar('priority', { length: 20 }), // low, medium, high, critical
492
+ createdAt: timestamp('created_at').defaultNow().notNull(),
493
+ updatedAt: timestamp('updated_at').defaultNow().notNull(),
494
+ }, (table) => ({
495
+ repositoryIdx: index('idx_issue_assignments_repository').on(table.repository),
496
+ issueNumberIdx: index('idx_issue_assignments_issue_number').on(table.issueNumber),
497
+ statusIdx: index('idx_issue_assignments_status').on(table.status),
498
+ agentIdIdx: index('idx_issue_assignments_agent_id').on(table.agentId),
499
+ repoIssueIdx: unique('issue_assignments_repo_issue_unique').on(table.repository, table.issueNumber),
500
+ }));
501
+ export const issueAssignmentsRelations = relations(issueAssignments, ({ one }) => ({
502
+ repositoryRef: one(repositories, {
503
+ fields: [issueAssignments.repositoryId],
504
+ references: [repositories.id],
505
+ }),
506
+ }));
507
+ // ============================================================================
508
+ // Comment Mentions (tracking @mentions to agents)
509
+ // ============================================================================
510
+ export const commentMentions = pgTable('comment_mentions', {
511
+ id: uuid('id').primaryKey().defaultRandom(),
512
+ repositoryId: uuid('repository_id').references(() => repositories.id, { onDelete: 'cascade' }),
513
+ repository: varchar('repository', { length: 255 }).notNull(),
514
+ // Source of the mention
515
+ sourceType: varchar('source_type', { length: 50 }).notNull(), // issue_comment, pr_comment, pr_review
516
+ sourceId: bigint('source_id', { mode: 'number' }).notNull(), // GitHub comment ID
517
+ issueOrPrNumber: bigint('issue_or_pr_number', { mode: 'number' }).notNull(),
518
+ // Comment details
519
+ commentBody: text('comment_body').notNull(),
520
+ commentUrl: varchar('comment_url', { length: 512 }),
521
+ authorLogin: varchar('author_login', { length: 255 }).notNull(),
522
+ authorId: bigint('author_id', { mode: 'number' }),
523
+ // Mention details
524
+ mentionedAgent: varchar('mentioned_agent', { length: 255 }).notNull(), // e.g., "agent-relay", "ci-fix", "lead"
525
+ mentionContext: text('mention_context'), // Text surrounding the mention
526
+ // Response tracking
527
+ agentId: varchar('agent_id', { length: 255 }),
528
+ agentName: varchar('agent_name', { length: 255 }),
529
+ status: varchar('status', { length: 50 }).notNull().default('pending'), // pending, processing, responded, ignored
530
+ responseCommentId: bigint('response_comment_id', { mode: 'number' }),
531
+ responseBody: text('response_body'),
532
+ respondedAt: timestamp('responded_at'),
533
+ // Metadata
534
+ createdAt: timestamp('created_at').defaultNow().notNull(),
535
+ }, (table) => ({
536
+ repositoryIdx: index('idx_comment_mentions_repository').on(table.repository),
537
+ sourceIdx: index('idx_comment_mentions_source').on(table.sourceType, table.sourceId),
538
+ statusIdx: index('idx_comment_mentions_status').on(table.status),
539
+ mentionedAgentIdx: index('idx_comment_mentions_mentioned_agent').on(table.mentionedAgent),
540
+ }));
541
+ export const commentMentionsRelations = relations(commentMentions, ({ one }) => ({
542
+ repositoryRef: one(repositories, {
543
+ fields: [commentMentions.repositoryId],
544
+ references: [repositories.id],
545
+ }),
546
+ }));
234
547
  //# sourceMappingURL=schema.js.map
@@ -7,5 +7,6 @@ export { createServer } from './server.js';
7
7
  export { getConfig, loadConfig, CloudConfig } from './config.js';
8
8
  export { CredentialVault } from './vault/index.js';
9
9
  export { WorkspaceProvisioner, ProvisionConfig, Workspace, WorkspaceStatus } from './provisioner/index.js';
10
+ export { ScalingPolicyService, ScalingThresholds, ScalingPolicy, ScalingDecision, WorkspaceMetrics, getScalingPolicyService, AutoScaler, ScalingOperation, getAutoScaler, createAutoScaler, CapacityManager, WorkspaceCapacity, PlacementRecommendation, CapacityForecast, getCapacityManager, createCapacityManager, ScalingOrchestrator, ScalingEvent, getScalingOrchestrator, createScalingOrchestrator, } from './services/index.js';
10
11
  export * from './billing/index.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -9,6 +9,8 @@ export { getConfig, loadConfig } from './config.js';
9
9
  // Services
10
10
  export { CredentialVault } from './vault/index.js';
11
11
  export { WorkspaceProvisioner } from './provisioner/index.js';
12
+ // Scaling infrastructure
13
+ export { ScalingPolicyService, getScalingPolicyService, AutoScaler, getAutoScaler, createAutoScaler, CapacityManager, getCapacityManager, createCapacityManager, ScalingOrchestrator, getScalingOrchestrator, createScalingOrchestrator, } from './services/index.js';
12
14
  // Billing
13
15
  export * from './billing/index.js';
14
16
  // Run if executed directly (ES module compatible check)
@@ -4,6 +4,16 @@
4
4
  * One-click provisioning for compute resources (Fly.io, Railway, Docker).
5
5
  */
6
6
  import { Workspace } from '../db/index.js';
7
+ export type ProvisioningStage = 'creating' | 'networking' | 'secrets' | 'machine' | 'booting' | 'health' | 'complete';
8
+ interface ProvisioningProgress {
9
+ stage: ProvisioningStage;
10
+ startedAt: number;
11
+ updatedAt: number;
12
+ }
13
+ /**
14
+ * Get the current provisioning stage for a workspace
15
+ */
16
+ export declare function getProvisioningStage(workspaceId: string): ProvisioningProgress | null;
7
17
  export interface ProvisionConfig {
8
18
  userId: string;
9
19
  name: string;
@@ -11,6 +21,8 @@ export interface ProvisionConfig {
11
21
  repositories: string[];
12
22
  supervisorEnabled?: boolean;
13
23
  maxAgents?: number;
24
+ /** Direct GitHub token for testing (bypasses Nango lookup) */
25
+ githubToken?: string;
14
26
  }
15
27
  export interface ProvisionResult {
16
28
  workspaceId: string;
@@ -20,6 +32,17 @@ export interface ProvisionResult {
20
32
  }
21
33
  export type WorkspaceStatus = Workspace['status'];
22
34
  export { Workspace };
35
+ /**
36
+ * Resource tier configurations for vertical scaling
37
+ */
38
+ export interface ResourceTier {
39
+ name: 'small' | 'medium' | 'large' | 'xlarge';
40
+ cpuCores: number;
41
+ memoryMb: number;
42
+ maxAgents: number;
43
+ cpuKind: 'shared' | 'performance';
44
+ }
45
+ export declare const RESOURCE_TIERS: Record<string, ResourceTier>;
23
46
  /**
24
47
  * Main Workspace Provisioner
25
48
  */
@@ -28,8 +51,13 @@ export declare class WorkspaceProvisioner {
28
51
  constructor();
29
52
  /**
30
53
  * Provision a new workspace (one-click)
54
+ * Returns immediately with 'provisioning' status and runs actual provisioning in background
31
55
  */
32
56
  provision(config: ProvisionConfig): Promise<ProvisionResult>;
57
+ /**
58
+ * Run the actual provisioning work asynchronously
59
+ */
60
+ private runProvisioningAsync;
33
61
  /**
34
62
  * Deprovision a workspace
35
63
  */
@@ -46,6 +74,34 @@ export declare class WorkspaceProvisioner {
46
74
  * Stop a workspace
47
75
  */
48
76
  stop(workspaceId: string): Promise<void>;
77
+ /**
78
+ * Resize a workspace (vertical scaling)
79
+ */
80
+ resize(workspaceId: string, tier: ResourceTier): Promise<void>;
81
+ /**
82
+ * Update the max agent limit for a workspace
83
+ */
84
+ updateAgentLimit(workspaceId: string, newLimit: number): Promise<void>;
85
+ /**
86
+ * Get current resource tier for a workspace
87
+ */
88
+ getCurrentTier(workspaceId: string): Promise<ResourceTier>;
89
+ /**
90
+ * Get recommended tier based on agent count
91
+ * Uses 1.5-2GB per agent as baseline for Claude Code
92
+ */
93
+ getRecommendedTier(agentCount: number): ResourceTier;
94
+ /**
95
+ * Auto-scale workspace based on current agent count
96
+ * Respects plan limits - free tier cannot scale, others have max tier limits
97
+ * Returns { scaled: boolean, reason?: string }
98
+ */
99
+ autoScale(workspaceId: string, currentAgentCount: number): Promise<{
100
+ scaled: boolean;
101
+ reason?: string;
102
+ currentTier?: string;
103
+ targetTier?: string;
104
+ }>;
49
105
  }
50
106
  export declare function getProvisioner(): WorkspaceProvisioner;
51
107
  //# sourceMappingURL=index.d.ts.map