@prometheus-ai/agent 0.5.4 → 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 +30 -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/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/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 +1202 -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/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/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/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 +1441 -387
- 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/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 +9 -7
- 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/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,12 +1,32 @@
|
|
|
1
1
|
import * as fs from "node:fs/promises";
|
|
2
|
-
import type { ImageContent } from "@prometheus-ai/ai";
|
|
2
|
+
import type { ImageContent, Model } from "@prometheus-ai/ai";
|
|
3
3
|
import { formatBytes, readImageMetadata, SUPPORTED_IMAGE_MIME_TYPES } from "@prometheus-ai/utils";
|
|
4
4
|
import { resolveReadPath } from "../tools/path-utils";
|
|
5
|
-
import { formatDimensionNote, resizeImage } from "./image-resize";
|
|
5
|
+
import { formatDimensionNote, type ImageResizeOptions, resizeImage } from "./image-resize";
|
|
6
6
|
|
|
7
7
|
export const MAX_IMAGE_INPUT_BYTES = 20 * 1024 * 1024;
|
|
8
8
|
export const SUPPORTED_INPUT_IMAGE_MIME_TYPES = SUPPORTED_IMAGE_MIME_TYPES;
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Ollama and its local-backend family decode image input through llama.cpp /
|
|
12
|
+
* `stb_image`, which is compiled without WebP support, so a WebP upload fails
|
|
13
|
+
* with an opaque HTTP 400. Detect those models so the resize pipeline encodes
|
|
14
|
+
* to PNG/JPEG instead — the automatic equivalent of `PROMETHEUS_NO_WEBP=1`.
|
|
15
|
+
*/
|
|
16
|
+
export function modelLacksWebpSupport(model: Pick<Model, "provider" | "api"> | undefined): boolean {
|
|
17
|
+
if (!model) return false;
|
|
18
|
+
return model.provider === "ollama" || model.provider === "ollama-cloud" || model.api === "ollama-chat";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* `true` when `model` cannot decode WebP, otherwise `undefined` so the
|
|
23
|
+
* `PROMETHEUS_NO_WEBP` env fallback in {@link resizeImage} still applies. Feed straight
|
|
24
|
+
* into {@link ImageResizeOptions.excludeWebP}.
|
|
25
|
+
*/
|
|
26
|
+
export function webpExclusionForModel(model: Pick<Model, "provider" | "api"> | undefined): true | undefined {
|
|
27
|
+
return modelLacksWebpSupport(model) ? true : undefined;
|
|
28
|
+
}
|
|
29
|
+
|
|
10
30
|
export interface LoadImageInputOptions {
|
|
11
31
|
path: string;
|
|
12
32
|
cwd: string;
|
|
@@ -14,6 +34,8 @@ export interface LoadImageInputOptions {
|
|
|
14
34
|
maxBytes?: number;
|
|
15
35
|
resolvedPath?: string;
|
|
16
36
|
detectedMimeType?: string;
|
|
37
|
+
/** Force non-WebP output (e.g. for Ollama). Leave unset to honor `PROMETHEUS_NO_WEBP`. */
|
|
38
|
+
excludeWebP?: boolean;
|
|
17
39
|
}
|
|
18
40
|
|
|
19
41
|
export interface LoadedImageInput {
|
|
@@ -50,6 +72,41 @@ export async function ensureSupportedImageInput(image: ImageContent): Promise<Im
|
|
|
50
72
|
}
|
|
51
73
|
}
|
|
52
74
|
|
|
75
|
+
export interface NormalizeModelContextImagesOptions {
|
|
76
|
+
/** Model the images are bound for; used to derive encoder constraints (WebP exclusion for Ollama). */
|
|
77
|
+
model?: Model;
|
|
78
|
+
resize?: ImageResizeOptions;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Normalize image blocks before they enter agent/model context. This keeps
|
|
83
|
+
* provider request construction from having to resize an unbounded batch of
|
|
84
|
+
* large images on the streaming hot path. Images are processed sequentially on
|
|
85
|
+
* purpose: `resizeImage` may fan out multiple encoders for one image, so the
|
|
86
|
+
* outer image batch must stay bounded.
|
|
87
|
+
*/
|
|
88
|
+
export async function normalizeModelContextImages(
|
|
89
|
+
images: ImageContent[] | undefined,
|
|
90
|
+
options?: NormalizeModelContextImagesOptions,
|
|
91
|
+
): Promise<ImageContent[] | undefined> {
|
|
92
|
+
if (!images || images.length === 0) return undefined;
|
|
93
|
+
const resize: ImageResizeOptions | undefined = modelLacksWebpSupport(options?.model)
|
|
94
|
+
? { ...options?.resize, excludeWebP: true }
|
|
95
|
+
: options?.resize;
|
|
96
|
+
const normalized: ImageContent[] = [];
|
|
97
|
+
for (const image of images) {
|
|
98
|
+
try {
|
|
99
|
+
const resized = await resizeImage(image, resize);
|
|
100
|
+
normalized.push({ type: "image", data: resized.data, mimeType: resized.mimeType });
|
|
101
|
+
} catch {
|
|
102
|
+
// Preserve existing caller behavior for decode/resize failures: keep the
|
|
103
|
+
// user's image block rather than dropping it from the turn.
|
|
104
|
+
normalized.push(image);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return normalized;
|
|
108
|
+
}
|
|
109
|
+
|
|
53
110
|
export async function loadImageInput(options: LoadImageInputOptions): Promise<LoadedImageInput | null> {
|
|
54
111
|
const maxBytes = options.maxBytes ?? MAX_IMAGE_INPUT_BYTES;
|
|
55
112
|
const resolvedPath = options.resolvedPath ?? resolveReadPath(options.path, options.cwd);
|
|
@@ -74,9 +131,13 @@ export async function loadImageInput(options: LoadImageInputOptions): Promise<Lo
|
|
|
74
131
|
let outputBytes = inputBuffer.byteLength;
|
|
75
132
|
let dimensionNote: string | undefined;
|
|
76
133
|
|
|
77
|
-
|
|
134
|
+
const shouldReencodeWebP = options.excludeWebP === true && mimeType === "image/webp";
|
|
135
|
+
if (options.autoResize || shouldReencodeWebP) {
|
|
78
136
|
try {
|
|
79
|
-
const resized = await resizeImage(
|
|
137
|
+
const resized = await resizeImage(
|
|
138
|
+
{ type: "image", data: outputData, mimeType },
|
|
139
|
+
{ excludeWebP: options.excludeWebP },
|
|
140
|
+
);
|
|
80
141
|
outputData = resized.data;
|
|
81
142
|
outputMimeType = resized.mimeType;
|
|
82
143
|
outputBytes = resized.buffer.byteLength;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { hslToHex, relativeLuminance } from "@prometheus-ai/utils";
|
|
1
|
+
import { hexToHsv, hslToHex, relativeLuminance } from "@prometheus-ai/utils";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Derive a stable hue (0-359) from a string using djb2 hash.
|
|
@@ -25,23 +25,97 @@ function accentLuminanceCap(surfaceLuminance: number): number {
|
|
|
25
25
|
return Math.max(0, (surfaceLuminance + 0.05) / ACCENT_MIN_CONTRAST - 0.05);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
/** Minimum angular distance in hue degrees from any theme color to avoid visual collision. */
|
|
29
|
+
const MIN_HUE_DISTANCE = 10;
|
|
30
|
+
/** Saturation threshold below which hue is meaningless (near-gray). */
|
|
31
|
+
const MIN_SATURATION_FOR_HUE = 0.1;
|
|
32
|
+
|
|
33
|
+
/** Angular distance between two hue values (0-360). */
|
|
34
|
+
function hueDistance(a: number, b: number): number {
|
|
35
|
+
const d = Math.abs(a - b);
|
|
36
|
+
return Math.min(d, 360 - d);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Parse hue (0-360) from a hex color string.
|
|
41
|
+
* Returns undefined for near-gray colors where hue is not meaningful.
|
|
42
|
+
*/
|
|
43
|
+
function hexToHue(hex: string): number | undefined {
|
|
44
|
+
const hsv = hexToHsv(hex);
|
|
45
|
+
if (hsv.s < MIN_SATURATION_FOR_HUE) return undefined;
|
|
46
|
+
return hsv.h;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Find a hue at least {@link MIN_HUE_DISTANCE} from all occupied hues,
|
|
51
|
+
* clamped to [lo, hi] to prevent leaving the intended hue band.
|
|
52
|
+
* Returns `target` unchanged if no safe hue exists within bounds.
|
|
53
|
+
*/
|
|
54
|
+
function findSafeHue(target: number, occupied: number[], lo: number, hi: number): number {
|
|
55
|
+
if (occupied.length === 0) return target;
|
|
56
|
+
if (occupied.every(h => hueDistance(target, h) >= MIN_HUE_DISTANCE)) {
|
|
57
|
+
return target;
|
|
58
|
+
}
|
|
59
|
+
for (let d = 1; d <= hi - lo; d++) {
|
|
60
|
+
for (const dir of [1, -1]) {
|
|
61
|
+
const candidate = Math.max(lo, Math.min(hi, target + d * dir));
|
|
62
|
+
if (occupied.every(h => hueDistance(candidate, h) >= MIN_HUE_DISTANCE)) {
|
|
63
|
+
return candidate;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// fallback: keep the original target if no safe spot exists within the band
|
|
68
|
+
return target;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Hue range low and high for dark themes (warm: red → yellow → green). */
|
|
72
|
+
const DARK_HUE_START = 0;
|
|
73
|
+
const DARK_HUE_END = 120;
|
|
74
|
+
/** Hue range low and high for light themes (cool: cyan → blue → purple). */
|
|
75
|
+
const LIGHT_HUE_START = 180;
|
|
76
|
+
const LIGHT_HUE_END = 300;
|
|
77
|
+
|
|
28
78
|
/**
|
|
29
|
-
* Derive a stable CSS hex accent color from a session name.
|
|
79
|
+
* Derive a stable CSS hex accent color from a session name and the active theme.
|
|
80
|
+
*
|
|
81
|
+
* Picks a hue from a **dark/light-specific range** so the accent feels natural
|
|
82
|
+
* for the theme type (warm on dark, cool on light). The session name hash
|
|
83
|
+
* determines the exact hue within the range. The result is checked against
|
|
84
|
+
* all theme color hues and shifted if it lands within {@link MIN_HUE_DISTANCE}
|
|
85
|
+
* of an existing theme hue, but is clamped to the hue band so it never
|
|
86
|
+
* drifts into an unrelated part of the spectrum.
|
|
30
87
|
*
|
|
31
88
|
* On dark themes (`surfaceLuminance` undefined) the accent is vivid (high
|
|
32
89
|
* saturation, high lightness). On light themes the lightness is reduced until the
|
|
33
90
|
* accent's perceived luminance clears {@link ACCENT_MIN_CONTRAST} against the
|
|
34
91
|
* actual surface it renders on — so it stays legible on near-white *and* mid-light
|
|
35
|
-
* backgrounds
|
|
92
|
+
* backgrounds.
|
|
93
|
+
*
|
|
94
|
+
* @param name — session name for per-session uniqueness.
|
|
95
|
+
* @param themeColorHexes — all theme colors to check collision against.
|
|
96
|
+
* @param surfaceLuminance — undefined on dark themes; WCAG luminance of the
|
|
97
|
+
* status-line background on light themes.
|
|
36
98
|
*/
|
|
37
|
-
export function getSessionAccentHex(name: string, surfaceLuminance?: number): string {
|
|
38
|
-
|
|
99
|
+
export function getSessionAccentHex(name: string, themeColorHexes: string[], surfaceLuminance?: number): string {
|
|
100
|
+
// 1. Pick hue range based on theme mode
|
|
101
|
+
const hueStart = surfaceLuminance === undefined ? DARK_HUE_START : LIGHT_HUE_START;
|
|
102
|
+
const hueEnd = surfaceLuminance === undefined ? DARK_HUE_END : LIGHT_HUE_END;
|
|
103
|
+
const range = hueEnd - hueStart;
|
|
104
|
+
|
|
105
|
+
// 2. Session name picks within the range
|
|
106
|
+
let targetHue = hueStart + (nameToHue(name) % range);
|
|
107
|
+
|
|
108
|
+
// 3. Shift away if too close to any theme color — stays within [hueStart, hueEnd]
|
|
109
|
+
const themeHues = themeColorHexes.map(hexToHue).filter((h): h is number => h !== undefined);
|
|
110
|
+
targetHue = findSafeHue(targetHue, themeHues, hueStart, hueEnd);
|
|
111
|
+
|
|
112
|
+
// 4. Lightness/contrast — vivid on dark, bisected for AA on light
|
|
39
113
|
if (surfaceLuminance === undefined) {
|
|
40
|
-
return hslToHex(
|
|
114
|
+
return hslToHex(targetHue, ACCENT_SATURATION, ACCENT_DARK_LIGHTNESS);
|
|
41
115
|
}
|
|
42
116
|
|
|
43
117
|
const cap = accentLuminanceCap(surfaceLuminance);
|
|
44
|
-
const top = hslToHex(
|
|
118
|
+
const top = hslToHex(targetHue, ACCENT_SATURATION, ACCENT_DARK_LIGHTNESS);
|
|
45
119
|
if ((relativeLuminance(top) ?? 0) <= cap) return top;
|
|
46
120
|
|
|
47
121
|
// Bisect lightness: `lo` always yields luminance <= cap, `hi` always above it.
|
|
@@ -49,13 +123,13 @@ export function getSessionAccentHex(name: string, surfaceLuminance?: number): st
|
|
|
49
123
|
let hi = ACCENT_DARK_LIGHTNESS;
|
|
50
124
|
for (let i = 0; i < 20; i++) {
|
|
51
125
|
const mid = (lo + hi) / 2;
|
|
52
|
-
if ((relativeLuminance(hslToHex(
|
|
126
|
+
if ((relativeLuminance(hslToHex(targetHue, ACCENT_SATURATION, mid)) ?? 0) > cap) {
|
|
53
127
|
hi = mid;
|
|
54
128
|
} else {
|
|
55
129
|
lo = mid;
|
|
56
130
|
}
|
|
57
131
|
}
|
|
58
|
-
return hslToHex(
|
|
132
|
+
return hslToHex(targetHue, ACCENT_SATURATION, lo);
|
|
59
133
|
}
|
|
60
134
|
|
|
61
135
|
/**
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { AssistantMessage } from "@prometheus-ai/ai";
|
|
2
|
+
|
|
3
|
+
type AssistantContentBlock = AssistantMessage["content"][number];
|
|
4
|
+
type ThinkingBlock = Extract<AssistantContentBlock, { type: "thinking" }>;
|
|
5
|
+
|
|
6
|
+
function isDotOnlyThinking(text: string): boolean {
|
|
7
|
+
let sawDot = false;
|
|
8
|
+
for (let i = 0; i < text.length; i++) {
|
|
9
|
+
const code = text.charCodeAt(i);
|
|
10
|
+
if (code === 0x2e || code === 0x2026) {
|
|
11
|
+
sawDot = true;
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
if (code === 0x20 || code === 0x09 || code === 0x0a || code === 0x0d) continue;
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
return sawDot;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Returns the operator-visible thinking text for a block.
|
|
22
|
+
*
|
|
23
|
+
* Some OpenAI-compatible reasoning gateways require a non-empty
|
|
24
|
+
* `reasoning_content` field on historical assistant tool-call turns even when
|
|
25
|
+
* the model did not emit any reasoning. The provider adapter uses a single dot
|
|
26
|
+
* as the wire-only placeholder those gateways accept; if that value is later
|
|
27
|
+
* replayed or echoed as a thinking block, it should not render as model thought.
|
|
28
|
+
*/
|
|
29
|
+
export function getVisibleThinkingText(block: ThinkingBlock): string {
|
|
30
|
+
const text = block.thinking.trim();
|
|
31
|
+
if (text.length === 0) return "";
|
|
32
|
+
return isDotOnlyThinking(text) ? "" : text;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function hasVisibleThinking(block: ThinkingBlock): boolean {
|
|
36
|
+
return getVisibleThinkingText(block).length > 0;
|
|
37
|
+
}
|
|
@@ -6,14 +6,19 @@ import * as path from "node:path";
|
|
|
6
6
|
import { type Api, type AssistantMessage, completeSimple, type Model, type Tool } from "@prometheus-ai/ai";
|
|
7
7
|
import { logger, prompt } from "@prometheus-ai/utils";
|
|
8
8
|
import type { ModelRegistry } from "../config/model-registry";
|
|
9
|
+
|
|
9
10
|
import { resolveRoleSelection } from "../config/model-resolver";
|
|
10
11
|
import type { Settings } from "../config/settings";
|
|
12
|
+
import titleMarkerInstruction from "../prompts/system/title-marker-instruction.md" with { type: "text" };
|
|
11
13
|
import titleSystemPrompt from "../prompts/system/title-system.md" with { type: "text" };
|
|
14
|
+
import titleMarkerSystemPrompt from "../prompts/system/title-system-marker.md" with { type: "text" };
|
|
12
15
|
import { ONLINE_TINY_TITLE_MODEL_KEY } from "../tiny/models";
|
|
13
16
|
import { formatTitleUserMessage, isLowSignalTitleInput, normalizeGeneratedTitle } from "../tiny/text";
|
|
14
17
|
import { tinyTitleClient } from "../tiny/title-client";
|
|
15
18
|
|
|
16
19
|
const TITLE_SYSTEM_PROMPT = prompt.render(titleSystemPrompt);
|
|
20
|
+
const TITLE_MARKER_SYSTEM_PROMPT = prompt.render(titleMarkerSystemPrompt);
|
|
21
|
+
const TITLE_MARKER_INSTRUCTION = prompt.render(titleMarkerInstruction);
|
|
17
22
|
|
|
18
23
|
const DEFAULT_TERMINAL_TITLE = "π";
|
|
19
24
|
const TERMINAL_TITLE_CONTROL_CHARS = /[\u0000-\u001f\u007f-\u009f]/g;
|
|
@@ -32,7 +37,7 @@ const setTitleTool: Tool = {
|
|
|
32
37
|
title: {
|
|
33
38
|
type: "string",
|
|
34
39
|
description:
|
|
35
|
-
'
|
|
40
|
+
'The generated session title, or exactly "none" when the message carries no concrete task yet.',
|
|
36
41
|
},
|
|
37
42
|
},
|
|
38
43
|
required: ["title"],
|
|
@@ -40,11 +45,35 @@ const setTitleTool: Tool = {
|
|
|
40
45
|
},
|
|
41
46
|
};
|
|
42
47
|
|
|
48
|
+
/** Matches the title a tool-choice-less model wraps in `<title>...</title>`. */
|
|
49
|
+
const TITLE_MARKER_RE = /<title>([\s\S]*?)<\/title>/i;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Whether the model honors a forced `tool_choice` so the `set_title` tool can be
|
|
53
|
+
* required. Providers/models that reject forced tool calls (chat-completions
|
|
54
|
+
* hosts without `tool_choice` support, Claude Fable/Mythos) can't be made to
|
|
55
|
+
* emit a structured call, so the caller falls back to marker-wrapped text.
|
|
56
|
+
*/
|
|
57
|
+
function modelSupportsForcedToolChoice(model: Model<Api>): boolean {
|
|
58
|
+
// `compat` is a union across APIs and `supportsToolChoice` lives only on the
|
|
59
|
+
// OpenAI-completions variant, so read both flags through a structural view.
|
|
60
|
+
const compat = model.compat as { supportsToolChoice?: boolean; supportsForcedToolChoice?: boolean } | undefined;
|
|
61
|
+
if (!compat) return true;
|
|
62
|
+
// A forced tool call first requires sending `tool_choice` at all. Hosts that
|
|
63
|
+
// drop the parameter entirely (`supportsToolChoice: false`, e.g. direct
|
|
64
|
+
// DeepSeek reasoning) can never be forced even when they otherwise accept
|
|
65
|
+
// forced values, so this veto wins over `supportsForcedToolChoice`.
|
|
66
|
+
if (compat.supportsToolChoice === false) return false;
|
|
67
|
+
if (typeof compat.supportsForcedToolChoice === "boolean") return compat.supportsForcedToolChoice;
|
|
68
|
+
if (typeof compat.supportsToolChoice === "boolean") return compat.supportsToolChoice;
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
|
|
43
72
|
function getTitleModel(registry: ModelRegistry, settings: Settings, currentModel?: Model<Api>): Model<Api> | undefined {
|
|
44
73
|
const availableModels = registry.getAvailable();
|
|
45
74
|
if (availableModels.length === 0) return undefined;
|
|
46
75
|
|
|
47
|
-
const titleModel = resolveRoleSelection(["commit", "smol"], settings, availableModels, registry)?.model;
|
|
76
|
+
const titleModel = resolveRoleSelection(["title", "commit", "smol"], settings, availableModels, registry)?.model;
|
|
48
77
|
if (titleModel) return titleModel;
|
|
49
78
|
|
|
50
79
|
if (currentModel) return currentModel;
|
|
@@ -136,6 +165,7 @@ export async function raceFirstNonNull<T>(
|
|
|
136
165
|
* to produce request metadata (e.g. user_id for session attribution). Using a
|
|
137
166
|
* resolver instead of a pre-evaluated value ensures the metadata's account_uuid
|
|
138
167
|
* reflects the credential actually selected for this request.
|
|
168
|
+
* @param customSystemPrompt Optional title-specific system prompt override
|
|
139
169
|
*/
|
|
140
170
|
export async function generateSessionTitle(
|
|
141
171
|
firstMessage: string,
|
|
@@ -144,6 +174,7 @@ export async function generateSessionTitle(
|
|
|
144
174
|
sessionId?: string,
|
|
145
175
|
currentModel?: Model<Api>,
|
|
146
176
|
metadataResolver?: (provider: string) => Record<string, unknown> | undefined,
|
|
177
|
+
customSystemPrompt?: string,
|
|
147
178
|
): Promise<string | null> {
|
|
148
179
|
// Defer titling for greetings / acknowledgements / empty input. The default
|
|
149
180
|
// tiny title model can't reliably decline trivial input, so this happens
|
|
@@ -154,13 +185,26 @@ export async function generateSessionTitle(
|
|
|
154
185
|
return null;
|
|
155
186
|
}
|
|
156
187
|
|
|
188
|
+
const titleSystemPrompt = customSystemPrompt?.trim() || undefined;
|
|
157
189
|
const tinyModel = settings.get("providers.tinyModel");
|
|
158
190
|
if (tinyModel === ONLINE_TINY_TITLE_MODEL_KEY) {
|
|
159
|
-
return generateTitleOnline(
|
|
191
|
+
return generateTitleOnline(
|
|
192
|
+
firstMessage,
|
|
193
|
+
registry,
|
|
194
|
+
settings,
|
|
195
|
+
sessionId,
|
|
196
|
+
currentModel,
|
|
197
|
+
metadataResolver,
|
|
198
|
+
undefined,
|
|
199
|
+
titleSystemPrompt,
|
|
200
|
+
);
|
|
160
201
|
}
|
|
161
202
|
|
|
162
203
|
const onlineAbortController = new AbortController();
|
|
163
|
-
const
|
|
204
|
+
const localTitlePromise = titleSystemPrompt
|
|
205
|
+
? tinyTitleClient.generate(tinyModel, firstMessage, { systemPrompt: titleSystemPrompt })
|
|
206
|
+
: tinyTitleClient.generate(tinyModel, firstMessage);
|
|
207
|
+
const localTitle = localTitlePromise.then(
|
|
164
208
|
title => title || null,
|
|
165
209
|
err => {
|
|
166
210
|
logger.warn("title-generator: local model error", {
|
|
@@ -180,6 +224,7 @@ export async function generateSessionTitle(
|
|
|
180
224
|
currentModel,
|
|
181
225
|
metadataResolver,
|
|
182
226
|
onlineAbortController.signal,
|
|
227
|
+
titleSystemPrompt,
|
|
183
228
|
);
|
|
184
229
|
|
|
185
230
|
return raceFirstNonNull(localTitle, startOnline, TITLE_LOCAL_FALLBACK_DELAY_MS, () => {
|
|
@@ -195,6 +240,7 @@ export async function generateTitleOnline(
|
|
|
195
240
|
currentModel?: Model<Api>,
|
|
196
241
|
metadataResolver?: (provider: string) => Record<string, unknown> | undefined,
|
|
197
242
|
signal?: AbortSignal,
|
|
243
|
+
customSystemPrompt?: string,
|
|
198
244
|
): Promise<string | null> {
|
|
199
245
|
const model = getTitleModel(registry, settings, currentModel);
|
|
200
246
|
if (!model) {
|
|
@@ -202,6 +248,17 @@ export async function generateTitleOnline(
|
|
|
202
248
|
return null;
|
|
203
249
|
}
|
|
204
250
|
|
|
251
|
+
const titleSystemPrompt = customSystemPrompt?.trim() || undefined;
|
|
252
|
+
// Some providers can't be forced to call a tool — chat-completions hosts
|
|
253
|
+
// without `tool_choice` support, Claude Fable/Mythos — so a required
|
|
254
|
+
// `set_title` call never arrives. For those, ask the model to wrap the title
|
|
255
|
+
// in `<title>...</title>` markers and parse it from text instead.
|
|
256
|
+
const useForcedTool = modelSupportsForcedToolChoice(model);
|
|
257
|
+
const systemPrompt = useForcedTool
|
|
258
|
+
? [titleSystemPrompt ?? TITLE_SYSTEM_PROMPT]
|
|
259
|
+
: titleSystemPrompt
|
|
260
|
+
? [titleSystemPrompt, TITLE_MARKER_INSTRUCTION]
|
|
261
|
+
: [TITLE_MARKER_SYSTEM_PROMPT];
|
|
205
262
|
const userMessage = formatTitleUserMessage(firstMessage);
|
|
206
263
|
const modelName = `${model.provider}/${model.id}`;
|
|
207
264
|
const modelContext = {
|
|
@@ -223,7 +280,7 @@ export async function generateTitleOnline(
|
|
|
223
280
|
// account_uuid rather than the snapshot-at-call-site value.
|
|
224
281
|
const metadata = metadataResolver?.(model.provider);
|
|
225
282
|
|
|
226
|
-
// Title generation is a 3-
|
|
283
|
+
// Title generation is a 3-7 word task, but some reasoning backends ignore
|
|
227
284
|
// disableReasoning. Keep the normal cheap budget for non-reasoning models
|
|
228
285
|
// while reserving enough output room for reasoning models to still emit
|
|
229
286
|
// the forced tool call after any unavoidable thinking tokens.
|
|
@@ -233,15 +290,15 @@ export async function generateTitleOnline(
|
|
|
233
290
|
const response = await completeSimple(
|
|
234
291
|
model,
|
|
235
292
|
{
|
|
236
|
-
systemPrompt
|
|
293
|
+
systemPrompt,
|
|
237
294
|
messages: [{ role: "user", content: userMessage, timestamp: Date.now() }],
|
|
238
|
-
tools: [setTitleTool],
|
|
295
|
+
tools: useForcedTool ? [setTitleTool] : undefined,
|
|
239
296
|
},
|
|
240
297
|
{
|
|
241
|
-
apiKey,
|
|
298
|
+
apiKey: registry.resolver(model, sessionId),
|
|
242
299
|
maxTokens,
|
|
243
300
|
disableReasoning: true,
|
|
244
|
-
toolChoice: { type: "tool", name: SET_TITLE_TOOL_NAME },
|
|
301
|
+
toolChoice: useForcedTool ? { type: "tool", name: SET_TITLE_TOOL_NAME } : undefined,
|
|
245
302
|
metadata,
|
|
246
303
|
signal,
|
|
247
304
|
},
|
|
@@ -299,7 +356,13 @@ function extractGeneratedTitle(contentBlocks: AssistantMessage["content"]): stri
|
|
|
299
356
|
textTitle += content.text;
|
|
300
357
|
}
|
|
301
358
|
}
|
|
302
|
-
|
|
359
|
+
// Tool-choice-less models are asked to wrap the title in <title>...</title>,
|
|
360
|
+
// but stay lenient: prefer the marker when the model closed it, otherwise
|
|
361
|
+
// accept a plain sentence after stripping any stray/unclosed tag fragment
|
|
362
|
+
// (e.g. output truncated before the closing tag).
|
|
363
|
+
const marker = TITLE_MARKER_RE.exec(textTitle);
|
|
364
|
+
if (marker) return marker[1].trim();
|
|
365
|
+
return textTitle.replace(/<\/?title>/gi, "").trim();
|
|
303
366
|
}
|
|
304
367
|
|
|
305
368
|
/**
|
package/src/utils/tool-choice.ts
CHANGED
|
@@ -31,3 +31,19 @@ export function buildNamedToolChoice(toolName: string, model?: Model<Api>): Tool
|
|
|
31
31
|
|
|
32
32
|
return undefined;
|
|
33
33
|
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Whether the given tool choice can be satisfied by the active tool set for the
|
|
37
|
+
* upcoming turn. Non-named choices (`"none"`, `"required"`, etc.) do not name a
|
|
38
|
+
* specific tool and are therefore always active.
|
|
39
|
+
*/
|
|
40
|
+
export function isToolChoiceActive(toolChoice: ToolChoice | undefined, tools: readonly { name: string }[]): boolean {
|
|
41
|
+
if (!toolChoice || typeof toolChoice === "string") return true;
|
|
42
|
+
const name =
|
|
43
|
+
toolChoice.type === "tool"
|
|
44
|
+
? toolChoice.name
|
|
45
|
+
: "function" in toolChoice
|
|
46
|
+
? toolChoice.function.name
|
|
47
|
+
: toolChoice.name;
|
|
48
|
+
return tools.some(tool => tool.name === name);
|
|
49
|
+
}
|
|
@@ -16,6 +16,16 @@ interface ToolConfig {
|
|
|
16
16
|
getAssetName: (version: string, plat: string, architecture: string) => string | null;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
// ffmpeg static-binary asset names (eugeneware/ffmpeg-static direct binaries).
|
|
20
|
+
// Maps node arch (arm64|x64) only; everything else is unsupported.
|
|
21
|
+
export function ffmpegAssetName(_version: string, plat: string, architecture: string): string | null {
|
|
22
|
+
if (architecture !== "arm64" && architecture !== "x64") return null;
|
|
23
|
+
if (plat === "darwin") return `ffmpeg-darwin-${architecture}`;
|
|
24
|
+
if (plat === "linux") return `ffmpeg-linux-${architecture}`;
|
|
25
|
+
if (plat === "win32") return architecture === "x64" ? "ffmpeg-win32-x64" : null;
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
|
|
19
29
|
const TOOLS: Record<string, ToolConfig> = {
|
|
20
30
|
sd: {
|
|
21
31
|
name: "sd",
|
|
@@ -72,6 +82,14 @@ const TOOLS: Record<string, ToolConfig> = {
|
|
|
72
82
|
return null;
|
|
73
83
|
},
|
|
74
84
|
},
|
|
85
|
+
ffmpeg: {
|
|
86
|
+
name: "ffmpeg",
|
|
87
|
+
repo: "eugeneware/ffmpeg-static",
|
|
88
|
+
binaryName: "ffmpeg",
|
|
89
|
+
tagPrefix: "",
|
|
90
|
+
isDirectBinary: true,
|
|
91
|
+
getAssetName: ffmpegAssetName,
|
|
92
|
+
},
|
|
75
93
|
};
|
|
76
94
|
|
|
77
95
|
// CLI packages installed via uv/pip
|
|
@@ -89,7 +107,7 @@ const PYTHON_TOOLS: Record<string, PythonPackageToolConfig> = {
|
|
|
89
107
|
},
|
|
90
108
|
};
|
|
91
109
|
|
|
92
|
-
export type ToolName = "sd" | "sg" | "yt-dlp" | "trafilatura";
|
|
110
|
+
export type ToolName = "sd" | "sg" | "yt-dlp" | "trafilatura" | "ffmpeg";
|
|
93
111
|
|
|
94
112
|
// Get the path to a tool (system-wide or in our tools dir)
|
|
95
113
|
export function getToolPath(tool: ToolName): string | null {
|
package/src/web/kagi.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* through the shared {@link AuthStorage} broker (Bearer token), and responses
|
|
7
7
|
* are categorized result buckets rather than the legacy flat object array.
|
|
8
8
|
*/
|
|
9
|
-
import type
|
|
9
|
+
import { type AuthStorage, type FetchImpl, withAuth } from "@prometheus-ai/ai";
|
|
10
10
|
import { withHardTimeout } from "./search/providers/utils";
|
|
11
11
|
|
|
12
12
|
const KAGI_SEARCH_URL = "https://kagi.com/api/v1/search";
|
|
@@ -156,6 +156,7 @@ export interface KagiSearchOptions {
|
|
|
156
156
|
recency?: "day" | "week" | "month" | "year";
|
|
157
157
|
sessionId?: string;
|
|
158
158
|
signal?: AbortSignal;
|
|
159
|
+
fetch?: FetchImpl;
|
|
159
160
|
}
|
|
160
161
|
|
|
161
162
|
export interface KagiSearchSource {
|
|
@@ -172,14 +173,6 @@ export interface KagiSearchResult {
|
|
|
172
173
|
answer?: string;
|
|
173
174
|
}
|
|
174
175
|
|
|
175
|
-
export async function findKagiApiKey(
|
|
176
|
-
authStorage: AuthStorage,
|
|
177
|
-
sessionId?: string,
|
|
178
|
-
signal?: AbortSignal,
|
|
179
|
-
): Promise<string | null> {
|
|
180
|
-
return (await authStorage.getApiKey("kagi", sessionId, { signal })) ?? null;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
176
|
/**
|
|
184
177
|
* Compute a YYYY-MM-DD date string `recency` units before now, in UTC.
|
|
185
178
|
* UTC keeps the recency window deterministic regardless of host timezone and
|
|
@@ -246,25 +239,34 @@ export async function searchWithKagi(
|
|
|
246
239
|
options: KagiSearchOptions = {},
|
|
247
240
|
authStorage: AuthStorage,
|
|
248
241
|
): Promise<KagiSearchResult> {
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
242
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
243
|
+
const body = JSON.stringify(buildRequestBody(query, options));
|
|
244
|
+
|
|
245
|
+
const response = await withAuth(
|
|
246
|
+
authStorage.resolver("kagi", { sessionId: options.sessionId }),
|
|
247
|
+
async apiKey => {
|
|
248
|
+
const res = await fetchImpl(KAGI_SEARCH_URL, {
|
|
249
|
+
method: "POST",
|
|
250
|
+
headers: {
|
|
251
|
+
Authorization: `Bearer ${apiKey}`,
|
|
252
|
+
"Content-Type": "application/json",
|
|
253
|
+
Accept: "application/json",
|
|
254
|
+
},
|
|
255
|
+
body,
|
|
256
|
+
signal: withHardTimeout(options.signal),
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
if (!res.ok) {
|
|
260
|
+
throw parseKagiErrorResponse(res.status, await res.text());
|
|
261
|
+
}
|
|
253
262
|
|
|
254
|
-
|
|
255
|
-
method: "POST",
|
|
256
|
-
headers: {
|
|
257
|
-
Authorization: `Bearer ${apiKey}`,
|
|
258
|
-
"Content-Type": "application/json",
|
|
259
|
-
Accept: "application/json",
|
|
263
|
+
return res;
|
|
260
264
|
},
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
throw parseKagiErrorResponse(response.status, await response.text());
|
|
267
|
-
}
|
|
265
|
+
{
|
|
266
|
+
signal: options.signal,
|
|
267
|
+
missingKeyMessage: "Kagi credentials not found. Set KAGI_API_KEY or login with 'prometheus /login kagi'.",
|
|
268
|
+
},
|
|
269
|
+
);
|
|
268
270
|
|
|
269
271
|
const payload = (await response.json()) as KagiSearchResponse;
|
|
270
272
|
if (payload.error && payload.error.length > 0) {
|
package/src/web/parallel.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getEnvApiKey } from "@prometheus-ai/ai";
|
|
1
|
+
import { type FetchImpl, getEnvApiKey } from "@prometheus-ai/ai";
|
|
2
2
|
import type { AgentStorage } from "../session/agent-storage";
|
|
3
3
|
import { findCredential, withHardTimeout } from "./search/providers/utils";
|
|
4
4
|
|
|
@@ -54,6 +54,7 @@ export interface ParallelSearchOptions {
|
|
|
54
54
|
mode?: "fast" | "research";
|
|
55
55
|
maxCharsPerResult?: number;
|
|
56
56
|
signal?: AbortSignal;
|
|
57
|
+
fetch?: FetchImpl;
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
export interface ParallelExtractOptions {
|
|
@@ -62,6 +63,7 @@ export interface ParallelExtractOptions {
|
|
|
62
63
|
excerpts?: boolean;
|
|
63
64
|
fullContent?: boolean;
|
|
64
65
|
signal?: AbortSignal;
|
|
66
|
+
fetch?: FetchImpl;
|
|
65
67
|
}
|
|
66
68
|
|
|
67
69
|
export class ParallelApiError extends Error {
|
|
@@ -295,7 +297,8 @@ export async function searchWithParallel(
|
|
|
295
297
|
);
|
|
296
298
|
}
|
|
297
299
|
|
|
298
|
-
const
|
|
300
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
301
|
+
const response = await fetchImpl(PARALLEL_SEARCH_URL, {
|
|
299
302
|
method: "POST",
|
|
300
303
|
headers: getAuthHeaders(apiKey),
|
|
301
304
|
body: JSON.stringify({
|
|
@@ -328,7 +331,8 @@ export async function extractWithParallel(
|
|
|
328
331
|
);
|
|
329
332
|
}
|
|
330
333
|
|
|
331
|
-
const
|
|
334
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
335
|
+
const response = await fetchImpl(PARALLEL_EXTRACT_URL, {
|
|
332
336
|
method: "POST",
|
|
333
337
|
headers: getAuthHeaders(apiKey),
|
|
334
338
|
body: JSON.stringify({
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { parseHTML } from "linkedom";
|
|
2
1
|
import type { RenderResult, SpecialHandler } from "./types";
|
|
3
2
|
import { buildResult, loadPage } from "./types";
|
|
4
3
|
import { convertWithMarkit, fetchBinary } from "./utils";
|
|
@@ -31,6 +30,7 @@ export const handleArxiv: SpecialHandler = async (
|
|
|
31
30
|
if (!result.ok) return null;
|
|
32
31
|
|
|
33
32
|
// Parse the Atom feed response
|
|
33
|
+
const { parseHTML } = await import("linkedom");
|
|
34
34
|
const doc = parseHTML(result.content).document;
|
|
35
35
|
const entry = doc.querySelector("entry");
|
|
36
36
|
|