usertrust 1.3.0 → 1.5.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.
Files changed (94) hide show
  1. package/README.md +9 -9
  2. package/dist/anomaly/detector.d.ts.map +1 -1
  3. package/dist/anomaly/detector.js +36 -11
  4. package/dist/anomaly/detector.js.map +1 -1
  5. package/dist/anomaly/signals/spend-velocity.d.ts +39 -12
  6. package/dist/anomaly/signals/spend-velocity.d.ts.map +1 -1
  7. package/dist/anomaly/signals/spend-velocity.js +66 -43
  8. package/dist/anomaly/signals/spend-velocity.js.map +1 -1
  9. package/dist/anomaly/signals/token-rate.d.ts +33 -13
  10. package/dist/anomaly/signals/token-rate.d.ts.map +1 -1
  11. package/dist/anomaly/signals/token-rate.js +124 -38
  12. package/dist/anomaly/signals/token-rate.js.map +1 -1
  13. package/dist/anomaly/types.d.ts +28 -6
  14. package/dist/anomaly/types.d.ts.map +1 -1
  15. package/dist/audit/chain.d.ts +9 -0
  16. package/dist/audit/chain.d.ts.map +1 -1
  17. package/dist/audit/chain.js +65 -9
  18. package/dist/audit/chain.js.map +1 -1
  19. package/dist/audit/verify.d.ts +19 -0
  20. package/dist/audit/verify.d.ts.map +1 -1
  21. package/dist/audit/verify.js +216 -14
  22. package/dist/audit/verify.js.map +1 -1
  23. package/dist/cli/init.d.ts.map +1 -1
  24. package/dist/cli/init.js +107 -2
  25. package/dist/cli/init.js.map +1 -1
  26. package/dist/cli/main.js +0 -0
  27. package/dist/cli/skill.d.ts.map +1 -1
  28. package/dist/cli/skill.js +35 -5
  29. package/dist/cli/skill.js.map +1 -1
  30. package/dist/cli/snapshot.d.ts.map +1 -1
  31. package/dist/cli/snapshot.js +20 -2
  32. package/dist/cli/snapshot.js.map +1 -1
  33. package/dist/cli/verify.d.ts.map +1 -1
  34. package/dist/cli/verify.js +20 -11
  35. package/dist/cli/verify.js.map +1 -1
  36. package/dist/detect.d.ts +34 -1
  37. package/dist/detect.d.ts.map +1 -1
  38. package/dist/detect.js +124 -0
  39. package/dist/detect.js.map +1 -1
  40. package/dist/govern.d.ts +13 -2
  41. package/dist/govern.d.ts.map +1 -1
  42. package/dist/govern.js +475 -127
  43. package/dist/govern.js.map +1 -1
  44. package/dist/headless.d.ts +41 -2
  45. package/dist/headless.d.ts.map +1 -1
  46. package/dist/headless.js +203 -35
  47. package/dist/headless.js.map +1 -1
  48. package/dist/index.d.ts +4 -3
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +3 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/ledger/client.d.ts +14 -0
  53. package/dist/ledger/client.d.ts.map +1 -1
  54. package/dist/ledger/client.js +56 -0
  55. package/dist/ledger/client.js.map +1 -1
  56. package/dist/ledger/pricing.d.ts +54 -0
  57. package/dist/ledger/pricing.d.ts.map +1 -1
  58. package/dist/ledger/pricing.js +134 -8
  59. package/dist/ledger/pricing.js.map +1 -1
  60. package/dist/policy/default-rules.d.ts +18 -3
  61. package/dist/policy/default-rules.d.ts.map +1 -1
  62. package/dist/policy/default-rules.js +33 -15
  63. package/dist/policy/default-rules.js.map +1 -1
  64. package/dist/policy/gate.d.ts.map +1 -1
  65. package/dist/policy/gate.js +114 -16
  66. package/dist/policy/gate.js.map +1 -1
  67. package/dist/policy/injection.d.ts.map +1 -1
  68. package/dist/policy/injection.js +25 -16
  69. package/dist/policy/injection.js.map +1 -1
  70. package/dist/policy/pii.d.ts +20 -0
  71. package/dist/policy/pii.d.ts.map +1 -1
  72. package/dist/policy/pii.js +45 -2
  73. package/dist/policy/pii.js.map +1 -1
  74. package/dist/shared/types.d.ts +191 -0
  75. package/dist/shared/types.d.ts.map +1 -1
  76. package/dist/shared/types.js +67 -6
  77. package/dist/shared/types.js.map +1 -1
  78. package/dist/snapshot/checkpoint.d.ts +18 -2
  79. package/dist/snapshot/checkpoint.d.ts.map +1 -1
  80. package/dist/snapshot/checkpoint.js +101 -17
  81. package/dist/snapshot/checkpoint.js.map +1 -1
  82. package/dist/streaming.d.ts +8 -3
  83. package/dist/streaming.d.ts.map +1 -1
  84. package/dist/streaming.js +75 -31
  85. package/dist/streaming.js.map +1 -1
  86. package/dist/supply-chain/permissions.d.ts +16 -3
  87. package/dist/supply-chain/permissions.d.ts.map +1 -1
  88. package/dist/supply-chain/permissions.js +59 -9
  89. package/dist/supply-chain/permissions.js.map +1 -1
  90. package/dist/supply-chain/sign.d.ts +5 -2
  91. package/dist/supply-chain/sign.d.ts.map +1 -1
  92. package/dist/supply-chain/sign.js +10 -2
  93. package/dist/supply-chain/sign.js.map +1 -1
  94. package/package.json +2 -4
