@agentguard-run/spend 0.13.3 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cli/hermes-kanban.d.ts +2 -0
  3. package/dist/cli/hermes-kanban.d.ts.map +1 -0
  4. package/dist/cli/hermes-kanban.js +86 -0
  5. package/dist/cli/hermes-kanban.js.map +1 -0
  6. package/dist/cli/main.d.ts.map +1 -1
  7. package/dist/cli/main.js +5 -0
  8. package/dist/cli/main.js.map +1 -1
  9. package/dist/cli/serve.d.ts +1 -0
  10. package/dist/cli/serve.d.ts.map +1 -1
  11. package/dist/cli/serve.js +8 -4
  12. package/dist/cli/serve.js.map +1 -1
  13. package/dist/frameworks/hermes-kanban.d.ts +131 -0
  14. package/dist/frameworks/hermes-kanban.d.ts.map +1 -0
  15. package/dist/frameworks/hermes-kanban.js +486 -0
  16. package/dist/frameworks/hermes-kanban.js.map +1 -0
  17. package/dist/frameworks/index.d.ts +1 -0
  18. package/dist/frameworks/index.d.ts.map +1 -1
  19. package/dist/frameworks/index.js +1 -0
  20. package/dist/frameworks/index.js.map +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +1 -1
  23. package/dist/telemetry.js +1 -1
  24. package/dist/workflow/context.d.ts.map +1 -1
  25. package/dist/workflow/context.js +6 -3
  26. package/dist/workflow/context.js.map +1 -1
  27. package/dist/workflow/receipt.d.ts +22 -6
  28. package/dist/workflow/receipt.d.ts.map +1 -1
  29. package/dist/workflow/receipt.js +109 -22
  30. package/dist/workflow/receipt.js.map +1 -1
  31. package/dist/workflow/types.d.ts +7 -0
  32. package/dist/workflow/types.d.ts.map +1 -1
  33. package/package.json +6 -1
  34. package/src/frameworks/hermes-kanban.ts +622 -0
  35. package/src/frameworks/index.ts +1 -0
  36. package/src/workflow/context.ts +6 -3
  37. package/src/workflow/receipt.ts +134 -30
  38. package/src/workflow/types.ts +7 -0
