@rasensio/aidlc 1.15.1 → 1.15.2
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 +37 -1
- package/dist/commands/cost.js.map +1 -1
- package/dist/cost/agent.d.ts.map +1 -1
- package/dist/cost/agent.js +2 -11
- package/dist/cost/agent.js.map +1 -1
- package/dist/cost/hooks/claude-code.d.ts +17 -1
- package/dist/cost/hooks/claude-code.d.ts.map +1 -1
- package/dist/cost/hooks/claude-code.js +30 -5
- 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 +42 -26
- package/dist/cost/hooks/kiro.js.map +1 -1
- package/dist/cost/sessions.d.ts +85 -2
- package/dist/cost/sessions.d.ts.map +1 -1
- package/dist/cost/sessions.js +132 -9
- package/dist/cost/sessions.js.map +1 -1
- package/dist/cost/types.d.ts +10 -0
- package/dist/cost/types.d.ts.map +1 -1
- package/dist/cost/types.js.map +1 -1
- package/dist/doctor/migrations/index.d.ts.map +1 -1
- package/dist/doctor/migrations/index.js +4 -0
- package/dist/doctor/migrations/index.js.map +1 -1
- package/dist/doctor/migrations/outdated-cost-hooks.d.ts +35 -0
- package/dist/doctor/migrations/outdated-cost-hooks.d.ts.map +1 -0
- package/dist/doctor/migrations/outdated-cost-hooks.js +81 -0
- package/dist/doctor/migrations/outdated-cost-hooks.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/commands/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/commands/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8FpC,yEAAyE;AACzE,wBAAgB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CASxE;AAoaD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgFnD"}
|
package/dist/commands/cost.js
CHANGED
|
@@ -15,7 +15,7 @@ import { dirname, resolve } from 'node:path';
|
|
|
15
15
|
import { getProvider, allProviders } from '../cost/providers/provider.js';
|
|
16
16
|
import { registerBuiltinProviders } from '../cost/providers/index.js';
|
|
17
17
|
import { recordUsage, lastCaptureError, logCapture, captureLiveness } from '../cost/recorder.js';
|
|
18
|
-
import { stashSession } from '../cost/sessions.js';
|
|
18
|
+
import { stashSession, unstashSession } from '../cost/sessions.js';
|
|
19
19
|
import { appendEntry, ledgerPath } from '../cost/ledger.js';
|
|
20
20
|
import { instanceCost, listInstances, byTemplate, unattributedEntries } from '../cost/report.js';
|
|
21
21
|
import { effectiveRates, updateRates, microToUsd, NORMALIZATION_RULES } from '../cost/rates.js';
|
|
@@ -60,12 +60,31 @@ function parseHookInput(raw) {
|
|
|
60
60
|
session_id: parsed.session_id,
|
|
61
61
|
transcript_path: typeof parsed.transcript_path === 'string' ? parsed.transcript_path : undefined,
|
|
62
62
|
cwd: typeof parsed.cwd === 'string' ? parsed.cwd : undefined,
|
|
63
|
+
hook_event_name: typeof parsed.hook_event_name === 'string' ? parsed.hook_event_name : undefined,
|
|
63
64
|
};
|
|
64
65
|
}
|
|
65
66
|
catch {
|
|
66
67
|
return null;
|
|
67
68
|
}
|
|
68
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Whether this `cost record` invocation means "the session has ended".
|
|
72
|
+
*
|
|
73
|
+
* Two independent signals, either sufficient:
|
|
74
|
+
*
|
|
75
|
+
* - `--session-end`, written into the claude-code SessionEnd hook by the
|
|
76
|
+
* installer. Explicit, and the one a future platform declares.
|
|
77
|
+
* - `hook_event_name: "SessionEnd"` in the payload. This is what makes the fix
|
|
78
|
+
* work on installs that have not re-run `aidlc cost hooks install` — the item
|
|
79
|
+
* that reported this bug called the upgrade path the risk, not the fix.
|
|
80
|
+
*
|
|
81
|
+
* Both must stay narrow, because kiro wires the *same* `cost record` command to
|
|
82
|
+
* `Stop`, which fires after every response. Unstashing there would delete a live
|
|
83
|
+
* session's entry dozens of times an hour.
|
|
84
|
+
*/
|
|
85
|
+
function isSessionEnd(flag, input) {
|
|
86
|
+
return flag === true || input.hook_event_name === 'SessionEnd';
|
|
87
|
+
}
|
|
69
88
|
function fmtSeconds(secs) {
|
|
70
89
|
if (secs <= 0)
|
|
71
90
|
return '-';
|
|
@@ -115,6 +134,18 @@ async function runRecord(opts) {
|
|
|
115
134
|
logCapture(root, 'parse-stdin', 'invalid-payload');
|
|
116
135
|
return; // Hook context: silent, logged.
|
|
117
136
|
}
|
|
137
|
+
// Before the detach, deliberately. The respawned child can be killed with the
|
|
138
|
+
// terminal it was born in, and an entry left behind is what disabled session
|
|
139
|
+
// resolution for the next 48 hours. Fail-soft: an unstash that throws must never
|
|
140
|
+
// cost us the usage record that follows it.
|
|
141
|
+
if (isSessionEnd(opts.sessionEnd, input)) {
|
|
142
|
+
try {
|
|
143
|
+
unstashSession(root, input.session_id);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
logCapture(root, 'session-end', 'unstash-failed');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
118
149
|
if (opts.detach) {
|
|
119
150
|
// Respawn without --detach and exit immediately (SessionEnd budget).
|
|
120
151
|
const args = [cliEntryPath(), 'cost', 'record', '--provider', opts.provider];
|
|
@@ -418,6 +449,10 @@ function fmtHookStatus(s) {
|
|
|
418
449
|
if (s.shim !== null) {
|
|
419
450
|
return `installed but NOT WORKING — ${describeShimProblem(s.shim)}, so no session is being measured; run \`aidlc doctor\` to regenerate it`;
|
|
420
451
|
}
|
|
452
|
+
// Capture still works — the payload carries what the command text is missing —
|
|
453
|
+
// so this reads as a repair to make, not a failure.
|
|
454
|
+
if (s.outdated)
|
|
455
|
+
return 'installed (older command form — run `aidlc doctor` to bring it up to date)';
|
|
421
456
|
return 'installed';
|
|
422
457
|
}
|
|
423
458
|
function runProvidersStatus() {
|
|
@@ -459,6 +494,7 @@ export function registerCost(program) {
|
|
|
459
494
|
.description('Record usage (hook mode via stdin, or --manual)')
|
|
460
495
|
.option('--provider <name>', 'Cost provider (claude-code, kiro)')
|
|
461
496
|
.option('--detach', 'Spawn a background recorder and exit immediately')
|
|
497
|
+
.option('--session-end', 'The session has ended: drop its active-session stash entry')
|
|
462
498
|
.option('--manual', 'Manual entry mode (agent-driven fallback)')
|
|
463
499
|
.option('--instance <name>', 'Target instance (manual mode)')
|
|
464
500
|
.option('--session <id>', 'Session id, or "-" for none (manual mode)')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/commands/cost.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/commands/cost.ts"],"names":[],"mappings":"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"}
|
package/dist/cost/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/cost/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,iEAAiE;AACjE,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,kFAAkF;AAClF,MAAM,MAAM,eAAe,GACvB,sBAAsB,GACtB,6BAA6B,GAC7B,oBAAoB,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,GAAG,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;IACvC,8CAA8C;IAC9C,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/cost/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,iEAAiE;AACjE,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,kFAAkF;AAClF,MAAM,MAAM,eAAe,GACvB,sBAAsB,GACtB,6BAA6B,GAC7B,oBAAoB,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,GAAG,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;IACvC,8CAA8C;IAC9C,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC;AA2DD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOjE;AAyBD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAKhF;AAqCD,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAShE;AAED,+CAA+C;AAC/C,wBAAgB,eAAe,IAAI,IAAI,CAKtC"}
|
package/dist/cost/agent.js
CHANGED
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
* looked". Resolution is fail-soft throughout — it must never fail a claim
|
|
25
25
|
* (AC-6, NFR-2).
|
|
26
26
|
*/
|
|
27
|
-
import { readFileSync, readdirSync, existsSync
|
|
27
|
+
import { readFileSync, readdirSync, existsSync } from 'node:fs';
|
|
28
28
|
import { join } from 'node:path';
|
|
29
|
-
import { stashDir, repoIdentity } from './sessions.js';
|
|
29
|
+
import { stashDir, repoIdentity, canonical } from './sessions.js';
|
|
30
30
|
import { allProviders } from './providers/provider.js';
|
|
31
31
|
import { registerBuiltinProviders } from './providers/index.js';
|
|
32
32
|
/** The value recorded when the platform cannot be determined. */
|
|
@@ -91,15 +91,6 @@ function identityOf(dir) {
|
|
|
91
91
|
identityCache.set(dir, value);
|
|
92
92
|
return value;
|
|
93
93
|
}
|
|
94
|
-
/** Resolve symlinks for comparison; unresolvable paths compare as written. */
|
|
95
|
-
function canonical(p) {
|
|
96
|
-
try {
|
|
97
|
-
return realpathSync(p);
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
return p;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
94
|
/**
|
|
104
95
|
* The platform every matching stash entry agrees on, or null when there are
|
|
105
96
|
* none or they disagree (AC-4).
|
package/dist/cost/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/cost/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/cost/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ export declare const HOOK_MARKER = "#aidlc-cost-hook";
|
|
|
25
25
|
* `nodePath`/`cliPath` are still taken, but only to seed the shim's *hints*;
|
|
26
26
|
* they no longer appear in the command text.
|
|
27
27
|
*/
|
|
28
|
-
export declare function hookCommands(_nodePath
|
|
28
|
+
export declare function hookCommands(_nodePath?: string, _cliPath?: string): {
|
|
29
29
|
sessionEnd: string;
|
|
30
30
|
sessionStart: string;
|
|
31
31
|
};
|
|
@@ -62,6 +62,22 @@ export interface HookStatus {
|
|
|
62
62
|
* `shim.ts:shimProblem`.
|
|
63
63
|
*/
|
|
64
64
|
shim: ShimProblem | null;
|
|
65
|
+
/**
|
|
66
|
+
* The installed command text is not what the current installer would write, so
|
|
67
|
+
* the hook is armed with an older contract.
|
|
68
|
+
*
|
|
69
|
+
* Generic on purpose. `legacy` answers one historical question (does this
|
|
70
|
+
* predate the shim?) and needed a migration written for it; this asks the
|
|
71
|
+
* question that recurs — *is the command current?* — so the next command-shape
|
|
72
|
+
* change is repaired by the machinery already here rather than by another
|
|
73
|
+
* bespoke detector. `stash-unstash-on-end` is the first such change: a
|
|
74
|
+
* SessionEnd hook without `--session-end` still works via the payload signal,
|
|
75
|
+
* but it should not stay behind.
|
|
76
|
+
*
|
|
77
|
+
* A legacy hook is outdated too. Order in the migration registry settles that:
|
|
78
|
+
* `legacy-cost-hooks` re-installs first, and this then reads clean.
|
|
79
|
+
*/
|
|
80
|
+
outdated: boolean;
|
|
65
81
|
}
|
|
66
82
|
export declare function claudeCodeHookStatus(projectRoot: string): HookStatus;
|
|
67
83
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/cost/hooks/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAA0C,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAErF,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAuB9C;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/cost/hooks/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAA0C,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAErF,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAuB9C;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,SAAS,SAAK,EAAE,QAAQ,SAAK,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAUxG;AAwBD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAgBnG;AAED,0DAA0D;AAC1D,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAW/D;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;OAQG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;;;;;OASG;IACH,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAoBD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAwBpE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGpE"}
|
|
@@ -30,10 +30,14 @@ function settingsPath(projectRoot) {
|
|
|
30
30
|
* `nodePath`/`cliPath` are still taken, but only to seed the shim's *hints*;
|
|
31
31
|
* they no longer appear in the command text.
|
|
32
32
|
*/
|
|
33
|
-
export function hookCommands(_nodePath, _cliPath) {
|
|
33
|
+
export function hookCommands(_nodePath = '', _cliPath = '') {
|
|
34
34
|
const base = shimInvocation();
|
|
35
35
|
return {
|
|
36
|
-
|
|
36
|
+
// `--session-end` declares what the event means, so the recorder drops the
|
|
37
|
+
// session's active-session stash entry. The payload also names the event, and
|
|
38
|
+
// `cost record` accepts either — that fallback is what fixes installs whose
|
|
39
|
+
// command text still predates this flag.
|
|
40
|
+
sessionEnd: `${base} cost record --provider claude-code --detach --session-end ${HOOK_MARKER}`,
|
|
37
41
|
sessionStart: `${base} cost session-start --provider claude-code ${HOOK_MARKER}`,
|
|
38
42
|
};
|
|
39
43
|
}
|
|
@@ -96,25 +100,46 @@ export function removeClaudeCodeHooks(projectRoot) {
|
|
|
96
100
|
delete settings.hooks;
|
|
97
101
|
saveSettings(projectRoot, settings);
|
|
98
102
|
}
|
|
103
|
+
/** Command bodies of our marked hooks under one event, in file order. */
|
|
104
|
+
function markedCommands(groups) {
|
|
105
|
+
return (groups ?? [])
|
|
106
|
+
.flatMap((g) => g.hooks)
|
|
107
|
+
.filter((h) => h.command.endsWith(HOOK_MARKER))
|
|
108
|
+
.map((h) => h.command);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Whether the marked hooks for one event are exactly what the installer writes:
|
|
112
|
+
* one command, byte-identical. The installer replaces every marked hook with a
|
|
113
|
+
* single group, so anything else is drift.
|
|
114
|
+
*/
|
|
115
|
+
function commandsCurrent(groups, expected) {
|
|
116
|
+
const found = markedCommands(groups);
|
|
117
|
+
return found.length === 1 && found[0] === expected;
|
|
118
|
+
}
|
|
99
119
|
export function claudeCodeHookStatus(projectRoot) {
|
|
100
120
|
let settings;
|
|
101
121
|
try {
|
|
102
122
|
settings = loadSettings(projectRoot);
|
|
103
123
|
}
|
|
104
124
|
catch {
|
|
105
|
-
return { installed: false, legacy: false, shim: null };
|
|
125
|
+
return { installed: false, legacy: false, shim: null, outdated: false };
|
|
106
126
|
}
|
|
107
127
|
const installed = hasMarkedHook(settings.hooks?.SessionEnd) && hasMarkedHook(settings.hooks?.SessionStart);
|
|
128
|
+
// An absent hook is a different condition from a stale one, so nothing that
|
|
129
|
+
// describes staleness is reported for it.
|
|
108
130
|
if (!installed)
|
|
109
|
-
return { installed: false, legacy: false, shim: null };
|
|
131
|
+
return { installed: false, legacy: false, shim: null, outdated: false };
|
|
110
132
|
const cmd = (settings.hooks?.SessionEnd ?? [])
|
|
111
133
|
.flatMap((g) => g.hooks)
|
|
112
134
|
.find((h) => h.command.endsWith(HOOK_MARKER))?.command;
|
|
113
135
|
const legacy = isLegacyCommand(cmd);
|
|
136
|
+
const expected = hookCommands();
|
|
137
|
+
const outdated = !commandsCurrent(settings.hooks?.SessionEnd, expected.sessionEnd) ||
|
|
138
|
+
!commandsCurrent(settings.hooks?.SessionStart, expected.sessionStart);
|
|
114
139
|
// A legacy hook does not go through the shim at all, so the shim's state is
|
|
115
140
|
// not what is wrong with it — reporting both would send the reader down the
|
|
116
141
|
// wrong repair.
|
|
117
|
-
return { installed, legacy, shim: legacy ? null : shimProblem(projectRoot) };
|
|
142
|
+
return { installed, legacy, shim: legacy ? null : shimProblem(projectRoot), outdated };
|
|
118
143
|
}
|
|
119
144
|
/**
|
|
120
145
|
* A hook command predates the shim when it does not invoke it. Matching on the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/cost/hooks/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAErF,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAmB9C,SAAS,YAAY,CAAC,WAAmB;IACvC,OAAO,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/cost/hooks/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro.d.ts","sourceRoot":"","sources":["../../../src/cost/hooks/kiro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"kiro.d.ts","sourceRoot":"","sources":["../../../src/cost/hooks/kiro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAwCjF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAM7F;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAGzD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAmB9D"}
|
package/dist/cost/hooks/kiro.js
CHANGED
|
@@ -15,6 +15,38 @@ import { shimInvocation, writeShim, shimProblem } from './shim.js';
|
|
|
15
15
|
function hookFilePath(projectRoot) {
|
|
16
16
|
return join(projectRoot, '.kiro', 'hooks', 'aidlc-cost.json');
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* The hook entries this version installs — the single declaration site, so
|
|
20
|
+
* `kiroHookStatus` can tell an out-of-date command from a current one without
|
|
21
|
+
* restating the text.
|
|
22
|
+
*
|
|
23
|
+
* `Stop` deliberately carries no `--session-end`: it fires after every response,
|
|
24
|
+
* not at session end, and unstashing there would delete a live session's entry
|
|
25
|
+
* dozens of times an hour. Kiro exposes no session-end event, so a kiro entry
|
|
26
|
+
* leaves the stash on the TTL — which is what the liveness rule's
|
|
27
|
+
* "no transcript declared, so unmeasurable" case protects.
|
|
28
|
+
*/
|
|
29
|
+
function kiroHooks() {
|
|
30
|
+
const base = shimInvocation('AIDLC_PROJECT_ROOT');
|
|
31
|
+
return [
|
|
32
|
+
{
|
|
33
|
+
name: 'aidlc-cost-record',
|
|
34
|
+
trigger: 'Stop',
|
|
35
|
+
action: {
|
|
36
|
+
type: 'command',
|
|
37
|
+
command: `${base} cost record --provider kiro --detach ${HOOK_MARKER}`,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'aidlc-cost-session-start',
|
|
42
|
+
trigger: 'SessionStart',
|
|
43
|
+
action: {
|
|
44
|
+
type: 'command',
|
|
45
|
+
command: `${base} cost session-start --provider kiro ${HOOK_MARKER}`,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
}
|
|
18
50
|
/**
|
|
19
51
|
* Install the kiro cost hooks.
|
|
20
52
|
*
|
|
@@ -31,28 +63,7 @@ function hookFilePath(projectRoot) {
|
|
|
31
63
|
*/
|
|
32
64
|
export function installKiroHooks(projectRoot, nodePath, cliPath) {
|
|
33
65
|
writeShim(projectRoot, nodePath, cliPath);
|
|
34
|
-
const
|
|
35
|
-
const file = {
|
|
36
|
-
version: 'v1',
|
|
37
|
-
hooks: [
|
|
38
|
-
{
|
|
39
|
-
name: 'aidlc-cost-record',
|
|
40
|
-
trigger: 'Stop',
|
|
41
|
-
action: {
|
|
42
|
-
type: 'command',
|
|
43
|
-
command: `${base} cost record --provider kiro --detach ${HOOK_MARKER}`,
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
name: 'aidlc-cost-session-start',
|
|
48
|
-
trigger: 'SessionStart',
|
|
49
|
-
action: {
|
|
50
|
-
type: 'command',
|
|
51
|
-
command: `${base} cost session-start --provider kiro ${HOOK_MARKER}`,
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
],
|
|
55
|
-
};
|
|
66
|
+
const file = { version: 'v1', hooks: kiroHooks() };
|
|
56
67
|
const path = hookFilePath(projectRoot);
|
|
57
68
|
mkdirSync(dirname(path), { recursive: true });
|
|
58
69
|
writeFileSync(path, JSON.stringify(file, null, 2) + '\n');
|
|
@@ -65,16 +76,21 @@ export function removeKiroHooks(projectRoot) {
|
|
|
65
76
|
export function kiroHookStatus(projectRoot) {
|
|
66
77
|
const path = hookFilePath(projectRoot);
|
|
67
78
|
if (!existsSync(path))
|
|
68
|
-
return { installed: false, legacy: false, shim: null };
|
|
79
|
+
return { installed: false, legacy: false, shim: null, outdated: false };
|
|
69
80
|
try {
|
|
70
81
|
const parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
71
|
-
const
|
|
82
|
+
const found = (parsed.hooks ?? [])
|
|
83
|
+
.map((h) => h.action?.command)
|
|
84
|
+
.filter((c) => typeof c === 'string' && c.includes(HOOK_MARKER));
|
|
85
|
+
const cmd = found[0];
|
|
72
86
|
const legacy = isLegacyCommand(cmd);
|
|
87
|
+
const expected = kiroHooks().map((h) => h.action.command);
|
|
88
|
+
const outdated = found.length !== expected.length || expected.some((c, i) => found[i] !== c);
|
|
73
89
|
// Kiro's hook file invokes the same generated shim, so it fails the same way.
|
|
74
|
-
return { installed: true, legacy, shim: legacy ? null : shimProblem(projectRoot) };
|
|
90
|
+
return { installed: true, legacy, shim: legacy ? null : shimProblem(projectRoot), outdated };
|
|
75
91
|
}
|
|
76
92
|
catch {
|
|
77
|
-
return { installed: false, legacy: false, shim: null };
|
|
93
|
+
return { installed: false, legacy: false, shim: null, outdated: false };
|
|
78
94
|
}
|
|
79
95
|
}
|
|
80
96
|
//# sourceMappingURL=kiro.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../../src/cost/hooks/kiro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAmB,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEnE,SAAS,YAAY,CAAC,WAAmB;IACvC,OAAO,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAChE,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../../src/cost/hooks/kiro.ts"],"names":[],"mappings":"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"}
|
package/dist/cost/sessions.d.ts
CHANGED
|
@@ -11,6 +11,20 @@
|
|
|
11
11
|
* Design: design.md §2.2, §2.3, §4.3
|
|
12
12
|
*/
|
|
13
13
|
import type { SessionEvent, ClaimInterval, ActiveSession } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* How recently a stash entry must show activity to count as a *candidate* for
|
|
16
|
+
* "which session am I?".
|
|
17
|
+
*
|
|
18
|
+
* Deletion (TTL) and candidacy (liveness) are different questions and the bug
|
|
19
|
+
* came from answering only the first. `resolveCurrentSession` used to treat every
|
|
20
|
+
* unexpired entry as a candidate, so each finished session poisoned resolution
|
|
21
|
+
* for up to 48 hours; this repo carried 18 entries of which 3 were running.
|
|
22
|
+
*
|
|
23
|
+
* 30 minutes is chosen against the caller: `resolveCurrentSession` runs from
|
|
24
|
+
* inside a live session (`aidlc claim`), whose transcript was appended to seconds
|
|
25
|
+
* ago. Anything that has been silent for half an hour is not the session asking.
|
|
26
|
+
*/
|
|
27
|
+
export declare const STASH_LIVENESS_MS: number;
|
|
14
28
|
export declare function sessionsPath(projectRoot: string, instance: string): string;
|
|
15
29
|
export declare function stashDir(projectRoot: string): string;
|
|
16
30
|
/** Append a session event (O_APPEND whole-line write). */
|
|
@@ -32,9 +46,49 @@ export declare function readSessionEvents(path: string): SessionEvent[];
|
|
|
32
46
|
export declare function resolveIntervals(events: SessionEvent[], claimTimeoutMinutes: number, now?: Date): ClaimInterval[];
|
|
33
47
|
/** Write a stash entry for a just-started platform session. */
|
|
34
48
|
export declare function stashSession(projectRoot: string, session: ActiveSession): void;
|
|
49
|
+
/**
|
|
50
|
+
* Remove one session's stash entry — the step that never existed.
|
|
51
|
+
*
|
|
52
|
+
* Entries were written on SessionStart and removed only by a 48-hour timer, so a
|
|
53
|
+
* finished session went on being a candidate for two days and
|
|
54
|
+
* `resolveCurrentSession` refused to guess between it and the live one. The
|
|
55
|
+
* SessionEnd hook already receives the ending session's id; this is what it does
|
|
56
|
+
* with it.
|
|
57
|
+
*
|
|
58
|
+
* Returns whether an entry was removed. Idempotent by contract: an end hook can
|
|
59
|
+
* fire twice, and a second call is a `false`, not an error.
|
|
60
|
+
*
|
|
61
|
+
* SECURITY: the id is regex-validated before it reaches `join`, so a hook payload
|
|
62
|
+
* cannot steer the unlink outside the stash directory — the same rule
|
|
63
|
+
* `stashSession` applies on the way in.
|
|
64
|
+
*/
|
|
65
|
+
export declare function unstashSession(projectRoot: string, sessionId: string): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Whether an entry looks like a session that is still running.
|
|
68
|
+
*
|
|
69
|
+
* Three cases, ordered by how much the entry lets us know:
|
|
70
|
+
*
|
|
71
|
+
* - declares a readable `transcript_path` → live iff it was appended to within
|
|
72
|
+
* STASH_LIVENESS_MS. This is the real signal: a running session writes its
|
|
73
|
+
* transcript every turn.
|
|
74
|
+
* - declares a `transcript_path` that is not there → fall back to `started_at`.
|
|
75
|
+
* A session can be seconds old with no transcript on disk yet (SessionStart
|
|
76
|
+
* fires before the first message is written), so absence alone must not read
|
|
77
|
+
* as death — but an entry claiming a transcript that never appeared and
|
|
78
|
+
* starting hours ago is not running.
|
|
79
|
+
* - declares no `transcript_path` → liveness is unmeasurable, so it stays a
|
|
80
|
+
* candidate and only the TTL applies. Kiro supplies no transcript, and
|
|
81
|
+
* excluding those entries would strip resolution from long kiro sessions that
|
|
82
|
+
* work today.
|
|
83
|
+
*/
|
|
84
|
+
export declare function isLiveEntry(entry: ActiveSession, now?: Date): boolean;
|
|
35
85
|
/**
|
|
36
86
|
* Stash entries past the TTL (or unparseable — pruneStash removes those
|
|
37
87
|
* too). Read-only half of pruneStash, shared with `aidlc doctor` (AC-18).
|
|
88
|
+
*
|
|
89
|
+
* Deliberately TTL-only: liveness decides candidacy, never deletion, so an idle
|
|
90
|
+
* session's entry stays on disk and `aidlc doctor` keeps reporting exactly what it
|
|
91
|
+
* removes.
|
|
38
92
|
*/
|
|
39
93
|
export declare function expiredStashEntries(projectRoot: string, now?: Date): string[];
|
|
40
94
|
/**
|
|
@@ -42,12 +96,41 @@ export declare function expiredStashEntries(projectRoot: string, now?: Date): st
|
|
|
42
96
|
* Returns the removed filenames.
|
|
43
97
|
*/
|
|
44
98
|
export declare function pruneStash(projectRoot: string, now?: Date): string[];
|
|
45
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* Resolve a directory to its repo identity (git common dir), or null.
|
|
101
|
+
*
|
|
102
|
+
* The anchor is canonicalized because two spellings of one directory otherwise
|
|
103
|
+
* read as two repositories: a hook payload saying `/tmp/x` and a project root
|
|
104
|
+
* resolved to `/private/tmp/x` produced *zero* candidates, which looks exactly
|
|
105
|
+
* like "no session here". `cost/agent.ts:canonical` already does this, in its
|
|
106
|
+
* non-git branch only.
|
|
107
|
+
*
|
|
108
|
+
* What is NOT changed: `join(cwd, out)`. `git rev-parse --git-common-dir` answers
|
|
109
|
+
* relatively from a primary checkout and absolutely from a linked worktree, so
|
|
110
|
+
* `join` concatenates rather than replaces and a worktree gets its own identity —
|
|
111
|
+
* load-bearing for `resolveCurrentSession`, whose single-candidate rule wants a
|
|
112
|
+
* worktree session and a primary-checkout session to look like different
|
|
113
|
+
* workspaces. See the note at `sync.ts:repoCommonDir`, which needs the opposite
|
|
114
|
+
* and therefore has its own function.
|
|
115
|
+
*/
|
|
46
116
|
export declare function repoIdentity(cwd: string): string | null;
|
|
117
|
+
/**
|
|
118
|
+
* Resolve symlinks for comparison; unresolvable paths compare as written.
|
|
119
|
+
*
|
|
120
|
+
* Shared with `cost/agent.ts`, which needs the same rule for the same reason —
|
|
121
|
+
* two spellings of one directory must not compare as two directories.
|
|
122
|
+
*/
|
|
123
|
+
export declare function canonical(p: string): string;
|
|
47
124
|
/**
|
|
48
125
|
* Find the current platform session with the strict single-candidate rule:
|
|
49
|
-
* exactly one live stash entry whose repo identity matches → that session;
|
|
126
|
+
* exactly one **live** stash entry whose repo identity matches → that session;
|
|
50
127
|
* zero or multiple → null (caller degrades to id_source: agent).
|
|
128
|
+
*
|
|
129
|
+
* The rule itself is unchanged and correct — two genuinely live sessions are
|
|
130
|
+
* ambiguous, and guessing between them would attribute one session's cost to the
|
|
131
|
+
* other's instance. What changed is the candidate set: `isLiveEntry` drops
|
|
132
|
+
* sessions that have finished or died, which is what the rule always assumed and
|
|
133
|
+
* nothing enforced.
|
|
51
134
|
*/
|
|
52
135
|
export declare function resolveCurrentSession(projectRoot: string, now?: Date): ActiveSession | null;
|
|
53
136
|
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/cost/sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/cost/sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAkBH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAe7E;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,QAAiB,CAAC;AAEhD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpD;AAgBD,0DAA0D;AAC1D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAS1E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CA0B9D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EAAE,EACtB,mBAAmB,EAAE,MAAM,EAC3B,GAAG,GAAE,IAAiB,GACrB,aAAa,EAAE,CA6BjB;AAiBD,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAK9E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAS9E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAWjF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,EAAE,CAgBzF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,EAAE,CAWhF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWvD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,GAAG,GAAE,IAAiB,GACrB,aAAa,GAAG,IAAI,CAsBtB"}
|
package/dist/cost/sessions.js
CHANGED
|
@@ -10,12 +10,34 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Design: design.md §2.2, §2.3, §4.3
|
|
12
12
|
*/
|
|
13
|
-
import { readFileSync, writeFileSync, readdirSync, unlinkSync, openSync, writeSync, closeSync, constants, mkdirSync, existsSync, } from 'node:fs';
|
|
13
|
+
import { readFileSync, writeFileSync, readdirSync, realpathSync, statSync, unlinkSync, openSync, writeSync, closeSync, constants, mkdirSync, existsSync, } from 'node:fs';
|
|
14
14
|
import { dirname, join } from 'node:path';
|
|
15
15
|
import { execFileSync } from 'node:child_process';
|
|
16
16
|
import { SESSION_ID_RE } from './types.js';
|
|
17
17
|
const EVENTS = new Set(['claim', 'renew', 'release']);
|
|
18
|
+
/**
|
|
19
|
+
* How long a stash entry survives on disk. Since unstash-on-session-end exists
|
|
20
|
+
* (`unstashSession`, wired to the SessionEnd hook) this is only a crash-recovery
|
|
21
|
+
* backstop, and it is deliberately left long: pruning is *deletion*, and a
|
|
22
|
+
* session can legitimately stay open for days, so a short TTL would delete a
|
|
23
|
+
* live session's entry. Candidacy is a separate, much tighter question — see
|
|
24
|
+
* STASH_LIVENESS_MS.
|
|
25
|
+
*/
|
|
18
26
|
const STASH_TTL_MS = 48 * 60 * 60 * 1000;
|
|
27
|
+
/**
|
|
28
|
+
* How recently a stash entry must show activity to count as a *candidate* for
|
|
29
|
+
* "which session am I?".
|
|
30
|
+
*
|
|
31
|
+
* Deletion (TTL) and candidacy (liveness) are different questions and the bug
|
|
32
|
+
* came from answering only the first. `resolveCurrentSession` used to treat every
|
|
33
|
+
* unexpired entry as a candidate, so each finished session poisoned resolution
|
|
34
|
+
* for up to 48 hours; this repo carried 18 entries of which 3 were running.
|
|
35
|
+
*
|
|
36
|
+
* 30 minutes is chosen against the caller: `resolveCurrentSession` runs from
|
|
37
|
+
* inside a live session (`aidlc claim`), whose transcript was appended to seconds
|
|
38
|
+
* ago. Anything that has been silent for half an hour is not the session asking.
|
|
39
|
+
*/
|
|
40
|
+
export const STASH_LIVENESS_MS = 30 * 60 * 1000;
|
|
19
41
|
export function sessionsPath(projectRoot, instance) {
|
|
20
42
|
return join(projectRoot, '.aidlc', 'state', instance, 'sessions.ndjson');
|
|
21
43
|
}
|
|
@@ -142,9 +164,74 @@ export function stashSession(projectRoot, session) {
|
|
|
142
164
|
mkdirSync(dir, { recursive: true });
|
|
143
165
|
writeFileSync(join(dir, `${session.session_id}.json`), JSON.stringify(session) + '\n');
|
|
144
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Remove one session's stash entry — the step that never existed.
|
|
169
|
+
*
|
|
170
|
+
* Entries were written on SessionStart and removed only by a 48-hour timer, so a
|
|
171
|
+
* finished session went on being a candidate for two days and
|
|
172
|
+
* `resolveCurrentSession` refused to guess between it and the live one. The
|
|
173
|
+
* SessionEnd hook already receives the ending session's id; this is what it does
|
|
174
|
+
* with it.
|
|
175
|
+
*
|
|
176
|
+
* Returns whether an entry was removed. Idempotent by contract: an end hook can
|
|
177
|
+
* fire twice, and a second call is a `false`, not an error.
|
|
178
|
+
*
|
|
179
|
+
* SECURITY: the id is regex-validated before it reaches `join`, so a hook payload
|
|
180
|
+
* cannot steer the unlink outside the stash directory — the same rule
|
|
181
|
+
* `stashSession` applies on the way in.
|
|
182
|
+
*/
|
|
183
|
+
export function unstashSession(projectRoot, sessionId) {
|
|
184
|
+
if (!SESSION_ID_RE.test(sessionId))
|
|
185
|
+
return false;
|
|
186
|
+
try {
|
|
187
|
+
unlinkSync(join(stashDir(projectRoot), `${sessionId}.json`));
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// Already gone (double-fired hook, concurrent prune) — the desired state.
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Whether an entry looks like a session that is still running.
|
|
197
|
+
*
|
|
198
|
+
* Three cases, ordered by how much the entry lets us know:
|
|
199
|
+
*
|
|
200
|
+
* - declares a readable `transcript_path` → live iff it was appended to within
|
|
201
|
+
* STASH_LIVENESS_MS. This is the real signal: a running session writes its
|
|
202
|
+
* transcript every turn.
|
|
203
|
+
* - declares a `transcript_path` that is not there → fall back to `started_at`.
|
|
204
|
+
* A session can be seconds old with no transcript on disk yet (SessionStart
|
|
205
|
+
* fires before the first message is written), so absence alone must not read
|
|
206
|
+
* as death — but an entry claiming a transcript that never appeared and
|
|
207
|
+
* starting hours ago is not running.
|
|
208
|
+
* - declares no `transcript_path` → liveness is unmeasurable, so it stays a
|
|
209
|
+
* candidate and only the TTL applies. Kiro supplies no transcript, and
|
|
210
|
+
* excluding those entries would strip resolution from long kiro sessions that
|
|
211
|
+
* work today.
|
|
212
|
+
*/
|
|
213
|
+
export function isLiveEntry(entry, now = new Date()) {
|
|
214
|
+
if (entry.transcript_path === undefined || entry.transcript_path === '')
|
|
215
|
+
return true;
|
|
216
|
+
try {
|
|
217
|
+
const st = statSync(entry.transcript_path);
|
|
218
|
+
return now.getTime() - st.mtimeMs <= STASH_LIVENESS_MS;
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
const started = Date.parse(entry.started_at);
|
|
222
|
+
// An unparseable timestamp measures nothing; unmeasurable is not dead.
|
|
223
|
+
if (Number.isNaN(started))
|
|
224
|
+
return true;
|
|
225
|
+
return now.getTime() - started <= STASH_LIVENESS_MS;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
145
228
|
/**
|
|
146
229
|
* Stash entries past the TTL (or unparseable — pruneStash removes those
|
|
147
230
|
* too). Read-only half of pruneStash, shared with `aidlc doctor` (AC-18).
|
|
231
|
+
*
|
|
232
|
+
* Deliberately TTL-only: liveness decides candidacy, never deletion, so an idle
|
|
233
|
+
* session's entry stays on disk and `aidlc doctor` keeps reporting exactly what it
|
|
234
|
+
* removes.
|
|
148
235
|
*/
|
|
149
236
|
export function expiredStashEntries(projectRoot, now = new Date()) {
|
|
150
237
|
const dir = stashDir(projectRoot);
|
|
@@ -183,7 +270,23 @@ export function pruneStash(projectRoot, now = new Date()) {
|
|
|
183
270
|
}
|
|
184
271
|
return expired;
|
|
185
272
|
}
|
|
186
|
-
/**
|
|
273
|
+
/**
|
|
274
|
+
* Resolve a directory to its repo identity (git common dir), or null.
|
|
275
|
+
*
|
|
276
|
+
* The anchor is canonicalized because two spellings of one directory otherwise
|
|
277
|
+
* read as two repositories: a hook payload saying `/tmp/x` and a project root
|
|
278
|
+
* resolved to `/private/tmp/x` produced *zero* candidates, which looks exactly
|
|
279
|
+
* like "no session here". `cost/agent.ts:canonical` already does this, in its
|
|
280
|
+
* non-git branch only.
|
|
281
|
+
*
|
|
282
|
+
* What is NOT changed: `join(cwd, out)`. `git rev-parse --git-common-dir` answers
|
|
283
|
+
* relatively from a primary checkout and absolutely from a linked worktree, so
|
|
284
|
+
* `join` concatenates rather than replaces and a worktree gets its own identity —
|
|
285
|
+
* load-bearing for `resolveCurrentSession`, whose single-candidate rule wants a
|
|
286
|
+
* worktree session and a primary-checkout session to look like different
|
|
287
|
+
* workspaces. See the note at `sync.ts:repoCommonDir`, which needs the opposite
|
|
288
|
+
* and therefore has its own function.
|
|
289
|
+
*/
|
|
187
290
|
export function repoIdentity(cwd) {
|
|
188
291
|
try {
|
|
189
292
|
const out = execFileSync('git', ['rev-parse', '--git-common-dir'], {
|
|
@@ -191,16 +294,36 @@ export function repoIdentity(cwd) {
|
|
|
191
294
|
encoding: 'utf8',
|
|
192
295
|
stdio: ['ignore', 'pipe', 'ignore'],
|
|
193
296
|
}).trim();
|
|
194
|
-
return join(cwd, out);
|
|
297
|
+
return join(canonical(cwd), out);
|
|
195
298
|
}
|
|
196
299
|
catch {
|
|
197
300
|
return null;
|
|
198
301
|
}
|
|
199
302
|
}
|
|
303
|
+
/**
|
|
304
|
+
* Resolve symlinks for comparison; unresolvable paths compare as written.
|
|
305
|
+
*
|
|
306
|
+
* Shared with `cost/agent.ts`, which needs the same rule for the same reason —
|
|
307
|
+
* two spellings of one directory must not compare as two directories.
|
|
308
|
+
*/
|
|
309
|
+
export function canonical(p) {
|
|
310
|
+
try {
|
|
311
|
+
return realpathSync(p);
|
|
312
|
+
}
|
|
313
|
+
catch {
|
|
314
|
+
return p;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
200
317
|
/**
|
|
201
318
|
* Find the current platform session with the strict single-candidate rule:
|
|
202
|
-
* exactly one live stash entry whose repo identity matches → that session;
|
|
319
|
+
* exactly one **live** stash entry whose repo identity matches → that session;
|
|
203
320
|
* zero or multiple → null (caller degrades to id_source: agent).
|
|
321
|
+
*
|
|
322
|
+
* The rule itself is unchanged and correct — two genuinely live sessions are
|
|
323
|
+
* ambiguous, and guessing between them would attribute one session's cost to the
|
|
324
|
+
* other's instance. What changed is the candidate set: `isLiveEntry` drops
|
|
325
|
+
* sessions that have finished or died, which is what the rule always assumed and
|
|
326
|
+
* nothing enforced.
|
|
204
327
|
*/
|
|
205
328
|
export function resolveCurrentSession(projectRoot, now = new Date()) {
|
|
206
329
|
pruneStash(projectRoot, now);
|
|
@@ -208,6 +331,7 @@ export function resolveCurrentSession(projectRoot, now = new Date()) {
|
|
|
208
331
|
if (!existsSync(dir))
|
|
209
332
|
return null;
|
|
210
333
|
const here = repoIdentity(projectRoot);
|
|
334
|
+
const hereReal = canonical(projectRoot);
|
|
211
335
|
const candidates = [];
|
|
212
336
|
for (const f of readdirSync(dir)) {
|
|
213
337
|
if (!f.endsWith('.json'))
|
|
@@ -215,12 +339,11 @@ export function resolveCurrentSession(projectRoot, now = new Date()) {
|
|
|
215
339
|
try {
|
|
216
340
|
const entry = JSON.parse(readFileSync(join(dir, f), 'utf8'));
|
|
217
341
|
const theirs = repoIdentity(entry.cwd);
|
|
218
|
-
|
|
342
|
+
const sameRepo = here !== null && theirs !== null
|
|
343
|
+
? here === theirs
|
|
344
|
+
: here === null && canonical(entry.cwd) === hereReal;
|
|
345
|
+
if (sameRepo && isLiveEntry(entry, now))
|
|
219
346
|
candidates.push(entry);
|
|
220
|
-
}
|
|
221
|
-
else if (here === null && entry.cwd === projectRoot) {
|
|
222
|
-
candidates.push(entry);
|
|
223
|
-
}
|
|
224
347
|
}
|
|
225
348
|
catch {
|
|
226
349
|
// Unreadable stash entries are ignored here; pruneStash removes them.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/cost/sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/cost/sessions.ts"],"names":[],"mappings":"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"}
|
package/dist/cost/types.d.ts
CHANGED
|
@@ -152,6 +152,16 @@ export interface RecordInput {
|
|
|
152
152
|
session_id: string;
|
|
153
153
|
transcript_path?: string;
|
|
154
154
|
cwd?: string;
|
|
155
|
+
/**
|
|
156
|
+
* The platform event that fired this hook, when the payload names it
|
|
157
|
+
* (claude-code always does; kiro's `Stop` does not).
|
|
158
|
+
*
|
|
159
|
+
* Read for one purpose: recognizing a session *end*, which is when the stash
|
|
160
|
+
* entry must be removed. Carrying it in the payload rather than only in the
|
|
161
|
+
* installed command text is what makes the fix reach installs that have not
|
|
162
|
+
* re-run `aidlc cost hooks install`.
|
|
163
|
+
*/
|
|
164
|
+
hook_event_name?: string;
|
|
155
165
|
}
|
|
156
166
|
/** Per-model (or per-unit) pricing entry. */
|
|
157
167
|
export interface RateEntry {
|
package/dist/cost/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cost/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cost/types.ts"],"names":[],"mappings":"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"}
|
package/dist/cost/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cost/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqIH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,IAAI;IACJ,gBAAgB;IAChB,uBAAuB;CACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cost/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqIH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,IAAI;IACJ,gBAAgB;IAChB,uBAAuB;CACxB,CAAC;AA0CF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAErD,iDAAiD;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,4BAA4B,CAAC"}
|
|
@@ -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;AAqB7C,eAAO,MAAM,UAAU,EAAE,SAAS,EAsCjC,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 { outdatedCostHooks } from './outdated-cost-hooks.js';
|
|
19
20
|
import { missingCostShim } from './missing-cost-shim.js';
|
|
20
21
|
import { installGuidance } from './install-guidance.js';
|
|
21
22
|
import { trustRunActions } from './trust-run-actions.js';
|
|
@@ -55,6 +56,9 @@ export const MIGRATIONS = [
|
|
|
55
56
|
// Running this first keeps each migration's report about its own condition.
|
|
56
57
|
missingCostShim,
|
|
57
58
|
legacyCostHooks,
|
|
59
|
+
// Ordered after legacy-cost-hooks: that migration re-installs, which leaves the
|
|
60
|
+
// command current, so one run never reports a legacy hook twice.
|
|
61
|
+
outdatedCostHooks,
|
|
58
62
|
// Confirm tier: shows the exact `run:` commands from actions.yaml before
|
|
59
63
|
// recording machine-local trust — the event bus declines them until then.
|
|
60
64
|
trustRunActions,
|
|
@@ -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,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,aAAa;IACb,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,eAAe;IACf,4EAA4E;IAC5E,2EAA2E;IAC3E,8EAA8E;IAC9E,cAAc;IACd,aAAa;IACb,0EAA0E;IAC1E,qEAAqE;IACrE,+EAA+E;IAC/E,0EAA0E;IAC1E,mDAAmD;IACnD,iBAAiB;IACjB,8EAA8E;IAC9E,0EAA0E;IAC1E,yEAAyE;IACzE,kBAAkB;IAClB,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,wBAAwB;IACxB,aAAa;IACb,kBAAkB;IAClB,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,eAAe;IACf,eAAe;IACf,yEAAyE;IACzE,0EAA0E;IAC1E,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,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,aAAa;IACb,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,eAAe;IACf,4EAA4E;IAC5E,2EAA2E;IAC3E,8EAA8E;IAC9E,cAAc;IACd,aAAa;IACb,0EAA0E;IAC1E,qEAAqE;IACrE,+EAA+E;IAC/E,0EAA0E;IAC1E,mDAAmD;IACnD,iBAAiB;IACjB,8EAA8E;IAC9E,0EAA0E;IAC1E,yEAAyE;IACzE,kBAAkB;IAClB,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,wBAAwB;IACxB,aAAa;IACb,kBAAkB;IAClB,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,eAAe;IACf,eAAe;IACf,gFAAgF;IAChF,iEAAiE;IACjE,iBAAiB;IACjB,yEAAyE;IACzE,0EAA0E;IAC1E,eAAe;CAChB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* outdated-cost-hooks migration: re-install cost hooks whose command text is not
|
|
3
|
+
* what this version writes.
|
|
4
|
+
*
|
|
5
|
+
* `legacy-cost-hooks` answers one historical question — does this hook predate the
|
|
6
|
+
* shim? — and had to be written when that change shipped. This one answers the
|
|
7
|
+
* question that recurs: is the installed command current? Every future
|
|
8
|
+
* command-shape change is then repaired by machinery that already exists, instead
|
|
9
|
+
* of by another bespoke detector nobody remembers to add.
|
|
10
|
+
*
|
|
11
|
+
* The change that prompted it: the claude-code SessionEnd hook now passes
|
|
12
|
+
* `--session-end`, so the recorder drops the ending session's active-session stash
|
|
13
|
+
* entry. An install without the flag is not broken — `cost record` also accepts the
|
|
14
|
+
* `hook_event_name: "SessionEnd"` signal in the payload, which is deliberately what
|
|
15
|
+
* makes the fix land without a re-install — but it should not stay behind.
|
|
16
|
+
*
|
|
17
|
+
* Same narrow warrant as `legacy-cost-hooks`: it only ever replaces hook entries
|
|
18
|
+
* carrying our own `#aidlc-cost-hook` marker, through the merge-not-clobber
|
|
19
|
+
* installer, so nothing the user wrote is touched. Self-clearing — after the
|
|
20
|
+
* re-install the status reads current.
|
|
21
|
+
*
|
|
22
|
+
* Ordered after `legacy-cost-hooks`, which re-installs and therefore leaves those
|
|
23
|
+
* platforms current: each migration then reports only its own condition.
|
|
24
|
+
*/
|
|
25
|
+
import type { Migration } from '../types.js';
|
|
26
|
+
/**
|
|
27
|
+
* Platforms whose installed hook command differs from the current one. Read-only
|
|
28
|
+
* half, exported for reuse and direct testing.
|
|
29
|
+
*
|
|
30
|
+
* Only installed hooks count: an absent hook was never armed, which is a different
|
|
31
|
+
* condition that `aidlc cost hooks status` already reports.
|
|
32
|
+
*/
|
|
33
|
+
export declare function outdatedCostHookPlatforms(projectRoot: string): string[];
|
|
34
|
+
export declare const outdatedCostHooks: Migration;
|
|
35
|
+
//# sourceMappingURL=outdated-cost-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outdated-cost-hooks.d.ts","sourceRoot":"","sources":["../../../src/doctor/migrations/outdated-cost-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAgB7C;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAOvE;AAWD,eAAO,MAAM,iBAAiB,EAAE,SAqB/B,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* outdated-cost-hooks migration: re-install cost hooks whose command text is not
|
|
3
|
+
* what this version writes.
|
|
4
|
+
*
|
|
5
|
+
* `legacy-cost-hooks` answers one historical question — does this hook predate the
|
|
6
|
+
* shim? — and had to be written when that change shipped. This one answers the
|
|
7
|
+
* question that recurs: is the installed command current? Every future
|
|
8
|
+
* command-shape change is then repaired by machinery that already exists, instead
|
|
9
|
+
* of by another bespoke detector nobody remembers to add.
|
|
10
|
+
*
|
|
11
|
+
* The change that prompted it: the claude-code SessionEnd hook now passes
|
|
12
|
+
* `--session-end`, so the recorder drops the ending session's active-session stash
|
|
13
|
+
* entry. An install without the flag is not broken — `cost record` also accepts the
|
|
14
|
+
* `hook_event_name: "SessionEnd"` signal in the payload, which is deliberately what
|
|
15
|
+
* makes the fix land without a re-install — but it should not stay behind.
|
|
16
|
+
*
|
|
17
|
+
* Same narrow warrant as `legacy-cost-hooks`: it only ever replaces hook entries
|
|
18
|
+
* carrying our own `#aidlc-cost-hook` marker, through the merge-not-clobber
|
|
19
|
+
* installer, so nothing the user wrote is touched. Self-clearing — after the
|
|
20
|
+
* re-install the status reads current.
|
|
21
|
+
*
|
|
22
|
+
* Ordered after `legacy-cost-hooks`, which re-installs and therefore leaves those
|
|
23
|
+
* platforms current: each migration then reports only its own condition.
|
|
24
|
+
*/
|
|
25
|
+
import { claudeCodeHookStatus, installClaudeCodeHooks } from '../../cost/hooks/claude-code.js';
|
|
26
|
+
import { kiroHookStatus, installKiroHooks } from '../../cost/hooks/kiro.js';
|
|
27
|
+
import { cliEntryPath } from '../../cost/hooks/entry.js';
|
|
28
|
+
// Static for the same reason as legacy-cost-hooks: allProviders() is empty unless
|
|
29
|
+
// someone has called registerBuiltinProviders(), and a diagnostic that silently
|
|
30
|
+
// finds nothing is worse than no diagnostic.
|
|
31
|
+
const HOOK_PLATFORMS = [
|
|
32
|
+
{ name: 'claude-code', status: claudeCodeHookStatus, install: installClaudeCodeHooks },
|
|
33
|
+
{ name: 'kiro', status: kiroHookStatus, install: installKiroHooks },
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* Platforms whose installed hook command differs from the current one. Read-only
|
|
37
|
+
* half, exported for reuse and direct testing.
|
|
38
|
+
*
|
|
39
|
+
* Only installed hooks count: an absent hook was never armed, which is a different
|
|
40
|
+
* condition that `aidlc cost hooks status` already reports.
|
|
41
|
+
*/
|
|
42
|
+
export function outdatedCostHookPlatforms(projectRoot) {
|
|
43
|
+
const outdated = [];
|
|
44
|
+
for (const p of HOOK_PLATFORMS) {
|
|
45
|
+
const status = p.status(projectRoot);
|
|
46
|
+
if (status.installed && status.outdated)
|
|
47
|
+
outdated.push(p.name);
|
|
48
|
+
}
|
|
49
|
+
return outdated;
|
|
50
|
+
}
|
|
51
|
+
function summarize(outdated) {
|
|
52
|
+
const one = outdated.length === 1;
|
|
53
|
+
return (`${outdated.length} cost hook${one ? '' : 's'} ` +
|
|
54
|
+
`still ${one ? 'uses' : 'use'} an older command form (${outdated.join(', ')}) — ` +
|
|
55
|
+
`re-installed so session end is reported and the stash stays accurate`);
|
|
56
|
+
}
|
|
57
|
+
export const outdatedCostHooks = {
|
|
58
|
+
id: 'outdated-cost-hooks',
|
|
59
|
+
tier: 'safe',
|
|
60
|
+
check(ctx) {
|
|
61
|
+
const outdated = outdatedCostHookPlatforms(ctx.projectRoot);
|
|
62
|
+
if (outdated.length === 0)
|
|
63
|
+
return { applicable: true, pending: false };
|
|
64
|
+
return { applicable: true, pending: true, description: summarize(outdated) };
|
|
65
|
+
},
|
|
66
|
+
apply(ctx) {
|
|
67
|
+
const outdated = outdatedCostHookPlatforms(ctx.projectRoot);
|
|
68
|
+
if (outdated.length === 0)
|
|
69
|
+
return { changed: false, summary: 'cost hook commands are current' };
|
|
70
|
+
// Hints only: the shim validates both at run time and neither reaches the
|
|
71
|
+
// command text (cost-capture-goes-dark/AC-1).
|
|
72
|
+
const nodePath = process.execPath;
|
|
73
|
+
const cliPath = cliEntryPath();
|
|
74
|
+
for (const p of HOOK_PLATFORMS) {
|
|
75
|
+
if (outdated.includes(p.name))
|
|
76
|
+
p.install(ctx.projectRoot, nodePath, cliPath);
|
|
77
|
+
}
|
|
78
|
+
return { changed: true, summary: summarize(outdated) };
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=outdated-cost-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outdated-cost-hooks.js","sourceRoot":"","sources":["../../../src/doctor/migrations/outdated-cost-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AASzD,kFAAkF;AAClF,gFAAgF;AAChF,6CAA6C;AAC7C,MAAM,cAAc,GAAmB;IACrC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,sBAAsB,EAAE;IACtF,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAE;CACpE,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CAAC,WAAmB;IAC3D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,QAAkB;IACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IAClC,OAAO,CACL,GAAG,QAAQ,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;QAChD,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,2BAA2B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;QACjF,sEAAsE,CACvE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAc;IAC1C,EAAE,EAAE,qBAAqB;IACzB,IAAI,EAAE,MAAM;IACZ,KAAK,CAAC,GAAG;QACP,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC/E,CAAC;IACD,KAAK,CAAC,GAAG;QACP,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;QAEhG,0EAA0E;QAC1E,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;YAC/B,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzD,CAAC;CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rasensio/aidlc",
|
|
3
|
-
"version": "1.15.
|
|
3
|
+
"version": "1.15.2",
|
|
4
4
|
"description": "AI Development Lifecycle Framework — structured lifecycle guidance for AI coding agents across platforms",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cli.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"commander": "15.0.0",
|
|
25
25
|
"picomatch": "4.0.5",
|
|
26
26
|
"yaml": "2.9.0",
|
|
27
|
-
"@rasensio/aidlc-content": "1.15.
|
|
27
|
+
"@rasensio/aidlc-content": "1.15.2"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "22.15.32",
|