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.
Files changed (125) hide show
  1. package/CLAUDE.md +19 -4
  2. package/RAF/ahtahs-token-reaper/decisions.md +37 -0
  3. package/RAF/ahtahs-token-reaper/input.md +20 -0
  4. package/RAF/ahtahs-token-reaper/outcomes/01-extend-token-tracker-data-model.md +42 -0
  5. package/RAF/ahtahs-token-reaper/outcomes/02-accumulate-usage-in-retry-loop.md +31 -0
  6. package/RAF/ahtahs-token-reaper/outcomes/03-per-attempt-display-formatting.md +60 -0
  7. package/RAF/ahtahs-token-reaper/outcomes/04-add-model-name-to-claude-call-logs.md +57 -0
  8. package/RAF/ahtahs-token-reaper/outcomes/05-handle-invalid-config-in-raf-config.md +46 -0
  9. package/RAF/ahtahs-token-reaper/outcomes/06-fix-verbose-toggle-timer-display.md +38 -0
  10. package/RAF/ahtahs-token-reaper/plans/01-extend-token-tracker-data-model.md +36 -0
  11. package/RAF/ahtahs-token-reaper/plans/02-accumulate-usage-in-retry-loop.md +36 -0
  12. package/RAF/ahtahs-token-reaper/plans/03-per-attempt-display-formatting.md +43 -0
  13. package/RAF/ahtahs-token-reaper/plans/04-add-model-name-to-claude-call-logs.md +38 -0
  14. package/RAF/ahtahs-token-reaper/plans/05-handle-invalid-config-in-raf-config.md +36 -0
  15. package/RAF/ahtahs-token-reaper/plans/06-fix-verbose-toggle-timer-display.md +40 -0
  16. package/RAF/ahvrih-rate-forge/decisions.md +70 -0
  17. package/RAF/ahvrih-rate-forge/input.md +44 -0
  18. package/RAF/ahvrih-rate-forge/outcomes/01-remove-claude-command-config.md +58 -0
  19. package/RAF/ahvrih-rate-forge/outcomes/02-fix-mixed-attempt-cost.md +46 -0
  20. package/RAF/ahvrih-rate-forge/outcomes/03-rate-limit-estimation.md +82 -0
  21. package/RAF/ahvrih-rate-forge/outcomes/04-show-version-in-do-logs.md +45 -0
  22. package/RAF/ahvrih-rate-forge/outcomes/05-sync-main-before-worktree.md +96 -0
  23. package/RAF/ahvrih-rate-forge/outcomes/06-sync-readme-with-codebase.md +45 -0
  24. package/RAF/ahvrih-rate-forge/outcomes/07-no-session-persistence.md +26 -0
  25. package/RAF/ahvrih-rate-forge/outcomes/08-plan-execution-metadata.md +130 -0
  26. package/RAF/ahvrih-rate-forge/plans/01-remove-claude-command-config.md +36 -0
  27. package/RAF/ahvrih-rate-forge/plans/02-fix-mixed-attempt-cost.md +33 -0
  28. package/RAF/ahvrih-rate-forge/plans/03-rate-limit-estimation.md +82 -0
  29. package/RAF/ahvrih-rate-forge/plans/04-show-version-in-do-logs.md +32 -0
  30. package/RAF/ahvrih-rate-forge/plans/05-sync-main-before-worktree.md +40 -0
  31. package/RAF/ahvrih-rate-forge/plans/06-sync-readme-with-codebase.md +61 -0
  32. package/RAF/ahvrih-rate-forge/plans/07-no-session-persistence.md +28 -0
  33. package/RAF/ahvrih-rate-forge/plans/08-plan-execution-metadata.md +123 -0
  34. package/README.md +27 -7
  35. package/dist/commands/config.d.ts.map +1 -1
  36. package/dist/commands/config.js +24 -7
  37. package/dist/commands/config.js.map +1 -1
  38. package/dist/commands/do.d.ts.map +1 -1
  39. package/dist/commands/do.js +122 -27
  40. package/dist/commands/do.js.map +1 -1
  41. package/dist/commands/plan.d.ts.map +1 -1
  42. package/dist/commands/plan.js +79 -3
  43. package/dist/commands/plan.js.map +1 -1
  44. package/dist/core/claude-runner.d.ts +6 -6
  45. package/dist/core/claude-runner.d.ts.map +1 -1
  46. package/dist/core/claude-runner.js +9 -10
  47. package/dist/core/claude-runner.js.map +1 -1
  48. package/dist/core/failure-analyzer.d.ts.map +1 -1
  49. package/dist/core/failure-analyzer.js +3 -3
  50. package/dist/core/failure-analyzer.js.map +1 -1
  51. package/dist/core/pull-request.d.ts.map +1 -1
  52. package/dist/core/pull-request.js +5 -3
  53. package/dist/core/pull-request.js.map +1 -1
  54. package/dist/core/state-derivation.d.ts +5 -0
  55. package/dist/core/state-derivation.d.ts.map +1 -1
  56. package/dist/core/state-derivation.js +14 -4
  57. package/dist/core/state-derivation.js.map +1 -1
  58. package/dist/core/worktree.d.ts +32 -0
  59. package/dist/core/worktree.d.ts.map +1 -1
  60. package/dist/core/worktree.js +215 -0
  61. package/dist/core/worktree.js.map +1 -1
  62. package/dist/prompts/amend.d.ts.map +1 -1
  63. package/dist/prompts/amend.js +26 -11
  64. package/dist/prompts/amend.js.map +1 -1
  65. package/dist/prompts/planning.d.ts.map +1 -1
  66. package/dist/prompts/planning.js +26 -11
  67. package/dist/prompts/planning.js.map +1 -1
  68. package/dist/types/config.d.ts +30 -13
  69. package/dist/types/config.d.ts.map +1 -1
  70. package/dist/types/config.js +14 -10
  71. package/dist/types/config.js.map +1 -1
  72. package/dist/utils/config.d.ts +53 -4
  73. package/dist/utils/config.d.ts.map +1 -1
  74. package/dist/utils/config.js +197 -30
  75. package/dist/utils/config.js.map +1 -1
  76. package/dist/utils/frontmatter.d.ts +43 -0
  77. package/dist/utils/frontmatter.d.ts.map +1 -0
  78. package/dist/utils/frontmatter.js +85 -0
  79. package/dist/utils/frontmatter.js.map +1 -0
  80. package/dist/utils/name-generator.d.ts.map +1 -1
  81. package/dist/utils/name-generator.js +2 -3
  82. package/dist/utils/name-generator.js.map +1 -1
  83. package/dist/utils/session-parser.d.ts +44 -0
  84. package/dist/utils/session-parser.d.ts.map +1 -0
  85. package/dist/utils/session-parser.js +122 -0
  86. package/dist/utils/session-parser.js.map +1 -0
  87. package/dist/utils/terminal-symbols.d.ts +28 -5
  88. package/dist/utils/terminal-symbols.d.ts.map +1 -1
  89. package/dist/utils/terminal-symbols.js +77 -18
  90. package/dist/utils/terminal-symbols.js.map +1 -1
  91. package/dist/utils/token-tracker.d.ts +31 -1
  92. package/dist/utils/token-tracker.d.ts.map +1 -1
  93. package/dist/utils/token-tracker.js +94 -4
  94. package/dist/utils/token-tracker.js.map +1 -1
  95. package/package.json +1 -1
  96. package/src/commands/config.ts +26 -7
  97. package/src/commands/do.ts +157 -29
  98. package/src/commands/plan.ts +89 -2
  99. package/src/core/claude-runner.ts +16 -17
  100. package/src/core/failure-analyzer.ts +3 -3
  101. package/src/core/pull-request.ts +5 -3
  102. package/src/core/state-derivation.ts +20 -4
  103. package/src/core/worktree.ts +230 -0
  104. package/src/prompts/amend.ts +26 -11
  105. package/src/prompts/config-docs.md +91 -29
  106. package/src/prompts/planning.ts +26 -11
  107. package/src/types/config.ts +46 -21
  108. package/src/utils/config.ts +222 -33
  109. package/src/utils/frontmatter.ts +110 -0
  110. package/src/utils/name-generator.ts +2 -3
  111. package/src/utils/session-parser.ts +161 -0
  112. package/src/utils/terminal-symbols.ts +105 -18
  113. package/src/utils/token-tracker.ts +109 -4
  114. package/tests/unit/claude-runner-interactive.test.ts +8 -6
  115. package/tests/unit/claude-runner.test.ts +5 -66
  116. package/tests/unit/config-command.test.ts +84 -5
  117. package/tests/unit/config.test.ts +292 -45
  118. package/tests/unit/frontmatter.test.ts +182 -0
  119. package/tests/unit/post-execution-picker.test.ts +5 -0
  120. package/tests/unit/session-parser.test.ts +301 -0
  121. package/tests/unit/terminal-symbols.test.ts +263 -33
  122. package/tests/unit/timer-verbose-integration.test.ts +170 -0
  123. package/tests/unit/token-tracker.test.ts +653 -17
  124. package/tests/unit/validation.test.ts +6 -4
  125. package/tests/unit/worktree.test.ts +242 -0
