zelari-code 2.53.0 → 2.55.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/dist/cli/acp/command.js +5 -3
- package/dist/cli/acp/command.js.map +1 -1
- package/dist/cli/acp/framing.js +151 -19
- package/dist/cli/acp/framing.js.map +1 -1
- package/dist/cli/acp/protocol.js +4 -2
- package/dist/cli/acp/protocol.js.map +1 -1
- package/dist/cli/acp/server.js +6 -2
- package/dist/cli/acp/server.js.map +1 -1
- package/dist/cli/budget/cacheHitReport.js +94 -0
- package/dist/cli/budget/cacheHitReport.js.map +1 -0
- package/dist/cli/budget/messageUsage.js +77 -0
- package/dist/cli/budget/messageUsage.js.map +1 -0
- package/dist/cli/headless/runOneTurn.js +68 -18
- package/dist/cli/headless/runOneTurn.js.map +1 -1
- package/dist/cli/hooks/useChatTurn.js +76 -16
- package/dist/cli/hooks/useChatTurn.js.map +1 -1
- package/dist/cli/main.bundled.js +453 -59
- package/dist/cli/main.bundled.js.map +4 -4
- package/dist/cli/metrics.js.map +1 -1
- package/dist/cli/provider/anthropic.js +42 -6
- package/dist/cli/provider/anthropic.js.map +1 -1
- package/dist/cli/provider/chatgpt.js +4 -0
- package/dist/cli/provider/chatgpt.js.map +1 -1
- package/dist/cli/provider/openai-compatible.js +25 -3
- package/dist/cli/provider/openai-compatible.js.map +1 -1
- package/dist/cli/provider/responsesApi.js +4 -0
- package/dist/cli/provider/responsesApi.js.map +1 -1
- package/dist/cli/utils/doctor.js +30 -0
- package/dist/cli/utils/doctor.js.map +1 -1
- package/package.json +2 -2
package/dist/cli/acp/command.js
CHANGED
|
@@ -47,9 +47,11 @@ export function parseAcpFlags(argv) {
|
|
|
47
47
|
export function acpHelpText() {
|
|
48
48
|
return ('zelari-code acp — Agent Client Protocol server on stdio (for editors)\n' +
|
|
49
49
|
'\n' +
|
|
50
|
-
'Speaks JSON-RPC 2.0 over stdin/stdout
|
|
51
|
-
'(
|
|
52
|
-
'(
|
|
50
|
+
'Speaks JSON-RPC 2.0 over stdin/stdout as newline-delimited JSON\n' +
|
|
51
|
+
'(the ACP stdio transport, as spoken by Zed). LSP-style frames\n' +
|
|
52
|
+
'(`Content-Length: <bytes>\\r\\n\\r\\n<json>`) are also accepted and\n' +
|
|
53
|
+
'mirrored on output. Point an ACP-capable editor at this command as\n' +
|
|
54
|
+
'a custom agent server.\n' +
|
|
53
55
|
'\n' +
|
|
54
56
|
'Methods (implemented subset):\n' +
|
|
55
57
|
' initialize protocolVersion + agent capabilities\n' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/cli/acp/command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAe7C,8EAA8E;AAC9E,SAAS,aAAa,CAAC,IAAuB,EAAE,IAAY;IAC1D,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAC7E,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,IAAuB;IACnD,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;IACpE,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,GAAG,KAAK,SAAS;QAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IACrC,IAAI,KAAK,KAAK,SAAS;QAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3C,IAAI,QAAQ,KAAK,SAAS;QAAE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,CACL,yEAAyE;QACzE,IAAI;QACJ,
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/cli/acp/command.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/acp/framing.js
CHANGED
|
@@ -1,17 +1,136 @@
|
|
|
1
1
|
import { createMessageParser, encodeMessage } from '../lsp/protocol.js';
|
|
2
2
|
export { createMessageParser, encodeMessage };
|
|
3
|
+
/** Runaway-buffer guard (advisory drop, the loop keeps running). */
|
|
4
|
+
const MAX_PENDING_BYTES = 4 * 1024 * 1024;
|
|
5
|
+
const HEADER_PREFIX = 'content-length:';
|
|
6
|
+
/**
|
|
7
|
+
* Byte-accurate dual-format incremental decoder. Works on Buffers (never on
|
|
8
|
+
* pre-decoded strings) so a UTF-8 sequence split across chunk boundaries
|
|
9
|
+
* cannot corrupt a message.
|
|
10
|
+
*/
|
|
11
|
+
export function createDualWireDecoder(format) {
|
|
12
|
+
const fmt = format ?? { mode: 'ndjson' };
|
|
13
|
+
let buf = Buffer.alloc(0);
|
|
14
|
+
let locked = false;
|
|
15
|
+
const lock = (mode) => {
|
|
16
|
+
if (locked)
|
|
17
|
+
return;
|
|
18
|
+
locked = true;
|
|
19
|
+
fmt.mode = mode;
|
|
20
|
+
};
|
|
21
|
+
/** One decoding step; `false` = more input needed before progressing. */
|
|
22
|
+
const step = (out) => {
|
|
23
|
+
while (buf.length > 0 && (buf[0] === 0x0a || buf[0] === 0x0d))
|
|
24
|
+
buf = buf.subarray(1);
|
|
25
|
+
if (buf.length === 0)
|
|
26
|
+
return false;
|
|
27
|
+
// LSP-style frame: `Content-Length: <n>\r\n\r\n<exactly n bytes>`.
|
|
28
|
+
if (buf.subarray(0, HEADER_PREFIX.length).toString('latin1').toLowerCase() === HEADER_PREFIX) {
|
|
29
|
+
const sep = buf.indexOf('\r\n\r\n');
|
|
30
|
+
if (sep === -1) {
|
|
31
|
+
if (buf.length > MAX_PENDING_BYTES) {
|
|
32
|
+
out.warnings.push('runaway header block without \\r\\n\\r\\n (dropped)');
|
|
33
|
+
buf = Buffer.alloc(0);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
const header = buf.subarray(0, sep).toString('latin1');
|
|
39
|
+
const m = /content-length:\s*(\d+)/i.exec(header);
|
|
40
|
+
if (!m) {
|
|
41
|
+
out.warnings.push(`frame without a usable Content-Length: ${JSON.stringify(header.slice(0, 80))}`);
|
|
42
|
+
buf = buf.subarray(sep + 4);
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
const bodyStart = sep + 4;
|
|
46
|
+
const bodyEnd = bodyStart + Number(m[1]);
|
|
47
|
+
if (buf.length < bodyEnd)
|
|
48
|
+
return false;
|
|
49
|
+
const body = buf.subarray(bodyStart, bodyEnd).toString('utf8');
|
|
50
|
+
buf = buf.subarray(bodyEnd);
|
|
51
|
+
try {
|
|
52
|
+
out.messages.push(JSON.parse(body));
|
|
53
|
+
lock('lsp-frame');
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
out.warnings.push(`unparseable frame body (dropped): ${JSON.stringify(body.slice(0, 80))}`);
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
// NDJSON (the spec): one JSON object per line, `\n`-terminated.
|
|
61
|
+
const nl = buf.indexOf(0x0a);
|
|
62
|
+
if (nl === -1) {
|
|
63
|
+
if (buf.length > MAX_PENDING_BYTES) {
|
|
64
|
+
out.warnings.push('runaway line without a newline (dropped)');
|
|
65
|
+
buf = Buffer.alloc(0);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
const line = buf.subarray(0, nl).toString('utf8').replace(/\r+$/, '');
|
|
71
|
+
buf = buf.subarray(nl + 1);
|
|
72
|
+
if (line.trim().length === 0)
|
|
73
|
+
return true;
|
|
74
|
+
try {
|
|
75
|
+
out.messages.push(JSON.parse(line));
|
|
76
|
+
lock('ndjson');
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
out.warnings.push(`unparseable JSON line (dropped): ${JSON.stringify(line.slice(0, 80))}`);
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
};
|
|
83
|
+
const drain = () => {
|
|
84
|
+
const out = { messages: [], warnings: [] };
|
|
85
|
+
while (step(out)) {
|
|
86
|
+
/* keep draining */
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
};
|
|
90
|
+
return {
|
|
91
|
+
push(chunk) {
|
|
92
|
+
const data = typeof chunk === 'string' ? Buffer.from(chunk, 'utf8') : Buffer.from(chunk);
|
|
93
|
+
buf = buf.length === 0 ? data : Buffer.concat([buf, data]);
|
|
94
|
+
return drain();
|
|
95
|
+
},
|
|
96
|
+
/** EOF: salvage a trailing NDJSON line that lacks the final newline. */
|
|
97
|
+
flush() {
|
|
98
|
+
const out = drain();
|
|
99
|
+
if (buf.length === 0)
|
|
100
|
+
return out;
|
|
101
|
+
const line = buf.toString('utf8').trim();
|
|
102
|
+
buf = Buffer.alloc(0);
|
|
103
|
+
if (line.length > 0) {
|
|
104
|
+
try {
|
|
105
|
+
out.messages.push(JSON.parse(line));
|
|
106
|
+
lock('ndjson');
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
out.warnings.push(`unparseable JSON line at EOF (dropped): ${JSON.stringify(line.slice(0, 80))}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return out;
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
3
116
|
/**
|
|
4
117
|
* Frame writer. `sink.write` is bound HERE, at construction time, on purpose:
|
|
5
118
|
* an in-flight turn may temporarily patch `process.stdout.write` (see
|
|
6
119
|
* turnAdapter.ts — the headless dispatch writes its NDJSON stream there), and
|
|
7
120
|
* ACP frames must never be swallowed by that capture window.
|
|
121
|
+
*
|
|
122
|
+
* With a shared `format` (the same object given to the reader) the writer
|
|
123
|
+
* mirrors the inbound wire: `ndjson` after NDJSON input, LSP frames after
|
|
124
|
+
* framed input. Without one it emits LSP frames (legacy callers/tests).
|
|
8
125
|
*/
|
|
9
|
-
export function createFrameWriter(sink, onError) {
|
|
126
|
+
export function createFrameWriter(sink, onError, format) {
|
|
10
127
|
const write = sink.write.bind(sink);
|
|
11
128
|
return {
|
|
12
129
|
write(message) {
|
|
13
130
|
try {
|
|
14
|
-
write(
|
|
131
|
+
write(format && format.mode === 'ndjson'
|
|
132
|
+
? `${JSON.stringify(message)}\n`
|
|
133
|
+
: encodeMessage(message));
|
|
15
134
|
}
|
|
16
135
|
catch (err) {
|
|
17
136
|
try {
|
|
@@ -49,13 +168,13 @@ export function malformedFrameWarnings(chunk) {
|
|
|
49
168
|
}
|
|
50
169
|
}
|
|
51
170
|
/**
|
|
52
|
-
* Attach the
|
|
53
|
-
* irrelevant: partial frames are buffered, several
|
|
54
|
-
* delivered, and a throwing `onMessage` is contained (it cannot
|
|
55
|
-
* stream).
|
|
171
|
+
* Attach the dual-format decoder to a readable stream. Chunk boundaries are
|
|
172
|
+
* irrelevant: partial lines/frames are buffered, several messages per chunk
|
|
173
|
+
* are all delivered, and a throwing `onMessage` is contained (it cannot
|
|
174
|
+
* desync the stream).
|
|
56
175
|
*/
|
|
57
176
|
export function attachFrameReader(stream, options) {
|
|
58
|
-
const parser =
|
|
177
|
+
const parser = createDualWireDecoder(options.format);
|
|
59
178
|
let closed = false;
|
|
60
179
|
const report = (detail) => {
|
|
61
180
|
try {
|
|
@@ -65,10 +184,28 @@ export function attachFrameReader(stream, options) {
|
|
|
65
184
|
/* diagnostics must never throw */
|
|
66
185
|
}
|
|
67
186
|
};
|
|
187
|
+
const deliver = (message) => {
|
|
188
|
+
try {
|
|
189
|
+
options.onMessage(message);
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
report(`consumer error: ${err instanceof Error ? err.message : String(err)}`);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
68
195
|
const finish = () => {
|
|
69
196
|
if (closed)
|
|
70
197
|
return;
|
|
71
198
|
closed = true;
|
|
199
|
+
try {
|
|
200
|
+
const rest = parser.flush();
|
|
201
|
+
for (const warning of rest.warnings)
|
|
202
|
+
report(warning);
|
|
203
|
+
for (const message of rest.messages)
|
|
204
|
+
deliver(message);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
/* EOF salvage is best-effort */
|
|
208
|
+
}
|
|
72
209
|
try {
|
|
73
210
|
options.onEof();
|
|
74
211
|
}
|
|
@@ -77,30 +214,25 @@ export function attachFrameReader(stream, options) {
|
|
|
77
214
|
}
|
|
78
215
|
};
|
|
79
216
|
const onData = (chunk) => {
|
|
80
|
-
for (const warning of malformedFrameWarnings(chunk))
|
|
217
|
+
for (const warning of malformedFrameWarnings(chunk.toString('utf8')))
|
|
81
218
|
report(warning);
|
|
82
|
-
let
|
|
219
|
+
let decoded;
|
|
83
220
|
try {
|
|
84
|
-
|
|
221
|
+
decoded = parser.push(chunk);
|
|
85
222
|
}
|
|
86
223
|
catch (err) {
|
|
87
224
|
report(`decoder error: ${err instanceof Error ? err.message : String(err)}`);
|
|
88
225
|
return;
|
|
89
226
|
}
|
|
90
|
-
for (const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
catch (err) {
|
|
95
|
-
report(`consumer error: ${err instanceof Error ? err.message : String(err)}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
227
|
+
for (const warning of decoded.warnings)
|
|
228
|
+
report(warning);
|
|
229
|
+
for (const message of decoded.messages)
|
|
230
|
+
deliver(message);
|
|
98
231
|
};
|
|
99
232
|
const onError = (err) => {
|
|
100
233
|
report(`stdin error: ${err.message}`);
|
|
101
234
|
finish();
|
|
102
235
|
};
|
|
103
|
-
stream.setEncoding('utf8');
|
|
104
236
|
stream.on('data', onData);
|
|
105
237
|
stream.on('end', finish);
|
|
106
238
|
stream.on('close', finish);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framing.js","sourceRoot":"","sources":["../../../src/cli/acp/framing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"framing.js","sourceRoot":"","sources":["../../../src/cli/acp/framing.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/acp/protocol.js
CHANGED
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
* acp/protocol — the ACP subset served by `zelari-code acp`.
|
|
3
3
|
*
|
|
4
4
|
* Agent Client Protocol front door for editors (Zed and any client that
|
|
5
|
-
* speaks ACP): JSON-RPC 2.0 over stdio
|
|
6
|
-
*
|
|
5
|
+
* speaks ACP): JSON-RPC 2.0 over stdio as newline-delimited JSON (the ACP
|
|
6
|
+
* stdio spec — as spoken by Zed); LSP-style frames are also accepted and
|
|
7
|
+
* mirrored on output (see framing.ts). Implemented by hand — ZERO new
|
|
8
|
+
* dependencies (P5).
|
|
7
9
|
*
|
|
8
10
|
* ---------------------------------------------------------------------------
|
|
9
11
|
* INBOUND (client -> agent)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/cli/acp/protocol.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/cli/acp/protocol.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/acp/server.js
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* Protocol subset + explicit non-goals: see the header of protocol.ts.
|
|
19
19
|
*/
|
|
20
20
|
import { randomUUID } from 'node:crypto';
|
|
21
|
-
import { attachFrameReader, createFrameWriter } from './framing.js';
|
|
21
|
+
import { attachFrameReader, createFrameWriter, } from './framing.js';
|
|
22
22
|
import { ACP_ERROR_CODES, AcpError, JSON_RPC_ERRORS, parseJsonRpcMessage, readInitializeParams, readPromptParams, readSessionIdParams, readSessionNewParams, sessionUpdateNotification, } from './protocol.js';
|
|
23
23
|
import { createTurnStream } from './invariants.js';
|
|
24
24
|
/** Agent capabilities advertised on `initialize` (no reverse requests). */
|
|
@@ -54,11 +54,15 @@ export function startAcpServer(deps) {
|
|
|
54
54
|
const log = deps.log ?? ((line) => process.stderr.write(`${line}\n`));
|
|
55
55
|
const sessions = new Map();
|
|
56
56
|
let closed = false;
|
|
57
|
+
// Shared wire format: NDJSON per the ACP stdio spec (what Zed speaks);
|
|
58
|
+
// LSP-style frames are auto-detected on input and mirrored on output.
|
|
59
|
+
const format = { mode: 'ndjson' };
|
|
57
60
|
// The frame writer binds sink.write NOW (framing.ts): a turn's stdout
|
|
58
61
|
// capture (turnAdapter.ts) can never swallow a JSON-RPC frame.
|
|
59
|
-
const writer = createFrameWriter(deps.output ?? process.stdout, (message) => log(`[zelari-code acp] stdout write failed: ${message}`));
|
|
62
|
+
const writer = createFrameWriter(deps.output ?? process.stdout, (message) => log(`[zelari-code acp] stdout write failed: ${message}`), format);
|
|
60
63
|
const shutdownWaiters = [];
|
|
61
64
|
const reader = attachFrameReader(input, {
|
|
65
|
+
format,
|
|
62
66
|
onMessage: (raw) => {
|
|
63
67
|
void handleMessage(raw);
|
|
64
68
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/acp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/acp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cacheHitReport — offline prompt-cache aggregation over `metrics.jsonl` (M1.2).
|
|
3
|
+
*
|
|
4
|
+
* Cache-hit-rate plan (`.zelari/docs/2026-09-18-cache-hit-rate-piano-implementazione.md`):
|
|
5
|
+
* folds the provider-verified `kind: 'message'` rows written by
|
|
6
|
+
* `recordMessageUsage` into the number the plan is measured against —
|
|
7
|
+
*
|
|
8
|
+
* hit% = cachedPromptTokens / promptTokens (overall + per provider/model)
|
|
9
|
+
*
|
|
10
|
+
* Pure functions (no fs, no clock) so the aggregation is unit-testable;
|
|
11
|
+
* `utils/doctor.ts` reads the shared metrics file and wires them in — same
|
|
12
|
+
* shape as `utils/contextGrowthSummary.ts`, which does this for `kind: 'run'`.
|
|
13
|
+
*/
|
|
14
|
+
/** A row is usable only when we know how many prompt tokens were billed. */
|
|
15
|
+
function billable(record) {
|
|
16
|
+
return typeof record.promptTokens === 'number' && record.promptTokens > 0;
|
|
17
|
+
}
|
|
18
|
+
function num(value) {
|
|
19
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : 0;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Fold the last `window` usable `kind: 'message'` rows into a summary.
|
|
23
|
+
*
|
|
24
|
+
* Returns `null` when NO row carries a prompt-token count — i.e. no session
|
|
25
|
+
* has produced the M1.1 telemetry yet (fresh install, or every session
|
|
26
|
+
* predates it). Callers must surface that as "no data", never as 0%: a fake
|
|
27
|
+
* zero would read as "the cache is useless" instead of "not measured".
|
|
28
|
+
*/
|
|
29
|
+
export function summarizeCacheHits(records, window = 500) {
|
|
30
|
+
const usable = records.filter(billable);
|
|
31
|
+
if (usable.length === 0)
|
|
32
|
+
return null;
|
|
33
|
+
const tail = usable.slice(-window);
|
|
34
|
+
const rows = new Map();
|
|
35
|
+
let promptTokens = 0;
|
|
36
|
+
let cachedPromptTokens = 0;
|
|
37
|
+
for (const record of tail) {
|
|
38
|
+
const provider = record.provider ?? 'unknown';
|
|
39
|
+
const model = record.model ?? 'unknown';
|
|
40
|
+
const prompt = num(record.promptTokens);
|
|
41
|
+
// Clamp: cached is a subset of prompt, so a bad row can't push hit% > 100.
|
|
42
|
+
const cached = Math.min(num(record.cachedPromptTokens), prompt);
|
|
43
|
+
promptTokens += prompt;
|
|
44
|
+
cachedPromptTokens += cached;
|
|
45
|
+
const key = `${provider}::${model}`;
|
|
46
|
+
const row = rows.get(key) ?? {
|
|
47
|
+
provider,
|
|
48
|
+
model,
|
|
49
|
+
messages: 0,
|
|
50
|
+
promptTokens: 0,
|
|
51
|
+
cachedPromptTokens: 0,
|
|
52
|
+
hitRate: 0,
|
|
53
|
+
};
|
|
54
|
+
row.messages += 1;
|
|
55
|
+
row.promptTokens += prompt;
|
|
56
|
+
row.cachedPromptTokens += cached;
|
|
57
|
+
row.hitRate = row.promptTokens > 0 ? row.cachedPromptTokens / row.promptTokens : 0;
|
|
58
|
+
rows.set(key, row);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
messages: tail.length,
|
|
62
|
+
promptTokens,
|
|
63
|
+
cachedPromptTokens,
|
|
64
|
+
hitRate: promptTokens > 0 ? cachedPromptTokens / promptTokens : 0,
|
|
65
|
+
byModel: [...rows.values()].sort((a, b) => b.promptTokens - a.promptTokens),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function fmtTokens(n) {
|
|
69
|
+
return n.toLocaleString('en-US');
|
|
70
|
+
}
|
|
71
|
+
function fmtRate(rate) {
|
|
72
|
+
return `${(rate * 100).toFixed(1)}%`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Human-readable doctor lines: one summary line + a top-models line.
|
|
76
|
+
* The plan's target (`hit% >= 60%` from turn 2 on DeepSeek) is a
|
|
77
|
+
* post-M2 expectation, so it is stated as context, not as a gate.
|
|
78
|
+
*/
|
|
79
|
+
export function formatCacheHitSummary(summary, top = 3) {
|
|
80
|
+
const lines = [
|
|
81
|
+
`messages ${summary.messages} · prompt ${fmtTokens(summary.promptTokens)} tokens · ` +
|
|
82
|
+
`cached ${fmtTokens(summary.cachedPromptTokens)} · hit ${fmtRate(summary.hitRate)}`,
|
|
83
|
+
];
|
|
84
|
+
const rows = summary.byModel.slice(0, top);
|
|
85
|
+
if (rows.length > 0) {
|
|
86
|
+
lines.push('top models: ' +
|
|
87
|
+
rows
|
|
88
|
+
.map((r) => `${r.provider}/${r.model} ${fmtRate(r.hitRate)} ` +
|
|
89
|
+
`(${r.messages} msg · ${fmtTokens(r.promptTokens)} prompt)`)
|
|
90
|
+
.join(' · '));
|
|
91
|
+
}
|
|
92
|
+
return lines;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=cacheHitReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheHitReport.js","sourceRoot":"","sources":["../../../src/cli/budget/cacheHitReport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* messageUsage — provider-verified usage on the process metrics log (M1.1).
|
|
3
|
+
*
|
|
4
|
+
* Cache-hit-rate plan (`.zelari/docs/2026-09-18-cache-hit-rate-piano-implementazione.md`):
|
|
5
|
+
* every LLM call appends ONE `kind: 'message'` row carrying the numbers the
|
|
6
|
+
* provider actually returned — never the ~4-char/token approximation:
|
|
7
|
+
*
|
|
8
|
+
* { kind: 'message', ts, sessionId, provider, model,
|
|
9
|
+
* promptTokens, completionTokens, cachedPromptTokens, costUsd }
|
|
10
|
+
*
|
|
11
|
+
* Why a dedicated record instead of enriching `kind: 'run'`: a run folds a
|
|
12
|
+
* whole turn (every tool-loop iteration) into a single row, so the per-call
|
|
13
|
+
* cache trajectory inside a turn — the thing the plan optimizes — is
|
|
14
|
+
* unrecoverable. Usage inside `assistant.message` on the session spine stays
|
|
15
|
+
* backlog (M4, needs an ADR-0021 contract check).
|
|
16
|
+
*
|
|
17
|
+
* The row rides the shared `MetricsLogger` singleton: same file
|
|
18
|
+
* (`~/.zelari-code/metrics.jsonl`, override `ANATHEMA_METRICS_FILE`), same
|
|
19
|
+
* rotation, same fire-and-forget queue. Short-lived processes (headless runs)
|
|
20
|
+
* must await {@link flushMessageUsage} before returning so the last row lands.
|
|
21
|
+
*
|
|
22
|
+
* Best-effort by contract: telemetry never breaks a turn.
|
|
23
|
+
*/
|
|
24
|
+
import { getMetricsLogger } from '../metrics.js';
|
|
25
|
+
import { calculateCost } from '../modelPricing.js';
|
|
26
|
+
/** Coerce a provider counter (possibly absent/NaN/negative) to a safe >= 0 int. */
|
|
27
|
+
function counter(value) {
|
|
28
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0
|
|
29
|
+
? Math.round(value)
|
|
30
|
+
: 0;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Persist one `kind: 'message'` row computed from provider-reported usage.
|
|
34
|
+
*
|
|
35
|
+
* `cachedPromptTokens` is a SUBSET of `promptTokens` by definition: we clamp
|
|
36
|
+
* it so a chatty gateway can never produce a hit rate above 100%.
|
|
37
|
+
*/
|
|
38
|
+
export function recordMessageUsage(input) {
|
|
39
|
+
try {
|
|
40
|
+
const promptTokens = counter(input.promptTokens);
|
|
41
|
+
const completionTokens = counter(input.completionTokens);
|
|
42
|
+
const cachedPromptTokens = Math.min(counter(input.cachedPromptTokens), promptTokens);
|
|
43
|
+
const model = input.model ?? '';
|
|
44
|
+
const record = {
|
|
45
|
+
kind: 'message',
|
|
46
|
+
ts: input.ts ?? Date.now(),
|
|
47
|
+
...(input.sessionId ? { sessionId: input.sessionId } : {}),
|
|
48
|
+
...(input.provider ? { provider: input.provider } : {}),
|
|
49
|
+
...(model ? { model } : {}),
|
|
50
|
+
promptTokens,
|
|
51
|
+
completionTokens,
|
|
52
|
+
cachedPromptTokens,
|
|
53
|
+
costUsd: calculateCost(model, promptTokens, completionTokens, cachedPromptTokens),
|
|
54
|
+
};
|
|
55
|
+
// Bound to a typed local (not an inline literal) on purpose: the persisted
|
|
56
|
+
// row stays pinned to `MessageUsageRecord` — the subset of `MetricsRecord`
|
|
57
|
+
// (`kind: 'message'`) that `--doctor` aggregates in M1.2.
|
|
58
|
+
getMetricsLogger().record(record);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Fire-and-forget telemetry — a metrics failure must never fail a turn.
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Drain the metrics write queue so the rows emitted by
|
|
66
|
+
* {@link recordMessageUsage} reach disk before this process exits.
|
|
67
|
+
* Never throws: a failed flush degrades to "no data" in `--doctor`.
|
|
68
|
+
*/
|
|
69
|
+
export async function flushMessageUsage() {
|
|
70
|
+
try {
|
|
71
|
+
await getMetricsLogger().flush();
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Best-effort: see doc comment above.
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=messageUsage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageUsage.js","sourceRoot":"","sources":["../../../src/cli/budget/messageUsage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAqCnD,mFAAmF;AACnF,SAAS,OAAO,CAAC,KAAyB;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QACrE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACnB,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAwB;IACzD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,YAAY,CAAC,CAAC;QACrF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,MAAM,GAAuB;YACjC,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;YAC1B,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,YAAY;YACZ,gBAAgB;YAChB,kBAAkB;YAClB,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,CAAC;SAClF,CAAC;QACF,2EAA2E;QAC3E,2EAA2E;QAC3E,0DAA0D;QAC1D,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;IAC1E,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,MAAM,gBAAgB,EAAE,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;AACH,CAAC"}
|