@prometheus-ai/agent 0.5.3 → 0.5.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/dist/cli.js +25110 -0
- package/dist/types/async/index.d.ts +0 -1
- package/dist/types/async/job-manager.d.ts +33 -0
- package/dist/types/autolearn/controller.d.ts +25 -0
- package/dist/types/autolearn/managed-skills.d.ts +45 -0
- package/dist/types/autoresearch/state.d.ts +1 -1
- package/dist/types/autoresearch/tools/init-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/log-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/run-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/update-notes.d.ts +1 -1
- package/dist/types/autoresearch/types.d.ts +1 -1
- package/dist/types/capability/context-file.d.ts +0 -13
- package/dist/types/capability/mcp.d.ts +1 -0
- package/dist/types/capability/rule-buckets.d.ts +1 -1
- package/dist/types/capability/rule.d.ts +6 -1
- package/dist/types/capability/types.d.ts +0 -4
- package/dist/types/cli/args.d.ts +23 -3
- package/dist/types/cli/bench-cli.d.ts +78 -0
- package/dist/types/cli/claude-trace-cli.d.ts +7 -0
- package/dist/types/cli/dry-balance-cli.d.ts +16 -2
- package/dist/types/cli/gallery-cli.d.ts +43 -0
- package/dist/types/cli/gallery-fixtures/agentic.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/codeintel.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/edit.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/fs.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/index.d.ts +4 -0
- package/dist/types/cli/gallery-fixtures/interaction.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/memory.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/misc.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/search.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/shell.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/types.d.ts +55 -0
- package/dist/types/cli/gallery-fixtures/web.d.ts +2 -0
- package/dist/types/cli/gallery-screenshot.d.ts +35 -0
- package/dist/types/cli/gateway-cli.d.ts +4 -0
- package/dist/types/cli/grievances-cli.d.ts +1 -1
- package/dist/types/cli/list-models.d.ts +6 -14
- package/dist/types/cli/models-cli.d.ts +49 -0
- package/dist/types/cli/session-picker.d.ts +1 -1
- package/dist/types/cli/setup-cli.d.ts +1 -1
- package/dist/types/cli/setup-model-picker.d.ts +14 -0
- package/dist/types/cli/startup-cwd.d.ts +2 -0
- package/dist/types/cli/update-cli.d.ts +13 -40
- package/dist/types/cli/usage-cli.d.ts +81 -0
- package/dist/types/cli-commands.d.ts +12 -0
- package/dist/types/collab/crypto.d.ts +7 -0
- package/dist/types/collab/guest.d.ts +37 -0
- package/dist/types/collab/host.d.ts +29 -0
- package/dist/types/collab/protocol.d.ts +119 -0
- package/dist/types/collab/relay-client.d.ts +22 -0
- package/dist/types/commands/bench.d.ts +29 -0
- package/dist/types/commands/gallery.d.ts +47 -0
- package/dist/types/commands/gateway.d.ts +3 -0
- package/dist/types/commands/install.d.ts +1 -1
- package/dist/types/commands/join.d.ts +12 -0
- package/dist/types/commands/launch.d.ts +8 -4
- package/dist/types/commands/models.d.ts +33 -0
- package/dist/types/commands/read.d.ts +1 -1
- package/dist/types/commands/say.d.ts +24 -0
- package/dist/types/commands/token.d.ts +25 -0
- package/dist/types/commands/usage.d.ts +34 -0
- package/dist/types/commit/agentic/tools/analyze-file.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-file-diff.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-overview.d.ts +1 -1
- package/dist/types/commit/agentic/tools/propose-changelog.d.ts +1 -1
- package/dist/types/commit/agentic/tools/propose-commit.d.ts +1 -1
- package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
- package/dist/types/commit/agentic/tools/schemas.d.ts +1 -1
- package/dist/types/commit/agentic/tools/split-commit.d.ts +1 -1
- package/dist/types/commit/analysis/conventional.d.ts +2 -2
- package/dist/types/commit/analysis/summary.d.ts +2 -2
- package/dist/types/commit/changelog/generate.d.ts +3 -3
- package/dist/types/commit/changelog/index.d.ts +2 -2
- package/dist/types/commit/map-reduce/index.d.ts +3 -3
- package/dist/types/commit/map-reduce/map-phase.d.ts +2 -2
- package/dist/types/commit/map-reduce/reduce-phase.d.ts +2 -2
- package/dist/types/commit/model-selection.d.ts +10 -4
- package/dist/types/commit/shared-llm.d.ts +1 -1
- package/dist/types/config/api-key-resolver.d.ts +43 -0
- package/dist/types/config/append-only-context-mode.d.ts +2 -1
- package/dist/types/config/keybindings.d.ts +12 -7
- package/dist/types/config/model-discovery.d.ts +57 -0
- package/dist/types/config/model-equivalence.d.ts +1 -1
- package/dist/types/config/model-registry.d.ts +86 -222
- package/dist/types/config/model-resolver.d.ts +43 -12
- package/dist/types/config/model-roles.d.ts +29 -0
- package/dist/types/config/models-config-schema.d.ts +536 -43
- package/dist/types/config/models-config.d.ts +391 -0
- package/dist/types/config/settings-schema.d.ts +1211 -324
- package/dist/types/config/settings.d.ts +15 -3
- package/dist/types/dap/config.d.ts +14 -1
- package/dist/types/dap/types.d.ts +10 -0
- package/dist/types/debug/log-viewer.d.ts +1 -1
- package/dist/types/debug/raw-sse.d.ts +1 -1
- package/dist/types/debug/report-bundle.d.ts +3 -0
- package/dist/types/debug/terminal-info.d.ts +0 -1
- package/dist/types/discovery/at-imports.d.ts +15 -0
- package/dist/types/discovery/prometheus-extension-roots.d.ts +7 -7
- package/dist/types/edit/diff.d.ts +3 -2
- package/dist/types/edit/file-snapshot-store.d.ts +18 -0
- package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
- package/dist/types/edit/hashline/params.d.ts +1 -1
- package/dist/types/edit/index.d.ts +0 -1
- package/dist/types/edit/modes/apply-patch.d.ts +1 -1
- package/dist/types/edit/modes/patch.d.ts +1 -1
- package/dist/types/edit/modes/replace.d.ts +1 -1
- package/dist/types/edit/renderer.d.ts +1 -0
- package/dist/types/eval/__tests__/completion-bridge.test.d.ts +1 -0
- package/dist/types/eval/__tests__/helpers-local-roots.test.d.ts +1 -0
- package/dist/types/eval/__tests__/js-context-manager.test.d.ts +1 -0
- package/dist/types/eval/backend.d.ts +7 -2
- package/dist/types/eval/bridge-timeout.d.ts +1 -1
- package/dist/types/eval/completion-bridge.d.ts +25 -0
- package/dist/types/eval/idle-timeout.d.ts +1 -5
- package/dist/types/eval/js/context-manager.d.ts +1 -0
- package/dist/types/eval/js/executor.d.ts +2 -0
- package/dist/types/eval/js/index.d.ts +1 -1
- package/dist/types/eval/js/shared/helpers.d.ts +7 -1
- package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
- package/dist/types/eval/js/shared/runtime.d.ts +6 -1
- package/dist/types/eval/js/worker-protocol.d.ts +6 -0
- package/dist/types/eval/py/__tests__/prelude.test.d.ts +1 -0
- package/dist/types/eval/py/executor.d.ts +12 -0
- package/dist/types/eval/py/index.d.ts +1 -1
- package/dist/types/eval/py/kernel.d.ts +6 -1
- package/dist/types/eval/py/runtime.d.ts +9 -0
- package/dist/types/exa/index.d.ts +1 -19
- package/dist/types/exa/mcp-client.d.ts +10 -3
- package/dist/types/exa/types.d.ts +0 -83
- package/dist/types/exec/bash-executor.d.ts +7 -0
- package/dist/types/export/custom-share.d.ts +1 -2
- package/dist/types/export/html/index.d.ts +39 -0
- package/dist/types/export/html/template-js.d.ts +2 -0
- package/dist/types/export/share.d.ts +61 -0
- package/dist/types/export/ttsr.d.ts +14 -0
- package/dist/types/extensibility/custom-commands/types.d.ts +9 -4
- package/dist/types/extensibility/custom-tools/loader.d.ts +30 -4
- package/dist/types/extensibility/custom-tools/types.d.ts +16 -8
- package/dist/types/extensibility/extensions/index.d.ts +1 -1
- package/dist/types/extensibility/extensions/loader.d.ts +20 -1
- package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
- package/dist/types/extensibility/extensions/runner.d.ts +5 -2
- package/dist/types/extensibility/extensions/types.d.ts +72 -11
- package/dist/types/extensibility/hooks/index.d.ts +2 -1
- package/dist/types/extensibility/hooks/loader.d.ts +1 -1
- package/dist/types/extensibility/hooks/types.d.ts +11 -5
- package/dist/types/extensibility/{legacy-pi-ai-shim.d.ts → legacy-package-ai-shim.d.ts} +2 -2
- package/dist/types/extensibility/plugins/{legacy-pi-compat.d.ts → legacy-package-compat.d.ts} +20 -3
- package/dist/types/extensibility/plugins/loader.d.ts +11 -0
- package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
- package/dist/types/extensibility/plugins/types.d.ts +2 -2
- package/dist/types/extensibility/shared-events.d.ts +3 -3
- package/dist/types/extensibility/skills.d.ts +10 -0
- package/dist/types/extensibility/slash-commands.d.ts +1 -11
- package/dist/types/gateway/adapters/telegram/access.d.ts +4 -1
- package/dist/types/gateway/adapters/telegram/setup-api.d.ts +1 -1
- package/dist/types/gateway/adapters/telegram/webhook.d.ts +1 -1
- package/dist/types/gateway/types.d.ts +1 -1
- package/dist/types/goals/guided-setup.d.ts +18 -0
- package/dist/types/goals/state.d.ts +1 -1
- package/dist/types/goals/tools/goal-tool.d.ts +1 -1
- package/dist/types/hindsight/mental-models.d.ts +17 -8
- package/dist/types/hindsight/transcript.d.ts +1 -1
- package/dist/types/index.d.ts +5 -0
- package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
- package/dist/types/internal-urls/history-protocol.d.ts +14 -0
- package/dist/types/internal-urls/index.d.ts +1 -0
- package/dist/types/internal-urls/local-protocol.d.ts +14 -2
- package/dist/types/internal-urls/types.d.ts +1 -1
- package/dist/types/irc/bus.d.ts +79 -0
- package/dist/types/lib/xai-http.d.ts +1 -1
- package/dist/types/lsp/client.d.ts +10 -0
- package/dist/types/lsp/config.d.ts +2 -2
- package/dist/types/lsp/edits.d.ts +9 -0
- package/dist/types/lsp/format-options.d.ts +32 -0
- package/dist/types/lsp/index.d.ts +2 -7
- package/dist/types/lsp/types.d.ts +13 -1
- package/dist/types/lsp/utils.d.ts +6 -2
- package/dist/types/main.d.ts +23 -8
- package/dist/types/mcp/json-rpc.d.ts +5 -0
- package/dist/types/mcp/manager.d.ts +8 -0
- package/dist/types/mcp/oauth-discovery.d.ts +6 -1
- package/dist/types/mcp/oauth-flow.d.ts +13 -3
- package/dist/types/mcp/startup-events.d.ts +11 -0
- package/dist/types/mcp/tool-bridge.d.ts +2 -0
- package/dist/types/mcp/transports/stdio.d.ts +13 -0
- package/dist/types/mcp/types.d.ts +2 -0
- package/dist/types/memories/index.d.ts +7 -15
- package/dist/types/memories/storage.d.ts +0 -10
- package/dist/types/memory-backend/index.d.ts +3 -1
- package/dist/types/memory-backend/local-backend.d.ts +4 -3
- package/dist/types/memory-backend/resolve.d.ts +2 -2
- package/dist/types/memory-backend/runtime.d.ts +4 -0
- package/dist/types/memory-backend/types.d.ts +67 -2
- package/dist/types/mnemopi/config.d.ts +31 -1
- package/dist/types/mnemopi/state.d.ts +40 -2
- package/dist/types/modes/acp/acp-agent.d.ts +1 -2
- package/dist/types/modes/components/agent-dashboard.d.ts +17 -1
- package/dist/types/modes/components/agent-hub.d.ts +82 -0
- package/dist/types/modes/components/assistant-message.d.ts +5 -12
- package/dist/types/modes/components/bash-execution.d.ts +1 -1
- package/dist/types/modes/components/chat-block.d.ts +64 -0
- package/dist/types/modes/components/collab-prompt-message.d.ts +10 -0
- package/dist/types/modes/components/compaction-summary-message.d.ts +25 -5
- package/dist/types/modes/components/copy-selector.d.ts +1 -1
- package/dist/types/modes/components/custom-editor.d.ts +49 -2
- package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
- package/dist/types/modes/components/dynamic-border.d.ts +1 -1
- package/dist/types/modes/components/extensions/extension-dashboard.d.ts +1 -1
- package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
- package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
- package/dist/types/modes/components/footer.d.ts +1 -1
- package/dist/types/modes/components/hook-editor.d.ts +5 -0
- package/dist/types/modes/components/hook-input.d.ts +4 -0
- package/dist/types/modes/components/hook-selector.d.ts +5 -7
- package/dist/types/modes/components/index.d.ts +1 -0
- package/dist/types/modes/components/late-diagnostics-message.d.ts +20 -0
- package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
- package/dist/types/modes/components/mcp-add-wizard.d.ts +2 -1
- package/dist/types/modes/components/model-selector.d.ts +1 -1
- package/dist/types/modes/components/oauth-selector.d.ts +10 -1
- package/dist/types/modes/components/overlay-box.d.ts +17 -0
- package/dist/types/modes/components/plan-review-overlay.d.ts +61 -0
- package/dist/types/modes/components/plan-toc.d.ts +41 -0
- package/dist/types/modes/components/read-tool-group.d.ts +8 -0
- package/dist/types/modes/components/reset-usage-selector.d.ts +12 -0
- package/dist/types/modes/components/segment-track.d.ts +11 -6
- package/dist/types/modes/components/session-selector.d.ts +18 -9
- package/dist/types/modes/components/settings-defs.d.ts +9 -2
- package/dist/types/modes/components/settings-selector.d.ts +17 -4
- package/dist/types/modes/components/snapcompact-shape-preview.d.ts +31 -0
- package/dist/types/modes/components/status-line/component.d.ts +61 -0
- package/dist/types/modes/components/status-line/index.d.ts +1 -0
- package/dist/types/modes/components/status-line/types.d.ts +47 -3
- package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
- package/dist/types/modes/components/tool-execution.d.ts +49 -2
- package/dist/types/modes/components/transcript-container.d.ts +76 -26
- package/dist/types/modes/components/tree-selector.d.ts +2 -2
- package/dist/types/modes/components/ttsr-notification.d.ts +5 -1
- package/dist/types/modes/components/usage-row.d.ts +3 -0
- package/dist/types/modes/components/user-message-selector.d.ts +1 -1
- package/dist/types/modes/components/user-message.d.ts +2 -1
- package/dist/types/modes/components/visual-truncate.d.ts +1 -1
- package/dist/types/modes/components/welcome.d.ts +12 -2
- package/dist/types/modes/controllers/command-controller.d.ts +3 -2
- package/dist/types/modes/controllers/event-controller.d.ts +7 -1
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -1
- package/dist/types/modes/controllers/input-controller.d.ts +25 -3
- package/dist/types/modes/controllers/mcp-command-controller.d.ts +8 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +5 -2
- package/dist/types/modes/controllers/session-focus-controller.d.ts +31 -0
- package/dist/types/modes/controllers/streaming-reveal.d.ts +22 -0
- package/dist/types/modes/controllers/tan-command-controller.d.ts +6 -0
- package/dist/types/modes/controllers/tool-args-reveal.d.ts +43 -0
- package/dist/types/modes/gradient-highlight.d.ts +9 -4
- package/dist/types/modes/image-references.d.ts +14 -3
- package/dist/types/modes/index.d.ts +8 -7
- package/dist/types/modes/interactive-mode.d.ts +92 -16
- package/dist/types/modes/magic-keywords.d.ts +14 -2
- package/dist/types/modes/markdown-prose.d.ts +1 -1
- package/dist/types/modes/oauth-manual-input.d.ts +7 -0
- package/dist/types/modes/rpc/rpc-client.d.ts +48 -2
- package/dist/types/modes/rpc/rpc-mode.d.ts +67 -2
- package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
- package/dist/types/modes/rpc/rpc-types.d.ts +113 -1
- package/dist/types/modes/runtime-init.d.ts +4 -0
- package/dist/types/modes/session-observer-registry.d.ts +9 -0
- package/dist/types/modes/setup-version.d.ts +11 -0
- package/dist/types/modes/setup-wizard/index.d.ts +7 -2
- package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
- package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +4 -1
- package/dist/types/modes/setup-wizard/scenes/types.d.ts +11 -2
- package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +6 -2
- package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
- package/dist/types/modes/theme/theme.d.ts +42 -7
- package/dist/types/modes/types.d.ts +62 -13
- package/dist/types/modes/utils/context-usage.d.ts +6 -1
- package/dist/types/modes/utils/copy-targets.d.ts +21 -1
- package/dist/types/modes/utils/ui-helpers.d.ts +4 -4
- package/dist/types/modes/workflow.d.ts +3 -3
- package/dist/types/plan-mode/approved-plan.d.ts +27 -8
- package/dist/types/plan-mode/plan-protection.d.ts +4 -4
- package/dist/types/registry/agent-lifecycle.d.ts +51 -0
- package/dist/types/registry/agent-registry.d.ts +33 -5
- package/dist/types/sdk.d.ts +46 -4
- package/dist/types/secrets/index.d.ts +1 -1
- package/dist/types/secrets/obfuscator.d.ts +9 -3
- package/dist/types/session/agent-session.d.ts +136 -66
- package/dist/types/session/agent-storage.d.ts +2 -1
- package/dist/types/session/auth-broker-config.d.ts +4 -0
- package/dist/types/session/auth-storage.d.ts +1 -1
- package/dist/types/session/codex-auto-reset.d.ts +111 -0
- package/dist/types/session/indexed-session-storage.d.ts +3 -3
- package/dist/types/session/messages.d.ts +26 -15
- package/dist/types/session/session-context.d.ts +39 -0
- package/dist/types/session/session-entries.d.ts +159 -0
- package/dist/types/session/session-history-format.d.ts +12 -0
- package/dist/types/session/session-listing.d.ts +69 -0
- package/dist/types/session/session-loader.d.ts +16 -0
- package/dist/types/session/session-manager.d.ts +107 -440
- package/dist/types/session/session-migrations.d.ts +12 -0
- package/dist/types/session/session-paths.d.ts +25 -0
- package/dist/types/session/session-persistence.d.ts +8 -0
- package/dist/types/session/session-storage.d.ts +11 -7
- package/dist/types/session/snapcompact-inline.d.ts +145 -0
- package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
- package/dist/types/session/streaming-output.d.ts +46 -0
- package/dist/types/session/tool-choice-queue.d.ts +6 -6
- package/dist/types/session/yield-queue.d.ts +10 -1
- package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
- package/dist/types/slash-commands/available-commands.d.ts +34 -0
- package/dist/types/slash-commands/builtin-registry.d.ts +10 -0
- package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +14 -0
- package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
- package/dist/types/slash-commands/helpers/reset-usage.d.ts +27 -0
- package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
- package/dist/types/slash-commands/types.d.ts +5 -9
- package/dist/types/ssh/connection-manager.d.ts +8 -0
- package/dist/types/stt/asr-client.d.ts +90 -0
- package/dist/types/stt/asr-protocol.d.ts +97 -0
- package/dist/types/stt/asr-worker.d.ts +2 -0
- package/dist/types/stt/downloader.d.ts +38 -0
- package/dist/types/stt/endpointer.d.ts +59 -0
- package/dist/types/stt/index.d.ts +5 -1
- package/dist/types/stt/models.d.ts +120 -0
- package/dist/types/stt/recorder.d.ts +17 -0
- package/dist/types/stt/stt-controller.d.ts +6 -0
- package/dist/types/stt/transcriber.d.ts +5 -7
- package/dist/types/stt/wav.d.ts +29 -0
- package/dist/types/system-prompt.d.ts +9 -1
- package/dist/types/task/commands.d.ts +1 -1
- package/dist/types/task/discovery.d.ts +1 -2
- package/dist/types/task/executor.d.ts +61 -2
- package/dist/types/task/index.d.ts +37 -6
- package/dist/types/task/output-manager.d.ts +0 -7
- package/dist/types/task/parallel.d.ts +2 -2
- package/dist/types/task/prometheus-command.d.ts +2 -2
- package/dist/types/task/render.d.ts +20 -7
- package/dist/types/task/repair-args.d.ts +8 -7
- package/dist/types/task/types.d.ts +109 -52
- package/dist/types/task/worktree.d.ts +2 -0
- package/dist/types/telemetry-export.d.ts +2 -2
- package/dist/types/thinking.d.ts +4 -0
- package/dist/types/tiny/models.d.ts +1 -1
- package/dist/types/tiny/title-client.d.ts +12 -1
- package/dist/types/tiny/title-protocol.d.ts +1 -0
- package/dist/types/tools/archive-reader.d.ts +5 -0
- package/dist/types/tools/ask.d.ts +6 -1
- package/dist/types/tools/ast-edit.d.ts +4 -1
- package/dist/types/tools/ast-grep.d.ts +4 -1
- package/dist/types/tools/bash.d.ts +5 -2
- package/dist/types/tools/browser/attach.d.ts +4 -4
- package/dist/types/tools/browser/cmux/cmux-tab.d.ts +202 -0
- package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
- package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
- package/dist/types/tools/browser/registry.d.ts +17 -3
- package/dist/types/tools/browser/render.d.ts +2 -0
- package/dist/types/tools/browser/tab-protocol.d.ts +2 -0
- package/dist/types/tools/browser/tab-supervisor.d.ts +16 -4
- package/dist/types/tools/browser/tab-worker.d.ts +18 -1
- package/dist/types/tools/browser.d.ts +3 -1
- package/dist/types/tools/checkpoint.d.ts +1 -1
- package/dist/types/tools/conflict-detect.d.ts +16 -0
- package/dist/types/tools/debug.d.ts +1 -1
- package/dist/types/tools/eval-render.d.ts +1 -8
- package/dist/types/tools/eval.d.ts +9 -1
- package/dist/types/tools/fetch.d.ts +17 -8
- package/dist/types/tools/find.d.ts +1 -8
- package/dist/types/tools/gh-cache-invalidation.d.ts +6 -0
- package/dist/types/tools/gh.d.ts +4 -1
- package/dist/types/tools/github-cache.d.ts +19 -0
- package/dist/types/tools/grouped-file-output.d.ts +46 -12
- package/dist/types/tools/image-gen.d.ts +1 -1
- package/dist/types/tools/index.d.ts +89 -8
- package/dist/types/tools/inspect-image.d.ts +1 -1
- package/dist/types/tools/irc.d.ts +79 -39
- package/dist/types/tools/job.d.ts +8 -2
- package/dist/types/tools/learn.d.ts +51 -0
- package/dist/types/tools/manage-skill.d.ts +40 -0
- package/dist/types/tools/memory-edit.d.ts +2 -2
- package/dist/types/tools/memory-recall.d.ts +1 -1
- package/dist/types/tools/memory-reflect.d.ts +1 -1
- package/dist/types/tools/memory-render.d.ts +4 -1
- package/dist/types/tools/memory-retain.d.ts +1 -1
- package/dist/types/tools/path-utils.d.ts +17 -5
- package/dist/types/tools/plan-mode-guard.d.ts +18 -9
- package/dist/types/tools/read.d.ts +3 -2
- package/dist/types/tools/render-mermaid.d.ts +1 -1
- package/dist/types/tools/render-utils.d.ts +47 -27
- package/dist/types/tools/renderers.d.ts +10 -2
- package/dist/types/tools/report-tool-issue.d.ts +6 -1
- package/dist/types/tools/resolve.d.ts +1 -1
- package/dist/types/tools/review.d.ts +1 -1
- package/dist/types/tools/search-tool-bm25.d.ts +1 -1
- package/dist/types/tools/search.d.ts +7 -3
- package/dist/types/tools/sqlite-reader.d.ts +4 -0
- package/dist/types/tools/ssh.d.ts +2 -1
- package/dist/types/tools/todo.d.ts +7 -15
- package/dist/types/tools/tool-result.d.ts +2 -0
- package/dist/types/tools/tool-timeouts.d.ts +1 -1
- package/dist/types/tools/tts.d.ts +26 -1
- package/dist/types/tools/write.d.ts +6 -3
- package/dist/types/tools/yield.d.ts +8 -0
- package/dist/types/tts/downloader.d.ts +20 -0
- package/dist/types/tts/index.d.ts +8 -0
- package/dist/types/tts/models.d.ts +82 -0
- package/dist/types/tts/player.d.ts +32 -0
- package/dist/types/tts/runtime.d.ts +6 -0
- package/dist/types/tts/streaming-player.d.ts +41 -0
- package/dist/types/tts/tts-client.d.ts +93 -0
- package/dist/types/tts/tts-protocol.d.ts +95 -0
- package/dist/types/tts/tts-worker.d.ts +2 -0
- package/dist/types/tts/vocalizer.d.ts +41 -0
- package/dist/types/tts/wav.d.ts +8 -0
- package/dist/types/tui/code-cell.d.ts +0 -2
- package/dist/types/tui/hyperlink.d.ts +13 -7
- package/dist/types/tui/output-block.d.ts +16 -22
- package/dist/types/tui/status-line.d.ts +3 -0
- package/dist/types/utils/block-context.d.ts +35 -0
- package/dist/types/utils/changelog.d.ts +8 -0
- package/dist/types/utils/clipboard.d.ts +4 -3
- package/dist/types/utils/enhanced-paste.d.ts +20 -0
- package/dist/types/utils/file-mentions.d.ts +7 -0
- package/dist/types/utils/git.d.ts +22 -3
- package/dist/types/utils/image-loading.d.ts +30 -1
- package/dist/types/utils/session-color.d.ts +15 -3
- package/dist/types/utils/thinking-display.d.ts +17 -0
- package/dist/types/utils/title-generator.d.ts +3 -2
- package/dist/types/utils/tool-choice.d.ts +8 -0
- package/dist/types/utils/tools-manager.d.ts +2 -1
- package/dist/types/web/kagi.d.ts +2 -2
- package/dist/types/web/parallel.d.ts +3 -0
- package/dist/types/web/scrapers/github.d.ts +22 -0
- package/dist/types/web/scrapers/readthedocs.d.ts +3 -0
- package/dist/types/web/scrapers/types.d.ts +12 -0
- package/dist/types/web/search/index.d.ts +1 -1
- package/dist/types/web/search/providers/anthropic.d.ts +2 -1
- package/dist/types/web/search/providers/base.d.ts +2 -1
- package/dist/types/web/search/providers/brave.d.ts +2 -1
- package/dist/types/web/search/providers/codex.d.ts +2 -1
- package/dist/types/web/search/providers/exa.d.ts +2 -1
- package/dist/types/web/search/providers/gemini.d.ts +10 -6
- package/dist/types/web/search/providers/jina.d.ts +7 -2
- package/dist/types/web/search/providers/kagi.d.ts +7 -2
- package/dist/types/web/search/providers/kimi.d.ts +7 -2
- package/dist/types/web/search/providers/parallel.d.ts +2 -1
- package/dist/types/web/search/providers/perplexity.d.ts +10 -2
- package/dist/types/web/search/providers/searxng.d.ts +2 -1
- package/dist/types/web/search/providers/synthetic.d.ts +7 -3
- package/dist/types/web/search/providers/tavily.d.ts +2 -1
- package/dist/types/web/search/providers/zai.d.ts +2 -1
- package/dist/types/web/search/types.d.ts +1 -1
- package/examples/extensions/api-demo.ts +2 -2
- package/package.json +41 -15
- package/scripts/bench-guard.ts +71 -0
- package/scripts/build-binary.ts +24 -25
- package/scripts/bundle-dist.ts +97 -0
- package/scripts/generate-share-viewer.ts +34 -0
- package/scripts/prometheus +42 -0
- package/scripts/prometheus.ts +20 -0
- package/src/async/index.ts +0 -1
- package/src/async/job-manager.ts +106 -3
- package/src/auto-thinking/classifier.ts +2 -1
- package/src/autolearn/controller.ts +139 -0
- package/src/autolearn/managed-skills.ts +257 -0
- package/src/autoresearch/dashboard.ts +1 -1
- package/src/autoresearch/prompt-setup.md +6 -6
- package/src/autoresearch/prompt.md +6 -6
- package/src/autoresearch/state.ts +1 -1
- package/src/autoresearch/storage.ts +2 -1
- package/src/autoresearch/tools/init-experiment.ts +1 -1
- package/src/autoresearch/tools/log-experiment.ts +1 -1
- package/src/autoresearch/tools/run-experiment.ts +1 -1
- package/src/autoresearch/tools/update-notes.ts +1 -1
- package/src/autoresearch/types.ts +1 -1
- package/src/capability/context-file.ts +0 -14
- package/src/capability/fs.ts +10 -0
- package/src/capability/index.ts +1 -6
- package/src/capability/mcp.ts +1 -0
- package/src/capability/rule-buckets.ts +4 -2
- package/src/capability/rule.ts +10 -1
- package/src/capability/types.ts +0 -4
- package/src/cli/args.ts +66 -13
- package/src/cli/auth-broker-cli.ts +6 -7
- package/src/cli/auth-gateway-cli.ts +8 -9
- package/src/cli/bench-cli.ts +437 -0
- package/src/cli/claude-trace-cli.ts +28 -50
- package/src/cli/completion-gen.ts +28 -28
- package/src/cli/dry-balance-cli.ts +56 -23
- package/src/cli/gallery-cli.ts +231 -0
- package/src/cli/gallery-fixtures/agentic.ts +407 -0
- package/src/cli/gallery-fixtures/codeintel.ts +187 -0
- package/src/cli/gallery-fixtures/edit.ts +194 -0
- package/src/cli/gallery-fixtures/fs.ts +220 -0
- package/src/cli/gallery-fixtures/index.ts +40 -0
- package/src/cli/gallery-fixtures/interaction.ts +49 -0
- package/src/cli/gallery-fixtures/memory.ts +81 -0
- package/src/cli/gallery-fixtures/misc.ts +250 -0
- package/src/cli/gallery-fixtures/search.ts +213 -0
- package/src/cli/gallery-fixtures/shell.ts +167 -0
- package/src/cli/gallery-fixtures/types.ts +57 -0
- package/src/cli/gallery-fixtures/web.ts +158 -0
- package/src/cli/gallery-screenshot.ts +279 -0
- package/src/cli/gateway-cli.ts +32 -2
- package/src/cli/grievances-cli.ts +1 -1
- package/src/cli/list-models.ts +16 -174
- package/src/cli/models-cli.ts +429 -0
- package/src/cli/session-picker.ts +2 -1
- package/src/cli/setup-cli.ts +148 -47
- package/src/cli/setup-model-picker.ts +43 -0
- package/src/cli/startup-cwd.ts +68 -0
- package/src/cli/update-cli.ts +144 -272
- package/src/cli/usage-cli.ts +774 -0
- package/src/cli-commands.ts +36 -0
- package/src/cli.ts +141 -32
- package/src/collab/crypto.ts +63 -0
- package/src/collab/guest.ts +451 -0
- package/src/collab/host.ts +565 -0
- package/src/collab/protocol.ts +241 -0
- package/src/collab/relay-client.ts +216 -0
- package/src/commands/bench.ts +42 -0
- package/src/commands/complete.ts +1 -1
- package/src/commands/gallery.ts +52 -0
- package/src/commands/gateway.ts +4 -0
- package/src/commands/install.ts +1 -1
- package/src/commands/join.ts +39 -0
- package/src/commands/launch.ts +8 -4
- package/src/commands/models.ts +61 -0
- package/src/commands/read.ts +6 -3
- package/src/commands/say.ts +102 -0
- package/src/commands/setup.ts +1 -1
- package/src/commands/token.ts +89 -0
- package/src/commands/usage.ts +43 -0
- package/src/commit/agentic/agent.ts +2 -1
- package/src/commit/agentic/tools/analyze-file.ts +42 -20
- package/src/commit/agentic/tools/git-file-diff.ts +1 -1
- package/src/commit/agentic/tools/git-hunk.ts +1 -1
- package/src/commit/agentic/tools/git-overview.ts +1 -1
- package/src/commit/agentic/tools/propose-changelog.ts +1 -1
- package/src/commit/agentic/tools/propose-commit.ts +1 -1
- package/src/commit/agentic/tools/recent-commits.ts +1 -1
- package/src/commit/agentic/tools/schemas.ts +1 -1
- package/src/commit/agentic/tools/split-commit.ts +9 -2
- package/src/commit/analysis/conventional.ts +2 -2
- package/src/commit/analysis/summary.ts +3 -3
- package/src/commit/changelog/generate.ts +3 -3
- package/src/commit/changelog/index.ts +2 -2
- package/src/commit/map-reduce/index.ts +3 -3
- package/src/commit/map-reduce/map-phase.ts +2 -2
- package/src/commit/map-reduce/reduce-phase.ts +2 -2
- package/src/commit/model-selection.ts +35 -12
- package/src/commit/pipeline.ts +4 -4
- package/src/commit/shared-llm.ts +1 -1
- package/src/config/api-key-resolver.ts +67 -0
- package/src/config/append-only-context-mode.ts +6 -12
- package/src/config/keybindings.ts +9 -4
- package/src/config/mcp-schema.json +4 -0
- package/src/config/model-discovery.ts +574 -0
- package/src/config/model-equivalence.ts +5 -4
- package/src/config/model-registry.ts +659 -1093
- package/src/config/model-resolver.ts +374 -174
- package/src/config/model-roles.ts +88 -0
- package/src/config/models-config-schema.ts +61 -9
- package/src/config/models-config.ts +130 -0
- package/src/config/settings-schema.ts +1445 -382
- package/src/config/settings.ts +261 -69
- package/src/dap/client.ts +138 -53
- package/src/dap/config.ts +41 -2
- package/src/dap/defaults.json +1 -0
- package/src/dap/session.ts +263 -161
- package/src/dap/types.ts +10 -0
- package/src/debug/index.ts +50 -60
- package/src/debug/log-viewer.ts +1 -1
- package/src/debug/protocol-probe.ts +1 -1
- package/src/debug/raw-sse-buffer.ts +7 -4
- package/src/debug/raw-sse.ts +1 -1
- package/src/debug/report-bundle.ts +9 -0
- package/src/debug/terminal-info.ts +0 -3
- package/src/discovery/agents-md.ts +25 -21
- package/src/discovery/agents.ts +9 -15
- package/src/discovery/at-imports.ts +273 -0
- package/src/discovery/builtin-rules/index.ts +4 -0
- package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
- package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
- package/src/discovery/builtin.ts +45 -23
- package/src/discovery/claude-plugins.ts +44 -5
- package/src/discovery/helpers.ts +50 -9
- package/src/discovery/prometheus-extension-roots.ts +10 -10
- package/src/discovery/prometheus-plugins.ts +10 -10
- package/src/edit/diff.ts +191 -4
- package/src/edit/file-snapshot-store.ts +34 -1
- package/src/edit/hashline/block-resolver.ts +20 -1
- package/src/edit/hashline/diff.ts +123 -2
- package/src/edit/hashline/execute.ts +60 -4
- package/src/edit/hashline/filesystem.ts +2 -1
- package/src/edit/hashline/noop-loop-guard.ts +99 -0
- package/src/edit/hashline/params.ts +1 -1
- package/src/edit/index.ts +47 -18
- package/src/edit/modes/apply-patch.ts +1 -1
- package/src/edit/modes/patch.ts +59 -3
- package/src/edit/modes/replace.ts +58 -24
- package/src/edit/notebook.ts +22 -2
- package/src/edit/renderer.ts +315 -151
- package/src/eval/__tests__/agent-bridge.test.ts +105 -39
- package/src/eval/__tests__/budget-bridge.test.ts +1 -1
- package/src/eval/__tests__/completion-bridge.test.ts +412 -0
- package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
- package/src/eval/__tests__/js-context-manager.test.ts +241 -0
- package/src/eval/__tests__/llm-bridge.test.ts +6 -4
- package/src/eval/__tests__/shared-executors.test.ts +34 -92
- package/src/eval/agent-bridge.ts +39 -23
- package/src/eval/backend.ts +15 -2
- package/src/eval/bridge-timeout.ts +1 -1
- package/src/eval/completion-bridge.ts +203 -0
- package/src/eval/idle-timeout.ts +3 -10
- package/src/eval/js/context-manager.ts +108 -31
- package/src/eval/js/executor.ts +9 -2
- package/src/eval/js/index.ts +7 -3
- package/src/eval/js/shared/helpers.ts +59 -13
- package/src/eval/js/shared/local-module-loader.ts +2 -2
- package/src/eval/js/shared/prelude.txt +167 -30
- package/src/eval/js/shared/rewrite-imports.ts +58 -34
- package/src/eval/js/shared/runtime.ts +24 -16
- package/src/eval/js/tool-bridge.ts +4 -0
- package/src/eval/js/worker-core.ts +1 -0
- package/src/eval/js/worker-entry.ts +6 -0
- package/src/eval/js/worker-protocol.ts +6 -0
- package/src/eval/llm-bridge.ts +2 -1
- package/src/eval/py/__tests__/prelude.test.ts +19 -0
- package/src/eval/py/executor.ts +70 -26
- package/src/eval/py/index.ts +13 -4
- package/src/eval/py/kernel.ts +48 -9
- package/src/eval/py/prelude.py +73 -24
- package/src/eval/py/runner.py +133 -28
- package/src/eval/py/runtime.ts +38 -1
- package/src/exa/index.ts +1 -26
- package/src/exa/mcp-client.ts +10 -10
- package/src/exa/types.ts +0 -97
- package/src/exec/bash-executor.ts +104 -7
- package/src/export/custom-share.ts +1 -1
- package/src/export/html/index.ts +119 -17
- package/src/export/html/share-loader.js +102 -0
- package/src/export/html/template-js.ts +6 -0
- package/src/export/html/template.css +745 -459
- package/src/export/html/template.css.d.ts +2 -0
- package/src/export/html/template.html +6 -3
- package/src/export/html/template.js +277 -891
- package/src/export/html/tool-views.generated.d.ts +2 -0
- package/src/export/html/tool-views.generated.js +38 -0
- package/src/export/share.ts +269 -0
- package/src/export/ttsr.ts +122 -1
- package/src/extensibility/custom-commands/loader.ts +7 -4
- package/src/extensibility/custom-commands/types.ts +9 -4
- package/src/extensibility/custom-tools/loader.ts +51 -23
- package/src/extensibility/custom-tools/types.ts +16 -8
- package/src/extensibility/extensions/get-commands-handler.ts +2 -1
- package/src/extensibility/extensions/index.ts +1 -0
- package/src/extensibility/extensions/loader.ts +70 -20
- package/src/extensibility/extensions/model-api.ts +41 -0
- package/src/extensibility/extensions/runner.ts +12 -2
- package/src/extensibility/extensions/types.ts +83 -11
- package/src/extensibility/extensions/wrapper.ts +41 -5
- package/src/extensibility/hooks/index.ts +2 -1
- package/src/extensibility/hooks/loader.ts +6 -3
- package/src/extensibility/hooks/types.ts +11 -5
- package/src/extensibility/{legacy-pi-ai-shim.ts → legacy-package-ai-shim.ts} +2 -2
- package/src/extensibility/plugins/doctor.ts +1 -2
- package/src/extensibility/plugins/installer.ts +2 -2
- package/src/extensibility/plugins/{legacy-pi-compat.ts → legacy-package-compat.ts} +165 -77
- package/src/extensibility/plugins/loader.ts +34 -23
- package/src/extensibility/plugins/manager.ts +226 -95
- package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
- package/src/extensibility/plugins/types.ts +3 -3
- package/src/extensibility/shared-events.ts +3 -3
- package/src/extensibility/skills.ts +113 -9
- package/src/extensibility/slash-commands.ts +1 -97
- package/src/gateway/adapters/telegram/access.ts +39 -4
- package/src/gateway/adapters/telegram/normalize.ts +16 -1
- package/src/gateway/adapters/telegram/setup-api.ts +7 -1
- package/src/gateway/adapters/telegram/webhook.ts +26 -5
- package/src/gateway/context.ts +9 -1
- package/src/gateway/types.ts +1 -1
- package/src/goals/guided-setup.ts +133 -0
- package/src/goals/state.ts +1 -1
- package/src/goals/tools/goal-tool.ts +38 -28
- package/src/hindsight/bank.ts +17 -2
- package/src/hindsight/client.ts +27 -2
- package/src/hindsight/mental-models.ts +59 -12
- package/src/hindsight/state.ts +12 -3
- package/src/hindsight/transcript.ts +1 -1
- package/src/index.ts +5 -0
- package/src/internal-urls/artifact-protocol.ts +11 -2
- package/src/internal-urls/docs-index.generated.ts +11 -9
- package/src/internal-urls/history-protocol.ts +113 -0
- package/src/internal-urls/index.ts +1 -0
- package/src/internal-urls/issue-pr-protocol.ts +22 -9
- package/src/internal-urls/local-protocol.ts +42 -7
- package/src/internal-urls/memory-protocol.ts +4 -31
- package/src/internal-urls/router.ts +3 -1
- package/src/internal-urls/types.ts +1 -1
- package/src/irc/bus.ts +303 -0
- package/src/lib/xai-http.ts +3 -3
- package/src/lsp/client.ts +245 -104
- package/src/lsp/clients/biome-client.ts +101 -39
- package/src/lsp/clients/lsp-linter-client.ts +2 -10
- package/src/lsp/config.ts +15 -5
- package/src/lsp/defaults.json +6 -0
- package/src/lsp/edits.ts +143 -95
- package/src/lsp/format-options.ts +119 -0
- package/src/lsp/index.ts +233 -93
- package/src/lsp/render.ts +11 -35
- package/src/lsp/types.ts +13 -1
- package/src/lsp/utils.ts +31 -12
- package/src/main.ts +396 -216
- package/src/mcp/config-writer.ts +7 -3
- package/src/mcp/json-rpc.ts +35 -5
- package/src/mcp/manager.ts +31 -16
- package/src/mcp/oauth-discovery.ts +34 -4
- package/src/mcp/oauth-flow.ts +61 -8
- package/src/mcp/render.ts +7 -1
- package/src/mcp/startup-events.ts +21 -0
- package/src/mcp/tool-bridge.ts +2 -0
- package/src/mcp/transports/stdio.ts +224 -4
- package/src/mcp/types.ts +2 -0
- package/src/memories/index.ts +174 -1128
- package/src/memories/storage.ts +2 -41
- package/src/memory-backend/index.ts +14 -1
- package/src/memory-backend/local-backend.ts +18 -3
- package/src/memory-backend/off-backend.ts +9 -0
- package/src/memory-backend/resolve.ts +4 -6
- package/src/memory-backend/runtime.ts +66 -0
- package/src/memory-backend/types.ts +82 -2
- package/src/mnemopi/backend.ts +220 -28
- package/src/mnemopi/config.ts +138 -33
- package/src/mnemopi/state.ts +91 -11
- package/src/modes/acp/acp-agent.ts +149 -142
- package/src/modes/acp/acp-event-mapper.ts +5 -1
- package/src/modes/components/agent-dashboard.ts +17 -11
- package/src/modes/components/agent-hub.ts +1346 -0
- package/src/modes/components/assistant-message.ts +190 -80
- package/src/modes/components/bash-execution.ts +1 -1
- package/src/modes/components/btw-panel.ts +5 -1
- package/src/modes/components/chat-block.ts +111 -0
- package/src/modes/components/collab-prompt-message.ts +30 -0
- package/src/modes/components/compaction-summary-message.ts +168 -33
- package/src/modes/components/copy-selector.ts +2 -45
- package/src/modes/components/custom-editor.test.ts +96 -0
- package/src/modes/components/custom-editor.ts +405 -118
- package/src/modes/components/custom-message.ts +1 -3
- package/src/modes/components/diff.ts +13 -2
- package/src/modes/components/dynamic-border.ts +12 -3
- package/src/modes/components/execution-shared.ts +1 -2
- package/src/modes/components/extensions/extension-dashboard.ts +8 -5
- package/src/modes/components/extensions/extension-list.ts +1 -1
- package/src/modes/components/extensions/inspector-panel.ts +7 -3
- package/src/modes/components/extensions/state-manager.ts +36 -41
- package/src/modes/components/footer.ts +4 -2
- package/src/modes/components/history-search.ts +1 -1
- package/src/modes/components/hook-editor.ts +8 -0
- package/src/modes/components/hook-input.ts +8 -0
- package/src/modes/components/hook-message.ts +1 -3
- package/src/modes/components/hook-selector.ts +6 -7
- package/src/modes/components/index.ts +1 -0
- package/src/modes/components/late-diagnostics-message.ts +60 -0
- package/src/modes/components/login-dialog.ts +1 -1
- package/src/modes/components/logout-account-selector.ts +130 -0
- package/src/modes/components/mcp-add-wizard.ts +14 -1
- package/src/modes/components/model-selector.ts +177 -75
- package/src/modes/components/oauth-selector.ts +102 -16
- package/src/modes/components/overlay-box.ts +108 -0
- package/src/modes/components/plan-review-overlay.ts +845 -0
- package/src/modes/components/plan-toc.ts +138 -0
- package/src/modes/components/plugin-settings.ts +22 -5
- package/src/modes/components/read-tool-group.ts +442 -39
- package/src/modes/components/reset-usage-selector.ts +161 -0
- package/src/modes/components/segment-track.ts +44 -7
- package/src/modes/components/session-selector.ts +97 -37
- package/src/modes/components/settings-defs.ts +28 -6
- package/src/modes/components/settings-selector.ts +541 -93
- package/src/modes/components/skill-message.ts +0 -1
- package/src/modes/components/snapcompact-shape-preview-doc.md +11 -0
- package/src/modes/components/snapcompact-shape-preview.ts +193 -0
- package/src/modes/components/{status-line.ts → status-line/component.ts} +205 -168
- package/src/modes/components/status-line/index.ts +1 -0
- package/src/modes/components/status-line/presets.ts +3 -3
- package/src/modes/components/status-line/segments.ts +26 -7
- package/src/modes/components/status-line/types.ts +40 -9
- package/src/modes/components/tiny-title-download-progress.ts +1 -1
- package/src/modes/components/tips.txt +7 -3
- package/src/modes/components/todo-reminder.ts +0 -2
- package/src/modes/components/tool-execution.ts +236 -103
- package/src/modes/components/transcript-container.ts +724 -99
- package/src/modes/components/tree-selector.ts +19 -4
- package/src/modes/components/ttsr-notification.ts +72 -30
- package/src/modes/components/usage-row.ts +18 -0
- package/src/modes/components/user-message-selector.ts +1 -1
- package/src/modes/components/user-message.ts +28 -12
- package/src/modes/components/visual-truncate.ts +1 -1
- package/src/modes/components/welcome.ts +80 -22
- package/src/modes/controllers/command-controller-shared.ts +7 -6
- package/src/modes/controllers/command-controller.ts +210 -180
- package/src/modes/controllers/event-controller.ts +352 -142
- package/src/modes/controllers/extension-ui-controller.ts +167 -208
- package/src/modes/controllers/input-controller.ts +778 -162
- package/src/modes/controllers/mcp-command-controller.ts +232 -80
- package/src/modes/controllers/selector-controller.ts +284 -145
- package/src/modes/controllers/session-focus-controller.ts +112 -0
- package/src/modes/controllers/ssh-command-controller.ts +2 -2
- package/src/modes/controllers/streaming-reveal.ts +295 -0
- package/src/modes/controllers/tan-command-controller.ts +173 -0
- package/src/modes/controllers/tool-args-reveal.ts +174 -0
- package/src/modes/gradient-highlight.ts +21 -9
- package/src/modes/image-references.ts +33 -7
- package/src/modes/index.ts +8 -25
- package/src/modes/interactive-mode.ts +840 -186
- package/src/modes/magic-keywords.ts +28 -6
- package/src/modes/markdown-prose.ts +1 -1
- package/src/modes/oauth-manual-input.ts +30 -3
- package/src/modes/rpc/rpc-client.ts +186 -3
- package/src/modes/rpc/rpc-mode.ts +318 -24
- package/src/modes/rpc/rpc-subagents.ts +265 -0
- package/src/modes/rpc/rpc-types.ts +111 -2
- package/src/modes/runtime-init.ts +28 -3
- package/src/modes/session-observer-registry.ts +72 -3
- package/src/modes/setup-version.ts +11 -0
- package/src/modes/setup-wizard/index.ts +16 -4
- package/src/modes/setup-wizard/lazy.ts +16 -0
- package/src/modes/setup-wizard/scenes/glyph.ts +25 -7
- package/src/modes/setup-wizard/scenes/providers.ts +45 -12
- package/src/modes/setup-wizard/scenes/sign-in.ts +14 -13
- package/src/modes/setup-wizard/scenes/splash.ts +1 -1
- package/src/modes/setup-wizard/scenes/telegram.ts +77 -22
- package/src/modes/setup-wizard/scenes/theme.ts +29 -2
- package/src/modes/setup-wizard/scenes/types.ts +11 -2
- package/src/modes/setup-wizard/scenes/web-search.ts +26 -9
- package/src/modes/setup-wizard/wizard-overlay.ts +40 -3
- package/src/modes/shared.ts +2 -0
- package/src/modes/theme/defaults/dark-poimandres.json +1 -1
- package/src/modes/theme/defaults/light-poimandres.json +1 -1
- package/src/modes/theme/shimmer.ts +20 -9
- package/src/modes/theme/theme-schema.json +1 -1
- package/src/modes/theme/theme.ts +342 -82
- package/src/modes/types.ts +60 -18
- package/src/modes/utils/context-usage.ts +88 -8
- package/src/modes/utils/copy-targets.ts +133 -27
- package/src/modes/utils/hotkeys-markdown.ts +3 -2
- package/src/modes/utils/ui-helpers.ts +191 -110
- package/src/modes/workflow.ts +10 -10
- package/src/plan-mode/approved-plan.ts +66 -43
- package/src/plan-mode/plan-protection.ts +4 -4
- package/src/priority.json +5 -1
- package/src/prompts/agents/designer.md +1 -1
- package/src/prompts/agents/explore.md +3 -3
- package/src/prompts/agents/librarian.md +2 -3
- package/src/prompts/agents/oracle.md +2 -2
- package/src/prompts/agents/plan.md +6 -6
- package/src/prompts/agents/reviewer.md +1 -1
- package/src/prompts/agents/task.md +6 -5
- package/src/prompts/bench.md +12 -0
- package/src/prompts/ci-green-request.md +5 -7
- package/src/prompts/goals/goal-budget-limit.md +2 -2
- package/src/prompts/goals/goal-continuation.md +4 -4
- package/src/prompts/goals/goal-mode-active.md +1 -1
- package/src/prompts/goals/guided-goal-interview.md +8 -0
- package/src/prompts/goals/guided-goal-system.md +12 -0
- package/src/prompts/memories/consolidation.md +2 -7
- package/src/prompts/memories/consolidation_system.md +4 -0
- package/src/prompts/memories/identity_review.md +2 -2
- package/src/prompts/memories/read-path.md +11 -10
- package/src/prompts/memories/stage_one_system.md +2 -2
- package/src/prompts/review-custom-request.md +1 -1
- package/src/prompts/system/agent-creation-architect.md +2 -2
- package/src/prompts/system/auto-continue.md +1 -1
- package/src/prompts/system/autolearn-guidance-learn.md +1 -0
- package/src/prompts/system/autolearn-guidance.md +7 -0
- package/src/prompts/system/autolearn-nudge.md +3 -0
- package/src/prompts/system/background-tan-dispatch.md +8 -0
- package/src/prompts/system/btw-user.md +2 -2
- package/src/prompts/system/commit-message-system.md +13 -1
- package/src/prompts/system/custom-system-prompt.md +1 -1
- package/src/prompts/system/eager-task.md +7 -0
- package/src/prompts/system/eager-todo.md +11 -6
- package/src/prompts/system/empty-stop-retry.md +4 -6
- package/src/prompts/system/irc-autoreply.md +6 -0
- package/src/prompts/system/irc-incoming.md +3 -4
- package/src/prompts/system/manual-continue.md +7 -0
- package/src/prompts/system/omfg-user.md +3 -4
- package/src/prompts/system/orchestrate-notice.md +10 -10
- package/src/prompts/system/personalities/default.md +26 -0
- package/src/prompts/system/personalities/friendly.md +17 -0
- package/src/prompts/system/personalities/pragmatic.md +15 -0
- package/src/prompts/system/plan-mode-active.md +70 -77
- package/src/prompts/system/plan-mode-approved.md +1 -1
- package/src/prompts/system/plan-mode-subagent.md +4 -5
- package/src/prompts/system/plan-mode-tool-decision-reminder.md +1 -1
- package/src/prompts/system/project-prompt.md +2 -2
- package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
- package/src/prompts/system/snapcompact-context-stub.md +1 -0
- package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
- package/src/prompts/system/snapcompact-system-stub.md +1 -0
- package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
- package/src/prompts/system/subagent-system-prompt.md +7 -8
- package/src/prompts/system/system-prompt.md +28 -57
- package/src/prompts/system/tiny-title-system.md +1 -1
- package/src/prompts/system/title-marker-instruction.md +1 -0
- package/src/prompts/system/title-system-marker.md +16 -0
- package/src/prompts/system/title-system.md +16 -3
- package/src/prompts/system/ttsr-tool-reminder.md +1 -1
- package/src/prompts/system/workflow-notice.md +4 -4
- package/src/prompts/tools/ast-edit.md +1 -1
- package/src/prompts/tools/ast-grep.md +2 -2
- package/src/prompts/tools/bash.md +16 -8
- package/src/prompts/tools/browser.md +33 -43
- package/src/prompts/tools/debug.md +1 -1
- package/src/prompts/tools/eval.md +31 -51
- package/src/prompts/tools/find.md +0 -1
- package/src/prompts/tools/github.md +8 -7
- package/src/prompts/tools/goal.md +1 -1
- package/src/prompts/tools/image-gen.md +1 -1
- package/src/prompts/tools/inspect-image-system.md +1 -1
- package/src/prompts/tools/irc.md +39 -31
- package/src/prompts/tools/job.md +2 -1
- package/src/prompts/tools/learn.md +7 -0
- package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
- package/src/prompts/tools/lsp.md +2 -2
- package/src/prompts/tools/manage-skill.md +9 -0
- package/src/prompts/tools/memory-edit.md +1 -1
- package/src/prompts/tools/patch.md +2 -2
- package/src/prompts/tools/read.md +31 -39
- package/src/prompts/tools/recall.md +1 -1
- package/src/prompts/tools/reflect.md +1 -1
- package/src/prompts/tools/render-mermaid.md +2 -2
- package/src/prompts/tools/replace.md +4 -10
- package/src/prompts/tools/rewind.md +2 -2
- package/src/prompts/tools/search-tool-bm25.md +1 -9
- package/src/prompts/tools/search.md +0 -1
- package/src/prompts/tools/ssh.md +0 -4
- package/src/prompts/tools/task-summary.md +5 -16
- package/src/prompts/tools/task.md +47 -31
- package/src/prompts/tools/todo.md +6 -3
- package/src/registry/agent-lifecycle.ts +218 -0
- package/src/registry/agent-registry.ts +46 -5
- package/src/sdk.ts +692 -219
- package/src/secrets/index.ts +8 -1
- package/src/secrets/obfuscator.ts +40 -19
- package/src/session/agent-session.ts +1577 -806
- package/src/session/agent-storage.ts +18 -9
- package/src/session/auth-broker-config.ts +30 -1
- package/src/session/auth-storage.ts +6 -0
- package/src/session/codex-auto-reset.ts +202 -0
- package/src/session/history-storage.ts +3 -2
- package/src/session/indexed-session-storage.ts +7 -10
- package/src/session/messages.ts +59 -95
- package/src/session/session-context.ts +352 -0
- package/src/session/session-dump-format.ts +12 -3
- package/src/session/session-entries.ts +194 -0
- package/src/session/session-history-format.ts +246 -0
- package/src/session/session-listing.ts +588 -0
- package/src/session/session-loader.ts +106 -0
- package/src/session/session-manager.ts +1003 -2920
- package/src/session/session-migrations.ts +78 -0
- package/src/session/session-paths.ts +193 -0
- package/src/session/session-persistence.ts +131 -0
- package/src/session/session-storage.ts +91 -30
- package/src/session/snapcompact-inline.ts +542 -0
- package/src/session/snapcompact-savings-journal.ts +113 -0
- package/src/session/streaming-output.ts +248 -11
- package/src/session/tool-choice-queue.ts +23 -11
- package/src/session/yield-queue.ts +20 -2
- package/src/slash-commands/acp-builtins.ts +25 -1
- package/src/slash-commands/available-commands.ts +105 -0
- package/src/slash-commands/builtin-registry.ts +575 -49
- package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
- package/src/slash-commands/helpers/context-report.ts +28 -1
- package/src/slash-commands/helpers/logout.ts +88 -0
- package/src/slash-commands/helpers/reset-usage.ts +66 -0
- package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
- package/src/slash-commands/helpers/usage-report.ts +38 -3
- package/src/slash-commands/types.ts +5 -9
- package/src/ssh/connection-manager.ts +27 -0
- package/src/ssh/ssh-executor.ts +60 -4
- package/src/stt/asr-client.ts +520 -0
- package/src/stt/asr-protocol.ts +65 -0
- package/src/stt/asr-worker.ts +790 -0
- package/src/stt/downloader.ts +107 -47
- package/src/stt/endpointer.ts +259 -0
- package/src/stt/index.ts +5 -1
- package/src/stt/models.ts +150 -0
- package/src/stt/recorder.ts +254 -67
- package/src/stt/stt-controller.ts +201 -22
- package/src/stt/transcriber.ts +37 -68
- package/src/stt/wav.ts +173 -0
- package/src/system-prompt.ts +52 -10
- package/src/task/agents.ts +3 -4
- package/src/task/commands.ts +3 -2
- package/src/task/discovery.ts +17 -24
- package/src/task/executor.ts +1054 -529
- package/src/task/index.ts +862 -757
- package/src/task/output-manager.ts +0 -11
- package/src/task/parallel.ts +3 -3
- package/src/task/prometheus-command.ts +2 -2
- package/src/task/render.ts +529 -182
- package/src/task/repair-args.ts +21 -9
- package/src/task/types.ts +144 -66
- package/src/task/worktree.ts +64 -56
- package/src/telemetry-export.ts +27 -9
- package/src/thinking.ts +9 -7
- package/src/tiny/models.ts +2 -2
- package/src/tiny/text.ts +5 -1
- package/src/tiny/title-client.ts +72 -20
- package/src/tiny/title-protocol.ts +1 -1
- package/src/tiny/worker.ts +23 -99
- package/src/tool-discovery/tool-index.ts +2 -0
- package/src/tools/archive-reader.ts +94 -2
- package/src/tools/ask.ts +234 -177
- package/src/tools/ast-edit.ts +136 -80
- package/src/tools/ast-grep.ts +41 -45
- package/src/tools/auto-generated-guard.ts +20 -3
- package/src/tools/bash-interactive.ts +28 -8
- package/src/tools/bash.ts +198 -35
- package/src/tools/browser/attach.ts +26 -7
- package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
- package/src/tools/browser/cmux/rpc.ts +156 -0
- package/src/tools/browser/cmux/socket-client.ts +309 -0
- package/src/tools/browser/launch.ts +11 -2
- package/src/tools/browser/readable.ts +19 -2
- package/src/tools/browser/registry.ts +52 -5
- package/src/tools/browser/render.ts +13 -5
- package/src/tools/browser/tab-protocol.ts +2 -0
- package/src/tools/browser/tab-supervisor.ts +256 -34
- package/src/tools/browser/tab-worker.ts +259 -91
- package/src/tools/browser.ts +44 -2
- package/src/tools/checkpoint.ts +1 -1
- package/src/tools/conflict-detect.ts +50 -4
- package/src/tools/debug.ts +27 -12
- package/src/tools/eval-render.ts +32 -35
- package/src/tools/eval.ts +26 -12
- package/src/tools/fetch.ts +450 -99
- package/src/tools/find.ts +182 -142
- package/src/tools/gh-cache-invalidation.ts +255 -0
- package/src/tools/gh-renderer.ts +104 -51
- package/src/tools/gh.ts +232 -37
- package/src/tools/github-cache.ts +97 -7
- package/src/tools/grouped-file-output.ts +159 -52
- package/src/tools/image-gen.ts +237 -132
- package/src/tools/index.ts +147 -26
- package/src/tools/inspect-image-renderer.ts +74 -45
- package/src/tools/inspect-image.ts +12 -6
- package/src/tools/irc.ts +626 -173
- package/src/tools/job.ts +106 -29
- package/src/tools/learn.ts +144 -0
- package/src/tools/manage-skill.ts +104 -0
- package/src/tools/memory-edit.ts +4 -4
- package/src/tools/memory-recall.ts +7 -9
- package/src/tools/memory-reflect.ts +5 -9
- package/src/tools/memory-render.ts +23 -6
- package/src/tools/memory-retain.ts +4 -4
- package/src/tools/path-utils.ts +102 -48
- package/src/tools/plan-mode-guard.ts +101 -40
- package/src/tools/read.ts +475 -120
- package/src/tools/render-mermaid.ts +1 -1
- package/src/tools/render-utils.ts +132 -76
- package/src/tools/renderers.ts +12 -1
- package/src/tools/report-tool-issue.ts +14 -6
- package/src/tools/resolve.ts +20 -3
- package/src/tools/review.ts +2 -2
- package/src/tools/search-tool-bm25.ts +37 -24
- package/src/tools/search.ts +233 -115
- package/src/tools/sqlite-reader.ts +26 -17
- package/src/tools/ssh.ts +20 -14
- package/src/tools/todo.ts +197 -191
- package/src/tools/tool-result.ts +8 -0
- package/src/tools/tool-timeouts.ts +1 -1
- package/src/tools/tts.ts +205 -74
- package/src/tools/write.ts +291 -155
- package/src/tools/yield.ts +10 -1
- package/src/tts/downloader.ts +64 -0
- package/src/tts/index.ts +8 -0
- package/src/tts/models.ts +137 -0
- package/src/tts/player.ts +137 -0
- package/src/tts/runtime.ts +21 -0
- package/src/tts/streaming-player.ts +266 -0
- package/src/tts/tts-client.ts +647 -0
- package/src/tts/tts-protocol.ts +60 -0
- package/src/tts/tts-worker.ts +505 -0
- package/src/tts/vocalizer.ts +162 -0
- package/src/tts/wav.ts +58 -0
- package/src/tui/code-cell.ts +2 -7
- package/src/tui/hyperlink.ts +40 -26
- package/src/tui/output-block.ts +60 -108
- package/src/tui/status-line.ts +5 -1
- package/src/utils/block-context.ts +312 -0
- package/src/utils/changelog.ts +27 -1
- package/src/utils/clipboard.ts +91 -22
- package/src/utils/commit-message-generator.ts +8 -3
- package/src/utils/enhanced-paste.ts +230 -0
- package/src/utils/file-mentions.ts +3 -1
- package/src/utils/git.ts +315 -15
- package/src/utils/image-loading.ts +65 -4
- package/src/utils/session-color.ts +83 -9
- package/src/utils/thinking-display.ts +37 -0
- package/src/utils/title-generator.ts +73 -10
- package/src/utils/tool-choice.ts +16 -0
- package/src/utils/tools-manager.ts +19 -1
- package/src/web/kagi.ts +28 -26
- package/src/web/parallel.ts +7 -3
- package/src/web/scrapers/arxiv.ts +1 -1
- package/src/web/scrapers/github.ts +351 -3
- package/src/web/scrapers/go-pkg.ts +1 -1
- package/src/web/scrapers/iacr.ts +1 -1
- package/src/web/scrapers/readthedocs.ts +1 -1
- package/src/web/scrapers/twitter.ts +2 -1
- package/src/web/scrapers/types.ts +87 -8
- package/src/web/scrapers/wikipedia.ts +1 -1
- package/src/web/scrapers/youtube.ts +9 -3
- package/src/web/search/index.ts +15 -2
- package/src/web/search/providers/anthropic.ts +62 -21
- package/src/web/search/providers/base.ts +2 -1
- package/src/web/search/providers/brave.ts +5 -2
- package/src/web/search/providers/codex.ts +87 -51
- package/src/web/search/providers/exa.ts +101 -10
- package/src/web/search/providers/gemini.ts +49 -24
- package/src/web/search/providers/jina.ts +15 -5
- package/src/web/search/providers/kagi.ts +9 -2
- package/src/web/search/providers/kimi.ts +45 -20
- package/src/web/search/providers/parallel.ts +39 -24
- package/src/web/search/providers/perplexity.ts +226 -63
- package/src/web/search/providers/searxng.ts +19 -3
- package/src/web/search/providers/synthetic.ts +16 -11
- package/src/web/search/providers/tavily.ts +12 -9
- package/src/web/search/providers/zai.ts +22 -9
- package/src/web/search/render.ts +59 -64
- package/src/web/search/types.ts +5 -1
- package/dist/types/discovery/context-files.d.ts +0 -17
- package/dist/types/exa/factory.d.ts +0 -13
- package/dist/types/exa/render.d.ts +0 -19
- package/dist/types/exa/researcher.d.ts +0 -9
- package/dist/types/exa/search.d.ts +0 -9
- package/dist/types/exa/websets.d.ts +0 -9
- package/dist/types/export/html/template.generated.d.ts +0 -1
- package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
- package/dist/types/modes/components/status-line.d.ts +0 -77
- package/dist/types/slash-commands/headless-plan.d.ts +0 -3
- package/dist/types/stt/setup.d.ts +0 -18
- package/scripts/generate-template.ts +0 -33
- package/src/discovery/context-files.ts +0 -49
- package/src/exa/factory.ts +0 -60
- package/src/exa/render.ts +0 -244
- package/src/exa/researcher.ts +0 -36
- package/src/exa/search.ts +0 -47
- package/src/exa/websets.ts +0 -248
- package/src/export/html/template.generated.ts +0 -2
- package/src/modes/components/session-observer-overlay.ts +0 -852
- package/src/slash-commands/headless-plan.ts +0 -142
- package/src/stt/setup.ts +0 -52
- package/src/stt/transcribe.py +0 -70
- /package/dist/types/extensibility/{legacy-pi-coding-agent-shim.d.ts → legacy-package-agent-shim.d.ts} +0 -0
- /package/src/extensibility/{legacy-pi-coding-agent-shim.ts → legacy-package-agent-shim.ts} +0 -0
package/src/tools/search.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { type GrepMatch, GrepOutputMode, type GrepResult, grep } from "@promethe
|
|
|
7
7
|
import type { Component } from "@prometheus-ai/tui";
|
|
8
8
|
import { Text } from "@prometheus-ai/tui";
|
|
9
9
|
import { prompt, untilAborted } from "@prometheus-ai/utils";
|
|
10
|
-
import
|
|
10
|
+
import { z } from "zod/v4";
|
|
11
11
|
import { recordFileSnapshot } from "../edit/file-snapshot-store";
|
|
12
12
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
13
13
|
import type { LocalProtocolOptions } from "../internal-urls/local-protocol";
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
parseArchivePathCandidates,
|
|
37
37
|
} from "./archive-reader";
|
|
38
38
|
import { createFileRecorder, formatResultPath } from "./file-recorder";
|
|
39
|
-
import { formatGroupedFiles } from "./grouped-file-output";
|
|
39
|
+
import { classifyGroupedLines, formatGroupedFiles, groupLineIndicesByBlank } from "./grouped-file-output";
|
|
40
40
|
import { formatMatchLine } from "./match-line-format";
|
|
41
41
|
import type { OutputMeta } from "./output-meta";
|
|
42
42
|
import {
|
|
@@ -61,7 +61,6 @@ import {
|
|
|
61
61
|
formatMoreItems,
|
|
62
62
|
PREVIEW_LIMITS,
|
|
63
63
|
replaceTabs,
|
|
64
|
-
splitGroupsByBlankLine,
|
|
65
64
|
} from "./render-utils";
|
|
66
65
|
import { ToolError } from "./tool-errors";
|
|
67
66
|
import { toolResult } from "./tool-result";
|
|
@@ -84,6 +83,7 @@ const searchSchema = z
|
|
|
84
83
|
gitignore: z.boolean().optional().describe("respect gitignore"),
|
|
85
84
|
skip: z
|
|
86
85
|
.number()
|
|
86
|
+
.nullable()
|
|
87
87
|
.optional()
|
|
88
88
|
.describe("files to skip before collecting results — use to paginate when the prior call hit the file limit"),
|
|
89
89
|
})
|
|
@@ -108,6 +108,14 @@ export const SINGLE_FILE_MATCHES = 200;
|
|
|
108
108
|
* (DEFAULT_FILE_LIMIT files × MULTI_FILE_PER_FILE_MATCHES matches) plus
|
|
109
109
|
* pagination headroom so the caller can see total file count. */
|
|
110
110
|
const INTERNAL_TOTAL_CAP = 2000;
|
|
111
|
+
/** Mirrors `MAX_FILE_BYTES` in `crates/prometheus-natives/src/grep.rs`. Native grep
|
|
112
|
+
* silently returns no matches for files larger than this; surface a warning
|
|
113
|
+
* when the caller explicitly targeted such a file so they know to chunk it. */
|
|
114
|
+
const NATIVE_GREP_MAX_FILE_BYTES = 4 * 1024 * 1024;
|
|
115
|
+
/** Wall-clock budget for a single native grep invocation. Without it, an
|
|
116
|
+
* aborted or runaway search (huge tree, network mount) keeps burning CPU on
|
|
117
|
+
* the native thread pool after the JS promise is abandoned. */
|
|
118
|
+
const SEARCH_GREP_TIMEOUT_MS = 30_000;
|
|
111
119
|
|
|
112
120
|
/**
|
|
113
121
|
* Parsed `paths` entry — a path (possibly archive-shaped) plus an optional
|
|
@@ -287,7 +295,6 @@ interface IndexedContentLines {
|
|
|
287
295
|
starts: number[];
|
|
288
296
|
}
|
|
289
297
|
|
|
290
|
-
const INTERNAL_URL_DISPLAY_RE = /^[a-z][a-z0-9+.-]*:\/\//i;
|
|
291
298
|
const PROMETHEUS_ROOT_URL_RE = /^prometheus:\/\/(?:\/?|docs\/?)$/i;
|
|
292
299
|
|
|
293
300
|
function normalizeSearchLine(line: string): string {
|
|
@@ -348,6 +355,8 @@ function makeVirtualMatch(
|
|
|
348
355
|
lineIndex: number,
|
|
349
356
|
contextBefore: number,
|
|
350
357
|
contextAfter: number,
|
|
358
|
+
lastEmittedLine: number,
|
|
359
|
+
nextMatchLine: number,
|
|
351
360
|
): GrepMatch {
|
|
352
361
|
const lineNumber = lineIndex + 1;
|
|
353
362
|
const { text, wasTruncated } = truncateLine(lines[lineIndex] ?? "", DEFAULT_MAX_COLUMN);
|
|
@@ -360,7 +369,9 @@ function makeVirtualMatch(
|
|
|
360
369
|
|
|
361
370
|
if (contextBefore > 0) {
|
|
362
371
|
const before: NonNullable<GrepMatch["contextBefore"]> = [];
|
|
363
|
-
|
|
372
|
+
// Start after the previous match's last emitted line so adjacent matches
|
|
373
|
+
// never repeat or rewind context lines (mirrors native grep's sink).
|
|
374
|
+
const start = Math.max(0, lineIndex - contextBefore, lastEmittedLine);
|
|
364
375
|
for (let idx = start; idx < lineIndex; idx++) {
|
|
365
376
|
const contextLineNumber = idx + 1;
|
|
366
377
|
if (lineAllowed(contextLineNumber, resource.ranges)) {
|
|
@@ -372,7 +383,8 @@ function makeVirtualMatch(
|
|
|
372
383
|
|
|
373
384
|
if (contextAfter > 0) {
|
|
374
385
|
const after: NonNullable<GrepMatch["contextAfter"]> = [];
|
|
375
|
-
|
|
386
|
+
// Stop before the next match line; it is emitted as a match itself.
|
|
387
|
+
const end = Math.min(lines.length - 1, lineIndex + contextAfter, nextMatchLine - 2);
|
|
376
388
|
for (let idx = lineIndex + 1; idx <= end; idx++) {
|
|
377
389
|
const contextLineNumber = idx + 1;
|
|
378
390
|
if (lineAllowed(contextLineNumber, resource.ranges)) {
|
|
@@ -385,6 +397,38 @@ function makeVirtualMatch(
|
|
|
385
397
|
return match;
|
|
386
398
|
}
|
|
387
399
|
|
|
400
|
+
/** Build matches for ascending matched line indexes with forward-only,
|
|
401
|
+
* deduplicated context windows (line numbers never repeat or go backwards
|
|
402
|
+
* within one resource). */
|
|
403
|
+
function buildVirtualMatches(
|
|
404
|
+
resource: VirtualSearchResource,
|
|
405
|
+
lines: readonly string[],
|
|
406
|
+
matchedIndexes: readonly number[],
|
|
407
|
+
contextBefore: number,
|
|
408
|
+
contextAfter: number,
|
|
409
|
+
maxCount: number,
|
|
410
|
+
): GrepMatch[] {
|
|
411
|
+
const matches: GrepMatch[] = [];
|
|
412
|
+
let lastEmittedLine = 0;
|
|
413
|
+
for (let i = 0; i < matchedIndexes.length && matches.length < maxCount; i++) {
|
|
414
|
+
const lineIndex = matchedIndexes[i];
|
|
415
|
+
const nextMatchLine = i + 1 < matchedIndexes.length ? matchedIndexes[i + 1] + 1 : Number.POSITIVE_INFINITY;
|
|
416
|
+
const match = makeVirtualMatch(
|
|
417
|
+
resource,
|
|
418
|
+
lines,
|
|
419
|
+
lineIndex,
|
|
420
|
+
contextBefore,
|
|
421
|
+
contextAfter,
|
|
422
|
+
lastEmittedLine,
|
|
423
|
+
nextMatchLine,
|
|
424
|
+
);
|
|
425
|
+
const after = match.contextAfter;
|
|
426
|
+
lastEmittedLine = after && after.length > 0 ? after[after.length - 1].lineNumber : match.lineNumber;
|
|
427
|
+
matches.push(match);
|
|
428
|
+
}
|
|
429
|
+
return matches;
|
|
430
|
+
}
|
|
431
|
+
|
|
388
432
|
function compileVirtualRegex(pattern: string, ignoreCase: boolean, multiline: boolean): RegExp {
|
|
389
433
|
const flags = `${ignoreCase ? "i" : ""}${multiline ? "gm" : ""}`;
|
|
390
434
|
try {
|
|
@@ -403,24 +447,18 @@ function searchVirtualResourceLines(
|
|
|
403
447
|
maxCount: number,
|
|
404
448
|
): { matches: GrepMatch[]; totalMatches: number; limitReached: boolean } {
|
|
405
449
|
const lines = splitSearchLines(resource.content);
|
|
406
|
-
const
|
|
407
|
-
let totalMatches = 0;
|
|
408
|
-
let limitReached = false;
|
|
450
|
+
const matchedIndexes: number[] = [];
|
|
409
451
|
|
|
410
452
|
for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
|
|
411
453
|
const lineNumber = lineIndex + 1;
|
|
412
454
|
if (!lineAllowed(lineNumber, resource.ranges)) continue;
|
|
413
455
|
regex.lastIndex = 0;
|
|
414
456
|
if (!regex.test(lines[lineIndex] ?? "")) continue;
|
|
415
|
-
|
|
416
|
-
if (matches.length >= maxCount) {
|
|
417
|
-
limitReached = true;
|
|
418
|
-
continue;
|
|
419
|
-
}
|
|
420
|
-
matches.push(makeVirtualMatch(resource, lines, lineIndex, contextBefore, contextAfter));
|
|
457
|
+
matchedIndexes.push(lineIndex);
|
|
421
458
|
}
|
|
422
459
|
|
|
423
|
-
|
|
460
|
+
const matches = buildVirtualMatches(resource, lines, matchedIndexes, contextBefore, contextAfter, maxCount);
|
|
461
|
+
return { matches, totalMatches: matchedIndexes.length, limitReached: matchedIndexes.length > matches.length };
|
|
424
462
|
}
|
|
425
463
|
|
|
426
464
|
function searchVirtualResourceMultiline(
|
|
@@ -431,10 +469,8 @@ function searchVirtualResourceMultiline(
|
|
|
431
469
|
maxCount: number,
|
|
432
470
|
): { matches: GrepMatch[]; totalMatches: number; limitReached: boolean } {
|
|
433
471
|
const indexed = indexSearchLines(resource.content);
|
|
434
|
-
const matches: GrepMatch[] = [];
|
|
435
472
|
const matchedLines = new Set<number>();
|
|
436
|
-
|
|
437
|
-
let limitReached = false;
|
|
473
|
+
const matchedIndexes: number[] = [];
|
|
438
474
|
|
|
439
475
|
while (true) {
|
|
440
476
|
const match = regex.exec(resource.content);
|
|
@@ -444,12 +480,7 @@ function searchVirtualResourceMultiline(
|
|
|
444
480
|
const lineNumber = lineIndex + 1;
|
|
445
481
|
if (!matchedLines.has(lineNumber) && lineAllowed(lineNumber, resource.ranges)) {
|
|
446
482
|
matchedLines.add(lineNumber);
|
|
447
|
-
|
|
448
|
-
if (matches.length >= maxCount) {
|
|
449
|
-
limitReached = true;
|
|
450
|
-
} else {
|
|
451
|
-
matches.push(makeVirtualMatch(resource, indexed.lines, lineIndex, contextBefore, contextAfter));
|
|
452
|
-
}
|
|
483
|
+
matchedIndexes.push(lineIndex);
|
|
453
484
|
}
|
|
454
485
|
}
|
|
455
486
|
if (match[0].length === 0) {
|
|
@@ -457,7 +488,8 @@ function searchVirtualResourceMultiline(
|
|
|
457
488
|
}
|
|
458
489
|
}
|
|
459
490
|
|
|
460
|
-
|
|
491
|
+
const matches = buildVirtualMatches(resource, indexed.lines, matchedIndexes, contextBefore, contextAfter, maxCount);
|
|
492
|
+
return { matches, totalMatches: matchedIndexes.length, limitReached: matchedIndexes.length > matches.length };
|
|
461
493
|
}
|
|
462
494
|
|
|
463
495
|
function searchVirtualResources(
|
|
@@ -623,6 +655,10 @@ export interface SearchToolDetails {
|
|
|
623
655
|
/** Absolute base directory used during search. Used by the renderer to resolve
|
|
624
656
|
* display-relative paths to absolute paths for OSC 8 hyperlinks. */
|
|
625
657
|
searchPath?: string;
|
|
658
|
+
/** Session cwd at search time. The renderer resolves the display-relative
|
|
659
|
+
* (cwd-relative) header/match paths against this for OSC 8 hyperlinks;
|
|
660
|
+
* `searchPath` is the scope label target, not the display-path base. */
|
|
661
|
+
cwd?: string;
|
|
626
662
|
/** User-supplied paths whose base directory was missing on disk. The tool
|
|
627
663
|
* skipped these and continued with the surviving entries; surfaced as a
|
|
628
664
|
* non-fatal warning in the renderer and in the model-facing text. */
|
|
@@ -659,12 +695,15 @@ export class SearchTool implements AgentTool<typeof searchSchema, SearchToolDeta
|
|
|
659
695
|
const { pattern, paths: rawPaths, i, gitignore, skip } = params;
|
|
660
696
|
|
|
661
697
|
return untilAborted(signal, async () => {
|
|
662
|
-
|
|
663
|
-
|
|
698
|
+
// Preserve the pattern verbatim — leading/trailing whitespace is
|
|
699
|
+
// meaningful in regexes (indentation anchors, trailing-space matches).
|
|
700
|
+
if (!pattern.trim()) {
|
|
664
701
|
throw new ToolError("Pattern must not be empty");
|
|
665
702
|
}
|
|
703
|
+
const normalizedPattern = pattern;
|
|
666
704
|
|
|
667
|
-
const normalizedSkip =
|
|
705
|
+
const normalizedSkip =
|
|
706
|
+
skip === undefined || skip === null ? 0 : Number.isFinite(skip) ? Math.floor(skip) : Number.NaN;
|
|
668
707
|
if (normalizedSkip < 0 || !Number.isFinite(normalizedSkip)) {
|
|
669
708
|
throw new ToolError("Skip must be a non-negative number");
|
|
670
709
|
}
|
|
@@ -721,12 +760,16 @@ export class SearchTool implements AgentTool<typeof searchSchema, SearchToolDeta
|
|
|
721
760
|
}
|
|
722
761
|
}
|
|
723
762
|
|
|
724
|
-
if (
|
|
763
|
+
if (
|
|
764
|
+
archiveUnreadable.length > 0 &&
|
|
765
|
+
searchablePaths.length === archiveUnreadable.length &&
|
|
766
|
+
virtualResources.length === 0
|
|
767
|
+
) {
|
|
725
768
|
// All inputs were archive selectors we couldn't materialize; surface the
|
|
726
769
|
// reason instead of a downstream "path not found" from the scope resolver.
|
|
727
770
|
throw new ToolError(
|
|
728
771
|
`Cannot search archive member(s): ${archiveUnreadable.join(", ")}. ` +
|
|
729
|
-
`Read the
|
|
772
|
+
`Read the member with \`read <archive>:<member>\` and inspect the returned text, ` +
|
|
730
773
|
`or pass a UTF-8 text member.`,
|
|
731
774
|
);
|
|
732
775
|
}
|
|
@@ -752,6 +795,7 @@ export class SearchTool implements AgentTool<typeof searchSchema, SearchToolDeta
|
|
|
752
795
|
internalUrlAction: "search",
|
|
753
796
|
trackImmutableSources: true,
|
|
754
797
|
surfaceExactFilePaths: true,
|
|
798
|
+
fanOutFileTargets: true,
|
|
755
799
|
multipathStatHint: " (`paths` entries must each exist relative to cwd)",
|
|
756
800
|
settings: this.session.settings,
|
|
757
801
|
signal,
|
|
@@ -815,10 +859,12 @@ export class SearchTool implements AgentTool<typeof searchSchema, SearchToolDeta
|
|
|
815
859
|
filesSearched: 0,
|
|
816
860
|
limitReached: false,
|
|
817
861
|
};
|
|
862
|
+
let skippedOversizedCount = 0;
|
|
818
863
|
try {
|
|
819
864
|
if (searchablePaths.length > 0) {
|
|
820
865
|
if (exactFilePaths || multiTargets) {
|
|
821
866
|
const matches: GrepMatch[] = [];
|
|
867
|
+
const seenMatchKeys = new Set<string>();
|
|
822
868
|
let limitReached = false;
|
|
823
869
|
let totalMatches = 0;
|
|
824
870
|
let filesSearched = 0;
|
|
@@ -844,14 +890,27 @@ export class SearchTool implements AgentTool<typeof searchSchema, SearchToolDeta
|
|
|
844
890
|
contextAfter: normalizedContextAfter,
|
|
845
891
|
maxColumns: DEFAULT_MAX_COLUMN,
|
|
846
892
|
mode: effectiveOutputMode,
|
|
893
|
+
maxCountPerFile: perFileMatchCap + 1,
|
|
894
|
+
signal,
|
|
895
|
+
timeoutMs: SEARCH_GREP_TIMEOUT_MS,
|
|
847
896
|
},
|
|
848
897
|
undefined,
|
|
849
898
|
);
|
|
899
|
+
skippedOversizedCount += targetResult.skippedOversized ?? 0;
|
|
850
900
|
limitReached = limitReached || Boolean(targetResult.limitReached);
|
|
851
901
|
totalMatches += targetResult.totalMatches;
|
|
852
902
|
filesSearched += targetResult.filesSearched;
|
|
853
903
|
for (const match of targetResult.matches) {
|
|
854
904
|
const absolute = path.resolve(target.basePath, match.path);
|
|
905
|
+
// Overlapping targets (a directory plus a file nested
|
|
906
|
+
// inside it) surface the same physical line twice;
|
|
907
|
+
// keep the first occurrence.
|
|
908
|
+
const matchKey = `${absolute}\0${match.lineNumber}`;
|
|
909
|
+
if (seenMatchKeys.has(matchKey)) {
|
|
910
|
+
totalMatches = Math.max(0, totalMatches - 1);
|
|
911
|
+
continue;
|
|
912
|
+
}
|
|
913
|
+
seenMatchKeys.add(matchKey);
|
|
855
914
|
const rebased = path.relative(searchPath, absolute).replace(/\\/g, "/");
|
|
856
915
|
matches.push({ ...match, path: rebased });
|
|
857
916
|
}
|
|
@@ -879,15 +938,24 @@ export class SearchTool implements AgentTool<typeof searchSchema, SearchToolDeta
|
|
|
879
938
|
contextAfter: normalizedContextAfter,
|
|
880
939
|
maxColumns: DEFAULT_MAX_COLUMN,
|
|
881
940
|
mode: effectiveOutputMode,
|
|
941
|
+
maxCountPerFile: perFileMatchCap + 1,
|
|
942
|
+
signal,
|
|
943
|
+
timeoutMs: SEARCH_GREP_TIMEOUT_MS,
|
|
882
944
|
},
|
|
883
945
|
undefined,
|
|
884
946
|
);
|
|
947
|
+
skippedOversizedCount = result.skippedOversized ?? 0;
|
|
885
948
|
}
|
|
886
949
|
}
|
|
887
950
|
} catch (err) {
|
|
888
951
|
if (err instanceof Error && /^regex(?: parse)? error/i.test(err.message)) {
|
|
889
952
|
throw new ToolError(err.message.replace(/^regex(?: parse)? error:?\s*/i, "Invalid regex: "));
|
|
890
953
|
}
|
|
954
|
+
if (err instanceof Error && err.message.includes("Aborted: Timeout")) {
|
|
955
|
+
throw new ToolError(
|
|
956
|
+
`Search timed out after ${SEARCH_GREP_TIMEOUT_MS / 1000}s; narrow paths or pattern, or scope with \`find\` first`,
|
|
957
|
+
);
|
|
958
|
+
}
|
|
891
959
|
throw err;
|
|
892
960
|
}
|
|
893
961
|
const virtualResult = searchVirtualResources(
|
|
@@ -963,6 +1031,9 @@ export class SearchTool implements AgentTool<typeof searchSchema, SearchToolDeta
|
|
|
963
1031
|
}
|
|
964
1032
|
}
|
|
965
1033
|
const totalFiles = fileOrder.length;
|
|
1034
|
+
// When native grep stopped at its internal cap, files past the cap were
|
|
1035
|
+
// never surfaced — the file total is only a lower bound.
|
|
1036
|
+
const totalFilesLabel = result.limitReached ? `${totalFiles}+` : `${totalFiles}`;
|
|
966
1037
|
// Single-file scopes can't paginate — there is one file by definition.
|
|
967
1038
|
const canPaginate = isMultiScope;
|
|
968
1039
|
const skipFiles = canPaginate ? Math.min(normalizedSkip, totalFiles) : 0;
|
|
@@ -985,10 +1056,44 @@ export class SearchTool implements AgentTool<typeof searchSchema, SearchToolDeta
|
|
|
985
1056
|
}
|
|
986
1057
|
const nextSkip = skipFiles + windowFiles.length;
|
|
987
1058
|
const limitMessage = fileLimitReached
|
|
988
|
-
? `Showing files ${skipFiles + 1}-${nextSkip} of ${
|
|
1059
|
+
? `Showing files ${skipFiles + 1}-${nextSkip} of ${totalFilesLabel}. Use skip=${nextSkip} for the next page, or narrow paths/pattern.`
|
|
989
1060
|
: "";
|
|
990
1061
|
const { record: recordFile, list: fileList } = createFileRecorder();
|
|
991
1062
|
const fileMatchCounts = new Map<string, number>();
|
|
1063
|
+
// Detect explicit file targets that exceed the native grep size cap.
|
|
1064
|
+
// Native silently returns no matches above the cap; without this note the
|
|
1065
|
+
// caller sees "no matches" for a literal pattern that visibly exists.
|
|
1066
|
+
const oversizedNote = await (async (): Promise<string | undefined> => {
|
|
1067
|
+
const explicitFileTargets: string[] = [];
|
|
1068
|
+
if (exactFilePaths) {
|
|
1069
|
+
explicitFileTargets.push(...exactFilePaths);
|
|
1070
|
+
} else if (searchablePaths.length > 0 && !isDirectory && !multiTargets) {
|
|
1071
|
+
explicitFileTargets.push(searchPath);
|
|
1072
|
+
}
|
|
1073
|
+
if (explicitFileTargets.length === 0) return undefined;
|
|
1074
|
+
const oversized: string[] = [];
|
|
1075
|
+
await Promise.all(
|
|
1076
|
+
explicitFileTargets.map(async target => {
|
|
1077
|
+
try {
|
|
1078
|
+
const st = await stat(target);
|
|
1079
|
+
if (st.isFile() && st.size > NATIVE_GREP_MAX_FILE_BYTES) {
|
|
1080
|
+
oversized.push(path.relative(this.session.cwd, target) || target);
|
|
1081
|
+
}
|
|
1082
|
+
} catch {
|
|
1083
|
+
// Stat failures here are surfaced by other code paths.
|
|
1084
|
+
}
|
|
1085
|
+
}),
|
|
1086
|
+
);
|
|
1087
|
+
if (oversized.length === 0) return undefined;
|
|
1088
|
+
const limitMb = Math.floor(NATIVE_GREP_MAX_FILE_BYTES / (1024 * 1024));
|
|
1089
|
+
return `Skipped oversized files (>${limitMb}MB grep limit; split the file or narrow with \`read\`): ${oversized.join(", ")}`;
|
|
1090
|
+
})();
|
|
1091
|
+
// Directory/multi-target scopes: native grep counts oversized skips but
|
|
1092
|
+
// cannot name them; explicit-file scopes are covered (with names) above.
|
|
1093
|
+
const oversizedScanNote =
|
|
1094
|
+
!oversizedNote && skippedOversizedCount > 0
|
|
1095
|
+
? `Skipped ${skippedOversizedCount} oversized file(s) (>${Math.floor(NATIVE_GREP_MAX_FILE_BYTES / (1024 * 1024))}MB grep limit); target them directly with \`read\``
|
|
1096
|
+
: undefined;
|
|
992
1097
|
const archiveNote =
|
|
993
1098
|
archiveUnreadable.length > 0
|
|
994
1099
|
? `Skipped archive entries (search supports text members only): ${archiveUnreadable.join(", ")}`
|
|
@@ -1000,19 +1105,28 @@ export class SearchTool implements AgentTool<typeof searchSchema, SearchToolDeta
|
|
|
1000
1105
|
const missingPathsNote =
|
|
1001
1106
|
missingPathsForNote.length > 0 ? `Skipped missing paths: ${missingPathsForNote.join(", ")}` : undefined;
|
|
1002
1107
|
const warningNote =
|
|
1003
|
-
[missingPathsNote, archiveNote
|
|
1108
|
+
[missingPathsNote, archiveNote, oversizedNote, oversizedScanNote]
|
|
1109
|
+
.filter((s): s is string => Boolean(s))
|
|
1110
|
+
.join("\n") || undefined;
|
|
1004
1111
|
if (selectedMatches.length === 0) {
|
|
1005
1112
|
const details: SearchToolDetails = {
|
|
1006
1113
|
scopePath,
|
|
1007
1114
|
searchPath,
|
|
1115
|
+
cwd: this.session.cwd,
|
|
1008
1116
|
matchCount: 0,
|
|
1009
1117
|
fileCount: 0,
|
|
1010
1118
|
files: [],
|
|
1011
1119
|
truncated: false,
|
|
1012
1120
|
missingPaths: missingPaths.length > 0 ? missingPaths : undefined,
|
|
1013
1121
|
};
|
|
1014
|
-
const
|
|
1015
|
-
|
|
1122
|
+
const skipPastEnd = canPaginate && normalizedSkip > 0 && totalFiles > 0 && skipFiles >= totalFiles;
|
|
1123
|
+
const noMatchText = skipPastEnd
|
|
1124
|
+
? `No more results (${totalFilesLabel} files total; skip=${normalizedSkip} is past the end)`
|
|
1125
|
+
: "No matches found";
|
|
1126
|
+
const text = warningNote ? `${noMatchText}\n${warningNote}` : noMatchText;
|
|
1127
|
+
// Zero matches is useless regardless of warnings: by the time
|
|
1128
|
+
// compaction runs, the follow-up call has already corrected course.
|
|
1129
|
+
return toolResult(details).text(text).useless().done();
|
|
1016
1130
|
}
|
|
1017
1131
|
const outputLines: string[] = [];
|
|
1018
1132
|
let linesTruncated = false;
|
|
@@ -1131,6 +1245,7 @@ export class SearchTool implements AgentTool<typeof searchSchema, SearchToolDeta
|
|
|
1131
1245
|
const details: SearchToolDetails = {
|
|
1132
1246
|
scopePath,
|
|
1133
1247
|
searchPath,
|
|
1248
|
+
cwd: this.session.cwd,
|
|
1134
1249
|
matchCount: selectedMatches.length,
|
|
1135
1250
|
fileCount: fileList.length,
|
|
1136
1251
|
files: fileList,
|
|
@@ -1173,6 +1288,10 @@ interface SearchRenderArgs {
|
|
|
1173
1288
|
}
|
|
1174
1289
|
|
|
1175
1290
|
const COLLAPSED_TEXT_LIMIT = PREVIEW_LIMITS.COLLAPSED_LINES * 2;
|
|
1291
|
+
/** Line budget for the expanded view. Larger than collapsed so expanding
|
|
1292
|
+
* reveals more matches with context, but still bounded so a single hot file
|
|
1293
|
+
* whose matches span the whole file can't dump its entire length. */
|
|
1294
|
+
const EXPANDED_TEXT_LIMIT = PREVIEW_LIMITS.EXPANDED_LINES * 2;
|
|
1176
1295
|
|
|
1177
1296
|
const SEARCH_CODE_FRAME_LINE_RE = /^\s*\*?(\d+)│/;
|
|
1178
1297
|
|
|
@@ -1206,69 +1325,49 @@ function isSearchMatchLine(line: string): boolean {
|
|
|
1206
1325
|
}
|
|
1207
1326
|
|
|
1208
1327
|
function isSearchHeaderLine(line: string): boolean {
|
|
1209
|
-
return
|
|
1328
|
+
return /^#+ /.test(line);
|
|
1210
1329
|
}
|
|
1211
1330
|
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1331
|
+
const URL_HEADER_PREFIX_RE = /^#+\s+/;
|
|
1332
|
+
|
|
1333
|
+
function renderSearchDisplayLines(
|
|
1334
|
+
lines: readonly string[],
|
|
1335
|
+
headerBase: string | undefined,
|
|
1336
|
+
fileScope: string | undefined,
|
|
1215
1337
|
uiTheme: Theme,
|
|
1216
1338
|
): RenderedSearchLine[] {
|
|
1217
|
-
|
|
1218
|
-
//
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
if (
|
|
1224
|
-
|
|
1225
|
-
const
|
|
1226
|
-
|
|
1227
|
-
.trimEnd()
|
|
1228
|
-
.replace(/\s+\([^)]*\)\s*$/, "")
|
|
1229
|
-
.replace(/#[0-9a-f]+$/, "");
|
|
1230
|
-
const absPath = contextDir && fileName ? path.join(contextDir, fileName) : undefined;
|
|
1231
|
-
currentFilePath = absPath;
|
|
1232
|
-
const styled = uiTheme.fg("dim", line);
|
|
1233
|
-
return { raw: line, styled: absPath ? fileHyperlink(absPath, styled) : styled };
|
|
1339
|
+
const contexts = classifyGroupedLines(lines, headerBase, fileScope);
|
|
1340
|
+
// `classifyGroupedLines` can't resolve internal URLs (TUI-only), so track the
|
|
1341
|
+
// resolved URL target here and use it for the body lines that follow.
|
|
1342
|
+
let urlFile: string | undefined;
|
|
1343
|
+
return lines.map((line, index) => {
|
|
1344
|
+
const ctx = contexts[index]!;
|
|
1345
|
+
if (ctx.kind === "dir") {
|
|
1346
|
+
urlFile = undefined;
|
|
1347
|
+
const styled = uiTheme.fg("accent", line);
|
|
1348
|
+
return { raw: line, styled: ctx.headerPath ? fileHyperlink(ctx.headerPath, styled) : styled };
|
|
1234
1349
|
}
|
|
1235
|
-
if (
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
const linked = linkUrlLikeSearchHeader(raw, styled);
|
|
1244
|
-
currentFilePath = linked.absPath;
|
|
1350
|
+
if (ctx.kind === "file") {
|
|
1351
|
+
if (ctx.isUrl) {
|
|
1352
|
+
const raw = line
|
|
1353
|
+
.replace(URL_HEADER_PREFIX_RE, "")
|
|
1354
|
+
.trimEnd()
|
|
1355
|
+
.replace(/\s+\([^)]*\)\s*$/, "");
|
|
1356
|
+
const linked = linkUrlLikeSearchHeader(raw, uiTheme.fg("accent", line));
|
|
1357
|
+
urlFile = linked.absPath;
|
|
1245
1358
|
return { raw: line, styled: linked.line };
|
|
1246
1359
|
}
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
if (absPath) {
|
|
1252
|
-
contextDir = absPath;
|
|
1253
|
-
}
|
|
1254
|
-
currentFilePath = undefined;
|
|
1255
|
-
const styled = uiTheme.fg("accent", line);
|
|
1256
|
-
return { raw: line, styled: absPath ? fileHyperlink(absPath, styled) : styled };
|
|
1257
|
-
}
|
|
1258
|
-
// Root-level file emitted by formatGroupedFiles when the directory is `.`.
|
|
1259
|
-
const absPath = searchBase && name ? path.join(searchBase, name) : undefined;
|
|
1260
|
-
currentFilePath = absPath;
|
|
1261
|
-
const styled = uiTheme.fg("accent", line);
|
|
1262
|
-
return { raw: line, styled: absPath ? fileHyperlink(absPath, styled) : styled };
|
|
1360
|
+
urlFile = undefined;
|
|
1361
|
+
// Root-level files keep the bright accent; nested file headers are dimmed.
|
|
1362
|
+
const styled = uiTheme.fg(ctx.depth === 1 ? "accent" : "dim", line);
|
|
1363
|
+
return { raw: line, styled: ctx.headerPath ? fileHyperlink(ctx.headerPath, styled) : styled };
|
|
1263
1364
|
}
|
|
1264
1365
|
const styled = uiTheme.fg("toolOutput", line);
|
|
1265
1366
|
const lineNumber = parseSearchDisplayLineNumber(line);
|
|
1367
|
+
const filePath = ctx.filePath ?? urlFile;
|
|
1266
1368
|
return {
|
|
1267
1369
|
raw: line,
|
|
1268
|
-
styled:
|
|
1269
|
-
currentFilePath && lineNumber !== undefined
|
|
1270
|
-
? fileHyperlink(currentFilePath, styled, { line: lineNumber })
|
|
1271
|
-
: styled,
|
|
1370
|
+
styled: filePath && lineNumber !== undefined ? fileHyperlink(filePath, styled, { line: lineNumber }) : styled,
|
|
1272
1371
|
};
|
|
1273
1372
|
});
|
|
1274
1373
|
}
|
|
@@ -1283,16 +1382,16 @@ function countPreviewMatches(lines: readonly RenderedSearchLine[], hasMarkedMatc
|
|
|
1283
1382
|
return lines.reduce((count, line) => count + (!isSearchHeaderLine(line.raw) && line.raw.length > 0 ? 1 : 0), 0);
|
|
1284
1383
|
}
|
|
1285
1384
|
|
|
1286
|
-
function
|
|
1287
|
-
groups:
|
|
1385
|
+
function renderBudgetedSearchGroups(
|
|
1386
|
+
groups: RenderedSearchLine[][],
|
|
1288
1387
|
maxLines: number,
|
|
1289
1388
|
matchCount: number,
|
|
1290
|
-
searchBase: string | undefined,
|
|
1291
1389
|
uiTheme: Theme,
|
|
1390
|
+
compact: boolean,
|
|
1292
1391
|
): string[] {
|
|
1293
1392
|
if (maxLines <= 0) return [];
|
|
1294
1393
|
const renderedGroups = groups
|
|
1295
|
-
.map(group => compactSearchPreviewGroup(
|
|
1394
|
+
.map(group => (compact ? compactSearchPreviewGroup(group) : group))
|
|
1296
1395
|
.filter(group => group.length > 0);
|
|
1297
1396
|
if (renderedGroups.length === 0) return [];
|
|
1298
1397
|
|
|
@@ -1344,6 +1443,10 @@ function renderCollapsedSearchGroups(
|
|
|
1344
1443
|
return lines;
|
|
1345
1444
|
}
|
|
1346
1445
|
|
|
1446
|
+
function searchStatusIcon(uiTheme: Theme): string {
|
|
1447
|
+
return uiTheme.fg("toolTitle", uiTheme.symbol("icon.search"));
|
|
1448
|
+
}
|
|
1449
|
+
|
|
1347
1450
|
export const searchToolRenderer = {
|
|
1348
1451
|
inline: true,
|
|
1349
1452
|
renderCall(args: SearchRenderArgs, _options: RenderResultOptions, uiTheme: Theme): Component {
|
|
@@ -1355,10 +1458,10 @@ export const searchToolRenderer = {
|
|
|
1355
1458
|
if (args.skip !== undefined && args.skip > 0) meta.push(`skip:${args.skip}`);
|
|
1356
1459
|
|
|
1357
1460
|
const text = renderStatusLine(
|
|
1358
|
-
{ icon: "pending", title: "Search", description: args.pattern || "?", meta },
|
|
1461
|
+
{ icon: "pending", title: "Search", titleColor: "toolTitle", description: args.pattern || "?", meta },
|
|
1359
1462
|
uiTheme,
|
|
1360
1463
|
);
|
|
1361
|
-
return new Text(text,
|
|
1464
|
+
return new Text(text, 1, 0);
|
|
1362
1465
|
},
|
|
1363
1466
|
|
|
1364
1467
|
renderResult(
|
|
@@ -1371,7 +1474,7 @@ export const searchToolRenderer = {
|
|
|
1371
1474
|
|
|
1372
1475
|
if (result.isError || details?.error) {
|
|
1373
1476
|
const errorText = details?.error || result.content?.find(c => c.type === "text")?.text || "Unknown error";
|
|
1374
|
-
return new Text(formatErrorMessage(errorText, uiTheme),
|
|
1477
|
+
return new Text(formatErrorMessage(errorText, uiTheme), 1, 0);
|
|
1375
1478
|
}
|
|
1376
1479
|
|
|
1377
1480
|
const hasDetailedData = details?.matchCount !== undefined || details?.fileCount !== undefined;
|
|
@@ -1379,12 +1482,18 @@ export const searchToolRenderer = {
|
|
|
1379
1482
|
if (!hasDetailedData) {
|
|
1380
1483
|
const textContent = result.details?.displayContent ?? result.content?.find(c => c.type === "text")?.text;
|
|
1381
1484
|
if (!textContent || textContent === "No matches found") {
|
|
1382
|
-
return new Text(formatEmptyMessage("No matches found", uiTheme),
|
|
1485
|
+
return new Text(formatEmptyMessage("No matches found", uiTheme), 1, 0);
|
|
1383
1486
|
}
|
|
1384
1487
|
const lines = textContent.split("\n").filter(line => line.trim() !== "");
|
|
1385
1488
|
const description = args?.pattern ?? undefined;
|
|
1386
1489
|
const header = renderStatusLine(
|
|
1387
|
-
{
|
|
1490
|
+
{
|
|
1491
|
+
iconOverride: searchStatusIcon(uiTheme),
|
|
1492
|
+
title: "Search",
|
|
1493
|
+
titleColor: "toolTitle",
|
|
1494
|
+
description,
|
|
1495
|
+
meta: [formatCount("item", lines.length)],
|
|
1496
|
+
},
|
|
1388
1497
|
uiTheme,
|
|
1389
1498
|
);
|
|
1390
1499
|
return createCachedComponent(
|
|
@@ -1403,6 +1512,7 @@ export const searchToolRenderer = {
|
|
|
1403
1512
|
);
|
|
1404
1513
|
return [header, ...listLines].map(l => truncateToWidth(l, width, Ellipsis.Omit));
|
|
1405
1514
|
},
|
|
1515
|
+
{ paddingX: 1 },
|
|
1406
1516
|
);
|
|
1407
1517
|
}
|
|
1408
1518
|
|
|
@@ -1423,12 +1533,12 @@ export const searchToolRenderer = {
|
|
|
1423
1533
|
const scopeMeta = searchScopeMeta(details);
|
|
1424
1534
|
if (scopeMeta) meta.push(scopeMeta);
|
|
1425
1535
|
const header = renderStatusLine(
|
|
1426
|
-
{ icon: "warning", title: "Search", description: args?.pattern, meta },
|
|
1536
|
+
{ icon: "warning", title: "Search", titleColor: "toolTitle", description: args?.pattern, meta },
|
|
1427
1537
|
uiTheme,
|
|
1428
1538
|
);
|
|
1429
1539
|
const lines = [header, formatEmptyMessage("No matches found", uiTheme)];
|
|
1430
1540
|
if (missingNote) lines.push(missingNote);
|
|
1431
|
-
return new Text(lines.join("\n"),
|
|
1541
|
+
return new Text(lines.join("\n"), 1, 0);
|
|
1432
1542
|
}
|
|
1433
1543
|
|
|
1434
1544
|
const summaryParts = [formatCount("match", matchCount), formatCount("file", fileCount)];
|
|
@@ -1438,12 +1548,30 @@ export const searchToolRenderer = {
|
|
|
1438
1548
|
if (truncated) meta.push(uiTheme.fg("warning", "truncated"));
|
|
1439
1549
|
const description = args?.pattern ?? undefined;
|
|
1440
1550
|
const header = renderStatusLine(
|
|
1441
|
-
{
|
|
1551
|
+
{
|
|
1552
|
+
...(truncated ? { icon: "warning" as const } : { iconOverride: searchStatusIcon(uiTheme) }),
|
|
1553
|
+
title: "Search",
|
|
1554
|
+
titleColor: "toolTitle",
|
|
1555
|
+
description,
|
|
1556
|
+
meta,
|
|
1557
|
+
},
|
|
1442
1558
|
uiTheme,
|
|
1443
1559
|
);
|
|
1444
1560
|
|
|
1445
1561
|
const textContent = result.details?.displayContent ?? result.content?.find(c => c.type === "text")?.text ?? "";
|
|
1446
|
-
const
|
|
1562
|
+
const allLines = textContent.split("\n");
|
|
1563
|
+
// Resolve hyperlinks once over the whole output so a nested directory stack
|
|
1564
|
+
// reconstructs correctly across blank-line group boundaries.
|
|
1565
|
+
// Header/match display paths are cwd-relative, so resolve them against cwd
|
|
1566
|
+
// (falling back to searchPath for legacy results that predate `cwd`); the
|
|
1567
|
+
// scoped file's absolute path seeds body lines in single-file searches.
|
|
1568
|
+
const renderedLines = renderSearchDisplayLines(
|
|
1569
|
+
allLines,
|
|
1570
|
+
details?.cwd ?? details?.searchPath,
|
|
1571
|
+
details?.searchPath,
|
|
1572
|
+
uiTheme,
|
|
1573
|
+
);
|
|
1574
|
+
const matchGroups = groupLineIndicesByBlank(allLines).map(indices => indices.map(i => renderedLines[i]!));
|
|
1447
1575
|
|
|
1448
1576
|
const extraLines: string[] = [];
|
|
1449
1577
|
if (missingNote) extraLines.push(missingNote);
|
|
@@ -1451,24 +1579,14 @@ export const searchToolRenderer = {
|
|
|
1451
1579
|
return createCachedComponent(
|
|
1452
1580
|
() => options.expanded,
|
|
1453
1581
|
width => {
|
|
1454
|
-
const
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
items: matchGroups,
|
|
1460
|
-
expanded: true,
|
|
1461
|
-
maxCollapsed: matchGroups.length,
|
|
1462
|
-
maxCollapsedLines: collapsedMatchLineBudget,
|
|
1463
|
-
itemType: "match",
|
|
1464
|
-
renderItem: group =>
|
|
1465
|
-
renderSearchDisplayGroup(group, searchBase, uiTheme).map(line => line.styled),
|
|
1466
|
-
},
|
|
1467
|
-
uiTheme,
|
|
1468
|
-
)
|
|
1469
|
-
: renderCollapsedSearchGroups(matchGroups, collapsedMatchLineBudget, matchCount, searchBase, uiTheme);
|
|
1582
|
+
const budget = Math.max(
|
|
1583
|
+
(options.expanded ? EXPANDED_TEXT_LIMIT : COLLAPSED_TEXT_LIMIT) - extraLines.length,
|
|
1584
|
+
0,
|
|
1585
|
+
);
|
|
1586
|
+
const matchLines = renderBudgetedSearchGroups(matchGroups, budget, matchCount, uiTheme, !options.expanded);
|
|
1470
1587
|
return [header, ...matchLines, ...extraLines].map(l => truncateToWidth(l, width, Ellipsis.Omit));
|
|
1471
1588
|
},
|
|
1589
|
+
{ paddingX: 1 },
|
|
1472
1590
|
);
|
|
1473
1591
|
},
|
|
1474
1592
|
mergeCallAndResult: true,
|