rafcode 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +32 -0
- package/CLAUDE.md +187 -0
- package/LICENSE +21 -0
- package/RAF/001-raf-task-improvements/input.md +9 -0
- package/RAF/001-raf-task-improvements/outcomes/001-add-decisions-folder.md +21 -0
- package/RAF/001-raf-task-improvements/outcomes/002-fix-write-error-on-shutdown.md +22 -0
- package/RAF/001-raf-task-improvements/outcomes/003-stash-changes-on-failure.md +34 -0
- package/RAF/001-raf-task-improvements/outcomes/004-add-project-name-to-commits.md +28 -0
- package/RAF/001-raf-task-improvements/outcomes/005-add-running-time-display.md +36 -0
- package/RAF/001-raf-task-improvements/outcomes/006-add-task-name-to-logs.md +22 -0
- package/RAF/001-raf-task-improvements/outcomes/007-show-model-at-task-start.md +52 -0
- package/RAF/001-raf-task-improvements/outcomes/009-remove-editor-placeholder-text.md +20 -0
- package/RAF/001-raf-task-improvements/outcomes/SUMMARY.md +83 -0
- package/RAF/001-raf-task-improvements/plans/001-add-decisions-folder.md +38 -0
- package/RAF/001-raf-task-improvements/plans/002-fix-write-error-on-shutdown.md +33 -0
- package/RAF/001-raf-task-improvements/plans/003-stash-changes-on-failure.md +37 -0
- package/RAF/001-raf-task-improvements/plans/004-add-project-name-to-commits.md +34 -0
- package/RAF/001-raf-task-improvements/plans/005-add-running-time-display.md +39 -0
- package/RAF/001-raf-task-improvements/plans/006-add-task-name-to-logs.md +37 -0
- package/RAF/001-raf-task-improvements/plans/009-remove-editor-placeholder-text.md +34 -0
- package/RAF/002-raf-task-improvements-execution/decisions/DECISIONS.md +13 -0
- package/RAF/002-raf-task-improvements-execution/input.md +3 -0
- package/RAF/002-raf-task-improvements-execution/outcomes/001-commit-show-model-at-task-start.md +17 -0
- package/RAF/002-raf-task-improvements-execution/outcomes/002-delete-skipped-plan.md +23 -0
- package/RAF/002-raf-task-improvements-execution/outcomes/SUMMARY.md +32 -0
- package/RAF/002-raf-task-improvements-execution/plans/001-commit-show-model-at-task-start.md +37 -0
- package/RAF/002-raf-task-improvements-execution/plans/002-delete-skipped-plan.md +23 -0
- package/RAF/003-multi-project-execution/decisions/DECISIONS.md +68 -0
- package/RAF/003-multi-project-execution/input.md +6 -0
- package/RAF/003-multi-project-execution/outcomes/001-remove-state-json.md +52 -0
- package/RAF/003-multi-project-execution/outcomes/002-update-raf-status.md +50 -0
- package/RAF/003-multi-project-execution/outcomes/003-simplify-git-logic.md +35 -0
- package/RAF/003-multi-project-execution/outcomes/004-auto-commit-planning.md +43 -0
- package/RAF/003-multi-project-execution/outcomes/005-rerun-failed-tasks.md +43 -0
- package/RAF/003-multi-project-execution/outcomes/006-multi-project-execution.md +42 -0
- package/RAF/003-multi-project-execution/outcomes/007-verify-timeout.md +54 -0
- package/RAF/003-multi-project-execution/outcomes/008-move-decisions-file.md +38 -0
- package/RAF/003-multi-project-execution/outcomes/SUMMARY.md +79 -0
- package/RAF/003-multi-project-execution/plans/001-remove-state-json.md +71 -0
- package/RAF/003-multi-project-execution/plans/002-update-raf-status.md +65 -0
- package/RAF/003-multi-project-execution/plans/003-simplify-git-logic.md +74 -0
- package/RAF/003-multi-project-execution/plans/004-auto-commit-planning.md +57 -0
- package/RAF/003-multi-project-execution/plans/005-rerun-failed-tasks.md +69 -0
- package/RAF/003-multi-project-execution/plans/006-multi-project-execution.md +81 -0
- package/RAF/003-multi-project-execution/plans/007-verify-timeout.md +63 -0
- package/RAF/003-multi-project-execution/plans/008-move-decisions-file.md +78 -0
- package/RAF/004-task-naming-optimization/decisions.md +22 -0
- package/RAF/004-task-naming-optimization/input.md +6 -0
- package/RAF/004-task-naming-optimization/outcomes/001-remove-summary-file.md +17 -0
- package/RAF/004-task-naming-optimization/outcomes/002-base36-project-numbering.md +32 -0
- package/RAF/004-task-naming-optimization/outcomes/003-improve-haiku-prompt.md +20 -0
- package/RAF/004-task-naming-optimization/outcomes/SUMMARY.md +28 -0
- package/RAF/004-task-naming-optimization/plans/001-remove-summary-file.md +34 -0
- package/RAF/004-task-naming-optimization/plans/002-base36-project-numbering.md +56 -0
- package/RAF/004-task-naming-optimization/plans/003-improve-haiku-prompt.md +50 -0
- package/RAF/005-task-naming-improvements/decisions.md +60 -0
- package/RAF/005-task-naming-improvements/input.md +2 -0
- package/RAF/005-task-naming-improvements/outcomes/001-enhance-identifier-resolution.md +42 -0
- package/RAF/005-task-naming-improvements/outcomes/002-add-identifier-support-to-status.md +38 -0
- package/RAF/005-task-naming-improvements/outcomes/003-update-do-for-full-folder-names.md +44 -0
- package/RAF/005-task-naming-improvements/outcomes/004-implement-amend-flag-for-plan.md +55 -0
- package/RAF/005-task-naming-improvements/outcomes/005-commit-outcomes-on-complete.md +47 -0
- package/RAF/005-task-naming-improvements/outcomes/006-update-execution-prompt-commit-schema.md +40 -0
- package/RAF/005-task-naming-improvements/outcomes/007-allow-pending-task-amendments.md +38 -0
- package/RAF/005-task-naming-improvements/outcomes/008-fix-timeout-label.md +24 -0
- package/RAF/005-task-naming-improvements/plans/001-enhance-identifier-resolution.md +46 -0
- package/RAF/005-task-naming-improvements/plans/002-add-identifier-support-to-status.md +36 -0
- package/RAF/005-task-naming-improvements/plans/003-update-do-for-full-folder-names.md +38 -0
- package/RAF/005-task-naming-improvements/plans/004-implement-amend-flag-for-plan.md +67 -0
- package/RAF/005-task-naming-improvements/plans/005-commit-outcomes-on-complete.md +86 -0
- package/RAF/005-task-naming-improvements/plans/006-update-execution-prompt-commit-schema.md +60 -0
- package/RAF/005-task-naming-improvements/plans/007-allow-pending-task-amendments.md +60 -0
- package/RAF/005-task-naming-improvements/plans/008-fix-timeout-label.md +31 -0
- package/RAF/006-fix-double-summary-headers/decisions.md +28 -0
- package/RAF/006-fix-double-summary-headers/input.md +3 -0
- package/RAF/006-fix-double-summary-headers/outcomes/001-fix-double-summary-headers.md +29 -0
- package/RAF/006-fix-double-summary-headers/outcomes/002-update-readme-for-npm.md +31 -0
- package/RAF/006-fix-double-summary-headers/outcomes/003-npm-publish-instructions.md +30 -0
- package/RAF/006-fix-double-summary-headers/outcomes/004-flexible-project-lookup.md +47 -0
- package/RAF/006-fix-double-summary-headers/plans/001-fix-double-summary-headers.md +42 -0
- package/RAF/006-fix-double-summary-headers/plans/002-update-readme-for-npm.md +44 -0
- package/RAF/006-fix-double-summary-headers/plans/003-npm-publish-instructions.md +45 -0
- package/RAF/006-fix-double-summary-headers/plans/004-flexible-project-lookup.md +40 -0
- package/RAF/007-improve-outcome-format/decisions.md +28 -0
- package/RAF/007-improve-outcome-format/input.md +2 -0
- package/RAF/007-improve-outcome-format/outcomes/001-update-execution-prompt.md +10 -0
- package/RAF/007-improve-outcome-format/outcomes/002-update-state-derivation.md +17 -0
- package/RAF/007-improve-outcome-format/outcomes/003-update-do-command-outcome-handling.md +16 -0
- package/RAF/007-improve-outcome-format/outcomes/004-implement-failure-analysis.md +16 -0
- package/RAF/007-improve-outcome-format/outcomes/005-update-documentation.md +15 -0
- package/RAF/007-improve-outcome-format/plans/001-update-execution-prompt.md +36 -0
- package/RAF/007-improve-outcome-format/plans/002-update-state-derivation.md +35 -0
- package/RAF/007-improve-outcome-format/plans/003-update-do-command-outcome-handling.md +37 -0
- package/RAF/007-improve-outcome-format/plans/004-implement-failure-analysis.md +44 -0
- package/RAF/007-improve-outcome-format/plans/005-update-documentation.md +33 -0
- package/RAF/008-beautiful-do/decisions.md +31 -0
- package/RAF/008-beautiful-do/input.md +1 -0
- package/RAF/008-beautiful-do/outcomes/001-terminal-symbols.md +55 -0
- package/RAF/008-beautiful-do/outcomes/002-refactor-do-output.md +95 -0
- package/RAF/008-beautiful-do/outcomes/003-refactor-status-output.md +71 -0
- package/RAF/008-beautiful-do/outcomes/004-simplify-logger.md +53 -0
- package/RAF/008-beautiful-do/outcomes/005-add-tests.md +41 -0
- package/RAF/008-beautiful-do/plans/001-terminal-symbols.md +41 -0
- package/RAF/008-beautiful-do/plans/002-refactor-do-output.md +44 -0
- package/RAF/008-beautiful-do/plans/003-refactor-status-output.md +37 -0
- package/RAF/008-beautiful-do/plans/004-simplify-logger.md +32 -0
- package/RAF/008-beautiful-do/plans/005-add-tests.md +40 -0
- package/RAF/009-system-promt-ammend/decisions.md +13 -0
- package/RAF/009-system-promt-ammend/input.md +9 -0
- package/RAF/009-system-promt-ammend/outcomes/001-model-override.md +79 -0
- package/RAF/009-system-promt-ammend/outcomes/002-system-prompt-append.md +51 -0
- package/RAF/009-system-promt-ammend/outcomes/003-retry-context.md +60 -0
- package/RAF/009-system-promt-ammend/plans/001-model-override.md +61 -0
- package/RAF/009-system-promt-ammend/plans/002-system-prompt-append.md +56 -0
- package/RAF/009-system-promt-ammend/plans/003-retry-context.md +76 -0
- package/RAF/010-outcome-marker-fallback/decisions.md +19 -0
- package/RAF/010-outcome-marker-fallback/input.md +1 -0
- package/RAF/010-outcome-marker-fallback/outcomes/001-outcome-file-marker-fallback.md +35 -0
- package/RAF/010-outcome-marker-fallback/outcomes/002-creative-project-naming.md +47 -0
- package/RAF/010-outcome-marker-fallback/plans/001-outcome-file-marker-fallback.md +58 -0
- package/RAF/010-outcome-marker-fallback/plans/002-creative-project-naming.md +68 -0
- package/RAF/011-do-task-in-commit/decisions.md +22 -0
- package/RAF/011-do-task-in-commit/input.md +1 -0
- package/RAF/011-do-task-in-commit/outcomes/001-update-execution-prompt.md +54 -0
- package/RAF/011-do-task-in-commit/outcomes/002-update-tests.md +61 -0
- package/RAF/011-do-task-in-commit/outcomes/003-update-documentation.md +51 -0
- package/RAF/011-do-task-in-commit/plans/001-update-execution-prompt.md +46 -0
- package/RAF/011-do-task-in-commit/plans/002-update-tests.md +51 -0
- package/RAF/011-do-task-in-commit/plans/003-update-documentation.md +45 -0
- package/RAF/012-name-picker-buffet/decisions.md +40 -0
- package/RAF/012-name-picker-buffet/input.md +6 -0
- package/RAF/012-name-picker-buffet/outcomes/001-name-picker-for-raf-plan.md +49 -0
- package/RAF/012-name-picker-buffet/outcomes/002-interactive-project-picker-for-raf-do.md +49 -0
- package/RAF/012-name-picker-buffet/outcomes/003-raf-status-truncation.md +55 -0
- package/RAF/012-name-picker-buffet/outcomes/004-failure-reason-details.md +65 -0
- package/RAF/012-name-picker-buffet/outcomes/005-remove-raf-commits.md +57 -0
- package/RAF/012-name-picker-buffet/outcomes/006-update-execution-prompt-for-commits.md +47 -0
- package/RAF/012-name-picker-buffet/outcomes/007-fix-plan-mode-user-prompt.md +83 -0
- package/RAF/012-name-picker-buffet/outcomes/008-add-auto-flag-for-plan-mode.md +77 -0
- package/RAF/012-name-picker-buffet/plans/001-name-picker-for-raf-plan.md +47 -0
- package/RAF/012-name-picker-buffet/plans/002-interactive-project-picker-for-raf-do.md +43 -0
- package/RAF/012-name-picker-buffet/plans/003-raf-status-truncation.md +36 -0
- package/RAF/012-name-picker-buffet/plans/004-failure-reason-details.md +46 -0
- package/RAF/012-name-picker-buffet/plans/005-remove-raf-commits.md +42 -0
- package/RAF/012-name-picker-buffet/plans/006-update-execution-prompt-for-commits.md +47 -0
- package/RAF/012-name-picker-buffet/plans/007-fix-plan-mode-user-prompt.md +55 -0
- package/RAF/012-name-picker-buffet/plans/008-add-auto-flag-for-plan-mode.md +49 -0
- package/RAF/013-dependencies-watchdog/decisions.md +37 -0
- package/RAF/013-dependencies-watchdog/input.md +1 -0
- package/RAF/013-dependencies-watchdog/outcomes/001-define-dependency-syntax.md +56 -0
- package/RAF/013-dependencies-watchdog/outcomes/002-update-planning-prompts.md +60 -0
- package/RAF/013-dependencies-watchdog/outcomes/003-parse-dependencies-update-state.md +81 -0
- package/RAF/013-dependencies-watchdog/outcomes/004-implement-dependency-checking-in-do.md +116 -0
- package/RAF/013-dependencies-watchdog/outcomes/005-update-execution-prompts.md +75 -0
- package/RAF/013-dependencies-watchdog/outcomes/006-add-tests.md +100 -0
- package/RAF/013-dependencies-watchdog/outcomes/007-add-act-alias.md +46 -0
- package/RAF/013-dependencies-watchdog/outcomes/008-add-exit-message.md +52 -0
- package/RAF/013-dependencies-watchdog/plans/001-define-dependency-syntax.md +32 -0
- package/RAF/013-dependencies-watchdog/plans/002-update-planning-prompts.md +38 -0
- package/RAF/013-dependencies-watchdog/plans/003-parse-dependencies-update-state.md +46 -0
- package/RAF/013-dependencies-watchdog/plans/004-implement-dependency-checking-in-do.md +48 -0
- package/RAF/013-dependencies-watchdog/plans/005-update-execution-prompts.md +44 -0
- package/RAF/013-dependencies-watchdog/plans/006-add-tests.md +54 -0
- package/RAF/013-dependencies-watchdog/plans/007-add-act-alias.md +26 -0
- package/RAF/013-dependencies-watchdog/plans/008-add-exit-message.md +31 -0
- package/RAF/014-watchdog/decisions.md +16 -0
- package/RAF/014-watchdog/input.md +2 -0
- package/RAF/014-watchdog/outcomes/001-amend-flag-position.md +50 -0
- package/RAF/014-watchdog/outcomes/002-details-only-on-failure.md +58 -0
- package/RAF/014-watchdog/plans/001-amend-flag-position.md +34 -0
- package/RAF/014-watchdog/plans/002-details-only-on-failure.md +46 -0
- package/RAF/015-name-lottery/decisions.md +14 -0
- package/RAF/015-name-lottery/input.md +3 -0
- package/RAF/015-name-lottery/outcomes/001-auto-pick-project-name.md +31 -0
- package/RAF/015-name-lottery/outcomes/002-mention-plan-files-in-commit.md +23 -0
- package/RAF/015-name-lottery/outcomes/003-fix-input-md-in-amend-flow.md +44 -0
- package/RAF/015-name-lottery/plans/001-auto-pick-project-name.md +38 -0
- package/RAF/015-name-lottery/plans/002-mention-plan-files-in-commit.md +32 -0
- package/RAF/015-name-lottery/plans/003-fix-input-md-in-amend-flow.md +44 -0
- package/README.md +116 -0
- package/dist/commands/do.d.ts +12 -0
- package/dist/commands/do.d.ts.map +1 -0
- package/dist/commands/do.js +684 -0
- package/dist/commands/do.js.map +1 -0
- package/dist/commands/plan.d.ts +3 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +345 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +117 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/core/claude-runner.d.ts +78 -0
- package/dist/core/claude-runner.d.ts.map +1 -0
- package/dist/core/claude-runner.js +297 -0
- package/dist/core/claude-runner.js.map +1 -0
- package/dist/core/editor.d.ts +10 -0
- package/dist/core/editor.d.ts.map +1 -0
- package/dist/core/editor.js +77 -0
- package/dist/core/editor.js.map +1 -0
- package/dist/core/failure-analyzer.d.ts +28 -0
- package/dist/core/failure-analyzer.d.ts.map +1 -0
- package/dist/core/failure-analyzer.js +305 -0
- package/dist/core/failure-analyzer.js.map +1 -0
- package/dist/core/git.d.ts +42 -0
- package/dist/core/git.d.ts.map +1 -0
- package/dist/core/git.js +148 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/project-manager.d.ts +72 -0
- package/dist/core/project-manager.d.ts.map +1 -0
- package/dist/core/project-manager.js +193 -0
- package/dist/core/project-manager.js.map +1 -0
- package/dist/core/retry-handler.d.ts +19 -0
- package/dist/core/retry-handler.d.ts.map +1 -0
- package/dist/core/retry-handler.js +51 -0
- package/dist/core/retry-handler.js.map +1 -0
- package/dist/core/shutdown-handler.d.ts +30 -0
- package/dist/core/shutdown-handler.d.ts.map +1 -0
- package/dist/core/shutdown-handler.js +79 -0
- package/dist/core/shutdown-handler.js.map +1 -0
- package/dist/core/state-derivation.d.ts +82 -0
- package/dist/core/state-derivation.d.ts.map +1 -0
- package/dist/core/state-derivation.js +271 -0
- package/dist/core/state-derivation.js.map +1 -0
- package/dist/core/state-manager.d.ts +54 -0
- package/dist/core/state-manager.d.ts.map +1 -0
- package/dist/core/state-manager.js +198 -0
- package/dist/core/state-manager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/output-parser.d.ts +19 -0
- package/dist/parsers/output-parser.d.ts.map +1 -0
- package/dist/parsers/output-parser.js +137 -0
- package/dist/parsers/output-parser.js.map +1 -0
- package/dist/prompts/amend.d.ts +20 -0
- package/dist/prompts/amend.d.ts.map +1 -0
- package/dist/prompts/amend.js +166 -0
- package/dist/prompts/amend.js.map +1 -0
- package/dist/prompts/execution.d.ts +30 -0
- package/dist/prompts/execution.d.ts.map +1 -0
- package/dist/prompts/execution.js +179 -0
- package/dist/prompts/execution.js.map +1 -0
- package/dist/prompts/planning.d.ts +15 -0
- package/dist/prompts/planning.d.ts.map +1 -0
- package/dist/prompts/planning.js +163 -0
- package/dist/prompts/planning.js.map +1 -0
- package/dist/types/config.d.ts +26 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +7 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/state.d.ts +33 -0
- package/dist/types/state.d.ts.map +1 -0
- package/dist/types/state.js +28 -0
- package/dist/types/state.js.map +1 -0
- package/dist/ui/name-picker-subprocess.d.ts +11 -0
- package/dist/ui/name-picker-subprocess.d.ts.map +1 -0
- package/dist/ui/name-picker-subprocess.js +83 -0
- package/dist/ui/name-picker-subprocess.js.map +1 -0
- package/dist/ui/name-picker.d.ts +19 -0
- package/dist/ui/name-picker.d.ts.map +1 -0
- package/dist/ui/name-picker.js +173 -0
- package/dist/ui/name-picker.js.map +1 -0
- package/dist/ui/project-picker.d.ts +27 -0
- package/dist/ui/project-picker.d.ts.map +1 -0
- package/dist/ui/project-picker.js +58 -0
- package/dist/ui/project-picker.js.map +1 -0
- package/dist/utils/config.d.ts +24 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +63 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +32 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +60 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/name-generator.d.ts +20 -0
- package/dist/utils/name-generator.d.ts.map +1 -0
- package/dist/utils/name-generator.js +183 -0
- package/dist/utils/name-generator.js.map +1 -0
- package/dist/utils/paths.d.ts +132 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +412 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/status-line.d.ts +14 -0
- package/dist/utils/status-line.d.ts.map +1 -0
- package/dist/utils/status-line.js +36 -0
- package/dist/utils/status-line.js.map +1 -0
- package/dist/utils/terminal-symbols.d.ts +50 -0
- package/dist/utils/terminal-symbols.d.ts.map +1 -0
- package/dist/utils/terminal-symbols.js +97 -0
- package/dist/utils/terminal-symbols.js.map +1 -0
- package/dist/utils/timer.d.ts +17 -0
- package/dist/utils/timer.d.ts.map +1 -0
- package/dist/utils/timer.js +56 -0
- package/dist/utils/timer.js.map +1 -0
- package/dist/utils/validation.d.ts +17 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +106 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils/version.d.ts +2 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +12 -0
- package/dist/utils/version.js.map +1 -0
- package/jest.config.ts +30 -0
- package/package.json +55 -0
- package/src/commands/do.ts +829 -0
- package/src/commands/plan.ts +422 -0
- package/src/commands/status.ts +146 -0
- package/src/core/claude-runner.ts +374 -0
- package/src/core/editor.ts +85 -0
- package/src/core/failure-analyzer.ts +372 -0
- package/src/core/git.ts +166 -0
- package/src/core/project-manager.ts +243 -0
- package/src/core/retry-handler.ts +72 -0
- package/src/core/shutdown-handler.ts +93 -0
- package/src/core/state-derivation.ts +343 -0
- package/src/index.ts +20 -0
- package/src/parsers/output-parser.ts +164 -0
- package/src/prompts/amend.ts +194 -0
- package/src/prompts/execution.ts +223 -0
- package/src/prompts/planning.ts +175 -0
- package/src/types/config.ts +35 -0
- package/src/ui/name-picker-subprocess.ts +96 -0
- package/src/ui/name-picker.ts +198 -0
- package/src/ui/project-picker.ts +80 -0
- package/src/utils/config.ts +69 -0
- package/src/utils/logger.ts +81 -0
- package/src/utils/name-generator.ts +211 -0
- package/src/utils/paths.ts +497 -0
- package/src/utils/status-line.ts +45 -0
- package/src/utils/terminal-symbols.ts +124 -0
- package/src/utils/timer.ts +64 -0
- package/src/utils/validation.ts +132 -0
- package/src/utils/version.ts +12 -0
- package/tests/unit/claude-runner-interactive.test.ts +343 -0
- package/tests/unit/claude-runner.test.ts +629 -0
- package/tests/unit/command-output.test.ts +295 -0
- package/tests/unit/config.test.ts +72 -0
- package/tests/unit/dependency-integration.test.ts +559 -0
- package/tests/unit/do-blocked-tasks.test.ts +323 -0
- package/tests/unit/do-command.test.ts +198 -0
- package/tests/unit/do-multiproject.test.ts +270 -0
- package/tests/unit/do-rerun.test.ts +270 -0
- package/tests/unit/execution-prompt.test.ts +406 -0
- package/tests/unit/failure-analyzer.test.ts +276 -0
- package/tests/unit/failure-history.test.ts +143 -0
- package/tests/unit/git-stash.test.ts +138 -0
- package/tests/unit/git.test.ts +80 -0
- package/tests/unit/logger.test.ts +132 -0
- package/tests/unit/name-generator.test.ts +283 -0
- package/tests/unit/name-picker.test.ts +179 -0
- package/tests/unit/outcome-content.test.ts +166 -0
- package/tests/unit/output-parser.test.ts +178 -0
- package/tests/unit/paths.test.ts +741 -0
- package/tests/unit/plan-command-amend-flag.test.ts +115 -0
- package/tests/unit/plan-command-amend-input.test.ts +156 -0
- package/tests/unit/plan-command-auto-flag.test.ts +112 -0
- package/tests/unit/plan-command.test.ts +580 -0
- package/tests/unit/planning-prompt.test.ts +137 -0
- package/tests/unit/project-manager.test.ts +265 -0
- package/tests/unit/project-picker.test.ts +338 -0
- package/tests/unit/retry-handler.test.ts +89 -0
- package/tests/unit/state-derivation.test.ts +714 -0
- package/tests/unit/status-command.test.ts +271 -0
- package/tests/unit/status-line.test.ts +92 -0
- package/tests/unit/terminal-symbols.test.ts +214 -0
- package/tests/unit/timer.test.ts +102 -0
- package/tests/unit/validation.test.ts +118 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Task: Parse Dependencies and Update State Derivation
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Add dependency parsing to plan file reading and extend state derivation to include a new `blocked` status.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Plan files now contain an optional Dependencies section. The state derivation system needs to parse these dependencies and determine when tasks are blocked (when any dependency has failed).
|
|
8
|
+
|
|
9
|
+
## Dependencies
|
|
10
|
+
001
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
- Parse `## Dependencies` section from plan files
|
|
14
|
+
- Extract comma-separated task IDs (e.g., "001, 002" → ["001", "002"])
|
|
15
|
+
- Add new `blocked` status to `DerivedTask` type (in addition to pending, completed, failed)
|
|
16
|
+
- A task is `blocked` when any of its dependencies have status `failed` or `blocked`
|
|
17
|
+
- Add new `<promise>BLOCKED</promise>` marker recognition in outcome parsing
|
|
18
|
+
- Update `DerivedTask` interface to include `dependencies: string[]` field
|
|
19
|
+
- Update `getNextExecutableTask()` to skip blocked tasks
|
|
20
|
+
|
|
21
|
+
## Implementation Steps
|
|
22
|
+
1. Update `src/types/index.ts`:
|
|
23
|
+
- Add `'blocked'` to TaskStatus union type
|
|
24
|
+
- Add `dependencies: string[]` to DerivedTask interface
|
|
25
|
+
2. Create dependency parser in `src/parsers/` or add to existing parser:
|
|
26
|
+
- Function to extract Dependencies section from plan content
|
|
27
|
+
- Parse comma-separated IDs into string array
|
|
28
|
+
- Handle missing section (return empty array)
|
|
29
|
+
3. Update `src/core/state-derivation.ts`:
|
|
30
|
+
- Modify `deriveProjectState()` to read dependencies from each plan
|
|
31
|
+
- Add logic to determine blocked status based on dependency states
|
|
32
|
+
- Update `parseOutcomeStatus()` to recognize BLOCKED marker
|
|
33
|
+
4. Update `getNextExecutableTask()` to skip blocked tasks (don't return them for execution)
|
|
34
|
+
|
|
35
|
+
## Acceptance Criteria
|
|
36
|
+
- [ ] DerivedTask includes dependencies array
|
|
37
|
+
- [ ] TaskStatus includes 'blocked'
|
|
38
|
+
- [ ] Dependencies correctly parsed from plan files
|
|
39
|
+
- [ ] Tasks with failed/blocked dependencies have status 'blocked'
|
|
40
|
+
- [ ] BLOCKED marker recognized in outcome files
|
|
41
|
+
- [ ] getNextExecutableTask() skips blocked tasks
|
|
42
|
+
|
|
43
|
+
## Notes
|
|
44
|
+
- Blocked status is derived, not persisted - calculated each time state is derived
|
|
45
|
+
- A task becomes blocked when ANY dependency fails (not all)
|
|
46
|
+
- Blocked tasks stay blocked until the failed dependency is fixed and re-run
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Task: Implement Dependency Checking in `raf do`
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Update the `raf do` command to detect blocked tasks and automatically create blocked outcome files instead of attempting execution.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
When executing a project, if a task fails, any tasks that depend on it should be automatically marked as blocked. This prevents wasting time attempting tasks that cannot succeed because their prerequisites failed.
|
|
8
|
+
|
|
9
|
+
## Dependencies
|
|
10
|
+
003
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
- Before executing a task, check if it's blocked (has failed/blocked dependencies)
|
|
14
|
+
- For blocked tasks, skip Claude execution entirely
|
|
15
|
+
- Generate a blocked outcome file with:
|
|
16
|
+
- Explanation of which dependency failed
|
|
17
|
+
- List of failed/blocked dependency task IDs
|
|
18
|
+
- End with `<promise>BLOCKED</promise>` marker
|
|
19
|
+
- Show clear console output when a task is blocked
|
|
20
|
+
- Update progress display to show blocked tasks distinctly
|
|
21
|
+
- Blocked tasks should be processed in order (to cascade blocking properly)
|
|
22
|
+
|
|
23
|
+
## Implementation Steps
|
|
24
|
+
1. Update `src/commands/do.ts` task execution loop:
|
|
25
|
+
- Before calling Claude, check task status from derived state
|
|
26
|
+
- If status is `blocked`, skip execution and generate blocked outcome
|
|
27
|
+
2. Create blocked outcome generator (can be in `do.ts` or separate module):
|
|
28
|
+
- Generate structured outcome explaining the block
|
|
29
|
+
- Include failed dependency info
|
|
30
|
+
- End with BLOCKED marker
|
|
31
|
+
3. Update console output for blocked tasks:
|
|
32
|
+
- Show message like "Task 003 blocked by failed dependency: 002"
|
|
33
|
+
- Use distinct color/formatting (e.g., yellow for blocked vs red for failed)
|
|
34
|
+
4. Ensure proper cascade: after marking a task blocked, re-derive state before next task
|
|
35
|
+
5. Update summary output to show blocked count separately from failed
|
|
36
|
+
|
|
37
|
+
## Acceptance Criteria
|
|
38
|
+
- [ ] Blocked tasks are detected and skipped
|
|
39
|
+
- [ ] Blocked outcome file created with proper format and BLOCKED marker
|
|
40
|
+
- [ ] Console shows clear blocked message with dependency info
|
|
41
|
+
- [ ] Blocking cascades properly (if 001 fails, 002 blocked, 003 depends on 002 also blocked)
|
|
42
|
+
- [ ] Summary shows blocked tasks separately from failed
|
|
43
|
+
- [ ] No Claude execution attempted for blocked tasks
|
|
44
|
+
|
|
45
|
+
## Notes
|
|
46
|
+
- Blocked outcome files are generated by RAF, not Claude (unlike normal outcomes)
|
|
47
|
+
- The BLOCKED marker ensures consistency with the outcome file convention
|
|
48
|
+
- Re-deriving state after each task ensures cascading works correctly
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Task: Update Execution Prompts with Dependency Context
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Modify the execution system prompt to include outcome summaries of completed dependency tasks, giving Claude full context when executing dependent tasks.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
When a task depends on other tasks, Claude should know what those tasks accomplished. This helps Claude understand the current state of the codebase and build upon previous work effectively.
|
|
8
|
+
|
|
9
|
+
## Dependencies
|
|
10
|
+
003, 004
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
- Execution prompt should include dependency task outcomes when relevant
|
|
14
|
+
- Show outcome summaries (not full content) to manage context size
|
|
15
|
+
- Clearly label which outcomes are from dependencies vs previous tasks
|
|
16
|
+
- Only include outcomes for tasks listed in Dependencies section
|
|
17
|
+
- Handle case where task has no dependencies (no extra context)
|
|
18
|
+
|
|
19
|
+
## Implementation Steps
|
|
20
|
+
1. Update `src/prompts/execution.ts`:
|
|
21
|
+
- Accept dependency information (list of dependency task IDs)
|
|
22
|
+
- Accept dependency outcomes (map of task ID to outcome content)
|
|
23
|
+
- Add new section to prompt: "## Dependency Context"
|
|
24
|
+
2. Create outcome summarizer (if needed):
|
|
25
|
+
- Extract key information from outcome files for context
|
|
26
|
+
- Or include full outcome if reasonably sized
|
|
27
|
+
3. Update `src/commands/do.ts` to pass dependency info to execution prompt:
|
|
28
|
+
- Read dependency outcomes from project
|
|
29
|
+
- Pass to prompt builder
|
|
30
|
+
4. Format the dependency context section:
|
|
31
|
+
- List each dependency task with its outcome summary
|
|
32
|
+
- Make clear these tasks have already completed successfully
|
|
33
|
+
|
|
34
|
+
## Acceptance Criteria
|
|
35
|
+
- [ ] Execution prompt includes dependency context section when task has dependencies
|
|
36
|
+
- [ ] Dependency outcomes clearly labeled by task ID
|
|
37
|
+
- [ ] Claude receives useful context about what dependencies accomplished
|
|
38
|
+
- [ ] Tasks without dependencies have no extra context section
|
|
39
|
+
- [ ] Context size remains reasonable (summarize if needed)
|
|
40
|
+
|
|
41
|
+
## Notes
|
|
42
|
+
- This is about providing context, not validation - blocked tasks are handled in task 004
|
|
43
|
+
- Focus on giving Claude actionable information about the state of the project
|
|
44
|
+
- Consider truncating very long outcomes to avoid context bloat
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Task: Add Tests for Dependency Features
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Create comprehensive tests for all dependency-related functionality to ensure reliable behavior.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
The dependency watchdog feature introduces several new behaviors that need test coverage: parsing, state derivation, blocking logic, and prompt generation.
|
|
8
|
+
|
|
9
|
+
## Dependencies
|
|
10
|
+
001, 002, 003, 004, 005
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
- Unit tests for dependency parsing
|
|
14
|
+
- Unit tests for blocked status derivation
|
|
15
|
+
- Unit tests for getNextExecutableTask with blocked tasks
|
|
16
|
+
- Integration tests for the full blocking flow
|
|
17
|
+
- Test edge cases: no dependencies, multiple dependencies, cascading blocks
|
|
18
|
+
|
|
19
|
+
## Implementation Steps
|
|
20
|
+
1. Add tests in `src/parsers/__tests__/` for dependency parsing:
|
|
21
|
+
- Parse valid Dependencies section
|
|
22
|
+
- Handle missing Dependencies section (returns empty array)
|
|
23
|
+
- Handle malformed input gracefully
|
|
24
|
+
- Parse multiple dependencies
|
|
25
|
+
2. Add tests in `src/core/__tests__/state-derivation.test.ts`:
|
|
26
|
+
- Task blocked when single dependency fails
|
|
27
|
+
- Task blocked when any of multiple dependencies fails
|
|
28
|
+
- Cascading: task blocked when dependency is blocked
|
|
29
|
+
- Task not blocked when all dependencies completed
|
|
30
|
+
- BLOCKED marker recognition
|
|
31
|
+
3. Add tests for getNextExecutableTask:
|
|
32
|
+
- Skip blocked tasks
|
|
33
|
+
- Return null when all remaining tasks blocked
|
|
34
|
+
- Handle mixed states (some completed, some pending, some blocked)
|
|
35
|
+
4. Add tests for execution prompt generation with dependencies:
|
|
36
|
+
- Include dependency context when present
|
|
37
|
+
- Omit section when no dependencies
|
|
38
|
+
5. Add integration test for full flow (if test infrastructure supports):
|
|
39
|
+
- Mock project with dependencies
|
|
40
|
+
- Simulate failure of one task
|
|
41
|
+
- Verify dependent tasks get blocked
|
|
42
|
+
|
|
43
|
+
## Acceptance Criteria
|
|
44
|
+
- [ ] Dependency parsing tests pass
|
|
45
|
+
- [ ] Blocked status derivation tests pass
|
|
46
|
+
- [ ] getNextExecutableTask tests cover blocked scenarios
|
|
47
|
+
- [ ] Prompt generation tests verify dependency context
|
|
48
|
+
- [ ] All new code has >80% test coverage
|
|
49
|
+
- [ ] Tests follow existing patterns in the codebase
|
|
50
|
+
|
|
51
|
+
## Notes
|
|
52
|
+
- Follow TDD where possible - write tests for each component as it's implemented
|
|
53
|
+
- Use mocking for Claude calls to test execution flow without actual API calls
|
|
54
|
+
- Ensure tests run in isolation (don't depend on file system state)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Task: Add 'act' Alias for 'do' Command
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Add 'act' as a complete alias for the 'raf do' command, allowing users to run `raf act` instead of `raf do`.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Some users may prefer the command name "act" over "do" as it's more descriptive ("take action on tasks"). This is a simple UX improvement that adds choice without changing any behavior.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
- `raf act` should be identical to `raf do` in all respects
|
|
11
|
+
- All options and arguments must work exactly the same
|
|
12
|
+
- Help text should show `act` as an alias of `do`
|
|
13
|
+
|
|
14
|
+
## Implementation Steps
|
|
15
|
+
1. Open `src/commands/do.ts`
|
|
16
|
+
2. Add `.alias('act')` to the command definition chain (after `.description()`)
|
|
17
|
+
3. Verify the alias works by building and testing manually
|
|
18
|
+
|
|
19
|
+
## Acceptance Criteria
|
|
20
|
+
- [ ] `raf act <project>` executes tasks just like `raf do <project>`
|
|
21
|
+
- [ ] `raf act --help` shows the same options as `raf do --help`
|
|
22
|
+
- [ ] All flags (`-m`, `--sonnet`, `-y`, `--retries`, etc.) work with `raf act`
|
|
23
|
+
- [ ] `raf --help` shows `act` as an alias or separate command
|
|
24
|
+
|
|
25
|
+
## Notes
|
|
26
|
+
Commander.js provides the `.alias()` method which makes this a one-line change.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Task: Add Exit Instructions After Planning
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
After Claude finishes creating plans, display a message instructing the user how to exit Claude (double Ctrl-C) and how to execute the tasks.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
When `raf plan` runs, Claude operates in an interactive TTY session. After planning is complete, users may not know how to exit the Claude session. This message provides clear guidance.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
- Show message after Claude completes plan creation
|
|
11
|
+
- Message should mention: "Press Ctrl-C twice to exit"
|
|
12
|
+
- Message should mention: "Then run: raf do <project>"
|
|
13
|
+
- Keep the message simple and generic (don't include specific project identifier)
|
|
14
|
+
|
|
15
|
+
## Implementation Steps
|
|
16
|
+
1. Open `src/prompts/planning.ts`
|
|
17
|
+
2. In the system prompt, add a "Step 4: Confirm Completion" section after "Step 3: Create Plan Files"
|
|
18
|
+
3. Instruct Claude to output a completion message that includes:
|
|
19
|
+
- Confirmation that planning is done
|
|
20
|
+
- "Press Ctrl-C twice to exit"
|
|
21
|
+
- "Then run: raf do <project>"
|
|
22
|
+
4. Similarly update `src/prompts/amend.ts` to include the same exit message for amendment mode
|
|
23
|
+
|
|
24
|
+
## Acceptance Criteria
|
|
25
|
+
- [ ] After `raf plan` completes, Claude displays exit instructions
|
|
26
|
+
- [ ] After `raf plan --amend` completes, Claude displays exit instructions
|
|
27
|
+
- [ ] Message is clear and actionable
|
|
28
|
+
- [ ] Message uses generic `<project>` placeholder (not actual project name)
|
|
29
|
+
|
|
30
|
+
## Notes
|
|
31
|
+
The message should be part of Claude's output (in the system prompt), not RAF's output after Claude exits. This ensures the user sees it while Claude is still running.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Project Decisions
|
|
2
|
+
|
|
3
|
+
## For --amend after project name, should the syntax be `raf plan <identifier> --amend` (flag is boolean, identifier is the positional argument)?
|
|
4
|
+
Support both syntaxes - Support both `raf plan --amend <id>` and `raf plan <id> --amend`
|
|
5
|
+
|
|
6
|
+
## For the details section, what exactly should be removed from successful outcomes?
|
|
7
|
+
Remove entire `## Details` section - No metadata at all on success (no attempts, elapsed time, or timestamp)
|
|
8
|
+
|
|
9
|
+
## When a task succeeds after prior failures (retry), should the `## Failure History` section still be included in the outcome?
|
|
10
|
+
~~Keep failure history on success after retries~~ REVISED: Move failure history to console output at end of `raf do`
|
|
11
|
+
|
|
12
|
+
## Where should the failure history be moved to?
|
|
13
|
+
Console output at end of `raf do` - Show failure history in the terminal summary, not in outcome files
|
|
14
|
+
|
|
15
|
+
## When should failure history appear in console output?
|
|
16
|
+
For any task that had retries - Show retry history even for tasks that eventually succeeded after failures
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Outcome: Support --amend flag after project identifier
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Successfully implemented support for both `raf plan <project> --amend` and `raf plan --amend <project>` syntaxes for the amend command.
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### 1. Modified `src/commands/plan.ts`
|
|
10
|
+
|
|
11
|
+
- Changed `--amend` from a value-taking option (`-a, --amend <identifier>`) to a boolean flag (`-a, --amend`)
|
|
12
|
+
- Updated `PlanCommandOptions` interface: changed `amend?: string` to `amend?: boolean`
|
|
13
|
+
- Updated action handler to:
|
|
14
|
+
- Use the positional `projectName` argument as the identifier when `--amend` is set
|
|
15
|
+
- Show clear error message if `--amend` is used without a project identifier
|
|
16
|
+
- Error message guides users with both valid syntaxes
|
|
17
|
+
|
|
18
|
+
### 2. Added `tests/unit/plan-command-amend-flag.test.ts`
|
|
19
|
+
|
|
20
|
+
New test file covering:
|
|
21
|
+
- `--amend` flag acceptance and `-a` shorthand
|
|
22
|
+
- Boolean flag verification (no required argument)
|
|
23
|
+
- Positional argument availability with `--amend` flag
|
|
24
|
+
- Structural support for both syntax variants
|
|
25
|
+
|
|
26
|
+
## Key Implementation Details
|
|
27
|
+
|
|
28
|
+
The key insight is that Commander.js handles boolean flags and positional arguments separately:
|
|
29
|
+
- When `--amend` takes a `<value>`, it consumes the next argument
|
|
30
|
+
- When `--amend` is a boolean flag, the positional argument remains available
|
|
31
|
+
|
|
32
|
+
Both syntaxes now work because:
|
|
33
|
+
- `raf plan myproject --amend` → positional arg = "myproject", amend = true
|
|
34
|
+
- `raf plan --amend myproject` → positional arg = "myproject", amend = true
|
|
35
|
+
|
|
36
|
+
## Acceptance Criteria Verification
|
|
37
|
+
|
|
38
|
+
- [x] `raf plan myproject --amend` works (opens editor for amendment)
|
|
39
|
+
- [x] `raf plan --amend myproject` still works (backward compatibility via positional arg)
|
|
40
|
+
- [x] `raf plan --amend` without identifier shows helpful error message
|
|
41
|
+
- [x] All existing tests pass (717 tests)
|
|
42
|
+
- [x] New tests added for both syntax variants
|
|
43
|
+
|
|
44
|
+
<promise>COMPLETE</promise>
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## Details
|
|
48
|
+
- Attempts: 1
|
|
49
|
+
- Elapsed time: 2m 5s
|
|
50
|
+
- Completed at: 2026-01-31T17:10:51.923Z
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Outcome: Remove details and failure history from successful outcomes
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Successfully implemented the behavior change to clean up successful task outcomes while preserving debugging information in failed outcomes.
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### 1. Modified `src/commands/do.ts`
|
|
10
|
+
|
|
11
|
+
- **Renamed `formatFailureHistory` to `formatRetryHistoryForConsole`**: The function now formats retry history for console output instead of markdown files
|
|
12
|
+
- **Added `TaskRetryHistory` interface**: Tracks retry information per task (taskId, taskName, failureHistory, finalAttempt, success)
|
|
13
|
+
- **Added `projectRetryHistory` array**: Collects retry information during task execution for all tasks that had failures
|
|
14
|
+
- **Removed `## Details` section from successful outcomes**: Claude-written outcomes are now preserved as-is without appending metadata
|
|
15
|
+
- **Removed `## Failure History` from all outcome files**: No longer inserted into outcome files for either success or failure
|
|
16
|
+
- **Kept `## Details` section for failed outcomes**: Still includes attempts, elapsed time, timestamp, and stash name for debugging
|
|
17
|
+
- **Added retry history console output**: At the end of project execution, shows retry history for any task that had failures
|
|
18
|
+
|
|
19
|
+
### 2. Updated `tests/unit/outcome-content.test.ts`
|
|
20
|
+
|
|
21
|
+
- Rewrote tests to verify new behavior
|
|
22
|
+
- Added tests for successful outcomes having no `## Details` or `## Failure History`
|
|
23
|
+
- Added tests for failed outcomes keeping `## Details` section
|
|
24
|
+
- Added tests for `formatRetryHistoryForConsole` function
|
|
25
|
+
|
|
26
|
+
### 3. Updated `tests/unit/failure-history.test.ts`
|
|
27
|
+
|
|
28
|
+
- Updated to test the renamed `formatRetryHistoryForConsole` function
|
|
29
|
+
- Updated test expectations to match the new console output format
|
|
30
|
+
- Tests verify proper indentation, task name formatting, and attempt tracking
|
|
31
|
+
|
|
32
|
+
## Acceptance Criteria Verification
|
|
33
|
+
|
|
34
|
+
- [x] Successful task outcomes do not contain `## Details` section
|
|
35
|
+
- [x] Successful task outcomes do not contain `## Failure History` section
|
|
36
|
+
- [x] Failed task outcomes still contain `## Details` section with all metadata
|
|
37
|
+
- [x] Console output shows retry history for any task that had failures before completing
|
|
38
|
+
- [x] All existing tests pass (725 tests)
|
|
39
|
+
- [x] New/updated tests verify the behavior change
|
|
40
|
+
|
|
41
|
+
## Console Output Format
|
|
42
|
+
|
|
43
|
+
When tasks have retries, the output at the end of execution looks like:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Retry history:
|
|
47
|
+
Task 001 (my-task):
|
|
48
|
+
Attempt 1: Failed - Connection timeout
|
|
49
|
+
Attempt 2: Succeeded
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
<promise>COMPLETE</promise>
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## Details
|
|
56
|
+
- Attempts: 1
|
|
57
|
+
- Elapsed time: 5m 27s
|
|
58
|
+
- Completed at: 2026-01-31T17:16:19.006Z
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Task: Support --amend flag after project identifier
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Allow `--amend` flag to be used after the project identifier, in addition to the existing syntax.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Currently `raf plan --amend <identifier>` works, but users may naturally type `raf plan <identifier> --amend`. Both syntaxes should be supported for better UX.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
- Support `raf plan <identifier> --amend` (flag after positional argument)
|
|
11
|
+
- Keep existing `raf plan --amend <identifier>` working (backward compatibility)
|
|
12
|
+
- The positional argument becomes the project identifier in amend mode
|
|
13
|
+
- Show clear error if `--amend` is used without a project identifier
|
|
14
|
+
|
|
15
|
+
## Implementation Steps
|
|
16
|
+
1. Read `src/commands/plan.ts` to understand current implementation
|
|
17
|
+
2. Change `--amend` option from requiring an argument (`-a, --amend <identifier>`) to a boolean flag (`-a, --amend`)
|
|
18
|
+
3. Update action handler logic:
|
|
19
|
+
- If `--amend` flag is set, use the positional `projectName` argument as the identifier
|
|
20
|
+
- If positional argument is missing when `--amend` is set, show error message
|
|
21
|
+
4. Update the `PlanCommandOptions` interface to make `amend` a boolean
|
|
22
|
+
5. Update tests in `tests/unit/plan-command.test.ts` to cover both syntaxes
|
|
23
|
+
6. Run tests to verify changes
|
|
24
|
+
|
|
25
|
+
## Acceptance Criteria
|
|
26
|
+
- [ ] `raf plan myproject --amend` works (opens editor for amendment)
|
|
27
|
+
- [ ] `raf plan --amend myproject` still works (backward compatibility via positional arg)
|
|
28
|
+
- [ ] `raf plan --amend` without identifier shows helpful error message
|
|
29
|
+
- [ ] All existing tests pass
|
|
30
|
+
- [ ] New tests added for both syntax variants
|
|
31
|
+
|
|
32
|
+
## Notes
|
|
33
|
+
- Commander.js allows boolean options with `-a, --amend` syntax (no angle brackets)
|
|
34
|
+
- The positional argument `[projectName]` will serve as the identifier in amend mode
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Task: Remove details and failure history from successful outcomes
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Remove the `## Details` section from successful outcomes and move failure history to console output instead of outcome files.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Currently, the `## Details` section (attempts, elapsed time, timestamp) and `## Failure History` section are appended to outcome files. This adds noise to successful outcomes. Instead:
|
|
8
|
+
- Successful outcomes should be clean (no metadata)
|
|
9
|
+
- Failed outcomes keep `## Details` for debugging
|
|
10
|
+
- Failure/retry history should appear in terminal output at the end of `raf do`
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
- Remove `## Details` section from successful task outcomes
|
|
14
|
+
- Remove `## Failure History` section from all outcome files
|
|
15
|
+
- Keep `## Details` section for failed task outcomes (with attempts, elapsed time, timestamp, stash name)
|
|
16
|
+
- Show retry history in console output for any task that had failures (even if eventually successful)
|
|
17
|
+
- Do not modify the `<promise>COMPLETE</promise>` or `<promise>FAILED</promise>` markers
|
|
18
|
+
|
|
19
|
+
## Implementation Steps
|
|
20
|
+
1. Read `src/commands/do.ts` to understand current outcome file generation (lines 595-730)
|
|
21
|
+
2. In the success branch (around line 595):
|
|
22
|
+
- Remove the `## Details` section append
|
|
23
|
+
- Remove the `failureHistorySection` insertion into outcome file
|
|
24
|
+
3. Collect retry information during task execution:
|
|
25
|
+
- Track which tasks had failures before completing
|
|
26
|
+
- Store the failure history data (task id, attempt numbers, reasons)
|
|
27
|
+
4. Add summary output at end of project execution:
|
|
28
|
+
- After the completion summary, show retry history for tasks that had failures
|
|
29
|
+
- Format: "Task X: Attempt 1 failed (reason), Attempt 2 succeeded" or similar
|
|
30
|
+
5. Update/add tests:
|
|
31
|
+
- `tests/unit/outcome-content.test.ts`: successful outcomes have no `## Details` or `## Failure History`
|
|
32
|
+
- `tests/unit/do-command.test.ts`: verify retry history appears in console output
|
|
33
|
+
6. Run tests to verify changes
|
|
34
|
+
|
|
35
|
+
## Acceptance Criteria
|
|
36
|
+
- [ ] Successful task outcomes do not contain `## Details` section
|
|
37
|
+
- [ ] Successful task outcomes do not contain `## Failure History` section
|
|
38
|
+
- [ ] Failed task outcomes still contain `## Details` section with all metadata
|
|
39
|
+
- [ ] Console output shows retry history for any task that had failures before completing
|
|
40
|
+
- [ ] All existing tests pass
|
|
41
|
+
- [ ] New/updated tests verify the behavior change
|
|
42
|
+
|
|
43
|
+
## Notes
|
|
44
|
+
- The `formatFailureHistory` function may need to be repurposed for console output
|
|
45
|
+
- Consider both verbose and minimal output modes for the retry summary
|
|
46
|
+
- Lines to modify are approximately 606-730 in do.ts
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Project Decisions
|
|
2
|
+
|
|
3
|
+
## For the auto-generated project names, what style should the random names follow?
|
|
4
|
+
Use existing name generation with Claude - it gives a list of names, pick the first in the list automatically.
|
|
5
|
+
|
|
6
|
+
## Should the --auto/-y flag also skip any other interactive prompts during planning, or just the name selection?
|
|
7
|
+
Name only - only auto-select the project name, keep other prompts interactive.
|
|
8
|
+
|
|
9
|
+
## For task 2 (amend prompt for 'raf do'): Where exactly should the instruction to commit plan files be added?
|
|
10
|
+
Git commit section - add to the existing git commit instructions in the task execution prompt.
|
|
11
|
+
|
|
12
|
+
## For task 3 (input.md handling in amend): When appending to input.md, should there be a visual separator between the original and new content?
|
|
13
|
+
Just horizontal rule (---) between the original and new content.
|
|
14
|
+
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
- [ ] if --auto or -y flag is provided - randomly select project name in the case name was not provided (raf plan -y)
|
|
2
|
+
- [ ] mention in amend prompt for "raf do" that it should also commit plan files
|
|
3
|
+
- [ ] during "raf plan --amend id" (amend flow) RAF overrides input.md with ammended tasks, it should rather concatanated it to input.md. make sure that as user input to claude you provide only new part of input during amend flow
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Outcome: Auto-pick project name with -y flag
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Implemented automatic project name selection when running `raf plan -y` without providing a project name.
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### Modified Files
|
|
10
|
+
|
|
11
|
+
1. **src/commands/plan.ts** (lines 129-136)
|
|
12
|
+
- Added logic to check if `autoMode` is true AND no `projectName` was provided
|
|
13
|
+
- In this case, the first name from `generateProjectNames()` is automatically selected
|
|
14
|
+
- Logs the auto-selected name: `Auto-selected project name: <name>`
|
|
15
|
+
- Skips the interactive `pickProjectName()` call in auto mode
|
|
16
|
+
|
|
17
|
+
2. **tests/unit/plan-command-auto-flag.test.ts**
|
|
18
|
+
- Added new test suite `auto-name selection behavior` with 2 tests:
|
|
19
|
+
- Verifies command structure supports auto-selection flow (--auto flag with optional argument)
|
|
20
|
+
- Verifies projectName argument is optional (required: false)
|
|
21
|
+
|
|
22
|
+
## Acceptance Criteria Verified
|
|
23
|
+
|
|
24
|
+
- [x] `raf plan -y` (no project name) auto-selects the first generated name
|
|
25
|
+
- [x] `raf plan my-project -y` uses the provided name (unchanged behavior)
|
|
26
|
+
- [x] `raf plan` (no -y flag) still shows the interactive picker
|
|
27
|
+
- [x] Auto-selected name is logged to inform the user
|
|
28
|
+
- [x] All existing tests pass (727 tests)
|
|
29
|
+
- [x] New test covers the auto-select behavior
|
|
30
|
+
|
|
31
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Outcome: Mention plan files in git commit instructions
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Updated the task execution prompt to explicitly mention that plan files should be included in git commits.
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### Modified Files
|
|
10
|
+
|
|
11
|
+
1. **src/prompts/execution.ts** (line 95)
|
|
12
|
+
- Added a sub-bullet under the `git add -A` instruction
|
|
13
|
+
- New text: "This includes any new plan files in the `plans/` folder"
|
|
14
|
+
- Keeps the instruction concise and integrated with existing commit flow
|
|
15
|
+
|
|
16
|
+
## Acceptance Criteria Verified
|
|
17
|
+
|
|
18
|
+
- [x] Git Instructions section mentions plan files
|
|
19
|
+
- [x] Instruction is clear and concise
|
|
20
|
+
- [x] Does not break existing prompt structure (TypeScript compiles)
|
|
21
|
+
- [x] Execution prompt unit tests pass (43 tests)
|
|
22
|
+
|
|
23
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Outcome: Fix input.md handling in amend flow
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Modified the amend flow to append new task descriptions to `input.md` with a horizontal rule separator, and removed the unused `inputContent` parameter from the amend prompt.
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### Modified Files
|
|
10
|
+
|
|
11
|
+
1. **src/commands/plan.ts** (lines 321-326)
|
|
12
|
+
- Added code to append new task description to `input.md` after user input is captured
|
|
13
|
+
- Uses `\n\n---\n\n` as separator between original and new content
|
|
14
|
+
- Handles edge cases: empty original content, whitespace-only content
|
|
15
|
+
- Removed `inputContent: originalInput` from `getAmendPrompt()` call
|
|
16
|
+
|
|
17
|
+
2. **src/prompts/amend.ts** (line 5)
|
|
18
|
+
- Removed `inputContent: string` from `AmendPromptParams` interface
|
|
19
|
+
- This param was never used in the prompt generation (Claude reads input.md directly)
|
|
20
|
+
|
|
21
|
+
3. **tests/unit/plan-command.test.ts**
|
|
22
|
+
- Updated all test cases to not pass `inputContent` parameter
|
|
23
|
+
- Fixed formatting issues from replacement
|
|
24
|
+
|
|
25
|
+
4. **tests/unit/plan-command-amend-input.test.ts** (new file)
|
|
26
|
+
- Added 6 new tests for the input.md append behavior:
|
|
27
|
+
- Appending with separator to existing content
|
|
28
|
+
- Handling empty original input
|
|
29
|
+
- Handling non-existent input.md
|
|
30
|
+
- Multiple amend operations (each with separator)
|
|
31
|
+
- Trailing whitespace handling
|
|
32
|
+
- Whitespace-only content treated as empty
|
|
33
|
+
|
|
34
|
+
## Acceptance Criteria Verified
|
|
35
|
+
|
|
36
|
+
- [x] New task descriptions are appended to input.md (not overwriting)
|
|
37
|
+
- [x] Horizontal rule (`---`) separates original from new content
|
|
38
|
+
- [x] Claude receives only the new task description in the user message
|
|
39
|
+
- [x] Original input.md content is preserved
|
|
40
|
+
- [x] Multiple amend operations append correctly (each with separator)
|
|
41
|
+
- [x] Tests cover the append behavior (6 new tests)
|
|
42
|
+
- [x] All existing tests pass (733 tests total)
|
|
43
|
+
|
|
44
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Task: Auto-pick project name with -y flag
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
When `raf plan -y` is run without a project name, automatically pick the first generated name instead of prompting the user.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
The `-y`/`--auto` flag currently only skips Claude's permission prompts for file operations. Users want it to also skip the interactive name picker when no project name is explicitly provided, making the planning flow fully automated.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
- When `-y`/`--auto` flag is set AND no project name is provided:
|
|
11
|
+
- Generate name suggestions using the existing `generateProjectNames()` function
|
|
12
|
+
- Automatically select the first name from the list (no user interaction)
|
|
13
|
+
- Log which name was auto-selected
|
|
14
|
+
- When `-y` flag is NOT set OR a project name IS provided:
|
|
15
|
+
- Behavior remains unchanged (use existing logic)
|
|
16
|
+
- User feedback should be provided about the auto-selected name
|
|
17
|
+
|
|
18
|
+
## Implementation Steps
|
|
19
|
+
1. Read `src/commands/plan.ts` to understand the current flow
|
|
20
|
+
2. In `runPlanCommand()` (around lines 122-129), modify the name generation logic:
|
|
21
|
+
- Check if `autoMode` is true AND no `projectName` was provided
|
|
22
|
+
- If so, generate names with `generateProjectNames()` and take the first one
|
|
23
|
+
- Log the auto-selected name (e.g., "Auto-selected project name: xyz")
|
|
24
|
+
- Skip the call to `pickProjectName()` in this case
|
|
25
|
+
3. Add a test case for auto-name selection in the plan command tests
|
|
26
|
+
|
|
27
|
+
## Acceptance Criteria
|
|
28
|
+
- [ ] `raf plan -y` (no project name) auto-selects the first generated name
|
|
29
|
+
- [ ] `raf plan my-project -y` uses the provided name (unchanged behavior)
|
|
30
|
+
- [ ] `raf plan` (no -y flag) still shows the interactive picker
|
|
31
|
+
- [ ] Auto-selected name is logged to inform the user
|
|
32
|
+
- [ ] All existing tests pass
|
|
33
|
+
- [ ] New test covers the auto-select behavior
|
|
34
|
+
|
|
35
|
+
## Notes
|
|
36
|
+
- The `generateProjectNames()` function returns 3-5 names; we just need the first one
|
|
37
|
+
- Fallback behavior already exists in `generateProjectNames()` if Claude fails
|
|
38
|
+
- File: `src/commands/plan.ts`, function: `runPlanCommand()`
|