Merge branch 'feat/custom-thinking-budgets'

feat: add thinkingBudgets setting to customize token budgets per thinking level

Allows users to override default token budgets for minimal/low/medium/high
thinking levels via settings.json. Useful for token-based providers.

closes #529

Co-authored-by: Melih Mucuk <melih@monkeysteam.com>
This commit is contained in:
Mario Zechner 2026-01-08 03:02:08 +01:00
commit f97dcbf92f
8 changed files with 126 additions and 11 deletions

View file

@ -644,6 +644,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
: undefined,
steeringMode: settingsManager.getSteeringMode(),
followUpMode: settingsManager.getFollowUpMode(),
thinkingBudgets: settingsManager.getThinkingBudgets(),
getApiKey: async () => {
const currentModel = agent.state.model;
if (!currentModel) {

View file

@ -39,6 +39,13 @@ export interface ImageSettings {
blockImages?: boolean; // default: false - when true, prevents all images from being sent to LLM providers
}
export interface ThinkingBudgetsSettings {
minimal?: number;
low?: number;
medium?: number;
high?: number;
}
export interface Settings {
lastChangelogVersion?: string;
defaultProvider?: string;
@ -59,6 +66,7 @@ export interface Settings {
images?: ImageSettings;
enabledModels?: string[]; // Model patterns for cycling (same format as --models CLI flag)
doubleEscapeAction?: "branch" | "tree"; // Action for double-escape with empty editor (default: "tree")
thinkingBudgets?: ThinkingBudgetsSettings; // Custom token budgets for thinking levels
}
/** Deep merge settings: project/overrides take precedence, nested objects merge recursively */
@ -381,6 +389,10 @@ export class SettingsManager {
};
}
getThinkingBudgets(): ThinkingBudgetsSettings | undefined {
return this.settings.thinkingBudgets;
}
getShowImages(): boolean {
return this.settings.terminal?.showImages ?? true;
}