agent-relay 2.0.11 → 2.0.13

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 (115) hide show
  1. package/bin/relay-pty-darwin-arm64 +0 -0
  2. package/bin/relay-pty-darwin-x64 +0 -0
  3. package/bin/relay-pty-linux-x64 +0 -0
  4. package/dist/dashboard/out/404.html +1 -1
  5. package/dist/dashboard/out/_next/static/chunks/320-23e5ffe6aa7eb934.js +1 -0
  6. package/{packages/dashboard/ui-dist/_next/static/css/99c2552394077586.css → dist/dashboard/out/_next/static/css/605dd4e30c91986f.css} +1 -1
  7. package/dist/dashboard/out/app/onboarding.html +1 -1
  8. package/dist/dashboard/out/app/onboarding.txt +1 -1
  9. package/dist/dashboard/out/app.html +1 -1
  10. package/dist/dashboard/out/app.txt +2 -2
  11. package/dist/dashboard/out/cloud/link.html +1 -1
  12. package/dist/dashboard/out/cloud/link.txt +1 -1
  13. package/dist/dashboard/out/connect-repos.html +1 -1
  14. package/dist/dashboard/out/connect-repos.txt +1 -1
  15. package/dist/dashboard/out/history.html +1 -1
  16. package/dist/dashboard/out/history.txt +1 -1
  17. package/dist/dashboard/out/index.html +1 -1
  18. package/dist/dashboard/out/index.txt +2 -2
  19. package/dist/dashboard/out/login.html +2 -2
  20. package/dist/dashboard/out/login.txt +1 -1
  21. package/dist/dashboard/out/metrics.html +1 -1
  22. package/dist/dashboard/out/metrics.txt +1 -1
  23. package/dist/dashboard/out/pricing.html +2 -2
  24. package/dist/dashboard/out/pricing.txt +1 -1
  25. package/dist/dashboard/out/providers/setup/claude.html +1 -1
  26. package/dist/dashboard/out/providers/setup/claude.txt +1 -1
  27. package/dist/dashboard/out/providers/setup/codex.html +1 -1
  28. package/dist/dashboard/out/providers/setup/codex.txt +1 -1
  29. package/dist/dashboard/out/providers/setup/cursor.html +1 -1
  30. package/dist/dashboard/out/providers/setup/cursor.txt +1 -1
  31. package/dist/dashboard/out/providers.html +1 -1
  32. package/dist/dashboard/out/providers.txt +1 -1
  33. package/dist/dashboard/out/signup.html +2 -2
  34. package/dist/dashboard/out/signup.txt +1 -1
  35. package/package.json +15 -15
  36. package/packages/api-types/package.json +1 -1
  37. package/packages/bridge/dist/spawner.js +25 -71
  38. package/packages/bridge/package.json +7 -7
  39. package/packages/cloud/dist/api/cli-pty-runner.js +4 -25
  40. package/packages/cloud/dist/api/provider-env.d.ts +12 -0
  41. package/packages/cloud/dist/api/provider-env.js +66 -0
  42. package/packages/cloud/dist/api/providers.js +12 -2
  43. package/packages/cloud/package.json +6 -6
  44. package/packages/config/package.json +2 -2
  45. package/packages/continuity/package.json +1 -1
  46. package/packages/daemon/dist/cli-auth.js +4 -25
  47. package/packages/daemon/package.json +12 -12
  48. package/packages/dashboard/dist/server.js +32 -0
  49. package/packages/dashboard/package.json +12 -12
  50. package/packages/dashboard/ui/react-components/settings/WorkspaceSettingsPanel.tsx +44 -3
  51. package/packages/dashboard/ui-dist/404.html +1 -1
  52. package/packages/dashboard/ui-dist/_next/static/chunks/320-23e5ffe6aa7eb934.js +1 -0
  53. package/{dist/dashboard/out/_next/static/css/99c2552394077586.css → packages/dashboard/ui-dist/_next/static/css/605dd4e30c91986f.css} +1 -1
  54. package/packages/dashboard/ui-dist/app/onboarding.html +1 -1
  55. package/packages/dashboard/ui-dist/app/onboarding.txt +1 -1
  56. package/packages/dashboard/ui-dist/app.html +1 -1
  57. package/packages/dashboard/ui-dist/app.txt +2 -2
  58. package/packages/dashboard/ui-dist/cloud/link.html +1 -1
  59. package/packages/dashboard/ui-dist/cloud/link.txt +1 -1
  60. package/packages/dashboard/ui-dist/connect-repos.html +1 -1
  61. package/packages/dashboard/ui-dist/connect-repos.txt +1 -1
  62. package/packages/dashboard/ui-dist/history.html +1 -1
  63. package/packages/dashboard/ui-dist/history.txt +1 -1
  64. package/packages/dashboard/ui-dist/index.html +1 -1
  65. package/packages/dashboard/ui-dist/index.txt +2 -2
  66. package/packages/dashboard/ui-dist/login.html +2 -2
  67. package/packages/dashboard/ui-dist/login.txt +1 -1
  68. package/packages/dashboard/ui-dist/metrics.html +1 -1
  69. package/packages/dashboard/ui-dist/metrics.txt +1 -1
  70. package/packages/dashboard/ui-dist/pricing.html +2 -2
  71. package/packages/dashboard/ui-dist/pricing.txt +1 -1
  72. package/packages/dashboard/ui-dist/providers/setup/claude.html +1 -1
  73. package/packages/dashboard/ui-dist/providers/setup/claude.txt +1 -1
  74. package/packages/dashboard/ui-dist/providers/setup/codex.html +1 -1
  75. package/packages/dashboard/ui-dist/providers/setup/codex.txt +1 -1
  76. package/packages/dashboard/ui-dist/providers/setup/cursor.html +1 -1
  77. package/packages/dashboard/ui-dist/providers/setup/cursor.txt +1 -1
  78. package/packages/dashboard/ui-dist/providers.html +1 -1
  79. package/packages/dashboard/ui-dist/providers.txt +1 -1
  80. package/packages/dashboard/ui-dist/signup.html +2 -2
  81. package/packages/dashboard/ui-dist/signup.txt +1 -1
  82. package/packages/dashboard-server/package.json +12 -12
  83. package/packages/hooks/package.json +4 -4
  84. package/packages/mcp/package.json +2 -2
  85. package/packages/memory/package.json +2 -2
  86. package/packages/policy/package.json +2 -2
  87. package/packages/protocol/package.json +1 -1
  88. package/packages/resiliency/package.json +1 -1
  89. package/packages/sdk/package.json +2 -2
  90. package/packages/spawner/package.json +1 -1
  91. package/packages/state/package.json +1 -1
  92. package/packages/storage/package.json +2 -2
  93. package/packages/telemetry/package.json +1 -1
  94. package/packages/trajectory/package.json +2 -2
  95. package/packages/user-directory/dist/user-directory.d.ts +17 -0
  96. package/packages/user-directory/dist/user-directory.js +73 -0
  97. package/packages/user-directory/package.json +2 -2
  98. package/packages/utils/dist/index.d.ts +1 -0
  99. package/packages/utils/dist/index.js +1 -0
  100. package/packages/utils/dist/relay-pty-path.d.ts +44 -0
  101. package/packages/utils/dist/relay-pty-path.js +127 -0
  102. package/packages/utils/package.json +6 -1
  103. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +1 -0
  104. package/packages/wrapper/dist/relay-pty-orchestrator.js +71 -32
  105. package/packages/wrapper/package.json +6 -6
  106. package/dist/dashboard/out/_next/static/chunks/320-22ebe7be58cf982a.js +0 -1
  107. package/packages/dashboard/ui-dist/_next/static/chunks/320-22ebe7be58cf982a.js +0 -1
  108. /package/dist/dashboard/out/_next/static/{N2nFek-KCN321ZAghmjge → Fa21F5wPUusvLUxj67gGm}/_buildManifest.js +0 -0
  109. /package/dist/dashboard/out/_next/static/{N2nFek-KCN321ZAghmjge → Fa21F5wPUusvLUxj67gGm}/_ssgManifest.js +0 -0
  110. /package/packages/dashboard/ui-dist/_next/static/{59SiFCGkIPHj5xnvI-Hkn → Fa21F5wPUusvLUxj67gGm}/_buildManifest.js +0 -0
  111. /package/packages/dashboard/ui-dist/_next/static/{59SiFCGkIPHj5xnvI-Hkn → Fa21F5wPUusvLUxj67gGm}/_ssgManifest.js +0 -0
  112. /package/packages/dashboard/ui-dist/_next/static/{N2nFek-KCN321ZAghmjge → coRjSO5QkUdvCiJRCqxfi}/_buildManifest.js +0 -0
  113. /package/packages/dashboard/ui-dist/_next/static/{N2nFek-KCN321ZAghmjge → coRjSO5QkUdvCiJRCqxfi}/_ssgManifest.js +0 -0
  114. /package/packages/dashboard/ui-dist/_next/static/{eWYFV8hKU_42BNS8Dj84s → yKnlyfJx-NzAy4kPAGkMr}/_buildManifest.js +0 -0
  115. /package/packages/dashboard/ui-dist/_next/static/{eWYFV8hKU_42BNS8Dj84s → yKnlyfJx-NzAy4kPAGkMr}/_ssgManifest.js +0 -0
