agent-relay 2.0.21 → 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 (412) 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 +21 -1
  13. package/packages/daemon/dist/router.d.ts +5 -0
  14. package/packages/daemon/dist/router.js +31 -0
  15. package/packages/daemon/dist/server.d.ts +5 -0
  16. package/packages/daemon/dist/server.js +131 -1
  17. package/packages/daemon/package.json +12 -12
  18. package/packages/hooks/package.json +4 -4
  19. package/packages/mcp/dist/client.d.ts +15 -0
  20. package/packages/mcp/dist/client.js +9 -0
  21. package/packages/mcp/dist/server.js +13 -1
  22. package/packages/mcp/dist/tools/index.d.ts +2 -0
  23. package/packages/mcp/dist/tools/index.js +2 -0
  24. package/packages/mcp/dist/tools/relay-connected.d.ts +17 -0
  25. package/packages/mcp/dist/tools/relay-connected.js +40 -0
  26. package/packages/mcp/dist/tools/relay-remove-agent.d.ts +20 -0
  27. package/packages/mcp/dist/tools/relay-remove-agent.js +50 -0
  28. package/packages/mcp/package.json +2 -2
  29. package/packages/memory/package.json +2 -2
  30. package/packages/policy/package.json +2 -2
  31. package/packages/protocol/dist/types.d.ts +46 -1
  32. package/packages/protocol/package.json +1 -1
  33. package/packages/resiliency/package.json +1 -1
  34. package/packages/sdk/dist/client.d.ts +22 -1
  35. package/packages/sdk/dist/client.js +31 -0
  36. package/packages/sdk/dist/protocol/index.d.ts +1 -1
  37. package/packages/sdk/dist/protocol/types.d.ts +35 -1
  38. package/packages/sdk/package.json +2 -2
  39. package/packages/spawner/package.json +1 -1
  40. package/packages/state/package.json +1 -1
  41. package/packages/storage/dist/adapter.d.ts +4 -0
  42. package/packages/storage/dist/sqlite-adapter.d.ts +10 -0
  43. package/packages/storage/dist/sqlite-adapter.js +26 -0
  44. package/packages/storage/package.json +2 -2
  45. package/packages/telemetry/package.json +1 -1
  46. package/packages/trajectory/package.json +2 -2
  47. package/packages/user-directory/package.json +2 -2
  48. package/packages/utils/dist/update-checker.js +4 -0
  49. package/packages/utils/package.json +1 -1
  50. package/packages/wrapper/package.json +6 -6
  51. package/deploy/workspace/codex.config.toml +0 -20
  52. package/deploy/workspace/entrypoint-browser.sh +0 -118
  53. package/deploy/workspace/entrypoint.sh +0 -612
  54. package/deploy/workspace/gh-credential-relay +0 -90
  55. package/deploy/workspace/gh-relay +0 -156
  56. package/deploy/workspace/git-credential-relay +0 -330
  57. package/deploy/workspace/git-credential-relay.test.sh +0 -230
  58. package/dist/dashboard/out/404.html +0 -1
  59. package/dist/dashboard/out/_next/static/7MZPqYkVGw3EGzVBkVmY9/_buildManifest.js +0 -1
  60. package/dist/dashboard/out/_next/static/7MZPqYkVGw3EGzVBkVmY9/_ssgManifest.js +0 -1
  61. package/dist/dashboard/out/_next/static/chunks/116-a883fca163f3a5bc.js +0 -1
  62. package/dist/dashboard/out/_next/static/chunks/117-c8afed19e821a35d.js +0 -2
  63. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +0 -1
  64. package/dist/dashboard/out/_next/static/chunks/320-a6304232cd0ee2ce.js +0 -1
  65. package/dist/dashboard/out/_next/static/chunks/532-bace199897eeab37.js +0 -9
  66. package/dist/dashboard/out/_next/static/chunks/631-16b905e5920f9b59.js +0 -1
  67. package/dist/dashboard/out/_next/static/chunks/648-acb2ff9f77cbfbd3.js +0 -1
  68. package/dist/dashboard/out/_next/static/chunks/766-2aea80818f7eb0d8.js +0 -1
  69. package/dist/dashboard/out/_next/static/chunks/83-26d2bde54616ee90.js +0 -1
  70. package/dist/dashboard/out/_next/static/chunks/847-f1f467060f32afff.js +0 -1
  71. package/dist/dashboard/out/_next/static/chunks/891-5cb1513eeb97a891.js +0 -1
  72. package/dist/dashboard/out/_next/static/chunks/app/_not-found/page-60501fddbafba9dc.js +0 -1
  73. package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-9914652442f7e4fb.js +0 -1
  74. package/dist/dashboard/out/_next/static/chunks/app/app/page-366fb7c078d4e9e0.js +0 -1
  75. package/dist/dashboard/out/_next/static/chunks/app/cloud/link/page-fa1d5842aa90e8a6.js +0 -1
  76. package/dist/dashboard/out/_next/static/chunks/app/complete-profile/page-dd64bbdf66b639cd.js +0 -1
  77. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-113060009ef35bc2.js +0 -1
  78. package/dist/dashboard/out/_next/static/chunks/app/history/page-9965d2483011b846.js +0 -1
  79. package/dist/dashboard/out/_next/static/chunks/app/layout-6b91e33784c20610.js +0 -1
  80. package/dist/dashboard/out/_next/static/chunks/app/login/page-435eceb0073be027.js +0 -1
  81. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1e37ef8e73940b40.js +0 -1
  82. package/dist/dashboard/out/_next/static/chunks/app/page-8119d4246743574e.js +0 -1
  83. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-9db3ebdfa567a7c9.js +0 -1
  84. package/dist/dashboard/out/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +0 -1
  85. package/dist/dashboard/out/_next/static/chunks/app/providers/setup/[provider]/page-4dbe33f0f7691b7c.js +0 -1
  86. package/dist/dashboard/out/_next/static/chunks/app/signup/page-c7a0a28341365ae0.js +0 -1
  87. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +0 -18
  88. package/dist/dashboard/out/_next/static/chunks/fd9d1056-609918ca7b6280bb.js +0 -1
  89. package/dist/dashboard/out/_next/static/chunks/framework-f66176bb897dc684.js +0 -1
  90. package/dist/dashboard/out/_next/static/chunks/main-311c3db74dcfadb7.js +0 -1
  91. package/dist/dashboard/out/_next/static/chunks/main-app-fdbeb09028f57c9f.js +0 -1
  92. package/dist/dashboard/out/_next/static/chunks/pages/_app-72b849fbd24ac258.js +0 -1
  93. package/dist/dashboard/out/_next/static/chunks/pages/_error-7ba65e1336b92748.js +0 -1
  94. package/dist/dashboard/out/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  95. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +0 -1
  96. package/dist/dashboard/out/_next/static/css/4034f236dd1a3178.css +0 -1
  97. package/dist/dashboard/out/_next/static/css/6892f8422896ef7a.css +0 -1
  98. package/dist/dashboard/out/alt-logos/agent-relay-logo-128.png +0 -0
  99. package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
  100. package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
  101. package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
  102. package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
  103. package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +0 -45
  104. package/dist/dashboard/out/alt-logos/logo.svg +0 -38
  105. package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
  106. package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
  107. package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
  108. package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
  109. package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
  110. package/dist/dashboard/out/alt-logos/monogram-logo.svg +0 -38
  111. package/dist/dashboard/out/app/onboarding.html +0 -1
  112. package/dist/dashboard/out/app/onboarding.txt +0 -7
  113. package/dist/dashboard/out/app.html +0 -1
  114. package/dist/dashboard/out/app.txt +0 -7
  115. package/dist/dashboard/out/apple-icon.png +0 -0
  116. package/dist/dashboard/out/cloud/link.html +0 -1
  117. package/dist/dashboard/out/cloud/link.txt +0 -7
  118. package/dist/dashboard/out/complete-profile.html +0 -5
  119. package/dist/dashboard/out/complete-profile.txt +0 -7
  120. package/dist/dashboard/out/connect-repos.html +0 -1
  121. package/dist/dashboard/out/connect-repos.txt +0 -7
  122. package/dist/dashboard/out/history.html +0 -1
  123. package/dist/dashboard/out/history.txt +0 -7
  124. package/dist/dashboard/out/index.html +0 -1
  125. package/dist/dashboard/out/index.txt +0 -7
  126. package/dist/dashboard/out/login.html +0 -5
  127. package/dist/dashboard/out/login.txt +0 -7
  128. package/dist/dashboard/out/metrics.html +0 -1
  129. package/dist/dashboard/out/metrics.txt +0 -7
  130. package/dist/dashboard/out/pricing.html +0 -13
  131. package/dist/dashboard/out/pricing.txt +0 -7
  132. package/dist/dashboard/out/providers/setup/claude.html +0 -1
  133. package/dist/dashboard/out/providers/setup/claude.txt +0 -8
  134. package/dist/dashboard/out/providers/setup/codex.html +0 -1
  135. package/dist/dashboard/out/providers/setup/codex.txt +0 -8
  136. package/dist/dashboard/out/providers/setup/cursor.html +0 -1
  137. package/dist/dashboard/out/providers/setup/cursor.txt +0 -8
  138. package/dist/dashboard/out/providers.html +0 -1
  139. package/dist/dashboard/out/providers.txt +0 -7
  140. package/dist/dashboard/out/signup.html +0 -6
  141. package/dist/dashboard/out/signup.txt +0 -7
  142. package/dist/src/dashboard-server/index.d.ts +0 -8
  143. package/dist/src/dashboard-server/index.js +0 -8
  144. package/packages/dashboard/README.md +0 -48
  145. package/packages/dashboard/dist/health-worker-manager.d.ts +0 -62
  146. package/packages/dashboard/dist/health-worker-manager.js +0 -144
  147. package/packages/dashboard/dist/health-worker.d.ts +0 -9
  148. package/packages/dashboard/dist/health-worker.js +0 -79
  149. package/packages/dashboard/dist/index.d.ts +0 -20
  150. package/packages/dashboard/dist/index.js +0 -19
  151. package/packages/dashboard/dist/metrics.d.ts +0 -105
  152. package/packages/dashboard/dist/metrics.js +0 -193
  153. package/packages/dashboard/dist/needs-attention.d.ts +0 -24
  154. package/packages/dashboard/dist/needs-attention.js +0 -78
  155. package/packages/dashboard/dist/server.d.ts +0 -25
  156. package/packages/dashboard/dist/server.js +0 -5270
  157. package/packages/dashboard/dist/start.d.ts +0 -6
  158. package/packages/dashboard/dist/start.js +0 -13
  159. package/packages/dashboard/dist/types/threading.d.ts +0 -8
  160. package/packages/dashboard/dist/types/threading.js +0 -2
  161. package/packages/dashboard/dist/user-bridge.d.ts +0 -154
  162. package/packages/dashboard/dist/user-bridge.js +0 -372
  163. package/packages/dashboard/package.json +0 -65
  164. package/packages/dashboard/ui/app/app/onboarding/page.tsx +0 -394
  165. package/packages/dashboard/ui/app/app/page.tsx +0 -667
  166. package/packages/dashboard/ui/app/apple-icon.png +0 -0
  167. package/packages/dashboard/ui/app/cloud/link/page.tsx +0 -464
  168. package/packages/dashboard/ui/app/complete-profile/page.tsx +0 -204
  169. package/packages/dashboard/ui/app/connect-repos/page.tsx +0 -410
  170. package/packages/dashboard/ui/app/favicon.png +0 -0
  171. package/packages/dashboard/ui/app/globals.css +0 -59
  172. package/packages/dashboard/ui/app/history/page.tsx +0 -658
  173. package/packages/dashboard/ui/app/layout.tsx +0 -25
  174. package/packages/dashboard/ui/app/login/page.tsx +0 -424
  175. package/packages/dashboard/ui/app/metrics/page.tsx +0 -751
  176. package/packages/dashboard/ui/app/page.tsx +0 -59
  177. package/packages/dashboard/ui/app/pricing/page.tsx +0 -7
  178. package/packages/dashboard/ui/app/providers/page.tsx +0 -193
  179. package/packages/dashboard/ui/app/providers/setup/[provider]/ProviderSetupClient.tsx +0 -148
  180. package/packages/dashboard/ui/app/providers/setup/[provider]/constants.ts +0 -35
  181. package/packages/dashboard/ui/app/providers/setup/[provider]/page.tsx +0 -42
  182. package/packages/dashboard/ui/app/signup/page.tsx +0 -533
  183. package/packages/dashboard/ui/index.ts +0 -49
  184. package/packages/dashboard/ui/landing/LandingPage.tsx +0 -713
  185. package/packages/dashboard/ui/landing/PricingPage.tsx +0 -559
  186. package/packages/dashboard/ui/landing/index.ts +0 -6
  187. package/packages/dashboard/ui/landing/styles.css +0 -2850
  188. package/packages/dashboard/ui/lib/agent-merge.ts +0 -35
  189. package/packages/dashboard/ui/lib/api.ts +0 -1155
  190. package/packages/dashboard/ui/lib/cloudApi.ts +0 -877
  191. package/packages/dashboard/ui/lib/colors.ts +0 -218
  192. package/packages/dashboard/ui/lib/hierarchy.ts +0 -242
  193. package/packages/dashboard/ui/lib/stuckDetection.ts +0 -142
  194. package/packages/dashboard/ui/next-env.d.ts +0 -5
  195. package/packages/dashboard/ui/next.config.js +0 -41
  196. package/packages/dashboard/ui/package-lock.json +0 -2882
  197. package/packages/dashboard/ui/package.json +0 -33
  198. package/packages/dashboard/ui/postcss.config.js +0 -5
  199. package/packages/dashboard/ui/react-components/ActivityFeed.tsx +0 -216
  200. package/packages/dashboard/ui/react-components/AddWorkspaceModal.tsx +0 -170
  201. package/packages/dashboard/ui/react-components/AgentCard.tsx +0 -587
  202. package/packages/dashboard/ui/react-components/AgentList.tsx +0 -411
  203. package/packages/dashboard/ui/react-components/AgentProfilePanel.tsx +0 -564
  204. package/packages/dashboard/ui/react-components/App.tsx +0 -3033
  205. package/packages/dashboard/ui/react-components/BillingPanel.tsx +0 -922
  206. package/packages/dashboard/ui/react-components/BillingResult.tsx +0 -447
  207. package/packages/dashboard/ui/react-components/BroadcastComposer.tsx +0 -690
  208. package/packages/dashboard/ui/react-components/ChannelAdminPanel.tsx +0 -773
  209. package/packages/dashboard/ui/react-components/ChannelBrowser.tsx +0 -385
  210. package/packages/dashboard/ui/react-components/ChannelChat.tsx +0 -261
  211. package/packages/dashboard/ui/react-components/ChannelSidebar.tsx +0 -399
  212. package/packages/dashboard/ui/react-components/CloudSessionProvider.tsx +0 -130
  213. package/packages/dashboard/ui/react-components/CommandPalette.tsx +0 -815
  214. package/packages/dashboard/ui/react-components/ConfirmationDialog.tsx +0 -133
  215. package/packages/dashboard/ui/react-components/ConversationHistory.tsx +0 -518
  216. package/packages/dashboard/ui/react-components/CoordinatorPanel.tsx +0 -944
  217. package/packages/dashboard/ui/react-components/DecisionQueue.tsx +0 -717
  218. package/packages/dashboard/ui/react-components/DirectMessageView.tsx +0 -164
  219. package/packages/dashboard/ui/react-components/FileAutocomplete.tsx +0 -368
  220. package/packages/dashboard/ui/react-components/FleetOverview.tsx +0 -278
  221. package/packages/dashboard/ui/react-components/LogViewer.tsx +0 -310
  222. package/packages/dashboard/ui/react-components/LogViewerPanel.tsx +0 -482
  223. package/packages/dashboard/ui/react-components/Logo.tsx +0 -284
  224. package/packages/dashboard/ui/react-components/MentionAutocomplete.tsx +0 -384
  225. package/packages/dashboard/ui/react-components/MessageComposer.tsx +0 -457
  226. package/packages/dashboard/ui/react-components/MessageList.tsx +0 -649
  227. package/packages/dashboard/ui/react-components/MessageSenderName.tsx +0 -91
  228. package/packages/dashboard/ui/react-components/MessageStatusIndicator.tsx +0 -142
  229. package/packages/dashboard/ui/react-components/NewConversationModal.tsx +0 -400
  230. package/packages/dashboard/ui/react-components/NotificationToast.tsx +0 -488
  231. package/packages/dashboard/ui/react-components/OnlineUsersIndicator.tsx +0 -164
  232. package/packages/dashboard/ui/react-components/Pagination.tsx +0 -124
  233. package/packages/dashboard/ui/react-components/PricingPlans.tsx +0 -386
  234. package/packages/dashboard/ui/react-components/ProjectList.tsx +0 -625
  235. package/packages/dashboard/ui/react-components/ProviderAuthFlow.tsx +0 -853
  236. package/packages/dashboard/ui/react-components/ProviderConnectionList.tsx +0 -378
  237. package/packages/dashboard/ui/react-components/ProvisioningProgress.tsx +0 -730
  238. package/packages/dashboard/ui/react-components/RepoAccessPanel.tsx +0 -549
  239. package/packages/dashboard/ui/react-components/ServerCard.tsx +0 -202
  240. package/packages/dashboard/ui/react-components/SessionExpiredModal.tsx +0 -128
  241. package/packages/dashboard/ui/react-components/SpawnModal.tsx +0 -804
  242. package/packages/dashboard/ui/react-components/TaskAssignmentUI.tsx +0 -375
  243. package/packages/dashboard/ui/react-components/TerminalProviderSetup.tsx +0 -608
  244. package/packages/dashboard/ui/react-components/ThemeProvider.tsx +0 -325
  245. package/packages/dashboard/ui/react-components/ThinkingIndicator.tsx +0 -231
  246. package/packages/dashboard/ui/react-components/ThreadList.tsx +0 -198
  247. package/packages/dashboard/ui/react-components/ThreadPanel.tsx +0 -346
  248. package/packages/dashboard/ui/react-components/TrajectoryViewer.tsx +0 -698
  249. package/packages/dashboard/ui/react-components/TypingIndicator.tsx +0 -69
  250. package/packages/dashboard/ui/react-components/UsageBanner.tsx +0 -231
  251. package/packages/dashboard/ui/react-components/UserProfilePanel.tsx +0 -233
  252. package/packages/dashboard/ui/react-components/WorkspaceContext.tsx +0 -107
  253. package/packages/dashboard/ui/react-components/WorkspaceSelector.tsx +0 -234
  254. package/packages/dashboard/ui/react-components/WorkspaceStatusIndicator.tsx +0 -370
  255. package/packages/dashboard/ui/react-components/XTermInteractive.tsx +0 -510
  256. package/packages/dashboard/ui/react-components/XTermLogViewer.tsx +0 -719
  257. package/packages/dashboard/ui/react-components/channels/ChannelDialogs.tsx +0 -1411
  258. package/packages/dashboard/ui/react-components/channels/ChannelHeader.tsx +0 -317
  259. package/packages/dashboard/ui/react-components/channels/ChannelMessageList.tsx +0 -463
  260. package/packages/dashboard/ui/react-components/channels/ChannelViewV1.tsx +0 -146
  261. package/packages/dashboard/ui/react-components/channels/MessageInput.tsx +0 -288
  262. package/packages/dashboard/ui/react-components/channels/SearchInput.tsx +0 -172
  263. package/packages/dashboard/ui/react-components/channels/SearchResults.tsx +0 -336
  264. package/packages/dashboard/ui/react-components/channels/api.ts +0 -697
  265. package/packages/dashboard/ui/react-components/channels/index.ts +0 -76
  266. package/packages/dashboard/ui/react-components/channels/mockApi.ts +0 -344
  267. package/packages/dashboard/ui/react-components/channels/types.ts +0 -566
  268. package/packages/dashboard/ui/react-components/hooks/index.ts +0 -57
  269. package/packages/dashboard/ui/react-components/hooks/useAgentLogs.ts +0 -394
  270. package/packages/dashboard/ui/react-components/hooks/useAgents.ts +0 -127
  271. package/packages/dashboard/ui/react-components/hooks/useBroadcastDedup.ts +0 -86
  272. package/packages/dashboard/ui/react-components/hooks/useChannelAdmin.ts +0 -329
  273. package/packages/dashboard/ui/react-components/hooks/useChannelBrowser.ts +0 -239
  274. package/packages/dashboard/ui/react-components/hooks/useChannelCommands.ts +0 -138
  275. package/packages/dashboard/ui/react-components/hooks/useChannels.ts +0 -328
  276. package/packages/dashboard/ui/react-components/hooks/useDebounce.ts +0 -29
  277. package/packages/dashboard/ui/react-components/hooks/useDirectMessage.ts +0 -141
  278. package/packages/dashboard/ui/react-components/hooks/useMessages.ts +0 -309
  279. package/packages/dashboard/ui/react-components/hooks/useOrchestrator.ts +0 -364
  280. package/packages/dashboard/ui/react-components/hooks/usePinnedAgents.ts +0 -140
  281. package/packages/dashboard/ui/react-components/hooks/usePresence.ts +0 -340
  282. package/packages/dashboard/ui/react-components/hooks/useRecentRepos.ts +0 -130
  283. package/packages/dashboard/ui/react-components/hooks/useSession.ts +0 -209
  284. package/packages/dashboard/ui/react-components/hooks/useTrajectory.ts +0 -265
  285. package/packages/dashboard/ui/react-components/hooks/useWebSocket.ts +0 -169
  286. package/packages/dashboard/ui/react-components/hooks/useWorkspaceMembers.ts +0 -120
  287. package/packages/dashboard/ui/react-components/hooks/useWorkspaceRepos.ts +0 -73
  288. package/packages/dashboard/ui/react-components/hooks/useWorkspaceStatus.ts +0 -237
  289. package/packages/dashboard/ui/react-components/index.ts +0 -81
  290. package/packages/dashboard/ui/react-components/layout/Header.tsx +0 -355
  291. package/packages/dashboard/ui/react-components/layout/RepoContextHeader.tsx +0 -361
  292. package/packages/dashboard/ui/react-components/layout/Sidebar.archive.test.tsx +0 -126
  293. package/packages/dashboard/ui/react-components/layout/Sidebar.test.tsx +0 -691
  294. package/packages/dashboard/ui/react-components/layout/Sidebar.tsx +0 -930
  295. package/packages/dashboard/ui/react-components/layout/index.ts +0 -7
  296. package/packages/dashboard/ui/react-components/settings/BillingSettingsPanel.tsx +0 -564
  297. package/packages/dashboard/ui/react-components/settings/SettingsPage.tsx +0 -544
  298. package/packages/dashboard/ui/react-components/settings/TeamSettingsPanel.tsx +0 -560
  299. package/packages/dashboard/ui/react-components/settings/WorkspaceSettingsPanel.tsx +0 -1386
  300. package/packages/dashboard/ui/react-components/settings/index.ts +0 -11
  301. package/packages/dashboard/ui/react-components/settings/types.ts +0 -53
  302. package/packages/dashboard/ui/react-components/utils/messageFormatting.tsx +0 -370
  303. package/packages/dashboard/ui/tailwind.config.js +0 -148
  304. package/packages/dashboard/ui/types/index.ts +0 -304
  305. package/packages/dashboard/ui/types/threading.ts +0 -7
  306. package/packages/dashboard/ui-dist/404.html +0 -1
  307. package/packages/dashboard/ui-dist/_next/static/7MZPqYkVGw3EGzVBkVmY9/_buildManifest.js +0 -1
  308. package/packages/dashboard/ui-dist/_next/static/7MZPqYkVGw3EGzVBkVmY9/_ssgManifest.js +0 -1
  309. package/packages/dashboard/ui-dist/_next/static/chunks/116-a883fca163f3a5bc.js +0 -1
  310. package/packages/dashboard/ui-dist/_next/static/chunks/117-c8afed19e821a35d.js +0 -2
  311. package/packages/dashboard/ui-dist/_next/static/chunks/282-980c2eb8fff20123.js +0 -1
  312. package/packages/dashboard/ui-dist/_next/static/chunks/320-a6304232cd0ee2ce.js +0 -1
  313. package/packages/dashboard/ui-dist/_next/static/chunks/532-bace199897eeab37.js +0 -9
  314. package/packages/dashboard/ui-dist/_next/static/chunks/631-16b905e5920f9b59.js +0 -1
  315. package/packages/dashboard/ui-dist/_next/static/chunks/648-acb2ff9f77cbfbd3.js +0 -1
  316. package/packages/dashboard/ui-dist/_next/static/chunks/766-2aea80818f7eb0d8.js +0 -1
  317. package/packages/dashboard/ui-dist/_next/static/chunks/83-26d2bde54616ee90.js +0 -1
  318. package/packages/dashboard/ui-dist/_next/static/chunks/847-f1f467060f32afff.js +0 -1
  319. package/packages/dashboard/ui-dist/_next/static/chunks/891-5cb1513eeb97a891.js +0 -1
  320. package/packages/dashboard/ui-dist/_next/static/chunks/app/_not-found/page-60501fddbafba9dc.js +0 -1
  321. package/packages/dashboard/ui-dist/_next/static/chunks/app/app/onboarding/page-9914652442f7e4fb.js +0 -1
  322. package/packages/dashboard/ui-dist/_next/static/chunks/app/app/page-366fb7c078d4e9e0.js +0 -1
  323. package/packages/dashboard/ui-dist/_next/static/chunks/app/cloud/link/page-fa1d5842aa90e8a6.js +0 -1
  324. package/packages/dashboard/ui-dist/_next/static/chunks/app/complete-profile/page-dd64bbdf66b639cd.js +0 -1
  325. package/packages/dashboard/ui-dist/_next/static/chunks/app/connect-repos/page-113060009ef35bc2.js +0 -1
  326. package/packages/dashboard/ui-dist/_next/static/chunks/app/history/page-9965d2483011b846.js +0 -1
  327. package/packages/dashboard/ui-dist/_next/static/chunks/app/layout-6b91e33784c20610.js +0 -1
  328. package/packages/dashboard/ui-dist/_next/static/chunks/app/login/page-435eceb0073be027.js +0 -1
  329. package/packages/dashboard/ui-dist/_next/static/chunks/app/metrics/page-1e37ef8e73940b40.js +0 -1
  330. package/packages/dashboard/ui-dist/_next/static/chunks/app/page-8119d4246743574e.js +0 -1
  331. package/packages/dashboard/ui-dist/_next/static/chunks/app/pricing/page-9db3ebdfa567a7c9.js +0 -1
  332. package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +0 -1
  333. package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/setup/[provider]/page-4dbe33f0f7691b7c.js +0 -1
  334. package/packages/dashboard/ui-dist/_next/static/chunks/app/signup/page-c7a0a28341365ae0.js +0 -1
  335. package/packages/dashboard/ui-dist/_next/static/chunks/e868780c-48e5f147c90a3a41.js +0 -18
  336. package/packages/dashboard/ui-dist/_next/static/chunks/fd9d1056-609918ca7b6280bb.js +0 -1
  337. package/packages/dashboard/ui-dist/_next/static/chunks/framework-f66176bb897dc684.js +0 -1
  338. package/packages/dashboard/ui-dist/_next/static/chunks/main-311c3db74dcfadb7.js +0 -1
  339. package/packages/dashboard/ui-dist/_next/static/chunks/main-app-fdbeb09028f57c9f.js +0 -1
  340. package/packages/dashboard/ui-dist/_next/static/chunks/pages/_app-72b849fbd24ac258.js +0 -1
  341. package/packages/dashboard/ui-dist/_next/static/chunks/pages/_error-7ba65e1336b92748.js +0 -1
  342. package/packages/dashboard/ui-dist/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  343. package/packages/dashboard/ui-dist/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +0 -1
  344. package/packages/dashboard/ui-dist/_next/static/css/4034f236dd1a3178.css +0 -1
  345. package/packages/dashboard/ui-dist/_next/static/css/6892f8422896ef7a.css +0 -1
  346. package/packages/dashboard/ui-dist/_next/static/iJ3Uiz3IrqUJL7IxKZHiV/_buildManifest.js +0 -1
  347. package/packages/dashboard/ui-dist/_next/static/iJ3Uiz3IrqUJL7IxKZHiV/_ssgManifest.js +0 -1
  348. package/packages/dashboard/ui-dist/_next/static/l-jd878zUJ_IlraqEWMZc/_buildManifest.js +0 -1
  349. package/packages/dashboard/ui-dist/_next/static/l-jd878zUJ_IlraqEWMZc/_ssgManifest.js +0 -1
  350. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-128.png +0 -0
  351. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-256.png +0 -0
  352. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-32.png +0 -0
  353. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-512.png +0 -0
  354. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo-64.png +0 -0
  355. package/packages/dashboard/ui-dist/alt-logos/agent-relay-logo.svg +0 -45
  356. package/packages/dashboard/ui-dist/alt-logos/logo.svg +0 -38
  357. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-128.png +0 -0
  358. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-256.png +0 -0
  359. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-32.png +0 -0
  360. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-512.png +0 -0
  361. package/packages/dashboard/ui-dist/alt-logos/monogram-logo-64.png +0 -0
  362. package/packages/dashboard/ui-dist/alt-logos/monogram-logo.svg +0 -38
  363. package/packages/dashboard/ui-dist/app/onboarding.html +0 -1
  364. package/packages/dashboard/ui-dist/app/onboarding.txt +0 -7
  365. package/packages/dashboard/ui-dist/app.html +0 -1
  366. package/packages/dashboard/ui-dist/app.txt +0 -7
  367. package/packages/dashboard/ui-dist/apple-icon.png +0 -0
  368. package/packages/dashboard/ui-dist/cloud/link.html +0 -1
  369. package/packages/dashboard/ui-dist/cloud/link.txt +0 -7
  370. package/packages/dashboard/ui-dist/complete-profile.html +0 -5
  371. package/packages/dashboard/ui-dist/complete-profile.txt +0 -7
  372. package/packages/dashboard/ui-dist/connect-repos.html +0 -1
  373. package/packages/dashboard/ui-dist/connect-repos.txt +0 -7
  374. package/packages/dashboard/ui-dist/history.html +0 -1
  375. package/packages/dashboard/ui-dist/history.txt +0 -7
  376. package/packages/dashboard/ui-dist/index.html +0 -1
  377. package/packages/dashboard/ui-dist/index.txt +0 -7
  378. package/packages/dashboard/ui-dist/login.html +0 -5
  379. package/packages/dashboard/ui-dist/login.txt +0 -7
  380. package/packages/dashboard/ui-dist/metrics.html +0 -1
  381. package/packages/dashboard/ui-dist/metrics.txt +0 -7
  382. package/packages/dashboard/ui-dist/pricing.html +0 -13
  383. package/packages/dashboard/ui-dist/pricing.txt +0 -7
  384. package/packages/dashboard/ui-dist/providers/setup/claude.html +0 -1
  385. package/packages/dashboard/ui-dist/providers/setup/claude.txt +0 -8
  386. package/packages/dashboard/ui-dist/providers/setup/codex.html +0 -1
  387. package/packages/dashboard/ui-dist/providers/setup/codex.txt +0 -8
  388. package/packages/dashboard/ui-dist/providers/setup/cursor.html +0 -1
  389. package/packages/dashboard/ui-dist/providers/setup/cursor.txt +0 -8
  390. package/packages/dashboard/ui-dist/providers.html +0 -1
  391. package/packages/dashboard/ui-dist/providers.txt +0 -7
  392. package/packages/dashboard/ui-dist/signup.html +0 -6
  393. package/packages/dashboard/ui-dist/signup.txt +0 -7
  394. package/packages/dashboard-server/dist/health-worker-manager.d.ts +0 -62
  395. package/packages/dashboard-server/dist/health-worker-manager.js +0 -144
  396. package/packages/dashboard-server/dist/health-worker.d.ts +0 -9
  397. package/packages/dashboard-server/dist/health-worker.js +0 -79
  398. package/packages/dashboard-server/dist/index.d.ts +0 -18
  399. package/packages/dashboard-server/dist/index.js +0 -17
  400. package/packages/dashboard-server/dist/metrics.d.ts +0 -105
  401. package/packages/dashboard-server/dist/metrics.js +0 -193
  402. package/packages/dashboard-server/dist/needs-attention.d.ts +0 -24
  403. package/packages/dashboard-server/dist/needs-attention.js +0 -78
  404. package/packages/dashboard-server/dist/server.d.ts +0 -25
  405. package/packages/dashboard-server/dist/server.js +0 -5158
  406. package/packages/dashboard-server/dist/start.d.ts +0 -6
  407. package/packages/dashboard-server/dist/start.js +0 -13
  408. package/packages/dashboard-server/dist/types/threading.d.ts +0 -8
  409. package/packages/dashboard-server/dist/types/threading.js +0 -2
  410. package/packages/dashboard-server/dist/user-bridge.d.ts +0 -158
  411. package/packages/dashboard-server/dist/user-bridge.js +0 -390
  412. package/packages/dashboard-server/package.json +0 -55
