diff --git a/apps/server/src/services/auto-mode-service.ts b/apps/server/src/services/auto-mode-service.ts index 23e4ac6a..fad4f9c1 100644 --- a/apps/server/src/services/auto-mode-service.ts +++ b/apps/server/src/services/auto-mode-service.ts @@ -4126,7 +4126,7 @@ This mock response was generated because AUTOMAKER_MOCK_AGENT=true was set. // Execute task with dedicated agent const taskStream = provider.executeQuery({ prompt: taskPrompt, - model: bareModel, + model: effectiveBareModel, maxTurns: Math.min(maxTurns || 100, 50), cwd: workDir, allowedTools: allowedTools, @@ -4210,14 +4210,10 @@ This mock response was generated because AUTOMAKER_MOCK_AGENT=true was set. logger.info(`Recovery: All tasks completed for feature ${featureId}`); // Extract and save final summary + // Note: saveFeatureSummary already emits auto_mode_summary event const summary = extractSummary(responseText); if (summary) { await this.saveFeatureSummary(projectPath, featureId, summary); - this.emitAutoModeEvent('auto_mode_summary', { - featureId, - projectPath, - summary, - }); } // Final write and cleanup @@ -4455,7 +4451,7 @@ After generating the revised spec, output: // Make revision call const revisionStream = provider.executeQuery({ prompt: revisionPrompt, - model: bareModel, + model: effectiveBareModel, maxTurns: maxTurns || 100, cwd: workDir, allowedTools: allowedTools, @@ -4613,7 +4609,7 @@ After generating the revised spec, output: // Execute task with dedicated agent const taskStream = provider.executeQuery({ prompt: taskPrompt, - model: bareModel, + model: effectiveBareModel, maxTurns: Math.min(maxTurns || 100, 50), // Limit turns per task cwd: workDir, allowedTools: allowedTools, @@ -4654,11 +4650,12 @@ After generating the revised spec, output: startTaskId, 'in_progress' ); - this.emitAutoModeEvent('auto_mode_task_start', { + this.emitAutoModeEvent('auto_mode_task_started', { featureId, projectPath, branchName, taskId: startTaskId, + taskDescription: task.description, taskIndex, tasksTotal: parsedTasks.length, }); @@ -4774,7 +4771,7 @@ After generating the revised spec, output: const continuationStream = provider.executeQuery({ prompt: continuationPrompt, - model: bareModel, + model: effectiveBareModel, maxTurns: maxTurns, cwd: workDir, allowedTools: allowedTools, @@ -5245,6 +5242,13 @@ After generating the revised spec, output: // Resume each interrupted feature for (const feature of interruptedFeatures) { try { + // Skip if feature is already running (prevents "already running" error) + if (this.runningFeatures.has(feature.id)) { + logger.info( + `Feature ${feature.id} (${feature.title}) is already running, skipping resume` + ); + continue; + } logger.info(`Resuming feature: ${feature.id} (${feature.title})`); // Use resumeFeature which will detect the existing context and continue await this.resumeFeature(projectPath, feature.id, true); diff --git a/apps/ui/src/components/views/board-view/dialogs/add-feature-dialog.tsx b/apps/ui/src/components/views/board-view/dialogs/add-feature-dialog.tsx index 040b2c8d..7b3ca3df 100644 --- a/apps/ui/src/components/views/board-view/dialogs/add-feature-dialog.tsx +++ b/apps/ui/src/components/views/board-view/dialogs/add-feature-dialog.tsx @@ -267,6 +267,13 @@ export function AddFeatureDialog({ allFeatures, ]); + // Clear requirePlanApproval when planning mode is skip or lite + useEffect(() => { + if (planningMode === 'skip' || planningMode === 'lite') { + setRequirePlanApproval(false); + } + }, [planningMode]); + const handleModelChange = (entry: PhaseModelEntry) => { setModelEntry(entry); }; diff --git a/apps/ui/src/components/views/board-view/dialogs/edit-feature-dialog.tsx b/apps/ui/src/components/views/board-view/dialogs/edit-feature-dialog.tsx index ebe74097..34baae2e 100644 --- a/apps/ui/src/components/views/board-view/dialogs/edit-feature-dialog.tsx +++ b/apps/ui/src/components/views/board-view/dialogs/edit-feature-dialog.tsx @@ -191,6 +191,13 @@ export function EditFeatureDialog({ } }, [feature, allFeatures]); + // Clear requirePlanApproval when planning mode is skip or lite + useEffect(() => { + if (planningMode === 'skip' || planningMode === 'lite') { + setRequirePlanApproval(false); + } + }, [planningMode]); + const handleModelChange = (entry: PhaseModelEntry) => { setModelEntry(entry); }; diff --git a/apps/ui/src/components/views/board-view/dialogs/mass-edit-dialog.tsx b/apps/ui/src/components/views/board-view/dialogs/mass-edit-dialog.tsx index 44eb137d..a1f0609f 100644 --- a/apps/ui/src/components/views/board-view/dialogs/mass-edit-dialog.tsx +++ b/apps/ui/src/components/views/board-view/dialogs/mass-edit-dialog.tsx @@ -198,6 +198,13 @@ export function MassEditDialog({ } }, [open, selectedFeatures]); + // Clear requirePlanApproval when planning mode is skip or lite + useEffect(() => { + if (planningMode === 'skip' || planningMode === 'lite') { + setRequirePlanApproval(false); + } + }, [planningMode]); + const handleApply = async () => { const updates: Partial = {}; diff --git a/libs/prompts/src/defaults.ts b/libs/prompts/src/defaults.ts index 52413b3a..48772de9 100644 --- a/libs/prompts/src/defaults.ts +++ b/libs/prompts/src/defaults.ts @@ -115,6 +115,23 @@ When approved, execute tasks SEQUENTIALLY in order. For each task: 3. AFTER completing, output: "[TASK_COMPLETE] T###: Brief summary" This allows real-time progress tracking during implementation. + +**CRITICAL: After completing ALL tasks, you MUST output a final summary using this EXACT format:** + + +## Summary: [Feature Title] + +### Changes Implemented +- [List all changes made across all tasks] + +### Files Modified +- [List all files that were created or modified] + +### Notes for Developer +- [Any important notes or considerations] + + +The and tags MUST be on their own lines. This summary is REQUIRED for the system to properly track completion. `; export const DEFAULT_AUTO_MODE_PLANNING_FULL = `## Full Specification Phase (Full SDD Mode) @@ -188,6 +205,23 @@ After completing all tasks in a phase, output: "[PHASE_COMPLETE] Phase N complete" This allows real-time progress tracking during implementation. + +**CRITICAL: After completing ALL phases and ALL tasks, you MUST output a final summary using this EXACT format:** + + +## Summary: [Feature Title] + +### Changes Implemented +- [List all changes made across all phases and tasks] + +### Files Modified +- [List all files that were created or modified] + +### Notes for Developer +- [Any important notes or considerations] + + +The and tags MUST be on their own lines. This summary is REQUIRED for the system to properly track completion. `; export const DEFAULT_AUTO_MODE_FEATURE_PROMPT_TEMPLATE = `## Feature Implementation Task @@ -808,7 +842,26 @@ You are executing a specific task as part of a larger feature implementation. 1. Focus ONLY on completing task {{taskId}}: "{{taskDescription}}" 2. Do not work on other tasks 3. Use the existing codebase patterns -4. When done, summarize what you implemented +4. When done, output "[TASK_COMPLETE] {{taskId}}: Brief summary of what you did" + +{{#unless remainingTasks}} +**IMPORTANT - THIS IS THE FINAL TASK**: After completing this task, you MUST output a complete feature summary using this EXACT format: + + +## Summary: [Feature Title] + +### Changes Implemented +- [List ALL changes made across ALL tasks in this feature] + +### Files Modified +- [List ALL files created or modified] + +### Notes for Developer +- [Any important notes] + + +The and tags MUST be on their own lines. This is REQUIRED. +{{/unless}} Begin implementing task {{taskId}} now.`; @@ -820,7 +873,11 @@ Implement this feature by: 3. Write the necessary code changes 4. Ensure the code follows existing patterns and conventions -When done, wrap your final summary in tags like this: +## CRITICAL: Summary Output Requirement + +**IMPORTANT**: After completing ALL implementation work, you MUST output a final summary using the EXACT format below. This is REQUIRED for the system to track your work properly. + +**You MUST wrap your summary in tags like this:** ## Summary: [Feature Title] @@ -835,7 +892,14 @@ When done, wrap your final summary in tags like this: - [Any important notes] -This helps parse your summary correctly in the output logs.`; +**Rules for summary output:** +- The opening tag MUST be on its own line +- The closing tag MUST be on its own line +- Include ALL changes you made during implementation +- Output this summary as the FINAL thing before stopping +- Do NOT skip the summary even if you think the feature is simple + +This is not optional - the system parses this to update the feature status.`; export const DEFAULT_PLAYWRIGHT_VERIFICATION_INSTRUCTIONS = `## Verification with Playwright (REQUIRED) @@ -918,7 +982,24 @@ export const DEFAULT_CONTINUATION_AFTER_APPROVAL_TEMPLATE = `The plan/specificat ## Instructions -Implement all the changes described in the plan above.`; +Implement all the changes described in the plan above. + +**CRITICAL: After completing ALL implementation work, you MUST output a final summary using this EXACT format:** + + +## Summary: [Feature Title] + +### Changes Implemented +- [List ALL changes made during implementation] + +### Files Modified +- [List ALL files created or modified] + +### Notes for Developer +- [Any important notes] + + +The and tags MUST be on their own lines. This summary is REQUIRED for the system to track your work.`; export const DEFAULT_RESUME_FEATURE_TEMPLATE = `## Continuing Feature Implementation @@ -930,7 +1011,24 @@ The following is the output from a previous implementation attempt. Continue fro {{previousContext}} ## Instructions -Review the previous work and continue the implementation. If the feature appears complete, verify it works correctly.`; +Review the previous work and continue the implementation. If the feature appears complete, verify it works correctly. + +**CRITICAL: When the feature is complete, you MUST output a final summary using this EXACT format:** + + +## Summary: [Feature Title] + +### Changes Implemented +- [List ALL changes made, including from previous context] + +### Files Modified +- [List ALL files created or modified] + +### Notes for Developer +- [Any important notes] + + +The and tags MUST be on their own lines. This summary is REQUIRED.`; export const DEFAULT_PROJECT_ANALYSIS_PROMPT = `Analyze this project and provide a summary of: 1. Project structure and architecture