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,656 +0,0 @@
1
- /**
2
- * Agent Relay Cloud - Drizzle Schema
3
- *
4
- * Type-safe database schema with PostgreSQL support.
5
- * Generate migrations: npm run db:generate
6
- * Run migrations: npm run db:migrate
7
- */
8
- import { pgTable, uuid, varchar, text, timestamp, boolean, bigint, jsonb, unique, index, } from 'drizzle-orm/pg-core';
9
- import { relations } from 'drizzle-orm';
10
- // ============================================================================
11
- // Users
12
- // ============================================================================
13
- export const users = pgTable('users', {
14
- id: uuid('id').primaryKey().defaultRandom(),
15
- // GitHub OAuth fields (nullable for email-only users)
16
- githubId: varchar('github_id', { length: 255 }).unique(),
17
- githubUsername: varchar('github_username', { length: 255 }),
18
- // Email authentication fields
19
- email: varchar('email', { length: 255 }).unique(),
20
- passwordHash: varchar('password_hash', { length: 255 }), // For email login
21
- emailVerified: boolean('email_verified').notNull().default(false),
22
- emailVerificationToken: varchar('email_verification_token', { length: 255 }),
23
- emailVerificationExpires: timestamp('email_verification_expires'),
24
- // Profile
25
- displayName: varchar('display_name', { length: 255 }), // User-provided name for email users
26
- avatarUrl: varchar('avatar_url', { length: 512 }),
27
- plan: varchar('plan', { length: 50 }).notNull().default('free'),
28
- // Stripe billing
29
- stripeCustomerId: varchar('stripe_customer_id', { length: 255 }),
30
- // Nango OAuth connections
31
- nangoConnectionId: varchar('nango_connection_id', { length: 255 }), // Permanent login connection
32
- incomingConnectionId: varchar('incoming_connection_id', { length: 255 }), // Temp polling connection
33
- pendingInstallationRequest: timestamp('pending_installation_request'), // Org approval wait
34
- onboardingCompletedAt: timestamp('onboarding_completed_at'),
35
- createdAt: timestamp('created_at').defaultNow().notNull(),
36
- updatedAt: timestamp('updated_at').defaultNow().notNull(),
37
- }, (table) => ({
38
- nangoConnectionIdx: index('idx_users_nango_connection').on(table.nangoConnectionId),
39
- incomingConnectionIdx: index('idx_users_incoming_connection').on(table.incomingConnectionId),
40
- emailIdx: index('idx_users_email').on(table.email),
41
- }));
42
- export const usersRelations = relations(users, ({ many }) => ({
43
- credentials: many(credentials),
44
- workspaces: many(workspaces),
45
- projectGroups: many(projectGroups),
46
- repositories: many(repositories),
47
- linkedDaemons: many(linkedDaemons),
48
- installedGitHubApps: many(githubInstallations),
49
- emails: many(userEmails),
50
- }));
51
- // ============================================================================
52
- // User Emails (GitHub-linked email addresses for account reconciliation)
53
- // ============================================================================
54
- export const userEmails = pgTable('user_emails', {
55
- id: uuid('id').primaryKey().defaultRandom(),
56
- userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
57
- email: varchar('email', { length: 255 }).notNull(),
58
- /** Whether this email is verified on GitHub */
59
- verified: boolean('verified').notNull().default(false),
60
- /** Whether this is the primary email on GitHub */
61
- primary: boolean('primary').notNull().default(false),
62
- /** Source of this email: 'github', 'manual', etc. */
63
- source: varchar('source', { length: 50 }).notNull().default('github'),
64
- createdAt: timestamp('created_at').defaultNow().notNull(),
65
- updatedAt: timestamp('updated_at').defaultNow().notNull(),
66
- }, (table) => ({
67
- userEmailIdx: unique('user_emails_user_email_unique').on(table.userId, table.email),
68
- emailIdx: index('idx_user_emails_email').on(table.email),
69
- userIdIdx: index('idx_user_emails_user_id').on(table.userId),
70
- }));
71
- export const userEmailsRelations = relations(userEmails, ({ one }) => ({
72
- user: one(users, {
73
- fields: [userEmails.userId],
74
- references: [users.id],
75
- }),
76
- }));
77
- // ============================================================================
78
- // GitHub App Installations
79
- // ============================================================================
80
- export const githubInstallations = pgTable('github_installations', {
81
- id: uuid('id').primaryKey().defaultRandom(),
82
- installationId: varchar('installation_id', { length: 255 }).unique().notNull(),
83
- accountType: varchar('account_type', { length: 50 }).notNull(), // 'user' | 'organization'
84
- accountLogin: varchar('account_login', { length: 255 }).notNull(),
85
- accountId: varchar('account_id', { length: 255 }).notNull(),
86
- installedById: uuid('installed_by_id').references(() => users.id, { onDelete: 'set null' }),
87
- // Permissions granted to the installation
88
- permissions: jsonb('permissions').$type().default({}),
89
- // Events the installation is subscribed to
90
- events: text('events').array(),
91
- // Installation state
92
- suspended: boolean('suspended').notNull().default(false),
93
- suspendedAt: timestamp('suspended_at'),
94
- suspendedBy: varchar('suspended_by', { length: 255 }),
95
- createdAt: timestamp('created_at').defaultNow().notNull(),
96
- updatedAt: timestamp('updated_at').defaultNow().notNull(),
97
- }, (table) => ({
98
- accountLoginIdx: index('idx_github_installations_account_login').on(table.accountLogin),
99
- installedByIdx: index('idx_github_installations_installed_by').on(table.installedById),
100
- }));
101
- export const githubInstallationsRelations = relations(githubInstallations, ({ one, many }) => ({
102
- installedBy: one(users, {
103
- fields: [githubInstallations.installedById],
104
- references: [users.id],
105
- }),
106
- repositories: many(repositories),
107
- }));
108
- // ============================================================================
109
- // Credentials (connected provider registry - no token storage)
110
- // Note: Tokens are not stored centrally. CLI tools authenticate directly
111
- // on workspace instances. This table tracks which providers a user has connected.
112
- // ============================================================================
113
- export const credentials = pgTable('credentials', {
114
- id: uuid('id').primaryKey().defaultRandom(),
115
- userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
116
- // Workspace-specific credentials - tokens are stored on the workspace daemon
117
- // Note: workspaceId uses a raw SQL reference to avoid circular dependency with workspaces table
118
- workspaceId: uuid('workspace_id').references(() => workspaces.id, { onDelete: 'cascade' }),
119
- provider: varchar('provider', { length: 50 }).notNull(),
120
- scopes: text('scopes').array(),
121
- providerAccountId: varchar('provider_account_id', { length: 255 }),
122
- providerAccountEmail: varchar('provider_account_email', { length: 255 }),
123
- createdAt: timestamp('created_at').defaultNow().notNull(),
124
- updatedAt: timestamp('updated_at').defaultNow().notNull(),
125
- }, (table) => ({
126
- // Unique constraint: one credential per provider per workspace per user
127
- userProviderWorkspaceIdx: unique('credentials_user_provider_workspace_unique').on(table.userId, table.provider, table.workspaceId),
128
- userIdIdx: index('idx_credentials_user_id').on(table.userId),
129
- workspaceIdIdx: index('idx_credentials_workspace_id').on(table.workspaceId),
130
- }));
131
- export const credentialsRelations = relations(credentials, ({ one }) => ({
132
- user: one(users, {
133
- fields: [credentials.userId],
134
- references: [users.id],
135
- }),
136
- workspace: one(workspaces, {
137
- fields: [credentials.workspaceId],
138
- references: [workspaces.id],
139
- }),
140
- }));
141
- export const workspaces = pgTable('workspaces', {
142
- id: uuid('id').primaryKey().defaultRandom(),
143
- userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
144
- name: varchar('name', { length: 255 }).notNull(),
145
- status: varchar('status', { length: 50 }).notNull().default('provisioning'),
146
- computeProvider: varchar('compute_provider', { length: 50 }).notNull(),
147
- computeId: varchar('compute_id', { length: 255 }),
148
- publicUrl: varchar('public_url', { length: 255 }),
149
- customDomain: varchar('custom_domain', { length: 255 }),
150
- customDomainStatus: varchar('custom_domain_status', { length: 50 }),
151
- config: jsonb('config').$type().notNull().default({}),
152
- errorMessage: text('error_message'),
153
- createdAt: timestamp('created_at').defaultNow().notNull(),
154
- updatedAt: timestamp('updated_at').defaultNow().notNull(),
155
- }, (table) => ({
156
- userIdIdx: index('idx_workspaces_user_id').on(table.userId),
157
- customDomainIdx: index('idx_workspaces_custom_domain').on(table.customDomain),
158
- }));
159
- export const workspacesRelations = relations(workspaces, ({ one, many }) => ({
160
- user: one(users, {
161
- fields: [workspaces.userId],
162
- references: [users.id],
163
- }),
164
- members: many(workspaceMembers),
165
- repositories: many(repositories),
166
- credentials: many(credentials),
167
- }));
168
- // ============================================================================
169
- // Workspace Members
170
- // ============================================================================
171
- export const workspaceMembers = pgTable('workspace_members', {
172
- id: uuid('id').primaryKey().defaultRandom(),
173
- workspaceId: uuid('workspace_id').notNull().references(() => workspaces.id, { onDelete: 'cascade' }),
174
- userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
175
- role: varchar('role', { length: 50 }).notNull().default('member'),
176
- invitedBy: uuid('invited_by').references(() => users.id),
177
- invitedAt: timestamp('invited_at').defaultNow(),
178
- acceptedAt: timestamp('accepted_at'),
179
- }, (table) => ({
180
- workspaceUserIdx: unique('workspace_members_workspace_user_unique').on(table.workspaceId, table.userId),
181
- workspaceIdIdx: index('idx_workspace_members_workspace_id').on(table.workspaceId),
182
- userIdIdx: index('idx_workspace_members_user_id').on(table.userId),
183
- }));
184
- export const workspaceMembersRelations = relations(workspaceMembers, ({ one }) => ({
185
- workspace: one(workspaces, {
186
- fields: [workspaceMembers.workspaceId],
187
- references: [workspaces.id],
188
- }),
189
- user: one(users, {
190
- fields: [workspaceMembers.userId],
191
- references: [users.id],
192
- }),
193
- inviter: one(users, {
194
- fields: [workspaceMembers.invitedBy],
195
- references: [users.id],
196
- }),
197
- }));
198
- // ============================================================================
199
- // Project Groups (grouping of related repositories)
200
- // ============================================================================
201
- export const projectGroups = pgTable('project_groups', {
202
- id: uuid('id').primaryKey().defaultRandom(),
203
- userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
204
- name: varchar('name', { length: 255 }).notNull(),
205
- description: text('description'),
206
- color: varchar('color', { length: 7 }), // Hex color for UI (e.g., "#3B82F6")
207
- icon: varchar('icon', { length: 50 }), // Icon name for UI
208
- // Coordinator agent configuration - this agent oversees all repos in the group
209
- coordinatorAgent: jsonb('coordinator_agent').$type().default({ enabled: false }),
210
- // Display order for user's groups
211
- sortOrder: bigint('sort_order', { mode: 'number' }).notNull().default(0),
212
- createdAt: timestamp('created_at').defaultNow().notNull(),
213
- updatedAt: timestamp('updated_at').defaultNow().notNull(),
214
- }, (table) => ({
215
- userIdIdx: index('idx_project_groups_user_id').on(table.userId),
216
- userNameIdx: unique('project_groups_user_name_unique').on(table.userId, table.name),
217
- }));
218
- export const projectGroupsRelations = relations(projectGroups, ({ one, many }) => ({
219
- user: one(users, {
220
- fields: [projectGroups.userId],
221
- references: [users.id],
222
- }),
223
- repositories: many(repositories),
224
- }));
225
- // ============================================================================
226
- // Repositories
227
- // ============================================================================
228
- export const repositories = pgTable('repositories', {
229
- id: uuid('id').primaryKey().defaultRandom(),
230
- userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
231
- workspaceId: uuid('workspace_id').references(() => workspaces.id, { onDelete: 'set null' }),
232
- projectGroupId: uuid('project_group_id').references(() => projectGroups.id, { onDelete: 'set null' }),
233
- // GitHub App installation that provides access to this repo
234
- installationId: uuid('installation_id').references(() => githubInstallations.id, { onDelete: 'set null' }),
235
- nangoConnectionId: varchar('nango_connection_id', { length: 255 }),
236
- githubFullName: varchar('github_full_name', { length: 255 }).notNull(),
237
- githubId: bigint('github_id', { mode: 'number' }).notNull(),
238
- defaultBranch: varchar('default_branch', { length: 255 }).notNull().default('main'),
239
- isPrivate: boolean('is_private').notNull().default(false),
240
- syncStatus: varchar('sync_status', { length: 50 }).notNull().default('pending'),
241
- lastSyncedAt: timestamp('last_synced_at'),
242
- // Project-level agent configuration (optional)
243
- projectAgent: jsonb('project_agent').$type().default({ enabled: false }),
244
- createdAt: timestamp('created_at').defaultNow().notNull(),
245
- updatedAt: timestamp('updated_at').defaultNow().notNull(),
246
- }, (table) => ({
247
- userGithubIdx: unique('repositories_user_github_unique').on(table.userId, table.githubFullName),
248
- userIdIdx: index('idx_repositories_user_id').on(table.userId),
249
- workspaceIdIdx: index('idx_repositories_workspace_id').on(table.workspaceId),
250
- projectGroupIdIdx: index('idx_repositories_project_group_id').on(table.projectGroupId),
251
- installationIdIdx: index('idx_repositories_installation_id').on(table.installationId),
252
- nangoConnectionIdx: index('idx_repositories_nango_connection').on(table.nangoConnectionId),
253
- }));
254
- export const repositoriesRelations = relations(repositories, ({ one }) => ({
255
- user: one(users, {
256
- fields: [repositories.userId],
257
- references: [users.id],
258
- }),
259
- workspace: one(workspaces, {
260
- fields: [repositories.workspaceId],
261
- references: [workspaces.id],
262
- }),
263
- projectGroup: one(projectGroups, {
264
- fields: [repositories.projectGroupId],
265
- references: [projectGroups.id],
266
- }),
267
- installation: one(githubInstallations, {
268
- fields: [repositories.installationId],
269
- references: [githubInstallations.id],
270
- }),
271
- }));
272
- // ============================================================================
273
- // Linked Daemons (local agent-relay instances)
274
- // ============================================================================
275
- export const linkedDaemons = pgTable('linked_daemons', {
276
- id: uuid('id').primaryKey().defaultRandom(),
277
- userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
278
- name: varchar('name', { length: 255 }).notNull(),
279
- machineId: varchar('machine_id', { length: 255 }).notNull(),
280
- apiKeyHash: varchar('api_key_hash', { length: 255 }).notNull(),
281
- status: varchar('status', { length: 50 }).notNull().default('offline'),
282
- lastSeenAt: timestamp('last_seen_at'),
283
- metadata: jsonb('metadata').notNull().default({}),
284
- pendingUpdates: jsonb('pending_updates').notNull().default([]),
285
- messageQueue: jsonb('message_queue').notNull().default([]),
286
- workspaceId: uuid('workspace_id').references(() => workspaces.id, { onDelete: 'set null' }),
287
- createdAt: timestamp('created_at').defaultNow().notNull(),
288
- updatedAt: timestamp('updated_at').defaultNow().notNull(),
289
- }, (table) => ({
290
- userMachineIdx: unique('linked_daemons_user_machine_unique').on(table.userId, table.machineId),
291
- userIdIdx: index('idx_linked_daemons_user_id').on(table.userId),
292
- apiKeyHashIdx: index('idx_linked_daemons_api_key_hash').on(table.apiKeyHash),
293
- statusIdx: index('idx_linked_daemons_status').on(table.status),
294
- workspaceIdIdx: index('idx_linked_daemons_workspace_id').on(table.workspaceId),
295
- }));
296
- export const linkedDaemonsRelations = relations(linkedDaemons, ({ one }) => ({
297
- user: one(users, {
298
- fields: [linkedDaemons.userId],
299
- references: [users.id],
300
- }),
301
- workspace: one(workspaces, {
302
- fields: [linkedDaemons.workspaceId],
303
- references: [workspaces.id],
304
- }),
305
- }));
306
- // ============================================================================
307
- // Subscriptions (billing)
308
- // ============================================================================
309
- export const subscriptions = pgTable('subscriptions', {
310
- id: uuid('id').primaryKey().defaultRandom(),
311
- userId: uuid('user_id').references(() => users.id, { onDelete: 'cascade' }),
312
- stripeSubscriptionId: varchar('stripe_subscription_id', { length: 255 }).unique(),
313
- stripeCustomerId: varchar('stripe_customer_id', { length: 255 }),
314
- plan: varchar('plan', { length: 50 }).notNull(),
315
- status: varchar('status', { length: 50 }).notNull().default('active'),
316
- currentPeriodStart: timestamp('current_period_start'),
317
- currentPeriodEnd: timestamp('current_period_end'),
318
- createdAt: timestamp('created_at').defaultNow().notNull(),
319
- updatedAt: timestamp('updated_at').defaultNow().notNull(),
320
- });
321
- // ============================================================================
322
- // Usage Records
323
- // ============================================================================
324
- export const usageRecords = pgTable('usage_records', {
325
- id: uuid('id').primaryKey().defaultRandom(),
326
- userId: uuid('user_id').references(() => users.id, { onDelete: 'cascade' }),
327
- workspaceId: uuid('workspace_id').references(() => workspaces.id, { onDelete: 'set null' }),
328
- metric: varchar('metric', { length: 100 }).notNull(),
329
- value: bigint('value', { mode: 'number' }).notNull(),
330
- recordedAt: timestamp('recorded_at').defaultNow().notNull(),
331
- }, (table) => ({
332
- userIdIdx: index('idx_usage_records_user_id').on(table.userId),
333
- recordedAtIdx: index('idx_usage_records_recorded_at').on(table.recordedAt),
334
- }));
335
- // ============================================================================
336
- // Channels (workspace-scoped messaging channels)
337
- // ============================================================================
338
- export const channels = pgTable('channels', {
339
- id: uuid('id').primaryKey().defaultRandom(),
340
- workspaceId: uuid('workspace_id').notNull().references(() => workspaces.id, { onDelete: 'cascade' }),
341
- /** Channel identifier (e.g., '#general', '#random', 'dm:user1:user2') */
342
- channelId: varchar('channel_id', { length: 255 }).notNull(),
343
- /** Display name (without # prefix) */
344
- name: varchar('name', { length: 255 }).notNull(),
345
- description: text('description'),
346
- /** Channel type: 'public', 'private', 'dm' */
347
- visibility: varchar('visibility', { length: 50 }).notNull().default('public'),
348
- /** Channel status: 'active', 'archived' */
349
- status: varchar('status', { length: 50 }).notNull().default('active'),
350
- createdBy: varchar('created_by', { length: 255 }),
351
- createdAt: timestamp('created_at').defaultNow().notNull(),
352
- updatedAt: timestamp('updated_at').defaultNow().notNull(),
353
- lastActivityAt: timestamp('last_activity_at'),
354
- }, (table) => ({
355
- workspaceChannelIdx: unique('channels_workspace_channel_unique').on(table.workspaceId, table.channelId),
356
- workspaceIdIdx: index('idx_channels_workspace_id').on(table.workspaceId),
357
- statusIdx: index('idx_channels_status').on(table.status),
358
- }));
359
- export const channelsRelations = relations(channels, ({ one, many }) => ({
360
- workspace: one(workspaces, {
361
- fields: [channels.workspaceId],
362
- references: [workspaces.id],
363
- }),
364
- members: many(channelMembers),
365
- }));
366
- // ============================================================================
367
- // Channel Members (who's in each channel)
368
- // ============================================================================
369
- export const channelMembers = pgTable('channel_members', {
370
- id: uuid('id').primaryKey().defaultRandom(),
371
- channelId: uuid('channel_id').notNull().references(() => channels.id, { onDelete: 'cascade' }),
372
- /** Member identifier (username or agent name) */
373
- memberId: varchar('member_id', { length: 255 }).notNull(),
374
- /** Member type: 'user' or 'agent' */
375
- memberType: varchar('member_type', { length: 50 }).notNull().default('user'),
376
- /** Role in channel: 'owner', 'admin', 'member' */
377
- role: varchar('role', { length: 50 }).notNull().default('member'),
378
- joinedAt: timestamp('joined_at').defaultNow().notNull(),
379
- invitedBy: varchar('invited_by', { length: 255 }),
380
- }, (table) => ({
381
- channelMemberIdx: unique('channel_members_channel_member_unique').on(table.channelId, table.memberId),
382
- channelIdIdx: index('idx_channel_members_channel_id').on(table.channelId),
383
- memberIdIdx: index('idx_channel_members_member_id').on(table.memberId),
384
- }));
385
- export const channelMembersRelations = relations(channelMembers, ({ one }) => ({
386
- channel: one(channels, {
387
- fields: [channelMembers.channelId],
388
- references: [channels.id],
389
- }),
390
- }));
391
- // ============================================================================
392
- // Agent Sessions (cloud persistence for PtyWrapper agents)
393
- // ============================================================================
394
- export const agentSessions = pgTable('agent_sessions', {
395
- id: uuid('id').primaryKey().defaultRandom(),
396
- workspaceId: uuid('workspace_id').notNull().references(() => workspaces.id, { onDelete: 'cascade' }),
397
- agentName: varchar('agent_name', { length: 255 }).notNull(),
398
- status: varchar('status', { length: 50 }).notNull().default('active'),
399
- startedAt: timestamp('started_at').defaultNow().notNull(),
400
- endedAt: timestamp('ended_at'),
401
- endMarker: jsonb('end_marker').$type(),
402
- metadata: jsonb('metadata').notNull().default({}),
403
- }, (table) => ({
404
- workspaceIdIdx: index('idx_agent_sessions_workspace_id').on(table.workspaceId),
405
- agentNameIdx: index('idx_agent_sessions_agent_name').on(table.agentName),
406
- statusIdx: index('idx_agent_sessions_status').on(table.status),
407
- }));
408
- // ============================================================================
409
- // Agent Summaries (cloud persistence for [[SUMMARY]] blocks)
410
- // ============================================================================
411
- export const agentSummaries = pgTable('agent_summaries', {
412
- id: uuid('id').primaryKey().defaultRandom(),
413
- sessionId: uuid('session_id').notNull().references(() => agentSessions.id, { onDelete: 'cascade' }),
414
- agentName: varchar('agent_name', { length: 255 }).notNull(),
415
- summary: jsonb('summary').$type().notNull(),
416
- createdAt: timestamp('created_at').defaultNow().notNull(),
417
- }, (table) => ({
418
- sessionIdIdx: index('idx_agent_summaries_session_id').on(table.sessionId),
419
- agentNameIdx: index('idx_agent_summaries_agent_name').on(table.agentName),
420
- }));
421
- export const agentMetrics = pgTable('agent_metrics', {
422
- id: uuid('id').primaryKey().defaultRandom(),
423
- daemonId: uuid('daemon_id').notNull().references(() => linkedDaemons.id, { onDelete: 'cascade' }),
424
- agentName: varchar('agent_name', { length: 255 }).notNull(),
425
- pid: bigint('pid', { mode: 'number' }),
426
- status: varchar('status', { length: 50 }).notNull().default('unknown'),
427
- // Current memory snapshot
428
- rssBytes: bigint('rss_bytes', { mode: 'number' }),
429
- heapUsedBytes: bigint('heap_used_bytes', { mode: 'number' }),
430
- cpuPercent: bigint('cpu_percent', { mode: 'number' }),
431
- // Trend data
432
- trend: varchar('trend', { length: 20 }),
433
- trendRatePerMinute: bigint('trend_rate_per_minute', { mode: 'number' }),
434
- alertLevel: varchar('alert_level', { length: 20 }).default('normal'),
435
- // Watermarks
436
- highWatermark: bigint('high_watermark', { mode: 'number' }),
437
- averageRss: bigint('average_rss', { mode: 'number' }),
438
- // Full metrics JSON for detailed data
439
- metricsData: jsonb('metrics_data').$type(),
440
- // Timestamps
441
- uptimeMs: bigint('uptime_ms', { mode: 'number' }),
442
- startedAt: timestamp('started_at'),
443
- recordedAt: timestamp('recorded_at').defaultNow().notNull(),
444
- }, (table) => ({
445
- daemonIdIdx: index('idx_agent_metrics_daemon_id').on(table.daemonId),
446
- agentNameIdx: index('idx_agent_metrics_agent_name').on(table.agentName),
447
- recordedAtIdx: index('idx_agent_metrics_recorded_at').on(table.recordedAt),
448
- alertLevelIdx: index('idx_agent_metrics_alert_level').on(table.alertLevel),
449
- }));
450
- export const agentMetricsRelations = relations(agentMetrics, ({ one }) => ({
451
- daemon: one(linkedDaemons, {
452
- fields: [agentMetrics.daemonId],
453
- references: [linkedDaemons.id],
454
- }),
455
- }));
456
- // ============================================================================
457
- // Agent Crashes (crash history with insights)
458
- // ============================================================================
459
- export const agentCrashes = pgTable('agent_crashes', {
460
- id: uuid('id').primaryKey().defaultRandom(),
461
- daemonId: uuid('daemon_id').notNull().references(() => linkedDaemons.id, { onDelete: 'cascade' }),
462
- agentName: varchar('agent_name', { length: 255 }).notNull(),
463
- pid: bigint('pid', { mode: 'number' }),
464
- exitCode: bigint('exit_code', { mode: 'number' }),
465
- signal: varchar('signal', { length: 50 }),
466
- reason: text('reason'),
467
- // Crash analysis
468
- likelyCause: varchar('likely_cause', { length: 50 }),
469
- confidence: varchar('confidence', { length: 20 }),
470
- summary: text('summary'),
471
- // Memory state at crash
472
- peakMemory: bigint('peak_memory', { mode: 'number' }),
473
- lastKnownMemory: bigint('last_known_memory', { mode: 'number' }),
474
- memoryTrend: varchar('memory_trend', { length: 20 }),
475
- // Full insight data
476
- insightData: jsonb('insight_data').$type(),
477
- // Last output (truncated)
478
- lastOutput: text('last_output'),
479
- crashedAt: timestamp('crashed_at').defaultNow().notNull(),
480
- }, (table) => ({
481
- daemonIdIdx: index('idx_agent_crashes_daemon_id').on(table.daemonId),
482
- agentNameIdx: index('idx_agent_crashes_agent_name').on(table.agentName),
483
- crashedAtIdx: index('idx_agent_crashes_crashed_at').on(table.crashedAt),
484
- likelyCauseIdx: index('idx_agent_crashes_likely_cause').on(table.likelyCause),
485
- }));
486
- export const agentCrashesRelations = relations(agentCrashes, ({ one }) => ({
487
- daemon: one(linkedDaemons, {
488
- fields: [agentCrashes.daemonId],
489
- references: [linkedDaemons.id],
490
- }),
491
- }));
492
- // ============================================================================
493
- // Memory Alerts (proactive alerting history)
494
- // ============================================================================
495
- export const memoryAlerts = pgTable('memory_alerts', {
496
- id: uuid('id').primaryKey().defaultRandom(),
497
- daemonId: uuid('daemon_id').notNull().references(() => linkedDaemons.id, { onDelete: 'cascade' }),
498
- agentName: varchar('agent_name', { length: 255 }).notNull(),
499
- alertType: varchar('alert_type', { length: 50 }).notNull(), // warning, critical, oom_imminent, trend_warning, recovered
500
- currentRss: bigint('current_rss', { mode: 'number' }),
501
- threshold: bigint('threshold', { mode: 'number' }),
502
- message: text('message'),
503
- recommendation: text('recommendation'),
504
- acknowledged: boolean('acknowledged').default(false),
505
- acknowledgedAt: timestamp('acknowledged_at'),
506
- createdAt: timestamp('created_at').defaultNow().notNull(),
507
- }, (table) => ({
508
- daemonIdIdx: index('idx_memory_alerts_daemon_id').on(table.daemonId),
509
- agentNameIdx: index('idx_memory_alerts_agent_name').on(table.agentName),
510
- alertTypeIdx: index('idx_memory_alerts_alert_type').on(table.alertType),
511
- createdAtIdx: index('idx_memory_alerts_created_at').on(table.createdAt),
512
- }));
513
- export const memoryAlertsRelations = relations(memoryAlerts, ({ one }) => ({
514
- daemon: one(linkedDaemons, {
515
- fields: [memoryAlerts.daemonId],
516
- references: [linkedDaemons.id],
517
- }),
518
- }));
519
- export const ciFailureEvents = pgTable('ci_failure_events', {
520
- id: uuid('id').primaryKey().defaultRandom(),
521
- repositoryId: uuid('repository_id').references(() => repositories.id, { onDelete: 'cascade' }),
522
- repository: varchar('repository', { length: 255 }).notNull(), // org/repo format
523
- prNumber: bigint('pr_number', { mode: 'number' }),
524
- branch: varchar('branch', { length: 255 }),
525
- commitSha: varchar('commit_sha', { length: 40 }),
526
- checkName: varchar('check_name', { length: 255 }).notNull(),
527
- checkId: bigint('check_id', { mode: 'number' }).notNull(),
528
- conclusion: varchar('conclusion', { length: 50 }).notNull(), // failure, cancelled, timed_out, etc.
529
- failureTitle: text('failure_title'),
530
- failureSummary: text('failure_summary'),
531
- failureDetails: text('failure_details'),
532
- annotations: jsonb('annotations').$type().default([]),
533
- workflowName: varchar('workflow_name', { length: 255 }),
534
- workflowRunId: bigint('workflow_run_id', { mode: 'number' }),
535
- // Processing state
536
- processedAt: timestamp('processed_at'),
537
- agentSpawned: boolean('agent_spawned').default(false),
538
- createdAt: timestamp('created_at').defaultNow().notNull(),
539
- }, (table) => ({
540
- repositoryIdx: index('idx_ci_failure_events_repository').on(table.repository),
541
- prNumberIdx: index('idx_ci_failure_events_pr_number').on(table.prNumber),
542
- checkNameIdx: index('idx_ci_failure_events_check_name').on(table.checkName),
543
- createdAtIdx: index('idx_ci_failure_events_created_at').on(table.createdAt),
544
- repoPrIdx: index('idx_ci_failure_events_repo_pr').on(table.repository, table.prNumber),
545
- }));
546
- export const ciFailureEventsRelations = relations(ciFailureEvents, ({ one, many }) => ({
547
- repositoryRef: one(repositories, {
548
- fields: [ciFailureEvents.repositoryId],
549
- references: [repositories.id],
550
- }),
551
- fixAttempts: many(ciFixAttempts),
552
- }));
553
- // ============================================================================
554
- // CI Fix Attempts (agent responses to failures)
555
- // ============================================================================
556
- export const ciFixAttempts = pgTable('ci_fix_attempts', {
557
- id: uuid('id').primaryKey().defaultRandom(),
558
- failureEventId: uuid('failure_event_id').notNull().references(() => ciFailureEvents.id, { onDelete: 'cascade' }),
559
- agentId: varchar('agent_id', { length: 255 }).notNull(),
560
- agentName: varchar('agent_name', { length: 255 }).notNull(),
561
- status: varchar('status', { length: 50 }).notNull().default('pending'), // pending, in_progress, success, failed
562
- commitSha: varchar('commit_sha', { length: 40 }),
563
- errorMessage: text('error_message'),
564
- // Timing
565
- startedAt: timestamp('started_at').defaultNow().notNull(),
566
- completedAt: timestamp('completed_at'),
567
- }, (table) => ({
568
- failureEventIdx: index('idx_ci_fix_attempts_failure_event').on(table.failureEventId),
569
- statusIdx: index('idx_ci_fix_attempts_status').on(table.status),
570
- agentIdIdx: index('idx_ci_fix_attempts_agent_id').on(table.agentId),
571
- }));
572
- export const ciFixAttemptsRelations = relations(ciFixAttempts, ({ one }) => ({
573
- failureEvent: one(ciFailureEvents, {
574
- fields: [ciFixAttempts.failureEventId],
575
- references: [ciFailureEvents.id],
576
- }),
577
- }));
578
- // ============================================================================
579
- // GitHub Issue Assignments (agent handling of issues)
580
- // ============================================================================
581
- export const issueAssignments = pgTable('issue_assignments', {
582
- id: uuid('id').primaryKey().defaultRandom(),
583
- repositoryId: uuid('repository_id').references(() => repositories.id, { onDelete: 'cascade' }),
584
- repository: varchar('repository', { length: 255 }).notNull(), // org/repo format
585
- issueNumber: bigint('issue_number', { mode: 'number' }).notNull(),
586
- issueTitle: text('issue_title').notNull(),
587
- issueBody: text('issue_body'),
588
- issueUrl: varchar('issue_url', { length: 512 }),
589
- // Assignment details
590
- agentId: varchar('agent_id', { length: 255 }),
591
- agentName: varchar('agent_name', { length: 255 }),
592
- assignedAt: timestamp('assigned_at'),
593
- // Status tracking
594
- status: varchar('status', { length: 50 }).notNull().default('pending'), // pending, assigned, in_progress, resolved, closed
595
- resolution: text('resolution'),
596
- // PR created to fix the issue
597
- linkedPrNumber: bigint('linked_pr_number', { mode: 'number' }),
598
- // Metadata
599
- labels: text('labels').array(),
600
- priority: varchar('priority', { length: 20 }), // low, medium, high, critical
601
- createdAt: timestamp('created_at').defaultNow().notNull(),
602
- updatedAt: timestamp('updated_at').defaultNow().notNull(),
603
- }, (table) => ({
604
- repositoryIdx: index('idx_issue_assignments_repository').on(table.repository),
605
- issueNumberIdx: index('idx_issue_assignments_issue_number').on(table.issueNumber),
606
- statusIdx: index('idx_issue_assignments_status').on(table.status),
607
- agentIdIdx: index('idx_issue_assignments_agent_id').on(table.agentId),
608
- repoIssueIdx: unique('issue_assignments_repo_issue_unique').on(table.repository, table.issueNumber),
609
- }));
610
- export const issueAssignmentsRelations = relations(issueAssignments, ({ one }) => ({
611
- repositoryRef: one(repositories, {
612
- fields: [issueAssignments.repositoryId],
613
- references: [repositories.id],
614
- }),
615
- }));
616
- // ============================================================================
617
- // Comment Mentions (tracking @mentions to agents)
618
- // ============================================================================
619
- export const commentMentions = pgTable('comment_mentions', {
620
- id: uuid('id').primaryKey().defaultRandom(),
621
- repositoryId: uuid('repository_id').references(() => repositories.id, { onDelete: 'cascade' }),
622
- repository: varchar('repository', { length: 255 }).notNull(),
623
- // Source of the mention
624
- sourceType: varchar('source_type', { length: 50 }).notNull(), // issue_comment, pr_comment, pr_review
625
- sourceId: bigint('source_id', { mode: 'number' }).notNull(), // GitHub comment ID
626
- issueOrPrNumber: bigint('issue_or_pr_number', { mode: 'number' }).notNull(),
627
- // Comment details
628
- commentBody: text('comment_body').notNull(),
629
- commentUrl: varchar('comment_url', { length: 512 }),
630
- authorLogin: varchar('author_login', { length: 255 }).notNull(),
631
- authorId: bigint('author_id', { mode: 'number' }),
632
- // Mention details
633
- mentionedAgent: varchar('mentioned_agent', { length: 255 }).notNull(), // e.g., "agent-relay", "ci-fix", "lead"
634
- mentionContext: text('mention_context'), // Text surrounding the mention
635
- // Response tracking
636
- agentId: varchar('agent_id', { length: 255 }),
637
- agentName: varchar('agent_name', { length: 255 }),
638
- status: varchar('status', { length: 50 }).notNull().default('pending'), // pending, processing, responded, ignored
639
- responseCommentId: bigint('response_comment_id', { mode: 'number' }),
640
- responseBody: text('response_body'),
641
- respondedAt: timestamp('responded_at'),
642
- // Metadata
643
- createdAt: timestamp('created_at').defaultNow().notNull(),
644
- }, (table) => ({
645
- repositoryIdx: index('idx_comment_mentions_repository').on(table.repository),
646
- sourceIdx: index('idx_comment_mentions_source').on(table.sourceType, table.sourceId),
647
- statusIdx: index('idx_comment_mentions_status').on(table.status),
648
- mentionedAgentIdx: index('idx_comment_mentions_mentioned_agent').on(table.mentionedAgent),
649
- }));
650
- export const commentMentionsRelations = relations(commentMentions, ({ one }) => ({
651
- repositoryRef: one(repositories, {
652
- fields: [commentMentions.repositoryId],
653
- references: [repositories.id],
654
- }),
655
- }));
656
- //# sourceMappingURL=schema.js.map