@@ -0,0 +1,486 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HermesKanbanAdapter = void 0;
4
+ exports.createHermesKanbanAdapter = createHermesKanbanAdapter;
5
+ exports.hermesKanbanSignerFingerprint = hermesKanbanSignerFingerprint;
6
+ const crypto_1 = require("crypto");
7
+ const cost_table_1 = require("../cost-table");
8
+ const decision_log_1 = require("../decision-log");
9
+ const dag_1 = require("../receipts/dag");
10
+ const spend_guard_1 = require("../spend-guard");
11
+ const common_1 = require("./common");
12
+ const DEFAULT_PROFILE_MAP = {
13
+ researcher: { capability: 'READ_ONLY', toolAllowlist: ['web.fetch', 'file.read', 'notes.read', 'search.query'] },
14
+ writer: { capability: 'TRANSACT', toolAllowlist: ['draft.create', 'file.write', 'notes.write', 'email.draft'] },
15
+ reviewer: { capability: 'READ_ONLY', toolAllowlist: ['review.read', 'notes.read', 'decision.record'] },
16
+ director: { capability: 'ORCHESTRATE', toolAllowlist: ['task.assign', 'board.plan', 'decision.record'] },
17
+ orchestrator: { capability: 'ORCHESTRATE', toolAllowlist: ['task.assign', 'board.plan', 'decision.record'] },
18
+ };
19
+ const CAPABILITY_RANK = {
20
+ READ_ONLY: 0,
21
+ TRANSACT: 1,
22
+ ADMIN: 2,
23
+ ORCHESTRATE: 3,
24
+ };
25
+ const DATA_PLANE_KEYS = /^(title|summary|prompt|completion|content|messages|input|output|text|raw|source|notes|draft|body|transcript)$/i;
26
+ const SAFE_METADATA_KEYS = new Set([
27
+ 'assignee',
28
+ 'board_hash',
29
+ 'duration_ms',
30
+ 'event',
31
+ 'model',
32
+ 'model_id',
33
+ 'outcome',
34
+ 'priority',
35
+ 'profile',
36
+ 'provider',
37
+ 'risk_score',
38
+ 'state',
39
+ 'task_id',
40
+ 'ticket_id',
41
+ 'token_count',
42
+ 'workflow_id',
43
+ ]);
44
+ function createHermesKanbanAdapter(opts) {
45
+ return new HermesKanbanAdapter(opts);
46
+ }
47
+ class HermesKanbanAdapter {
48
+ opts;
49
+ taskGuards = new Map();
50
+ envelopes = new Map();
51
+ nodesByTaskId = new Map();
52
+ nodes = [];
53
+ profileMap;
54
+ config;
55
+ constructor(opts) {
56
+ this.opts = opts;
57
+ this.profileMap = { ...DEFAULT_PROFILE_MAP, ...(opts.profileMap ?? {}) };
58
+ this.config = opts.config ?? {};
59
+ }
60
+ governTask(input) {
61
+ assertTaskInput(input);
62
+ const profilePolicy = this.profilePolicy(input.profile);
63
+ const capCents = capForTask(input, profilePolicy, this.opts);
64
+ const boardHash = hashValue(input.boardSlug);
65
+ const taskHash = hashValue(input.taskId);
66
+ const scope = { ...this.opts.scope, taskId: input.taskId };
67
+ const envelope = {
68
+ taskId: input.taskId,
69
+ taskHash,
70
+ boardHash,
71
+ profile: normalizeProfile(input.profile),
72
+ state: 'governed',
73
+ capabilityCeiling: profilePolicy.capability,
74
+ toolAllowlist: [...(profilePolicy.toolAllowlist ?? [])],
75
+ capCents,
76
+ parentTaskIds: [...new Set(input.parentTaskIds ?? [])],
77
+ parentEntryHashes: [],
78
+ scope,
79
+ builderCode: safeBuilderCode(input.builderCode),
80
+ createdAt: new Date().toISOString(),
81
+ };
82
+ const taskPolicy = {
83
+ ...this.opts.policy,
84
+ id: `${this.opts.policy.id}:hermes-kanban:${taskHash.slice(0, 12)}`,
85
+ name: `${this.opts.policy.name} Hermes Kanban task`,
86
+ scope,
87
+ caps: [{ window: 'per_day', amountCents: capCents, action: 'block', reason: 'Hermes Kanban task cap' }],
88
+ requiredCapability: spendCapabilityForReceiptCapability(profilePolicy.capability),
89
+ };
90
+ this.envelopes.set(input.taskId, envelope);
91
+ this.taskGuards.set(input.taskId, new spend_guard_1.SpendGuard({
92
+ policy: taskPolicy,
93
+ ...this.config,
94
+ licenseKey: this.opts.licenseKey ?? this.config.licenseKey,
95
+ }));
96
+ return { ...envelope };
97
+ }
98
+ async enforceProviderCall(input) {
99
+ const envelope = this.requireEnvelope(input.taskId);
100
+ assertActive(envelope);
101
+ assertMetadataOnly(input.metadata ?? {});
102
+ validateTokens(input.inputTokens, input.outputTokens);
103
+ const guard = this.requireGuard(input.taskId);
104
+ const model = safeLabel(input.model) ?? this.opts.defaultModel ?? 'openai/gpt-4o-mini';
105
+ const call = {
106
+ provider: input.provider ?? (0, cost_table_1.inferProvider)(model),
107
+ model,
108
+ inputTokens: input.inputTokens,
109
+ outputTokens: input.outputTokens,
110
+ scope: envelope.scope,
111
+ workflowId: envelope.boardHash,
112
+ subagentId: envelope.taskId,
113
+ label: 'hermes-kanban',
114
+ capabilityClaim: spendCapabilityForReceiptCapability(envelope.capabilityCeiling),
115
+ requestShape: (0, common_1.safeRequestShape)({
116
+ framework: 'hermes-kanban',
117
+ event: 'provider-call',
118
+ taskId: envelope.taskId,
119
+ taskHash: envelope.taskHash,
120
+ boardHash: envelope.boardHash,
121
+ profile: envelope.profile,
122
+ metadata: filterReceiptMetadata(input.metadata ?? {}),
123
+ }),
124
+ };
125
+ const { decision, signed } = await guard.decide(call);
126
+ return { allow: decision.action !== 'block', decision, signed };
127
+ }
128
+ async guardCapability(input) {
129
+ const envelope = this.requireEnvelope(input.taskId);
130
+ assertActive(envelope);
131
+ assertMetadataOnly(input.toolArgs ?? {});
132
+ if (CAPABILITY_RANK[input.requestedCapability] > CAPABILITY_RANK[envelope.capabilityCeiling]) {
133
+ return {
134
+ approved: false,
135
+ reason: `Hermes Kanban profile ${envelope.profile} is capped at ${envelope.capabilityCeiling}`,
136
+ };
137
+ }
138
+ if (input.toolName && envelope.toolAllowlist.length > 0 && !toolAllowed(input.toolName, envelope.toolAllowlist)) {
139
+ return { approved: false, reason: `Tool ${input.toolName} is outside the Hermes Kanban profile allowlist` };
140
+ }
141
+ const gate = await this.requireGuard(input.taskId).guardToolCall({
142
+ toolName: input.toolName ?? 'hermes-kanban.tool',
143
+ toolArgs: (0, common_1.safeRequestShape)(input.toolArgs ?? {}),
144
+ workflowId: envelope.boardHash,
145
+ scope: envelope.scope,
146
+ });
147
+ return {
148
+ approved: gate.approved,
149
+ reason: gate.decision.reasons.join('; '),
150
+ signed: gate.signed,
151
+ decision: gate.decision,
152
+ editedArgs: gate.editedArgs,
153
+ };
154
+ }
155
+ async revokeTask(taskId) {
156
+ const envelope = this.requireEnvelope(taskId);
157
+ if (envelope.state === 'revoked')
158
+ return this.receiptResult(envelope, this.requireNode(taskId));
159
+ envelope.state = 'revoked';
160
+ envelope.revokedAt = new Date().toISOString();
161
+ const node = await this.signTaskNode(envelope, {
162
+ event: 'revoked',
163
+ action: 'block',
164
+ blocked: true,
165
+ capability: envelope.capabilityCeiling,
166
+ trustScore: 0.7,
167
+ });
168
+ this.nodesByTaskId.set(taskId, node);
169
+ this.nodes.push(node);
170
+ return this.receiptResult(envelope, node);
171
+ }
172
+ async emitTaskReceipt(input) {
173
+ const envelope = this.requireEnvelope(input.taskId);
174
+ assertActive(envelope);
175
+ assertMetadataOnly(input.metadata ?? {});
176
+ envelope.state = 'completed';
177
+ envelope.completedAt = new Date().toISOString();
178
+ const parentTaskIds = [...new Set(input.parentTaskIds ?? envelope.parentTaskIds)];
179
+ const parentNodes = parentTaskIds.map((id) => this.nodesByTaskId.get(id)).filter(Boolean);
180
+ envelope.parentEntryHashes = parentNodes.map((node) => node.entryHash);
181
+ const capability = input.capability ?? envelope.capabilityCeiling;
182
+ const triggers = reviewerCascadeTriggers(envelope, input, this.opts);
183
+ const node = await this.signTaskNode(envelope, {
184
+ event: 'completed',
185
+ action: 'allow',
186
+ blocked: false,
187
+ capability,
188
+ trustScore: triggers.length > 0 ? 0.9 : 0.94,
189
+ parentNodes,
190
+ metadata: input.metadata,
191
+ modelIds: input.modelIds,
192
+ tokenCounts: input.tokenCounts,
193
+ totalCostCents: input.totalCostCents,
194
+ reviewerCascade: triggers.length > 0 ? buildReviewerCascadeReceipt(input, this.opts, triggers) : undefined,
195
+ });
196
+ this.nodesByTaskId.set(input.taskId, node);
197
+ this.nodes.push(node);
198
+ return this.receiptResult(envelope, node);
199
+ }
200
+ getEnvelope(taskId) {
201
+ const envelope = this.envelopes.get(taskId);
202
+ return envelope ? { ...envelope, parentTaskIds: [...envelope.parentTaskIds], parentEntryHashes: [...envelope.parentEntryHashes], toolAllowlist: [...envelope.toolAllowlist] } : null;
203
+ }
204
+ getReceiptDag(rootTaskId) {
205
+ const root = rootTaskId ? this.nodesByTaskId.get(rootTaskId) : this.nodes[this.nodes.length - 1];
206
+ return {
207
+ nodes: [...this.nodes],
208
+ rootId: root?.entryHash ?? '0'.repeat(64),
209
+ workflowId: this.nodes[0]?.workflowId ?? null,
210
+ };
211
+ }
212
+ outboundPayloads() {
213
+ return [];
214
+ }
215
+ async verifyDag(publicKeyHex) {
216
+ const key = publicKeyHex ?? this.publicKeyHex();
217
+ return (0, dag_1.verifyReceiptDag)(this.getReceiptDag(), key);
218
+ }
219
+ async signTaskNode(envelope, args) {
220
+ if (!this.config.signingKeys)
221
+ throw new Error('Hermes Kanban receipts require signingKeys');
222
+ const parentNodes = args.parentNodes ?? [];
223
+ const decision = taskDecision(envelope, args, this.opts.policy);
224
+ return (0, dag_1.signDagNode)({
225
+ sequence: this.nodes.length,
226
+ decision,
227
+ privateKey: this.config.signingKeys.privateKey,
228
+ publicKey: this.config.signingKeys.publicKey,
229
+ parents: parentNodes,
230
+ workflowId: envelope.boardHash,
231
+ trustScore: args.trustScore,
232
+ blocked: args.blocked,
233
+ capability: args.capability,
234
+ builderCode: envelope.builderCode ?? null,
235
+ });
236
+ }
237
+ receiptResult(envelope, node) {
238
+ return {
239
+ node,
240
+ envelope: { ...envelope, parentTaskIds: [...envelope.parentTaskIds], parentEntryHashes: [...envelope.parentEntryHashes], toolAllowlist: [...envelope.toolAllowlist] },
241
+ dag: this.getReceiptDag(envelope.taskId),
242
+ };
243
+ }
244
+ requireEnvelope(taskId) {
245
+ const envelope = this.envelopes.get(taskId);
246
+ if (!envelope)
247
+ throw new Error(`Unknown Hermes Kanban task ${taskId}`);
248
+ return envelope;
249
+ }
250
+ requireGuard(taskId) {
251
+ const guard = this.taskGuards.get(taskId);
252
+ if (!guard)
253
+ throw new Error(`Unknown Hermes Kanban task ${taskId}`);
254
+ return guard;
255
+ }
256
+ requireNode(taskId) {
257
+ const node = this.nodesByTaskId.get(taskId);
258
+ if (!node)
259
+ throw new Error(`Hermes Kanban task ${taskId} has no receipt`);
260
+ return node;
261
+ }
262
+ profilePolicy(profile) {
263
+ return this.profileMap[normalizeProfile(profile)] ?? { capability: 'READ_ONLY', toolAllowlist: [] };
264
+ }
265
+ publicKeyHex() {
266
+ if (!this.config.signingKeys)
267
+ throw new Error('Hermes Kanban receipts require signingKeys');
268
+ return Buffer.from(this.config.signingKeys.publicKey).toString('hex');
269
+ }
270
+ }
271
+ exports.HermesKanbanAdapter = HermesKanbanAdapter;
272
+ function taskDecision(envelope, args, policy) {
273
+ const parentNodes = args.parentNodes ?? [];
274
+ const inputTokens = safeNonNegativeInteger(args.tokenCounts?.inputTokens);
275
+ const outputTokens = safeNonNegativeInteger(args.tokenCounts?.outputTokens);
276
+ const totalCostCents = safeNonNegativeInteger(args.totalCostCents);
277
+ const receipt = {
278
+ type: 'hermes_kanban_task',
279
+ event: args.event,
280
+ taskId: envelope.taskId,
281
+ taskHash: envelope.taskHash,
282
+ boardHash: envelope.boardHash,
283
+ profile: envelope.profile,
284
+ capability: args.capability,
285
+ capabilityCeiling: envelope.capabilityCeiling,
286
+ state: envelope.state,
287
+ parentTaskIds: [...envelope.parentTaskIds],
288
+ parentEntryHashes: parentNodes.map((node) => node.entryHash),
289
+ parentMsgHashes: parentNodes.map((node) => node.msgHash),
290
+ modelIds: safeModelIds(args.modelIds ?? []),
291
+ inputTokens,
292
+ outputTokens,
293
+ totalCostCents,
294
+ metadata: filterReceiptMetadata(args.metadata ?? {}),
295
+ };
296
+ if (args.reviewerCascade)
297
+ receipt.reviewerCascade = args.reviewerCascade;
298
+ const decision = {
299
+ decisionId: (0, crypto_1.randomUUID)(),
300
+ timestamp: new Date().toISOString(),
301
+ action: args.action,
302
+ triggeredCap: null,
303
+ triggeredScopeKey: null,
304
+ projectedCents: totalCostCents,
305
+ windowSpendBefore: 0,
306
+ windowSpendAfter: totalCostCents,
307
+ provider: 'unknown',
308
+ modelRequested: 'hermes-kanban',
309
+ modelResolved: 'hermes-kanban',
310
+ policyId: policy.id,
311
+ policyVersion: policy.version,
312
+ enforcementMode: policy.mode,
313
+ reasons: [`Hermes Kanban task ${args.event}: ${envelope.taskId}`],
314
+ entryType: 'outcome',
315
+ outcomeReceipt: receipt,
316
+ };
317
+ if (envelope.builderCode)
318
+ decision.builderCode = envelope.builderCode;
319
+ return decision;
320
+ }
321
+ function buildReviewerCascadeReceipt(input, opts, triggers) {
322
+ const cascade = opts.reviewerCascade ?? {};
323
+ return {
324
+ outcome: safeLabel(input.metadata?.outcome) ?? 'hermes_kanban_task',
325
+ drafter: {
326
+ model: cascade.drafterModel ?? opts.defaultModel ?? 'openai/gpt-4o-mini',
327
+ maxCostCents: safeNonNegativeInteger(cascade.drafterMaxCostCents ?? 25),
328
+ },
329
+ reviewer: {
330
+ model: cascade.reviewerModel ?? 'anthropic/claude-sonnet-4-6',
331
+ maxCostCents: safeNonNegativeInteger(cascade.reviewerMaxCostCents ?? 75),
332
+ },
333
+ triggerFired: triggers,
334
+ reviewerVerdict: input.reviewerVerdict ?? 'review_required',
335
+ };
336
+ }
337
+ function reviewerCascadeTriggers(envelope, input, opts) {
338
+ if (opts.reviewerCascade?.enabled === false)
339
+ return [];
340
+ const threshold = opts.reviewerCascade?.highRiskThreshold ?? 0.55;
341
+ const triggers = [];
342
+ if (envelope.profile === 'reviewer')
343
+ triggers.push('reviewer_profile');
344
+ if (typeof input.highRiskClassifierScore === 'number' && input.highRiskClassifierScore >= threshold)
345
+ triggers.push(`risk_score_above:${threshold}`);
346
+ if (input.keywordRisk === true)
347
+ triggers.push('keyword_prefilter');
348
+ return [...new Set(triggers)];
349
+ }
350
+ function capForTask(input, profilePolicy, opts) {
351
+ if (Number.isSafeInteger(profilePolicy.capCents) && profilePolicy.capCents >= 0)
352
+ return profilePolicy.capCents;
353
+ const runtimeMinutes = runtimeMinutesFor(input);
354
+ const runtimeBudget = opts.runtimeBudgetCentsPerMinute ?? 10;
355
+ const cap = Math.ceil(runtimeMinutes * runtimeBudget);
356
+ return Math.max(1, Math.min(cap, opts.defaultCapCents ?? cap));
357
+ }
358
+ function runtimeMinutesFor(input) {
359
+ if (Number.isFinite(input.maxRuntimeMinutes) && input.maxRuntimeMinutes > 0)
360
+ return input.maxRuntimeMinutes;
361
+ if (Number.isFinite(input.maxRuntimeMs) && input.maxRuntimeMs > 0)
362
+ return input.maxRuntimeMs / 60_000;
363
+ return 5;
364
+ }
365
+ function spendCapabilityForReceiptCapability(capability) {
366
+ if (capability === 'ORCHESTRATE')
367
+ return 'payment_execute';
368
+ if (capability === 'ADMIN')
369
+ return 'payment_initiate';
370
+ if (capability === 'TRANSACT')
371
+ return 'data_write';
372
+ return 'read_only';
373
+ }
374
+ function assertTaskInput(input) {
375
+ assertPlainRecord(input, 'task');
376
+ const allowed = new Set(['taskId', 'boardSlug', 'profile', 'parentTaskIds', 'maxRuntimeMinutes', 'maxRuntimeMs', 'metadata', 'builderCode']);
377
+ for (const key of Object.keys(input)) {
378
+ if (!allowed.has(key))
379
+ throw new Error(`Hermes Kanban task input cannot include data-plane or unknown field: ${key}`);
380
+ }
381
+ if (!safeLabel(input.taskId))
382
+ throw new Error('Hermes Kanban taskId is required');
383
+ if (!safeLabel(input.boardSlug))
384
+ throw new Error('Hermes Kanban boardSlug is required');
385
+ if (!safeLabel(input.profile))
386
+ throw new Error('Hermes Kanban profile is required');
387
+ assertMetadataOnly(input.metadata ?? {});
388
+ for (const parent of input.parentTaskIds ?? []) {
389
+ if (!safeLabel(parent))
390
+ throw new Error('Hermes Kanban parent task id must be a metadata identifier');
391
+ }
392
+ }
393
+ function assertMetadataOnly(value, path = 'metadata') {
394
+ if (value == null)
395
+ return;
396
+ if (Array.isArray(value)) {
397
+ for (let i = 0; i < value.length; i++)
398
+ assertMetadataOnly(value[i], `${path}[${i}]`);
399
+ return;
400
+ }
401
+ if (typeof value !== 'object')
402
+ return;
403
+ for (const [key, child] of Object.entries(value)) {
404
+ if (DATA_PLANE_KEYS.test(key))
405
+ throw new Error(`Hermes Kanban metadata cannot include data-plane field: ${path}.${key}`);
406
+ assertMetadataOnly(child, `${path}.${key}`);
407
+ }
408
+ }
409
+ function assertPlainRecord(value, name) {
410
+ if (!value || typeof value !== 'object' || Array.isArray(value))
411
+ throw new Error(`Hermes Kanban ${name} must be an object`);
412
+ }
413
+ function assertActive(envelope) {
414
+ if (envelope.state === 'revoked')
415
+ throw new spend_guard_1.AgentGuardBlockedError(blockedDecision(envelope, 'revoked'), envelope.scope);
416
+ if (envelope.state === 'completed')
417
+ throw new spend_guard_1.AgentGuardBlockedError(blockedDecision(envelope, 'completed'), envelope.scope);
418
+ }
419
+ function blockedDecision(envelope, state) {
420
+ return {
421
+ decisionId: (0, crypto_1.randomUUID)(),
422
+ timestamp: new Date().toISOString(),
423
+ action: 'block',
424
+ triggeredCap: null,
425
+ triggeredScopeKey: null,
426
+ projectedCents: 0,
427
+ windowSpendBefore: 0,
428
+ windowSpendAfter: 0,
429
+ provider: 'unknown',
430
+ modelRequested: 'hermes-kanban',
431
+ modelResolved: 'hermes-kanban',
432
+ policyId: 'hermes-kanban',
433
+ policyVersion: 1,
434
+ enforcementMode: 'enforce',
435
+ reasons: [`Hermes Kanban task ${envelope.taskId} is ${state}`],
436
+ };
437
+ }
438
+ function filterReceiptMetadata(metadata) {
439
+ assertMetadataOnly(metadata);
440
+ const out = {};
441
+ for (const [key, value] of Object.entries(metadata)) {
442
+ if (!SAFE_METADATA_KEYS.has(key))
443
+ continue;
444
+ if (value == null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
445
+ out[key] = value;
446
+ }
447
+ }
448
+ return out;
449
+ }
450
+ function validateTokens(inputTokens, outputTokens) {
451
+ if (!Number.isSafeInteger(inputTokens) || inputTokens < 0)
452
+ throw new Error('inputTokens must be a non-negative safe integer');
453
+ if (!Number.isSafeInteger(outputTokens) || outputTokens < 0)
454
+ throw new Error('outputTokens must be a non-negative safe integer');
455
+ }
456
+ function hashValue(value) {
457
+ return (0, decision_log_1.sha256Hex)((0, decision_log_1.canonicalJson)({ value }));
458
+ }
459
+ function normalizeProfile(profile) {
460
+ return profile.trim().toLowerCase().replace(/[^a-z0-9_.:-]/g, '_');
461
+ }
462
+ function safeLabel(value) {
463
+ if (typeof value !== 'string')
464
+ return undefined;
465
+ const trimmed = value.trim();
466
+ if (!trimmed || !/^[A-Za-z0-9_.:/-]{1,160}$/.test(trimmed))
467
+ return undefined;
468
+ return trimmed;
469
+ }
470
+ function safeBuilderCode(value) {
471
+ const label = safeLabel(value);
472
+ return label ? label.slice(0, 64) : undefined;
473
+ }
474
+ function safeModelIds(models) {
475
+ return models.map((model) => safeLabel(model)).filter(Boolean);
476
+ }
477
+ function safeNonNegativeInteger(value) {
478
+ return Number.isSafeInteger(value) && value >= 0 ? value : 0;
479
+ }
480
+ function toolAllowed(toolName, allowlist) {
481
+ return allowlist.some((allowed) => toolName === allowed || toolName.startsWith(`${allowed}.`));
482
+ }
483
+ function hermesKanbanSignerFingerprint(opts) {
484
+ return opts.config?.signingKeys ? (0, decision_log_1.computeSignerFingerprint)(opts.config.signingKeys.publicKey) : null;
485
+ }
486
+ //# sourceMappingURL=hermes-kanban.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-kanban.js","sourceRoot":"","sources":["../../src/frameworks/hermes-kanban.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,5 @@ export * from './openrouter';
3
3
  export * from './vercel-ai';
