rafcode 2.2.0 → 2.4.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.md +19 -4
- package/RAF/ahtahs-token-reaper/decisions.md +37 -0
- package/RAF/ahtahs-token-reaper/input.md +20 -0
- package/RAF/ahtahs-token-reaper/outcomes/01-extend-token-tracker-data-model.md +42 -0
- package/RAF/ahtahs-token-reaper/outcomes/02-accumulate-usage-in-retry-loop.md +31 -0
- package/RAF/ahtahs-token-reaper/outcomes/03-per-attempt-display-formatting.md +60 -0
- package/RAF/ahtahs-token-reaper/outcomes/04-add-model-name-to-claude-call-logs.md +57 -0
- package/RAF/ahtahs-token-reaper/outcomes/05-handle-invalid-config-in-raf-config.md +46 -0
- package/RAF/ahtahs-token-reaper/outcomes/06-fix-verbose-toggle-timer-display.md +38 -0
- package/RAF/ahtahs-token-reaper/plans/01-extend-token-tracker-data-model.md +36 -0
- package/RAF/ahtahs-token-reaper/plans/02-accumulate-usage-in-retry-loop.md +36 -0
- package/RAF/ahtahs-token-reaper/plans/03-per-attempt-display-formatting.md +43 -0
- package/RAF/ahtahs-token-reaper/plans/04-add-model-name-to-claude-call-logs.md +38 -0
- package/RAF/ahtahs-token-reaper/plans/05-handle-invalid-config-in-raf-config.md +36 -0
- package/RAF/ahtahs-token-reaper/plans/06-fix-verbose-toggle-timer-display.md +40 -0
- 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/README.md +27 -7
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +24 -7
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/do.d.ts.map +1 -1
- package/dist/commands/do.js +122 -27
- package/dist/commands/do.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +79 -3
- package/dist/commands/plan.js.map +1 -1
- package/dist/core/claude-runner.d.ts +6 -6
- package/dist/core/claude-runner.d.ts.map +1 -1
- package/dist/core/claude-runner.js +9 -10
- 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.d.ts.map +1 -1
- package/dist/core/pull-request.js +5 -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 +32 -0
- package/dist/core/worktree.d.ts.map +1 -1
- package/dist/core/worktree.js +215 -0
- package/dist/core/worktree.js.map +1 -1
- package/dist/prompts/amend.d.ts.map +1 -1
- package/dist/prompts/amend.js +26 -11
- package/dist/prompts/amend.js.map +1 -1
- package/dist/prompts/planning.d.ts.map +1 -1
- package/dist/prompts/planning.js +26 -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 +53 -4
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +197 -30
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +43 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +85 -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 +2 -3
- 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 +28 -5
- package/dist/utils/terminal-symbols.d.ts.map +1 -1
- package/dist/utils/terminal-symbols.js +77 -18
- package/dist/utils/terminal-symbols.js.map +1 -1
- package/dist/utils/token-tracker.d.ts +31 -1
- package/dist/utils/token-tracker.d.ts.map +1 -1
- package/dist/utils/token-tracker.js +94 -4
- package/dist/utils/token-tracker.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/config.ts +26 -7
- package/src/commands/do.ts +157 -29
- package/src/commands/plan.ts +89 -2
- package/src/core/claude-runner.ts +16 -17
- package/src/core/failure-analyzer.ts +3 -3
- package/src/core/pull-request.ts +5 -3
- package/src/core/state-derivation.ts +20 -4
- package/src/core/worktree.ts +230 -0
- package/src/prompts/amend.ts +26 -11
- package/src/prompts/config-docs.md +91 -29
- package/src/prompts/planning.ts +26 -11
- package/src/types/config.ts +46 -21
- package/src/utils/config.ts +222 -33
- package/src/utils/frontmatter.ts +110 -0
- package/src/utils/name-generator.ts +2 -3
- package/src/utils/session-parser.ts +161 -0
- package/src/utils/terminal-symbols.ts +105 -18
- package/src/utils/token-tracker.ts +109 -4
- package/tests/unit/claude-runner-interactive.test.ts +8 -6
- package/tests/unit/claude-runner.test.ts +5 -66
- package/tests/unit/config-command.test.ts +84 -5
- package/tests/unit/config.test.ts +292 -45
- package/tests/unit/frontmatter.test.ts +182 -0
- package/tests/unit/post-execution-picker.test.ts +5 -0
- package/tests/unit/session-parser.test.ts +301 -0
- package/tests/unit/terminal-symbols.test.ts +263 -33
- package/tests/unit/timer-verbose-integration.test.ts +170 -0
- package/tests/unit/token-tracker.test.ts +653 -17
- package/tests/unit/validation.test.ts +6 -4
- package/tests/unit/worktree.test.ts +242 -0
package/dist/utils/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RafConfig, UserConfig, ClaudeModelName,
|
|
1
|
+
import { RafConfig, UserConfig, ClaudeModelName, TaskEffortLevel, ModelScenario, CommitFormatType, PricingCategory, ModelPricing, PricingConfig, DisplayConfig, RateLimitWindowConfig, EffortMappingConfig } from '../types/config.js';
|
|
2
2
|
export declare function getConfigPath(): string;
|
|
3
3
|
/**
|
|
4
4
|
* Get the path to Claude CLI settings file.
|
|
@@ -24,7 +24,6 @@ export declare function loadConfig(_rafDir: string): {
|
|
|
24
24
|
defaultTimeout: number;
|
|
25
25
|
defaultMaxRetries: number;
|
|
26
26
|
autoCommit: boolean;
|
|
27
|
-
claudeCommand: string;
|
|
28
27
|
};
|
|
29
28
|
export declare function saveConfig(configPath: string, config: UserConfig): void;
|
|
30
29
|
/**
|
|
@@ -34,14 +33,44 @@ export declare function saveConfig(configPath: string, config: UserConfig): void
|
|
|
34
33
|
export declare function getResolvedConfig(): RafConfig;
|
|
35
34
|
export declare function resetConfigCache(): void;
|
|
36
35
|
export declare function getModel(scenario: ModelScenario): ClaudeModelName;
|
|
37
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Get the full effort mapping config.
|
|
38
|
+
*/
|
|
39
|
+
export declare function getEffortMapping(): EffortMappingConfig;
|
|
40
|
+
/**
|
|
41
|
+
* Resolve a task effort level to a model name using the effort mapping config.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveEffortToModel(effort: TaskEffortLevel): ClaudeModelName;
|
|
44
|
+
/**
|
|
45
|
+
* Get the numeric tier of a model for comparison.
|
|
46
|
+
* Extracts family from full model IDs (e.g., 'claude-opus-4-6' -> 3).
|
|
47
|
+
* Unknown models default to highest tier (3) so they're never accidentally capped.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getModelTier(modelName: string): number;
|
|
50
|
+
/**
|
|
51
|
+
* Apply ceiling to a model based on the configured models.execute ceiling.
|
|
52
|
+
* Returns the lower-tier model between the input and the ceiling.
|
|
53
|
+
*/
|
|
54
|
+
export declare function applyModelCeiling(resolvedModel: string, ceiling?: string): string;
|
|
38
55
|
export declare function getCommitFormat(type: CommitFormatType): string;
|
|
39
56
|
export declare function getCommitPrefix(): string;
|
|
40
57
|
export declare function getTimeout(): number;
|
|
41
58
|
export declare function getMaxRetries(): number;
|
|
42
59
|
export declare function getAutoCommit(): boolean;
|
|
43
60
|
export declare function getWorktreeDefault(): boolean;
|
|
44
|
-
export declare function
|
|
61
|
+
export declare function getSyncMainBranch(): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Extract the short model alias (opus, sonnet, haiku) from a model ID.
|
|
64
|
+
* Works with both full model IDs (e.g., "claude-sonnet-4-5-20250929") and already-short names ("sonnet").
|
|
65
|
+
* Returns the original string if no known alias can be extracted.
|
|
66
|
+
*/
|
|
67
|
+
export declare function getModelShortName(modelId: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Resolve a model name to its full model ID.
|
|
70
|
+
* If already a full model ID, returns as-is.
|
|
71
|
+
* If a short alias (opus, sonnet, haiku), returns the corresponding full ID.
|
|
72
|
+
*/
|
|
73
|
+
export declare function resolveFullModelId(modelName: string): string;
|
|
45
74
|
/**
|
|
46
75
|
* Map a full model ID (e.g., `claude-opus-4-6`) or short alias to a pricing category.
|
|
47
76
|
* Returns null if the model cannot be mapped.
|
|
@@ -55,6 +84,26 @@ export declare function getPricing(category: PricingCategory): ModelPricing;
|
|
|
55
84
|
* Get the full pricing config.
|
|
56
85
|
*/
|
|
57
86
|
export declare function getPricingConfig(): PricingConfig;
|
|
87
|
+
/**
|
|
88
|
+
* Get the full display config.
|
|
89
|
+
*/
|
|
90
|
+
export declare function getDisplayConfig(): DisplayConfig;
|
|
91
|
+
/**
|
|
92
|
+
* Get the full rate limit window config.
|
|
93
|
+
*/
|
|
94
|
+
export declare function getRateLimitWindowConfig(): RateLimitWindowConfig;
|
|
95
|
+
/**
|
|
96
|
+
* Get whether to show rate limit estimate in token summaries.
|
|
97
|
+
*/
|
|
98
|
+
export declare function getShowRateLimitEstimate(): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Get whether to show cache tokens in summaries.
|
|
101
|
+
*/
|
|
102
|
+
export declare function getShowCacheTokens(): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Get the Sonnet-equivalent token cap for the 5h rate limit window.
|
|
105
|
+
*/
|
|
106
|
+
export declare function getSonnetTokenCap(): number;
|
|
58
107
|
/**
|
|
59
108
|
* Render a commit message template by replacing {placeholder} tokens with values.
|
|
60
109
|
* Unknown placeholders are left as-is.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EAGT,UAAU,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import * as os from 'node:os';
|
|
4
|
-
import { DEFAULT_CONFIG, DEFAULT_RAF_CONFIG, VALID_MODEL_ALIASES, FULL_MODEL_ID_PATTERN,
|
|
4
|
+
import { DEFAULT_CONFIG, DEFAULT_RAF_CONFIG, VALID_MODEL_ALIASES, FULL_MODEL_ID_PATTERN, } from '../types/config.js';
|
|
5
5
|
const CONFIG_DIR = path.join(os.homedir(), '.raf');
|
|
6
6
|
const CONFIG_FILENAME = 'raf.config.json';
|
|
7
7
|
export function getConfigPath() {
|
|
@@ -15,18 +15,18 @@ export function getClaudeSettingsPath() {
|
|
|
15
15
|
}
|
|
16
16
|
// ---- Validation ----
|
|
17
17
|
const VALID_TOP_LEVEL_KEYS = new Set([
|
|
18
|
-
'models', '
|
|
19
|
-
'worktree', '
|
|
18
|
+
'models', 'effortMapping', 'timeout', 'maxRetries', 'autoCommit',
|
|
19
|
+
'worktree', 'syncMainBranch', 'commitFormat', 'pricing', 'display', 'rateLimitWindow',
|
|
20
20
|
]);
|
|
21
21
|
const VALID_PRICING_CATEGORIES = new Set(['opus', 'sonnet', 'haiku']);
|
|
22
22
|
const VALID_PRICING_FIELDS = new Set(['inputPerMTok', 'outputPerMTok', 'cacheReadPerMTok', 'cacheCreatePerMTok']);
|
|
23
23
|
const VALID_MODEL_KEYS = new Set([
|
|
24
24
|
'plan', 'execute', 'nameGeneration', 'failureAnalysis', 'prGeneration', 'config',
|
|
25
25
|
]);
|
|
26
|
-
const
|
|
27
|
-
'plan', 'execute', 'nameGeneration', 'failureAnalysis', 'prGeneration', 'config',
|
|
28
|
-
]);
|
|
26
|
+
const VALID_EFFORT_MAPPING_KEYS = new Set(['low', 'medium', 'high']);
|
|
29
27
|
const VALID_COMMIT_FORMAT_KEYS = new Set(['task', 'plan', 'amend', 'prefix']);
|
|
28
|
+
const VALID_DISPLAY_KEYS = new Set(['showRateLimitEstimate', 'showCacheTokens']);
|
|
29
|
+
const VALID_RATE_LIMIT_WINDOW_KEYS = new Set(['sonnetTokenCap']);
|
|
30
30
|
export class ConfigValidationError extends Error {
|
|
31
31
|
constructor(message) {
|
|
32
32
|
super(message);
|
|
@@ -65,16 +65,16 @@ export function validateConfig(config) {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
//
|
|
69
|
-
if (obj.
|
|
70
|
-
if (typeof obj.
|
|
71
|
-
throw new ConfigValidationError('
|
|
68
|
+
// effortMapping
|
|
69
|
+
if (obj.effortMapping !== undefined) {
|
|
70
|
+
if (typeof obj.effortMapping !== 'object' || obj.effortMapping === null || Array.isArray(obj.effortMapping)) {
|
|
71
|
+
throw new ConfigValidationError('effortMapping must be an object');
|
|
72
72
|
}
|
|
73
|
-
const
|
|
74
|
-
checkUnknownKeys(
|
|
75
|
-
for (const [key, val] of Object.entries(
|
|
76
|
-
if (typeof val !== 'string' || !
|
|
77
|
-
throw new ConfigValidationError(`
|
|
73
|
+
const effortMapping = obj.effortMapping;
|
|
74
|
+
checkUnknownKeys(effortMapping, VALID_EFFORT_MAPPING_KEYS, 'effortMapping');
|
|
75
|
+
for (const [key, val] of Object.entries(effortMapping)) {
|
|
76
|
+
if (typeof val !== 'string' || !isValidModelName(val)) {
|
|
77
|
+
throw new ConfigValidationError(`effortMapping.${key} must be a short alias (${VALID_MODEL_ALIASES.join(', ')}) or a full model ID (e.g., claude-sonnet-4-5-20250929)`);
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
}
|
|
@@ -102,6 +102,12 @@ export function validateConfig(config) {
|
|
|
102
102
|
throw new ConfigValidationError('worktree must be a boolean');
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
|
+
// syncMainBranch
|
|
106
|
+
if (obj.syncMainBranch !== undefined) {
|
|
107
|
+
if (typeof obj.syncMainBranch !== 'boolean') {
|
|
108
|
+
throw new ConfigValidationError('syncMainBranch must be a boolean');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
105
111
|
// commitFormat
|
|
106
112
|
if (obj.commitFormat !== undefined) {
|
|
107
113
|
if (typeof obj.commitFormat !== 'object' || obj.commitFormat === null || Array.isArray(obj.commitFormat)) {
|
|
@@ -115,12 +121,6 @@ export function validateConfig(config) {
|
|
|
115
121
|
}
|
|
116
122
|
}
|
|
117
123
|
}
|
|
118
|
-
// claudeCommand
|
|
119
|
-
if (obj.claudeCommand !== undefined) {
|
|
120
|
-
if (typeof obj.claudeCommand !== 'string' || obj.claudeCommand.trim() === '') {
|
|
121
|
-
throw new ConfigValidationError('claudeCommand must be a non-empty string');
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
124
|
// pricing
|
|
125
125
|
if (obj.pricing !== undefined) {
|
|
126
126
|
if (typeof obj.pricing !== 'object' || obj.pricing === null || Array.isArray(obj.pricing)) {
|
|
@@ -141,6 +141,32 @@ export function validateConfig(config) {
|
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
|
+
// display
|
|
145
|
+
if (obj.display !== undefined) {
|
|
146
|
+
if (typeof obj.display !== 'object' || obj.display === null || Array.isArray(obj.display)) {
|
|
147
|
+
throw new ConfigValidationError('display must be an object');
|
|
148
|
+
}
|
|
149
|
+
const display = obj.display;
|
|
150
|
+
checkUnknownKeys(display, VALID_DISPLAY_KEYS, 'display');
|
|
151
|
+
for (const [key, val] of Object.entries(display)) {
|
|
152
|
+
if (typeof val !== 'boolean') {
|
|
153
|
+
throw new ConfigValidationError(`display.${key} must be a boolean`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// rateLimitWindow
|
|
158
|
+
if (obj.rateLimitWindow !== undefined) {
|
|
159
|
+
if (typeof obj.rateLimitWindow !== 'object' || obj.rateLimitWindow === null || Array.isArray(obj.rateLimitWindow)) {
|
|
160
|
+
throw new ConfigValidationError('rateLimitWindow must be an object');
|
|
161
|
+
}
|
|
162
|
+
const rlw = obj.rateLimitWindow;
|
|
163
|
+
checkUnknownKeys(rlw, VALID_RATE_LIMIT_WINDOW_KEYS, 'rateLimitWindow');
|
|
164
|
+
if (rlw.sonnetTokenCap !== undefined) {
|
|
165
|
+
if (typeof rlw.sonnetTokenCap !== 'number' || rlw.sonnetTokenCap <= 0 || !Number.isFinite(rlw.sonnetTokenCap)) {
|
|
166
|
+
throw new ConfigValidationError('rateLimitWindow.sonnetTokenCap must be a positive number');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
144
170
|
return config;
|
|
145
171
|
}
|
|
146
172
|
// ---- Deep merge ----
|
|
@@ -149,8 +175,8 @@ function deepMerge(defaults, overrides) {
|
|
|
149
175
|
if (overrides.models) {
|
|
150
176
|
result.models = { ...defaults.models, ...overrides.models };
|
|
151
177
|
}
|
|
152
|
-
if (overrides.
|
|
153
|
-
result.
|
|
178
|
+
if (overrides.effortMapping) {
|
|
179
|
+
result.effortMapping = { ...defaults.effortMapping, ...overrides.effortMapping };
|
|
154
180
|
}
|
|
155
181
|
if (overrides.commitFormat) {
|
|
156
182
|
result.commitFormat = { ...defaults.commitFormat, ...overrides.commitFormat };
|
|
@@ -162,6 +188,12 @@ function deepMerge(defaults, overrides) {
|
|
|
162
188
|
haiku: { ...defaults.pricing.haiku, ...overrides.pricing.haiku },
|
|
163
189
|
};
|
|
164
190
|
}
|
|
191
|
+
if (overrides.display) {
|
|
192
|
+
result.display = { ...defaults.display, ...overrides.display };
|
|
193
|
+
}
|
|
194
|
+
if (overrides.rateLimitWindow) {
|
|
195
|
+
result.rateLimitWindow = { ...defaults.rateLimitWindow, ...overrides.rateLimitWindow };
|
|
196
|
+
}
|
|
165
197
|
if (overrides.timeout !== undefined)
|
|
166
198
|
result.timeout = overrides.timeout;
|
|
167
199
|
if (overrides.maxRetries !== undefined)
|
|
@@ -170,8 +202,8 @@ function deepMerge(defaults, overrides) {
|
|
|
170
202
|
result.autoCommit = overrides.autoCommit;
|
|
171
203
|
if (overrides.worktree !== undefined)
|
|
172
204
|
result.worktree = overrides.worktree;
|
|
173
|
-
if (overrides.
|
|
174
|
-
result.
|
|
205
|
+
if (overrides.syncMainBranch !== undefined)
|
|
206
|
+
result.syncMainBranch = overrides.syncMainBranch;
|
|
175
207
|
return result;
|
|
176
208
|
}
|
|
177
209
|
// ---- Config loading ----
|
|
@@ -182,7 +214,14 @@ function deepMerge(defaults, overrides) {
|
|
|
182
214
|
export function resolveConfig(configPath) {
|
|
183
215
|
const filePath = configPath ?? getConfigPath();
|
|
184
216
|
if (!fs.existsSync(filePath)) {
|
|
185
|
-
return {
|
|
217
|
+
return {
|
|
218
|
+
...DEFAULT_CONFIG,
|
|
219
|
+
models: { ...DEFAULT_CONFIG.models },
|
|
220
|
+
effortMapping: { ...DEFAULT_CONFIG.effortMapping },
|
|
221
|
+
commitFormat: { ...DEFAULT_CONFIG.commitFormat },
|
|
222
|
+
display: { ...DEFAULT_CONFIG.display },
|
|
223
|
+
rateLimitWindow: { ...DEFAULT_CONFIG.rateLimitWindow },
|
|
224
|
+
};
|
|
186
225
|
}
|
|
187
226
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
188
227
|
const parsed = JSON.parse(content);
|
|
@@ -220,8 +259,63 @@ export function resetConfigCache() {
|
|
|
220
259
|
export function getModel(scenario) {
|
|
221
260
|
return getResolvedConfig().models[scenario];
|
|
222
261
|
}
|
|
223
|
-
|
|
224
|
-
|
|
262
|
+
/**
|
|
263
|
+
* Get the full effort mapping config.
|
|
264
|
+
*/
|
|
265
|
+
export function getEffortMapping() {
|
|
266
|
+
return getResolvedConfig().effortMapping;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Resolve a task effort level to a model name using the effort mapping config.
|
|
270
|
+
*/
|
|
271
|
+
export function resolveEffortToModel(effort) {
|
|
272
|
+
return getResolvedConfig().effortMapping[effort];
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Model tier ordering for ceiling comparison.
|
|
276
|
+
* Higher tier = more capable/expensive model.
|
|
277
|
+
* haiku (1) < sonnet (2) < opus (3)
|
|
278
|
+
*/
|
|
279
|
+
const MODEL_TIER_ORDER = {
|
|
280
|
+
haiku: 1,
|
|
281
|
+
sonnet: 2,
|
|
282
|
+
opus: 3,
|
|
283
|
+
};
|
|
284
|
+
/**
|
|
285
|
+
* Get the numeric tier of a model for comparison.
|
|
286
|
+
* Extracts family from full model IDs (e.g., 'claude-opus-4-6' -> 3).
|
|
287
|
+
* Unknown models default to highest tier (3) so they're never accidentally capped.
|
|
288
|
+
*/
|
|
289
|
+
export function getModelTier(modelName) {
|
|
290
|
+
// Check short aliases first
|
|
291
|
+
const tier = MODEL_TIER_ORDER[modelName];
|
|
292
|
+
if (tier !== undefined) {
|
|
293
|
+
return tier;
|
|
294
|
+
}
|
|
295
|
+
// Extract family from full model ID
|
|
296
|
+
const match = modelName.match(/^claude-([a-z]+)-/);
|
|
297
|
+
if (match && match[1]) {
|
|
298
|
+
const familyTier = MODEL_TIER_ORDER[match[1]];
|
|
299
|
+
if (familyTier !== undefined) {
|
|
300
|
+
return familyTier;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// Unknown model - default to highest tier (no cap)
|
|
304
|
+
return 3;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Apply ceiling to a model based on the configured models.execute ceiling.
|
|
308
|
+
* Returns the lower-tier model between the input and the ceiling.
|
|
309
|
+
*/
|
|
310
|
+
export function applyModelCeiling(resolvedModel, ceiling) {
|
|
311
|
+
const ceilingModel = ceiling ?? getModel('execute');
|
|
312
|
+
const resolvedTier = getModelTier(resolvedModel);
|
|
313
|
+
const ceilingTier = getModelTier(ceilingModel);
|
|
314
|
+
// If resolved model is above ceiling, use ceiling instead
|
|
315
|
+
if (resolvedTier > ceilingTier) {
|
|
316
|
+
return ceilingModel;
|
|
317
|
+
}
|
|
318
|
+
return resolvedModel;
|
|
225
319
|
}
|
|
226
320
|
export function getCommitFormat(type) {
|
|
227
321
|
return getResolvedConfig().commitFormat[type];
|
|
@@ -241,8 +335,51 @@ export function getAutoCommit() {
|
|
|
241
335
|
export function getWorktreeDefault() {
|
|
242
336
|
return getResolvedConfig().worktree;
|
|
243
337
|
}
|
|
244
|
-
export function
|
|
245
|
-
return getResolvedConfig().
|
|
338
|
+
export function getSyncMainBranch() {
|
|
339
|
+
return getResolvedConfig().syncMainBranch;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Extract the short model alias (opus, sonnet, haiku) from a model ID.
|
|
343
|
+
* Works with both full model IDs (e.g., "claude-sonnet-4-5-20250929") and already-short names ("sonnet").
|
|
344
|
+
* Returns the original string if no known alias can be extracted.
|
|
345
|
+
*/
|
|
346
|
+
export function getModelShortName(modelId) {
|
|
347
|
+
// Already a short alias
|
|
348
|
+
if (modelId === 'opus' || modelId === 'sonnet' || modelId === 'haiku') {
|
|
349
|
+
return modelId;
|
|
350
|
+
}
|
|
351
|
+
// Extract family from full model ID: claude-{family}-{version}
|
|
352
|
+
const match = modelId.match(/^claude-([a-z]+)-/);
|
|
353
|
+
if (match) {
|
|
354
|
+
const family = match[1];
|
|
355
|
+
if (family === 'opus' || family === 'sonnet' || family === 'haiku') {
|
|
356
|
+
return family;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// Unknown format, return as-is
|
|
360
|
+
return modelId;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Mapping of short model aliases to their current full model IDs.
|
|
364
|
+
* These should match the latest Claude model versions.
|
|
365
|
+
*/
|
|
366
|
+
const MODEL_ALIAS_TO_FULL_ID = {
|
|
367
|
+
opus: 'claude-opus-4-6',
|
|
368
|
+
sonnet: 'claude-sonnet-4-5-20250929',
|
|
369
|
+
haiku: 'claude-haiku-4-5-20251001',
|
|
370
|
+
};
|
|
371
|
+
/**
|
|
372
|
+
* Resolve a model name to its full model ID.
|
|
373
|
+
* If already a full model ID, returns as-is.
|
|
374
|
+
* If a short alias (opus, sonnet, haiku), returns the corresponding full ID.
|
|
375
|
+
*/
|
|
376
|
+
export function resolveFullModelId(modelName) {
|
|
377
|
+
const fullId = MODEL_ALIAS_TO_FULL_ID[modelName];
|
|
378
|
+
if (fullId) {
|
|
379
|
+
return fullId;
|
|
380
|
+
}
|
|
381
|
+
// Already a full ID or unknown, return as-is
|
|
382
|
+
return modelName;
|
|
246
383
|
}
|
|
247
384
|
/**
|
|
248
385
|
* Map a full model ID (e.g., `claude-opus-4-6`) or short alias to a pricing category.
|
|
@@ -275,6 +412,36 @@ export function getPricing(category) {
|
|
|
275
412
|
export function getPricingConfig() {
|
|
276
413
|
return getResolvedConfig().pricing;
|
|
277
414
|
}
|
|
415
|
+
/**
|
|
416
|
+
* Get the full display config.
|
|
417
|
+
*/
|
|
418
|
+
export function getDisplayConfig() {
|
|
419
|
+
return getResolvedConfig().display;
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Get the full rate limit window config.
|
|
423
|
+
*/
|
|
424
|
+
export function getRateLimitWindowConfig() {
|
|
425
|
+
return getResolvedConfig().rateLimitWindow;
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Get whether to show rate limit estimate in token summaries.
|
|
429
|
+
*/
|
|
430
|
+
export function getShowRateLimitEstimate() {
|
|
431
|
+
return getResolvedConfig().display.showRateLimitEstimate;
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Get whether to show cache tokens in summaries.
|
|
435
|
+
*/
|
|
436
|
+
export function getShowCacheTokens() {
|
|
437
|
+
return getResolvedConfig().display.showCacheTokens;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Get the Sonnet-equivalent token cap for the 5h rate limit window.
|
|
441
|
+
*/
|
|
442
|
+
export function getSonnetTokenCap() {
|
|
443
|
+
return getResolvedConfig().rateLimitWindow.sonnetTokenCap;
|
|
444
|
+
}
|
|
278
445
|
/**
|
|
279
446
|
* Render a commit message template by replacing {placeholder} tokens with values.
|
|
280
447
|
* Unknown placeholders are left as-is.
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { TaskEffortLevel } from '../types/config.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parsed frontmatter metadata from a plan file.
|
|
4
|
+
*/
|
|
5
|
+
export interface PlanFrontmatter {
|
|
6
|
+
/** Task complexity label (low/medium/high). Used to resolve model via effortMapping. */
|
|
7
|
+
effort?: TaskEffortLevel;
|
|
8
|
+
/** Explicit model override (bypasses effort mapping but still subject to ceiling). */
|
|
9
|
+
model?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Result of parsing frontmatter from a plan file.
|
|
13
|
+
*/
|
|
14
|
+
export interface FrontmatterParseResult {
|
|
15
|
+
/** Parsed frontmatter metadata, if any valid keys were found. */
|
|
16
|
+
frontmatter: PlanFrontmatter;
|
|
17
|
+
/** Whether valid frontmatter was found (has at least effort or model). */
|
|
18
|
+
hasFrontmatter: boolean;
|
|
19
|
+
/** Warnings about invalid/unknown frontmatter values. */
|
|
20
|
+
warnings: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parse Obsidian-style frontmatter from plan file content.
|
|
24
|
+
*
|
|
25
|
+
* Format: `key: value` lines at the top of the file, terminated by a `---` line.
|
|
26
|
+
* There is NO opening `---` delimiter — just properties followed by `---`.
|
|
27
|
+
*
|
|
28
|
+
* Example:
|
|
29
|
+
* ```
|
|
30
|
+
* effort: medium
|
|
31
|
+
* model: sonnet
|
|
32
|
+
* ---
|
|
33
|
+
* # Task: ...
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* The parser is lenient:
|
|
37
|
+
* - Ignores unknown keys (with a warning)
|
|
38
|
+
* - Handles missing `---` delimiter gracefully (returns empty frontmatter)
|
|
39
|
+
* - Invalid values produce warnings but don't throw
|
|
40
|
+
* - Case-insensitive value parsing for effort levels
|
|
41
|
+
*/
|
|
42
|
+
export declare function parsePlanFrontmatter(content: string): FrontmatterParseResult;
|
|
43
|
+
//# sourceMappingURL=frontmatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGzE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wFAAwF;IACxF,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,WAAW,EAAE,eAAe,CAAC;IAC7B,0EAA0E;IAC1E,cAAc,EAAE,OAAO,CAAC;IACxB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,CAgE5E"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { VALID_TASK_EFFORTS } from '../types/config.js';
|
|
2
|
+
import { isValidModelName } from './config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Parse Obsidian-style frontmatter from plan file content.
|
|
5
|
+
*
|
|
6
|
+
* Format: `key: value` lines at the top of the file, terminated by a `---` line.
|
|
7
|
+
* There is NO opening `---` delimiter — just properties followed by `---`.
|
|
8
|
+
*
|
|
9
|
+
* Example:
|
|
10
|
+
* ```
|
|
11
|
+
* effort: medium
|
|
12
|
+
* model: sonnet
|
|
13
|
+
* ---
|
|
14
|
+
* # Task: ...
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* The parser is lenient:
|
|
18
|
+
* - Ignores unknown keys (with a warning)
|
|
19
|
+
* - Handles missing `---` delimiter gracefully (returns empty frontmatter)
|
|
20
|
+
* - Invalid values produce warnings but don't throw
|
|
21
|
+
* - Case-insensitive value parsing for effort levels
|
|
22
|
+
*/
|
|
23
|
+
export function parsePlanFrontmatter(content) {
|
|
24
|
+
const result = {
|
|
25
|
+
frontmatter: {},
|
|
26
|
+
hasFrontmatter: false,
|
|
27
|
+
warnings: [],
|
|
28
|
+
};
|
|
29
|
+
// Find the closing `---` delimiter
|
|
30
|
+
const delimiterIndex = content.indexOf('---');
|
|
31
|
+
if (delimiterIndex === -1) {
|
|
32
|
+
// No delimiter found - no frontmatter
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
// Extract the frontmatter section (everything before the delimiter)
|
|
36
|
+
const frontmatterSection = content.substring(0, delimiterIndex);
|
|
37
|
+
// Parse key: value lines
|
|
38
|
+
const lines = frontmatterSection.split('\n');
|
|
39
|
+
for (const line of lines) {
|
|
40
|
+
const trimmed = line.trim();
|
|
41
|
+
if (!trimmed)
|
|
42
|
+
continue; // Skip empty lines
|
|
43
|
+
// Check if it looks like a markdown heading (starts with #) - even if it has a colon
|
|
44
|
+
if (trimmed.startsWith('#')) {
|
|
45
|
+
// Markdown content started before `---` - no valid frontmatter
|
|
46
|
+
return {
|
|
47
|
+
frontmatter: {},
|
|
48
|
+
hasFrontmatter: false,
|
|
49
|
+
warnings: ['Frontmatter section contains markdown content before closing delimiter'],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// Parse key: value format
|
|
53
|
+
const colonIndex = trimmed.indexOf(':');
|
|
54
|
+
if (colonIndex === -1) {
|
|
55
|
+
continue; // Skip non-property lines
|
|
56
|
+
}
|
|
57
|
+
const key = trimmed.substring(0, colonIndex).trim().toLowerCase();
|
|
58
|
+
const value = trimmed.substring(colonIndex + 1).trim();
|
|
59
|
+
if (key === 'effort') {
|
|
60
|
+
const lowerValue = value.toLowerCase();
|
|
61
|
+
if (VALID_TASK_EFFORTS.includes(lowerValue)) {
|
|
62
|
+
result.frontmatter.effort = lowerValue;
|
|
63
|
+
result.hasFrontmatter = true;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
result.warnings.push(`Invalid effort value: "${value}". Must be one of: ${VALID_TASK_EFFORTS.join(', ')}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (key === 'model') {
|
|
70
|
+
if (isValidModelName(value)) {
|
|
71
|
+
result.frontmatter.model = value;
|
|
72
|
+
result.hasFrontmatter = true;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
result.warnings.push(`Invalid model value: "${value}". Must be a short alias (sonnet, haiku, opus) or a full model ID.`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Unknown key - ignore with warning
|
|
80
|
+
result.warnings.push(`Unknown frontmatter key: "${key}"`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=frontmatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAmB,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAwB/C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,MAAM,GAA2B;QACrC,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,mCAAmC;IACnC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1B,sCAAsC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oEAAoE;IACpE,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAEhE,yBAAyB;IACzB,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS,CAAC,mBAAmB;QAE3C,qFAAqF;QACrF,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,+DAA+D;YAC/D,OAAO;gBACL,WAAW,EAAE,EAAE;gBACf,cAAc,EAAE,KAAK;gBACrB,QAAQ,EAAE,CAAC,wEAAwE,CAAC;aACrF,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,SAAS,CAAC,0BAA0B;QACtC,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClE,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEvD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,IAAK,kBAAwC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,UAA6B,CAAC;gBAC1D,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,KAAK,sBAAsB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7G,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;gBACjC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,KAAK,oEAAoE,CAAC,CAAC;YAC3H,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,6BAA6B,GAAG,GAAG,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"name-generator.d.ts","sourceRoot":"","sources":["../../src/utils/name-generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"name-generator.d.ts","sourceRoot":"","sources":["../../src/utils/name-generator.ts"],"names":[],"mappings":"AA4FA;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB9E;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAejF;AAwCD;;GAEG;AACH,iBAAS,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyB1D;AAqBD,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
import { logger } from './logger.js';
|
|
3
3
|
import { sanitizeProjectName } from './validation.js';
|
|
4
|
-
import { getModel
|
|
4
|
+
import { getModel } from './config.js';
|
|
5
5
|
const NAME_GENERATION_PROMPT = `Generate a short, punchy, creative project name (1-3 words, kebab-case).
|
|
6
6
|
|
|
7
7
|
Be creative! Use metaphors, analogies, or evocative words that capture the SPIRIT of the project.
|
|
@@ -42,8 +42,7 @@ Project description:`;
|
|
|
42
42
|
function runClaudePrint(prompt) {
|
|
43
43
|
return new Promise((resolve) => {
|
|
44
44
|
const model = getModel('nameGeneration');
|
|
45
|
-
const
|
|
46
|
-
const proc = spawn(cmd, [
|
|
45
|
+
const proc = spawn('claude', [
|
|
47
46
|
'--model', model,
|
|
48
47
|
'--no-session-persistence',
|
|
49
48
|
'-p',
|