@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.d.ts
CHANGED
|
@@ -1,70 +1,123 @@
|
|
|
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
|
*/
|
|
30
|
+
export declare const CLAUDE_USAGE_MODELS: readonly ["fable", "opus", "sonnet", "haiku"];
|
|
31
|
+
export type ClaudeUsageModel = (typeof CLAUDE_USAGE_MODELS)[number];
|
|
32
|
+
export interface UsageWindow {
|
|
33
|
+
readonly startedAtMs: number;
|
|
34
|
+
readonly resetsAtMs: number;
|
|
35
|
+
}
|
|
36
|
+
export interface WeeklyResetAnchor {
|
|
37
|
+
readonly weekday: number;
|
|
38
|
+
readonly hour: number;
|
|
39
|
+
readonly minute: number;
|
|
40
|
+
}
|
|
35
41
|
/** Optional, plan-dependent calibration limits from `.dz/config.json`. Absent ⇒ pct is `null`. */
|
|
36
42
|
export interface UsageLimits {
|
|
37
43
|
readonly sessionTokenLimit?: number;
|
|
38
44
|
readonly weeklyTokenLimit?: number;
|
|
45
|
+
readonly weeklyTokenLimitByModel?: Partial<Record<ClaudeUsageModel, number>>;
|
|
46
|
+
readonly weeklyResetAnchor?: string;
|
|
47
|
+
readonly sessionBlockHours?: number;
|
|
48
|
+
readonly calibratedAt?: string;
|
|
49
|
+
readonly source?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface UsageModelEstimate {
|
|
52
|
+
readonly tokens: number;
|
|
53
|
+
readonly pct: number | null;
|
|
39
54
|
}
|
|
40
55
|
/** A never-throw usage estimate. `estimated` is ALWAYS `true` (honest-uncertainty marker). */
|
|
41
56
|
export interface UsageEstimate {
|
|
42
|
-
/** Active
|
|
57
|
+
/** Active fixed-length session block token total (all projects). */
|
|
43
58
|
readonly sessionTokens: number;
|
|
44
|
-
/**
|
|
59
|
+
/** Fixed weekly-reset-window token total (all projects). */
|
|
45
60
|
readonly weeklyTokens: number;
|
|
46
|
-
/** `null` ⇔ `sessionTokenLimit` unconfigured (unknown — never
|
|
61
|
+
/** `null` ⇔ `sessionTokenLimit` unconfigured (unknown — never a guess). */
|
|
47
62
|
readonly sessionPct: number | null;
|
|
48
|
-
/**
|
|
63
|
+
/** Binding weekly pct: per-model max when configured, otherwise all-model aggregate. */
|
|
49
64
|
readonly weeklyPct: number | null;
|
|
50
|
-
/** ISO — active block start +
|
|
65
|
+
/** ISO — active block start + configured session hours; `null` when there is no active block. */
|
|
51
66
|
readonly sessionResetsAt: string | null;
|
|
52
|
-
/** ISO —
|
|
67
|
+
/** ISO — next configured fixed weekly reset. */
|
|
53
68
|
readonly weeklyResetsAt: string | null;
|
|
54
69
|
/** ALWAYS `true` — these are estimates from local aggregation, not an official API. */
|
|
55
70
|
readonly estimated: true;
|
|
71
|
+
/** Present only when per-model weekly limits are configured. */
|
|
72
|
+
readonly weeklyByModel?: Partial<Record<ClaudeUsageModel, UsageModelEstimate>>;
|
|
73
|
+
/** Raw weekly model totals for calibration; CLI omits this from the compatibility JSON. */
|
|
74
|
+
readonly weeklyTokensByModel: Partial<Record<ClaudeUsageModel, number>>;
|
|
75
|
+
/** Model family that supplied the binding top-level weeklyPct, if any. */
|
|
76
|
+
readonly weeklyBindingModel?: ClaudeUsageModel;
|
|
77
|
+
/** Traceability for tests and calibration diagnostics. */
|
|
78
|
+
readonly sessionStartedAt: string | null;
|
|
79
|
+
readonly weeklyStartedAt: string | null;
|
|
80
|
+
}
|
|
81
|
+
export interface UsageCalibrationInput {
|
|
82
|
+
readonly sessionPct?: unknown;
|
|
83
|
+
readonly weeklyPct?: unknown;
|
|
84
|
+
readonly modelPct?: Readonly<Record<string, unknown>>;
|
|
85
|
+
readonly calibratedAt: string;
|
|
86
|
+
readonly source: 'claude.ai/settings/usage';
|
|
56
87
|
}
|
|
88
|
+
export interface UsageCalibrationChange {
|
|
89
|
+
readonly key: string;
|
|
90
|
+
readonly before: number | null;
|
|
91
|
+
readonly after: number;
|
|
92
|
+
readonly tokens: number;
|
|
93
|
+
readonly pct: number;
|
|
94
|
+
}
|
|
95
|
+
export interface UsageCalibrationPlan {
|
|
96
|
+
readonly before: UsageLimits;
|
|
97
|
+
readonly after: UsageLimits;
|
|
98
|
+
readonly changes: readonly UsageCalibrationChange[];
|
|
99
|
+
readonly skipped: readonly string[];
|
|
100
|
+
}
|
|
101
|
+
export declare function parseWeeklyResetAnchor(anchor: string): WeeklyResetAnchor | null;
|
|
102
|
+
export declare function weeklyWindowFor(nowMs: number, anchor: string): UsageWindow | null;
|
|
103
|
+
/**
|
|
104
|
+
* A simple fixed-duration grid helper kept exported for pure date-math tests. `computeUsage` uses
|
|
105
|
+
* transcript-established session blocks per the feature requirements because no account-specific
|
|
106
|
+
* session anchor is stored today.
|
|
107
|
+
*/
|
|
108
|
+
export declare function fixedBlockWindowFor(nowMs: number, blockHours: number): UsageWindow | null;
|
|
109
|
+
export declare function normalizeClaudeUsageModel(raw: unknown): ClaudeUsageModel | null;
|
|
110
|
+
export declare function normalizeClaudeUsageModelKey(raw: unknown): ClaudeUsageModel | null;
|
|
57
111
|
/**
|
|
58
|
-
* Read `memory.usage
|
|
59
|
-
*
|
|
60
|
-
* `readVectorEngineMode` never-throw shape exactly. `projectRoot` is the ONLY thing that scopes to
|
|
61
|
-
* a project; the MEASUREMENT below is account-wide (FR-1.6).
|
|
112
|
+
* Read `memory.usage.*` from `<projectRoot>/.dz/config.json`. NEVER throws —
|
|
113
|
+
* absent/corrupt/partial config ⇒ `{}` or only valid fields.
|
|
62
114
|
*/
|
|
63
115
|
export declare function readUsageLimits(projectRoot: string): UsageLimits;
|
|
64
116
|
/**
|
|
65
117
|
* Estimate SESSION + WEEKLY token usage from the local Claude transcript store. NEVER throws;
|
|
66
|
-
* READONLY;
|
|
67
|
-
* (
|
|
118
|
+
* READONLY; `projectRoot` scopes ONLY the config (limits) read — measurement is account-wide
|
|
119
|
+
* (all projects). `now` is injectable for tests.
|
|
68
120
|
*/
|
|
69
121
|
export declare function computeUsage(projectRoot: string, now?: number): UsageEstimate;
|
|
122
|
+
export declare function deriveUsageCalibration(current: UsageEstimate, before: UsageLimits, input: UsageCalibrationInput): UsageCalibrationPlan;
|
|
70
123
|
//# sourceMappingURL=usage.d.ts.map
|
package/dist/usage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
|