@ashx-j/lunr 0.2.26 → 0.2.28
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/CHANGELOG.md +25 -1
- package/LICENSE +22 -0
- package/dist/builtin-extensions/ashxj-thinking.d.ts +1 -1
- package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-thinking.js +1 -1
- package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.d.ts +11 -1
- package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.js +6 -10
- package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
- package/dist/builtin-extensions/lunr-cron.d.ts +4 -5
- package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-cron.js +94 -108
- package/dist/builtin-extensions/lunr-cron.js.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.js +3 -1
- package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js +5 -2
- package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js +2 -2
- package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
- package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.js +2 -2
- package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -15
- package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts +6 -0
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js +187 -132
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts +8 -0
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js +142 -112
- package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +12 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js +14 -7
- package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts +11 -3
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js +67 -41
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts +4 -2
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js +3 -0
- package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +2 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/commands.js +6 -6
- package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/config.js +11 -5
- package/dist/builtin-extensions/pi-mcp-adapter/config.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js +2 -2
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.js +48 -40
- package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.js +3 -1
- package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts +12 -40
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js +166 -235
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts +5 -0
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js +43 -13
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts +14 -3
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js +73 -21
- package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js +4 -4
- package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js +2 -2
- package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +2 -0
- package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.js +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +11 -5
- package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-ollama-cloud/models.js +12 -32
- package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/index.js +5 -3
- package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +2 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +21 -12
- package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +7 -24
- package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js +39 -77
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts +4 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js +2 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +6 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js +17 -31
- package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js +7 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts +5 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +78 -42
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +8 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts +0 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +134 -28
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +26 -5
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +7 -8
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js +60 -32
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.d.ts +7 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.js +70 -38
- package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +9 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +15 -5
- package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +4 -3
- package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +13 -62
- package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js +18 -9
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
- package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
- package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-tps.js +28 -17
- package/dist/builtin-extensions/pi-tps.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/activity.d.ts +1 -0
- package/dist/builtin-extensions/pi-web-access/activity.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/activity.js +27 -5
- package/dist/builtin-extensions/pi-web-access/activity.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts +3 -0
- package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts.map +1 -0
- package/dist/builtin-extensions/pi-web-access/bounded-body.js +43 -0
- package/dist/builtin-extensions/pi-web-access/bounded-body.js.map +1 -0
- package/dist/builtin-extensions/pi-web-access/content-page.d.ts +24 -0
- package/dist/builtin-extensions/pi-web-access/content-page.d.ts.map +1 -0
- package/dist/builtin-extensions/pi-web-access/content-page.js +57 -0
- package/dist/builtin-extensions/pi-web-access/content-page.js.map +1 -0
- package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/extract.js +7 -2
- package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/github-extract.d.ts +0 -1
- package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/github-extract.js +147 -36
- package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/index.js +48 -73
- package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts +12 -4
- package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/session-cleanup.js +35 -12
- package/dist/builtin-extensions/pi-web-access/session-cleanup.js.map +1 -1
- package/dist/builtin-extensions/pi-web-access/storage.d.ts +9 -6
- package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-web-access/storage.js +36 -24
- package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
- package/dist/builtin-extensions/simple-pi-memory.d.ts +1 -1
- package/dist/builtin-extensions/simple-pi-memory.d.ts.map +1 -1
- package/dist/builtin-extensions/simple-pi-memory.js +1 -1
- package/dist/builtin-extensions/simple-pi-memory.js.map +1 -1
- package/dist/catalog/models.json +1 -1
- package/dist/catalog/providers/google-vertex.json +1 -1
- package/dist/catalog/providers/google.json +1 -1
- package/dist/catalog/publication.json +3 -3
- package/dist/cli/install-cli.d.ts.map +1 -1
- package/dist/cli/install-cli.js +38 -30
- package/dist/cli/install-cli.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +13 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +75 -11
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +1 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +46 -21
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +344 -126
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/browser/runtime.d.ts +2 -0
- package/dist/core/browser/runtime.d.ts.map +1 -1
- package/dist/core/browser/runtime.js +80 -45
- package/dist/core/browser/runtime.js.map +1 -1
- package/dist/core/browser/setup.d.ts.map +1 -1
- package/dist/core/browser/setup.js +12 -1
- package/dist/core/browser/setup.js.map +1 -1
- package/dist/core/cache-stats.d.ts +1 -1
- package/dist/core/cache-stats.d.ts.map +1 -1
- package/dist/core/cache-stats.js +1 -1
- package/dist/core/cache-stats.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +2 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +1 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +5 -11
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +38 -92
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/computer-use/adapter.d.ts.map +1 -1
- package/dist/core/computer-use/adapter.js +7 -2
- package/dist/core/computer-use/adapter.js.map +1 -1
- package/dist/core/computer-use/image.d.ts.map +1 -1
- package/dist/core/computer-use/image.js +17 -5
- package/dist/core/computer-use/image.js.map +1 -1
- package/dist/core/computer-use/schemas.d.ts.map +1 -1
- package/dist/core/computer-use/schemas.js +23 -6
- package/dist/core/computer-use/schemas.js.map +1 -1
- package/dist/core/computer-use/workflow.d.ts.map +1 -1
- package/dist/core/computer-use/workflow.js +459 -119
- package/dist/core/computer-use/workflow.js.map +1 -1
- package/dist/core/context-breakdown.d.ts +2 -2
- package/dist/core/context-breakdown.d.ts.map +1 -1
- package/dist/core/context-breakdown.js +22 -20
- package/dist/core/context-breakdown.js.map +1 -1
- package/dist/core/cron/jobs.d.ts +26 -8
- package/dist/core/cron/jobs.d.ts.map +1 -1
- package/dist/core/cron/jobs.js +357 -232
- package/dist/core/cron/jobs.js.map +1 -1
- package/dist/core/cron/origin-context.d.ts +1 -0
- package/dist/core/cron/origin-context.d.ts.map +1 -1
- package/dist/core/cron/origin-context.js.map +1 -1
- package/dist/core/cron/scheduler.d.ts +22 -17
- package/dist/core/cron/scheduler.d.ts.map +1 -1
- package/dist/core/cron/scheduler.js +153 -73
- package/dist/core/cron/scheduler.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +8 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +11 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +4 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +22 -1
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/large-subagent-launch.d.ts +1 -1
- package/dist/core/large-subagent-launch.d.ts.map +1 -1
- package/dist/core/large-subagent-launch.js +7 -7
- package/dist/core/large-subagent-launch.js.map +1 -1
- package/dist/core/model-registry.d.ts +2 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +5 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-runtime.d.ts +4 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +40 -4
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/permissions.d.ts +3 -3
- package/dist/core/permissions.d.ts.map +1 -1
- package/dist/core/permissions.js +11 -35
- package/dist/core/permissions.js.map +1 -1
- package/dist/core/plan-mode.d.ts +5 -13
- package/dist/core/plan-mode.d.ts.map +1 -1
- package/dist/core/plan-mode.js +126 -116
- package/dist/core/plan-mode.js.map +1 -1
- package/dist/core/project-trust.d.ts.map +1 -1
- package/dist/core/project-trust.js +1 -1
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/prompt-resource-bridge.d.ts +12 -0
- package/dist/core/prompt-resource-bridge.d.ts.map +1 -0
- package/dist/core/prompt-resource-bridge.js +9 -0
- package/dist/core/prompt-resource-bridge.js.map +1 -0
- package/dist/core/protected-targets.d.ts +6 -0
- package/dist/core/protected-targets.d.ts.map +1 -0
- package/dist/core/protected-targets.js +45 -0
- package/dist/core/protected-targets.js.map +1 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +7 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/rollback.d.ts +19 -3
- package/dist/core/rollback.d.ts.map +1 -1
- package/dist/core/rollback.js +172 -56
- package/dist/core/rollback.js.map +1 -1
- package/dist/core/runtime-credentials.d.ts +3 -0
- package/dist/core/runtime-credentials.d.ts.map +1 -1
- package/dist/core/runtime-credentials.js +14 -1
- package/dist/core/runtime-credentials.js.map +1 -1
- package/dist/core/sdk.d.ts +3 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +11 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +111 -33
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-ownership.d.ts.map +1 -1
- package/dist/core/session-ownership.js +8 -3
- package/dist/core/session-ownership.js.map +1 -1
- package/dist/core/session-retention.d.ts.map +1 -1
- package/dist/core/session-retention.js +18 -7
- package/dist/core/session-retention.js.map +1 -1
- package/dist/core/session-startup-settings.d.ts +10 -0
- package/dist/core/session-startup-settings.d.ts.map +1 -0
- package/dist/core/session-startup-settings.js +70 -0
- package/dist/core/session-startup-settings.js.map +1 -0
- package/dist/core/subscriptions.d.ts +16 -7
- package/dist/core/subscriptions.d.ts.map +1 -1
- package/dist/core/subscriptions.js +96 -55
- package/dist/core/subscriptions.js.map +1 -1
- package/dist/core/trust-manager.d.ts +2 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +6 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/update-check.d.ts.map +1 -1
- package/dist/core/update-check.js.map +1 -1
- package/dist/core/usage-accounting.d.ts +47 -0
- package/dist/core/usage-accounting.d.ts.map +1 -0
- package/dist/core/usage-accounting.js +205 -0
- package/dist/core/usage-accounting.js.map +1 -0
- package/dist/core/usage-adapters/kimi-coding.d.ts +2 -2
- package/dist/core/usage-adapters/kimi-coding.d.ts.map +1 -1
- package/dist/core/usage-adapters/kimi-coding.js +2 -2
- package/dist/core/usage-adapters/kimi-coding.js.map +1 -1
- package/dist/core/usage-adapters/openai-codex.d.ts +3 -2
- package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
- package/dist/core/usage-adapters/openai-codex.js +3 -3
- package/dist/core/usage-adapters/openai-codex.js.map +1 -1
- package/dist/core/usage-adapters/xai.d.ts +2 -2
- package/dist/core/usage-adapters/xai.d.ts.map +1 -1
- package/dist/core/usage-adapters/xai.js +3 -3
- package/dist/core/usage-adapters/xai.js.map +1 -1
- package/dist/core/usage-adapters/zai.d.ts +2 -2
- package/dist/core/usage-adapters/zai.d.ts.map +1 -1
- package/dist/core/usage-adapters/zai.js +2 -2
- package/dist/core/usage-adapters/zai.js.map +1 -1
- package/dist/core/usage-history.d.ts +1 -18
- package/dist/core/usage-history.d.ts.map +1 -1
- package/dist/core/usage-history.js +46 -114
- package/dist/core/usage-history.js.map +1 -1
- package/dist/core/usage-service.d.ts +9 -2
- package/dist/core/usage-service.d.ts.map +1 -1
- package/dist/core/usage-service.js +95 -50
- package/dist/core/usage-service.js.map +1 -1
- package/dist/gateway/agent-bridge.d.ts +9 -1
- package/dist/gateway/agent-bridge.d.ts.map +1 -1
- package/dist/gateway/agent-bridge.js +91 -37
- package/dist/gateway/agent-bridge.js.map +1 -1
- package/dist/gateway/buttons.d.ts +8 -1
- package/dist/gateway/buttons.d.ts.map +1 -1
- package/dist/gateway/buttons.js +76 -18
- package/dist/gateway/buttons.js.map +1 -1
- package/dist/gateway/commands.d.ts +1 -0
- package/dist/gateway/commands.d.ts.map +1 -1
- package/dist/gateway/commands.js +10 -4
- package/dist/gateway/commands.js.map +1 -1
- package/dist/gateway/cron.d.ts +12 -11
- package/dist/gateway/cron.d.ts.map +1 -1
- package/dist/gateway/cron.js +65 -56
- package/dist/gateway/cron.js.map +1 -1
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +2 -1
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/mobile-commands.d.ts +1 -0
- package/dist/gateway/mobile-commands.d.ts.map +1 -1
- package/dist/gateway/mobile-commands.js +69 -15
- package/dist/gateway/mobile-commands.js.map +1 -1
- package/dist/gateway/presenter.d.ts +12 -2
- package/dist/gateway/presenter.d.ts.map +1 -1
- package/dist/gateway/presenter.js +73 -38
- package/dist/gateway/presenter.js.map +1 -1
- package/dist/gateway/router.d.ts +2 -2
- package/dist/gateway/router.d.ts.map +1 -1
- package/dist/gateway/router.js +17 -2
- package/dist/gateway/router.js.map +1 -1
- package/dist/gateway/service.d.ts +2 -0
- package/dist/gateway/service.d.ts.map +1 -1
- package/dist/gateway/service.js +153 -0
- package/dist/gateway/service.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +86 -33
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +6 -4
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/context-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/context-view.js +2 -2
- package/dist/modes/interactive/components/context-view.js.map +1 -1
- package/dist/modes/interactive/components/copyable-text.d.ts.map +1 -1
- package/dist/modes/interactive/components/copyable-text.js +3 -2
- package/dist/modes/interactive/components/copyable-text.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +8 -12
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/usage-view.d.ts +5 -0
- package/dist/modes/interactive/components/usage-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/usage-view.js +21 -6
- package/dist/modes/interactive/components/usage-view.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -7
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +151 -131
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
- package/dist/modes/interactive/smooth-streaming.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +2 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/node-runtime/{adapter-VFG7WNPX.js → adapter-247RTYLS.js} +4 -5
- package/dist/node-runtime/agent-session-services-RTUGP3XR.js +54 -0
- package/dist/node-runtime/{brave-UWDA3I22.js → brave-2AFFAXNN.js} +1 -1
- package/dist/node-runtime/{builtin-extensions-I2HIFEMY.js → builtin-extensions-N4EUD6SB.js} +8 -7
- package/dist/node-runtime/{chunk-QH6YL7VK.js → chunk-252ZVPPF.js} +3 -3
- package/dist/node-runtime/{chunk-PCEW76PM.js → chunk-2OIPYKLZ.js} +6 -6
- package/dist/node-runtime/{chunk-XBWPBZBN.js → chunk-2SWW7KMW.js} +1 -1
- package/dist/node-runtime/{chunk-UQUCFAJ3.js → chunk-2VIW3IMF.js} +40 -7
- package/dist/node-runtime/{chunk-UOEDI7RP.js → chunk-4KNKQGHM.js} +2 -2
- package/dist/node-runtime/chunk-4QRUZ64T.js +1203 -0
- package/dist/node-runtime/{chunk-FQMM2EZ2.js → chunk-64XTQNLA.js} +29 -7
- package/dist/node-runtime/{chunk-SPVDBUOS.js → chunk-6O3IW3IA.js} +2 -2
- package/dist/node-runtime/{chunk-5ZQXRPMC.js → chunk-6ZZHGUSA.js} +2 -2
- package/dist/node-runtime/{chunk-WIF24I7G.js → chunk-APVM5NEU.js} +149 -144
- package/dist/node-runtime/{chunk-LWYIVUGV.js → chunk-B2IBAXNX.js} +48 -31
- package/dist/node-runtime/{chunk-M3LZLQW2.js → chunk-BDRGN3L2.js} +1 -0
- package/dist/node-runtime/{chunk-LJTIVM7I.js → chunk-BMRXLQWQ.js} +464 -160
- package/dist/node-runtime/{chunk-GJ2RDBRL.js → chunk-BYC6RKCN.js} +4 -2
- package/dist/node-runtime/{chunk-T4DA4XE7.js → chunk-DFMPRAQQ.js} +162 -82
- package/dist/node-runtime/{chunk-SN2KSMPQ.js → chunk-DQSCFU7R.js} +13 -7
- package/dist/node-runtime/{chunk-UVWCDQYF.js → chunk-E5DQGNJI.js} +455 -278
- package/dist/node-runtime/{chunk-4SBQAI4T.js → chunk-EBLAZVSA.js} +2058 -73
- package/dist/node-runtime/{chunk-CSFI6YXL.js → chunk-ES6PBSIE.js} +1 -1
- package/dist/node-runtime/{chunk-IF24A3FH.js → chunk-EVM653DD.js} +4 -4
- package/dist/node-runtime/{chunk-HTFRRDSF.js → chunk-F2SMQ6ES.js} +3 -2
- package/dist/node-runtime/chunk-F2V2F4ZG.js +114 -0
- package/dist/node-runtime/{chunk-IKU6Y7DL.js → chunk-FE3WZI7F.js} +9 -6
- package/dist/node-runtime/{chunk-6VYZ5UFP.js → chunk-FLGEEH27.js} +1 -1
- package/dist/node-runtime/{chunk-5EFIU3OM.js → chunk-FTKEZL27.js} +1 -1
- package/dist/node-runtime/{chunk-RGQAEOM5.js → chunk-FYIFPFXE.js} +23 -6
- package/dist/node-runtime/{chunk-HMBGROQK.js → chunk-GLDXBBL6.js} +3 -3
- package/dist/node-runtime/{chunk-KWA4OC2J.js → chunk-H6YBCWKG.js} +1 -1
- package/dist/node-runtime/{chunk-2MI5OPMN.js → chunk-HNNHHJAB.js} +68 -50
- package/dist/node-runtime/{chunk-I74LN5JG.js → chunk-HUD2RFJW.js} +2 -2
- package/dist/node-runtime/{chunk-XHIRAZ26.js → chunk-IAZSK7KK.js} +1 -1
- package/dist/node-runtime/{chunk-GYIXXQAO.js → chunk-ICKGAKWX.js} +23 -59
- package/dist/node-runtime/{chunk-X3PGBLQ7.js → chunk-IHHTWSXN.js} +9 -9
- package/dist/node-runtime/{chunk-DAPBPCBP.js → chunk-IPP5BIV5.js} +25 -3
- package/dist/node-runtime/{chunk-QFWG2RVL.js → chunk-IXG6F4NT.js} +11 -0
- package/dist/node-runtime/{chunk-L24TPBS4.js → chunk-JEK35V2M.js} +45 -31
- package/dist/node-runtime/{chunk-RDDAZOMU.js → chunk-JL4HYQXK.js} +1 -1
- package/dist/node-runtime/{chunk-2HMIRK7W.js → chunk-LHV3V67B.js} +5 -5
- package/dist/node-runtime/{chunk-UAEOTO52.js → chunk-MNQXDFPV.js} +6 -2
- package/dist/node-runtime/{chunk-MPKSOJBT.js → chunk-NHATCSOI.js} +4 -7
- package/dist/node-runtime/{chunk-RMQZU2YU.js → chunk-NNNR3QIY.js} +1 -1
- package/dist/node-runtime/{chunk-2KIPT4HJ.js → chunk-PWHTSQC4.js} +83 -21
- package/dist/node-runtime/{chunk-RWTKOC3B.js → chunk-QBTJG3UM.js} +1 -1
- package/dist/node-runtime/{chunk-RCR3XAQY.js → chunk-QT3F6UEV.js} +233 -169
- package/dist/node-runtime/{chunk-GS42T6MX.js → chunk-QW3AAHWN.js} +1 -1
- package/dist/node-runtime/{chunk-DVQSHCVP.js → chunk-R4WSB2MQ.js} +5 -5
- package/dist/node-runtime/{chunk-B4HP6ZWM.js → chunk-RHCGYWO7.js} +1 -1
- package/dist/node-runtime/{chunk-2CFDTH5B.js → chunk-RLGY2QIL.js} +45 -59
- package/dist/node-runtime/{chunk-CDVHZOOK.js → chunk-RY3FJ6WI.js} +29 -27
- package/dist/node-runtime/{chunk-KKUTQQV7.js → chunk-RYRGL7P4.js} +1 -1
- package/dist/node-runtime/{chunk-I54LGHWM.js → chunk-STMX7W5I.js} +3 -3
- package/dist/node-runtime/chunk-SWWHZ2RI.js +158 -0
- package/dist/node-runtime/{chunk-5Q4A37RB.js → chunk-TCT6PCUR.js} +32 -11
- package/dist/node-runtime/{chunk-P7XBVXGT.js → chunk-U3YVZ6UC.js} +18 -14
- package/dist/node-runtime/{chunk-D5UCKPBQ.js → chunk-UBWW2PID.js} +1 -1
- package/dist/node-runtime/{chunk-E75WFZ33.js → chunk-UNUZICC4.js} +3 -3
- package/dist/node-runtime/{chunk-RAK2QA2B.js → chunk-UYRKUKFE.js} +4 -4
- package/dist/node-runtime/{chunk-LWJXTA6Z.js → chunk-VSUEAI7O.js} +1377 -45
- package/dist/node-runtime/{chunk-NAY6UUQZ.js → chunk-WDIVLMOH.js} +1 -1
- package/dist/node-runtime/{chunk-E24EO34J.js → chunk-WPXUR3HE.js} +1 -1
- package/dist/node-runtime/{chunk-SLVOAQOY.js → chunk-WXYNALHD.js} +113 -1
- package/dist/node-runtime/{chunk-KJ6DWS3K.js → chunk-XEOCUEUJ.js} +121 -60
- package/dist/node-runtime/chunk-YD3IZAZ7.js +47 -0
- package/dist/node-runtime/chunk-YSB6URMT.js +41 -0
- package/dist/node-runtime/{chunk-YWOJIGFY.js → chunk-ZEVFBFNF.js} +95 -142
- package/dist/node-runtime/{chunk-5B6VKFEV.js → chunk-ZIQUS5QO.js} +1 -1
- package/dist/node-runtime/cli-runtime.js +4 -4
- package/dist/node-runtime/{command-FSBU2EVZ.js → command-YRT7I2BW.js} +5 -5
- package/dist/node-runtime/{commands-NAAL7KNT.js → commands-2ETOWWRA.js} +16 -16
- package/dist/node-runtime/{commands-EMBQQVVT.js → commands-D6A6H4TS.js} +11 -18
- package/dist/node-runtime/{config-QDD5PUE2.js → config-CU7M7BTK.js} +1 -1
- package/dist/node-runtime/{config-D4QUPAHX.js → config-DS7XLMEM.js} +2 -2
- package/dist/node-runtime/{direct-tool-executor-4D7UXYU4.js → direct-tool-executor-2QJXVQD2.js} +6 -11
- package/dist/node-runtime/{exa-LL64QZR2.js → exa-6VBZNPGE.js} +1 -1
- package/dist/node-runtime/{export-html-VM4J2MNR.js → export-html-DBQRRMAY.js} +4 -4
- package/dist/node-runtime/{extension-input-E7BJZ35H.js → extension-input-VBBMX7YV.js} +5 -5
- package/dist/node-runtime/{extension-selector-WU42XDTU.js → extension-selector-T5AOG5XB.js} +5 -5
- package/dist/node-runtime/{extract-EQJE7FZZ.js → extract-BFX2N35A.js} +3 -3
- package/dist/node-runtime/{gateway-DQM333YV.js → gateway-V6K2CDWN.js} +51 -42
- package/dist/node-runtime/{gemini-search-35OCRFLN.js → gemini-search-C66QHDT6.js} +2 -2
- package/dist/node-runtime/{gemini-url-context-UQY3PHHW.js → gemini-url-context-T7DEK73R.js} +3 -3
- package/dist/node-runtime/{github-extract-F64RZOEA.js → github-extract-HOGE3D6F.js} +107 -38
- package/dist/node-runtime/{goal-NJEE5CTU.js → goal-J7TYMOBK.js} +14 -8
- package/dist/node-runtime/index.js +51 -48
- package/dist/node-runtime/{init-P5AUV77I.js → init-JBQJIPYI.js} +3 -6
- package/dist/node-runtime/{install-cli-NN4YAU44.js → install-cli-INGHIVBY.js} +30 -25
- package/dist/node-runtime/interactive-mode-ASZ7APYP.js +75 -0
- package/dist/node-runtime/{interactive-view-NGFAMHPW.js → interactive-view-K33PM4OS.js} +8 -8
- package/dist/node-runtime/{lsp-manager-3ASUSO4T.js → lsp-manager-S554V5HR.js} +240 -155
- package/dist/node-runtime/{lunr-browser-IR7TL3J7.js → lunr-browser-H4FDOR3C.js} +7 -7
- package/dist/node-runtime/{lunr-computer-use-Y23CCDIJ.js → lunr-computer-use-VDP2QNRQ.js} +9 -9
- package/dist/node-runtime/{lunr-cron-USHC4LXH.js → lunr-cron-WD3YH4CR.js} +93 -80
- package/dist/node-runtime/main.js +43 -41
- package/dist/node-runtime/{mobile-commands-O5LCHL32.js → mobile-commands-ICUXFW5V.js} +12 -12
- package/dist/node-runtime/{model-runtime-OO5HFLWE.js → model-runtime-MZ2JMDV4.js} +4 -4
- package/dist/node-runtime/{openai-search-B3MSNCQA.js → openai-search-K72LJDYN.js} +1 -1
- package/dist/node-runtime/{package-manager-cli-Q7BL6KZO.js → package-manager-cli-CYM262SI.js} +20 -20
- package/dist/node-runtime/{parallel-AI2MNSCU.js → parallel-X724NCNU.js} +1 -1
- package/dist/node-runtime/{perplexity-QVJW3I35.js → perplexity-RDHQHVMK.js} +2 -2
- package/dist/node-runtime/{pi-intercom-QM53RLTS.js → pi-intercom-NHHEPBMI.js} +2 -2
- package/dist/node-runtime/{pi-mcp-adapter-3PHF4KZ4.js → pi-mcp-adapter-PP3GQJQ2.js} +98 -94
- package/dist/node-runtime/{pi-ollama-cloud-2F3Y2QNM.js → pi-ollama-cloud-4MNWIMFN.js} +11 -24
- package/dist/node-runtime/{pi-prompt-template-model-QWTCGLJU.js → pi-prompt-template-model-FTGELLS5.js} +32 -36
- package/dist/node-runtime/{pi-subagents-7IBSSGEW.js → pi-subagents-QPU3OXE4.js} +114 -167
- package/dist/node-runtime/{pi-web-access-WTGMNZ32.js → pi-web-access-Z3LP246C.js} +144 -108
- package/dist/node-runtime/{print-mode-XQ76CYMT.js → print-mode-2XHN5SUA.js} +3 -3
- package/dist/node-runtime/{process-registry-4FAKZQOL.js → process-registry-Q4QWIU33.js} +3 -3
- package/dist/node-runtime/{proxy-modes-5FAPSZEZ.js → proxy-modes-VEGC6QG5.js} +8 -15
- package/dist/node-runtime/rpc-entry.js +43 -41
- package/dist/node-runtime/{rpc-mode-O3XV4SID.js → rpc-mode-32DHJPEJ.js} +4 -4
- package/dist/node-runtime/{runtime-4VA6JKNF.js → runtime-EDUUGAQD.js} +56 -46
- package/dist/node-runtime/{runtime-EFPPD2UW.js → runtime-UGXM4NPQ.js} +2 -2
- package/dist/node-runtime/{runtime-bridges-7WVCLI76.js → runtime-bridges-DNKMNJCF.js} +7 -7
- package/dist/node-runtime/{service-MDQIPQ26.js → service-IHLGFLBT.js} +6 -4
- package/dist/node-runtime/{session-handoff-GWARVEWT.js → session-handoff-LYH53ESV.js} +4 -4
- package/dist/node-runtime/{session-manager-JB5J6XBN.js → session-manager-ZJ3N5Q74.js} +3 -3
- package/dist/node-runtime/{session-selector-GIM4DHQ2.js → session-selector-I73U3EIO.js} +7 -7
- package/dist/node-runtime/{settings-manager-DJDM5AHM.js → settings-manager-P2TKGYTR.js} +5 -5
- package/dist/node-runtime/{setup-JBKOLJ6F.js → setup-H7CCELIL.js} +15 -1
- package/dist/node-runtime/{setup-PFBWRNUI.js → setup-OLQ4GXWS.js} +17 -17
- package/dist/node-runtime/{src-IVPNZ2BX.js → src-6RV4PXKJ.js} +64 -36
- package/dist/node-runtime/{subagent-executor-LPZ4BHWE.js → subagent-executor-UI6SHG3X.js} +412 -288
- package/dist/node-runtime/{tavily-WEZFVFP7.js → tavily-KZBFYQB6.js} +1 -1
- package/dist/node-runtime/{theme-UOO5RVFN.js → theme-YLVZKKZD.js} +2 -2
- package/dist/node-runtime/{trust-manager-MMISNCYO.js → trust-manager-ZCU76D23.js} +2 -2
- package/dist/node-runtime/{update-cli-HNMOTNGX.js → update-cli-F3XXJANQ.js} +6 -6
- package/dist/node-runtime/{usage-service-LFB2SWYV.js → usage-service-CPAGBED5.js} +1 -1
- package/dist/node-runtime/{video-extract-OOZHR7SU.js → video-extract-UPKYIBW3.js} +3 -3
- package/dist/node-runtime/{workflow-OHPBEFO4.js → workflow-ICDI4N3J.js} +208 -78
- package/dist/node-runtime/{youtube-extract-FNPAUNHU.js → youtube-extract-77NT7FWH.js} +4 -4
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js +25 -10
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js +2 -0
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/paths.d.ts +4 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +33 -2
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/sanitize-terminal-text.d.ts +7 -0
- package/dist/utils/sanitize-terminal-text.d.ts.map +1 -0
- package/dist/utils/sanitize-terminal-text.js +67 -0
- package/dist/utils/sanitize-terminal-text.js.map +1 -0
- package/docs/browser.md +1 -1
- package/docs/custom-provider.md +3 -3
- package/docs/extensions.md +8 -4
- package/docs/features.md +25 -7
- package/docs/keybindings.md +1 -1
- package/docs/models.md +5 -5
- package/docs/packages.md +1 -1
- package/docs/providers.md +2 -2
- package/docs/rpc.md +7 -7
- package/docs/security.md +10 -5
- package/docs/sessions.md +2 -2
- package/docs/skills.md +1 -1
- package/docs/terminal-setup.md +7 -7
- package/docs/themes.md +1 -1
- package/docs/usage.md +1 -1
- package/examples/extensions/auto-commit-on-exit.ts +1 -1
- package/examples/extensions/bash-spawn-hook.ts +1 -1
- package/examples/extensions/built-in-tool-renderer.ts +1 -1
- package/examples/extensions/claude-rules.ts +1 -1
- package/examples/extensions/commands.ts +1 -1
- package/examples/extensions/custom-compaction.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/index.ts +3 -3
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/doom-overlay/index.ts +1 -1
- package/examples/extensions/git-merge-and-resolve.ts +2 -2
- package/examples/extensions/gondolin/index.ts +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/hidden-thinking-label.ts +1 -1
- package/examples/extensions/inline-bash.ts +2 -2
- package/examples/extensions/input-transform-streaming.ts +2 -2
- package/examples/extensions/input-transform.ts +2 -2
- package/examples/extensions/interactive-shell.ts +1 -1
- package/examples/extensions/kimi-deferred-tools.ts +1 -1
- package/examples/extensions/mac-system-theme.ts +1 -1
- package/examples/extensions/minimal-mode.ts +1 -1
- package/examples/extensions/modal-editor.ts +1 -1
- package/examples/extensions/model-status.ts +1 -1
- package/examples/extensions/notify.ts +3 -3
- package/examples/extensions/overlay-qa-tests.ts +1 -1
- package/examples/extensions/overlay-test.ts +1 -1
- package/examples/extensions/pirate.ts +1 -1
- package/examples/extensions/preset.ts +3 -3
- package/examples/extensions/project-trust.ts +4 -4
- package/examples/extensions/prompt-customizer.ts +1 -1
- package/examples/extensions/rainbow-editor.ts +1 -1
- package/examples/extensions/rpc-demo.ts +1 -1
- package/examples/extensions/sandbox/index.ts +7 -7
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/shutdown-command.ts +5 -5
- package/examples/extensions/ssh.ts +2 -2
- package/examples/extensions/subagent/README.md +3 -3
- package/examples/extensions/subagent/index.ts +2 -2
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/extensions/tool-override.ts +1 -1
- package/examples/extensions/tools.ts +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/extensions/working-indicator.ts +1 -1
- package/examples/extensions/working-message-test.ts +1 -1
- package/examples/sdk/01-minimal.ts +1 -1
- package/examples/sdk/03-custom-prompt.ts +1 -1
- package/examples/sdk/04-skills.ts +1 -1
- package/examples/sdk/06-extensions.ts +2 -2
- package/examples/sdk/08-prompt-templates.ts +1 -1
- package/install-lock/package-lock.json +24 -24
- package/install-lock/package.json +2 -2
- package/npm-shrinkwrap.json +60 -24
- package/package.json +9 -9
- package/dist/modes/interactive/components/exit-card.d.ts +0 -22
- package/dist/modes/interactive/components/exit-card.d.ts.map +0 -1
- package/dist/modes/interactive/components/exit-card.js +0 -69
- package/dist/modes/interactive/components/exit-card.js.map +0 -1
- package/dist/node-runtime/agent-session-services-5YXS2PLF.js +0 -51
- package/dist/node-runtime/chunk-2IDTZAG5.js +0 -1415
- package/dist/node-runtime/chunk-3MISGG4S.js +0 -769
- package/dist/node-runtime/chunk-4HXHDDCF.js +0 -16
- package/dist/node-runtime/chunk-5B5QN3ZQ.js +0 -356
- package/dist/node-runtime/chunk-7IQGBKBJ.js +0 -2033
- package/dist/node-runtime/chunk-AUXVGBO4.js +0 -19
- package/dist/node-runtime/chunk-PTFBPO3C.js +0 -50
- package/dist/node-runtime/interactive-mode-YOHZVMKX.js +0 -74
- package/dist/node-runtime/mcp-auth-flow-QVLFVLEO.js +0 -33
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../src/core/computer-use/workflow.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport type { ImageContent, TextContent } from \"@ashx-j/lunr-ai\";\nimport { type ComputerDriver, DriverCallError, type DriverReply } from \"./adapter.ts\";\nimport { type ImageRegion, prepareComputerImage, screenshotDimensions } from \"./image.ts\";\nimport { DesktopLease } from \"./lease.ts\";\nimport { computerSchemas } from \"./schemas.ts\";\n\nexport function driverData(reply: DriverReply): Record<string, unknown> {\n\tif (reply.structuredContent && typeof reply.structuredContent === \"object\" && !Array.isArray(reply.structuredContent))\n\t\treturn Object.fromEntries(Object.entries(reply.structuredContent));\n\tif (Array.isArray(reply.content)) for (const item of reply.content) {\n\t\tif (item.type !== \"text\" || typeof item.text !== \"string\") continue;\n\t\ttry {\n\t\t\tconst value: unknown = JSON.parse(item.text);\n\t\t\tif (value && typeof value === \"object\" && !Array.isArray(value)) return Object.fromEntries(Object.entries(value));\n\t\t} catch {}\n\t}\n\treturn {};\n}\n\nfunction plainLaunchReason(reply: DriverReply): string | undefined {\n\tif (reply.structuredContent || !Array.isArray(reply.content)) return undefined;\n\tconst text = reply.content.find((item) => item.type === \"text\")?.text;\n\tif (typeof text !== \"string\") return undefined;\n\tif (/^App name lookup for .+ is (?:temporarily unavailable|unavailable).+No app was launched;/s.test(text)) return \"app_lookup_unavailable\";\n\tif (/^App .+ was not found in shell:AppsFolder or by Windows PATH\\/association lookup:/s.test(text)) return \"app_not_found\";\n\tif (/^Launch of .+ timed out after 15s/s.test(text)) return \"launch_timeout_unknown\";\n\tif (/^(?:Failed to launch|Task error): /s.test(text)) return \"launch_native_error_unknown\";\n\treturn undefined;\n}\n\nexport function driverRefused(reply: DriverReply): boolean {\n\tconst data = driverData(reply);\n\tconst acknowledged = data.activated === true || data.success === true || data.verified === true || data.effect === \"confirmed\";\n\tconst uncertain = [data.status, data.effect].some((value) => value === \"partial\" || value === \"unverifiable\");\n\treturn reply.isError === true || plainLaunchReason(reply) !== undefined ||\n\t\t(data.refusal !== undefined && data.refusal !== null && data.refusal !== false) ||\n\t\t(data.error !== undefined && data.error !== null && data.error !== false) ||\n\t\tdata.effect === \"refused\" || data.status === \"refused\" || data.status === \"failed\" || data.success === false ||\n\t\t[\"window_target_mismatch\", \"window_target_not_found\", \"background_unavailable\", \"foreground_unavailable\", \"type_text_incomplete\", \"verification_failed\"].includes(String(data.code)) ||\n\t\t(data.status !== undefined && !acknowledged && !uncertain && ![\"ok\", \"success\", \"completed\"].includes(String(data.status))) ||\n\t\t(data.code !== undefined && data.code !== 0 && !acknowledged && !uncertain);\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value) ? Object.fromEntries(Object.entries(value)) : {};\n}\n\nfunction select(data: Record<string, unknown>, keys: readonly string[]): Record<string, string | number | boolean> {\n\tconst result: Record<string, string | number | boolean> = {};\n\tfor (const key of keys) {\n\t\tconst value = data[key];\n\t\tif ([\"name\", \"app_name\", \"title\"].includes(key) && typeof value === \"string\") result[key] = value.slice(0, 240);\n\t\telse if ([\"active\", \"running\", \"is_on_screen\", \"minimized\"].includes(key) && typeof value === \"boolean\") result[key] = value;\n\t\telse if ([\"pid\", \"window_id\", \"x\", \"y\", \"width\", \"height\"].includes(key) && typeof value === \"number\" && Number.isSafeInteger(value)) result[key] = value;\n\t}\n\treturn result;\n}\n\nfunction typingRecovery(data: Record<string, unknown>, text: unknown) {\n\tif (typeof text !== \"string\") return {};\n\tconst requested = data.requested_chars;\n\tconst delivered = data.delivered_chars;\n\tif (typeof requested !== \"number\" || !Number.isSafeInteger(requested) || requested < 0 ||\n\t\trequested > 20000 || requested !== Array.from(text).length) return {};\n\tconst validDelivered = typeof delivered === \"number\" && Number.isSafeInteger(delivered) && delivered >= 0 && delivered <= requested;\n\treturn {\n\t\trequested_chars: requested,\n\t\tdelivered_chars: validDelivered ? delivered : undefined,\n\t\tretryable: validDelivered && data.retry_from_character === delivered && typeof data.retryable === \"boolean\" ? data.retryable : undefined,\n\t\tretry_from_character: validDelivered && data.retry_from_character === delivered ? delivered : undefined,\n\t};\n}\n\nconst nativeCodes = new Set([\"background_unavailable\", \"background_occluded\", \"background_uipi_blocked\", \"window_target_mismatch\", \"window_target_not_found\", \"type_text_incomplete\", \"foreground_unavailable\", \"foreground_rejected\", \"stale_target\", \"target_not_found\", \"verification_failed\", \"tool_invocation_failed\"]);\nfunction safeCode(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && nativeCodes.has(value) ? value : undefined;\n}\nfunction nativeReason(reply: DriverReply): string {\n\tconst data = driverData(reply);\n\tconst code = safeCode(data.code) ?? safeCode(record(data.refusal).code) ?? safeCode(record(data.error).code) ?? safeCode(data.refusal) ?? safeCode(data.error);\n\tif (code) return code;\n\tif (plainLaunchReason(reply)) return plainLaunchReason(reply)!;\n\treturn \"native_error_unknown\";\n}\ntype FailurePhase = \"validation\" | \"adapter_preflight\" | \"native_request\" | \"native_result\" | \"observation_capture\" | \"post_action_capture\" | \"cleanup\";\ntype InputState = \"not_dispatched\" | \"dispatched\" | \"partial\" | \"uncertain\";\ntype NativeOutcome = {\n\tphase: FailurePhase;\n\tcode?: string;\n\tnative_code?: string;\n\tstatus?: string;\n\teffect?: string;\n\tverified?: boolean;\n\tsuccess?: boolean;\n\tactivated?: boolean;\n\tescalation?: \"foreground\";\n\tinput: InputState;\n\tapplicationEffect: \"unverified\";\n\trequested_chars?: number;\n\tdelivered_chars?: number;\n\tretryable?: boolean;\n\tretry_from_character?: number;\n};\nfunction outcome(reply: DriverReply, text?: unknown): NativeOutcome {\n\tconst data = driverData(reply);\n\tconst refused = driverRefused(reply);\n\tconst partial = data.effect === \"partial\" || data.status === \"partial\";\n\treturn {\n\t\tphase: refused || partial ? \"native_result\" : \"native_request\",\n\t\tcode: refused || partial ? nativeReason(reply) : undefined,\n\t\tnative_code: safeCode(data.code) ?? safeCode(record(data.refusal).code) ?? safeCode(record(data.error).code),\n\t\tstatus: typeof data.status === \"string\" && [\"ok\", \"success\", \"completed\", \"partial\", \"refused\", \"failed\"].includes(data.status) ? data.status : undefined,\n\t\teffect: typeof data.effect === \"string\" && [\"confirmed\", \"partial\", \"unverifiable\", \"refused\"].includes(data.effect) ? data.effect : undefined,\n\t\tverified: typeof data.verified === \"boolean\" ? data.verified : undefined,\n\t\tsuccess: typeof data.success === \"boolean\" ? data.success : undefined,\n\t\tactivated: typeof data.activated === \"boolean\" ? data.activated : undefined,\n\t\tescalation: record(data.escalation).recommended === \"foreground\" ? \"foreground\" : undefined,\n\t\tinput: partial && typingRecovery(data, text).delivered_chars !== undefined ? \"partial\" : refused || partial ? \"uncertain\" : \"dispatched\",\n\t\tapplicationEffect: \"unverified\",\n\t\t...typingRecovery(data, text),\n\t};\n}\n\nfunction abortable<T>(pending: Promise<T>, signal: AbortSignal): Promise<T> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst abort = () => {\n\t\t\tsignal.removeEventListener(\"abort\", abort);\n\t\t\treject(signal.reason ?? new Error(\"Computer operation cancelled.\"));\n\t\t};\n\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\tpending.then((value) => {\n\t\t\tsignal.removeEventListener(\"abort\", abort);\n\t\t\tresolve(value);\n\t\t}, (error) => {\n\t\t\tsignal.removeEventListener(\"abort\", abort);\n\t\t\treject(error);\n\t\t});\n\t\tif (signal.aborted) abort();\n\t});\n}\n\nconst freshActionGuidance = \"Get a fresh capture of the exact target before any next action, including window focus. Copy its token exactly. No input was sent by this call; earlier calls may have had an effect.\";\n\nclass CaptureError extends Error {\n\treadonly code: string;\n\tconstructor(code: string) { super(code); this.code = code; }\n}\n\nclass ObservationError extends Error {\n\treadonly code: string;\n\tconstructor(code: string, message: string) {\n\t\tsuper(`Stale observation. ${message}`);\n\t\tthis.code = code;\n\t}\n}\n\ntype Target = { desktop: true } | { pid: number; window_id: number; desktop?: false };\ntype PreparedImage = Awaited<ReturnType<typeof prepareComputerImage>>;\ntype Observation = PreparedImage & { token: string; target: Target; time: number; fingerprint: string; geometry: string };\ntype WorkflowState = \"ready\" | \"stopped\" | \"cleanup_unconfirmed\";\ntype Result = { content: (ImageContent | TextContent)[]; details: { observation?: string; computer: { failed: boolean; workflow: WorkflowState } }; isError: boolean };\n\nfunction targetFrom(input: Record<string, unknown>): Target {\n\tif (input.desktop === true) {\n\t\tif (input.pid !== undefined || input.window_id !== undefined) throw new Error(\"Desktop target cannot include pid/window_id.\");\n\t\treturn { desktop: true };\n\t}\n\tif (typeof input.pid !== \"number\" || !Number.isInteger(input.pid) || input.pid < 1 ||\n\t\ttypeof input.window_id !== \"number\" || !Number.isInteger(input.window_id) || input.window_id < 1)\n\t\tthrow new Error(\"Window target requires positive integer pid and window_id.\");\n\treturn { pid: input.pid, window_id: input.window_id };\n}\n\nfunction sameTarget(a: Target, b: Target): boolean {\n\treturn a.desktop === true ? b.desktop === true : b.desktop !== true && a.pid === b.pid && a.window_id === b.window_id;\n}\n\nexport class ComputerWorkflow {\n\tprivate observation?: Observation;\n\tprivate lastCapture?: { fingerprint: string; target: Target; repeats: number };\n\tprivate lastAction?: { signature: string; fingerprint: string; unchanged: boolean };\n\tprivate readonly abort = new AbortController();\n\tprivate closing?: Promise<void>;\n\tprivate readonly driver: ComputerDriver;\n\tprivate readonly lease: DesktopLease;\n\tconstructor(driver: ComputerDriver, lease = new DesktopLease()) {\n\t\tthis.driver = driver;\n\t\tthis.lease = lease;\n\t\tthis.driver.setProcessObserver?.((pid) => this.lease.trackProcess(pid));\n\t}\n\n\tprivate fresh(input: Record<string, unknown>, previous?: Observation): Observation {\n\t\tif (!previous) throw new ObservationError(\"observation_unavailable\", \"No active observation is available.\");\n\t\tif (previous.token !== input.observation) throw new ObservationError(\"observation_mismatch\", \"Token does not match the active observation.\");\n\t\tif (!sameTarget(previous.target, targetFrom(input))) throw new ObservationError(\"observation_target_mismatch\", \"Token belongs to a different target.\");\n\t\tif (Date.now() - previous.time > 30000) throw new ObservationError(\"observation_expired\", \"The active observation is older than 30 seconds.\");\n\t\treturn previous;\n\t}\n\n\tprivate async capture(target: Target, signal: AbortSignal, previous?: Observation, crop?: ImageRegion): Promise<Observation> {\n\t\tconst time = Date.now();\n\t\tconst reply = await abortable(this.driver.call(target.desktop ? \"get_desktop_state\" : \"get_window_state\",\n\t\t\ttarget.desktop ? {} : { pid: target.pid, window_id: target.window_id, include_accessibility_tree: false, include_screenshot: true, max_dimension: 2560 }, signal), signal);\n\t\tif (driverRefused(reply)) throw new CaptureError(nativeReason(reply));\n\t\tconst data = driverData(reply);\n\t\tconst images = Array.isArray(reply.content) ? reply.content.filter((item) => item.type === \"image\") : [];\n\t\tif (images.length !== 1 || typeof images[0].data !== \"string\" || typeof images[0].mimeType !== \"string\")\n\t\t\tthrow new CaptureError(\"screenshot_unavailable\");\n\t\tconst image: ImageContent = { type: \"image\", data: images[0].data, mimeType: images[0].mimeType };\n\t\tlet dimensions: { width: number; height: number };\n\t\ttry { dimensions = screenshotDimensions(image); } catch { throw new CaptureError(\"image_decode_failed\"); }\n\t\tif (data.screenshot_frame_valid === false || data.screenshot_error != null || dimensions.width !== data.screenshot_width || dimensions.height !== data.screenshot_height)\n\t\t\tthrow new CaptureError(\"image_frame_invalid\");\n\t\tconst geometry = JSON.stringify(select(record(data.window_bounds), [\"x\", \"y\", \"width\", \"height\"]));\n\t\tif (crop && previous && (previous.sourceWidth !== dimensions.width || previous.sourceHeight !== dimensions.height || previous.geometry !== geometry))\n\t\t\tthrow new CaptureError(\"target_geometry_changed\");\n\t\tlet prepared: PreparedImage;\n\t\ttry { prepared = await abortable(prepareComputerImage(image, crop), signal); }\n\t\tcatch (error) { if (signal.aborted) throw error; throw new CaptureError(\"image_decode_failed\"); }\n\t\tsignal.throwIfAborted();\n\t\treturn { ...prepared, token: randomUUID(), target, time, fingerprint: prepared.fingerprint, geometry };\n\t}\n\n\tprivate imageResult(observation: Observation, extra: Record<string, unknown> = {}): Result {\n\t\tthis.observation = observation;\n\t\tconst { width, height, region, sourceWidth, sourceHeight, scaleX, scaleY, target, token } = observation;\n\t\tconst failed = extra.failed === true;\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: JSON.stringify({\n\t\t\t\t...extra, observation: token, target, captured_at: observation.time, expires_at: observation.time + 30000, image: { width, height },\n\t\t\t\tmapping: { sourceWidth, sourceHeight, ...region, scaleX, scaleY },\n\t\t\t\tcoordinates: \"Use returned-image pixels; mapping is applied automatically.\",\n\t\t\t}) }, observation.image],\n\t\t\tdetails: { observation: token, computer: { failed, workflow: \"ready\" } }, isError: failed,\n\t\t};\n\t}\n\n\tprivate crop(input: Record<string, unknown>, previous: Observation): ImageRegion {\n\t\tconst crop = record(input.crop);\n\t\tconst { x, y, width, height } = crop;\n\t\tif (typeof x !== \"number\" || typeof y !== \"number\" || typeof width !== \"number\" || typeof height !== \"number\" ||\n\t\t\t![x, y, width, height].every(Number.isFinite) || x < 0 || y < 0 || width <= 0 || height <= 0 ||\n\t\t\tx + width > previous.width || y + height > previous.height || Object.keys(crop).some((key) => ![\"x\", \"y\", \"width\", \"height\"].includes(key)))\n\t\t\tthrow new Error(\"Crop must fit the latest returned image.\");\n\t\tconst left = Math.floor(previous.region.x + x * previous.scaleX);\n\t\tconst top = Math.floor(previous.region.y + y * previous.scaleY);\n\t\tconst right = Math.min(previous.sourceWidth, Math.ceil(previous.region.x + (x + width) * previous.scaleX));\n\t\tconst bottom = Math.min(previous.sourceHeight, Math.ceil(previous.region.y + (y + height) * previous.scaleY));\n\t\treturn { x: left, y: top, width: right - left, height: bottom - top };\n\t}\n\n\tprivate action(name: string, input: Record<string, unknown>, previous: Observation) {\n\t\tconst args: Record<string, unknown> = previous.target.desktop ? { scope: \"desktop\" } : { pid: previous.target.pid, window_id: previous.target.window_id };\n\t\tif (previous.target.desktop && input.foreground !== true) throw new Error(\"Desktop input requires foreground=true.\");\n\t\tif (name !== \"computer_window\" && name !== \"computer_hover\") args.delivery_mode = input.foreground === true ? \"foreground\" : \"background\";\n\t\tfor (const key of [\"x\", \"y\", \"from_x\", \"from_y\", \"to_x\", \"to_y\"]) {\n\t\t\tif (name === \"computer_window\") break;\n\t\t\tconst value = input[key];\n\t\t\tif (value === undefined) continue;\n\t\t\tconst horizontal = key.endsWith(\"x\");\n\t\t\tif (typeof value !== \"number\" || !Number.isFinite(value) || value < 0 || value >= (horizontal ? previous.width : previous.height))\n\t\t\t\tthrow new Error(\"Coordinate outside the observed image.\");\n\t\t\targs[key] = (horizontal ? previous.region.x : previous.region.y) + value * (horizontal ? previous.scaleX : previous.scaleY);\n\t\t}\n\t\tif ((input.x === undefined) !== (input.y === undefined)) throw new Error(\"Provide a complete x/y pair.\");\n\t\tif (previous.target.desktop && [\"computer_key\", \"computer_text\"].includes(name) && input.x !== undefined)\n\t\t\tthrow new Error(\"Desktop keyboard input uses the observed focused field. Change focus with a separate grounded click.\");\n\t\tlet operation: string;\n\t\tswitch (name) {\n\t\t\tcase \"computer_hover\":\n\t\t\t\tif (process.platform !== \"win32\" || !previous.target.desktop || input.desktop !== true || input.foreground !== true ||\n\t\t\t\t\tinput.x === undefined || input.y === undefined) throw new Error(\"Hover requires a Windows foreground desktop image and x/y coordinates.\");\n\t\t\t\toperation = \"move_cursor\";\n\t\t\t\tbreak;\n\t\t\tcase \"computer_click\":\n\t\t\tcase \"computer_scroll\":\n\t\t\t\tif (input.x === undefined || input.y === undefined) throw new Error(\"This action requires x/y image coordinates.\");\n\t\t\t\toperation = name === \"computer_click\" ? \"click\" : \"scroll\";\n\t\t\t\tfor (const key of name === \"computer_click\" ? [\"button\", \"count\", \"modifier\"] : [\"direction\", \"amount\", \"by\"])\n\t\t\t\t\tif (input[key] !== undefined) args[key] = input[key];\n\t\t\t\tbreak;\n\t\t\tcase \"computer_drag\":\n\t\t\t\tif (![\"from_x\", \"from_y\", \"to_x\", \"to_y\"].every((key) => typeof args[key] === \"number\")) throw new Error(\"Drag requires both endpoints.\");\n\t\t\t\toperation = \"drag\";\n\t\t\t\tbreak;\n\t\t\tcase \"computer_key\": {\n\t\t\t\tif ((input.key === undefined) === (input.keys === undefined)) throw new Error(\"Provide key OR keys.\");\n\t\t\t\tconst keys: readonly unknown[] | undefined = Array.isArray(input.keys) ? input.keys : undefined;\n\t\t\t\tconst last = keys?.at(-1);\n\t\t\t\tconst modifiers = new Set([\"ctrl\", \"control\", \"shift\", \"alt\", \"win\", \"windows\", \"cmd\", \"command\"]);\n\t\t\t\tconst foregroundShortcut = process.platform === \"win32\" && input.foreground === true && input.x === undefined &&\n\t\t\t\t\tkeys !== undefined && keys.length >= 2 && keys.slice(0, -1).every((key) => typeof key === \"string\" && modifiers.has(key.toLowerCase())) &&\n\t\t\t\t\ttypeof last === \"string\" && !modifiers.has(last.toLowerCase());\n\t\t\t\t// Pinned Windows hotkey routes XAML through UIA before honoring foreground; press_key honors SendInput.\n\t\t\t\toperation = input.keys === undefined || foregroundShortcut ? \"press_key\" : \"hotkey\";\n\t\t\t\tif (foregroundShortcut) {\n\t\t\t\t\targs.key = last;\n\t\t\t\t\targs.modifiers = keys.slice(0, -1);\n\t\t\t\t} else args[input.keys === undefined ? \"key\" : \"keys\"] = input.keys ?? input.key;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"computer_text\":\n\t\t\t\toperation = \"type_text\";\n\t\t\t\targs.text = input.text;\n\t\t\t\tbreak;\n\t\t\tcase \"computer_window\":\n\t\t\t\tif (previous.target.desktop) throw new Error(\"Window management requires an exact window target.\");\n\t\t\t\tif (input.action === \"frame\") {\n\t\t\t\t\tfor (const key of [\"x\", \"y\", \"width\", \"height\"]) {\n\t\t\t\t\t\tconst value = input[key];\n\t\t\t\t\t\tif (typeof value !== \"number\" || !Number.isFinite(value) || ([\"width\", \"height\"].includes(key) && value <= 0)) throw new Error(\"Frame requires valid x/y/width/height.\");\n\t\t\t\t\t\targs[key] = value;\n\t\t\t\t\t}\n\t\t\t\t\toperation = \"set_window_frame\";\n\t\t\t\t} else if (input.action === \"focus\" && [\"x\", \"y\", \"width\", \"height\"].every((key) => input[key] === undefined)) operation = \"bring_to_front\";\n\t\t\t\telse throw new Error(\"Use frame or focus. Minimize/restore uses a fresh image click on the visible control.\");\n\t\t\t\tbreak;\n\t\t\tdefault: throw new Error(\"Unknown computer action.\");\n\t\t}\n\t\treturn { operation, args };\n\t}\n\n\tasync execute(name: string, input: Record<string, unknown>, signal?: AbortSignal): Promise<Result> {\n\t\tconst combined = AbortSignal.any([this.abort.signal, this.lease.signal, AbortSignal.timeout(90000), ...(signal ? [signal] : [])]);\n\t\tlet inputDispatched = false;\n\t\tlet failureCode = \"workflow_unavailable\";\n\t\tlet phase: FailurePhase = \"validation\";\n\t\tconst currentPhase = (): FailurePhase => phase;\n\t\tlet operationName = name;\n\t\tlet actionTarget: Target | undefined;\n\t\tlet actionOutcome: ReturnType<typeof outcome> | undefined;\n\t\ttry {\n\t\t\tconst result = await this.lease.run(async (): Promise<Result> => {\n\t\t\t\tfailureCode = \"invalid_arguments\";\n\t\t\t\tconst previous = this.observation;\n\t\t\t\tif (name !== \"computer_apps\") this.observation = undefined;\n\t\t\t\tif (!Object.hasOwn(computerSchemas, name)) throw new Error(\"Unknown computer operation.\");\n\t\t\t\tconst schema = computerSchemas[name as keyof typeof computerSchemas];\n\t\t\t\tif (Object.keys(input).some((key) => !Object.hasOwn(schema.properties, key))) throw new Error(\"Unsupported computer argument. Use image coordinates only.\");\n\t\t\t\tif (name === \"computer_apps\" || name === \"computer_launch\") {\n\t\t\t\t\tconst operation = name === \"computer_launch\" ? \"launch_app\" : input.pid === undefined ? \"list_apps\" : \"list_windows\";\n\t\t\t\t\toperationName = operation;\n\t\t\t\t\tif (input.include_windows !== undefined && (name !== \"computer_apps\" || typeof input.include_windows !== \"boolean\" || (input.include_windows && (input.pid !== undefined || typeof input.query !== \"string\" || !input.query.trim()))))\n\t\t\t\t\t\tthrow new Error(\"include_windows requires a named app query without pid.\");\n\t\t\t\t\tif (input.pid !== undefined && (typeof input.pid !== \"number\" || !Number.isSafeInteger(input.pid) || input.pid < 1)) throw new Error(\"Window lookup requires a positive pid.\");\n\t\t\t\t\tif (name === \"computer_launch\" && (typeof input.name !== \"string\" || !input.name.trim() || input.name.length > 500)) throw new Error(\"Launch requires a nonblank name.\");\n\t\t\t\t\tif (input.query !== undefined && (typeof input.query !== \"string\" || !input.query.trim() || Array.from(input.query).length > 240))\n\t\t\t\t\t\tthrow new Error(\"Discovery query must be a nonblank string of at most 240 characters.\");\n\t\t\t\t\tconst query = typeof input.query === \"string\" ? input.query.trim() : undefined;\n\t\t\t\t\tconst needle = query?.toLowerCase();\n\t\t\t\t\tconst offset = input.offset ?? 0;\n\t\t\t\t\tif (typeof offset !== \"number\" || !Number.isSafeInteger(offset) || offset < 0)\n\t\t\t\t\t\tthrow new Error(\"Discovery offset must be a nonnegative safe integer.\");\n\t\t\t\t\tconst args = name === \"computer_launch\" ? { name: input.name } : input.pid === undefined ? {} : { pid: input.pid };\n\t\t\t\t\tcombined.throwIfAborted();\n\t\t\t\t\tinputDispatched = name === \"computer_launch\";\n\t\t\t\t\tphase = \"native_request\";\n\t\t\t\t\tfailureCode = \"discovery_failed\";\n\t\t\t\t\tconst reply = await abortable(this.driver.call(operation, args, combined), combined);\n\t\t\t\t\tconst data = driverData(reply);\n\t\t\t\t\tconst discovered = data.apps ?? data.windows;\n\t\t\t\t\tconst rows = Array.isArray(discovered) && needle ? discovered.filter((row) => {\n\t\t\t\t\t\tconst item = record(row);\n\t\t\t\t\t\treturn [item.name, item.app_name, item.title].some((value) => typeof value === \"string\" && value.toLowerCase().includes(needle));\n\t\t\t\t\t}) : discovered;\n\t\t\t\t\tconst metadata = Array.isArray(rows) ? rows.slice(offset, offset + 50).map((row) => {\n\t\t\t\t\t\tconst item = record(row);\n\t\t\t\t\t\treturn { ...select(item, [\"pid\", \"window_id\", \"name\", \"app_name\", \"title\", \"active\", \"running\", \"is_on_screen\", \"minimized\"]),\n\t\t\t\t\t\t\tbounds: item.bounds ? select(record(item.bounds), [\"x\", \"y\", \"width\", \"height\"]) : undefined };\n\t\t\t\t\t}) : undefined;\n\t\t\t\t\tconst remaining = Array.isArray(rows) ? Math.max(0, rows.length - offset - (metadata?.length ?? 0)) : 0;\n\t\t\t\t\tconst failed = driverRefused(reply);\n\t\t\t\t\tconst pid = typeof data.pid === \"number\" && Number.isSafeInteger(data.pid) && data.pid > 0 ? data.pid : undefined;\n\t\t\t\t\tconst launchWindows = Array.isArray(data.windows) ? data.windows.slice(0, 50).map((row) => {\n\t\t\t\t\t\tconst item = record(row);\n\t\t\t\t\t\treturn { ...select(item, [\"window_id\", \"title\", \"is_on_screen\", \"minimized\"]), bounds: item.bounds ? select(record(item.bounds), [\"x\", \"y\", \"width\", \"height\"]) : undefined };\n\t\t\t\t\t}) : [];\n\t\t\t\t\tconst returnedId = data.window_id ?? (Array.isArray(data.windows) && data.windows.length === 1 ? record(data.windows[0]).window_id : undefined);\n\t\t\t\t\tconst windowId = typeof returnedId === \"number\" && Number.isSafeInteger(returnedId) && returnedId > 0 ? returnedId : undefined;\n\t\t\t\t\tlet windowsByPid: { pid: number; windows?: typeof metadata; error?: string; omitted?: number; next_offset?: number }[] | undefined;\n\t\t\t\t\tlet guidance = remaining ? \"Pass next_offset as offset with the same pid and query. Lists refresh per call.\" : input.pid !== undefined\n\t\t\t\t\t\t? \"Use computer_observe({pid,window_id}) for an exact returned window.\"\n\t\t\t\t\t\t: \"App query filters app identities, not every window title. Use computer_apps({pid}) to find windows for a running app.\";\n\t\t\t\t\tif (name === \"computer_apps\" && input.include_windows === true && !failed) {\n\t\t\t\t\t\tconst pids = [...new Set((Array.isArray(rows) ? rows : []).map((row) => record(row).pid).filter((value): value is number => typeof value === \"number\" && Number.isSafeInteger(value) && value > 0))];\n\t\t\t\t\t\tif (pids.length > 5) guidance = \"More than five running processes matched. Narrow the query or choose one positive pid with computer_apps({pid}); no arbitrary process was selected.\";\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\twindowsByPid = [];\n\t\t\t\t\t\t\tlet budget = 50;\n\t\t\t\t\t\t\tfor (const matchingPid of pids) {\n\t\t\t\t\t\t\t\tcombined.throwIfAborted();\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst windowsReply = await abortable(this.driver.call(\"list_windows\", { pid: matchingPid }, combined), combined);\n\t\t\t\t\t\t\t\t\tconst windows = driverData(windowsReply).windows;\n\t\t\t\t\t\t\t\t\tif (driverRefused(windowsReply) || !Array.isArray(windows)) { windowsByPid.push({ pid: matchingPid, error: driverRefused(windowsReply) ? nativeReason(windowsReply) : \"windows_unavailable\" }); continue; }\n\t\t\t\t\t\t\t\t\tconst subset = windows.slice(0, budget).map((row) => {\n\t\t\t\t\t\t\t\t\t\tconst item = record(row);\n\t\t\t\t\t\t\t\t\t\treturn { ...select(item, [\"pid\", \"window_id\", \"name\", \"app_name\", \"title\", \"active\", \"running\", \"is_on_screen\", \"minimized\"]),\n\t\t\t\t\t\t\t\t\t\t\tbounds: item.bounds ? select(record(item.bounds), [\"x\", \"y\", \"width\", \"height\"]) : undefined };\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tconst omitted = windows.length - subset.length;\n\t\t\t\t\t\t\t\t\twindowsByPid.push({ pid: matchingPid, windows: subset, omitted: omitted || undefined, next_offset: omitted ? subset.length : undefined });\n\t\t\t\t\t\t\t\t\tbudget -= subset.length;\n\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\tif (combined.aborted) throw error;\n\t\t\t\t\t\t\t\t\tif (error instanceof DriverCallError) throw error;\n\t\t\t\t\t\t\t\t\twindowsByPid.push({ pid: matchingPid, error: \"window_lookup_failed\" });\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tguidance = \"Use computer_observe({pid,window_id}) for a returned window. For omitted windows use computer_apps({pid,offset:next_offset}). Per-PID failures need a targeted lookup.\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (name === \"computer_launch\") guidance = pid && windowId && !failed\n\t\t\t\t\t\t? `Use computer_observe({pid:${pid},window_id:${windowId}}) before input.`\n\t\t\t\t\t\t: `Launch ${failed ? \"may have completed despite an unsuccessful reply\" : \"returned no exact window\"}. Use computer_apps({${pid ? `pid:${pid}` : `query:${JSON.stringify(input.name)}`}}) before another launch or input.`;\n\t\t\t\t\treturn { content: [{ type: \"text\", text: JSON.stringify({\n\t\t\t\t\t\tkind: name === \"computer_launch\" ? \"launch\" : input.pid === undefined ? \"apps\" : \"windows\", operation,\n\t\t\t\t\t\t...(name === \"computer_launch\" ? outcome(reply) : { phase: \"native_result\", code: failed ? nativeReason(reply) : undefined }),\n\t\t\t\t\t\tinput: name === \"computer_launch\" ? \"not_applicable\" : undefined,\n\t\t\t\t\t\tlaunch: name === \"computer_launch\" ? plainLaunchReason(reply) === \"app_lookup_unavailable\" ? \"not_started\" : failed ? \"completion_uncertain\" : \"acknowledged\" : undefined,\n\t\t\t\t\t\t...select(data, [\"pid\", \"window_id\", \"name\", \"title\"]), window_id: name === \"computer_launch\" ? windowId : select(data, [\"window_id\"]).window_id,\n\t\t\t\t\t\twindows: name === \"computer_launch\" ? launchWindows : undefined, items: name === \"computer_launch\" ? undefined : metadata,\n\t\t\t\t\t\twindows_by_pid: windowsByPid, query, offset, total: Array.isArray(rows) ? rows.length : undefined,\n\t\t\t\t\t\tomitted: remaining || undefined, next_offset: remaining ? offset + 50 : undefined, guidance,\n\t\t\t\t\t}) }], details: { computer: { failed, workflow: \"ready\" } }, isError: failed };\n\t\t\t\t}\n\t\t\t\tconst target = targetFrom(input);\n\t\t\t\tactionTarget = target;\n\t\t\t\tif (name === \"computer_observe\") {\n\t\t\t\t\tphase = \"observation_capture\";\n\t\t\t\t\tconst crop = input.crop === undefined ? undefined : this.crop(input, this.fresh(input, previous));\n\t\t\t\t\tfailureCode = \"capture_failed\";\n\t\t\t\t\tconst captured = await this.capture(target, combined, previous, crop);\n\t\t\t\t\tconst unchanged = this.lastCapture?.fingerprint === captured.fingerprint && sameTarget(this.lastCapture.target, target);\n\t\t\t\t\tconst repeats = crop ? 0 : unchanged ? (this.lastCapture?.repeats ?? 0) + 1 : 1;\n\t\t\t\t\tthis.lastCapture = { fingerprint: captured.fingerprint, target, repeats };\n\t\t\t\t\tif (repeats >= 3) return {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify({ phase: \"observation_capture\", code: \"unchanged_polling_limit\", guidance: \"Three captures are unchanged. Stop polling and reconsider the target or approach. No input token issued.\" }) }],\n\t\t\t\t\t\tdetails: { computer: { failed: true, workflow: \"stopped\" } }, isError: true,\n\t\t\t\t\t};\n\t\t\t\t\treturn this.imageResult(captured, { unchanged });\n\t\t\t\t}\n\t\t\t\tconst grounded = this.fresh(input, previous);\n\t\t\t\tconst { operation, args } = this.action(name, input, grounded);\n\t\t\t\tconst { button = \"left\", count = 1, modifier = [], ...clickArgs } = args;\n\t\t\t\tconst signature = JSON.stringify({ operation, args: operation === \"click\"\n\t\t\t\t\t? { ...clickArgs, button, count, modifier: Array.isArray(modifier) ? [...new Set(modifier)].sort() : modifier }\n\t\t\t\t\t: args });\n\t\t\t\tif (this.lastAction?.unchanged && this.lastAction.signature === signature && this.lastAction.fingerprint === grounded.fingerprint)\n\t\t\t\t\tthrow new Error(\"The identical action had no visible change. Choose a different grounded action; never retry blindly.\");\n\t\t\t\tcombined.throwIfAborted();\n\t\t\t\tinputDispatched = true;\n\t\t\t\tphase = \"native_request\";\n\t\t\t\toperationName = operation;\n\t\t\t\tconst reply = await abortable(this.driver.call(operation, args, combined), combined);\n\t\t\t\tcombined.throwIfAborted();\n\t\t\t\tactionOutcome = outcome(reply, name === \"computer_text\" ? input.text : undefined);\n\t\t\t\tconst recoveryGuidance = actionOutcome.retry_from_character !== undefined\n\t\t\t\t\t? \"Verify the field in a fresh image before considering any remaining suffix. retry_from_character is a zero-based Unicode code-point offset, not UTF-16. retryable is driver advice, not authorization to retry.\"\n\t\t\t\t\t: undefined;\n\t\t\t\tconst failed = driverRefused(reply) || driverData(reply).effect === \"partial\" || driverData(reply).status === \"partial\";\n\t\t\t\tconst backgroundUnavailable = actionOutcome.code === \"background_unavailable\";\n\t\t\t\tif (name === \"computer_hover\") await delay(700, undefined, { signal: combined });\n\t\t\t\tphase = \"post_action_capture\";\n\t\t\t\ttry {\n\t\t\t\t\tconst after = await this.capture(target, combined);\n\t\t\t\t\tconst unchanged = after.fingerprint === grounded.fingerprint;\n\t\t\t\t\tthis.lastAction = { signature, fingerprint: after.fingerprint, unchanged };\n\t\t\t\t\tthis.lastCapture = { fingerprint: after.fingerprint, target, repeats: failed && this.lastCapture?.fingerprint === after.fingerprint && sameTarget(this.lastCapture.target, target)\n\t\t\t\t\t\t? this.lastCapture.repeats : 0 };\n\t\t\t\t\treturn this.imageResult(after, { kind: \"action\", operation, target, ...actionOutcome, failed, unchanged,\n\t\t\t\t\t\tguidance: [\"Inspect the post-action image before another action. No visible change does not prove failure; never repeat blindly.\",\n\t\t\t\t\t\t\tbackgroundUnavailable ? \"After this fresh capture, foreground input may be considered if permitted, not another background shortcut.\" : undefined,\n\t\t\t\t\t\t\trecoveryGuidance].filter(Boolean).join(\" \") });\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcombined.throwIfAborted();\n\t\t\t\t\tif (!(error instanceof CaptureError)) throw error;\n\t\t\t\t\tthis.lastAction = { signature, fingerprint: grounded.fingerprint, unchanged: true };\n\t\t\t\t\treturn { content: [{ type: \"text\", text: JSON.stringify({ kind: \"action\", operation, target, ...actionOutcome, phase: \"post_action_capture\",\n\t\t\t\t\t\tcapture_error: error.code, observation: \"unavailable\", guidance: `Input may have taken effect. ${[\"target_not_found\", \"window_target_not_found\", \"window_target_mismatch\"].includes(error.code)\n\t\t\t\t\t\t\t? \"Use computer_apps({pid}) or observe the desktop to find the target.\" : \"Get a fresh capture of the exact target\"} before another action; never repeat blindly. ${recoveryGuidance ?? \"\"}`,\n\t\t\t\t\t}) }], details: { computer: { failed: true, workflow: \"ready\" } }, isError: true };\n\t\t\t\t}\n\t\t\t}, combined);\n\t\t\tif (result.details.computer.workflow !== \"ready\") return this.finish(result);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (error instanceof DriverCallError && !(currentPhase() === \"post_action_capture\" && actionOutcome)) {\n\t\t\t\tphase = error.phase;\n\t\t\t\tinputDispatched = error.dispatched;\n\t\t\t}\n\t\t\tconst failurePhase = currentPhase();\n\t\t\tconst fatal = combined.aborted || this.abort.signal.aborted || this.lease.signal.aborted || error instanceof DriverCallError ||\n\t\t\t\t!(error instanceof ObservationError || error instanceof CaptureError || failurePhase === \"validation\" || failurePhase === \"observation_capture\" && !inputDispatched);\n\t\t\tconst code = error instanceof ObservationError || error instanceof CaptureError ? error.code\n\t\t\t\t: inputDispatched && failurePhase === \"post_action_capture\" ? \"capture_transport_failed\"\n\t\t\t\t: error instanceof DriverCallError ? error.dispatched ? \"input_dispatch_failed\" : \"adapter_preflight_failed\"\n\t\t\t\t: inputDispatched ? \"input_dispatch_failed\" : failurePhase === \"validation\" ? \"invalid_arguments\" : failureCode;\n\t\t\tconst message = name === \"computer_launch\" ? inputDispatched ? \"Launch request began; activation may have occurred.\" : \"No launch request was sent by this call.\"\n\t\t\t\t: inputDispatched ? \"Input may have taken effect; request began.\" : \"No input was sent by this call.\";\n\t\t\tconst guidance = inputDispatched ? name === \"computer_launch\"\n\t\t\t\t? `Use computer_apps({query:${JSON.stringify(input.name)}) before considering another launch.`\n\t\t\t\t: `Get a fresh capture of the exact target before another action. Input may have taken effect; inspect the field before deciding and never repeat blindly. ${actionOutcome?.retry_from_character !== undefined ? \"Verify the field in a fresh image before considering any remaining suffix. retry_from_character is a zero-based Unicode code-point offset, not UTF-16.\" : \"\"}`\n\t\t\t\t: freshActionGuidance;\n\t\t\tconst result: Result = { content: [{ type: \"text\", text: JSON.stringify({ kind: name === \"computer_apps\" ? \"apps\" : name === \"computer_launch\" ? \"launch\" : name === \"computer_observe\" ? \"observation\" : \"action\",\n\t\t\t\toperation: operationName, target: actionTarget, ...actionOutcome, action_outcome: actionOutcome, phase: failurePhase, code,\n\t\t\t\tinput: name === \"computer_apps\" ? undefined : name === \"computer_launch\" ? \"not_applicable\" : inputDispatched ? \"uncertain\" : \"not_dispatched\",\n\t\t\t\trequest: name === \"computer_launch\" ? inputDispatched ? \"sent\" : \"not_sent\" : undefined, applicationEffect: \"unverified\",\n\t\t\t\tobservation: \"unavailable\", capture_error: failurePhase === \"post_action_capture\" ? code : undefined, message, guidance }) }], details: { computer: { failed: true, workflow: fatal ? \"stopped\" : \"ready\" } }, isError: true };\n\t\t\treturn fatal ? this.finish(result) : result;\n\t\t}\n\t}\n\n\tprivate async finish(result: Result): Promise<Result> {\n\t\ttry {\n\t\t\tawait this.close();\n\t\t\treturn { ...result, details: { ...result.details, computer: { failed: result.details.computer.failed, workflow: \"stopped\" } } };\n\t\t} catch {\n\t\t\treturn { content: [...result.content, { type: \"text\", text: JSON.stringify({ phase: \"cleanup\", cleanup: \"unconfirmed\", guidance: \"Desktop ownership retained until shutdown is confirmed.\" }) }],\n\t\t\t\tdetails: { ...result.details, computer: { failed: true, workflow: \"cleanup_unconfirmed\" } }, isError: true };\n\t\t}\n\t}\n\n\tclose(): Promise<void> {\n\t\tthis.abort.abort();\n\t\tthis.observation = undefined;\n\t\tthis.closing ??= this.stop();\n\t\treturn this.closing;\n\t}\n\n\tprivate async stop(): Promise<void> {\n\t\tawait this.driver.close();\n\t\tawait this.lease.close();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../src/core/computer-use/workflow.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport type { ImageContent, TextContent } from \"@ashx-j/lunr-ai\";\nimport { type ComputerDriver, DriverCallError, type DriverReply } from \"./adapter.ts\";\nimport { type ImageRegion, prepareComputerImage, screenshotDimensions } from \"./image.ts\";\nimport { DesktopLease } from \"./lease.ts\";\nimport { computerSchemas } from \"./schemas.ts\";\n\nexport function driverData(reply: DriverReply): Record<string, unknown> {\n\tif (\n\t\treply.structuredContent &&\n\t\ttypeof reply.structuredContent === \"object\" &&\n\t\t!Array.isArray(reply.structuredContent)\n\t)\n\t\treturn Object.fromEntries(Object.entries(reply.structuredContent));\n\tif (Array.isArray(reply.content))\n\t\tfor (const item of reply.content) {\n\t\t\tif (item.type !== \"text\" || typeof item.text !== \"string\") continue;\n\t\t\ttry {\n\t\t\t\tconst value: unknown = JSON.parse(item.text);\n\t\t\t\tif (value && typeof value === \"object\" && !Array.isArray(value))\n\t\t\t\t\treturn Object.fromEntries(Object.entries(value));\n\t\t\t} catch {}\n\t\t}\n\treturn {};\n}\n\nfunction plainLaunchReason(reply: DriverReply): string | undefined {\n\tif (reply.structuredContent || !Array.isArray(reply.content)) return undefined;\n\tconst text = reply.content.find((item) => item.type === \"text\")?.text;\n\tif (typeof text !== \"string\") return undefined;\n\tif (/^App name lookup for .+ is (?:temporarily unavailable|unavailable).+No app was launched;/s.test(text))\n\t\treturn \"app_lookup_unavailable\";\n\tif (/^App .+ was not found in shell:AppsFolder or by Windows PATH\\/association lookup:/s.test(text))\n\t\treturn \"app_not_found\";\n\tif (/^Launch of .+ timed out after 15s/s.test(text)) return \"launch_timeout_unknown\";\n\tif (/^(?:Failed to launch|Task error): /s.test(text)) return \"launch_native_error_unknown\";\n\treturn undefined;\n}\n\nexport function driverRefused(reply: DriverReply): boolean {\n\tconst data = driverData(reply);\n\tconst acknowledged =\n\t\tdata.activated === true || data.success === true || data.verified === true || data.effect === \"confirmed\";\n\tconst uncertain = [data.status, data.effect].some((value) => value === \"partial\" || value === \"unverifiable\");\n\treturn (\n\t\treply.isError === true ||\n\t\tplainLaunchReason(reply) !== undefined ||\n\t\t(data.refusal !== undefined && data.refusal !== null && data.refusal !== false) ||\n\t\t(data.error !== undefined && data.error !== null && data.error !== false) ||\n\t\tdata.effect === \"refused\" ||\n\t\tdata.status === \"refused\" ||\n\t\tdata.status === \"failed\" ||\n\t\tdata.success === false ||\n\t\t[\n\t\t\t\"window_target_mismatch\",\n\t\t\t\"window_target_not_found\",\n\t\t\t\"background_unavailable\",\n\t\t\t\"foreground_unavailable\",\n\t\t\t\"type_text_incomplete\",\n\t\t\t\"verification_failed\",\n\t\t].includes(String(data.code)) ||\n\t\t(data.status !== undefined &&\n\t\t\t!acknowledged &&\n\t\t\t!uncertain &&\n\t\t\t![\"ok\", \"success\", \"completed\"].includes(String(data.status))) ||\n\t\t(data.code !== undefined && data.code !== 0 && !acknowledged && !uncertain)\n\t);\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value)\n\t\t? Object.fromEntries(Object.entries(value))\n\t\t: {};\n}\n\nfunction select(data: Record<string, unknown>, keys: readonly string[]): Record<string, string | number | boolean> {\n\tconst result: Record<string, string | number | boolean> = {};\n\tfor (const key of keys) {\n\t\tconst value = data[key];\n\t\tif ([\"name\", \"app_name\", \"title\"].includes(key) && typeof value === \"string\") result[key] = value.slice(0, 240);\n\t\telse if ([\"active\", \"running\", \"is_on_screen\", \"minimized\"].includes(key) && typeof value === \"boolean\")\n\t\t\tresult[key] = value;\n\t\telse if (\n\t\t\t[\"pid\", \"window_id\", \"x\", \"y\", \"width\", \"height\"].includes(key) &&\n\t\t\ttypeof value === \"number\" &&\n\t\t\tNumber.isSafeInteger(value)\n\t\t)\n\t\t\tresult[key] = value;\n\t}\n\treturn result;\n}\n\nfunction typingRecovery(data: Record<string, unknown>, text: unknown) {\n\tif (typeof text !== \"string\") return {};\n\tconst requested = data.requested_chars;\n\tconst delivered = data.delivered_chars;\n\tif (\n\t\ttypeof requested !== \"number\" ||\n\t\t!Number.isSafeInteger(requested) ||\n\t\trequested < 0 ||\n\t\trequested > 20000 ||\n\t\trequested !== Array.from(text).length\n\t)\n\t\treturn {};\n\tconst validDelivered =\n\t\ttypeof delivered === \"number\" && Number.isSafeInteger(delivered) && delivered >= 0 && delivered <= requested;\n\treturn {\n\t\trequested_chars: requested,\n\t\tdelivered_chars: validDelivered ? delivered : undefined,\n\t\tretryable:\n\t\t\tvalidDelivered && data.retry_from_character === delivered && typeof data.retryable === \"boolean\"\n\t\t\t\t? data.retryable\n\t\t\t\t: undefined,\n\t\tretry_from_character: validDelivered && data.retry_from_character === delivered ? delivered : undefined,\n\t};\n}\n\nconst nativeCodes = new Set([\n\t\"background_unavailable\",\n\t\"background_occluded\",\n\t\"background_uipi_blocked\",\n\t\"window_target_mismatch\",\n\t\"window_target_not_found\",\n\t\"type_text_incomplete\",\n\t\"foreground_unavailable\",\n\t\"foreground_rejected\",\n\t\"stale_target\",\n\t\"target_not_found\",\n\t\"verification_failed\",\n\t\"tool_invocation_failed\",\n]);\nfunction safeCode(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && nativeCodes.has(value) ? value : undefined;\n}\nfunction nativeReason(reply: DriverReply): string {\n\tconst data = driverData(reply);\n\tconst code =\n\t\tsafeCode(data.code) ??\n\t\tsafeCode(record(data.refusal).code) ??\n\t\tsafeCode(record(data.error).code) ??\n\t\tsafeCode(data.refusal) ??\n\t\tsafeCode(data.error);\n\tif (code) return code;\n\tif (plainLaunchReason(reply)) return plainLaunchReason(reply)!;\n\treturn \"native_error_unknown\";\n}\ntype FailurePhase =\n\t| \"validation\"\n\t| \"adapter_preflight\"\n\t| \"native_request\"\n\t| \"native_result\"\n\t| \"observation_capture\"\n\t| \"post_action_capture\"\n\t| \"cleanup\";\ntype InputState = \"not_dispatched\" | \"dispatched\" | \"partial\" | \"uncertain\";\ntype NativeOutcome = {\n\tphase: FailurePhase;\n\tcode?: string;\n\tnative_code?: string;\n\tstatus?: string;\n\teffect?: string;\n\tverified?: boolean;\n\tsuccess?: boolean;\n\tactivated?: boolean;\n\tescalation?: \"foreground\";\n\tinput: InputState;\n\tapplicationEffect: \"unverified\";\n\trequested_chars?: number;\n\tdelivered_chars?: number;\n\tretryable?: boolean;\n\tretry_from_character?: number;\n};\nfunction outcome(reply: DriverReply, text?: unknown): NativeOutcome {\n\tconst data = driverData(reply);\n\tconst refused = driverRefused(reply);\n\tconst partial = data.effect === \"partial\" || data.status === \"partial\";\n\treturn {\n\t\tphase: refused || partial ? \"native_result\" : \"native_request\",\n\t\tcode: refused || partial ? nativeReason(reply) : undefined,\n\t\tnative_code: safeCode(data.code) ?? safeCode(record(data.refusal).code) ?? safeCode(record(data.error).code),\n\t\tstatus:\n\t\t\ttypeof data.status === \"string\" &&\n\t\t\t[\"ok\", \"success\", \"completed\", \"partial\", \"refused\", \"failed\"].includes(data.status)\n\t\t\t\t? data.status\n\t\t\t\t: undefined,\n\t\teffect:\n\t\t\ttypeof data.effect === \"string\" && [\"confirmed\", \"partial\", \"unverifiable\", \"refused\"].includes(data.effect)\n\t\t\t\t? data.effect\n\t\t\t\t: undefined,\n\t\tverified: typeof data.verified === \"boolean\" ? data.verified : undefined,\n\t\tsuccess: typeof data.success === \"boolean\" ? data.success : undefined,\n\t\tactivated: typeof data.activated === \"boolean\" ? data.activated : undefined,\n\t\tescalation: record(data.escalation).recommended === \"foreground\" ? \"foreground\" : undefined,\n\t\tinput:\n\t\t\tpartial && typingRecovery(data, text).delivered_chars !== undefined\n\t\t\t\t? \"partial\"\n\t\t\t\t: refused || partial\n\t\t\t\t\t? \"uncertain\"\n\t\t\t\t\t: \"dispatched\",\n\t\tapplicationEffect: \"unverified\",\n\t\t...typingRecovery(data, text),\n\t};\n}\n\nfunction abortable<T>(pending: Promise<T>, signal: AbortSignal): Promise<T> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst abort = () => {\n\t\t\tsignal.removeEventListener(\"abort\", abort);\n\t\t\treject(signal.reason ?? new Error(\"Computer operation cancelled.\"));\n\t\t};\n\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\tpending.then(\n\t\t\t(value) => {\n\t\t\t\tsignal.removeEventListener(\"abort\", abort);\n\t\t\t\tresolve(value);\n\t\t\t},\n\t\t\t(error) => {\n\t\t\t\tsignal.removeEventListener(\"abort\", abort);\n\t\t\t\treject(error);\n\t\t\t},\n\t\t);\n\t\tif (signal.aborted) abort();\n\t});\n}\n\nconst freshActionGuidance =\n\t\"Get a fresh capture of the exact target before any next action, including window focus. Copy its token exactly. No input was sent by this call; earlier calls may have had an effect.\";\n\nclass CaptureError extends Error {\n\treadonly code: string;\n\tconstructor(code: string) {\n\t\tsuper(code);\n\t\tthis.code = code;\n\t}\n}\n\nclass ObservationError extends Error {\n\treadonly code: string;\n\tconstructor(code: string, message: string) {\n\t\tsuper(`Stale observation. ${message}`);\n\t\tthis.code = code;\n\t}\n}\n\ntype Target = { desktop: true } | { pid: number; window_id: number; desktop?: false };\ntype PreparedImage = Awaited<ReturnType<typeof prepareComputerImage>>;\ntype Observation = PreparedImage & {\n\ttoken: string;\n\ttarget: Target;\n\ttime: number;\n\tfingerprint: string;\n\tgeometry: string;\n};\ntype WorkflowState = \"ready\" | \"stopped\" | \"cleanup_unconfirmed\";\ntype Result = {\n\tcontent: (ImageContent | TextContent)[];\n\tdetails: { observation?: string; computer: { failed: boolean; workflow: WorkflowState } };\n\tisError: boolean;\n};\n\nfunction targetFrom(input: Record<string, unknown>): Target {\n\tif (input.desktop === true) {\n\t\tif (input.pid !== undefined || input.window_id !== undefined)\n\t\t\tthrow new Error(\"Desktop target cannot include pid/window_id.\");\n\t\treturn { desktop: true };\n\t}\n\tif (\n\t\ttypeof input.pid !== \"number\" ||\n\t\t!Number.isInteger(input.pid) ||\n\t\tinput.pid < 1 ||\n\t\ttypeof input.window_id !== \"number\" ||\n\t\t!Number.isInteger(input.window_id) ||\n\t\tinput.window_id < 1\n\t)\n\t\tthrow new Error(\"Window target requires positive integer pid and window_id.\");\n\treturn { pid: input.pid, window_id: input.window_id };\n}\n\nfunction sameTarget(a: Target, b: Target): boolean {\n\treturn a.desktop === true\n\t\t? b.desktop === true\n\t\t: b.desktop !== true && a.pid === b.pid && a.window_id === b.window_id;\n}\n\nexport class ComputerWorkflow {\n\tprivate observation?: Observation;\n\tprivate lastCapture?: { fingerprint: string; target: Target; repeats: number };\n\tprivate lastAction?: { signature: string; fingerprint: string; unchanged: boolean };\n\tprivate readonly abort = new AbortController();\n\tprivate closing?: Promise<void>;\n\tprivate readonly driver: ComputerDriver;\n\tprivate readonly lease: DesktopLease;\n\tconstructor(driver: ComputerDriver, lease = new DesktopLease()) {\n\t\tthis.driver = driver;\n\t\tthis.lease = lease;\n\t\tthis.driver.setProcessObserver?.((pid) => this.lease.trackProcess(pid));\n\t}\n\n\tprivate fresh(input: Record<string, unknown>, previous?: Observation): Observation {\n\t\tif (!previous) throw new ObservationError(\"observation_unavailable\", \"No active observation is available.\");\n\t\tif (previous.token !== input.observation)\n\t\t\tthrow new ObservationError(\"observation_mismatch\", \"Token does not match the active observation.\");\n\t\tif (!sameTarget(previous.target, targetFrom(input)))\n\t\t\tthrow new ObservationError(\"observation_target_mismatch\", \"Token belongs to a different target.\");\n\t\tif (Date.now() - previous.time > 30000)\n\t\t\tthrow new ObservationError(\"observation_expired\", \"The active observation is older than 30 seconds.\");\n\t\treturn previous;\n\t}\n\n\tprivate async capture(\n\t\ttarget: Target,\n\t\tsignal: AbortSignal,\n\t\tprevious?: Observation,\n\t\tcrop?: ImageRegion,\n\t): Promise<Observation> {\n\t\tconst time = Date.now();\n\t\tconst reply = await abortable(\n\t\t\tthis.driver.call(\n\t\t\t\ttarget.desktop ? \"get_desktop_state\" : \"get_window_state\",\n\t\t\t\ttarget.desktop\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tpid: target.pid,\n\t\t\t\t\t\t\twindow_id: target.window_id,\n\t\t\t\t\t\t\tinclude_accessibility_tree: false,\n\t\t\t\t\t\t\tinclude_screenshot: true,\n\t\t\t\t\t\t\tmax_dimension: 2560,\n\t\t\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t),\n\t\t\tsignal,\n\t\t);\n\t\tif (driverRefused(reply)) throw new CaptureError(nativeReason(reply));\n\t\tconst data = driverData(reply);\n\t\tconst images = Array.isArray(reply.content) ? reply.content.filter((item) => item.type === \"image\") : [];\n\t\tif (images.length !== 1 || typeof images[0].data !== \"string\" || typeof images[0].mimeType !== \"string\")\n\t\t\tthrow new CaptureError(\"screenshot_unavailable\");\n\t\tconst image: ImageContent = { type: \"image\", data: images[0].data, mimeType: images[0].mimeType };\n\t\tlet dimensions: { width: number; height: number };\n\t\ttry {\n\t\t\tdimensions = screenshotDimensions(image);\n\t\t} catch {\n\t\t\tthrow new CaptureError(\"image_decode_failed\");\n\t\t}\n\t\tif (\n\t\t\tdata.screenshot_frame_valid === false ||\n\t\t\tdata.screenshot_error != null ||\n\t\t\tdimensions.width !== data.screenshot_width ||\n\t\t\tdimensions.height !== data.screenshot_height\n\t\t)\n\t\t\tthrow new CaptureError(\"image_frame_invalid\");\n\t\tconst geometry = JSON.stringify(select(record(data.window_bounds), [\"x\", \"y\", \"width\", \"height\"]));\n\t\tif (\n\t\t\tcrop &&\n\t\t\tprevious &&\n\t\t\t(previous.sourceWidth !== dimensions.width ||\n\t\t\t\tprevious.sourceHeight !== dimensions.height ||\n\t\t\t\tprevious.geometry !== geometry)\n\t\t)\n\t\t\tthrow new CaptureError(\"target_geometry_changed\");\n\t\tlet prepared: PreparedImage;\n\t\ttry {\n\t\t\tprepared = await abortable(prepareComputerImage(image, crop), signal);\n\t\t} catch (error) {\n\t\t\tif (signal.aborted) throw error;\n\t\t\tthrow new CaptureError(\"image_decode_failed\");\n\t\t}\n\t\tsignal.throwIfAborted();\n\t\treturn { ...prepared, token: randomUUID(), target, time, fingerprint: prepared.fingerprint, geometry };\n\t}\n\n\tprivate imageResult(observation: Observation, extra: Record<string, unknown> = {}): Result {\n\t\tthis.observation = observation;\n\t\tconst { width, height, region, sourceWidth, sourceHeight, scaleX, scaleY, target, token } = observation;\n\t\tconst failed = extra.failed === true;\n\t\treturn {\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: JSON.stringify({\n\t\t\t\t\t\t...extra,\n\t\t\t\t\t\tobservation: token,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tcaptured_at: observation.time,\n\t\t\t\t\t\texpires_at: observation.time + 30000,\n\t\t\t\t\t\timage: { width, height },\n\t\t\t\t\t\tmapping: { sourceWidth, sourceHeight, ...region, scaleX, scaleY },\n\t\t\t\t\t\tcoordinates: \"Use returned-image pixels; mapping is applied automatically.\",\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\tobservation.image,\n\t\t\t],\n\t\t\tdetails: { observation: token, computer: { failed, workflow: \"ready\" } },\n\t\t\tisError: failed,\n\t\t};\n\t}\n\n\tprivate crop(input: Record<string, unknown>, previous: Observation): ImageRegion {\n\t\tconst crop = record(input.crop);\n\t\tconst { x, y, width, height } = crop;\n\t\tif (\n\t\t\ttypeof x !== \"number\" ||\n\t\t\ttypeof y !== \"number\" ||\n\t\t\ttypeof width !== \"number\" ||\n\t\t\ttypeof height !== \"number\" ||\n\t\t\t![x, y, width, height].every(Number.isFinite) ||\n\t\t\tx < 0 ||\n\t\t\ty < 0 ||\n\t\t\twidth <= 0 ||\n\t\t\theight <= 0 ||\n\t\t\tx + width > previous.width ||\n\t\t\ty + height > previous.height ||\n\t\t\tObject.keys(crop).some((key) => ![\"x\", \"y\", \"width\", \"height\"].includes(key))\n\t\t)\n\t\t\tthrow new Error(\"Crop must fit the latest returned image.\");\n\t\tconst left = Math.floor(previous.region.x + x * previous.scaleX);\n\t\tconst top = Math.floor(previous.region.y + y * previous.scaleY);\n\t\tconst right = Math.min(previous.sourceWidth, Math.ceil(previous.region.x + (x + width) * previous.scaleX));\n\t\tconst bottom = Math.min(previous.sourceHeight, Math.ceil(previous.region.y + (y + height) * previous.scaleY));\n\t\treturn { x: left, y: top, width: right - left, height: bottom - top };\n\t}\n\n\tprivate action(name: string, input: Record<string, unknown>, previous: Observation) {\n\t\tconst args: Record<string, unknown> = previous.target.desktop\n\t\t\t? { scope: \"desktop\" }\n\t\t\t: { pid: previous.target.pid, window_id: previous.target.window_id };\n\t\tif (previous.target.desktop && input.foreground !== true)\n\t\t\tthrow new Error(\"Desktop input requires foreground=true.\");\n\t\tif (name !== \"computer_window\" && name !== \"computer_hover\")\n\t\t\targs.delivery_mode = input.foreground === true ? \"foreground\" : \"background\";\n\t\tfor (const key of [\"x\", \"y\", \"from_x\", \"from_y\", \"to_x\", \"to_y\"]) {\n\t\t\tif (name === \"computer_window\") break;\n\t\t\tconst value = input[key];\n\t\t\tif (value === undefined) continue;\n\t\t\tconst horizontal = key.endsWith(\"x\");\n\t\t\tif (\n\t\t\t\ttypeof value !== \"number\" ||\n\t\t\t\t!Number.isFinite(value) ||\n\t\t\t\tvalue < 0 ||\n\t\t\t\tvalue >= (horizontal ? previous.width : previous.height)\n\t\t\t)\n\t\t\t\tthrow new Error(\"Coordinate outside the observed image.\");\n\t\t\targs[key] =\n\t\t\t\t(horizontal ? previous.region.x : previous.region.y) +\n\t\t\t\tvalue * (horizontal ? previous.scaleX : previous.scaleY);\n\t\t}\n\t\tif ((input.x === undefined) !== (input.y === undefined)) throw new Error(\"Provide a complete x/y pair.\");\n\t\tif (previous.target.desktop && [\"computer_key\", \"computer_text\"].includes(name) && input.x !== undefined)\n\t\t\tthrow new Error(\n\t\t\t\t\"Desktop keyboard input uses the observed focused field. Change focus with a separate grounded click.\",\n\t\t\t);\n\t\tlet operation: string;\n\t\tswitch (name) {\n\t\t\tcase \"computer_hover\":\n\t\t\t\tif (\n\t\t\t\t\tprocess.platform !== \"win32\" ||\n\t\t\t\t\t!previous.target.desktop ||\n\t\t\t\t\tinput.desktop !== true ||\n\t\t\t\t\tinput.foreground !== true ||\n\t\t\t\t\tinput.x === undefined ||\n\t\t\t\t\tinput.y === undefined\n\t\t\t\t)\n\t\t\t\t\tthrow new Error(\"Hover requires a Windows foreground desktop image and x/y coordinates.\");\n\t\t\t\toperation = \"move_cursor\";\n\t\t\t\tbreak;\n\t\t\tcase \"computer_click\":\n\t\t\tcase \"computer_scroll\":\n\t\t\t\tif (input.x === undefined || input.y === undefined)\n\t\t\t\t\tthrow new Error(\"This action requires x/y image coordinates.\");\n\t\t\t\toperation = name === \"computer_click\" ? \"click\" : \"scroll\";\n\t\t\t\tfor (const key of name === \"computer_click\"\n\t\t\t\t\t? [\"button\", \"count\", \"modifier\"]\n\t\t\t\t\t: [\"direction\", \"amount\", \"by\"])\n\t\t\t\t\tif (input[key] !== undefined) args[key] = input[key];\n\t\t\t\tbreak;\n\t\t\tcase \"computer_drag\":\n\t\t\t\tif (![\"from_x\", \"from_y\", \"to_x\", \"to_y\"].every((key) => typeof args[key] === \"number\"))\n\t\t\t\t\tthrow new Error(\"Drag requires both endpoints.\");\n\t\t\t\toperation = \"drag\";\n\t\t\t\tbreak;\n\t\t\tcase \"computer_key\": {\n\t\t\t\tif ((input.key === undefined) === (input.keys === undefined)) throw new Error(\"Provide key OR keys.\");\n\t\t\t\tconst keys: readonly unknown[] | undefined = Array.isArray(input.keys) ? input.keys : undefined;\n\t\t\t\tconst last = keys?.at(-1);\n\t\t\t\tconst modifiers = new Set([\"ctrl\", \"control\", \"shift\", \"alt\", \"win\", \"windows\", \"cmd\", \"command\"]);\n\t\t\t\tconst foregroundShortcut =\n\t\t\t\t\tprocess.platform === \"win32\" &&\n\t\t\t\t\tinput.foreground === true &&\n\t\t\t\t\tinput.x === undefined &&\n\t\t\t\t\tkeys !== undefined &&\n\t\t\t\t\tkeys.length >= 2 &&\n\t\t\t\t\tkeys.slice(0, -1).every((key) => typeof key === \"string\" && modifiers.has(key.toLowerCase())) &&\n\t\t\t\t\ttypeof last === \"string\" &&\n\t\t\t\t\t!modifiers.has(last.toLowerCase());\n\t\t\t\t// Pinned Windows hotkey routes XAML through UIA before honoring foreground; press_key honors SendInput.\n\t\t\t\toperation = input.keys === undefined || foregroundShortcut ? \"press_key\" : \"hotkey\";\n\t\t\t\tif (foregroundShortcut) {\n\t\t\t\t\targs.key = last;\n\t\t\t\t\targs.modifiers = keys.slice(0, -1);\n\t\t\t\t} else args[input.keys === undefined ? \"key\" : \"keys\"] = input.keys ?? input.key;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"computer_text\":\n\t\t\t\toperation = \"type_text\";\n\t\t\t\targs.text = input.text;\n\t\t\t\tbreak;\n\t\t\tcase \"computer_window\":\n\t\t\t\tif (previous.target.desktop) throw new Error(\"Window management requires an exact window target.\");\n\t\t\t\tif (input.action === \"frame\") {\n\t\t\t\t\tfor (const key of [\"x\", \"y\", \"width\", \"height\"]) {\n\t\t\t\t\t\tconst value = input[key];\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof value !== \"number\" ||\n\t\t\t\t\t\t\t!Number.isFinite(value) ||\n\t\t\t\t\t\t\t([\"width\", \"height\"].includes(key) && value <= 0)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\tthrow new Error(\"Frame requires valid x/y/width/height.\");\n\t\t\t\t\t\targs[key] = value;\n\t\t\t\t\t}\n\t\t\t\t\toperation = \"set_window_frame\";\n\t\t\t\t} else if (\n\t\t\t\t\tinput.action === \"focus\" &&\n\t\t\t\t\t[\"x\", \"y\", \"width\", \"height\"].every((key) => input[key] === undefined)\n\t\t\t\t)\n\t\t\t\t\toperation = \"bring_to_front\";\n\t\t\t\telse\n\t\t\t\t\tthrow new Error(\"Use frame or focus. Minimize/restore uses a fresh image click on the visible control.\");\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unknown computer action.\");\n\t\t}\n\t\treturn { operation, args };\n\t}\n\n\tasync execute(name: string, input: Record<string, unknown>, signal?: AbortSignal): Promise<Result> {\n\t\tconst combined = AbortSignal.any([\n\t\t\tthis.abort.signal,\n\t\t\tthis.lease.signal,\n\t\t\tAbortSignal.timeout(90000),\n\t\t\t...(signal ? [signal] : []),\n\t\t]);\n\t\tlet inputDispatched = false;\n\t\tlet failureCode = \"workflow_unavailable\";\n\t\tlet phase: FailurePhase = \"validation\";\n\t\tconst currentPhase = (): FailurePhase => phase;\n\t\tlet operationName = name;\n\t\tlet actionTarget: Target | undefined;\n\t\tlet actionOutcome: ReturnType<typeof outcome> | undefined;\n\t\ttry {\n\t\t\tconst result = await this.lease.run(async (): Promise<Result> => {\n\t\t\t\tfailureCode = \"invalid_arguments\";\n\t\t\t\tconst previous = this.observation;\n\t\t\t\tif (name !== \"computer_apps\") this.observation = undefined;\n\t\t\t\tif (!Object.hasOwn(computerSchemas, name)) throw new Error(\"Unknown computer operation.\");\n\t\t\t\tconst schema = computerSchemas[name as keyof typeof computerSchemas];\n\t\t\t\tif (Object.keys(input).some((key) => !Object.hasOwn(schema.properties, key)))\n\t\t\t\t\tthrow new Error(\"Unsupported computer argument. Use image coordinates only.\");\n\t\t\t\tif (name === \"computer_apps\" || name === \"computer_launch\") {\n\t\t\t\t\tconst operation =\n\t\t\t\t\t\tname === \"computer_launch\" ? \"launch_app\" : input.pid === undefined ? \"list_apps\" : \"list_windows\";\n\t\t\t\t\toperationName = operation;\n\t\t\t\t\tif (\n\t\t\t\t\t\tinput.include_windows !== undefined &&\n\t\t\t\t\t\t(name !== \"computer_apps\" ||\n\t\t\t\t\t\t\ttypeof input.include_windows !== \"boolean\" ||\n\t\t\t\t\t\t\t(input.include_windows &&\n\t\t\t\t\t\t\t\t(input.pid !== undefined || typeof input.query !== \"string\" || !input.query.trim())))\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new Error(\"include_windows requires a named app query without pid.\");\n\t\t\t\t\tif (\n\t\t\t\t\t\tinput.pid !== undefined &&\n\t\t\t\t\t\t(typeof input.pid !== \"number\" || !Number.isSafeInteger(input.pid) || input.pid < 1)\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new Error(\"Window lookup requires a positive pid.\");\n\t\t\t\t\tif (\n\t\t\t\t\t\tname === \"computer_launch\" &&\n\t\t\t\t\t\t(typeof input.name !== \"string\" || !input.name.trim() || input.name.length > 500)\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new Error(\"Launch requires a nonblank name.\");\n\t\t\t\t\tif (\n\t\t\t\t\t\tinput.query !== undefined &&\n\t\t\t\t\t\t(typeof input.query !== \"string\" || !input.query.trim() || Array.from(input.query).length > 240)\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new Error(\"Discovery query must be a nonblank string of at most 240 characters.\");\n\t\t\t\t\tconst query = typeof input.query === \"string\" ? input.query.trim() : undefined;\n\t\t\t\t\tconst needle = query?.toLowerCase();\n\t\t\t\t\tconst offset = input.offset ?? 0;\n\t\t\t\t\tif (typeof offset !== \"number\" || !Number.isSafeInteger(offset) || offset < 0)\n\t\t\t\t\t\tthrow new Error(\"Discovery offset must be a nonnegative safe integer.\");\n\t\t\t\t\tconst args =\n\t\t\t\t\t\tname === \"computer_launch\" ? { name: input.name } : input.pid === undefined ? {} : { pid: input.pid };\n\t\t\t\t\tcombined.throwIfAborted();\n\t\t\t\t\tinputDispatched = name === \"computer_launch\";\n\t\t\t\t\tphase = \"native_request\";\n\t\t\t\t\tfailureCode = \"discovery_failed\";\n\t\t\t\t\tconst reply = await abortable(this.driver.call(operation, args, combined), combined);\n\t\t\t\t\tconst data = driverData(reply);\n\t\t\t\t\tconst discovered = data.apps ?? data.windows;\n\t\t\t\t\tconst rows =\n\t\t\t\t\t\tArray.isArray(discovered) && needle\n\t\t\t\t\t\t\t? discovered.filter((row) => {\n\t\t\t\t\t\t\t\t\tconst item = record(row);\n\t\t\t\t\t\t\t\t\treturn [item.name, item.app_name, item.title].some(\n\t\t\t\t\t\t\t\t\t\t(value) => typeof value === \"string\" && value.toLowerCase().includes(needle),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t: discovered;\n\t\t\t\t\tconst metadata = Array.isArray(rows)\n\t\t\t\t\t\t? rows.slice(offset, offset + 50).map((row) => {\n\t\t\t\t\t\t\t\tconst item = record(row);\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...select(item, [\n\t\t\t\t\t\t\t\t\t\t\"pid\",\n\t\t\t\t\t\t\t\t\t\t\"window_id\",\n\t\t\t\t\t\t\t\t\t\t\"name\",\n\t\t\t\t\t\t\t\t\t\t\"app_name\",\n\t\t\t\t\t\t\t\t\t\t\"title\",\n\t\t\t\t\t\t\t\t\t\t\"active\",\n\t\t\t\t\t\t\t\t\t\t\"running\",\n\t\t\t\t\t\t\t\t\t\t\"is_on_screen\",\n\t\t\t\t\t\t\t\t\t\t\"minimized\",\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\tbounds: item.bounds ? select(record(item.bounds), [\"x\", \"y\", \"width\", \"height\"]) : undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst remaining = Array.isArray(rows) ? Math.max(0, rows.length - offset - (metadata?.length ?? 0)) : 0;\n\t\t\t\t\tconst failed = driverRefused(reply);\n\t\t\t\t\tconst pid =\n\t\t\t\t\t\ttypeof data.pid === \"number\" && Number.isSafeInteger(data.pid) && data.pid > 0 ? data.pid : undefined;\n\t\t\t\t\tconst launchWindows = Array.isArray(data.windows)\n\t\t\t\t\t\t? data.windows.slice(0, 50).map((row) => {\n\t\t\t\t\t\t\t\tconst item = record(row);\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...select(item, [\"window_id\", \"title\", \"is_on_screen\", \"minimized\"]),\n\t\t\t\t\t\t\t\t\tbounds: item.bounds ? select(record(item.bounds), [\"x\", \"y\", \"width\", \"height\"]) : undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: [];\n\t\t\t\t\tconst returnedId =\n\t\t\t\t\t\tdata.window_id ??\n\t\t\t\t\t\t(Array.isArray(data.windows) && data.windows.length === 1\n\t\t\t\t\t\t\t? record(data.windows[0]).window_id\n\t\t\t\t\t\t\t: undefined);\n\t\t\t\t\tconst windowId =\n\t\t\t\t\t\ttypeof returnedId === \"number\" && Number.isSafeInteger(returnedId) && returnedId > 0\n\t\t\t\t\t\t\t? returnedId\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tlet windowsByPid:\n\t\t\t\t\t\t| { pid: number; windows?: typeof metadata; error?: string; omitted?: number; next_offset?: number }[]\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tlet guidance = remaining\n\t\t\t\t\t\t? \"Pass next_offset as offset with the same pid and query. Lists refresh per call.\"\n\t\t\t\t\t\t: input.pid !== undefined\n\t\t\t\t\t\t\t? \"Use computer_observe({pid,window_id}) for an exact returned window.\"\n\t\t\t\t\t\t\t: \"App query filters app identities, not every window title. Use computer_apps({pid}) to find windows for a running app.\";\n\t\t\t\t\tif (name === \"computer_apps\" && input.include_windows === true && !failed) {\n\t\t\t\t\t\tconst pids = [\n\t\t\t\t\t\t\t...new Set(\n\t\t\t\t\t\t\t\t(Array.isArray(rows) ? rows : [])\n\t\t\t\t\t\t\t\t\t.map((row) => record(row).pid)\n\t\t\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t\t\t(value): value is number =>\n\t\t\t\t\t\t\t\t\t\t\ttypeof value === \"number\" && Number.isSafeInteger(value) && value > 0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tif (pids.length > 5)\n\t\t\t\t\t\t\tguidance =\n\t\t\t\t\t\t\t\t\"More than five running processes matched. Narrow the query or choose one positive pid with computer_apps({pid}); no arbitrary process was selected.\";\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\twindowsByPid = [];\n\t\t\t\t\t\t\tlet budget = 50;\n\t\t\t\t\t\t\tfor (const matchingPid of pids) {\n\t\t\t\t\t\t\t\tcombined.throwIfAborted();\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst windowsReply = await abortable(\n\t\t\t\t\t\t\t\t\t\tthis.driver.call(\"list_windows\", { pid: matchingPid }, combined),\n\t\t\t\t\t\t\t\t\t\tcombined,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tconst windows = driverData(windowsReply).windows;\n\t\t\t\t\t\t\t\t\tif (driverRefused(windowsReply) || !Array.isArray(windows)) {\n\t\t\t\t\t\t\t\t\t\twindowsByPid.push({\n\t\t\t\t\t\t\t\t\t\t\tpid: matchingPid,\n\t\t\t\t\t\t\t\t\t\t\terror: driverRefused(windowsReply)\n\t\t\t\t\t\t\t\t\t\t\t\t? nativeReason(windowsReply)\n\t\t\t\t\t\t\t\t\t\t\t\t: \"windows_unavailable\",\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst subset = windows.slice(0, budget).map((row) => {\n\t\t\t\t\t\t\t\t\t\tconst item = record(row);\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t...select(item, [\n\t\t\t\t\t\t\t\t\t\t\t\t\"pid\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"window_id\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"app_name\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"title\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"active\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"running\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"is_on_screen\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"minimized\",\n\t\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\t\tbounds: item.bounds\n\t\t\t\t\t\t\t\t\t\t\t\t? select(record(item.bounds), [\"x\", \"y\", \"width\", \"height\"])\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tconst omitted = windows.length - subset.length;\n\t\t\t\t\t\t\t\t\twindowsByPid.push({\n\t\t\t\t\t\t\t\t\t\tpid: matchingPid,\n\t\t\t\t\t\t\t\t\t\twindows: subset,\n\t\t\t\t\t\t\t\t\t\tomitted: omitted || undefined,\n\t\t\t\t\t\t\t\t\t\tnext_offset: omitted ? subset.length : undefined,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tbudget -= subset.length;\n\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\tif (combined.aborted) throw error;\n\t\t\t\t\t\t\t\t\tif (error instanceof DriverCallError) throw error;\n\t\t\t\t\t\t\t\t\twindowsByPid.push({ pid: matchingPid, error: \"window_lookup_failed\" });\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tguidance =\n\t\t\t\t\t\t\t\t\"Use computer_observe({pid,window_id}) for a returned window. For omitted windows use computer_apps({pid,offset:next_offset}). Per-PID failures need a targeted lookup.\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (name === \"computer_launch\")\n\t\t\t\t\t\tguidance =\n\t\t\t\t\t\t\tpid && windowId && !failed\n\t\t\t\t\t\t\t\t? `Use computer_observe({pid:${pid},window_id:${windowId}}) before input.`\n\t\t\t\t\t\t\t\t: `Launch ${failed ? \"may have completed despite an unsuccessful reply\" : \"returned no exact window\"}. Use computer_apps({${pid ? `pid:${pid}` : `query:${JSON.stringify(input.name)}`}}) before another launch or input.`;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: JSON.stringify({\n\t\t\t\t\t\t\t\t\tkind: name === \"computer_launch\" ? \"launch\" : input.pid === undefined ? \"apps\" : \"windows\",\n\t\t\t\t\t\t\t\t\toperation,\n\t\t\t\t\t\t\t\t\t...(name === \"computer_launch\"\n\t\t\t\t\t\t\t\t\t\t? outcome(reply)\n\t\t\t\t\t\t\t\t\t\t: { phase: \"native_result\", code: failed ? nativeReason(reply) : undefined }),\n\t\t\t\t\t\t\t\t\tinput: name === \"computer_launch\" ? \"not_applicable\" : undefined,\n\t\t\t\t\t\t\t\t\tlaunch:\n\t\t\t\t\t\t\t\t\t\tname === \"computer_launch\"\n\t\t\t\t\t\t\t\t\t\t\t? plainLaunchReason(reply) === \"app_lookup_unavailable\"\n\t\t\t\t\t\t\t\t\t\t\t\t? \"not_started\"\n\t\t\t\t\t\t\t\t\t\t\t\t: failed\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"completion_uncertain\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"acknowledged\"\n\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t...select(data, [\"pid\", \"window_id\", \"name\", \"title\"]),\n\t\t\t\t\t\t\t\t\twindow_id: name === \"computer_launch\" ? windowId : select(data, [\"window_id\"]).window_id,\n\t\t\t\t\t\t\t\t\twindows: name === \"computer_launch\" ? launchWindows : undefined,\n\t\t\t\t\t\t\t\t\titems: name === \"computer_launch\" ? undefined : metadata,\n\t\t\t\t\t\t\t\t\twindows_by_pid: windowsByPid,\n\t\t\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\t\t\toffset,\n\t\t\t\t\t\t\t\t\ttotal: Array.isArray(rows) ? rows.length : undefined,\n\t\t\t\t\t\t\t\t\tomitted: remaining || undefined,\n\t\t\t\t\t\t\t\t\tnext_offset: remaining ? offset + 50 : undefined,\n\t\t\t\t\t\t\t\t\tguidance,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdetails: { computer: { failed, workflow: \"ready\" } },\n\t\t\t\t\t\tisError: failed,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst target = targetFrom(input);\n\t\t\t\tactionTarget = target;\n\t\t\t\tif (name === \"computer_observe\") {\n\t\t\t\t\tphase = \"observation_capture\";\n\t\t\t\t\tconst crop = input.crop === undefined ? undefined : this.crop(input, this.fresh(input, previous));\n\t\t\t\t\tfailureCode = \"capture_failed\";\n\t\t\t\t\tconst captured = await this.capture(target, combined, previous, crop);\n\t\t\t\t\tconst unchanged =\n\t\t\t\t\t\tthis.lastCapture?.fingerprint === captured.fingerprint && sameTarget(this.lastCapture.target, target);\n\t\t\t\t\tconst repeats = crop ? 0 : unchanged ? (this.lastCapture?.repeats ?? 0) + 1 : 1;\n\t\t\t\t\tthis.lastCapture = { fingerprint: captured.fingerprint, target, repeats };\n\t\t\t\t\tif (repeats >= 3)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\ttext: JSON.stringify({\n\t\t\t\t\t\t\t\t\t\tphase: \"observation_capture\",\n\t\t\t\t\t\t\t\t\t\tcode: \"unchanged_polling_limit\",\n\t\t\t\t\t\t\t\t\t\tguidance:\n\t\t\t\t\t\t\t\t\t\t\t\"Three captures are unchanged. Stop polling and reconsider the target or approach. No input token issued.\",\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: { computer: { failed: true, workflow: \"stopped\" } },\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t\treturn this.imageResult(captured, { unchanged });\n\t\t\t\t}\n\t\t\t\tconst grounded = this.fresh(input, previous);\n\t\t\t\tconst { operation, args } = this.action(name, input, grounded);\n\t\t\t\tconst { button = \"left\", count = 1, modifier = [], ...clickArgs } = args;\n\t\t\t\tconst signature = JSON.stringify({\n\t\t\t\t\toperation,\n\t\t\t\t\targs:\n\t\t\t\t\t\toperation === \"click\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...clickArgs,\n\t\t\t\t\t\t\t\t\tbutton,\n\t\t\t\t\t\t\t\t\tcount,\n\t\t\t\t\t\t\t\t\tmodifier: Array.isArray(modifier) ? [...new Set(modifier)].sort() : modifier,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: args,\n\t\t\t\t});\n\t\t\t\tif (\n\t\t\t\t\tthis.lastAction?.unchanged &&\n\t\t\t\t\tthis.lastAction.signature === signature &&\n\t\t\t\t\tthis.lastAction.fingerprint === grounded.fingerprint\n\t\t\t\t)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"The identical action had no visible change. Choose a different grounded action; never retry blindly.\",\n\t\t\t\t\t);\n\t\t\t\tcombined.throwIfAborted();\n\t\t\t\tinputDispatched = true;\n\t\t\t\tphase = \"native_request\";\n\t\t\t\toperationName = operation;\n\t\t\t\tconst reply = await abortable(this.driver.call(operation, args, combined), combined);\n\t\t\t\tcombined.throwIfAborted();\n\t\t\t\tactionOutcome = outcome(reply, name === \"computer_text\" ? input.text : undefined);\n\t\t\t\tconst recoveryGuidance =\n\t\t\t\t\tactionOutcome.retry_from_character !== undefined\n\t\t\t\t\t\t? \"Verify the field in a fresh image before considering any remaining suffix. retry_from_character is a zero-based Unicode code-point offset, not UTF-16. retryable is driver advice, not authorization to retry.\"\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst failed =\n\t\t\t\t\tdriverRefused(reply) || driverData(reply).effect === \"partial\" || driverData(reply).status === \"partial\";\n\t\t\t\tconst backgroundUnavailable = actionOutcome.code === \"background_unavailable\";\n\t\t\t\tif (name === \"computer_hover\") await delay(700, undefined, { signal: combined });\n\t\t\t\tphase = \"post_action_capture\";\n\t\t\t\ttry {\n\t\t\t\t\tconst after = await this.capture(target, combined);\n\t\t\t\t\tconst unchanged = after.fingerprint === grounded.fingerprint;\n\t\t\t\t\tthis.lastAction = { signature, fingerprint: after.fingerprint, unchanged };\n\t\t\t\t\tthis.lastCapture = {\n\t\t\t\t\t\tfingerprint: after.fingerprint,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\trepeats:\n\t\t\t\t\t\t\tfailed &&\n\t\t\t\t\t\t\tthis.lastCapture?.fingerprint === after.fingerprint &&\n\t\t\t\t\t\t\tsameTarget(this.lastCapture.target, target)\n\t\t\t\t\t\t\t\t? this.lastCapture.repeats\n\t\t\t\t\t\t\t\t: 0,\n\t\t\t\t\t};\n\t\t\t\t\treturn this.imageResult(after, {\n\t\t\t\t\t\tkind: \"action\",\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t...actionOutcome,\n\t\t\t\t\t\tfailed,\n\t\t\t\t\t\tunchanged,\n\t\t\t\t\t\tguidance: [\n\t\t\t\t\t\t\t\"Inspect the post-action image before another action. No visible change does not prove failure; never repeat blindly.\",\n\t\t\t\t\t\t\tbackgroundUnavailable\n\t\t\t\t\t\t\t\t? \"After this fresh capture, foreground input may be considered if permitted, not another background shortcut.\"\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\trecoveryGuidance,\n\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t.join(\" \"),\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcombined.throwIfAborted();\n\t\t\t\t\tif (!(error instanceof CaptureError)) throw error;\n\t\t\t\t\tthis.lastAction = { signature, fingerprint: grounded.fingerprint, unchanged: true };\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: JSON.stringify({\n\t\t\t\t\t\t\t\t\tkind: \"action\",\n\t\t\t\t\t\t\t\t\toperation,\n\t\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\t\t...actionOutcome,\n\t\t\t\t\t\t\t\t\tphase: \"post_action_capture\",\n\t\t\t\t\t\t\t\t\tcapture_error: error.code,\n\t\t\t\t\t\t\t\t\tobservation: \"unavailable\",\n\t\t\t\t\t\t\t\t\tguidance: `Input may have taken effect. ${\n\t\t\t\t\t\t\t\t\t\t[\"target_not_found\", \"window_target_not_found\", \"window_target_mismatch\"].includes(\n\t\t\t\t\t\t\t\t\t\t\terror.code,\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t? \"Use computer_apps({pid}) or observe the desktop to find the target.\"\n\t\t\t\t\t\t\t\t\t\t\t: \"Get a fresh capture of the exact target\"\n\t\t\t\t\t\t\t\t\t} before another action; never repeat blindly. ${recoveryGuidance ?? \"\"}`,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdetails: { computer: { failed: true, workflow: \"ready\" } },\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}, combined);\n\t\t\tif (result.details.computer.workflow !== \"ready\") return this.finish(result);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (error instanceof DriverCallError && !(currentPhase() === \"post_action_capture\" && actionOutcome)) {\n\t\t\t\tphase = error.phase;\n\t\t\t\tinputDispatched = error.dispatched;\n\t\t\t}\n\t\t\tconst failurePhase = currentPhase();\n\t\t\tconst fatal =\n\t\t\t\tcombined.aborted ||\n\t\t\t\tthis.abort.signal.aborted ||\n\t\t\t\tthis.lease.signal.aborted ||\n\t\t\t\terror instanceof DriverCallError ||\n\t\t\t\t!(\n\t\t\t\t\terror instanceof ObservationError ||\n\t\t\t\t\terror instanceof CaptureError ||\n\t\t\t\t\tfailurePhase === \"validation\" ||\n\t\t\t\t\t(failurePhase === \"observation_capture\" && !inputDispatched)\n\t\t\t\t);\n\t\t\tconst code =\n\t\t\t\terror instanceof ObservationError || error instanceof CaptureError\n\t\t\t\t\t? error.code\n\t\t\t\t\t: inputDispatched && failurePhase === \"post_action_capture\"\n\t\t\t\t\t\t? \"capture_transport_failed\"\n\t\t\t\t\t\t: error instanceof DriverCallError\n\t\t\t\t\t\t\t? error.dispatched\n\t\t\t\t\t\t\t\t? \"input_dispatch_failed\"\n\t\t\t\t\t\t\t\t: \"adapter_preflight_failed\"\n\t\t\t\t\t\t\t: inputDispatched\n\t\t\t\t\t\t\t\t? \"input_dispatch_failed\"\n\t\t\t\t\t\t\t\t: failurePhase === \"validation\"\n\t\t\t\t\t\t\t\t\t? \"invalid_arguments\"\n\t\t\t\t\t\t\t\t\t: failureCode;\n\t\t\tconst message =\n\t\t\t\tname === \"computer_launch\"\n\t\t\t\t\t? inputDispatched\n\t\t\t\t\t\t? \"Launch request began; activation may have occurred.\"\n\t\t\t\t\t\t: \"No launch request was sent by this call.\"\n\t\t\t\t\t: inputDispatched\n\t\t\t\t\t\t? \"Input may have taken effect; request began.\"\n\t\t\t\t\t\t: \"No input was sent by this call.\";\n\t\t\tconst guidance = inputDispatched\n\t\t\t\t? name === \"computer_launch\"\n\t\t\t\t\t? `Use computer_apps({query:${JSON.stringify(input.name)}) before considering another launch.`\n\t\t\t\t\t: `Get a fresh capture of the exact target before another action. Input may have taken effect; inspect the field before deciding and never repeat blindly. ${actionOutcome?.retry_from_character !== undefined ? \"Verify the field in a fresh image before considering any remaining suffix. retry_from_character is a zero-based Unicode code-point offset, not UTF-16.\" : \"\"}`\n\t\t\t\t: freshActionGuidance;\n\t\t\tconst result: Result = {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: JSON.stringify({\n\t\t\t\t\t\t\tkind:\n\t\t\t\t\t\t\t\tname === \"computer_apps\"\n\t\t\t\t\t\t\t\t\t? \"apps\"\n\t\t\t\t\t\t\t\t\t: name === \"computer_launch\"\n\t\t\t\t\t\t\t\t\t\t? \"launch\"\n\t\t\t\t\t\t\t\t\t\t: name === \"computer_observe\"\n\t\t\t\t\t\t\t\t\t\t\t? \"observation\"\n\t\t\t\t\t\t\t\t\t\t\t: \"action\",\n\t\t\t\t\t\t\toperation: operationName,\n\t\t\t\t\t\t\ttarget: actionTarget,\n\t\t\t\t\t\t\t...actionOutcome,\n\t\t\t\t\t\t\taction_outcome: actionOutcome,\n\t\t\t\t\t\t\tphase: failurePhase,\n\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\tinput:\n\t\t\t\t\t\t\t\tname === \"computer_apps\"\n\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t: name === \"computer_launch\"\n\t\t\t\t\t\t\t\t\t\t? \"not_applicable\"\n\t\t\t\t\t\t\t\t\t\t: inputDispatched\n\t\t\t\t\t\t\t\t\t\t\t? \"uncertain\"\n\t\t\t\t\t\t\t\t\t\t\t: \"not_dispatched\",\n\t\t\t\t\t\t\trequest: name === \"computer_launch\" ? (inputDispatched ? \"sent\" : \"not_sent\") : undefined,\n\t\t\t\t\t\t\tapplicationEffect: \"unverified\",\n\t\t\t\t\t\t\tobservation: \"unavailable\",\n\t\t\t\t\t\t\tcapture_error: failurePhase === \"post_action_capture\" ? code : undefined,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\tguidance,\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: { computer: { failed: true, workflow: fatal ? \"stopped\" : \"ready\" } },\n\t\t\t\tisError: true,\n\t\t\t};\n\t\t\treturn fatal ? this.finish(result) : result;\n\t\t}\n\t}\n\n\tprivate async finish(result: Result): Promise<Result> {\n\t\ttry {\n\t\t\tawait this.close();\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\tdetails: { ...result.details, computer: { failed: result.details.computer.failed, workflow: \"stopped\" } },\n\t\t\t};\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t...result.content,\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: JSON.stringify({\n\t\t\t\t\t\t\tphase: \"cleanup\",\n\t\t\t\t\t\t\tcleanup: \"unconfirmed\",\n\t\t\t\t\t\t\tguidance: \"Desktop ownership retained until shutdown is confirmed.\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: { ...result.details, computer: { failed: true, workflow: \"cleanup_unconfirmed\" } },\n\t\t\t\tisError: true,\n\t\t\t};\n\t\t}\n\t}\n\n\tclose(): Promise<void> {\n\t\tthis.abort.abort();\n\t\tthis.observation = undefined;\n\t\tthis.closing ??= this.stop();\n\t\treturn this.closing;\n\t}\n\n\tprivate async stop(): Promise<void> {\n\t\tawait this.driver.close();\n\t\tawait this.lease.close();\n\t}\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* lunr: Context window breakdown estimation for the /context command.
|
|
3
3
|
*
|
|
4
|
-
* Pure functions that estimate (
|
|
4
|
+
* Pure functions that estimate (shared text heuristic, as `estimateTokens` in
|
|
5
5
|
* compaction.ts) what consumes the model's context window: the system prompt
|
|
6
6
|
* (project context files are baked into it), the registered tool definitions,
|
|
7
7
|
* and the live session messages split into user / assistant text / thinking /
|
|
@@ -85,7 +85,7 @@ export declare function splitSystemPromptSections(systemPrompt: string): {
|
|
|
85
85
|
export declare function estimateToolDefinitionTokens(tools: ReadonlyArray<ContextBreakdownTool>): number;
|
|
86
86
|
/**
|
|
87
87
|
* Compute the estimated context window breakdown.
|
|
88
|
-
* All numbers
|
|
88
|
+
* All numbers use the shared text heuristic, matching `estimateTokens`.
|
|
89
89
|
*/
|
|
90
90
|
export declare function computeContextBreakdown(input: ContextBreakdownInput): ContextBreakdown;
|
|
91
91
|
//# sourceMappingURL=context-breakdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-breakdown.d.ts","sourceRoot":"","sources":["../../src/core/context-breakdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAIlE,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC3C,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mFAAmF;IACnF,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACpC,wFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,6EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAChC,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,MAAM,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;CACF;AA8BD,0EAA0E;AAC1E,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;CACf,CAsBA;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAY/F;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,CAgGtF","sourcesContent":["/**\n * lunr: Context window breakdown estimation for the /context command.\n *\n * Pure functions that estimate (chars/4, same heuristic as `estimateTokens` in\n * compaction.ts) what consumes the model's context window: the system prompt\n * (project context files are baked into it), the registered tool definitions,\n * and the live session messages split into user / assistant text / thinking /\n * tool calls / tool results / summaries.\n *\n * Pass the same message list the context actually contains (post-compaction,\n * that is `AgentSession.messages`) so the breakdown matches reality.\n */\n\nimport type { AgentMessage } from \"@ashx-j/lunr-agent\";\nimport type { AssistantMessage } from \"@ashx-j/lunr-ai/compat\";\nimport { estimateTokens } from \"./compaction/index.ts\";\n\nexport interface ContextBreakdownTool {\n\tname: string;\n\tdescription: string;\n\tparameters: unknown;\n}\n\nexport interface ContextBreakdownInput {\n\tsystemPrompt: string;\n\ttools: ReadonlyArray<ContextBreakdownTool>;\n\tmessages: ReadonlyArray<AgentMessage>;\n\tcontextWindow: number;\n\t/** Absolute path of the user-level AGENTS.md, used only to distinguish its UI label. */\n\tglobalAgentsPath?: string;\n\t/** Absolute path of the selected model's AGENTS.md, used only for its UI label. */\n\tmodelAgentsPath?: string;\n}\n\nexport interface ContextFileBreakdown {\n\t/** Display label for the context file (AGENTS.md, Global AGENTS.md, CLAUDE.md, …). */\n\tlabel: string;\n\t/** Path from the <project_instructions path=\"…\"> wrapper, when present. */\n\tpath?: string;\n\ttokens: number;\n}\n\nexport interface ContextBreakdown {\n\t/** System prompt minus <project_context> and the skills block. */\n\tsystemPrompt: number;\n\t/** Each AGENTS.md / context file from <project_instructions>. */\n\tcontextFiles: ContextFileBreakdown[];\n\t/** formatSkillsForPrompt section, if present. */\n\tskills: number;\n\t/** Serialized tool schemas (name + description + JSON parameter schema). */\n\ttoolDefinitions: number;\n\t/** User and extension (\"custom\") messages. */\n\tuser: number;\n\t/** Assistant text blocks. */\n\tassistantText: number;\n\t/** Assistant thinking blocks. */\n\tthinking: number;\n\t/** Assistant tool call blocks (name + serialized arguments). */\n\ttoolCalls: number;\n\t/** Tool result messages and bash execution output. */\n\ttoolResults: number;\n\t/** Compaction and branch summaries. */\n\tsummaries: number;\n\t/** Sum of all categories above. */\n\ttotal: number;\n\tcontextWindow: number;\n\t/** max(0, contextWindow - total) */\n\tfree: number;\n\t/** Per-category message counts (not token counts). */\n\tcounts: {\n\t\tuser: number;\n\t\tassistantText: number;\n\t\tthinking: number;\n\t\ttoolCalls: number;\n\t\ttoolResults: number;\n\t\tsummaries: number;\n\t};\n}\n\nconst CHARS_PER_TOKEN = 4;\nconst PROJECT_CONTEXT_RE = /<project_context>[\\s\\S]*?<\\/project_context>/;\nconst PROJECT_INSTRUCTIONS_RE = /<project_instructions(?:\\s+path=\"([^\"]*)\")?>([\\s\\S]*?)<\\/project_instructions>/g;\nconst SKILLS_BLOCK_RE =\n\t/\\n\\nThe following skills provide specialized instructions for specific tasks\\.[\\s\\S]*<\\/available_skills>/;\n\nfunction estimateChars(text: string): number {\n\treturn text.length === 0 ? 0 : Math.ceil(text.length / CHARS_PER_TOKEN);\n}\n\nfunction contextFileLabel(\n\tfilePath: string | undefined,\n\tglobalAgentsPath: string | undefined,\n\tmodelAgentsPath: string | undefined,\n): string {\n\tif (!filePath) return \"AGENTS.md\";\n\tconst normalized = filePath.replace(/\\\\/g, \"/\");\n\tif (globalAgentsPath && normalized.toLowerCase() === globalAgentsPath.replace(/\\\\/g, \"/\").toLowerCase()) {\n\t\treturn \"Global AGENTS.md\";\n\t}\n\tif (modelAgentsPath && normalized.toLowerCase() === modelAgentsPath.replace(/\\\\/g, \"/\").toLowerCase()) {\n\t\tconst parts = normalized.split(\"/\");\n\t\treturn `${parts.at(-2) ?? \"Model\"} AGENTS.md`;\n\t}\n\tconst slash = normalized.lastIndexOf(\"/\");\n\treturn slash === -1 ? normalized : normalized.slice(slash + 1);\n}\n\n/** Split a live system prompt into base / context-file / skills parts. */\nexport function splitSystemPromptSections(systemPrompt: string): {\n\tbase: string;\n\tcontextFiles: Array<{ path?: string; content: string }>;\n\tskills: string;\n} {\n\tlet remaining = systemPrompt;\n\tconst contextFiles: Array<{ path?: string; content: string }> = [];\n\tconst contextMatch = remaining.match(PROJECT_CONTEXT_RE);\n\tif (contextMatch) {\n\t\tconst block = contextMatch[0];\n\t\tPROJECT_INSTRUCTIONS_RE.lastIndex = 0;\n\t\tfor (const match of block.matchAll(PROJECT_INSTRUCTIONS_RE)) {\n\t\t\tcontextFiles.push({\n\t\t\t\tpath: match[1],\n\t\t\t\tcontent: match[2] ?? \"\",\n\t\t\t});\n\t\t}\n\t\tremaining = remaining.replace(block, \"\");\n\t}\n\tlet skills = \"\";\n\tconst skillsMatch = remaining.match(SKILLS_BLOCK_RE);\n\tif (skillsMatch) {\n\t\tskills = skillsMatch[0];\n\t\tremaining = remaining.replace(skills, \"\");\n\t}\n\treturn { base: remaining, contextFiles, skills };\n}\n\n/**\n * Estimate the token cost of the tool definitions sent to the model.\n * The wire format is roughly `{ name, description, parameters(JSON schema) }` per tool.\n */\nexport function estimateToolDefinitionTokens(tools: ReadonlyArray<ContextBreakdownTool>): number {\n\tlet chars = 0;\n\tfor (const tool of tools) {\n\t\tchars += tool.name.length + tool.description.length;\n\t\ttry {\n\t\t\tconst schema = JSON.stringify(tool.parameters);\n\t\t\tif (schema) chars += schema.length;\n\t\t} catch {\n\t\t\t// Unserializable schema — skip rather than fail the whole breakdown.\n\t\t}\n\t}\n\treturn Math.ceil(chars / CHARS_PER_TOKEN);\n}\n\n/**\n * Compute the estimated context window breakdown.\n * All numbers are chars/4 estimates, matching `estimateTokens`.\n */\nexport function computeContextBreakdown(input: ContextBreakdownInput): ContextBreakdown {\n\tconst sections = splitSystemPromptSections(input.systemPrompt);\n\tconst systemPrompt = estimateChars(sections.base);\n\tconst contextFiles = sections.contextFiles.map((file) => ({\n\t\tlabel: contextFileLabel(file.path, input.globalAgentsPath, input.modelAgentsPath),\n\t\tpath: file.path,\n\t\ttokens: estimateChars(file.content),\n\t}));\n\tconst skills = estimateChars(sections.skills);\n\tconst toolDefinitions = estimateToolDefinitionTokens(input.tools);\n\n\tlet user = 0;\n\tlet assistantText = 0;\n\tlet thinking = 0;\n\tlet toolCalls = 0;\n\tlet toolResults = 0;\n\tlet summaries = 0;\n\n\tconst counts = {\n\t\tuser: 0,\n\t\tassistantText: 0,\n\t\tthinking: 0,\n\t\ttoolCalls: 0,\n\t\ttoolResults: 0,\n\t\tsummaries: 0,\n\t};\n\n\tfor (const message of input.messages) {\n\t\tswitch (message.role) {\n\t\t\tcase \"assistant\": {\n\t\t\t\tlet textChars = 0;\n\t\t\t\tlet thinkingChars = 0;\n\t\t\t\tlet toolCallChars = 0;\n\t\t\t\tfor (const block of (message as AssistantMessage).content) {\n\t\t\t\t\tif (block.type === \"text\") {\n\t\t\t\t\t\ttextChars += block.text.length;\n\t\t\t\t\t} else if (block.type === \"thinking\") {\n\t\t\t\t\t\tthinkingChars += block.thinking.length;\n\t\t\t\t\t} else if (block.type === \"toolCall\") {\n\t\t\t\t\t\ttoolCallChars += block.name.length + JSON.stringify(block.arguments).length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tassistantText += Math.ceil(textChars / CHARS_PER_TOKEN);\n\t\t\t\tthinking += Math.ceil(thinkingChars / CHARS_PER_TOKEN);\n\t\t\t\ttoolCalls += Math.ceil(toolCallChars / CHARS_PER_TOKEN);\n\t\t\t\tif (textChars > 0) counts.assistantText++;\n\t\t\t\tif (thinkingChars > 0) counts.thinking++;\n\t\t\t\tif (toolCallChars > 0) counts.toolCalls++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"user\":\n\t\t\tcase \"custom\":\n\t\t\t\tuser += estimateTokens(message);\n\t\t\t\tcounts.user++;\n\t\t\t\tbreak;\n\t\t\tcase \"toolResult\":\n\t\t\tcase \"bashExecution\":\n\t\t\t\ttoolResults += estimateTokens(message);\n\t\t\t\tcounts.toolResults++;\n\t\t\t\tbreak;\n\t\t\tcase \"branchSummary\":\n\t\t\tcase \"compactionSummary\":\n\t\t\t\tsummaries += estimateTokens(message);\n\t\t\t\tcounts.summaries++;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst contextFileTokens = contextFiles.reduce((sum, file) => sum + file.tokens, 0);\n\tconst total =\n\t\tsystemPrompt +\n\t\tcontextFileTokens +\n\t\tskills +\n\t\ttoolDefinitions +\n\t\tuser +\n\t\tassistantText +\n\t\tthinking +\n\t\ttoolCalls +\n\t\ttoolResults +\n\t\tsummaries;\n\treturn {\n\t\tsystemPrompt,\n\t\tcontextFiles,\n\t\tskills,\n\t\ttoolDefinitions,\n\t\tuser,\n\t\tassistantText,\n\t\tthinking,\n\t\ttoolCalls,\n\t\ttoolResults,\n\t\tsummaries,\n\t\ttotal,\n\t\tcontextWindow: input.contextWindow,\n\t\tfree: Math.max(0, input.contextWindow - total),\n\t\tcounts,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"context-breakdown.d.ts","sourceRoot":"","sources":["../../src/core/context-breakdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAKlE,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC3C,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mFAAmF;IACnF,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACpC,wFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,6EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAChC,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,MAAM,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;CACF;AA6BD,0EAA0E;AAC1E,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;CACf,CAsBA;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAY/F;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,CAiGtF","sourcesContent":["/**\n * lunr: Context window breakdown estimation for the /context command.\n *\n * Pure functions that estimate (shared text heuristic, as `estimateTokens` in\n * compaction.ts) what consumes the model's context window: the system prompt\n * (project context files are baked into it), the registered tool definitions,\n * and the live session messages split into user / assistant text / thinking /\n * tool calls / tool results / summaries.\n *\n * Pass the same message list the context actually contains (post-compaction,\n * that is `AgentSession.messages`) so the breakdown matches reality.\n */\n\nimport type { AgentMessage } from \"@ashx-j/lunr-agent\";\nimport type { AssistantMessage } from \"@ashx-j/lunr-ai/compat\";\nimport { estimateTextTokens } from \"@ashx-j/lunr-ai/compat\";\nimport { estimateTokens } from \"./compaction/index.ts\";\n\nexport interface ContextBreakdownTool {\n\tname: string;\n\tdescription: string;\n\tparameters: unknown;\n}\n\nexport interface ContextBreakdownInput {\n\tsystemPrompt: string;\n\ttools: ReadonlyArray<ContextBreakdownTool>;\n\tmessages: ReadonlyArray<AgentMessage>;\n\tcontextWindow: number;\n\t/** Absolute path of the user-level AGENTS.md, used only to distinguish its UI label. */\n\tglobalAgentsPath?: string;\n\t/** Absolute path of the selected model's AGENTS.md, used only for its UI label. */\n\tmodelAgentsPath?: string;\n}\n\nexport interface ContextFileBreakdown {\n\t/** Display label for the context file (AGENTS.md, Global AGENTS.md, CLAUDE.md, …). */\n\tlabel: string;\n\t/** Path from the <project_instructions path=\"…\"> wrapper, when present. */\n\tpath?: string;\n\ttokens: number;\n}\n\nexport interface ContextBreakdown {\n\t/** System prompt minus <project_context> and the skills block. */\n\tsystemPrompt: number;\n\t/** Each AGENTS.md / context file from <project_instructions>. */\n\tcontextFiles: ContextFileBreakdown[];\n\t/** formatSkillsForPrompt section, if present. */\n\tskills: number;\n\t/** Serialized tool schemas (name + description + JSON parameter schema). */\n\ttoolDefinitions: number;\n\t/** User and extension (\"custom\") messages. */\n\tuser: number;\n\t/** Assistant text blocks. */\n\tassistantText: number;\n\t/** Assistant thinking blocks. */\n\tthinking: number;\n\t/** Assistant tool call blocks (name + serialized arguments). */\n\ttoolCalls: number;\n\t/** Tool result messages and bash execution output. */\n\ttoolResults: number;\n\t/** Compaction and branch summaries. */\n\tsummaries: number;\n\t/** Sum of all categories above. */\n\ttotal: number;\n\tcontextWindow: number;\n\t/** max(0, contextWindow - total) */\n\tfree: number;\n\t/** Per-category message counts (not token counts). */\n\tcounts: {\n\t\tuser: number;\n\t\tassistantText: number;\n\t\tthinking: number;\n\t\ttoolCalls: number;\n\t\ttoolResults: number;\n\t\tsummaries: number;\n\t};\n}\n\nconst PROJECT_CONTEXT_RE = /<project_context>[\\s\\S]*?<\\/project_context>/;\nconst PROJECT_INSTRUCTIONS_RE = /<project_instructions(?:\\s+path=\"([^\"]*)\")?>([\\s\\S]*?)<\\/project_instructions>/g;\nconst SKILLS_BLOCK_RE =\n\t/\\n\\nThe following skills provide specialized instructions for specific tasks\\.[\\s\\S]*<\\/available_skills>/;\n\nfunction estimateChars(text: string): number {\n\treturn estimateTextTokens(text);\n}\n\nfunction contextFileLabel(\n\tfilePath: string | undefined,\n\tglobalAgentsPath: string | undefined,\n\tmodelAgentsPath: string | undefined,\n): string {\n\tif (!filePath) return \"AGENTS.md\";\n\tconst normalized = filePath.replace(/\\\\/g, \"/\");\n\tif (globalAgentsPath && normalized.toLowerCase() === globalAgentsPath.replace(/\\\\/g, \"/\").toLowerCase()) {\n\t\treturn \"Global AGENTS.md\";\n\t}\n\tif (modelAgentsPath && normalized.toLowerCase() === modelAgentsPath.replace(/\\\\/g, \"/\").toLowerCase()) {\n\t\tconst parts = normalized.split(\"/\");\n\t\treturn `${parts.at(-2) ?? \"Model\"} AGENTS.md`;\n\t}\n\tconst slash = normalized.lastIndexOf(\"/\");\n\treturn slash === -1 ? normalized : normalized.slice(slash + 1);\n}\n\n/** Split a live system prompt into base / context-file / skills parts. */\nexport function splitSystemPromptSections(systemPrompt: string): {\n\tbase: string;\n\tcontextFiles: Array<{ path?: string; content: string }>;\n\tskills: string;\n} {\n\tlet remaining = systemPrompt;\n\tconst contextFiles: Array<{ path?: string; content: string }> = [];\n\tconst contextMatch = remaining.match(PROJECT_CONTEXT_RE);\n\tif (contextMatch) {\n\t\tconst block = contextMatch[0];\n\t\tPROJECT_INSTRUCTIONS_RE.lastIndex = 0;\n\t\tfor (const match of block.matchAll(PROJECT_INSTRUCTIONS_RE)) {\n\t\t\tcontextFiles.push({\n\t\t\t\tpath: match[1],\n\t\t\t\tcontent: match[2] ?? \"\",\n\t\t\t});\n\t\t}\n\t\tremaining = remaining.replace(block, \"\");\n\t}\n\tlet skills = \"\";\n\tconst skillsMatch = remaining.match(SKILLS_BLOCK_RE);\n\tif (skillsMatch) {\n\t\tskills = skillsMatch[0];\n\t\tremaining = remaining.replace(skills, \"\");\n\t}\n\treturn { base: remaining, contextFiles, skills };\n}\n\n/**\n * Estimate the token cost of the tool definitions sent to the model.\n * The wire format is roughly `{ name, description, parameters(JSON schema) }` per tool.\n */\nexport function estimateToolDefinitionTokens(tools: ReadonlyArray<ContextBreakdownTool>): number {\n\tlet text = \"\";\n\tfor (const tool of tools) {\n\t\ttext += tool.name + tool.description;\n\t\ttry {\n\t\t\tconst schema = JSON.stringify(tool.parameters);\n\t\t\tif (schema) text += schema;\n\t\t} catch {\n\t\t\t// Unserializable schema — skip rather than fail the whole breakdown.\n\t\t}\n\t}\n\treturn estimateTextTokens(text);\n}\n\n/**\n * Compute the estimated context window breakdown.\n * All numbers use the shared text heuristic, matching `estimateTokens`.\n */\nexport function computeContextBreakdown(input: ContextBreakdownInput): ContextBreakdown {\n\tconst sections = splitSystemPromptSections(input.systemPrompt);\n\tconst systemPrompt = estimateChars(sections.base);\n\tconst contextFiles = sections.contextFiles.map((file) => ({\n\t\tlabel: contextFileLabel(file.path, input.globalAgentsPath, input.modelAgentsPath),\n\t\tpath: file.path,\n\t\ttokens: estimateChars(file.content),\n\t}));\n\tconst skills = estimateChars(sections.skills);\n\tconst toolDefinitions = estimateToolDefinitionTokens(input.tools);\n\n\tlet user = 0;\n\tlet assistantText = 0;\n\tlet thinking = 0;\n\tlet toolCalls = 0;\n\tlet toolResults = 0;\n\tlet summaries = 0;\n\n\tconst counts = {\n\t\tuser: 0,\n\t\tassistantText: 0,\n\t\tthinking: 0,\n\t\ttoolCalls: 0,\n\t\ttoolResults: 0,\n\t\tsummaries: 0,\n\t};\n\n\tfor (const message of input.messages) {\n\t\tif (message.role === \"bashExecution\" && message.excludeFromContext) continue;\n\t\tswitch (message.role) {\n\t\t\tcase \"assistant\": {\n\t\t\t\tlet text = \"\";\n\t\t\t\tlet thinkingText = \"\";\n\t\t\t\tlet toolCallText = \"\";\n\t\t\t\tfor (const block of (message as AssistantMessage).content) {\n\t\t\t\t\tif (block.type === \"text\") {\n\t\t\t\t\t\ttext += block.text;\n\t\t\t\t\t} else if (block.type === \"thinking\") {\n\t\t\t\t\t\tthinkingText += block.thinking;\n\t\t\t\t\t} else if (block.type === \"toolCall\") {\n\t\t\t\t\t\ttoolCallText += block.name + JSON.stringify(block.arguments);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tassistantText += estimateTextTokens(text);\n\t\t\t\tthinking += estimateTextTokens(thinkingText);\n\t\t\t\ttoolCalls += estimateTextTokens(toolCallText);\n\t\t\t\tif (text.length > 0) counts.assistantText++;\n\t\t\t\tif (thinkingText.length > 0) counts.thinking++;\n\t\t\t\tif (toolCallText.length > 0) counts.toolCalls++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"user\":\n\t\t\tcase \"custom\":\n\t\t\t\tuser += estimateTokens(message);\n\t\t\t\tcounts.user++;\n\t\t\t\tbreak;\n\t\t\tcase \"toolResult\":\n\t\t\tcase \"bashExecution\":\n\t\t\t\ttoolResults += estimateTokens(message);\n\t\t\t\tcounts.toolResults++;\n\t\t\t\tbreak;\n\t\t\tcase \"branchSummary\":\n\t\t\tcase \"compactionSummary\":\n\t\t\t\tsummaries += estimateTokens(message);\n\t\t\t\tcounts.summaries++;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst contextFileTokens = contextFiles.reduce((sum, file) => sum + file.tokens, 0);\n\tconst total =\n\t\tsystemPrompt +\n\t\tcontextFileTokens +\n\t\tskills +\n\t\ttoolDefinitions +\n\t\tuser +\n\t\tassistantText +\n\t\tthinking +\n\t\ttoolCalls +\n\t\ttoolResults +\n\t\tsummaries;\n\treturn {\n\t\tsystemPrompt,\n\t\tcontextFiles,\n\t\tskills,\n\t\ttoolDefinitions,\n\t\tuser,\n\t\tassistantText,\n\t\tthinking,\n\t\ttoolCalls,\n\t\ttoolResults,\n\t\tsummaries,\n\t\ttotal,\n\t\tcontextWindow: input.contextWindow,\n\t\tfree: Math.max(0, input.contextWindow - total),\n\t\tcounts,\n\t};\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* lunr: Context window breakdown estimation for the /context command.
|
|
3
3
|
*
|
|
4
|
-
* Pure functions that estimate (
|
|
4
|
+
* Pure functions that estimate (shared text heuristic, as `estimateTokens` in
|
|
5
5
|
* compaction.ts) what consumes the model's context window: the system prompt
|
|
6
6
|
* (project context files are baked into it), the registered tool definitions,
|
|
7
7
|
* and the live session messages split into user / assistant text / thinking /
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
* Pass the same message list the context actually contains (post-compaction,
|
|
11
11
|
* that is `AgentSession.messages`) so the breakdown matches reality.
|
|
12
12
|
*/
|
|
13
|
+
import { estimateTextTokens } from "@ashx-j/lunr-ai/compat";
|
|
13
14
|
import { estimateTokens } from "./compaction/index.js";
|
|
14
|
-
const CHARS_PER_TOKEN = 4;
|
|
15
15
|
const PROJECT_CONTEXT_RE = /<project_context>[\s\S]*?<\/project_context>/;
|
|
16
16
|
const PROJECT_INSTRUCTIONS_RE = /<project_instructions(?:\s+path="([^"]*)")?>([\s\S]*?)<\/project_instructions>/g;
|
|
17
17
|
const SKILLS_BLOCK_RE = /\n\nThe following skills provide specialized instructions for specific tasks\.[\s\S]*<\/available_skills>/;
|
|
18
18
|
function estimateChars(text) {
|
|
19
|
-
return
|
|
19
|
+
return estimateTextTokens(text);
|
|
20
20
|
}
|
|
21
21
|
function contextFileLabel(filePath, globalAgentsPath, modelAgentsPath) {
|
|
22
22
|
if (!filePath)
|
|
@@ -61,23 +61,23 @@ export function splitSystemPromptSections(systemPrompt) {
|
|
|
61
61
|
* The wire format is roughly `{ name, description, parameters(JSON schema) }` per tool.
|
|
62
62
|
*/
|
|
63
63
|
export function estimateToolDefinitionTokens(tools) {
|
|
64
|
-
let
|
|
64
|
+
let text = "";
|
|
65
65
|
for (const tool of tools) {
|
|
66
|
-
|
|
66
|
+
text += tool.name + tool.description;
|
|
67
67
|
try {
|
|
68
68
|
const schema = JSON.stringify(tool.parameters);
|
|
69
69
|
if (schema)
|
|
70
|
-
|
|
70
|
+
text += schema;
|
|
71
71
|
}
|
|
72
72
|
catch {
|
|
73
73
|
// Unserializable schema — skip rather than fail the whole breakdown.
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
return
|
|
76
|
+
return estimateTextTokens(text);
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
79
|
* Compute the estimated context window breakdown.
|
|
80
|
-
* All numbers
|
|
80
|
+
* All numbers use the shared text heuristic, matching `estimateTokens`.
|
|
81
81
|
*/
|
|
82
82
|
export function computeContextBreakdown(input) {
|
|
83
83
|
const sections = splitSystemPromptSections(input.systemPrompt);
|
|
@@ -104,30 +104,32 @@ export function computeContextBreakdown(input) {
|
|
|
104
104
|
summaries: 0,
|
|
105
105
|
};
|
|
106
106
|
for (const message of input.messages) {
|
|
107
|
+
if (message.role === "bashExecution" && message.excludeFromContext)
|
|
108
|
+
continue;
|
|
107
109
|
switch (message.role) {
|
|
108
110
|
case "assistant": {
|
|
109
|
-
let
|
|
110
|
-
let
|
|
111
|
-
let
|
|
111
|
+
let text = "";
|
|
112
|
+
let thinkingText = "";
|
|
113
|
+
let toolCallText = "";
|
|
112
114
|
for (const block of message.content) {
|
|
113
115
|
if (block.type === "text") {
|
|
114
|
-
|
|
116
|
+
text += block.text;
|
|
115
117
|
}
|
|
116
118
|
else if (block.type === "thinking") {
|
|
117
|
-
|
|
119
|
+
thinkingText += block.thinking;
|
|
118
120
|
}
|
|
119
121
|
else if (block.type === "toolCall") {
|
|
120
|
-
|
|
122
|
+
toolCallText += block.name + JSON.stringify(block.arguments);
|
|
121
123
|
}
|
|
122
124
|
}
|
|
123
|
-
assistantText +=
|
|
124
|
-
thinking +=
|
|
125
|
-
toolCalls +=
|
|
126
|
-
if (
|
|
125
|
+
assistantText += estimateTextTokens(text);
|
|
126
|
+
thinking += estimateTextTokens(thinkingText);
|
|
127
|
+
toolCalls += estimateTextTokens(toolCallText);
|
|
128
|
+
if (text.length > 0)
|
|
127
129
|
counts.assistantText++;
|
|
128
|
-
if (
|
|
130
|
+
if (thinkingText.length > 0)
|
|
129
131
|
counts.thinking++;
|
|
130
|
-
if (
|
|
132
|
+
if (toolCallText.length > 0)
|
|
131
133
|
counts.toolCalls++;
|
|
132
134
|
break;
|
|
133
135
|
}
|