agent-relay 2.0.18 → 2.0.19

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 (120) hide show
  1. package/dist/dashboard/out/404.html +1 -1
  2. package/dist/dashboard/out/_next/static/chunks/320-a6304232cd0ee2ce.js +1 -0
  3. package/dist/dashboard/out/_next/static/chunks/631-16b905e5920f9b59.js +1 -0
  4. package/dist/dashboard/out/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +1 -0
  5. package/dist/dashboard/out/_next/static/css/{45361ce86b2847c4.css → 6892f8422896ef7a.css} +1 -1
  6. package/dist/dashboard/out/app/onboarding.html +1 -1
  7. package/dist/dashboard/out/app/onboarding.txt +1 -1
  8. package/dist/dashboard/out/app.html +1 -1
  9. package/dist/dashboard/out/app.txt +2 -2
  10. package/dist/dashboard/out/cloud/link.html +1 -1
  11. package/dist/dashboard/out/cloud/link.txt +1 -1
  12. package/dist/dashboard/out/complete-profile.html +2 -2
  13. package/dist/dashboard/out/complete-profile.txt +1 -1
  14. package/dist/dashboard/out/connect-repos.html +1 -1
  15. package/dist/dashboard/out/connect-repos.txt +1 -1
  16. package/dist/dashboard/out/history.html +1 -1
  17. package/dist/dashboard/out/history.txt +1 -1
  18. package/dist/dashboard/out/index.html +1 -1
  19. package/dist/dashboard/out/index.txt +2 -2
  20. package/dist/dashboard/out/login.html +2 -2
  21. package/dist/dashboard/out/login.txt +1 -1
  22. package/dist/dashboard/out/metrics.html +1 -1
  23. package/dist/dashboard/out/metrics.txt +1 -1
  24. package/dist/dashboard/out/pricing.html +2 -2
  25. package/dist/dashboard/out/pricing.txt +1 -1
  26. package/dist/dashboard/out/providers/setup/claude.html +1 -1
  27. package/dist/dashboard/out/providers/setup/claude.txt +1 -1
  28. package/dist/dashboard/out/providers/setup/codex.html +1 -1
  29. package/dist/dashboard/out/providers/setup/codex.txt +1 -1
  30. package/dist/dashboard/out/providers/setup/cursor.html +1 -1
  31. package/dist/dashboard/out/providers/setup/cursor.txt +1 -1
  32. package/dist/dashboard/out/providers.html +1 -1
  33. package/dist/dashboard/out/providers.txt +2 -2
  34. package/dist/dashboard/out/signup.html +2 -2
  35. package/dist/dashboard/out/signup.txt +1 -1
  36. package/package.json +16 -16
  37. package/packages/api-types/package.json +1 -1
  38. package/packages/bridge/package.json +8 -8
  39. package/packages/cloud/dist/api/cli-pty-runner.js +9 -6
  40. package/packages/cloud/package.json +6 -6
  41. package/packages/config/dist/cli-auth-config.js +10 -0
  42. package/packages/config/package.json +2 -2
  43. package/packages/continuity/package.json +1 -1
  44. package/packages/daemon/dist/cli-auth.js +5 -1
  45. package/packages/daemon/package.json +12 -12
  46. package/packages/dashboard/package.json +13 -13
  47. package/packages/dashboard/ui/app/providers/page.tsx +2 -2
  48. package/packages/dashboard/ui/react-components/ProviderConnectionList.tsx +23 -8
  49. package/packages/dashboard/ui/react-components/SpawnModal.tsx +16 -6
  50. package/packages/dashboard/ui/react-components/settings/WorkspaceSettingsPanel.tsx +22 -6
  51. package/packages/dashboard/ui-dist/404.html +1 -1
  52. package/packages/dashboard/ui-dist/_next/static/chunks/320-a6304232cd0ee2ce.js +1 -0
  53. package/packages/dashboard/ui-dist/_next/static/chunks/631-16b905e5920f9b59.js +1 -0
  54. package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +1 -0
  55. package/packages/dashboard/ui-dist/_next/static/css/{45361ce86b2847c4.css → 6892f8422896ef7a.css} +1 -1
  56. package/packages/dashboard/ui-dist/app/onboarding.html +1 -1
  57. package/packages/dashboard/ui-dist/app/onboarding.txt +1 -1
  58. package/packages/dashboard/ui-dist/app.html +1 -1
  59. package/packages/dashboard/ui-dist/app.txt +2 -2
  60. package/packages/dashboard/ui-dist/cloud/link.html +1 -1
  61. package/packages/dashboard/ui-dist/cloud/link.txt +1 -1
  62. package/packages/dashboard/ui-dist/complete-profile.html +2 -2
  63. package/packages/dashboard/ui-dist/complete-profile.txt +1 -1
  64. package/packages/dashboard/ui-dist/connect-repos.html +1 -1
  65. package/packages/dashboard/ui-dist/connect-repos.txt +1 -1
  66. package/packages/dashboard/ui-dist/history.html +1 -1
  67. package/packages/dashboard/ui-dist/history.txt +1 -1
  68. package/packages/dashboard/ui-dist/index.html +1 -1
  69. package/packages/dashboard/ui-dist/index.txt +2 -2
  70. package/packages/dashboard/ui-dist/login.html +2 -2
  71. package/packages/dashboard/ui-dist/login.txt +1 -1
  72. package/packages/dashboard/ui-dist/metrics.html +1 -1
  73. package/packages/dashboard/ui-dist/metrics.txt +1 -1
  74. package/packages/dashboard/ui-dist/pricing.html +2 -2
  75. package/packages/dashboard/ui-dist/pricing.txt +1 -1
  76. package/packages/dashboard/ui-dist/providers/setup/claude.html +1 -1
  77. package/packages/dashboard/ui-dist/providers/setup/claude.txt +1 -1
  78. package/packages/dashboard/ui-dist/providers/setup/codex.html +1 -1
  79. package/packages/dashboard/ui-dist/providers/setup/codex.txt +1 -1
  80. package/packages/dashboard/ui-dist/providers/setup/cursor.html +1 -1
  81. package/packages/dashboard/ui-dist/providers/setup/cursor.txt +1 -1
  82. package/packages/dashboard/ui-dist/providers.html +1 -1
  83. package/packages/dashboard/ui-dist/providers.txt +2 -2
  84. package/packages/dashboard/ui-dist/signup.html +2 -2
  85. package/packages/dashboard/ui-dist/signup.txt +1 -1
  86. package/packages/dashboard-server/package.json +12 -12
  87. package/packages/hooks/package.json +4 -4
  88. package/packages/mcp/package.json +2 -2
  89. package/packages/memory/package.json +2 -2
  90. package/packages/policy/package.json +2 -2
  91. package/packages/protocol/package.json +1 -1
  92. package/packages/resiliency/package.json +1 -1
  93. package/packages/sdk/package.json +2 -2
  94. package/packages/spawner/package.json +1 -1
  95. package/packages/state/package.json +1 -1
  96. package/packages/storage/package.json +2 -2
  97. package/packages/telemetry/package.json +1 -1
  98. package/packages/trajectory/package.json +2 -2
  99. package/packages/user-directory/package.json +2 -2
  100. package/packages/utils/package.json +1 -1
  101. package/packages/wrapper/dist/idle-detector.d.ts +4 -0
  102. package/packages/wrapper/dist/idle-detector.js +21 -8
  103. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +5 -0
  104. package/packages/wrapper/dist/relay-pty-orchestrator.js +53 -0
  105. package/packages/wrapper/package.json +6 -6
  106. package/scripts/postinstall.js +41 -1
  107. package/dist/dashboard/out/_next/static/chunks/320-402ffc8646b31da1.js +0 -1
  108. package/dist/dashboard/out/_next/static/chunks/631-af51bad94027527a.js +0 -1
  109. package/dist/dashboard/out/_next/static/chunks/app/providers/page-bcf46064ac4474ce.js +0 -1
  110. package/packages/dashboard/ui-dist/_next/static/chunks/320-402ffc8646b31da1.js +0 -1
  111. package/packages/dashboard/ui-dist/_next/static/chunks/631-af51bad94027527a.js +0 -1
  112. package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/page-bcf46064ac4474ce.js +0 -1
  113. /package/dist/dashboard/out/_next/static/{JIjqkuDKNeoSg7KaMMuhx → cREcLZyPb-5NyVZje0Qfe}/_buildManifest.js +0 -0
  114. /package/dist/dashboard/out/_next/static/{JIjqkuDKNeoSg7KaMMuhx → cREcLZyPb-5NyVZje0Qfe}/_ssgManifest.js +0 -0
  115. /package/packages/dashboard/ui-dist/_next/static/{JIjqkuDKNeoSg7KaMMuhx → N3ajGnJqRESKyCjDvyU52}/_buildManifest.js +0 -0
  116. /package/packages/dashboard/ui-dist/_next/static/{JIjqkuDKNeoSg7KaMMuhx → N3ajGnJqRESKyCjDvyU52}/_ssgManifest.js +0 -0
  117. /package/packages/dashboard/ui-dist/_next/static/{nmkOi7bqeDmLMoWBih8lz → UQiyWwBxIP-9it3GYVBDL}/_buildManifest.js +0 -0
  118. /package/packages/dashboard/ui-dist/_next/static/{nmkOi7bqeDmLMoWBih8lz → UQiyWwBxIP-9it3GYVBDL}/_ssgManifest.js +0 -0
  119. /package/packages/dashboard/ui-dist/_next/static/{wk_gKRNSPpWE-ZhGL6UMl → cREcLZyPb-5NyVZje0Qfe}/_buildManifest.js +0 -0
  120. /package/packages/dashboard/ui-dist/_next/static/{wk_gKRNSPpWE-ZhGL6UMl → cREcLZyPb-5NyVZje0Qfe}/_ssgManifest.js +0 -0
