@agentguard-run/spend 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/index.d.ts +3 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +17 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/outcomes/index.d.ts +6 -0
  7. package/dist/outcomes/index.d.ts.map +1 -0
  8. package/dist/outcomes/index.js +22 -0
  9. package/dist/outcomes/index.js.map +1 -0
  10. package/dist/outcomes/learning.d.ts +19 -0
  11. package/dist/outcomes/learning.d.ts.map +1 -0
  12. package/dist/outcomes/learning.js +104 -0
  13. package/dist/outcomes/learning.js.map +1 -0
  14. package/dist/outcomes/ledger.d.ts +42 -0
  15. package/dist/outcomes/ledger.d.ts.map +1 -0
  16. package/dist/outcomes/ledger.js +110 -0
  17. package/dist/outcomes/ledger.js.map +1 -0
  18. package/dist/outcomes/quality-gate.d.ts +12 -0
  19. package/dist/outcomes/quality-gate.d.ts.map +1 -0
  20. package/dist/outcomes/quality-gate.js +104 -0
  21. package/dist/outcomes/quality-gate.js.map +1 -0
  22. package/dist/outcomes/runtime.d.ts +21 -0
  23. package/dist/outcomes/runtime.d.ts.map +1 -0
  24. package/dist/outcomes/runtime.js +328 -0
  25. package/dist/outcomes/runtime.js.map +1 -0
  26. package/dist/outcomes/types.d.ts +156 -0
  27. package/dist/outcomes/types.d.ts.map +1 -0
  28. package/dist/outcomes/types.js +14 -0
  29. package/dist/outcomes/types.js.map +1 -0
  30. package/dist/router.d.ts +8 -1
  31. package/dist/router.d.ts.map +1 -1
  32. package/dist/router.js +932 -229
  33. package/dist/router.js.map +1 -1
  34. package/dist/spend-guard.d.ts +4 -0
  35. package/dist/spend-guard.d.ts.map +1 -1
  36. package/dist/spend-guard.js +53 -0
  37. package/dist/spend-guard.js.map +1 -1
  38. package/dist/types.d.ts +3 -1
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/verticals/catalogs.d.ts +62 -0
  41. package/dist/verticals/catalogs.d.ts.map +1 -0
  42. package/dist/verticals/catalogs.js +3936 -0
  43. package/dist/verticals/catalogs.js.map +1 -0
  44. package/dist/verticals/index.d.ts +2 -0
  45. package/dist/verticals/index.d.ts.map +1 -0
  46. package/dist/verticals/index.js +18 -0
  47. package/dist/verticals/index.js.map +1 -0
  48. package/package.json +14 -2
  49. package/src/outcomes/index.ts +5 -0
  50. package/src/outcomes/learning.ts +133 -0
  51. package/src/outcomes/ledger.ts +131 -0
  52. package/src/outcomes/quality-gate.ts +116 -0
  53. package/src/outcomes/runtime.ts +396 -0
  54. package/src/outcomes/types.ts +176 -0
  55. package/src/router.ts +938 -227
  56. package/src/verticals/catalogs.ts +3967 -0
  57. package/src/verticals/index.ts +1 -0