@@ -1,4 +1,18 @@
1
1
  import { z } from "zod";
2
+ /** Settlement scope of an endpoint: local (self-hosted) or cloud (metered provider). */
3
+ export type EndpointClass = "local" | "cloud";
4
+ /** Best-effort runtime label for a local endpoint (receipt/UX metadata only). */
5
+ export type LocalRuntime = "ollama" | "vllm" | "lmstudio" | "openai-compat" | "unknown";
6
+ /** Result of endpoint classification — selects the settlement regime for a call. */
7
+ export interface EndpointInfo {
8
+ class: EndpointClass;
9
+ runtime: LocalRuntime;
10
+ baseURL?: string | undefined;
11
+ }
12
+ /** Denomination of a settled cost: real-dollar proxy or nominal bookkeeping units. */
13
+ export type CostBasis = "usd-proxy" | "nominal";
14
+ /** Where the applied rates came from during resolution. */
15
+ export type RateSource = "table" | "custom" | "local-model" | "local-default" | "fallback";
2
16
  export interface TrustReceipt {
3
17
  transferId: string;
4
18
  cost: number;
@@ -18,6 +32,17 @@ export interface TrustReceipt {
18
32
  chunksDelivered?: number;
19
33
  /** Action kind for governed non-LLM actions. Absent for LLM calls (backward compat). */
20
34
  actionKind?: ActionKind;
35
+ /** Endpoint classification for this call. Absent on pre-M2 receipts. */
36
+ endpoint?: {
37
+ class: EndpointClass;
38
+ runtime: LocalRuntime;
39
+ };
40
+ /** Metering provenance: denomination and rate origin of the settled cost. */
41
+ meter?: {
42
+ costBasis: CostBasis;
43
+ rateSource: RateSource;
44
+ computeMs?: number;
45
+ };
21
46
  }
22
47
  export interface TrustedResponse<T> {
23
48
  response: T;
@@ -64,12 +89,15 @@ export declare const TrustConfigSchema: z.ZodObject<{
64
89
  audit: z.ZodDefault<z.ZodObject<{
65
90
  rotation: z.ZodDefault<z.ZodEnum<["daily", "weekly", "none"]>>;
66
91
  indexLimit: z.ZodDefault<z.ZodNumber>;
92
+ failClosed: z.ZodDefault<z.ZodBoolean>;
67
93
  }, "strip", z.ZodTypeAny, {
68
94
  rotation: "daily" | "weekly" | "none";
69
95
  indexLimit: number;
96
+ failClosed: boolean;
70
97
  }, {
71
98
  rotation?: "daily" | "weekly" | "none" | undefined;
72
99
  indexLimit?: number | undefined;
100
+ failClosed?: boolean | undefined;
73
101
  }>>;
74
102
  tigerbeetle: z.ZodDefault<z.ZodObject<{
75
103
  addresses: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
@@ -102,19 +130,110 @@ export declare const TrustConfigSchema: z.ZodObject<{
102
130
  inputPer1k: number;
103
131
  outputPer1k: number;
104
132
  }>>>;
133
+ /**
134
+ * Endpoint matchers consumed by classifyEndpoint(). First match wins.
135
+ * match forms: scheme URL ("http://gpu-box:8000", matched by origin),
136
+ * leading-star hostname suffix ("*.gpu.internal"), or bare hostname ("gpu-box").
137
+ */
138
+ endpoints: z.ZodDefault<z.ZodArray<z.ZodObject<{
139
+ match: z.ZodString;
140
+ class: z.ZodDefault<z.ZodEnum<["local", "cloud"]>>;
141
+ runtime: z.ZodDefault<z.ZodEnum<["ollama", "vllm", "lmstudio", "openai-compat", "unknown"]>>;
142
+ }, "strip", z.ZodTypeAny, {
143
+ match: string;
144
+ class: "local" | "cloud";
145
+ runtime: "ollama" | "vllm" | "lmstudio" | "openai-compat" | "unknown";
146
+ }, {
147
+ match: string;
148
+ class?: "local" | "cloud" | undefined;
149
+ runtime?: "ollama" | "vllm" | "lmstudio" | "openai-compat" | "unknown" | undefined;
150
+ }>, "many">>;
151
+ /** Local (zero-marginal-cost) settlement scope. */
152
+ local: z.ZodDefault<z.ZodObject<{
153
+ /** Loopback hosts (localhost/127.0.0.1/[::1]) classify as local without config. */
154
+ autoDetectLoopback: z.ZodDefault<z.ZodBoolean>;
155
+ /**
156
+ * Rate applied to any local-scope model with no local.models match. Default {0,0}:
157
+ * with the >=1 floor, every local call settles at exactly 1 nominal usertoken.
158
+ */
159
+ defaultRate: z.ZodDefault<z.ZodObject<{
160
+ inputPer1k: z.ZodNumber;
161
+ outputPer1k: z.ZodNumber;
162
+ }, "strip", z.ZodTypeAny, {
163
+ inputPer1k: number;
164
+ outputPer1k: number;
165
+ }, {
166
+ inputPer1k: number;
167
+ outputPer1k: number;
168
+ }>>;
169
+ /**
170
+ * Denomination of local rates: "nominal" (bookkeeping units) or "amortized-usd"
171
+ * (operator's GPU-chargeback rate; 1 usertoken = $0.0001 as usual).
172
+ */
173
+ rateClass: z.ZodDefault<z.ZodEnum<["nominal", "amortized-usd"]>>;
174
+ /**
175
+ * Per-model local rates. Keys: exact model strings or trailing-* globs
176
+ * ("llama3.3*", "*"). Exact match beats glob; longest glob wins.
177
+ */
178
+ models: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
179
+ inputPer1k: z.ZodNumber;
180
+ outputPer1k: z.ZodNumber;
181
+ }, "strip", z.ZodTypeAny, {
182
+ inputPer1k: number;
183
+ outputPer1k: number;
184
+ }, {
185
+ inputPer1k: number;
186
+ outputPer1k: number;
187
+ }>>>;
188
+ /** Inject stream_options:{include_usage:true} into local openai-kind streams. */
189
+ injectUsageOptions: z.ZodDefault<z.ZodBoolean>;
190
+ }, "strip", z.ZodTypeAny, {
191
+ models: Record<string, {
192
+ inputPer1k: number;
193
+ outputPer1k: number;
194
+ }>;
195
+ autoDetectLoopback: boolean;
196
+ defaultRate: {
197
+ inputPer1k: number;
198
+ outputPer1k: number;
199
+ };
200
+ rateClass: "nominal" | "amortized-usd";
201
+ injectUsageOptions: boolean;
202
+ }, {
203
+ models?: Record<string, {
204
+ inputPer1k: number;
205
+ outputPer1k: number;
206
+ }> | undefined;
207
+ autoDetectLoopback?: boolean | undefined;
208
+ defaultRate?: {
209
+ inputPer1k: number;
210
+ outputPer1k: number;
211
+ } | undefined;
212
+ rateClass?: "nominal" | "amortized-usd" | undefined;
213
+ injectUsageOptions?: boolean | undefined;
214
+ }>>;
215
+ /**
216
+ * Cloud-scope policy when a model misses customRates, PRICING_TABLE, and prefix match.
217
+ * "fallback" = silent sonnet-class rate (legacy) · "warn" = same rate + one-time warn +
218
+ * receipt.meter.rateSource "fallback" · "deny" = PolicyDeniedError before the PENDING hold.
219
+ */
220
+ unknownModelPolicy: z.ZodDefault<z.ZodEnum<["fallback", "warn", "deny"]>>;
105
221
  supplyChain: z.ZodDefault<z.ZodObject<{
106
222
  enabled: z.ZodDefault<z.ZodBoolean>;
107
223
  trustedPublishers: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
224
+ publisherKeys: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>>;
108
225
  allowedPermissions: z.ZodDefault<z.ZodArray<z.ZodEnum<["llm_call", "tool_use", "file_read", "file_write", "shell_command", "network_access", "credential_access"]>, "many">>;
109
226
  requireSignature: z.ZodDefault<z.ZodBoolean>;
110
227
  }, "strip", z.ZodTypeAny, {
111
228
  enabled: boolean;
112
229
  trustedPublishers: string[];
230
+ publisherKeys: Record<string, string[]>;
113
231
  allowedPermissions: ("llm_call" | "tool_use" | "shell_command" | "file_read" | "file_write" | "network_access" | "credential_access")[];
114
232
  requireSignature: boolean;
115
233
  }, {
116
234
  enabled?: boolean | undefined;
117
235
  trustedPublishers?: string[] | undefined;
236
+ publisherKeys?: Record<string, string[]> | undefined;
118
237
  allowedPermissions?: ("llm_call" | "tool_use" | "shell_command" | "file_read" | "file_write" | "network_access" | "credential_access")[] | undefined;
119
238
  requireSignature?: boolean | undefined;
120
239
  }>>;
@@ -158,26 +277,38 @@ export declare const TrustConfigSchema: z.ZodObject<{
158
277
  enabled: z.ZodDefault<z.ZodBoolean>;
159
278
  tokenRate: z.ZodDefault<z.ZodObject<{
160
279
  thresholdTokPerSec: z.ZodDefault<z.ZodNumber>;
280
+ /** Local-scope threshold (fast local GPU inference legitimately exceeds 500). */
281
+ localThresholdTokPerSec: z.ZodDefault<z.ZodNumber>;
282
+ /** Per-model threshold overrides. Keys: exact model or trailing-* glob. */
283
+ perModel: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
161
284
  windowMs: z.ZodDefault<z.ZodNumber>;
162
285
  consecutiveWindows: z.ZodDefault<z.ZodNumber>;
163
286
  }, "strip", z.ZodTypeAny, {
164
287
  thresholdTokPerSec: number;
288
+ localThresholdTokPerSec: number;
289
+ perModel: Record<string, number>;
165
290
  windowMs: number;
166
291
  consecutiveWindows: number;
167
292
  }, {
168
293
  thresholdTokPerSec?: number | undefined;
294
+ localThresholdTokPerSec?: number | undefined;
295
+ perModel?: Record<string, number> | undefined;
169
296
  windowMs?: number | undefined;
170
297
  consecutiveWindows?: number | undefined;
171
298
  }>>;
172
299
  spendVelocity: z.ZodDefault<z.ZodObject<{
173
300
  thresholdDollarsPerMin: z.ZodDefault<z.ZodNumber>;
301
+ /** Local-scope velocity threshold in nominal usertokens per minute. */
302
+ localThresholdUsertokensPerMin: z.ZodDefault<z.ZodNumber>;
174
303
  windowMs: z.ZodDefault<z.ZodNumber>;
175
304
  }, "strip", z.ZodTypeAny, {
176
305
  windowMs: number;
177
306
  thresholdDollarsPerMin: number;
307
+ localThresholdUsertokensPerMin: number;
178
308
  }, {
179
309
  windowMs?: number | undefined;
180
310
  thresholdDollarsPerMin?: number | undefined;
311
+ localThresholdUsertokensPerMin?: number | undefined;
181
312
  }>>;
182
313
  injectionCascade: z.ZodDefault<z.ZodObject<{
183
314
  eventCount: z.ZodDefault<z.ZodNumber>;
@@ -194,12 +325,15 @@ export declare const TrustConfigSchema: z.ZodObject<{
194
325
  enabled: boolean;
195
326
  tokenRate: {
196
327
  thresholdTokPerSec: number;
328
+ localThresholdTokPerSec: number;
329
+ perModel: Record<string, number>;
197
330
  windowMs: number;
198
331
  consecutiveWindows: number;
199
332
  };
200
333
  spendVelocity: {
201
334
  windowMs: number;
202
335
  thresholdDollarsPerMin: number;
336
+ localThresholdUsertokensPerMin: number;
203
337
  };
204
338
  injectionCascade: {
205
339
  windowMs: number;
@@ -210,12 +344,15 @@ export declare const TrustConfigSchema: z.ZodObject<{
210
344
  enabled?: boolean | undefined;
211
345
  tokenRate?: {
212
346
  thresholdTokPerSec?: number | undefined;
347
+ localThresholdTokPerSec?: number | undefined;
348
+ perModel?: Record<string, number> | undefined;
213
349
  windowMs?: number | undefined;
214
350
  consecutiveWindows?: number | undefined;
215
351
  } | undefined;
216
352
  spendVelocity?: {
217
353
  windowMs?: number | undefined;
218
354
  thresholdDollarsPerMin?: number | undefined;
355
+ localThresholdUsertokensPerMin?: number | undefined;
219
356
  } | undefined;
220
357
  injectionCascade?: {
221
358
  windowMs?: number | undefined;
@@ -227,6 +364,20 @@ export declare const TrustConfigSchema: z.ZodObject<{
227
364
  audit: {
228
365
  rotation: "daily" | "weekly" | "none";
229
366
  indexLimit: number;
367
+ failClosed: boolean;
368
+ };
369
+ local: {
370
+ models: Record<string, {
371
+ inputPer1k: number;
372
+ outputPer1k: number;
373
+ }>;
374
+ autoDetectLoopback: boolean;
375
+ defaultRate: {
376
+ inputPer1k: number;
377
+ outputPer1k: number;
378
+ };
379
+ rateClass: "nominal" | "amortized-usd";
380
+ injectUsageOptions: boolean;
230
381
  };
231
382
  budget: number;
232
383
  tier: "free" | "mini" | "pro" | "mega" | "ultra";
@@ -254,9 +405,16 @@ export declare const TrustConfigSchema: z.ZodObject<{
254
405
  models: string[];
255
406
  }[];
256
407
  pricing: "custom" | "recommended";
408
+ endpoints: {
409
+ match: string;
410
+ class: "local" | "cloud";
411
+ runtime: "ollama" | "vllm" | "lmstudio" | "openai-compat" | "unknown";
412
+ }[];
413
+ unknownModelPolicy: "fallback" | "warn" | "deny";
257
414
  supplyChain: {
258
415
  enabled: boolean;
259
416
  trustedPublishers: string[];
417
+ publisherKeys: Record<string, string[]>;
260
418
  allowedPermissions: ("llm_call" | "tool_use" | "shell_command" | "file_read" | "file_write" | "network_access" | "credential_access")[];
261
419
  requireSignature: boolean;
262
420
  };
@@ -274,12 +432,15 @@ export declare const TrustConfigSchema: z.ZodObject<{
274
432
  enabled: boolean;
275
433
  tokenRate: {
276
434
  thresholdTokPerSec: number;
435
+ localThresholdTokPerSec: number;
436
+ perModel: Record<string, number>;
277
437
  windowMs: number;
278
438
  consecutiveWindows: number;
279
439
  };
280
440
  spendVelocity: {
281
441
  windowMs: number;
282
442
  thresholdDollarsPerMin: number;
443
+ localThresholdUsertokensPerMin: number;
283
444
  };
284
445
  injectionCascade: {
285
446
  windowMs: number;
@@ -298,6 +459,20 @@ export declare const TrustConfigSchema: z.ZodObject<{
298
459
  audit?: {
299
460
  rotation?: "daily" | "weekly" | "none" | undefined;
300
461
  indexLimit?: number | undefined;
462
+ failClosed?: boolean | undefined;
463
+ } | undefined;
464
+ local?: {
465
+ models?: Record<string, {
466
+ inputPer1k: number;
467
+ outputPer1k: number;
468
+ }> | undefined;
469
+ autoDetectLoopback?: boolean | undefined;
470
+ defaultRate?: {
471
+ inputPer1k: number;
472
+ outputPer1k: number;
473
+ } | undefined;
474
+ rateClass?: "nominal" | "amortized-usd" | undefined;
475
+ injectUsageOptions?: boolean | undefined;
301
476
  } | undefined;
302
477
  tier?: "free" | "mini" | "pro" | "mega" | "ultra" | undefined;
303
478
  proxy?: string | undefined;
@@ -330,9 +505,16 @@ export declare const TrustConfigSchema: z.ZodObject<{
330
505
  inputPer1k: number;
331
506
  outputPer1k: number;
332
507
  }> | undefined;
508
+ endpoints?: {
509
+ match: string;
510
+ class?: "local" | "cloud" | undefined;
511
+ runtime?: "ollama" | "vllm" | "lmstudio" | "openai-compat" | "unknown" | undefined;
512
+ }[] | undefined;
513
+ unknownModelPolicy?: "fallback" | "warn" | "deny" | undefined;
333
514
  supplyChain?: {
334
515
  enabled?: boolean | undefined;
335
516
  trustedPublishers?: string[] | undefined;
517
+ publisherKeys?: Record<string, string[]> | undefined;
336
518
  allowedPermissions?: ("llm_call" | "tool_use" | "shell_command" | "file_read" | "file_write" | "network_access" | "credential_access")[] | undefined;
337
519
  requireSignature?: boolean | undefined;
338
520
  } | undefined;
@@ -350,12 +532,15 @@ export declare const TrustConfigSchema: z.ZodObject<{
350
532
  enabled?: boolean | undefined;
351
533
  tokenRate?: {
352
534
  thresholdTokPerSec?: number | undefined;
535
+ localThresholdTokPerSec?: number | undefined;
536
+ perModel?: Record<string, number> | undefined;
353
537
  windowMs?: number | undefined;
354
538
  consecutiveWindows?: number | undefined;
355
539
  } | undefined;
356
540
  spendVelocity?: {
357
541
  windowMs?: number | undefined;
358
542
  thresholdDollarsPerMin?: number | undefined;
543
+ localThresholdUsertokensPerMin?: number | undefined;
359
544
  } | undefined;
360
545
  injectionCascade?: {
361
546
  windowMs?: number | undefined;
@@ -465,6 +650,12 @@ export interface SkillVerification {
465
650
  deniedPermissions: SkillPermission[];
466
651
  /** SHA-256 hash of the manifest for audit inclusion. */
467
652
  manifestHash: string;
653
+ /**
654
+ * Whether the loaded skill source bytes were re-hashed and matched the signed
655
+ * `entryHash` (SC-2). False when no source was supplied — an executor MUST treat
656
+ * `false` as "integrity unverified, do not execute".
657
+ */
658
+ integrityVerified: boolean;
468
659
  /** Error message if verification failed. */
469
660
  error?: string;
470
661
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,11 @@
2
2
  // Copyright 2026 Usertools, Inc.
3
3
  import { z } from "zod";
4
4
  // ── Config schema ──
5
+ /** Per-1k-token rate pair (usertokens). Shared by customRates and local.* rates. */
6
+ const RateSchema = z.object({
7
+ inputPer1k: z.number().finite().nonnegative(),
8
+ outputPer1k: z.number().finite().nonnegative(),
9
+ });
5
10
  export const TrustConfigSchema = z.object({
6
11
  budget: z.number().int().positive(),
7
12
  tier: z.enum(["free", "mini", "pro", "mega", "ultra"]).default("mini"),
@@ -32,6 +37,10 @@ export const TrustConfigSchema = z.object({
32
37
  .object({
33
38
  rotation: z.enum(["daily", "weekly", "none"]).default("daily"),
34
39
  indexLimit: z.number().int().default(10_000),
40
+ // P3-AUDIT-FAILCLOSED: when true, a failed CRITICAL audit write aborts the
41
+ // call (deny) instead of settling an unaudited spend. Default false keeps the
42
+ // legacy fail-open behavior (degraded receipt, money still moves).
43
+ failClosed: z.boolean().default(false),
35
44
  })
36
45
  .default({}),
37
46
  tigerbeetle: z
@@ -47,16 +56,62 @@ export const TrustConfigSchema = z.object({
47
56
  }))
48
57
  .default([]),
49
58
  pricing: z.enum(["recommended", "custom"]).default("recommended"),
50
- customRates: z
51
- .record(z.string(), z.object({
52
- inputPer1k: z.number().finite().nonnegative(),
53
- outputPer1k: z.number().finite().nonnegative(),
59
+ customRates: z.record(z.string(), RateSchema).optional(),
60
+ /**
61
+ * Endpoint matchers consumed by classifyEndpoint(). First match wins.
62
+ * match forms: scheme URL ("http://gpu-box:8000", matched by origin),
63
+ * leading-star hostname suffix ("*.gpu.internal"), or bare hostname ("gpu-box").
64
+ */
65
+ endpoints: z
66
+ .array(z.object({
67
+ match: z.string().min(1),
68
+ class: z.enum(["local", "cloud"]).default("local"),
69
+ runtime: z
70
+ .enum(["ollama", "vllm", "lmstudio", "openai-compat", "unknown"])
71
+ .default("unknown"),
54
72
  }))
55
- .optional(),
73
+ .default([]),
74
+ /** Local (zero-marginal-cost) settlement scope. */
75
+ local: z
76
+ .object({
77
+ /** Loopback hosts (localhost/127.0.0.1/[::1]) classify as local without config. */
78
+ autoDetectLoopback: z.boolean().default(true),
79
+ /**
80
+ * Rate applied to any local-scope model with no local.models match. Default {0,0}:
81
+ * with the >=1 floor, every local call settles at exactly 1 nominal usertoken.
82
+ */
83
+ defaultRate: RateSchema.default({ inputPer1k: 0, outputPer1k: 0 }),
84
+ /**
85
+ * Denomination of local rates: "nominal" (bookkeeping units) or "amortized-usd"
86
+ * (operator's GPU-chargeback rate; 1 usertoken = $0.0001 as usual).
87
+ */
88
+ rateClass: z.enum(["nominal", "amortized-usd"]).default("nominal"),
89
+ /**
90
+ * Per-model local rates. Keys: exact model strings or trailing-* globs
91
+ * ("llama3.3*", "*"). Exact match beats glob; longest glob wins.
92
+ */
93
+ models: z.record(z.string(), RateSchema).default({}),
94
+ /** Inject stream_options:{include_usage:true} into local openai-kind streams. */
95
+ injectUsageOptions: z.boolean().default(true),
96
+ })
97
+ .default({}),
98
+ /**
99
+ * Cloud-scope policy when a model misses customRates, PRICING_TABLE, and prefix match.
100
+ * "fallback" = silent sonnet-class rate (legacy) · "warn" = same rate + one-time warn +
101
+ * receipt.meter.rateSource "fallback" · "deny" = PolicyDeniedError before the PENDING hold.
102
+ */
103
+ unknownModelPolicy: z.enum(["fallback", "warn", "deny"]).default("warn"),
56
104
  supplyChain: z
57
105
  .object({
58
- enabled: z.boolean().default(false),
106
+ // SC-3: fail-closed by default. A skill with no registered signing key
107
+ // or a bad signature is rejected out of the box; operators opt out
108
+ // explicitly by setting enabled:false.
109
+ enabled: z.boolean().default(true),
59
110
  trustedPublishers: z.array(z.string()).default([]),
111
+ // SC-1 trust anchor: publisher -> hex-encoded 32-byte Ed25519 public keys
112
+ // the operator vouches for (array = rotation-friendly). Identity is anchored
113
+ // by these keys, NOT by the key embedded in an attacker-controlled manifest.
114
+ publisherKeys: z.record(z.string(), z.array(z.string().regex(/^[a-f0-9]{64}$/))).default({}),
60
115
  allowedPermissions: z
61
116
  .array(z.enum([
62
117
  "llm_call",
@@ -93,6 +148,10 @@ export const TrustConfigSchema = z.object({
93
148
  tokenRate: z
94
149
  .object({
95
150
  thresholdTokPerSec: z.number().positive().default(500),
151
+ /** Local-scope threshold (fast local GPU inference legitimately exceeds 500). */
152
+ localThresholdTokPerSec: z.number().positive().default(5000),
153
+ /** Per-model threshold overrides. Keys: exact model or trailing-* glob. */
154
+ perModel: z.record(z.string(), z.number().positive()).default({}),
96
155
  windowMs: z.number().int().positive().default(2_000),
97
156
  consecutiveWindows: z.number().int().positive().default(3),
98
157
  })
@@ -100,6 +159,8 @@ export const TrustConfigSchema = z.object({
100
159
  spendVelocity: z
101
160
  .object({
102
161
  thresholdDollarsPerMin: z.number().positive().default(1.0),
162
+ /** Local-scope velocity threshold in nominal usertokens per minute. */
163
+ localThresholdUsertokensPerMin: z.number().positive().default(10_000),
103
164
  windowMs: z.number().int().positive().default(10_000),
104
165
  })
105
166
  .default({}),
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,17 @@ export interface SnapshotMeta {
3
3
  timestamp: string;
4
4
  files: string[];
5
5
  size: number;
6
+ /** Audit chain head at snapshot time (from events.jsonl.meta). */
7
+ auditHead?: {
8
+ lastHash: string;
9
+ sequence: number;
10
+ };
11
+ /** Money mirror value at snapshot time (from spend-ledger.json). */
12
+ budgetSpent?: number;
13
+ }
14
+ export interface RestoreOptions {
15
+ /** Acknowledge that a live TigerBeetle ledger will NOT be rolled back. */
16
+ forceLedgerDesync?: boolean;
6
17
  }
7
18
  /**
8
19
  * Create a snapshot of the vault state.
@@ -12,9 +23,14 @@ export interface SnapshotMeta {
12
23
  export declare function createSnapshot(vaultPath: string, name: string): Promise<SnapshotMeta>;
13
24
  /**
14
25
  * Restore the vault state from a named snapshot.
15
- * Overwrites existing files with snapshot contents.
26
+ *
27
+ * Atomic (stage-then-commit), audit-writer-lock-aware, and refuses any restore
28
+ * that would sever money<->audit correspondence:
29
+ * - a snapshot that rolls back the audit chain MUST carry spend-ledger.json;
30
+ * - a live TigerBeetle store (which cannot be file-rolled-back) blocks an audit
31
+ * rollback unless the operator passes `forceLedgerDesync`.
16
32
  */
17
- export declare function restoreSnapshot(vaultPath: string, name: string): Promise<void>;
33
+ export declare function restoreSnapshot(vaultPath: string, name: string, opts?: RestoreOptions): Promise<void>;
18
34
  /**
19
35
  * List all snapshots in the vault, sorted by timestamp (oldest first).
20
36
  */
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/snapshot/checkpoint.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACb;AA6GD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA6B3F;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBpF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA2B9E"}
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/snapshot/checkpoint.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC9B,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAwHD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAoD3F;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAsEf;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA2B9E"}