@oh-my-pi/pi-coding-agent 15.10.10 → 15.10.12
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 +142 -7
- package/dist/cli.js +23108 -0
- package/dist/tokenizers.linux-x64-gnu-xcjh3jwk.node +0 -0
- package/dist/types/async/job-manager.d.ts +18 -0
- package/dist/types/cli/args.d.ts +2 -1
- package/dist/types/cli/dry-balance-cli.d.ts +1 -1
- package/dist/types/cli/gallery-cli.d.ts +1 -1
- package/dist/types/cli/gallery-fixtures/types.d.ts +1 -1
- package/dist/types/cli/usage-cli.d.ts +72 -0
- package/dist/types/cli-commands.d.ts +12 -0
- package/dist/types/commands/launch.d.ts +5 -1
- package/dist/types/commands/read.d.ts +1 -1
- package/dist/types/commands/usage.d.ts +25 -0
- package/dist/types/config/api-key-resolver.d.ts +3 -0
- package/dist/types/config/append-only-context-mode.d.ts +2 -1
- package/dist/types/config/model-discovery.d.ts +55 -0
- package/dist/types/config/model-registry.d.ts +8 -219
- package/dist/types/config/model-resolver.d.ts +34 -10
- package/dist/types/config/model-roles.d.ts +28 -0
- package/dist/types/config/models-config-schema.d.ts +523 -42
- package/dist/types/config/models-config.d.ts +385 -0
- package/dist/types/config/settings-schema.d.ts +41 -8
- package/dist/types/config/settings.d.ts +8 -1
- package/dist/types/debug/log-viewer.d.ts +1 -1
- package/dist/types/debug/raw-sse.d.ts +1 -1
- package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
- package/dist/types/eval/backend.d.ts +0 -2
- package/dist/types/eval/idle-timeout.d.ts +0 -4
- package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
- package/dist/types/eval/py/executor.d.ts +5 -0
- package/dist/types/eval/py/kernel.d.ts +6 -1
- package/dist/types/eval/py/runtime.d.ts +9 -0
- package/dist/types/exec/bash-executor.d.ts +2 -0
- package/dist/types/export/html/template.generated.d.ts +1 -1
- package/dist/types/extensibility/extensions/runner.d.ts +3 -2
- package/dist/types/extensibility/extensions/types.d.ts +6 -3
- package/dist/types/hindsight/mental-models.d.ts +17 -8
- package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
- package/dist/types/internal-urls/types.d.ts +1 -1
- package/dist/types/lsp/edits.d.ts +9 -0
- package/dist/types/lsp/index.d.ts +2 -2
- package/dist/types/lsp/types.d.ts +2 -0
- package/dist/types/lsp/utils.d.ts +3 -0
- package/dist/types/mcp/json-rpc.d.ts +5 -0
- package/dist/types/memory-backend/index.d.ts +1 -0
- package/dist/types/memory-backend/runtime.d.ts +4 -0
- package/dist/types/memory-backend/types.d.ts +66 -1
- package/dist/types/mnemopi/state.d.ts +11 -1
- package/dist/types/modes/components/agent-dashboard.d.ts +1 -1
- package/dist/types/modes/components/assistant-message.d.ts +3 -1
- package/dist/types/modes/components/bash-execution.d.ts +1 -1
- package/dist/types/modes/components/copy-selector.d.ts +1 -1
- 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 +1 -1
- package/dist/types/modes/components/model-selector.d.ts +1 -1
- package/dist/types/modes/components/plan-review-overlay.d.ts +1 -1
- package/dist/types/modes/components/session-observer-overlay.d.ts +1 -1
- package/dist/types/modes/components/session-selector.d.ts +1 -1
- package/dist/types/modes/components/status-line/component.d.ts +1 -1
- package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
- package/dist/types/modes/components/transcript-container.d.ts +25 -6
- package/dist/types/modes/components/tree-selector.d.ts +1 -1
- 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 +19 -3
- package/dist/types/modes/controllers/mcp-command-controller.d.ts +1 -1
- package/dist/types/modes/controllers/streaming-reveal.d.ts +1 -1
- package/dist/types/modes/index.d.ts +3 -3
- package/dist/types/modes/interactive-mode.d.ts +8 -3
- package/dist/types/modes/oauth-manual-input.d.ts +7 -0
- package/dist/types/modes/rpc/rpc-client.d.ts +39 -2
- package/dist/types/modes/rpc/rpc-mode.d.ts +31 -2
- package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
- package/dist/types/modes/rpc/rpc-types.d.ts +75 -1
- package/dist/types/modes/setup-wizard/index.d.ts +5 -1
- package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
- package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +1 -1
- package/dist/types/modes/setup-wizard/scenes/types.d.ts +1 -1
- package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +1 -1
- package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
- package/dist/types/modes/types.d.ts +4 -1
- package/dist/types/secrets/index.d.ts +1 -1
- package/dist/types/secrets/obfuscator.d.ts +8 -2
- package/dist/types/session/agent-session.d.ts +15 -3
- package/dist/types/session/auth-broker-config.d.ts +4 -0
- package/dist/types/session/session-manager.d.ts +1 -1
- package/dist/types/session/streaming-output.d.ts +23 -0
- package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
- package/dist/types/slash-commands/builtin-registry.d.ts +1 -0
- package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
- package/dist/types/slash-commands/types.d.ts +1 -1
- package/dist/types/ssh/connection-manager.d.ts +8 -0
- package/dist/types/system-prompt.d.ts +2 -0
- package/dist/types/task/executor.d.ts +1 -0
- package/dist/types/task/index.d.ts +2 -2
- package/dist/types/task/parallel.d.ts +2 -2
- package/dist/types/task/types.d.ts +8 -0
- package/dist/types/task/worktree.d.ts +2 -0
- package/dist/types/thinking.d.ts +4 -0
- package/dist/types/tiny/title-client.d.ts +11 -0
- package/dist/types/tiny/title-protocol.d.ts +1 -0
- package/dist/types/tools/ask.d.ts +4 -0
- package/dist/types/tools/conflict-detect.d.ts +16 -0
- package/dist/types/tools/github-cache.d.ts +7 -0
- package/dist/types/tools/index.d.ts +6 -0
- package/dist/types/tools/sqlite-reader.d.ts +3 -0
- package/dist/types/tui/output-block.d.ts +3 -3
- package/dist/types/utils/changelog.d.ts +8 -0
- package/dist/types/utils/git.d.ts +15 -2
- package/dist/types/utils/title-generator.d.ts +3 -2
- 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/providers/codex.d.ts +1 -1
- package/dist/types/web/search/providers/gemini.d.ts +1 -1
- package/examples/extensions/tools.ts +5 -4
- package/package.json +14 -11
- package/scripts/build-binary.ts +18 -23
- package/scripts/bundle-dist.ts +81 -0
- package/scripts/{dev-launch → omp} +1 -1
- package/scripts/{dev-launch-preload.ts → omp.ts} +1 -1
- package/src/async/job-manager.ts +57 -3
- package/src/auto-thinking/classifier.ts +1 -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/capability/fs.ts +10 -0
- package/src/cli/args.ts +4 -1
- package/src/cli/auth-gateway-cli.ts +1 -3
- package/src/cli/dry-balance-cli.ts +1 -1
- package/src/cli/gallery-cli.ts +1 -1
- package/src/cli/gallery-fixtures/fs.ts +1 -1
- package/src/cli/gallery-fixtures/types.ts +5 -1
- package/src/cli/list-models.ts +2 -1
- package/src/cli/usage-cli.ts +603 -0
- package/src/cli-commands.ts +30 -0
- package/src/cli.ts +76 -13
- package/src/commands/complete.ts +1 -1
- package/src/commands/launch.ts +5 -1
- package/src/commands/read.ts +6 -3
- package/src/commands/usage.ts +35 -0
- package/src/commit/agentic/agent.ts +1 -1
- package/src/commit/model-selection.ts +4 -3
- package/src/config/api-key-resolver.ts +8 -6
- package/src/config/append-only-context-mode.ts +6 -12
- package/src/config/model-discovery.ts +554 -0
- package/src/config/model-registry.ts +320 -1041
- package/src/config/model-resolver.ts +173 -156
- package/src/config/model-roles.ts +74 -0
- package/src/config/models-config-schema.ts +57 -8
- package/src/config/models-config.ts +129 -0
- package/src/config/settings-schema.ts +61 -19
- package/src/config/settings.ts +98 -4
- package/src/dap/client.ts +124 -37
- package/src/dap/session.ts +259 -158
- package/src/debug/log-viewer.ts +1 -1
- package/src/debug/raw-sse.ts +1 -1
- package/src/edit/diff.ts +47 -3
- package/src/edit/hashline/block-resolver.ts +20 -1
- package/src/edit/hashline/diff.ts +36 -1
- package/src/edit/hashline/execute.ts +47 -4
- package/src/edit/hashline/noop-loop-guard.ts +99 -0
- package/src/edit/index.ts +16 -1
- package/src/edit/modes/patch.ts +52 -0
- package/src/edit/modes/replace.ts +56 -22
- package/src/edit/notebook.ts +22 -2
- package/src/edit/renderer.ts +36 -10
- package/src/eval/__tests__/completion-bridge.test.ts +1 -1
- package/src/eval/backend.ts +0 -2
- package/src/eval/completion-bridge.ts +3 -1
- package/src/eval/idle-timeout.ts +2 -9
- package/src/eval/js/context-manager.ts +6 -8
- package/src/eval/js/executor.ts +6 -2
- package/src/eval/js/index.ts +0 -2
- package/src/eval/js/shared/helpers.ts +5 -6
- package/src/eval/js/shared/local-module-loader.ts +1 -1
- package/src/eval/js/shared/prelude.txt +62 -1
- package/src/eval/js/shared/rewrite-imports.ts +40 -22
- package/src/eval/js/shared/runtime.ts +1 -1
- package/src/eval/py/executor.ts +29 -7
- package/src/eval/py/index.ts +6 -3
- package/src/eval/py/kernel.ts +43 -4
- package/src/eval/py/runner.py +107 -3
- package/src/eval/py/runtime.ts +37 -0
- package/src/exec/bash-executor.ts +85 -4
- package/src/export/html/template.generated.ts +1 -1
- package/src/export/html/template.js +3 -1
- package/src/extensibility/extensions/get-commands-handler.ts +2 -1
- package/src/extensibility/extensions/runner.ts +6 -1
- package/src/extensibility/extensions/types.ts +6 -2
- package/src/extensibility/plugins/legacy-pi-compat.ts +20 -3
- package/src/hindsight/bank.ts +17 -2
- package/src/hindsight/mental-models.ts +59 -12
- package/src/hindsight/state.ts +6 -1
- package/src/internal-urls/artifact-protocol.ts +11 -2
- package/src/internal-urls/docs-index.generated.ts +11 -11
- package/src/internal-urls/issue-pr-protocol.ts +12 -5
- package/src/internal-urls/router.ts +1 -1
- package/src/internal-urls/types.ts +1 -1
- package/src/lib/xai-http.ts +1 -1
- package/src/lsp/client.ts +118 -38
- package/src/lsp/clients/biome-client.ts +101 -39
- package/src/lsp/edits.ts +143 -95
- package/src/lsp/index.ts +31 -22
- package/src/lsp/render.ts +1 -1
- package/src/lsp/types.ts +2 -0
- package/src/lsp/utils.ts +28 -10
- package/src/main.ts +183 -23
- package/src/mcp/json-rpc.ts +35 -5
- package/src/mcp/transports/stdio.ts +7 -1
- package/src/memories/index.ts +4 -1
- package/src/memory-backend/index.ts +1 -0
- package/src/memory-backend/local-backend.ts +9 -0
- package/src/memory-backend/off-backend.ts +9 -0
- package/src/memory-backend/runtime.ts +66 -0
- package/src/memory-backend/types.ts +81 -1
- package/src/mnemopi/backend.ts +176 -7
- package/src/mnemopi/state.ts +38 -2
- package/src/modes/acp/acp-agent.ts +119 -11
- package/src/modes/components/agent-dashboard.ts +10 -7
- package/src/modes/components/assistant-message.ts +32 -28
- package/src/modes/components/bash-execution.ts +1 -1
- package/src/modes/components/copy-selector.ts +1 -1
- package/src/modes/components/diff.ts +13 -2
- package/src/modes/components/dynamic-border.ts +12 -3
- 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 +1 -1
- 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-selector.ts +2 -2
- package/src/modes/components/model-selector.ts +4 -2
- package/src/modes/components/plan-review-overlay.ts +1 -1
- package/src/modes/components/session-observer-overlay.ts +2 -2
- package/src/modes/components/session-selector.ts +1 -1
- package/src/modes/components/settings-selector.ts +5 -1
- package/src/modes/components/status-line/component.ts +119 -35
- package/src/modes/components/tiny-title-download-progress.ts +1 -1
- package/src/modes/components/transcript-container.ts +258 -53
- package/src/modes/components/tree-selector.ts +3 -3
- package/src/modes/components/user-message-selector.ts +1 -1
- package/src/modes/components/user-message.ts +17 -5
- package/src/modes/components/visual-truncate.ts +1 -1
- package/src/modes/components/welcome.ts +108 -26
- package/src/modes/controllers/command-controller.ts +11 -4
- package/src/modes/controllers/event-controller.ts +73 -4
- package/src/modes/controllers/input-controller.ts +2 -1
- package/src/modes/controllers/mcp-command-controller.ts +39 -4
- package/src/modes/controllers/selector-controller.ts +1 -1
- package/src/modes/controllers/streaming-reveal.ts +85 -18
- package/src/modes/index.ts +3 -21
- package/src/modes/interactive-mode.ts +42 -18
- package/src/modes/oauth-manual-input.ts +30 -3
- package/src/modes/rpc/rpc-client.ts +154 -3
- package/src/modes/rpc/rpc-mode.ts +97 -12
- package/src/modes/rpc/rpc-subagents.ts +265 -0
- package/src/modes/rpc/rpc-types.ts +81 -1
- package/src/modes/setup-wizard/index.ts +12 -2
- package/src/modes/setup-wizard/lazy.ts +16 -0
- package/src/modes/setup-wizard/scenes/glyph.ts +1 -1
- package/src/modes/setup-wizard/scenes/providers.ts +1 -1
- package/src/modes/setup-wizard/scenes/sign-in.ts +1 -1
- package/src/modes/setup-wizard/scenes/theme.ts +1 -1
- package/src/modes/setup-wizard/scenes/types.ts +1 -1
- package/src/modes/setup-wizard/scenes/web-search.ts +1 -1
- package/src/modes/setup-wizard/wizard-overlay.ts +1 -1
- package/src/modes/types.ts +4 -1
- package/src/prompts/agents/explore.md +2 -2
- package/src/prompts/agents/librarian.md +1 -2
- package/src/prompts/agents/oracle.md +1 -1
- package/src/prompts/agents/plan.md +5 -5
- package/src/prompts/agents/task.md +5 -5
- 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/memories/read-path.md +1 -1
- 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/background-tan-dispatch.md +1 -1
- 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-todo.md +2 -2
- package/src/prompts/system/irc-incoming.md +1 -1
- package/src/prompts/system/manual-continue.md +1 -1
- package/src/prompts/system/omfg-user.md +3 -4
- package/src/prompts/system/orchestrate-notice.md +9 -9
- package/src/prompts/system/plan-mode-active.md +4 -4
- 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/subagent-system-prompt.md +4 -4
- package/src/prompts/system/system-prompt.md +13 -24
- package/src/prompts/system/title-system.md +2 -2
- package/src/prompts/system/ttsr-tool-reminder.md +1 -1
- package/src/prompts/system/workflow-notice.md +1 -1
- package/src/prompts/tools/ast-edit.md +1 -1
- package/src/prompts/tools/ast-grep.md +2 -2
- package/src/prompts/tools/bash.md +5 -7
- package/src/prompts/tools/browser.md +7 -7
- package/src/prompts/tools/debug.md +1 -1
- package/src/prompts/tools/eval.md +3 -3
- 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 +15 -15
- package/src/prompts/tools/lsp.md +2 -2
- package/src/prompts/tools/patch.md +2 -2
- package/src/prompts/tools/read.md +3 -4
- 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.md +2 -3
- package/src/prompts/tools/todo.md +1 -1
- package/src/sdk.ts +31 -11
- package/src/secrets/index.ts +8 -1
- package/src/secrets/obfuscator.ts +39 -18
- package/src/session/agent-session.ts +223 -64
- package/src/session/auth-broker-config.ts +30 -1
- package/src/session/session-manager.ts +2 -2
- package/src/session/streaming-output.ts +188 -11
- package/src/slash-commands/acp-builtins.ts +24 -0
- package/src/slash-commands/builtin-registry.ts +40 -0
- package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
- package/src/slash-commands/types.ts +1 -1
- package/src/ssh/connection-manager.ts +27 -0
- package/src/system-prompt.ts +14 -0
- package/src/task/commands.ts +2 -1
- package/src/task/executor.ts +74 -65
- package/src/task/index.ts +146 -68
- package/src/task/parallel.ts +3 -3
- package/src/task/render.ts +20 -5
- package/src/task/types.ts +9 -0
- package/src/task/worktree.ts +64 -56
- package/src/thinking.ts +9 -1
- package/src/tiny/title-client.ts +60 -16
- package/src/tiny/title-protocol.ts +1 -1
- package/src/tiny/worker.ts +6 -4
- package/src/tools/archive-reader.ts +30 -2
- package/src/tools/ask.ts +104 -21
- package/src/tools/ast-edit.ts +25 -5
- package/src/tools/auto-generated-guard.ts +20 -3
- package/src/tools/bash-interactive.ts +27 -7
- package/src/tools/bash.ts +100 -18
- package/src/tools/browser/launch.ts +11 -2
- package/src/tools/browser/readable.ts +19 -2
- package/src/tools/browser/registry.ts +4 -1
- package/src/tools/browser/render.ts +2 -2
- package/src/tools/browser/tab-supervisor.ts +55 -16
- package/src/tools/conflict-detect.ts +50 -4
- package/src/tools/debug.ts +1 -1
- package/src/tools/eval-render.ts +5 -5
- package/src/tools/eval.ts +0 -2
- package/src/tools/fetch.ts +33 -10
- package/src/tools/gh-cache-invalidation.ts +63 -8
- package/src/tools/gh-renderer.ts +1 -1
- package/src/tools/gh.ts +172 -29
- package/src/tools/github-cache.ts +70 -6
- package/src/tools/image-gen.ts +14 -13
- package/src/tools/index.ts +13 -1
- package/src/tools/inspect-image.ts +1 -0
- package/src/tools/irc.ts +5 -1
- package/src/tools/job.ts +1 -1
- package/src/tools/read.ts +202 -61
- package/src/tools/render-utils.ts +3 -3
- package/src/tools/resolve.ts +1 -1
- package/src/tools/search.ts +92 -29
- package/src/tools/sqlite-reader.ts +17 -5
- package/src/tools/ssh.ts +8 -8
- package/src/tools/todo.ts +38 -8
- package/src/tools/write.ts +118 -18
- package/src/tui/output-block.ts +4 -4
- package/src/utils/changelog.ts +27 -1
- package/src/utils/commit-message-generator.ts +1 -0
- package/src/utils/file-mentions.ts +2 -1
- package/src/utils/git.ts +267 -13
- package/src/utils/title-generator.ts +24 -5
- package/src/web/scrapers/arxiv.ts +1 -1
- 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 +6 -1
- package/src/web/search/index.ts +1 -1
- package/src/web/search/providers/codex.ts +2 -1
- package/src/web/search/providers/gemini.ts +2 -3
- package/src/web/search/render.ts +8 -6
- package/dist/types/config/model-equivalence.d.ts +0 -24
- package/dist/types/config/model-id-affixes.d.ts +0 -12
- package/dist/types/config/model-provider-priority.d.ts +0 -1
- package/dist/types/exec/idle-timeout-watchdog.d.ts +0 -18
- package/src/config/model-equivalence.ts +0 -875
- package/src/config/model-id-affixes.ts +0 -81
- package/src/config/model-provider-priority.ts +0 -56
- package/src/exec/idle-timeout-watchdog.ts +0 -126
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* models.json config file handle and provider configuration validation.
|
|
3
|
+
*/
|
|
4
|
+
import type { Api, ModelSpec } from "@oh-my-pi/pi-ai/types";
|
|
5
|
+
import { ConfigFile } from "./config-file";
|
|
6
|
+
import { type ProviderAuthMode, type ProviderDiscovery } from "./models-config-schema";
|
|
7
|
+
export type ProviderValidationMode = "models-config" | "runtime-register";
|
|
8
|
+
export interface ProviderValidationModel {
|
|
9
|
+
id: string;
|
|
10
|
+
api?: Api;
|
|
11
|
+
contextWindow?: number;
|
|
12
|
+
maxTokens?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ProviderValidationConfig {
|
|
15
|
+
baseUrl?: string;
|
|
16
|
+
headers?: Record<string, string>;
|
|
17
|
+
apiKey?: string;
|
|
18
|
+
api?: Api;
|
|
19
|
+
auth?: ProviderAuthMode;
|
|
20
|
+
oauthConfigured?: boolean;
|
|
21
|
+
discovery?: ProviderDiscovery;
|
|
22
|
+
compat?: ModelSpec<Api>["compat"];
|
|
23
|
+
disableStrictTools?: boolean;
|
|
24
|
+
modelOverrides?: Record<string, unknown>;
|
|
25
|
+
models: ProviderValidationModel[];
|
|
26
|
+
}
|
|
27
|
+
export declare function validateProviderConfiguration(providerName: string, config: ProviderValidationConfig, mode: ProviderValidationMode): void;
|
|
28
|
+
export declare const ModelsConfigFile: ConfigFile<{
|
|
29
|
+
providers?: Record<string, {
|
|
30
|
+
baseUrl?: string | undefined;
|
|
31
|
+
apiKey?: string | undefined;
|
|
32
|
+
api?: "anthropic-messages" | "azure-openai-responses" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
|
|
33
|
+
headers?: Record<string, string> | undefined;
|
|
34
|
+
compat?: {
|
|
35
|
+
supportsStore?: boolean | undefined;
|
|
36
|
+
supportsDeveloperRole?: boolean | undefined;
|
|
37
|
+
supportsMultipleSystemMessages?: boolean | undefined;
|
|
38
|
+
supportsReasoningEffort?: boolean | undefined;
|
|
39
|
+
reasoningEffortMap?: {
|
|
40
|
+
minimal?: string | undefined;
|
|
41
|
+
low?: string | undefined;
|
|
42
|
+
medium?: string | undefined;
|
|
43
|
+
high?: string | undefined;
|
|
44
|
+
xhigh?: string | undefined;
|
|
45
|
+
} | undefined;
|
|
46
|
+
maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
|
|
47
|
+
supportsUsageInStreaming?: boolean | undefined;
|
|
48
|
+
requiresToolResultName?: boolean | undefined;
|
|
49
|
+
requiresMistralToolIds?: boolean | undefined;
|
|
50
|
+
requiresAssistantAfterToolResult?: boolean | undefined;
|
|
51
|
+
requiresThinkingAsText?: boolean | undefined;
|
|
52
|
+
reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
|
|
53
|
+
requiresReasoningContentForToolCalls?: boolean | undefined;
|
|
54
|
+
allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
|
|
55
|
+
requiresAssistantContentForToolCalls?: boolean | undefined;
|
|
56
|
+
supportsToolChoice?: boolean | undefined;
|
|
57
|
+
disableReasoningOnForcedToolChoice?: boolean | undefined;
|
|
58
|
+
disableReasoningOnToolChoice?: boolean | undefined;
|
|
59
|
+
thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
|
|
60
|
+
openRouterRouting?: {
|
|
61
|
+
only?: string[] | undefined;
|
|
62
|
+
order?: string[] | undefined;
|
|
63
|
+
} | undefined;
|
|
64
|
+
vercelGatewayRouting?: {
|
|
65
|
+
only?: string[] | undefined;
|
|
66
|
+
order?: string[] | undefined;
|
|
67
|
+
} | undefined;
|
|
68
|
+
extraBody?: Record<string, unknown> | undefined;
|
|
69
|
+
cacheControlFormat?: "anthropic" | undefined;
|
|
70
|
+
supportsStrictMode?: boolean | undefined;
|
|
71
|
+
toolStrictMode?: "all_strict" | "none" | undefined;
|
|
72
|
+
streamIdleTimeoutMs?: number | undefined;
|
|
73
|
+
supportsLongPromptCacheRetention?: boolean | undefined;
|
|
74
|
+
supportsReasoningParams?: boolean | undefined;
|
|
75
|
+
alwaysSendMaxTokens?: boolean | undefined;
|
|
76
|
+
strictResponsesPairing?: boolean | undefined;
|
|
77
|
+
requiresToolResultId?: boolean | undefined;
|
|
78
|
+
replayUnsignedThinking?: boolean | undefined;
|
|
79
|
+
whenThinking?: {
|
|
80
|
+
supportsStore?: boolean | undefined;
|
|
81
|
+
supportsDeveloperRole?: boolean | undefined;
|
|
82
|
+
supportsMultipleSystemMessages?: boolean | undefined;
|
|
83
|
+
supportsReasoningEffort?: boolean | undefined;
|
|
84
|
+
reasoningEffortMap?: {
|
|
85
|
+
minimal?: string | undefined;
|
|
86
|
+
low?: string | undefined;
|
|
87
|
+
medium?: string | undefined;
|
|
88
|
+
high?: string | undefined;
|
|
89
|
+
xhigh?: string | undefined;
|
|
90
|
+
} | undefined;
|
|
91
|
+
maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
|
|
92
|
+
supportsUsageInStreaming?: boolean | undefined;
|
|
93
|
+
requiresToolResultName?: boolean | undefined;
|
|
94
|
+
requiresMistralToolIds?: boolean | undefined;
|
|
95
|
+
requiresAssistantAfterToolResult?: boolean | undefined;
|
|
96
|
+
requiresThinkingAsText?: boolean | undefined;
|
|
97
|
+
reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
|
|
98
|
+
requiresReasoningContentForToolCalls?: boolean | undefined;
|
|
99
|
+
allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
|
|
100
|
+
requiresAssistantContentForToolCalls?: boolean | undefined;
|
|
101
|
+
supportsToolChoice?: boolean | undefined;
|
|
102
|
+
disableReasoningOnForcedToolChoice?: boolean | undefined;
|
|
103
|
+
disableReasoningOnToolChoice?: boolean | undefined;
|
|
104
|
+
thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
|
|
105
|
+
openRouterRouting?: {
|
|
106
|
+
only?: string[] | undefined;
|
|
107
|
+
order?: string[] | undefined;
|
|
108
|
+
} | undefined;
|
|
109
|
+
vercelGatewayRouting?: {
|
|
110
|
+
only?: string[] | undefined;
|
|
111
|
+
order?: string[] | undefined;
|
|
112
|
+
} | undefined;
|
|
113
|
+
extraBody?: Record<string, unknown> | undefined;
|
|
114
|
+
cacheControlFormat?: "anthropic" | undefined;
|
|
115
|
+
supportsStrictMode?: boolean | undefined;
|
|
116
|
+
toolStrictMode?: "all_strict" | "none" | undefined;
|
|
117
|
+
streamIdleTimeoutMs?: number | undefined;
|
|
118
|
+
supportsLongPromptCacheRetention?: boolean | undefined;
|
|
119
|
+
supportsReasoningParams?: boolean | undefined;
|
|
120
|
+
alwaysSendMaxTokens?: boolean | undefined;
|
|
121
|
+
strictResponsesPairing?: boolean | undefined;
|
|
122
|
+
requiresToolResultId?: boolean | undefined;
|
|
123
|
+
replayUnsignedThinking?: boolean | undefined;
|
|
124
|
+
} | undefined;
|
|
125
|
+
} | undefined;
|
|
126
|
+
authHeader?: boolean | undefined;
|
|
127
|
+
auth?: "apiKey" | "none" | "oauth" | undefined;
|
|
128
|
+
discovery?: {
|
|
129
|
+
type: "llama.cpp" | "lm-studio" | "ollama" | "openai-models-list" | "proxy";
|
|
130
|
+
} | undefined;
|
|
131
|
+
models?: {
|
|
132
|
+
id: string;
|
|
133
|
+
name?: string | undefined;
|
|
134
|
+
api?: "anthropic-messages" | "azure-openai-responses" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
|
|
135
|
+
baseUrl?: string | undefined;
|
|
136
|
+
reasoning?: boolean | undefined;
|
|
137
|
+
thinking?: {
|
|
138
|
+
mode: "anthropic-adaptive" | "anthropic-budget-effort" | "budget" | "effort" | "google-level";
|
|
139
|
+
efforts: ("high" | "low" | "medium" | "minimal" | "xhigh")[];
|
|
140
|
+
defaultLevel?: "high" | "low" | "medium" | "minimal" | "xhigh" | undefined;
|
|
141
|
+
effortMap?: {
|
|
142
|
+
minimal?: string | undefined;
|
|
143
|
+
low?: string | undefined;
|
|
144
|
+
medium?: string | undefined;
|
|
145
|
+
high?: string | undefined;
|
|
146
|
+
xhigh?: string | undefined;
|
|
147
|
+
} | undefined;
|
|
148
|
+
supportsDisplay?: boolean | undefined;
|
|
149
|
+
} | undefined;
|
|
150
|
+
input?: ("image" | "text")[] | undefined;
|
|
151
|
+
cost?: {
|
|
152
|
+
input: number;
|
|
153
|
+
output: number;
|
|
154
|
+
cacheRead: number;
|
|
155
|
+
cacheWrite: number;
|
|
156
|
+
} | undefined;
|
|
157
|
+
premiumMultiplier?: number | undefined;
|
|
158
|
+
contextWindow?: number | undefined;
|
|
159
|
+
maxTokens?: number | undefined;
|
|
160
|
+
omitMaxOutputTokens?: boolean | undefined;
|
|
161
|
+
headers?: Record<string, string> | undefined;
|
|
162
|
+
compat?: {
|
|
163
|
+
supportsStore?: boolean | undefined;
|
|
164
|
+
supportsDeveloperRole?: boolean | undefined;
|
|
165
|
+
supportsMultipleSystemMessages?: boolean | undefined;
|
|
166
|
+
supportsReasoningEffort?: boolean | undefined;
|
|
167
|
+
reasoningEffortMap?: {
|
|
168
|
+
minimal?: string | undefined;
|
|
169
|
+
low?: string | undefined;
|
|
170
|
+
medium?: string | undefined;
|
|
171
|
+
high?: string | undefined;
|
|
172
|
+
xhigh?: string | undefined;
|
|
173
|
+
} | undefined;
|
|
174
|
+
maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
|
|
175
|
+
supportsUsageInStreaming?: boolean | undefined;
|
|
176
|
+
requiresToolResultName?: boolean | undefined;
|
|
177
|
+
requiresMistralToolIds?: boolean | undefined;
|
|
178
|
+
requiresAssistantAfterToolResult?: boolean | undefined;
|
|
179
|
+
requiresThinkingAsText?: boolean | undefined;
|
|
180
|
+
reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
|
|
181
|
+
requiresReasoningContentForToolCalls?: boolean | undefined;
|
|
182
|
+
allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
|
|
183
|
+
requiresAssistantContentForToolCalls?: boolean | undefined;
|
|
184
|
+
supportsToolChoice?: boolean | undefined;
|
|
185
|
+
disableReasoningOnForcedToolChoice?: boolean | undefined;
|
|
186
|
+
disableReasoningOnToolChoice?: boolean | undefined;
|
|
187
|
+
thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
|
|
188
|
+
openRouterRouting?: {
|
|
189
|
+
only?: string[] | undefined;
|
|
190
|
+
order?: string[] | undefined;
|
|
191
|
+
} | undefined;
|
|
192
|
+
vercelGatewayRouting?: {
|
|
193
|
+
only?: string[] | undefined;
|
|
194
|
+
order?: string[] | undefined;
|
|
195
|
+
} | undefined;
|
|
196
|
+
extraBody?: Record<string, unknown> | undefined;
|
|
197
|
+
cacheControlFormat?: "anthropic" | undefined;
|
|
198
|
+
supportsStrictMode?: boolean | undefined;
|
|
199
|
+
toolStrictMode?: "all_strict" | "none" | undefined;
|
|
200
|
+
streamIdleTimeoutMs?: number | undefined;
|
|
201
|
+
supportsLongPromptCacheRetention?: boolean | undefined;
|
|
202
|
+
supportsReasoningParams?: boolean | undefined;
|
|
203
|
+
alwaysSendMaxTokens?: boolean | undefined;
|
|
204
|
+
strictResponsesPairing?: boolean | undefined;
|
|
205
|
+
requiresToolResultId?: boolean | undefined;
|
|
206
|
+
replayUnsignedThinking?: boolean | undefined;
|
|
207
|
+
whenThinking?: {
|
|
208
|
+
supportsStore?: boolean | undefined;
|
|
209
|
+
supportsDeveloperRole?: boolean | undefined;
|
|
210
|
+
supportsMultipleSystemMessages?: boolean | undefined;
|
|
211
|
+
supportsReasoningEffort?: boolean | undefined;
|
|
212
|
+
reasoningEffortMap?: {
|
|
213
|
+
minimal?: string | undefined;
|
|
214
|
+
low?: string | undefined;
|
|
215
|
+
medium?: string | undefined;
|
|
216
|
+
high?: string | undefined;
|
|
217
|
+
xhigh?: string | undefined;
|
|
218
|
+
} | undefined;
|
|
219
|
+
maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
|
|
220
|
+
supportsUsageInStreaming?: boolean | undefined;
|
|
221
|
+
requiresToolResultName?: boolean | undefined;
|
|
222
|
+
requiresMistralToolIds?: boolean | undefined;
|
|
223
|
+
requiresAssistantAfterToolResult?: boolean | undefined;
|
|
224
|
+
requiresThinkingAsText?: boolean | undefined;
|
|
225
|
+
reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
|
|
226
|
+
requiresReasoningContentForToolCalls?: boolean | undefined;
|
|
227
|
+
allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
|
|
228
|
+
requiresAssistantContentForToolCalls?: boolean | undefined;
|
|
229
|
+
supportsToolChoice?: boolean | undefined;
|
|
230
|
+
disableReasoningOnForcedToolChoice?: boolean | undefined;
|
|
231
|
+
disableReasoningOnToolChoice?: boolean | undefined;
|
|
232
|
+
thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
|
|
233
|
+
openRouterRouting?: {
|
|
234
|
+
only?: string[] | undefined;
|
|
235
|
+
order?: string[] | undefined;
|
|
236
|
+
} | undefined;
|
|
237
|
+
vercelGatewayRouting?: {
|
|
238
|
+
only?: string[] | undefined;
|
|
239
|
+
order?: string[] | undefined;
|
|
240
|
+
} | undefined;
|
|
241
|
+
extraBody?: Record<string, unknown> | undefined;
|
|
242
|
+
cacheControlFormat?: "anthropic" | undefined;
|
|
243
|
+
supportsStrictMode?: boolean | undefined;
|
|
244
|
+
toolStrictMode?: "all_strict" | "none" | undefined;
|
|
245
|
+
streamIdleTimeoutMs?: number | undefined;
|
|
246
|
+
supportsLongPromptCacheRetention?: boolean | undefined;
|
|
247
|
+
supportsReasoningParams?: boolean | undefined;
|
|
248
|
+
alwaysSendMaxTokens?: boolean | undefined;
|
|
249
|
+
strictResponsesPairing?: boolean | undefined;
|
|
250
|
+
requiresToolResultId?: boolean | undefined;
|
|
251
|
+
replayUnsignedThinking?: boolean | undefined;
|
|
252
|
+
} | undefined;
|
|
253
|
+
} | undefined;
|
|
254
|
+
contextPromotionTarget?: string | undefined;
|
|
255
|
+
}[] | undefined;
|
|
256
|
+
modelOverrides?: Record<string, {
|
|
257
|
+
name?: string | undefined;
|
|
258
|
+
reasoning?: boolean | undefined;
|
|
259
|
+
thinking?: {
|
|
260
|
+
mode: "anthropic-adaptive" | "anthropic-budget-effort" | "budget" | "effort" | "google-level";
|
|
261
|
+
efforts: ("high" | "low" | "medium" | "minimal" | "xhigh")[];
|
|
262
|
+
defaultLevel?: "high" | "low" | "medium" | "minimal" | "xhigh" | undefined;
|
|
263
|
+
effortMap?: {
|
|
264
|
+
minimal?: string | undefined;
|
|
265
|
+
low?: string | undefined;
|
|
266
|
+
medium?: string | undefined;
|
|
267
|
+
high?: string | undefined;
|
|
268
|
+
xhigh?: string | undefined;
|
|
269
|
+
} | undefined;
|
|
270
|
+
supportsDisplay?: boolean | undefined;
|
|
271
|
+
} | undefined;
|
|
272
|
+
input?: ("image" | "text")[] | undefined;
|
|
273
|
+
cost?: {
|
|
274
|
+
input?: number | undefined;
|
|
275
|
+
output?: number | undefined;
|
|
276
|
+
cacheRead?: number | undefined;
|
|
277
|
+
cacheWrite?: number | undefined;
|
|
278
|
+
} | undefined;
|
|
279
|
+
premiumMultiplier?: number | undefined;
|
|
280
|
+
contextWindow?: number | undefined;
|
|
281
|
+
maxTokens?: number | undefined;
|
|
282
|
+
omitMaxOutputTokens?: boolean | undefined;
|
|
283
|
+
headers?: Record<string, string> | undefined;
|
|
284
|
+
compat?: {
|
|
285
|
+
supportsStore?: boolean | undefined;
|
|
286
|
+
supportsDeveloperRole?: boolean | undefined;
|
|
287
|
+
supportsMultipleSystemMessages?: boolean | undefined;
|
|
288
|
+
supportsReasoningEffort?: boolean | undefined;
|
|
289
|
+
reasoningEffortMap?: {
|
|
290
|
+
minimal?: string | undefined;
|
|
291
|
+
low?: string | undefined;
|
|
292
|
+
medium?: string | undefined;
|
|
293
|
+
high?: string | undefined;
|
|
294
|
+
xhigh?: string | undefined;
|
|
295
|
+
} | undefined;
|
|
296
|
+
maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
|
|
297
|
+
supportsUsageInStreaming?: boolean | undefined;
|
|
298
|
+
requiresToolResultName?: boolean | undefined;
|
|
299
|
+
requiresMistralToolIds?: boolean | undefined;
|
|
300
|
+
requiresAssistantAfterToolResult?: boolean | undefined;
|
|
301
|
+
requiresThinkingAsText?: boolean | undefined;
|
|
302
|
+
reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
|
|
303
|
+
requiresReasoningContentForToolCalls?: boolean | undefined;
|
|
304
|
+
allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
|
|
305
|
+
requiresAssistantContentForToolCalls?: boolean | undefined;
|
|
306
|
+
supportsToolChoice?: boolean | undefined;
|
|
307
|
+
disableReasoningOnForcedToolChoice?: boolean | undefined;
|
|
308
|
+
disableReasoningOnToolChoice?: boolean | undefined;
|
|
309
|
+
thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
|
|
310
|
+
openRouterRouting?: {
|
|
311
|
+
only?: string[] | undefined;
|
|
312
|
+
order?: string[] | undefined;
|
|
313
|
+
} | undefined;
|
|
314
|
+
vercelGatewayRouting?: {
|
|
315
|
+
only?: string[] | undefined;
|
|
316
|
+
order?: string[] | undefined;
|
|
317
|
+
} | undefined;
|
|
318
|
+
extraBody?: Record<string, unknown> | undefined;
|
|
319
|
+
cacheControlFormat?: "anthropic" | undefined;
|
|
320
|
+
supportsStrictMode?: boolean | undefined;
|
|
321
|
+
toolStrictMode?: "all_strict" | "none" | undefined;
|
|
322
|
+
streamIdleTimeoutMs?: number | undefined;
|
|
323
|
+
supportsLongPromptCacheRetention?: boolean | undefined;
|
|
324
|
+
supportsReasoningParams?: boolean | undefined;
|
|
325
|
+
alwaysSendMaxTokens?: boolean | undefined;
|
|
326
|
+
strictResponsesPairing?: boolean | undefined;
|
|
327
|
+
requiresToolResultId?: boolean | undefined;
|
|
328
|
+
replayUnsignedThinking?: boolean | undefined;
|
|
329
|
+
whenThinking?: {
|
|
330
|
+
supportsStore?: boolean | undefined;
|
|
331
|
+
supportsDeveloperRole?: boolean | undefined;
|
|
332
|
+
supportsMultipleSystemMessages?: boolean | undefined;
|
|
333
|
+
supportsReasoningEffort?: boolean | undefined;
|
|
334
|
+
reasoningEffortMap?: {
|
|
335
|
+
minimal?: string | undefined;
|
|
336
|
+
low?: string | undefined;
|
|
337
|
+
medium?: string | undefined;
|
|
338
|
+
high?: string | undefined;
|
|
339
|
+
xhigh?: string | undefined;
|
|
340
|
+
} | undefined;
|
|
341
|
+
maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
|
|
342
|
+
supportsUsageInStreaming?: boolean | undefined;
|
|
343
|
+
requiresToolResultName?: boolean | undefined;
|
|
344
|
+
requiresMistralToolIds?: boolean | undefined;
|
|
345
|
+
requiresAssistantAfterToolResult?: boolean | undefined;
|
|
346
|
+
requiresThinkingAsText?: boolean | undefined;
|
|
347
|
+
reasoningContentField?: "reasoning" | "reasoning_content" | "reasoning_text" | undefined;
|
|
348
|
+
requiresReasoningContentForToolCalls?: boolean | undefined;
|
|
349
|
+
allowsSyntheticReasoningContentForToolCalls?: boolean | undefined;
|
|
350
|
+
requiresAssistantContentForToolCalls?: boolean | undefined;
|
|
351
|
+
supportsToolChoice?: boolean | undefined;
|
|
352
|
+
disableReasoningOnForcedToolChoice?: boolean | undefined;
|
|
353
|
+
disableReasoningOnToolChoice?: boolean | undefined;
|
|
354
|
+
thinkingFormat?: "openai" | "openrouter" | "qwen" | "qwen-chat-template" | "zai" | undefined;
|
|
355
|
+
openRouterRouting?: {
|
|
356
|
+
only?: string[] | undefined;
|
|
357
|
+
order?: string[] | undefined;
|
|
358
|
+
} | undefined;
|
|
359
|
+
vercelGatewayRouting?: {
|
|
360
|
+
only?: string[] | undefined;
|
|
361
|
+
order?: string[] | undefined;
|
|
362
|
+
} | undefined;
|
|
363
|
+
extraBody?: Record<string, unknown> | undefined;
|
|
364
|
+
cacheControlFormat?: "anthropic" | undefined;
|
|
365
|
+
supportsStrictMode?: boolean | undefined;
|
|
366
|
+
toolStrictMode?: "all_strict" | "none" | undefined;
|
|
367
|
+
streamIdleTimeoutMs?: number | undefined;
|
|
368
|
+
supportsLongPromptCacheRetention?: boolean | undefined;
|
|
369
|
+
supportsReasoningParams?: boolean | undefined;
|
|
370
|
+
alwaysSendMaxTokens?: boolean | undefined;
|
|
371
|
+
strictResponsesPairing?: boolean | undefined;
|
|
372
|
+
requiresToolResultId?: boolean | undefined;
|
|
373
|
+
replayUnsignedThinking?: boolean | undefined;
|
|
374
|
+
} | undefined;
|
|
375
|
+
} | undefined;
|
|
376
|
+
contextPromotionTarget?: string | undefined;
|
|
377
|
+
}> | undefined;
|
|
378
|
+
disableStrictTools?: boolean | undefined;
|
|
379
|
+
transport?: "pi-native" | undefined;
|
|
380
|
+
}> | undefined;
|
|
381
|
+
equivalence?: {
|
|
382
|
+
overrides?: Record<string, string> | undefined;
|
|
383
|
+
exclude?: string[] | undefined;
|
|
384
|
+
} | undefined;
|
|
385
|
+
}>;
|
|
@@ -62,7 +62,7 @@ export type AnyUiMetadata = UiBase & {
|
|
|
62
62
|
};
|
|
63
63
|
interface BooleanDef {
|
|
64
64
|
type: "boolean";
|
|
65
|
-
default: boolean;
|
|
65
|
+
default: boolean | undefined;
|
|
66
66
|
ui?: UiBoolean;
|
|
67
67
|
}
|
|
68
68
|
interface StringDef {
|
|
@@ -101,10 +101,6 @@ export interface ModelTagsSettings {
|
|
|
101
101
|
}
|
|
102
102
|
export declare const DEFAULT_BASH_INTERCEPTOR_RULES: BashInterceptorRule[];
|
|
103
103
|
export declare const SETTINGS_SCHEMA: {
|
|
104
|
-
readonly lastChangelogVersion: {
|
|
105
|
-
readonly type: "string";
|
|
106
|
-
readonly default: undefined;
|
|
107
|
-
};
|
|
108
104
|
readonly setupVersion: {
|
|
109
105
|
readonly type: "number";
|
|
110
106
|
readonly default: 0;
|
|
@@ -718,7 +714,7 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
718
714
|
};
|
|
719
715
|
readonly defaultThinkingLevel: {
|
|
720
716
|
readonly type: "enum";
|
|
721
|
-
readonly values: readonly [...import("@oh-my-pi/pi-
|
|
717
|
+
readonly values: readonly [...import("@oh-my-pi/pi-catalog").Effort[], "auto"];
|
|
722
718
|
readonly default: "high";
|
|
723
719
|
readonly ui: {
|
|
724
720
|
readonly tab: "model";
|
|
@@ -991,7 +987,7 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
991
987
|
};
|
|
992
988
|
readonly "retry.maxRetries": {
|
|
993
989
|
readonly type: "number";
|
|
994
|
-
readonly default:
|
|
990
|
+
readonly default: 10;
|
|
995
991
|
readonly ui: {
|
|
996
992
|
readonly tab: "model";
|
|
997
993
|
readonly label: "Retry Attempts";
|
|
@@ -1016,7 +1012,7 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
1016
1012
|
};
|
|
1017
1013
|
readonly "retry.baseDelayMs": {
|
|
1018
1014
|
readonly type: "number";
|
|
1019
|
-
readonly default:
|
|
1015
|
+
readonly default: 500;
|
|
1020
1016
|
};
|
|
1021
1017
|
readonly "retry.maxDelayMs": {
|
|
1022
1018
|
readonly type: "number";
|
|
@@ -2304,6 +2300,15 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
2304
2300
|
readonly description: "Enable the lsp tool for language server protocol";
|
|
2305
2301
|
};
|
|
2306
2302
|
};
|
|
2303
|
+
readonly "lsp.lazy": {
|
|
2304
|
+
readonly type: "boolean";
|
|
2305
|
+
readonly default: true;
|
|
2306
|
+
readonly ui: {
|
|
2307
|
+
readonly tab: "editing";
|
|
2308
|
+
readonly label: "Lazy LSP Startup";
|
|
2309
|
+
readonly description: "Start language servers on first use (lsp tool or editing a matching file type) instead of at session startup";
|
|
2310
|
+
};
|
|
2311
|
+
};
|
|
2307
2312
|
readonly "lsp.formatOnWrite": {
|
|
2308
2313
|
readonly type: "boolean";
|
|
2309
2314
|
readonly default: false;
|
|
@@ -2387,6 +2392,20 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
2387
2392
|
readonly type: "number";
|
|
2388
2393
|
readonly default: number;
|
|
2389
2394
|
};
|
|
2395
|
+
readonly "shellMinimizer.sourceOutlineLevel": {
|
|
2396
|
+
readonly type: "enum";
|
|
2397
|
+
readonly values: readonly ["default", "aggressive"];
|
|
2398
|
+
readonly default: "default";
|
|
2399
|
+
readonly ui: {
|
|
2400
|
+
readonly tab: "editing";
|
|
2401
|
+
readonly label: "Shell Minimizer Source Outline";
|
|
2402
|
+
readonly description: "Source outline mode for cat/read of source files: default or aggressive";
|
|
2403
|
+
};
|
|
2404
|
+
};
|
|
2405
|
+
readonly "shellMinimizer.legacyFilters": {
|
|
2406
|
+
readonly type: "boolean";
|
|
2407
|
+
readonly default: undefined;
|
|
2408
|
+
};
|
|
2390
2409
|
readonly "eval.py": {
|
|
2391
2410
|
readonly type: "boolean";
|
|
2392
2411
|
readonly default: true;
|
|
@@ -2415,6 +2434,15 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
2415
2434
|
readonly description: "Whether to keep IPython kernel alive across calls";
|
|
2416
2435
|
};
|
|
2417
2436
|
};
|
|
2437
|
+
readonly "python.interpreter": {
|
|
2438
|
+
readonly type: "string";
|
|
2439
|
+
readonly default: "";
|
|
2440
|
+
readonly ui: {
|
|
2441
|
+
readonly tab: "editing";
|
|
2442
|
+
readonly label: "Python Interpreter";
|
|
2443
|
+
readonly description: "Optional path to an exact Python executable. When set, automatic Python runtime discovery is skipped.";
|
|
2444
|
+
};
|
|
2445
|
+
};
|
|
2418
2446
|
readonly "tools.approval": {
|
|
2419
2447
|
readonly type: "record";
|
|
2420
2448
|
readonly default: {};
|
|
@@ -3891,6 +3919,9 @@ export type SettingPath = keyof Schema;
|
|
|
3891
3919
|
/** Infer the value type for a setting path */
|
|
3892
3920
|
export type SettingValue<P extends SettingPath> = Schema[P] extends {
|
|
3893
3921
|
type: "boolean";
|
|
3922
|
+
default: undefined;
|
|
3923
|
+
} ? boolean | undefined : Schema[P] extends {
|
|
3924
|
+
type: "boolean";
|
|
3894
3925
|
} ? boolean : Schema[P] extends {
|
|
3895
3926
|
type: "string";
|
|
3896
3927
|
} ? string | undefined : Schema[P] extends {
|
|
@@ -4046,6 +4077,8 @@ export interface ShellMinimizerSettings {
|
|
|
4046
4077
|
only: string[];
|
|
4047
4078
|
except: string[];
|
|
4048
4079
|
maxCaptureBytes: number;
|
|
4080
|
+
sourceOutlineLevel: "default" | "aggressive";
|
|
4081
|
+
legacyFilters: boolean | undefined;
|
|
4049
4082
|
}
|
|
4050
4083
|
/** Map group prefix -> typed settings interface */
|
|
4051
4084
|
export interface GroupTypeMap {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* const isolated = Settings.isolated({ "compaction.enabled": false });
|
|
12
12
|
*/
|
|
13
13
|
import { procmgr } from "@oh-my-pi/pi-utils";
|
|
14
|
-
import type { ModelRole } from "../config/model-
|
|
14
|
+
import type { ModelRole } from "../config/model-roles";
|
|
15
15
|
import { AgentStorage } from "../session/agent-storage";
|
|
16
16
|
import { type EditMode } from "../utils/edit-mode";
|
|
17
17
|
import { type BashInterceptorRule, type GroupPrefix, type GroupTypeMap, type SettingPath, type SettingValue } from "./settings-schema";
|
|
@@ -30,6 +30,8 @@ export interface SettingsOptions {
|
|
|
30
30
|
inMemory?: boolean;
|
|
31
31
|
/** Initial overrides */
|
|
32
32
|
overrides?: Partial<Record<SettingPath, unknown>>;
|
|
33
|
+
/** Extra config.yml-style overlays loaded after global/project settings */
|
|
34
|
+
configFiles?: string[];
|
|
33
35
|
}
|
|
34
36
|
export declare class Settings {
|
|
35
37
|
#private;
|
|
@@ -54,6 +56,11 @@ export declare class Settings {
|
|
|
54
56
|
* Returns the merged value from global + project + overrides, or the default.
|
|
55
57
|
*/
|
|
56
58
|
get<P extends SettingPath>(path: P): SettingValue<P>;
|
|
59
|
+
/**
|
|
60
|
+
* Whether `path` has an explicitly configured value (global config, project
|
|
61
|
+
* config, or runtime override) rather than falling back to the schema default.
|
|
62
|
+
*/
|
|
63
|
+
isConfigured(path: SettingPath): boolean;
|
|
57
64
|
/**
|
|
58
65
|
* Set a setting value (sync).
|
|
59
66
|
* Updates global settings and queues a background save.
|
|
@@ -63,6 +63,6 @@ export declare class DebugLogViewerComponent implements Component {
|
|
|
63
63
|
constructor(options: DebugLogViewerComponentOptions);
|
|
64
64
|
handleInput(keyData: string): void;
|
|
65
65
|
invalidate(): void;
|
|
66
|
-
render(width: number): string[];
|
|
66
|
+
render(width: number): readonly string[];
|
|
67
67
|
}
|
|
68
68
|
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-session guard against subagents looping on byte-identical no-op edits.
|
|
3
|
+
*
|
|
4
|
+
* A hashline patch can apply cleanly yet produce no change when the body rows
|
|
5
|
+
* are already byte-identical to the targeted lines. {@link executeHashlineSingle}
|
|
6
|
+
* surfaces a soft hint ("re-read the file before issuing another edit"), but in
|
|
7
|
+
* the wild some models ignore the hint and keep re-issuing the same bytes
|
|
8
|
+
* (issue #2081 captured 182 such repeats in 205 calls before the user aborted).
|
|
9
|
+
*
|
|
10
|
+
* This module tracks consecutive byte-identical no-op edits per canonical file
|
|
11
|
+
* path within a single session. Once the same payload no-ops {@link NOOP_HARD_LIMIT}
|
|
12
|
+
* times in a row the caller is expected to escalate from a soft text result to
|
|
13
|
+
* a thrown {@link ToolError} so the agent loop sees a tool *failure* — empirically
|
|
14
|
+
* far more effective at breaking the cycle than the soft hint alone.
|
|
15
|
+
*
|
|
16
|
+
* A successful (non-noop) commit for a path resets that path's counter; a
|
|
17
|
+
* different payload on the same path also resets it because the body hash
|
|
18
|
+
* changed, which is a sign of model progress and deserves another soft hint.
|
|
19
|
+
*/
|
|
20
|
+
interface NoopLoopEntry {
|
|
21
|
+
/** Hash of the most recent input that no-op'd on this canonical path. */
|
|
22
|
+
hash: string;
|
|
23
|
+
/** Consecutive no-op count for the same `hash` on this path. */
|
|
24
|
+
count: number;
|
|
25
|
+
}
|
|
26
|
+
/** Cross-session-safe state slot held on the `ToolSession`. */
|
|
27
|
+
export interface NoopLoopGuard {
|
|
28
|
+
entries: Map<string, NoopLoopEntry>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* After this many consecutive byte-identical no-op edits on the same path,
|
|
32
|
+
* {@link recordNoopEdit} returns `escalate: true`. Picked deliberately small
|
|
33
|
+
* so the soft hint still fires once or twice before we escalate — the model
|
|
34
|
+
* deserves a chance to recover, but a tight bound is what actually breaks
|
|
35
|
+
* loops in practice.
|
|
36
|
+
*/
|
|
37
|
+
export declare const NOOP_HARD_LIMIT = 3;
|
|
38
|
+
interface NoopLoopGuardOwner {
|
|
39
|
+
noopLoopGuard?: NoopLoopGuard;
|
|
40
|
+
}
|
|
41
|
+
/** Lazily create the per-session guard, mirroring `getFileSnapshotStore`. */
|
|
42
|
+
export declare function getNoopLoopGuard(session: NoopLoopGuardOwner): NoopLoopGuard;
|
|
43
|
+
/** Result of recording one no-op against the guard. */
|
|
44
|
+
export interface NoopRecordResult {
|
|
45
|
+
/** Consecutive identical no-op count, including the current one. */
|
|
46
|
+
count: number;
|
|
47
|
+
/** True once `count >= NOOP_HARD_LIMIT` and the caller MUST escalate. */
|
|
48
|
+
escalate: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Record a no-op edit for `canonicalPath` keyed by `inputHash` (a stable hash
|
|
52
|
+
* of the raw patch input bytes). Returns the running consecutive-no-op count
|
|
53
|
+
* and whether the caller should escalate from a soft text result to a thrown
|
|
54
|
+
* error.
|
|
55
|
+
*
|
|
56
|
+
* `inputHash` is intentionally derived from the raw model-authored bytes
|
|
57
|
+
* rather than from file content: when the model emits a different payload
|
|
58
|
+
* (even whitespace-only) that's progress and earns a fresh soft hint, but
|
|
59
|
+
* re-issuing the same bytes after being warned is what we want to break.
|
|
60
|
+
*/
|
|
61
|
+
export declare function recordNoopEdit(session: NoopLoopGuardOwner, canonicalPath: string, inputHash: string): NoopRecordResult;
|
|
62
|
+
/**
|
|
63
|
+
* Clear the no-op counter for `canonicalPath`. Call after a non-noop commit
|
|
64
|
+
* for the same path so a future no-op starts fresh from the soft hint.
|
|
65
|
+
*/
|
|
66
|
+
export declare function resetNoopEdit(session: NoopLoopGuardOwner, canonicalPath: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Stable hash of the raw patch input. Bun's `Bun.hash` is xxHash64 — fast,
|
|
69
|
+
* non-cryptographic, more than adequate for "is this the same payload?".
|
|
70
|
+
*/
|
|
71
|
+
export declare function hashPatchInput(input: string): string;
|
|
72
|
+
export {};
|
|
@@ -18,8 +18,6 @@ export interface ExecutorBackendExecOptions {
|
|
|
18
18
|
*/
|
|
19
19
|
idleTimeoutMs: number;
|
|
20
20
|
reset: boolean;
|
|
21
|
-
artifactPath: string | undefined;
|
|
22
|
-
artifactId: string | undefined;
|
|
23
21
|
onChunk: (chunk: string) => void;
|
|
24
22
|
/**
|
|
25
23
|
* Live status events (read/write/agent/…) delivered as they are emitted,
|
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
* `agent()`/`parallel()`/`completion()` work is ignored completely, then {@link resume}
|
|
7
7
|
* starts a fresh timeout window once the runtime gets control back.
|
|
8
8
|
*
|
|
9
|
-
* The active timer self-reschedules instead of being torn down on every
|
|
10
|
-
* activity event, so frequent activity costs one timestamp write per event.
|
|
11
9
|
* Pause is reference-counted because `parallel()` can have multiple bridge calls
|
|
12
10
|
* in flight at once.
|
|
13
11
|
*/
|
|
@@ -18,8 +16,6 @@ export declare class IdleTimeout {
|
|
|
18
16
|
get signal(): AbortSignal;
|
|
19
17
|
/** Configured active timeout window in milliseconds. */
|
|
20
18
|
get idleMs(): number;
|
|
21
|
-
/** Record runtime activity, pushing the active deadline forward by `idleMs`. */
|
|
22
|
-
bump(): void;
|
|
23
19
|
/** Suspend timeout accounting while control is delegated to host-side work. */
|
|
24
20
|
pause(): void;
|
|
25
21
|
/** Resume timeout accounting with a fresh timeout window. */
|