@dsh-enhanced/assistant-evaluation 0.1.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/lib/store.js ADDED
@@ -0,0 +1,488 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { isAbsolute, resolve } from 'node:path';
3
+ import { evaluationSchemaVersion, openEvaluationDatabase } from './sqlite.js';
4
+ import { deliveryStatuses, executionStatuses, objectiveStatuses, outcomeSourceKinds, outcomeTrustLevels, } from './types.js';
5
+ export class EvaluationStoreError extends Error {
6
+ code;
7
+ constructor(code, message) {
8
+ super(message);
9
+ this.code = code;
10
+ this.name = 'EvaluationStoreError';
11
+ }
12
+ }
13
+ const standardIntegerMetrics = new Set([
14
+ 'costUsdMicros', 'latencyMs', 'inputTokens', 'outputTokens', 'toolCalls', 'retries',
15
+ ]);
16
+ function boundedText(value, label, maxBytes) {
17
+ if (typeof value !== 'string')
18
+ throw new EvaluationStoreError('invalid-input', `${label} must be a string`);
19
+ const normalized = value.normalize('NFC').trim();
20
+ if (normalized === '' || Buffer.byteLength(normalized) > maxBytes) {
21
+ throw new EvaluationStoreError('invalid-input', `${label} must contain 1-${maxBytes} UTF-8 bytes`);
22
+ }
23
+ return normalized;
24
+ }
25
+ function timestamp(value, label) {
26
+ if (!Number.isSafeInteger(value) || value < 0) {
27
+ throw new EvaluationStoreError('invalid-input', `${label} must be a non-negative safe integer`);
28
+ }
29
+ return value;
30
+ }
31
+ export function canonicalEvaluationScope(input) {
32
+ const workspace = boundedText(input.workspace, 'scope.workspace', 4_096);
33
+ if (!isAbsolute(workspace)) {
34
+ throw new EvaluationStoreError('invalid-input', 'scope.workspace must be absolute');
35
+ }
36
+ const scope = Object.freeze({ workspace: resolve(workspace), preset: boundedText(input.preset, 'scope.preset', 200) });
37
+ return { scope, scopeKey: JSON.stringify([scope.workspace, scope.preset]) };
38
+ }
39
+ function canonicalJson(value, label, state, depth = 0) {
40
+ state.nodes += 1;
41
+ if (state.nodes > 128 || depth > 4) {
42
+ throw new EvaluationStoreError('invalid-input', `${label} exceeds the JSON complexity limit`);
43
+ }
44
+ if (value === null || typeof value === 'boolean')
45
+ return value;
46
+ if (typeof value === 'number') {
47
+ if (!Number.isFinite(value) || Math.abs(value) > Number.MAX_SAFE_INTEGER) {
48
+ throw new EvaluationStoreError('invalid-input', `${label} contains an invalid number`);
49
+ }
50
+ return value;
51
+ }
52
+ if (typeof value === 'string') {
53
+ const normalized = value.normalize('NFC');
54
+ if (Buffer.byteLength(normalized) > 256) {
55
+ throw new EvaluationStoreError('invalid-input', `${label} contains an oversized string`);
56
+ }
57
+ return normalized;
58
+ }
59
+ if (Array.isArray(value)) {
60
+ if (value.length > 32)
61
+ throw new EvaluationStoreError('invalid-input', `${label} contains an oversized array`);
62
+ return value.map((entry, index) => canonicalJson(entry, `${label}[${index}]`, state, depth + 1));
63
+ }
64
+ if (typeof value !== 'object' || value === undefined) {
65
+ throw new EvaluationStoreError('invalid-input', `${label} must contain JSON values only`);
66
+ }
67
+ const prototype = Object.getPrototypeOf(value);
68
+ if (prototype !== Object.prototype && prototype !== null) {
69
+ throw new EvaluationStoreError('invalid-input', `${label} must contain plain JSON objects only`);
70
+ }
71
+ const entries = Object.entries(value);
72
+ if (entries.length > 32)
73
+ throw new EvaluationStoreError('invalid-input', `${label} contains too many keys`);
74
+ const output = {};
75
+ for (const [rawKey, entry] of entries.sort(([left], [right]) => left.localeCompare(right))) {
76
+ const key = boundedText(rawKey, `${label} key`, 64);
77
+ if (['__proto__', 'constructor', 'prototype'].includes(key) || key in output) {
78
+ throw new EvaluationStoreError('invalid-input', `${label} contains an unsafe or duplicate key`);
79
+ }
80
+ if (entry === undefined)
81
+ throw new EvaluationStoreError('invalid-input', `${label}.${key} must be JSON`);
82
+ output[key] = canonicalJson(entry, `${label}.${key}`, state, depth + 1);
83
+ }
84
+ return output;
85
+ }
86
+ function metrics(input, maxBytes) {
87
+ const normalized = canonicalJson(input, 'metrics', { nodes: 0 });
88
+ if (Array.isArray(normalized) || normalized === null || typeof normalized !== 'object') {
89
+ throw new EvaluationStoreError('invalid-input', 'metrics must be a JSON object');
90
+ }
91
+ const object = normalized;
92
+ for (const key of standardIntegerMetrics) {
93
+ const value = object[key];
94
+ if (value !== undefined && (!Number.isSafeInteger(value) || value < 0)) {
95
+ throw new EvaluationStoreError('invalid-input', `metrics.${key} must be a non-negative safe integer`);
96
+ }
97
+ }
98
+ if (Buffer.byteLength(JSON.stringify(normalized)) > maxBytes) {
99
+ throw new EvaluationStoreError('invalid-input', `metrics exceeds the ${maxBytes}-byte limit`);
100
+ }
101
+ return Object.freeze(object);
102
+ }
103
+ function evidence(input, maximum) {
104
+ if (!Array.isArray(input) || input.length > maximum) {
105
+ throw new EvaluationStoreError('invalid-input', `evidence exceeds the ${maximum}-reference limit`);
106
+ }
107
+ return Object.freeze(input.map((entry, index) => {
108
+ if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) {
109
+ throw new EvaluationStoreError('invalid-input', `evidence[${index}] must be an object`);
110
+ }
111
+ const kind = boundedText(entry.kind, `evidence[${index}].kind`, 64);
112
+ const ref = boundedText(entry.ref, `evidence[${index}].ref`, 512);
113
+ const digest = entry.digest === undefined
114
+ ? undefined
115
+ : boundedText(entry.digest, `evidence[${index}].digest`, 128);
116
+ return Object.freeze({ kind, ref, ...(digest === undefined ? {} : { digest }) });
117
+ }));
118
+ }
119
+ function oneOf(value, values, label) {
120
+ if (typeof value !== 'string' || !values.includes(value)) {
121
+ throw new EvaluationStoreError('invalid-input', `${label} is invalid`);
122
+ }
123
+ return value;
124
+ }
125
+ function stored(row) {
126
+ return Object.freeze({
127
+ id: row.id,
128
+ idempotencyKey: row.idempotency_key,
129
+ scopeKey: row.scope_key,
130
+ scope: Object.freeze({ workspace: row.workspace, preset: row.preset }),
131
+ situation: row.situation,
132
+ executionStatus: row.execution_status,
133
+ objectiveStatus: row.objective_status,
134
+ deliveryStatus: row.delivery_status,
135
+ source: Object.freeze({ kind: row.source_kind, id: row.source_id }),
136
+ trust: row.trust,
137
+ evidence: Object.freeze(JSON.parse(row.evidence_json)),
138
+ metrics: Object.freeze(JSON.parse(row.metrics_json)),
139
+ occurredAt: row.occurred_at,
140
+ recordedAt: row.recorded_at,
141
+ evaluator: Object.freeze({ id: row.evaluator_id, version: row.evaluator_version }),
142
+ });
143
+ }
144
+ function selfAssessment(row) {
145
+ return Object.freeze({
146
+ id: row.id,
147
+ outcomeId: row.outcome_id,
148
+ idempotencyKey: row.idempotency_key,
149
+ scopeKey: row.scope_key,
150
+ scope: Object.freeze({ workspace: row.workspace, preset: row.preset }),
151
+ situation: row.situation,
152
+ executionStatus: row.execution_status,
153
+ objectiveStatus: row.objective_status,
154
+ deliveryStatus: row.delivery_status,
155
+ trust: 'self-reported',
156
+ evidence: Object.freeze(JSON.parse(row.evidence_json)),
157
+ occurredAt: row.occurred_at,
158
+ recordedAt: row.recorded_at,
159
+ evaluator: Object.freeze({ id: row.evaluator_id, version: row.evaluator_version }),
160
+ });
161
+ }
162
+ function digest(value) {
163
+ return createHash('sha256').update(JSON.stringify(value)).digest('hex');
164
+ }
165
+ export class EvaluationStore {
166
+ #database;
167
+ #now;
168
+ #maxQueryLimit;
169
+ #maxSituationBytes;
170
+ #maxMetricsBytes;
171
+ #maxEvidenceRefs;
172
+ #maxSummaryWindowMs;
173
+ #defaultSummaryWindowMs;
174
+ constructor(options) {
175
+ this.#database = openEvaluationDatabase(options.path);
176
+ this.#now = options.now ?? Date.now;
177
+ this.#maxQueryLimit = options.maxQueryLimit ?? 100;
178
+ this.#maxSituationBytes = options.maxSituationBytes ?? 200;
179
+ this.#maxMetricsBytes = options.maxMetricsBytes ?? 4_096;
180
+ this.#maxEvidenceRefs = options.maxEvidenceRefs ?? 32;
181
+ this.#maxSummaryWindowMs = options.maxSummaryWindowMs ?? 31_536_000_000;
182
+ this.#defaultSummaryWindowMs = options.defaultSummaryWindowMs
183
+ ?? Math.min(2_592_000_000, this.#maxSummaryWindowMs);
184
+ for (const [label, value] of [
185
+ ['maxQueryLimit', this.#maxQueryLimit], ['maxSituationBytes', this.#maxSituationBytes],
186
+ ['maxMetricsBytes', this.#maxMetricsBytes], ['maxEvidenceRefs', this.#maxEvidenceRefs],
187
+ ['maxSummaryWindowMs', this.#maxSummaryWindowMs], ['defaultSummaryWindowMs', this.#defaultSummaryWindowMs],
188
+ ]) {
189
+ if (!Number.isSafeInteger(value) || value < 1) {
190
+ this.#database.close();
191
+ throw new EvaluationStoreError('invalid-input', `${label} must be a positive safe integer`);
192
+ }
193
+ }
194
+ if (this.#defaultSummaryWindowMs > this.#maxSummaryWindowMs) {
195
+ this.#database.close();
196
+ throw new EvaluationStoreError('invalid-input', 'default summary window exceeds the maximum window');
197
+ }
198
+ }
199
+ close() { this.#database.close(); }
200
+ getOutcome(scopeInput, outcomeIdInput) {
201
+ const { scopeKey } = canonicalEvaluationScope(scopeInput);
202
+ const outcomeId = boundedText(outcomeIdInput, 'outcomeId', 200);
203
+ const row = this.#database.prepare(`
204
+ SELECT * FROM evaluation_outcomes WHERE id = ? AND scope_key = ?
205
+ `).get(outcomeId, scopeKey);
206
+ return row === undefined ? undefined : stored(row);
207
+ }
208
+ append(input) {
209
+ const normalized = this.#normalize(input);
210
+ const payloadHash = digest(normalized);
211
+ const id = `outcome-${randomUUID()}`;
212
+ const recordedAt = timestamp(this.#now(), 'recordedAt');
213
+ const metric = normalized.metrics;
214
+ this.#database.prepare(`
215
+ INSERT INTO evaluation_outcomes(
216
+ id, idempotency_key, payload_hash, scope_key, workspace, preset, situation,
217
+ execution_status, objective_status, delivery_status, source_kind, source_id,
218
+ trust, evidence_json, metrics_json, cost_usd_micros, latency_ms, input_tokens,
219
+ output_tokens, tool_calls, occurred_at, recorded_at, evaluator_id, evaluator_version)
220
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
221
+ ON CONFLICT(idempotency_key) DO NOTHING
222
+ `).run(id, normalized.idempotencyKey, payloadHash, normalized.scopeKey, normalized.scope.workspace, normalized.scope.preset, normalized.situation, normalized.executionStatus, normalized.objectiveStatus, normalized.deliveryStatus, normalized.source.kind, normalized.source.id, normalized.trust, JSON.stringify(normalized.evidence), JSON.stringify(normalized.metrics), metric.costUsdMicros ?? null, metric.latencyMs ?? null, metric.inputTokens ?? null, metric.outputTokens ?? null, metric.toolCalls ?? null, normalized.occurredAt, recordedAt, normalized.evaluator.id, normalized.evaluator.version);
223
+ const winner = this.#database.prepare('SELECT * FROM evaluation_outcomes WHERE idempotency_key = ?')
224
+ .get(normalized.idempotencyKey);
225
+ if (winner.payload_hash !== payloadHash) {
226
+ throw new EvaluationStoreError('idempotency-conflict', 'evaluation outcome idempotency key was reused with different content');
227
+ }
228
+ return stored(winner);
229
+ }
230
+ /**
231
+ * Append a self-reported objective judgement linked to an immutable Host
232
+ * outcome. Execution and delivery are inherited, metrics are not copied, and
233
+ * the assessment never participates in the trusted outcome count.
234
+ */
235
+ appendSelfAssessment(input) {
236
+ const { scope, scopeKey } = canonicalEvaluationScope(input.scope);
237
+ const outcomeId = boundedText(input.outcomeId, 'outcomeId', 200);
238
+ const target = this.#database.prepare('SELECT * FROM evaluation_outcomes WHERE id = ?')
239
+ .get(outcomeId);
240
+ if (target === undefined)
241
+ throw new EvaluationStoreError('not-found', 'self-assessment outcome was not found');
242
+ if (target.scope_key !== scopeKey) {
243
+ throw new EvaluationStoreError('invalid-input', 'self-assessment scope does not match the referenced outcome');
244
+ }
245
+ const normalized = Object.freeze({
246
+ outcomeId,
247
+ scope,
248
+ scopeKey,
249
+ objectiveStatus: oneOf(input.objectiveStatus, objectiveStatuses, 'objectiveStatus'),
250
+ evidence: evidence(input.evidence, this.#maxEvidenceRefs),
251
+ occurredAt: timestamp(input.occurredAt, 'occurredAt'),
252
+ idempotencyKey: boundedText(input.idempotencyKey, 'idempotencyKey', 200),
253
+ evaluator: Object.freeze({
254
+ id: boundedText(input.evaluator?.id, 'evaluator.id', 200),
255
+ version: boundedText(input.evaluator?.version, 'evaluator.version', 100),
256
+ }),
257
+ });
258
+ const payloadHash = digest(normalized);
259
+ const recordedAt = timestamp(this.#now(), 'recordedAt');
260
+ this.#database.prepare(`
261
+ INSERT INTO evaluation_self_assessments(
262
+ id, outcome_id, idempotency_key, payload_hash, scope_key,
263
+ objective_status, evidence_json, occurred_at, recorded_at, evaluator_id, evaluator_version)
264
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
265
+ ON CONFLICT(idempotency_key) DO NOTHING
266
+ `).run(`assessment-${randomUUID()}`, outcomeId, normalized.idempotencyKey, payloadHash, scopeKey, normalized.objectiveStatus, JSON.stringify(normalized.evidence), normalized.occurredAt, recordedAt, normalized.evaluator.id, normalized.evaluator.version);
267
+ const winner = this.#database.prepare(`
268
+ SELECT assessment.*, outcome.workspace, outcome.preset, outcome.situation,
269
+ outcome.execution_status, outcome.delivery_status
270
+ FROM evaluation_self_assessments assessment
271
+ JOIN evaluation_outcomes outcome ON outcome.id = assessment.outcome_id
272
+ WHERE assessment.idempotency_key = ?
273
+ `).get(normalized.idempotencyKey);
274
+ if (winner.payload_hash !== payloadHash) {
275
+ throw new EvaluationStoreError('idempotency-conflict', 'self-assessment idempotency key was reused with different content');
276
+ }
277
+ return selfAssessment(winner);
278
+ }
279
+ /** Latest self-report for each requested parent, preserving parent order. */
280
+ latestSelfAssessments(scopeInput, outcomeIdsInput) {
281
+ const { scopeKey } = canonicalEvaluationScope(scopeInput);
282
+ if (!Array.isArray(outcomeIdsInput) || outcomeIdsInput.length > this.#maxQueryLimit) {
283
+ throw new EvaluationStoreError('invalid-input', 'self-assessment parent query exceeds the limit');
284
+ }
285
+ const outcomeIds = outcomeIdsInput.map(id => boundedText(id, 'outcomeId', 200));
286
+ if (new Set(outcomeIds).size !== outcomeIds.length) {
287
+ throw new EvaluationStoreError('invalid-input', 'self-assessment parent query contains a duplicate');
288
+ }
289
+ if (outcomeIds.length === 0)
290
+ return [];
291
+ const placeholders = outcomeIds.map(() => '?').join(', ');
292
+ const rows = this.#database.prepare(`
293
+ SELECT assessment.*, outcome.workspace, outcome.preset, outcome.situation,
294
+ outcome.execution_status, outcome.delivery_status
295
+ FROM evaluation_self_assessments assessment
296
+ JOIN evaluation_outcomes outcome ON outcome.id = assessment.outcome_id
297
+ WHERE assessment.scope_key = ? AND assessment.outcome_id IN (${placeholders})
298
+ ORDER BY assessment.occurred_at DESC, assessment.id DESC
299
+ `).all(scopeKey, ...outcomeIds);
300
+ const latest = new Map();
301
+ for (const row of rows) {
302
+ if (!latest.has(row.outcome_id))
303
+ latest.set(row.outcome_id, selfAssessment(row));
304
+ }
305
+ return outcomeIds.flatMap(id => {
306
+ const assessment = latest.get(id);
307
+ return assessment === undefined ? [] : [assessment];
308
+ });
309
+ }
310
+ query(input) {
311
+ const { scopeKey } = canonicalEvaluationScope(input.scope);
312
+ const limit = input.limit ?? Math.min(50, this.#maxQueryLimit);
313
+ if (!Number.isSafeInteger(limit) || limit < 1 || limit > this.#maxQueryLimit) {
314
+ throw new EvaluationStoreError('invalid-input', `query limit must be between 1 and ${this.#maxQueryLimit}`);
315
+ }
316
+ const clauses = ['scope_key = ?'];
317
+ const parameters = [scopeKey];
318
+ const add = (column, value) => {
319
+ if (value === undefined)
320
+ return;
321
+ clauses.push(`${column} = ?`);
322
+ parameters.push(value);
323
+ };
324
+ add('situation', input.situation === undefined ? undefined : this.#situation(input.situation));
325
+ add('execution_status', input.executionStatus === undefined
326
+ ? undefined : oneOf(input.executionStatus, executionStatuses, 'executionStatus'));
327
+ add('objective_status', input.objectiveStatus === undefined
328
+ ? undefined : oneOf(input.objectiveStatus, objectiveStatuses, 'objectiveStatus'));
329
+ add('delivery_status', input.deliveryStatus === undefined
330
+ ? undefined : oneOf(input.deliveryStatus, deliveryStatuses, 'deliveryStatus'));
331
+ add('source_kind', input.sourceKind === undefined
332
+ ? undefined : oneOf(input.sourceKind, outcomeSourceKinds, 'sourceKind'));
333
+ add('trust', input.trust === undefined ? undefined : oneOf(input.trust, outcomeTrustLevels, 'trust'));
334
+ if (input.excludeSituationPrefix !== undefined) {
335
+ const prefix = this.#situation(input.excludeSituationPrefix);
336
+ clauses.push('substr(situation, 1, length(?)) <> ?');
337
+ parameters.push(prefix, prefix);
338
+ }
339
+ const [from, to] = this.#optionalRange(input.fromOccurredAt, input.toOccurredAt);
340
+ if (from !== undefined) {
341
+ clauses.push('occurred_at >= ?');
342
+ parameters.push(from);
343
+ }
344
+ if (to !== undefined) {
345
+ clauses.push('occurred_at <= ?');
346
+ parameters.push(to);
347
+ }
348
+ parameters.push(limit);
349
+ const rows = this.#database.prepare(`
350
+ SELECT * FROM evaluation_outcomes WHERE ${clauses.join(' AND ')}
351
+ ORDER BY occurred_at DESC, id DESC LIMIT ?
352
+ `).all(...parameters);
353
+ return rows.map(row => stored(row));
354
+ }
355
+ summary(input) {
356
+ const { scope, scopeKey } = canonicalEvaluationScope(input.scope);
357
+ const [fromOccurredAt, toOccurredAt] = this.#summaryRange(input.fromOccurredAt, input.toOccurredAt);
358
+ const situation = input.situation === undefined ? undefined : this.#situation(input.situation);
359
+ const excludeSituationPrefix = input.excludeSituationPrefix === undefined
360
+ ? undefined
361
+ : this.#situation(input.excludeSituationPrefix);
362
+ const row = this.#database.prepare(`
363
+ SELECT
364
+ COUNT(*) AS total,
365
+ SUM(execution_status = 'succeeded') AS execution_succeeded,
366
+ SUM(execution_status = 'failed') AS execution_failed,
367
+ SUM(execution_status = 'timed-out') AS execution_timed_out,
368
+ SUM(execution_status = 'cancelled') AS execution_cancelled,
369
+ SUM(execution_status = 'unknown') AS execution_unknown,
370
+ SUM(objective_status = 'achieved') AS objective_achieved,
371
+ SUM(objective_status = 'partial') AS objective_partial,
372
+ SUM(objective_status = 'not-achieved') AS objective_not_achieved,
373
+ SUM(objective_status = 'unknown') AS objective_unknown,
374
+ SUM(delivery_status = 'delivered') AS delivery_delivered,
375
+ SUM(delivery_status = 'failed') AS delivery_failed,
376
+ SUM(delivery_status = 'not-required') AS delivery_not_required,
377
+ SUM(delivery_status = 'unknown') AS delivery_unknown,
378
+ SUM(trust = 'trusted') AS trust_trusted,
379
+ SUM(trust = 'self-reported') AS trust_self_reported,
380
+ SUM(trust = 'external') AS trust_external,
381
+ TOTAL(cost_usd_micros) AS cost_usd_micros,
382
+ TOTAL(input_tokens) AS input_tokens,
383
+ TOTAL(output_tokens) AS output_tokens,
384
+ TOTAL(tool_calls) AS tool_calls,
385
+ TOTAL(latency_ms) AS latency_total,
386
+ COUNT(latency_ms) AS latency_count
387
+ FROM evaluation_outcomes
388
+ WHERE scope_key = ? AND occurred_at >= ? AND occurred_at <= ?
389
+ AND (? IS NULL OR situation = ?)
390
+ AND (? IS NULL OR substr(situation, 1, length(?)) <> ?)
391
+ `).get(scopeKey, fromOccurredAt, toOccurredAt, situation ?? null, situation ?? null, excludeSituationPrefix ?? null, excludeSituationPrefix ?? null, excludeSituationPrefix ?? null);
392
+ const count = (key) => row[key] ?? 0;
393
+ const latencyCount = count('latency_count');
394
+ return Object.freeze({
395
+ scope,
396
+ scopeKey,
397
+ ...(situation === undefined ? {} : { situation }),
398
+ fromOccurredAt,
399
+ toOccurredAt,
400
+ total: count('total'),
401
+ execution: Object.freeze({
402
+ succeeded: count('execution_succeeded'), failed: count('execution_failed'),
403
+ timedOut: count('execution_timed_out'), cancelled: count('execution_cancelled'), unknown: count('execution_unknown'),
404
+ }),
405
+ objective: Object.freeze({
406
+ achieved: count('objective_achieved'), partial: count('objective_partial'),
407
+ notAchieved: count('objective_not_achieved'), unknown: count('objective_unknown'),
408
+ }),
409
+ delivery: Object.freeze({
410
+ delivered: count('delivery_delivered'), failed: count('delivery_failed'),
411
+ notRequired: count('delivery_not_required'), unknown: count('delivery_unknown'),
412
+ }),
413
+ trust: Object.freeze({
414
+ trusted: count('trust_trusted'), selfReported: count('trust_self_reported'), external: count('trust_external'),
415
+ }),
416
+ metrics: Object.freeze({
417
+ costUsdMicros: count('cost_usd_micros'), inputTokens: count('input_tokens'),
418
+ outputTokens: count('output_tokens'), toolCalls: count('tool_calls'),
419
+ ...(latencyCount === 0 ? {} : { averageLatencyMs: Math.round(count('latency_total') / latencyCount) }),
420
+ }),
421
+ });
422
+ }
423
+ health() {
424
+ const row = this.#database.prepare(`
425
+ SELECT COUNT(*) AS outcomes,
426
+ SUM(trust = 'trusted') AS trusted,
427
+ SUM(trust = 'self-reported') AS self_reported,
428
+ SUM(trust = 'external') AS external,
429
+ MAX(occurred_at) AS latest
430
+ FROM evaluation_outcomes
431
+ `).get();
432
+ const assessmentRow = this.#database.prepare('SELECT COUNT(*) AS count FROM evaluation_self_assessments')
433
+ .get();
434
+ return Object.freeze({
435
+ ready: true,
436
+ schemaVersion: evaluationSchemaVersion,
437
+ outcomes: row.outcomes,
438
+ trustedOutcomes: row.trusted ?? 0,
439
+ selfReportedOutcomes: row.self_reported ?? 0,
440
+ externalOutcomes: row.external ?? 0,
441
+ selfAssessments: assessmentRow.count,
442
+ ...(row.latest === null ? {} : { latestOccurredAt: row.latest }),
443
+ });
444
+ }
445
+ #normalize(input) {
446
+ const { scope, scopeKey } = canonicalEvaluationScope(input.scope);
447
+ const situation = this.#situation(input.situation);
448
+ const sourceKind = oneOf(input.source?.kind, outcomeSourceKinds, 'source.kind');
449
+ const sourceId = boundedText(input.source?.id, 'source.id', 200);
450
+ const evaluatorId = boundedText(input.evaluator?.id, 'evaluator.id', 200);
451
+ const evaluatorVersion = boundedText(input.evaluator?.version, 'evaluator.version', 100);
452
+ return Object.freeze({
453
+ scope,
454
+ scopeKey,
455
+ situation,
456
+ executionStatus: oneOf(input.executionStatus, executionStatuses, 'executionStatus'),
457
+ objectiveStatus: oneOf(input.objectiveStatus, objectiveStatuses, 'objectiveStatus'),
458
+ deliveryStatus: oneOf(input.deliveryStatus, deliveryStatuses, 'deliveryStatus'),
459
+ source: Object.freeze({ kind: sourceKind, id: sourceId }),
460
+ trust: oneOf(input.trust, outcomeTrustLevels, 'trust'),
461
+ evidence: evidence(input.evidence, this.#maxEvidenceRefs),
462
+ metrics: metrics(input.metrics, this.#maxMetricsBytes),
463
+ occurredAt: timestamp(input.occurredAt, 'occurredAt'),
464
+ idempotencyKey: boundedText(input.idempotencyKey, 'idempotencyKey', 200),
465
+ evaluator: Object.freeze({ id: evaluatorId, version: evaluatorVersion }),
466
+ });
467
+ }
468
+ #situation(value) { return boundedText(value, 'situation', this.#maxSituationBytes); }
469
+ #optionalRange(fromInput, toInput) {
470
+ const from = fromInput === undefined ? undefined : timestamp(fromInput, 'fromOccurredAt');
471
+ const to = toInput === undefined ? undefined : timestamp(toInput, 'toOccurredAt');
472
+ if (from !== undefined && to !== undefined && from > to) {
473
+ throw new EvaluationStoreError('invalid-input', 'query time range is reversed');
474
+ }
475
+ return [from, to];
476
+ }
477
+ #summaryRange(fromInput, toInput) {
478
+ const to = toInput === undefined ? timestamp(this.#now(), 'toOccurredAt') : timestamp(toInput, 'toOccurredAt');
479
+ const from = fromInput === undefined ? Math.max(0, to - this.#defaultSummaryWindowMs) : timestamp(fromInput, 'fromOccurredAt');
480
+ if (from > to)
481
+ throw new EvaluationStoreError('invalid-input', 'summary time range is reversed');
482
+ if (to - from > this.#maxSummaryWindowMs) {
483
+ throw new EvaluationStoreError('invalid-input', `summary window exceeds ${this.#maxSummaryWindowMs}ms`);
484
+ }
485
+ return [from, to];
486
+ }
487
+ }
488
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/lib/tools.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import type { ToolRuntime } from '@deepseek-ai/dsh-tools';
2
+ import type { AssistantEvaluationService } from './service.js';
3
+ export declare function registerEvaluationTools(tools: Pick<ToolRuntime, 'register'>, service: AssistantEvaluationService): () => void;
4
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAuE9D,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EACpC,OAAO,EAAE,0BAA0B,GAClC,MAAM,IAAI,CAmJZ"}