agent-relay 1.0.22 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/bridge/shadow-cli.d.ts +17 -0
- package/dist/bridge/shadow-cli.d.ts.map +1 -0
- package/dist/bridge/shadow-cli.js +75 -0
- package/dist/bridge/shadow-cli.js.map +1 -0
- package/dist/bridge/shadow-config.d.ts +87 -0
- package/dist/bridge/shadow-config.d.ts.map +1 -0
- package/dist/bridge/shadow-config.js +134 -0
- package/dist/bridge/shadow-config.js.map +1 -0
- package/dist/bridge/spawner.d.ts +68 -1
- package/dist/bridge/spawner.d.ts.map +1 -1
- package/dist/bridge/spawner.js +360 -16
- package/dist/bridge/spawner.js.map +1 -1
- package/dist/bridge/types.d.ts +67 -0
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/cli/index.js +1196 -15
- package/dist/cli/index.js.map +1 -1
- package/dist/cloud/api/auth.d.ts +20 -0
- package/dist/cloud/api/auth.d.ts.map +1 -0
- package/dist/cloud/api/auth.js +128 -0
- package/dist/cloud/api/auth.js.map +1 -0
- package/dist/cloud/api/billing.d.ts +17 -0
- package/dist/cloud/api/billing.d.ts.map +1 -0
- package/dist/cloud/api/billing.js +353 -0
- package/dist/cloud/api/billing.js.map +1 -0
- package/dist/cloud/api/cli-pty-runner.d.ts +54 -0
- package/dist/cloud/api/cli-pty-runner.d.ts.map +1 -0
- package/dist/cloud/api/cli-pty-runner.js +119 -0
- package/dist/cloud/api/cli-pty-runner.js.map +1 -0
- package/dist/cloud/api/coordinators.d.ts +8 -0
- package/dist/cloud/api/coordinators.d.ts.map +1 -0
- package/dist/cloud/api/coordinators.js +347 -0
- package/dist/cloud/api/coordinators.js.map +1 -0
- package/dist/cloud/api/daemons.d.ts +12 -0
- package/dist/cloud/api/daemons.d.ts.map +1 -0
- package/dist/cloud/api/daemons.js +320 -0
- package/dist/cloud/api/daemons.js.map +1 -0
- package/dist/cloud/api/generic-webhooks.d.ts +8 -0
- package/dist/cloud/api/generic-webhooks.d.ts.map +1 -0
- package/dist/cloud/api/generic-webhooks.js +129 -0
- package/dist/cloud/api/generic-webhooks.js.map +1 -0
- package/dist/cloud/api/git.d.ts +8 -0
- package/dist/cloud/api/git.d.ts.map +1 -0
- package/dist/cloud/api/git.js +131 -0
- package/dist/cloud/api/git.js.map +1 -0
- package/dist/cloud/api/github-app.d.ts +11 -0
- package/dist/cloud/api/github-app.d.ts.map +1 -0
- package/dist/cloud/api/github-app.js +189 -0
- package/dist/cloud/api/github-app.js.map +1 -0
- package/dist/cloud/api/middleware/planLimits.d.ts +43 -0
- package/dist/cloud/api/middleware/planLimits.d.ts.map +1 -0
- package/dist/cloud/api/middleware/planLimits.js +202 -0
- package/dist/cloud/api/middleware/planLimits.js.map +1 -0
- package/dist/cloud/api/monitoring.d.ts +11 -0
- package/dist/cloud/api/monitoring.d.ts.map +1 -0
- package/dist/cloud/api/monitoring.js +578 -0
- package/dist/cloud/api/monitoring.js.map +1 -0
- package/dist/cloud/api/nango-auth.d.ts +9 -0
- package/dist/cloud/api/nango-auth.d.ts.map +1 -0
- package/dist/cloud/api/nango-auth.js +377 -0
- package/dist/cloud/api/nango-auth.js.map +1 -0
- package/dist/cloud/api/onboarding.d.ts +15 -0
- package/dist/cloud/api/onboarding.d.ts.map +1 -0
- package/dist/cloud/api/onboarding.js +588 -0
- package/dist/cloud/api/onboarding.js.map +1 -0
- package/dist/cloud/api/policy.d.ts +8 -0
- package/dist/cloud/api/policy.d.ts.map +1 -0
- package/dist/cloud/api/policy.js +229 -0
- package/dist/cloud/api/policy.js.map +1 -0
- package/dist/cloud/api/providers.d.ts +7 -0
- package/dist/cloud/api/providers.d.ts.map +1 -0
- package/dist/cloud/api/providers.js +507 -0
- package/dist/cloud/api/providers.js.map +1 -0
- package/dist/cloud/api/repos.d.ts +7 -0
- package/dist/cloud/api/repos.d.ts.map +1 -0
- package/dist/cloud/api/repos.js +314 -0
- package/dist/cloud/api/repos.js.map +1 -0
- package/dist/cloud/api/teams.d.ts +7 -0
- package/dist/cloud/api/teams.d.ts.map +1 -0
- package/dist/cloud/api/teams.js +279 -0
- package/dist/cloud/api/teams.js.map +1 -0
- package/dist/cloud/api/test-helpers.d.ts +10 -0
- package/dist/cloud/api/test-helpers.d.ts.map +1 -0
- package/dist/cloud/api/test-helpers.js +575 -0
- package/dist/cloud/api/test-helpers.js.map +1 -0
- package/dist/cloud/api/usage.d.ts +7 -0
- package/dist/cloud/api/usage.d.ts.map +1 -0
- package/dist/cloud/api/usage.js +98 -0
- package/dist/cloud/api/usage.js.map +1 -0
- package/dist/cloud/api/webhooks.d.ts +7 -0
- package/dist/cloud/api/webhooks.d.ts.map +1 -0
- package/dist/cloud/api/webhooks.js +496 -0
- package/dist/cloud/api/webhooks.js.map +1 -0
- package/dist/cloud/api/workspaces.d.ts +7 -0
- package/dist/cloud/api/workspaces.d.ts.map +1 -0
- package/dist/cloud/api/workspaces.js +727 -0
- package/dist/cloud/api/workspaces.js.map +1 -0
- package/dist/cloud/billing/index.d.ts +9 -0
- package/dist/cloud/billing/index.d.ts.map +1 -0
- package/dist/cloud/billing/index.js +9 -0
- package/dist/cloud/billing/index.js.map +1 -0
- package/dist/cloud/billing/plans.d.ts +39 -0
- package/dist/cloud/billing/plans.d.ts.map +1 -0
- package/dist/cloud/billing/plans.js +245 -0
- package/dist/cloud/billing/plans.js.map +1 -0
- package/dist/cloud/billing/service.d.ts +80 -0
- package/dist/cloud/billing/service.d.ts.map +1 -0
- package/dist/cloud/billing/service.js +388 -0
- package/dist/cloud/billing/service.js.map +1 -0
- package/dist/cloud/billing/types.d.ts +141 -0
- package/dist/cloud/billing/types.d.ts.map +1 -0
- package/dist/cloud/billing/types.js +7 -0
- package/dist/cloud/billing/types.js.map +1 -0
- package/dist/cloud/config.d.ts +66 -0
- package/dist/cloud/config.d.ts.map +1 -0
- package/dist/cloud/config.js +92 -0
- package/dist/cloud/config.js.map +1 -0
- package/dist/cloud/db/drizzle.d.ts +215 -0
- package/dist/cloud/db/drizzle.d.ts.map +1 -0
- package/dist/cloud/db/drizzle.js +1083 -0
- package/dist/cloud/db/drizzle.js.map +1 -0
- package/dist/cloud/db/index.d.ts +35 -0
- package/dist/cloud/db/index.d.ts.map +1 -0
- package/dist/cloud/db/index.js +52 -0
- package/dist/cloud/db/index.js.map +1 -0
- package/dist/cloud/db/schema.d.ts +4519 -0
- package/dist/cloud/db/schema.d.ts.map +1 -0
- package/dist/cloud/db/schema.js +547 -0
- package/dist/cloud/db/schema.js.map +1 -0
- package/dist/cloud/index.d.ts +12 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +39 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/provisioner/index.d.ts +75 -0
- package/dist/cloud/provisioner/index.d.ts.map +1 -0
- package/dist/cloud/provisioner/index.js +977 -0
- package/dist/cloud/provisioner/index.js.map +1 -0
- package/dist/cloud/server.d.ts +17 -0
- package/dist/cloud/server.d.ts.map +1 -0
- package/dist/cloud/server.js +534 -0
- package/dist/cloud/server.js.map +1 -0
- package/dist/cloud/services/auto-scaler.d.ts +152 -0
- package/dist/cloud/services/auto-scaler.d.ts.map +1 -0
- package/dist/cloud/services/auto-scaler.js +439 -0
- package/dist/cloud/services/auto-scaler.js.map +1 -0
- package/dist/cloud/services/capacity-manager.d.ts +148 -0
- package/dist/cloud/services/capacity-manager.d.ts.map +1 -0
- package/dist/cloud/services/capacity-manager.js +449 -0
- package/dist/cloud/services/capacity-manager.js.map +1 -0
- package/dist/cloud/services/ci-agent-spawner.d.ts +49 -0
- package/dist/cloud/services/ci-agent-spawner.d.ts.map +1 -0
- package/dist/cloud/services/ci-agent-spawner.js +373 -0
- package/dist/cloud/services/ci-agent-spawner.js.map +1 -0
- package/dist/cloud/services/coordinator.d.ts +62 -0
- package/dist/cloud/services/coordinator.d.ts.map +1 -0
- package/dist/cloud/services/coordinator.js +389 -0
- package/dist/cloud/services/coordinator.js.map +1 -0
- package/dist/cloud/services/index.d.ts +12 -0
- package/dist/cloud/services/index.d.ts.map +1 -0
- package/dist/cloud/services/index.js +15 -0
- package/dist/cloud/services/index.js.map +1 -0
- package/dist/cloud/services/mention-handler.d.ts +65 -0
- package/dist/cloud/services/mention-handler.d.ts.map +1 -0
- package/dist/cloud/services/mention-handler.js +405 -0
- package/dist/cloud/services/mention-handler.js.map +1 -0
- package/dist/cloud/services/nango.d.ts +126 -0
- package/dist/cloud/services/nango.d.ts.map +1 -0
- package/dist/cloud/services/nango.js +191 -0
- package/dist/cloud/services/nango.js.map +1 -0
- package/dist/cloud/services/persistence.d.ts +131 -0
- package/dist/cloud/services/persistence.d.ts.map +1 -0
- package/dist/cloud/services/persistence.js +200 -0
- package/dist/cloud/services/persistence.js.map +1 -0
- package/dist/cloud/services/planLimits.d.ts +125 -0
- package/dist/cloud/services/planLimits.d.ts.map +1 -0
- package/dist/cloud/services/planLimits.js +282 -0
- package/dist/cloud/services/planLimits.js.map +1 -0
- package/dist/cloud/services/scaling-orchestrator.d.ts +159 -0
- package/dist/cloud/services/scaling-orchestrator.d.ts.map +1 -0
- package/dist/cloud/services/scaling-orchestrator.js +502 -0
- package/dist/cloud/services/scaling-orchestrator.js.map +1 -0
- package/dist/cloud/services/scaling-policy.d.ts +121 -0
- package/dist/cloud/services/scaling-policy.d.ts.map +1 -0
- package/dist/cloud/services/scaling-policy.js +415 -0
- package/dist/cloud/services/scaling-policy.js.map +1 -0
- package/dist/cloud/vault/index.d.ts +76 -0
- package/dist/cloud/vault/index.d.ts.map +1 -0
- package/dist/cloud/vault/index.js +219 -0
- package/dist/cloud/vault/index.js.map +1 -0
- package/dist/cloud/webhooks/index.d.ts +24 -0
- package/dist/cloud/webhooks/index.d.ts.map +1 -0
- package/dist/cloud/webhooks/index.js +29 -0
- package/dist/cloud/webhooks/index.js.map +1 -0
- package/dist/cloud/webhooks/parsers/github.d.ts +8 -0
- package/dist/cloud/webhooks/parsers/github.d.ts.map +1 -0
- package/dist/cloud/webhooks/parsers/github.js +234 -0
- package/dist/cloud/webhooks/parsers/github.js.map +1 -0
- package/dist/cloud/webhooks/parsers/index.d.ts +23 -0
- package/dist/cloud/webhooks/parsers/index.d.ts.map +1 -0
- package/dist/cloud/webhooks/parsers/index.js +30 -0
- package/dist/cloud/webhooks/parsers/index.js.map +1 -0
- package/dist/cloud/webhooks/parsers/linear.d.ts +9 -0
- package/dist/cloud/webhooks/parsers/linear.d.ts.map +1 -0
- package/dist/cloud/webhooks/parsers/linear.js +258 -0
- package/dist/cloud/webhooks/parsers/linear.js.map +1 -0
- package/dist/cloud/webhooks/parsers/slack.d.ts +9 -0
- package/dist/cloud/webhooks/parsers/slack.d.ts.map +1 -0
- package/dist/cloud/webhooks/parsers/slack.js +214 -0
- package/dist/cloud/webhooks/parsers/slack.js.map +1 -0
- package/dist/cloud/webhooks/responders/github.d.ts +8 -0
- package/dist/cloud/webhooks/responders/github.d.ts.map +1 -0
- package/dist/cloud/webhooks/responders/github.js +73 -0
- package/dist/cloud/webhooks/responders/github.js.map +1 -0
- package/dist/cloud/webhooks/responders/index.d.ts +23 -0
- package/dist/cloud/webhooks/responders/index.d.ts.map +1 -0
- package/dist/cloud/webhooks/responders/index.js +30 -0
- package/dist/cloud/webhooks/responders/index.js.map +1 -0
- package/dist/cloud/webhooks/responders/linear.d.ts +9 -0
- package/dist/cloud/webhooks/responders/linear.d.ts.map +1 -0
- package/dist/cloud/webhooks/responders/linear.js +149 -0
- package/dist/cloud/webhooks/responders/linear.js.map +1 -0
- package/dist/cloud/webhooks/responders/slack.d.ts +20 -0
- package/dist/cloud/webhooks/responders/slack.d.ts.map +1 -0
- package/dist/cloud/webhooks/responders/slack.js +178 -0
- package/dist/cloud/webhooks/responders/slack.js.map +1 -0
- package/dist/cloud/webhooks/router.d.ts +25 -0
- package/dist/cloud/webhooks/router.d.ts.map +1 -0
- package/dist/cloud/webhooks/router.js +504 -0
- package/dist/cloud/webhooks/router.js.map +1 -0
- package/dist/cloud/webhooks/rules-engine.d.ts +24 -0
- package/dist/cloud/webhooks/rules-engine.d.ts.map +1 -0
- package/dist/cloud/webhooks/rules-engine.js +287 -0
- package/dist/cloud/webhooks/rules-engine.js.map +1 -0
- package/dist/cloud/webhooks/types.d.ts +186 -0
- package/dist/cloud/webhooks/types.d.ts.map +1 -0
- package/dist/cloud/webhooks/types.js +8 -0
- package/dist/cloud/webhooks/types.js.map +1 -0
- package/dist/continuity/formatter.d.ts +51 -0
- package/dist/continuity/formatter.d.ts.map +1 -0
- package/dist/continuity/formatter.js +313 -0
- package/dist/continuity/formatter.js.map +1 -0
- package/dist/continuity/handoff-store.d.ts +67 -0
- package/dist/continuity/handoff-store.d.ts.map +1 -0
- package/dist/continuity/handoff-store.js +472 -0
- package/dist/continuity/handoff-store.js.map +1 -0
- package/dist/continuity/index.d.ts +45 -0
- package/dist/continuity/index.d.ts.map +1 -0
- package/dist/continuity/index.js +48 -0
- package/dist/continuity/index.js.map +1 -0
- package/dist/continuity/ledger-store.d.ts +110 -0
- package/dist/continuity/ledger-store.d.ts.map +1 -0
- package/dist/continuity/ledger-store.js +500 -0
- package/dist/continuity/ledger-store.js.map +1 -0
- package/dist/continuity/manager.d.ts +178 -0
- package/dist/continuity/manager.d.ts.map +1 -0
- package/dist/continuity/manager.js +562 -0
- package/dist/continuity/manager.js.map +1 -0
- package/dist/continuity/parser.d.ts +76 -0
- package/dist/continuity/parser.d.ts.map +1 -0
- package/dist/continuity/parser.js +579 -0
- package/dist/continuity/parser.js.map +1 -0
- package/dist/continuity/types.d.ts +180 -0
- package/dist/continuity/types.d.ts.map +1 -0
- package/dist/continuity/types.js +9 -0
- package/dist/continuity/types.js.map +1 -0
- package/dist/daemon/agent-manager.d.ts +114 -0
- package/dist/daemon/agent-manager.d.ts.map +1 -0
- package/dist/daemon/agent-manager.js +513 -0
- package/dist/daemon/agent-manager.js.map +1 -0
- package/dist/daemon/agent-registry.d.ts +34 -0
- package/dist/daemon/agent-registry.d.ts.map +1 -1
- package/dist/daemon/agent-registry.js +45 -2
- package/dist/daemon/agent-registry.js.map +1 -1
- package/dist/daemon/api.d.ts +81 -0
- package/dist/daemon/api.d.ts.map +1 -0
- package/dist/daemon/api.js +554 -0
- package/dist/daemon/api.js.map +1 -0
- package/dist/daemon/cli-auth.d.ts +67 -0
- package/dist/daemon/cli-auth.d.ts.map +1 -0
- package/dist/daemon/cli-auth.js +537 -0
- package/dist/daemon/cli-auth.js.map +1 -0
- package/dist/daemon/cloud-sync.d.ts +101 -0
- package/dist/daemon/cloud-sync.d.ts.map +1 -0
- package/dist/daemon/cloud-sync.js +263 -0
- package/dist/daemon/cloud-sync.js.map +1 -0
- package/dist/daemon/index.d.ts +4 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +6 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/orchestrator.d.ts +155 -0
- package/dist/daemon/orchestrator.d.ts.map +1 -0
- package/dist/daemon/orchestrator.js +766 -0
- package/dist/daemon/orchestrator.js.map +1 -0
- package/dist/daemon/router.d.ts +29 -0
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +143 -21
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/server.d.ts +42 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +199 -16
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/services/browser-testing.d.ts +88 -0
- package/dist/daemon/services/browser-testing.d.ts.map +1 -0
- package/dist/daemon/services/browser-testing.js +244 -0
- package/dist/daemon/services/browser-testing.js.map +1 -0
- package/dist/daemon/services/container-spawner.d.ts +135 -0
- package/dist/daemon/services/container-spawner.d.ts.map +1 -0
- package/dist/daemon/services/container-spawner.js +313 -0
- package/dist/daemon/services/container-spawner.js.map +1 -0
- package/dist/daemon/types.d.ts +131 -0
- package/dist/daemon/types.d.ts.map +1 -0
- package/dist/daemon/types.js +6 -0
- package/dist/daemon/types.js.map +1 -0
- package/dist/daemon/workspace-manager.d.ts +75 -0
- package/dist/daemon/workspace-manager.d.ts.map +1 -0
- package/dist/daemon/workspace-manager.js +289 -0
- package/dist/daemon/workspace-manager.js.map +1 -0
- package/dist/dashboard/out/404.html +1 -1
- package/dist/dashboard/out/_next/static/chunks/116-2502180def231162.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/724-73c1ee5f60abe860.js +9 -0
- package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-dc2e3a1a22478efc.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/history/page-56a8b4616a90dc43.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/login/page-3eac37ea6f5dd153.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1081dd190a331a91.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/page-daf87e86f783f980.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/pricing/page-4d72d5a5d8a9b618.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/signup/page-fee4ed1709070bcd.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
- package/dist/dashboard/out/_next/static/chunks/{main-e0a1f53fe0617a63.js → main-97850e03d723ea8c.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/main-app-5d692157a8eb1fd9.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
- package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +1 -0
- package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +1 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-128.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +45 -0
- package/dist/dashboard/out/alt-logos/logo.svg +38 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo.svg +38 -0
- package/dist/dashboard/out/app.html +1 -0
- package/dist/dashboard/out/app.txt +7 -0
- package/dist/dashboard/out/connect-repos.html +1 -0
- package/dist/dashboard/out/connect-repos.txt +7 -0
- package/dist/dashboard/out/history.html +1 -0
- package/dist/dashboard/out/history.txt +7 -0
- package/dist/dashboard/out/index.html +1 -1
- package/dist/dashboard/out/index.txt +2 -2
- package/dist/dashboard/out/login.html +6 -0
- package/dist/dashboard/out/login.txt +7 -0
- package/dist/dashboard/out/metrics.html +1 -515
- package/dist/dashboard/out/metrics.txt +2 -2
- package/dist/dashboard/out/pricing.html +13 -0
- package/dist/dashboard/out/pricing.txt +7 -0
- package/dist/dashboard/out/providers.html +1 -0
- package/dist/dashboard/out/providers.txt +7 -0
- package/dist/dashboard/out/signup.html +6 -0
- package/dist/dashboard/out/signup.txt +7 -0
- package/dist/dashboard-server/metrics.d.ts.map +1 -1
- package/dist/dashboard-server/metrics.js +3 -2
- package/dist/dashboard-server/metrics.js.map +1 -1
- package/dist/dashboard-server/server.d.ts.map +1 -1
- package/dist/dashboard-server/server.js +2653 -130
- package/dist/dashboard-server/server.js.map +1 -1
- package/dist/hooks/emitter.d.ts +40 -0
- package/dist/hooks/emitter.d.ts.map +1 -0
- package/dist/hooks/emitter.js +63 -0
- package/dist/hooks/emitter.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/registry.d.ts +173 -0
- package/dist/hooks/registry.d.ts.map +1 -0
- package/dist/hooks/registry.js +476 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/trajectory-hooks.d.ts +52 -0
- package/dist/hooks/trajectory-hooks.d.ts.map +1 -0
- package/dist/hooks/trajectory-hooks.js +183 -0
- package/dist/hooks/trajectory-hooks.js.map +1 -0
- package/dist/hooks/types.d.ts +141 -0
- package/dist/hooks/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/adapters/index.d.ts +8 -0
- package/dist/memory/adapters/index.d.ts.map +1 -0
- package/dist/memory/adapters/index.js +8 -0
- package/dist/memory/adapters/index.js.map +1 -0
- package/dist/memory/adapters/inmemory.d.ts +59 -0
- package/dist/memory/adapters/inmemory.d.ts.map +1 -0
- package/dist/memory/adapters/inmemory.js +195 -0
- package/dist/memory/adapters/inmemory.js.map +1 -0
- package/dist/memory/adapters/supermemory.d.ts +71 -0
- package/dist/memory/adapters/supermemory.d.ts.map +1 -0
- package/dist/memory/adapters/supermemory.js +338 -0
- package/dist/memory/adapters/supermemory.js.map +1 -0
- package/dist/memory/factory.d.ts +48 -0
- package/dist/memory/factory.d.ts.map +1 -0
- package/dist/memory/factory.js +143 -0
- package/dist/memory/factory.js.map +1 -0
- package/dist/memory/index.d.ts +32 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +32 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memory-hooks.d.ts +60 -0
- package/dist/memory/memory-hooks.d.ts.map +1 -0
- package/dist/memory/memory-hooks.js +313 -0
- package/dist/memory/memory-hooks.js.map +1 -0
- package/dist/memory/service.d.ts +49 -0
- package/dist/memory/service.d.ts.map +1 -0
- package/dist/memory/service.js +146 -0
- package/dist/memory/service.js.map +1 -0
- package/dist/memory/types.d.ts +195 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +8 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/policy/agent-policy.d.ts +225 -0
- package/dist/policy/agent-policy.d.ts.map +1 -0
- package/dist/policy/agent-policy.js +665 -0
- package/dist/policy/agent-policy.js.map +1 -0
- package/dist/policy/cloud-policy-fetcher.d.ts +12 -0
- package/dist/policy/cloud-policy-fetcher.d.ts.map +1 -0
- package/dist/policy/cloud-policy-fetcher.js +64 -0
- package/dist/policy/cloud-policy-fetcher.js.map +1 -0
- package/dist/protocol/types.d.ts +10 -1
- package/dist/protocol/types.d.ts.map +1 -1
- package/dist/resiliency/context-persistence.d.ts +140 -0
- package/dist/resiliency/context-persistence.d.ts.map +1 -0
- package/dist/resiliency/context-persistence.js +397 -0
- package/dist/resiliency/context-persistence.js.map +1 -0
- package/dist/resiliency/crash-insights.d.ts +156 -0
- package/dist/resiliency/crash-insights.d.ts.map +1 -0
- package/dist/resiliency/crash-insights.js +492 -0
- package/dist/resiliency/crash-insights.js.map +1 -0
- package/dist/resiliency/gossip-health.d.ts +137 -0
- package/dist/resiliency/gossip-health.d.ts.map +1 -0
- package/dist/resiliency/gossip-health.js +241 -0
- package/dist/resiliency/gossip-health.js.map +1 -0
- package/dist/resiliency/health-monitor.d.ts +97 -0
- package/dist/resiliency/health-monitor.d.ts.map +1 -0
- package/dist/resiliency/health-monitor.js +291 -0
- package/dist/resiliency/health-monitor.js.map +1 -0
- package/dist/resiliency/index.d.ts +68 -0
- package/dist/resiliency/index.d.ts.map +1 -0
- package/dist/resiliency/index.js +68 -0
- package/dist/resiliency/index.js.map +1 -0
- package/dist/resiliency/leader-watchdog.d.ts +109 -0
- package/dist/resiliency/leader-watchdog.d.ts.map +1 -0
- package/dist/resiliency/leader-watchdog.js +189 -0
- package/dist/resiliency/leader-watchdog.js.map +1 -0
- package/dist/resiliency/logger.d.ts +114 -0
- package/dist/resiliency/logger.d.ts.map +1 -0
- package/dist/resiliency/logger.js +250 -0
- package/dist/resiliency/logger.js.map +1 -0
- package/dist/resiliency/memory-monitor.d.ts +172 -0
- package/dist/resiliency/memory-monitor.d.ts.map +1 -0
- package/dist/resiliency/memory-monitor.js +593 -0
- package/dist/resiliency/memory-monitor.js.map +1 -0
- package/dist/resiliency/metrics.d.ts +115 -0
- package/dist/resiliency/metrics.d.ts.map +1 -0
- package/dist/resiliency/metrics.js +239 -0
- package/dist/resiliency/metrics.js.map +1 -0
- package/dist/resiliency/provider-context.d.ts +100 -0
- package/dist/resiliency/provider-context.d.ts.map +1 -0
- package/dist/resiliency/provider-context.js +360 -0
- package/dist/resiliency/provider-context.js.map +1 -0
- package/dist/resiliency/stateless-lead.d.ts +149 -0
- package/dist/resiliency/stateless-lead.d.ts.map +1 -0
- package/dist/resiliency/stateless-lead.js +308 -0
- package/dist/resiliency/stateless-lead.js.map +1 -0
- package/dist/resiliency/supervisor.d.ts +147 -0
- package/dist/resiliency/supervisor.d.ts.map +1 -0
- package/dist/resiliency/supervisor.js +459 -0
- package/dist/resiliency/supervisor.js.map +1 -0
- package/dist/shared/cli-auth-config.d.ts +91 -0
- package/dist/shared/cli-auth-config.d.ts.map +1 -0
- package/dist/shared/cli-auth-config.js +264 -0
- package/dist/shared/cli-auth-config.js.map +1 -0
- package/dist/storage/adapter.d.ts +3 -1
- package/dist/storage/adapter.d.ts.map +1 -1
- package/dist/storage/adapter.js +12 -2
- package/dist/storage/adapter.js.map +1 -1
- package/dist/storage/sqlite-adapter.d.ts.map +1 -1
- package/dist/storage/sqlite-adapter.js +18 -14
- package/dist/storage/sqlite-adapter.js.map +1 -1
- package/dist/trajectory/config.d.ts +84 -0
- package/dist/trajectory/config.d.ts.map +1 -0
- package/dist/trajectory/config.js +163 -0
- package/dist/trajectory/config.js.map +1 -0
- package/dist/trajectory/index.d.ts +8 -0
- package/dist/trajectory/index.d.ts.map +1 -0
- package/dist/trajectory/index.js +8 -0
- package/dist/trajectory/index.js.map +1 -0
- package/dist/trajectory/integration.d.ts +292 -0
- package/dist/trajectory/integration.d.ts.map +1 -0
- package/dist/trajectory/integration.js +834 -0
- package/dist/trajectory/integration.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.d.ts +40 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +84 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/project-namespace.d.ts +24 -0
- package/dist/utils/project-namespace.d.ts.map +1 -1
- package/dist/utils/project-namespace.js +84 -0
- package/dist/utils/project-namespace.js.map +1 -1
- package/dist/wrapper/client.d.ts +16 -1
- package/dist/wrapper/client.d.ts.map +1 -1
- package/dist/wrapper/client.js +32 -1
- package/dist/wrapper/client.js.map +1 -1
- package/dist/wrapper/parser.d.ts +13 -0
- package/dist/wrapper/parser.d.ts.map +1 -1
- package/dist/wrapper/parser.js +217 -47
- package/dist/wrapper/parser.js.map +1 -1
- package/dist/wrapper/pty-wrapper.d.ts +219 -17
- package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
- package/dist/wrapper/pty-wrapper.js +1050 -104
- package/dist/wrapper/pty-wrapper.js.map +1 -1
- package/dist/wrapper/shared.d.ts +165 -0
- package/dist/wrapper/shared.d.ts.map +1 -0
- package/dist/wrapper/shared.js +270 -0
- package/dist/wrapper/shared.js.map +1 -0
- package/dist/wrapper/tmux-wrapper.d.ts +78 -11
- package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
- package/dist/wrapper/tmux-wrapper.js +567 -106
- package/dist/wrapper/tmux-wrapper.js.map +1 -1
- package/docs/CLOUD-ARCHITECTURE.md +804 -0
- package/docs/CLOUD-ONBOARDING-DESIGN.md +1983 -0
- package/docs/HOOKS_API.md +394 -0
- package/docs/WRAPPER_EVENTS.md +358 -0
- package/docs/agent-policy-snippet.md +40 -0
- package/docs/agent-relay-protocol.md +238 -0
- package/docs/agent-relay-snippet.md +115 -6
- package/docs/archive/EXECUTIVE_SUMMARY.md +358 -0
- package/docs/archive/ROADMAP.md +329 -0
- package/docs/archive/TESTING_PRESENCE_FEATURES.md +327 -0
- package/docs/competitive/GASTOWN.md +451 -0
- package/docs/{COMPETITIVE_ANALYSIS.md → competitive/OVERVIEW.md} +1 -0
- package/docs/competitive/README.md +34 -0
- package/docs/competitive/TMUX_ORCHESTRATOR.md +605 -0
- package/docs/dashboard.png +0 -0
- package/docs/design/ci-failure-webhooks.md +812 -0
- package/docs/design/comprehensive-integrations.md +238 -0
- package/docs/design/e2b-sandbox-integration.md +504 -0
- package/docs/design/github-app-permissions.md +264 -0
- package/docs/guides/CLOUD.md +236 -0
- package/docs/guides/LOCAL.md +535 -0
- package/docs/guides/SELF-HOSTED.md +494 -0
- package/docs/local-testing.md +428 -0
- package/docs/proposals/continuous-claude-integration.md +622 -0
- package/docs/proposals/custom-commands.md +368 -0
- package/docs/proposals/shadow-as-subagent.md +765 -0
- package/docs/proposals/slack-bot-integration.md +1457 -0
- package/docs/tasks/global-skills-system.tasks.md +230 -0
- package/docs/tasks/webhook-integrations.tasks.md +184 -0
- package/docs/tasks/workspace-capabilities.tasks.md +121 -0
- package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +366 -0
- package/package.json +45 -7
- package/scripts/cloud-setup.sh +96 -0
- package/scripts/manual-qa.sh +293 -0
- package/scripts/postinstall.js +60 -0
- package/scripts/run-cloud-qa.sh +220 -0
- package/scripts/test-cli-auth/Dockerfile +44 -0
- package/scripts/test-cli-auth/Dockerfile.real +79 -0
- package/scripts/test-cli-auth/README.md +286 -0
- package/scripts/test-cli-auth/ci-test-real-clis.ts +251 -0
- package/scripts/test-cli-auth/ci-test-runner.ts +263 -0
- package/scripts/test-cli-auth/mock-cli.sh +147 -0
- package/scripts/test-cli-auth/package.json +14 -0
- package/scripts/test-cli-auth/test-oauth-flow.ts +220 -0
- package/scripts/test-pty-input-auto.js +222 -0
- package/scripts/test-pty-input.js +150 -0
- package/dist/dashboard/out/_next/static/chunks/app/layout-c9d8c5d95e48c6bf.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/metrics/page-8aa9936bc6c771ab.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/page-4498be09a5157759.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/main-app-bae2e535de00de50.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/webpack-c81f7fd28659d64f.js +0 -1
- package/dist/dashboard/out/_next/static/css/50ed6996e3df7bdd.css +0 -1
- /package/dist/dashboard/out/_next/static/{DXFA-jj8wb3PcY5DX2xcU → H5aWG0udPB4iOUIl_gytz}/_buildManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/{DXFA-jj8wb3PcY5DX2xcU → H5aWG0udPB4iOUIl_gytz}/_ssgManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{117-3bef7b19f3e60751.js → 117-b100311aff8d5c61.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{648-6cf686106c891ad3.js → 648-a13d3c2b1be45466.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-8ff6572bc7c9bc61.js → page-a4973f3e3c82fb67.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-26bd8d656b496dba.js → fd9d1056-bf46c09eb57e019c.js} +0 -0
- /package/docs/{CHANGELOG.md → archive/CHANGELOG.md} +0 -0
- /package/docs/{CLI-SIMPLIFICATION-COMPLETE.md → archive/CLI-SIMPLIFICATION-COMPLETE.md} +0 -0
- /package/docs/{DESIGN_BRIDGE_STAFFING.md → archive/DESIGN_BRIDGE_STAFFING.md} +0 -0
- /package/docs/{DESIGN_V2.md → archive/DESIGN_V2.md} +0 -0
- /package/docs/{MONETIZATION.md → archive/MONETIZATION.md} +0 -0
- /package/docs/{PROPOSAL-trajectories.md → archive/PROPOSAL-trajectories.md} +0 -0
- /package/docs/{SCALING_ANALYSIS.md → archive/SCALING_ANALYSIS.md} +0 -0
- /package/docs/{TMUX_IMPLEMENTATION_NOTES.md → archive/TMUX_IMPLEMENTATION_NOTES.md} +0 -0
- /package/docs/{TMUX_IMPROVEMENTS.md → archive/TMUX_IMPROVEMENTS.md} +0 -0
- /package/docs/{dashboard-v2-plan.md → archive/dashboard-v2-plan.md} +0 -0
- /package/docs/{removable-code-analysis.md → archive/removable-code-analysis.md} +0 -0
- /package/docs/{competitive-analysis-mcp-agent-mail.md → competitive/MCP_AGENT_MAIL.md} +0 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
# Agent Relay Roadmap
|
|
2
|
+
|
|
3
|
+
This roadmap tracks planned improvements, bug fixes, and new features for agent-relay. Issues are tracked in [Beads](https://github.com/steveyegge/beads).
|
|
4
|
+
|
|
5
|
+
**Last Updated:** 2025-12-20
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
| Category | Open | In Progress |
|
|
12
|
+
|----------|------|-------------|
|
|
13
|
+
| Bugs | 4 | 0 |
|
|
14
|
+
| Features | 7 | 1 |
|
|
15
|
+
| Tasks | 7 | 1 |
|
|
16
|
+
| **Total** | **18** | **2** |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Bugs
|
|
21
|
+
|
|
22
|
+
### `agent-relay-ahe` Session resume not implemented
|
|
23
|
+
**Status:** Open | **Priority:** P2
|
|
24
|
+
|
|
25
|
+
Session resume tokens are received but not persisted or validated. The server always responds with `RESUME_TOO_OLD`, breaking the resume capability advertised in the protocol.
|
|
26
|
+
|
|
27
|
+
**Location:** `src/daemon/connection.ts:140-143`
|
|
28
|
+
|
|
29
|
+
**Required Work:**
|
|
30
|
+
- Implement token persistence
|
|
31
|
+
- Add session state recovery
|
|
32
|
+
- Validate resume tokens on reconnect
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
### `agent-relay-5af` Hook doesn't integrate with daemon-based messaging
|
|
37
|
+
**Status:** Open | **Priority:** P2
|
|
38
|
+
|
|
39
|
+
The inbox-check hook reads from file-based inbox but the daemon uses SQLite. When using daemon mode, the hook won't see messages.
|
|
40
|
+
|
|
41
|
+
**Location:** `src/hooks/inbox-check/hook.ts`
|
|
42
|
+
|
|
43
|
+
**Required Work:**
|
|
44
|
+
- Query daemon storage from hook, OR
|
|
45
|
+
- Ensure inbox files are written in daemon mode too
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### `agent-relay-6rz` Message injection timing can cause race conditions
|
|
50
|
+
**Status:** Open | **Priority:** P2
|
|
51
|
+
|
|
52
|
+
Injection waits for 'idle' (1.5s since last output) but this is fragile. If agent produces output during injection, messages could interleave.
|
|
53
|
+
|
|
54
|
+
**Location:** `src/wrapper/tmux-wrapper.ts:564-569`
|
|
55
|
+
|
|
56
|
+
**Required Work:**
|
|
57
|
+
- Input buffer detection
|
|
58
|
+
- Bracketed paste mode support
|
|
59
|
+
- Agent-specific injection strategies
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
### `agent-relay-8nx` SIGINT/SIGTERM handlers don't await cleanup
|
|
64
|
+
**Status:** Open | **Priority:** P2
|
|
65
|
+
|
|
66
|
+
SIGINT handlers call `stop()` but `process.exit(0)` runs immediately. The `stop()` is async but not awaited, potentially leaving socket files or incomplete shutdown.
|
|
67
|
+
|
|
68
|
+
**Location:** `src/cli/index.ts:74-77`
|
|
69
|
+
|
|
70
|
+
**Required Work:**
|
|
71
|
+
- Await async cleanup before exit
|
|
72
|
+
- Ensure socket files are removed
|
|
73
|
+
- Add timeout for cleanup operations
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Features
|
|
78
|
+
|
|
79
|
+
### `agent-relay-ghy` Team config: auto-spawn agents from teams.json
|
|
80
|
+
**Status:** In Progress | **Priority:** P2
|
|
81
|
+
|
|
82
|
+
When a project has a `teams.json` config file, `agent-relay up` should either auto-spawn terminal sessions for each agent or validate names against the config.
|
|
83
|
+
|
|
84
|
+
**teams.json format:**
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"team": "my-project",
|
|
88
|
+
"agents": [
|
|
89
|
+
{"name": "Coordinator", "cli": "claude", "role": "coordinator"},
|
|
90
|
+
{"name": "LeadDev", "cli": "claude", "role": "developer"}
|
|
91
|
+
],
|
|
92
|
+
"autoSpawn": false
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Commands:**
|
|
97
|
+
- `agent-relay up --spawn` - force spawn all agents
|
|
98
|
+
- `agent-relay up --no-spawn` - just start daemon, manual agent starts
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### `agent-relay-2z1` ACK messages not used for reliability
|
|
103
|
+
**Status:** Open | **Priority:** P2
|
|
104
|
+
|
|
105
|
+
ACK messages are accepted but not processed. The protocol supports reliable delivery with ACK/NACK but it's not implemented.
|
|
106
|
+
|
|
107
|
+
**Location:** `src/daemon/connection.ts:114-116`
|
|
108
|
+
|
|
109
|
+
**Required Work:**
|
|
110
|
+
- Track unACKed messages
|
|
111
|
+
- Implement retry logic
|
|
112
|
+
- Add configurable TTL for messages
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### `agent-relay-go9` PostgreSQL storage adapter
|
|
117
|
+
**Status:** Open | **Priority:** P2
|
|
118
|
+
|
|
119
|
+
PostgreSQL is listed as a storage option but throws "not yet implemented". For production multi-node deployments, SQLite won't scale.
|
|
120
|
+
|
|
121
|
+
**Location:** `src/storage/adapter.ts:152-162`
|
|
122
|
+
|
|
123
|
+
**Required Work:**
|
|
124
|
+
- Implement PostgreSQL adapter
|
|
125
|
+
- Add connection pooling
|
|
126
|
+
- Support distributed storage for multi-node setups
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### `agent-relay-sio` Graceful degradation when daemon unavailable
|
|
131
|
+
**Status:** Open | **Priority:** P2
|
|
132
|
+
|
|
133
|
+
Daemon connection failures are silently caught with no recovery mechanism.
|
|
134
|
+
|
|
135
|
+
**Location:** `src/wrapper/tmux-wrapper.ts:195-197`
|
|
136
|
+
|
|
137
|
+
**Required Work:**
|
|
138
|
+
- Periodic reconnection attempts
|
|
139
|
+
- Queue messages for later delivery
|
|
140
|
+
- Visual indicator in terminal showing connection status
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### `agent-relay-dyr` Authentication between agents
|
|
145
|
+
**Status:** Open | **Priority:** P2
|
|
146
|
+
|
|
147
|
+
Any process can connect to the daemon socket and impersonate any agent name. No authentication exists.
|
|
148
|
+
|
|
149
|
+
**Required Work:**
|
|
150
|
+
- Per-agent tokens/secrets
|
|
151
|
+
- Socket permission checks
|
|
152
|
+
- Optional TLS for non-localhost deployments
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
### `agent-relay-0bn` Dashboard real-time connection status
|
|
157
|
+
**Status:** Open | **Priority:** P2
|
|
158
|
+
|
|
159
|
+
Dashboard shows agent status from messages but doesn't show live connection status (connected/disconnected).
|
|
160
|
+
|
|
161
|
+
**Required Work:**
|
|
162
|
+
- Show online/offline indicators
|
|
163
|
+
- Display last-seen timestamps
|
|
164
|
+
- Real-time connection state from daemon
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
### `agent-relay-52d` Metrics/observability for daemon
|
|
169
|
+
**Status:** Open | **Priority:** P2
|
|
170
|
+
|
|
171
|
+
No way to monitor daemon health, message throughput, or agent activity.
|
|
172
|
+
|
|
173
|
+
**Required Work:**
|
|
174
|
+
- `/metrics` endpoint for Prometheus
|
|
175
|
+
- Message count/rate stats
|
|
176
|
+
- Connection lifecycle events
|
|
177
|
+
- Error rate tracking
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
### `agent-relay-8ff` Agent list command in CLI
|
|
182
|
+
**Status:** Open | **Priority:** P2
|
|
183
|
+
|
|
184
|
+
CLI has `up/down/status/read` but no way to list connected agents or see message history from command line.
|
|
185
|
+
|
|
186
|
+
**Required Work:**
|
|
187
|
+
- `agent-relay agents` - list connected agents
|
|
188
|
+
- `agent-relay history` - show recent messages
|
|
189
|
+
- `agent-relay send <agent> <msg>` - send from CLI
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Tasks
|
|
194
|
+
|
|
195
|
+
### `agent-relay-8z1` Add CLI tests for new command structure
|
|
196
|
+
**Status:** In Progress | **Priority:** P2
|
|
197
|
+
|
|
198
|
+
Add comprehensive tests for CLI commands after command consolidation.
|
|
199
|
+
|
|
200
|
+
**Blocked by:** Command consolidation tasks (closed)
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### `agent-relay-hks` Increase test coverage
|
|
205
|
+
**Status:** Open | **Priority:** P2
|
|
206
|
+
|
|
207
|
+
Current coverage is only **39% overall**. Key files with 0% coverage:
|
|
208
|
+
- `daemon/server.ts`
|
|
209
|
+
- `dashboard/server.ts`
|
|
210
|
+
- `cli/index.ts`
|
|
211
|
+
- `wrapper/client.ts`
|
|
212
|
+
- `wrapper/tmux-wrapper.ts`
|
|
213
|
+
- `utils/project-namespace.ts`
|
|
214
|
+
|
|
215
|
+
**Required Work:**
|
|
216
|
+
- Integration tests for daemon startup/shutdown lifecycle
|
|
217
|
+
- CLI command tests
|
|
218
|
+
- End-to-end message flow tests
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
### `agent-relay-v57` Message expiration/cleanup in SQLite
|
|
223
|
+
**Status:** Open | **Priority:** P2
|
|
224
|
+
|
|
225
|
+
SQLite adapter has no TTL or cleanup mechanism for old messages. Database will grow unbounded over time.
|
|
226
|
+
|
|
227
|
+
**Location:** `src/storage/sqlite-adapter.ts`
|
|
228
|
+
|
|
229
|
+
**Required Work:**
|
|
230
|
+
- Configurable message retention period
|
|
231
|
+
- Automatic cleanup job
|
|
232
|
+
- Leverage existing `ts` column index
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
### `agent-relay-kzw` Project namespace uses /tmp
|
|
237
|
+
**Status:** Open | **Priority:** P2
|
|
238
|
+
|
|
239
|
+
`BASE_DIR` is `/tmp/agent-relay`. On macOS/Linux, `/tmp` is cleared on reboot, losing all message history.
|
|
240
|
+
|
|
241
|
+
**Location:** `src/utils/project-namespace.ts:13`
|
|
242
|
+
|
|
243
|
+
**Required Work:**
|
|
244
|
+
- XDG_DATA_HOME fallback
|
|
245
|
+
- `~/.agent-relay` option
|
|
246
|
+
- Per-project `.agent-relay` folder
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
### `agent-relay-37i` Message deduplication memory limits
|
|
251
|
+
**Status:** Open | **Priority:** P2
|
|
252
|
+
|
|
253
|
+
`sentMessageHashes` is a Set that grows unbounded. For long-running sessions, this could cause memory issues.
|
|
254
|
+
|
|
255
|
+
**Location:** `src/wrapper/tmux-wrapper.ts:65`
|
|
256
|
+
|
|
257
|
+
**Required Work:**
|
|
258
|
+
- Max size with LRU eviction
|
|
259
|
+
- Time-based expiration
|
|
260
|
+
- Bloom filter alternative for memory efficiency
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
### `agent-relay-5g0` Heartbeat timeout configuration
|
|
265
|
+
**Status:** Open | **Priority:** P2
|
|
266
|
+
|
|
267
|
+
Heartbeat timeout is hardcoded as 2x `heartbeatMs`. Heartbeat failures immediately kill the connection.
|
|
268
|
+
|
|
269
|
+
**Location:** `src/daemon/connection.ts:196`
|
|
270
|
+
|
|
271
|
+
**Required Work:**
|
|
272
|
+
- Independent timeout configuration
|
|
273
|
+
- Exponential backoff for transient issues
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
### `agent-relay-7bp` Memory storage adapter limits
|
|
278
|
+
**Status:** Open | **Priority:** P2
|
|
279
|
+
|
|
280
|
+
MemoryStorageAdapter hard-codes 1000 message limit.
|
|
281
|
+
|
|
282
|
+
**Location:** `src/storage/adapter.ts:60-63`
|
|
283
|
+
|
|
284
|
+
**Required Work:**
|
|
285
|
+
- Configurable limit
|
|
286
|
+
- LRU eviction instead of slice
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
### `agent-relay-47z` Express 5 compatibility verification
|
|
291
|
+
**Status:** Open | **Priority:** P2
|
|
292
|
+
|
|
293
|
+
`package.json` uses `express@5.2.1` which has breaking changes from Express 4.
|
|
294
|
+
|
|
295
|
+
**Required Work:**
|
|
296
|
+
- Verify error handling middleware patterns
|
|
297
|
+
- Check router behavior
|
|
298
|
+
- Validate body parsing (express.json vs body-parser)
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Recently Completed
|
|
303
|
+
|
|
304
|
+
### `agent-relay-ucw` Dashboard: multi-project navigation or dynamic port allocation
|
|
305
|
+
**Status:** Closed | **Completed:** 2025-12-20
|
|
306
|
+
|
|
307
|
+
Fixed dashboard to warn when requested port is busy and return the actual port. CLI now awaits and logs the real URL.
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## Priority Legend
|
|
312
|
+
|
|
313
|
+
| Priority | Meaning |
|
|
314
|
+
|----------|---------|
|
|
315
|
+
| P0 | Critical - blocking users |
|
|
316
|
+
| P1 | High - significant impact |
|
|
317
|
+
| P2 | Medium - normal priority |
|
|
318
|
+
| P3 | Low - nice to have |
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Contributing
|
|
323
|
+
|
|
324
|
+
To work on an issue:
|
|
325
|
+
1. Run `bd ready` to see available work
|
|
326
|
+
2. Claim with `bd update <id> --status=in_progress`
|
|
327
|
+
3. Complete work and close with `bd close <id>`
|
|
328
|
+
|
|
329
|
+
See [CLAUDE.md](./CLAUDE.md) for development workflow details.
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# Manual Testing Guide: Presence & Cloud Features
|
|
2
|
+
|
|
3
|
+
This document provides step-by-step testing procedures for the presence indicators, typing indicators, and user profile features in cloud mode.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
1. **Cloud Mode Setup**: You need access to the cloud-hosted dashboard with GitHub OAuth authentication.
|
|
8
|
+
2. **Multiple Test Accounts**: Ideally 2-3 different GitHub accounts to test multi-user features.
|
|
9
|
+
3. **Multiple Browser Windows**: Use different browsers or incognito windows for simultaneous sessions.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Test 1: GitHub Avatar & Username Display
|
|
14
|
+
|
|
15
|
+
### Objective
|
|
16
|
+
Verify that logged-in users see their GitHub avatar and username in messages.
|
|
17
|
+
|
|
18
|
+
### Steps
|
|
19
|
+
|
|
20
|
+
1. Log in to the cloud dashboard using GitHub OAuth
|
|
21
|
+
2. Send a message to any agent (e.g., `@AgentName Hello`)
|
|
22
|
+
3. Observe the message in the chat
|
|
23
|
+
|
|
24
|
+
### Expected Results
|
|
25
|
+
|
|
26
|
+
- [ ] Your GitHub avatar appears next to your sent message
|
|
27
|
+
- [ ] Your GitHub username appears as the sender
|
|
28
|
+
- [ ] Messages display "You" or your username consistently
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Test 2: Presence Indicator - Single User
|
|
33
|
+
|
|
34
|
+
### Objective
|
|
35
|
+
Verify presence tracking works for a single user.
|
|
36
|
+
|
|
37
|
+
### Steps
|
|
38
|
+
|
|
39
|
+
1. Log in to the cloud dashboard
|
|
40
|
+
2. Look at the header area below the main header
|
|
41
|
+
|
|
42
|
+
### Expected Results
|
|
43
|
+
|
|
44
|
+
- [ ] A green dot indicator appears showing online status
|
|
45
|
+
- [ ] Your avatar appears in the stacked avatar row
|
|
46
|
+
- [ ] "1 online" text displays next to the avatars
|
|
47
|
+
- [ ] Clicking the indicator shows a dropdown with your username
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Test 3: Presence Indicator - Multiple Users
|
|
52
|
+
|
|
53
|
+
### Objective
|
|
54
|
+
Verify multiple users can see each other's presence.
|
|
55
|
+
|
|
56
|
+
### Steps
|
|
57
|
+
|
|
58
|
+
1. **User A**: Log in with first GitHub account in Browser 1
|
|
59
|
+
2. **User B**: Log in with second GitHub account in Browser 2 (different browser or incognito)
|
|
60
|
+
3. Both users observe the presence indicator
|
|
61
|
+
|
|
62
|
+
### Expected Results
|
|
63
|
+
|
|
64
|
+
- [ ] Both users see "2 online" in the presence indicator
|
|
65
|
+
- [ ] Both avatars appear in the stacked row
|
|
66
|
+
- [ ] Clicking shows both usernames in the dropdown
|
|
67
|
+
- [ ] Each user can see the other's GitHub avatar
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Test 4: Presence Join/Leave Detection
|
|
72
|
+
|
|
73
|
+
### Objective
|
|
74
|
+
Verify real-time updates when users join and leave.
|
|
75
|
+
|
|
76
|
+
### Steps
|
|
77
|
+
|
|
78
|
+
1. **User A**: Already logged in
|
|
79
|
+
2. **User B**: Log in to dashboard
|
|
80
|
+
3. Observe User A's screen when User B joins
|
|
81
|
+
4. **User B**: Close the browser tab
|
|
82
|
+
5. Observe User A's screen after User B leaves
|
|
83
|
+
|
|
84
|
+
### Expected Results
|
|
85
|
+
|
|
86
|
+
- [ ] User A immediately sees count increase when User B joins
|
|
87
|
+
- [ ] User B's avatar appears in User A's presence list
|
|
88
|
+
- [ ] User A immediately sees count decrease when User B leaves
|
|
89
|
+
- [ ] User B's avatar disappears from User A's presence list
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Test 5: Multi-Tab Support
|
|
94
|
+
|
|
95
|
+
### Objective
|
|
96
|
+
Verify a user stays "online" when they have multiple tabs open.
|
|
97
|
+
|
|
98
|
+
### Steps
|
|
99
|
+
|
|
100
|
+
1. **User A**: Log in to dashboard in Tab 1
|
|
101
|
+
2. **User A**: Open a second tab to the same dashboard (Tab 2)
|
|
102
|
+
3. **User B**: Log in from a different browser
|
|
103
|
+
4. Observe presence count (should show 2 users, not 3)
|
|
104
|
+
5. **User A**: Close Tab 1
|
|
105
|
+
6. Observe presence (User A should still show as online)
|
|
106
|
+
7. **User A**: Close Tab 2
|
|
107
|
+
8. Observe presence (User A should now show as offline)
|
|
108
|
+
|
|
109
|
+
### Expected Results
|
|
110
|
+
|
|
111
|
+
- [ ] Multiple tabs from same user don't inflate online count
|
|
112
|
+
- [ ] Closing one tab doesn't disconnect the user
|
|
113
|
+
- [ ] User only shows as offline when ALL tabs are closed
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Test 6: Typing Indicator - Single User
|
|
118
|
+
|
|
119
|
+
### Objective
|
|
120
|
+
Verify typing indicators appear when another user is typing.
|
|
121
|
+
|
|
122
|
+
### Steps
|
|
123
|
+
|
|
124
|
+
1. **User A**: Log in in Browser 1
|
|
125
|
+
2. **User B**: Log in in Browser 2
|
|
126
|
+
3. **User B**: Start typing a message (don't send)
|
|
127
|
+
4. Observe User A's screen
|
|
128
|
+
|
|
129
|
+
### Expected Results
|
|
130
|
+
|
|
131
|
+
- [ ] User A sees "User B is typing..." indicator
|
|
132
|
+
- [ ] The indicator appears below the message list, above the composer
|
|
133
|
+
- [ ] User B's avatar appears in the typing indicator
|
|
134
|
+
- [ ] Animated dots appear next to the message
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Test 7: Typing Indicator - Stop Typing
|
|
139
|
+
|
|
140
|
+
### Objective
|
|
141
|
+
Verify typing indicator disappears when user stops typing.
|
|
142
|
+
|
|
143
|
+
### Steps
|
|
144
|
+
|
|
145
|
+
1. Continue from Test 6
|
|
146
|
+
2. **User B**: Delete all text from the input field
|
|
147
|
+
3. Observe User A's screen
|
|
148
|
+
|
|
149
|
+
### Expected Results
|
|
150
|
+
|
|
151
|
+
- [ ] Typing indicator disappears within 1 second
|
|
152
|
+
- [ ] No residual "typing" state shown
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Test 8: Typing Indicator - Auto-Clear
|
|
157
|
+
|
|
158
|
+
### Objective
|
|
159
|
+
Verify typing indicator auto-clears after 3 seconds of inactivity.
|
|
160
|
+
|
|
161
|
+
### Steps
|
|
162
|
+
|
|
163
|
+
1. **User A**: Log in in Browser 1
|
|
164
|
+
2. **User B**: Log in in Browser 2
|
|
165
|
+
3. **User B**: Type something and then stop (don't clear input)
|
|
166
|
+
4. Wait 3-4 seconds
|
|
167
|
+
|
|
168
|
+
### Expected Results
|
|
169
|
+
|
|
170
|
+
- [ ] Typing indicator disappears after ~3 seconds of no typing activity
|
|
171
|
+
- [ ] This prevents stale "typing" states
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Test 9: User Profile Panel - Open
|
|
176
|
+
|
|
177
|
+
### Objective
|
|
178
|
+
Verify the user profile panel opens when clicking on an online user.
|
|
179
|
+
|
|
180
|
+
### Steps
|
|
181
|
+
|
|
182
|
+
1. Have at least 2 users logged in
|
|
183
|
+
2. Click on the online users indicator
|
|
184
|
+
3. Click on another user's name/avatar in the dropdown
|
|
185
|
+
|
|
186
|
+
### Expected Results
|
|
187
|
+
|
|
188
|
+
- [ ] A slide-out panel appears from the right
|
|
189
|
+
- [ ] Panel shows the user's large avatar
|
|
190
|
+
- [ ] Panel shows the user's GitHub username
|
|
191
|
+
- [ ] Panel shows "Online" status with green indicator
|
|
192
|
+
- [ ] Panel shows "Online Since" timestamp
|
|
193
|
+
- [ ] Panel shows "Last Active" timestamp
|
|
194
|
+
- [ ] Panel shows GitHub link
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Test 10: User Profile Panel - Actions
|
|
199
|
+
|
|
200
|
+
### Objective
|
|
201
|
+
Verify profile panel action buttons work correctly.
|
|
202
|
+
|
|
203
|
+
### Steps
|
|
204
|
+
|
|
205
|
+
1. Open a user's profile panel (from Test 9)
|
|
206
|
+
2. Click the "Mention @username" button
|
|
207
|
+
3. Close the panel and open it again
|
|
208
|
+
4. Click the "View on GitHub" button
|
|
209
|
+
|
|
210
|
+
### Expected Results
|
|
211
|
+
|
|
212
|
+
- [ ] "Mention" button closes panel (TODO: should insert @username in composer)
|
|
213
|
+
- [ ] "View on GitHub" opens new tab to user's GitHub profile
|
|
214
|
+
- [ ] GitHub profile URL is correctly formatted
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Test 11: User Profile Panel - Close Methods
|
|
219
|
+
|
|
220
|
+
### Objective
|
|
221
|
+
Verify all methods of closing the profile panel work.
|
|
222
|
+
|
|
223
|
+
### Steps
|
|
224
|
+
|
|
225
|
+
1. Open a user's profile panel
|
|
226
|
+
2. Click the X button in the panel header
|
|
227
|
+
3. Open the panel again
|
|
228
|
+
4. Press the Escape key
|
|
229
|
+
5. Open the panel again
|
|
230
|
+
6. Click outside the panel (on the backdrop)
|
|
231
|
+
|
|
232
|
+
### Expected Results
|
|
233
|
+
|
|
234
|
+
- [ ] X button closes the panel
|
|
235
|
+
- [ ] Escape key closes the panel
|
|
236
|
+
- [ ] Clicking backdrop closes the panel
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Test 12: Human User Autocomplete
|
|
241
|
+
|
|
242
|
+
### Objective
|
|
243
|
+
Verify human users appear in @ mention autocomplete.
|
|
244
|
+
|
|
245
|
+
### Steps
|
|
246
|
+
|
|
247
|
+
1. Have User A and User B both logged in
|
|
248
|
+
2. Have User A send at least one message
|
|
249
|
+
3. **User B**: Start typing `@` in the message input
|
|
250
|
+
4. Observe the autocomplete dropdown
|
|
251
|
+
|
|
252
|
+
### Expected Results
|
|
253
|
+
|
|
254
|
+
- [ ] User A appears in the autocomplete list
|
|
255
|
+
- [ ] Human users show with purple color and person icon
|
|
256
|
+
- [ ] Human users are labeled as "Human user"
|
|
257
|
+
- [ ] Selecting a human user inserts @username in message
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Test 13: Input Validation - Invalid Username
|
|
262
|
+
|
|
263
|
+
### Objective
|
|
264
|
+
Verify the server rejects invalid usernames (security feature).
|
|
265
|
+
|
|
266
|
+
### Steps
|
|
267
|
+
|
|
268
|
+
This test requires developer tools or a custom client:
|
|
269
|
+
|
|
270
|
+
1. Open browser developer tools
|
|
271
|
+
2. Find the presence WebSocket connection
|
|
272
|
+
3. Try to send a join message with an invalid username (e.g., containing special characters)
|
|
273
|
+
|
|
274
|
+
### Expected Results
|
|
275
|
+
|
|
276
|
+
- [ ] Server rejects the invalid username
|
|
277
|
+
- [ ] No error is displayed to the user (silent rejection)
|
|
278
|
+
- [ ] Console logs show "Invalid username rejected"
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Test 14: Security - Cannot Remove Other Users
|
|
283
|
+
|
|
284
|
+
### Objective
|
|
285
|
+
Verify users cannot forcibly remove others from online list.
|
|
286
|
+
|
|
287
|
+
### Steps
|
|
288
|
+
|
|
289
|
+
This test requires developer tools:
|
|
290
|
+
|
|
291
|
+
1. User A and User B both logged in
|
|
292
|
+
2. Using developer tools, try to send a leave message with User B's username from User A's connection
|
|
293
|
+
|
|
294
|
+
### Expected Results
|
|
295
|
+
|
|
296
|
+
- [ ] Server rejects the leave attempt
|
|
297
|
+
- [ ] User B remains in the online list
|
|
298
|
+
- [ ] Console logs show security warning
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Troubleshooting
|
|
303
|
+
|
|
304
|
+
### Presence Not Updating
|
|
305
|
+
|
|
306
|
+
1. Check browser console for WebSocket errors
|
|
307
|
+
2. Verify `/ws/presence` WebSocket is connected
|
|
308
|
+
3. Refresh the page to reconnect
|
|
309
|
+
|
|
310
|
+
### Typing Indicator Stuck
|
|
311
|
+
|
|
312
|
+
1. This may indicate a WebSocket issue
|
|
313
|
+
2. Typing indicators auto-clear after 3 seconds
|
|
314
|
+
3. Refresh to reset
|
|
315
|
+
|
|
316
|
+
### Profile Panel Not Opening
|
|
317
|
+
|
|
318
|
+
1. Ensure you're clicking on a user, not just the indicator
|
|
319
|
+
2. Check for JavaScript errors in console
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## Notes
|
|
324
|
+
|
|
325
|
+
- All presence features require cloud mode (GitHub OAuth login)
|
|
326
|
+
- Local mode does not support multi-user presence
|
|
327
|
+
- WebSocket connections may take a moment to establish on page load
|