agent-relay 1.2.0 → 1.2.3
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/.gitattributes +3 -0
- package/.nvmrc +1 -0
- package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.json +65 -0
- package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.md +37 -0
- package/.trajectories/completed/2026-01/traj_1k5if5snst2e.json +65 -0
- package/.trajectories/completed/2026-01/traj_1k5if5snst2e.md +37 -0
- package/.trajectories/completed/2026-01/traj_1rp3rges5811.json +49 -0
- package/.trajectories/completed/2026-01/traj_1rp3rges5811.md +31 -0
- package/.trajectories/completed/2026-01/traj_22bhyulruouw.json +113 -0
- package/.trajectories/completed/2026-01/traj_22bhyulruouw.md +57 -0
- package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.json +53 -0
- package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.md +32 -0
- package/.trajectories/completed/2026-01/traj_3t0440mjeunc.json +26 -0
- package/.trajectories/completed/2026-01/traj_3t0440mjeunc.md +6 -0
- package/.trajectories/completed/2026-01/traj_45x9494d9xnr.json +47 -0
- package/.trajectories/completed/2026-01/traj_45x9494d9xnr.md +32 -0
- package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.json +53 -0
- package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.md +32 -0
- package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.json +59 -0
- package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.md +33 -0
- package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.json +53 -0
- package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.md +32 -0
- package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.json +48 -0
- package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.md +24 -0
- package/.trajectories/completed/2026-01/traj_7ludwvz45veh.json +209 -0
- package/.trajectories/completed/2026-01/traj_7ludwvz45veh.md +97 -0
- package/.trajectories/completed/2026-01/traj_9921cuhel0pj.json +48 -0
- package/.trajectories/completed/2026-01/traj_9921cuhel0pj.md +24 -0
- package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.json +49 -0
- package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.md +23 -0
- package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.json +53 -0
- package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.md +32 -0
- package/.trajectories/completed/2026-01/traj_cxofprm2m2en.json +49 -0
- package/.trajectories/completed/2026-01/traj_cxofprm2m2en.md +31 -0
- package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.json +26 -0
- package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.md +6 -0
- package/.trajectories/completed/2026-01/traj_dfuvww9pege5.json +59 -0
- package/.trajectories/completed/2026-01/traj_dfuvww9pege5.md +37 -0
- package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.json +77 -0
- package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.md +42 -0
- package/.trajectories/completed/2026-01/traj_gjdre5voouod.json +53 -0
- package/.trajectories/completed/2026-01/traj_gjdre5voouod.md +32 -0
- package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.json +25 -0
- package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.md +15 -0
- package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.json +101 -0
- package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.md +44 -0
- package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.json +22 -0
- package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.md +5 -0
- package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.json +53 -0
- package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.md +32 -0
- package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.json +25 -0
- package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.md +15 -0
- package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.json +53 -0
- package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.md +32 -0
- package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.json +53 -0
- package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.md +32 -0
- package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.json +48 -0
- package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.md +24 -0
- package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.json +53 -0
- package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.md +32 -0
- package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.json +77 -0
- package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.md +42 -0
- package/.trajectories/completed/2026-01/traj_qft54mi7nfor.json +53 -0
- package/.trajectories/completed/2026-01/traj_qft54mi7nfor.md +32 -0
- package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.json +83 -0
- package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.md +47 -0
- package/.trajectories/completed/2026-01/traj_rd9toccj18a0.json +59 -0
- package/.trajectories/completed/2026-01/traj_rd9toccj18a0.md +37 -0
- package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.json +48 -0
- package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.md +16 -0
- package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.json +59 -0
- package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.md +37 -0
- package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.json +53 -0
- package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.md +32 -0
- package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.json +84 -0
- package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.md +109 -0
- package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.json +53 -0
- package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.md +32 -0
- package/.trajectories/completed/2026-01/traj_v87hypnongqx.json +71 -0
- package/.trajectories/completed/2026-01/traj_v87hypnongqx.md +42 -0
- package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.json +53 -0
- package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.md +32 -0
- package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.json +20 -0
- package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.md +6 -0
- package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.json +175 -0
- package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.md +82 -0
- package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.json +47 -0
- package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.md +32 -0
- package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.json +59 -0
- package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.md +37 -0
- package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.json +53 -0
- package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.md +32 -0
- package/.trajectories/index.json +314 -0
- package/ARCHITECTURE.md +1245 -0
- package/TESTING.md +278 -0
- package/deploy/init-db.sql +5 -0
- package/deploy/scripts/setup-fly-workspaces.sh +69 -0
- package/deploy/scripts/setup-railway.sh +75 -0
- package/deploy/workspace/entrypoint-browser.sh +118 -0
- package/deploy/workspace/entrypoint.sh +348 -0
- package/deploy/workspace/git-credential-relay +111 -0
- package/dist/cli/index.js +218 -1
- package/dist/cloud/api/billing.js +30 -9
- package/dist/cloud/api/codex-auth-helper.d.ts +15 -0
- package/dist/cloud/api/codex-auth-helper.js +100 -0
- package/dist/cloud/api/git.js +24 -3
- package/dist/cloud/api/onboarding.js +15 -2
- package/dist/cloud/api/repos.d.ts +1 -0
- package/dist/cloud/api/repos.js +186 -0
- package/dist/cloud/api/webhooks.d.ts +1 -0
- package/dist/cloud/api/webhooks.js +149 -0
- package/dist/cloud/api/workspaces.js +97 -6
- package/dist/cloud/billing/plans.js +19 -19
- package/dist/cloud/provisioner/index.d.ts +32 -0
- package/dist/cloud/provisioner/index.js +362 -21
- package/dist/cloud/server.js +6 -1
- package/dist/cloud/services/nango.d.ts +60 -0
- package/dist/cloud/services/nango.js +153 -0
- package/dist/cloud/services/planLimits.d.ts +22 -0
- package/dist/cloud/services/planLimits.js +58 -5
- package/dist/dashboard/out/404.html +1 -1
- package/dist/dashboard/out/_next/static/chunks/699-3b1cd6618a45d259.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/766-1f2dd8cb7f766b0b.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-3fdfa60e53f2810d.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/app/page-e6381e5a6e1fbcfd.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-3538dfe0ffe984b8.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/history/{page-56a8b4616a90dc43.js → page-abb9ab2d329f56e9.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/app/layout-c0d118c0f92d969c.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/login/{page-3eac37ea6f5dd153.js → page-c22d080201cbd9fb.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/app/metrics/{page-1081dd190a331a91.js → page-67a3e98d9a43a6ed.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/app/{page-daf87e86f783f980.js → page-77e9c65420a06cfb.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/app/pricing/page-b08ed1c34d14434a.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/providers/page-e88bc117ef7671c3.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/signup/{page-fee4ed1709070bcd.js → page-68d34f50baa8ab6b.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/{main-app-5d692157a8eb1fd9.js → main-app-6e8e8d3ef4e0192a.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/{main-97850e03d723ea8c.js → main-ed4e1fb6f29c34cf.js} +1 -1
- package/dist/dashboard/out/_next/static/css/7c3ae9e8617d42a5.css +1 -0
- package/dist/dashboard/out/app/onboarding.html +1 -0
- package/dist/dashboard/out/app/onboarding.txt +7 -0
- package/dist/dashboard/out/app.html +1 -1
- package/dist/dashboard/out/app.txt +2 -2
- package/dist/dashboard/out/connect-repos.html +1 -1
- package/dist/dashboard/out/connect-repos.txt +2 -2
- package/dist/dashboard/out/history.html +1 -1
- package/dist/dashboard/out/history.txt +2 -2
- package/dist/dashboard/out/index.html +1 -1
- package/dist/dashboard/out/index.txt +2 -2
- package/dist/dashboard/out/login.html +2 -2
- package/dist/dashboard/out/login.txt +2 -2
- package/dist/dashboard/out/metrics.html +1 -1
- package/dist/dashboard/out/metrics.txt +2 -2
- package/dist/dashboard/out/pricing.html +3 -3
- package/dist/dashboard/out/pricing.txt +2 -2
- package/dist/dashboard/out/providers.html +1 -1
- package/dist/dashboard/out/providers.txt +2 -2
- package/dist/dashboard/out/signup.html +2 -2
- package/dist/dashboard/out/signup.txt +2 -2
- package/package.json +2 -11
- package/test-push.txt +1 -0
- package/bin/tmux +0 -0
- package/dist/bridge/config.d.ts.map +0 -1
- package/dist/bridge/config.js.map +0 -1
- package/dist/bridge/index.d.ts.map +0 -1
- package/dist/bridge/index.js.map +0 -1
- package/dist/bridge/multi-project-client.d.ts.map +0 -1
- package/dist/bridge/multi-project-client.js.map +0 -1
- package/dist/bridge/shadow-cli.d.ts.map +0 -1
- package/dist/bridge/shadow-cli.js.map +0 -1
- package/dist/bridge/shadow-config.d.ts.map +0 -1
- package/dist/bridge/shadow-config.js.map +0 -1
- package/dist/bridge/spawner.d.ts.map +0 -1
- package/dist/bridge/spawner.js.map +0 -1
- package/dist/bridge/teams-config.d.ts.map +0 -1
- package/dist/bridge/teams-config.js.map +0 -1
- package/dist/bridge/types.d.ts.map +0 -1
- package/dist/bridge/types.js.map +0 -1
- package/dist/bridge/utils.d.ts.map +0 -1
- package/dist/bridge/utils.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/cloud/api/auth.d.ts.map +0 -1
- package/dist/cloud/api/auth.js.map +0 -1
- package/dist/cloud/api/billing.d.ts.map +0 -1
- package/dist/cloud/api/billing.js.map +0 -1
- package/dist/cloud/api/cli-pty-runner.d.ts.map +0 -1
- package/dist/cloud/api/cli-pty-runner.js.map +0 -1
- package/dist/cloud/api/coordinators.d.ts.map +0 -1
- package/dist/cloud/api/coordinators.js.map +0 -1
- package/dist/cloud/api/daemons.d.ts.map +0 -1
- package/dist/cloud/api/daemons.js.map +0 -1
- package/dist/cloud/api/generic-webhooks.d.ts.map +0 -1
- package/dist/cloud/api/generic-webhooks.js.map +0 -1
- package/dist/cloud/api/git.d.ts.map +0 -1
- package/dist/cloud/api/git.js.map +0 -1
- package/dist/cloud/api/github-app.d.ts.map +0 -1
- package/dist/cloud/api/github-app.js.map +0 -1
- package/dist/cloud/api/middleware/planLimits.d.ts.map +0 -1
- package/dist/cloud/api/middleware/planLimits.js.map +0 -1
- package/dist/cloud/api/monitoring.d.ts.map +0 -1
- package/dist/cloud/api/monitoring.js.map +0 -1
- package/dist/cloud/api/nango-auth.d.ts.map +0 -1
- package/dist/cloud/api/nango-auth.js.map +0 -1
- package/dist/cloud/api/onboarding.d.ts.map +0 -1
- package/dist/cloud/api/onboarding.js.map +0 -1
- package/dist/cloud/api/policy.d.ts.map +0 -1
- package/dist/cloud/api/policy.js.map +0 -1
- package/dist/cloud/api/providers.d.ts.map +0 -1
- package/dist/cloud/api/providers.js.map +0 -1
- package/dist/cloud/api/repos.d.ts.map +0 -1
- package/dist/cloud/api/repos.js.map +0 -1
- package/dist/cloud/api/teams.d.ts.map +0 -1
- package/dist/cloud/api/teams.js.map +0 -1
- package/dist/cloud/api/test-helpers.d.ts.map +0 -1
- package/dist/cloud/api/test-helpers.js.map +0 -1
- package/dist/cloud/api/usage.d.ts.map +0 -1
- package/dist/cloud/api/usage.js.map +0 -1
- package/dist/cloud/api/webhooks.d.ts.map +0 -1
- package/dist/cloud/api/webhooks.js.map +0 -1
- package/dist/cloud/api/workspaces.d.ts.map +0 -1
- package/dist/cloud/api/workspaces.js.map +0 -1
- package/dist/cloud/billing/index.d.ts.map +0 -1
- package/dist/cloud/billing/index.js.map +0 -1
- package/dist/cloud/billing/plans.d.ts.map +0 -1
- package/dist/cloud/billing/plans.js.map +0 -1
- package/dist/cloud/billing/service.d.ts.map +0 -1
- package/dist/cloud/billing/service.js.map +0 -1
- package/dist/cloud/billing/types.d.ts.map +0 -1
- package/dist/cloud/billing/types.js.map +0 -1
- package/dist/cloud/config.d.ts.map +0 -1
- package/dist/cloud/config.js.map +0 -1
- package/dist/cloud/db/drizzle.d.ts.map +0 -1
- package/dist/cloud/db/drizzle.js.map +0 -1
- package/dist/cloud/db/index.d.ts.map +0 -1
- package/dist/cloud/db/index.js.map +0 -1
- package/dist/cloud/db/schema.d.ts.map +0 -1
- package/dist/cloud/db/schema.js.map +0 -1
- package/dist/cloud/index.d.ts.map +0 -1
- package/dist/cloud/index.js.map +0 -1
- package/dist/cloud/provisioner/index.d.ts.map +0 -1
- package/dist/cloud/provisioner/index.js.map +0 -1
- package/dist/cloud/server.d.ts.map +0 -1
- package/dist/cloud/server.js.map +0 -1
- package/dist/cloud/services/auto-scaler.d.ts.map +0 -1
- package/dist/cloud/services/auto-scaler.js.map +0 -1
- package/dist/cloud/services/capacity-manager.d.ts.map +0 -1
- package/dist/cloud/services/capacity-manager.js.map +0 -1
- package/dist/cloud/services/ci-agent-spawner.d.ts.map +0 -1
- package/dist/cloud/services/ci-agent-spawner.js.map +0 -1
- package/dist/cloud/services/coordinator.d.ts.map +0 -1
- package/dist/cloud/services/coordinator.js.map +0 -1
- package/dist/cloud/services/index.d.ts.map +0 -1
- package/dist/cloud/services/index.js.map +0 -1
- package/dist/cloud/services/mention-handler.d.ts.map +0 -1
- package/dist/cloud/services/mention-handler.js.map +0 -1
- package/dist/cloud/services/nango.d.ts.map +0 -1
- package/dist/cloud/services/nango.js.map +0 -1
- package/dist/cloud/services/persistence.d.ts.map +0 -1
- package/dist/cloud/services/persistence.js.map +0 -1
- package/dist/cloud/services/planLimits.d.ts.map +0 -1
- package/dist/cloud/services/planLimits.js.map +0 -1
- package/dist/cloud/services/scaling-orchestrator.d.ts.map +0 -1
- package/dist/cloud/services/scaling-orchestrator.js.map +0 -1
- package/dist/cloud/services/scaling-policy.d.ts.map +0 -1
- package/dist/cloud/services/scaling-policy.js.map +0 -1
- package/dist/cloud/vault/index.d.ts.map +0 -1
- package/dist/cloud/vault/index.js.map +0 -1
- package/dist/cloud/webhooks/index.d.ts.map +0 -1
- package/dist/cloud/webhooks/index.js.map +0 -1
- package/dist/cloud/webhooks/parsers/github.d.ts.map +0 -1
- package/dist/cloud/webhooks/parsers/github.js.map +0 -1
- package/dist/cloud/webhooks/parsers/index.d.ts.map +0 -1
- package/dist/cloud/webhooks/parsers/index.js.map +0 -1
- package/dist/cloud/webhooks/parsers/linear.d.ts.map +0 -1
- package/dist/cloud/webhooks/parsers/linear.js.map +0 -1
- package/dist/cloud/webhooks/parsers/slack.d.ts.map +0 -1
- package/dist/cloud/webhooks/parsers/slack.js.map +0 -1
- package/dist/cloud/webhooks/responders/github.d.ts.map +0 -1
- package/dist/cloud/webhooks/responders/github.js.map +0 -1
- package/dist/cloud/webhooks/responders/index.d.ts.map +0 -1
- package/dist/cloud/webhooks/responders/index.js.map +0 -1
- package/dist/cloud/webhooks/responders/linear.d.ts.map +0 -1
- package/dist/cloud/webhooks/responders/linear.js.map +0 -1
- package/dist/cloud/webhooks/responders/slack.d.ts.map +0 -1
- package/dist/cloud/webhooks/responders/slack.js.map +0 -1
- package/dist/cloud/webhooks/router.d.ts.map +0 -1
- package/dist/cloud/webhooks/router.js.map +0 -1
- package/dist/cloud/webhooks/rules-engine.d.ts.map +0 -1
- package/dist/cloud/webhooks/rules-engine.js.map +0 -1
- package/dist/cloud/webhooks/types.d.ts.map +0 -1
- package/dist/cloud/webhooks/types.js.map +0 -1
- package/dist/continuity/formatter.d.ts.map +0 -1
- package/dist/continuity/formatter.js.map +0 -1
- package/dist/continuity/handoff-store.d.ts.map +0 -1
- package/dist/continuity/handoff-store.js.map +0 -1
- package/dist/continuity/index.d.ts.map +0 -1
- package/dist/continuity/index.js.map +0 -1
- package/dist/continuity/ledger-store.d.ts.map +0 -1
- package/dist/continuity/ledger-store.js.map +0 -1
- package/dist/continuity/manager.d.ts.map +0 -1
- package/dist/continuity/manager.js.map +0 -1
- package/dist/continuity/parser.d.ts.map +0 -1
- package/dist/continuity/parser.js.map +0 -1
- package/dist/continuity/types.d.ts.map +0 -1
- package/dist/continuity/types.js.map +0 -1
- package/dist/daemon/agent-manager.d.ts.map +0 -1
- package/dist/daemon/agent-manager.js.map +0 -1
- package/dist/daemon/agent-registry.d.ts.map +0 -1
- package/dist/daemon/agent-registry.js.map +0 -1
- package/dist/daemon/api.d.ts.map +0 -1
- package/dist/daemon/api.js.map +0 -1
- package/dist/daemon/auth.d.ts.map +0 -1
- package/dist/daemon/auth.js.map +0 -1
- package/dist/daemon/cli-auth.d.ts.map +0 -1
- package/dist/daemon/cli-auth.js.map +0 -1
- package/dist/daemon/cloud-sync.d.ts.map +0 -1
- package/dist/daemon/cloud-sync.js.map +0 -1
- package/dist/daemon/connection.d.ts.map +0 -1
- package/dist/daemon/connection.js.map +0 -1
- package/dist/daemon/index.d.ts.map +0 -1
- package/dist/daemon/index.js.map +0 -1
- package/dist/daemon/orchestrator.d.ts.map +0 -1
- package/dist/daemon/orchestrator.js.map +0 -1
- package/dist/daemon/registry.d.ts.map +0 -1
- package/dist/daemon/registry.js.map +0 -1
- package/dist/daemon/router.d.ts.map +0 -1
- package/dist/daemon/router.js.map +0 -1
- package/dist/daemon/server.d.ts.map +0 -1
- package/dist/daemon/server.js.map +0 -1
- package/dist/daemon/services/browser-testing.d.ts.map +0 -1
- package/dist/daemon/services/browser-testing.js.map +0 -1
- package/dist/daemon/services/container-spawner.d.ts.map +0 -1
- package/dist/daemon/services/container-spawner.js.map +0 -1
- package/dist/daemon/types.d.ts.map +0 -1
- package/dist/daemon/types.js.map +0 -1
- package/dist/daemon/workspace-manager.d.ts.map +0 -1
- package/dist/daemon/workspace-manager.js.map +0 -1
- package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-dc2e3a1a22478efc.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/pricing/page-4d72d5a5d8a9b618.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +0 -1
- package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +0 -1
- package/dist/dashboard-server/metrics.d.ts.map +0 -1
- package/dist/dashboard-server/metrics.js.map +0 -1
- package/dist/dashboard-server/needs-attention.d.ts.map +0 -1
- package/dist/dashboard-server/needs-attention.js.map +0 -1
- package/dist/dashboard-server/server.d.ts.map +0 -1
- package/dist/dashboard-server/server.js.map +0 -1
- package/dist/dashboard-server/start.d.ts.map +0 -1
- package/dist/dashboard-server/start.js.map +0 -1
- package/dist/hooks/emitter.d.ts.map +0 -1
- package/dist/hooks/emitter.js.map +0 -1
- package/dist/hooks/inbox-check/hook.d.ts.map +0 -1
- package/dist/hooks/inbox-check/hook.js.map +0 -1
- package/dist/hooks/inbox-check/index.d.ts.map +0 -1
- package/dist/hooks/inbox-check/index.js.map +0 -1
- package/dist/hooks/inbox-check/types.d.ts.map +0 -1
- package/dist/hooks/inbox-check/types.js.map +0 -1
- package/dist/hooks/inbox-check/utils.d.ts.map +0 -1
- package/dist/hooks/inbox-check/utils.js.map +0 -1
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/registry.d.ts.map +0 -1
- package/dist/hooks/registry.js.map +0 -1
- package/dist/hooks/trajectory-hooks.d.ts.map +0 -1
- package/dist/hooks/trajectory-hooks.js.map +0 -1
- package/dist/hooks/types.d.ts.map +0 -1
- package/dist/hooks/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/memory/adapters/index.d.ts.map +0 -1
- package/dist/memory/adapters/index.js.map +0 -1
- package/dist/memory/adapters/inmemory.d.ts.map +0 -1
- package/dist/memory/adapters/inmemory.js.map +0 -1
- package/dist/memory/adapters/supermemory.d.ts.map +0 -1
- package/dist/memory/adapters/supermemory.js.map +0 -1
- package/dist/memory/factory.d.ts.map +0 -1
- package/dist/memory/factory.js.map +0 -1
- package/dist/memory/index.d.ts.map +0 -1
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/memory-hooks.d.ts.map +0 -1
- package/dist/memory/memory-hooks.js.map +0 -1
- package/dist/memory/service.d.ts.map +0 -1
- package/dist/memory/service.js.map +0 -1
- package/dist/memory/types.d.ts.map +0 -1
- package/dist/memory/types.js.map +0 -1
- package/dist/policy/agent-policy.d.ts.map +0 -1
- package/dist/policy/agent-policy.js.map +0 -1
- package/dist/policy/cloud-policy-fetcher.d.ts.map +0 -1
- package/dist/policy/cloud-policy-fetcher.js.map +0 -1
- package/dist/protocol/framing.d.ts.map +0 -1
- package/dist/protocol/framing.js.map +0 -1
- package/dist/protocol/index.d.ts.map +0 -1
- package/dist/protocol/index.js.map +0 -1
- package/dist/protocol/types.d.ts.map +0 -1
- package/dist/protocol/types.js.map +0 -1
- package/dist/resiliency/context-persistence.d.ts.map +0 -1
- package/dist/resiliency/context-persistence.js.map +0 -1
- package/dist/resiliency/crash-insights.d.ts.map +0 -1
- package/dist/resiliency/crash-insights.js.map +0 -1
- package/dist/resiliency/gossip-health.d.ts.map +0 -1
- package/dist/resiliency/gossip-health.js.map +0 -1
- package/dist/resiliency/health-monitor.d.ts.map +0 -1
- package/dist/resiliency/health-monitor.js.map +0 -1
- package/dist/resiliency/index.d.ts.map +0 -1
- package/dist/resiliency/index.js.map +0 -1
- package/dist/resiliency/leader-watchdog.d.ts.map +0 -1
- package/dist/resiliency/leader-watchdog.js.map +0 -1
- package/dist/resiliency/logger.d.ts.map +0 -1
- package/dist/resiliency/logger.js.map +0 -1
- package/dist/resiliency/memory-monitor.d.ts.map +0 -1
- package/dist/resiliency/memory-monitor.js.map +0 -1
- package/dist/resiliency/metrics.d.ts.map +0 -1
- package/dist/resiliency/metrics.js.map +0 -1
- package/dist/resiliency/provider-context.d.ts.map +0 -1
- package/dist/resiliency/provider-context.js.map +0 -1
- package/dist/resiliency/stateless-lead.d.ts.map +0 -1
- package/dist/resiliency/stateless-lead.js.map +0 -1
- package/dist/resiliency/supervisor.d.ts.map +0 -1
- package/dist/resiliency/supervisor.js.map +0 -1
- package/dist/shared/cli-auth-config.d.ts.map +0 -1
- package/dist/shared/cli-auth-config.js.map +0 -1
- package/dist/state/agent-state.d.ts.map +0 -1
- package/dist/state/agent-state.js.map +0 -1
- package/dist/storage/adapter.d.ts.map +0 -1
- package/dist/storage/adapter.js.map +0 -1
- package/dist/storage/sqlite-adapter.d.ts.map +0 -1
- package/dist/storage/sqlite-adapter.js.map +0 -1
- package/dist/trajectory/config.d.ts.map +0 -1
- package/dist/trajectory/config.js.map +0 -1
- package/dist/trajectory/index.d.ts.map +0 -1
- package/dist/trajectory/index.js.map +0 -1
- package/dist/trajectory/integration.d.ts.map +0 -1
- package/dist/trajectory/integration.js.map +0 -1
- package/dist/utils/agent-config.d.ts.map +0 -1
- package/dist/utils/agent-config.js.map +0 -1
- package/dist/utils/command-resolver.d.ts.map +0 -1
- package/dist/utils/command-resolver.js.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/name-generator.d.ts.map +0 -1
- package/dist/utils/name-generator.js.map +0 -1
- package/dist/utils/project-namespace.d.ts.map +0 -1
- package/dist/utils/project-namespace.js.map +0 -1
- package/dist/utils/tmux-resolver.d.ts.map +0 -1
- package/dist/utils/tmux-resolver.js.map +0 -1
- package/dist/utils/update-checker.d.ts.map +0 -1
- package/dist/utils/update-checker.js.map +0 -1
- package/dist/wrapper/client.d.ts.map +0 -1
- package/dist/wrapper/client.js.map +0 -1
- package/dist/wrapper/inbox.d.ts.map +0 -1
- package/dist/wrapper/inbox.js.map +0 -1
- package/dist/wrapper/index.d.ts.map +0 -1
- package/dist/wrapper/index.js.map +0 -1
- package/dist/wrapper/parser.d.ts.map +0 -1
- package/dist/wrapper/parser.js.map +0 -1
- package/dist/wrapper/pty-wrapper.d.ts.map +0 -1
- package/dist/wrapper/pty-wrapper.js.map +0 -1
- package/dist/wrapper/shared.d.ts.map +0 -1
- package/dist/wrapper/shared.js.map +0 -1
- package/dist/wrapper/tmux-wrapper.d.ts.map +0 -1
- package/dist/wrapper/tmux-wrapper.js.map +0 -1
- package/docs/AGENTS.md +0 -513
- package/docs/ARCHITECTURE_DECISIONS.md +0 -175
- package/docs/CLOUD-ARCHITECTURE.md +0 -804
- package/docs/CLOUD-ONBOARDING-DESIGN.md +0 -1983
- package/docs/CONTRIBUTING.md +0 -151
- package/docs/HOOKS_API.md +0 -394
- package/docs/INTEGRATION-GUIDE.md +0 -926
- package/docs/PROTOCOL.md +0 -325
- package/docs/WRAPPER_EVENTS.md +0 -358
- package/docs/agent-policy-snippet.md +0 -40
- package/docs/agent-relay-protocol.md +0 -238
- package/docs/agent-relay-snippet.md +0 -174
- package/docs/archive/CHANGELOG.md +0 -11
- package/docs/archive/CLI-SIMPLIFICATION-COMPLETE.md +0 -48
- package/docs/archive/DESIGN_BRIDGE_STAFFING.md +0 -878
- package/docs/archive/DESIGN_V2.md +0 -1079
- package/docs/archive/EXECUTIVE_SUMMARY.md +0 -358
- package/docs/archive/MONETIZATION.md +0 -1679
- package/docs/archive/PROPOSAL-trajectories.md +0 -1582
- package/docs/archive/ROADMAP.md +0 -329
- package/docs/archive/SCALING_ANALYSIS.md +0 -280
- package/docs/archive/TESTING_PRESENCE_FEATURES.md +0 -327
- package/docs/archive/TMUX_IMPLEMENTATION_NOTES.md +0 -364
- package/docs/archive/TMUX_IMPROVEMENTS.md +0 -968
- package/docs/archive/dashboard-v2-plan.md +0 -179
- package/docs/archive/removable-code-analysis.md +0 -24
- package/docs/competitive/GASTOWN.md +0 -451
- package/docs/competitive/MCP_AGENT_MAIL.md +0 -389
- package/docs/competitive/OVERVIEW.md +0 -898
- package/docs/competitive/README.md +0 -34
- package/docs/competitive/TMUX_ORCHESTRATOR.md +0 -605
- package/docs/dashboard.png +0 -0
- package/docs/design/ci-failure-webhooks.md +0 -812
- package/docs/design/comprehensive-integrations.md +0 -238
- package/docs/design/e2b-sandbox-integration.md +0 -504
- package/docs/design/github-app-permissions.md +0 -264
- package/docs/guides/CLOUD.md +0 -236
- package/docs/guides/LOCAL.md +0 -535
- package/docs/guides/SELF-HOSTED.md +0 -494
- package/docs/local-testing.md +0 -428
- package/docs/proposals/continuous-claude-integration.md +0 -622
- package/docs/proposals/custom-commands.md +0 -368
- package/docs/proposals/shadow-as-subagent.md +0 -765
- package/docs/proposals/slack-bot-integration.md +0 -1457
- package/docs/tasks/global-skills-system.tasks.md +0 -230
- package/docs/tasks/webhook-integrations.tasks.md +0 -184
- package/docs/tasks/workspace-capabilities.tasks.md +0 -121
- package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +0 -366
- package/scripts/cloud-setup.sh +0 -96
- package/scripts/dev/PUBLIC_RELEASE_PLAN.md +0 -88
- package/scripts/dev/dev-team-setup.sh +0 -431
- package/scripts/e2e-test.sh +0 -119
- package/scripts/games/game-protocol.md +0 -79
- package/scripts/games/hearts-setup.sh +0 -264
- package/scripts/manual-qa.sh +0 -293
- package/scripts/run-cloud-qa.sh +0 -220
- package/scripts/test-cli-auth/Dockerfile +0 -44
- package/scripts/test-cli-auth/Dockerfile.real +0 -79
- package/scripts/test-cli-auth/README.md +0 -286
- package/scripts/test-cli-auth/ci-test-real-clis.ts +0 -251
- package/scripts/test-cli-auth/ci-test-runner.ts +0 -263
- package/scripts/test-cli-auth/mock-cli.sh +0 -147
- package/scripts/test-cli-auth/package.json +0 -14
- package/scripts/test-cli-auth/test-oauth-flow.ts +0 -220
- package/scripts/test-pty-input-auto.js +0 -222
- package/scripts/test-pty-input.js +0 -150
- package/scripts/tictactoe-setup.sh +0 -181
- /package/dist/dashboard/out/_next/static/chunks/{117-b100311aff8d5c61.js → 117-f7b8ab0809342e77.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{648-a13d3c2b1be45466.js → 648-5cc6e1921389a58a.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{724-73c1ee5f60abe860.js → 724-2dae7627550ab88f.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-a4973f3e3c82fb67.js → page-53b8a69f76db17d0.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-bf46c09eb57e019c.js → fd9d1056-609918ca7b6280bb.js} +0 -0
- /package/dist/dashboard/out/_next/static/{H5aWG0udPB4iOUIl_gytz → wPgKJtcOmTFLpUncDg16A}/_buildManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/{H5aWG0udPB4iOUIl_gytz → wPgKJtcOmTFLpUncDg16A}/_ssgManifest.js +0 -0
package/scripts/run-cloud-qa.sh
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
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 "=========================================="
|
|
@@ -1,44 +0,0 @@
|
|
|
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"]
|
|
@@ -1,79 +0,0 @@
|
|
|
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"]
|
|
@@ -1,286 +0,0 @@
|
|
|
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
|