rafcode 2.5.1-0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +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 +35 -0
- package/RAF/38-dual-wielder/input.md +8 -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/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/README.md +57 -10
- 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 +42 -69
- package/dist/commands/do.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +71 -34
- 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/pull-request.d.ts +4 -4
- package/dist/core/pull-request.js +11 -11
- 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 +10 -13
- 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 +31 -0
- package/dist/parsers/codex-stream-renderer.d.ts.map +1 -0
- package/dist/parsers/codex-stream-renderer.js +81 -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 -1
- package/dist/prompts/amend.js +6 -6
- 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.js +12 -12
- package/dist/types/config.d.ts +21 -0
- 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 +27 -51
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +112 -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 +1 -1
- package/src/commands/config.ts +7 -7
- package/src/commands/do.ts +45 -79
- package/src/commands/plan.ts +74 -34
- 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/pull-request.ts +11 -11
- 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 +10 -13
- package/src/core/worktree.ts +14 -16
- package/src/index.ts +1 -1
- package/src/parsers/codex-stream-renderer.ts +108 -0
- package/src/parsers/output-parser.ts +2 -2
- package/src/parsers/stream-renderer.ts +1 -1
- package/src/prompts/amend.ts +6 -6
- package/src/prompts/config-docs.md +7 -7
- package/src/prompts/execution.ts +2 -2
- package/src/prompts/planning.ts +12 -12
- package/src/types/config.ts +39 -0
- 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 +113 -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,326 @@
|
|
|
1
|
+
import * as pty from 'node-pty';
|
|
2
|
+
import type { IDisposable } from 'node-pty';
|
|
3
|
+
import { execSync, spawn } from 'node:child_process';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
import { renderCodexStreamEvent } from '../parsers/codex-stream-renderer.js';
|
|
6
|
+
import { getModel } from '../utils/config.js';
|
|
7
|
+
import type { ICliRunner } from './runner-interface.js';
|
|
8
|
+
import type { RunnerOptions, RunnerConfig, RunResult } from './runner-types.js';
|
|
9
|
+
import { createCompletionDetector } from './completion-detector.js';
|
|
10
|
+
|
|
11
|
+
function getCodexPath(): string {
|
|
12
|
+
try {
|
|
13
|
+
return execSync('which codex', { encoding: 'utf-8' }).trim();
|
|
14
|
+
} catch {
|
|
15
|
+
throw new Error('Codex CLI not found. Please ensure it is installed and in your PATH.');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Combine system prompt and user message into a single prompt for Codex.
|
|
21
|
+
* Codex CLI does not support a separate --system-prompt flag, so the system
|
|
22
|
+
* instructions are prepended to the user message.
|
|
23
|
+
*/
|
|
24
|
+
function buildCombinedPrompt(systemPrompt: string, userMessage: string): string {
|
|
25
|
+
return `[System Instructions]\n\n${systemPrompt}\n\n[User Request]\n\n${userMessage}`;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const CONTEXT_OVERFLOW_PATTERNS = [
|
|
29
|
+
/context length exceeded/i,
|
|
30
|
+
/token limit/i,
|
|
31
|
+
/maximum context/i,
|
|
32
|
+
/context window/i,
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
export class CodexRunner implements ICliRunner {
|
|
36
|
+
private activeProcess: pty.IPty | null = null;
|
|
37
|
+
private killed = false;
|
|
38
|
+
private model: string;
|
|
39
|
+
|
|
40
|
+
constructor(config: RunnerConfig = {}) {
|
|
41
|
+
this.model = config.model ?? getModel('execute', 'codex');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Run Codex interactively with stdin/stdout passthrough via PTY.
|
|
46
|
+
* Spawns `codex -m <model> <combined_prompt>` (no `exec` subcommand).
|
|
47
|
+
*/
|
|
48
|
+
async runInteractive(
|
|
49
|
+
systemPrompt: string,
|
|
50
|
+
userMessage: string,
|
|
51
|
+
options: RunnerOptions = {}
|
|
52
|
+
): Promise<number> {
|
|
53
|
+
const { cwd = process.cwd() } = options;
|
|
54
|
+
|
|
55
|
+
return new Promise((resolve) => {
|
|
56
|
+
const combinedPrompt = buildCombinedPrompt(systemPrompt, userMessage);
|
|
57
|
+
const args = ['-m', this.model, combinedPrompt];
|
|
58
|
+
|
|
59
|
+
logger.debug(`Starting interactive Codex session with model: ${this.model}`);
|
|
60
|
+
|
|
61
|
+
this.activeProcess = pty.spawn(getCodexPath(), args, {
|
|
62
|
+
name: 'xterm-256color',
|
|
63
|
+
cols: process.stdout.columns ?? 80,
|
|
64
|
+
rows: process.stdout.rows ?? 24,
|
|
65
|
+
cwd,
|
|
66
|
+
env: process.env as Record<string, string>,
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// Set raw mode to pass through all input
|
|
70
|
+
if (process.stdin.isTTY) {
|
|
71
|
+
process.stdin.setRawMode(true);
|
|
72
|
+
}
|
|
73
|
+
process.stdin.resume();
|
|
74
|
+
|
|
75
|
+
// Pipe input to Codex
|
|
76
|
+
const onData = (data: Buffer): void => {
|
|
77
|
+
if (this.activeProcess && !this.killed) {
|
|
78
|
+
this.activeProcess.write(data.toString());
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
process.stdin.on('data', onData);
|
|
82
|
+
|
|
83
|
+
// Store disposables for proper cleanup
|
|
84
|
+
const disposables: IDisposable[] = [];
|
|
85
|
+
|
|
86
|
+
// Pipe output to stdout
|
|
87
|
+
disposables.push(this.activeProcess.onData((data) => {
|
|
88
|
+
process.stdout.write(data);
|
|
89
|
+
}));
|
|
90
|
+
|
|
91
|
+
disposables.push(this.activeProcess.onExit(({ exitCode }) => {
|
|
92
|
+
// Cleanup stdin
|
|
93
|
+
process.stdin.off('data', onData);
|
|
94
|
+
if (process.stdin.isTTY) {
|
|
95
|
+
process.stdin.setRawMode(false);
|
|
96
|
+
}
|
|
97
|
+
process.stdin.pause();
|
|
98
|
+
|
|
99
|
+
// Dispose all event listeners to prevent FD leaks
|
|
100
|
+
for (const disposable of disposables) {
|
|
101
|
+
try {
|
|
102
|
+
disposable.dispose();
|
|
103
|
+
} catch {
|
|
104
|
+
// Ignore disposal errors
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Ensure PTY is fully cleaned up
|
|
109
|
+
if (this.activeProcess) {
|
|
110
|
+
try {
|
|
111
|
+
this.activeProcess.kill();
|
|
112
|
+
} catch {
|
|
113
|
+
// Ignore - process may already be dead
|
|
114
|
+
}
|
|
115
|
+
this.activeProcess = null;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (this.killed) {
|
|
119
|
+
resolve(130); // SIGINT exit code
|
|
120
|
+
} else {
|
|
121
|
+
resolve(exitCode);
|
|
122
|
+
}
|
|
123
|
+
}));
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Session resume is not supported by Codex CLI.
|
|
129
|
+
*/
|
|
130
|
+
async runResume(_options: RunnerOptions = {}): Promise<number> {
|
|
131
|
+
throw new Error('Session resume is not supported by Codex CLI');
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Run Codex non-interactively and collect output.
|
|
136
|
+
* Tool display is suppressed (non-verbose mode).
|
|
137
|
+
*/
|
|
138
|
+
async run(prompt: string, options: RunnerOptions = {}): Promise<RunResult> {
|
|
139
|
+
return this._runExec(prompt, options, false);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Run Codex non-interactively with verbose output to stdout.
|
|
144
|
+
* Uses `codex exec --full-auto --json` to get JSONL streaming events.
|
|
145
|
+
*/
|
|
146
|
+
async runVerbose(prompt: string, options: RunnerOptions = {}): Promise<RunResult> {
|
|
147
|
+
return this._runExec(prompt, options, true);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Internal unified execution method using `codex exec --full-auto --json`.
|
|
152
|
+
* Both run() and runVerbose() delegate to this method.
|
|
153
|
+
*/
|
|
154
|
+
private async _runExec(
|
|
155
|
+
prompt: string,
|
|
156
|
+
options: RunnerOptions,
|
|
157
|
+
verbose: boolean,
|
|
158
|
+
): Promise<RunResult> {
|
|
159
|
+
const { timeout = 60, cwd = process.cwd(), outcomeFilePath, commitContext, verboseCheck } = options;
|
|
160
|
+
const validatedTimeout = Number(timeout) > 0 ? Number(timeout) : 60;
|
|
161
|
+
const timeoutMs = validatedTimeout * 60 * 1000;
|
|
162
|
+
|
|
163
|
+
const shouldDisplay = verboseCheck ?? (() => verbose);
|
|
164
|
+
|
|
165
|
+
return new Promise((resolve) => {
|
|
166
|
+
let output = '';
|
|
167
|
+
let stderr = '';
|
|
168
|
+
let timedOut = false;
|
|
169
|
+
let contextOverflow = false;
|
|
170
|
+
|
|
171
|
+
const codexPath = getCodexPath();
|
|
172
|
+
|
|
173
|
+
logger.debug(`Starting Codex execution session (json, verbose=${verbose}) with model: ${this.model}`);
|
|
174
|
+
logger.debug(`Prompt length: ${prompt.length}, timeout: ${timeoutMs}ms, cwd: ${cwd}`);
|
|
175
|
+
logger.debug(`Codex path: ${codexPath}`);
|
|
176
|
+
|
|
177
|
+
logger.debug('Spawning process...');
|
|
178
|
+
const proc = spawn(codexPath, [
|
|
179
|
+
'exec',
|
|
180
|
+
'--full-auto',
|
|
181
|
+
'--json',
|
|
182
|
+
'--ephemeral',
|
|
183
|
+
'-m',
|
|
184
|
+
this.model,
|
|
185
|
+
prompt,
|
|
186
|
+
], {
|
|
187
|
+
cwd,
|
|
188
|
+
env: process.env,
|
|
189
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
// Track this process
|
|
193
|
+
this.activeProcess = proc as any;
|
|
194
|
+
logger.debug('Process spawned');
|
|
195
|
+
|
|
196
|
+
// Set up timeout
|
|
197
|
+
const timeoutHandle = setTimeout(() => {
|
|
198
|
+
timedOut = true;
|
|
199
|
+
logger.warn('Codex session timed out');
|
|
200
|
+
proc.kill('SIGTERM');
|
|
201
|
+
}, timeoutMs);
|
|
202
|
+
|
|
203
|
+
// Set up completion detection (stdout marker + outcome file polling)
|
|
204
|
+
const completionDetector = createCompletionDetector(
|
|
205
|
+
() => proc.kill('SIGTERM'),
|
|
206
|
+
outcomeFilePath,
|
|
207
|
+
commitContext,
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
// Buffer for incomplete JSONL lines
|
|
211
|
+
let lineBuffer = '';
|
|
212
|
+
let dataReceived = false;
|
|
213
|
+
|
|
214
|
+
proc.stdout.on('data', (data) => {
|
|
215
|
+
if (!dataReceived) {
|
|
216
|
+
logger.debug('First data chunk received');
|
|
217
|
+
dataReceived = true;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
lineBuffer += data.toString();
|
|
221
|
+
|
|
222
|
+
// Process complete lines from the JSONL stream
|
|
223
|
+
let newlineIndex: number;
|
|
224
|
+
while ((newlineIndex = lineBuffer.indexOf('\n')) !== -1) {
|
|
225
|
+
const line = lineBuffer.substring(0, newlineIndex);
|
|
226
|
+
lineBuffer = lineBuffer.substring(newlineIndex + 1);
|
|
227
|
+
|
|
228
|
+
const rendered = renderCodexStreamEvent(line);
|
|
229
|
+
|
|
230
|
+
if (rendered.textContent) {
|
|
231
|
+
output += rendered.textContent;
|
|
232
|
+
|
|
233
|
+
// Check for completion marker to start grace period
|
|
234
|
+
completionDetector.checkOutput(output);
|
|
235
|
+
|
|
236
|
+
// Check for context overflow
|
|
237
|
+
for (const pattern of CONTEXT_OVERFLOW_PATTERNS) {
|
|
238
|
+
if (pattern.test(rendered.textContent)) {
|
|
239
|
+
contextOverflow = true;
|
|
240
|
+
logger.warn('Context overflow detected');
|
|
241
|
+
proc.kill('SIGTERM');
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (shouldDisplay() && rendered.display) {
|
|
248
|
+
process.stdout.write(rendered.display);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
// Collect stderr
|
|
254
|
+
proc.stderr.on('data', (data) => {
|
|
255
|
+
stderr += data.toString();
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
proc.on('close', (exitCode) => {
|
|
259
|
+
// Process any remaining data in the line buffer
|
|
260
|
+
if (lineBuffer.trim()) {
|
|
261
|
+
const rendered = renderCodexStreamEvent(lineBuffer);
|
|
262
|
+
if (rendered.textContent) {
|
|
263
|
+
output += rendered.textContent;
|
|
264
|
+
}
|
|
265
|
+
if (shouldDisplay() && rendered.display) {
|
|
266
|
+
process.stdout.write(rendered.display);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
clearTimeout(timeoutHandle);
|
|
271
|
+
completionDetector.cleanup();
|
|
272
|
+
this.activeProcess = null;
|
|
273
|
+
logger.debug(`Codex exited with code ${exitCode}, output length: ${output.length}, timedOut: ${timedOut}, contextOverflow: ${contextOverflow}`);
|
|
274
|
+
|
|
275
|
+
if (stderr) {
|
|
276
|
+
logger.debug(`Codex stderr: ${stderr}`);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
resolve({
|
|
280
|
+
output,
|
|
281
|
+
exitCode: exitCode ?? (this.killed ? 130 : 1),
|
|
282
|
+
timedOut,
|
|
283
|
+
contextOverflow,
|
|
284
|
+
// Codex does not provide usage data in the same format — omit gracefully
|
|
285
|
+
usageData: undefined,
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Kill the active Codex process gracefully.
|
|
293
|
+
*/
|
|
294
|
+
kill(): void {
|
|
295
|
+
if (this.activeProcess) {
|
|
296
|
+
this.killed = true;
|
|
297
|
+
|
|
298
|
+
// Send Ctrl+C first for graceful shutdown (only for PTY processes)
|
|
299
|
+
try {
|
|
300
|
+
if (typeof this.activeProcess.write === 'function') {
|
|
301
|
+
this.activeProcess.write('\x03');
|
|
302
|
+
}
|
|
303
|
+
} catch {
|
|
304
|
+
// Ignore write errors - process may already be closing
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Force kill after 5 seconds if still running
|
|
308
|
+
setTimeout(() => {
|
|
309
|
+
if (this.activeProcess) {
|
|
310
|
+
try {
|
|
311
|
+
this.activeProcess.kill();
|
|
312
|
+
} catch {
|
|
313
|
+
// Ignore kill errors - process may already be dead
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}, 5000);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Check if a process is currently running.
|
|
322
|
+
*/
|
|
323
|
+
isRunning(): boolean {
|
|
324
|
+
return this.activeProcess !== null;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
import { getHeadCommitHash, getHeadCommitMessage, isFileCommittedInHead } from './git.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Grace period in ms after completion marker is detected before terminating.
|
|
7
|
+
* Allows time for git commit operations to complete.
|
|
8
|
+
*/
|
|
9
|
+
export const COMPLETION_GRACE_PERIOD_MS = 60_000;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Hard maximum grace period in ms. If the commit hasn't landed by this point,
|
|
13
|
+
* the process is killed regardless.
|
|
14
|
+
*/
|
|
15
|
+
export const COMPLETION_HARD_MAX_MS = 180_000;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Interval in ms for polling commit verification after the initial grace period expires.
|
|
19
|
+
*/
|
|
20
|
+
export const COMMIT_POLL_INTERVAL_MS = 10_000;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Interval in ms for polling the outcome file for completion markers.
|
|
24
|
+
*/
|
|
25
|
+
export const OUTCOME_POLL_INTERVAL_MS = 5_000;
|
|
26
|
+
|
|
27
|
+
export const COMPLETION_MARKER_PATTERN = /<promise>(COMPLETE|FAILED)<\/promise>/i;
|
|
28
|
+
|
|
29
|
+
const COMPLETE_MARKER_PATTERN = /<promise>COMPLETE<\/promise>/i;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Context for commit verification during grace period.
|
|
33
|
+
*/
|
|
34
|
+
export interface CommitContext {
|
|
35
|
+
/** HEAD commit hash recorded before task execution began. */
|
|
36
|
+
preExecutionHead: string;
|
|
37
|
+
/** Expected commit message prefix (e.g., "RAF[005:01]"). */
|
|
38
|
+
expectedPrefix: string;
|
|
39
|
+
/** Path to the outcome file that should be committed. */
|
|
40
|
+
outcomeFilePath: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Monitors for task completion markers in stdout and outcome files.
|
|
45
|
+
* When a marker is detected, starts a grace period before killing the process.
|
|
46
|
+
*/
|
|
47
|
+
export interface CompletionDetector {
|
|
48
|
+
/** Check accumulated stdout output for completion markers. */
|
|
49
|
+
checkOutput(output: string): void;
|
|
50
|
+
/** Clean up all timers. Must be called when the process exits. */
|
|
51
|
+
cleanup(): void;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Verify that the expected commit has been made.
|
|
56
|
+
* Checks: HEAD changed, commit message matches prefix, outcome file is committed.
|
|
57
|
+
*/
|
|
58
|
+
export function verifyCommit(commitContext: CommitContext): boolean {
|
|
59
|
+
const currentHead = getHeadCommitHash();
|
|
60
|
+
if (!currentHead || currentHead === commitContext.preExecutionHead) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const message = getHeadCommitMessage();
|
|
65
|
+
if (!message || !message.startsWith(commitContext.expectedPrefix)) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (!isFileCommittedInHead(commitContext.outcomeFilePath)) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function createCompletionDetector(
|
|
77
|
+
killFn: () => void,
|
|
78
|
+
outcomeFilePath?: string,
|
|
79
|
+
commitContext?: CommitContext,
|
|
80
|
+
): CompletionDetector {
|
|
81
|
+
let graceHandle: ReturnType<typeof setTimeout> | null = null;
|
|
82
|
+
let commitPollHandle: ReturnType<typeof setInterval> | null = null;
|
|
83
|
+
let hardMaxHandle: ReturnType<typeof setTimeout> | null = null;
|
|
84
|
+
let pollHandle: ReturnType<typeof setInterval> | null = null;
|
|
85
|
+
let initialMtime = 0;
|
|
86
|
+
let detectedMarkerIsComplete = false;
|
|
87
|
+
|
|
88
|
+
// Record initial mtime of outcome file to avoid false positives from previous runs
|
|
89
|
+
if (outcomeFilePath) {
|
|
90
|
+
try {
|
|
91
|
+
if (fs.existsSync(outcomeFilePath)) {
|
|
92
|
+
initialMtime = fs.statSync(outcomeFilePath).mtimeMs;
|
|
93
|
+
}
|
|
94
|
+
} catch {
|
|
95
|
+
// Ignore stat errors
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Called when the initial grace period expires.
|
|
101
|
+
* If commit verification is needed and the commit hasn't landed yet,
|
|
102
|
+
* start polling for the commit up to the hard maximum.
|
|
103
|
+
*/
|
|
104
|
+
function onGracePeriodExpired(): void {
|
|
105
|
+
if (commitContext && detectedMarkerIsComplete) {
|
|
106
|
+
// Check if commit already landed
|
|
107
|
+
if (verifyCommit(commitContext)) {
|
|
108
|
+
logger.debug('Grace period expired - commit verified, terminating process');
|
|
109
|
+
killFn();
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Commit not found yet - extend with polling
|
|
114
|
+
logger.debug('Grace period expired but commit not verified - extending with polling');
|
|
115
|
+
const remainingMs = COMPLETION_HARD_MAX_MS - COMPLETION_GRACE_PERIOD_MS;
|
|
116
|
+
|
|
117
|
+
hardMaxHandle = setTimeout(() => {
|
|
118
|
+
logger.warn('Hard maximum grace period reached without commit verification - terminating process');
|
|
119
|
+
if (commitPollHandle) clearInterval(commitPollHandle);
|
|
120
|
+
killFn();
|
|
121
|
+
}, remainingMs);
|
|
122
|
+
|
|
123
|
+
commitPollHandle = setInterval(() => {
|
|
124
|
+
if (commitContext && verifyCommit(commitContext)) {
|
|
125
|
+
logger.debug('Commit verified during extended grace period - terminating process');
|
|
126
|
+
if (commitPollHandle) clearInterval(commitPollHandle);
|
|
127
|
+
if (hardMaxHandle) clearTimeout(hardMaxHandle);
|
|
128
|
+
killFn();
|
|
129
|
+
}
|
|
130
|
+
}, COMMIT_POLL_INTERVAL_MS);
|
|
131
|
+
} else {
|
|
132
|
+
// No commit verification needed (FAILED marker or no context) - kill immediately
|
|
133
|
+
logger.debug('Grace period expired - terminating process');
|
|
134
|
+
killFn();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function startGracePeriod(markerOutput: string): void {
|
|
139
|
+
if (graceHandle) return; // Already started
|
|
140
|
+
detectedMarkerIsComplete = COMPLETE_MARKER_PATTERN.test(markerOutput);
|
|
141
|
+
logger.debug('Completion marker detected - starting grace period before termination');
|
|
142
|
+
graceHandle = setTimeout(onGracePeriodExpired, COMPLETION_GRACE_PERIOD_MS);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function checkOutput(output: string): void {
|
|
146
|
+
if (!graceHandle && COMPLETION_MARKER_PATTERN.test(output)) {
|
|
147
|
+
startGracePeriod(output);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Start outcome file polling if path provided
|
|
152
|
+
if (outcomeFilePath) {
|
|
153
|
+
const filePath = outcomeFilePath;
|
|
154
|
+
pollHandle = setInterval(() => {
|
|
155
|
+
try {
|
|
156
|
+
if (!fs.existsSync(filePath)) return;
|
|
157
|
+
const stat = fs.statSync(filePath);
|
|
158
|
+
if (stat.mtimeMs <= initialMtime) return; // File unchanged from before execution
|
|
159
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
160
|
+
if (COMPLETION_MARKER_PATTERN.test(content)) {
|
|
161
|
+
startGracePeriod(content);
|
|
162
|
+
}
|
|
163
|
+
} catch {
|
|
164
|
+
// Ignore read errors - file may be mid-write
|
|
165
|
+
}
|
|
166
|
+
}, OUTCOME_POLL_INTERVAL_MS);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function cleanup(): void {
|
|
170
|
+
if (graceHandle) clearTimeout(graceHandle);
|
|
171
|
+
if (pollHandle) clearInterval(pollHandle);
|
|
172
|
+
if (commitPollHandle) clearInterval(commitPollHandle);
|
|
173
|
+
if (hardMaxHandle) clearTimeout(hardMaxHandle);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return { checkOutput, cleanup };
|
|
177
|
+
}
|
|
@@ -110,7 +110,7 @@ export function generateProgrammaticReport(
|
|
|
110
110
|
API error occurred during task execution.
|
|
111
111
|
|
|
112
112
|
## Analysis
|
|
113
|
-
The
|
|
113
|
+
The API returned an error response. This is typically a temporary issue with the API service.
|
|
114
114
|
|
|
115
115
|
## Suggested Fix
|
|
116
116
|
- Wait a few minutes and retry the task
|
|
@@ -150,13 +150,13 @@ Task execution timed out.
|
|
|
150
150
|
## Analysis
|
|
151
151
|
The task took longer than the configured timeout to complete. This could indicate:
|
|
152
152
|
- The task is too complex or large for a single execution
|
|
153
|
-
-
|
|
153
|
+
- The LLM is stuck or making slow progress
|
|
154
154
|
- Network issues causing delays
|
|
155
155
|
|
|
156
156
|
## Suggested Fix
|
|
157
157
|
- Increase the timeout with \`--timeout <minutes>\`
|
|
158
158
|
- Break the task into smaller subtasks
|
|
159
|
-
- Check the logs for what
|
|
159
|
+
- Check the logs for what the LLM was doing before timeout
|
|
160
160
|
|
|
161
161
|
## Relevant Output
|
|
162
162
|
\`\`\`
|
|
@@ -170,14 +170,14 @@ ${relevantOutput}
|
|
|
170
170
|
Context window exceeded during task execution.
|
|
171
171
|
|
|
172
172
|
## Analysis
|
|
173
|
-
The conversation context grew too large for
|
|
173
|
+
The conversation context grew too large for the LLM to process. This typically happens when:
|
|
174
174
|
- Too much code or output was included in the context
|
|
175
175
|
- The task involves very large files
|
|
176
176
|
- Multiple previous outcomes created a large context
|
|
177
177
|
|
|
178
178
|
## Suggested Fix
|
|
179
179
|
- Break the task into smaller, independent subtasks
|
|
180
|
-
- Reduce the amount of context passed to
|
|
180
|
+
- Reduce the amount of context passed to the LLM
|
|
181
181
|
- Consider processing files in chunks
|
|
182
182
|
|
|
183
183
|
## Relevant Output
|
|
@@ -210,18 +210,18 @@ function extractRelevantOutput(output: string, maxLines: number): string {
|
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
/**
|
|
213
|
-
* Get the path to
|
|
213
|
+
* Get the path to the CLI binary.
|
|
214
214
|
*/
|
|
215
215
|
function getClaudePath(): string {
|
|
216
216
|
try {
|
|
217
217
|
return execSync('which claude', { encoding: 'utf-8' }).trim();
|
|
218
218
|
} catch {
|
|
219
|
-
throw new Error('
|
|
219
|
+
throw new Error('CLI not found. Please ensure it is installed and in your PATH.');
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
|
|
223
223
|
/**
|
|
224
|
-
* Analyze a failure using
|
|
224
|
+
* Analyze a failure using the LLM and generate a structured report.
|
|
225
225
|
* Uses a fast model for cost efficiency.
|
|
226
226
|
*/
|
|
227
227
|
export async function analyzeFailure(
|
|
@@ -236,7 +236,7 @@ export async function analyzeFailure(
|
|
|
236
236
|
return generateProgrammaticReport(programmaticType, failureReason, output);
|
|
237
237
|
}
|
|
238
238
|
|
|
239
|
-
// For other failures, use
|
|
239
|
+
// For other failures, use the LLM to analyze
|
|
240
240
|
try {
|
|
241
241
|
const analysisResult = await callClaudeForAnalysis(output, failureReason, taskId, timeoutMs);
|
|
242
242
|
return analysisResult;
|
|
@@ -262,7 +262,7 @@ ${relevantOutput}
|
|
|
262
262
|
}
|
|
263
263
|
|
|
264
264
|
/**
|
|
265
|
-
* Call
|
|
265
|
+
* Call the LLM CLI to analyze the failure.
|
|
266
266
|
* Uses the print mode with a concise prompt.
|
|
267
267
|
*/
|
|
268
268
|
async function callClaudeForAnalysis(
|
package/src/core/pull-request.ts
CHANGED
|
@@ -223,8 +223,8 @@ export function readProjectContext(projectPath: string): {
|
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
/**
|
|
226
|
-
* Generate a PR body by calling
|
|
227
|
-
* Falls back to a simple body if
|
|
226
|
+
* Generate a PR body by calling the LLM to summarize project context.
|
|
227
|
+
* Falls back to a simple body if the CLI is unavailable.
|
|
228
228
|
*/
|
|
229
229
|
export async function generatePrBody(
|
|
230
230
|
projectPath: string,
|
|
@@ -232,7 +232,7 @@ export async function generatePrBody(
|
|
|
232
232
|
): Promise<string> {
|
|
233
233
|
const context = readProjectContext(projectPath);
|
|
234
234
|
|
|
235
|
-
// Build context for
|
|
235
|
+
// Build context for LLM
|
|
236
236
|
const parts: string[] = [];
|
|
237
237
|
|
|
238
238
|
if (context.input) {
|
|
@@ -284,13 +284,13 @@ Respond with ONLY the PR body in this exact format (no extra text, no code fence
|
|
|
284
284
|
const body = await callClaudeForPrBody(prompt, timeoutMs);
|
|
285
285
|
return body;
|
|
286
286
|
} catch (error) {
|
|
287
|
-
logger.debug(`PR body generation
|
|
287
|
+
logger.debug(`PR body generation failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
288
288
|
return generateFallbackBody(projectPath);
|
|
289
289
|
}
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
/**
|
|
293
|
-
* Generate a simple fallback PR body when
|
|
293
|
+
* Generate a simple fallback PR body when the CLI is unavailable.
|
|
294
294
|
*/
|
|
295
295
|
function generateFallbackBody(projectPath: string): string {
|
|
296
296
|
const context = readProjectContext(projectPath);
|
|
@@ -330,8 +330,8 @@ function generateFallbackBody(projectPath: string): string {
|
|
|
330
330
|
}
|
|
331
331
|
|
|
332
332
|
/**
|
|
333
|
-
* Filter
|
|
334
|
-
*
|
|
333
|
+
* Filter CLI output to remove non-markdown log/warning lines.
|
|
334
|
+
* CLI stdout may include warning or progress lines mixed with the response.
|
|
335
335
|
*/
|
|
336
336
|
export function filterClaudeOutput(output: string): string {
|
|
337
337
|
const lines = output.split('\n');
|
|
@@ -351,14 +351,14 @@ export function filterClaudeOutput(output: string): string {
|
|
|
351
351
|
}
|
|
352
352
|
|
|
353
353
|
/**
|
|
354
|
-
* Call
|
|
354
|
+
* Call the LLM CLI to generate a PR body.
|
|
355
355
|
*/
|
|
356
356
|
async function callClaudeForPrBody(prompt: string, timeoutMs: number): Promise<string> {
|
|
357
357
|
let claudePath: string;
|
|
358
358
|
try {
|
|
359
359
|
claudePath = execSync('which claude', { encoding: 'utf-8', stdio: 'pipe' }).trim();
|
|
360
360
|
} catch {
|
|
361
|
-
throw new Error('
|
|
361
|
+
throw new Error('CLI not found');
|
|
362
362
|
}
|
|
363
363
|
|
|
364
364
|
return new Promise((resolve, reject) => {
|
|
@@ -394,13 +394,13 @@ async function callClaudeForPrBody(prompt: string, timeoutMs: number): Promise<s
|
|
|
394
394
|
clearTimeout(timeout);
|
|
395
395
|
|
|
396
396
|
if (exitCode !== 0) {
|
|
397
|
-
reject(new Error(`
|
|
397
|
+
reject(new Error(`Process exited with code ${exitCode}: ${stderr}`));
|
|
398
398
|
return;
|
|
399
399
|
}
|
|
400
400
|
|
|
401
401
|
const filtered = filterClaudeOutput(output);
|
|
402
402
|
if (!filtered) {
|
|
403
|
-
reject(new Error('
|
|
403
|
+
reject(new Error('LLM returned empty output'));
|
|
404
404
|
return;
|
|
405
405
|
}
|
|
406
406
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { HarnessProvider } from '../types/config.js';
|
|
2
|
+
import type { ICliRunner } from './runner-interface.js';
|
|
3
|
+
import type { RunnerConfig } from './runner-types.js';
|
|
4
|
+
import { ClaudeRunner } from './claude-runner.js';
|
|
5
|
+
import { CodexRunner } from './codex-runner.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Create a CLI runner for the given provider configuration.
|
|
9
|
+
*/
|
|
10
|
+
export function createRunner(config: RunnerConfig = {}): ICliRunner {
|
|
11
|
+
const provider = config.provider ?? 'claude';
|
|
12
|
+
|
|
13
|
+
switch (provider) {
|
|
14
|
+
case 'claude':
|
|
15
|
+
return new ClaudeRunner(config);
|
|
16
|
+
case 'codex':
|
|
17
|
+
return new CodexRunner(config);
|
|
18
|
+
default:
|
|
19
|
+
throw new Error(`Unknown provider: ${provider}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Get the binary name for a given provider.
|
|
25
|
+
*/
|
|
26
|
+
export function getProviderBinaryName(provider: HarnessProvider): string {
|
|
27
|
+
switch (provider) {
|
|
28
|
+
case 'claude':
|
|
29
|
+
return 'claude';
|
|
30
|
+
case 'codex':
|
|
31
|
+
return 'codex';
|
|
32
|
+
default:
|
|
33
|
+
throw new Error(`Unknown provider: ${provider}`);
|
|
34
|
+
}
|
|
35
|
+
}
|