agent-relay 2.0.0 → 2.0.4
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/deploy/workspace/entrypoint.sh +4 -0
- 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 +7 -5
- package/package.json +10 -10
- package/packages/api-types/package.json +1 -1
- package/packages/bridge/dist/spawner.js +3 -1
- package/packages/bridge/package.json +12 -7
- package/packages/cloud/package.json +11 -6
- package/packages/config/dist/project-namespace.d.ts +4 -0
- package/packages/config/dist/project-namespace.js +8 -0
- package/packages/config/dist/relay-config.d.ts +14 -6
- package/packages/config/dist/relay-config.js +14 -6
- package/packages/config/package.json +7 -2
- package/packages/continuity/package.json +6 -1
- package/packages/daemon/package.json +16 -11
- package/packages/dashboard/dist/server.js +89 -17
- package/packages/dashboard/package.json +14 -22
- package/packages/dashboard/ui/react-components/SpawnModal.tsx +119 -29
- package/packages/dashboard/ui-dist/404.html +1 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/677-7323947c23b35979.js +1 -0
- 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/package.json +18 -12
- package/packages/hooks/package.json +9 -4
- package/packages/mcp/README.md +135 -19
- package/packages/mcp/dist/cloud.js +50 -1
- package/packages/mcp/package.json +1 -1
- package/packages/memory/package.json +7 -2
- package/packages/policy/package.json +7 -2
- package/packages/protocol/package.json +6 -1
- package/packages/resiliency/package.json +6 -1
- package/packages/sdk/README.md +160 -43
- package/packages/sdk/dist/client.d.ts +99 -3
- package/packages/sdk/dist/client.js +113 -6
- package/packages/sdk/dist/discovery.d.ts +29 -0
- package/packages/sdk/dist/discovery.js +126 -0
- package/packages/sdk/dist/index.d.ts +1 -0
- package/packages/sdk/dist/index.js +2 -0
- package/packages/sdk/dist/standalone.js +1 -0
- package/packages/sdk/package.json +2 -2
- package/packages/spawner/package.json +2 -2
- package/packages/state/package.json +6 -1
- package/packages/storage/package.json +7 -2
- package/packages/trajectory/package.json +7 -2
- package/packages/user-directory/package.json +7 -2
- package/packages/utils/package.json +6 -1
- package/packages/wrapper/dist/base-wrapper.d.ts +25 -1
- package/packages/wrapper/dist/base-wrapper.js +44 -2
- package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +2 -0
- package/packages/wrapper/dist/relay-pty-orchestrator.js +55 -10
- package/packages/wrapper/dist/shared.d.ts +25 -0
- package/packages/wrapper/dist/shared.js +40 -0
- package/packages/wrapper/dist/tmux-wrapper.d.ts +7 -0
- package/packages/wrapper/dist/tmux-wrapper.js +62 -9
- package/packages/wrapper/package.json +7 -7
- package/.turbo/cache/013415461711937f-meta.json +0 -1
- package/.turbo/cache/013415461711937f.tar.zst +0 -0
- package/.turbo/cache/0562b1ff326acd6d-meta.json +0 -1
- package/.turbo/cache/0562b1ff326acd6d.tar.zst +0 -0
- package/.turbo/cache/0b46e0e17254882f-meta.json +0 -1
- package/.turbo/cache/0b46e0e17254882f.tar.zst +0 -0
- package/.turbo/cache/3799eda981d53d14-meta.json +0 -1
- package/.turbo/cache/3799eda981d53d14.tar.zst +0 -0
- package/.turbo/cache/47e9d8f404ed064d-meta.json +0 -1
- package/.turbo/cache/47e9d8f404ed064d.tar.zst +0 -0
- package/.turbo/cache/4cde1d1e5b298099-meta.json +0 -1
- package/.turbo/cache/4cde1d1e5b298099.tar.zst +0 -0
- package/.turbo/cache/538eea955c0936ef-meta.json +0 -1
- package/.turbo/cache/538eea955c0936ef.tar.zst +0 -0
- package/.turbo/cache/5dceac7f229f5d5d-meta.json +0 -1
- package/.turbo/cache/5dceac7f229f5d5d.tar.zst +0 -0
- package/.turbo/cache/64c15b201819367d-meta.json +0 -1
- package/.turbo/cache/64c15b201819367d.tar.zst +0 -0
- package/.turbo/cache/6d6a21a05efca434-meta.json +0 -1
- package/.turbo/cache/6d6a21a05efca434.tar.zst +0 -0
- package/.turbo/cache/7562610cb03ec040-meta.json +0 -1
- package/.turbo/cache/7562610cb03ec040.tar.zst +0 -0
- package/.turbo/cache/81a2456e17af4d7f-meta.json +0 -1
- package/.turbo/cache/81a2456e17af4d7f.tar.zst +0 -0
- package/.turbo/cache/823fc2a7b12f724c-meta.json +0 -1
- package/.turbo/cache/823fc2a7b12f724c.tar.zst +0 -0
- package/.turbo/cache/9daad16a073d1f91-meta.json +0 -1
- package/.turbo/cache/9daad16a073d1f91.tar.zst +0 -0
- package/.turbo/cache/b81ccbab0a606b60-meta.json +0 -1
- package/.turbo/cache/b81ccbab0a606b60.tar.zst +0 -0
- package/.turbo/cache/cf98487988bfcf91-meta.json +0 -1
- package/.turbo/cache/cf98487988bfcf91.tar.zst +0 -0
- package/.turbo/cache/cfdf7c57dca71f27-meta.json +0 -1
- package/.turbo/cache/cfdf7c57dca71f27.tar.zst +0 -0
- package/.turbo/cache/d3063ef43811b1e5-meta.json +0 -1
- package/.turbo/cache/d3063ef43811b1e5.tar.zst +0 -0
- package/.turbo/cache/de28892eb7678e65-meta.json +0 -1
- package/.turbo/cache/de28892eb7678e65.tar.zst +0 -0
- package/.turbo/cache/ec29adce408132ba-meta.json +0 -1
- package/.turbo/cache/ec29adce408132ba.tar.zst +0 -0
- package/.turbo/cache/f70450d8d305f172-meta.json +0 -1
- package/.turbo/cache/f70450d8d305f172.tar.zst +0 -0
- package/.turbo/cache/fe384d5d6b7a983a-meta.json +0 -1
- package/.turbo/cache/fe384d5d6b7a983a.tar.zst +0 -0
- package/bin/relay-pty +0 -0
- package/packages/dashboard/ui/.next/BUILD_ID +0 -1
- package/packages/dashboard/ui/.next/app-build-manifest.json +0 -135
- package/packages/dashboard/ui/.next/app-path-routes-manifest.json +0 -1
- package/packages/dashboard/ui/.next/build-manifest.json +0 -32
- package/packages/dashboard/ui/.next/cache/config.json +0 -7
- package/packages/dashboard/ui/.next/cache/eslint/.cache_1asv1h5 +0 -1
- package/packages/dashboard/ui/.next/cache/webpack/client-production/0.pack +0 -0
- package/packages/dashboard/ui/.next/cache/webpack/client-production/index.pack +0 -0
- package/packages/dashboard/ui/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/packages/dashboard/ui/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/packages/dashboard/ui/.next/cache/webpack/server-production/0.pack +0 -0
- package/packages/dashboard/ui/.next/cache/webpack/server-production/index.pack +0 -0
- package/packages/dashboard/ui/.next/export-detail.json +0 -1
- package/packages/dashboard/ui/.next/export-marker.json +0 -1
- package/packages/dashboard/ui/.next/images-manifest.json +0 -1
- package/packages/dashboard/ui/.next/next-minimal-server.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/next-server.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/package.json +0 -1
- package/packages/dashboard/ui/.next/prerender-manifest.json +0 -1
- package/packages/dashboard/ui/.next/react-loadable-manifest.json +0 -1970
- package/packages/dashboard/ui/.next/required-server-files.json +0 -1
- package/packages/dashboard/ui/.next/routes-manifest.json +0 -1
- package/packages/dashboard/ui/.next/server/app/_not-found/page.js +0 -1
- package/packages/dashboard/ui/.next/server/app/_not-found/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/_not-found/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/_not-found.html +0 -1
- package/packages/dashboard/ui/.next/server/app/_not-found.meta +0 -6
- package/packages/dashboard/ui/.next/server/app/_not-found.rsc +0 -9
- package/packages/dashboard/ui/.next/server/app/app/onboarding/page.js +0 -6
- package/packages/dashboard/ui/.next/server/app/app/onboarding/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/app/onboarding/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/app/onboarding.html +0 -1
- package/packages/dashboard/ui/.next/server/app/app/onboarding.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/app/onboarding.rsc +0 -7
- package/packages/dashboard/ui/.next/server/app/app/page.js +0 -436
- package/packages/dashboard/ui/.next/server/app/app/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/app/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/app.html +0 -1
- package/packages/dashboard/ui/.next/server/app/app.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/app.rsc +0 -7
- package/packages/dashboard/ui/.next/server/app/apple-icon.png/route.js +0 -12
- package/packages/dashboard/ui/.next/server/app/apple-icon.png/route.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/apple-icon.png.body +0 -0
- package/packages/dashboard/ui/.next/server/app/apple-icon.png.meta +0 -1
- package/packages/dashboard/ui/.next/server/app/cloud/link/page.js +0 -1
- package/packages/dashboard/ui/.next/server/app/cloud/link/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/cloud/link/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/cloud/link.html +0 -1
- package/packages/dashboard/ui/.next/server/app/cloud/link.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/cloud/link.rsc +0 -7
- package/packages/dashboard/ui/.next/server/app/connect-repos/page.js +0 -6
- package/packages/dashboard/ui/.next/server/app/connect-repos/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/connect-repos/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/connect-repos.html +0 -1
- package/packages/dashboard/ui/.next/server/app/connect-repos.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/connect-repos.rsc +0 -7
- package/packages/dashboard/ui/.next/server/app/history/page.js +0 -1
- package/packages/dashboard/ui/.next/server/app/history/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/history/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/history.html +0 -1
- package/packages/dashboard/ui/.next/server/app/history.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/history.rsc +0 -7
- package/packages/dashboard/ui/.next/server/app/index.html +0 -1
- package/packages/dashboard/ui/.next/server/app/index.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/index.rsc +0 -7
- package/packages/dashboard/ui/.next/server/app/login/page.js +0 -6
- package/packages/dashboard/ui/.next/server/app/login/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/login/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/login.html +0 -5
- package/packages/dashboard/ui/.next/server/app/login.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/login.rsc +0 -7
- package/packages/dashboard/ui/.next/server/app/metrics/page.js +0 -1
- package/packages/dashboard/ui/.next/server/app/metrics/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/metrics/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/metrics.html +0 -1
- package/packages/dashboard/ui/.next/server/app/metrics.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/metrics.rsc +0 -7
- package/packages/dashboard/ui/.next/server/app/page.js +0 -1
- package/packages/dashboard/ui/.next/server/app/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/pricing/page.js +0 -5
- package/packages/dashboard/ui/.next/server/app/pricing/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/pricing/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/pricing.html +0 -13
- package/packages/dashboard/ui/.next/server/app/pricing.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/pricing.rsc +0 -7
- package/packages/dashboard/ui/.next/server/app/providers/page.js +0 -2
- package/packages/dashboard/ui/.next/server/app/providers/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/providers/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/providers/setup/[provider]/page.js +0 -1
- package/packages/dashboard/ui/.next/server/app/providers/setup/[provider]/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/providers/setup/[provider]/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/providers/setup/claude.html +0 -1
- package/packages/dashboard/ui/.next/server/app/providers/setup/claude.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/providers/setup/claude.rsc +0 -8
- package/packages/dashboard/ui/.next/server/app/providers/setup/codex.html +0 -1
- package/packages/dashboard/ui/.next/server/app/providers/setup/codex.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/providers/setup/codex.rsc +0 -8
- package/packages/dashboard/ui/.next/server/app/providers/setup/cursor.html +0 -1
- package/packages/dashboard/ui/.next/server/app/providers/setup/cursor.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/providers/setup/cursor.rsc +0 -8
- package/packages/dashboard/ui/.next/server/app/providers.html +0 -1
- package/packages/dashboard/ui/.next/server/app/providers.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/providers.rsc +0 -7
- package/packages/dashboard/ui/.next/server/app/signup/page.js +0 -6
- package/packages/dashboard/ui/.next/server/app/signup/page.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/app/signup/page_client-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/app/signup.html +0 -6
- package/packages/dashboard/ui/.next/server/app/signup.meta +0 -5
- package/packages/dashboard/ui/.next/server/app/signup.rsc +0 -7
- package/packages/dashboard/ui/.next/server/app-paths-manifest.json +0 -16
- package/packages/dashboard/ui/.next/server/chunks/190.js +0 -1
- package/packages/dashboard/ui/.next/server/chunks/205.js +0 -1
- package/packages/dashboard/ui/.next/server/chunks/251.js +0 -9
- package/packages/dashboard/ui/.next/server/chunks/288.js +0 -1
- package/packages/dashboard/ui/.next/server/chunks/434.js +0 -1
- package/packages/dashboard/ui/.next/server/chunks/471.js +0 -2
- package/packages/dashboard/ui/.next/server/chunks/621.js +0 -1
- package/packages/dashboard/ui/.next/server/chunks/680.js +0 -5
- package/packages/dashboard/ui/.next/server/chunks/682.js +0 -6
- package/packages/dashboard/ui/.next/server/chunks/684.js +0 -1
- package/packages/dashboard/ui/.next/server/chunks/71.js +0 -196
- package/packages/dashboard/ui/.next/server/chunks/711.js +0 -1
- package/packages/dashboard/ui/.next/server/chunks/90.js +0 -17
- package/packages/dashboard/ui/.next/server/chunks/948.js +0 -2
- package/packages/dashboard/ui/.next/server/chunks/font-manifest.json +0 -1
- package/packages/dashboard/ui/.next/server/font-manifest.json +0 -1
- package/packages/dashboard/ui/.next/server/functions-config-manifest.json +0 -1
- package/packages/dashboard/ui/.next/server/interception-route-rewrite-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/middleware-build-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/middleware-manifest.json +0 -6
- package/packages/dashboard/ui/.next/server/middleware-react-loadable-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/next-font-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/next-font-manifest.json +0 -1
- package/packages/dashboard/ui/.next/server/pages/404.html +0 -1
- package/packages/dashboard/ui/.next/server/pages/500.html +0 -1
- package/packages/dashboard/ui/.next/server/pages/_app.js +0 -1
- package/packages/dashboard/ui/.next/server/pages/_app.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/pages/_document.js +0 -1
- package/packages/dashboard/ui/.next/server/pages/_document.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/pages/_error.js +0 -1
- package/packages/dashboard/ui/.next/server/pages/_error.js.nft.json +0 -1
- package/packages/dashboard/ui/.next/server/pages-manifest.json +0 -1
- package/packages/dashboard/ui/.next/server/server-reference-manifest.js +0 -1
- package/packages/dashboard/ui/.next/server/server-reference-manifest.json +0 -1
- package/packages/dashboard/ui/.next/server/webpack-runtime.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/116-a883fca163f3a5bc.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/117-c8afed19e821a35d.js +0 -2
- package/packages/dashboard/ui/.next/static/chunks/282-980c2eb8fff20123.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/532-bace199897eeab37.js +0 -9
- package/packages/dashboard/ui/.next/static/chunks/631-af51bad94027527a.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/648-acb2ff9f77cbfbd3.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/677-30e60cb0b47875b6.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/766-2aea80818f7eb0d8.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/83-4f08122d4e7e79a6.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/847-f1f467060f32afff.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/891-5cb1513eeb97a891.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/_not-found/page-60501fddbafba9dc.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/app/onboarding/page-9914652442f7e4fb.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/app/page-44813aa26ad19681.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/cloud/link/page-fa1d5842aa90e8a6.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/connect-repos/page-113060009ef35bc2.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/history/page-9965d2483011b846.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/layout-6b91e33784c20610.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/login/page-a0ca6f7ca6a100b8.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/metrics/page-1e37ef8e73940b40.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/page-7993778218818ace.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/pricing/page-9db3ebdfa567a7c9.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/providers/page-bcf46064ac4474ce.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/providers/setup/[provider]/page-4dbe33f0f7691b7c.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/app/signup/page-1ede2205b58649ca.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/e868780c-48e5f147c90a3a41.js +0 -18
- package/packages/dashboard/ui/.next/static/chunks/fd9d1056-609918ca7b6280bb.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/framework-f66176bb897dc684.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/main-5a40a5ae29646e1b.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/main-app-fdbeb09028f57c9f.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/pages/_app-72b849fbd24ac258.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/pages/_error-7ba65e1336b92748.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
- package/packages/dashboard/ui/.next/static/chunks/webpack-1cdd8ed57114d5e1.js +0 -1
- package/packages/dashboard/ui/.next/static/css/4034f236dd1a3178.css +0 -1
- package/packages/dashboard/ui/.next/static/css/99c2552394077586.css +0 -1
- package/packages/dashboard/ui/.next/trace +0 -63
- package/packages/dashboard/ui/.next/types/app/app/onboarding/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/app/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/cloud/link/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/connect-repos/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/history/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/layout.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/login/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/metrics/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/pricing/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/providers/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/providers/setup/[provider]/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/app/signup/page.ts +0 -79
- package/packages/dashboard/ui/.next/types/package.json +0 -1
- package/packages/dashboard/ui-dist/_next/static/chunks/677-30e60cb0b47875b6.js +0 -1
- /package/dist/dashboard/out/_next/static/{ZCFjHbkF8yDKS2md3lVgb → 72btMIJ64BCAB4UgVkpaq}/_buildManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/{ZCFjHbkF8yDKS2md3lVgb → 72btMIJ64BCAB4UgVkpaq}/_ssgManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{HR7W9z1PPVPFqUboUVZFZ → 0AsOfRemPXJmtynCKT-rx}/_buildManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{HR7W9z1PPVPFqUboUVZFZ → 0AsOfRemPXJmtynCKT-rx}/_ssgManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{ZCFjHbkF8yDKS2md3lVgb → 72btMIJ64BCAB4UgVkpaq}/_buildManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{ZCFjHbkF8yDKS2md3lVgb → 72btMIJ64BCAB4UgVkpaq}/_ssgManifest.js +0 -0
- /package/packages/dashboard/{ui/.next/static/HR7W9z1PPVPFqUboUVZFZ → ui-dist/_next/static/clUN2n0bz9HCjKI0qlOxU}/_buildManifest.js +0 -0
- /package/packages/dashboard/{ui/.next/static/HR7W9z1PPVPFqUboUVZFZ → ui-dist/_next/static/clUN2n0bz9HCjKI0qlOxU}/_ssgManifest.js +0 -0
|
@@ -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/99c2552394077586.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-18a4665665f6be11.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/99c2552394077586.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-18a4665665f6be11.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\":\"72btMIJ64BCAB4UgVkpaq\",\"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/99c2552394077586.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-18a4665665f6be11.js"],"default",1]
|
|
3
3
|
4:I[4707,[],""]
|
|
4
4
|
5:I[6423,[],""]
|
|
5
|
-
0:["
|
|
5
|
+
0:["72btMIJ64BCAB4UgVkpaq",[[["",{"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/99c2552394077586.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"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
|
@@ -63,10 +63,11 @@ program
|
|
|
63
63
|
.name('agent-relay')
|
|
64
64
|
.description('Agent-to-agent messaging')
|
|
65
65
|
.version(VERSION, '-V, --version', 'Output the version number');
|
|
66
|
-
// create-agent - Wrap agent with real-time messaging
|
|
66
|
+
// create-agent - Wrap agent with real-time messaging (requires TTY)
|
|
67
|
+
// For programmatic spawning from scripts, use 'agent-relay spawn' instead (no TTY required)
|
|
67
68
|
program
|
|
68
69
|
.command('create-agent')
|
|
69
|
-
.description('Wrap an agent with real-time messaging')
|
|
70
|
+
.description('Wrap an agent with real-time messaging (requires TTY, use "spawn" for scripts)')
|
|
70
71
|
.option('-n, --name <name>', 'Agent name (auto-generated if not set)')
|
|
71
72
|
.option('-d, --debug', 'Enable debug output')
|
|
72
73
|
.option('--prefix <pattern>', 'Relay prefix pattern (default: ->relay:)')
|
|
@@ -1589,10 +1590,11 @@ program
|
|
|
1589
1590
|
}
|
|
1590
1591
|
}
|
|
1591
1592
|
});
|
|
1592
|
-
// spawn - Spawn an agent via API (works from any context, no
|
|
1593
|
+
// spawn - Spawn an agent via API (works from any context, no TTY required)
|
|
1594
|
+
// Use this for programmatic spawning from scripts, detached processes, or containers
|
|
1593
1595
|
program
|
|
1594
|
-
.command('spawn'
|
|
1595
|
-
.description('Spawn an agent via dashboard API (
|
|
1596
|
+
.command('spawn')
|
|
1597
|
+
.description('Spawn an agent via dashboard API (recommended for programmatic use, no TTY required)')
|
|
1596
1598
|
.argument('<name>', 'Agent name')
|
|
1597
1599
|
.argument('<cli>', 'CLI to use (claude, codex, gemini, etc.)')
|
|
1598
1600
|
.argument('[task]', 'Task description (can also be piped via stdin)')
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-relay",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Real-time agent-to-agent communication system",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -106,15 +106,15 @@
|
|
|
106
106
|
},
|
|
107
107
|
"homepage": "https://github.com/AgentWorkforce/relay#readme",
|
|
108
108
|
"dependencies": {
|
|
109
|
-
"@agent-relay/sdk": "2.0.
|
|
110
|
-
"@agent-relay/config": "2.0.
|
|
111
|
-
"@agent-relay/protocol": "2.0.
|
|
112
|
-
"@agent-relay/storage": "2.0.
|
|
113
|
-
"@agent-relay/continuity": "2.0.
|
|
114
|
-
"@agent-relay/trajectory": "2.0.
|
|
115
|
-
"@agent-relay/hooks": "2.0.
|
|
116
|
-
"@agent-relay/resiliency": "2.0.
|
|
117
|
-
"@agent-relay/user-directory": "2.0.
|
|
109
|
+
"@agent-relay/sdk": "2.0.4",
|
|
110
|
+
"@agent-relay/config": "2.0.4",
|
|
111
|
+
"@agent-relay/protocol": "2.0.4",
|
|
112
|
+
"@agent-relay/storage": "2.0.4",
|
|
113
|
+
"@agent-relay/continuity": "2.0.4",
|
|
114
|
+
"@agent-relay/trajectory": "2.0.4",
|
|
115
|
+
"@agent-relay/hooks": "2.0.4",
|
|
116
|
+
"@agent-relay/resiliency": "2.0.4",
|
|
117
|
+
"@agent-relay/user-directory": "2.0.4",
|
|
118
118
|
"@nangohq/node": "^0.69.20",
|
|
119
119
|
"@types/jsonwebtoken": "^9.0.10",
|
|
120
120
|
"agent-trajectories": "^0.2.3",
|
|
@@ -605,7 +605,9 @@ export class AgentSpawner {
|
|
|
605
605
|
// 2. Relay daemon socket is accessible (daemon must be running)
|
|
606
606
|
// Without both, MCP context would be shown but tools wouldn't work
|
|
607
607
|
const mcpConfigPath = path.join(this.projectRoot, '.mcp.json');
|
|
608
|
-
|
|
608
|
+
// Use the actual socket path from config (project-local .agent-relay/relay.sock)
|
|
609
|
+
// or fall back to environment variable
|
|
610
|
+
const relaySocket = this.socketPath || process.env.RELAY_SOCKET || path.join(this.projectRoot, '.agent-relay', 'relay.sock');
|
|
609
611
|
let hasMcp = false;
|
|
610
612
|
if (fs.existsSync(mcpConfigPath)) {
|
|
611
613
|
try {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/bridge",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Multi-project bridge client utilities for Relay",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
"test:watch": "vitest"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@agent-relay/protocol": "2.0.
|
|
26
|
-
"@agent-relay/config": "2.0.
|
|
27
|
-
"@agent-relay/utils": "2.0.
|
|
28
|
-
"@agent-relay/policy": "2.0.
|
|
29
|
-
"@agent-relay/user-directory": "2.0.
|
|
30
|
-
"@agent-relay/wrapper": "2.0.
|
|
25
|
+
"@agent-relay/protocol": "2.0.4",
|
|
26
|
+
"@agent-relay/config": "2.0.4",
|
|
27
|
+
"@agent-relay/utils": "2.0.4",
|
|
28
|
+
"@agent-relay/policy": "2.0.4",
|
|
29
|
+
"@agent-relay/user-directory": "2.0.4",
|
|
30
|
+
"@agent-relay/wrapper": "2.0.4"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "^22.19.3",
|
|
@@ -36,5 +36,10 @@
|
|
|
36
36
|
},
|
|
37
37
|
"publishConfig": {
|
|
38
38
|
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "git+https://github.com/AgentWorkforce/relay.git",
|
|
43
|
+
"directory": "packages/bridge"
|
|
39
44
|
}
|
|
40
45
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/cloud",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Cloud API server and services for Agent Relay",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -38,11 +38,11 @@
|
|
|
38
38
|
"test:watch": "vitest"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@agent-relay/wrapper": "2.0.
|
|
42
|
-
"@agent-relay/config": "2.0.
|
|
43
|
-
"@agent-relay/resiliency": "2.0.
|
|
44
|
-
"@agent-relay/storage": "2.0.
|
|
45
|
-
"@agent-relay/protocol": "2.0.
|
|
41
|
+
"@agent-relay/wrapper": "2.0.4",
|
|
42
|
+
"@agent-relay/config": "2.0.4",
|
|
43
|
+
"@agent-relay/resiliency": "2.0.4",
|
|
44
|
+
"@agent-relay/storage": "2.0.4",
|
|
45
|
+
"@agent-relay/protocol": "2.0.4"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/node": "^22.19.3",
|
|
@@ -51,5 +51,10 @@
|
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
|
54
|
+
},
|
|
55
|
+
"repository": {
|
|
56
|
+
"type": "git",
|
|
57
|
+
"url": "git+https://github.com/AgentWorkforce/relay.git",
|
|
58
|
+
"directory": "packages/cloud"
|
|
54
59
|
}
|
|
55
60
|
}
|
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
*/
|
|
9
9
|
/**
|
|
10
10
|
* Get the project root by looking for common markers
|
|
11
|
+
*
|
|
12
|
+
* Priority:
|
|
13
|
+
* 1. AGENT_RELAY_PROJECT environment variable (for worktrees/subprojects)
|
|
14
|
+
* 2. Find project root by looking for markers (.git, package.json, etc.)
|
|
11
15
|
*/
|
|
12
16
|
export declare function findProjectRoot(startDir?: string): string;
|
|
13
17
|
/**
|
|
@@ -43,8 +43,16 @@ function hashPath(projectPath) {
|
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* Get the project root by looking for common markers
|
|
46
|
+
*
|
|
47
|
+
* Priority:
|
|
48
|
+
* 1. AGENT_RELAY_PROJECT environment variable (for worktrees/subprojects)
|
|
49
|
+
* 2. Find project root by looking for markers (.git, package.json, etc.)
|
|
46
50
|
*/
|
|
47
51
|
export function findProjectRoot(startDir = process.cwd()) {
|
|
52
|
+
// Allow explicit override for worktrees and subprojects
|
|
53
|
+
if (process.env.AGENT_RELAY_PROJECT) {
|
|
54
|
+
return path.resolve(process.env.AGENT_RELAY_PROJECT);
|
|
55
|
+
}
|
|
48
56
|
let current = path.resolve(startDir);
|
|
49
57
|
const root = path.parse(current).root;
|
|
50
58
|
const markers = ['.git', 'package.json', 'Cargo.toml', 'go.mod', 'pyproject.toml', '.agent-relay'];
|
|
@@ -7,19 +7,27 @@ export declare const DEFAULT_CONNECTION_CONFIG: {
|
|
|
7
7
|
readonly writeQueueLowWaterMark: 500;
|
|
8
8
|
};
|
|
9
9
|
export declare const DEFAULT_TMUX_WRAPPER_CONFIG: {
|
|
10
|
-
readonly pollInterval:
|
|
11
|
-
readonly idleBeforeInjectMs:
|
|
12
|
-
readonly injectRetryMs:
|
|
10
|
+
readonly pollInterval: 150;
|
|
11
|
+
readonly idleBeforeInjectMs: 800;
|
|
12
|
+
readonly injectRetryMs: 300;
|
|
13
13
|
readonly debug: false;
|
|
14
14
|
readonly debugLogIntervalMs: 0;
|
|
15
15
|
readonly mouseMode: true;
|
|
16
16
|
readonly activityIdleThresholdMs: 30000;
|
|
17
|
-
readonly outputStabilityTimeoutMs:
|
|
18
|
-
readonly outputStabilityPollMs:
|
|
17
|
+
readonly outputStabilityTimeoutMs: 800;
|
|
18
|
+
readonly outputStabilityPollMs: 150;
|
|
19
19
|
readonly streamLogs: true;
|
|
20
20
|
};
|
|
21
|
-
export declare const DEFAULT_IDLE_BEFORE_INJECT_MS =
|
|
21
|
+
export declare const DEFAULT_IDLE_BEFORE_INJECT_MS = 800;
|
|
22
22
|
export declare const DEFAULT_IDLE_CONFIDENCE_THRESHOLD = 0.7;
|
|
23
|
+
/** Low-latency mode constants for time-critical messaging */
|
|
24
|
+
export declare const LOW_LATENCY_CONFIG: {
|
|
25
|
+
readonly pollInterval: 100;
|
|
26
|
+
readonly idleBeforeInjectMs: 300;
|
|
27
|
+
readonly injectRetryMs: 200;
|
|
28
|
+
readonly outputStabilityTimeoutMs: 300;
|
|
29
|
+
readonly outputStabilityPollMs: 100;
|
|
30
|
+
};
|
|
23
31
|
/** Default Unix socket path for daemon communication */
|
|
24
32
|
export declare const DEFAULT_SOCKET_PATH = "/tmp/agent-relay.sock";
|
|
25
33
|
//# sourceMappingURL=relay-config.d.ts.map
|
|
@@ -7,19 +7,27 @@ export const DEFAULT_CONNECTION_CONFIG = {
|
|
|
7
7
|
writeQueueLowWaterMark: 500,
|
|
8
8
|
};
|
|
9
9
|
export const DEFAULT_TMUX_WRAPPER_CONFIG = {
|
|
10
|
-
pollInterval:
|
|
11
|
-
idleBeforeInjectMs:
|
|
12
|
-
injectRetryMs:
|
|
10
|
+
pollInterval: 150,
|
|
11
|
+
idleBeforeInjectMs: 800,
|
|
12
|
+
injectRetryMs: 300,
|
|
13
13
|
debug: false,
|
|
14
14
|
debugLogIntervalMs: 0,
|
|
15
15
|
mouseMode: true,
|
|
16
16
|
activityIdleThresholdMs: 30_000,
|
|
17
|
-
outputStabilityTimeoutMs:
|
|
18
|
-
outputStabilityPollMs:
|
|
17
|
+
outputStabilityTimeoutMs: 800,
|
|
18
|
+
outputStabilityPollMs: 150,
|
|
19
19
|
streamLogs: true,
|
|
20
20
|
};
|
|
21
|
-
export const DEFAULT_IDLE_BEFORE_INJECT_MS =
|
|
21
|
+
export const DEFAULT_IDLE_BEFORE_INJECT_MS = 800;
|
|
22
22
|
export const DEFAULT_IDLE_CONFIDENCE_THRESHOLD = 0.7;
|
|
23
|
+
/** Low-latency mode constants for time-critical messaging */
|
|
24
|
+
export const LOW_LATENCY_CONFIG = {
|
|
25
|
+
pollInterval: 100,
|
|
26
|
+
idleBeforeInjectMs: 300,
|
|
27
|
+
injectRetryMs: 200,
|
|
28
|
+
outputStabilityTimeoutMs: 300,
|
|
29
|
+
outputStabilityPollMs: 100,
|
|
30
|
+
};
|
|
23
31
|
/** Default Unix socket path for daemon communication */
|
|
24
32
|
export const DEFAULT_SOCKET_PATH = '/tmp/agent-relay.sock';
|
|
25
33
|
//# sourceMappingURL=relay-config.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/config",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Shared configuration schemas and loaders for Agent Relay",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"test:watch": "vitest"
|
|
84
84
|
},
|
|
85
85
|
"dependencies": {
|
|
86
|
-
"@agent-relay/protocol": "2.0.
|
|
86
|
+
"@agent-relay/protocol": "2.0.4",
|
|
87
87
|
"zod": "^3.23.8",
|
|
88
88
|
"zod-to-json-schema": "^3.23.1"
|
|
89
89
|
},
|
|
@@ -94,5 +94,10 @@
|
|
|
94
94
|
},
|
|
95
95
|
"publishConfig": {
|
|
96
96
|
"access": "public"
|
|
97
|
+
},
|
|
98
|
+
"repository": {
|
|
99
|
+
"type": "git",
|
|
100
|
+
"url": "git+https://github.com/AgentWorkforce/relay.git",
|
|
101
|
+
"directory": "packages/config"
|
|
97
102
|
}
|
|
98
103
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/continuity",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Session continuity manager for Relay (ledgers, handoffs, resume)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -28,5 +28,10 @@
|
|
|
28
28
|
},
|
|
29
29
|
"publishConfig": {
|
|
30
30
|
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/AgentWorkforce/relay.git",
|
|
35
|
+
"directory": "packages/continuity"
|
|
31
36
|
}
|
|
32
37
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/daemon",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Relay daemon server - agent coordination and message routing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,16 +22,16 @@
|
|
|
22
22
|
"test:watch": "vitest"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@agent-relay/protocol": "2.0.
|
|
26
|
-
"@agent-relay/config": "2.0.
|
|
27
|
-
"@agent-relay/storage": "2.0.
|
|
28
|
-
"@agent-relay/bridge": "2.0.
|
|
29
|
-
"@agent-relay/utils": "2.0.
|
|
30
|
-
"@agent-relay/policy": "2.0.
|
|
31
|
-
"@agent-relay/memory": "2.0.
|
|
32
|
-
"@agent-relay/resiliency": "2.0.
|
|
33
|
-
"@agent-relay/user-directory": "2.0.
|
|
34
|
-
"@agent-relay/wrapper": "2.0.
|
|
25
|
+
"@agent-relay/protocol": "2.0.4",
|
|
26
|
+
"@agent-relay/config": "2.0.4",
|
|
27
|
+
"@agent-relay/storage": "2.0.4",
|
|
28
|
+
"@agent-relay/bridge": "2.0.4",
|
|
29
|
+
"@agent-relay/utils": "2.0.4",
|
|
30
|
+
"@agent-relay/policy": "2.0.4",
|
|
31
|
+
"@agent-relay/memory": "2.0.4",
|
|
32
|
+
"@agent-relay/resiliency": "2.0.4",
|
|
33
|
+
"@agent-relay/user-directory": "2.0.4",
|
|
34
|
+
"@agent-relay/wrapper": "2.0.4",
|
|
35
35
|
"ws": "^8.18.3",
|
|
36
36
|
"better-sqlite3": "^12.6.2",
|
|
37
37
|
"pg": "^8.16.3",
|
|
@@ -48,5 +48,10 @@
|
|
|
48
48
|
},
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|
|
51
|
+
},
|
|
52
|
+
"repository": {
|
|
53
|
+
"type": "git",
|
|
54
|
+
"url": "git+https://github.com/AgentWorkforce/relay.git",
|
|
55
|
+
"directory": "packages/daemon"
|
|
51
56
|
}
|
|
52
57
|
}
|
|
@@ -754,11 +754,31 @@ export async function startDashboard(portOrOptions, dataDirArg, teamDirArg, dbPa
|
|
|
754
754
|
}
|
|
755
755
|
// Check if userBridge has a client for this user (avoid duplicate connections)
|
|
756
756
|
// This prevents the connection storm where two clients fight for the same name
|
|
757
|
+
// IMPORTANT: Return the client even if it's not READY yet to avoid creating duplicates
|
|
758
|
+
// The caller should handle the CONNECTING state appropriately
|
|
757
759
|
if (userBridge) {
|
|
758
760
|
const userBridgeClient = userBridge.getRelayClient(senderName);
|
|
759
|
-
if (userBridgeClient
|
|
760
|
-
|
|
761
|
-
|
|
761
|
+
if (userBridgeClient) {
|
|
762
|
+
if (userBridgeClient.state === 'READY') {
|
|
763
|
+
console.log(`[dashboard] Reusing userBridge client for ${senderName}`);
|
|
764
|
+
return userBridgeClient;
|
|
765
|
+
}
|
|
766
|
+
// Client exists but not ready - wait for it instead of creating a duplicate
|
|
767
|
+
console.log(`[dashboard] userBridge client for ${senderName} exists but state=${userBridgeClient.state}, waiting...`);
|
|
768
|
+
// Wait up to 5 seconds for the client to become ready
|
|
769
|
+
for (let i = 0; i < 50; i++) {
|
|
770
|
+
await new Promise(r => setTimeout(r, 100));
|
|
771
|
+
if (userBridgeClient.state === 'READY') {
|
|
772
|
+
console.log(`[dashboard] userBridge client for ${senderName} now ready after ${(i + 1) * 100}ms`);
|
|
773
|
+
return userBridgeClient;
|
|
774
|
+
}
|
|
775
|
+
if (userBridgeClient.state === 'DISCONNECTED') {
|
|
776
|
+
console.log(`[dashboard] userBridge client for ${senderName} disconnected, will create new`);
|
|
777
|
+
break;
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
// Timed out or disconnected - fall through to create new client
|
|
781
|
+
console.log(`[dashboard] userBridge client for ${senderName} timed out waiting for ready state`);
|
|
762
782
|
}
|
|
763
783
|
}
|
|
764
784
|
// Check if there's already a pending connection for this sender
|
|
@@ -3478,6 +3498,35 @@ export async function startDashboard(portOrOptions, dataDirArg, teamDirArg, dbPa
|
|
|
3478
3498
|
app.get('/api/metrics/agents', async (req, res) => {
|
|
3479
3499
|
try {
|
|
3480
3500
|
const agents = [];
|
|
3501
|
+
// Helper to get the actual agent process PID (child of relay-pty wrapper)
|
|
3502
|
+
const getActualAgentPid = async (wrapperPid) => {
|
|
3503
|
+
try {
|
|
3504
|
+
const { execSync } = await import('child_process');
|
|
3505
|
+
if (process.platform === 'darwin') {
|
|
3506
|
+
// macOS: pgrep -P gets children of a parent process
|
|
3507
|
+
const children = execSync(`pgrep -P ${wrapperPid}`, { encoding: 'utf8' }).trim();
|
|
3508
|
+
const childPids = children.split('\n').filter(p => p).map(p => parseInt(p, 10));
|
|
3509
|
+
// Return the first child (the actual claude/codex/gemini process)
|
|
3510
|
+
return childPids[0] || null;
|
|
3511
|
+
}
|
|
3512
|
+
else {
|
|
3513
|
+
// Linux: Use /proc/<pid>/children or pgrep
|
|
3514
|
+
const childrenPath = `/proc/${wrapperPid}/task/${wrapperPid}/children`;
|
|
3515
|
+
if (fs.existsSync(childrenPath)) {
|
|
3516
|
+
const children = fs.readFileSync(childrenPath, 'utf8').trim();
|
|
3517
|
+
const childPids = children.split(/\s+/).filter(p => p).map(p => parseInt(p, 10));
|
|
3518
|
+
return childPids[0] || null;
|
|
3519
|
+
}
|
|
3520
|
+
// Fallback to pgrep
|
|
3521
|
+
const children = execSync(`pgrep -P ${wrapperPid}`, { encoding: 'utf8' }).trim();
|
|
3522
|
+
const childPids = children.split('\n').filter(p => p).map(p => parseInt(p, 10));
|
|
3523
|
+
return childPids[0] || null;
|
|
3524
|
+
}
|
|
3525
|
+
}
|
|
3526
|
+
catch {
|
|
3527
|
+
return null;
|
|
3528
|
+
}
|
|
3529
|
+
};
|
|
3481
3530
|
// Get metrics from spawner's active workers
|
|
3482
3531
|
if (spawner) {
|
|
3483
3532
|
const activeWorkers = spawner.getActiveWorkers();
|
|
@@ -3485,10 +3534,17 @@ export async function startDashboard(portOrOptions, dataDirArg, teamDirArg, dbPa
|
|
|
3485
3534
|
// Get memory and CPU usage
|
|
3486
3535
|
let rssBytes = 0;
|
|
3487
3536
|
let cpuPercent = 0;
|
|
3537
|
+
let actualPid = worker.pid;
|
|
3488
3538
|
if (worker.pid) {
|
|
3489
3539
|
try {
|
|
3540
|
+
// The worker.pid is relay-pty wrapper - get the actual agent process (child)
|
|
3541
|
+
const childPid = await getActualAgentPid(worker.pid);
|
|
3542
|
+
const targetPid = childPid || worker.pid;
|
|
3543
|
+
if (childPid) {
|
|
3544
|
+
actualPid = childPid;
|
|
3545
|
+
}
|
|
3490
3546
|
// Try /proc filesystem first (Linux)
|
|
3491
|
-
const statusPath = `/proc/${
|
|
3547
|
+
const statusPath = `/proc/${targetPid}/status`;
|
|
3492
3548
|
if (fs.existsSync(statusPath)) {
|
|
3493
3549
|
const status = fs.readFileSync(statusPath, 'utf8');
|
|
3494
3550
|
// Parse VmRSS (Resident Set Size) from /proc/[pid]/status
|
|
@@ -3500,7 +3556,7 @@ export async function startDashboard(portOrOptions, dataDirArg, teamDirArg, dbPa
|
|
|
3500
3556
|
else if (process.platform === 'darwin') {
|
|
3501
3557
|
// macOS: Use ps command to get RSS and CPU
|
|
3502
3558
|
const { execSync } = await import('child_process');
|
|
3503
|
-
const psOutput = execSync(`ps -o rss=,pcpu= -p ${
|
|
3559
|
+
const psOutput = execSync(`ps -o rss=,pcpu= -p ${targetPid}`, { encoding: 'utf8' }).trim();
|
|
3504
3560
|
if (psOutput) {
|
|
3505
3561
|
const [rssStr, cpuStr] = psOutput.split(/\s+/);
|
|
3506
3562
|
if (rssStr)
|
|
@@ -3516,7 +3572,7 @@ export async function startDashboard(portOrOptions, dataDirArg, teamDirArg, dbPa
|
|
|
3516
3572
|
}
|
|
3517
3573
|
agents.push({
|
|
3518
3574
|
name: worker.name,
|
|
3519
|
-
pid:
|
|
3575
|
+
pid: actualPid,
|
|
3520
3576
|
status: worker.pid ? 'running' : 'unknown',
|
|
3521
3577
|
rssBytes,
|
|
3522
3578
|
cpuPercent,
|
|
@@ -3530,22 +3586,38 @@ export async function startDashboard(portOrOptions, dataDirArg, teamDirArg, dbPa
|
|
|
3530
3586
|
}
|
|
3531
3587
|
}
|
|
3532
3588
|
// Also check agents.json for registered agents that may not be spawned
|
|
3589
|
+
// Filter out internal clients and human users - only show real AI agents
|
|
3590
|
+
const isInternalOrUser = (name, agent) => {
|
|
3591
|
+
// Internal system clients
|
|
3592
|
+
if (name.startsWith('_') || name.startsWith('__'))
|
|
3593
|
+
return true;
|
|
3594
|
+
if (name === 'Dashboard' || name === 'cli')
|
|
3595
|
+
return true;
|
|
3596
|
+
// Agents without CLI info are likely SDK-connected humans/tools, not AI agents
|
|
3597
|
+
// Real AI agents have cli field (claude, codex, gemini, etc.)
|
|
3598
|
+
if (!agent?.cli)
|
|
3599
|
+
return true;
|
|
3600
|
+
return false;
|
|
3601
|
+
};
|
|
3533
3602
|
const agentsPath = path.join(teamDir, 'agents.json');
|
|
3534
3603
|
if (fs.existsSync(agentsPath)) {
|
|
3535
3604
|
const data = JSON.parse(fs.readFileSync(agentsPath, 'utf-8'));
|
|
3536
3605
|
const registeredAgents = data.agents || [];
|
|
3537
3606
|
for (const agent of registeredAgents) {
|
|
3538
|
-
if
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3607
|
+
// Skip if already in list or is internal/user
|
|
3608
|
+
if (agents.find(a => a.name === agent.name))
|
|
3609
|
+
continue;
|
|
3610
|
+
if (isInternalOrUser(agent.name, agent))
|
|
3611
|
+
continue;
|
|
3612
|
+
// Check if recently active (within 30 seconds)
|
|
3613
|
+
const lastSeen = agent.lastSeen ? new Date(agent.lastSeen).getTime() : 0;
|
|
3614
|
+
const isActive = Date.now() - lastSeen < 30000;
|
|
3615
|
+
if (isActive) {
|
|
3616
|
+
agents.push({
|
|
3617
|
+
name: agent.name,
|
|
3618
|
+
status: 'active',
|
|
3619
|
+
alertLevel: 'normal',
|
|
3620
|
+
});
|
|
3549
3621
|
}
|
|
3550
3622
|
}
|
|
3551
3623
|
}
|