agent-relay 2.0.22 → 2.0.23

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 (391) 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 +31 -100
  4. package/package.json +22 -29
  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/cloud/dist/server.js +25 -4
  9. package/packages/cloud/package.json +6 -6
  10. package/packages/config/package.json +2 -2
  11. package/packages/continuity/package.json +1 -1
  12. package/packages/daemon/dist/orchestrator.js +19 -1
  13. package/packages/daemon/package.json +12 -12
  14. package/packages/hooks/package.json +4 -4
  15. package/packages/mcp/package.json +2 -2
  16. package/packages/memory/package.json +2 -2
  17. package/packages/policy/package.json +2 -2
  18. package/packages/protocol/package.json +1 -1
  19. package/packages/resiliency/package.json +1 -1
  20. package/packages/sdk/package.json +2 -2
  21. package/packages/spawner/package.json +1 -1
  22. package/packages/state/package.json +1 -1
  23. package/packages/storage/package.json +2 -2
  24. package/packages/telemetry/package.json +1 -1
  25. package/packages/trajectory/package.json +2 -2
  26. package/packages/user-directory/package.json +2 -2
  27. package/packages/utils/dist/update-checker.js +4 -0
  28. package/packages/utils/package.json +1 -1
  29. package/packages/wrapper/package.json +6 -6
  30. package/deploy/workspace/codex.config.toml +0 -20
  31. package/deploy/workspace/entrypoint-browser.sh +0 -118
  32. package/deploy/workspace/entrypoint.sh +0 -612
  33. package/deploy/workspace/gh-credential-relay +0 -90
  34. package/deploy/workspace/gh-relay +0 -156
  35. package/deploy/workspace/git-credential-relay +0 -330
  36. package/deploy/workspace/git-credential-relay.test.sh +0 -230
  37. package/dist/dashboard/out/404.html +0 -1
  38. package/dist/dashboard/out/_next/static/91mkGYq3qbG8WHE6VytQ8/_buildManifest.js +0 -1
  39. package/dist/dashboard/out/_next/static/91mkGYq3qbG8WHE6VytQ8/_ssgManifest.js +0 -1
  40. package/dist/dashboard/out/_next/static/chunks/116-a883fca163f3a5bc.js +0 -1
  41. package/dist/dashboard/out/_next/static/chunks/117-c8afed19e821a35d.js +0 -2
  42. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +0 -1
  43. package/dist/dashboard/out/_next/static/chunks/320-a6304232cd0ee2ce.js +0 -1
  44. package/dist/dashboard/out/_next/static/chunks/532-bace199897eeab37.js +0 -9
  45. package/dist/dashboard/out/_next/static/chunks/631-16b905e5920f9b59.js +0 -1
  46. package/dist/dashboard/out/_next/static/chunks/648-acb2ff9f77cbfbd3.js +0 -1
  47. package/dist/dashboard/out/_next/static/chunks/766-2aea80818f7eb0d8.js +0 -1
  48. package/dist/dashboard/out/_next/static/chunks/83-26d2bde54616ee90.js +0 -1
  49. package/dist/dashboard/out/_next/static/chunks/847-f1f467060f32afff.js +0 -1
  50. package/dist/dashboard/out/_next/static/chunks/891-5cb1513eeb97a891.js +0 -1
  51. package/dist/dashboard/out/_next/static/chunks/app/_not-found/page-60501fddbafba9dc.js +0 -1
  52. package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-9914652442f7e4fb.js +0 -1
  53. package/dist/dashboard/out/_next/static/chunks/app/app/page-366fb7c078d4e9e0.js +0 -1
  54. package/dist/dashboard/out/_next/static/chunks/app/cloud/link/page-fa1d5842aa90e8a6.js +0 -1
  55. package/dist/dashboard/out/_next/static/chunks/app/complete-profile/page-dd64bbdf66b639cd.js +0 -1
  56. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-113060009ef35bc2.js +0 -1
  57. package/dist/dashboard/out/_next/static/chunks/app/history/page-9965d2483011b846.js +0 -1
  58. package/dist/dashboard/out/_next/static/chunks/app/layout-6b91e33784c20610.js +0 -1
  59. package/dist/dashboard/out/_next/static/chunks/app/login/page-435eceb0073be027.js +0 -1
  60. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1e37ef8e73940b40.js +0 -1
  61. package/dist/dashboard/out/_next/static/chunks/app/page-8119d4246743574e.js +0 -1
  62. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-9db3ebdfa567a7c9.js +0 -1
  63. package/dist/dashboard/out/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +0 -1
  64. package/dist/dashboard/out/_next/static/chunks/app/providers/setup/[provider]/page-4dbe33f0f7691b7c.js +0 -1
  65. package/dist/dashboard/out/_next/static/chunks/app/signup/page-c7a0a28341365ae0.js +0 -1
  66. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +0 -18
  67. package/dist/dashboard/out/_next/static/chunks/fd9d1056-609918ca7b6280bb.js +0 -1
  68. package/dist/dashboard/out/_next/static/chunks/framework-f66176bb897dc684.js +0 -1
  69. package/dist/dashboard/out/_next/static/chunks/main-311c3db74dcfadb7.js +0 -1
  70. package/dist/dashboard/out/_next/static/chunks/main-app-fdbeb09028f57c9f.js +0 -1
  71. package/dist/dashboard/out/_next/static/chunks/pages/_app-72b849fbd24ac258.js +0 -1
  72. package/dist/dashboard/out/_next/static/chunks/pages/_error-7ba65e1336b92748.js +0 -1
  73. package/dist/dashboard/out/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  74. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +0 -1
  75. package/dist/dashboard/out/_next/static/css/4034f236dd1a3178.css +0 -1
  76. package/dist/dashboard/out/_next/static/css/6892f8422896ef7a.css +0 -1
  77. package/dist/dashboard/out/alt-logos/agent-relay-logo-128.png +0 -0
  78. package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
  79. package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
  80. package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
  81. package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
  82. package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +0 -45
  83. package/dist/dashboard/out/alt-logos/logo.svg +0 -38
  84. package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
  85. package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
  86. package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
  87. package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
  88. package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
  89. package/dist/dashboard/out/alt-logos/monogram-logo.svg +0 -38
  90. package/dist/dashboard/out/app/onboarding.html +0 -1
  91. package/dist/dashboard/out/app/onboarding.txt +0 -7
  92. package/dist/dashboard/out/app.html +0 -1
  93. package/dist/dashboard/out/app.txt +0 -7
  94. package/dist/dashboard/out/apple-icon.png +0 -0
  95. package/dist/dashboard/out/cloud/link.html +0 -1
  96. package/dist/dashboard/out/cloud/link.txt +0 -7
  97. package/dist/dashboard/out/complete-profile.html +0 -5
  98. package/dist/dashboard/out/complete-profile.txt +0 -7
  99. package/dist/dashboard/out/connect-repos.html +0 -1
  100. package/dist/dashboard/out/connect-repos.txt +0 -7
  101. package/dist/dashboard/out/history.html +0 -1
  102. package/dist/dashboard/out/history.txt +0 -7
  103. package/dist/dashboard/out/index.html +0 -1
  104. package/dist/dashboard/out/index.txt +0 -7
  105. package/dist/dashboard/out/login.html +0 -5
  106. package/dist/dashboard/out/login.txt +0 -7
  107. package/dist/dashboard/out/metrics.html +0 -1
  108. package/dist/dashboard/out/metrics.txt +0 -7
  109. package/dist/dashboard/out/pricing.html +0 -13
  110. package/dist/dashboard/out/pricing.txt +0 -7
  111. package/dist/dashboard/out/providers/setup/claude.html +0 -1
  112. package/dist/dashboard/out/providers/setup/claude.txt +0 -8
  113. package/dist/dashboard/out/providers/setup/codex.html +0 -1
  114. package/dist/dashboard/out/providers/setup/codex.txt +0 -8
  115. package/dist/dashboard/out/providers/setup/cursor.html +0 -1
  116. package/dist/dashboard/out/providers/setup/cursor.txt +0 -8
  117. package/dist/dashboard/out/providers.html +0 -1
  118. package/dist/dashboard/out/providers.txt +0 -7
  119. package/dist/dashboard/out/signup.html +0 -6
  120. package/dist/dashboard/out/signup.txt +0 -7
  121. package/dist/src/dashboard-server/index.d.ts +0 -8
  122. package/dist/src/dashboard-server/index.js +0 -8
  123. package/packages/dashboard/README.md +0 -48
  124. package/packages/dashboard/dist/health-worker-manager.d.ts +0 -62
  125. package/packages/dashboard/dist/health-worker-manager.js +0 -144
  126. package/packages/dashboard/dist/health-worker.d.ts +0 -9
  127. package/packages/dashboard/dist/health-worker.js +0 -79
  128. package/packages/dashboard/dist/index.d.ts +0 -20
  129. package/packages/dashboard/dist/index.js +0 -19
  130. package/packages/dashboard/dist/metrics.d.ts +0 -105
  131. package/packages/dashboard/dist/metrics.js +0 -193
  132. package/packages/dashboard/dist/needs-attention.d.ts +0 -24
  133. package/packages/dashboard/dist/needs-attention.js +0 -78
  134. package/packages/dashboard/dist/server.d.ts +0 -25
  135. package/packages/dashboard/dist/server.js +0 -5270
  136. package/packages/dashboard/dist/start.d.ts +0 -6
  137. package/packages/dashboard/dist/start.js +0 -13
  138. package/packages/dashboard/dist/types/threading.d.ts +0 -8
  139. package/packages/dashboard/dist/types/threading.js +0 -2
  140. package/packages/dashboard/dist/user-bridge.d.ts +0 -154
  141. package/packages/dashboard/dist/user-bridge.js +0 -372
  142. package/packages/dashboard/package.json +0 -65
  143. package/packages/dashboard/ui/app/app/onboarding/page.tsx +0 -394
  144. package/packages/dashboard/ui/app/app/page.tsx +0 -667
  145. package/packages/dashboard/ui/app/apple-icon.png +0 -0
  146. package/packages/dashboard/ui/app/cloud/link/page.tsx +0 -464
  147. package/packages/dashboard/ui/app/complete-profile/page.tsx +0 -204
  148. package/packages/dashboard/ui/app/connect-repos/page.tsx +0 -410
  149. package/packages/dashboard/ui/app/favicon.png +0 -0
  150. package/packages/dashboard/ui/app/globals.css +0 -59
  151. package/packages/dashboard/ui/app/history/page.tsx +0 -658
  152. package/packages/dashboard/ui/app/layout.tsx +0 -25
  153. package/packages/dashboard/ui/app/login/page.tsx +0 -424
  154. package/packages/dashboard/ui/app/metrics/page.tsx +0 -751
  155. package/packages/dashboard/ui/app/page.tsx +0 -59
  156. package/packages/dashboard/ui/app/pricing/page.tsx +0 -7
  157. package/packages/dashboard/ui/app/providers/page.tsx +0 -193
  158. package/packages/dashboard/ui/app/providers/setup/[provider]/ProviderSetupClient.tsx +0 -148
  159. package/packages/dashboard/ui/app/providers/setup/[provider]/constants.ts +0 -35
  160. package/packages/dashboard/ui/app/providers/setup/[provider]/page.tsx +0 -42
  161. package/packages/dashboard/ui/app/signup/page.tsx +0 -533
  162. package/packages/dashboard/ui/index.ts +0 -49
  163. package/packages/dashboard/ui/landing/LandingPage.tsx +0 -713
  164. package/packages/dashboard/ui/landing/PricingPage.tsx +0 -559
  165. package/packages/dashboard/ui/landing/index.ts +0 -6
  166. package/packages/dashboard/ui/landing/styles.css +0 -2850
  167. package/packages/dashboard/ui/lib/agent-merge.ts +0 -35
  168. package/packages/dashboard/ui/lib/api.ts +0 -1155
  169. package/packages/dashboard/ui/lib/cloudApi.ts +0 -877
  170. package/packages/dashboard/ui/lib/colors.ts +0 -218
  171. package/packages/dashboard/ui/lib/hierarchy.ts +0 -242
  172. package/packages/dashboard/ui/lib/stuckDetection.ts +0 -142
  173. package/packages/dashboard/ui/next-env.d.ts +0 -5
  174. package/packages/dashboard/ui/next.config.js +0 -41
  175. package/packages/dashboard/ui/package-lock.json +0 -2882
  176. package/packages/dashboard/ui/package.json +0 -33
  177. package/packages/dashboard/ui/postcss.config.js +0 -5
  178. package/packages/dashboard/ui/react-components/ActivityFeed.tsx +0 -216
  179. package/packages/dashboard/ui/react-components/AddWorkspaceModal.tsx +0 -170
  180. package/packages/dashboard/ui/react-components/AgentCard.tsx +0 -587
  181. package/packages/dashboard/ui/react-components/AgentList.tsx +0 -411
  182. package/packages/dashboard/ui/react-components/AgentProfilePanel.tsx +0 -564
  183. package/packages/dashboard/ui/react-components/App.tsx +0 -3033
  184. package/packages/dashboard/ui/react-components/BillingPanel.tsx +0 -922
  185. package/packages/dashboard/ui/react-components/BillingResult.tsx +0 -447
  186. package/packages/dashboard/ui/react-components/BroadcastComposer.tsx +0 -690
  187. package/packages/dashboard/ui/react-components/ChannelAdminPanel.tsx +0 -773
  188. package/packages/dashboard/ui/react-components/ChannelBrowser.tsx +0 -385
  189. package/packages/dashboard/ui/react-components/ChannelChat.tsx +0 -261
  190. package/packages/dashboard/ui/react-components/ChannelSidebar.tsx +0 -399
  191. package/packages/dashboard/ui/react-components/CloudSessionProvider.tsx +0 -130
  192. package/packages/dashboard/ui/react-components/CommandPalette.tsx +0 -815
  193. package/packages/dashboard/ui/react-components/ConfirmationDialog.tsx +0 -133
  194. package/packages/dashboard/ui/react-components/ConversationHistory.tsx +0 -518
  195. package/packages/dashboard/ui/react-components/CoordinatorPanel.tsx +0 -944
  196. package/packages/dashboard/ui/react-components/DecisionQueue.tsx +0 -717
  197. package/packages/dashboard/ui/react-components/DirectMessageView.tsx +0 -164
  198. package/packages/dashboard/ui/react-components/FileAutocomplete.tsx +0 -368
  199. package/packages/dashboard/ui/react-components/FleetOverview.tsx +0 -278
  200. package/packages/dashboard/ui/react-components/LogViewer.tsx +0 -310
  201. package/packages/dashboard/ui/react-components/LogViewerPanel.tsx +0 -482
  202. package/packages/dashboard/ui/react-components/Logo.tsx +0 -284
  203. package/packages/dashboard/ui/react-components/MentionAutocomplete.tsx +0 -384
  204. package/packages/dashboard/ui/react-components/MessageComposer.tsx +0 -457
  205. package/packages/dashboard/ui/react-components/MessageList.tsx +0 -649
  206. package/packages/dashboard/ui/react-components/MessageSenderName.tsx +0 -91
  207. package/packages/dashboard/ui/react-components/MessageStatusIndicator.tsx +0 -142
  208. package/packages/dashboard/ui/react-components/NewConversationModal.tsx +0 -400
  209. package/packages/dashboard/ui/react-components/NotificationToast.tsx +0 -488
  210. package/packages/dashboard/ui/react-components/OnlineUsersIndicator.tsx +0 -164
  211. package/packages/dashboard/ui/react-components/Pagination.tsx +0 -124
  212. package/packages/dashboard/ui/react-components/PricingPlans.tsx +0 -386
  213. package/packages/dashboard/ui/react-components/ProjectList.tsx +0 -625
  214. package/packages/dashboard/ui/react-components/ProviderAuthFlow.tsx +0 -853
  215. package/packages/dashboard/ui/react-components/ProviderConnectionList.tsx +0 -378
  216. package/packages/dashboard/ui/react-components/ProvisioningProgress.tsx +0 -730
  217. package/packages/dashboard/ui/react-components/RepoAccessPanel.tsx +0 -549
  218. package/packages/dashboard/ui/react-components/ServerCard.tsx +0 -202
  219. package/packages/dashboard/ui/react-components/SessionExpiredModal.tsx +0 -128
  220. package/packages/dashboard/ui/react-components/SpawnModal.tsx +0 -804
  221. package/packages/dashboard/ui/react-components/TaskAssignmentUI.tsx +0 -375
  222. package/packages/dashboard/ui/react-components/TerminalProviderSetup.tsx +0 -608
  223. package/packages/dashboard/ui/react-components/ThemeProvider.tsx +0 -325
  224. package/packages/dashboard/ui/react-components/ThinkingIndicator.tsx +0 -231
  225. package/packages/dashboard/ui/react-components/ThreadList.tsx +0 -198
  226. package/packages/dashboard/ui/react-components/ThreadPanel.tsx +0 -346
  227. package/packages/dashboard/ui/react-components/TrajectoryViewer.tsx +0 -698
  228. package/packages/dashboard/ui/react-components/TypingIndicator.tsx +0 -69
  229. package/packages/dashboard/ui/react-components/UsageBanner.tsx +0 -231
  230. package/packages/dashboard/ui/react-components/UserProfilePanel.tsx +0 -233
  231. package/packages/dashboard/ui/react-components/WorkspaceContext.tsx +0 -107
  232. package/packages/dashboard/ui/react-components/WorkspaceSelector.tsx +0 -234
  233. package/packages/dashboard/ui/react-components/WorkspaceStatusIndicator.tsx +0 -370
  234. package/packages/dashboard/ui/react-components/XTermInteractive.tsx +0 -510
  235. package/packages/dashboard/ui/react-components/XTermLogViewer.tsx +0 -719
  236. package/packages/dashboard/ui/react-components/channels/ChannelDialogs.tsx +0 -1411
  237. package/packages/dashboard/ui/react-components/channels/ChannelHeader.tsx +0 -317
  238. package/packages/dashboard/ui/react-components/channels/ChannelMessageList.tsx +0 -463
  239. package/packages/dashboard/ui/react-components/channels/ChannelViewV1.tsx +0 -146
  240. package/packages/dashboard/ui/react-components/channels/MessageInput.tsx +0 -288
  241. package/packages/dashboard/ui/react-components/channels/SearchInput.tsx +0 -172
  242. package/packages/dashboard/ui/react-components/channels/SearchResults.tsx +0 -336
  243. package/packages/dashboard/ui/react-components/channels/api.ts +0 -697
  244. package/packages/dashboard/ui/react-components/channels/index.ts +0 -76
  245. package/packages/dashboard/ui/react-components/channels/mockApi.ts +0 -344
  246. package/packages/dashboard/ui/react-components/channels/types.ts +0 -566
  247. package/packages/dashboard/ui/react-components/hooks/index.ts +0 -57
  248. package/packages/dashboard/ui/react-components/hooks/useAgentLogs.ts +0 -394
  249. package/packages/dashboard/ui/react-components/hooks/useAgents.ts +0 -127
  250. package/packages/dashboard/ui/react-components/hooks/useBroadcastDedup.ts +0 -86
  251. package/packages/dashboard/ui/react-components/hooks/useChannelAdmin.ts +0 -329
  252. package/packages/dashboard/ui/react-components/hooks/useChannelBrowser.ts +0 -239
  253. package/packages/dashboard/ui/react-components/hooks/useChannelCommands.ts +0 -138
  254. package/packages/dashboard/ui/react-components/hooks/useChannels.ts +0 -328
  255. package/packages/dashboard/ui/react-components/hooks/useDebounce.ts +0 -29
  256. package/packages/dashboard/ui/react-components/hooks/useDirectMessage.ts +0 -141
  257. package/packages/dashboard/ui/react-components/hooks/useMessages.ts +0 -309
  258. package/packages/dashboard/ui/react-components/hooks/useOrchestrator.ts +0 -364
  259. package/packages/dashboard/ui/react-components/hooks/usePinnedAgents.ts +0 -140
  260. package/packages/dashboard/ui/react-components/hooks/usePresence.ts +0 -340
  261. package/packages/dashboard/ui/react-components/hooks/useRecentRepos.ts +0 -130
  262. package/packages/dashboard/ui/react-components/hooks/useSession.ts +0 -209
  263. package/packages/dashboard/ui/react-components/hooks/useTrajectory.ts +0 -265
  264. package/packages/dashboard/ui/react-components/hooks/useWebSocket.ts +0 -169
  265. package/packages/dashboard/ui/react-components/hooks/useWorkspaceMembers.ts +0 -120
  266. package/packages/dashboard/ui/react-components/hooks/useWorkspaceRepos.ts +0 -73
  267. package/packages/dashboard/ui/react-components/hooks/useWorkspaceStatus.ts +0 -237
  268. package/packages/dashboard/ui/react-components/index.ts +0 -81
  269. package/packages/dashboard/ui/react-components/layout/Header.tsx +0 -355
  270. package/packages/dashboard/ui/react-components/layout/RepoContextHeader.tsx +0 -361
  271. package/packages/dashboard/ui/react-components/layout/Sidebar.archive.test.tsx +0 -126
  272. package/packages/dashboard/ui/react-components/layout/Sidebar.test.tsx +0 -691
  273. package/packages/dashboard/ui/react-components/layout/Sidebar.tsx +0 -930
  274. package/packages/dashboard/ui/react-components/layout/index.ts +0 -7
  275. package/packages/dashboard/ui/react-components/settings/BillingSettingsPanel.tsx +0 -564
  276. package/packages/dashboard/ui/react-components/settings/SettingsPage.tsx +0 -544
  277. package/packages/dashboard/ui/react-components/settings/TeamSettingsPanel.tsx +0 -560
  278. package/packages/dashboard/ui/react-components/settings/WorkspaceSettingsPanel.tsx +0 -1386
  279. package/packages/dashboard/ui/react-components/settings/index.ts +0 -11
  280. package/packages/dashboard/ui/react-components/settings/types.ts +0 -53
  281. package/packages/dashboard/ui/react-components/utils/messageFormatting.tsx +0 -370
  282. package/packages/dashboard/ui/tailwind.config.js +0 -148
  283. package/packages/dashboard/ui/types/index.ts +0 -304
  284. package/packages/dashboard/ui/types/threading.ts +0 -7
  285. package/packages/dashboard/ui-dist/404.html +0 -1
  286. package/packages/dashboard/ui-dist/_next/static/91mkGYq3qbG8WHE6VytQ8/_buildManifest.js +0 -1
  287. package/packages/dashboard/ui-dist/_next/static/91mkGYq3qbG8WHE6VytQ8/_ssgManifest.js +0 -1
  288. package/packages/dashboard/ui-dist/_next/static/T2rV14eEU5OweDeV29SvG/_buildManifest.js +0 -1
  289. package/packages/dashboard/ui-dist/_next/static/T2rV14eEU5OweDeV29SvG/_ssgManifest.js +0 -1
  290. package/packages/dashboard/ui-dist/_next/static/chunks/116-a883fca163f3a5bc.js +0 -1
  291. package/packages/dashboard/ui-dist/_next/static/chunks/117-c8afed19e821a35d.js +0 -2
  292. package/packages/dashboard/ui-dist/_next/static/chunks/282-980c2eb8fff20123.js +0 -1
  293. package/packages/dashboard/ui-dist/_next/static/chunks/320-a6304232cd0ee2ce.js +0 -1
  294. package/packages/dashboard/ui-dist/_next/static/chunks/532-bace199897eeab37.js +0 -9
  295. package/packages/dashboard/ui-dist/_next/static/chunks/631-16b905e5920f9b59.js +0 -1
  296. package/packages/dashboard/ui-dist/_next/static/chunks/648-acb2ff9f77cbfbd3.js +0 -1
  297. package/packages/dashboard/ui-dist/_next/static/chunks/766-2aea80818f7eb0d8.js +0 -1
  298. package/packages/dashboard/ui-dist/_next/static/chunks/83-26d2bde54616ee90.js +0 -1
  299. package/packages/dashboard/ui-dist/_next/static/chunks/847-f1f467060f32afff.js +0 -1
  300. package/packages/dashboard/ui-dist/_next/static/chunks/891-5cb1513eeb97a891.js +0 -1
  301. package/packages/dashboard/ui-dist/_next/static/chunks/app/_not-found/page-60501fddbafba9dc.js +0 -1
  302. package/packages/dashboard/ui-dist/_next/static/chunks/app/app/onboarding/page-9914652442f7e4fb.js +0 -1
  303. package/packages/dashboard/ui-dist/_next/static/chunks/app/app/page-366fb7c078d4e9e0.js +0 -1
  304. package/packages/dashboard/ui-dist/_next/static/chunks/app/cloud/link/page-fa1d5842aa90e8a6.js +0 -1
  305. package/packages/dashboard/ui-dist/_next/static/chunks/app/complete-profile/page-dd64bbdf66b639cd.js +0 -1
  306. package/packages/dashboard/ui-dist/_next/static/chunks/app/connect-repos/page-113060009ef35bc2.js +0 -1
  307. package/packages/dashboard/ui-dist/_next/static/chunks/app/history/page-9965d2483011b846.js +0 -1
  308. package/packages/dashboard/ui-dist/_next/static/chunks/app/layout-6b91e33784c20610.js +0 -1
  309. package/packages/dashboard/ui-dist/_next/static/chunks/app/login/page-435eceb0073be027.js +0 -1
  310. package/packages/dashboard/ui-dist/_next/static/chunks/app/metrics/page-1e37ef8e73940b40.js +0 -1
  311. package/packages/dashboard/ui-dist/_next/static/chunks/app/page-8119d4246743574e.js +0 -1
  312. package/packages/dashboard/ui-dist/_next/static/chunks/app/pricing/page-9db3ebdfa567a7c9.js +0 -1
  313. package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +0 -1
  314. package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/setup/[provider]/page-4dbe33f0f7691b7c.js +0 -1
  315. package/packages/dashboard/ui-dist/_next/static/chunks/app/signup/page-c7a0a28341365ae0.js +0 -1
  316. package/packages/dashboard/ui-dist/_next/static/chunks/e868780c-48e5f147c90a3a41.js +0 -18
  317. package/packages/dashboard/ui-dist/_next/static/chunks/fd9d1056-609918ca7b6280bb.js +0 -1
  318. package/packages/dashboard/ui-dist/_next/static/chunks/framework-f66176bb897dc684.js +0 -1
  319. package/packages/dashboard/ui-dist/_next/static/chunks/main-311c3db74dcfadb7.js +0 -1
  320. package/packages/dashboard/ui-dist/_next/static/chunks/main-app-fdbeb09028f57c9f.js +0 -1
  321. package/packages/dashboard/ui-dist/_next/static/chunks/pages/_app-72b849fbd24ac258.js +0 -1
  322. package/packages/dashboard/ui-dist/_next/static/chunks/pages/_error-7ba65e1336b92748.js +0 -1
  323. package/packages/dashboard/ui-dist/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  324. package/packages/dashboard/ui-dist/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +0 -1
  325. package/packages/dashboard/ui-dist/_next/static/css/4034f236dd1a3178.css +0 -1
  326. package/packages/dashboard/ui-dist/_next/static/css/6892f8422896ef7a.css +0 -1
  327. package/packages/dashboard/ui-dist/_next/static/l8L2OscDSR2vsMIlWcC48/_buildManifest.js +0 -1
  328. package/packages/dashboard/ui-dist/_next/static/l8L2OscDSR2vsMIlWcC48/_ssgManifest.js +0 -1
  329. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-128.png +0 -0
  330. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-256.png +0 -0
  331. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-32.png +0 -0
  332. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-512.png +0 -0
  333. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-64.png +0 -0
  334. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo.svg +0 -45
  335. package/packages/dashboard/ui-dist/alt-logos/logo.svg +0 -38
  336. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-128.png +0 -0
  337. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-256.png +0 -0
  338. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-32.png +0 -0
  339. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-512.png +0 -0
  340. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-64.png +0 -0
  341. package/packages/dashboard/ui-dist/alt-logos/monogram-logo.svg +0 -38
  342. package/packages/dashboard/ui-dist/app/onboarding.html +0 -1
  343. package/packages/dashboard/ui-dist/app/onboarding.txt +0 -7
  344. package/packages/dashboard/ui-dist/app.html +0 -1
  345. package/packages/dashboard/ui-dist/app.txt +0 -7
  346. package/packages/dashboard/ui-dist/apple-icon.png +0 -0
  347. package/packages/dashboard/ui-dist/cloud/link.html +0 -1
  348. package/packages/dashboard/ui-dist/cloud/link.txt +0 -7
  349. package/packages/dashboard/ui-dist/complete-profile.html +0 -5
  350. package/packages/dashboard/ui-dist/complete-profile.txt +0 -7
  351. package/packages/dashboard/ui-dist/connect-repos.html +0 -1
  352. package/packages/dashboard/ui-dist/connect-repos.txt +0 -7
  353. package/packages/dashboard/ui-dist/history.html +0 -1
  354. package/packages/dashboard/ui-dist/history.txt +0 -7
  355. package/packages/dashboard/ui-dist/index.html +0 -1
  356. package/packages/dashboard/ui-dist/index.txt +0 -7
  357. package/packages/dashboard/ui-dist/login.html +0 -5
  358. package/packages/dashboard/ui-dist/login.txt +0 -7
  359. package/packages/dashboard/ui-dist/metrics.html +0 -1
  360. package/packages/dashboard/ui-dist/metrics.txt +0 -7
  361. package/packages/dashboard/ui-dist/pricing.html +0 -13
  362. package/packages/dashboard/ui-dist/pricing.txt +0 -7
  363. package/packages/dashboard/ui-dist/providers/setup/claude.html +0 -1
  364. package/packages/dashboard/ui-dist/providers/setup/claude.txt +0 -8
  365. package/packages/dashboard/ui-dist/providers/setup/codex.html +0 -1
  366. package/packages/dashboard/ui-dist/providers/setup/codex.txt +0 -8
  367. package/packages/dashboard/ui-dist/providers/setup/cursor.html +0 -1
  368. package/packages/dashboard/ui-dist/providers/setup/cursor.txt +0 -8
  369. package/packages/dashboard/ui-dist/providers.html +0 -1
  370. package/packages/dashboard/ui-dist/providers.txt +0 -7
  371. package/packages/dashboard/ui-dist/signup.html +0 -6
  372. package/packages/dashboard/ui-dist/signup.txt +0 -7
  373. package/packages/dashboard-server/dist/health-worker-manager.d.ts +0 -62
  374. package/packages/dashboard-server/dist/health-worker-manager.js +0 -144
  375. package/packages/dashboard-server/dist/health-worker.d.ts +0 -9
  376. package/packages/dashboard-server/dist/health-worker.js +0 -79
  377. package/packages/dashboard-server/dist/index.d.ts +0 -18
  378. package/packages/dashboard-server/dist/index.js +0 -17
  379. package/packages/dashboard-server/dist/metrics.d.ts +0 -105
  380. package/packages/dashboard-server/dist/metrics.js +0 -193
  381. package/packages/dashboard-server/dist/needs-attention.d.ts +0 -24
  382. package/packages/dashboard-server/dist/needs-attention.js +0 -78
  383. package/packages/dashboard-server/dist/server.d.ts +0 -25
  384. package/packages/dashboard-server/dist/server.js +0 -5158
  385. package/packages/dashboard-server/dist/start.d.ts +0 -6
  386. package/packages/dashboard-server/dist/start.js +0 -13
  387. package/packages/dashboard-server/dist/types/threading.d.ts +0 -8
  388. package/packages/dashboard-server/dist/types/threading.js +0 -2
  389. package/packages/dashboard-server/dist/user-bridge.d.ts +0 -158
  390. package/packages/dashboard-server/dist/user-bridge.js +0 -390
  391. package/packages/dashboard-server/package.json +0 -55
@@ -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}"