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,373 +0,0 @@
1
- /**
2
- * CI Agent Spawner Service
3
- *
4
- * Spawns agents to fix CI failures automatically.
5
- * Called by the webhook handler when CI checks fail on PRs.
6
- *
7
- * Flow:
8
- * 1. App posts acknowledgment comment on the PR
9
- * 2. Finds a linked daemon for the repository
10
- * 3. Queues spawn command for the daemon
11
- * 4. Agent works and posts response comment
12
- */
13
- import { db } from '../db/index.js';
14
- import { nangoService } from './nango.js';
15
- /**
16
- * Get the GitHub App name for comments
17
- */
18
- function getAppName() {
19
- return process.env.GITHUB_APP_NAME || 'Agent Relay';
20
- }
21
- /**
22
- * Post a CI failure acknowledgment comment on GitHub
23
- */
24
- async function postCIAcknowledgmentComment(repository, prNumber, checkName, failureTitle) {
25
- if (!repository.nangoConnectionId) {
26
- console.warn(`[ci-spawner] Repository ${repository.githubFullName} has no Nango connection`);
27
- return null;
28
- }
29
- const [owner, repo] = repository.githubFullName.split('/');
30
- const appName = getAppName();
31
- const body = `🔴 **CI Failure Detected**
32
-
33
- The \`${checkName}\` check has failed${failureTitle ? `: ${failureTitle}` : ''}.
34
-
35
- I'm spawning an agent to investigate and fix this issue. The **@ci-fix** agent will analyze the failure and attempt to resolve it.
36
-
37
- You'll be notified when the fix is ready or if manual intervention is needed.
38
-
39
- _— ${appName}_`;
40
- try {
41
- const result = await nangoService.addGithubIssueComment(repository.nangoConnectionId, owner, repo, prNumber, body);
42
- console.log(`[ci-spawner] Posted CI acknowledgment comment: ${result.html_url}`);
43
- return { id: result.id, url: result.html_url };
44
- }
45
- catch (error) {
46
- console.error(`[ci-spawner] Failed to post CI acknowledgment comment:`, error);
47
- return null;
48
- }
49
- }
50
- /**
51
- * Post a completion comment on GitHub
52
- */
53
- async function postCompletionComment(repository, prNumber, success, summary, commitSha) {
54
- if (!repository.nangoConnectionId) {
55
- return;
56
- }
57
- const [owner, repo] = repository.githubFullName.split('/');
58
- const appName = getAppName();
59
- let body;
60
- if (success) {
61
- body = `✅ **CI Fix Applied**
62
-
63
- ${summary}
64
-
65
- ${commitSha ? `**Commit:** ${commitSha.substring(0, 7)}` : ''}
66
-
67
- Please review the changes and re-run the CI checks.
68
-
69
- _— ${appName}_`;
70
- }
71
- else {
72
- body = `⚠️ **CI Fix Unsuccessful**
73
-
74
- ${summary}
75
-
76
- Manual intervention may be required. Please check the failure details and fix the issue manually.
77
-
78
- _— ${appName}_`;
79
- }
80
- try {
81
- await nangoService.addGithubIssueComment(repository.nangoConnectionId, owner, repo, prNumber, body);
82
- console.log(`[ci-spawner] Posted completion comment for PR #${prNumber}`);
83
- }
84
- catch (error) {
85
- console.error(`[ci-spawner] Failed to post completion comment:`, error);
86
- }
87
- }
88
- /**
89
- * Find a linked daemon that can handle this repository
90
- */
91
- async function findAvailableDaemon(repository) {
92
- if (!repository.userId) {
93
- console.warn(`[ci-spawner] Repository ${repository.githubFullName} has no userId`);
94
- return null;
95
- }
96
- const daemons = await db.linkedDaemons.findByUserId(repository.userId);
97
- const onlineDaemon = daemons.find(d => d.status === 'online');
98
- if (!onlineDaemon) {
99
- console.warn(`[ci-spawner] No online daemon found for user ${repository.userId}`);
100
- return null;
101
- }
102
- return { id: onlineDaemon.id, userId: repository.userId };
103
- }
104
- /**
105
- * Queue a spawn command for a linked daemon
106
- */
107
- async function queueSpawnCommand(daemonId, agentName, prompt, metadata) {
108
- const command = {
109
- type: 'spawn_agent',
110
- agentName,
111
- cli: 'claude',
112
- task: prompt,
113
- metadata,
114
- timestamp: new Date().toISOString(),
115
- };
116
- await db.linkedDaemons.queueMessage(daemonId, {
117
- from: { daemonId: 'cloud', daemonName: 'Agent Relay Cloud', agent: 'system' },
118
- to: '__spawner__',
119
- content: JSON.stringify(command),
120
- metadata: { type: 'spawn_command' },
121
- timestamp: new Date().toISOString(),
122
- });
123
- console.log(`[ci-spawner] Queued spawn command for daemon ${daemonId}`);
124
- }
125
- /**
126
- * Spawn an agent to fix CI failures
127
- *
128
- * This function:
129
- * 1. Finds the workspace for the repository
130
- * 2. Posts acknowledgment comment
131
- * 3. Creates a fix attempt record
132
- * 4. Queues spawn command for a linked daemon
133
- *
134
- * @param failureEvent - The CI failure event from the database
135
- */
136
- export async function spawnCIFixAgent(failureEvent) {
137
- console.log(`[ci-spawner] Spawning agent for failure: ${failureEvent.id}`);
138
- console.log(`[ci-spawner] Repository: ${failureEvent.repository}`);
139
- console.log(`[ci-spawner] Check: ${failureEvent.checkName}`);
140
- console.log(`[ci-spawner] PR: #${failureEvent.prNumber}`);
141
- // Only handle failures on PRs
142
- if (failureEvent.prNumber === null) {
143
- console.log(`[ci-spawner] Failure not on a PR, skipping`);
144
- return;
145
- }
146
- const prNumber = failureEvent.prNumber;
147
- // Find the repository
148
- const repository = await db.repositories.findByFullName(failureEvent.repository);
149
- if (!repository) {
150
- console.error(`[ci-spawner] Repository not found: ${failureEvent.repository}`);
151
- return;
152
- }
153
- // Generate agent name and ID
154
- const agentName = `ci-fix-${failureEvent.checkName.replace(/[^a-zA-Z0-9-]/g, '-')}-${prNumber}`;
155
- const agentId = `ci-${failureEvent.id}`;
156
- // Create fix attempt record
157
- const fixAttempt = await db.ciFixAttempts.create({
158
- failureEventId: failureEvent.id,
159
- agentId,
160
- agentName,
161
- status: 'pending',
162
- });
163
- console.log(`[ci-spawner] Created fix attempt: ${fixAttempt.id}`);
164
- try {
165
- // Step 1: Post acknowledgment comment
166
- await postCIAcknowledgmentComment(repository, prNumber, failureEvent.checkName, failureEvent.failureTitle);
167
- // Step 2: Find a linked daemon
168
- const daemon = await findAvailableDaemon(repository);
169
- if (!daemon) {
170
- console.warn(`[ci-spawner] No available daemon for ${failureEvent.repository}`);
171
- // Post a comment explaining the situation
172
- if (repository.nangoConnectionId) {
173
- const [owner, repo] = repository.githubFullName.split('/');
174
- try {
175
- await nangoService.addGithubIssueComment(repository.nangoConnectionId, owner, repo, prNumber, `⚠️ I couldn't spawn an agent to fix this CI failure because no Agent Relay daemon is available.
176
-
177
- Please ensure you have a linked daemon running by executing \`agent-relay cloud link\` on your development machine.
178
-
179
- You can also fix this issue manually by reviewing the failure output above.
180
-
181
- _— ${getAppName()}_`);
182
- }
183
- catch (error) {
184
- console.error(`[ci-spawner] Failed to post error comment:`, error);
185
- }
186
- }
187
- await db.ciFixAttempts.complete(fixAttempt.id, 'failed', undefined, 'No available daemon to spawn agent');
188
- return;
189
- }
190
- // Step 3: Build the agent prompt
191
- const prompt = buildAgentPrompt(failureEvent, repository);
192
- // Step 4: Update status to in_progress
193
- await db.ciFixAttempts.updateStatus(fixAttempt.id, 'in_progress');
194
- // Step 5: Queue spawn command for the daemon
195
- await queueSpawnCommand(daemon.id, agentName, prompt, {
196
- failureEventId: failureEvent.id,
197
- fixAttemptId: fixAttempt.id,
198
- repository: failureEvent.repository,
199
- prNumber,
200
- checkName: failureEvent.checkName,
201
- });
202
- console.log(`[ci-spawner] Successfully queued CI fix agent for ${failureEvent.repository}#${prNumber}`);
203
- }
204
- catch (error) {
205
- console.error(`[ci-spawner] Failed to spawn agent:`, error);
206
- await db.ciFixAttempts.complete(fixAttempt.id, 'failed', undefined, error instanceof Error ? error.message : 'Unknown error');
207
- throw error;
208
- }
209
- }
210
- /**
211
- * Build the prompt for the CI fix agent
212
- */
213
- function buildAgentPrompt(failureEvent, _repository) {
214
- const annotations = failureEvent.annotations;
215
- const annotationsList = annotations && annotations.length > 0
216
- ? annotations
217
- .slice(0, 20) // Limit to first 20 annotations
218
- .map(a => `- ${a.path}:${a.startLine} - ${a.message}`)
219
- .join('\n')
220
- : null;
221
- const responseInstructions = `
222
- ## Response Instructions
223
-
224
- When you complete your work:
225
- 1. Commit and push your changes
226
- 2. Post a comment on the PR summarizing what you fixed
227
-
228
- Use the GitHub CLI (\`gh\`) to post your response:
229
- \`\`\`bash
230
- gh pr comment ${failureEvent.prNumber} --repo ${failureEvent.repository} --body "## CI Fix Applied
231
-
232
- Summary of changes...
233
-
234
- **Files modified:**
235
- - file1.ts
236
- - file2.ts
237
-
238
- Please re-run the CI checks to verify the fix."
239
- \`\`\`
240
- `;
241
- return `
242
- # CI Failure Fix Task
243
-
244
- A CI check has failed on PR #${failureEvent.prNumber} in ${failureEvent.repository}.
245
-
246
- ## Failure Details
247
-
248
- **Check Name:** ${failureEvent.checkName}
249
- **Branch:** ${failureEvent.branch || 'unknown'}
250
- **Commit:** ${failureEvent.commitSha || 'unknown'}
251
-
252
- ${failureEvent.failureTitle ? `**Title:** ${failureEvent.failureTitle}` : ''}
253
-
254
- ${failureEvent.failureSummary ? `**Summary:**\n${failureEvent.failureSummary}` : ''}
255
-
256
- ${failureEvent.failureDetails ? `**Details:**\n${failureEvent.failureDetails}` : ''}
257
-
258
- ${annotationsList ? `## Annotations\n\n${annotationsList}` : ''}
259
-
260
- ## Your Task
261
-
262
- 1. Checkout the branch: \`${failureEvent.branch || 'unknown'}\`
263
- 2. Analyze the failure based on the annotations and error messages
264
- 3. Fix the issues in the affected files
265
- 4. Run the relevant checks locally to verify the fix
266
- 5. Commit and push your changes with a clear commit message
267
- 6. Report back with a summary of what was fixed
268
-
269
- ${responseInstructions}
270
-
271
- ## Important
272
-
273
- - Only fix the specific issues causing the CI failure
274
- - Do not refactor or improve unrelated code
275
- - If you cannot fix the issue, explain why and what manual intervention is needed
276
- - Keep your commit message descriptive and reference the CI check name
277
- `.trim();
278
- }
279
- /**
280
- * Notify an existing agent about a CI failure
281
- *
282
- * Used when an agent is already working on a PR and a new failure occurs.
283
- *
284
- * @param agentId - The ID of the existing agent
285
- * @param failureEvent - The new CI failure event
286
- */
287
- export async function notifyAgentOfCIFailure(agentId, failureEvent) {
288
- console.log(`[ci-spawner] Notifying agent ${agentId} of new failure`);
289
- // Find the repository
290
- const repository = await db.repositories.findByFullName(failureEvent.repository);
291
- if (!repository || !repository.userId) {
292
- console.warn(`[ci-spawner] Repository not found or has no userId: ${failureEvent.repository}`);
293
- return;
294
- }
295
- // Find the daemon that should have this agent
296
- const daemons = await db.linkedDaemons.findByUserId(repository.userId);
297
- const onlineDaemon = daemons.find(d => d.status === 'online');
298
- if (!onlineDaemon) {
299
- console.warn(`[ci-spawner] No online daemon to notify agent ${agentId}`);
300
- return;
301
- }
302
- // Build notification message
303
- const annotations = failureEvent.annotations;
304
- const annotationsList = annotations && annotations.length > 0
305
- ? annotations
306
- .slice(0, 10)
307
- .map(a => ` - ${a.path}:${a.startLine}: ${a.message}`)
308
- .join('\n')
309
- : null;
310
- const message = `
311
- CI FAILURE: ${failureEvent.checkName}
312
-
313
- ${failureEvent.failureTitle || 'Check failed'}
314
-
315
- ${failureEvent.failureSummary || ''}
316
-
317
- ${annotationsList ? `Issues:\n${annotationsList}` : ''}
318
-
319
- Please investigate and fix these issues, then push your changes.
320
- `.trim();
321
- // Queue message for the agent via daemon
322
- await db.linkedDaemons.queueMessage(onlineDaemon.id, {
323
- from: { daemonId: 'cloud', daemonName: 'Agent Relay Cloud', agent: 'system' },
324
- to: agentId,
325
- content: message,
326
- metadata: { type: 'ci_failure_notification', failureEventId: failureEvent.id },
327
- timestamp: new Date().toISOString(),
328
- });
329
- console.log(`[ci-spawner] Queued CI failure notification for agent ${agentId}`);
330
- }
331
- /**
332
- * Mark a fix attempt as complete
333
- *
334
- * Called when an agent reports completion (success or failure)
335
- */
336
- export async function completeFixAttempt(fixAttemptId, success, commitSha, errorMessage) {
337
- console.log(`[ci-spawner] Completing fix attempt ${fixAttemptId}: ${success ? 'success' : 'failed'}`);
338
- // Update the fix attempt record
339
- await db.ciFixAttempts.complete(fixAttemptId, success ? 'success' : 'failed', commitSha, errorMessage);
340
- // Get the fix attempt to find the failure event
341
- const fixAttempt = await db.ciFixAttempts.findById(fixAttemptId);
342
- if (!fixAttempt) {
343
- console.warn(`[ci-spawner] Fix attempt not found: ${fixAttemptId}`);
344
- return;
345
- }
346
- // Get the failure event to find the repository and PR
347
- const failureEvent = await db.ciFailureEvents.findById(fixAttempt.failureEventId);
348
- if (!failureEvent) {
349
- console.warn(`[ci-spawner] Failure event not found: ${fixAttempt.failureEventId}`);
350
- return;
351
- }
352
- // Find the repository to post completion comment
353
- const repository = await db.repositories.findByFullName(failureEvent.repository);
354
- if (repository && failureEvent.prNumber !== null) {
355
- const summary = success
356
- ? `The @ci-fix agent has fixed the \`${failureEvent.checkName}\` check failure.`
357
- : errorMessage || 'The @ci-fix agent was unable to fix the issue.';
358
- await postCompletionComment(repository, failureEvent.prNumber, success, summary, commitSha);
359
- }
360
- }
361
- /**
362
- * Get failure history for a repository
363
- */
364
- export async function getFailureHistory(repository, limit = 50) {
365
- return db.ciFailureEvents.findByRepository(repository, limit);
366
- }
367
- /**
368
- * Get failure history for a specific PR
369
- */
370
- export async function getPRFailureHistory(repository, prNumber) {
371
- return db.ciFailureEvents.findByPR(repository, prNumber);
372
- }
373
- //# sourceMappingURL=ci-agent-spawner.js.map
@@ -1,28 +0,0 @@
1
- /**
2
- * Cloud Message Bus - Event-based message delivery for cloud users.
3
- *
4
- * This module provides a simple pub/sub mechanism for delivering messages
5
- * to users connected via the cloud dashboard. The daemons API publishes
6
- * messages here, and the presence WebSocket handler subscribes to deliver them.
7
- */
8
- import { EventEmitter } from 'events';
9
- export interface CloudMessage {
10
- from: {
11
- daemonId: string;
12
- daemonName: string;
13
- agent: string;
14
- };
15
- to: string;
16
- body: string;
17
- timestamp: string;
18
- metadata?: Record<string, unknown>;
19
- }
20
- declare class CloudMessageBus extends EventEmitter {
21
- /**
22
- * Send a message to a cloud user
23
- */
24
- sendToUser(username: string, message: CloudMessage): void;
25
- }
26
- export declare const cloudMessageBus: CloudMessageBus;
27
- export {};
28
- //# sourceMappingURL=cloud-message-bus.d.ts.map
@@ -1,19 +0,0 @@
1
- /**
2
- * Cloud Message Bus - Event-based message delivery for cloud users.
3
- *
4
- * This module provides a simple pub/sub mechanism for delivering messages
5
- * to users connected via the cloud dashboard. The daemons API publishes
6
- * messages here, and the presence WebSocket handler subscribes to deliver them.
7
- */
8
- import { EventEmitter } from 'events';
9
- class CloudMessageBus extends EventEmitter {
10
- /**
11
- * Send a message to a cloud user
12
- */
13
- sendToUser(username, message) {
14
- this.emit('user-message', { username, message });
15
- }
16
- }
17
- // Singleton instance
18
- export const cloudMessageBus = new CloudMessageBus();
19
- //# sourceMappingURL=cloud-message-bus.js.map
@@ -1,57 +0,0 @@
1
- /**
2
- * Compute Enforcement Service
3
- *
4
- * Enforces compute hour limits for free tier users.
5
- * Runs periodically to check usage and stop workspaces that have exceeded limits.
6
- */
7
- import { PlanType } from '../db/index.js';
8
- export interface ComputeEnforcementConfig {
9
- enabled: boolean;
10
- checkIntervalMs: number;
11
- warningThresholdPercent: number;
12
- }
13
- export interface EnforcementResult {
14
- userId: string;
15
- plan: PlanType;
16
- computeHoursUsed: number;
17
- computeHoursLimit: number;
18
- action: 'none' | 'warning' | 'stopped';
19
- workspacesStopped: string[];
20
- }
21
- export declare class ComputeEnforcementService {
22
- private config;
23
- private checkTimer;
24
- private isRunning;
25
- constructor(config?: Partial<ComputeEnforcementConfig>);
26
- /**
27
- * Start the enforcement service
28
- */
29
- start(): void;
30
- /**
31
- * Stop the enforcement service
32
- */
33
- stop(): void;
34
- /**
35
- * Run enforcement check for all free tier users
36
- */
37
- runEnforcement(): Promise<EnforcementResult[]>;
38
- /**
39
- * Enforce limits for a specific user
40
- */
41
- enforceUserLimits(userId: string): Promise<EnforcementResult>;
42
- /**
43
- * Manually trigger enforcement for a specific user
44
- */
45
- enforceUser(userId: string): Promise<EnforcementResult>;
46
- /**
47
- * Get service status
48
- */
49
- getStatus(): {
50
- enabled: boolean;
51
- isRunning: boolean;
52
- checkIntervalMs: number;
53
- };
54
- }
55
- export declare function getComputeEnforcementService(): ComputeEnforcementService;
56
- export declare function createComputeEnforcementService(config?: Partial<ComputeEnforcementConfig>): ComputeEnforcementService;
57
- //# sourceMappingURL=compute-enforcement.d.ts.map
@@ -1,175 +0,0 @@
1
- /**
2
- * Compute Enforcement Service
3
- *
4
- * Enforces compute hour limits for free tier users.
5
- * Runs periodically to check usage and stop workspaces that have exceeded limits.
6
- */
7
- import { db } from '../db/index.js';
8
- import { getProvisioner } from '../provisioner/index.js';
9
- import { getUserUsage, PLAN_LIMITS } from './planLimits.js';
10
- const DEFAULT_CONFIG = {
11
- enabled: true,
12
- checkIntervalMs: 15 * 60 * 1000, // 15 minutes
13
- warningThresholdPercent: 80,
14
- };
15
- export class ComputeEnforcementService {
16
- config;
17
- checkTimer = null;
18
- isRunning = false;
19
- constructor(config = {}) {
20
- this.config = { ...DEFAULT_CONFIG, ...config };
21
- }
22
- /**
23
- * Start the enforcement service
24
- */
25
- start() {
26
- if (!this.config.enabled) {
27
- console.log('[compute-enforcement] Service disabled');
28
- return;
29
- }
30
- if (this.isRunning) {
31
- console.warn('[compute-enforcement] Service already running');
32
- return;
33
- }
34
- this.isRunning = true;
35
- console.log(`[compute-enforcement] Started (checking every ${this.config.checkIntervalMs / 1000}s)`);
36
- // Run immediately on start
37
- this.runEnforcement().catch((err) => {
38
- console.error('[compute-enforcement] Initial run failed:', err);
39
- });
40
- // Then run periodically
41
- this.checkTimer = setInterval(() => {
42
- this.runEnforcement().catch((err) => {
43
- console.error('[compute-enforcement] Periodic run failed:', err);
44
- });
45
- }, this.config.checkIntervalMs);
46
- }
47
- /**
48
- * Stop the enforcement service
49
- */
50
- stop() {
51
- if (this.checkTimer) {
52
- clearInterval(this.checkTimer);
53
- this.checkTimer = null;
54
- }
55
- this.isRunning = false;
56
- console.log('[compute-enforcement] Stopped');
57
- }
58
- /**
59
- * Run enforcement check for all free tier users
60
- */
61
- async runEnforcement() {
62
- const results = [];
63
- try {
64
- // Get all users on free tier
65
- const freeUsers = await db.users.findByPlan('free');
66
- console.log(`[compute-enforcement] Checking ${freeUsers.length} free tier users`);
67
- for (const user of freeUsers) {
68
- try {
69
- const result = await this.enforceUserLimits(user.id);
70
- results.push(result);
71
- if (result.action !== 'none') {
72
- console.log(`[compute-enforcement] User ${user.id.substring(0, 8)}: ${result.action} ` +
73
- `(${result.computeHoursUsed.toFixed(2)}/${result.computeHoursLimit}h)`);
74
- }
75
- }
76
- catch (err) {
77
- console.error(`[compute-enforcement] Error for user ${user.id}:`, err);
78
- }
79
- }
80
- const stopped = results.filter((r) => r.action === 'stopped').length;
81
- const warned = results.filter((r) => r.action === 'warning').length;
82
- if (stopped > 0 || warned > 0) {
83
- console.log(`[compute-enforcement] Summary: ${stopped} stopped, ${warned} warned, ` +
84
- `${results.length - stopped - warned} ok`);
85
- }
86
- }
87
- catch (err) {
88
- console.error('[compute-enforcement] Failed to run enforcement:', err);
89
- }
90
- return results;
91
- }
92
- /**
93
- * Enforce limits for a specific user
94
- */
95
- async enforceUserLimits(userId) {
96
- const user = await db.users.findById(userId);
97
- const plan = user?.plan || 'free';
98
- const limits = PLAN_LIMITS[plan];
99
- const usage = await getUserUsage(userId);
100
- const result = {
101
- userId,
102
- plan,
103
- computeHoursUsed: usage.computeHoursThisMonth,
104
- computeHoursLimit: limits.maxComputeHoursPerMonth,
105
- action: 'none',
106
- workspacesStopped: [],
107
- };
108
- // Skip if user has unlimited compute (paid plans may have high limits)
109
- if (limits.maxComputeHoursPerMonth === Infinity) {
110
- return result;
111
- }
112
- // Check if user has exceeded limit
113
- if (usage.computeHoursThisMonth >= limits.maxComputeHoursPerMonth) {
114
- // Stop all running workspaces
115
- const workspaces = await db.workspaces.findByUserId(userId);
116
- const runningWorkspaces = workspaces.filter((w) => w.status === 'running');
117
- if (runningWorkspaces.length > 0) {
118
- const provisioner = getProvisioner();
119
- for (const workspace of runningWorkspaces) {
120
- try {
121
- await provisioner.stop(workspace.id);
122
- result.workspacesStopped.push(workspace.id);
123
- console.log(`[compute-enforcement] Stopped workspace ${workspace.id.substring(0, 8)} ` +
124
- `for user ${userId.substring(0, 8)} (limit exceeded)`);
125
- }
126
- catch (err) {
127
- console.error(`[compute-enforcement] Failed to stop workspace ${workspace.id}:`, err);
128
- }
129
- }
130
- result.action = 'stopped';
131
- // TODO: Send notification email to user
132
- // await sendLimitReachedEmail(userId, usage.computeHoursThisMonth, limits.maxComputeHoursPerMonth);
133
- }
134
- }
135
- else {
136
- // Check if approaching limit (warning)
137
- const usagePercent = (usage.computeHoursThisMonth / limits.maxComputeHoursPerMonth) * 100;
138
- if (usagePercent >= this.config.warningThresholdPercent) {
139
- result.action = 'warning';
140
- // TODO: Send warning email to user (once per day)
141
- // await sendLimitWarningEmail(userId, usage.computeHoursThisMonth, limits.maxComputeHoursPerMonth);
142
- }
143
- }
144
- return result;
145
- }
146
- /**
147
- * Manually trigger enforcement for a specific user
148
- */
149
- async enforceUser(userId) {
150
- return this.enforceUserLimits(userId);
151
- }
152
- /**
153
- * Get service status
154
- */
155
- getStatus() {
156
- return {
157
- enabled: this.config.enabled,
158
- isRunning: this.isRunning,
159
- checkIntervalMs: this.config.checkIntervalMs,
160
- };
161
- }
162
- }
163
- // Singleton instance
164
- let _computeEnforcement = null;
165
- export function getComputeEnforcementService() {
166
- if (!_computeEnforcement) {
167
- _computeEnforcement = new ComputeEnforcementService();
168
- }
169
- return _computeEnforcement;
170
- }
171
- export function createComputeEnforcementService(config = {}) {
172
- _computeEnforcement = new ComputeEnforcementService(config);
173
- return _computeEnforcement;
174
- }
175
- //# sourceMappingURL=compute-enforcement.js.map