feat: integrate thinking level support across agent and UI components

- Enhanced the agent service and request handling to include an optional thinking level parameter, improving the configurability of model interactions.
- Updated the UI components to manage and display the selected model along with its thinking level, ensuring a cohesive user experience.
- Refactored the model selector and input controls to accommodate the new model selection structure, enhancing usability and clarity.
- Adjusted the Electron API and HTTP client to support the new thinking level parameter in requests, ensuring consistent data handling across the application.

This update significantly improves the agent's ability to adapt its reasoning capabilities based on user-defined thinking levels, enhancing overall performance and user satisfaction.
This commit is contained in:
Shirone
2026-01-02 15:22:06 +01:00
parent 81d300391d
commit 8c04e0028f
11 changed files with 211 additions and 231 deletions

View File

@@ -6,7 +6,7 @@
import path from 'path';
import * as secureFs from '../lib/secure-fs.js';
import type { EventEmitter } from '../lib/events.js';
import type { ExecuteOptions } from '@automaker/types';
import type { ExecuteOptions, ThinkingLevel } from '@automaker/types';
import {
readImageAsBase64,
buildPromptWithImages,
@@ -54,6 +54,7 @@ interface Session {
abortController: AbortController | null;
workingDirectory: string;
model?: string;
thinkingLevel?: ThinkingLevel; // Thinking level for Claude models
sdkSessionId?: string; // Claude SDK session ID for conversation continuity
promptQueue: QueuedPrompt[]; // Queue of prompts to auto-run after current task
}
@@ -142,12 +143,14 @@ export class AgentService {
workingDirectory,
imagePaths,
model,
thinkingLevel,
}: {
sessionId: string;
message: string;
workingDirectory?: string;
imagePaths?: string[];
model?: string;
thinkingLevel?: ThinkingLevel;
}) {
const session = this.sessions.get(sessionId);
if (!session) {
@@ -160,11 +163,14 @@ export class AgentService {
throw new Error('Agent is already processing a message');
}
// Update session model if provided
// Update session model and thinking level if provided
if (model) {
session.model = model;
await this.updateSession(sessionId, { model });
}
if (thinkingLevel !== undefined) {
session.thinkingLevel = thinkingLevel;
}
// Read images and convert to base64
const images: Message['images'] = [];
@@ -255,6 +261,8 @@ export class AgentService {
: baseSystemPrompt;
// Build SDK options using centralized configuration
// Use thinking level from request, or fall back to session's stored thinking level
const effectiveThinkingLevel = thinkingLevel ?? session.thinkingLevel;
const sdkOptions = createChatOptions({
cwd: effectiveWorkDir,
model: model,
@@ -263,6 +271,7 @@ export class AgentService {
abortController: session.abortController!,
autoLoadClaudeMd,
enableSandboxMode,
thinkingLevel: effectiveThinkingLevel, // Pass thinking level for Claude models
mcpServers: Object.keys(mcpServers).length > 0 ? mcpServers : undefined,
mcpAutoApproveTools: mcpPermissions.mcpAutoApproveTools,
mcpUnrestrictedTools: mcpPermissions.mcpUnrestrictedTools,