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,504 @@
|
|
|
1
|
+
# E2B Sandbox Integration
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
[E2B](https://e2b.dev) provides secure, isolated cloud sandboxes for running AI-generated code. This document outlines how we can leverage E2B to improve agent execution in Agent Relay.
|
|
6
|
+
|
|
7
|
+
## Current Architecture
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────────────────┐
|
|
11
|
+
│ Cloud Service │
|
|
12
|
+
│ ┌─────────────┐ ┌─────────────┐ │
|
|
13
|
+
│ │ Webhooks │───▶│ Spawner │ │
|
|
14
|
+
│ └─────────────┘ └──────┬──────┘ │
|
|
15
|
+
└────────────────────────────┼────────────────────────┘
|
|
16
|
+
│ spawn command
|
|
17
|
+
▼
|
|
18
|
+
┌─────────────────────────────────────────────────────┐
|
|
19
|
+
│ Docker Workspace Container │
|
|
20
|
+
│ ┌─────────────┐ ┌─────────────┐ │
|
|
21
|
+
│ │ Daemon │───▶│ Agent │ │
|
|
22
|
+
│ └─────────────┘ └─────────────┘ │
|
|
23
|
+
│ - Node.js, Python, Git, gh │
|
|
24
|
+
│ - AI CLIs (Claude, Codex, Gemini, etc.) │
|
|
25
|
+
└─────────────────────────────────────────────────────┘
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Pain Points:**
|
|
29
|
+
- Container startup time (~5-10s)
|
|
30
|
+
- Infrastructure management overhead
|
|
31
|
+
- Scaling requires container orchestration (K8s, ECS, etc.)
|
|
32
|
+
- No easy pause/resume for long-running agents
|
|
33
|
+
|
|
34
|
+
## Proposed Architecture with E2B
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
┌─────────────────────────────────────────────────────┐
|
|
38
|
+
│ Cloud Service │
|
|
39
|
+
│ ┌─────────────┐ ┌─────────────┐ │
|
|
40
|
+
│ │ Webhooks │───▶│ Spawner │ │
|
|
41
|
+
│ └─────────────┘ └──────┬──────┘ │
|
|
42
|
+
└────────────────────────────┼────────────────────────┘
|
|
43
|
+
│ E2B SDK
|
|
44
|
+
▼
|
|
45
|
+
┌─────────────────────────────────────────────────────┐
|
|
46
|
+
│ E2B Cloud (Managed) │
|
|
47
|
+
│ ┌─────────────────────────────────────────────┐ │
|
|
48
|
+
│ │ Custom Sandbox Template │ │
|
|
49
|
+
│ │ - relay-workspace-v1 │ │
|
|
50
|
+
│ │ - Pre-installed: Node, Python, Git, gh │ │
|
|
51
|
+
│ │ - Pre-installed: Claude, Codex, Gemini │ │
|
|
52
|
+
│ │ - ~150ms startup │ │
|
|
53
|
+
│ └─────────────────────────────────────────────┘ │
|
|
54
|
+
│ │
|
|
55
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
56
|
+
│ │ Sandbox │ │ Sandbox │ │ Sandbox │ ... │
|
|
57
|
+
│ │ Agent 1 │ │ Agent 2 │ │ Agent 3 │ │
|
|
58
|
+
│ └──────────┘ └──────────┘ └──────────┘ │
|
|
59
|
+
└─────────────────────────────────────────────────────┘
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Benefits
|
|
63
|
+
|
|
64
|
+
| Aspect | Docker (Current) | E2B (Proposed) |
|
|
65
|
+
|--------|------------------|----------------|
|
|
66
|
+
| Startup time | ~5-10s | ~150ms |
|
|
67
|
+
| Infrastructure | Self-managed | Managed |
|
|
68
|
+
| Scaling | Manual/K8s | Automatic |
|
|
69
|
+
| Isolation | Container | Microvm |
|
|
70
|
+
| Pause/Resume | Not supported | Native |
|
|
71
|
+
| Cost model | Always-on | Pay per use |
|
|
72
|
+
|
|
73
|
+
## Implementation Plan
|
|
74
|
+
|
|
75
|
+
### Phase 1: E2B SDK Integration
|
|
76
|
+
|
|
77
|
+
Add E2B SDK and create basic sandbox spawning:
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
// src/cloud/services/e2b-sandbox.ts
|
|
81
|
+
import { Sandbox } from '@e2b/sdk';
|
|
82
|
+
|
|
83
|
+
export interface SandboxConfig {
|
|
84
|
+
template: string;
|
|
85
|
+
timeout?: number;
|
|
86
|
+
envVars?: Record<string, string>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export async function createAgentSandbox(config: SandboxConfig): Promise<Sandbox> {
|
|
90
|
+
const sandbox = await Sandbox.create(config.template, {
|
|
91
|
+
timeoutMs: config.timeout || 60000,
|
|
92
|
+
envVars: config.envVars,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
return sandbox;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export async function runAgentInSandbox(
|
|
99
|
+
sandbox: Sandbox,
|
|
100
|
+
agentType: string,
|
|
101
|
+
prompt: string
|
|
102
|
+
): Promise<{ output: string; exitCode: number }> {
|
|
103
|
+
// Clone repo if needed
|
|
104
|
+
await sandbox.commands.run('git clone $REPO_URL /workspace/repo');
|
|
105
|
+
|
|
106
|
+
// Run the agent
|
|
107
|
+
const result = await sandbox.commands.run(
|
|
108
|
+
`claude --agent ${agentType} --prompt "${prompt}"`,
|
|
109
|
+
{ cwd: '/workspace/repo' }
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
output: result.stdout + result.stderr,
|
|
114
|
+
exitCode: result.exitCode,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Phase 2: Custom Sandbox Template
|
|
120
|
+
|
|
121
|
+
Create a custom E2B template matching our workspace:
|
|
122
|
+
|
|
123
|
+
```dockerfile
|
|
124
|
+
# e2b/templates/relay-workspace/Dockerfile
|
|
125
|
+
FROM e2b/base:latest
|
|
126
|
+
|
|
127
|
+
# Install system dependencies
|
|
128
|
+
RUN apt-get update && apt-get install -y \
|
|
129
|
+
bash ca-certificates curl git python3 jq
|
|
130
|
+
|
|
131
|
+
# Install GitHub CLI
|
|
132
|
+
RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \
|
|
133
|
+
| dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
|
|
134
|
+
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \
|
|
135
|
+
| tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
|
|
136
|
+
&& apt-get update && apt-get install -y gh
|
|
137
|
+
|
|
138
|
+
# Install AI CLIs
|
|
139
|
+
RUN npm install -g @openai/codex @google/gemini-cli opencode-ai@latest
|
|
140
|
+
RUN curl -fsSL https://claude.ai/install.sh | bash
|
|
141
|
+
RUN curl -fsSL https://app.factory.ai/cli | sh
|
|
142
|
+
|
|
143
|
+
ENV PATH="/root/.local/bin:$PATH"
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
```yaml
|
|
147
|
+
# e2b/templates/relay-workspace/e2b.toml
|
|
148
|
+
[template]
|
|
149
|
+
name = "relay-workspace"
|
|
150
|
+
dockerfile = "Dockerfile"
|
|
151
|
+
|
|
152
|
+
[template.resources]
|
|
153
|
+
cpu = 2
|
|
154
|
+
memory = 4096
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Phase 3: Spawner Integration
|
|
158
|
+
|
|
159
|
+
Update spawners to use E2B:
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
// src/cloud/services/ci-agent-spawner.ts
|
|
163
|
+
import { createAgentSandbox, runAgentInSandbox } from './e2b-sandbox.js';
|
|
164
|
+
|
|
165
|
+
export async function spawnCIFixAgent(event: CIFailureEvent): Promise<void> {
|
|
166
|
+
// Create sandbox
|
|
167
|
+
const sandbox = await createAgentSandbox({
|
|
168
|
+
template: 'relay-workspace',
|
|
169
|
+
timeout: 300000, // 5 minutes
|
|
170
|
+
envVars: {
|
|
171
|
+
REPO_URL: event.repository,
|
|
172
|
+
GITHUB_TOKEN: await getRepoToken(event.repositoryId),
|
|
173
|
+
CI_RUN_ID: event.checkRunId,
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
try {
|
|
178
|
+
// Run CI fix agent
|
|
179
|
+
const result = await runAgentInSandbox(
|
|
180
|
+
sandbox,
|
|
181
|
+
'ci-fix',
|
|
182
|
+
`Fix CI failure in ${event.checkName}: ${event.conclusion}`
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
// Post results back to GitHub
|
|
186
|
+
await postCIFixComment(event, result);
|
|
187
|
+
} finally {
|
|
188
|
+
// Always clean up
|
|
189
|
+
await sandbox.close();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Phase 4: Hybrid Mode
|
|
195
|
+
|
|
196
|
+
Support both Docker (self-hosted) and E2B (cloud) execution:
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
// src/cloud/services/agent-executor.ts
|
|
200
|
+
export type ExecutionBackend = 'docker' | 'e2b';
|
|
201
|
+
|
|
202
|
+
export interface ExecutorConfig {
|
|
203
|
+
backend: ExecutionBackend;
|
|
204
|
+
e2bApiKey?: string;
|
|
205
|
+
dockerSocket?: string;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export async function executeAgent(
|
|
209
|
+
config: ExecutorConfig,
|
|
210
|
+
agentType: string,
|
|
211
|
+
prompt: string,
|
|
212
|
+
context: ExecutionContext
|
|
213
|
+
): Promise<ExecutionResult> {
|
|
214
|
+
switch (config.backend) {
|
|
215
|
+
case 'e2b':
|
|
216
|
+
return executeInE2B(agentType, prompt, context);
|
|
217
|
+
case 'docker':
|
|
218
|
+
return executeInDocker(agentType, prompt, context);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Configuration
|
|
224
|
+
|
|
225
|
+
Add E2B configuration to workspace settings:
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
// Workspace settings
|
|
229
|
+
interface WorkspaceSettings {
|
|
230
|
+
execution: {
|
|
231
|
+
backend: 'docker' | 'e2b' | 'hybrid';
|
|
232
|
+
e2b?: {
|
|
233
|
+
apiKey: string;
|
|
234
|
+
template: string;
|
|
235
|
+
defaultTimeout: number;
|
|
236
|
+
};
|
|
237
|
+
docker?: {
|
|
238
|
+
image: string;
|
|
239
|
+
socket: string;
|
|
240
|
+
};
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Cost Considerations
|
|
246
|
+
|
|
247
|
+
E2B pricing is based on sandbox-seconds. Estimated costs:
|
|
248
|
+
|
|
249
|
+
| Scenario | Docker (self-hosted) | E2B |
|
|
250
|
+
|----------|---------------------|-----|
|
|
251
|
+
| CI fix agent (5 min) | ~$0.01 compute | ~$0.05 |
|
|
252
|
+
| Code review (2 min) | ~$0.004 | ~$0.02 |
|
|
253
|
+
| Long task (30 min) | ~$0.06 | ~$0.30 |
|
|
254
|
+
|
|
255
|
+
**Recommendation:** Use E2B for:
|
|
256
|
+
- Short-lived tasks (CI fixes, code review)
|
|
257
|
+
- Burst workloads (many concurrent agents)
|
|
258
|
+
- Teams without container infrastructure
|
|
259
|
+
|
|
260
|
+
Use Docker for:
|
|
261
|
+
- Long-running agents
|
|
262
|
+
- High-volume workloads
|
|
263
|
+
- Self-hosted/air-gapped environments
|
|
264
|
+
|
|
265
|
+
## Security
|
|
266
|
+
|
|
267
|
+
E2B sandboxes provide:
|
|
268
|
+
- **Microvm isolation** - stronger than containers
|
|
269
|
+
- **Network isolation** - configurable internet access
|
|
270
|
+
- **Ephemeral by default** - no persistent state unless explicit
|
|
271
|
+
- **No host access** - sandboxes can't reach host systems
|
|
272
|
+
|
|
273
|
+
## Migration Path
|
|
274
|
+
|
|
275
|
+
1. **Week 1**: Add E2B SDK, create basic integration
|
|
276
|
+
2. **Week 2**: Build custom template, test with CI agents
|
|
277
|
+
3. **Week 3**: Add hybrid mode, workspace configuration
|
|
278
|
+
4. **Week 4**: Documentation, monitoring, rollout
|
|
279
|
+
|
|
280
|
+
## Open Questions
|
|
281
|
+
|
|
282
|
+
1. **Template caching**: How often do we need to rebuild templates?
|
|
283
|
+
2. **Secrets management**: How to inject API keys securely?
|
|
284
|
+
3. **Artifact persistence**: How to preserve agent outputs?
|
|
285
|
+
4. **Monitoring**: How to track sandbox usage and costs?
|
|
286
|
+
|
|
287
|
+
## Advanced Capabilities
|
|
288
|
+
|
|
289
|
+
### E2B Desktop - Full GUI/Browser Control
|
|
290
|
+
|
|
291
|
+
[E2B Desktop](https://github.com/e2b-dev/desktop) provides complete Linux desktop environments:
|
|
292
|
+
|
|
293
|
+
**Features:**
|
|
294
|
+
- Xfce4 desktop environment
|
|
295
|
+
- Pre-installed Chrome, Firefox, VS Code
|
|
296
|
+
- VNC streaming for real-time viewing
|
|
297
|
+
- Mouse/keyboard control via xdotool
|
|
298
|
+
- Screenshot capture for visual AI
|
|
299
|
+
|
|
300
|
+
```typescript
|
|
301
|
+
// src/cloud/services/e2b-desktop.ts
|
|
302
|
+
import { Desktop } from '@e2b/desktop';
|
|
303
|
+
|
|
304
|
+
export async function runBrowserTest(
|
|
305
|
+
testScript: string,
|
|
306
|
+
url: string
|
|
307
|
+
): Promise<{ screenshots: string[]; result: string }> {
|
|
308
|
+
const desktop = await Desktop.create();
|
|
309
|
+
|
|
310
|
+
try {
|
|
311
|
+
// Open browser
|
|
312
|
+
await desktop.launch('google-chrome', [url]);
|
|
313
|
+
await desktop.wait(2000);
|
|
314
|
+
|
|
315
|
+
// Take screenshot
|
|
316
|
+
const screenshot = await desktop.screenshot();
|
|
317
|
+
|
|
318
|
+
// Run test script with Playwright
|
|
319
|
+
const result = await desktop.commands.run(`npx playwright test ${testScript}`);
|
|
320
|
+
|
|
321
|
+
return {
|
|
322
|
+
screenshots: [screenshot],
|
|
323
|
+
result: result.stdout,
|
|
324
|
+
};
|
|
325
|
+
} finally {
|
|
326
|
+
await desktop.close();
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
**Use cases:**
|
|
332
|
+
- Visual regression testing
|
|
333
|
+
- E2E browser tests
|
|
334
|
+
- GUI automation
|
|
335
|
+
- Screen recording for demos
|
|
336
|
+
|
|
337
|
+
### Browserbase Integration - Serverless Browsers
|
|
338
|
+
|
|
339
|
+
[Browserbase](https://browserbase.com) provides dedicated serverless browser infrastructure:
|
|
340
|
+
|
|
341
|
+
**Features:**
|
|
342
|
+
- Spin up 1000s of browsers in milliseconds
|
|
343
|
+
- Native Playwright/Puppeteer/Selenium support
|
|
344
|
+
- Built-in captcha solving
|
|
345
|
+
- Residential proxies
|
|
346
|
+
- Session recording & debugging
|
|
347
|
+
- SOC-2 & HIPAA compliant
|
|
348
|
+
|
|
349
|
+
```typescript
|
|
350
|
+
// src/cloud/services/browserbase.ts
|
|
351
|
+
import { chromium } from 'playwright';
|
|
352
|
+
|
|
353
|
+
export async function runWithBrowserbase(
|
|
354
|
+
script: (page: Page) => Promise<void>
|
|
355
|
+
): Promise<void> {
|
|
356
|
+
const browser = await chromium.connectOverCDP(
|
|
357
|
+
`wss://connect.browserbase.com?apiKey=${process.env.BROWSERBASE_API_KEY}`
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
try {
|
|
361
|
+
const context = browser.contexts()[0];
|
|
362
|
+
const page = context.pages()[0];
|
|
363
|
+
await script(page);
|
|
364
|
+
} finally {
|
|
365
|
+
await browser.close();
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
**Use cases:**
|
|
371
|
+
- Web scraping agents
|
|
372
|
+
- Form automation
|
|
373
|
+
- Testing production sites
|
|
374
|
+
- Multi-browser testing
|
|
375
|
+
|
|
376
|
+
### Docker MCP Catalog - 200+ Tools
|
|
377
|
+
|
|
378
|
+
E2B sandboxes now include access to [Docker's MCP Catalog](https://www.docker.com/blog/docker-e2b-building-the-future-of-trusted-ai/):
|
|
379
|
+
|
|
380
|
+
**Available tools include:**
|
|
381
|
+
- GitHub, GitLab
|
|
382
|
+
- Perplexity, Browserbase
|
|
383
|
+
- ElevenLabs, Stripe
|
|
384
|
+
- Slack, Discord
|
|
385
|
+
- And 200+ more
|
|
386
|
+
|
|
387
|
+
```typescript
|
|
388
|
+
// Agents can use MCP tools within sandboxes
|
|
389
|
+
const sandbox = await Sandbox.create('relay-workspace-mcp');
|
|
390
|
+
await sandbox.commands.run(`
|
|
391
|
+
# Use GitHub MCP tool
|
|
392
|
+
mcp-github create-issue --repo user/repo --title "Bug fix"
|
|
393
|
+
`);
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### Hybrid Architecture for Advanced Agents
|
|
397
|
+
|
|
398
|
+
```
|
|
399
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
400
|
+
│ Agent Relay Cloud │
|
|
401
|
+
│ ┌─────────────┐ │
|
|
402
|
+
│ │ Spawner │ │
|
|
403
|
+
│ └──────┬──────┘ │
|
|
404
|
+
│ │ │
|
|
405
|
+
│ ├──────────────────┬──────────────────┐ │
|
|
406
|
+
│ ▼ ▼ ▼ │
|
|
407
|
+
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
408
|
+
│ │ E2B Sandbox │ │ E2B Desktop │ │ Browserbase │ │
|
|
409
|
+
│ │ (Code exec) │ │ (GUI/VNC) │ │ (Browsers) │ │
|
|
410
|
+
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
|
411
|
+
│ │ │ │ │
|
|
412
|
+
│ └──────────────────┴──────────────────┘ │
|
|
413
|
+
│ │ │
|
|
414
|
+
│ MCP Tool Gateway │
|
|
415
|
+
│ (200+ integrations) │
|
|
416
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### Agent Capabilities Matrix
|
|
420
|
+
|
|
421
|
+
| Capability | E2B Sandbox | E2B Desktop | Browserbase |
|
|
422
|
+
|------------|-------------|-------------|-------------|
|
|
423
|
+
| Code execution | ✅ | ✅ | ❌ |
|
|
424
|
+
| Terminal/CLI | ✅ | ✅ | ❌ |
|
|
425
|
+
| File system | ✅ | ✅ | Limited |
|
|
426
|
+
| GUI apps | ❌ | ✅ | ❌ |
|
|
427
|
+
| Browser control | Limited | ✅ | ✅ |
|
|
428
|
+
| Visual testing | ❌ | ✅ | ✅ |
|
|
429
|
+
| Parallel scale | Good | Limited | Excellent |
|
|
430
|
+
| Cost | Low | Medium | Medium |
|
|
431
|
+
|
|
432
|
+
### Workspace Configuration
|
|
433
|
+
|
|
434
|
+
```typescript
|
|
435
|
+
interface WorkspaceExecutionConfig {
|
|
436
|
+
// Default execution backend
|
|
437
|
+
default: 'e2b' | 'e2b-desktop' | 'docker';
|
|
438
|
+
|
|
439
|
+
// E2B configuration
|
|
440
|
+
e2b?: {
|
|
441
|
+
apiKey: string;
|
|
442
|
+
template: string;
|
|
443
|
+
timeout: number;
|
|
444
|
+
enableMcp: boolean;
|
|
445
|
+
};
|
|
446
|
+
|
|
447
|
+
// E2B Desktop for GUI tasks
|
|
448
|
+
e2bDesktop?: {
|
|
449
|
+
apiKey: string;
|
|
450
|
+
resolution: { width: number; height: number };
|
|
451
|
+
vncEnabled: boolean;
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
// Browserbase for web automation
|
|
455
|
+
browserbase?: {
|
|
456
|
+
apiKey: string;
|
|
457
|
+
proxy?: 'residential' | 'datacenter';
|
|
458
|
+
captchaSolver: boolean;
|
|
459
|
+
};
|
|
460
|
+
|
|
461
|
+
// Agent-specific overrides
|
|
462
|
+
agentOverrides?: {
|
|
463
|
+
[agentType: string]: {
|
|
464
|
+
backend: 'e2b' | 'e2b-desktop' | 'browserbase' | 'docker';
|
|
465
|
+
capabilities?: string[];
|
|
466
|
+
};
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// Example configuration
|
|
471
|
+
const config: WorkspaceExecutionConfig = {
|
|
472
|
+
default: 'e2b',
|
|
473
|
+
e2b: {
|
|
474
|
+
apiKey: process.env.E2B_API_KEY!,
|
|
475
|
+
template: 'relay-workspace',
|
|
476
|
+
timeout: 300000,
|
|
477
|
+
enableMcp: true,
|
|
478
|
+
},
|
|
479
|
+
e2bDesktop: {
|
|
480
|
+
apiKey: process.env.E2B_API_KEY!,
|
|
481
|
+
resolution: { width: 1920, height: 1080 },
|
|
482
|
+
vncEnabled: true,
|
|
483
|
+
},
|
|
484
|
+
browserbase: {
|
|
485
|
+
apiKey: process.env.BROWSERBASE_API_KEY!,
|
|
486
|
+
captchaSolver: true,
|
|
487
|
+
},
|
|
488
|
+
agentOverrides: {
|
|
489
|
+
'visual-tester': { backend: 'e2b-desktop' },
|
|
490
|
+
'web-scraper': { backend: 'browserbase' },
|
|
491
|
+
'ci-fix': { backend: 'e2b' },
|
|
492
|
+
},
|
|
493
|
+
};
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
## References
|
|
497
|
+
|
|
498
|
+
- [E2B Documentation](https://e2b.dev/docs)
|
|
499
|
+
- [E2B GitHub](https://github.com/e2b-dev/E2B)
|
|
500
|
+
- [E2B Desktop](https://github.com/e2b-dev/desktop)
|
|
501
|
+
- [Custom Templates Guide](https://e2b.dev/docs/sandbox-template)
|
|
502
|
+
- [Docker + E2B Partnership](https://www.docker.com/blog/docker-e2b-building-the-future-of-trusted-ai/)
|
|
503
|
+
- [Browserbase](https://browserbase.com)
|
|
504
|
+
- [How Manus Uses E2B](https://e2b.dev/blog/how-manus-uses-e2b-to-provide-agents-with-virtual-computers)
|