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,222 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Automated PTY input test for Claude CLI
|
|
4
|
+
* Tests different input methods without user interaction
|
|
5
|
+
* Run inside workspace container: node /app/dist/scripts/test-pty-input-auto.js
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as pty from 'node-pty';
|
|
9
|
+
|
|
10
|
+
const TEST_CODE = 'test-auth-code-12345';
|
|
11
|
+
const INPUT_METHOD = process.argv[2] || '1';
|
|
12
|
+
|
|
13
|
+
// Debug: Log all escape sequences we send
|
|
14
|
+
function logHex(label, data) {
|
|
15
|
+
const hex = Buffer.from(data).toString('hex').replace(/(.{2})/g, '$1 ').trim();
|
|
16
|
+
console.log(`[HEX] ${label}: ${hex}`);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function stripAnsi(str) {
|
|
20
|
+
return str.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async function main() {
|
|
24
|
+
console.log(`\nTesting PTY input method ${INPUT_METHOD} with code: ${TEST_CODE}\n`);
|
|
25
|
+
|
|
26
|
+
const proc = pty.spawn('claude', [], {
|
|
27
|
+
name: 'xterm-256color',
|
|
28
|
+
cols: 120,
|
|
29
|
+
rows: 30,
|
|
30
|
+
cwd: '/workspace',
|
|
31
|
+
env: {
|
|
32
|
+
...process.env,
|
|
33
|
+
NO_COLOR: '1',
|
|
34
|
+
TERM: 'xterm-256color',
|
|
35
|
+
DISPLAY: '',
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
let output = '';
|
|
40
|
+
let authUrl = null;
|
|
41
|
+
let codePromptSeen = false;
|
|
42
|
+
let codeSent = false;
|
|
43
|
+
const prompts = [
|
|
44
|
+
{ pattern: /dark\s*(mode|theme)/i, response: '\r', name: 'dark mode' },
|
|
45
|
+
{ pattern: /select\s*login|how\s*would\s*you\s*like|subscription\s*or.*api/i, response: '\r', name: 'login method' },
|
|
46
|
+
];
|
|
47
|
+
const respondedPrompts = new Set();
|
|
48
|
+
|
|
49
|
+
proc.onData((data) => {
|
|
50
|
+
output += data;
|
|
51
|
+
const clean = stripAnsi(data);
|
|
52
|
+
|
|
53
|
+
// Log meaningful output
|
|
54
|
+
if (clean.trim()) {
|
|
55
|
+
const lines = clean.trim().split('\n').map(l => l.trim()).filter(l => l);
|
|
56
|
+
for (const line of lines) {
|
|
57
|
+
if (line.length > 3 && !line.match(/^[·✢*✶✻✽]+$/)) {
|
|
58
|
+
console.log('[PTY]', line.substring(0, 120));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Auto-respond to prompts
|
|
64
|
+
for (const prompt of prompts) {
|
|
65
|
+
if (!respondedPrompts.has(prompt.name) && prompt.pattern.test(clean)) {
|
|
66
|
+
respondedPrompts.add(prompt.name);
|
|
67
|
+
console.log(`\n[AUTO] Responding to: ${prompt.name}`);
|
|
68
|
+
setTimeout(() => proc.write(prompt.response), 100);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Capture auth URL
|
|
73
|
+
const urlMatch = clean.match(/(https:\/\/[^\s]+)/);
|
|
74
|
+
if (urlMatch && !authUrl) {
|
|
75
|
+
authUrl = urlMatch[1];
|
|
76
|
+
console.log('\n[CAPTURED] Auth URL detected');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Look for code paste prompt - various patterns Claude might use
|
|
80
|
+
const codePromptPatterns = [
|
|
81
|
+
/paste.*code/i,
|
|
82
|
+
/enter.*code/i,
|
|
83
|
+
/authorization.*code/i,
|
|
84
|
+
/code.*here/i,
|
|
85
|
+
/waiting.*code/i,
|
|
86
|
+
/input.*code/i,
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
if (authUrl && !codePromptSeen && !codeSent) {
|
|
90
|
+
for (const pattern of codePromptPatterns) {
|
|
91
|
+
if (pattern.test(clean)) {
|
|
92
|
+
codePromptSeen = true;
|
|
93
|
+
console.log('\n[DETECTED] Code prompt pattern:', pattern.toString());
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Also look for the text input box indicator from Ink
|
|
100
|
+
// After URL is shown and some time passes, try sending the code
|
|
101
|
+
if (authUrl && !codeSent) {
|
|
102
|
+
// Check if we see any indication we should enter the code
|
|
103
|
+
const outputLower = stripAnsi(output).toLowerCase();
|
|
104
|
+
const hasCodePrompt = outputLower.includes('paste') ||
|
|
105
|
+
outputLower.includes('enter the code') ||
|
|
106
|
+
outputLower.includes('authorization code') ||
|
|
107
|
+
outputLower.includes("browser didn't open");
|
|
108
|
+
|
|
109
|
+
if (hasCodePrompt || output.length > 5000) {
|
|
110
|
+
codeSent = true;
|
|
111
|
+
console.log('\n[SENDING] Sending code after prompt/timeout...');
|
|
112
|
+
setTimeout(() => sendCode(proc), 500);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
proc.onExit(({ exitCode }) => {
|
|
118
|
+
console.log('\n[EXIT] Claude exited with code:', exitCode);
|
|
119
|
+
console.log('[TOTAL OUTPUT LENGTH]', output.length);
|
|
120
|
+
|
|
121
|
+
// Check for credentials
|
|
122
|
+
import('fs').then(fs => {
|
|
123
|
+
const credPath = '/home/workspace/.claude/.credentials.json';
|
|
124
|
+
if (fs.existsSync(credPath)) {
|
|
125
|
+
console.log('[SUCCESS] Credentials file found!');
|
|
126
|
+
const creds = fs.readFileSync(credPath, 'utf8');
|
|
127
|
+
console.log('[CREDS]', creds.substring(0, 200));
|
|
128
|
+
} else {
|
|
129
|
+
console.log('[RESULT] No credentials file created (expected with test code)');
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
setTimeout(() => process.exit(exitCode), 1000);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
async function sendCode(ptyProc) {
|
|
137
|
+
const PASTE_START = '\x1b[200~';
|
|
138
|
+
const PASTE_END = '\x1b[201~';
|
|
139
|
+
|
|
140
|
+
console.log(`[METHOD ${INPUT_METHOD}] Sending test code...`);
|
|
141
|
+
|
|
142
|
+
switch (INPUT_METHOD) {
|
|
143
|
+
case '1':
|
|
144
|
+
console.log('[1] Plain code + \\r (carriage return)');
|
|
145
|
+
logHex('sending', TEST_CODE + '\r');
|
|
146
|
+
ptyProc.write(TEST_CODE + '\r');
|
|
147
|
+
break;
|
|
148
|
+
case '2':
|
|
149
|
+
console.log('[2] Plain code + \\n (newline)');
|
|
150
|
+
logHex('sending', TEST_CODE + '\n');
|
|
151
|
+
ptyProc.write(TEST_CODE + '\n');
|
|
152
|
+
break;
|
|
153
|
+
case '3':
|
|
154
|
+
console.log('[3] Bracketed paste + \\r');
|
|
155
|
+
logHex('paste start', PASTE_START);
|
|
156
|
+
logHex('code', TEST_CODE);
|
|
157
|
+
logHex('paste end', PASTE_END);
|
|
158
|
+
ptyProc.write(PASTE_START + TEST_CODE + PASTE_END);
|
|
159
|
+
await new Promise(r => setTimeout(r, 200));
|
|
160
|
+
logHex('enter', '\r');
|
|
161
|
+
ptyProc.write('\r');
|
|
162
|
+
break;
|
|
163
|
+
case '4':
|
|
164
|
+
console.log('[4] Plain code + \\r\\n (CRLF)');
|
|
165
|
+
logHex('sending', TEST_CODE + '\r\n');
|
|
166
|
+
ptyProc.write(TEST_CODE + '\r\n');
|
|
167
|
+
break;
|
|
168
|
+
case '5':
|
|
169
|
+
console.log('[5] Character by character + \\r');
|
|
170
|
+
for (const char of TEST_CODE) {
|
|
171
|
+
ptyProc.write(char);
|
|
172
|
+
await new Promise(r => setTimeout(r, 10));
|
|
173
|
+
}
|
|
174
|
+
await new Promise(r => setTimeout(r, 200));
|
|
175
|
+
logHex('enter', '\r');
|
|
176
|
+
ptyProc.write('\r');
|
|
177
|
+
break;
|
|
178
|
+
case '6':
|
|
179
|
+
console.log('[6] Code then wait, then Enter separately');
|
|
180
|
+
logHex('code only', TEST_CODE);
|
|
181
|
+
ptyProc.write(TEST_CODE);
|
|
182
|
+
await new Promise(r => setTimeout(r, 1000));
|
|
183
|
+
console.log('[6] Now sending Enter...');
|
|
184
|
+
logHex('enter', '\r');
|
|
185
|
+
ptyProc.write('\r');
|
|
186
|
+
break;
|
|
187
|
+
case '7':
|
|
188
|
+
console.log('[7] Send Enter first then code then Enter');
|
|
189
|
+
ptyProc.write('\r'); // Clear any existing state
|
|
190
|
+
await new Promise(r => setTimeout(r, 200));
|
|
191
|
+
logHex('code + enter', TEST_CODE + '\r');
|
|
192
|
+
ptyProc.write(TEST_CODE + '\r');
|
|
193
|
+
break;
|
|
194
|
+
case '8':
|
|
195
|
+
console.log('[8] Ctrl+M (same as \\r but explicit)');
|
|
196
|
+
logHex('code + ctrl-m', TEST_CODE + '\x0d');
|
|
197
|
+
ptyProc.write(TEST_CODE + '\x0d');
|
|
198
|
+
break;
|
|
199
|
+
default:
|
|
200
|
+
console.log('[DEFAULT] Plain code + \\r');
|
|
201
|
+
ptyProc.write(TEST_CODE + '\r');
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
console.log('[SENT] Waiting for response...');
|
|
205
|
+
|
|
206
|
+
// Give it more time to process and show error
|
|
207
|
+
setTimeout(() => {
|
|
208
|
+
console.log('\n[TIMEOUT] Test complete, terminating...');
|
|
209
|
+
console.log('[FINAL OUTPUT CHECK] Last 500 chars of output:');
|
|
210
|
+
console.log(stripAnsi(output).slice(-500));
|
|
211
|
+
ptyProc.kill();
|
|
212
|
+
}, 20000);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Failsafe timeout
|
|
216
|
+
setTimeout(() => {
|
|
217
|
+
console.log('\n[FAILSAFE] Max time reached, terminating...');
|
|
218
|
+
proc.kill();
|
|
219
|
+
}, 60000);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
main().catch(console.error);
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Test PTY input methods for Claude CLI
|
|
4
|
+
* Run inside workspace container: node /app/dist/scripts/test-pty-input.js
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as pty from 'node-pty';
|
|
8
|
+
import * as readline from 'readline';
|
|
9
|
+
|
|
10
|
+
const rl = readline.createInterface({
|
|
11
|
+
input: process.stdin,
|
|
12
|
+
output: process.stdout
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
function ask(question) {
|
|
16
|
+
return new Promise(resolve => rl.question(question, resolve));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function stripAnsi(str) {
|
|
20
|
+
return str.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async function main() {
|
|
24
|
+
console.log('Starting Claude CLI via PTY...\n');
|
|
25
|
+
|
|
26
|
+
const proc = pty.spawn('claude', [], {
|
|
27
|
+
name: 'xterm-256color',
|
|
28
|
+
cols: 120,
|
|
29
|
+
rows: 30,
|
|
30
|
+
cwd: '/workspace',
|
|
31
|
+
env: {
|
|
32
|
+
...process.env,
|
|
33
|
+
NO_COLOR: '1',
|
|
34
|
+
TERM: 'xterm-256color',
|
|
35
|
+
DISPLAY: '',
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
let output = '';
|
|
40
|
+
let authUrl = null;
|
|
41
|
+
const prompts = [
|
|
42
|
+
{ pattern: /dark\s*(mode|theme)/i, response: '\r', name: 'dark mode' },
|
|
43
|
+
{ pattern: /select\s*login|how\s*would\s*you\s*like|subscription\s*or.*api/i, response: '\r', name: 'login method' },
|
|
44
|
+
];
|
|
45
|
+
const respondedPrompts = new Set();
|
|
46
|
+
|
|
47
|
+
proc.onData((data) => {
|
|
48
|
+
output += data;
|
|
49
|
+
const clean = stripAnsi(data);
|
|
50
|
+
|
|
51
|
+
// Log output
|
|
52
|
+
if (clean.trim()) {
|
|
53
|
+
console.log('[PTY]', clean.substring(0, 200));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Auto-respond to prompts
|
|
57
|
+
for (const prompt of prompts) {
|
|
58
|
+
if (!respondedPrompts.has(prompt.name) && prompt.pattern.test(clean)) {
|
|
59
|
+
respondedPrompts.add(prompt.name);
|
|
60
|
+
console.log(`\n[AUTO] Responding to: ${prompt.name}`);
|
|
61
|
+
setTimeout(() => proc.write(prompt.response), 100);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Capture auth URL
|
|
66
|
+
const urlMatch = clean.match(/(https:\/\/[^\s]+)/);
|
|
67
|
+
if (urlMatch && !authUrl) {
|
|
68
|
+
authUrl = urlMatch[1];
|
|
69
|
+
console.log('\n[CAPTURED] Auth URL:', authUrl.substring(0, 80) + '...');
|
|
70
|
+
promptForCode();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
proc.onExit(({ exitCode }) => {
|
|
75
|
+
console.log('\n[EXIT] Claude exited with code:', exitCode);
|
|
76
|
+
console.log('[OUTPUT LENGTH]', output.length);
|
|
77
|
+
rl.close();
|
|
78
|
+
process.exit(exitCode);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
async function promptForCode() {
|
|
82
|
+
console.log('\n========================================');
|
|
83
|
+
console.log('Complete OAuth in browser, then paste the code here.');
|
|
84
|
+
console.log('========================================\n');
|
|
85
|
+
|
|
86
|
+
const code = await ask('Paste auth code: ');
|
|
87
|
+
|
|
88
|
+
console.log('\nSelect input method:');
|
|
89
|
+
console.log('1. Plain code + \\r');
|
|
90
|
+
console.log('2. Plain code + \\n');
|
|
91
|
+
console.log('3. Bracketed paste + \\r');
|
|
92
|
+
console.log('4. Bracketed paste + \\n');
|
|
93
|
+
console.log('5. Character by character + \\r');
|
|
94
|
+
|
|
95
|
+
const method = await ask('Choice (1-5): ');
|
|
96
|
+
|
|
97
|
+
const PASTE_START = '\x1b[200~';
|
|
98
|
+
const PASTE_END = '\x1b[201~';
|
|
99
|
+
const cleanCode = code.trim();
|
|
100
|
+
|
|
101
|
+
console.log(`\n[SENDING] Using method ${method}...`);
|
|
102
|
+
|
|
103
|
+
switch (method) {
|
|
104
|
+
case '1':
|
|
105
|
+
proc.write(cleanCode + '\r');
|
|
106
|
+
break;
|
|
107
|
+
case '2':
|
|
108
|
+
proc.write(cleanCode + '\n');
|
|
109
|
+
break;
|
|
110
|
+
case '3':
|
|
111
|
+
proc.write(PASTE_START + cleanCode + PASTE_END);
|
|
112
|
+
await new Promise(r => setTimeout(r, 200));
|
|
113
|
+
proc.write('\r');
|
|
114
|
+
break;
|
|
115
|
+
case '4':
|
|
116
|
+
proc.write(PASTE_START + cleanCode + PASTE_END);
|
|
117
|
+
await new Promise(r => setTimeout(r, 200));
|
|
118
|
+
proc.write('\n');
|
|
119
|
+
break;
|
|
120
|
+
case '5':
|
|
121
|
+
for (const char of cleanCode) {
|
|
122
|
+
proc.write(char);
|
|
123
|
+
await new Promise(r => setTimeout(r, 10));
|
|
124
|
+
}
|
|
125
|
+
await new Promise(r => setTimeout(r, 200));
|
|
126
|
+
proc.write('\r');
|
|
127
|
+
break;
|
|
128
|
+
default:
|
|
129
|
+
proc.write(cleanCode + '\r');
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
console.log('[SENT] Waiting for response...\n');
|
|
133
|
+
|
|
134
|
+
// Wait and watch output
|
|
135
|
+
setTimeout(() => {
|
|
136
|
+
console.log('\n[CHECK] Checking for credentials file...');
|
|
137
|
+
import('fs').then(fs => {
|
|
138
|
+
const credPath = '/home/workspace/.claude/.credentials.json';
|
|
139
|
+
if (fs.existsSync(credPath)) {
|
|
140
|
+
console.log('[SUCCESS] Credentials file found!');
|
|
141
|
+
console.log(fs.readFileSync(credPath, 'utf8').substring(0, 200));
|
|
142
|
+
} else {
|
|
143
|
+
console.log('[FAIL] No credentials file yet');
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}, 5000);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
main().catch(console.error);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{7121:function(n,e,u){Promise.resolve().then(u.t.bind(u,7960,23))},7960:function(){}},function(n){n.O(0,[587,971,117,744],function(){return n(n.s=7121)}),_N_E=n.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[860],{1766:function(n,e,t){Promise.resolve().then(t.bind(t,5804))},5804:function(n,e,t){"use strict";t.r(e),t.d(e,{default:function(){return x}});var s=t(7437),a=t(2265),i=t(7648);let l=["#4a9eff","#b388ff","#ff9e40","#00e676","#ff5c5c","#00ffc8"];function r(n){let e=0;for(let t=0;t<n.length;t++)e=n.charCodeAt(t)+((e<<5)-e);return l[Math.abs(e)%l.length]}function c(n){return n.slice(0,2).toUpperCase()}function o(n){return n<60?"".concat(n,"s"):n<3600?"".concat(Math.floor(n/60),"m"):n<86400?"".concat(Math.floor(n/3600),"h ").concat(Math.floor(n%3600/60),"m"):"".concat(Math.floor(n/86400),"d ").concat(Math.floor(n%86400/3600),"h")}function d(n){return new Date(n).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function x(){var n,e,t,l;let[x,g]=(0,a.useState)(null),[m,u]=(0,a.useState)(null),[f,b]=(0,a.useState)(!0);if((0,a.useEffect)(()=>{let n=async()=>{try{let n=await fetch("/api/metrics");if(!n.ok)throw Error("Failed to fetch metrics");let e=await n.json();g(e),u(null)}catch(n){u(n instanceof Error?n.message:"Failed to load metrics")}finally{b(!1)}};n();let e=setInterval(n,5e3);return()=>clearInterval(e)},[]),f)return(0,s.jsxs)("div",{className:"metrics-page",children:[(0,s.jsx)("style",{children:p}),(0,s.jsxs)("div",{className:"loading",children:[(0,s.jsx)("div",{className:"spinner"}),(0,s.jsx)("p",{children:"Loading metrics..."})]})]});if(m||!x)return(0,s.jsxs)("div",{className:"metrics-page",children:[(0,s.jsx)("style",{children:p}),(0,s.jsxs)("div",{className:"error-state",children:[(0,s.jsx)("p",{children:m||"No metrics available"}),(0,s.jsx)("button",{onClick:()=>window.location.reload(),children:"Retry"})]})]});let j=(null!==(t=null===(n=x.sessions)||void 0===n?void 0:n.errorRate)&&void 0!==t?t:0)<=1?"healthy":(null!==(l=null===(e=x.sessions)||void 0===e?void 0:e.errorRate)&&void 0!==l?l:0)<=5?"warning":"critical";return(0,s.jsxs)("div",{className:"metrics-page",children:[(0,s.jsx)("style",{children:p}),(0,s.jsx)("header",{className:"header",children:(0,s.jsxs)("div",{className:"header-content",children:[(0,s.jsxs)("div",{className:"header-left",children:[(0,s.jsxs)(i.default,{href:"/",className:"back-link",children:[(0,s.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("path",{d:"M19 12H5M12 19l-7-7 7-7"})}),"Dashboard"]}),(0,s.jsxs)("div",{className:"logo",children:[(0,s.jsx)("div",{className:"logo-icon",children:(0,s.jsxs)("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"white",strokeWidth:"2",children:[(0,s.jsx)("path",{d:"M3 3v18h18"}),(0,s.jsx)("path",{d:"M18 17V9"}),(0,s.jsx)("path",{d:"M13 17V5"}),(0,s.jsx)("path",{d:"M8 17v-3"})]})}),(0,s.jsxs)("div",{className:"logo-text",children:["Agent ",(0,s.jsx)("span",{children:"Metrics"})]})]})]}),(0,s.jsxs)("div",{className:"live-indicator",children:[(0,s.jsx)("span",{className:"live-dot"}),"LIVE"]})]})}),(0,s.jsxs)("main",{className:"main",children:[(0,s.jsxs)("div",{className:"stats-grid",children:[(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-label",children:"Total Agents"}),(0,s.jsx)("div",{className:"stat-value accent-cyan",children:x.totalAgents}),(0,s.jsxs)("div",{className:"stat-subtext",children:[x.onlineAgents," online / ",x.offlineAgents," offline"]})]}),(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-label",children:"Online Now"}),(0,s.jsx)("div",{className:"stat-value accent-green",children:x.onlineAgents}),(0,s.jsxs)("div",{className:"stat-subtext",children:[x.totalAgents>0?Math.round(x.onlineAgents/x.totalAgents*100):0,"% availability"]})]}),(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-label",children:"Total Messages"}),(0,s.jsx)("div",{className:"stat-value accent-blue",children:x.totalMessages.toLocaleString()}),(0,s.jsx)("div",{className:"stat-subtext",children:"all time"})]}),(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-label",children:"Avg. Throughput"}),(0,s.jsx)("div",{className:"stat-value accent-orange",children:x.throughput.avgMessagesPerMinute}),(0,s.jsx)("div",{className:"stat-subtext",children:"messages / minute"})]})]}),(0,s.jsxs)("section",{className:"section",children:[(0,s.jsx)("div",{className:"section-header",children:(0,s.jsx)("h2",{className:"section-title",children:"Message Throughput"})}),(0,s.jsx)("div",{className:"throughput-panel",children:(0,s.jsxs)("div",{className:"throughput-grid",children:[(0,s.jsx)(h,{value:x.throughput.messagesLastMinute,label:"Last Minute",max:10}),(0,s.jsx)(h,{value:x.throughput.messagesLastHour,label:"Last Hour",max:100}),(0,s.jsx)(h,{value:x.throughput.messagesLast24Hours,label:"Last 24 Hours",max:1e3}),(0,s.jsx)(h,{value:x.throughput.avgMessagesPerMinute,label:"Avg / Min",max:5})]})})]}),x.sessions&&(0,s.jsxs)("section",{className:"section",children:[(0,s.jsxs)("div",{className:"section-header",children:[(0,s.jsx)("h2",{className:"section-title",children:"Session Lifecycle"}),(0,s.jsxs)("span",{className:"error-rate-indicator ".concat(j),children:[(x.sessions.errorRate||0).toFixed(1),"% error rate"]})]}),(0,s.jsxs)("div",{className:"lifecycle-panel",children:[(0,s.jsxs)("div",{className:"lifecycle-grid",children:[(0,s.jsxs)("div",{className:"lifecycle-item",children:[(0,s.jsx)("div",{className:"lifecycle-value accent-purple",children:x.sessions.totalSessions}),(0,s.jsx)("div",{className:"lifecycle-label",children:"Total Sessions"})]}),(0,s.jsxs)("div",{className:"lifecycle-item",children:[(0,s.jsx)("div",{className:"lifecycle-value accent-blue",children:x.sessions.activeSessions}),(0,s.jsx)("div",{className:"lifecycle-label",children:"Active"})]}),(0,s.jsxs)("div",{className:"lifecycle-item",children:[(0,s.jsx)("div",{className:"lifecycle-value accent-green",children:x.sessions.closedByAgent}),(0,s.jsx)("div",{className:"lifecycle-label",children:"Clean Close"})]}),(0,s.jsxs)("div",{className:"lifecycle-item",children:[(0,s.jsx)("div",{className:"lifecycle-value accent-orange",children:x.sessions.closedByDisconnect}),(0,s.jsx)("div",{className:"lifecycle-label",children:"Disconnect"})]}),(0,s.jsxs)("div",{className:"lifecycle-item",children:[(0,s.jsx)("div",{className:"lifecycle-value accent-red",children:x.sessions.closedByError}),(0,s.jsx)("div",{className:"lifecycle-label",children:"Error"})]})]}),x.sessions.recentSessions&&x.sessions.recentSessions.length>0&&(0,s.jsxs)("table",{className:"sessions-table",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:"Agent"}),(0,s.jsx)("th",{children:"Status"}),(0,s.jsx)("th",{children:"Messages"}),(0,s.jsx)("th",{children:"Started"}),(0,s.jsx)("th",{children:"Duration"})]})}),(0,s.jsx)("tbody",{children:x.sessions.recentSessions.slice(0,5).map((n,e)=>{let t=new Date(n.startedAt),a=Math.floor(((n.endedAt?new Date(n.endedAt):new Date).getTime()-t.getTime())/1e3),i=n.closedBy||"active",l=n.closedBy?"agent"===n.closedBy?"Clean":"disconnect"===n.closedBy?"Disconnect":"Error":"Active";return(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsxs)("div",{className:"agent-name",children:[(0,s.jsx)("div",{className:"agent-avatar",style:{background:r(n.agentName)},children:c(n.agentName)}),(0,s.jsx)("span",{className:"agent-name-text",children:n.agentName})]})}),(0,s.jsx)("td",{children:(0,s.jsx)("span",{className:"closed-badge ".concat(i),children:l})}),(0,s.jsx)("td",{className:"metric-cell",children:n.messageCount}),(0,s.jsx)("td",{className:"uptime-cell",children:d(n.startedAt)}),(0,s.jsx)("td",{className:"uptime-cell",children:o(a)})]},e)})})]})]})]}),(0,s.jsxs)("section",{className:"section",children:[(0,s.jsx)("div",{className:"section-header",children:(0,s.jsx)("h2",{className:"section-title",children:"Agent Health"})}),(0,s.jsx)("div",{className:"agents-table-container",children:0===x.agents.length?(0,s.jsxs)("div",{className:"empty-state",children:[(0,s.jsxs)("svg",{className:"empty-state-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,s.jsx)("path",{d:"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}),(0,s.jsx)("circle",{cx:"12",cy:"7",r:"4"})]}),(0,s.jsx)("p",{className:"empty-state-text",children:"No agents registered yet"})]}):(0,s.jsxs)("table",{className:"agents-table",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:"Agent"}),(0,s.jsx)("th",{children:"Status"}),(0,s.jsx)("th",{children:"Messages Sent"}),(0,s.jsx)("th",{children:"Messages Received"}),(0,s.jsx)("th",{children:"Uptime"}),(0,s.jsx)("th",{children:"Last Seen"})]})}),(0,s.jsx)("tbody",{children:x.agents.map(n=>(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsxs)("div",{className:"agent-name",children:[(0,s.jsx)("div",{className:"agent-avatar",style:{background:r(n.name)},children:c(n.name)}),(0,s.jsx)("span",{className:"agent-name-text",children:n.name})]})}),(0,s.jsx)("td",{children:(0,s.jsx)("span",{className:"status-badge ".concat(n.isOnline?"online":"offline"),children:n.isOnline?"Online":"Offline"})}),(0,s.jsx)("td",{className:"metric-cell sent",children:n.messagesSent.toLocaleString()}),(0,s.jsx)("td",{className:"metric-cell received",children:n.messagesReceived.toLocaleString()}),(0,s.jsx)("td",{className:"uptime-cell",children:o(n.uptimeSeconds)}),(0,s.jsx)("td",{className:"uptime-cell",children:d(n.lastSeen)})]},n.name))})]})})]}),(0,s.jsxs)("div",{className:"last-updated",children:["Last updated: ",d(x.timestamp)]})]})]})}function h(n){let{value:e,label:t,max:a}=n,i=Math.min(e/a*100,100);return(0,s.jsxs)("div",{className:"throughput-item",children:[(0,s.jsx)("div",{className:"throughput-value",children:e}),(0,s.jsx)("div",{className:"throughput-label",children:t}),(0,s.jsx)("div",{className:"throughput-bar",children:(0,s.jsx)("div",{className:"throughput-bar-fill",style:{width:"".concat(i,"%")}})})]})}let p="\n .metrics-page {\n min-height: 100vh;\n background: #1a1d21;\n color: #e8e8e8;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n\n .header {\n position: sticky;\n top: 0;\n z-index: 100;\n background: #1a1a2e;\n border-bottom: 1px solid #2a2a3e;\n padding: 16px 32px;\n }\n\n .header-content {\n max-width: 1400px;\n margin: 0 auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n\n .back-link {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #888;\n text-decoration: none;\n font-size: 14px;\n font-weight: 500;\n padding: 8px 12px;\n border-radius: 6px;\n transition: all 0.2s;\n }\n\n .back-link:hover {\n color: #4a9eff;\n background: rgba(74, 158, 255, 0.1);\n }\n\n .logo {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .logo-icon {\n width: 32px;\n height: 32px;\n background: linear-gradient(135deg, #1e3a5f 0%, #2a4a6e 100%);\n border: 1px solid #3a5a7e;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .logo-text {\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.3px;\n }\n\n .logo-text span {\n color: #4a9eff;\n }\n\n .live-indicator {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: rgba(34, 197, 94, 0.1);\n border: 1px solid rgba(34, 197, 94, 0.3);\n border-radius: 20px;\n font-family: 'IBM Plex Mono', monospace;\n font-size: 12px;\n font-weight: 500;\n color: #22c55e;\n }\n\n .live-dot {\n width: 8px;\n height: 8px;\n background: #22c55e;\n border-radius: 50%;\n animation: pulse 2s ease-in-out infinite;\n box-shadow: 0 0 10px rgba(34, 197, 94, 0.4);\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.5; transform: scale(0.9); }\n }\n\n .main {\n position: relative;\n z-index: 1;\n max-width: 1400px;\n margin: 0 auto;\n padding: 24px 32px 48px;\n }\n\n .loading, .error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100vh;\n gap: 16px;\n }\n\n .spinner {\n width: 32px;\n height: 32px;\n border: 2px solid rgba(255, 255, 255, 0.1);\n border-top-color: #4a9eff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n }\n\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n\n .error-state button {\n padding: 10px 20px;\n background: #1264a3;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n }\n\n .stats-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n }\n\n .stat-card {\n background: #222529;\n border: 1px solid #2a2a3e;\n border-radius: 8px;\n padding: 20px;\n transition: all 0.2s ease;\n }\n\n .stat-card:hover {\n border-color: #3a3a4e;\n background: #282c30;\n }\n\n .stat-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #888;\n margin-bottom: 8px;\n }\n\n .stat-value {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 32px;\n font-weight: 700;\n line-height: 1;\n }\n\n .stat-value.accent-cyan { color: #4a9eff; }\n .stat-value.accent-green { color: #22c55e; }\n .stat-value.accent-orange { color: #f59e0b; }\n .stat-value.accent-blue { color: #6366f1; }\n\n .stat-subtext {\n font-size: 12px;\n color: #666;\n margin-top: 8px;\n font-family: 'IBM Plex Mono', monospace;\n }\n\n .section {\n margin-bottom: 24px;\n }\n\n .section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n }\n\n .section-title {\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 1px;\n color: #888;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .section-title::before {\n content: '';\n width: 3px;\n height: 14px;\n background: #4a9eff;\n border-radius: 2px;\n }\n\n .throughput-panel, .lifecycle-panel {\n background: #222529;\n border: 1px solid #2a2a3e;\n border-radius: 8px;\n padding: 24px;\n }\n\n .throughput-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 24px;\n }\n\n .throughput-item {\n text-align: center;\n }\n\n .throughput-value {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 40px;\n font-weight: 700;\n color: #4a9eff;\n line-height: 1;\n }\n\n .throughput-label {\n font-size: 12px;\n color: #888;\n margin-top: 8px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .throughput-bar {\n height: 4px;\n background: #2a2a3e;\n border-radius: 2px;\n margin-top: 12px;\n overflow: hidden;\n }\n\n .throughput-bar-fill {\n height: 100%;\n background: linear-gradient(90deg, #4a9eff, #6366f1);\n border-radius: 2px;\n transition: width 0.5s ease;\n }\n\n .lifecycle-grid {\n display: grid;\n grid-template-columns: repeat(5, 1fr);\n gap: 20px;\n }\n\n .lifecycle-item {\n text-align: center;\n }\n\n .lifecycle-value {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 32px;\n font-weight: 700;\n line-height: 1;\n }\n\n .lifecycle-value.accent-purple { color: #a78bfa; }\n .lifecycle-value.accent-red { color: #ef4444; }\n\n .lifecycle-label {\n font-size: 11px;\n color: #888;\n margin-top: 8px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .error-rate-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n font-family: 'IBM Plex Mono', monospace;\n }\n\n .error-rate-indicator.healthy {\n background: rgba(34, 197, 94, 0.15);\n color: #22c55e;\n }\n\n .error-rate-indicator.warning {\n background: rgba(245, 158, 11, 0.15);\n color: #f59e0b;\n }\n\n .error-rate-indicator.critical {\n background: rgba(239, 68, 68, 0.15);\n color: #ef4444;\n }\n\n .sessions-table, .agents-table {\n width: 100%;\n border-collapse: collapse;\n margin-top: 16px;\n }\n\n .sessions-table th, .sessions-table td,\n .agents-table th, .agents-table td {\n padding: 12px 16px;\n text-align: left;\n }\n\n .sessions-table th, .agents-table th {\n background: #1a1a2e;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #888;\n border-bottom: 1px solid #2a2a3e;\n }\n\n .sessions-table tr, .agents-table tr {\n border-bottom: 1px solid #2a2a3e;\n }\n\n .sessions-table tr:last-child, .agents-table tr:last-child {\n border-bottom: none;\n }\n\n .agents-table tr:hover {\n background: rgba(74, 158, 255, 0.03);\n }\n\n .agents-table-container {\n background: #222529;\n border: 1px solid #2a2a3e;\n border-radius: 8px;\n overflow: hidden;\n }\n\n .agent-name {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .agent-avatar {\n width: 32px;\n height: 32px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 600;\n font-size: 12px;\n color: white;\n }\n\n .agent-name-text {\n font-weight: 600;\n font-family: 'IBM Plex Mono', monospace;\n }\n\n .status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n }\n\n .status-badge.online {\n background: rgba(34, 197, 94, 0.15);\n color: #22c55e;\n }\n\n .status-badge.offline {\n background: rgba(107, 114, 128, 0.15);\n color: #6b7280;\n }\n\n .status-badge::before {\n content: '';\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: currentColor;\n }\n\n .closed-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n }\n\n .closed-badge.agent {\n background: rgba(34, 197, 94, 0.15);\n color: #22c55e;\n }\n\n .closed-badge.disconnect {\n background: rgba(245, 158, 11, 0.15);\n color: #f59e0b;\n }\n\n .closed-badge.error {\n background: rgba(239, 68, 68, 0.15);\n color: #ef4444;\n }\n\n .closed-badge.active {\n background: rgba(74, 158, 255, 0.15);\n color: #4a9eff;\n }\n\n .metric-cell {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 14px;\n }\n\n .metric-cell.sent { color: #4a9eff; }\n .metric-cell.received { color: #a78bfa; }\n\n .uptime-cell {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 13px;\n color: #888;\n }\n\n .empty-state {\n padding: 48px 32px;\n text-align: center;\n }\n\n .empty-state-icon {\n width: 48px;\n height: 48px;\n margin: 0 auto 16px;\n color: #666;\n opacity: 0.5;\n }\n\n .empty-state-text {\n color: #666;\n font-size: 14px;\n }\n\n .last-updated {\n text-align: center;\n padding: 20px;\n font-size: 12px;\n color: #666;\n font-family: 'IBM Plex Mono', monospace;\n }\n\n @media (max-width: 1200px) {\n .stats-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n .throughput-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n .lifecycle-grid {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n\n @media (max-width: 768px) {\n .header {\n padding: 12px 16px;\n }\n .main {\n padding: 16px;\n }\n .stats-grid {\n grid-template-columns: 1fr;\n }\n .throughput-grid {\n grid-template-columns: 1fr;\n }\n .lifecycle-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n"}},function(n){n.O(0,[648,971,117,744],function(){return n(n.s=1766)}),_N_E=n.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{8440:function(e,t,n){Promise.resolve().then(n.bind(n,7666))},7666:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return eD}});var s=n(7437),a=n(2265);let l={backend:{primary:"#1264a3",light:"#e8f4fd",dark:"#0d4f82",text:"#ffffff"},frontend:{primary:"#7c3aed",light:"#f3e8ff",dark:"#5b21b6",text:"#ffffff"},infra:{primary:"#ea580c",light:"#fff7ed",dark:"#c2410c",text:"#ffffff"},lead:{primary:"#2bac76",light:"#ecfdf5",dark:"#059669",text:"#ffffff"},test:{primary:"#0d9488",light:"#f0fdfa",dark:"#0f766e",text:"#ffffff"},data:{primary:"#dc2626",light:"#fef2f2",dark:"#b91c1c",text:"#ffffff"},api:{primary:"#2563eb",light:"#eff6ff",dark:"#1d4ed8",text:"#ffffff"},worker:{primary:"#9333ea",light:"#faf5ff",dark:"#7e22ce",text:"#ffffff"},monitor:{primary:"#0891b2",light:"#ecfeff",dark:"#0e7490",text:"#ffffff"},security:{primary:"#be123c",light:"#fff1f2",dark:"#9f1239",text:"#ffffff"}},r=[{primary:"#6366f1",light:"#eef2ff",dark:"#4f46e5",text:"#ffffff"},{primary:"#ec4899",light:"#fdf2f8",dark:"#db2777",text:"#ffffff"},{primary:"#14b8a6",light:"#f0fdfa",dark:"#0d9488",text:"#ffffff"},{primary:"#f59e0b",light:"#fffbeb",dark:"#d97706",text:"#000000"},{primary:"#8b5cf6",light:"#f5f3ff",dark:"#7c3aed",text:"#ffffff"},{primary:"#06b6d4",light:"#ecfeff",dark:"#0891b2",text:"#ffffff"},{primary:"#f43f5e",light:"#fff1f2",dark:"#e11d48",text:"#ffffff"},{primary:"#84cc16",light:"#f7fee7",dark:"#65a30d",text:"#000000"}],i={online:"#22c55e",offline:"#6b7280",busy:"#eab308",processing:"#6366f1",error:"#ef4444",attention:"#ef4444"};function c(e){return e.toLowerCase().split("-").filter(Boolean)}function o(e){return c(e)[0]||e.toLowerCase()}function d(e){let t=o(e);return t in l?l[t]:r[function(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t&=t;return Math.abs(t)}(t)%r.length]}function u(e){let t=c(e);return 0===t.length?e.substring(0,2).toUpperCase():t.length>=2?(t[0][0]+t[1][0]).toUpperCase():t[0].substring(0,2).toUpperCase()}function h(e){let t=new Map;for(let n of e){let e=n.team||o(n.name),s=d(n.name),a=t.get(e);a||(a={prefix:e,displayName:g(e),color:s,agents:[],isExpanded:!0},t.set(e,a)),a.agents.push(n)}let n=Array.from(t.values()).sort((e,t)=>e.prefix.localeCompare(t.prefix));for(let e of n)e.agents.sort((e,t)=>e.name.localeCompare(t.name));return n}function m(e){let t=e.split("-").filter(Boolean);return 0===t.length?e:g(t[t.length-1])}function x(e){return e.split("-").filter(Boolean).map(g).join(" > ")}function p(e,t){return t?e.filter(e=>(function(e,t){if(!t)return!0;let n=t.toLowerCase(),s=e.toLowerCase();return!!s.includes(n)||s.split("-").some(e=>e.includes(n))})(e.name,t)):e}function g(e){return e?e.charAt(0).toUpperCase()+e.slice(1):e}function f(e){let t=0,n=0,s=0;for(let a of e)"online"===a.status?t++:"offline"===a.status&&n++,a.needsAttention&&s++;return{total:e.length,online:t,offline:n,needsAttention:s}}function j(e){let{isProcessing:t,processingStartedAt:n,size:l="medium",showElapsed:r=!1}=e,[i,c]=(0,a.useState)(0);return((0,a.useEffect)(()=>{if(!t||!n){c(0);return}let e=()=>{c(Date.now()-n)};e();let s=setInterval(e,1e3);return()=>clearInterval(s)},[t,n]),t)?(0,s.jsxs)("div",{className:"thinking-indicator ".concat({small:"thinking-indicator-small",medium:"thinking-indicator-medium",large:"thinking-indicator-large"}[l]),children:[(0,s.jsxs)("div",{className:"thinking-dots",children:[(0,s.jsx)("span",{className:"thinking-dot"}),(0,s.jsx)("span",{className:"thinking-dot"}),(0,s.jsx)("span",{className:"thinking-dot"})]}),r&&i>0&&(0,s.jsx)("span",{className:"thinking-elapsed",children:(e=>{let t=Math.floor(e/1e3);return t<60?"".concat(t,"s"):"".concat(Math.floor(t/60),"m ").concat(t%60,"s")})(i)})]}):null}function v(e){let{isProcessing:t}=e;return t?(0,s.jsx)("span",{className:"thinking-dot-inline",title:"Processing...",children:(0,s.jsx)("span",{className:"thinking-dot-pulse"})}):null}function y(e){let{agent:t,isSelected:n=!1,showBreadcrumb:a=!1,compact:l=!1,displayNameOverride:r,onClick:c,onMessageClick:o,onReleaseClick:h}=e,p=d(t.name),g=u(t.name),f=r||m(t.name),y=i[t.status]||i.offline,N=()=>{null==c||c(t)},b=e=>{e.stopPropagation(),null==h||h(t)};return l?(0,s.jsxs)("div",{className:"agent-card-compact ".concat(n?"selected":""),onClick:N,style:{"--agent-primary":p.primary,"--agent-light":p.light},children:[(0,s.jsx)("div",{className:"agent-avatar-small",style:{backgroundColor:p.primary},children:(0,s.jsx)("span",{style:{color:p.text},children:g})}),(0,s.jsxs)("div",{className:"agent-compact-info",children:[(0,s.jsx)("span",{className:"agent-name",children:f}),!r&&(0,s.jsx)("span",{className:"agent-breadcrumb-compact",children:x(t.name)})]}),(0,s.jsxs)("div",{className:"agent-compact-actions",children:[t.isSpawned&&h&&(0,s.jsx)("button",{className:"release-btn-compact",onClick:b,title:"Kill agent",children:(0,s.jsx)(w,{})}),t.isProcessing?(0,s.jsx)(v,{isProcessing:!0}):(0,s.jsx)("div",{className:"agent-status-dot",style:{backgroundColor:y}}),t.needsAttention&&(0,s.jsx)("div",{className:"attention-badge"})]})]}):(0,s.jsxs)("div",{className:"agent-card ".concat(n?"selected":""),onClick:N,style:{"--agent-primary":p.primary,"--agent-light":p.light,"--agent-dark":p.dark},children:[(0,s.jsxs)("div",{className:"agent-card-header",children:[(0,s.jsxs)("div",{className:"agent-avatar",style:{backgroundColor:p.primary},children:[(0,s.jsx)("span",{style:{color:p.text},children:g}),(0,s.jsx)("div",{className:"status-indicator",style:{backgroundColor:y}})]}),(0,s.jsxs)("div",{className:"agent-info",children:[(0,s.jsxs)("div",{className:"agent-name-row",children:[(0,s.jsx)("span",{className:"agent-display-name",children:f}),t.needsAttention&&(0,s.jsx)("span",{className:"attention-badge",title:"Needs attention",children:"!"})]}),a?(0,s.jsx)("span",{className:"agent-breadcrumb",children:x(t.name)}):(0,s.jsx)("span",{className:"agent-full-name",children:t.name})]})]}),t.isProcessing&&(0,s.jsxs)("div",{className:"agent-thinking",children:[(0,s.jsx)(j,{isProcessing:!0,processingStartedAt:t.processingStartedAt,size:"medium",showElapsed:!0}),(0,s.jsx)("span",{className:"thinking-label",children:"Thinking..."})]}),t.currentTask&&!t.isProcessing&&(0,s.jsxs)("div",{className:"agent-task",children:[(0,s.jsx)("span",{className:"task-label",children:"Working on:"}),(0,s.jsx)("span",{className:"task-text",children:t.currentTask})]}),(0,s.jsxs)("div",{className:"agent-card-footer",children:[(0,s.jsxs)("div",{className:"agent-meta",children:[t.cli&&(0,s.jsx)("span",{className:"agent-cli",children:t.cli}),void 0!==t.messageCount&&t.messageCount>0&&(0,s.jsxs)("span",{className:"message-count",children:[t.messageCount," msgs"]}),t.isSpawned&&(0,s.jsx)("span",{className:"agent-spawned-badge",children:"spawned"})]}),(0,s.jsxs)("div",{className:"agent-actions",children:[t.isSpawned&&h&&(0,s.jsx)("button",{className:"release-btn",onClick:b,title:"Release agent",children:(0,s.jsx)(w,{})}),o&&(0,s.jsx)("button",{className:"message-btn",onClick:e=>{e.stopPropagation(),null==o||o(t)},title:"Send message",children:(0,s.jsx)(k,{})})]})]})]})}function k(){return(0,s.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,s.jsx)("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})})}function w(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",className:"release-icon",children:[(0,s.jsx)("path",{d:"M12 22c5.523 0 10-4.477 10-10a9.96 9.96 0 0 0-3-7.141",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"}),(0,s.jsx)("path",{d:"M12 22C6.477 22 2 17.523 2 12a9.96 9.96 0 0 1 3-7.141",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"}),(0,s.jsx)("line",{x1:"12",y1:"2",x2:"12",y2:"12",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round"})]})}function N(e){let{agents:t,selectedAgent:n,searchQuery:l="",onAgentSelect:r,onAgentMessage:i,onReleaseClick:c,compact:o=!1,showGroupStats:d=!0}=e,[u,m]=(0,a.useState)(new Set),[x,g]=(0,a.useState)(!0),f=(0,a.useMemo)(()=>p(t,l),[t,l]),j=(0,a.useMemo)(()=>h(f),[f]);(0,a.useMemo)(()=>{0===u.size&&j.length>0&&m(new Set(j.map(e=>e.prefix)))},[j]);let v=e=>{m(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};return 0===t.length?(0,s.jsxs)("div",{className:"agent-list-empty",children:[(0,s.jsx)(S,{}),(0,s.jsx)("p",{children:"No agents connected"})]}):0===f.length?(0,s.jsxs)("div",{className:"agent-list-empty",children:[(0,s.jsx)(A,{}),(0,s.jsxs)("p",{children:['No agents match "',l,'"']})]}):(0,s.jsxs)("div",{className:"agent-list",children:[j.length>1&&(0,s.jsxs)("div",{className:"agent-list-header",children:[(0,s.jsxs)("span",{className:"agent-count",children:[f.length," agents"]}),(0,s.jsx)("button",{className:"toggle-all-btn",onClick:()=>{x?m(new Set):m(new Set(j.map(e=>e.prefix))),g(!x)},children:x?"Collapse all":"Expand all"})]}),j.map(e=>(0,s.jsx)(b,{group:e,isExpanded:u.has(e.prefix),selectedAgent:n,compact:o,showStats:d,onToggle:()=>v(e.prefix),onAgentSelect:r,onAgentMessage:i,onReleaseClick:c},e.prefix))]})}function b(e){let{group:t,isExpanded:n,selectedAgent:a,compact:l,showStats:r,onToggle:c,onAgentSelect:o,onAgentMessage:d,onReleaseClick:u}=e,h=r?f(t.agents):null;return(0,s.jsxs)("div",{className:"agent-group",children:[(0,s.jsxs)("button",{className:"agent-group-header",onClick:c,style:{"--group-color":t.color.primary,"--group-light":t.color.light},children:[(0,s.jsx)("div",{className:"group-color-bar"}),(0,s.jsx)(C,{expanded:n}),(0,s.jsx)("span",{className:"group-name",children:t.displayName}),(0,s.jsxs)("span",{className:"group-count",children:["(",t.agents.length,")"]}),r&&h&&(0,s.jsxs)("div",{className:"group-stats",children:[h.online>0&&(0,s.jsxs)("span",{className:"stat online",children:[(0,s.jsx)("span",{className:"stat-dot",style:{backgroundColor:i.online}}),h.online]}),h.needsAttention>0&&(0,s.jsxs)("span",{className:"stat attention",children:[(0,s.jsx)("span",{className:"stat-dot",style:{backgroundColor:i.attention}}),h.needsAttention]})]})]}),n&&(0,s.jsx)("div",{className:"agent-group-content",children:t.agents.map(e=>(0,s.jsx)(y,{agent:e,isSelected:e.name===a,compact:l,displayNameOverride:m(e.name),onClick:o,onMessageClick:d,onReleaseClick:u},e.name))})]})}function C(e){let{expanded:t}=e;return(0,s.jsx)("svg",{className:"chevron-icon ".concat(t?"expanded":""),width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("polyline",{points:"9 18 15 12 9 6"})})}function S(){return(0,s.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1",children:[(0,s.jsx)("circle",{cx:"12",cy:"8",r:"5"}),(0,s.jsx)("path",{d:"M20 21a8 8 0 1 0-16 0"})]})}function A(){return(0,s.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1",children:[(0,s.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,s.jsx)("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})}function M(e){return e.split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ")}function E(e){let{projects:t,localAgents:n=[],currentProject:l,selectedAgent:r,searchQuery:i="",onProjectSelect:c,onAgentSelect:o,onReleaseClick:d,compact:u=!1}=e,[h,m]=(0,a.useState)(()=>new Set(t.map(e=>e.id))),x=(0,a.useMemo)(()=>{let e=i.toLowerCase().trim();if(!e)return{projects:t,localAgents:n};let s=n.filter(t=>{var n;return t.name.toLowerCase().includes(e)||(null===(n=t.currentTask)||void 0===n?void 0:n.toLowerCase().includes(e))});return{projects:t.map(t=>{var n;let s=(null===(n=t.name)||void 0===n?void 0:n.toLowerCase().includes(e))||t.path.toLowerCase().includes(e),a=t.agents.filter(t=>{var n;return t.name.toLowerCase().includes(e)||(null===(n=t.currentTask)||void 0===n?void 0:n.toLowerCase().includes(e))});return s||a.length>0?{...t,agents:s?t.agents:a}:null}).filter(Boolean),localAgents:s}},[t,n,i]),p=e=>{m(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},g=x.localAgents.length+x.projects.reduce((e,t)=>e+t.agents.length,0);return 0===g&&0===t.length&&0===n.length?(0,s.jsxs)("div",{className:"project-list-empty",children:[(0,s.jsx)(R,{}),(0,s.jsx)("p",{children:"No projects or agents"})]}):0===g&&i?(0,s.jsxs)("div",{className:"project-list-empty",children:[(0,s.jsx)(T,{}),(0,s.jsxs)("p",{children:['No results for "',i,'"']})]}):(0,s.jsxs)("div",{className:"project-list",children:[x.localAgents.length>0&&(0,s.jsx)(D,{project:{id:"__local__",path:"",name:"Local",agents:x.localAgents},isExpanded:h.has("__local__"),isCurrentProject:!0,selectedAgent:r,compact:u,onToggle:()=>p("__local__"),onAgentSelect:e=>null==o?void 0:o(e),onReleaseClick:d}),x.projects.map(e=>(0,s.jsx)(D,{project:e,isExpanded:h.has(e.id),isCurrentProject:e.id===l,selectedAgent:r,compact:u,onToggle:()=>p(e.id),onProjectSelect:()=>null==c?void 0:c(e),onAgentSelect:t=>null==o?void 0:o(t,e),onReleaseClick:d},e.id))]})}function D(e){var t;let{project:n,isExpanded:l,isCurrentProject:r,selectedAgent:c,compact:o,onToggle:u,onProjectSelect:h,onAgentSelect:m,onReleaseClick:x}=e,[p,g]=(0,a.useState)(new Set),f=(0,a.useMemo)(()=>{let e=0,t=0;for(let s of n.agents)"online"===s.status&&e++,s.needsAttention&&t++;return{online:e,needsAttention:t,total:n.agents.length}},[n.agents]),{teams:j,ungroupedAgents:v}=(0,a.useMemo)(()=>{let e=new Map,t=[];for(let s of n.agents)if(s.team){let t=e.get(s.team)||[];t.push(s),e.set(s.team,t)}else t.push(s);return{teams:Array.from(e.entries()).map(e=>{let[t,n]=e;return{name:t,agents:n}}).sort((e,t)=>e.name.localeCompare(t.name)),ungroupedAgents:t}},[n.agents]),k=e=>{g(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};(0,a.useEffect)(()=>{l&&0===p.size&&j.length>0&&g(new Set(j.map(e=>e.name)))},[l,j,p]);let w=d(n.name||n.id),N=n.name||n.path.split("/").pop()||n.id;return(0,s.jsxs)("div",{className:"project-section ".concat(r?"current":""),children:[(0,s.jsxs)("button",{className:"project-header",onClick:u,onDoubleClick:h,style:{"--project-color":w.primary,"--project-light":w.light},children:[(0,s.jsx)("div",{className:"project-color-bar"}),(0,s.jsx)(B,{expanded:l}),(0,s.jsx)(W,{}),(0,s.jsx)("span",{className:"project-name",children:N}),(0,s.jsxs)("span",{className:"project-count",children:["(",f.total,")"]}),(0,s.jsxs)("div",{className:"project-stats",children:[f.online>0&&(0,s.jsxs)("span",{className:"stat online",children:[(0,s.jsx)("span",{className:"stat-dot",style:{backgroundColor:i.online}}),f.online]}),f.needsAttention>0&&(0,s.jsxs)("span",{className:"stat attention",children:[(0,s.jsx)("span",{className:"stat-dot",style:{backgroundColor:i.attention}}),f.needsAttention]})]}),(null===(t=n.lead)||void 0===t?void 0:t.connected)&&(0,s.jsx)("span",{className:"lead-indicator",title:"Lead: ".concat(n.lead.name),children:"★"})]}),l&&(0,s.jsxs)("div",{className:"project-agents",children:[j.map(e=>(0,s.jsxs)("div",{className:"team-group",children:[(0,s.jsxs)("button",{className:"team-header",onClick:()=>k(e.name),children:[(0,s.jsx)(B,{expanded:p.has(e.name)}),(0,s.jsx)(L,{}),(0,s.jsx)("span",{className:"team-name",children:e.name}),(0,s.jsxs)("span",{className:"team-count",children:["(",e.agents.length,")"]})]}),p.has(e.name)&&(0,s.jsx)("div",{className:"team-agents",children:e.agents.map(t=>(0,s.jsx)(y,{agent:t,isSelected:t.name===c,compact:o,displayNameOverride:function(e,t){let n=e.toLowerCase(),s=t.toLowerCase().replace(/-?team$/i,"");if(s&&n.startsWith(s+"-")||s&&n.startsWith(s+"_"))return M(e.substring(s.length+1));let a=e.split("-");return a.length>1?M(a[a.length-1]):M(e)}(t.name,e.name),onClick:m,onReleaseClick:x},t.name))})]},e.name)),v.map(e=>(0,s.jsx)(y,{agent:e,isSelected:e.name===c,compact:o,onClick:m,onReleaseClick:x},e.name))]})]})}function B(e){let{expanded:t}=e;return(0,s.jsx)("svg",{className:"chevron-icon ".concat(t?"expanded":""),width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("polyline",{points:"9 18 15 12 9 6"})})}function W(){return(0,s.jsx)("svg",{className:"folder-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})})}function L(){return(0,s.jsxs)("svg",{className:"team-icon",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("path",{d:"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"}),(0,s.jsx)("circle",{cx:"9",cy:"7",r:"4"}),(0,s.jsx)("path",{d:"M23 21v-2a4 4 0 0 0-3-3.87"}),(0,s.jsx)("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})]})}function R(){return(0,s.jsx)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1",children:(0,s.jsx)("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})})}function T(){return(0,s.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1",children:[(0,s.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,s.jsx)("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})}function P(e){let{agents:t,projects:n=[],currentProject:l,selectedAgent:r,viewMode:i,isFleetAvailable:c,isConnected:o,isOpen:d=!1,onAgentSelect:u,onProjectSelect:h,onViewModeChange:m,onSpawnClick:x,onReleaseClick:p,onClose:g}=e,[f,j]=(0,a.useState)(""),v=n.length>0;return(0,s.jsxs)("aside",{className:"sidebar ".concat(d?"open":""),children:[(0,s.jsxs)("div",{className:"sidebar-header",children:[(0,s.jsxs)("div",{className:"sidebar-title",children:[(0,s.jsx)("h1",{children:"Agent Relay"}),(0,s.jsx)(O,{isConnected:o})]}),c&&(0,s.jsxs)("div",{className:"view-mode-toggle",children:[(0,s.jsx)("button",{className:"toggle-btn ".concat("local"===i?"active":""),onClick:()=>null==m?void 0:m("local"),children:"Local"}),(0,s.jsx)("button",{className:"toggle-btn ".concat("fleet"===i?"active":""),onClick:()=>null==m?void 0:m("fleet"),children:"Fleet"})]})]}),(0,s.jsxs)("div",{className:"sidebar-search",children:[(0,s.jsx)(F,{}),(0,s.jsx)("input",{type:"text",placeholder:"Search agents...",value:f,onChange:e=>j(e.target.value)}),f&&(0,s.jsx)("button",{className:"clear-btn",onClick:()=>j(""),children:(0,s.jsx)(V,{})})]}),(0,s.jsx)("div",{className:"sidebar-content",children:v?(0,s.jsx)(E,{projects:n,localAgents:t,currentProject:l,selectedAgent:r,searchQuery:f,onProjectSelect:h,onAgentSelect:u,onReleaseClick:p,compact:!0}):(0,s.jsx)(N,{agents:t,selectedAgent:r,searchQuery:f,onAgentSelect:e=>null==u?void 0:u(e),onReleaseClick:p,compact:!0,showGroupStats:!0})}),(0,s.jsx)("div",{className:"sidebar-footer",children:(0,s.jsxs)("button",{className:"spawn-btn",onClick:x,children:[(0,s.jsx)(_,{}),"Spawn Agent"]})})]})}function O(e){let{isConnected:t}=e;return(0,s.jsx)("div",{className:"connection-indicator ".concat(t?"connected":"disconnected"),title:t?"Connected":"Disconnected"})}function F(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,s.jsx)("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})}function V(){return(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,s.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function _(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),(0,s.jsx)("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}function z(e){let{currentChannel:t,selectedAgent:n,onCommandPaletteOpen:a,onSettingsClick:l,onMenuClick:r}=e,i="general"===t,c=n?d(n.name):null;return(0,s.jsxs)("header",{className:"header",children:[(0,s.jsx)("button",{className:"mobile-menu-btn",onClick:r,"aria-label":"Open menu",children:(0,s.jsx)(U,{})}),(0,s.jsx)("div",{className:"header-left",children:i?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"channel-prefix",children:"#"}),(0,s.jsx)("span",{className:"channel-name",children:"general"}),(0,s.jsx)("span",{className:"channel-topic",children:"All agent communications"})]}):n?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"agent-avatar-small",style:{backgroundColor:null==c?void 0:c.primary},children:(0,s.jsx)("span",{style:{color:null==c?void 0:c.text},children:u(n.name)})}),(0,s.jsxs)("div",{className:"channel-info",children:[(0,s.jsx)("span",{className:"channel-name",children:n.name}),(0,s.jsx)("span",{className:"channel-breadcrumb",children:x(n.name)})]}),n.status&&(0,s.jsx)("span",{className:"agent-status-badge",children:n.status})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"channel-prefix",children:"@"}),(0,s.jsx)("span",{className:"channel-name",children:t})]})}),(0,s.jsxs)("div",{className:"header-right",children:[(0,s.jsxs)("button",{className:"header-btn command-palette-btn",onClick:a,title:"Command Palette (⌘K)",children:[(0,s.jsx)(I,{}),(0,s.jsx)("span",{children:"Search"}),(0,s.jsx)("kbd",{children:"⌘K"})]}),(0,s.jsx)("a",{href:"/metrics",className:"header-btn icon-btn",title:"Metrics",children:(0,s.jsx)(H,{})}),(0,s.jsx)("button",{className:"header-btn icon-btn",onClick:l,title:"Settings",children:(0,s.jsx)(K,{})})]})]})}function I(){return(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,s.jsx)("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})}function H(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,s.jsx)("path",{d:"M3 3v18h18"}),(0,s.jsx)("path",{d:"M18 17V9"}),(0,s.jsx)("path",{d:"M13 17V5"}),(0,s.jsx)("path",{d:"M8 17v-3"})]})}function K(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"3"}),(0,s.jsx)("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"})]})}function U(){return(0,s.jsxs)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,s.jsx)("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),(0,s.jsx)("line",{x1:"3",y1:"6",x2:"21",y2:"6"}),(0,s.jsx)("line",{x1:"3",y1:"18",x2:"21",y2:"18"})]})}function q(e){let{messages:t,currentChannel:n,onThreadClick:l,highlightedMessageId:r}=e,i=(0,a.useRef)(null),c=(0,a.useRef)(null);(0,a.useEffect)(()=>{var e;null===(e=c.current)||void 0===e||e.scrollIntoView({behavior:"smooth"})},[t.length]);let o=t.filter(e=>"general"===n?"*"===e.to||e.isBroadcast:e.from===n||e.to===n);return 0===o.length?(0,s.jsxs)("div",{className:"message-list-empty",children:[(0,s.jsx)(G,{}),(0,s.jsx)("h3",{children:"No messages yet"}),(0,s.jsx)("p",{children:"general"===n?"Broadcast messages will appear here":"Messages with ".concat(n," will appear here")})]}):(0,s.jsxs)("div",{className:"message-list",ref:i,children:[o.map(e=>(0,s.jsx)(J,{message:e,isHighlighted:e.id===r,onThreadClick:l},e.id)),(0,s.jsx)("div",{ref:c})]})}function J(e){let{message:t,isHighlighted:n,onThreadClick:l}=e,r=d(t.from),i=function(e){let t=new Date(e),n=new Date;if(t.toDateString()===n.toDateString())return t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});let s=new Date(n);return(s.setDate(s.getDate()-1),t.toDateString()===s.toDateString())?"Yesterday ".concat(t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})):t.toLocaleDateString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}(t.timestamp);return(0,s.jsxs)("div",{className:"message-item ".concat(n?"highlighted":""),children:[(0,s.jsx)("div",{className:"message-avatar",style:{backgroundColor:r.primary},children:(0,s.jsx)("span",{style:{color:r.text},children:u(t.from)})}),(0,s.jsxs)("div",{className:"message-content",children:[(0,s.jsxs)("div",{className:"message-header",children:[(0,s.jsx)("span",{className:"message-sender",children:t.from}),"*"!==t.to&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"message-arrow",children:"→"}),(0,s.jsx)("span",{className:"message-recipient",children:t.to})]}),(0,s.jsx)("span",{className:"message-time",children:i}),"*"===t.to&&(0,s.jsx)("span",{className:"message-badge broadcast",children:"broadcast"})]}),(0,s.jsx)("div",{className:"message-body",children:t.content.replace(/\\n/g,"\n").replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n").map((e,t)=>(0,s.jsxs)(a.Fragment,{children:[t>0&&(0,s.jsx)("br",{}),function(e){let t=/(https?:\/\/[^\s]+)/g;return e.split(t).map((e,n)=>t.test(e)?(0,s.jsx)("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:"message-link",children:e},n):e)}(e)]},t))}),t.replyCount&&t.replyCount>0&&(0,s.jsxs)("button",{className:"message-thread-btn",onClick:()=>null==l?void 0:l(t.id),children:[(0,s.jsx)(Q,{}),(0,s.jsxs)("span",{children:[t.replyCount," ",1===t.replyCount?"reply":"replies"]})]})]})]})}function G(){return(0,s.jsx)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:(0,s.jsx)("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})})}function Q(){return(0,s.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})})}function Z(e){let{isOpen:t,onClose:n,agents:l,projects:r=[],currentProject:i,onAgentSelect:c,onProjectSelect:o,onSpawnClick:d,onSettingsClick:u,onGeneralClick:h,customCommands:m=[]}=e,[x,p]=(0,a.useState)(""),[g,f]=(0,a.useState)(0),j=(0,a.useRef)(null),v=(0,a.useRef)(null),y=(0,a.useMemo)(()=>[...r.map(e=>{let t=e.name||e.path.split("/").pop()||e.id,a=e.id===i;return{id:"project-".concat(e.id),label:t,description:a?"Current project • ".concat(e.agents.length," agents"):"".concat(e.agents.length," agents"),category:"projects",icon:(0,s.jsx)(es,{}),action:()=>{null==o||o(e),n()}}}),...l.map(e=>({id:"agent-".concat(e.name),label:e.name,description:e.currentTask||e.status,category:"agents",icon:(0,s.jsx)($,{name:e.name}),action:()=>{c(e),n()}})),{id:"spawn-agent",label:"Spawn Agent",description:"Launch a new agent instance",category:"actions",icon:(0,s.jsx)(X,{}),shortcut:"⌘⇧S",action:()=>{d(),n()}},{id:"broadcast",label:"Broadcast Message",description:"Send message to all agents",category:"actions",icon:(0,s.jsx)(ee,{}),action:()=>{n()}},{id:"nav-general",label:"Go to #general",description:"View all broadcast messages",category:"navigation",icon:(0,s.jsx)(et,{}),action:()=>{null==h||h(),n()}},...u?[{id:"settings",label:"Settings",description:"Configure dashboard preferences",category:"settings",icon:(0,s.jsx)(en,{}),shortcut:"⌘,",action:()=>{u(),n()}}]:[],...m],[l,r,i,c,o,d,u,h,n,m]),k=(0,a.useMemo)(()=>{if(!x.trim())return y;let e=x.toLowerCase();return y.filter(t=>{var n;return t.label.toLowerCase().includes(e)||(null===(n=t.description)||void 0===n?void 0:n.toLowerCase().includes(e))||t.category.toLowerCase().includes(e)})},[y,x]),w=(0,a.useMemo)(()=>{let e={};for(let t of k)e[t.category]||(e[t.category]=[]),e[t.category].push(t);return e},[k]),N=(0,a.useMemo)(()=>["projects","agents","actions","navigation","settings"].flatMap(e=>w[e]||[]),[w]);(0,a.useEffect)(()=>{f(0)},[x]),(0,a.useEffect)(()=>{t&&(p(""),f(0),setTimeout(()=>{var e;return null===(e=j.current)||void 0===e?void 0:e.focus()},0))},[t]),(0,a.useEffect)(()=>{if(v.current&&N.length>0){let e=v.current.querySelector('[data-index="'.concat(g,'"]'));null==e||e.scrollIntoView({block:"nearest"})}},[g,N.length]);let b=(0,a.useCallback)(e=>{switch(e.key){case"ArrowDown":e.preventDefault(),f(e=>Math.min(e+1,N.length-1));break;case"ArrowUp":e.preventDefault(),f(e=>Math.max(e-1,0));break;case"Enter":e.preventDefault(),N[g]&&N[g].action();break;case"Escape":e.preventDefault(),n()}},[N,g,n]);if(!t)return null;let C={projects:"Projects",agents:"Agents",actions:"Actions",navigation:"Navigation",settings:"Settings"},S=0;return(0,s.jsx)("div",{className:"command-palette-overlay",onClick:n,children:(0,s.jsxs)("div",{className:"command-palette",onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("div",{className:"command-palette-input-wrapper",children:[(0,s.jsx)(Y,{}),(0,s.jsx)("input",{ref:j,type:"text",className:"command-palette-input",placeholder:"Search commands, agents...",value:x,onChange:e=>p(e.target.value),onKeyDown:b}),(0,s.jsx)("kbd",{className:"command-palette-kbd",children:"ESC"})]}),(0,s.jsx)("div",{className:"command-palette-list",ref:v,children:0===N.length?(0,s.jsxs)("div",{className:"command-palette-empty",children:['No results for "',x,'"']}):Object.entries(w).map(e=>{let[t,n]=e;return n.length?(0,s.jsxs)("div",{className:"command-palette-group",children:[(0,s.jsx)("div",{className:"command-palette-group-label",children:C[t]||t}),n.map(e=>{let t=S++;return(0,s.jsxs)("button",{"data-index":t,className:"command-palette-item ".concat(t===g?"selected":""),onClick:e.action,onMouseEnter:()=>f(t),children:[(0,s.jsx)("span",{className:"command-palette-item-icon",children:e.icon}),(0,s.jsxs)("span",{className:"command-palette-item-content",children:[(0,s.jsx)("span",{className:"command-palette-item-label",children:e.label}),e.description&&(0,s.jsx)("span",{className:"command-palette-item-desc",children:e.description})]}),e.shortcut&&(0,s.jsx)("kbd",{className:"command-palette-item-shortcut",children:e.shortcut})]},e.id)})]},t):null})})]})})}function $(e){let{name:t}=e,n=d(t);return(0,s.jsx)("div",{className:"command-palette-agent-icon",style:{backgroundColor:n.primary,color:n.text},children:u(t)})}function Y(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,s.jsx)("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})}function X(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),(0,s.jsx)("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}function ee(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"2"}),(0,s.jsx)("path",{d:"M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"})]})}function et(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"4",y1:"9",x2:"20",y2:"9"}),(0,s.jsx)("line",{x1:"4",y1:"15",x2:"20",y2:"15"}),(0,s.jsx)("line",{x1:"10",y1:"3",x2:"8",y2:"21"}),(0,s.jsx)("line",{x1:"16",y1:"3",x2:"14",y2:"21"})]})}function en(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"3"}),(0,s.jsx)("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"})]})}function es(){return(0,s.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})})}let ea=[{id:"claude",name:"Claude",command:"claude",description:"Claude Code CLI agent",icon:"\uD83E\uDD16"},{id:"codex",name:"Codex",command:"codex",description:"OpenAI Codex agent",icon:"⚡"},{id:"custom",name:"Custom",command:"",description:"Custom command",icon:"\uD83D\uDD27"}],el=["frontend","backend","lead","test","docs","review","deploy","data"];function er(e){let{isOpen:t,onClose:n,onSpawn:l,existingAgents:r,isSpawning:i=!1,error:c}=e,[o,h]=(0,a.useState)(ea[0]),[m,x]=(0,a.useState)(""),[p,g]=(0,a.useState)(""),[f,j]=(0,a.useState)(""),[v,y]=(0,a.useState)(""),[k,w]=(0,a.useState)(null),N=(0,a.useRef)(null),b=(0,a.useCallback)(()=>{let e="claude"===o.id?"claude":o.id,t=1;for(;r.includes("".concat(e,"-").concat(t));)t++;return"".concat(e,"-").concat(t)},[o,r]);(0,a.useEffect)(()=>{t&&(h(ea[0]),x(""),g(""),j(""),y(""),w(null),setTimeout(()=>{var e;return null===(e=N.current)||void 0===e?void 0:e.focus()},100))},[t]);let C=(0,a.useCallback)(e=>e.trim()?/^[a-zA-Z][a-zA-Z0-9-]*$/.test(e)?r.includes(e)?"An agent with this name already exists":null:"Name must start with a letter and contain only letters, numbers, and hyphens":"Name is required",[r]),S=async e=>{e.preventDefault();let t=m.trim()||b(),s=C(t);if(s){w(s);return}let a="custom"===o.id?p:o.command;if(!a.trim()){w("Command is required");return}w(null),await l({name:t,command:a.trim(),cwd:f.trim()||void 0,team:v.trim()||void 0})&&n()};if(!t)return null;let A=m?d(m):d(b()),M=c||k;return(0,s.jsx)("div",{className:"spawn-modal-overlay",onClick:n,children:(0,s.jsxs)("div",{className:"spawn-modal",onClick:e=>e.stopPropagation(),onKeyDown:e=>{"Escape"===e.key&&(e.preventDefault(),n())},children:[(0,s.jsxs)("div",{className:"spawn-modal-header",children:[(0,s.jsx)("h2",{children:"Spawn New Agent"}),(0,s.jsx)("button",{className:"spawn-modal-close",onClick:n,"aria-label":"Close",children:(0,s.jsx)(ei,{})})]}),(0,s.jsxs)("form",{onSubmit:S,children:[(0,s.jsxs)("div",{className:"spawn-modal-section",children:[(0,s.jsx)("label",{className:"spawn-modal-label",children:"Agent Type"}),(0,s.jsx)("div",{className:"spawn-modal-templates",children:ea.map(e=>(0,s.jsxs)("button",{type:"button",className:"spawn-modal-template ".concat(o.id===e.id?"selected":""),onClick:()=>h(e),children:[(0,s.jsx)("span",{className:"spawn-modal-template-icon",children:e.icon}),(0,s.jsx)("span",{className:"spawn-modal-template-name",children:e.name}),(0,s.jsx)("span",{className:"spawn-modal-template-desc",children:e.description})]},e.id))})]}),(0,s.jsxs)("div",{className:"spawn-modal-section",children:[(0,s.jsx)("label",{className:"spawn-modal-label",htmlFor:"agent-name",children:"Agent Name"}),(0,s.jsxs)("div",{className:"spawn-modal-name-input",children:[(0,s.jsx)("div",{className:"spawn-modal-name-preview",style:{backgroundColor:A.primary,color:A.text},children:u(m||b())}),(0,s.jsx)("input",{ref:N,id:"agent-name",type:"text",className:"spawn-modal-input",placeholder:b(),value:m,onChange:e=>{x(e.target.value),w(null)},disabled:i})]}),(0,s.jsx)("div",{className:"spawn-modal-name-suggestions",children:el.slice(0,4).map(e=>(0,s.jsxs)("button",{type:"button",className:"spawn-modal-suggestion",onClick:()=>x("".concat(e,"-1")),children:[e,"-"]},e))})]}),"custom"===o.id&&(0,s.jsxs)("div",{className:"spawn-modal-section",children:[(0,s.jsx)("label",{className:"spawn-modal-label",htmlFor:"agent-command",children:"Command"}),(0,s.jsx)("input",{id:"agent-command",type:"text",className:"spawn-modal-input",placeholder:"e.g., python agent.py",value:p,onChange:e=>g(e.target.value),disabled:i})]}),(0,s.jsxs)("div",{className:"spawn-modal-section",children:[(0,s.jsxs)("label",{className:"spawn-modal-label",htmlFor:"agent-cwd",children:["Working Directory ",(0,s.jsx)("span",{className:"spawn-modal-optional",children:"(optional)"})]}),(0,s.jsx)("input",{id:"agent-cwd",type:"text",className:"spawn-modal-input",placeholder:"Current directory",value:f,onChange:e=>j(e.target.value),disabled:i})]}),(0,s.jsxs)("div",{className:"spawn-modal-section",children:[(0,s.jsxs)("label",{className:"spawn-modal-label",htmlFor:"agent-team",children:["Team ",(0,s.jsx)("span",{className:"spawn-modal-optional",children:"(optional)"})]}),(0,s.jsx)("input",{id:"agent-team",type:"text",className:"spawn-modal-input",placeholder:"e.g., frontend, backend, infra",value:v,onChange:e=>y(e.target.value),disabled:i})]}),M&&(0,s.jsxs)("div",{className:"spawn-modal-error",children:[(0,s.jsx)(ec,{}),(0,s.jsx)("span",{children:M})]}),(0,s.jsxs)("div",{className:"spawn-modal-actions",children:[(0,s.jsx)("button",{type:"button",className:"spawn-modal-btn spawn-modal-btn-secondary",onClick:n,disabled:i,children:"Cancel"}),(0,s.jsx)("button",{type:"submit",className:"spawn-modal-btn spawn-modal-btn-primary",disabled:i,children:i?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(ed,{}),"Spawning..."]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(eo,{}),"Spawn Agent"]})})]})]})]})})}function ei(){return(0,s.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,s.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function ec(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"10"}),(0,s.jsx)("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),(0,s.jsx)("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]})}function eo(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"}),(0,s.jsx)("path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"}),(0,s.jsx)("path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"}),(0,s.jsx)("path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"})]})}function ed(){return(0,s.jsx)("svg",{className:"spawn-modal-spinner",width:"16",height:"16",viewBox:"0 0 24 24",children:(0,s.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"2",fill:"none",strokeDasharray:"32",strokeLinecap:"round"})})}let eu={theme:"system",notifications:{enabled:!0,sound:!0,desktop:!1,mentionsOnly:!1},display:{compactMode:!1,showTimestamps:!0,showAvatars:!0,animationsEnabled:!0},connection:{autoReconnect:!0,reconnectDelay:3e3,keepAliveInterval:3e4}};function eh(e){let{isOpen:t,onClose:n,settings:l,onSettingsChange:r,onResetSettings:i}=e,[c,o]=(0,a.useState)("appearance"),d=(0,a.useCallback)((e,t,n)=>{let s=l[e];r({...l,[e]:{...s,[t]:n}})},[l,r]),u=(0,a.useCallback)(e=>{r({...l,theme:e})},[l,r]);return t?(0,s.jsx)("div",{className:"settings-overlay",onClick:n,children:(0,s.jsxs)("div",{className:"settings-panel",onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("div",{className:"settings-header",children:[(0,s.jsx)("h2",{children:"Settings"}),(0,s.jsx)("button",{className:"settings-close",onClick:n,children:(0,s.jsx)(ex,{})})]}),(0,s.jsxs)("div",{className:"settings-tabs",children:[(0,s.jsxs)("button",{className:"settings-tab ".concat("appearance"===c?"active":""),onClick:()=>o("appearance"),children:[(0,s.jsx)(ep,{}),"Appearance"]}),(0,s.jsxs)("button",{className:"settings-tab ".concat("notifications"===c?"active":""),onClick:()=>o("notifications"),children:[(0,s.jsx)(eg,{}),"Notifications"]}),(0,s.jsxs)("button",{className:"settings-tab ".concat("connection"===c?"active":""),onClick:()=>o("connection"),children:[(0,s.jsx)(ef,{}),"Connection"]})]}),(0,s.jsxs)("div",{className:"settings-content",children:["appearance"===c&&(0,s.jsxs)("div",{className:"settings-section",children:[(0,s.jsxs)("div",{className:"settings-group",children:[(0,s.jsx)("label",{className:"settings-label",children:"Theme"}),(0,s.jsx)("div",{className:"settings-theme-options",children:["light","dark","system"].map(e=>(0,s.jsxs)("button",{className:"settings-theme-btn ".concat(l.theme===e?"active":""),onClick:()=>u(e),children:["light"===e&&(0,s.jsx)(ej,{}),"dark"===e&&(0,s.jsx)(ev,{}),"system"===e&&(0,s.jsx)(ey,{}),(0,s.jsx)("span",{children:e.charAt(0).toUpperCase()+e.slice(1)})]},e))})]}),(0,s.jsxs)("div",{className:"settings-group",children:[(0,s.jsx)("label",{className:"settings-label",children:"Display Options"}),(0,s.jsx)(em,{label:"Compact mode",description:"Show more content in less space",checked:l.display.compactMode,onChange:e=>d("display","compactMode",e)}),(0,s.jsx)(em,{label:"Show timestamps",description:"Display time for each message",checked:l.display.showTimestamps,onChange:e=>d("display","showTimestamps",e)}),(0,s.jsx)(em,{label:"Show avatars",description:"Display agent avatars in messages",checked:l.display.showAvatars,onChange:e=>d("display","showAvatars",e)}),(0,s.jsx)(em,{label:"Enable animations",description:"Smooth transitions and effects",checked:l.display.animationsEnabled,onChange:e=>d("display","animationsEnabled",e)})]})]}),"notifications"===c&&(0,s.jsx)("div",{className:"settings-section",children:(0,s.jsxs)("div",{className:"settings-group",children:[(0,s.jsx)("label",{className:"settings-label",children:"Notification Preferences"}),(0,s.jsx)(em,{label:"Enable notifications",description:"Receive alerts for new messages",checked:l.notifications.enabled,onChange:e=>d("notifications","enabled",e)}),(0,s.jsx)(em,{label:"Sound alerts",description:"Play sound for new messages",checked:l.notifications.sound,onChange:e=>d("notifications","sound",e),disabled:!l.notifications.enabled}),(0,s.jsx)(em,{label:"Desktop notifications",description:"Show system notifications",checked:l.notifications.desktop,onChange:e=>d("notifications","desktop",e),disabled:!l.notifications.enabled}),(0,s.jsx)(em,{label:"Mentions only",description:"Only notify when mentioned",checked:l.notifications.mentionsOnly,onChange:e=>d("notifications","mentionsOnly",e),disabled:!l.notifications.enabled})]})}),"connection"===c&&(0,s.jsx)("div",{className:"settings-section",children:(0,s.jsxs)("div",{className:"settings-group",children:[(0,s.jsx)("label",{className:"settings-label",children:"Connection Settings"}),(0,s.jsx)(em,{label:"Auto-reconnect",description:"Automatically reconnect on disconnect",checked:l.connection.autoReconnect,onChange:e=>d("connection","autoReconnect",e)}),(0,s.jsxs)("div",{className:"settings-input-group",children:[(0,s.jsx)("label",{children:"Reconnect delay (ms)"}),(0,s.jsx)("input",{type:"number",className:"settings-input",value:l.connection.reconnectDelay,onChange:e=>d("connection","reconnectDelay",parseInt(e.target.value)||3e3),min:1e3,max:3e4,step:1e3,disabled:!l.connection.autoReconnect})]}),(0,s.jsxs)("div",{className:"settings-input-group",children:[(0,s.jsx)("label",{children:"Keep-alive interval (ms)"}),(0,s.jsx)("input",{type:"number",className:"settings-input",value:l.connection.keepAliveInterval,onChange:e=>d("connection","keepAliveInterval",parseInt(e.target.value)||3e4),min:5e3,max:12e4,step:5e3})]})]})})]}),(0,s.jsxs)("div",{className:"settings-footer",children:[i&&(0,s.jsx)("button",{className:"settings-reset-btn",onClick:i,children:"Reset to defaults"}),(0,s.jsx)("button",{className:"settings-done-btn",onClick:n,children:"Done"})]})]})}):null}function em(e){let{label:t,description:n,checked:a,onChange:l,disabled:r}=e;return(0,s.jsxs)("div",{className:"settings-toggle-option ".concat(r?"disabled":""),children:[(0,s.jsxs)("div",{className:"settings-toggle-info",children:[(0,s.jsx)("span",{className:"settings-toggle-label",children:t}),(0,s.jsx)("span",{className:"settings-toggle-desc",children:n})]}),(0,s.jsx)("button",{className:"settings-toggle ".concat(a?"on":""),onClick:()=>!r&&l(!a),disabled:r,role:"switch","aria-checked":a,children:(0,s.jsx)("span",{className:"settings-toggle-thumb"})})]})}function ex(){return(0,s.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,s.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function ep(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"13.5",cy:"6.5",r:".5"}),(0,s.jsx)("circle",{cx:"17.5",cy:"10.5",r:".5"}),(0,s.jsx)("circle",{cx:"8.5",cy:"7.5",r:".5"}),(0,s.jsx)("circle",{cx:"6.5",cy:"12.5",r:".5"}),(0,s.jsx)("path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.555C21.965 6.012 17.461 2 12 2z"})]})}function eg(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("path",{d:"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"}),(0,s.jsx)("path",{d:"M13.73 21a2 2 0 0 1-3.46 0"})]})}function ef(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("path",{d:"M5 12.55a11 11 0 0 1 14.08 0"}),(0,s.jsx)("path",{d:"M1.42 9a16 16 0 0 1 21.16 0"}),(0,s.jsx)("path",{d:"M8.53 16.11a6 6 0 0 1 6.95 0"}),(0,s.jsx)("line",{x1:"12",y1:"20",x2:"12.01",y2:"20"})]})}function ej(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"5"}),(0,s.jsx)("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),(0,s.jsx)("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),(0,s.jsx)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),(0,s.jsx)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),(0,s.jsx)("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),(0,s.jsx)("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),(0,s.jsx)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),(0,s.jsx)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"})]})}function ev(){return(0,s.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})})}function ey(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),(0,s.jsx)("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),(0,s.jsx)("line",{x1:"12",y1:"17",x2:"12",y2:"21"})]})}function ek(e,t){let n=e.match(/^@(\S*)/);return n&&t<=n[0].length?n[1]:null}function ew(e,t){let n=e.match(/^@\S*/);return n?"@".concat(t," ")+e.substring(n[0].length):e}function eN(e){let{agents:t,inputValue:n,cursorPosition:l,onSelect:r,onClose:i,isVisible:c}=e,[o,h]=(0,a.useState)(0),m=(0,a.useRef)(null),x=(0,a.useMemo)(()=>ek(n,l),[n,l]),p=(0,a.useMemo)(()=>{if(null===x)return[];let e=x.toLowerCase(),n=[];return("*".includes(e)||"everyone".includes(e)||"all".includes(e)||"broadcast".includes(e)||""===e)&&n.push({name:"*",displayName:"@everyone",description:"Broadcast to all agents",isBroadcast:!0}),t.filter(t=>t.name.toLowerCase().includes(e)).forEach(e=>{n.push({name:e.name,displayName:"@".concat(e.name),description:e.status||"Agent"})}),n},[x,t]);(0,a.useEffect)(()=>{h(0)},[p.length]),(0,a.useEffect)(()=>{if(!m.current)return;let e=m.current.querySelector(".mention-item.selected");e&&e.scrollIntoView({block:"nearest"})},[o]);let g=(0,a.useCallback)(e=>{if(c&&0!==p.length)switch(e.key){case"ArrowDown":e.preventDefault(),h(e=>(e+1)%p.length);break;case"ArrowUp":e.preventDefault(),h(e=>(e-1+p.length)%p.length);break;case"Enter":case"Tab":e.preventDefault();let t=p[o];if(t){let e=ew(n,t.name);r(t.name,e)}break;case"Escape":e.preventDefault(),i()}},[c,p,o,n,r,i]);(0,a.useEffect)(()=>{if(c)return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[c,g]);let f=(0,a.useCallback)(e=>{let t=ew(n,e.name);r(e.name,t)},[n,r]);return c&&0!==p.length?(0,s.jsx)("div",{className:"mention-autocomplete",ref:m,children:p.map((e,t)=>(0,s.jsxs)("div",{className:"mention-item ".concat(t===o?"selected":""),onClick:()=>f(e),onMouseEnter:()=>h(t),children:[(0,s.jsx)("div",{className:"mention-avatar",style:{background:e.isBroadcast?"var(--accent-warning, #f59e0b)":d(e.name).primary},children:e.isBroadcast?"*":u(e.name)}),(0,s.jsxs)("div",{className:"mention-info",children:[(0,s.jsx)("span",{className:"mention-name",children:e.displayName}),(0,s.jsx)("span",{className:"mention-description",children:e.description})]})]},e.name))}):null}let eb={url:"",autoConnect:!0,reconnect:!0,maxReconnectAttempts:10,reconnectDelay:1e3},eC={async sendMessage(e){try{let t=await fetch("".concat("","/api/send"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),n=await t.json();if(t.ok&&n.success)return{success:!0};return{success:!1,error:n.error||"Failed to send message"}}catch(e){return{success:!1,error:"Network error"}}},async spawnAgent(e){try{let t=await fetch("".concat("","/api/spawn"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});return await t.json()}catch(t){return{success:!1,name:e.name,error:"Network error"}}},async getSpawnedAgents(){try{let e=await fetch("".concat("","/api/spawned")),t=await e.json();if(e.ok&&t.success)return{success:!0,data:{agents:t.agents||[]}};return{success:!1,error:t.error}}catch(e){return{success:!1,error:"Network error"}}},async releaseAgent(e){try{let t=await fetch("".concat("","/api/spawned/").concat(encodeURIComponent(e)),{method:"DELETE"}),n=await t.json();if(t.ok&&n.success)return{success:!0};return{success:!1,error:n.error}}catch(e){return{success:!1,error:"Network error"}}},async getData(){try{let e=await fetch("".concat("","/api/data")),t=await e.json();if(e.ok)return{success:!0,data:t};return{success:!1,error:"Failed to fetch data"}}catch(e){return{success:!1,error:"Network error"}}},async getBridgeData(){try{let e=await fetch("".concat("","/api/bridge")),t=await e.json();if(e.ok)return{success:!0,data:t};return{success:!1,error:"Failed to fetch bridge data"}}catch(e){return{success:!1,error:"Network error"}}},async getMetrics(){try{let e=await fetch("".concat("","/api/metrics")),t=await e.json();if(e.ok)return{success:!0,data:t};return{success:!1,error:"Failed to fetch metrics"}}catch(e){return{success:!1,error:"Network error"}}}};function eS(e){var t,n,l,r;let{wsUrl:i}=e,{data:c,isConnected:o,error:u}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t={...eb,...e},[n,s]=(0,a.useState)(null),[l,r]=(0,a.useState)(!1),[i,c]=(0,a.useState)(null),o=(0,a.useRef)(null),d=(0,a.useRef)(0),u=(0,a.useRef)(null),h=(0,a.useCallback)(()=>{var e;if((null===(e=o.current)||void 0===e?void 0:e.readyState)===WebSocket.OPEN)return;let n=t.url||function(){let e="https:"===window.location.protocol?"wss:":"ws:";return"".concat(e,"//").concat(window.location.host,"/ws")}();try{let e=new WebSocket(n);e.onopen=()=>{r(!0),c(null),d.current=0},e.onclose=()=>{if(r(!1),o.current=null,t.reconnect&&d.current<t.maxReconnectAttempts){let e=Math.min(t.reconnectDelay*Math.pow(2,d.current),3e4);d.current++,u.current=setTimeout(()=>{h()},e)}},e.onerror=e=>{c(Error("WebSocket connection error")),console.error("[useWebSocket] Error:",e)},e.onmessage=e=>{try{let t=JSON.parse(e.data);s(t)}catch(e){console.error("[useWebSocket] Failed to parse message:",e)}},o.current=e}catch(e){c(e instanceof Error?e:Error("Failed to create WebSocket"))}},[t.url,t.reconnect,t.maxReconnectAttempts,t.reconnectDelay]),m=(0,a.useCallback)(()=>{u.current&&(clearTimeout(u.current),u.current=null),o.current&&(o.current.close(),o.current=null),r(!1)},[]);return(0,a.useEffect)(()=>(t.autoConnect&&h(),()=>{m()}),[t.autoConnect,h,m]),{data:n,isConnected:l,error:i,connect:h,disconnect:m}}({url:i}),[m,x]=(0,a.useState)("local"),[g,j]=(0,a.useState)([]),[v,y]=(0,a.useState)(),[k,w]=(0,a.useState)(!1),[N,b]=(0,a.useState)(!1),[C,S]=(0,a.useState)(null),[A,M]=(0,a.useState)(!1),[E,D]=(0,a.useState)(!1),[B,W]=(0,a.useState)(eu),[L,R]=(0,a.useState)(!1),T=(0,a.useCallback)(()=>{window.innerWidth<=768&&R(!1)},[]),{agents:O,groups:F,selectedAgent:V,selectAgent:_,searchQuery:I,setSearchQuery:H,totalCount:K,onlineCount:U,needsAttentionCount:J}=function(e){let{agents:t,initialSelected:n,initialSearchQuery:s=""}=e,[l,r]=(0,a.useState)(null!=n?n:null),[i,c]=(0,a.useState)(s),o=(0,a.useMemo)(()=>p(t,i),[t,i]),u=(0,a.useMemo)(()=>h(o),[o]),m=(0,a.useMemo)(()=>[...o].sort((e,t)=>e.name.localeCompare(t.name)),[o]),x=(0,a.useMemo)(()=>{var e;return null!==(e=t.find(e=>e.name===l))&&void 0!==e?e:null},[t,l]),g=(0,a.useMemo)(()=>{let e=f(t);return{totalCount:e.total,onlineCount:e.online,needsAttentionCount:e.needsAttention}},[t]),j=(0,a.useCallback)(e=>{r(e)},[]),v=(0,a.useCallback)(e=>t.find(t=>t.name===e),[t]),y=(0,a.useCallback)(e=>({...e,color:d(e.name)}),[]);return{agents:o,groups:u,sortedAgents:m,selectedAgent:x,selectAgent:j,searchQuery:i,setSearchQuery:c,...g,getAgentByName:v,getAgentWithColor:y}}({agents:null!==(l=null==c?void 0:c.agents)&&void 0!==l?l:[]}),{messages:G,currentChannel:Q,setCurrentChannel:$,currentThread:Y,setCurrentThread:X,sendMessage:ee,isSending:et,sendError:en}=function(e){let{messages:t,currentChannel:n="general"}=e,[s,l]=(0,a.useState)(n),[r,i]=(0,a.useState)(null),[c,o]=(0,a.useState)(!1),[d,u]=(0,a.useState)(null),h=(0,a.useMemo)(()=>"general"===s?t:t.filter(e=>e.from===s||e.to===s),[t,s]),m=(0,a.useCallback)(e=>t.filter(t=>t.thread===e),[t]),x=(0,a.useMemo)(()=>{let e=t.filter(e=>!e.isRead).length;return{totalCount:t.length,unreadCount:e}},[t]);return{messages:h,threadMessages:m,currentChannel:s,setCurrentChannel:l,currentThread:r,setCurrentThread:i,sendMessage:(0,a.useCallback)(async(e,t,n)=>{o(!0),u(null);try{let s=await fetch("/api/send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({to:e,message:t,thread:n})}),a=await s.json();if(s.ok&&a.success)return!0;return u(a.error||"Failed to send message"),!1}catch(e){return u("Network error"),!1}finally{o(!1)}},[]),isSending:c,sendError:d,...x}}({messages:null!==(r=null==c?void 0:c.messages)&&void 0!==r?r:[]}),es=!!(null==c?void 0:null===(n=c.fleet)||void 0===n?void 0:null===(t=n.servers)||void 0===t?void 0:t.length);(0,a.useEffect)(()=>{if(!es)return;let e=async()=>{let e=await eC.getBridgeData();if(e.success&&e.data){let{servers:t,agents:n}=e.data;j(t.map(e=>({id:e.id,path:e.url,name:e.name||e.url.split("/").pop(),agents:n.filter(t=>t.server===e.id),lead:void 0})))}};e();let t=setInterval(e,3e4);return()=>clearInterval(t)},[es]);let ea=(0,a.useCallback)(e=>{y(e.id),e.agents.length>0&&(_(e.agents[0].name),$(e.agents[0].name)),T()},[_,$,T]),el=(0,a.useCallback)(e=>{_(e.name),$(e.name),T()},[_,$,T]),ei=(0,a.useCallback)(()=>{S(null),w(!0)},[]),ec=(0,a.useCallback)(()=>{D(!0)},[]),eo=(0,a.useCallback)(async e=>{b(!0),S(null);try{let t=await eC.spawnAgent({name:e.name,cli:e.command,team:e.team});if(!t.success)return S(t.error||"Failed to spawn agent"),!1;return!0}catch(e){return S(e instanceof Error?e.message:"Failed to spawn agent"),!1}finally{b(!1)}},[]),ed=(0,a.useCallback)(async e=>{if(e.isSpawned&&window.confirm('Are you sure you want to release agent "'.concat(e.name,'"?')))try{let t=await eC.releaseAgent(e.name);t.success||console.error("Failed to release agent:",t.error)}catch(e){console.error("Failed to release agent:",e)}},[]),em=(0,a.useCallback)(()=>{M(!0)},[]);return a.useEffect(()=>{let e=e=>{let t;t="system"===e?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":e,document.documentElement.setAttribute("data-theme",t)};if(e(B.theme),"system"===B.theme){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>e("system");return t.addEventListener("change",n),()=>t.removeEventListener("change",n)}},[B.theme]),a.useEffect(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&"k"===e.key&&(e.preventDefault(),M(!0)),(e.metaKey||e.ctrlKey)&&e.shiftKey&&"s"===e.key&&(e.preventDefault(),ei()),"Escape"===e.key&&(M(!1),w(!1))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[ei]),(0,s.jsxs)("div",{className:"dashboard-app",children:[(0,s.jsx)("div",{className:"sidebar-overlay ".concat(L?"visible":""),onClick:()=>R(!1)}),(0,s.jsx)(P,{agents:O,projects:g,currentProject:v,selectedAgent:null==V?void 0:V.name,viewMode:m,isFleetAvailable:es,isConnected:o,isOpen:L,onAgentSelect:el,onProjectSelect:ea,onViewModeChange:x,onSpawnClick:ei,onReleaseClick:ed,onClose:()=>R(!1)}),(0,s.jsxs)("main",{className:"dashboard-main",children:[(0,s.jsx)(z,{currentChannel:Q,selectedAgent:V,onCommandPaletteOpen:em,onSettingsClick:ec,onMenuClick:()=>R(!0)}),(0,s.jsx)("div",{className:"dashboard-content",children:u?(0,s.jsxs)("div",{className:"error-state",children:[(0,s.jsx)(eE,{}),(0,s.jsx)("h2",{children:"Connection Error"}),(0,s.jsx)("p",{children:u.message}),(0,s.jsx)("button",{onClick:()=>window.location.reload(),children:"Retry Connection"})]}):c?(0,s.jsx)("div",{className:"messages-container",children:(0,s.jsx)(q,{messages:G,currentChannel:Q,onThreadClick:e=>X(e),highlightedMessageId:null!=Y?Y:void 0})}):(0,s.jsxs)("div",{className:"loading-state",children:[(0,s.jsx)(eM,{}),(0,s.jsx)("p",{children:"Connecting to dashboard..."})]})}),(0,s.jsx)("div",{className:"message-composer",children:(0,s.jsx)(eA,{recipient:"general"===Q?"*":Q,agents:O,onSend:ee,isSending:et,error:en})})]}),(0,s.jsx)(Z,{isOpen:A,onClose:()=>M(!1),agents:O,projects:g,currentProject:v,onAgentSelect:el,onProjectSelect:ea,onSpawnClick:ei,onGeneralClick:()=>{_(null),$("general")}}),(0,s.jsx)(er,{isOpen:k,onClose:()=>w(!1),onSpawn:eo,existingAgents:O.map(e=>e.name),isSpawning:N,error:C}),(0,s.jsx)(eh,{isOpen:E,onClose:()=>D(!1),settings:B,onSettingsChange:W,onResetSettings:()=>W(eu)})]})}function eA(e){let{recipient:t,agents:n,onSend:l,isSending:r,error:i}=e,[c,o]=(0,a.useState)(""),[d,u]=(0,a.useState)(0),[h,m]=(0,a.useState)(!1),x=(0,a.useRef)(null),p=async e=>{let n,s;if(e.preventDefault(),!c.trim()||r)return;let a=c.match(/^@(\S+)\s*([\s\S]*)/);if(a){let e=a[1];s=a[2]||"",n="*"===e||"everyone"===e.toLowerCase()||"all"===e.toLowerCase()?"*":e}else n=t,s=c;await l(n,s||c)&&(o(""),m(!1))};return(0,s.jsxs)("form",{className:"composer-form",onSubmit:p,children:[(0,s.jsxs)("div",{className:"composer-input-wrapper",children:[(0,s.jsx)(eN,{agents:n,inputValue:c,cursorPosition:d,onSelect:(e,t)=>{o(t),m(!1),setTimeout(()=>{if(x.current){x.current.focus();let e=t.indexOf(" ")+1;x.current.setSelectionRange(e,e)}},0)},onClose:()=>m(!1),isVisible:h}),(0,s.jsx)("textarea",{ref:x,className:"composer-input",placeholder:"Message ".concat("*"===t?"everyone":"@"+t,"... (Shift+Enter for new line)"),value:c,onChange:e=>{let t=e.target.value,n=e.target.selectionStart||0;o(t),u(n),m(null!==ek(t,n))},onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),c.trim()&&!r&&p(e))},onSelect:e=>u(e.target.selectionStart||0),disabled:r,rows:1})]}),(0,s.jsx)("button",{type:"submit",className:"composer-send",disabled:!c.trim()||r,title:r?"Sending...":"Send message",children:r?(0,s.jsx)("span",{className:"composer-send-text",children:"Sending..."}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"composer-send-text",children:"Send"}),(0,s.jsxs)("svg",{className:"composer-send-icon",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,s.jsx)("line",{x1:"22",y1:"2",x2:"11",y2:"13"}),(0,s.jsx)("polygon",{points:"22 2 15 22 11 13 2 9 22 2"})]})]})}),i&&(0,s.jsx)("span",{className:"composer-error",children:i})]})}function eM(){return(0,s.jsx)("svg",{className:"spinner",width:"24",height:"24",viewBox:"0 0 24 24",children:(0,s.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"2",fill:"none",strokeDasharray:"32",strokeLinecap:"round"})})}function eE(){return(0,s.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"10"}),(0,s.jsx)("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),(0,s.jsx)("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]})}function eD(){return(0,s.jsx)(eS,{})}}},function(e){e.O(0,[971,117,744],function(){return e(e.s=8440)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[744],{262:function(e,n,t){Promise.resolve().then(t.t.bind(t,2846,23)),Promise.resolve().then(t.t.bind(t,9107,23)),Promise.resolve().then(t.t.bind(t,1060,23)),Promise.resolve().then(t.t.bind(t,4707,23)),Promise.resolve().then(t.t.bind(t,80,23)),Promise.resolve().then(t.t.bind(t,6423,23))}},function(e){var n=function(n){return e(e.s=n)};e.O(0,[971,117],function(){return n(4278),n(262)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){"use strict";var e,t,n,r,o,u,i,c,f,a={},l={};function d(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={exports:{}},r=!0;try{a[e](n,n.exports,d),r=!1}finally{r&&delete l[e]}return n.exports}d.m=a,e=[],d.O=function(t,n,r,o){if(n){o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o];return}for(var i=1/0,u=0;u<e.length;u++){for(var n=e[u][0],r=e[u][1],o=e[u][2],c=!0,f=0;f<n.length;f++)i>=o&&Object.keys(d.O).every(function(e){return d.O[e](n[f])})?n.splice(f--,1):(c=!1,o<i&&(i=o));if(c){e.splice(u--,1);var a=r();void 0!==a&&(t=a)}}return t},d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var o=Object.create(null);d.r(o);var u={};t=t||[null,n({}),n([]),n(n)];for(var i=2&r&&e;"object"==typeof i&&!~t.indexOf(i);i=n(i))Object.getOwnPropertyNames(i).forEach(function(t){u[t]=function(){return e[t]}});return u.default=function(){return e},d.d(o,u),o},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){},d.miniCssF=function(e){},d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="_N_E:",d.l=function(e,t,n,u){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var i,c,f=document.getElementsByTagName("script"),a=0;a<f.length;a++){var l=f[a];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==o+n){i=l;break}}i||(c=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,d.nc&&i.setAttribute("nonce",d.nc),i.setAttribute("data-webpack",o+n),i.src=d.tu(e)),r[e]=[t];var s=function(t,n){i.onerror=i.onload=null,clearTimeout(p);var o=r[e];if(delete r[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(s.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=s.bind(null,i.onerror),i.onload=s.bind(null,i.onload),c&&document.head.appendChild(i)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.tt=function(){return void 0===u&&(u={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(u=trustedTypes.createPolicy("nextjs#bundler",u))),u},d.tu=function(e){return d.tt().createScriptURL(e)},d.p="/_next/",i={272:0,587:0},d.f.j=function(e,t){var n=d.o(i,e)?i[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(/^(272|587)$/.test(e))i[e]=0;else{var r=new Promise(function(t,r){n=i[e]=[t,r]});t.push(n[2]=r);var o=d.p+d.u(e),u=Error();d.l(o,function(t){if(d.o(i,e)&&(0!==(n=i[e])&&(i[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;u.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",u.name="ChunkLoadError",u.type=r,u.request=o,n[1](u)}},"chunk-"+e,e)}}},d.O.j=function(e){return 0===i[e]},c=function(e,t){var n,r,o=t[0],u=t[1],c=t[2],f=0;if(o.some(function(e){return 0!==i[e]})){for(n in u)d.o(u,n)&&(d.m[n]=u[n]);if(c)var a=c(d)}for(e&&e(t);f<o.length;f++)r=o[f],d.o(i,r)&&i[r]&&i[r][0](),i[r]=0;return d.O(a)},(f=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(c.bind(null,0)),f.push=c.bind(null,f.push.bind(f))}();
|