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/docs/PROTOCOL.md
DELETED
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
# Agent Relay Protocol Specification
|
|
2
|
-
|
|
3
|
-
Version 1.0
|
|
4
|
-
|
|
5
|
-
## Goals
|
|
6
|
-
|
|
7
|
-
- Low-latency local IPC (<5ms)
|
|
8
|
-
- Strict framing with backpressure
|
|
9
|
-
- At-least-once delivery (optional exactly-once within session)
|
|
10
|
-
- Reconnect + state resync
|
|
11
|
-
- Simple to implement in Rust/Go/TypeScript
|
|
12
|
-
|
|
13
|
-
## Non-Goals
|
|
14
|
-
|
|
15
|
-
- Cross-host networking
|
|
16
|
-
- Encryption (local-only)
|
|
17
|
-
- Unbounded buffering
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 1. Transport
|
|
22
|
-
|
|
23
|
-
**Preferred:** Unix Domain Socket (stream)
|
|
24
|
-
- Path: `/tmp/agent-relay.sock` (configurable)
|
|
25
|
-
|
|
26
|
-
**Windows fallback:** Named Pipe
|
|
27
|
-
- Path: `\\.\pipe\agent-relay`
|
|
28
|
-
|
|
29
|
-
**Connection model:** Each wrapper opens 1 duplex stream to daemon.
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## 2. Framing
|
|
34
|
-
|
|
35
|
-
Stream is a sequence of frames.
|
|
36
|
-
|
|
37
|
-
### Frame Header
|
|
38
|
-
- 4-byte big-endian unsigned length `N` (bytes)
|
|
39
|
-
- Followed by `N` bytes UTF-8 JSON
|
|
40
|
-
|
|
41
|
-
### Limits
|
|
42
|
-
- `N` MUST be <= `max_frame_bytes` (default: 1 MiB)
|
|
43
|
-
- If exceeded, daemon closes connection with error
|
|
44
|
-
- JSON payload MUST be an object
|
|
45
|
-
|
|
46
|
-
### Example (pseudo)
|
|
47
|
-
```
|
|
48
|
-
0000003A {"v":1,"type":"HELLO","agent":"claude-1",...}
|
|
49
|
-
```
|
|
50
|
-
Where `0x3A` (58) is the byte length of the JSON payload.
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## 3. Envelope
|
|
55
|
-
|
|
56
|
-
All messages are `Envelope` objects:
|
|
57
|
-
|
|
58
|
-
```typescript
|
|
59
|
-
interface Envelope {
|
|
60
|
-
v: 1; // Protocol version
|
|
61
|
-
type: MessageType; // See below
|
|
62
|
-
id: string; // Unique per-sender (UUIDv4)
|
|
63
|
-
ts: number; // Milliseconds since epoch
|
|
64
|
-
from?: string; // Agent name (set by daemon)
|
|
65
|
-
to?: string | '*'; // Target or broadcast
|
|
66
|
-
topic?: string; // Optional topic/channel
|
|
67
|
-
payload: object; // Type-specific payload
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Message Types
|
|
72
|
-
|
|
73
|
-
| Type | Direction | Purpose |
|
|
74
|
-
|------|-----------|---------|
|
|
75
|
-
| `HELLO` | Client→Server | Initiate handshake |
|
|
76
|
-
| `WELCOME` | Server→Client | Confirm session |
|
|
77
|
-
| `SEND` | Client→Server | Send message |
|
|
78
|
-
| `DELIVER` | Server→Client | Deliver message |
|
|
79
|
-
| `ACK` | Both | Acknowledge receipt |
|
|
80
|
-
| `NACK` | Both | Negative acknowledgment |
|
|
81
|
-
| `PING` | Server→Client | Heartbeat |
|
|
82
|
-
| `PONG` | Client→Server | Heartbeat response |
|
|
83
|
-
| `ERROR` | Server→Client | Error notification |
|
|
84
|
-
| `BUSY` | Server→Client | Backpressure signal |
|
|
85
|
-
| `RESUME` | Client→Server | Resume session |
|
|
86
|
-
| `SYNC` | Server→Client | State sync info |
|
|
87
|
-
| `BYE` | Both | Graceful disconnect |
|
|
88
|
-
| `SUBSCRIBE` | Client→Server | Subscribe to topic |
|
|
89
|
-
| `UNSUBSCRIBE` | Client→Server | Unsubscribe from topic |
|
|
90
|
-
|
|
91
|
-
---
|
|
92
|
-
|
|
93
|
-
## 4. Handshake
|
|
94
|
-
|
|
95
|
-
### New Session
|
|
96
|
-
|
|
97
|
-
**Client → Server: HELLO**
|
|
98
|
-
```json
|
|
99
|
-
{
|
|
100
|
-
"v": 1,
|
|
101
|
-
"type": "HELLO",
|
|
102
|
-
"id": "uuid",
|
|
103
|
-
"ts": 1734440000000,
|
|
104
|
-
"payload": {
|
|
105
|
-
"agent": "claude-1",
|
|
106
|
-
"capabilities": {
|
|
107
|
-
"ack": true,
|
|
108
|
-
"resume": true,
|
|
109
|
-
"max_inflight": 256,
|
|
110
|
-
"supports_topics": true
|
|
111
|
-
},
|
|
112
|
-
"session": {
|
|
113
|
-
"resume_token": "optional-previous-token"
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
**Server → Client: WELCOME**
|
|
120
|
-
```json
|
|
121
|
-
{
|
|
122
|
-
"v": 1,
|
|
123
|
-
"type": "WELCOME",
|
|
124
|
-
"id": "uuid",
|
|
125
|
-
"ts": 1734440000001,
|
|
126
|
-
"payload": {
|
|
127
|
-
"session_id": "s-abc123",
|
|
128
|
-
"resume_token": "new-token-for-reconnect",
|
|
129
|
-
"server": {
|
|
130
|
-
"max_frame_bytes": 1048576,
|
|
131
|
-
"heartbeat_ms": 5000
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## 5. Sending and Delivery
|
|
140
|
-
|
|
141
|
-
### Client → Server: SEND
|
|
142
|
-
```json
|
|
143
|
-
{
|
|
144
|
-
"v": 1,
|
|
145
|
-
"type": "SEND",
|
|
146
|
-
"id": "m-001",
|
|
147
|
-
"ts": 1734440000100,
|
|
148
|
-
"to": "codex-1",
|
|
149
|
-
"topic": "chat",
|
|
150
|
-
"payload": {
|
|
151
|
-
"kind": "message",
|
|
152
|
-
"body": "Your turn",
|
|
153
|
-
"data": {}
|
|
154
|
-
},
|
|
155
|
-
"payload_meta": {
|
|
156
|
-
"requires_ack": true,
|
|
157
|
-
"ttl_ms": 60000
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### Server → Recipient: DELIVER
|
|
163
|
-
```json
|
|
164
|
-
{
|
|
165
|
-
"v": 1,
|
|
166
|
-
"type": "DELIVER",
|
|
167
|
-
"id": "d-001",
|
|
168
|
-
"ts": 1734440000102,
|
|
169
|
-
"from": "claude-1",
|
|
170
|
-
"to": "codex-1",
|
|
171
|
-
"topic": "chat",
|
|
172
|
-
"payload": {
|
|
173
|
-
"kind": "message",
|
|
174
|
-
"body": "Your turn",
|
|
175
|
-
"data": {}
|
|
176
|
-
},
|
|
177
|
-
"delivery": {
|
|
178
|
-
"seq": 42,
|
|
179
|
-
"session_id": "s-abc123"
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### Recipient → Server: ACK
|
|
185
|
-
```json
|
|
186
|
-
{
|
|
187
|
-
"v": 1,
|
|
188
|
-
"type": "ACK",
|
|
189
|
-
"id": "uuid",
|
|
190
|
-
"ts": 1734440000103,
|
|
191
|
-
"payload": {
|
|
192
|
-
"ack_id": "d-001",
|
|
193
|
-
"seq": 42
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
### Ordering Guarantee
|
|
199
|
-
|
|
200
|
-
Per `(topic, from → to)` stream, daemon guarantees in-order DELIVER by `delivery.seq`.
|
|
201
|
-
|
|
202
|
-
No global ordering across topics.
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## 6. Backpressure
|
|
207
|
-
|
|
208
|
-
Backpressure signaling is reserved for future versions. The current daemon is best-effort and does not implement bounded outbound queues or `BUSY` responses.
|
|
209
|
-
|
|
210
|
-
### Server → Client: BUSY
|
|
211
|
-
```json
|
|
212
|
-
{
|
|
213
|
-
"v": 1,
|
|
214
|
-
"type": "BUSY",
|
|
215
|
-
"id": "uuid",
|
|
216
|
-
"ts": 1734440000300,
|
|
217
|
-
"payload": {
|
|
218
|
-
"retry_after_ms": 50,
|
|
219
|
-
"queue_depth": 1000
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
Client should back off (exponential with jitter).
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
## 7. Heartbeats
|
|
229
|
-
|
|
230
|
-
- Daemon sends PING every `heartbeat_ms` if idle
|
|
231
|
-
- Wrapper replies PONG with same nonce
|
|
232
|
-
- Missing PONG for `2 * heartbeat_ms` → connection dead
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
## 8. Reconnect / Resume
|
|
237
|
-
|
|
238
|
-
### Client → Server: RESUME
|
|
239
|
-
```json
|
|
240
|
-
{
|
|
241
|
-
"v": 1,
|
|
242
|
-
"type": "RESUME",
|
|
243
|
-
"id": "uuid",
|
|
244
|
-
"ts": 1734440001000,
|
|
245
|
-
"payload": {
|
|
246
|
-
"session_id": "s-abc123",
|
|
247
|
-
"agent": "claude-1",
|
|
248
|
-
"streams": {
|
|
249
|
-
"chat": { "last_seq": 45 }
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
### Server → Client: SYNC
|
|
256
|
-
```json
|
|
257
|
-
{
|
|
258
|
-
"v": 1,
|
|
259
|
-
"type": "SYNC",
|
|
260
|
-
"id": "uuid",
|
|
261
|
-
"ts": 1734440001001,
|
|
262
|
-
"payload": {
|
|
263
|
-
"session_id": "s-abc123",
|
|
264
|
-
"streams": [
|
|
265
|
-
{ "topic": "chat", "peer": "codex-1", "last_seq": 45, "server_last_seq": 49 }
|
|
266
|
-
]
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
Server then replays DELIVER messages from `last_seq + 1` to `server_last_seq`.
|
|
272
|
-
|
|
273
|
-
### Stale Resume
|
|
274
|
-
|
|
275
|
-
If resume gap exceeds retention, server sends NACK with code "STALE".
|
|
276
|
-
Client should send fresh HELLO.
|
|
277
|
-
|
|
278
|
-
---
|
|
279
|
-
|
|
280
|
-
## 9. PTY Pattern Extractor
|
|
281
|
-
|
|
282
|
-
### Fenced Format (default, recommended)
|
|
283
|
-
|
|
284
|
-
```
|
|
285
|
-
->relay:codex-1 <<<
|
|
286
|
-
Your turn to play>>>
|
|
287
|
-
|
|
288
|
-
->relay:* <<<
|
|
289
|
-
Hello everyone>>>
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
**Always use the fenced format** for reliable message delivery. The `<<<` opens, `>>>` closes at end of last line.
|
|
293
|
-
|
|
294
|
-
### Block Format (structured data)
|
|
295
|
-
|
|
296
|
-
```
|
|
297
|
-
[[RELAY]]
|
|
298
|
-
{"to": "*", "type": "message", "body": "Hello everyone"}
|
|
299
|
-
[[/RELAY]]
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
### Rules
|
|
303
|
-
|
|
304
|
-
1. Fenced: `->relay:AgentName <<<` starts message, `>>>` ends it
|
|
305
|
-
2. Block: Only parse when `[[RELAY]]` at start of line
|
|
306
|
-
3. Pattern must be at start of line, not in code fences
|
|
307
|
-
4. Escape: `\->relay:` outputs literal `->relay:`
|
|
308
|
-
|
|
309
|
-
---
|
|
310
|
-
|
|
311
|
-
## 10. Connection Lifecycle
|
|
312
|
-
|
|
313
|
-
```
|
|
314
|
-
DISCONNECTED → CONNECTING → HANDSHAKING → READY
|
|
315
|
-
↑ ↓
|
|
316
|
-
BACKOFF ←─────── ERROR
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
### Backoff Strategy
|
|
320
|
-
|
|
321
|
-
- Initial: 100ms
|
|
322
|
-
- Multiplier: 2x
|
|
323
|
-
- Max: 30s
|
|
324
|
-
- Jitter: ±15%
|
|
325
|
-
- Max attempts: 10
|
package/docs/SCALING_ANALYSIS.md
DELETED
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
# Scaling Analysis: Is the TUI Dashboard Worth It?
|
|
2
|
-
|
|
3
|
-
## The Question
|
|
4
|
-
|
|
5
|
-
The proposed changes add significant complexity:
|
|
6
|
-
- TUI dashboard with `blessed` library
|
|
7
|
-
- Daemon event streaming
|
|
8
|
-
- Activity state reporting from wrappers
|
|
9
|
-
- New CLI commands
|
|
10
|
-
|
|
11
|
-
**Is this the right approach, or is there a simpler path?**
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Behavior Comparison
|
|
16
|
-
|
|
17
|
-
### Current (2-3 Agents)
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
# Terminal 1
|
|
21
|
-
agent-relay -n Alice claude
|
|
22
|
-
# You're IN Alice's tmux, working
|
|
23
|
-
|
|
24
|
-
# Terminal 2
|
|
25
|
-
agent-relay -n Bob claude
|
|
26
|
-
# You're IN Bob's tmux
|
|
27
|
-
|
|
28
|
-
# To switch: Alt+Tab between terminal windows
|
|
29
|
-
# To see status: mentally track what each is doing
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
**Works fine because:** You can hold 2-3 contexts in your head.
|
|
33
|
-
|
|
34
|
-
### Proposed (5-10 Agents)
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
# Terminal 1
|
|
38
|
-
agent-relay up # Start daemon
|
|
39
|
-
agent-relay watch # TUI dashboard
|
|
40
|
-
|
|
41
|
-
┌─ Agent Relay ───────────────────────────────┐
|
|
42
|
-
│ ● Alice active 12↑ 8↓ │
|
|
43
|
-
│ ● Bob typing 5↑ 14↓ │
|
|
44
|
-
│ ○ Charlie offline queued: 3 │
|
|
45
|
-
│ ... │
|
|
46
|
-
└─────────────────────────────────────────────┘
|
|
47
|
-
|
|
48
|
-
# Press 'a' → attach to native tmux
|
|
49
|
-
# Ctrl+B d → back to TUI
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
**Adds complexity:**
|
|
53
|
-
- blessed dependency (~500KB)
|
|
54
|
-
- Event stream protocol
|
|
55
|
-
- Activity reporting
|
|
56
|
-
- More state to track in daemon
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## Alternative: Just Use tmux Better
|
|
61
|
-
|
|
62
|
-
tmux already has multi-pane and multi-window support. Why not leverage it?
|
|
63
|
-
|
|
64
|
-
### Simpler Approach: Native tmux Layout
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
# Start all agents in one tmux session with multiple windows
|
|
68
|
-
agent-relay team start
|
|
69
|
-
|
|
70
|
-
# Creates tmux session "relay-team" with:
|
|
71
|
-
# - Window 0: Alice (claude)
|
|
72
|
-
# - Window 1: Bob (claude)
|
|
73
|
-
# - Window 2: Charlie (claude)
|
|
74
|
-
# - Window 3: Status pane (tail -f on logs)
|
|
75
|
-
|
|
76
|
-
# Switch windows: Ctrl+B 0, Ctrl+B 1, Ctrl+B 2...
|
|
77
|
-
# Or use: Ctrl+B w (window list)
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
**Implementation (50 lines, not 500):**
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
#!/bin/bash
|
|
84
|
-
# agent-relay team start
|
|
85
|
-
|
|
86
|
-
TEAM_SESSION="relay-team"
|
|
87
|
-
AGENTS=$(cat teams.json | jq -r '.agents[].name')
|
|
88
|
-
|
|
89
|
-
tmux new-session -d -s "$TEAM_SESSION"
|
|
90
|
-
|
|
91
|
-
i=0
|
|
92
|
-
for agent in $AGENTS; do
|
|
93
|
-
if [ $i -eq 0 ]; then
|
|
94
|
-
tmux send-keys -t "$TEAM_SESSION" "agent-relay -n $agent claude" Enter
|
|
95
|
-
else
|
|
96
|
-
tmux new-window -t "$TEAM_SESSION"
|
|
97
|
-
tmux send-keys -t "$TEAM_SESSION" "agent-relay -n $agent claude" Enter
|
|
98
|
-
fi
|
|
99
|
-
((i++))
|
|
100
|
-
done
|
|
101
|
-
|
|
102
|
-
# Add status window
|
|
103
|
-
tmux new-window -t "$TEAM_SESSION" -n "status"
|
|
104
|
-
tmux send-keys -t "$TEAM_SESSION:status" "watch -n1 agent-relay agents" Enter
|
|
105
|
-
|
|
106
|
-
tmux attach -t "$TEAM_SESSION"
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
**User experience:**
|
|
110
|
-
```
|
|
111
|
-
Ctrl+B w → Shows window list:
|
|
112
|
-
0: Alice (attached)
|
|
113
|
-
1: Bob
|
|
114
|
-
2: Charlie
|
|
115
|
-
3: status
|
|
116
|
-
|
|
117
|
-
Ctrl+B 1 → Jump to Bob
|
|
118
|
-
Ctrl+B 3 → See status (agent-relay agents output)
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## Comparison: TUI vs Native tmux
|
|
124
|
-
|
|
125
|
-
| Aspect | TUI Dashboard (blessed) | Native tmux Windows |
|
|
126
|
-
|--------|------------------------|---------------------|
|
|
127
|
-
| **Lines of code** | ~500 | ~50 |
|
|
128
|
-
| **Dependencies** | blessed (~500KB) | None (tmux built-in) |
|
|
129
|
-
| **Learning curve** | New UI to learn | tmux you already know |
|
|
130
|
-
| **Real-time updates** | Yes (event stream) | Yes (watch command) |
|
|
131
|
-
| **Quick switch** | Press 'a', select | Ctrl+B {number} |
|
|
132
|
-
| **See all at once** | TUI list | Ctrl+B w (window list) |
|
|
133
|
-
| **Native experience** | Detach TUI → attach tmux | Already in tmux |
|
|
134
|
-
| **Maintenance** | blessed updates, bugs | tmux is stable |
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## What We Actually Need for Scaling
|
|
139
|
-
|
|
140
|
-
Let's separate "nice to have" from "essential":
|
|
141
|
-
|
|
142
|
-
### Essential (for 5-10 agents)
|
|
143
|
-
|
|
144
|
-
1. **Quick overview of all agents** → `agent-relay agents` (already proposed)
|
|
145
|
-
2. **Know who's busy vs idle** → Activity state in agents output
|
|
146
|
-
3. **Message history** → `agent-relay history` (already proposed)
|
|
147
|
-
4. **Quick attach** → `agent-relay attach Alice`
|
|
148
|
-
5. **Group messaging** → `->relay:@backend` (already proposed)
|
|
149
|
-
|
|
150
|
-
### Nice to Have (but complex)
|
|
151
|
-
|
|
152
|
-
1. **Real-time TUI dashboard** → Use `watch` instead
|
|
153
|
-
2. **Event streaming** → Poll daemon status instead
|
|
154
|
-
3. **Typing indicators** → Not critical for coordination
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## Recommended Simpler Approach
|
|
159
|
-
|
|
160
|
-
### Phase 5 Revised: Minimal Scaling
|
|
161
|
-
|
|
162
|
-
```bash
|
|
163
|
-
# 1. Better status command (essential)
|
|
164
|
-
$ agent-relay agents
|
|
165
|
-
NAME STATUS MESSAGES LAST SEEN
|
|
166
|
-
Alice active 12↑ 8↓ now
|
|
167
|
-
Bob idle 5↑ 14↓ 30s ago
|
|
168
|
-
Charlie offline queued: 3 5m ago
|
|
169
|
-
|
|
170
|
-
# 2. Quick attach (essential)
|
|
171
|
-
$ agent-relay attach Alice
|
|
172
|
-
# Attaches to relay-Alice-* session
|
|
173
|
-
|
|
174
|
-
# 3. Team layout (essential)
|
|
175
|
-
$ agent-relay team start
|
|
176
|
-
# Creates multi-window tmux session
|
|
177
|
-
# Use Ctrl+B w to see all, Ctrl+B {n} to switch
|
|
178
|
-
|
|
179
|
-
# 4. Live status (nice to have, zero code)
|
|
180
|
-
$ watch -n2 agent-relay agents
|
|
181
|
-
# Updates every 2 seconds
|
|
182
|
-
|
|
183
|
-
# 5. Message history (essential)
|
|
184
|
-
$ agent-relay history --last 20
|
|
185
|
-
14:23:01 Alice → Bob: Can you check the API?
|
|
186
|
-
14:23:15 Bob → Alice: On it
|
|
187
|
-
...
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### Implementation Effort
|
|
191
|
-
|
|
192
|
-
| Feature | Complex TUI Approach | Simpler Approach |
|
|
193
|
-
|---------|---------------------|------------------|
|
|
194
|
-
| TUI dashboard | 2 days + blessed dep | 0 (use `watch`) |
|
|
195
|
-
| Event stream | 1 day + protocol change | 0 (poll status) |
|
|
196
|
-
| Activity reporting | 1 day | 0.5 day (just in status) |
|
|
197
|
-
| Team layout | Already proposed | Same (0.5 day) |
|
|
198
|
-
| Better agents cmd | Same | Same (0.5 day) |
|
|
199
|
-
| History command | Same | Same (0.5 day) |
|
|
200
|
-
| **Total** | **5+ days** | **2 days** |
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
## Verdict: Skip the TUI, Use tmux
|
|
205
|
-
|
|
206
|
-
The TUI dashboard is over-engineered. tmux already provides:
|
|
207
|
-
- Multi-window switching (Ctrl+B w)
|
|
208
|
-
- Split panes (Ctrl+B %)
|
|
209
|
-
- Session persistence
|
|
210
|
-
- Window list
|
|
211
|
-
|
|
212
|
-
**What we actually need:**
|
|
213
|
-
|
|
214
|
-
1. **`agent-relay agents`** - Show status with activity state
|
|
215
|
-
2. **`agent-relay attach <name>`** - Quick attach helper
|
|
216
|
-
3. **`agent-relay team start`** - Multi-window tmux layout
|
|
217
|
-
4. **`agent-relay history`** - Query past messages
|
|
218
|
-
|
|
219
|
-
**What we DON'T need:**
|
|
220
|
-
|
|
221
|
-
1. ❌ blessed TUI dependency
|
|
222
|
-
2. ❌ Event streaming from daemon
|
|
223
|
-
3. ❌ Complex activity reporting protocol
|
|
224
|
-
4. ❌ Real-time typing indicators
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
## Updated Design Recommendation
|
|
229
|
-
|
|
230
|
-
### Keep from Phase 5:
|
|
231
|
-
- Agent groups (`->relay:@backend`)
|
|
232
|
-
- Message priority (`!`, `?`)
|
|
233
|
-
- `agent-relay agents` command
|
|
234
|
-
- `agent-relay history` command
|
|
235
|
-
|
|
236
|
-
### Replace TUI with:
|
|
237
|
-
```bash
|
|
238
|
-
# Multi-window tmux session
|
|
239
|
-
agent-relay team start # Creates relay-team session
|
|
240
|
-
agent-relay team attach # Attach to existing
|
|
241
|
-
agent-relay team add Bob # Add agent to running team
|
|
242
|
-
|
|
243
|
-
# Quick attach to single agent
|
|
244
|
-
agent-relay attach Alice
|
|
245
|
-
|
|
246
|
-
# Live status (zero code, just docs)
|
|
247
|
-
watch -n2 agent-relay agents
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
### Effort Saved:
|
|
251
|
-
- No blessed dependency
|
|
252
|
-
- No event streaming protocol
|
|
253
|
-
- No TUI code maintenance
|
|
254
|
-
- 3+ days of implementation saved
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## Behavior Impact Summary
|
|
259
|
-
|
|
260
|
-
| Scenario | TUI Approach | Simpler Approach |
|
|
261
|
-
|----------|--------------|------------------|
|
|
262
|
-
| See all agents | Open TUI, see list | `agent-relay agents` or `Ctrl+B w` |
|
|
263
|
-
| Switch to Bob | Press 'a', select Bob | `Ctrl+B 1` or `agent-relay attach Bob` |
|
|
264
|
-
| Check if Alice is busy | See "typing..." in TUI | Check status column in agents |
|
|
265
|
-
| Send message to group | Same | Same (`->relay:@backend`) |
|
|
266
|
-
| View history | Press 'h' in TUI | `agent-relay history` |
|
|
267
|
-
|
|
268
|
-
**The simpler approach does everything the TUI does, with 80% less code.**
|
|
269
|
-
|
|
270
|
-
---
|
|
271
|
-
|
|
272
|
-
## Final Recommendation
|
|
273
|
-
|
|
274
|
-
1. **Don't build the TUI dashboard** - It's solving a problem tmux already solves
|
|
275
|
-
2. **Do add `agent-relay team`** - Leverages tmux's native multi-window
|
|
276
|
-
3. **Do improve `agent-relay agents`** - Add activity state, message counts
|
|
277
|
-
4. **Do add `agent-relay history`** - Query past messages
|
|
278
|
-
5. **Document `watch` trick** - Free live updates
|
|
279
|
-
|
|
280
|
-
This keeps the simplicity advantage while scaling to 10+ agents.
|