agent-relay 2.0.17 → 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 (127) hide show
  1. package/deploy/workspace/entrypoint.sh +35 -19
  2. package/deploy/workspace/git-credential-relay +82 -7
  3. package/dist/dashboard/out/404.html +1 -1
  4. package/dist/dashboard/out/_next/static/chunks/320-a6304232cd0ee2ce.js +1 -0
  5. package/dist/dashboard/out/_next/static/chunks/631-16b905e5920f9b59.js +1 -0
  6. package/dist/dashboard/out/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +1 -0
  7. package/dist/dashboard/out/_next/static/css/{45361ce86b2847c4.css → 6892f8422896ef7a.css} +1 -1
  8. package/dist/dashboard/out/app/onboarding.html +1 -1
  9. package/dist/dashboard/out/app/onboarding.txt +1 -1
  10. package/dist/dashboard/out/app.html +1 -1
  11. package/dist/dashboard/out/app.txt +2 -2
  12. package/dist/dashboard/out/cloud/link.html +1 -1
  13. package/dist/dashboard/out/cloud/link.txt +1 -1
  14. package/dist/dashboard/out/complete-profile.html +2 -2
  15. package/dist/dashboard/out/complete-profile.txt +1 -1
  16. package/dist/dashboard/out/connect-repos.html +1 -1
  17. package/dist/dashboard/out/connect-repos.txt +1 -1
  18. package/dist/dashboard/out/history.html +1 -1
  19. package/dist/dashboard/out/history.txt +1 -1
  20. package/dist/dashboard/out/index.html +1 -1
  21. package/dist/dashboard/out/index.txt +2 -2
  22. package/dist/dashboard/out/login.html +2 -2
  23. package/dist/dashboard/out/login.txt +1 -1
  24. package/dist/dashboard/out/metrics.html +1 -1
  25. package/dist/dashboard/out/metrics.txt +1 -1
  26. package/dist/dashboard/out/pricing.html +2 -2
  27. package/dist/dashboard/out/pricing.txt +1 -1
  28. package/dist/dashboard/out/providers/setup/claude.html +1 -1
  29. package/dist/dashboard/out/providers/setup/claude.txt +1 -1
  30. package/dist/dashboard/out/providers/setup/codex.html +1 -1
  31. package/dist/dashboard/out/providers/setup/codex.txt +1 -1
  32. package/dist/dashboard/out/providers/setup/cursor.html +1 -1
  33. package/dist/dashboard/out/providers/setup/cursor.txt +1 -1
  34. package/dist/dashboard/out/providers.html +1 -1
  35. package/dist/dashboard/out/providers.txt +2 -2
  36. package/dist/dashboard/out/signup.html +2 -2
  37. package/dist/dashboard/out/signup.txt +1 -1
  38. package/package.json +16 -16
  39. package/packages/api-types/package.json +1 -1
  40. package/packages/bridge/package.json +8 -8
  41. package/packages/cloud/dist/api/cli-pty-runner.js +9 -6
  42. package/packages/cloud/package.json +6 -6
  43. package/packages/config/dist/cli-auth-config.js +10 -0
  44. package/packages/config/package.json +2 -2
  45. package/packages/continuity/package.json +1 -1
  46. package/packages/daemon/dist/cli-auth.js +5 -1
  47. package/packages/daemon/package.json +12 -12
  48. package/packages/dashboard/package.json +13 -13
  49. package/packages/dashboard/ui/app/providers/page.tsx +2 -2
  50. package/packages/dashboard/ui/react-components/ProviderConnectionList.tsx +23 -8
  51. package/packages/dashboard/ui/react-components/SpawnModal.tsx +16 -6
  52. package/packages/dashboard/ui/react-components/settings/WorkspaceSettingsPanel.tsx +22 -6
  53. package/packages/dashboard/ui-dist/404.html +1 -1
  54. package/packages/dashboard/ui-dist/_next/static/chunks/320-a6304232cd0ee2ce.js +1 -0
  55. package/packages/dashboard/ui-dist/_next/static/chunks/631-16b905e5920f9b59.js +1 -0
  56. package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/page-ecb16ffd3b36262b.js +1 -0
  57. package/packages/dashboard/ui-dist/_next/static/css/{45361ce86b2847c4.css → 6892f8422896ef7a.css} +1 -1
  58. package/packages/dashboard/ui-dist/app/onboarding.html +1 -1
  59. package/packages/dashboard/ui-dist/app/onboarding.txt +1 -1
  60. package/packages/dashboard/ui-dist/app.html +1 -1
  61. package/packages/dashboard/ui-dist/app.txt +2 -2
  62. package/packages/dashboard/ui-dist/cloud/link.html +1 -1
  63. package/packages/dashboard/ui-dist/cloud/link.txt +1 -1
  64. package/packages/dashboard/ui-dist/complete-profile.html +2 -2
  65. package/packages/dashboard/ui-dist/complete-profile.txt +1 -1
  66. package/packages/dashboard/ui-dist/connect-repos.html +1 -1
  67. package/packages/dashboard/ui-dist/connect-repos.txt +1 -1
  68. package/packages/dashboard/ui-dist/history.html +1 -1
  69. package/packages/dashboard/ui-dist/history.txt +1 -1
  70. package/packages/dashboard/ui-dist/index.html +1 -1
  71. package/packages/dashboard/ui-dist/index.txt +2 -2
  72. package/packages/dashboard/ui-dist/login.html +2 -2
  73. package/packages/dashboard/ui-dist/login.txt +1 -1
  74. package/packages/dashboard/ui-dist/metrics.html +1 -1
  75. package/packages/dashboard/ui-dist/metrics.txt +1 -1
  76. package/packages/dashboard/ui-dist/pricing.html +2 -2
  77. package/packages/dashboard/ui-dist/pricing.txt +1 -1
  78. package/packages/dashboard/ui-dist/providers/setup/claude.html +1 -1
  79. package/packages/dashboard/ui-dist/providers/setup/claude.txt +1 -1
  80. package/packages/dashboard/ui-dist/providers/setup/codex.html +1 -1
  81. package/packages/dashboard/ui-dist/providers/setup/codex.txt +1 -1
  82. package/packages/dashboard/ui-dist/providers/setup/cursor.html +1 -1
  83. package/packages/dashboard/ui-dist/providers/setup/cursor.txt +1 -1
  84. package/packages/dashboard/ui-dist/providers.html +1 -1
  85. package/packages/dashboard/ui-dist/providers.txt +2 -2
  86. package/packages/dashboard/ui-dist/signup.html +2 -2
  87. package/packages/dashboard/ui-dist/signup.txt +1 -1
  88. package/packages/dashboard-server/package.json +12 -12
  89. package/packages/hooks/package.json +4 -4
  90. package/packages/mcp/package.json +2 -2
  91. package/packages/memory/package.json +2 -2
  92. package/packages/policy/package.json +2 -2
  93. package/packages/protocol/package.json +1 -1
  94. package/packages/resiliency/package.json +1 -1
  95. package/packages/sdk/package.json +2 -2
  96. package/packages/spawner/package.json +1 -1
  97. package/packages/state/package.json +1 -1
  98. package/packages/storage/package.json +2 -2
  99. package/packages/telemetry/package.json +1 -1
  100. package/packages/trajectory/package.json +2 -2
  101. package/packages/user-directory/package.json +2 -2
  102. package/packages/utils/package.json +1 -1
  103. package/packages/wrapper/dist/idle-detector.d.ts +4 -0
  104. package/packages/wrapper/dist/idle-detector.js +21 -8
  105. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +5 -0
  106. package/packages/wrapper/dist/relay-pty-orchestrator.js +53 -0
  107. package/packages/wrapper/package.json +6 -6
  108. package/relay-snippets/agent-policy-snippet.md +40 -0
  109. package/relay-snippets/agent-relay-protocol.md +101 -0
  110. package/relay-snippets/agent-relay-snippet.md +177 -0
  111. package/scripts/postinstall.js +41 -1
  112. package/SESSION_HANDOFF.md +0 -67
  113. package/dist/dashboard/out/_next/static/chunks/320-402ffc8646b31da1.js +0 -1
  114. package/dist/dashboard/out/_next/static/chunks/631-af51bad94027527a.js +0 -1
  115. package/dist/dashboard/out/_next/static/chunks/app/providers/page-bcf46064ac4474ce.js +0 -1
  116. package/packages/dashboard/ui-dist/_next/static/chunks/320-402ffc8646b31da1.js +0 -1
  117. package/packages/dashboard/ui-dist/_next/static/chunks/631-af51bad94027527a.js +0 -1
  118. package/packages/dashboard/ui-dist/_next/static/chunks/app/providers/page-bcf46064ac4474ce.js +0 -1
  119. package/test-push.txt +0 -1
  120. /package/dist/dashboard/out/_next/static/{cybSRcFA4OLNv-UWeCKig → cREcLZyPb-5NyVZje0Qfe}/_buildManifest.js +0 -0
  121. /package/dist/dashboard/out/_next/static/{cybSRcFA4OLNv-UWeCKig → cREcLZyPb-5NyVZje0Qfe}/_ssgManifest.js +0 -0
  122. /package/packages/dashboard/ui-dist/_next/static/{ABlyNUHvGKsFXjC8hEf8z → N3ajGnJqRESKyCjDvyU52}/_buildManifest.js +0 -0
  123. /package/packages/dashboard/ui-dist/_next/static/{ABlyNUHvGKsFXjC8hEf8z → N3ajGnJqRESKyCjDvyU52}/_ssgManifest.js +0 -0
  124. /package/packages/dashboard/ui-dist/_next/static/{EL9fLNWXZpOA3teDl6DXQ → UQiyWwBxIP-9it3GYVBDL}/_buildManifest.js +0 -0
  125. /package/packages/dashboard/ui-dist/_next/static/{EL9fLNWXZpOA3teDl6DXQ → UQiyWwBxIP-9it3GYVBDL}/_ssgManifest.js +0 -0
  126. /package/packages/dashboard/ui-dist/_next/static/{cybSRcFA4OLNv-UWeCKig → cREcLZyPb-5NyVZje0Qfe}/_buildManifest.js +0 -0
  127. /package/packages/dashboard/ui-dist/_next/static/{cybSRcFA4OLNv-UWeCKig → 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\":\"cybSRcFA4OLNv-UWeCKig\",\"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:["cybSRcFA4OLNv-UWeCKig",[[["",{"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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/dashboard-server",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Relay dashboard server - HTTP/WebSocket server for agent coordination",
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.17",
26
- "@agent-relay/config": "2.0.17",
27
- "@agent-relay/storage": "2.0.17",
28
- "@agent-relay/bridge": "2.0.17",
29
- "@agent-relay/utils": "2.0.17",
30
- "@agent-relay/resiliency": "2.0.17",
31
- "@agent-relay/trajectory": "2.0.17",
32
- "@agent-relay/cloud": "2.0.17",
33
- "@agent-relay/daemon": "2.0.17",
34
- "@agent-relay/user-directory": "2.0.17",
35
- "@agent-relay/sdk": "2.0.17",
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/resiliency": "2.0.19",
31
+ "@agent-relay/trajectory": "2.0.19",
32
+ "@agent-relay/cloud": "2.0.19",
33
+ "@agent-relay/daemon": "2.0.19",
34
+ "@agent-relay/user-directory": "2.0.19",
35
+ "@agent-relay/sdk": "2.0.19",
36
36
  "array-flatten": "^1.1.1",
37
37
  "express": "^4.21.2",
38
38
  "ws": "^8.18.3"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/hooks",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Hook emitter, registry, and trajectory hooks for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -37,9 +37,9 @@
37
37
  "test:watch": "vitest"
38
38
  },
