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,587 +0,0 @@
1
- /**
2
- * AgentCard Component
3
- *
4
- * Displays an agent with a distinctive neural/holographic design language.
5
- * Features gradient backgrounds, animated status indicators, and depth effects.
6
- */
7
-
8
- import React from 'react';
9
- import type { Agent } from '../types';
10
- import {
11
- getAgentColor,
12
- getAgentInitials,
13
- STATUS_COLORS,
14
- type AgentStatus,
15
- } from '../lib/colors';
16
- import { getAgentDisplayName, getAgentBreadcrumb } from '../lib/hierarchy';
17
- import { ThinkingIndicator, ThinkingDot } from './ThinkingIndicator';
18
- import { getStuckDuration, formatStuckDuration } from '../lib/stuckDetection';
19
-
20
- export interface AgentCardProps {
21
- agent: Agent;
22
- isSelected?: boolean;
23
- showBreadcrumb?: boolean;
24
- compact?: boolean;
25
- displayNameOverride?: string;
26
- /** Whether the agent is pinned to the top */
27
- isPinned?: boolean;
28
- /** Whether max pins has been reached (disables pin button for unpinned agents) */
29
- isMaxPinned?: boolean;
30
- onClick?: (agent: Agent) => void;
31
- onMessageClick?: (agent: Agent) => void;
32
- onReleaseClick?: (agent: Agent) => void;
33
- onLogsClick?: (agent: Agent) => void;
34
- onProfileClick?: (agent: Agent) => void;
35
- /** Handler for pin/unpin toggle */
36
- onPinToggle?: (agent: Agent) => void;
37
- }
38
-
39
- /**
40
- * Get a descriptive tooltip for an agent's connection status.
41
- */
42
- function getStatusTooltip(status: AgentStatus, isProcessing?: boolean, isStuck?: boolean, stuckDuration?: number): string {
43
- if (isStuck && stuckDuration) {
44
- return `Stuck - Agent received message ${formatStuckDuration(stuckDuration)} ago but hasn't responded`;
45
- }
46
- if (isProcessing) {
47
- return 'Processing - Agent is actively working';
48
- }
49
- switch (status) {
50
- case 'online':
51
- return 'Connected - Agent is online and ready';
52
- case 'offline':
53
- return 'Disconnected - Agent is not connected';
54
- case 'busy':
55
- return 'Busy - Agent is occupied with a task';
56
- case 'processing':
57
- return 'Processing - Agent is actively working';
58
- case 'error':
59
- return 'Error - Agent encountered an error';
60
- case 'attention':
61
- return 'Attention - Agent requires user input';
62
- case 'stuck':
63
- return 'Stuck - Agent may be blocked or unresponsive';
64
- default:
65
- return `Status: ${status}`;
66
- }
67
- }
68
-
69
- export function AgentCard({
70
- agent,
71
- isSelected = false,
72
- showBreadcrumb = false,
73
- compact = false,
74
- displayNameOverride,
75
- isPinned = false,
76
- isMaxPinned = false,
77
- onClick,
78
- onMessageClick,
79
- onReleaseClick,
80
- onLogsClick,
81
- onProfileClick,
82
- onPinToggle,
83
- }: AgentCardProps) {
84
- const colors = getAgentColor(agent.name);
85
- const initials = getAgentInitials(agent.name);
86
- const displayName = displayNameOverride || getAgentDisplayName(agent.name);
87
- const stuckDuration = getStuckDuration(agent);
88
- const isStuck = agent.isStuck || stuckDuration > 0;
89
- const statusColor = isStuck ? STATUS_COLORS.stuck : (STATUS_COLORS[agent.status] || STATUS_COLORS.offline);
90
- const isOnline = agent.status === 'online';
91
- const statusTooltip = getStatusTooltip(agent.status, agent.isProcessing, isStuck, stuckDuration);
92
-
93
- const handleClick = () => {
94
- onClick?.(agent);
95
- };
96
-
97
- const handleMessageClick = (e: React.MouseEvent) => {
98
- e.stopPropagation();
99
- onMessageClick?.(agent);
100
- };
101
-
102
- const handleReleaseClick = (e: React.MouseEvent) => {
103
- e.stopPropagation();
104
- onReleaseClick?.(agent);
105
- };
106
-
107
- const handleLogsClick = (e: React.MouseEvent) => {
108
- e.stopPropagation();
109
- onLogsClick?.(agent);
110
- };
111
-
112
- const handleProfileClick = (e: React.MouseEvent) => {
113
- e.stopPropagation();
114
- onProfileClick?.(agent);
115
- };
116
-
117
- const handlePinToggle = (e: React.MouseEvent) => {
118
- e.stopPropagation();
119
- onPinToggle?.(agent);
120
- };
121
-
122
- if (compact) {
123
- return (
124
- <div
125
- className={`
126
- group relative flex items-start gap-3 py-2.5 px-3 rounded-lg cursor-pointer
127
- transition-all duration-300 ease-out
128
- hover:bg-gradient-to-r hover:from-[rgba(255,255,255,0.03)] hover:to-transparent
129
- ${isSelected
130
- ? 'bg-gradient-to-r from-[rgba(255,255,255,0.06)] to-transparent'
131
- : ''
132
- }
133
- `}
134
- onClick={handleClick}
135
- style={{
136
- borderLeft: isSelected ? `2px solid ${colors.primary}` : '2px solid transparent',
137
- boxShadow: isSelected ? `inset 4px 0 12px -4px ${colors.primary}40` : 'none',
138
- }}
139
- >
140
- {/* Agent Avatar with Glow */}
141
- <div className="relative">
142
- <div
143
- className={`
144
- w-8 h-8 rounded-lg flex items-center justify-center font-bold text-[11px] tracking-wide
145
- transition-all duration-300 relative overflow-hidden
146
- ${isOnline ? 'shadow-lg' : 'opacity-60'}
147
- `}
148
- style={{
149
- background: `linear-gradient(135deg, ${colors.primary}, ${colors.primary}99)`,
150
- boxShadow: isOnline ? `0 2px 12px ${colors.primary}50` : 'none',
151
- }}
152
- >
153
- {/* Subtle shine effect */}
154
- <div
155
- className="absolute inset-0 opacity-30"
156
- style={{
157
- background: 'linear-gradient(135deg, rgba(255,255,255,0.3) 0%, transparent 50%)',
158
- }}
159
- />
160
- <span className="relative z-10" style={{ color: colors.text }}>{initials}</span>
161
- </div>
162
- {/* Status Ring */}
163
- {isOnline && (
164
- <div
165
- className="absolute -bottom-0.5 -right-0.5 w-3 h-3 rounded-full border-2 border-bg-primary"
166
- style={{
167
- backgroundColor: statusColor,
168
- boxShadow: `0 0 8px ${statusColor}`,
169
- }}
170
- title={statusTooltip}
171
- />
172
- )}
173
- </div>
174
-
175
- {/* Agent Info */}
176
- <div className="flex-1 min-w-0 flex flex-col">
177
- <div className="flex items-start gap-1.5 flex-wrap">
178
- <span
179
- className={`
180
- text-[13px] font-semibold tracking-tight transition-colors duration-200
181
- whitespace-normal break-words leading-snug
182
- ${isOnline ? 'text-text-primary' : 'text-text-secondary'}
183
- `}
184
- >
185
- {displayName}
186
- </span>
187
- {agent.isLocal && (
188
- <span
189
- className="inline-flex items-center px-1.5 py-0.5 rounded text-[9px] font-medium uppercase tracking-wider
190
- bg-gradient-to-r from-orange-500/20 to-amber-500/20 text-orange-400 border border-orange-500/30"
191
- title={`Local agent from ${agent.daemonName || 'linked daemon'}`}
192
- >
193
- Local
194
- </span>
195
- )}
196
- {isPinned && (
197
- <span
198
- className="inline-flex items-center text-amber-400"
199
- title="Pinned to top"
200
- >
201
- <PinIcon size={12} filled />
202
- </span>
203
- )}
204
- </div>
205
- {!displayNameOverride && (
206
- <span className="text-[10px] text-text-muted truncate font-mono opacity-70 mt-0.5">
207
- {agent.isLocal ? agent.daemonName || agent.machineId : getAgentBreadcrumb(agent.name)}
208
- </span>
209
- )}
210
-
211
- {/* Actions & Status */}
212
- <div className="mt-2 flex items-center flex-wrap gap-2">
213
- {onPinToggle && (
214
- <button
215
- className={`
216
- relative bg-transparent border border-transparent p-1.5 cursor-pointer
217
- flex items-center justify-center rounded-md transition-all duration-200
218
- ${isPinned
219
- ? 'text-amber-400 hover:bg-amber-400/10 hover:border-amber-400/30'
220
- : 'text-text-dim hover:bg-amber-400/10 hover:border-amber-400/30 hover:text-amber-400'}
221
- ${!isPinned && isMaxPinned ? 'opacity-40 cursor-not-allowed' : ''}
222
- hover:shadow-[0_0_12px_rgba(251,191,36,0.25)]
223
- `}
224
- onClick={handlePinToggle}
225
- title={isPinned ? 'Unpin from top' : isMaxPinned ? 'Maximum pins reached (5)' : 'Pin to top'}
226
- disabled={!isPinned && isMaxPinned}
227
- >
228
- <PinIcon size={16} filled={isPinned} />
229
- </button>
230
- )}
231
- {onProfileClick && (
232
- <button
233
- className="relative bg-transparent border border-transparent text-text-dim p-1.5 cursor-pointer
234
- flex items-center justify-center rounded-md transition-all duration-200
235
- opacity-100
236
- hover:bg-[#a855f7]/10 hover:border-[#a855f7]/30 hover:text-[#a855f7]
237
- hover:shadow-[0_0_12px_rgba(168,85,247,0.25)]"
238
- onClick={handleProfileClick}
239
- title="View profile"
240
- >
241
- <ProfileIcon />
242
- </button>
243
- )}
244
- {agent.isSpawned && onLogsClick && (
245
- <button
246
- className="relative bg-transparent border border-transparent text-text-dim p-1.5 cursor-pointer
247
- flex items-center justify-center rounded-md transition-all duration-200
248
- opacity-100
249
- hover:bg-accent-cyan/10 hover:border-accent-cyan/30 hover:text-accent-cyan
250
- hover:shadow-[0_0_12px_rgba(0,217,255,0.25)]"
251
- onClick={handleLogsClick}
252
- title="View logs"
253
- >
254
- <LogsIcon />
255
- </button>
256
- )}
257
- {agent.isSpawned && onReleaseClick && (
258
- <button
259
- className="relative bg-transparent border border-transparent text-text-dim p-1.5 cursor-pointer
260
- flex items-center justify-center rounded-md transition-all duration-200
261
- opacity-100
262
- hover:bg-error/10 hover:border-error/30 hover:text-error
263
- hover:shadow-[0_0_12px_rgba(255,68,68,0.25)]"
264
- onClick={handleReleaseClick}
265
- title="Kill agent"
266
- >
267
- <ReleaseIcon />
268
- </button>
269
- )}
270
- {agent.isProcessing ? (
271
- <div title={statusTooltip}>
272
- <ThinkingDot isProcessing={true} />
273
- </div>
274
- ) : (
275
- <div
276
- className={`
277
- w-2 h-2 rounded-full transition-all duration-300
278
- ${isOnline ? 'animate-pulse' : ''}
279
- `}
280
- style={{
281
- backgroundColor: statusColor,
282
- boxShadow: isOnline ? `0 0 6px ${statusColor}` : 'none',
283
- }}
284
- title={statusTooltip}
285
- />
286
- )}
287
- {agent.needsAttention && (
288
- <div
289
- className="w-2 h-2 rounded-full bg-warning animate-pulse shadow-[0_0_8px_rgba(255,107,53,0.5)]"
290
- title="Needs Attention - Agent requires user input or has pending decisions"
291
- />
292
- )}
293
- {isStuck && (
294
- <div
295
- className="flex items-center gap-1 px-1.5 py-0.5 rounded bg-[#f97316]/20 text-[#f97316] text-[10px] font-medium animate-pulse"
296
- title={statusTooltip}
297
- >
298
- <StuckIcon />
299
- <span>{formatStuckDuration(stuckDuration)}</span>
300
- </div>
301
- )}
302
- </div>
303
- </div>
304
- </div>
305
- );
306
- }
307
-
308
- return (
309
- <div
310
- className={`
311
- rounded-lg p-3 cursor-pointer transition-all duration-200
312
- hover:shadow-md hover:-translate-y-px
313
- ${isSelected ? 'border-2 shadow-[0_0_0_2px_rgba(74,158,255,0.15)]' : 'border'}
314
- `}
315
- onClick={handleClick}
316
- style={{
317
- backgroundColor: colors.light,
318
- borderColor: colors.primary,
319
- }}
320
- >
321
- <div className="flex items-center gap-3">
322
- <div
323
- className="w-10 h-10 rounded-lg flex items-center justify-center font-semibold text-sm relative"
324
- style={{ backgroundColor: colors.primary }}
325
- >
326
- <span style={{ color: colors.text }}>{initials}</span>
327
- <div
328
- className="absolute -bottom-0.5 -right-0.5 w-3 h-3 rounded-full border-2 border-white"
329
- style={{ backgroundColor: statusColor }}
330
- title={statusTooltip}
331
- />
332
- </div>
333
- <div className="flex-1 min-w-0">
334
- <div className="flex items-center gap-2">
335
- <span className="font-semibold text-sm text-text-primary">{displayName}</span>
336
- {agent.isLocal && (
337
- <span
338
- className="inline-flex items-center px-1.5 py-0.5 rounded text-[9px] font-medium uppercase tracking-wider
339
- bg-gradient-to-r from-orange-500/20 to-amber-500/20 text-orange-400 border border-orange-500/30"
340
- title={`Local agent from ${agent.daemonName || 'linked daemon'}`}
341
- >
342
- Local
343
- </span>
344
- )}
345
- {isPinned && (
346
- <span
347
- className="inline-flex items-center text-amber-400"
348
- title="Pinned to top"
349
- >
350
- <PinIcon size={14} filled />
351
- </span>
352
- )}
353
- {agent.needsAttention && (
354
- <span className="bg-red-500 text-white text-[10px] font-bold w-4 h-4 rounded-full flex items-center justify-center" title="Needs Attention - Agent requires user input or has pending decisions">!</span>
355
- )}
356
- {isStuck && (
357
- <span className="bg-[#f97316] text-white text-[10px] font-bold px-1.5 py-0.5 rounded flex items-center gap-1" title={statusTooltip}>
358
- <StuckIcon /> {formatStuckDuration(stuckDuration)}
359
- </span>
360
- )}
361
- </div>
362
- {showBreadcrumb ? (
363
- <span className="text-xs text-text-muted truncate block">{agent.isLocal ? agent.daemonName || agent.machineId : getAgentBreadcrumb(agent.name)}</span>
364
- ) : (
365
- <span className="text-xs text-text-muted truncate block">{agent.isLocal ? agent.daemonName || agent.machineId : agent.name}</span>
366
- )}
367
- {agent.agentId && (
368
- <span className="text-[10px] text-text-muted font-mono opacity-70" title="Agent ID (use to resume)">
369
- ID: {agent.agentId}
370
- </span>
371
- )}
372
- </div>
373
- </div>
374
-
375
- {agent.isProcessing && (
376
- <div className="mt-2 p-2 bg-indigo-50 rounded flex items-center gap-2 border border-indigo-200">
377
- <ThinkingIndicator
378
- isProcessing={true}
379
- processingStartedAt={agent.processingStartedAt}
380
- size="medium"
381
- showElapsed={true}
382
- />
383
- <span className="text-xs text-indigo-500 font-medium">Thinking...</span>
384
- </div>
385
- )}
386
-
387
- {agent.currentTask && !agent.isProcessing && (
388
- <div className="mt-2 p-2 bg-bg-hover rounded text-xs">
389
- <span className="text-text-muted mr-1">Working on:</span>
390
- <span className="text-text-primary line-clamp-2" title={agent.currentTask}>{agent.currentTask}</span>
391
- </div>
392
- )}
393
-
394
- <div className="mt-3 flex justify-between items-center">
395
- <div className="flex gap-2 text-xs text-text-muted">
396
- {agent.cli && <span className="bg-bg-hover py-0.5 px-1.5 rounded">{agent.cli}</span>}
397
- {agent.messageCount !== undefined && agent.messageCount > 0 && (
398
- <span style={{ color: colors.primary }}>{agent.messageCount} msgs</span>
399
- )}
400
- {agent.isSpawned && (
401
- <span className="bg-accent-light text-accent text-[10px] py-0.5 px-1.5 rounded uppercase font-medium">spawned</span>
402
- )}
403
- </div>
404
- <div className="flex gap-1.5">
405
- {onPinToggle && (
406
- <button
407
- className={`
408
- relative bg-gradient-to-b rounded-md py-1.5 px-2.5 cursor-pointer flex items-center justify-center gap-1 transition-all duration-200 overflow-hidden
409
- ${isPinned
410
- ? 'from-[#3a2a1a] to-[#2a1f0f] text-amber-400 border border-amber-600/50 shadow-[inset_0_1px_0_rgba(251,191,36,0.1),0_2px_4px_rgba(0,0,0,0.3)] hover:shadow-[inset_0_1px_0_rgba(251,191,36,0.2),0_0_12px_rgba(251,191,36,0.4),0_2px_8px_rgba(0,0,0,0.4)]'
411
- : 'from-[#2a2a2a] to-[#1a1a1a] text-text-muted border border-[#404040] shadow-[inset_0_1px_0_rgba(255,255,255,0.05),0_2px_4px_rgba(0,0,0,0.3)] hover:from-[#3a2a1a] hover:to-[#2a1f0f] hover:text-amber-400 hover:border-amber-600/50 hover:shadow-[inset_0_1px_0_rgba(251,191,36,0.1),0_0_12px_rgba(251,191,36,0.3),0_2px_8px_rgba(0,0,0,0.4)]'}
412
- ${!isPinned && isMaxPinned ? 'opacity-40 cursor-not-allowed' : 'hover:scale-105'}
413
- active:scale-[0.98]
414
- `}
415
- onClick={handlePinToggle}
416
- title={isPinned ? 'Unpin from top' : isMaxPinned ? 'Maximum pins reached (5)' : 'Pin to top'}
417
- disabled={!isPinned && isMaxPinned}
418
- >
419
- <PinIcon size={16} filled={isPinned} />
420
- </button>
421
- )}
422
- {onProfileClick && (
423
- <button
424
- className="relative bg-gradient-to-b from-[#2a1a3a] to-[#1a0f2a] text-[#a855f7] border border-[#402060] rounded-md py-1.5 px-2.5 cursor-pointer flex items-center justify-center gap-1 transition-all duration-200 shadow-[inset_0_1px_0_rgba(168,85,247,0.1),0_2px_4px_rgba(0,0,0,0.3)] overflow-hidden hover:bg-gradient-to-b hover:from-[#402060] hover:to-[#301a50] hover:border-[#a855f7] hover:shadow-[inset_0_1px_0_rgba(168,85,247,0.2),0_0_12px_rgba(168,85,247,0.4),0_2px_8px_rgba(0,0,0,0.4)] hover:scale-105 active:scale-[0.98]"
425
- onClick={handleProfileClick}
426
- title="View profile"
427
- >
428
- <ProfileIcon />
429
- </button>
430
- )}
431
- {agent.isSpawned && onLogsClick && (
432
- <button
433
- className="relative bg-gradient-to-b from-[#1a2a3a] to-[#0f1a2a] text-accent-cyan border border-[#204060] rounded-md py-1.5 px-2.5 cursor-pointer flex items-center justify-center gap-1 transition-all duration-200 shadow-[inset_0_1px_0_rgba(0,217,255,0.1),0_2px_4px_rgba(0,0,0,0.3)] overflow-hidden hover:bg-gradient-to-b hover:from-[#204060] hover:to-[#1a3a50] hover:border-accent-cyan hover:shadow-[inset_0_1px_0_rgba(0,217,255,0.2),0_0_12px_rgba(0,217,255,0.4),0_2px_8px_rgba(0,0,0,0.4)] hover:scale-105 active:scale-[0.98]"
434
- onClick={handleLogsClick}
435
- title="View logs"
436
- >
437
- <LogsIcon />
438
- </button>
439
- )}
440
- {agent.isSpawned && onReleaseClick && (
441
- <button
442
- className="relative bg-gradient-to-b from-[#3a1a1a] to-[#2a0f0f] text-[#ff6b6b] border border-[#4a2020] rounded-md py-1.5 px-2.5 cursor-pointer flex items-center justify-center gap-1 transition-all duration-200 shadow-[inset_0_1px_0_rgba(255,107,107,0.1),0_2px_4px_rgba(0,0,0,0.3)] overflow-hidden hover:bg-gradient-to-b hover:from-[#4a2020] hover:to-[#3a1515] hover:border-[#ff4444] hover:text-[#ff4444] hover:shadow-[inset_0_1px_0_rgba(255,68,68,0.2),0_0_12px_rgba(255,68,68,0.4),0_2px_8px_rgba(0,0,0,0.4)] hover:scale-105 active:scale-[0.98]"
443
- onClick={handleReleaseClick}
444
- title="Release agent"
445
- >
446
- <ReleaseIcon />
447
- </button>
448
- )}
449
- {onMessageClick && (
450
- <button
451
- className="text-white border-none rounded py-1 px-2 cursor-pointer flex items-center justify-center transition-opacity duration-200 hover:opacity-90"
452
- style={{ backgroundColor: colors.primary }}
453
- onClick={handleMessageClick}
454
- title="Send message"
455
- >
456
- <MessageIcon />
457
- </button>
458
- )}
459
- </div>
460
- </div>
461
- </div>
462
- );
463
- }
464
-
465
- function MessageIcon() {
466
- return (
467
- <svg
468
- width="16"
469
- height="16"
470
- viewBox="0 0 24 24"
471
- fill="none"
472
- stroke="currentColor"
473
- strokeWidth="2"
474
- strokeLinecap="round"
475
- strokeLinejoin="round"
476
- >
477
- <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" />
478
- </svg>
479
- );
480
- }
481
-
482
- function ReleaseIcon() {
483
- return (
484
- <svg
485
- width="16"
486
- height="16"
487
- viewBox="0 0 24 24"
488
- fill="none"
489
- className="release-icon"
490
- >
491
- <path
492
- d="M12 22c5.523 0 10-4.477 10-10a9.96 9.96 0 0 0-3-7.141"
493
- stroke="currentColor"
494
- strokeWidth="2"
495
- strokeLinecap="round"
496
- />
497
- <path
498
- d="M12 22C6.477 22 2 17.523 2 12a9.96 9.96 0 0 1 3-7.141"
499
- stroke="currentColor"
500
- strokeWidth="2"
501
- strokeLinecap="round"
502
- />
503
- <line
504
- x1="12"
505
- y1="2"
506
- x2="12"
507
- y2="12"
508
- stroke="currentColor"
509
- strokeWidth="2.5"
510
- strokeLinecap="round"
511
- />
512
- </svg>
513
- );
514
- }
515
-
516
- function LogsIcon() {
517
- return (
518
- <svg
519
- width="16"
520
- height="16"
521
- viewBox="0 0 24 24"
522
- fill="none"
523
- stroke="currentColor"
524
- strokeWidth="2"
525
- strokeLinecap="round"
526
- strokeLinejoin="round"
527
- >
528
- <polyline points="4 17 10 11 4 5" />
529
- <line x1="12" y1="19" x2="20" y2="19" />
530
- </svg>
531
- );
532
- }
533
-
534
- function StuckIcon() {
535
- return (
536
- <svg
537
- width="12"
538
- height="12"
539
- viewBox="0 0 24 24"
540
- fill="none"
541
- stroke="currentColor"
542
- strokeWidth="2"
543
- strokeLinecap="round"
544
- strokeLinejoin="round"
545
- >
546
- <circle cx="12" cy="12" r="10" />
547
- <line x1="12" y1="8" x2="12" y2="12" />
548
- <line x1="12" y1="16" x2="12.01" y2="16" />
549
- </svg>
550
- );
551
- }
552
-
553
- function ProfileIcon() {
554
- return (
555
- <svg
556
- width="16"
557
- height="16"
558
- viewBox="0 0 24 24"
559
- fill="none"
560
- stroke="currentColor"
561
- strokeWidth="2"
562
- strokeLinecap="round"
563
- strokeLinejoin="round"
564
- >
565
- <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" />
566
- <circle cx="12" cy="7" r="4" />
567
- </svg>
568
- );
569
- }
570
-
571
- function PinIcon({ size = 16, filled = false }: { size?: number; filled?: boolean }) {
572
- return (
573
- <svg
574
- width={size}
575
- height={size}
576
- viewBox="0 0 24 24"
577
- fill={filled ? 'currentColor' : 'none'}
578
- stroke="currentColor"
579
- strokeWidth="2"
580
- strokeLinecap="round"
581
- strokeLinejoin="round"
582
- >
583
- <path d="M12 17v5" />
584
- <path d="M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4.76Z" />
585
- </svg>
586
- );
587
- }