usertrust 1.0.0 → 1.0.1

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 (80) hide show
  1. package/dist/cli/init.d.ts +2 -0
  2. package/dist/cli/init.d.ts.map +1 -1
  3. package/dist/cli/init.js +231 -37
  4. package/dist/cli/init.js.map +1 -1
  5. package/dist/cli/main.d.ts +1 -1
  6. package/dist/cli/main.d.ts.map +1 -1
  7. package/dist/cli/main.js +18 -3
  8. package/dist/cli/main.js.map +1 -1
  9. package/dist/cli/pricing.d.ts +5 -0
  10. package/dist/cli/pricing.d.ts.map +1 -0
  11. package/dist/cli/pricing.js +61 -0
  12. package/dist/cli/pricing.js.map +1 -0
  13. package/dist/cli/validate-key.d.ts +17 -0
  14. package/dist/cli/validate-key.d.ts.map +1 -0
  15. package/dist/cli/validate-key.js +58 -0
  16. package/dist/cli/validate-key.js.map +1 -0
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js +31 -0
  19. package/dist/config.js.map +1 -1
  20. package/dist/govern.d.ts +3 -1
  21. package/dist/govern.d.ts.map +1 -1
  22. package/dist/govern.js +415 -47
  23. package/dist/govern.js.map +1 -1
  24. package/dist/headless.d.ts +77 -0
  25. package/dist/headless.d.ts.map +1 -0
  26. package/dist/headless.js +566 -0
  27. package/dist/headless.js.map +1 -0
  28. package/dist/index.d.ts +12 -2
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +13 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/ledger/pricing.d.ts +6 -2
  33. package/dist/ledger/pricing.d.ts.map +1 -1
  34. package/dist/ledger/pricing.js +31 -3
  35. package/dist/ledger/pricing.js.map +1 -1
  36. package/dist/policy/canary.d.ts +17 -0
  37. package/dist/policy/canary.d.ts.map +1 -0
  38. package/dist/policy/canary.js +44 -0
  39. package/dist/policy/canary.js.map +1 -0
  40. package/dist/policy/injection.d.ts +24 -0
  41. package/dist/policy/injection.d.ts.map +1 -0
  42. package/dist/policy/injection.js +178 -0
  43. package/dist/policy/injection.js.map +1 -0
  44. package/dist/policy/pii.d.ts +13 -1
  45. package/dist/policy/pii.d.ts.map +1 -1
  46. package/dist/policy/pii.js +88 -0
  47. package/dist/policy/pii.js.map +1 -1
  48. package/dist/shared/errors.d.ts +20 -0
  49. package/dist/shared/errors.d.ts.map +1 -1
  50. package/dist/shared/errors.js +46 -0
  51. package/dist/shared/errors.js.map +1 -1
  52. package/dist/shared/types.d.ts +264 -0
  53. package/dist/shared/types.d.ts.map +1 -1
  54. package/dist/shared/types.js +67 -0
  55. package/dist/shared/types.js.map +1 -1
  56. package/dist/supply-chain/manifest.d.ts +22 -0
  57. package/dist/supply-chain/manifest.d.ts.map +1 -0
  58. package/dist/supply-chain/manifest.js +46 -0
  59. package/dist/supply-chain/manifest.js.map +1 -0
  60. package/dist/supply-chain/permissions.d.ts +12 -0
  61. package/dist/supply-chain/permissions.d.ts.map +1 -0
  62. package/dist/supply-chain/permissions.js +89 -0
  63. package/dist/supply-chain/permissions.js.map +1 -0
  64. package/dist/supply-chain/sign.d.ts +17 -0
  65. package/dist/supply-chain/sign.d.ts.map +1 -0
  66. package/dist/supply-chain/sign.js +95 -0
  67. package/dist/supply-chain/sign.js.map +1 -0
  68. package/dist/vault/derive.d.ts +13 -0
  69. package/dist/vault/derive.d.ts.map +1 -0
  70. package/dist/vault/derive.js +32 -0
  71. package/dist/vault/derive.js.map +1 -0
  72. package/dist/vault/scope.d.ts +20 -0
  73. package/dist/vault/scope.d.ts.map +1 -0
  74. package/dist/vault/scope.js +35 -0
  75. package/dist/vault/scope.js.map +1 -0
  76. package/dist/vault/store.d.ts +31 -0
  77. package/dist/vault/store.d.ts.map +1 -0
  78. package/dist/vault/store.js +204 -0
  79. package/dist/vault/store.js.map +1 -0
  80. package/package.json +13 -2