39
39
  "dependencies": {
40
- "@agent-relay/protocol": "2.0.17",
41
- "@agent-relay/config": "2.0.17",
42
- "@agent-relay/trajectory": "2.0.17"
40
+ "@agent-relay/protocol": "2.0.19",
41
+ "@agent-relay/config": "2.0.19",
42
+ "@agent-relay/trajectory": "2.0.19"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/mcp",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "MCP server for Agent Relay - native messaging tools for AI agents in Claude, Cursor, and VS Code",
5
5
  "author": "Agent Workforce Inc.",
6
6
  "license": "Apache-2.0",
@@ -47,7 +47,7 @@
47
47
  "prepublishOnly": "npm run clean && npm run build && npm test"
48
48
  },
49
49
  "dependencies": {
50
- "@agent-relay/config": "2.0.17",
50
+ "@agent-relay/config": "2.0.19",
51
51
  "@modelcontextprotocol/sdk": "^1.0.0",
52
52
  "smol-toml": "^1.6.0",
53
53
  "zod": "^3.23.8"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/memory",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Semantic memory storage and retrieval system for agent-relay with multiple backend support",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/hooks": "2.0.17"
25
+ "@agent-relay/hooks": "2.0.19"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/policy",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Agent policy management with multi-level fallback (repo, local PRPM, cloud workspace)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/config": "2.0.17"
25
+ "@agent-relay/config": "2.0.19"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/protocol",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Wire protocol types and framing for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/resiliency",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Health monitoring, logging, metrics, and crash resilience utilities for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/sdk",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Lightweight SDK for agent-to-agent communication via Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -55,7 +55,7 @@
55
55
  "access": "public"
56
56
  },