Binary file
@@ -3,11 +3,11 @@
3
3
  * Agent Relay CLI
4
4
  *
5
5
  * Commands:
6
- * relay claude - Start daemon + Dashboard coordinator with Claude
7
- * relay codex - Start daemon + Dasbboard coordinator with Codex
6
+ * relay claude - Start daemon with Claude coordinator
7
+ * relay codex - Start daemon with Codex coordinator
8
8
  * relay create-agent <cmd> - Wrap agent with real-time messaging
9
9
  * relay create-agent -n Name cmd - Wrap with specific agent name
10
- * relay up - Start daemon + dashboard
10
+ * relay up - Start daemon
11
11
  * relay read <id> - Read full message by ID
12
12
  * relay agents - List connected agents
13
13
  * relay who - Show currently active agents
@@ -3,11 +3,11 @@
3
3
  * Agent Relay CLI
4
4
  *
5
5
  * Commands:
6
- * relay claude - Start daemon + Dashboard coordinator with Claude
7
- * relay codex - Start daemon + Dasbboard coordinator with Codex
6
+ * relay claude - Start daemon with Claude coordinator
7
+ * relay codex - Start daemon with Codex coordinator
8
8
  * relay create-agent <cmd> - Wrap agent with real-time messaging
9
9
  * relay create-agent -n Name cmd - Wrap with specific agent name