@@ -0,0 +1,566 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright 2026 Usertools, Inc.
3
+ /**
4
+ * headless.ts — Headless Governance API
5
+ *
6
+ * A two-phase lifecycle API (authorize → settle/abort) for governing
7
+ * LLM calls WITHOUT requiring a provider SDK client instance.
8
+ *
9
+ * This is the integration surface for non-SDK environments like OpenClaw
10
+ * (which uses pi-ai streaming) or any system that makes raw LLM calls.
11
+ *
12
+ * Usage:
13
+ * ```ts
14
+ * import { createGovernor } from "usertrust/headless";
15
+ *
16
+ * const governor = await createGovernor({ dryRun: true, budget: 100_000 });
17
+ *
18
+ * const auth = await governor.authorize({
19
+ * model: "claude-sonnet-4-6",
20
+ * estimatedInputTokens: 500,
21
+ * maxOutputTokens: 4096,
22
+ * });
23
+ *
24
+ * try {
25
+ * // ... make the LLM call, accumulate usage ...
26
+ * const receipt = await governor.settle(auth, {
27
+ * inputTokens: actualInput,
28
+ * outputTokens: actualOutput,
29
+ * });
30
+ * } catch (err) {
31
+ * await governor.abort(auth, err);
32
+ * throw err;
33
+ * }
34
+ *
35
+ * await governor.destroy();
36
+ * ```
37
+ */
38
+ import { createHash } from "node:crypto";
39
+ import { existsSync, mkdirSync } from "node:fs";
40
+ import { readFile, rename, writeFile } from "node:fs/promises";
41
+ import { join } from "node:path";
42
+ import { createAuditWriter } from "./audit/chain.js";
43
+ import { writeReceipt } from "./audit/rotation.js";
44
+ import { TrustTBClient, XFER_SPEND } from "./ledger/client.js";
45
+ import { estimateCost, estimateInputTokens } from "./ledger/pricing.js";
46
+ import { recordPattern } from "./memory/patterns.js";
47
+ import { evaluatePolicy, loadPolicies } from "./policy/gate.js";
48
+ import { detectPII } from "./policy/pii.js";
49
+ import { connectProxy } from "./proxy.js";
50
+ import { CircuitBreakerRegistry } from "./resilience/circuit.js";
51
+ import { DEFAULT_BUDGET, VAULT_DIR } from "./shared/constants.js";
52
+ import { LedgerUnavailableError, PolicyDeniedError } from "./shared/errors.js";
53
+ import { trustId } from "./shared/ids.js";
54
+ import { TrustConfigSchema } from "./shared/types.js";
55
+ // ── Verify URL base ──
56
+ const VERIFY_URL_BASE = "https://verify.usertrust.dev";
57
+ // ── Async mutex (same as govern.ts AUD-453) ──
58
+ class AsyncMutex {
59
+ queue = Promise.resolve();
60
+ async acquire() {
61
+ let release;
62
+ const next = new Promise((resolve) => {
63
+ release = resolve;
64
+ });
65
+ const prev = this.queue;
66
+ this.queue = next;
67
+ await prev;
68
+ return release;
69
+ }
70
+ }
71
+ async function loadSpendLedger(vaultBase) {
72
+ const ledgerPath = join(vaultBase, VAULT_DIR, "spend-ledger.json");
73
+ try {
74
+ const raw = await readFile(ledgerPath, "utf-8");
75
+ const parsed = JSON.parse(raw);
76
+ if (parsed != null &&
77
+ typeof parsed === "object" &&
78
+ "budgetSpent" in parsed &&
79
+ typeof parsed.budgetSpent === "number") {
80
+ const value = parsed.budgetSpent;
81
+ if (Number.isFinite(value) && value >= 0) {
82
+ return value;
83
+ }
84
+ }
85
+ }
86
+ catch {
87
+ // No ledger file or corrupt — start from zero
88
+ }
89
+ return 0;
90
+ }
91
+ async function persistSpendLedger(vaultBase, budgetSpent) {
92
+ const dir = join(vaultBase, VAULT_DIR);
93
+ const ledgerPath = join(dir, "spend-ledger.json");
94
+ const tmpPath = join(dir, "spend-ledger.json.tmp");
95
+ const data = {
96
+ budgetSpent,
97
+ updatedAt: new Date().toISOString(),
98
+ };
99
+ try {
100
+ if (!existsSync(dir)) {
101
+ mkdirSync(dir, { recursive: true });
102
+ }
103
+ await writeFile(tmpPath, JSON.stringify(data), "utf-8");
104
+ await rename(tmpPath, ledgerPath);
105
+ }
106
+ catch {
107
+ // Best-effort — do not fail the LLM call over ledger persistence
108
+ }
109
+ }
110
+ // ── TigerBeetle engine factory (same as govern.ts) ──
111
+ async function createTBEngine(config) {
112
+ const tbAddresses = config.tigerbeetle.addresses;
113
+ const tbClusterId = BigInt(config.tigerbeetle.clusterId);
114
+ const tbClient = new TrustTBClient({
115
+ addresses: tbAddresses,
116
+ clusterId: tbClusterId,
117
+ });
118
+ await tbClient.createTreasury();
119
+ await tbClient.ensureEscrowAccount("trust:escrow");
120
+ const pendingMap = new Map();
121
+ return {
122
+ async spendPending(params) {
123
+ const treasury = tbClient.getTreasuryId();
124
+ const escrowId = TrustTBClient.deriveAccountId("trust:escrow");
125
+ const tbTransferId = await tbClient.createPendingTransfer({
126
+ debitAccountId: escrowId,
127
+ creditAccountId: treasury,
128
+ amount: params.amount,
129
+ code: XFER_SPEND,
130
+ });
131
+ pendingMap.set(params.transferId, tbTransferId);
132
+ return { transferId: params.transferId };
133
+ },
134
+ async postPendingSpend(transferId) {
135
+ const tbId = pendingMap.get(transferId);
136
+ if (tbId === undefined) {
137
+ throw new Error(`No pending transfer found for ${transferId}`);
138
+ }
139
+ await tbClient.postTransfer(tbId);
140
+ pendingMap.delete(transferId);
141
+ },
142
+ async voidPendingSpend(transferId) {
143
+ const tbId = pendingMap.get(transferId);
144
+ if (tbId === undefined) {
145
+ throw new Error(`No pending transfer found for ${transferId}`);
146
+ }
147
+ await tbClient.voidTransfer(tbId);
148
+ pendingMap.delete(transferId);
149
+ },
150
+ async voidAllPending() {
151
+ const entries = [...pendingMap.entries()];
152
+ for (const [trustIdKey, tbTransferId] of entries) {
153
+ try {
154
+ await tbClient.voidTransfer(tbTransferId);
155
+ }
156
+ catch {
157
+ // Best-effort
158
+ }
159
+ pendingMap.delete(trustIdKey);
160
+ }
161
+ },
162
+ destroy() {
163
+ tbClient.destroy();
164
+ },
165
+ };
166
+ }
167
+ // ── createGovernor() ──
168
+ /**
169
+ * Create a headless governance engine for non-SDK integrations.
170
+ *
171
+ * Unlike `trust()` which wraps a provider SDK client, `createGovernor()`
172
+ * returns a standalone engine with an explicit authorize/settle/abort
173
+ * lifecycle. This is designed for systems like OpenClaw that make raw
174
+ * LLM calls via streaming libraries (pi-ai) rather than SDK clients.
175
+ */
176
+ export async function createGovernor(opts) {
177
+ // 1. Load config
178
+ const vaultBase = opts?.vaultBase ?? process.cwd();
179
+ const configPath = opts?.configPath ?? join(vaultBase, VAULT_DIR, "usertrust.config.json");
180
+ let config;
181
+ if (existsSync(configPath)) {
182
+ const raw = JSON.parse(await readFile(configPath, "utf-8"));
183
+ config = TrustConfigSchema.parse({
184
+ ...raw,
185
+ ...(opts?.budget !== undefined ? { budget: opts.budget } : {}),
186
+ });
187
+ }
188
+ else {
189
+ config = TrustConfigSchema.parse({
190
+ budget: opts?.budget ?? DEFAULT_BUDGET,
191
+ });
192
+ }
193
+ const customRates = config.pricing === "custom" ? config.customRates : undefined;
194
+ const isDryRun = opts?.dryRun ?? process.env.USERTRUST_DRY_RUN === "true";
195
+ const isTestEnv = process.env.USERTRUST_TEST === "1" || process.env.NODE_ENV === "test";
196
+ // 2. Initialize subsystems
197
+ const vaultPath = vaultBase;
198
+ const audit = (isTestEnv ? opts?._audit : undefined) ?? createAuditWriter(vaultPath);
199
+ const policiesPath = join(vaultPath, VAULT_DIR, config.policies);
200
+ const policyRules = existsSync(policiesPath) ? loadPolicies(policiesPath) : [];
201
+ const breaker = new CircuitBreakerRegistry({
202
+ failureThreshold: config.circuitBreaker.failureThreshold,
203
+ resetTimeoutMs: config.circuitBreaker.resetTimeout,
204
+ });
205
+ // 3. Proxy connection
206
+ let proxyConn = null;
207
+ if (opts?.proxy) {
208
+ proxyConn = connectProxy(opts.proxy, opts.key);
209
+ }
210
+ // 4. Engine
211
+ let engine;
212
+ if (isTestEnv && opts?._engine !== undefined) {
213
+ engine = opts._engine;
214
+ }
215
+ else if (!isDryRun && proxyConn == null) {
216
+ try {
217
+ engine = await createTBEngine(config);
218
+ }
219
+ catch (err) {
220
+ throw new LedgerUnavailableError(err instanceof Error ? err.message : String(err));
221
+ }
222
+ }
223
+ else {
224
+ engine = null;
225
+ }
226
+ // 5. State
227
+ let destroyed = false;
228
+ let budgetSpent = await loadSpendLedger(vaultBase);
229
+ const budgetMutex = new AsyncMutex();
230
+ let inFlightHoldTotal = 0;
231
+ const activeAuths = new Map();
232
+ // 6. Governor implementation
233
+ const governor = {
234
+ config,
235
+ async authorize(params) {
236
+ if (destroyed) {
237
+ throw new Error("Governor has been destroyed");
238
+ }
239
+ const model = params.model;
240
+ const actor = params.actor ?? "local";
241
+ const messages = params.messages ?? [];
242
+ // Circuit breaker — key on "headless" since we don't have a client kind
243
+ const cb = breaker.get("headless");
244
+ cb.allowRequest();
245
+ // Estimate cost
246
+ const transferId = trustId("tx");
247
+ const estInputTokens = params.estimatedInputTokens ?? estimateInputTokens(messages);
248
+ const maxOutputTokens = params.maxOutputTokens ?? 4096;
249
+ const estCost = estimateCost(model, estInputTokens, maxOutputTokens, customRates);
250
+ // Acquire mutex for budget atomicity (AUD-453)
251
+ const releaseBudgetLock = await budgetMutex.acquire();
252
+ let proxyTransferId;
253
+ try {
254
+ // Policy gate — caller params spread FIRST so governance
255
+ // fields cannot be shadowed (prevents budget_remaining injection).
256
+ const policyResult = evaluatePolicy(policyRules, {
257
+ ...(params.params ?? {}),
258
+ model,
259
+ tier: config.tier,
260
+ estimated_cost: estCost,
261
+ budget_remaining: config.budget - budgetSpent - inFlightHoldTotal,
262
+ });
263
+ if (policyResult.decision === "deny") {
264
+ const reason = policyResult.reasons.length > 0 ? policyResult.reasons.join("; ") : "Policy denied";
265
+ throw new PolicyDeniedError(reason);
266
+ }
267
+ // PII check
268
+ if (config.pii !== "off" && messages.length > 0) {
269
+ const piiResult = detectPII(messages);
270
+ if (piiResult.found && config.pii === "block") {
271
+ throw new PolicyDeniedError(`PII detected: ${piiResult.types.join(", ")}`);
272
+ }
273
+ }
274
+ // PENDING hold
275
+ if (proxyConn != null && !isDryRun) {
276
+ try {
277
+ const proxyResult = await proxyConn.spend({
278
+ model,
279
+ estimatedCost: estCost,
280
+ actor,
281
+ });
282
+ proxyTransferId = proxyResult.transferId;
283
+ }
284
+ catch (holdErr) {
285
+ throw new LedgerUnavailableError(holdErr instanceof Error ? holdErr.message : String(holdErr));
286
+ }
287
+ }
288
+ else if (engine != null && !isDryRun) {
289
+ try {
290
+ await engine.spendPending({ transferId, amount: estCost });
291
+ }
292
+ catch (holdErr) {
293
+ throw new LedgerUnavailableError(holdErr instanceof Error ? holdErr.message : String(holdErr));
294
+ }
295
+ }
296
+ inFlightHoldTotal += estCost;
297
+ }
298
+ finally {
299
+ releaseBudgetLock();
300
+ }
301
+ const auth = {
302
+ transferId,
303
+ estimatedCost: estCost,
304
+ model,
305
+ proxyTransferId,
306
+ createdAt: Date.now(),
307
+ };
308
+ activeAuths.set(transferId, auth);
309
+ return auth;
310
+ },
311
+ async settle(auth, params) {
312
+ if (!activeAuths.has(auth.transferId)) {
313
+ throw new Error(`Authorization ${auth.transferId} is not active (already settled or aborted)`);
314
+ }
315
+ activeAuths.delete(auth.transferId);
316
+ const model = auth.model;
317
+ let callAuditDegraded = false;
318
+ // Determine actual cost
319
+ let actualCost;
320
+ let usageSource;
321
+ if (params?.inputTokens != null || params?.outputTokens != null) {
322
+ actualCost = estimateCost(model, params.inputTokens ?? 0, params.outputTokens ?? 0, customRates);
323
+ usageSource = params.usageSource ?? "provider";
324
+ }
325
+ else {
326
+ actualCost = auth.estimatedCost;
327
+ usageSource = "estimated";
328
+ }
329
+ // AUD-453: Acquire mutex for budget atomicity — prevents concurrent
330
+ // settle() calls from corrupting inFlightHoldTotal or budgetSpent.
331
+ const releaseLock = await budgetMutex.acquire();
332
+ try {
333
+ inFlightHoldTotal -= auth.estimatedCost;
334
+ budgetSpent += actualCost;
335
+ }
336
+ finally {
337
+ releaseLock();
338
+ }
339
+ await persistSpendLedger(vaultBase, budgetSpent);
340
+ // Circuit breaker: success
341
+ const cb = breaker.get("headless");
342
+ cb.recordSuccess();
343
+ // POST settlement
344
+ let settled = true;
345
+ if (proxyConn != null && !isDryRun) {
346
+ try {
347
+ await proxyConn.settle(auth.proxyTransferId ?? auth.transferId, actualCost);
348
+ }
349
+ catch (postErr) {
350
+ settled = false;
351
+ await audit
352
+ .appendEvent({
353
+ kind: "settlement_ambiguous",
354
+ actor: "local",
355
+ data: {
356
+ model,
357
+ cost: actualCost,
358
+ transferId: auth.transferId,
359
+ error: postErr instanceof Error
360
+ ? postErr.message.slice(0, 200)
361
+ : String(postErr).slice(0, 200),
362
+ },
363
+ })
364
+ .catch(() => {
365
+ callAuditDegraded = true;
366
+ });
367
+ }
368
+ }
369
+ else if (engine != null && !isDryRun) {
370
+ try {
371
+ await engine.postPendingSpend(auth.transferId);
372
+ }
373
+ catch (postErr) {
374
+ settled = false;
375
+ await audit
376
+ .appendEvent({
377
+ kind: "settlement_ambiguous",
378
+ actor: "local",
379
+ data: {
380
+ model,
381
+ cost: actualCost,
382
+ transferId: auth.transferId,
383
+ error: postErr instanceof Error
384
+ ? postErr.message.slice(0, 200)
385
+ : String(postErr).slice(0, 200),
386
+ },
387
+ })
388
+ .catch(() => {
389
+ callAuditDegraded = true;
390
+ });
391
+ }
392
+ }
393
+ // Audit event
394
+ const syntheticHash = createHash("sha256").update(auth.transferId).digest("hex");
395
+ let auditHash = syntheticHash;
396
+ try {
397
+ const auditEvent = await audit.appendEvent({
398
+ kind: "llm_call",
399
+ actor: "local",
400
+ data: {
401
+ model,
402
+ cost: actualCost,
403
+ settled,
404
+ transferId: auth.transferId,
405
+ usageSource,
406
+ ...(params?.chunksDelivered != null ? { chunksDelivered: params.chunksDelivered } : {}),
407
+ source: "headless",
408
+ },
409
+ });
410
+ auditHash = auditEvent.hash;
411
+ }
412
+ catch {
413
+ callAuditDegraded = true;
414
+ }
415
+ // Daily-rotated receipt
416
+ if (config.audit.rotation !== "none") {
417
+ writeReceipt(vaultPath, {
418
+ kind: "llm_call",
419
+ subsystem: "headless",
420
+ actor: "local",
421
+ data: {
422
+ model,
423
+ cost: actualCost,
424
+ settled,
425
+ transferId: auth.transferId,
426
+ },
427
+ }, config.audit.indexLimit);
428
+ }
429
+ // Pattern memory
430
+ if (config.patterns.enabled) {
431
+ const promptHash = createHash("sha256").update(auth.transferId).digest("hex");
432
+ await recordPattern({
433
+ promptHash,
434
+ model,
435
+ cost: actualCost,
436
+ success: true,
437
+ }).catch(() => { });
438
+ }
439
+ const receipt = {
440
+ transferId: auth.transferId,
441
+ cost: actualCost,
442
+ budgetRemaining: config.budget - budgetSpent - inFlightHoldTotal,
443
+ auditHash,
444
+ chainPath: join(VAULT_DIR, "audit"),
445
+ receiptUrl: opts?.proxy != null ? `${VERIFY_URL_BASE}/${auth.transferId}` : null,
446
+ settled,
447
+ model,
448
+ provider: "headless",
449
+ timestamp: new Date().toISOString(),
450
+ usageSource,
451
+ ...(params?.chunksDelivered != null ? { chunksDelivered: params.chunksDelivered } : {}),
452
+ ...(callAuditDegraded ? { auditDegraded: true } : {}),
453
+ ...(proxyConn != null ? { proxyStub: true } : {}),
454
+ };
455
+ return receipt;
456
+ },
457
+ async abort(auth, error) {
458
+ if (!activeAuths.has(auth.transferId)) {
459
+ // Already settled or aborted — idempotent
460
+ return;
461
+ }
462
+ activeAuths.delete(auth.transferId);
463
+ // AUD-453: Acquire mutex for budget atomicity
464
+ const releaseLock = await budgetMutex.acquire();
465
+ try {
466
+ inFlightHoldTotal -= auth.estimatedCost;
467
+ }
468
+ finally {
469
+ releaseLock();
470
+ }
471
+ // Circuit breaker: failure
472
+ const cb = breaker.get("headless");
473
+ cb.recordFailure();
474
+ // VOID the pending hold
475
+ if (proxyConn != null && !isDryRun) {
476
+ try {
477
+ await proxyConn.void(auth.proxyTransferId ?? auth.transferId);
478
+ }
479
+ catch {
480
+ // Best-effort void
481
+ }
482
+ }
483
+ else if (engine != null && !isDryRun) {
484
+ try {
485
+ await engine.voidPendingSpend(auth.transferId);
486
+ }
487
+ catch {
488
+ // Best-effort void
489
+ }
490
+ }
491
+ // Audit the failure
492
+ await audit
493
+ .appendEvent({
494
+ kind: "llm_call_failed",
495
+ actor: "local",
496
+ data: {
497
+ model: auth.model,
498
+ transferId: auth.transferId,
499
+ error: error instanceof Error
500
+ ? error.message.slice(0, 200)
501
+ : error != null
502
+ ? String(error).slice(0, 200)
503
+ : "aborted",
504
+ source: "headless",
505
+ },
506
+ })
507
+ .catch(() => { });
508
+ },
509
+ async destroy() {
510
+ if (destroyed)
511
+ return;
512
+ destroyed = true;
513
+ // Void all active authorizations (engine + proxy paths)
514
+ for (const [txId, auth] of activeAuths) {
515
+ if (proxyConn != null && !isDryRun) {
516
+ try {
517
+ await proxyConn.void(auth.proxyTransferId ?? txId);
518
+ }
519
+ catch {
520
+ // Best-effort void
521
+ }
522
+ }
523
+ else if (engine != null && !isDryRun) {
524
+ try {
525
+ await engine.voidPendingSpend(txId);
526
+ }
527
+ catch {
528
+ // Best-effort void
529
+ }
530
+ }
531
+ }
532
+ activeAuths.clear();
533
+ // Flush audit
534
+ await audit.flush();
535
+ audit.release();
536
+ // Destroy engine
537
+ if (engine != null && typeof engine.destroy === "function") {
538
+ engine.destroy();
539
+ }
540
+ // Destroy proxy
541
+ if (proxyConn != null) {
542
+ proxyConn.destroy();
543
+ }
544
+ },
545
+ estimateCost(model, inputTokens, outputTokens) {
546
+ return estimateCost(model, inputTokens, outputTokens, customRates);
547
+ },
548
+ estimateInputTokens(messages) {
549
+ return estimateInputTokens(messages);
550
+ },
551
+ budgetRemaining() {
552
+ return config.budget - budgetSpent - inFlightHoldTotal;
553
+ },
554
+ };
555
+ // Safety net: clean up on process exit (use once to avoid listener accumulation)
556
+ const cleanupHandler = () => {
557
+ if (!destroyed) {
558
+ governor.destroy().catch(() => { });
559
+ }
560
+ };
561
+ process.once("beforeExit", cleanupHandler);
562
+ process.once("SIGTERM", cleanupHandler);
563
+ process.once("SIGINT", cleanupHandler);
564
+ return governor;
565
+ }
566
+ //# sourceMappingURL=headless.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless.js","sourceRoot":"","sources":["../src/headless.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,16 @@
1
1
  export { trust } from "./govern.js";
