@prism-d1/cli 1.0.58 → 1.0.60
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/dist/assets/metric-hooks/README.md +21 -12
- package/dist/assets/metric-hooks/prepare-commit-msg +16 -162
- package/dist/src/commands/bootstrapper/install-git-hooks.js +11 -27
- package/dist/src/commands/bootstrapper/install-git-hooks.js.map +1 -1
- package/dist/src/commands/git/claude-session-context.d.ts +7 -0
- package/dist/src/commands/git/claude-session-context.d.ts.map +1 -0
- package/dist/src/commands/git/claude-session-context.js +58 -0
- package/dist/src/commands/git/claude-session-context.js.map +1 -0
- package/dist/src/commands/git/commit-trailers.d.ts +14 -0
- package/dist/src/commands/git/commit-trailers.d.ts.map +1 -0
- package/dist/src/commands/git/commit-trailers.js +217 -0
- package/dist/src/commands/git/commit-trailers.js.map +1 -0
- package/dist/src/commands/parse-code-tool/kiro-cli.d.ts +24 -0
- package/dist/src/commands/parse-code-tool/kiro-cli.d.ts.map +1 -1
- package/dist/src/commands/parse-code-tool/kiro-cli.js +75 -65
- package/dist/src/commands/parse-code-tool/kiro-cli.js.map +1 -1
- package/dist/src/commands/parse-code-tool/kiro-ide.d.ts +6 -0
- package/dist/src/commands/parse-code-tool/kiro-ide.d.ts.map +1 -1
- package/dist/src/commands/parse-code-tool/kiro-ide.js +164 -103
- package/dist/src/commands/parse-code-tool/kiro-ide.js.map +1 -1
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +62 -24
- package/dist/src/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
3
|
+
import { resolve, basename } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { collectKiroCli } from '../parse-code-tool/kiro-cli.js';
|
|
6
|
+
import { collectKiroIde } from '../parse-code-tool/kiro-ide.js';
|
|
7
|
+
const DEFAULT_CLAUDE_MODEL = 'us.anthropic.claude-sonnet-4-5-20250929-v1:0';
|
|
8
|
+
function gitRoot(explicit) {
|
|
9
|
+
if (explicit)
|
|
10
|
+
return explicit;
|
|
11
|
+
const r = spawnSync('git', ['rev-parse', '--show-toplevel'], { encoding: 'utf8' });
|
|
12
|
+
if (r.status === 0 && r.stdout)
|
|
13
|
+
return r.stdout.trim();
|
|
14
|
+
return process.cwd();
|
|
15
|
+
}
|
|
16
|
+
/** Detect the AI tool that produced this commit from the environment. */
|
|
17
|
+
function detectTool() {
|
|
18
|
+
const env = process.env;
|
|
19
|
+
let origin = 'human', tool = '', model = '';
|
|
20
|
+
// Claude Code
|
|
21
|
+
if (env.CLAUDE_CODE || env.CLAUDE_CODE_SESSION_ID) {
|
|
22
|
+
origin = 'ai-generated';
|
|
23
|
+
tool = 'claude-code';
|
|
24
|
+
model = env.ANTHROPIC_MODEL || DEFAULT_CLAUDE_MODEL;
|
|
25
|
+
}
|
|
26
|
+
// Kiro CLI (KIRO_SESSION_ID) / IDE terminal (TERM_PROGRAM) / Source Control panel (askpass paths)
|
|
27
|
+
if (env.KIRO_SESSION_ID ||
|
|
28
|
+
env.KIRO_SESSION ||
|
|
29
|
+
env.TERM_PROGRAM === 'kiro' ||
|
|
30
|
+
(env.VSCODE_GIT_ASKPASS_NODE || '').includes('kiro') ||
|
|
31
|
+
(env.GIT_ASKPASS || '').includes('kiro')) {
|
|
32
|
+
origin = 'ai-generated';
|
|
33
|
+
tool = 'kiro';
|
|
34
|
+
model = '';
|
|
35
|
+
}
|
|
36
|
+
// Amazon Q Developer
|
|
37
|
+
if (env.Q_DEVELOPER_SESSION) {
|
|
38
|
+
origin = 'ai-generated';
|
|
39
|
+
tool = 'q-developer';
|
|
40
|
+
}
|
|
41
|
+
return { origin, tool, model };
|
|
42
|
+
}
|
|
43
|
+
/** Find a spec reference: an explicit Spec-Ref in the message wins, else a staged spec file. */
|
|
44
|
+
function detectSpecRef(repoRoot, msg) {
|
|
45
|
+
const explicit = msg.match(/^Spec-Ref:\s*(.+)$/m);
|
|
46
|
+
if (explicit)
|
|
47
|
+
return explicit[1].trim();
|
|
48
|
+
const r = spawnSync('git', ['diff', '--cached', '--name-only'], { encoding: 'utf8', cwd: repoRoot });
|
|
49
|
+
if (r.status === 0 && r.stdout) {
|
|
50
|
+
for (const f of r.stdout.split('\n')) {
|
|
51
|
+
if (/specs\/|\.kiro\/specs\//.test(f))
|
|
52
|
+
return f.trim();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return '';
|
|
56
|
+
}
|
|
57
|
+
/** Run `codeburn report` and parse its JSON. Returns null if codeburn is absent or errors. */
|
|
58
|
+
function runCodeburn(projectFilter) {
|
|
59
|
+
const isWin = process.platform === 'win32';
|
|
60
|
+
const r = isWin
|
|
61
|
+
? spawnSync(`codeburn report -p all --project "${projectFilter}" --format json`, { encoding: 'utf8', shell: true })
|
|
62
|
+
: spawnSync('codeburn', ['report', '-p', 'all', '--project', projectFilter, '--format', 'json'], { encoding: 'utf8' });
|
|
63
|
+
if (!r || r.status !== 0 || !r.stdout)
|
|
64
|
+
return null;
|
|
65
|
+
try {
|
|
66
|
+
return JSON.parse(r.stdout);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** Collect cumulative token usage for the given tool + project. */
|
|
73
|
+
async function collectUsage(tool, projectBasename, projectFilter) {
|
|
74
|
+
if (tool === 'kiro') {
|
|
75
|
+
let out = null;
|
|
76
|
+
if (process.env.KIRO_SESSION_ID) {
|
|
77
|
+
out = await collectKiroCli(process.env.KIRO_SESSION_ID, projectBasename);
|
|
78
|
+
}
|
|
79
|
+
if (!out || out.overview.calls === 0) {
|
|
80
|
+
out = await collectKiroIde(projectBasename);
|
|
81
|
+
}
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
84
|
+
// claude-code / q-developer → codeburn (full-path slug, then basename fallback)
|
|
85
|
+
let out = runCodeburn(projectFilter);
|
|
86
|
+
if (!out || out.overview.calls === 0)
|
|
87
|
+
out = runCodeburn(projectBasename);
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
function sumTokens(o, key) {
|
|
91
|
+
return (o.models || []).reduce((s, m) => s + (m[key] || 0), 0);
|
|
92
|
+
}
|
|
93
|
+
function readBounds(repoRoot) {
|
|
94
|
+
let maxTokens = 1_000_000, maxCost = 100;
|
|
95
|
+
const cfg = resolve(repoRoot, '.prism', 'config.json');
|
|
96
|
+
if (existsSync(cfg)) {
|
|
97
|
+
try {
|
|
98
|
+
const j = JSON.parse(readFileSync(cfg, 'utf8'));
|
|
99
|
+
if (typeof j.max_tokens === 'number')
|
|
100
|
+
maxTokens = j.max_tokens;
|
|
101
|
+
if (typeof j.max_cost === 'number')
|
|
102
|
+
maxCost = j.max_cost;
|
|
103
|
+
}
|
|
104
|
+
catch { /* fall through to defaults */ }
|
|
105
|
+
}
|
|
106
|
+
return { maxTokens, maxCost };
|
|
107
|
+
}
|
|
108
|
+
/** Format a USD cost: up to 4 dp, trailing zeros trimmed (matches the old bc output style). */
|
|
109
|
+
function formatCost(c) {
|
|
110
|
+
return (Math.round(c * 10000) / 10000).toString();
|
|
111
|
+
}
|
|
112
|
+
export default {
|
|
113
|
+
description: 'Emit AI-origin git commit trailers (used by prepare-commit-msg). Portable: no jq/bc/sed required.',
|
|
114
|
+
options: [
|
|
115
|
+
{ flags: '--commit-msg-file <path>', description: 'Commit message file to append trailers to (git hook $1). If omitted, prints to stdout' },
|
|
116
|
+
{ flags: '--source <source>', description: 'Commit source (git hook $2): merge, squash, message, template, commit' },
|
|
117
|
+
{ flags: '--repo <path>', description: 'Repository root (defaults to git rev-parse --show-toplevel)' },
|
|
118
|
+
],
|
|
119
|
+
async action(opts) {
|
|
120
|
+
// Skip merge/squash commits
|
|
121
|
+
if (opts.source === 'merge' || opts.source === 'squash')
|
|
122
|
+
return;
|
|
123
|
+
const repoRoot = gitRoot(opts.repo);
|
|
124
|
+
let existingMsg = '';
|
|
125
|
+
if (opts.commitMsgFile && existsSync(opts.commitMsgFile)) {
|
|
126
|
+
try {
|
|
127
|
+
existingMsg = readFileSync(opts.commitMsgFile, 'utf8');
|
|
128
|
+
}
|
|
129
|
+
catch { /* ignore */ }
|
|
130
|
+
}
|
|
131
|
+
// Don't double-add trailers
|
|
132
|
+
if (/^AI-Origin:/m.test(existingMsg))
|
|
133
|
+
return;
|
|
134
|
+
const { origin, tool, model } = detectTool();
|
|
135
|
+
const specRef = detectSpecRef(repoRoot, existingMsg);
|
|
136
|
+
const projectBasename = basename(repoRoot);
|
|
137
|
+
const projectFilter = repoRoot.replace(/^\//, '').replace(/\//g, '-');
|
|
138
|
+
// Token tracking (snapshot delta) — only when an AI tool is detected
|
|
139
|
+
let inputTokens = null;
|
|
140
|
+
let outputTokens = null;
|
|
141
|
+
let cost = null;
|
|
142
|
+
if (tool) {
|
|
143
|
+
const usage = await collectUsage(tool, projectBasename, projectFilter);
|
|
144
|
+
if (usage) {
|
|
145
|
+
const curIn = sumTokens(usage, 'inputTokens');
|
|
146
|
+
const curOut = sumTokens(usage, 'outputTokens');
|
|
147
|
+
const curCost = usage.overview?.cost ?? 0;
|
|
148
|
+
const trackerDir = resolve(homedir(), '.prism', 'tokentracker');
|
|
149
|
+
const trackerFile = resolve(trackerDir, `${projectBasename}.json`);
|
|
150
|
+
if (existsSync(trackerFile)) {
|
|
151
|
+
try {
|
|
152
|
+
const prev = JSON.parse(readFileSync(trackerFile, 'utf8'));
|
|
153
|
+
inputTokens = Math.max(0, curIn - (prev.inputTokens || 0));
|
|
154
|
+
outputTokens = Math.max(0, curOut - (prev.outputTokens || 0));
|
|
155
|
+
cost = Math.max(0, curCost - (prev.cost || 0));
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
inputTokens = 0;
|
|
159
|
+
outputTokens = 0;
|
|
160
|
+
cost = 0;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
// First commit for this project — no delta baseline yet
|
|
165
|
+
inputTokens = 0;
|
|
166
|
+
outputTokens = 0;
|
|
167
|
+
cost = 0;
|
|
168
|
+
}
|
|
169
|
+
// Persist the new snapshot for the next commit's delta
|
|
170
|
+
try {
|
|
171
|
+
mkdirSync(trackerDir, { recursive: true });
|
|
172
|
+
const snap = { inputTokens: curIn, outputTokens: curOut, cost: curCost };
|
|
173
|
+
writeFileSync(trackerFile, JSON.stringify(snap) + '\n');
|
|
174
|
+
}
|
|
175
|
+
catch { /* non-fatal */ }
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Clamp to configured bounds
|
|
179
|
+
const { maxTokens, maxCost } = readBounds(repoRoot);
|
|
180
|
+
if (inputTokens !== null)
|
|
181
|
+
inputTokens = Math.min(inputTokens, maxTokens);
|
|
182
|
+
if (outputTokens !== null)
|
|
183
|
+
outputTokens = Math.min(outputTokens, maxTokens);
|
|
184
|
+
if (cost !== null && cost > maxCost)
|
|
185
|
+
cost = maxCost;
|
|
186
|
+
// Build trailer block
|
|
187
|
+
const lines = [`AI-Origin: ${origin}`];
|
|
188
|
+
if (tool)
|
|
189
|
+
lines.push(`AI-Tool: ${tool}`);
|
|
190
|
+
if (model)
|
|
191
|
+
lines.push(`AI-Model: ${model}`);
|
|
192
|
+
if (inputTokens !== null)
|
|
193
|
+
lines.push(`AI-Input-Tokens: ${inputTokens}`);
|
|
194
|
+
if (outputTokens !== null)
|
|
195
|
+
lines.push(`AI-Output-Tokens: ${outputTokens}`);
|
|
196
|
+
if (cost !== null)
|
|
197
|
+
lines.push(`AI-Cost: $${formatCost(cost)}`);
|
|
198
|
+
if (specRef)
|
|
199
|
+
lines.push(`Spec-Ref: ${specRef}`);
|
|
200
|
+
const block = lines.join('\n');
|
|
201
|
+
if (opts.commitMsgFile) {
|
|
202
|
+
// Ensure a blank line separates the message body from the trailers
|
|
203
|
+
let out = existingMsg;
|
|
204
|
+
if (out.length > 0)
|
|
205
|
+
out = out.replace(/\n+$/, '') + '\n\n';
|
|
206
|
+
out += block + '\n';
|
|
207
|
+
try {
|
|
208
|
+
writeFileSync(opts.commitMsgFile, out);
|
|
209
|
+
}
|
|
210
|
+
catch { /* fail open — never block the commit */ }
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
console.log(block);
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
//# sourceMappingURL=commit-trailers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit-trailers.js","sourceRoot":"","sources":["../../../../src/commands/git/commit-trailers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
/** codeburn-compatible token usage shape, shared across parse-code-tool commands. */
|
|
2
|
+
export interface CodeburnOutput {
|
|
3
|
+
overview: {
|
|
4
|
+
cost: number;
|
|
5
|
+
calls: number;
|
|
6
|
+
sessions: number;
|
|
7
|
+
};
|
|
8
|
+
models: {
|
|
9
|
+
name: string;
|
|
10
|
+
inputTokens: number;
|
|
11
|
+
outputTokens: number;
|
|
12
|
+
}[];
|
|
13
|
+
projects: {
|
|
14
|
+
name: string;
|
|
15
|
+
cost: number;
|
|
16
|
+
calls: number;
|
|
17
|
+
}[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parse a Kiro CLI session file into codeburn-compatible token usage.
|
|
21
|
+
* Returns `null` when no session id can be resolved; returns a zero-usage
|
|
22
|
+
* object when the session file does not exist.
|
|
23
|
+
*/
|
|
24
|
+
export declare function collectKiroCli(sessionIdOpt?: string, project?: string): Promise<CodeburnOutput | null>;
|
|
1
25
|
declare const _default: {
|
|
2
26
|
description: string;
|
|
3
27
|
options: ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro-cli.d.ts","sourceRoot":"","sources":["../../../../src/commands/parse-code-tool/kiro-cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kiro-cli.d.ts","sourceRoot":"","sources":["../../../../src/commands/parse-code-tool/kiro-cli.ts"],"names":[],"mappings":"AA8BA,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtE,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC3D;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAoDhC;;;;;;;;;;;;iBASoB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;AAP7E,wBAwBE"}
|
|
@@ -17,6 +17,74 @@ function calculateCost(model, input, output) {
|
|
|
17
17
|
function getCliSessionsDir() {
|
|
18
18
|
return join(homedir(), '.kiro', 'sessions', 'cli');
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse a Kiro CLI session file into codeburn-compatible token usage.
|
|
22
|
+
* Returns `null` when no session id can be resolved; returns a zero-usage
|
|
23
|
+
* object when the session file does not exist.
|
|
24
|
+
*/
|
|
25
|
+
export async function collectKiroCli(sessionIdOpt, project) {
|
|
26
|
+
const sessionId = sessionIdOpt || process.env.KIRO_SESSION_ID;
|
|
27
|
+
if (!sessionId)
|
|
28
|
+
return null;
|
|
29
|
+
const filePath = join(getCliSessionsDir(), `${sessionId}.jsonl`);
|
|
30
|
+
let raw;
|
|
31
|
+
try {
|
|
32
|
+
raw = await readFile(filePath, 'utf-8');
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// No session file — zero usage
|
|
36
|
+
return { overview: { cost: 0, calls: 0, sessions: 0 }, models: [], projects: [] };
|
|
37
|
+
}
|
|
38
|
+
let inputChars = 0, outputChars = 0, calls = 0;
|
|
39
|
+
for (const line of raw.split('\n')) {
|
|
40
|
+
if (!line.trim())
|
|
41
|
+
continue;
|
|
42
|
+
let entry;
|
|
43
|
+
try {
|
|
44
|
+
entry = JSON.parse(line);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const kind = entry.kind;
|
|
50
|
+
const content = entry.data?.content;
|
|
51
|
+
if (!content || !Array.isArray(content))
|
|
52
|
+
continue;
|
|
53
|
+
for (const item of content) {
|
|
54
|
+
if (item.kind === 'text' && typeof item.data === 'string') {
|
|
55
|
+
if (kind === 'Prompt' || kind === 'ToolResults')
|
|
56
|
+
inputChars += item.data.length;
|
|
57
|
+
else if (kind === 'AssistantMessage') {
|
|
58
|
+
outputChars += item.data.length;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (item.kind === 'toolUse' && item.data) {
|
|
62
|
+
// Tool calls are output (assistant decided to call a tool)
|
|
63
|
+
outputChars += JSON.stringify(item.data.input ?? '').length;
|
|
64
|
+
}
|
|
65
|
+
else if (item.kind === 'toolResult' && item.data) {
|
|
66
|
+
// Tool results are input (fed back to model)
|
|
67
|
+
const rc = item.data.content;
|
|
68
|
+
if (Array.isArray(rc)) {
|
|
69
|
+
for (const r of rc)
|
|
70
|
+
inputChars += typeof r.data === 'string' ? r.data.length : JSON.stringify(r.data ?? '').length;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (kind === 'AssistantMessage')
|
|
75
|
+
calls++;
|
|
76
|
+
}
|
|
77
|
+
const inputTokens = Math.ceil(inputChars / CHARS_PER_TOKEN);
|
|
78
|
+
const outputTokens = Math.ceil(outputChars / CHARS_PER_TOKEN);
|
|
79
|
+
const model = 'kiro-auto';
|
|
80
|
+
const cost = Math.round(calculateCost(model, inputTokens, outputTokens) * 100) / 100;
|
|
81
|
+
const projectName = project || 'unknown';
|
|
82
|
+
return {
|
|
83
|
+
overview: { cost, calls, sessions: 1 },
|
|
84
|
+
models: [{ name: model, inputTokens, outputTokens }],
|
|
85
|
+
projects: [{ name: projectName, cost, calls }],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
20
88
|
export default {
|
|
21
89
|
description: 'Parse Kiro CLI session files and output token usage (codeburn-compatible JSON)',
|
|
22
90
|
options: [
|
|
@@ -25,76 +93,18 @@ export default {
|
|
|
25
93
|
{ flags: '--format <fmt>', description: 'Output format: json, summary', default: 'json' },
|
|
26
94
|
],
|
|
27
95
|
async action(opts) {
|
|
28
|
-
const
|
|
29
|
-
if (!
|
|
96
|
+
const output = await collectKiroCli(opts.sessionId, opts.project);
|
|
97
|
+
if (!output) {
|
|
30
98
|
console.error('No session ID: pass --session-id or set KIRO_SESSION_ID');
|
|
31
99
|
process.exit(1);
|
|
32
100
|
}
|
|
33
|
-
const filePath = join(getCliSessionsDir(), `${sessionId}.jsonl`);
|
|
34
|
-
let raw;
|
|
35
|
-
try {
|
|
36
|
-
raw = await readFile(filePath, 'utf-8');
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
// No session file — output zero tokens
|
|
40
|
-
const output = { overview: { cost: 0, calls: 0, sessions: 0 }, models: [], projects: [] };
|
|
41
|
-
console.log(JSON.stringify(output, null, 2));
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
let inputChars = 0, outputChars = 0, calls = 0;
|
|
45
|
-
for (const line of raw.split('\n')) {
|
|
46
|
-
if (!line.trim())
|
|
47
|
-
continue;
|
|
48
|
-
let entry;
|
|
49
|
-
try {
|
|
50
|
-
entry = JSON.parse(line);
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
const kind = entry.kind;
|
|
56
|
-
const content = entry.data?.content;
|
|
57
|
-
if (!content || !Array.isArray(content))
|
|
58
|
-
continue;
|
|
59
|
-
for (const item of content) {
|
|
60
|
-
if (item.kind === 'text' && typeof item.data === 'string') {
|
|
61
|
-
if (kind === 'Prompt' || kind === 'ToolResults')
|
|
62
|
-
inputChars += item.data.length;
|
|
63
|
-
else if (kind === 'AssistantMessage') {
|
|
64
|
-
outputChars += item.data.length;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
else if (item.kind === 'toolUse' && item.data) {
|
|
68
|
-
// Tool calls are output (assistant decided to call a tool)
|
|
69
|
-
outputChars += JSON.stringify(item.data.input ?? '').length;
|
|
70
|
-
}
|
|
71
|
-
else if (item.kind === 'toolResult' && item.data) {
|
|
72
|
-
// Tool results are input (fed back to model)
|
|
73
|
-
const rc = item.data.content;
|
|
74
|
-
if (Array.isArray(rc)) {
|
|
75
|
-
for (const r of rc)
|
|
76
|
-
inputChars += typeof r.data === 'string' ? r.data.length : JSON.stringify(r.data ?? '').length;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
if (kind === 'AssistantMessage')
|
|
81
|
-
calls++;
|
|
82
|
-
}
|
|
83
|
-
const inputTokens = Math.ceil(inputChars / CHARS_PER_TOKEN);
|
|
84
|
-
const outputTokens = Math.ceil(outputChars / CHARS_PER_TOKEN);
|
|
85
|
-
const model = 'kiro-auto';
|
|
86
|
-
const cost = calculateCost(model, inputTokens, outputTokens);
|
|
87
|
-
const projectName = opts.project || 'unknown';
|
|
88
|
-
const output = {
|
|
89
|
-
overview: { cost: Math.round(cost * 100) / 100, calls, sessions: 1 },
|
|
90
|
-
models: [{ name: model, inputTokens, outputTokens }],
|
|
91
|
-
projects: [{ name: projectName, cost: Math.round(cost * 100) / 100, calls }],
|
|
92
|
-
};
|
|
93
101
|
if (opts.format === 'summary') {
|
|
94
|
-
|
|
95
|
-
console.log(
|
|
102
|
+
const m = output.models[0];
|
|
103
|
+
console.log('Kiro CLI Token Usage');
|
|
104
|
+
console.log(` Calls: ${output.overview.calls}`);
|
|
96
105
|
console.log(` Cost: $${output.overview.cost}`);
|
|
97
|
-
|
|
106
|
+
if (m)
|
|
107
|
+
console.log(` ${m.name}: ${m.inputTokens} in / ${m.outputTokens} out`);
|
|
98
108
|
}
|
|
99
109
|
else {
|
|
100
110
|
console.log(JSON.stringify(output, null, 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro-cli.js","sourceRoot":"","sources":["../../../../src/commands/parse-code-tool/kiro-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,WAAW,GAAqC;IACpD,mBAAmB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IACnC,mBAAmB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IACnC,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IACjC,kBAAkB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;IACnC,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IACjC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;CAC5B,CAAC;AAEF,SAAS,aAAa,CAAC,KAAa,EAAE,KAAa,EAAE,MAAc;IACjE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;AACpD,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC;
|
|
1
|
+
{"version":3,"file":"kiro-cli.js","sourceRoot":"","sources":["../../../../src/commands/parse-code-tool/kiro-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import type { CodeburnOutput } from './kiro-cli.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse Kiro IDE session files into codeburn-compatible token usage.
|
|
4
|
+
* Returns a zero-usage object when the Kiro agent dir is not present.
|
|
5
|
+
*/
|
|
6
|
+
export declare function collectKiroIde(targetProject?: string, period?: string): Promise<CodeburnOutput>;
|
|
1
7
|
declare const _default: {
|
|
2
8
|
description: string;
|
|
3
9
|
options: ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro-ide.d.ts","sourceRoot":"","sources":["../../../../src/commands/parse-code-tool/kiro-ide.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kiro-ide.d.ts","sourceRoot":"","sources":["../../../../src/commands/parse-code-tool/kiro-ide.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAgOpD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,MAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CA+G5G;;;;;;;;;;;;iBASoB;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;AAPzE,wBAoBE"}
|