@dzhechkov/harness-core 0.3.99 → 0.3.101
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/LICENSE +21 -0
- package/dist/claim-check.d.ts +21 -0
- package/dist/claim-check.d.ts.map +1 -0
- package/dist/claim-check.js +184 -0
- package/dist/claim-check.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/publish.d.ts +17 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +38 -3
- package/dist/publish.js.map +1 -1
- package/dist/usage.d.ts +88 -35
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +322 -86
- package/dist/usage.js.map +1 -1
- package/package.json +18 -18
- package/src/claim-check.ts +211 -0
- package/src/index.ts +24 -2
- package/src/publish.ts +53 -3
- package/src/usage.ts +421 -93
package/dist/usage.js
CHANGED
|
@@ -1,34 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `dz usage` data source — a READONLY, never-throw, best-effort estimate of Claude SESSION
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* and WEEKLY token usage, aggregated from the local Claude Code transcript files under
|
|
4
|
+
* `~/.claude/projects/<munged>/<session>.jsonl`.
|
|
5
5
|
*
|
|
6
|
-
* ## Honest-uncertainty contract (LOAD-BEARING
|
|
6
|
+
* ## Honest-uncertainty contract (LOAD-BEARING)
|
|
7
7
|
*
|
|
8
|
-
* These percentages are
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* These percentages are ESTIMATES derived by aggregating local transcript token counts against
|
|
9
|
+
* USER-CONFIGURED limits. There is no official Anthropic usage API being consulted; claude.ai is
|
|
10
|
+
* authoritative. Therefore:
|
|
11
11
|
*
|
|
12
|
-
* - Every payload carries `estimated: true
|
|
13
|
-
* - When a limit is
|
|
14
|
-
*
|
|
15
|
-
* -
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* dominate real transcripts) is absorbed into the calibrated limit value.
|
|
12
|
+
* - Every JSON payload emitted by the CLI carries `estimated: true`.
|
|
13
|
+
* - When a limit is unconfigured, the corresponding `pct` is `null` — unknown, never 0.
|
|
14
|
+
* - Weekly usage counts from a fixed configured reset anchor such as `Wed 08:59`, not from a
|
|
15
|
+
* rolling seven-day window.
|
|
16
|
+
* - Session usage counts from the active fixed-length transcript block, not from a rolling
|
|
17
|
+
* last-N-hours window.
|
|
19
18
|
*
|
|
20
|
-
* ## Statusline discipline
|
|
19
|
+
* ## Statusline discipline
|
|
21
20
|
*
|
|
22
21
|
* Modeled on {@link ./statusline.ts} and {@link ./vector-tier.ts}'s `readVectorEngineMode`:
|
|
23
|
-
* -
|
|
24
|
-
*
|
|
25
|
-
* -
|
|
26
|
-
*
|
|
27
|
-
* -
|
|
28
|
-
* window cannot contribute and is skipped WITHOUT opening it; only files touched inside the
|
|
29
|
-
* session window are line-parsed for the active block.
|
|
30
|
-
* - **injectable clock** — `computeUsage(root, now?)` takes an optional `now` (ms epoch) so all
|
|
31
|
-
* window math is deterministic under test.
|
|
22
|
+
* - never-throw — missing/corrupt config, transcript directories, and jsonl lines collapse to
|
|
23
|
+
* best-effort zero/null values, never exceptions;
|
|
24
|
+
* - readonly — `computeUsage` performs zero writes;
|
|
25
|
+
* - bounded scanning via an mtime prefilter;
|
|
26
|
+
* - injectable clock — `computeUsage(root, now?)` takes an optional epoch-ms clock.
|
|
32
27
|
*
|
|
33
28
|
* @packageDocumentation
|
|
34
29
|
*/
|
|
@@ -36,15 +31,99 @@ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
|
|
|
36
31
|
import { homedir } from 'node:os';
|
|
37
32
|
import { join } from 'node:path';
|
|
38
33
|
const HOUR_MS = 60 * 60 * 1000;
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
// mtime prefilter slack (+1h) — guards against clock skew between the writer and this reader
|
|
42
|
-
// (a file with a slightly-stale mtime that is actually in-window must not be dropped).
|
|
34
|
+
const DEFAULT_SESSION_BLOCK_HOURS = 5;
|
|
35
|
+
const DEFAULT_WEEKLY_RESET_ANCHOR = 'Wed 08:59';
|
|
36
|
+
// mtime prefilter slack (+1h) — guards against clock skew between the writer and this reader.
|
|
43
37
|
const MTIME_SLACK_MS = HOUR_MS;
|
|
38
|
+
export const CLAUDE_USAGE_MODELS = ['fable', 'opus', 'sonnet', 'haiku'];
|
|
39
|
+
const WEEKDAY_TO_DAY = {
|
|
40
|
+
sun: 0,
|
|
41
|
+
mon: 1,
|
|
42
|
+
tue: 2,
|
|
43
|
+
wed: 3,
|
|
44
|
+
thu: 4,
|
|
45
|
+
fri: 5,
|
|
46
|
+
sat: 6,
|
|
47
|
+
};
|
|
48
|
+
const DAY_TO_WEEKDAY = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
49
|
+
function isRecord(value) {
|
|
50
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
51
|
+
}
|
|
52
|
+
function positiveFiniteNumber(value) {
|
|
53
|
+
return typeof value === 'number' && isFinite(value) && value > 0 ? value : undefined;
|
|
54
|
+
}
|
|
55
|
+
function hasOwn(obj, key) {
|
|
56
|
+
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
57
|
+
}
|
|
58
|
+
function canonicalWeeklyResetAnchor(anchor) {
|
|
59
|
+
return `${DAY_TO_WEEKDAY[anchor.weekday] ?? 'Wed'} ${String(anchor.hour).padStart(2, '0')}:${String(anchor.minute).padStart(2, '0')}`;
|
|
60
|
+
}
|
|
61
|
+
export function parseWeeklyResetAnchor(anchor) {
|
|
62
|
+
const m = /^\s*(sun|mon|tue|wed|thu|fri|sat)\s+(\d{1,2}):(\d{2})\s*$/i.exec(anchor);
|
|
63
|
+
if (!m)
|
|
64
|
+
return null;
|
|
65
|
+
const weekday = WEEKDAY_TO_DAY[m[1].toLowerCase()];
|
|
66
|
+
const hour = Number(m[2]);
|
|
67
|
+
const minute = Number(m[3]);
|
|
68
|
+
if (weekday === undefined || !Number.isInteger(hour) || !Number.isInteger(minute))
|
|
69
|
+
return null;
|
|
70
|
+
if (hour < 0 || hour > 23 || minute < 0 || minute > 59)
|
|
71
|
+
return null;
|
|
72
|
+
return { weekday, hour, minute };
|
|
73
|
+
}
|
|
74
|
+
export function weeklyWindowFor(nowMs, anchor) {
|
|
75
|
+
if (!isFinite(nowMs))
|
|
76
|
+
return null;
|
|
77
|
+
const parsed = parseWeeklyResetAnchor(anchor);
|
|
78
|
+
if (!parsed)
|
|
79
|
+
return null;
|
|
80
|
+
const now = new Date(nowMs);
|
|
81
|
+
const candidate = new Date(now.getFullYear(), now.getMonth(), now.getDate(), parsed.hour, parsed.minute, 0, 0);
|
|
82
|
+
candidate.setDate(candidate.getDate() + (parsed.weekday - now.getDay()));
|
|
83
|
+
if (candidate.getTime() > nowMs)
|
|
84
|
+
candidate.setDate(candidate.getDate() - 7);
|
|
85
|
+
const next = new Date(candidate.getTime());
|
|
86
|
+
next.setDate(next.getDate() + 7);
|
|
87
|
+
return { startedAtMs: candidate.getTime(), resetsAtMs: next.getTime() };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A simple fixed-duration grid helper kept exported for pure date-math tests. `computeUsage` uses
|
|
91
|
+
* transcript-established session blocks per the feature requirements because no account-specific
|
|
92
|
+
* session anchor is stored today.
|
|
93
|
+
*/
|
|
94
|
+
export function fixedBlockWindowFor(nowMs, blockHours) {
|
|
95
|
+
if (!isFinite(nowMs))
|
|
96
|
+
return null;
|
|
97
|
+
const hours = positiveFiniteNumber(blockHours);
|
|
98
|
+
if (hours === undefined)
|
|
99
|
+
return null;
|
|
100
|
+
const blockMs = hours * HOUR_MS;
|
|
101
|
+
const startedAtMs = Math.floor(nowMs / blockMs) * blockMs;
|
|
102
|
+
return { startedAtMs, resetsAtMs: startedAtMs + blockMs };
|
|
103
|
+
}
|
|
104
|
+
export function normalizeClaudeUsageModel(raw) {
|
|
105
|
+
if (typeof raw !== 'string')
|
|
106
|
+
return null;
|
|
107
|
+
const s = raw.toLowerCase();
|
|
108
|
+
if (s.includes('fable'))
|
|
109
|
+
return 'fable';
|
|
110
|
+
if (s.includes('opus'))
|
|
111
|
+
return 'opus';
|
|
112
|
+
if (s.includes('sonnet'))
|
|
113
|
+
return 'sonnet';
|
|
114
|
+
if (s.includes('haiku'))
|
|
115
|
+
return 'haiku';
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
export function normalizeClaudeUsageModelKey(raw) {
|
|
119
|
+
if (typeof raw !== 'string')
|
|
120
|
+
return null;
|
|
121
|
+
const key = raw.trim().toLowerCase();
|
|
122
|
+
return CLAUDE_USAGE_MODELS.includes(key) ? key : null;
|
|
123
|
+
}
|
|
44
124
|
/**
|
|
45
125
|
* The `~/.claude/projects` root (the account-wide transcript store). Overridable via
|
|
46
|
-
* `DZ_CLAUDE_PROJECTS_ROOT` — used by tests to point at a temp tree
|
|
47
|
-
* the Claude home). Never throws.
|
|
126
|
+
* `DZ_CLAUDE_PROJECTS_ROOT` — used by tests to point at a temp tree. Never throws.
|
|
48
127
|
*/
|
|
49
128
|
function claudeProjectsRoot() {
|
|
50
129
|
const override = process.env['DZ_CLAUDE_PROJECTS_ROOT'];
|
|
@@ -53,24 +132,52 @@ function claudeProjectsRoot() {
|
|
|
53
132
|
return join(homedir(), '.claude', 'projects');
|
|
54
133
|
}
|
|
55
134
|
/**
|
|
56
|
-
* Read `memory.usage
|
|
57
|
-
*
|
|
58
|
-
* `readVectorEngineMode` never-throw shape exactly. `projectRoot` is the ONLY thing that scopes to
|
|
59
|
-
* a project; the MEASUREMENT below is account-wide (FR-1.6).
|
|
135
|
+
* Read `memory.usage.*` from `<projectRoot>/.dz/config.json`. NEVER throws —
|
|
136
|
+
* absent/corrupt/partial config ⇒ `{}` or only valid fields.
|
|
60
137
|
*/
|
|
61
138
|
export function readUsageLimits(projectRoot) {
|
|
62
139
|
try {
|
|
63
140
|
const cfg = JSON.parse(readFileSync(join(projectRoot, '.dz', 'config.json'), 'utf-8'));
|
|
64
|
-
|
|
65
|
-
|
|
141
|
+
if (!isRecord(cfg))
|
|
142
|
+
return {};
|
|
143
|
+
const memory = cfg['memory'];
|
|
144
|
+
if (!isRecord(memory))
|
|
145
|
+
return {};
|
|
146
|
+
const u = memory['usage'];
|
|
147
|
+
if (!isRecord(u))
|
|
66
148
|
return {};
|
|
67
149
|
const out = {};
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
150
|
+
const sessionLimit = positiveFiniteNumber(u['sessionTokenLimit']);
|
|
151
|
+
const weeklyLimit = positiveFiniteNumber(u['weeklyTokenLimit']);
|
|
152
|
+
const sessionBlockHours = positiveFiniteNumber(u['sessionBlockHours']);
|
|
153
|
+
if (sessionLimit !== undefined)
|
|
154
|
+
out.sessionTokenLimit = sessionLimit;
|
|
155
|
+
if (weeklyLimit !== undefined)
|
|
156
|
+
out.weeklyTokenLimit = weeklyLimit;
|
|
157
|
+
if (sessionBlockHours !== undefined)
|
|
158
|
+
out.sessionBlockHours = sessionBlockHours;
|
|
159
|
+
const anchor = u['weeklyResetAnchor'];
|
|
160
|
+
if (typeof anchor === 'string') {
|
|
161
|
+
const parsed = parseWeeklyResetAnchor(anchor);
|
|
162
|
+
if (parsed)
|
|
163
|
+
out.weeklyResetAnchor = canonicalWeeklyResetAnchor(parsed);
|
|
164
|
+
}
|
|
165
|
+
const byModel = u['weeklyTokenLimitByModel'];
|
|
166
|
+
if (isRecord(byModel)) {
|
|
167
|
+
const modelLimits = {};
|
|
168
|
+
for (const [key, value] of Object.entries(byModel)) {
|
|
169
|
+
const model = normalizeClaudeUsageModelKey(key);
|
|
170
|
+
const limit = positiveFiniteNumber(value);
|
|
171
|
+
if (model && limit !== undefined)
|
|
172
|
+
modelLimits[model] = limit;
|
|
173
|
+
}
|
|
174
|
+
if (Object.keys(modelLimits).length > 0)
|
|
175
|
+
out.weeklyTokenLimitByModel = modelLimits;
|
|
176
|
+
}
|
|
177
|
+
if (typeof u['calibratedAt'] === 'string')
|
|
178
|
+
out.calibratedAt = u['calibratedAt'];
|
|
179
|
+
if (typeof u['source'] === 'string')
|
|
180
|
+
out.source = u['source'];
|
|
74
181
|
return out;
|
|
75
182
|
}
|
|
76
183
|
catch {
|
|
@@ -112,18 +219,17 @@ function listTranscriptFiles(root) {
|
|
|
112
219
|
out.push({ path: p, mtimeMs: statSync(p).mtimeMs });
|
|
113
220
|
}
|
|
114
221
|
catch {
|
|
115
|
-
// skip a file we
|
|
222
|
+
// skip a file we cannot stat
|
|
116
223
|
}
|
|
117
224
|
}
|
|
118
225
|
}
|
|
119
226
|
return out;
|
|
120
227
|
}
|
|
121
228
|
/**
|
|
122
|
-
* Extract usage samples from one transcript file. Never throws — a corrupt line is skipped
|
|
123
|
-
*
|
|
124
|
-
* that cannot carry a token count. `weeklyCutoff` drops samples older than the rolling window.
|
|
229
|
+
* Extract usage samples from one transcript file. Never throws — a corrupt line is skipped.
|
|
230
|
+
* `scanCutoff` drops samples older than every window that could affect the estimate.
|
|
125
231
|
*/
|
|
126
|
-
function extractSamples(path,
|
|
232
|
+
function extractSamples(path, scanCutoff, into, seen) {
|
|
127
233
|
let raw;
|
|
128
234
|
try {
|
|
129
235
|
raw = readFileSync(path, 'utf-8');
|
|
@@ -153,8 +259,8 @@ function extractSamples(path, weeklyCutoff, into, seen) {
|
|
|
153
259
|
const ts = typeof tsRaw === 'number' ? tsRaw : Date.parse(tsRaw);
|
|
154
260
|
if (!isFinite(ts))
|
|
155
261
|
continue;
|
|
156
|
-
if (ts <
|
|
157
|
-
continue;
|
|
262
|
+
if (ts < scanCutoff)
|
|
263
|
+
continue;
|
|
158
264
|
const n = (v) => (typeof v === 'number' && isFinite(v) && v > 0 ? v : 0);
|
|
159
265
|
const tokens = n(usage.input_tokens) +
|
|
160
266
|
n(usage.cache_creation_input_tokens) +
|
|
@@ -171,85 +277,215 @@ function extractSamples(path, weeklyCutoff, into, seen) {
|
|
|
171
277
|
continue;
|
|
172
278
|
seen.add(key);
|
|
173
279
|
}
|
|
174
|
-
into.push({ ts, tokens, key });
|
|
280
|
+
into.push({ ts, tokens, key, model: normalizeClaudeUsageModel(rec.message?.model ?? rec.model) });
|
|
175
281
|
}
|
|
176
282
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
* `end = start + 5h`. The ACTIVE block is the one whose `[start, end)` contains `now`. No active
|
|
181
|
-
* block ⇒ `{ tokens: 0, resetsAt: null }`.
|
|
182
|
-
*/
|
|
183
|
-
function activeBlock(samplesAsc, now) {
|
|
283
|
+
function activeSessionBlock(samplesAsc, nowMs, blockHours) {
|
|
284
|
+
const hours = positiveFiniteNumber(blockHours) ?? DEFAULT_SESSION_BLOCK_HOURS;
|
|
285
|
+
const blockMs = hours * HOUR_MS;
|
|
184
286
|
let blockStart = -1;
|
|
185
287
|
let blockEnd = -1;
|
|
186
288
|
let tokens = 0;
|
|
187
|
-
let activeStart =
|
|
289
|
+
let activeStart = null;
|
|
290
|
+
let activeEnd = null;
|
|
188
291
|
let activeTokens = 0;
|
|
189
292
|
for (const s of samplesAsc) {
|
|
293
|
+
if (s.ts > nowMs)
|
|
294
|
+
continue;
|
|
190
295
|
if (blockStart === -1 || s.ts >= blockEnd) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
blockEnd = blockStart + SESSION_BLOCK_MS;
|
|
296
|
+
blockStart = s.ts;
|
|
297
|
+
blockEnd = blockStart + blockMs;
|
|
194
298
|
tokens = 0;
|
|
195
299
|
}
|
|
196
300
|
tokens += s.tokens;
|
|
197
|
-
if (
|
|
301
|
+
if (nowMs >= blockStart && nowMs < blockEnd) {
|
|
198
302
|
activeStart = blockStart;
|
|
303
|
+
activeEnd = blockEnd;
|
|
199
304
|
activeTokens = tokens;
|
|
200
305
|
}
|
|
201
306
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
307
|
+
return { tokens: activeTokens, startedAtMs: activeStart, resetsAtMs: activeEnd };
|
|
308
|
+
}
|
|
309
|
+
function pct(tokens, limit) {
|
|
310
|
+
return typeof limit === 'number' && limit > 0 ? Math.round((100 * tokens) / limit) : null;
|
|
311
|
+
}
|
|
312
|
+
function configuredModelLimits(limits) {
|
|
313
|
+
if (!limits)
|
|
314
|
+
return [];
|
|
315
|
+
const out = [];
|
|
316
|
+
for (const model of CLAUDE_USAGE_MODELS) {
|
|
317
|
+
const limit = limits[model];
|
|
318
|
+
if (typeof limit === 'number' && isFinite(limit) && limit > 0)
|
|
319
|
+
out.push([model, limit]);
|
|
320
|
+
}
|
|
321
|
+
return out;
|
|
205
322
|
}
|
|
206
323
|
/**
|
|
207
324
|
* Estimate SESSION + WEEKLY token usage from the local Claude transcript store. NEVER throws;
|
|
208
|
-
* READONLY;
|
|
209
|
-
* (
|
|
325
|
+
* READONLY; `projectRoot` scopes ONLY the config (limits) read — measurement is account-wide
|
|
326
|
+
* (all projects). `now` is injectable for tests.
|
|
210
327
|
*/
|
|
211
328
|
export function computeUsage(projectRoot, now) {
|
|
212
329
|
const nowMs = typeof now === 'number' && isFinite(now) ? now : Date.now();
|
|
213
330
|
const limits = readUsageLimits(projectRoot);
|
|
214
|
-
const
|
|
331
|
+
const sessionBlockHours = limits.sessionBlockHours ?? DEFAULT_SESSION_BLOCK_HOURS;
|
|
332
|
+
const weeklyAnchor = limits.weeklyResetAnchor ?? DEFAULT_WEEKLY_RESET_ANCHOR;
|
|
333
|
+
const weeklyWindow = weeklyWindowFor(nowMs, weeklyAnchor);
|
|
334
|
+
// For transcript-established blocks, one previous block may be needed to prove that an event just
|
|
335
|
+
// before the current boundary belongs to the prior block rather than opening the active one.
|
|
336
|
+
const sessionScanCutoff = nowMs - 2 * sessionBlockHours * HOUR_MS;
|
|
337
|
+
const weeklyScanCutoff = weeklyWindow?.startedAtMs ?? nowMs;
|
|
338
|
+
const scanCutoff = Math.min(sessionScanCutoff, weeklyScanCutoff) - MTIME_SLACK_MS;
|
|
215
339
|
const samples = [];
|
|
216
340
|
const seen = new Set();
|
|
217
341
|
try {
|
|
218
342
|
const files = listTranscriptFiles(claudeProjectsRoot());
|
|
219
343
|
for (const f of files) {
|
|
220
|
-
// mtime prefilter: a file last written before
|
|
221
|
-
|
|
222
|
-
if (f.mtimeMs < weeklyCutoff)
|
|
344
|
+
// mtime prefilter: a file last written before every relevant cutoff cannot contribute.
|
|
345
|
+
if (f.mtimeMs < scanCutoff)
|
|
223
346
|
continue;
|
|
224
|
-
extractSamples(f.path,
|
|
347
|
+
extractSamples(f.path, scanCutoff, samples, seen);
|
|
225
348
|
}
|
|
226
349
|
}
|
|
227
350
|
catch {
|
|
228
351
|
// total scan failure ⇒ fall through with empty samples (nulls), never throw
|
|
229
352
|
}
|
|
230
|
-
// Weekly total: every sample inside the exact 7d window (the +slack was only a prefilter guard).
|
|
231
|
-
const weeklyHardCutoff = nowMs - WEEK_MS;
|
|
232
353
|
let weeklyTokens = 0;
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
354
|
+
const weeklyTokensByModel = {};
|
|
355
|
+
if (weeklyWindow) {
|
|
356
|
+
for (const s of samples) {
|
|
357
|
+
if (s.ts < weeklyWindow.startedAtMs || s.ts >= weeklyWindow.resetsAtMs || s.ts > nowMs)
|
|
358
|
+
continue;
|
|
359
|
+
weeklyTokens += s.tokens;
|
|
360
|
+
if (s.model)
|
|
361
|
+
weeklyTokensByModel[s.model] = (weeklyTokensByModel[s.model] ?? 0) + s.tokens;
|
|
362
|
+
}
|
|
240
363
|
}
|
|
241
364
|
const asc = samples.slice().sort((a, b) => a.ts - b.ts);
|
|
242
|
-
const block =
|
|
243
|
-
const
|
|
244
|
-
|
|
365
|
+
const block = activeSessionBlock(asc, nowMs, sessionBlockHours);
|
|
366
|
+
const modelLimits = configuredModelLimits(limits.weeklyTokenLimitByModel);
|
|
367
|
+
let weeklyByModel;
|
|
368
|
+
let weeklyPct = pct(weeklyTokens, limits.weeklyTokenLimit);
|
|
369
|
+
let weeklyBindingModel;
|
|
370
|
+
if (modelLimits.length > 0) {
|
|
371
|
+
weeklyByModel = {};
|
|
372
|
+
weeklyPct = null;
|
|
373
|
+
for (const [model, limit] of modelLimits) {
|
|
374
|
+
const tokens = weeklyTokensByModel[model] ?? 0;
|
|
375
|
+
const modelPct = pct(tokens, limit);
|
|
376
|
+
weeklyByModel[model] = { tokens, pct: modelPct };
|
|
377
|
+
if (modelPct !== null && (weeklyPct === null || modelPct > weeklyPct)) {
|
|
378
|
+
weeklyPct = modelPct;
|
|
379
|
+
weeklyBindingModel = model;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
245
383
|
return {
|
|
246
384
|
sessionTokens: block.tokens,
|
|
247
385
|
weeklyTokens,
|
|
248
386
|
sessionPct: pct(block.tokens, limits.sessionTokenLimit),
|
|
249
|
-
weeklyPct
|
|
250
|
-
sessionResetsAt: block.
|
|
251
|
-
weeklyResetsAt,
|
|
387
|
+
weeklyPct,
|
|
388
|
+
sessionResetsAt: block.resetsAtMs === null ? null : new Date(block.resetsAtMs).toISOString(),
|
|
389
|
+
weeklyResetsAt: weeklyWindow === null ? null : new Date(weeklyWindow.resetsAtMs).toISOString(),
|
|
252
390
|
estimated: true,
|
|
391
|
+
...(weeklyByModel !== undefined ? { weeklyByModel } : {}),
|
|
392
|
+
weeklyTokensByModel,
|
|
393
|
+
...(weeklyBindingModel !== undefined ? { weeklyBindingModel } : {}),
|
|
394
|
+
sessionStartedAt: block.startedAtMs === null ? null : new Date(block.startedAtMs).toISOString(),
|
|
395
|
+
weeklyStartedAt: weeklyWindow === null ? null : new Date(weeklyWindow.startedAtMs).toISOString(),
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
function validPct(label, value, skipped) {
|
|
399
|
+
const n = typeof value === 'number' ? value : typeof value === 'string' && value.trim() !== '' ? Number(value) : NaN;
|
|
400
|
+
if (!isFinite(n) || n <= 0 || n > 100) {
|
|
401
|
+
skipped.push(`${label}: skipped invalid percentage ${String(value)}`);
|
|
402
|
+
return null;
|
|
403
|
+
}
|
|
404
|
+
return n;
|
|
405
|
+
}
|
|
406
|
+
function applyCalibrationLimit(opts) {
|
|
407
|
+
const suppliedPct = validPct(opts.label, opts.rawPct, opts.skipped);
|
|
408
|
+
if (suppliedPct === null)
|
|
409
|
+
return;
|
|
410
|
+
if (!isFinite(opts.tokens) || opts.tokens <= 0) {
|
|
411
|
+
opts.skipped.push(`${opts.label}: skipped because current token count is 0`);
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
const limit = Math.round(opts.tokens / (suppliedPct / 100));
|
|
415
|
+
if (!isFinite(limit) || limit <= 0) {
|
|
416
|
+
opts.skipped.push(`${opts.label}: skipped because derived limit is invalid`);
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
opts.set(limit);
|
|
420
|
+
opts.changes.push({
|
|
421
|
+
key: opts.label,
|
|
422
|
+
before: opts.before ?? null,
|
|
423
|
+
after: limit,
|
|
424
|
+
tokens: opts.tokens,
|
|
425
|
+
pct: suppliedPct,
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
export function deriveUsageCalibration(current, before, input) {
|
|
429
|
+
const after = {
|
|
430
|
+
...before,
|
|
431
|
+
...(before.weeklyTokenLimitByModel !== undefined
|
|
432
|
+
? { weeklyTokenLimitByModel: { ...before.weeklyTokenLimitByModel } }
|
|
433
|
+
: {}),
|
|
253
434
|
};
|
|
435
|
+
const skipped = [];
|
|
436
|
+
const changes = [];
|
|
437
|
+
if (hasOwn(input, 'sessionPct')) {
|
|
438
|
+
applyCalibrationLimit({
|
|
439
|
+
label: 'session',
|
|
440
|
+
tokens: current.sessionTokens,
|
|
441
|
+
rawPct: input.sessionPct,
|
|
442
|
+
before: before.sessionTokenLimit,
|
|
443
|
+
set: (limit) => {
|
|
444
|
+
after.sessionTokenLimit = limit;
|
|
445
|
+
},
|
|
446
|
+
skipped,
|
|
447
|
+
changes,
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
if (hasOwn(input, 'weeklyPct')) {
|
|
451
|
+
applyCalibrationLimit({
|
|
452
|
+
label: 'weekly',
|
|
453
|
+
tokens: current.weeklyTokens,
|
|
454
|
+
rawPct: input.weeklyPct,
|
|
455
|
+
before: before.weeklyTokenLimit,
|
|
456
|
+
set: (limit) => {
|
|
457
|
+
after.weeklyTokenLimit = limit;
|
|
458
|
+
},
|
|
459
|
+
skipped,
|
|
460
|
+
changes,
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
if (input.modelPct !== undefined) {
|
|
464
|
+
for (const [key, rawPct] of Object.entries(input.modelPct)) {
|
|
465
|
+
const model = normalizeClaudeUsageModelKey(key);
|
|
466
|
+
if (!model) {
|
|
467
|
+
skipped.push(`model ${key}: skipped unknown model`);
|
|
468
|
+
continue;
|
|
469
|
+
}
|
|
470
|
+
applyCalibrationLimit({
|
|
471
|
+
label: model,
|
|
472
|
+
tokens: current.weeklyTokensByModel[model] ?? 0,
|
|
473
|
+
rawPct,
|
|
474
|
+
before: before.weeklyTokenLimitByModel?.[model],
|
|
475
|
+
set: (limit) => {
|
|
476
|
+
if (after.weeklyTokenLimitByModel === undefined)
|
|
477
|
+
after.weeklyTokenLimitByModel = {};
|
|
478
|
+
after.weeklyTokenLimitByModel[model] = limit;
|
|
479
|
+
},
|
|
480
|
+
skipped,
|
|
481
|
+
changes,
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
if (changes.length > 0) {
|
|
486
|
+
after.calibratedAt = input.calibratedAt;
|
|
487
|
+
after.source = input.source;
|
|
488
|
+
}
|
|
489
|
+
return { before, after, changes, skipped };
|
|
254
490
|
}
|
|
255
491
|
//# sourceMappingURL=usage.js.map
|
package/dist/usage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/harness-core",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.101",
|
|
4
4
|
"description": "Shared harness logic - skill loading, additive apply, and the init/sync/verify/doctor operations.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,27 +23,20 @@
|
|
|
23
23
|
"src",
|
|
24
24
|
"README.md"
|
|
25
25
|
],
|
|
26
|
-
"scripts": {
|
|
27
|
-
"build": "tsc -p tsconfig.json",
|
|
28
|
-
"test": "vitest run",
|
|
29
|
-
"test:watch": "vitest",
|
|
30
|
-
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
31
|
-
"lint": "tsc -p tsconfig.json --noEmit"
|
|
32
|
-
},
|
|
33
26
|
"dependencies": {
|
|
34
|
-
"@dzhechkov/adapter-agents-md": "workspace:*",
|
|
35
27
|
"@dzhechkov/adapter-claude": "^0.2.0",
|
|
36
28
|
"@dzhechkov/adapter-codex": "^0.2.0",
|
|
37
|
-
"@dzhechkov/adapter-copilot": "workspace:*",
|
|
38
|
-
"@dzhechkov/adapter-cursor": "workspace:*",
|
|
39
|
-
"@dzhechkov/adapter-gemini": "workspace:*",
|
|
40
29
|
"@dzhechkov/adapter-hermes": "^0.2.0",
|
|
41
30
|
"@dzhechkov/adapter-openclaude": "^0.1.0",
|
|
42
31
|
"@dzhechkov/adapter-opencode": "^0.2.0",
|
|
43
|
-
"
|
|
44
|
-
"@dzhechkov/
|
|
45
|
-
"@dzhechkov/
|
|
46
|
-
"
|
|
32
|
+
"yaml": "^2.0.0",
|
|
33
|
+
"@dzhechkov/adapter-copilot": "0.1.1",
|
|
34
|
+
"@dzhechkov/adapter-cursor": "0.1.1",
|
|
35
|
+
"@dzhechkov/adapter-gemini": "0.1.1",
|
|
36
|
+
"@dzhechkov/core": "0.2.14",
|
|
37
|
+
"@dzhechkov/adapter-windsurf": "0.1.1",
|
|
38
|
+
"@dzhechkov/adapter-agents-md": "0.1.1",
|
|
39
|
+
"@dzhechkov/memory": "0.2.9"
|
|
47
40
|
},
|
|
48
41
|
"peerDependenciesMeta": {
|
|
49
42
|
"@ruvector/rvf": {
|
|
@@ -67,5 +60,12 @@
|
|
|
67
60
|
"url": "https://github.com/djd1m/dz-harness-hub.git",
|
|
68
61
|
"directory": "packages/@dzhechkov/harness-core"
|
|
69
62
|
},
|
|
70
|
-
"homepage": "https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/harness-core#readme"
|
|
71
|
-
|
|
63
|
+
"homepage": "https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/harness-core#readme",
|
|
64
|
+
"scripts": {
|
|
65
|
+
"build": "tsc -p tsconfig.json",
|
|
66
|
+
"test": "vitest run",
|
|
67
|
+
"test:watch": "vitest",
|
|
68
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
69
|
+
"lint": "tsc -p tsconfig.json --noEmit"
|
|
70
|
+
}
|
|
71
|
+
}
|