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,269 +0,0 @@
1
- /**
2
- * Git Gateway API Routes
3
- *
4
- * Provides fresh GitHub tokens to workspace containers for git operations.
5
- * This gateway pattern ensures tokens are always valid (Nango handles refresh).
6
- */
7
- import crypto from 'crypto';
8
- import { Router } from 'express';
9
- import { db } from '../db/index.js';
10
- import { nangoService } from '../services/nango.js';
11
- import { getConfig } from '../config.js';
12
- export const gitRouter = Router();
13
- /**
14
- * Generate expected workspace token using HMAC
15
- */
16
- function generateExpectedToken(workspaceId) {
17
- const config = getConfig();
18
- return crypto
19
- .createHmac('sha256', config.sessionSecret)
20
- .update(`workspace:${workspaceId}`)
21
- .digest('hex');
22
- }
23
- /**
24
- * Verify workspace access token
25
- * Workspaces authenticate with a secret passed at provisioning time
26
- *
27
- * Returns:
28
- * - { valid: true } if token matches
29
- * - { valid: false, reason: string } if token is invalid or missing
30
- */
31
- function verifyWorkspaceToken(req, workspaceId) {
32
- const authHeader = req.get('authorization');
33
- if (!authHeader) {
34
- return { valid: false, reason: 'No Authorization header. WORKSPACE_TOKEN may not be set in the container.' };
35
- }
36
- if (!authHeader.startsWith('Bearer ')) {
37
- return { valid: false, reason: 'Invalid Authorization header format. Expected: Bearer <token>' };
38
- }
39
- const providedToken = authHeader.slice(7);
40
- if (!providedToken) {
41
- return { valid: false, reason: 'Empty bearer token provided.' };
42
- }
43
- const expectedToken = generateExpectedToken(workspaceId);
44
- // Use timing-safe comparison to prevent timing attacks
45
- try {
46
- const isValid = crypto.timingSafeEqual(Buffer.from(providedToken), Buffer.from(expectedToken));
47
- if (!isValid) {
48
- return { valid: false, reason: 'Token mismatch. Workspace may need reprovisioning or SESSION_SECRET changed.' };
49
- }
50
- return { valid: true };
51
- }
52
- catch {
53
- return { valid: false, reason: 'Token comparison failed (length mismatch). Workspace may need reprovisioning.' };
54
- }
55
- }
56
- /**
57
- * GET /api/git/token
58
- * Get a fresh GitHub token for git operations
59
- *
60
- * Query params:
61
- * - workspaceId: The workspace requesting the token
62
- *
63
- * Returns: { token: string, expiresAt?: string }
64
- *
65
- * This endpoint is called by the git credential helper in workspace containers.
66
- * It fetches a fresh GitHub App installation token via Nango.
67
- */
68
- gitRouter.get('/token', async (req, res) => {
69
- const { workspaceId } = req.query;
70
- if (!workspaceId || typeof workspaceId !== 'string') {
71
- return res.status(400).json({ error: 'workspaceId is required' });
72
- }
73
- // Verify the request is from a valid workspace
74
- const tokenVerification = verifyWorkspaceToken(req, workspaceId);
75
- if (!tokenVerification.valid) {
76
- console.warn(`[git] Token verification failed for workspace ${workspaceId.substring(0, 8)}: ${tokenVerification.reason}`);
77
- return res.status(401).json({
78
- error: 'Invalid workspace token',
79
- code: 'INVALID_WORKSPACE_TOKEN',
80
- hint: tokenVerification.reason,
81
- });
82
- }
83
- try {
84
- // Get workspace to find the user
85
- const workspace = await db.workspaces.findById(workspaceId);
86
- if (!workspace) {
87
- console.warn(`[git] Workspace not found: ${workspaceId}`);
88
- return res.status(404).json({
89
- error: 'Workspace not found',
90
- code: 'WORKSPACE_NOT_FOUND',
91
- hint: 'The workspace may have been deleted. Try reprovisioning.',
92
- });
93
- }
94
- const userId = workspace.userId;
95
- console.log(`[git] Token request for workspace ${workspaceId.substring(0, 8)}, user ${userId.substring(0, 8)}`);
96
- // Find a repository with a Nango connection for this user
97
- const repos = await db.repositories.findByUserId(userId);
98
- const repoWithConnection = repos.find(r => r.nangoConnectionId);
99
- if (!repoWithConnection?.nangoConnectionId) {
100
- console.warn(`[git] No Nango connection found for user ${userId.substring(0, 8)}. Repos: ${repos.length}, with connections: ${repos.filter(r => r.nangoConnectionId).length}`);
101
- return res.status(404).json({
102
- error: 'No GitHub App connection found',
103
- code: 'NO_GITHUB_APP_CONNECTION',
104
- hint: 'Install the GitHub App on your repositories at https://github.com/apps/agent-relay',
105
- repoCount: repos.length,
106
- });
107
- }
108
- console.log(`[git] Fetching token from Nango for connection ${repoWithConnection.nangoConnectionId.substring(0, 8)}...`);
109
- // Get fresh tokens from Nango (auto-refreshes if needed)
110
- // - installationToken: for git operations (clone, push, pull)
111
- // - userToken: for gh CLI operations (requires user context)
112
- let installationToken;
113
- try {
114
- installationToken = await nangoService.getGithubAppToken(repoWithConnection.nangoConnectionId);
115
- }
116
- catch (nangoError) {
117
- const errorMessage = nangoError instanceof Error ? nangoError.message : 'Unknown error';
118
- console.error(`[git] Nango token fetch failed for connection ${repoWithConnection.nangoConnectionId}:`, errorMessage);
119
- // Provide specific hints based on error type
120
- if (errorMessage.includes('not found') || errorMessage.includes('404')) {
121
- return res.status(500).json({
122
- error: 'GitHub App connection expired or revoked',
123
- code: 'NANGO_CONNECTION_EXPIRED',
124
- hint: 'Reconnect your GitHub App at https://github.com/apps/agent-relay',
125
- details: errorMessage,
126
- });
127
- }
128
- return res.status(500).json({
129
- error: 'Failed to fetch GitHub token from Nango',
130
- code: 'NANGO_TOKEN_FETCH_FAILED',
131
- hint: 'This may be a temporary issue. Try again in a few seconds.',
132
- details: errorMessage,
133
- });
134
- }
135
- // Try to get user OAuth token from github-app-oauth connection_config first
136
- // Fall back to separate 'github' user connection if available
137
- let userToken = null;
138
- try {
139
- userToken = await nangoService.getGithubUserOAuthToken(repoWithConnection.nangoConnectionId);
140
- }
141
- catch {
142
- // Try the separate github user connection if available
143
- const userRepo = repos.find(r => r.nangoConnectionId && r.nangoConnectionId !== repoWithConnection.nangoConnectionId);
144
- if (userRepo?.nangoConnectionId) {
145
- try {
146
- userToken = await nangoService.getGithubUserToken(userRepo.nangoConnectionId);
147
- }
148
- catch {
149
- console.log('[git] No github user token available');
150
- }
151
- }
152
- }
153
- // GitHub App installation tokens expire after 1 hour
154
- const expiresAt = new Date(Date.now() + 55 * 60 * 1000).toISOString(); // 55 min buffer
155
- // Prefer userToken for git operations - installation tokens (ghs_*) are API-only
156
- // and don't work with git credential helpers. User OAuth tokens work for both
157
- // git operations (clone, push, pull) AND gh CLI commands.
158
- const primaryToken = userToken || installationToken;
159
- const tokenType = userToken ? 'user' : 'installation';
160
- console.log(`[git] Token fetched successfully for workspace ${workspaceId.substring(0, 8)} (type: ${tokenType})`);
161
- res.json({
162
- token: primaryToken, // Primary token for git/gh operations (prefer user token)
163
- userToken, // Explicit user token field (may be null)
164
- installationToken, // GitHub App installation token for API operations
165
- expiresAt,
166
- username: 'x-access-token', // Works with both token types
167
- tokenType, // 'user' or 'installation' - helps clients know what they got
168
- });
169
- }
170
- catch (error) {
171
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
172
- console.error('[git] Unexpected error getting token:', error);
173
- res.status(500).json({
174
- error: 'Failed to get GitHub token',
175
- code: 'UNEXPECTED_ERROR',
176
- details: errorMessage,
177
- });
178
- }
179
- });
180
- /**
181
- * POST /api/git/token
182
- * Same as GET but accepts body params (for compatibility with some git credential helpers)
183
- */
184
- gitRouter.post('/token', async (req, res) => {
185
- const workspaceId = req.body.workspaceId || req.query.workspaceId;
186
- if (!workspaceId || typeof workspaceId !== 'string') {
187
- return res.status(400).json({ error: 'workspaceId is required' });
188
- }
189
- const tokenVerification = verifyWorkspaceToken(req, workspaceId);
190
- if (!tokenVerification.valid) {
191
- console.warn(`[git] POST: Token verification failed for workspace ${workspaceId.substring(0, 8)}: ${tokenVerification.reason}`);
192
- return res.status(401).json({
193
- error: 'Invalid workspace token',
194
- code: 'INVALID_WORKSPACE_TOKEN',
195
- hint: tokenVerification.reason,
196
- });
197
- }
198
- try {
199
- const workspace = await db.workspaces.findById(workspaceId);
200
- if (!workspace) {
201
- console.warn(`[git] POST: Workspace not found: ${workspaceId}`);
202
- return res.status(404).json({
203
- error: 'Workspace not found',
204
- code: 'WORKSPACE_NOT_FOUND',
205
- });
206
- }
207
- const repos = await db.repositories.findByUserId(workspace.userId);
208
- const repoWithConnection = repos.find(r => r.nangoConnectionId);
209
- if (!repoWithConnection?.nangoConnectionId) {
210
- console.warn(`[git] POST: No Nango connection for user ${workspace.userId.substring(0, 8)}`);
211
- return res.status(404).json({
212
- error: 'No GitHub App connection found',
213
- code: 'NO_GITHUB_APP_CONNECTION',
214
- });
215
- }
216
- let installationToken;
217
- try {
218
- installationToken = await nangoService.getGithubAppToken(repoWithConnection.nangoConnectionId);
219
- }
220
- catch (nangoError) {
221
- const errorMessage = nangoError instanceof Error ? nangoError.message : 'Unknown error';
222
- console.error(`[git] POST: Nango token fetch failed:`, errorMessage);
223
- return res.status(500).json({
224
- error: 'Failed to fetch GitHub token',
225
- code: 'NANGO_TOKEN_FETCH_FAILED',
226
- details: errorMessage,
227
- });
228
- }
229
- // Try to get user OAuth token (preferred for git operations)
230
- let userToken = null;
231
- try {
232
- userToken = await nangoService.getGithubUserOAuthToken(repoWithConnection.nangoConnectionId);
233
- }
234
- catch {
235
- // Try the separate github user connection if available
236
- const userRepo = repos.find(r => r.nangoConnectionId && r.nangoConnectionId !== repoWithConnection.nangoConnectionId);
237
- if (userRepo?.nangoConnectionId) {
238
- try {
239
- userToken = await nangoService.getGithubUserToken(userRepo.nangoConnectionId);
240
- }
241
- catch {
242
- console.log('[git] POST: No github user token available');
243
- }
244
- }
245
- }
246
- const expiresAt = new Date(Date.now() + 55 * 60 * 1000).toISOString();
247
- // Prefer userToken for git operations
248
- const primaryToken = userToken || installationToken;
249
- const tokenType = userToken ? 'user' : 'installation';
250
- res.json({
251
- token: primaryToken,
252
- userToken,
253
- installationToken,
254
- expiresAt,
255
- username: 'x-access-token',
256
- tokenType,
257
- });
258
- }
259
- catch (error) {
260
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
261
- console.error('[git] POST: Unexpected error:', error);
262
- res.status(500).json({
263
- error: 'Failed to get GitHub token',
264
- code: 'UNEXPECTED_ERROR',
265
- details: errorMessage,
266
- });
267
- }
268
- });
269
- //# sourceMappingURL=git.js.map
@@ -1,11 +0,0 @@
1
- /**
2
- * GitHub App API Routes
3
- *
4
- * Repo operations via Nango's github-app-oauth connection:
5
- * - Get clone token for repositories
6
- * - Create issues, PRs, and comments
7
- *
8
- * Auth flow is handled by nango-auth.ts
9
- */
10
- export declare const githubAppRouter: import("express-serve-static-core").Router;
11
- //# sourceMappingURL=github-app.d.ts.map
@@ -1,223 +0,0 @@
1
- /**
2
- * GitHub App API Routes
3
- *
4
- * Repo operations via Nango's github-app-oauth connection:
5
- * - Get clone token for repositories
6
- * - Create issues, PRs, and comments
7
- *
8
- * Auth flow is handled by nango-auth.ts
9
- */
10
- import { Router } from 'express';
11
- import { requireAuth } from './auth.js';
12
- import { db } from '../db/index.js';
13
- import { nangoService, NANGO_INTEGRATIONS } from '../services/nango.js';
14
- export const githubAppRouter = Router();
15
- // All routes require authentication
16
- githubAppRouter.use(requireAuth);
17
- /**
18
- * GET /api/github-app/status
19
- * Check if Nango GitHub App OAuth is configured
20
- */
21
- githubAppRouter.get('/status', (_req, res) => {
22
- res.json({
23
- configured: true,
24
- integrations: NANGO_INTEGRATIONS,
25
- connectUrl: '/connect-repos',
26
- });
27
- });
28
- /**
29
- * GET /api/github-app/repos
30
- * List repositories the user has access to
31
- *
32
- * First tries database (populated by GitHub App OAuth).
33
- * If empty, queries GitHub directly via user OAuth connection.
34
- */
35
- githubAppRouter.get('/repos', async (req, res) => {
36
- const userId = req.session.userId;
37
- try {
38
- // Try database first (from GitHub App OAuth flow)
39
- const dbRepos = await db.repositories.findByUserId(userId);
40
- if (dbRepos.length > 0) {
41
- // Return repos from database
42
- return res.json({
43
- repositories: dbRepos.map((r) => ({
44
- id: r.id,
45
- fullName: r.githubFullName,
46
- isPrivate: r.isPrivate,
47
- defaultBranch: r.defaultBranch,
48
- syncStatus: r.syncStatus,
49
- hasNangoConnection: !!r.nangoConnectionId,
50
- lastSyncedAt: r.lastSyncedAt,
51
- })),
52
- source: 'database',
53
- });
54
- }
55
- // Database empty - query GitHub directly via user OAuth
56
- const user = await db.users.findById(userId);
57
- if (!user?.nangoConnectionId) {
58
- return res.json({
59
- repositories: [],
60
- source: 'none',
61
- hint: 'User not connected to GitHub',
62
- });
63
- }
64
- console.log(`[github-app/repos] Database empty, querying GitHub for user ${user.githubUsername}`);
65
- const { repositories } = await nangoService.listUserAccessibleRepos(user.nangoConnectionId, {
66
- perPage: 100,
67
- type: 'all',
68
- });
69
- res.json({
70
- repositories: repositories.map((r) => ({
71
- id: null, // No database ID yet
72
- fullName: r.fullName,
73
- isPrivate: r.isPrivate,
74
- defaultBranch: r.defaultBranch,
75
- syncStatus: 'live', // Queried from GitHub, not cached
76
- hasNangoConnection: true,
77
- lastSyncedAt: null,
78
- })),
79
- source: 'github-api',
80
- });
81
- }
82
- catch (error) {
83
- console.error('Error listing repos:', error);
84
- res.status(500).json({ error: 'Failed to list repositories' });
85
- }
86
- });
87
- /**
88
- * GET /api/github-app/clone-token
89
- * Get a clone token for a repository
90
- * Used by workspace provisioner to clone private repos
91
- */
92
- githubAppRouter.get('/clone-token', async (req, res) => {
93
- const userId = req.session.userId;
94
- const { repo } = req.query;
95
- if (!repo || typeof repo !== 'string') {
96
- return res.status(400).json({ error: 'Repository name is required (owner/repo)' });
97
- }
98
- try {
99
- // Find the repository in our database
100
- const userRepos = await db.repositories.findByUserId(userId);
101
- const repository = userRepos.find((r) => r.githubFullName === repo);
102
- if (!repository) {
103
- return res.status(404).json({ error: 'Repository not found' });
104
- }
105
- if (!repository.nangoConnectionId) {
106
- return res.status(400).json({
107
- error: 'Repository not connected via Nango',
108
- hint: 'Connect your GitHub repos through the Nango flow first',
109
- });
110
- }
111
- // Get token from Nango connection
112
- const token = await nangoService.getGithubAppToken(repository.nangoConnectionId);
113
- const cloneUrl = `https://x-access-token:${token}@github.com/${repo}.git`;
114
- res.json({
115
- token,
116
- cloneUrl,
117
- expiresIn: '1 hour',
118
- });
119
- }
120
- catch (error) {
121
- console.error('Error getting clone token:', error);
122
- res.status(500).json({ error: 'Failed to get clone token' });
123
- }
124
- });
125
- /**
126
- * POST /api/github-app/repos/:id/issues
127
- * Create an issue on a repository
128
- */
129
- githubAppRouter.post('/repos/:id/issues', async (req, res) => {
130
- const userId = req.session.userId;
131
- const id = req.params.id;
132
- const { title, body, labels } = req.body;
133
- if (!title || typeof title !== 'string') {
134
- return res.status(400).json({ error: 'Issue title is required' });
135
- }
136
- try {
137
- // Find the repository
138
- const repository = await db.repositories.findById(id);
139
- if (!repository || repository.userId !== userId) {
140
- return res.status(404).json({ error: 'Repository not found' });
141
- }
142
- if (!repository.nangoConnectionId) {
143
- return res.status(400).json({ error: 'Repository not connected via Nango' });
144
- }
145
- // Create issue via Nango Proxy (handles token injection automatically)
146
- const [owner, repo] = repository.githubFullName.split('/');
147
- const issue = await nangoService.createGithubIssue(repository.nangoConnectionId, owner, repo, { title, body: body || '', labels });
148
- res.json({
149
- number: issue.number,
150
- url: issue.html_url,
151
- });
152
- }
153
- catch (error) {
154
- console.error('Error creating issue:', error);
155
- res.status(500).json({ error: 'Failed to create issue' });
156
- }
157
- });
158
- /**
159
- * POST /api/github-app/repos/:id/pulls
160
- * Create a pull request on a repository
161
- */
162
- githubAppRouter.post('/repos/:id/pulls', async (req, res) => {
163
- const userId = req.session.userId;
164
- const id = req.params.id;
165
- const { title, body, head, base } = req.body;
166
- if (!title || !head || !base) {
167
- return res.status(400).json({ error: 'title, head, and base are required' });
168
- }
169
- try {
170
- // Find the repository
171
- const repository = await db.repositories.findById(id);
172
- if (!repository || repository.userId !== userId) {
173
- return res.status(404).json({ error: 'Repository not found' });
174
- }
175
- if (!repository.nangoConnectionId) {
176
- return res.status(400).json({ error: 'Repository not connected via Nango' });
177
- }
178
- // Create PR via Nango Proxy (handles token injection automatically)
179
- const [owner, repo] = repository.githubFullName.split('/');
180
- const pr = await nangoService.createGithubPullRequest(repository.nangoConnectionId, owner, repo, { title, body: body || '', head, base });
181
- res.json({
182
- number: pr.number,
183
- url: pr.html_url,
184
- });
185
- }
186
- catch (error) {
187
- console.error('Error creating PR:', error);
188
- res.status(500).json({ error: 'Failed to create pull request' });
189
- }
190
- });
191
- /**
192
- * POST /api/github-app/repos/:id/comments
193
- * Add a comment to an issue or PR
194
- */
195
- githubAppRouter.post('/repos/:id/comments', async (req, res) => {
196
- const userId = req.session.userId;
197
- const id = req.params.id;
198
- const { issueNumber, body } = req.body;
199
- if (!issueNumber || !body) {
200
- return res.status(400).json({ error: 'issueNumber and body are required' });
201
- }
202
- try {
203
- const repository = await db.repositories.findById(id);
204
- if (!repository || repository.userId !== userId) {
205
- return res.status(404).json({ error: 'Repository not found' });
206
- }
207
- if (!repository.nangoConnectionId) {
208
- return res.status(400).json({ error: 'Repository not connected via Nango' });
209
- }
210
- // Add comment via Nango Proxy (handles token injection automatically)
211
- const [owner, repo] = repository.githubFullName.split('/');
212
- const comment = await nangoService.addGithubIssueComment(repository.nangoConnectionId, owner, repo, issueNumber, body);
213
- res.json({
214
- id: comment.id,
215
- url: comment.html_url,
216
- });
217
- }
218
- catch (error) {
219
- console.error('Error adding comment:', error);
220
- res.status(500).json({ error: 'Failed to add comment' });
221
- }
222
- });
223
- //# sourceMappingURL=github-app.js.map
@@ -1,43 +0,0 @@
1
- /**
2
- * Plan Limits Middleware
3
- *
4
- * Express middleware to enforce plan-based resource limits.
5
- */
6
- import { Request, Response, NextFunction } from 'express';
7
- /**
8
- * Middleware to check workspace creation limit
9
- *
10
- * Use this middleware on workspace creation endpoints.
11
- * Requires userId in session (use after requireAuth).
12
- */
13
- export declare function checkWorkspaceLimit(req: Request, res: Response, next: NextFunction): Promise<void>;
14
- /**
15
- * Middleware to check repository limit
16
- *
17
- * Use this middleware on repo connection endpoints.
18
- * Requires userId in session (use after requireAuth).
19
- */
20
- export declare function checkRepoLimit(req: Request, res: Response, next: NextFunction): Promise<void>;
21
- /**
22
- * Middleware to check concurrent agent limit
23
- *
24
- * Use this middleware on agent spawn endpoints.
25
- * Requires userId in session (use after requireAuth).
26
- * Optionally pass currentRunningAgents in request body for accurate count.
27
- */
28
- export declare function checkAgentLimit(req: Request, res: Response, next: NextFunction): Promise<void>;
29
- /**
30
- * Middleware to check coordinator access
31
- *
32
- * Use this middleware on coordinator-related endpoints.
33
- * Coordinators are only available on Pro plan and above.
34
- */
35
- export declare function checkCoordinatorAccess(req: Request, res: Response, next: NextFunction): Promise<void>;
36
- /**
37
- * Middleware to check session persistence access
38
- *
39
- * Use this middleware on endpoints that enable cloud session persistence.
40
- * Session persistence is only available on Pro plan and above.
41
- */
42
- export declare function checkSessionPersistenceAccess(req: Request, res: Response, next: NextFunction): Promise<void>;
43
- //# sourceMappingURL=planLimits.d.ts.map