dsh-budget 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,13 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __defProp = Object.defineProperty;
3
+ var __exportAll = (all, no_symbols) => {
4
+ let target = {};
5
+ for (var name in all) __defProp(target, name, {
6
+ get: all[name],
7
+ enumerable: true
8
+ });
9
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
+ return target;
11
+ };
12
+ //#endregion
13
+ export { __exportAll as t };
@@ -1,4 +1,4 @@
1
- import { t as BUDGET_INVOCATIONS } from "./wire-Bq5J-SHv.js";
1
+ import { t as BUDGET_INVOCATIONS } from "./wire-zYaXk7IG.js";
2
2
  //#region src/typert.host.ts
3
3
  /**
4
4
  * The hand-written Typert HOST manifest for `dsh-budget`, exported as
@@ -30,6 +30,27 @@ export interface ModelUsage extends ScopeUsage {
30
30
  /** Latency samples kept for this model (ms). */
31
31
  latencyMs: readonly number[];
32
32
  }
33
+ /** One persisted model usage entry (latency windows stay process-local, so they are excluded). */
34
+ export interface PersistedModelUsage {
35
+ provider: string;
36
+ model: string;
37
+ inputTokens: number;
38
+ outputTokens: number;
39
+ cacheReadTokens: number;
40
+ cacheWriteTokens: number;
41
+ costUsd: number;
42
+ carbonKg: number;
43
+ }
44
+ /** One persisted day/month bucket. */
45
+ export interface PersistedBucket {
46
+ total: ScopeUsage;
47
+ models: Record<string, PersistedModelUsage>;
48
+ }
49
+ /** The durable cross-restart subset of aggregator state (day + month buckets). */
50
+ export interface PersistedBudgetState {
51
+ days: Record<string, PersistedBucket>;
52
+ months: Record<string, PersistedBucket>;
53
+ }
33
54
  /** One recorded threshold alert. */