57
57
  "dependencies": {
58
- "@agent-relay/protocol": "2.0.17"
58
+ "@agent-relay/protocol": "2.0.19"
59
59
  },
60
60
  "engines": {
61
61
  "node": ">=18.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/spawner",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Agent spawning types and utilities for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/state",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Agent state persistence for non-hook CLIs (Codex, Gemini, etc.)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/storage",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Storage adapters and interfaces for Relay message/session persistence",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -56,7 +56,7 @@
56
56
  }
57
57
  },
58
58
  "dependencies": {
59
- "@agent-relay/protocol": "2.0.17"
59
+ "@agent-relay/protocol": "2.0.19"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/telemetry",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Anonymous telemetry for Agent Relay usage analytics",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/trajectory",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Trajectory integration utilities (trail/PDERO) for Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/config": "2.0.17"
25
+ "@agent-relay/config": "2.0.19"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/user-directory",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "User directory service for agent-relay (per-user credential storage)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/resiliency": "2.0.17"
25
+ "@agent-relay/resiliency": "2.0.19"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/utils",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "Shared utilities for agent-relay: logging, name generation, command resolution, update checking",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -66,6 +66,10 @@ export declare class UniversalIdleDetector {
66
66
  /**
67
67
  * Check if the agent is in an editor mode (vim INSERT, REPLACE, etc.).
68
68
  * When in editor mode, message injection should be delayed.
69
+ *
70
+ * Note: Claude CLI shows "-- INSERT --" in its status bar (for vim keybindings mode)
71
+ * but this is NOT the same as being in vim. We exclude Claude CLI's status bar
72
+ * by checking for the "⏵" symbol that follows its mode indicator.
69
73
  */
70
74
  isInEditorMode(): boolean;
71
75
  /**
@@ -103,19 +103,32 @@ export class UniversalIdleDetector {
103
103
  /**
104
104
  * Check if the agent is in an editor mode (vim INSERT, REPLACE, etc.).
105
105
  * When in editor mode, message injection should be delayed.
106
+ *
107
+ * Note: Claude CLI shows "-- INSERT --" in its status bar (for vim keybindings mode)
108
+ * but this is NOT the same as being in vim. We exclude Claude CLI's status bar
109
+ * by checking for the "⏵" symbol that follows its mode indicator.
106
110
  */
107
111
  isInEditorMode() {
108
112
  // Check the last portion of output for editor mode indicators
109
113
  const lastOutput = this.outputBuffer.slice(-500);
110
- // Vim/Neovim mode indicators
114
+ // Claude CLI status bar pattern - this is NOT vim editor mode
115
+ // Example: "-- INSERT -- ⏵⏵ bypass permissions on (shift+tab to cycle)"
116
+ // Also match: "-- NORMAL --", "-- VISUAL --" followed by Claude's UI elements
117
+ const claudeCliStatusBar = /-- (?:INSERT|NORMAL|VISUAL|REPLACE) --\s*[⏵⏴►▶]/;
118
+ if (claudeCliStatusBar.test(lastOutput)) {
119
+ return false;
120
+ }
121
+ // Vim/Neovim mode indicators (standalone, not part of Claude CLI status)
122
+ // These patterns require the mode indicator to be at the end of a line
123
+ // or followed only by whitespace, which matches vim's actual display
111
124
  const editorModePatterns = [
112
- /-- INSERT --/i,
113
- /-- REPLACE --/i,
114
- /-- VISUAL --/i,
115
- /-- VISUAL LINE --/i,
116
- /-- VISUAL BLOCK --/i,
117
- /-- SELECT --/i,
118
- /-- TERMINAL --/i,
125
+ /-- INSERT --\s*$/m,
126
+ /-- REPLACE --\s*$/m,
127
+ /-- VISUAL --\s*$/m,
128
+ /-- VISUAL LINE --\s*$/m,
129
+ /-- VISUAL BLOCK --\s*$/m,
130
+ /-- SELECT --\s*$/m,
131
+ /-- TERMINAL --\s*$/m,
119
132
  // Emacs indicators
120
133
  /\*\*\* Emacs/,
121
134
  /M-x/,
@@ -110,6 +110,7 @@ export declare class RelayPtyOrchestrator extends BaseWrapper {
110
110
  private readonly PERIODIC_REMINDER_INTERVAL_MS;
111
111
  private sessionStartTime;
112
112
  private isGracefulStop;
113
+ private earlyExitInfo?;
113
114
  private memoryMonitor;
114
115
  private memoryAlertHandler;
115
116
  private cgroupManager;
@@ -201,6 +202,10 @@ export declare class RelayPtyOrchestrator extends BaseWrapper {
201
202
  * Release agent via dashboard API
202
203
  */
203
204
  private releaseViaDashboardApi;
205
+ /**
206
+ * Check if the relay-pty process is still alive
207
+ */
208
+ private isProcessAlive;
204
209
  /**
205
210
  * Connect to the relay-pty socket
206
211
  */
@@ -87,6 +87,8 @@ export class RelayPtyOrchestrator extends BaseWrapper {
87
87
  sessionStartTime = 0;
88
88
  // Track if agent is being gracefully stopped (vs crashed)
89
89
  isGracefulStop = false;
90
+ // Track early process exit for better error messages
91
+ earlyExitInfo;
90
92
  // Memory/CPU monitoring
91
93
  memoryMonitor;
92
94
  memoryAlertHandler = null;
@@ -540,6 +542,8 @@ export class RelayPtyOrchestrator extends BaseWrapper {
540
542
  ...(this.config.args ?? []),
541
543
  ];
542
544
  this.log(` Spawning: ${binaryPath} ${args.join(' ')}`);
545
+ // Reset early exit info from any previous spawn attempt
546
+ this.earlyExitInfo = undefined;
543
547
  // For interactive mode, let Rust directly inherit stdin/stdout from the terminal
544
548
  // This is more robust than manual forwarding through pipes
545
549
  // We still pipe stderr to capture JSON parsed commands
@@ -566,10 +570,14 @@ export class RelayPtyOrchestrator extends BaseWrapper {
566
570
  this.handleOutput(text);
567
571
  });
568
572
  }
573
+ // Capture stderr for early exit diagnosis
574
+ let stderrBuffer = '';
569
575
  // Handle stderr (relay-pty logs and JSON output) - always needed
576
+ // Also captures to buffer for error diagnostics if process dies early
570
577
  if (proc.stderr) {
571
578
  proc.stderr.on('data', (data) => {
572
579
  const text = data.toString();
580
+ stderrBuffer += text;
573
581
  this.handleStderr(text);
574
582
  });
575
583
  }
@@ -577,6 +585,10 @@ export class RelayPtyOrchestrator extends BaseWrapper {
577
585
  proc.on('exit', (code, signal) => {
578
586
  const exitCode = code ?? (signal === 'SIGKILL' ? 137 : 1);
579
587
  this.log(` Process exited: code=${exitCode} signal=${signal}`);
588
+ // Capture early exit info for better error messages if socket not yet connected
589
+ if (!this.socketConnected) {
590
+ this.earlyExitInfo = { code, signal, stderr: stderrBuffer };
591
+ }
580
592
  this.running = false;
581
593
  // Get crash context before unregistering from memory monitor
582
594
  const crashContext = this.memoryMonitor.getCrashContext(this.config.name);
@@ -942,6 +954,22 @@ export class RelayPtyOrchestrator extends BaseWrapper {
942
954
  // =========================================================================
943
955
  // Socket communication
944
956
  // =========================================================================
957
+ /**
958
+ * Check if the relay-pty process is still alive
959
+ */
960
+ isProcessAlive() {
961
+ if (!this.relayPtyProcess || this.relayPtyProcess.exitCode !== null) {
962
+ return false;
963
+ }
964
+ try {
965
+ // Signal 0 checks if process exists without killing it
966
+ process.kill(this.relayPtyProcess.pid, 0);
967
+ return true;
968
+ }
969
+ catch {
970
+ return false;
971
+ }
972
+ }
945
973
  /**
946
974
  * Connect to the relay-pty socket
947
975
  */
@@ -949,6 +977,20 @@ export class RelayPtyOrchestrator extends BaseWrapper {
949
977
  const timeout = this.config.socketConnectTimeoutMs ?? 5000;
950
978
  const maxAttempts = this.config.socketReconnectAttempts ?? 3;
951
979
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
980
+ // Check if relay-pty process died before attempting connection
981
+ if (!this.isProcessAlive()) {
982
+ const exitInfo = this.earlyExitInfo;
983
+ if (exitInfo) {
984
+ const exitReason = exitInfo.signal
985
+ ? `signal ${exitInfo.signal}`
986
+ : `code ${exitInfo.code ?? 'unknown'}`;
987
+ const stderrHint = exitInfo.stderr
988
+ ? `\n stderr: ${exitInfo.stderr.trim().slice(0, 500)}`
989
+ : '';
990
+ throw new Error(`relay-pty process died early (${exitReason}).${stderrHint}`);
991
+ }
992
+ throw new Error('relay-pty process died before socket could be created');
993
+ }
952
994
  try {
953
995
  await this.attemptSocketConnection(timeout);
954
996
  this.log(` Socket connected`);
@@ -961,6 +1003,17 @@ export class RelayPtyOrchestrator extends BaseWrapper {
961
1003
  }
962
1004
  }
963
1005
  }
1006
+ // Final check for process death after all attempts
1007
+ if (!this.isProcessAlive() && this.earlyExitInfo) {
1008
+ const exitInfo = this.earlyExitInfo;
1009
+ const exitReason = exitInfo.signal
1010
+ ? `signal ${exitInfo.signal}`
1011
+ : `code ${exitInfo.code ?? 'unknown'}`;
1012
+ const stderrHint = exitInfo.stderr
1013
+ ? `\n stderr: ${exitInfo.stderr.trim().slice(0, 500)}`
1014
+ : '';
1015
+ throw new Error(`relay-pty process died during socket connection (${exitReason}).${stderrHint}`);
1016
+ }
964
1017
  throw new Error(`Failed to connect to socket after ${maxAttempts} attempts`);
965
1018
  }
966
1019
  /**
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/wrapper",
3
- "version": "2.0.17",
3
+ "version": "2.0.19",
4
4
  "description": "CLI agent wrappers for Agent Relay - tmux, pty integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -30,11 +30,11 @@
30
30
  "clean": "rm -rf dist"
31
31
  },
32
32
  "dependencies": {
33
- "@agent-relay/api-types": "2.0.17",
34
- "@agent-relay/protocol": "2.0.17",
35
- "@agent-relay/config": "2.0.17",
36
- "@agent-relay/continuity": "2.0.17",
37
- "@agent-relay/resiliency": "2.0.17"
33
+ "@agent-relay/api-types": "2.0.19",
34
+ "@agent-relay/protocol": "2.0.19",
35
+ "@agent-relay/config": "2.0.19",
36
+ "@agent-relay/continuity": "2.0.19",
37
+ "@agent-relay/resiliency": "2.0.19"
38
38
  },
39
39
  "devDependencies": {
40
40
  "typescript": "^5.9.3",
@@ -0,0 +1,40 @@
1
+ # Agent Policy
2
+
3
+ You are operating under organizational agent policies. These policies govern your interactions with other agents and tools.
4
+
5
+ ## Your Permissions
6
+
7
+ Check the policy service for your specific permissions. If no explicit restrictions are defined, you have full permissions.
8
+
9
+ ## General Rules
10
+
11
+ 1. **Spawn Authorization**: Only spawn agents you are authorized to spawn. Check with Lead before spawning if unsure.
12
+
13
+ 2. **Message Routing**: Only message agents you are authorized to communicate with. Use proper channels.
14
+
15
+ 3. **Tool Usage**: Only use tools you are authorized to use. Read-only operations are generally safer.
16
+
17
+ 4. **Rate Limits**: Respect rate limits on messages. Don't spam other agents.
18
+
19
+ ## Restricted Agents
20
+
21
+ Workers and non-lead agents typically have these restrictions:
22
+ - Cannot spawn other agents without Lead approval
23
+ - Can only message Lead, Coordinator, and their assigned peers
24
+ - Limited to read-only tools unless explicitly granted write access
25
+
26
+ ## Lead Agents
27
+
28
+ Lead agents typically have elevated permissions:
29
+ - Can spawn Worker agents
30
+ - Can message all agents
31
+ - Can use all tools
32
+ - Responsible for enforcing policy on spawned agents
33
+
34
+ ## Enforcement
35
+
36
+ Policy violations are blocked at runtime. If your action is blocked, you'll receive a denial message explaining why. Do not attempt to circumvent policy restrictions.
37
+
38
+ ## Checking Your Policy
39
+
40
+ To see your current policy, ask Lead or check the dashboard at `/api/policy/:workspaceId`.