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,612 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- set -euo pipefail
4
-
5
- log() {
6
- echo "[workspace] $*"
7
- }
8
-
9
- # Debug logging function
10
- debug() {
11
- if [[ "${GH_CREDENTIAL_DEBUG:-}" == "1" ]]; then
12
- echo "[workspace:debug] $*" >&2
13
- fi
14
- }
15
-
16
- # Fix volume permissions and drop to workspace user if running as root
17
- if [[ "$(id -u)" == "0" ]]; then
18
- # Fix /data and /workspace permissions before dropping privileges
19
- # Fresh Fly.io volumes are root-owned, need to chown for workspace user
20
- log "Fixing volume permissions..."
21
- chown -R workspace:workspace /data /workspace 2>/dev/null || true
22
-
23
- # ============================================================================
24
- # SSH Server Setup (for CLI tunneling - Codex OAuth callback forwarding)
25
- # When ENABLE_SSH=true, start SSH server on port 3022 for secure tunneling
26
- # ============================================================================
27
- if [[ "${ENABLE_SSH:-false}" == "true" ]]; then
28
- SSH_PORT="${SSH_PORT:-3022}"
29
- log "Starting SSH server on port ${SSH_PORT}..."
30
-
31
- # Set SSH password for workspace user
32
- SSH_PASS="${SSH_PASSWORD:-devpassword}"
33
- echo "workspace:${SSH_PASS}" | chpasswd
34
-
35
- # Configure SSH server for tunneling
36
- # - Allow password auth (for CLI simplicity)
37
- # - Listen on port 3022 (non-privileged)
38
- # - Allow TCP forwarding (for port tunneling)
39
- mkdir -p /etc/ssh/sshd_config.d
40
- cat > /etc/ssh/sshd_config.d/workspace.conf <<SSHEOF
41
- Port ${SSH_PORT}
42
- PasswordAuthentication yes
43
- PermitRootLogin no
44
- AllowUsers workspace
45
- AllowTcpForwarding yes
46
- GatewayPorts no
47
- X11Forwarding no
48
- SSHEOF
49
-
50
- # Start SSH server in background
51
- /usr/sbin/sshd -e -p "${SSH_PORT}"
52
- log "SSH server started (port ${SSH_PORT}, user: workspace)"
53
- fi
54
-
55
- # ============================================================================
56
- # Persist workspace environment for SSH sessions (must be done as root)
57
- # SSH sessions don't inherit the container's runtime environment, so we write
58
- # critical variables to /etc/profile.d/ which gets sourced by login shells
59
- # ============================================================================
60
- if [[ -n "${CLOUD_API_URL:-}" || -n "${WORKSPACE_ID:-}" ]]; then
61
- log "Persisting workspace environment for SSH sessions"
62
- # Compute HOME path for the env file
63
- _DATA_DIR="${AGENT_RELAY_DATA_DIR:-/data}"
64
- if [[ -n "${WORKSPACE_OWNER_USER_ID:-}" ]]; then
65
- _USER_HOME="${_DATA_DIR}/users/${WORKSPACE_OWNER_USER_ID}"
66
- else
67
- _USER_HOME="/home/workspace"
68
- fi
69
- cat > /etc/profile.d/workspace-env.sh <<ENVEOF
70
- # Workspace environment variables (auto-generated by entrypoint.sh)
71
- export WORKSPACE_ID="${WORKSPACE_ID:-}"
72
- export WORKSPACE_OWNER_USER_ID="${WORKSPACE_OWNER_USER_ID:-}"
73
- export CLOUD_API_URL="${CLOUD_API_URL:-}"
74
- export WORKSPACE_TOKEN="${WORKSPACE_TOKEN:-}"
75
- export WORKSPACE_DIR="${WORKSPACE_DIR:-/workspace}"
76
- export HOME="${_USER_HOME}"
77
- export AGENT_RELAY_USER_ID="${WORKSPACE_OWNER_USER_ID:-}"
78
- export AGENT_RELAY_DATA_DIR="${_DATA_DIR}"
79
- export AGENT_RELAY_API_KEY="${AGENT_RELAY_API_KEY:-}"
80
-
81
- # Source GH_TOKEN from user-writable file if available (written after startup)
82
- # This enables SSH sessions to use the token fetched during container init
83
- if [[ -f "${_USER_HOME}/.gh_token" ]]; then
84
- source "${_USER_HOME}/.gh_token"
85
- fi
86
- ENVEOF
87
- chmod 644 /etc/profile.d/workspace-env.sh
88
- fi
89
-
90
- log "Dropping privileges to workspace user..."
91
- exec gosu workspace "$0" "$@"
92
- fi
93
-
94
- PORT="${AGENT_RELAY_DASHBOARD_PORT:-${PORT:-3888}}"
95
- export AGENT_RELAY_DASHBOARD_PORT="${PORT}"
96
- export PORT="${PORT}"
97
-
98
- # Disable auto-updates for AI CLIs in container environments
99
- # Prevents permission errors when CLIs try to self-update with npm/pip
100
- export DISABLE_AUTOUPDATER=1
101
- # Belt-and-suspenders flags to block Codex/OpenAI update checks
102
- export CODEX_CHECK_FOR_UPDATES=false
103
- export CODEX_DISABLE_AUTOUPDATE=1
104
- export OPENAI_CLI_NO_UPDATE=1
105
- export NO_UPDATE_NOTIFIER=1
106
- export NPM_CONFIG_UPDATE_NOTIFIER=false
107
- log "Auto-updates disabled for AI CLIs (container environment)"
108
-
109
- # ============================================================================
110
- # Git credential helper configuration
111
- # Clean up conflicting credential helpers that gh CLI or other tools may set
112
- # git-credential-relay requires no host-specific overrides to work properly
113
- # ============================================================================
114
- git config --global --unset-all 'credential.https://github.com.helper' 2>/dev/null || true
115
- git config --global --unset-all 'credential.https://gist.github.com.helper' 2>/dev/null || true
116
- log "Git credential helper configured (removed conflicting gh auth overrides)"
117
-
118
- # ============================================================================
119
- # Per-user credential storage setup
120
- # Create user-specific HOME on persistent volume (/data)
121
- # This enables multi-user workspaces where each user has their own credentials
122
- # ============================================================================
123
- DATA_DIR="${AGENT_RELAY_DATA_DIR:-/data}"
124
- if [[ -n "${WORKSPACE_OWNER_USER_ID:-}" ]]; then
125
- USER_HOME="${DATA_DIR}/users/${WORKSPACE_OWNER_USER_ID}"
126
- log "Setting up per-user HOME at ${USER_HOME}"
127
- mkdir -p "${USER_HOME}"
128
- mkdir -p "${USER_HOME}/.claude"
129
- mkdir -p "${USER_HOME}/.codex"
130
- mkdir -p "${USER_HOME}/.config/gcloud"
131
- mkdir -p "${USER_HOME}/.config/gh"
132
- export HOME="${USER_HOME}"
133
- # Ensure user-local bin is on PATH for per-user shims/wrappers
134
- export PATH="${HOME}/.local/bin:${PATH}"
135
- export XDG_CONFIG_HOME="${USER_HOME}/.config"
136
- export AGENT_RELAY_USER_ID="${WORKSPACE_OWNER_USER_ID}"
137
- log "HOME set to ${HOME} (user: ${WORKSPACE_OWNER_USER_ID})"
138
- else
139
- log "No WORKSPACE_OWNER_USER_ID set, using default HOME: ${HOME}"
140
- fi
141
-
142
- WORKSPACE_DIR="${WORKSPACE_DIR:-/workspace}"
143
- REPO_LIST="${REPOSITORIES:-}"
144
-
145
- mkdir -p "${WORKSPACE_DIR}"
146
- cd "${WORKSPACE_DIR}"
147
-
148
- # Configure Git credentials via the gateway (tokens auto-refresh via Nango)
149
- # The credential helper fetches fresh tokens from the cloud API on each git operation
150
- if [[ -n "${CLOUD_API_URL:-}" && -n "${WORKSPACE_ID:-}" && -n "${WORKSPACE_TOKEN:-}" ]]; then
151
- log "Configuring git credential helper (gateway mode)"
152
- git config --global credential.helper "/usr/local/bin/git-credential-relay"
153
- git config --global credential.useHttpPath true
154
- export GIT_TERMINAL_PROMPT=0
155
-
156
- # ============================================================================
157
- # PRE-FETCH GitHub token at startup and export to environment
158
- # This ensures GH_TOKEN is available for git operations and spawned agents
159
- # even if cloud API becomes unreachable later. The credential helper's
160
- # fallback chain will use this token (env > hosts.yml > gh CLI > cloud API).
161
- # ============================================================================
162
- if [[ -z "${GH_TOKEN:-}" ]]; then
163
- log "Fetching GitHub token from cloud API (with retry)..."
164
-
165
- GH_TOKEN_MAX_RETRIES=3
166
- GH_TOKEN_RETRY_DELAY=2
167
- GH_TOKEN_FETCHED=""
168
-
169
- for attempt in $(seq 1 $GH_TOKEN_MAX_RETRIES); do
170
- log "Attempt $attempt/$GH_TOKEN_MAX_RETRIES to fetch token..."
171
-
172
- # Remove -f flag to capture error responses, use -w to get HTTP status
173
- GH_TOKEN_HTTP_CODE=0
174
- GH_TOKEN_RESPONSE=$(curl -s -w "\n%{http_code}" --max-time 10 \
175
- -H "Authorization: Bearer ${WORKSPACE_TOKEN}" \
176
- "${CLOUD_API_URL}/api/git/token?workspaceId=${WORKSPACE_ID}" 2>&1) || true
177
-
178
- # Split response and status code
179
- GH_TOKEN_HTTP_CODE=$(echo "$GH_TOKEN_RESPONSE" | tail -1)
180
- GH_TOKEN_RESPONSE=$(echo "$GH_TOKEN_RESPONSE" | head -n -1)
181
-
182
- debug "HTTP Status: $GH_TOKEN_HTTP_CODE"
183
- debug "Response: ${GH_TOKEN_RESPONSE:0:200}"
184
-
185
- # Handle different failure modes
186
- case "$GH_TOKEN_HTTP_CODE" in
187
- 200)
188
- # Success - parse token
189
- FETCHED_TOKEN=$(echo "$GH_TOKEN_RESPONSE" | jq -r '.userToken // .token // empty' 2>/dev/null)
190
- if [[ -n "${FETCHED_TOKEN}" && "${FETCHED_TOKEN}" != "null" ]]; then
191
- export GH_TOKEN="${FETCHED_TOKEN}"
192
- export GITHUB_TOKEN="${FETCHED_TOKEN}"
193
- echo "export GH_TOKEN=\"${FETCHED_TOKEN}\"" > "${HOME}/.gh_token"
194
- echo "export GITHUB_TOKEN=\"${FETCHED_TOKEN}\"" >> "${HOME}/.gh_token"
195
- chmod 600 "${HOME}/.gh_token"
196
- log "✓ GH_TOKEN fetched successfully (attempt $attempt)"
197
- GH_TOKEN_FETCHED="yes"
198
- break
199
- else
200
- log "WARN: Response 200 but no token in JSON response"
201
- GH_TOKEN_FETCHED="empty-response"
202
- fi
203
- ;;
204
- 401|403)
205
- # Auth error - don't retry
206
- log "ERROR: Authentication failed (HTTP $GH_TOKEN_HTTP_CODE)"
207
- log " Check WORKSPACE_TOKEN and CLOUD_API_URL credentials"
208
- GH_TOKEN_FETCHED="auth-error"
209
- break
210
- ;;
211
- 000|28)
212
- # Network timeout (000=curl error, 28=timeout)
213
- log "WARN: Network timeout on attempt $attempt"
214
- [[ $attempt -lt $GH_TOKEN_MAX_RETRIES ]] && sleep $((GH_TOKEN_RETRY_DELAY * (2 ** (attempt - 1))))
215
- ;;
216
- *)
217
- # Other HTTP errors - could be transient, retry
218
- log "WARN: HTTP $GH_TOKEN_HTTP_CODE on attempt $attempt"
219
- [[ $attempt -lt $GH_TOKEN_MAX_RETRIES ]] && sleep $((GH_TOKEN_RETRY_DELAY * (2 ** (attempt - 1))))
220
- ;;
221
- esac
222
- done
223
-
224
- # Final status
225
- if [[ -z "$GH_TOKEN_FETCHED" ]]; then
226
- log "WARN: Could not fetch GitHub token after $GH_TOKEN_MAX_RETRIES attempts"
227
- log " Git operations will use credential helper fallback chain"
228
- fi
229
- else
230
- log "GH_TOKEN already set in environment"
231
- fi
232
-
233
- # Configure git identity for commits
234
- # Use env vars if set, otherwise default to "Agent Relay" / "agent@agent-relay.com"
235
- DEFAULT_GIT_EMAIL="${AGENT_NAME:-agent}@agent-relay.com"
236
- git config --global user.name "${GIT_USER_NAME:-Agent Relay}"
237
- git config --global user.email "${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}"
238
- log "Git identity configured: ${GIT_USER_NAME:-Agent Relay} <${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}>"
239
-
240
- # Configure gh CLI
241
- # NOTE: Do NOT create hosts.yml with placeholder - it causes migration errors
242
- # when combined with GH_TOKEN. The gh-relay wrapper in /usr/local/bin/gh
243
- # handles token refresh automatically with caching.
244
- # Install and configure gh-credential-relay credential helper
245
- # This allows gh CLI to fetch fresh tokens from cloud API on-demand
246
- if [[ -f "/app/deploy/workspace/gh-credential-relay" ]]; then
247
- sudo install -m 755 /app/deploy/workspace/gh-credential-relay /usr/local/bin/gh-credential-relay
248
- gh config set -h github.com credential-helper gh-credential-relay 2>/dev/null || true
249
- log "Configured gh CLI to use cloud API credential helper"
250
- fi
251
-
252
- mkdir -p "${HOME}/.config/gh"
253
- # Remove any stale hosts.yml that might cause migration errors
254
- rm -f "${HOME}/.config/gh/hosts.yml"
255
-
256
- # The gh-relay wrapper is installed at /usr/local/bin/gh during Docker build.
257
- # It fetches fresh tokens from /api/git/token and caches them for 55 minutes.
258
- # This handles the case where GH_TOKEN expires after ~1 hour.
259
- if [[ -x "/usr/local/bin/gh" ]]; then
260
- log "GitHub CLI wrapper installed at /usr/local/bin/gh (auto-refreshing tokens)"
261
- fi
262
-
263
- # Fallback: Use static GITHUB_TOKEN if provided (legacy mode)
264
- elif [[ -n "${GITHUB_TOKEN:-}" ]]; then
265
- log "Configuring git credentials (legacy static token mode)"
266
- GIT_ASKPASS_SCRIPT="/tmp/git-askpass.sh"
267
- cat > "${GIT_ASKPASS_SCRIPT}" <<'EOF'
268
- #!/usr/bin/env bash
269
- prompt="${1:-}"
270
- if [[ "${prompt}" == *"Username"* ]]; then
271
- echo "x-access-token"
272
- else
273
- echo "${GITHUB_TOKEN}"
274
- fi
275
- EOF
276
- chmod +x "${GIT_ASKPASS_SCRIPT}"
277
- export GIT_ASKPASS="${GIT_ASKPASS_SCRIPT}"
278
- export GIT_TERMINAL_PROMPT=0
279
- export GH_TOKEN="${GITHUB_TOKEN}"
280
-
281
- # Configure git identity for commits
282
- DEFAULT_GIT_EMAIL="${AGENT_NAME:-agent}@agent-relay.com"
283
- git config --global user.name "${GIT_USER_NAME:-Agent Relay}"
284
- git config --global user.email "${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}"
285
- log "Git identity configured: ${GIT_USER_NAME:-Agent Relay} <${GIT_USER_EMAIL:-${DEFAULT_GIT_EMAIL}}>"
286
- fi
287
-
288
- clone_or_update_repo() {
289
- local repo="$1"
290
- repo="${repo// /}"
291
- if [[ -z "${repo}" ]]; then
292
- return
293
- fi
294
-
295
- local repo_name
296
- repo_name="$(basename "${repo}")"
297
- local target="${WORKSPACE_DIR}/${repo_name}"
298
- local url="https://github.com/${repo}.git"
299
-
300
- if [[ -d "${target}/.git" ]]; then
301
- log "Updating ${repo}..."
302
- git -C "${target}" remote set-url origin "${url}" >/dev/null 2>&1 || true
303
- git -C "${target}" fetch --all --prune >/dev/null 2>&1 || true
304
- git -C "${target}" pull --ff-only >/dev/null 2>&1 || true
305
- else
306
- log "Cloning ${repo}..."
307
- # Use shallow clone for faster initial setup (full history not needed for most agent work)
308
- # SHALLOW_CLONE env var can be set to "false" to disable this optimization
309
- if [[ "${SHALLOW_CLONE:-true}" == "true" ]]; then
310
- git clone --depth=1 "${url}" "${target}" >/dev/null 2>&1 || {
311
- log "WARN: Failed to clone ${repo}"
312
- }
313
- else
314
- git clone "${url}" "${target}" >/dev/null 2>&1 || {
315
- log "WARN: Failed to clone ${repo}"
316
- }
317
- fi
318
- fi
319
- # Note: safe.directory config is done after all clones complete (batched)
320
- }
321
-
322
- if [[ -n "${REPO_LIST}" ]]; then
323
- # Check if we have credentials configured (gateway mode or static token)
324
- if [[ -z "${GITHUB_TOKEN:-}" && -z "${CLOUD_API_URL:-}" ]]; then
325
- log "WARN: REPOSITORIES set but no credentials configured; clones may fail."
326
- fi
327
-
328
- IFS=',' read -ra repos <<< "${REPO_LIST}"
329
-
330
- # Clone repositories in PARALLEL for faster startup
331
- # Each clone runs in background, then we wait for all to complete
332
- log "Cloning ${#repos[@]} repositories in parallel..."
333
- for repo in "${repos[@]}"; do
334
- clone_or_update_repo "${repo}" &
335
- done
336
-
337
- # Wait for all background clone jobs to complete
338
- wait
339
- log "All repository clones complete"
340
-
341
- # Batch configure safe.directory for all cloned repos (runs once, not per-repo)
342
- # This prevents "dubious ownership" errors when git runs as different user
343
- for repo in "${repos[@]}"; do
344
- repo="${repo// /}"
345
- if [[ -n "${repo}" ]]; then
346
- repo_name="$(basename "${repo}")"
347
- target="${WORKSPACE_DIR}/${repo_name}"
348
- if [[ -d "${target}/.git" ]]; then
349
- git config --global --add safe.directory "${target}" 2>/dev/null || true
350
- fi
351
- fi
352
- done
353
- fi
354
-
355
- # ============================================================================
356
- # Configure agent policy enforcement for cloud workspaces
357
- # Policy is fetched from cloud API and enforced at runtime
358
- # ============================================================================
359
-
360
- if [[ -n "${CLOUD_API_URL:-}" && -n "${WORKSPACE_ID:-}" ]]; then
361
- log "Enabling agent policy enforcement"
362
- export AGENT_POLICY_ENFORCEMENT=1
363
- # Policy is fetched from ${CLOUD_API_URL}/api/policy/${WORKSPACE_ID}/internal
364
- fi
365
-
366
- # ============================================================================
367
- # Configure AI provider credentials
368
- # Create credential files that CLIs expect from ENV vars passed by provisioner
369
- # ============================================================================
370
-
371
- # Claude CLI expects ~/.claude/.credentials.json (note the dot prefix on filename)
372
- # Format: { claudeAiOauth: { accessToken: "...", refreshToken: "...", expiresAt: ... } }
373
- if [[ -n "${ANTHROPIC_TOKEN:-}" ]]; then
374
- log "Configuring Claude credentials..."
375
- mkdir -p "${HOME}/.claude"
376
- cat > "${HOME}/.claude/.credentials.json" <<EOF
377
- {
378
- "claudeAiOauth": {
379
- "accessToken": "${ANTHROPIC_TOKEN}",
380
- "refreshToken": "${ANTHROPIC_REFRESH_TOKEN:-}",
381
- "expiresAt": ${ANTHROPIC_TOKEN_EXPIRES_AT:-null}
382
- }
383
- }
384
- EOF
385
- chmod 600 "${HOME}/.claude/.credentials.json"
386
- fi
387
-
388
- # Configure Claude Code for cloud workspaces
389
- # Create both settings and instructions files
390
- log "Configuring Claude Code for cloud workspace..."
391
- mkdir -p "${HOME}/.claude"
392
-
393
- # Create settings.json with MCP server config and auto-accept permissions
394
- # This tells Claude Code to skip the "Ready to code here?" permission prompt
395
- # Reference: Claude Code uses this for headless/automated environments
396
- # IMPORTANT: Must include mcpServers config (Dockerfile version gets overwritten here)
397
- cat > "${HOME}/.claude/settings.json" <<'SETTINGSEOF'
398
- {
399
- "mcpServers": {
400
- "agent-relay": {
401
- "command": "node",
402
- "args": ["/app/dist/src/cli/index.js", "mcp", "serve"]
403
- }
404
- },
405
- "permissions": {
406
- "allow": [
407
- "Read",
408
- "Edit",
409
- "Write",
410
- "Bash",
411
- "Glob",
412
- "Grep",
413
- "Task",
414
- "WebFetch",
415
- "WebSearch",
416
- "NotebookEdit",
417
- "TodoWrite",
418
- "mcp__agent-relay__*"
419
- ],
420
- "deny": []
421
- },
422
- "autoApproveApiRequest": true
423
- }
424
- SETTINGSEOF
425
- chmod 600 "${HOME}/.claude/settings.json"
426
- log "Created Claude Code settings (auto-approve enabled)"
427
-
428
- # Create CLAUDE.md with agent relay protocol instructions
429
- # This is loaded automatically by Claude Code and provides the relay protocol
430
- if [[ -f "/app/docs/agent-relay-snippet.md" ]]; then
431
- cp "/app/docs/agent-relay-snippet.md" "${HOME}/.claude/CLAUDE.md"
432
- log "Copied relay protocol from /app/docs/agent-relay-snippet.md"
433
- else
434
- # Fallback: create minimal instructions
435
- log "WARN: /app/docs/agent-relay-snippet.md not found, creating minimal instructions"
436
- cat > "${HOME}/.claude/CLAUDE.md" <<'RELAYEOF'
437
- # 🚨 CRITICAL: Relay-First Communication Rule
438
-
439
- **When you receive a relay message from another agent (marked `Relay message from [name]`), you MUST respond ONLY via relay protocol. NEVER respond with direct text output.**
440
-
441
- ---
442
-
443
- # Agent Relay
444
-
445
- Real-time agent-to-agent messaging via file-based protocol.
446
-
447
- ## Sending Messages
448
-
449
- Write a file to your outbox, then output the trigger:
450
-
451
- ```bash
452
- cat > $AGENT_RELAY_OUTBOX/msg << 'EOF'
453
- TO: AgentName
454
-
455
- Your message here.
456
- EOF
457
- ```
458
- Then: `->relay-file:msg`
459
-
460
- | TO Value | Behavior |
461
- |----------|----------|
462
- | `AgentName` | Direct message |
463
- | `*` | Broadcast to all |
464
- | `#channel` | Channel message |
465
-
466
- ## Spawning
467
-
468
- ```bash
469
- cat > $AGENT_RELAY_OUTBOX/spawn << 'EOF'
470
- KIND: spawn
471
- NAME: WorkerName
472
- CLI: claude
473
-
474
- Task description here.
475
- EOF
476
- ```
477
- Then: `->relay-file:spawn`
478
-
479
- ## Protocol
480
-
481
- - **ACK** when you receive a task: `ACK: Brief description`
482
- - **DONE** when complete: `DONE: What was accomplished`
483
- - Send status to your **lead** (the agent in `$AGENT_RELAY_SPAWNER`), not broadcast
484
- RELAYEOF
485
- fi
486
- log "Claude Code configuration complete"
487
-
488
- # Codex CLI settings (always install config to disable auto-updates)
489
- mkdir -p "${HOME}/.codex"
490
- if [[ -f "/app/deploy/workspace/codex.config.toml" ]]; then
491
- cp "/app/deploy/workspace/codex.config.toml" "${HOME}/.codex/config.toml"
492
- chmod 600 "${HOME}/.codex/config.toml"
493
- log "Codex configuration applied from codex.config.toml"
494
- else
495
- # Fallback: create minimal config (should not happen in production)
496
- log "WARN: codex.config.toml not found, creating minimal config"
497
- cat > "${HOME}/.codex/config.toml" <<CODEXCONFIGEOF
498
- check_for_updates = false
499
- CODEXCONFIGEOF
500
- chmod 600 "${HOME}/.codex/config.toml"
501
- fi
502
- # Also create JSON config for Codex (some versions read config.json instead of config.toml)
503
- cat > "${HOME}/.codex/config.json" <<'CODEXJSON'
504
- {
505
- "check_for_updates": false
506
- }
507
- CODEXJSON
508
- chmod 600 "${HOME}/.codex/config.json"
509
-
510
- # NPM wrapper to block Codex self-updates (no-op when Codex tries npm install -g @openai/codex)
511
- mkdir -p "${HOME}/.local/bin"
512
- cat > "${HOME}/.local/bin/npm" <<'NPMWRAPPER'
513
- #!/usr/bin/env bash
514
- if [[ "$1" == "install" && "$2" == "-g" && "$3" == @openai/codex* ]]; then
515
- echo "npm wrapper: skipping Codex self-update (auto-update disabled)" >&2
516
- exit 0
517
- fi
518
- exec /usr/local/bin/npm "$@"
519
- NPMWRAPPER
520
- chmod +x "${HOME}/.local/bin/npm"
521
-
522
- # Codex CLI expects ~/.codex/auth.json for credentials
523
- # Format: { tokens: { access_token: "...", refresh_token: "...", ... } }
524
- if [[ -n "${OPENAI_TOKEN:-}" ]]; then
525
- log "Configuring Codex credentials..."
526
- cat > "${HOME}/.codex/auth.json" <<EOF
527
- {
528
- "tokens": {
529
- "access_token": "${OPENAI_TOKEN}",
530
- "refresh_token": "${OPENAI_REFRESH_TOKEN:-}"
531
- }
532
- }
533
- EOF
534
- chmod 600 "${HOME}/.codex/auth.json"
535
- fi
536
-
537
- # Google/Gemini - uses application default credentials
538
- if [[ -n "${GOOGLE_TOKEN:-}" ]]; then
539
- log "Configuring Google credentials..."
540
- mkdir -p "${HOME}/.config/gcloud"
541
- cat > "${HOME}/.config/gcloud/application_default_credentials.json" <<EOF
542
- {
543
- "type": "authorized_user",
544
- "access_token": "${GOOGLE_TOKEN}"
545
- }
546
- EOF
547
- chmod 600 "${HOME}/.config/gcloud/application_default_credentials.json"
548
- fi
549
-
550
- # ============================================================================
551
- # Detect workspace path and start daemon
552
- # The daemon must start from the same directory that spawned agents will use
553
- # to ensure consistent socket paths
554
- # ============================================================================
555
-
556
- # Function to detect the actual workspace path (same logic as project-namespace.ts)
557
- detect_workspace_path() {
558
- local base_dir="${1}"
559
-
560
- # 1. Explicit override via env var
561
- if [[ -n "${WORKSPACE_CWD:-}" ]]; then
562
- echo "${WORKSPACE_CWD}"
563
- return
564
- fi
565
-
566
- # 2. Check if base_dir itself is a git repo
567
- if [[ -d "${base_dir}/.git" ]]; then
568
- echo "${base_dir}"
569
- return
570
- fi
571
-
572
- # 3. Scan for cloned repos (directories with .git)
573
- local first_repo=""
574
- for dir in "${base_dir}"/*/; do
575
- if [[ -d "${dir}.git" ]]; then
576
- # Use first repo found (alphabetically sorted by bash glob)
577
- first_repo="${dir%/}"
578
- break
579
- fi
580
- done
581
-
582
- if [[ -n "${first_repo}" ]]; then
583
- echo "${first_repo}"
584
- return
585
- fi
586
-
587
- # 4. Fall back to base_dir
588
- echo "${base_dir}"
589
- }
590
-
591
- # Detect the actual workspace path
592
- ACTUAL_WORKSPACE=$(detect_workspace_path "${WORKSPACE_DIR}")
593
- log "Detected workspace path: ${ACTUAL_WORKSPACE}"
594
-
595
- # Change to the detected workspace before starting daemon
596
- cd "${ACTUAL_WORKSPACE}"
597
-
598
- # Set RELAY_PROJECT from WORKSPACE_ID at runtime (MCP socket discovery uses this)
599
- export RELAY_PROJECT="${WORKSPACE_ID:-${RELAY_PROJECT:-default}}"
600
-
601
- # Ensure node can resolve modules from /app when running from workspace directory
602
- # Without this, @agent-relay/dashboard won't be found since it's in /app/node_modules
603
- export NODE_PATH="/app/node_modules"
604
-
605
- log "Starting agent-relay daemon on port ${PORT} from ${ACTUAL_WORKSPACE}"
606
- args=(/app/dist/src/cli/index.js up --dashboard --port "${PORT}")
607
-
608
- if [[ "${SUPERVISOR_ENABLED:-true}" == "true" ]]; then
609
- args+=("--watch")
610
- fi
611
-
612
- exec node "${args[@]}"
@@ -1,90 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # GitHub CLI Credential Helper for Agent Relay Workspaces
4
- #
5
- # This credential helper provides GitHub authentication tokens to the gh CLI
6
- # by fetching from the cloud API. It works in non-interactive container
7
- # environments without requiring manual gh auth login.
8
- #
9
- # Installation:
10
- # gh config set -h github.com credential-helper gh-credential-relay
11
- #
12
- # Environment variables (auto-set by workspace entrypoint):
13
- # CLOUD_API_URL - Cloud API base URL
14
- # WORKSPACE_ID - Workspace identifier
15
- # WORKSPACE_TOKEN - Bearer token for cloud API auth
16
-
17
- set -euo pipefail
18
-
19
- # Debug logging (enable with GH_CREDENTIAL_DEBUG=1)
20
- debug() {
21
- if [[ "${GH_CREDENTIAL_DEBUG:-}" == "1" ]]; then
22
- echo "gh-credential-relay: $*" >&2
23
- fi
24
- }
25
-
26
- debug "Called with args: $*"
27
-
28
- # Only handle 'get' operation for storing credentials
29
- if [[ "${1:-}" != "get" ]]; then
30
- debug "Ignoring non-get operation: ${1:-}"
31
- exit 0
32
- fi
33
-
34
- # Read input from gh CLI (host, protocol, etc)
35
- declare -A input
36
- while IFS='=' read -r key value; do
37
- [[ -z "$key" ]] && break
38
- input["$key"]="$value"
39
- done
40
-
41
- host="${input[host]:-}"
42
- debug "Host: $host"
43
-
44
- # Only provide credentials for github.com
45
- if [[ "$host" != "github.com" ]]; then
46
- debug "Not github.com, skipping"
47
- exit 0
48
- fi
49
-
50
- # Check required environment variables
51
- if [[ -z "${CLOUD_API_URL:-}" ]]; then
52
- echo "gh-credential-relay: CLOUD_API_URL not set" >&2
53
- exit 1
54
- fi
55
-
56
- if [[ -z "${WORKSPACE_ID:-}" ]]; then
57
- echo "gh-credential-relay: WORKSPACE_ID not set" >&2
58
- exit 1
59
- fi
60
-
61
- if [[ -z "${WORKSPACE_TOKEN:-}" ]]; then
62
- echo "gh-credential-relay: WORKSPACE_TOKEN not set" >&2
63
- exit 1
64
- fi
65
-
66
- debug "Fetching token from ${CLOUD_API_URL}/api/git/token?workspaceId=${WORKSPACE_ID}"
67
-
68
- # Fetch fresh token from cloud API (5 second timeout)
69
- response=$(curl -s --max-time 5 \
70
- -H "Authorization: Bearer ${WORKSPACE_TOKEN}" \
71
- "${CLOUD_API_URL}/api/git/token?workspaceId=${WORKSPACE_ID}" 2>/dev/null) || true
72
-
73
- if [[ -z "$response" ]]; then
74
- debug "No response from cloud API"
75
- exit 1
76
- fi
77
-
78
- # Parse JSON response
79
- token=$(echo "$response" | jq -r '.userToken // .token // empty' 2>/dev/null)
80
-
81
- if [[ -z "$token" ]]; then
82
- debug "No token in response"
83
- exit 1
84
- fi
85
-
86
- # Output in git credential format (same as git-credential-relay)
87
- echo "protocol=https"
88
- echo "host=github.com"
89
- echo "username=x-access-token"
90
- echo "password=${token}"