agent-relay 1.1.0 → 1.2.0
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/README.md +1 -1
- package/dist/bridge/spawner.d.ts +53 -0
- package/dist/bridge/spawner.d.ts.map +1 -1
- package/dist/bridge/spawner.js +203 -19
- package/dist/bridge/spawner.js.map +1 -1
- package/dist/bridge/types.d.ts +12 -0
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/cli/index.js +401 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cloud/api/auth.d.ts +3 -2
- package/dist/cloud/api/auth.d.ts.map +1 -1
- package/dist/cloud/api/auth.js +10 -98
- package/dist/cloud/api/auth.js.map +1 -1
- package/dist/cloud/api/cli-pty-runner.d.ts +54 -0
- package/dist/cloud/api/cli-pty-runner.d.ts.map +1 -0
- package/dist/cloud/api/cli-pty-runner.js +119 -0
- package/dist/cloud/api/cli-pty-runner.js.map +1 -0
- package/dist/cloud/api/generic-webhooks.d.ts +8 -0
- package/dist/cloud/api/generic-webhooks.d.ts.map +1 -0
- package/dist/cloud/api/generic-webhooks.js +129 -0
- package/dist/cloud/api/generic-webhooks.js.map +1 -0
- package/dist/cloud/api/git.d.ts +8 -0
- package/dist/cloud/api/git.d.ts.map +1 -0
- package/dist/cloud/api/git.js +131 -0
- package/dist/cloud/api/git.js.map +1 -0
- package/dist/cloud/api/github-app.d.ts +11 -0
- package/dist/cloud/api/github-app.d.ts.map +1 -0
- package/dist/cloud/api/github-app.js +189 -0
- package/dist/cloud/api/github-app.js.map +1 -0
- package/dist/cloud/api/middleware/planLimits.d.ts +7 -0
- package/dist/cloud/api/middleware/planLimits.d.ts.map +1 -1
- package/dist/cloud/api/middleware/planLimits.js +39 -1
- package/dist/cloud/api/middleware/planLimits.js.map +1 -1
- package/dist/cloud/api/monitoring.d.ts +11 -0
- package/dist/cloud/api/monitoring.d.ts.map +1 -0
- package/dist/cloud/api/monitoring.js +578 -0
- package/dist/cloud/api/monitoring.js.map +1 -0
- package/dist/cloud/api/nango-auth.d.ts +9 -0
- package/dist/cloud/api/nango-auth.d.ts.map +1 -0
- package/dist/cloud/api/nango-auth.js +377 -0
- package/dist/cloud/api/nango-auth.js.map +1 -0
- package/dist/cloud/api/onboarding.d.ts +8 -1
- package/dist/cloud/api/onboarding.d.ts.map +1 -1
- package/dist/cloud/api/onboarding.js +300 -119
- package/dist/cloud/api/onboarding.js.map +1 -1
- package/dist/cloud/api/policy.d.ts +8 -0
- package/dist/cloud/api/policy.d.ts.map +1 -0
- package/dist/cloud/api/policy.js +229 -0
- package/dist/cloud/api/policy.js.map +1 -0
- package/dist/cloud/api/providers.js +114 -42
- package/dist/cloud/api/providers.js.map +1 -1
- package/dist/cloud/api/test-helpers.d.ts +10 -0
- package/dist/cloud/api/test-helpers.d.ts.map +1 -0
- package/dist/cloud/api/test-helpers.js +575 -0
- package/dist/cloud/api/test-helpers.js.map +1 -0
- package/dist/cloud/api/webhooks.d.ts +7 -0
- package/dist/cloud/api/webhooks.d.ts.map +1 -0
- package/dist/cloud/api/webhooks.js +496 -0
- package/dist/cloud/api/webhooks.js.map +1 -0
- package/dist/cloud/api/workspaces.js +225 -8
- package/dist/cloud/api/workspaces.js.map +1 -1
- package/dist/cloud/billing/plans.d.ts.map +1 -1
- package/dist/cloud/billing/plans.js +13 -0
- package/dist/cloud/billing/plans.js.map +1 -1
- package/dist/cloud/billing/types.d.ts +9 -3
- package/dist/cloud/billing/types.d.ts.map +1 -1
- package/dist/cloud/config.d.ts +9 -2
- package/dist/cloud/config.d.ts.map +1 -1
- package/dist/cloud/config.js +13 -4
- package/dist/cloud/config.js.map +1 -1
- package/dist/cloud/db/drizzle.d.ts +84 -1
- package/dist/cloud/db/drizzle.d.ts.map +1 -1
- package/dist/cloud/db/drizzle.js +470 -0
- package/dist/cloud/db/drizzle.js.map +1 -1
- package/dist/cloud/db/index.d.ts +9 -4
- package/dist/cloud/db/index.d.ts.map +1 -1
- package/dist/cloud/db/index.js +11 -3
- package/dist/cloud/db/index.js.map +1 -1
- package/dist/cloud/db/schema.d.ts +3283 -556
- package/dist/cloud/db/schema.d.ts.map +1 -1
- package/dist/cloud/db/schema.js +314 -1
- package/dist/cloud/db/schema.js.map +1 -1
- package/dist/cloud/index.d.ts +1 -0
- package/dist/cloud/index.d.ts.map +1 -1
- package/dist/cloud/index.js +2 -0
- package/dist/cloud/index.js.map +1 -1
- package/dist/cloud/provisioner/index.d.ts +24 -0
- package/dist/cloud/provisioner/index.d.ts.map +1 -1
- package/dist/cloud/provisioner/index.js +319 -18
- package/dist/cloud/provisioner/index.js.map +1 -1
- package/dist/cloud/server.d.ts +1 -0
- package/dist/cloud/server.d.ts.map +1 -1
- package/dist/cloud/server.js +357 -13
- package/dist/cloud/server.js.map +1 -1
- package/dist/cloud/services/auto-scaler.d.ts +152 -0
- package/dist/cloud/services/auto-scaler.d.ts.map +1 -0
- package/dist/cloud/services/auto-scaler.js +439 -0
- package/dist/cloud/services/auto-scaler.js.map +1 -0
- package/dist/cloud/services/capacity-manager.d.ts +148 -0
- package/dist/cloud/services/capacity-manager.d.ts.map +1 -0
- package/dist/cloud/services/capacity-manager.js +449 -0
- package/dist/cloud/services/capacity-manager.js.map +1 -0
- package/dist/cloud/services/ci-agent-spawner.d.ts +49 -0
- package/dist/cloud/services/ci-agent-spawner.d.ts.map +1 -0
- package/dist/cloud/services/ci-agent-spawner.js +373 -0
- package/dist/cloud/services/ci-agent-spawner.js.map +1 -0
- package/dist/cloud/services/index.d.ts +12 -0
- package/dist/cloud/services/index.d.ts.map +1 -0
- package/dist/cloud/services/index.js +15 -0
- package/dist/cloud/services/index.js.map +1 -0
- package/dist/cloud/services/mention-handler.d.ts +65 -0
- package/dist/cloud/services/mention-handler.d.ts.map +1 -0
- package/dist/cloud/services/mention-handler.js +405 -0
- package/dist/cloud/services/mention-handler.js.map +1 -0
- package/dist/cloud/services/nango.d.ts +126 -0
- package/dist/cloud/services/nango.d.ts.map +1 -0
- package/dist/cloud/services/nango.js +191 -0
- package/dist/cloud/services/nango.js.map +1 -0
- package/dist/cloud/services/persistence.d.ts +131 -0
- package/dist/cloud/services/persistence.d.ts.map +1 -0
- package/dist/cloud/services/persistence.js +200 -0
- package/dist/cloud/services/persistence.js.map +1 -0
- package/dist/cloud/services/planLimits.d.ts +15 -0
- package/dist/cloud/services/planLimits.d.ts.map +1 -1
- package/dist/cloud/services/planLimits.js +28 -0
- package/dist/cloud/services/planLimits.js.map +1 -1
- package/dist/cloud/services/scaling-orchestrator.d.ts +159 -0
- package/dist/cloud/services/scaling-orchestrator.d.ts.map +1 -0
- package/dist/cloud/services/scaling-orchestrator.js +502 -0
- package/dist/cloud/services/scaling-orchestrator.js.map +1 -0
- package/dist/cloud/services/scaling-policy.d.ts +121 -0
- package/dist/cloud/services/scaling-policy.d.ts.map +1 -0
- package/dist/cloud/services/scaling-policy.js +415 -0
- package/dist/cloud/services/scaling-policy.js.map +1 -0
- package/dist/cloud/vault/index.js +1 -1
- package/dist/cloud/vault/index.js.map +1 -1
- package/dist/cloud/webhooks/index.d.ts +24 -0
- package/dist/cloud/webhooks/index.d.ts.map +1 -0
- package/dist/cloud/webhooks/index.js +29 -0
- package/dist/cloud/webhooks/index.js.map +1 -0
- package/dist/cloud/webhooks/parsers/github.d.ts +8 -0
- package/dist/cloud/webhooks/parsers/github.d.ts.map +1 -0
- package/dist/cloud/webhooks/parsers/github.js +234 -0
- package/dist/cloud/webhooks/parsers/github.js.map +1 -0
- package/dist/cloud/webhooks/parsers/index.d.ts +23 -0
- package/dist/cloud/webhooks/parsers/index.d.ts.map +1 -0
- package/dist/cloud/webhooks/parsers/index.js +30 -0
- package/dist/cloud/webhooks/parsers/index.js.map +1 -0
- package/dist/cloud/webhooks/parsers/linear.d.ts +9 -0
- package/dist/cloud/webhooks/parsers/linear.d.ts.map +1 -0
- package/dist/cloud/webhooks/parsers/linear.js +258 -0
- package/dist/cloud/webhooks/parsers/linear.js.map +1 -0
- package/dist/cloud/webhooks/parsers/slack.d.ts +9 -0
- package/dist/cloud/webhooks/parsers/slack.d.ts.map +1 -0
- package/dist/cloud/webhooks/parsers/slack.js +214 -0
- package/dist/cloud/webhooks/parsers/slack.js.map +1 -0
- package/dist/cloud/webhooks/responders/github.d.ts +8 -0
- package/dist/cloud/webhooks/responders/github.d.ts.map +1 -0
- package/dist/cloud/webhooks/responders/github.js +73 -0
- package/dist/cloud/webhooks/responders/github.js.map +1 -0
- package/dist/cloud/webhooks/responders/index.d.ts +23 -0
- package/dist/cloud/webhooks/responders/index.d.ts.map +1 -0
- package/dist/cloud/webhooks/responders/index.js +30 -0
- package/dist/cloud/webhooks/responders/index.js.map +1 -0
- package/dist/cloud/webhooks/responders/linear.d.ts +9 -0
- package/dist/cloud/webhooks/responders/linear.d.ts.map +1 -0
- package/dist/cloud/webhooks/responders/linear.js +149 -0
- package/dist/cloud/webhooks/responders/linear.js.map +1 -0
- package/dist/cloud/webhooks/responders/slack.d.ts +20 -0
- package/dist/cloud/webhooks/responders/slack.d.ts.map +1 -0
- package/dist/cloud/webhooks/responders/slack.js +178 -0
- package/dist/cloud/webhooks/responders/slack.js.map +1 -0
- package/dist/cloud/webhooks/router.d.ts +25 -0
- package/dist/cloud/webhooks/router.d.ts.map +1 -0
- package/dist/cloud/webhooks/router.js +504 -0
- package/dist/cloud/webhooks/router.js.map +1 -0
- package/dist/cloud/webhooks/rules-engine.d.ts +24 -0
- package/dist/cloud/webhooks/rules-engine.d.ts.map +1 -0
- package/dist/cloud/webhooks/rules-engine.js +287 -0
- package/dist/cloud/webhooks/rules-engine.js.map +1 -0
- package/dist/cloud/webhooks/types.d.ts +186 -0
- package/dist/cloud/webhooks/types.d.ts.map +1 -0
- package/dist/cloud/webhooks/types.js +8 -0
- package/dist/cloud/webhooks/types.js.map +1 -0
- package/dist/continuity/formatter.d.ts +51 -0
- package/dist/continuity/formatter.d.ts.map +1 -0
- package/dist/continuity/formatter.js +313 -0
- package/dist/continuity/formatter.js.map +1 -0
- package/dist/continuity/handoff-store.d.ts +67 -0
- package/dist/continuity/handoff-store.d.ts.map +1 -0
- package/dist/continuity/handoff-store.js +472 -0
- package/dist/continuity/handoff-store.js.map +1 -0
- package/dist/continuity/index.d.ts +45 -0
- package/dist/continuity/index.d.ts.map +1 -0
- package/dist/continuity/index.js +48 -0
- package/dist/continuity/index.js.map +1 -0
- package/dist/continuity/ledger-store.d.ts +110 -0
- package/dist/continuity/ledger-store.d.ts.map +1 -0
- package/dist/continuity/ledger-store.js +500 -0
- package/dist/continuity/ledger-store.js.map +1 -0
- package/dist/continuity/manager.d.ts +178 -0
- package/dist/continuity/manager.d.ts.map +1 -0
- package/dist/continuity/manager.js +562 -0
- package/dist/continuity/manager.js.map +1 -0
- package/dist/continuity/parser.d.ts +76 -0
- package/dist/continuity/parser.d.ts.map +1 -0
- package/dist/continuity/parser.js +579 -0
- package/dist/continuity/parser.js.map +1 -0
- package/dist/continuity/types.d.ts +180 -0
- package/dist/continuity/types.d.ts.map +1 -0
- package/dist/continuity/types.js +9 -0
- package/dist/continuity/types.js.map +1 -0
- package/dist/daemon/agent-manager.d.ts +27 -0
- package/dist/daemon/agent-manager.d.ts.map +1 -1
- package/dist/daemon/agent-manager.js +107 -6
- package/dist/daemon/agent-manager.js.map +1 -1
- package/dist/daemon/agent-registry.d.ts +32 -0
- package/dist/daemon/agent-registry.d.ts.map +1 -1
- package/dist/daemon/agent-registry.js +42 -2
- package/dist/daemon/agent-registry.js.map +1 -1
- package/dist/daemon/api.d.ts +12 -0
- package/dist/daemon/api.d.ts.map +1 -1
- package/dist/daemon/api.js +131 -2
- package/dist/daemon/api.js.map +1 -1
- package/dist/daemon/cli-auth.d.ts +67 -0
- package/dist/daemon/cli-auth.d.ts.map +1 -0
- package/dist/daemon/cli-auth.js +537 -0
- package/dist/daemon/cli-auth.js.map +1 -0
- package/dist/daemon/cloud-sync.d.ts.map +1 -1
- package/dist/daemon/cloud-sync.js +9 -7
- package/dist/daemon/cloud-sync.js.map +1 -1
- package/dist/daemon/orchestrator.d.ts.map +1 -1
- package/dist/daemon/orchestrator.js +30 -0
- package/dist/daemon/orchestrator.js.map +1 -1
- package/dist/daemon/router.d.ts +5 -0
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +78 -26
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/server.d.ts +5 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +9 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/services/browser-testing.d.ts +88 -0
- package/dist/daemon/services/browser-testing.d.ts.map +1 -0
- package/dist/daemon/services/browser-testing.js +244 -0
- package/dist/daemon/services/browser-testing.js.map +1 -0
- package/dist/daemon/services/container-spawner.d.ts +135 -0
- package/dist/daemon/services/container-spawner.d.ts.map +1 -0
- package/dist/daemon/services/container-spawner.js +313 -0
- package/dist/daemon/services/container-spawner.js.map +1 -0
- package/dist/daemon/types.d.ts +5 -1
- package/dist/daemon/types.d.ts.map +1 -1
- package/dist/dashboard/out/404.html +1 -1
- package/dist/dashboard/out/_next/static/chunks/116-2502180def231162.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/724-73c1ee5f60abe860.js +9 -0
- package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-dc2e3a1a22478efc.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/history/{page-b6edd4dde8d08194.js → page-56a8b4616a90dc43.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/app/login/page-3eac37ea6f5dd153.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1081dd190a331a91.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/page-daf87e86f783f980.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/signup/page-fee4ed1709070bcd.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
- package/dist/dashboard/out/_next/static/chunks/{main-c2f423b9c9f4591b.js → main-97850e03d723ea8c.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
- package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +1 -0
- package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +1 -0
- package/dist/dashboard/out/app.html +1 -14
- package/dist/dashboard/out/app.txt +2 -2
- package/dist/dashboard/out/connect-repos.html +1 -0
- package/dist/dashboard/out/connect-repos.txt +7 -0
- package/dist/dashboard/out/history.html +1 -1
- package/dist/dashboard/out/history.txt +2 -2
- package/dist/dashboard/out/index.html +1 -1
- package/dist/dashboard/out/index.txt +2 -2
- package/dist/dashboard/out/login.html +6 -0
- package/dist/dashboard/out/login.txt +7 -0
- package/dist/dashboard/out/metrics.html +1 -1
- package/dist/dashboard/out/metrics.txt +2 -2
- package/dist/dashboard/out/pricing.html +2 -2
- package/dist/dashboard/out/pricing.txt +2 -2
- package/dist/dashboard/out/providers.html +1 -0
- package/dist/dashboard/out/providers.txt +7 -0
- package/dist/dashboard/out/signup.html +6 -0
- package/dist/dashboard/out/signup.txt +7 -0
- package/dist/dashboard-server/server.d.ts.map +1 -1
- package/dist/dashboard-server/server.js +1308 -8
- package/dist/dashboard-server/server.js.map +1 -1
- package/dist/hooks/emitter.d.ts +40 -0
- package/dist/hooks/emitter.d.ts.map +1 -0
- package/dist/hooks/emitter.js +63 -0
- package/dist/hooks/emitter.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/registry.d.ts +173 -0
- package/dist/hooks/registry.d.ts.map +1 -0
- package/dist/hooks/registry.js +476 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/trajectory-hooks.d.ts +52 -0
- package/dist/hooks/trajectory-hooks.d.ts.map +1 -0
- package/dist/hooks/trajectory-hooks.js +183 -0
- package/dist/hooks/trajectory-hooks.js.map +1 -0
- package/dist/hooks/types.d.ts +141 -0
- package/dist/hooks/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/adapters/index.d.ts +8 -0
- package/dist/memory/adapters/index.d.ts.map +1 -0
- package/dist/memory/adapters/index.js +8 -0
- package/dist/memory/adapters/index.js.map +1 -0
- package/dist/memory/adapters/inmemory.d.ts +59 -0
- package/dist/memory/adapters/inmemory.d.ts.map +1 -0
- package/dist/memory/adapters/inmemory.js +195 -0
- package/dist/memory/adapters/inmemory.js.map +1 -0
- package/dist/memory/adapters/supermemory.d.ts +71 -0
- package/dist/memory/adapters/supermemory.d.ts.map +1 -0
- package/dist/memory/adapters/supermemory.js +338 -0
- package/dist/memory/adapters/supermemory.js.map +1 -0
- package/dist/memory/factory.d.ts +48 -0
- package/dist/memory/factory.d.ts.map +1 -0
- package/dist/memory/factory.js +143 -0
- package/dist/memory/factory.js.map +1 -0
- package/dist/memory/index.d.ts +32 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +32 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memory-hooks.d.ts +60 -0
- package/dist/memory/memory-hooks.d.ts.map +1 -0
- package/dist/memory/memory-hooks.js +313 -0
- package/dist/memory/memory-hooks.js.map +1 -0
- package/dist/memory/service.d.ts +49 -0
- package/dist/memory/service.d.ts.map +1 -0
- package/dist/memory/service.js +146 -0
- package/dist/memory/service.js.map +1 -0
- package/dist/memory/types.d.ts +195 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +8 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/policy/agent-policy.d.ts +225 -0
- package/dist/policy/agent-policy.d.ts.map +1 -0
- package/dist/policy/agent-policy.js +665 -0
- package/dist/policy/agent-policy.js.map +1 -0
- package/dist/policy/cloud-policy-fetcher.d.ts +12 -0
- package/dist/policy/cloud-policy-fetcher.d.ts.map +1 -0
- package/dist/policy/cloud-policy-fetcher.js +64 -0
- package/dist/policy/cloud-policy-fetcher.js.map +1 -0
- package/dist/resiliency/crash-insights.d.ts +156 -0
- package/dist/resiliency/crash-insights.d.ts.map +1 -0
- package/dist/resiliency/crash-insights.js +492 -0
- package/dist/resiliency/crash-insights.js.map +1 -0
- package/dist/resiliency/gossip-health.d.ts +137 -0
- package/dist/resiliency/gossip-health.d.ts.map +1 -0
- package/dist/resiliency/gossip-health.js +241 -0
- package/dist/resiliency/gossip-health.js.map +1 -0
- package/dist/resiliency/index.d.ts +5 -0
- package/dist/resiliency/index.d.ts.map +1 -1
- package/dist/resiliency/index.js +5 -0
- package/dist/resiliency/index.js.map +1 -1
- package/dist/resiliency/leader-watchdog.d.ts +109 -0
- package/dist/resiliency/leader-watchdog.d.ts.map +1 -0
- package/dist/resiliency/leader-watchdog.js +189 -0
- package/dist/resiliency/leader-watchdog.js.map +1 -0
- package/dist/resiliency/memory-monitor.d.ts +172 -0
- package/dist/resiliency/memory-monitor.d.ts.map +1 -0
- package/dist/resiliency/memory-monitor.js +593 -0
- package/dist/resiliency/memory-monitor.js.map +1 -0
- package/dist/resiliency/stateless-lead.d.ts +149 -0
- package/dist/resiliency/stateless-lead.d.ts.map +1 -0
- package/dist/resiliency/stateless-lead.js +308 -0
- package/dist/resiliency/stateless-lead.js.map +1 -0
- package/dist/resiliency/supervisor.d.ts +38 -0
- package/dist/resiliency/supervisor.d.ts.map +1 -1
- package/dist/resiliency/supervisor.js +122 -0
- package/dist/resiliency/supervisor.js.map +1 -1
- package/dist/shared/cli-auth-config.d.ts +91 -0
- package/dist/shared/cli-auth-config.d.ts.map +1 -0
- package/dist/shared/cli-auth-config.js +264 -0
- package/dist/shared/cli-auth-config.js.map +1 -0
- package/dist/storage/adapter.d.ts +1 -1
- package/dist/storage/adapter.d.ts.map +1 -1
- package/dist/trajectory/config.d.ts +84 -0
- package/dist/trajectory/config.d.ts.map +1 -0
- package/dist/trajectory/config.js +163 -0
- package/dist/trajectory/config.js.map +1 -0
- package/dist/trajectory/index.d.ts +8 -0
- package/dist/trajectory/index.d.ts.map +1 -0
- package/dist/trajectory/index.js +8 -0
- package/dist/trajectory/index.js.map +1 -0
- package/dist/trajectory/integration.d.ts +292 -0
- package/dist/trajectory/integration.d.ts.map +1 -0
- package/dist/trajectory/integration.js +834 -0
- package/dist/trajectory/integration.js.map +1 -0
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/project-namespace.d.ts +24 -0
- package/dist/utils/project-namespace.d.ts.map +1 -1
- package/dist/utils/project-namespace.js +84 -0
- package/dist/utils/project-namespace.js.map +1 -1
- package/dist/wrapper/parser.d.ts +10 -0
- package/dist/wrapper/parser.d.ts.map +1 -1
- package/dist/wrapper/parser.js +100 -33
- package/dist/wrapper/parser.js.map +1 -1
- package/dist/wrapper/pty-wrapper.d.ts +197 -16
- package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
- package/dist/wrapper/pty-wrapper.js +943 -106
- package/dist/wrapper/pty-wrapper.js.map +1 -1
- package/dist/wrapper/shared.d.ts +165 -0
- package/dist/wrapper/shared.d.ts.map +1 -0
- package/dist/wrapper/shared.js +270 -0
- package/dist/wrapper/shared.js.map +1 -0
- package/dist/wrapper/tmux-wrapper.d.ts +73 -11
- package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
- package/dist/wrapper/tmux-wrapper.js +541 -120
- package/dist/wrapper/tmux-wrapper.js.map +1 -1
- package/docs/CLOUD-ARCHITECTURE.md +152 -0
- package/docs/HOOKS_API.md +394 -0
- package/docs/WRAPPER_EVENTS.md +358 -0
- package/docs/agent-policy-snippet.md +40 -0
- package/docs/agent-relay-protocol.md +238 -0
- package/docs/agent-relay-snippet.md +53 -47
- package/docs/archive/EXECUTIVE_SUMMARY.md +358 -0
- package/docs/archive/ROADMAP.md +329 -0
- package/docs/competitive/GASTOWN.md +451 -0
- package/docs/{COMPETITIVE_ANALYSIS.md → competitive/OVERVIEW.md} +1 -0
- package/docs/competitive/README.md +34 -0
- package/docs/competitive/TMUX_ORCHESTRATOR.md +605 -0
- package/docs/dashboard.png +0 -0
- package/docs/design/ci-failure-webhooks.md +812 -0
- package/docs/design/comprehensive-integrations.md +238 -0
- package/docs/design/e2b-sandbox-integration.md +504 -0
- package/docs/design/github-app-permissions.md +264 -0
- package/docs/local-testing.md +428 -0
- package/docs/proposals/continuous-claude-integration.md +622 -0
- package/docs/proposals/custom-commands.md +368 -0
- package/docs/tasks/global-skills-system.tasks.md +230 -0
- package/docs/tasks/webhook-integrations.tasks.md +184 -0
- package/docs/tasks/workspace-capabilities.tasks.md +121 -0
- package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +366 -0
- package/package.json +16 -7
- package/scripts/cloud-setup.sh +96 -0
- package/scripts/manual-qa.sh +293 -0
- package/scripts/postinstall.js +60 -0
- package/scripts/run-cloud-qa.sh +220 -0
- package/scripts/test-cli-auth/Dockerfile +44 -0
- package/scripts/test-cli-auth/Dockerfile.real +79 -0
- package/scripts/test-cli-auth/README.md +286 -0
- package/scripts/test-cli-auth/ci-test-real-clis.ts +251 -0
- package/scripts/test-cli-auth/ci-test-runner.ts +263 -0
- package/scripts/test-cli-auth/mock-cli.sh +147 -0
- package/scripts/test-cli-auth/package.json +14 -0
- package/scripts/test-cli-auth/test-oauth-flow.ts +220 -0
- package/scripts/test-pty-input-auto.js +222 -0
- package/scripts/test-pty-input.js +150 -0
- package/dist/dashboard/out/_next/static/chunks/693-7b3301d8f6bc5014.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/713-f78477eb185f1f4d.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/766-e53e1cfe39b0b5b5.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/900-037c64bfd797fb2a.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/app/page-e3d9e1f4466b9bae.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/metrics/page-e68825a81db67ba1.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/page-cc108bf68c8a657f.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/webpack-a5acc2831d094776.js +0 -1
- package/dist/dashboard/out/_next/static/css/79b80143647a07d7.css +0 -1
- package/dist/dashboard/out/_next/static/css/8cf277370ad48cfe.css +0 -1
- /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → H5aWG0udPB4iOUIl_gytz}/_buildManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → H5aWG0udPB4iOUIl_gytz}/_ssgManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{117-b2cd8d6485aacf2b.js → 117-b100311aff8d5c61.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{648-8f3f26864ce515e5.js → 648-a13d3c2b1be45466.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-0b990dbb71d72a98.js → page-a4973f3e3c82fb67.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/app/pricing/{page-d80e03a5297f95b6.js → page-4d72d5a5d8a9b618.js} +0 -0
- /package/docs/{CHANGELOG.md → archive/CHANGELOG.md} +0 -0
- /package/docs/{CLI-SIMPLIFICATION-COMPLETE.md → archive/CLI-SIMPLIFICATION-COMPLETE.md} +0 -0
- /package/docs/{DESIGN_BRIDGE_STAFFING.md → archive/DESIGN_BRIDGE_STAFFING.md} +0 -0
- /package/docs/{DESIGN_V2.md → archive/DESIGN_V2.md} +0 -0
- /package/docs/{MONETIZATION.md → archive/MONETIZATION.md} +0 -0
- /package/docs/{PROPOSAL-trajectories.md → archive/PROPOSAL-trajectories.md} +0 -0
- /package/docs/{SCALING_ANALYSIS.md → archive/SCALING_ANALYSIS.md} +0 -0
- /package/docs/{TESTING_PRESENCE_FEATURES.md → archive/TESTING_PRESENCE_FEATURES.md} +0 -0
- /package/docs/{TMUX_IMPLEMENTATION_NOTES.md → archive/TMUX_IMPLEMENTATION_NOTES.md} +0 -0
- /package/docs/{TMUX_IMPROVEMENTS.md → archive/TMUX_IMPROVEMENTS.md} +0 -0
- /package/docs/{dashboard-v2-plan.md → archive/dashboard-v2-plan.md} +0 -0
- /package/docs/{removable-code-analysis.md → archive/removable-code-analysis.md} +0 -0
- /package/docs/{competitive-analysis-mcp-agent-mail.md → competitive/MCP_AGENT_MAIL.md} +0 -0
package/dist/cli/index.js
CHANGED
|
@@ -55,6 +55,7 @@ program
|
|
|
55
55
|
.option('-n, --name <name>', 'Agent name (auto-generated if not set)')
|
|
56
56
|
.option('-q, --quiet', 'Disable debug output', false)
|
|
57
57
|
.option('--prefix <pattern>', 'Relay prefix pattern (default: ->relay:)')
|
|
58
|
+
.option('--dashboard-port <port>', 'Dashboard port for spawn/release API (auto-detected if not set)')
|
|
58
59
|
.option('--shadow <name>', 'Spawn a shadow agent with this name that monitors the primary')
|
|
59
60
|
.option('--shadow-role <role>', 'Shadow role: reviewer, auditor, or triggers (comma-separated: SESSION_END,CODE_WRITTEN,REVIEW_REQUEST,EXPLICIT_ASK,ALL_MESSAGES)')
|
|
60
61
|
.argument('[command...]', 'Command to wrap (e.g., claude)')
|
|
@@ -85,8 +86,31 @@ program
|
|
|
85
86
|
}
|
|
86
87
|
const { TmuxWrapper } = await import('../wrapper/tmux-wrapper.js');
|
|
87
88
|
const { AgentSpawner } = await import('../bridge/spawner.js');
|
|
88
|
-
//
|
|
89
|
-
|
|
89
|
+
// Determine dashboard port for spawn/release API
|
|
90
|
+
// Priority: CLI flag > env var > auto-detect default port
|
|
91
|
+
let dashboardPort;
|
|
92
|
+
if (options.dashboardPort) {
|
|
93
|
+
dashboardPort = parseInt(options.dashboardPort, 10);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
// Try to detect if dashboard is running at default port
|
|
97
|
+
const defaultPort = parseInt(DEFAULT_DASHBOARD_PORT, 10);
|
|
98
|
+
try {
|
|
99
|
+
const response = await fetch(`http://localhost:${defaultPort}/api/status`, {
|
|
100
|
+
method: 'GET',
|
|
101
|
+
signal: AbortSignal.timeout(500), // Quick timeout for detection
|
|
102
|
+
});
|
|
103
|
+
if (response.ok) {
|
|
104
|
+
dashboardPort = defaultPort;
|
|
105
|
+
console.error(`Dashboard detected: http://localhost:${dashboardPort}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Dashboard not running - spawn/release will use fallback callbacks
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Create spawner as fallback for direct spawn (if dashboard API not available)
|
|
113
|
+
const spawner = new AgentSpawner(paths.projectRoot, undefined, dashboardPort);
|
|
90
114
|
const wrapper = new TmuxWrapper({
|
|
91
115
|
name: agentName,
|
|
92
116
|
command: mainCommand,
|
|
@@ -96,7 +120,9 @@ program
|
|
|
96
120
|
relayPrefix: options.prefix,
|
|
97
121
|
useInbox: true,
|
|
98
122
|
inboxDir: paths.dataDir, // Use the project-specific data directory for the inbox
|
|
99
|
-
//
|
|
123
|
+
// Use dashboard API for spawn/release when available (preferred - works from any context)
|
|
124
|
+
dashboardPort,
|
|
125
|
+
// Wire up spawn/release callbacks as fallback (if no dashboardPort)
|
|
100
126
|
onSpawn: async (workerName, workerCli, task) => {
|
|
101
127
|
console.error(`[${agentName}] Spawning ${workerName} (${workerCli})...`);
|
|
102
128
|
const result = await spawner.spawn({
|
|
@@ -125,7 +151,7 @@ program
|
|
|
125
151
|
});
|
|
126
152
|
process.on('SIGINT', async () => {
|
|
127
153
|
await spawner.releaseAll();
|
|
128
|
-
wrapper.stop();
|
|
154
|
+
await wrapper.stop();
|
|
129
155
|
process.exit(0);
|
|
130
156
|
});
|
|
131
157
|
await wrapper.start();
|
|
@@ -1650,6 +1676,57 @@ cloudCommand
|
|
|
1650
1676
|
process.exit(1);
|
|
1651
1677
|
}
|
|
1652
1678
|
});
|
|
1679
|
+
// ============================================================================
|
|
1680
|
+
// TRAJECTORY COMMANDS (trail proxy)
|
|
1681
|
+
// ============================================================================
|
|
1682
|
+
// trail - Proxy to trail CLI for trajectory tracking
|
|
1683
|
+
program
|
|
1684
|
+
.command('trail')
|
|
1685
|
+
.description('Trajectory tracking commands (proxies to trail CLI)')
|
|
1686
|
+
.argument('[args...]', 'Arguments to pass to trail CLI')
|
|
1687
|
+
.allowUnknownOption()
|
|
1688
|
+
.action(async (args) => {
|
|
1689
|
+
const { spawn } = await import('node:child_process');
|
|
1690
|
+
const { getProjectPaths } = await import('../utils/project-namespace.js');
|
|
1691
|
+
const paths = getProjectPaths();
|
|
1692
|
+
// Check if trail is available
|
|
1693
|
+
const trailCheck = spawn('which', ['trail'], { stdio: 'pipe' });
|
|
1694
|
+
const trailExists = await new Promise((resolve) => {
|
|
1695
|
+
trailCheck.on('close', (code) => resolve(code === 0));
|
|
1696
|
+
trailCheck.on('error', () => resolve(false));
|
|
1697
|
+
});
|
|
1698
|
+
if (!trailExists) {
|
|
1699
|
+
console.error('trail CLI not found. Install with: npm install -g agent-trajectories');
|
|
1700
|
+
console.log('');
|
|
1701
|
+
console.log('The trail CLI provides trajectory tracking for agent work:');
|
|
1702
|
+
console.log(' trail start "<task>" Start tracking a new trajectory');
|
|
1703
|
+
console.log(' trail status Show current trajectory status');
|
|
1704
|
+
console.log(' trail phase <phase> Transition to PDERO phase');
|
|
1705
|
+
console.log(' trail decision "<choice>" Record a decision');
|
|
1706
|
+
console.log(' trail complete Complete the trajectory');
|
|
1707
|
+
console.log(' trail list List all trajectories');
|
|
1708
|
+
console.log('');
|
|
1709
|
+
console.log('PDERO phases: plan, design, execute, review, observe');
|
|
1710
|
+
process.exit(1);
|
|
1711
|
+
}
|
|
1712
|
+
// Spawn trail with the provided arguments
|
|
1713
|
+
const trailProc = spawn('trail', args, {
|
|
1714
|
+
cwd: paths.projectRoot,
|
|
1715
|
+
stdio: 'inherit',
|
|
1716
|
+
env: {
|
|
1717
|
+
...process.env,
|
|
1718
|
+
TRAJECTORIES_PROJECT: paths.projectId,
|
|
1719
|
+
TRAJECTORIES_DATA_DIR: paths.dataDir,
|
|
1720
|
+
},
|
|
1721
|
+
});
|
|
1722
|
+
trailProc.on('close', (code) => {
|
|
1723
|
+
process.exit(code ?? 0);
|
|
1724
|
+
});
|
|
1725
|
+
trailProc.on('error', (err) => {
|
|
1726
|
+
console.error(`Failed to run trail: ${err.message}`);
|
|
1727
|
+
process.exit(1);
|
|
1728
|
+
});
|
|
1729
|
+
});
|
|
1653
1730
|
cloudCommand
|
|
1654
1731
|
.command('agents')
|
|
1655
1732
|
.description('List agents across all linked machines')
|
|
@@ -1795,7 +1872,7 @@ cloudCommand
|
|
|
1795
1872
|
.command('daemons')
|
|
1796
1873
|
.description('List all linked daemon instances')
|
|
1797
1874
|
.option('--json', 'Output as JSON')
|
|
1798
|
-
.action(async (
|
|
1875
|
+
.action(async (_options) => {
|
|
1799
1876
|
const os = await import('node:os');
|
|
1800
1877
|
const dataDir = process.env.AGENT_RELAY_DATA_DIR ||
|
|
1801
1878
|
path.join(os.homedir(), '.local', 'share', 'agent-relay');
|
|
@@ -1824,5 +1901,324 @@ cloudCommand
|
|
|
1824
1901
|
process.exit(1);
|
|
1825
1902
|
}
|
|
1826
1903
|
});
|
|
1904
|
+
// ============================================================================
|
|
1905
|
+
// Monitoring commands (metrics, health, profiler)
|
|
1906
|
+
// ============================================================================
|
|
1907
|
+
// metrics - Show agent memory metrics
|
|
1908
|
+
program
|
|
1909
|
+
.command('metrics')
|
|
1910
|
+
.description('Show agent memory metrics and resource usage')
|
|
1911
|
+
.option('--agent <name>', 'Show metrics for specific agent')
|
|
1912
|
+
.option('--port <port>', 'Dashboard port', DEFAULT_DASHBOARD_PORT)
|
|
1913
|
+
.option('--json', 'Output as JSON')
|
|
1914
|
+
.option('--watch', 'Continuously update metrics')
|
|
1915
|
+
.option('--interval <ms>', 'Update interval for watch mode', '5000')
|
|
1916
|
+
.action(async (options) => {
|
|
1917
|
+
const port = options.port || DEFAULT_DASHBOARD_PORT;
|
|
1918
|
+
const fetchMetrics = async () => {
|
|
1919
|
+
try {
|
|
1920
|
+
const response = await fetch(`http://localhost:${port}/api/metrics/agents`);
|
|
1921
|
+
if (!response.ok) {
|
|
1922
|
+
throw new Error(`HTTP ${response.status}`);
|
|
1923
|
+
}
|
|
1924
|
+
return await response.json();
|
|
1925
|
+
}
|
|
1926
|
+
catch (err) {
|
|
1927
|
+
if (err.code === 'ECONNREFUSED') {
|
|
1928
|
+
console.error(`Cannot connect to dashboard at port ${port}. Is the daemon running?`);
|
|
1929
|
+
console.log(`Run 'agent-relay up' to start the daemon.`);
|
|
1930
|
+
}
|
|
1931
|
+
else {
|
|
1932
|
+
console.error(`Failed to fetch metrics: ${err.message}`);
|
|
1933
|
+
}
|
|
1934
|
+
process.exit(1);
|
|
1935
|
+
}
|
|
1936
|
+
};
|
|
1937
|
+
const formatBytes = (bytes) => {
|
|
1938
|
+
if (bytes === 0)
|
|
1939
|
+
return '0 B';
|
|
1940
|
+
const k = 1024;
|
|
1941
|
+
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
1942
|
+
const i = Math.floor(Math.log(Math.abs(bytes)) / Math.log(k));
|
|
1943
|
+
return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`;
|
|
1944
|
+
};
|
|
1945
|
+
const formatUptime = (ms) => {
|
|
1946
|
+
if (ms < 60000)
|
|
1947
|
+
return `${Math.floor(ms / 1000)}s`;
|
|
1948
|
+
if (ms < 3600000)
|
|
1949
|
+
return `${Math.floor(ms / 60000)}m`;
|
|
1950
|
+
return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;
|
|
1951
|
+
};
|
|
1952
|
+
const displayMetrics = (data) => {
|
|
1953
|
+
let agents = data.agents;
|
|
1954
|
+
if (options.agent) {
|
|
1955
|
+
agents = agents.filter(a => a.name === options.agent);
|
|
1956
|
+
if (agents.length === 0) {
|
|
1957
|
+
console.error(`Agent "${options.agent}" not found`);
|
|
1958
|
+
return;
|
|
1959
|
+
}
|
|
1960
|
+
}
|
|
1961
|
+
if (options.json) {
|
|
1962
|
+
console.log(JSON.stringify({ agents, system: data.system }, null, 2));
|
|
1963
|
+
return;
|
|
1964
|
+
}
|
|
1965
|
+
if (options.watch) {
|
|
1966
|
+
// Clear screen for watch mode
|
|
1967
|
+
console.clear();
|
|
1968
|
+
console.log(`Agent Metrics (updating every ${options.interval}ms) [Ctrl+C to stop]`);
|
|
1969
|
+
console.log(`System: ${formatBytes(data.system.heapUsed)} heap / ${formatBytes(data.system.freeMemory)} free`);
|
|
1970
|
+
console.log('');
|
|
1971
|
+
}
|
|
1972
|
+
if (agents.length === 0) {
|
|
1973
|
+
console.log('No agents with memory metrics.');
|
|
1974
|
+
console.log('Ensure agents are running and memory monitoring is enabled.');
|
|
1975
|
+
return;
|
|
1976
|
+
}
|
|
1977
|
+
console.log('AGENT PID MEMORY CPU TREND ALERT UPTIME');
|
|
1978
|
+
console.log('─'.repeat(75));
|
|
1979
|
+
for (const agent of agents) {
|
|
1980
|
+
const name = agent.name.padEnd(15);
|
|
1981
|
+
const pid = (agent.pid?.toString() || '-').padEnd(8);
|
|
1982
|
+
const memory = formatBytes(agent.rssBytes || 0).padEnd(11);
|
|
1983
|
+
const cpu = ((agent.cpuPercent?.toFixed(1) || '0') + '%').padEnd(6);
|
|
1984
|
+
const trend = (agent.trend || 'unknown').padEnd(11);
|
|
1985
|
+
const alertColors = {
|
|
1986
|
+
normal: 'normal',
|
|
1987
|
+
warning: '\x1b[33mwarning\x1b[0m',
|
|
1988
|
+
critical: '\x1b[31mcritical\x1b[0m',
|
|
1989
|
+
oom_imminent: '\x1b[31;1mOOM!\x1b[0m',
|
|
1990
|
+
};
|
|
1991
|
+
const alert = (alertColors[agent.alertLevel || 'normal'] || agent.alertLevel || '-').padEnd(9);
|
|
1992
|
+
const uptime = formatUptime(agent.uptimeMs || 0);
|
|
1993
|
+
console.log(`${name} ${pid} ${memory} ${cpu} ${trend} ${alert} ${uptime}`);
|
|
1994
|
+
}
|
|
1995
|
+
if (!options.watch) {
|
|
1996
|
+
console.log('');
|
|
1997
|
+
console.log(`Total: ${agents.length} agent(s)`);
|
|
1998
|
+
if (agents.some(a => a.alertLevel && a.alertLevel !== 'normal')) {
|
|
1999
|
+
console.log('');
|
|
2000
|
+
console.log('⚠️ Some agents have elevated memory usage. Run `agent-relay health` for details.');
|
|
2001
|
+
}
|
|
2002
|
+
}
|
|
2003
|
+
};
|
|
2004
|
+
if (options.watch) {
|
|
2005
|
+
const interval = parseInt(options.interval || '5000', 10);
|
|
2006
|
+
const update = async () => {
|
|
2007
|
+
try {
|
|
2008
|
+
const data = await fetchMetrics();
|
|
2009
|
+
displayMetrics(data);
|
|
2010
|
+
}
|
|
2011
|
+
catch {
|
|
2012
|
+
// Error already logged in fetchMetrics
|
|
2013
|
+
}
|
|
2014
|
+
};
|
|
2015
|
+
process.on('SIGINT', () => {
|
|
2016
|
+
console.log('\nStopped watching metrics.');
|
|
2017
|
+
process.exit(0);
|
|
2018
|
+
});
|
|
2019
|
+
await update();
|
|
2020
|
+
setInterval(update, interval);
|
|
2021
|
+
}
|
|
2022
|
+
else {
|
|
2023
|
+
const data = await fetchMetrics();
|
|
2024
|
+
displayMetrics(data);
|
|
2025
|
+
}
|
|
2026
|
+
});
|
|
2027
|
+
// health - Show crash insights and system health
|
|
2028
|
+
program
|
|
2029
|
+
.command('health')
|
|
2030
|
+
.description('Show system health, crash insights, and recommendations')
|
|
2031
|
+
.option('--port <port>', 'Dashboard port', DEFAULT_DASHBOARD_PORT)
|
|
2032
|
+
.option('--json', 'Output as JSON')
|
|
2033
|
+
.option('--crashes', 'Show recent crash history')
|
|
2034
|
+
.option('--alerts', 'Show unacknowledged alerts')
|
|
2035
|
+
.action(async (options) => {
|
|
2036
|
+
const port = options.port || DEFAULT_DASHBOARD_PORT;
|
|
2037
|
+
try {
|
|
2038
|
+
const response = await fetch(`http://localhost:${port}/api/metrics/health`);
|
|
2039
|
+
if (!response.ok) {
|
|
2040
|
+
throw new Error(`HTTP ${response.status}`);
|
|
2041
|
+
}
|
|
2042
|
+
const data = await response.json();
|
|
2043
|
+
if (options.json) {
|
|
2044
|
+
console.log(JSON.stringify(data, null, 2));
|
|
2045
|
+
return;
|
|
2046
|
+
}
|
|
2047
|
+
// Health score with color
|
|
2048
|
+
const scoreColor = data.healthScore >= 80 ? '\x1b[32m' : // Green
|
|
2049
|
+
data.healthScore >= 50 ? '\x1b[33m' : // Yellow
|
|
2050
|
+
'\x1b[31m'; // Red
|
|
2051
|
+
const resetColor = '\x1b[0m';
|
|
2052
|
+
console.log('');
|
|
2053
|
+
console.log('═══════════════════════════════════════════════════════════════');
|
|
2054
|
+
console.log(` SYSTEM HEALTH: ${scoreColor}${data.healthScore}/100${resetColor}`);
|
|
2055
|
+
console.log('═══════════════════════════════════════════════════════════════');
|
|
2056
|
+
console.log('');
|
|
2057
|
+
console.log(` ${data.summary}`);
|
|
2058
|
+
console.log('');
|
|
2059
|
+
// Show stats
|
|
2060
|
+
console.log(` Agents: ${data.stats.agentCount}`);
|
|
2061
|
+
console.log(` Crashes (24h): ${data.stats.totalCrashes24h}`);
|
|
2062
|
+
console.log(` Alerts (24h): ${data.stats.totalAlerts24h}`);
|
|
2063
|
+
console.log('');
|
|
2064
|
+
// Show issues
|
|
2065
|
+
if (data.issues.length > 0) {
|
|
2066
|
+
console.log(' ISSUES:');
|
|
2067
|
+
for (const issue of data.issues) {
|
|
2068
|
+
const icon = issue.severity === 'critical' ? '🔴' :
|
|
2069
|
+
issue.severity === 'high' ? '🟠' :
|
|
2070
|
+
issue.severity === 'medium' ? '🟡' : '🔵';
|
|
2071
|
+
console.log(` ${icon} ${issue.message}`);
|
|
2072
|
+
}
|
|
2073
|
+
console.log('');
|
|
2074
|
+
}
|
|
2075
|
+
// Show recommendations
|
|
2076
|
+
if (data.recommendations.length > 0) {
|
|
2077
|
+
console.log(' RECOMMENDATIONS:');
|
|
2078
|
+
for (const rec of data.recommendations) {
|
|
2079
|
+
console.log(` → ${rec}`);
|
|
2080
|
+
}
|
|
2081
|
+
console.log('');
|
|
2082
|
+
}
|
|
2083
|
+
// Show crashes if requested
|
|
2084
|
+
if (options.crashes && data.crashes.length > 0) {
|
|
2085
|
+
console.log(' RECENT CRASHES:');
|
|
2086
|
+
console.log(' ─────────────────────────────────────────────────────────────');
|
|
2087
|
+
for (const crash of data.crashes.slice(0, 10)) {
|
|
2088
|
+
const time = new Date(crash.crashedAt).toLocaleString();
|
|
2089
|
+
console.log(` ${crash.agentName} - ${time}`);
|
|
2090
|
+
console.log(` Cause: ${crash.likelyCause} | ${crash.summary.slice(0, 60)}...`);
|
|
2091
|
+
}
|
|
2092
|
+
console.log('');
|
|
2093
|
+
}
|
|
2094
|
+
// Show alerts if requested
|
|
2095
|
+
if (options.alerts && data.alerts.length > 0) {
|
|
2096
|
+
console.log(' UNACKNOWLEDGED ALERTS:');
|
|
2097
|
+
console.log(' ─────────────────────────────────────────────────────────────');
|
|
2098
|
+
for (const alert of data.alerts.slice(0, 10)) {
|
|
2099
|
+
const _time = new Date(alert.createdAt).toLocaleString();
|
|
2100
|
+
const icon = alert.alertType === 'oom_imminent' ? '🔴' :
|
|
2101
|
+
alert.alertType === 'critical' ? '🟠' : '🟡';
|
|
2102
|
+
console.log(` ${icon} ${alert.agentName} - ${alert.alertType}`);
|
|
2103
|
+
console.log(` ${alert.message}`);
|
|
2104
|
+
}
|
|
2105
|
+
console.log('');
|
|
2106
|
+
}
|
|
2107
|
+
console.log('═══════════════════════════════════════════════════════════════');
|
|
2108
|
+
console.log('');
|
|
2109
|
+
if (!options.crashes && data.stats.totalCrashes24h > 0) {
|
|
2110
|
+
console.log(' Tip: Run `agent-relay health --crashes` to see crash details');
|
|
2111
|
+
}
|
|
2112
|
+
if (!options.alerts && data.stats.totalAlerts24h > 0) {
|
|
2113
|
+
console.log(' Tip: Run `agent-relay health --alerts` to see alerts');
|
|
2114
|
+
}
|
|
2115
|
+
console.log('');
|
|
2116
|
+
}
|
|
2117
|
+
catch (err) {
|
|
2118
|
+
if (err.code === 'ECONNREFUSED') {
|
|
2119
|
+
console.error(`Cannot connect to dashboard at port ${port}. Is the daemon running?`);
|
|
2120
|
+
console.log(`Run 'agent-relay up' to start the daemon.`);
|
|
2121
|
+
}
|
|
2122
|
+
else {
|
|
2123
|
+
console.error(`Failed to fetch health data: ${err.message}`);
|
|
2124
|
+
}
|
|
2125
|
+
process.exit(1);
|
|
2126
|
+
}
|
|
2127
|
+
});
|
|
2128
|
+
// profile - Run agent with profiling enabled
|
|
2129
|
+
program
|
|
2130
|
+
.command('profile')
|
|
2131
|
+
.description('Run an agent with memory profiling enabled')
|
|
2132
|
+
.argument('<command...>', 'Command to profile')
|
|
2133
|
+
.option('-n, --name <name>', 'Agent name')
|
|
2134
|
+
.option('--heap-snapshot-interval <ms>', 'Take heap snapshots at interval (ms)', '60000')
|
|
2135
|
+
.option('--output-dir <dir>', 'Directory for profile output', './profiles')
|
|
2136
|
+
.option('--expose-gc', 'Expose garbage collector for manual GC')
|
|
2137
|
+
.action(async (commandParts, options) => {
|
|
2138
|
+
const { getProjectPaths } = await import('../utils/project-namespace.js');
|
|
2139
|
+
if (!commandParts || commandParts.length === 0) {
|
|
2140
|
+
console.error('No command specified');
|
|
2141
|
+
process.exit(1);
|
|
2142
|
+
}
|
|
2143
|
+
const [cmd, ...args] = commandParts;
|
|
2144
|
+
const agentName = options.name ?? generateAgentName();
|
|
2145
|
+
const outputDir = options.outputDir || './profiles';
|
|
2146
|
+
const snapshotInterval = parseInt(options.heapSnapshotInterval || '60000', 10);
|
|
2147
|
+
// Create output directory
|
|
2148
|
+
if (!fs.existsSync(outputDir)) {
|
|
2149
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
2150
|
+
}
|
|
2151
|
+
console.log('');
|
|
2152
|
+
console.log('🔬 Agent Relay Profiler');
|
|
2153
|
+
console.log('');
|
|
2154
|
+
console.log(` Agent: ${agentName}`);
|
|
2155
|
+
console.log(` Command: ${cmd} ${args.join(' ')}`);
|
|
2156
|
+
console.log(` Output: ${outputDir}`);
|
|
2157
|
+
console.log(` Heap snapshots: every ${snapshotInterval}ms`);
|
|
2158
|
+
console.log('');
|
|
2159
|
+
// Build Node.js flags for profiling
|
|
2160
|
+
const nodeFlags = [
|
|
2161
|
+
'--inspect', // Enable inspector
|
|
2162
|
+
'--inspect-brk=0', // Don't actually break, just enable
|
|
2163
|
+
];
|
|
2164
|
+
if (options.exposeGc) {
|
|
2165
|
+
nodeFlags.push('--expose-gc');
|
|
2166
|
+
}
|
|
2167
|
+
// Set environment variables for profiling
|
|
2168
|
+
const profileEnv = {
|
|
2169
|
+
...process.env,
|
|
2170
|
+
NODE_OPTIONS: `${process.env.NODE_OPTIONS || ''} ${nodeFlags.join(' ')}`.trim(),
|
|
2171
|
+
AGENT_RELAY_PROFILE_ENABLED: '1',
|
|
2172
|
+
AGENT_RELAY_PROFILE_OUTPUT: outputDir,
|
|
2173
|
+
AGENT_RELAY_PROFILE_INTERVAL: snapshotInterval.toString(),
|
|
2174
|
+
};
|
|
2175
|
+
console.log('Starting profiled agent...');
|
|
2176
|
+
console.log('');
|
|
2177
|
+
// Use the regular wrapper but with profiling environment
|
|
2178
|
+
const paths = getProjectPaths();
|
|
2179
|
+
const { TmuxWrapper } = await import('../wrapper/tmux-wrapper.js');
|
|
2180
|
+
const wrapper = new TmuxWrapper({
|
|
2181
|
+
name: agentName,
|
|
2182
|
+
command: cmd,
|
|
2183
|
+
args,
|
|
2184
|
+
socketPath: paths.socketPath,
|
|
2185
|
+
debug: true,
|
|
2186
|
+
env: profileEnv,
|
|
2187
|
+
useInbox: true,
|
|
2188
|
+
inboxDir: paths.dataDir,
|
|
2189
|
+
});
|
|
2190
|
+
// Start memory sampling
|
|
2191
|
+
const sampleInterval = setInterval(() => {
|
|
2192
|
+
const memUsage = process.memoryUsage();
|
|
2193
|
+
const timestamp = new Date().toISOString();
|
|
2194
|
+
const sample = {
|
|
2195
|
+
timestamp,
|
|
2196
|
+
heapUsed: memUsage.heapUsed,
|
|
2197
|
+
heapTotal: memUsage.heapTotal,
|
|
2198
|
+
external: memUsage.external,
|
|
2199
|
+
rss: memUsage.rss,
|
|
2200
|
+
};
|
|
2201
|
+
// Append to samples file
|
|
2202
|
+
const samplesFile = path.join(outputDir, `${agentName}-memory.jsonl`);
|
|
2203
|
+
fs.appendFileSync(samplesFile, JSON.stringify(sample) + '\n');
|
|
2204
|
+
}, 5000);
|
|
2205
|
+
process.on('SIGINT', async () => {
|
|
2206
|
+
clearInterval(sampleInterval);
|
|
2207
|
+
console.log('\n');
|
|
2208
|
+
console.log('Profiling stopped.');
|
|
2209
|
+
console.log('');
|
|
2210
|
+
console.log(`Profile data saved to: ${outputDir}/`);
|
|
2211
|
+
console.log(` - ${agentName}-memory.jsonl (memory samples)`);
|
|
2212
|
+
console.log('');
|
|
2213
|
+
console.log('To analyze:');
|
|
2214
|
+
console.log(` 1. Open chrome://inspect in Chrome`);
|
|
2215
|
+
console.log(` 2. Load CPU/heap profiles from ${outputDir}/`);
|
|
2216
|
+
console.log('');
|
|
2217
|
+
wrapper.stop();
|
|
2218
|
+
process.exit(0);
|
|
2219
|
+
});
|
|
2220
|
+
await wrapper.start();
|
|
2221
|
+
console.log(`Profiling ${agentName}... Press Ctrl+C to stop.`);
|
|
2222
|
+
});
|
|
1827
2223
|
program.parse();
|
|
1828
2224
|
//# sourceMappingURL=index.js.map
|