@averyyy/pi-coding-agent 0.84.2-piclient.3 → 0.84.3-piclient.1
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 +4 -0
- package/README.md +8 -4
- package/dist/bundle/chunks/anthropic-messages-JWX2WP65.js +45 -0
- package/dist/bundle/chunks/anthropic.js +75 -0
- package/dist/bundle/chunks/azure-openai-responses-B2RCCN5N.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +74 -0
- package/dist/bundle/chunks/chunk-4L3WN2XY.js +2 -0
- package/dist/bundle/chunks/chunk-6CYCI3EJ.js +12 -0
- package/dist/bundle/chunks/chunk-6R7UI4IY.js +2 -0
- package/dist/bundle/chunks/chunk-AXIIZGTV.js +2 -0
- package/dist/bundle/chunks/chunk-DRQDKNXA.js +2 -0
- package/dist/bundle/chunks/chunk-GMWCTUPB.js +2 -0
- package/dist/bundle/chunks/chunk-GPPBJGBU.js +50 -0
- package/dist/bundle/chunks/chunk-JUUC5AZY.js +2 -0
- package/dist/bundle/chunks/chunk-L2ZPNLYD.js +2 -0
- package/dist/bundle/chunks/chunk-LRBSW3NQ.js +11 -0
- package/dist/bundle/chunks/chunk-MNAIPA3J.js +2 -0
- package/dist/bundle/chunks/chunk-NUHFSC37.js +25 -0
- package/dist/bundle/chunks/chunk-PGXDEOVV.js +2 -0
- package/dist/bundle/chunks/chunk-PJACZCIR.js +2 -0
- package/dist/bundle/chunks/chunk-PRRNXB7S.js +2 -0
- package/dist/bundle/chunks/chunk-QI42RBZ4.js +1632 -0
- package/dist/bundle/chunks/chunk-TEPMHNKQ.js +2 -0
- package/dist/bundle/chunks/chunk-TRDNDS6A.js +4 -0
- package/dist/bundle/chunks/chunk-UAQELI3K.js +2 -0
- package/dist/bundle/chunks/chunk-XDUWOHPL.js +6 -0
- package/dist/bundle/chunks/chunk-XNGRGP62.js +2 -0
- package/dist/bundle/chunks/dist-RDWOYWHR.js +13 -0
- package/dist/bundle/chunks/github-copilot.js +2 -0
- package/dist/bundle/chunks/google-generative-ai-XDKMGBCJ.js +2 -0
- package/dist/bundle/chunks/google-vertex-D5FGEO3Y.js +2 -0
- package/dist/bundle/chunks/image-resize-worker.js +2 -0
- package/dist/bundle/chunks/kimi-coding.js +2 -0
- package/dist/bundle/chunks/lib-HGQMNYVT.js +9 -0
- package/dist/bundle/chunks/mistral-conversations-YK73UAOZ.js +5 -0
- package/dist/bundle/chunks/multipart-parser-SQ6GDJL7.js +3 -0
- package/dist/bundle/chunks/openai-codex-responses-MJHX7NXI.js +8 -0
- package/dist/bundle/chunks/openai-codex.js +75 -0
- package/dist/bundle/chunks/openai-completions-JD4WAC3R.js +7 -0
- package/dist/bundle/chunks/openai-responses-CP4VKB27.js +2 -0
- package/dist/bundle/chunks/openrouter-images-N4XVVFSD.js +2 -0
- package/dist/bundle/chunks/openrouter.js +75 -0
- package/dist/bundle/chunks/pi-messages-TPFH44NP.js +8 -0
- package/dist/bundle/chunks/radius.js +75 -0
- package/dist/bundle/chunks/src-UK77SYZE.js +4 -0
- package/dist/bundle/chunks/xai.js +2 -0
- package/dist/bundle/cli.js +3 -0
- package/dist/bundle/client.js +2 -0
- package/dist/bundle/index.js +2 -0
- package/dist/bundle/rpc-entry.js +3 -0
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +29 -9
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +2 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/config.d.ts +4 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +22 -14
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +15 -8
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +48 -39
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +6 -7
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/defaults.d.ts +1 -0
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js +9 -0
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +3 -1
- package/dist/core/exec.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +115 -48
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/types.d.ts +38 -9
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js +3 -0
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +1 -1
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/keybindings.d.ts +20 -19
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +26 -5
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-config.d.ts +5 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +3 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +14 -8
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js +2 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +22 -14
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/pi-client-cli-adapter.d.ts +11 -0
- package/dist/core/pi-client-cli-adapter.d.ts.map +1 -0
- package/dist/core/pi-client-cli-adapter.js +91 -0
- package/dist/core/pi-client-cli-adapter.js.map +1 -0
- package/dist/core/pi-manifest.d.ts.map +1 -1
- package/dist/core/pi-manifest.js +2 -1
- package/dist/core/pi-manifest.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +2 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +3 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +2 -2
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +10 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-export.d.ts +4 -0
- package/dist/core/session-export.d.ts.map +1 -0
- package/dist/core/session-export.js +32 -0
- package/dist/core/session-export.js.map +1 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +2 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-diagnostics.d.ts +9 -0
- package/dist/core/settings-diagnostics.d.ts.map +1 -0
- package/dist/core/settings-diagnostics.js +21 -0
- package/dist/core/settings-diagnostics.js.map +1 -0
- package/dist/core/settings-manager.d.ts +9 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +52 -10
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +51 -33
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +11 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +13 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +30 -14
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +0 -5
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +2 -5
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +20 -4
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/index.d.ts +4 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +18 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/powershell.d.ts +16 -0
- package/dist/core/tools/powershell.d.ts.map +1 -0
- package/dist/core/tools/powershell.js +39 -0
- package/dist/core/tools/powershell.js.map +1 -0
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +2 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/extensions/llama/client.d.ts +6 -0
- package/dist/extensions/llama/client.d.ts.map +1 -1
- package/dist/extensions/llama/client.js +7 -0
- package/dist/extensions/llama/client.js.map +1 -1
- package/dist/extensions/llama/index.d.ts.map +1 -1
- package/dist/extensions/llama/index.js +2 -0
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts +3 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +29 -4
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +4 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +20 -15
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +4 -3
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +2 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +9 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +56 -12
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +7 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +118 -56
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-submenu.js +165 -0
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +74 -17
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +13 -12
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +196 -226
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/session-share.d.ts +16 -0
- package/dist/modes/interactive/session-share.d.ts.map +1 -0
- package/dist/modes/interactive/session-share.js +188 -0
- package/dist/modes/interactive/session-share.js.map +1 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +4 -3
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts +16 -13
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +20 -6
- package/dist/modes/json-event.js.map +1 -1
- package/dist/package-manager-cli.d.ts +1 -0
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +186 -2
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js +8 -3
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +2 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/management-http.d.ts +5 -3
- package/dist/utils/management-http.d.ts.map +1 -1
- package/dist/utils/management-http.js +14 -10
- package/dist/utils/management-http.js.map +1 -1
- package/dist/utils/shell.d.ts +3 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +21 -7
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts +1 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +60 -1
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/text.d.ts +8 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +9 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +2 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +15 -0
- package/docs/custom-provider.md +5 -2
- package/docs/environment-variables.md +8 -8
- package/docs/extensions.md +17 -7
- package/docs/json.md +7 -2
- package/docs/keybindings.md +8 -8
- package/docs/llama-cpp.md +2 -0
- package/docs/models.md +8 -2
- package/docs/packages.md +2 -2
- package/docs/rpc.md +9 -3
- package/docs/sdk.md +7 -2
- package/docs/settings.md +11 -3
- package/docs/skills.md +4 -3
- package/docs/terminal-setup.md +11 -9
- package/docs/usage.md +6 -2
- package/docs/windows.md +24 -2
- package/examples/extensions/border-status-editor.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/git-checkpoint.ts +2 -2
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/notify.ts +3 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/subagent/README.md +1 -1
- package/examples/extensions/subagent/index.ts +6 -1
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/06-extensions.ts +1 -1
- package/examples/sdk/README.md +1 -1
- package/package.json +12 -14
|
@@ -24,7 +24,7 @@ import { normalizeToolResultImages } from "../utils/tool-result-images.js";
|
|
|
24
24
|
import { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from "./auth-guidance.js";
|
|
25
25
|
import { executeBashWithOperations } from "./bash-executor.js";
|
|
26
26
|
import { calculateContextTokens, collectEntriesForBranchSummary, compact, estimateContextTokens, estimateTokens, generateBranchSummary, prepareCompaction, shouldCompact, } from "./compaction/index.js";
|
|
27
|
-
import { DEFAULT_THINKING_LEVEL } from "./defaults.js";
|
|
27
|
+
import { DEFAULT_THINKING_LEVEL, THINKING_LEVEL_OPTIONS } from "./defaults.js";
|
|
28
28
|
import { exportSessionToHtml } from "./export-html/index.js";
|
|
29
29
|
import { createToolHtmlRenderer } from "./export-html/tool-renderer.js";
|
|
30
30
|
import { ExtensionRunner, wrapRegisteredTools, } from "./extensions/index.js";
|
|
@@ -72,8 +72,6 @@ function estimateMessagesTokens(messages) {
|
|
|
72
72
|
// ============================================================================
|
|
73
73
|
// Constants
|
|
74
74
|
// ============================================================================
|
|
75
|
-
/** Standard thinking levels */
|
|
76
|
-
const THINKING_LEVELS = ["off", "minimal", "low", "medium", "high"];
|
|
77
75
|
const INTRA_TURN_COMPACTION_MARKER_TYPE = "pi:intra-turn-compaction";
|
|
78
76
|
const INTRA_TURN_COMPACTION_MARKER_TEXT = "Continue from the compaction summary above. The previous tool loop was compacted before the next provider request; use the summary's Operational State, file lists, failures, last command, and next steps.";
|
|
79
77
|
const VALIDATION_HINT_MESSAGE_TYPE = "pi:validation-hint";
|
|
@@ -1503,10 +1501,11 @@ export class AgentSession {
|
|
|
1503
1501
|
}
|
|
1504
1502
|
/**
|
|
1505
1503
|
* Set model directly.
|
|
1506
|
-
* Validates that auth is configured
|
|
1504
|
+
* Validates that auth is configured and saves to the session transcript.
|
|
1505
|
+
* Persists to global defaults only when options.persist is true.
|
|
1507
1506
|
* @throws Error if no auth is configured for the model
|
|
1508
1507
|
*/
|
|
1509
|
-
async setModel(model) {
|
|
1508
|
+
async setModel(model, options = {}) {
|
|
1510
1509
|
if (!(await this._modelRuntime.checkAuth(model.provider))) {
|
|
1511
1510
|
throw new Error(`No API key for ${model.provider}/${model.id}`);
|
|
1512
1511
|
}
|
|
@@ -1514,11 +1513,15 @@ export class AgentSession {
|
|
|
1514
1513
|
await this.abort();
|
|
1515
1514
|
}
|
|
1516
1515
|
const previousModel = this.model;
|
|
1517
|
-
const thinkingLevel = this._getThinkingLevelForModelSwitch();
|
|
1516
|
+
const thinkingLevel = this._getThinkingLevelForModelSwitch(model);
|
|
1518
1517
|
this.agent.state.model = model;
|
|
1519
1518
|
this.sessionManager.appendModelChange(model.provider, model.id);
|
|
1520
|
-
|
|
1521
|
-
|
|
1519
|
+
if (options.persist) {
|
|
1520
|
+
this.settingsManager.setDefaultModelAndProvider(model.provider, model.id);
|
|
1521
|
+
}
|
|
1522
|
+
// Apply thinking level for the new model.
|
|
1523
|
+
// Per-model thinking level overrides take priority over the global default.
|
|
1524
|
+
// Model persistence does not implicitly rewrite the global thinking default.
|
|
1522
1525
|
this.setThinkingLevel(thinkingLevel);
|
|
1523
1526
|
await this._emitModelSelect(model, previousModel, "set");
|
|
1524
1527
|
}
|
|
@@ -1528,13 +1531,13 @@ export class AgentSession {
|
|
|
1528
1531
|
* @param direction - "forward" (default) or "backward"
|
|
1529
1532
|
* @returns The new model info, or undefined if only one model available
|
|
1530
1533
|
*/
|
|
1531
|
-
async cycleModel(direction = "forward") {
|
|
1534
|
+
async cycleModel(direction = "forward", options = {}) {
|
|
1532
1535
|
if (this._scopedModels.length > 0) {
|
|
1533
|
-
return this._cycleScopedModel(direction);
|
|
1536
|
+
return this._cycleScopedModel(direction, options);
|
|
1534
1537
|
}
|
|
1535
|
-
return this._cycleAvailableModel(direction);
|
|
1538
|
+
return this._cycleAvailableModel(direction, options);
|
|
1536
1539
|
}
|
|
1537
|
-
async _cycleScopedModel(direction) {
|
|
1540
|
+
async _cycleScopedModel(direction, options) {
|
|
1538
1541
|
const availableIds = new Set(this._modelRuntime.getAvailableSnapshot().map((model) => `${model.provider}\0${model.id}`));
|
|
1539
1542
|
const scopedModels = this._scopedModels.filter((scoped) => availableIds.has(`${scoped.model.provider}\0${scoped.model.id}`));
|
|
1540
1543
|
if (scopedModels.length <= 1)
|
|
@@ -1546,20 +1549,23 @@ export class AgentSession {
|
|
|
1546
1549
|
const len = scopedModels.length;
|
|
1547
1550
|
const nextIndex = direction === "forward" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;
|
|
1548
1551
|
const next = scopedModels[nextIndex];
|
|
1549
|
-
const thinkingLevel = this._getThinkingLevelForModelSwitch(next.thinkingLevel);
|
|
1552
|
+
const thinkingLevel = this._getThinkingLevelForModelSwitch(next.model, next.thinkingLevel);
|
|
1550
1553
|
// Apply model
|
|
1551
1554
|
this.agent.state.model = next.model;
|
|
1552
1555
|
this.sessionManager.appendModelChange(next.model.provider, next.model.id);
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
//
|
|
1556
|
+
if (options.persist) {
|
|
1557
|
+
this.settingsManager.setDefaultModelAndProvider(next.model.provider, next.model.id);
|
|
1558
|
+
}
|
|
1559
|
+
// Apply thinking level for the new model.
|
|
1560
|
+
// - Explicit scoped model thinking level overrides defaults
|
|
1561
|
+
// - Per-model thinking level overrides take priority over the global default
|
|
1557
1562
|
// setThinkingLevel clamps to model capabilities.
|
|
1563
|
+
// Model persistence does not implicitly rewrite the global thinking default.
|
|
1558
1564
|
this.setThinkingLevel(thinkingLevel);
|
|
1559
1565
|
await this._emitModelSelect(next.model, currentModel, "cycle");
|
|
1560
1566
|
return { model: next.model, thinkingLevel: this.thinkingLevel, isScoped: true };
|
|
1561
1567
|
}
|
|
1562
|
-
async _cycleAvailableModel(direction) {
|
|
1568
|
+
async _cycleAvailableModel(direction, options) {
|
|
1563
1569
|
const availableModels = this._modelRuntime.getAvailableSnapshot();
|
|
1564
1570
|
if (availableModels.length <= 1)
|
|
1565
1571
|
return undefined;
|
|
@@ -1570,11 +1576,14 @@ export class AgentSession {
|
|
|
1570
1576
|
const len = availableModels.length;
|
|
1571
1577
|
const nextIndex = direction === "forward" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;
|
|
1572
1578
|
const nextModel = availableModels[nextIndex];
|
|
1573
|
-
const thinkingLevel = this._getThinkingLevelForModelSwitch();
|
|
1579
|
+
const thinkingLevel = this._getThinkingLevelForModelSwitch(nextModel);
|
|
1574
1580
|
this.agent.state.model = nextModel;
|
|
1575
1581
|
this.sessionManager.appendModelChange(nextModel.provider, nextModel.id);
|
|
1576
|
-
|
|
1577
|
-
|
|
1582
|
+
if (options.persist) {
|
|
1583
|
+
this.settingsManager.setDefaultModelAndProvider(nextModel.provider, nextModel.id);
|
|
1584
|
+
}
|
|
1585
|
+
// Apply thinking level for the new model.
|
|
1586
|
+
// Model persistence does not implicitly rewrite the global thinking default.
|
|
1578
1587
|
this.setThinkingLevel(thinkingLevel);
|
|
1579
1588
|
await this._emitModelSelect(nextModel, currentModel, "cycle");
|
|
1580
1589
|
return { model: nextModel, thinkingLevel: this.thinkingLevel, isScoped: false };
|
|
@@ -1585,20 +1594,21 @@ export class AgentSession {
|
|
|
1585
1594
|
/**
|
|
1586
1595
|
* Set thinking level.
|
|
1587
1596
|
* Clamps to model capabilities based on available thinking levels.
|
|
1588
|
-
* Saves to session
|
|
1597
|
+
* Saves the clamped level to the session transcript only if the level actually changes.
|
|
1598
|
+
* Persists the requested level to global defaults only when options.persist is true.
|
|
1589
1599
|
*/
|
|
1590
|
-
setThinkingLevel(level) {
|
|
1600
|
+
setThinkingLevel(level, options = {}) {
|
|
1591
1601
|
const availableLevels = this.getAvailableThinkingLevels();
|
|
1592
1602
|
const effectiveLevel = availableLevels.includes(level) ? level : this._clampThinkingLevel(level, availableLevels);
|
|
1593
1603
|
// Only persist if actually changing
|
|
1594
1604
|
const previousLevel = this.agent.state.thinkingLevel;
|
|
1595
1605
|
const isChanging = effectiveLevel !== previousLevel;
|
|
1596
1606
|
this.agent.state.thinkingLevel = effectiveLevel;
|
|
1607
|
+
if (options.persist) {
|
|
1608
|
+
this.settingsManager.setDefaultThinkingLevel(level);
|
|
1609
|
+
}
|
|
1597
1610
|
if (isChanging) {
|
|
1598
1611
|
this.sessionManager.appendThinkingLevelChange(effectiveLevel);
|
|
1599
|
-
if (this.supportsThinking() || effectiveLevel !== "off") {
|
|
1600
|
-
this.settingsManager.setDefaultThinkingLevel(effectiveLevel);
|
|
1601
|
-
}
|
|
1602
1612
|
this._emit({ type: "thinking_level_changed", level: effectiveLevel });
|
|
1603
1613
|
void this._extensionRunner.emit({
|
|
1604
1614
|
type: "thinking_level_select",
|
|
@@ -1611,14 +1621,14 @@ export class AgentSession {
|
|
|
1611
1621
|
* Cycle to next thinking level.
|
|
1612
1622
|
* @returns New level, or undefined if model doesn't support thinking
|
|
1613
1623
|
*/
|
|
1614
|
-
cycleThinkingLevel() {
|
|
1624
|
+
cycleThinkingLevel(options = {}) {
|
|
1615
1625
|
if (!this.supportsThinking())
|
|
1616
1626
|
return undefined;
|
|
1617
1627
|
const levels = this.getAvailableThinkingLevels();
|
|
1618
1628
|
const currentIndex = levels.indexOf(this.thinkingLevel);
|
|
1619
1629
|
const nextIndex = (currentIndex + 1) % levels.length;
|
|
1620
1630
|
const nextLevel = levels[nextIndex];
|
|
1621
|
-
this.setThinkingLevel(nextLevel);
|
|
1631
|
+
this.setThinkingLevel(nextLevel, options);
|
|
1622
1632
|
return nextLevel;
|
|
1623
1633
|
}
|
|
1624
1634
|
/**
|
|
@@ -1627,7 +1637,7 @@ export class AgentSession {
|
|
|
1627
1637
|
*/
|
|
1628
1638
|
getAvailableThinkingLevels() {
|
|
1629
1639
|
if (!this.model)
|
|
1630
|
-
return
|
|
1640
|
+
return [...THINKING_LEVEL_OPTIONS];
|
|
1631
1641
|
return getSupportedThinkingLevels(this.model);
|
|
1632
1642
|
}
|
|
1633
1643
|
/**
|
|
@@ -1636,14 +1646,17 @@ export class AgentSession {
|
|
|
1636
1646
|
supportsThinking() {
|
|
1637
1647
|
return !!this.model?.reasoning;
|
|
1638
1648
|
}
|
|
1639
|
-
_getThinkingLevelForModelSwitch(explicitLevel) {
|
|
1649
|
+
_getThinkingLevelForModelSwitch(targetModel, explicitLevel) {
|
|
1640
1650
|
if (explicitLevel !== undefined) {
|
|
1641
1651
|
return explicitLevel;
|
|
1642
1652
|
}
|
|
1643
|
-
if (
|
|
1644
|
-
|
|
1653
|
+
if (targetModel) {
|
|
1654
|
+
const perModel = this.settingsManager.getModelThinkingLevel(targetModel.provider, targetModel.id);
|
|
1655
|
+
if (perModel !== undefined) {
|
|
1656
|
+
return perModel;
|
|
1657
|
+
}
|
|
1645
1658
|
}
|
|
1646
|
-
return this.thinkingLevel;
|
|
1659
|
+
return this.settingsManager.getDefaultThinkingLevel() ?? this.thinkingLevel ?? DEFAULT_THINKING_LEVEL;
|
|
1647
1660
|
}
|
|
1648
1661
|
_clampThinkingLevel(level, _availableLevels) {
|
|
1649
1662
|
return this.model ? clampThinkingLevel(this.model, level) : "off";
|
|
@@ -2537,11 +2550,9 @@ export class AgentSession {
|
|
|
2537
2550
|
// =========================================================================
|
|
2538
2551
|
// Auto-Retry
|
|
2539
2552
|
// =========================================================================
|
|
2540
|
-
_isNonRetryableProviderLimitError(errorMessage) {
|
|
2541
|
-
return /GoUsageLimitError|FreeUsageLimitError|Monthly usage limit reached|available balance|insufficient.?balance|balance.?insufficient|insufficient_quota|out of budget|quota exceeded|billing|payment required|402/i.test(errorMessage);
|
|
2542
|
-
}
|
|
2543
2553
|
/**
|
|
2544
|
-
* Check if an error is retryable
|
|
2554
|
+
* Check if an error is retryable. Provider error text is retryable by default,
|
|
2555
|
+
* except usage/quota/balance limits and session or context failures.
|
|
2545
2556
|
* Context overflow errors are NOT retryable (handled by compaction instead).
|
|
2546
2557
|
*/
|
|
2547
2558
|
_isRetryableError(message) {
|
|
@@ -2553,8 +2564,6 @@ export class AgentSession {
|
|
|
2553
2564
|
const piServerPhase = getPiServerFailurePhase(message);
|
|
2554
2565
|
if (piServerPhase && piServerPhase !== "provider_stream")
|
|
2555
2566
|
return false;
|
|
2556
|
-
if (message.errorMessage && this._isNonRetryableProviderLimitError(message.errorMessage))
|
|
2557
|
-
return false;
|
|
2558
2567
|
return isRetryableAssistantError(message);
|
|
2559
2568
|
}
|
|
2560
2569
|
/**
|