4
4
  export * from './claude-code';
5
5
  export * from './hermes';
6
+ export * from './hermes-kanban';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/frameworks/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/frameworks/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC"}
@@ -19,4 +19,5 @@ __exportStar(require("./openrouter"), exports);
19
19
  __exportStar(require("./vercel-ai"), exports);
20
20
  __exportStar(require("./claude-code"), exports);
21
21
  __exportStar(require("./hermes"), exports);
22
+ __exportStar(require("./hermes-kanban"), exports);
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/frameworks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,+CAA6B;AAC7B,8CAA4B;AAC5B,gDAA8B;AAC9B,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/frameworks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,+CAA6B;AAC7B,8CAA4B;AAC5B,gDAA8B;AAC9B,2CAAyB;AACzB,kDAAgC"}
package/dist/index.d.ts CHANGED
@@ -33,7 +33,7 @@ export { withSpendGuardAnthropic, type AnthropicBindingOptions } from './binding
33
33
  export { withSpendGuardBedrock, type BedrockBindingOptions } from './bindings/bedrock';
34
34
  export { recommend, defaultKey, type ModelRouteRecommendation, type RecommendOptions } from './router';
35
35
  export { DEFAULT_LOCALE, SUPPORTED_LOCALES, TRANSLATIONS, type SupportedLocale, resolveLocale, t, formatBlockedTrace, type BlockedTraceArgs, } from './i18n';