@@ -0,0 +1,328 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executeOutcomeTask = executeOutcomeTask;
4
+ const crypto_1 = require("crypto");
5
+ const policy_1 = require("../policy");
6
+ const cost_table_1 = require("../cost-table");
7
+ const router_1 = require("../router");
8
+ const ledger_1 = require("./ledger");
9
+ const quality_gate_1 = require("./quality-gate");
10
+ const types_1 = require("./types");
11
+ async function executeOutcomeTask(options) {
12
+ validateTemplate(options.template);
13
+ validateInputs(options.template, options.inputs);
14
+ const started = Date.now();
15
+ const receiptStore = options.receiptStore ?? new types_1.InMemoryOutcomeReceiptStore();
16
+ const ledger = options.ledger ?? new ledger_1.OutcomeSpendLedger(options.guard.getSpendStore());
17
+ const posture = options.context.posture ?? 'standard';
18
+ const budgetTier = options.context.budgetTier ?? 'solo';
19
+ const route = (0, router_1.recommend)({
20
+ vertical: options.template.vertical,
21
+ outcome: options.template.slug,
22
+ posture,
23
+ budgetTier,
24
+ imageCapable: options.context.imageCapable,
25
+ });
26
+ const blockedOrigins = [...new Set([...(options.template.blockedOrigins ?? []), ...route.blockedOrigins])];
27
+ const hold = await ledger.hold({
28
+ scope: options.context.scope,
29
+ window: options.template.spendCaps.window ?? 'per_call',
30
+ amountCents: options.template.spendCaps.maxCostCents,
31
+ limitCents: options.template.spendCaps.periodCapCents ?? options.template.spendCaps.maxCostCents,
32
+ });
33
+ const links = [];
34
+ let status = 'failed';
35
+ let drafter = null;
36
+ let reviewer = null;
37
+ let fallback = null;
38
+ let outputText = '';
39
+ let reviewerOutputText;
40
+ let gate = { score: 0, riskScore: 0, passed: false, issues: ['not_run'], triggerFired: [] };
41
+ try {
42
+ drafter = await runGuardedModel({
43
+ guard: options.guard,
44
+ template: options.template,
45
+ context: options.context,
46
+ route,
47
+ role: 'drafter',
48
+ model: route.drafter,
49
+ inputs: options.inputs,
50
+ runner: options.runner,
51
+ });
52
+ links.push(linkFor('drafter', drafter));
53
+ outputText = drafter.response.text;
54
+ gate = (0, quality_gate_1.scoreOutcomeOutput)(outputText, options.template, drafter.response.qualityScore);
55
+ if ((0, quality_gate_1.shouldRunReviewer)(gate) && options.context.reviewerCascadeAuto === true) {
56
+ const reviewerModel = antiCorrelatedReviewer(route, drafter.decision.modelResolved);
57
+ reviewer = await runGuardedModel({
58
+ guard: options.guard,
59
+ template: options.template,
60
+ context: options.context,
61
+ route,
62
+ role: 'reviewer',
63
+ model: reviewerModel,
64
+ inputs: { outcome_metadata_only: true, trigger_fired: gate.triggerFired.join(',') },
65
+ runner: options.runner,
66
+ priorOutputText: outputText,
67
+ });
68
+ links.push(linkFor('reviewer', reviewer));
69
+ reviewerOutputText = reviewer.response.text;
70
+ status = 'completed';
71
+ }
72
+ else {
73
+ status = gate.passed ? 'completed' : 'quality_failed';
74
+ }
75
+ }
76
+ catch (err) {
77
+ if (!drafter) {
78
+ const fallbackModel = antiCorrelatedFallback(route, route.drafter);
79
+ if (fallbackModel) {
80
+ fallback = { model: fallbackModel, reason: errorReason(err) };
81
+ try {
82
+ drafter = await runGuardedModel({
83
+ guard: options.guard,
84
+ template: options.template,
85
+ context: options.context,
86
+ route,
87
+ role: 'fallback',
88
+ model: fallbackModel,
89
+ inputs: options.inputs,
90
+ runner: options.runner,
91
+ });
92
+ fallback.decisionId = drafter.decision.decisionId;
93
+ links.push(linkFor('fallback', drafter));
94
+ outputText = drafter.response.text;
95
+ gate = (0, quality_gate_1.scoreOutcomeOutput)(outputText, options.template, drafter.response.qualityScore);
96
+ status = gate.passed ? 'completed' : 'quality_failed';
97
+ }
98
+ catch {
99
+ status = 'failed';
100
+ }
101
+ }
102
+ else {
103
+ status = 'failed';
104
+ }
105
+ }
106
+ else {
107
+ status = 'failed';
108
+ }
109
+ }
110
+ const totalCostCents = links.reduce((sum, item) => sum + item.actualCents, 0);
111
+ if (status === 'completed')
112
+ await ledger.settle(hold, totalCostCents);
113
+ else
114
+ await ledger.refund(hold);
115
+ const receipt = buildReceipt({
116
+ template: options.template,
117
+ context: options.context,
118
+ hold,
119
+ route,
120
+ blockedOrigins,
121
+ status,
122
+ drafter,
123
+ reviewer,
124
+ fallback,
125
+ links,
126
+ gate,
127
+ totalCostCents,
128
+ durationMs: Date.now() - started,
129
+ posture,
130
+ budgetTier,
131
+ });
132
+ await receiptStore.append(receipt);
133
+ const signedReceipt = await options.guard.recordOutcomeReceipt(receiptToMetadata(receipt));
134
+ return { receipt, signed: signedReceipt.signed, outputText, reviewerOutputText };
135
+ }
136
+ async function runGuardedModel(args) {
137
+ const request = buildModelRequest(args);
138
+ const inputTokens = args.guard.estimateTokens(request.systemPrompt + '\n' + request.userPrompt);
139
+ const outputTokens = estimatedOutputTokens(args.template);
140
+ const { decision, signed } = await args.guard.decide({
141
+ provider: (0, cost_table_1.inferProvider)(args.model),
142
+ model: args.model,
143
+ inputTokens,
144
+ outputTokens,
145
+ scope: args.context.scope,
146
+ capabilityClaim: args.template.capability,
147
+ label: args.template.slug + ':' + args.role,
148
+ });
149
+ if (decision.action === 'block')
150
+ throw new Error('Outcome model call blocked by policy');
151
+ const started = Date.now();
152
+ let response;
153
+ try {
154
+ response = await args.runner.run({ ...request, model: decision.modelResolved });
155
+ }
156
+ catch (err) {
157
+ await args.guard.settleStreamUsage(decision.decisionId, 0, 0, { partial: true, reason: errorReason(err) });
158
+ throw err;
159
+ }
160
+ const actualInputTokens = validToken(response.inputTokens) ? response.inputTokens : inputTokens;
161
+ const actualOutputTokens = validToken(response.outputTokens) ? response.outputTokens : args.guard.estimateTokens(response.text);
162
+ const computed = (0, cost_table_1.computeCallCents)(decision.modelResolved, actualInputTokens, actualOutputTokens);
163
+ const actualCents = validCents(response.costCents) ? response.costCents : computed ?? decision.projectedCents;
164
+ await args.guard.settleStreamUsage(decision.decisionId, actualInputTokens, actualOutputTokens, { partial: false });
165
+ return { response, decision, signed, actualInputTokens, actualOutputTokens, actualCents, durationMs: Date.now() - started };
166
+ }
167
+ function buildModelRequest(args) {
168
+ const contextLines = (args.template.contextInjection ?? []).map((item) => {
169
+ const value = args.context.context?.[item.field] ?? item.example ?? '';
170
+ return item.label + ': ' + value;
171
+ });
172
+ const inputLines = Object.entries(args.inputs).map(([key, value]) => key + ': ' + JSON.stringify(value));
173
+ const userPrompt = [
174
+ 'Outcome: ' + args.template.slug,
175
+ 'Role: ' + args.role,
176
+ ...contextLines,
177
+ ...inputLines,
178
+ args.priorOutputText ? 'Prior drafter output:\n' + args.priorOutputText : '',
179
+ 'Return format: ' + args.template.outputFormat,
180
+ ].filter(Boolean).join('\n');
181
+ return {
182
+ role: args.role,
183
+ model: args.model,
184
+ vertical: String(args.template.vertical),
185
+ outcome: args.template.slug,
186
+ promptVersion: args.template.promptVersion,
187
+ systemPrompt: args.template.systemPrompt + (args.template.disclaimer ? '\n' + args.template.disclaimer : ''),
188
+ userPrompt,
189
+ outputFormat: args.template.outputFormat,
190
+ metadata: {
191
+ vertical: String(args.template.vertical),
192
+ outcome: args.template.slug,
193
+ promptVersion: args.template.promptVersion,
194
+ need: args.route.need,
195
+ role: args.role,
196
+ effort: effortForRole(args.route, args.role),
197
+ },
198
+ };
199
+ }
200
+ function effortForRole(route, role) {
201
+ return role === 'reviewer' ? route.reviewerEffort : route.drafterEffort;
202
+ }
203
+ function buildReceipt(args) {
204
+ return {
205
+ receiptId: 'ag_outcome_' + (0, crypto_1.randomUUID)(),
206
+ timestamp: new Date().toISOString(),
207
+ vertical: String(args.template.vertical),
208
+ outcome: args.template.slug,
209
+ promptVersion: args.template.promptVersion,
210
+ customerId: args.context.customerId,
211
+ scopeKey: (0, policy_1.buildScopeKey)(args.context.scope),
212
+ status: args.status,
213
+ drafter: modelSummary(args.drafter),
214
+ reviewer: args.reviewer ? { ...modelSummary(args.reviewer), verdict: args.reviewer.response.verdict ?? 'reviewed' } : null,
215
+ fallback: args.fallback,
216
+ triggerFired: args.gate.triggerFired,
217
+ qualityScore: args.gate.score,
218
+ pass: args.status === 'completed',
219
+ totalCostCents: args.totalCostCents,
220
+ durationMs: args.durationMs,
221
+ decisionLinks: args.links,
222
+ metadata: {
223
+ need: args.route.need,
224
+ capability: args.template.capability,
225
+ posture: args.posture,
226
+ budgetTier: args.budgetTier,
227
+ blockedOrigins: args.blockedOrigins,
228
+ effort: args.route.effort,
229
+ drafterEffort: args.route.drafterEffort,
230
+ reviewerEffort: args.route.reviewerEffort,
231
+ provenance: provenanceSummary(args.drafter, args.reviewer),
232
+ },
233
+ };
234
+ }
235
+ function modelSummary(run) {
236
+ if (!run)
237
+ return { model: 'none', costCents: 0, inputTokens: 0, outputTokens: 0 };
238
+ return {
239
+ model: run.decision.modelResolved,
240
+ decisionId: run.decision.decisionId,
241
+ costCents: run.actualCents,
242
+ inputTokens: run.actualInputTokens,
243
+ outputTokens: run.actualOutputTokens,
244
+ };
245
+ }
246
+ function provenanceSummary(drafter, reviewer) {
247
+ const out = {};
248
+ if (drafter?.response.durationMs)
249
+ out.drafterDurationMs = drafter.response.durationMs;
250
+ if (reviewer?.response.durationMs)
251
+ out.reviewerDurationMs = reviewer.response.durationMs;
252
+ return out;
253
+ }
254
+ function receiptToMetadata(receipt) {
255
+ return JSON.parse(JSON.stringify(receipt));
256
+ }
257
+ function linkFor(role, run) {
258
+ return {
259
+ role,
260
+ decisionId: run.decision.decisionId,
261
+ entryHash: run.signed?.entryHash,
262
+ modelRequested: run.decision.modelRequested,
263
+ modelResolved: run.decision.modelResolved,
264
+ projectedCents: run.decision.projectedCents,
265
+ actualCents: run.actualCents,
266
+ inputTokens: run.actualInputTokens,
267
+ outputTokens: run.actualOutputTokens,
268
+ };
269
+ }
270
+ function antiCorrelatedReviewer(route, drafterModel) {
271
+ if (familyOf(route.reviewer) !== familyOf(drafterModel))
272
+ return route.reviewer;
273
+ return antiCorrelatedFallback(route, drafterModel) ?? route.reviewer;
274
+ }
275
+ function antiCorrelatedFallback(route, failedModel) {
276
+ const failedFamily = familyOf(failedModel);
277
+ return route.allowedModels.find((model) => model !== failedModel && familyOf(model) !== failedFamily && (0, cost_table_1.computeCallCents)(model, 1, 1) !== null) ?? null;
278
+ }
279
+ function familyOf(model) {
280
+ const id = model.toLowerCase();
281
+ if (id.includes('opus'))
282
+ return 'opus';
283
+ if (id.includes('sonnet'))
284
+ return 'sonnet';
285
+ if (id.includes('haiku'))
286
+ return 'haiku';
287
+ if (id.includes('gpt-oss'))
288
+ return 'gpt-oss';
289
+ if (id.includes('gpt-5'))
290
+ return 'gpt-5';
291
+ if (id.includes('gpt-4'))
292
+ return 'gpt-4';
293
+ if (id.includes('llama'))
294
+ return 'llama';
295
+ if (id.includes('mistral'))
296
+ return 'mistral';
297
+ if (id.includes('nova'))
298
+ return 'nova';
299
+ return id.split('/')[0] || id.split('.')[0] || 'unknown';
300
+ }
301
+ function estimatedOutputTokens(template) {
302
+ return Math.max(128, Math.min(4096, Math.ceil(template.spendCaps.maxCostCents * 64)));
303
+ }
304
+ function validateTemplate(template) {
305
+ if (!template.slug || !template.vertical)
306
+ throw new Error('Outcome template must include slug and vertical');
307
+ if (!Number.isSafeInteger(template.spendCaps.maxCostCents) || template.spendCaps.maxCostCents < 0) {
308
+ throw new Error('Outcome spend cap must be a non-negative safe integer');
309
+ }
310
+ }
311
+ function validateInputs(template, inputs) {
312
+ for (const input of template.inputs) {
313
+ if (input.required && !(input.name in inputs))
314
+ throw new Error('Missing required outcome input: ' + input.name);
315
+ }
316
+ }
317
+ function validToken(value) {
318
+ return Number.isSafeInteger(value) && value >= 0;
319
+ }
320
+ function validCents(value) {
321
+ return Number.isSafeInteger(value) && value >= 0;
322
+ }
323
+ function errorReason(err) {
324
+ if (err instanceof Error && err.message)
325
+ return err.message.slice(0, 120);
326
+ return 'model_error';
327
+ }
328
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/outcomes/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import type { CapabilityTier, SpendScope, SpendWindow } from '../types';
2
+ export type OutcomeVertical = 'law' | 'accounting' | 'insurance' | 'realestate' | 'ecommerce' | string;
3
+ export type OutcomeRole = 'drafter' | 'reviewer' | 'fallback';
4
+ export type OutcomeStatus = 'completed' | 'blocked' | 'failed' | 'quality_failed';
5
+ export type OutcomeEffort = 'low' | 'medium' | 'high' | 'xhigh';
6
+ export type OutcomeGuardrailTier = 'grounded_cite_or_refuse' | 'reviewer_required' | 'human_of_record';
7
+ export type OutcomeTemplateStatus = 'active' | 'specced';
8
+ export interface OutcomeInputDefinition {
9
+ name: string;
10
+ type: 'string' | 'number' | 'boolean' | 'json' | 'date';
11
+ required?: boolean;
12
+ description?: string;
13
+ }
14
+ export interface OutcomeSpendCaps {
15
+ maxCostCents: number;
16
+ window?: SpendWindow;
17
+ periodCapCents?: number;
18
+ }
19
+ export interface OutcomeQualityGateRubric {
20
+ name: string;
21
+ weight?: number;
22
+ passThreshold?: number;
23
+ }
24
+ export interface OutcomeQualityGateConfig {
25
+ passThreshold?: number;
26
+ reviewerTriggerScore?: number;
27
+ riskKeywords?: string[];
28
+ rubrics?: OutcomeQualityGateRubric[];
29
+ }
30
+ export interface OutcomeContextInjection {
31
+ field: string;
32
+ label: string;
33
+ required?: boolean;
34
+ example?: string;
35
+ }
36
+ export interface OutcomeTemplate {
37
+ slug: string;
38
+ vertical: OutcomeVertical;
39
+ systemPrompt: string;
40
+ inputs: OutcomeInputDefinition[];
41
+ outputFormat: string;
42
+ need: string;
43
+ capability: CapabilityTier;
44
+ spendCaps: OutcomeSpendCaps;
45
+ promptVersion: string;
46
+ effort?: OutcomeEffort;
47
+ guardrailTier?: OutcomeGuardrailTier;
48
+ status?: OutcomeTemplateStatus;
49
+ contextInjection?: OutcomeContextInjection[];
50
+ blockedOrigins?: string[];
51
+ premiumAgent?: string;
52
+ disclaimer?: string;
53
+ qualityGate?: OutcomeQualityGateConfig;
54
+ }
55
+ export interface OutcomeExecutionContext {
56
+ scope: SpendScope;
57
+ customerId?: string;
58
+ posture?: string;
59
+ budgetTier?: string;
60
+ imageCapable?: boolean;
61
+ context?: Record<string, string>;
62
+ reviewerCascadeAuto?: boolean;
63
+ }
64
+ export interface OutcomeModelRequest {
65
+ role: OutcomeRole;
66
+ model: string;
67
+ vertical: string;
68
+ outcome: string;
69
+ promptVersion: string;
70
+ systemPrompt: string;
71
+ userPrompt: string;
72
+ outputFormat: string;
73
+ metadata: Record<string, string | number | boolean>;
74
+ }
75
+ export interface OutcomeModelResponse {
76
+ text: string;
77
+ inputTokens?: number;
78
+ outputTokens?: number;
79
+ costCents?: number;
80
+ qualityScore?: number;
81
+ confidence?: number;
82
+ verdict?: string;
83
+ durationMs?: number;
84
+ provenance?: Record<string, string | number | boolean>;
85
+ }
86
+ export interface OutcomeModelRunner {
87
+ run(request: OutcomeModelRequest): Promise<OutcomeModelResponse>;
88
+ }
89
+ export interface OutcomeDecisionLink {
90
+ role: OutcomeRole;
91
+ decisionId: string;
92
+ entryHash?: string;
93
+ modelRequested: string;
94
+ modelResolved: string;
95
+ projectedCents: number;
96
+ actualCents: number;
97
+ inputTokens: number;
98
+ outputTokens: number;
99
+ }
100
+ export interface OutcomeRuntimeReceipt {
101
+ receiptId: string;
102
+ timestamp: string;
103
+ vertical: string;
104
+ outcome: string;
105
+ promptVersion: string;
106
+ customerId?: string;
107
+ scopeKey: string;
108
+ status: OutcomeStatus;
109
+ drafter: {
110
+ model: string;
111
+ decisionId?: string;
112
+ costCents: number;
113
+ inputTokens: number;
114
+ outputTokens: number;
115
+ };
116
+ reviewer: {
117
+ model: string;
118
+ decisionId?: string;
119
+ costCents: number;
120
+ inputTokens: number;
121
+ outputTokens: number;
122
+ verdict: string;
123
+ } | null;
124
+ fallback: {
125
+ model: string;
126
+ decisionId?: string;
127
+ reason: string;
128
+ } | null;
129
+ triggerFired: string[];
130
+ qualityScore: number;
131
+ pass: boolean;
132
+ totalCostCents: number;
133
+ durationMs: number;
134
+ decisionLinks: OutcomeDecisionLink[];
135
+ metadata: {
136
+ need: string;
137
+ capability: CapabilityTier;
138
+ posture: string;
139
+ budgetTier: string;
140
+ blockedOrigins: string[];
141
+ effort: OutcomeEffort;
142
+ drafterEffort: OutcomeEffort;
143
+ reviewerEffort: OutcomeEffort;
144
+ provenance: Record<string, string | number | boolean>;
145
+ };
146
+ }
147
+ export interface OutcomeReceiptStore {
148
+ append(receipt: OutcomeRuntimeReceipt): Promise<void>;
149
+ readAll(): Promise<OutcomeRuntimeReceipt[]>;
150
+ }
151
+ export declare class InMemoryOutcomeReceiptStore implements OutcomeReceiptStore {
152
+ private readonly receipts;
153
+ append(receipt: OutcomeRuntimeReceipt): Promise<void>;
154
+ readAll(): Promise<OutcomeRuntimeReceipt[]>;
155
+ }
156
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/outcomes/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InMemoryOutcomeReceiptStore = void 0;
4
+ class InMemoryOutcomeReceiptStore {
5
+ receipts = [];
6
+ async append(receipt) {
7
+ this.receipts.push(receipt);
8
+ }
9
+ async readAll() {
10
+ return [...this.receipts];
11
+ }
12
+ }
13
+ exports.InMemoryOutcomeReceiptStore = InMemoryOutcomeReceiptStore;
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/outcomes/types.ts"],"names":[],"mappings":";;;AAqKA,MAAa,2BAA2B;IACrB,QAAQ,GAA4B,EAAE,CAAC;IAExD,KAAK,CAAC,MAAM,CAAC,OAA8B;QACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;CACF;AAVD,kEAUC"}
package/dist/router.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * AgentGuard(TM) Spend: outcome model router.
2
+ * AgentGuard Spend: outcome model router.
3
3
  *
