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,302 +0,0 @@
1
- /**
2
- * Agent Session Persistence API Routes
3
- *
4
- * Provides endpoints for workspace containers to persist agent session data.
5
- * Workspaces call these endpoints instead of accessing the database directly,
6
- * which provides better security isolation (workspaces can only write their own data).
7
- *
8
- * Authentication: Workspace token (same as git gateway)
9
- */
10
- import crypto from 'crypto';
11
- import { Router } from 'express';
12
- import { eq } from 'drizzle-orm';
13
- import { getDb } from '../db/drizzle.js';
14
- import { agentSessions, agentSummaries } from '../db/schema.js';
15
- import { getConfig } from '../config.js';
16
- export const sessionsRouter = Router();
17
- // Validation patterns
18
- const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
19
- const AGENT_NAME_REGEX = /^[a-zA-Z0-9_-]+$/;
20
- const MAX_AGENT_NAME_LENGTH = 255;
21
- /**
22
- * Generate expected workspace token using HMAC
23
- */
24
- function generateExpectedToken(workspaceId) {
25
- const config = getConfig();
26
- return crypto
27
- .createHmac('sha256', config.sessionSecret)
28
- .update(`workspace:${workspaceId}`)
29
- .digest('hex');
30
- }
31
- /**
32
- * Verify workspace access token
33
- */
34
- function verifyWorkspaceToken(req, workspaceId) {
35
- const authHeader = req.get('authorization');
36
- if (!authHeader) {
37
- return { valid: false, reason: 'No Authorization header. WORKSPACE_TOKEN may not be set in the container.' };
38
- }
39
- if (!authHeader.startsWith('Bearer ')) {
40
- return { valid: false, reason: 'Invalid Authorization header format. Expected: Bearer <token>' };
41
- }
42
- const providedToken = authHeader.slice(7);
43
- if (!providedToken) {
44
- return { valid: false, reason: 'Empty bearer token provided.' };
45
- }
46
- const expectedToken = generateExpectedToken(workspaceId);
47
- try {
48
- const isValid = crypto.timingSafeEqual(Buffer.from(providedToken), Buffer.from(expectedToken));
49
- if (!isValid) {
50
- return { valid: false, reason: 'Token mismatch. Workspace may need reprovisioning or SESSION_SECRET changed.' };
51
- }
52
- return { valid: true };
53
- }
54
- catch {
55
- return { valid: false, reason: 'Token comparison failed (length mismatch). Workspace may need reprovisioning.' };
56
- }
57
- }
58
- /**
59
- * Validate UUID format
60
- */
61
- function isValidUUID(value) {
62
- return UUID_REGEX.test(value);
63
- }
64
- /**
65
- * Validate agent name format
66
- */
67
- function isValidAgentName(name) {
68
- if (name.length > MAX_AGENT_NAME_LENGTH) {
69
- return { valid: false, reason: `agentName exceeds maximum length of ${MAX_AGENT_NAME_LENGTH} characters` };
70
- }
71
- if (!AGENT_NAME_REGEX.test(name)) {
72
- return { valid: false, reason: 'agentName contains invalid characters (only alphanumeric, underscore, and hyphen allowed)' };
73
- }
74
- return { valid: true };
75
- }
76
- /**
77
- * Validate summary object structure
78
- */
79
- function validateSummary(summary) {
80
- if (typeof summary !== 'object' || summary === null || Array.isArray(summary)) {
81
- return { valid: false, reason: 'summary must be an object' };
82
- }
83
- const s = summary;
84
- const allowedKeys = ['currentTask', 'completedTasks', 'decisions', 'context', 'files'];
85
- for (const key of Object.keys(s)) {
86
- if (!allowedKeys.includes(key)) {
87
- // Allow extra keys but log warning (don't reject - for forward compatibility)
88
- continue;
89
- }
90
- }
91
- // Validate types of known fields
92
- if (s.currentTask !== undefined && typeof s.currentTask !== 'string') {
93
- return { valid: false, reason: 'summary.currentTask must be a string' };
94
- }
95
- if (s.completedTasks !== undefined && !Array.isArray(s.completedTasks)) {
96
- return { valid: false, reason: 'summary.completedTasks must be an array' };
97
- }
98
- if (s.decisions !== undefined && !Array.isArray(s.decisions)) {
99
- return { valid: false, reason: 'summary.decisions must be an array' };
100
- }
101
- if (s.context !== undefined && typeof s.context !== 'string') {
102
- return { valid: false, reason: 'summary.context must be a string' };
103
- }
104
- if (s.files !== undefined && !Array.isArray(s.files)) {
105
- return { valid: false, reason: 'summary.files must be an array' };
106
- }
107
- return { valid: true };
108
- }
109
- /**
110
- * POST /api/sessions/create
111
- * Create a new agent session
112
- *
113
- * Body: { workspaceId: string, agentName: string }
114
- * Returns: { sessionId: string }
115
- */
116
- sessionsRouter.post('/create', async (req, res) => {
117
- const { workspaceId, agentName } = req.body;
118
- if (!workspaceId || typeof workspaceId !== 'string') {
119
- return res.status(400).json({ error: 'workspaceId is required', code: 'MISSING_WORKSPACE_ID' });
120
- }
121
- if (!isValidUUID(workspaceId)) {
122
- return res.status(400).json({ error: 'workspaceId must be a valid UUID', code: 'INVALID_WORKSPACE_ID' });
123
- }
124
- if (!agentName || typeof agentName !== 'string') {
125
- return res.status(400).json({ error: 'agentName is required', code: 'MISSING_AGENT_NAME' });
126
- }
127
- const agentNameValidation = isValidAgentName(agentName);
128
- if (!agentNameValidation.valid) {
129
- return res.status(400).json({ error: agentNameValidation.reason, code: 'INVALID_AGENT_NAME' });
130
- }
131
- const tokenVerification = verifyWorkspaceToken(req, workspaceId);
132
- if (!tokenVerification.valid) {
133
- console.warn(`[sessions] Token verification failed for workspace ${workspaceId.substring(0, 8)}: ${tokenVerification.reason}`);
134
- return res.status(401).json({
135
- error: 'Invalid workspace token',
136
- code: 'INVALID_WORKSPACE_TOKEN',
137
- hint: tokenVerification.reason,
138
- });
139
- }
140
- try {
141
- const db = getDb();
142
- const result = await db.insert(agentSessions).values({
143
- workspaceId,
144
- agentName,
145
- status: 'active',
146
- startedAt: new Date(),
147
- }).returning();
148
- const session = result[0];
149
- if (!session) {
150
- return res.status(500).json({ error: 'Failed to create session', code: 'CREATE_FAILED' });
151
- }
152
- console.log(`[sessions] Created session ${session.id.substring(0, 8)} for ${agentName} in workspace ${workspaceId.substring(0, 8)}`);
153
- return res.json({ sessionId: session.id });
154
- }
155
- catch (err) {
156
- console.error(`[sessions] Failed to create session:`, err);
157
- return res.status(500).json({ error: 'Internal server error', code: 'INTERNAL_ERROR' });
158
- }
159
- });
160
- /**
161
- * POST /api/sessions/summary
162
- * Add a summary to an existing session
163
- *
164
- * Body: {
165
- * workspaceId: string,
166
- * sessionId: string,
167
- * agentName: string,
168
- * summary: { currentTask?: string, completedTasks?: string[], ... }
169
- * }
170
- * Returns: { summaryId: string }
171
- */
172
- sessionsRouter.post('/summary', async (req, res) => {
173
- const { workspaceId, sessionId, agentName, summary } = req.body;
174
- if (!workspaceId || typeof workspaceId !== 'string') {
175
- return res.status(400).json({ error: 'workspaceId is required', code: 'MISSING_WORKSPACE_ID' });
176
- }
177
- if (!isValidUUID(workspaceId)) {
178
- return res.status(400).json({ error: 'workspaceId must be a valid UUID', code: 'INVALID_WORKSPACE_ID' });
179
- }
180
- if (!sessionId || typeof sessionId !== 'string') {
181
- return res.status(400).json({ error: 'sessionId is required', code: 'MISSING_SESSION_ID' });
182
- }
183
- if (!isValidUUID(sessionId)) {
184
- return res.status(400).json({ error: 'sessionId must be a valid UUID', code: 'INVALID_SESSION_ID' });
185
- }
186
- if (!agentName || typeof agentName !== 'string') {
187
- return res.status(400).json({ error: 'agentName is required', code: 'MISSING_AGENT_NAME' });
188
- }
189
- const agentNameValidation = isValidAgentName(agentName);
190
- if (!agentNameValidation.valid) {
191
- return res.status(400).json({ error: agentNameValidation.reason, code: 'INVALID_AGENT_NAME' });
192
- }
193
- if (!summary) {
194
- return res.status(400).json({ error: 'summary is required', code: 'MISSING_SUMMARY' });
195
- }
196
- const summaryValidation = validateSummary(summary);
197
- if (!summaryValidation.valid) {
198
- return res.status(400).json({ error: summaryValidation.reason, code: 'INVALID_SUMMARY' });
199
- }
200
- const tokenVerification = verifyWorkspaceToken(req, workspaceId);
201
- if (!tokenVerification.valid) {
202
- console.warn(`[sessions] Summary: Token verification failed for workspace ${workspaceId.substring(0, 8)}`);
203
- return res.status(401).json({
204
- error: 'Invalid workspace token',
205
- code: 'INVALID_WORKSPACE_TOKEN',
206
- hint: tokenVerification.reason,
207
- });
208
- }
209
- try {
210
- const db = getDb();
211
- // Verify the session exists and belongs to this workspace
212
- const existingSession = await db.select()
213
- .from(agentSessions)
214
- .where(eq(agentSessions.id, sessionId))
215
- .limit(1);
216
- if (!existingSession[0]) {
217
- return res.status(404).json({ error: 'Session not found', code: 'SESSION_NOT_FOUND' });
218
- }
219
- if (existingSession[0].workspaceId !== workspaceId) {
220
- return res.status(403).json({ error: 'Session does not belong to this workspace', code: 'SESSION_FORBIDDEN' });
221
- }
222
- const result = await db.insert(agentSummaries).values({
223
- sessionId,
224
- agentName,
225
- summary,
226
- createdAt: new Date(),
227
- }).returning();
228
- const summaryRecord = result[0];
229
- if (!summaryRecord) {
230
- return res.status(500).json({ error: 'Failed to create summary', code: 'CREATE_FAILED' });
231
- }
232
- console.log(`[sessions] Saved summary for ${agentName}: ${summary.currentTask || 'no task'}`);
233
- return res.json({ summaryId: summaryRecord.id });
234
- }
235
- catch (err) {
236
- console.error(`[sessions] Failed to save summary:`, err);
237
- return res.status(500).json({ error: 'Internal server error', code: 'INTERNAL_ERROR' });
238
- }
239
- });
240
- /**
241
- * POST /api/sessions/end
242
- * Mark a session as ended
243
- *
244
- * Body: {
245
- * workspaceId: string,
246
- * sessionId: string,
247
- * endMarker: { summary?: string, completedTasks?: string[] }
248
- * }
249
- * Returns: { success: true }
250
- */
251
- sessionsRouter.post('/end', async (req, res) => {
252
- const { workspaceId, sessionId, endMarker } = req.body;
253
- if (!workspaceId || typeof workspaceId !== 'string') {
254
- return res.status(400).json({ error: 'workspaceId is required', code: 'MISSING_WORKSPACE_ID' });
255
- }
256
- if (!isValidUUID(workspaceId)) {
257
- return res.status(400).json({ error: 'workspaceId must be a valid UUID', code: 'INVALID_WORKSPACE_ID' });
258
- }
259
- if (!sessionId || typeof sessionId !== 'string') {
260
- return res.status(400).json({ error: 'sessionId is required', code: 'MISSING_SESSION_ID' });
261
- }
262
- if (!isValidUUID(sessionId)) {
263
- return res.status(400).json({ error: 'sessionId must be a valid UUID', code: 'INVALID_SESSION_ID' });
264
- }
265
- const tokenVerification = verifyWorkspaceToken(req, workspaceId);
266
- if (!tokenVerification.valid) {
267
- console.warn(`[sessions] End: Token verification failed for workspace ${workspaceId.substring(0, 8)}`);
268
- return res.status(401).json({
269
- error: 'Invalid workspace token',
270
- code: 'INVALID_WORKSPACE_TOKEN',
271
- hint: tokenVerification.reason,
272
- });
273
- }
274
- try {
275
- const db = getDb();
276
- // Verify the session exists and belongs to this workspace
277
- const existingSession = await db.select()
278
- .from(agentSessions)
279
- .where(eq(agentSessions.id, sessionId))
280
- .limit(1);
281
- if (!existingSession[0]) {
282
- return res.status(404).json({ error: 'Session not found', code: 'SESSION_NOT_FOUND' });
283
- }
284
- if (existingSession[0].workspaceId !== workspaceId) {
285
- return res.status(403).json({ error: 'Session does not belong to this workspace', code: 'SESSION_FORBIDDEN' });
286
- }
287
- await db.update(agentSessions)
288
- .set({
289
- status: 'ended',
290
- endedAt: new Date(),
291
- endMarker: endMarker || {},
292
- })
293
- .where(eq(agentSessions.id, sessionId));
294
- console.log(`[sessions] Session ended for workspace ${workspaceId.substring(0, 8)}: ${endMarker?.summary || 'no summary'}`);
295
- return res.json({ success: true });
296
- }
297
- catch (err) {
298
- console.error(`[sessions] Failed to end session:`, err);
299
- return res.status(500).json({ error: 'Internal server error', code: 'INTERNAL_ERROR' });
300
- }
301
- });
302
- //# sourceMappingURL=sessions.js.map
@@ -1,7 +0,0 @@
1
- /**
2
- * Teams API Routes
3
- *
4
- * Manage workspace members, invitations, and roles.
5
- */
6
- export declare const teamsRouter: import("express-serve-static-core").Router;
7
- //# sourceMappingURL=teams.d.ts.map
@@ -1,281 +0,0 @@
1
- /**
2
- * Teams API Routes
3
- *
4
- * Manage workspace members, invitations, and roles.
5
- */
6
- import { Router } from 'express';
7
- import { requireAuth } from './auth.js';
8
- import { db } from '../db/index.js';
9
- export const teamsRouter = Router();
10
- // All routes require authentication
11
- teamsRouter.use(requireAuth);
12
- /**
13
- * GET /api/workspaces/:workspaceId/members
14
- * List workspace members
15
- */
16
- teamsRouter.get('/workspaces/:workspaceId/members', async (req, res) => {
17
- const userId = req.session.userId;
18
- const workspaceId = req.params.workspaceId;
19
- try {
20
- // Check user has access to workspace
21
- const canView = await db.workspaceMembers.canView(workspaceId, userId);
22
- if (!canView) {
23
- // Also check if user is the workspace owner (legacy single-user workspaces)
24
- const workspace = await db.workspaces.findById(workspaceId);
25
- if (!workspace || workspace.userId !== userId) {
26
- return res.status(403).json({ error: 'Access denied' });
27
- }
28
- }
29
- const members = await db.workspaceMembers.findByWorkspaceId(workspaceId);
30
- // Fetch user info for each member
31
- const membersWithUsers = await Promise.all(members.map(async (m) => {
32
- const user = await db.users.findById(m.userId);
33
- return {
34
- id: m.id,
35
- userId: m.userId,
36
- role: m.role,
37
- invitedAt: m.invitedAt,
38
- acceptedAt: m.acceptedAt,
39
- isPending: !m.acceptedAt,
40
- user: user
41
- ? {
42
- githubUsername: user.githubUsername,
43
- email: user.email ?? undefined,
44
- avatarUrl: user.avatarUrl ?? undefined,
45
- }
46
- : undefined,
47
- };
48
- }));
49
- res.json({ members: membersWithUsers });
50
- }
51
- catch (error) {
52
- console.error('Error listing members:', error);
53
- res.status(500).json({ error: 'Failed to list members' });
54
- }
55
- });
56
- /**
57
- * POST /api/workspaces/:workspaceId/members
58
- * Invite a user to workspace
59
- */
60
- teamsRouter.post('/workspaces/:workspaceId/members', async (req, res) => {
61
- const userId = req.session.userId;
62
- const workspaceId = req.params.workspaceId;
63
- const { githubUsername, role = 'member' } = req.body;
64
- if (!githubUsername) {
65
- return res.status(400).json({ error: 'GitHub username is required' });
66
- }
67
- const validRoles = ['admin', 'member', 'viewer'];
68
- if (!validRoles.includes(role)) {
69
- return res.status(400).json({ error: 'Invalid role. Must be admin, member, or viewer' });
70
- }
71
- try {
72
- // Check user is owner or admin
73
- const isOwner = await db.workspaceMembers.isOwner(workspaceId, userId);
74
- const workspace = await db.workspaces.findById(workspaceId);
75
- if (!isOwner && workspace?.userId !== userId) {
76
- const membership = await db.workspaceMembers.findMembership(workspaceId, userId);
77
- if (!membership || membership.role !== 'admin') {
78
- return res.status(403).json({ error: 'Only owners and admins can invite members' });
79
- }
80
- }
81
- // Check plan allows team members
82
- const owner = await db.users.findById(workspace.userId);
83
- if (owner?.plan !== 'team' && owner?.plan !== 'enterprise') {
84
- return res.status(402).json({
85
- error: 'Team members require Team or Enterprise plan',
86
- upgrade: '/settings/billing',
87
- });
88
- }
89
- // Find user by GitHub username
90
- const invitee = await db.users.findByGithubUsername(githubUsername);
91
- if (!invitee) {
92
- return res.status(404).json({
93
- error: 'User not found. They must sign up first.',
94
- inviteLink: `https://agent-relay.com/invite?workspace=${workspaceId}`,
95
- });
96
- }
97
- // Check if already a member
98
- const existing = await db.workspaceMembers.findMembership(workspaceId, invitee.id);
99
- if (existing) {
100
- return res.status(409).json({ error: 'User is already a member' });
101
- }
102
- // Add member (pending acceptance)
103
- const member = await db.workspaceMembers.addMember({
104
- workspaceId,
105
- userId: invitee.id,
106
- role,
107
- invitedBy: userId,
108
- });
109
- // TODO: Send email notification to invitee
110
- res.status(201).json({
111
- success: true,
112
- member: {
113
- id: member.id,
114
- userId: member.userId,
115
- role: member.role,
116
- isPending: true,
117
- user: {
118
- githubUsername: invitee.githubUsername,
119
- email: invitee.email,
120
- avatarUrl: invitee.avatarUrl,
121
- },
122
- },
123
- });
124
- }
125
- catch (error) {
126
- console.error('Error inviting member:', error);
127
- res.status(500).json({ error: 'Failed to invite member' });
128
- }
129
- });
130
- /**
131
- * PATCH /api/workspaces/:workspaceId/members/:memberId
132
- * Update member role
133
- */
134
- teamsRouter.patch('/workspaces/:workspaceId/members/:memberId', async (req, res) => {
135
- const userId = req.session.userId;
136
- const workspaceId = req.params.workspaceId;
137
- const memberId = req.params.memberId;
138
- const { role } = req.body;
139
- const validRoles = ['admin', 'member', 'viewer'];
140
- if (!validRoles.includes(role)) {
141
- return res.status(400).json({ error: 'Invalid role' });
142
- }
143
- try {
144
- // Check user is owner or admin
145
- const isOwner = await db.workspaceMembers.isOwner(workspaceId, userId);
146
- const workspace = await db.workspaces.findById(workspaceId);
147
- if (!isOwner && workspace?.userId !== userId) {
148
- return res.status(403).json({ error: 'Only owners can change roles' });
149
- }
150
- // Get the member to update
151
- const members = await db.workspaceMembers.findByWorkspaceId(workspaceId);
152
- const member = members.find((m) => m.id === memberId);
153
- if (!member) {
154
- return res.status(404).json({ error: 'Member not found' });
155
- }
156
- // Can't change owner role
157
- if (member.role === 'owner') {
158
- return res.status(400).json({ error: 'Cannot change owner role' });
159
- }
160
- await db.workspaceMembers.updateRole(workspaceId, member.userId, role);
161
- res.json({ success: true, role });
162
- }
163
- catch (error) {
164
- console.error('Error updating role:', error);
165
- res.status(500).json({ error: 'Failed to update role' });
166
- }
167
- });
168
- /**
169
- * DELETE /api/workspaces/:workspaceId/members/:memberId
170
- * Remove member from workspace
171
- */
172
- teamsRouter.delete('/workspaces/:workspaceId/members/:memberId', async (req, res) => {
173
- const userId = req.session.userId;
174
- const workspaceId = req.params.workspaceId;
175
- const memberId = req.params.memberId;
176
- try {
177
- const members = await db.workspaceMembers.findByWorkspaceId(workspaceId);
178
- const member = members.find((m) => m.id === memberId);
179
- if (!member) {
180
- return res.status(404).json({ error: 'Member not found' });
181
- }
182
- // Users can remove themselves
183
- if (member.userId === userId) {
184
- if (member.role === 'owner') {
185
- return res.status(400).json({ error: 'Owner cannot leave. Transfer ownership first.' });
186
- }
187
- await db.workspaceMembers.removeMember(workspaceId, userId);
188
- return res.json({ success: true });
189
- }
190
- // Otherwise, must be owner or admin
191
- const isOwner = await db.workspaceMembers.isOwner(workspaceId, userId);
192
- const workspace = await db.workspaces.findById(workspaceId);
193
- if (!isOwner && workspace?.userId !== userId) {
194
- const myMembership = await db.workspaceMembers.findMembership(workspaceId, userId);
195
- if (!myMembership || myMembership.role !== 'admin') {
196
- return res.status(403).json({ error: 'Permission denied' });
197
- }
198
- }
199
- // Can't remove owner
200
- if (member.role === 'owner') {
201
- return res.status(400).json({ error: 'Cannot remove owner' });
202
- }
203
- await db.workspaceMembers.removeMember(workspaceId, member.userId);
204
- res.json({ success: true });
205
- }
206
- catch (error) {
207
- console.error('Error removing member:', error);
208
- res.status(500).json({ error: 'Failed to remove member' });
209
- }
210
- });
211
- /**
212
- * GET /api/invites
213
- * Get pending invites for current user
214
- */
215
- teamsRouter.get('/invites', async (req, res) => {
216
- const userId = req.session.userId;
217
- try {
218
- const invites = await db.workspaceMembers.getPendingInvites(userId);
219
- res.json({
220
- invites: invites.map((inv) => ({
221
- id: inv.id,
222
- workspaceId: inv.workspaceId,
223
- workspaceName: inv.workspace_name,
224
- role: inv.role,
225
- invitedAt: inv.invitedAt,
226
- invitedBy: inv.inviter_username,
227
- })),
228
- });
229
- }
230
- catch (error) {
231
- console.error('Error getting invites:', error);
232
- res.status(500).json({ error: 'Failed to get invites' });
233
- }
234
- });
235
- /**
236
- * POST /api/invites/:inviteId/accept
237
- * Accept workspace invitation
238
- */
239
- teamsRouter.post('/invites/:inviteId/accept', async (req, res) => {
240
- const userId = req.session.userId;
241
- const inviteId = req.params.inviteId;
242
- try {
243
- const invites = await db.workspaceMembers.getPendingInvites(userId);
244
- const invite = invites.find((i) => i.id === inviteId);
245
- if (!invite) {
246
- return res.status(404).json({ error: 'Invite not found' });
247
- }
248
- await db.workspaceMembers.acceptInvite(invite.workspaceId, userId);
249
- res.json({
250
- success: true,
251
- workspaceId: invite.workspaceId,
252
- message: 'Invitation accepted',
253
- });
254
- }
255
- catch (error) {
256
- console.error('Error accepting invite:', error);
257
- res.status(500).json({ error: 'Failed to accept invite' });
258
- }
259
- });
260
- /**
261
- * POST /api/invites/:inviteId/decline
262
- * Decline workspace invitation
263
- */
264
- teamsRouter.post('/invites/:inviteId/decline', async (req, res) => {
265
- const userId = req.session.userId;
266
- const inviteId = req.params.inviteId;
267
- try {
268
- const invites = await db.workspaceMembers.getPendingInvites(userId);
269
- const invite = invites.find((i) => i.id === inviteId);
270
- if (!invite) {
271
- return res.status(404).json({ error: 'Invite not found' });
272
- }
273
- await db.workspaceMembers.removeMember(invite.workspaceId, userId);
274
- res.json({ success: true, message: 'Invitation declined' });
275
- }
276
- catch (error) {
277
- console.error('Error declining invite:', error);
278
- res.status(500).json({ error: 'Failed to decline invite' });
279
- }
280
- });
281
- //# sourceMappingURL=teams.js.map
@@ -1,10 +0,0 @@
1
- /**
2
- * Test Helper API Routes
3
- *
4
- * These endpoints are ONLY available in test/development mode.
5
- * They allow integration tests to create users and daemons without OAuth.
6
- *
7
- * IMPORTANT: These routes are disabled in production (NODE_ENV=production).
8
- */
9
- export declare const testHelpersRouter: import("express-serve-static-core").Router;
10
- //# sourceMappingURL=test-helpers.d.ts.map