@prometheus-ai/agent 0.5.4 → 0.5.8
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 +30 -0
- package/dist/cli.js +25110 -0
- package/dist/types/async/index.d.ts +0 -1
- package/dist/types/async/job-manager.d.ts +33 -0
- package/dist/types/autolearn/controller.d.ts +25 -0
- package/dist/types/autolearn/managed-skills.d.ts +45 -0
- package/dist/types/autoresearch/state.d.ts +1 -1
- package/dist/types/autoresearch/tools/init-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/log-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/run-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/update-notes.d.ts +1 -1
- package/dist/types/autoresearch/types.d.ts +1 -1
- package/dist/types/capability/context-file.d.ts +0 -13
- package/dist/types/capability/mcp.d.ts +1 -0
- package/dist/types/capability/rule-buckets.d.ts +1 -1
- package/dist/types/capability/rule.d.ts +6 -1
- package/dist/types/capability/types.d.ts +0 -4
- package/dist/types/cli/args.d.ts +23 -3
- package/dist/types/cli/bench-cli.d.ts +78 -0
- package/dist/types/cli/claude-trace-cli.d.ts +7 -0
- package/dist/types/cli/dry-balance-cli.d.ts +16 -2
- package/dist/types/cli/gallery-cli.d.ts +43 -0
- package/dist/types/cli/gallery-fixtures/agentic.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/codeintel.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/edit.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/fs.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/index.d.ts +4 -0
- package/dist/types/cli/gallery-fixtures/interaction.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/memory.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/misc.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/search.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/shell.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/types.d.ts +55 -0
- package/dist/types/cli/gallery-fixtures/web.d.ts +2 -0
- package/dist/types/cli/gallery-screenshot.d.ts +35 -0
- package/dist/types/cli/grievances-cli.d.ts +1 -1
- package/dist/types/cli/list-models.d.ts +6 -14
- package/dist/types/cli/models-cli.d.ts +49 -0
- package/dist/types/cli/session-picker.d.ts +1 -1
- package/dist/types/cli/setup-cli.d.ts +1 -1
- package/dist/types/cli/setup-model-picker.d.ts +14 -0
- package/dist/types/cli/startup-cwd.d.ts +2 -0
- package/dist/types/cli/update-cli.d.ts +13 -40
- package/dist/types/cli/usage-cli.d.ts +81 -0
- package/dist/types/cli-commands.d.ts +12 -0
- package/dist/types/collab/crypto.d.ts +7 -0
- package/dist/types/collab/guest.d.ts +37 -0
- package/dist/types/collab/host.d.ts +29 -0
- package/dist/types/collab/protocol.d.ts +119 -0
- package/dist/types/collab/relay-client.d.ts +22 -0
- package/dist/types/commands/bench.d.ts +29 -0
- package/dist/types/commands/gallery.d.ts +47 -0
- package/dist/types/commands/install.d.ts +1 -1
- package/dist/types/commands/join.d.ts +12 -0
- package/dist/types/commands/launch.d.ts +8 -4
- package/dist/types/commands/models.d.ts +33 -0
- package/dist/types/commands/read.d.ts +1 -1
- package/dist/types/commands/say.d.ts +24 -0
- package/dist/types/commands/token.d.ts +25 -0
- package/dist/types/commands/usage.d.ts +34 -0
- package/dist/types/commit/agentic/tools/analyze-file.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-file-diff.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-overview.d.ts +1 -1
- package/dist/types/commit/agentic/tools/propose-changelog.d.ts +1 -1
- package/dist/types/commit/agentic/tools/propose-commit.d.ts +1 -1
- package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
- package/dist/types/commit/agentic/tools/schemas.d.ts +1 -1
- package/dist/types/commit/agentic/tools/split-commit.d.ts +1 -1
- package/dist/types/commit/analysis/conventional.d.ts +2 -2
- package/dist/types/commit/analysis/summary.d.ts +2 -2
- package/dist/types/commit/changelog/generate.d.ts +3 -3
- package/dist/types/commit/changelog/index.d.ts +2 -2
- package/dist/types/commit/map-reduce/index.d.ts +3 -3
- package/dist/types/commit/map-reduce/map-phase.d.ts +2 -2
- package/dist/types/commit/map-reduce/reduce-phase.d.ts +2 -2
- package/dist/types/commit/model-selection.d.ts +10 -4
- package/dist/types/commit/shared-llm.d.ts +1 -1
- package/dist/types/config/api-key-resolver.d.ts +43 -0
- package/dist/types/config/append-only-context-mode.d.ts +2 -1
- package/dist/types/config/keybindings.d.ts +12 -7
- package/dist/types/config/model-discovery.d.ts +57 -0
- package/dist/types/config/model-equivalence.d.ts +1 -1
- package/dist/types/config/model-registry.d.ts +86 -222
- package/dist/types/config/model-resolver.d.ts +43 -12
- package/dist/types/config/model-roles.d.ts +29 -0
- package/dist/types/config/models-config-schema.d.ts +536 -43
- package/dist/types/config/models-config.d.ts +391 -0
- package/dist/types/config/settings-schema.d.ts +1202 -324
- package/dist/types/config/settings.d.ts +15 -3
- package/dist/types/dap/config.d.ts +14 -1
- package/dist/types/dap/types.d.ts +10 -0
- package/dist/types/debug/log-viewer.d.ts +1 -1
- package/dist/types/debug/raw-sse.d.ts +1 -1
- package/dist/types/debug/report-bundle.d.ts +3 -0
- package/dist/types/debug/terminal-info.d.ts +0 -1
- package/dist/types/discovery/at-imports.d.ts +15 -0
- package/dist/types/discovery/prometheus-extension-roots.d.ts +7 -7
- package/dist/types/edit/diff.d.ts +3 -2
- package/dist/types/edit/file-snapshot-store.d.ts +18 -0
- package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
- package/dist/types/edit/hashline/params.d.ts +1 -1
- package/dist/types/edit/index.d.ts +0 -1
- package/dist/types/edit/modes/apply-patch.d.ts +1 -1
- package/dist/types/edit/modes/patch.d.ts +1 -1
- package/dist/types/edit/modes/replace.d.ts +1 -1
- package/dist/types/edit/renderer.d.ts +1 -0
- package/dist/types/eval/__tests__/completion-bridge.test.d.ts +1 -0
- package/dist/types/eval/__tests__/helpers-local-roots.test.d.ts +1 -0
- package/dist/types/eval/__tests__/js-context-manager.test.d.ts +1 -0
- package/dist/types/eval/backend.d.ts +7 -2
- package/dist/types/eval/bridge-timeout.d.ts +1 -1
- package/dist/types/eval/completion-bridge.d.ts +25 -0
- package/dist/types/eval/idle-timeout.d.ts +1 -5
- package/dist/types/eval/js/context-manager.d.ts +1 -0
- package/dist/types/eval/js/executor.d.ts +2 -0
- package/dist/types/eval/js/index.d.ts +1 -1
- package/dist/types/eval/js/shared/helpers.d.ts +7 -1
- package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
- package/dist/types/eval/js/shared/runtime.d.ts +6 -1
- package/dist/types/eval/js/worker-protocol.d.ts +6 -0
- package/dist/types/eval/py/__tests__/prelude.test.d.ts +1 -0
- package/dist/types/eval/py/executor.d.ts +12 -0
- package/dist/types/eval/py/index.d.ts +1 -1
- package/dist/types/eval/py/kernel.d.ts +6 -1
- package/dist/types/eval/py/runtime.d.ts +9 -0
- package/dist/types/exa/index.d.ts +1 -19
- package/dist/types/exa/mcp-client.d.ts +10 -3
- package/dist/types/exa/types.d.ts +0 -83
- package/dist/types/exec/bash-executor.d.ts +7 -0
- package/dist/types/export/custom-share.d.ts +1 -2
- package/dist/types/export/html/index.d.ts +39 -0
- package/dist/types/export/html/template-js.d.ts +2 -0
- package/dist/types/export/share.d.ts +61 -0
- package/dist/types/export/ttsr.d.ts +14 -0
- package/dist/types/extensibility/custom-commands/types.d.ts +9 -4
- package/dist/types/extensibility/custom-tools/loader.d.ts +30 -4
- package/dist/types/extensibility/custom-tools/types.d.ts +16 -8
- package/dist/types/extensibility/extensions/index.d.ts +1 -1
- package/dist/types/extensibility/extensions/loader.d.ts +20 -1
- package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
- package/dist/types/extensibility/extensions/runner.d.ts +5 -2
- package/dist/types/extensibility/extensions/types.d.ts +72 -11
- package/dist/types/extensibility/hooks/index.d.ts +2 -1
- package/dist/types/extensibility/hooks/loader.d.ts +1 -1
- package/dist/types/extensibility/hooks/types.d.ts +11 -5
- package/dist/types/extensibility/{legacy-pi-ai-shim.d.ts → legacy-package-ai-shim.d.ts} +2 -2
- package/dist/types/extensibility/plugins/{legacy-pi-compat.d.ts → legacy-package-compat.d.ts} +20 -3
- package/dist/types/extensibility/plugins/loader.d.ts +11 -0
- package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
- package/dist/types/extensibility/plugins/types.d.ts +2 -2
- package/dist/types/extensibility/shared-events.d.ts +3 -3
- package/dist/types/extensibility/skills.d.ts +10 -0
- package/dist/types/extensibility/slash-commands.d.ts +1 -11
- package/dist/types/goals/guided-setup.d.ts +18 -0
- package/dist/types/goals/state.d.ts +1 -1
- package/dist/types/goals/tools/goal-tool.d.ts +1 -1
- package/dist/types/hindsight/mental-models.d.ts +17 -8
- package/dist/types/hindsight/transcript.d.ts +1 -1
- package/dist/types/index.d.ts +5 -0
- package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
- package/dist/types/internal-urls/history-protocol.d.ts +14 -0
- package/dist/types/internal-urls/index.d.ts +1 -0
- package/dist/types/internal-urls/local-protocol.d.ts +14 -2
- package/dist/types/internal-urls/types.d.ts +1 -1
- package/dist/types/irc/bus.d.ts +79 -0
- package/dist/types/lib/xai-http.d.ts +1 -1
- package/dist/types/lsp/client.d.ts +10 -0
- package/dist/types/lsp/config.d.ts +2 -2
- package/dist/types/lsp/edits.d.ts +9 -0
- package/dist/types/lsp/format-options.d.ts +32 -0
- package/dist/types/lsp/index.d.ts +2 -7
- package/dist/types/lsp/types.d.ts +13 -1
- package/dist/types/lsp/utils.d.ts +6 -2
- package/dist/types/main.d.ts +23 -8
- package/dist/types/mcp/json-rpc.d.ts +5 -0
- package/dist/types/mcp/manager.d.ts +8 -0
- package/dist/types/mcp/oauth-discovery.d.ts +6 -1
- package/dist/types/mcp/oauth-flow.d.ts +13 -3
- package/dist/types/mcp/startup-events.d.ts +11 -0
- package/dist/types/mcp/tool-bridge.d.ts +2 -0
- package/dist/types/mcp/transports/stdio.d.ts +13 -0
- package/dist/types/mcp/types.d.ts +2 -0
- package/dist/types/memories/index.d.ts +7 -15
- package/dist/types/memories/storage.d.ts +0 -10
- package/dist/types/memory-backend/index.d.ts +3 -1
- package/dist/types/memory-backend/local-backend.d.ts +4 -3
- package/dist/types/memory-backend/resolve.d.ts +2 -2
- package/dist/types/memory-backend/runtime.d.ts +4 -0
- package/dist/types/memory-backend/types.d.ts +67 -2
- package/dist/types/mnemopi/config.d.ts +31 -1
- package/dist/types/mnemopi/state.d.ts +40 -2
- package/dist/types/modes/acp/acp-agent.d.ts +1 -2
- package/dist/types/modes/components/agent-dashboard.d.ts +17 -1
- package/dist/types/modes/components/agent-hub.d.ts +82 -0
- package/dist/types/modes/components/assistant-message.d.ts +5 -12
- package/dist/types/modes/components/bash-execution.d.ts +1 -1
- package/dist/types/modes/components/chat-block.d.ts +64 -0
- package/dist/types/modes/components/collab-prompt-message.d.ts +10 -0
- package/dist/types/modes/components/compaction-summary-message.d.ts +25 -5
- package/dist/types/modes/components/copy-selector.d.ts +1 -1
- package/dist/types/modes/components/custom-editor.d.ts +49 -2
- package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
- package/dist/types/modes/components/dynamic-border.d.ts +1 -1
- package/dist/types/modes/components/extensions/extension-dashboard.d.ts +1 -1
- package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
- package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
- package/dist/types/modes/components/footer.d.ts +1 -1
- package/dist/types/modes/components/hook-editor.d.ts +5 -0
- package/dist/types/modes/components/hook-input.d.ts +4 -0
- package/dist/types/modes/components/hook-selector.d.ts +5 -7
- package/dist/types/modes/components/index.d.ts +1 -0
- package/dist/types/modes/components/late-diagnostics-message.d.ts +20 -0
- package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
- package/dist/types/modes/components/mcp-add-wizard.d.ts +2 -1
- package/dist/types/modes/components/model-selector.d.ts +1 -1
- package/dist/types/modes/components/oauth-selector.d.ts +10 -1
- package/dist/types/modes/components/overlay-box.d.ts +17 -0
- package/dist/types/modes/components/plan-review-overlay.d.ts +61 -0
- package/dist/types/modes/components/plan-toc.d.ts +41 -0
- package/dist/types/modes/components/read-tool-group.d.ts +8 -0
- package/dist/types/modes/components/reset-usage-selector.d.ts +12 -0
- package/dist/types/modes/components/segment-track.d.ts +11 -6
- package/dist/types/modes/components/session-selector.d.ts +18 -9
- package/dist/types/modes/components/settings-defs.d.ts +9 -2
- package/dist/types/modes/components/settings-selector.d.ts +17 -4
- package/dist/types/modes/components/snapcompact-shape-preview.d.ts +31 -0
- package/dist/types/modes/components/status-line/component.d.ts +61 -0
- package/dist/types/modes/components/status-line/index.d.ts +1 -0
- package/dist/types/modes/components/status-line/types.d.ts +47 -3
- package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
- package/dist/types/modes/components/tool-execution.d.ts +49 -2
- package/dist/types/modes/components/transcript-container.d.ts +76 -26
- package/dist/types/modes/components/tree-selector.d.ts +2 -2
- package/dist/types/modes/components/ttsr-notification.d.ts +5 -1
- package/dist/types/modes/components/usage-row.d.ts +3 -0
- package/dist/types/modes/components/user-message-selector.d.ts +1 -1
- package/dist/types/modes/components/user-message.d.ts +2 -1
- package/dist/types/modes/components/visual-truncate.d.ts +1 -1
- package/dist/types/modes/components/welcome.d.ts +12 -2
- package/dist/types/modes/controllers/command-controller.d.ts +3 -2
- package/dist/types/modes/controllers/event-controller.d.ts +7 -1
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -1
- package/dist/types/modes/controllers/input-controller.d.ts +25 -3
- package/dist/types/modes/controllers/mcp-command-controller.d.ts +8 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +5 -2
- package/dist/types/modes/controllers/session-focus-controller.d.ts +31 -0
- package/dist/types/modes/controllers/streaming-reveal.d.ts +22 -0
- package/dist/types/modes/controllers/tan-command-controller.d.ts +6 -0
- package/dist/types/modes/controllers/tool-args-reveal.d.ts +43 -0
- package/dist/types/modes/gradient-highlight.d.ts +9 -4
- package/dist/types/modes/image-references.d.ts +14 -3
- package/dist/types/modes/index.d.ts +8 -7
- package/dist/types/modes/interactive-mode.d.ts +92 -16
- package/dist/types/modes/magic-keywords.d.ts +14 -2
- package/dist/types/modes/markdown-prose.d.ts +1 -1
- package/dist/types/modes/oauth-manual-input.d.ts +7 -0
- package/dist/types/modes/rpc/rpc-client.d.ts +48 -2
- package/dist/types/modes/rpc/rpc-mode.d.ts +67 -2
- package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
- package/dist/types/modes/rpc/rpc-types.d.ts +113 -1
- package/dist/types/modes/runtime-init.d.ts +4 -0
- package/dist/types/modes/session-observer-registry.d.ts +9 -0
- package/dist/types/modes/setup-version.d.ts +11 -0
- package/dist/types/modes/setup-wizard/index.d.ts +7 -2
- package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
- package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +4 -1
- package/dist/types/modes/setup-wizard/scenes/types.d.ts +11 -2
- package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +6 -2
- package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
- package/dist/types/modes/theme/theme.d.ts +42 -7
- package/dist/types/modes/types.d.ts +62 -13
- package/dist/types/modes/utils/context-usage.d.ts +6 -1
- package/dist/types/modes/utils/copy-targets.d.ts +21 -1
- package/dist/types/modes/utils/ui-helpers.d.ts +4 -4
- package/dist/types/modes/workflow.d.ts +3 -3
- package/dist/types/plan-mode/approved-plan.d.ts +27 -8
- package/dist/types/plan-mode/plan-protection.d.ts +4 -4
- package/dist/types/registry/agent-lifecycle.d.ts +51 -0
- package/dist/types/registry/agent-registry.d.ts +33 -5
- package/dist/types/sdk.d.ts +46 -4
- package/dist/types/secrets/index.d.ts +1 -1
- package/dist/types/secrets/obfuscator.d.ts +9 -3
- package/dist/types/session/agent-session.d.ts +136 -66
- package/dist/types/session/agent-storage.d.ts +2 -1
- package/dist/types/session/auth-broker-config.d.ts +4 -0
- package/dist/types/session/auth-storage.d.ts +1 -1
- package/dist/types/session/codex-auto-reset.d.ts +111 -0
- package/dist/types/session/indexed-session-storage.d.ts +3 -3
- package/dist/types/session/messages.d.ts +26 -15
- package/dist/types/session/session-context.d.ts +39 -0
- package/dist/types/session/session-entries.d.ts +159 -0
- package/dist/types/session/session-history-format.d.ts +12 -0
- package/dist/types/session/session-listing.d.ts +69 -0
- package/dist/types/session/session-loader.d.ts +16 -0
- package/dist/types/session/session-manager.d.ts +107 -440
- package/dist/types/session/session-migrations.d.ts +12 -0
- package/dist/types/session/session-paths.d.ts +25 -0
- package/dist/types/session/session-persistence.d.ts +8 -0
- package/dist/types/session/session-storage.d.ts +11 -7
- package/dist/types/session/snapcompact-inline.d.ts +145 -0
- package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
- package/dist/types/session/streaming-output.d.ts +46 -0
- package/dist/types/session/tool-choice-queue.d.ts +6 -6
- package/dist/types/session/yield-queue.d.ts +10 -1
- package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
- package/dist/types/slash-commands/available-commands.d.ts +34 -0
- package/dist/types/slash-commands/builtin-registry.d.ts +10 -0
- package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +14 -0
- package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
- package/dist/types/slash-commands/helpers/reset-usage.d.ts +27 -0
- package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
- package/dist/types/slash-commands/types.d.ts +5 -9
- package/dist/types/ssh/connection-manager.d.ts +8 -0
- package/dist/types/stt/asr-client.d.ts +90 -0
- package/dist/types/stt/asr-protocol.d.ts +97 -0
- package/dist/types/stt/asr-worker.d.ts +2 -0
- package/dist/types/stt/downloader.d.ts +38 -0
- package/dist/types/stt/endpointer.d.ts +59 -0
- package/dist/types/stt/index.d.ts +5 -1
- package/dist/types/stt/models.d.ts +120 -0
- package/dist/types/stt/recorder.d.ts +17 -0
- package/dist/types/stt/stt-controller.d.ts +6 -0
- package/dist/types/stt/transcriber.d.ts +5 -7
- package/dist/types/stt/wav.d.ts +29 -0
- package/dist/types/system-prompt.d.ts +9 -1
- package/dist/types/task/commands.d.ts +1 -1
- package/dist/types/task/discovery.d.ts +1 -2
- package/dist/types/task/executor.d.ts +61 -2
- package/dist/types/task/index.d.ts +37 -6
- package/dist/types/task/output-manager.d.ts +0 -7
- package/dist/types/task/parallel.d.ts +2 -2
- package/dist/types/task/prometheus-command.d.ts +2 -2
- package/dist/types/task/render.d.ts +20 -7
- package/dist/types/task/repair-args.d.ts +8 -7
- package/dist/types/task/types.d.ts +109 -52
- package/dist/types/task/worktree.d.ts +2 -0
- package/dist/types/telemetry-export.d.ts +2 -2
- package/dist/types/thinking.d.ts +4 -0
- package/dist/types/tiny/models.d.ts +1 -1
- package/dist/types/tiny/title-client.d.ts +12 -1
- package/dist/types/tiny/title-protocol.d.ts +1 -0
- package/dist/types/tools/archive-reader.d.ts +5 -0
- package/dist/types/tools/ask.d.ts +6 -1
- package/dist/types/tools/ast-edit.d.ts +4 -1
- package/dist/types/tools/ast-grep.d.ts +4 -1
- package/dist/types/tools/bash.d.ts +5 -2
- package/dist/types/tools/browser/attach.d.ts +4 -4
- package/dist/types/tools/browser/cmux/cmux-tab.d.ts +202 -0
- package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
- package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
- package/dist/types/tools/browser/registry.d.ts +17 -3
- package/dist/types/tools/browser/render.d.ts +2 -0
- package/dist/types/tools/browser/tab-protocol.d.ts +2 -0
- package/dist/types/tools/browser/tab-supervisor.d.ts +16 -4
- package/dist/types/tools/browser/tab-worker.d.ts +18 -1
- package/dist/types/tools/browser.d.ts +3 -1
- package/dist/types/tools/checkpoint.d.ts +1 -1
- package/dist/types/tools/conflict-detect.d.ts +16 -0
- package/dist/types/tools/debug.d.ts +1 -1
- package/dist/types/tools/eval-render.d.ts +1 -8
- package/dist/types/tools/eval.d.ts +9 -1
- package/dist/types/tools/fetch.d.ts +17 -8
- package/dist/types/tools/find.d.ts +1 -8
- package/dist/types/tools/gh-cache-invalidation.d.ts +6 -0
- package/dist/types/tools/gh.d.ts +4 -1
- package/dist/types/tools/github-cache.d.ts +19 -0
- package/dist/types/tools/grouped-file-output.d.ts +46 -12
- package/dist/types/tools/image-gen.d.ts +1 -1
- package/dist/types/tools/index.d.ts +89 -8
- package/dist/types/tools/inspect-image.d.ts +1 -1
- package/dist/types/tools/irc.d.ts +79 -39
- package/dist/types/tools/job.d.ts +8 -2
- package/dist/types/tools/learn.d.ts +51 -0
- package/dist/types/tools/manage-skill.d.ts +40 -0
- package/dist/types/tools/memory-edit.d.ts +2 -2
- package/dist/types/tools/memory-recall.d.ts +1 -1
- package/dist/types/tools/memory-reflect.d.ts +1 -1
- package/dist/types/tools/memory-render.d.ts +4 -1
- package/dist/types/tools/memory-retain.d.ts +1 -1
- package/dist/types/tools/path-utils.d.ts +17 -5
- package/dist/types/tools/plan-mode-guard.d.ts +18 -9
- package/dist/types/tools/read.d.ts +3 -2
- package/dist/types/tools/render-mermaid.d.ts +1 -1
- package/dist/types/tools/render-utils.d.ts +47 -27
- package/dist/types/tools/renderers.d.ts +10 -2
- package/dist/types/tools/report-tool-issue.d.ts +6 -1
- package/dist/types/tools/resolve.d.ts +1 -1
- package/dist/types/tools/review.d.ts +1 -1
- package/dist/types/tools/search-tool-bm25.d.ts +1 -1
- package/dist/types/tools/search.d.ts +7 -3
- package/dist/types/tools/sqlite-reader.d.ts +4 -0
- package/dist/types/tools/ssh.d.ts +2 -1
- package/dist/types/tools/todo.d.ts +7 -15
- package/dist/types/tools/tool-result.d.ts +2 -0
- package/dist/types/tools/tool-timeouts.d.ts +1 -1
- package/dist/types/tools/tts.d.ts +26 -1
- package/dist/types/tools/write.d.ts +6 -3
- package/dist/types/tools/yield.d.ts +8 -0
- package/dist/types/tts/downloader.d.ts +20 -0
- package/dist/types/tts/index.d.ts +8 -0
- package/dist/types/tts/models.d.ts +82 -0
- package/dist/types/tts/player.d.ts +32 -0
- package/dist/types/tts/runtime.d.ts +6 -0
- package/dist/types/tts/streaming-player.d.ts +41 -0
- package/dist/types/tts/tts-client.d.ts +93 -0
- package/dist/types/tts/tts-protocol.d.ts +95 -0
- package/dist/types/tts/tts-worker.d.ts +2 -0
- package/dist/types/tts/vocalizer.d.ts +41 -0
- package/dist/types/tts/wav.d.ts +8 -0
- package/dist/types/tui/code-cell.d.ts +0 -2
- package/dist/types/tui/hyperlink.d.ts +13 -7
- package/dist/types/tui/output-block.d.ts +16 -22
- package/dist/types/tui/status-line.d.ts +3 -0
- package/dist/types/utils/block-context.d.ts +35 -0
- package/dist/types/utils/changelog.d.ts +8 -0
- package/dist/types/utils/clipboard.d.ts +4 -3
- package/dist/types/utils/enhanced-paste.d.ts +20 -0
- package/dist/types/utils/file-mentions.d.ts +7 -0
- package/dist/types/utils/git.d.ts +22 -3
- package/dist/types/utils/image-loading.d.ts +30 -1
- package/dist/types/utils/session-color.d.ts +15 -3
- package/dist/types/utils/thinking-display.d.ts +17 -0
- package/dist/types/utils/title-generator.d.ts +3 -2
- package/dist/types/utils/tool-choice.d.ts +8 -0
- package/dist/types/utils/tools-manager.d.ts +2 -1
- package/dist/types/web/kagi.d.ts +2 -2
- package/dist/types/web/parallel.d.ts +3 -0
- package/dist/types/web/scrapers/github.d.ts +22 -0
- package/dist/types/web/scrapers/readthedocs.d.ts +3 -0
- package/dist/types/web/scrapers/types.d.ts +12 -0
- package/dist/types/web/search/index.d.ts +1 -1
- package/dist/types/web/search/providers/anthropic.d.ts +2 -1
- package/dist/types/web/search/providers/base.d.ts +2 -1
- package/dist/types/web/search/providers/brave.d.ts +2 -1
- package/dist/types/web/search/providers/codex.d.ts +2 -1
- package/dist/types/web/search/providers/exa.d.ts +2 -1
- package/dist/types/web/search/providers/gemini.d.ts +10 -6
- package/dist/types/web/search/providers/jina.d.ts +7 -2
- package/dist/types/web/search/providers/kagi.d.ts +7 -2
- package/dist/types/web/search/providers/kimi.d.ts +7 -2
- package/dist/types/web/search/providers/parallel.d.ts +2 -1
- package/dist/types/web/search/providers/perplexity.d.ts +10 -2
- package/dist/types/web/search/providers/searxng.d.ts +2 -1
- package/dist/types/web/search/providers/synthetic.d.ts +7 -3
- package/dist/types/web/search/providers/tavily.d.ts +2 -1
- package/dist/types/web/search/providers/zai.d.ts +2 -1
- package/dist/types/web/search/types.d.ts +1 -1
- package/examples/extensions/api-demo.ts +2 -2
- package/package.json +41 -15
- package/scripts/bench-guard.ts +71 -0
- package/scripts/build-binary.ts +24 -25
- package/scripts/bundle-dist.ts +97 -0
- package/scripts/generate-share-viewer.ts +34 -0
- package/scripts/prometheus +42 -0
- package/scripts/prometheus.ts +20 -0
- package/src/async/index.ts +0 -1
- package/src/async/job-manager.ts +106 -3
- package/src/auto-thinking/classifier.ts +2 -1
- package/src/autolearn/controller.ts +139 -0
- package/src/autolearn/managed-skills.ts +257 -0
- package/src/autoresearch/dashboard.ts +1 -1
- package/src/autoresearch/prompt-setup.md +6 -6
- package/src/autoresearch/prompt.md +6 -6
- package/src/autoresearch/state.ts +1 -1
- package/src/autoresearch/storage.ts +2 -1
- package/src/autoresearch/tools/init-experiment.ts +1 -1
- package/src/autoresearch/tools/log-experiment.ts +1 -1
- package/src/autoresearch/tools/run-experiment.ts +1 -1
- package/src/autoresearch/tools/update-notes.ts +1 -1
- package/src/autoresearch/types.ts +1 -1
- package/src/capability/context-file.ts +0 -14
- package/src/capability/fs.ts +10 -0
- package/src/capability/index.ts +1 -6
- package/src/capability/mcp.ts +1 -0
- package/src/capability/rule-buckets.ts +4 -2
- package/src/capability/rule.ts +10 -1
- package/src/capability/types.ts +0 -4
- package/src/cli/args.ts +66 -13
- package/src/cli/auth-broker-cli.ts +6 -7
- package/src/cli/auth-gateway-cli.ts +8 -9
- package/src/cli/bench-cli.ts +437 -0
- package/src/cli/claude-trace-cli.ts +28 -50
- package/src/cli/completion-gen.ts +28 -28
- package/src/cli/dry-balance-cli.ts +56 -23
- package/src/cli/gallery-cli.ts +231 -0
- package/src/cli/gallery-fixtures/agentic.ts +407 -0
- package/src/cli/gallery-fixtures/codeintel.ts +187 -0
- package/src/cli/gallery-fixtures/edit.ts +194 -0
- package/src/cli/gallery-fixtures/fs.ts +220 -0
- package/src/cli/gallery-fixtures/index.ts +40 -0
- package/src/cli/gallery-fixtures/interaction.ts +49 -0
- package/src/cli/gallery-fixtures/memory.ts +81 -0
- package/src/cli/gallery-fixtures/misc.ts +250 -0
- package/src/cli/gallery-fixtures/search.ts +213 -0
- package/src/cli/gallery-fixtures/shell.ts +167 -0
- package/src/cli/gallery-fixtures/types.ts +57 -0
- package/src/cli/gallery-fixtures/web.ts +158 -0
- package/src/cli/gallery-screenshot.ts +279 -0
- package/src/cli/grievances-cli.ts +1 -1
- package/src/cli/list-models.ts +16 -174
- package/src/cli/models-cli.ts +429 -0
- package/src/cli/session-picker.ts +2 -1
- package/src/cli/setup-cli.ts +148 -47
- package/src/cli/setup-model-picker.ts +43 -0
- package/src/cli/startup-cwd.ts +68 -0
- package/src/cli/update-cli.ts +144 -272
- package/src/cli/usage-cli.ts +774 -0
- package/src/cli-commands.ts +36 -0
- package/src/cli.ts +141 -32
- package/src/collab/crypto.ts +63 -0
- package/src/collab/guest.ts +451 -0
- package/src/collab/host.ts +565 -0
- package/src/collab/protocol.ts +241 -0
- package/src/collab/relay-client.ts +216 -0
- package/src/commands/bench.ts +42 -0
- package/src/commands/complete.ts +1 -1
- package/src/commands/gallery.ts +52 -0
- package/src/commands/install.ts +1 -1
- package/src/commands/join.ts +39 -0
- package/src/commands/launch.ts +8 -4
- package/src/commands/models.ts +61 -0
- package/src/commands/read.ts +6 -3
- package/src/commands/say.ts +102 -0
- package/src/commands/setup.ts +1 -1
- package/src/commands/token.ts +89 -0
- package/src/commands/usage.ts +43 -0
- package/src/commit/agentic/agent.ts +2 -1
- package/src/commit/agentic/tools/analyze-file.ts +42 -20
- package/src/commit/agentic/tools/git-file-diff.ts +1 -1
- package/src/commit/agentic/tools/git-hunk.ts +1 -1
- package/src/commit/agentic/tools/git-overview.ts +1 -1
- package/src/commit/agentic/tools/propose-changelog.ts +1 -1
- package/src/commit/agentic/tools/propose-commit.ts +1 -1
- package/src/commit/agentic/tools/recent-commits.ts +1 -1
- package/src/commit/agentic/tools/schemas.ts +1 -1
- package/src/commit/agentic/tools/split-commit.ts +9 -2
- package/src/commit/analysis/conventional.ts +2 -2
- package/src/commit/analysis/summary.ts +3 -3
- package/src/commit/changelog/generate.ts +3 -3
- package/src/commit/changelog/index.ts +2 -2
- package/src/commit/map-reduce/index.ts +3 -3
- package/src/commit/map-reduce/map-phase.ts +2 -2
- package/src/commit/map-reduce/reduce-phase.ts +2 -2
- package/src/commit/model-selection.ts +35 -12
- package/src/commit/pipeline.ts +4 -4
- package/src/commit/shared-llm.ts +1 -1
- package/src/config/api-key-resolver.ts +67 -0
- package/src/config/append-only-context-mode.ts +6 -12
- package/src/config/keybindings.ts +9 -4
- package/src/config/mcp-schema.json +4 -0
- package/src/config/model-discovery.ts +574 -0
- package/src/config/model-equivalence.ts +5 -4
- package/src/config/model-registry.ts +659 -1093
- package/src/config/model-resolver.ts +374 -174
- package/src/config/model-roles.ts +88 -0
- package/src/config/models-config-schema.ts +61 -9
- package/src/config/models-config.ts +130 -0
- package/src/config/settings-schema.ts +1441 -387
- package/src/config/settings.ts +261 -69
- package/src/dap/client.ts +138 -53
- package/src/dap/config.ts +41 -2
- package/src/dap/defaults.json +1 -0
- package/src/dap/session.ts +263 -161
- package/src/dap/types.ts +10 -0
- package/src/debug/index.ts +50 -60
- package/src/debug/log-viewer.ts +1 -1
- package/src/debug/protocol-probe.ts +1 -1
- package/src/debug/raw-sse-buffer.ts +7 -4
- package/src/debug/raw-sse.ts +1 -1
- package/src/debug/report-bundle.ts +9 -0
- package/src/debug/terminal-info.ts +0 -3
- package/src/discovery/agents-md.ts +25 -21
- package/src/discovery/agents.ts +9 -15
- package/src/discovery/at-imports.ts +273 -0
- package/src/discovery/builtin-rules/index.ts +4 -0
- package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
- package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
- package/src/discovery/builtin.ts +45 -23
- package/src/discovery/claude-plugins.ts +44 -5
- package/src/discovery/helpers.ts +50 -9
- package/src/discovery/prometheus-extension-roots.ts +10 -10
- package/src/discovery/prometheus-plugins.ts +10 -10
- package/src/edit/diff.ts +191 -4
- package/src/edit/file-snapshot-store.ts +34 -1
- package/src/edit/hashline/block-resolver.ts +20 -1
- package/src/edit/hashline/diff.ts +123 -2
- package/src/edit/hashline/execute.ts +60 -4
- package/src/edit/hashline/filesystem.ts +2 -1
- package/src/edit/hashline/noop-loop-guard.ts +99 -0
- package/src/edit/hashline/params.ts +1 -1
- package/src/edit/index.ts +47 -18
- package/src/edit/modes/apply-patch.ts +1 -1
- package/src/edit/modes/patch.ts +59 -3
- package/src/edit/modes/replace.ts +58 -24
- package/src/edit/notebook.ts +22 -2
- package/src/edit/renderer.ts +315 -151
- package/src/eval/__tests__/agent-bridge.test.ts +105 -39
- package/src/eval/__tests__/budget-bridge.test.ts +1 -1
- package/src/eval/__tests__/completion-bridge.test.ts +412 -0
- package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
- package/src/eval/__tests__/js-context-manager.test.ts +241 -0
- package/src/eval/__tests__/llm-bridge.test.ts +6 -4
- package/src/eval/__tests__/shared-executors.test.ts +34 -92
- package/src/eval/agent-bridge.ts +39 -23
- package/src/eval/backend.ts +15 -2
- package/src/eval/bridge-timeout.ts +1 -1
- package/src/eval/completion-bridge.ts +203 -0
- package/src/eval/idle-timeout.ts +3 -10
- package/src/eval/js/context-manager.ts +108 -31
- package/src/eval/js/executor.ts +9 -2
- package/src/eval/js/index.ts +7 -3
- package/src/eval/js/shared/helpers.ts +59 -13
- package/src/eval/js/shared/local-module-loader.ts +2 -2
- package/src/eval/js/shared/prelude.txt +167 -30
- package/src/eval/js/shared/rewrite-imports.ts +58 -34
- package/src/eval/js/shared/runtime.ts +24 -16
- package/src/eval/js/tool-bridge.ts +4 -0
- package/src/eval/js/worker-core.ts +1 -0
- package/src/eval/js/worker-entry.ts +6 -0
- package/src/eval/js/worker-protocol.ts +6 -0
- package/src/eval/llm-bridge.ts +2 -1
- package/src/eval/py/__tests__/prelude.test.ts +19 -0
- package/src/eval/py/executor.ts +70 -26
- package/src/eval/py/index.ts +13 -4
- package/src/eval/py/kernel.ts +48 -9
- package/src/eval/py/prelude.py +73 -24
- package/src/eval/py/runner.py +133 -28
- package/src/eval/py/runtime.ts +38 -1
- package/src/exa/index.ts +1 -26
- package/src/exa/mcp-client.ts +10 -10
- package/src/exa/types.ts +0 -97
- package/src/exec/bash-executor.ts +104 -7
- package/src/export/custom-share.ts +1 -1
- package/src/export/html/index.ts +119 -17
- package/src/export/html/share-loader.js +102 -0
- package/src/export/html/template-js.ts +6 -0
- package/src/export/html/template.css +745 -459
- package/src/export/html/template.css.d.ts +2 -0
- package/src/export/html/template.html +6 -3
- package/src/export/html/template.js +277 -891
- package/src/export/html/tool-views.generated.d.ts +2 -0
- package/src/export/html/tool-views.generated.js +38 -0
- package/src/export/share.ts +269 -0
- package/src/export/ttsr.ts +122 -1
- package/src/extensibility/custom-commands/loader.ts +7 -4
- package/src/extensibility/custom-commands/types.ts +9 -4
- package/src/extensibility/custom-tools/loader.ts +51 -23
- package/src/extensibility/custom-tools/types.ts +16 -8
- package/src/extensibility/extensions/get-commands-handler.ts +2 -1
- package/src/extensibility/extensions/index.ts +1 -0
- package/src/extensibility/extensions/loader.ts +70 -20
- package/src/extensibility/extensions/model-api.ts +41 -0
- package/src/extensibility/extensions/runner.ts +12 -2
- package/src/extensibility/extensions/types.ts +83 -11
- package/src/extensibility/extensions/wrapper.ts +41 -5
- package/src/extensibility/hooks/index.ts +2 -1
- package/src/extensibility/hooks/loader.ts +6 -3
- package/src/extensibility/hooks/types.ts +11 -5
- package/src/extensibility/{legacy-pi-ai-shim.ts → legacy-package-ai-shim.ts} +2 -2
- package/src/extensibility/plugins/doctor.ts +1 -2
- package/src/extensibility/plugins/installer.ts +2 -2
- package/src/extensibility/plugins/{legacy-pi-compat.ts → legacy-package-compat.ts} +165 -77
- package/src/extensibility/plugins/loader.ts +34 -23
- package/src/extensibility/plugins/manager.ts +226 -95
- package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
- package/src/extensibility/plugins/types.ts +3 -3
- package/src/extensibility/shared-events.ts +3 -3
- package/src/extensibility/skills.ts +113 -9
- package/src/extensibility/slash-commands.ts +1 -97
- package/src/goals/guided-setup.ts +133 -0
- package/src/goals/state.ts +1 -1
- package/src/goals/tools/goal-tool.ts +38 -28
- package/src/hindsight/bank.ts +17 -2
- package/src/hindsight/client.ts +27 -2
- package/src/hindsight/mental-models.ts +59 -12
- package/src/hindsight/state.ts +12 -3
- package/src/hindsight/transcript.ts +1 -1
- package/src/index.ts +5 -0
- package/src/internal-urls/artifact-protocol.ts +11 -2
- package/src/internal-urls/docs-index.generated.ts +9 -7
- package/src/internal-urls/history-protocol.ts +113 -0
- package/src/internal-urls/index.ts +1 -0
- package/src/internal-urls/issue-pr-protocol.ts +22 -9
- package/src/internal-urls/local-protocol.ts +42 -7
- package/src/internal-urls/memory-protocol.ts +4 -31
- package/src/internal-urls/router.ts +3 -1
- package/src/internal-urls/types.ts +1 -1
- package/src/irc/bus.ts +303 -0
- package/src/lib/xai-http.ts +3 -3
- package/src/lsp/client.ts +245 -104
- package/src/lsp/clients/biome-client.ts +101 -39
- package/src/lsp/clients/lsp-linter-client.ts +2 -10
- package/src/lsp/config.ts +15 -5
- package/src/lsp/defaults.json +6 -0
- package/src/lsp/edits.ts +143 -95
- package/src/lsp/format-options.ts +119 -0
- package/src/lsp/index.ts +233 -93
- package/src/lsp/render.ts +11 -35
- package/src/lsp/types.ts +13 -1
- package/src/lsp/utils.ts +31 -12
- package/src/main.ts +396 -216
- package/src/mcp/config-writer.ts +7 -3
- package/src/mcp/json-rpc.ts +35 -5
- package/src/mcp/manager.ts +31 -16
- package/src/mcp/oauth-discovery.ts +34 -4
- package/src/mcp/oauth-flow.ts +61 -8
- package/src/mcp/render.ts +7 -1
- package/src/mcp/startup-events.ts +21 -0
- package/src/mcp/tool-bridge.ts +2 -0
- package/src/mcp/transports/stdio.ts +224 -4
- package/src/mcp/types.ts +2 -0
- package/src/memories/index.ts +174 -1128
- package/src/memories/storage.ts +2 -41
- package/src/memory-backend/index.ts +14 -1
- package/src/memory-backend/local-backend.ts +18 -3
- package/src/memory-backend/off-backend.ts +9 -0
- package/src/memory-backend/resolve.ts +4 -6
- package/src/memory-backend/runtime.ts +66 -0
- package/src/memory-backend/types.ts +82 -2
- package/src/mnemopi/backend.ts +220 -28
- package/src/mnemopi/config.ts +138 -33
- package/src/mnemopi/state.ts +91 -11
- package/src/modes/acp/acp-agent.ts +149 -142
- package/src/modes/acp/acp-event-mapper.ts +5 -1
- package/src/modes/components/agent-dashboard.ts +17 -11
- package/src/modes/components/agent-hub.ts +1346 -0
- package/src/modes/components/assistant-message.ts +190 -80
- package/src/modes/components/bash-execution.ts +1 -1
- package/src/modes/components/btw-panel.ts +5 -1
- package/src/modes/components/chat-block.ts +111 -0
- package/src/modes/components/collab-prompt-message.ts +30 -0
- package/src/modes/components/compaction-summary-message.ts +168 -33
- package/src/modes/components/copy-selector.ts +2 -45
- package/src/modes/components/custom-editor.test.ts +96 -0
- package/src/modes/components/custom-editor.ts +405 -118
- package/src/modes/components/custom-message.ts +1 -3
- package/src/modes/components/diff.ts +13 -2
- package/src/modes/components/dynamic-border.ts +12 -3
- package/src/modes/components/execution-shared.ts +1 -2
- package/src/modes/components/extensions/extension-dashboard.ts +8 -5
- package/src/modes/components/extensions/extension-list.ts +1 -1
- package/src/modes/components/extensions/inspector-panel.ts +7 -3
- package/src/modes/components/extensions/state-manager.ts +36 -41
- package/src/modes/components/footer.ts +4 -2
- package/src/modes/components/history-search.ts +1 -1
- package/src/modes/components/hook-editor.ts +8 -0
- package/src/modes/components/hook-input.ts +8 -0
- package/src/modes/components/hook-message.ts +1 -3
- package/src/modes/components/hook-selector.ts +6 -7
- package/src/modes/components/index.ts +1 -0
- package/src/modes/components/late-diagnostics-message.ts +60 -0
- package/src/modes/components/login-dialog.ts +1 -1
- package/src/modes/components/logout-account-selector.ts +130 -0
- package/src/modes/components/mcp-add-wizard.ts +14 -1
- package/src/modes/components/model-selector.ts +177 -75
- package/src/modes/components/oauth-selector.ts +102 -16
- package/src/modes/components/overlay-box.ts +108 -0
- package/src/modes/components/plan-review-overlay.ts +845 -0
- package/src/modes/components/plan-toc.ts +138 -0
- package/src/modes/components/plugin-settings.ts +22 -5
- package/src/modes/components/read-tool-group.ts +442 -39
- package/src/modes/components/reset-usage-selector.ts +161 -0
- package/src/modes/components/segment-track.ts +44 -7
- package/src/modes/components/session-selector.ts +97 -37
- package/src/modes/components/settings-defs.ts +28 -6
- package/src/modes/components/settings-selector.ts +541 -93
- package/src/modes/components/skill-message.ts +0 -1
- package/src/modes/components/snapcompact-shape-preview-doc.md +11 -0
- package/src/modes/components/snapcompact-shape-preview.ts +193 -0
- package/src/modes/components/{status-line.ts → status-line/component.ts} +205 -168
- package/src/modes/components/status-line/index.ts +1 -0
- package/src/modes/components/status-line/presets.ts +3 -3
- package/src/modes/components/status-line/segments.ts +26 -7
- package/src/modes/components/status-line/types.ts +40 -9
- package/src/modes/components/tiny-title-download-progress.ts +1 -1
- package/src/modes/components/tips.txt +7 -3
- package/src/modes/components/todo-reminder.ts +0 -2
- package/src/modes/components/tool-execution.ts +236 -103
- package/src/modes/components/transcript-container.ts +724 -99
- package/src/modes/components/tree-selector.ts +19 -4
- package/src/modes/components/ttsr-notification.ts +72 -30
- package/src/modes/components/usage-row.ts +18 -0
- package/src/modes/components/user-message-selector.ts +1 -1
- package/src/modes/components/user-message.ts +28 -12
- package/src/modes/components/visual-truncate.ts +1 -1
- package/src/modes/components/welcome.ts +80 -22
- package/src/modes/controllers/command-controller-shared.ts +7 -6
- package/src/modes/controllers/command-controller.ts +210 -180
- package/src/modes/controllers/event-controller.ts +352 -142
- package/src/modes/controllers/extension-ui-controller.ts +167 -208
- package/src/modes/controllers/input-controller.ts +778 -162
- package/src/modes/controllers/mcp-command-controller.ts +232 -80
- package/src/modes/controllers/selector-controller.ts +284 -145
- package/src/modes/controllers/session-focus-controller.ts +112 -0
- package/src/modes/controllers/ssh-command-controller.ts +2 -2
- package/src/modes/controllers/streaming-reveal.ts +295 -0
- package/src/modes/controllers/tan-command-controller.ts +173 -0
- package/src/modes/controllers/tool-args-reveal.ts +174 -0
- package/src/modes/gradient-highlight.ts +21 -9
- package/src/modes/image-references.ts +33 -7
- package/src/modes/index.ts +8 -25
- package/src/modes/interactive-mode.ts +840 -186
- package/src/modes/magic-keywords.ts +28 -6
- package/src/modes/markdown-prose.ts +1 -1
- package/src/modes/oauth-manual-input.ts +30 -3
- package/src/modes/rpc/rpc-client.ts +186 -3
- package/src/modes/rpc/rpc-mode.ts +318 -24
- package/src/modes/rpc/rpc-subagents.ts +265 -0
- package/src/modes/rpc/rpc-types.ts +111 -2
- package/src/modes/runtime-init.ts +28 -3
- package/src/modes/session-observer-registry.ts +72 -3
- package/src/modes/setup-version.ts +11 -0
- package/src/modes/setup-wizard/index.ts +16 -4
- package/src/modes/setup-wizard/lazy.ts +16 -0
- package/src/modes/setup-wizard/scenes/glyph.ts +25 -7
- package/src/modes/setup-wizard/scenes/providers.ts +45 -12
- package/src/modes/setup-wizard/scenes/sign-in.ts +14 -13
- package/src/modes/setup-wizard/scenes/splash.ts +1 -1
- package/src/modes/setup-wizard/scenes/theme.ts +29 -2
- package/src/modes/setup-wizard/scenes/types.ts +11 -2
- package/src/modes/setup-wizard/scenes/web-search.ts +26 -9
- package/src/modes/setup-wizard/wizard-overlay.ts +40 -3
- package/src/modes/shared.ts +2 -0
- package/src/modes/theme/defaults/dark-poimandres.json +1 -1
- package/src/modes/theme/defaults/light-poimandres.json +1 -1
- package/src/modes/theme/shimmer.ts +20 -9
- package/src/modes/theme/theme-schema.json +1 -1
- package/src/modes/theme/theme.ts +342 -82
- package/src/modes/types.ts +60 -18
- package/src/modes/utils/context-usage.ts +88 -8
- package/src/modes/utils/copy-targets.ts +133 -27
- package/src/modes/utils/hotkeys-markdown.ts +3 -2
- package/src/modes/utils/ui-helpers.ts +191 -110
- package/src/modes/workflow.ts +10 -10
- package/src/plan-mode/approved-plan.ts +66 -43
- package/src/plan-mode/plan-protection.ts +4 -4
- package/src/priority.json +5 -1
- package/src/prompts/agents/designer.md +1 -1
- package/src/prompts/agents/explore.md +3 -3
- package/src/prompts/agents/librarian.md +2 -3
- package/src/prompts/agents/oracle.md +2 -2
- package/src/prompts/agents/plan.md +6 -6
- package/src/prompts/agents/reviewer.md +1 -1
- package/src/prompts/agents/task.md +6 -5
- package/src/prompts/bench.md +12 -0
- package/src/prompts/ci-green-request.md +5 -7
- package/src/prompts/goals/goal-budget-limit.md +2 -2
- package/src/prompts/goals/goal-continuation.md +4 -4
- package/src/prompts/goals/goal-mode-active.md +1 -1
- package/src/prompts/goals/guided-goal-interview.md +8 -0
- package/src/prompts/goals/guided-goal-system.md +12 -0
- package/src/prompts/memories/consolidation.md +2 -7
- package/src/prompts/memories/consolidation_system.md +4 -0
- package/src/prompts/memories/identity_review.md +2 -2
- package/src/prompts/memories/read-path.md +11 -10
- package/src/prompts/memories/stage_one_system.md +2 -2
- package/src/prompts/review-custom-request.md +1 -1
- package/src/prompts/system/agent-creation-architect.md +2 -2
- package/src/prompts/system/auto-continue.md +1 -1
- package/src/prompts/system/autolearn-guidance-learn.md +1 -0
- package/src/prompts/system/autolearn-guidance.md +7 -0
- package/src/prompts/system/autolearn-nudge.md +3 -0
- package/src/prompts/system/background-tan-dispatch.md +8 -0
- package/src/prompts/system/btw-user.md +2 -2
- package/src/prompts/system/commit-message-system.md +13 -1
- package/src/prompts/system/custom-system-prompt.md +1 -1
- package/src/prompts/system/eager-task.md +7 -0
- package/src/prompts/system/eager-todo.md +11 -6
- package/src/prompts/system/empty-stop-retry.md +4 -6
- package/src/prompts/system/irc-autoreply.md +6 -0
- package/src/prompts/system/irc-incoming.md +3 -4
- package/src/prompts/system/manual-continue.md +7 -0
- package/src/prompts/system/omfg-user.md +3 -4
- package/src/prompts/system/orchestrate-notice.md +10 -10
- package/src/prompts/system/personalities/default.md +26 -0
- package/src/prompts/system/personalities/friendly.md +17 -0
- package/src/prompts/system/personalities/pragmatic.md +15 -0
- package/src/prompts/system/plan-mode-active.md +70 -77
- package/src/prompts/system/plan-mode-approved.md +1 -1
- package/src/prompts/system/plan-mode-subagent.md +4 -5
- package/src/prompts/system/plan-mode-tool-decision-reminder.md +1 -1
- package/src/prompts/system/project-prompt.md +2 -2
- package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
- package/src/prompts/system/snapcompact-context-stub.md +1 -0
- package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
- package/src/prompts/system/snapcompact-system-stub.md +1 -0
- package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
- package/src/prompts/system/subagent-system-prompt.md +7 -8
- package/src/prompts/system/system-prompt.md +28 -57
- package/src/prompts/system/tiny-title-system.md +1 -1
- package/src/prompts/system/title-marker-instruction.md +1 -0
- package/src/prompts/system/title-system-marker.md +16 -0
- package/src/prompts/system/title-system.md +16 -3
- package/src/prompts/system/ttsr-tool-reminder.md +1 -1
- package/src/prompts/system/workflow-notice.md +4 -4
- package/src/prompts/tools/ast-edit.md +1 -1
- package/src/prompts/tools/ast-grep.md +2 -2
- package/src/prompts/tools/bash.md +16 -8
- package/src/prompts/tools/browser.md +33 -43
- package/src/prompts/tools/debug.md +1 -1
- package/src/prompts/tools/eval.md +31 -51
- package/src/prompts/tools/find.md +0 -1
- package/src/prompts/tools/github.md +8 -7
- package/src/prompts/tools/goal.md +1 -1
- package/src/prompts/tools/image-gen.md +1 -1
- package/src/prompts/tools/inspect-image-system.md +1 -1
- package/src/prompts/tools/irc.md +39 -31
- package/src/prompts/tools/job.md +2 -1
- package/src/prompts/tools/learn.md +7 -0
- package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
- package/src/prompts/tools/lsp.md +2 -2
- package/src/prompts/tools/manage-skill.md +9 -0
- package/src/prompts/tools/memory-edit.md +1 -1
- package/src/prompts/tools/patch.md +2 -2
- package/src/prompts/tools/read.md +31 -39
- package/src/prompts/tools/recall.md +1 -1
- package/src/prompts/tools/reflect.md +1 -1
- package/src/prompts/tools/render-mermaid.md +2 -2
- package/src/prompts/tools/replace.md +4 -10
- package/src/prompts/tools/rewind.md +2 -2
- package/src/prompts/tools/search-tool-bm25.md +1 -9
- package/src/prompts/tools/search.md +0 -1
- package/src/prompts/tools/ssh.md +0 -4
- package/src/prompts/tools/task-summary.md +5 -16
- package/src/prompts/tools/task.md +47 -31
- package/src/prompts/tools/todo.md +6 -3
- package/src/registry/agent-lifecycle.ts +218 -0
- package/src/registry/agent-registry.ts +46 -5
- package/src/sdk.ts +692 -219
- package/src/secrets/index.ts +8 -1
- package/src/secrets/obfuscator.ts +40 -19
- package/src/session/agent-session.ts +1577 -806
- package/src/session/agent-storage.ts +18 -9
- package/src/session/auth-broker-config.ts +30 -1
- package/src/session/auth-storage.ts +6 -0
- package/src/session/codex-auto-reset.ts +202 -0
- package/src/session/history-storage.ts +3 -2
- package/src/session/indexed-session-storage.ts +7 -10
- package/src/session/messages.ts +59 -95
- package/src/session/session-context.ts +352 -0
- package/src/session/session-dump-format.ts +12 -3
- package/src/session/session-entries.ts +194 -0
- package/src/session/session-history-format.ts +246 -0
- package/src/session/session-listing.ts +588 -0
- package/src/session/session-loader.ts +106 -0
- package/src/session/session-manager.ts +1003 -2920
- package/src/session/session-migrations.ts +78 -0
- package/src/session/session-paths.ts +193 -0
- package/src/session/session-persistence.ts +131 -0
- package/src/session/session-storage.ts +91 -30
- package/src/session/snapcompact-inline.ts +542 -0
- package/src/session/snapcompact-savings-journal.ts +113 -0
- package/src/session/streaming-output.ts +248 -11
- package/src/session/tool-choice-queue.ts +23 -11
- package/src/session/yield-queue.ts +20 -2
- package/src/slash-commands/acp-builtins.ts +25 -1
- package/src/slash-commands/available-commands.ts +105 -0
- package/src/slash-commands/builtin-registry.ts +575 -49
- package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
- package/src/slash-commands/helpers/context-report.ts +28 -1
- package/src/slash-commands/helpers/logout.ts +88 -0
- package/src/slash-commands/helpers/reset-usage.ts +66 -0
- package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
- package/src/slash-commands/helpers/usage-report.ts +38 -3
- package/src/slash-commands/types.ts +5 -9
- package/src/ssh/connection-manager.ts +27 -0
- package/src/ssh/ssh-executor.ts +60 -4
- package/src/stt/asr-client.ts +520 -0
- package/src/stt/asr-protocol.ts +65 -0
- package/src/stt/asr-worker.ts +790 -0
- package/src/stt/downloader.ts +107 -47
- package/src/stt/endpointer.ts +259 -0
- package/src/stt/index.ts +5 -1
- package/src/stt/models.ts +150 -0
- package/src/stt/recorder.ts +254 -67
- package/src/stt/stt-controller.ts +201 -22
- package/src/stt/transcriber.ts +37 -68
- package/src/stt/wav.ts +173 -0
- package/src/system-prompt.ts +52 -10
- package/src/task/agents.ts +3 -4
- package/src/task/commands.ts +3 -2
- package/src/task/discovery.ts +17 -24
- package/src/task/executor.ts +1054 -529
- package/src/task/index.ts +862 -757
- package/src/task/output-manager.ts +0 -11
- package/src/task/parallel.ts +3 -3
- package/src/task/prometheus-command.ts +2 -2
- package/src/task/render.ts +529 -182
- package/src/task/repair-args.ts +21 -9
- package/src/task/types.ts +144 -66
- package/src/task/worktree.ts +64 -56
- package/src/telemetry-export.ts +27 -9
- package/src/thinking.ts +9 -7
- package/src/tiny/models.ts +2 -2
- package/src/tiny/text.ts +5 -1
- package/src/tiny/title-client.ts +72 -20
- package/src/tiny/title-protocol.ts +1 -1
- package/src/tiny/worker.ts +23 -99
- package/src/tool-discovery/tool-index.ts +2 -0
- package/src/tools/archive-reader.ts +94 -2
- package/src/tools/ask.ts +234 -177
- package/src/tools/ast-edit.ts +136 -80
- package/src/tools/ast-grep.ts +41 -45
- package/src/tools/auto-generated-guard.ts +20 -3
- package/src/tools/bash-interactive.ts +28 -8
- package/src/tools/bash.ts +198 -35
- package/src/tools/browser/attach.ts +26 -7
- package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
- package/src/tools/browser/cmux/rpc.ts +156 -0
- package/src/tools/browser/cmux/socket-client.ts +309 -0
- package/src/tools/browser/launch.ts +11 -2
- package/src/tools/browser/readable.ts +19 -2
- package/src/tools/browser/registry.ts +52 -5
- package/src/tools/browser/render.ts +13 -5
- package/src/tools/browser/tab-protocol.ts +2 -0
- package/src/tools/browser/tab-supervisor.ts +256 -34
- package/src/tools/browser/tab-worker.ts +259 -91
- package/src/tools/browser.ts +44 -2
- package/src/tools/checkpoint.ts +1 -1
- package/src/tools/conflict-detect.ts +50 -4
- package/src/tools/debug.ts +27 -12
- package/src/tools/eval-render.ts +32 -35
- package/src/tools/eval.ts +26 -12
- package/src/tools/fetch.ts +450 -99
- package/src/tools/find.ts +182 -142
- package/src/tools/gh-cache-invalidation.ts +255 -0
- package/src/tools/gh-renderer.ts +104 -51
- package/src/tools/gh.ts +232 -37
- package/src/tools/github-cache.ts +97 -7
- package/src/tools/grouped-file-output.ts +159 -52
- package/src/tools/image-gen.ts +237 -132
- package/src/tools/index.ts +147 -26
- package/src/tools/inspect-image-renderer.ts +74 -45
- package/src/tools/inspect-image.ts +12 -6
- package/src/tools/irc.ts +626 -173
- package/src/tools/job.ts +106 -29
- package/src/tools/learn.ts +144 -0
- package/src/tools/manage-skill.ts +104 -0
- package/src/tools/memory-edit.ts +4 -4
- package/src/tools/memory-recall.ts +7 -9
- package/src/tools/memory-reflect.ts +5 -9
- package/src/tools/memory-render.ts +23 -6
- package/src/tools/memory-retain.ts +4 -4
- package/src/tools/path-utils.ts +102 -48
- package/src/tools/plan-mode-guard.ts +101 -40
- package/src/tools/read.ts +475 -120
- package/src/tools/render-mermaid.ts +1 -1
- package/src/tools/render-utils.ts +132 -76
- package/src/tools/renderers.ts +12 -1
- package/src/tools/report-tool-issue.ts +14 -6
- package/src/tools/resolve.ts +20 -3
- package/src/tools/review.ts +2 -2
- package/src/tools/search-tool-bm25.ts +37 -24
- package/src/tools/search.ts +233 -115
- package/src/tools/sqlite-reader.ts +26 -17
- package/src/tools/ssh.ts +20 -14
- package/src/tools/todo.ts +197 -191
- package/src/tools/tool-result.ts +8 -0
- package/src/tools/tool-timeouts.ts +1 -1
- package/src/tools/tts.ts +205 -74
- package/src/tools/write.ts +291 -155
- package/src/tools/yield.ts +10 -1
- package/src/tts/downloader.ts +64 -0
- package/src/tts/index.ts +8 -0
- package/src/tts/models.ts +137 -0
- package/src/tts/player.ts +137 -0
- package/src/tts/runtime.ts +21 -0
- package/src/tts/streaming-player.ts +266 -0
- package/src/tts/tts-client.ts +647 -0
- package/src/tts/tts-protocol.ts +60 -0
- package/src/tts/tts-worker.ts +505 -0
- package/src/tts/vocalizer.ts +162 -0
- package/src/tts/wav.ts +58 -0
- package/src/tui/code-cell.ts +2 -7
- package/src/tui/hyperlink.ts +40 -26
- package/src/tui/output-block.ts +60 -108
- package/src/tui/status-line.ts +5 -1
- package/src/utils/block-context.ts +312 -0
- package/src/utils/changelog.ts +27 -1
- package/src/utils/clipboard.ts +91 -22
- package/src/utils/commit-message-generator.ts +8 -3
- package/src/utils/enhanced-paste.ts +230 -0
- package/src/utils/file-mentions.ts +3 -1
- package/src/utils/git.ts +315 -15
- package/src/utils/image-loading.ts +65 -4
- package/src/utils/session-color.ts +83 -9
- package/src/utils/thinking-display.ts +37 -0
- package/src/utils/title-generator.ts +73 -10
- package/src/utils/tool-choice.ts +16 -0
- package/src/utils/tools-manager.ts +19 -1
- package/src/web/kagi.ts +28 -26
- package/src/web/parallel.ts +7 -3
- package/src/web/scrapers/arxiv.ts +1 -1
- package/src/web/scrapers/github.ts +351 -3
- package/src/web/scrapers/go-pkg.ts +1 -1
- package/src/web/scrapers/iacr.ts +1 -1
- package/src/web/scrapers/readthedocs.ts +1 -1
- package/src/web/scrapers/twitter.ts +2 -1
- package/src/web/scrapers/types.ts +87 -8
- package/src/web/scrapers/wikipedia.ts +1 -1
- package/src/web/scrapers/youtube.ts +9 -3
- package/src/web/search/index.ts +15 -2
- package/src/web/search/providers/anthropic.ts +62 -21
- package/src/web/search/providers/base.ts +2 -1
- package/src/web/search/providers/brave.ts +5 -2
- package/src/web/search/providers/codex.ts +87 -51
- package/src/web/search/providers/exa.ts +101 -10
- package/src/web/search/providers/gemini.ts +49 -24
- package/src/web/search/providers/jina.ts +15 -5
- package/src/web/search/providers/kagi.ts +9 -2
- package/src/web/search/providers/kimi.ts +45 -20
- package/src/web/search/providers/parallel.ts +39 -24
- package/src/web/search/providers/perplexity.ts +226 -63
- package/src/web/search/providers/searxng.ts +19 -3
- package/src/web/search/providers/synthetic.ts +16 -11
- package/src/web/search/providers/tavily.ts +12 -9
- package/src/web/search/providers/zai.ts +22 -9
- package/src/web/search/render.ts +59 -64
- package/src/web/search/types.ts +5 -1
- package/dist/types/discovery/context-files.d.ts +0 -17
- package/dist/types/exa/factory.d.ts +0 -13
- package/dist/types/exa/render.d.ts +0 -19
- package/dist/types/exa/researcher.d.ts +0 -9
- package/dist/types/exa/search.d.ts +0 -9
- package/dist/types/exa/websets.d.ts +0 -9
- package/dist/types/export/html/template.generated.d.ts +0 -1
- package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
- package/dist/types/modes/components/status-line.d.ts +0 -77
- package/dist/types/slash-commands/headless-plan.d.ts +0 -3
- package/dist/types/stt/setup.d.ts +0 -18
- package/scripts/generate-template.ts +0 -33
- package/src/discovery/context-files.ts +0 -49
- package/src/exa/factory.ts +0 -60
- package/src/exa/render.ts +0 -244
- package/src/exa/researcher.ts +0 -36
- package/src/exa/search.ts +0 -47
- package/src/exa/websets.ts +0 -248
- package/src/export/html/template.generated.ts +0 -2
- package/src/modes/components/session-observer-overlay.ts +0 -852
- package/src/slash-commands/headless-plan.ts +0 -142
- package/src/stt/setup.ts +0 -52
- package/src/stt/transcribe.py +0 -70
- /package/dist/types/extensibility/{legacy-pi-coding-agent-shim.d.ts → legacy-package-agent-shim.d.ts} +0 -0
- /package/src/extensibility/{legacy-pi-coding-agent-shim.ts → legacy-package-agent-shim.ts} +0 -0
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
Image,
|
|
9
9
|
ImageProtocol,
|
|
10
10
|
imageFallback,
|
|
11
|
+
type NativeScrollbackLiveRegion,
|
|
11
12
|
Spacer,
|
|
12
13
|
TERMINAL,
|
|
13
14
|
Text,
|
|
@@ -15,11 +16,11 @@ import {
|
|
|
15
16
|
} from "@prometheus-ai/tui";
|
|
16
17
|
import { getProjectDir, logger, sanitizeText } from "@prometheus-ai/utils";
|
|
17
18
|
import { EDIT_MODE_STRATEGIES, type EditMode, type PerFileDiffPreview } from "../../edit";
|
|
18
|
-
import { shimmerEnabled } from "../../modes/theme/shimmer";
|
|
19
19
|
import type { Theme } from "../../modes/theme/theme";
|
|
20
|
-
import { theme } from "../../modes/theme/theme";
|
|
20
|
+
import { getThemeEpoch, theme } from "../../modes/theme/theme";
|
|
21
21
|
import { BASH_DEFAULT_PREVIEW_LINES } from "../../tools/bash";
|
|
22
22
|
import { EVAL_DEFAULT_PREVIEW_LINES } from "../../tools/eval";
|
|
23
|
+
import { isWaitingPollDetails } from "../../tools/job";
|
|
23
24
|
import {
|
|
24
25
|
formatArgsInline,
|
|
25
26
|
JSON_TREE_MAX_DEPTH_COLLAPSED,
|
|
@@ -37,26 +38,6 @@ import { isFramedBlockComponent, renderStatusLine } from "../../tui";
|
|
|
37
38
|
import { sanitizeWithOptionalSixelPassthrough } from "../../utils/sixel";
|
|
38
39
|
import { renderDiff } from "./diff";
|
|
39
40
|
|
|
40
|
-
function ensureInvalidate(component: unknown): Component {
|
|
41
|
-
const c = component as { render: Component["render"]; invalidate?: () => void };
|
|
42
|
-
if (!c.invalidate) {
|
|
43
|
-
c.invalidate = () => {};
|
|
44
|
-
}
|
|
45
|
-
return c as Component;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function addBoxChild(box: Box, component: unknown): boolean {
|
|
49
|
-
const child = ensureInvalidate(component);
|
|
50
|
-
box.addChild(child);
|
|
51
|
-
return isFramedBlockComponent(child);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function setBoxPaddingForFramedBlock(box: Box, hasFramedBlock: boolean): void {
|
|
55
|
-
const padding = hasFramedBlock ? 0 : 1;
|
|
56
|
-
box.setPaddingX(padding);
|
|
57
|
-
box.setPaddingY(padding);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
41
|
/**
|
|
61
42
|
* Drop trailing removal/hunk-header lines that appear in a streaming diff
|
|
62
43
|
* before the matching `+added` lines have arrived. Without this, a partial
|
|
@@ -131,11 +112,23 @@ function getArgsWithStreamedTextInput(args: unknown): unknown {
|
|
|
131
112
|
return input === undefined ? args : { ...record, input };
|
|
132
113
|
}
|
|
133
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Transcript-side probe telling a block whether it is still inside the live
|
|
117
|
+
* (repaintable) region. Implemented by `TranscriptContainer`; injected rather
|
|
118
|
+
* than imported so the component stays decoupled from the transcript.
|
|
119
|
+
*/
|
|
120
|
+
export interface TranscriptLiveRegionProbe {
|
|
121
|
+
isBlockInLiveRegion(component: Component): boolean;
|
|
122
|
+
}
|
|
123
|
+
|
|
134
124
|
export interface ToolExecutionOptions {
|
|
135
125
|
snapshots?: SnapshotStore;
|
|
136
126
|
showImages?: boolean; // default: true (only used if terminal supports images)
|
|
137
127
|
editFuzzyThreshold?: number;
|
|
138
128
|
editAllowFuzzy?: boolean;
|
|
129
|
+
/** Live-region probe used to settle detached task progress once the block
|
|
130
|
+
* leaves the repaintable transcript region. */
|
|
131
|
+
liveRegion?: TranscriptLiveRegionProbe;
|
|
139
132
|
}
|
|
140
133
|
|
|
141
134
|
export interface ToolExecutionHandle {
|
|
@@ -153,13 +146,19 @@ export interface ToolExecutionHandle {
|
|
|
153
146
|
setExpanded(expanded: boolean): void;
|
|
154
147
|
}
|
|
155
148
|
|
|
156
|
-
/** Drive pending-tool redraws at
|
|
157
|
-
* The TUI
|
|
158
|
-
*
|
|
159
|
-
const SPINNER_RENDER_INTERVAL_MS =
|
|
149
|
+
/** Drive pending-tool redraws at 30fps for live tool headers and displaceable
|
|
150
|
+
* poll blocks. The TUI throttles at the same cadence, and static frames diff to
|
|
151
|
+
* a no-op redraw at ~zero cost. */
|
|
152
|
+
export const SPINNER_RENDER_INTERVAL_MS = 1000 / 30;
|
|
160
153
|
/** Advance the spinner glyph at its classic ~12.5fps step, decoupled from the
|
|
161
|
-
*
|
|
162
|
-
const SPINNER_GLYPH_ADVANCE_MS = 80;
|
|
154
|
+
* render cadence (mirrors `Loader`). */
|
|
155
|
+
export const SPINNER_GLYPH_ADVANCE_MS = 80;
|
|
156
|
+
|
|
157
|
+
/** Phase-locked spinner glyph index shared by every live tool block so parallel
|
|
158
|
+
* spinners advance in lockstep instead of each tracking its own start time. */
|
|
159
|
+
export function sharedSpinnerFrame(frameCount: number, now: number = performance.now()): number {
|
|
160
|
+
return frameCount > 0 ? Math.floor(now / SPINNER_GLYPH_ADVANCE_MS) % frameCount : 0;
|
|
161
|
+
}
|
|
163
162
|
|
|
164
163
|
// Stable per-instance counter so each tool execution's inline images get a
|
|
165
164
|
// graphics id that survives child re-creation (the image budget keys off it).
|
|
@@ -168,7 +167,7 @@ let toolExecutionInstanceSeq = 0;
|
|
|
168
167
|
/**
|
|
169
168
|
* Component that renders a tool call with its result (updateable)
|
|
170
169
|
*/
|
|
171
|
-
export class ToolExecutionComponent extends Container {
|
|
170
|
+
export class ToolExecutionComponent extends Container implements NativeScrollbackLiveRegion {
|
|
172
171
|
#contentBox: Box; // Used for custom tools and bash visual truncation
|
|
173
172
|
#contentText: Text; // For built-in tools (with its own padding/bg)
|
|
174
173
|
#multiFileBoxes: (Box | Spacer)[] = []; // Extra boxes for multi-file edit results
|
|
@@ -184,6 +183,22 @@ export class ToolExecutionComponent extends Container {
|
|
|
184
183
|
#editAllowFuzzy: boolean | undefined;
|
|
185
184
|
#snapshots?: SnapshotStore;
|
|
186
185
|
#isPartial = true;
|
|
186
|
+
#resultVersion = 0;
|
|
187
|
+
#lastDisplayKey: string | undefined;
|
|
188
|
+
// Bumped whenever a render input that #rebuildDisplay consumes but the memo
|
|
189
|
+
// key cannot cheaply hash changes: streamed call args, the async edit-diff
|
|
190
|
+
// preview, and Kitty PNG conversions. Folded into the dirty key so those
|
|
191
|
+
// updates are not swallowed by the memo (see #updateDisplay).
|
|
192
|
+
#displayInputVersion = 0;
|
|
193
|
+
// Set once #rebuildDisplay has populated the display. Replaces a
|
|
194
|
+
// #contentBox.children.length probe so the memo fast-path also covers the
|
|
195
|
+
// #contentText fallback path (which leaves #contentBox empty).
|
|
196
|
+
#displayBuilt = false;
|
|
197
|
+
// Number of Image children the last rebuild emitted. Only when this is > 0 does
|
|
198
|
+
// the memo key fold in viewport-dependent image sizing (resolveImageOptions),
|
|
199
|
+
// so a terminal resize re-shapes image-bearing results to rescale them without
|
|
200
|
+
// forcing the common image-free result to re-shape on every resize tick.
|
|
201
|
+
#renderedImageCount = 0;
|
|
187
202
|
#tool?: AgentTool;
|
|
188
203
|
#ui: TUI;
|
|
189
204
|
#cwd: string;
|
|
@@ -204,7 +219,6 @@ export class ToolExecutionComponent extends Container {
|
|
|
204
219
|
// Spinner animation for partial task results
|
|
205
220
|
#spinnerFrame?: number;
|
|
206
221
|
#spinnerInterval?: NodeJS.Timeout;
|
|
207
|
-
#lastSpinnerAdvanceAt = 0;
|
|
208
222
|
// Todo write completion strikethrough reveal animation
|
|
209
223
|
#todoStrikeInterval?: NodeJS.Timeout;
|
|
210
224
|
// Track if args are still being streamed (for edit/write spinner)
|
|
@@ -214,6 +228,19 @@ export class ToolExecutionComponent extends Container {
|
|
|
214
228
|
// sealed the block stays in the transcript's repaintable live region so a
|
|
215
229
|
// late result still repaints instead of stranding the streaming preview.
|
|
216
230
|
#sealed = false;
|
|
231
|
+
// A `job` poll result whose watched jobs are all still running. Such a
|
|
232
|
+
// block never finalizes (stays in the transcript live region) so a
|
|
233
|
+
// follow-up `job` call can displace it instead of stacking another
|
|
234
|
+
// "waiting on N jobs" frame. Cleared by `seal()`.
|
|
235
|
+
#displaceable = false;
|
|
236
|
+
// Probe into the owning transcript (absent outside the interactive
|
|
237
|
+
// transcript, e.g. in tests): whether this block is still repaintable.
|
|
238
|
+
#liveRegion?: TranscriptLiveRegionProbe;
|
|
239
|
+
// One-way latch for a detached (`async.state === "running"`) task block
|
|
240
|
+
// that left the transcript live region: its rows are commit-eligible
|
|
241
|
+
// history, so progress renders static gray and further partial snapshots are
|
|
242
|
+
// dropped (see #maybeFreezeBackgroundTask).
|
|
243
|
+
#backgroundTaskFrozen = false;
|
|
217
244
|
#renderState: {
|
|
218
245
|
spinnerFrame?: number;
|
|
219
246
|
expanded: boolean;
|
|
@@ -240,16 +267,19 @@ export class ToolExecutionComponent extends Container {
|
|
|
240
267
|
this.#editFuzzyThreshold = options.editFuzzyThreshold;
|
|
241
268
|
this.#editAllowFuzzy = options.editAllowFuzzy;
|
|
242
269
|
this.#snapshots = options.snapshots;
|
|
270
|
+
this.#liveRegion = options.liveRegion;
|
|
243
271
|
this.#tool = tool;
|
|
244
272
|
this.#ui = ui;
|
|
245
273
|
this.#cwd = cwd;
|
|
246
274
|
this.#args = args;
|
|
247
275
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
//
|
|
251
|
-
|
|
252
|
-
|
|
276
|
+
// Always create both - contentBox for custom tools/bash/tools with renderers, contentText for other built-ins.
|
|
277
|
+
// paddingY is 1 so background-tinted blocks (custom/extension tools and the
|
|
278
|
+
// generic fallback) get top/bottom breathing room. TranscriptContainer
|
|
279
|
+
// strips PLAIN-blank edges, so framed/minimal blocks (no bg set) drop these
|
|
280
|
+
// lines and keep their tight spacing — only tinted lines survive.
|
|
281
|
+
this.#contentBox = new Box(0, 1);
|
|
282
|
+
this.#contentText = new Text("", 1, 1);
|
|
253
283
|
|
|
254
284
|
// Use Box for custom tools or built-in tools that have renderers
|
|
255
285
|
const hasRenderer = toolName in toolRenderers;
|
|
@@ -273,6 +303,7 @@ export class ToolExecutionComponent extends Container {
|
|
|
273
303
|
// signals "nothing meaningful changed" and the renderer can skip.
|
|
274
304
|
if (args === this.#args) return;
|
|
275
305
|
this.#args = args;
|
|
306
|
+
this.#displayInputVersion++;
|
|
276
307
|
this.#updateSpinnerAnimation();
|
|
277
308
|
this.#editDiffInFlight = this.#runPreviewDiff();
|
|
278
309
|
this.#updateDisplay();
|
|
@@ -357,6 +388,7 @@ export class ToolExecutionComponent extends Container {
|
|
|
357
388
|
if (controller.signal.aborted) return;
|
|
358
389
|
if (previews) {
|
|
359
390
|
this.#editDiffPreview = isStreaming ? stabilizeStreamingPreviews(previews) : previews;
|
|
391
|
+
this.#displayInputVersion++;
|
|
360
392
|
this.#updateDisplay();
|
|
361
393
|
this.#ui.requestRender();
|
|
362
394
|
}
|
|
@@ -375,8 +407,23 @@ export class ToolExecutionComponent extends Container {
|
|
|
375
407
|
isPartial = false,
|
|
376
408
|
_toolCallId?: string,
|
|
377
409
|
): void {
|
|
410
|
+
// A detached task spawn keeps streaming progress snapshots after the
|
|
411
|
+
// block froze (left the transcript live region). Drop them: the rows are
|
|
412
|
+
// static gray history now, and repainting would rewrite rows the engine
|
|
413
|
+
// may already have committed to native scrollback. The terminal snapshot
|
|
414
|
+
// (async completed/failed → isPartial=false) still applies so a block
|
|
415
|
+
// that is still on screen settles on real results.
|
|
416
|
+
if (isPartial && this.#toolName === "task" && this.#maybeFreezeBackgroundTask()) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
378
419
|
this.#result = result;
|
|
420
|
+
this.#resultVersion++;
|
|
379
421
|
this.#isPartial = isPartial;
|
|
422
|
+
// A `job` poll that found every watched job still running is transient
|
|
423
|
+
// "still waiting" chrome; keep the block displaceable so the next `job`
|
|
424
|
+
// call replaces it instead of stacking another waiting frame (see the
|
|
425
|
+
// event controller's displaceable-poll bookkeeping).
|
|
426
|
+
this.#displaceable = this.#toolName === "job" && result.isError !== true && isWaitingPollDetails(result.details);
|
|
380
427
|
// When tool is complete, ensure args are marked complete so spinner stops
|
|
381
428
|
if (!isPartial) {
|
|
382
429
|
this.#argsComplete = true;
|
|
@@ -424,6 +471,7 @@ export class ToolExecutionComponent extends Container {
|
|
|
424
471
|
.toBase64()
|
|
425
472
|
.then(data => {
|
|
426
473
|
this.#convertedImages.set(index, { data, mimeType: "image/png" });
|
|
474
|
+
this.#displayInputVersion++;
|
|
427
475
|
this.#updateDisplay();
|
|
428
476
|
this.#ui.requestRender();
|
|
429
477
|
})
|
|
@@ -439,27 +487,27 @@ export class ToolExecutionComponent extends Container {
|
|
|
439
487
|
#updateSpinnerAnimation(): void {
|
|
440
488
|
// Spinner for: task tool with partial result, or edit/write while args streaming
|
|
441
489
|
const isStreamingArgs = !this.#argsComplete && (isEditLikeToolName(this.#toolName) || this.#toolName === "write");
|
|
442
|
-
const
|
|
443
|
-
this.#toolName === "task" &&
|
|
490
|
+
const isBackgroundAsyncRunning =
|
|
444
491
|
(this.#result?.details as { async?: { state?: string } } | undefined)?.async?.state === "running";
|
|
492
|
+
const isBackgroundAsyncTask = this.#toolName === "task" && isBackgroundAsyncRunning;
|
|
445
493
|
const isPartialTask = this.#isPartial && this.#toolName === "task" && !isBackgroundAsyncTask;
|
|
446
|
-
//
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
const needsSpinner = isStreamingArgs || isPartialTask ||
|
|
494
|
+
// Detached async task progress rows are static now; progress snapshots
|
|
495
|
+
// still call #maybeFreezeBackgroundTask before applying so rows settle
|
|
496
|
+
// once the block leaves the live region.
|
|
497
|
+
const needsSpinner = isStreamingArgs || isPartialTask || this.isDisplaceableBlock();
|
|
450
498
|
if (needsSpinner && !this.#spinnerInterval) {
|
|
451
|
-
|
|
499
|
+
const frameCount = theme.spinnerFrames.length;
|
|
500
|
+
const frame = sharedSpinnerFrame(frameCount);
|
|
501
|
+
this.#spinnerFrame = frame;
|
|
502
|
+
this.#renderState.spinnerFrame = frame;
|
|
452
503
|
this.#spinnerInterval = setInterval(() => {
|
|
504
|
+
// If a detached task interval from an older render path is still live,
|
|
505
|
+
// stop it the instant the block leaves the repaintable region.
|
|
506
|
+
if (this.#maybeFreezeBackgroundTask()) return;
|
|
453
507
|
const now = performance.now();
|
|
454
508
|
const frameCount = theme.spinnerFrames.length;
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
// 16ms and the differ drops no-op redraws, so the extra ticks are free.
|
|
458
|
-
if (frameCount > 0 && now - this.#lastSpinnerAdvanceAt >= SPINNER_GLYPH_ADVANCE_MS) {
|
|
459
|
-
this.#spinnerFrame = ((this.#spinnerFrame ?? -1) + 1) % frameCount;
|
|
460
|
-
this.#renderState.spinnerFrame = this.#spinnerFrame;
|
|
461
|
-
this.#lastSpinnerAdvanceAt = now;
|
|
462
|
-
}
|
|
509
|
+
this.#spinnerFrame = sharedSpinnerFrame(frameCount, now);
|
|
510
|
+
this.#renderState.spinnerFrame = this.#spinnerFrame;
|
|
463
511
|
this.#ui.requestRender();
|
|
464
512
|
}, SPINNER_RENDER_INTERVAL_MS);
|
|
465
513
|
} else if (!needsSpinner && this.#spinnerInterval) {
|
|
@@ -475,6 +523,26 @@ export class ToolExecutionComponent extends Container {
|
|
|
475
523
|
}
|
|
476
524
|
}
|
|
477
525
|
|
|
526
|
+
/**
|
|
527
|
+
* Freeze a detached (`async.state === "running"`) task block once it leaves
|
|
528
|
+
* the transcript's live region. Past that seam its rows are commit-eligible
|
|
529
|
+
* native-scrollback history: repaint the progress rows static gray and drop
|
|
530
|
+
* further partial snapshots. One-way — blocks never re-enter the live
|
|
531
|
+
* region. Returns whether the block is frozen.
|
|
532
|
+
*/
|
|
533
|
+
#maybeFreezeBackgroundTask(): boolean {
|
|
534
|
+
if (this.#backgroundTaskFrozen) return true;
|
|
535
|
+
if (this.#toolName !== "task" || this.#liveRegion === undefined) return false;
|
|
536
|
+
const asyncState = (this.#result?.details as { async?: { state?: string } } | undefined)?.async?.state;
|
|
537
|
+
if (asyncState !== "running") return false;
|
|
538
|
+
if (this.#liveRegion.isBlockInLiveRegion(this)) return false;
|
|
539
|
+
this.#backgroundTaskFrozen = true;
|
|
540
|
+
this.#updateSpinnerAnimation();
|
|
541
|
+
this.#updateDisplay();
|
|
542
|
+
this.#ui.requestRender();
|
|
543
|
+
return true;
|
|
544
|
+
}
|
|
545
|
+
|
|
478
546
|
#updateTodoStrikeAnimation(): void {
|
|
479
547
|
if (this.#toolName !== "todo" || this.#isPartial || this.#result?.isError) {
|
|
480
548
|
this.#stopTodoStrikeAnimation();
|
|
@@ -512,6 +580,17 @@ export class ToolExecutionComponent extends Container {
|
|
|
512
580
|
}
|
|
513
581
|
}
|
|
514
582
|
|
|
583
|
+
/**
|
|
584
|
+
* Standalone harnesses may mount a tool component directly under `TUI`
|
|
585
|
+
* instead of inside `TranscriptContainer`. In that shape the component must
|
|
586
|
+
* report its own live-region seam for provisional previews, or the core
|
|
587
|
+
* renderer treats it like shell output and commits tail-window edit/eval/bash
|
|
588
|
+
* previews to immutable native scrollback before the result replaces them.
|
|
589
|
+
*/
|
|
590
|
+
getNativeScrollbackLiveRegionStart(): number | undefined {
|
|
591
|
+
return !this.isTranscriptBlockFinalized() && !this.isTranscriptBlockCommitStable() ? 0 : undefined;
|
|
592
|
+
}
|
|
593
|
+
|
|
515
594
|
/**
|
|
516
595
|
* Whether this block has reached a terminal state for transcript freezing.
|
|
517
596
|
* Reports `false` while it can still visually change so the
|
|
@@ -523,6 +602,9 @@ export class ToolExecutionComponent extends Container {
|
|
|
523
602
|
isTranscriptBlockFinalized(): boolean {
|
|
524
603
|
if (this.#sealed) return true;
|
|
525
604
|
if (this.#result === undefined) return false;
|
|
605
|
+
// A displaceable waiting poll stays live: its rows are kept out of
|
|
606
|
+
// native scrollback so a follow-up `job` call can remove the block.
|
|
607
|
+
if (this.#displaceable) return false;
|
|
526
608
|
if (!this.#isPartial) return true;
|
|
527
609
|
// Partial result: a background async tool is accepted to freeze (the agent
|
|
528
610
|
// continues while it runs and would otherwise pin an unbounded live region);
|
|
@@ -530,6 +612,28 @@ export class ToolExecutionComponent extends Container {
|
|
|
530
612
|
return (this.#result.details as { async?: { state?: string } } | undefined)?.async?.state === "running";
|
|
531
613
|
}
|
|
532
614
|
|
|
615
|
+
/**
|
|
616
|
+
* Whether this still-live block's settled rows may enter native scrollback
|
|
617
|
+
* (see `FinalizableBlock.isTranscriptBlockCommitStable`). Renderers classify
|
|
618
|
+
* pending views by durability instead of by tool name: a provisional view is
|
|
619
|
+
* allowed to be useful on screen, but finalization may replace or re-anchor
|
|
620
|
+
* it wholesale, so committing any of its rows would strand stale preview
|
|
621
|
+
* bytes in immutable scrollback. Non-provisional views stream rows whose
|
|
622
|
+
* committed prefix survives the remaining transitions.
|
|
623
|
+
*/
|
|
624
|
+
isTranscriptBlockCommitStable(): boolean {
|
|
625
|
+
if (this.#displaceable) return false;
|
|
626
|
+
if (this.isTranscriptBlockFinalized()) return true;
|
|
627
|
+
// `provisionalPendingPreview` describes only the pending call preview.
|
|
628
|
+
// Once a streaming result exists, the result renderer is the live shape
|
|
629
|
+
// and can commit rows through the normal per-row durability checks.
|
|
630
|
+
if (this.#result !== undefined) return true;
|
|
631
|
+
const tool = this.#tool as { provisionalPendingPreview?: boolean | "collapsed" } | undefined;
|
|
632
|
+
const provisionalPendingPreview =
|
|
633
|
+
tool?.provisionalPendingPreview ?? toolRenderers[this.#toolName]?.provisionalPendingPreview;
|
|
634
|
+
return provisionalPendingPreview !== true && (provisionalPendingPreview !== "collapsed" || this.#expanded);
|
|
635
|
+
}
|
|
636
|
+
|
|
533
637
|
/**
|
|
534
638
|
* Mark the tool terminal even though no result arrived (the turn aborted or
|
|
535
639
|
* abandoned it) and stop animating, so it can freeze and stops pinning the
|
|
@@ -538,11 +642,26 @@ export class ToolExecutionComponent extends Container {
|
|
|
538
642
|
seal(): void {
|
|
539
643
|
if (this.#sealed) return;
|
|
540
644
|
this.#sealed = true;
|
|
645
|
+
this.#displaceable = false;
|
|
646
|
+
// A sealed detached task is abandoned history: settle its progress rows
|
|
647
|
+
// on static gray.
|
|
648
|
+
this.#backgroundTaskFrozen = true;
|
|
541
649
|
this.stopAnimation();
|
|
542
650
|
this.#updateDisplay();
|
|
543
651
|
this.#ui.requestRender();
|
|
544
652
|
}
|
|
545
653
|
|
|
654
|
+
/**
|
|
655
|
+
* Whether this block is a waiting `job` poll (every watched job still
|
|
656
|
+
* running) that has not been sealed. Such a block never finalized, so none
|
|
657
|
+
* of its rows entered native scrollback (the ticking spinner keeps the
|
|
658
|
+
* stable-prefix ratchet at zero) and the whole block can be removed when a
|
|
659
|
+
* follow-up `job` call supersedes it.
|
|
660
|
+
*/
|
|
661
|
+
isDisplaceableBlock(): boolean {
|
|
662
|
+
return this.#displaceable && !this.#sealed;
|
|
663
|
+
}
|
|
664
|
+
|
|
546
665
|
/**
|
|
547
666
|
* Stop spinner animation and cleanup resources.
|
|
548
667
|
*/
|
|
@@ -574,49 +693,72 @@ export class ToolExecutionComponent extends Container {
|
|
|
574
693
|
}
|
|
575
694
|
|
|
576
695
|
#updateDisplay(): void {
|
|
577
|
-
//
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
696
|
+
// `TERMINAL.imageProtocol` is resolved by an async capability probe during
|
|
697
|
+
// TUI startup, so a result rendered before it lands must re-shape once it
|
|
698
|
+
// does (it gates Image children vs text fallback in #rebuildDisplay); keyed
|
|
699
|
+
// here for the same reason markdown.ts keys its render cache on it.
|
|
700
|
+
const key = `${this.#resultVersion}|${this.#expanded}|${this.#isPartial}|${this.#spinnerFrame ?? "-"}|${this.#showImages}|${getThemeEpoch()}|${this.#displayInputVersion}|${this.#backgroundTaskFrozen}|${TERMINAL.imageProtocol ?? "-"}|${this.#imageSizeKey()}`;
|
|
701
|
+
if (key === this.#lastDisplayKey && this.#displayBuilt) return;
|
|
702
|
+
this.#lastDisplayKey = key;
|
|
703
|
+
|
|
704
|
+
this.#rebuildDisplay();
|
|
705
|
+
this.#displayBuilt = true;
|
|
706
|
+
}
|
|
583
707
|
|
|
708
|
+
// Viewport-/settings-dependent image sizing folded into the memo key only when
|
|
709
|
+
// the last rebuild actually emitted images, so a terminal resize re-shapes an
|
|
710
|
+
// image-bearing result (to rescale it) without re-shaping every image-free
|
|
711
|
+
// result on each resize tick.
|
|
712
|
+
#imageSizeKey(): string {
|
|
713
|
+
if (this.#renderedImageCount === 0) return "-";
|
|
714
|
+
const o = resolveImageOptions();
|
|
715
|
+
return `${o.maxWidthCells}:${o.maxHeightCells ?? "-"}`;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
#rebuildDisplay(): void {
|
|
584
719
|
// Sync shared mutable render state for component closures
|
|
585
720
|
this.#renderState.expanded = this.#expanded;
|
|
586
721
|
this.#renderState.isPartial = this.#isPartial;
|
|
587
722
|
this.#renderState.spinnerFrame = this.#spinnerFrame;
|
|
588
723
|
|
|
724
|
+
// Non-self-framing tools (custom/extension renderers and the generic
|
|
725
|
+
// fallback) get a padded, state-tinted block — built-ins that draw their
|
|
726
|
+
// own frame opt out below via the framed-component mark.
|
|
727
|
+
const stateBgKey = this.#isPartial ? "toolPendingBg" : this.#result?.isError ? "toolErrorBg" : "toolSuccessBg";
|
|
728
|
+
const stateBgFn = (t: string) => theme.bg(stateBgKey, t);
|
|
729
|
+
|
|
589
730
|
// Check for custom tool rendering
|
|
590
731
|
if (this.#tool && (this.#tool.renderCall || this.#tool.renderResult)) {
|
|
591
732
|
const tool = this.#tool;
|
|
592
733
|
const mergeCallAndResult = Boolean((tool as { mergeCallAndResult?: boolean }).mergeCallAndResult);
|
|
593
734
|
// Custom tools use Box for flexible component rendering
|
|
594
|
-
|
|
595
|
-
this.#contentBox.setBgFn(inline ? undefined : bgFn);
|
|
735
|
+
this.#contentBox.setBgFn(undefined);
|
|
596
736
|
this.#contentBox.clear();
|
|
597
|
-
let contentBoxHasFramedBlock = false;
|
|
598
737
|
// Mirror the built-in renderer branch so custom renderers (notably the
|
|
599
738
|
// task tool, whose live instance routes through here) receive the same
|
|
600
739
|
// render context — e.g. the `hasResult` flag that suppresses the task
|
|
601
740
|
// call preview once result lines exist.
|
|
602
741
|
this.#renderState.renderContext = this.#buildRenderContext();
|
|
603
742
|
|
|
604
|
-
// Render call component
|
|
743
|
+
// Render call component. The fallback label only stands in for a
|
|
744
|
+
// missing `renderCall`; when the call is intentionally suppressed
|
|
745
|
+
// (mergeCallAndResult once a result exists) we render nothing here so
|
|
746
|
+
// the result component isn't preceded by a redundant tool-name line.
|
|
605
747
|
const shouldRenderCall = !this.#result || !mergeCallAndResult;
|
|
606
|
-
if (shouldRenderCall
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
748
|
+
if (shouldRenderCall) {
|
|
749
|
+
if (tool.renderCall) {
|
|
750
|
+
try {
|
|
751
|
+
const callComponent = tool.renderCall(this.#getCallArgsForRender(), this.#renderState, theme);
|
|
752
|
+
if (callComponent) this.#contentBox.addChild(callComponent as Component);
|
|
753
|
+
} catch (err) {
|
|
754
|
+
logger.warn("Tool renderer failed", { tool: this.#toolName, error: String(err) });
|
|
755
|
+
// Fall back to default on error
|
|
756
|
+
this.#contentBox.addChild(new Text(theme.fg("toolTitle", theme.bold(this.#toolLabel)), 0, 0));
|
|
611
757
|
}
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
addBoxChild(this.#contentBox, new Text(theme.fg("toolTitle", theme.bold(this.#toolLabel)), 0, 0));
|
|
758
|
+
} else {
|
|
759
|
+
// No custom renderCall, show tool name
|
|
760
|
+
this.#contentBox.addChild(new Text(theme.fg("toolTitle", theme.bold(this.#toolLabel)), 0, 0));
|
|
616
761
|
}
|
|
617
|
-
} else {
|
|
618
|
-
// No custom renderCall, show tool name
|
|
619
|
-
addBoxChild(this.#contentBox, new Text(theme.fg("toolTitle", theme.bold(this.#toolLabel)), 0, 0));
|
|
620
762
|
}
|
|
621
763
|
|
|
622
764
|
// Render result component if we have a result
|
|
@@ -638,25 +780,27 @@ export class ToolExecutionComponent extends Container {
|
|
|
638
780
|
theme,
|
|
639
781
|
this.#args,
|
|
640
782
|
);
|
|
641
|
-
if (resultComponent)
|
|
642
|
-
contentBoxHasFramedBlock = addBoxChild(this.#contentBox, resultComponent) || contentBoxHasFramedBlock;
|
|
643
|
-
}
|
|
783
|
+
if (resultComponent) this.#contentBox.addChild(resultComponent);
|
|
644
784
|
} catch (err) {
|
|
645
785
|
logger.warn("Tool renderer failed", { tool: this.#toolName, error: String(err) });
|
|
646
786
|
// Fall back to showing raw output on error
|
|
647
787
|
const output = this.#getTextOutput();
|
|
648
788
|
if (output) {
|
|
649
|
-
|
|
789
|
+
this.#contentBox.addChild(new Text(theme.fg("toolOutput", replaceTabs(output)), 0, 0));
|
|
650
790
|
}
|
|
651
791
|
}
|
|
652
792
|
} else if (this.#result) {
|
|
653
793
|
// Has result but no custom renderResult
|
|
654
794
|
const output = this.#getTextOutput();
|
|
655
795
|
if (output) {
|
|
656
|
-
|
|
796
|
+
this.#contentBox.addChild(new Text(theme.fg("toolOutput", replaceTabs(output)), 0, 0));
|
|
657
797
|
}
|
|
658
798
|
}
|
|
659
|
-
|
|
799
|
+
// Custom tools that draw their own frame (task) render flush; plain
|
|
800
|
+
// extension renderers get the padded, state-tinted block back.
|
|
801
|
+
const customFramed = this.#contentBox.children.some(isFramedBlockComponent);
|
|
802
|
+
this.#contentBox.setPaddingX(customFramed ? 0 : 1);
|
|
803
|
+
this.#contentBox.setBgFn(customFramed ? undefined : stateBgFn);
|
|
660
804
|
} else if (this.#toolName in toolRenderers) {
|
|
661
805
|
// Built-in tools with renderers
|
|
662
806
|
const renderer = toolRenderers[this.#toolName];
|
|
@@ -675,7 +819,6 @@ export class ToolExecutionComponent extends Container {
|
|
|
675
819
|
// Multi-file: render each file as its own Box (identical to separate tool calls)
|
|
676
820
|
this.#contentBox.setBgFn(undefined);
|
|
677
821
|
this.#contentBox.clear();
|
|
678
|
-
this.#contentBox.setPaddingX(1);
|
|
679
822
|
|
|
680
823
|
const renderContext = this.#buildRenderContext();
|
|
681
824
|
this.#renderState.renderContext = renderContext;
|
|
@@ -687,20 +830,14 @@ export class ToolExecutionComponent extends Container {
|
|
|
687
830
|
this.#multiFileBoxes.push(spacer);
|
|
688
831
|
this.addChild(spacer);
|
|
689
832
|
}
|
|
690
|
-
const
|
|
691
|
-
? (text: string) => theme.bg("toolErrorBg", text)
|
|
692
|
-
: (text: string) => theme.bg("toolSuccessBg", text);
|
|
693
|
-
const fileBox = new Box(1, 1, fileBgFn);
|
|
833
|
+
const fileBox = new Box(0, 0);
|
|
694
834
|
try {
|
|
695
835
|
const resultComponent = renderer.renderResult(
|
|
696
836
|
{ content: [], details: fileResult, isError: fileResult.isError },
|
|
697
837
|
this.#renderState,
|
|
698
838
|
theme,
|
|
699
839
|
);
|
|
700
|
-
if (resultComponent)
|
|
701
|
-
const fileBoxHasFramedBlock = addBoxChild(fileBox, resultComponent);
|
|
702
|
-
setBoxPaddingForFramedBlock(fileBox, fileBoxHasFramedBlock);
|
|
703
|
-
}
|
|
840
|
+
if (resultComponent) fileBox.addChild(resultComponent);
|
|
704
841
|
} catch (err) {
|
|
705
842
|
logger.warn("Tool renderer failed", { tool: this.#toolName, error: String(err) });
|
|
706
843
|
}
|
|
@@ -717,7 +854,7 @@ export class ToolExecutionComponent extends Container {
|
|
|
717
854
|
const pendingSpacer = new Spacer(1);
|
|
718
855
|
this.#multiFileBoxes.push(pendingSpacer);
|
|
719
856
|
this.addChild(pendingSpacer);
|
|
720
|
-
const pendingBox = new Box(
|
|
857
|
+
const pendingBox = new Box(0, 0);
|
|
721
858
|
const pendingText = renderStatusLine(
|
|
722
859
|
{
|
|
723
860
|
icon: "pending",
|
|
@@ -733,9 +870,8 @@ export class ToolExecutionComponent extends Container {
|
|
|
733
870
|
} else {
|
|
734
871
|
// Single-file or no result: standard rendering
|
|
735
872
|
// Inline renderers skip background styling
|
|
736
|
-
this.#contentBox.setBgFn(
|
|
873
|
+
this.#contentBox.setBgFn(undefined);
|
|
737
874
|
this.#contentBox.clear();
|
|
738
|
-
let contentBoxHasFramedBlock = false;
|
|
739
875
|
|
|
740
876
|
const renderContext = this.#buildRenderContext();
|
|
741
877
|
this.#renderState.renderContext = renderContext;
|
|
@@ -745,14 +881,11 @@ export class ToolExecutionComponent extends Container {
|
|
|
745
881
|
// Render call component
|
|
746
882
|
try {
|
|
747
883
|
const callComponent = renderer.renderCall(this.#getCallArgsForRender(), this.#renderState, theme);
|
|
748
|
-
if (callComponent)
|
|
749
|
-
contentBoxHasFramedBlock =
|
|
750
|
-
addBoxChild(this.#contentBox, callComponent) || contentBoxHasFramedBlock;
|
|
751
|
-
}
|
|
884
|
+
if (callComponent) this.#contentBox.addChild(callComponent);
|
|
752
885
|
} catch (err) {
|
|
753
886
|
logger.warn("Tool renderer failed", { tool: this.#toolName, error: String(err) });
|
|
754
887
|
// Fall back to default on error
|
|
755
|
-
|
|
888
|
+
this.#contentBox.addChild(new Text(theme.fg("toolTitle", theme.bold(this.#toolLabel)), 0, 0));
|
|
756
889
|
}
|
|
757
890
|
}
|
|
758
891
|
|
|
@@ -769,24 +902,20 @@ export class ToolExecutionComponent extends Container {
|
|
|
769
902
|
theme,
|
|
770
903
|
this.#getCallArgsForRender(),
|
|
771
904
|
);
|
|
772
|
-
if (resultComponent)
|
|
773
|
-
contentBoxHasFramedBlock =
|
|
774
|
-
addBoxChild(this.#contentBox, resultComponent) || contentBoxHasFramedBlock;
|
|
775
|
-
}
|
|
905
|
+
if (resultComponent) this.#contentBox.addChild(resultComponent);
|
|
776
906
|
} catch (err) {
|
|
777
907
|
logger.warn("Tool renderer failed", { tool: this.#toolName, error: String(err) });
|
|
778
908
|
// Fall back to showing raw output on error
|
|
779
909
|
const output = this.#getTextOutput();
|
|
780
910
|
if (output) {
|
|
781
|
-
|
|
911
|
+
this.#contentBox.addChild(new Text(theme.fg("toolOutput", replaceTabs(output)), 0, 0));
|
|
782
912
|
}
|
|
783
913
|
}
|
|
784
914
|
}
|
|
785
|
-
setBoxPaddingForFramedBlock(this.#contentBox, contentBoxHasFramedBlock);
|
|
786
915
|
}
|
|
787
916
|
} else {
|
|
788
917
|
// Other built-in tools: use Text directly with caching
|
|
789
|
-
this.#contentText.setCustomBgFn(
|
|
918
|
+
this.#contentText.setCustomBgFn(stateBgFn);
|
|
790
919
|
this.#contentText.setText(this.#formatToolExecution());
|
|
791
920
|
}
|
|
792
921
|
|
|
@@ -830,6 +959,7 @@ export class ToolExecutionComponent extends Container {
|
|
|
830
959
|
}
|
|
831
960
|
}
|
|
832
961
|
}
|
|
962
|
+
this.#renderedImageCount = this.#imageComponents.length;
|
|
833
963
|
}
|
|
834
964
|
|
|
835
965
|
#getCallArgsForRender(): any {
|
|
@@ -881,6 +1011,9 @@ export class ToolExecutionComponent extends Container {
|
|
|
881
1011
|
// draws every dispatched agent as a progress/result line, so tell
|
|
882
1012
|
// `renderCall` to drop its duplicate streaming preview list.
|
|
883
1013
|
context.hasResult = Boolean(this.#result);
|
|
1014
|
+
// Out of the transcript live region: progress rows render static gray
|
|
1015
|
+
// (see task/render.ts).
|
|
1016
|
+
context.frozen = this.#backgroundTaskFrozen;
|
|
884
1017
|
} else if (isEditLikeToolName(this.#toolName)) {
|
|
885
1018
|
context.editMode = this.#editMode;
|
|
886
1019
|
const previews = this.#editDiffPreview;
|
|
@@ -937,7 +1070,7 @@ export class ToolExecutionComponent extends Container {
|
|
|
937
1070
|
*/
|
|
938
1071
|
#formatToolExecution(): string {
|
|
939
1072
|
const lines: string[] = [];
|
|
940
|
-
const icon = this.#isPartial ? "pending" : this.#result?.isError ? "error" : "
|
|
1073
|
+
const icon = this.#isPartial ? "pending" : this.#result?.isError ? "error" : "done";
|
|
941
1074
|
lines.push(renderStatusLine({ icon, title: this.#toolLabel }, theme));
|
|
942
1075
|
|
|
943
1076
|
const argsObject = this.#args && typeof this.#args === "object" ? (this.#args as Record<string, unknown>) : null;
|