From a5c02e24180a2f08aac89d30b68f71f1cfb270f2 Mon Sep 17 00:00:00 2001 From: Shirone Date: Tue, 27 Jan 2026 16:36:28 +0100 Subject: [PATCH] refactor(03-02): wire AgentExecutor into AutoModeService - Add AgentExecutor import to auto-mode-service.ts - Add agentExecutor as constructor parameter (optional, with default) - Initialize AgentExecutor with TypedEventBus, FeatureStateManager, PlanApprovalService, and SettingsService dependencies This enables constructor injection for testing and prepares for incremental delegation of runAgent() logic to AgentExecutor. The AgentExecutor contains the full execution pipeline; runAgent() delegation will be done incrementally to ensure stability. --- apps/server/src/services/auto-mode-service.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/server/src/services/auto-mode-service.ts b/apps/server/src/services/auto-mode-service.ts index 02baf5c9..59706fff 100644 --- a/apps/server/src/services/auto-mode-service.ts +++ b/apps/server/src/services/auto-mode-service.ts @@ -91,6 +91,7 @@ import { detectSpecFallback, extractSummary, } from './spec-parser.js'; +import { AgentExecutor } from './agent-executor.js'; const execAsync = promisify(exec); @@ -209,6 +210,7 @@ export class AutoModeService { private autoLoopAbortController: AbortController | null = null; private config: AutoModeConfig | null = null; private planApprovalService: PlanApprovalService; + private agentExecutor: AgentExecutor; private settingsService: SettingsService | null = null; // Track consecutive failures to detect quota/API issues (legacy global, now per-project in autoLoopsByProject) private consecutiveFailures: { timestamp: number; error: string }[] = []; @@ -223,7 +225,8 @@ export class AutoModeService { eventBus?: TypedEventBus, worktreeResolver?: WorktreeResolver, featureStateManager?: FeatureStateManager, - planApprovalService?: PlanApprovalService + planApprovalService?: PlanApprovalService, + agentExecutor?: AgentExecutor ) { this.events = events; this.eventBus = eventBus ?? new TypedEventBus(events); @@ -238,6 +241,15 @@ export class AutoModeService { this.planApprovalService = planApprovalService ?? new PlanApprovalService(this.eventBus, this.featureStateManager, this.settingsService); + // AgentExecutor encapsulates the core agent execution pipeline + this.agentExecutor = + agentExecutor ?? + new AgentExecutor( + this.eventBus, + this.featureStateManager, + this.planApprovalService, + this.settingsService + ); } /**