36
- export declare const AGENTGUARD_SPEND_VERSION = "0.13.3";
36
+ export declare const AGENTGUARD_SPEND_VERSION = "0.14.1";
37
37
  export declare const agentguard: {
38
38
  workflow: typeof runWorkflow;
39
39
  };
package/dist/index.js CHANGED
@@ -161,7 +161,7 @@ Object.defineProperty(exports, "TRANSLATIONS", { enumerable: true, get: function
161
161
  Object.defineProperty(exports, "resolveLocale", { enumerable: true, get: function () { return i18n_1.resolveLocale; } });
162
162
  Object.defineProperty(exports, "t", { enumerable: true, get: function () { return i18n_1.t; } });
163
163
  Object.defineProperty(exports, "formatBlockedTrace", { enumerable: true, get: function () { return i18n_1.formatBlockedTrace; } });
164
- exports.AGENTGUARD_SPEND_VERSION = '0.13.3';
164
+ exports.AGENTGUARD_SPEND_VERSION = '0.14.1';
165
165
  exports.agentguard = {
166
166
  workflow: context_1.workflow,
167
167
  };
package/dist/telemetry.js CHANGED
@@ -43,7 +43,7 @@ const https = __importStar(require("https"));
43
43
  const os = __importStar(require("os"));
44
44
  const path = __importStar(require("path"));
45
45
  const crypto_1 = require("crypto");
46
- const AGENTGUARD_SPEND_VERSION = '0.13.1';
46
+ const AGENTGUARD_SPEND_VERSION = '0.14.1';
47
47
  const STATE_DIR = path.join(os.homedir(), '.agentguard');
48
48
  const INSTALL_PATH = path.join(STATE_DIR, 'install.json');
49
49
  const BEACON_URL = 'https://agentguard.run/api/beacon';
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/workflow/context.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE3G,UAAU,sBAAsB;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;CACxB;AAED,qBAAa,eAAe;IAC1B,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,MAAM,EAAE,cAAc,CAAC;IACvC,SAAgB,UAAU,EAAE,IAAI,CAAC;IAEjC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAE7C,OAAO;WA0BM,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IA2CrE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,SAAe,GAAG,eAAe;IAgBjH,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAqC1D,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAItD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B,MAAM,IAAI,cAAc;IAoBxB,QAAQ,IAAI,SAAS,EAAE;YAIT,eAAe;YAuBf,iBAAiB;IAoB/B,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,uBAAuB;YAYjB,iBAAiB;IAY/B,OAAO,CAAC,kBAAkB;YAUZ,WAAW;CAK1B;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAO9G"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/workflow/context.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE3G,UAAU,sBAAsB;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;CACxB;AAED,qBAAa,eAAe;IAC1B,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,MAAM,EAAE,cAAc,CAAC;IACvC,SAAgB,UAAU,EAAE,IAAI,CAAC;IAEjC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAE7C,OAAO;WA0BM,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IA2CrE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,SAAe,GAAG,eAAe;IAgBjH,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAsC1D,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAItD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B,MAAM,IAAI,cAAc;IAoBxB,QAAQ,IAAI,SAAS,EAAE;YAIT,eAAe;YAwBf,iBAAiB;IAqB/B,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,uBAAuB;YAYjB,iBAAiB;IAY/B,OAAO,CAAC,kBAAkB;YAUZ,WAAW;CAK1B;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAO9G"}
@@ -95,7 +95,7 @@ class WorkflowContext {
95
95
  const cost = this.extractOutcomeCost(result);
96
96
  const parentReceiptId = this._last_receipt_id;
97
97
  const chainHash = this._receipts.length ? await (0, chain_validator_1.computeChainHash)(this._receipts[this._receipts.length - 1]) : null;
98
- const receipt = (0, receipt_1.buildReceipt)({
98
+ const receipt = await (0, receipt_1.buildReceipt)({
99
99
  workflow_id: this.workflow_id,
100
100
  outcome_name: name,
101
101
  user_id: this.user_id,
@@ -105,6 +105,7 @@ class WorkflowContext {
105
105
  workflow_checkpoint_idx: null,
106
106
  workflow_total_spend_usd_to_date: this._total_spend_usd + cost,
107
107
  reviewer_cascade: extractReviewerCascade(result),
108
+ signingKeys: this.config.signingKeys,
108
109
  });
109
110
  this._receipts.push(receipt);
110
111
  this._total_spend_usd = (0, receipt_1.roundUsd)(this._total_spend_usd + cost);
@@ -155,7 +156,7 @@ class WorkflowContext {
155
156
  }
156
157
  async writeCheckpoint(label) {
157
158
  const chainHash = this._receipts.length ? await (0, chain_validator_1.computeChainHash)(this._receipts[this._receipts.length - 1]) : null;
158
- const checkpoint = (0, receipt_1.buildReceipt)({
159
+ const checkpoint = await (0, receipt_1.buildReceipt)({
159
160
  workflow_id: this.workflow_id,
160
161
  outcome_name: 'CHECKPOINT',
161
162
  user_id: this.user_id,
@@ -167,6 +168,7 @@ class WorkflowContext {
167
168
  is_checkpoint: true,
168
169
  checkpoint_label: label ?? null,
169
170
  receipt_type: 'checkpoint',
171
+ signingKeys: this.config.signingKeys,
170
172
  });
171
173
  this._receipts.push(checkpoint);
172
174
  this._last_checkpoint_id = checkpoint.receipt_id;
@@ -177,7 +179,7 @@ class WorkflowContext {
177
179
  }
178
180
  async writeFinalReceipt(type, reason) {
179
181
  const chainHash = this._receipts.length ? await (0, chain_validator_1.computeChainHash)(this._receipts[this._receipts.length - 1]) : null;
180
- const receipt = (0, receipt_1.buildReceipt)({
182
+ const receipt = await (0, receipt_1.buildReceipt)({
181
183
  workflow_id: this.workflow_id,
182
184
  outcome_name: type === 'completed' ? 'WORKFLOW_COMPLETED' : 'WORKFLOW_STOPPED',
183
185
  user_id: this.user_id,
@@ -188,6 +190,7 @@ class WorkflowContext {
188
190
  workflow_total_spend_usd_to_date: this._total_spend_usd,
189
191
  receipt_type: type === 'cancelled' ? 'cancel' : type,
190
192
  cancelled_reason: reason,
193
+ signingKeys: this.config.signingKeys,
191
194
  });
192
195
  this._receipts.push(receipt);
193
196
  this._last_receipt_id = receipt.receipt_id;