diff --git a/src/agent/mock-manager.ts b/src/agent/mock-manager.ts index 6e6cd2f..9dad8c7 100644 --- a/src/agent/mock-manager.ts +++ b/src/agent/mock-manager.ts @@ -16,7 +16,7 @@ import type { PendingQuestions, QuestionItem, } from './types.js'; -import type { Decision, PhaseBreakdown } from './schema.js'; +import type { Decision, PhaseBreakdown, TaskBreakdown } from './schema.js'; import type { EventBus, AgentSpawnedEvent, @@ -30,10 +30,11 @@ import type { * Scenario configuration for mock agent behavior. * Uses discriminated union on status to match agent output schema. * - * Supports all three agent modes: + * Supports all four agent modes: * - execute: done/questions/unrecoverable_error * - discuss: questions/context_complete/unrecoverable_error * - breakdown: questions/breakdown_complete/unrecoverable_error + * - decompose: questions/decompose_complete/unrecoverable_error */ export type MockAgentScenario = // Execute mode statuses @@ -66,6 +67,12 @@ export type MockAgentScenario = status: 'breakdown_complete'; phases: PhaseBreakdown[]; delay?: number; + } + // Decompose mode status + | { + status: 'decompose_complete'; + tasks: TaskBreakdown[]; + delay?: number; }; /** @@ -329,6 +336,30 @@ export class MockAgentManager implements AgentManager { this.eventBus.emit(event); } break; + + case 'decompose_complete': + // Decompose mode completion - decomposed phase into tasks + record.result = { + success: true, + message: `Decomposed into ${scenario.tasks.length} tasks`, + }; + record.info.status = 'idle'; + record.info.updatedAt = new Date(); + + if (this.eventBus) { + const event: AgentStoppedEvent = { + type: 'agent:stopped', + timestamp: new Date(), + payload: { + agentId, + name: info.name, + taskId: info.taskId, + reason: 'decompose_complete', + }, + }; + this.eventBus.emit(event); + } + break; } }