10
- * relay up - Start daemon + dashboard
10
+ * relay up - Start daemon
11
11
  * relay read <id> - Read full message by ID
12
12
  * relay agents - List connected agents
13
13
  * relay who - Show currently active agents
@@ -26,10 +26,11 @@ import fs from 'node:fs';
26
26
  import path from 'node:path';
27
27
  import readline from 'node:readline';
28
28
  import { promisify } from 'node:util';
29
- import { exec, spawn as spawnProcess } from 'node:child_process';
29
+ import { exec } from 'node:child_process';
30
30
  import { fileURLToPath } from 'node:url';
31
+ const RELAY_DASHBOARD_REPO = 'https://github.com/AgentWorkforce/relay-dashboard';
31
32
  /**
32
- * Prompt user to choose how to handle missing dashboard package
33
+ * Prompt user to choose how to handle missing dashboard package.
33
34
  * Returns: 'install' | 'skip'
34
35
  */
35
36
  async function promptDashboardInstall() {
@@ -38,11 +39,11 @@ async function promptDashboardInstall() {
38
39
  output: process.stdout,
39
40
  });
40
41
  console.log(`
41
- Dashboard package not installed.
42
+ The web dashboard is now an external package.
42
43
 
43
44
  How would you like to proceed?
44
- 1. Install now (npm install -g @agent-relay/dashboard)
45
- 2. Continue without dashboard
45
+ 1. View installation instructions for relay-dashboard
46
+ 2. Skip and continue without dashboard
46
47
  `);
