@prism-d1/cli 1.0.37 → 1.0.39
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/prepare-commit-msg +8 -2
- package/dist/src/commands/parse-code-tool/kiro-cli.d.ts +19 -0
- package/dist/src/commands/parse-code-tool/kiro-cli.d.ts.map +1 -0
- package/dist/src/commands/parse-code-tool/kiro-cli.js +92 -0
- package/dist/src/commands/parse-code-tool/kiro-cli.js.map +1 -0
- package/dist/src/utils/root.d.ts.map +1 -1
- package/dist/src/utils/root.js +10 -7
- package/dist/src/utils/root.js.map +1 -1
- package/package.json +1 -1
|
@@ -83,10 +83,16 @@ if [[ -n "${AI_TOOL}" ]] && (command -v codeburn &>/dev/null || command -v prism
|
|
|
83
83
|
TRACKER_DIR="${HOME}/.prism/tokentracker"
|
|
84
84
|
TRACKER_FILE="${TRACKER_DIR}/${PROJECT_BASENAME}.json"
|
|
85
85
|
|
|
86
|
-
# Kiro:
|
|
86
|
+
# Kiro: CLI (KIRO_SESSION_ID) uses kiro-cli, IDE uses kiro-ide
|
|
87
87
|
# Everything else: use codeburn
|
|
88
88
|
if [[ "${AI_TOOL}" == "kiro" ]] && command -v prism-cli &>/dev/null; then
|
|
89
|
-
|
|
89
|
+
if [[ -n "${KIRO_SESSION_ID:-}" ]]; then
|
|
90
|
+
CODEBURN_JSON=$(prism-cli parse-code-tool kiro-cli --session-id "${KIRO_SESSION_ID}" --project "${PROJECT_BASENAME}" --format json 2>/dev/null || echo "")
|
|
91
|
+
fi
|
|
92
|
+
# Fall back to kiro-ide (covers IDE env vars and CLI sessions without KIRO_SESSION_ID)
|
|
93
|
+
if [[ -z "${CODEBURN_JSON}" || "$(echo "${CODEBURN_JSON}" | jq -r '.overview.calls // 0')" == "0" ]]; then
|
|
94
|
+
CODEBURN_JSON=$(prism-cli parse-code-tool kiro-ide --project "${PROJECT_BASENAME}" --format json 2>/dev/null || echo "")
|
|
95
|
+
fi
|
|
90
96
|
elif command -v codeburn &>/dev/null; then
|
|
91
97
|
CODEBURN_JSON=$(codeburn report -p all --project "${PROJECT_FILTER}" --format json 2>/dev/null || echo "")
|
|
92
98
|
if [[ -z "${CODEBURN_JSON}" || "$(echo "${CODEBURN_JSON}" | jq -r '.overview.calls // 0')" == "0" ]]; then
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
description: string;
|
|
3
|
+
options: ({
|
|
4
|
+
flags: string;
|
|
5
|
+
description: string;
|
|
6
|
+
default?: undefined;
|
|
7
|
+
} | {
|
|
8
|
+
flags: string;
|
|
9
|
+
description: string;
|
|
10
|
+
default: string;
|
|
11
|
+
})[];
|
|
12
|
+
action(opts: {
|
|
13
|
+
sessionId?: string;
|
|
14
|
+
project?: string;
|
|
15
|
+
format: string;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
};
|
|
18
|
+
export default _default;
|
|
19
|
+
//# sourceMappingURL=kiro-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro-cli.d.ts","sourceRoot":"","sources":["../../../../src/commands/parse-code-tool/kiro-cli.ts"],"names":[],"mappings":";;;;;;;;;;;iBAqCqB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;AAP7E,wBAoEE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
const CHARS_PER_TOKEN = 4;
|
|
5
|
+
const MODEL_COSTS = {
|
|
6
|
+
'claude-sonnet-4-6': [0.003, 0.015],
|
|
7
|
+
'claude-sonnet-4-5': [0.003, 0.015],
|
|
8
|
+
'claude-sonnet-4': [0.003, 0.015],
|
|
9
|
+
'claude-haiku-4-5': [0.0008, 0.004],
|
|
10
|
+
'claude-opus-4-6': [0.015, 0.075],
|
|
11
|
+
'kiro-auto': [0.003, 0.015],
|
|
12
|
+
};
|
|
13
|
+
function calculateCost(model, input, output) {
|
|
14
|
+
const [inCost, outCost] = MODEL_COSTS[model] ?? [0.003, 0.015];
|
|
15
|
+
return (input * inCost + output * outCost) / 1000;
|
|
16
|
+
}
|
|
17
|
+
function getCliSessionsDir() {
|
|
18
|
+
return join(homedir(), '.kiro', 'sessions', 'cli');
|
|
19
|
+
}
|
|
20
|
+
export default {
|
|
21
|
+
description: 'Parse Kiro CLI session files and output token usage (codeburn-compatible JSON)',
|
|
22
|
+
options: [
|
|
23
|
+
{ flags: '--session-id <id>', description: 'Kiro CLI session ID (defaults to KIRO_SESSION_ID env)' },
|
|
24
|
+
{ flags: '--project <name>', description: 'Project name for output (defaults to basename of cwd)' },
|
|
25
|
+
{ flags: '--format <fmt>', description: 'Output format: json, summary', default: 'json' },
|
|
26
|
+
],
|
|
27
|
+
async action(opts) {
|
|
28
|
+
const sessionId = opts.sessionId || process.env.KIRO_SESSION_ID;
|
|
29
|
+
if (!sessionId) {
|
|
30
|
+
console.error('No session ID: pass --session-id or set KIRO_SESSION_ID');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
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
|
+
const text = content
|
|
60
|
+
.filter(c => c.kind === 'text' && c.data)
|
|
61
|
+
.map(c => c.data)
|
|
62
|
+
.join('');
|
|
63
|
+
if (kind === 'Prompt' || kind === 'ToolResults') {
|
|
64
|
+
inputChars += text.length;
|
|
65
|
+
}
|
|
66
|
+
else if (kind === 'AssistantMessage') {
|
|
67
|
+
outputChars += text.length;
|
|
68
|
+
calls++;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const inputTokens = Math.ceil(inputChars / CHARS_PER_TOKEN);
|
|
72
|
+
const outputTokens = Math.ceil(outputChars / CHARS_PER_TOKEN);
|
|
73
|
+
const model = 'kiro-auto';
|
|
74
|
+
const cost = calculateCost(model, inputTokens, outputTokens);
|
|
75
|
+
const projectName = opts.project || 'unknown';
|
|
76
|
+
const output = {
|
|
77
|
+
overview: { cost: Math.round(cost * 100) / 100, calls, sessions: 1 },
|
|
78
|
+
models: [{ name: model, inputTokens, outputTokens }],
|
|
79
|
+
projects: [{ name: projectName, cost: Math.round(cost * 100) / 100, calls }],
|
|
80
|
+
};
|
|
81
|
+
if (opts.format === 'summary') {
|
|
82
|
+
console.log(`Kiro CLI Token Usage (session: ${sessionId.slice(0, 8)}...)`);
|
|
83
|
+
console.log(` Calls: ${calls}`);
|
|
84
|
+
console.log(` Cost: $${output.overview.cost}`);
|
|
85
|
+
console.log(` ${model}: ${inputTokens} in / ${outputTokens} out`);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log(JSON.stringify(output, null, 2));
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=kiro-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro-cli.js","sourceRoot":"","sources":["../../../../src/commands/parse-code-tool/kiro-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/utils/root.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAmBzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/utils/root.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAmBzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAiBhF"}
|
package/dist/src/utils/root.js
CHANGED
|
@@ -32,15 +32,18 @@ export function getRepoRoot(importMetaUrl) {
|
|
|
32
32
|
* Always uses dist/assets/ from the npm package.
|
|
33
33
|
*/
|
|
34
34
|
export function getAssetPath(importMetaUrl, relativePath) {
|
|
35
|
+
// Strip leading directory prefix (e.g. 'bootstrapper/metric-hooks' -> 'metric-hooks')
|
|
36
|
+
// because the build copies into dist/assets/ without parent dirs
|
|
37
|
+
const candidates = [relativePath, relativePath.replace(/^[^/]+\//, '')];
|
|
35
38
|
let dir = dirname(fileURLToPath(importMetaUrl));
|
|
36
39
|
for (let i = 0; i < 10; i++) {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
for (const candidate of candidates) {
|
|
41
|
+
const assetsPath = resolve(dir, 'assets', candidate);
|
|
42
|
+
if (existsSync(assetsPath))
|
|
43
|
+
return assetsPath;
|
|
44
|
+
const distAssetsPath = resolve(dir, 'dist', 'assets', candidate);
|
|
45
|
+
if (existsSync(distAssetsPath))
|
|
46
|
+
return distAssetsPath;
|
|
44
47
|
}
|
|
45
48
|
dir = resolve(dir, '..');
|
|
46
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../../src/utils/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,aAAqB;IAC/C,2EAA2E;IAC3E,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,CAAC;QACb,CAAC;QACD,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,mDAAmD;IACnD,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,CAAC;QACb,CAAC;QACD,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,0DAA0D;IAC1D,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB,EAAE,YAAoB;IACtE,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../../src/utils/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,aAAqB;IAC/C,2EAA2E;IAC3E,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,CAAC;QACb,CAAC;QACD,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,mDAAmD;IACnD,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,CAAC;QACb,CAAC;QACD,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,0DAA0D;IAC1D,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB,EAAE,YAAoB;IACtE,sFAAsF;IACtF,iEAAiE;IACjE,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IAExE,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACrD,IAAI,UAAU,CAAC,UAAU,CAAC;gBAAE,OAAO,UAAU,CAAC;YAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACjE,IAAI,UAAU,CAAC,cAAc,CAAC;gBAAE,OAAO,cAAc,CAAC;QACxD,CAAC;QACD,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,oBAAoB,YAAY,8BAA8B,CAAC,CAAC;AAClF,CAAC"}
|