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,54 @@
|
|
|
1
|
+
# Task 001: Update Execution Prompt
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Updated the execution prompt to instruct Claude to write meaningful commit messages describing what was accomplished, instead of using a fixed project-name + task-name format.
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### Files Modified
|
|
10
|
+
|
|
11
|
+
1. **src/prompts/execution.ts**
|
|
12
|
+
- Removed `projectName` and `taskName` from `ExecutionPromptParams` interface
|
|
13
|
+
- Removed `projectName` and `taskName` from destructuring in `getExecutionPrompt()`
|
|
14
|
+
- Updated commit instructions to use `<description>` placeholder with guidance to write meaningful descriptions
|
|
15
|
+
|
|
16
|
+
2. **src/commands/do.ts**
|
|
17
|
+
- Removed `projectName` and `taskName` parameters from the `getExecutionPrompt()` call
|
|
18
|
+
|
|
19
|
+
3. **tests/unit/execution-prompt.test.ts**
|
|
20
|
+
- Updated `baseParams` to remove `projectName` and `taskName`
|
|
21
|
+
- Updated test expectations to check for new `<description>` format
|
|
22
|
+
- Removed tests that checked for project/task name in commit message
|
|
23
|
+
- Added new test to verify instructions for meaningful descriptions
|
|
24
|
+
|
|
25
|
+
### New Commit Message Format
|
|
26
|
+
|
|
27
|
+
Old format:
|
|
28
|
+
```
|
|
29
|
+
RAF[005:001] project-name task-name
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
New format:
|
|
33
|
+
```
|
|
34
|
+
RAF[005:001] <description>
|
|
35
|
+
- Write a concise description of what was accomplished
|
|
36
|
+
- Focus on the actual change, not the task name
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Acceptance Criteria Verification
|
|
40
|
+
|
|
41
|
+
- [x] Commit instructions tell Claude to write meaningful descriptions
|
|
42
|
+
- [x] RAF prefix `RAF[project:task]` is preserved in the format
|
|
43
|
+
- [x] `projectName` and `taskName` parameters removed from interface
|
|
44
|
+
- [x] TypeScript compiles without errors (`npm run build` passes)
|
|
45
|
+
- [x] No changes to other prompt sections (outcome file, retry context, etc.)
|
|
46
|
+
- [x] All 543 tests pass
|
|
47
|
+
|
|
48
|
+
<promise>COMPLETE</promise>
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## Details
|
|
52
|
+
- Attempts: 2
|
|
53
|
+
- Elapsed time: 3m 50s
|
|
54
|
+
- Completed at: 2026-01-31T12:35:09.297Z
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Task 002: Update Tests
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Verified that the execution prompt unit tests have been updated to reflect the new commit message format. The test changes were already completed as part of Task 001, so this task involved verification rather than implementation.
|
|
6
|
+
|
|
7
|
+
## Verification Results
|
|
8
|
+
|
|
9
|
+
### Acceptance Criteria Status
|
|
10
|
+
|
|
11
|
+
- [x] All tests pass with `npm test` - 543 tests pass
|
|
12
|
+
- [x] Tests verify RAF prefix format is preserved - Tests check for `RAF[005:001]`, `RAF[a05:001]`, etc.
|
|
13
|
+
- [x] Tests verify task number padding still works - Tests for single (001), double (012), and triple (123) digit padding
|
|
14
|
+
- [x] Tests verify instruction for meaningful description is present - Test checks for "Write a concise description of what was accomplished"
|
|
15
|
+
- [x] No tests checking for exact `projectName taskName` format - All tests now use `<description>` format
|
|
16
|
+
- [x] Test coverage maintained for commit-related functionality - 27 tests in execution-prompt.test.ts
|
|
17
|
+
|
|
18
|
+
### Test Changes (from Task 001)
|
|
19
|
+
|
|
20
|
+
The following changes were made to `tests/unit/execution-prompt.test.ts`:
|
|
21
|
+
|
|
22
|
+
1. **baseParams fixture updated** - Removed `projectName` and `taskName` properties
|
|
23
|
+
2. **Commit Message Format tests updated**:
|
|
24
|
+
- Changed from checking exact `projectName taskName` format to `<description>` placeholder
|
|
25
|
+
- Added test `should instruct to write meaningful description`
|
|
26
|
+
- Kept all padding tests (001, 012, 123)
|
|
27
|
+
- Kept base36 project number test
|
|
28
|
+
- Kept autoCommit=false test
|
|
29
|
+
3. **Complete Commit Message tests updated**:
|
|
30
|
+
- All tests now check for `<description>` instead of literal project/task names
|
|
31
|
+
|
|
32
|
+
### Tests Verified
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Commit Message Format
|
|
36
|
+
✓ should include RAF commit schema format with description placeholder in prompt
|
|
37
|
+
✓ should instruct to write meaningful description
|
|
38
|
+
✓ should zero-pad single digit task numbers
|
|
39
|
+
✓ should zero-pad double digit task numbers
|
|
40
|
+
✓ should not pad triple digit task numbers
|
|
41
|
+
✓ should include project number from base36 prefix
|
|
42
|
+
✓ should not include commit instructions when autoCommit is false
|
|
43
|
+
|
|
44
|
+
Complete Commit Message
|
|
45
|
+
✓ should generate correct commit message format for task 006
|
|
46
|
+
✓ should generate correct commit message format for first task
|
|
47
|
+
✓ should generate correct commit message format for base36 project
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Notes
|
|
51
|
+
|
|
52
|
+
- No code changes were needed for this task as the test updates were included in Task 001
|
|
53
|
+
- This task served as a verification checkpoint to ensure test coverage is maintained
|
|
54
|
+
|
|
55
|
+
<promise>COMPLETE</promise>
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## Details
|
|
59
|
+
- Attempts: 2
|
|
60
|
+
- Elapsed time: 3m 6s
|
|
61
|
+
- Completed at: 2026-01-31T12:38:15.976Z
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Task 003: Update Documentation
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Updated CLAUDE.md to document the new commit message format where Claude writes meaningful descriptions instead of the fixed project-name + task-name format.
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### File Modified
|
|
10
|
+
|
|
11
|
+
**CLAUDE.md** - Git Commit Schema section (lines 113-136)
|
|
12
|
+
|
|
13
|
+
### Documentation Updates
|
|
14
|
+
|
|
15
|
+
1. **Separated commit types** - Split the schema into two clearly labeled sections:
|
|
16
|
+
- "RAF-generated commits" (fixed format) - for plan and outcome commits
|
|
17
|
+
- "Claude-generated commits" (during task execution) - for task commits
|
|
18
|
+
|
|
19
|
+
2. **Updated task commit format** - Changed from:
|
|
20
|
+
```
|
|
21
|
+
RAF[<project-number>:<task>] - Claude commits during task execution
|
|
22
|
+
```
|
|
23
|
+
To:
|
|
24
|
+
```
|
|
25
|
+
RAF[<project-number>:<task>] <description>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
3. **Added explanation** - Added clarification that "Claude writes a concise description of what was accomplished, focusing on the actual change rather than the task name."
|
|
29
|
+
|
|
30
|
+
4. **Added examples** - Included three realistic commit message examples:
|
|
31
|
+
```
|
|
32
|
+
RAF[005:001] Add validation for user input fields
|
|
33
|
+
RAF[005:002] Fix null pointer in auth handler
|
|
34
|
+
RAF[a01:003] Refactor database connection pooling
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Acceptance Criteria Verification
|
|
38
|
+
|
|
39
|
+
- [x] Git Commit Schema section updated with new format
|
|
40
|
+
- [x] Clear explanation that Claude writes the description
|
|
41
|
+
- [x] Example provided showing realistic commit message
|
|
42
|
+
- [x] Distinction between RAF commits and Claude commits maintained
|
|
43
|
+
- [x] No changes to other sections of CLAUDE.md
|
|
44
|
+
|
|
45
|
+
<promise>COMPLETE</promise>
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
## Details
|
|
49
|
+
- Attempts: 2
|
|
50
|
+
- Elapsed time: 1m 42s
|
|
51
|
+
- Completed at: 2026-01-31T12:39:58.591Z
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Task: Update Execution Prompt
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Modify the execution prompt to instruct Claude to write meaningful commit messages describing what the task accomplished, instead of using a fixed project-name + task-name format.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Currently, the execution prompt in `src/prompts/execution.ts` tells Claude to commit with a fixed message format:
|
|
8
|
+
```
|
|
9
|
+
RAF[005:001] project-name task-name
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
This format is not descriptive of what was actually done. We want Claude to write commit messages with a concise task description, without the project name.
|
|
13
|
+
|
|
14
|
+
## Requirements
|
|
15
|
+
- Keep the `RAF[project:task]` prefix format (e.g., `RAF[005:001]`)
|
|
16
|
+
- Remove both `projectName` and `taskName` from the commit message
|
|
17
|
+
- Instruct Claude to write a concise description of what was accomplished
|
|
18
|
+
- Do NOT include project name in commit message
|
|
19
|
+
- Provide minimal guidance (not strict rules like conventional commits)
|
|
20
|
+
- Only change commit instructions when `autoCommit` is true
|
|
21
|
+
|
|
22
|
+
Example new format:
|
|
23
|
+
```
|
|
24
|
+
RAF[005:001] Add validation for user input fields
|
|
25
|
+
RAF[005:002] Fix null pointer in auth handler
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Implementation Steps
|
|
29
|
+
1. Read `src/prompts/execution.ts` to understand the current implementation
|
|
30
|
+
2. Modify the `commitInstructions` section (lines 48-56) to:
|
|
31
|
+
- Keep the RAF prefix format: `RAF[${projectNumber}:${paddedTaskNumber}]`
|
|
32
|
+
- Replace fixed message with instruction to write a meaningful description
|
|
33
|
+
3. Remove `projectName` and `taskName` parameters from the interface and function since they're no longer needed for commit messages
|
|
34
|
+
4. Update the `ExecutionPromptParams` interface to remove unused parameters
|
|
35
|
+
5. Build and verify TypeScript compiles without errors
|
|
36
|
+
|
|
37
|
+
## Acceptance Criteria
|
|
38
|
+
- [ ] Commit instructions tell Claude to write meaningful descriptions
|
|
39
|
+
- [ ] RAF prefix `RAF[project:task]` is preserved in the format
|
|
40
|
+
- [ ] `projectName` and `taskName` parameters removed from interface (if unused elsewhere)
|
|
41
|
+
- [ ] TypeScript compiles without errors
|
|
42
|
+
- [ ] No changes to other prompt sections (outcome file, retry context, etc.)
|
|
43
|
+
|
|
44
|
+
## Notes
|
|
45
|
+
- The `projectName` and `taskName` might still be used elsewhere in the prompt or codebase - check before removing from interface
|
|
46
|
+
- The commit message format change only affects the instructions given to Claude, not any RAF code that generates commits
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Task: Update Tests
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Update the execution prompt unit tests to reflect the new commit message format that instructs Claude to write meaningful descriptions.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
The test file `tests/unit/execution-prompt.test.ts` has tests that verify the old commit message format:
|
|
8
|
+
- `should include RAF commit schema format in prompt` - checks for exact format like `RAF[005:001] task-naming-improvements enhance-identifier-resolution`
|
|
9
|
+
- `should include task name in commit message` - checks for task name
|
|
10
|
+
- `should include project name in commit message` - checks for project name
|
|
11
|
+
- `Complete Commit Message` describe block - multiple tests checking exact commit message format
|
|
12
|
+
|
|
13
|
+
These tests need to be updated to reflect the new behavior.
|
|
14
|
+
|
|
15
|
+
## Requirements
|
|
16
|
+
- Update tests to verify the new commit message format
|
|
17
|
+
- Tests should verify:
|
|
18
|
+
- RAF prefix is still present (e.g., `RAF[005:001]`)
|
|
19
|
+
- Task number zero-padding still works
|
|
20
|
+
- Instruction to write concise description is present
|
|
21
|
+
- Git Instructions section is present when autoCommit is true
|
|
22
|
+
- Git Instructions section is absent when autoCommit is false
|
|
23
|
+
- Project name is NOT in the commit message instruction
|
|
24
|
+
- Remove tests that check for exact `projectName taskName` format
|
|
25
|
+
- Update `baseParams` if `projectName`/`taskName` are removed from interface
|
|
26
|
+
|
|
27
|
+
## Implementation Steps
|
|
28
|
+
1. Read `tests/unit/execution-prompt.test.ts` to understand current test structure
|
|
29
|
+
2. Update the `Commit Message Format` describe block:
|
|
30
|
+
- Modify test for exact format to check for new instruction style
|
|
31
|
+
- Keep tests for zero-padding (001, 012, 123)
|
|
32
|
+
- Keep test for base36 project numbers
|
|
33
|
+
- Update or remove tests checking for taskName and projectName in commit message
|
|
34
|
+
3. Update the `Complete Commit Message` describe block:
|
|
35
|
+
- Remove tests that check for exact `projectName taskName` format
|
|
36
|
+
- Add tests that verify meaningful description instruction is present
|
|
37
|
+
4. Update `baseParams` fixture if interface changed
|
|
38
|
+
5. Run tests to verify they pass
|
|
39
|
+
|
|
40
|
+
## Acceptance Criteria
|
|
41
|
+
- [ ] All tests pass with `npm test`
|
|
42
|
+
- [ ] Tests verify RAF prefix format is preserved
|
|
43
|
+
- [ ] Tests verify task number padding still works
|
|
44
|
+
- [ ] Tests verify instruction for meaningful description is present
|
|
45
|
+
- [ ] No tests checking for exact `projectName taskName` format
|
|
46
|
+
- [ ] Test coverage maintained for commit-related functionality
|
|
47
|
+
|
|
48
|
+
## Notes
|
|
49
|
+
- Depends on Task 001 being completed first
|
|
50
|
+
- Some tests may need to be removed entirely if they tested specific format that no longer exists
|
|
51
|
+
- Consider adding a test that verifies the wording of the new instruction
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Task: Update Documentation
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Update CLAUDE.md to reflect the new commit message format where Claude writes meaningful descriptions instead of fixed project-name + task-name.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
CLAUDE.md documents the Git Commit Schema in the "Architectural Decisions" section (around line 113-121). The current documentation shows:
|
|
8
|
+
```
|
|
9
|
+
RAF[<project-number>:plan] - After planning phase completes
|
|
10
|
+
RAF[<project-number>:outcome] - After all tasks complete
|
|
11
|
+
RAF[<project-number>:<task>] - Claude commits during task execution
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
This needs to be updated to reflect that task commits now include meaningful descriptions written by Claude.
|
|
15
|
+
|
|
16
|
+
## Requirements
|
|
17
|
+
- Update the Git Commit Schema section to show the new format
|
|
18
|
+
- Explain that Claude writes a concise description of what was accomplished
|
|
19
|
+
- Note that project name is NOT included in task commits (only in RAF-generated plan/outcome commits)
|
|
20
|
+
- Keep documentation of `plan` and `outcome` commits unchanged (those are made by RAF, not Claude)
|
|
21
|
+
- Add examples showing realistic commit messages:
|
|
22
|
+
```
|
|
23
|
+
RAF[005:001] Add validation for user input fields
|
|
24
|
+
RAF[005:002] Fix null pointer in auth handler
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Implementation Steps
|
|
28
|
+
1. Read CLAUDE.md and locate the Git Commit Schema section
|
|
29
|
+
2. Update the task-level commit format to show it includes a description
|
|
30
|
+
3. Add an example showing what a real commit message might look like
|
|
31
|
+
4. Ensure the documentation distinguishes between:
|
|
32
|
+
- RAF-generated commits (plan, outcome) - fixed format
|
|
33
|
+
- Claude-generated commits (task) - meaningful description
|
|
34
|
+
|
|
35
|
+
## Acceptance Criteria
|
|
36
|
+
- [ ] Git Commit Schema section updated with new format
|
|
37
|
+
- [ ] Clear explanation that Claude writes the description
|
|
38
|
+
- [ ] Example provided showing realistic commit message
|
|
39
|
+
- [ ] Distinction between RAF commits and Claude commits maintained
|
|
40
|
+
- [ ] No changes to other sections of CLAUDE.md
|
|
41
|
+
|
|
42
|
+
## Notes
|
|
43
|
+
- This is documentation only, no code changes
|
|
44
|
+
- The plan and outcome commit formats remain unchanged
|
|
45
|
+
- Only the task-level commits (made by Claude during execution) are affected
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Project Decisions
|
|
2
|
+
|
|
3
|
+
## For the name picker feature: When generating project names, should the name-generating model also have access to the project description (input.md content) to make relevant suggestions?
|
|
4
|
+
Yes, use full context - Claude sees the project description to suggest relevant names.
|
|
5
|
+
|
|
6
|
+
## How should the name selection UI work?
|
|
7
|
+
Arrow key navigation - Interactive menu with arrow keys to select.
|
|
8
|
+
|
|
9
|
+
## For the `raf do` project picker: How should pending projects be displayed when no project name is given?
|
|
10
|
+
List all pending with arrow selection - Show all pending projects, user navigates with arrows.
|
|
11
|
+
|
|
12
|
+
## For `raf status` truncation: When showing only the last 10 projects, how should older projects be indicated?
|
|
13
|
+
"... and N more" at top - Shows count of hidden older projects.
|
|
14
|
+
|
|
15
|
+
## For failure reason details: Should the bullet points show ALL previous failure attempts, or just the most recent one?
|
|
16
|
+
All attempts - Show bullet point for each failed attempt with reason.
|
|
17
|
+
|
|
18
|
+
## For the name generation model: Which model should generate project name suggestions?
|
|
19
|
+
Claude Sonnet - More capable model for creative naming.
|
|
20
|
+
|
|
21
|
+
## For arrow key selection UI (both name picker and project picker): Which library should be used?
|
|
22
|
+
Use a library that supports navigation with arrow keys + custom input option. Options considered:
|
|
23
|
+
- `inquirer-list-input` plugin - allows list selection with arbitrary user input
|
|
24
|
+
- Standard `@inquirer/prompts` with chained prompts (list + conditional input for "Other")
|
|
25
|
+
Recommendation: Use `@inquirer/prompts` (modern inquirer) with "Other (enter custom name)" as a choice that triggers an input prompt.
|
|
26
|
+
|
|
27
|
+
## Should RAF commit at any point, or should Claude handle all commits?
|
|
28
|
+
Claude handles ALL commits. One task = one commit (code changes + outcome file together). RAF should NOT make any commits - neither after planning nor after project completion. The execution prompt needs to include file location instructions so Claude knows where to write the outcome file.
|
|
29
|
+
|
|
30
|
+
## Should Claude commit the outcome file in the same commit as code changes, or separately?
|
|
31
|
+
Same commit as code - one commit contains both the code changes and the outcome file.
|
|
32
|
+
|
|
33
|
+
## How should name generation handle projects with many unrelated tasks?
|
|
34
|
+
When the project description has many unrelated/disconnected tasks, prefer more abstract, metaphorical, or fun names instead of trying to be descriptive. A name like "spring-cleaning" or "grab-bag" is better than trying to describe all the unrelated tasks.
|
|
35
|
+
|
|
36
|
+
## [Amendment] For the plan mode fix: Should the user's project description from input.md be passed as the user message (with instructions in system prompt)?
|
|
37
|
+
Project description as user message - Pass the input.md content as user message, keep planning instructions in system prompt.
|
|
38
|
+
|
|
39
|
+
## [Amendment] For the dangerously-skip-permissions flag in plan mode: What should the CLI flag be named?
|
|
40
|
+
CLI flag --auto or -y - A shorter flag name that implies auto-approve, matching common CLI conventions.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
- [ ] generate several name for project name (3-5) and let user pick or provide own name if user didn't specified name in "raf plan", instruct the name generating model to have variety in style for names (fun, metaphor, descriptive, somewhat related and fun etc)
|
|
2
|
+
- [ ] raf do without project name allows you to pick form pending projects
|
|
3
|
+
- [ ] raf status shows list of 10 last projects (with note on top what list was cut - ...)
|
|
4
|
+
- [ ] in outcome details section add short description for failure reasons (with bullet point for each failed attempt)
|
|
5
|
+
- [ ] don't do output commit since claude does it within the task
|
|
6
|
+
- [ ] instruct claude to do output file commit alongside the code and only after that produce <promise>COMPLETE</promise>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Outcome: Name Picker for `raf plan`
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Implemented an interactive name picker that generates 3-5 creative project name suggestions using Claude Sonnet and allows users to select from them using arrow-key navigation or provide a custom name.
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
### New Files
|
|
10
|
+
- **src/ui/name-picker.ts**: Interactive UI component using `@inquirer/prompts` for arrow-key selection
|
|
11
|
+
- **tests/unit/name-picker.test.ts**: Comprehensive tests for the name picker (13 tests)
|
|
12
|
+
|
|
13
|
+
### Modified Files
|
|
14
|
+
- **package.json**: Added `@inquirer/prompts` as a dependency
|
|
15
|
+
- **src/utils/name-generator.ts**: Added `generateProjectNames()` function that returns 3-5 names with varied styles (metaphorical, fun/playful, action-oriented, abstract, cultural reference)
|
|
16
|
+
- **src/commands/plan.ts**: Updated to use the new multi-name generation and picker flow
|
|
17
|
+
- **tests/unit/name-generator.test.ts**: Added tests for multi-name generation (21 new tests)
|
|
18
|
+
|
|
19
|
+
## Features Implemented
|
|
20
|
+
|
|
21
|
+
1. **Multi-name generation**: Claude Sonnet generates 5 names with different styles:
|
|
22
|
+
- Metaphorical (e.g., 'phoenix', 'lighthouse')
|
|
23
|
+
- Fun/Playful (e.g., 'turbo-boost', 'magic-beans')
|
|
24
|
+
- Action-oriented (e.g., 'bug-squasher', 'speed-demon')
|
|
25
|
+
- Abstract (e.g., 'horizon', 'cascade')
|
|
26
|
+
- Cultural reference (e.g., 'atlas', 'merlin')
|
|
27
|
+
|
|
28
|
+
2. **Interactive selection**: Users can navigate with arrow keys and press Enter to select
|
|
29
|
+
|
|
30
|
+
3. **Custom name option**: "Other (enter custom name)" option triggers text input with validation
|
|
31
|
+
|
|
32
|
+
4. **Robust fallback**: Falls back to single word-extraction name if API fails
|
|
33
|
+
|
|
34
|
+
## Acceptance Criteria Met
|
|
35
|
+
|
|
36
|
+
- ✅ Running `raf plan` without a name shows 3-5 generated names
|
|
37
|
+
- ✅ Names have variety in style (not all the same pattern)
|
|
38
|
+
- ✅ User can select with arrow keys and Enter
|
|
39
|
+
- ✅ User can choose "Other" and type custom name
|
|
40
|
+
- ✅ Selected name is used for project folder creation
|
|
41
|
+
- ✅ All tests pass (577 total)
|
|
42
|
+
|
|
43
|
+
<promise>COMPLETE</promise>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## Details
|
|
47
|
+
- Attempts: 1
|
|
48
|
+
- Elapsed time: 3m 45s
|
|
49
|
+
- Completed at: 2026-01-31T14:01:55.680Z
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Outcome: Interactive Project Picker for `raf do`
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Implemented an interactive project picker that allows users to run `raf do` without specifying a project name. When no arguments are provided, the command displays a list of pending projects with arrow-key navigation for selection.
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
### New Files
|
|
10
|
+
- **src/ui/project-picker.ts**: Interactive UI component for selecting pending projects
|
|
11
|
+
- `getPendingProjects()`: Filters projects to only show those with pending/failed tasks
|
|
12
|
+
- `formatProjectChoice()`: Formats project display as "001 fix-auth-bug (2/5 tasks)"
|
|
13
|
+
- `pickPendingProject()`: Shows interactive selection using `@inquirer/prompts`
|
|
14
|
+
- **tests/unit/project-picker.test.ts**: Comprehensive tests for the project picker (14 tests)
|
|
15
|
+
|
|
16
|
+
### Modified Files
|
|
17
|
+
- **src/commands/do.ts**: Updated to support optional project argument
|
|
18
|
+
- Changed `<projects...>` to `[projects...]` making the argument optional
|
|
19
|
+
- Added interactive picker flow when no arguments provided
|
|
20
|
+
- Shows "No pending projects found" message when list is empty
|
|
21
|
+
- Handles Ctrl+C gracefully for cancellation
|
|
22
|
+
|
|
23
|
+
## Features Implemented
|
|
24
|
+
|
|
25
|
+
1. **Pending project detection**: Scans RAF directory for projects with pending or failed tasks
|
|
26
|
+
2. **Task progress display**: Shows completion status like "(2/5 tasks)" for each project
|
|
27
|
+
3. **Arrow-key navigation**: Uses `@inquirer/prompts` select for interactive selection
|
|
28
|
+
4. **Sorted by project number**: Projects shown oldest first (by number)
|
|
29
|
+
5. **Graceful handling**:
|
|
30
|
+
- Empty list shows friendly message
|
|
31
|
+
- Ctrl+C exits cleanly without error
|
|
32
|
+
|
|
33
|
+
## Acceptance Criteria Met
|
|
34
|
+
|
|
35
|
+
- [x] Running `raf do` without arguments shows pending projects list
|
|
36
|
+
- [x] Projects show number, name, and progress (X/Y tasks)
|
|
37
|
+
- [x] User can navigate with arrow keys and select with Enter
|
|
38
|
+
- [x] Selected project is executed
|
|
39
|
+
- [x] Empty list shows friendly message "No pending projects found"
|
|
40
|
+
- [x] Ctrl+C exits gracefully
|
|
41
|
+
- [x] All tests pass (591 total)
|
|
42
|
+
|
|
43
|
+
<promise>COMPLETE</promise>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## Details
|
|
47
|
+
- Attempts: 1
|
|
48
|
+
- Elapsed time: 3m 25s
|
|
49
|
+
- Completed at: 2026-01-31T14:05:20.699Z
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Outcome: Enhanced `raf status` with Last 10 Projects Truncation
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Implemented truncation of `raf status` output to show only the last 10 projects by default, with a dimmed indicator at the top showing how many more projects exist.
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
### Modified Files
|
|
10
|
+
- **src/commands/status.ts**:
|
|
11
|
+
- Added `MAX_DISPLAYED_PROJECTS = 10` constant
|
|
12
|
+
- Modified `listAllProjects()` to slice to last N projects when total exceeds max
|
|
13
|
+
- Added truncation indicator at top: "... and N more project(s)" in dim text
|
|
14
|
+
- JSON output remains unchanged (returns all projects)
|
|
15
|
+
|
|
16
|
+
- **src/utils/logger.ts**:
|
|
17
|
+
- Added `dim()` method for visually distinct truncation indicator (uses ANSI dim escape code)
|
|
18
|
+
|
|
19
|
+
- **tests/unit/status-command.test.ts**:
|
|
20
|
+
- Added new test suite "Status Command - Truncation Behavior" with 8 tests covering:
|
|
21
|
+
- Projects below max (no truncation)
|
|
22
|
+
- Projects at exactly max
|
|
23
|
+
- Projects above max (truncation)
|
|
24
|
+
- Correct slicing behavior (last N projects)
|
|
25
|
+
- Correct hidden count calculation
|
|
26
|
+
- Ascending order preserved after slicing
|
|
27
|
+
- Edge case: exactly max + 1 projects
|
|
28
|
+
|
|
29
|
+
## Acceptance Criteria Met
|
|
30
|
+
|
|
31
|
+
- [x] `raf status` shows max 10 projects
|
|
32
|
+
- [x] When > 10 projects exist, shows "... and N more projects" at top
|
|
33
|
+
- [x] Projects are sorted by number (ascending) with newest at bottom
|
|
34
|
+
- [x] When <= 10 projects, no truncation indicator shown
|
|
35
|
+
- [x] Individual project status (`raf status <id>`) unchanged
|
|
36
|
+
- [x] All tests pass (599 total)
|
|
37
|
+
|
|
38
|
+
## Example Output
|
|
39
|
+
|
|
40
|
+
When there are 15 projects:
|
|
41
|
+
```
|
|
42
|
+
... and 5 more projects
|
|
43
|
+
006 project-f ●○○ (0/3)
|
|
44
|
+
007 project-g ✓✓● (2/3)
|
|
45
|
+
...
|
|
46
|
+
015 project-o ✓✓✓ (3/3)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
<promise>COMPLETE</promise>
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## Details
|
|
53
|
+
- Attempts: 1
|
|
54
|
+
- Elapsed time: 2m 7s
|
|
55
|
+
- Completed at: 2026-01-31T14:07:27.762Z
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Outcome: Failure Reason Details in Outcome Files
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Added a "Failure History" section to outcome files that lists all previous failure attempts with bullet points for each failure reason, showing the journey from failed attempts to eventual success (or final failure).
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
### New Files
|
|
10
|
+
- **tests/unit/failure-history.test.ts**: Comprehensive tests for the `formatFailureHistory` function (12 tests)
|
|
11
|
+
|
|
12
|
+
### Modified Files
|
|
13
|
+
- **src/commands/do.ts**:
|
|
14
|
+
- Added `formatFailureHistory()` function that formats failure history as a markdown section
|
|
15
|
+
- Added `failureHistory` array to track all failure reasons across retry attempts
|
|
16
|
+
- Updated all failure paths (timeout, context overflow, parsed failure, outcome file failure, no marker) to record failures
|
|
17
|
+
- Integrated failure history into both success and failure outcome generation
|
|
18
|
+
- For success: inserts failure history before `<promise>COMPLETE</promise>` marker
|
|
19
|
+
- For failure: inserts failure history before `<promise>FAILED</promise>` marker
|
|
20
|
+
|
|
21
|
+
## Features Implemented
|
|
22
|
+
|
|
23
|
+
1. **Failure tracking**: All failed attempts are recorded with their attempt number and reason
|
|
24
|
+
2. **Success tracking**: Final successful attempt is shown when preceded by failures
|
|
25
|
+
3. **Clean runs**: No failure history section is added when there are no failures
|
|
26
|
+
4. **Proper placement**: Failure history appears before the `<promise>` marker as specified
|
|
27
|
+
|
|
28
|
+
## Example Output
|
|
29
|
+
|
|
30
|
+
When task fails twice then succeeds:
|
|
31
|
+
```markdown
|
|
32
|
+
## Failure History
|
|
33
|
+
- **Attempt 1**: Context overflow detected after 45 minutes
|
|
34
|
+
- **Attempt 2**: API rate limit exceeded
|
|
35
|
+
- **Attempt 3**: Success
|
|
36
|
+
|
|
37
|
+
<promise>COMPLETE</promise>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
When task fails all retries:
|
|
41
|
+
```markdown
|
|
42
|
+
## Failure History
|
|
43
|
+
- **Attempt 1**: Task timed out
|
|
44
|
+
- **Attempt 2**: Task timed out
|
|
45
|
+
- **Attempt 3**: Context overflow - task too large
|
|
46
|
+
|
|
47
|
+
<promise>FAILED</promise>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Acceptance Criteria Met
|
|
51
|
+
|
|
52
|
+
- [x] Outcome files include failure history when any attempts failed
|
|
53
|
+
- [x] Each failed attempt shows attempt number and short reason
|
|
54
|
+
- [x] Successful final attempt also shows in history (if preceded by failures)
|
|
55
|
+
- [x] Clean runs (no failures) don't show failure history section
|
|
56
|
+
- [x] Failure reasons are concise (1-2 sentences)
|
|
57
|
+
- [x] All tests pass (611 total, 12 new for failure history)
|
|
58
|
+
|
|
59
|
+
<promise>COMPLETE</promise>
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
## Details
|
|
63
|
+
- Attempts: 1
|
|
64
|
+
- Elapsed time: 3m 29s
|
|
65
|
+
- Completed at: 2026-01-31T14:10:57.686Z
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Outcome: Remove All RAF-Side Git Commits
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Removed all git commit operations from RAF. Claude now handles all commits during task execution - one commit per task containing both code changes and the outcome file.
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
### Files Modified
|
|
10
|
+
|
|
11
|
+
- **src/commands/plan.ts**:
|
|
12
|
+
- Removed import of `commitProjectFolder`
|
|
13
|
+
- Removed import of `extractProjectNumber` (no longer needed)
|
|
14
|
+
- Removed commit logic after planning phase completes
|
|
15
|
+
- Removed commit logic after amendment phase completes
|
|
16
|
+
|
|
17
|
+
- **src/commands/do.ts**:
|
|
18
|
+
- Removed import of `commitProjectFolder`
|
|
19
|
+
- Removed commit logic when project completes (`isProjectComplete`)
|
|
20
|
+
- Kept `stashChanges` and `hasUncommittedChanges` for failure handling
|
|
21
|
+
|
|
22
|
+
- **src/core/git.ts**:
|
|
23
|
+
- Removed `CommitResult` interface
|
|
24
|
+
- Removed `CommitType` type
|
|
25
|
+
- Removed `commitProjectFolder` function
|
|
26
|
+
- Kept utility functions: `isGitRepo`, `getGitStatus`, `hasUncommittedChanges`, `parseGitStatus`, `getChangedFiles`, `stashChanges`
|
|
27
|
+
|
|
28
|
+
- **CLAUDE.md**:
|
|
29
|
+
- Updated "Git Commit Schema" section
|
|
30
|
+
- Removed "RAF-generated commits" section (`RAF[NNN:plan]`, `RAF[NNN:outcome]`)
|
|
31
|
+
- Updated to reflect that all commits are now Claude-generated during task execution
|
|
32
|
+
- Added note that code changes and outcome file are committed together
|
|
33
|
+
|
|
34
|
+
### Files Deleted
|
|
35
|
+
|
|
36
|
+
- **tests/unit/git-commit-project.test.ts**: Removed tests for the deleted `commitProjectFolder` function (11 tests)
|
|
37
|
+
|
|
38
|
+
## Acceptance Criteria Met
|
|
39
|
+
|
|
40
|
+
- [x] `raf plan` does not create any git commits
|
|
41
|
+
- [x] `raf do` does not create any git commits
|
|
42
|
+
- [x] Git stashing on failure still works
|
|
43
|
+
- [x] No errors when running in non-git directories
|
|
44
|
+
- [x] CLAUDE.md updated to reflect new workflow
|
|
45
|
+
- [x] All tests pass (600 total after removing 11 commit tests)
|
|
46
|
+
|
|
47
|
+
## Notes
|
|
48
|
+
|
|
49
|
+
This is a simplification of the codebase - less code, clearer responsibility. Claude handles all commits during task execution, making the workflow more straightforward and giving Claude full control over what gets committed and when.
|
|
50
|
+
|
|
51
|
+
<promise>COMPLETE</promise>
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
## Details
|
|
55
|
+
- Attempts: 1
|
|
56
|
+
- Elapsed time: 2m 55s
|
|
57
|
+
- Completed at: 2026-01-31T14:13:53.207Z
|