@@ -158,6 +158,9 @@ export function WorkspaceSettingsPanel({
158
158
  google: true, // Default to terminal for Gemini - allows choosing OAuth or API key
159
159
  });
160
160
 
161
+ // Provider disconnection state
162
+ const [disconnectingProvider, setDisconnectingProvider] = useState<string | null>(null);
163
+
161
164
  // Repo sync state
162
165
  const [syncingRepoId, setSyncingRepoId] = useState<string | null>(null);
163
166
 
@@ -231,6 +234,34 @@ export function WorkspaceSettingsPanel({
231
234
  // ProviderAuthFlow will handle the rest when it mounts
232
235
  };
233
236
 
237
+ // Disconnect a provider
238
+ const handleDisconnectProvider = useCallback(async (provider: AIProvider) => {
239
+ const confirmed = window.confirm(
240
+ `Are you sure you want to disconnect ${provider.displayName}? This will remove the authentication and delete credential files from the workspace.`
241
+ );
242
+ if (!confirmed) return;
243
+
244
+ setDisconnectingProvider(provider.id);
245
+ setProviderError(null);
246
+
247
+ try {
248
+ const result = await cloudApi.disconnectProvider(provider.id, workspaceId);
249
+ if (result.success) {
250
+ setProviderStatus(prev => {
251
+ const updated = { ...prev };
252
+ delete updated[provider.id];
253
+ return updated;
254
+ });
255
+ } else {
256
+ setProviderError(result.error);
257
+ }
258
+ } catch (err) {
259
+ setProviderError(err instanceof Error ? err.message : 'Failed to disconnect provider');
260
+ } finally {
261
+ setDisconnectingProvider(null);
262
+ }
263
+ }, [workspaceId]);
264
+
234
265
  const submitApiKey = async (provider: AIProvider) => {
235
266
  if (!apiKeyInput.trim()) {
236
267
  setProviderError('Please enter an API key');
@@ -605,9 +636,19 @@ export function WorkspaceSettingsPanel({
605
636
  </div>
606
637
 
607
638
  {providerStatus[provider.id] ? (
608
- <div className="flex items-center gap-2 px-4 py-2 bg-success/15 rounded-full border border-success/30">
609
- <div className="w-2 h-2 rounded-full bg-success animate-pulse" />
610
- <span className="text-sm font-medium text-success">Connected</span>
639
+ <div className="flex items-center gap-3">
640
+ <div className="flex items-center gap-2 px-4 py-2 bg-success/15 rounded-full border border-success/30">
641
+ <div className="w-2 h-2 rounded-full bg-success animate-pulse" />
642
+ <span className="text-sm font-medium text-success">Connected</span>
643
+ </div>
644
+ <button
645
+ onClick={() => handleDisconnectProvider(provider)}
646
+ disabled={disconnectingProvider === provider.id}
647
+ className="px-3 py-2 text-xs font-medium text-error/80 hover:text-error hover:bg-error/10 rounded-lg border border-transparent hover:border-error/30 transition-all disabled:opacity-50 disabled:cursor-not-allowed"
648
+ title={`Disconnect ${provider.displayName}`}
649
+ >
650
+ {disconnectingProvider === provider.id ? 'Disconnecting...' : 'Disconnect'}
651
+ </button>
611
652
  </div>
612
653
  ) : null}
613
654
  </div>
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/99c2552394077586.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-1cdd8ed57114d5e1.js"/><script src="/_next/static/chunks/fd9d1056-609918ca7b6280bb.js" async=""></script><script src="/_next/static/chunks/117-c8afed19e821a35d.js" async=""></script><script src="/_next/static/chunks/main-app-fdbeb09028f57c9f.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Agent Relay Dashboard</title><meta name="description" content="Fleet control dashboard for Agent Relay"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-1cdd8ed57114d5e1.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/99c2552394077586.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[4707,[],\"\"]\n5:I[6423,[],\"\"]\nb:I[1060,[],\"\"]\n6:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n7:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n8:{\"display\":\"inline-block\"}\n9:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nc:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"N2nFek-KCN321ZAghmjge\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/99c2552394077586.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$6\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$7\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$9\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$La\"],\"globalErrorComponent\":\"$b\",\"missingSlots\":\"$Wc\"}]\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Agent Relay Dashboard\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Fleet control dashboard for Agent Relay\"}]]\n3:null\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/605dd4e30c91986f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-1cdd8ed57114d5e1.js"/><script src="/_next/static/chunks/fd9d1056-609918ca7b6280bb.js" async=""></script><script src="/_next/static/chunks/117-c8afed19e821a35d.js" async=""></script><script src="/_next/static/chunks/main-app-fdbeb09028f57c9f.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Agent Relay Dashboard</title><meta name="description" content="Fleet control dashboard for Agent Relay"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-1cdd8ed57114d5e1.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/605dd4e30c91986f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[4707,[],\"\"]\n5:I[6423,[],\"\"]\nb:I[1060,[],\"\"]\n6:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n7:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n8:{\"display\":\"inline-block\"}\n9:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nc:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"Fa21F5wPUusvLUxj67gGm\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/605dd4e30c91986f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$6\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$7\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$9\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$La\"],\"globalErrorComponent\":\"$b\",\"missingSlots\":\"$Wc\"}]\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Agent Relay Dashboard\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Fleet control dashboard for Agent Relay\"}]]\n3:null\n"])</script></body></html>