agent-relay 2.0.22 → 2.0.24

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 (534) hide show
  1. package/bin/relay-pty-linux-arm64 +0 -0
  2. package/dist/src/cli/index.d.ts +3 -3
  3. package/dist/src/cli/index.js +58 -74
  4. package/package.json +21 -62
  5. package/packages/api-types/package.json +1 -1
  6. package/packages/bridge/package.json +8 -8
  7. package/packages/cli-tester/package.json +1 -1
  8. package/packages/config/package.json +2 -2
  9. package/packages/continuity/package.json +1 -1
  10. package/packages/daemon/dist/orchestrator.js +19 -1
  11. package/packages/daemon/package.json +12 -12
  12. package/packages/hooks/package.json +4 -4
  13. package/packages/mcp/package.json +2 -2
  14. package/packages/memory/package.json +2 -2
  15. package/packages/policy/package.json +2 -2
  16. package/packages/protocol/package.json +1 -1
  17. package/packages/resiliency/package.json +1 -1
  18. package/packages/sdk/package.json +2 -2
  19. package/packages/spawner/package.json +1 -1
  20. package/packages/state/package.json +1 -1
  21. package/packages/storage/package.json +2 -2
  22. package/packages/telemetry/package.json +1 -1
  23. package/packages/trajectory/package.json +2 -2
  24. package/packages/user-directory/package.json +2 -2
  25. package/packages/utils/dist/update-checker.js +4 -0
  26. package/packages/utils/package.json +1 -1
  27. package/packages/wrapper/package.json +6 -6
  28. package/deploy/init-db.sql +0 -5
  29. package/deploy/scripts/setup-fly-workspaces.sh +0 -69
  30. package/deploy/scripts/setup-railway.sh +0 -75
  31. package/deploy/workspace/codex.config.toml +0 -20
  32. package/deploy/workspace/entrypoint-browser.sh +0 -118
  33. package/deploy/workspace/entrypoint.sh +0 -612
  34. package/deploy/workspace/gh-credential-relay +0 -90
  35. package/deploy/workspace/gh-relay +0 -156
  36. package/deploy/workspace/git-credential-relay +0 -330
  37. package/deploy/workspace/git-credential-relay.test.sh +0 -230
  38. package/dist/dashboard/out/404.html +0 -1
  39. package/dist/dashboard/out/_next/static/91mkGYq3qbG8WHE6VytQ8/_buildManifest.js +0 -1
  40. package/dist/dashboard/out/_next/static/91mkGYq3qbG8WHE6VytQ8/_ssgManifest.js +0 -1
  41. package/dist/dashboard/out/_next/static/chunks/116-a883fca163f3a5bc.js +0 -1
  42. package/dist/dashboard/out/_next/static/chunks/117-c8afed19e821a35d.js +0 -2
  43. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +0 -1
  44. package/dist/dashboard/out/_next/static/chunks/320-a6304232cd0ee2ce.js +0 -1
  45. package/dist/dashboard/out/_next/static/chunks/532-bace199897eeab37.js +0 -9
  46. package/dist/dashboard/out/_next/static/chunks/631-16b905e5920f9b59.js +0 -1
  47. package/dist/dashboard/out/_next/static/chunks/648-acb2ff9f77cbfbd3.js +0 -1
  48. package/dist/dashboard/out/_next/static/chunks/766-2aea80818f7eb0d8.js +0 -1
  49. package/dist/dashboard/out/_next/static/chunks/83-26d2bde54616ee90.js +0 -1
  50. package/dist/dashboard/out/_next/static/chunks/847-f1f467060f32afff.js +0 -1
  51. package/dist/dashboard/out/_next/static/chunks/891-5cb1513eeb97a891.js +0 -1
  52. package/dist/dashboard/out/_next/static/chunks/app/_not-found/page-60501fddbafba9dc.js +0 -1
  53. package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-9914652442f7e4fb.js +0 -1
  54. package/dist/dashboard/out/_next/static/chunks/app/app/page-366fb7c078d4e9e0.js +0 -1
  55. package/dist/dashboard/out/_next/static/chunks/app/cloud/link/page-fa1d5842aa90e8a6.js +0 -1
  56. package/dist/dashboard/out/_next/static/chunks/app/complete-profile/page-dd64bbdf66b639cd.js +0 -1
  57. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-113060009ef35bc2.js +0 -1
  58. package/dist/dashboard/out/_next/static/chunks/app/history/page-9965d2483011b846.js +0 -1
  59. package/dist/dashboard/out/_next/static/chunks/app/layout-6b91e33784c20610.js +0 -1
  60. package/dist/dashboard/out/_next/static/chunks/app/login/page-435eceb0073be027.js +0 -1
  61. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1e37ef8e73940b40.js +0 -1
  62. package/dist/dashboard/out/_next/static/chunks/app/page-8119d4246743574e.js +0 -1
  63. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-9db3ebdfa567a7c9.js +0 -1
  64. package/dist/dashboard/out/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +0 -1
  65. package/dist/dashboard/out/_next/static/chunks/app/providers/setup/[provider]/page-4dbe33f0f7691b7c.js +0 -1
  66. package/dist/dashboard/out/_next/static/chunks/app/signup/page-c7a0a28341365ae0.js +0 -1
  67. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +0 -18
  68. package/dist/dashboard/out/_next/static/chunks/fd9d1056-609918ca7b6280bb.js +0 -1
  69. package/dist/dashboard/out/_next/static/chunks/framework-f66176bb897dc684.js +0 -1
  70. package/dist/dashboard/out/_next/static/chunks/main-311c3db74dcfadb7.js +0 -1
  71. package/dist/dashboard/out/_next/static/chunks/main-app-fdbeb09028f57c9f.js +0 -1
  72. package/dist/dashboard/out/_next/static/chunks/pages/_app-72b849fbd24ac258.js +0 -1
  73. package/dist/dashboard/out/_next/static/chunks/pages/_error-7ba65e1336b92748.js +0 -1
  74. package/dist/dashboard/out/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  75. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +0 -1
  76. package/dist/dashboard/out/_next/static/css/4034f236dd1a3178.css +0 -1
  77. package/dist/dashboard/out/_next/static/css/6892f8422896ef7a.css +0 -1
  78. package/dist/dashboard/out/alt-logos/agent-relay-logo-128.png +0 -0
  79. package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
  80. package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
  81. package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
  82. package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
  83. package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +0 -45
  84. package/dist/dashboard/out/alt-logos/logo.svg +0 -38
  85. package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
  86. package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
  87. package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
  88. package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
  89. package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
  90. package/dist/dashboard/out/alt-logos/monogram-logo.svg +0 -38
  91. package/dist/dashboard/out/app/onboarding.html +0 -1
  92. package/dist/dashboard/out/app/onboarding.txt +0 -7
  93. package/dist/dashboard/out/app.html +0 -1
  94. package/dist/dashboard/out/app.txt +0 -7
  95. package/dist/dashboard/out/apple-icon.png +0 -0
  96. package/dist/dashboard/out/cloud/link.html +0 -1
  97. package/dist/dashboard/out/cloud/link.txt +0 -7
  98. package/dist/dashboard/out/complete-profile.html +0 -5
  99. package/dist/dashboard/out/complete-profile.txt +0 -7
  100. package/dist/dashboard/out/connect-repos.html +0 -1
  101. package/dist/dashboard/out/connect-repos.txt +0 -7
  102. package/dist/dashboard/out/history.html +0 -1
  103. package/dist/dashboard/out/history.txt +0 -7
  104. package/dist/dashboard/out/index.html +0 -1
  105. package/dist/dashboard/out/index.txt +0 -7
  106. package/dist/dashboard/out/login.html +0 -5
  107. package/dist/dashboard/out/login.txt +0 -7
  108. package/dist/dashboard/out/metrics.html +0 -1
  109. package/dist/dashboard/out/metrics.txt +0 -7
  110. package/dist/dashboard/out/pricing.html +0 -13
  111. package/dist/dashboard/out/pricing.txt +0 -7
  112. package/dist/dashboard/out/providers/setup/claude.html +0 -1
  113. package/dist/dashboard/out/providers/setup/claude.txt +0 -8
  114. package/dist/dashboard/out/providers/setup/codex.html +0 -1
  115. package/dist/dashboard/out/providers/setup/codex.txt +0 -8
  116. package/dist/dashboard/out/providers/setup/cursor.html +0 -1
  117. package/dist/dashboard/out/providers/setup/cursor.txt +0 -8
  118. package/dist/dashboard/out/providers.html +0 -1
  119. package/dist/dashboard/out/providers.txt +0 -7
  120. package/dist/dashboard/out/signup.html +0 -6
  121. package/dist/dashboard/out/signup.txt +0 -7
  122. package/dist/src/cloud/index.d.ts +0 -8
  123. package/dist/src/cloud/index.js +0 -8
  124. package/dist/src/dashboard-server/index.d.ts +0 -8
  125. package/dist/src/dashboard-server/index.js +0 -8
  126. package/packages/cloud/dist/api/admin.d.ts +0 -8
  127. package/packages/cloud/dist/api/admin.js +0 -225
  128. package/packages/cloud/dist/api/auth.d.ts +0 -20
  129. package/packages/cloud/dist/api/auth.js +0 -138
  130. package/packages/cloud/dist/api/billing.d.ts +0 -7
  131. package/packages/cloud/dist/api/billing.js +0 -564
  132. package/packages/cloud/dist/api/cli-pty-runner.d.ts +0 -53
  133. package/packages/cloud/dist/api/cli-pty-runner.js +0 -175
  134. package/packages/cloud/dist/api/codex-auth-helper.d.ts +0 -21
  135. package/packages/cloud/dist/api/codex-auth-helper.js +0 -327
  136. package/packages/cloud/dist/api/consensus.d.ts +0 -13
  137. package/packages/cloud/dist/api/consensus.js +0 -261
  138. package/packages/cloud/dist/api/coordinators.d.ts +0 -8
  139. package/packages/cloud/dist/api/coordinators.js +0 -750
  140. package/packages/cloud/dist/api/daemons.d.ts +0 -12
  141. package/packages/cloud/dist/api/daemons.js +0 -535
  142. package/packages/cloud/dist/api/email-auth.d.ts +0 -11
  143. package/packages/cloud/dist/api/email-auth.js +0 -347
  144. package/packages/cloud/dist/api/generic-webhooks.d.ts +0 -8
  145. package/packages/cloud/dist/api/generic-webhooks.js +0 -129
  146. package/packages/cloud/dist/api/git.d.ts +0 -8
  147. package/packages/cloud/dist/api/git.js +0 -269
  148. package/packages/cloud/dist/api/github-app.d.ts +0 -11
  149. package/packages/cloud/dist/api/github-app.js +0 -223
  150. package/packages/cloud/dist/api/middleware/planLimits.d.ts +0 -43
  151. package/packages/cloud/dist/api/middleware/planLimits.js +0 -202
  152. package/packages/cloud/dist/api/monitoring.d.ts +0 -11
  153. package/packages/cloud/dist/api/monitoring.js +0 -578
  154. package/packages/cloud/dist/api/nango-auth.d.ts +0 -9
  155. package/packages/cloud/dist/api/nango-auth.js +0 -741
  156. package/packages/cloud/dist/api/onboarding.d.ts +0 -15
  157. package/packages/cloud/dist/api/onboarding.js +0 -679
  158. package/packages/cloud/dist/api/policy.d.ts +0 -8
  159. package/packages/cloud/dist/api/policy.js +0 -229
  160. package/packages/cloud/dist/api/provider-env.d.ts +0 -26
  161. package/packages/cloud/dist/api/provider-env.js +0 -141
  162. package/packages/cloud/dist/api/providers.d.ts +0 -7
  163. package/packages/cloud/dist/api/providers.js +0 -574
  164. package/packages/cloud/dist/api/repos.d.ts +0 -8
  165. package/packages/cloud/dist/api/repos.js +0 -577
  166. package/packages/cloud/dist/api/sessions.d.ts +0 -11
  167. package/packages/cloud/dist/api/sessions.js +0 -302
  168. package/packages/cloud/dist/api/teams.d.ts +0 -7
  169. package/packages/cloud/dist/api/teams.js +0 -281
  170. package/packages/cloud/dist/api/test-helpers.d.ts +0 -10
  171. package/packages/cloud/dist/api/test-helpers.js +0 -745
  172. package/packages/cloud/dist/api/usage.d.ts +0 -7
  173. package/packages/cloud/dist/api/usage.js +0 -111
  174. package/packages/cloud/dist/api/webhooks.d.ts +0 -8
  175. package/packages/cloud/dist/api/webhooks.js +0 -645
  176. package/packages/cloud/dist/api/workspaces.d.ts +0 -25
  177. package/packages/cloud/dist/api/workspaces.js +0 -1799
  178. package/packages/cloud/dist/billing/index.d.ts +0 -9
  179. package/packages/cloud/dist/billing/index.js +0 -9
  180. package/packages/cloud/dist/billing/plans.d.ts +0 -39
  181. package/packages/cloud/dist/billing/plans.js +0 -245
  182. package/packages/cloud/dist/billing/service.d.ts +0 -80
  183. package/packages/cloud/dist/billing/service.js +0 -388
  184. package/packages/cloud/dist/billing/types.d.ts +0 -141
  185. package/packages/cloud/dist/billing/types.js +0 -7
  186. package/packages/cloud/dist/config.d.ts +0 -5
  187. package/packages/cloud/dist/config.js +0 -5
  188. package/packages/cloud/dist/db/bulk-ingest.d.ts +0 -89
  189. package/packages/cloud/dist/db/bulk-ingest.js +0 -268
  190. package/packages/cloud/dist/db/drizzle.d.ts +0 -290
  191. package/packages/cloud/dist/db/drizzle.js +0 -1422
  192. package/packages/cloud/dist/db/index.d.ts +0 -56
  193. package/packages/cloud/dist/db/index.js +0 -70
  194. package/packages/cloud/dist/db/schema.d.ts +0 -5117
  195. package/packages/cloud/dist/db/schema.js +0 -656
  196. package/packages/cloud/dist/index.d.ts +0 -11
  197. package/packages/cloud/dist/index.js +0 -38
  198. package/packages/cloud/dist/provisioner/index.d.ts +0 -207
  199. package/packages/cloud/dist/provisioner/index.js +0 -2118
  200. package/packages/cloud/dist/server.d.ts +0 -17
  201. package/packages/cloud/dist/server.js +0 -2034
  202. package/packages/cloud/dist/services/auto-scaler.d.ts +0 -152
  203. package/packages/cloud/dist/services/auto-scaler.js +0 -439
  204. package/packages/cloud/dist/services/capacity-manager.d.ts +0 -148
  205. package/packages/cloud/dist/services/capacity-manager.js +0 -449
  206. package/packages/cloud/dist/services/ci-agent-spawner.d.ts +0 -49
  207. package/packages/cloud/dist/services/ci-agent-spawner.js +0 -373
  208. package/packages/cloud/dist/services/cloud-message-bus.d.ts +0 -28
  209. package/packages/cloud/dist/services/cloud-message-bus.js +0 -19
  210. package/packages/cloud/dist/services/compute-enforcement.d.ts +0 -57
  211. package/packages/cloud/dist/services/compute-enforcement.js +0 -175
  212. package/packages/cloud/dist/services/coordinator.d.ts +0 -62
  213. package/packages/cloud/dist/services/coordinator.js +0 -389
  214. package/packages/cloud/dist/services/index.d.ts +0 -17
  215. package/packages/cloud/dist/services/index.js +0 -25
  216. package/packages/cloud/dist/services/intro-expiration.d.ts +0 -60
  217. package/packages/cloud/dist/services/intro-expiration.js +0 -252
  218. package/packages/cloud/dist/services/mention-handler.d.ts +0 -65
  219. package/packages/cloud/dist/services/mention-handler.js +0 -405
  220. package/packages/cloud/dist/services/nango.d.ts +0 -219
  221. package/packages/cloud/dist/services/nango.js +0 -424
  222. package/packages/cloud/dist/services/persistence.d.ts +0 -131
  223. package/packages/cloud/dist/services/persistence.js +0 -200
  224. package/packages/cloud/dist/services/planLimits.d.ts +0 -147
  225. package/packages/cloud/dist/services/planLimits.js +0 -335
  226. package/packages/cloud/dist/services/presence-registry.d.ts +0 -56
  227. package/packages/cloud/dist/services/presence-registry.js +0 -91
  228. package/packages/cloud/dist/services/scaling-orchestrator.d.ts +0 -159
  229. package/packages/cloud/dist/services/scaling-orchestrator.js +0 -502
  230. package/packages/cloud/dist/services/scaling-policy.d.ts +0 -121
  231. package/packages/cloud/dist/services/scaling-policy.js +0 -415
  232. package/packages/cloud/dist/services/ssh-security.d.ts +0 -31
  233. package/packages/cloud/dist/services/ssh-security.js +0 -63
  234. package/packages/cloud/dist/services/workspace-keepalive.d.ts +0 -76
  235. package/packages/cloud/dist/services/workspace-keepalive.js +0 -234
  236. package/packages/cloud/dist/shims/consensus.d.ts +0 -23
  237. package/packages/cloud/dist/shims/consensus.js +0 -5
  238. package/packages/cloud/dist/webhooks/index.d.ts +0 -24
  239. package/packages/cloud/dist/webhooks/index.js +0 -29
  240. package/packages/cloud/dist/webhooks/parsers/github.d.ts +0 -8
  241. package/packages/cloud/dist/webhooks/parsers/github.js +0 -234
  242. package/packages/cloud/dist/webhooks/parsers/index.d.ts +0 -23
  243. package/packages/cloud/dist/webhooks/parsers/index.js +0 -30
  244. package/packages/cloud/dist/webhooks/parsers/linear.d.ts +0 -9
  245. package/packages/cloud/dist/webhooks/parsers/linear.js +0 -258
  246. package/packages/cloud/dist/webhooks/parsers/slack.d.ts +0 -9
  247. package/packages/cloud/dist/webhooks/parsers/slack.js +0 -214
  248. package/packages/cloud/dist/webhooks/responders/github.d.ts +0 -8
  249. package/packages/cloud/dist/webhooks/responders/github.js +0 -73
  250. package/packages/cloud/dist/webhooks/responders/index.d.ts +0 -23
  251. package/packages/cloud/dist/webhooks/responders/index.js +0 -30
  252. package/packages/cloud/dist/webhooks/responders/linear.d.ts +0 -9
  253. package/packages/cloud/dist/webhooks/responders/linear.js +0 -149
  254. package/packages/cloud/dist/webhooks/responders/slack.d.ts +0 -20
  255. package/packages/cloud/dist/webhooks/responders/slack.js +0 -178
  256. package/packages/cloud/dist/webhooks/router.d.ts +0 -25
  257. package/packages/cloud/dist/webhooks/router.js +0 -504
  258. package/packages/cloud/dist/webhooks/rules-engine.d.ts +0 -24
  259. package/packages/cloud/dist/webhooks/rules-engine.js +0 -287
  260. package/packages/cloud/dist/webhooks/types.d.ts +0 -186
  261. package/packages/cloud/dist/webhooks/types.js +0 -8
  262. package/packages/cloud/package.json +0 -60
  263. package/packages/dashboard/README.md +0 -48
  264. package/packages/dashboard/dist/health-worker-manager.d.ts +0 -62
  265. package/packages/dashboard/dist/health-worker-manager.js +0 -144
  266. package/packages/dashboard/dist/health-worker.d.ts +0 -9
  267. package/packages/dashboard/dist/health-worker.js +0 -79
  268. package/packages/dashboard/dist/index.d.ts +0 -20
  269. package/packages/dashboard/dist/index.js +0 -19
  270. package/packages/dashboard/dist/metrics.d.ts +0 -105
  271. package/packages/dashboard/dist/metrics.js +0 -193
  272. package/packages/dashboard/dist/needs-attention.d.ts +0 -24
  273. package/packages/dashboard/dist/needs-attention.js +0 -78
  274. package/packages/dashboard/dist/server.d.ts +0 -25
  275. package/packages/dashboard/dist/server.js +0 -5270
  276. package/packages/dashboard/dist/start.d.ts +0 -6
  277. package/packages/dashboard/dist/start.js +0 -13
  278. package/packages/dashboard/dist/types/threading.d.ts +0 -8
  279. package/packages/dashboard/dist/types/threading.js +0 -2
  280. package/packages/dashboard/dist/user-bridge.d.ts +0 -154
  281. package/packages/dashboard/dist/user-bridge.js +0 -372
  282. package/packages/dashboard/package.json +0 -65
  283. package/packages/dashboard/ui/app/app/onboarding/page.tsx +0 -394
  284. package/packages/dashboard/ui/app/app/page.tsx +0 -667
  285. package/packages/dashboard/ui/app/apple-icon.png +0 -0
  286. package/packages/dashboard/ui/app/cloud/link/page.tsx +0 -464
  287. package/packages/dashboard/ui/app/complete-profile/page.tsx +0 -204
  288. package/packages/dashboard/ui/app/connect-repos/page.tsx +0 -410
  289. package/packages/dashboard/ui/app/favicon.png +0 -0
  290. package/packages/dashboard/ui/app/globals.css +0 -59
  291. package/packages/dashboard/ui/app/history/page.tsx +0 -658
  292. package/packages/dashboard/ui/app/layout.tsx +0 -25
  293. package/packages/dashboard/ui/app/login/page.tsx +0 -424
  294. package/packages/dashboard/ui/app/metrics/page.tsx +0 -751
  295. package/packages/dashboard/ui/app/page.tsx +0 -59
  296. package/packages/dashboard/ui/app/pricing/page.tsx +0 -7
  297. package/packages/dashboard/ui/app/providers/page.tsx +0 -193
  298. package/packages/dashboard/ui/app/providers/setup/[provider]/ProviderSetupClient.tsx +0 -148
  299. package/packages/dashboard/ui/app/providers/setup/[provider]/constants.ts +0 -35
  300. package/packages/dashboard/ui/app/providers/setup/[provider]/page.tsx +0 -42
  301. package/packages/dashboard/ui/app/signup/page.tsx +0 -533
  302. package/packages/dashboard/ui/index.ts +0 -49
  303. package/packages/dashboard/ui/landing/LandingPage.tsx +0 -713
  304. package/packages/dashboard/ui/landing/PricingPage.tsx +0 -559
  305. package/packages/dashboard/ui/landing/index.ts +0 -6
  306. package/packages/dashboard/ui/landing/styles.css +0 -2850
  307. package/packages/dashboard/ui/lib/agent-merge.ts +0 -35
  308. package/packages/dashboard/ui/lib/api.ts +0 -1155
  309. package/packages/dashboard/ui/lib/cloudApi.ts +0 -877
  310. package/packages/dashboard/ui/lib/colors.ts +0 -218
  311. package/packages/dashboard/ui/lib/hierarchy.ts +0 -242
  312. package/packages/dashboard/ui/lib/stuckDetection.ts +0 -142
  313. package/packages/dashboard/ui/next-env.d.ts +0 -5
  314. package/packages/dashboard/ui/next.config.js +0 -41
  315. package/packages/dashboard/ui/package-lock.json +0 -2882
  316. package/packages/dashboard/ui/package.json +0 -33
  317. package/packages/dashboard/ui/postcss.config.js +0 -5
  318. package/packages/dashboard/ui/react-components/ActivityFeed.tsx +0 -216
  319. package/packages/dashboard/ui/react-components/AddWorkspaceModal.tsx +0 -170
  320. package/packages/dashboard/ui/react-components/AgentCard.tsx +0 -587
  321. package/packages/dashboard/ui/react-components/AgentList.tsx +0 -411
  322. package/packages/dashboard/ui/react-components/AgentProfilePanel.tsx +0 -564
  323. package/packages/dashboard/ui/react-components/App.tsx +0 -3033
  324. package/packages/dashboard/ui/react-components/BillingPanel.tsx +0 -922
  325. package/packages/dashboard/ui/react-components/BillingResult.tsx +0 -447
  326. package/packages/dashboard/ui/react-components/BroadcastComposer.tsx +0 -690
  327. package/packages/dashboard/ui/react-components/ChannelAdminPanel.tsx +0 -773
  328. package/packages/dashboard/ui/react-components/ChannelBrowser.tsx +0 -385
  329. package/packages/dashboard/ui/react-components/ChannelChat.tsx +0 -261
  330. package/packages/dashboard/ui/react-components/ChannelSidebar.tsx +0 -399
  331. package/packages/dashboard/ui/react-components/CloudSessionProvider.tsx +0 -130
  332. package/packages/dashboard/ui/react-components/CommandPalette.tsx +0 -815
  333. package/packages/dashboard/ui/react-components/ConfirmationDialog.tsx +0 -133
  334. package/packages/dashboard/ui/react-components/ConversationHistory.tsx +0 -518
  335. package/packages/dashboard/ui/react-components/CoordinatorPanel.tsx +0 -944
  336. package/packages/dashboard/ui/react-components/DecisionQueue.tsx +0 -717
  337. package/packages/dashboard/ui/react-components/DirectMessageView.tsx +0 -164
  338. package/packages/dashboard/ui/react-components/FileAutocomplete.tsx +0 -368
  339. package/packages/dashboard/ui/react-components/FleetOverview.tsx +0 -278
  340. package/packages/dashboard/ui/react-components/LogViewer.tsx +0 -310
  341. package/packages/dashboard/ui/react-components/LogViewerPanel.tsx +0 -482
  342. package/packages/dashboard/ui/react-components/Logo.tsx +0 -284
  343. package/packages/dashboard/ui/react-components/MentionAutocomplete.tsx +0 -384
  344. package/packages/dashboard/ui/react-components/MessageComposer.tsx +0 -457
  345. package/packages/dashboard/ui/react-components/MessageList.tsx +0 -649
  346. package/packages/dashboard/ui/react-components/MessageSenderName.tsx +0 -91
  347. package/packages/dashboard/ui/react-components/MessageStatusIndicator.tsx +0 -142
  348. package/packages/dashboard/ui/react-components/NewConversationModal.tsx +0 -400
  349. package/packages/dashboard/ui/react-components/NotificationToast.tsx +0 -488
  350. package/packages/dashboard/ui/react-components/OnlineUsersIndicator.tsx +0 -164
  351. package/packages/dashboard/ui/react-components/Pagination.tsx +0 -124
  352. package/packages/dashboard/ui/react-components/PricingPlans.tsx +0 -386
  353. package/packages/dashboard/ui/react-components/ProjectList.tsx +0 -625
  354. package/packages/dashboard/ui/react-components/ProviderAuthFlow.tsx +0 -853
  355. package/packages/dashboard/ui/react-components/ProviderConnectionList.tsx +0 -378
  356. package/packages/dashboard/ui/react-components/ProvisioningProgress.tsx +0 -730
  357. package/packages/dashboard/ui/react-components/RepoAccessPanel.tsx +0 -549
  358. package/packages/dashboard/ui/react-components/ServerCard.tsx +0 -202
  359. package/packages/dashboard/ui/react-components/SessionExpiredModal.tsx +0 -128
  360. package/packages/dashboard/ui/react-components/SpawnModal.tsx +0 -804
  361. package/packages/dashboard/ui/react-components/TaskAssignmentUI.tsx +0 -375
  362. package/packages/dashboard/ui/react-components/TerminalProviderSetup.tsx +0 -608
  363. package/packages/dashboard/ui/react-components/ThemeProvider.tsx +0 -325
  364. package/packages/dashboard/ui/react-components/ThinkingIndicator.tsx +0 -231
  365. package/packages/dashboard/ui/react-components/ThreadList.tsx +0 -198
  366. package/packages/dashboard/ui/react-components/ThreadPanel.tsx +0 -346
  367. package/packages/dashboard/ui/react-components/TrajectoryViewer.tsx +0 -698
  368. package/packages/dashboard/ui/react-components/TypingIndicator.tsx +0 -69
  369. package/packages/dashboard/ui/react-components/UsageBanner.tsx +0 -231
  370. package/packages/dashboard/ui/react-components/UserProfilePanel.tsx +0 -233
  371. package/packages/dashboard/ui/react-components/WorkspaceContext.tsx +0 -107
  372. package/packages/dashboard/ui/react-components/WorkspaceSelector.tsx +0 -234
  373. package/packages/dashboard/ui/react-components/WorkspaceStatusIndicator.tsx +0 -370
  374. package/packages/dashboard/ui/react-components/XTermInteractive.tsx +0 -510
  375. package/packages/dashboard/ui/react-components/XTermLogViewer.tsx +0 -719
  376. package/packages/dashboard/ui/react-components/channels/ChannelDialogs.tsx +0 -1411
  377. package/packages/dashboard/ui/react-components/channels/ChannelHeader.tsx +0 -317
  378. package/packages/dashboard/ui/react-components/channels/ChannelMessageList.tsx +0 -463
  379. package/packages/dashboard/ui/react-components/channels/ChannelViewV1.tsx +0 -146
  380. package/packages/dashboard/ui/react-components/channels/MessageInput.tsx +0 -288
  381. package/packages/dashboard/ui/react-components/channels/SearchInput.tsx +0 -172
  382. package/packages/dashboard/ui/react-components/channels/SearchResults.tsx +0 -336
  383. package/packages/dashboard/ui/react-components/channels/api.ts +0 -697
  384. package/packages/dashboard/ui/react-components/channels/index.ts +0 -76
  385. package/packages/dashboard/ui/react-components/channels/mockApi.ts +0 -344
  386. package/packages/dashboard/ui/react-components/channels/types.ts +0 -566
  387. package/packages/dashboard/ui/react-components/hooks/index.ts +0 -57
  388. package/packages/dashboard/ui/react-components/hooks/useAgentLogs.ts +0 -394
  389. package/packages/dashboard/ui/react-components/hooks/useAgents.ts +0 -127
  390. package/packages/dashboard/ui/react-components/hooks/useBroadcastDedup.ts +0 -86
  391. package/packages/dashboard/ui/react-components/hooks/useChannelAdmin.ts +0 -329
  392. package/packages/dashboard/ui/react-components/hooks/useChannelBrowser.ts +0 -239
  393. package/packages/dashboard/ui/react-components/hooks/useChannelCommands.ts +0 -138
  394. package/packages/dashboard/ui/react-components/hooks/useChannels.ts +0 -328
  395. package/packages/dashboard/ui/react-components/hooks/useDebounce.ts +0 -29
  396. package/packages/dashboard/ui/react-components/hooks/useDirectMessage.ts +0 -141
  397. package/packages/dashboard/ui/react-components/hooks/useMessages.ts +0 -309
  398. package/packages/dashboard/ui/react-components/hooks/useOrchestrator.ts +0 -364
  399. package/packages/dashboard/ui/react-components/hooks/usePinnedAgents.ts +0 -140
  400. package/packages/dashboard/ui/react-components/hooks/usePresence.ts +0 -340
  401. package/packages/dashboard/ui/react-components/hooks/useRecentRepos.ts +0 -130
  402. package/packages/dashboard/ui/react-components/hooks/useSession.ts +0 -209
  403. package/packages/dashboard/ui/react-components/hooks/useTrajectory.ts +0 -265
  404. package/packages/dashboard/ui/react-components/hooks/useWebSocket.ts +0 -169
  405. package/packages/dashboard/ui/react-components/hooks/useWorkspaceMembers.ts +0 -120
  406. package/packages/dashboard/ui/react-components/hooks/useWorkspaceRepos.ts +0 -73
  407. package/packages/dashboard/ui/react-components/hooks/useWorkspaceStatus.ts +0 -237
  408. package/packages/dashboard/ui/react-components/index.ts +0 -81
  409. package/packages/dashboard/ui/react-components/layout/Header.tsx +0 -355
  410. package/packages/dashboard/ui/react-components/layout/RepoContextHeader.tsx +0 -361
  411. package/packages/dashboard/ui/react-components/layout/Sidebar.archive.test.tsx +0 -126
  412. package/packages/dashboard/ui/react-components/layout/Sidebar.test.tsx +0 -691
  413. package/packages/dashboard/ui/react-components/layout/Sidebar.tsx +0 -930
  414. package/packages/dashboard/ui/react-components/layout/index.ts +0 -7
  415. package/packages/dashboard/ui/react-components/settings/BillingSettingsPanel.tsx +0 -564
  416. package/packages/dashboard/ui/react-components/settings/SettingsPage.tsx +0 -544
  417. package/packages/dashboard/ui/react-components/settings/TeamSettingsPanel.tsx +0 -560
  418. package/packages/dashboard/ui/react-components/settings/WorkspaceSettingsPanel.tsx +0 -1386
  419. package/packages/dashboard/ui/react-components/settings/index.ts +0 -11
  420. package/packages/dashboard/ui/react-components/settings/types.ts +0 -53
  421. package/packages/dashboard/ui/react-components/utils/messageFormatting.tsx +0 -370
  422. package/packages/dashboard/ui/tailwind.config.js +0 -148
  423. package/packages/dashboard/ui/types/index.ts +0 -304
  424. package/packages/dashboard/ui/types/threading.ts +0 -7
  425. package/packages/dashboard/ui-dist/404.html +0 -1
  426. package/packages/dashboard/ui-dist/_next/static/91mkGYq3qbG8WHE6VytQ8/_buildManifest.js +0 -1
  427. package/packages/dashboard/ui-dist/_next/static/91mkGYq3qbG8WHE6VytQ8/_ssgManifest.js +0 -1
  428. package/packages/dashboard/ui-dist/_next/static/T2rV14eEU5OweDeV29SvG/_buildManifest.js +0 -1
  429. package/packages/dashboard/ui-dist/_next/static/T2rV14eEU5OweDeV29SvG/_ssgManifest.js +0 -1
  430. package/packages/dashboard/ui-dist/_next/static/chunks/116-a883fca163f3a5bc.js +0 -1
  431. package/packages/dashboard/ui-dist/_next/static/chunks/117-c8afed19e821a35d.js +0 -2
  432. package/packages/dashboard/ui-dist/_next/static/chunks/282-980c2eb8fff20123.js +0 -1
  433. package/packages/dashboard/ui-dist/_next/static/chunks/320-a6304232cd0ee2ce.js +0 -1
  434. package/packages/dashboard/ui-dist/_next/static/chunks/532-bace199897eeab37.js +0 -9
  435. package/packages/dashboard/ui-dist/_next/static/chunks/631-16b905e5920f9b59.js +0 -1
  436. package/packages/dashboard/ui-dist/_next/static/chunks/648-acb2ff9f77cbfbd3.js +0 -1
  437. package/packages/dashboard/ui-dist/_next/static/chunks/766-2aea80818f7eb0d8.js +0 -1
  438. package/packages/dashboard/ui-dist/_next/static/chunks/83-26d2bde54616ee90.js +0 -1
  439. package/packages/dashboard/ui-dist/_next/static/chunks/847-f1f467060f32afff.js +0 -1
  440. package/packages/dashboard/ui-dist/_next/static/chunks/891-5cb1513eeb97a891.js +0 -1
  441. package/packages/dashboard/ui-dist/_next/static/chunks/app/_not-found/page-60501fddbafba9dc.js +0 -1
  442. package/packages/dashboard/ui-dist/_next/static/chunks/app/app/onboarding/page-9914652442f7e4fb.js +0 -1
  443. package/packages/dashboard/ui-dist/_next/static/chunks/app/app/page-366fb7c078d4e9e0.js +0 -1
  444. package/packages/dashboard/ui-dist/_next/static/chunks/app/cloud/link/page-fa1d5842aa90e8a6.js +0 -1
  445. package/packages/dashboard/ui-dist/_next/static/chunks/app/complete-profile/page-dd64bbdf66b639cd.js +0 -1
  446. package/packages/dashboard/ui-dist/_next/static/chunks/app/connect-repos/page-113060009ef35bc2.js +0 -1
  447. package/packages/dashboard/ui-dist/_next/static/chunks/app/history/page-9965d2483011b846.js +0 -1
  448. package/packages/dashboard/ui-dist/_next/static/chunks/app/layout-6b91e33784c20610.js +0 -1
  449. package/packages/dashboard/ui-dist/_next/static/chunks/app/login/page-435eceb0073be027.js +0 -1
  450. package/packages/dashboard/ui-dist/_next/static/chunks/app/metrics/page-1e37ef8e73940b40.js +0 -1
  451. package/packages/dashboard/ui-dist/_next/static/chunks/app/page-8119d4246743574e.js +0 -1
  452. package/packages/dashboard/ui-dist/_next/static/chunks/app/pricing/page-9db3ebdfa567a7c9.js +0 -1
  453. package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +0 -1
  454. package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/setup/[provider]/page-4dbe33f0f7691b7c.js +0 -1
  455. package/packages/dashboard/ui-dist/_next/static/chunks/app/signup/page-c7a0a28341365ae0.js +0 -1
  456. package/packages/dashboard/ui-dist/_next/static/chunks/e868780c-48e5f147c90a3a41.js +0 -18
  457. package/packages/dashboard/ui-dist/_next/static/chunks/fd9d1056-609918ca7b6280bb.js +0 -1
  458. package/packages/dashboard/ui-dist/_next/static/chunks/framework-f66176bb897dc684.js +0 -1
  459. package/packages/dashboard/ui-dist/_next/static/chunks/main-311c3db74dcfadb7.js +0 -1
  460. package/packages/dashboard/ui-dist/_next/static/chunks/main-app-fdbeb09028f57c9f.js +0 -1
  461. package/packages/dashboard/ui-dist/_next/static/chunks/pages/_app-72b849fbd24ac258.js +0 -1
  462. package/packages/dashboard/ui-dist/_next/static/chunks/pages/_error-7ba65e1336b92748.js +0 -1
  463. package/packages/dashboard/ui-dist/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  464. package/packages/dashboard/ui-dist/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +0 -1
  465. package/packages/dashboard/ui-dist/_next/static/css/4034f236dd1a3178.css +0 -1
  466. package/packages/dashboard/ui-dist/_next/static/css/6892f8422896ef7a.css +0 -1
  467. package/packages/dashboard/ui-dist/_next/static/l8L2OscDSR2vsMIlWcC48/_buildManifest.js +0 -1
  468. package/packages/dashboard/ui-dist/_next/static/l8L2OscDSR2vsMIlWcC48/_ssgManifest.js +0 -1
  469. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-128.png +0 -0
  470. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-256.png +0 -0
  471. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-32.png +0 -0
  472. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-512.png +0 -0
  473. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-64.png +0 -0
  474. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo.svg +0 -45
  475. package/packages/dashboard/ui-dist/alt-logos/logo.svg +0 -38
  476. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-128.png +0 -0
  477. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-256.png +0 -0
  478. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-32.png +0 -0
  479. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-512.png +0 -0
  480. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-64.png +0 -0
  481. package/packages/dashboard/ui-dist/alt-logos/monogram-logo.svg +0 -38
  482. package/packages/dashboard/ui-dist/app/onboarding.html +0 -1
  483. package/packages/dashboard/ui-dist/app/onboarding.txt +0 -7
  484. package/packages/dashboard/ui-dist/app.html +0 -1
  485. package/packages/dashboard/ui-dist/app.txt +0 -7
  486. package/packages/dashboard/ui-dist/apple-icon.png +0 -0
  487. package/packages/dashboard/ui-dist/cloud/link.html +0 -1
  488. package/packages/dashboard/ui-dist/cloud/link.txt +0 -7
  489. package/packages/dashboard/ui-dist/complete-profile.html +0 -5
  490. package/packages/dashboard/ui-dist/complete-profile.txt +0 -7
  491. package/packages/dashboard/ui-dist/connect-repos.html +0 -1
  492. package/packages/dashboard/ui-dist/connect-repos.txt +0 -7
  493. package/packages/dashboard/ui-dist/history.html +0 -1
  494. package/packages/dashboard/ui-dist/history.txt +0 -7
  495. package/packages/dashboard/ui-dist/index.html +0 -1
  496. package/packages/dashboard/ui-dist/index.txt +0 -7
  497. package/packages/dashboard/ui-dist/login.html +0 -5
  498. package/packages/dashboard/ui-dist/login.txt +0 -7
  499. package/packages/dashboard/ui-dist/metrics.html +0 -1
  500. package/packages/dashboard/ui-dist/metrics.txt +0 -7
  501. package/packages/dashboard/ui-dist/pricing.html +0 -13
  502. package/packages/dashboard/ui-dist/pricing.txt +0 -7
  503. package/packages/dashboard/ui-dist/providers/setup/claude.html +0 -1
  504. package/packages/dashboard/ui-dist/providers/setup/claude.txt +0 -8
  505. package/packages/dashboard/ui-dist/providers/setup/codex.html +0 -1
  506. package/packages/dashboard/ui-dist/providers/setup/codex.txt +0 -8
  507. package/packages/dashboard/ui-dist/providers/setup/cursor.html +0 -1
  508. package/packages/dashboard/ui-dist/providers/setup/cursor.txt +0 -8
  509. package/packages/dashboard/ui-dist/providers.html +0 -1
  510. package/packages/dashboard/ui-dist/providers.txt +0 -7
  511. package/packages/dashboard/ui-dist/signup.html +0 -6
  512. package/packages/dashboard/ui-dist/signup.txt +0 -7
  513. package/packages/dashboard-server/dist/health-worker-manager.d.ts +0 -62
  514. package/packages/dashboard-server/dist/health-worker-manager.js +0 -144
  515. package/packages/dashboard-server/dist/health-worker.d.ts +0 -9
  516. package/packages/dashboard-server/dist/health-worker.js +0 -79
  517. package/packages/dashboard-server/dist/index.d.ts +0 -18
  518. package/packages/dashboard-server/dist/index.js +0 -17
  519. package/packages/dashboard-server/dist/metrics.d.ts +0 -105
  520. package/packages/dashboard-server/dist/metrics.js +0 -193
  521. package/packages/dashboard-server/dist/needs-attention.d.ts +0 -24
  522. package/packages/dashboard-server/dist/needs-attention.js +0 -78
  523. package/packages/dashboard-server/dist/server.d.ts +0 -25
  524. package/packages/dashboard-server/dist/server.js +0 -5158
  525. package/packages/dashboard-server/dist/start.d.ts +0 -6
  526. package/packages/dashboard-server/dist/start.js +0 -13
  527. package/packages/dashboard-server/dist/types/threading.d.ts +0 -8
  528. package/packages/dashboard-server/dist/types/threading.js +0 -2
  529. package/packages/dashboard-server/dist/user-bridge.d.ts +0 -158
  530. package/packages/dashboard-server/dist/user-bridge.js +0 -390
  531. package/packages/dashboard-server/package.json +0 -55
  532. package/scripts/run-migrations.js +0 -43
  533. package/scripts/setup-stripe-products.ts +0 -312
  534. package/scripts/verify-schema.js +0 -134
