@rasensio/aidlc 1.11.0 → 1.12.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 +57 -9
- package/dist/commands/cost.js.map +1 -1
- package/dist/cost/hooks/claude-code.d.ts +12 -0
- package/dist/cost/hooks/claude-code.d.ts.map +1 -1
- package/dist/cost/hooks/claude-code.js +8 -4
- package/dist/cost/hooks/claude-code.js.map +1 -1
- package/dist/cost/hooks/kiro.d.ts.map +1 -1
- package/dist/cost/hooks/kiro.js +6 -4
- package/dist/cost/hooks/kiro.js.map +1 -1
- package/dist/cost/hooks/shim.d.ts +21 -0
- package/dist/cost/hooks/shim.d.ts.map +1 -1
- package/dist/cost/hooks/shim.js +48 -1
- package/dist/cost/hooks/shim.js.map +1 -1
- package/dist/cost/ledger.d.ts +14 -0
- package/dist/cost/ledger.d.ts.map +1 -1
- package/dist/cost/ledger.js +26 -1
- package/dist/cost/ledger.js.map +1 -1
- package/dist/cost/sync.d.ts +8 -0
- package/dist/cost/sync.d.ts.map +1 -1
- package/dist/cost/sync.js +377 -9
- package/dist/cost/sync.js.map +1 -1
- package/dist/doctor/migrations/index.d.ts.map +1 -1
- package/dist/doctor/migrations/index.js +5 -0
- package/dist/doctor/migrations/index.js.map +1 -1
- package/dist/doctor/migrations/missing-cost-shim.d.ts +40 -0
- package/dist/doctor/migrations/missing-cost-shim.d.ts.map +1 -0
- package/dist/doctor/migrations/missing-cost-shim.js +92 -0
- package/dist/doctor/migrations/missing-cost-shim.js.map +1 -0
- package/package.json +2 -2
package/dist/cost/sync.js
CHANGED
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Design: design.md §4.4
|
|
12
12
|
*/
|
|
13
|
-
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
13
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
14
|
+
import { execFileSync } from 'node:child_process';
|
|
15
|
+
import { join, resolve } from 'node:path';
|
|
16
|
+
import { readEntries, appendEntry, ledgerPath, unattributedPath, rewriteLedger } from './ledger.js';
|
|
17
|
+
import { SESSION_ID_RE } from './types.js';
|
|
16
18
|
import { sessionsPath, readSessionEvents, resolveIntervals } from './sessions.js';
|
|
17
19
|
import { getProvider, allProviders } from './providers/provider.js';
|
|
18
20
|
import { registerBuiltinProviders } from './providers/index.js';
|
|
@@ -20,6 +22,44 @@ import { UNKNOWN_AGENT } from './agent.js';
|
|
|
20
22
|
import { transcriptRoot } from './providers/claude-code.js';
|
|
21
23
|
import { phaseWindows } from './recorder.js';
|
|
22
24
|
import { logCapture } from './recorder.js';
|
|
25
|
+
/**
|
|
26
|
+
* Attribute an instant to at most one instance.
|
|
27
|
+
*
|
|
28
|
+
* Two rules, in order, and the order is the whole point:
|
|
29
|
+
*
|
|
30
|
+
* 1. **By session id**, when any claim interval carries this record's session id.
|
|
31
|
+
* Precise, and what capture itself does.
|
|
32
|
+
* 2. **By time alone**, when no interval names that session. This is the case that
|
|
33
|
+
* stranded $1,605.60 in this repo: `SessionStart` writes the active-session
|
|
34
|
+
* stash, the shim was missing so it never ran, `resolveCurrentSession()` found
|
|
35
|
+
* nothing, and `aidlc claim` fell back to a synthetic `agent-<uuid>`. Cost
|
|
36
|
+
* records carry the *real* platform id, so an id-equality join can never match
|
|
37
|
+
* them — while the claim windows and the coverage windows line up exactly.
|
|
38
|
+
*
|
|
39
|
+
* Strict single-candidate in both modes: several instances means the record cannot
|
|
40
|
+
* be assigned without guessing which one was really doing the work, and guessing
|
|
41
|
+
* is how a cost report becomes fiction.
|
|
42
|
+
*/
|
|
43
|
+
function instanceForInstant(at, sessionId, perInstance) {
|
|
44
|
+
const contains = (iv) => at >= Date.parse(iv.from) && at <= Date.parse(iv.to);
|
|
45
|
+
if (sessionId !== null) {
|
|
46
|
+
const byId = perInstance.filter(({ intervals }) => intervals.some((iv) => iv.session_id === sessionId && contains(iv)));
|
|
47
|
+
if (byId.length === 1)
|
|
48
|
+
return { instance: byId[0].instance, ambiguous: false };
|
|
49
|
+
if (byId.length > 1)
|
|
50
|
+
return { instance: null, ambiguous: true };
|
|
51
|
+
}
|
|
52
|
+
const byTime = perInstance.filter(({ intervals }) => intervals.some(contains));
|
|
53
|
+
if (byTime.length === 1)
|
|
54
|
+
return { instance: byTime[0].instance, ambiguous: false };
|
|
55
|
+
return { instance: null, ambiguous: byTime.length > 1 };
|
|
56
|
+
}
|
|
57
|
+
/** Midpoint of a coverage window — a single instant, which is what attribution takes. */
|
|
58
|
+
function coverageInstant(entry) {
|
|
59
|
+
const from = Date.parse(entry.coverage.from);
|
|
60
|
+
const to = Date.parse(entry.coverage.to);
|
|
61
|
+
return Math.floor((from + to) / 2);
|
|
62
|
+
}
|
|
23
63
|
function coveredWindows(entries, sessionId, minRank) {
|
|
24
64
|
const rank = { metered: 3, reconciled: 2, estimated: 1, unknown: 0 };
|
|
25
65
|
return entries
|
|
@@ -34,18 +74,36 @@ function overlapsAny(at, windows) {
|
|
|
34
74
|
* session; reports everything it skipped and why (FR4.3).
|
|
35
75
|
*/
|
|
36
76
|
export async function syncCosts(projectRoot, instanceFilter, claimTimeoutMinutes, env = { projectRoot }) {
|
|
37
|
-
const report = {
|
|
77
|
+
const report = {
|
|
78
|
+
attributed: 0,
|
|
79
|
+
skipped: [],
|
|
80
|
+
unattributed: 0,
|
|
81
|
+
backfilled: 0,
|
|
82
|
+
recovered: 0,
|
|
83
|
+
stillAmbiguous: 0,
|
|
84
|
+
stillOrphaned: 0,
|
|
85
|
+
};
|
|
38
86
|
const stateDir = join(projectRoot, '.aidlc', 'state');
|
|
39
87
|
if (!existsSync(stateDir))
|
|
40
88
|
return report;
|
|
41
|
-
const
|
|
89
|
+
const now = new Date();
|
|
90
|
+
const allInstances = readdirSync(stateDir, { withFileTypes: true })
|
|
42
91
|
.filter((d) => d.isDirectory())
|
|
43
|
-
.map((d) => d.name)
|
|
44
|
-
|
|
45
|
-
const
|
|
92
|
+
.map((d) => d.name);
|
|
93
|
+
const instances = allInstances.filter((n) => instanceFilter === null || n === instanceFilter);
|
|
94
|
+
const intervalsFor = (instance) => ({
|
|
46
95
|
instance,
|
|
47
96
|
intervals: resolveIntervals(readSessionEvents(sessionsPath(projectRoot, instance)), claimTimeoutMinutes),
|
|
48
|
-
})
|
|
97
|
+
});
|
|
98
|
+
const perInstance = instances.map(intervalsFor);
|
|
99
|
+
/*
|
|
100
|
+
* Candidacy is always evaluated against EVERY instance, even under
|
|
101
|
+
* `--instance`. The single-candidate rule is only a safety property if the
|
|
102
|
+
* candidate set is complete: narrowed to one instance, a record that two
|
|
103
|
+
* instances could claim would look unambiguous and be attributed to the one
|
|
104
|
+
* that happens to be in scope. The filter gates the write, not the decision.
|
|
105
|
+
*/
|
|
106
|
+
const allPerInstance = instanceFilter === null ? perInstance : allInstances.map(intervalsFor);
|
|
49
107
|
// Gather every session id seen anywhere.
|
|
50
108
|
const sessions = new Map();
|
|
51
109
|
for (const { intervals } of perInstance) {
|
|
@@ -163,8 +221,318 @@ export async function syncCosts(projectRoot, instanceFilter, claimTimeoutMinutes
|
|
|
163
221
|
}
|
|
164
222
|
}
|
|
165
223
|
}
|
|
224
|
+
// Capture what was never recorded, then attribute what was recorded but never
|
|
225
|
+
// assigned. Backfill first: it appends to unattributed.ndjson, and recovery is
|
|
226
|
+
// what drains it, so running them in this order recovers the new records in the
|
|
227
|
+
// same pass instead of needing a second one.
|
|
228
|
+
await backfillFromRecords(projectRoot, allPerInstance, alreadyRecorded(projectRoot, allInstances), env, now, report);
|
|
229
|
+
recoverUnattributed(projectRoot, allPerInstance, instanceFilter, now, report);
|
|
166
230
|
return report;
|
|
167
231
|
}
|
|
232
|
+
function alreadyRecorded(projectRoot, instances) {
|
|
233
|
+
const cursors = new Set();
|
|
234
|
+
const windows = [];
|
|
235
|
+
const paths = [...instances.map((i) => ledgerPath(projectRoot, i)), unattributedPath(projectRoot)];
|
|
236
|
+
const RANK = { metered: 3, reconciled: 2, estimated: 1, unknown: 0 };
|
|
237
|
+
for (const p of paths) {
|
|
238
|
+
for (const e of readEntries(p)) {
|
|
239
|
+
if (e.cursor !== null)
|
|
240
|
+
cursors.add(e.cursor);
|
|
241
|
+
if (e.units === null)
|
|
242
|
+
continue;
|
|
243
|
+
if ((RANK[e.fidelity] ?? 0) < 2)
|
|
244
|
+
continue;
|
|
245
|
+
windows.push({ from: Date.parse(e.coverage.from), to: Date.parse(e.coverage.to) });
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
windows.sort((a, b) => a.from - b.from);
|
|
249
|
+
const covered = [];
|
|
250
|
+
for (const w of windows) {
|
|
251
|
+
const last = covered[covered.length - 1];
|
|
252
|
+
if (last && w.from <= last.to)
|
|
253
|
+
last.to = Math.max(last.to, w.to);
|
|
254
|
+
else
|
|
255
|
+
covered.push({ ...w });
|
|
256
|
+
}
|
|
257
|
+
return { cursors, covered };
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* The `cwd` a transcript was recorded in, read from its own contents.
|
|
261
|
+
*
|
|
262
|
+
* The directory name under `~/.claude/projects` is the cwd with separators
|
|
263
|
+
* flattened to dashes, which is lossy — a real directory containing a dash is
|
|
264
|
+
* indistinguishable from a separator, so the name cannot be reversed safely. The
|
|
265
|
+
* transcript records its cwd verbatim, so ask it.
|
|
266
|
+
*/
|
|
267
|
+
function transcriptCwd(path) {
|
|
268
|
+
let raw;
|
|
269
|
+
try {
|
|
270
|
+
raw = readFileSync(path, 'utf8');
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
let scanned = 0;
|
|
276
|
+
for (const line of raw.split('\n')) {
|
|
277
|
+
if (line.trim() === '')
|
|
278
|
+
continue;
|
|
279
|
+
if (++scanned > 50)
|
|
280
|
+
break;
|
|
281
|
+
try {
|
|
282
|
+
const parsed = JSON.parse(line);
|
|
283
|
+
if (typeof parsed.cwd === 'string' && parsed.cwd !== '')
|
|
284
|
+
return parsed.cwd;
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* A directory's git common dir, as an absolute path — the identity every worktree
|
|
294
|
+
* of one repository shares.
|
|
295
|
+
*
|
|
296
|
+
* Deliberately NOT `sessions.ts:repoIdentity`, which builds its answer with
|
|
297
|
+
* `join(cwd, out)`. `git rev-parse --git-common-dir` answers relatively (`.git`)
|
|
298
|
+
* from a primary checkout and absolutely from a linked worktree, and `join` on an
|
|
299
|
+
* absolute second argument concatenates instead of replacing — so the same
|
|
300
|
+
* repository gets two different identities depending on which checkout asked.
|
|
301
|
+
*
|
|
302
|
+
* `repoIdentity` is left alone on purpose. It backs `resolveCurrentSession`, whose
|
|
303
|
+
* single-live-candidate rule *wants* a worktree session and a primary-checkout
|
|
304
|
+
* session to look like different workspaces; making them equal there would turn
|
|
305
|
+
* two concurrent sessions into an ambiguous pair and push both back onto synthetic
|
|
306
|
+
* `agent-<uuid>` ids. Same expression, opposite requirement — so it gets its own
|
|
307
|
+
* function rather than a shared "fix".
|
|
308
|
+
*/
|
|
309
|
+
function repoCommonDir(cwd) {
|
|
310
|
+
try {
|
|
311
|
+
const out = execFileSync('git', ['rev-parse', '--git-common-dir'], {
|
|
312
|
+
cwd,
|
|
313
|
+
encoding: 'utf8',
|
|
314
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
315
|
+
}).trim();
|
|
316
|
+
return resolve(cwd, out);
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Local claude-code transcripts **belonging to this repository**.
|
|
324
|
+
*
|
|
325
|
+
* The scoping is load-bearing, not defensive. `transcriptRoot` is a single
|
|
326
|
+
* directory holding every project this machine has ever worked on — 12 of them
|
|
327
|
+
* here, including unrelated repositories. Walking all of them and attributing by
|
|
328
|
+
* time would charge this project for work done elsewhere whenever an unrelated
|
|
329
|
+
* session happened to overlap a claim window. That is a worse failure than the one
|
|
330
|
+
* being fixed: a wrong number is harder to notice than a missing one.
|
|
331
|
+
*
|
|
332
|
+
* Identity is the git common dir, so every worktree of this repo counts as this
|
|
333
|
+
* repo and nothing else does. A transcript whose cwd no longer exists is skipped —
|
|
334
|
+
* under-recovering is the safe direction.
|
|
335
|
+
*/
|
|
336
|
+
function projectClaudeCodeRecords(projectRoot, env) {
|
|
337
|
+
const root = transcriptRoot(env);
|
|
338
|
+
if (!existsSync(root))
|
|
339
|
+
return [];
|
|
340
|
+
const here = repoCommonDir(projectRoot);
|
|
341
|
+
const identityCache = new Map();
|
|
342
|
+
const identityOf = (cwd) => {
|
|
343
|
+
if (!identityCache.has(cwd))
|
|
344
|
+
identityCache.set(cwd, repoCommonDir(cwd));
|
|
345
|
+
return identityCache.get(cwd) ?? null;
|
|
346
|
+
};
|
|
347
|
+
const out = [];
|
|
348
|
+
for (const dir of readdirSync(root, { withFileTypes: true })) {
|
|
349
|
+
if (!dir.isDirectory())
|
|
350
|
+
continue;
|
|
351
|
+
for (const f of readdirSync(join(root, dir.name))) {
|
|
352
|
+
if (!f.endsWith('.jsonl'))
|
|
353
|
+
continue;
|
|
354
|
+
const sessionId = f.slice(0, -'.jsonl'.length);
|
|
355
|
+
if (!SESSION_ID_RE.test(sessionId))
|
|
356
|
+
continue;
|
|
357
|
+
const path = join(root, dir.name, f);
|
|
358
|
+
const cwd = transcriptCwd(path);
|
|
359
|
+
if (cwd === null)
|
|
360
|
+
continue;
|
|
361
|
+
const theirs = identityOf(cwd);
|
|
362
|
+
const mine = here !== null && theirs !== null ? theirs === here : cwd === projectRoot;
|
|
363
|
+
if (!mine)
|
|
364
|
+
continue;
|
|
365
|
+
out.push({ sessionId, path });
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return out;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Capture usage that was never recorded at all, straight from local provider
|
|
372
|
+
* records (FR4.5).
|
|
373
|
+
*
|
|
374
|
+
* The pass above can only reach a transcript it can *locate from a session id in
|
|
375
|
+
* sessions.ndjson*. Usage from a session that never claimed — or that claimed
|
|
376
|
+
* under a synthetic `agent-<uuid>` while the transcript is named by the real
|
|
377
|
+
* platform id — is invisible to it. That is not an edge case: it is how $535.54
|
|
378
|
+
* went unrecorded during the 41-hour blackout while every one of the 42 known
|
|
379
|
+
* sessions was reported as "skipped".
|
|
380
|
+
*
|
|
381
|
+
* So this walks the records themselves and lets each usage segment find its own
|
|
382
|
+
* instance. `known` is keyed on provider cursor, which is a transcript message
|
|
383
|
+
* uuid, so re-running is a no-op rather than a double count.
|
|
384
|
+
*/
|
|
385
|
+
async function backfillFromRecords(projectRoot, perInstance, known, env, now, report) {
|
|
386
|
+
registerBuiltinProviders();
|
|
387
|
+
const provider = getProvider('claude-code');
|
|
388
|
+
if (!provider)
|
|
389
|
+
return;
|
|
390
|
+
for (const { sessionId, path } of projectClaudeCodeRecords(projectRoot, env)) {
|
|
391
|
+
let segments;
|
|
392
|
+
try {
|
|
393
|
+
segments = await provider.extract({ provider: provider.name, path }, null, env);
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
logCapture(projectRoot, 'sync-backfill', 'extract-failed');
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
for (const seg of segments) {
|
|
400
|
+
if (seg.cursor !== null && known.cursors.has(seg.cursor))
|
|
401
|
+
continue;
|
|
402
|
+
const at = Date.parse(seg.at);
|
|
403
|
+
// Already inside a reconciled-or-better coverage window: the usage is
|
|
404
|
+
// recorded, just as part of a merged bucket naming a different cursor.
|
|
405
|
+
if (overlapsAny(at, known.covered))
|
|
406
|
+
continue;
|
|
407
|
+
const { instance } = instanceForInstant(at, sessionId, perInstance);
|
|
408
|
+
const phase = instance !== null
|
|
409
|
+
? (phaseWindows(projectRoot, instance, 'implementation').find((w) => at >= w.from && at < w.to)?.phase ?? null)
|
|
410
|
+
: null;
|
|
411
|
+
const entry = {
|
|
412
|
+
timestamp: now.toISOString(),
|
|
413
|
+
session_id: sessionId,
|
|
414
|
+
phase,
|
|
415
|
+
provider: provider.name,
|
|
416
|
+
fidelity: 'reconciled',
|
|
417
|
+
coverage: { from: seg.at, to: seg.at },
|
|
418
|
+
cursor: seg.cursor,
|
|
419
|
+
units: seg.units,
|
|
420
|
+
};
|
|
421
|
+
const targetPath = instance !== null ? ledgerPath(projectRoot, instance) : unattributedPath(projectRoot);
|
|
422
|
+
try {
|
|
423
|
+
appendEntry(targetPath, entry);
|
|
424
|
+
if (seg.cursor !== null)
|
|
425
|
+
known.cursors.add(seg.cursor);
|
|
426
|
+
report.backfilled++;
|
|
427
|
+
if (instance !== null)
|
|
428
|
+
report.attributed++;
|
|
429
|
+
else
|
|
430
|
+
report.unattributed++;
|
|
431
|
+
}
|
|
432
|
+
catch {
|
|
433
|
+
logCapture(projectRoot, 'sync-backfill', 'validation-rejected');
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Move already-captured records out of unattributed.ndjson into the instance that
|
|
440
|
+
* was claimed while they were measured (FR4.6).
|
|
441
|
+
*
|
|
442
|
+
* These records are the easy case that nothing was doing: they carry real session
|
|
443
|
+
* ids, exact coverage windows, and `metered` fidelity. All that was ever missing
|
|
444
|
+
* was the join, because the only join anyone had matched session ids — and the
|
|
445
|
+
* claims recorded synthetic ones. See `instanceForInstant`.
|
|
446
|
+
*
|
|
447
|
+
* Append to the destination first, then rewrite the source: interrupted halfway
|
|
448
|
+
* this duplicates a record, and `readEntries` de-duplicates byte-identical lines,
|
|
449
|
+
* so the failure mode is self-correcting rather than lossy.
|
|
450
|
+
*/
|
|
451
|
+
function recoverUnattributed(projectRoot, perInstance, instanceFilter, now, report) {
|
|
452
|
+
const path = unattributedPath(projectRoot);
|
|
453
|
+
const entries = readEntries(path);
|
|
454
|
+
if (entries.length === 0)
|
|
455
|
+
return;
|
|
456
|
+
const cursorsByInstance = new Map();
|
|
457
|
+
const cursorsFor = (instance) => {
|
|
458
|
+
let set = cursorsByInstance.get(instance);
|
|
459
|
+
if (!set) {
|
|
460
|
+
set = new Set(readEntries(ledgerPath(projectRoot, instance))
|
|
461
|
+
.map((e) => e.cursor)
|
|
462
|
+
.filter((c) => c !== null));
|
|
463
|
+
cursorsByInstance.set(instance, set);
|
|
464
|
+
}
|
|
465
|
+
return set;
|
|
466
|
+
};
|
|
467
|
+
const kept = [];
|
|
468
|
+
let moved = 0;
|
|
469
|
+
for (const entry of entries) {
|
|
470
|
+
// Attribution markers carry no units and no meaning outside their own file.
|
|
471
|
+
if (entry.units === null) {
|
|
472
|
+
kept.push(entry);
|
|
473
|
+
continue;
|
|
474
|
+
}
|
|
475
|
+
const at = coverageInstant(entry);
|
|
476
|
+
/*
|
|
477
|
+
* Time only — `entry.session_id` is deliberately NOT consulted here, and that
|
|
478
|
+
* is a correctness requirement rather than a simplification.
|
|
479
|
+
*
|
|
480
|
+
* An unattributed record's session id is one of two things, and nothing on the
|
|
481
|
+
* line distinguishes them. Either it is a real platform id that no claim
|
|
482
|
+
* names, which is the case this pass exists to recover and for which an
|
|
483
|
+
* id-equality lookup finds nothing anyway; or it is the *provenance stamp* the
|
|
484
|
+
* pass above applies when a segment was contested — "it stays unattributed
|
|
485
|
+
* under the first claimant's id purely for provenance". That stamp names one
|
|
486
|
+
* arbitrary claimant of several. Trusting it as identity turns "two instances
|
|
487
|
+
* could own this" into "this one does", silently attributing contested dollars
|
|
488
|
+
* and undoing cost-claim-attribution/AC-12.
|
|
489
|
+
*
|
|
490
|
+
* Time with the full candidate set decides both correctly: a real id whose
|
|
491
|
+
* window belongs to one instance attributes, and a contested instant stays
|
|
492
|
+
* contested.
|
|
493
|
+
*/
|
|
494
|
+
const { instance, ambiguous } = instanceForInstant(at, null, perInstance);
|
|
495
|
+
if (instance === null) {
|
|
496
|
+
kept.push(entry);
|
|
497
|
+
if (ambiguous)
|
|
498
|
+
report.stillAmbiguous++;
|
|
499
|
+
else
|
|
500
|
+
report.stillOrphaned++;
|
|
501
|
+
continue;
|
|
502
|
+
}
|
|
503
|
+
if (instanceFilter !== null && instance !== instanceFilter) {
|
|
504
|
+
kept.push(entry);
|
|
505
|
+
continue;
|
|
506
|
+
}
|
|
507
|
+
const cursors = cursorsFor(instance);
|
|
508
|
+
if (entry.cursor !== null && cursors.has(entry.cursor)) {
|
|
509
|
+
// Already attributed by an earlier run; dropping the stale copy is the
|
|
510
|
+
// second half of a move that was interrupted, not a new decision.
|
|
511
|
+
moved++;
|
|
512
|
+
continue;
|
|
513
|
+
}
|
|
514
|
+
const phase = phaseWindows(projectRoot, instance, 'implementation').find((w) => at >= w.from && at < w.to)
|
|
515
|
+
?.phase ?? null;
|
|
516
|
+
// Fidelity is preserved, not downgraded to `reconciled`: these are the same
|
|
517
|
+
// measurements the provider reported, and calling metered data reconciled
|
|
518
|
+
// would let a later pass overwrite exact numbers with re-derived ones.
|
|
519
|
+
const moved_entry = { ...entry, timestamp: now.toISOString(), phase };
|
|
520
|
+
try {
|
|
521
|
+
appendEntry(ledgerPath(projectRoot, instance), moved_entry);
|
|
522
|
+
if (entry.cursor !== null)
|
|
523
|
+
cursors.add(entry.cursor);
|
|
524
|
+
moved++;
|
|
525
|
+
report.recovered++;
|
|
526
|
+
report.attributed++;
|
|
527
|
+
}
|
|
528
|
+
catch {
|
|
529
|
+
logCapture(projectRoot, 'sync-recover', 'validation-rejected');
|
|
530
|
+
kept.push(entry);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
if (moved > 0)
|
|
534
|
+
rewriteLedger(path, kept);
|
|
535
|
+
}
|
|
168
536
|
function compact(xs) {
|
|
169
537
|
return xs.filter((x) => x !== undefined);
|
|
170
538
|
}
|
package/dist/cost/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cost/sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cost/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAe7C,eAAO,MAAM,UAAU,EAAE,SAAS,EAiBjC,CAAC"}
|
|
@@ -16,6 +16,7 @@ import { pruneCaptureLogMigration } from './prune-capture-log.js';
|
|
|
16
16
|
import { pruneRegistry } from './prune-registry.js';
|
|
17
17
|
import { unknownAgentClaims } from './unknown-agent-claims.js';
|
|
18
18
|
import { legacyCostHooks } from './legacy-cost-hooks.js';
|
|
19
|
+
import { missingCostShim } from './missing-cost-shim.js';
|
|
19
20
|
import { installGuidance } from './install-guidance.js';
|
|
20
21
|
export const MIGRATIONS = [
|
|
21
22
|
costGitignore,
|
|
@@ -29,6 +30,10 @@ export const MIGRATIONS = [
|
|
|
29
30
|
pruneCaptureLogMigration,
|
|
30
31
|
pruneRegistry,
|
|
31
32
|
unknownAgentClaims,
|
|
33
|
+
// Ordered before legacy-cost-hooks: that migration re-installs, which writes
|
|
34
|
+
// the shim as a side effect, so a legacy hook needs no separate shim repair.
|
|
35
|
+
// Running this first keeps each migration's report about its own condition.
|
|
36
|
+
missingCostShim,
|
|
32
37
|
legacyCostHooks,
|
|
33
38
|
];
|
|
34
39
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,aAAa;IACb,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,eAAe;IACf,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,wBAAwB;IACxB,aAAa;IACb,kBAAkB;IAClB,eAAe;CAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,aAAa;IACb,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,eAAe;IACf,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,wBAAwB;IACxB,aAAa;IACb,kBAAkB;IAClB,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,eAAe;IACf,eAAe;CAChB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* missing-cost-shim migration: regenerate `.aidlc/cost/capture.sh` when a hook
|
|
3
|
+
* is armed against it and it cannot run.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS. `cost-capture-goes-dark` replaced absolute hook paths with a
|
|
6
|
+
* generated shim and deleted `commandResolvable`, recording that "the failure
|
|
7
|
+
* class is retired, not merely detected". The shim removed the *stale path*
|
|
8
|
+
* failure and introduced a *missing file* one: the shim is generated per install,
|
|
9
|
+
* is gitignored on purpose (it embeds machine-specific resolution hints), and no
|
|
10
|
+
* tracked file can supply it — while `.claude/settings.json`, which arms the
|
|
11
|
+
* hooks, IS tracked. So every fresh clone and every second machine starts with
|
|
12
|
+
* hooks pointing at nothing.
|
|
13
|
+
*
|
|
14
|
+
* That is not hypothetical: capture was dead from 2026-08-26 21:12 to 2026-08-28
|
|
15
|
+
* 13:44 local, $535.54 of usage was never recorded, and `aidlc cost hooks status`
|
|
16
|
+
* read `installed` throughout.
|
|
17
|
+
*
|
|
18
|
+
* WHY SAFE TIER, AND WHY IT REPAIRS RATHER THAN REPORTS. The shim is generated
|
|
19
|
+
* output with no user content, already gitignored, and `writeShim` is idempotent —
|
|
20
|
+
* rewriting it destroys nothing a user authored. Report-only was tried for this
|
|
21
|
+
* exact failure class (`stale-cost-hooks`) and the data was lost anyway, because
|
|
22
|
+
* the last link in the chain was a human reading a line. `aidlc cost` already
|
|
23
|
+
* prints "run `aidlc doctor` to repair"; this is the migration that makes that
|
|
24
|
+
* sentence true.
|
|
25
|
+
*
|
|
26
|
+
* Self-clearing: once the shim exists and is executable, `shimProblem` returns
|
|
27
|
+
* null and this stops reporting without anyone editing state.
|
|
28
|
+
*/
|
|
29
|
+
import type { Migration } from '../types.js';
|
|
30
|
+
/**
|
|
31
|
+
* Platforms whose hook is armed against an unusable shim. Read-only half,
|
|
32
|
+
* exported for reuse and direct testing.
|
|
33
|
+
*
|
|
34
|
+
* Legacy hooks are excluded: they do not invoke the shim, so its state is not
|
|
35
|
+
* their problem — `legacy-cost-hooks` re-installs those, which writes the shim as
|
|
36
|
+
* a side effect anyway.
|
|
37
|
+
*/
|
|
38
|
+
export declare function platformsWithUnusableShim(projectRoot: string): string[];
|
|
39
|
+
export declare const missingCostShim: Migration;
|
|
40
|
+
//# sourceMappingURL=missing-cost-shim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"missing-cost-shim.d.ts","sourceRoot":"","sources":["../../../src/doctor/migrations/missing-cost-shim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAkB7C;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAMvE;AAED,eAAO,MAAM,eAAe,EAAE,SAiC7B,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* missing-cost-shim migration: regenerate `.aidlc/cost/capture.sh` when a hook
|
|
3
|
+
* is armed against it and it cannot run.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS. `cost-capture-goes-dark` replaced absolute hook paths with a
|
|
6
|
+
* generated shim and deleted `commandResolvable`, recording that "the failure
|
|
7
|
+
* class is retired, not merely detected". The shim removed the *stale path*
|
|
8
|
+
* failure and introduced a *missing file* one: the shim is generated per install,
|
|
9
|
+
* is gitignored on purpose (it embeds machine-specific resolution hints), and no
|
|
10
|
+
* tracked file can supply it — while `.claude/settings.json`, which arms the
|
|
11
|
+
* hooks, IS tracked. So every fresh clone and every second machine starts with
|
|
12
|
+
* hooks pointing at nothing.
|
|
13
|
+
*
|
|
14
|
+
* That is not hypothetical: capture was dead from 2026-08-26 21:12 to 2026-08-28
|
|
15
|
+
* 13:44 local, $535.54 of usage was never recorded, and `aidlc cost hooks status`
|
|
16
|
+
* read `installed` throughout.
|
|
17
|
+
*
|
|
18
|
+
* WHY SAFE TIER, AND WHY IT REPAIRS RATHER THAN REPORTS. The shim is generated
|
|
19
|
+
* output with no user content, already gitignored, and `writeShim` is idempotent —
|
|
20
|
+
* rewriting it destroys nothing a user authored. Report-only was tried for this
|
|
21
|
+
* exact failure class (`stale-cost-hooks`) and the data was lost anyway, because
|
|
22
|
+
* the last link in the chain was a human reading a line. `aidlc cost` already
|
|
23
|
+
* prints "run `aidlc doctor` to repair"; this is the migration that makes that
|
|
24
|
+
* sentence true.
|
|
25
|
+
*
|
|
26
|
+
* Self-clearing: once the shim exists and is executable, `shimProblem` returns
|
|
27
|
+
* null and this stops reporting without anyone editing state.
|
|
28
|
+
*/
|
|
29
|
+
import { claudeCodeHookStatus } from '../../cost/hooks/claude-code.js';
|
|
30
|
+
import { kiroHookStatus } from '../../cost/hooks/kiro.js';
|
|
31
|
+
import { cliEntryPath } from '../../cost/hooks/entry.js';
|
|
32
|
+
import { describeShimProblem, shimProblem, writeShim } from '../../cost/hooks/shim.js';
|
|
33
|
+
/*
|
|
34
|
+
* Static for the same reason `legacy-cost-hooks` is: allProviders() is only
|
|
35
|
+
* populated by an explicit registerBuiltinProviders() call, so a caller that has
|
|
36
|
+
* not made it sees an empty list and the migration silently finds nothing. Hook
|
|
37
|
+
* installation exists for these two platforms only.
|
|
38
|
+
*/
|
|
39
|
+
const HOOK_PLATFORMS = [
|
|
40
|
+
{ name: 'claude-code', status: claudeCodeHookStatus },
|
|
41
|
+
{ name: 'kiro', status: kiroHookStatus },
|
|
42
|
+
];
|
|
43
|
+
/**
|
|
44
|
+
* Platforms whose hook is armed against an unusable shim. Read-only half,
|
|
45
|
+
* exported for reuse and direct testing.
|
|
46
|
+
*
|
|
47
|
+
* Legacy hooks are excluded: they do not invoke the shim, so its state is not
|
|
48
|
+
* their problem — `legacy-cost-hooks` re-installs those, which writes the shim as
|
|
49
|
+
* a side effect anyway.
|
|
50
|
+
*/
|
|
51
|
+
export function platformsWithUnusableShim(projectRoot) {
|
|
52
|
+
if (shimProblem(projectRoot) === null)
|
|
53
|
+
return [];
|
|
54
|
+
return HOOK_PLATFORMS.filter((p) => {
|
|
55
|
+
const s = p.status(projectRoot);
|
|
56
|
+
return s.installed && !s.legacy;
|
|
57
|
+
}).map((p) => p.name);
|
|
58
|
+
}
|
|
59
|
+
export const missingCostShim = {
|
|
60
|
+
id: 'missing-cost-shim',
|
|
61
|
+
tier: 'safe',
|
|
62
|
+
check(ctx) {
|
|
63
|
+
const affected = platformsWithUnusableShim(ctx.projectRoot);
|
|
64
|
+
if (affected.length === 0)
|
|
65
|
+
return { applicable: true, pending: false };
|
|
66
|
+
const problem = shimProblem(ctx.projectRoot);
|
|
67
|
+
return {
|
|
68
|
+
applicable: true,
|
|
69
|
+
pending: true,
|
|
70
|
+
description: `${describeShimProblem(problem)} but ${affected.join(' and ')} ` +
|
|
71
|
+
`hook${affected.length === 1 ? ' is' : 's are'} armed against it — ` +
|
|
72
|
+
'capture cannot run and cannot report that it did not; would regenerate it',
|
|
73
|
+
};
|
|
74
|
+
},
|
|
75
|
+
apply(ctx) {
|
|
76
|
+
const affected = platformsWithUnusableShim(ctx.projectRoot);
|
|
77
|
+
if (affected.length === 0)
|
|
78
|
+
return { changed: false, summary: 'cost shim is usable' };
|
|
79
|
+
// Hints only. The shim validates both at run time and never trusts them to
|
|
80
|
+
// still exist, which is what lets it survive a node or machine change.
|
|
81
|
+
writeShim(ctx.projectRoot, process.execPath, cliEntryPath());
|
|
82
|
+
const remaining = shimProblem(ctx.projectRoot);
|
|
83
|
+
if (remaining !== null) {
|
|
84
|
+
return { changed: false, summary: `could not regenerate the cost shim: ${describeShimProblem(remaining)}` };
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
changed: true,
|
|
88
|
+
summary: `regenerated .aidlc/cost/capture.sh for ${affected.join(', ')}`,
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=missing-cost-shim.js.map
|