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,286 @@
|
|
|
1
|
+
# CLI OAuth Flow Testing
|
|
2
|
+
|
|
3
|
+
This directory contains tools for testing and validating the CLI-based OAuth authentication flow for AI providers.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Make mock CLI executable
|
|
9
|
+
chmod +x scripts/test-cli-auth/mock-cli.sh
|
|
10
|
+
|
|
11
|
+
# Run all integration tests
|
|
12
|
+
npx tsx scripts/test-cli-auth/test-oauth-flow.ts
|
|
13
|
+
|
|
14
|
+
# Test a specific provider
|
|
15
|
+
npx tsx scripts/test-cli-auth/test-oauth-flow.ts anthropic
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Architecture
|
|
19
|
+
|
|
20
|
+
The CLI OAuth flow works as follows:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
|
|
24
|
+
│ Dashboard UI │─────▶│ Onboarding │─────▶│ CLI via PTY │
|
|
25
|
+
│ (React) │ │ API │ │ (node-pty) │
|
|
26
|
+
└─────────────────┘ └──────────────┘ └─────────────────┘
|
|
27
|
+
▲ │ │
|
|
28
|
+
│ │ ▼
|
|
29
|
+
│ │ ┌─────────────────┐
|
|
30
|
+
│ │ │ Interactive │
|
|
31
|
+
│ │◀──────────────│ Prompts │
|
|
32
|
+
│ │ auto-respond └─────────────────┘
|
|
33
|
+
│ │ │
|
|
34
|
+
│ │ ▼
|
|
35
|
+
│ │ ┌─────────────────┐
|
|
36
|
+
│ │ │ Auth URL │
|
|
37
|
+
│◀─────────────────────┼───────────────│ Output │
|
|
38
|
+
│ (opens popup) │ └─────────────────┘
|
|
39
|
+
│ │ │
|
|
40
|
+
▼ │ ▼
|
|
41
|
+
┌─────────────────┐ │ ┌─────────────────┐
|
|
42
|
+
│ OAuth Popup │ │ │ Success │
|
|
43
|
+
│ (Browser) │────────────┼──────────────▶│ Detection │
|
|
44
|
+
└─────────────────┘ │ └─────────────────┘
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Adding a New Provider
|
|
48
|
+
|
|
49
|
+
### 1. Define the CLI Configuration
|
|
50
|
+
|
|
51
|
+
Add a new entry to `CLI_AUTH_CONFIG` in `src/cloud/api/onboarding.ts`:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
export const CLI_AUTH_CONFIG: Record<string, CLIAuthConfig> = {
|
|
55
|
+
// ... existing providers
|
|
56
|
+
|
|
57
|
+
newprovider: {
|
|
58
|
+
// Required: CLI command to run
|
|
59
|
+
command: 'newcli',
|
|
60
|
+
|
|
61
|
+
// Required: Command arguments
|
|
62
|
+
args: ['auth', 'login'],
|
|
63
|
+
|
|
64
|
+
// Required: Pattern to extract auth URL (must have capture group)
|
|
65
|
+
urlPattern: /(https:\/\/[^\s]+)/,
|
|
66
|
+
|
|
67
|
+
// Optional: Path to credentials file after auth
|
|
68
|
+
credentialPath: '~/.newcli/credentials.json',
|
|
69
|
+
|
|
70
|
+
// Required: Display name for UI
|
|
71
|
+
displayName: 'NewProvider',
|
|
72
|
+
|
|
73
|
+
// Required: How long to wait for URL (ms)
|
|
74
|
+
waitTimeout: 3000,
|
|
75
|
+
|
|
76
|
+
// Required: Interactive prompts to auto-respond to
|
|
77
|
+
prompts: [
|
|
78
|
+
{
|
|
79
|
+
pattern: /do you trust this/i,
|
|
80
|
+
response: 'y\r',
|
|
81
|
+
delay: 100,
|
|
82
|
+
description: 'Trust prompt',
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
|
|
86
|
+
// Required: Success indicators
|
|
87
|
+
successPatterns: [
|
|
88
|
+
/success/i,
|
|
89
|
+
/authenticated/i,
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 2. Add Mock CLI Behavior
|
|
96
|
+
|
|
97
|
+
Update `scripts/test-cli-auth/mock-cli.sh` with the new provider's interactive flow:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
newprovider)
|
|
101
|
+
echo -e "${BLUE}NewProvider CLI${NC}"
|
|
102
|
+
sleep "$DELAY"
|
|
103
|
+
|
|
104
|
+
echo -e "Do you trust this directory? [y/N] "
|
|
105
|
+
read -r -n 1 response 2>/dev/null || true
|
|
106
|
+
echo ""
|
|
107
|
+
|
|
108
|
+
echo -e "Auth URL:"
|
|
109
|
+
echo -e "${GREEN}https://newprovider.com/auth?session=test${NC}"
|
|
110
|
+
|
|
111
|
+
read -r -t 30 2>/dev/null || true
|
|
112
|
+
echo -e "${GREEN}Authenticated!${NC}"
|
|
113
|
+
;;
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 3. Add Unit Tests
|
|
117
|
+
|
|
118
|
+
Add tests to `src/cloud/api/onboarding.test.ts`:
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
describe('newprovider', () => {
|
|
122
|
+
const config = CLI_AUTH_CONFIG.newprovider;
|
|
123
|
+
|
|
124
|
+
it('has correct command and args', () => {
|
|
125
|
+
expect(config.command).toBe('newcli');
|
|
126
|
+
expect(config.args).toEqual(['auth', 'login']);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
it('extracts auth URL from output', () => {
|
|
130
|
+
const output = 'Visit https://newprovider.com/auth?id=xxx';
|
|
131
|
+
const match = output.match(config.urlPattern);
|
|
132
|
+
expect(match![1]).toContain('https://newprovider.com/auth');
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// Test each prompt handler
|
|
136
|
+
describe('prompt handlers', () => {
|
|
137
|
+
it('detects trust prompt', () => {
|
|
138
|
+
const prompt = findMatchingPrompt(
|
|
139
|
+
'Do you trust this directory?',
|
|
140
|
+
config.prompts,
|
|
141
|
+
new Set()
|
|
142
|
+
);
|
|
143
|
+
expect(prompt!.description).toBe('Trust prompt');
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 4. Run Tests
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Unit tests
|
|
153
|
+
npx vitest run src/cloud/api/onboarding.test.ts
|
|
154
|
+
|
|
155
|
+
# Integration tests
|
|
156
|
+
npx tsx scripts/test-cli-auth/test-oauth-flow.ts newprovider
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Provider Checklist
|
|
160
|
+
|
|
161
|
+
When adding or modifying a provider, ensure:
|
|
162
|
+
|
|
163
|
+
- [ ] `command` is the correct CLI binary name
|
|
164
|
+
- [ ] `args` includes any required subcommands (e.g., `['login']`)
|
|
165
|
+
- [ ] `urlPattern` has a capture group `(...)` around the URL
|
|
166
|
+
- [ ] `waitTimeout` is long enough for multi-step prompts
|
|
167
|
+
- [ ] All interactive prompts are handled in `prompts` array
|
|
168
|
+
- [ ] Each prompt has a unique `description` for deduplication
|
|
169
|
+
- [ ] `successPatterns` cover all success messages the CLI outputs
|
|
170
|
+
- [ ] Mock CLI simulates the real CLI's behavior accurately
|
|
171
|
+
- [ ] Unit tests cover URL extraction and prompt detection
|
|
172
|
+
- [ ] Integration test passes
|
|
173
|
+
|
|
174
|
+
## Testing with Real CLIs
|
|
175
|
+
|
|
176
|
+
For testing with actual CLIs (not mocks), you can:
|
|
177
|
+
|
|
178
|
+
1. **Docker Container Test**: Spin up a container without credentials:
|
|
179
|
+
```bash
|
|
180
|
+
docker run -it --rm node:20 bash
|
|
181
|
+
npm install -g @anthropic-ai/claude-code
|
|
182
|
+
# Run the onboarding flow
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
2. **Fresh VM**: Use a cloud VM with no cached credentials
|
|
186
|
+
|
|
187
|
+
3. **Delete Credentials**: Remove local credential files:
|
|
188
|
+
```bash
|
|
189
|
+
rm -rf ~/.claude
|
|
190
|
+
rm -rf ~/.codex
|
|
191
|
+
# etc.
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Troubleshooting
|
|
195
|
+
|
|
196
|
+
### URL Not Extracted
|
|
197
|
+
- Check if the CLI outputs the URL in expected format
|
|
198
|
+
- Verify the `urlPattern` regex matches the output
|
|
199
|
+
- Increase `waitTimeout` if prompts take longer
|
|
200
|
+
|
|
201
|
+
### Prompts Not Detected
|
|
202
|
+
- Run mock CLI manually to see exact prompt text
|
|
203
|
+
- Check regex patterns are case-insensitive (`/i` flag)
|
|
204
|
+
- Ensure ANSI codes are being stripped before matching
|
|
205
|
+
|
|
206
|
+
### Success Not Detected
|
|
207
|
+
- Verify CLI outputs one of the success patterns
|
|
208
|
+
- Check for typos in pattern (e.g., `logged in` vs `loggedin`)
|
|
209
|
+
- Add new patterns if CLI uses different success messages
|
|
210
|
+
|
|
211
|
+
## CI Integration
|
|
212
|
+
|
|
213
|
+
### GitHub Actions
|
|
214
|
+
|
|
215
|
+
The workflow `.github/workflows/cli-oauth-test.yml` runs:
|
|
216
|
+
|
|
217
|
+
1. **On every push/PR** that modifies:
|
|
218
|
+
- `src/cloud/api/onboarding.ts`
|
|
219
|
+
- `scripts/test-cli-auth/**`
|
|
220
|
+
|
|
221
|
+
2. **Weekly schedule** (Sundays at midnight):
|
|
222
|
+
- Catches provider CLI changes early
|
|
223
|
+
- Auto-creates GitHub issues on failure
|
|
224
|
+
|
|
225
|
+
### Running CI Tests Locally
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# Build the test container with REAL CLIs (recommended)
|
|
229
|
+
docker build -f scripts/test-cli-auth/Dockerfile.real \
|
|
230
|
+
-t cli-oauth-test-real scripts/test-cli-auth/
|
|
231
|
+
|
|
232
|
+
# Run tests against real CLIs
|
|
233
|
+
docker run --rm cli-oauth-test-real
|
|
234
|
+
|
|
235
|
+
# Run with results output
|
|
236
|
+
docker run --rm -v $(pwd)/test-results:/tmp cli-oauth-test-real
|
|
237
|
+
cat test-results/cli-oauth-test-results.json
|
|
238
|
+
|
|
239
|
+
# Interactive debugging
|
|
240
|
+
docker run --rm -it cli-oauth-test-real bash
|
|
241
|
+
claude # Test Claude CLI manually
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Why Real CLIs?
|
|
245
|
+
|
|
246
|
+
Using the actual CLIs instead of mocks:
|
|
247
|
+
- **Catches real changes** in CLI behavior immediately
|
|
248
|
+
- **No maintenance burden** of keeping mocks in sync
|
|
249
|
+
- **Tests the actual code path** users will experience
|
|
250
|
+
- **Detects new prompts** or changed output formats
|
|
251
|
+
|
|
252
|
+
CLIs that aren't installed are skipped (not failed), so tests work even if some providers haven't published CLIs yet.
|
|
253
|
+
|
|
254
|
+
### Test Output Format
|
|
255
|
+
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"timestamp": "2024-01-15T10:30:00.000Z",
|
|
259
|
+
"results": [
|
|
260
|
+
{
|
|
261
|
+
"provider": "anthropic",
|
|
262
|
+
"command": "claude",
|
|
263
|
+
"passed": true,
|
|
264
|
+
"urlExtracted": "https://console.anthropic.com/oauth/...",
|
|
265
|
+
"urlValid": true,
|
|
266
|
+
"promptsHandled": 3,
|
|
267
|
+
"exitCode": 0,
|
|
268
|
+
"duration": 1234
|
|
269
|
+
}
|
|
270
|
+
],
|
|
271
|
+
"summary": {
|
|
272
|
+
"total": 5,
|
|
273
|
+
"passed": 5,
|
|
274
|
+
"failed": 0
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## Files
|
|
280
|
+
|
|
281
|
+
- `mock-cli.sh` - Simulates CLI interactive flows for testing
|
|
282
|
+
- `ci-test-runner.ts` - Docker-based CI test runner
|
|
283
|
+
- `test-oauth-flow.ts` - Local integration test runner
|
|
284
|
+
- `Dockerfile` - Test container definition
|
|
285
|
+
- `package.json` - Test dependencies
|
|
286
|
+
- `README.md` - This documentation
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* CI Test Runner for Real CLI OAuth Flows
|
|
4
|
+
*
|
|
5
|
+
* Tests the actual CLI tools to verify:
|
|
6
|
+
* 1. URL extraction patterns work with real CLI output
|
|
7
|
+
* 2. Prompt detection works with real prompts
|
|
8
|
+
* 3. Auto-responses navigate through the flow correctly
|
|
9
|
+
*
|
|
10
|
+
* Exit codes:
|
|
11
|
+
* 0 - All available CLIs passed
|
|
12
|
+
* 1 - One or more tests failed
|
|
13
|
+
*
|
|
14
|
+
* Note: CLIs that aren't installed are skipped, not failed.
|
|
15
|
+
*
|
|
16
|
+
* IMPORTANT: This test uses the same runCLIAuthViaPTY function as production
|
|
17
|
+
* to ensure the PTY handling logic is consistent.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { execSync } from 'child_process';
|
|
21
|
+
import { writeFileSync } from 'fs';
|
|
22
|
+
|
|
23
|
+
// Import the actual config and PTY runner from cli-pty-runner.ts
|
|
24
|
+
// This ensures tests use the EXACT SAME logic as production
|
|
25
|
+
// In Docker: /app/src/cloud/api/cli-pty-runner.ts (maintains source tree structure)
|
|
26
|
+
import {
|
|
27
|
+
CLI_AUTH_CONFIG,
|
|
28
|
+
runCLIAuthViaPTY,
|
|
29
|
+
type PTYAuthResult,
|
|
30
|
+
} from './src/cloud/api/cli-pty-runner.js';
|
|
31
|
+
|
|
32
|
+
interface TestResult {
|
|
33
|
+
provider: string;
|
|
34
|
+
command: string;
|
|
35
|
+
installed: boolean;
|
|
36
|
+
passed: boolean;
|
|
37
|
+
skipped: boolean;
|
|
38
|
+
urlExtracted: string | null;
|
|
39
|
+
promptsDetected: string[];
|
|
40
|
+
promptsResponded: string[];
|
|
41
|
+
successDetected: boolean;
|
|
42
|
+
exitCode: number | null;
|
|
43
|
+
duration: number;
|
|
44
|
+
rawOutput: string;
|
|
45
|
+
error?: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Check if a CLI is installed
|
|
50
|
+
*/
|
|
51
|
+
function isCliInstalled(command: string): boolean {
|
|
52
|
+
try {
|
|
53
|
+
execSync(`which ${command}`, { stdio: 'pipe' });
|
|
54
|
+
return true;
|
|
55
|
+
} catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Test a real CLI's OAuth flow using the shared PTY runner
|
|
62
|
+
*
|
|
63
|
+
* Uses the EXACT SAME runCLIAuthViaPTY function as production to ensure
|
|
64
|
+
* the PTY handling logic is consistent between tests and production.
|
|
65
|
+
*/
|
|
66
|
+
async function testRealCli(providerId: string): Promise<TestResult> {
|
|
67
|
+
const config = CLI_AUTH_CONFIG[providerId];
|
|
68
|
+
if (!config) {
|
|
69
|
+
return {
|
|
70
|
+
provider: providerId,
|
|
71
|
+
command: 'unknown',
|
|
72
|
+
installed: false,
|
|
73
|
+
passed: false,
|
|
74
|
+
skipped: true,
|
|
75
|
+
urlExtracted: null,
|
|
76
|
+
promptsDetected: [],
|
|
77
|
+
promptsResponded: [],
|
|
78
|
+
successDetected: false,
|
|
79
|
+
exitCode: null,
|
|
80
|
+
duration: 0,
|
|
81
|
+
rawOutput: '',
|
|
82
|
+
error: `Unknown provider: ${providerId}`,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const result: TestResult = {
|
|
87
|
+
provider: providerId,
|
|
88
|
+
command: `${config.command} ${config.args.join(' ')}`.trim(),
|
|
89
|
+
installed: isCliInstalled(config.command),
|
|
90
|
+
passed: false,
|
|
91
|
+
skipped: false,
|
|
92
|
+
urlExtracted: null,
|
|
93
|
+
promptsDetected: [],
|
|
94
|
+
promptsResponded: [],
|
|
95
|
+
successDetected: false,
|
|
96
|
+
exitCode: null,
|
|
97
|
+
duration: 0,
|
|
98
|
+
rawOutput: '',
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// Skip if CLI not installed
|
|
102
|
+
if (!result.installed) {
|
|
103
|
+
result.skipped = true;
|
|
104
|
+
result.error = `CLI '${config.command}' not installed`;
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const startTime = Date.now();
|
|
109
|
+
|
|
110
|
+
// Use the shared PTY runner - SAME code as production
|
|
111
|
+
const ptyResult: PTYAuthResult = await runCLIAuthViaPTY(config, {
|
|
112
|
+
onAuthUrl: (url) => {
|
|
113
|
+
result.urlExtracted = url;
|
|
114
|
+
console.log(` [${providerId}] URL found: ${url.substring(0, 60)}...`);
|
|
115
|
+
},
|
|
116
|
+
onPromptHandled: (description) => {
|
|
117
|
+
result.promptsDetected.push(description);
|
|
118
|
+
result.promptsResponded.push(description);
|
|
119
|
+
console.log(` [${providerId}] Responded to: ${description}`);
|
|
120
|
+
},
|
|
121
|
+
onOutput: (data) => {
|
|
122
|
+
result.rawOutput += data;
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
result.duration = Date.now() - startTime;
|
|
127
|
+
result.exitCode = ptyResult.exitCode;
|
|
128
|
+
result.successDetected = ptyResult.success;
|
|
129
|
+
|
|
130
|
+
// Pass if we got a URL (main goal of OAuth flow)
|
|
131
|
+
result.passed = !!result.urlExtracted;
|
|
132
|
+
|
|
133
|
+
if (!result.passed) {
|
|
134
|
+
result.error = ptyResult.error || 'Failed to extract auth URL from CLI output';
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Run tests for all configured providers
|
|
142
|
+
*/
|
|
143
|
+
async function runAllTests() {
|
|
144
|
+
console.log('╔══════════════════════════════════════════════════════════════╗');
|
|
145
|
+
console.log('║ CLI OAuth Flow Tests - Real CLIs ║');
|
|
146
|
+
console.log('╚══════════════════════════════════════════════════════════════╝');
|
|
147
|
+
console.log('');
|
|
148
|
+
|
|
149
|
+
const results: TestResult[] = [];
|
|
150
|
+
const providerIds = Object.keys(CLI_AUTH_CONFIG);
|
|
151
|
+
|
|
152
|
+
for (const providerId of providerIds) {
|
|
153
|
+
const config = CLI_AUTH_CONFIG[providerId];
|
|
154
|
+
console.log(`Testing ${config.displayName} (${providerId})...`);
|
|
155
|
+
|
|
156
|
+
const result = await testRealCli(providerId);
|
|
157
|
+
results.push(result);
|
|
158
|
+
|
|
159
|
+
if (result.skipped) {
|
|
160
|
+
console.log(` ⏭️ SKIPPED: ${result.error}`);
|
|
161
|
+
} else if (result.passed) {
|
|
162
|
+
console.log(` ✅ PASSED`);
|
|
163
|
+
} else {
|
|
164
|
+
console.log(` ❌ FAILED: ${result.error}`);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
console.log(` Installed: ${result.installed ? 'Yes' : 'No'}`);
|
|
168
|
+
if (!result.skipped) {
|
|
169
|
+
console.log(` URL: ${result.urlExtracted ? 'Extracted' : 'NOT FOUND'}`);
|
|
170
|
+
console.log(` Prompts: ${result.promptsResponded.length}/${config.prompts.length} handled`);
|
|
171
|
+
console.log(` Duration: ${result.duration}ms`);
|
|
172
|
+
}
|
|
173
|
+
console.log('');
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Summary
|
|
177
|
+
const installed = results.filter(r => r.installed);
|
|
178
|
+
const skipped = results.filter(r => r.skipped);
|
|
179
|
+
const passed = results.filter(r => r.passed);
|
|
180
|
+
const failed = results.filter(r => !r.passed && !r.skipped);
|
|
181
|
+
|
|
182
|
+
console.log('═══════════════════════════════════════════════════════════════');
|
|
183
|
+
console.log(`Summary:`);
|
|
184
|
+
console.log(` Installed: ${installed.length}/${results.length}`);
|
|
185
|
+
console.log(` Passed: ${passed.length}`);
|
|
186
|
+
console.log(` Failed: ${failed.length}`);
|
|
187
|
+
console.log(` Skipped: ${skipped.length}`);
|
|
188
|
+
console.log('═══════════════════════════════════════════════════════════════');
|
|
189
|
+
|
|
190
|
+
// Write JSON results
|
|
191
|
+
const jsonResults = {
|
|
192
|
+
timestamp: new Date().toISOString(),
|
|
193
|
+
results: results.map(r => ({
|
|
194
|
+
provider: r.provider,
|
|
195
|
+
command: r.command,
|
|
196
|
+
installed: r.installed,
|
|
197
|
+
passed: r.passed,
|
|
198
|
+
skipped: r.skipped,
|
|
199
|
+
urlExtracted: r.urlExtracted ? true : false,
|
|
200
|
+
urlSample: r.urlExtracted?.substring(0, 80),
|
|
201
|
+
promptsDetected: r.promptsDetected,
|
|
202
|
+
promptsResponded: r.promptsResponded,
|
|
203
|
+
exitCode: r.exitCode,
|
|
204
|
+
duration: r.duration,
|
|
205
|
+
error: r.error,
|
|
206
|
+
})),
|
|
207
|
+
summary: {
|
|
208
|
+
total: results.length,
|
|
209
|
+
installed: installed.length,
|
|
210
|
+
passed: passed.length,
|
|
211
|
+
failed: failed.length,
|
|
212
|
+
skipped: skipped.length,
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
try {
|
|
217
|
+
writeFileSync('/tmp/cli-oauth-test-results.json', JSON.stringify(jsonResults, null, 2));
|
|
218
|
+
console.log('\nResults written to /tmp/cli-oauth-test-results.json');
|
|
219
|
+
} catch {
|
|
220
|
+
console.log('\n--- JSON Results ---');
|
|
221
|
+
console.log(JSON.stringify(jsonResults, null, 2));
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Exit with failure only if an installed CLI failed
|
|
225
|
+
// Skipped CLIs don't count as failures
|
|
226
|
+
if (failed.length > 0) {
|
|
227
|
+
console.log('\nFailed CLIs:');
|
|
228
|
+
for (const result of failed) {
|
|
229
|
+
console.log(` - ${result.provider}: ${result.error}`);
|
|
230
|
+
if (result.rawOutput) {
|
|
231
|
+
console.log(` Last 500 chars of output:`);
|
|
232
|
+
console.log(` ${result.rawOutput.slice(-500).replace(/\n/g, '\n ')}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
process.exit(1);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Warn if no CLIs were tested
|
|
239
|
+
if (installed.length === 0) {
|
|
240
|
+
console.log('\n⚠️ WARNING: No CLIs were installed - no actual testing performed!');
|
|
241
|
+
process.exit(0); // Don't fail, but warn
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
console.log('\n✅ All installed CLIs passed!');
|
|
245
|
+
process.exit(0);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
runAllTests().catch((err) => {
|
|
249
|
+
console.error('Test runner failed:', err);
|
|
250
|
+
process.exit(1);
|
|
251
|
+
});
|