feat(KB-119): add configurable thinking effort level

- Add defaultThinkingLevel to core Settings types and exports
- Thread thinking level through engine executor, merger, reviewer, triage, and pi
- Add effort dropdown to Model settings UI in SettingsModal
- Add tests for thinking effort dropdown in SettingsModal
This commit is contained in:
Dustin Byrne
2026-03-26 23:13:40 -04:00
parent 001217b5fb
commit dc821973fa
9 changed files with 101 additions and 2 deletions

View File

@@ -352,6 +352,7 @@ export class TaskExecutor {
onToolStart: agentLogger.onToolStart,
defaultProvider: settings.defaultProvider,
defaultModelId: settings.defaultModelId,
defaultThinkingLevel: settings.defaultThinkingLevel,
});
// Register session so the pause listener can terminate it
@@ -542,6 +543,7 @@ export class TaskExecutor {
onText: (delta) => options.onAgentText?.(taskId, delta),
defaultProvider: settings.defaultProvider,
defaultModelId: settings.defaultModelId,
defaultThinkingLevel: settings.defaultThinkingLevel,
},
);

View File

@@ -239,6 +239,7 @@ export async function aiMergeTask(
onToolStart: agentLogger.onToolStart,
defaultProvider: settings.defaultProvider,
defaultModelId: settings.defaultModelId,
defaultThinkingLevel: settings.defaultThinkingLevel,
});
try {

View File

@@ -34,6 +34,8 @@ export interface AgentOptions {
defaultProvider?: string;
/** Default model ID within the provider (e.g. "claude-sonnet-4-5"). Used with `defaultProvider`. */
defaultModelId?: string;
/** Default thinking effort level (e.g. "medium", "high"). When provided, sets the session's thinking level after creation. */
defaultThinkingLevel?: string;
}
/**
@@ -79,6 +81,11 @@ export async function createKbAgent(options: AgentOptions): Promise<AgentResult>
...(selectedModel ? { model: selectedModel } : {}),
});
// Apply thinking level if specified
if (options.defaultThinkingLevel) {
session.setThinkingLevel(options.defaultThinkingLevel as any);
}
// Wire up event listeners
session.subscribe((event) => {
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {

View File

@@ -115,6 +115,8 @@ export interface ReviewOptions {
defaultProvider?: string;
/** Default model ID within the provider (e.g. "claude-sonnet-4-5"). When set with `defaultProvider`, overrides the reviewer's model selection. */
defaultModelId?: string;
/** Default thinking effort level for the reviewer agent session. */
defaultThinkingLevel?: string;
}
/**
@@ -143,6 +145,7 @@ export async function reviewStep(
onText: (delta) => options.onText?.(delta),
defaultProvider: options.defaultProvider,
defaultModelId: options.defaultModelId,
defaultThinkingLevel: options.defaultThinkingLevel,
});
let reviewText = "";

View File

@@ -273,6 +273,7 @@ export class TriageProcessor {
onToolStart: agentLogger.onToolStart,
defaultProvider: settings.defaultProvider,
defaultModelId: settings.defaultModelId,
defaultThinkingLevel: settings.defaultThinkingLevel,
});
try {