rafcode 2.5.1 → 3.2.1
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 +2 -1
- package/CLAUDE.md +7 -345
- package/RAF/{aaaabn-dependencies-watchdog/plans/02-update-planning-prompts.md → 13-dependencies-watchdog/plans/2-update-planning-prompts.md} +1 -1
- package/RAF/{aaaabn-dependencies-watchdog/plans/03-parse-dependencies-update-state.md → 13-dependencies-watchdog/plans/3-parse-dependencies-update-state.md} +1 -1
- package/RAF/{aaaabn-dependencies-watchdog/plans/04-implement-dependency-checking-in-do.md → 13-dependencies-watchdog/plans/4-implement-dependency-checking-in-do.md} +1 -1
- package/RAF/{aaaabn-dependencies-watchdog/plans/05-update-execution-prompts.md → 13-dependencies-watchdog/plans/5-update-execution-prompts.md} +1 -1
- package/RAF/{aaaabn-dependencies-watchdog/plans/06-add-tests.md → 13-dependencies-watchdog/plans/6-add-tests.md} +1 -1
- package/RAF/{aaaabr-decision-vault/plans/02-integrate-commit-into-plan.md → 17-decision-vault/plans/2-integrate-commit-into-plan.md} +1 -1
- package/RAF/{aaaabr-decision-vault/plans/03-add-tests-for-planning-commit.md → 17-decision-vault/plans/3-add-tests-for-planning-commit.md} +1 -1
- package/RAF/{aaaabt-verbose-chronicle/plans/04-commit-verification-before-halt.md → 19-verbose-chronicle/plans/4-commit-verification-before-halt.md} +1 -1
- package/RAF/{aaaacu-worktree-weaver/plans/02-worktree-plan-command.md → 20-worktree-weaver/plans/2-worktree-plan-command.md} +1 -1
- package/RAF/{aaaacu-worktree-weaver/plans/03-worktree-do-command.md → 20-worktree-weaver/plans/3-worktree-do-command.md} +1 -1
- package/RAF/{aaaacu-worktree-weaver/plans/04-auto-merge-and-cleanup.md → 20-worktree-weaver/plans/4-auto-merge-and-cleanup.md} +1 -1
- package/RAF/{aaaacu-worktree-weaver/plans/05-worktree-tests.md → 20-worktree-weaver/plans/5-worktree-tests.md} +1 -1
- package/RAF/{aaaacu-worktree-weaver/plans/06-update-documentation.md → 20-worktree-weaver/plans/6-update-documentation.md} +1 -1
- package/RAF/{aaaacv-trim-the-fat/plans/03-commit-artifacts-on-amend.md → 21-trim-the-fat/plans/3-commit-artifacts-on-amend.md} +1 -1
- package/RAF/{aaaacv-trim-the-fat/plans/04-worktree-aware-exit-messages.md → 21-trim-the-fat/plans/4-worktree-aware-exit-messages.md} +1 -1
- package/RAF/{aaaacw-prune-cycle/plans/02-cleanup-worktree-on-success.md → 22-prune-cycle/plans/2-cleanup-worktree-on-success.md} +1 -1
- package/RAF/{aaaacw-prune-cycle/plans/03-amend-recreate-worktree.md → 22-prune-cycle/plans/3-amend-recreate-worktree.md} +1 -1
- package/RAF/{aaaacx-epoch-shift/plans/02-update-pattern-matching.md → 23-epoch-shift/plans/2-update-pattern-matching.md} +1 -1
- package/RAF/{aaaacx-epoch-shift/plans/03-update-tests.md → 23-epoch-shift/plans/3-update-tests.md} +1 -1
- package/RAF/{aaaacx-epoch-shift/plans/04-update-documentation.md → 23-epoch-shift/plans/4-update-documentation.md} +1 -1
- package/RAF/{ahmpro-merge-guardian/plans/003-worktree-pr-creation.md → 24-merge-guardian/plans/3-worktree-pr-creation.md} +1 -1
- package/RAF/{ahmpro-merge-guardian/plans/004-post-execution-picker.md → 24-merge-guardian/plans/4-post-execution-picker.md} +1 -1
- package/RAF/{ahnbcu-letterjam/plans/02-update-tests.md → 25-letterjam/plans/2-update-tests.md} +1 -1
- package/RAF/{ahnbcu-letterjam/plans/03-migrate-command.md → 25-letterjam/plans/3-migrate-command.md} +1 -1
- package/RAF/{ahnbcu-letterjam/plans/04-update-documentation.md → 25-letterjam/plans/4-update-documentation.md} +1 -1
- package/RAF/{ahnwrk-worktree-weaver/plans/04-fix-pr-description.md → 26-worktree-weaver/plans/4-fix-pr-description.md} +1 -1
- package/RAF/{ahrren-turbo-finder/plans/02-medium-effort-do.md → 27-turbo-finder/plans/2-medium-effort-do.md} +1 -1
- package/RAF/{ahslfe-config-wizard/plans/02-refactor-codebase-to-use-config.md → 28-config-wizard/plans/2-refactor-codebase-to-use-config.md} +1 -1
- package/RAF/{ahslfe-config-wizard/plans/03-create-config-documentation.md → 28-config-wizard/plans/3-create-config-documentation.md} +1 -1
- package/RAF/{ahslfe-config-wizard/plans/04-implement-raf-config-command.md → 28-config-wizard/plans/4-implement-raf-config-command.md} +1 -1
- package/RAF/{ahslfe-config-wizard/plans/05-update-claude-md.md → 28-config-wizard/plans/5-update-claude-md.md} +1 -1
- package/RAF/{ahstvo-token-tracker/plans/03-unify-stream-json-execution.md → 29-token-tracker/plans/3-unify-stream-json-execution.md} +1 -1
- package/RAF/{ahstvo-token-tracker/plans/04-token-tracking-cost-calculation.md → 29-token-tracker/plans/4-token-tracking-cost-calculation.md} +1 -1
- package/RAF/{ahstvo-token-tracker/plans/05-token-cost-console-reporting.md → 29-token-tracker/plans/5-token-cost-console-reporting.md} +1 -1
- package/RAF/{ahstvo-token-tracker/plans/06-runtime-verbose-toggle.md → 29-token-tracker/plans/6-runtime-verbose-toggle.md} +1 -1
- package/RAF/{ahtahs-token-reaper/plans/02-accumulate-usage-in-retry-loop.md → 30-token-reaper/plans/2-accumulate-usage-in-retry-loop.md} +1 -1
- package/RAF/{ahtahs-token-reaper/plans/03-per-attempt-display-formatting.md → 30-token-reaper/plans/3-per-attempt-display-formatting.md} +1 -1
- package/RAF/{ahvrih-rate-forge/plans/03-rate-limit-estimation.md → 31-rate-forge/plans/3-rate-limit-estimation.md} +1 -1
- package/RAF/{ahvrih-rate-forge/plans/06-sync-readme-with-codebase.md → 31-rate-forge/plans/6-sync-readme-with-codebase.md} +1 -1
- package/RAF/{ahvrih-rate-forge/plans/08-plan-execution-metadata.md → 31-rate-forge/plans/8-plan-execution-metadata.md} +1 -1
- package/RAF/{ahwidh-quick-fix-gremlin/plans/06-sync-worktree-branch-before-execution.md → 32-quick-fix-gremlin/plans/6-sync-worktree-branch-before-execution.md} +1 -1
- package/RAF/{ahwqwq-model-whisperer/plans/03-add-plan-resume-flag.md → 33-model-whisperer/plans/3-add-plan-resume-flag.md} +1 -1
- package/RAF/{ahwvrz-legacy-sunset/plans/02-fix-resume-worktree-resolution.md → 34-legacy-sunset/plans/2-fix-resume-worktree-resolution.md} +1 -1
- package/RAF/{ahwzmc-echo-forge/plans/03-update-readme.md → 35-echo-forge/plans/3-update-readme.md} +1 -1
- package/RAF/37-flux-weave/decisions.md +22 -0
- package/RAF/37-flux-weave/input.md +4 -0
- package/RAF/37-flux-weave/outcomes/1-numeric-project-ids.md +32 -0
- package/RAF/37-flux-weave/outcomes/2-numeric-task-ids.md +34 -0
- package/RAF/37-flux-weave/outcomes/3-amend-commit-without-new-plans.md +23 -0
- package/RAF/37-flux-weave/outcomes/4-auto-detect-existing-project.md +30 -0
- package/RAF/37-flux-weave/plans/1-numeric-project-ids.md +75 -0
- package/RAF/37-flux-weave/plans/2-numeric-task-ids.md +65 -0
- package/RAF/37-flux-weave/plans/3-amend-commit-without-new-plans.md +54 -0
- package/RAF/37-flux-weave/plans/4-auto-detect-existing-project.md +52 -0
- package/RAF/38-dual-wielder/decisions.md +44 -0
- package/RAF/38-dual-wielder/input.md +13 -0
- package/RAF/38-dual-wielder/outcomes/1-config-schema-provider-types.md +47 -0
- package/RAF/38-dual-wielder/outcomes/2-abstract-cli-runner.md +33 -0
- package/RAF/38-dual-wielder/outcomes/3-implement-codex-runner.md +38 -0
- package/RAF/38-dual-wielder/outcomes/4-update-prompts-llm-agnostic.md +50 -0
- package/RAF/38-dual-wielder/outcomes/5-update-readme-docs.md +33 -0
- package/RAF/38-dual-wielder/outcomes/6-do-unified-project-scanning.md +25 -0
- package/RAF/38-dual-wielder/outcomes/7-fix-plan-amend-automode.md +28 -0
- package/RAF/38-dual-wielder/outcomes/8-e2e-test-codex-provider.md +139 -0
- package/RAF/38-dual-wielder/plans/1-config-schema-provider-types.md +90 -0
- package/RAF/38-dual-wielder/plans/2-abstract-cli-runner.md +76 -0
- package/RAF/38-dual-wielder/plans/3-implement-codex-runner.md +94 -0
- package/RAF/38-dual-wielder/plans/4-update-prompts-llm-agnostic.md +70 -0
- package/RAF/38-dual-wielder/plans/5-update-readme-docs.md +52 -0
- package/RAF/38-dual-wielder/plans/6-do-unified-project-scanning.md +40 -0
- package/RAF/38-dual-wielder/plans/7-fix-plan-amend-automode.md +51 -0
- package/RAF/38-dual-wielder/plans/8-e2e-test-codex-provider.md +95 -0
- package/RAF/39-pathless-rover/decisions.md +16 -0
- package/RAF/39-pathless-rover/input.md +2 -0
- package/RAF/39-pathless-rover/outcomes/1-fix-codex-stream-renderer.md +21 -0
- package/RAF/39-pathless-rover/outcomes/2-wire-provider-flag.md +28 -0
- package/RAF/39-pathless-rover/outcomes/3-remove-worktree-flag-do.md +41 -0
- package/RAF/39-pathless-rover/outcomes/4-remove-worktree-flag-plan-amend.md +30 -0
- package/RAF/39-pathless-rover/outcomes/5-update-prompts-and-docs.md +26 -0
- package/RAF/39-pathless-rover/plans/1-fix-codex-stream-renderer.md +43 -0
- package/RAF/39-pathless-rover/plans/2-wire-provider-flag.md +48 -0
- package/RAF/39-pathless-rover/plans/3-remove-worktree-flag-do.md +41 -0
- package/RAF/39-pathless-rover/plans/4-remove-worktree-flag-plan-amend.md +43 -0
- package/RAF/39-pathless-rover/plans/5-update-prompts-and-docs.md +31 -0
- package/RAF/40-numeric-order-fix/decisions.md +7 -0
- package/RAF/40-numeric-order-fix/input.md +19 -0
- package/RAF/40-numeric-order-fix/outcomes/1-fix-numeric-sort-order.md +18 -0
- package/RAF/40-numeric-order-fix/outcomes/2-add-npm-keywords.md +10 -0
- package/RAF/40-numeric-order-fix/plans/1-fix-numeric-sort-order.md +48 -0
- package/RAF/40-numeric-order-fix/plans/2-add-npm-keywords.md +23 -0
- package/README.md +62 -18
- package/dist/commands/config.js +7 -7
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/do.d.ts.map +1 -1
- package/dist/commands/do.js +51 -230
- package/dist/commands/do.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +96 -147
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/status.js +1 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/core/claude-runner.d.ts +19 -116
- package/dist/core/claude-runner.d.ts.map +1 -1
- package/dist/core/claude-runner.js +20 -173
- package/dist/core/claude-runner.js.map +1 -1
- package/dist/core/codex-runner.d.ts +41 -0
- package/dist/core/codex-runner.d.ts.map +1 -0
- package/dist/core/codex-runner.js +271 -0
- package/dist/core/codex-runner.js.map +1 -0
- package/dist/core/completion-detector.d.ts +47 -0
- package/dist/core/completion-detector.d.ts.map +1 -0
- package/dist/core/completion-detector.js +143 -0
- package/dist/core/completion-detector.js.map +1 -0
- package/dist/core/failure-analyzer.d.ts +1 -1
- package/dist/core/failure-analyzer.js +10 -10
- package/dist/core/failure-analyzer.js.map +1 -1
- package/dist/core/project-manager.d.ts.map +1 -1
- package/dist/core/project-manager.js +2 -2
- package/dist/core/project-manager.js.map +1 -1
- package/dist/core/pull-request.d.ts +4 -4
- package/dist/core/pull-request.js +13 -13
- package/dist/core/pull-request.js.map +1 -1
- package/dist/core/runner-factory.d.ts +12 -0
- package/dist/core/runner-factory.d.ts.map +1 -0
- package/dist/core/runner-factory.js +30 -0
- package/dist/core/runner-factory.js.map +1 -0
- package/dist/core/runner-interface.d.ts +14 -0
- package/dist/core/runner-interface.d.ts.map +1 -0
- package/dist/core/runner-interface.js +2 -0
- package/dist/core/runner-interface.js.map +1 -0
- package/dist/core/runner-types.d.ts +73 -0
- package/dist/core/runner-types.d.ts.map +1 -0
- package/dist/core/runner-types.js +2 -0
- package/dist/core/runner-types.js.map +1 -0
- package/dist/core/shutdown-handler.d.ts +8 -4
- package/dist/core/shutdown-handler.d.ts.map +1 -1
- package/dist/core/shutdown-handler.js +14 -8
- package/dist/core/shutdown-handler.js.map +1 -1
- package/dist/core/state-derivation.d.ts +2 -2
- package/dist/core/state-derivation.d.ts.map +1 -1
- package/dist/core/state-derivation.js +12 -15
- package/dist/core/state-derivation.js.map +1 -1
- package/dist/core/worktree.d.ts +1 -1
- package/dist/core/worktree.d.ts.map +1 -1
- package/dist/core/worktree.js +14 -16
- package/dist/core/worktree.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/parsers/codex-stream-renderer.d.ts +48 -0
- package/dist/parsers/codex-stream-renderer.d.ts.map +1 -0
- package/dist/parsers/codex-stream-renderer.js +158 -0
- package/dist/parsers/codex-stream-renderer.js.map +1 -0
- package/dist/parsers/output-parser.d.ts +2 -2
- package/dist/parsers/output-parser.js +2 -2
- package/dist/parsers/stream-renderer.d.ts +1 -1
- package/dist/parsers/stream-renderer.js +1 -1
- package/dist/prompts/amend.d.ts +1 -2
- package/dist/prompts/amend.d.ts.map +1 -1
- package/dist/prompts/amend.js +8 -9
- package/dist/prompts/amend.js.map +1 -1
- package/dist/prompts/execution.js +2 -2
- package/dist/prompts/execution.js.map +1 -1
- package/dist/prompts/planning.d.ts +1 -1
- package/dist/prompts/planning.d.ts.map +1 -1
- package/dist/prompts/planning.js +14 -15
- package/dist/prompts/planning.js.map +1 -1
- package/dist/types/config.d.ts +21 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +16 -0
- package/dist/types/config.js.map +1 -1
- package/dist/ui/project-picker.d.ts.map +1 -1
- package/dist/ui/project-picker.js.map +1 -1
- package/dist/utils/config.d.ts +24 -6
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +155 -15
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/name-generator.d.ts +2 -2
- package/dist/utils/name-generator.js +9 -9
- package/dist/utils/name-generator.js.map +1 -1
- package/dist/utils/paths.d.ts +32 -51
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +121 -150
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/token-tracker.d.ts +2 -2
- package/dist/utils/token-tracker.js +4 -4
- package/dist/utils/token-tracker.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +7 -10
- package/dist/utils/validation.js.map +1 -1
- package/package.json +7 -2
- package/src/commands/config.ts +7 -7
- package/src/commands/do.ts +53 -265
- package/src/commands/plan.ts +102 -155
- package/src/commands/status.ts +1 -1
- package/src/core/claude-runner.ts +33 -277
- package/src/core/codex-runner.ts +326 -0
- package/src/core/completion-detector.ts +177 -0
- package/src/core/failure-analyzer.ts +10 -10
- package/src/core/project-manager.ts +2 -1
- package/src/core/pull-request.ts +13 -13
- package/src/core/runner-factory.ts +35 -0
- package/src/core/runner-interface.ts +14 -0
- package/src/core/runner-types.ts +75 -0
- package/src/core/shutdown-handler.ts +17 -10
- package/src/core/state-derivation.ts +12 -15
- package/src/core/worktree.ts +14 -16
- package/src/index.ts +1 -1
- package/src/parsers/codex-stream-renderer.ts +210 -0
- package/src/parsers/output-parser.ts +2 -2
- package/src/parsers/stream-renderer.ts +1 -1
- package/src/prompts/amend.ts +7 -10
- package/src/prompts/config-docs.md +8 -8
- package/src/prompts/execution.ts +2 -2
- package/src/prompts/planning.ts +14 -16
- package/src/types/config.ts +39 -1
- package/src/ui/project-picker.ts +1 -0
- package/src/utils/config.ts +170 -14
- package/src/utils/name-generator.ts +9 -9
- package/src/utils/paths.ts +123 -159
- package/src/utils/token-tracker.ts +4 -4
- package/src/utils/validation.ts +7 -10
- package/tests/unit/commit-planning-artifacts-worktree.test.ts +14 -14
- package/tests/unit/commit-planning-artifacts.test.ts +40 -40
- package/tests/unit/config.test.ts +8 -8
- package/tests/unit/dependency-integration.test.ts +96 -96
- package/tests/unit/do-blocked-tasks.test.ts +1 -1
- package/tests/unit/do-command.test.ts +36 -36
- package/tests/unit/do-rerun.test.ts +1 -1
- package/tests/unit/execution-prompt.test.ts +62 -62
- package/tests/unit/git-stash.test.ts +4 -4
- package/tests/unit/paths.test.ts +135 -249
- package/tests/unit/plan-command.test.ts +103 -103
- package/tests/unit/planning-prompt.test.ts +3 -3
- package/tests/unit/project-manager.test.ts +9 -10
- package/tests/unit/project-picker.test.ts +74 -74
- package/tests/unit/pull-request.test.ts +3 -3
- package/tests/unit/state-derivation.test.ts +144 -144
- package/tests/unit/status-command.test.ts +71 -103
- package/tests/unit/worktree.test.ts +32 -33
- /package/RAF/{aaaaab-raf-task-improvements → 1-raf-task-improvements}/input.md +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/outcomes/01-add-decisions-folder.md → 1-raf-task-improvements/outcomes/1-add-decisions-folder.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/outcomes/02-fix-write-error-on-shutdown.md → 1-raf-task-improvements/outcomes/2-fix-write-error-on-shutdown.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/outcomes/03-stash-changes-on-failure.md → 1-raf-task-improvements/outcomes/3-stash-changes-on-failure.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/outcomes/04-add-project-name-to-commits.md → 1-raf-task-improvements/outcomes/4-add-project-name-to-commits.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/outcomes/05-add-running-time-display.md → 1-raf-task-improvements/outcomes/5-add-running-time-display.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/outcomes/06-add-task-name-to-logs.md → 1-raf-task-improvements/outcomes/6-add-task-name-to-logs.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/outcomes/07-show-model-at-task-start.md → 1-raf-task-improvements/outcomes/7-show-model-at-task-start.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/outcomes/09-remove-editor-placeholder-text.md → 1-raf-task-improvements/outcomes/9-remove-editor-placeholder-text.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements → 1-raf-task-improvements}/outcomes/SUMMARY.md +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/plans/01-add-decisions-folder.md → 1-raf-task-improvements/plans/1-add-decisions-folder.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/plans/02-fix-write-error-on-shutdown.md → 1-raf-task-improvements/plans/2-fix-write-error-on-shutdown.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/plans/03-stash-changes-on-failure.md → 1-raf-task-improvements/plans/3-stash-changes-on-failure.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/plans/04-add-project-name-to-commits.md → 1-raf-task-improvements/plans/4-add-project-name-to-commits.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/plans/05-add-running-time-display.md → 1-raf-task-improvements/plans/5-add-running-time-display.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/plans/06-add-task-name-to-logs.md → 1-raf-task-improvements/plans/6-add-task-name-to-logs.md} +0 -0
- /package/RAF/{aaaaab-raf-task-improvements/plans/09-remove-editor-placeholder-text.md → 1-raf-task-improvements/plans/9-remove-editor-placeholder-text.md} +0 -0
- /package/RAF/{aaaabk-outcome-marker-fallback → 10-outcome-marker-fallback}/decisions.md +0 -0
- /package/RAF/{aaaabk-outcome-marker-fallback → 10-outcome-marker-fallback}/input.md +0 -0
- /package/RAF/{aaaabk-outcome-marker-fallback/outcomes/01-outcome-file-marker-fallback.md → 10-outcome-marker-fallback/outcomes/1-outcome-file-marker-fallback.md} +0 -0
- /package/RAF/{aaaabk-outcome-marker-fallback/outcomes/02-creative-project-naming.md → 10-outcome-marker-fallback/outcomes/2-creative-project-naming.md} +0 -0
- /package/RAF/{aaaabk-outcome-marker-fallback/plans/01-outcome-file-marker-fallback.md → 10-outcome-marker-fallback/plans/1-outcome-file-marker-fallback.md} +0 -0
- /package/RAF/{aaaabk-outcome-marker-fallback/plans/02-creative-project-naming.md → 10-outcome-marker-fallback/plans/2-creative-project-naming.md} +0 -0
- /package/RAF/{aaaabl-do-task-in-commit → 11-do-task-in-commit}/decisions.md +0 -0
- /package/RAF/{aaaabl-do-task-in-commit → 11-do-task-in-commit}/input.md +0 -0
- /package/RAF/{aaaabl-do-task-in-commit/outcomes/01-update-execution-prompt.md → 11-do-task-in-commit/outcomes/1-update-execution-prompt.md} +0 -0
- /package/RAF/{aaaabl-do-task-in-commit/outcomes/02-update-tests.md → 11-do-task-in-commit/outcomes/2-update-tests.md} +0 -0
- /package/RAF/{aaaabl-do-task-in-commit/outcomes/03-update-documentation.md → 11-do-task-in-commit/outcomes/3-update-documentation.md} +0 -0
- /package/RAF/{aaaabl-do-task-in-commit/plans/01-update-execution-prompt.md → 11-do-task-in-commit/plans/1-update-execution-prompt.md} +0 -0
- /package/RAF/{aaaabl-do-task-in-commit/plans/02-update-tests.md → 11-do-task-in-commit/plans/2-update-tests.md} +0 -0
- /package/RAF/{aaaabl-do-task-in-commit/plans/03-update-documentation.md → 11-do-task-in-commit/plans/3-update-documentation.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet → 12-name-picker-buffet}/decisions.md +0 -0
- /package/RAF/{aaaabm-name-picker-buffet → 12-name-picker-buffet}/input.md +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/outcomes/01-name-picker-for-raf-plan.md → 12-name-picker-buffet/outcomes/1-name-picker-for-raf-plan.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/outcomes/02-interactive-project-picker-for-raf-do.md → 12-name-picker-buffet/outcomes/2-interactive-project-picker-for-raf-do.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/outcomes/03-raf-status-truncation.md → 12-name-picker-buffet/outcomes/3-raf-status-truncation.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/outcomes/04-failure-reason-details.md → 12-name-picker-buffet/outcomes/4-failure-reason-details.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/outcomes/05-remove-raf-commits.md → 12-name-picker-buffet/outcomes/5-remove-raf-commits.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/outcomes/06-update-execution-prompt-for-commits.md → 12-name-picker-buffet/outcomes/6-update-execution-prompt-for-commits.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/outcomes/07-fix-plan-mode-user-prompt.md → 12-name-picker-buffet/outcomes/7-fix-plan-mode-user-prompt.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/outcomes/08-add-auto-flag-for-plan-mode.md → 12-name-picker-buffet/outcomes/8-add-auto-flag-for-plan-mode.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/plans/01-name-picker-for-raf-plan.md → 12-name-picker-buffet/plans/1-name-picker-for-raf-plan.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/plans/02-interactive-project-picker-for-raf-do.md → 12-name-picker-buffet/plans/2-interactive-project-picker-for-raf-do.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/plans/03-raf-status-truncation.md → 12-name-picker-buffet/plans/3-raf-status-truncation.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/plans/04-failure-reason-details.md → 12-name-picker-buffet/plans/4-failure-reason-details.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/plans/05-remove-raf-commits.md → 12-name-picker-buffet/plans/5-remove-raf-commits.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/plans/06-update-execution-prompt-for-commits.md → 12-name-picker-buffet/plans/6-update-execution-prompt-for-commits.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/plans/07-fix-plan-mode-user-prompt.md → 12-name-picker-buffet/plans/7-fix-plan-mode-user-prompt.md} +0 -0
- /package/RAF/{aaaabm-name-picker-buffet/plans/08-add-auto-flag-for-plan-mode.md → 12-name-picker-buffet/plans/8-add-auto-flag-for-plan-mode.md} +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog → 13-dependencies-watchdog}/decisions.md +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog → 13-dependencies-watchdog}/input.md +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog/outcomes/01-define-dependency-syntax.md → 13-dependencies-watchdog/outcomes/1-define-dependency-syntax.md} +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog/outcomes/02-update-planning-prompts.md → 13-dependencies-watchdog/outcomes/2-update-planning-prompts.md} +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog/outcomes/03-parse-dependencies-update-state.md → 13-dependencies-watchdog/outcomes/3-parse-dependencies-update-state.md} +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog/outcomes/04-implement-dependency-checking-in-do.md → 13-dependencies-watchdog/outcomes/4-implement-dependency-checking-in-do.md} +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog/outcomes/05-update-execution-prompts.md → 13-dependencies-watchdog/outcomes/5-update-execution-prompts.md} +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog/outcomes/06-add-tests.md → 13-dependencies-watchdog/outcomes/6-add-tests.md} +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog/outcomes/07-add-act-alias.md → 13-dependencies-watchdog/outcomes/7-add-act-alias.md} +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog/outcomes/08-add-exit-message.md → 13-dependencies-watchdog/outcomes/8-add-exit-message.md} +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog/plans/01-define-dependency-syntax.md → 13-dependencies-watchdog/plans/1-define-dependency-syntax.md} +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog/plans/07-add-act-alias.md → 13-dependencies-watchdog/plans/7-add-act-alias.md} +0 -0
- /package/RAF/{aaaabn-dependencies-watchdog/plans/08-add-exit-message.md → 13-dependencies-watchdog/plans/8-add-exit-message.md} +0 -0
- /package/RAF/{aaaabo-watchdog → 14-watchdog}/decisions.md +0 -0
- /package/RAF/{aaaabo-watchdog → 14-watchdog}/input.md +0 -0
- /package/RAF/{aaaabo-watchdog/outcomes/01-amend-flag-position.md → 14-watchdog/outcomes/1-amend-flag-position.md} +0 -0
- /package/RAF/{aaaabo-watchdog/outcomes/02-details-only-on-failure.md → 14-watchdog/outcomes/2-details-only-on-failure.md} +0 -0
- /package/RAF/{aaaabo-watchdog/plans/01-amend-flag-position.md → 14-watchdog/plans/1-amend-flag-position.md} +0 -0
- /package/RAF/{aaaabo-watchdog/plans/02-details-only-on-failure.md → 14-watchdog/plans/2-details-only-on-failure.md} +0 -0
- /package/RAF/{aaaabp-name-lottery → 15-name-lottery}/decisions.md +0 -0
- /package/RAF/{aaaabp-name-lottery → 15-name-lottery}/input.md +0 -0
- /package/RAF/{aaaabp-name-lottery/outcomes/01-auto-pick-project-name.md → 15-name-lottery/outcomes/1-auto-pick-project-name.md} +0 -0
- /package/RAF/{aaaabp-name-lottery/outcomes/02-mention-plan-files-in-commit.md → 15-name-lottery/outcomes/2-mention-plan-files-in-commit.md} +0 -0
- /package/RAF/{aaaabp-name-lottery/outcomes/03-fix-input-md-in-amend-flow.md → 15-name-lottery/outcomes/3-fix-input-md-in-amend-flow.md} +0 -0
- /package/RAF/{aaaabp-name-lottery/plans/01-auto-pick-project-name.md → 15-name-lottery/plans/1-auto-pick-project-name.md} +0 -0
- /package/RAF/{aaaabp-name-lottery/plans/02-mention-plan-files-in-commit.md → 15-name-lottery/plans/2-mention-plan-files-in-commit.md} +0 -0
- /package/RAF/{aaaabp-name-lottery/plans/03-fix-input-md-in-amend-flow.md → 15-name-lottery/plans/3-fix-input-md-in-amend-flow.md} +0 -0
- /package/RAF/{aaaabq-planning-scalpel → 16-planning-scalpel}/decisions.md +0 -0
- /package/RAF/{aaaabq-planning-scalpel → 16-planning-scalpel}/input.md +0 -0
- /package/RAF/{aaaabq-planning-scalpel/outcomes/01-update-git-commit-instructions.md → 16-planning-scalpel/outcomes/1-update-git-commit-instructions.md} +0 -0
- /package/RAF/{aaaabq-planning-scalpel/plans/01-update-git-commit-instructions.md → 16-planning-scalpel/plans/1-update-git-commit-instructions.md} +0 -0
- /package/RAF/{aaaabr-decision-vault → 17-decision-vault}/decisions.md +0 -0
- /package/RAF/{aaaabr-decision-vault → 17-decision-vault}/input.md +0 -0
- /package/RAF/{aaaabr-decision-vault/outcomes/01-create-git-commit-utility.md → 17-decision-vault/outcomes/1-create-git-commit-utility.md} +0 -0
- /package/RAF/{aaaabr-decision-vault/outcomes/02-integrate-commit-into-plan.md → 17-decision-vault/outcomes/2-integrate-commit-into-plan.md} +0 -0
- /package/RAF/{aaaabr-decision-vault/outcomes/03-add-tests-for-planning-commit.md → 17-decision-vault/outcomes/3-add-tests-for-planning-commit.md} +0 -0
- /package/RAF/{aaaabr-decision-vault/plans/01-create-git-commit-utility.md → 17-decision-vault/plans/1-create-git-commit-utility.md} +0 -0
- /package/RAF/{aaaabs-workflow-forge → 18-workflow-forge}/decisions.md +0 -0
- /package/RAF/{aaaabs-workflow-forge → 18-workflow-forge}/input.md +0 -0
- /package/RAF/{aaaabs-workflow-forge/outcomes/01-add-task-number-progress.md → 18-workflow-forge/outcomes/1-add-task-number-progress.md} +0 -0
- /package/RAF/{aaaabs-workflow-forge/outcomes/02-update-plan-do-prompts.md → 18-workflow-forge/outcomes/2-update-plan-do-prompts.md} +0 -0
- /package/RAF/{aaaabs-workflow-forge/plans/01-add-task-number-progress.md → 18-workflow-forge/plans/1-add-task-number-progress.md} +0 -0
- /package/RAF/{aaaabs-workflow-forge/plans/02-update-plan-do-prompts.md → 18-workflow-forge/plans/2-update-plan-do-prompts.md} +0 -0
- /package/RAF/{aaaabt-verbose-chronicle → 19-verbose-chronicle}/decisions.md +0 -0
- /package/RAF/{aaaabt-verbose-chronicle → 19-verbose-chronicle}/input.md +0 -0
- /package/RAF/{aaaabt-verbose-chronicle/outcomes/01-amend-iteration-references.md → 19-verbose-chronicle/outcomes/1-amend-iteration-references.md} +0 -0
- /package/RAF/{aaaabt-verbose-chronicle/outcomes/02-verbose-task-name-display.md → 19-verbose-chronicle/outcomes/2-verbose-task-name-display.md} +0 -0
- /package/RAF/{aaaabt-verbose-chronicle/outcomes/03-verbose-streaming-fix.md → 19-verbose-chronicle/outcomes/3-verbose-streaming-fix.md} +0 -0
- /package/RAF/{aaaabt-verbose-chronicle/outcomes/04-commit-verification-before-halt.md → 19-verbose-chronicle/outcomes/4-commit-verification-before-halt.md} +0 -0
- /package/RAF/{aaaabt-verbose-chronicle/plans/01-amend-iteration-references.md → 19-verbose-chronicle/plans/1-amend-iteration-references.md} +0 -0
- /package/RAF/{aaaabt-verbose-chronicle/plans/02-verbose-task-name-display.md → 19-verbose-chronicle/plans/2-verbose-task-name-display.md} +0 -0
- /package/RAF/{aaaabt-verbose-chronicle/plans/03-verbose-streaming-fix.md → 19-verbose-chronicle/plans/3-verbose-streaming-fix.md} +0 -0
- /package/RAF/{aaaaac-raf-task-improvements-execution → 2-raf-task-improvements-execution}/decisions/DECISIONS.md +0 -0
- /package/RAF/{aaaaac-raf-task-improvements-execution → 2-raf-task-improvements-execution}/input.md +0 -0
- /package/RAF/{aaaaac-raf-task-improvements-execution/outcomes/01-commit-show-model-at-task-start.md → 2-raf-task-improvements-execution/outcomes/1-commit-show-model-at-task-start.md} +0 -0
- /package/RAF/{aaaaac-raf-task-improvements-execution/outcomes/02-delete-skipped-plan.md → 2-raf-task-improvements-execution/outcomes/2-delete-skipped-plan.md} +0 -0
- /package/RAF/{aaaaac-raf-task-improvements-execution → 2-raf-task-improvements-execution}/outcomes/SUMMARY.md +0 -0
- /package/RAF/{aaaaac-raf-task-improvements-execution/plans/01-commit-show-model-at-task-start.md → 2-raf-task-improvements-execution/plans/1-commit-show-model-at-task-start.md} +0 -0
- /package/RAF/{aaaaac-raf-task-improvements-execution/plans/02-delete-skipped-plan.md → 2-raf-task-improvements-execution/plans/2-delete-skipped-plan.md} +0 -0
- /package/RAF/{aaaacu-worktree-weaver → 20-worktree-weaver}/decisions.md +0 -0
- /package/RAF/{aaaacu-worktree-weaver → 20-worktree-weaver}/input.md +0 -0
- /package/RAF/{aaaacu-worktree-weaver/outcomes/01-git-worktree-utilities.md → 20-worktree-weaver/outcomes/1-git-worktree-utilities.md} +0 -0
- /package/RAF/{aaaacu-worktree-weaver/outcomes/02-worktree-plan-command.md → 20-worktree-weaver/outcomes/2-worktree-plan-command.md} +0 -0
- /package/RAF/{aaaacu-worktree-weaver/outcomes/03-worktree-do-command.md → 20-worktree-weaver/outcomes/3-worktree-do-command.md} +0 -0
- /package/RAF/{aaaacu-worktree-weaver/outcomes/04-auto-merge-and-cleanup.md → 20-worktree-weaver/outcomes/4-auto-merge-and-cleanup.md} +0 -0
- /package/RAF/{aaaacu-worktree-weaver/outcomes/05-worktree-tests.md → 20-worktree-weaver/outcomes/5-worktree-tests.md} +0 -0
- /package/RAF/{aaaacu-worktree-weaver/outcomes/06-update-documentation.md → 20-worktree-weaver/outcomes/6-update-documentation.md} +0 -0
- /package/RAF/{aaaacu-worktree-weaver/plans/01-git-worktree-utilities.md → 20-worktree-weaver/plans/1-git-worktree-utilities.md} +0 -0
- /package/RAF/{aaaacv-trim-the-fat → 21-trim-the-fat}/decisions.md +0 -0
- /package/RAF/{aaaacv-trim-the-fat → 21-trim-the-fat}/input.md +0 -0
- /package/RAF/{aaaacv-trim-the-fat/outcomes/01-add-worktree-support-to-status.md → 21-trim-the-fat/outcomes/1-add-worktree-support-to-status.md} +0 -0
- /package/RAF/{aaaacv-trim-the-fat/outcomes/02-remove-multi-project-from-do.md → 21-trim-the-fat/outcomes/2-remove-multi-project-from-do.md} +0 -0
- /package/RAF/{aaaacv-trim-the-fat/outcomes/03-commit-artifacts-on-amend.md → 21-trim-the-fat/outcomes/3-commit-artifacts-on-amend.md} +0 -0
- /package/RAF/{aaaacv-trim-the-fat/outcomes/04-worktree-aware-exit-messages.md → 21-trim-the-fat/outcomes/4-worktree-aware-exit-messages.md} +0 -0
- /package/RAF/{aaaacv-trim-the-fat/plans/01-add-worktree-support-to-status.md → 21-trim-the-fat/plans/1-add-worktree-support-to-status.md} +0 -0
- /package/RAF/{aaaacv-trim-the-fat/plans/02-remove-multi-project-from-do.md → 21-trim-the-fat/plans/2-remove-multi-project-from-do.md} +0 -0
- /package/RAF/{aaaacw-prune-cycle → 22-prune-cycle}/decisions.md +0 -0
- /package/RAF/{aaaacw-prune-cycle → 22-prune-cycle}/input.md +0 -0
- /package/RAF/{aaaacw-prune-cycle/outcomes/01-create-worktree-from-branch.md → 22-prune-cycle/outcomes/1-create-worktree-from-branch.md} +0 -0
- /package/RAF/{aaaacw-prune-cycle/outcomes/02-cleanup-worktree-on-success.md → 22-prune-cycle/outcomes/2-cleanup-worktree-on-success.md} +0 -0
- /package/RAF/{aaaacw-prune-cycle/outcomes/03-amend-recreate-worktree.md → 22-prune-cycle/outcomes/3-amend-recreate-worktree.md} +0 -0
- /package/RAF/{aaaacw-prune-cycle/plans/01-create-worktree-from-branch.md → 22-prune-cycle/plans/1-create-worktree-from-branch.md} +0 -0
- /package/RAF/{aaaacx-epoch-shift → 23-epoch-shift}/decisions.md +0 -0
- /package/RAF/{aaaacx-epoch-shift → 23-epoch-shift}/input.md +0 -0
- /package/RAF/{aaaacx-epoch-shift/outcomes/01-epoch-id-generation.md → 23-epoch-shift/outcomes/1-epoch-id-generation.md} +0 -0
- /package/RAF/{aaaacx-epoch-shift/outcomes/02-update-pattern-matching.md → 23-epoch-shift/outcomes/2-update-pattern-matching.md} +0 -0
- /package/RAF/{aaaacx-epoch-shift/outcomes/03-update-tests.md → 23-epoch-shift/outcomes/3-update-tests.md} +0 -0
- /package/RAF/{aaaacx-epoch-shift/outcomes/04-update-documentation.md → 23-epoch-shift/outcomes/4-update-documentation.md} +0 -0
- /package/RAF/{aaaacx-epoch-shift/plans/01-epoch-id-generation.md → 23-epoch-shift/plans/1-epoch-id-generation.md} +0 -0
- /package/RAF/{ahmpro-merge-guardian → 24-merge-guardian}/decisions.md +0 -0
- /package/RAF/{ahmpro-merge-guardian → 24-merge-guardian}/input.md +0 -0
- /package/RAF/{ahmpro-merge-guardian/outcomes/001-fix-amend-worktree-commit.md → 24-merge-guardian/outcomes/1-fix-amend-worktree-commit.md} +0 -0
- /package/RAF/{ahmpro-merge-guardian/outcomes/002-base36-task-ids.md → 24-merge-guardian/outcomes/2-base36-task-ids.md} +0 -0
- /package/RAF/{ahmpro-merge-guardian/outcomes/003-worktree-pr-creation.md → 24-merge-guardian/outcomes/3-worktree-pr-creation.md} +0 -0
- /package/RAF/{ahmpro-merge-guardian/outcomes/004-post-execution-picker.md → 24-merge-guardian/outcomes/4-post-execution-picker.md} +0 -0
- /package/RAF/{ahmpro-merge-guardian/plans/001-fix-amend-worktree-commit.md → 24-merge-guardian/plans/1-fix-amend-worktree-commit.md} +0 -0
- /package/RAF/{ahmpro-merge-guardian/plans/002-base36-task-ids.md → 24-merge-guardian/plans/2-base36-task-ids.md} +0 -0
- /package/RAF/{ahnbcu-letterjam → 25-letterjam}/decisions.md +0 -0
- /package/RAF/{ahnbcu-letterjam → 25-letterjam}/input.md +0 -0
- /package/RAF/{ahnbcu-letterjam/outcomes/01-base26-encoding.md → 25-letterjam/outcomes/1-base26-encoding.md} +0 -0
- /package/RAF/{ahnbcu-letterjam/outcomes/02-update-tests.md → 25-letterjam/outcomes/2-update-tests.md} +0 -0
- /package/RAF/{ahnbcu-letterjam/outcomes/03-migrate-command.md → 25-letterjam/outcomes/3-migrate-command.md} +0 -0
- /package/RAF/{ahnbcu-letterjam/outcomes/04-update-documentation.md → 25-letterjam/outcomes/4-update-documentation.md} +0 -0
- /package/RAF/{ahnbcu-letterjam/plans/01-base26-encoding.md → 25-letterjam/plans/1-base26-encoding.md} +0 -0
- /package/RAF/{ahnwrk-worktree-weaver → 26-worktree-weaver}/decisions.md +0 -0
- /package/RAF/{ahnwrk-worktree-weaver → 26-worktree-weaver}/input.md +0 -0
- /package/RAF/{ahnwrk-worktree-weaver/outcomes/01-remove-co-authored-by.md → 26-worktree-weaver/outcomes/1-remove-co-authored-by.md} +0 -0
- /package/RAF/{ahnwrk-worktree-weaver/outcomes/02-update-task-status-format.md → 26-worktree-weaver/outcomes/2-update-task-status-format.md} +0 -0
- /package/RAF/{ahnwrk-worktree-weaver/outcomes/03-worktree-auto-discovery.md → 26-worktree-weaver/outcomes/3-worktree-auto-discovery.md} +0 -0
- /package/RAF/{ahnwrk-worktree-weaver/outcomes/04-fix-pr-description.md → 26-worktree-weaver/outcomes/4-fix-pr-description.md} +0 -0
- /package/RAF/{ahnwrk-worktree-weaver/plans/01-remove-co-authored-by.md → 26-worktree-weaver/plans/1-remove-co-authored-by.md} +0 -0
- /package/RAF/{ahnwrk-worktree-weaver/plans/02-update-task-status-format.md → 26-worktree-weaver/plans/2-update-task-status-format.md} +0 -0
- /package/RAF/{ahnwrk-worktree-weaver/plans/03-worktree-auto-discovery.md → 26-worktree-weaver/plans/3-worktree-auto-discovery.md} +0 -0
- /package/RAF/{ahrren-turbo-finder → 27-turbo-finder}/decisions.md +0 -0
- /package/RAF/{ahrren-turbo-finder → 27-turbo-finder}/input.md +0 -0
- /package/RAF/{ahrren-turbo-finder/outcomes/01-worktree-auto-detect.md → 27-turbo-finder/outcomes/1-worktree-auto-detect.md} +0 -0
- /package/RAF/{ahrren-turbo-finder/outcomes/02-medium-effort-do.md → 27-turbo-finder/outcomes/2-medium-effort-do.md} +0 -0
- /package/RAF/{ahrren-turbo-finder/plans/01-worktree-auto-detect.md → 27-turbo-finder/plans/1-worktree-auto-detect.md} +0 -0
- /package/RAF/{ahslfe-config-wizard → 28-config-wizard}/decisions.md +0 -0
- /package/RAF/{ahslfe-config-wizard → 28-config-wizard}/input.md +0 -0
- /package/RAF/{ahslfe-config-wizard/outcomes/01-define-config-schema.md → 28-config-wizard/outcomes/1-define-config-schema.md} +0 -0
- /package/RAF/{ahslfe-config-wizard/outcomes/02-refactor-codebase-to-use-config.md → 28-config-wizard/outcomes/2-refactor-codebase-to-use-config.md} +0 -0
- /package/RAF/{ahslfe-config-wizard/outcomes/03-create-config-documentation.md → 28-config-wizard/outcomes/3-create-config-documentation.md} +0 -0
- /package/RAF/{ahslfe-config-wizard/outcomes/04-implement-raf-config-command.md → 28-config-wizard/outcomes/4-implement-raf-config-command.md} +0 -0
- /package/RAF/{ahslfe-config-wizard/outcomes/05-update-claude-md.md → 28-config-wizard/outcomes/5-update-claude-md.md} +0 -0
- /package/RAF/{ahslfe-config-wizard/plans/01-define-config-schema.md → 28-config-wizard/plans/1-define-config-schema.md} +0 -0
- /package/RAF/{ahstvo-token-tracker → 29-token-tracker}/decisions.md +0 -0
- /package/RAF/{ahstvo-token-tracker → 29-token-tracker}/input.md +0 -0
- /package/RAF/{ahstvo-token-tracker/outcomes/01-full-model-id-support.md → 29-token-tracker/outcomes/1-full-model-id-support.md} +0 -0
- /package/RAF/{ahstvo-token-tracker/outcomes/02-name-generation-no-session.md → 29-token-tracker/outcomes/2-name-generation-no-session.md} +0 -0
- /package/RAF/{ahstvo-token-tracker/outcomes/03-unify-stream-json-execution.md → 29-token-tracker/outcomes/3-unify-stream-json-execution.md} +0 -0
- /package/RAF/{ahstvo-token-tracker/outcomes/04-token-tracking-cost-calculation.md → 29-token-tracker/outcomes/4-token-tracking-cost-calculation.md} +0 -0
- /package/RAF/{ahstvo-token-tracker/outcomes/05-token-cost-console-reporting.md → 29-token-tracker/outcomes/5-token-cost-console-reporting.md} +0 -0
- /package/RAF/{ahstvo-token-tracker/outcomes/06-runtime-verbose-toggle.md → 29-token-tracker/outcomes/6-runtime-verbose-toggle.md} +0 -0
- /package/RAF/{ahstvo-token-tracker/outcomes/07-readme-config-docs.md → 29-token-tracker/outcomes/7-readme-config-docs.md} +0 -0
- /package/RAF/{ahstvo-token-tracker/plans/01-full-model-id-support.md → 29-token-tracker/plans/1-full-model-id-support.md} +0 -0
- /package/RAF/{ahstvo-token-tracker/plans/02-name-generation-no-session.md → 29-token-tracker/plans/2-name-generation-no-session.md} +0 -0
- /package/RAF/{ahstvo-token-tracker/plans/07-readme-config-docs.md → 29-token-tracker/plans/7-readme-config-docs.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution → 3-multi-project-execution}/decisions/DECISIONS.md +0 -0
- /package/RAF/{aaaaad-multi-project-execution → 3-multi-project-execution}/input.md +0 -0
- /package/RAF/{aaaaad-multi-project-execution/outcomes/01-remove-state-json.md → 3-multi-project-execution/outcomes/1-remove-state-json.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/outcomes/02-update-raf-status.md → 3-multi-project-execution/outcomes/2-update-raf-status.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/outcomes/03-simplify-git-logic.md → 3-multi-project-execution/outcomes/3-simplify-git-logic.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/outcomes/04-auto-commit-planning.md → 3-multi-project-execution/outcomes/4-auto-commit-planning.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/outcomes/05-rerun-failed-tasks.md → 3-multi-project-execution/outcomes/5-rerun-failed-tasks.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/outcomes/06-multi-project-execution.md → 3-multi-project-execution/outcomes/6-multi-project-execution.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/outcomes/07-verify-timeout.md → 3-multi-project-execution/outcomes/7-verify-timeout.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/outcomes/08-move-decisions-file.md → 3-multi-project-execution/outcomes/8-move-decisions-file.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution → 3-multi-project-execution}/outcomes/SUMMARY.md +0 -0
- /package/RAF/{aaaaad-multi-project-execution/plans/01-remove-state-json.md → 3-multi-project-execution/plans/1-remove-state-json.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/plans/02-update-raf-status.md → 3-multi-project-execution/plans/2-update-raf-status.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/plans/03-simplify-git-logic.md → 3-multi-project-execution/plans/3-simplify-git-logic.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/plans/04-auto-commit-planning.md → 3-multi-project-execution/plans/4-auto-commit-planning.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/plans/05-rerun-failed-tasks.md → 3-multi-project-execution/plans/5-rerun-failed-tasks.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/plans/06-multi-project-execution.md → 3-multi-project-execution/plans/6-multi-project-execution.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/plans/07-verify-timeout.md → 3-multi-project-execution/plans/7-verify-timeout.md} +0 -0
- /package/RAF/{aaaaad-multi-project-execution/plans/08-move-decisions-file.md → 3-multi-project-execution/plans/8-move-decisions-file.md} +0 -0
- /package/RAF/{ahtahs-token-reaper → 30-token-reaper}/decisions.md +0 -0
- /package/RAF/{ahtahs-token-reaper → 30-token-reaper}/input.md +0 -0
- /package/RAF/{ahtahs-token-reaper/outcomes/01-extend-token-tracker-data-model.md → 30-token-reaper/outcomes/1-extend-token-tracker-data-model.md} +0 -0
- /package/RAF/{ahtahs-token-reaper/outcomes/02-accumulate-usage-in-retry-loop.md → 30-token-reaper/outcomes/2-accumulate-usage-in-retry-loop.md} +0 -0
- /package/RAF/{ahtahs-token-reaper/outcomes/03-per-attempt-display-formatting.md → 30-token-reaper/outcomes/3-per-attempt-display-formatting.md} +0 -0
- /package/RAF/{ahtahs-token-reaper/outcomes/04-add-model-name-to-claude-call-logs.md → 30-token-reaper/outcomes/4-add-model-name-to-claude-call-logs.md} +0 -0
- /package/RAF/{ahtahs-token-reaper/outcomes/05-handle-invalid-config-in-raf-config.md → 30-token-reaper/outcomes/5-handle-invalid-config-in-raf-config.md} +0 -0
- /package/RAF/{ahtahs-token-reaper/outcomes/06-fix-verbose-toggle-timer-display.md → 30-token-reaper/outcomes/6-fix-verbose-toggle-timer-display.md} +0 -0
- /package/RAF/{ahtahs-token-reaper/plans/01-extend-token-tracker-data-model.md → 30-token-reaper/plans/1-extend-token-tracker-data-model.md} +0 -0
- /package/RAF/{ahtahs-token-reaper/plans/04-add-model-name-to-claude-call-logs.md → 30-token-reaper/plans/4-add-model-name-to-claude-call-logs.md} +0 -0
- /package/RAF/{ahtahs-token-reaper/plans/05-handle-invalid-config-in-raf-config.md → 30-token-reaper/plans/5-handle-invalid-config-in-raf-config.md} +0 -0
- /package/RAF/{ahtahs-token-reaper/plans/06-fix-verbose-toggle-timer-display.md → 30-token-reaper/plans/6-fix-verbose-toggle-timer-display.md} +0 -0
- /package/RAF/{ahvrih-rate-forge → 31-rate-forge}/decisions.md +0 -0
- /package/RAF/{ahvrih-rate-forge → 31-rate-forge}/input.md +0 -0
- /package/RAF/{ahvrih-rate-forge/outcomes/01-remove-claude-command-config.md → 31-rate-forge/outcomes/1-remove-claude-command-config.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/outcomes/02-fix-mixed-attempt-cost.md → 31-rate-forge/outcomes/2-fix-mixed-attempt-cost.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/outcomes/03-rate-limit-estimation.md → 31-rate-forge/outcomes/3-rate-limit-estimation.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/outcomes/04-show-version-in-do-logs.md → 31-rate-forge/outcomes/4-show-version-in-do-logs.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/outcomes/05-sync-main-before-worktree.md → 31-rate-forge/outcomes/5-sync-main-before-worktree.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/outcomes/06-sync-readme-with-codebase.md → 31-rate-forge/outcomes/6-sync-readme-with-codebase.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/outcomes/07-no-session-persistence.md → 31-rate-forge/outcomes/7-no-session-persistence.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/outcomes/08-plan-execution-metadata.md → 31-rate-forge/outcomes/8-plan-execution-metadata.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/plans/01-remove-claude-command-config.md → 31-rate-forge/plans/1-remove-claude-command-config.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/plans/02-fix-mixed-attempt-cost.md → 31-rate-forge/plans/2-fix-mixed-attempt-cost.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/plans/04-show-version-in-do-logs.md → 31-rate-forge/plans/4-show-version-in-do-logs.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/plans/05-sync-main-before-worktree.md → 31-rate-forge/plans/5-sync-main-before-worktree.md} +0 -0
- /package/RAF/{ahvrih-rate-forge/plans/07-no-session-persistence.md → 31-rate-forge/plans/7-no-session-persistence.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin → 32-quick-fix-gremlin}/decisions.md +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin → 32-quick-fix-gremlin}/input.md +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/outcomes/01-fix-name-generation-prompt.md → 32-quick-fix-gremlin/outcomes/1-fix-name-generation-prompt.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/outcomes/02-fix-amend-commit-scope.md → 32-quick-fix-gremlin/outcomes/2-fix-amend-commit-scope.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/outcomes/03-fix-diverged-main-branch-sync.md → 32-quick-fix-gremlin/outcomes/3-fix-diverged-main-branch-sync.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/outcomes/04-wire-rate-limit-to-do-command.md → 32-quick-fix-gremlin/outcomes/4-wire-rate-limit-to-do-command.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/outcomes/05-add-config-get-set-flags.md → 32-quick-fix-gremlin/outcomes/5-add-config-get-set-flags.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/outcomes/06-sync-worktree-branch-before-execution.md → 32-quick-fix-gremlin/outcomes/6-sync-worktree-branch-before-execution.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/outcomes/07-update-frontmatter-format.md → 32-quick-fix-gremlin/outcomes/7-update-frontmatter-format.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/outcomes/08-remove-plan-token-report.md → 32-quick-fix-gremlin/outcomes/8-remove-plan-token-report.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/plans/01-fix-name-generation-prompt.md → 32-quick-fix-gremlin/plans/1-fix-name-generation-prompt.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/plans/02-fix-amend-commit-scope.md → 32-quick-fix-gremlin/plans/2-fix-amend-commit-scope.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/plans/03-fix-diverged-main-branch-sync.md → 32-quick-fix-gremlin/plans/3-fix-diverged-main-branch-sync.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/plans/04-wire-rate-limit-to-do-command.md → 32-quick-fix-gremlin/plans/4-wire-rate-limit-to-do-command.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/plans/05-add-config-get-set-flags.md → 32-quick-fix-gremlin/plans/5-add-config-get-set-flags.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/plans/07-update-frontmatter-format.md → 32-quick-fix-gremlin/plans/7-update-frontmatter-format.md} +0 -0
- /package/RAF/{ahwidh-quick-fix-gremlin/plans/08-remove-plan-token-report.md → 32-quick-fix-gremlin/plans/8-remove-plan-token-report.md} +0 -0
- /package/RAF/{ahwqwq-model-whisperer → 33-model-whisperer}/decisions.md +0 -0
- /package/RAF/{ahwqwq-model-whisperer → 33-model-whisperer}/input.md +0 -0
- /package/RAF/{ahwqwq-model-whisperer/outcomes/01-show-model-on-task-line.md → 33-model-whisperer/outcomes/1-show-model-on-task-line.md} +0 -0
- /package/RAF/{ahwqwq-model-whisperer/outcomes/02-use-claude-cost-estimation.md → 33-model-whisperer/outcomes/2-use-claude-cost-estimation.md} +0 -0
- /package/RAF/{ahwqwq-model-whisperer/outcomes/03-add-plan-resume-flag.md → 33-model-whisperer/outcomes/3-add-plan-resume-flag.md} +0 -0
- /package/RAF/{ahwqwq-model-whisperer/plans/01-show-model-on-task-line.md → 33-model-whisperer/plans/1-show-model-on-task-line.md} +0 -0
- /package/RAF/{ahwqwq-model-whisperer/plans/02-use-claude-cost-estimation.md → 33-model-whisperer/plans/2-use-claude-cost-estimation.md} +0 -0
- /package/RAF/{ahwvrz-legacy-sunset → 34-legacy-sunset}/decisions.md +0 -0
- /package/RAF/{ahwvrz-legacy-sunset → 34-legacy-sunset}/input.md +0 -0
- /package/RAF/{ahwvrz-legacy-sunset/outcomes/01-remove-migrate-command.md → 34-legacy-sunset/outcomes/1-remove-migrate-command.md} +0 -0
- /package/RAF/{ahwvrz-legacy-sunset/outcomes/02-fix-resume-worktree-resolution.md → 34-legacy-sunset/outcomes/2-fix-resume-worktree-resolution.md} +0 -0
- /package/RAF/{ahwvrz-legacy-sunset/plans/01-remove-migrate-command.md → 34-legacy-sunset/plans/1-remove-migrate-command.md} +0 -0
- /package/RAF/{ahwzmc-echo-forge → 35-echo-forge}/decisions.md +0 -0
- /package/RAF/{ahwzmc-echo-forge → 35-echo-forge}/input.md +0 -0
- /package/RAF/{ahwzmc-echo-forge/outcomes/01-change-low-effort-default-to-sonnet.md → 35-echo-forge/outcomes/1-change-low-effort-default-to-sonnet.md} +0 -0
- /package/RAF/{ahwzmc-echo-forge/outcomes/02-add-no-worktree-flag.md → 35-echo-forge/outcomes/2-add-no-worktree-flag.md} +0 -0
- /package/RAF/{ahwzmc-echo-forge/outcomes/03-update-readme.md → 35-echo-forge/outcomes/3-update-readme.md} +0 -0
- /package/RAF/{ahwzmc-echo-forge/plans/01-change-low-effort-default-to-sonnet.md → 35-echo-forge/plans/1-change-low-effort-default-to-sonnet.md} +0 -0
- /package/RAF/{ahwzmc-echo-forge/plans/02-add-no-worktree-flag.md → 35-echo-forge/plans/2-add-no-worktree-flag.md} +0 -0
- /package/RAF/{aifqwf-fix-amend-commit-again → 36-fix-amend-commit-again}/decisions.md +0 -0
- /package/RAF/{aifqwf-fix-amend-commit-again → 36-fix-amend-commit-again}/input.md +0 -0
- /package/RAF/{aifqwf-fix-amend-commit-again/outcomes/01-update-effort-mapping-defaults.md → 36-fix-amend-commit-again/outcomes/1-update-effort-mapping-defaults.md} +0 -0
- /package/RAF/{aifqwf-fix-amend-commit-again/outcomes/02-fix-amend-worktree-commit.md → 36-fix-amend-commit-again/outcomes/2-fix-amend-worktree-commit.md} +0 -0
- /package/RAF/{aifqwf-fix-amend-commit-again/plans/01-update-effort-mapping-defaults.md → 36-fix-amend-commit-again/plans/1-update-effort-mapping-defaults.md} +0 -0
- /package/RAF/{aifqwf-fix-amend-commit-again/plans/02-fix-amend-worktree-commit.md → 36-fix-amend-commit-again/plans/2-fix-amend-worktree-commit.md} +0 -0
- /package/RAF/{aaaaae-task-naming-optimization → 4-task-naming-optimization}/decisions.md +0 -0
- /package/RAF/{aaaaae-task-naming-optimization → 4-task-naming-optimization}/input.md +0 -0
- /package/RAF/{aaaaae-task-naming-optimization/outcomes/01-remove-summary-file.md → 4-task-naming-optimization/outcomes/1-remove-summary-file.md} +0 -0
- /package/RAF/{aaaaae-task-naming-optimization/outcomes/02-base36-project-numbering.md → 4-task-naming-optimization/outcomes/2-base36-project-numbering.md} +0 -0
- /package/RAF/{aaaaae-task-naming-optimization/outcomes/03-improve-haiku-prompt.md → 4-task-naming-optimization/outcomes/3-improve-haiku-prompt.md} +0 -0
- /package/RAF/{aaaaae-task-naming-optimization → 4-task-naming-optimization}/outcomes/SUMMARY.md +0 -0
- /package/RAF/{aaaaae-task-naming-optimization/plans/01-remove-summary-file.md → 4-task-naming-optimization/plans/1-remove-summary-file.md} +0 -0
- /package/RAF/{aaaaae-task-naming-optimization/plans/02-base36-project-numbering.md → 4-task-naming-optimization/plans/2-base36-project-numbering.md} +0 -0
- /package/RAF/{aaaaae-task-naming-optimization/plans/03-improve-haiku-prompt.md → 4-task-naming-optimization/plans/3-improve-haiku-prompt.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements → 5-task-naming-improvements}/decisions.md +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements → 5-task-naming-improvements}/input.md +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/outcomes/01-enhance-identifier-resolution.md → 5-task-naming-improvements/outcomes/1-enhance-identifier-resolution.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/outcomes/02-add-identifier-support-to-status.md → 5-task-naming-improvements/outcomes/2-add-identifier-support-to-status.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/outcomes/03-update-do-for-full-folder-names.md → 5-task-naming-improvements/outcomes/3-update-do-for-full-folder-names.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/outcomes/04-implement-amend-flag-for-plan.md → 5-task-naming-improvements/outcomes/4-implement-amend-flag-for-plan.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/outcomes/05-commit-outcomes-on-complete.md → 5-task-naming-improvements/outcomes/5-commit-outcomes-on-complete.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/outcomes/06-update-execution-prompt-commit-schema.md → 5-task-naming-improvements/outcomes/6-update-execution-prompt-commit-schema.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/outcomes/07-allow-pending-task-amendments.md → 5-task-naming-improvements/outcomes/7-allow-pending-task-amendments.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/outcomes/08-fix-timeout-label.md → 5-task-naming-improvements/outcomes/8-fix-timeout-label.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/plans/01-enhance-identifier-resolution.md → 5-task-naming-improvements/plans/1-enhance-identifier-resolution.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/plans/02-add-identifier-support-to-status.md → 5-task-naming-improvements/plans/2-add-identifier-support-to-status.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/plans/03-update-do-for-full-folder-names.md → 5-task-naming-improvements/plans/3-update-do-for-full-folder-names.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/plans/04-implement-amend-flag-for-plan.md → 5-task-naming-improvements/plans/4-implement-amend-flag-for-plan.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/plans/05-commit-outcomes-on-complete.md → 5-task-naming-improvements/plans/5-commit-outcomes-on-complete.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/plans/06-update-execution-prompt-commit-schema.md → 5-task-naming-improvements/plans/6-update-execution-prompt-commit-schema.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/plans/07-allow-pending-task-amendments.md → 5-task-naming-improvements/plans/7-allow-pending-task-amendments.md} +0 -0
- /package/RAF/{aaaaaf-task-naming-improvements/plans/08-fix-timeout-label.md → 5-task-naming-improvements/plans/8-fix-timeout-label.md} +0 -0
- /package/RAF/{aaaaag-fix-double-summary-headers → 6-fix-double-summary-headers}/decisions.md +0 -0
- /package/RAF/{aaaaag-fix-double-summary-headers → 6-fix-double-summary-headers}/input.md +0 -0
- /package/RAF/{aaaaag-fix-double-summary-headers/outcomes/01-fix-double-summary-headers.md → 6-fix-double-summary-headers/outcomes/1-fix-double-summary-headers.md} +0 -0
- /package/RAF/{aaaaag-fix-double-summary-headers/outcomes/02-update-readme-for-npm.md → 6-fix-double-summary-headers/outcomes/2-update-readme-for-npm.md} +0 -0
- /package/RAF/{aaaaag-fix-double-summary-headers/outcomes/03-npm-publish-instructions.md → 6-fix-double-summary-headers/outcomes/3-npm-publish-instructions.md} +0 -0
- /package/RAF/{aaaaag-fix-double-summary-headers/outcomes/04-flexible-project-lookup.md → 6-fix-double-summary-headers/outcomes/4-flexible-project-lookup.md} +0 -0
- /package/RAF/{aaaaag-fix-double-summary-headers/plans/01-fix-double-summary-headers.md → 6-fix-double-summary-headers/plans/1-fix-double-summary-headers.md} +0 -0
- /package/RAF/{aaaaag-fix-double-summary-headers/plans/02-update-readme-for-npm.md → 6-fix-double-summary-headers/plans/2-update-readme-for-npm.md} +0 -0
- /package/RAF/{aaaaag-fix-double-summary-headers/plans/03-npm-publish-instructions.md → 6-fix-double-summary-headers/plans/3-npm-publish-instructions.md} +0 -0
- /package/RAF/{aaaaag-fix-double-summary-headers/plans/04-flexible-project-lookup.md → 6-fix-double-summary-headers/plans/4-flexible-project-lookup.md} +0 -0
- /package/RAF/{aaaaah-improve-outcome-format → 7-improve-outcome-format}/decisions.md +0 -0
- /package/RAF/{aaaaah-improve-outcome-format → 7-improve-outcome-format}/input.md +0 -0
- /package/RAF/{aaaaah-improve-outcome-format/outcomes/01-update-execution-prompt.md → 7-improve-outcome-format/outcomes/1-update-execution-prompt.md} +0 -0
- /package/RAF/{aaaaah-improve-outcome-format/outcomes/02-update-state-derivation.md → 7-improve-outcome-format/outcomes/2-update-state-derivation.md} +0 -0
- /package/RAF/{aaaaah-improve-outcome-format/outcomes/03-update-do-command-outcome-handling.md → 7-improve-outcome-format/outcomes/3-update-do-command-outcome-handling.md} +0 -0
- /package/RAF/{aaaaah-improve-outcome-format/outcomes/04-implement-failure-analysis.md → 7-improve-outcome-format/outcomes/4-implement-failure-analysis.md} +0 -0
- /package/RAF/{aaaaah-improve-outcome-format/outcomes/05-update-documentation.md → 7-improve-outcome-format/outcomes/5-update-documentation.md} +0 -0
- /package/RAF/{aaaaah-improve-outcome-format/plans/01-update-execution-prompt.md → 7-improve-outcome-format/plans/1-update-execution-prompt.md} +0 -0
- /package/RAF/{aaaaah-improve-outcome-format/plans/02-update-state-derivation.md → 7-improve-outcome-format/plans/2-update-state-derivation.md} +0 -0
- /package/RAF/{aaaaah-improve-outcome-format/plans/03-update-do-command-outcome-handling.md → 7-improve-outcome-format/plans/3-update-do-command-outcome-handling.md} +0 -0
- /package/RAF/{aaaaah-improve-outcome-format/plans/04-implement-failure-analysis.md → 7-improve-outcome-format/plans/4-implement-failure-analysis.md} +0 -0
- /package/RAF/{aaaaah-improve-outcome-format/plans/05-update-documentation.md → 7-improve-outcome-format/plans/5-update-documentation.md} +0 -0
- /package/RAF/{aaaaai-beautiful-do → 8-beautiful-do}/decisions.md +0 -0
- /package/RAF/{aaaaai-beautiful-do → 8-beautiful-do}/input.md +0 -0
- /package/RAF/{aaaaai-beautiful-do/outcomes/01-terminal-symbols.md → 8-beautiful-do/outcomes/1-terminal-symbols.md} +0 -0
- /package/RAF/{aaaaai-beautiful-do/outcomes/02-refactor-do-output.md → 8-beautiful-do/outcomes/2-refactor-do-output.md} +0 -0
- /package/RAF/{aaaaai-beautiful-do/outcomes/03-refactor-status-output.md → 8-beautiful-do/outcomes/3-refactor-status-output.md} +0 -0
- /package/RAF/{aaaaai-beautiful-do/outcomes/04-simplify-logger.md → 8-beautiful-do/outcomes/4-simplify-logger.md} +0 -0
- /package/RAF/{aaaaai-beautiful-do/outcomes/05-add-tests.md → 8-beautiful-do/outcomes/5-add-tests.md} +0 -0
- /package/RAF/{aaaaai-beautiful-do/plans/01-terminal-symbols.md → 8-beautiful-do/plans/1-terminal-symbols.md} +0 -0
- /package/RAF/{aaaaai-beautiful-do/plans/02-refactor-do-output.md → 8-beautiful-do/plans/2-refactor-do-output.md} +0 -0
- /package/RAF/{aaaaai-beautiful-do/plans/03-refactor-status-output.md → 8-beautiful-do/plans/3-refactor-status-output.md} +0 -0
- /package/RAF/{aaaaai-beautiful-do/plans/04-simplify-logger.md → 8-beautiful-do/plans/4-simplify-logger.md} +0 -0
- /package/RAF/{aaaaai-beautiful-do/plans/05-add-tests.md → 8-beautiful-do/plans/5-add-tests.md} +0 -0
- /package/RAF/{aaaaaj-system-promt-ammend → 9-system-promt-ammend}/decisions.md +0 -0
- /package/RAF/{aaaaaj-system-promt-ammend → 9-system-promt-ammend}/input.md +0 -0
- /package/RAF/{aaaaaj-system-promt-ammend/outcomes/01-model-override.md → 9-system-promt-ammend/outcomes/1-model-override.md} +0 -0
- /package/RAF/{aaaaaj-system-promt-ammend/outcomes/02-system-prompt-append.md → 9-system-promt-ammend/outcomes/2-system-prompt-append.md} +0 -0
- /package/RAF/{aaaaaj-system-promt-ammend/outcomes/03-retry-context.md → 9-system-promt-ammend/outcomes/3-retry-context.md} +0 -0
- /package/RAF/{aaaaaj-system-promt-ammend/plans/01-model-override.md → 9-system-promt-ammend/plans/1-model-override.md} +0 -0
- /package/RAF/{aaaaaj-system-promt-ammend/plans/02-system-prompt-append.md → 9-system-promt-ammend/plans/2-system-prompt-append.md} +0 -0
- /package/RAF/{aaaaaj-system-promt-ammend/plans/03-retry-context.md → 9-system-promt-ammend/plans/3-retry-context.md} +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
add support for codex cli alongside claude cli, do nessesary research in codex api and find way
|
|
2
|
+
to combine them together, make nessesary changes in codebase and config, update prompts to be llm
|
|
3
|
+
agnostic
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
- [ ] raf do should scan worktreee and non worktree projects
|
|
8
|
+
- [ ] if command is like "raf plan project-name" - make sure to check if project with exact name exist (in main or worktree) and prompt to user whether he wants to amend (probably forgot to put --amend flag)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
test codex by actually running raf on some dummy project folder. test as much scenarious as you
|
|
13
|
+
can. use team and coordinate it. if something wrong - create task to fix
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Task 1: Config Schema & Provider Types
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Extended the config system to support multiple CLI providers (claude, codex) with harness-prefixed model names and provider-specific model mappings.
|
|
5
|
+
|
|
6
|
+
## Changes Made
|
|
7
|
+
|
|
8
|
+
### `src/types/config.ts`
|
|
9
|
+
- Added `HarnessProvider` type (`'claude' | 'codex'`)
|
|
10
|
+
- Added `CodexModelAlias` type (`'spark' | 'codex' | 'gpt54'`)
|
|
11
|
+
- Added `ModelAlias` and `ModelName` types (provider-agnostic unions)
|
|
12
|
+
- Added `provider: HarnessProvider` to `RafConfig` with default `'claude'`
|
|
13
|
+
- Added `codexModels` and `codexEffortMapping` config sections parallel to Claude ones
|
|
14
|
+
- Added `VALID_CODEX_MODEL_ALIASES` and `VALID_HARNESS_PROVIDERS` constants
|
|
15
|
+
- Added `provider?: HarnessProvider` to `PlanCommandOptions` and `DoCommandOptions`
|
|
16
|
+
- Kept backward-compatible `ClaudeModelAlias` and `ClaudeModelName` types
|
|
17
|
+
|
|
18
|
+
### `src/utils/config.ts`
|
|
19
|
+
- Added `CODEX_MODEL_ID_PATTERN` for Codex model validation
|
|
20
|
+
- Updated `isValidModelName()` to accept Claude aliases, Codex aliases, raw Codex IDs, and harness-prefixed format (`claude/opus`, `codex/gpt-5.4`)
|
|
21
|
+
- Added `parseModelSpec()` function to parse harness-prefixed model specs
|
|
22
|
+
- Updated `getModel()` and `resolveEffortToModel()` to accept optional provider parameter
|
|
23
|
+
- Added Codex model tier ordering (`CODEX_MODEL_TIER_ORDER`)
|
|
24
|
+
- Updated `getModelTier()`, `getModelShortName()`, `resolveFullModelId()` for Codex models
|
|
25
|
+
- Updated `MODEL_ALIAS_TO_FULL_ID` with Codex alias mappings
|
|
26
|
+
- Updated `VALID_TOP_LEVEL_KEYS`, `validateConfig()`, `deepMerge()`, `resolveConfig()` for new fields
|
|
27
|
+
|
|
28
|
+
### `src/utils/validation.ts`
|
|
29
|
+
- Updated `validateModelName()` to delegate to `isValidModelName()` (DRY)
|
|
30
|
+
- Updated error message in `resolveModelOption()` to mention harness-prefixed format
|
|
31
|
+
|
|
32
|
+
### `src/commands/plan.ts` and `src/commands/do.ts`
|
|
33
|
+
- Added `--provider` / `-p` CLI flag to both commands
|
|
34
|
+
|
|
35
|
+
## Acceptance Criteria
|
|
36
|
+
- [x] `provider` field exists in config with `'claude'` default
|
|
37
|
+
- [x] Harness-prefixed model names parse correctly (e.g., `codex/gpt-5.4`)
|
|
38
|
+
- [x] Unprefixed aliases still work and default to claude
|
|
39
|
+
- [x] Codex model defaults are defined
|
|
40
|
+
- [x] Config validation accepts new fields and rejects invalid ones
|
|
41
|
+
- [x] `--provider` flag available on `raf plan` and `raf do`
|
|
42
|
+
- [x] TypeScript compiles without errors
|
|
43
|
+
|
|
44
|
+
## Notes
|
|
45
|
+
- One pre-existing test failure in `name-generator.test.ts` (hardcoded `haiku` expectation vs config default `sonnet` for `nameGeneration`) — not related to this task.
|
|
46
|
+
|
|
47
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Task 2: Abstract CLI Runner Interface
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Extracted a provider-agnostic runner interface from `ClaudeRunner`, separating CLI-specific logic from shared orchestration concerns. Both Claude and future Codex runners can now be used interchangeably through the `ICliRunner` interface and `createRunner()` factory.
|
|
5
|
+
|
|
6
|
+
## Changes Made
|
|
7
|
+
|
|
8
|
+
### New Files
|
|
9
|
+
- **`src/core/runner-types.ts`**: Shared types — `RunnerOptions` (renamed from `ClaudeRunnerOptions`), `RunnerConfig` (renamed from `ClaudeRunnerConfig`), `RunResult`
|
|
10
|
+
- **`src/core/runner-interface.ts`**: `ICliRunner` interface with `run()`, `runVerbose()`, `runInteractive()`, `runResume()`, `kill()`, `isRunning()`
|
|
11
|
+
- **`src/core/completion-detector.ts`**: Extracted `createCompletionDetector()`, `verifyCommit()`, `CompletionDetector` interface, and timing constants from `claude-runner.ts`
|
|
12
|
+
- **`src/core/runner-factory.ts`**: `createRunner(config)` factory function and `getProviderBinaryName()` utility; Codex throws "not yet implemented"
|
|
13
|
+
|
|
14
|
+
### Modified Files
|
|
15
|
+
- **`src/core/claude-runner.ts`**: `ClaudeRunner` now implements `ICliRunner`; imports shared types from `runner-types.ts` and completion detection from `completion-detector.ts`; backward-compatible re-exports for `ClaudeRunnerOptions`, `ClaudeRunnerConfig`, `RunResult`, `CommitContext`, `CompletionDetector`, and timing constants
|
|
16
|
+
- **`src/core/shutdown-handler.ts`**: Changed from `ClaudeRunner` type to `ICliRunner`; added `registerRunner()` method with `registerClaudeRunner()` as deprecated alias
|
|
17
|
+
- **`src/commands/do.ts`**: Uses `createRunner()` instead of `new ClaudeRunner()`
|
|
18
|
+
- **`src/commands/plan.ts`**: Uses `createRunner()` instead of `new ClaudeRunner()`
|
|
19
|
+
- **`src/commands/config.ts`**: Uses `createRunner()` instead of `new ClaudeRunner()`
|
|
20
|
+
|
|
21
|
+
## Acceptance Criteria
|
|
22
|
+
- [x] `ICliRunner` interface is defined and `ClaudeRunner` implements it
|
|
23
|
+
- [x] `createRunner()` factory works for claude provider
|
|
24
|
+
- [x] `do.ts` and `plan.ts` use the factory instead of direct `ClaudeRunner` construction
|
|
25
|
+
- [x] Completion detection is extracted and shared
|
|
26
|
+
- [x] All existing functionality works identically (no behavior changes)
|
|
27
|
+
- [x] TypeScript compiles without errors
|
|
28
|
+
|
|
29
|
+
## Notes
|
|
30
|
+
- Backward-compatible re-exports in `claude-runner.ts` ensure existing tests continue to work without modification.
|
|
31
|
+
- The pre-existing `name-generator.test.ts` failure (hardcoded `haiku` expectation) remains — unrelated to this task.
|
|
32
|
+
|
|
33
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Task 3: Implement Codex Runner
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Implemented `CodexRunner` class that wraps the Codex CLI binary, providing the same `ICliRunner` interface as `ClaudeRunner`. Includes a dedicated JSONL stream renderer for Codex event types and factory integration.
|
|
5
|
+
|
|
6
|
+
## Changes Made
|
|
7
|
+
|
|
8
|
+
### New Files
|
|
9
|
+
- **`src/parsers/codex-stream-renderer.ts`**: Parses Codex JSONL events (`AgentMessage`, `CommandExecution`, `FileChange`, `McpToolCall`, `TodoList`) into `RenderResult` format shared with Claude's renderer. Unknown event types are skipped gracefully.
|
|
10
|
+
- **`src/core/codex-runner.ts`**: `CodexRunner` implementing `ICliRunner` with:
|
|
11
|
+
- `runInteractive()`: Spawns `codex -m <model> <combined_prompt>` via PTY with stdin/stdout passthrough
|
|
12
|
+
- `run()` / `runVerbose()`: Spawns `codex exec --full-auto --json --ephemeral -m <model> <prompt>` and parses JSONL output
|
|
13
|
+
- `runResume()`: Throws error (not supported by Codex CLI)
|
|
14
|
+
- `kill()` / `isRunning()`: Same graceful shutdown pattern as ClaudeRunner
|
|
15
|
+
- System prompt prepended to user message as `[System Instructions]...[User Request]...` format
|
|
16
|
+
- Shared completion detector for outcome file monitoring
|
|
17
|
+
- Context overflow detection
|
|
18
|
+
- Usage data gracefully omitted (Codex doesn't provide it in the same format)
|
|
19
|
+
|
|
20
|
+
### Modified Files
|
|
21
|
+
- **`src/core/runner-factory.ts`**: Imports `CodexRunner` and returns `new CodexRunner(config)` for `provider: 'codex'` (replaces the "not yet implemented" error)
|
|
22
|
+
|
|
23
|
+
## Acceptance Criteria
|
|
24
|
+
- [x] `CodexRunner` implements `ICliRunner` fully
|
|
25
|
+
- [x] `codex exec` spawns correctly with proper flags (`--full-auto --json --ephemeral -m`)
|
|
26
|
+
- [x] System prompt is prepended to user message correctly
|
|
27
|
+
- [x] JSONL events are parsed and displayed properly in verbose mode
|
|
28
|
+
- [x] Interactive mode works via PTY
|
|
29
|
+
- [x] Timeout and completion detection work
|
|
30
|
+
- [x] `createRunner({ provider: 'codex' })` returns a working CodexRunner
|
|
31
|
+
- [x] TypeScript compiles without errors
|
|
32
|
+
|
|
33
|
+
## Notes
|
|
34
|
+
- Codex usage data is omitted (returns `undefined`) since Codex doesn't provide token usage in the same format as Claude's stream-json.
|
|
35
|
+
- The `--ephemeral` flag is used in non-interactive mode to avoid session persistence pollution.
|
|
36
|
+
- The pre-existing `name-generator.test.ts` failure remains — unrelated to this task.
|
|
37
|
+
|
|
38
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Task 4: Update Prompts to be LLM-Agnostic
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Removed Claude-specific language from all user-facing prompt templates, log messages, CLI descriptions, error messages, and doc comments so they work with any LLM provider.
|
|
5
|
+
|
|
6
|
+
## Changes Made
|
|
7
|
+
|
|
8
|
+
### Prompt Files
|
|
9
|
+
- **`src/prompts/planning.ts`**: Removed "for Claude" from task sizing guidance, changed "Claude model" to "model", updated doc comment
|
|
10
|
+
- **`src/prompts/amend.ts`**: Same changes as planning.ts — removed "Claude model" references, updated doc comment
|
|
11
|
+
- **`src/prompts/execution.ts`**: Already generic, no changes needed
|
|
12
|
+
- **`src/prompts/config-docs.md`**: Updated "Claude Model Selection" → "Model Selection", "Claude models" → "models", "Claude automatically commits" → "RAF automatically commits", "For Claude — Config Editing" → "Config Editing Session Instructions"
|
|
13
|
+
|
|
14
|
+
### Core Files
|
|
15
|
+
- **`src/core/claude-runner.ts`**: Made all log messages generic ("Starting interactive session", "Session timed out", "Process exited", "Process stderr"), updated all doc comments
|
|
16
|
+
- **`src/core/pull-request.ts`**: Updated error messages ("CLI not found", "Process exited with code", "LLM returned empty output"), updated doc comments
|
|
17
|
+
- **`src/core/failure-analyzer.ts`**: Updated user-facing failure analysis text ("The API returned", "The LLM is stuck", "context grew too large for the LLM"), updated doc comments
|
|
18
|
+
- **`src/core/runner-interface.ts`**: No changes needed (already mentions both runners by class name)
|
|
19
|
+
|
|
20
|
+
### Command Files
|
|
21
|
+
- **`src/index.ts`**: `'RAF - Automated Task Planning & Execution with Claude Code'` → `'RAF - Automated Task Planning & Execution'`
|
|
22
|
+
- **`src/commands/plan.ts`**: Updated description, option help text (`'Model to use'`, `'Skip permission prompts'`), log messages (`'Starting planning session...'`, `'The planner will interview you'`)
|
|
23
|
+
- **`src/commands/do.ts`**: Updated option help text (`'Show full LLM output'`, `'Model to use'`), updated comments
|
|
24
|
+
- **`src/commands/config.ts`**: Updated description (`'View and edit RAF configuration interactively'`), log messages, doc comments
|
|
25
|
+
|
|
26
|
+
### Parser & Utility Files
|
|
27
|
+
- **`src/parsers/stream-renderer.ts`**: Updated doc comment ("LLM response" instead of "Claude's response")
|
|
28
|
+
- **`src/parsers/output-parser.ts`**: Updated doc comments
|
|
29
|
+
- **`src/utils/name-generator.ts`**: Updated all doc comments and debug log messages
|
|
30
|
+
- **`src/utils/validation.ts`**: Updated error message for missing CLI
|
|
31
|
+
- **`src/utils/token-tracker.ts`**: Updated comments ("CLI-provided" instead of "Claude-provided")
|
|
32
|
+
|
|
33
|
+
## What Was NOT Changed (By Design)
|
|
34
|
+
- Internal variable/type names (`ClaudeRunner`, `claudeRunner`, `ClaudeModelAlias`, `callClaudeForPrBody`, etc.) — these are internal implementation details
|
|
35
|
+
- Literal `'claude'` as a provider value — it's a valid provider name
|
|
36
|
+
- Claude model ID strings/patterns (`claude-opus-4-6`) — these are actual model identifiers
|
|
37
|
+
- File names (`claude-runner.ts`) — internal implementation files for the Claude provider
|
|
38
|
+
- Backward-compatible re-exports
|
|
39
|
+
|
|
40
|
+
## Acceptance Criteria
|
|
41
|
+
- [x] No user-facing prompt text mentions "Claude" specifically
|
|
42
|
+
- [x] Log messages are provider-generic or include provider name dynamically
|
|
43
|
+
- [x] CLI description is LLM-agnostic
|
|
44
|
+
- [x] All prompts still function correctly (no broken templates)
|
|
45
|
+
- [x] TypeScript compiles without errors
|
|
46
|
+
|
|
47
|
+
## Notes
|
|
48
|
+
- The pre-existing `name-generator.test.ts` failure (hardcoded `haiku` expectation vs config default `sonnet`) remains — unrelated to this task.
|
|
49
|
+
|
|
50
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Task 5: Update README and Documentation
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Updated README.md to reflect dual-provider support for Claude Code CLI and OpenAI Codex CLI.
|
|
5
|
+
|
|
6
|
+
## Changes Made
|
|
7
|
+
|
|
8
|
+
### `README.md`
|
|
9
|
+
- Updated title: "RAF - Automated Task Planning & Execution with Claude Code" → "RAF - Automated Task Planning & Execution"
|
|
10
|
+
- Updated description to mention both Claude Code CLI and OpenAI Codex CLI
|
|
11
|
+
- Updated Requirements section to list both providers
|
|
12
|
+
- Updated Features list to add "Multi-Provider" bullet
|
|
13
|
+
- Updated generic language ("the model needs" instead of "Claude needs")
|
|
14
|
+
- Updated Quick Start comment from "Claude will interview you" to be generic
|
|
15
|
+
- Added `"provider": "claude"` to the config example
|
|
16
|
+
- Added **Provider Configuration** section with:
|
|
17
|
+
- `--provider codex` CLI usage examples
|
|
18
|
+
- Model spec format (plain aliases and `<provider>/<alias>` prefix)
|
|
19
|
+
- Codex-specific config example (`codexModels`, `codexEffortMapping`)
|
|
20
|
+
- Codex limitations (`--resume` not supported, system prompt prepend behavior)
|
|
21
|
+
- Updated Command Reference tables for `raf plan` and `raf do`:
|
|
22
|
+
- Added `-p, --provider <name>` row
|
|
23
|
+
- Added `-m, --model <name>` row to `raf plan`
|
|
24
|
+
- Updated model description to show harness-prefixed examples
|
|
25
|
+
- Updated the dangerous-mode note to be provider-generic
|
|
26
|
+
|
|
27
|
+
## Acceptance Criteria
|
|
28
|
+
- [x] README reflects multi-provider support
|
|
29
|
+
- [x] New config fields are documented (`provider`, `codexModels`, `codexEffortMapping`)
|
|
30
|
+
- [x] `--provider` flag is documented for `raf do` and `raf plan`
|
|
31
|
+
- [x] Existing documentation is updated (not just appended)
|
|
32
|
+
|
|
33
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Task 6: Unified Project Scanning in `raf do` Worktree Mode
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Made `raf do --worktree` show both worktree and main-repo pending projects in the interactive picker, instead of only worktree projects.
|
|
5
|
+
|
|
6
|
+
## Changes Made
|
|
7
|
+
|
|
8
|
+
### `src/commands/do.ts`
|
|
9
|
+
- Rewrote `discoverAndPickWorktreeProject()` to use `getPendingWorktreeProjects()` and `getPendingProjects()` from `project-picker.ts` instead of reimplementing scanning logic
|
|
10
|
+
- Added main-repo pending projects to the picker (no threshold filter on main-repo projects)
|
|
11
|
+
- Threshold filter still applies to worktree projects only
|
|
12
|
+
- Deduplication: worktree versions take precedence over main-repo versions (same logic as `pickPendingProject()`)
|
|
13
|
+
- Uses `formatProjectChoice()` for consistent display with `[worktree]` suffix on worktree projects
|
|
14
|
+
- Changed return type to `{ worktreeRoot?: string; projectFolder: string }` — when a main-repo project is selected, `worktreeRoot` is undefined and the downstream worktree creation flow kicks in as normal
|
|
15
|
+
- Removed unused `parseProjectPrefix` import
|
|
16
|
+
- Added `formatProjectChoice` to static imports
|
|
17
|
+
|
|
18
|
+
## Acceptance Criteria
|
|
19
|
+
- [x] `raf do --worktree` shows pending projects from both worktree and main repo
|
|
20
|
+
- [x] Duplicate projects are deduped with worktree version taking precedence
|
|
21
|
+
- [x] Selecting a main-repo project in worktree mode correctly creates/uses a worktree (worktreeRoot is undefined, falls through to existing worktree creation logic)
|
|
22
|
+
- [x] Existing worktree-only scanning behavior is replaced by unified scanning
|
|
23
|
+
- [x] No regressions in standard (non-worktree) mode — that code path is untouched
|
|
24
|
+
|
|
25
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Task 7: Fix Plan Amend Prompt and Add Numeric ID Resolution
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Removed the `!autoMode` gate from the existing-project detection check in `runPlanCommand()`, so `raf plan -y <name-or-id>` now correctly detects existing projects and prompts to amend instead of silently creating duplicates.
|
|
5
|
+
|
|
6
|
+
## Changes Made
|
|
7
|
+
|
|
8
|
+
### `src/commands/plan.ts`
|
|
9
|
+
- Removed `!autoMode` from the condition on line 121: `if (projectName && !autoMode)` → `if (projectName)`
|
|
10
|
+
- The existing project detection now runs regardless of `-y` flag
|
|
11
|
+
- The interactive prompt (`select()`) intentionally breaks out of auto mode for this safety check
|
|
12
|
+
- Numeric ID resolution was already supported by both `resolveProjectIdentifierWithDetails()` and `resolveWorktreeProjectByIdentifier()` — no additional changes needed
|
|
13
|
+
|
|
14
|
+
## Acceptance Criteria
|
|
15
|
+
- [x] `raf plan -y <existing-project-name>` detects the existing project and prompts to amend
|
|
16
|
+
- [x] `raf plan -y <numeric-id>` (e.g., `raf plan -y 38`) detects the existing project and prompts to amend
|
|
17
|
+
- [x] `raf plan --amend <numeric-id>` resolves the project correctly and enters amend mode
|
|
18
|
+
- [x] `raf plan --amend <project-name>` continues to work as before
|
|
19
|
+
- [x] Resolution checks both main-repo and worktree projects in all cases
|
|
20
|
+
- [x] If user selects "amend", the amend flow runs correctly
|
|
21
|
+
- [x] If user selects "create new", a new project is created as before
|
|
22
|
+
- [x] Non-auto-mode behavior is unchanged
|
|
23
|
+
|
|
24
|
+
## Notes
|
|
25
|
+
- The fix was a one-line change — the resolution utilities already supported numeric IDs; only the auto-mode guard was preventing the check from running.
|
|
26
|
+
- The `select()` prompt intentionally breaks auto mode for this safety check, as silently duplicating a project is almost always a mistake.
|
|
27
|
+
|
|
28
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Task 8: E2E Test Codex Provider
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Tested the Codex provider integration end-to-end by running `raf-dev` commands with `--provider codex`, exercising the runner factory, config/model resolution, JSONL stream rendering, and error handling. Found **2 critical** and **1 major** issues.
|
|
5
|
+
|
|
6
|
+
## Test Environment
|
|
7
|
+
- codex-cli 0.116.0
|
|
8
|
+
- Node.js v22.11.0
|
|
9
|
+
- macOS Darwin 25.3.0
|
|
10
|
+
- Codex account: ChatGPT-based (not API key)
|
|
11
|
+
|
|
12
|
+
## Test Results
|
|
13
|
+
|
|
14
|
+
### Phase 1: Dummy Project Setup — PASS
|
|
15
|
+
- Created `/tmp/raf-codex-test-project/` with package.json, tsconfig.json, src/index.ts
|
|
16
|
+
- Initialized git repo with initial commit
|
|
17
|
+
- Project has intentional TODOs (input validation, negative numbers, email parsing)
|
|
18
|
+
|
|
19
|
+
### Phase 2: Config/Model Resolution — PASS (all functions work correctly)
|
|
20
|
+
|
|
21
|
+
| Test | Expected | Actual | Status |
|
|
22
|
+
|------|----------|--------|--------|
|
|
23
|
+
| `getModel('execute', 'codex')` | `gpt-5.4` | `gpt-5.4` | PASS |
|
|
24
|
+
| `getModel('plan', 'codex')` | `gpt-5.3-codex` | `gpt-5.3-codex` | PASS |
|
|
25
|
+
| `getModel('nameGeneration', 'codex')` | `gpt-5.3-codex-spark` | `gpt-5.3-codex-spark` | PASS |
|
|
26
|
+
| `resolveEffortToModel('low', 'codex')` | `gpt-5.3-codex-spark` | `gpt-5.3-codex-spark` | PASS |
|
|
27
|
+
| `resolveEffortToModel('medium', 'codex')` | `gpt-5.3-codex` | `gpt-5.3-codex` | PASS |
|
|
28
|
+
| `resolveEffortToModel('high', 'codex')` | `gpt-5.4` | `gpt-5.4` | PASS |
|
|
29
|
+
| `parseModelSpec('codex/gpt-5.4')` | `{provider:'codex',model:'gpt-5.4'}` | Correct | PASS |
|
|
30
|
+
| `parseModelSpec('spark')` | `{provider:'codex',model:'spark'}` | Correct | PASS |
|
|
31
|
+
| `isValidModelName('gpt-5.4')` | `true` | `true` | PASS |
|
|
32
|
+
| `isValidModelName('codex/gpt-5.4')` | `true` | `true` | PASS |
|
|
33
|
+
| `resolveFullModelId('spark')` | `gpt-5.3-codex-spark` | `gpt-5.3-codex-spark` | PASS |
|
|
34
|
+
| `getModelShortName('gpt-5.3-codex')` | `codex` | `codex` | PASS |
|
|
35
|
+
| `getModelTier('spark')` | `1` | `1` | PASS |
|
|
36
|
+
| `getModelTier('gpt-5.4')` | `3` | `3` | PASS |
|
|
37
|
+
|
|
38
|
+
### Phase 3: Runner Factory — PASS
|
|
39
|
+
|
|
40
|
+
| Test | Expected | Actual | Status |
|
|
41
|
+
|------|----------|--------|--------|
|
|
42
|
+
| `createRunner({provider:'codex'})` | `CodexRunner` | `CodexRunner` | PASS |
|
|
43
|
+
| `createRunner({provider:'claude'})` | `ClaudeRunner` | `ClaudeRunner` | PASS |
|
|
44
|
+
| `createRunner()` (default) | `ClaudeRunner` | `ClaudeRunner` | PASS |
|
|
45
|
+
| All ICliRunner methods exist on CodexRunner | 6 methods | 6 methods | PASS |
|
|
46
|
+
| `runResume()` throws | Error: "not supported" | Correct | PASS |
|
|
47
|
+
| `isRunning()` when idle | `false` | `false` | PASS |
|
|
48
|
+
|
|
49
|
+
### Phase 4: JSONL Stream Renderer — FAIL (Critical)
|
|
50
|
+
|
|
51
|
+
| Test | Expected | Actual | Status |
|
|
52
|
+
|------|----------|--------|--------|
|
|
53
|
+
| Parse real `item.completed` (agent_message) event | display + textContent | Both empty | **FAIL** |
|
|
54
|
+
| Parse real `item.completed` (command_execution) event | display output | Empty | **FAIL** |
|
|
55
|
+
| Parse real `turn.completed` (usage) event | Capture usage | Ignored | **FAIL** |
|
|
56
|
+
| Parse real `error` event | Display error | Ignored | **FAIL** |
|
|
57
|
+
| Parse real `turn.failed` event | Display failure | Ignored | **FAIL** |
|
|
58
|
+
|
|
59
|
+
**Details**: The `codex-stream-renderer.ts` expects event types like `AgentMessage`, `CommandExecution`, `FileChange`, but the actual Codex CLI emits a completely different format:
|
|
60
|
+
- Real: `{"type":"item.completed","item":{"type":"agent_message","text":"..."}}`
|
|
61
|
+
- Expected: `{"type":"AgentMessage","content":"..."}`
|
|
62
|
+
- Real: `{"type":"item.completed","item":{"type":"command_execution","command":"...","exit_code":0}}`
|
|
63
|
+
- Expected: `{"type":"CommandExecution","command":"...","exit_code":0}`
|
|
64
|
+
|
|
65
|
+
All real events hit the `default` case and produce empty output.
|
|
66
|
+
|
|
67
|
+
### Phase 5: CodexRunner Non-Interactive Execution — FAIL (consequence of renderer bug)
|
|
68
|
+
|
|
69
|
+
| Test | Expected | Actual | Status |
|
|
70
|
+
|------|----------|--------|--------|
|
|
71
|
+
| `run()` with gpt-5.4 (working model) | Output captured | Empty string | **FAIL** |
|
|
72
|
+
| `runVerbose()` with gpt-5.4 | Verbose display + output | No display, empty output | **FAIL** |
|
|
73
|
+
| Exit code with working model | 0 | 0 | PASS |
|
|
74
|
+
| Exit code with unavailable model | Non-zero | 1 | PASS |
|
|
75
|
+
| Timeout/contextOverflow flags | false when not triggered | false | PASS |
|
|
76
|
+
| usageData | undefined | undefined | PASS (by design) |
|
|
77
|
+
|
|
78
|
+
### Phase 6: `--provider` CLI Flag — FAIL (Major)
|
|
79
|
+
|
|
80
|
+
| Test | Expected | Actual | Status |
|
|
81
|
+
|------|----------|--------|--------|
|
|
82
|
+
| `--provider codex` forwarded to `createRunner()` | provider passed | Never read from options | **FAIL** |
|
|
83
|
+
| `--provider codex` forwarded to `resolveEffortToModel()` | provider passed | Not passed | **FAIL** |
|
|
84
|
+
| `--provider codex` forwarded to `resolveModelOption()` | provider passed | Not passed | **FAIL** |
|
|
85
|
+
|
|
86
|
+
**Details**: In both `do.ts` and `plan.ts`, the `--provider` option is declared via Commander but `options.provider` is never read. All calls to `createRunner()` omit the `provider` field. All calls to `resolveEffortToModel()` and `resolveModelOption()` omit the provider. The flag is completely inert.
|
|
87
|
+
|
|
88
|
+
### Phase 7: Error Handling — PASS (partial)
|
|
89
|
+
|
|
90
|
+
| Test | Expected | Actual | Status |
|
|
91
|
+
|------|----------|--------|--------|
|
|
92
|
+
| Missing codex binary (getCodexPath) | Error thrown | Error thrown (tested via code review) | PASS |
|
|
93
|
+
| `runResume()` | Throws "not supported" | Correct | PASS |
|
|
94
|
+
| Invalid model (codex returns error JSON) | Error surfaced | Error swallowed silently (renderer bug) | **FAIL** |
|
|
95
|
+
| Kill / isRunning | Work correctly | Code review confirms correct pattern | PASS |
|
|
96
|
+
|
|
97
|
+
### Phase 8: Model Availability — INFO (environment-specific)
|
|
98
|
+
|
|
99
|
+
The configured default Codex models (`gpt-5.3-codex-spark`, `gpt-5.3-codex`) are not available on ChatGPT-based Codex accounts. Only `gpt-5.4` and the default model work. This is an environment issue, not a code bug, but the error is invisible due to the renderer bug.
|
|
100
|
+
|
|
101
|
+
## Issues Found
|
|
102
|
+
|
|
103
|
+
### Issue 1: CRITICAL — JSONL Stream Renderer Parses Wrong Event Format
|
|
104
|
+
- **File**: `src/parsers/codex-stream-renderer.ts`
|
|
105
|
+
- **Severity**: Critical
|
|
106
|
+
- **Impact**: All non-interactive Codex runs produce empty output; verbose mode shows nothing; completion detection cannot work (relies on output text)
|
|
107
|
+
- **Root cause**: Renderer expects event types `AgentMessage`, `CommandExecution`, etc. but real Codex CLI emits `item.completed`, `item.started`, `turn.completed`, `error`, `turn.failed` with nested `item` objects
|
|
108
|
+
- **Suggested fix**: Rewrite switch to handle real event types: `item.completed` → check `item.type` for `agent_message` (text in `item.text`), `command_execution` (command in `item.command`), `file_change`, etc. Also handle `error` and `turn.failed` events. Consider extracting usage data from `turn.completed` events.
|
|
109
|
+
|
|
110
|
+
### Issue 2: CRITICAL — `--provider` Flag is a No-Op
|
|
111
|
+
- **File**: `src/commands/do.ts` (line 1036), `src/commands/plan.ts` (lines 289, 619, 802)
|
|
112
|
+
- **Severity**: Critical
|
|
113
|
+
- **Impact**: Users cannot actually use the Codex provider via CLI — the flag is accepted but ignored
|
|
114
|
+
- **Root cause**: `options.provider` is never read from the Commander options object and never passed to `createRunner()`, `resolveEffortToModel()`, or `resolveModelOption()`
|
|
115
|
+
- **Suggested fix**: Read `options.provider`, pass it through to all runner creation and model resolution calls. The `RunnerConfig` type already supports `provider`.
|
|
116
|
+
|
|
117
|
+
### Issue 3: MAJOR — Codex Error Events Silently Swallowed
|
|
118
|
+
- **File**: `src/parsers/codex-stream-renderer.ts`
|
|
119
|
+
- **Severity**: Major (partially overlaps with Issue 1)
|
|
120
|
+
- **Impact**: When Codex reports errors (invalid model, API failures), the runner returns exit code 0-1 with empty output and no error information
|
|
121
|
+
- **Root cause**: `error` and `turn.failed` event types are not handled by the renderer
|
|
122
|
+
- **Suggested fix**: Add handlers for `error` and `turn.failed` events that capture error messages in both `display` and `textContent`
|
|
123
|
+
|
|
124
|
+
## What Works Correctly
|
|
125
|
+
- Config schema and types for Codex models/effort mapping
|
|
126
|
+
- Model resolution functions (`getModel`, `resolveEffortToModel`, `parseModelSpec`, etc.) when called with explicit provider parameter
|
|
127
|
+
- Runner factory creates correct runner type for each provider
|
|
128
|
+
- `RunnerConfig.provider` type exists and is used by factory
|
|
129
|
+
- CodexRunner constructor, `kill()`, `isRunning()`, `runResume()` error
|
|
130
|
+
- Command construction (`codex exec --full-auto --json --ephemeral -m <model>`) uses correct flags
|
|
131
|
+
- Process spawning, timeout handling, PTY setup code structure
|
|
132
|
+
- `usageData: undefined` doesn't break downstream consumers (guarded by `if (result.usageData)`)
|
|
133
|
+
|
|
134
|
+
## Notes
|
|
135
|
+
- Interactive mode (`runInteractive`) was not tested E2E because it requires PTY interaction which cannot be automated in this context. Code review shows the PTY setup follows the same pattern as ClaudeRunner.
|
|
136
|
+
- The `raf-dev plan --provider codex` and `raf-dev do --provider codex` commands were not tested interactively because Issue 2 makes the flag inert and Issue 1 would prevent any output capture.
|
|
137
|
+
- Timeout behavior was not stress-tested due to API costs, but the code structure is identical to ClaudeRunner's proven implementation.
|
|
138
|
+
|
|
139
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
effort: high
|
|
3
|
+
---
|
|
4
|
+
# Task: Config Schema & Provider Types
|
|
5
|
+
|
|
6
|
+
## Objective
|
|
7
|
+
Extend the config system to support multiple CLI providers (claude, codex) with harness-prefixed model names and provider-specific model mappings.
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
RAF currently hardcodes Claude as the only CLI provider. To support Codex CLI alongside Claude, we need to introduce a provider abstraction at the config/type level first. This is the foundation task — all other tasks depend on it.
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
- Add a `provider` field to `RafConfig` (default: `'claude'`)
|
|
14
|
+
- Support harness-prefixed model format: `claude/opus`, `codex/gpt-5.4`, etc.
|
|
15
|
+
- Unprefixed aliases (`opus`, `sonnet`, `haiku`) default to `claude/` prefix — existing configs keep working
|
|
16
|
+
- Add Codex-specific model mappings and effort mappings
|
|
17
|
+
- Add provider to CLI command options (`--provider` flag)
|
|
18
|
+
- Config validation must accept both old (unprefixed) and new (prefixed) model formats
|
|
19
|
+
|
|
20
|
+
## Implementation Steps
|
|
21
|
+
|
|
22
|
+
1. **Update `src/types/config.ts`**:
|
|
23
|
+
- Add `HarnessProvider` type: `'claude' | 'codex'`
|
|
24
|
+
- Add `provider: HarnessProvider` to `RafConfig` with default `'claude'`
|
|
25
|
+
- Add `provider` to `DEFAULT_CONFIG`
|
|
26
|
+
- Rename `ClaudeModelAlias` to `ModelAlias` (keep backward-compat re-export)
|
|
27
|
+
- Rename `ClaudeModelName` to `ModelName` (keep backward-compat re-export)
|
|
28
|
+
- Add `CodexModelAlias` type for codex shorthand names (e.g., `'spark'`, `'codex'`, `'gpt54'`)
|
|
29
|
+
- Update `PlanCommandOptions` and `DoCommandOptions` to include `provider?: HarnessProvider`
|
|
30
|
+
- Add a `codexModels` config section parallel to `models`, with same scenario keys but codex model defaults
|
|
31
|
+
- Add a `codexEffortMapping` config section parallel to `effortMapping`
|
|
32
|
+
|
|
33
|
+
2. **Add Codex model constants and defaults**:
|
|
34
|
+
- Default codex models config:
|
|
35
|
+
```
|
|
36
|
+
codexModels: {
|
|
37
|
+
plan: 'gpt-5.3-codex',
|
|
38
|
+
execute: 'gpt-5.4',
|
|
39
|
+
nameGeneration: 'gpt-5.3-codex-spark',
|
|
40
|
+
failureAnalysis: 'gpt-5.3-codex-spark',
|
|
41
|
+
prGeneration: 'gpt-5.3-codex',
|
|
42
|
+
config: 'gpt-5.3-codex',
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
- Default codex effort mapping:
|
|
46
|
+
```
|
|
47
|
+
codexEffortMapping: {
|
|
48
|
+
low: 'gpt-5.3-codex-spark',
|
|
49
|
+
medium: 'gpt-5.3-codex',
|
|
50
|
+
high: 'gpt-5.4',
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
3. **Update `src/utils/config.ts`**:
|
|
55
|
+
- Update `isValidModelName()` to accept:
|
|
56
|
+
- Existing Claude aliases and full IDs (backward compat)
|
|
57
|
+
- Harness-prefixed format: `claude/<alias-or-full-id>` or `codex/<model-id>`
|
|
58
|
+
- Raw Codex model IDs (e.g., `gpt-5.4`, `gpt-5.3-codex-spark`)
|
|
59
|
+
- Update `resolveFullModelId()` to handle prefixed format — strip prefix and resolve
|
|
60
|
+
- Add `parseModelSpec(modelSpec: string): { provider: HarnessProvider; model: string }` that parses `codex/gpt-5.4` into parts
|
|
61
|
+
- Update `getModel()` to accept optional provider parameter and return from the right config section
|
|
62
|
+
- Update `resolveEffortToModel()` similarly
|
|
63
|
+
- Add Codex model tier ordering for ceiling comparison
|
|
64
|
+
- Update `getModelShortName()` to handle Codex models
|
|
65
|
+
- Update `MODEL_ALIAS_TO_FULL_ID` to include codex aliases if any
|
|
66
|
+
- Update `VALID_TOP_LEVEL_KEYS` set to include `'provider'`, `'codexModels'`, `'codexEffortMapping'`
|
|
67
|
+
- Update `validateConfig()` to validate the new fields
|
|
68
|
+
- Update `deepMerge()` to merge the new config sections
|
|
69
|
+
|
|
70
|
+
4. **Update `src/index.ts`**:
|
|
71
|
+
- Add `--provider <provider>` option to `plan` and `do` commands
|
|
72
|
+
- Pass provider through to command handlers
|
|
73
|
+
|
|
74
|
+
5. **Update `src/commands/do.ts`** and `src/commands/plan.ts`** (only the option plumbing):
|
|
75
|
+
- Accept `provider` from CLI options
|
|
76
|
+
- Thread it through to where model resolution happens
|
|
77
|
+
|
|
78
|
+
## Acceptance Criteria
|
|
79
|
+
- [ ] `provider` field exists in config with `'claude'` default
|
|
80
|
+
- [ ] Harness-prefixed model names parse correctly (e.g., `codex/gpt-5.4`)
|
|
81
|
+
- [ ] Unprefixed aliases still work and default to claude
|
|
82
|
+
- [ ] Codex model defaults are defined
|
|
83
|
+
- [ ] Config validation accepts new fields and rejects invalid ones
|
|
84
|
+
- [ ] `--provider` flag available on `raf plan` and `raf do`
|
|
85
|
+
- [ ] TypeScript compiles without errors
|
|
86
|
+
|
|
87
|
+
## Notes
|
|
88
|
+
- This task focuses on types, config, and validation only. The actual CLI runner abstraction is in the next task.
|
|
89
|
+
- Keep backward-compat re-exports for renamed types so other modules don't need immediate changes.
|
|
90
|
+
- The `codexModels` and `codexEffortMapping` config sections mirror the claude ones structurally, making the config symmetric.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
effort: high
|
|
3
|
+
---
|
|
4
|
+
# Task: Abstract CLI Runner Interface
|
|
5
|
+
|
|
6
|
+
## Objective
|
|
7
|
+
Extract a provider-agnostic runner interface from `ClaudeRunner` so both Claude and Codex can be used interchangeably.
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
`ClaudeRunner` in `src/core/claude-runner.ts` currently contains both Claude-specific logic (CLI args, path discovery) and generic orchestration logic (timeout management, completion detection, PTY handling). We need to separate these concerns so Codex can plug in with its own CLI-specific logic while reusing the orchestration.
|
|
11
|
+
|
|
12
|
+
## Dependencies
|
|
13
|
+
1
|
|
14
|
+
|
|
15
|
+
## Requirements
|
|
16
|
+
- Create an abstract `CliRunner` interface/base class that both providers implement
|
|
17
|
+
- The interface must support: `run()`, `runVerbose()`, `runInteractive()`, `runResume()`, `kill()`, `isRunning()`
|
|
18
|
+
- Keep `RunResult` and `ClaudeRunnerOptions` as shared types (rename options to `RunnerOptions`)
|
|
19
|
+
- Completion detection logic (grace period, commit verification) should remain shared
|
|
20
|
+
- Create a factory function that returns the correct runner based on provider config
|
|
21
|
+
- Existing code that uses `ClaudeRunner` should work with minimal changes (ideally just type changes)
|
|
22
|
+
|
|
23
|
+
## Implementation Steps
|
|
24
|
+
|
|
25
|
+
1. **Create `src/core/runner-types.ts`**:
|
|
26
|
+
- Move shared types here: `RunnerOptions` (renamed from `ClaudeRunnerOptions`), `RunnerConfig` (renamed from `ClaudeRunnerConfig`), `RunResult`
|
|
27
|
+
- Add `provider: HarnessProvider` to `RunnerConfig`
|
|
28
|
+
- Re-export from `claude-runner.ts` for backward compat
|
|
29
|
+
|
|
30
|
+
2. **Create `src/core/runner-interface.ts`**:
|
|
31
|
+
- Define the `ICliRunner` interface:
|
|
32
|
+
```typescript
|
|
33
|
+
export interface ICliRunner {
|
|
34
|
+
runInteractive(systemPrompt: string, userMessage: string, options?: RunnerOptions): Promise<number>;
|
|
35
|
+
runResume(options?: RunnerOptions): Promise<number>;
|
|
36
|
+
run(prompt: string, options?: RunnerOptions): Promise<RunResult>;
|
|
37
|
+
runVerbose(prompt: string, options?: RunnerOptions): Promise<RunResult>;
|
|
38
|
+
kill(): void;
|
|
39
|
+
isRunning(): boolean;
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
3. **Refactor `src/core/claude-runner.ts`**:
|
|
44
|
+
- `ClaudeRunner` implements `ICliRunner`
|
|
45
|
+
- Keep all existing Claude-specific logic (arg building, `which claude`, stream-json parsing)
|
|
46
|
+
- Import shared types from `runner-types.ts`
|
|
47
|
+
- The completion detection helpers (`createCompletionDetector`, `verifyCommit`, etc.) stay in this file or move to a shared utils file since Codex will need them too
|
|
48
|
+
|
|
49
|
+
4. **Create `src/core/runner-factory.ts`**:
|
|
50
|
+
- Export `createRunner(config: RunnerConfig): ICliRunner`
|
|
51
|
+
- For `provider: 'claude'` → return `new ClaudeRunner(config)`
|
|
52
|
+
- For `provider: 'codex'` → throw for now with "Codex runner not yet implemented" (task 3 will implement it)
|
|
53
|
+
- Export `getProviderBinaryName(provider: HarnessProvider): string` utility
|
|
54
|
+
|
|
55
|
+
5. **Extract completion detection to `src/core/completion-detector.ts`**:
|
|
56
|
+
- Move `createCompletionDetector`, `verifyCommit`, `CompletionDetector` interface, and related constants
|
|
57
|
+
- Both Claude and Codex runners will import from here
|
|
58
|
+
|
|
59
|
+
6. **Update consumers**:
|
|
60
|
+
- `src/commands/do.ts`: Use `createRunner()` instead of `new ClaudeRunner()`; pass provider from options
|
|
61
|
+
- `src/commands/plan.ts`: Same
|
|
62
|
+
- `src/core/pull-request.ts`: Will need provider-aware runner creation (can stay claude-only for now with a TODO)
|
|
63
|
+
- Update imports as needed
|
|
64
|
+
|
|
65
|
+
## Acceptance Criteria
|
|
66
|
+
- [ ] `ICliRunner` interface is defined and `ClaudeRunner` implements it
|
|
67
|
+
- [ ] `createRunner()` factory works for claude provider
|
|
68
|
+
- [ ] `do.ts` and `plan.ts` use the factory instead of direct `ClaudeRunner` construction
|
|
69
|
+
- [ ] Completion detection is extracted and shared
|
|
70
|
+
- [ ] All existing functionality works identically (no behavior changes)
|
|
71
|
+
- [ ] TypeScript compiles without errors
|
|
72
|
+
|
|
73
|
+
## Notes
|
|
74
|
+
- This is a refactoring task — no new features, just structural changes to enable task 3.
|
|
75
|
+
- The `runResume()` method is Claude-specific (Codex may not support session resume). The Codex implementation can throw "not supported" for this method.
|
|
76
|
+
- Keep the refactoring minimal — don't redesign the whole API, just extract the interface.
|