@rasensio/aidlc 1.13.1 → 1.14.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/commands/cost.d.ts.map +1 -1
- package/dist/commands/cost.js +16 -2
- package/dist/commands/cost.js.map +1 -1
- package/dist/cost/ledger.d.ts.map +1 -1
- package/dist/cost/ledger.js +9 -0
- package/dist/cost/ledger.js.map +1 -1
- package/dist/cost/provenance.d.ts +80 -0
- package/dist/cost/provenance.d.ts.map +1 -0
- package/dist/cost/provenance.js +192 -0
- package/dist/cost/provenance.js.map +1 -0
- package/dist/cost/providers/claude-code.d.ts.map +1 -1
- package/dist/cost/providers/claude-code.js +24 -1
- package/dist/cost/providers/claude-code.js.map +1 -1
- package/dist/cost/purge.d.ts +65 -0
- package/dist/cost/purge.d.ts.map +1 -0
- package/dist/cost/purge.js +152 -0
- package/dist/cost/purge.js.map +1 -0
- package/dist/cost/recorder.d.ts +36 -1
- package/dist/cost/recorder.d.ts.map +1 -1
- package/dist/cost/recorder.js +112 -6
- package/dist/cost/recorder.js.map +1 -1
- package/dist/cost/rederive.d.ts +80 -0
- package/dist/cost/rederive.d.ts.map +1 -0
- package/dist/cost/rederive.js +257 -0
- package/dist/cost/rederive.js.map +1 -0
- package/dist/cost/report.d.ts +17 -0
- package/dist/cost/report.d.ts.map +1 -1
- package/dist/cost/report.js +49 -1
- package/dist/cost/report.js.map +1 -1
- package/dist/cost/sync.d.ts.map +1 -1
- package/dist/cost/sync.js +166 -40
- package/dist/cost/sync.js.map +1 -1
- package/dist/cost/types.d.ts +45 -1
- package/dist/cost/types.d.ts.map +1 -1
- package/dist/cost/types.js +16 -2
- package/dist/cost/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-derive the `phase` label on ledger entries written before `phaseWindows` was
|
|
3
|
+
* fixed.
|
|
4
|
+
*
|
|
5
|
+
* That function read the wrong field name, returned one window covering all time,
|
|
6
|
+
* and every call site seeds `'implementation'` — so 18 of 19 instances had 100% of
|
|
7
|
+
* their priced usage mislabelled. Fixing the reader corrects attribution going
|
|
8
|
+
* forward; this corrects what is already on disk.
|
|
9
|
+
*
|
|
10
|
+
* Two paths, chosen per entry:
|
|
11
|
+
*
|
|
12
|
+
* - **Relabel** when the entry's coverage falls inside a single corrected window.
|
|
13
|
+
* Post-purge that is 4,134 entries, and it needs no transcript at all.
|
|
14
|
+
* - **Split** when coverage spans several windows. Six entries, all `metered` bulk
|
|
15
|
+
* captures, holding 28.8% of all priced tokens — one spans 55.2h and 480.5M
|
|
16
|
+
* tokens. These are re-read from their source transcript so each record lands in
|
|
17
|
+
* the phase it actually occurred in.
|
|
18
|
+
*
|
|
19
|
+
* The split is arithmetic, not estimation: **bounded by the entry's own coverage
|
|
20
|
+
* window**, all six reconcile to their transcripts to the digit. That bound is
|
|
21
|
+
* load-bearing — one entry's cursor sits in a 633-record transcript while the entry
|
|
22
|
+
* covers only 80 of them (5,132,819 of 119,105,507 tokens), so splitting on the
|
|
23
|
+
* whole file would have inflated it 23×.
|
|
24
|
+
*
|
|
25
|
+
* Three invariants, each learned from a defect rather than assumed:
|
|
26
|
+
*
|
|
27
|
+
* 1. **Split output is zero-width** (`from === to`, the record's instant).
|
|
28
|
+
* `applyPrecedence` reduces overlap only *across* fidelity ranks, so ~1,245
|
|
29
|
+
* same-fidelity entries with real windows would double-count each other.
|
|
30
|
+
* 2. **A record inside two instances' claims goes to `unattributed.ndjson`**, never
|
|
31
|
+
* to both. This is the `cost-claim-attribution` safeguard, and it is not
|
|
32
|
+
* hypothetical: 377 records / 211.1M tokens in one split target sit inside two
|
|
33
|
+
* claim windows.
|
|
34
|
+
* 3. **Verification is on precedence-weighted dollars, not raw token sums.** Raw
|
|
35
|
+
* sums can balance while weighted totals move — the exact shape of the defect
|
|
36
|
+
* that reported a plausible total while double-counting 950 entries.
|
|
37
|
+
*
|
|
38
|
+
* Requirements: turn-scoped-cost/AC-9 … AC-15, AC-35 … AC-37, AC-40
|
|
39
|
+
* Design: design.md Part 2
|
|
40
|
+
*/
|
|
41
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
42
|
+
import { join } from 'node:path';
|
|
43
|
+
import { readEntries, rewriteLedger, appendEntry, ledgerPath, unattributedPath, } from './ledger.js';
|
|
44
|
+
import { sessionsPath, readSessionEvents, resolveIntervals } from './sessions.js';
|
|
45
|
+
import { phaseWindows } from './recorder.js';
|
|
46
|
+
import { claudeCodeProvider } from './providers/claude-code.js';
|
|
47
|
+
import { buildProvenanceIndex } from './provenance.js';
|
|
48
|
+
function tokensOf(e) {
|
|
49
|
+
if (e.units === null || e.units.kind !== 'tokens')
|
|
50
|
+
return 0;
|
|
51
|
+
const u = e.units;
|
|
52
|
+
return u.input_tokens + u.output_tokens + u.cache_read_tokens + u.cache_write_tokens;
|
|
53
|
+
}
|
|
54
|
+
/** Distinct phases an entry's coverage window touches. */
|
|
55
|
+
export function phasesSpanned(e, windows) {
|
|
56
|
+
const from = Date.parse(e.coverage.from);
|
|
57
|
+
const to = Date.parse(e.coverage.to);
|
|
58
|
+
const hit = new Set();
|
|
59
|
+
for (const w of windows) {
|
|
60
|
+
if (from < w.to && to >= w.from)
|
|
61
|
+
hit.add(w.phase);
|
|
62
|
+
}
|
|
63
|
+
return [...hit];
|
|
64
|
+
}
|
|
65
|
+
function phaseAt(windows, at) {
|
|
66
|
+
for (const w of windows) {
|
|
67
|
+
if (at >= w.from && at < w.to)
|
|
68
|
+
return w.phase;
|
|
69
|
+
}
|
|
70
|
+
return windows.length > 0 ? windows[windows.length - 1].phase : null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Instances whose claim intervals contain `at`.
|
|
74
|
+
*
|
|
75
|
+
* Returning the full list rather than a single answer is deliberate: the caller
|
|
76
|
+
* must be able to tell "exactly one" from "several", because the second case is the
|
|
77
|
+
* one that must never be attributed.
|
|
78
|
+
*/
|
|
79
|
+
function claimantsAt(at, intervalsByInstance) {
|
|
80
|
+
const out = [];
|
|
81
|
+
for (const [instance, intervals] of intervalsByInstance) {
|
|
82
|
+
if (intervals.some((iv) => at >= Date.parse(iv.from) && at <= Date.parse(iv.to))) {
|
|
83
|
+
out.push(instance);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
/** Locate the transcript file holding `cursor`, or null when it is gone. */
|
|
89
|
+
function fileForCursor(cursor, index) {
|
|
90
|
+
if (cursor === null)
|
|
91
|
+
return null;
|
|
92
|
+
const files = index.get(cursor);
|
|
93
|
+
if (files === undefined || files.size !== 1)
|
|
94
|
+
return null;
|
|
95
|
+
return [...files][0];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Re-derive every instance ledger.
|
|
99
|
+
*
|
|
100
|
+
* `provenanceFiles` maps a cursor to the transcript *path* containing it — a
|
|
101
|
+
* different index from `provenance.ts`'s repo-identity map, built here because the
|
|
102
|
+
* split needs the file itself.
|
|
103
|
+
*/
|
|
104
|
+
export async function rederivePhases(projectRoot, claimTimeoutMinutes, env = { projectRoot }, provenanceFiles) {
|
|
105
|
+
const report = {
|
|
106
|
+
relabelled: 0,
|
|
107
|
+
split: 0,
|
|
108
|
+
splitRecords: 0,
|
|
109
|
+
toUnattributed: 0,
|
|
110
|
+
unsplittable: [],
|
|
111
|
+
manualSkipped: 0,
|
|
112
|
+
tokensBefore: 0,
|
|
113
|
+
tokensAfter: 0,
|
|
114
|
+
};
|
|
115
|
+
const stateDir = join(projectRoot, '.aidlc', 'state');
|
|
116
|
+
if (!existsSync(stateDir))
|
|
117
|
+
return report;
|
|
118
|
+
const instances = readdirSync(stateDir, { withFileTypes: true })
|
|
119
|
+
.filter((d) => d.isDirectory())
|
|
120
|
+
.map((d) => d.name)
|
|
121
|
+
.filter((n) => existsSync(ledgerPath(projectRoot, n)));
|
|
122
|
+
const cursorFiles = provenanceFiles ?? buildCursorFileIndex(env);
|
|
123
|
+
// Claim intervals for EVERY instance, so "inside two claims" is detectable.
|
|
124
|
+
const intervalsByInstance = new Map();
|
|
125
|
+
for (const instance of readdirSync(stateDir, { withFileTypes: true })
|
|
126
|
+
.filter((d) => d.isDirectory())
|
|
127
|
+
.map((d) => d.name)) {
|
|
128
|
+
intervalsByInstance.set(instance, resolveIntervals(readSessionEvents(sessionsPath(projectRoot, instance)), claimTimeoutMinutes));
|
|
129
|
+
}
|
|
130
|
+
for (const instance of instances) {
|
|
131
|
+
const file = ledgerPath(projectRoot, instance);
|
|
132
|
+
const entries = readEntries(file);
|
|
133
|
+
const windows = phaseWindows(projectRoot, instance, 'implementation');
|
|
134
|
+
const kept = [];
|
|
135
|
+
let changed = false;
|
|
136
|
+
for (const e of entries) {
|
|
137
|
+
report.tokensBefore += tokensOf(e);
|
|
138
|
+
// A human placed these deliberately via `cost record --manual`; a window
|
|
139
|
+
// computation must not overrule them (AC-40).
|
|
140
|
+
if (e.provider === 'manual') {
|
|
141
|
+
report.manualSkipped++;
|
|
142
|
+
kept.push(e);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
// `unknown`-fidelity markers carry no units and no money.
|
|
146
|
+
if (e.units === null) {
|
|
147
|
+
kept.push(e);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const spanned = phasesSpanned(e, windows);
|
|
151
|
+
if (spanned.length <= 1) {
|
|
152
|
+
const target = spanned[0] ?? e.phase;
|
|
153
|
+
if (target !== e.phase) {
|
|
154
|
+
kept.push({ ...e, phase: target });
|
|
155
|
+
report.relabelled++;
|
|
156
|
+
changed = true;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
kept.push(e);
|
|
160
|
+
}
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
// Spans several phases: only the transcript knows which record went where.
|
|
164
|
+
const source = fileForCursor(e.cursor, cursorFiles);
|
|
165
|
+
if (source === null) {
|
|
166
|
+
// AC-12: absence of source data is never resolved by picking a phase.
|
|
167
|
+
report.unsplittable.push(`${instance}: cursor ${e.cursor ?? 'null'} has no unique transcript`);
|
|
168
|
+
kept.push(e);
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
let segments;
|
|
172
|
+
try {
|
|
173
|
+
segments = await claudeCodeProvider.extract({ provider: 'claude-code', path: source }, null, env);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
report.unsplittable.push(`${instance}: extract failed for ${source}`);
|
|
177
|
+
kept.push(e);
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
// Bound by the entry's OWN coverage window. One entry's cursor sits in a
|
|
181
|
+
// 633-record transcript while the entry covers 80 of them — splitting on the
|
|
182
|
+
// whole file would inflate it 23x.
|
|
183
|
+
const lo = Date.parse(e.coverage.from);
|
|
184
|
+
const hi = Date.parse(e.coverage.to);
|
|
185
|
+
const mine = segments.filter((s) => {
|
|
186
|
+
const at = Date.parse(s.at);
|
|
187
|
+
return at >= lo && at <= hi;
|
|
188
|
+
});
|
|
189
|
+
if (mine.length === 0) {
|
|
190
|
+
report.unsplittable.push(`${instance}: no records inside coverage for ${e.cursor ?? 'null'}`);
|
|
191
|
+
kept.push(e);
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
for (const seg of mine) {
|
|
195
|
+
const at = Date.parse(seg.at);
|
|
196
|
+
const claimants = claimantsAt(at, intervalsByInstance);
|
|
197
|
+
// Exactly one claimant attributes; none or several cannot be assigned
|
|
198
|
+
// without guessing (AC-15, AC-28).
|
|
199
|
+
const owner = claimants.length === 1 ? claimants[0] : null;
|
|
200
|
+
const split = {
|
|
201
|
+
timestamp: e.timestamp,
|
|
202
|
+
session_id: e.session_id,
|
|
203
|
+
phase: owner === instance ? phaseAt(windows, at) : null,
|
|
204
|
+
provider: e.provider,
|
|
205
|
+
fidelity: e.fidelity,
|
|
206
|
+
// Zero-width, so same-fidelity siblings cannot overlap (AC-36).
|
|
207
|
+
coverage: { from: seg.at, to: seg.at },
|
|
208
|
+
cursor: seg.cursor,
|
|
209
|
+
units: seg.units,
|
|
210
|
+
};
|
|
211
|
+
if (owner === instance) {
|
|
212
|
+
kept.push(split);
|
|
213
|
+
report.splitRecords++;
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
appendEntry(unattributedPath(projectRoot), { ...split, phase: null });
|
|
217
|
+
report.toUnattributed++;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
report.split++;
|
|
221
|
+
changed = true;
|
|
222
|
+
}
|
|
223
|
+
for (const e of kept)
|
|
224
|
+
report.tokensAfter += tokensOf(e);
|
|
225
|
+
if (changed)
|
|
226
|
+
rewriteLedger(file, kept);
|
|
227
|
+
}
|
|
228
|
+
return report;
|
|
229
|
+
}
|
|
230
|
+
/** Cursor uuid → the single transcript path containing it. */
|
|
231
|
+
export function buildCursorFileIndex(env) {
|
|
232
|
+
// Reuse the provenance walk, but key on file path rather than repo identity.
|
|
233
|
+
return buildProvenanceIndex(env, (path) => path);
|
|
234
|
+
}
|
|
235
|
+
/** Sum priced tokens across every ledger plus unattributed (AC-35). */
|
|
236
|
+
export function projectTokenTotal(projectRoot) {
|
|
237
|
+
let total = 0;
|
|
238
|
+
const stateDir = join(projectRoot, '.aidlc', 'state');
|
|
239
|
+
if (existsSync(stateDir)) {
|
|
240
|
+
for (const d of readdirSync(stateDir, { withFileTypes: true })) {
|
|
241
|
+
if (!d.isDirectory())
|
|
242
|
+
continue;
|
|
243
|
+
const p = ledgerPath(projectRoot, d.name);
|
|
244
|
+
if (!existsSync(p))
|
|
245
|
+
continue;
|
|
246
|
+
for (const e of readEntries(p))
|
|
247
|
+
total += tokensOf(e);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
const un = unattributedPath(projectRoot);
|
|
251
|
+
if (existsSync(un)) {
|
|
252
|
+
for (const e of readEntries(un))
|
|
253
|
+
total += tokensOf(e);
|
|
254
|
+
}
|
|
255
|
+
return total;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=rederive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rederive.js","sourceRoot":"","sources":["../../src/cost/rederive.ts"],"names":[],"mappings":"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"}
|
package/dist/cost/report.d.ts
CHANGED
|
@@ -15,6 +15,19 @@ export interface PhaseCost {
|
|
|
15
15
|
tokens: number;
|
|
16
16
|
credits: number;
|
|
17
17
|
elapsedSeconds: number;
|
|
18
|
+
/**
|
|
19
|
+
* Seconds of measured *active* work, or null when nothing in this phase carried
|
|
20
|
+
* a span (turn-scoped-cost/AC-21). `activePartial` marks a total measured from
|
|
21
|
+
* only some of the phase's entries — a floor, not a measurement.
|
|
22
|
+
*
|
|
23
|
+
* Reported **alongside** `elapsedSeconds`, never instead of it. Both are true and
|
|
24
|
+
* they answer different questions: elapsed is how long the phase took, active is
|
|
25
|
+
* how much of that was the agent working. A phase that waited a day for a human
|
|
26
|
+
* genuinely took a day — `aidlc metrics` reads elapsed for exactly that reason —
|
|
27
|
+
* while its cost was incurred in minutes.
|
|
28
|
+
*/
|
|
29
|
+
activeSeconds: number | null;
|
|
30
|
+
activePartial: boolean;
|
|
18
31
|
}
|
|
19
32
|
export interface InstanceCost {
|
|
20
33
|
instance: string;
|
|
@@ -24,6 +37,10 @@ export interface InstanceCost {
|
|
|
24
37
|
tokens: number;
|
|
25
38
|
credits: number;
|
|
26
39
|
elapsedSeconds: number;
|
|
40
|
+
/** Summed active seconds across phases, or null when nothing was measured. */
|
|
41
|
+
activeSeconds: number | null;
|
|
42
|
+
/** True when only some priced entries carried a span — the total is a floor. */
|
|
43
|
+
activePartial: boolean;
|
|
27
44
|
fidelityMix: Record<CostFidelity, number>;
|
|
28
45
|
phases: PhaseCost[];
|
|
29
46
|
snapshot: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cost/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cost/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;;;;OAUG;IACH,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gFAAgF;IAChF,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAwGD,kDAAkD;AAClD,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,GAAG,IAAI,GACxB,YAAY,CA8Ed;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAO3D;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,cAAc,EAAE,CAoB3F;AAED,0DAA0D;AAC1D,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,CAEpE"}
|
package/dist/cost/report.js
CHANGED
|
@@ -74,6 +74,39 @@ function instanceTemplate(projectRoot, instance) {
|
|
|
74
74
|
return null;
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Summed `active_ms` over entries that carry it, as seconds — or null when none do.
|
|
79
|
+
*
|
|
80
|
+
* Null rather than 0 is the whole point: "we did not measure this" and "no time was
|
|
81
|
+
* spent" are different claims, and every entry written before `active_ms` existed
|
|
82
|
+
* falls into the first. Zero-filling would quietly report months of historical work
|
|
83
|
+
* as instantaneous.
|
|
84
|
+
*
|
|
85
|
+
* Weight is deliberately NOT applied. `active_ms` is a duration, not a quantity of
|
|
86
|
+
* units — halving a token count because higher-fidelity coverage overlaps is
|
|
87
|
+
* meaningful, halving a duration is not.
|
|
88
|
+
*/
|
|
89
|
+
function activeSecondsOf(weighted) {
|
|
90
|
+
let ms = 0;
|
|
91
|
+
let measured = 0;
|
|
92
|
+
let priced = 0;
|
|
93
|
+
for (const { entry } of weighted) {
|
|
94
|
+
if (entry.units === null)
|
|
95
|
+
continue;
|
|
96
|
+
priced++;
|
|
97
|
+
const a = entry.active_ms;
|
|
98
|
+
if (typeof a === 'number') {
|
|
99
|
+
ms += a;
|
|
100
|
+
measured++;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (measured === 0)
|
|
104
|
+
return { seconds: null, partial: false };
|
|
105
|
+
// A partially-measured total is the dangerous case: it is a number, so it reads as
|
|
106
|
+
// complete while understating the truth. Flagged so the report can mark it rather
|
|
107
|
+
// than quietly presenting a floor as a measurement (turn-scoped-cost/AC-31, AC-32).
|
|
108
|
+
return { seconds: Math.round(ms / 1000), partial: measured < priced };
|
|
109
|
+
}
|
|
77
110
|
/** Compute the full cost view of one instance. */
|
|
78
111
|
export function instanceCost(projectRoot, instance, config) {
|
|
79
112
|
const rates = effectiveRates(projectRoot, config);
|
|
@@ -90,6 +123,7 @@ export function instanceCost(projectRoot, instance, config) {
|
|
|
90
123
|
const phases = [];
|
|
91
124
|
for (const [phase, list] of byPhase) {
|
|
92
125
|
const s = sumWeighted(list, rates);
|
|
126
|
+
const active = activeSecondsOf(list);
|
|
93
127
|
phases.push({
|
|
94
128
|
phase,
|
|
95
129
|
microUsd: s.microUsd,
|
|
@@ -97,16 +131,28 @@ export function instanceCost(projectRoot, instance, config) {
|
|
|
97
131
|
tokens: Math.round(s.tokens),
|
|
98
132
|
credits: s.credits,
|
|
99
133
|
elapsedSeconds: elapsed.get(phase) ?? 0,
|
|
134
|
+
activeSeconds: active.seconds,
|
|
135
|
+
activePartial: active.partial,
|
|
100
136
|
});
|
|
101
137
|
}
|
|
102
138
|
// Phases with time but no cost still appear — with a null cost, not a zero one.
|
|
103
139
|
// The phase ran; we simply have no record of what it cost.
|
|
104
140
|
for (const [phase, secs] of elapsed) {
|
|
105
141
|
if (secs > 0 && !byPhase.has(phase)) {
|
|
106
|
-
phases.push({
|
|
142
|
+
phases.push({
|
|
143
|
+
phase,
|
|
144
|
+
microUsd: null,
|
|
145
|
+
unpricedModels: [],
|
|
146
|
+
tokens: 0,
|
|
147
|
+
credits: 0,
|
|
148
|
+
elapsedSeconds: secs,
|
|
149
|
+
activeSeconds: null,
|
|
150
|
+
activePartial: false,
|
|
151
|
+
});
|
|
107
152
|
}
|
|
108
153
|
}
|
|
109
154
|
const total = sumWeighted(weighted, rates);
|
|
155
|
+
const activeTotal = activeSecondsOf(weighted);
|
|
110
156
|
const fidelityMix = { metered: 0, reconciled: 0, estimated: 0, unknown: 0 };
|
|
111
157
|
let mixTotal = 0;
|
|
112
158
|
for (const { entry, weight } of weighted) {
|
|
@@ -131,6 +177,8 @@ export function instanceCost(projectRoot, instance, config) {
|
|
|
131
177
|
tokens: Math.round(total.tokens),
|
|
132
178
|
credits: total.credits,
|
|
133
179
|
elapsedSeconds: totalElapsed,
|
|
180
|
+
activeSeconds: activeTotal.seconds,
|
|
181
|
+
activePartial: activeTotal.partial,
|
|
134
182
|
fidelityMix,
|
|
135
183
|
phases,
|
|
136
184
|
snapshot: rates.snapshot,
|
package/dist/cost/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cost/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AAC7G,OAAO,EAAE,UAAU,EAAE,cAAc,EAAuB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cost/report.ts"],"names":[],"mappings":"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"}
|
package/dist/cost/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/cost/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,EAAgD,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAOzG,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/cost/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,EAAgD,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAOzG,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;CACvB;AAgFD;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,mBAAmB,EAAE,MAAM,EAC3B,GAAG,GAAE,WAA6B,GACjC,OAAO,CAAC,UAAU,CAAC,CAuPrB"}
|