diff --git a/auto-claude-ui/src/main/ipc-handlers/linear-handlers.ts b/auto-claude-ui/src/main/ipc-handlers/linear-handlers.ts index 07fadd16..62ee54e6 100644 --- a/auto-claude-ui/src/main/ipc-handlers/linear-handlers.ts +++ b/auto-claude-ui/src/main/ipc-handlers/linear-handlers.ts @@ -50,7 +50,7 @@ export function registerLinearHandlers( method: 'POST', headers: { 'Content-Type': 'application/json', - 'Authorization': apiKey + 'Authorization': `Bearer ${apiKey}` }, body: JSON.stringify({ query, variables }) }); diff --git a/auto-claude-ui/src/preload/api/index.ts b/auto-claude-ui/src/preload/api/index.ts index 71dc35f7..a94fe838 100644 --- a/auto-claude-ui/src/preload/api/index.ts +++ b/auto-claude-ui/src/preload/api/index.ts @@ -5,6 +5,7 @@ import { SettingsAPI, createSettingsAPI } from './settings-api'; import { FileAPI, createFileAPI } from './file-api'; import { AgentAPI, createAgentAPI } from './agent-api'; import { IdeationAPI, createIdeationAPI } from './modules/ideation-api'; +import { InsightsAPI, createInsightsAPI } from './modules/insights-api'; import { AppUpdateAPI, createAppUpdateAPI } from './app-update-api'; export interface ElectronAPI extends @@ -15,6 +16,7 @@ export interface ElectronAPI extends FileAPI, AgentAPI, IdeationAPI, + InsightsAPI, AppUpdateAPI {} export const createElectronAPI = (): ElectronAPI => ({ @@ -25,6 +27,7 @@ export const createElectronAPI = (): ElectronAPI => ({ ...createFileAPI(), ...createAgentAPI(), ...createIdeationAPI(), + ...createInsightsAPI(), ...createAppUpdateAPI() }); @@ -37,6 +40,7 @@ export { createFileAPI, createAgentAPI, createIdeationAPI, + createInsightsAPI, createAppUpdateAPI }; @@ -48,5 +52,6 @@ export type { FileAPI, AgentAPI, IdeationAPI, + InsightsAPI, AppUpdateAPI }; diff --git a/auto-claude-ui/src/renderer/lib/mocks/insights-mock.ts b/auto-claude-ui/src/renderer/lib/mocks/insights-mock.ts index 73ea1602..09c6d923 100644 --- a/auto-claude-ui/src/renderer/lib/mocks/insights-mock.ts +++ b/auto-claude-ui/src/renderer/lib/mocks/insights-mock.ts @@ -78,6 +78,11 @@ export const insightsMock = { return { success: true }; }, + updateInsightsModelConfig: async (_projectId: string, _sessionId: string, _modelConfig: unknown) => { + console.warn('[Browser Mock] updateInsightsModelConfig called'); + return { success: true }; + }, + sendInsightsMessage: () => { console.warn('[Browser Mock] sendInsightsMessage called'); }, diff --git a/auto-claude-ui/src/shared/constants/models.ts b/auto-claude-ui/src/shared/constants/models.ts index ce832c2c..42b61974 100644 --- a/auto-claude-ui/src/shared/constants/models.ts +++ b/auto-claude-ui/src/shared/constants/models.ts @@ -18,8 +18,8 @@ export const AVAILABLE_MODELS = [ // Maps model shorthand to actual Claude model IDs export const MODEL_ID_MAP: Record = { opus: 'claude-opus-4-5-20251101', - sonnet: 'claude-sonnet-4-5-20250929', - haiku: 'claude-haiku-4-5-20250929' + sonnet: 'claude-sonnet-4-5-20241022', + haiku: 'claude-haiku-4-5-20241022' } as const; // Maps thinking levels to budget tokens (null = no extended thinking) diff --git a/auto-claude-ui/src/shared/types/ipc.ts b/auto-claude-ui/src/shared/types/ipc.ts index c2fe0beb..072a8fca 100644 --- a/auto-claude-ui/src/shared/types/ipc.ts +++ b/auto-claude-ui/src/shared/types/ipc.ts @@ -86,7 +86,8 @@ import type { InsightsSession, InsightsSessionSummary, InsightsChatStatus, - InsightsStreamChunk + InsightsStreamChunk, + InsightsModelConfig } from './insights'; import type { Roadmap, @@ -461,7 +462,7 @@ export interface ElectronAPI { // Insights operations getInsightsSession: (projectId: string) => Promise>; - sendInsightsMessage: (projectId: string, message: string) => void; + sendInsightsMessage: (projectId: string, message: string, modelConfig?: InsightsModelConfig) => void; clearInsightsSession: (projectId: string) => Promise; createTaskFromInsights: ( projectId: string, @@ -474,6 +475,7 @@ export interface ElectronAPI { switchInsightsSession: (projectId: string, sessionId: string) => Promise>; deleteInsightsSession: (projectId: string, sessionId: string) => Promise; renameInsightsSession: (projectId: string, sessionId: string, newTitle: string) => Promise; + updateInsightsModelConfig: (projectId: string, sessionId: string, modelConfig: InsightsModelConfig) => Promise; // Insights event listeners onInsightsStreamChunk: ( diff --git a/auto-claude/agents/session.py b/auto-claude/agents/session.py index 30536559..39ae0458 100644 --- a/auto-claude/agents/session.py +++ b/auto-claude/agents/session.py @@ -412,7 +412,9 @@ async def run_agent_session( "session", f"Tool call #{tool_count}: {tool_name}", tool_input=tool_input, - full_input=str(block.input)[:500] if hasattr(block, "input") else None, + full_input=str(block.input)[:500] + if hasattr(block, "input") + else None, ) # Log tool start (handles printing too) diff --git a/auto-claude/qa/fixer.py b/auto-claude/qa/fixer.py index 266ab570..0901c9d2 100644 --- a/auto-claude/qa/fixer.py +++ b/auto-claude/qa/fixer.py @@ -238,7 +238,9 @@ async def run_qa_fixer_session( message_count=message_count, tool_count=tool_count, response_length=len(response_text), - ready_for_revalidation=status.get("ready_for_qa_revalidation") if status else False, + ready_for_revalidation=status.get("ready_for_qa_revalidation") + if status + else False, ) if status and status.get("ready_for_qa_revalidation"): debug_success("qa_fixer", "Fixes applied, ready for QA revalidation") diff --git a/auto-claude/qa/loop.py b/auto-claude/qa/loop.py index 891b441f..bfd04a60 100644 --- a/auto-claude/qa/loop.py +++ b/auto-claude/qa/loop.py @@ -164,7 +164,7 @@ async def run_qa_validation_loop( iteration_duration = time_module.time() - iteration_start debug( "qa_loop", - f"QA reviewer session completed", + "QA reviewer session completed", status=status, duration_seconds=f"{iteration_duration:.1f}", response_length=len(response), diff --git a/auto-claude/qa/reviewer.py b/auto-claude/qa/reviewer.py index 3b894f95..b5c0fc0b 100644 --- a/auto-claude/qa/reviewer.py +++ b/auto-claude/qa/reviewer.py @@ -85,7 +85,9 @@ async def run_qa_agent_session( # Load QA prompt prompt = load_qa_reviewer_prompt() - debug_detailed("qa_reviewer", "Loaded QA reviewer prompt", prompt_length=len(prompt)) + debug_detailed( + "qa_reviewer", "Loaded QA reviewer prompt", prompt_length=len(prompt) + ) # Add session context - use full path so agent can find files prompt += f"\n\n---\n\n**QA Session**: {qa_session}\n" @@ -246,7 +248,9 @@ async def run_qa_agent_session( return "rejected", response_text else: # Agent didn't update the status properly - debug_error("qa_reviewer", "QA agent did not update implementation_plan.json") + debug_error( + "qa_reviewer", "QA agent did not update implementation_plan.json" + ) return "error", "QA agent did not update implementation_plan.json" except Exception as e: diff --git a/auto-claude/run.py b/auto-claude/run.py index 689d682e..25c24869 100644 --- a/auto-claude/run.py +++ b/auto-claude/run.py @@ -31,7 +31,7 @@ Prerequisites: import sys # Python version check - must be before any imports using 3.10+ syntax -if sys.version_info < (3, 10): +if sys.version_info < (3, 10): # noqa: UP036 sys.exit( f"Error: Auto Claude requires Python 3.10 or higher.\n" f"You are running Python {sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}\n" diff --git a/auto-claude/runners/insights_runner.py b/auto-claude/runners/insights_runner.py index 81217061..462b8179 100644 --- a/auto-claude/runners/insights_runner.py +++ b/auto-claude/runners/insights_runner.py @@ -133,7 +133,7 @@ async def run_with_sdk( message: str, history: list, model: str = "claude-sonnet-4-5-20250929", - thinking_level: str = "medium" + thinking_level: str = "medium", ) -> None: """Run the chat using Claude SDK with streaming.""" if not SDK_AVAILABLE: @@ -334,13 +334,13 @@ def main(): parser.add_argument( "--model", default="claude-sonnet-4-5-20250929", - help="Claude model ID (default: claude-sonnet-4-5-20250929)" + help="Claude model ID (default: claude-sonnet-4-5-20250929)", ) parser.add_argument( "--thinking-level", default="medium", choices=["none", "low", "medium", "high", "ultrathink"], - help="Thinking level for extended reasoning (default: medium)" + help="Thinking level for extended reasoning (default: medium)", ) args = parser.parse_args() diff --git a/auto-claude/runners/spec_runner.py b/auto-claude/runners/spec_runner.py index 839c6780..f04eec55 100644 --- a/auto-claude/runners/spec_runner.py +++ b/auto-claude/runners/spec_runner.py @@ -36,7 +36,7 @@ Usage: import sys # Python version check - must be before any imports using 3.10+ syntax -if sys.version_info < (3, 10): +if sys.version_info < (3, 10): # noqa: UP036 sys.exit( f"Error: Auto Claude requires Python 3.10 or higher.\n" f"You are running Python {sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}\n" @@ -270,7 +270,11 @@ Examples: debug_error("spec_runner", "Spec creation failed") sys.exit(1) - debug_success("spec_runner", "Spec creation succeeded", spec_dir=str(orchestrator.spec_dir)) + debug_success( + "spec_runner", + "Spec creation succeeded", + spec_dir=str(orchestrator.spec_dir), + ) # Auto-start build unless --no-build is specified if not args.no_build: