rafcode 2.3.0 → 2.4.1-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 +3 -1
- package/CLAUDE.md +21 -4
- package/RAF/ahvrih-rate-forge/decisions.md +70 -0
- package/RAF/ahvrih-rate-forge/input.md +44 -0
- package/RAF/ahvrih-rate-forge/outcomes/01-remove-claude-command-config.md +58 -0
- package/RAF/ahvrih-rate-forge/outcomes/02-fix-mixed-attempt-cost.md +46 -0
- package/RAF/ahvrih-rate-forge/outcomes/03-rate-limit-estimation.md +82 -0
- package/RAF/ahvrih-rate-forge/outcomes/04-show-version-in-do-logs.md +45 -0
- package/RAF/ahvrih-rate-forge/outcomes/05-sync-main-before-worktree.md +96 -0
- package/RAF/ahvrih-rate-forge/outcomes/06-sync-readme-with-codebase.md +45 -0
- package/RAF/ahvrih-rate-forge/outcomes/07-no-session-persistence.md +26 -0
- package/RAF/ahvrih-rate-forge/outcomes/08-plan-execution-metadata.md +130 -0
- package/RAF/ahvrih-rate-forge/plans/01-remove-claude-command-config.md +36 -0
- package/RAF/ahvrih-rate-forge/plans/02-fix-mixed-attempt-cost.md +33 -0
- package/RAF/ahvrih-rate-forge/plans/03-rate-limit-estimation.md +82 -0
- package/RAF/ahvrih-rate-forge/plans/04-show-version-in-do-logs.md +32 -0
- package/RAF/ahvrih-rate-forge/plans/05-sync-main-before-worktree.md +40 -0
- package/RAF/ahvrih-rate-forge/plans/06-sync-readme-with-codebase.md +61 -0
- package/RAF/ahvrih-rate-forge/plans/07-no-session-persistence.md +28 -0
- package/RAF/ahvrih-rate-forge/plans/08-plan-execution-metadata.md +123 -0
- package/RAF/ahwidh-quick-fix-gremlin/decisions.md +37 -0
- package/RAF/ahwidh-quick-fix-gremlin/input.md +35 -0
- package/RAF/ahwidh-quick-fix-gremlin/outcomes/01-fix-name-generation-prompt.md +33 -0
- package/RAF/ahwidh-quick-fix-gremlin/outcomes/02-fix-amend-commit-scope.md +43 -0
- package/RAF/ahwidh-quick-fix-gremlin/outcomes/03-fix-diverged-main-branch-sync.md +32 -0
- package/RAF/ahwidh-quick-fix-gremlin/outcomes/04-wire-rate-limit-to-do-command.md +61 -0
- package/RAF/ahwidh-quick-fix-gremlin/outcomes/05-add-config-get-set-flags.md +125 -0
- package/RAF/ahwidh-quick-fix-gremlin/outcomes/06-sync-worktree-branch-before-execution.md +96 -0
- package/RAF/ahwidh-quick-fix-gremlin/outcomes/07-update-frontmatter-format.md +107 -0
- package/RAF/ahwidh-quick-fix-gremlin/outcomes/08-remove-plan-token-report.md +76 -0
- package/RAF/ahwidh-quick-fix-gremlin/plans/01-fix-name-generation-prompt.md +52 -0
- package/RAF/ahwidh-quick-fix-gremlin/plans/02-fix-amend-commit-scope.md +48 -0
- package/RAF/ahwidh-quick-fix-gremlin/plans/03-fix-diverged-main-branch-sync.md +49 -0
- package/RAF/ahwidh-quick-fix-gremlin/plans/04-wire-rate-limit-to-do-command.md +78 -0
- package/RAF/ahwidh-quick-fix-gremlin/plans/05-add-config-get-set-flags.md +101 -0
- package/RAF/ahwidh-quick-fix-gremlin/plans/06-sync-worktree-branch-before-execution.md +92 -0
- package/RAF/ahwidh-quick-fix-gremlin/plans/07-update-frontmatter-format.md +105 -0
- package/RAF/ahwidh-quick-fix-gremlin/plans/08-remove-plan-token-report.md +50 -0
- package/README.md +27 -7
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +209 -6
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/do.d.ts.map +1 -1
- package/dist/commands/do.js +140 -21
- package/dist/commands/do.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +27 -5
- package/dist/commands/plan.js.map +1 -1
- package/dist/core/claude-runner.d.ts +0 -6
- package/dist/core/claude-runner.d.ts.map +1 -1
- package/dist/core/claude-runner.js +4 -9
- package/dist/core/claude-runner.js.map +1 -1
- package/dist/core/failure-analyzer.d.ts.map +1 -1
- package/dist/core/failure-analyzer.js +3 -3
- package/dist/core/failure-analyzer.js.map +1 -1
- package/dist/core/pull-request.js +3 -3
- package/dist/core/pull-request.js.map +1 -1
- package/dist/core/state-derivation.d.ts +5 -0
- package/dist/core/state-derivation.d.ts.map +1 -1
- package/dist/core/state-derivation.js +14 -4
- package/dist/core/state-derivation.js.map +1 -1
- package/dist/core/worktree.d.ts +44 -0
- package/dist/core/worktree.d.ts.map +1 -1
- package/dist/core/worktree.js +247 -0
- package/dist/core/worktree.js.map +1 -1
- package/dist/prompts/amend.d.ts.map +1 -1
- package/dist/prompts/amend.js +28 -11
- package/dist/prompts/amend.js.map +1 -1
- package/dist/prompts/planning.d.ts.map +1 -1
- package/dist/prompts/planning.js +28 -11
- package/dist/prompts/planning.js.map +1 -1
- package/dist/types/config.d.ts +30 -13
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +14 -10
- package/dist/types/config.js.map +1 -1
- package/dist/utils/config.d.ts +47 -4
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +176 -30
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +53 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +115 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/name-generator.d.ts.map +1 -1
- package/dist/utils/name-generator.js +9 -19
- package/dist/utils/name-generator.js.map +1 -1
- package/dist/utils/session-parser.d.ts +44 -0
- package/dist/utils/session-parser.d.ts.map +1 -0
- package/dist/utils/session-parser.js +122 -0
- package/dist/utils/session-parser.js.map +1 -0
- package/dist/utils/terminal-symbols.d.ts +22 -3
- package/dist/utils/terminal-symbols.d.ts.map +1 -1
- package/dist/utils/terminal-symbols.js +52 -18
- package/dist/utils/terminal-symbols.js.map +1 -1
- package/dist/utils/token-tracker.d.ts +20 -0
- package/dist/utils/token-tracker.d.ts.map +1 -1
- package/dist/utils/token-tracker.js +57 -2
- package/dist/utils/token-tracker.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/config.ts +242 -7
- package/src/commands/do.ts +177 -23
- package/src/commands/plan.ts +27 -4
- package/src/core/claude-runner.ts +4 -16
- package/src/core/failure-analyzer.ts +3 -3
- package/src/core/pull-request.ts +3 -3
- package/src/core/state-derivation.ts +20 -4
- package/src/core/worktree.ts +266 -0
- package/src/prompts/amend.ts +28 -11
- package/src/prompts/config-docs.md +91 -29
- package/src/prompts/planning.ts +28 -11
- package/src/types/config.ts +46 -21
- package/src/utils/config.ts +200 -33
- package/src/utils/frontmatter.ts +140 -0
- package/src/utils/name-generator.ts +9 -19
- package/src/utils/terminal-symbols.ts +68 -16
- package/src/utils/token-tracker.ts +65 -2
- package/tests/unit/claude-runner-interactive.test.ts +8 -6
- package/tests/unit/claude-runner.test.ts +5 -66
- package/tests/unit/commit-planning-artifacts-worktree.test.ts +6 -14
- package/tests/unit/commit-planning-artifacts.test.ts +4 -12
- package/tests/unit/config-command.test.ts +176 -6
- package/tests/unit/config.test.ts +268 -45
- package/tests/unit/frontmatter.test.ts +276 -0
- package/tests/unit/name-generator.test.ts +1 -1
- package/tests/unit/post-execution-picker.test.ts +6 -0
- package/tests/unit/terminal-symbols.test.ts +142 -0
- package/tests/unit/token-tracker.test.ts +304 -1
- package/tests/unit/validation.test.ts +6 -4
- package/tests/unit/worktree.test.ts +309 -0
package/dist/commands/config.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Command } from 'commander';
|
|
|
6
6
|
import { ClaudeRunner } from '../core/claude-runner.js';
|
|
7
7
|
import { shutdownHandler } from '../core/shutdown-handler.js';
|
|
8
8
|
import { logger } from '../utils/logger.js';
|
|
9
|
-
import { getConfigPath, getModel,
|
|
9
|
+
import { getConfigPath, getModel, getModelShortName, validateConfig, ConfigValidationError, resetConfigCache, resolveConfig, saveConfig, } from '../utils/config.js';
|
|
10
10
|
import { DEFAULT_CONFIG } from '../types/config.js';
|
|
11
11
|
/**
|
|
12
12
|
* Load the config documentation markdown from src/prompts/config-docs.md.
|
|
@@ -98,16 +98,224 @@ async function confirm(message) {
|
|
|
98
98
|
});
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
|
+
// ---- Helper functions for nested config access ----
|
|
102
|
+
/**
|
|
103
|
+
* Get a nested value from an object using dot notation.
|
|
104
|
+
* Returns undefined if the path doesn't exist.
|
|
105
|
+
*/
|
|
106
|
+
function getNestedValue(obj, dotPath) {
|
|
107
|
+
const keys = dotPath.split('.');
|
|
108
|
+
let current = obj;
|
|
109
|
+
for (const key of keys) {
|
|
110
|
+
if (current === null || typeof current !== 'object') {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
current = current[key];
|
|
114
|
+
}
|
|
115
|
+
return current;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Set a nested value in an object using dot notation.
|
|
119
|
+
* Creates intermediate objects as needed.
|
|
120
|
+
*/
|
|
121
|
+
function setNestedValue(obj, dotPath, value) {
|
|
122
|
+
const keys = dotPath.split('.');
|
|
123
|
+
let current = obj;
|
|
124
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
125
|
+
const key = keys[i];
|
|
126
|
+
if (!(key in current) || typeof current[key] !== 'object' || current[key] === null) {
|
|
127
|
+
current[key] = {};
|
|
128
|
+
}
|
|
129
|
+
current = current[key];
|
|
130
|
+
}
|
|
131
|
+
const lastKey = keys[keys.length - 1];
|
|
132
|
+
current[lastKey] = value;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Delete a nested value from an object using dot notation.
|
|
136
|
+
* Cleans up empty parent objects after deletion.
|
|
137
|
+
*/
|
|
138
|
+
function deleteNestedValue(obj, dotPath) {
|
|
139
|
+
const keys = dotPath.split('.');
|
|
140
|
+
// Navigate to parent and delete the key
|
|
141
|
+
if (keys.length === 1) {
|
|
142
|
+
delete obj[keys[0]];
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Build path to parent
|
|
146
|
+
let current = obj;
|
|
147
|
+
const path = [];
|
|
148
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
149
|
+
const key = keys[i];
|
|
150
|
+
path.push({ obj: current, key });
|
|
151
|
+
if (typeof current[key] !== 'object' || current[key] === null) {
|
|
152
|
+
return; // Path doesn't exist
|
|
153
|
+
}
|
|
154
|
+
current = current[key];
|
|
155
|
+
}
|
|
156
|
+
// Delete the leaf value
|
|
157
|
+
const lastKey = keys[keys.length - 1];
|
|
158
|
+
delete current[lastKey];
|
|
159
|
+
// Clean up empty parents
|
|
160
|
+
for (let i = path.length - 1; i >= 0; i--) {
|
|
161
|
+
const { obj, key } = path[i];
|
|
162
|
+
const child = obj[key];
|
|
163
|
+
if (Object.keys(child).length === 0) {
|
|
164
|
+
delete obj[key];
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
break; // Stop if we find a non-empty parent
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get the default value at a dot-notation path from DEFAULT_CONFIG.
|
|
173
|
+
*/
|
|
174
|
+
function getDefaultValue(dotPath) {
|
|
175
|
+
return getNestedValue(DEFAULT_CONFIG, dotPath);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Parse a string value, attempting JSON.parse for numbers/booleans, falling back to string.
|
|
179
|
+
*/
|
|
180
|
+
function parseValue(value) {
|
|
181
|
+
// Try JSON.parse for numbers, booleans, null
|
|
182
|
+
try {
|
|
183
|
+
return JSON.parse(value);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// Fall back to string
|
|
187
|
+
return value;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Format a value for console output.
|
|
192
|
+
* Strings are printed plain, objects/arrays as JSON.
|
|
193
|
+
*/
|
|
194
|
+
function formatValue(value) {
|
|
195
|
+
if (typeof value === 'string') {
|
|
196
|
+
return value;
|
|
197
|
+
}
|
|
198
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
199
|
+
return String(value);
|
|
200
|
+
}
|
|
201
|
+
if (value === null || value === undefined) {
|
|
202
|
+
return String(value);
|
|
203
|
+
}
|
|
204
|
+
return JSON.stringify(value, null, 2);
|
|
205
|
+
}
|
|
206
|
+
// ---- Config get/set handlers ----
|
|
207
|
+
/**
|
|
208
|
+
* Handle --get flag: print config value(s).
|
|
209
|
+
*/
|
|
210
|
+
function handleGet(key) {
|
|
211
|
+
const config = resolveConfig();
|
|
212
|
+
if (key === true) {
|
|
213
|
+
// No key specified: print full config
|
|
214
|
+
console.log(JSON.stringify(config, null, 2));
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
// Specific key requested
|
|
218
|
+
const value = getNestedValue(config, key);
|
|
219
|
+
if (value === undefined) {
|
|
220
|
+
logger.error(`Config key not found: ${key}`);
|
|
221
|
+
process.exit(1);
|
|
222
|
+
}
|
|
223
|
+
console.log(formatValue(value));
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Handle --set flag: update config file with a new value.
|
|
227
|
+
*/
|
|
228
|
+
function handleSet(args) {
|
|
229
|
+
if (args.length !== 2) {
|
|
230
|
+
logger.error('--set requires exactly 2 arguments: key and value');
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
233
|
+
const [key, rawValue] = args;
|
|
234
|
+
const value = parseValue(rawValue);
|
|
235
|
+
const configPath = getConfigPath();
|
|
236
|
+
// Read current user config (or start with empty)
|
|
237
|
+
let userConfig = {};
|
|
238
|
+
if (fs.existsSync(configPath)) {
|
|
239
|
+
try {
|
|
240
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
241
|
+
userConfig = JSON.parse(content);
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
logger.error(`Failed to read config file: ${error}`);
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Check if value matches default
|
|
249
|
+
const defaultValue = getDefaultValue(key);
|
|
250
|
+
if (defaultValue === undefined) {
|
|
251
|
+
logger.error(`Config key not found in schema: ${key}`);
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
// Deep equality check for objects
|
|
255
|
+
const valuesMatch = JSON.stringify(value) === JSON.stringify(defaultValue);
|
|
256
|
+
if (valuesMatch) {
|
|
257
|
+
// Remove from config file (keep config minimal)
|
|
258
|
+
deleteNestedValue(userConfig, key);
|
|
259
|
+
logger.info(`Value matches default, removing ${key} from config`);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
// Set the value
|
|
263
|
+
setNestedValue(userConfig, key, value);
|
|
264
|
+
logger.info(`Set ${key} = ${formatValue(value)}`);
|
|
265
|
+
}
|
|
266
|
+
// Validate the resulting config
|
|
267
|
+
try {
|
|
268
|
+
validateConfig(userConfig);
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
if (error instanceof ConfigValidationError) {
|
|
272
|
+
logger.error(`Validation error: ${error.message}`);
|
|
273
|
+
process.exit(1);
|
|
274
|
+
}
|
|
275
|
+
throw error;
|
|
276
|
+
}
|
|
277
|
+
// Save or delete config file
|
|
278
|
+
if (Object.keys(userConfig).length === 0) {
|
|
279
|
+
// Config is empty, delete the file
|
|
280
|
+
if (fs.existsSync(configPath)) {
|
|
281
|
+
fs.unlinkSync(configPath);
|
|
282
|
+
logger.info('Config is empty, removed file');
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
saveConfig(configPath, userConfig);
|
|
287
|
+
logger.success('Config updated successfully');
|
|
288
|
+
}
|
|
289
|
+
}
|
|
101
290
|
export function createConfigCommand() {
|
|
102
291
|
const command = new Command('config')
|
|
103
292
|
.description('View and edit RAF configuration with Claude')
|
|
104
293
|
.argument('[prompt...]', 'Optional initial prompt for the config session')
|
|
105
294
|
.option('--reset', 'Delete config file and restore all defaults')
|
|
295
|
+
.option('--get [key]', 'Show config value (all config if no key, or specific dot-notation key)')
|
|
296
|
+
.option('--set <items...>', 'Set a config value using dot-notation key and value')
|
|
106
297
|
.action(async (promptParts, options) => {
|
|
298
|
+
// --reset takes precedence
|
|
107
299
|
if (options.reset) {
|
|
108
300
|
await handleReset();
|
|
109
301
|
return;
|
|
110
302
|
}
|
|
303
|
+
// --get and --set are mutually exclusive
|
|
304
|
+
if (options.get !== undefined && options.set !== undefined) {
|
|
305
|
+
logger.error('Cannot use --get and --set together');
|
|
306
|
+
process.exit(1);
|
|
307
|
+
}
|
|
308
|
+
// Handle --get
|
|
309
|
+
if (options.get !== undefined) {
|
|
310
|
+
handleGet(options.get);
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
// Handle --set
|
|
314
|
+
if (options.set !== undefined) {
|
|
315
|
+
handleSet(options.set);
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
// Default: run interactive session
|
|
111
319
|
const initialPrompt = promptParts.length > 0 ? promptParts.join(' ') : undefined;
|
|
112
320
|
await runConfigSession(initialPrompt);
|
|
113
321
|
});
|
|
@@ -132,17 +340,14 @@ async function runConfigSession(initialPrompt) {
|
|
|
132
340
|
// Try to load config, but fall back to defaults if it's broken
|
|
133
341
|
// This allows raf config to be used to fix a broken config file
|
|
134
342
|
let model;
|
|
135
|
-
let effort;
|
|
136
343
|
let configError = null;
|
|
137
344
|
try {
|
|
138
345
|
model = getModel('config');
|
|
139
|
-
effort = getEffort('config');
|
|
140
346
|
}
|
|
141
347
|
catch (error) {
|
|
142
348
|
// Config file has errors - fall back to defaults so the session can launch
|
|
143
349
|
configError = error instanceof Error ? error : new Error(String(error));
|
|
144
350
|
model = DEFAULT_CONFIG.models.config;
|
|
145
|
-
effort = DEFAULT_CONFIG.effort.config;
|
|
146
351
|
// Clear the cached config so subsequent calls don't use the broken cache
|
|
147
352
|
resetConfigCache();
|
|
148
353
|
}
|
|
@@ -152,8 +357,6 @@ async function runConfigSession(initialPrompt) {
|
|
|
152
357
|
logger.warn('Fix the config in this session or run `raf config --reset` to start fresh.');
|
|
153
358
|
logger.newline();
|
|
154
359
|
}
|
|
155
|
-
// Set effort level env var for the Claude session
|
|
156
|
-
process.env['CLAUDE_CODE_EFFORT_LEVEL'] = effort;
|
|
157
360
|
// Load config docs
|
|
158
361
|
let configDocs;
|
|
159
362
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"do.d.ts","sourceRoot":"","sources":["../../src/commands/do.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"do.d.ts","sourceRoot":"","sources":["../../src/commands/do.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2DpC;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC;AAsE3D;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC1D,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,GACf,MAAM,CAkBR;AA0BD,wBAAgB,eAAe,IAAI,OAAO,CAiBzC;AA+TD;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuBhG"}
|
package/dist/commands/do.js
CHANGED
|
@@ -12,7 +12,8 @@ import { validatePlansExist, resolveModelOption } from '../utils/validation.js';
|
|
|
12
12
|
import { getRafDir, extractProjectNumber, extractProjectName, extractTaskNameFromPlanFile, resolveProjectIdentifierWithDetails, getOutcomeFilePath, parseProjectPrefix } from '../utils/paths.js';
|
|
13
13
|
import { pickPendingProject, getPendingProjects, getPendingWorktreeProjects } from '../ui/project-picker.js';
|
|
14
14
|
import { logger } from '../utils/logger.js';
|
|
15
|
-
import { getConfig,
|
|
15
|
+
import { getConfig, getWorktreeDefault, getModel, getModelShortName, resolveFullModelId, getSyncMainBranch, resolveEffortToModel, applyModelCeiling, getShowRateLimitEstimate, getShowCacheTokens } from '../utils/config.js';
|
|
16
|
+
import { getVersion } from '../utils/version.js';
|
|
16
17
|
import { createTaskTimer, formatElapsedTime } from '../utils/timer.js';
|
|
17
18
|
import { createStatusLine } from '../utils/status-line.js';
|
|
18
19
|
import { formatProjectHeader, formatSummary, formatTaskProgress, formatTaskTokenSummary, formatTokenTotalSummary, } from '../utils/terminal-symbols.js';
|
|
@@ -20,8 +21,53 @@ import { TokenTracker } from '../utils/token-tracker.js';
|
|
|
20
21
|
import { VerboseToggle } from '../utils/verbose-toggle.js';
|
|
21
22
|
import { deriveProjectState, discoverProjects, getNextExecutableTask, getDerivedStats, getDerivedStatsForTasks, isProjectComplete, hasProjectFailed, parseOutcomeStatus, } from '../core/state-derivation.js';
|
|
22
23
|
import { analyzeFailure } from '../core/failure-analyzer.js';
|
|
23
|
-
import { getRepoRoot, getRepoBasename, getCurrentBranch, computeWorktreePath, computeWorktreeBaseDir, validateWorktree, listWorktreeProjects, mergeWorktreeBranch, removeWorktree, resolveWorktreeProjectByIdentifier, } from '../core/worktree.js';
|
|
24
|
+
import { getRepoRoot, getRepoBasename, getCurrentBranch, computeWorktreePath, computeWorktreeBaseDir, validateWorktree, listWorktreeProjects, mergeWorktreeBranch, removeWorktree, resolveWorktreeProjectByIdentifier, pushMainBranch, pullMainBranch, detectMainBranch, rebaseOntoMain, } from '../core/worktree.js';
|
|
24
25
|
import { createPullRequest, prPreflight } from '../core/pull-request.js';
|
|
26
|
+
/**
|
|
27
|
+
* Resolve the execution model for a task from its frontmatter metadata.
|
|
28
|
+
*
|
|
29
|
+
* Resolution order:
|
|
30
|
+
* 1. Explicit `model` in frontmatter (subject to ceiling)
|
|
31
|
+
* 2. `effort` in frontmatter resolved via effortMapping (subject to ceiling)
|
|
32
|
+
* 3. Fallback to models.execute (the ceiling, with a warning)
|
|
33
|
+
*
|
|
34
|
+
* @param frontmatter - Parsed frontmatter from the plan file
|
|
35
|
+
* @param frontmatterWarnings - Warnings from frontmatter parsing
|
|
36
|
+
* @param ceilingModel - The ceiling model (usually models.execute from config)
|
|
37
|
+
* @param isRetry - Whether this is a retry attempt (escalates to ceiling)
|
|
38
|
+
*/
|
|
39
|
+
function resolveTaskModel(frontmatter, frontmatterWarnings, ceilingModel, isRetry) {
|
|
40
|
+
const warnings = frontmatterWarnings ? [...frontmatterWarnings] : [];
|
|
41
|
+
// Retry escalation: always use the ceiling model on retry
|
|
42
|
+
if (isRetry) {
|
|
43
|
+
return { model: ceilingModel, missingFrontmatter: false, warnings };
|
|
44
|
+
}
|
|
45
|
+
// No frontmatter - fallback to ceiling with warning
|
|
46
|
+
if (!frontmatter) {
|
|
47
|
+
return {
|
|
48
|
+
model: ceilingModel,
|
|
49
|
+
missingFrontmatter: true,
|
|
50
|
+
warnings,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// Explicit model in frontmatter - apply ceiling
|
|
54
|
+
if (frontmatter.model) {
|
|
55
|
+
const model = applyModelCeiling(frontmatter.model, ceilingModel);
|
|
56
|
+
return { model, missingFrontmatter: false, warnings };
|
|
57
|
+
}
|
|
58
|
+
// Effort-based resolution - apply ceiling
|
|
59
|
+
if (frontmatter.effort) {
|
|
60
|
+
const mappedModel = resolveEffortToModel(frontmatter.effort);
|
|
61
|
+
const model = applyModelCeiling(mappedModel, ceilingModel);
|
|
62
|
+
return { model, missingFrontmatter: false, warnings };
|
|
63
|
+
}
|
|
64
|
+
// Frontmatter present but no effort or model - fallback to ceiling with warning
|
|
65
|
+
return {
|
|
66
|
+
model: ceilingModel,
|
|
67
|
+
missingFrontmatter: true,
|
|
68
|
+
warnings,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
25
71
|
/**
|
|
26
72
|
* Format failure history for console output.
|
|
27
73
|
* Shows attempts that failed before eventual success or final failure.
|
|
@@ -75,6 +121,7 @@ async function runDoCommand(projectIdentifierArg, options) {
|
|
|
75
121
|
// Variables for worktree context (set when --worktree is used)
|
|
76
122
|
let worktreeRoot;
|
|
77
123
|
let originalBranch;
|
|
124
|
+
let mainBranchName = null;
|
|
78
125
|
if (worktreeMode) {
|
|
79
126
|
// Validate git repo
|
|
80
127
|
const repoRoot = getRepoRoot();
|
|
@@ -86,6 +133,19 @@ async function runDoCommand(projectIdentifierArg, options) {
|
|
|
86
133
|
const rafRelativePath = path.relative(repoRoot, rafDir);
|
|
87
134
|
// Record original branch before any worktree operations
|
|
88
135
|
originalBranch = getCurrentBranch() ?? undefined;
|
|
136
|
+
// Sync main branch before worktree operations (if enabled)
|
|
137
|
+
if (getSyncMainBranch()) {
|
|
138
|
+
const syncResult = pullMainBranch();
|
|
139
|
+
mainBranchName = syncResult.mainBranch;
|
|
140
|
+
if (syncResult.success) {
|
|
141
|
+
if (syncResult.hadChanges) {
|
|
142
|
+
logger.info(`Synced ${syncResult.mainBranch} from remote`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
logger.warn(`Could not sync main branch: ${syncResult.error}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
89
149
|
if (!projectIdentifier) {
|
|
90
150
|
// Auto-discovery flow
|
|
91
151
|
const selected = await discoverAndPickWorktreeProject(repoBasename, rafDir, rafRelativePath);
|
|
@@ -277,6 +337,20 @@ async function runDoCommand(projectIdentifierArg, options) {
|
|
|
277
337
|
}
|
|
278
338
|
throw error;
|
|
279
339
|
}
|
|
340
|
+
// Rebase worktree branch onto main before execution (if sync is enabled)
|
|
341
|
+
if (getSyncMainBranch()) {
|
|
342
|
+
const mainBranch = mainBranchName ?? detectMainBranch();
|
|
343
|
+
if (mainBranch) {
|
|
344
|
+
const rebaseResult = rebaseOntoMain(mainBranch, worktreeRoot);
|
|
345
|
+
if (rebaseResult.success) {
|
|
346
|
+
logger.info(`Rebased onto ${mainBranch}`);
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
logger.warn(`Could not rebase onto ${mainBranch}: ${rebaseResult.error}`);
|
|
350
|
+
logger.warn('Continuing with current branch state.');
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
280
354
|
}
|
|
281
355
|
// Execute project
|
|
282
356
|
let result;
|
|
@@ -288,7 +362,6 @@ async function runDoCommand(projectIdentifierArg, options) {
|
|
|
288
362
|
force,
|
|
289
363
|
maxRetries,
|
|
290
364
|
autoCommit,
|
|
291
|
-
showModel: true,
|
|
292
365
|
model,
|
|
293
366
|
worktreeCwd: worktreeRoot,
|
|
294
367
|
});
|
|
@@ -378,6 +451,18 @@ async function executePostAction(action, worktreeRoot, worktreeBranch, originalB
|
|
|
378
451
|
}
|
|
379
452
|
case 'pr': {
|
|
380
453
|
logger.newline();
|
|
454
|
+
// Push main branch to remote before PR creation (if enabled)
|
|
455
|
+
if (getSyncMainBranch()) {
|
|
456
|
+
const syncResult = pushMainBranch();
|
|
457
|
+
if (syncResult.success) {
|
|
458
|
+
if (syncResult.hadChanges) {
|
|
459
|
+
logger.info(`Pushed ${syncResult.mainBranch} to remote`);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
logger.warn(`Could not push main branch: ${syncResult.error}`);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
381
466
|
logger.info(`Creating PR for branch "${worktreeBranch}"...`);
|
|
382
467
|
const prResult = await createPullRequest(worktreeBranch, projectPath, { cwd: worktreeRoot });
|
|
383
468
|
if (prResult.success) {
|
|
@@ -506,7 +591,7 @@ async function discoverAndPickWorktreeProject(repoBasename, rafDir, rafRelativeP
|
|
|
506
591
|
}
|
|
507
592
|
}
|
|
508
593
|
async function executeSingleProject(projectPath, projectName, options) {
|
|
509
|
-
const { timeout, verbose, debug, force, maxRetries, autoCommit,
|
|
594
|
+
const { timeout, verbose, debug, force, maxRetries, autoCommit, model, worktreeCwd } = options;
|
|
510
595
|
if (!validatePlansExist(projectPath)) {
|
|
511
596
|
return {
|
|
512
597
|
projectName,
|
|
@@ -540,11 +625,11 @@ async function executeSingleProject(projectPath, projectName, options) {
|
|
|
540
625
|
const sessionTaskIds = new Set(force
|
|
541
626
|
? state.tasks.map((t) => t.id)
|
|
542
627
|
: state.tasks.filter((t) => t.status !== 'completed').map((t) => t.id));
|
|
543
|
-
// Set up shutdown handler
|
|
544
|
-
const claudeRunner = new ClaudeRunner({ model });
|
|
628
|
+
// Set up shutdown handler - we'll register runners dynamically per-task
|
|
545
629
|
const projectManager = new ProjectManager();
|
|
546
630
|
shutdownHandler.init();
|
|
547
|
-
|
|
631
|
+
// The ceiling model for all tasks (can be overridden per-task, subject to this ceiling)
|
|
632
|
+
const ceilingModel = model;
|
|
548
633
|
// Initialize token tracker for usage reporting
|
|
549
634
|
const tokenTracker = new TokenTracker();
|
|
550
635
|
// Set up runtime verbose toggle (Tab key to toggle during execution)
|
|
@@ -552,13 +637,12 @@ async function executeSingleProject(projectPath, projectName, options) {
|
|
|
552
637
|
shutdownHandler.onShutdown(() => verboseToggle.stop());
|
|
553
638
|
// Start project timer
|
|
554
639
|
const projectStartTime = Date.now();
|
|
640
|
+
// Resolve and display version + ceiling model info (before any tasks run)
|
|
641
|
+
const fullCeilingModelId = resolveFullModelId(ceilingModel);
|
|
642
|
+
logger.dim(`RAF v${getVersion()} | Ceiling: ${fullCeilingModelId}`);
|
|
555
643
|
if (verbose) {
|
|
556
644
|
logger.info(`Executing project: ${projectName}`);
|
|
557
645
|
logger.info(`Tasks: ${state.tasks.length}, Task timeout: ${timeout} minutes`);
|
|
558
|
-
// Log Claude model name
|
|
559
|
-
if (showModel && model) {
|
|
560
|
-
logger.info(`Using model: ${model}`);
|
|
561
|
-
}
|
|
562
646
|
logger.newline();
|
|
563
647
|
}
|
|
564
648
|
else {
|
|
@@ -726,14 +810,36 @@ async function executeSingleProject(projectPath, projectName, options) {
|
|
|
726
810
|
statusLine.update(formatTaskProgress(taskNumber, totalTasks, 'running', displayName, elapsed, taskId));
|
|
727
811
|
});
|
|
728
812
|
timer.start();
|
|
813
|
+
// Log frontmatter warnings once before the retry loop
|
|
814
|
+
if (task.frontmatterWarnings && task.frontmatterWarnings.length > 0) {
|
|
815
|
+
for (const warning of task.frontmatterWarnings) {
|
|
816
|
+
logger.warn(` Frontmatter warning: ${warning}`);
|
|
817
|
+
}
|
|
818
|
+
}
|
|
729
819
|
while (!success && attempts < maxRetries) {
|
|
730
820
|
attempts++;
|
|
731
|
-
|
|
732
|
-
|
|
821
|
+
const isRetry = attempts > 1;
|
|
822
|
+
// Resolve the model for this attempt (escalates to ceiling on retry)
|
|
823
|
+
const modelResolution = resolveTaskModel(task.frontmatter, undefined, // warnings already logged above
|
|
824
|
+
ceilingModel, isRetry);
|
|
825
|
+
// Log missing frontmatter warning on first attempt only
|
|
826
|
+
if (!isRetry && modelResolution.missingFrontmatter) {
|
|
827
|
+
logger.warn(` No effort frontmatter found — using ceiling model`);
|
|
828
|
+
}
|
|
829
|
+
// Create a runner for this attempt's model
|
|
830
|
+
const taskRunner = new ClaudeRunner({ model: modelResolution.model });
|
|
831
|
+
shutdownHandler.registerClaudeRunner(taskRunner);
|
|
832
|
+
if (verbose && isRetry) {
|
|
833
|
+
const retryModel = resolveFullModelId(modelResolution.model);
|
|
834
|
+
logger.info(` Retry ${attempts}/${maxRetries} for task ${taskLabel} (model: ${retryModel})...`);
|
|
835
|
+
}
|
|
836
|
+
else if (verbose && !isRetry) {
|
|
837
|
+
const taskModel = resolveFullModelId(modelResolution.model);
|
|
838
|
+
logger.info(` Model: ${taskModel}`);
|
|
733
839
|
}
|
|
734
840
|
// Build execution prompt (inside loop to include retry context on retries)
|
|
735
841
|
// Check if previous outcome file exists for retry context
|
|
736
|
-
const previousOutcomeFileForRetry =
|
|
842
|
+
const previousOutcomeFileForRetry = isRetry && fs.existsSync(outcomeFilePath)
|
|
737
843
|
? outcomeFilePath
|
|
738
844
|
: undefined;
|
|
739
845
|
const prompt = getExecutionPrompt({
|
|
@@ -759,18 +865,16 @@ async function executeSingleProject(projectPath, projectName, options) {
|
|
|
759
865
|
outcomeFilePath,
|
|
760
866
|
} : undefined;
|
|
761
867
|
// Run Claude (use worktree root as cwd if in worktree mode)
|
|
762
|
-
const executeEffort = getEffort('execute');
|
|
763
868
|
const runnerOptions = {
|
|
764
869
|
timeout,
|
|
765
870
|
outcomeFilePath,
|
|
766
871
|
commitContext,
|
|
767
872
|
cwd: worktreeCwd,
|
|
768
|
-
effortLevel: executeEffort,
|
|
769
873
|
verboseCheck: () => verboseToggle.isVerbose,
|
|
770
874
|
};
|
|
771
875
|
const result = verbose
|
|
772
|
-
? await
|
|
773
|
-
: await
|
|
876
|
+
? await taskRunner.runVerbose(prompt, runnerOptions)
|
|
877
|
+
: await taskRunner.run(prompt, runnerOptions);
|
|
774
878
|
lastOutput = result.output;
|
|
775
879
|
if (result.usageData) {
|
|
776
880
|
attemptUsageData.push(result.usageData);
|
|
@@ -888,7 +992,12 @@ Task completed. No detailed report provided.
|
|
|
888
992
|
// Track and display token usage for this task
|
|
889
993
|
if (attemptUsageData.length > 0) {
|
|
890
994
|
const entry = tokenTracker.addTask(task.id, attemptUsageData);
|
|
891
|
-
|
|
995
|
+
const taskRateLimitPct = tokenTracker.getCumulativeRateLimitPercentage();
|
|
996
|
+
logger.dim(formatTaskTokenSummary(entry, (u) => tokenTracker.calculateCost(u), {
|
|
997
|
+
showCacheTokens: getShowCacheTokens(),
|
|
998
|
+
showRateLimitEstimate: getShowRateLimitEstimate(),
|
|
999
|
+
rateLimitPercentage: taskRateLimitPct,
|
|
1000
|
+
}));
|
|
892
1001
|
}
|
|
893
1002
|
completedInSession.add(task.id);
|
|
894
1003
|
}
|
|
@@ -915,7 +1024,12 @@ Task completed. No detailed report provided.
|
|
|
915
1024
|
// Track token usage even for failed tasks (partial data still useful for totals)
|
|
916
1025
|
if (attemptUsageData.length > 0) {
|
|
917
1026
|
const entry = tokenTracker.addTask(task.id, attemptUsageData);
|
|
918
|
-
|
|
1027
|
+
const taskRateLimitPct = tokenTracker.getCumulativeRateLimitPercentage();
|
|
1028
|
+
logger.dim(formatTaskTokenSummary(entry, (u) => tokenTracker.calculateCost(u), {
|
|
1029
|
+
showCacheTokens: getShowCacheTokens(),
|
|
1030
|
+
showRateLimitEstimate: getShowRateLimitEstimate(),
|
|
1031
|
+
rateLimitPercentage: taskRateLimitPct,
|
|
1032
|
+
}));
|
|
919
1033
|
}
|
|
920
1034
|
// Analyze failure and generate structured report
|
|
921
1035
|
const analysisReport = await analyzeFailure(lastOutput, failureReason, task.id);
|
|
@@ -1003,7 +1117,12 @@ ${stashName ? `- Stash: ${stashName}` : ''}
|
|
|
1003
1117
|
if (trackerEntries.length > 0) {
|
|
1004
1118
|
logger.newline();
|
|
1005
1119
|
const totals = tokenTracker.getTotals();
|
|
1006
|
-
|
|
1120
|
+
const totalRateLimitPct = tokenTracker.getCumulativeRateLimitPercentage();
|
|
1121
|
+
logger.dim(formatTokenTotalSummary(totals.usage, totals.cost, {
|
|
1122
|
+
showCacheTokens: getShowCacheTokens(),
|
|
1123
|
+
showRateLimitEstimate: getShowRateLimitEstimate(),
|
|
1124
|
+
rateLimitPercentage: totalRateLimitPct,
|
|
1125
|
+
}));
|
|
1007
1126
|
}
|
|
1008
1127
|
// Show retry history for tasks that had failures (even if eventually successful)
|
|
1009
1128
|
if (projectRetryHistory.length > 0) {
|