@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
package/src/tools/read.ts
CHANGED
|
@@ -334,6 +334,24 @@ function contiguousLineNumbers(startLine: number, count: number): number[] {
|
|
|
334
334
|
return lines;
|
|
335
335
|
}
|
|
336
336
|
|
|
337
|
+
function lineNumbersFromSpans(spans: readonly { startLine: number; endLine: number }[]): number[] {
|
|
338
|
+
const lines: number[] = [];
|
|
339
|
+
for (const span of spans) {
|
|
340
|
+
for (let line = span.startLine; line <= span.endLine; line++) lines.push(line);
|
|
341
|
+
}
|
|
342
|
+
return lines;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
function recordInMemorySeenLines(
|
|
346
|
+
session: ToolSession,
|
|
347
|
+
absolutePath: string | undefined,
|
|
348
|
+
fullText: string,
|
|
349
|
+
seenLines: readonly number[] | undefined,
|
|
350
|
+
): void {
|
|
351
|
+
if (!absolutePath || !path.isAbsolute(absolutePath) || !seenLines || seenLines.length === 0) return;
|
|
352
|
+
getFileSnapshotStore(session).record(canonicalSnapshotKey(absolutePath), normalizeToLF(fullText), seenLines);
|
|
353
|
+
}
|
|
354
|
+
|
|
337
355
|
function lineNumbersFromEntries(entries: readonly LineEntry[]): number[] {
|
|
338
356
|
const lines: number[] = [];
|
|
339
357
|
for (const entry of entries) {
|
|
@@ -1319,6 +1337,7 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
|
|
|
1319
1337
|
: undefined;
|
|
1320
1338
|
let emittedHashlineHeader = false;
|
|
1321
1339
|
let seenLines: number[] | undefined;
|
|
1340
|
+
let rawSeenLines: number[] | undefined;
|
|
1322
1341
|
const formatText = (content: string, startNum: number): string => {
|
|
1323
1342
|
const lineCount = countTextLines(content);
|
|
1324
1343
|
details.displayContent = {
|
|
@@ -1382,10 +1401,12 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
|
|
|
1382
1401
|
} else if (truncation.truncated) {
|
|
1383
1402
|
const outputLines = truncation.outputLines ?? countTextLines(truncation.content);
|
|
1384
1403
|
const endLineDisplay = startLineDisplay + Math.max(0, outputLines - 1);
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1404
|
+
if (options.raw === true) {
|
|
1405
|
+
rawSeenLines = contiguousLineNumbers(startLineDisplay, outputLines);
|
|
1406
|
+
outputText = formatText(truncation.content, startLineDisplay);
|
|
1407
|
+
} else {
|
|
1408
|
+
outputText = formatLineEntries(buildLineEntries(endLineDisplay), startLineDisplay);
|
|
1409
|
+
}
|
|
1389
1410
|
details.truncation = truncation;
|
|
1390
1411
|
truncationInfo = {
|
|
1391
1412
|
result: truncation,
|
|
@@ -1395,21 +1416,28 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
|
|
|
1395
1416
|
const remaining = allLines.length - (startLine + userLimitedLines);
|
|
1396
1417
|
const nextOffset = startLine + userLimitedLines + 1;
|
|
1397
1418
|
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1419
|
+
if (options.raw === true) {
|
|
1420
|
+
rawSeenLines = contiguousLineNumbers(startLineDisplay, userLimitedLines);
|
|
1421
|
+
outputText = formatText(selectedContent, startLineDisplay);
|
|
1422
|
+
} else {
|
|
1423
|
+
outputText = formatLineEntries(buildLineEntries(endLine), startLineDisplay);
|
|
1424
|
+
}
|
|
1402
1425
|
outputText += `\n\n[${remaining} more lines in ${options.entityLabel}. Use :${nextOffset} to continue]`;
|
|
1403
1426
|
} else {
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1427
|
+
if (options.raw === true) {
|
|
1428
|
+
rawSeenLines = contiguousLineNumbers(startLineDisplay, endLine - startLine);
|
|
1429
|
+
outputText = formatText(truncation.content, startLineDisplay);
|
|
1430
|
+
} else {
|
|
1431
|
+
outputText = formatLineEntries(buildLineEntries(endLine), startLineDisplay);
|
|
1432
|
+
}
|
|
1408
1433
|
}
|
|
1409
1434
|
|
|
1410
1435
|
if (hashContext?.tag && options.sourcePath && seenLines) {
|
|
1411
1436
|
recordSeenLines(this.session, options.sourcePath, hashContext.tag, seenLines);
|
|
1412
1437
|
}
|
|
1438
|
+
if (options.raw === true && options.sourcePath && options.immutable !== true && rawSeenLines) {
|
|
1439
|
+
recordInMemorySeenLines(this.session, options.sourcePath, text, rawSeenLines);
|
|
1440
|
+
}
|
|
1413
1441
|
resultBuilder.text(outputText);
|
|
1414
1442
|
if (truncationInfo) {
|
|
1415
1443
|
resultBuilder.truncation(truncationInfo.result, truncationInfo.options);
|
|
@@ -1503,6 +1531,9 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
|
|
|
1503
1531
|
if (hashContext?.tag && options.sourcePath && seenLines) {
|
|
1504
1532
|
recordSeenLines(this.session, options.sourcePath, hashContext.tag, seenLines);
|
|
1505
1533
|
}
|
|
1534
|
+
if (options.raw === true && options.sourcePath && options.immutable !== true && visibleSpans.length > 0) {
|
|
1535
|
+
recordInMemorySeenLines(this.session, options.sourcePath, text, lineNumbersFromSpans(visibleSpans));
|
|
1536
|
+
}
|
|
1506
1537
|
resultBuilder.text(finalText);
|
|
1507
1538
|
return resultBuilder.done();
|
|
1508
1539
|
}
|
|
@@ -1615,14 +1646,16 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
|
|
|
1615
1646
|
}
|
|
1616
1647
|
if (cloned) displayLines = cloned;
|
|
1617
1648
|
}
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1649
|
+
if (displayLines.length > 0) {
|
|
1650
|
+
const endLine = range.startLine + displayLines.length - 1;
|
|
1651
|
+
visibleSpans.push({ startLine: range.startLine, endLine });
|
|
1652
|
+
for (let i = 0; i < displayLines.length; i++) {
|
|
1653
|
+
displayLineByNumber.set(range.startLine + i, displayLines[i] ?? "");
|
|
1654
|
+
}
|
|
1655
|
+
if (!fullLines || rawSelector) {
|
|
1656
|
+
const blockText = displayLines.join("\n");
|
|
1657
|
+
blocks.push(formatTextWithMode(blockText, range.startLine, shouldAddHashLines, shouldAddLineNumbers));
|
|
1658
|
+
}
|
|
1626
1659
|
}
|
|
1627
1660
|
}
|
|
1628
1661
|
|
|
@@ -1662,6 +1695,9 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
|
|
|
1662
1695
|
recordSeenLinesFromBody(this.session, absolutePath, tag, outputText, clippedLines);
|
|
1663
1696
|
outputText = `${formatReadHashlineHeader(formatPathRelativeToCwd(absolutePath, this.session.cwd), tag)}\n${outputText}`;
|
|
1664
1697
|
}
|
|
1698
|
+
} else if (rawSelector && visibleSpans.length > 0) {
|
|
1699
|
+
const rawSeenLines = lineNumbersFromSpans(visibleSpans);
|
|
1700
|
+
if (rawSeenLines.length > 0) await recordFileSnapshot(this.session, absolutePath, rawSeenLines);
|
|
1665
1701
|
}
|
|
1666
1702
|
if (notices.length > 0) {
|
|
1667
1703
|
outputText = outputText ? `${outputText}\n${notices.join("\n")}` : notices.join("\n");
|
|
@@ -2669,6 +2705,13 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
|
|
|
2669
2705
|
if (hashContext?.tag) {
|
|
2670
2706
|
recordSeenLinesFromBody(this.session, absolutePath, hashContext.tag, outputText, clippedLines);
|
|
2671
2707
|
}
|
|
2708
|
+
if (rawSelector && !firstLineExceedsLimit && collectedLines.length > 0) {
|
|
2709
|
+
await recordFileSnapshot(
|
|
2710
|
+
this.session,
|
|
2711
|
+
absolutePath,
|
|
2712
|
+
contiguousLineNumbers(startLineDisplay, collectedLines.length),
|
|
2713
|
+
);
|
|
2714
|
+
}
|
|
2672
2715
|
|
|
2673
2716
|
if (capturedDisplayContent) {
|
|
2674
2717
|
details.displayContent = capturedDisplayContent;
|
|
@@ -3211,8 +3254,8 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
|
|
|
3211
3254
|
// =============================================================================
|
|
3212
3255
|
|
|
3213
3256
|
interface ReadRenderArgs {
|
|
3214
|
-
path?:
|
|
3215
|
-
file_path?:
|
|
3257
|
+
path?: unknown;
|
|
3258
|
+
file_path?: unknown;
|
|
3216
3259
|
sel?: string;
|
|
3217
3260
|
// Legacy fields from old schema — tolerated for in-flight tool calls during transition
|
|
3218
3261
|
offset?: number;
|
|
@@ -3277,11 +3320,12 @@ function formatReadPathLink(
|
|
|
3277
3320
|
|
|
3278
3321
|
export const readToolRenderer = {
|
|
3279
3322
|
renderCall(args: ReadRenderArgs, _options: RenderResultOptions, uiTheme: Theme): Component {
|
|
3280
|
-
|
|
3281
|
-
|
|
3323
|
+
const rawPath =
|
|
3324
|
+
typeof args.file_path === "string" ? args.file_path : typeof args.path === "string" ? args.path : "";
|
|
3325
|
+
if (isReadableUrlPath(rawPath)) {
|
|
3326
|
+
return renderReadUrlCall({ path: rawPath, raw: args.raw }, _options, uiTheme);
|
|
3282
3327
|
}
|
|
3283
3328
|
|
|
3284
|
-
const rawPath = args.file_path || args.path || "";
|
|
3285
3329
|
const offset = args.offset;
|
|
3286
3330
|
const limit = args.limit;
|
|
3287
3331
|
|
|
@@ -3303,7 +3347,9 @@ export const readToolRenderer = {
|
|
|
3303
3347
|
args?: ReadRenderArgs,
|
|
3304
3348
|
): Component {
|
|
3305
3349
|
const urlDetails = result.details as ReadUrlToolDetails | undefined;
|
|
3306
|
-
|
|
3350
|
+
const rawPathForKind =
|
|
3351
|
+
typeof args?.file_path === "string" ? args.file_path : typeof args?.path === "string" ? args.path : "";
|
|
3352
|
+
if (urlDetails?.kind === "url" || isReadableUrlPath(rawPathForKind)) {
|
|
3307
3353
|
return renderReadUrlResult(
|
|
3308
3354
|
result as {
|
|
3309
3355
|
content: Array<{ type: string; text?: string }>;
|
|
@@ -3318,7 +3364,8 @@ export const readToolRenderer = {
|
|
|
3318
3364
|
if (result.isError) {
|
|
3319
3365
|
const rawErrorText = result.content?.find(c => c.type === "text")?.text ?? "";
|
|
3320
3366
|
const errorText = (rawErrorText || "Unknown error").replace(/^Error:\s*/, "");
|
|
3321
|
-
const rawPath =
|
|
3367
|
+
const rawPath =
|
|
3368
|
+
typeof args?.file_path === "string" ? args.file_path : typeof args?.path === "string" ? args.path : "";
|
|
3322
3369
|
const filePath =
|
|
3323
3370
|
formatReadPathLink(rawPath, { offset: args?.offset, sourcePath: readSourceFsPath(result.details) }) ||
|
|
3324
3371
|
shortenPath(rawPath);
|
|
@@ -3345,7 +3392,8 @@ export const readToolRenderer = {
|
|
|
3345
3392
|
// echo next to the styled warning line below.
|
|
3346
3393
|
const contentText = details?.displayContent?.text ?? stripOutputNotice(rawText, details?.meta);
|
|
3347
3394
|
const imageContent = result.content?.find(c => c.type === "image");
|
|
3348
|
-
const rawPath =
|
|
3395
|
+
const rawPath =
|
|
3396
|
+
typeof args?.file_path === "string" ? args.file_path : typeof args?.path === "string" ? args.path : "";
|
|
3349
3397
|
const renderPath = splitReadRenderPath(rawPath);
|
|
3350
3398
|
const lang = getLanguageFromPath(renderPath.path);
|
|
3351
3399
|
|
|
@@ -669,7 +669,10 @@ export function truncateDiffByHunk(
|
|
|
669
669
|
// Path Utilities
|
|
670
670
|
// =============================================================================
|
|
671
671
|
|
|
672
|
-
export function shortenPath(filePath:
|
|
672
|
+
export function shortenPath(filePath: unknown, homeDir?: string): string {
|
|
673
|
+
if (typeof filePath !== "string") {
|
|
674
|
+
return "";
|
|
675
|
+
}
|
|
673
676
|
const home = homeDir ?? os.homedir();
|
|
674
677
|
if (home && filePath.startsWith(home)) {
|
|
675
678
|
const suffix = filePath.slice(home.length);
|
package/src/tools/renderers.ts
CHANGED
|
@@ -43,26 +43,6 @@ export type ToolRenderer = {
|
|
|
43
43
|
mergeCallAndResult?: boolean;
|
|
44
44
|
/** Render without background box, inline in the response flow */
|
|
45
45
|
inline?: boolean;
|
|
46
|
-
/**
|
|
47
|
-
* Whether pending-call rows are provisional: useful on screen while a tool is
|
|
48
|
-
* streaming, but not durable transcript history. `true` means every pending
|
|
49
|
-
* shape is provisional. `"collapsed"` means only the collapsed pending shape
|
|
50
|
-
* is provisional; expanded rendering is top-anchored/append-shaped enough to
|
|
51
|
-
* let the transcript commit its settled prefix. Absent = the pending preview
|
|
52
|
-
* streams rows the result render preserves.
|
|
53
|
-
*/
|
|
54
|
-
provisionalPendingPreview?: boolean | "collapsed";
|
|
55
|
-
/**
|
|
56
|
-
* Whether the partial-result render is provisional: chrome rows (header
|
|
57
|
-
* glyph, frame state) that change between `options.isPartial === true` and
|
|
58
|
-
* the final result render. When `true`, the block is treated as
|
|
59
|
-
* commit-unstable while a partial result is in flight, so the
|
|
60
|
-
* stable-prefix ratchet in `deriveLiveCommitState` cannot promote the
|
|
61
|
-
* partial chrome to native scrollback only to have the final render strand
|
|
62
|
-
* it above the settled frame. Absent = the partial render is byte-stable
|
|
63
|
-
* with the final render and may commit like any settled stream.
|
|
64
|
-
*/
|
|
65
|
-
provisionalPartialResult?: boolean;
|
|
66
46
|
/**
|
|
67
47
|
* Whether the renderer's pending-call path visibly consumes
|
|
68
48
|
* `options.spinnerFrame`. Used to avoid scheduling repaint ticks for live
|
package/src/tools/ssh.ts
CHANGED
|
@@ -386,22 +386,6 @@ export const sshToolRenderer = {
|
|
|
386
386
|
});
|
|
387
387
|
},
|
|
388
388
|
mergeCallAndResult: true,
|
|
389
|
-
// Pending call preview can re-anchor wholesale when the final result inserts
|
|
390
|
-
// the `Output` section, so no pending SSH rows may commit to native
|
|
391
|
-
// scrollback — even when expanded. The expanded pending shape was previously
|
|
392
|
-
// allowed to commit, which left two visible shapes in native scrollback once
|
|
393
|
-
// the result settled: a stale `⏳ SSH: [host]` header above the final frame,
|
|
394
|
-
// and the pending `╰──╯` footer reused in-place as the new `├── Output ──┤`
|
|
395
|
-
// separator with a fresh footer pushed below it.
|
|
396
|
-
provisionalPendingPreview: true,
|
|
397
|
-
// Partial-result chrome (pending icon and frame state) differs from the
|
|
398
|
-
// final SSH glyph/state, so the block stays commit-unstable while
|
|
399
|
-
// `options.isPartial` holds. Without this, a long-running SSH command's
|
|
400
|
-
// stable pending header would be promoted by the stable-prefix ratchet and
|
|
401
|
-
// committed to native scrollback, then the final render's SSH glyph would
|
|
402
|
-
// land below and strand a duplicate pending header above the final frame
|
|
403
|
-
// ([#3177](https://github.com/can1357/oh-my-pi/issues/3177)).
|
|
404
|
-
provisionalPartialResult: true,
|
|
405
389
|
// Streamed args can initially render the SSH placeholder (`⏳ SSH: […]` /
|
|
406
390
|
// `$ …`), then the first partial result inserts the `Output` section and
|
|
407
391
|
// re-anchors the frame. Force a full repaint at that seam so placeholder rows
|
package/src/tools/write.ts
CHANGED
|
@@ -914,7 +914,7 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
|
|
|
914
914
|
|
|
915
915
|
// Try ACP bridge first for editor-visible filesystem paths. Internal
|
|
916
916
|
// artifacts such as local:// plans are owned by OMP, not the editor.
|
|
917
|
-
if (await routeWriteThroughBridge(this.session, path, absolutePath, cleanContent)) {
|
|
917
|
+
if (await routeWriteThroughBridge(this.session, path, absolutePath, cleanContent, signal)) {
|
|
918
918
|
const madeExecutable = await maybeMarkExecutableForShebang(absolutePath, cleanContent);
|
|
919
919
|
const header = maybeWriteSnapshotHeader(this.session, absolutePath, cleanContent);
|
|
920
920
|
const writeLine = `Successfully wrote ${cleanContent.length} bytes to ${displayPath}`;
|
|
@@ -972,9 +972,9 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
|
|
|
972
972
|
// =============================================================================
|
|
973
973
|
|
|
974
974
|
interface WriteRenderArgs {
|
|
975
|
-
path?:
|
|
976
|
-
file_path?:
|
|
977
|
-
content?:
|
|
975
|
+
path?: unknown;
|
|
976
|
+
file_path?: unknown;
|
|
977
|
+
content?: unknown;
|
|
978
978
|
}
|
|
979
979
|
|
|
980
980
|
const WRITE_PREVIEW_LINES = 6;
|
|
@@ -990,8 +990,14 @@ function formatLineCountSuffix(lineCount: number, uiTheme: Theme): string {
|
|
|
990
990
|
return uiTheme.fg("dim", ` · ${lineCount} line${lineCount === 1 ? "" : "s"}`);
|
|
991
991
|
}
|
|
992
992
|
|
|
993
|
-
function normalizeDisplayText(text:
|
|
994
|
-
|
|
993
|
+
function normalizeDisplayText(text: unknown): string {
|
|
994
|
+
let displayText = "";
|
|
995
|
+
if (typeof text === "string") {
|
|
996
|
+
displayText = text;
|
|
997
|
+
} else if (text !== undefined && text !== null) {
|
|
998
|
+
displayText = String(text);
|
|
999
|
+
}
|
|
1000
|
+
return displayText.replace(/\r/g, "");
|
|
995
1001
|
}
|
|
996
1002
|
|
|
997
1003
|
/**
|
|
@@ -1082,9 +1088,10 @@ function renderContentPreview(
|
|
|
1082
1088
|
|
|
1083
1089
|
export const writeToolRenderer = {
|
|
1084
1090
|
renderCall(args: WriteRenderArgs, options: RenderResultOptions, uiTheme: Theme): Component {
|
|
1085
|
-
const rawPath =
|
|
1091
|
+
const rawPath =
|
|
1092
|
+
typeof args.file_path === "string" ? args.file_path : typeof args.path === "string" ? args.path : "";
|
|
1086
1093
|
const filePath = shortenPath(rawPath);
|
|
1087
|
-
const lang = getLanguageFromPath(rawPath) ?? "text";
|
|
1094
|
+
const lang = rawPath ? (getLanguageFromPath(rawPath) ?? "text") : "text";
|
|
1088
1095
|
const langIcon = uiTheme.fg("muted", uiTheme.getLangIcon(lang));
|
|
1089
1096
|
const pathDisplay = filePath ? uiTheme.fg("accent", filePath) : uiTheme.fg("toolOutput", "…");
|
|
1090
1097
|
// No status icon on the head row: it's the head of the framed block, and
|
|
@@ -1098,11 +1105,12 @@ export const writeToolRenderer = {
|
|
|
1098
1105
|
},
|
|
1099
1106
|
uiTheme,
|
|
1100
1107
|
);
|
|
1108
|
+
const content = normalizeDisplayText(args.content);
|
|
1101
1109
|
const streamingCache = createRenderedStringCache();
|
|
1102
1110
|
return framedBlock(uiTheme, width => {
|
|
1103
|
-
const body =
|
|
1111
|
+
const body = content
|
|
1104
1112
|
? formatStreamingContent(
|
|
1105
|
-
|
|
1113
|
+
content,
|
|
1106
1114
|
Boolean(options?.expanded),
|
|
1107
1115
|
lang,
|
|
1108
1116
|
uiTheme,
|
|
@@ -1128,10 +1136,11 @@ export const writeToolRenderer = {
|
|
|
1128
1136
|
uiTheme: Theme,
|
|
1129
1137
|
args?: WriteRenderArgs,
|
|
1130
1138
|
): Component {
|
|
1131
|
-
const rawPath =
|
|
1139
|
+
const rawPath =
|
|
1140
|
+
typeof args?.file_path === "string" ? args.file_path : typeof args?.path === "string" ? args.path : "";
|
|
1132
1141
|
const filePath = shortenPath(rawPath);
|
|
1133
|
-
const fileContent = args?.content
|
|
1134
|
-
const lang = getLanguageFromPath(rawPath);
|
|
1142
|
+
const fileContent = normalizeDisplayText(args?.content);
|
|
1143
|
+
const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
|
|
1135
1144
|
const langIcon = uiTheme.fg("muted", uiTheme.getLangIcon(lang));
|
|
1136
1145
|
// The header shows the cwd-relative path but links to the absolute path the
|
|
1137
1146
|
// write resolved to (args.path may be relative, which would yield a broken
|
|
@@ -23,10 +23,12 @@ import type { Settings } from "../config/settings";
|
|
|
23
23
|
import speechRewritePrompt from "../prompts/system/speech-rewrite.md" with { type: "text" };
|
|
24
24
|
|
|
25
25
|
const SYSTEM_PROMPT = prompt.render(speechRewritePrompt);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
// Rewrite budget: a paragraph in, a spoken paragraph (usually shorter) out.
|
|
27
|
+
// Always reserve enough room to survive backends that ignore `disableReasoning`
|
|
28
|
+
// (e.g. Qwen3 via llama.cpp catalogued `reasoning: false` but still emitting
|
|
29
|
+
// thinking). `maxTokens` is a hard cap — non-thinking completions still return
|
|
30
|
+
// in a normal spoken-paragraph budget (issue #4355).
|
|
31
|
+
const ANSWER_MAX_TOKENS = 1536;
|
|
30
32
|
/** Per-block completion deadline before falling back to mechanical cleanup. */
|
|
31
33
|
const REWRITE_TIMEOUT_MS = 6000;
|
|
32
34
|
/** Bound block characters sent to the model (huge diffs/code dumps get elided). */
|
|
@@ -89,7 +91,7 @@ export class SpeechEnhancer {
|
|
|
89
91
|
},
|
|
90
92
|
{
|
|
91
93
|
apiKey: registry.resolver(model, sessionId),
|
|
92
|
-
maxTokens:
|
|
94
|
+
maxTokens: ANSWER_MAX_TOKENS,
|
|
93
95
|
disableReasoning: true,
|
|
94
96
|
metadata,
|
|
95
97
|
signal: signal ? AbortSignal.any([signal, timeout]) : timeout,
|
package/src/tts/vocalizer.ts
CHANGED
|
@@ -195,6 +195,15 @@ export class Vocalizer {
|
|
|
195
195
|
this.#livePlayers.clear();
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
+
/**
|
|
199
|
+
* True while any utterance is still audible or synthesizing — a live
|
|
200
|
+
* player, an unfinished stream handle, or an in-flight rewrite is enough.
|
|
201
|
+
* Callers (Esc handler) treat this as the "silence me" signal.
|
|
202
|
+
*/
|
|
203
|
+
isSpeaking(): boolean {
|
|
204
|
+
return this.#livePlayers.size > 0 || this.#liveAborts.size > 0 || this.#handle !== null;
|
|
205
|
+
}
|
|
206
|
+
|
|
198
207
|
/** Lower the volume while the user is speaking (push-to-talk), so speech doesn't drown them out. */
|
|
199
208
|
duck(): void {
|
|
200
209
|
this.#ducked = true;
|
|
@@ -16,8 +16,12 @@ import { concreteThinkingLevel, toReasoningEffort } from "../thinking";
|
|
|
16
16
|
|
|
17
17
|
const COMMIT_SYSTEM_PROMPT = prompt.render(commitSystemPrompt);
|
|
18
18
|
const MAX_DIFF_CHARS = 4000;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
// Cover the "backend ignores `disableReasoning`" case unconditionally: the
|
|
20
|
+
// static `model.reasoning` catalog flag can't distinguish a thinking model
|
|
21
|
+
// declared `reasoning: false` (e.g. Qwen3 served locally via llama.cpp) from
|
|
22
|
+
// one that never emits thinking. `maxTokens` is a hard cap — non-thinking
|
|
23
|
+
// completions still return in a handful of tokens (issue #4355).
|
|
24
|
+
const COMMIT_MAX_TOKENS = 1024;
|
|
21
25
|
|
|
22
26
|
/** File patterns that should be excluded from commit message generation diffs. */
|
|
23
27
|
const NOISE_SUFFIXES = [".lock", ".lockb", "-lock.json", "-lock.yaml"];
|
|
@@ -101,9 +105,7 @@ export async function generateCommitMessage(
|
|
|
101
105
|
if (!apiKey) continue;
|
|
102
106
|
|
|
103
107
|
try {
|
|
104
|
-
const maxTokens =
|
|
105
|
-
? Math.max(COMMIT_MAX_TOKENS, REASONING_SAFE_MAX_TOKENS)
|
|
106
|
-
: COMMIT_MAX_TOKENS;
|
|
108
|
+
const maxTokens = COMMIT_MAX_TOKENS;
|
|
107
109
|
const response = await completeSimple(
|
|
108
110
|
candidate.model,
|
|
109
111
|
{
|
|
@@ -260,6 +260,7 @@ export async function getOrCreateSnapshot(
|
|
|
260
260
|
// Generate and execute snapshot script
|
|
261
261
|
const script = generateSnapshotScript(shell, snapshotPath, rcFile);
|
|
262
262
|
|
|
263
|
+
let succeeded = false;
|
|
263
264
|
try {
|
|
264
265
|
const snapshotEnv = sanitizeSnapshotEnv(env);
|
|
265
266
|
const spawnEnv: Record<string, string> = {};
|
|
@@ -289,10 +290,19 @@ export async function getOrCreateSnapshot(
|
|
|
289
290
|
}
|
|
290
291
|
scrubSnapshotInPlace(snapshotPath);
|
|
291
292
|
cachedSnapshotPaths.set(cacheKey, snapshotPath);
|
|
293
|
+
succeeded = true;
|
|
292
294
|
return snapshotPath;
|
|
293
295
|
}
|
|
294
296
|
} catch {
|
|
295
297
|
// Snapshot creation failed, proceed without it
|
|
298
|
+
} finally {
|
|
299
|
+
if (!succeeded) {
|
|
300
|
+
try {
|
|
301
|
+
fs.rmSync(snapshotPath, { force: true });
|
|
302
|
+
} catch {
|
|
303
|
+
// best-effort cleanup; force: true ignores ENOENT
|
|
304
|
+
}
|
|
305
|
+
}
|
|
296
306
|
}
|
|
297
307
|
|
|
298
308
|
return null;
|
|
@@ -23,8 +23,15 @@ const TITLE_MARKER_INSTRUCTION = prompt.render(titleMarkerInstruction);
|
|
|
23
23
|
const DEFAULT_TERMINAL_TITLE = "π";
|
|
24
24
|
const TERMINAL_TITLE_CONTROL_CHARS = /[\u0000-\u001f\u007f-\u009f]/g;
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
// Cover the "backend ignores `disableReasoning`" case unconditionally: the
|
|
27
|
+
// static `model.reasoning` catalog flag can't distinguish a thinking model that
|
|
28
|
+
// was declared with `reasoning: false` (e.g. Qwen3 served locally via llama.cpp,
|
|
29
|
+
// whose bundled jinja chat template forces `enable_thinking: true`) from one
|
|
30
|
+
// that never emits thinking. `maxTokens` is a hard cap, not a target — the
|
|
31
|
+
// happy-path completion still returns in a handful of tokens, so raising the
|
|
32
|
+
// ceiling costs nothing when thinking is genuinely suppressed and keeps the
|
|
33
|
+
// forced `set_title` tool call reachable when it isn't (issue #4355).
|
|
34
|
+
const TITLE_MAX_TOKENS = 1024;
|
|
28
35
|
const SET_TITLE_TOOL_NAME = "set_title";
|
|
29
36
|
|
|
30
37
|
const setTitleTool: Tool = {
|
|
@@ -212,11 +219,9 @@ export async function generateTitleOnline(
|
|
|
212
219
|
// account_uuid rather than the snapshot-at-call-site value.
|
|
213
220
|
const metadata = metadataResolver?.(model.provider);
|
|
214
221
|
|
|
215
|
-
// Title generation is a 3-7 word task, but
|
|
216
|
-
//
|
|
217
|
-
|
|
218
|
-
// the forced tool call after any unavoidable thinking tokens.
|
|
219
|
-
const maxTokens = model.reasoning ? Math.max(TITLE_MAX_TOKENS, REASONING_SAFE_MAX_TOKENS) : TITLE_MAX_TOKENS;
|
|
222
|
+
// Title generation is a 3-7 word task, but the ceiling has to survive
|
|
223
|
+
// backends that ignore `disableReasoning` (see TITLE_MAX_TOKENS above).
|
|
224
|
+
const maxTokens = TITLE_MAX_TOKENS;
|
|
220
225
|
logger.debug("title-generator: request", { ...modelContext, maxTokens });
|
|
221
226
|
|
|
222
227
|
const response = await completeSimple(
|
|
@@ -278,6 +278,17 @@ function findItemInModule(mod_: RustdocItem, name: string, index: Record<string,
|
|
|
278
278
|
|
|
279
279
|
const DOCS_RS_CACHE_FILENAME = "rustdoc.json";
|
|
280
280
|
|
|
281
|
+
/** Hard ceiling for decompressed rustdoc JSON: a 50 MB compressed payload can
|
|
282
|
+
* expand far enough to block the event loop or OOM without a cap. Exceeding it
|
|
283
|
+
* throws (RangeError), which the fetch path converts to a `null` result. */
|
|
284
|
+
export const MAX_RUSTDOC_GUNZIP_BYTES = 256 * 1024 * 1024;
|
|
285
|
+
|
|
286
|
+
/** Decompress a docs.rs rustdoc gzip payload with the output-size cap applied.
|
|
287
|
+
* `maxOutputLength` is overridable only for tests exercising the cap contract. */
|
|
288
|
+
export function gunzipRustdocJson(compressed: Buffer, maxOutputLength: number = MAX_RUSTDOC_GUNZIP_BYTES): string {
|
|
289
|
+
return gunzipSync(compressed, { maxOutputLength }).toString("utf-8");
|
|
290
|
+
}
|
|
291
|
+
|
|
281
292
|
function sanitizeCacheSegment(value: string): string {
|
|
282
293
|
return value.replace(/[^A-Za-z0-9._-]+/g, "_");
|
|
283
294
|
}
|
|
@@ -399,7 +410,7 @@ export const handleDocsRs: SpecialHandler = async (
|
|
|
399
410
|
}
|
|
400
411
|
|
|
401
412
|
const compressed = Buffer.concat(chunks);
|
|
402
|
-
const jsonStr =
|
|
413
|
+
const jsonStr = gunzipRustdocJson(compressed);
|
|
403
414
|
crate_ = tryParseJson<RustdocCrate>(jsonStr);
|
|
404
415
|
if (crate_?.index) {
|
|
405
416
|
await writeCachedRustdocCrate(target, jsonStr);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type ApiKey, type AuthStorage, withAuth } from "@oh-my-pi/pi-ai";
|
|
1
|
+
import { type ApiKey, type ApiKeyResolver, type AuthStorage, withAuth } from "@oh-my-pi/pi-ai";
|
|
2
|
+
import { $env } from "@oh-my-pi/pi-utils";
|
|
2
3
|
import type { SearchCitation, SearchResponse, SearchSource, SearchUsage } from "../../../web/search/types";
|
|
3
4
|
import { SearchProviderError } from "../../../web/search/types";
|
|
4
5
|
import { clampNumResults } from "../utils";
|
|
@@ -10,32 +11,6 @@ const XAI_RESPONSES_URL = "https://api.x.ai/v1/responses";
|
|
|
10
11
|
const XAI_WEB_SEARCH_MODEL = "grok-4.3";
|
|
11
12
|
const DEFAULT_NUM_RESULTS = 10;
|
|
12
13
|
const MAX_NUM_RESULTS = 30;
|
|
13
|
-
const RECENCY_DAYS: Record<NonNullable<SearchParams["recency"]>, number> = {
|
|
14
|
-
day: 1,
|
|
15
|
-
week: 7,
|
|
16
|
-
month: 30,
|
|
17
|
-
year: 365,
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
function formatUtcDate(date: Date): string {
|
|
21
|
-
return date.toISOString().slice(0, 10);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function buildRecencyDateBounds(
|
|
25
|
-
recency: NonNullable<SearchParams["recency"]>,
|
|
26
|
-
now = new Date(),
|
|
27
|
-
): {
|
|
28
|
-
from_date: string;
|
|
29
|
-
to_date: string;
|
|
30
|
-
} {
|
|
31
|
-
const toDate = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
|
|
32
|
-
const fromDate = new Date(toDate);
|
|
33
|
-
fromDate.setUTCDate(fromDate.getUTCDate() - RECENCY_DAYS[recency]);
|
|
34
|
-
return {
|
|
35
|
-
from_date: formatUtcDate(fromDate),
|
|
36
|
-
to_date: formatUtcDate(toDate),
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
14
|
|
|
40
15
|
interface XAIUrlCitationAnnotation {
|
|
41
16
|
type?: string;
|
|
@@ -86,22 +61,6 @@ function buildRequestBody(params: SearchParams): Record<string, unknown> {
|
|
|
86
61
|
tools: [{ type: "web_search" }],
|
|
87
62
|
};
|
|
88
63
|
|
|
89
|
-
const requestedSearchResults = params.numSearchResults ?? params.limit;
|
|
90
|
-
const searchParameters: Record<string, unknown> = {};
|
|
91
|
-
if (requestedSearchResults !== undefined) {
|
|
92
|
-
searchParameters.max_search_results = clampNumResults(
|
|
93
|
-
requestedSearchResults,
|
|
94
|
-
DEFAULT_NUM_RESULTS,
|
|
95
|
-
MAX_NUM_RESULTS,
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
if (params.recency) {
|
|
99
|
-
Object.assign(searchParameters, buildRecencyDateBounds(params.recency));
|
|
100
|
-
}
|
|
101
|
-
if (Object.keys(searchParameters).length > 0) {
|
|
102
|
-
body.search_parameters = searchParameters;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
64
|
if (params.maxOutputTokens !== undefined) {
|
|
106
65
|
body.max_output_tokens = params.maxOutputTokens;
|
|
107
66
|
}
|
|
@@ -263,11 +222,48 @@ function parseResponse(response: XAIResponsesResponse, resultCap: number): Searc
|
|
|
263
222
|
};
|
|
264
223
|
}
|
|
265
224
|
|
|
266
|
-
/**
|
|
267
|
-
|
|
268
|
-
|
|
225
|
+
/**
|
|
226
|
+
* Prefer `xai-oauth` only when its resolver cannot be shadowed by the shared
|
|
227
|
+
* `XAI_API_KEY` fallback before reaching a lower-priority dedicated source.
|
|
228
|
+
*/
|
|
229
|
+
function shouldPreferXAIOAuth(authStorage: AuthStorage): boolean {
|
|
230
|
+
if ($env.XAI_OAUTH_TOKEN) return true;
|
|
231
|
+
|
|
232
|
+
const origin = authStorage.getCredentialOrigin("xai-oauth");
|
|
233
|
+
if (!origin || origin.kind === "env") return false;
|
|
234
|
+
if ((origin.kind === "api_key" || origin.kind === "fallback") && $env.XAI_API_KEY) return false;
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function resolveXAIWebSearchApiKey(params: SearchParams): ApiKeyResolver {
|
|
239
|
+
const xaiResolver = params.authStorage.resolver("xai", {
|
|
240
|
+
sessionId: params.sessionId,
|
|
241
|
+
});
|
|
242
|
+
const xaiOAuthOrigin = params.authStorage.getCredentialOrigin("xai-oauth");
|
|
243
|
+
if (!shouldPreferXAIOAuth(params.authStorage)) {
|
|
244
|
+
return xaiResolver;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const xaiOAuthResolver = params.authStorage.resolver("xai-oauth", {
|
|
269
248
|
sessionId: params.sessionId,
|
|
270
249
|
});
|
|
250
|
+
return async ctx => {
|
|
251
|
+
const xaiOAuthKey = await xaiOAuthResolver(ctx);
|
|
252
|
+
if (xaiOAuthKey) {
|
|
253
|
+
const borrowedSharedEnvKey =
|
|
254
|
+
xaiOAuthOrigin?.kind === "oauth" &&
|
|
255
|
+
Boolean($env.XAI_API_KEY) &&
|
|
256
|
+
xaiOAuthKey === $env.XAI_API_KEY &&
|
|
257
|
+
xaiOAuthKey !== $env.XAI_OAUTH_TOKEN;
|
|
258
|
+
if (!borrowedSharedEnvKey) return xaiOAuthKey;
|
|
259
|
+
}
|
|
260
|
+
return xaiResolver(ctx);
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/** Execute xAI Responses API web search. */
|
|
265
|
+
export async function searchXAI(params: SearchParams): Promise<SearchResponse> {
|
|
266
|
+
const keyOrResolver: ApiKey = resolveXAIWebSearchApiKey(params);
|
|
271
267
|
|
|
272
268
|
const resultCap = clampNumResults(params.numSearchResults ?? params.limit, DEFAULT_NUM_RESULTS, MAX_NUM_RESULTS);
|
|
273
269
|
const response = await withAuth(keyOrResolver, (key: string) => callXAIResponses(key, params), {
|
|
@@ -283,7 +279,7 @@ export class XAIProvider extends SearchProvider {
|
|
|
283
279
|
readonly label = "xAI";
|
|
284
280
|
|
|
285
281
|
isAvailable(authStorage: AuthStorage): boolean {
|
|
286
|
-
return authStorage.hasAuth("xai");
|
|
282
|
+
return shouldPreferXAIOAuth(authStorage) || authStorage.hasAuth("xai");
|
|
287
283
|
}
|
|
288
284
|
|
|
289
285
|
search(params: SearchParams): Promise<SearchResponse> {
|