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.
- package/dist/dashboard/out/404.html +1 -1
- package/dist/dashboard/out/_next/static/chunks/320-a6304232cd0ee2ce.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/631-16b905e5920f9b59.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +1 -0
- package/dist/dashboard/out/_next/static/css/{45361ce86b2847c4.css → 6892f8422896ef7a.css} +1 -1
- package/dist/dashboard/out/app/onboarding.html +1 -1
- package/dist/dashboard/out/app/onboarding.txt +1 -1
- package/dist/dashboard/out/app.html +1 -1
- package/dist/dashboard/out/app.txt +2 -2
- package/dist/dashboard/out/cloud/link.html +1 -1
- package/dist/dashboard/out/cloud/link.txt +1 -1
- package/dist/dashboard/out/complete-profile.html +2 -2
- package/dist/dashboard/out/complete-profile.txt +1 -1
- package/dist/dashboard/out/connect-repos.html +1 -1
- package/dist/dashboard/out/connect-repos.txt +1 -1
- package/dist/dashboard/out/history.html +1 -1
- package/dist/dashboard/out/history.txt +1 -1
- package/dist/dashboard/out/index.html +1 -1
- package/dist/dashboard/out/index.txt +2 -2
- package/dist/dashboard/out/login.html +2 -2
- package/dist/dashboard/out/login.txt +1 -1
- package/dist/dashboard/out/metrics.html +1 -1
- package/dist/dashboard/out/metrics.txt +1 -1
- package/dist/dashboard/out/pricing.html +2 -2
- package/dist/dashboard/out/pricing.txt +1 -1
- package/dist/dashboard/out/providers/setup/claude.html +1 -1
- package/dist/dashboard/out/providers/setup/claude.txt +1 -1
- package/dist/dashboard/out/providers/setup/codex.html +1 -1
- package/dist/dashboard/out/providers/setup/codex.txt +1 -1
- package/dist/dashboard/out/providers/setup/cursor.html +1 -1
- package/dist/dashboard/out/providers/setup/cursor.txt +1 -1
- package/dist/dashboard/out/providers.html +1 -1
- package/dist/dashboard/out/providers.txt +2 -2
- package/dist/dashboard/out/signup.html +2 -2
- package/dist/dashboard/out/signup.txt +1 -1
- package/package.json +16 -16
- package/packages/api-types/package.json +1 -1
- package/packages/bridge/package.json +8 -8
- package/packages/cloud/dist/api/cli-pty-runner.js +9 -6
- package/packages/cloud/package.json +6 -6
- package/packages/config/dist/cli-auth-config.js +10 -0
- package/packages/config/package.json +2 -2
- package/packages/continuity/package.json +1 -1
- package/packages/daemon/dist/cli-auth.js +5 -1
- package/packages/daemon/package.json +12 -12
- package/packages/dashboard/package.json +13 -13
- package/packages/dashboard/ui/app/providers/page.tsx +2 -2
- package/packages/dashboard/ui/react-components/ProviderConnectionList.tsx +23 -8
- package/packages/dashboard/ui/react-components/SpawnModal.tsx +16 -6
- package/packages/dashboard/ui/react-components/settings/WorkspaceSettingsPanel.tsx +22 -6
- package/packages/dashboard/ui-dist/404.html +1 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/320-a6304232cd0ee2ce.js +1 -0
- package/packages/dashboard/ui-dist/_next/static/chunks/631-16b905e5920f9b59.js +1 -0
- package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +1 -0
- package/packages/dashboard/ui-dist/_next/static/css/{45361ce86b2847c4.css → 6892f8422896ef7a.css} +1 -1
- package/packages/dashboard/ui-dist/app/onboarding.html +1 -1
- package/packages/dashboard/ui-dist/app/onboarding.txt +1 -1
- package/packages/dashboard/ui-dist/app.html +1 -1
- package/packages/dashboard/ui-dist/app.txt +2 -2
- package/packages/dashboard/ui-dist/cloud/link.html +1 -1
- package/packages/dashboard/ui-dist/cloud/link.txt +1 -1
- package/packages/dashboard/ui-dist/complete-profile.html +2 -2
- package/packages/dashboard/ui-dist/complete-profile.txt +1 -1
- package/packages/dashboard/ui-dist/connect-repos.html +1 -1
- package/packages/dashboard/ui-dist/connect-repos.txt +1 -1
- package/packages/dashboard/ui-dist/history.html +1 -1
- package/packages/dashboard/ui-dist/history.txt +1 -1
- package/packages/dashboard/ui-dist/index.html +1 -1
- package/packages/dashboard/ui-dist/index.txt +2 -2
- package/packages/dashboard/ui-dist/login.html +2 -2
- package/packages/dashboard/ui-dist/login.txt +1 -1
- package/packages/dashboard/ui-dist/metrics.html +1 -1
- package/packages/dashboard/ui-dist/metrics.txt +1 -1
- package/packages/dashboard/ui-dist/pricing.html +2 -2
- package/packages/dashboard/ui-dist/pricing.txt +1 -1
- package/packages/dashboard/ui-dist/providers/setup/claude.html +1 -1
- package/packages/dashboard/ui-dist/providers/setup/claude.txt +1 -1
- package/packages/dashboard/ui-dist/providers/setup/codex.html +1 -1
- package/packages/dashboard/ui-dist/providers/setup/codex.txt +1 -1
- package/packages/dashboard/ui-dist/providers/setup/cursor.html +1 -1
- package/packages/dashboard/ui-dist/providers/setup/cursor.txt +1 -1
- package/packages/dashboard/ui-dist/providers.html +1 -1
- package/packages/dashboard/ui-dist/providers.txt +2 -2
- package/packages/dashboard/ui-dist/signup.html +2 -2
- package/packages/dashboard/ui-dist/signup.txt +1 -1
- package/packages/dashboard-server/package.json +12 -12
- package/packages/hooks/package.json +4 -4
- package/packages/mcp/package.json +2 -2
- package/packages/memory/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/protocol/package.json +1 -1
- package/packages/resiliency/package.json +1 -1
- package/packages/sdk/package.json +2 -2
- package/packages/spawner/package.json +1 -1
- package/packages/state/package.json +1 -1
- package/packages/storage/package.json +2 -2
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +1 -1
- package/packages/wrapper/dist/idle-detector.d.ts +4 -0
- package/packages/wrapper/dist/idle-detector.js +21 -8
- package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +5 -0
- package/packages/wrapper/dist/relay-pty-orchestrator.js +53 -0
- package/packages/wrapper/package.json +6 -6
- package/scripts/postinstall.js +41 -1
- package/dist/dashboard/out/_next/static/chunks/320-402ffc8646b31da1.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/631-af51bad94027527a.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/providers/page-bcf46064ac4474ce.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/320-402ffc8646b31da1.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/631-af51bad94027527a.js +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/page-bcf46064ac4474ce.js +0 -1
- /package/dist/dashboard/out/_next/static/{JIjqkuDKNeoSg7KaMMuhx → cREcLZyPb-5NyVZje0Qfe}/_buildManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/{JIjqkuDKNeoSg7KaMMuhx → cREcLZyPb-5NyVZje0Qfe}/_ssgManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{JIjqkuDKNeoSg7KaMMuhx → N3ajGnJqRESKyCjDvyU52}/_buildManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{JIjqkuDKNeoSg7KaMMuhx → N3ajGnJqRESKyCjDvyU52}/_ssgManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{nmkOi7bqeDmLMoWBih8lz → UQiyWwBxIP-9it3GYVBDL}/_buildManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{nmkOi7bqeDmLMoWBih8lz → UQiyWwBxIP-9it3GYVBDL}/_ssgManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{wk_gKRNSPpWE-ZhGL6UMl → cREcLZyPb-5NyVZje0Qfe}/_buildManifest.js +0 -0
- /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/
|
|
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/
|
|
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:["
|
|
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.
|
|
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.
|
|
112
|
-
"@agent-relay/config": "2.0.
|
|
113
|
-
"@agent-relay/continuity": "2.0.
|
|
114
|
-
"@agent-relay/daemon": "2.0.
|
|
115
|
-
"@agent-relay/hooks": "2.0.
|
|
116
|
-
"@agent-relay/mcp": "2.0.
|
|
117
|
-
"@agent-relay/protocol": "2.0.
|
|
118
|
-
"@agent-relay/resiliency": "2.0.
|
|
119
|
-
"@agent-relay/sdk": "2.0.
|
|
120
|
-
"@agent-relay/storage": "2.0.
|
|
121
|
-
"@agent-relay/telemetry": "2.0.
|
|
122
|
-
"@agent-relay/trajectory": "2.0.
|
|
123
|
-
"@agent-relay/user-directory": "2.0.
|
|
124
|
-
"@agent-relay/utils": "2.0.
|
|
125
|
-
"@agent-relay/wrapper": "2.0.
|
|
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/bridge",
|
|
3
|
-
"version": "2.0.
|
|
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.
|
|
26
|
-
"@agent-relay/config": "2.0.
|
|
27
|
-
"@agent-relay/utils": "2.0.
|
|
28
|
-
"@agent-relay/policy": "2.0.
|
|
29
|
-
"@agent-relay/user-directory": "2.0.
|
|
30
|
-
"@agent-relay/wrapper": "2.0.
|
|
31
|
-
"@agent-relay/mcp": "2.0.
|
|
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
|
-
|
|
119
|
-
const
|
|
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
|
|
139
|
-
|
|
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.
|
|
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.
|
|
42
|
-
"@agent-relay/config": "2.0.
|
|
43
|
-
"@agent-relay/resiliency": "2.0.
|
|
44
|
-
"@agent-relay/storage": "2.0.
|
|
45
|
-
"@agent-relay/protocol": "2.0.
|
|
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.
|
|
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.
|
|
86
|
+
"@agent-relay/protocol": "2.0.19",
|
|
87
87
|
"zod": "^3.23.8",
|
|
88
88
|
"zod-to-json-schema": "^3.23.1"
|
|
89
89
|
},
|
|
@@ -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
|
-
|
|
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.
|
|
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.
|
|
26
|
-
"@agent-relay/config": "2.0.
|
|
27
|
-
"@agent-relay/storage": "2.0.
|
|
28
|
-
"@agent-relay/bridge": "2.0.
|
|
29
|
-
"@agent-relay/utils": "2.0.
|
|
30
|
-
"@agent-relay/policy": "2.0.
|
|
31
|
-
"@agent-relay/memory": "2.0.
|
|
32
|
-
"@agent-relay/resiliency": "2.0.
|
|
33
|
-
"@agent-relay/user-directory": "2.0.
|
|
34
|
-
"@agent-relay/wrapper": "2.0.
|
|
35
|
-
"@agent-relay/telemetry": "2.0.
|
|
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.
|
|
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.
|
|
29
|
-
"@agent-relay/config": "2.0.
|
|
30
|
-
"@agent-relay/storage": "2.0.
|
|
31
|
-
"@agent-relay/bridge": "2.0.
|
|
32
|
-
"@agent-relay/utils": "2.0.
|
|
33
|
-
"@agent-relay/resiliency": "2.0.
|
|
34
|
-
"@agent-relay/trajectory": "2.0.
|
|
35
|
-
"@agent-relay/cloud": "2.0.
|
|
36
|
-
"@agent-relay/daemon": "2.0.
|
|
37
|
-
"@agent-relay/user-directory": "2.0.
|
|
38
|
-
"@agent-relay/wrapper": "2.0.
|
|
39
|
-
"@agent-relay/sdk": "2.0.
|
|
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
|
-
|
|
295
|
-
? 'border-
|
|
296
|
-
:
|
|
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=
|
|
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">
|
|
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
|
-
{
|
|
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
|
|
398
|
-
${
|
|
399
|
-
? 'bg-
|
|
400
|
-
:
|
|
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
|
-
|
|
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=
|
|
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=
|
|
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
|
-
{
|
|
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] ? (
|