@agentguard-run/spend 0.15.6 → 0.15.8
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/README.md +61 -1
- package/dist/anchor/index.d.ts +35 -0
- package/dist/anchor/index.d.ts.map +1 -0
- package/dist/anchor/index.js +80 -0
- package/dist/anchor/index.js.map +1 -0
- package/dist/anchor/opentimestamps.d.ts +55 -0
- package/dist/anchor/opentimestamps.d.ts.map +1 -0
- package/dist/anchor/opentimestamps.js +179 -0
- package/dist/anchor/opentimestamps.js.map +1 -0
- package/dist/anchor/store.d.ts +25 -0
- package/dist/anchor/store.d.ts.map +1 -0
- package/dist/anchor/store.js +112 -0
- package/dist/anchor/store.js.map +1 -0
- package/dist/anchor/types.d.ts +84 -0
- package/dist/anchor/types.d.ts.map +1 -0
- package/dist/anchor/types.js +28 -0
- package/dist/anchor/types.js.map +1 -0
- package/dist/cli/anchor.d.ts +10 -0
- package/dist/cli/anchor.d.ts.map +1 -0
- package/dist/cli/anchor.js +126 -0
- package/dist/cli/anchor.js.map +1 -0
- package/dist/cli/colors.d.ts +1 -0
- package/dist/cli/colors.d.ts.map +1 -1
- package/dist/cli/colors.js +4 -0
- package/dist/cli/colors.js.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +15 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/sample.d.ts +43 -0
- package/dist/cli/sample.d.ts.map +1 -0
- package/dist/cli/sample.js +154 -0
- package/dist/cli/sample.js.map +1 -0
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +80 -5
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/usage.d.ts +13 -0
- package/dist/cli/usage.d.ts.map +1 -0
- package/dist/cli/usage.js +122 -0
- package/dist/cli/usage.js.map +1 -0
- package/dist/cli/verify.d.ts.map +1 -1
- package/dist/cli/verify.js +57 -0
- package/dist/cli/verify.js.map +1 -1
- package/dist/dashboard/aggregate.d.ts +2 -0
- package/dist/dashboard/aggregate.d.ts.map +1 -1
- package/dist/dashboard/aggregate.js.map +1 -1
- package/dist/decision-log.d.ts +28 -0
- package/dist/decision-log.d.ts.map +1 -1
- package/dist/decision-log.js +34 -0
- package/dist/decision-log.js.map +1 -1
- package/dist/free-tier/usage.d.ts +104 -0
- package/dist/free-tier/usage.d.ts.map +1 -0
- package/dist/free-tier/usage.js +250 -0
- package/dist/free-tier/usage.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -4
- package/dist/index.js.map +1 -1
- package/dist/samples/flows.d.ts +28 -0
- package/dist/samples/flows.d.ts.map +1 -0
- package/dist/samples/flows.js +151 -0
- package/dist/samples/flows.js.map +1 -0
- package/dist/samples/verifier-html.d.ts +29 -0
- package/dist/samples/verifier-html.d.ts.map +1 -0
- package/dist/samples/verifier-html.js +188 -0
- package/dist/samples/verifier-html.js.map +1 -0
- package/package.json +1 -1
- package/src/bindings/bindings-enforce.test.ts +97 -0
- package/src/dashboard/aggregate.ts +8 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../src/dashboard/aggregate.ts"],"names":[],"mappings":";;;AA2CA,wCAaC;AAID,sCAIC;
|
|
1
|
+
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../src/dashboard/aggregate.ts"],"names":[],"mappings":"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"}
|
package/dist/decision-log.d.ts
CHANGED
|
@@ -85,6 +85,34 @@ export declare function verifyChain(entries: SignedDecisionLogEntry[], publicKey
|
|
|
85
85
|
sequence: number;
|
|
86
86
|
reason: string;
|
|
87
87
|
}>;
|
|
88
|
+
/**
|
|
89
|
+
* Completeness / sequence-gap detection.
|
|
90
|
+
*
|
|
91
|
+
* Each signed entry carries a monotonic per-signer (per-tenant) `sequence`
|
|
92
|
+
* starting at 0. A missing sequence number between the lowest and highest
|
|
93
|
+
* observed sequence is evidence that an action MAY have been taken around the
|
|
94
|
+
* SDK and never logged (or that a logged entry was later deleted). This is a
|
|
95
|
+
* DETECTION/REPORTING signal only — it never changes spend-cap enforcement.
|
|
96
|
+
*
|
|
97
|
+
* Returns the list of missing sequence numbers (gaps) for a single signer's
|
|
98
|
+
* entries. Duplicate sequences are also surfaced (a duplicate implies the chain
|
|
99
|
+
* was rewritten). Entries from multiple signers must be grouped by
|
|
100
|
+
* `signerFingerprint` before calling this; mixed signers are treated as one
|
|
101
|
+
* logical stream only if you have already filtered them.
|
|
102
|
+
*/
|
|
103
|
+
export interface SequenceGapReport {
|
|
104
|
+
/** Sorted list of missing sequence numbers between min and max observed. */
|
|
105
|
+
missing: number[];
|
|
106
|
+
/** Sequence numbers that appeared more than once. */
|
|
107
|
+
duplicates: number[];
|
|
108
|
+
/** Lowest observed sequence, or null when there are no entries. */
|
|
109
|
+
min: number | null;
|
|
110
|
+
/** Highest observed sequence, or null when there are no entries. */
|
|
111
|
+
max: number | null;
|
|
112
|
+
/** Human-readable summary lines, e.g. "possible omitted actions: sequence gap at 4". */
|
|
113
|
+
notes: string[];
|
|
114
|
+
}
|
|
115
|
+
export declare function detectSequenceGaps(entries: ReadonlyArray<Pick<SignedDecisionLogEntry, 'sequence'>>): SequenceGapReport;
|
|
88
116
|
/**
|
|
89
117
|
* In-memory decision log store. Useful for tests, examples, and short-lived
|
|
90
118
|
* shadow deployments. Production callers will typically supply their own
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-log.d.ts","sourceRoot":"","sources":["../src/decision-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAKjB,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,QAAiB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAcpD;AAED,sDAAsD;AACtD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAST;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAGtE;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAoBlC;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,sBAAsB,EAC7B,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,sBAAsB,EAAE,EACjC,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA2CzE;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,OAAO,CAAC,OAAO,CAAgC;IAEzC,MAAM,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,SAAS,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAQ7E,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAS9G,mEAAmE;IACnE,QAAQ,IAAI,sBAAsB,EAAE;CAGrC"}
|
|
1
|
+
{"version":3,"file":"decision-log.d.ts","sourceRoot":"","sources":["../src/decision-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAKjB,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,QAAiB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAcpD;AAED,sDAAsD;AACtD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAST;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAGtE;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAoBlC;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,sBAAsB,EAC7B,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,sBAAsB,EAAE,EACjC,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA2CzE;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mEAAmE;IACnE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,oEAAoE;IACpE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,wFAAwF;IACxF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC,GAC/D,iBAAiB,CA0BnB;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,OAAO,CAAC,OAAO,CAAgC;IAEzC,MAAM,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,SAAS,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAQ7E,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAS9G,mEAAmE;IACnE,QAAQ,IAAI,sBAAsB,EAAE;CAGrC"}
|
package/dist/decision-log.js
CHANGED
|
@@ -65,6 +65,7 @@ exports.computeSignerFingerprint = computeSignerFingerprint;
|
|
|
65
65
|
exports.signDecision = signDecision;
|
|
66
66
|
exports.verifyEntry = verifyEntry;
|
|
67
67
|
exports.verifyChain = verifyChain;
|
|
68
|
+
exports.detectSequenceGaps = detectSequenceGaps;
|
|
68
69
|
const crypto_1 = require("crypto");
|
|
69
70
|
const ed = __importStar(require("@noble/ed25519"));
|
|
70
71
|
// @noble/ed25519 v2.3+ has sha512Async wired internally. The signAsync /
|
|
@@ -230,6 +231,39 @@ async function verifyChain(entries, publicKey) {
|
|
|
230
231
|
}
|
|
231
232
|
return { ok: true };
|
|
232
233
|
}
|
|
234
|
+
function detectSequenceGaps(entries) {
|
|
235
|
+
if (entries.length === 0) {
|
|
236
|
+
return { missing: [], duplicates: [], min: null, max: null, notes: [] };
|
|
237
|
+
}
|
|
238
|
+
const counts = new Map();
|
|
239
|
+
let min = Infinity;
|
|
240
|
+
let max = -Infinity;
|
|
241
|
+
for (const entry of entries) {
|
|
242
|
+
const seq = entry.sequence;
|
|
243
|
+
if (!Number.isSafeInteger(seq) || seq < 0)
|
|
244
|
+
continue;
|
|
245
|
+
counts.set(seq, (counts.get(seq) ?? 0) + 1);
|
|
246
|
+
if (seq < min)
|
|
247
|
+
min = seq;
|
|
248
|
+
if (seq > max)
|
|
249
|
+
max = seq;
|
|
250
|
+
}
|
|
251
|
+
if (!Number.isFinite(min) || !Number.isFinite(max)) {
|
|
252
|
+
return { missing: [], duplicates: [], min: null, max: null, notes: [] };
|
|
253
|
+
}
|
|
254
|
+
const missing = [];
|
|
255
|
+
for (let s = min; s <= max; s++) {
|
|
256
|
+
if (!counts.has(s))
|
|
257
|
+
missing.push(s);
|
|
258
|
+
}
|
|
259
|
+
const duplicates = [...counts.entries()].filter(([, n]) => n > 1).map(([s]) => s).sort((a, b) => a - b);
|
|
260
|
+
const notes = [];
|
|
261
|
+
for (const s of missing)
|
|
262
|
+
notes.push(`possible omitted actions: sequence gap at ${s}`);
|
|
263
|
+
for (const s of duplicates)
|
|
264
|
+
notes.push(`possible chain rewrite: duplicate sequence ${s}`);
|
|
265
|
+
return { missing, duplicates, min, max, notes };
|
|
266
|
+
}
|
|
233
267
|
/**
|
|
234
268
|
* In-memory decision log store. Useful for tests, examples, and short-lived
|
|
235
269
|
* shadow deployments. Production callers will typically supply their own
|
package/dist/decision-log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-log.js","sourceRoot":"","sources":["../src/decision-log.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBH,sCAcC;AAGD,8BAEC;AAMD,4CAeC;AAMD,4DAGC;AAQD,oCA2BC;AAQD,kCA0BC;AAWD,kCA8CC;
|
|
1
|
+
{"version":3,"file":"decision-log.js","sourceRoot":"","sources":["../src/decision-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentGuard® — Free-tier CALL QUOTA metering (local-only).
|
|
3
|
+
*
|
|
4
|
+
* This module meters how many ENFORCEMENT CALLS AgentGuard has metered for a
|
|
5
|
+
* tenant in the current calendar month, purely from the local signed decision
|
|
6
|
+
* store (~/.agentguard/<tenant>/decisions.ndjson). It powers:
|
|
7
|
+
* - the "Free tier: used / limit" usage bar in `agentguard serve`
|
|
8
|
+
* - the `agentguard usage` CLI summary
|
|
9
|
+
* - a one-time, first-run "surprise generosity" top-up to the free call quota
|
|
10
|
+
*
|
|
11
|
+
* ────────────────────────────────────────────────────────────────────────────
|
|
12
|
+
* TWO HARD ARCHITECTURAL RULES — DO NOT VIOLATE:
|
|
13
|
+
*
|
|
14
|
+
* RULE 1 — The spend cap is SACRED. Nothing here reads, mutates, resets, or
|
|
15
|
+
* loosens the user's SPEND CAP or the enforcement path (spend-guard.ts /
|
|
16
|
+
* policy caps). The "free call quota" is AgentGuard's own generosity metric
|
|
17
|
+
* (how many free enforcement calls we give before a paid tier would apply) and
|
|
18
|
+
* is a COMPLETELY SEPARATE concept from the customer's money guardrail. When
|
|
19
|
+
* an agent hits its spend cap it still hard-stops, deterministically. A bonus
|
|
20
|
+
* here never changes a single cent of enforcement behavior.
|
|
21
|
+
*
|
|
22
|
+
* RULE 2 — ZERO data plane. No network calls. Everything is derived in-process
|
|
23
|
+
* from the local ledger and a small local state file. No user data, keys, or
|
|
24
|
+
* call contents leave the machine.
|
|
25
|
+
* ────────────────────────────────────────────────────────────────────────────
|
|
26
|
+
*
|
|
27
|
+
* Patent notice: Protected by U.S. patent-pending technology
|
|
28
|
+
* (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
|
|
29
|
+
* 64/071,781; 64/071,789).
|
|
30
|
+
*/
|
|
31
|
+
/** Site-stated free tier: "under 10,000 enforcement calls/month, no credit card". */
|
|
32
|
+
export declare const DEFAULT_FREE_LIMIT = 10000;
|
|
33
|
+
/** First-run generosity fires once a tenant crosses this fraction of the base quota. */
|
|
34
|
+
export declare const BONUS_THRESHOLD_PCT = 50;
|
|
35
|
+
export interface FreeTierOptions {
|
|
36
|
+
/** Base directory. Defaults to AGENTGUARD_HOME or ~/.agentguard. */
|
|
37
|
+
home?: string;
|
|
38
|
+
/** Base monthly free call quota. Defaults to AGENTGUARD_FREE_LIMIT env or 10,000. */
|
|
39
|
+
baseLimit?: number;
|
|
40
|
+
/** Size of the one-time first-run bonus. Defaults to AGENTGUARD_FREE_BONUS env or baseLimit. */
|
|
41
|
+
bonusCalls?: number;
|
|
42
|
+
/** Override "now" for deterministic tests. */
|
|
43
|
+
now?: Date;
|
|
44
|
+
}
|
|
45
|
+
/** Persisted, once-per-tenant free-tier state (local only). */
|
|
46
|
+
export interface FreeTierState {
|
|
47
|
+
/** True once the first-run bonus has EVER been granted for this tenant. */
|
|
48
|
+
bonusEverGranted: boolean;
|
|
49
|
+
/** Size of the granted bonus in free calls (0 if never granted). */
|
|
50
|
+
bonusCalls: number;
|
|
51
|
+
/** ISO timestamp the bonus was granted. */
|
|
52
|
+
grantedAt?: string;
|
|
53
|
+
/** Calendar month (YYYY-MM) the bonus was granted in, for display only. */
|
|
54
|
+
grantedMonth?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface MonthlyUsage {
|
|
57
|
+
tenant: string;
|
|
58
|
+
/** Enforcement calls metered for this tenant this calendar month. */
|
|
59
|
+
used: number;
|
|
60
|
+
/** Base free quota (before any bonus). */
|
|
61
|
+
baseLimit: number;
|
|
62
|
+
/** One-time bonus calls already granted to this tenant (0 if none). */
|
|
63
|
+
bonusCalls: number;
|
|
64
|
+
/** Effective free quota this month = baseLimit + bonusCalls. */
|
|
65
|
+
limit: number;
|
|
66
|
+
/** used / limit as a whole-ish percent (one decimal), clamped to >= 0. */
|
|
67
|
+
pctUsed: number;
|
|
68
|
+
/** Calls remaining in the free quota (never negative). */
|
|
69
|
+
remaining: number;
|
|
70
|
+
/** ISO timestamp when the monthly counter resets (first instant of next month, UTC). */
|
|
71
|
+
resetsAt: string;
|
|
72
|
+
/** Whether the first-run bonus has ever been granted. */
|
|
73
|
+
bonusEverGranted: boolean;
|
|
74
|
+
}
|
|
75
|
+
/** Read the local free-tier state file. Missing/corrupt → clean default. */
|
|
76
|
+
export declare function readFreeTierState(tenant: string, options?: FreeTierOptions): FreeTierState;
|
|
77
|
+
/**
|
|
78
|
+
* Free-tier usage for a tenant this calendar month, from the LOCAL ledger only.
|
|
79
|
+
* The effective `limit` includes any one-time bonus already granted.
|
|
80
|
+
*/
|
|
81
|
+
export declare function getMonthlyUsage(tenant: string, options?: FreeTierOptions): MonthlyUsage;
|
|
82
|
+
export interface BonusResult {
|
|
83
|
+
/** True only when THIS call granted the bonus (the transition edge). */
|
|
84
|
+
granted: boolean;
|
|
85
|
+
/** Size of the bonus that was granted this call (0 if none). */
|
|
86
|
+
bonusCalls: number;
|
|
87
|
+
/** Usage AFTER any grant applied — safe to render directly. */
|
|
88
|
+
usage: MonthlyUsage;
|
|
89
|
+
/** Friendly, quota-scoped message when a bonus was just granted. */
|
|
90
|
+
message?: string;
|
|
91
|
+
}
|
|
92
|
+
/** Copy that must make crystal clear this is the FREE CALL QUOTA, not a spend cap. */
|
|
93
|
+
export declare function bonusMessage(usage: MonthlyUsage): string;
|
|
94
|
+
/**
|
|
95
|
+
* First-run "surprise generosity" — grants a ONE-TIME top-up to the FREE CALL
|
|
96
|
+
* QUOTA (never the spend cap) the first time a tenant crosses ~50% of their
|
|
97
|
+
* base quota (or would hit the limit). Idempotent: once `bonusEverGranted` is
|
|
98
|
+
* recorded, this can never fire again for the tenant.
|
|
99
|
+
*
|
|
100
|
+
* Returns the (possibly updated) usage plus whether this call granted the bonus.
|
|
101
|
+
* Enforcement / spend behavior is never touched.
|
|
102
|
+
*/
|
|
103
|
+
export declare function maybeGrantFirstTimeBonus(tenant: string, options?: FreeTierOptions): BonusResult;
|
|
104
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/free-tier/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAOH,qFAAqF;AACrF,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAEzC,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gGAAgG;IAChG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,+DAA+D;AAC/D,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AA6CD,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,aAAa,CAa9F;AAkDD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,YAAY,CAsB3F;AAED,MAAM,WAAW,WAAW;IAC1B,wEAAwE;IACxE,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,KAAK,EAAE,YAAY,CAAC;IACpB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAOxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,WAAW,CA4BnG"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AgentGuard® — Free-tier CALL QUOTA metering (local-only).
|
|
4
|
+
*
|
|
5
|
+
* This module meters how many ENFORCEMENT CALLS AgentGuard has metered for a
|
|
6
|
+
* tenant in the current calendar month, purely from the local signed decision
|
|
7
|
+
* store (~/.agentguard/<tenant>/decisions.ndjson). It powers:
|
|
8
|
+
* - the "Free tier: used / limit" usage bar in `agentguard serve`
|
|
9
|
+
* - the `agentguard usage` CLI summary
|
|
10
|
+
* - a one-time, first-run "surprise generosity" top-up to the free call quota
|
|
11
|
+
*
|
|
12
|
+
* ────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
* TWO HARD ARCHITECTURAL RULES — DO NOT VIOLATE:
|
|
14
|
+
*
|
|
15
|
+
* RULE 1 — The spend cap is SACRED. Nothing here reads, mutates, resets, or
|
|
16
|
+
* loosens the user's SPEND CAP or the enforcement path (spend-guard.ts /
|
|
17
|
+
* policy caps). The "free call quota" is AgentGuard's own generosity metric
|
|
18
|
+
* (how many free enforcement calls we give before a paid tier would apply) and
|
|
19
|
+
* is a COMPLETELY SEPARATE concept from the customer's money guardrail. When
|
|
20
|
+
* an agent hits its spend cap it still hard-stops, deterministically. A bonus
|
|
21
|
+
* here never changes a single cent of enforcement behavior.
|
|
22
|
+
*
|
|
23
|
+
* RULE 2 — ZERO data plane. No network calls. Everything is derived in-process
|
|
24
|
+
* from the local ledger and a small local state file. No user data, keys, or
|
|
25
|
+
* call contents leave the machine.
|
|
26
|
+
* ────────────────────────────────────────────────────────────────────────────
|
|
27
|
+
*
|
|
28
|
+
* Patent notice: Protected by U.S. patent-pending technology
|
|
29
|
+
* (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626;
|
|
30
|
+
* 64/071,781; 64/071,789).
|
|
31
|
+
*/
|
|
32
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
33
|
+
if (k2 === undefined) k2 = k;
|
|
34
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
35
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
36
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
37
|
+
}
|
|
38
|
+
Object.defineProperty(o, k2, desc);
|
|
39
|
+
}) : (function(o, m, k, k2) {
|
|
40
|
+
if (k2 === undefined) k2 = k;
|
|
41
|
+
o[k2] = m[k];
|
|
42
|
+
}));
|
|
43
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
44
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
45
|
+
}) : function(o, v) {
|
|
46
|
+
o["default"] = v;
|
|
47
|
+
});
|
|
48
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
49
|
+
var ownKeys = function(o) {
|
|
50
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
51
|
+
var ar = [];
|
|
52
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
53
|
+
return ar;
|
|
54
|
+
};
|
|
55
|
+
return ownKeys(o);
|
|
56
|
+
};
|
|
57
|
+
return function (mod) {
|
|
58
|
+
if (mod && mod.__esModule) return mod;
|
|
59
|
+
var result = {};
|
|
60
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
61
|
+
__setModuleDefault(result, mod);
|
|
62
|
+
return result;
|
|
63
|
+
};
|
|
64
|
+
})();
|
|
65
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
|
+
exports.BONUS_THRESHOLD_PCT = exports.DEFAULT_FREE_LIMIT = void 0;
|
|
67
|
+
exports.readFreeTierState = readFreeTierState;
|
|
68
|
+
exports.getMonthlyUsage = getMonthlyUsage;
|
|
69
|
+
exports.bonusMessage = bonusMessage;
|
|
70
|
+
exports.maybeGrantFirstTimeBonus = maybeGrantFirstTimeBonus;
|
|
71
|
+
const fs = __importStar(require("fs"));
|
|
72
|
+
const os = __importStar(require("os"));
|
|
73
|
+
const path = __importStar(require("path"));
|
|
74
|
+
/** Site-stated free tier: "under 10,000 enforcement calls/month, no credit card". */
|
|
75
|
+
exports.DEFAULT_FREE_LIMIT = 10_000;
|
|
76
|
+
/** First-run generosity fires once a tenant crosses this fraction of the base quota. */
|
|
77
|
+
exports.BONUS_THRESHOLD_PCT = 50;
|
|
78
|
+
function defaultHome(options) {
|
|
79
|
+
return options.home ?? process.env.AGENTGUARD_HOME ?? path.join(os.homedir(), '.agentguard');
|
|
80
|
+
}
|
|
81
|
+
function cleanTenant(tenant) {
|
|
82
|
+
return String(tenant || 'default').replace(/[^A-Za-z0-9._-]/g, '_') || 'default';
|
|
83
|
+
}
|
|
84
|
+
function resolveBaseLimit(options) {
|
|
85
|
+
if (typeof options.baseLimit === 'number' && options.baseLimit > 0)
|
|
86
|
+
return Math.floor(options.baseLimit);
|
|
87
|
+
const env = process.env.AGENTGUARD_FREE_LIMIT;
|
|
88
|
+
if (env) {
|
|
89
|
+
const parsed = parseInt(env, 10);
|
|
90
|
+
if (Number.isFinite(parsed) && parsed > 0)
|
|
91
|
+
return parsed;
|
|
92
|
+
}
|
|
93
|
+
return exports.DEFAULT_FREE_LIMIT;
|
|
94
|
+
}
|
|
95
|
+
function resolveBonusCalls(options, baseLimit) {
|
|
96
|
+
if (typeof options.bonusCalls === 'number' && options.bonusCalls > 0)
|
|
97
|
+
return Math.floor(options.bonusCalls);
|
|
98
|
+
const env = process.env.AGENTGUARD_FREE_BONUS;
|
|
99
|
+
if (env) {
|
|
100
|
+
const parsed = parseInt(env, 10);
|
|
101
|
+
if (Number.isFinite(parsed) && parsed > 0)
|
|
102
|
+
return parsed;
|
|
103
|
+
}
|
|
104
|
+
// Default generosity: a whole extra month of free quota, on us.
|
|
105
|
+
return baseLimit;
|
|
106
|
+
}
|
|
107
|
+
/** YYYY-MM for a date, in UTC (matches the ISO 8601 decision timestamps). */
|
|
108
|
+
function monthKey(now) {
|
|
109
|
+
return now.toISOString().slice(0, 7);
|
|
110
|
+
}
|
|
111
|
+
/** First instant of the following calendar month, UTC ISO. */
|
|
112
|
+
function nextMonthStart(now) {
|
|
113
|
+
return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth() + 1, 1)).toISOString();
|
|
114
|
+
}
|
|
115
|
+
function stateFilePath(tenant, options) {
|
|
116
|
+
return path.join(defaultHome(options), cleanTenant(tenant), 'free-tier.json');
|
|
117
|
+
}
|
|
118
|
+
/** Read the local free-tier state file. Missing/corrupt → clean default. */
|
|
119
|
+
function readFreeTierState(tenant, options = {}) {
|
|
120
|
+
try {
|
|
121
|
+
const raw = fs.readFileSync(stateFilePath(tenant, options), 'utf-8');
|
|
122
|
+
const parsed = JSON.parse(raw);
|
|
123
|
+
return {
|
|
124
|
+
bonusEverGranted: Boolean(parsed.bonusEverGranted),
|
|
125
|
+
bonusCalls: typeof parsed.bonusCalls === 'number' && parsed.bonusCalls > 0 ? parsed.bonusCalls : 0,
|
|
126
|
+
grantedAt: parsed.grantedAt,
|
|
127
|
+
grantedMonth: parsed.grantedMonth,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return { bonusEverGranted: false, bonusCalls: 0 };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function writeFreeTierState(tenant, options, state) {
|
|
135
|
+
const file = stateFilePath(tenant, options);
|
|
136
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
137
|
+
fs.writeFileSync(file, JSON.stringify(state, null, 2) + '\n');
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Count ENFORCEMENT CALLS metered for a tenant in the current calendar month.
|
|
141
|
+
*
|
|
142
|
+
* Only real provider-enforcement decisions count (entryType 'decision' or
|
|
143
|
+
* legacy undefined) — settlement / outcome / governance ledger entries are NOT
|
|
144
|
+
* enforcement calls and are excluded, mirroring the CFO dashboard's call count.
|
|
145
|
+
*/
|
|
146
|
+
function countMonthlyEnforcementCalls(entries, now) {
|
|
147
|
+
const mk = monthKey(now);
|
|
148
|
+
let used = 0;
|
|
149
|
+
for (const entry of entries) {
|
|
150
|
+
const d = entry.decision;
|
|
151
|
+
if (!d)
|
|
152
|
+
continue;
|
|
153
|
+
const kind = d.entryType ?? 'decision';
|
|
154
|
+
if (kind !== 'decision')
|
|
155
|
+
continue;
|
|
156
|
+
const ts = d.timestamp;
|
|
157
|
+
if (typeof ts === 'string' && ts.slice(0, 7) === mk)
|
|
158
|
+
used += 1;
|
|
159
|
+
}
|
|
160
|
+
return used;
|
|
161
|
+
}
|
|
162
|
+
/** Read a tenant's ledger from the local ndjson store. Returns [] if absent. */
|
|
163
|
+
function readLedger(tenant, options) {
|
|
164
|
+
const file = path.join(defaultHome(options), cleanTenant(tenant), 'decisions.ndjson');
|
|
165
|
+
let content;
|
|
166
|
+
try {
|
|
167
|
+
content = fs.readFileSync(file, 'utf-8');
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return [];
|
|
171
|
+
}
|
|
172
|
+
const out = [];
|
|
173
|
+
for (const line of content.split('\n')) {
|
|
174
|
+
if (!line.trim())
|
|
175
|
+
continue;
|
|
176
|
+
try {
|
|
177
|
+
out.push(JSON.parse(line));
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
// skip malformed line
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return out;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Free-tier usage for a tenant this calendar month, from the LOCAL ledger only.
|
|
187
|
+
* The effective `limit` includes any one-time bonus already granted.
|
|
188
|
+
*/
|
|
189
|
+
function getMonthlyUsage(tenant, options = {}) {
|
|
190
|
+
const now = options.now ?? new Date();
|
|
191
|
+
const baseLimit = resolveBaseLimit(options);
|
|
192
|
+
const state = readFreeTierState(tenant, options);
|
|
193
|
+
const bonusCalls = state.bonusEverGranted ? state.bonusCalls : 0;
|
|
194
|
+
const limit = baseLimit + bonusCalls;
|
|
195
|
+
const used = countMonthlyEnforcementCalls(readLedger(tenant, options), now);
|
|
196
|
+
const pctUsed = limit > 0 ? Math.max(0, Math.round((used / limit) * 1000) / 10) : 0;
|
|
197
|
+
const remaining = Math.max(0, limit - used);
|
|
198
|
+
return {
|
|
199
|
+
tenant: cleanTenant(tenant),
|
|
200
|
+
used,
|
|
201
|
+
baseLimit,
|
|
202
|
+
bonusCalls,
|
|
203
|
+
limit,
|
|
204
|
+
pctUsed,
|
|
205
|
+
remaining,
|
|
206
|
+
resetsAt: nextMonthStart(now),
|
|
207
|
+
bonusEverGranted: state.bonusEverGranted,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
/** Copy that must make crystal clear this is the FREE CALL QUOTA, not a spend cap. */
|
|
211
|
+
function bonusMessage(usage) {
|
|
212
|
+
return (`First time hitting your limit? Here's a bonus month on us — your free enforcement-call ` +
|
|
213
|
+
`quota is topped up by ${usage.bonusCalls.toLocaleString()} calls (now ` +
|
|
214
|
+
`${usage.limit.toLocaleString()} this month). This is AgentGuard's free-tier call quota, ` +
|
|
215
|
+
`NOT your spend cap: your spend caps are your hard money guardrail and are unchanged.`);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* First-run "surprise generosity" — grants a ONE-TIME top-up to the FREE CALL
|
|
219
|
+
* QUOTA (never the spend cap) the first time a tenant crosses ~50% of their
|
|
220
|
+
* base quota (or would hit the limit). Idempotent: once `bonusEverGranted` is
|
|
221
|
+
* recorded, this can never fire again for the tenant.
|
|
222
|
+
*
|
|
223
|
+
* Returns the (possibly updated) usage plus whether this call granted the bonus.
|
|
224
|
+
* Enforcement / spend behavior is never touched.
|
|
225
|
+
*/
|
|
226
|
+
function maybeGrantFirstTimeBonus(tenant, options = {}) {
|
|
227
|
+
const state = readFreeTierState(tenant, options);
|
|
228
|
+
// Already granted once → never again. Just report current usage.
|
|
229
|
+
if (state.bonusEverGranted) {
|
|
230
|
+
return { granted: false, bonusCalls: state.bonusCalls, usage: getMonthlyUsage(tenant, options) };
|
|
231
|
+
}
|
|
232
|
+
const now = options.now ?? new Date();
|
|
233
|
+
const baseLimit = resolveBaseLimit(options);
|
|
234
|
+
const used = countMonthlyEnforcementCalls(readLedger(tenant, options), now);
|
|
235
|
+
const halfway = used >= Math.ceil((baseLimit * exports.BONUS_THRESHOLD_PCT) / 100);
|
|
236
|
+
const atLimit = used >= baseLimit;
|
|
237
|
+
if (!halfway && !atLimit) {
|
|
238
|
+
return { granted: false, bonusCalls: 0, usage: getMonthlyUsage(tenant, options) };
|
|
239
|
+
}
|
|
240
|
+
const bonusCalls = resolveBonusCalls(options, baseLimit);
|
|
241
|
+
writeFreeTierState(tenant, options, {
|
|
242
|
+
bonusEverGranted: true,
|
|
243
|
+
bonusCalls,
|
|
244
|
+
grantedAt: now.toISOString(),
|
|
245
|
+
grantedMonth: monthKey(now),
|
|
246
|
+
});
|
|
247
|
+
const usage = getMonthlyUsage(tenant, options);
|
|
248
|
+
return { granted: true, bonusCalls, usage, message: bonusMessage(usage) };
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/free-tier/usage.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { workflow as runWorkflow } from './workflow/context';
|
|
|
9
9
|
export type { SpendAction, SpendWindow, Provider, EnforcementMode, CapabilityTier, SpendCap, SpendScope, SpendPolicy, CallContext, SpendDecision, SignedDecisionLogEntry, SpendStore, DecisionLogStore, } from './types';
|
|
10
10
|
export { getModelCost, setCostOverride, clearCostOverrides, computeCallCents, inferProvider, listCostOverrides, loadPersistedCostOverrides, persistCostOverrides, knownModelCosts, type ModelCost, } from './cost-table';
|
|
11
11
|
export { evaluatePolicy, buildScopeKey, adjustPolicyWindowSpend, enforcePolicyLicenseGates, findCustomKeywordWatchlists, BUILT_IN_KEYWORD_WATCHLISTS } from './policy';
|
|
12
|
-
export { canonicalJson, sha256Hex, computeEntryHash, computeSignerFingerprint, signDecision, verifyEntry, verifyChain, GENESIS_PREVIOUS_HASH, InMemoryDecisionLogStore, } from './decision-log';
|
|
12
|
+
export { canonicalJson, sha256Hex, computeEntryHash, computeSignerFingerprint, signDecision, verifyEntry, verifyChain, detectSequenceGaps, GENESIS_PREVIOUS_HASH, InMemoryDecisionLogStore, type SequenceGapReport, } from './decision-log';
|
|
13
13
|
export { InMemorySpendStore } from './store-memory';
|
|
14
14
|
export { NdjsonDecisionLogStore, type NdjsonStoreOptions } from './adapters/ndjson-store';
|
|
15
15
|
export { AgentGuardLicenseRequiredError, validateLicenseKey, validateAndRegisterLicense, readConfiguredLicenseKey, writeConfiguredLicenseKey, clearConfiguredLicenseKey, licenseKeyFingerprint, type AgentGuardLicenseStatus, type AgentGuardLicenseFeatures, type AgentGuardTier, } from './license';
|
|
@@ -34,7 +34,7 @@ export { withSpendGuardAnthropic, type AnthropicBindingOptions } from './binding
|
|
|
34
34
|
export { withSpendGuardBedrock, type BedrockBindingOptions } from './bindings/bedrock';
|
|
35
35
|
export { recommend, defaultKey, type ModelRouteRecommendation, type RecommendOptions } from './router';
|
|
36
36
|
export { DEFAULT_LOCALE, SUPPORTED_LOCALES, TRANSLATIONS, type SupportedLocale, resolveLocale, t, formatBlockedTrace, type BlockedTraceArgs, } from './i18n';
|
|
37
|
-
export declare const AGENTGUARD_SPEND_VERSION = "0.15.
|
|
37
|
+
export declare const AGENTGUARD_SPEND_VERSION = "0.15.8";
|
|
38
38
|
export declare const agentguard: {
|
|
39
39
|
workflow: typeof runWorkflow;
|
|
40
40
|
};
|
|
@@ -47,5 +47,9 @@ export * from './byo';
|
|
|
47
47
|
export * from './frameworks';
|
|
48
48
|
export * from './operating-pack';
|
|
49
49
|
export { aggregateLedger, classifyOrigin, decisionCents, centsToUsd, type CfoDashboard, type BucketSpend, type TokenOrigin, } from './dashboard/aggregate';
|
|
50
|
+
export { getMonthlyUsage, maybeGrantFirstTimeBonus, readFreeTierState, bonusMessage, DEFAULT_FREE_LIMIT, BONUS_THRESHOLD_PCT, type FreeTierOptions, type FreeTierState, type MonthlyUsage, type BonusResult, } from './free-tier/usage';
|
|
51
|
+
export { createAnchor, createAnchorFromEnv, chainHeadDigestHex, merkleRootHex, OpenTimestampsAnchor, DEFAULT_OTS_CALENDARS, writeAnchorProof, readAnchorIndex, readAnchorIndexAt, findAnchorForHead, anchorIndexPath, anchorProofPath, anchorDir, type AnchorProof, type AnchorStatus, type AnchorVerification, type TimestampAnchor, type OtsSubmit, type OpenTimestampsAnchorOptions, } from './anchor';
|
|
52
|
+
export { buildSampleReceipt, isSampleFlow, SAMPLE_FLOWS, type SampleFlow, type SampleReceiptSpec, } from './samples/flows';
|
|
53
|
+
export { buildSampleVerifierHtml, type SampleVerifierData } from './samples/verifier-html';
|
|
50
54
|
export { workloadProvenance, formatLineage, type WorkloadProvenance, type WorkloadProvenanceReport, type ModelUse, type ModelSwap, } from './receipts/portability';
|
|
51
55
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG7D,YAAY,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,eAAe,EACf,cAAc,EACd,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,EACf,KAAK,SAAS,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAGvK,OAAO,EACL,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,wBAAwB,EACxB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|