@dsh-enhanced/assistant-evaluation 0.1.24 → 0.1.30

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 (132) hide show
  1. package/README.md +109 -3
  2. package/bin/dsh-benchmark.js +21 -0
  3. package/lib/benchmark/cli.d.ts +6 -0
  4. package/lib/benchmark/cli.d.ts.map +1 -0
  5. package/lib/benchmark/cli.js +332 -0
  6. package/lib/benchmark/cli.js.map +1 -0
  7. package/lib/benchmark/corpus.d.ts +28 -0
  8. package/lib/benchmark/corpus.d.ts.map +1 -0
  9. package/lib/benchmark/corpus.js +173 -0
  10. package/lib/benchmark/corpus.js.map +1 -0
  11. package/lib/benchmark/deepseek.d.ts +15 -0
  12. package/lib/benchmark/deepseek.d.ts.map +1 -0
  13. package/lib/benchmark/deepseek.js +143 -0
  14. package/lib/benchmark/deepseek.js.map +1 -0
  15. package/lib/benchmark/holdout-evidence.d.ts +126 -0
  16. package/lib/benchmark/holdout-evidence.d.ts.map +1 -0
  17. package/lib/benchmark/holdout-evidence.js +466 -0
  18. package/lib/benchmark/holdout-evidence.js.map +1 -0
  19. package/lib/benchmark/holdout-protocol.d.ts +68 -0
  20. package/lib/benchmark/holdout-protocol.d.ts.map +1 -0
  21. package/lib/benchmark/holdout-protocol.js +271 -0
  22. package/lib/benchmark/holdout-protocol.js.map +1 -0
  23. package/lib/benchmark/holdout-provider.d.ts +26 -0
  24. package/lib/benchmark/holdout-provider.d.ts.map +1 -0
  25. package/lib/benchmark/holdout-provider.js +382 -0
  26. package/lib/benchmark/holdout-provider.js.map +1 -0
  27. package/lib/benchmark/holdout.d.ts +83 -0
  28. package/lib/benchmark/holdout.d.ts.map +1 -0
  29. package/lib/benchmark/holdout.js +391 -0
  30. package/lib/benchmark/holdout.js.map +1 -0
  31. package/lib/benchmark/index.d.ts +9 -0
  32. package/lib/benchmark/index.d.ts.map +1 -0
  33. package/lib/benchmark/index.js +7 -0
  34. package/lib/benchmark/index.js.map +1 -0
  35. package/lib/benchmark/memory-corpus.d.ts +55 -0
  36. package/lib/benchmark/memory-corpus.d.ts.map +1 -0
  37. package/lib/benchmark/memory-corpus.js +153 -0
  38. package/lib/benchmark/memory-corpus.js.map +1 -0
  39. package/lib/benchmark/memory-runtime.d.ts +63 -0
  40. package/lib/benchmark/memory-runtime.d.ts.map +1 -0
  41. package/lib/benchmark/memory-runtime.js +75 -0
  42. package/lib/benchmark/memory-runtime.js.map +1 -0
  43. package/lib/benchmark/native.d.ts +46 -0
  44. package/lib/benchmark/native.d.ts.map +1 -0
  45. package/lib/benchmark/native.js +300 -0
  46. package/lib/benchmark/native.js.map +1 -0
  47. package/lib/benchmark/report.d.ts +4 -0
  48. package/lib/benchmark/report.d.ts.map +1 -0
  49. package/lib/benchmark/report.js +153 -0
  50. package/lib/benchmark/report.js.map +1 -0
  51. package/lib/benchmark/runner.d.ts +25 -0
  52. package/lib/benchmark/runner.d.ts.map +1 -0
  53. package/lib/benchmark/runner.js +119 -0
  54. package/lib/benchmark/runner.js.map +1 -0
  55. package/lib/benchmark/schema.d.ts +20 -0
  56. package/lib/benchmark/schema.d.ts.map +1 -0
  57. package/lib/benchmark/schema.js +183 -0
  58. package/lib/benchmark/schema.js.map +1 -0
  59. package/lib/benchmark/store.d.ts +18 -0
  60. package/lib/benchmark/store.d.ts.map +1 -0
  61. package/lib/benchmark/store.js +321 -0
  62. package/lib/benchmark/store.js.map +1 -0
  63. package/lib/benchmark/strategy-capabilities.d.ts +154 -0
  64. package/lib/benchmark/strategy-capabilities.d.ts.map +1 -0
  65. package/lib/benchmark/strategy-capabilities.js +300 -0
  66. package/lib/benchmark/strategy-capabilities.js.map +1 -0
  67. package/lib/benchmark/strategy-config.d.ts +26 -0
  68. package/lib/benchmark/strategy-config.d.ts.map +1 -0
  69. package/lib/benchmark/strategy-config.js +80 -0
  70. package/lib/benchmark/strategy-config.js.map +1 -0
  71. package/lib/benchmark/strategy-corpus.d.ts +21 -0
  72. package/lib/benchmark/strategy-corpus.d.ts.map +1 -0
  73. package/lib/benchmark/strategy-corpus.js +95 -0
  74. package/lib/benchmark/strategy-corpus.js.map +1 -0
  75. package/lib/benchmark/strategy-evidence.d.ts +161 -0
  76. package/lib/benchmark/strategy-evidence.d.ts.map +1 -0
  77. package/lib/benchmark/strategy-evidence.js +520 -0
  78. package/lib/benchmark/strategy-evidence.js.map +1 -0
  79. package/lib/benchmark/strategy-executor.d.ts +27 -0
  80. package/lib/benchmark/strategy-executor.d.ts.map +1 -0
  81. package/lib/benchmark/strategy-executor.js +178 -0
  82. package/lib/benchmark/strategy-executor.js.map +1 -0
  83. package/lib/benchmark/strategy-goal-runtime.d.ts +78 -0
  84. package/lib/benchmark/strategy-goal-runtime.d.ts.map +1 -0
  85. package/lib/benchmark/strategy-goal-runtime.js +324 -0
  86. package/lib/benchmark/strategy-goal-runtime.js.map +1 -0
  87. package/lib/benchmark/strategy-meter.d.ts +62 -0
  88. package/lib/benchmark/strategy-meter.d.ts.map +1 -0
  89. package/lib/benchmark/strategy-meter.js +236 -0
  90. package/lib/benchmark/strategy-meter.js.map +1 -0
  91. package/lib/benchmark/strategy-owner.d.ts +71 -0
  92. package/lib/benchmark/strategy-owner.d.ts.map +1 -0
  93. package/lib/benchmark/strategy-owner.js +282 -0
  94. package/lib/benchmark/strategy-owner.js.map +1 -0
  95. package/lib/benchmark/strategy-plan.d.ts +51 -0
  96. package/lib/benchmark/strategy-plan.d.ts.map +1 -0
  97. package/lib/benchmark/strategy-plan.js +71 -0
  98. package/lib/benchmark/strategy-plan.js.map +1 -0
  99. package/lib/benchmark/strategy-policy.d.ts +16 -0
  100. package/lib/benchmark/strategy-policy.d.ts.map +1 -0
  101. package/lib/benchmark/strategy-policy.js +77 -0
  102. package/lib/benchmark/strategy-policy.js.map +1 -0
  103. package/lib/benchmark/strategy.d.ts +17 -0
  104. package/lib/benchmark/strategy.d.ts.map +1 -0
  105. package/lib/benchmark/strategy.js +21 -0
  106. package/lib/benchmark/strategy.js.map +1 -0
  107. package/lib/benchmark/types.d.ts +133 -0
  108. package/lib/benchmark/types.d.ts.map +1 -0
  109. package/lib/benchmark/types.js +3 -0
  110. package/lib/benchmark/types.js.map +1 -0
  111. package/lib/benchmark/usage.d.ts +36 -0
  112. package/lib/benchmark/usage.d.ts.map +1 -0
  113. package/lib/benchmark/usage.js +84 -0
  114. package/lib/benchmark/usage.js.map +1 -0
  115. package/lib/service.d.ts +50 -1
  116. package/lib/service.d.ts.map +1 -1
  117. package/lib/service.js +556 -9
  118. package/lib/service.js.map +1 -1
  119. package/lib/sqlite.d.ts +1 -1
  120. package/lib/sqlite.d.ts.map +1 -1
  121. package/lib/sqlite.js +94 -2
  122. package/lib/sqlite.js.map +1 -1
  123. package/lib/store.d.ts +27 -5
  124. package/lib/store.d.ts.map +1 -1
  125. package/lib/store.js +324 -25
  126. package/lib/store.js.map +1 -1
  127. package/lib/types.d.ts +114 -5
  128. package/lib/types.d.ts.map +1 -1
  129. package/lib/types.js.map +1 -1
  130. package/lib/version.d.ts +1 -1
  131. package/lib/version.js +1 -1
  132. package/package.json +125 -18