4
4
  * The router is local config-as-data. It never sends prompts, completions,
5
5
  * provider keys, policies, or customer data to AgentGuard infrastructure.
@@ -20,11 +20,15 @@ export interface RouterDefault {
20
20
  vertical: string;
21
21
  outcome: string;
22
22
  need: string;
23
+ effort?: 'low' | 'medium' | 'high' | 'xhigh';
24
+ reviewer_effort?: 'low' | 'medium' | 'high' | 'xhigh';
23
25
  drafter: string;
24
26
  reviewer: string;
25
27
  vision_model?: string;
26
28
  allowed_models: readonly string[];
27
29
  blocked_origins: readonly string[];
30
+ guardrail_tier?: string;
31
+ status?: string;
28
32
  }
29
33
  export interface RecommendOptions {
30
34
  vertical?: string;
@@ -41,6 +45,9 @@ export interface ModelRouteRecommendation {
41
45
  need: string;
42
46
  posture: string;
43
47
  budgetTier: string;
48
+ effort: 'low' | 'medium' | 'high' | 'xhigh';
49
+ drafterEffort: 'low' | 'medium' | 'high' | 'xhigh';
50
+ reviewerEffort: 'low' | 'medium' | 'high' | 'xhigh';
44
51
  drafter: string;
45
52
  reviewer: string;
46
53
  visionModel: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAsaD,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,wBAAwB,CA0BlF;AAQD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAKrE"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7C,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACnD,cAAc,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AA4lCD,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,wBAAwB,CA+BlF;AAaD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAKrE"}