@andorra-labs/code 0.0.0-stage → 0.1.4
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/LICENSE.md +38 -0
- package/README.md +231 -3
- package/THIRD_PARTY_NOTICES.md +56 -0
- package/dist/src/account-presentation.d.ts +53 -0
- package/dist/src/account-presentation.js +99 -0
- package/dist/src/activity.d.ts +41 -0
- package/dist/src/activity.js +79 -0
- package/dist/src/agent-definitions.d.ts +61 -0
- package/dist/src/agent-definitions.js +303 -0
- package/dist/src/agent-execution.d.ts +4 -0
- package/dist/src/agent-execution.js +1198 -0
- package/dist/src/agent-mcp.d.ts +105 -0
- package/dist/src/agent-mcp.js +859 -0
- package/dist/src/agent-modifiers.d.ts +8 -0
- package/dist/src/agent-modifiers.js +333 -0
- package/dist/src/analytics.d.ts +81 -0
- package/dist/src/analytics.js +81 -0
- package/dist/src/anthropic-console-auth.d.ts +68 -0
- package/dist/src/anthropic-console-auth.js +318 -0
- package/dist/src/anthropic-credentials.d.ts +41 -0
- package/dist/src/anthropic-credentials.js +107 -0
- package/dist/src/app-server/protocol.d.ts +500 -0
- package/dist/src/app-server/protocol.js +106 -0
- package/dist/src/app-server/reasoning.d.ts +43 -0
- package/dist/src/app-server/reasoning.js +173 -0
- package/dist/src/app-server/terminal.d.ts +77 -0
- package/dist/src/app-server/terminal.js +177 -0
- package/dist/src/app-server/workspace.d.ts +247 -0
- package/dist/src/app-server/workspace.js +1098 -0
- package/dist/src/app-server.d.ts +1039 -0
- package/dist/src/app-server.js +6594 -0
- package/dist/src/artifacts.d.ts +27 -0
- package/dist/src/artifacts.js +103 -0
- package/dist/src/attachments.d.ts +158 -0
- package/dist/src/attachments.js +466 -0
- package/dist/src/auth/AuthManager.d.ts +110 -0
- package/dist/src/auth/AuthManager.js +435 -0
- package/dist/src/auth/callback.d.ts +10 -0
- package/dist/src/auth/callback.js +96 -0
- package/dist/src/auth/deployment.d.ts +18 -0
- package/dist/src/auth/deployment.js +18 -0
- package/dist/src/auth/index.d.ts +31 -0
- package/dist/src/auth/index.js +27 -0
- package/dist/src/auth/lock.d.ts +2 -0
- package/dist/src/auth/lock.js +29 -0
- package/dist/src/auth/store.d.ts +20 -0
- package/dist/src/auth/store.js +93 -0
- package/dist/src/auth/types.d.ts +24 -0
- package/dist/src/auth/types.js +8 -0
- package/dist/src/auth-commands.d.ts +5 -0
- package/dist/src/auth-commands.js +28 -0
- package/dist/src/automation-runner.d.ts +7 -0
- package/dist/src/automation-runner.js +113 -0
- package/dist/src/automation-service.d.ts +28 -0
- package/dist/src/automation-service.js +299 -0
- package/dist/src/automation-tool.d.ts +2 -0
- package/dist/src/automation-tool.js +49 -0
- package/dist/src/automation-worker-shutdown.d.ts +3 -0
- package/dist/src/automation-worker-shutdown.js +13 -0
- package/dist/src/automations.d.ts +63 -0
- package/dist/src/automations.js +265 -0
- package/dist/src/boot-trace.d.ts +15 -0
- package/dist/src/boot-trace.js +25 -0
- package/dist/src/browser-activity.d.ts +4 -0
- package/dist/src/browser-activity.js +18 -0
- package/dist/src/browser-bridge.d.ts +56 -0
- package/dist/src/browser-bridge.js +372 -0
- package/dist/src/browser-observation.d.ts +24 -0
- package/dist/src/browser-observation.js +104 -0
- package/dist/src/browser-panel-tool.d.ts +39 -0
- package/dist/src/browser-panel-tool.js +227 -0
- package/dist/src/browser-runner.d.ts +16 -0
- package/dist/src/browser-runner.js +302 -0
- package/dist/src/browser-server.d.ts +31 -0
- package/dist/src/browser-server.js +1189 -0
- package/dist/src/browser-session.d.ts +19 -0
- package/dist/src/browser-session.js +649 -0
- package/dist/src/browser-ui/andorra-logo.png +0 -0
- package/dist/src/browser-ui/app.js +419 -0
- package/dist/src/browser-ui/index.html +13 -0
- package/dist/src/browser-ui/style.css +243 -0
- package/dist/src/browser-view.d.ts +348 -0
- package/dist/src/browser-view.js +1487 -0
- package/dist/src/capabilities.d.ts +9 -0
- package/dist/src/capabilities.js +135 -0
- package/dist/src/clarification-ui.d.ts +23 -0
- package/dist/src/clarification-ui.js +59 -0
- package/dist/src/claude-executable.d.ts +6 -0
- package/dist/src/claude-executable.js +56 -0
- package/dist/src/claude-provider.d.ts +35 -0
- package/dist/src/claude-provider.js +391 -0
- package/dist/src/cli.d.ts +85 -0
- package/dist/src/cli.js +2564 -0
- package/dist/src/code-intelligence/CodeIntelligenceManager.d.ts +108 -0
- package/dist/src/code-intelligence/CodeIntelligenceManager.js +616 -0
- package/dist/src/code-intelligence/ContextLedger.d.ts +32 -0
- package/dist/src/code-intelligence/ContextLedger.js +77 -0
- package/dist/src/code-intelligence/ContextRouter.d.ts +8 -0
- package/dist/src/code-intelligence/ContextRouter.js +18 -0
- package/dist/src/code-intelligence/codegraph/CodeGraphProjectSession.d.ts +82 -0
- package/dist/src/code-intelligence/codegraph/CodeGraphProjectSession.js +444 -0
- package/dist/src/code-intelligence/codegraph/CodeGraphProvider.d.ts +40 -0
- package/dist/src/code-intelligence/codegraph/CodeGraphProvider.js +84 -0
- package/dist/src/code-intelligence/codegraph/CodeGraphSyncBarrier.d.ts +22 -0
- package/dist/src/code-intelligence/codegraph/CodeGraphSyncBarrier.js +71 -0
- package/dist/src/code-intelligence/codegraph/repoExploreTool.d.ts +9 -0
- package/dist/src/code-intelligence/codegraph/repoExploreTool.js +26 -0
- package/dist/src/code-intelligence/repository.d.ts +13 -0
- package/dist/src/code-intelligence/repository.js +48 -0
- package/dist/src/code-intelligence/types.d.ts +78 -0
- package/dist/src/code-intelligence/types.js +3 -0
- package/dist/src/codex-auth.d.ts +83 -0
- package/dist/src/codex-auth.js +168 -0
- package/dist/src/codex-browser-auth.d.ts +74 -0
- package/dist/src/codex-browser-auth.js +429 -0
- package/dist/src/codex-errors.d.ts +3 -0
- package/dist/src/codex-errors.js +50 -0
- package/dist/src/codex-executable.d.ts +12 -0
- package/dist/src/codex-executable.js +154 -0
- package/dist/src/codex-provider.d.ts +25 -0
- package/dist/src/codex-provider.js +211 -0
- package/dist/src/codex-rpc.d.ts +43 -0
- package/dist/src/codex-rpc.js +136 -0
- package/dist/src/coding-tools.d.ts +19 -0
- package/dist/src/coding-tools.js +875 -0
- package/dist/src/command-metrics.d.ts +17 -0
- package/dist/src/command-metrics.js +34 -0
- package/dist/src/command-screens.d.ts +44 -0
- package/dist/src/command-screens.js +601 -0
- package/dist/src/commands.d.ts +111 -0
- package/dist/src/commands.js +550 -0
- package/dist/src/completion.d.ts +45 -0
- package/dist/src/completion.js +195 -0
- package/dist/src/config.d.ts +163 -0
- package/dist/src/config.js +663 -0
- package/dist/src/context-budget.d.ts +32 -0
- package/dist/src/context-budget.js +151 -0
- package/dist/src/context-compaction.d.ts +43 -0
- package/dist/src/context-compaction.js +269 -0
- package/dist/src/context-selection.d.ts +65 -0
- package/dist/src/context-selection.js +130 -0
- package/dist/src/dashboard-view.d.ts +37 -0
- package/dist/src/dashboard-view.js +254 -0
- package/dist/src/dashboard.d.ts +41 -0
- package/dist/src/dashboard.js +160 -0
- package/dist/src/deadline.d.ts +55 -0
- package/dist/src/deadline.js +164 -0
- package/dist/src/decision/ContinuationAdapter.d.ts +6 -0
- package/dist/src/decision/ContinuationAdapter.js +11 -0
- package/dist/src/decision/DecisionEngine.d.ts +23 -0
- package/dist/src/decision/DecisionEngine.js +1 -0
- package/dist/src/decision/DecisionManager.d.ts +47 -0
- package/dist/src/decision/DecisionManager.js +280 -0
- package/dist/src/decision/DecisionPolicy.d.ts +8 -0
- package/dist/src/decision/DecisionPolicy.js +54 -0
- package/dist/src/decision/FactContinuations.d.ts +147 -0
- package/dist/src/decision/FactContinuations.js +472 -0
- package/dist/src/decision/FactServiceGate.d.ts +12 -0
- package/dist/src/decision/FactServiceGate.js +37 -0
- package/dist/src/decision/PreparedSteps.d.ts +51 -0
- package/dist/src/decision/PreparedSteps.js +147 -0
- package/dist/src/decision/applyToolMenu.d.ts +3 -0
- package/dist/src/decision/applyToolMenu.js +61 -0
- package/dist/src/decision/checks.d.ts +13 -0
- package/dist/src/decision/checks.js +104 -0
- package/dist/src/decision/facts.d.ts +64 -0
- package/dist/src/decision/facts.js +90 -0
- package/dist/src/decision/guidancePolicy.d.ts +3 -0
- package/dist/src/decision/guidancePolicy.js +10 -0
- package/dist/src/decision/hostedPolicy.d.ts +14 -0
- package/dist/src/decision/hostedPolicy.js +21 -0
- package/dist/src/decision/index.d.ts +6 -0
- package/dist/src/decision/index.js +6 -0
- package/dist/src/decision/optimizationPolicy.d.ts +26 -0
- package/dist/src/decision/optimizationPolicy.js +38 -0
- package/dist/src/decision/providers/AndorraDecisionProvider.d.ts +17 -0
- package/dist/src/decision/providers/AndorraDecisionProvider.js +251 -0
- package/dist/src/decision/providers/HttpDecisionProvider.d.ts +16 -0
- package/dist/src/decision/providers/HttpDecisionProvider.js +105 -0
- package/dist/src/decision/providers/NoOpDecisionProvider.d.ts +4 -0
- package/dist/src/decision/providers/NoOpDecisionProvider.js +3 -0
- package/dist/src/decision/providers/index.d.ts +3 -0
- package/dist/src/decision/providers/index.js +13 -0
- package/dist/src/decision/providers/questions.d.ts +3 -0
- package/dist/src/decision/providers/questions.js +31 -0
- package/dist/src/decision/routeTools.d.ts +59 -0
- package/dist/src/decision/routeTools.js +131 -0
- package/dist/src/decision/toolFamilies.d.ts +7 -0
- package/dist/src/decision/toolFamilies.js +55 -0
- package/dist/src/decision/toolMenu.d.ts +35 -0
- package/dist/src/decision/toolMenu.js +73 -0
- package/dist/src/decision/types.d.ts +99 -0
- package/dist/src/decision/types.js +1 -0
- package/dist/src/diff-preview.d.ts +6 -0
- package/dist/src/diff-preview.js +120 -0
- package/dist/src/duration.d.ts +44 -0
- package/dist/src/duration.js +72 -0
- package/dist/src/efficiency.d.ts +101 -0
- package/dist/src/efficiency.js +104 -0
- package/dist/src/engine/protocol.d.ts +11 -0
- package/dist/src/engine/protocol.js +51 -0
- package/dist/src/extensions.d.ts +46 -0
- package/dist/src/extensions.js +846 -0
- package/dist/src/favicons.d.ts +37 -0
- package/dist/src/favicons.js +216 -0
- package/dist/src/file-read-state.d.ts +8 -0
- package/dist/src/file-read-state.js +31 -0
- package/dist/src/git-summary.d.ts +67 -0
- package/dist/src/git-summary.js +461 -0
- package/dist/src/goal-completion-verification.d.ts +18 -0
- package/dist/src/goal-completion-verification.js +43 -0
- package/dist/src/graph-account.d.ts +31 -0
- package/dist/src/graph-account.js +57 -0
- package/dist/src/graph-editor-session.d.ts +15 -0
- package/dist/src/graph-editor-session.js +70 -0
- package/dist/src/graph-health.d.ts +88 -0
- package/dist/src/graph-health.js +243 -0
- package/dist/src/graph-provider-portability.d.ts +30 -0
- package/dist/src/graph-provider-portability.js +197 -0
- package/dist/src/graph-quota.d.ts +55 -0
- package/dist/src/graph-quota.js +131 -0
- package/dist/src/graph-runner.d.ts +4 -0
- package/dist/src/graph-runner.js +1356 -0
- package/dist/src/graph-selection.d.ts +17 -0
- package/dist/src/graph-selection.js +31 -0
- package/dist/src/graph-server.d.ts +13 -0
- package/dist/src/graph-server.js +483 -0
- package/dist/src/graph-studio-features.d.ts +61 -0
- package/dist/src/graph-studio-features.js +348 -0
- package/dist/src/graph-sync.d.ts +76 -0
- package/dist/src/graph-sync.js +619 -0
- package/dist/src/graph-ui/andorra-logo.png +0 -0
- package/dist/src/graph-ui/app.js +1803 -0
- package/dist/src/graph-ui/compat.js +43 -0
- package/dist/src/graph-ui/controls.css +190 -0
- package/dist/src/graph-ui/controls.js +567 -0
- package/dist/src/graph-ui/edge-router.js +117 -0
- package/dist/src/graph-ui/embed.js +324 -0
- package/dist/src/graph-ui/fonts/geist-mono-latin-400-normal.woff2 +0 -0
- package/dist/src/graph-ui/fonts/geist-sans-latin-400-normal.woff2 +0 -0
- package/dist/src/graph-ui/fonts/geist-sans-latin-500-normal.woff2 +0 -0
- package/dist/src/graph-ui/icons.js +117 -0
- package/dist/src/graph-ui/index.html +7 -0
- package/dist/src/graph-ui/library.css +26 -0
- package/dist/src/graph-ui/sidebar.js +61 -0
- package/dist/src/graph-ui/studio-canvas.js +454 -0
- package/dist/src/graph-ui/studio.css +110 -0
- package/dist/src/graph-ui/studio.js +720 -0
- package/dist/src/graph-ui/style.css +477 -0
- package/dist/src/graph-ui/theme.js +92 -0
- package/dist/src/graph-ui/tokens.css +187 -0
- package/dist/src/graphs.d.ts +270 -0
- package/dist/src/graphs.js +1102 -0
- package/dist/src/grep-regex-worker.d.ts +1 -0
- package/dist/src/grep-regex-worker.js +20 -0
- package/dist/src/grep-regex.d.ts +11 -0
- package/dist/src/grep-regex.js +64 -0
- package/dist/src/handoffs.d.ts +34 -0
- package/dist/src/handoffs.js +229 -0
- package/dist/src/hardened-runtime.d.ts +14 -0
- package/dist/src/hardened-runtime.js +264 -0
- package/dist/src/limits.d.ts +77 -0
- package/dist/src/limits.js +88 -0
- package/dist/src/markdown.d.ts +31 -0
- package/dist/src/markdown.js +553 -0
- package/dist/src/mcp.d.ts +11 -0
- package/dist/src/mcp.js +175 -0
- package/dist/src/membership-errors.d.ts +4 -0
- package/dist/src/membership-errors.js +4 -0
- package/dist/src/membership.d.ts +81 -0
- package/dist/src/membership.js +247 -0
- package/dist/src/memory/LocalToolMemory.d.ts +20 -0
- package/dist/src/memory/LocalToolMemory.js +114 -0
- package/dist/src/memory/MemoryDistiller.d.ts +35 -0
- package/dist/src/memory/MemoryDistiller.js +216 -0
- package/dist/src/memory/MemoryManager.d.ts +76 -0
- package/dist/src/memory/MemoryManager.js +386 -0
- package/dist/src/memory/MemoryPolicy.d.ts +30 -0
- package/dist/src/memory/MemoryPolicy.js +96 -0
- package/dist/src/memory/MemoryProvider.d.ts +18 -0
- package/dist/src/memory/MemoryProvider.js +1 -0
- package/dist/src/memory/MemoryRetriever.d.ts +27 -0
- package/dist/src/memory/MemoryRetriever.js +149 -0
- package/dist/src/memory/PermissionMemoryProvider.d.ts +22 -0
- package/dist/src/memory/PermissionMemoryProvider.js +50 -0
- package/dist/src/memory/ToolFailureLessons.d.ts +39 -0
- package/dist/src/memory/ToolFailureLessons.js +167 -0
- package/dist/src/memory/index.d.ts +12 -0
- package/dist/src/memory/index.js +11 -0
- package/dist/src/memory/providers/NoOpMemoryProvider.d.ts +13 -0
- package/dist/src/memory/providers/NoOpMemoryProvider.js +15 -0
- package/dist/src/memory/providers/graphiti/GraphitiClient.d.ts +27 -0
- package/dist/src/memory/providers/graphiti/GraphitiClient.js +76 -0
- package/dist/src/memory/providers/graphiti/GraphitiMapper.d.ts +6 -0
- package/dist/src/memory/providers/graphiti/GraphitiMapper.js +116 -0
- package/dist/src/memory/providers/graphiti/GraphitiMemoryProvider.d.ts +27 -0
- package/dist/src/memory/providers/graphiti/GraphitiMemoryProvider.js +137 -0
- package/dist/src/memory/providers/graphiti/GraphitiTypes.d.ts +57 -0
- package/dist/src/memory/providers/graphiti/GraphitiTypes.js +2 -0
- package/dist/src/memory/redaction.d.ts +11 -0
- package/dist/src/memory/redaction.js +58 -0
- package/dist/src/memory/repository.d.ts +11 -0
- package/dist/src/memory/repository.js +74 -0
- package/dist/src/memory/tools/memorySearchTool.d.ts +4 -0
- package/dist/src/memory/tools/memorySearchTool.js +77 -0
- package/dist/src/memory/types.d.ts +112 -0
- package/dist/src/memory/types.js +7 -0
- package/dist/src/model-metadata.d.ts +28 -0
- package/dist/src/model-metadata.js +274 -0
- package/dist/src/model-override.d.ts +60 -0
- package/dist/src/model-override.js +146 -0
- package/dist/src/model-tiers.d.ts +61 -0
- package/dist/src/model-tiers.js +109 -0
- package/dist/src/opencode-catalog.d.ts +16 -0
- package/dist/src/opencode-catalog.js +135 -0
- package/dist/src/opencode-provider.d.ts +10 -0
- package/dist/src/opencode-provider.js +525 -0
- package/dist/src/paged-transcript.d.ts +58 -0
- package/dist/src/paged-transcript.js +205 -0
- package/dist/src/palette.d.ts +61 -0
- package/dist/src/palette.js +63 -0
- package/dist/src/permissions.d.ts +36 -0
- package/dist/src/permissions.js +93 -0
- package/dist/src/powershell-pool.d.ts +26 -0
- package/dist/src/powershell-pool.js +235 -0
- package/dist/src/profile.d.ts +80 -0
- package/dist/src/profile.js +200 -0
- package/dist/src/provider-connection.d.ts +36 -0
- package/dist/src/provider-connection.js +222 -0
- package/dist/src/provider-engine.d.ts +37 -0
- package/dist/src/provider-engine.js +401 -0
- package/dist/src/provider-import.d.ts +68 -0
- package/dist/src/provider-import.js +355 -0
- package/dist/src/provider-settings.d.ts +8 -0
- package/dist/src/provider-settings.js +451 -0
- package/dist/src/providers.d.ts +219 -0
- package/dist/src/providers.js +1230 -0
- package/dist/src/pull-requests.d.ts +195 -0
- package/dist/src/pull-requests.js +514 -0
- package/dist/src/qa/api/http-runner.d.ts +3 -0
- package/dist/src/qa/api/http-runner.js +47 -0
- package/dist/src/qa/browser/PlaywrightRunner.d.ts +21 -0
- package/dist/src/qa/browser/PlaywrightRunner.js +190 -0
- package/dist/src/qa/command-policy.d.ts +28 -0
- package/dist/src/qa/command-policy.js +122 -0
- package/dist/src/qa/git/ChangeDetector.d.ts +26 -0
- package/dist/src/qa/git/ChangeDetector.js +177 -0
- package/dist/src/qa/git/DiffReviewer.d.ts +28 -0
- package/dist/src/qa/git/DiffReviewer.js +115 -0
- package/dist/src/qa/index.d.ts +11 -0
- package/dist/src/qa/index.js +19 -0
- package/dist/src/qa/orchestrator/ChangeClassifier.d.ts +14 -0
- package/dist/src/qa/orchestrator/ChangeClassifier.js +28 -0
- package/dist/src/qa/orchestrator/MergeGate.d.ts +14 -0
- package/dist/src/qa/orchestrator/MergeGate.js +40 -0
- package/dist/src/qa/orchestrator/QaOrchestrator.d.ts +79 -0
- package/dist/src/qa/orchestrator/QaOrchestrator.js +373 -0
- package/dist/src/qa/profile/ProjectInspector.d.ts +9 -0
- package/dist/src/qa/profile/ProjectInspector.js +295 -0
- package/dist/src/qa/profile/QaConfigLoader.d.ts +43 -0
- package/dist/src/qa/profile/QaConfigLoader.js +261 -0
- package/dist/src/qa/profile/QaProfile.d.ts +17 -0
- package/dist/src/qa/profile/QaProfile.js +15 -0
- package/dist/src/qa/profile/yaml.d.ts +12 -0
- package/dist/src/qa/profile/yaml.js +203 -0
- package/dist/src/qa/qa-authorize.d.ts +25 -0
- package/dist/src/qa/qa-authorize.js +82 -0
- package/dist/src/qa/runners/CommandRunner.d.ts +22 -0
- package/dist/src/qa/runners/CommandRunner.js +96 -0
- package/dist/src/qa/runners/TestRunner.d.ts +21 -0
- package/dist/src/qa/runners/TestRunner.js +66 -0
- package/dist/src/qa/runtime/ProcessManager.d.ts +53 -0
- package/dist/src/qa/runtime/ProcessManager.js +225 -0
- package/dist/src/qa/runtime/PtyManager.d.ts +57 -0
- package/dist/src/qa/runtime/PtyManager.js +338 -0
- package/dist/src/qa/runtime/RuntimeSmoke.d.ts +11 -0
- package/dist/src/qa/runtime/RuntimeSmoke.js +78 -0
- package/dist/src/qa/runtime-detect.d.ts +10 -0
- package/dist/src/qa/runtime-detect.js +72 -0
- package/dist/src/qa/security/DependencyScanner.d.ts +19 -0
- package/dist/src/qa/security/DependencyScanner.js +167 -0
- package/dist/src/qa/security/SecretScanner.d.ts +3 -0
- package/dist/src/qa/security/SecretScanner.js +55 -0
- package/dist/src/qa/tools.d.ts +3 -0
- package/dist/src/qa/tools.js +301 -0
- package/dist/src/qa/types.d.ts +134 -0
- package/dist/src/qa/types.js +3 -0
- package/dist/src/react-runtime.d.ts +53 -0
- package/dist/src/react-runtime.js +1753 -0
- package/dist/src/remote/cert.d.ts +29 -0
- package/dist/src/remote/cert.js +136 -0
- package/dist/src/remote/client.d.ts +189 -0
- package/dist/src/remote/client.js +659 -0
- package/dist/src/remote/command.d.ts +4 -0
- package/dist/src/remote/command.js +211 -0
- package/dist/src/remote/engine-pool.d.ts +230 -0
- package/dist/src/remote/engine-pool.js +1160 -0
- package/dist/src/remote/errors.d.ts +26 -0
- package/dist/src/remote/errors.js +21 -0
- package/dist/src/remote/network.d.ts +48 -0
- package/dist/src/remote/network.js +135 -0
- package/dist/src/remote/pairing.d.ts +98 -0
- package/dist/src/remote/pairing.js +306 -0
- package/dist/src/remote/roots.d.ts +29 -0
- package/dist/src/remote/roots.js +44 -0
- package/dist/src/remote/serve.d.ts +115 -0
- package/dist/src/remote/serve.js +274 -0
- package/dist/src/remote/server.d.ts +35 -0
- package/dist/src/remote/server.js +484 -0
- package/dist/src/remote/types.d.ts +86 -0
- package/dist/src/remote/types.js +11 -0
- package/dist/src/run-control.d.ts +17 -0
- package/dist/src/run-control.js +52 -0
- package/dist/src/run-progress.d.ts +226 -0
- package/dist/src/run-progress.js +724 -0
- package/dist/src/run-records.d.ts +500 -0
- package/dist/src/run-records.js +1678 -0
- package/dist/src/runtime.d.ts +418 -0
- package/dist/src/runtime.js +247 -0
- package/dist/src/sandbox-child.d.ts +1 -0
- package/dist/src/sandbox-child.js +14 -0
- package/dist/src/save-lock.d.ts +9 -0
- package/dist/src/save-lock.js +186 -0
- package/dist/src/session-monitor.d.ts +98 -0
- package/dist/src/session-monitor.js +323 -0
- package/dist/src/session-reaper.d.ts +23 -0
- package/dist/src/session-reaper.js +33 -0
- package/dist/src/session-summary.d.ts +27 -0
- package/dist/src/session-summary.js +66 -0
- package/dist/src/session-title.d.ts +18 -0
- package/dist/src/session-title.js +54 -0
- package/dist/src/sessions.d.ts +211 -0
- package/dist/src/sessions.js +620 -0
- package/dist/src/shell.d.ts +40 -0
- package/dist/src/shell.js +504 -0
- package/dist/src/side-panel.d.ts +144 -0
- package/dist/src/side-panel.js +366 -0
- package/dist/src/skill-commands.d.ts +1 -0
- package/dist/src/skill-commands.js +11 -0
- package/dist/src/skills/bundled/ai-elements/SKILL.md +155 -0
- package/dist/src/skills/bundled/ai-elements/references/agent.md +138 -0
- package/dist/src/skills/bundled/ai-elements/references/artifact.md +91 -0
- package/dist/src/skills/bundled/ai-elements/references/attachments.md +197 -0
- package/dist/src/skills/bundled/ai-elements/references/audio-player.md +141 -0
- package/dist/src/skills/bundled/ai-elements/references/canvas.md +39 -0
- package/dist/src/skills/bundled/ai-elements/references/chain-of-thought.md +88 -0
- package/dist/src/skills/bundled/ai-elements/references/checkpoint.md +171 -0
- package/dist/src/skills/bundled/ai-elements/references/code-block.md +177 -0
- package/dist/src/skills/bundled/ai-elements/references/commit.md +184 -0
- package/dist/src/skills/bundled/ai-elements/references/confirmation.md +268 -0
- package/dist/src/skills/bundled/ai-elements/references/connection.md +39 -0
- package/dist/src/skills/bundled/ai-elements/references/context.md +133 -0
- package/dist/src/skills/bundled/ai-elements/references/controls.md +37 -0
- package/dist/src/skills/bundled/ai-elements/references/conversation.md +224 -0
- package/dist/src/skills/bundled/ai-elements/references/edge.md +57 -0
- package/dist/src/skills/bundled/ai-elements/references/environment-variables.md +109 -0
- package/dist/src/skills/bundled/ai-elements/references/file-tree.md +79 -0
- package/dist/src/skills/bundled/ai-elements/references/image.md +150 -0
- package/dist/src/skills/bundled/ai-elements/references/inline-citation.md +300 -0
- package/dist/src/skills/bundled/ai-elements/references/jsx-preview.md +108 -0
- package/dist/src/skills/bundled/ai-elements/references/message.md +231 -0
- package/dist/src/skills/bundled/ai-elements/references/mic-selector.md +193 -0
- package/dist/src/skills/bundled/ai-elements/references/model-selector.md +119 -0
- package/dist/src/skills/bundled/ai-elements/references/node.md +78 -0
- package/dist/src/skills/bundled/ai-elements/references/open-in-chat.md +74 -0
- package/dist/src/skills/bundled/ai-elements/references/package-info.md +102 -0
- package/dist/src/skills/bundled/ai-elements/references/panel.md +38 -0
- package/dist/src/skills/bundled/ai-elements/references/persona.md +173 -0
- package/dist/src/skills/bundled/ai-elements/references/plan.md +86 -0
- package/dist/src/skills/bundled/ai-elements/references/prompt-input.md +572 -0
- package/dist/src/skills/bundled/ai-elements/references/queue.md +179 -0
- package/dist/src/skills/bundled/ai-elements/references/reasoning.md +226 -0
- package/dist/src/skills/bundled/ai-elements/references/sandbox.md +133 -0
- package/dist/src/skills/bundled/ai-elements/references/schema-display.md +109 -0
- package/dist/src/skills/bundled/ai-elements/references/shimmer.md +55 -0
- package/dist/src/skills/bundled/ai-elements/references/snippet.md +71 -0
- package/dist/src/skills/bundled/ai-elements/references/sources.md +200 -0
- package/dist/src/skills/bundled/ai-elements/references/speech-input.md +167 -0
- package/dist/src/skills/bundled/ai-elements/references/stack-trace.md +225 -0
- package/dist/src/skills/bundled/ai-elements/references/suggestion.md +128 -0
- package/dist/src/skills/bundled/ai-elements/references/task.md +222 -0
- package/dist/src/skills/bundled/ai-elements/references/terminal.md +110 -0
- package/dist/src/skills/bundled/ai-elements/references/test-results.md +164 -0
- package/dist/src/skills/bundled/ai-elements/references/tool.md +282 -0
- package/dist/src/skills/bundled/ai-elements/references/toolbar.md +37 -0
- package/dist/src/skills/bundled/ai-elements/references/transcription.md +127 -0
- package/dist/src/skills/bundled/ai-elements/references/voice-selector.md +248 -0
- package/dist/src/skills/bundled/ai-elements/references/web-preview.md +204 -0
- package/dist/src/skills/bundled/ai-elements/scripts/agent.tsx +67 -0
- package/dist/src/skills/bundled/ai-elements/scripts/artifact.tsx +117 -0
- package/dist/src/skills/bundled/ai-elements/scripts/attachments-inline.tsx +123 -0
- package/dist/src/skills/bundled/ai-elements/scripts/attachments-list.tsx +94 -0
- package/dist/src/skills/bundled/ai-elements/scripts/attachments.tsx +84 -0
- package/dist/src/skills/bundled/ai-elements/scripts/audio-player-remote.tsx +35 -0
- package/dist/src/skills/bundled/ai-elements/scripts/audio-player.tsx +74 -0
- package/dist/src/skills/bundled/ai-elements/scripts/chain-of-thought.tsx +80 -0
- package/dist/src/skills/bundled/ai-elements/scripts/checkpoint.tsx +96 -0
- package/dist/src/skills/bundled/ai-elements/scripts/code-block-dark.tsx +46 -0
- package/dist/src/skills/bundled/ai-elements/scripts/code-block.tsx +120 -0
- package/dist/src/skills/bundled/ai-elements/scripts/commit.tsx +94 -0
- package/dist/src/skills/bundled/ai-elements/scripts/confirmation-accepted.tsx +41 -0
- package/dist/src/skills/bundled/ai-elements/scripts/confirmation-rejected.tsx +41 -0
- package/dist/src/skills/bundled/ai-elements/scripts/confirmation-request.tsx +54 -0
- package/dist/src/skills/bundled/ai-elements/scripts/confirmation.tsx +59 -0
- package/dist/src/skills/bundled/ai-elements/scripts/context.tsx +45 -0
- package/dist/src/skills/bundled/ai-elements/scripts/conversation.tsx +182 -0
- package/dist/src/skills/bundled/ai-elements/scripts/environment-variables.tsx +61 -0
- package/dist/src/skills/bundled/ai-elements/scripts/file-tree-basic.tsx +20 -0
- package/dist/src/skills/bundled/ai-elements/scripts/file-tree-expanded.tsx +23 -0
- package/dist/src/skills/bundled/ai-elements/scripts/file-tree-selection.tsx +26 -0
- package/dist/src/skills/bundled/ai-elements/scripts/file-tree.tsx +44 -0
- package/dist/src/skills/bundled/ai-elements/scripts/image.tsx +20 -0
- package/dist/src/skills/bundled/ai-elements/scripts/inline-citation.tsx +101 -0
- package/dist/src/skills/bundled/ai-elements/scripts/jsx-preview.tsx +105 -0
- package/dist/src/skills/bundled/ai-elements/scripts/message.tsx +330 -0
- package/dist/src/skills/bundled/ai-elements/scripts/mic-selector.tsx +52 -0
- package/dist/src/skills/bundled/ai-elements/scripts/model-selector.tsx +368 -0
- package/dist/src/skills/bundled/ai-elements/scripts/open-in-chat.tsx +33 -0
- package/dist/src/skills/bundled/ai-elements/scripts/package-info.tsx +52 -0
- package/dist/src/skills/bundled/ai-elements/scripts/persona-command.tsx +101 -0
- package/dist/src/skills/bundled/ai-elements/scripts/persona-glint.tsx +101 -0
- package/dist/src/skills/bundled/ai-elements/scripts/persona-halo.tsx +101 -0
- package/dist/src/skills/bundled/ai-elements/scripts/persona-mana.tsx +101 -0
- package/dist/src/skills/bundled/ai-elements/scripts/persona-obsidian.tsx +101 -0
- package/dist/src/skills/bundled/ai-elements/scripts/persona-opal.tsx +101 -0
- package/dist/src/skills/bundled/ai-elements/scripts/plan.tsx +69 -0
- package/dist/src/skills/bundled/ai-elements/scripts/prompt-input-cursor.tsx +462 -0
- package/dist/src/skills/bundled/ai-elements/scripts/prompt-input-tooltip.tsx +46 -0
- package/dist/src/skills/bundled/ai-elements/scripts/prompt-input.tsx +254 -0
- package/dist/src/skills/bundled/ai-elements/scripts/queue-prompt-input.tsx +372 -0
- package/dist/src/skills/bundled/ai-elements/scripts/queue.tsx +281 -0
- package/dist/src/skills/bundled/ai-elements/scripts/reasoning.tsx +73 -0
- package/dist/src/skills/bundled/ai-elements/scripts/sandbox.tsx +171 -0
- package/dist/src/skills/bundled/ai-elements/scripts/schema-display-basic.tsx +13 -0
- package/dist/src/skills/bundled/ai-elements/scripts/schema-display-body.tsx +20 -0
- package/dist/src/skills/bundled/ai-elements/scripts/schema-display-nested.tsx +23 -0
- package/dist/src/skills/bundled/ai-elements/scripts/schema-display-params.tsx +16 -0
- package/dist/src/skills/bundled/ai-elements/scripts/schema-display.tsx +110 -0
- package/dist/src/skills/bundled/ai-elements/scripts/shimmer-duration.tsx +35 -0
- package/dist/src/skills/bundled/ai-elements/scripts/shimmer-elements.tsx +45 -0
- package/dist/src/skills/bundled/ai-elements/scripts/shimmer.tsx +17 -0
- package/dist/src/skills/bundled/ai-elements/scripts/snippet-plain.tsx +19 -0
- package/dist/src/skills/bundled/ai-elements/scripts/snippet.tsx +25 -0
- package/dist/src/skills/bundled/ai-elements/scripts/sources-custom.tsx +40 -0
- package/dist/src/skills/bundled/ai-elements/scripts/sources.tsx +33 -0
- package/dist/src/skills/bundled/ai-elements/scripts/speech-input.tsx +85 -0
- package/dist/src/skills/bundled/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
- package/dist/src/skills/bundled/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
- package/dist/src/skills/bundled/ai-elements/scripts/stack-trace.tsx +60 -0
- package/dist/src/skills/bundled/ai-elements/scripts/suggestion-input.tsx +142 -0
- package/dist/src/skills/bundled/ai-elements/scripts/suggestion.tsx +34 -0
- package/dist/src/skills/bundled/ai-elements/scripts/task.tsx +59 -0
- package/dist/src/skills/bundled/ai-elements/scripts/terminal-basic.tsx +7 -0
- package/dist/src/skills/bundled/ai-elements/scripts/terminal-clear.tsx +19 -0
- package/dist/src/skills/bundled/ai-elements/scripts/terminal-streaming.tsx +38 -0
- package/dist/src/skills/bundled/ai-elements/scripts/terminal.tsx +83 -0
- package/dist/src/skills/bundled/ai-elements/scripts/test-results-basic.tsx +27 -0
- package/dist/src/skills/bundled/ai-elements/scripts/test-results-errors.tsx +51 -0
- package/dist/src/skills/bundled/ai-elements/scripts/test-results-suites.tsx +40 -0
- package/dist/src/skills/bundled/ai-elements/scripts/test-results.tsx +84 -0
- package/dist/src/skills/bundled/ai-elements/scripts/tool-input-available.tsx +31 -0
- package/dist/src/skills/bundled/ai-elements/scripts/tool-input-streaming.tsx +30 -0
- package/dist/src/skills/bundled/ai-elements/scripts/tool-output-available.tsx +81 -0
- package/dist/src/skills/bundled/ai-elements/scripts/tool-output-error.tsx +50 -0
- package/dist/src/skills/bundled/ai-elements/scripts/tool.tsx +210 -0
- package/dist/src/skills/bundled/ai-elements/scripts/transcription.tsx +289 -0
- package/dist/src/skills/bundled/ai-elements/scripts/voice-selector.tsx +233 -0
- package/dist/src/skills/bundled/ai-elements/scripts/web-preview.tsx +105 -0
- package/dist/src/skills/bundled/control-browser/SKILL.md +21 -0
- package/dist/src/skills/bundled/dynamic-workflows/SKILL.md +1520 -0
- package/dist/src/skills/bundled/dynamic-workflows/examples.md +801 -0
- package/dist/src/skills/bundled/dynamic-workflows/patterns.md +460 -0
- package/dist/src/skills/bundled/provenance.json +684 -0
- package/dist/src/skills/bundled/web-gui-tester/SKILL.md +159 -0
- package/dist/src/skills/project-skills.d.ts +11 -0
- package/dist/src/skills/project-skills.js +132 -0
- package/dist/src/skills/runtime-skills.d.ts +10 -0
- package/dist/src/skills/runtime-skills.js +237 -0
- package/dist/src/subagent-run.d.ts +278 -0
- package/dist/src/subagent-run.js +930 -0
- package/dist/src/telemetry/aggregate.d.ts +80 -0
- package/dist/src/telemetry/aggregate.js +217 -0
- package/dist/src/telemetry/capture-core.d.ts +190 -0
- package/dist/src/telemetry/capture-core.js +374 -0
- package/dist/src/telemetry/capture.d.ts +5 -0
- package/dist/src/telemetry/capture.js +16 -0
- package/dist/src/telemetry/classify.d.ts +102 -0
- package/dist/src/telemetry/classify.js +252 -0
- package/dist/src/telemetry/decision-capture.d.ts +13 -0
- package/dist/src/telemetry/decision-capture.js +40 -0
- package/dist/src/telemetry/emitter.d.ts +77 -0
- package/dist/src/telemetry/emitter.js +279 -0
- package/dist/src/telemetry/gate.d.ts +48 -0
- package/dist/src/telemetry/gate.js +55 -0
- package/dist/src/telemetry/identity.d.ts +19 -0
- package/dist/src/telemetry/identity.js +109 -0
- package/dist/src/telemetry/outbox.d.ts +91 -0
- package/dist/src/telemetry/outbox.js +356 -0
- package/dist/src/telemetry/schema.d.ts +184 -0
- package/dist/src/telemetry/schema.js +492 -0
- package/dist/src/telemetry/state.d.ts +90 -0
- package/dist/src/telemetry/state.js +195 -0
- package/dist/src/telemetry/surface.d.ts +76 -0
- package/dist/src/telemetry/surface.js +116 -0
- package/dist/src/telemetry/uploader.d.ts +29 -0
- package/dist/src/telemetry/uploader.js +151 -0
- package/dist/src/telemetry/uploads.d.ts +13 -0
- package/dist/src/telemetry/uploads.js +19 -0
- package/dist/src/telemetry/version.d.ts +5 -0
- package/dist/src/telemetry/version.js +25 -0
- package/dist/src/telemetry/workspace.d.ts +14 -0
- package/dist/src/telemetry/workspace.js +93 -0
- package/dist/src/terminal-ui.d.ts +744 -0
- package/dist/src/terminal-ui.js +3012 -0
- package/dist/src/text.d.ts +2 -0
- package/dist/src/text.js +8 -0
- package/dist/src/timers.d.ts +189 -0
- package/dist/src/timers.js +244 -0
- package/dist/src/todos.d.ts +12 -0
- package/dist/src/todos.js +33 -0
- package/dist/src/token-rate.d.ts +119 -0
- package/dist/src/token-rate.js +287 -0
- package/dist/src/tool-activity.d.ts +20 -0
- package/dist/src/tool-activity.js +76 -0
- package/dist/src/tool-call-clock.d.ts +32 -0
- package/dist/src/tool-call-clock.js +157 -0
- package/dist/src/tool-catalog.d.ts +40 -0
- package/dist/src/tool-catalog.js +100 -0
- package/dist/src/tool-dependencies.d.ts +23 -0
- package/dist/src/tool-dependencies.js +36 -0
- package/dist/src/tool-diff-stats.d.ts +24 -0
- package/dist/src/tool-diff-stats.js +122 -0
- package/dist/src/tool-errors.d.ts +12 -0
- package/dist/src/tool-errors.js +13 -0
- package/dist/src/tool-failure-tracker.d.ts +17 -0
- package/dist/src/tool-failure-tracker.js +71 -0
- package/dist/src/tool-names.d.ts +16 -0
- package/dist/src/tool-names.js +75 -0
- package/dist/src/tool-result-filter.d.ts +65 -0
- package/dist/src/tool-result-filter.js +447 -0
- package/dist/src/tool-schema-compatibility.d.ts +2 -0
- package/dist/src/tool-schema-compatibility.js +42 -0
- package/dist/src/tools.d.ts +3 -0
- package/dist/src/tools.js +663 -0
- package/dist/src/trajectory.d.ts +34 -0
- package/dist/src/trajectory.js +426 -0
- package/dist/src/transcript.d.ts +45 -0
- package/dist/src/transcript.js +228 -0
- package/dist/src/types.d.ts +248 -0
- package/dist/src/types.js +1 -0
- package/dist/src/update.d.ts +48 -0
- package/dist/src/update.js +614 -0
- package/dist/src/usage-analytics.d.ts +48 -0
- package/dist/src/usage-analytics.js +663 -0
- package/dist/src/widgets.d.ts +45 -0
- package/dist/src/widgets.js +71 -0
- package/dist/src/workspace-facts.d.ts +35 -0
- package/dist/src/workspace-facts.js +85 -0
- package/dist/src/workspace-git-metadata.d.ts +6 -0
- package/dist/src/workspace-git-metadata.js +114 -0
- package/dist/src/workspace-instructions.d.ts +7 -0
- package/dist/src/workspace-instructions.js +46 -0
- package/dist/vendor/engine/LICENSE.upstream +21 -0
- package/dist/vendor/engine/provenance.json +17923 -0
- package/dist/vendor/engine/runtime/agent/agent-loop.d.ts +23 -0
- package/dist/vendor/engine/runtime/agent/agent-loop.js +601 -0
- package/dist/vendor/engine/runtime/agent/agent.d.ts +130 -0
- package/dist/vendor/engine/runtime/agent/agent.js +430 -0
- package/dist/vendor/engine/runtime/agent/harness/agent-harness.d.ts +715 -0
- package/dist/vendor/engine/runtime/agent/harness/agent-harness.js +5 -0
- package/dist/vendor/engine/runtime/agent/harness/compaction/branch-summarization.d.ts +67 -0
- package/dist/vendor/engine/runtime/agent/harness/compaction/branch-summarization.js +175 -0
- package/dist/vendor/engine/runtime/agent/harness/compaction/compaction.d.ts +125 -0
- package/dist/vendor/engine/runtime/agent/harness/compaction/compaction.js +559 -0
- package/dist/vendor/engine/runtime/agent/harness/compaction/utils.d.ts +24 -0
- package/dist/vendor/engine/runtime/agent/harness/compaction/utils.js +119 -0
- package/dist/vendor/engine/runtime/agent/harness/config.d.ts +8 -0
- package/dist/vendor/engine/runtime/agent/harness/config.js +34 -0
- package/dist/vendor/engine/runtime/agent/harness/context.d.ts +8 -0
- package/dist/vendor/engine/runtime/agent/harness/context.js +12 -0
- package/dist/vendor/engine/runtime/agent/harness/events.d.ts +24 -0
- package/dist/vendor/engine/runtime/agent/harness/events.js +249 -0
- package/dist/vendor/engine/runtime/agent/harness/execution/assistant.d.ts +41 -0
- package/dist/vendor/engine/runtime/agent/harness/execution/assistant.js +81 -0
- package/dist/vendor/engine/runtime/agent/harness/execution/effect-gate.d.ts +21 -0
- package/dist/vendor/engine/runtime/agent/harness/execution/effect-gate.js +48 -0
- package/dist/vendor/engine/runtime/agent/harness/execution/tools.d.ts +66 -0
- package/dist/vendor/engine/runtime/agent/harness/execution/tools.js +118 -0
- package/dist/vendor/engine/runtime/agent/harness/hooks.d.ts +37 -0
- package/dist/vendor/engine/runtime/agent/harness/hooks.js +405 -0
- package/dist/vendor/engine/runtime/agent/harness/messages.d.ts +50 -0
- package/dist/vendor/engine/runtime/agent/harness/messages.js +102 -0
- package/dist/vendor/engine/runtime/agent/harness/prompt-templates.d.ts +48 -0
- package/dist/vendor/engine/runtime/agent/harness/prompt-templates.js +224 -0
- package/dist/vendor/engine/runtime/agent/harness/result.d.ts +132 -0
- package/dist/vendor/engine/runtime/agent/harness/result.js +80 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/boundary.d.ts +27 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/boundary.js +172 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/checkpoint.d.ts +7 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/checkpoint.js +132 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/deferred.d.ts +14 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/deferred.js +178 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/generation.d.ts +7 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/generation.js +204 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/reconcile.d.ts +4 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/reconcile.js +139 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/recovery.d.ts +7 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/recovery.js +84 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/response.d.ts +22 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/response.js +393 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/retry.d.ts +3 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/retry.js +33 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/structural.d.ts +31 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/structural.js +928 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/terminal.d.ts +6 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/terminal.js +48 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/tool-placement.d.ts +13 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/tool-placement.js +218 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/tools.d.ts +5 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive/tools.js +448 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive.d.ts +5 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/drive.js +92 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/harness.d.ts +58 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/harness.js +310 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/lane.d.ts +117 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/lane.js +1574 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/progress.d.ts +14 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/progress.js +65 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/reducer.d.ts +4 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/reducer.js +239 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/restore.d.ts +23 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/restore.js +116 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/transcript.d.ts +20 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/transcript.js +71 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/types.d.ts +104 -0
- package/dist/vendor/engine/runtime/agent/harness/runtime/types.js +60 -0
- package/dist/vendor/engine/runtime/agent/harness/session/commit.d.ts +52 -0
- package/dist/vendor/engine/runtime/agent/harness/session/commit.js +56 -0
- package/dist/vendor/engine/runtime/agent/harness/session/context.d.ts +9 -0
- package/dist/vendor/engine/runtime/agent/harness/session/context.js +48 -0
- package/dist/vendor/engine/runtime/agent/harness/session/fork-policy.d.ts +20 -0
- package/dist/vendor/engine/runtime/agent/harness/session/fork-policy.js +54 -0
- package/dist/vendor/engine/runtime/agent/harness/session/fork.d.ts +15 -0
- package/dist/vendor/engine/runtime/agent/harness/session/fork.js +78 -0
- package/dist/vendor/engine/runtime/agent/harness/session/in-memory-storage-state.d.ts +38 -0
- package/dist/vendor/engine/runtime/agent/harness/session/in-memory-storage-state.js +275 -0
- package/dist/vendor/engine/runtime/agent/harness/session/index.d.ts +10 -0
- package/dist/vendor/engine/runtime/agent/harness/session/index.js +8 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/codec.d.ts +20 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/codec.js +44 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/fork.d.ts +37 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/fork.js +263 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/index.d.ts +3 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/index.js +3 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/io.d.ts +13 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/io.js +85 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/legacy-v3.d.ts +43 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/legacy-v3.js +461 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/repo.d.ts +34 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/repo.js +300 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/storage.d.ts +40 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/storage.js +199 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/types.d.ts +38 -0
- package/dist/vendor/engine/runtime/agent/harness/session/jsonl/types.js +2 -0
- package/dist/vendor/engine/runtime/agent/harness/session/memory.d.ts +47 -0
- package/dist/vendor/engine/runtime/agent/harness/session/memory.js +368 -0
- package/dist/vendor/engine/runtime/agent/harness/session/mutation-line.d.ts +7 -0
- package/dist/vendor/engine/runtime/agent/harness/session/mutation-line.js +20 -0
- package/dist/vendor/engine/runtime/agent/harness/session/session.d.ts +81 -0
- package/dist/vendor/engine/runtime/agent/harness/session/session.js +360 -0
- package/dist/vendor/engine/runtime/agent/harness/session/types.d.ts +511 -0
- package/dist/vendor/engine/runtime/agent/harness/session/types.js +8 -0
- package/dist/vendor/engine/runtime/agent/harness/session/values.d.ts +94 -0
- package/dist/vendor/engine/runtime/agent/harness/session/values.js +80 -0
- package/dist/vendor/engine/runtime/agent/harness/skills.d.ts +45 -0
- package/dist/vendor/engine/runtime/agent/harness/skills.js +325 -0
- package/dist/vendor/engine/runtime/agent/harness/system-prompt.d.ts +2 -0
- package/dist/vendor/engine/runtime/agent/harness/system-prompt.js +29 -0
- package/dist/vendor/engine/runtime/agent/harness/telemetry.d.ts +1241 -0
- package/dist/vendor/engine/runtime/agent/harness/telemetry.js +526 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/bash.d.ts +26 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/bash.js +104 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/edit-diff.d.ts +88 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/edit-diff.js +385 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/edit.d.ts +18 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/edit.js +107 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/file-mutation-queue.d.ts +4 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/file-mutation-queue.js +45 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/image.d.ts +2 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/image.js +105 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/index.d.ts +5 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/index.js +4 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/path-utils.d.ts +4 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/path-utils.js +25 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/read.d.ts +34 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/read.js +107 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/tool-context.d.ts +5 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/tool-context.js +1 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/write.d.ts +10 -0
- package/dist/vendor/engine/runtime/agent/harness/tools/write.js +30 -0
- package/dist/vendor/engine/runtime/agent/harness/types.d.ts +304 -0
- package/dist/vendor/engine/runtime/agent/harness/types.js +74 -0
- package/dist/vendor/engine/runtime/agent/harness/utils/adaptive-publisher.d.ts +23 -0
- package/dist/vendor/engine/runtime/agent/harness/utils/adaptive-publisher.js +78 -0
- package/dist/vendor/engine/runtime/agent/harness/utils/output-capture.d.ts +30 -0
- package/dist/vendor/engine/runtime/agent/harness/utils/output-capture.js +216 -0
- package/dist/vendor/engine/runtime/agent/harness/utils/shell-output.d.ts +28 -0
- package/dist/vendor/engine/runtime/agent/harness/utils/shell-output.js +70 -0
- package/dist/vendor/engine/runtime/agent/harness/utils/truncate.d.ts +70 -0
- package/dist/vendor/engine/runtime/agent/harness/utils/truncate.js +295 -0
- package/dist/vendor/engine/runtime/agent/harness/utils/usage.d.ts +3 -0
- package/dist/vendor/engine/runtime/agent/harness/utils/usage.js +32 -0
- package/dist/vendor/engine/runtime/agent/index.d.ts +27 -0
- package/dist/vendor/engine/runtime/agent/index.js +25 -0
- package/dist/vendor/engine/runtime/agent/proxy.d.ts +71 -0
- package/dist/vendor/engine/runtime/agent/proxy.js +309 -0
- package/dist/vendor/engine/runtime/agent/search/index.d.ts +28 -0
- package/dist/vendor/engine/runtime/agent/search/index.js +1 -0
- package/dist/vendor/engine/runtime/agent/stream-fn.d.ts +9 -0
- package/dist/vendor/engine/runtime/agent/stream-fn.js +16 -0
- package/dist/vendor/engine/runtime/agent/types.d.ts +431 -0
- package/dist/vendor/engine/runtime/agent/types.js +1 -0
- package/dist/vendor/engine/runtime/ai/api/anthropic-messages.d.ts +70 -0
- package/dist/vendor/engine/runtime/ai/api/anthropic-messages.js +1204 -0
- package/dist/vendor/engine/runtime/ai/api/anthropic-messages.lazy.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/anthropic-messages.lazy.js +2 -0
- package/dist/vendor/engine/runtime/ai/api/azure-openai-responses.d.ts +16 -0
- package/dist/vendor/engine/runtime/ai/api/azure-openai-responses.js +260 -0
- package/dist/vendor/engine/runtime/ai/api/azure-openai-responses.lazy.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/azure-openai-responses.lazy.js +2 -0
- package/dist/vendor/engine/runtime/ai/api/bedrock-converse-stream.d.ts +37 -0
- package/dist/vendor/engine/runtime/ai/api/bedrock-converse-stream.js +1091 -0
- package/dist/vendor/engine/runtime/ai/api/bedrock-converse-stream.lazy.d.ts +9 -0
- package/dist/vendor/engine/runtime/ai/api/bedrock-converse-stream.lazy.js +21 -0
- package/dist/vendor/engine/runtime/ai/api/constrained-sampling.d.ts +19 -0
- package/dist/vendor/engine/runtime/ai/api/constrained-sampling.js +221 -0
- package/dist/vendor/engine/runtime/ai/api/github-copilot-headers.d.ts +7 -0
- package/dist/vendor/engine/runtime/ai/api/github-copilot-headers.js +28 -0
- package/dist/vendor/engine/runtime/ai/api/google-generative-ai.d.ts +12 -0
- package/dist/vendor/engine/runtime/ai/api/google-generative-ai.js +368 -0
- package/dist/vendor/engine/runtime/ai/api/google-generative-ai.lazy.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/google-generative-ai.lazy.js +2 -0
- package/dist/vendor/engine/runtime/ai/api/google-shared.d.ts +92 -0
- package/dist/vendor/engine/runtime/ai/api/google-shared.js +450 -0
- package/dist/vendor/engine/runtime/ai/api/google-vertex.d.ts +14 -0
- package/dist/vendor/engine/runtime/ai/api/google-vertex.js +429 -0
- package/dist/vendor/engine/runtime/ai/api/google-vertex.lazy.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/google-vertex.lazy.js +2 -0
- package/dist/vendor/engine/runtime/ai/api/lazy.d.ts +24 -0
- package/dist/vendor/engine/runtime/ai/api/lazy.js +69 -0
- package/dist/vendor/engine/runtime/ai/api/mistral-conversations.d.ts +24 -0
- package/dist/vendor/engine/runtime/ai/api/mistral-conversations.js +747 -0
- package/dist/vendor/engine/runtime/ai/api/mistral-conversations.lazy.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/mistral-conversations.lazy.js +2 -0
- package/dist/vendor/engine/runtime/ai/api/openai-codex-responses.d.ts +30 -0
- package/dist/vendor/engine/runtime/ai/api/openai-codex-responses.js +1302 -0
- package/dist/vendor/engine/runtime/ai/api/openai-codex-responses.lazy.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/openai-codex-responses.lazy.js +2 -0
- package/dist/vendor/engine/runtime/ai/api/openai-completions.d.ts +25 -0
- package/dist/vendor/engine/runtime/ai/api/openai-completions.js +1339 -0
- package/dist/vendor/engine/runtime/ai/api/openai-completions.lazy.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/openai-completions.lazy.js +2 -0
- package/dist/vendor/engine/runtime/ai/api/openai-prompt-cache.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/openai-prompt-cache.js +9 -0
- package/dist/vendor/engine/runtime/ai/api/openai-responses-shared.d.ts +27 -0
- package/dist/vendor/engine/runtime/ai/api/openai-responses-shared.js +688 -0
- package/dist/vendor/engine/runtime/ai/api/openai-responses.d.ts +13 -0
- package/dist/vendor/engine/runtime/ai/api/openai-responses.js +292 -0
- package/dist/vendor/engine/runtime/ai/api/openai-responses.lazy.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/openai-responses.lazy.js +2 -0
- package/dist/vendor/engine/runtime/ai/api/openrouter-images.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/openrouter-images.js +131 -0
- package/dist/vendor/engine/runtime/ai/api/openrouter-images.lazy.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/openrouter-images.lazy.js +3 -0
- package/dist/vendor/engine/runtime/ai/api/pi-messages.d.ts +98 -0
- package/dist/vendor/engine/runtime/ai/api/pi-messages.js +312 -0
- package/dist/vendor/engine/runtime/ai/api/pi-messages.lazy.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/api/pi-messages.lazy.js +2 -0
- package/dist/vendor/engine/runtime/ai/api/simple-options.d.ts +14 -0
- package/dist/vendor/engine/runtime/ai/api/simple-options.js +65 -0
- package/dist/vendor/engine/runtime/ai/api/transform-messages.d.ts +7 -0
- package/dist/vendor/engine/runtime/ai/api/transform-messages.js +200 -0
- package/dist/vendor/engine/runtime/ai/auth/context.d.ts +6 -0
- package/dist/vendor/engine/runtime/ai/auth/context.js +33 -0
- package/dist/vendor/engine/runtime/ai/auth/credential-store.d.ts +16 -0
- package/dist/vendor/engine/runtime/ai/auth/credential-store.js +50 -0
- package/dist/vendor/engine/runtime/ai/auth/helpers.d.ts +21 -0
- package/dist/vendor/engine/runtime/ai/auth/helpers.js +52 -0
- package/dist/vendor/engine/runtime/ai/auth/oauth/load.d.ts +28 -0
- package/dist/vendor/engine/runtime/ai/auth/oauth/load.js +55 -0
- package/dist/vendor/engine/runtime/ai/auth/resolve.d.ts +26 -0
- package/dist/vendor/engine/runtime/ai/auth/resolve.js +131 -0
- package/dist/vendor/engine/runtime/ai/auth/types.d.ts +230 -0
- package/dist/vendor/engine/runtime/ai/auth/types.js +1 -0
- package/dist/vendor/engine/runtime/ai/compat/extension-oauth-types.d.ts +38 -0
- package/dist/vendor/engine/runtime/ai/compat/extension-oauth-types.js +1 -0
- package/dist/vendor/engine/runtime/ai/compat.d.ts +66 -0
- package/dist/vendor/engine/runtime/ai/compat.js +201 -0
- package/dist/vendor/engine/runtime/ai/env-api-keys.d.ts +20 -0
- package/dist/vendor/engine/runtime/ai/env-api-keys.js +148 -0
- package/dist/vendor/engine/runtime/ai/image-models.d.ts +9 -0
- package/dist/vendor/engine/runtime/ai/image-models.generated.d.ts +814 -0
- package/dist/vendor/engine/runtime/ai/image-models.generated.js +816 -0
- package/dist/vendor/engine/runtime/ai/image-models.js +22 -0
- package/dist/vendor/engine/runtime/ai/images-api-registry.d.ts +13 -0
- package/dist/vendor/engine/runtime/ai/images-api-registry.js +21 -0
- package/dist/vendor/engine/runtime/ai/images-models.d.ts +94 -0
- package/dist/vendor/engine/runtime/ai/images-models.js +142 -0
- package/dist/vendor/engine/runtime/ai/images.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/images.js +13 -0
- package/dist/vendor/engine/runtime/ai/index.d.ts +36 -0
- package/dist/vendor/engine/runtime/ai/index.js +23 -0
- package/dist/vendor/engine/runtime/ai/legacy-api-aliases.d.ts +41 -0
- package/dist/vendor/engine/runtime/ai/legacy-api-aliases.js +48 -0
- package/dist/vendor/engine/runtime/ai/model-catalog.d.ts +16 -0
- package/dist/vendor/engine/runtime/ai/model-catalog.js +3 -0
- package/dist/vendor/engine/runtime/ai/models-store.d.ts +28 -0
- package/dist/vendor/engine/runtime/ai/models-store.js +16 -0
- package/dist/vendor/engine/runtime/ai/models.d.ts +201 -0
- package/dist/vendor/engine/runtime/ai/models.generated.d.ts +84 -0
- package/dist/vendor/engine/runtime/ai/models.generated.js +86 -0
- package/dist/vendor/engine/runtime/ai/models.js +593 -0
- package/dist/vendor/engine/runtime/ai/oauth.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/oauth.js +1 -0
- package/dist/vendor/engine/runtime/ai/providers/all.d.ts +27 -0
- package/dist/vendor/engine/runtime/ai/providers/all.js +132 -0
- package/dist/vendor/engine/runtime/ai/providers/amazon-bedrock.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/amazon-bedrock.js +92 -0
- package/dist/vendor/engine/runtime/ai/providers/amazon-bedrock.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/amazon-bedrock.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/ant-ling.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/ant-ling.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/ant-ling.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/ant-ling.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/anthropic.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/anthropic.js +55 -0
- package/dist/vendor/engine/runtime/ai/providers/anthropic.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/anthropic.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/azure-openai-responses.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/azure-openai-responses.js +13 -0
- package/dist/vendor/engine/runtime/ai/providers/azure-openai-responses.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/azure-openai-responses.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/baseten.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/baseten.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/baseten.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/baseten.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/cerebras.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/cerebras.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/cerebras.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/cerebras.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-ai-gateway.d.ts +4 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-ai-gateway.js +24 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-ai-gateway.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-ai-gateway.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-auth.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-auth.js +85 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-stream.d.ts +7 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-stream.js +20 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-workers-ai.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-workers-ai.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-workers-ai.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/cloudflare-workers-ai.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/data/.manifest.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/amazon-bedrock.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/ant-ling.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/anthropic.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/azure-openai-responses.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/baseten.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/cerebras.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/cloudflare-ai-gateway.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/cloudflare-workers-ai.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/deepseek.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/fireworks.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/github-copilot.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/google-vertex.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/google.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/groq.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/huggingface.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/kimi-coding.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/meta.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/minimax-cn.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/minimax.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/mistral.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/moonshotai-cn.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/moonshotai.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/nvidia.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/openai-codex.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/openai.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/opencode-go.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/opencode.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/openrouter.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/qwen-token-plan-cn.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/qwen-token-plan-individual.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/qwen-token-plan.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/radius.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/together.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/vercel-ai-gateway.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/xai.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/xiaomi-token-plan-ams.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/xiaomi-token-plan-cn.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/xiaomi-token-plan-sgp.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/xiaomi.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/zai-coding-cn.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/data/zai.json +1 -0
- package/dist/vendor/engine/runtime/ai/providers/deepseek.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/deepseek.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/deepseek.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/deepseek.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/faux.d.ts +102 -0
- package/dist/vendor/engine/runtime/ai/providers/faux.js +488 -0
- package/dist/vendor/engine/runtime/ai/providers/fireworks.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/fireworks.js +18 -0
- package/dist/vendor/engine/runtime/ai/providers/fireworks.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/fireworks.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/github-copilot.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/github-copilot.js +34 -0
- package/dist/vendor/engine/runtime/ai/providers/github-copilot.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/github-copilot.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/google-vertex.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/google-vertex.js +93 -0
- package/dist/vendor/engine/runtime/ai/providers/google-vertex.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/google-vertex.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/google.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/google.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/google.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/google.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/groq.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/groq.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/groq.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/groq.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/huggingface.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/huggingface.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/huggingface.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/huggingface.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/images/register-builtins.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/images/register-builtins.js +33 -0
- package/dist/vendor/engine/runtime/ai/providers/kimi-coding.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/kimi-coding.js +23 -0
- package/dist/vendor/engine/runtime/ai/providers/kimi-coding.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/kimi-coding.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/meta.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/meta.js +23 -0
- package/dist/vendor/engine/runtime/ai/providers/meta.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/meta.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/minimax-cn.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/minimax-cn.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/minimax-cn.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/minimax-cn.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/minimax.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/minimax.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/minimax.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/minimax.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/mistral.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/mistral.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/mistral.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/mistral.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/moonshotai-cn.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/moonshotai-cn.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/moonshotai-cn.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/moonshotai-cn.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/moonshotai.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/moonshotai.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/moonshotai.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/moonshotai.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/nvidia.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/nvidia.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/nvidia.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/nvidia.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/openai-codex.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/openai-codex.js +21 -0
- package/dist/vendor/engine/runtime/ai/providers/openai-codex.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/openai-codex.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/openai.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/openai.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/openai.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/openai.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/opencode-go.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/opencode-go.js +20 -0
- package/dist/vendor/engine/runtime/ai/providers/opencode-go.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/opencode-go.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/opencode-headers.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/opencode-headers.js +21 -0
- package/dist/vendor/engine/runtime/ai/providers/opencode.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/opencode.js +22 -0
- package/dist/vendor/engine/runtime/ai/providers/opencode.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/opencode.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/openrouter-images.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/openrouter-images.js +21 -0
- package/dist/vendor/engine/runtime/ai/providers/openrouter.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/openrouter.js +26 -0
- package/dist/vendor/engine/runtime/ai/providers/openrouter.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/openrouter.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-cn.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-cn.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-cn.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-cn.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-individual.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-individual.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-individual.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-individual.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/radius-config.d.ts +25 -0
- package/dist/vendor/engine/runtime/ai/providers/radius-config.js +62 -0
- package/dist/vendor/engine/runtime/ai/providers/radius.d.ts +8 -0
- package/dist/vendor/engine/runtime/ai/providers/radius.js +77 -0
- package/dist/vendor/engine/runtime/ai/providers/radius.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/radius.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/together.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/together.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/together.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/together.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/vercel-ai-gateway.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/vercel-ai-gateway.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/vercel-ai-gateway.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/vercel-ai-gateway.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/xai.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/xai.js +23 -0
- package/dist/vendor/engine/runtime/ai/providers/xai.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/xai.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-ams.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-ams.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-ams.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-ams.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-cn.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-cn.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-cn.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-cn.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-sgp.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-sgp.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-sgp.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-sgp.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/xiaomi.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/zai-coding-cn.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/zai-coding-cn.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/zai-coding-cn.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/zai-coding-cn.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/providers/zai.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/providers/zai.js +14 -0
- package/dist/vendor/engine/runtime/ai/providers/zai.models.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/providers/zai.models.js +5 -0
- package/dist/vendor/engine/runtime/ai/session-resources.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/session-resources.js +21 -0
- package/dist/vendor/engine/runtime/ai/types.d.ts +835 -0
- package/dist/vendor/engine/runtime/ai/types.js +1 -0
- package/dist/vendor/engine/runtime/ai/utils/abort-signals.d.ts +5 -0
- package/dist/vendor/engine/runtime/ai/utils/abort-signals.js +33 -0
- package/dist/vendor/engine/runtime/ai/utils/abort.d.ts +7 -0
- package/dist/vendor/engine/runtime/ai/utils/abort.js +48 -0
- package/dist/vendor/engine/runtime/ai/utils/assistant-message-frame.d.ts +76 -0
- package/dist/vendor/engine/runtime/ai/utils/assistant-message-frame.js +424 -0
- package/dist/vendor/engine/runtime/ai/utils/diagnostics.d.ts +19 -0
- package/dist/vendor/engine/runtime/ai/utils/diagnostics.js +24 -0
- package/dist/vendor/engine/runtime/ai/utils/error-body.d.ts +24 -0
- package/dist/vendor/engine/runtime/ai/utils/error-body.js +132 -0
- package/dist/vendor/engine/runtime/ai/utils/estimate.d.ts +16 -0
- package/dist/vendor/engine/runtime/ai/utils/estimate.js +94 -0
- package/dist/vendor/engine/runtime/ai/utils/event-stream.d.ts +20 -0
- package/dist/vendor/engine/runtime/ai/utils/event-stream.js +98 -0
- package/dist/vendor/engine/runtime/ai/utils/hash.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/utils/hash.js +13 -0
- package/dist/vendor/engine/runtime/ai/utils/headers.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/utils/headers.js +17 -0
- package/dist/vendor/engine/runtime/ai/utils/json-parse.d.ts +15 -0
- package/dist/vendor/engine/runtime/ai/utils/json-parse.js +112 -0
- package/dist/vendor/engine/runtime/ai/utils/node-http-proxy.d.ts +3 -0
- package/dist/vendor/engine/runtime/ai/utils/node-http-proxy.js +132 -0
- package/dist/vendor/engine/runtime/ai/utils/overflow.d.ts +68 -0
- package/dist/vendor/engine/runtime/ai/utils/overflow.js +177 -0
- package/dist/vendor/engine/runtime/ai/utils/pi-user-agent.d.ts +1 -0
- package/dist/vendor/engine/runtime/ai/utils/pi-user-agent.js +11 -0
- package/dist/vendor/engine/runtime/ai/utils/provider-env.d.ts +6 -0
- package/dist/vendor/engine/runtime/ai/utils/provider-env.js +43 -0
- package/dist/vendor/engine/runtime/ai/utils/provider-retry.d.ts +15 -0
- package/dist/vendor/engine/runtime/ai/utils/provider-retry.js +93 -0
- package/dist/vendor/engine/runtime/ai/utils/retry.d.ts +57 -0
- package/dist/vendor/engine/runtime/ai/utils/retry.js +182 -0
- package/dist/vendor/engine/runtime/ai/utils/sanitize-unicode.d.ts +21 -0
- package/dist/vendor/engine/runtime/ai/utils/sanitize-unicode.js +25 -0
- package/dist/vendor/engine/runtime/ai/utils/text.d.ts +13 -0
- package/dist/vendor/engine/runtime/ai/utils/text.js +35 -0
- package/dist/vendor/engine/runtime/ai/utils/transcript.d.ts +83 -0
- package/dist/vendor/engine/runtime/ai/utils/transcript.js +203 -0
- package/dist/vendor/engine/runtime/ai/utils/typebox-helpers.d.ts +16 -0
- package/dist/vendor/engine/runtime/ai/utils/typebox-helpers.js +20 -0
- package/dist/vendor/engine/runtime/ai/utils/uuid.d.ts +2 -0
- package/dist/vendor/engine/runtime/ai/utils/uuid.js +41 -0
- package/dist/vendor/engine/runtime/ai/utils/validation.d.ts +17 -0
- package/dist/vendor/engine/runtime/ai/utils/validation.js +308 -0
- package/dist/vendor/engine/runtime/chord/api.d.ts +14 -0
- package/dist/vendor/engine/runtime/chord/api.js +71 -0
- package/dist/vendor/engine/runtime/chord/context/index.d.ts +23 -0
- package/dist/vendor/engine/runtime/chord/context/index.js +96 -0
- package/dist/vendor/engine/runtime/chord/delta/index.d.ts +118 -0
- package/dist/vendor/engine/runtime/chord/delta/index.js +1903 -0
- package/dist/vendor/engine/runtime/chord/facets/host.d.ts +11 -0
- package/dist/vendor/engine/runtime/chord/facets/host.js +762 -0
- package/dist/vendor/engine/runtime/chord/facets/loader.d.ts +2 -0
- package/dist/vendor/engine/runtime/chord/facets/loader.js +4 -0
- package/dist/vendor/engine/runtime/chord/index.d.ts +10 -0
- package/dist/vendor/engine/runtime/chord/index.js +9 -0
- package/dist/vendor/engine/runtime/chord/json.d.ts +3 -0
- package/dist/vendor/engine/runtime/chord/json.js +56 -0
- package/dist/vendor/engine/runtime/chord/services/consumer.d.ts +10 -0
- package/dist/vendor/engine/runtime/chord/services/consumer.js +536 -0
- package/dist/vendor/engine/runtime/chord/services/errors.d.ts +7 -0
- package/dist/vendor/engine/runtime/chord/services/errors.js +21 -0
- package/dist/vendor/engine/runtime/chord/services/handle.d.ts +14 -0
- package/dist/vendor/engine/runtime/chord/services/handle.js +100 -0
- package/dist/vendor/engine/runtime/chord/services/instances.d.ts +24 -0
- package/dist/vendor/engine/runtime/chord/services/instances.js +136 -0
- package/dist/vendor/engine/runtime/chord/services/loopback.d.ts +4 -0
- package/dist/vendor/engine/runtime/chord/services/loopback.js +14 -0
- package/dist/vendor/engine/runtime/chord/services/provider.d.ts +36 -0
- package/dist/vendor/engine/runtime/chord/services/provider.js +471 -0
- package/dist/vendor/engine/runtime/chord/services/state-codec.d.ts +14 -0
- package/dist/vendor/engine/runtime/chord/services/state-codec.js +114 -0
- package/dist/vendor/engine/runtime/chord/services/state-internals.d.ts +10 -0
- package/dist/vendor/engine/runtime/chord/services/state-internals.js +9 -0
- package/dist/vendor/engine/runtime/chord/services/state.d.ts +22 -0
- package/dist/vendor/engine/runtime/chord/services/state.js +123 -0
- package/dist/vendor/engine/runtime/chord/services/wire.d.ts +59 -0
- package/dist/vendor/engine/runtime/chord/services/wire.js +172 -0
- package/dist/vendor/engine/runtime/chord/types.d.ts +202 -0
- package/dist/vendor/engine/runtime/chord/types.js +1 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/args.d.ts +60 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/args.js +439 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/auth-check.d.ts +18 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/auth-check.js +49 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/auth-command.d.ts +23 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/auth-command.js +102 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/config-selector.d.ts +15 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/config-selector.js +31 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/credential-print.d.ts +12 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/credential-print.js +75 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/file-processor.d.ts +14 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/file-processor.js +70 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/initial-message.d.ts +17 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/initial-message.js +21 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/list-models.d.ts +8 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/list-models.js +97 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/project-trust.d.ts +9 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/project-trust.js +47 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/session-picker.d.ts +9 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/session-picker.js +35 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/startup-ui.d.ts +19 -0
- package/dist/vendor/engine/runtime/coding-agent/cli/startup-ui.js +184 -0
- package/dist/vendor/engine/runtime/coding-agent/config.d.ts +97 -0
- package/dist/vendor/engine/runtime/coding-agent/config.js +463 -0
- package/dist/vendor/engine/runtime/coding-agent/core/agent-session-runtime.d.ts +118 -0
- package/dist/vendor/engine/runtime/coding-agent/core/agent-session-runtime.js +316 -0
- package/dist/vendor/engine/runtime/coding-agent/core/agent-session-services.d.ts +85 -0
- package/dist/vendor/engine/runtime/coding-agent/core/agent-session-services.js +133 -0
- package/dist/vendor/engine/runtime/coding-agent/core/agent-session.d.ts +771 -0
- package/dist/vendor/engine/runtime/coding-agent/core/agent-session.js +2990 -0
- package/dist/vendor/engine/runtime/coding-agent/core/auth-guidance.d.ts +4 -0
- package/dist/vendor/engine/runtime/coding-agent/core/auth-guidance.js +20 -0
- package/dist/vendor/engine/runtime/coding-agent/core/auth-storage.d.ts +71 -0
- package/dist/vendor/engine/runtime/coding-agent/core/auth-storage.js +425 -0
- package/dist/vendor/engine/runtime/coding-agent/core/bash-executor.d.ts +31 -0
- package/dist/vendor/engine/runtime/coding-agent/core/bash-executor.js +110 -0
- package/dist/vendor/engine/runtime/coding-agent/core/bug-report-upload.d.ts +11 -0
- package/dist/vendor/engine/runtime/coding-agent/core/bug-report-upload.js +21 -0
- package/dist/vendor/engine/runtime/coding-agent/core/bug-report.d.ts +175 -0
- package/dist/vendor/engine/runtime/coding-agent/core/bug-report.js +291 -0
- package/dist/vendor/engine/runtime/coding-agent/core/cache-stats.d.ts +48 -0
- package/dist/vendor/engine/runtime/coding-agent/core/cache-stats.js +111 -0
- package/dist/vendor/engine/runtime/coding-agent/core/cache-warmer.d.ts +102 -0
- package/dist/vendor/engine/runtime/coding-agent/core/cache-warmer.js +355 -0
- package/dist/vendor/engine/runtime/coding-agent/core/compaction/branch-summarization.d.ts +97 -0
- package/dist/vendor/engine/runtime/coding-agent/core/compaction/branch-summarization.js +250 -0
- package/dist/vendor/engine/runtime/coding-agent/core/compaction/compaction.d.ts +142 -0
- package/dist/vendor/engine/runtime/coding-agent/core/compaction/compaction.js +666 -0
- package/dist/vendor/engine/runtime/coding-agent/core/compaction/index.d.ts +6 -0
- package/dist/vendor/engine/runtime/coding-agent/core/compaction/index.js +6 -0
- package/dist/vendor/engine/runtime/coding-agent/core/compaction/utils.d.ts +37 -0
- package/dist/vendor/engine/runtime/coding-agent/core/compaction/utils.js +141 -0
- package/dist/vendor/engine/runtime/coding-agent/core/crash-log.d.ts +26 -0
- package/dist/vendor/engine/runtime/coding-agent/core/crash-log.js +138 -0
- package/dist/vendor/engine/runtime/coding-agent/core/defaults.d.ts +3 -0
- package/dist/vendor/engine/runtime/coding-agent/core/defaults.js +10 -0
- package/dist/vendor/engine/runtime/coding-agent/core/diagnostics.d.ts +14 -0
- package/dist/vendor/engine/runtime/coding-agent/core/diagnostics.js +1 -0
- package/dist/vendor/engine/runtime/coding-agent/core/event-bus.d.ts +8 -0
- package/dist/vendor/engine/runtime/coding-agent/core/event-bus.js +24 -0
- package/dist/vendor/engine/runtime/coding-agent/core/exec.d.ts +28 -0
- package/dist/vendor/engine/runtime/coding-agent/core/exec.js +74 -0
- package/dist/vendor/engine/runtime/coding-agent/core/experimental.d.ts +1 -0
- package/dist/vendor/engine/runtime/coding-agent/core/experimental.js +3 -0
- package/dist/vendor/engine/runtime/coding-agent/core/export-html/ansi-to-html.d.ts +21 -0
- package/dist/vendor/engine/runtime/coding-agent/core/export-html/ansi-to-html.js +248 -0
- package/dist/vendor/engine/runtime/coding-agent/core/export-html/index.d.ts +36 -0
- package/dist/vendor/engine/runtime/coding-agent/core/export-html/index.js +225 -0
- package/dist/vendor/engine/runtime/coding-agent/core/export-html/template.css +1066 -0
- package/dist/vendor/engine/runtime/coding-agent/core/export-html/template.html +55 -0
- package/dist/vendor/engine/runtime/coding-agent/core/export-html/template.js +1864 -0
- package/dist/vendor/engine/runtime/coding-agent/core/export-html/tool-renderer.d.ts +33 -0
- package/dist/vendor/engine/runtime/coding-agent/core/export-html/tool-renderer.js +107 -0
- package/dist/vendor/engine/runtime/coding-agent/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/vendor/engine/runtime/coding-agent/core/export-html/vendor/marked.min.js +78 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/index.d.ts +11 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/index.js +8 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/jiti-loader.d.ts +1 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/jiti-loader.js +3 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/jiti-static-loader.d.ts +1 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/jiti-static-loader.js +3 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/loader.d.ts +22 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/loader.js +633 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/runner.d.ts +180 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/runner.js +1028 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/types.d.ts +1362 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/types.js +47 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/virtual-modules.d.ts +2 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/virtual-modules.js +37 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/wrapper.d.ts +19 -0
- package/dist/vendor/engine/runtime/coding-agent/core/extensions/wrapper.js +21 -0
- package/dist/vendor/engine/runtime/coding-agent/core/footer-data-provider.d.ts +63 -0
- package/dist/vendor/engine/runtime/coding-agent/core/footer-data-provider.js +337 -0
- package/dist/vendor/engine/runtime/coding-agent/core/http-dispatcher.d.ts +21 -0
- package/dist/vendor/engine/runtime/coding-agent/core/http-dispatcher.js +97 -0
- package/dist/vendor/engine/runtime/coding-agent/core/keybindings.d.ts +427 -0
- package/dist/vendor/engine/runtime/coding-agent/core/keybindings.js +320 -0
- package/dist/vendor/engine/runtime/coding-agent/core/messages.d.ts +76 -0
- package/dist/vendor/engine/runtime/coding-agent/core/messages.js +123 -0
- package/dist/vendor/engine/runtime/coding-agent/core/model-config.d.ts +723 -0
- package/dist/vendor/engine/runtime/coding-agent/core/model-config.js +281 -0
- package/dist/vendor/engine/runtime/coding-agent/core/model-registry.d.ts +48 -0
- package/dist/vendor/engine/runtime/coding-agent/core/model-registry.js +114 -0
- package/dist/vendor/engine/runtime/coding-agent/core/model-resolver.d.ts +123 -0
- package/dist/vendor/engine/runtime/coding-agent/core/model-resolver.js +589 -0
- package/dist/vendor/engine/runtime/coding-agent/core/model-runtime.d.ts +100 -0
- package/dist/vendor/engine/runtime/coding-agent/core/model-runtime.js +603 -0
- package/dist/vendor/engine/runtime/coding-agent/core/models-store.d.ts +21 -0
- package/dist/vendor/engine/runtime/coding-agent/core/models-store.js +114 -0
- package/dist/vendor/engine/runtime/coding-agent/core/output-guard.d.ts +6 -0
- package/dist/vendor/engine/runtime/coding-agent/core/output-guard.js +88 -0
- package/dist/vendor/engine/runtime/coding-agent/core/package-manager.d.ts +212 -0
- package/dist/vendor/engine/runtime/coding-agent/core/package-manager.js +2176 -0
- package/dist/vendor/engine/runtime/coding-agent/core/pi-manifest.d.ts +7 -0
- package/dist/vendor/engine/runtime/coding-agent/core/pi-manifest.js +25 -0
- package/dist/vendor/engine/runtime/coding-agent/core/project-trust.d.ts +14 -0
- package/dist/vendor/engine/runtime/coding-agent/core/project-trust.js +58 -0
- package/dist/vendor/engine/runtime/coding-agent/core/prompt-templates.d.ts +53 -0
- package/dist/vendor/engine/runtime/coding-agent/core/prompt-templates.js +235 -0
- package/dist/vendor/engine/runtime/coding-agent/core/provider-attribution.d.ts +3 -0
- package/dist/vendor/engine/runtime/coding-agent/core/provider-attribution.js +71 -0
- package/dist/vendor/engine/runtime/coding-agent/core/provider-composer.d.ts +59 -0
- package/dist/vendor/engine/runtime/coding-agent/core/provider-composer.js +422 -0
- package/dist/vendor/engine/runtime/coding-agent/core/radius.d.ts +4 -0
- package/dist/vendor/engine/runtime/coding-agent/core/radius.js +7 -0
- package/dist/vendor/engine/runtime/coding-agent/core/remote-catalog-provider.d.ts +4 -0
- package/dist/vendor/engine/runtime/coding-agent/core/remote-catalog-provider.js +121 -0
- package/dist/vendor/engine/runtime/coding-agent/core/resolve-config-value.d.ts +29 -0
- package/dist/vendor/engine/runtime/coding-agent/core/resolve-config-value.js +246 -0
- package/dist/vendor/engine/runtime/coding-agent/core/resource-loader.d.ts +220 -0
- package/dist/vendor/engine/runtime/coding-agent/core/resource-loader.js +874 -0
- package/dist/vendor/engine/runtime/coding-agent/core/runtime-credentials.d.ts +14 -0
- package/dist/vendor/engine/runtime/coding-agent/core/runtime-credentials.js +38 -0
- package/dist/vendor/engine/runtime/coding-agent/core/sdk.d.ts +107 -0
- package/dist/vendor/engine/runtime/coding-agent/core/sdk.js +296 -0
- package/dist/vendor/engine/runtime/coding-agent/core/session-cwd.d.ts +18 -0
- package/dist/vendor/engine/runtime/coding-agent/core/session-cwd.js +37 -0
- package/dist/vendor/engine/runtime/coding-agent/core/session-export.d.ts +7 -0
- package/dist/vendor/engine/runtime/coding-agent/core/session-export.js +32 -0
- package/dist/vendor/engine/runtime/coding-agent/core/session-manager.d.ts +379 -0
- package/dist/vendor/engine/runtime/coding-agent/core/session-manager.js +1432 -0
- package/dist/vendor/engine/runtime/coding-agent/core/settings-diagnostics.d.ts +8 -0
- package/dist/vendor/engine/runtime/coding-agent/core/settings-diagnostics.js +20 -0
- package/dist/vendor/engine/runtime/coding-agent/core/settings-manager.d.ts +346 -0
- package/dist/vendor/engine/runtime/coding-agent/core/settings-manager.js +1032 -0
- package/dist/vendor/engine/runtime/coding-agent/core/skills.d.ts +59 -0
- package/dist/vendor/engine/runtime/coding-agent/core/skills.js +406 -0
- package/dist/vendor/engine/runtime/coding-agent/core/slash-commands.d.ts +14 -0
- package/dist/vendor/engine/runtime/coding-agent/core/slash-commands.js +27 -0
- package/dist/vendor/engine/runtime/coding-agent/core/source-info.d.ts +17 -0
- package/dist/vendor/engine/runtime/coding-agent/core/source-info.js +18 -0
- package/dist/vendor/engine/runtime/coding-agent/core/system-prompt.d.ts +70 -0
- package/dist/vendor/engine/runtime/coding-agent/core/system-prompt.js +146 -0
- package/dist/vendor/engine/runtime/coding-agent/core/telemetry.d.ts +2 -0
- package/dist/vendor/engine/runtime/coding-agent/core/telemetry.js +8 -0
- package/dist/vendor/engine/runtime/coding-agent/core/timings.d.ts +9 -0
- package/dist/vendor/engine/runtime/coding-agent/core/timings.js +40 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/bash.d.ts +89 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/bash.js +303 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/edit-diff.d.ts +100 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/edit-diff.js +420 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/edit.d.ts +43 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/edit.js +146 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/file-mutation-queue.d.ts +5 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/file-mutation-queue.js +51 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/find.d.ts +41 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/find.js +250 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/grep.d.ts +40 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/grep.js +251 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/index.d.ts +42 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/index.js +128 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/ls.d.ts +40 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/ls.js +125 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/output-accumulator.d.ts +54 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/output-accumulator.js +189 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/path-utils.d.ts +9 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/path-utils.js +98 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/powershell.d.ts +15 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/powershell.js +38 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/read.d.ts +41 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/read.js +168 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/render-utils.d.ts +23 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/render-utils.js +64 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/bash.d.ts +11 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/bash.js +137 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/edit.d.ts +22 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/edit.js +166 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/find.d.ts +9 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/find.js +63 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/grep.d.ts +9 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/grep.js +68 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/index.d.ts +27 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/index.js +46 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/ls.d.ts +9 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/ls.js +57 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/read.d.ts +10 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/read.js +128 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/write.d.ts +9 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/write.js +152 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/tool-definition-wrapper.d.ts +13 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/tool-definition-wrapper.js +35 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/truncate.d.ts +69 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/truncate.js +214 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/write.d.ts +29 -0
- package/dist/vendor/engine/runtime/coding-agent/core/tools/write.js +60 -0
- package/dist/vendor/engine/runtime/coding-agent/core/trust-manager.d.ts +35 -0
- package/dist/vendor/engine/runtime/coding-agent/core/trust-manager.js +202 -0
- package/dist/vendor/engine/runtime/coding-agent/core/usage-totals.d.ts +18 -0
- package/dist/vendor/engine/runtime/coding-agent/core/usage-totals.js +55 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/index.d.ts +2 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/index.js +2 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/llama/client.d.ts +68 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/llama/client.js +312 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/llama/huggingface.d.ts +22 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/llama/huggingface.js +140 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/llama/index.d.ts +2 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/llama/index.js +218 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/llama/provider.d.ts +11 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/llama/provider.js +160 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/llama/ui.d.ts +41 -0
- package/dist/vendor/engine/runtime/coding-agent/extensions/llama/ui.js +415 -0
- package/dist/vendor/engine/runtime/coding-agent/index.d.ts +36 -0
- package/dist/vendor/engine/runtime/coding-agent/index.js +47 -0
- package/dist/vendor/engine/runtime/coding-agent/main.d.ts +15 -0
- package/dist/vendor/engine/runtime/coding-agent/main.js +808 -0
- package/dist/vendor/engine/runtime/coding-agent/migrations.d.ts +32 -0
- package/dist/vendor/engine/runtime/coding-agent/migrations.js +281 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/index.d.ts +9 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/index.js +7 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/bug-report.d.ts +15 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/bug-report.js +209 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/chat-viewport.d.ts +19 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/chat-viewport.js +27 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/armin.d.ts +33 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/armin.js +332 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/assistant-message.d.ts +25 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/assistant-message.js +157 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/bash-execution.d.ts +33 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/bash-execution.js +174 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/bordered-loader.d.ts +15 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/bordered-loader.js +53 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/branch-summary-message.d.ts +15 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/branch-summary-message.js +50 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/compaction-summary-message.d.ts +15 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/compaction-summary-message.js +51 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/config-selector.d.ts +101 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/config-selector.js +760 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/countdown-timer.d.ts +13 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/countdown-timer.js +32 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-editor.d.ts +29 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-editor.js +114 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-entry.d.ts +18 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-entry.js +51 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-message.d.ts +21 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-message.js +86 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/daxnuts.d.ts +22 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/daxnuts.js +139 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/diff.d.ts +11 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/diff.js +132 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/dynamic-border.d.ts +14 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/dynamic-border.js +20 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/earendil-announcement.d.ts +4 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/earendil-announcement.js +39 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-editor.d.ts +23 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-editor.js +102 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-input.d.ts +24 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-input.js +66 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-selector.d.ts +26 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-selector.js +86 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/first-time-setup.d.ts +24 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/first-time-setup.js +102 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/footer.d.ts +31 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/footer.js +224 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/index.d.ts +33 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/index.js +34 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/keybinding-hints.d.ts +12 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/keybinding-hints.js +35 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/login-dialog.d.ts +51 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/login-dialog.js +187 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/markdown-transform.d.ts +2 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/markdown-transform.js +18 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/mermaid.d.ts +10 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/mermaid.js +74 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/model-selector.d.ts +59 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/model-selector.js +360 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/oauth-selector.d.ts +32 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/oauth-selector.js +162 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/scoped-models-selector.d.ts +45 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/scoped-models-selector.js +325 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/session-selector-search.d.ts +22 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/session-selector-search.js +154 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/session-selector.d.ts +94 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/session-selector.js +892 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/settings-selector.d.ts +93 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/settings-selector.js +719 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/settings-submenu.d.ts +71 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/settings-submenu.js +164 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/show-images-selector.d.ts +9 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/show-images-selector.js +38 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/skill-invocation-message.d.ts +16 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/skill-invocation-message.js +53 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/status-indicator.d.ts +29 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/status-indicator.js +66 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/theme-selector.d.ts +10 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/theme-selector.js +49 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/thinking-selector.d.ts +22 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/thinking-selector.js +108 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/tool-execution.d.ts +79 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/tool-execution.js +336 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/tree-selector.d.ts +93 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/tree-selector.js +1246 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/trust-selector.d.ts +22 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/trust-selector.js +90 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/user-message-selector.d.ts +29 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/user-message-selector.js +113 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/user-message.d.ts +15 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/user-message.js +48 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/visual-truncate.d.ts +23 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/visual-truncate.js +32 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/external-editor.d.ts +11 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/external-editor.js +37 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/interactive-mode.d.ts +467 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/interactive-mode.js +5720 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/model-catalog-refresh.d.ts +6 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/model-catalog-refresh.js +33 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/model-search.d.ts +11 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/model-search.js +14 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/session-share.d.ts +17 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/session-share.js +187 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/dark.json +91 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/light.json +90 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme-controller.d.ts +40 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme-controller.js +129 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme-json.d.ts +83 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme-json.js +129 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme-schema.json +356 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme.d.ts +130 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme.js +990 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/tui-renderer.d.ts +20 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/interactive/tui-renderer.js +65 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/json-event.d.ts +33 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/json-event.js +28 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/print-mode.d.ts +27 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/print-mode.js +141 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/rpc/jsonl.d.ts +16 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/rpc/jsonl.js +48 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-client.d.ts +253 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-client.js +494 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-mode.d.ts +19 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-mode.js +656 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-types.d.ts +468 -0
- package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-types.js +7 -0
- package/dist/vendor/engine/runtime/coding-agent/package-manager-cli.d.ts +8 -0
- package/dist/vendor/engine/runtime/coding-agent/package-manager-cli.js +960 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/abort.d.ts +4 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/abort.js +47 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/ansi.d.ts +1 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/ansi.js +51 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/changelog.d.ts +21 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/changelog.js +164 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/child-process.d.ts +17 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/child-process.js +105 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/clipboard-command.d.ts +6 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/clipboard-command.js +44 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/clipboard-image.d.ts +10 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/clipboard-image.js +216 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/clipboard.d.ts +3 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/clipboard.js +150 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/exif-orientation.d.ts +4 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/exif-orientation.js +156 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/frontmatter.d.ts +7 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/frontmatter.js +26 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/fs-watch.d.ts +4 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/fs-watch.js +24 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/git.d.ts +25 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/git.js +194 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/html.d.ts +6 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/html.js +39 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/image-convert.d.ts +9 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/image-convert.js +44 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/image-process.d.ts +17 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/image-process.js +82 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/image-resize-core.d.ts +29 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/image-resize-core.js +123 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/image-resize-worker.d.ts +1 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/image-resize-worker.js +30 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/image-resize.d.ts +15 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/image-resize.js +96 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/json.d.ts +2 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/json.js +6 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/management-http.d.ts +24 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/management-http.js +53 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/mime.d.ts +2 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/mime.js +109 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/open-browser.d.ts +8 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/open-browser.js +21 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/paths.d.ts +33 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/paths.js +113 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/photon.d.ts +20 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/photon.js +120 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/pi-user-agent.d.ts +1 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/pi-user-agent.js +4 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/shell.d.ts +33 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/shell.js +215 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/sleep.d.ts +4 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/sleep.js +16 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/syntax-highlight.d.ts +12 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/syntax-highlight.js +176 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/text.d.ts +7 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/text.js +8 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/tool-result-images.d.ts +20 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/tool-result-images.js +47 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/tools-manager.d.ts +12 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/tools-manager.js +308 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/version-check.d.ts +18 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/version-check.js +78 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/windows-self-update.d.ts +2 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/windows-self-update.js +76 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/wsl.d.ts +2 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/wsl.js +14 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/zip.d.ts +6 -0
- package/dist/vendor/engine/runtime/coding-agent/utils/zip.js +59 -0
- package/dist/vendor/engine/runtime/package.json +9 -0
- package/dist/vendor/engine/runtime/telemetry/index.d.ts +193 -0
- package/dist/vendor/engine/runtime/telemetry/index.js +17 -0
- package/dist/vendor/engine/runtime/telemetry/memory.d.ts +25 -0
- package/dist/vendor/engine/runtime/telemetry/memory.js +153 -0
- package/dist/vendor/engine/runtime/telemetry/noop.d.ts +3 -0
- package/dist/vendor/engine/runtime/telemetry/noop.js +17 -0
- package/dist/vendor/engine/runtime/tui/alt-screen-search.d.ts +45 -0
- package/dist/vendor/engine/runtime/tui/alt-screen-search.js +281 -0
- package/dist/vendor/engine/runtime/tui/autocomplete.d.ts +56 -0
- package/dist/vendor/engine/runtime/tui/autocomplete.js +671 -0
- package/dist/vendor/engine/runtime/tui/components/alt-screen-flash.d.ts +12 -0
- package/dist/vendor/engine/runtime/tui/components/alt-screen-flash.js +36 -0
- package/dist/vendor/engine/runtime/tui/components/box.d.ts +23 -0
- package/dist/vendor/engine/runtime/tui/components/box.js +132 -0
- package/dist/vendor/engine/runtime/tui/components/cancellable-loader.d.ts +21 -0
- package/dist/vendor/engine/runtime/tui/components/cancellable-loader.js +34 -0
- package/dist/vendor/engine/runtime/tui/components/editor.d.ts +259 -0
- package/dist/vendor/engine/runtime/tui/components/editor.js +2041 -0
- package/dist/vendor/engine/runtime/tui/components/h-stack.d.ts +6 -0
- package/dist/vendor/engine/runtime/tui/components/h-stack.js +42 -0
- package/dist/vendor/engine/runtime/tui/components/image.d.ts +27 -0
- package/dist/vendor/engine/runtime/tui/components/image.js +89 -0
- package/dist/vendor/engine/runtime/tui/components/input.d.ts +47 -0
- package/dist/vendor/engine/runtime/tui/components/input.js +416 -0
- package/dist/vendor/engine/runtime/tui/components/loader.d.ts +32 -0
- package/dist/vendor/engine/runtime/tui/components/loader.js +75 -0
- package/dist/vendor/engine/runtime/tui/components/markdown.d.ts +102 -0
- package/dist/vendor/engine/runtime/tui/components/markdown.js +810 -0
- package/dist/vendor/engine/runtime/tui/components/mouse-region.d.ts +11 -0
- package/dist/vendor/engine/runtime/tui/components/mouse-region.js +20 -0
- package/dist/vendor/engine/runtime/tui/components/scroll-view.d.ts +58 -0
- package/dist/vendor/engine/runtime/tui/components/scroll-view.js +194 -0
- package/dist/vendor/engine/runtime/tui/components/select-list.d.ts +52 -0
- package/dist/vendor/engine/runtime/tui/components/select-list.js +205 -0
- package/dist/vendor/engine/runtime/tui/components/settings-list.d.ts +59 -0
- package/dist/vendor/engine/runtime/tui/components/settings-list.js +251 -0
- package/dist/vendor/engine/runtime/tui/components/spacer.d.ts +11 -0
- package/dist/vendor/engine/runtime/tui/components/spacer.js +22 -0
- package/dist/vendor/engine/runtime/tui/components/stack.d.ts +31 -0
- package/dist/vendor/engine/runtime/tui/components/stack.js +110 -0
- package/dist/vendor/engine/runtime/tui/components/text.d.ts +18 -0
- package/dist/vendor/engine/runtime/tui/components/text.js +89 -0
- package/dist/vendor/engine/runtime/tui/components/truncated-text.d.ts +12 -0
- package/dist/vendor/engine/runtime/tui/components/truncated-text.js +50 -0
- package/dist/vendor/engine/runtime/tui/components/v-stack.d.ts +7 -0
- package/dist/vendor/engine/runtime/tui/components/v-stack.js +25 -0
- package/dist/vendor/engine/runtime/tui/editor-component.d.ts +38 -0
- package/dist/vendor/engine/runtime/tui/editor-component.js +1 -0
- package/dist/vendor/engine/runtime/tui/fuzzy.d.ts +15 -0
- package/dist/vendor/engine/runtime/tui/fuzzy.js +110 -0
- package/dist/vendor/engine/runtime/tui/index.d.ts +32 -0
- package/dist/vendor/engine/runtime/tui/index.js +44 -0
- package/dist/vendor/engine/runtime/tui/keybindings.d.ts +272 -0
- package/dist/vendor/engine/runtime/tui/keybindings.js +232 -0
- package/dist/vendor/engine/runtime/tui/keys.d.ts +183 -0
- package/dist/vendor/engine/runtime/tui/keys.js +1173 -0
- package/dist/vendor/engine/runtime/tui/kill-ring.d.ts +27 -0
- package/dist/vendor/engine/runtime/tui/kill-ring.js +43 -0
- package/dist/vendor/engine/runtime/tui/latex.d.ts +9 -0
- package/dist/vendor/engine/runtime/tui/latex.js +1377 -0
- package/dist/vendor/engine/runtime/tui/layout-node.d.ts +39 -0
- package/dist/vendor/engine/runtime/tui/layout-node.js +5 -0
- package/dist/vendor/engine/runtime/tui/layout.d.ts +41 -0
- package/dist/vendor/engine/runtime/tui/layout.js +343 -0
- package/dist/vendor/engine/runtime/tui/native-modifiers.d.ts +3 -0
- package/dist/vendor/engine/runtime/tui/native-modifiers.js +12 -0
- package/dist/vendor/engine/runtime/tui/native-module-path.d.ts +6 -0
- package/dist/vendor/engine/runtime/tui/native-module-path.js +18 -0
- package/dist/vendor/engine/runtime/tui/native-platform.d.ts +17 -0
- package/dist/vendor/engine/runtime/tui/native-platform.js +41 -0
- package/dist/vendor/engine/runtime/tui/stdin-buffer.d.ts +55 -0
- package/dist/vendor/engine/runtime/tui/stdin-buffer.js +365 -0
- package/dist/vendor/engine/runtime/tui/terminal-colors.d.ts +9 -0
- package/dist/vendor/engine/runtime/tui/terminal-colors.js +58 -0
- package/dist/vendor/engine/runtime/tui/terminal-image.d.ts +117 -0
- package/dist/vendor/engine/runtime/tui/terminal-image.js +549 -0
- package/dist/vendor/engine/runtime/tui/terminal.d.ts +122 -0
- package/dist/vendor/engine/runtime/tui/terminal.js +441 -0
- package/dist/vendor/engine/runtime/tui/tui-alt-screen.d.ts +159 -0
- package/dist/vendor/engine/runtime/tui/tui-alt-screen.js +1507 -0
- package/dist/vendor/engine/runtime/tui/tui-main-screen.d.ts +38 -0
- package/dist/vendor/engine/runtime/tui/tui-main-screen.js +593 -0
- package/dist/vendor/engine/runtime/tui/tui.d.ts +385 -0
- package/dist/vendor/engine/runtime/tui/tui.js +1054 -0
- package/dist/vendor/engine/runtime/tui/undo-stack.d.ts +16 -0
- package/dist/vendor/engine/runtime/tui/undo-stack.js +24 -0
- package/dist/vendor/engine/runtime/tui/utils.d.ts +100 -0
- package/dist/vendor/engine/runtime/tui/utils.js +1203 -0
- package/dist/vendor/engine/runtime/tui/word-navigation.d.ts +24 -0
- package/dist/vendor/engine/runtime/tui/word-navigation.js +95 -0
- package/dist/vendor/zcode/LICENSE.upstream +202 -0
- package/dist/vendor/zcode/provenance.json +141 -0
- package/dist/vendor/zcode/source/agent/turn-machine.d.ts +56 -0
- package/dist/vendor/zcode/source/agent/turn-machine.js +214 -0
- package/dist/vendor/zcode/source/agent/turn-state.d.ts +118 -0
- package/dist/vendor/zcode/source/agent/turn-state.js +93 -0
- package/dist/vendor/zcode/source/compact/manual.d.ts +11 -0
- package/dist/vendor/zcode/source/compact/manual.js +38 -0
- package/dist/vendor/zcode/source/compact/microcompact.d.ts +47 -0
- package/dist/vendor/zcode/source/compact/microcompact.js +194 -0
- package/dist/vendor/zcode/source/compact/policy.d.ts +59 -0
- package/dist/vendor/zcode/source/compact/policy.js +89 -0
- package/dist/vendor/zcode/source/compact/selection.d.ts +6 -0
- package/dist/vendor/zcode/source/compact/selection.js +12 -0
- package/dist/vendor/zcode/source/contracts.d.ts +52 -0
- package/dist/vendor/zcode/source/contracts.js +9 -0
- package/dist/vendor/zcode/source/runtime/goal-completion-verification.d.ts +17 -0
- package/dist/vendor/zcode/source/runtime/goal-completion-verification.js +138 -0
- package/dist/vendor/zcode/source/runtime/turn-loop.d.ts +3 -0
- package/dist/vendor/zcode/source/runtime/turn-loop.js +21 -0
- package/dist/vendor/zcode/source/runtime/turn-model-step.d.ts +54 -0
- package/dist/vendor/zcode/source/runtime/turn-model-step.js +97 -0
- package/dist/vendor/zcode/source/runtime/turn-output-token-continuation.d.ts +8 -0
- package/dist/vendor/zcode/source/runtime/turn-output-token-continuation.js +15 -0
- package/dist/vendor/zcode/source/runtime/turn-stop.d.ts +6 -0
- package/dist/vendor/zcode/source/runtime/turn-stop.js +18 -0
- package/dist/vendor/zcode/source/tool/executor/validation.d.ts +6 -0
- package/dist/vendor/zcode/source/tool/executor/validation.js +76 -0
- package/dist/vendor/zcode/source/tool/input-normalization.d.ts +16 -0
- package/dist/vendor/zcode/source/tool/input-normalization.js +62 -0
- package/dist/vendor/zcode/source/tool/input-validation-model-content.d.ts +4 -0
- package/dist/vendor/zcode/source/tool/input-validation-model-content.js +263 -0
- package/dist/vendor/zcode/source/tool/json-schema.d.ts +9 -0
- package/dist/vendor/zcode/source/tool/json-schema.js +230 -0
- package/dist/vendor/zcode/source/tool/scheduler.d.ts +43 -0
- package/dist/vendor/zcode/source/tool/scheduler.js +167 -0
- package/dist/vendor/zcode/source/tool/tool-input-validation-issues.d.ts +76 -0
- package/dist/vendor/zcode/source/tool/tool-input-validation-issues.js +148 -0
- package/dist/vendor/zcode/source/tool/validation-contracts.d.ts +27 -0
- package/dist/vendor/zcode/source/tool/validation-contracts.js +8 -0
- package/docs/README.md +36 -0
- package/docs/agents/README.md +62 -0
- package/docs/agents/install-for-agents.md +64 -0
- package/docs/agents/mcp-server.md +187 -0
- package/docs/agents/subagent-mode.md +146 -0
- package/docs/concepts/README.md +47 -0
- package/docs/concepts/jev-actionable-routing.md +113 -0
- package/docs/concepts/jev-decision-thresholds.md +412 -0
- package/docs/concepts/jev-efficiency.md +216 -0
- package/docs/concepts/jev-eval-2026-11-01.md +78 -0
- package/docs/concepts/limits.md +43 -0
- package/docs/concepts/memory.md +30 -0
- package/docs/concepts/security.md +40 -0
- package/docs/concepts/workspace-instructions.md +28 -0
- package/docs/getting-started/README.md +74 -0
- package/docs/getting-started/accounts.md +67 -0
- package/docs/getting-started/configure-providers.md +103 -0
- package/docs/guides/README.md +12 -0
- package/docs/guides/browser.md +15 -0
- package/docs/guides/desktop-app.md +325 -0
- package/docs/guides/extensions.md +100 -0
- package/docs/guides/graph-builder.md +93 -0
- package/docs/guides/headless.md +45 -0
- package/docs/guides/tui.md +75 -0
- package/docs/guides/update.md +47 -0
- package/docs/guides/windows-code-signing.md +316 -0
- package/docs/llms.txt +45 -0
- package/docs/reference/README.md +7 -0
- package/docs/reference/cli.md +70 -0
- package/docs/reference/config.md +85 -0
- package/docs/reference/slash-commands.md +54 -0
- package/docs/superpowers/plans/2026-11-01-claude-console-sign-in.md +111 -0
- package/docs/superpowers/plans/2026-11-01-jev-node-opt-in.md +910 -0
- package/docs/superpowers/plans/2026-11-02-workflow-pane.md +398 -0
- package/docs/superpowers/specs/2026-10-31-work-line-summary-design.md +50 -0
- package/docs/superpowers/specs/2026-11-01-claude-console-sign-in-design.md +176 -0
- package/docs/superpowers/specs/2026-11-01-jev-node-opt-in-design.md +164 -0
- package/docs/superpowers/specs/2026-11-01-pr-section-design.md +104 -0
- package/docs/superpowers/specs/2026-11-02-workflow-pane-design.md +130 -0
- package/licenses/GEIST-OFL-1.1.txt +92 -0
- package/licenses/ZCODE-APACHE-2.0.txt +202 -0
- package/package.json +118 -6
- package/scripts/jev-efficiency-eval.mjs +187 -0
- package/scripts/jev-efficiency-live.mjs +193 -0
- package/scripts/zcode-engine-replay.mjs +223 -0
- package/tests/agent-centric-mcp-test-plan.md +208 -0
- package/tests/analytics-settings-test-plan.md +165 -0
- package/tests/browser-cli-smoke.mjs +276 -0
- package/tests/browser-test-plan.md +280 -0
- package/tests/chat-side-panel-test-plan.md +309 -0
- package/tests/decision-engine-test-plan.md +163 -0
- package/tests/default-active-jev-test-plan.md +85 -0
- package/tests/graphiti-test-plan.md +359 -0
- package/tests/harness-extensions-test-plan.md +110 -0
- package/tests/jev-all-decisions-test-plan.md +156 -0
- package/tests/jev-efficiency/criteria.json +158 -0
- package/tests/jev-efficiency/workloads.mjs +242 -0
- package/tests/jev-efficiency-test-plan.md +198 -0
- package/tests/mock-graphiti.mjs +106 -0
- package/tests/permissions-sandbox-probe.mjs +74 -0
- package/tests/permissions-test-plan.md +190 -0
- package/tests/product-telemetry-test-plan.md +536 -0
- package/tests/thinking-stream-preview-test-plan.md +136 -0
- package/tests/zcode-react-engine-test-plan.md +396 -0
|
@@ -0,0 +1,1487 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { observePage, observationResult } from './browser-observation.js';
|
|
7
|
+
export const VIEW_TAB_LIMIT = 6;
|
|
8
|
+
export const VIEW_SESSION_LIMIT = 4;
|
|
9
|
+
export const VIEW_IDLE_CLOSE_MS = 10 * 60 * 1000;
|
|
10
|
+
/** The pacing window between emitted frames: one per display refresh, with the coalescer holding the newest. */
|
|
11
|
+
export const VIEW_FRAME_MIN_INTERVAL_MS = 16;
|
|
12
|
+
export const VIEW_GOTO_TIMEOUT_MS = 30_000;
|
|
13
|
+
/** The viewport Mobile mode simulates, in CSS pixels: an iPhone-class layout. */
|
|
14
|
+
export const VIEW_MOBILE_VIEWPORT = { width: 390, height: 844 };
|
|
15
|
+
/** The JPEG quality stream frames use; agent screenshots keep their own setting. */
|
|
16
|
+
export const VIEW_STREAM_QUALITY = 75;
|
|
17
|
+
/**
|
|
18
|
+
* The mobile Chrome UA Mobile mode presents. A Chromium engine claiming to be
|
|
19
|
+
* iOS Safari confuses sites that branch on it, so the UA names the platform the
|
|
20
|
+
* page actually renders with.
|
|
21
|
+
*/
|
|
22
|
+
export const VIEW_MOBILE_USER_AGENT = 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Mobile Safari/537.36';
|
|
23
|
+
const VIEW_URL_LIMIT = 2048;
|
|
24
|
+
// A copy is answered as one JSON string over the same pipe as everything else,
|
|
25
|
+
// so the largest plausible selection is bounded rather than trusted.
|
|
26
|
+
const VIEW_CLIPBOARD_LIMIT = 1_000_000;
|
|
27
|
+
/**
|
|
28
|
+
* The top document's selection, and whether focus is inside a child frame.
|
|
29
|
+
*
|
|
30
|
+
* `document.activeElement` is the iframe element itself, never the field inside
|
|
31
|
+
* it, and the top document's own selection is empty while a frame holds focus —
|
|
32
|
+
* so a selection made in a frame is invisible here and the caller has to ask the
|
|
33
|
+
* frames. It is an expression rather than a function: this file compiles without
|
|
34
|
+
* the DOM library, and Playwright evaluates a string inside the page as-is.
|
|
35
|
+
*/
|
|
36
|
+
const SELECTION_STATE = `(() => {
|
|
37
|
+
const active = document.activeElement;
|
|
38
|
+
const inFrame = !!active && (active.tagName === 'IFRAME' || active.tagName === 'FRAME');
|
|
39
|
+
// A selection outlives the focus that made it, so text alone does not say which
|
|
40
|
+
// document the user is in; the focused document is the one that owns the caret.
|
|
41
|
+
const focused = document.hasFocus();
|
|
42
|
+
if (inFrame) return { inFrame: true, focused, text: '' };
|
|
43
|
+
if (active && typeof active.value === 'string' && typeof active.selectionStart === 'number'
|
|
44
|
+
&& typeof active.selectionEnd === 'number' && active.selectionEnd > active.selectionStart) {
|
|
45
|
+
return { inFrame: false, focused, text: active.value.slice(active.selectionStart, active.selectionEnd) };
|
|
46
|
+
}
|
|
47
|
+
return { inFrame: false, focused, text: window.getSelection ? String(window.getSelection() || '') : '' };
|
|
48
|
+
})()`;
|
|
49
|
+
/**
|
|
50
|
+
* The cursor style in effect at a point in the page.
|
|
51
|
+
*
|
|
52
|
+
* The pane shows a streamed image, so the page's pointer never appears on its
|
|
53
|
+
* own: the panel asks for the style under the pointer and draws that shape
|
|
54
|
+
* itself. Same-origin frames are entered by mapping the point into each one.
|
|
55
|
+
*/
|
|
56
|
+
const CURSOR_AT = `((point) => {
|
|
57
|
+
let doc = document;
|
|
58
|
+
let x = point.x;
|
|
59
|
+
let y = point.y;
|
|
60
|
+
for (let depth = 0; depth < 8; depth += 1) {
|
|
61
|
+
let element;
|
|
62
|
+
try { element = doc.elementFromPoint(x, y); } catch { return 'default'; }
|
|
63
|
+
if (!element) return 'default';
|
|
64
|
+
if (element.tagName === 'IFRAME' || element.tagName === 'FRAME') {
|
|
65
|
+
let inner = null;
|
|
66
|
+
try { inner = element.contentDocument; } catch { inner = null; }
|
|
67
|
+
if (inner) {
|
|
68
|
+
const rect = element.getBoundingClientRect();
|
|
69
|
+
x -= rect.left;
|
|
70
|
+
y -= rect.top;
|
|
71
|
+
doc = inner;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
try { return getComputedStyle(element).cursor || 'default'; } catch { return 'default'; }
|
|
76
|
+
}
|
|
77
|
+
return 'default';
|
|
78
|
+
})`;
|
|
79
|
+
/** The dependency panel browsing needs: an HTTP(S) page an isolated browser can open. */ export function browserViewUrl(value) {
|
|
80
|
+
const url = new URL(value);
|
|
81
|
+
if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password)
|
|
82
|
+
throw new Error('Use an HTTP(S) URL without embedded credentials');
|
|
83
|
+
if (url.href.length > VIEW_URL_LIMIT)
|
|
84
|
+
throw new Error('URL exceeds the 2048-character limit');
|
|
85
|
+
return url.href;
|
|
86
|
+
}
|
|
87
|
+
export function clampViewport(width, height) {
|
|
88
|
+
const value = (input, min, max, fallback) => Number.isSafeInteger(input) ? Math.max(min, Math.min(max, input)) : fallback;
|
|
89
|
+
return { width: value(width, 280, 1600, 900), height: value(height, 240, 2200, 700) };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* JPEG dimensions straight from the SOF markers, without decoding pixels.
|
|
93
|
+
*
|
|
94
|
+
* Screencast frames carry no size fields; the panel sends input in image pixels
|
|
95
|
+
* and the engine must translate to page CSS pixels, so the real image size is
|
|
96
|
+
* load-bearing, not decorative.
|
|
97
|
+
*/
|
|
98
|
+
export function jpegSize(bytes) {
|
|
99
|
+
if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8)
|
|
100
|
+
return undefined;
|
|
101
|
+
let offset = 2;
|
|
102
|
+
while (offset + 9 < bytes.length) {
|
|
103
|
+
if (bytes[offset] !== 0xff) {
|
|
104
|
+
offset++;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const marker = bytes[offset + 1];
|
|
108
|
+
// Fill bytes before a marker, and the stand-alone markers that carry no length.
|
|
109
|
+
if (marker === 0xff || marker === 0x01 || (marker >= 0xd0 && marker <= 0xd9)) {
|
|
110
|
+
offset += 2;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const length = (bytes[offset + 2] << 8) | bytes[offset + 3];
|
|
114
|
+
// Baseline and progressive DCT carry the frame size; every other segment is skipped whole.
|
|
115
|
+
if (marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc) {
|
|
116
|
+
if (length < 7 || offset + 9 > bytes.length)
|
|
117
|
+
return undefined;
|
|
118
|
+
return { height: (bytes[offset + 5] << 8) | bytes[offset + 6], width: (bytes[offset + 7] << 8) | bytes[offset + 8] };
|
|
119
|
+
}
|
|
120
|
+
if (length < 2)
|
|
121
|
+
return undefined;
|
|
122
|
+
offset += 2 + length;
|
|
123
|
+
}
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
/** Windows virtual-key codes for the named keys a panel keypress can produce. */
|
|
127
|
+
const KEY_CODE = {
|
|
128
|
+
Enter: 13, Backspace: 8, Tab: 9, Escape: 27, Delete: 46, Insert: 45,
|
|
129
|
+
ArrowLeft: 37, ArrowUp: 38, ArrowRight: 39, ArrowDown: 40, Home: 36, End: 35, PageUp: 33, PageDown: 34,
|
|
130
|
+
F1: 112, F2: 113, F3: 114, F4: 115, F5: 116, F6: 117, F7: 118, F8: 119, F9: 120, F10: 121, F11: 122, F12: 123,
|
|
131
|
+
};
|
|
132
|
+
const CODE_KEY = {
|
|
133
|
+
Comma: 188, Period: 190, Slash: 191, Semicolon: 186, Quote: 222, BracketLeft: 219, BracketRight: 221,
|
|
134
|
+
Backslash: 220, Minus: 189, Equal: 187, Backquote: 192, NumpadEnter: 13, NumpadAdd: 107, NumpadSubtract: 109,
|
|
135
|
+
NumpadMultiply: 106, NumpadDivide: 111, NumpadDecimal: 110,
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* One panel key event as the CDP input domain needs it.
|
|
139
|
+
*
|
|
140
|
+
* A key is always a keyboard event, with the character a key-down inserts in
|
|
141
|
+
* `text`: an ordinary letter is inserted that way, and Enter carries Chromium's
|
|
142
|
+
* carriage return so a textarea or a content-editable field gets its newline.
|
|
143
|
+
* Keeping the gesture as a key event is what lets the page run its own keydown
|
|
144
|
+
* handling — Space activating a focused button, a page's printable-key shortcut —
|
|
145
|
+
* which text insertion alone would never trigger. A Ctrl, Alt or Meta held over a
|
|
146
|
+
* key drops the text (Ctrl+C must be a key event, never the character "c"), with
|
|
147
|
+
* one exception: AltGr is reported as Ctrl+Alt, and the character it produced —
|
|
148
|
+
* "@" on a German layout, "€" on many others — must survive.
|
|
149
|
+
*/
|
|
150
|
+
export function keyDescriptor(key, code, modifiers = 0) {
|
|
151
|
+
const named = KEY_CODE[key]
|
|
152
|
+
?? (code?.startsWith('Key') && code.length === 4 ? code.charCodeAt(3) : undefined)
|
|
153
|
+
?? (code?.startsWith('Digit') && code.length === 6 ? 48 + Number(code.slice(5)) : undefined)
|
|
154
|
+
?? (code !== undefined ? CODE_KEY[code] : undefined);
|
|
155
|
+
const printable = key.length === 1;
|
|
156
|
+
if (!printable && named === undefined)
|
|
157
|
+
throw new Error(`Unsupported key: ${key}`);
|
|
158
|
+
const ctrl = (modifiers & MODIFIER_BITS.ctrl) !== 0;
|
|
159
|
+
const alt = (modifiers & MODIFIER_BITS.alt) !== 0;
|
|
160
|
+
// An Option gesture on macOS that produces a character changes the key itself to
|
|
161
|
+
// that character (Option+2 is '™' on a US layout), while an Alt shortcut leaves
|
|
162
|
+
// the letter or digit it names untouched: a non-ASCII single character with Alt
|
|
163
|
+
// held is text to insert, not a shortcut, or the page would see the key and
|
|
164
|
+
// insert nothing.
|
|
165
|
+
const altCharacter = alt && !ctrl && printable && (key.codePointAt(0) ?? 0) > 0x7f;
|
|
166
|
+
// AltGr arrives as Ctrl+Alt together; a shortcut has exactly one of them (or Meta).
|
|
167
|
+
const shortcut = !altCharacter && ((modifiers & MODIFIER_BITS.meta) !== 0 || (ctrl !== alt && (ctrl || alt)));
|
|
168
|
+
const keyCode = named ?? key.toUpperCase().charCodeAt(0);
|
|
169
|
+
const text = shortcut ? undefined : printable ? key : key === 'Enter' ? '\r' : undefined;
|
|
170
|
+
return {
|
|
171
|
+
key: printable && shortcut ? key.toLowerCase() : key,
|
|
172
|
+
code: code ?? '',
|
|
173
|
+
windowsVirtualKeyCode: keyCode,
|
|
174
|
+
nativeKeyCodes: [keyCode],
|
|
175
|
+
...(text === undefined ? {} : { text }),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
export const MODIFIER_BITS = { alt: 1, ctrl: 2, meta: 4, shift: 8 };
|
|
179
|
+
export function modifierMask(modifiers) {
|
|
180
|
+
if (modifiers === undefined)
|
|
181
|
+
return 0;
|
|
182
|
+
if (!Array.isArray(modifiers) || modifiers.some(item => typeof item !== 'string' || !(item in MODIFIER_BITS)))
|
|
183
|
+
throw new Error('modifiers must be a list of alt, ctrl, meta, shift');
|
|
184
|
+
return modifiers.reduce((mask, name) => mask | MODIFIER_BITS[name], 0);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* The native editing commands a macOS page performs for a key-down.
|
|
188
|
+
*
|
|
189
|
+
* On macOS, gestures like Cmd+A, Cmd+Z, or Option+Arrow are not synthesized from
|
|
190
|
+
* key events: Chromium runs the named command instead, and nothing happens when
|
|
191
|
+
* none is sent — the panel suppresses the local default, so the page would be
|
|
192
|
+
* left without either. These are the mappings Playwright itself derives for the
|
|
193
|
+
* same CDP call (its macEditingCommands table), limited to the gestures a pane
|
|
194
|
+
* can forward.
|
|
195
|
+
*/
|
|
196
|
+
export function macEditingCommands(key, modifiers) {
|
|
197
|
+
const meta = (modifiers & MODIFIER_BITS.meta) !== 0;
|
|
198
|
+
const alt = (modifiers & MODIFIER_BITS.alt) !== 0;
|
|
199
|
+
const shift = (modifiers & MODIFIER_BITS.shift) !== 0;
|
|
200
|
+
if (meta && !alt) {
|
|
201
|
+
switch (key) {
|
|
202
|
+
case 'a': return ['selectAll'];
|
|
203
|
+
case 'z': return [shift ? 'redo' : 'undo'];
|
|
204
|
+
case 'c': return ['copy'];
|
|
205
|
+
case 'x': return ['cut'];
|
|
206
|
+
case 'v': return ['paste'];
|
|
207
|
+
case 'Backspace': return ['deleteToBeginningOfLine'];
|
|
208
|
+
case 'ArrowLeft': return [shift ? 'moveToBeginningOfLineAndModifySelection' : 'moveToBeginningOfLine'];
|
|
209
|
+
case 'ArrowRight': return [shift ? 'moveToEndOfLineAndModifySelection' : 'moveToEndOfLine'];
|
|
210
|
+
default: return [];
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (alt && !meta) {
|
|
214
|
+
switch (key) {
|
|
215
|
+
case 'Backspace': return ['deleteWordBackward'];
|
|
216
|
+
case 'Delete': return ['deleteWordForward'];
|
|
217
|
+
case 'ArrowLeft': return [shift ? 'moveWordLeftAndModifySelection' : 'moveWordLeft'];
|
|
218
|
+
case 'ArrowRight': return [shift ? 'moveWordRightAndModifySelection' : 'moveWordRight'];
|
|
219
|
+
default: return [];
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return [];
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* The launch options for the panel browser. Playwright mutes Chromium by default
|
|
226
|
+
* (`--mute-audio`), which silences every page the user browses in the panel; the
|
|
227
|
+
* screencast carries pixels only, so the page's own audio output on the engine's
|
|
228
|
+
* machine is the only sound the panel has.
|
|
229
|
+
*/
|
|
230
|
+
export function viewLaunchOptions(channel, executablePath) {
|
|
231
|
+
return {
|
|
232
|
+
headless: true,
|
|
233
|
+
...(channel === 'chromium' ? { executablePath } : { channel }),
|
|
234
|
+
ignoreDefaultArgs: ['--mute-audio'],
|
|
235
|
+
timeout: 20_000,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
/** Whether a frame arriving at `now` may be emitted, given the last emitted frame time. */
|
|
239
|
+
export function frameGate(now, lastEmittedAt, minIntervalMs) {
|
|
240
|
+
return lastEmittedAt === undefined || now - lastEmittedAt >= minIntervalMs;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* The file whose existence proves a channel is installed. The bundled Chromium's
|
|
244
|
+
* path comes from playwright-core itself; system channels have per-platform
|
|
245
|
+
* locations. The probe reads the filesystem and never launches anything.
|
|
246
|
+
*/
|
|
247
|
+
export function channelCandidate(channel, platform, chromiumExecutable) {
|
|
248
|
+
if (channel === 'chromium') {
|
|
249
|
+
try {
|
|
250
|
+
return chromiumExecutable();
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
return undefined;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
const programFiles = [process.env['ProgramFiles'], process.env['ProgramFiles(x86)']].filter((value) => !!value);
|
|
257
|
+
if (platform === 'win32') {
|
|
258
|
+
if (channel === 'msedge')
|
|
259
|
+
return programFiles.map(root => join(root, 'Microsoft', 'Edge', 'Application', 'msedge.exe')).find(existsSync);
|
|
260
|
+
return programFiles.map(root => join(root, 'Google', 'Chrome', 'Application', 'chrome.exe')).find(existsSync);
|
|
261
|
+
}
|
|
262
|
+
if (platform === 'darwin') {
|
|
263
|
+
return channel === 'msedge' ? '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge' : '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
|
|
264
|
+
}
|
|
265
|
+
return channel === 'msedge'
|
|
266
|
+
? ['/usr/bin/microsoft-edge', '/usr/bin/microsoft-edge-stable'].find(existsSync)
|
|
267
|
+
: ['/usr/bin/google-chrome', '/usr/bin/google-chrome-stable'].find(existsSync);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* One engine's panel browsers: a browser per session, a page per tab, and a CDP
|
|
271
|
+
* screencast relay per active tab. Everything is keyed by the saved session id —
|
|
272
|
+
* exactly the identity the desktop's browser pane already owns.
|
|
273
|
+
*/
|
|
274
|
+
export class BrowserViewManager {
|
|
275
|
+
emit;
|
|
276
|
+
launchBrowser;
|
|
277
|
+
sessions = new Map();
|
|
278
|
+
/**
|
|
279
|
+
* The pane's standing stream request per session, kept before a browser exists.
|
|
280
|
+
*
|
|
281
|
+
* A panel mounts and asks for frames before its first tab is opened, so the
|
|
282
|
+
* request has to outlive the absence of a session: the open that follows
|
|
283
|
+
* adopts this along with its viewport, and a later re-open after an idle reap
|
|
284
|
+
* resumes streaming without another round trip.
|
|
285
|
+
*/
|
|
286
|
+
desired = new Map();
|
|
287
|
+
/** Launches in flight per session, so concurrent opens share one browser. */
|
|
288
|
+
launching = new Map();
|
|
289
|
+
runtime = { state: 'checking' };
|
|
290
|
+
runtimeProbe;
|
|
291
|
+
installTask;
|
|
292
|
+
/**
|
|
293
|
+
* The running installer, held here rather than in the closure that started it:
|
|
294
|
+
* shutdown has to terminate the download and settle the request waiting on it,
|
|
295
|
+
* or the child outlives the engine that is being closed.
|
|
296
|
+
*/
|
|
297
|
+
installer;
|
|
298
|
+
/**
|
|
299
|
+
* Sessions released while their first launch was still in flight. The launch
|
|
300
|
+
* that arrives afterwards closes its browser instead of registering one the
|
|
301
|
+
* deleted session can never reach, or else it would hold a slot for good.
|
|
302
|
+
*/
|
|
303
|
+
released = new Set();
|
|
304
|
+
closed = false;
|
|
305
|
+
constructor(emit, launchBrowser) {
|
|
306
|
+
this.emit = emit;
|
|
307
|
+
this.launchBrowser = launchBrowser;
|
|
308
|
+
}
|
|
309
|
+
publishRuntime(status) {
|
|
310
|
+
this.runtime = status;
|
|
311
|
+
this.emit('browser.runtime', { ...status });
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Probe the same executables `launch` will use, without launching anything;
|
|
315
|
+
* the answer is cached.
|
|
316
|
+
*/
|
|
317
|
+
runtimeStatus(force = false) {
|
|
318
|
+
if (!force && this.runtime.state !== 'checking')
|
|
319
|
+
return Promise.resolve(this.runtime);
|
|
320
|
+
this.runtimeProbe ??= (async () => {
|
|
321
|
+
const { chromium } = await import('playwright-core');
|
|
322
|
+
const failures = [];
|
|
323
|
+
for (const channel of ['chromium', 'msedge', 'chrome']) {
|
|
324
|
+
if (this.closed)
|
|
325
|
+
break;
|
|
326
|
+
try {
|
|
327
|
+
const candidate = channelCandidate(channel, process.platform, () => chromium.executablePath());
|
|
328
|
+
if (candidate && existsSync(candidate)) {
|
|
329
|
+
const status = { state: 'ready', channel };
|
|
330
|
+
this.publishRuntime(status);
|
|
331
|
+
return status;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
failures.push(error instanceof Error ? error.message : String(error));
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
const status = { state: 'missing', detail: failures.join('; ').slice(0, 500) || undefined };
|
|
339
|
+
this.publishRuntime(status);
|
|
340
|
+
return status;
|
|
341
|
+
})().finally(() => { this.runtimeProbe = undefined; });
|
|
342
|
+
return this.runtimeProbe;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Download the bundled Chromium through playwright-core's own installer.
|
|
346
|
+
*
|
|
347
|
+
* A machine with Edge or Chrome installed never reaches this: the probe is
|
|
348
|
+
* satisfied by the system browser and the download is skipped.
|
|
349
|
+
*/
|
|
350
|
+
install() {
|
|
351
|
+
if (this.installTask)
|
|
352
|
+
return this.installTask;
|
|
353
|
+
// Nothing to install into a manager that is already gone.
|
|
354
|
+
if (this.closed)
|
|
355
|
+
return Promise.resolve({ state: 'failed', detail: 'Application is shutting down' });
|
|
356
|
+
const run = async () => new Promise(resolve => {
|
|
357
|
+
let detail = '';
|
|
358
|
+
let settled = false;
|
|
359
|
+
let child;
|
|
360
|
+
const finish = (value) => {
|
|
361
|
+
if (settled)
|
|
362
|
+
return;
|
|
363
|
+
settled = true;
|
|
364
|
+
clearTimeout(timer);
|
|
365
|
+
this.installer = undefined;
|
|
366
|
+
resolve(value);
|
|
367
|
+
};
|
|
368
|
+
// A stalled download must not wedge the runtime in 'installing' forever:
|
|
369
|
+
// the installer is stopped and the state reported as failed.
|
|
370
|
+
const timer = setTimeout(() => {
|
|
371
|
+
child?.kill();
|
|
372
|
+
const failed = { state: 'failed', detail: detail || 'Browser runtime install timed out' };
|
|
373
|
+
this.publishRuntime(failed);
|
|
374
|
+
finish(failed);
|
|
375
|
+
}, 20 * 60 * 1000);
|
|
376
|
+
try {
|
|
377
|
+
const entry = fileURLToPath(import.meta.resolve('playwright-core'));
|
|
378
|
+
child = spawn(process.execPath, [join(dirname(entry), 'cli.js'), 'install', 'chromium', '--no-progress'], {
|
|
379
|
+
stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
catch (error) {
|
|
383
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
384
|
+
this.publishRuntime({ state: 'failed', detail: message });
|
|
385
|
+
finish({ state: 'failed', detail: message });
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
this.installer = { child, timer, finish };
|
|
389
|
+
const note = (chunk) => {
|
|
390
|
+
detail = chunk.toString('utf8').split('\n').filter(line => line.trim()).pop()?.slice(0, 300) ?? detail;
|
|
391
|
+
};
|
|
392
|
+
child.stdout?.on('data', note);
|
|
393
|
+
child.stderr?.on('data', note);
|
|
394
|
+
child.on('error', error => {
|
|
395
|
+
this.publishRuntime({ state: 'failed', detail: error.message });
|
|
396
|
+
finish({ state: 'failed', detail: error.message });
|
|
397
|
+
});
|
|
398
|
+
child.on('close', code => {
|
|
399
|
+
if (settled)
|
|
400
|
+
return;
|
|
401
|
+
if (code === 0) {
|
|
402
|
+
void this.runtimeStatus(true).then(status => {
|
|
403
|
+
this.publishRuntime(status);
|
|
404
|
+
finish(status);
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
const failed = { state: 'failed', detail: detail || `Installer exited with code ${code}` };
|
|
409
|
+
this.publishRuntime(failed);
|
|
410
|
+
finish(failed);
|
|
411
|
+
}
|
|
412
|
+
});
|
|
413
|
+
});
|
|
414
|
+
this.installTask = run().finally(() => { this.installTask = undefined; });
|
|
415
|
+
return this.installTask;
|
|
416
|
+
}
|
|
417
|
+
async launch() {
|
|
418
|
+
// Tests supply a fake browser; production launches the real one below.
|
|
419
|
+
if (this.launchBrowser)
|
|
420
|
+
return await this.launchBrowser();
|
|
421
|
+
const { chromium } = await import('playwright-core');
|
|
422
|
+
const failures = [];
|
|
423
|
+
// The probe's candidates in the probe's order. The bundled Chromium is launched
|
|
424
|
+
// by the very executable the probe checked: a default headless launch selects
|
|
425
|
+
// Playwright's separate headless shell, which an install made with `--no-shell`
|
|
426
|
+
// does not have, so probing the full binary and launching the shell would report
|
|
427
|
+
// a ready runtime for a browser that cannot start.
|
|
428
|
+
for (const channel of ['chromium', 'msedge', 'chrome']) {
|
|
429
|
+
if (this.closed)
|
|
430
|
+
throw new Error('Application is shutting down');
|
|
431
|
+
const candidate = channelCandidate(channel, process.platform, () => chromium.executablePath());
|
|
432
|
+
if (!candidate || !existsSync(candidate))
|
|
433
|
+
continue;
|
|
434
|
+
try {
|
|
435
|
+
return await chromium.launch(viewLaunchOptions(channel, candidate));
|
|
436
|
+
}
|
|
437
|
+
catch (error) {
|
|
438
|
+
failures.push((error instanceof Error ? error.message : String(error)).split('\n')[0]);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
throw new Error(`Browser runtime is not usable: ${failures.join('; ').slice(0, 1000)}`);
|
|
442
|
+
}
|
|
443
|
+
summary(session) {
|
|
444
|
+
return {
|
|
445
|
+
tabs: [...session.tabs.values()].map(tab => ({ id: tab.id, url: tab.url, title: tab.title, loading: tab.loading })),
|
|
446
|
+
...(session.activeTabId ? { activeTabId: session.activeTabId } : {}),
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
publishTabs(sessionId, session) {
|
|
450
|
+
// A browser being torn down is no longer the session's: a replacement may
|
|
451
|
+
// already hold the id, and the old generation's late events must not speak
|
|
452
|
+
// for it.
|
|
453
|
+
if (session.closing || this.sessions.get(sessionId) !== session)
|
|
454
|
+
return;
|
|
455
|
+
this.emit('browser.view', { kind: 'tabs', sessionId, ...this.summary(session) });
|
|
456
|
+
}
|
|
457
|
+
scheduleIdleClose(sessionId, session) {
|
|
458
|
+
if (session.idleTimer)
|
|
459
|
+
clearTimeout(session.idleTimer);
|
|
460
|
+
// A session someone is watching (streaming) is never idle-reaped; only an
|
|
461
|
+
// abandoned open browser is, so a forgotten panel cannot pin memory forever.
|
|
462
|
+
session.idleTimer = setTimeout(() => {
|
|
463
|
+
session.idleTimer = undefined;
|
|
464
|
+
// A tab still being created is work in progress, not idleness.
|
|
465
|
+
if (!session.streaming && session.pendingTabs === 0)
|
|
466
|
+
void this.closeSession(sessionId, 'idle', session);
|
|
467
|
+
}, VIEW_IDLE_CLOSE_MS);
|
|
468
|
+
session.idleTimer.unref?.();
|
|
469
|
+
}
|
|
470
|
+
async stopScreencast(tab) {
|
|
471
|
+
tab.streaming = false;
|
|
472
|
+
if (tab.pendingTimer) {
|
|
473
|
+
clearTimeout(tab.pendingTimer);
|
|
474
|
+
tab.pendingTimer = undefined;
|
|
475
|
+
}
|
|
476
|
+
tab.pendingFrame = undefined;
|
|
477
|
+
try {
|
|
478
|
+
await tab.cdp?.send('Page.stopScreencast');
|
|
479
|
+
}
|
|
480
|
+
catch { /* The page is already gone. */ }
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Show one tab: the pane's current size, then its stream.
|
|
484
|
+
*
|
|
485
|
+
* Every path that makes a tab the visible one goes through here — an explicit
|
|
486
|
+
* activation, an open that completed while it still owned the selection, and
|
|
487
|
+
* the fallback chosen when the active tab closes — because a pane resized
|
|
488
|
+
* while the tab was inactive only sized the active page, and a page laid out
|
|
489
|
+
* at a stale size puts every translated click in the wrong place.
|
|
490
|
+
*/
|
|
491
|
+
async showTab(session, tab) {
|
|
492
|
+
if (session.activeTabId !== tab.id)
|
|
493
|
+
return;
|
|
494
|
+
await this.queueViewportMode(session, tab);
|
|
495
|
+
// Two activations can overlap: the later one owns the pane by the time this
|
|
496
|
+
// page finishes resizing, and a stream started for the earlier tab would be
|
|
497
|
+
// a stream nobody sees — while its `streaming` flag would keep the next
|
|
498
|
+
// selection of that tab from ever starting one.
|
|
499
|
+
if (session.activeTabId !== tab.id)
|
|
500
|
+
return;
|
|
501
|
+
await this.startScreencast(session, tab);
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Put one page into the session's viewport mode.
|
|
505
|
+
*
|
|
506
|
+
* Desktop sizes the page to the pane. Mobile is full emulation: the fixed
|
|
507
|
+
* phone's device metrics — `mobile: true` is what makes the meta viewport
|
|
508
|
+
* respected, with a phone's pixel density — a mobile Chrome user agent, and
|
|
509
|
+
* touch events, so the sites the pane shows answer with their mobile layouts
|
|
510
|
+
* and hover-dependent UIs behave like they do on a phone. Leaving Mobile
|
|
511
|
+
* clears the metrics and resets the user agent with an empty override —
|
|
512
|
+
* Chromium answers that with the page's own browser UA (verified live), so
|
|
513
|
+
* nothing about the page before the switch needs remembering. A switch
|
|
514
|
+
* changes the page's size, so the caller restarts the screencast for the new
|
|
515
|
+
* capture scale.
|
|
516
|
+
*
|
|
517
|
+
* Calls for one tab are serialized by `queueViewportMode`: each applies
|
|
518
|
+
* whatever the session's mode is at its turn, so a rapid toggle cannot leave
|
|
519
|
+
* a page emulated under a session that has already moved on.
|
|
520
|
+
*/
|
|
521
|
+
async applyViewportMode(session, tab) {
|
|
522
|
+
const mobile = session.mode === 'mobile';
|
|
523
|
+
try {
|
|
524
|
+
if (mobile) {
|
|
525
|
+
// Full device metrics, not just dimensions. Playwright's own
|
|
526
|
+
// setViewportSize would re-issue the override with `mobile: false`, so
|
|
527
|
+
// while Mobile is on, this override is the page's only sizing
|
|
528
|
+
// authority (verified live: the metrics override yields exactly
|
|
529
|
+
// 390×844 screencast frames at a phone's pixel density).
|
|
530
|
+
await tab.cdp.send('Emulation.setDeviceMetricsOverride', {
|
|
531
|
+
width: VIEW_MOBILE_VIEWPORT.width, height: VIEW_MOBILE_VIEWPORT.height, deviceScaleFactor: 3, mobile: true,
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
else {
|
|
535
|
+
if (tab.emulated)
|
|
536
|
+
await tab.cdp.send('Emulation.clearDeviceMetricsOverride');
|
|
537
|
+
await tab.page.setViewportSize(session.viewport).catch(() => { });
|
|
538
|
+
}
|
|
539
|
+
if (mobile === Boolean(tab.emulated))
|
|
540
|
+
return;
|
|
541
|
+
tab.emulated = mobile;
|
|
542
|
+
await tab.cdp.send('Emulation.setUserAgentOverride', mobile
|
|
543
|
+
? { userAgent: VIEW_MOBILE_USER_AGENT }
|
|
544
|
+
// An empty user agent resets the page to its own browser's UA.
|
|
545
|
+
: { userAgent: '' });
|
|
546
|
+
await tab.cdp.send('Emulation.setTouchEmulationEnabled', { enabled: mobile, ...(mobile ? { maxTouchPoints: 5 } : {}) });
|
|
547
|
+
}
|
|
548
|
+
catch { /* The page is gone; the next activation retries. */ }
|
|
549
|
+
}
|
|
550
|
+
/** The per-tab serialization `applyViewportMode` relies on; see its note. */
|
|
551
|
+
queueViewportMode(session, tab) {
|
|
552
|
+
const tail = (tab.modeTask ?? Promise.resolve()).catch(() => { });
|
|
553
|
+
tab.modeTask = tail.then(() => this.applyViewportMode(session, tab));
|
|
554
|
+
return tab.modeTask;
|
|
555
|
+
}
|
|
556
|
+
emitFrame(sessionId, session, tab, payload) {
|
|
557
|
+
// Frames still in flight from a replaced browser belong to nobody.
|
|
558
|
+
if (session.closing || this.sessions.get(sessionId) !== session)
|
|
559
|
+
return;
|
|
560
|
+
const size = jpegSize(Buffer.from(payload.data, 'base64'));
|
|
561
|
+
if (!size)
|
|
562
|
+
return;
|
|
563
|
+
tab.lastEmitAt = Date.now();
|
|
564
|
+
tab.seq += 1;
|
|
565
|
+
tab.imageWidth = size.width;
|
|
566
|
+
tab.imageHeight = size.height;
|
|
567
|
+
this.emit('browser.view', {
|
|
568
|
+
kind: 'frame', sessionId, tabId: tab.id, seq: tab.seq, image: payload.data,
|
|
569
|
+
imageWidth: size.width, imageHeight: size.height,
|
|
570
|
+
viewportWidth: session.viewport.width, viewportHeight: session.viewport.height,
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
async startScreencast(session, tab) {
|
|
574
|
+
if (!session.streaming || tab.streaming)
|
|
575
|
+
return;
|
|
576
|
+
tab.streaming = true;
|
|
577
|
+
tab.lastEmitAt = undefined;
|
|
578
|
+
try {
|
|
579
|
+
await tab.cdp.send('Page.startScreencast', {
|
|
580
|
+
format: 'jpeg', quality: session.quality,
|
|
581
|
+
// The viewport clamp's maxima, fixed rather than sized to the current
|
|
582
|
+
// viewport: no legal resize exceeds them, so frames are never scaled
|
|
583
|
+
// down by the caps and a resize only ever needs the restart for the new
|
|
584
|
+
// capture scale, not new caps.
|
|
585
|
+
maxWidth: 1600, maxHeight: 2200,
|
|
586
|
+
everyNthFrame: 1,
|
|
587
|
+
});
|
|
588
|
+
}
|
|
589
|
+
catch {
|
|
590
|
+
tab.streaming = false;
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
wireTab(sessionId, session, page, cdp) {
|
|
594
|
+
const tab = {
|
|
595
|
+
id: randomUUID(), page, cdp, url: '', title: '', loading: false,
|
|
596
|
+
streaming: false, seq: 0, lastEmitAt: undefined, imageWidth: session.viewport.width, imageHeight: session.viewport.height,
|
|
597
|
+
};
|
|
598
|
+
const publish = () => this.publishTabs(sessionId, session);
|
|
599
|
+
// A fragment link or a `pushState` route change commits without loading a
|
|
600
|
+
// document: `framenavigated` fires, `domcontentloaded` does not. Tracking the
|
|
601
|
+
// document request is what tells the two apart, so the commit of a new
|
|
602
|
+
// document clears the previous one's title and marks the tab loading while a
|
|
603
|
+
// same-document commit only moves the address.
|
|
604
|
+
let documentRequest;
|
|
605
|
+
page.on('request', (request) => {
|
|
606
|
+
try {
|
|
607
|
+
if (request?.isNavigationRequest?.() === true && request.frame?.() === page.mainFrame())
|
|
608
|
+
documentRequest = request;
|
|
609
|
+
}
|
|
610
|
+
catch { /* A request with no frame is not the document's own. */ }
|
|
611
|
+
});
|
|
612
|
+
page.on('requestfailed', (request) => { if (request === documentRequest)
|
|
613
|
+
documentRequest = undefined; });
|
|
614
|
+
page.on('framenavigated', (frame) => {
|
|
615
|
+
if (frame !== page.mainFrame())
|
|
616
|
+
return;
|
|
617
|
+
tab.url = String(frame.url()).slice(0, VIEW_URL_LIMIT);
|
|
618
|
+
const newDocument = documentRequest !== undefined;
|
|
619
|
+
documentRequest = undefined;
|
|
620
|
+
if (newDocument) {
|
|
621
|
+
tab.loading = true;
|
|
622
|
+
tab.title = '';
|
|
623
|
+
}
|
|
624
|
+
publish();
|
|
625
|
+
});
|
|
626
|
+
page.on('domcontentloaded', () => {
|
|
627
|
+
tab.loading = false;
|
|
628
|
+
void page.title().then((title) => {
|
|
629
|
+
if (typeof title === 'string') {
|
|
630
|
+
tab.title = title.slice(0, 300);
|
|
631
|
+
publish();
|
|
632
|
+
}
|
|
633
|
+
}, () => { });
|
|
634
|
+
publish();
|
|
635
|
+
});
|
|
636
|
+
page.on('close', () => {
|
|
637
|
+
session.tabs.delete(tab.id);
|
|
638
|
+
if (session.activeTabId === tab.id) {
|
|
639
|
+
session.activeTabId = [...session.tabs.keys()][0];
|
|
640
|
+
const next = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
641
|
+
if (next)
|
|
642
|
+
void this.showTab(session, next);
|
|
643
|
+
}
|
|
644
|
+
// A tab whose page is still being created is a live session too: closing
|
|
645
|
+
// the browser here would take it away from the open that is waiting on it.
|
|
646
|
+
if (session.tabs.size === 0 && session.pendingTabs === 0)
|
|
647
|
+
void this.closeSession(sessionId, undefined, session);
|
|
648
|
+
else
|
|
649
|
+
publish();
|
|
650
|
+
});
|
|
651
|
+
page.on('crash', () => { void page.close().catch(() => { }); });
|
|
652
|
+
// A `target="_blank"` link or `window.open()` opens a page of its own; without
|
|
653
|
+
// this the destination loads in a browser nobody can see. A popup becomes a
|
|
654
|
+
// tab of the session (the cap applies to it like any other open), and it
|
|
655
|
+
// takes the pane so the user follows the link they clicked.
|
|
656
|
+
page.on('popup', (popup) => { void this.adoptPage(sessionId, session, popup); });
|
|
657
|
+
cdp.on('Page.screencastFrame', async (payload) => {
|
|
658
|
+
// Acknowledge first, always: the stream has a small outstanding-frame
|
|
659
|
+
// window, and an unacknowledged frame stalls it even when this frame is
|
|
660
|
+
// held back by the pacing window or its tab is no longer active.
|
|
661
|
+
try {
|
|
662
|
+
await cdp.send('Page.screencastFrameAck', { sessionId: payload.sessionId });
|
|
663
|
+
}
|
|
664
|
+
catch { /* Gone. */ }
|
|
665
|
+
if (!tab.streaming || session.activeTabId !== tab.id || session.closing)
|
|
666
|
+
return;
|
|
667
|
+
const now = Date.now();
|
|
668
|
+
if (frameGate(now, tab.lastEmitAt, VIEW_FRAME_MIN_INTERVAL_MS)) {
|
|
669
|
+
if (tab.pendingTimer) {
|
|
670
|
+
clearTimeout(tab.pendingTimer);
|
|
671
|
+
tab.pendingTimer = undefined;
|
|
672
|
+
}
|
|
673
|
+
tab.pendingFrame = undefined;
|
|
674
|
+
this.emitFrame(sessionId, session, tab, payload);
|
|
675
|
+
return;
|
|
676
|
+
}
|
|
677
|
+
// Inside the pacing window: keep only the newest image and deliver it
|
|
678
|
+
// when the window opens. Dropping it outright would leave the panel on an
|
|
679
|
+
// older frame forever when the page's last update lands here.
|
|
680
|
+
tab.pendingFrame = payload;
|
|
681
|
+
if (tab.pendingTimer)
|
|
682
|
+
return;
|
|
683
|
+
const wait = Math.max(0, VIEW_FRAME_MIN_INTERVAL_MS - (now - (tab.lastEmitAt ?? now)));
|
|
684
|
+
tab.pendingTimer = setTimeout(() => {
|
|
685
|
+
tab.pendingTimer = undefined;
|
|
686
|
+
const pending = tab.pendingFrame;
|
|
687
|
+
tab.pendingFrame = undefined;
|
|
688
|
+
if (!pending || !tab.streaming || session.activeTabId !== tab.id || session.closing)
|
|
689
|
+
return;
|
|
690
|
+
this.emitFrame(sessionId, session, tab, pending);
|
|
691
|
+
}, wait);
|
|
692
|
+
tab.pendingTimer.unref?.();
|
|
693
|
+
});
|
|
694
|
+
session.tabs.set(tab.id, tab);
|
|
695
|
+
return tab;
|
|
696
|
+
}
|
|
697
|
+
/**
|
|
698
|
+
* A frame straight from the page, for a stream that is already running.
|
|
699
|
+
*
|
|
700
|
+
* A pane that reattaches (a renderer reload) has no image of its own, and a
|
|
701
|
+
* static page produces no new screencast frames, so the screencast's own
|
|
702
|
+
* stream cannot supply one. A screenshot is bounded and always reflects the
|
|
703
|
+
* page as it is now.
|
|
704
|
+
*/
|
|
705
|
+
async captureFrame(sessionId, session, tab) {
|
|
706
|
+
try {
|
|
707
|
+
const shot = await tab.cdp?.send('Page.captureScreenshot', { format: 'jpeg', quality: session.quality });
|
|
708
|
+
if (typeof shot?.data !== 'string')
|
|
709
|
+
return;
|
|
710
|
+
if (!tab.streaming || session.activeTabId !== tab.id || session.closing)
|
|
711
|
+
return;
|
|
712
|
+
this.emitFrame(sessionId, session, tab, { data: shot.data, sessionId: 'capture' });
|
|
713
|
+
}
|
|
714
|
+
catch { /* The page may be mid-navigation; the stream supplies the next frame. */ }
|
|
715
|
+
}
|
|
716
|
+
/**
|
|
717
|
+
* A page the browser opened on its own, adopted as a tab of the session.
|
|
718
|
+
*
|
|
719
|
+
* The page is already live, so it only needs a CDP session and its pane
|
|
720
|
+
* geometry. Past the tab cap the popup is closed rather than left running as an
|
|
721
|
+
* invisible page: the cap states one bound for everything the browser holds.
|
|
722
|
+
*/
|
|
723
|
+
async adoptPage(sessionId, session, page) {
|
|
724
|
+
if (session.closing) {
|
|
725
|
+
await Promise.resolve().then(() => page.close()).catch(() => { });
|
|
726
|
+
return;
|
|
727
|
+
}
|
|
728
|
+
if (session.tabs.size + session.pendingTabs >= VIEW_TAB_LIMIT) {
|
|
729
|
+
await Promise.resolve().then(() => page.close()).catch(() => { });
|
|
730
|
+
return;
|
|
731
|
+
}
|
|
732
|
+
session.pendingTabs += 1;
|
|
733
|
+
try {
|
|
734
|
+
const cdp = await page.context().newCDPSession(page);
|
|
735
|
+
const previous = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
736
|
+
if (previous)
|
|
737
|
+
await this.stopScreencast(previous);
|
|
738
|
+
// Adoption yields before it takes the pane, so a tab activated meanwhile is
|
|
739
|
+
// streaming by now; assigning the popup would discard its frames while its
|
|
740
|
+
// `streaming` flag stayed on, and reselecting it would request neither a new
|
|
741
|
+
// screencast nor a screenshot. Stop the tab that actually holds the pane, as
|
|
742
|
+
// an open does; the loop is bounded by a stream really running, because a
|
|
743
|
+
// stop with nothing to do cannot have yielded.
|
|
744
|
+
let selected = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
745
|
+
while (selected && selected.streaming) {
|
|
746
|
+
await this.stopScreencast(selected);
|
|
747
|
+
selected = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
748
|
+
}
|
|
749
|
+
if (session.closing) {
|
|
750
|
+
await page.close().catch(() => { });
|
|
751
|
+
return;
|
|
752
|
+
}
|
|
753
|
+
const tab = this.wireTab(sessionId, session, page, cdp);
|
|
754
|
+
await this.queueViewportMode(session, tab);
|
|
755
|
+
// The mode application yields, so a tab the user activated meanwhile can
|
|
756
|
+
// be streaming: it stops before the popup takes the pane, or it would
|
|
757
|
+
// stream on with nobody watching — the same reason the loop above ran.
|
|
758
|
+
selected = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
759
|
+
while (selected && selected.streaming) {
|
|
760
|
+
await this.stopScreencast(selected);
|
|
761
|
+
selected = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
762
|
+
}
|
|
763
|
+
if (session.closing) {
|
|
764
|
+
await page.close().catch(() => { });
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
767
|
+
session.activeTabId = tab.id;
|
|
768
|
+
// The popup has usually navigated before it reached us, so its landing URL
|
|
769
|
+
// is read from the page rather than waiting for an event that already fired.
|
|
770
|
+
tab.url = String(page.url?.() ?? '').slice(0, VIEW_URL_LIMIT);
|
|
771
|
+
void page.title?.().then((title) => {
|
|
772
|
+
if (typeof title === 'string' && title) {
|
|
773
|
+
tab.title = title.slice(0, 300);
|
|
774
|
+
this.publishTabs(sessionId, session);
|
|
775
|
+
}
|
|
776
|
+
}, () => { });
|
|
777
|
+
await this.startScreencast(session, tab);
|
|
778
|
+
this.publishTabs(sessionId, session);
|
|
779
|
+
}
|
|
780
|
+
catch {
|
|
781
|
+
await Promise.resolve().then(() => page.close()).catch(() => { });
|
|
782
|
+
}
|
|
783
|
+
finally {
|
|
784
|
+
session.pendingTabs -= 1;
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
async ensureSession(sessionId) {
|
|
788
|
+
const existing = this.sessions.get(sessionId);
|
|
789
|
+
if (existing) {
|
|
790
|
+
this.scheduleIdleClose(sessionId, existing);
|
|
791
|
+
return existing;
|
|
792
|
+
}
|
|
793
|
+
// A second open can arrive while the first is still launching (Enter pressed
|
|
794
|
+
// twice). It joins that launch instead of starting a second browser whose
|
|
795
|
+
// session record would overwrite the first and leave it unreachable.
|
|
796
|
+
const inflight = this.launching.get(sessionId);
|
|
797
|
+
if (inflight)
|
|
798
|
+
return await inflight;
|
|
799
|
+
if (this.sessions.size + this.launching.size >= VIEW_SESSION_LIMIT)
|
|
800
|
+
throw new Error('Too many open panel browsers; close one first');
|
|
801
|
+
if (this.closed)
|
|
802
|
+
throw new Error('Application is shutting down');
|
|
803
|
+
const starting = (async () => {
|
|
804
|
+
const browser = await this.launch();
|
|
805
|
+
// Shutdown may have finished while the launch was in flight: the browser
|
|
806
|
+
// that arrived late belongs to nobody, so it is closed here rather than
|
|
807
|
+
// inserted into a manager that has already visited its sessions.
|
|
808
|
+
if (this.closed) {
|
|
809
|
+
await Promise.resolve().then(() => browser.close()).catch(() => { });
|
|
810
|
+
throw new Error('Application is shutting down');
|
|
811
|
+
}
|
|
812
|
+
// A release that landed while this launch was in flight has already closed
|
|
813
|
+
// whatever it found; the browser this launch just produced belongs to the
|
|
814
|
+
// session that no longer exists, so it goes the same way.
|
|
815
|
+
if (this.released.delete(sessionId)) {
|
|
816
|
+
await Promise.resolve().then(() => browser.close()).catch(() => { });
|
|
817
|
+
throw new Error('That session was deleted.');
|
|
818
|
+
}
|
|
819
|
+
const desired = this.desired.get(sessionId);
|
|
820
|
+
const session = {
|
|
821
|
+
browser, tabs: new Map(), activeTabId: undefined, pendingTabs: 0,
|
|
822
|
+
viewport: desired?.viewport ?? clampViewport(undefined, undefined),
|
|
823
|
+
mode: desired?.mode ?? 'desktop',
|
|
824
|
+
streaming: desired !== undefined, quality: desired?.quality ?? VIEW_STREAM_QUALITY, idleTimer: undefined,
|
|
825
|
+
};
|
|
826
|
+
this.sessions.set(sessionId, session);
|
|
827
|
+
this.scheduleIdleClose(sessionId, session);
|
|
828
|
+
return session;
|
|
829
|
+
})();
|
|
830
|
+
this.launching.set(sessionId, starting);
|
|
831
|
+
try {
|
|
832
|
+
return await starting;
|
|
833
|
+
}
|
|
834
|
+
finally {
|
|
835
|
+
this.launching.delete(sessionId);
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
/**
|
|
839
|
+
* The session's browser context, created once.
|
|
840
|
+
*
|
|
841
|
+
* One context per session is what makes the tabs one browser: cookies, local
|
|
842
|
+
* storage and cache are shared across the session's pages, and sessions stay
|
|
843
|
+
* isolated from each other.
|
|
844
|
+
*/
|
|
845
|
+
async contextFor(session) {
|
|
846
|
+
if (session.context)
|
|
847
|
+
return session.context;
|
|
848
|
+
session.contextTask ??= Promise.resolve()
|
|
849
|
+
.then(() => session.browser.newContext({ viewport: { ...session.viewport }, acceptDownloads: false }))
|
|
850
|
+
.then((context) => { session.context = context; return context; });
|
|
851
|
+
return await session.contextTask;
|
|
852
|
+
}
|
|
853
|
+
async openTab(sessionId, url, signal) {
|
|
854
|
+
const target = browserViewUrl(url);
|
|
855
|
+
const session = await this.ensureSession(sessionId);
|
|
856
|
+
// The launch is the longest wait here, and the one a stop usually arrives
|
|
857
|
+
// during: a cancelled call returns before creating a page at all.
|
|
858
|
+
signal?.throwIfAborted();
|
|
859
|
+
if (session.closing)
|
|
860
|
+
throw new Error('Browser is closing; retry shortly');
|
|
861
|
+
// Capacity is reserved before the first await. Stopping the previous
|
|
862
|
+
// screencast and creating the page both yield, so a burst of overlapping
|
|
863
|
+
// opens would otherwise all pass a plain `tabs.size` check and exceed the
|
|
864
|
+
// cap with pages nobody intended to keep.
|
|
865
|
+
if (session.tabs.size + session.pendingTabs >= VIEW_TAB_LIMIT)
|
|
866
|
+
throw new Error('Close a tab before opening another (maximum 6)');
|
|
867
|
+
session.pendingTabs += 1;
|
|
868
|
+
let reserved = true;
|
|
869
|
+
const release = () => {
|
|
870
|
+
if (!reserved)
|
|
871
|
+
return;
|
|
872
|
+
reserved = false;
|
|
873
|
+
session.pendingTabs -= 1;
|
|
874
|
+
};
|
|
875
|
+
const previous = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
876
|
+
try {
|
|
877
|
+
if (previous)
|
|
878
|
+
await this.stopScreencast(previous);
|
|
879
|
+
const context = await this.contextFor(session);
|
|
880
|
+
const page = await context.newPage();
|
|
881
|
+
const cdp = await page.context().newCDPSession(page);
|
|
882
|
+
const tab = this.wireTab(sessionId, session, page, cdp);
|
|
883
|
+
// The context was created at the viewport of the first open; a tab opened
|
|
884
|
+
// after the pane was resized has to match the pane it will be shown in, or
|
|
885
|
+
// its layout and every translated click would use the old size. The mode's
|
|
886
|
+
// emulation rides along on the same call.
|
|
887
|
+
await this.queueViewportMode(session, tab);
|
|
888
|
+
// The reservation has become a real tab; the cap now counts it directly.
|
|
889
|
+
release();
|
|
890
|
+
// The pane follows the newest open. The selection may have moved while this
|
|
891
|
+
// page was being created, so it is re-read and stopped until it is this
|
|
892
|
+
// tab's: a stream left running for a tab nobody sees discards its frames
|
|
893
|
+
// while keeping `streaming` true, and selecting that tab again would then
|
|
894
|
+
// start nothing. The loop is bounded by the tab actually streaming — a stop
|
|
895
|
+
// with nothing to do cannot have yielded to another activation, so the
|
|
896
|
+
// assignment that follows is atomic.
|
|
897
|
+
let selected = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
898
|
+
while (selected && selected.id !== tab.id && selected.streaming) {
|
|
899
|
+
await this.stopScreencast(selected);
|
|
900
|
+
// An activation can land during that await; stop whatever the selection
|
|
901
|
+
// has become before this tab takes it.
|
|
902
|
+
selected = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
903
|
+
}
|
|
904
|
+
// Creating the page stops the previous screencast, and both yield: a run
|
|
905
|
+
// stopped while its tab was being made must not select it or load the URL
|
|
906
|
+
// afterwards, so only the unfinished tab is closed here — the rest of the
|
|
907
|
+
// shared browser the user is watching stays exactly as it is.
|
|
908
|
+
if (signal?.aborted) {
|
|
909
|
+
await this.discardTab(sessionId, session, tab, previous);
|
|
910
|
+
// The pane never left the tab it was on, but this open had already stopped that tab's
|
|
911
|
+
// stream: without restarting it the panel would sit frozen on a tab that still accepts
|
|
912
|
+
// input. `discardTab` restores the stream only for a tab that held the pane, which this
|
|
913
|
+
// one never did.
|
|
914
|
+
const survivor = session.activeTabId === undefined ? undefined : session.tabs.get(session.activeTabId);
|
|
915
|
+
if (survivor && !survivor.streaming)
|
|
916
|
+
await this.showTab(session, survivor);
|
|
917
|
+
signal.throwIfAborted();
|
|
918
|
+
}
|
|
919
|
+
session.activeTabId = tab.id;
|
|
920
|
+
// The pane's target changes here, before the navigation it waits for: an
|
|
921
|
+
// input request naming no tab of its own would otherwise land on a page the
|
|
922
|
+
// panel is not showing yet, and the strip would still name the old one.
|
|
923
|
+
this.publishTabs(sessionId, session);
|
|
924
|
+
try {
|
|
925
|
+
await page.goto(target, { waitUntil: 'domcontentloaded', timeout: VIEW_GOTO_TIMEOUT_MS });
|
|
926
|
+
}
|
|
927
|
+
catch (error) {
|
|
928
|
+
// A page that failed its first navigation is not a tab worth keeping: an
|
|
929
|
+
// address-bar retry would otherwise stack error pages behind it.
|
|
930
|
+
await this.discardTab(sessionId, session, tab, previous);
|
|
931
|
+
throw error;
|
|
932
|
+
}
|
|
933
|
+
// The URL the tab shows is the one the page actually landed on
|
|
934
|
+
// (`framenavigated` records redirects); the requested target may differ.
|
|
935
|
+
// A slow open that finished after a later one took the selection must not
|
|
936
|
+
// start a stream for a tab nobody is looking at: its frames would be
|
|
937
|
+
// discarded while `streaming` stayed true, and activating it later would
|
|
938
|
+
// find the stream already "running" and never ask for a fresh frame.
|
|
939
|
+
if (session.activeTabId === tab.id)
|
|
940
|
+
await this.showTab(session, tab);
|
|
941
|
+
this.publishTabs(sessionId, session);
|
|
942
|
+
// The pane follows an open, whoever drove it: an agent's first tab is the
|
|
943
|
+
// moment the panel should be on screen, and expanding an open pane is a
|
|
944
|
+
// no-op, so the user's own opens can simply ride the same event. A session
|
|
945
|
+
// being torn down is nobody's pane to open.
|
|
946
|
+
if (!session.closing)
|
|
947
|
+
this.emit('browser.panel.opened', { sessionId });
|
|
948
|
+
return { tabId: tab.id };
|
|
949
|
+
}
|
|
950
|
+
finally {
|
|
951
|
+
release();
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
/**
|
|
955
|
+
* Remove one tab an open created and did not finish.
|
|
956
|
+
*
|
|
957
|
+
* The page itself is closed too — a discarded page still runs and still counts
|
|
958
|
+
* against the browser, and the tab cap only counts pages it holds. Only the
|
|
959
|
+
* unfinished tab goes: the rest of the shared browser, which the user may be
|
|
960
|
+
* watching, is left as it is.
|
|
961
|
+
*/
|
|
962
|
+
async discardTab(sessionId, session, tab, previous) {
|
|
963
|
+
session.tabs.delete(tab.id);
|
|
964
|
+
// Only the tab that is still selected may hand the pane back: an overlapping
|
|
965
|
+
// open that succeeded meanwhile owns it, and clearing its selection would
|
|
966
|
+
// leave a visible tab that input cannot address. The tab that owned the pane
|
|
967
|
+
// before this open may itself have been closed while the open was in flight,
|
|
968
|
+
// so a survivor is chosen instead.
|
|
969
|
+
if (session.activeTabId === tab.id) {
|
|
970
|
+
const fallback = previous && session.tabs.has(previous.id) ? previous : [...session.tabs.values()][0];
|
|
971
|
+
session.activeTabId = fallback?.id;
|
|
972
|
+
if (fallback)
|
|
973
|
+
void this.showTab(session, fallback);
|
|
974
|
+
}
|
|
975
|
+
await tab.cdp?.detach().catch(() => { });
|
|
976
|
+
await tab.page.close().catch(() => { });
|
|
977
|
+
// Another open may still be creating its page: the session is not empty.
|
|
978
|
+
if (session.tabs.size === 0 && session.pendingTabs === 0)
|
|
979
|
+
void this.closeSession(sessionId, undefined, session);
|
|
980
|
+
}
|
|
981
|
+
activeOrNamed(session, tabId) {
|
|
982
|
+
// An explicit id names one tab: falling back to the selection would let a
|
|
983
|
+
// repeated close of a tab that is already gone destroy an unrelated one.
|
|
984
|
+
if (tabId !== undefined) {
|
|
985
|
+
const named = session.tabs.get(tabId);
|
|
986
|
+
if (!named)
|
|
987
|
+
throw new Error(`No browser tab is open for this session with id ${tabId}`);
|
|
988
|
+
return named;
|
|
989
|
+
}
|
|
990
|
+
const tab = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
991
|
+
if (!tab)
|
|
992
|
+
throw new Error('No browser tab is open for this session');
|
|
993
|
+
return tab;
|
|
994
|
+
}
|
|
995
|
+
async navigate(sessionId, url, tabId) {
|
|
996
|
+
const target = browserViewUrl(url);
|
|
997
|
+
const session = this.sessions.get(sessionId);
|
|
998
|
+
if (!session)
|
|
999
|
+
throw new Error('No browser tab is open for this session');
|
|
1000
|
+
const tab = this.activeOrNamed(session, tabId);
|
|
1001
|
+
this.scheduleIdleClose(sessionId, session);
|
|
1002
|
+
await tab.page.goto(target, { waitUntil: 'domcontentloaded', timeout: VIEW_GOTO_TIMEOUT_MS });
|
|
1003
|
+
// `framenavigated` owns the tab's URL (it records where redirects landed);
|
|
1004
|
+
// overwriting it here would describe an address the page is not showing.
|
|
1005
|
+
this.publishTabs(sessionId, session);
|
|
1006
|
+
// A navigation is new content in the pane: the same pop-up an open gets.
|
|
1007
|
+
if (!session.closing)
|
|
1008
|
+
this.emit('browser.panel.opened', { sessionId });
|
|
1009
|
+
}
|
|
1010
|
+
async activateTab(sessionId, tabId) {
|
|
1011
|
+
const session = this.sessions.get(sessionId);
|
|
1012
|
+
if (!session || !session.tabs.has(tabId))
|
|
1013
|
+
throw new Error('Unknown browser tab for this session');
|
|
1014
|
+
const previous = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
1015
|
+
if (previous && previous.id !== tabId)
|
|
1016
|
+
await this.stopScreencast(previous);
|
|
1017
|
+
// Another activation can have taken the pane while this one waited for that
|
|
1018
|
+
// stop: whatever holds the selection now gives up its stream too, or its flag
|
|
1019
|
+
// would keep its next selection from ever starting one. Bounded by a stream
|
|
1020
|
+
// really running, as everywhere else that waits on a stop.
|
|
1021
|
+
let holding = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
1022
|
+
while (holding && holding.streaming && holding.id !== tabId) {
|
|
1023
|
+
await this.stopScreencast(holding);
|
|
1024
|
+
holding = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
1025
|
+
}
|
|
1026
|
+
// The stop yields, so the tab being activated can have closed in that window.
|
|
1027
|
+
// Naming it anyway would strand the pane on an id nothing can address, with
|
|
1028
|
+
// the survivor's stream stopped and every implicit request refused.
|
|
1029
|
+
if (!session.tabs.has(tabId)) {
|
|
1030
|
+
const survivor = previous && session.tabs.has(previous.id) ? previous : [...session.tabs.values()][0];
|
|
1031
|
+
session.activeTabId = survivor?.id;
|
|
1032
|
+
if (survivor)
|
|
1033
|
+
await this.showTab(session, survivor);
|
|
1034
|
+
this.publishTabs(sessionId, session);
|
|
1035
|
+
return;
|
|
1036
|
+
}
|
|
1037
|
+
session.activeTabId = tabId;
|
|
1038
|
+
const tab = session.tabs.get(tabId);
|
|
1039
|
+
// A pane resized while this tab was inactive only sized the active page. The
|
|
1040
|
+
// page is brought to the session's current viewport before it streams, so
|
|
1041
|
+
// input translation and the displayed frame agree on the page's size.
|
|
1042
|
+
await this.showTab(session, tab);
|
|
1043
|
+
this.scheduleIdleClose(sessionId, session);
|
|
1044
|
+
this.publishTabs(sessionId, session);
|
|
1045
|
+
}
|
|
1046
|
+
async closeTab(sessionId, tabId) {
|
|
1047
|
+
const session = this.sessions.get(sessionId);
|
|
1048
|
+
if (!session)
|
|
1049
|
+
return;
|
|
1050
|
+
const tab = this.activeOrNamed(session, tabId);
|
|
1051
|
+
await this.stopScreencast(tab);
|
|
1052
|
+
await tab.page.close().catch(() => { });
|
|
1053
|
+
}
|
|
1054
|
+
/**
|
|
1055
|
+
* Panel geometry: the page viewport and the streamed frame target follow the
|
|
1056
|
+
* pane, or Mobile mode's fixed phone viewport with its emulation.
|
|
1057
|
+
*
|
|
1058
|
+
* The request is remembered even when the session has no browser yet: a panel
|
|
1059
|
+
* mounts and asks for frames before its first tab is opened, and the open
|
|
1060
|
+
* adopts the remembered request. Disabling forgets it, so a collapsed panel
|
|
1061
|
+
* that is later reopened makes a fresh, explicitly desired request.
|
|
1062
|
+
*/
|
|
1063
|
+
async configureStream(sessionId, options) {
|
|
1064
|
+
if (!options.enabled) {
|
|
1065
|
+
this.desired.delete(sessionId);
|
|
1066
|
+
const session = this.sessions.get(sessionId);
|
|
1067
|
+
if (!session)
|
|
1068
|
+
return;
|
|
1069
|
+
session.streaming = false;
|
|
1070
|
+
for (const tab of session.tabs.values()) {
|
|
1071
|
+
// A newer enable took the pane back while this disable was stopping tabs:
|
|
1072
|
+
// its stream stands, and the stops still owed belong to it, not this one.
|
|
1073
|
+
if (session.streaming)
|
|
1074
|
+
return;
|
|
1075
|
+
await this.stopScreencast(tab);
|
|
1076
|
+
}
|
|
1077
|
+
this.scheduleIdleClose(sessionId, session);
|
|
1078
|
+
return;
|
|
1079
|
+
}
|
|
1080
|
+
const mode = options.mode === 'mobile' ? 'mobile' : 'desktop';
|
|
1081
|
+
const viewport = mode === 'mobile' ? { ...VIEW_MOBILE_VIEWPORT } : clampViewport(options.viewportWidth, options.viewportHeight);
|
|
1082
|
+
const quality = Number.isSafeInteger(options.quality) ? Math.max(30, Math.min(90, options.quality)) : VIEW_STREAM_QUALITY;
|
|
1083
|
+
this.desired.set(sessionId, { viewport, quality, mode });
|
|
1084
|
+
const session = this.sessions.get(sessionId);
|
|
1085
|
+
if (!session)
|
|
1086
|
+
return;
|
|
1087
|
+
session.streaming = true;
|
|
1088
|
+
const modeChanged = mode !== session.mode;
|
|
1089
|
+
const resized = viewport.width !== session.viewport.width || viewport.height !== session.viewport.height;
|
|
1090
|
+
session.mode = mode;
|
|
1091
|
+
session.viewport = viewport;
|
|
1092
|
+
session.quality = quality;
|
|
1093
|
+
this.scheduleIdleClose(sessionId, session);
|
|
1094
|
+
const active = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
1095
|
+
if (!active)
|
|
1096
|
+
return;
|
|
1097
|
+
if (resized || modeChanged) {
|
|
1098
|
+
// A mode switch is more than a resize: the page is put into or taken out
|
|
1099
|
+
// of the phone's emulation.
|
|
1100
|
+
await this.queueViewportMode(session, active);
|
|
1101
|
+
// Applying yields, so the selection can have moved by the time it lands:
|
|
1102
|
+
// the tab that lost the pane stops streaming, and the pane's new owner
|
|
1103
|
+
// gets the fresh geometry through the guarded path.
|
|
1104
|
+
if (session.activeTabId !== active.id) {
|
|
1105
|
+
await this.stopScreencast(active);
|
|
1106
|
+
const selected = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
1107
|
+
if (selected)
|
|
1108
|
+
await this.showTab(session, selected);
|
|
1109
|
+
return;
|
|
1110
|
+
}
|
|
1111
|
+
// The screencast bakes its capture scale in at start: a page resized under
|
|
1112
|
+
// a running stream delivers frames scaled to the old size (verified live —
|
|
1113
|
+
// a 560×800 page after a 390-wide capture arrives 390×557), so the stream
|
|
1114
|
+
// restarts to pick up the new geometry. The pane holds its last painted
|
|
1115
|
+
// frame through the gap, so the UI never blanks while it happens.
|
|
1116
|
+
await this.stopScreencast(active);
|
|
1117
|
+
// The stop yields, so the selection can have moved by the time it lands:
|
|
1118
|
+
// restarting this tab would stream one nobody sees while leaving its flag
|
|
1119
|
+
// on, and the pane's new owner would wait for frames that never come.
|
|
1120
|
+
if (session.activeTabId !== active.id) {
|
|
1121
|
+
const selected = session.activeTabId ? session.tabs.get(session.activeTabId) : undefined;
|
|
1122
|
+
if (selected)
|
|
1123
|
+
await this.showTab(session, selected);
|
|
1124
|
+
return;
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
const reattached = active.streaming;
|
|
1128
|
+
await this.startScreencast(session, active);
|
|
1129
|
+
// A stream that was already running sends nothing more for a page that is
|
|
1130
|
+
// not repainting, so a pane that returned (renderer reload) would have no
|
|
1131
|
+
// image; asking for one now makes the resumed panel show the page as it is.
|
|
1132
|
+
if (reattached)
|
|
1133
|
+
await this.captureFrame(sessionId, session, active);
|
|
1134
|
+
}
|
|
1135
|
+
/**
|
|
1136
|
+
* Panel input, translated from image pixels to page CSS pixels and forwarded
|
|
1137
|
+
* as CDP input events. The panel never holds a CDP connection of its own.
|
|
1138
|
+
*/
|
|
1139
|
+
async input(sessionId, payload) {
|
|
1140
|
+
const session = this.sessions.get(sessionId);
|
|
1141
|
+
if (!session)
|
|
1142
|
+
throw new Error('No browser tab is open for this session');
|
|
1143
|
+
const tab = this.activeOrNamed(session, typeof payload.tabId === 'string' ? payload.tabId : undefined);
|
|
1144
|
+
this.scheduleIdleClose(sessionId, session);
|
|
1145
|
+
const modifiers = modifierMask(payload.modifiers);
|
|
1146
|
+
const scale = {
|
|
1147
|
+
x: tab.imageWidth / Math.max(1, session.viewport.width),
|
|
1148
|
+
y: tab.imageHeight / Math.max(1, session.viewport.height),
|
|
1149
|
+
};
|
|
1150
|
+
const point = () => {
|
|
1151
|
+
const x = Number(payload.x);
|
|
1152
|
+
const y = Number(payload.y);
|
|
1153
|
+
if (!Number.isSafeInteger(x) || !Number.isSafeInteger(y) || x < 0 || y < 0 || x > tab.imageWidth || y > tab.imageHeight) {
|
|
1154
|
+
throw new Error(`Pointer coordinates must be image pixels within 0..${tab.imageWidth}, 0..${tab.imageHeight}`);
|
|
1155
|
+
}
|
|
1156
|
+
return { x: Math.round(x / scale.x), y: Math.round(y / scale.y) };
|
|
1157
|
+
};
|
|
1158
|
+
const button = (value) => value === 'middle' || value === 'right' ? value : 'left';
|
|
1159
|
+
const type = payload.type;
|
|
1160
|
+
if (type === 'move') {
|
|
1161
|
+
const at = point();
|
|
1162
|
+
// A held button during a drag: the mask is what makes the page treat the
|
|
1163
|
+
// movement as dragging rather than hovering.
|
|
1164
|
+
const pressed = payload.pressed === true;
|
|
1165
|
+
const name = pressed ? button(payload.button) : 'none';
|
|
1166
|
+
const buttons = pressed ? (name === 'right' ? 2 : name === 'middle' ? 4 : 1) : 0;
|
|
1167
|
+
await tab.cdp.send('Input.dispatchMouseEvent', { type: 'mouseMoved', x: at.x, y: at.y, button: name, buttons, modifiers });
|
|
1168
|
+
}
|
|
1169
|
+
else if (type === 'down' || type === 'up') {
|
|
1170
|
+
const at = point();
|
|
1171
|
+
await tab.cdp.send('Input.dispatchMouseEvent', {
|
|
1172
|
+
type: type === 'down' ? 'mousePressed' : 'mouseReleased', x: at.x, y: at.y,
|
|
1173
|
+
button: button(payload.button), clickCount: 1, modifiers,
|
|
1174
|
+
});
|
|
1175
|
+
}
|
|
1176
|
+
else if (type === 'click') {
|
|
1177
|
+
const at = point();
|
|
1178
|
+
const count = Number.isSafeInteger(payload.count) && payload.count >= 1 && payload.count <= 3 ? payload.count : 1;
|
|
1179
|
+
const name = button(payload.button);
|
|
1180
|
+
await tab.cdp.send('Input.dispatchMouseEvent', { type: 'mousePressed', x: at.x, y: at.y, button: name, clickCount: count, modifiers });
|
|
1181
|
+
await tab.cdp.send('Input.dispatchMouseEvent', { type: 'mouseReleased', x: at.x, y: at.y, button: name, clickCount: count, modifiers });
|
|
1182
|
+
}
|
|
1183
|
+
else if (type === 'wheel') {
|
|
1184
|
+
const at = point();
|
|
1185
|
+
const deltaX = Number(payload.deltaX);
|
|
1186
|
+
const deltaY = Number(payload.deltaY);
|
|
1187
|
+
if (!Number.isFinite(deltaX) || !Number.isFinite(deltaY) || Math.abs(deltaX) > 3500 || Math.abs(deltaY) > 3500)
|
|
1188
|
+
throw new Error('wheel deltas must be numbers within ±3500');
|
|
1189
|
+
await tab.cdp.send('Input.dispatchMouseEvent', { type: 'mouseWheel', x: at.x, y: at.y, deltaX: Math.round(deltaX), deltaY: Math.round(deltaY), button: 'none', modifiers });
|
|
1190
|
+
}
|
|
1191
|
+
else if (type === 'key') {
|
|
1192
|
+
const down = payload.down === true;
|
|
1193
|
+
const descriptor = keyDescriptor(String(payload.key ?? ''), typeof payload.code === 'string' ? payload.code : undefined, modifiers);
|
|
1194
|
+
// The character a key inserts belongs to the key-down; a key-up carries
|
|
1195
|
+
// none, so the page does not see the text twice.
|
|
1196
|
+
const text = down ? descriptor.text : undefined;
|
|
1197
|
+
// A macOS browser performs its editing gestures as named commands on the
|
|
1198
|
+
// key-down, not from the key event itself; see `macEditingCommands`.
|
|
1199
|
+
const commands = process.platform === 'darwin' && down ? macEditingCommands(descriptor.key, modifiers) : [];
|
|
1200
|
+
await tab.cdp.send('Input.dispatchKeyEvent', {
|
|
1201
|
+
type: down ? (text === undefined ? 'rawKeyDown' : 'keyDown') : 'keyUp',
|
|
1202
|
+
key: descriptor.key, code: descriptor.code,
|
|
1203
|
+
windowsVirtualKeyCode: descriptor.windowsVirtualKeyCode, nativeKeyCodes: descriptor.nativeKeyCodes, modifiers,
|
|
1204
|
+
...(text === undefined ? {} : { text, unmodifiedText: text }),
|
|
1205
|
+
...(commands.length ? { commands } : {}),
|
|
1206
|
+
});
|
|
1207
|
+
}
|
|
1208
|
+
else if (type === 'text') {
|
|
1209
|
+
const text = payload.text;
|
|
1210
|
+
if (typeof text !== 'string' || !text.length || text.length > 2000)
|
|
1211
|
+
throw new Error('text must be a string of at most 2000 characters');
|
|
1212
|
+
await tab.cdp.send('Input.insertText', { text });
|
|
1213
|
+
}
|
|
1214
|
+
else {
|
|
1215
|
+
throw new Error('Unsupported browser input type');
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
/**
|
|
1219
|
+
* The cursor shape the page would show at a pane point, in image pixels.
|
|
1220
|
+
*
|
|
1221
|
+
* The pane draws frames and forwards input, so the page's own pointer is never
|
|
1222
|
+
* visible: a link must still read as a link. The answer is the page's computed
|
|
1223
|
+
* `cursor` at that point, bounded and lower-cased for the panel to draw.
|
|
1224
|
+
*/
|
|
1225
|
+
async cursorAt(sessionId, x, y, tabId) {
|
|
1226
|
+
const session = this.sessions.get(sessionId);
|
|
1227
|
+
if (!session)
|
|
1228
|
+
return 'default';
|
|
1229
|
+
const tab = this.activeOrNamed(session, tabId);
|
|
1230
|
+
this.scheduleIdleClose(sessionId, session);
|
|
1231
|
+
const px = Number(x);
|
|
1232
|
+
const py = Number(y);
|
|
1233
|
+
// A point outside the frame the pane is showing names nothing in the page.
|
|
1234
|
+
if (!Number.isSafeInteger(px) || !Number.isSafeInteger(py) || px < 0 || py < 0 || px > tab.imageWidth || py > tab.imageHeight)
|
|
1235
|
+
return 'default';
|
|
1236
|
+
const scaleX = tab.imageWidth / Math.max(1, session.viewport.width);
|
|
1237
|
+
const scaleY = tab.imageHeight / Math.max(1, session.viewport.height);
|
|
1238
|
+
const cursor = await tab.page.evaluate(`${CURSOR_AT}({ x: ${Math.round(px / scaleX)}, y: ${Math.round(py / scaleY)} })`)
|
|
1239
|
+
.catch(() => 'default');
|
|
1240
|
+
return typeof cursor === 'string' && /^[a-z-]{1,40}$/.test(cursor) ? cursor : 'default';
|
|
1241
|
+
}
|
|
1242
|
+
/**
|
|
1243
|
+
* The text a copy or cut would take from the page, for the viewer's clipboard.
|
|
1244
|
+
*
|
|
1245
|
+
* Copy and cut travel to the page as key events, so the text they produce stays
|
|
1246
|
+
* in the browser that owns the page. The viewer reads it back here and writes
|
|
1247
|
+
* it to its own clipboard, which is what makes a copy on a paired machine land
|
|
1248
|
+
* on the machine the user is sitting at. The viewer reads before it forwards
|
|
1249
|
+
* the key: a cut collapses the selection it just removed.
|
|
1250
|
+
*/
|
|
1251
|
+
async selectionText(sessionId, tabId) {
|
|
1252
|
+
const session = this.sessions.get(sessionId);
|
|
1253
|
+
if (!session)
|
|
1254
|
+
return '';
|
|
1255
|
+
const tab = this.activeOrNamed(session, tabId);
|
|
1256
|
+
this.scheduleIdleClose(sessionId, session);
|
|
1257
|
+
const text = await this.selectionInPage(tab.page);
|
|
1258
|
+
// A selection past the bound is refused rather than truncated: the viewer
|
|
1259
|
+
// writes what it read and then forwards the key, and a cut removes the whole
|
|
1260
|
+
// selection from the page — a prefix on the clipboard would lose the rest.
|
|
1261
|
+
if (typeof text !== 'string')
|
|
1262
|
+
return '';
|
|
1263
|
+
if (text.length > VIEW_CLIPBOARD_LIMIT)
|
|
1264
|
+
throw new Error(`The selection is too large to copy (${text.length} characters)`);
|
|
1265
|
+
return text;
|
|
1266
|
+
}
|
|
1267
|
+
/**
|
|
1268
|
+
* The focused document's selection, including one made inside a frame.
|
|
1269
|
+
*
|
|
1270
|
+
* The top document is asked first, and it says when focus is inside a frame:
|
|
1271
|
+
* there the iframe element is the active element and the top selection is
|
|
1272
|
+
* empty, so each frame is asked in turn. Playwright evaluates inside a
|
|
1273
|
+
* cross-origin frame as well, because the evaluation runs over CDP rather than
|
|
1274
|
+
* through the page's own script context.
|
|
1275
|
+
*/
|
|
1276
|
+
async selectionInPage(page) {
|
|
1277
|
+
const top = await page.evaluate(SELECTION_STATE).catch(() => undefined);
|
|
1278
|
+
if (typeof top?.text === 'string' && top.text)
|
|
1279
|
+
return top.text;
|
|
1280
|
+
// The top document answered "no selection and focus is mine": no frame holds it.
|
|
1281
|
+
if (top?.inFrame === false)
|
|
1282
|
+
return '';
|
|
1283
|
+
let frames = [];
|
|
1284
|
+
try {
|
|
1285
|
+
const main = page.mainFrame();
|
|
1286
|
+
frames = page.frames().filter((frame) => frame !== main);
|
|
1287
|
+
}
|
|
1288
|
+
catch {
|
|
1289
|
+
return '';
|
|
1290
|
+
}
|
|
1291
|
+
// A frame keeps its selection after focus moves elsewhere, so an unfocused
|
|
1292
|
+
// frame's text is not the user's. Only the focused document's selection is
|
|
1293
|
+
// the answer, even an empty one; a focused frame whose own active element is
|
|
1294
|
+
// another iframe is a step on the way to a deeper frame, not the caret itself.
|
|
1295
|
+
let fallback = '';
|
|
1296
|
+
let focusedAnswered = false;
|
|
1297
|
+
for (const frame of frames) {
|
|
1298
|
+
const state = await frame.evaluate(SELECTION_STATE).catch(() => undefined);
|
|
1299
|
+
const text = typeof state?.text === 'string' ? state.text : '';
|
|
1300
|
+
if (state?.focused === true) {
|
|
1301
|
+
if (state?.inFrame === false)
|
|
1302
|
+
return text;
|
|
1303
|
+
focusedAnswered = true;
|
|
1304
|
+
continue;
|
|
1305
|
+
}
|
|
1306
|
+
if (!fallback && text)
|
|
1307
|
+
fallback = text;
|
|
1308
|
+
}
|
|
1309
|
+
// The focus is deeper than the frames readable here: their stale text is not it.
|
|
1310
|
+
return focusedAnswered ? '' : fallback;
|
|
1311
|
+
}
|
|
1312
|
+
/**
|
|
1313
|
+
* Agent operations on the session's panel browser.
|
|
1314
|
+
*
|
|
1315
|
+
* The panel browser belongs to the user as much as to the agent: an operation
|
|
1316
|
+
* that fails, stalls or is cancelled ends only that call — never the browser —
|
|
1317
|
+
* and tab-affecting operations publish tabs so the pane follows along.
|
|
1318
|
+
*/
|
|
1319
|
+
async boundedAgentOperation(signal, pending, timeoutMessage) {
|
|
1320
|
+
return await new Promise((resolve, reject) => {
|
|
1321
|
+
let settled = false;
|
|
1322
|
+
const cleanup = () => { clearTimeout(timer); signal.removeEventListener('abort', abort); };
|
|
1323
|
+
const fail = (error) => { if (settled)
|
|
1324
|
+
return; settled = true; cleanup(); reject(error); };
|
|
1325
|
+
const abort = () => fail(signal.reason);
|
|
1326
|
+
const timer = setTimeout(() => fail(new Error(timeoutMessage)), 10_000);
|
|
1327
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
1328
|
+
if (signal.aborted)
|
|
1329
|
+
abort();
|
|
1330
|
+
pending.then(value => { if (!settled) {
|
|
1331
|
+
settled = true;
|
|
1332
|
+
cleanup();
|
|
1333
|
+
resolve(value);
|
|
1334
|
+
} }, fail);
|
|
1335
|
+
});
|
|
1336
|
+
}
|
|
1337
|
+
agentTarget(sessionId, tabId) {
|
|
1338
|
+
const session = this.sessions.get(sessionId);
|
|
1339
|
+
if (!session || session.closing)
|
|
1340
|
+
throw new Error('No browser tab is open for this session; open one first');
|
|
1341
|
+
this.scheduleIdleClose(sessionId, session);
|
|
1342
|
+
return { session, tab: this.activeOrNamed(session, tabId) };
|
|
1343
|
+
}
|
|
1344
|
+
/** The session's tabs as the agent sees them; a panel with no browser yet is simply empty. */
|
|
1345
|
+
agentTabs(sessionId) {
|
|
1346
|
+
return this.sessionSummaries()[sessionId] ?? { tabs: [] };
|
|
1347
|
+
}
|
|
1348
|
+
/** Step a tab through its history or reload it, for the agent and the panel's toolbar alike. */
|
|
1349
|
+
async go(sessionId, kind, tabId) {
|
|
1350
|
+
const { session, tab } = this.agentTarget(sessionId, tabId);
|
|
1351
|
+
if (kind === 'back')
|
|
1352
|
+
await tab.page.goBack({ waitUntil: 'domcontentloaded', timeout: VIEW_GOTO_TIMEOUT_MS });
|
|
1353
|
+
else if (kind === 'forward')
|
|
1354
|
+
await tab.page.goForward({ waitUntil: 'domcontentloaded', timeout: VIEW_GOTO_TIMEOUT_MS });
|
|
1355
|
+
else
|
|
1356
|
+
await tab.page.reload({ waitUntil: 'domcontentloaded', timeout: VIEW_GOTO_TIMEOUT_MS });
|
|
1357
|
+
this.publishTabs(sessionId, session);
|
|
1358
|
+
}
|
|
1359
|
+
async agentSnapshot(sessionId, tabId, signal) {
|
|
1360
|
+
const { tab } = this.agentTarget(sessionId, tabId);
|
|
1361
|
+
const observation = tab.page.evaluate(observePage, { sessionId, tabId: tab.id, errors: [] });
|
|
1362
|
+
const output = await this.boundedAgentOperation(signal, observation, 'Browser snapshot exceeded the 10-second observation timeout.');
|
|
1363
|
+
return observationResult(output, { sessionId, tabId: tab.id });
|
|
1364
|
+
}
|
|
1365
|
+
async agentClick(sessionId, options, signal) {
|
|
1366
|
+
const { tab } = this.agentTarget(sessionId, options.tabId);
|
|
1367
|
+
await this.boundedAgentOperation(signal, tab.page.locator(options.selector).click({ button: options.button, timeout: 10_000, signal }), `Browser click exceeded the 10-second timeout; re-snapshot and retry.`);
|
|
1368
|
+
}
|
|
1369
|
+
async agentFill(sessionId, options, signal) {
|
|
1370
|
+
const { tab } = this.agentTarget(sessionId, options.tabId);
|
|
1371
|
+
await this.boundedAgentOperation(signal, tab.page.locator(options.selector).fill(options.value, { timeout: 10_000, signal }), 'Browser fill exceeded the 10-second timeout; re-snapshot and retry.');
|
|
1372
|
+
}
|
|
1373
|
+
async agentPress(sessionId, options, signal) {
|
|
1374
|
+
const { tab } = this.agentTarget(sessionId, options.tabId);
|
|
1375
|
+
// The keypress belongs to this call alone: a focus that resolves after the call
|
|
1376
|
+
// was cancelled or timed out must not dispatch into the shared browser, where it
|
|
1377
|
+
// could submit a form nobody is driving anymore.
|
|
1378
|
+
let callerGone = false;
|
|
1379
|
+
const sequence = (async () => {
|
|
1380
|
+
if (options.selector)
|
|
1381
|
+
await tab.page.locator(options.selector).focus({ timeout: 10_000, signal });
|
|
1382
|
+
if (callerGone || signal.aborted)
|
|
1383
|
+
return;
|
|
1384
|
+
await tab.page.keyboard.press(options.key);
|
|
1385
|
+
})();
|
|
1386
|
+
try {
|
|
1387
|
+
await this.boundedAgentOperation(signal, sequence, `Browser press of ${options.key} exceeded the 10-second timeout.`);
|
|
1388
|
+
}
|
|
1389
|
+
finally {
|
|
1390
|
+
callerGone = true;
|
|
1391
|
+
}
|
|
1392
|
+
}
|
|
1393
|
+
async agentScroll(sessionId, options, signal) {
|
|
1394
|
+
const { tab } = this.agentTarget(sessionId, options.tabId);
|
|
1395
|
+
await this.boundedAgentOperation(signal, tab.page.mouse.wheel(0, options.deltaY), 'Browser scroll exceeded the 10-second timeout.');
|
|
1396
|
+
}
|
|
1397
|
+
async agentWait(sessionId, options, signal) {
|
|
1398
|
+
const { tab } = this.agentTarget(sessionId, options.tabId);
|
|
1399
|
+
await this.boundedAgentOperation(signal, tab.page.locator(options.selector).waitFor({ state: 'visible', timeout: 10_000, signal }), `Browser wait for ${options.selector} exceeded the 10-second timeout.`);
|
|
1400
|
+
}
|
|
1401
|
+
async agentScreenshot(sessionId, tabId, signal) {
|
|
1402
|
+
const { session, tab } = this.agentTarget(sessionId, tabId);
|
|
1403
|
+
const capture = tab.page.screenshot({ type: 'jpeg', quality: 60, timeout: 10_000 });
|
|
1404
|
+
const data = await this.boundedAgentOperation(signal, capture, 'Browser screenshot exceeded the 10-second timeout.');
|
|
1405
|
+
return { tabId: tab.id, data, width: session.viewport.width, height: session.viewport.height };
|
|
1406
|
+
}
|
|
1407
|
+
async closeSession(sessionId, reason, expected) {
|
|
1408
|
+
const session = this.sessions.get(sessionId);
|
|
1409
|
+
if (!session || session.closing)
|
|
1410
|
+
return;
|
|
1411
|
+
// A teardown that started for an older generation must not close the
|
|
1412
|
+
// replacement that took its id in the meantime.
|
|
1413
|
+
if (expected !== undefined && session !== expected)
|
|
1414
|
+
return;
|
|
1415
|
+
session.closing = (async () => {
|
|
1416
|
+
this.sessions.delete(sessionId);
|
|
1417
|
+
if (session.idleTimer)
|
|
1418
|
+
clearTimeout(session.idleTimer);
|
|
1419
|
+
await Promise.all([...session.tabs.values()].map(tab => this.stopScreencast(tab)));
|
|
1420
|
+
// Playwright transport shutdown is not reliably awaitable; own the
|
|
1421
|
+
// rejection and let the browser close land whenever it lands.
|
|
1422
|
+
await Promise.resolve().then(() => session.browser.close()).catch(() => { });
|
|
1423
|
+
// A new browser may already hold this session id; its pane has content of
|
|
1424
|
+
// its own, so the old generation stays silent.
|
|
1425
|
+
if (this.sessions.has(sessionId))
|
|
1426
|
+
return;
|
|
1427
|
+
this.emit('browser.view', { kind: 'gone', sessionId, ...(reason ? { reason } : {}) });
|
|
1428
|
+
})();
|
|
1429
|
+
await session.closing;
|
|
1430
|
+
}
|
|
1431
|
+
sessionSummaries() {
|
|
1432
|
+
const result = {};
|
|
1433
|
+
for (const [sessionId, session] of this.sessions)
|
|
1434
|
+
result[sessionId] = this.summary(session);
|
|
1435
|
+
return result;
|
|
1436
|
+
}
|
|
1437
|
+
/**
|
|
1438
|
+
* Release one session's panel browser now.
|
|
1439
|
+
*
|
|
1440
|
+
* A deleted session will never stream again, so waiting for its idle timeout
|
|
1441
|
+
* would keep a whole browser, and one of the four session slots, alive for ten
|
|
1442
|
+
* minutes for a pane nobody can open.
|
|
1443
|
+
*/
|
|
1444
|
+
async release(sessionId, reason) {
|
|
1445
|
+
// Marked before the close, so a launch finishing in between still sees the
|
|
1446
|
+
// release; the marker is dropped once no launch can still be holding it.
|
|
1447
|
+
this.released.add(sessionId);
|
|
1448
|
+
try {
|
|
1449
|
+
await this.closeSession(sessionId, reason);
|
|
1450
|
+
}
|
|
1451
|
+
finally {
|
|
1452
|
+
if (!this.launching.has(sessionId))
|
|
1453
|
+
this.released.delete(sessionId);
|
|
1454
|
+
}
|
|
1455
|
+
}
|
|
1456
|
+
/** Engine shutdown: no panel browser outlives the process. */
|
|
1457
|
+
async close() {
|
|
1458
|
+
if (this.closed)
|
|
1459
|
+
return;
|
|
1460
|
+
this.closed = true;
|
|
1461
|
+
// A download in progress belongs to this engine: its child is terminated and
|
|
1462
|
+
// the request waiting on it is answered, rather than left to the process
|
|
1463
|
+
// exit and its twenty-minute timer.
|
|
1464
|
+
if (this.installer) {
|
|
1465
|
+
const { child, finish } = this.installer;
|
|
1466
|
+
try {
|
|
1467
|
+
child.kill();
|
|
1468
|
+
}
|
|
1469
|
+
catch { /* Already gone. */ }
|
|
1470
|
+
const stopped = { state: 'failed', detail: 'Application is shutting down' };
|
|
1471
|
+
this.publishRuntime(stopped);
|
|
1472
|
+
finish(stopped);
|
|
1473
|
+
}
|
|
1474
|
+
// A launch already in flight is awaited before the last sweep: it inserts its
|
|
1475
|
+
// session while this loop is running, and a browser nobody then visits would
|
|
1476
|
+
// outlive the engine. The wait is bounded because a launch may never settle.
|
|
1477
|
+
const pending = [...this.launching.values()];
|
|
1478
|
+
if (pending.length) {
|
|
1479
|
+
await Promise.race([
|
|
1480
|
+
Promise.allSettled(pending),
|
|
1481
|
+
new Promise(resolve => { const timer = setTimeout(resolve, 5_000); timer.unref?.(); }),
|
|
1482
|
+
]);
|
|
1483
|
+
}
|
|
1484
|
+
await Promise.all([...this.sessions.keys()].map(sessionId => this.closeSession(sessionId)));
|
|
1485
|
+
// A launch that landed after the bound closed itself in `ensureSession`.
|
|
1486
|
+
}
|
|
1487
|
+
}
|