agent-relay 1.1.0 → 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/spawner.d.ts +53 -0
- package/dist/bridge/spawner.d.ts.map +1 -1
- package/dist/bridge/spawner.js +203 -19
- package/dist/bridge/spawner.js.map +1 -1
- package/dist/bridge/types.d.ts +12 -0
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/cli/index.js +401 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cloud/api/auth.d.ts +3 -2
- package/dist/cloud/api/auth.d.ts.map +1 -1
- package/dist/cloud/api/auth.js +10 -98
- package/dist/cloud/api/auth.js.map +1 -1
- 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/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 +7 -0
- package/dist/cloud/api/middleware/planLimits.d.ts.map +1 -1
- package/dist/cloud/api/middleware/planLimits.js +39 -1
- package/dist/cloud/api/middleware/planLimits.js.map +1 -1
- 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 +8 -1
- package/dist/cloud/api/onboarding.d.ts.map +1 -1
- package/dist/cloud/api/onboarding.js +300 -119
- package/dist/cloud/api/onboarding.js.map +1 -1
- 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.js +114 -42
- package/dist/cloud/api/providers.js.map +1 -1
- 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/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.js +225 -8
- package/dist/cloud/api/workspaces.js.map +1 -1
- package/dist/cloud/billing/plans.d.ts.map +1 -1
- package/dist/cloud/billing/plans.js +13 -0
- package/dist/cloud/billing/plans.js.map +1 -1
- package/dist/cloud/billing/types.d.ts +9 -3
- package/dist/cloud/billing/types.d.ts.map +1 -1
- package/dist/cloud/config.d.ts +9 -2
- package/dist/cloud/config.d.ts.map +1 -1
- package/dist/cloud/config.js +13 -4
- package/dist/cloud/config.js.map +1 -1
- package/dist/cloud/db/drizzle.d.ts +84 -1
- package/dist/cloud/db/drizzle.d.ts.map +1 -1
- package/dist/cloud/db/drizzle.js +470 -0
- package/dist/cloud/db/drizzle.js.map +1 -1
- package/dist/cloud/db/index.d.ts +9 -4
- package/dist/cloud/db/index.d.ts.map +1 -1
- package/dist/cloud/db/index.js +11 -3
- package/dist/cloud/db/index.js.map +1 -1
- package/dist/cloud/db/schema.d.ts +3283 -556
- package/dist/cloud/db/schema.d.ts.map +1 -1
- package/dist/cloud/db/schema.js +314 -1
- package/dist/cloud/db/schema.js.map +1 -1
- package/dist/cloud/index.d.ts +1 -0
- package/dist/cloud/index.d.ts.map +1 -1
- package/dist/cloud/index.js +2 -0
- package/dist/cloud/index.js.map +1 -1
- package/dist/cloud/provisioner/index.d.ts +24 -0
- package/dist/cloud/provisioner/index.d.ts.map +1 -1
- package/dist/cloud/provisioner/index.js +319 -18
- package/dist/cloud/provisioner/index.js.map +1 -1
- package/dist/cloud/server.d.ts +1 -0
- package/dist/cloud/server.d.ts.map +1 -1
- package/dist/cloud/server.js +357 -13
- package/dist/cloud/server.js.map +1 -1
- 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/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 +15 -0
- package/dist/cloud/services/planLimits.d.ts.map +1 -1
- package/dist/cloud/services/planLimits.js +28 -0
- package/dist/cloud/services/planLimits.js.map +1 -1
- 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.js +1 -1
- package/dist/cloud/vault/index.js.map +1 -1
- 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 +27 -0
- package/dist/daemon/agent-manager.d.ts.map +1 -1
- package/dist/daemon/agent-manager.js +107 -6
- package/dist/daemon/agent-manager.js.map +1 -1
- package/dist/daemon/agent-registry.d.ts +32 -0
- package/dist/daemon/agent-registry.d.ts.map +1 -1
- package/dist/daemon/agent-registry.js +42 -2
- package/dist/daemon/agent-registry.js.map +1 -1
- package/dist/daemon/api.d.ts +12 -0
- package/dist/daemon/api.d.ts.map +1 -1
- package/dist/daemon/api.js +131 -2
- package/dist/daemon/api.js.map +1 -1
- 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.map +1 -1
- package/dist/daemon/cloud-sync.js +9 -7
- package/dist/daemon/cloud-sync.js.map +1 -1
- package/dist/daemon/orchestrator.d.ts.map +1 -1
- package/dist/daemon/orchestrator.js +30 -0
- package/dist/daemon/orchestrator.js.map +1 -1
- package/dist/daemon/router.d.ts +5 -0
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +78 -26
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/server.d.ts +5 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +9 -1
- 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 +5 -1
- package/dist/daemon/types.d.ts.map +1 -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/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-b6edd4dde8d08194.js → page-56a8b4616a90dc43.js} +1 -1
- 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/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-c2f423b9c9f4591b.js → main-97850e03d723ea8c.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/411ce23ffeae9f76.css +1 -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 +2 -2
- 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.d.ts.map +1 -1
- package/dist/dashboard-server/server.js +1308 -8
- 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/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/index.d.ts +5 -0
- package/dist/resiliency/index.d.ts.map +1 -1
- package/dist/resiliency/index.js +5 -0
- package/dist/resiliency/index.js.map +1 -1
- 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/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/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 +38 -0
- package/dist/resiliency/supervisor.d.ts.map +1 -1
- package/dist/resiliency/supervisor.js +122 -0
- package/dist/resiliency/supervisor.js.map +1 -1
- 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 +1 -1
- package/dist/storage/adapter.d.ts.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/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- 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/parser.d.ts +10 -0
- package/dist/wrapper/parser.d.ts.map +1 -1
- package/dist/wrapper/parser.js +100 -33
- package/dist/wrapper/parser.js.map +1 -1
- package/dist/wrapper/pty-wrapper.d.ts +197 -16
- package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
- package/dist/wrapper/pty-wrapper.js +943 -106
- 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 +73 -11
- package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
- package/dist/wrapper/tmux-wrapper.js +541 -120
- package/dist/wrapper/tmux-wrapper.js.map +1 -1
- package/docs/CLOUD-ARCHITECTURE.md +152 -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 +53 -47
- package/docs/archive/EXECUTIVE_SUMMARY.md +358 -0
- package/docs/archive/ROADMAP.md +329 -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/local-testing.md +428 -0
- package/docs/proposals/continuous-claude-integration.md +622 -0
- package/docs/proposals/custom-commands.md +368 -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 +16 -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/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/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/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/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → H5aWG0udPB4iOUIl_gytz}/_buildManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → H5aWG0udPB4iOUIl_gytz}/_ssgManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{117-b2cd8d6485aacf2b.js → 117-b100311aff8d5c61.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{648-8f3f26864ce515e5.js → 648-a13d3c2b1be45466.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-0b990dbb71d72a98.js → page-a4973f3e3c82fb67.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/app/pricing/{page-d80e03a5297f95b6.js → page-4d72d5a5d8a9b618.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/{TESTING_PRESENCE_FEATURES.md → archive/TESTING_PRESENCE_FEATURES.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,368 @@
|
|
|
1
|
+
# Custom Relay Commands: Design Spec
|
|
2
|
+
|
|
3
|
+
> **Status:** Proposal
|
|
4
|
+
> **Decision Required:** Which implementation approach?
|
|
5
|
+
> **Created:** 2026-01-04
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Allow users to define custom command patterns that trigger code execution when agents output them.
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
->deploy:staging → executes user-defined deploy script
|
|
15
|
+
->jira:create "Bug" → runs Jira integration, returns ticket ID
|
|
16
|
+
->test:e2e → runs tests, injects results back to agent
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Use Cases
|
|
22
|
+
|
|
23
|
+
### DevOps & CI/CD
|
|
24
|
+
```
|
|
25
|
+
->deploy:staging # Deploy to environment
|
|
26
|
+
->rollback:prod # Rollback last deployment
|
|
27
|
+
->build:docker # Build and push container
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Integrations
|
|
31
|
+
```
|
|
32
|
+
->jira:create "Login broken" # Create ticket, return ID
|
|
33
|
+
->slack:#team "Build done" # Post to Slack channel
|
|
34
|
+
->github:pr "Feature X" # Create pull request
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Testing & Quality
|
|
38
|
+
```
|
|
39
|
+
->test:unit # Run unit tests
|
|
40
|
+
->test:e2e --headed # Run E2E with browser
|
|
41
|
+
->lint:fix # Run linter with autofix
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Context & Knowledge
|
|
45
|
+
```
|
|
46
|
+
->load:api-docs # Inject API documentation
|
|
47
|
+
->search:codebase "auth" # Search and inject results
|
|
48
|
+
->context:clear # Clear injected context
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Agent Coordination
|
|
52
|
+
```
|
|
53
|
+
->assign:Alice "Review PR" # Assign task + notify
|
|
54
|
+
->escalate:Lead "Blocked" # Escalate with context
|
|
55
|
+
->handoff:Bob # Transfer work to another agent
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Design Options
|
|
61
|
+
|
|
62
|
+
### Option A: Script Directory (Convention-Based)
|
|
63
|
+
|
|
64
|
+
**Pattern:** `->cmd:{name} {args}` → `.relay/commands/{name}.sh {args}`
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
.relay/
|
|
68
|
+
commands/
|
|
69
|
+
deploy.sh # ->cmd:deploy staging
|
|
70
|
+
test.sh # ->cmd:test unit
|
|
71
|
+
jira.sh # ->cmd:jira create "Bug title"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Example script:**
|
|
75
|
+
```bash
|
|
76
|
+
#!/bin/bash
|
|
77
|
+
# .relay/commands/deploy.sh
|
|
78
|
+
ENV="$1"
|
|
79
|
+
./scripts/deploy.sh "$ENV" 2>&1
|
|
80
|
+
echo "[DEPLOY] Completed deployment to $ENV"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Pros:**
|
|
84
|
+
- Zero configuration
|
|
85
|
+
- Works with any language (bash, python, node)
|
|
86
|
+
- Easy to understand
|
|
87
|
+
|
|
88
|
+
**Cons:**
|
|
89
|
+
- Single prefix (`->cmd:`)
|
|
90
|
+
- Limited pattern matching
|
|
91
|
+
- No validation or typing
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### Option B: YAML Configuration
|
|
96
|
+
|
|
97
|
+
**Config file:** `.relay/commands.yaml`
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
commands:
|
|
101
|
+
# Simple script mapping
|
|
102
|
+
deploy:
|
|
103
|
+
pattern: "->deploy:{env}"
|
|
104
|
+
run: "./scripts/deploy.sh $env"
|
|
105
|
+
|
|
106
|
+
# With validation
|
|
107
|
+
test:
|
|
108
|
+
pattern: "->test:{suite}"
|
|
109
|
+
run: "npm test -- --suite=$suite"
|
|
110
|
+
validate:
|
|
111
|
+
suite: ["unit", "e2e", "integration"]
|
|
112
|
+
timeout: 300000
|
|
113
|
+
|
|
114
|
+
# Integration with response handling
|
|
115
|
+
jira:
|
|
116
|
+
pattern: "->jira:create {title}"
|
|
117
|
+
run: "node .relay/integrations/jira.js create '$title'"
|
|
118
|
+
response: inject # inject | silent | broadcast
|
|
119
|
+
|
|
120
|
+
# Restricted command
|
|
121
|
+
deploy-prod:
|
|
122
|
+
pattern: "->deploy:prod"
|
|
123
|
+
run: "./scripts/deploy.sh prod"
|
|
124
|
+
security:
|
|
125
|
+
requireApproval: true
|
|
126
|
+
allowedAgents: ["Lead"]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Pros:**
|
|
130
|
+
- Custom prefixes per command
|
|
131
|
+
- Validation rules
|
|
132
|
+
- Security controls
|
|
133
|
+
- Configurable response handling
|
|
134
|
+
|
|
135
|
+
**Cons:**
|
|
136
|
+
- Requires configuration
|
|
137
|
+
- YAML can get complex
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### Option C: TypeScript Handlers (Programmatic)
|
|
142
|
+
|
|
143
|
+
**Handler file:** `.relay/commands/deploy.ts`
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
import { defineCommand, type CommandContext } from 'agent-relay';
|
|
147
|
+
|
|
148
|
+
export default defineCommand({
|
|
149
|
+
// Pattern with named captures
|
|
150
|
+
pattern: /^->deploy:(?<env>staging|prod)$/,
|
|
151
|
+
|
|
152
|
+
// Optional validation
|
|
153
|
+
validate({ env }) {
|
|
154
|
+
if (env === 'prod' && !process.env.PROD_DEPLOY_ENABLED) {
|
|
155
|
+
return 'Production deploys are disabled';
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
// Execution
|
|
160
|
+
async execute(ctx: CommandContext) {
|
|
161
|
+
const { env } = ctx.match.groups;
|
|
162
|
+
const { agent, inject, broadcast } = ctx;
|
|
163
|
+
|
|
164
|
+
// Run deployment
|
|
165
|
+
const result = await ctx.exec(`./deploy.sh ${env}`);
|
|
166
|
+
|
|
167
|
+
// Inject response to calling agent
|
|
168
|
+
await inject(`[DEPLOY] ${env}: ${result.stdout}`);
|
|
169
|
+
|
|
170
|
+
// Optionally notify others
|
|
171
|
+
if (env === 'prod') {
|
|
172
|
+
await broadcast(`Production deployed by ${agent.name}`);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Return structured data (stored in message metadata)
|
|
176
|
+
return {
|
|
177
|
+
env,
|
|
178
|
+
success: result.exitCode === 0,
|
|
179
|
+
duration: result.duration,
|
|
180
|
+
};
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Auto-discovery:** All `.ts` files in `.relay/commands/` are loaded.
|
|
186
|
+
|
|
187
|
+
**Pros:**
|
|
188
|
+
- Full programmatic control
|
|
189
|
+
- Type safety
|
|
190
|
+
- Can interact with relay (inject, broadcast, spawn)
|
|
191
|
+
- Async/await support
|
|
192
|
+
- Structured return data
|
|
193
|
+
|
|
194
|
+
**Cons:**
|
|
195
|
+
- Requires TypeScript knowledge
|
|
196
|
+
- More complex setup
|
|
197
|
+
- Needs compilation step
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
### Option D: Hybrid (Recommended)
|
|
202
|
+
|
|
203
|
+
Combine A + B: Convention with optional configuration.
|
|
204
|
+
|
|
205
|
+
**Default behavior (zero config):**
|
|
206
|
+
```
|
|
207
|
+
->cmd:deploy staging → .relay/commands/deploy.sh staging
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**With config (opt-in):**
|
|
211
|
+
```yaml
|
|
212
|
+
# .relay/commands.yaml
|
|
213
|
+
commands:
|
|
214
|
+
deploy:
|
|
215
|
+
pattern: "->deploy:{env}" # Custom prefix
|
|
216
|
+
run: ".relay/commands/deploy.sh $env"
|
|
217
|
+
|
|
218
|
+
# Or inline script
|
|
219
|
+
notify:
|
|
220
|
+
pattern: "->notify:{channel} {message}"
|
|
221
|
+
run: |
|
|
222
|
+
curl -X POST "$SLACK_WEBHOOK" \
|
|
223
|
+
-d "{\"channel\": \"$channel\", \"text\": \"$message\"}"
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Progression:**
|
|
227
|
+
1. Start with `->cmd:name` convention (no config)
|
|
228
|
+
2. Add `.relay/commands.yaml` when you need custom patterns
|
|
229
|
+
3. Use `.ts` handlers for complex logic (future)
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Response Handling
|
|
234
|
+
|
|
235
|
+
| Mode | Behavior | Use Case |
|
|
236
|
+
|------|----------|----------|
|
|
237
|
+
| `inject` | Output sent to calling agent | Default - agent sees result |
|
|
238
|
+
| `silent` | No response | Fire-and-forget (notifications) |
|
|
239
|
+
| `broadcast` | Output to all agents | Team-wide announcements |
|
|
240
|
+
| `reply:{agent}` | Output to specific agent | Targeted responses |
|
|
241
|
+
|
|
242
|
+
**Default:** `inject` (most useful for agent workflows)
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Security Model
|
|
247
|
+
|
|
248
|
+
### Execution Context
|
|
249
|
+
- Commands run in project directory
|
|
250
|
+
- Inherit environment from daemon
|
|
251
|
+
- Can access `RELAY_*` env vars
|
|
252
|
+
|
|
253
|
+
### Access Control (Optional)
|
|
254
|
+
```yaml
|
|
255
|
+
commands:
|
|
256
|
+
deploy-prod:
|
|
257
|
+
pattern: "->deploy:prod"
|
|
258
|
+
run: "./deploy.sh prod"
|
|
259
|
+
security:
|
|
260
|
+
# Require human approval in dashboard
|
|
261
|
+
requireApproval: true
|
|
262
|
+
|
|
263
|
+
# Restrict to specific agents
|
|
264
|
+
allowedAgents: ["Lead", "DevOps"]
|
|
265
|
+
|
|
266
|
+
# Rate limiting
|
|
267
|
+
rateLimit: "1/hour"
|
|
268
|
+
|
|
269
|
+
# Audit logging
|
|
270
|
+
audit: true
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Sandboxing (Future)
|
|
274
|
+
- Optional Docker/VM isolation
|
|
275
|
+
- Resource limits (CPU, memory, time)
|
|
276
|
+
- Network restrictions
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Implementation Plan
|
|
281
|
+
|
|
282
|
+
### Phase 1: Script Directory (MVP)
|
|
283
|
+
- [ ] Detect `->cmd:{name}` pattern in parser
|
|
284
|
+
- [ ] Execute `.relay/commands/{name}.sh` with args
|
|
285
|
+
- [ ] Inject stdout back to agent
|
|
286
|
+
- [ ] Handle errors gracefully
|
|
287
|
+
|
|
288
|
+
### Phase 2: YAML Configuration
|
|
289
|
+
- [ ] Parse `.relay/commands.yaml`
|
|
290
|
+
- [ ] Support custom patterns
|
|
291
|
+
- [ ] Add validation rules
|
|
292
|
+
- [ ] Response mode configuration
|
|
293
|
+
|
|
294
|
+
### Phase 3: Dashboard Integration
|
|
295
|
+
- [ ] Show command executions in dashboard
|
|
296
|
+
- [ ] Approval workflow UI
|
|
297
|
+
- [ ] Audit log viewer
|
|
298
|
+
|
|
299
|
+
### Phase 4: TypeScript Handlers (Future)
|
|
300
|
+
- [ ] Hot-reload `.ts` command files
|
|
301
|
+
- [ ] Provide `CommandContext` API
|
|
302
|
+
- [ ] Type definitions package
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## Decision Required
|
|
307
|
+
|
|
308
|
+
**Which approach should we implement first?**
|
|
309
|
+
|
|
310
|
+
| Option | Complexity | Flexibility | Time to MVP |
|
|
311
|
+
|--------|------------|-------------|-------------|
|
|
312
|
+
| A. Script Directory | Low | Low | 1-2 days |
|
|
313
|
+
| B. YAML Config | Medium | High | 3-5 days |
|
|
314
|
+
| C. TypeScript | High | Very High | 1-2 weeks |
|
|
315
|
+
| D. Hybrid (A→B) | Low→Medium | Progressive | 2 days + iterate |
|
|
316
|
+
|
|
317
|
+
**Recommendation:** Option D (Hybrid)
|
|
318
|
+
- Ship script directory first (works immediately)
|
|
319
|
+
- Add YAML config based on user feedback
|
|
320
|
+
- TypeScript handlers as future enhancement
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Open Questions
|
|
325
|
+
|
|
326
|
+
1. **Prefix:** Single `->cmd:` or allow any `->prefix:`?
|
|
327
|
+
2. **Discovery:** Auto-discover scripts or require registration?
|
|
328
|
+
3. **Async:** How to handle long-running commands (>30s)?
|
|
329
|
+
4. **Errors:** Inject error output or handle differently?
|
|
330
|
+
5. **Chaining:** Can command output trigger another command?
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## Examples
|
|
335
|
+
|
|
336
|
+
### Minimal Setup (Phase 1)
|
|
337
|
+
```bash
|
|
338
|
+
# Create command
|
|
339
|
+
mkdir -p .relay/commands
|
|
340
|
+
cat > .relay/commands/deploy.sh << 'EOF'
|
|
341
|
+
#!/bin/bash
|
|
342
|
+
echo "Deploying to $1..."
|
|
343
|
+
./scripts/deploy.sh "$1"
|
|
344
|
+
echo "Done!"
|
|
345
|
+
EOF
|
|
346
|
+
chmod +x .relay/commands/deploy.sh
|
|
347
|
+
|
|
348
|
+
# Agent uses it
|
|
349
|
+
->cmd:deploy staging
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### With Configuration (Phase 2)
|
|
353
|
+
```yaml
|
|
354
|
+
# .relay/commands.yaml
|
|
355
|
+
commands:
|
|
356
|
+
deploy:
|
|
357
|
+
pattern: "->deploy:{env}"
|
|
358
|
+
run: ".relay/commands/deploy.sh $env"
|
|
359
|
+
validate:
|
|
360
|
+
env: ["staging", "prod"]
|
|
361
|
+
security:
|
|
362
|
+
requireApproval:
|
|
363
|
+
when: "$env == 'prod'"
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
*Spec created 2026-01-04*
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# Agent Relay Skills via PRPM
|
|
2
|
+
|
|
3
|
+
Leverage PRPM (Prompt Package Manager) to distribute agent-relay skills that users can opt into.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
PRPM already provides:
|
|
8
|
+
- Registry at `registry.prpm.dev`
|
|
9
|
+
- `prpm install @org/package` CLI
|
|
10
|
+
- Lockfile tracking (`prpm.lock`)
|
|
11
|
+
- Format conversion (claude, cursor, agents.md)
|
|
12
|
+
- Subtypes: skill, agent, rule, snippet
|
|
13
|
+
- Lazy loading (`eager: false`)
|
|
14
|
+
|
|
15
|
+
**We should publish `@agent-relay/*` packages to PRPM instead of building custom infrastructure.**
|
|
16
|
+
|
|
17
|
+
## Current State
|
|
18
|
+
|
|
19
|
+
Already using prpm in this repo (see `prpm.lock`):
|
|
20
|
+
- `@agent-relay/agent-relay-snippet` - Relay messaging syntax
|
|
21
|
+
- `@agent-relay/agent-relay-protocol` - Full protocol docs
|
|
22
|
+
- Various skills from `@prpm/*`, `@anthropic/*`, `@my-senior-dev/*`
|
|
23
|
+
|
|
24
|
+
## Problem: Global vs Project Skills
|
|
25
|
+
|
|
26
|
+
PRPM installs to project directories (`.claude/skills/`). We need:
|
|
27
|
+
- Skills NOT in project source control
|
|
28
|
+
- Skills available across all projects
|
|
29
|
+
- Per-user opt-in, not per-project
|
|
30
|
+
|
|
31
|
+
### Potential Solutions
|
|
32
|
+
|
|
33
|
+
**A. PRPM Global Flag (feature request)**
|
|
34
|
+
```bash
|
|
35
|
+
prpm install --global @agent-relay/browser-testing
|
|
36
|
+
# Installs to ~/.prpm/skills/ or ~/.config/prpm/skills/
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**B. User-level prpm.lock**
|
|
40
|
+
```
|
|
41
|
+
~/.agent-relay/
|
|
42
|
+
├── prpm.lock # User's global skills
|
|
43
|
+
└── .claude/skills/ # Installed skill content
|
|
44
|
+
```
|
|
45
|
+
Agent reads both project and user prpm.lock.
|
|
46
|
+
|
|
47
|
+
**C. Workspace Bundle**
|
|
48
|
+
Cloud workspaces come with @agent-relay skills pre-installed.
|
|
49
|
+
Users don't manage - just available in cloud.
|
|
50
|
+
|
|
51
|
+
## Proposed Skills to Publish
|
|
52
|
+
|
|
53
|
+
### @agent-relay/workspace-capabilities
|
|
54
|
+
Documentation for browser testing + container spawning.
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"name": "@agent-relay/workspace-capabilities",
|
|
59
|
+
"version": "1.0.0",
|
|
60
|
+
"description": "Browser testing (Playwright, VNC) and container spawning (Docker) for agent-relay workspaces",
|
|
61
|
+
"format": "claude",
|
|
62
|
+
"subtype": "skill",
|
|
63
|
+
"eager": false,
|
|
64
|
+
"tags": ["agent-relay", "browser-testing", "docker", "workspace"],
|
|
65
|
+
"files": [".claude/skills/workspace-capabilities/SKILL.md"]
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### @agent-relay/browser-testing
|
|
70
|
+
Focused Playwright/screenshot skill.
|
|
71
|
+
|
|
72
|
+
### @agent-relay/container-spawning
|
|
73
|
+
Focused Docker/container skill.
|
|
74
|
+
|
|
75
|
+
### @agent-relay/linear-integration
|
|
76
|
+
Linear webhook/API patterns.
|
|
77
|
+
|
|
78
|
+
### @agent-relay/slack-integration
|
|
79
|
+
Slack bot patterns.
|
|
80
|
+
|
|
81
|
+
### @agent-relay/workspace-pack (collection)
|
|
82
|
+
Bundle of all workspace skills.
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"collections": [{
|
|
87
|
+
"id": "workspace-pack",
|
|
88
|
+
"name": "Agent Relay Workspace Pack",
|
|
89
|
+
"description": "All workspace capability skills",
|
|
90
|
+
"packages": [
|
|
91
|
+
{ "packageId": "@agent-relay/workspace-capabilities" },
|
|
92
|
+
{ "packageId": "@agent-relay/browser-testing" },
|
|
93
|
+
{ "packageId": "@agent-relay/container-spawning" }
|
|
94
|
+
]
|
|
95
|
+
}]
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Tasks
|
|
100
|
+
|
|
101
|
+
### prpm-global-research
|
|
102
|
+
- [ ] Check if prpm supports `--global` flag
|
|
103
|
+
- [ ] If not, evaluate: feature request vs workaround
|
|
104
|
+
- [ ] Document findings
|
|
105
|
+
|
|
106
|
+
Dependencies: none
|
|
107
|
+
Priority: high
|
|
108
|
+
|
|
109
|
+
### user-skills-directory
|
|
110
|
+
- [ ] Define `~/.agent-relay/skills/` structure
|
|
111
|
+
- [ ] Implement reading from user directory in daemon
|
|
112
|
+
- [ ] Merge user + project skills in agent manifest
|
|
113
|
+
|
|
114
|
+
Dependencies: prpm-global-research
|
|
115
|
+
Priority: high
|
|
116
|
+
|
|
117
|
+
### publish-workspace-capabilities
|
|
118
|
+
- [ ] Create skill content (SKILL.md)
|
|
119
|
+
- [ ] Create prpm.json manifest
|
|
120
|
+
- [ ] Test locally with `prpm install .`
|
|
121
|
+
- [ ] Publish to registry.prpm.dev
|
|
122
|
+
|
|
123
|
+
Dependencies: none (can do in parallel)
|
|
124
|
+
Priority: high
|
|
125
|
+
|
|
126
|
+
### publish-browser-testing
|
|
127
|
+
- [ ] Extract browser-specific content from workspace-capabilities
|
|
128
|
+
- [ ] Create focused SKILL.md
|
|
129
|
+
- [ ] Publish to registry
|
|
130
|
+
|
|
131
|
+
Dependencies: publish-workspace-capabilities
|
|
132
|
+
Priority: medium
|
|
133
|
+
|
|
134
|
+
### publish-container-spawning
|
|
135
|
+
- [ ] Extract container-specific content
|
|
136
|
+
- [ ] Create focused SKILL.md
|
|
137
|
+
- [ ] Publish to registry
|
|
138
|
+
|
|
139
|
+
Dependencies: publish-workspace-capabilities
|
|
140
|
+
Priority: medium
|
|
141
|
+
|
|
142
|
+
### workspace-pack-collection
|
|
143
|
+
- [ ] Create collection prpm.json
|
|
144
|
+
- [ ] Bundle all workspace skills
|
|
145
|
+
- [ ] Publish collection
|
|
146
|
+
|
|
147
|
+
Dependencies: publish-browser-testing, publish-container-spawning
|
|
148
|
+
Priority: low
|
|
149
|
+
|
|
150
|
+
### cloud-workspace-provisioning
|
|
151
|
+
- [ ] Pre-install @agent-relay skills in cloud workspace images
|
|
152
|
+
- [ ] Or: fetch on workspace creation
|
|
153
|
+
- [ ] Make configurable per-workspace
|
|
154
|
+
|
|
155
|
+
Dependencies: publish-workspace-capabilities
|
|
156
|
+
Priority: medium
|
|
157
|
+
|
|
158
|
+
## Example Skill Content
|
|
159
|
+
|
|
160
|
+
```markdown
|
|
161
|
+
---
|
|
162
|
+
name: workspace-capabilities
|
|
163
|
+
description: Browser testing and container spawning for agent-relay workspaces
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
# Workspace Capabilities
|
|
167
|
+
|
|
168
|
+
This workspace may have additional capabilities available.
|
|
169
|
+
|
|
170
|
+
## Checking Availability
|
|
171
|
+
|
|
172
|
+
Before using these features, verify they're available:
|
|
173
|
+
|
|
174
|
+
\`\`\`typescript
|
|
175
|
+
// Check for browser testing
|
|
176
|
+
const hasBrowser = process.env.DISPLAY !== undefined;
|
|
177
|
+
|
|
178
|
+
// Check for container spawning
|
|
179
|
+
const hasDocker = existsSync('/var/run/docker.sock');
|
|
180
|
+
\`\`\`
|
|
181
|
+
|
|
182
|
+
## Browser Testing
|
|
183
|
+
|
|
184
|
+
[Content about Playwright, screenshots, VNC...]
|
|
185
|
+
|
|
186
|
+
## Container Spawning
|
|
187
|
+
|
|
188
|
+
[Content about Docker, presets, resource limits...]
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## User Flow
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
# Option A: Global install (if prpm supports it)
|
|
195
|
+
prpm install --global @agent-relay/workspace-pack
|
|
196
|
+
|
|
197
|
+
# Option B: User directory workaround
|
|
198
|
+
cd ~/.agent-relay
|
|
199
|
+
prpm install @agent-relay/workspace-pack
|
|
200
|
+
|
|
201
|
+
# Option C: Cloud workspace (automatic)
|
|
202
|
+
# Skills pre-installed, just use them
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Why PRPM Over Custom
|
|
206
|
+
|
|
207
|
+
| Custom System | PRPM |
|
|
208
|
+
|--------------|------|
|
|
209
|
+
| Build registry | ✅ Already exists |
|
|
210
|
+
| Build CLI | ✅ Already exists |
|
|
211
|
+
| Build lockfile | ✅ Already exists |
|
|
212
|
+
| Version management | ✅ Already exists |
|
|
213
|
+
| Format conversion | ✅ Already exists |
|
|
214
|
+
|
|
215
|
+
**PRPM gives us distribution for free. We just publish packages.**
|
|
216
|
+
|
|
217
|
+
## Open Questions for PRPM
|
|
218
|
+
|
|
219
|
+
1. **Global installs** - `prpm install --global`?
|
|
220
|
+
2. **Multiple lockfile locations** - project + user?
|
|
221
|
+
3. **Conditional activation** - `activationCondition` field?
|
|
222
|
+
|
|
223
|
+
May need to contribute these features or work around them.
|
|
224
|
+
|
|
225
|
+
## References
|
|
226
|
+
|
|
227
|
+
- `prpm.lock` - Current installed packages
|
|
228
|
+
- `.claude/skills/prpm-json-best-practices-skill/` - How to create packages
|
|
229
|
+
- `docs/tasks/workspace-capabilities.tasks.md` - Runtime capability discovery
|
|
230
|
+
- Implementation: `src/daemon/services/browser-testing.ts`, `container-spawner.ts`
|