34
55
  export interface AlertRecord {
35
56
  scope: 'session' | 'daily' | 'monthly';
@@ -124,5 +145,15 @@ export declare class BudgetAggregator {
124
145
  * @returns the session-attributed snapshot.
125
146
  */
126
147
  snapshotFor(sessionId: string): BudgetSnapshot;
148
+ /** Serialize the day/month buckets (the durable cross-restart subset). */
149
+ exportState(): PersistedBudgetState;
150
+ /** Merge a persisted state back into the live day/month buckets (restore on mount). */
151
+ restoreState(state: PersistedBudgetState): void;
152
+ /** Serialize one day/month bucket map into plain JSON. */
153
+ private serializeBuckets;
154
+ /** Merge one persisted bucket map into a live bucket map (accumulating, not replacing). */
155
+ private restoreBuckets;
156
+ /** Add one scope usage into another (accumulate every field). */
157
+ private addToScope;
127
158
  }
128
159
  //# sourceMappingURL=usage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/aggregate/usage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/aggregate/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,0BAA0B;AAC1B,wBAAgB,UAAU,IAAI,UAAU,CAEvC;AAED,4DAA4D;AAC5D,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,gDAAgD;IAChD,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;CAC7B;AAED,kGAAkG;AAClG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,UAAU,CAAA;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CAC5C;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CACxC;AAED,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;IACtC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAED,yDAAyD;AACzD,MAAM,WAAW,QAAQ;IACvB,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,UAAU,CAAA;CAClB;AAED,sCAAsC;AACtC,wBAAgB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,qCAAqC;AACrC,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAElD;AAgBD,uHAAuH;AACvH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,UAAU,CAAA;IACnB,KAAK,EAAE,UAAU,CAAA;IACjB,SAAS,EAAE,UAAU,CAAA;IACrB,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;IAC7B,6CAA6C;IAC7C,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;IAC9B,aAAa,EAAE,SAAS,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC,EAAE,CAAA;IAC3D,oEAAoE;IACpE,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAA;CAC1B;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAKf,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAkB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJzE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4B;IAElD,yFAAyF;gBAC5D,MAAM,EAAE,cAAc,EAAmB,GAAG,GAAE,MAAM,MAAiB;IAelG,2EAA2E;IAC3E,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKrD,sEAAsE;IACtE,WAAW,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAIlD;;;;;;OAMG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAuCvD,uDAAuD;IACvD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQtD,mDAAmD;IACnD,OAAO,CAAC,QAAQ;IA8BhB,qDAAqD;IACrD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU;IAI3C,0BAA0B;IAC1B,UAAU,IAAI,UAAU;IAIxB,+BAA+B;IAC/B,UAAU,IAAI,UAAU;IAIxB;;;;;;OAMG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;IAUrC,wEAAwE;IACxE,UAAU,IAAI,UAAU,EAAE;IAW1B,kEAAkE;IAClE,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAMrC,qFAAqF;IACrF,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAK/F,gFAAgF;IAChF,IAAI,aAAa,IAAI,SAAS,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC,EAAE,CAEhE;IAED,qEAAqE;IACrE,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI;IAIxD,6EAA6E;IAC7E,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI;IAI1D;;;;;;OAMG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;IAY9C,0EAA0E;IAC1E,WAAW,IAAI,oBAAoB;IAOnC,uFAAuF;IACvF,YAAY,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAK/C,0DAA0D;IAC1D,OAAO,CAAC,gBAAgB;IAuBxB,2FAA2F;IAC3F,OAAO,CAAC,cAAc;IAgCtB,iEAAiE;IACjE,OAAO,CAAC,UAAU;CAQnB"}
@@ -31,6 +31,13 @@ export interface BudgetsConfig {
31
31
  daily?: number;
32
32
  monthly?: number;
33
33
  }
34
+ /** Durable persistence of the daily/monthly buckets across restarts. */
35
+ export interface PersistenceConfig {
36
+ /** Persist day/month usage to the storage domain (default true). */
37
+ enabled?: boolean;
38
+ /** Milliseconds between persistence snapshots (default 10000). */
39
+ intervalMs?: number;
40
+ }
34
41
  /** Raw plugin config — every field optional; {@link resolveConfig} supplies the defaults. */
35
42
  export interface Config {
36
43
  /** Per-model USD prices per 1M tokens, merged over the built-in table. */
@@ -77,6 +84,8 @@ export interface Config {
77
84
  outputLanguage?: 'en' | 'zh';
78
85
  /** Days of per-day usage history kept in the panel snapshot. */
79
86
  historyDays?: number;
87
+ /** Durable daily/monthly persistence across restarts. */
88
+ persistence?: PersistenceConfig;
80
89
  }
81
90
  /** Fully resolved config. */
82
91
  export interface ResolvedConfig {
@@ -119,6 +128,10 @@ export interface ResolvedConfig {
119
128
  };
120
129
  readonly outputLanguage: 'en' | 'zh';
121
130
  readonly historyDays: number;
131
+ readonly persistence: {
132
+ enabled: boolean;
133
+ intervalMs: number;
134
+ };
122
135
  }
123
136
  /** Schemastery schema: the loader validates and fills defaults before `apply`. */
124
137
  export declare const Config: z<Config>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -34,14 +34,18 @@ export declare const inject: string[];
34
34
  export { Config, resolveConfig } from './config.js';
35
35
  export type { ResolvedConfig } from './config.js';
36
36
  export { BudgetAggregator } from './aggregate/usage.js';
37
+ export type { PersistedBudgetState, PersistedBucket, PersistedModelUsage } from './aggregate/usage.js';
37
38
  export { checkBudgets, degradationFor } from './governance.js';
38
39
  export { BudgetService, effectiveCap } from './service.js';
39
40
  export { budgetCommand, parseBudgetArgs, renderBudgetModels, renderBudgetOverview } from './command.js';
40
41
  export { ALERT_EVENT, BLOCK_EVENT } from './events.js';
42
+ export { budgetDomainSpec, budgetStateSchema } from './store.js';
41
43
  /**
42
- * Mount the plugin: resolve config, build the aggregator, wire the session
43
- * event feed, the budget checks, the `llm/stream` blocker, the webhook
44
- * alerts, the `budget` Remote service, and the `/budget` command.
44
+ * Mount the plugin: resolve config, build the aggregator, restore any durable
45
+ * day/month buckets, wire the session event feed, the budget checks, the
46
+ * `llm/stream` blocker, the webhook alerts, the `budget` Remote service, and
47
+ * the `/budget` command. Persistence is optional and degrades to in-memory
48
+ * when the storage domain is absent.
45
49
  *
46
50
  * @param ctx - the plugin context (host).
47
51
  * @param config - raw plugin config.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAA;AAOnD,eAAO,MAAM,IAAI,eAAe,CAAA;AAEhC,mEAAmE;AACnE,eAAO,MAAM,MAAM,UAAe,CAAA;AAElC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACvG,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAatD;;;;;;;GAOG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiIvE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAA;AASnD,eAAO,MAAM,IAAI,eAAe,CAAA;AAEhC,mEAAmE;AACnE,eAAO,MAAM,MAAM,UAAe,CAAA;AAElC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AACtG,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACvG,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAqBhE;;;;;;;;;GASG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmKvE"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Durable budget persistence over the harness storage domain. The `dsh_budget`
3
+ * domain keeps the day/month buckets across restarts, so a restart restores
4
+ * cumulative daily and monthly usage instead of rebuilding it from the current
5
+ * session view alone. Session buckets, alerts, and block state stay
6
+ * process-local (they are session- or runtime-scoped by design).
7
+ * @module dsh-budget/store
8
+ */
9
+ import z from 'zod';
10
+ import type { PersistedBudgetState } from './aggregate/usage.js';
11
+ /** Zod schema for the persisted state (re-validated at the durable boundary). */
12
+ export declare const budgetStateSchema: z.ZodObject<{
13
+ days: z.ZodRecord<z.ZodString, z.ZodObject<{
14
+ total: z.ZodObject<{
15
+ inputTokens: z.ZodNumber;
16
+ outputTokens: z.ZodNumber;
17
+ cacheReadTokens: z.ZodNumber;
18
+ cacheWriteTokens: z.ZodNumber;
19
+ costUsd: z.ZodNumber;
20
+ carbonKg: z.ZodNumber;
21
+ }, z.core.$strip>;
22
+ models: z.ZodRecord<z.ZodString, z.ZodObject<{
23
+ provider: z.ZodString;
24
+ model: z.ZodString;
25
+ inputTokens: z.ZodNumber;
26
+ outputTokens: z.ZodNumber;
27
+ cacheReadTokens: z.ZodNumber;
28
+ cacheWriteTokens: z.ZodNumber;
29
+ costUsd: z.ZodNumber;
30
+ carbonKg: z.ZodNumber;
31
+ }, z.core.$strip>>;
32
+ }, z.core.$strip>>;
33
+ months: z.ZodRecord<z.ZodString, z.ZodObject<{
34
+ total: z.ZodObject<{
35
+ inputTokens: z.ZodNumber;
36
+ outputTokens: z.ZodNumber;
37
+ cacheReadTokens: z.ZodNumber;
38
+ cacheWriteTokens: z.ZodNumber;
39
+ costUsd: z.ZodNumber;
40
+ carbonKg: z.ZodNumber;
41
+ }, z.core.$strip>;
42
+ models: z.ZodRecord<z.ZodString, z.ZodObject<{
43
+ provider: z.ZodString;
44
+ model: z.ZodString;
45
+ inputTokens: z.ZodNumber;
46
+ outputTokens: z.ZodNumber;
47
+ cacheReadTokens: z.ZodNumber;
48
+ cacheWriteTokens: z.ZodNumber;
49
+ costUsd: z.ZodNumber;
50
+ carbonKg: z.ZodNumber;
51
+ }, z.core.$strip>>;
52
+ }, z.core.$strip>>;
53
+ }, z.core.$strip>;
54
+ /** The `dsh_budget` storage-domain declaration. */
55
+ export declare const budgetDomainSpec: {
56
+ name: string;
57
+ version: number;
58
+ tables: {
59
+ state: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<string, PersistedBudgetState>;
60
+ };
61
+ };
62
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AA8BhE,iFAAiF;AACjF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG5B,CAAA;AAEF,mDAAmD;AACnD,eAAO,MAAM,gBAAgB;;;;;;CAM3B,CAAA"}