@oh-my-pi/pi-coding-agent 16.3.6 → 16.3.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 +66 -0
- package/dist/cli.js +3329 -3314
- package/dist/types/advisor/index.d.ts +6 -6
- package/dist/types/advisor/runtime.d.ts +1 -1
- package/dist/types/advisor/watchdog.d.ts +1 -1
- package/dist/types/async/index.d.ts +1 -1
- package/dist/types/auto-thinking/classifier.d.ts +2 -2
- package/dist/types/autolearn/controller.d.ts +2 -2
- package/dist/types/autoresearch/dashboard.d.ts +2 -2
- package/dist/types/autoresearch/git.d.ts +1 -1
- package/dist/types/autoresearch/helpers.d.ts +1 -1
- package/dist/types/autoresearch/index.d.ts +1 -1
- package/dist/types/autoresearch/state.d.ts +3 -3
- package/dist/types/autoresearch/storage.d.ts +1 -1
- package/dist/types/autoresearch/tools/init-experiment.d.ts +2 -2
- package/dist/types/autoresearch/tools/log-experiment.d.ts +2 -2
- package/dist/types/autoresearch/tools/run-experiment.d.ts +2 -2
- package/dist/types/autoresearch/tools/update-notes.d.ts +2 -2
- package/dist/types/autoresearch/types.d.ts +3 -3
- package/dist/types/capability/context-file.d.ts +2 -2
- package/dist/types/capability/extension-module.d.ts +2 -2
- package/dist/types/capability/extension.d.ts +3 -3
- package/dist/types/capability/hook.d.ts +2 -2
- package/dist/types/capability/index.d.ts +3 -3
- package/dist/types/capability/instruction.d.ts +2 -2
- package/dist/types/capability/mcp.d.ts +2 -2
- package/dist/types/capability/prompt.d.ts +2 -2
- package/dist/types/capability/rule-buckets.d.ts +2 -2
- package/dist/types/capability/rule.d.ts +2 -2
- package/dist/types/capability/settings.d.ts +2 -2
- package/dist/types/capability/skill.d.ts +2 -2
- package/dist/types/capability/slash-command.d.ts +2 -2
- package/dist/types/capability/ssh.d.ts +2 -2
- package/dist/types/capability/system-prompt.d.ts +2 -2
- package/dist/types/capability/tool.d.ts +2 -2
- package/dist/types/cli/args.d.ts +1 -1
- package/dist/types/cli/bench-cli.d.ts +2 -2
- package/dist/types/cli/dry-balance-cli.d.ts +1 -1
- package/dist/types/cli/extension-flags.d.ts +1 -1
- package/dist/types/cli/flag-tables.d.ts +2 -2
- package/dist/types/cli/gallery-cli.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/agentic.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/codeintel.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/edit.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/fs.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/index.d.ts +2 -2
- package/dist/types/cli/gallery-fixtures/interaction.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/memory.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/misc.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/search.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/shell.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/types.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/web.d.ts +1 -1
- package/dist/types/cli/gallery-screenshot.d.ts +1 -1
- package/dist/types/cli/initial-message.d.ts +1 -1
- package/dist/types/cli/models-cli.d.ts +1 -1
- package/dist/types/cli/plugin-cli.d.ts +1 -1
- package/dist/types/cli/session-picker.d.ts +1 -1
- package/dist/types/cli/startup-cwd.d.ts +1 -1
- package/dist/types/cli/tiny-models-cli.d.ts +1 -1
- package/dist/types/cli/web-search-cli.d.ts +1 -1
- package/dist/types/collab/crypto.d.ts +1 -1
- package/dist/types/collab/display-name.d.ts +1 -1
- package/dist/types/collab/guest.d.ts +4 -4
- package/dist/types/collab/host.d.ts +2 -2
- package/dist/types/collab/protocol.d.ts +3 -3
- package/dist/types/collab/relay-client.d.ts +1 -1
- package/dist/types/commands/auth-broker.d.ts +1 -1
- package/dist/types/commands/auth-gateway.d.ts +1 -1
- package/dist/types/commands/config.d.ts +1 -1
- package/dist/types/commands/plugin.d.ts +1 -1
- package/dist/types/commands/setup.d.ts +2 -2
- package/dist/types/commands/ssh.d.ts +1 -1
- package/dist/types/commands/tiny-models.d.ts +1 -1
- package/dist/types/commands/ttsr.d.ts +2 -2
- package/dist/types/commit/agentic/agent.d.ts +4 -4
- package/dist/types/commit/agentic/fallback.d.ts +2 -2
- package/dist/types/commit/agentic/index.d.ts +1 -1
- package/dist/types/commit/agentic/state.d.ts +1 -1
- package/dist/types/commit/agentic/tools/analyze-file.d.ts +5 -5
- package/dist/types/commit/agentic/tools/git-file-diff.d.ts +2 -2
- package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-overview.d.ts +2 -2
- package/dist/types/commit/agentic/tools/index.d.ts +5 -5
- package/dist/types/commit/agentic/tools/propose-changelog.d.ts +2 -2
- package/dist/types/commit/agentic/tools/propose-commit.d.ts +2 -2
- package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
- package/dist/types/commit/agentic/tools/split-commit.d.ts +2 -2
- package/dist/types/commit/agentic/topo-sort.d.ts +1 -1
- package/dist/types/commit/agentic/trivial.d.ts +1 -1
- package/dist/types/commit/agentic/validation.d.ts +1 -1
- package/dist/types/commit/analysis/conventional.d.ts +1 -1
- package/dist/types/commit/analysis/index.d.ts +4 -4
- package/dist/types/commit/analysis/scope.d.ts +1 -1
- package/dist/types/commit/analysis/summary.d.ts +1 -1
- package/dist/types/commit/analysis/validation.d.ts +1 -1
- package/dist/types/commit/changelog/detect.d.ts +1 -1
- package/dist/types/commit/changelog/generate.d.ts +1 -1
- package/dist/types/commit/changelog/parse.d.ts +1 -1
- package/dist/types/commit/cli.d.ts +1 -1
- package/dist/types/commit/git/diff.d.ts +1 -1
- package/dist/types/commit/index.d.ts +1 -1
- package/dist/types/commit/map-reduce/index.d.ts +1 -1
- package/dist/types/commit/map-reduce/map-phase.d.ts +1 -1
- package/dist/types/commit/map-reduce/reduce-phase.d.ts +1 -1
- package/dist/types/commit/message.d.ts +1 -1
- package/dist/types/commit/model-selection.d.ts +3 -3
- package/dist/types/commit/pipeline.d.ts +1 -1
- package/dist/types/commit/shared-llm.d.ts +1 -1
- package/dist/types/commit/utils.d.ts +1 -1
- package/dist/types/config/model-discovery.d.ts +1 -1
- package/dist/types/config/model-registry.d.ts +3 -3
- package/dist/types/config/model-resolver.d.ts +4 -4
- package/dist/types/config/model-roles.d.ts +2 -2
- package/dist/types/config/models-config.d.ts +2 -2
- package/dist/types/config/service-tier.d.ts +1 -1
- package/dist/types/config/settings-schema.d.ts +7 -13
- package/dist/types/config/settings.d.ts +7 -7
- package/dist/types/config.d.ts +1 -1
- package/dist/types/dap/client.d.ts +1 -1
- package/dist/types/dap/config.d.ts +1 -1
- package/dist/types/dap/index.d.ts +4 -4
- package/dist/types/dap/session.d.ts +3 -3
- package/dist/types/debug/index.d.ts +1 -1
- 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 +1 -1
- package/dist/types/discovery/agents.d.ts +1 -1
- package/dist/types/discovery/helpers.d.ts +4 -4
- package/dist/types/discovery/index.d.ts +47 -47
- package/dist/types/discovery/omp-extension-roots.d.ts +1 -1
- package/dist/types/edit/apply-patch/index.d.ts +2 -2
- package/dist/types/edit/apply-patch/parser.d.ts +1 -1
- package/dist/types/edit/diff.d.ts +1 -1
- package/dist/types/edit/hashline/execute.d.ts +4 -4
- package/dist/types/edit/hashline/filesystem.d.ts +3 -3
- package/dist/types/edit/hashline/index.d.ts +5 -5
- package/dist/types/edit/index.d.ts +19 -19
- package/dist/types/edit/modes/apply-patch.d.ts +1 -1
- package/dist/types/edit/modes/patch.d.ts +3 -3
- package/dist/types/edit/modes/replace.d.ts +3 -3
- package/dist/types/edit/renderer.d.ts +15 -15
- package/dist/types/edit/snapshot-details.d.ts +1 -1
- package/dist/types/edit/streaming.d.ts +2 -2
- package/dist/types/eval/agent-bridge.d.ts +4 -4
- package/dist/types/eval/backend-helpers.d.ts +3 -3
- package/dist/types/eval/backend.d.ts +2 -2
- package/dist/types/eval/bridge-timeout.d.ts +1 -1
- package/dist/types/eval/budget-bridge.d.ts +2 -2
- package/dist/types/eval/completion-bridge.d.ts +2 -2
- package/dist/types/eval/concurrency-bridge.d.ts +2 -2
- package/dist/types/eval/executor-base.d.ts +3 -3
- package/dist/types/eval/index.d.ts +6 -6
- package/dist/types/eval/jl/executor.d.ts +4 -4
- package/dist/types/eval/jl/index.d.ts +2 -2
- package/dist/types/eval/jl/kernel.d.ts +5 -5
- package/dist/types/eval/js/context-manager.d.ts +4 -4
- package/dist/types/eval/js/executor.d.ts +3 -3
- package/dist/types/eval/js/index.d.ts +2 -2
- package/dist/types/eval/js/shared/helpers.d.ts +1 -1
- package/dist/types/eval/js/shared/runtime.d.ts +2 -2
- package/dist/types/eval/js/tool-bridge.d.ts +5 -5
- package/dist/types/eval/js/worker-core.d.ts +1 -1
- package/dist/types/eval/js/worker-protocol.d.ts +2 -2
- package/dist/types/eval/kernel-base.d.ts +1 -1
- package/dist/types/eval/py/executor.d.ts +3 -3
- package/dist/types/eval/py/index.d.ts +2 -2
- package/dist/types/eval/py/kernel.d.ts +5 -5
- package/dist/types/eval/py/tool-bridge.d.ts +2 -2
- package/dist/types/eval/rb/executor.d.ts +3 -3
- package/dist/types/eval/rb/index.d.ts +2 -2
- package/dist/types/eval/rb/kernel.d.ts +6 -6
- package/dist/types/eval/session-id.d.ts +1 -1
- package/dist/types/eval/types.d.ts +1 -1
- package/dist/types/exa/index.d.ts +2 -2
- package/dist/types/exa/mcp-client.d.ts +3 -3
- package/dist/types/exec/bash-executor.d.ts +1 -1
- package/dist/types/export/html/index.d.ts +2 -2
- package/dist/types/export/share.d.ts +3 -3
- package/dist/types/export/ttsr.d.ts +2 -2
- package/dist/types/extensibility/custom-commands/bundled/ci-green/index.d.ts +2 -2
- package/dist/types/extensibility/custom-commands/bundled/review/index.d.ts +2 -2
- package/dist/types/extensibility/custom-commands/index.d.ts +2 -2
- package/dist/types/extensibility/custom-commands/loader.d.ts +1 -1
- package/dist/types/extensibility/custom-commands/types.d.ts +3 -3
- package/dist/types/extensibility/custom-tools/index.d.ts +3 -3
- package/dist/types/extensibility/custom-tools/loader.d.ts +3 -3
- package/dist/types/extensibility/custom-tools/types.d.ts +12 -12
- package/dist/types/extensibility/custom-tools/wrapper.d.ts +2 -2
- package/dist/types/extensibility/extensions/compact-handler.d.ts +1 -1
- package/dist/types/extensibility/extensions/get-commands-handler.d.ts +5 -5
- package/dist/types/extensibility/extensions/index.d.ts +5 -5
- package/dist/types/extensibility/extensions/loader.d.ts +2 -2
- package/dist/types/extensibility/extensions/model-api.d.ts +3 -3
- package/dist/types/extensibility/extensions/runner.d.ts +6 -6
- package/dist/types/extensibility/extensions/types.d.ts +43 -31
- package/dist/types/extensibility/extensions/wrapper.d.ts +2 -2
- package/dist/types/extensibility/hooks/index.d.ts +6 -6
- package/dist/types/extensibility/hooks/loader.d.ts +4 -4
- package/dist/types/extensibility/hooks/runner.d.ts +5 -5
- package/dist/types/extensibility/hooks/tool-wrapper.d.ts +1 -1
- package/dist/types/extensibility/hooks/types.d.ts +18 -18
- package/dist/types/extensibility/legacy-pi-ai-shim.d.ts +12 -4
- package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +194 -5
- package/dist/types/extensibility/plugins/doctor.d.ts +1 -1
- package/dist/types/extensibility/plugins/index.d.ts +7 -7
- package/dist/types/extensibility/plugins/installer.d.ts +1 -1
- package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +1 -1
- package/dist/types/extensibility/plugins/loader.d.ts +1 -1
- package/dist/types/extensibility/plugins/manager.d.ts +1 -1
- package/dist/types/extensibility/plugins/marketplace/fetcher.d.ts +1 -1
- package/dist/types/extensibility/plugins/marketplace/index.d.ts +6 -6
- package/dist/types/extensibility/plugins/marketplace/manager.d.ts +1 -1
- package/dist/types/extensibility/plugins/marketplace/registry.d.ts +1 -1
- package/dist/types/extensibility/plugins/marketplace/source-resolver.d.ts +1 -1
- package/dist/types/extensibility/plugins/runtime-config.d.ts +1 -1
- package/dist/types/extensibility/session-handler-types.d.ts +1 -1
- package/dist/types/extensibility/shared-events.d.ts +4 -4
- package/dist/types/extensibility/skills.d.ts +3 -3
- package/dist/types/extensibility/slash-commands.d.ts +1 -1
- package/dist/types/extensibility/typebox.d.ts +1 -1
- package/dist/types/extensibility/utils.d.ts +1 -1
- package/dist/types/goals/guided-setup.d.ts +1 -1
- package/dist/types/goals/index.d.ts +3 -3
- package/dist/types/goals/runtime.d.ts +1 -1
- package/dist/types/goals/state.d.ts +1 -1
- package/dist/types/goals/tools/goal-tool.d.ts +4 -4
- package/dist/types/hindsight/backend.d.ts +2 -2
- package/dist/types/hindsight/bank.d.ts +2 -2
- package/dist/types/hindsight/client.d.ts +1 -1
- package/dist/types/hindsight/config.d.ts +1 -1
- package/dist/types/hindsight/index.d.ts +8 -8
- package/dist/types/hindsight/mental-models.d.ts +3 -3
- package/dist/types/hindsight/state.d.ts +5 -5
- package/dist/types/hindsight/transcript.d.ts +2 -2
- package/dist/types/index.d.ts +38 -38
- package/dist/types/internal-urls/agent-protocol.d.ts +1 -1
- package/dist/types/internal-urls/artifact-protocol.d.ts +1 -1
- package/dist/types/internal-urls/filesystem-resource.d.ts +1 -1
- package/dist/types/internal-urls/history-protocol.d.ts +1 -1
- package/dist/types/internal-urls/index.d.ts +16 -16
- package/dist/types/internal-urls/issue-pr-protocol.d.ts +1 -1
- package/dist/types/internal-urls/local-protocol.d.ts +1 -1
- package/dist/types/internal-urls/mcp-protocol.d.ts +1 -1
- package/dist/types/internal-urls/memory-protocol.d.ts +1 -1
- package/dist/types/internal-urls/omp-protocol.d.ts +1 -1
- package/dist/types/internal-urls/parse.d.ts +1 -1
- package/dist/types/internal-urls/router.d.ts +1 -1
- package/dist/types/internal-urls/rule-protocol.d.ts +1 -1
- package/dist/types/internal-urls/skill-protocol.d.ts +1 -1
- package/dist/types/internal-urls/ssh-protocol.d.ts +1 -1
- package/dist/types/internal-urls/types.d.ts +2 -2
- package/dist/types/internal-urls/vault-protocol.d.ts +1 -1
- package/dist/types/irc/bus.d.ts +2 -2
- package/dist/types/lib/xai-http.d.ts +1 -1
- package/dist/types/lsp/client.d.ts +23 -1
- package/dist/types/lsp/clients/biome-client.d.ts +1 -1
- package/dist/types/lsp/clients/index.d.ts +4 -4
- package/dist/types/lsp/clients/lsp-linter-client.d.ts +1 -1
- package/dist/types/lsp/clients/swiftlint-client.d.ts +1 -1
- package/dist/types/lsp/config.d.ts +1 -1
- package/dist/types/lsp/diagnostics-ledger.d.ts +1 -1
- package/dist/types/lsp/edits.d.ts +1 -1
- package/dist/types/lsp/index.d.ts +6 -6
- package/dist/types/lsp/render.d.ts +2 -2
- package/dist/types/lsp/startup-events.d.ts +1 -1
- package/dist/types/lsp/utils.d.ts +2 -2
- package/dist/types/main.d.ts +12 -12
- package/dist/types/markit/converters/docx.d.ts +1 -1
- package/dist/types/markit/converters/epub.d.ts +1 -1
- package/dist/types/markit/converters/pdf/columns.d.ts +1 -1
- package/dist/types/markit/converters/pdf/extract.d.ts +1 -1
- package/dist/types/markit/converters/pdf/grid.d.ts +1 -1
- package/dist/types/markit/converters/pdf/headers.d.ts +1 -1
- package/dist/types/markit/converters/pdf/index.d.ts +1 -1
- package/dist/types/markit/converters/pdf/render.d.ts +1 -1
- package/dist/types/markit/converters/pptx.d.ts +1 -1
- package/dist/types/markit/converters/xlsx.d.ts +1 -1
- package/dist/types/markit/index.d.ts +2 -2
- package/dist/types/markit/registry.d.ts +1 -1
- package/dist/types/mcp/client.d.ts +1 -1
- package/dist/types/mcp/config-writer.d.ts +1 -1
- package/dist/types/mcp/config.d.ts +2 -2
- package/dist/types/mcp/index.d.ts +12 -12
- package/dist/types/mcp/loader.d.ts +5 -5
- package/dist/types/mcp/manager.d.ts +7 -7
- package/dist/types/mcp/oauth-credentials.d.ts +3 -3
- package/dist/types/mcp/oauth-flow.d.ts +1 -1
- package/dist/types/mcp/render.d.ts +3 -3
- package/dist/types/mcp/smithery-registry.d.ts +1 -1
- package/dist/types/mcp/tool-bridge.d.ts +5 -5
- package/dist/types/mcp/tool-cache.d.ts +2 -2
- package/dist/types/mcp/transports/http.d.ts +1 -1
- package/dist/types/mcp/transports/index.d.ts +3 -3
- package/dist/types/mcp/transports/sse.d.ts +1 -1
- package/dist/types/mcp/transports/stdio.d.ts +1 -1
- package/dist/types/mcp/types.d.ts +1 -1
- package/dist/types/memories/index.d.ts +4 -4
- package/dist/types/memory-backend/index.d.ts +7 -7
- package/dist/types/memory-backend/local-backend.d.ts +1 -1
- package/dist/types/memory-backend/off-backend.d.ts +1 -1
- package/dist/types/memory-backend/resolve.d.ts +2 -2
- package/dist/types/memory-backend/runtime.d.ts +2 -2
- package/dist/types/memory-backend/types.d.ts +5 -5
- package/dist/types/mnemopi/backend.d.ts +2 -2
- package/dist/types/mnemopi/config.d.ts +1 -1
- package/dist/types/mnemopi/embed-client.d.ts +2 -2
- package/dist/types/mnemopi/embed-worker.d.ts +1 -1
- package/dist/types/mnemopi/index.d.ts +3 -3
- package/dist/types/mnemopi/state.d.ts +38 -2
- package/dist/types/modes/acp/acp-agent.d.ts +2 -2
- package/dist/types/modes/acp/acp-client-bridge.d.ts +1 -1
- package/dist/types/modes/acp/acp-event-mapper.d.ts +1 -1
- package/dist/types/modes/acp/acp-mode.d.ts +1 -1
- package/dist/types/modes/acp/index.d.ts +2 -2
- package/dist/types/modes/components/advisor-config.d.ts +3 -3
- package/dist/types/modes/components/advisor-message.d.ts +2 -2
- package/dist/types/modes/components/agent-dashboard.d.ts +2 -2
- package/dist/types/modes/components/agent-hub.d.ts +11 -9
- package/dist/types/modes/components/agent-transcript-viewer.d.ts +6 -6
- package/dist/types/modes/components/assistant-message.d.ts +2 -2
- package/dist/types/modes/components/background-tan-message.d.ts +2 -2
- package/dist/types/modes/components/bash-execution.d.ts +1 -1
- package/dist/types/modes/components/bordered-loader.d.ts +1 -1
- package/dist/types/modes/components/chat-transcript-builder.d.ts +3 -3
- package/dist/types/modes/components/collab-prompt-message.d.ts +2 -2
- package/dist/types/modes/components/compaction-summary-message.d.ts +1 -1
- package/dist/types/modes/components/copy-selector.d.ts +1 -1
- package/dist/types/modes/components/custom-editor.d.ts +1 -1
- package/dist/types/modes/components/custom-message.d.ts +2 -2
- package/dist/types/modes/components/eval-execution.d.ts +1 -1
- package/dist/types/modes/components/execution-shared.d.ts +1 -1
- package/dist/types/modes/components/extensions/extension-dashboard.d.ts +2 -2
- package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
- package/dist/types/modes/components/extensions/index.d.ts +5 -5
- package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
- package/dist/types/modes/components/extensions/state-manager.d.ts +1 -1
- package/dist/types/modes/components/extensions/types.d.ts +1 -1
- package/dist/types/modes/components/footer.d.ts +1 -1
- package/dist/types/modes/components/history-search.d.ts +1 -1
- package/dist/types/modes/components/hook-message.d.ts +2 -2
- package/dist/types/modes/components/index.d.ts +38 -38
- package/dist/types/modes/components/keybinding-hints.d.ts +1 -1
- package/dist/types/modes/components/logout-account-selector.d.ts +1 -1
- package/dist/types/modes/components/mcp-add-wizard.d.ts +1 -1
- package/dist/types/modes/components/message-frame.d.ts +1 -1
- package/dist/types/modes/components/model-selector.d.ts +3 -3
- package/dist/types/modes/components/oauth-selector.d.ts +1 -1
- package/dist/types/modes/components/plan-review-overlay.d.ts +1 -1
- package/dist/types/modes/components/plugin-settings.d.ts +3 -3
- package/dist/types/modes/components/read-tool-group.d.ts +1 -1
- package/dist/types/modes/components/reset-usage-selector.d.ts +1 -1
- package/dist/types/modes/components/segment-track.d.ts +1 -1
- package/dist/types/modes/components/session-selector.d.ts +1 -1
- package/dist/types/modes/components/settings-defs.d.ts +1 -1
- package/dist/types/modes/components/settings-selector.d.ts +2 -2
- package/dist/types/modes/components/skill-message.d.ts +1 -1
- package/dist/types/modes/components/status-line/component.d.ts +2 -2
- package/dist/types/modes/components/status-line/context-thresholds.d.ts +1 -1
- package/dist/types/modes/components/status-line/index.d.ts +5 -5
- package/dist/types/modes/components/status-line/presets.d.ts +1 -1
- package/dist/types/modes/components/status-line/segments.d.ts +2 -2
- package/dist/types/modes/components/status-line/separators.d.ts +2 -2
- package/dist/types/modes/components/status-line/types.d.ts +8 -4
- package/dist/types/modes/components/tiny-title-download-progress.d.ts +2 -2
- package/dist/types/modes/components/todo-reminder.d.ts +1 -1
- package/dist/types/modes/components/tool-execution.d.ts +1 -1
- package/dist/types/modes/components/tree-selector.d.ts +2 -2
- package/dist/types/modes/components/ttsr-notification.d.ts +1 -1
- package/dist/types/modes/controllers/btw-controller.d.ts +1 -1
- package/dist/types/modes/controllers/command-controller-shared.d.ts +2 -2
- package/dist/types/modes/controllers/command-controller.d.ts +7 -7
- package/dist/types/modes/controllers/event-controller.d.ts +3 -3
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +5 -5
- package/dist/types/modes/controllers/extension-ui-controller.test.d.ts +1 -0
- package/dist/types/modes/controllers/input-controller.d.ts +2 -2
- package/dist/types/modes/controllers/mcp-command-controller.d.ts +1 -1
- package/dist/types/modes/controllers/omfg-controller.d.ts +1 -1
- package/dist/types/modes/controllers/omfg-rule.d.ts +1 -1
- package/dist/types/modes/controllers/selector-controller.d.ts +2 -2
- package/dist/types/modes/controllers/session-focus-controller.d.ts +4 -4
- package/dist/types/modes/controllers/ssh-command-controller.d.ts +1 -1
- package/dist/types/modes/controllers/streaming-reveal.d.ts +11 -3
- package/dist/types/modes/controllers/tan-command-controller.d.ts +1 -1
- package/dist/types/modes/controllers/todo-command-controller.d.ts +1 -1
- package/dist/types/modes/controllers/tool-args-reveal.d.ts +6 -2
- package/dist/types/modes/image-references.d.ts +1 -1
- package/dist/types/modes/index.d.ts +3 -3
- package/dist/types/modes/interactive-mode.d.ts +34 -34
- package/dist/types/modes/orchestrate.d.ts +1 -1
- package/dist/types/modes/print-mode.d.ts +1 -1
- package/dist/types/modes/prompt-action-autocomplete.d.ts +1 -1
- package/dist/types/modes/rpc/host-tools.d.ts +1 -1
- package/dist/types/modes/rpc/host-uris.d.ts +3 -3
- package/dist/types/modes/rpc/rpc-client.d.ts +3 -3
- package/dist/types/modes/rpc/rpc-mode.d.ts +6 -6
- package/dist/types/modes/rpc/rpc-subagents.d.ts +3 -3
- package/dist/types/modes/rpc/rpc-types.d.ts +7 -7
- package/dist/types/modes/running-subagent-badge.d.ts +1 -1
- package/dist/types/modes/runtime-init.d.ts +2 -2
- package/dist/types/modes/session-observer-registry.d.ts +2 -2
- package/dist/types/modes/setup-wizard/index.d.ts +6 -6
- package/dist/types/modes/setup-wizard/lazy.d.ts +1 -1
- package/dist/types/modes/setup-wizard/scenes/glyph.d.ts +1 -1
- package/dist/types/modes/setup-wizard/scenes/providers.d.ts +1 -1
- package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +1 -1
- package/dist/types/modes/setup-wizard/scenes/theme.d.ts +1 -1
- package/dist/types/modes/setup-wizard/scenes/types.d.ts +1 -1
- package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +1 -1
- package/dist/types/modes/setup-wizard/startup-splash.d.ts +1 -1
- package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +2 -2
- package/dist/types/modes/shared.d.ts +1 -1
- package/dist/types/modes/skill-command.d.ts +2 -2
- package/dist/types/modes/theme/shimmer.d.ts +1 -1
- package/dist/types/modes/theme/theme.d.ts +1 -1
- package/dist/types/modes/types.d.ts +31 -31
- package/dist/types/modes/ultrathink.d.ts +1 -1
- package/dist/types/modes/utils/context-usage.d.ts +5 -5
- package/dist/types/modes/utils/hotkeys-markdown.d.ts +1 -1
- package/dist/types/modes/utils/interactive-context-helpers.d.ts +2 -2
- package/dist/types/modes/utils/tools-markdown.d.ts +1 -1
- package/dist/types/modes/utils/transcript-render-helpers.d.ts +10 -2
- package/dist/types/modes/utils/transcript-render-helpers.test.d.ts +1 -0
- package/dist/types/modes/utils/ui-helpers.d.ts +2 -2
- package/dist/types/modes/workflow.d.ts +1 -1
- package/dist/types/plan-mode/plan-handoff.d.ts +1 -1
- package/dist/types/registry/agent-lifecycle.d.ts +2 -2
- package/dist/types/registry/agent-registry.d.ts +1 -1
- package/dist/types/sdk.d.ts +40 -36
- package/dist/types/secrets/index.d.ts +2 -2
- package/dist/types/secrets/obfuscator.d.ts +1 -1
- package/dist/types/session/agent-session.d.ts +56 -42
- package/dist/types/session/agent-storage.d.ts +1 -1
- package/dist/types/session/auth-broker-config.d.ts +1 -1
- package/dist/types/session/codex-auto-reset.d.ts +1 -1
- package/dist/types/session/exit-diagnostics.d.ts +1 -1
- package/dist/types/session/indexed-session-storage.d.ts +2 -2
- package/dist/types/session/messages.d.ts +22 -3
- package/dist/types/session/redis-session-storage.d.ts +1 -1
- package/dist/types/session/session-context.d.ts +1 -1
- package/dist/types/session/session-entries.d.ts +4 -0
- package/dist/types/session/session-listing.d.ts +1 -1
- package/dist/types/session/session-loader.d.ts +4 -4
- package/dist/types/session/session-manager.d.ts +9 -8
- package/dist/types/session/session-migrations.d.ts +1 -1
- package/dist/types/session/session-paths.d.ts +1 -1
- package/dist/types/session/session-persistence.d.ts +2 -2
- package/dist/types/session/session-storage.d.ts +1 -1
- package/dist/types/session/session-title-slot.d.ts +1 -1
- package/dist/types/session/settings-stream-fn.d.ts +1 -1
- package/dist/types/session/sql-session-storage.d.ts +1 -1
- package/dist/types/session/unexpected-stop-classifier.d.ts +2 -2
- package/dist/types/slash-commands/acp-builtins.d.ts +2 -2
- package/dist/types/slash-commands/available-commands.d.ts +5 -5
- package/dist/types/slash-commands/builtin-registry.d.ts +2 -2
- package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +1 -1
- package/dist/types/slash-commands/helpers/context-report.d.ts +1 -1
- package/dist/types/slash-commands/helpers/format.d.ts +1 -1
- package/dist/types/slash-commands/helpers/logout.d.ts +1 -1
- package/dist/types/slash-commands/helpers/marketplace-manager.d.ts +2 -2
- package/dist/types/slash-commands/helpers/mcp.d.ts +1 -1
- package/dist/types/slash-commands/helpers/parse.d.ts +1 -1
- package/dist/types/slash-commands/helpers/reset-usage.d.ts +1 -1
- package/dist/types/slash-commands/helpers/ssh.d.ts +1 -1
- package/dist/types/slash-commands/helpers/todo.d.ts +1 -1
- package/dist/types/slash-commands/helpers/usage-report.d.ts +1 -1
- package/dist/types/slash-commands/types.d.ts +6 -4
- package/dist/types/ssh/file-transfer.d.ts +1 -1
- package/dist/types/ssh/ssh-executor.d.ts +1 -1
- package/dist/types/ssh/sshfs-mount.d.ts +1 -1
- package/dist/types/stt/asr-client.d.ts +3 -3
- package/dist/types/stt/asr-protocol.d.ts +1 -1
- package/dist/types/stt/asr-worker.d.ts +1 -1
- package/dist/types/stt/downloader.d.ts +1 -1
- package/dist/types/stt/index.d.ts +8 -8
- package/dist/types/stt/models.d.ts +1 -1
- package/dist/types/system-prompt.d.ts +4 -4
- package/dist/types/task/agents.d.ts +1 -1
- package/dist/types/task/discovery.d.ts +1 -1
- package/dist/types/task/executor.d.ts +20 -20
- package/dist/types/task/index.d.ts +11 -11
- package/dist/types/task/isolation-runner.d.ts +7 -6
- package/dist/types/task/persisted-revive.d.ts +5 -5
- package/dist/types/task/provider-concurrency.d.ts +2 -2
- package/dist/types/task/render.d.ts +3 -3
- package/dist/types/task/renderer.d.ts +1 -1
- package/dist/types/task/repair-args.d.ts +1 -1
- package/dist/types/task/subprocess-tool-registry.d.ts +1 -1
- package/dist/types/task/types.d.ts +2 -2
- package/dist/types/task/yield-assembly.d.ts +1 -1
- package/dist/types/tiny/title-client.d.ts +2 -2
- package/dist/types/tiny/title-protocol.d.ts +1 -1
- package/dist/types/tiny/worker.d.ts +1 -1
- package/dist/types/tool-discovery/mode.d.ts +2 -2
- package/dist/types/tools/__tests__/glob.test.d.ts +1 -0
- package/dist/types/tools/acp-bridge.d.ts +2 -2
- package/dist/types/tools/ask.d.ts +3 -3
- package/dist/types/tools/ast-edit.d.ts +4 -4
- package/dist/types/tools/ast-grep.d.ts +4 -4
- package/dist/types/tools/bash-command-fixup.d.ts +3 -11
- package/dist/types/tools/bash-interactive.d.ts +1 -1
- package/dist/types/tools/bash-interceptor.d.ts +1 -1
- package/dist/types/tools/bash-skill-urls.d.ts +3 -3
- package/dist/types/tools/bash.d.ts +4 -4
- package/dist/types/tools/browser/cmux/cmux-tab.d.ts +6 -6
- package/dist/types/tools/browser/cmux/rpc.d.ts +1 -1
- package/dist/types/tools/browser/registry.d.ts +3 -3
- package/dist/types/tools/browser/render.d.ts +3 -3
- package/dist/types/tools/browser/tab-supervisor.d.ts +4 -4
- package/dist/types/tools/browser/tab-worker.d.ts +1 -1
- package/dist/types/tools/browser.d.ts +9 -9
- package/dist/types/tools/checkpoint.d.ts +2 -2
- package/dist/types/tools/conflict-detect.d.ts +1 -1
- package/dist/types/tools/context.d.ts +2 -2
- package/dist/types/tools/debug.d.ts +4 -4
- package/dist/types/tools/eval-backends.d.ts +1 -1
- package/dist/types/tools/eval-render.d.ts +3 -3
- package/dist/types/tools/eval.d.ts +3 -3
- package/dist/types/tools/fetch.d.ts +7 -7
- package/dist/types/tools/gh-renderer.d.ts +3 -3
- package/dist/types/tools/gh.d.ts +5 -5
- package/dist/types/tools/github-cache.d.ts +1 -1
- package/dist/types/tools/glob.d.ts +7 -5
- package/dist/types/tools/grep.d.ts +5 -5
- package/dist/types/tools/image-gen.d.ts +2 -2
- package/dist/types/tools/index.d.ts +70 -70
- package/dist/types/tools/inspect-image-renderer.d.ts +2 -2
- package/dist/types/tools/inspect-image.d.ts +2 -2
- package/dist/types/tools/irc.d.ts +5 -5
- package/dist/types/tools/job.d.ts +3 -3
- package/dist/types/tools/json-tree.d.ts +1 -1
- package/dist/types/tools/learn.d.ts +1 -1
- package/dist/types/tools/list-limit.d.ts +1 -1
- package/dist/types/tools/manage-skill.d.ts +1 -1
- package/dist/types/tools/memory-edit.d.ts +1 -1
- 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 +2 -2
- package/dist/types/tools/memory-retain.d.ts +1 -1
- package/dist/types/tools/output-meta.d.ts +3 -3
- package/dist/types/tools/path-utils.d.ts +2 -2
- package/dist/types/tools/plan-mode-guard.d.ts +1 -1
- package/dist/types/tools/read.d.ts +7 -7
- package/dist/types/tools/render-utils.d.ts +3 -3
- package/dist/types/tools/renderers.d.ts +2 -2
- package/dist/types/tools/report-tool-issue.d.ts +2 -2
- package/dist/types/tools/resolve.d.ts +3 -3
- package/dist/types/tools/review.d.ts +2 -2
- package/dist/types/tools/search-tool-bm25.d.ts +4 -4
- package/dist/types/tools/ssh.d.ts +5 -5
- package/dist/types/tools/todo.d.ts +4 -4
- package/dist/types/tools/tool-result.d.ts +2 -2
- package/dist/types/tools/tts.d.ts +1 -1
- package/dist/types/tools/write.d.ts +7 -7
- package/dist/types/tools/yield.d.ts +1 -1
- package/dist/types/tts/index.d.ts +10 -10
- package/dist/types/tts/models.d.ts +1 -1
- package/dist/types/tts/speech-enhancer.d.ts +2 -2
- package/dist/types/tts/streaming-player.d.ts +1 -1
- package/dist/types/tts/tts-client.d.ts +2 -2
- package/dist/types/tts/tts-protocol.d.ts +1 -1
- package/dist/types/tts/tts-worker.d.ts +1 -1
- package/dist/types/tts/vocalizer.d.ts +7 -1
- package/dist/types/tui/code-cell.d.ts +1 -1
- package/dist/types/tui/file-list.d.ts +1 -1
- package/dist/types/tui/index.d.ts +9 -9
- package/dist/types/tui/output-block.d.ts +2 -2
- package/dist/types/tui/status-line.d.ts +2 -2
- package/dist/types/tui/tree-list.d.ts +2 -2
- package/dist/types/tui/types.d.ts +1 -1
- package/dist/types/tui/utils.d.ts +2 -2
- package/dist/types/utils/changelog.d.ts +1 -1
- package/dist/types/utils/commit-message-generator.d.ts +2 -2
- package/dist/types/utils/git.d.ts +1 -1
- package/dist/types/utils/image-loading.d.ts +1 -1
- package/dist/types/utils/image-vision-fallback.d.ts +3 -3
- package/dist/types/utils/markit.d.ts +1 -1
- package/dist/types/utils/title-generator.d.ts +2 -2
- package/dist/types/web/parallel.d.ts +1 -1
- package/dist/types/web/scrapers/artifacthub.d.ts +1 -1
- package/dist/types/web/scrapers/arxiv.d.ts +1 -1
- package/dist/types/web/scrapers/aur.d.ts +1 -1
- package/dist/types/web/scrapers/biorxiv.d.ts +1 -1
- package/dist/types/web/scrapers/bluesky.d.ts +1 -1
- package/dist/types/web/scrapers/brew.d.ts +1 -1
- package/dist/types/web/scrapers/cheatsh.d.ts +1 -1
- package/dist/types/web/scrapers/chocolatey.d.ts +1 -1
- package/dist/types/web/scrapers/choosealicense.d.ts +1 -1
- package/dist/types/web/scrapers/cisa-kev.d.ts +1 -1
- package/dist/types/web/scrapers/clojars.d.ts +1 -1
- package/dist/types/web/scrapers/coingecko.d.ts +1 -1
- package/dist/types/web/scrapers/crates-io.d.ts +1 -1
- package/dist/types/web/scrapers/crossref.d.ts +1 -1
- package/dist/types/web/scrapers/devto.d.ts +1 -1
- package/dist/types/web/scrapers/discogs.d.ts +1 -1
- package/dist/types/web/scrapers/discourse.d.ts +1 -1
- package/dist/types/web/scrapers/dockerhub.d.ts +1 -1
- package/dist/types/web/scrapers/docs-rs.d.ts +8 -1
- package/dist/types/web/scrapers/fdroid.d.ts +1 -1
- package/dist/types/web/scrapers/firefox-addons.d.ts +1 -1
- package/dist/types/web/scrapers/flathub.d.ts +1 -1
- package/dist/types/web/scrapers/github-gist.d.ts +1 -1
- package/dist/types/web/scrapers/github.d.ts +1 -1
- package/dist/types/web/scrapers/gitlab.d.ts +1 -1
- package/dist/types/web/scrapers/go-pkg.d.ts +1 -1
- package/dist/types/web/scrapers/hackage.d.ts +1 -1
- package/dist/types/web/scrapers/hackernews.d.ts +1 -1
- package/dist/types/web/scrapers/hex.d.ts +1 -1
- package/dist/types/web/scrapers/huggingface.d.ts +1 -1
- package/dist/types/web/scrapers/iacr.d.ts +1 -1
- package/dist/types/web/scrapers/index.d.ts +77 -77
- package/dist/types/web/scrapers/jetbrains-marketplace.d.ts +1 -1
- package/dist/types/web/scrapers/lemmy.d.ts +1 -1
- package/dist/types/web/scrapers/lobsters.d.ts +1 -1
- package/dist/types/web/scrapers/mastodon.d.ts +1 -1
- package/dist/types/web/scrapers/maven.d.ts +1 -1
- package/dist/types/web/scrapers/mdn.d.ts +1 -1
- package/dist/types/web/scrapers/metacpan.d.ts +1 -1
- package/dist/types/web/scrapers/musicbrainz.d.ts +1 -1
- package/dist/types/web/scrapers/npm.d.ts +1 -1
- package/dist/types/web/scrapers/nuget.d.ts +1 -1
- package/dist/types/web/scrapers/nvd.d.ts +1 -1
- package/dist/types/web/scrapers/ollama.d.ts +1 -1
- package/dist/types/web/scrapers/open-vsx.d.ts +1 -1
- package/dist/types/web/scrapers/opencorporates.d.ts +1 -1
- package/dist/types/web/scrapers/openlibrary.d.ts +1 -1
- package/dist/types/web/scrapers/orcid.d.ts +1 -1
- package/dist/types/web/scrapers/osv.d.ts +1 -1
- package/dist/types/web/scrapers/packagist.d.ts +1 -1
- package/dist/types/web/scrapers/pub-dev.d.ts +1 -1
- package/dist/types/web/scrapers/pubmed.d.ts +1 -1
- package/dist/types/web/scrapers/pypi.d.ts +1 -1
- package/dist/types/web/scrapers/rawg.d.ts +1 -1
- package/dist/types/web/scrapers/readthedocs.d.ts +1 -1
- package/dist/types/web/scrapers/reddit.d.ts +1 -1
- package/dist/types/web/scrapers/repology.d.ts +1 -1
- package/dist/types/web/scrapers/rfc.d.ts +1 -1
- package/dist/types/web/scrapers/rubygems.d.ts +1 -1
- package/dist/types/web/scrapers/searchcode.d.ts +1 -1
- package/dist/types/web/scrapers/sec-edgar.d.ts +1 -1
- package/dist/types/web/scrapers/semantic-scholar.d.ts +1 -1
- package/dist/types/web/scrapers/snapcraft.d.ts +1 -1
- package/dist/types/web/scrapers/sourcegraph.d.ts +1 -1
- package/dist/types/web/scrapers/spdx.d.ts +1 -1
- package/dist/types/web/scrapers/spotify.d.ts +1 -1
- package/dist/types/web/scrapers/stackoverflow.d.ts +1 -1
- package/dist/types/web/scrapers/terraform.d.ts +1 -1
- package/dist/types/web/scrapers/tldr.d.ts +1 -1
- package/dist/types/web/scrapers/twitter.d.ts +1 -1
- package/dist/types/web/scrapers/types.d.ts +1 -1
- package/dist/types/web/scrapers/vimeo.d.ts +1 -1
- package/dist/types/web/scrapers/vscode-marketplace.d.ts +1 -1
- package/dist/types/web/scrapers/w3c.d.ts +1 -1
- package/dist/types/web/scrapers/wikidata.d.ts +1 -1
- package/dist/types/web/scrapers/wikipedia.d.ts +1 -1
- package/dist/types/web/scrapers/youtube.d.ts +1 -1
- package/dist/types/web/search/index.d.ts +7 -7
- package/dist/types/web/search/provider.d.ts +5 -5
- package/dist/types/web/search/providers/anthropic.d.ts +3 -3
- package/dist/types/web/search/providers/base.d.ts +1 -1
- package/dist/types/web/search/providers/brave.d.ts +3 -3
- package/dist/types/web/search/providers/codex.d.ts +3 -3
- package/dist/types/web/search/providers/duckduckgo.d.ts +3 -3
- package/dist/types/web/search/providers/exa.d.ts +3 -3
- package/dist/types/web/search/providers/firecrawl.d.ts +3 -3
- package/dist/types/web/search/providers/gemini.d.ts +3 -3
- package/dist/types/web/search/providers/jina.d.ts +3 -3
- package/dist/types/web/search/providers/kagi.d.ts +3 -3
- package/dist/types/web/search/providers/kimi.d.ts +3 -3
- package/dist/types/web/search/providers/parallel.d.ts +3 -3
- package/dist/types/web/search/providers/perplexity.d.ts +3 -3
- package/dist/types/web/search/providers/searxng.d.ts +3 -3
- package/dist/types/web/search/providers/synthetic.d.ts +3 -3
- package/dist/types/web/search/providers/tavily.d.ts +3 -3
- package/dist/types/web/search/providers/tinyfish.d.ts +3 -3
- package/dist/types/web/search/providers/utils.d.ts +2 -2
- package/dist/types/web/search/providers/xai.d.ts +3 -3
- package/dist/types/web/search/providers/zai.d.ts +3 -3
- package/dist/types/web/search/render.d.ts +3 -3
- package/package.json +13 -13
- package/src/advisor/__tests__/advisor.test.ts +59 -0
- package/src/auto-thinking/classifier.ts +6 -5
- package/src/collab/relay-client.ts +73 -7
- package/src/config/model-registry.ts +43 -2
- package/src/config/model-resolver.ts +1 -1
- package/src/config/settings-schema.ts +5 -12
- package/src/config/settings.ts +25 -5
- package/src/edit/hashline/filesystem.ts +19 -1
- package/src/edit/modes/patch.ts +9 -1
- package/src/edit/modes/replace.ts +1 -1
- package/src/edit/renderer.ts +42 -30
- package/src/eval/__tests__/agent-bridge.test.ts +19 -0
- package/src/eval/__tests__/budget-bridge.test.ts +12 -1
- package/src/eval/agent-bridge.ts +27 -19
- package/src/eval/js/context-manager.ts +3 -0
- package/src/export/ttsr.ts +10 -0
- package/src/extensibility/extensions/loader.ts +2 -2
- package/src/extensibility/extensions/types.ts +16 -4
- package/src/extensibility/hooks/loader.ts +3 -3
- package/src/extensibility/hooks/types.ts +4 -4
- package/src/extensibility/legacy-pi-ai-shim.ts +17 -4
- package/src/extensibility/legacy-pi-coding-agent-shim.ts +554 -2
- package/src/extensibility/plugins/legacy-pi-compat.ts +190 -58
- package/src/internal-urls/docs-index.generated.txt +1 -1
- package/src/internal-urls/memory-protocol.ts +105 -3
- package/src/lsp/client.ts +70 -0
- package/src/lsp/index.ts +65 -12
- package/src/main.ts +5 -3
- package/src/markit/converters/pdf/extract.ts +26 -2
- package/src/mnemopi/state.ts +76 -0
- package/src/modes/acp/acp-agent.ts +5 -1
- package/src/modes/components/agent-hub.ts +27 -9
- package/src/modes/components/chat-transcript-builder.ts +7 -3
- package/src/modes/components/copy-selector.ts +16 -4
- package/src/modes/components/model-selector.ts +17 -17
- package/src/modes/components/session-selector.ts +12 -4
- package/src/modes/components/status-line/component.ts +4 -0
- package/src/modes/components/status-line/segments.ts +6 -5
- package/src/modes/components/status-line/types.ts +4 -0
- package/src/modes/components/tool-execution.ts +8 -3
- package/src/modes/controllers/command-controller.ts +10 -0
- package/src/modes/controllers/event-controller.ts +4 -3
- package/src/modes/controllers/extension-ui-controller.test.ts +58 -0
- package/src/modes/controllers/extension-ui-controller.ts +12 -6
- package/src/modes/controllers/input-controller.ts +8 -0
- package/src/modes/controllers/selector-controller.ts +18 -9
- package/src/modes/controllers/streaming-reveal.ts +12 -5
- package/src/modes/controllers/tool-args-reveal.ts +13 -6
- package/src/modes/interactive-mode.ts +54 -28
- package/src/modes/prompt-action-autocomplete.ts +18 -0
- package/src/modes/theme/shimmer.ts +37 -1
- package/src/modes/utils/transcript-render-helpers.test.ts +38 -0
- package/src/modes/utils/transcript-render-helpers.ts +14 -0
- package/src/modes/utils/ui-helpers.ts +5 -1
- package/src/prompts/system/workflow-notice.md +1 -1
- package/src/prompts/tools/bash.md +9 -7
- package/src/prompts/tools/grep.md +1 -1
- package/src/prompts/tools/memory-edit.md +2 -0
- package/src/prompts/tools/recall.md +2 -0
- package/src/sdk.ts +112 -12
- package/src/session/agent-session.ts +203 -61
- package/src/session/messages.ts +102 -2
- package/src/session/session-context.ts +60 -10
- package/src/session/session-entries.ts +4 -0
- package/src/session/session-history-format.ts +12 -0
- package/src/session/session-manager.ts +129 -10
- package/src/session/settings-stream-fn.ts +1 -0
- package/src/session/unexpected-stop-classifier.ts +6 -3
- package/src/slash-commands/builtin-registry.ts +7 -4
- package/src/slash-commands/helpers/usage-report.ts +3 -0
- package/src/slash-commands/types.ts +2 -0
- package/src/task/executor.ts +23 -3
- package/src/task/isolation-runner.ts +38 -9
- package/src/tools/__tests__/glob.test.ts +37 -0
- package/src/tools/acp-bridge.ts +11 -1
- package/src/tools/bash-command-fixup.ts +3 -36
- package/src/tools/bash.ts +4 -13
- package/src/tools/browser/render.ts +6 -4
- package/src/tools/glob.ts +11 -1
- package/src/tools/index.ts +1 -1
- package/src/tools/inspect-image-renderer.ts +5 -4
- package/src/tools/read.ts +13 -8
- package/src/tools/render-utils.ts +4 -1
- package/src/tools/write.ts +9 -7
- package/src/tts/speech-enhancer.ts +7 -5
- package/src/tts/vocalizer.ts +9 -0
- package/src/utils/commit-message-generator.ts +7 -5
- package/src/utils/shell-snapshot.ts +10 -0
- package/src/utils/title-generator.ts +12 -7
- package/src/web/scrapers/docs-rs.ts +12 -1
- package/src/web/search/providers/xai.ts +43 -47
|
@@ -29,6 +29,7 @@ import type { SessionMessageEntry } from "../../session/session-entries";
|
|
|
29
29
|
import { theme } from "../theme/theme";
|
|
30
30
|
import {
|
|
31
31
|
assistantHasVisibleContent,
|
|
32
|
+
assistantUsageIsBilled,
|
|
32
33
|
buildAsyncResultBlock,
|
|
33
34
|
buildFileMentionBlock,
|
|
34
35
|
buildIrcMessageCard,
|
|
@@ -270,13 +271,15 @@ export class ChatTranscriptBuilder {
|
|
|
270
271
|
}
|
|
271
272
|
|
|
272
273
|
#appendAssistantMessage(message: Extract<AgentMessage, { role: "assistant" }>): void {
|
|
274
|
+
const hideThinkingBlock = this.deps.hideThinkingBlock?.() ?? false;
|
|
275
|
+
const proseOnlyThinking = this.deps.proseOnlyThinking ? this.deps.proseOnlyThinking() : true;
|
|
273
276
|
const assistantComponent = new AssistantMessageComponent(
|
|
274
277
|
message,
|
|
275
|
-
|
|
278
|
+
hideThinkingBlock,
|
|
276
279
|
() => this.deps.requestRender(),
|
|
277
280
|
this.deps.getMessageRenderer ? undefined : [], // placeholder for thinkingRenderers
|
|
278
281
|
undefined, // placeholder for imageBudget
|
|
279
|
-
|
|
282
|
+
proseOnlyThinking,
|
|
280
283
|
);
|
|
281
284
|
this.container.addChild(assistantComponent);
|
|
282
285
|
|
|
@@ -354,7 +357,8 @@ export class ChatTranscriptBuilder {
|
|
|
354
357
|
}
|
|
355
358
|
}
|
|
356
359
|
|
|
357
|
-
this.#pendingUsage =
|
|
360
|
+
this.#pendingUsage =
|
|
361
|
+
settings.get("display.showTokenUsage") && assistantUsageIsBilled(message.usage) ? message.usage : undefined;
|
|
358
362
|
this.#pendingUsageDuration = message.duration;
|
|
359
363
|
this.#pendingUsageTtft = message.ttft;
|
|
360
364
|
}
|
|
@@ -53,6 +53,8 @@ function gutterCells(hasNext: boolean): string {
|
|
|
53
53
|
export class CopySelectorComponent implements Component {
|
|
54
54
|
#roots: CopyTarget[];
|
|
55
55
|
#cursorId: string;
|
|
56
|
+
#lastSourceTarget?: CopyTarget;
|
|
57
|
+
#lastSource?: string;
|
|
56
58
|
#treeRows = MIN_TREE_ROWS;
|
|
57
59
|
// Reused across renders to wrap preview content to the pane width.
|
|
58
60
|
#previewText = new Text("", 0, 0);
|
|
@@ -65,7 +67,10 @@ export class CopySelectorComponent implements Component {
|
|
|
65
67
|
this.#cursorId = roots[0]?.id ?? "";
|
|
66
68
|
}
|
|
67
69
|
|
|
68
|
-
invalidate(): void {
|
|
70
|
+
invalidate(): void {
|
|
71
|
+
this.#lastSourceTarget = undefined;
|
|
72
|
+
this.#lastSource = undefined;
|
|
73
|
+
}
|
|
69
74
|
|
|
70
75
|
#flatten(): FlatNode[] {
|
|
71
76
|
const out: FlatNode[] = [];
|
|
@@ -153,9 +158,16 @@ export class CopySelectorComponent implements Component {
|
|
|
153
158
|
// Code/command previews are syntax-highlighted; everything else is shown
|
|
154
159
|
// as plain text. Both are wrapped (not hard-truncated) to the pane width.
|
|
155
160
|
const isCode = target.language !== undefined;
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
161
|
+
let source: string;
|
|
162
|
+
if (target === this.#lastSourceTarget && this.#lastSource !== undefined) {
|
|
163
|
+
source = this.#lastSource;
|
|
164
|
+
} else {
|
|
165
|
+
source = isCode
|
|
166
|
+
? highlightCode(replaceTabs(target.preview), target.language).join("\n")
|
|
167
|
+
: replaceTabs(target.preview);
|
|
168
|
+
this.#lastSourceTarget = target;
|
|
169
|
+
this.#lastSource = source;
|
|
170
|
+
}
|
|
159
171
|
this.#previewText.setText(source);
|
|
160
172
|
const wrapped = this.#previewText.render(Math.max(1, width - 4));
|
|
161
173
|
|
|
@@ -704,29 +704,22 @@ export class ModelSelectorComponent extends Container {
|
|
|
704
704
|
#filterModels(query: string): void {
|
|
705
705
|
const activeProviderId = this.#getActiveProviderId();
|
|
706
706
|
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
}
|
|
707
|
+
const baseModels = activeProviderId
|
|
708
|
+
? this.#allModels.filter(m => m.provider === activeProviderId)
|
|
709
|
+
: this.#allModels;
|
|
711
710
|
|
|
712
711
|
if (query.trim()) {
|
|
713
|
-
// If user is searching from a provider tab, auto-switch to ALL to show global provider results.
|
|
714
|
-
if (activeProviderId) {
|
|
715
|
-
this.#activeTabIndex = 0;
|
|
716
|
-
if (this.#tabBar && this.#tabBar.getActiveIndex() !== 0) {
|
|
717
|
-
this.#tabBar.setActiveIndex(0);
|
|
718
|
-
return;
|
|
719
|
-
}
|
|
720
|
-
this.#updateTabBar();
|
|
721
|
-
baseModels = this.#allModels;
|
|
722
|
-
}
|
|
723
|
-
|
|
724
712
|
// Match against the displayed "provider/id" string so the user can
|
|
725
713
|
// type what they see: bare names (`mimo`, `kimi`), provider prefixes
|
|
726
714
|
// (`openrouter`), or scoped queries (`openrouter/mimo`) all flow
|
|
727
715
|
// through the same fuzzy matcher. The score is biased by provider-
|
|
728
716
|
// prefix length, so re-sort by MRU/version afterwards; skip role
|
|
729
717
|
// rank so a weakly matching default doesn't trump a stronger match.
|
|
718
|
+
//
|
|
719
|
+
// Search stays scoped to the active provider tab. Auto-escaping to
|
|
720
|
+
// ALL on non-empty queries used to let the user pick a same-named
|
|
721
|
+
// model from a different provider and silently persist it under
|
|
722
|
+
// their default role — see issue #4522.
|
|
730
723
|
const fuzzyMatches = fuzzyFilter(baseModels, query, ({ id, provider }) => `${provider}/${id}`);
|
|
731
724
|
this.#sortModels(fuzzyMatches, { skipRoleRank: true });
|
|
732
725
|
this.#filteredModels = fuzzyMatches;
|
|
@@ -891,8 +884,15 @@ export class ModelSelectorComponent extends Container {
|
|
|
891
884
|
this.#listContainer.addChild(new Text(theme.fg("error", line), 0, 0));
|
|
892
885
|
}
|
|
893
886
|
} else if (visibleItems.length === 0) {
|
|
894
|
-
const
|
|
895
|
-
this.#
|
|
887
|
+
const providerStatus = this.#getProviderEmptyStateMessage();
|
|
888
|
+
const activeProviderId = this.#getActiveProviderId();
|
|
889
|
+
const searching = this.#searchInput.getValue().trim().length > 0;
|
|
890
|
+
const message =
|
|
891
|
+
providerStatus ??
|
|
892
|
+
(searching && activeProviderId
|
|
893
|
+
? ` No matching models in ${formatProviderTabLabel(activeProviderId)}. Switch to ALL to search every provider.`
|
|
894
|
+
: " No matching models");
|
|
895
|
+
this.#listContainer.addChild(new Text(theme.fg("muted", message), 0, 0));
|
|
896
896
|
} else {
|
|
897
897
|
const selected = visibleItems[this.#selectedIndex];
|
|
898
898
|
if (!selected) {
|
|
@@ -414,15 +414,23 @@ class SessionList implements Component {
|
|
|
414
414
|
}
|
|
415
415
|
|
|
416
416
|
handleInput(keyData: string): void {
|
|
417
|
-
// Delete key
|
|
418
|
-
|
|
417
|
+
// Delete key — or Backspace on an empty search query — request delete
|
|
418
|
+
// confirmation from the parent. macOS laptops have no dedicated Forward
|
|
419
|
+
// Delete key: Fn+Backspace is the only way to send \e[3~, and many macOS
|
|
420
|
+
// terminals (Terminal.app, some iTerm2 profiles) deliver \x7f for that
|
|
421
|
+
// combo instead. Regular Backspace on an empty query means "delete
|
|
422
|
+
// session"; with a typed query it stays bound to the search Input so users
|
|
423
|
+
// can still edit their filter text.
|
|
424
|
+
if (
|
|
425
|
+
matchesKey(keyData, "delete") ||
|
|
426
|
+
(matchesKey(keyData, "backspace") && this.#searchInput.getValue().length === 0)
|
|
427
|
+
) {
|
|
419
428
|
const selected = this.#filteredSessions[this.#selectedIndex];
|
|
420
429
|
if (selected && this.onDeleteRequest) {
|
|
421
430
|
this.onDeleteRequest(selected);
|
|
422
431
|
}
|
|
423
432
|
return;
|
|
424
433
|
}
|
|
425
|
-
|
|
426
434
|
// Up arrow
|
|
427
435
|
if (matchesSelectUp(keyData)) {
|
|
428
436
|
this.#selectedIndex = Math.max(0, this.#selectedIndex - 1);
|
|
@@ -702,7 +710,7 @@ export class SessionSelectorComponent extends Container {
|
|
|
702
710
|
/** Blank · keybinding hint · bottom border. Rendered by {@link render}. */
|
|
703
711
|
#footerLines(width: number): string[] {
|
|
704
712
|
const scopeHint = this.#scope === "all" ? "current folder" : "all projects";
|
|
705
|
-
const hint = theme.fg("muted", ` [Del delete · Enter select · Tab ${scopeHint} · Esc cancel]`);
|
|
713
|
+
const hint = theme.fg("muted", ` [Del/⌫ delete · Enter select · Tab ${scopeHint} · Esc cancel]`);
|
|
706
714
|
return ["", hint, "", ...this.#bottomBorder.render(width)];
|
|
707
715
|
}
|
|
708
716
|
|
|
@@ -998,6 +998,10 @@ export class StatusLineComponent implements Component {
|
|
|
998
998
|
output: 0,
|
|
999
999
|
cacheRead: 0,
|
|
1000
1000
|
cacheWrite: 0,
|
|
1001
|
+
totalTokens: 0,
|
|
1002
|
+
orchestrationInput: 0,
|
|
1003
|
+
orchestrationOutput: 0,
|
|
1004
|
+
orchestrationCacheRead: 0,
|
|
1001
1005
|
premiumRequests: 0,
|
|
1002
1006
|
cost: 0,
|
|
1003
1007
|
};
|
|
@@ -362,10 +362,11 @@ const tokenTotalSegment: StatusLineSegment = {
|
|
|
362
362
|
id: "token_total",
|
|
363
363
|
render(ctx) {
|
|
364
364
|
// Excludes cacheRead: that field re-reads the full cached context every
|
|
365
|
-
// turn, making the cumulative sum N×context_size.
|
|
366
|
-
//
|
|
367
|
-
|
|
368
|
-
const
|
|
365
|
+
// turn, making the cumulative sum N×context_size. Orchestration cache read
|
|
366
|
+
// follows the same rule; orchestration input/output remain in the total so
|
|
367
|
+
// provider-side service work is preserved without labeling it prompt input.
|
|
368
|
+
const { input, output, cacheWrite, orchestrationInput, orchestrationOutput } = ctx.usageStats;
|
|
369
|
+
const total = input + output + cacheWrite + orchestrationInput + orchestrationOutput;
|
|
369
370
|
if (!total) return { content: "", visible: false };
|
|
370
371
|
|
|
371
372
|
const content = withIcon(theme.icon.tokens, formatNumber(total));
|
|
@@ -379,7 +380,7 @@ const tokenRateSegment: StatusLineSegment = {
|
|
|
379
380
|
const { tokensPerSecond } = ctx.usageStats;
|
|
380
381
|
if (!tokensPerSecond) return { content: "", visible: false };
|
|
381
382
|
|
|
382
|
-
const content = withIcon(theme.icon.throughput, `${tokensPerSecond.toFixed(1)}/s`);
|
|
383
|
+
const content = withIcon(theme.icon.throughput, `${tokensPerSecond.toFixed(1)} tok/s`);
|
|
383
384
|
return { content: theme.fg("statusLineOutput", content), visible: true };
|
|
384
385
|
},
|
|
385
386
|
};
|
|
@@ -74,6 +74,10 @@ export interface SegmentContext {
|
|
|
74
74
|
output: number;
|
|
75
75
|
cacheRead: number;
|
|
76
76
|
cacheWrite: number;
|
|
77
|
+
totalTokens: number;
|
|
78
|
+
orchestrationInput: number;
|
|
79
|
+
orchestrationOutput: number;
|
|
80
|
+
orchestrationCacheRead: number;
|
|
77
81
|
premiumRequests: number;
|
|
78
82
|
cost: number;
|
|
79
83
|
tokensPerSecond: number | null;
|
|
@@ -167,7 +167,7 @@ export interface ToolExecutionOptions {
|
|
|
167
167
|
liveRegion?: TranscriptLiveRegionProbe;
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
export interface ToolExecutionHandle {
|
|
170
|
+
export interface ToolExecutionHandle extends Component {
|
|
171
171
|
updateArgs(args: any, toolCallId?: string): void;
|
|
172
172
|
updateResult(
|
|
173
173
|
result: {
|
|
@@ -622,7 +622,10 @@ export class ToolExecutionComponent extends Container implements NativeScrollbac
|
|
|
622
622
|
const frameCount = theme.spinnerFrames.length;
|
|
623
623
|
this.#spinnerFrame = sharedSpinnerFrame(frameCount, now);
|
|
624
624
|
this.#renderState.spinnerFrame = this.#spinnerFrame;
|
|
625
|
-
this
|
|
625
|
+
// Component-scoped: a spinner tick only changes this tool block, so
|
|
626
|
+
// the TUI reuses every other root subtree instead of walking the
|
|
627
|
+
// whole tree (issue #4377).
|
|
628
|
+
this.#ui.requestComponentRender(this);
|
|
626
629
|
}, SPINNER_RENDER_INTERVAL_MS);
|
|
627
630
|
} else if (!needsSpinner && this.#spinnerInterval) {
|
|
628
631
|
clearInterval(this.#spinnerInterval);
|
|
@@ -679,7 +682,9 @@ export class ToolExecutionComponent extends Container implements NativeScrollbac
|
|
|
679
682
|
this.#spinnerFrame = nextFrame;
|
|
680
683
|
this.#renderState.spinnerFrame = nextFrame;
|
|
681
684
|
}
|
|
682
|
-
this
|
|
685
|
+
// Component-scoped: strike animation only mutates this tool block's
|
|
686
|
+
// glyph, so the TUI reuses every other root subtree (issue #4377).
|
|
687
|
+
this.#ui.requestComponentRender(this);
|
|
683
688
|
}, 65);
|
|
684
689
|
}
|
|
685
690
|
|
|
@@ -1121,6 +1121,7 @@ export class CommandController {
|
|
|
1121
1121
|
customInstructions?: string,
|
|
1122
1122
|
mode?: CompactMode,
|
|
1123
1123
|
beforeFlush?: (outcome: CompactionOutcome) => void | Promise<void>,
|
|
1124
|
+
internalGuidance?: string,
|
|
1124
1125
|
): Promise<CompactionOutcome> {
|
|
1125
1126
|
const entries = this.ctx.sessionManager.getEntries();
|
|
1126
1127
|
const messageCount = entries.filter(e => e.type === "message").length;
|
|
@@ -1130,6 +1131,15 @@ export class CommandController {
|
|
|
1130
1131
|
return "ok";
|
|
1131
1132
|
}
|
|
1132
1133
|
|
|
1134
|
+
// `internalGuidance` is a private summarizer directive (plan-mode
|
|
1135
|
+
// "Approve and compact context") that MUST stay off the public
|
|
1136
|
+
// `customInstructions` channel of the `session_before_compact` extension
|
|
1137
|
+
// hook — extensions treat that field as user focus and would otherwise
|
|
1138
|
+
// bias the summary toward the plan boilerplate (issue #4359). Ride it
|
|
1139
|
+
// through as a CompactOptions field instead.
|
|
1140
|
+
if (internalGuidance) {
|
|
1141
|
+
return this.executeCompaction({ internalGuidance, ...(mode ? { mode } : {}) }, false, beforeFlush, mode);
|
|
1142
|
+
}
|
|
1133
1143
|
return this.executeCompaction(customInstructions, false, beforeFlush, mode);
|
|
1134
1144
|
}
|
|
1135
1145
|
|
|
@@ -32,6 +32,7 @@ import { vocalizer } from "../../tts/vocalizer";
|
|
|
32
32
|
import { canonicalizeMessage } from "../../utils/thinking-display";
|
|
33
33
|
import { interruptHint } from "../shared";
|
|
34
34
|
import { createAssistantMessageComponent } from "../utils/interactive-context-helpers";
|
|
35
|
+
import { assistantUsageIsBilled } from "../utils/transcript-render-helpers";
|
|
35
36
|
import { StreamingRevealController } from "./streaming-reveal";
|
|
36
37
|
import { streamingStringKeysForTool, ToolArgsRevealController } from "./tool-args-reveal";
|
|
37
38
|
|
|
@@ -133,11 +134,11 @@ export class EventController {
|
|
|
133
134
|
getSmoothStreaming: () => this.ctx.settings.get("display.smoothStreaming"),
|
|
134
135
|
getHideThinkingBlock: () => this.ctx.effectiveHideThinkingBlock,
|
|
135
136
|
getProseOnlyThinking: () => this.ctx.proseOnlyThinking,
|
|
136
|
-
requestRender:
|
|
137
|
+
requestRender: component => this.ctx.ui.requestComponentRender(component),
|
|
137
138
|
});
|
|
138
139
|
this.#toolArgsReveal = new ToolArgsRevealController({
|
|
139
140
|
getSmoothStreaming: () => this.ctx.settings.get("display.smoothStreaming"),
|
|
140
|
-
requestRender:
|
|
141
|
+
requestRender: component => this.ctx.ui.requestComponentRender(component),
|
|
141
142
|
});
|
|
142
143
|
this.#handlers = {
|
|
143
144
|
agent_start: e => this.#handleAgentStart(e),
|
|
@@ -849,7 +850,7 @@ export class EventController {
|
|
|
849
850
|
}
|
|
850
851
|
this.#lastAssistantComponent = this.ctx.streamingComponent;
|
|
851
852
|
this.#lastAssistantComponent.markTranscriptBlockFinalized();
|
|
852
|
-
if (settings.get("display.showTokenUsage")) {
|
|
853
|
+
if (settings.get("display.showTokenUsage") && assistantUsageIsBilled(event.message.usage)) {
|
|
853
854
|
this.ctx.chatContainer.addChild(
|
|
854
855
|
createUsageRowBlock(event.message.usage, event.message.duration, event.message.ttft),
|
|
855
856
|
);
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "bun:test";
|
|
2
|
+
import type { ExtensionUIContext } from "../../extensibility/extensions";
|
|
3
|
+
import { CustomEditor } from "../components/custom-editor";
|
|
4
|
+
import { getEditorTheme } from "../theme/theme";
|
|
5
|
+
import type { InteractiveModeContext } from "../types";
|
|
6
|
+
import { ExtensionUiController } from "./extension-ui-controller";
|
|
7
|
+
|
|
8
|
+
function makeHarness() {
|
|
9
|
+
const editor = new CustomEditor(getEditorTheme());
|
|
10
|
+
const requestRender = vi.fn();
|
|
11
|
+
let uiContext: ExtensionUIContext | undefined;
|
|
12
|
+
const ctx = {
|
|
13
|
+
editor,
|
|
14
|
+
ui: {
|
|
15
|
+
requestRender,
|
|
16
|
+
},
|
|
17
|
+
session: {
|
|
18
|
+
extensionRunner: undefined,
|
|
19
|
+
},
|
|
20
|
+
setToolUIContext(context: ExtensionUIContext, hasUI: boolean): void {
|
|
21
|
+
expect(hasUI).toBe(true);
|
|
22
|
+
uiContext = context;
|
|
23
|
+
},
|
|
24
|
+
} as unknown as InteractiveModeContext;
|
|
25
|
+
|
|
26
|
+
return {
|
|
27
|
+
editor,
|
|
28
|
+
requestRender,
|
|
29
|
+
async init(): Promise<ExtensionUIContext> {
|
|
30
|
+
await new ExtensionUiController(ctx).initHooksAndCustomTools();
|
|
31
|
+
expect(uiContext).toBeDefined();
|
|
32
|
+
return uiContext!;
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
describe("ExtensionUiController editor UI", () => {
|
|
38
|
+
it("requests a render after extension pasteToEditor mutates the prompt", async () => {
|
|
39
|
+
const harness = makeHarness();
|
|
40
|
+
const ui = await harness.init();
|
|
41
|
+
|
|
42
|
+
ui.pasteToEditor("hello");
|
|
43
|
+
ui.pasteToEditor(" world");
|
|
44
|
+
|
|
45
|
+
expect(harness.editor.getText()).toBe("hello world");
|
|
46
|
+
expect(harness.requestRender).toHaveBeenCalledTimes(2);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("requests a render after extension setEditorText replaces the prompt", async () => {
|
|
50
|
+
const harness = makeHarness();
|
|
51
|
+
const ui = await harness.init();
|
|
52
|
+
|
|
53
|
+
ui.setEditorText("hello");
|
|
54
|
+
|
|
55
|
+
expect(harness.editor.getText()).toBe("hello");
|
|
56
|
+
expect(harness.requestRender).toHaveBeenCalledTimes(1);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
@@ -24,7 +24,7 @@ import { HookInputComponent } from "../../modes/components/hook-input";
|
|
|
24
24
|
import { HookSelectorComponent, type HookSelectorSlider } from "../../modes/components/hook-selector";
|
|
25
25
|
import { getAvailableThemesWithPaths, getThemeByName, setTheme, type Theme, theme } from "../../modes/theme/theme";
|
|
26
26
|
import type { InteractiveModeContext, InteractiveSelectorDialogOptions } from "../../modes/types";
|
|
27
|
-
import { USER_INTERRUPT_LABEL } from "../../session/messages";
|
|
27
|
+
import { normalizeCustomMessagePayload, USER_INTERRUPT_LABEL } from "../../session/messages";
|
|
28
28
|
import { setSessionTerminalTitle, setTerminalTitle } from "../../utils/title-generator";
|
|
29
29
|
|
|
30
30
|
const MAX_WIDGET_LINES = 10;
|
|
@@ -71,9 +71,13 @@ export class ExtensionUiController {
|
|
|
71
71
|
setWidget: (key, content, options) => this.setHookWidget(key, content, options),
|
|
72
72
|
setTitle: title => setTerminalTitle(title),
|
|
73
73
|
custom: (factory, options) => this.showHookCustom(factory, options),
|
|
74
|
-
setEditorText: text =>
|
|
74
|
+
setEditorText: text => {
|
|
75
|
+
this.ctx.editor.setText(text);
|
|
76
|
+
this.ctx.ui.requestRender();
|
|
77
|
+
},
|
|
75
78
|
pasteToEditor: text => {
|
|
76
79
|
this.ctx.editor.handleInput(`\x1b[200~${text}\x1b[201~`);
|
|
80
|
+
this.ctx.ui.requestRender();
|
|
77
81
|
},
|
|
78
82
|
getEditorText: () => this.ctx.editor.getText(),
|
|
79
83
|
editor: (title, prefill, dialogOptions, editorOptions) =>
|
|
@@ -106,9 +110,10 @@ export class ExtensionUiController {
|
|
|
106
110
|
const actions: ExtensionActions = {
|
|
107
111
|
sendMessage: (message, options) => {
|
|
108
112
|
const wasStreaming = this.ctx.session.isStreaming;
|
|
113
|
+
const normalized = normalizeCustomMessagePayload(message);
|
|
109
114
|
this.ctx.session
|
|
110
|
-
.sendCustomMessage(
|
|
111
|
-
.then(() => this.#applyCustomMessageDisplay(wasStreaming,
|
|
115
|
+
.sendCustomMessage(normalized, options)
|
|
116
|
+
.then(() => this.#applyCustomMessageDisplay(wasStreaming, normalized.display))
|
|
112
117
|
.catch((err: unknown) => {
|
|
113
118
|
this.ctx.showError(
|
|
114
119
|
`Extension sendMessage failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
@@ -342,9 +347,10 @@ export class ExtensionUiController {
|
|
|
342
347
|
const actions: ExtensionActions = {
|
|
343
348
|
sendMessage: (message, options) => {
|
|
344
349
|
const wasStreaming = this.ctx.session.isStreaming;
|
|
350
|
+
const normalized = normalizeCustomMessagePayload(message);
|
|
345
351
|
this.ctx.session
|
|
346
|
-
.sendCustomMessage(
|
|
347
|
-
.then(() => this.#applyCustomMessageDisplay(wasStreaming,
|
|
352
|
+
.sendCustomMessage(normalized, options)
|
|
353
|
+
.then(() => this.#applyCustomMessageDisplay(wasStreaming, normalized.display))
|
|
348
354
|
.catch((err: unknown) => {
|
|
349
355
|
const errorText = `Extension sendMessage failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
350
356
|
this.ctx.showError(errorText);
|
|
@@ -23,6 +23,7 @@ import { isLowSignalTitleInput } from "../../tiny/text";
|
|
|
23
23
|
import { tinyTitleClient } from "../../tiny/title-client";
|
|
24
24
|
import type { TinyTitleProgressEvent } from "../../tiny/title-protocol";
|
|
25
25
|
import { shortenPath, TRUNCATE_LENGTHS, truncateToWidth } from "../../tools/render-utils";
|
|
26
|
+
import { vocalizer } from "../../tts/vocalizer";
|
|
26
27
|
import {
|
|
27
28
|
copyToClipboard,
|
|
28
29
|
readImageFromClipboard,
|
|
@@ -390,6 +391,13 @@ export class InputController {
|
|
|
390
391
|
// Esc must not destroy an in-progress draft; it only disarms a previous empty-editor Esc.
|
|
391
392
|
this.ctx.lastEscapeTime = 0;
|
|
392
393
|
this.#clearStreamingEscapeArm();
|
|
394
|
+
} else if (vocalizer.isSpeaking()) {
|
|
395
|
+
// TTS buffers seconds of PCM past the streaming abort, so an Esc
|
|
396
|
+
// arriving after the model stopped would otherwise fall through to
|
|
397
|
+
// the double-Esc gesture while Kokoro reads on. Silence first;
|
|
398
|
+
// tree/branch stays reachable via a second Esc.
|
|
399
|
+
vocalizer.clear();
|
|
400
|
+
this.ctx.lastEscapeTime = 0;
|
|
393
401
|
} else {
|
|
394
402
|
// Double-interrupt with empty editor triggers /tree, /branch, or nothing based on setting
|
|
395
403
|
const action = settings.get("doubleEscapeAction");
|
|
@@ -1426,18 +1426,27 @@ export class SelectorController {
|
|
|
1426
1426
|
sessionFile: this.ctx.sessionManager.getSessionFile() ?? null,
|
|
1427
1427
|
});
|
|
1428
1428
|
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1429
|
+
const showReadyHub = () => {
|
|
1430
|
+
// The double-← gesture passes requireContent so it stays inert when
|
|
1431
|
+
// neither live nor persisted subagents are available. Persisted rows now
|
|
1432
|
+
// load asynchronously, so defer the gate until that scan has refreshed the
|
|
1433
|
+
// hub instead of treating the initial empty table as authoritative.
|
|
1434
|
+
if (options?.requireContent && hub.isEmpty) {
|
|
1435
|
+
hub.dispose();
|
|
1436
|
+
return;
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1439
|
+
this.ctx.editorContainer.clear();
|
|
1440
|
+
this.ctx.editorContainer.addChild(hub);
|
|
1441
|
+
this.ctx.ui.setFocus(hub);
|
|
1442
|
+
this.ctx.ui.requestRender();
|
|
1443
|
+
};
|
|
1444
|
+
|
|
1433
1445
|
if (options?.requireContent && hub.isEmpty) {
|
|
1434
|
-
hub.
|
|
1446
|
+
void hub.persistedSubagentsReady.then(showReadyHub);
|
|
1435
1447
|
return;
|
|
1436
1448
|
}
|
|
1437
1449
|
|
|
1438
|
-
|
|
1439
|
-
this.ctx.editorContainer.addChild(hub);
|
|
1440
|
-
this.ctx.ui.setFocus(hub);
|
|
1441
|
-
this.ctx.ui.requestRender();
|
|
1450
|
+
showReadyHub();
|
|
1442
1451
|
}
|
|
1443
1452
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AssistantMessage } from "@oh-my-pi/pi-ai";
|
|
2
|
-
import { getSegmenter } from "@oh-my-pi/pi-tui";
|
|
2
|
+
import { type Component, getSegmenter } from "@oh-my-pi/pi-tui";
|
|
3
3
|
import { LRUCache } from "lru-cache/raw";
|
|
4
4
|
import { formatThinkingForDisplay, hasDisplayableThinking } from "../../utils/thinking-display";
|
|
5
5
|
import type { AssistantMessageComponent } from "../components/assistant-message";
|
|
@@ -10,14 +10,21 @@ export const CATCHUP_FRAMES = 8;
|
|
|
10
10
|
|
|
11
11
|
type AssistantContentBlock = AssistantMessage["content"][number];
|
|
12
12
|
type DisplayThinkingContentBlock = Extract<AssistantContentBlock, { type: "thinking" }> & { rawThinking?: string };
|
|
13
|
-
|
|
13
|
+
/** The concrete streaming-reveal target is an {@link AssistantMessageComponent}; the
|
|
14
|
+
* Component intersection is what lets the reveal request component-scoped renders
|
|
15
|
+
* through {@link TUI.requestComponentRender} instead of forcing a full-tree walk. */
|
|
16
|
+
type StreamingRevealComponent = Pick<AssistantMessageComponent, "updateContent"> & Component;
|
|
14
17
|
type GraphemeSlicer = (index: number, text: string, units: number) => string;
|
|
15
18
|
|
|
16
19
|
type StreamingRevealControllerOptions = {
|
|
17
20
|
getSmoothStreaming(): boolean;
|
|
18
21
|
getHideThinkingBlock(): boolean;
|
|
19
22
|
getProseOnlyThinking(): boolean;
|
|
20
|
-
|
|
23
|
+
/** Called after each reveal tick with the component whose subtree changed;
|
|
24
|
+
* callers scope the render to that subtree (a full tree walk here at 30fps
|
|
25
|
+
* costs 5% of CPU on its own and drives the Box/Container overhead that
|
|
26
|
+
* cascades into another ~15% — see issue #4377). */
|
|
27
|
+
requestRender(component: Component): void;
|
|
21
28
|
};
|
|
22
29
|
|
|
23
30
|
const graphemeCountCache = new LRUCache<string, number>({ max: 128 });
|
|
@@ -210,7 +217,7 @@ export class StreamingRevealController {
|
|
|
210
217
|
readonly #getSmoothStreaming: () => boolean;
|
|
211
218
|
readonly #getHideThinkingBlock: () => boolean;
|
|
212
219
|
readonly #getProseOnlyThinking: () => boolean;
|
|
213
|
-
readonly #requestRender: () => void;
|
|
220
|
+
readonly #requestRender: (component: Component) => void;
|
|
214
221
|
#target: AssistantMessage | undefined;
|
|
215
222
|
#component: StreamingRevealComponent | undefined;
|
|
216
223
|
#timer: NodeJS.Timeout | undefined;
|
|
@@ -384,7 +391,7 @@ export class StreamingRevealController {
|
|
|
384
391
|
component.updateContent(this.#build(target, this.#revealed), {
|
|
385
392
|
transient: true,
|
|
386
393
|
});
|
|
387
|
-
this.#requestRender();
|
|
394
|
+
this.#requestRender(component);
|
|
388
395
|
if (this.#revealed >= total) {
|
|
389
396
|
this.#stopTimer();
|
|
390
397
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { Component } from "@oh-my-pi/pi-tui";
|
|
1
2
|
import { parseStreamingJson, parseStreamingJsonThrottled, STREAMING_JSON_PARSE_MIN_GROWTH } from "@oh-my-pi/pi-utils";
|
|
2
3
|
import { nextStep, STREAMING_REVEAL_FRAME_MS } from "./streaming-reveal";
|
|
3
4
|
|
|
4
5
|
/** Minimal component surface the reveal pushes frames into. */
|
|
5
|
-
type ToolArgsRevealComponent = {
|
|
6
|
+
type ToolArgsRevealComponent = Component & {
|
|
6
7
|
updateArgs(args: unknown, toolCallId?: string): void;
|
|
7
8
|
};
|
|
8
9
|
|
|
@@ -25,7 +26,10 @@ export function streamingStringKeysForTool(toolName: string, rawInput: boolean):
|
|
|
25
26
|
|
|
26
27
|
type ToolArgsRevealControllerOptions = {
|
|
27
28
|
getSmoothStreaming(): boolean;
|
|
28
|
-
|
|
29
|
+
/** Called after each reveal tick with the component whose subtree changed;
|
|
30
|
+
* callers scope the render to that subtree instead of forcing a full-tree
|
|
31
|
+
* walk at 30fps (issue #4377). */
|
|
32
|
+
requestRender(component: Component): void;
|
|
29
33
|
};
|
|
30
34
|
|
|
31
35
|
type StreamingJsonStringExtractorResult = {
|
|
@@ -438,7 +442,7 @@ export function decodeStreamedToolArgs(partialJson: string, source: StreamedTool
|
|
|
438
442
|
*/
|
|
439
443
|
export class ToolArgsRevealController {
|
|
440
444
|
readonly #getSmoothStreaming: () => boolean;
|
|
441
|
-
readonly #requestRender: () => void;
|
|
445
|
+
readonly #requestRender: (component: Component) => void;
|
|
442
446
|
readonly #entries = new Map<string, RevealEntry>();
|
|
443
447
|
#timer: NodeJS.Timeout | undefined;
|
|
444
448
|
|
|
@@ -560,7 +564,10 @@ export class ToolArgsRevealController {
|
|
|
560
564
|
|
|
561
565
|
#tick(): void {
|
|
562
566
|
let advanced = false;
|
|
563
|
-
|
|
567
|
+
// Collect components with changed display args; render each subtree once
|
|
568
|
+
// per tick even when multiple entries share a component (they don't
|
|
569
|
+
// today, but the API contract doesn't prevent it).
|
|
570
|
+
const rendered = new Set<ToolArgsRevealComponent>();
|
|
564
571
|
for (const [id, entry] of this.#entries) {
|
|
565
572
|
const backlog = entry.target.length - entry.revealed;
|
|
566
573
|
if (backlog <= 0 || !entry.component) continue;
|
|
@@ -568,12 +575,12 @@ export class ToolArgsRevealController {
|
|
|
568
575
|
const display = displayArgsForPrefix(entry, entry.target.slice(0, entry.revealed));
|
|
569
576
|
if (display.changed) {
|
|
570
577
|
entry.component.updateArgs(display.args, id);
|
|
571
|
-
rendered
|
|
578
|
+
rendered.add(entry.component);
|
|
572
579
|
}
|
|
573
580
|
advanced = true;
|
|
574
581
|
}
|
|
575
582
|
if (advanced) {
|
|
576
|
-
|
|
583
|
+
for (const component of rendered) this.#requestRender(component);
|
|
577
584
|
} else {
|
|
578
585
|
// Every entry caught up (or unbound); setTarget restarts on growth.
|
|
579
586
|
this.#stopTimer();
|