2
2
  export type { TrustOpts, TrustedClient } from "./govern.js";
3
+ export { createGovernor } from "./headless.js";
4
+ export type { Governor, Authorization, AuthorizeParams, SettleParams } from "./headless.js";
3
5
  export { loadConfig, defineConfig } from "./config.js";
4
- export type { TrustedResponse, TrustReceipt, TrustConfig, PolicyRule, FieldCondition, BoardDecision, AuditEvent, LLMClientKind, } from "./shared/types.js";
5
- export { InsufficientBalanceError, PolicyDeniedError, LedgerUnavailableError, AuditDegradedError, VaultNotInitializedError, } from "./shared/errors.js";
6
+ export type { TrustedResponse, TrustReceipt, TrustConfig, PolicyRule, FieldCondition, BoardDecision, AuditEvent, LLMClientKind, ActionKind, ActionDescriptor, GovernedActionResult, InjectionDetection, CanaryToken, SkillPermission, SkillManifest, SkillVerification, CredentialScope, CredentialEntry, CredentialAccessResult, } from "./shared/types.js";
7
+ export { detectInjection } from "./policy/injection.js";
8
+ export { generateCanary, injectCanary, detectCanaryLeak } from "./policy/canary.js";
9
+ export { validateManifest, createUnsignedManifest, hashManifest } from "./supply-chain/manifest.js";
10
+ export { generateKeyPair, signManifest, verifySignature } from "./supply-chain/sign.js";
11
+ export { checkPermissions, enforceSkillLoad } from "./supply-chain/permissions.js";
12
+ export { createVaultStore } from "./vault/store.js";
13
+ export type { VaultStore } from "./vault/store.js";
14
+ export { checkScope } from "./vault/scope.js";
15
+ export { InsufficientBalanceError, PolicyDeniedError, LedgerUnavailableError, AuditDegradedError, VaultNotInitializedError, SkillVerificationError, VaultKeyMissingError, CredentialAccessDeniedError, } from "./shared/errors.js";
6
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGvD,YAAY,EACX,eAAe,EACf,YAAY,EACZ,WAAW,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,aAAa,GACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACN,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,GACxB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG5F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGvD,YAAY,EACX,eAAe,EACf,YAAY,EACZ,WAAW,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,sBAAsB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGpF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EACN,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,GAC3B,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -3,8 +3,20 @@
3
3
  // usertrust — AI Financial Governance SDK
