@oh-my-pi/pi-coding-agent 16.3.5 → 16.3.7
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 +78 -0
- package/dist/cli.js +3625 -3596
- 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/file-snapshot-store.d.ts +4 -2
- 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 -16
- 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 +13 -11
- 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 +12 -5
- 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 +17 -12
- package/dist/types/modes/components/background-tan-message.d.ts +2 -2
- package/dist/types/modes/components/bash-execution.d.ts +7 -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 +7 -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 +4 -14
- package/dist/types/modes/components/transcript-container.d.ts +26 -28
- 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 +25 -8
- 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 +57 -41
- 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 -6
- 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 +14 -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 -5
- 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 -22
- 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 -7
- 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 +8 -8
- 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 +12 -12
- 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/file-snapshot-store.ts +5 -2
- 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 -35
- 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/custom-tools/types.ts +2 -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/extensibility/shared-events.ts +9 -1
- 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/assistant-message.ts +134 -82
- package/src/modes/components/bash-execution.ts +9 -0
- package/src/modes/components/chat-transcript-builder.ts +15 -7
- package/src/modes/components/copy-selector.ts +16 -4
- package/src/modes/components/eval-execution.ts +9 -0
- 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 +12 -53
- package/src/modes/components/transcript-container.ts +82 -432
- package/src/modes/components/tree-selector.ts +9 -3
- package/src/modes/controllers/command-controller.ts +10 -3
- package/src/modes/controllers/event-controller.ts +78 -17
- package/src/modes/controllers/extension-ui-controller.test.ts +58 -0
- package/src/modes/controllers/extension-ui-controller.ts +12 -7
- package/src/modes/controllers/input-controller.ts +12 -10
- 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 +66 -36
- 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 +54 -13
- package/src/modes/utils/ui-helpers.ts +17 -8
- 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 +113 -12
- package/src/session/agent-session.ts +350 -61
- package/src/session/messages.ts +102 -2
- package/src/session/session-context.ts +67 -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 -17
- package/src/tools/browser/render.ts +6 -4
- package/src/tools/browser/tab-supervisor.ts +47 -3
- package/src/tools/eval-render.ts +0 -20
- 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 +76 -28
- package/src/tools/render-utils.ts +4 -1
- package/src/tools/renderers.ts +0 -20
- package/src/tools/ssh.ts +0 -16
- package/src/tools/write.ts +22 -13
- 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
|
@@ -1029,9 +1029,6 @@ export class CommandController {
|
|
|
1029
1029
|
return;
|
|
1030
1030
|
}
|
|
1031
1031
|
const name = this.ctx.sessionManager.getSessionName()!;
|
|
1032
|
-
setSessionTerminalTitle(name, this.ctx.sessionManager.getCwd());
|
|
1033
|
-
this.ctx.statusLine.invalidate();
|
|
1034
|
-
this.ctx.updateEditorBorderColor();
|
|
1035
1032
|
this.ctx.showStatus(`Session renamed to "${name}".`);
|
|
1036
1033
|
} catch (err) {
|
|
1037
1034
|
this.ctx.showError(`Rename failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -1124,6 +1121,7 @@ export class CommandController {
|
|
|
1124
1121
|
customInstructions?: string,
|
|
1125
1122
|
mode?: CompactMode,
|
|
1126
1123
|
beforeFlush?: (outcome: CompactionOutcome) => void | Promise<void>,
|
|
1124
|
+
internalGuidance?: string,
|
|
1127
1125
|
): Promise<CompactionOutcome> {
|
|
1128
1126
|
const entries = this.ctx.sessionManager.getEntries();
|
|
1129
1127
|
const messageCount = entries.filter(e => e.type === "message").length;
|
|
@@ -1133,6 +1131,15 @@ export class CommandController {
|
|
|
1133
1131
|
return "ok";
|
|
1134
1132
|
}
|
|
1135
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
|
+
}
|
|
1136
1143
|
return this.executeCompaction(customInstructions, false, beforeFlush, mode);
|
|
1137
1144
|
}
|
|
1138
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
|
|
|
@@ -84,6 +85,8 @@ export class EventController {
|
|
|
84
85
|
// restored when the banner clears at the next `agent_start` (see
|
|
85
86
|
// #handleMessageEnd / #handleAgentStart).
|
|
86
87
|
#pinnedErrorComponent: AssistantMessageComponent | undefined = undefined;
|
|
88
|
+
#retrySupersededAssistantComponents = new Map<string, AssistantMessageComponent>();
|
|
89
|
+
#retrySupersededAssistantQueue: AssistantMessageComponent[] = [];
|
|
87
90
|
#idleCompactionTimer?: NodeJS.Timeout;
|
|
88
91
|
#idleRecapTimer?: NodeJS.Timeout;
|
|
89
92
|
// In-flight ephemeral recap turn; aborted by #cancelIdleRecap when any
|
|
@@ -131,11 +134,11 @@ export class EventController {
|
|
|
131
134
|
getSmoothStreaming: () => this.ctx.settings.get("display.smoothStreaming"),
|
|
132
135
|
getHideThinkingBlock: () => this.ctx.effectiveHideThinkingBlock,
|
|
133
136
|
getProseOnlyThinking: () => this.ctx.proseOnlyThinking,
|
|
134
|
-
requestRender:
|
|
137
|
+
requestRender: component => this.ctx.ui.requestComponentRender(component),
|
|
135
138
|
});
|
|
136
139
|
this.#toolArgsReveal = new ToolArgsRevealController({
|
|
137
140
|
getSmoothStreaming: () => this.ctx.settings.get("display.smoothStreaming"),
|
|
138
|
-
requestRender:
|
|
141
|
+
requestRender: component => this.ctx.ui.requestComponentRender(component),
|
|
139
142
|
});
|
|
140
143
|
this.#handlers = {
|
|
141
144
|
agent_start: e => this.#handleAgentStart(e),
|
|
@@ -325,6 +328,42 @@ export class EventController {
|
|
|
325
328
|
this.#terminalProgressActive = false;
|
|
326
329
|
}
|
|
327
330
|
|
|
331
|
+
#trackRetrySupersededAssistantComponent(component: AssistantMessageComponent | undefined): void {
|
|
332
|
+
if (!component) return;
|
|
333
|
+
const persistenceKey = component.messagePersistenceKey();
|
|
334
|
+
if (persistenceKey) this.#retrySupersededAssistantComponents.set(persistenceKey, component);
|
|
335
|
+
if (!this.#retrySupersededAssistantQueue.includes(component)) {
|
|
336
|
+
this.#retrySupersededAssistantQueue.push(component);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
#takeRetrySupersededAssistantComponent(persistenceKey: string | undefined): AssistantMessageComponent | undefined {
|
|
341
|
+
if (persistenceKey) {
|
|
342
|
+
const component = this.#retrySupersededAssistantComponents.get(persistenceKey);
|
|
343
|
+
if (component) {
|
|
344
|
+
this.#retrySupersededAssistantComponents.delete(persistenceKey);
|
|
345
|
+
this.#retrySupersededAssistantQueue = this.#retrySupersededAssistantQueue.filter(
|
|
346
|
+
item => item !== component,
|
|
347
|
+
);
|
|
348
|
+
return component;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
while (this.#retrySupersededAssistantQueue.length > 0) {
|
|
352
|
+
const component = this.#retrySupersededAssistantQueue.shift();
|
|
353
|
+
if (!component) continue;
|
|
354
|
+
const key = component.messagePersistenceKey();
|
|
355
|
+
if (key && this.#retrySupersededAssistantComponents.get(key) !== component) continue;
|
|
356
|
+
if (key) this.#retrySupersededAssistantComponents.delete(key);
|
|
357
|
+
return component;
|
|
358
|
+
}
|
|
359
|
+
return undefined;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
#clearRetrySupersededAssistantComponents(): void {
|
|
363
|
+
this.#retrySupersededAssistantComponents.clear();
|
|
364
|
+
this.#retrySupersededAssistantQueue = [];
|
|
365
|
+
}
|
|
366
|
+
|
|
328
367
|
async #handleAgentStart(_event: Extract<AgentSessionEvent, { type: "agent_start" }>): Promise<void> {
|
|
329
368
|
this.#lastIntent = undefined;
|
|
330
369
|
this.#readToolCallArgs.clear();
|
|
@@ -468,7 +507,7 @@ export class EventController {
|
|
|
468
507
|
if (!components) return;
|
|
469
508
|
let removed = false;
|
|
470
509
|
for (const component of components) {
|
|
471
|
-
if (!this.ctx.chatContainer.
|
|
510
|
+
if (!this.ctx.chatContainer.isBlockUncommitted(component)) continue;
|
|
472
511
|
this.ctx.chatContainer.removeChild(component);
|
|
473
512
|
removed = true;
|
|
474
513
|
}
|
|
@@ -493,16 +532,20 @@ export class EventController {
|
|
|
493
532
|
* Resolve the pending displaceable poll block before the next block lands.
|
|
494
533
|
* A follow-up `job` call displaces it — the stale "waiting on N jobs" frame
|
|
495
534
|
* is removed so repeated polls read as one persistent poll — while anything
|
|
496
|
-
* else seals it in place as final history. Removal is
|
|
497
|
-
*
|
|
498
|
-
*
|
|
499
|
-
*
|
|
535
|
+
* else seals it in place as final history. Removal is gated on none of the
|
|
536
|
+
* block's rows having entered native scrollback: rows already on the tape
|
|
537
|
+
* are immutable visual history, so a scrolled-off poll seals instead of
|
|
538
|
+
* being retracted.
|
|
500
539
|
*/
|
|
501
540
|
#resolveDisplaceablePoll(nextToolName?: string): void {
|
|
502
541
|
const previous = this.#displaceablePollComponent;
|
|
503
542
|
if (!previous) return;
|
|
504
543
|
this.#displaceablePollComponent = undefined;
|
|
505
|
-
if (
|
|
544
|
+
if (
|
|
545
|
+
nextToolName === "job" &&
|
|
546
|
+
previous.isDisplaceableBlock() &&
|
|
547
|
+
this.ctx.chatContainer.isBlockUncommitted(previous)
|
|
548
|
+
) {
|
|
506
549
|
this.ctx.chatContainer.removeChild(previous);
|
|
507
550
|
}
|
|
508
551
|
// Sealing stops the waiting-poll spinner and freezes the block (for a
|
|
@@ -520,7 +563,9 @@ export class EventController {
|
|
|
520
563
|
}
|
|
521
564
|
if (previous.canBeDisplacedBy(nextToolName)) {
|
|
522
565
|
this.#displaceableTodoComponent = undefined;
|
|
523
|
-
this.ctx.chatContainer.
|
|
566
|
+
if (this.ctx.chatContainer.isBlockUncommitted(previous)) {
|
|
567
|
+
this.ctx.chatContainer.removeChild(previous);
|
|
568
|
+
}
|
|
524
569
|
previous.seal();
|
|
525
570
|
this.ctx.ui.requestRender();
|
|
526
571
|
return;
|
|
@@ -805,7 +850,7 @@ export class EventController {
|
|
|
805
850
|
}
|
|
806
851
|
this.#lastAssistantComponent = this.ctx.streamingComponent;
|
|
807
852
|
this.#lastAssistantComponent.markTranscriptBlockFinalized();
|
|
808
|
-
if (settings.get("display.showTokenUsage")) {
|
|
853
|
+
if (settings.get("display.showTokenUsage") && assistantUsageIsBilled(event.message.usage)) {
|
|
809
854
|
this.ctx.chatContainer.addChild(
|
|
810
855
|
createUsageRowBlock(event.message.usage, event.message.duration, event.message.ttft),
|
|
811
856
|
);
|
|
@@ -980,7 +1025,9 @@ export class EventController {
|
|
|
980
1025
|
const previous = this.#displaceableTodoComponent;
|
|
981
1026
|
if (previous && previous !== component && previous.isDisplaceableBlock()) {
|
|
982
1027
|
this.#displaceableTodoComponent = undefined;
|
|
983
|
-
this.ctx.chatContainer.
|
|
1028
|
+
if (this.ctx.chatContainer.isBlockUncommitted(previous)) {
|
|
1029
|
+
this.ctx.chatContainer.removeChild(previous);
|
|
1030
|
+
}
|
|
984
1031
|
previous.seal();
|
|
985
1032
|
}
|
|
986
1033
|
this.#displaceableTodoComponent = component;
|
|
@@ -1219,6 +1266,7 @@ export class EventController {
|
|
|
1219
1266
|
}
|
|
1220
1267
|
|
|
1221
1268
|
async #handleAutoRetryStart(event: Extract<AgentSessionEvent, { type: "auto_retry_start" }>): Promise<void> {
|
|
1269
|
+
this.#trackRetrySupersededAssistantComponent(this.#lastAssistantComponent);
|
|
1222
1270
|
this.#stopWorkingLoader();
|
|
1223
1271
|
this.ctx.statusContainer.clear();
|
|
1224
1272
|
if (AIError.is(event.errorId, AIError.Flag.ThinkingLoop)) {
|
|
@@ -1246,7 +1294,21 @@ export class EventController {
|
|
|
1246
1294
|
this.ctx.retryLoader = undefined;
|
|
1247
1295
|
this.ctx.statusContainer.clear();
|
|
1248
1296
|
}
|
|
1249
|
-
if (
|
|
1297
|
+
if (event.success) {
|
|
1298
|
+
let appliedRecovered = false;
|
|
1299
|
+
for (const recovered of event.recoveredErrors ?? []) {
|
|
1300
|
+
const component = this.#takeRetrySupersededAssistantComponent(recovered.persistenceKey);
|
|
1301
|
+
if (!component) continue;
|
|
1302
|
+
component.applyRetryRecovery(recovered.retryRecovery);
|
|
1303
|
+
if (this.#pinnedErrorComponent === component) this.#pinnedErrorComponent = undefined;
|
|
1304
|
+
appliedRecovered = true;
|
|
1305
|
+
}
|
|
1306
|
+
if (appliedRecovered || (event.recoveredErrors?.length ?? 0) > 0) {
|
|
1307
|
+
this.ctx.clearPinnedError();
|
|
1308
|
+
}
|
|
1309
|
+
this.#clearRetrySupersededAssistantComponents();
|
|
1310
|
+
} else {
|
|
1311
|
+
this.#clearRetrySupersededAssistantComponents();
|
|
1250
1312
|
this.ctx.showError(`Retry failed after ${event.attempt} attempts: ${event.finalError || "Unknown error"}`);
|
|
1251
1313
|
}
|
|
1252
1314
|
this.#ensureWorkingLoaderWhileStreaming();
|
|
@@ -1268,15 +1330,14 @@ export class EventController {
|
|
|
1268
1330
|
async #handleTtsrTriggered(event: Extract<AgentSessionEvent, { type: "ttsr_triggered" }>): Promise<void> {
|
|
1269
1331
|
// Consecutive notifications (e.g. per-tool matches from one assistant
|
|
1270
1332
|
// message) merge into the previous block instead of stacking. Mutating an
|
|
1271
|
-
// existing block is only safe while
|
|
1272
|
-
//
|
|
1273
|
-
//
|
|
1274
|
-
// live block), so the grown block still repaints.
|
|
1333
|
+
// existing block is only safe while none of its rows have entered native
|
|
1334
|
+
// scrollback — committed rows are immutable visual history and a grown
|
|
1335
|
+
// block would shift them.
|
|
1275
1336
|
const previous = this.#lastTtsrNotification;
|
|
1276
1337
|
if (
|
|
1277
1338
|
previous &&
|
|
1278
1339
|
this.ctx.chatContainer.children.at(-1) === previous &&
|
|
1279
|
-
this.ctx.chatContainer.
|
|
1340
|
+
this.ctx.chatContainer.isBlockUncommitted(previous)
|
|
1280
1341
|
) {
|
|
1281
1342
|
previous.addRules(event.rules);
|
|
1282
1343
|
this.ctx.ui.requestRender();
|
|
@@ -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);
|
|
@@ -880,7 +886,6 @@ export class ExtensionUiController {
|
|
|
880
886
|
|
|
881
887
|
async #updateSessionName(name: string): Promise<void> {
|
|
882
888
|
await this.ctx.sessionManager.setSessionName(name, "user");
|
|
883
|
-
setSessionTerminalTitle(this.ctx.sessionManager.getSessionName(), this.ctx.sessionManager.getCwd());
|
|
884
889
|
}
|
|
885
890
|
|
|
886
891
|
#sendExtensionUserMessage: SendUserMessageHandler = (content, options) => {
|
|
@@ -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,
|
|
@@ -33,7 +34,7 @@ import { EnhancedPasteController } from "../../utils/enhanced-paste";
|
|
|
33
34
|
import { getEditorCommand, openInEditor } from "../../utils/external-editor";
|
|
34
35
|
import { ensureSupportedImageInput, ImageInputTooLargeError, loadImageInput } from "../../utils/image-loading";
|
|
35
36
|
import { resizeImage } from "../../utils/image-resize";
|
|
36
|
-
import { generateSessionTitle
|
|
37
|
+
import { generateSessionTitle } from "../../utils/title-generator";
|
|
37
38
|
|
|
38
39
|
/**
|
|
39
40
|
* Slash commands that may carry secrets in their arguments should never be
|
|
@@ -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");
|
|
@@ -843,16 +851,10 @@ export class InputController {
|
|
|
843
851
|
)
|
|
844
852
|
.then(async title => {
|
|
845
853
|
// Re-check: a concurrent attempt for an earlier message may have
|
|
846
|
-
// already named the session. Don't clobber it.
|
|
854
|
+
// already named the session. Don't clobber it. Terminal title and
|
|
855
|
+
// accent updates fire from the onSessionNameChanged listener.
|
|
847
856
|
if (title && !this.ctx.sessionManager.getSessionName()) {
|
|
848
|
-
|
|
849
|
-
if (applied) {
|
|
850
|
-
setSessionTerminalTitle(
|
|
851
|
-
this.ctx.sessionManager.getSessionName()!,
|
|
852
|
-
this.ctx.sessionManager.getCwd(),
|
|
853
|
-
);
|
|
854
|
-
this.ctx.updateEditorBorderColor();
|
|
855
|
-
}
|
|
857
|
+
await this.ctx.sessionManager.setSessionName(title, "auto");
|
|
856
858
|
}
|
|
857
859
|
})
|
|
858
860
|
.catch(err => {
|
|
@@ -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();
|