agent-relay 2.0.13 → 2.0.14
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/bin/relay-pty-darwin-arm64 +0 -0
- package/bin/relay-pty-darwin-x64 +0 -0
- package/bin/relay-pty-linux-x64 +0 -0
- package/deploy/workspace/codex.config.toml +5 -0
- package/deploy/workspace/entrypoint.sh +10 -2
- package/dist/dashboard/out/404.html +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 +1 -1
- package/dist/dashboard/out/cloud/link.html +1 -1
- package/dist/dashboard/out/cloud/link.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 +1 -1
- package/dist/dashboard/out/login.html +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/dashboard/out/signup.html +1 -1
- package/dist/dashboard/out/signup.txt +1 -1
- package/dist/src/cli/index.js +131 -21
- package/package.json +20 -19
- package/packages/api-types/package.json +1 -1
- package/packages/bridge/dist/index.d.ts +1 -1
- package/packages/bridge/dist/index.js +1 -1
- package/packages/bridge/dist/spawner.d.ts +18 -0
- package/packages/bridge/dist/spawner.js +122 -38
- package/packages/bridge/package.json +8 -7
- package/packages/cloud/package.json +6 -6
- package/packages/config/package.json +2 -2
- package/packages/continuity/package.json +1 -1
- package/packages/daemon/dist/connection.js +5 -1
- package/packages/daemon/dist/relay-ledger.d.ts +3 -1
- package/packages/daemon/dist/relay-ledger.js +8 -2
- package/packages/daemon/dist/router.js +13 -0
- package/packages/daemon/dist/server.d.ts +7 -0
- package/packages/daemon/dist/server.js +338 -4
- package/packages/daemon/package.json +12 -12
- package/packages/dashboard/dist/server.js +29 -5
- package/packages/dashboard/package.json +13 -12
- package/packages/dashboard/ui-dist/404.html +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 +1 -1
- 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/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 +1 -1
- package/packages/dashboard/ui-dist/login.html +1 -1
- 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 +1 -1
- 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 +1 -1
- package/packages/dashboard/ui-dist/signup.html +1 -1
- package/packages/dashboard/ui-dist/signup.txt +1 -1
- package/packages/dashboard-server/dist/server.js +29 -5
- package/packages/dashboard-server/package.json +12 -12
- package/packages/hooks/package.json +4 -4
- package/packages/mcp/README.md +24 -3
- package/packages/mcp/dist/bin.js +13 -5
- package/packages/mcp/dist/client.d.ts +54 -1
- package/packages/mcp/dist/client.js +132 -18
- package/packages/mcp/dist/cloud.d.ts +12 -0
- package/packages/mcp/dist/cloud.js +125 -1
- package/packages/mcp/dist/file-transport.d.ts +97 -0
- package/packages/mcp/dist/file-transport.js +197 -0
- package/packages/mcp/dist/hybrid-client.d.ts +28 -0
- package/packages/mcp/dist/hybrid-client.js +159 -0
- package/packages/mcp/dist/index.d.ts +4 -2
- package/packages/mcp/dist/index.js +6 -2
- package/packages/mcp/dist/install.d.ts +23 -1
- package/packages/mcp/dist/install.js +229 -31
- package/packages/mcp/dist/server.js +7 -1
- package/packages/mcp/dist/simple.d.ts +1 -1
- package/packages/mcp/dist/tools/index.d.ts +1 -0
- package/packages/mcp/dist/tools/index.js +1 -0
- package/packages/mcp/dist/tools/relay-continuity.d.ts +35 -0
- package/packages/mcp/dist/tools/relay-continuity.js +101 -0
- package/packages/mcp/dist/tools/relay-health.d.ts +1 -4
- package/packages/mcp/dist/tools/relay-health.js +7 -15
- package/packages/mcp/dist/tools/relay-logs.js +4 -2
- package/packages/mcp/dist/tools/relay-metrics.d.ts +1 -4
- package/packages/mcp/dist/tools/relay-metrics.js +4 -15
- package/packages/mcp/dist/tools/relay-send.d.ts +2 -2
- package/packages/mcp/package.json +3 -2
- package/packages/memory/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/protocol/dist/relay-pty-schemas.d.ts +14 -0
- package/packages/protocol/dist/types.d.ts +152 -2
- package/packages/protocol/package.json +1 -1
- package/packages/resiliency/package.json +1 -1
- package/packages/sdk/dist/client.js +7 -0
- 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/dist/logger.js +3 -1
- package/packages/utils/package.json +1 -1
- package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +28 -1
- package/packages/wrapper/dist/relay-pty-orchestrator.js +292 -37
- package/packages/wrapper/package.json +6 -6
- package/scripts/demos/README.md +79 -0
- package/scripts/demos/server-capacity.sh +69 -0
- package/scripts/demos/sprint-planning.sh +73 -0
- /package/dist/dashboard/out/_next/static/{Fa21F5wPUusvLUxj67gGm → RgEj_9Y-mWbLaxggzni-X}/_buildManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/{Fa21F5wPUusvLUxj67gGm → RgEj_9Y-mWbLaxggzni-X}/_ssgManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{Fa21F5wPUusvLUxj67gGm → RgEj_9Y-mWbLaxggzni-X}/_buildManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{Fa21F5wPUusvLUxj67gGm → RgEj_9Y-mWbLaxggzni-X}/_ssgManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{coRjSO5QkUdvCiJRCqxfi → UkLmDJOkaPWU2PaNQnkx5}/_buildManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{coRjSO5QkUdvCiJRCqxfi → UkLmDJOkaPWU2PaNQnkx5}/_ssgManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{yKnlyfJx-NzAy4kPAGkMr → bv9xidgU2pXi7xxPoCAK-}/_buildManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{yKnlyfJx-NzAy4kPAGkMr → bv9xidgU2pXi7xxPoCAK-}/_ssgManifest.js +0 -0
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
3:I[9197,["30","static/chunks/e868780c-48e5f147c90a3a41.js","891","static/chunks/891-5cb1513eeb97a891.js","83","static/chunks/83-4f08122d4e7e79a6.js","631","static/chunks/631-af51bad94027527a.js","150","static/chunks/app/providers/page-bcf46064ac4474ce.js"],"default",1]
|
|
3
3
|
4:I[4707,[],""]
|
|
4
4
|
5:I[6423,[],""]
|
|
5
|
-
0:["
|
|
5
|
+
0:["RgEj_9Y-mWbLaxggzni-X",[[["",{"children":["providers",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["providers",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","providers","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/605dd4e30c91986f.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"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
|
|
@@ -3,4 +3,4 @@
|
|
|
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="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/605dd4e30c91986f.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-1ede2205b58649ca.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\":\"
|
|
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="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/605dd4e30c91986f.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-1ede2205b58649ca.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\":\"RgEj_9Y-mWbLaxggzni-X\",\"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/605dd4e30c91986f.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-1ede2205b58649ca.js"],"default",1]
|
|
3
3
|
4:I[4707,[],""]
|
|
4
4
|
5:I[6423,[],""]
|
|
5
|
-
0:["
|
|
5
|
+
0:["RgEj_9Y-mWbLaxggzni-X",[[["",{"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/605dd4e30c91986f.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"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/dist/src/cli/index.js
CHANGED
|
@@ -17,15 +17,71 @@ import { config as dotenvConfig } from 'dotenv';
|
|
|
17
17
|
import { Daemon } from '@agent-relay/daemon';
|
|
18
18
|
import { RelayClient } from '@agent-relay/sdk';
|
|
19
19
|
import { RelayPtyOrchestrator, getTmuxPath } from '@agent-relay/wrapper';
|
|
20
|
-
import { AgentSpawner, readWorkersMetadata, getWorkerLogsDir, selectShadowCli } from '@agent-relay/bridge';
|
|
20
|
+
import { AgentSpawner, readWorkersMetadata, getWorkerLogsDir, selectShadowCli, ensureMcpPermissions } from '@agent-relay/bridge';
|
|
21
21
|
import { generateAgentName, checkForUpdatesInBackground, checkForUpdates } from '@agent-relay/utils';
|
|
22
22
|
import { getShadowForAgent } from '@agent-relay/config';
|
|
23
23
|
import { initTelemetry, track, enableTelemetry, disableTelemetry, getStatus, isDisabledByEnv, } from '@agent-relay/telemetry';
|
|
24
|
+
import { installMcpConfig } from '@agent-relay/mcp';
|
|
24
25
|
import fs from 'node:fs';
|
|
25
26
|
import path from 'node:path';
|
|
27
|
+
import readline from 'node:readline';
|
|
26
28
|
import { promisify } from 'node:util';
|
|
27
|
-
import { exec } from 'node:child_process';
|
|
29
|
+
import { exec, spawn as spawnProcess } from 'node:child_process';
|
|
28
30
|
import { fileURLToPath } from 'node:url';
|
|
31
|
+
/**
|
|
32
|
+
* Prompt user to choose how to handle missing dashboard package
|
|
33
|
+
* Returns: 'install' | 'skip'
|
|
34
|
+
*/
|
|
35
|
+
async function promptDashboardInstall() {
|
|
36
|
+
const rl = readline.createInterface({
|
|
37
|
+
input: process.stdin,
|
|
38
|
+
output: process.stdout,
|
|
39
|
+
});
|
|
40
|
+
console.log(`
|
|
41
|
+
Dashboard package not installed.
|
|
42
|
+
|
|
43
|
+
How would you like to proceed?
|
|
44
|
+
1. Install now (npm install -g @agent-relay/dashboard)
|
|
45
|
+
2. Continue without dashboard
|
|
46
|
+
`);
|
|
47
|
+
return new Promise((resolve) => {
|
|
48
|
+
rl.question('Choose [1/2]: ', (answer) => {
|
|
49
|
+
rl.close();
|
|
50
|
+
const choice = answer.trim();
|
|
51
|
+
if (choice === '1') {
|
|
52
|
+
resolve('install');
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
resolve('skip');
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Install dashboard package globally
|
|
62
|
+
*/
|
|
63
|
+
async function installDashboardGlobally() {
|
|
64
|
+
console.log('\nInstalling @agent-relay/dashboard globally...\n');
|
|
65
|
+
return new Promise((resolve) => {
|
|
66
|
+
const proc = spawnProcess('npm', ['install', '-g', '@agent-relay/dashboard'], {
|
|
67
|
+
stdio: 'inherit',
|
|
68
|
+
});
|
|
69
|
+
proc.on('close', (code) => {
|
|
70
|
+
if (code === 0) {
|
|
71
|
+
console.log('\n✓ Dashboard installed successfully.\n');
|
|
72
|
+
resolve(true);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.error('\n✗ Installation failed. Try running manually:\n npm install -g @agent-relay/dashboard\n');
|
|
76
|
+
resolve(false);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
proc.on('error', () => {
|
|
80
|
+
console.error('\n✗ Installation failed. Try running manually:\n npm install -g @agent-relay/dashboard\n');
|
|
81
|
+
resolve(false);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
29
85
|
dotenvConfig();
|
|
30
86
|
const DEFAULT_DASHBOARD_PORT = process.env.AGENT_RELAY_DASHBOARD_PORT || '3888';
|
|
31
87
|
// Read version from package.json
|
|
@@ -98,6 +154,32 @@ program
|
|
|
98
154
|
const agentName = options.name ?? generateAgentName();
|
|
99
155
|
console.error(`Agent: ${agentName}`);
|
|
100
156
|
console.error(`Project: ${paths.projectId}`);
|
|
157
|
+
// Auto-install MCP config if not present (project-local)
|
|
158
|
+
// Uses .mcp.json in the project root - doesn't modify global settings
|
|
159
|
+
const projectMcpConfigPath = path.join(paths.projectRoot, '.mcp.json');
|
|
160
|
+
const socketPath = path.join(paths.projectRoot, '.agent-relay', 'relay.sock');
|
|
161
|
+
if (!fs.existsSync(projectMcpConfigPath)) {
|
|
162
|
+
try {
|
|
163
|
+
const result = installMcpConfig(projectMcpConfigPath, {
|
|
164
|
+
configKey: 'mcpServers',
|
|
165
|
+
// Set RELAY_SOCKET so MCP server finds daemon regardless of CWD
|
|
166
|
+
env: { RELAY_SOCKET: socketPath },
|
|
167
|
+
});
|
|
168
|
+
if (result.success) {
|
|
169
|
+
console.error(`MCP config: ${projectMcpConfigPath} (auto-created)`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// Best effort - don't fail the command
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Ensure MCP tools are auto-approved (creates ~/.claude/settings.local.json for Claude)
|
|
177
|
+
try {
|
|
178
|
+
ensureMcpPermissions(paths.projectRoot, mainCommand, options.debug);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// Best effort - don't fail the command
|
|
182
|
+
}
|
|
101
183
|
// Auto-detect agent config and inject --model/--agent for Claude CLI
|
|
102
184
|
let finalArgs = commandArgs;
|
|
103
185
|
if (isClaudeCli(mainCommand)) {
|
|
@@ -336,6 +418,12 @@ program
|
|
|
336
418
|
const socketPath = paths.socketPath;
|
|
337
419
|
const dbPath = paths.dbPath;
|
|
338
420
|
const pidFilePath = pidFilePathForSocket(socketPath);
|
|
421
|
+
// Set up log file to avoid console output polluting TUI terminals
|
|
422
|
+
// Only set if not already configured via environment
|
|
423
|
+
if (!process.env.AGENT_RELAY_LOG_FILE) {
|
|
424
|
+
const logFile = path.join(paths.dataDir, 'daemon.log');
|
|
425
|
+
process.env.AGENT_RELAY_LOG_FILE = logFile;
|
|
426
|
+
}
|
|
339
427
|
console.log(`Project: ${paths.projectRoot}`);
|
|
340
428
|
console.log(`Socket: ${socketPath}`);
|
|
341
429
|
// Load teams.json if present
|
|
@@ -432,25 +520,44 @@ program
|
|
|
432
520
|
catch (err) {
|
|
433
521
|
const error = err;
|
|
434
522
|
if (error.code === 'ERR_MODULE_NOT_FOUND' || error.code === 'MODULE_NOT_FOUND') {
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
523
|
+
// Interactive prompt for dashboard installation
|
|
524
|
+
const choice = await promptDashboardInstall();
|
|
525
|
+
if (choice === 'install') {
|
|
526
|
+
const installed = await installDashboardGlobally();
|
|
527
|
+
if (installed) {
|
|
528
|
+
// Retry import after installation
|
|
529
|
+
try {
|
|
530
|
+
const { startDashboard } = await import('@agent-relay/dashboard');
|
|
531
|
+
dashboardPort = await startDashboard({
|
|
532
|
+
port,
|
|
533
|
+
dataDir: paths.dataDir,
|
|
534
|
+
teamDir: paths.teamDir,
|
|
535
|
+
dbPath,
|
|
536
|
+
enableSpawner: true,
|
|
537
|
+
projectRoot: paths.projectRoot,
|
|
538
|
+
onMarkSpawning: (name) => daemon.markSpawning(name),
|
|
539
|
+
onClearSpawning: (name) => daemon.clearSpawning(name),
|
|
540
|
+
});
|
|
541
|
+
console.log(`Dashboard: http://localhost:${dashboardPort}`);
|
|
542
|
+
daemon.onLogOutput = (agentName, data, _timestamp) => {
|
|
543
|
+
const broadcast = global.__broadcastLogOutput;
|
|
544
|
+
if (broadcast) {
|
|
545
|
+
broadcast(agentName, data);
|
|
546
|
+
}
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
catch {
|
|
550
|
+
console.error('Dashboard still not found after installation. Continuing without dashboard.');
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
else {
|
|
555
|
+
console.log('\nContinuing without dashboard...\n');
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
throw err;
|
|
452
560
|
}
|
|
453
|
-
throw err;
|
|
454
561
|
}
|
|
455
562
|
}
|
|
456
563
|
// Determine if we should auto-spawn agents
|
|
@@ -1882,7 +1989,10 @@ cloudCommand
|
|
|
1882
1989
|
try {
|
|
1883
1990
|
const openCommand = process.platform === 'darwin' ? 'open' :
|
|
1884
1991
|
process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
1885
|
-
|
|
1992
|
+
// Use single quotes to prevent shell interpretation of & and other special chars
|
|
1993
|
+
// Escape any single quotes in the URL itself
|
|
1994
|
+
const escapedUrl = authUrl.replace(/'/g, "'\\''");
|
|
1995
|
+
await execAsync(`${openCommand} '${escapedUrl}'`);
|
|
1886
1996
|
console.log('(Browser opened automatically)');
|
|
1887
1997
|
}
|
|
1888
1998
|
catch {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-relay",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.14",
|
|
4
4
|
"description": "Real-time agent-to-agent communication system",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
18
18
|
"postinstall": "npm rebuild better-sqlite3 && node scripts/postinstall.js",
|
|
19
|
-
"build": "npm run clean && turbo run build --filter='./packages/*' && tsc && npm run build:dashboard",
|
|
20
|
-
"build:sequential": "npm run clean && npm run build:protocol && npm run build:config && npm run build:storage && npm run build:state && npm run build:policy && npm run build:trajectory && npm run build:hooks && npm run build:memory && npm run build:utils && npm run build:continuity && npm run build:resiliency && npm run build:user-directory && npm run build:wrapper && npm run build:bridge && npm run build:telemetry && npm run build:cloud && npm run build:daemon && npm run build:sdk && npm run build:dashboard-server && npm run build:dashboard-pkg && npm run build:api-types && npm run build:spawner && npm run build:mcp && tsc && npm run build:dashboard",
|
|
21
|
-
"build:workspace": "npm run clean && npm run build:protocol && npm run build:config && npm run build:storage && npm run build:state && npm run build:policy && npm run build:trajectory && npm run build:hooks && npm run build:memory && npm run build:utils && npm run build:continuity && npm run build:resiliency && npm run build:user-directory && npm run build:wrapper && npm run build:bridge && npm run build:telemetry && npm run build:cloud && npm run build:daemon && npm run build:sdk && npm run build:dashboard-server && npm run build:dashboard-pkg && npm run build:api-types && npm run build:spawner && npm run build:mcp && tsc",
|
|
19
|
+
"build": "npm run clean && npm run build:rust && turbo run build --filter='./packages/*' && tsc && npm run build:dashboard",
|
|
20
|
+
"build:sequential": "npm run clean && npm run build:rust && npm run build:protocol && npm run build:config && npm run build:storage && npm run build:state && npm run build:policy && npm run build:trajectory && npm run build:hooks && npm run build:memory && npm run build:utils && npm run build:continuity && npm run build:resiliency && npm run build:user-directory && npm run build:wrapper && npm run build:bridge && npm run build:telemetry && npm run build:cloud && npm run build:daemon && npm run build:sdk && npm run build:dashboard-server && npm run build:dashboard-pkg && npm run build:api-types && npm run build:spawner && npm run build:mcp && tsc && npm run build:dashboard",
|
|
21
|
+
"build:workspace": "npm run clean && npm run build:rust && npm run build:protocol && npm run build:config && npm run build:storage && npm run build:state && npm run build:policy && npm run build:trajectory && npm run build:hooks && npm run build:memory && npm run build:utils && npm run build:continuity && npm run build:resiliency && npm run build:user-directory && npm run build:wrapper && npm run build:bridge && npm run build:telemetry && npm run build:cloud && npm run build:daemon && npm run build:sdk && npm run build:dashboard-server && npm run build:dashboard-pkg && npm run build:api-types && npm run build:spawner && npm run build:mcp && tsc",
|
|
22
22
|
"build:packages": "turbo run build --filter='./packages/*'",
|
|
23
23
|
"build:packages:watch": "turbo run build --filter='./packages/*' --watch",
|
|
24
24
|
"build:mcp": "cd packages/mcp && npm run build",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"dev:local": "npm run build && npm link && echo '✓ agent-relay linked globally'",
|
|
56
56
|
"dev:unlink": "npm unlink -g agent-relay && echo '✓ agent-relay unlinked'",
|
|
57
57
|
"dev:rebuild": "npm run build && echo '✓ Rebuilt (linked version updated)'",
|
|
58
|
-
"build:rust": "cd relay-pty && cargo build --release && cp target/release/relay-pty ../bin/relay-pty &&
|
|
58
|
+
"build:rust": "if command -v ~/.cargo/bin/cargo >/dev/null 2>&1; then cd relay-pty && ~/.cargo/bin/cargo build --release && cp target/release/relay-pty ../bin/relay-pty && node -e \"const os=require('os'); const fs=require('fs'); const p=os.platform(); const a=os.arch(); const name='relay-pty-'+p+'-'+a; fs.copyFileSync('target/release/relay-pty', '../bin/'+name); console.log('✓ relay-pty binary built and copied to bin/ and bin/'+name)\"; else echo '⚠ Rust not installed, using prebuilt binaries from bin/'; fi",
|
|
59
59
|
"start": "node dist/src/cli/index.js",
|
|
60
60
|
"daemon": "node packages/daemon/dist/server.js",
|
|
61
61
|
"dashboard": "node packages/dashboard-server/dist/start.js",
|
|
@@ -107,20 +107,21 @@
|
|
|
107
107
|
},
|
|
108
108
|
"homepage": "https://github.com/AgentWorkforce/relay#readme",
|
|
109
109
|
"dependencies": {
|
|
110
|
-
"@agent-relay/bridge": "2.0.
|
|
111
|
-
"@agent-relay/config": "2.0.
|
|
112
|
-
"@agent-relay/continuity": "2.0.
|
|
113
|
-
"@agent-relay/daemon": "2.0.
|
|
114
|
-
"@agent-relay/hooks": "2.0.
|
|
115
|
-
"@agent-relay/
|
|
116
|
-
"@agent-relay/
|
|
117
|
-
"@agent-relay/
|
|
118
|
-
"@agent-relay/
|
|
119
|
-
"@agent-relay/
|
|
120
|
-
"@agent-relay/
|
|
121
|
-
"@agent-relay/
|
|
122
|
-
"@agent-relay/
|
|
123
|
-
"@agent-relay/
|
|
110
|
+
"@agent-relay/bridge": "2.0.14",
|
|
111
|
+
"@agent-relay/config": "2.0.14",
|
|
112
|
+
"@agent-relay/continuity": "2.0.14",
|
|
113
|
+
"@agent-relay/daemon": "2.0.14",
|
|
114
|
+
"@agent-relay/hooks": "2.0.14",
|
|
115
|
+
"@agent-relay/mcp": "2.0.14",
|
|
116
|
+
"@agent-relay/protocol": "2.0.14",
|
|
117
|
+
"@agent-relay/resiliency": "2.0.14",
|
|
118
|
+
"@agent-relay/sdk": "2.0.14",
|
|
119
|
+
"@agent-relay/storage": "2.0.14",
|
|
120
|
+
"@agent-relay/telemetry": "2.0.14",
|
|
121
|
+
"@agent-relay/trajectory": "2.0.14",
|
|
122
|
+
"@agent-relay/user-directory": "2.0.14",
|
|
123
|
+
"@agent-relay/utils": "2.0.14",
|
|
124
|
+
"@agent-relay/wrapper": "2.0.14",
|
|
124
125
|
"@nangohq/node": "^0.69.20",
|
|
125
126
|
"@types/jsonwebtoken": "^9.0.10",
|
|
126
127
|
"agent-trajectories": "^0.2.3",
|
|
@@ -4,5 +4,5 @@ export * from './multi-project-client.js';
|
|
|
4
4
|
export * from './utils.js';
|
|
5
5
|
export { escapeForShell, escapeForTmux } from './utils.js';
|
|
6
6
|
export { selectShadowCli, type ShadowCli, type ShadowMode, type ShadowCliSelection, } from './shadow-cli.js';
|
|
7
|
-
export { AgentSpawner, readWorkersMetadata, getWorkerLogsDir, type AgentSpawnerOptions, type CloudPersistenceHandler, type OnAgentDeathCallback, } from './spawner.js';
|
|
7
|
+
export { AgentSpawner, readWorkersMetadata, getWorkerLogsDir, ensureMcpPermissions, type AgentSpawnerOptions, type CloudPersistenceHandler, type OnAgentDeathCallback, } from './spawner.js';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -5,5 +5,5 @@ export { escapeForShell, escapeForTmux } from './utils.js';
|
|
|
5
5
|
// Shadow CLI selection
|
|
6
6
|
export { selectShadowCli, } from './shadow-cli.js';
|
|
7
7
|
// Agent spawner
|
|
8
|
-
export { AgentSpawner, readWorkersMetadata, getWorkerLogsDir, } from './spawner.js';
|
|
8
|
+
export { AgentSpawner, readWorkersMetadata, getWorkerLogsDir, ensureMcpPermissions, } from './spawner.js';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -38,6 +38,24 @@ export type OnAgentDeathCallback = (info: {
|
|
|
38
38
|
/** Traceable error ID for support lookup */
|
|
39
39
|
errorId?: string;
|
|
40
40
|
}) => void;
|
|
41
|
+
/**
|
|
42
|
+
* Ensure MCP permissions are pre-configured for the given CLI type.
|
|
43
|
+
* This prevents MCP approval prompts from blocking agent initialization.
|
|
44
|
+
*
|
|
45
|
+
* For Claude Code: Creates/updates .claude/settings.local.json with:
|
|
46
|
+
* - enableAllProjectMcpServers: true (auto-approve project MCP servers)
|
|
47
|
+
* - permissions.allow: ["mcp__agent-relay__*"] (pre-approve all agent-relay MCP tools)
|
|
48
|
+
*
|
|
49
|
+
* For Cursor: Creates/updates .cursor/settings.json with MCP permissions
|
|
50
|
+
* For Gemini: Creates/updates .gemini/settings.json with MCP permissions
|
|
51
|
+
* For Windsurf: Creates/updates .windsurf/settings.json with MCP permissions
|
|
52
|
+
* Other CLIs: May use CLI flags instead of config-based permissions
|
|
53
|
+
*
|
|
54
|
+
* @param projectRoot - The project root directory
|
|
55
|
+
* @param cliType - The CLI type (claude, codex, gemini, cursor, etc.)
|
|
56
|
+
* @param debug - Whether to log debug information
|
|
57
|
+
*/
|
|
58
|
+
export declare function ensureMcpPermissions(projectRoot: string, cliType: string, debug?: boolean): void;
|
|
41
59
|
/** Options for AgentSpawner constructor */
|
|
42
60
|
export interface AgentSpawnerOptions {
|
|
43
61
|
projectRoot: string;
|