agent-relay 1.0.22 → 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/shadow-cli.d.ts +17 -0
- package/dist/bridge/shadow-cli.d.ts.map +1 -0
- package/dist/bridge/shadow-cli.js +75 -0
- package/dist/bridge/shadow-cli.js.map +1 -0
- package/dist/bridge/shadow-config.d.ts +87 -0
- package/dist/bridge/shadow-config.d.ts.map +1 -0
- package/dist/bridge/shadow-config.js +134 -0
- package/dist/bridge/shadow-config.js.map +1 -0
- package/dist/bridge/spawner.d.ts +68 -1
- package/dist/bridge/spawner.d.ts.map +1 -1
- package/dist/bridge/spawner.js +360 -16
- package/dist/bridge/spawner.js.map +1 -1
- package/dist/bridge/types.d.ts +67 -0
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/cli/index.js +1196 -15
- package/dist/cli/index.js.map +1 -1
- package/dist/cloud/api/auth.d.ts +20 -0
- package/dist/cloud/api/auth.d.ts.map +1 -0
- package/dist/cloud/api/auth.js +128 -0
- package/dist/cloud/api/auth.js.map +1 -0
- package/dist/cloud/api/billing.d.ts +17 -0
- package/dist/cloud/api/billing.d.ts.map +1 -0
- package/dist/cloud/api/billing.js +353 -0
- package/dist/cloud/api/billing.js.map +1 -0
- 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/coordinators.d.ts +8 -0
- package/dist/cloud/api/coordinators.d.ts.map +1 -0
- package/dist/cloud/api/coordinators.js +347 -0
- package/dist/cloud/api/coordinators.js.map +1 -0
- package/dist/cloud/api/daemons.d.ts +12 -0
- package/dist/cloud/api/daemons.d.ts.map +1 -0
- package/dist/cloud/api/daemons.js +320 -0
- package/dist/cloud/api/daemons.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 +43 -0
- package/dist/cloud/api/middleware/planLimits.d.ts.map +1 -0
- package/dist/cloud/api/middleware/planLimits.js +202 -0
- package/dist/cloud/api/middleware/planLimits.js.map +1 -0
- 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 +15 -0
- package/dist/cloud/api/onboarding.d.ts.map +1 -0
- package/dist/cloud/api/onboarding.js +588 -0
- package/dist/cloud/api/onboarding.js.map +1 -0
- 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.d.ts +7 -0
- package/dist/cloud/api/providers.d.ts.map +1 -0
- package/dist/cloud/api/providers.js +507 -0
- package/dist/cloud/api/providers.js.map +1 -0
- package/dist/cloud/api/repos.d.ts +7 -0
- package/dist/cloud/api/repos.d.ts.map +1 -0
- package/dist/cloud/api/repos.js +314 -0
- package/dist/cloud/api/repos.js.map +1 -0
- package/dist/cloud/api/teams.d.ts +7 -0
- package/dist/cloud/api/teams.d.ts.map +1 -0
- package/dist/cloud/api/teams.js +279 -0
- package/dist/cloud/api/teams.js.map +1 -0
- 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/usage.d.ts +7 -0
- package/dist/cloud/api/usage.d.ts.map +1 -0
- package/dist/cloud/api/usage.js +98 -0
- package/dist/cloud/api/usage.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.d.ts +7 -0
- package/dist/cloud/api/workspaces.d.ts.map +1 -0
- package/dist/cloud/api/workspaces.js +727 -0
- package/dist/cloud/api/workspaces.js.map +1 -0
- package/dist/cloud/billing/index.d.ts +9 -0
- package/dist/cloud/billing/index.d.ts.map +1 -0
- package/dist/cloud/billing/index.js +9 -0
- package/dist/cloud/billing/index.js.map +1 -0
- package/dist/cloud/billing/plans.d.ts +39 -0
- package/dist/cloud/billing/plans.d.ts.map +1 -0
- package/dist/cloud/billing/plans.js +245 -0
- package/dist/cloud/billing/plans.js.map +1 -0
- package/dist/cloud/billing/service.d.ts +80 -0
- package/dist/cloud/billing/service.d.ts.map +1 -0
- package/dist/cloud/billing/service.js +388 -0
- package/dist/cloud/billing/service.js.map +1 -0
- package/dist/cloud/billing/types.d.ts +141 -0
- package/dist/cloud/billing/types.d.ts.map +1 -0
- package/dist/cloud/billing/types.js +7 -0
- package/dist/cloud/billing/types.js.map +1 -0
- package/dist/cloud/config.d.ts +66 -0
- package/dist/cloud/config.d.ts.map +1 -0
- package/dist/cloud/config.js +92 -0
- package/dist/cloud/config.js.map +1 -0
- package/dist/cloud/db/drizzle.d.ts +215 -0
- package/dist/cloud/db/drizzle.d.ts.map +1 -0
- package/dist/cloud/db/drizzle.js +1083 -0
- package/dist/cloud/db/drizzle.js.map +1 -0
- package/dist/cloud/db/index.d.ts +35 -0
- package/dist/cloud/db/index.d.ts.map +1 -0
- package/dist/cloud/db/index.js +52 -0
- package/dist/cloud/db/index.js.map +1 -0
- package/dist/cloud/db/schema.d.ts +4519 -0
- package/dist/cloud/db/schema.d.ts.map +1 -0
- package/dist/cloud/db/schema.js +547 -0
- package/dist/cloud/db/schema.js.map +1 -0
- package/dist/cloud/index.d.ts +12 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +39 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/provisioner/index.d.ts +75 -0
- package/dist/cloud/provisioner/index.d.ts.map +1 -0
- package/dist/cloud/provisioner/index.js +977 -0
- package/dist/cloud/provisioner/index.js.map +1 -0
- package/dist/cloud/server.d.ts +17 -0
- package/dist/cloud/server.d.ts.map +1 -0
- package/dist/cloud/server.js +534 -0
- package/dist/cloud/server.js.map +1 -0
- 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/coordinator.d.ts +62 -0
- package/dist/cloud/services/coordinator.d.ts.map +1 -0
- package/dist/cloud/services/coordinator.js +389 -0
- package/dist/cloud/services/coordinator.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 +125 -0
- package/dist/cloud/services/planLimits.d.ts.map +1 -0
- package/dist/cloud/services/planLimits.js +282 -0
- package/dist/cloud/services/planLimits.js.map +1 -0
- 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.d.ts +76 -0
- package/dist/cloud/vault/index.d.ts.map +1 -0
- package/dist/cloud/vault/index.js +219 -0
- package/dist/cloud/vault/index.js.map +1 -0
- 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 +114 -0
- package/dist/daemon/agent-manager.d.ts.map +1 -0
- package/dist/daemon/agent-manager.js +513 -0
- package/dist/daemon/agent-manager.js.map +1 -0
- package/dist/daemon/agent-registry.d.ts +34 -0
- package/dist/daemon/agent-registry.d.ts.map +1 -1
- package/dist/daemon/agent-registry.js +45 -2
- package/dist/daemon/agent-registry.js.map +1 -1
- package/dist/daemon/api.d.ts +81 -0
- package/dist/daemon/api.d.ts.map +1 -0
- package/dist/daemon/api.js +554 -0
- package/dist/daemon/api.js.map +1 -0
- 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 +101 -0
- package/dist/daemon/cloud-sync.d.ts.map +1 -0
- package/dist/daemon/cloud-sync.js +263 -0
- package/dist/daemon/cloud-sync.js.map +1 -0
- package/dist/daemon/index.d.ts +4 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +6 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/orchestrator.d.ts +155 -0
- package/dist/daemon/orchestrator.d.ts.map +1 -0
- package/dist/daemon/orchestrator.js +766 -0
- package/dist/daemon/orchestrator.js.map +1 -0
- package/dist/daemon/router.d.ts +29 -0
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +143 -21
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/server.d.ts +42 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +199 -16
- 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 +131 -0
- package/dist/daemon/types.d.ts.map +1 -0
- package/dist/daemon/types.js +6 -0
- package/dist/daemon/types.js.map +1 -0
- package/dist/daemon/workspace-manager.d.ts +75 -0
- package/dist/daemon/workspace-manager.d.ts.map +1 -0
- package/dist/daemon/workspace-manager.js +289 -0
- package/dist/daemon/workspace-manager.js.map +1 -0
- 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-56a8b4616a90dc43.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +1 -0
- 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/pricing/page-4d72d5a5d8a9b618.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-e0a1f53fe0617a63.js → main-97850e03d723ea8c.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/main-app-5d692157a8eb1fd9.js +1 -0
- 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/alt-logos/agent-relay-logo-128.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +45 -0
- package/dist/dashboard/out/alt-logos/logo.svg +38 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo.svg +38 -0
- package/dist/dashboard/out/app.html +1 -0
- package/dist/dashboard/out/app.txt +7 -0
- 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 -0
- package/dist/dashboard/out/history.txt +7 -0
- 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 -515
- package/dist/dashboard/out/metrics.txt +2 -2
- package/dist/dashboard/out/pricing.html +13 -0
- package/dist/dashboard/out/pricing.txt +7 -0
- 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/metrics.d.ts.map +1 -1
- package/dist/dashboard-server/metrics.js +3 -2
- package/dist/dashboard-server/metrics.js.map +1 -1
- package/dist/dashboard-server/server.d.ts.map +1 -1
- package/dist/dashboard-server/server.js +2653 -130
- 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/protocol/types.d.ts +10 -1
- package/dist/protocol/types.d.ts.map +1 -1
- package/dist/resiliency/context-persistence.d.ts +140 -0
- package/dist/resiliency/context-persistence.d.ts.map +1 -0
- package/dist/resiliency/context-persistence.js +397 -0
- package/dist/resiliency/context-persistence.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/health-monitor.d.ts +97 -0
- package/dist/resiliency/health-monitor.d.ts.map +1 -0
- package/dist/resiliency/health-monitor.js +291 -0
- package/dist/resiliency/health-monitor.js.map +1 -0
- package/dist/resiliency/index.d.ts +68 -0
- package/dist/resiliency/index.d.ts.map +1 -0
- package/dist/resiliency/index.js +68 -0
- package/dist/resiliency/index.js.map +1 -0
- 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/logger.d.ts +114 -0
- package/dist/resiliency/logger.d.ts.map +1 -0
- package/dist/resiliency/logger.js +250 -0
- package/dist/resiliency/logger.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/metrics.d.ts +115 -0
- package/dist/resiliency/metrics.d.ts.map +1 -0
- package/dist/resiliency/metrics.js +239 -0
- package/dist/resiliency/metrics.js.map +1 -0
- package/dist/resiliency/provider-context.d.ts +100 -0
- package/dist/resiliency/provider-context.d.ts.map +1 -0
- package/dist/resiliency/provider-context.js +360 -0
- package/dist/resiliency/provider-context.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 +147 -0
- package/dist/resiliency/supervisor.d.ts.map +1 -0
- package/dist/resiliency/supervisor.js +459 -0
- package/dist/resiliency/supervisor.js.map +1 -0
- 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 +3 -1
- package/dist/storage/adapter.d.ts.map +1 -1
- package/dist/storage/adapter.js +12 -2
- package/dist/storage/adapter.js.map +1 -1
- package/dist/storage/sqlite-adapter.d.ts.map +1 -1
- package/dist/storage/sqlite-adapter.js +18 -14
- package/dist/storage/sqlite-adapter.js.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/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.d.ts +40 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +84 -0
- package/dist/utils/logger.js.map +1 -0
- 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/client.d.ts +16 -1
- package/dist/wrapper/client.d.ts.map +1 -1
- package/dist/wrapper/client.js +32 -1
- package/dist/wrapper/client.js.map +1 -1
- package/dist/wrapper/parser.d.ts +13 -0
- package/dist/wrapper/parser.d.ts.map +1 -1
- package/dist/wrapper/parser.js +217 -47
- package/dist/wrapper/parser.js.map +1 -1
- package/dist/wrapper/pty-wrapper.d.ts +219 -17
- package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
- package/dist/wrapper/pty-wrapper.js +1050 -104
- 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 +78 -11
- package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
- package/dist/wrapper/tmux-wrapper.js +567 -106
- package/dist/wrapper/tmux-wrapper.js.map +1 -1
- package/docs/CLOUD-ARCHITECTURE.md +804 -0
- package/docs/CLOUD-ONBOARDING-DESIGN.md +1983 -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 +115 -6
- package/docs/archive/EXECUTIVE_SUMMARY.md +358 -0
- package/docs/archive/ROADMAP.md +329 -0
- package/docs/archive/TESTING_PRESENCE_FEATURES.md +327 -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/guides/CLOUD.md +236 -0
- package/docs/guides/LOCAL.md +535 -0
- package/docs/guides/SELF-HOSTED.md +494 -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/proposals/shadow-as-subagent.md +765 -0
- package/docs/proposals/slack-bot-integration.md +1457 -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 +45 -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/app/layout-c9d8c5d95e48c6bf.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/metrics/page-8aa9936bc6c771ab.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/page-4498be09a5157759.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/main-app-bae2e535de00de50.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/webpack-c81f7fd28659d64f.js +0 -1
- package/dist/dashboard/out/_next/static/css/50ed6996e3df7bdd.css +0 -1
- /package/dist/dashboard/out/_next/static/{DXFA-jj8wb3PcY5DX2xcU → H5aWG0udPB4iOUIl_gytz}/_buildManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/{DXFA-jj8wb3PcY5DX2xcU → H5aWG0udPB4iOUIl_gytz}/_ssgManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{117-3bef7b19f3e60751.js → 117-b100311aff8d5c61.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{648-6cf686106c891ad3.js → 648-a13d3c2b1be45466.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-8ff6572bc7c9bc61.js → page-a4973f3e3c82fb67.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-26bd8d656b496dba.js → fd9d1056-bf46c09eb57e019c.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/{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
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Agent Relay Cloud - Manual QA Testing Setup
|
|
4
|
+
#
|
|
5
|
+
# This script sets up everything for manual browser-based QA testing:
|
|
6
|
+
# - PostgreSQL and Redis (via Docker)
|
|
7
|
+
# - Cloud API server (local, with test mode)
|
|
8
|
+
# - Daemon simulators generating test data
|
|
9
|
+
# - Creates test user for dashboard access
|
|
10
|
+
#
|
|
11
|
+
# Usage:
|
|
12
|
+
# ./scripts/manual-qa.sh # Start everything
|
|
13
|
+
# ./scripts/manual-qa.sh --stop # Stop all services
|
|
14
|
+
# ./scripts/manual-qa.sh --create-data # Create test data only
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
set -e
|
|
18
|
+
|
|
19
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
20
|
+
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
21
|
+
|
|
22
|
+
# Colors
|
|
23
|
+
RED='\033[0;31m'
|
|
24
|
+
GREEN='\033[0;32m'
|
|
25
|
+
YELLOW='\033[1;33m'
|
|
26
|
+
BLUE='\033[0;34m'
|
|
27
|
+
CYAN='\033[0;36m'
|
|
28
|
+
NC='\033[0m'
|
|
29
|
+
|
|
30
|
+
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
31
|
+
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
|
|
32
|
+
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
33
|
+
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
34
|
+
log_header() { echo -e "\n${CYAN}=== $1 ===${NC}\n"; }
|
|
35
|
+
|
|
36
|
+
# Parse arguments
|
|
37
|
+
STOP_ONLY=false
|
|
38
|
+
CREATE_DATA_ONLY=false
|
|
39
|
+
|
|
40
|
+
while [[ "$#" -gt 0 ]]; do
|
|
41
|
+
case $1 in
|
|
42
|
+
--stop) STOP_ONLY=true ;;
|
|
43
|
+
--create-data) CREATE_DATA_ONLY=true ;;
|
|
44
|
+
-h|--help)
|
|
45
|
+
echo "Usage: $0 [options]"
|
|
46
|
+
echo ""
|
|
47
|
+
echo "Options:"
|
|
48
|
+
echo " --stop Stop all services"
|
|
49
|
+
echo " --create-data Create test data only (assumes services running)"
|
|
50
|
+
echo " -h, --help Show this help"
|
|
51
|
+
exit 0
|
|
52
|
+
;;
|
|
53
|
+
*) log_error "Unknown option: $1"; exit 1 ;;
|
|
54
|
+
esac
|
|
55
|
+
shift
|
|
56
|
+
done
|
|
57
|
+
|
|
58
|
+
cd "$PROJECT_DIR"
|
|
59
|
+
|
|
60
|
+
# Stop services
|
|
61
|
+
stop_services() {
|
|
62
|
+
log_header "Stopping Services"
|
|
63
|
+
|
|
64
|
+
# Stop daemon simulators
|
|
65
|
+
pkill -f "daemon-simulator" 2>/dev/null || true
|
|
66
|
+
|
|
67
|
+
# Stop cloud server
|
|
68
|
+
pkill -f "node dist/cloud/index.js" 2>/dev/null || true
|
|
69
|
+
|
|
70
|
+
# Stop Docker services
|
|
71
|
+
docker compose -f docker-compose.dev.yml down 2>/dev/null || true
|
|
72
|
+
|
|
73
|
+
log_success "All services stopped"
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if [ "$STOP_ONLY" = true ]; then
|
|
77
|
+
stop_services
|
|
78
|
+
exit 0
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Create test data
|
|
82
|
+
create_test_data() {
|
|
83
|
+
log_header "Creating Test Data"
|
|
84
|
+
|
|
85
|
+
local API_URL="${1:-http://localhost:3000}"
|
|
86
|
+
|
|
87
|
+
# Wait for API to be ready
|
|
88
|
+
log_info "Waiting for API..."
|
|
89
|
+
for i in {1..30}; do
|
|
90
|
+
if curl -sf "$API_URL/health" >/dev/null 2>&1; then
|
|
91
|
+
break
|
|
92
|
+
fi
|
|
93
|
+
if [ $i -eq 30 ]; then
|
|
94
|
+
log_error "API not available"
|
|
95
|
+
return 1
|
|
96
|
+
fi
|
|
97
|
+
sleep 1
|
|
98
|
+
done
|
|
99
|
+
|
|
100
|
+
# Create test user
|
|
101
|
+
log_info "Creating test user..."
|
|
102
|
+
USER_RESPONSE=$(curl -sf -X POST "$API_URL/api/test/create-user" \
|
|
103
|
+
-H "Content-Type: application/json" \
|
|
104
|
+
-d '{"email": "qa@test.local", "name": "QA Tester"}' 2>/dev/null || echo "")
|
|
105
|
+
|
|
106
|
+
if [ -n "$USER_RESPONSE" ]; then
|
|
107
|
+
USER_ID=$(echo "$USER_RESPONSE" | grep -o '"userId":"[^"]*"' | cut -d'"' -f4)
|
|
108
|
+
log_success "Created test user: $USER_ID"
|
|
109
|
+
else
|
|
110
|
+
log_warn "Could not create test user (may already exist or test mode disabled)"
|
|
111
|
+
fi
|
|
112
|
+
|
|
113
|
+
# Create test daemons
|
|
114
|
+
log_info "Creating test daemons..."
|
|
115
|
+
|
|
116
|
+
for i in 1 2 3; do
|
|
117
|
+
DAEMON_RESPONSE=$(curl -sf -X POST "$API_URL/api/test/create-daemon" \
|
|
118
|
+
-H "Content-Type: application/json" \
|
|
119
|
+
-d "{\"name\": \"qa-daemon-$i\", \"machineId\": \"qa-machine-$i\"}" 2>/dev/null || echo "")
|
|
120
|
+
|
|
121
|
+
if [ -n "$DAEMON_RESPONSE" ]; then
|
|
122
|
+
DAEMON_ID=$(echo "$DAEMON_RESPONSE" | grep -o '"daemonId":"[^"]*"' | cut -d'"' -f4)
|
|
123
|
+
API_KEY=$(echo "$DAEMON_RESPONSE" | grep -o '"apiKey":"[^"]*"' | cut -d'"' -f4)
|
|
124
|
+
log_success "Created daemon $i: $DAEMON_ID"
|
|
125
|
+
|
|
126
|
+
# Save API key for simulator
|
|
127
|
+
echo "$API_KEY" > "/tmp/qa-daemon-$i.key"
|
|
128
|
+
fi
|
|
129
|
+
done
|
|
130
|
+
|
|
131
|
+
log_success "Test data created!"
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if [ "$CREATE_DATA_ONLY" = true ]; then
|
|
135
|
+
create_test_data
|
|
136
|
+
exit 0
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
# Main setup
|
|
140
|
+
log_header "Agent Relay - Manual QA Setup"
|
|
141
|
+
|
|
142
|
+
# Check prerequisites
|
|
143
|
+
if ! docker info >/dev/null 2>&1; then
|
|
144
|
+
log_error "Docker is not running"
|
|
145
|
+
exit 1
|
|
146
|
+
fi
|
|
147
|
+
|
|
148
|
+
if ! command -v node >/dev/null 2>&1; then
|
|
149
|
+
log_error "Node.js is required"
|
|
150
|
+
exit 1
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
# Step 1: Build if needed
|
|
154
|
+
if [ ! -d "dist" ]; then
|
|
155
|
+
log_header "Building Project"
|
|
156
|
+
npm run build
|
|
157
|
+
fi
|
|
158
|
+
|
|
159
|
+
# Step 2: Start infrastructure
|
|
160
|
+
log_header "Starting Infrastructure"
|
|
161
|
+
|
|
162
|
+
docker compose -f docker-compose.dev.yml up -d postgres redis
|
|
163
|
+
|
|
164
|
+
log_info "Waiting for PostgreSQL..."
|
|
165
|
+
for i in {1..30}; do
|
|
166
|
+
if docker compose -f docker-compose.dev.yml exec -T postgres pg_isready -U agent_relay >/dev/null 2>&1; then
|
|
167
|
+
log_success "PostgreSQL is ready"
|
|
168
|
+
break
|
|
169
|
+
fi
|
|
170
|
+
if [ $i -eq 30 ]; then
|
|
171
|
+
log_error "PostgreSQL failed to start"
|
|
172
|
+
exit 1
|
|
173
|
+
fi
|
|
174
|
+
sleep 1
|
|
175
|
+
done
|
|
176
|
+
|
|
177
|
+
log_info "Waiting for Redis..."
|
|
178
|
+
for i in {1..30}; do
|
|
179
|
+
if docker compose -f docker-compose.dev.yml exec -T redis redis-cli ping >/dev/null 2>&1; then
|
|
180
|
+
log_success "Redis is ready"
|
|
181
|
+
break
|
|
182
|
+
fi
|
|
183
|
+
if [ $i -eq 30 ]; then
|
|
184
|
+
log_error "Redis failed to start"
|
|
185
|
+
exit 1
|
|
186
|
+
fi
|
|
187
|
+
sleep 1
|
|
188
|
+
done
|
|
189
|
+
|
|
190
|
+
# Step 3: Start Cloud API server
|
|
191
|
+
log_header "Starting Cloud API Server"
|
|
192
|
+
|
|
193
|
+
export NODE_ENV=development
|
|
194
|
+
export PORT=3000
|
|
195
|
+
export PUBLIC_URL=http://localhost:3000
|
|
196
|
+
export DATABASE_URL="postgres://agent_relay:dev_password@localhost:5432/agent_relay"
|
|
197
|
+
export REDIS_URL="redis://localhost:6379"
|
|
198
|
+
export SESSION_SECRET="dev-session-secret"
|
|
199
|
+
export VAULT_MASTER_KEY="ZGV2LXZhdWx0LWtleS1jaGFuZ2UtaW4tcHJvZHVjdGlvbg=="
|
|
200
|
+
export RELAY_CLOUD_ENABLED=true
|
|
201
|
+
export RELAY_MEMORY_MONITORING=true
|
|
202
|
+
|
|
203
|
+
# Start cloud server in background
|
|
204
|
+
node dist/cloud/index.js &
|
|
205
|
+
CLOUD_PID=$!
|
|
206
|
+
echo $CLOUD_PID > /tmp/cloud-server.pid
|
|
207
|
+
|
|
208
|
+
log_info "Cloud server starting (PID: $CLOUD_PID)..."
|
|
209
|
+
|
|
210
|
+
# Wait for cloud server
|
|
211
|
+
for i in {1..60}; do
|
|
212
|
+
if curl -sf http://localhost:3000/health >/dev/null 2>&1; then
|
|
213
|
+
log_success "Cloud API server is ready"
|
|
214
|
+
break
|
|
215
|
+
fi
|
|
216
|
+
if [ $i -eq 60 ]; then
|
|
217
|
+
log_error "Cloud server failed to start"
|
|
218
|
+
exit 1
|
|
219
|
+
fi
|
|
220
|
+
sleep 1
|
|
221
|
+
done
|
|
222
|
+
|
|
223
|
+
# Step 4: Create test data
|
|
224
|
+
create_test_data "http://localhost:3000"
|
|
225
|
+
|
|
226
|
+
# Step 5: Start daemon simulators
|
|
227
|
+
log_header "Starting Daemon Simulators"
|
|
228
|
+
|
|
229
|
+
# Check if tsx is available, otherwise use ts-node or compile
|
|
230
|
+
if command -v tsx >/dev/null 2>&1; then
|
|
231
|
+
TSX_CMD="tsx"
|
|
232
|
+
elif command -v ts-node >/dev/null 2>&1; then
|
|
233
|
+
TSX_CMD="ts-node"
|
|
234
|
+
else
|
|
235
|
+
log_warn "No TypeScript runner found, skipping simulators"
|
|
236
|
+
TSX_CMD=""
|
|
237
|
+
fi
|
|
238
|
+
|
|
239
|
+
if [ -n "$TSX_CMD" ] && [ -f "test/cloud/daemon-simulator.ts" ]; then
|
|
240
|
+
# Start simulator 1 - normal operation
|
|
241
|
+
DAEMON_NAME=qa-daemon-1 \
|
|
242
|
+
CLOUD_API_URL=http://localhost:3000 \
|
|
243
|
+
AGENT_COUNT=3 \
|
|
244
|
+
REPORT_INTERVAL_MS=5000 \
|
|
245
|
+
SIMULATE_MEMORY_GROWTH=false \
|
|
246
|
+
$TSX_CMD test/cloud/daemon-simulator.ts &
|
|
247
|
+
echo $! > /tmp/simulator-1.pid
|
|
248
|
+
log_info "Started simulator 1 (PID: $!)"
|
|
249
|
+
|
|
250
|
+
# Start simulator 2 - memory growth
|
|
251
|
+
DAEMON_NAME=qa-daemon-2 \
|
|
252
|
+
CLOUD_API_URL=http://localhost:3000 \
|
|
253
|
+
AGENT_COUNT=2 \
|
|
254
|
+
REPORT_INTERVAL_MS=5000 \
|
|
255
|
+
SIMULATE_MEMORY_GROWTH=true \
|
|
256
|
+
$TSX_CMD test/cloud/daemon-simulator.ts &
|
|
257
|
+
echo $! > /tmp/simulator-2.pid
|
|
258
|
+
log_info "Started simulator 2 (PID: $!)"
|
|
259
|
+
|
|
260
|
+
sleep 3
|
|
261
|
+
log_success "Daemon simulators running"
|
|
262
|
+
else
|
|
263
|
+
log_warn "Daemon simulators not started (tsx/ts-node not available)"
|
|
264
|
+
fi
|
|
265
|
+
|
|
266
|
+
# Done!
|
|
267
|
+
log_header "Manual QA Environment Ready!"
|
|
268
|
+
|
|
269
|
+
echo -e "${GREEN}Access Points:${NC}"
|
|
270
|
+
echo " - Dashboard: http://localhost:3000"
|
|
271
|
+
echo " - API Health: http://localhost:3000/health"
|
|
272
|
+
echo " - Metrics: http://localhost:3000/metrics"
|
|
273
|
+
echo ""
|
|
274
|
+
echo -e "${GREEN}Test Endpoints:${NC}"
|
|
275
|
+
echo " - GET /api/test/status - Check test mode"
|
|
276
|
+
echo " - POST /api/test/create-user - Create test user"
|
|
277
|
+
echo " - POST /api/test/create-daemon - Create test daemon"
|
|
278
|
+
echo ""
|
|
279
|
+
echo -e "${GREEN}Database Access:${NC}"
|
|
280
|
+
echo " psql postgres://agent_relay:dev_password@localhost:5432/agent_relay"
|
|
281
|
+
echo ""
|
|
282
|
+
echo -e "${GREEN}Redis Access:${NC}"
|
|
283
|
+
echo " redis-cli -h localhost -p 6379"
|
|
284
|
+
echo ""
|
|
285
|
+
echo -e "${YELLOW}Note:${NC} OAuth is bypassed in test mode. Use /api/test endpoints to create users."
|
|
286
|
+
echo ""
|
|
287
|
+
echo -e "To stop: ${CYAN}./scripts/manual-qa.sh --stop${NC}"
|
|
288
|
+
echo ""
|
|
289
|
+
|
|
290
|
+
# Keep script running to show logs
|
|
291
|
+
log_info "Showing cloud server logs (Ctrl+C to exit, services keep running)..."
|
|
292
|
+
echo ""
|
|
293
|
+
tail -f /dev/null
|
package/scripts/postinstall.js
CHANGED
|
@@ -224,10 +224,70 @@ function installDashboardDeps() {
|
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
+
/**
|
|
228
|
+
* Patch agent-trajectories CLI to record agent info on start
|
|
229
|
+
*/
|
|
230
|
+
function patchAgentTrajectories() {
|
|
231
|
+
const pkgRoot = getPackageRoot();
|
|
232
|
+
const cliPath = path.join(pkgRoot, 'node_modules', 'agent-trajectories', 'dist', 'cli', 'index.js');
|
|
233
|
+
|
|
234
|
+
if (!fs.existsSync(cliPath)) {
|
|
235
|
+
info('agent-trajectories not installed, skipping patch');
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
const content = fs.readFileSync(cliPath, 'utf-8');
|
|
240
|
+
|
|
241
|
+
// If already patched, exit early
|
|
242
|
+
if (content.includes('--agent <name>') && content.includes('trajectory.agents.push')) {
|
|
243
|
+
info('agent-trajectories already patched');
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const optionNeedle = '.option("-t, --task <id>", "External task ID").option("-s, --source <system>", "Task system (github, linear, jira, beads)").option("--url <url>", "URL to external task")';
|
|
248
|
+
const optionReplacement = `${optionNeedle}.option("-a, --agent <name>", "Agent name starting the trajectory").option("-r, --role <role>", "Agent role (lead, contributor, reviewer)")`;
|
|
249
|
+
|
|
250
|
+
const createNeedle = ` const trajectory = createTrajectory({
|
|
251
|
+
title,
|
|
252
|
+
source
|
|
253
|
+
});
|
|
254
|
+
await storage.save(trajectory);`;
|
|
255
|
+
|
|
256
|
+
const createReplacement = ` const agentName = options.agent || process.env.AGENT_NAME || process.env.AGENT_RELAY_NAME || process.env.USER || process.env.USERNAME;
|
|
257
|
+
const agentRole = options.role || "lead";
|
|
258
|
+
const trajectory = createTrajectory({
|
|
259
|
+
title,
|
|
260
|
+
source
|
|
261
|
+
});
|
|
262
|
+
if (agentName) {
|
|
263
|
+
trajectory.agents.push({
|
|
264
|
+
name: agentName,
|
|
265
|
+
role: ["lead", "contributor", "reviewer"].includes(agentRole) ? agentRole : "lead",
|
|
266
|
+
joinedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
await storage.save(trajectory);`;
|
|
270
|
+
|
|
271
|
+
if (!content.includes(optionNeedle) || !content.includes(createNeedle)) {
|
|
272
|
+
warn('agent-trajectories CLI format changed, skipping patch');
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
const updated = content
|
|
277
|
+
.replace(optionNeedle, optionReplacement)
|
|
278
|
+
.replace(createNeedle, createReplacement);
|
|
279
|
+
|
|
280
|
+
fs.writeFileSync(cliPath, updated, 'utf-8');
|
|
281
|
+
success('Patched agent-trajectories to record agent on trail start');
|
|
282
|
+
}
|
|
283
|
+
|
|
227
284
|
/**
|
|
228
285
|
* Main postinstall routine
|
|
229
286
|
*/
|
|
230
287
|
async function main() {
|
|
288
|
+
// Ensure trail CLI captures agent info on start
|
|
289
|
+
patchAgentTrajectories();
|
|
290
|
+
|
|
231
291
|
// Always install dashboard dependencies (needed for build)
|
|
232
292
|
installDashboardDeps();
|
|
233
293
|
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Agent Relay Cloud - Full QA Test Runner
|
|
4
|
+
#
|
|
5
|
+
# This script runs the complete cloud QA test suite locally using Docker.
|
|
6
|
+
# It simulates the production environment with:
|
|
7
|
+
# - PostgreSQL database
|
|
8
|
+
# - Redis for sessions/pub-sub
|
|
9
|
+
# - Cloud API server
|
|
10
|
+
# - Simulated daemons reporting metrics
|
|
11
|
+
# - Integration tests
|
|
12
|
+
#
|
|
13
|
+
# Usage:
|
|
14
|
+
# ./scripts/run-cloud-qa.sh # Run all tests
|
|
15
|
+
# ./scripts/run-cloud-qa.sh --quick # Quick smoke test
|
|
16
|
+
# ./scripts/run-cloud-qa.sh --cleanup # Cleanup only
|
|
17
|
+
# ./scripts/run-cloud-qa.sh --logs # Show logs after tests
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
set -e
|
|
21
|
+
|
|
22
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
23
|
+
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
24
|
+
COMPOSE_FILE="$PROJECT_DIR/docker-compose.test.yml"
|
|
25
|
+
|
|
26
|
+
# Colors for output
|
|
27
|
+
RED='\033[0;31m'
|
|
28
|
+
GREEN='\033[0;32m'
|
|
29
|
+
YELLOW='\033[1;33m'
|
|
30
|
+
BLUE='\033[0;34m'
|
|
31
|
+
NC='\033[0m' # No Color
|
|
32
|
+
|
|
33
|
+
log_info() {
|
|
34
|
+
echo -e "${BLUE}[INFO]${NC} $1"
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
log_success() {
|
|
38
|
+
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
log_warn() {
|
|
42
|
+
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
log_error() {
|
|
46
|
+
echo -e "${RED}[ERROR]${NC} $1"
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
# Parse arguments
|
|
50
|
+
QUICK_MODE=false
|
|
51
|
+
CLEANUP_ONLY=false
|
|
52
|
+
SHOW_LOGS=false
|
|
53
|
+
KEEP_RUNNING=false
|
|
54
|
+
|
|
55
|
+
while [[ "$#" -gt 0 ]]; do
|
|
56
|
+
case $1 in
|
|
57
|
+
--quick) QUICK_MODE=true ;;
|
|
58
|
+
--cleanup) CLEANUP_ONLY=true ;;
|
|
59
|
+
--logs) SHOW_LOGS=true ;;
|
|
60
|
+
--keep) KEEP_RUNNING=true ;;
|
|
61
|
+
-h|--help)
|
|
62
|
+
echo "Usage: $0 [options]"
|
|
63
|
+
echo ""
|
|
64
|
+
echo "Options:"
|
|
65
|
+
echo " --quick Run quick smoke test only"
|
|
66
|
+
echo " --cleanup Cleanup test containers and volumes"
|
|
67
|
+
echo " --logs Show container logs after tests"
|
|
68
|
+
echo " --keep Keep containers running after tests"
|
|
69
|
+
echo " -h, --help Show this help message"
|
|
70
|
+
exit 0
|
|
71
|
+
;;
|
|
72
|
+
*) log_error "Unknown option: $1"; exit 1 ;;
|
|
73
|
+
esac
|
|
74
|
+
shift
|
|
75
|
+
done
|
|
76
|
+
|
|
77
|
+
# Cleanup function
|
|
78
|
+
cleanup() {
|
|
79
|
+
log_info "Cleaning up test environment..."
|
|
80
|
+
docker compose -f "$COMPOSE_FILE" down -v --remove-orphans 2>/dev/null || true
|
|
81
|
+
log_success "Cleanup complete"
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
# Handle SIGINT/SIGTERM
|
|
85
|
+
trap cleanup EXIT
|
|
86
|
+
|
|
87
|
+
# Cleanup only mode
|
|
88
|
+
if [ "$CLEANUP_ONLY" = true ]; then
|
|
89
|
+
cleanup
|
|
90
|
+
exit 0
|
|
91
|
+
fi
|
|
92
|
+
|
|
93
|
+
# Check Docker is running
|
|
94
|
+
if ! docker info >/dev/null 2>&1; then
|
|
95
|
+
log_error "Docker is not running. Please start Docker and try again."
|
|
96
|
+
exit 1
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
# Check docker-compose file exists
|
|
100
|
+
if [ ! -f "$COMPOSE_FILE" ]; then
|
|
101
|
+
log_error "docker-compose.test.yml not found at: $COMPOSE_FILE"
|
|
102
|
+
exit 1
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
log_info "=========================================="
|
|
106
|
+
log_info "Agent Relay Cloud - QA Test Suite"
|
|
107
|
+
log_info "=========================================="
|
|
108
|
+
echo ""
|
|
109
|
+
|
|
110
|
+
# Step 1: Build images
|
|
111
|
+
log_info "Step 1: Building Docker images..."
|
|
112
|
+
docker compose -f "$COMPOSE_FILE" build --quiet
|
|
113
|
+
|
|
114
|
+
# Step 2: Start infrastructure (PostgreSQL, Redis)
|
|
115
|
+
log_info "Step 2: Starting infrastructure..."
|
|
116
|
+
docker compose -f "$COMPOSE_FILE" up -d postgres redis
|
|
117
|
+
|
|
118
|
+
# Wait for services to be healthy
|
|
119
|
+
log_info "Waiting for PostgreSQL and Redis..."
|
|
120
|
+
for i in {1..30}; do
|
|
121
|
+
if docker compose -f "$COMPOSE_FILE" ps postgres | grep -q "healthy" && \
|
|
122
|
+
docker compose -f "$COMPOSE_FILE" ps redis | grep -q "healthy"; then
|
|
123
|
+
log_success "Infrastructure is ready"
|
|
124
|
+
break
|
|
125
|
+
fi
|
|
126
|
+
if [ $i -eq 30 ]; then
|
|
127
|
+
log_error "Infrastructure failed to become healthy"
|
|
128
|
+
docker compose -f "$COMPOSE_FILE" logs postgres redis
|
|
129
|
+
exit 1
|
|
130
|
+
fi
|
|
131
|
+
sleep 1
|
|
132
|
+
done
|
|
133
|
+
|
|
134
|
+
# Step 3: Start cloud server
|
|
135
|
+
log_info "Step 3: Starting Cloud API server..."
|
|
136
|
+
docker compose -f "$COMPOSE_FILE" up -d cloud
|
|
137
|
+
|
|
138
|
+
# Wait for cloud server
|
|
139
|
+
log_info "Waiting for Cloud API server..."
|
|
140
|
+
for i in {1..60}; do
|
|
141
|
+
if curl -sf http://localhost:3100/health >/dev/null 2>&1; then
|
|
142
|
+
log_success "Cloud API server is ready"
|
|
143
|
+
break
|
|
144
|
+
fi
|
|
145
|
+
if [ $i -eq 60 ]; then
|
|
146
|
+
log_error "Cloud API server failed to start"
|
|
147
|
+
docker compose -f "$COMPOSE_FILE" logs cloud
|
|
148
|
+
exit 1
|
|
149
|
+
fi
|
|
150
|
+
sleep 1
|
|
151
|
+
done
|
|
152
|
+
|
|
153
|
+
# Step 4: Start daemon simulators
|
|
154
|
+
log_info "Step 4: Starting daemon simulators..."
|
|
155
|
+
docker compose -f "$COMPOSE_FILE" up -d daemon-simulator-1 daemon-simulator-2
|
|
156
|
+
|
|
157
|
+
# Give simulators time to connect and report metrics
|
|
158
|
+
log_info "Waiting for simulators to connect..."
|
|
159
|
+
sleep 10
|
|
160
|
+
|
|
161
|
+
if [ "$QUICK_MODE" = true ]; then
|
|
162
|
+
# Quick smoke test
|
|
163
|
+
log_info "Running quick smoke test..."
|
|
164
|
+
|
|
165
|
+
# Test health endpoint
|
|
166
|
+
if curl -sf http://localhost:3100/health >/dev/null; then
|
|
167
|
+
log_success "Health check passed"
|
|
168
|
+
else
|
|
169
|
+
log_error "Health check failed"
|
|
170
|
+
exit 1
|
|
171
|
+
fi
|
|
172
|
+
|
|
173
|
+
# Test API is responding
|
|
174
|
+
if curl -sf http://localhost:3100/api/test/status >/dev/null; then
|
|
175
|
+
log_success "Test API responding"
|
|
176
|
+
else
|
|
177
|
+
log_warn "Test API not available (may be in production mode)"
|
|
178
|
+
fi
|
|
179
|
+
|
|
180
|
+
log_success "Quick smoke test passed!"
|
|
181
|
+
else
|
|
182
|
+
# Step 5: Run integration tests
|
|
183
|
+
log_info "Step 5: Running integration tests..."
|
|
184
|
+
|
|
185
|
+
# Run the test runner container
|
|
186
|
+
docker compose -f "$COMPOSE_FILE" --profile test run --rm test-runner
|
|
187
|
+
TEST_EXIT_CODE=$?
|
|
188
|
+
|
|
189
|
+
if [ $TEST_EXIT_CODE -eq 0 ]; then
|
|
190
|
+
log_success "All integration tests passed!"
|
|
191
|
+
else
|
|
192
|
+
log_error "Integration tests failed with exit code: $TEST_EXIT_CODE"
|
|
193
|
+
fi
|
|
194
|
+
fi
|
|
195
|
+
|
|
196
|
+
# Show logs if requested
|
|
197
|
+
if [ "$SHOW_LOGS" = true ]; then
|
|
198
|
+
log_info "Container logs:"
|
|
199
|
+
echo ""
|
|
200
|
+
docker compose -f "$COMPOSE_FILE" logs --tail=100
|
|
201
|
+
fi
|
|
202
|
+
|
|
203
|
+
# Keep running if requested
|
|
204
|
+
if [ "$KEEP_RUNNING" = true ]; then
|
|
205
|
+
log_info "Containers are still running. Press Ctrl+C to stop."
|
|
206
|
+
log_info "Cloud API: http://localhost:3100"
|
|
207
|
+
log_info "PostgreSQL: localhost:5433"
|
|
208
|
+
log_info "Redis: localhost:6380"
|
|
209
|
+
# Disable cleanup trap
|
|
210
|
+
trap - EXIT
|
|
211
|
+
# Wait forever
|
|
212
|
+
while true; do sleep 3600; done
|
|
213
|
+
else
|
|
214
|
+
log_info "Cleaning up..."
|
|
215
|
+
fi
|
|
216
|
+
|
|
217
|
+
echo ""
|
|
218
|
+
log_info "=========================================="
|
|
219
|
+
log_info "QA Test Suite Complete"
|
|
220
|
+
log_info "=========================================="
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# CLI OAuth Flow Test Container
|
|
2
|
+
#
|
|
3
|
+
# This container simulates the AI provider CLIs for testing
|
|
4
|
+
# the OAuth URL capture flow without actual provider accounts.
|
|
5
|
+
#
|
|
6
|
+
# Usage:
|
|
7
|
+
# docker build -t cli-oauth-test scripts/test-cli-auth/
|
|
8
|
+
# docker run --rm cli-oauth-test
|
|
9
|
+
#
|
|
10
|
+
# For interactive testing:
|
|
11
|
+
# docker run --rm -it cli-oauth-test bash
|
|
12
|
+
# claude # Run mock Claude CLI
|
|
13
|
+
# codex login # Run mock Codex CLI
|
|
14
|
+
|
|
15
|
+
FROM node:20-slim
|
|
16
|
+
|
|
17
|
+
# Install dependencies
|
|
18
|
+
RUN apt-get update && apt-get install -y \
|
|
19
|
+
bash \
|
|
20
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
21
|
+
|
|
22
|
+
WORKDIR /app
|
|
23
|
+
|
|
24
|
+
# Copy mock CLI script
|
|
25
|
+
COPY mock-cli.sh /usr/local/bin/mock-cli
|
|
26
|
+
RUN chmod +x /usr/local/bin/mock-cli
|
|
27
|
+
|
|
28
|
+
# Create symlinks for each provider CLI
|
|
29
|
+
# The mock-cli.sh auto-detects the provider from $0
|
|
30
|
+
RUN ln -s /usr/local/bin/mock-cli /usr/local/bin/claude && \
|
|
31
|
+
ln -s /usr/local/bin/mock-cli /usr/local/bin/codex && \
|
|
32
|
+
ln -s /usr/local/bin/mock-cli /usr/local/bin/gemini && \
|
|
33
|
+
ln -s /usr/local/bin/mock-cli /usr/local/bin/opencode && \
|
|
34
|
+
ln -s /usr/local/bin/mock-cli /usr/local/bin/droid
|
|
35
|
+
|
|
36
|
+
# Copy test files
|
|
37
|
+
COPY ci-test-runner.ts /app/
|
|
38
|
+
COPY package.json /app/
|
|
39
|
+
|
|
40
|
+
# Install test dependencies
|
|
41
|
+
RUN npm install
|
|
42
|
+
|
|
43
|
+
# Default command runs the CI tests
|
|
44
|
+
CMD ["npx", "tsx", "/app/ci-test-runner.ts"]
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# CLI OAuth Flow Test Container - Real CLIs
|
|
2
|
+
#
|
|
3
|
+
# This container installs the actual AI provider CLIs and tests
|
|
4
|
+
# URL extraction from their OAuth flows.
|
|
5
|
+
#
|
|
6
|
+
# Installation methods match deploy/workspace/Dockerfile to ensure consistency.
|
|
7
|
+
#
|
|
8
|
+
# Usage:
|
|
9
|
+
# docker build -f Dockerfile.real -t cli-oauth-test-real scripts/test-cli-auth/
|
|
10
|
+
# docker run --rm cli-oauth-test-real
|
|
11
|
+
#
|
|
12
|
+
# For interactive testing:
|
|
13
|
+
# docker run --rm -it cli-oauth-test-real bash
|
|
14
|
+
|
|
15
|
+
FROM node:20-slim
|
|
16
|
+
|
|
17
|
+
# Install system dependencies (matches deploy/workspace/Dockerfile)
|
|
18
|
+
RUN apt-get update && apt-get install -y \
|
|
19
|
+
bash \
|
|
20
|
+
ca-certificates \
|
|
21
|
+
curl \
|
|
22
|
+
git \
|
|
23
|
+
python3 \
|
|
24
|
+
make \
|
|
25
|
+
g++ \
|
|
26
|
+
jq \
|
|
27
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
28
|
+
|
|
29
|
+
WORKDIR /app
|
|
30
|
+
|
|
31
|
+
# Install npm-based CLIs globally as root (npm -g requires root)
|
|
32
|
+
RUN npm install -g @openai/codex || echo "Codex install failed"
|
|
33
|
+
RUN npm install -g @google/gemini-cli || echo "Gemini install failed"
|
|
34
|
+
RUN npm install -g opencode-ai@latest || echo "OpenCode install failed"
|
|
35
|
+
|
|
36
|
+
# Create test user (CLIs install to ~/.local/bin)
|
|
37
|
+
RUN useradd -m -u 1001 testuser
|
|
38
|
+
RUN chown -R testuser:testuser /app
|
|
39
|
+
USER testuser
|
|
40
|
+
|
|
41
|
+
# Install AI CLIs as testuser (these install scripts write to ~/.local/bin)
|
|
42
|
+
|
|
43
|
+
# Claude - uses official install script
|
|
44
|
+
RUN curl -fsSL https://claude.ai/install.sh | bash || echo "Claude install failed"
|
|
45
|
+
# Note: We don't pre-seed Claude config - we want to test the full interactive flow
|
|
46
|
+
# including the dark mode and auth method prompts
|
|
47
|
+
|
|
48
|
+
# Note: OpenCode is installed as root above via npm
|
|
49
|
+
|
|
50
|
+
# Droid - uses official install script
|
|
51
|
+
RUN curl -fsSL https://app.factory.ai/cli | sh || echo "Droid install failed"
|
|
52
|
+
|
|
53
|
+
# Add user's local bin to PATH
|
|
54
|
+
ENV PATH="/home/testuser/.local/bin:$PATH"
|
|
55
|
+
|
|
56
|
+
# Copy test files and source dependencies
|
|
57
|
+
# Context is repo root, so paths are relative to that
|
|
58
|
+
COPY --chown=testuser:testuser scripts/test-cli-auth/ci-test-real-clis.ts /app/
|
|
59
|
+
COPY --chown=testuser:testuser scripts/test-cli-auth/package.json /app/
|
|
60
|
+
|
|
61
|
+
# Copy source modules maintaining the relative path structure
|
|
62
|
+
# cli-pty-runner.ts imports from '../../shared/cli-auth-config.js'
|
|
63
|
+
# So we need: /app/src/cloud/api/cli-pty-runner.ts -> /app/src/shared/cli-auth-config.ts
|
|
64
|
+
COPY --chown=testuser:testuser src/cloud/api/cli-pty-runner.ts /app/src/cloud/api/
|
|
65
|
+
COPY --chown=testuser:testuser src/shared/cli-auth-config.ts /app/src/shared/
|
|
66
|
+
|
|
67
|
+
# Install test dependencies
|
|
68
|
+
RUN npm install
|
|
69
|
+
|
|
70
|
+
# Verify which CLIs are installed
|
|
71
|
+
RUN echo "=== Installed CLIs ===" && \
|
|
72
|
+
(which claude && claude --version 2>&1 | head -1) || echo "claude: not found" && \
|
|
73
|
+
(which codex && codex --version 2>&1 | head -1) || echo "codex: not found" && \
|
|
74
|
+
(which gemini && gemini --version 2>&1 | head -1) || echo "gemini: not found" && \
|
|
75
|
+
(which opencode && opencode --version 2>&1 | head -1) || echo "opencode: not found" && \
|
|
76
|
+
(which droid && droid --version 2>&1 | head -1) || echo "droid: not found"
|
|
77
|
+
|
|
78
|
+
# Default command runs the CI tests
|
|
79
|
+
CMD ["npx", "tsx", "/app/ci-test-real-clis.ts"]
|