rafcode 2.4.0 → 2.5.0-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +3 -1
- package/CLAUDE.md +7 -5
- 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/RAF/ahwqwq-model-whisperer/decisions.md +22 -0
- package/RAF/ahwqwq-model-whisperer/input.md +5 -0
- package/RAF/ahwqwq-model-whisperer/outcomes/01-show-model-on-task-line.md +49 -0
- package/RAF/ahwqwq-model-whisperer/outcomes/02-use-claude-cost-estimation.md +107 -0
- package/RAF/ahwqwq-model-whisperer/outcomes/03-add-plan-resume-flag.md +87 -0
- package/RAF/ahwqwq-model-whisperer/plans/01-show-model-on-task-line.md +45 -0
- package/RAF/ahwqwq-model-whisperer/plans/02-use-claude-cost-estimation.md +115 -0
- package/RAF/ahwqwq-model-whisperer/plans/03-add-plan-resume-flag.md +70 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +209 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/do.d.ts.map +1 -1
- package/dist/commands/do.js +37 -8
- package/dist/commands/do.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +92 -54
- package/dist/commands/plan.js.map +1 -1
- package/dist/core/claude-runner.d.ts +8 -6
- package/dist/core/claude-runner.d.ts.map +1 -1
- package/dist/core/claude-runner.js +73 -5
- package/dist/core/claude-runner.js.map +1 -1
- package/dist/core/worktree.d.ts +12 -0
- package/dist/core/worktree.d.ts.map +1 -1
- package/dist/core/worktree.js +33 -1
- package/dist/core/worktree.js.map +1 -1
- package/dist/parsers/stream-renderer.d.ts +2 -0
- package/dist/parsers/stream-renderer.d.ts.map +1 -1
- package/dist/parsers/stream-renderer.js +2 -0
- package/dist/parsers/stream-renderer.js.map +1 -1
- package/dist/prompts/amend.d.ts.map +1 -1
- package/dist/prompts/amend.js +3 -1
- package/dist/prompts/amend.js.map +1 -1
- package/dist/prompts/planning.d.ts.map +1 -1
- package/dist/prompts/planning.js +3 -1
- package/dist/prompts/planning.js.map +1 -1
- package/dist/types/config.d.ts +4 -24
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +0 -24
- package/dist/types/config.js.map +1 -1
- package/dist/utils/config.d.ts +1 -26
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +2 -98
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +13 -3
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +40 -10
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/name-generator.d.ts.map +1 -1
- package/dist/utils/name-generator.js +7 -16
- package/dist/utils/name-generator.js.map +1 -1
- package/dist/utils/terminal-symbols.d.ts +7 -16
- package/dist/utils/terminal-symbols.d.ts.map +1 -1
- package/dist/utils/terminal-symbols.js +16 -42
- package/dist/utils/terminal-symbols.js.map +1 -1
- package/dist/utils/token-tracker.d.ts +4 -30
- package/dist/utils/token-tracker.d.ts.map +1 -1
- package/dist/utils/token-tracker.js +17 -98
- package/dist/utils/token-tracker.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/config.ts +242 -0
- package/src/commands/do.ts +39 -7
- package/src/commands/plan.ts +101 -58
- package/src/core/claude-runner.ts +82 -12
- package/src/core/worktree.ts +37 -1
- package/src/parsers/stream-renderer.ts +4 -0
- package/src/prompts/amend.ts +3 -1
- package/src/prompts/config-docs.md +1 -72
- package/src/prompts/planning.ts +3 -1
- package/src/types/config.ts +4 -52
- package/src/utils/config.ts +2 -112
- package/src/utils/frontmatter.ts +41 -11
- package/src/utils/name-generator.ts +7 -16
- package/src/utils/terminal-symbols.ts +16 -46
- package/src/utils/token-tracker.ts +19 -113
- package/tests/unit/claude-runner.test.ts +1 -0
- 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 +161 -0
- package/tests/unit/config.test.ts +6 -148
- package/tests/unit/frontmatter.test.ts +95 -1
- package/tests/unit/name-generator.test.ts +1 -1
- package/tests/unit/post-execution-picker.test.ts +1 -0
- package/tests/unit/stream-renderer.test.ts +82 -0
- package/tests/unit/terminal-symbols.test.ts +86 -124
- package/tests/unit/token-tracker.test.ts +159 -679
- package/tests/unit/worktree.test.ts +68 -1
- package/src/utils/session-parser.ts +0 -161
- package/tests/unit/session-parser.test.ts +0 -301
|
@@ -22,10 +22,20 @@ export interface FrontmatterParseResult {
|
|
|
22
22
|
/**
|
|
23
23
|
* Parse Obsidian-style frontmatter from plan file content.
|
|
24
24
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* Supports two formats:
|
|
26
|
+
* 1. Standard format (preferred): `---` delimiter at the top and bottom
|
|
27
|
+
* 2. Legacy format (backward compatibility): properties followed by closing `---` only
|
|
27
28
|
*
|
|
28
|
-
*
|
|
29
|
+
* Standard format example:
|
|
30
|
+
* ```
|
|
31
|
+
* ---
|
|
32
|
+
* effort: medium
|
|
33
|
+
* model: sonnet
|
|
34
|
+
* ---
|
|
35
|
+
* # Task: ...
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* Legacy format example:
|
|
29
39
|
* ```
|
|
30
40
|
* effort: medium
|
|
31
41
|
* model: sonnet
|
|
@@ -1 +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
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,CAoF5E"}
|
|
@@ -3,10 +3,20 @@ import { isValidModelName } from './config.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Parse Obsidian-style frontmatter from plan file content.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Supports two formats:
|
|
7
|
+
* 1. Standard format (preferred): `---` delimiter at the top and bottom
|
|
8
|
+
* 2. Legacy format (backward compatibility): properties followed by closing `---` only
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
+
* Standard format example:
|
|
11
|
+
* ```
|
|
12
|
+
* ---
|
|
13
|
+
* effort: medium
|
|
14
|
+
* model: sonnet
|
|
15
|
+
* ---
|
|
16
|
+
* # Task: ...
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* Legacy format example:
|
|
10
20
|
* ```
|
|
11
21
|
* effort: medium
|
|
12
22
|
* model: sonnet
|
|
@@ -26,14 +36,34 @@ export function parsePlanFrontmatter(content) {
|
|
|
26
36
|
hasFrontmatter: false,
|
|
27
37
|
warnings: [],
|
|
28
38
|
};
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if (
|
|
32
|
-
//
|
|
33
|
-
|
|
39
|
+
const trimmedContent = content.trimStart();
|
|
40
|
+
let frontmatterSection;
|
|
41
|
+
if (trimmedContent.startsWith('---')) {
|
|
42
|
+
// Standard format: ---\nkey: value\n---
|
|
43
|
+
const afterOpener = trimmedContent.substring(3);
|
|
44
|
+
// Skip the rest of the opener line (handles "---\n" or "--- \n")
|
|
45
|
+
const openerEnd = afterOpener.indexOf('\n');
|
|
46
|
+
if (openerEnd === -1) {
|
|
47
|
+
// No newline after opening delimiter - no valid frontmatter
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
const rest = afterOpener.substring(openerEnd + 1);
|
|
51
|
+
const closerIndex = rest.indexOf('---');
|
|
52
|
+
if (closerIndex === -1) {
|
|
53
|
+
// No closing delimiter - no valid frontmatter
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
frontmatterSection = rest.substring(0, closerIndex);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// Legacy format: key: value\n---
|
|
60
|
+
const delimiterIndex = content.indexOf('---');
|
|
61
|
+
if (delimiterIndex === -1) {
|
|
62
|
+
// No delimiter found - no frontmatter
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
frontmatterSection = content.substring(0, delimiterIndex);
|
|
34
66
|
}
|
|
35
|
-
// Extract the frontmatter section (everything before the delimiter)
|
|
36
|
-
const frontmatterSection = content.substring(0, delimiterIndex);
|
|
37
67
|
// Parse key: value lines
|
|
38
68
|
const lines = frontmatterSection.split('\n');
|
|
39
69
|
for (const line of lines) {
|
|
@@ -1 +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
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAmFA;;;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"}
|
|
@@ -2,7 +2,9 @@ import { spawn } from 'node:child_process';
|
|
|
2
2
|
import { logger } from './logger.js';
|
|
3
3
|
import { sanitizeProjectName } from './validation.js';
|
|
4
4
|
import { getModel } from './config.js';
|
|
5
|
-
const NAME_GENERATION_PROMPT = `
|
|
5
|
+
const NAME_GENERATION_PROMPT = `Output ONLY the kebab-case name. No introduction, no explanation, no quotes.
|
|
6
|
+
|
|
7
|
+
Generate a short, punchy, creative project name (1-3 words, kebab-case).
|
|
6
8
|
|
|
7
9
|
Be creative! Use metaphors, analogies, or evocative words that capture the SPIRIT of the project.
|
|
8
10
|
Don't literally describe what it does - make it memorable and fun.
|
|
@@ -14,25 +16,14 @@ Good examples:
|
|
|
14
16
|
- Refactoring → 'spring-cleaning', 'phoenix', 'makeover'
|
|
15
17
|
- New feature → 'moonshot', 'secret-sauce', 'magic-wand'
|
|
16
18
|
|
|
17
|
-
Output ONLY the kebab-case name. No quotes, no explanation.
|
|
18
|
-
|
|
19
19
|
Project description:`;
|
|
20
|
-
const MULTI_NAME_GENERATION_PROMPT = `
|
|
21
|
-
|
|
22
|
-
IMPORTANT: Each name should use a DIFFERENT naming style:
|
|
23
|
-
1. **Metaphorical** - Use a metaphor or analogy (e.g., 'phoenix', 'lighthouse', 'compass')
|
|
24
|
-
2. **Fun/Playful** - Make it fun or quirky (e.g., 'turbo-boost', 'magic-beans', 'ninja-move')
|
|
25
|
-
3. **Action-oriented** - Focus on what it does with flair (e.g., 'bug-squasher', 'speed-demon', 'data-whisperer')
|
|
26
|
-
4. **Abstract** - Use abstract/poetic concepts (e.g., 'horizon', 'cascade', 'catalyst')
|
|
27
|
-
5. **Cultural reference** - Reference pop culture, mythology, or literature (e.g., 'atlas', 'merlin', 'gandalf')
|
|
20
|
+
const MULTI_NAME_GENERATION_PROMPT = `Output EXACTLY 5 project names, one per line. Do NOT include any introduction, explanation, preamble, numbering, or quotes.
|
|
28
21
|
|
|
29
22
|
Rules:
|
|
30
|
-
- Each name
|
|
31
|
-
-
|
|
23
|
+
- Each name: 1-3 words, kebab-case, lowercase with hyphens only
|
|
24
|
+
- Use varied styles: metaphorical, playful, action-oriented, abstract, cultural reference
|
|
32
25
|
- Make them memorable and evocative
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
Output format: ONLY output 5 names, one per line, no numbers, no explanations, no quotes.
|
|
26
|
+
- For projects with many unrelated tasks, prefer abstract/metaphorical names
|
|
36
27
|
|
|
37
28
|
Project description:`;
|
|
38
29
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"name-generator.js","sourceRoot":"","sources":["../../src/utils/name-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;qBAcV,CAAC;AAEtB,MAAM,4BAA4B,GAAG
|
|
1
|
+
{"version":3,"file":"name-generator.js","sourceRoot":"","sources":["../../src/utils/name-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,6 @@ import type { CostBreakdown, TaskUsageEntry } from './token-tracker.js';
|
|
|
8
8
|
export interface TokenSummaryOptions {
|
|
9
9
|
/** Whether to show cache token counts. Default: true */
|
|
10
10
|
showCacheTokens?: boolean;
|
|
11
|
-
/** Whether to show rate limit percentage. Default: true */
|
|
12
|
-
showRateLimitEstimate?: boolean;
|
|
13
|
-
/** Rate limit percentage to display (requires showRateLimitEstimate: true) */
|
|
14
|
-
rateLimitPercentage?: number;
|
|
15
11
|
}
|
|
16
12
|
/**
|
|
17
13
|
* Visual symbols for terminal output using dots/symbols style.
|
|
@@ -33,9 +29,10 @@ export type TaskStatus = 'running' | 'completed' | 'failed' | 'pending' | 'block
|
|
|
33
29
|
* @param name - Task name
|
|
34
30
|
* @param elapsedMs - Optional elapsed time in milliseconds
|
|
35
31
|
* @param taskId - Optional task ID prefix display
|
|
36
|
-
* @
|
|
32
|
+
* @param model - Optional model short name to display (e.g., "sonnet", "opus", "haiku")
|
|
33
|
+
* @returns Formatted string like "● 001-auth-login (sonnet) 1:23" or "✓ 001-auth-login (opus) 1/5"
|
|
37
34
|
*/
|
|
38
|
-
export declare function formatTaskProgress(current: number, total: number, status: TaskStatus, name: string, elapsedMs?: number, taskId?: string): string;
|
|
35
|
+
export declare function formatTaskProgress(current: number, total: number, status: TaskStatus, name: string, elapsedMs?: number, taskId?: string, model?: string): string;
|
|
39
36
|
/**
|
|
40
37
|
* Formats a project header line.
|
|
41
38
|
* @param name - Project name
|
|
@@ -68,28 +65,22 @@ export declare function formatNumber(n: number): string;
|
|
|
68
65
|
* Uses 2 decimals for values >= $0.01, 4 decimals for smaller values.
|
|
69
66
|
*/
|
|
70
67
|
export declare function formatCost(cost: number): string;
|
|
71
|
-
/**
|
|
72
|
-
* Formats a rate limit percentage for display.
|
|
73
|
-
* Uses tilde (~) prefix to indicate estimate.
|
|
74
|
-
*/
|
|
75
|
-
export declare function formatRateLimitPercentage(percentage: number): string;
|
|
76
68
|
/**
|
|
77
69
|
* Formats a per-task token usage summary.
|
|
78
|
-
* For single-attempt tasks: " Tokens: 5,234 in / 1,023 out | Cache: 18,500 read |
|
|
70
|
+
* For single-attempt tasks: " Tokens: 5,234 in / 1,023 out | Cache: 18,500 read | Cost: $0.42"
|
|
79
71
|
* For multi-attempt tasks: shows per-attempt breakdown plus total.
|
|
80
72
|
*
|
|
81
73
|
* @param entry - The TaskUsageEntry containing accumulated usage, cost, and attempts array
|
|
82
|
-
* @param
|
|
83
|
-
* @param options - Display options for showing cache tokens and rate limit percentage
|
|
74
|
+
* @param options - Display options for showing cache tokens
|
|
84
75
|
*/
|
|
85
|
-
export declare function formatTaskTokenSummary(entry: TaskUsageEntry,
|
|
76
|
+
export declare function formatTaskTokenSummary(entry: TaskUsageEntry, options?: TokenSummaryOptions): string;
|
|
86
77
|
/**
|
|
87
78
|
* Formats the grand total token usage summary block.
|
|
88
79
|
* Displayed after all tasks complete.
|
|
89
80
|
*
|
|
90
81
|
* @param usage - Total usage data
|
|
91
82
|
* @param cost - Total cost breakdown
|
|
92
|
-
* @param options - Display options for cache tokens
|
|
83
|
+
* @param options - Display options for cache tokens
|
|
93
84
|
*/
|
|
94
85
|
export declare function formatTokenTotalSummary(usage: UsageData, cost: CostBreakdown, options?: TokenSummaryOptions): string;
|
|
95
86
|
//# sourceMappingURL=terminal-symbols.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-symbols.d.ts","sourceRoot":"","sources":["../../src/utils/terminal-symbols.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAExE,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"terminal-symbols.d.ts","sourceRoot":"","sources":["../../src/utils/terminal-symbols.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAExE,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;CAOV,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAYpF;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAaR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,GAAE,MAAU,GAClB,MAAM,CAwBR;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAM7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C;AAoCD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,cAAc,EACrB,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAcR;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAsBR"}
|
|
@@ -31,18 +31,20 @@ function truncate(str, maxLength) {
|
|
|
31
31
|
* @param name - Task name
|
|
32
32
|
* @param elapsedMs - Optional elapsed time in milliseconds
|
|
33
33
|
* @param taskId - Optional task ID prefix display
|
|
34
|
-
* @
|
|
34
|
+
* @param model - Optional model short name to display (e.g., "sonnet", "opus", "haiku")
|
|
35
|
+
* @returns Formatted string like "● 001-auth-login (sonnet) 1:23" or "✓ 001-auth-login (opus) 1/5"
|
|
35
36
|
*/
|
|
36
|
-
export function formatTaskProgress(current, total, status, name, elapsedMs, taskId) {
|
|
37
|
+
export function formatTaskProgress(current, total, status, name, elapsedMs, taskId, model) {
|
|
37
38
|
const symbol = SYMBOLS[status];
|
|
38
39
|
const displayName = truncate(name || 'task', 40);
|
|
39
40
|
const idPrefix = taskId ? `${taskId}-` : '';
|
|
41
|
+
const modelSuffix = model ? ` (${model})` : '';
|
|
40
42
|
// Show elapsed time for running tasks, completed tasks, and failed tasks
|
|
41
43
|
if (elapsedMs !== undefined) {
|
|
42
44
|
const timeStr = formatElapsedTime(elapsedMs);
|
|
43
|
-
return `${symbol} ${idPrefix}${displayName} ${timeStr}`;
|
|
45
|
+
return `${symbol} ${idPrefix}${displayName}${modelSuffix} ${timeStr}`;
|
|
44
46
|
}
|
|
45
|
-
return `${symbol} ${idPrefix}${displayName} ${current}/${total}`;
|
|
47
|
+
return `${symbol} ${idPrefix}${displayName}${modelSuffix} ${current}/${total}`;
|
|
46
48
|
}
|
|
47
49
|
/**
|
|
48
50
|
* Formats a project header line.
|
|
@@ -113,25 +115,12 @@ export function formatCost(cost) {
|
|
|
113
115
|
return `$${cost.toFixed(4)}`;
|
|
114
116
|
return `$${cost.toFixed(2)}`;
|
|
115
117
|
}
|
|
116
|
-
/**
|
|
117
|
-
* Formats a rate limit percentage for display.
|
|
118
|
-
* Uses tilde (~) prefix to indicate estimate.
|
|
119
|
-
*/
|
|
120
|
-
export function formatRateLimitPercentage(percentage) {
|
|
121
|
-
if (percentage === 0)
|
|
122
|
-
return '~0% of 5h window';
|
|
123
|
-
if (percentage < 0.1)
|
|
124
|
-
return `~${percentage.toFixed(2)}% of 5h window`;
|
|
125
|
-
if (percentage < 1)
|
|
126
|
-
return `~${percentage.toFixed(1)}% of 5h window`;
|
|
127
|
-
return `~${Math.round(percentage)}% of 5h window`;
|
|
128
|
-
}
|
|
129
118
|
/**
|
|
130
119
|
* Formats a single line of token usage (for a single attempt or total).
|
|
131
120
|
* Used internally by formatTaskTokenSummary.
|
|
132
121
|
*/
|
|
133
122
|
function formatTokenLine(usage, costValue, prefix = '', indent = ' ', options = {}) {
|
|
134
|
-
const { showCacheTokens = true
|
|
123
|
+
const { showCacheTokens = true } = options;
|
|
135
124
|
const parts = [];
|
|
136
125
|
const tokenPart = `${formatNumber(usage.inputTokens)} in / ${formatNumber(usage.outputTokens)} out`;
|
|
137
126
|
parts.push(prefix ? `${prefix}: ${tokenPart}` : `Tokens: ${tokenPart}`);
|
|
@@ -149,39 +138,27 @@ function formatTokenLine(usage, costValue, prefix = '', indent = ' ', options =
|
|
|
149
138
|
}
|
|
150
139
|
}
|
|
151
140
|
}
|
|
152
|
-
parts.push(`
|
|
153
|
-
if (showRateLimitEstimate && rateLimitPercentage !== undefined) {
|
|
154
|
-
parts.push(formatRateLimitPercentage(rateLimitPercentage));
|
|
155
|
-
}
|
|
141
|
+
parts.push(`Cost: ${formatCost(costValue)}`);
|
|
156
142
|
return `${indent}${parts.join(' | ')}`;
|
|
157
143
|
}
|
|
158
144
|
/**
|
|
159
145
|
* Formats a per-task token usage summary.
|
|
160
|
-
* For single-attempt tasks: " Tokens: 5,234 in / 1,023 out | Cache: 18,500 read |
|
|
146
|
+
* For single-attempt tasks: " Tokens: 5,234 in / 1,023 out | Cache: 18,500 read | Cost: $0.42"
|
|
161
147
|
* For multi-attempt tasks: shows per-attempt breakdown plus total.
|
|
162
148
|
*
|
|
163
149
|
* @param entry - The TaskUsageEntry containing accumulated usage, cost, and attempts array
|
|
164
|
-
* @param
|
|
165
|
-
* @param options - Display options for showing cache tokens and rate limit percentage
|
|
150
|
+
* @param options - Display options for showing cache tokens
|
|
166
151
|
*/
|
|
167
|
-
export function formatTaskTokenSummary(entry,
|
|
152
|
+
export function formatTaskTokenSummary(entry, options = {}) {
|
|
168
153
|
// Single-attempt: render exactly as before (no per-attempt breakdown)
|
|
169
154
|
if (entry.attempts.length <= 1) {
|
|
170
155
|
return formatTokenLine(entry.usage, entry.cost.totalCost, '', ' ', options);
|
|
171
156
|
}
|
|
172
157
|
// Multi-attempt: show per-attempt lines plus total
|
|
173
|
-
// Per-attempt lines don't show rate limit (only show on total)
|
|
174
|
-
const perAttemptOptions = {
|
|
175
|
-
...options,
|
|
176
|
-
showRateLimitEstimate: false,
|
|
177
|
-
rateLimitPercentage: undefined,
|
|
178
|
-
};
|
|
179
158
|
const lines = [];
|
|
180
159
|
entry.attempts.forEach((attemptUsage, i) => {
|
|
181
|
-
const attemptCost =
|
|
182
|
-
|
|
183
|
-
: 0;
|
|
184
|
-
lines.push(formatTokenLine(attemptUsage, attemptCost, `Attempt ${i + 1}`, ' ', perAttemptOptions));
|
|
160
|
+
const attemptCost = attemptUsage.totalCostUsd;
|
|
161
|
+
lines.push(formatTokenLine(attemptUsage, attemptCost, `Attempt ${i + 1}`, ' ', options));
|
|
185
162
|
});
|
|
186
163
|
lines.push(formatTokenLine(entry.usage, entry.cost.totalCost, 'Total', ' ', options));
|
|
187
164
|
return lines.join('\n');
|
|
@@ -192,10 +169,10 @@ export function formatTaskTokenSummary(entry, calculateAttemptCost, options = {}
|
|
|
192
169
|
*
|
|
193
170
|
* @param usage - Total usage data
|
|
194
171
|
* @param cost - Total cost breakdown
|
|
195
|
-
* @param options - Display options for cache tokens
|
|
172
|
+
* @param options - Display options for cache tokens
|
|
196
173
|
*/
|
|
197
174
|
export function formatTokenTotalSummary(usage, cost, options = {}) {
|
|
198
|
-
const { showCacheTokens = true
|
|
175
|
+
const { showCacheTokens = true } = options;
|
|
199
176
|
const lines = [];
|
|
200
177
|
const divider = '── Token Usage Summary ──────────────────';
|
|
201
178
|
lines.push(divider);
|
|
@@ -210,10 +187,7 @@ export function formatTokenTotalSummary(usage, cost, options = {}) {
|
|
|
210
187
|
}
|
|
211
188
|
lines.push(`Cache: ${cacheParts.join(' / ')}`);
|
|
212
189
|
}
|
|
213
|
-
lines.push(`
|
|
214
|
-
if (showRateLimitEstimate && rateLimitPercentage !== undefined) {
|
|
215
|
-
lines.push(formatRateLimitPercentage(rateLimitPercentage));
|
|
216
|
-
}
|
|
190
|
+
lines.push(`Total cost: ${formatCost(cost.totalCost)}`);
|
|
217
191
|
lines.push('─────────────────────────────────────────');
|
|
218
192
|
return lines.join('\n');
|
|
219
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-symbols.js","sourceRoot":"","sources":["../../src/utils/terminal-symbols.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"terminal-symbols.js","sourceRoot":"","sources":["../../src/utils/terminal-symbols.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import { UsageData
|
|
1
|
+
import { UsageData } from '../types/config.js';
|
|
2
2
|
/** Cost breakdown for a single task or accumulated total. */
|
|
3
3
|
export interface CostBreakdown {
|
|
4
|
-
inputCost: number;
|
|
5
|
-
outputCost: number;
|
|
6
|
-
cacheReadCost: number;
|
|
7
|
-
cacheCreateCost: number;
|
|
8
4
|
totalCost: number;
|
|
9
5
|
}
|
|
10
6
|
/** Per-task usage snapshot stored by the tracker. */
|
|
@@ -27,18 +23,15 @@ export declare function sumCostBreakdowns(costs: CostBreakdown[]): CostBreakdown
|
|
|
27
23
|
*/
|
|
28
24
|
export declare function accumulateUsage(attempts: UsageData[]): UsageData;
|
|
29
25
|
/**
|
|
30
|
-
* Accumulates token usage across multiple task executions
|
|
31
|
-
* using configurable per-model pricing.
|
|
26
|
+
* Accumulates token usage across multiple task executions using Claude-provided cost data.
|
|
32
27
|
*/
|
|
33
28
|
export declare class TokenTracker {
|
|
34
29
|
private entries;
|
|
35
|
-
|
|
36
|
-
constructor(pricingConfig?: PricingConfig);
|
|
30
|
+
constructor();
|
|
37
31
|
/**
|
|
38
32
|
* Record usage data from a completed task.
|
|
39
33
|
* Accepts an array of UsageData (one per attempt) and accumulates them.
|
|
40
|
-
*
|
|
41
|
-
* have modelUsage and others only have aggregate fields.
|
|
34
|
+
* Costs are summed from Claude-provided totalCostUsd values.
|
|
42
35
|
*/
|
|
43
36
|
addTask(taskId: string, attempts: UsageData[]): TaskUsageEntry;
|
|
44
37
|
/**
|
|
@@ -52,24 +45,5 @@ export declare class TokenTracker {
|
|
|
52
45
|
usage: UsageData;
|
|
53
46
|
cost: CostBreakdown;
|
|
54
47
|
};
|
|
55
|
-
/**
|
|
56
|
-
* Calculate cost for a given UsageData using per-model pricing.
|
|
57
|
-
* Uses per-model breakdown when available, falls back to aggregate with sonnet pricing.
|
|
58
|
-
*/
|
|
59
|
-
calculateCost(usage: UsageData): CostBreakdown;
|
|
60
|
-
/**
|
|
61
|
-
* Calculate the 5h rate limit window percentage for a given cost.
|
|
62
|
-
* Converts cost to Sonnet-equivalent tokens using the configured Sonnet pricing,
|
|
63
|
-
* then divides by the configured cap.
|
|
64
|
-
*
|
|
65
|
-
* @param totalCost - The total cost in dollars
|
|
66
|
-
* @param sonnetTokenCap - Optional override for the Sonnet-equivalent token cap (defaults to config value)
|
|
67
|
-
* @returns The percentage of the 5h window consumed (0-100+)
|
|
68
|
-
*/
|
|
69
|
-
calculateRateLimitPercentage(totalCost: number, sonnetTokenCap?: number): number;
|
|
70
|
-
/**
|
|
71
|
-
* Get the cumulative 5h window percentage across all recorded tasks.
|
|
72
|
-
*/
|
|
73
|
-
getCumulativeRateLimitPercentage(sonnetTokenCap?: number): number;
|
|
74
48
|
}
|
|
75
49
|
//# sourceMappingURL=token-tracker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/token-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"token-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/token-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,KAAK,EAAE,SAAS,CAAC;IACjB,4CAA4C;IAC5C,IAAI,EAAE,aAAa,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,CAMvE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,CAmChE;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAwB;;IAMvC;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,cAAc;IAU9D;;OAEG;IACH,UAAU,IAAI,SAAS,cAAc,EAAE;IAIvC;;OAEG;IACH,SAAS,IAAI;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,IAAI,EAAE,aAAa,CAAA;KAAE;CAwCvD"}
|