agent-relay 1.1.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/README.md +1 -1
- 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/bridge/spawner.d.ts +53 -0
- package/dist/bridge/spawner.js +203 -19
- package/dist/bridge/types.d.ts +12 -0
- package/dist/cli/index.js +618 -5
- package/dist/cloud/api/auth.d.ts +3 -2
- package/dist/cloud/api/auth.js +10 -98
- package/dist/cloud/api/billing.js +30 -9
- package/dist/cloud/api/cli-pty-runner.d.ts +54 -0
- package/dist/cloud/api/cli-pty-runner.js +119 -0
- 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/generic-webhooks.d.ts +8 -0
- package/dist/cloud/api/generic-webhooks.js +129 -0
- package/dist/cloud/api/git.d.ts +8 -0
- package/dist/cloud/api/git.js +152 -0
- package/dist/cloud/api/github-app.d.ts +11 -0
- package/dist/cloud/api/github-app.js +189 -0
- package/dist/cloud/api/middleware/planLimits.d.ts +7 -0
- package/dist/cloud/api/middleware/planLimits.js +39 -1
- package/dist/cloud/api/monitoring.d.ts +11 -0
- package/dist/cloud/api/monitoring.js +578 -0
- package/dist/cloud/api/nango-auth.d.ts +9 -0
- package/dist/cloud/api/nango-auth.js +377 -0
- package/dist/cloud/api/onboarding.d.ts +8 -1
- package/dist/cloud/api/onboarding.js +313 -119
- package/dist/cloud/api/policy.d.ts +8 -0
- package/dist/cloud/api/policy.js +229 -0
- package/dist/cloud/api/providers.js +114 -42
- package/dist/cloud/api/repos.d.ts +1 -0
- package/dist/cloud/api/repos.js +186 -0
- package/dist/cloud/api/test-helpers.d.ts +10 -0
- package/dist/cloud/api/test-helpers.js +575 -0
- package/dist/cloud/api/webhooks.d.ts +8 -0
- package/dist/cloud/api/webhooks.js +645 -0
- package/dist/cloud/api/workspaces.js +320 -12
- package/dist/cloud/billing/plans.js +32 -19
- package/dist/cloud/billing/types.d.ts +9 -3
- package/dist/cloud/config.d.ts +9 -2
- package/dist/cloud/config.js +13 -4
- package/dist/cloud/db/drizzle.d.ts +84 -1
- package/dist/cloud/db/drizzle.js +470 -0
- package/dist/cloud/db/index.d.ts +9 -4
- package/dist/cloud/db/index.js +11 -3
- package/dist/cloud/db/schema.d.ts +3283 -556
- package/dist/cloud/db/schema.js +314 -1
- package/dist/cloud/index.d.ts +1 -0
- package/dist/cloud/index.js +2 -0
- package/dist/cloud/provisioner/index.d.ts +56 -0
- package/dist/cloud/provisioner/index.js +676 -34
- package/dist/cloud/server.d.ts +1 -0
- package/dist/cloud/server.js +362 -13
- package/dist/cloud/services/auto-scaler.d.ts +152 -0
- package/dist/cloud/services/auto-scaler.js +439 -0
- package/dist/cloud/services/capacity-manager.d.ts +148 -0
- package/dist/cloud/services/capacity-manager.js +449 -0
- package/dist/cloud/services/ci-agent-spawner.d.ts +49 -0
- package/dist/cloud/services/ci-agent-spawner.js +373 -0
- package/dist/cloud/services/index.d.ts +12 -0
- package/dist/cloud/services/index.js +15 -0
- package/dist/cloud/services/mention-handler.d.ts +65 -0
- package/dist/cloud/services/mention-handler.js +405 -0
- package/dist/cloud/services/nango.d.ts +186 -0
- package/dist/cloud/services/nango.js +344 -0
- package/dist/cloud/services/persistence.d.ts +131 -0
- package/dist/cloud/services/persistence.js +200 -0
- package/dist/cloud/services/planLimits.d.ts +37 -0
- package/dist/cloud/services/planLimits.js +86 -5
- package/dist/cloud/services/scaling-orchestrator.d.ts +159 -0
- package/dist/cloud/services/scaling-orchestrator.js +502 -0
- package/dist/cloud/services/scaling-policy.d.ts +121 -0
- package/dist/cloud/services/scaling-policy.js +415 -0
- package/dist/cloud/vault/index.js +1 -1
- package/dist/cloud/webhooks/index.d.ts +24 -0
- package/dist/cloud/webhooks/index.js +29 -0
- package/dist/cloud/webhooks/parsers/github.d.ts +8 -0
- package/dist/cloud/webhooks/parsers/github.js +234 -0
- package/dist/cloud/webhooks/parsers/index.d.ts +23 -0
- package/dist/cloud/webhooks/parsers/index.js +30 -0
- package/dist/cloud/webhooks/parsers/linear.d.ts +9 -0
- package/dist/cloud/webhooks/parsers/linear.js +258 -0
- package/dist/cloud/webhooks/parsers/slack.d.ts +9 -0
- package/dist/cloud/webhooks/parsers/slack.js +214 -0
- package/dist/cloud/webhooks/responders/github.d.ts +8 -0
- package/dist/cloud/webhooks/responders/github.js +73 -0
- package/dist/cloud/webhooks/responders/index.d.ts +23 -0
- package/dist/cloud/webhooks/responders/index.js +30 -0
- package/dist/cloud/webhooks/responders/linear.d.ts +9 -0
- package/dist/cloud/webhooks/responders/linear.js +149 -0
- package/dist/cloud/webhooks/responders/slack.d.ts +20 -0
- package/dist/cloud/webhooks/responders/slack.js +178 -0
- package/dist/cloud/webhooks/router.d.ts +25 -0
- package/dist/cloud/webhooks/router.js +504 -0
- package/dist/cloud/webhooks/rules-engine.d.ts +24 -0
- package/dist/cloud/webhooks/rules-engine.js +287 -0
- package/dist/cloud/webhooks/types.d.ts +186 -0
- package/dist/cloud/webhooks/types.js +8 -0
- package/dist/continuity/formatter.d.ts +51 -0
- package/dist/continuity/formatter.js +313 -0
- package/dist/continuity/handoff-store.d.ts +67 -0
- package/dist/continuity/handoff-store.js +472 -0
- package/dist/continuity/index.d.ts +45 -0
- package/dist/continuity/index.js +48 -0
- package/dist/continuity/ledger-store.d.ts +110 -0
- package/dist/continuity/ledger-store.js +500 -0
- package/dist/continuity/manager.d.ts +178 -0
- package/dist/continuity/manager.js +562 -0
- package/dist/continuity/parser.d.ts +76 -0
- package/dist/continuity/parser.js +579 -0
- package/dist/continuity/types.d.ts +180 -0
- package/dist/continuity/types.js +9 -0
- package/dist/daemon/agent-manager.d.ts +27 -0
- package/dist/daemon/agent-manager.js +107 -6
- package/dist/daemon/agent-registry.d.ts +32 -0
- package/dist/daemon/agent-registry.js +42 -2
- package/dist/daemon/api.d.ts +12 -0
- package/dist/daemon/api.js +131 -2
- package/dist/daemon/cli-auth.d.ts +67 -0
- package/dist/daemon/cli-auth.js +537 -0
- package/dist/daemon/cloud-sync.js +9 -7
- package/dist/daemon/orchestrator.js +30 -0
- package/dist/daemon/router.d.ts +5 -0
- package/dist/daemon/router.js +78 -26
- package/dist/daemon/server.d.ts +5 -0
- package/dist/daemon/server.js +9 -1
- package/dist/daemon/services/browser-testing.d.ts +88 -0
- package/dist/daemon/services/browser-testing.js +244 -0
- package/dist/daemon/services/container-spawner.d.ts +135 -0
- package/dist/daemon/services/container-spawner.js +313 -0
- package/dist/daemon/types.d.ts +5 -1
- package/dist/dashboard/out/404.html +1 -1
- package/dist/dashboard/out/_next/static/chunks/116-2502180def231162.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/699-3b1cd6618a45d259.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/724-2dae7627550ab88f.js +9 -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-b6edd4dde8d08194.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-c22d080201cbd9fb.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/metrics/page-67a3e98d9a43a6ed.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/page-77e9c65420a06cfb.js +1 -0
- 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-68d34f50baa8ab6b.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
- 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-c2f423b9c9f4591b.js → main-ed4e1fb6f29c34cf.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
- package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +1 -0
- package/dist/dashboard/out/_next/static/css/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 -14
- package/dist/dashboard/out/app.txt +2 -2
- package/dist/dashboard/out/connect-repos.html +1 -0
- package/dist/dashboard/out/connect-repos.txt +7 -0
- package/dist/dashboard/out/history.html +1 -1
- package/dist/dashboard/out/history.txt +2 -2
- package/dist/dashboard/out/index.html +1 -1
- package/dist/dashboard/out/index.txt +2 -2
- package/dist/dashboard/out/login.html +6 -0
- package/dist/dashboard/out/login.txt +7 -0
- package/dist/dashboard/out/metrics.html +1 -1
- package/dist/dashboard/out/metrics.txt +2 -2
- package/dist/dashboard/out/pricing.html +3 -3
- package/dist/dashboard/out/pricing.txt +2 -2
- package/dist/dashboard/out/providers.html +1 -0
- package/dist/dashboard/out/providers.txt +7 -0
- package/dist/dashboard/out/signup.html +6 -0
- package/dist/dashboard/out/signup.txt +7 -0
- package/dist/dashboard-server/server.js +1308 -8
- package/dist/hooks/emitter.d.ts +40 -0
- package/dist/hooks/emitter.js +63 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/registry.d.ts +173 -0
- package/dist/hooks/registry.js +476 -0
- package/dist/hooks/trajectory-hooks.d.ts +52 -0
- package/dist/hooks/trajectory-hooks.js +183 -0
- package/dist/hooks/types.d.ts +141 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/memory/adapters/index.d.ts +8 -0
- package/dist/memory/adapters/index.js +8 -0
- package/dist/memory/adapters/inmemory.d.ts +59 -0
- package/dist/memory/adapters/inmemory.js +195 -0
- package/dist/memory/adapters/supermemory.d.ts +71 -0
- package/dist/memory/adapters/supermemory.js +338 -0
- package/dist/memory/factory.d.ts +48 -0
- package/dist/memory/factory.js +143 -0
- package/dist/memory/index.d.ts +32 -0
- package/dist/memory/index.js +32 -0
- package/dist/memory/memory-hooks.d.ts +60 -0
- package/dist/memory/memory-hooks.js +313 -0
- package/dist/memory/service.d.ts +49 -0
- package/dist/memory/service.js +146 -0
- package/dist/memory/types.d.ts +195 -0
- package/dist/memory/types.js +8 -0
- package/dist/policy/agent-policy.d.ts +225 -0
- package/dist/policy/agent-policy.js +665 -0
- package/dist/policy/cloud-policy-fetcher.d.ts +12 -0
- package/dist/policy/cloud-policy-fetcher.js +64 -0
- package/dist/resiliency/crash-insights.d.ts +156 -0
- package/dist/resiliency/crash-insights.js +492 -0
- package/dist/resiliency/gossip-health.d.ts +137 -0
- package/dist/resiliency/gossip-health.js +241 -0
- package/dist/resiliency/index.d.ts +5 -0
- package/dist/resiliency/index.js +5 -0
- package/dist/resiliency/leader-watchdog.d.ts +109 -0
- package/dist/resiliency/leader-watchdog.js +189 -0
- package/dist/resiliency/memory-monitor.d.ts +172 -0
- package/dist/resiliency/memory-monitor.js +593 -0
- package/dist/resiliency/stateless-lead.d.ts +149 -0
- package/dist/resiliency/stateless-lead.js +308 -0
- package/dist/resiliency/supervisor.d.ts +38 -0
- package/dist/resiliency/supervisor.js +122 -0
- package/dist/shared/cli-auth-config.d.ts +91 -0
- package/dist/shared/cli-auth-config.js +264 -0
- package/dist/storage/adapter.d.ts +1 -1
- package/dist/trajectory/config.d.ts +84 -0
- package/dist/trajectory/config.js +163 -0
- package/dist/trajectory/index.d.ts +8 -0
- package/dist/trajectory/index.js +8 -0
- package/dist/trajectory/integration.d.ts +292 -0
- package/dist/trajectory/integration.js +834 -0
- package/dist/utils/logger.js +1 -1
- package/dist/utils/project-namespace.d.ts +24 -0
- package/dist/utils/project-namespace.js +84 -0
- package/dist/wrapper/parser.d.ts +10 -0
- package/dist/wrapper/parser.js +100 -33
- package/dist/wrapper/pty-wrapper.d.ts +197 -16
- package/dist/wrapper/pty-wrapper.js +943 -106
- package/dist/wrapper/shared.d.ts +165 -0
- package/dist/wrapper/shared.js +270 -0
- package/dist/wrapper/tmux-wrapper.d.ts +73 -11
- package/dist/wrapper/tmux-wrapper.js +541 -120
- package/package.json +16 -16
- package/scripts/postinstall.js +60 -0
- 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/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/middleware/planLimits.d.ts.map +0 -1
- package/dist/cloud/api/middleware/planLimits.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/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/usage.d.ts.map +0 -1
- package/dist/cloud/api/usage.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/coordinator.d.ts.map +0 -1
- package/dist/cloud/services/coordinator.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/vault/index.d.ts.map +0 -1
- package/dist/cloud/vault/index.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/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/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/693-7b3301d8f6bc5014.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/713-f78477eb185f1f4d.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/766-e53e1cfe39b0b5b5.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/900-037c64bfd797fb2a.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/app/page-e3d9e1f4466b9bae.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/metrics/page-e68825a81db67ba1.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/page-cc108bf68c8a657f.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/pricing/page-d80e03a5297f95b6.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/webpack-a5acc2831d094776.js +0 -1
- package/dist/dashboard/out/_next/static/css/79b80143647a07d7.css +0 -1
- package/dist/dashboard/out/_next/static/css/8cf277370ad48cfe.css +0 -1
- package/dist/dashboard-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/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/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/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/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/logger.d.ts.map +0 -1
- package/dist/resiliency/logger.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/supervisor.d.ts.map +0 -1
- package/dist/resiliency/supervisor.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/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/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/CHANGELOG.md +0 -11
- package/docs/CLI-SIMPLIFICATION-COMPLETE.md +0 -48
- package/docs/CLOUD-ARCHITECTURE.md +0 -652
- package/docs/CLOUD-ONBOARDING-DESIGN.md +0 -1983
- package/docs/COMPETITIVE_ANALYSIS.md +0 -897
- package/docs/CONTRIBUTING.md +0 -151
- package/docs/DESIGN_BRIDGE_STAFFING.md +0 -878
- package/docs/DESIGN_V2.md +0 -1079
- package/docs/INTEGRATION-GUIDE.md +0 -926
- package/docs/MONETIZATION.md +0 -1679
- package/docs/PROPOSAL-trajectories.md +0 -1582
- package/docs/PROTOCOL.md +0 -325
- package/docs/SCALING_ANALYSIS.md +0 -280
- package/docs/TESTING_PRESENCE_FEATURES.md +0 -327
- package/docs/TMUX_IMPLEMENTATION_NOTES.md +0 -364
- package/docs/TMUX_IMPROVEMENTS.md +0 -968
- package/docs/agent-relay-snippet.md +0 -168
- package/docs/competitive-analysis-mcp-agent-mail.md +0 -389
- package/docs/dashboard-v2-plan.md +0 -179
- package/docs/guides/CLOUD.md +0 -236
- package/docs/guides/LOCAL.md +0 -535
- package/docs/guides/SELF-HOSTED.md +0 -494
- package/docs/proposals/shadow-as-subagent.md +0 -765
- package/docs/proposals/slack-bot-integration.md +0 -1457
- package/docs/removable-code-analysis.md +0 -24
- 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/tictactoe-setup.sh +0 -181
- /package/dist/dashboard/out/_next/static/chunks/{117-b2cd8d6485aacf2b.js → 117-f7b8ab0809342e77.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{648-8f3f26864ce515e5.js → 648-5cc6e1921389a58a.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-0b990dbb71d72a98.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/{6HHWb2ZmnJ4OSm0zUP7h4 → wPgKJtcOmTFLpUncDg16A}/_buildManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → wPgKJtcOmTFLpUncDg16A}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -190,7 +190,7 @@ prpm install @agent-relay/agent-relay-snippet --location CLAUDE.md
|
|
|
190
190
|
|
|
191
191
|
`agent-relay up` starts a web dashboard at http://localhost:3888
|
|
192
192
|
|
|
193
|
-

|
|
193
|
+

|
|
194
194
|
|
|
195
195
|
## Development
|
|
196
196
|
|
package/TESTING.md
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# Manual Testing Guide
|
|
2
|
+
|
|
3
|
+
Manual testing instructions for bridge, staffing, and multi-project orchestration features.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Node.js installed
|
|
8
|
+
- `agent-relay` built and available (`npm run build`)
|
|
9
|
+
- tmux installed (`brew install tmux` on macOS)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Single Project - Lead + Spawning
|
|
14
|
+
|
|
15
|
+
Test the Lead role and worker spawning within a single project.
|
|
16
|
+
|
|
17
|
+
### Setup
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Terminal 1: Start daemon
|
|
21
|
+
cd /path/to/your/project
|
|
22
|
+
agent-relay up
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Terminal 2: Start an agent
|
|
27
|
+
agent-relay -n Alice claude
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Test Spawning
|
|
31
|
+
|
|
32
|
+
Inside Alice's terminal, output these patterns:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
->relay:spawn Dev1 claude "Write unit tests for the auth module"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Or using the fenced format for messages:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
->relay:Dev1 <<<
|
|
42
|
+
Write unit tests for the auth module>>>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Expected:**
|
|
46
|
+
- New tmux window created in `relay-workers` session
|
|
47
|
+
- Dev1 agent starts with the task injected
|
|
48
|
+
- Message: `[spawner] Spawned Dev1 (claude) for Alice`
|
|
49
|
+
|
|
50
|
+
### Verify Spawn
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Check tmux windows
|
|
54
|
+
tmux list-windows -t relay-workers
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Test Release
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
->relay:release Dev1
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Expected:**
|
|
64
|
+
- Dev1 window closed
|
|
65
|
+
- Message: `[spawner] Released Dev1`
|
|
66
|
+
|
|
67
|
+
### Test Release All
|
|
68
|
+
|
|
69
|
+
First spawn multiple workers:
|
|
70
|
+
```
|
|
71
|
+
->relay:spawn Dev1 claude "Task 1"
|
|
72
|
+
->relay:spawn Dev2 claude "Task 2"
|
|
73
|
+
->relay:spawn QA1 claude "Task 3"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Then release all:
|
|
77
|
+
```
|
|
78
|
+
->relay:release *
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Expected:** All workers released.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 2. Multi-Project Bridge
|
|
86
|
+
|
|
87
|
+
Test cross-project communication with the bridge command.
|
|
88
|
+
|
|
89
|
+
### Setup (3 terminals minimum)
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Terminal 1: Project A daemon
|
|
93
|
+
mkdir -p /tmp/project-a
|
|
94
|
+
cd /tmp/project-a
|
|
95
|
+
agent-relay up
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Terminal 2: Project B daemon
|
|
100
|
+
mkdir -p /tmp/project-b
|
|
101
|
+
cd /tmp/project-b
|
|
102
|
+
agent-relay up
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Terminal 3: Bridge (Architect mode)
|
|
107
|
+
agent-relay bridge /tmp/project-a /tmp/project-b
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Expected:**
|
|
111
|
+
- Bridge connects to both project sockets
|
|
112
|
+
- Dashboard shows both projects (if enabled)
|
|
113
|
+
|
|
114
|
+
### Start Agents in Each Project
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Terminal 4: Agent in Project A
|
|
118
|
+
cd /tmp/project-a
|
|
119
|
+
agent-relay -n Alice claude
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Terminal 5: Agent in Project B
|
|
124
|
+
cd /tmp/project-b
|
|
125
|
+
agent-relay -n Bob claude
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Test Cross-Project Messaging
|
|
129
|
+
|
|
130
|
+
From Alice (Project A):
|
|
131
|
+
```
|
|
132
|
+
->relay:project-b:Bob <<<
|
|
133
|
+
Hey Bob, can you review my changes?>>>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Expected:** Bob receives the message in Project B.
|
|
137
|
+
|
|
138
|
+
From Bob (Project B):
|
|
139
|
+
```
|
|
140
|
+
->relay:project-a:Alice <<<
|
|
141
|
+
Sure, sending review now.>>>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Expected:** Alice receives the message in Project A.
|
|
145
|
+
|
|
146
|
+
### Test Broadcast to All Leads
|
|
147
|
+
|
|
148
|
+
From the bridge/architect:
|
|
149
|
+
```
|
|
150
|
+
->relay:*:lead <<<
|
|
151
|
+
Standup time - report your status>>>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Expected:** Both Alice and Bob receive the message.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 3. Dashboard Verification
|
|
159
|
+
|
|
160
|
+
### Main Dashboard
|
|
161
|
+
|
|
162
|
+
Open: http://localhost:4280
|
|
163
|
+
|
|
164
|
+
Check:
|
|
165
|
+
- [ ] Connected agents appear
|
|
166
|
+
- [ ] Online/Offline status badges show correctly
|
|
167
|
+
- [ ] Messages appear in activity log
|
|
168
|
+
- [ ] Last seen timestamps update
|
|
169
|
+
|
|
170
|
+
### Bridge Dashboard
|
|
171
|
+
|
|
172
|
+
Open: http://localhost:4280/bridge
|
|
173
|
+
|
|
174
|
+
Check:
|
|
175
|
+
- [ ] Connected projects appear
|
|
176
|
+
- [ ] Leads shown per project
|
|
177
|
+
- [ ] Workers shown under their lead
|
|
178
|
+
- [ ] Cross-project messages in message flow panel
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 4. Agent Role Auto-Detection
|
|
183
|
+
|
|
184
|
+
Test that agent names match role definitions.
|
|
185
|
+
|
|
186
|
+
### Setup
|
|
187
|
+
|
|
188
|
+
Create a role agent:
|
|
189
|
+
```bash
|
|
190
|
+
mkdir -p .claude/agents
|
|
191
|
+
cat > .claude/agents/lead.md << 'EOF'
|
|
192
|
+
---
|
|
193
|
+
name: lead
|
|
194
|
+
description: Coordinator agent
|
|
195
|
+
model: haiku
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
# Lead Agent
|
|
199
|
+
|
|
200
|
+
You are a Lead agent - coordinate and delegate.
|
|
201
|
+
EOF
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Test
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
agent-relay -n Lead claude
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Expected:** Agent assumes the Lead role from `lead.md` (case-insensitive match).
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 5. Cleanup
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# Stop all daemons
|
|
218
|
+
agent-relay down
|
|
219
|
+
|
|
220
|
+
# Kill any orphaned tmux sessions
|
|
221
|
+
tmux kill-session -t relay-workers 2>/dev/null
|
|
222
|
+
tmux list-sessions | grep relay | cut -d: -f1 | xargs -I {} tmux kill-session -t {}
|
|
223
|
+
|
|
224
|
+
# Remove test directories
|
|
225
|
+
rm -rf /tmp/project-a /tmp/project-b
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Quick Smoke Test Script
|
|
231
|
+
|
|
232
|
+
Save as `test-bridge.sh` and run:
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
#!/bin/bash
|
|
236
|
+
set -e
|
|
237
|
+
|
|
238
|
+
echo "=== Bridge Smoke Test ==="
|
|
239
|
+
|
|
240
|
+
# Setup
|
|
241
|
+
mkdir -p /tmp/smoke-a /tmp/smoke-b
|
|
242
|
+
cd /tmp/smoke-a && agent-relay up &
|
|
243
|
+
PID_A=$!
|
|
244
|
+
sleep 1
|
|
245
|
+
|
|
246
|
+
cd /tmp/smoke-b && agent-relay up &
|
|
247
|
+
PID_B=$!
|
|
248
|
+
sleep 1
|
|
249
|
+
|
|
250
|
+
# Check daemons
|
|
251
|
+
echo "Checking daemons..."
|
|
252
|
+
agent-relay status
|
|
253
|
+
|
|
254
|
+
# Bridge
|
|
255
|
+
echo "Starting bridge..."
|
|
256
|
+
agent-relay bridge /tmp/smoke-a /tmp/smoke-b &
|
|
257
|
+
PID_BRIDGE=$!
|
|
258
|
+
sleep 2
|
|
259
|
+
|
|
260
|
+
# Cleanup
|
|
261
|
+
echo "Cleaning up..."
|
|
262
|
+
kill $PID_A $PID_B $PID_BRIDGE 2>/dev/null || true
|
|
263
|
+
rm -rf /tmp/smoke-a /tmp/smoke-b
|
|
264
|
+
|
|
265
|
+
echo "=== Smoke Test Complete ==="
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Troubleshooting
|
|
271
|
+
|
|
272
|
+
| Issue | Solution |
|
|
273
|
+
|-------|----------|
|
|
274
|
+
| "Socket not found" | Start daemon with `agent-relay up` |
|
|
275
|
+
| Spawn not working | Check tmux is installed, check `relay-workers` session |
|
|
276
|
+
| Cross-project messages not delivered | Verify bridge is running and connected to both daemons |
|
|
277
|
+
| Dashboard not loading | Check daemon started with dashboard enabled (default) |
|
|
278
|
+
| Agent role not applied | Check file exists at `.claude/agents/<name>.md` (case-insensitive) |
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Setup Fly.io for Agent Relay Workspaces
|
|
3
|
+
# Run this from the project root
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "=== Agent Relay Cloud - Fly.io Workspace Setup ==="
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
# Check for fly CLI
|
|
11
|
+
if ! command -v fly &> /dev/null; then
|
|
12
|
+
echo "Error: Fly CLI not found. Install it with:"
|
|
13
|
+
echo " curl -L https://fly.io/install.sh | sh"
|
|
14
|
+
exit 1
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# Check if logged in
|
|
18
|
+
if ! fly auth whoami &> /dev/null; then
|
|
19
|
+
echo "Please log in to Fly.io first:"
|
|
20
|
+
fly auth login
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
# Get org
|
|
24
|
+
FLY_ORG=${FLY_ORG:-personal}
|
|
25
|
+
echo "Using Fly.io org: $FLY_ORG"
|
|
26
|
+
|
|
27
|
+
echo ""
|
|
28
|
+
echo "=== Building Workspace Image ==="
|
|
29
|
+
echo ""
|
|
30
|
+
|
|
31
|
+
# Build and push the workspace image
|
|
32
|
+
cd deploy/workspace
|
|
33
|
+
|
|
34
|
+
echo "Building workspace Docker image..."
|
|
35
|
+
docker build -t ghcr.io/khaliqgant/agent-relay-workspace:latest .
|
|
36
|
+
|
|
37
|
+
echo ""
|
|
38
|
+
echo "Pushing to GitHub Container Registry..."
|
|
39
|
+
echo "(Make sure you're logged in: docker login ghcr.io)"
|
|
40
|
+
docker push ghcr.io/khaliqgant/agent-relay-workspace:latest
|
|
41
|
+
|
|
42
|
+
cd ../..
|
|
43
|
+
|
|
44
|
+
echo ""
|
|
45
|
+
echo "=== Get Your API Token ==="
|
|
46
|
+
echo ""
|
|
47
|
+
echo "Run this to get your Fly.io API token:"
|
|
48
|
+
echo " fly auth token"
|
|
49
|
+
echo ""
|
|
50
|
+
echo "Add it to your Railway environment:"
|
|
51
|
+
echo " FLY_API_TOKEN=<token>"
|
|
52
|
+
echo " FLY_ORG=$FLY_ORG"
|
|
53
|
+
echo " COMPUTE_PROVIDER=fly"
|
|
54
|
+
echo ""
|
|
55
|
+
|
|
56
|
+
echo "=== Custom Domain Setup ==="
|
|
57
|
+
echo ""
|
|
58
|
+
echo "To use custom workspace domains (e.g., abc123.ws.agent-relay.com):"
|
|
59
|
+
echo ""
|
|
60
|
+
echo "1. Add a wildcard CNAME record in your DNS:"
|
|
61
|
+
echo " *.ws.agent-relay.com CNAME fly.dev"
|
|
62
|
+
echo ""
|
|
63
|
+
echo "2. Set the domain in Railway:"
|
|
64
|
+
echo " FLY_WORKSPACE_DOMAIN=ws.agent-relay.com"
|
|
65
|
+
echo ""
|
|
66
|
+
echo "3. Each workspace will be accessible at:"
|
|
67
|
+
echo " https://{workspace-id}.ws.agent-relay.com"
|
|
68
|
+
echo ""
|
|
69
|
+
echo "Setup complete!"
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Setup Agent Relay Cloud on Railway
|
|
3
|
+
# Run this from the project root
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "=== Agent Relay Cloud - Railway Setup ==="
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
# Check for railway CLI
|
|
11
|
+
if ! command -v railway &> /dev/null; then
|
|
12
|
+
echo "Error: Railway CLI not found. Install it with:"
|
|
13
|
+
echo " npm install -g @railway/cli"
|
|
14
|
+
exit 1
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# Check if logged in
|
|
18
|
+
if ! railway whoami &> /dev/null; then
|
|
19
|
+
echo "Please log in to Railway first:"
|
|
20
|
+
railway login
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
echo "Creating Railway project..."
|
|
24
|
+
railway init --name agent-relay-cloud
|
|
25
|
+
|
|
26
|
+
echo ""
|
|
27
|
+
echo "Adding PostgreSQL database..."
|
|
28
|
+
railway add --plugin postgresql
|
|
29
|
+
|
|
30
|
+
echo ""
|
|
31
|
+
echo "Adding Redis..."
|
|
32
|
+
railway add --plugin redis
|
|
33
|
+
|
|
34
|
+
echo ""
|
|
35
|
+
echo "=== Required Environment Variables ==="
|
|
36
|
+
echo "Please set these in Railway dashboard or via CLI:"
|
|
37
|
+
echo ""
|
|
38
|
+
echo "Required:"
|
|
39
|
+
echo " SESSION_SECRET - openssl rand -hex 32"
|
|
40
|
+
echo " GITHUB_CLIENT_ID - From GitHub OAuth App"
|
|
41
|
+
echo " GITHUB_CLIENT_SECRET - From GitHub OAuth App"
|
|
42
|
+
echo " VAULT_ENCRYPTION_KEY - openssl rand -hex 32"
|
|
43
|
+
echo ""
|
|
44
|
+
echo "For Fly.io workspaces:"
|
|
45
|
+
echo " COMPUTE_PROVIDER=fly"
|
|
46
|
+
echo " FLY_API_TOKEN - fly auth token"
|
|
47
|
+
echo " FLY_ORG=personal"
|
|
48
|
+
echo " FLY_WORKSPACE_DOMAIN - e.g., ws.agent-relay.com"
|
|
49
|
+
echo ""
|
|
50
|
+
echo "For Stripe billing:"
|
|
51
|
+
echo " STRIPE_SECRET_KEY"
|
|
52
|
+
echo " STRIPE_PUBLISHABLE_KEY"
|
|
53
|
+
echo " STRIPE_WEBHOOK_SECRET"
|
|
54
|
+
echo ""
|
|
55
|
+
|
|
56
|
+
echo "Set variables with:"
|
|
57
|
+
echo " railway variables set KEY=value"
|
|
58
|
+
echo ""
|
|
59
|
+
|
|
60
|
+
echo "When ready, deploy with:"
|
|
61
|
+
echo " railway up"
|
|
62
|
+
echo ""
|
|
63
|
+
|
|
64
|
+
echo "=== DNS Configuration ==="
|
|
65
|
+
echo "After deployment, configure your DNS:"
|
|
66
|
+
echo ""
|
|
67
|
+
echo "1. Get your Railway domain:"
|
|
68
|
+
echo " railway domain"
|
|
69
|
+
echo ""
|
|
70
|
+
echo "2. Configure DNS records:"
|
|
71
|
+
echo " api.agent-relay.com CNAME <railway-domain>"
|
|
72
|
+
echo " app.agent-relay.com CNAME <your-dashboard-host>"
|
|
73
|
+
echo " agent-relay.com A <your-landing-host>"
|
|
74
|
+
echo " *.ws.agent-relay.com CNAME fly.dev (for workspaces)"
|
|
75
|
+
echo ""
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
log() {
|
|
6
|
+
echo "[workspace-browser] $*"
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
# ============================================================================
|
|
10
|
+
# Start Virtual Display (Xvfb)
|
|
11
|
+
# ============================================================================
|
|
12
|
+
log "Starting Xvfb virtual display..."
|
|
13
|
+
Xvfb :99 -screen 0 "${SCREEN_WIDTH:-1920}x${SCREEN_HEIGHT:-1080}x${SCREEN_DEPTH:-24}" &
|
|
14
|
+
XVFB_PID=$!
|
|
15
|
+
sleep 1
|
|
16
|
+
|
|
17
|
+
# Verify Xvfb started
|
|
18
|
+
if ! kill -0 $XVFB_PID 2>/dev/null; then
|
|
19
|
+
log "ERROR: Xvfb failed to start"
|
|
20
|
+
exit 1
|
|
21
|
+
fi
|
|
22
|
+
log "Xvfb started on display :99"
|
|
23
|
+
|
|
24
|
+
# ============================================================================
|
|
25
|
+
# Start Window Manager (Fluxbox)
|
|
26
|
+
# ============================================================================
|
|
27
|
+
log "Starting Fluxbox window manager..."
|
|
28
|
+
fluxbox &
|
|
29
|
+
sleep 1
|
|
30
|
+
log "Fluxbox started"
|
|
31
|
+
|
|
32
|
+
# ============================================================================
|
|
33
|
+
# Start VNC Server (optional, for debugging/viewing)
|
|
34
|
+
# ============================================================================
|
|
35
|
+
if [[ "${VNC_ENABLED:-true}" == "true" ]]; then
|
|
36
|
+
log "Starting x11vnc server..."
|
|
37
|
+
x11vnc -display :99 -forever -shared -rfbport "${VNC_PORT:-5900}" -bg -nopw -xkb
|
|
38
|
+
log "VNC server started on port ${VNC_PORT:-5900}"
|
|
39
|
+
|
|
40
|
+
# Start noVNC for browser-based access
|
|
41
|
+
if [[ "${NOVNC_ENABLED:-true}" == "true" ]]; then
|
|
42
|
+
log "Starting noVNC web interface..."
|
|
43
|
+
websockify --web=/usr/share/novnc/ "${NOVNC_PORT:-6080}" localhost:"${VNC_PORT:-5900}" &
|
|
44
|
+
log "noVNC available at http://localhost:${NOVNC_PORT:-6080}/vnc.html"
|
|
45
|
+
fi
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# ============================================================================
|
|
49
|
+
# Export browser testing utilities
|
|
50
|
+
# ============================================================================
|
|
51
|
+
|
|
52
|
+
# Create screenshot helper
|
|
53
|
+
cat > /usr/local/bin/take-screenshot <<'EOF'
|
|
54
|
+
#!/usr/bin/env bash
|
|
55
|
+
# Take a screenshot and save to specified path
|
|
56
|
+
# Usage: take-screenshot [output.png]
|
|
57
|
+
OUTPUT="${1:-/tmp/screenshot-$(date +%Y%m%d-%H%M%S).png}"
|
|
58
|
+
DISPLAY=:99 scrot "$OUTPUT"
|
|
59
|
+
echo "$OUTPUT"
|
|
60
|
+
EOF
|
|
61
|
+
chmod +x /usr/local/bin/take-screenshot
|
|
62
|
+
|
|
63
|
+
# Create browser launcher helper
|
|
64
|
+
cat > /usr/local/bin/launch-browser <<'EOF'
|
|
65
|
+
#!/usr/bin/env bash
|
|
66
|
+
# Launch browser with optional URL
|
|
67
|
+
# Usage: launch-browser [url]
|
|
68
|
+
URL="${1:-about:blank}"
|
|
69
|
+
DISPLAY=:99 chromium --no-sandbox --disable-gpu --start-maximized "$URL" &
|
|
70
|
+
echo "Browser launched with PID $!"
|
|
71
|
+
EOF
|
|
72
|
+
chmod +x /usr/local/bin/launch-browser
|
|
73
|
+
|
|
74
|
+
# Create Playwright test runner helper
|
|
75
|
+
cat > /usr/local/bin/run-playwright <<'EOF'
|
|
76
|
+
#!/usr/bin/env bash
|
|
77
|
+
# Run Playwright tests with proper display settings
|
|
78
|
+
# Usage: run-playwright [test-file.spec.ts] [additional args...]
|
|
79
|
+
export DISPLAY=:99
|
|
80
|
+
npx playwright test "$@"
|
|
81
|
+
EOF
|
|
82
|
+
chmod +x /usr/local/bin/run-playwright
|
|
83
|
+
|
|
84
|
+
# ============================================================================
|
|
85
|
+
# Docker-in-Docker helper (if socket mounted)
|
|
86
|
+
# ============================================================================
|
|
87
|
+
if [[ -S /var/run/docker.sock ]]; then
|
|
88
|
+
log "Docker socket detected - agents can spawn containers"
|
|
89
|
+
|
|
90
|
+
# Create helper for agents to spawn isolated containers
|
|
91
|
+
cat > /usr/local/bin/spawn-container <<'EOF'
|
|
92
|
+
#!/usr/bin/env bash
|
|
93
|
+
# Spawn an isolated container for agent tasks
|
|
94
|
+
# Usage: spawn-container <image> [command...]
|
|
95
|
+
IMAGE="${1:-ubuntu:22.04}"
|
|
96
|
+
shift
|
|
97
|
+
docker run --rm -it \
|
|
98
|
+
--network=host \
|
|
99
|
+
-v "$(pwd):/workspace" \
|
|
100
|
+
-w /workspace \
|
|
101
|
+
"$IMAGE" "$@"
|
|
102
|
+
EOF
|
|
103
|
+
chmod +x /usr/local/bin/spawn-container
|
|
104
|
+
else
|
|
105
|
+
log "WARN: Docker socket not mounted - container spawning disabled"
|
|
106
|
+
fi
|
|
107
|
+
|
|
108
|
+
# ============================================================================
|
|
109
|
+
# Continue with main entrypoint
|
|
110
|
+
# ============================================================================
|
|
111
|
+
log "Browser testing environment ready"
|
|
112
|
+
log " - Display: $DISPLAY (${SCREEN_WIDTH}x${SCREEN_HEIGHT})"
|
|
113
|
+
log " - VNC: ${VNC_ENABLED:-true} (port ${VNC_PORT:-5900})"
|
|
114
|
+
log " - noVNC: ${NOVNC_ENABLED:-true} (http://localhost:${NOVNC_PORT:-6080})"
|
|
115
|
+
log " - Playwright: $(npx playwright --version 2>/dev/null || echo 'installed')"
|
|
116
|
+
|
|
117
|
+
# Hand off to main entrypoint
|
|
118
|
+
exec /entrypoint.sh "$@"
|