4
4
  // Core
5
5
  export { trust } from "./govern.js";
6
+ // Headless governance (non-SDK integrations)
7
+ export { createGovernor } from "./headless.js";
6
8
  // Config
7
9
  export { loadConfig, defineConfig } from "./config.js";
10
+ // Injection detection
11
+ export { detectInjection } from "./policy/injection.js";
12
+ export { generateCanary, injectCanary, detectCanaryLeak } from "./policy/canary.js";
13
+ // Supply Chain
14
+ export { validateManifest, createUnsignedManifest, hashManifest } from "./supply-chain/manifest.js";
15
+ export { generateKeyPair, signManifest, verifySignature } from "./supply-chain/sign.js";
16
+ export { checkPermissions, enforceSkillLoad } from "./supply-chain/permissions.js";
17
+ // Credential Vault
18
+ export { createVaultStore } from "./vault/store.js";
19
+ export { checkScope } from "./vault/scope.js";
8
20
  // Errors
9
- export { InsufficientBalanceError, PolicyDeniedError, LedgerUnavailableError, AuditDegradedError, VaultNotInitializedError, } from "./shared/errors.js";
21
+ export { InsufficientBalanceError, PolicyDeniedError, LedgerUnavailableError, AuditDegradedError, VaultNotInitializedError, SkillVerificationError, VaultKeyMissingError, CredentialAccessDeniedError, } from "./shared/errors.js";
10
22
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC,0CAA0C;AAE1C,OAAO;AACP,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAcvD,SAAS;AACT,OAAO,EACN,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,GACxB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC,0CAA0C;AAE1C,OAAO;AACP,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,6CAA6C;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAyBvD,sBAAsB;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEpF,eAAe;AACf,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEnF,mBAAmB;AACnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,SAAS;AACT,OAAO,EACN,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,GAC3B,MAAM,oBAAoB,CAAC"}