@agent-finops/core 0.9.6 → 0.9.7
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 +3 -3
- package/dist/actionPlanner.js +4 -1
- package/dist/actionVerification.d.ts +54 -54
- package/dist/activitySnapshot.d.ts +57 -57
- package/dist/agentEconomicsReceipt.d.ts +62 -62
- package/dist/analyze.js +59 -18
- package/dist/contextHealth.js +15 -4
- package/dist/cutList.d.ts +23 -0
- package/dist/cutList.js +268 -11
- package/dist/deadContext.js +10 -3
- package/dist/insights.js +41 -23
- package/dist/planMath.js +25 -4
- package/dist/projectIndexStore.d.ts +8 -8
- package/dist/qualitativeIndexCache.d.ts +8 -8
- package/dist/toolInvocations.js +9 -1
- package/dist/untrustedLabel.d.ts +70 -0
- package/dist/untrustedLabel.js +161 -0
- package/package.json +1 -1
|
@@ -8,8 +8,8 @@ declare const financialEvidenceWithAmountSchema: z.ZodEnum<{
|
|
|
8
8
|
}>;
|
|
9
9
|
export declare const receiptModeValues: readonly ["local", "connected", "mixed", "sample"];
|
|
10
10
|
export declare const receiptModeSchema: z.ZodEnum<{
|
|
11
|
-
mixed: "mixed";
|
|
12
11
|
local: "local";
|
|
12
|
+
mixed: "mixed";
|
|
13
13
|
sample: "sample";
|
|
14
14
|
connected: "connected";
|
|
15
15
|
}>;
|
|
@@ -26,8 +26,8 @@ export type ReceiptSourceKind = z.infer<typeof receiptSourceKindSchema>;
|
|
|
26
26
|
export declare const receiptProvenanceOriginValues: readonly ["provider_reported", "locally_observed", "user_declared", "sample"];
|
|
27
27
|
export declare const receiptProvenanceOriginSchema: z.ZodEnum<{
|
|
28
28
|
provider_reported: "provider_reported";
|
|
29
|
-
sample: "sample";
|
|
30
29
|
user_declared: "user_declared";
|
|
30
|
+
sample: "sample";
|
|
31
31
|
locally_observed: "locally_observed";
|
|
32
32
|
}>;
|
|
33
33
|
export type ReceiptProvenanceOrigin = z.infer<typeof receiptProvenanceOriginSchema>;
|
|
@@ -40,9 +40,9 @@ export declare const receiptTransformationSchema: z.ZodEnum<{
|
|
|
40
40
|
export type ReceiptTransformation = z.infer<typeof receiptTransformationSchema>;
|
|
41
41
|
export declare const receiptAccountingBasisValues: readonly ["provider_billed", "api_equivalent", "user_declared"];
|
|
42
42
|
export declare const receiptAccountingBasisSchema: z.ZodEnum<{
|
|
43
|
-
api_equivalent: "api_equivalent";
|
|
44
|
-
provider_billed: "provider_billed";
|
|
45
43
|
user_declared: "user_declared";
|
|
44
|
+
provider_billed: "provider_billed";
|
|
45
|
+
api_equivalent: "api_equivalent";
|
|
46
46
|
}>;
|
|
47
47
|
export type ReceiptAccountingBasis = z.infer<typeof receiptAccountingBasisSchema>;
|
|
48
48
|
export declare const receiptMappingGapCodeValues: readonly ["cost_unsplit", "cost_unpriced", "model_unmapped", "provider_unmapped", "source_record_unmapped"];
|
|
@@ -57,9 +57,9 @@ export type ReceiptMappingGapCode = z.infer<typeof receiptMappingGapCodeSchema>;
|
|
|
57
57
|
export declare const receiptFreshnessSchema: z.ZodPipe<z.ZodObject<{
|
|
58
58
|
status: z.ZodEnum<{
|
|
59
59
|
error: "error";
|
|
60
|
-
not_checked: "not_checked";
|
|
61
|
-
stale: "stale";
|
|
62
60
|
fresh: "fresh";
|
|
61
|
+
stale: "stale";
|
|
62
|
+
not_checked: "not_checked";
|
|
63
63
|
}>;
|
|
64
64
|
checkedAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
65
65
|
latestEvidenceAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
@@ -68,9 +68,9 @@ export declare const receiptFreshnessSchema: z.ZodPipe<z.ZodObject<{
|
|
|
68
68
|
errorCode?: string | undefined;
|
|
69
69
|
latestEvidenceAt?: string | undefined;
|
|
70
70
|
checkedAt?: string | undefined;
|
|
71
|
-
status: "error" | "
|
|
71
|
+
status: "error" | "fresh" | "stale" | "not_checked";
|
|
72
72
|
}, {
|
|
73
|
-
status: "error" | "
|
|
73
|
+
status: "error" | "fresh" | "stale" | "not_checked";
|
|
74
74
|
checkedAt?: string | undefined;
|
|
75
75
|
latestEvidenceAt?: string | undefined;
|
|
76
76
|
errorCode?: string | undefined;
|
|
@@ -95,9 +95,9 @@ export declare const receiptSourceSchema: z.ZodObject<{
|
|
|
95
95
|
freshness: z.ZodPipe<z.ZodObject<{
|
|
96
96
|
status: z.ZodEnum<{
|
|
97
97
|
error: "error";
|
|
98
|
-
not_checked: "not_checked";
|
|
99
|
-
stale: "stale";
|
|
100
98
|
fresh: "fresh";
|
|
99
|
+
stale: "stale";
|
|
100
|
+
not_checked: "not_checked";
|
|
101
101
|
}>;
|
|
102
102
|
checkedAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
103
103
|
latestEvidenceAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
@@ -106,9 +106,9 @@ export declare const receiptSourceSchema: z.ZodObject<{
|
|
|
106
106
|
errorCode?: string | undefined;
|
|
107
107
|
latestEvidenceAt?: string | undefined;
|
|
108
108
|
checkedAt?: string | undefined;
|
|
109
|
-
status: "error" | "
|
|
109
|
+
status: "error" | "fresh" | "stale" | "not_checked";
|
|
110
110
|
}, {
|
|
111
|
-
status: "error" | "
|
|
111
|
+
status: "error" | "fresh" | "stale" | "not_checked";
|
|
112
112
|
checkedAt?: string | undefined;
|
|
113
113
|
latestEvidenceAt?: string | undefined;
|
|
114
114
|
errorCode?: string | undefined;
|
|
@@ -125,8 +125,8 @@ export declare function createReceiptSourceRecordReference(sourceId: string, sou
|
|
|
125
125
|
export declare const receiptProvenanceSchema: z.ZodObject<{
|
|
126
126
|
origin: z.ZodEnum<{
|
|
127
127
|
provider_reported: "provider_reported";
|
|
128
|
-
sample: "sample";
|
|
129
128
|
user_declared: "user_declared";
|
|
129
|
+
sample: "sample";
|
|
130
130
|
locally_observed: "locally_observed";
|
|
131
131
|
}>;
|
|
132
132
|
transformations: z.ZodArray<z.ZodEnum<{
|
|
@@ -147,9 +147,9 @@ export declare const receiptTokenUsageLineSchema: z.ZodObject<{
|
|
|
147
147
|
sourceId: z.ZodString;
|
|
148
148
|
observedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
149
149
|
granularity: z.ZodEnum<{
|
|
150
|
+
session: "session";
|
|
150
151
|
call: "call";
|
|
151
152
|
invocation: "invocation";
|
|
152
|
-
session: "session";
|
|
153
153
|
daily_aggregate: "daily_aggregate";
|
|
154
154
|
usage_bucket: "usage_bucket";
|
|
155
155
|
billing_bucket: "billing_bucket";
|
|
@@ -159,8 +159,8 @@ export declare const receiptTokenUsageLineSchema: z.ZodObject<{
|
|
|
159
159
|
provenance: z.ZodObject<{
|
|
160
160
|
origin: z.ZodEnum<{
|
|
161
161
|
provider_reported: "provider_reported";
|
|
162
|
-
sample: "sample";
|
|
163
162
|
user_declared: "user_declared";
|
|
163
|
+
sample: "sample";
|
|
164
164
|
locally_observed: "locally_observed";
|
|
165
165
|
}>;
|
|
166
166
|
transformations: z.ZodArray<z.ZodEnum<{
|
|
@@ -180,9 +180,9 @@ export declare const receiptFinancialCostLineSchema: z.ZodObject<{
|
|
|
180
180
|
amountUsd: z.ZodPipe<z.ZodNumber, z.ZodTransform<number, number>>;
|
|
181
181
|
currency: z.ZodLiteral<"USD">;
|
|
182
182
|
accountingBasis: z.ZodEnum<{
|
|
183
|
-
api_equivalent: "api_equivalent";
|
|
184
|
-
provider_billed: "provider_billed";
|
|
185
183
|
user_declared: "user_declared";
|
|
184
|
+
provider_billed: "provider_billed";
|
|
185
|
+
api_equivalent: "api_equivalent";
|
|
186
186
|
}>;
|
|
187
187
|
financialEvidence: z.ZodEnum<{
|
|
188
188
|
estimated: "estimated";
|
|
@@ -193,9 +193,9 @@ export declare const receiptFinancialCostLineSchema: z.ZodObject<{
|
|
|
193
193
|
sourceId: z.ZodString;
|
|
194
194
|
observedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
195
195
|
granularity: z.ZodEnum<{
|
|
196
|
+
session: "session";
|
|
196
197
|
call: "call";
|
|
197
198
|
invocation: "invocation";
|
|
198
|
-
session: "session";
|
|
199
199
|
daily_aggregate: "daily_aggregate";
|
|
200
200
|
usage_bucket: "usage_bucket";
|
|
201
201
|
billing_bucket: "billing_bucket";
|
|
@@ -205,8 +205,8 @@ export declare const receiptFinancialCostLineSchema: z.ZodObject<{
|
|
|
205
205
|
provenance: z.ZodObject<{
|
|
206
206
|
origin: z.ZodEnum<{
|
|
207
207
|
provider_reported: "provider_reported";
|
|
208
|
-
sample: "sample";
|
|
209
208
|
user_declared: "user_declared";
|
|
209
|
+
sample: "sample";
|
|
210
210
|
locally_observed: "locally_observed";
|
|
211
211
|
}>;
|
|
212
212
|
transformations: z.ZodArray<z.ZodEnum<{
|
|
@@ -232,9 +232,9 @@ export declare const receiptLineSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
232
232
|
sourceId: z.ZodString;
|
|
233
233
|
observedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
234
234
|
granularity: z.ZodEnum<{
|
|
235
|
+
session: "session";
|
|
235
236
|
call: "call";
|
|
236
237
|
invocation: "invocation";
|
|
237
|
-
session: "session";
|
|
238
238
|
daily_aggregate: "daily_aggregate";
|
|
239
239
|
usage_bucket: "usage_bucket";
|
|
240
240
|
billing_bucket: "billing_bucket";
|
|
@@ -244,8 +244,8 @@ export declare const receiptLineSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
244
244
|
provenance: z.ZodObject<{
|
|
245
245
|
origin: z.ZodEnum<{
|
|
246
246
|
provider_reported: "provider_reported";
|
|
247
|
-
sample: "sample";
|
|
248
247
|
user_declared: "user_declared";
|
|
248
|
+
sample: "sample";
|
|
249
249
|
locally_observed: "locally_observed";
|
|
250
250
|
}>;
|
|
251
251
|
transformations: z.ZodArray<z.ZodEnum<{
|
|
@@ -263,9 +263,9 @@ export declare const receiptLineSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
263
263
|
amountUsd: z.ZodPipe<z.ZodNumber, z.ZodTransform<number, number>>;
|
|
264
264
|
currency: z.ZodLiteral<"USD">;
|
|
265
265
|
accountingBasis: z.ZodEnum<{
|
|
266
|
-
api_equivalent: "api_equivalent";
|
|
267
|
-
provider_billed: "provider_billed";
|
|
268
266
|
user_declared: "user_declared";
|
|
267
|
+
provider_billed: "provider_billed";
|
|
268
|
+
api_equivalent: "api_equivalent";
|
|
269
269
|
}>;
|
|
270
270
|
financialEvidence: z.ZodEnum<{
|
|
271
271
|
estimated: "estimated";
|
|
@@ -276,9 +276,9 @@ export declare const receiptLineSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
276
276
|
sourceId: z.ZodString;
|
|
277
277
|
observedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
278
278
|
granularity: z.ZodEnum<{
|
|
279
|
+
session: "session";
|
|
279
280
|
call: "call";
|
|
280
281
|
invocation: "invocation";
|
|
281
|
-
session: "session";
|
|
282
282
|
daily_aggregate: "daily_aggregate";
|
|
283
283
|
usage_bucket: "usage_bucket";
|
|
284
284
|
billing_bucket: "billing_bucket";
|
|
@@ -288,8 +288,8 @@ export declare const receiptLineSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
288
288
|
provenance: z.ZodObject<{
|
|
289
289
|
origin: z.ZodEnum<{
|
|
290
290
|
provider_reported: "provider_reported";
|
|
291
|
-
sample: "sample";
|
|
292
291
|
user_declared: "user_declared";
|
|
292
|
+
sample: "sample";
|
|
293
293
|
locally_observed: "locally_observed";
|
|
294
294
|
}>;
|
|
295
295
|
transformations: z.ZodArray<z.ZodEnum<{
|
|
@@ -326,9 +326,9 @@ export declare const receiptMappingGapSchema: z.ZodPipe<z.ZodObject<{
|
|
|
326
326
|
export type ReceiptMappingGap = z.infer<typeof receiptMappingGapSchema>;
|
|
327
327
|
export declare const receiptCostTotalSchema: z.ZodObject<{
|
|
328
328
|
accountingBasis: z.ZodEnum<{
|
|
329
|
-
api_equivalent: "api_equivalent";
|
|
330
|
-
provider_billed: "provider_billed";
|
|
331
329
|
user_declared: "user_declared";
|
|
330
|
+
provider_billed: "provider_billed";
|
|
331
|
+
api_equivalent: "api_equivalent";
|
|
332
332
|
}>;
|
|
333
333
|
financialEvidence: z.ZodEnum<{
|
|
334
334
|
estimated: "estimated";
|
|
@@ -345,8 +345,8 @@ declare const receiptBodyObjectSchema: z.ZodObject<{
|
|
|
345
345
|
schemaVersion: z.ZodLiteral<"0.1.0">;
|
|
346
346
|
generatedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
347
347
|
mode: z.ZodEnum<{
|
|
348
|
-
mixed: "mixed";
|
|
349
348
|
local: "local";
|
|
349
|
+
mixed: "mixed";
|
|
350
350
|
sample: "sample";
|
|
351
351
|
connected: "connected";
|
|
352
352
|
}>;
|
|
@@ -374,9 +374,9 @@ declare const receiptBodyObjectSchema: z.ZodObject<{
|
|
|
374
374
|
freshness: z.ZodPipe<z.ZodObject<{
|
|
375
375
|
status: z.ZodEnum<{
|
|
376
376
|
error: "error";
|
|
377
|
-
not_checked: "not_checked";
|
|
378
|
-
stale: "stale";
|
|
379
377
|
fresh: "fresh";
|
|
378
|
+
stale: "stale";
|
|
379
|
+
not_checked: "not_checked";
|
|
380
380
|
}>;
|
|
381
381
|
checkedAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
382
382
|
latestEvidenceAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
@@ -385,9 +385,9 @@ declare const receiptBodyObjectSchema: z.ZodObject<{
|
|
|
385
385
|
errorCode?: string | undefined;
|
|
386
386
|
latestEvidenceAt?: string | undefined;
|
|
387
387
|
checkedAt?: string | undefined;
|
|
388
|
-
status: "error" | "
|
|
388
|
+
status: "error" | "fresh" | "stale" | "not_checked";
|
|
389
389
|
}, {
|
|
390
|
-
status: "error" | "
|
|
390
|
+
status: "error" | "fresh" | "stale" | "not_checked";
|
|
391
391
|
checkedAt?: string | undefined;
|
|
392
392
|
latestEvidenceAt?: string | undefined;
|
|
393
393
|
errorCode?: string | undefined;
|
|
@@ -404,9 +404,9 @@ declare const receiptBodyObjectSchema: z.ZodObject<{
|
|
|
404
404
|
sourceId: z.ZodString;
|
|
405
405
|
observedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
406
406
|
granularity: z.ZodEnum<{
|
|
407
|
+
session: "session";
|
|
407
408
|
call: "call";
|
|
408
409
|
invocation: "invocation";
|
|
409
|
-
session: "session";
|
|
410
410
|
daily_aggregate: "daily_aggregate";
|
|
411
411
|
usage_bucket: "usage_bucket";
|
|
412
412
|
billing_bucket: "billing_bucket";
|
|
@@ -416,8 +416,8 @@ declare const receiptBodyObjectSchema: z.ZodObject<{
|
|
|
416
416
|
provenance: z.ZodObject<{
|
|
417
417
|
origin: z.ZodEnum<{
|
|
418
418
|
provider_reported: "provider_reported";
|
|
419
|
-
sample: "sample";
|
|
420
419
|
user_declared: "user_declared";
|
|
420
|
+
sample: "sample";
|
|
421
421
|
locally_observed: "locally_observed";
|
|
422
422
|
}>;
|
|
423
423
|
transformations: z.ZodArray<z.ZodEnum<{
|
|
@@ -435,9 +435,9 @@ declare const receiptBodyObjectSchema: z.ZodObject<{
|
|
|
435
435
|
amountUsd: z.ZodPipe<z.ZodNumber, z.ZodTransform<number, number>>;
|
|
436
436
|
currency: z.ZodLiteral<"USD">;
|
|
437
437
|
accountingBasis: z.ZodEnum<{
|
|
438
|
-
api_equivalent: "api_equivalent";
|
|
439
|
-
provider_billed: "provider_billed";
|
|
440
438
|
user_declared: "user_declared";
|
|
439
|
+
provider_billed: "provider_billed";
|
|
440
|
+
api_equivalent: "api_equivalent";
|
|
441
441
|
}>;
|
|
442
442
|
financialEvidence: z.ZodEnum<{
|
|
443
443
|
estimated: "estimated";
|
|
@@ -448,9 +448,9 @@ declare const receiptBodyObjectSchema: z.ZodObject<{
|
|
|
448
448
|
sourceId: z.ZodString;
|
|
449
449
|
observedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
450
450
|
granularity: z.ZodEnum<{
|
|
451
|
+
session: "session";
|
|
451
452
|
call: "call";
|
|
452
453
|
invocation: "invocation";
|
|
453
|
-
session: "session";
|
|
454
454
|
daily_aggregate: "daily_aggregate";
|
|
455
455
|
usage_bucket: "usage_bucket";
|
|
456
456
|
billing_bucket: "billing_bucket";
|
|
@@ -460,8 +460,8 @@ declare const receiptBodyObjectSchema: z.ZodObject<{
|
|
|
460
460
|
provenance: z.ZodObject<{
|
|
461
461
|
origin: z.ZodEnum<{
|
|
462
462
|
provider_reported: "provider_reported";
|
|
463
|
-
sample: "sample";
|
|
464
463
|
user_declared: "user_declared";
|
|
464
|
+
sample: "sample";
|
|
465
465
|
locally_observed: "locally_observed";
|
|
466
466
|
}>;
|
|
467
467
|
transformations: z.ZodArray<z.ZodEnum<{
|
|
@@ -500,8 +500,8 @@ export declare const agentEconomicsReceiptV0DraftSchema: z.ZodObject<{
|
|
|
500
500
|
schemaVersion: z.ZodLiteral<"0.1.0">;
|
|
501
501
|
generatedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
502
502
|
mode: z.ZodEnum<{
|
|
503
|
-
mixed: "mixed";
|
|
504
503
|
local: "local";
|
|
504
|
+
mixed: "mixed";
|
|
505
505
|
sample: "sample";
|
|
506
506
|
connected: "connected";
|
|
507
507
|
}>;
|
|
@@ -529,9 +529,9 @@ export declare const agentEconomicsReceiptV0DraftSchema: z.ZodObject<{
|
|
|
529
529
|
freshness: z.ZodPipe<z.ZodObject<{
|
|
530
530
|
status: z.ZodEnum<{
|
|
531
531
|
error: "error";
|
|
532
|
-
not_checked: "not_checked";
|
|
533
|
-
stale: "stale";
|
|
534
532
|
fresh: "fresh";
|
|
533
|
+
stale: "stale";
|
|
534
|
+
not_checked: "not_checked";
|
|
535
535
|
}>;
|
|
536
536
|
checkedAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
537
537
|
latestEvidenceAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
@@ -540,9 +540,9 @@ export declare const agentEconomicsReceiptV0DraftSchema: z.ZodObject<{
|
|
|
540
540
|
errorCode?: string | undefined;
|
|
541
541
|
latestEvidenceAt?: string | undefined;
|
|
542
542
|
checkedAt?: string | undefined;
|
|
543
|
-
status: "error" | "
|
|
543
|
+
status: "error" | "fresh" | "stale" | "not_checked";
|
|
544
544
|
}, {
|
|
545
|
-
status: "error" | "
|
|
545
|
+
status: "error" | "fresh" | "stale" | "not_checked";
|
|
546
546
|
checkedAt?: string | undefined;
|
|
547
547
|
latestEvidenceAt?: string | undefined;
|
|
548
548
|
errorCode?: string | undefined;
|
|
@@ -559,9 +559,9 @@ export declare const agentEconomicsReceiptV0DraftSchema: z.ZodObject<{
|
|
|
559
559
|
sourceId: z.ZodString;
|
|
560
560
|
observedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
561
561
|
granularity: z.ZodEnum<{
|
|
562
|
+
session: "session";
|
|
562
563
|
call: "call";
|
|
563
564
|
invocation: "invocation";
|
|
564
|
-
session: "session";
|
|
565
565
|
daily_aggregate: "daily_aggregate";
|
|
566
566
|
usage_bucket: "usage_bucket";
|
|
567
567
|
billing_bucket: "billing_bucket";
|
|
@@ -571,8 +571,8 @@ export declare const agentEconomicsReceiptV0DraftSchema: z.ZodObject<{
|
|
|
571
571
|
provenance: z.ZodObject<{
|
|
572
572
|
origin: z.ZodEnum<{
|
|
573
573
|
provider_reported: "provider_reported";
|
|
574
|
-
sample: "sample";
|
|
575
574
|
user_declared: "user_declared";
|
|
575
|
+
sample: "sample";
|
|
576
576
|
locally_observed: "locally_observed";
|
|
577
577
|
}>;
|
|
578
578
|
transformations: z.ZodArray<z.ZodEnum<{
|
|
@@ -590,9 +590,9 @@ export declare const agentEconomicsReceiptV0DraftSchema: z.ZodObject<{
|
|
|
590
590
|
amountUsd: z.ZodPipe<z.ZodNumber, z.ZodTransform<number, number>>;
|
|
591
591
|
currency: z.ZodLiteral<"USD">;
|
|
592
592
|
accountingBasis: z.ZodEnum<{
|
|
593
|
-
api_equivalent: "api_equivalent";
|
|
594
|
-
provider_billed: "provider_billed";
|
|
595
593
|
user_declared: "user_declared";
|
|
594
|
+
provider_billed: "provider_billed";
|
|
595
|
+
api_equivalent: "api_equivalent";
|
|
596
596
|
}>;
|
|
597
597
|
financialEvidence: z.ZodEnum<{
|
|
598
598
|
estimated: "estimated";
|
|
@@ -603,9 +603,9 @@ export declare const agentEconomicsReceiptV0DraftSchema: z.ZodObject<{
|
|
|
603
603
|
sourceId: z.ZodString;
|
|
604
604
|
observedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
605
605
|
granularity: z.ZodEnum<{
|
|
606
|
+
session: "session";
|
|
606
607
|
call: "call";
|
|
607
608
|
invocation: "invocation";
|
|
608
|
-
session: "session";
|
|
609
609
|
daily_aggregate: "daily_aggregate";
|
|
610
610
|
usage_bucket: "usage_bucket";
|
|
611
611
|
billing_bucket: "billing_bucket";
|
|
@@ -615,8 +615,8 @@ export declare const agentEconomicsReceiptV0DraftSchema: z.ZodObject<{
|
|
|
615
615
|
provenance: z.ZodObject<{
|
|
616
616
|
origin: z.ZodEnum<{
|
|
617
617
|
provider_reported: "provider_reported";
|
|
618
|
-
sample: "sample";
|
|
619
618
|
user_declared: "user_declared";
|
|
619
|
+
sample: "sample";
|
|
620
620
|
locally_observed: "locally_observed";
|
|
621
621
|
}>;
|
|
622
622
|
transformations: z.ZodArray<z.ZodEnum<{
|
|
@@ -657,8 +657,8 @@ export declare const agentEconomicsReceiptV0Schema: z.ZodObject<{
|
|
|
657
657
|
schemaVersion: z.ZodLiteral<"0.1.0">;
|
|
658
658
|
generatedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
659
659
|
mode: z.ZodEnum<{
|
|
660
|
-
mixed: "mixed";
|
|
661
660
|
local: "local";
|
|
661
|
+
mixed: "mixed";
|
|
662
662
|
sample: "sample";
|
|
663
663
|
connected: "connected";
|
|
664
664
|
}>;
|
|
@@ -686,9 +686,9 @@ export declare const agentEconomicsReceiptV0Schema: z.ZodObject<{
|
|
|
686
686
|
freshness: z.ZodPipe<z.ZodObject<{
|
|
687
687
|
status: z.ZodEnum<{
|
|
688
688
|
error: "error";
|
|
689
|
-
not_checked: "not_checked";
|
|
690
|
-
stale: "stale";
|
|
691
689
|
fresh: "fresh";
|
|
690
|
+
stale: "stale";
|
|
691
|
+
not_checked: "not_checked";
|
|
692
692
|
}>;
|
|
693
693
|
checkedAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
694
694
|
latestEvidenceAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
@@ -697,9 +697,9 @@ export declare const agentEconomicsReceiptV0Schema: z.ZodObject<{
|
|
|
697
697
|
errorCode?: string | undefined;
|
|
698
698
|
latestEvidenceAt?: string | undefined;
|
|
699
699
|
checkedAt?: string | undefined;
|
|
700
|
-
status: "error" | "
|
|
700
|
+
status: "error" | "fresh" | "stale" | "not_checked";
|
|
701
701
|
}, {
|
|
702
|
-
status: "error" | "
|
|
702
|
+
status: "error" | "fresh" | "stale" | "not_checked";
|
|
703
703
|
checkedAt?: string | undefined;
|
|
704
704
|
latestEvidenceAt?: string | undefined;
|
|
705
705
|
errorCode?: string | undefined;
|
|
@@ -716,9 +716,9 @@ export declare const agentEconomicsReceiptV0Schema: z.ZodObject<{
|
|
|
716
716
|
sourceId: z.ZodString;
|
|
717
717
|
observedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
718
718
|
granularity: z.ZodEnum<{
|
|
719
|
+
session: "session";
|
|
719
720
|
call: "call";
|
|
720
721
|
invocation: "invocation";
|
|
721
|
-
session: "session";
|
|
722
722
|
daily_aggregate: "daily_aggregate";
|
|
723
723
|
usage_bucket: "usage_bucket";
|
|
724
724
|
billing_bucket: "billing_bucket";
|
|
@@ -728,8 +728,8 @@ export declare const agentEconomicsReceiptV0Schema: z.ZodObject<{
|
|
|
728
728
|
provenance: z.ZodObject<{
|
|
729
729
|
origin: z.ZodEnum<{
|
|
730
730
|
provider_reported: "provider_reported";
|
|
731
|
-
sample: "sample";
|
|
732
731
|
user_declared: "user_declared";
|
|
732
|
+
sample: "sample";
|
|
733
733
|
locally_observed: "locally_observed";
|
|
734
734
|
}>;
|
|
735
735
|
transformations: z.ZodArray<z.ZodEnum<{
|
|
@@ -747,9 +747,9 @@ export declare const agentEconomicsReceiptV0Schema: z.ZodObject<{
|
|
|
747
747
|
amountUsd: z.ZodPipe<z.ZodNumber, z.ZodTransform<number, number>>;
|
|
748
748
|
currency: z.ZodLiteral<"USD">;
|
|
749
749
|
accountingBasis: z.ZodEnum<{
|
|
750
|
-
api_equivalent: "api_equivalent";
|
|
751
|
-
provider_billed: "provider_billed";
|
|
752
750
|
user_declared: "user_declared";
|
|
751
|
+
provider_billed: "provider_billed";
|
|
752
|
+
api_equivalent: "api_equivalent";
|
|
753
753
|
}>;
|
|
754
754
|
financialEvidence: z.ZodEnum<{
|
|
755
755
|
estimated: "estimated";
|
|
@@ -760,9 +760,9 @@ export declare const agentEconomicsReceiptV0Schema: z.ZodObject<{
|
|
|
760
760
|
sourceId: z.ZodString;
|
|
761
761
|
observedAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
762
762
|
granularity: z.ZodEnum<{
|
|
763
|
+
session: "session";
|
|
763
764
|
call: "call";
|
|
764
765
|
invocation: "invocation";
|
|
765
|
-
session: "session";
|
|
766
766
|
daily_aggregate: "daily_aggregate";
|
|
767
767
|
usage_bucket: "usage_bucket";
|
|
768
768
|
billing_bucket: "billing_bucket";
|
|
@@ -772,8 +772,8 @@ export declare const agentEconomicsReceiptV0Schema: z.ZodObject<{
|
|
|
772
772
|
provenance: z.ZodObject<{
|
|
773
773
|
origin: z.ZodEnum<{
|
|
774
774
|
provider_reported: "provider_reported";
|
|
775
|
-
sample: "sample";
|
|
776
775
|
user_declared: "user_declared";
|
|
776
|
+
sample: "sample";
|
|
777
777
|
locally_observed: "locally_observed";
|
|
778
778
|
}>;
|
|
779
779
|
transformations: z.ZodArray<z.ZodEnum<{
|
|
@@ -809,9 +809,9 @@ export declare const agentEconomicsReceiptV0Schema: z.ZodObject<{
|
|
|
809
809
|
id: z.ZodString;
|
|
810
810
|
costTotals: z.ZodArray<z.ZodObject<{
|
|
811
811
|
accountingBasis: z.ZodEnum<{
|
|
812
|
-
api_equivalent: "api_equivalent";
|
|
813
|
-
provider_billed: "provider_billed";
|
|
814
812
|
user_declared: "user_declared";
|
|
813
|
+
provider_billed: "provider_billed";
|
|
814
|
+
api_equivalent: "api_equivalent";
|
|
815
815
|
}>;
|
|
816
816
|
financialEvidence: z.ZodEnum<{
|
|
817
817
|
estimated: "estimated";
|
package/dist/analyze.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { generateSpendInsights } from "./insights.js";
|
|
2
|
+
import { safeUntrustedLabel, safeUntrustedLabels, WITHHELD_AGENT_LABEL, WITHHELD_ENTITY_LABEL, WITHHELD_OPERATION_LABEL } from "./untrustedLabel.js";
|
|
2
3
|
import { costConfidenceValues, hasModeledWorkloadEvidence, hasPricedEvidence, spendComparisonKey, spendSummarySchema } from "./schema.js";
|
|
3
4
|
const confidenceRank = {
|
|
4
5
|
verified: 0,
|
|
@@ -154,11 +155,27 @@ export function generateWorkflowWatch(records) {
|
|
|
154
155
|
const hasRunLevelEvidence = groupRecords.every(hasModeledWorkloadEvidence);
|
|
155
156
|
const suggestedOptimization = workflowDiagnosticFor(workflowKey, agentId, hasRunLevelEvidence);
|
|
156
157
|
return {
|
|
157
|
-
id
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
158
|
+
// The id is a STRUCTURED field beside the neutralized prose and it is
|
|
159
|
+
// rendered. Slug the neutralized forms, not the raw grouping keys.
|
|
160
|
+
id: slugify([
|
|
161
|
+
"workflow",
|
|
162
|
+
safeEntity(clientId),
|
|
163
|
+
safeEntity(projectId),
|
|
164
|
+
safeWorkflowLabel(workflowKey)
|
|
165
|
+
].join("-")),
|
|
166
|
+
// Neutralized, not raw. These fields ship inside the SpendSummary that
|
|
167
|
+
// the MCP tools hand to an agent, so leaving them raw beside neutralized
|
|
168
|
+
// prose is the same inversion as the repeated-read array: the human sees
|
|
169
|
+
// the redaction and the agent gets the payload.
|
|
170
|
+
//
|
|
171
|
+
// workflowWatchAmount re-matches these against the records to recompute
|
|
172
|
+
// a display amount. An ordinary name is byte-identical, so that match is
|
|
173
|
+
// unaffected; a name that reads like an instruction loses its amount,
|
|
174
|
+
// which is the right way round.
|
|
175
|
+
clientId: safeEntity(clientId),
|
|
176
|
+
projectId: safeEntity(projectId),
|
|
177
|
+
workflowKey: safeWorkflowLabel(workflowKey),
|
|
178
|
+
agentId: safeUntrustedLabel(agentId, WITHHELD_AGENT_LABEL),
|
|
162
179
|
amountUsd,
|
|
163
180
|
shareOfSpend,
|
|
164
181
|
recordCount: groupRecords.length,
|
|
@@ -168,8 +185,8 @@ export function generateWorkflowWatch(records) {
|
|
|
168
185
|
suggestedOptimization,
|
|
169
186
|
applyArtifact: `Before changing this workload: ${suggestedOptimization}`,
|
|
170
187
|
verificationPlan: hasRunLevelEvidence
|
|
171
|
-
? `Reconcile ${workflowKey} to its owner and budget, then define one reversible candidate and compare matched future accepted outcomes plus provider-reported cost.`
|
|
172
|
-
: `Reconcile ${workflowKey} to its owner and budget, then collect call-level workload evidence before modeling or applying a cost change.`
|
|
188
|
+
? `Reconcile ${safeWorkflowLabel(workflowKey)} to its owner and budget, then define one reversible candidate and compare matched future accepted outcomes plus provider-reported cost.`
|
|
189
|
+
: `Reconcile ${safeWorkflowLabel(workflowKey)} to its owner and budget, then collect call-level workload evidence before modeling or applying a cost change.`
|
|
173
190
|
};
|
|
174
191
|
})
|
|
175
192
|
.filter((entry) => entry.amountUsd > 0)
|
|
@@ -186,16 +203,16 @@ export function generateRecommendations(records) {
|
|
|
186
203
|
recommendations.push({
|
|
187
204
|
id: "model-downgrade",
|
|
188
205
|
title: "Review expensive model workloads for downgrade candidates",
|
|
189
|
-
rationale: `${topModel.key} is the largest cost driver in the current local sample.`,
|
|
206
|
+
rationale: `${safeEntity(topModel.key)} is the largest cost driver in the current local sample.`,
|
|
190
207
|
whyItMatters: "Premium model usage tends to become invisible once agents are running in the background. Spend owners need a clear rule for which jobs deserve the expensive model.",
|
|
191
|
-
nextAction: `Audit the top ${topModel.key} operations and move low-risk summarization, extraction, and draft work to a cheaper model tier first.`,
|
|
208
|
+
nextAction: `Audit the top ${safeEntity(topModel.key)} operations and move low-risk summarization, extraction, and draft work to a cheaper model tier first.`,
|
|
192
209
|
priority: "high",
|
|
193
210
|
// The high-level recommendation does not know which model-specific rule
|
|
194
211
|
// will pass quality verification. Dollar math lives in the exact cut
|
|
195
212
|
// candidate; concentration alone earns no flat percentage.
|
|
196
213
|
estimatedImpactUsd: 0,
|
|
197
214
|
confidence: topModel.confidence,
|
|
198
|
-
relatedKeys: [topModel.key]
|
|
215
|
+
relatedKeys: [safeEntity(topModel.key)]
|
|
199
216
|
});
|
|
200
217
|
}
|
|
201
218
|
const highInputTokenRecords = decisionRecords.filter((record) => record.inputTokens >= 100_000);
|
|
@@ -209,7 +226,7 @@ export function generateRecommendations(records) {
|
|
|
209
226
|
priority: "high",
|
|
210
227
|
estimatedImpactUsd: 0,
|
|
211
228
|
confidence: combinedConfidence(highInputTokenRecords.map((record) => record.costConfidence)),
|
|
212
|
-
relatedKeys: unique(highInputTokenRecords.map((record) => record.model))
|
|
229
|
+
relatedKeys: safeUntrustedLabels(unique(highInputTokenRecords.map((record) => record.model)))
|
|
213
230
|
});
|
|
214
231
|
}
|
|
215
232
|
// An operation label alone does not prove identical inputs. Require an
|
|
@@ -229,7 +246,7 @@ export function generateRecommendations(records) {
|
|
|
229
246
|
priority: "medium",
|
|
230
247
|
estimatedImpactUsd: roundMoney(sumRecords(cacheableRecords)),
|
|
231
248
|
confidence: combinedConfidence(cacheableRecords.map((record) => record.costConfidence)),
|
|
232
|
-
relatedKeys: repeatedOperations
|
|
249
|
+
relatedKeys: safeUntrustedLabels(repeatedOperations, WITHHELD_OPERATION_LABEL)
|
|
233
250
|
});
|
|
234
251
|
}
|
|
235
252
|
const agentSpend = breakdown(decisionRecords, (record) => record.agentId);
|
|
@@ -238,13 +255,13 @@ export function generateRecommendations(records) {
|
|
|
238
255
|
recommendations.push({
|
|
239
256
|
id: "agent-caps",
|
|
240
257
|
title: "Confirm the owner and budget for the highest-cost agent",
|
|
241
|
-
rationale: `${topAgent.key} accounts for a material share of sampled usage.`,
|
|
258
|
+
rationale: `${safeEntity(topAgent.key)} accounts for a material share of sampled usage.`,
|
|
242
259
|
whyItMatters: "Concentration is an accountability signal, but it does not by itself prove abnormal behavior or an avoidable dollar amount.",
|
|
243
|
-
nextAction: `Confirm ${topAgent.key}'s owner and approved range, then collect run-level evidence before proposing a warning threshold or hard cap.`,
|
|
260
|
+
nextAction: `Confirm ${safeEntity(topAgent.key)}'s owner and approved range, then collect run-level evidence before proposing a warning threshold or hard cap.`,
|
|
244
261
|
priority: "high",
|
|
245
262
|
estimatedImpactUsd: 0,
|
|
246
263
|
confidence: topAgent.confidence,
|
|
247
|
-
relatedKeys: [topAgent.key]
|
|
264
|
+
relatedKeys: [safeEntity(topAgent.key)]
|
|
248
265
|
});
|
|
249
266
|
}
|
|
250
267
|
const batchableRecords = decisionRecords.filter((record) => record.workloadSemantics?.batchEligible === true &&
|
|
@@ -262,7 +279,7 @@ export function generateRecommendations(records) {
|
|
|
262
279
|
return total + (record.amountUsd ?? 0) * (1 - retained);
|
|
263
280
|
}, 0)),
|
|
264
281
|
confidence: combinedConfidence(batchableRecords.map((record) => record.costConfidence)),
|
|
265
|
-
relatedKeys: unique(batchableRecords.map((record) => record.operation).filter(isPresent))
|
|
282
|
+
relatedKeys: safeUntrustedLabels(unique(batchableRecords.map((record) => record.operation).filter(isPresent)), WITHHELD_OPERATION_LABEL)
|
|
266
283
|
});
|
|
267
284
|
}
|
|
268
285
|
return recommendations;
|
|
@@ -335,9 +352,33 @@ function isLocalAgentRecord(record) {
|
|
|
335
352
|
return record.providerCostType === "local_agent_logs";
|
|
336
353
|
}
|
|
337
354
|
function workflowDiagnosticFor(workflowKey, agentId, hasRunLevelEvidence) {
|
|
355
|
+
const workflow = safeWorkflowLabel(workflowKey);
|
|
356
|
+
const agent = safeUntrustedLabel(agentId, WITHHELD_AGENT_LABEL);
|
|
338
357
|
return hasRunLevelEvidence
|
|
339
|
-
? `Confirm the owner and approved budget for ${
|
|
340
|
-
: `Confirm the owner and approved budget for ${
|
|
358
|
+
? `Confirm the owner and approved budget for ${workflow} (${agent}), reconcile the observed spend, and define one reversible candidate with an accepted-outcome quality bar before approval.`
|
|
359
|
+
: `Confirm the owner and approved budget for ${workflow} (${agent}), reconcile the observed spend, and collect call-level provenance before proposing a reversible optimization.`;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* The workflow key IS `record.operation` — a provider/adapter string, untrusted
|
|
363
|
+
* end to end. It reaches `suggestedOptimization`, `applyArtifact` and
|
|
364
|
+
* `verificationPlan`, and those three are rendered as product prose that the
|
|
365
|
+
* report layer deliberately never blanks. So it is neutralized here, at the
|
|
366
|
+
* interpolation point, exactly as the cut-list builders do.
|
|
367
|
+
*
|
|
368
|
+
* The ENTRY's own identity fields are neutralized too: they travel inside the
|
|
369
|
+
* SpendSummary that the MCP tools return, so a raw field sitting beside
|
|
370
|
+
* neutralized prose hands an agent exactly what the human was protected from.
|
|
371
|
+
*/
|
|
372
|
+
function safeWorkflowLabel(workflowKey) {
|
|
373
|
+
return safeUntrustedLabel(workflowKey, WITHHELD_OPERATION_LABEL);
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* A breakdown key rendered for a HUMAN — a model id, an agent id, an
|
|
377
|
+
* operation label. Display only: the raw key is still what the record filters
|
|
378
|
+
* match on, and rewriting a matching key would empty the cohort.
|
|
379
|
+
*/
|
|
380
|
+
function safeEntity(value) {
|
|
381
|
+
return safeUntrustedLabel(value, WITHHELD_ENTITY_LABEL);
|
|
341
382
|
}
|
|
342
383
|
function slugify(value) {
|
|
343
384
|
return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|