@@ -0,0 +1,271 @@
1
+ import { createHash, createPublicKey, verify } from 'node:crypto';
2
+ import { acceptanceCanonicalJson, acceptanceDigest } from '@dsh-enhanced/task-acceptance-contract';
3
+ import { BenchmarkError } from './schema.js';
4
+ import { benchmarkDomains } from './types.js';
5
+ export const HOLDOUT_PROTOCOL_V1 = 'dsh-benchmark/independent-holdout/v1';
6
+ const digestPattern = /^[a-f0-9]{64}$/u;
7
+ const idPattern = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;
8
+ const contentTypePattern = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.+/-]{0,126}(?:; charset=utf-8)?$/u;
9
+ const base64urlPattern = /^[A-Za-z0-9_-]*$/u;
10
+ const maximumEnvelopeBytes = 512 * 1024;
11
+ const maximumInputBytes = 256 * 1024;
12
+ const maximumNodes = 4096;
13
+ const maximumDepth = 16;
14
+ const unsafeKeys = new Set(['__proto__', 'prototype', 'constructor']);
15
+ function fail(message) { throw new BenchmarkError(`holdout protocol: ${message}`); }
16
+ function assert(condition, message) { if (!condition)
17
+ fail(message); }
18
+ /**
19
+ * Inspect hostile values before canonicalization so getters, sparse arrays and oversized strings
20
+ * cannot be hidden by JSON serialization. The detached result is deeply frozen.
21
+ */
22
+ function boundedSnapshot(value) {
23
+ const active = new Set();
24
+ let nodes = 0;
25
+ let bytes = 0;
26
+ const inspect = (entry, depth) => {
27
+ nodes++;
28
+ assert(nodes <= maximumNodes && depth <= maximumDepth, 'envelope is too complex');
29
+ if (entry === null) {
30
+ bytes += 4;
31
+ return;
32
+ }
33
+ if (typeof entry === 'string') {
34
+ bytes += Buffer.byteLength(entry, 'utf8') + 2;
35
+ assert(bytes <= maximumEnvelopeBytes, 'envelope is too large');
36
+ return;
37
+ }
38
+ if (typeof entry === 'boolean') {
39
+ bytes += 5;
40
+ return;
41
+ }
42
+ if (typeof entry === 'number') {
43
+ assert(Number.isFinite(entry) && (!Number.isInteger(entry) || Number.isSafeInteger(entry)), 'envelope contains an invalid number');
44
+ bytes += 24;
45
+ return;
46
+ }
47
+ assert(typeof entry === 'object' && !active.has(entry), 'envelope contains an unsafe value or cycle');
48
+ active.add(entry);
49
+ try {
50
+ if (Array.isArray(entry)) {
51
+ assert(Object.getPrototypeOf(entry) === Array.prototype && entry.length <= maximumNodes, 'envelope contains an invalid array');
52
+ const keys = Reflect.ownKeys(entry).filter(key => key !== 'length');
53
+ assert(keys.length === entry.length && keys.every((key, index) => key === String(index)), 'envelope contains a sparse or decorated array');
54
+ for (const key of keys) {
55
+ const descriptor = Object.getOwnPropertyDescriptor(entry, key);
56
+ assert(descriptor.enumerable && Object.hasOwn(descriptor, 'value'), 'envelope contains an unsafe array property');
57
+ inspect(descriptor.value, depth + 1);
58
+ }
59
+ return;
60
+ }
61
+ const prototype = Object.getPrototypeOf(entry);
62
+ assert(prototype === Object.prototype || prototype === null, 'envelope must contain plain objects');
63
+ for (const key of Reflect.ownKeys(entry)) {
64
+ assert(typeof key === 'string' && !unsafeKeys.has(key), 'envelope contains an unsafe key');
65
+ const descriptor = Object.getOwnPropertyDescriptor(entry, key);
66
+ assert(descriptor.enumerable && Object.hasOwn(descriptor, 'value'), 'envelope contains an unsafe property');
67
+ bytes += Buffer.byteLength(key, 'utf8') + 3;
68
+ assert(bytes <= maximumEnvelopeBytes, 'envelope is too large');
69
+ inspect(descriptor.value, depth + 1);
70
+ }
71
+ }
72
+ finally {
73
+ active.delete(entry);
74
+ }
75
+ };
76
+ inspect(value, 0);
77
+ const canonical = acceptanceCanonicalJson(value);
78
+ assert(Buffer.byteLength(canonical, 'utf8') <= maximumEnvelopeBytes, 'envelope is too large');
79
+ const copy = JSON.parse(canonical);
80
+ const freeze = (entry) => {
81
+ if (entry === null || typeof entry !== 'object')
82
+ return;
83
+ for (const child of Object.values(entry))
84
+ freeze(child);
85
+ Object.freeze(entry);
86
+ };
87
+ freeze(copy);
88
+ return copy;
89
+ }
90
+ function object(value, keys, label) {
91
+ assert(value !== null && typeof value === 'object' && !Array.isArray(value), `${label} must be an object`);
92
+ const record = value;
93
+ const actual = Object.keys(record).sort();
94
+ const expected = [...keys].sort();
95
+ assert(actual.length === expected.length && actual.every((key, index) => key === expected[index]), `${label} has unexpected fields`);
96
+ return record;
97
+ }
98
+ function id(value, label) { assert(typeof value === 'string' && idPattern.test(value), `${label} is invalid`); }
99
+ function digest(value, label) { assert(typeof value === 'string' && digestPattern.test(value), `${label} is invalid`); }
100
+ function integer(value, label, max = Number.MAX_SAFE_INTEGER) {
101
+ assert(typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 && value <= max, `${label} is invalid`);
102
+ }
103
+ function signature(value) {
104
+ assert(typeof value === 'string' && base64urlPattern.test(value) && value.length === 86
105
+ && Buffer.from(value, 'base64url').length === 64 && Buffer.from(value, 'base64url').toString('base64url') === value, 'signature is invalid');
106
+ }
107
+ function publicKey(value) {
108
+ assert(typeof value === 'string' && Buffer.byteLength(value, 'utf8') <= 16 * 1024, 'pinned public key is invalid');
109
+ try {
110
+ const key = createPublicKey(value);
111
+ assert(key.asymmetricKeyType === 'ed25519', 'pinned public key must be Ed25519');
112
+ return key;
113
+ }
114
+ catch (error) {
115
+ if (error instanceof BenchmarkError)
116
+ throw error;
117
+ return fail('pinned public key is invalid');
118
+ }
119
+ }
120
+ export function holdoutAuthorityKeyId(pinnedPublicKey) {
121
+ return createHash('sha256').update(publicKey(pinnedPublicKey).export({ format: 'der', type: 'spki' })).digest('hex');
122
+ }
123
+ /** Canonical signing bytes. A supplied signature field is omitted without invoking accessors. */
124
+ export function holdoutUnsignedCanonicalJson(value) {
125
+ const snapshot = boundedSnapshot(value);
126
+ assert(snapshot !== null && typeof snapshot === 'object' && !Array.isArray(snapshot), 'signed envelope must be an object');
127
+ const record = snapshot;
128
+ if (!Object.hasOwn(record, 'signature'))
129
+ return acceptanceCanonicalJson(record);
130
+ const unsigned = Object.fromEntries(Object.entries(record).filter(([key]) => key !== 'signature'));
131
+ return acceptanceCanonicalJson(unsigned);
132
+ }
133
+ /** Digest of the complete signed envelope, suitable for evidence and chaining. */
134
+ export function holdoutEnvelopeDigest(value) {
135
+ return createHash('sha256').update(acceptanceCanonicalJson(boundedSnapshot(value))).digest('hex');
136
+ }
137
+ export function verifyHoldoutEnvelopeSignature(value, pinnedPublicKey) {
138
+ try {
139
+ const snapshot = boundedSnapshot(value);
140
+ if (snapshot === null || typeof snapshot !== 'object' || Array.isArray(snapshot))
141
+ return false;
142
+ const signed = snapshot;
143
+ signature(signed.signature);
144
+ return verify(null, Buffer.from(holdoutUnsignedCanonicalJson(signed)), publicKey(pinnedPublicKey), Buffer.from(signed.signature, 'base64url'));
145
+ }
146
+ catch {
147
+ return false;
148
+ }
149
+ }
150
+ function common(envelope, kind, pinnedPublicKey) {
151
+ assert(envelope.protocol === HOLDOUT_PROTOCOL_V1 && envelope.kind === kind, 'protocol or envelope kind is invalid');
152
+ digest(envelope.authorityKeyId, 'authority key id');
153
+ assert(envelope.authorityKeyId === holdoutAuthorityKeyId(pinnedPublicKey), 'authority key id does not match pinned key');
154
+ signature(envelope.signature);
155
+ assert(verifyHoldoutEnvelopeSignature(envelope, pinnedPublicKey), 'signature verification failed');
156
+ }
157
+ function benchmarkCase(value) {
158
+ const item = object(value, ['id', 'domain', 'inputDigest', 'acceptanceDigest'], 'manifest case');
159
+ id(item.id, 'case id');
160
+ assert(benchmarkDomains.includes(item.domain), 'case domain is invalid');
161
+ digest(item.inputDigest, 'case input digest');
162
+ digest(item.acceptanceDigest, 'case acceptance digest');
163
+ return item;
164
+ }
165
+ function benchmarkCell(value) {
166
+ const item = object(value, ['id', 'caseId', 'variantId', 'repeat', 'seed'], 'benchmark cell');
167
+ digest(item.id, 'cell id');
168
+ id(item.caseId, 'cell case id');
169
+ id(item.variantId, 'cell variant id');
170
+ integer(item.repeat, 'cell repeat', 19);
171
+ integer(item.seed, 'cell seed', 0xffffffff);
172
+ return item;
173
+ }
174
+ function same(left, right) { return acceptanceCanonicalJson(left) === acceptanceCanonicalJson(right); }
175
+ export function parseSignedHoldoutManifest(value, pinnedPublicKey) {
176
+ const snapshot = boundedSnapshot(value);
177
+ const raw = object(snapshot, ['protocol', 'kind', 'manifestId', 'authorityKeyId', 'dataset', 'cases', 'issuedAt', 'signature'], 'manifest');
178
+ common(raw, 'manifest', pinnedPublicKey);
179
+ id(raw.manifestId, 'manifest id');
180
+ integer(raw.issuedAt, 'manifest issuedAt');
181
+ const dataset = object(raw.dataset, ['id', 'version', 'digest', 'split'], 'manifest dataset');
182
+ id(dataset.id, 'dataset id');
183
+ id(dataset.version, 'dataset version');
184
+ digest(dataset.digest, 'dataset digest');
185
+ assert(dataset.split === 'holdout', 'manifest dataset must be a holdout');
186
+ assert(Array.isArray(raw.cases) && raw.cases.length >= 1 && raw.cases.length <= 100, 'manifest requires 1..100 cases');
187
+ const cases = raw.cases.map(benchmarkCase);
188
+ assert(new Set(cases.map(item => item.id)).size === cases.length, 'manifest case ids must be unique');
189
+ assert(new Set(cases.map(item => item.inputDigest)).size === cases.length, 'manifest case inputs must be unique');
190
+ const expectedDatasetDigest = acceptanceDigest({ id: dataset.id, version: dataset.version, split: dataset.split, cases });
191
+ assert(dataset.digest === expectedDatasetDigest, 'manifest dataset digest does not match public commitments');
192
+ return snapshot;
193
+ }
194
+ export function parseSignedHoldoutInput(value, manifestValue, expectedPlanDigest, expectedCell, pinnedPublicKey) {
195
+ const manifest = parseSignedHoldoutManifest(manifestValue, pinnedPublicKey);
196
+ digest(expectedPlanDigest, 'expected plan digest');
197
+ const snapshot = boundedSnapshot(value);
198
+ const raw = object(snapshot, ['protocol', 'kind', 'authorityKeyId', 'manifestDigest', 'planDigest', 'cell', 'inputDigest', 'contentType', 'inputBase64url', 'signature'], 'input');
199
+ common(raw, 'input', pinnedPublicKey);
200
+ digest(raw.manifestDigest, 'input manifest digest');
201
+ digest(raw.planDigest, 'input plan digest');
202
+ digest(raw.inputDigest, 'input digest');
203
+ assert(raw.manifestDigest === holdoutEnvelopeDigest(manifest) && raw.planDigest === expectedPlanDigest, 'input plan or manifest identity differs');
204
+ const cell = benchmarkCell(raw.cell);
205
+ assert(same(cell, expectedCell), 'input cell identity differs');
206
+ const task = manifest.cases.find(item => item.id === cell.caseId);
207
+ assert(task !== undefined && raw.inputDigest === task.inputDigest, 'input case commitment differs');
208
+ assert(typeof raw.contentType === 'string' && contentTypePattern.test(raw.contentType), 'input content type is invalid');
209
+ assert(typeof raw.inputBase64url === 'string' && base64urlPattern.test(raw.inputBase64url), 'input encoding is invalid');
210
+ const bytes = Buffer.from(raw.inputBase64url, 'base64url');
211
+ assert(bytes.length <= maximumInputBytes && bytes.toString('base64url') === raw.inputBase64url, 'input encoding is non-canonical or too large');
212
+ assert(createHash('sha256').update(bytes).digest('hex') === raw.inputDigest, 'input bytes do not match the committed digest');
213
+ return snapshot;
214
+ }
215
+ export function holdoutInputBytes(value) {
216
+ const snapshot = boundedSnapshot(value);
217
+ assert(typeof snapshot.inputBase64url === 'string' && base64urlPattern.test(snapshot.inputBase64url), 'input encoding is invalid');
218
+ const bytes = Buffer.from(snapshot.inputBase64url, 'base64url');
219
+ assert(bytes.length <= maximumInputBytes && bytes.toString('base64url') === snapshot.inputBase64url, 'input encoding is non-canonical or too large');
220
+ return Uint8Array.from(bytes);
221
+ }
222
+ export function parseSignedHoldoutVerdict(value, manifestValue, expectedPlanDigest, expectedCell, expectedOutputDigest, pinnedPublicKey) {
223
+ const manifest = parseSignedHoldoutManifest(manifestValue, pinnedPublicKey);
224
+ digest(expectedPlanDigest, 'expected plan digest');
225
+ digest(expectedOutputDigest, 'expected output digest');
226
+ const snapshot = boundedSnapshot(value);
227
+ const raw = object(snapshot, ['protocol', 'kind', 'authorityKeyId', 'manifestDigest', 'planDigest', 'cell', 'inputDigest', 'acceptanceDigest', 'outputDigest', 'verdict', 'evaluatedAt', 'signature'], 'verdict');
228
+ common(raw, 'verdict', pinnedPublicKey);
229
+ for (const [entry, label] of [[raw.manifestDigest, 'verdict manifest digest'], [raw.planDigest, 'verdict plan digest'], [raw.inputDigest, 'verdict input digest'], [raw.acceptanceDigest, 'verdict acceptance digest'], [raw.outputDigest, 'verdict output digest']])
230
+ digest(entry, label);
231
+ assert(raw.manifestDigest === holdoutEnvelopeDigest(manifest) && raw.planDigest === expectedPlanDigest && raw.outputDigest === expectedOutputDigest, 'verdict plan, manifest, or output identity differs');
232
+ const cell = benchmarkCell(raw.cell);
233
+ assert(same(cell, expectedCell), 'verdict cell identity differs');
234
+ const task = manifest.cases.find(item => item.id === cell.caseId);
235
+ assert(task !== undefined && raw.inputDigest === task.inputDigest && raw.acceptanceDigest === task.acceptanceDigest, 'verdict case commitment differs');
236
+ assert(raw.verdict === 'achieved' || raw.verdict === 'not-achieved' || raw.verdict === 'unknown', 'verdict value is invalid');
237
+ integer(raw.evaluatedAt, 'verdict evaluatedAt');
238
+ return snapshot;
239
+ }
240
+ export function holdoutVerdictsDigest(expectedCells, verdictEnvelopeDigests) {
241
+ assert(expectedCells.length === verdictEnvelopeDigests.length, 'verdict digest count differs from cells');
242
+ const seen = new Set();
243
+ const entries = expectedCells.map((cellValue, index) => {
244
+ const cell = benchmarkCell(boundedSnapshot(cellValue));
245
+ assert(!seen.has(cell.id), 'finish cells must be unique');
246
+ seen.add(cell.id);
247
+ const verdictDigest = verdictEnvelopeDigests[index];
248
+ digest(verdictDigest, 'signed verdict envelope digest');
249
+ return { cell, verdictDigest };
250
+ });
251
+ return acceptanceDigest(entries);
252
+ }
253
+ export function parseSignedHoldoutFinish(value, manifestValue, expectedPlanDigest, expectedCells, verdictEnvelopeDigests, pinnedPublicKey) {
254
+ const manifest = parseSignedHoldoutManifest(manifestValue, pinnedPublicKey);
255
+ digest(expectedPlanDigest, 'expected plan digest');
256
+ assert(expectedCells.length <= 16_000 && verdictEnvelopeDigests.length <= expectedCells.length, 'finish cell count is invalid');
257
+ const snapshot = boundedSnapshot(value);
258
+ const raw = object(snapshot, ['protocol', 'kind', 'authorityKeyId', 'manifestDigest', 'planDigest', 'cellCount', 'verdictsDigest', 'complete', 'finalizedAt', 'signature'], 'finish');
259
+ common(raw, 'finish', pinnedPublicKey);
260
+ digest(raw.manifestDigest, 'finish manifest digest');
261
+ digest(raw.planDigest, 'finish plan digest');
262
+ digest(raw.verdictsDigest, 'finish verdicts digest');
263
+ assert(raw.manifestDigest === holdoutEnvelopeDigest(manifest) && raw.planDigest === expectedPlanDigest, 'finish plan or manifest identity differs');
264
+ integer(raw.cellCount, 'finish cell count', 16_000);
265
+ integer(raw.finalizedAt, 'finish finalizedAt');
266
+ assert(typeof raw.complete === 'boolean' && raw.cellCount === verdictEnvelopeDigests.length, 'finish completion metadata differs');
267
+ assert(!raw.complete || raw.cellCount === expectedCells.length, 'complete finish must cover every planned cell');
268
+ assert(raw.verdictsDigest === holdoutVerdictsDigest(expectedCells.slice(0, raw.cellCount), verdictEnvelopeDigests), 'finish verdict chain differs');
269
+ return snapshot;
270
+ }
271
+ //# sourceMappingURL=holdout-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holdout-protocol.js","sourceRoot":"","sources":["../../src/benchmark/holdout-protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export declare const HOLDOUT_PROVIDER_TRANSPORT_V1: "dsh-benchmark/holdout-provider-transport/v1";
2
+ export type HoldoutProviderOperation = 'manifest' | 'input' | 'verdict' | 'finish';
3
+ export type HoldoutProviderErrorCode = 'invalid-config' | 'aborted' | 'busy' | 'closed' | 'spawn-failed' | 'ready-timeout' | 'request-timeout' | 'protocol-error' | 'line-too-large' | 'stderr-too-large' | 'provider-rejected' | 'termination-unconfirmed';
4
+ export declare class HoldoutProviderError extends Error {
5
+ readonly code: HoldoutProviderErrorCode;
6
+ constructor(code: HoldoutProviderErrorCode);
7
+ }
8
+ export interface HoldoutProviderConfig {
9
+ readonly executable: string;
10
+ readonly args: readonly string[];
11
+ /** Exact child environment. The Host environment is never inherited. */
12
+ readonly environment: Readonly<Record<string, string>>;
13
+ readonly maxLineBytes: number;
14
+ readonly maxStderrBytes: number;
15
+ readonly readyTimeoutMs: number;
16
+ readonly requestTimeoutMs: number;
17
+ readonly closeTimeoutMs: number;
18
+ readonly killTimeoutMs: number;
19
+ }
20
+ export interface HoldoutProviderTransport {
21
+ readonly pid: number;
22
+ request(operation: HoldoutProviderOperation, value: unknown, signal?: AbortSignal): Promise<unknown>;
23
+ close(): Promise<void>;
24
+ }
25
+ export declare function openHoldoutProvider(raw: HoldoutProviderConfig, signal?: AbortSignal): Promise<HoldoutProviderTransport>;
26
+ //# sourceMappingURL=holdout-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holdout-provider.d.ts","sourceRoot":"","sources":["../../src/benchmark/holdout-provider.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,6BAA6B,EAAG,6CAAsD,CAAA;AACnG,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;AAClF,MAAM,MAAM,wBAAwB,GAChC,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,cAAc,GAAG,eAAe,GAAG,iBAAiB,GACvG,gBAAgB,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,yBAAyB,CAAA;AAE9G,qBAAa,oBAAqB,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,wBAAwB;gBAA9B,IAAI,EAAE,wBAAwB;CAIpD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACtD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,SAAS,EAAE,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACpG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAmOD,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAQ7H"}