47
48
  return new Promise((resolve) => {
48
49
  rl.question('Choose [1/2]: ', (answer) => {
@@ -58,29 +59,24 @@ How would you like to proceed?
58
59
  });
59
60
  }
60
61
  /**
61
- * Install dashboard package globally
62
+ * Show instructions for installing the external relay-dashboard package.
62
63
  */
63
- async function installDashboardGlobally() {
64
- console.log('\nInstalling @agent-relay/dashboard globally...\n');
65
- return new Promise((resolve) => {
66
- const proc = spawnProcess('npm', ['install', '-g', '@agent-relay/dashboard'], {
67
- stdio: 'inherit',
68
- });
69
- proc.on('close', (code) => {
70
- if (code === 0) {
71
- console.log('\n✓ Dashboard installed successfully.\n');
72
- resolve(true);
73
- }
74
- else {
75
- console.error('\n✗ Installation failed. Try running manually:\n npm install -g @agent-relay/dashboard\n');
76
- resolve(false);
77
- }
78
- });
79
- proc.on('error', () => {
80
- console.error('\n✗ Installation failed. Try running manually:\n npm install -g @agent-relay/dashboard\n');
81
- resolve(false);
82
- });
83
- });
64
+ function showDashboardInstallInstructions() {
65
+ console.log(`
66
+ To install the relay-dashboard, visit:
67
+
68
+ ${RELAY_DASHBOARD_REPO}
69
+
70
+ Install via npm:
71
+
72
+ npm install -g relay-dashboard
73
+
74
+ Then start the dashboard alongside the daemon:
75
+
76
+ relay-dashboard --port 3888
77
+
78
+ See the repository README for full configuration options.
79
+ `);
84
80
  }
85
81
  dotenvConfig();
86
82
  const DEFAULT_DASHBOARD_PORT = process.env.AGENT_RELAY_DASHBOARD_PORT || '3888';
@@ -492,76 +488,7 @@ program
492
488
  try {
493
489
  await daemon.start();
494
490
  console.log('Daemon started.');
495
- let dashboardPort;
496
- // Dashboard is disabled by default (use --dashboard to enable)
497
- // Dashboard is an optional separate package: @agent-relay/dashboard
498
- if (options.dashboard === true) {
499
- const port = parseInt(options.port, 10);
500
- try {
501
- const { startDashboard } = await import('@agent-relay/dashboard');
502
- dashboardPort = await startDashboard({
503
- port,
504
- dataDir: paths.dataDir,
505
- teamDir: paths.teamDir,
506
- dbPath,
507
- enableSpawner: true,
508
- projectRoot: paths.projectRoot,
509
- // Pass spawn tracking callbacks so messages can be queued before HELLO completes
510
- onMarkSpawning: (name) => daemon.markSpawning(name),
511
- onClearSpawning: (name) => daemon.clearSpawning(name),
512
- });
513
- console.log(`Dashboard: http://localhost:${dashboardPort}`);
514
- // Hook daemon log output to dashboard WebSocket
515
- daemon.onLogOutput = (agentName, data, _timestamp) => {
516
- const broadcast = global.__broadcastLogOutput;
517
- if (broadcast) {
518
- broadcast(agentName, data);
519
- }
520
- };
521
- }
522
- catch (err) {
523
- const error = err;
524
- if (error.code === 'ERR_MODULE_NOT_FOUND' || error.code === 'MODULE_NOT_FOUND') {
525
- // Interactive prompt for dashboard installation
526
- const choice = await promptDashboardInstall();
527
- if (choice === 'install') {
528
- const installed = await installDashboardGlobally();
529
- if (installed) {
530
- // Retry import after installation
531
- try {
532
- const { startDashboard } = await import('@agent-relay/dashboard');
533
- dashboardPort = await startDashboard({
534
- port,
535
- dataDir: paths.dataDir,
536
- teamDir: paths.teamDir,
537
- dbPath,
538
- enableSpawner: true,
539
- projectRoot: paths.projectRoot,
540
- onMarkSpawning: (name) => daemon.markSpawning(name),
541
- onClearSpawning: (name) => daemon.clearSpawning(name),
542
- });
543
- console.log(`Dashboard: http://localhost:${dashboardPort}`);
544
- daemon.onLogOutput = (agentName, data, _timestamp) => {
545
- const broadcast = global.__broadcastLogOutput;
546
- if (broadcast) {
547
- broadcast(agentName, data);
548
- }
549
- };
550
- }
551
- catch {
552
- console.error('Dashboard still not found after installation. Continuing without dashboard.');
553
- }
554
- }
555
- }
556
- else {
557
- console.log('\nContinuing without dashboard...\n');
558
- }
559
- }
560
- else {
561
- throw err;
562
- }
563
- }
564
- }
491
+ const dashboardPort = undefined;
565
492
  // Determine if we should auto-spawn agents
566
493
  // --spawn: force spawn
567
494
  // --no-spawn: never spawn
@@ -1519,6 +1446,10 @@ program
1519
1446
  console.log(`\nCleaned up ${killed}/${orphaned.length} session(s).`);
1520
1447
  });
1521
1448
  async function discoverRelaySessions() {
1449
+ // Skip tmux discovery in test environments to avoid hangs
1450
+ if (process.env.AGENT_RELAY_SKIP_TMUX === '1') {
1451
+ return [];
1452
+ }
1522
1453
  try {
1523
1454
  const tmuxPath = getTmuxPath();
1524
1455
  const { stdout } = await execAsync(`"${tmuxPath}" list-sessions -F "#{session_name}"`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-relay",
3
- "version": "2.0.21",
3
+ "version": "2.0.23",
4
4
  "description": "Real-time agent-to-agent communication system",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -16,9 +16,9 @@
16
16
  },
17
17
  "scripts": {
18
18
  "postinstall": "npm rebuild better-sqlite3 && node scripts/postinstall.js",
19
- "build": "npm run clean && npm run build:rust && turbo run build --filter='./packages/*' && tsc && npm run build:dashboard",
20
- "build:sequential": "npm run clean && npm run build:rust && npm run build:protocol && npm run build:config && npm run build:storage && npm run build:state && npm run build:policy && npm run build:trajectory && npm run build:hooks && npm run build:memory && npm run build:utils && npm run build:continuity && npm run build:resiliency && npm run build:user-directory && npm run build:wrapper && npm run build:mcp && npm run build:bridge && npm run build:telemetry && npm run build:cloud && npm run build:daemon && npm run build:sdk && npm run build:dashboard-server && npm run build:dashboard-pkg && npm run build:api-types && npm run build:spawner && tsc && npm run build:dashboard",
21
- "build:workspace": "npm run clean && npm run build:rust && npm run build:protocol && npm run build:config && npm run build:storage && npm run build:state && npm run build:policy && npm run build:trajectory && npm run build:hooks && npm run build:memory && npm run build:utils && npm run build:continuity && npm run build:resiliency && npm run build:user-directory && npm run build:wrapper && npm run build:mcp && npm run build:bridge && npm run build:telemetry && npm run build:cloud && npm run build:daemon && npm run build:sdk && npm run build:dashboard-server && npm run build:dashboard-pkg && npm run build:api-types && npm run build:spawner && tsc",
19
+ "build": "npm run clean && npm run build:rust && turbo run build --filter='./packages/*' && tsc",
20
+ "build:sequential": "npm run clean && npm run build:rust && npm run build:protocol && npm run build:config && npm run build:storage && npm run build:state && npm run build:policy && npm run build:trajectory && npm run build:hooks && npm run build:memory && npm run build:utils && npm run build:continuity && npm run build:resiliency && npm run build:user-directory && npm run build:wrapper && npm run build:mcp && npm run build:bridge && npm run build:telemetry && npm run build:cloud && npm run build:daemon && npm run build:sdk && npm run build:api-types && npm run build:spawner && tsc",
21
+ "build:workspace": "npm run clean && npm run build:rust && npm run build:protocol && npm run build:config && npm run build:storage && npm run build:state && npm run build:policy && npm run build:trajectory && npm run build:hooks && npm run build:memory && npm run build:utils && npm run build:continuity && npm run build:resiliency && npm run build:user-directory && npm run build:wrapper && npm run build:mcp && npm run build:bridge && npm run build:telemetry && npm run build:cloud && npm run build:daemon && npm run build:sdk && npm run build:api-types && npm run build:spawner && tsc",
22
22
  "build:packages": "turbo run build --filter='./packages/*'",
23
23
  "build:packages:watch": "turbo run build --filter='./packages/*' --watch",
24
24
  "build:mcp": "cd packages/mcp && npm run build",
@@ -38,27 +38,20 @@
38
38
  "build:wrapper": "cd packages/wrapper && npm run build",
39
39
  "build:cloud": "cd packages/cloud && npm run build",
40
40
  "build:daemon": "cd packages/daemon && npm run build",
41
- "build:dashboard-server": "cd packages/dashboard-server && npm run build",
42
- "build:dashboard-pkg": "cd packages/dashboard && npm run build:server",
43
41
  "build:sdk": "cd packages/sdk && npm run build",
44
42
  "build:api-types": "cd packages/api-types && npm run build",
45
43
  "build:spawner": "cd packages/spawner && npm run build",
46
44
  "build:telemetry": "cd packages/telemetry && npm run build",
47
- "build:dashboard": "cd packages/dashboard/ui && npm ci && npm run build",
48
- "postbuild": "chmod +x dist/src/cli/index.js && mkdir -p dist/dashboard && cp -r packages/dashboard/ui/out dist/dashboard/ && mkdir -p packages/dashboard/ui-dist && cp -r packages/dashboard/ui/out/* packages/dashboard/ui-dist/",
45
+ "postbuild": "chmod +x dist/src/cli/index.js",
49
46
  "dev:watch": "tsc -w",
50
47
  "predev": "npm run clean && npm run build:packages && tsc && chmod +x dist/src/cli/index.js",
51
- "dev": "concurrently -n daemon,next -c blue,magenta \"npm run dev:daemon\" \"npm run dev:next\"",
52
- "dev:daemon": "node dist/src/cli/index.js up --dashboard --port 3889",
53
- "dev:next": "cd packages/dashboard/ui && npm run dev",
54
- "dev:simple": "node dist/src/cli/index.js up --dashboard --port 3888",
48
+ "dev": "node dist/src/cli/index.js up --dashboard --port 3888",
55
49
  "dev:local": "npm run build && npm link && echo '✓ agent-relay linked globally'",
56
50
  "dev:unlink": "npm unlink -g agent-relay && echo '✓ agent-relay unlinked'",
57
51
  "dev:rebuild": "npm run build && echo '✓ Rebuilt (linked version updated)'",
58
52
  "build:rust": "if command -v ~/.cargo/bin/cargo >/dev/null 2>&1; then cd relay-pty && ~/.cargo/bin/cargo build --release && cp target/release/relay-pty ../bin/relay-pty && node -e \"const os=require('os'); const fs=require('fs'); const p=os.platform(); const a=os.arch(); const name='relay-pty-'+p+'-'+a; fs.copyFileSync('target/release/relay-pty', '../bin/'+name); console.log('✓ relay-pty binary built and copied to bin/ and bin/'+name)\"; else echo '⚠ Rust not installed, using prebuilt binaries from bin/'; fi",
59
53
  "start": "node dist/src/cli/index.js",
60
54
  "daemon": "node packages/daemon/dist/server.js",
61
- "dashboard": "node packages/dashboard-server/dist/start.js",
62
55
  "pretest": "npm run build",
63
56
  "test": "vitest run",
64
57
  "test:integration": "vitest run test/cloud/*.integration.test.ts",
@@ -84,7 +77,7 @@
84
77
  "cloud:setup": "./scripts/cloud-setup.sh",
85
78
  "cloud:api": "WORKSPACE_IMAGE=relay-workspace:local WORKSPACE_DEV_MOUNT=true node -r dotenv/config packages/cloud/dist/index.js",
86
79
  "precloud": "./scripts/cloud-setup.sh --skip-data",
87
- "cloud": "concurrently -n api,daemon,dashboard -c cyan,blue,magenta \"npm run cloud:api\" \"npm run dev:daemon\" \"npm run dev:next\"",
80
+ "cloud": "npm run cloud:api",
88
81
  "docs:dev": "cd docs && npm run dev",
89
82
  "cli-tester:start": "cd packages/cli-tester && ./scripts/start.sh",
90
83
  "cli-tester:start:clean": "cd packages/cli-tester && ./scripts/start.sh --clean",
@@ -114,21 +107,21 @@
114
107
  },
115
108
  "homepage": "https://github.com/AgentWorkforce/relay#readme",
116
109
  "dependencies": {
117
- "@agent-relay/bridge": "2.0.21",
118
- "@agent-relay/config": "2.0.21",
119
- "@agent-relay/continuity": "2.0.21",
120
- "@agent-relay/daemon": "2.0.21",
121
- "@agent-relay/hooks": "2.0.21",
122
- "@agent-relay/mcp": "2.0.21",
123
- "@agent-relay/protocol": "2.0.21",
124
- "@agent-relay/resiliency": "2.0.21",
125
- "@agent-relay/sdk": "2.0.21",
126
- "@agent-relay/storage": "2.0.21",
127
- "@agent-relay/telemetry": "2.0.21",
128
- "@agent-relay/trajectory": "2.0.21",
129
- "@agent-relay/user-directory": "2.0.21",
130
- "@agent-relay/utils": "2.0.21",
131
- "@agent-relay/wrapper": "2.0.21",
110
+ "@agent-relay/bridge": "2.0.23",
111
+ "@agent-relay/config": "2.0.23",
112
+ "@agent-relay/continuity": "2.0.23",
113
+ "@agent-relay/daemon": "2.0.23",
114
+ "@agent-relay/hooks": "2.0.23",
115
+ "@agent-relay/mcp": "2.0.23",
116
+ "@agent-relay/protocol": "2.0.23",
117
+ "@agent-relay/resiliency": "2.0.23",
118
+ "@agent-relay/sdk": "2.0.23",
119
+ "@agent-relay/storage": "2.0.23",
120
+ "@agent-relay/telemetry": "2.0.23",
121
+ "@agent-relay/trajectory": "2.0.23",
122
+ "@agent-relay/user-directory": "2.0.23",
123
+ "@agent-relay/utils": "2.0.23",
124
+ "@agent-relay/wrapper": "2.0.23",
132
125
  "@nangohq/node": "^0.69.20",
133
126
  "@types/jsonwebtoken": "^9.0.10",
134
127
  "agent-trajectories": "^0.2.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/api-types",
3
- "version": "2.0.21",
3
+ "version": "2.0.23",
4
4
  "description": "Shared API types and Zod schemas for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/bridge",
3
- "version": "2.0.21",
3
+ "version": "2.0.23",
4
4
  "description": "Multi-project bridge client utilities for Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,13 +22,13 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/protocol": "2.0.21",
26
- "@agent-relay/config": "2.0.21",
27
- "@agent-relay/utils": "2.0.21",
28
- "@agent-relay/policy": "2.0.21",
29
- "@agent-relay/user-directory": "2.0.21",
30
- "@agent-relay/wrapper": "2.0.21",
31
- "@agent-relay/mcp": "2.0.21"
25
+ "@agent-relay/protocol": "2.0.23",
26
+ "@agent-relay/config": "2.0.23",
27
+ "@agent-relay/utils": "2.0.23",
28
+ "@agent-relay/policy": "2.0.23",
29
+ "@agent-relay/user-directory": "2.0.23",
30
+ "@agent-relay/wrapper": "2.0.23",
31
+ "@agent-relay/mcp": "2.0.23"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/cli-tester",
3
- "version": "2.0.21",
3
+ "version": "2.0.23",
4
4
  "description": "Manual interactive testing for CLI authentication flows",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1153,10 +1153,31 @@ export async function createServer() {
1153
1153
  // Teams router - MUST BE LAST among /api routes
1154
1154
  // Handles /workspaces/:id/members and /invites with requireAuth on all routes
1155
1155
  app.use('/api', teamsRouter);
1156
- // Serve static dashboard files (Next.js static export)
1157
- // Path: packages/cloud/dist/server.js -> ../../dashboard/ui/out
1158
- // In Docker: /app/packages/cloud/dist -> /app/packages/dashboard/ui/out
1159
- const dashboardPath = path.join(__dirname, '../../dashboard/ui/out');
1156
+ // Serve static dashboard files from @agent-relay/dashboard npm package
1157
+ // The npm package exports pre-built Next.js static files in its 'out' directory
1158
+ const npmDashboardPaths = [
1159
+ // When running from packages/cloud/dist/server.js
1160
+ path.join(__dirname, '../../../node_modules/@agent-relay/dashboard/out'),
1161
+ // When running from root node_modules (monorepo hoisting)
1162
+ path.join(__dirname, '../../../../node_modules/@agent-relay/dashboard/out'),
1163
+ // Docker deployment path
1164
+ '/app/node_modules/@agent-relay/dashboard/out',
1165
+ ];
1166
+ // Find the first path that exists
1167
+ let dashboardPath = null;
1168
+ for (const npmPath of npmDashboardPaths) {
1169
+ if (fs.existsSync(npmPath)) {
1170
+ dashboardPath = npmPath;
1171
+ console.log(`[cloud] Serving dashboard from: ${npmPath}`);
1172
+ break;
1173
+ }
1174
+ }
1175
+ if (!dashboardPath) {
1176
+ console.error(`[cloud] Dashboard not found! Install @agent-relay/dashboard package.`);
1177
+ console.error(`[cloud] Checked paths: ${npmDashboardPaths.join(', ')}`);
1178
+ // Use first path as fallback (will 404 but won't crash)
1179
+ dashboardPath = npmDashboardPaths[0];
1180
+ }
1160
1181
  // Serve static files (JS, CSS, images, etc.)
1161
1182
  app.use(express.static(dashboardPath));
1162
1183
  // Handle clean URLs for Next.js static export
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/cloud",
3
- "version": "2.0.21",
3
+ "version": "2.0.23",
4
4
  "description": "Cloud API server and services for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -38,11 +38,11 @@
38
38
  "test:watch": "vitest"
39
39
  },
40
40
  "dependencies": {
41
- "@agent-relay/wrapper": "2.0.21",
42
- "@agent-relay/config": "2.0.21",
43
- "@agent-relay/resiliency": "2.0.21",
44
- "@agent-relay/storage": "2.0.21",
45
- "@agent-relay/protocol": "2.0.21"
41
+ "@agent-relay/wrapper": "2.0.23",
42
+ "@agent-relay/config": "2.0.23",
43
+ "@agent-relay/resiliency": "2.0.23",
44
+ "@agent-relay/storage": "2.0.23",
45
+ "@agent-relay/protocol": "2.0.23"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/config",
3
- "version": "2.0.21",
3
+ "version": "2.0.23",
4
4
  "description": "Shared configuration schemas and loaders for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -83,7 +83,7 @@
83
83
  "test:watch": "vitest"
84
84
  },
85
85
  "dependencies": {
86
- "@agent-relay/protocol": "2.0.21",
86
+ "@agent-relay/protocol": "2.0.23",
87
87
  "zod": "^3.23.8",
88
88
  "zod-to-json-schema": "^3.23.1"
89
89
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/continuity",
3
- "version": "2.0.21",
3
+ "version": "2.0.23",
4
4
  "description": "Session continuity manager for Relay (ledgers, handoffs, resume)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -19,9 +19,27 @@ const logger = createLogger('orchestrator');
19
19
  function generateId() {
20
20
  return Math.random().toString(36).substring(2, 15);
21
21
  }
22
+ /**
23
+ * Determine the default host binding.
24
+ * - In cloud environments (Fly.io, Docker with WORKSPACE_ID), bind to 0.0.0.0 for external access
25
+ * - Locally, bind to localhost for security
26
+ * - Can be overridden with AGENT_RELAY_API_HOST env var
27
+ */
28
+ function getDefaultHost() {
29
+ // Explicit override
30
+ if (process.env.AGENT_RELAY_API_HOST) {
31
+ return process.env.AGENT_RELAY_API_HOST;
32
+ }
33
+ // Cloud environment detection - bind to all interfaces for load balancer access
34
+ const isCloudEnvironment = process.env.FLY_APP_NAME || // Fly.io
35
+ process.env.WORKSPACE_ID || // Agent Relay workspace
36
+ process.env.RELAY_WORKSPACE_ID || // Alternative workspace ID
37
+ process.env.RUNNING_IN_DOCKER === 'true'; // Docker container
38
+ return isCloudEnvironment ? '0.0.0.0' : 'localhost';
39
+ }
22
40
  const DEFAULT_CONFIG = {
23
41
  port: 3456,
24
- host: 'localhost',
42
+ host: getDefaultHost(),
25
43
  dataDir: path.join(process.env.HOME || '', '.agent-relay', 'orchestrator'),
26
44
  autoStartDaemons: true,
27
45
  };
@@ -971,6 +989,8 @@ export class Orchestrator extends EventEmitter {
971
989
  likelyCause: crashContext.likelyCause,
972
990
  crashType: 'heartbeat_failure',
973
991
  });
992
+ // Remove the stale agent from the router so connected-agents.json is accurate
993
+ workspace?.daemon?.removeStaleAgent(health.agentName);
974
994
  logger.error('Agent crashed', {
975
995
  workspaceId: health.workspaceId,
976
996
  agentName: health.agentName,
@@ -225,6 +225,11 @@ export declare class Router {
225
225
  * Get connection by agent name.
226
226
  */
227
227
  getConnection(agentName: string): RoutableConnection | undefined;
228
+ /**
229
+ * Force remove an agent from the router (used when process dies without clean disconnect).
230
+ * This cleans up the agent's connection and subscriptions without needing the connection object.
231
+ */
232
+ forceRemoveAgent(agentName: string): boolean;
228
233
  /**
229
234
  * Get number of active connections.
230
235
  */
@@ -876,6 +876,37 @@ export class Router {
876
876
  getConnection(agentName) {
877
877
  return this.agents.get(agentName);
878
878
  }
879
+ /**
880
+ * Force remove an agent from the router (used when process dies without clean disconnect).
881
+ * This cleans up the agent's connection and subscriptions without needing the connection object.
882
+ */
883
+ forceRemoveAgent(agentName) {
884
+ const connection = this.agents.get(agentName);
885
+ if (!connection) {
886
+ routerLog.debug(`forceRemoveAgent: agent ${agentName} not found in router`);
887
+ return false;
888
+ }
889
+ routerLog.info(`Force removing stale agent: ${agentName}`);
890
+ // Remove from agents map
891
+ this.agents.delete(agentName);
892
+ // Remove from all channel subscriptions
893
+ for (const [channel, subscribers] of this.subscriptions) {
894
+ if (subscribers.delete(agentName)) {
895
+ routerLog.debug(`Removed ${agentName} from channel ${channel}`);
896
+ }
897
+ }
898
+ // Remove from connections map
899
+ this.connections.delete(connection.id);
900
+ // Clear any pending deliveries
901
+ this.deliveryTracker.clearPendingForConnection(connection.id);
902
+ // Clean up channel memberships (same as unregister)
903
+ this.removeFromAllChannels(agentName);
904
+ // Clean up shadow relationships
905
+ this.unbindShadow(agentName);
906
+ // Clear processing state
907
+ this.clearProcessing(agentName);
908
+ return true;
909
+ }
879
910
  /**
880
911
  * Get number of active connections.
881
912
  */
@@ -80,6 +80,11 @@ export declare class Daemon {
80
80
  * Called when spawn fails or is cancelled (successful registration clears automatically).
81
81
  */
82
82
  clearSpawning(agentName: string): void;
83
+ /**
84
+ * Remove a stale agent from the router (used when process dies without clean disconnect).
85
+ * This is called by the orchestrator's health monitoring when a PID is detected as dead.
86
+ */
87
+ removeStaleAgent(agentName: string): boolean;
83
88
  /**
84
89
  * Initialize storage adapter (called during start).
85
90
  */