@@ -1,6 +1,6 @@
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/45361ce86b2847c4.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><script src="/_next/static/chunks/282-980c2eb8fff20123.js" async=""></script><script src="/_next/static/chunks/app/signup/page-c7a0a28341365ae0.js" async=""></script><title>Agent Relay Dashboard</title><meta name="description" content="Fleet control dashboard for Agent Relay"/><link rel="apple-touch-icon" href="/apple-icon.png?9e7a840704165ca6" type="image/png" sizes="256x256"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div class="min-h-screen bg-gradient-to-br from-[#0a0a0f] via-[#0d1117] to-[#0a0a0f] flex flex-col items-center justify-center p-4"><div class="fixed inset-0 opacity-10"><div class="absolute inset-0" style="background-image:linear-gradient(rgba(0, 217, 255, 0.1) 1px, transparent 1px),
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/6892f8422896ef7a.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><script src="/_next/static/chunks/282-980c2eb8fff20123.js" async=""></script><script src="/_next/static/chunks/app/signup/page-c7a0a28341365ae0.js" async=""></script><title>Agent Relay Dashboard</title><meta name="description" content="Fleet control dashboard for Agent Relay"/><link rel="apple-touch-icon" href="/apple-icon.png?9e7a840704165ca6" type="image/png" sizes="256x256"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div class="min-h-screen bg-gradient-to-br from-[#0a0a0f] via-[#0d1117] to-[#0a0a0f] flex flex-col items-center justify-center p-4"><div class="fixed inset-0 opacity-10"><div class="absolute inset-0" style="background-image:linear-gradient(rgba(0, 217, 255, 0.1) 1px, transparent 1px),
2
2
  linear-gradient(90deg, rgba(0, 217, 255, 0.1) 1px, transparent 1px);background-size:50px 50px"></div></div><div class="fixed inset-0 overflow-hidden pointer-events-none"><div class="absolute -top-40 -left-40 w-80 h-80 bg-accent-cyan/20 rounded-full blur-[100px]"></div><div class="absolute -bottom-40 -right-40 w-80 h-80 bg-[#00ffc8]/15 rounded-full blur-[100px]"></div></div><div class="relative z-10 w-full max-w-md"><div class="flex flex-col items-center mb-8"><svg width="56" height="56" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg" class="
3
3
  transition-all duration-300
4
4
  drop-shadow-[0_0_8px_rgba(0,217,255,0.3)]
5
5
 
6
- " aria-label="Agent Relay Logo" role="img"><path d="M30 80 L 50 20 L 70 80" stroke="#00d9ff" stroke-width="5" stroke-linejoin="round" stroke-linecap="round" fill="none"></path><line x1="40" y1="50" x2="60" y2="50" stroke="#00d9ff" stroke-width="5" stroke-linecap="round"></line><path d="M50 20 L 50 80" stroke="#00ffc8" stroke-width="2.5" stroke-linecap="round" opacity="0.7"></path><path d="M50 20 C 80 20 80 50 50 50 L 80 80" stroke="#00ffc8" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none" opacity="0.7"></path></svg><h1 class="mt-4 text-3xl font-bold text-white">Get Started</h1><p class="mt-2 text-text-muted text-center">Create your account and start orchestrating AI agents</p></div><div class="bg-bg-primary/80 backdrop-blur-sm border border-border-subtle rounded-2xl p-8 shadow-xl"><div><div class="flex mb-6 bg-bg-secondary/50 rounded-lg p-1"><button type="button" class="flex-1 py-2 px-4 rounded-md text-sm font-medium transition-colors bg-bg-primary text-white shadow-sm">GitHub</button><button type="button" class="flex-1 py-2 px-4 rounded-md text-sm font-medium transition-colors text-text-muted hover:text-white">Email</button></div><div class="mb-6 space-y-3"><div class="flex items-center gap-3 text-sm text-text-secondary"><div class="w-8 h-8 rounded-lg bg-accent-cyan/10 flex items-center justify-center flex-shrink-0"><svg class="w-4 h-4 text-accent-cyan" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path></svg></div><span>Deploy AI agents in seconds</span></div><div class="flex items-center gap-3 text-sm text-text-secondary"><div class="w-8 h-8 rounded-lg bg-[#00ffc8]/10 flex items-center justify-center flex-shrink-0"><svg class="w-4 h-4 text-[#00ffc8]" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"></path></svg></div><span>Real-time agent collaboration</span></div><div class="flex items-center gap-3 text-sm text-text-secondary"><div class="w-8 h-8 rounded-lg bg-[#0891b2]/10 flex items-center justify-center flex-shrink-0"><svg class="w-4 h-4 text-[#0891b2]" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"></path></svg></div><span>Secure credential management</span></div></div><button type="button" disabled="" class="w-full py-4 px-6 bg-[#24292e] hover:bg-[#2f363d] border border-[#444d56] rounded-xl text-white font-medium flex items-center justify-center gap-3 transition-colors disabled:opacity-50 disabled:cursor-not-allowed"><svg class="w-5 h-5 animate-spin" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"></path></svg><span>Loading...</span></button><p class="mt-6 text-center text-text-muted text-sm">By signing up, you agree to our<!-- --> <a href="/terms" class="text-accent-cyan hover:underline">Terms of Service</a> <!-- -->and<!-- --> <a href="/privacy" class="text-accent-cyan hover:underline">Privacy Policy</a></p></div></div><div class="mt-6 text-center"><p class="text-text-muted">Already have an account?<!-- --> <a href="/login" class="text-accent-cyan hover:underline font-medium">Sign in</a></p></div><div class="mt-4 text-center"><a href="/" class="text-text-muted hover:text-white transition-colors text-sm">Back to home</a></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/45361ce86b2847c4.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[9107,[],\"ClientPageRoot\"]\n5:I[4665,[\"282\",\"static/chunks/282-980c2eb8fff20123.js\",\"966\",\"static/chunks/app/signup/page-c7a0a28341365ae0.js\"],\"default\",1]\n6:I[4707,[],\"\"]\n7:I[6423,[],\"\"]\n9:I[1060,[],\"\"]\na:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"JIjqkuDKNeoSg7KaMMuhx\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"signup\"],\"initialTree\":[\"\",{\"children\":[\"signup\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"signup\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[\"$\",\"$L4\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$5\"}],null],null],null]},[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"signup\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/45361ce86b2847c4.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"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.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"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\"}],[\"$\",\"link\",\"4\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-icon.png?9e7a840704165ca6\",\"type\":\"image/png\",\"sizes\":\"256x256\"}]]\n3:null\n"])</script></body></html>
6
+ " aria-label="Agent Relay Logo" role="img"><path d="M30 80 L 50 20 L 70 80" stroke="#00d9ff" stroke-width="5" stroke-linejoin="round" stroke-linecap="round" fill="none"></path><line x1="40" y1="50" x2="60" y2="50" stroke="#00d9ff" stroke-width="5" stroke-linecap="round"></line><path d="M50 20 L 50 80" stroke="#00ffc8" stroke-width="2.5" stroke-linecap="round" opacity="0.7"></path><path d="M50 20 C 80 20 80 50 50 50 L 80 80" stroke="#00ffc8" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none" opacity="0.7"></path></svg><h1 class="mt-4 text-3xl font-bold text-white">Get Started</h1><p class="mt-2 text-text-muted text-center">Create your account and start orchestrating AI agents</p></div><div class="bg-bg-primary/80 backdrop-blur-sm border border-border-subtle rounded-2xl p-8 shadow-xl"><div><div class="flex mb-6 bg-bg-secondary/50 rounded-lg p-1"><button type="button" class="flex-1 py-2 px-4 rounded-md text-sm font-medium transition-colors bg-bg-primary text-white shadow-sm">GitHub</button><button type="button" class="flex-1 py-2 px-4 rounded-md text-sm font-medium transition-colors text-text-muted hover:text-white">Email</button></div><div class="mb-6 space-y-3"><div class="flex items-center gap-3 text-sm text-text-secondary"><div class="w-8 h-8 rounded-lg bg-accent-cyan/10 flex items-center justify-center flex-shrink-0"><svg class="w-4 h-4 text-accent-cyan" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path></svg></div><span>Deploy AI agents in seconds</span></div><div class="flex items-center gap-3 text-sm text-text-secondary"><div class="w-8 h-8 rounded-lg bg-[#00ffc8]/10 flex items-center justify-center flex-shrink-0"><svg class="w-4 h-4 text-[#00ffc8]" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"></path></svg></div><span>Real-time agent collaboration</span></div><div class="flex items-center gap-3 text-sm text-text-secondary"><div class="w-8 h-8 rounded-lg bg-[#0891b2]/10 flex items-center justify-center flex-shrink-0"><svg class="w-4 h-4 text-[#0891b2]" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"></path></svg></div><span>Secure credential management</span></div></div><button type="button" disabled="" class="w-full py-4 px-6 bg-[#24292e] hover:bg-[#2f363d] border border-[#444d56] rounded-xl text-white font-medium flex items-center justify-center gap-3 transition-colors disabled:opacity-50 disabled:cursor-not-allowed"><svg class="w-5 h-5 animate-spin" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"></path></svg><span>Loading...</span></button><p class="mt-6 text-center text-text-muted text-sm">By signing up, you agree to our<!-- --> <a href="/terms" class="text-accent-cyan hover:underline">Terms of Service</a> <!-- -->and<!-- --> <a href="/privacy" class="text-accent-cyan hover:underline">Privacy Policy</a></p></div></div><div class="mt-6 text-center"><p class="text-text-muted">Already have an account?<!-- --> <a href="/login" class="text-accent-cyan hover:underline font-medium">Sign in</a></p></div><div class="mt-4 text-center"><a href="/" class="text-text-muted hover:text-white transition-colors text-sm">Back to home</a></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/6892f8422896ef7a.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[9107,[],\"ClientPageRoot\"]\n5:I[4665,[\"282\",\"static/chunks/282-980c2eb8fff20123.js\",\"966\",\"static/chunks/app/signup/page-c7a0a28341365ae0.js\"],\"default\",1]\n6:I[4707,[],\"\"]\n7:I[6423,[],\"\"]\n9:I[1060,[],\"\"]\na:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"cREcLZyPb-5NyVZje0Qfe\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"signup\"],\"initialTree\":[\"\",{\"children\":[\"signup\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"signup\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[\"$\",\"$L4\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$5\"}],null],null],null]},[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"signup\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/6892f8422896ef7a.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"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.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"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\"}],[\"$\",\"link\",\"4\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-icon.png?9e7a840704165ca6\",\"type\":\"image/png\",\"sizes\":\"256x256\"}]]\n3:null\n"])</script></body></html>
@@ -2,6 +2,6 @@
2
2
  3:I[4665,["282","static/chunks/282-980c2eb8fff20123.js","966","static/chunks/app/signup/page-c7a0a28341365ae0.js"],"default",1]
3
3
  4:I[4707,[],""]
4
4
  5:I[6423,[],""]
5
- 0:["JIjqkuDKNeoSg7KaMMuhx",[[["",{"children":["signup",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["signup",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","signup","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/45361ce86b2847c4.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":{"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."}]}]]}]}]],"notFoundStyles":[]}]}]}]],null],null],["$L6",null]]]]
5
+ 0:["cREcLZyPb-5NyVZje0Qfe",[[["",{"children":["signup",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["signup",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","signup","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/6892f8422896ef7a.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":{"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."}]}]]}]}]],"notFoundStyles":[]}]}]}]],null],null],["$L6",null]]]]
6
6
  6:[["$","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"}],["$","link","4",{"rel":"apple-touch-icon","href":"/apple-icon.png?9e7a840704165ca6","type":"image/png","sizes":"256x256"}]]
7
7
  1:null
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-relay",
3
- "version": "2.0.18",
3
+ "version": "2.0.19",
4
4
  "description": "Real-time agent-to-agent communication system",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -108,21 +108,21 @@
108
108
  },
109
109
  "homepage": "https://github.com/AgentWorkforce/relay#readme",
110
110
  "dependencies": {
111
- "@agent-relay/bridge": "2.0.18",
112
- "@agent-relay/config": "2.0.18",
113
- "@agent-relay/continuity": "2.0.18",
114
- "@agent-relay/daemon": "2.0.18",
115
- "@agent-relay/hooks": "2.0.18",
116
- "@agent-relay/mcp": "2.0.18",
117
- "@agent-relay/protocol": "2.0.18",
118
- "@agent-relay/resiliency": "2.0.18",
119
- "@agent-relay/sdk": "2.0.18",
120
- "@agent-relay/storage": "2.0.18",
121
- "@agent-relay/telemetry": "2.0.18",
122
- "@agent-relay/trajectory": "2.0.18",
123
- "@agent-relay/user-directory": "2.0.18",
124
- "@agent-relay/utils": "2.0.18",
125
- "@agent-relay/wrapper": "2.0.18",
111
+ "@agent-relay/bridge": "2.0.19",
112
+ "@agent-relay/config": "2.0.19",
113
+ "@agent-relay/continuity": "2.0.19",
114
+ "@agent-relay/daemon": "2.0.19",
115
+ "@agent-relay/hooks": "2.0.19",
116
+ "@agent-relay/mcp": "2.0.19",
117
+ "@agent-relay/protocol": "2.0.19",
118
+ "@agent-relay/resiliency": "2.0.19",
119
+ "@agent-relay/sdk": "2.0.19",
120
+ "@agent-relay/storage": "2.0.19",
121
+ "@agent-relay/telemetry": "2.0.19",
122
+ "@agent-relay/trajectory": "2.0.19",
123
+ "@agent-relay/user-directory": "2.0.19",
124
+ "@agent-relay/utils": "2.0.19",
125
+ "@agent-relay/wrapper": "2.0.19",
126
126
  "@nangohq/node": "^0.69.20",
127
127
  "@types/jsonwebtoken": "^9.0.10",
128
128
  "agent-trajectories": "^0.2.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/api-types",
3
- "version": "2.0.18",
3
+ "version": "2.0.19",
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.18",
3
+ "version": "2.0.19",
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.18",
26
- "@agent-relay/config": "2.0.18",
27
- "@agent-relay/utils": "2.0.18",
28
- "@agent-relay/policy": "2.0.18",
29
- "@agent-relay/user-directory": "2.0.18",
30
- "@agent-relay/wrapper": "2.0.18",
31
- "@agent-relay/mcp": "2.0.18"
25
+ "@agent-relay/protocol": "2.0.19",
26
+ "@agent-relay/config": "2.0.19",
27
+ "@agent-relay/utils": "2.0.19",
28
+ "@agent-relay/policy": "2.0.19",
29
+ "@agent-relay/user-directory": "2.0.19",
30
+ "@agent-relay/wrapper": "2.0.19",
31
+ "@agent-relay/mcp": "2.0.19"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/node": "^22.19.3",
@@ -114,9 +114,11 @@ export async function runCLIAuthViaPTY(config, options = {}) {
114
114
  }
115
115
  }, delay);
116
116
  }
117
- // Look for auth URL
118
- const cleanText = stripAnsiCodes(text);
119
- const match = cleanText.match(config.urlPattern);
117
+ // Look for auth URL in accumulated output
118
+ // Join lines that look like URL continuations (handles wrapped URLs)
119
+ const cleanAccumulated = stripAnsiCodes(result.output)
120
+ .replace(/\n(?=[a-zA-Z0-9\-_.~:/?#\[\]@!$&'()*+,;=%])/g, '');
121
+ const match = cleanAccumulated.match(config.urlPattern);
120
122
  if (match && match[1] && !result.authUrl) {
121
123
  result.authUrl = match[1];
122
124
  if (result.authUrl) {
@@ -134,9 +136,10 @@ export async function runCLIAuthViaPTY(config, options = {}) {
134
136
  // Also check stderr for output (some CLIs write to stderr)
135
137
  result.output += text;
136
138
  options.onOutput?.(text);
137
- // Check stderr for auth URLs too
138
- const cleanText = stripAnsiCodes(text);
139
- const match = cleanText.match(config.urlPattern);
139
+ // Check stderr for auth URLs too (using accumulated output)
140
+ const cleanAccumulated = stripAnsiCodes(result.output)
141
+ .replace(/\n(?=[a-zA-Z0-9\-_.~:/?#\[\]@!$&'()*+,;=%])/g, '');
142
+ const match = cleanAccumulated.match(config.urlPattern);
140
143
  if (match && match[1] && !result.authUrl) {
141
144
  result.authUrl = match[1];
142
145
  if (result.authUrl) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/cloud",
3
- "version": "2.0.18",
3
+ "version": "2.0.19",
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.18",
42
- "@agent-relay/config": "2.0.18",
43
- "@agent-relay/resiliency": "2.0.18",
44
- "@agent-relay/storage": "2.0.18",
45
- "@agent-relay/protocol": "2.0.18"
41
+ "@agent-relay/wrapper": "2.0.19",
42
+ "@agent-relay/config": "2.0.19",
43
+ "@agent-relay/resiliency": "2.0.19",
44
+ "@agent-relay/storage": "2.0.19",
45
+ "@agent-relay/protocol": "2.0.19"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@types/node": "^22.19.3",
@@ -69,6 +69,16 @@ export const CLI_AUTH_CONFIG = {
69
69
  delay: 300,
70
70
  description: 'Ready to code permission prompt',
71
71
  },
72
+ {
73
+ // Bypass Permissions mode prompt - for cloud workspaces running in sandboxed containers
74
+ // Shows "1. No, exit" (default selected) and "2. Yes, I accept"
75
+ // We need to select option 2 (down arrow) then confirm (enter)
76
+ // This is safe because cloud workspaces are sandboxed containers
77
+ pattern: /bypass\s*permissions\s*mode|will\s*not\s*ask\s*for\s*your\s*approval|sandboxed\s*container/i,
78
+ response: '\x1b[B\r', // Down arrow to select "Yes, I accept", then Enter
79
+ delay: 500, // Longer delay to ensure menu is fully rendered
80
+ description: 'Bypass permissions mode prompt',
81
+ },
72
82
  {
73
83
  // Fallback: Any "press enter" or "enter to confirm/continue" prompt
74
84
  // Keep this LAST so more specific handlers match first
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/config",
3
- "version": "2.0.18",
3
+ "version": "2.0.19",
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.18",
86
+ "@agent-relay/protocol": "2.0.19",
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.18",
3
+ "version": "2.0.19",
4
4
  "description": "Session continuity manager for Relay (ledgers, handoffs, resume)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -222,7 +222,11 @@ export async function startCLIAuth(provider, options = {}) {
222
222
  }
223
223
  }
224
224
  // Extract auth URL (only if not in error state and don't have URL yet)
225
- const match = cleanText.match(config.urlPattern);
225
+ // Use accumulated output to handle URLs that wrap across multiple lines
226
+ // Join lines that look like URL continuations (no space/newline within URLs)
227
+ const cleanAccumulated = stripAnsiCodes(session.output)
228
+ .replace(/\n(?=[a-zA-Z0-9\-_.~:/?#\[\]@!$&'()*+,;=%])/g, '');
229
+ const match = cleanAccumulated.match(config.urlPattern);
226
230
  if (match && match[1] && !session.authUrl && session.status !== 'error') {
227
231
  session.authUrl = match[1];
228
232
  session.status = 'waiting_auth';
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/daemon",
3
- "version": "2.0.18",
3
+ "version": "2.0.19",
4
4
  "description": "Relay daemon server - agent coordination and message routing",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,17 +22,17 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/protocol": "2.0.18",
26
- "@agent-relay/config": "2.0.18",
27
- "@agent-relay/storage": "2.0.18",
28
- "@agent-relay/bridge": "2.0.18",
29
- "@agent-relay/utils": "2.0.18",
30
- "@agent-relay/policy": "2.0.18",
31
- "@agent-relay/memory": "2.0.18",
32
- "@agent-relay/resiliency": "2.0.18",
33
- "@agent-relay/user-directory": "2.0.18",
34
- "@agent-relay/wrapper": "2.0.18",
35
- "@agent-relay/telemetry": "2.0.18",
25
+ "@agent-relay/protocol": "2.0.19",
26
+ "@agent-relay/config": "2.0.19",
27
+ "@agent-relay/storage": "2.0.19",
28
+ "@agent-relay/bridge": "2.0.19",
29
+ "@agent-relay/utils": "2.0.19",
30
+ "@agent-relay/policy": "2.0.19",
31
+ "@agent-relay/memory": "2.0.19",
32
+ "@agent-relay/resiliency": "2.0.19",
33
+ "@agent-relay/user-directory": "2.0.19",
34
+ "@agent-relay/wrapper": "2.0.19",
35
+ "@agent-relay/telemetry": "2.0.19",
36
36
  "ws": "^8.18.3",
37
37
  "better-sqlite3": "^12.6.2",
38
38
  "pg": "^8.16.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/dashboard",
3
- "version": "2.0.18",
3
+ "version": "2.0.19",
4
4
  "description": "Web dashboard for Agent Relay - optional package for visual agent coordination",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -25,18 +25,18 @@
25
25
  "test:watch": "vitest"
26
26
  },
27
27
  "dependencies": {
28
- "@agent-relay/protocol": "2.0.18",
29
- "@agent-relay/config": "2.0.18",
30
- "@agent-relay/storage": "2.0.18",
31
- "@agent-relay/bridge": "2.0.18",
32
- "@agent-relay/utils": "2.0.18",
33
- "@agent-relay/resiliency": "2.0.18",
34
- "@agent-relay/trajectory": "2.0.18",
35
- "@agent-relay/cloud": "2.0.18",
36
- "@agent-relay/daemon": "2.0.18",
37
- "@agent-relay/user-directory": "2.0.18",
38
- "@agent-relay/wrapper": "2.0.18",
39
- "@agent-relay/sdk": "2.0.18",
28
+ "@agent-relay/protocol": "2.0.19",
29
+ "@agent-relay/config": "2.0.19",
30
+ "@agent-relay/storage": "2.0.19",
31
+ "@agent-relay/bridge": "2.0.19",
32
+ "@agent-relay/utils": "2.0.19",
33
+ "@agent-relay/resiliency": "2.0.19",
34
+ "@agent-relay/trajectory": "2.0.19",
35
+ "@agent-relay/cloud": "2.0.19",
36
+ "@agent-relay/daemon": "2.0.19",
37
+ "@agent-relay/user-directory": "2.0.19",
38
+ "@agent-relay/wrapper": "2.0.19",
39
+ "@agent-relay/sdk": "2.0.19",
40
40
  "express": "^5.2.1",
41
41
  "ws": "^8.18.3"
42
42
  },
@@ -28,8 +28,8 @@ const AI_PROVIDERS: ProviderInfo[] = [
28
28
  { id: 'anthropic', name: 'Anthropic', displayName: 'Claude', color: '#D97757', cliCommand: 'claude' },
29
29
  { id: 'codex', name: 'OpenAI', displayName: 'Codex', color: '#10A37F', cliCommand: 'codex login', supportsDeviceFlow: true, requiresUrlCopy: true },
30
30
  { id: 'google', name: 'Google', displayName: 'Gemini', color: '#4285F4', cliCommand: 'gemini' },
31
- { id: 'opencode', name: 'OpenCode', displayName: 'OpenCode', color: '#00D4AA', cliCommand: 'opencode' },
32
- { id: 'droid', name: 'Factory', displayName: 'Droid', color: '#6366F1', cliCommand: 'droid' },
31
+ { id: 'opencode', name: 'OpenCode', displayName: 'OpenCode', color: '#00D4AA', cliCommand: 'opencode', comingSoon: true },
32
+ { id: 'droid', name: 'Factory', displayName: 'Droid', color: '#6366F1', cliCommand: 'droid', comingSoon: true },
33
33
  { id: 'cursor', name: 'Cursor', displayName: 'Cursor', color: '#7C3AED', cliCommand: 'agent' },
34
34
  ];
35
35
 
@@ -21,6 +21,8 @@ export interface ProviderInfo {
21
21
  requiresUrlCopy?: boolean;
22
22
  /** For OAuth providers, whether they support device flow */
23
23
  supportsDeviceFlow?: boolean;
24
+ /** Provider is not yet fully tested/available */
25
+ comingSoon?: boolean;
24
26
  }
25
27
 
26
28
  // Provider auth configuration
@@ -288,16 +290,20 @@ export function ProviderConnectionList({
288
290
  return (
289
291
  <button
290
292
  key={provider.id}
291
- onClick={() => !connected && handleConnectProvider(provider)}
292
- disabled={connected}
293
+ onClick={() => !connected && !provider.comingSoon && handleConnectProvider(provider)}
294
+ disabled={connected || provider.comingSoon}
293
295
  className={`w-full flex items-center gap-3 p-4 bg-bg-tertiary rounded-xl border transition-colors text-left ${
294
- connected
295
- ? 'border-green-500/50 cursor-default'
296
- : 'border-border-subtle hover:border-accent-cyan/50'
296
+ provider.comingSoon
297
+ ? 'border-border-subtle opacity-60 cursor-not-allowed'
298
+ : connected
299
+ ? 'border-green-500/50 cursor-default'
300
+ : 'border-border-subtle hover:border-accent-cyan/50'
297
301
  }`}
298
302
  >
299
303
  <div
300
- className="w-10 h-10 rounded-lg flex items-center justify-center text-white font-bold flex-shrink-0 relative"
304
+ className={`w-10 h-10 rounded-lg flex items-center justify-center text-white font-bold flex-shrink-0 relative ${
305
+ provider.comingSoon ? 'grayscale' : ''
306
+ }`}
301
307
  style={{ backgroundColor: provider.color }}
302
308
  >
303
309
  {provider.displayName[0]}
@@ -310,10 +316,19 @@ export function ProviderConnectionList({
310
316
  )}
311
317
  </div>
312
318
  <div className="flex-1">
313
- <p className="text-white font-medium">{provider.displayName}</p>
319
+ <p className="text-white font-medium flex items-center gap-2">
320
+ {provider.displayName}
321
+ {provider.comingSoon && (
322
+ <span className="px-2 py-0.5 bg-amber-400/20 text-amber-400 text-xs font-medium rounded-full">
323
+ Coming Soon
324
+ </span>
325
+ )}
326
+ </p>
314
327
  <p className="text-text-muted text-sm">{provider.description || provider.name}</p>
315
328
  </div>
316
- {connected ? (
329
+ {provider.comingSoon ? (
330
+ <span className="text-text-muted text-sm">Not available yet</span>
331
+ ) : connected ? (
317
332
  <span className="text-green-400 text-sm font-medium">Connected</span>
318
333
  ) : (
319
334
  <svg className="w-5 h-5 text-text-muted" fill="none" viewBox="0 0 24 24" stroke="currentColor">
@@ -122,6 +122,7 @@ const AGENT_TEMPLATES = [
122
122
  description: 'OpenCode AI agent',
123
123
  icon: '🔷',
124
124
  providerId: 'opencode',
125
+ comingSoon: true, // Not yet fully tested
125
126
  },
126
127
  {
127
128
  id: 'droid',
@@ -130,6 +131,7 @@ const AGENT_TEMPLATES = [
130
131
  description: 'Factory Droid agent',
131
132
  icon: '🤖',
132
133
  providerId: 'droid',
134
+ comingSoon: true, // Not yet fully tested
133
135
  },
134
136
  {
135
137
  id: 'cursor',
@@ -393,16 +395,24 @@ export function SpawnModal({
393
395
  <button
394
396
  key={template.id}
395
397
  type="button"
398
+ disabled={template.comingSoon}
396
399
  className={`
397
- flex flex-col items-center gap-1 py-3 px-2 border-2 rounded-lg cursor-pointer font-sans transition-all duration-150
398
- ${selectedTemplate.id === template.id
399
- ? 'bg-accent/10 border-accent'
400
- : 'bg-bg-hover border-transparent hover:bg-bg-active'
400
+ flex flex-col items-center gap-1 py-3 px-2 border-2 rounded-lg font-sans transition-all duration-150 relative
401
+ ${template.comingSoon
402
+ ? 'opacity-50 cursor-not-allowed bg-bg-hover border-transparent'
403
+ : selectedTemplate.id === template.id
404
+ ? 'bg-accent/10 border-accent cursor-pointer'
405
+ : 'bg-bg-hover border-transparent hover:bg-bg-active cursor-pointer'
401
406
  }
402
407
  `}
403
- onClick={() => setSelectedTemplate(template)}
408
+ onClick={() => !template.comingSoon && setSelectedTemplate(template)}
404
409
  >
405
- <span className="text-2xl">{template.icon}</span>
410
+ {template.comingSoon && (
411
+ <span className="absolute top-1 right-1 px-1.5 py-0.5 bg-amber-400/20 text-amber-400 text-[10px] font-medium rounded">
412
+ Soon
413
+ </span>
414
+ )}
415
+ <span className={`text-2xl ${template.comingSoon ? 'grayscale' : ''}`}>{template.icon}</span>
406
416
  <span className="text-sm font-semibold text-text-primary">{template.name}</span>
407
417
  <span className="text-xs text-text-muted text-center">{template.description}</span>
408
418
  </button>
@@ -67,6 +67,7 @@ interface AIProvider {
67
67
  supportsDeviceFlow?: boolean; // Provider supports device flow (easier for headless environments)
68
68
  preferApiKey?: boolean; // Show API key input by default (simpler for mobile/containers)
69
69
  isConnected?: boolean;
70
+ comingSoon?: boolean; // Provider is not yet fully tested/available
70
71
  }
71
72
 
72
73
  const AI_PROVIDERS: AIProvider[] = [
@@ -111,6 +112,7 @@ const AI_PROVIDERS: AIProvider[] = [
111
112
  color: '#00D4AA',
112
113
  cliCommand: 'opencode',
113
114
  supportsOAuth: true,
115
+ comingSoon: true, // Not yet fully tested
114
116
  },
115
117
  {
116
118
  id: 'droid',
@@ -120,6 +122,7 @@ const AI_PROVIDERS: AIProvider[] = [
120
122
  color: '#6366F1',
121
123
  cliCommand: 'droid',
122
124
  supportsOAuth: true,
125
+ comingSoon: true, // Not yet fully tested
123
126
  },
124
127
  {
125
128
  id: 'cursor',
@@ -614,28 +617,41 @@ export function WorkspaceSettingsPanel({
614
617
  {AI_PROVIDERS.map((provider) => (
615
618
  <div
616
619
  key={provider.id}
617
- className="p-5 bg-bg-tertiary rounded-xl border border-border-subtle hover:border-border-medium transition-all duration-200"
620
+ className={`p-5 bg-bg-tertiary rounded-xl border border-border-subtle transition-all duration-200 ${
621
+ provider.comingSoon ? 'opacity-60' : 'hover:border-border-medium'
622
+ }`}
618
623
  >
619
624
  <div className="flex items-center justify-between">
620
625
  <div className="flex items-center gap-4">
621
626
  <div
622
- className="w-12 h-12 rounded-xl flex items-center justify-center text-white font-bold text-lg shadow-lg"
627
+ className={`w-12 h-12 rounded-xl flex items-center justify-center text-white font-bold text-lg shadow-lg ${
628
+ provider.comingSoon ? 'grayscale' : ''
629
+ }`}
623
630
  style={{
624
631
  backgroundColor: provider.color,
625
- boxShadow: `0 4px 20px ${provider.color}40`,
632
+ boxShadow: provider.comingSoon ? 'none' : `0 4px 20px ${provider.color}40`,
626
633
  }}
627
634
  >
628
635
  {provider.displayName[0]}
629
636
  </div>
630
637
  <div>
631
- <h4 className="text-base font-semibold text-text-primary">
638
+ <h4 className="text-base font-semibold text-text-primary flex items-center gap-2">
632
639
  {provider.displayName}
640
+ {provider.comingSoon && (
641
+ <span className="px-2 py-0.5 bg-amber-400/20 text-amber-400 text-xs font-medium rounded-full">
642
+ Coming Soon
643
+ </span>
644
+ )}
633
645
  </h4>
634
646
  <p className="text-sm text-text-muted">{provider.description}</p>
635
647
  </div>
636
648
  </div>
637
649
 
638
- {providerStatus[provider.id] ? (
650
+ {provider.comingSoon ? (
651
+ <div className="px-4 py-2 bg-bg-card rounded-full border border-border-subtle">
652
+ <span className="text-sm text-text-muted">Not available yet</span>
653
+ </div>
654
+ ) : providerStatus[provider.id] ? (
639
655
  <div className="flex items-center gap-3">
640
656
  <div className="flex items-center gap-2 px-4 py-2 bg-success/15 rounded-full border border-success/30">
641
657
  <div className="w-2 h-2 rounded-full bg-success animate-pulse" />
@@ -653,7 +669,7 @@ export function WorkspaceSettingsPanel({
653
669
  ) : null}
654
670
  </div>
655
671
 
656
- {!providerStatus[provider.id] && (
672
+ {!providerStatus[provider.id] && !provider.comingSoon && (
657
673
  <div className="mt-5 pt-5 border-t border-border-subtle">
658
674
  {connectingProvider === provider.id && !showApiKeyFallback[provider.id] ? (
659
675
  useTerminalSetup[provider.id] ? (