@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
|
@@ -1,17 +1,28 @@
|
|
|
1
1
|
import type { ThinkingLevel } from "@prometheus-ai/agent-core";
|
|
2
2
|
import type { Effort } from "@prometheus-ai/ai";
|
|
3
|
+
import type { ShapeTarget } from "@prometheus-ai/snapcompact";
|
|
3
4
|
import {
|
|
5
|
+
type Component,
|
|
4
6
|
Container,
|
|
7
|
+
extractPrintableText,
|
|
8
|
+
fuzzyRank,
|
|
9
|
+
getKeybindings,
|
|
10
|
+
getSettingItemFilterText,
|
|
11
|
+
type ImageBudget,
|
|
5
12
|
Input,
|
|
6
13
|
matchesKey,
|
|
14
|
+
parseSgrMouse,
|
|
7
15
|
type SelectItem,
|
|
8
16
|
SelectList,
|
|
9
17
|
type SettingItem,
|
|
10
18
|
SettingsList,
|
|
19
|
+
type SgrMouseEvent,
|
|
11
20
|
Spacer,
|
|
12
21
|
type Tab,
|
|
13
22
|
TabBar,
|
|
14
23
|
Text,
|
|
24
|
+
truncateToWidth,
|
|
25
|
+
visibleWidth,
|
|
15
26
|
} from "@prometheus-ai/tui";
|
|
16
27
|
import { getDefault, type SettingPath, settings } from "../../config/settings";
|
|
17
28
|
import type {
|
|
@@ -22,12 +33,12 @@ import type {
|
|
|
22
33
|
} from "../../config/settings-schema";
|
|
23
34
|
import { SETTING_TABS, TAB_METADATA } from "../../config/settings-schema";
|
|
24
35
|
import { getCurrentThemeName, getSelectListTheme, getSettingsListTheme, theme } from "../../modes/theme/theme";
|
|
25
|
-
import { matchesAppInterrupt } from "../../modes/utils/keybinding-matchers";
|
|
26
36
|
import { AUTO_THINKING, type ConfiguredThinkingLevel } from "../../thinking";
|
|
27
37
|
import { getTabBarTheme } from "../shared";
|
|
28
|
-
import {
|
|
38
|
+
import { bottomBorder, divider, row, topBorder } from "./overlay-box";
|
|
29
39
|
import { handleInputOrEscape, PluginSettingsComponent } from "./plugin-settings";
|
|
30
|
-
import { getSettingsForTab, type SettingDef } from "./settings-defs";
|
|
40
|
+
import { getSettingDef, getSettingsForTab, type SettingDef } from "./settings-defs";
|
|
41
|
+
import { SnapcompactShapePreview } from "./snapcompact-shape-preview";
|
|
31
42
|
import { getPreset } from "./status-line/presets";
|
|
32
43
|
|
|
33
44
|
/**
|
|
@@ -59,8 +70,6 @@ class TextInputSubmenu extends Container {
|
|
|
59
70
|
this.#input = new Input();
|
|
60
71
|
if (currentValue) {
|
|
61
72
|
this.#input.setValue(currentValue);
|
|
62
|
-
// Move cursor to end of pre-filled value (ctrl+e = cursorLineEnd).
|
|
63
|
-
this.#input.handleInput("\x05");
|
|
64
73
|
}
|
|
65
74
|
this.#input.onSubmit = value => {
|
|
66
75
|
this.onSubmit(value); // empty string clears the setting
|
|
@@ -79,6 +88,8 @@ class SelectSubmenu extends Container {
|
|
|
79
88
|
#selectList: SelectList;
|
|
80
89
|
#previewText: Text | null = null;
|
|
81
90
|
#previewUpdateRequestId: number = 0;
|
|
91
|
+
#selectListLineOffset = 0;
|
|
92
|
+
#selectListLineCount = 0;
|
|
82
93
|
|
|
83
94
|
constructor(
|
|
84
95
|
title: string,
|
|
@@ -89,6 +100,7 @@ class SelectSubmenu extends Container {
|
|
|
89
100
|
onCancel: () => void,
|
|
90
101
|
onSelectionChange?: (value: string) => void | Promise<void>,
|
|
91
102
|
private readonly getPreview?: () => string,
|
|
103
|
+
footer?: Component,
|
|
92
104
|
) {
|
|
93
105
|
super();
|
|
94
106
|
|
|
@@ -150,6 +162,13 @@ class SelectSubmenu extends Container {
|
|
|
150
162
|
// Hint
|
|
151
163
|
this.addChild(new Spacer(1));
|
|
152
164
|
this.addChild(new Text(theme.fg("dim", " Enter to select · Esc to go back"), 0, 0));
|
|
165
|
+
|
|
166
|
+
// Footer (e.g. the snapcompact shape preview) below the interactive rows,
|
|
167
|
+
// so the list never shifts while browsing.
|
|
168
|
+
if (footer) {
|
|
169
|
+
this.addChild(new Spacer(1));
|
|
170
|
+
this.addChild(footer);
|
|
171
|
+
}
|
|
153
172
|
}
|
|
154
173
|
|
|
155
174
|
#updatePreview(): void {
|
|
@@ -158,19 +177,73 @@ class SelectSubmenu extends Container {
|
|
|
158
177
|
}
|
|
159
178
|
}
|
|
160
179
|
|
|
180
|
+
/**
|
|
181
|
+
* Concatenate children like Container.render, recording where the select
|
|
182
|
+
* list lands so routed mouse events can be hit-tested against it.
|
|
183
|
+
*/
|
|
184
|
+
override render(width: number): readonly string[] {
|
|
185
|
+
const lines: string[] = [];
|
|
186
|
+
for (const child of this.children) {
|
|
187
|
+
const childLines = child.render(Math.max(1, width));
|
|
188
|
+
if (child === this.#selectList) {
|
|
189
|
+
this.#selectListLineOffset = lines.length;
|
|
190
|
+
this.#selectListLineCount = childLines.length;
|
|
191
|
+
}
|
|
192
|
+
lines.push(...childLines);
|
|
193
|
+
}
|
|
194
|
+
return lines;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** Mouse routed from the host: wheel steps, hover lights, click confirms. */
|
|
198
|
+
routeMouse(event: SgrMouseEvent, line: number, _col: number): void {
|
|
199
|
+
if (event.wheel !== null) {
|
|
200
|
+
this.#selectList.handleWheel(event.wheel);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const listLine = line - this.#selectListLineOffset;
|
|
204
|
+
const within = listLine >= 0 && listLine < this.#selectListLineCount;
|
|
205
|
+
const index = within ? this.#selectList.hitTest(listLine) : undefined;
|
|
206
|
+
if (event.motion) {
|
|
207
|
+
this.#selectList.setHoverIndex(index ?? null);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (event.leftClick && index !== undefined) {
|
|
211
|
+
this.#selectList.clickItem(index);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
161
215
|
handleInput(data: string): void {
|
|
162
216
|
this.#selectList.handleInput(data);
|
|
163
217
|
}
|
|
164
218
|
}
|
|
165
219
|
|
|
220
|
+
let cachedSidebarWidth: number | undefined;
|
|
221
|
+
/**
|
|
222
|
+
* Split-sidebar width derived from every group name in the schema (not just
|
|
223
|
+
* the visible tab), so the divider column never moves when switching tabs or
|
|
224
|
+
* when condition-gated groups appear.
|
|
225
|
+
*/
|
|
226
|
+
function settingsSidebarWidth(): number {
|
|
227
|
+
if (cachedSidebarWidth === undefined) {
|
|
228
|
+
let nameWidth = 0;
|
|
229
|
+
for (const tab of SETTING_TABS) {
|
|
230
|
+
for (const def of getSettingsForTab(tab)) {
|
|
231
|
+
if (def.group) nameWidth = Math.max(nameWidth, visibleWidth(def.group));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
cachedSidebarWidth = Math.min(22, nameWidth) + 4;
|
|
235
|
+
}
|
|
236
|
+
return cachedSidebarWidth;
|
|
237
|
+
}
|
|
238
|
+
|
|
166
239
|
function getSettingsTabs(): Tab[] {
|
|
167
240
|
return [
|
|
168
241
|
...SETTING_TABS.map(id => {
|
|
169
242
|
const meta = TAB_METADATA[id];
|
|
170
243
|
const icon = theme.symbol(meta.icon as Parameters<typeof theme.symbol>[0]);
|
|
171
|
-
return { id, label: `${icon} ${meta.label}
|
|
244
|
+
return { id, label: `${icon} ${meta.label}`, short: icon };
|
|
172
245
|
}),
|
|
173
|
-
{ id: "plugins", label: `${theme.icon.package} Plugins
|
|
246
|
+
{ id: "plugins", label: `${theme.icon.package} Plugins`, short: theme.icon.package },
|
|
174
247
|
];
|
|
175
248
|
}
|
|
176
249
|
|
|
@@ -187,6 +260,12 @@ export interface SettingsRuntimeContext {
|
|
|
187
260
|
availableThemes: string[];
|
|
188
261
|
/** Working directory for plugins tab */
|
|
189
262
|
cwd: string;
|
|
263
|
+
/** Active model (api + id); resolves what the snapcompact `auto` shape maps to. */
|
|
264
|
+
model?: ShapeTarget;
|
|
265
|
+
/** Shared TUI image budget (graphics ids + transmit-once) for image previews. */
|
|
266
|
+
imageBudget?: ImageBudget;
|
|
267
|
+
/** Schedules a re-render after async preview work completes. */
|
|
268
|
+
requestRender?: () => void;
|
|
190
269
|
}
|
|
191
270
|
|
|
192
271
|
/** Status line settings subset for preview */
|
|
@@ -196,6 +275,7 @@ export interface StatusLinePreviewSettings {
|
|
|
196
275
|
rightSegments?: StatusLineSegmentId[];
|
|
197
276
|
separator?: StatusLineSeparatorStyle;
|
|
198
277
|
sessionAccent?: boolean;
|
|
278
|
+
transparent?: boolean;
|
|
199
279
|
}
|
|
200
280
|
|
|
201
281
|
export interface SettingsCallbacks {
|
|
@@ -217,72 +297,380 @@ export interface SettingsCallbacks {
|
|
|
217
297
|
* Main tabbed settings selector component.
|
|
218
298
|
* Uses declarative settings definitions from settings-defs.ts.
|
|
219
299
|
*/
|
|
220
|
-
export class SettingsSelectorComponent
|
|
300
|
+
export class SettingsSelectorComponent implements Component {
|
|
221
301
|
#tabBar: TabBar;
|
|
222
302
|
#currentList: SettingsList | null = null;
|
|
223
|
-
#
|
|
303
|
+
#searchList: SettingsList | null = null;
|
|
224
304
|
#pluginComponent: PluginSettingsComponent | null = null;
|
|
225
|
-
#statusPreviewContainer: Container | null = null;
|
|
226
|
-
#statusPreviewText: Text | null = null;
|
|
227
305
|
#currentTabId: SettingTab | "plugins" = "appearance";
|
|
306
|
+
#preSearchTabId: SettingTab | "plugins" = "appearance";
|
|
307
|
+
#searchQuery = "";
|
|
308
|
+
/** Single-line editor backing the search banner (cursor, word ops, paste). */
|
|
309
|
+
#searchInput = new Input();
|
|
310
|
+
#searchMatchCount = 0;
|
|
311
|
+
/** First matching item id per tab id, for Tab-key jumps while searching. */
|
|
312
|
+
#searchFirstMatch = new Map<string, string>();
|
|
228
313
|
#textInputActive = false;
|
|
314
|
+
#hasSectionJump = false;
|
|
315
|
+
// Frame geometry from the last render, for mouse hit-testing (the
|
|
316
|
+
// fullscreen overlay paints from screen row 0, so mouse rows map 1:1).
|
|
317
|
+
#tabRowStart = 0;
|
|
318
|
+
#tabRowCount = 0;
|
|
319
|
+
#contentRowStart = 0;
|
|
320
|
+
#contentRowCount = 0;
|
|
229
321
|
|
|
230
322
|
constructor(
|
|
231
323
|
private readonly context: SettingsRuntimeContext,
|
|
232
324
|
private readonly callbacks: SettingsCallbacks,
|
|
233
325
|
) {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
this.
|
|
238
|
-
|
|
239
|
-
// Tab bar
|
|
240
|
-
this.#tabBar = new TabBar("Settings", getSettingsTabs(), getTabBarTheme());
|
|
326
|
+
// No label prefix (the frame title already says Settings) and no
|
|
327
|
+
// "(tab to cycle)" hint (folded into the footer hint line).
|
|
328
|
+
this.#tabBar = new TabBar("", getSettingsTabs(), getTabBarTheme());
|
|
329
|
+
this.#tabBar.showHint = false;
|
|
241
330
|
this.#tabBar.onTabChange = () => {
|
|
242
|
-
this.#
|
|
331
|
+
const tabId = this.#tabBar.getActiveTab().id as SettingTab | "plugins";
|
|
332
|
+
if (this.#searchList) {
|
|
333
|
+
// While searching, tabs act as jump targets into the result list.
|
|
334
|
+
const firstId = this.#searchFirstMatch.get(tabId);
|
|
335
|
+
if (firstId) this.#searchList.selectItem(firstId);
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
this.#switchToTab(tabId);
|
|
243
339
|
};
|
|
244
|
-
this.addChild(this.#tabBar);
|
|
245
|
-
|
|
246
|
-
// Spacer after tab bar
|
|
247
|
-
this.addChild(new Spacer(1));
|
|
248
340
|
|
|
249
341
|
// Initialize with first tab
|
|
250
342
|
this.#switchToTab("appearance");
|
|
343
|
+
}
|
|
251
344
|
|
|
252
|
-
|
|
253
|
-
this.
|
|
345
|
+
invalidate(): void {
|
|
346
|
+
this.#tabBar.invalidate();
|
|
347
|
+
this.#currentList?.invalidate();
|
|
348
|
+
this.#searchList?.invalidate();
|
|
349
|
+
this.#pluginComponent?.invalidate();
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/** Swap the active content (per-tab list, search list, or plugins). */
|
|
353
|
+
#setContent(build: () => void): void {
|
|
354
|
+
this.#currentList = null;
|
|
355
|
+
this.#searchList = null;
|
|
356
|
+
this.#pluginComponent = null;
|
|
357
|
+
build();
|
|
254
358
|
}
|
|
255
359
|
|
|
256
360
|
#switchToTab(tabId: SettingTab | "plugins"): void {
|
|
257
361
|
this.#currentTabId = tabId;
|
|
362
|
+
this.#setContent(() => {
|
|
363
|
+
if (tabId === "plugins") {
|
|
364
|
+
this.#showPluginsTab();
|
|
365
|
+
} else {
|
|
366
|
+
this.#showSettingsTab(tabId);
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
}
|
|
258
370
|
|
|
259
|
-
|
|
260
|
-
if (this.#
|
|
261
|
-
|
|
262
|
-
this.#currentList = null;
|
|
371
|
+
#footerHintText(): string {
|
|
372
|
+
if (this.#searchList) {
|
|
373
|
+
return "Enter to change · Tab to jump tabs · Esc to exit search";
|
|
263
374
|
}
|
|
264
|
-
if (this.#
|
|
265
|
-
|
|
266
|
-
this.#pluginComponent = null;
|
|
375
|
+
if (this.#currentTabId === "plugins") {
|
|
376
|
+
return "Tab to switch tabs · Esc to close";
|
|
267
377
|
}
|
|
268
|
-
if (this.#
|
|
269
|
-
|
|
270
|
-
this.#statusPreviewContainer = null;
|
|
271
|
-
this.#statusPreviewText = null;
|
|
378
|
+
if (this.#currentList?.sectionFocused) {
|
|
379
|
+
return "↑/↓ to jump sections · Tab/Enter to settings · ←/→ to switch tabs · Esc to close";
|
|
272
380
|
}
|
|
381
|
+
const nav = this.#hasSectionJump ? "Tab to jump sections · ←/→ to switch tabs" : "Tab to switch tabs";
|
|
382
|
+
return `Enter/Space to change · ${nav} · Type to search · Esc to close`;
|
|
383
|
+
}
|
|
273
384
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
385
|
+
/** Single-line search banner: accent icon, editable query with live cursor, right-aligned match count. */
|
|
386
|
+
#renderSearchBanner(width: number): string {
|
|
387
|
+
const icon = theme.symbol("icon.search");
|
|
388
|
+
const countText = this.#searchMatchCount === 1 ? "1 match" : `${this.#searchMatchCount} matches`;
|
|
389
|
+
const rightWidth = visibleWidth(countText) + 1; // trailing margin
|
|
390
|
+
const prefix = ` ${theme.fg("accent", icon)} `;
|
|
391
|
+
// The input pads itself to exactly this width and keeps the cursor in view.
|
|
392
|
+
const inputWidth = Math.max(4, width - visibleWidth(prefix) - rightWidth - 1);
|
|
393
|
+
const inputLine = this.#searchInput.render(inputWidth)[0] ?? "";
|
|
394
|
+
const count = theme.fg(this.#searchMatchCount > 0 ? "dim" : "warning", countText);
|
|
395
|
+
return truncateToWidth(`${prefix}${theme.bold(inputLine)} ${count} `, width);
|
|
396
|
+
}
|
|
277
397
|
|
|
278
|
-
|
|
279
|
-
|
|
398
|
+
/**
|
|
399
|
+
* Fullscreen frame: title border, tab row, divider, optional search banner,
|
|
400
|
+
* the active content sized to fill the terminal, the appearance preview,
|
|
401
|
+
* then a footer hint pinned above the bottom border.
|
|
402
|
+
*/
|
|
403
|
+
render(width: number): readonly string[] {
|
|
404
|
+
const height = Math.max(14, process.stdout.rows || 40);
|
|
405
|
+
const innerWidth = Math.max(1, width - 4);
|
|
406
|
+
|
|
407
|
+
const tabLines = this.#tabBar.render(innerWidth);
|
|
408
|
+
const searching = this.#searchList !== null;
|
|
409
|
+
const showPreview = !searching && this.#currentTabId === "appearance";
|
|
410
|
+
const previewLines = showPreview ? ["", theme.fg("muted", "Preview:"), this.#getStatusPreviewString()] : [];
|
|
411
|
+
|
|
412
|
+
// Fixed chrome: top border, tabs, divider, [search row], divider, hint, bottom border.
|
|
413
|
+
const fixedRows = 1 + tabLines.length + 1 + (searching ? 1 : 0) + 1 + 1 + 1;
|
|
414
|
+
const contentRows = Math.max(7, height - fixedRows - previewLines.length);
|
|
415
|
+
|
|
416
|
+
const list = this.#searchList ?? this.#currentList;
|
|
417
|
+
let contentLines: readonly string[];
|
|
418
|
+
if (list) {
|
|
419
|
+
// SettingsList pads itself to viewport + blank + 3 description rows.
|
|
420
|
+
list.setMaxVisible(contentRows - 4);
|
|
421
|
+
contentLines = list.render(innerWidth);
|
|
422
|
+
} else if (this.#pluginComponent) {
|
|
423
|
+
contentLines = this.#pluginComponent.render(innerWidth);
|
|
280
424
|
} else {
|
|
281
|
-
|
|
425
|
+
contentLines = [];
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
const out: string[] = [];
|
|
429
|
+
out.push(topBorder(width, "Settings"));
|
|
430
|
+
this.#tabRowStart = out.length;
|
|
431
|
+
this.#tabRowCount = tabLines.length;
|
|
432
|
+
for (const line of tabLines) {
|
|
433
|
+
out.push(row(line, width));
|
|
434
|
+
}
|
|
435
|
+
out.push(divider(width));
|
|
436
|
+
if (searching) {
|
|
437
|
+
out.push(row(this.#renderSearchBanner(innerWidth), width));
|
|
438
|
+
}
|
|
439
|
+
this.#contentRowStart = out.length;
|
|
440
|
+
this.#contentRowCount = contentRows;
|
|
441
|
+
for (let i = 0; i < contentRows; i++) {
|
|
442
|
+
out.push(row(contentLines[i] ?? "", width));
|
|
443
|
+
}
|
|
444
|
+
for (const line of previewLines) {
|
|
445
|
+
out.push(row(line, width));
|
|
446
|
+
}
|
|
447
|
+
out.push(divider(width));
|
|
448
|
+
out.push(row(theme.fg("dim", this.#footerHintText()), width));
|
|
449
|
+
out.push(bottomBorder(width));
|
|
450
|
+
return out;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Route an SGR mouse report against the frame geometry of the last render.
|
|
455
|
+
* Wheel scrolls the focused list, motion drives the hover highlights (tabs
|
|
456
|
+
* and rows), and a left click activates: tabs switch (or jump, while
|
|
457
|
+
* searching), a row click selects, and a click on the already-selected row
|
|
458
|
+
* activates it (toggle / open submenu).
|
|
459
|
+
*/
|
|
460
|
+
#handleMouse(data: string): boolean {
|
|
461
|
+
const event = parseSgrMouse(data);
|
|
462
|
+
if (!event) return false;
|
|
463
|
+
|
|
464
|
+
const list = this.#searchList ?? this.#currentList;
|
|
465
|
+
// row() insets content by two columns (border + space).
|
|
466
|
+
const innerCol = event.col - 2;
|
|
467
|
+
const contentLine = event.row - this.#contentRowStart;
|
|
468
|
+
|
|
469
|
+
// An open submenu owns the pointer: wheel, hover, and clicks route into
|
|
470
|
+
// it (text-input submenus ignore routed events).
|
|
471
|
+
if (list?.hasOpenSubmenu()) {
|
|
472
|
+
list.routeSubmenuMouse(event, contentLine, innerCol);
|
|
473
|
+
return true;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
if (event.wheel !== null) {
|
|
477
|
+
list?.handleWheel(event.wheel);
|
|
478
|
+
return true;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
const tabLine = event.row - this.#tabRowStart;
|
|
482
|
+
const overTabs = tabLine >= 0 && tabLine < this.#tabRowCount;
|
|
483
|
+
const overContent = contentLine >= 0 && contentLine < this.#contentRowCount;
|
|
484
|
+
|
|
485
|
+
if (event.motion) {
|
|
486
|
+
const hovered = overTabs ? this.#tabBar.tabAt(tabLine, innerCol) : undefined;
|
|
487
|
+
this.#tabBar.setHoverTab(hovered && !hovered.muted ? hovered.id : null);
|
|
488
|
+
// hoverTest: never light up pane rows while the pointer is on the
|
|
489
|
+
// sidebar — only rows the pointer is actually on.
|
|
490
|
+
list?.setHoverItem(overContent ? (list.hoverTest(contentLine, innerCol) ?? null) : null);
|
|
491
|
+
return true;
|
|
492
|
+
}
|
|
493
|
+
if (!event.leftClick) return true;
|
|
494
|
+
|
|
495
|
+
if (overTabs) {
|
|
496
|
+
const tab = this.#tabBar.tabAt(tabLine, innerCol);
|
|
497
|
+
if (tab) this.#tabBar.selectTab(tab.id);
|
|
498
|
+
return true;
|
|
499
|
+
}
|
|
500
|
+
if (overContent && list) {
|
|
501
|
+
const id = list.hitTest(contentLine, innerCol);
|
|
502
|
+
if (id !== undefined) {
|
|
503
|
+
const wasSelected = list.getSelectedItem()?.id === id;
|
|
504
|
+
list.selectItem(id);
|
|
505
|
+
// Click-again activates: toggle booleans, open submenus.
|
|
506
|
+
if (wasSelected) list.handleInput("\n");
|
|
507
|
+
}
|
|
282
508
|
}
|
|
509
|
+
return true;
|
|
510
|
+
}
|
|
283
511
|
|
|
284
|
-
|
|
285
|
-
|
|
512
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
513
|
+
// Global search (type-to-search across every tab)
|
|
514
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
515
|
+
|
|
516
|
+
/** Swap the tab content for the global search result list. */
|
|
517
|
+
#startSearch(initialQuery: string): void {
|
|
518
|
+
this.#preSearchTabId = this.#currentTabId;
|
|
519
|
+
this.#searchInput = new Input();
|
|
520
|
+
this.#searchInput.prompt = "";
|
|
521
|
+
this.#searchInput.setValue(initialQuery);
|
|
522
|
+
const list = new SettingsList(
|
|
523
|
+
[],
|
|
524
|
+
10,
|
|
525
|
+
getSettingsListTheme(),
|
|
526
|
+
(id, newValue) => this.#onSearchSettingChange(id as SettingPath, newValue),
|
|
527
|
+
() => this.callbacks.onCancel(),
|
|
528
|
+
{
|
|
529
|
+
layout: "flat",
|
|
530
|
+
typeToSearch: false,
|
|
531
|
+
emptyText: "No matching settings",
|
|
532
|
+
hint: "",
|
|
533
|
+
},
|
|
534
|
+
);
|
|
535
|
+
// Keep the footer tab highlight on the tab owning the selected result.
|
|
536
|
+
list.onSelectionChange = item => this.#syncTabBarToSelection(item);
|
|
537
|
+
this.#setContent(() => {
|
|
538
|
+
this.#searchList = list;
|
|
539
|
+
});
|
|
540
|
+
this.#setSearchQuery(initialQuery);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/**
|
|
544
|
+
* Recompute matches across every settings tab. Results render as one flat
|
|
545
|
+
* list with a heading row per tab; the footer tab bar reorders to show
|
|
546
|
+
* matching tabs (with counts) first and the rest muted at the end.
|
|
547
|
+
*/
|
|
548
|
+
#setSearchQuery(query: string): void {
|
|
549
|
+
if (!this.#searchList) return;
|
|
550
|
+
if (query.length === 0) {
|
|
551
|
+
this.#endSearch(false);
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
|
+
this.#searchQuery = query;
|
|
555
|
+
|
|
556
|
+
const counts = new Map<SettingTab, number>();
|
|
557
|
+
const items: SettingItem[] = [];
|
|
558
|
+
const tabResults: { tab: SettingTab; matched: SettingItem[]; bestScore: number; order: number }[] = [];
|
|
559
|
+
this.#searchFirstMatch.clear();
|
|
560
|
+
let total = 0;
|
|
561
|
+
for (const tab of SETTING_TABS) {
|
|
562
|
+
const candidates: SettingItem[] = [];
|
|
563
|
+
for (const def of getSettingsForTab(tab)) {
|
|
564
|
+
const item = this.#defToItem(def);
|
|
565
|
+
if (item) candidates.push(item);
|
|
566
|
+
}
|
|
567
|
+
const ranked = fuzzyRank(candidates, query, getSettingItemFilterText);
|
|
568
|
+
const matched = ranked.map(result => result.item);
|
|
569
|
+
counts.set(tab, matched.length);
|
|
570
|
+
if (matched.length === 0) continue;
|
|
571
|
+
total += matched.length;
|
|
572
|
+
tabResults.push({
|
|
573
|
+
tab,
|
|
574
|
+
matched,
|
|
575
|
+
bestScore: ranked[0]?.score ?? 0,
|
|
576
|
+
order: SETTING_TABS.indexOf(tab),
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
tabResults.sort((a, b) => a.bestScore - b.bestScore || a.order - b.order);
|
|
581
|
+
for (const result of tabResults) {
|
|
582
|
+
const meta = TAB_METADATA[result.tab];
|
|
583
|
+
items.push({
|
|
584
|
+
id: `__tab:${result.tab}`,
|
|
585
|
+
label: `${theme.symbol(meta.icon as Parameters<typeof theme.symbol>[0])} ${meta.label}`,
|
|
586
|
+
currentValue: "",
|
|
587
|
+
heading: true,
|
|
588
|
+
});
|
|
589
|
+
this.#searchFirstMatch.set(result.tab, result.matched[0]?.id ?? "");
|
|
590
|
+
items.push(...result.matched);
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
this.#searchList.setItems(items);
|
|
594
|
+
this.#searchMatchCount = total;
|
|
595
|
+
this.#tabBar.setTabs(
|
|
596
|
+
this.#buildSearchTabs(
|
|
597
|
+
counts,
|
|
598
|
+
tabResults.map(result => result.tab),
|
|
599
|
+
),
|
|
600
|
+
);
|
|
601
|
+
this.#syncTabBarToSelection(this.#searchList.getSelectedItem());
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* Leave search mode. With `jumpToSelection`, land on the tab containing
|
|
606
|
+
* the selected result and keep it selected there — search doubles as
|
|
607
|
+
* navigation. Otherwise restore the pre-search tab.
|
|
608
|
+
*/
|
|
609
|
+
#endSearch(jumpToSelection: boolean): void {
|
|
610
|
+
if (!this.#searchList) return;
|
|
611
|
+
const selected = jumpToSelection ? this.#searchList.getSelectedItem() : undefined;
|
|
612
|
+
const selectedDef = selected ? getSettingDef(selected.id as SettingPath) : undefined;
|
|
613
|
+
const targetTab: SettingTab | "plugins" = selectedDef?.tab ?? this.#preSearchTabId;
|
|
614
|
+
|
|
615
|
+
this.#searchQuery = "";
|
|
616
|
+
this.#searchFirstMatch.clear();
|
|
617
|
+
this.#searchMatchCount = 0;
|
|
618
|
+
this.#tabBar.setTabs(getSettingsTabs(), targetTab);
|
|
619
|
+
this.#switchToTab(targetTab);
|
|
620
|
+
if (selectedDef) {
|
|
621
|
+
this.#currentList?.selectItem(selectedDef.path);
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
/** Matching tabs first (counts attached), ordered by best result score; the rest stay muted at the end. */
|
|
626
|
+
#buildSearchTabs(counts: Map<SettingTab, number>, matchedTabOrder: readonly SettingTab[]): Tab[] {
|
|
627
|
+
const matched: Tab[] = [];
|
|
628
|
+
const empty: Tab[] = [];
|
|
629
|
+
const matchedIds = new Set<SettingTab>(matchedTabOrder);
|
|
630
|
+
for (const id of matchedTabOrder) {
|
|
631
|
+
const meta = TAB_METADATA[id];
|
|
632
|
+
const icon = theme.symbol(meta.icon as Parameters<typeof theme.symbol>[0]);
|
|
633
|
+
const count = counts.get(id) ?? 0;
|
|
634
|
+
if (count > 0) {
|
|
635
|
+
matched.push({ id, label: `${icon} ${meta.label} (${count})`, short: `${icon} ${count}` });
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
for (const id of SETTING_TABS) {
|
|
639
|
+
if (matchedIds.has(id)) continue;
|
|
640
|
+
const meta = TAB_METADATA[id];
|
|
641
|
+
const icon = theme.symbol(meta.icon as Parameters<typeof theme.symbol>[0]);
|
|
642
|
+
empty.push({ id, label: `${icon} ${meta.label}`, short: icon, muted: true });
|
|
643
|
+
}
|
|
644
|
+
// Plugins hosts its own UI; it is not part of the schema-backed search.
|
|
645
|
+
empty.push({ id: "plugins", label: `${theme.icon.package} Plugins`, short: theme.icon.package, muted: true });
|
|
646
|
+
return [...matched, ...empty];
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
#syncTabBarToSelection(item: SettingItem | undefined): void {
|
|
650
|
+
if (!this.#searchList || !item) return;
|
|
651
|
+
const def = getSettingDef(item.id as SettingPath);
|
|
652
|
+
if (def) this.#tabBar.setActiveById(def.tab);
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/** Value-change dispatch for the search result list (any tab's setting). */
|
|
656
|
+
#onSearchSettingChange(path: SettingPath, newValue: string): void {
|
|
657
|
+
const def = getSettingDef(path);
|
|
658
|
+
if (!def) return;
|
|
659
|
+
if (def.type === "boolean") {
|
|
660
|
+
const boolValue = newValue === "true";
|
|
661
|
+
settings.set(path, boolValue as never);
|
|
662
|
+
this.callbacks.onChange(path, boolValue);
|
|
663
|
+
} else if (def.type === "enum") {
|
|
664
|
+
settings.set(path, newValue as never);
|
|
665
|
+
this.callbacks.onChange(path, newValue);
|
|
666
|
+
}
|
|
667
|
+
// Submenu/text types already persisted inside their own done callbacks.
|
|
668
|
+
if (def.tab === "appearance") {
|
|
669
|
+
this.#triggerStatusLinePreview();
|
|
670
|
+
}
|
|
671
|
+
// Values feed the searchable text and condition gates may have flipped:
|
|
672
|
+
// recompute results in place (selection is preserved by item id).
|
|
673
|
+
this.#setSearchQuery(this.#searchQuery);
|
|
286
674
|
}
|
|
287
675
|
|
|
288
676
|
/**
|
|
@@ -387,6 +775,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
387
775
|
// Preview handlers
|
|
388
776
|
let onPreview: ((value: string) => void | Promise<void>) | undefined;
|
|
389
777
|
let onPreviewCancel: (() => void) | undefined;
|
|
778
|
+
let footer: Component | undefined;
|
|
390
779
|
|
|
391
780
|
const activeThemeBeforePreview = getCurrentThemeName() ?? currentValue;
|
|
392
781
|
if (def.path === "theme.dark" || def.path === "theme.light") {
|
|
@@ -407,7 +796,6 @@ export class SettingsSelectorComponent extends Container {
|
|
|
407
796
|
rightSegments: presetDef.rightSegments,
|
|
408
797
|
separator: presetDef.separator,
|
|
409
798
|
});
|
|
410
|
-
this.#updateStatusPreview();
|
|
411
799
|
};
|
|
412
800
|
onPreviewCancel = () => {
|
|
413
801
|
const currentPreset = settings.get("statusLine.preset");
|
|
@@ -418,18 +806,23 @@ export class SettingsSelectorComponent extends Container {
|
|
|
418
806
|
rightSegments: presetDef.rightSegments,
|
|
419
807
|
separator: presetDef.separator,
|
|
420
808
|
});
|
|
421
|
-
this.#updateStatusPreview();
|
|
422
809
|
};
|
|
423
810
|
} else if (def.path === "statusLine.separator") {
|
|
424
811
|
onPreview = value => {
|
|
425
812
|
this.callbacks.onStatusLinePreview?.({ separator: value as StatusLineSeparatorStyle });
|
|
426
|
-
this.#updateStatusPreview();
|
|
427
813
|
};
|
|
428
814
|
onPreviewCancel = () => {
|
|
429
815
|
const separator = settings.get("statusLine.separator");
|
|
430
816
|
this.callbacks.onStatusLinePreview?.({ separator });
|
|
431
|
-
this.#updateStatusPreview();
|
|
432
817
|
};
|
|
818
|
+
} else if (def.path === "snapcompact.shape") {
|
|
819
|
+
const shapePreview = new SnapcompactShapePreview(currentValue, {
|
|
820
|
+
model: this.context.model,
|
|
821
|
+
imageBudget: this.context.imageBudget,
|
|
822
|
+
requestRender: this.context.requestRender,
|
|
823
|
+
});
|
|
824
|
+
onPreview = value => shapePreview.setValue(value);
|
|
825
|
+
footer = shapePreview;
|
|
433
826
|
}
|
|
434
827
|
|
|
435
828
|
// Provide status line preview for theme selection
|
|
@@ -452,6 +845,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
452
845
|
},
|
|
453
846
|
onPreview,
|
|
454
847
|
getPreview,
|
|
848
|
+
footer,
|
|
455
849
|
);
|
|
456
850
|
}
|
|
457
851
|
|
|
@@ -508,19 +902,15 @@ export class SettingsSelectorComponent extends Container {
|
|
|
508
902
|
#showSettingsTab(tabId: SettingTab): void {
|
|
509
903
|
const defs = getSettingsForTab(tabId);
|
|
510
904
|
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
this.#statusPreviewContainer.addChild(this.#statusPreviewText);
|
|
518
|
-
this.#statusPreviewContainer.addChild(new Spacer(1));
|
|
519
|
-
this.addChild(this.#statusPreviewContainer);
|
|
520
|
-
}
|
|
905
|
+
const items = this.#buildItemsForDefs(defs);
|
|
906
|
+
// Mirror SettingsList's section detection (leading ungrouped items form
|
|
907
|
+
// an implicit section) so the footer hint only advertises PgUp/PgDn
|
|
908
|
+
// when the jump actually changes sections.
|
|
909
|
+
const sectionCount = items.filter(item => item.heading).length + (items.length > 0 && !items[0].heading ? 1 : 0);
|
|
910
|
+
this.#hasSectionJump = sectionCount >= 2;
|
|
521
911
|
|
|
522
912
|
this.#currentList = new SettingsList(
|
|
523
|
-
|
|
913
|
+
items,
|
|
524
914
|
10,
|
|
525
915
|
getSettingsListTheme(),
|
|
526
916
|
(id, newValue) => {
|
|
@@ -549,17 +939,28 @@ export class SettingsSelectorComponent extends Container {
|
|
|
549
939
|
this.#refreshCurrentTabItems(defs);
|
|
550
940
|
},
|
|
551
941
|
() => this.callbacks.onCancel(),
|
|
942
|
+
// The selector owns type-to-search and the footer hint; pin the
|
|
943
|
+
// split sidebar width so the divider never jumps between tabs.
|
|
944
|
+
{ typeToSearch: false, hint: "", sidebarWidth: settingsSidebarWidth() },
|
|
552
945
|
);
|
|
553
|
-
|
|
554
|
-
this.addChild(this.#currentList);
|
|
555
946
|
}
|
|
556
947
|
|
|
557
|
-
/**
|
|
948
|
+
/**
|
|
949
|
+
* Map a definition list to UI items, dropping any whose condition is false.
|
|
950
|
+
* Inserts a heading row whenever the (group-sorted) definition list crosses
|
|
951
|
+
* into a new group; groups whose items are all condition-hidden emit none.
|
|
952
|
+
*/
|
|
558
953
|
#buildItemsForDefs(defs: SettingDef[]): SettingItem[] {
|
|
559
954
|
const items: SettingItem[] = [];
|
|
955
|
+
let lastGroup: string | undefined;
|
|
560
956
|
for (const def of defs) {
|
|
561
957
|
const item = this.#defToItem(def);
|
|
562
|
-
if (item)
|
|
958
|
+
if (!item) continue;
|
|
959
|
+
if (def.group && def.group !== lastGroup) {
|
|
960
|
+
items.push({ id: `__heading:${def.group}`, label: def.group, currentValue: "", heading: true });
|
|
961
|
+
lastGroup = def.group;
|
|
962
|
+
}
|
|
963
|
+
items.push(item);
|
|
563
964
|
}
|
|
564
965
|
return items;
|
|
565
966
|
}
|
|
@@ -590,18 +991,9 @@ export class SettingsSelectorComponent extends Container {
|
|
|
590
991
|
rightSegments: settings.get("statusLine.rightSegments"),
|
|
591
992
|
separator: settings.get("statusLine.separator"),
|
|
592
993
|
sessionAccent: settings.get("statusLine.sessionAccent"),
|
|
994
|
+
transparent: settings.get("statusLine.transparent"),
|
|
593
995
|
};
|
|
594
996
|
this.callbacks.onStatusLinePreview?.(statusLineSettings);
|
|
595
|
-
this.#updateStatusPreview();
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
/**
|
|
599
|
-
* Update the inline status preview text.
|
|
600
|
-
*/
|
|
601
|
-
#updateStatusPreview(): void {
|
|
602
|
-
if (this.#statusPreviewText && this.#currentTabId === "appearance") {
|
|
603
|
-
this.#statusPreviewText.setText(this.#getStatusPreviewString());
|
|
604
|
-
}
|
|
605
997
|
}
|
|
606
998
|
|
|
607
999
|
#showPluginsTab(): void {
|
|
@@ -609,39 +1001,95 @@ export class SettingsSelectorComponent extends Container {
|
|
|
609
1001
|
onClose: () => this.callbacks.onCancel(),
|
|
610
1002
|
onPluginChanged: () => this.callbacks.onPluginsChanged?.(),
|
|
611
1003
|
});
|
|
612
|
-
this.addChild(this.#pluginComponent);
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
getFocusComponent(): SettingsList | PluginSettingsComponent {
|
|
616
|
-
// Return the current focusable component - one of these will always be set
|
|
617
|
-
return (this.#currentList || this.#pluginComponent)!;
|
|
618
1004
|
}
|
|
619
1005
|
|
|
620
1006
|
handleInput(data: string): void {
|
|
621
|
-
//
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
) {
|
|
630
|
-
this.#
|
|
1007
|
+
// SGR mouse reports (the fullscreen overlay enables tracking).
|
|
1008
|
+
if (data.startsWith("\x1b[<")) {
|
|
1009
|
+
this.#handleMouse(data);
|
|
1010
|
+
return;
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
// Text-input submenus take every byte: arrow keys must reach the
|
|
1014
|
+
// cursor and Tab must not switch tabs.
|
|
1015
|
+
if (this.#textInputActive) {
|
|
1016
|
+
(this.#searchList ?? this.#currentList)?.handleInput(data);
|
|
1017
|
+
return;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
const activeList = this.#searchList ?? this.#currentList;
|
|
1021
|
+
|
|
1022
|
+
// An open submenu owns input entirely — Tab/arrows/typing belong to it.
|
|
1023
|
+
if (activeList?.hasOpenSubmenu()) {
|
|
1024
|
+
activeList.handleInput(data);
|
|
1025
|
+
return;
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
if (this.#searchList) {
|
|
1029
|
+
this.#handleSearchModeInput(data, this.#searchList);
|
|
631
1030
|
return;
|
|
632
1031
|
}
|
|
633
1032
|
|
|
634
|
-
//
|
|
635
|
-
|
|
636
|
-
|
|
1033
|
+
// Tab toggles keyboard focus between section headings and setting rows
|
|
1034
|
+
// (fast section hopping); tabs without sections keep Tab switching tabs.
|
|
1035
|
+
if (matchesKey(data, "tab") || matchesKey(data, "shift+tab")) {
|
|
1036
|
+
if (this.#currentList?.hasSectionFocusTargets()) {
|
|
1037
|
+
this.#currentList.toggleSectionFocus();
|
|
1038
|
+
return;
|
|
1039
|
+
}
|
|
1040
|
+
this.#tabBar.handleInput(data);
|
|
1041
|
+
return;
|
|
1042
|
+
}
|
|
1043
|
+
if (matchesKey(data, "left") || matchesKey(data, "right")) {
|
|
1044
|
+
this.#tabBar.handleInput(data);
|
|
637
1045
|
return;
|
|
638
1046
|
}
|
|
639
1047
|
|
|
640
|
-
//
|
|
1048
|
+
// Printable characters start a search across every settings tab. The
|
|
1049
|
+
// plugins tab keeps its own local filtering instead.
|
|
1050
|
+
if (this.#currentTabId !== "plugins") {
|
|
1051
|
+
const printable = extractPrintableText(data);
|
|
1052
|
+
if (printable !== undefined && printable.trim().length > 0) {
|
|
1053
|
+
this.#startSearch(printable);
|
|
1054
|
+
return;
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
|
|
641
1058
|
if (this.#currentList) {
|
|
642
1059
|
this.#currentList.handleInput(data);
|
|
643
1060
|
} else if (this.#pluginComponent) {
|
|
644
1061
|
this.#pluginComponent.handleInput(data);
|
|
645
1062
|
}
|
|
646
1063
|
}
|
|
1064
|
+
|
|
1065
|
+
#handleSearchModeInput(data: string, list: SettingsList): void {
|
|
1066
|
+
const kb = getKeybindings();
|
|
1067
|
+
if (kb.matches(data, "tui.select.cancel")) {
|
|
1068
|
+
// Exit search, landing on the tab of the selected result.
|
|
1069
|
+
this.#endSearch(true);
|
|
1070
|
+
return;
|
|
1071
|
+
}
|
|
1072
|
+
if (matchesKey(data, "tab") || matchesKey(data, "shift+tab")) {
|
|
1073
|
+
// Jump between tabs that have matches (muted tabs are skipped).
|
|
1074
|
+
this.#tabBar.handleInput(data);
|
|
1075
|
+
return;
|
|
1076
|
+
}
|
|
1077
|
+
// Selection, paging, and activation stay with the result list.
|
|
1078
|
+
if (
|
|
1079
|
+
kb.matches(data, "tui.select.up") ||
|
|
1080
|
+
kb.matches(data, "tui.select.down") ||
|
|
1081
|
+
kb.matches(data, "tui.select.pageUp") ||
|
|
1082
|
+
kb.matches(data, "tui.select.pageDown") ||
|
|
1083
|
+
kb.matches(data, "tui.select.confirm") ||
|
|
1084
|
+
data === "\n"
|
|
1085
|
+
) {
|
|
1086
|
+
list.handleInput(data);
|
|
1087
|
+
return;
|
|
1088
|
+
}
|
|
1089
|
+
// Everything else edits the query like a regular single-line editor:
|
|
1090
|
+
// cursor movement, word ops, kill ring, undo, paste.
|
|
1091
|
+
this.#searchInput.handleInput(data);
|
|
1092
|
+
const value = this.#searchInput.getValue();
|
|
1093
|
+
if (value !== this.#searchQuery) this.#setSearchQuery(value);
|
|
1094
|
+
}
|
|
647
1095
|
}
|