@@ -1,4 +1,4 @@
1
- import { RafConfig, UserConfig, ClaudeModelName, EffortLevel, ModelScenario, EffortScenario, CommitFormatType, PricingCategory, ModelPricing, PricingConfig } from '../types/config.js';
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
- export declare function getEffort(scenario: EffortScenario): EffortLevel;
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 getClaudeCommand(): string;
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,EAIV,eAAe,EACf,WAAW,EACX,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,aAAa,EACd,MAAM,oBAAoB,CAAC;AAK5B,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAsBD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAUD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CA6G1D;AAkCD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAW5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAE7I;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAMvE;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,CAK7C;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,eAAe,CAEjE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,WAAW,CAE/D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAE9D;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAcnF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,eAAe,GAAG,YAAY,CAElE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAI/F;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYnE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAOxF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EAGT,UAAU,EAGV,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAK5B,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAwBD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAUD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CA2I1D;AAwCD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAkB5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAEtH;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAMvE;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,CAK7C;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,eAAe,CAEjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,mBAAmB,CAEtD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAE7E;AAaD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkBtD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAUjF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAE9D;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAezD;AAYD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO5D;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAcnF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,eAAe,GAAG,YAAY,CAElE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,qBAAqB,CAEhE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAI/F;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYnE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAOxF"}
@@ -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, VALID_EFFORTS, } from '../types/config.js';
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', 'effort', 'timeout', 'maxRetries', 'autoCommit',
19
- 'worktree', 'commitFormat', 'claudeCommand', 'pricing',
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 VALID_EFFORT_KEYS = new Set([
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
- // effort
69
- if (obj.effort !== undefined) {
70
- if (typeof obj.effort !== 'object' || obj.effort === null || Array.isArray(obj.effort)) {
71
- throw new ConfigValidationError('effort must be an object');
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 effort = obj.effort;
74
- checkUnknownKeys(effort, VALID_EFFORT_KEYS, 'effort');
75
- for (const [key, val] of Object.entries(effort)) {
76
- if (typeof val !== 'string' || !VALID_EFFORTS.includes(val)) {
77
- throw new ConfigValidationError(`effort.${key} must be one of: ${VALID_EFFORTS.join(', ')}`);
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.effort) {
153
- result.effort = { ...defaults.effort, ...overrides.effort };
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.claudeCommand !== undefined)
174
- result.claudeCommand = overrides.claudeCommand;
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 { ...DEFAULT_CONFIG, models: { ...DEFAULT_CONFIG.models }, effort: { ...DEFAULT_CONFIG.effort }, commitFormat: { ...DEFAULT_CONFIG.commitFormat } };
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
- export function getEffort(scenario) {
224
- return getResolvedConfig().effort[scenario];
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 getClaudeCommand() {
245
- return getResolvedConfig().claudeCommand;
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.
@@ -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":"AA6FA;;;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
+ {"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, getClaudeCommand } from './config.js';
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 cmd = getClaudeCommand();
46
- const proc = spawn(cmd, [
45
+ const proc = spawn('claude', [
47
46
  '--model', model,
48
47
  '--no-session-persistence',
49
48
  '-p',