@@ -1,502 +0,0 @@
1
- /**
2
- * Scaling Orchestrator
3
- *
4
- * Main integration layer that connects:
5
- * - AutoScaler (policy evaluation and scaling decisions)
6
- * - CapacityManager (workspace capacity tracking)
7
- * - WorkspaceProvisioner (actual instance provisioning)
8
- * - Monitoring (memory/CPU metrics from agents)
9
- *
10
- * Handles the complete scaling lifecycle:
11
- * 1. Receives metrics from monitoring
12
- * 2. Updates capacity manager
13
- * 3. Triggers auto-scaler evaluation
14
- * 4. Executes scaling via provisioner
15
- * 5. Updates capacity after scaling
16
- */
17
- import { EventEmitter } from 'events';
18
- import { createAutoScaler } from './auto-scaler.js';
19
- import { createCapacityManager } from './capacity-manager.js';
20
- import { getScalingPolicyService } from './scaling-policy.js';
21
- import { getProvisioner, RESOURCE_TIERS, } from '../provisioner/index.js';
22
- import { db } from '../db/index.js';
23
- const DEFAULT_CONFIG = {
24
- enabled: true,
25
- autoProvision: true,
26
- autoDeprovision: false, // Disabled by default for safety
27
- idleTimeoutMs: 30 * 60 * 1000, // 30 minutes
28
- minUserWorkspaces: 1,
29
- };
30
- export class ScalingOrchestrator extends EventEmitter {
31
- config;
32
- autoScaler;
33
- capacityManager;
34
- provisioner;
35
- initialized = false;
36
- scalingHistory = [];
37
- maxHistorySize = 1000;
38
- constructor(config = {}) {
39
- super();
40
- this.config = { ...DEFAULT_CONFIG, ...config };
41
- this.autoScaler = createAutoScaler({ enabled: this.config.enabled });
42
- this.capacityManager = createCapacityManager();
43
- this.provisioner = getProvisioner();
44
- }
45
- /**
46
- * Initialize the orchestrator with Redis for cross-server coordination
47
- */
48
- async initialize(redisUrl) {
49
- if (this.initialized)
50
- return;
51
- const url = redisUrl || this.config.redisUrl;
52
- if (!url) {
53
- console.warn('[ScalingOrchestrator] No Redis URL provided, running in local mode');
54
- this.initialized = true;
55
- return;
56
- }
57
- try {
58
- // Initialize both services with Redis
59
- await Promise.all([
60
- this.autoScaler.initialize(url),
61
- this.capacityManager.initialize(url),
62
- ]);
63
- // Set up event handlers
64
- this.setupEventHandlers();
65
- this.initialized = true;
66
- this.emit('initialized');
67
- }
68
- catch (error) {
69
- this.emit('error', { context: 'initialization', error });
70
- throw error;
71
- }
72
- }
73
- /**
74
- * Set up event handlers between components
75
- */
76
- setupEventHandlers() {
77
- // Handle scaling execution requests from auto-scaler
78
- this.autoScaler.on('execute_scaling', async ({ operation, decision }) => {
79
- try {
80
- await this.executeScaling(operation, decision);
81
- }
82
- catch (error) {
83
- this.recordEvent({
84
- type: operation.action,
85
- userId: operation.userId,
86
- operation,
87
- error: error instanceof Error ? error.message : 'Unknown error',
88
- timestamp: new Date(),
89
- });
90
- }
91
- });
92
- // Handle capacity updates
93
- this.capacityManager.on('capacity_updated', (capacity) => {
94
- // Check if any user needs scaling based on new capacity data
95
- this.checkScalingNeeded(capacity.userId);
96
- });
97
- // Handle stale workspaces
98
- this.capacityManager.on('workspace_stale', async ({ workspaceId }) => {
99
- this.emit('workspace_stale', workspaceId);
100
- // Could trigger health check or restart here
101
- });
102
- // Forward auto-scaler events
103
- this.autoScaler.on('scaling_started', (op) => this.emit('scaling_started', op));
104
- this.autoScaler.on('scaling_completed', (op) => this.emit('scaling_completed', op));
105
- this.autoScaler.on('scaling_error', (data) => this.emit('scaling_error', data));
106
- }
107
- /**
108
- * Check if scaling is needed for a user
109
- */
110
- async checkScalingNeeded(userId) {
111
- const forecast = this.capacityManager.getCapacityForecast(userId);
112
- if (!forecast)
113
- return;
114
- // Emit forecast for monitoring
115
- this.emit('capacity_forecast', forecast);
116
- // Take action based on recommendation
117
- if (forecast.recommendation === 'critical' || forecast.recommendation === 'scale_now') {
118
- this.emit('scaling_recommended', {
119
- userId,
120
- recommendation: forecast.recommendation,
121
- forecast,
122
- });
123
- }
124
- }
125
- /**
126
- * Execute a scaling operation
127
- */
128
- async executeScaling(operation, decision) {
129
- const event = {
130
- type: operation.action,
131
- userId: operation.userId,
132
- decision,
133
- operation,
134
- timestamp: new Date(),
135
- };
136
- try {
137
- switch (operation.action) {
138
- // Horizontal scaling
139
- case 'scale_up':
140
- await this.handleScaleUp(operation, decision, event);
141
- break;
142
- case 'scale_down':
143
- await this.handleScaleDown(operation, decision, event);
144
- break;
145
- // Vertical scaling (in-workspace)
146
- case 'resize_up':
147
- case 'resize_down':
148
- await this.handleResize(operation, decision, event);
149
- break;
150
- case 'increase_agent_limit':
151
- await this.handleAgentLimitIncrease(operation, decision, event);
152
- break;
153
- case 'migrate_agents':
154
- await this.handleMigrateAgents(operation, decision, event);
155
- break;
156
- case 'rebalance':
157
- await this.handleRebalance(operation, decision, event);
158
- break;
159
- }
160
- }
161
- catch (error) {
162
- event.error = error instanceof Error ? error.message : 'Unknown error';
163
- throw error;
164
- }
165
- finally {
166
- this.recordEvent(event);
167
- }
168
- }
169
- /**
170
- * Handle scale up - provision new workspace
171
- */
172
- async handleScaleUp(operation, decision, event) {
173
- if (!this.config.autoProvision) {
174
- this.emit('scaling_blocked', {
175
- reason: 'auto_provision_disabled',
176
- operation,
177
- });
178
- return;
179
- }
180
- // Get user's existing workspace config as template
181
- const existingWorkspaces = await db.workspaces.findByUserId(operation.userId);
182
- if (existingWorkspaces.length === 0) {
183
- throw new Error('No existing workspace to use as template');
184
- }
185
- const template = existingWorkspaces[0];
186
- const workspaceNumber = existingWorkspaces.length + 1;
187
- // Provision new workspace
188
- const provisionConfig = {
189
- userId: operation.userId,
190
- name: `${template.name}-${workspaceNumber}`,
191
- providers: template.config.providers || [],
192
- repositories: template.config.repositories || [],
193
- supervisorEnabled: template.config.supervisorEnabled,
194
- maxAgents: template.config.maxAgents,
195
- };
196
- const result = await this.provisioner.provision(provisionConfig);
197
- event.result = result;
198
- event.workspaceId = result.workspaceId;
199
- if (result.status === 'error') {
200
- throw new Error(result.error || 'Provisioning failed');
201
- }
202
- this.emit('workspace_provisioned', {
203
- userId: operation.userId,
204
- workspaceId: result.workspaceId,
205
- publicUrl: result.publicUrl,
206
- triggeredBy: operation.triggeredBy,
207
- });
208
- }
209
- /**
210
- * Handle scale down - deprovision workspace
211
- */
212
- async handleScaleDown(operation, decision, event) {
213
- if (!this.config.autoDeprovision) {
214
- this.emit('scaling_blocked', {
215
- reason: 'auto_deprovision_disabled',
216
- operation,
217
- });
218
- return;
219
- }
220
- // Get user's workspaces
221
- const workspaces = await db.workspaces.findByUserId(operation.userId);
222
- // Don't scale below minimum
223
- if (workspaces.length <= this.config.minUserWorkspaces) {
224
- this.emit('scaling_blocked', {
225
- reason: 'at_minimum_workspaces',
226
- operation,
227
- });
228
- return;
229
- }
230
- // Find the best workspace to deprovision (lowest utilization)
231
- const recommendations = this.capacityManager.recommendPlacement(operation.userId, 0);
232
- const bestToRemove = recommendations[recommendations.length - 1]; // Highest score = lowest utilization
233
- if (!bestToRemove) {
234
- throw new Error('No workspace found to deprovision');
235
- }
236
- // Check if workspace has active agents
237
- const capacity = this.capacityManager.getUserWorkspaces(operation.userId)
238
- .find(w => w.workspaceId === bestToRemove.workspaceId);
239
- if (capacity && capacity.currentAgents > 0) {
240
- // Need to migrate agents first
241
- this.emit('migration_required', {
242
- fromWorkspaceId: bestToRemove.workspaceId,
243
- agentCount: capacity.currentAgents,
244
- });
245
- return;
246
- }
247
- // Deprovision
248
- await this.provisioner.deprovision(bestToRemove.workspaceId);
249
- await this.capacityManager.removeWorkspace(bestToRemove.workspaceId);
250
- event.workspaceId = bestToRemove.workspaceId;
251
- this.emit('workspace_deprovisioned', {
252
- userId: operation.userId,
253
- workspaceId: bestToRemove.workspaceId,
254
- triggeredBy: operation.triggeredBy,
255
- });
256
- }
257
- /**
258
- * Handle rebalance - redistribute agents across workspaces
259
- */
260
- async handleRebalance(operation, _decision, _event) {
261
- // Rebalancing would involve:
262
- // 1. Identifying overloaded workspaces
263
- // 2. Finding agents that can be migrated
264
- // 3. Selecting target workspaces
265
- // 4. Coordinating agent migration via coordinator service
266
- this.emit('rebalance_requested', {
267
- userId: operation.userId,
268
- // Would include specific migration plan
269
- });
270
- // Actual implementation would coordinate with the agent coordinator
271
- // to move agents between workspaces
272
- }
273
- /**
274
- * Handle resize - vertical scaling (increase/decrease workspace resources)
275
- */
276
- async handleResize(operation, decision, event) {
277
- // Get target workspace
278
- const targetWorkspaceId = operation.targetWorkspaceId;
279
- if (!targetWorkspaceId) {
280
- // Find the workspace that triggered the scaling
281
- const workspaces = await db.workspaces.findByUserId(operation.userId);
282
- if (workspaces.length === 0) {
283
- throw new Error('No workspace found to resize');
284
- }
285
- // For now, resize the first workspace (could use metrics to pick the right one)
286
- operation.targetWorkspaceId = workspaces[0].id;
287
- }
288
- const workspace = await db.workspaces.findById(operation.targetWorkspaceId);
289
- if (!workspace) {
290
- throw new Error('Workspace not found');
291
- }
292
- // Determine the target tier
293
- let targetTier;
294
- if (operation.targetResourceTier) {
295
- targetTier = RESOURCE_TIERS[operation.targetResourceTier];
296
- }
297
- else {
298
- // Calculate next tier up/down
299
- const currentTier = await this.provisioner.getCurrentTier(workspace.id);
300
- const tierOrder = ['small', 'medium', 'large', 'xlarge'];
301
- const currentIndex = tierOrder.indexOf(currentTier.name);
302
- if (operation.action === 'resize_up') {
303
- const nextIndex = Math.min(currentIndex + 1, tierOrder.length - 1);
304
- targetTier = RESOURCE_TIERS[tierOrder[nextIndex]];
305
- }
306
- else {
307
- const nextIndex = Math.max(currentIndex - 1, 0);
308
- targetTier = RESOURCE_TIERS[tierOrder[nextIndex]];
309
- }
310
- event.previousTier = currentTier.name;
311
- }
312
- // Perform the resize
313
- await this.provisioner.resize(workspace.id, targetTier);
314
- event.workspaceId = workspace.id;
315
- event.newTier = targetTier.name;
316
- this.emit('workspace_resized', {
317
- userId: operation.userId,
318
- workspaceId: workspace.id,
319
- previousTier: event.previousTier,
320
- newTier: targetTier.name,
321
- triggeredBy: operation.triggeredBy,
322
- });
323
- }
324
- /**
325
- * Handle agent limit increase within a workspace
326
- */
327
- async handleAgentLimitIncrease(operation, decision, event) {
328
- // Get target workspace
329
- const targetWorkspaceId = operation.targetWorkspaceId;
330
- const workspaces = await db.workspaces.findByUserId(operation.userId);
331
- if (!targetWorkspaceId && workspaces.length === 0) {
332
- throw new Error('No workspace found to update agent limit');
333
- }
334
- const workspace = await db.workspaces.findById(targetWorkspaceId || workspaces[0].id);
335
- if (!workspace) {
336
- throw new Error('Workspace not found');
337
- }
338
- const currentLimit = workspace.config.maxAgents || 10;
339
- let newLimit;
340
- if (operation.targetAgentLimit) {
341
- newLimit = operation.targetAgentLimit;
342
- }
343
- else if (decision.action?.percentage) {
344
- // Increase by percentage
345
- newLimit = Math.ceil(currentLimit * (1 + decision.action.percentage / 100));
346
- }
347
- else {
348
- // Default: increase by 50%
349
- newLimit = Math.ceil(currentLimit * 1.5);
350
- }
351
- // Cap at plan maximum
352
- const policyService = getScalingPolicyService();
353
- const userPlan = 'pro'; // Would get from user context
354
- const thresholds = policyService.getThresholds(userPlan);
355
- newLimit = Math.min(newLimit, thresholds.agentsPerWorkspaceMax);
356
- // Update the agent limit
357
- await this.provisioner.updateAgentLimit(workspace.id, newLimit);
358
- event.workspaceId = workspace.id;
359
- event.previousAgentLimit = currentLimit;
360
- event.newAgentLimit = newLimit;
361
- this.emit('agent_limit_updated', {
362
- userId: operation.userId,
363
- workspaceId: workspace.id,
364
- previousLimit: currentLimit,
365
- newLimit,
366
- triggeredBy: operation.triggeredBy,
367
- });
368
- }
369
- /**
370
- * Handle agent migration between workspaces
371
- */
372
- async handleMigrateAgents(operation, _decision, _event) {
373
- // Agent migration would involve:
374
- // 1. Identifying agents to migrate
375
- // 2. Selecting target workspace(s)
376
- // 3. Coordinating graceful migration via coordinator service
377
- // 4. Updating capacity tracking
378
- this.emit('migration_requested', {
379
- userId: operation.userId,
380
- fromWorkspaceId: operation.targetWorkspaceId,
381
- // Would include specific migration plan
382
- });
383
- // Actual implementation would coordinate with the agent coordinator
384
- }
385
- /**
386
- * Record a scaling event in history
387
- */
388
- recordEvent(event) {
389
- this.scalingHistory.push(event);
390
- // Trim history if too large
391
- if (this.scalingHistory.length > this.maxHistorySize) {
392
- this.scalingHistory = this.scalingHistory.slice(-this.maxHistorySize);
393
- }
394
- // Persist to database if significant
395
- const significantEvents = [
396
- 'scale_up',
397
- 'scale_down',
398
- 'resize_up',
399
- 'resize_down',
400
- 'increase_agent_limit',
401
- ];
402
- if (significantEvents.includes(event.type)) {
403
- this.persistScalingEvent(event).catch((err) => {
404
- console.error('[ScalingOrchestrator] Failed to persist event:', err);
405
- });
406
- }
407
- }
408
- /**
409
- * Persist scaling event to database
410
- */
411
- async persistScalingEvent(event) {
412
- // Would insert into scaling_events table
413
- // For now, just emit for external handling
414
- this.emit('event_recorded', event);
415
- }
416
- /**
417
- * Report metrics from monitoring service
418
- * This is the main entry point for metrics from agents
419
- */
420
- async reportMetrics(userId, workspaces) {
421
- // Update capacity manager
422
- for (const workspace of workspaces) {
423
- const capacityUpdate = this.capacityManager.fromWorkspaceMetrics(userId, workspace);
424
- await this.capacityManager.reportCapacity(workspace.workspaceId, userId, capacityUpdate);
425
- }
426
- // Report to auto-scaler for policy evaluation
427
- await this.autoScaler.reportMetrics(userId, workspaces);
428
- }
429
- /**
430
- * Manually trigger scaling evaluation for a user
431
- */
432
- async evaluateScaling(userId) {
433
- return this.autoScaler.triggerEvaluation(userId);
434
- }
435
- /**
436
- * Get capacity forecast for a user
437
- */
438
- getCapacityForecast(userId) {
439
- return this.capacityManager.getCapacityForecast(userId);
440
- }
441
- /**
442
- * Get best placement for new agents
443
- */
444
- recommendPlacement(userId, agentCount = 1) {
445
- return this.capacityManager.recommendPlacement(userId, agentCount);
446
- }
447
- /**
448
- * Get scaling history for a user
449
- */
450
- getScalingHistory(userId) {
451
- if (userId) {
452
- return this.scalingHistory.filter((e) => e.userId === userId);
453
- }
454
- return [...this.scalingHistory];
455
- }
456
- /**
457
- * Get current status of the orchestrator
458
- */
459
- getStatus() {
460
- return {
461
- initialized: this.initialized,
462
- autoScaler: this.autoScaler.getStatus(),
463
- capacity: this.capacityManager.getGlobalMetrics(),
464
- config: {
465
- autoProvision: this.config.autoProvision,
466
- autoDeprovision: this.config.autoDeprovision,
467
- minUserWorkspaces: this.config.minUserWorkspaces,
468
- },
469
- historySize: this.scalingHistory.length,
470
- };
471
- }
472
- /**
473
- * Update user's plan tier
474
- */
475
- async setUserPlan(userId, plan) {
476
- await this.autoScaler.setUserPlan(userId, plan);
477
- }
478
- /**
479
- * Clean shutdown
480
- */
481
- async shutdown() {
482
- await Promise.all([
483
- this.autoScaler.shutdown(),
484
- this.capacityManager.shutdown(),
485
- ]);
486
- this.initialized = false;
487
- this.emit('shutdown');
488
- }
489
- }
490
- // Singleton instance
491
- let _orchestrator = null;
492
- export function getScalingOrchestrator() {
493
- if (!_orchestrator) {
494
- _orchestrator = new ScalingOrchestrator();
495
- }
496
- return _orchestrator;
497
- }
498
- export function createScalingOrchestrator(config = {}) {
499
- _orchestrator = new ScalingOrchestrator(config);
500
- return _orchestrator;
501
- }
502
- //# sourceMappingURL=scaling-orchestrator.js.map
@@ -1,121 +0,0 @@
1
- /**
2
- * Scaling Policy Service
3
- *
4
- * Defines rules and policies for auto-scaling workspaces based on:
5
- * - Memory pressure
6
- * - Agent count
7
- * - CPU usage
8
- * - Trend analysis
9
- *
10
- * Policies are configurable per user/plan tier.
11
- */
12
- import { EventEmitter } from 'events';
13
- export interface ScalingThresholds {
14
- memoryWarningBytes: number;
15
- memoryCriticalBytes: number;
16
- memoryScaleUpBytes: number;
17
- memoryGrowthRateWarning: number;
18
- memoryGrowthRateScaleUp: number;
19
- agentsPerWorkspaceWarning: number;
20
- agentsPerWorkspaceMax: number;
21
- cpuWarningPercent: number;
22
- cpuScaleUpPercent: number;
23
- evaluationWindowMs: number;
24
- cooldownMs: number;
25
- }
26
- export interface ScalingPolicy {
27
- id: string;
28
- name: string;
29
- description: string;
30
- enabled: boolean;
31
- priority: number;
32
- conditions: ScalingCondition[];
33
- action: ScalingAction;
34
- maxInstances: number;
35
- minInstances: number;
36
- }
37
- export interface ScalingCondition {
38
- metric: 'memory_usage' | 'memory_trend' | 'agent_count' | 'cpu_usage' | 'workspace_count';
39
- operator: 'gt' | 'gte' | 'lt' | 'lte' | 'eq';
40
- value: number;
41
- duration?: number;
42
- }
43
- export interface ScalingAction {
44
- type: 'scale_up' | 'scale_down' | 'resize_up' | 'resize_down' | 'increase_agent_limit' | 'migrate_agents' | 'rebalance' | 'alert_only';
45
- targetCount?: number;
46
- percentage?: number;
47
- targetWorkspaceId?: string;
48
- resourceTier?: 'small' | 'medium' | 'large' | 'xlarge';
49
- newAgentLimit?: number;
50
- }
51
- export interface ScalingDecision {
52
- shouldScale: boolean;
53
- action: ScalingAction | null;
54
- reason: string;
55
- triggeredPolicy: string | null;
56
- metrics: Record<string, number>;
57
- timestamp: Date;
58
- }
59
- export interface WorkspaceMetrics {
60
- workspaceId: string;
61
- totalMemoryBytes: number;
62
- averageMemoryBytes: number;
63
- peakMemoryBytes: number;
64
- memoryTrendPerMinute: number;
65
- agentCount: number;
66
- healthyAgentCount: number;
67
- cpuPercent: number;
68
- uptimeMs: number;
69
- }
70
- export interface UserScalingContext {
71
- userId: string;
72
- plan: 'free' | 'pro' | 'team' | 'enterprise';
73
- currentWorkspaceCount: number;
74
- maxWorkspaces: number;
75
- workspaceMetrics: WorkspaceMetrics[];
76
- lastScalingAction?: Date;
77
- }
78
- export declare class ScalingPolicyService extends EventEmitter {
79
- private thresholds;
80
- private policies;
81
- private conditionHistory;
82
- constructor();
83
- /**
84
- * Get thresholds for a plan tier
85
- */
86
- getThresholds(plan: string): ScalingThresholds;
87
- /**
88
- * Set custom thresholds for a plan
89
- */
90
- setThresholds(plan: string, thresholds: Partial<ScalingThresholds>): void;
91
- /**
92
- * Get policies for a user (default + custom)
93
- */
94
- getPolicies(userId: string): ScalingPolicy[];
95
- /**
96
- * Add custom policy for a user
97
- */
98
- addPolicy(userId: string, policy: ScalingPolicy): void;
99
- /**
100
- * Evaluate scaling decision based on current context
101
- */
102
- evaluate(context: UserScalingContext): ScalingDecision;
103
- /**
104
- * Calculate aggregate metrics from workspace metrics
105
- */
106
- private calculateAggregateMetrics;
107
- /**
108
- * Evaluate conditions with duration support
109
- */
110
- private evaluateConditions;
111
- /**
112
- * Compare values based on operator
113
- */
114
- private compareValues;
115
- /**
116
- * Get max workspaces for a plan
117
- */
118
- getMaxWorkspaces(plan: string): number;
119
- }
120
- export declare function getScalingPolicyService(): ScalingPolicyService;
121
- //# sourceMappingURL=scaling-policy.d.ts.map