@oh-my-pi/pi-coding-agent 15.10.9 → 15.10.11
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 +117 -0
- package/dist/cli.js +23087 -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 +1 -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/commands/launch.d.ts +1 -1
- package/dist/types/commands/read.d.ts +1 -1
- package/dist/types/commands/usage.d.ts +25 -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 +20 -219
- package/dist/types/config/model-resolver.d.ts +16 -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 +12 -16
- package/dist/types/config/settings.d.ts +1 -1
- package/dist/types/debug/log-viewer.d.ts +1 -1
- package/dist/types/debug/raw-sse.d.ts +1 -1
- package/dist/types/debug/terminal-info.d.ts +0 -1
- 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/export/html/template.generated.d.ts +1 -1
- package/dist/types/extensibility/extensions/types.d.ts +3 -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/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 +31 -26
- 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/interactive-mode.d.ts +1 -1
- 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 +2 -1
- package/dist/types/session/agent-session.d.ts +1 -1
- package/dist/types/session/auth-broker-config.d.ts +4 -0
- package/dist/types/session/session-manager.d.ts +1 -1
- package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
- package/dist/types/ssh/connection-manager.d.ts +8 -0
- package/dist/types/task/discovery.d.ts +1 -2
- package/dist/types/task/parallel.d.ts +2 -2
- package/dist/types/task/worktree.d.ts +2 -0
- package/dist/types/tiny/title-client.d.ts +1 -1
- 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/sqlite-reader.d.ts +3 -0
- package/dist/types/tools/todo.d.ts +2 -0
- package/dist/types/tui/output-block.d.ts +3 -3
- package/dist/types/utils/changelog.d.ts +8 -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/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/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 +1 -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 +7 -12
- package/src/cli/usage-cli.ts +603 -0
- package/src/cli-commands.ts +1 -0
- package/src/cli.ts +69 -5
- package/src/commands/complete.ts +1 -1
- package/src/commands/launch.ts +1 -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 +1 -1
- package/src/config/append-only-context-mode.ts +6 -12
- package/src/config/model-discovery.ts +554 -0
- package/src/config/model-registry.ts +308 -1025
- package/src/config/model-resolver.ts +113 -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 +18 -14
- package/src/config/settings.ts +37 -1
- 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/debug/terminal-info.ts +0 -3
- package/src/edit/diff.ts +95 -18
- package/src/edit/hashline/block-resolver.ts +20 -1
- package/src/edit/hashline/diff.ts +36 -1
- package/src/edit/hashline/execute.ts +8 -2
- 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 +2 -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 +49 -23
- package/src/eval/js/shared/runtime.ts +1 -1
- package/src/eval/py/index.ts +0 -2
- package/src/eval/py/kernel.ts +19 -0
- package/src/eval/py/runner.py +107 -3
- package/src/exec/bash-executor.ts +3 -1
- package/src/export/html/template.generated.ts +1 -1
- package/src/export/html/template.js +3 -1
- package/src/extensibility/extensions/types.ts +3 -2
- package/src/extensibility/plugins/legacy-pi-compat.ts +20 -3
- 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 +10 -10
- 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 +165 -17
- package/src/mcp/json-rpc.ts +35 -5
- package/src/mcp/transports/stdio.ts +7 -1
- package/src/memories/index.ts +2 -1
- package/src/mnemopi/backend.ts +25 -3
- package/src/mnemopi/state.ts +38 -2
- package/src/modes/components/agent-dashboard.ts +10 -7
- package/src/modes/components/assistant-message.ts +19 -13
- 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 +1 -1
- 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 +66 -54
- 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 +1 -1
- package/src/modes/components/tiny-title-download-progress.ts +1 -1
- package/src/modes/components/transcript-container.ts +373 -141
- 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 +10 -3
- package/src/modes/controllers/event-controller.ts +73 -49
- package/src/modes/controllers/input-controller.ts +5 -5
- package/src/modes/controllers/mcp-command-controller.ts +1 -1
- package/src/modes/controllers/selector-controller.ts +1 -5
- package/src/modes/controllers/streaming-reveal.ts +85 -18
- package/src/modes/interactive-mode.ts +5 -19
- 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 +2 -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 +15 -26
- 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 +8 -10
- 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 +6 -2
- package/src/sdk.ts +23 -10
- package/src/session/agent-session.ts +44 -10
- package/src/session/auth-broker-config.ts +30 -1
- package/src/session/session-manager.ts +2 -2
- package/src/session/streaming-output.ts +23 -2
- package/src/slash-commands/builtin-registry.ts +20 -0
- package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
- package/src/ssh/connection-manager.ts +27 -0
- package/src/task/commands.ts +2 -1
- package/src/task/discovery.ts +17 -24
- package/src/task/executor.ts +61 -53
- package/src/task/index.ts +137 -60
- package/src/task/parallel.ts +3 -3
- package/src/task/render.ts +2 -2
- package/src/task/worktree.ts +64 -56
- package/src/thinking.ts +2 -1
- package/src/tiny/title-client.ts +32 -14
- 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 +54 -13
- 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 +3 -9
- 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 +51 -12
- 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/file-mentions.ts +2 -1
- 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/anthropic.ts +8 -2
- 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
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
const LEADING_BRACKETED_AFFIX_PATTERN = /^(?:\s*(?:\[|【)[^\]】]+(?:\]|】)\s*)+/u;
|
|
2
|
-
const TRAILING_BRACKETED_AFFIX_PATTERN = /(?:\s*(?:\[|【)[^\]】]+(?:\]|】)\s*)+$/u;
|
|
3
|
-
const MODEL_ID_SEGMENT_PATTERN = /[a-z0-9.:-]+/g;
|
|
4
|
-
const MODEL_FAMILY_PREFIX_PATTERN =
|
|
5
|
-
/^(claude|gemini|gpt|grok|glm|qwen|deepseek|kimi|mimo|doubao|ernie|gpt-oss|gemma|minimax|step|command|jamba|llama|o[1345])/i;
|
|
6
|
-
|
|
7
|
-
function normalizeModelIdWhitespace(value: string): string {
|
|
8
|
-
return value.trim().replace(/\s+/g, " ");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/** Ordering for model-like segments: longest first, ties broken lexicographically. */
|
|
12
|
-
function compareSegmentPreference(left: string, right: string): number {
|
|
13
|
-
return left.length !== right.length ? right.length - left.length : left.localeCompare(right);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function getModelLikeIdSegments(modelId: string): string[] {
|
|
17
|
-
const matches = normalizeModelIdWhitespace(modelId).toLowerCase().match(MODEL_ID_SEGMENT_PATTERN);
|
|
18
|
-
if (!matches) return [];
|
|
19
|
-
const segments = new Set<string>();
|
|
20
|
-
for (const segment of matches) {
|
|
21
|
-
if (MODEL_FAMILY_PREFIX_PATTERN.test(segment) && /\d/.test(segment)) segments.add(segment);
|
|
22
|
-
}
|
|
23
|
-
return [...segments].sort(compareSegmentPreference);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function getLongestModelLikeIdSegment(modelId: string): string | undefined {
|
|
27
|
-
const matches = normalizeModelIdWhitespace(modelId).toLowerCase().match(MODEL_ID_SEGMENT_PATTERN);
|
|
28
|
-
if (!matches) return undefined;
|
|
29
|
-
let best: string | undefined;
|
|
30
|
-
for (const segment of matches) {
|
|
31
|
-
if (
|
|
32
|
-
MODEL_FAMILY_PREFIX_PATTERN.test(segment) &&
|
|
33
|
-
/\d/.test(segment) &&
|
|
34
|
-
(best === undefined || compareSegmentPreference(segment, best) < 0)
|
|
35
|
-
) {
|
|
36
|
-
best = segment;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return best;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function hasBracketAffixMarker(value: string): boolean {
|
|
43
|
-
for (let index = 0; index < value.length; index++) {
|
|
44
|
-
const code = value.charCodeAt(index);
|
|
45
|
-
if (code === 91 || code === 93 || code === 0x3010 || code === 0x3011) {
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Strip reseller / wrapper tags that are injected as bracketed affixes around an
|
|
54
|
-
* upstream model id, e.g.
|
|
55
|
-
* "[Kiro] claude-opus-4-8" -> "claude-opus-4-8"
|
|
56
|
-
* "[gcli转] gemini-3.1-pro-preview [假流]" -> "gemini-3.1-pro-preview"
|
|
57
|
-
*
|
|
58
|
-
* Candidates are returned most-stripped first: both ends, then leading-only, then trailing-only.
|
|
59
|
-
*/
|
|
60
|
-
export function getBracketStrippedModelIdCandidates(modelId: string): string[] {
|
|
61
|
-
if (!hasBracketAffixMarker(modelId)) return [];
|
|
62
|
-
const normalized = normalizeModelIdWhitespace(modelId);
|
|
63
|
-
if (!normalized) return [];
|
|
64
|
-
|
|
65
|
-
const strippedLeading = normalized.replace(LEADING_BRACKETED_AFFIX_PATTERN, "");
|
|
66
|
-
const withoutLeading = normalizeModelIdWhitespace(strippedLeading);
|
|
67
|
-
const withoutTrailing = normalizeModelIdWhitespace(normalized.replace(TRAILING_BRACKETED_AFFIX_PATTERN, ""));
|
|
68
|
-
const withoutBoth = normalizeModelIdWhitespace(strippedLeading.replace(TRAILING_BRACKETED_AFFIX_PATTERN, ""));
|
|
69
|
-
|
|
70
|
-
const candidates = new Set<string>();
|
|
71
|
-
for (const candidate of [withoutBoth, withoutLeading, withoutTrailing]) {
|
|
72
|
-
if (candidate && candidate !== normalized) {
|
|
73
|
-
candidates.add(candidate);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return [...candidates];
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export function stripBracketedModelIdAffixes(modelId: string): string | undefined {
|
|
80
|
-
return getBracketStrippedModelIdCandidates(modelId)[0];
|
|
81
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
const DEFAULT_MODEL_PROVIDER_ORDER = [
|
|
2
|
-
// First-party / native account providers. Prefer these over relays when the
|
|
3
|
-
// same upstream model is available in more than one place.
|
|
4
|
-
"openai-codex",
|
|
5
|
-
"anthropic",
|
|
6
|
-
"openai",
|
|
7
|
-
"google-gemini-cli",
|
|
8
|
-
"google",
|
|
9
|
-
"google-vertex",
|
|
10
|
-
"kimi-code",
|
|
11
|
-
"moonshot",
|
|
12
|
-
"qwen-portal",
|
|
13
|
-
"zai",
|
|
14
|
-
"xai-oauth",
|
|
15
|
-
"xai",
|
|
16
|
-
"mistral",
|
|
17
|
-
"deepseek",
|
|
18
|
-
"groq",
|
|
19
|
-
|
|
20
|
-
// High-quality aggregators / hosted inference providers.
|
|
21
|
-
"fireworks",
|
|
22
|
-
"cerebras",
|
|
23
|
-
"openrouter",
|
|
24
|
-
"aimlapi",
|
|
25
|
-
"together",
|
|
26
|
-
|
|
27
|
-
// Generic gateways and editor/proxy providers. These are useful when picked
|
|
28
|
-
// explicitly, but should not win ambiguous automatic role selection.
|
|
29
|
-
"alibaba-coding-plan",
|
|
30
|
-
"google-antigravity",
|
|
31
|
-
"opencode-zen",
|
|
32
|
-
"gitlab-duo",
|
|
33
|
-
"opencode-go",
|
|
34
|
-
"kilo",
|
|
35
|
-
"vercel-ai-gateway",
|
|
36
|
-
"cloudflare-ai-gateway",
|
|
37
|
-
"nanogpt",
|
|
38
|
-
"github-copilot",
|
|
39
|
-
] as const;
|
|
40
|
-
|
|
41
|
-
function addProviderRank(rank: Map<string, number>, provider: string): void {
|
|
42
|
-
const normalized = provider.trim().toLowerCase();
|
|
43
|
-
if (!normalized || rank.has(normalized)) return;
|
|
44
|
-
rank.set(normalized, rank.size);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export function buildModelProviderPriorityRank(configuredProviderOrder?: readonly string[]): Map<string, number> {
|
|
48
|
-
const rank = new Map<string, number>();
|
|
49
|
-
for (const provider of configuredProviderOrder ?? []) {
|
|
50
|
-
addProviderRank(rank, provider);
|
|
51
|
-
}
|
|
52
|
-
for (const provider of DEFAULT_MODEL_PROVIDER_ORDER) {
|
|
53
|
-
addProviderRank(rank, provider);
|
|
54
|
-
}
|
|
55
|
-
return rank;
|
|
56
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
export type ExecutionAbortReason = "idle-timeout" | "signal";
|
|
2
|
-
|
|
3
|
-
export interface IdleTimeoutWatchdogOptions {
|
|
4
|
-
timeoutMs?: number;
|
|
5
|
-
signal?: AbortSignal;
|
|
6
|
-
hardTimeoutGraceMs: number;
|
|
7
|
-
onAbort?: (reason: ExecutionAbortReason) => void;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export class IdleTimeoutWatchdog {
|
|
11
|
-
#abortController = new AbortController();
|
|
12
|
-
#abortReason?: ExecutionAbortReason;
|
|
13
|
-
#hardTimeoutDeferred = Promise.withResolvers<"hard-timeout">();
|
|
14
|
-
#hardTimeoutGraceMs: number;
|
|
15
|
-
#hardTimeoutTimer?: NodeJS.Timeout;
|
|
16
|
-
#idleTimer?: NodeJS.Timeout;
|
|
17
|
-
#onAbort?: (reason: ExecutionAbortReason) => void;
|
|
18
|
-
#signal?: AbortSignal;
|
|
19
|
-
#signalAbortHandler?: () => void;
|
|
20
|
-
#timeoutMs?: number;
|
|
21
|
-
|
|
22
|
-
constructor(options: IdleTimeoutWatchdogOptions) {
|
|
23
|
-
this.#timeoutMs = options.timeoutMs;
|
|
24
|
-
this.#hardTimeoutGraceMs = options.hardTimeoutGraceMs;
|
|
25
|
-
this.#onAbort = options.onAbort;
|
|
26
|
-
this.#signal = options.signal;
|
|
27
|
-
|
|
28
|
-
if (this.#signal) {
|
|
29
|
-
if (this.#signal.aborted) {
|
|
30
|
-
this.#abort("signal");
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
this.#signalAbortHandler = () => {
|
|
35
|
-
this.#abort("signal");
|
|
36
|
-
};
|
|
37
|
-
this.#signal.addEventListener("abort", this.#signalAbortHandler, { once: true });
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
this.touch();
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
get abortedBySignal(): boolean {
|
|
44
|
-
return this.#abortReason === "signal";
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
get hardTimeoutPromise(): Promise<"hard-timeout"> {
|
|
48
|
-
return this.#hardTimeoutDeferred.promise;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
get signal(): AbortSignal {
|
|
52
|
-
return this.#abortController.signal;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
get timedOut(): boolean {
|
|
56
|
-
return this.#abortReason === "idle-timeout";
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
touch(): void {
|
|
60
|
-
if (this.#abortReason || this.#timeoutMs === undefined || this.#timeoutMs <= 0) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (this.#idleTimer) {
|
|
65
|
-
clearTimeout(this.#idleTimer);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
this.#idleTimer = setTimeout(() => {
|
|
69
|
-
this.#abort("idle-timeout");
|
|
70
|
-
}, this.#timeoutMs);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
dispose(): void {
|
|
74
|
-
if (this.#idleTimer) {
|
|
75
|
-
clearTimeout(this.#idleTimer);
|
|
76
|
-
this.#idleTimer = undefined;
|
|
77
|
-
}
|
|
78
|
-
if (this.#hardTimeoutTimer) {
|
|
79
|
-
clearTimeout(this.#hardTimeoutTimer);
|
|
80
|
-
this.#hardTimeoutTimer = undefined;
|
|
81
|
-
}
|
|
82
|
-
if (this.#signal && this.#signalAbortHandler) {
|
|
83
|
-
this.#signal.removeEventListener("abort", this.#signalAbortHandler);
|
|
84
|
-
this.#signalAbortHandler = undefined;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
#abort(reason: ExecutionAbortReason): void {
|
|
89
|
-
if (this.#abortReason) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
this.#abortReason = reason;
|
|
94
|
-
|
|
95
|
-
if (this.#idleTimer) {
|
|
96
|
-
clearTimeout(this.#idleTimer);
|
|
97
|
-
this.#idleTimer = undefined;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (!this.#abortController.signal.aborted) {
|
|
101
|
-
this.#abortController.abort(reason);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
this.#onAbort?.(reason);
|
|
105
|
-
this.#armHardTimeout();
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
#armHardTimeout(): void {
|
|
109
|
-
if (this.#hardTimeoutTimer || this.#hardTimeoutGraceMs <= 0) {
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
this.#hardTimeoutTimer = setTimeout(() => {
|
|
114
|
-
this.#hardTimeoutDeferred.resolve("hard-timeout");
|
|
115
|
-
}, this.#hardTimeoutGraceMs);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export function formatIdleTimeoutMessage(timeoutMs?: number): string {
|
|
120
|
-
if (timeoutMs === undefined) {
|
|
121
|
-
return "Command timed out without output";
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const seconds = Math.max(1, Math.round(timeoutMs / 1000));
|
|
125
|
-
return `Command timed out after ${seconds} seconds without output`;
|
|
126
|
-
}
|