agent-hitch 0.2.10 → 0.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -11
- package/README.zh-CN.md +10 -9
- package/dist/src/cli/commands/capabilities.js +1 -0
- package/dist/src/cli/commands/capabilities.js.map +1 -1
- package/dist/src/cli/commands/verifier.js +54 -3
- package/dist/src/cli/commands/verifier.js.map +1 -1
- package/dist/src/cli/output.js +2 -0
- package/dist/src/cli/output.js.map +1 -1
- package/dist/src/evals/benchmark-adapter-manifest.js +19 -1
- package/dist/src/evals/benchmark-adapter-manifest.js.map +1 -1
- package/dist/src/evals/index.js +1 -0
- package/dist/src/evals/index.js.map +1 -1
- package/dist/src/evals/verifier-artifacts.js +98 -153
- package/dist/src/evals/verifier-artifacts.js.map +1 -1
- package/dist/src/evals/verifier-diagnostic-repair.js +276 -0
- package/dist/src/evals/verifier-diagnostic-repair.js.map +1 -0
- package/dist/src/runs/index.js +3 -2
- package/dist/src/runs/index.js.map +1 -1
- package/dist/src/runs/verifier-diagnostic-storage.js +237 -0
- package/dist/src/runs/verifier-diagnostic-storage.js.map +1 -0
- package/dist/src/runs/verifier-diagnostic-supplement.js +228 -0
- package/dist/src/runs/verifier-diagnostic-supplement.js.map +1 -0
- package/dist/src/runs/verifier-evidence.js +119 -118
- package/dist/src/runs/verifier-evidence.js.map +1 -1
- package/dist/src/trajectories/providers/deepseek.js +52 -38
- package/dist/src/trajectories/providers/deepseek.js.map +1 -1
- package/dist/src/trajectories/store.js +17 -0
- package/dist/src/trajectories/store.js.map +1 -1
- package/docs/schemas/verifier-diagnostic-page.schema.json +97 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier-diagnostic-repair.js","sourceRoot":"","sources":["../../../src/evals/verifier-diagnostic-repair.ts"],"names":[],"mappings":"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"}
|
package/dist/src/runs/index.js
CHANGED
|
@@ -5,8 +5,9 @@ export { sealTerminalManifest } from "./finalizer.js";
|
|
|
5
5
|
export { executeRun } from "./executor.js";
|
|
6
6
|
export { createQueuedRun } from "./queued.js";
|
|
7
7
|
export { canonicalJSON, isTerminal, loadRunRecord, projectRunRecord, sha256Bytes, sha256JSON, trajectoryRefV2 } from "./records.js";
|
|
8
|
-
export { loadVerifierEvidence, MAX_VERIFIER_ARTIFACT_OUTPUT_BYTES, MAX_VERIFIER_RESULT_BYTES } from "./verifier-evidence.js";
|
|
9
|
-
export { sanitizeVerifierJson } from "./verifier-evidence-redaction.js";
|
|
8
|
+
export { loadVerifierDiagnosticPage, loadVerifierEvidence, MAX_VERIFIER_ARTIFACT_OUTPUT_BYTES, MAX_VERIFIER_DIAGNOSTIC_PAGE_BYTES, MAX_VERIFIER_RESULT_BYTES } from "./verifier-evidence.js";
|
|
9
|
+
export { sanitizeVerifierJson, sanitizeVerifierText } from "./verifier-evidence-redaction.js";
|
|
10
|
+
export { legacyIndexNeedsDiagnosticRepair, loadVerifierDiagnosticSupplement, sourceIdentitiesFromLegacyIndex, verifierDiagnosticSupplementBase, verifierDiagnosticSupplementRelative } from "./verifier-diagnostic-supplement.js";
|
|
10
11
|
export { benchmarkTaskDigest, benchmarkVerifierIdentity, defaultModelIdentity, inferModelProvider, looksImmutableModelId } from "./identity.js";
|
|
11
12
|
export { queryRuns, rebuildRunIndexes } from "./query.js";
|
|
12
13
|
export { compareRunRecords, compareRuns } from "./compare.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAErF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpI,OAAO,EAAE,oBAAoB,EAAE,kCAAkC,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAErF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpI,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,kCAAkC,EAAE,kCAAkC,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAE7L,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,gCAAgC,EAAE,gCAAgC,EAAE,+BAA+B,EAAE,gCAAgC,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAElO,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAChJ,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACtG,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAElG,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAEhH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { lstat } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { validateRelativePath } from "../domain/index.js";
|
|
4
|
+
import { openContainedRegularFile, sha256Bytes } from "../foundation/index.js";
|
|
5
|
+
import { sanitizeVerifierJson, sanitizeVerifierText } from "./verifier-evidence-redaction.js";
|
|
6
|
+
export const VERIFIER_DIAGNOSTICS_INDEX_REF = "verifier/diagnostics.json";
|
|
7
|
+
export const VERIFIER_DIAGNOSTIC_ARTIFACT_NAMES = [
|
|
8
|
+
"ctrf.json", "test-stdout.txt", "test-stderr.txt", "stdout.txt", "stderr.txt",
|
|
9
|
+
];
|
|
10
|
+
const MAX_DIAGNOSTICS_INDEX_BYTES = 1024 * 1024;
|
|
11
|
+
const MAX_PERSISTED_VERIFIER_ARTIFACT_BYTES = 16 * 1024 * 1024;
|
|
12
|
+
/** Reads and validates one diagnostic store for both inspect previews and page delivery. */
|
|
13
|
+
export async function readVerifierDiagnosticStorage(runRoot, credentialValues) {
|
|
14
|
+
const indexFile = path.join(runRoot, ...VERIFIER_DIAGNOSTICS_INDEX_REF.split("/"));
|
|
15
|
+
return await exists(indexFile)
|
|
16
|
+
? await readIndexedStorage(runRoot, credentialValues)
|
|
17
|
+
: await readLegacyStorage(runRoot, credentialValues);
|
|
18
|
+
}
|
|
19
|
+
async function readIndexedStorage(runRoot, credentialValues) {
|
|
20
|
+
const indexBytes = await secureRead(runRoot, VERIFIER_DIAGNOSTICS_INDEX_REF, MAX_DIAGNOSTICS_INDEX_BYTES);
|
|
21
|
+
const index = asRecord(JSON.parse(indexBytes.toString("utf8")), "verifier diagnostics index");
|
|
22
|
+
const version = index.schema_version;
|
|
23
|
+
if ((version !== "1" && version !== "2") || index.kind !== "verifier-diagnostics"
|
|
24
|
+
|| !Array.isArray(index.artifacts) || !Array.isArray(index.redactions)
|
|
25
|
+
|| version === "2" && (!Array.isArray(index.losses)
|
|
26
|
+
|| !Number.isSafeInteger(index.hard_cap_bytes) || Number(index.hard_cap_bytes) <= 0
|
|
27
|
+
|| Number(index.hard_cap_bytes) > MAX_PERSISTED_VERIFIER_ARTIFACT_BYTES)) {
|
|
28
|
+
throw new TypeError("verifier diagnostics index is invalid");
|
|
29
|
+
}
|
|
30
|
+
const redactions = new Map();
|
|
31
|
+
const seen = new Set();
|
|
32
|
+
for (const raw of index.redactions) {
|
|
33
|
+
const rule = asRecord(raw, "verifier diagnostics redaction");
|
|
34
|
+
exactFields(rule, ["rule_id", "count"], "verifier diagnostics redaction");
|
|
35
|
+
if (typeof rule.rule_id !== "string" || !/^[a-z0-9][a-z0-9._-]{0,127}$/.test(rule.rule_id)
|
|
36
|
+
|| !Number.isSafeInteger(rule.count) || Number(rule.count) < 1
|
|
37
|
+
|| seen.has(`redaction:${rule.rule_id}`)) {
|
|
38
|
+
throw new TypeError("verifier diagnostics redaction is invalid");
|
|
39
|
+
}
|
|
40
|
+
seen.add(`redaction:${rule.rule_id}`);
|
|
41
|
+
increment(redactions, rule.rule_id, Number(rule.count));
|
|
42
|
+
}
|
|
43
|
+
const artifacts = [];
|
|
44
|
+
for (const raw of index.artifacts) {
|
|
45
|
+
const artifact = asRecord(raw, "verifier diagnostic artifact");
|
|
46
|
+
exactFields(artifact, [
|
|
47
|
+
"name", "ref", "media_type", "source_bytes", "source_sha256", "bytes", "sha256",
|
|
48
|
+
"stored_bytes", "stored_sha256", "truncated",
|
|
49
|
+
], "verifier diagnostic artifact");
|
|
50
|
+
const name = artifact.name;
|
|
51
|
+
if (!VERIFIER_DIAGNOSTIC_ARTIFACT_NAMES.includes(name) || seen.has(name) || artifact.ref !== `verifier/${name}`) {
|
|
52
|
+
throw new TypeError("verifier diagnostic artifact identity is invalid");
|
|
53
|
+
}
|
|
54
|
+
seen.add(name);
|
|
55
|
+
const mediaType = mediaTypeFor(name);
|
|
56
|
+
if (artifact.media_type !== mediaType)
|
|
57
|
+
throw new TypeError("verifier diagnostic artifact media type is invalid");
|
|
58
|
+
const availableBytes = nonNegativeInteger(artifact.bytes, "verifier diagnostic bytes");
|
|
59
|
+
const availableDigest = sha256Value(artifact.sha256, "verifier diagnostic digest");
|
|
60
|
+
nonNegativeInteger(artifact.source_bytes, "source verifier diagnostic bytes");
|
|
61
|
+
sha256Value(artifact.source_sha256, "source verifier diagnostic digest");
|
|
62
|
+
const storedBytes = nonNegativeInteger(artifact.stored_bytes, "stored verifier diagnostic bytes");
|
|
63
|
+
const storedDigest = sha256Value(artifact.stored_sha256, "stored verifier diagnostic digest");
|
|
64
|
+
if (typeof artifact.truncated !== "boolean" || version === "2" && artifact.truncated !== false
|
|
65
|
+
|| storedBytes > MAX_PERSISTED_VERIFIER_ARTIFACT_BYTES) {
|
|
66
|
+
throw new TypeError("stored verifier diagnostic exceeds its persistence limit");
|
|
67
|
+
}
|
|
68
|
+
const stored = await secureRead(runRoot, String(artifact.ref), MAX_PERSISTED_VERIFIER_ARTIFACT_BYTES);
|
|
69
|
+
if (stored.length !== storedBytes || sha256Bytes(stored) !== storedDigest) {
|
|
70
|
+
throw new TypeError("stored verifier diagnostic integrity mismatch");
|
|
71
|
+
}
|
|
72
|
+
if (artifact.truncated === false && (availableBytes !== storedBytes || availableDigest !== storedDigest)) {
|
|
73
|
+
throw new TypeError("complete verifier diagnostic metadata mismatch");
|
|
74
|
+
}
|
|
75
|
+
const bytes = sanitizeArtifact(stored, mediaType, artifact.truncated === false, credentialValues, redactions);
|
|
76
|
+
artifacts.push({
|
|
77
|
+
name,
|
|
78
|
+
mediaType,
|
|
79
|
+
bytes,
|
|
80
|
+
sha256: sha256Bytes(bytes),
|
|
81
|
+
sourceComplete: artifact.truncated === false,
|
|
82
|
+
...(artifact.truncated === true ? { lossReason: "legacy_truncated" } : {}),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
if (version === "2") {
|
|
86
|
+
for (const raw of index.losses) {
|
|
87
|
+
const loss = asRecord(raw, "unavailable verifier diagnostic");
|
|
88
|
+
exactFields(loss, [
|
|
89
|
+
"name", "media_type", "source_bytes", ...(loss.source_sha256 === undefined ? [] : ["source_sha256"]),
|
|
90
|
+
"loss_reason", "persistence_limit_bytes",
|
|
91
|
+
], "unavailable verifier diagnostic");
|
|
92
|
+
const name = loss.name;
|
|
93
|
+
if (!VERIFIER_DIAGNOSTIC_ARTIFACT_NAMES.includes(name) || seen.has(name)) {
|
|
94
|
+
throw new TypeError("unavailable verifier diagnostic identity is invalid");
|
|
95
|
+
}
|
|
96
|
+
seen.add(name);
|
|
97
|
+
const mediaType = mediaTypeFor(name);
|
|
98
|
+
if (loss.media_type !== mediaType
|
|
99
|
+
|| (loss.loss_reason !== "persistence_limit_exceeded" && loss.loss_reason !== "invalid_json")) {
|
|
100
|
+
throw new TypeError("unavailable verifier diagnostic metadata is invalid");
|
|
101
|
+
}
|
|
102
|
+
nonNegativeInteger(loss.source_bytes, "unavailable verifier diagnostic source bytes");
|
|
103
|
+
if (loss.source_sha256 !== undefined) {
|
|
104
|
+
sha256Value(loss.source_sha256, "unavailable verifier diagnostic source digest");
|
|
105
|
+
}
|
|
106
|
+
const persistenceLimit = nonNegativeInteger(loss.persistence_limit_bytes, "verifier diagnostic persistence limit");
|
|
107
|
+
if (persistenceLimit < 1 || persistenceLimit > MAX_PERSISTED_VERIFIER_ARTIFACT_BYTES) {
|
|
108
|
+
throw new TypeError("unavailable verifier diagnostic persistence limit is invalid");
|
|
109
|
+
}
|
|
110
|
+
const bytes = Buffer.alloc(0);
|
|
111
|
+
artifacts.push({
|
|
112
|
+
name,
|
|
113
|
+
mediaType,
|
|
114
|
+
bytes,
|
|
115
|
+
sha256: sha256Bytes(bytes),
|
|
116
|
+
sourceComplete: false,
|
|
117
|
+
lossReason: loss.loss_reason,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return { artifacts, redactions };
|
|
122
|
+
}
|
|
123
|
+
async function readLegacyStorage(runRoot, credentialValues) {
|
|
124
|
+
const artifacts = [];
|
|
125
|
+
const redactions = new Map();
|
|
126
|
+
for (const name of VERIFIER_DIAGNOSTIC_ARTIFACT_NAMES) {
|
|
127
|
+
const ref = `verifier/${name}`;
|
|
128
|
+
if (!await exists(path.join(runRoot, ...ref.split("/"))))
|
|
129
|
+
continue;
|
|
130
|
+
const mediaType = mediaTypeFor(name);
|
|
131
|
+
let raw;
|
|
132
|
+
try {
|
|
133
|
+
raw = await secureRead(runRoot, ref, MAX_PERSISTED_VERIFIER_ARTIFACT_BYTES);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
if (error?.message !== "contained file exceeds its limit")
|
|
137
|
+
throw error;
|
|
138
|
+
const bytes = Buffer.alloc(0);
|
|
139
|
+
artifacts.push({
|
|
140
|
+
name, mediaType, bytes, sha256: sha256Bytes(bytes), sourceComplete: false,
|
|
141
|
+
lossReason: "persistence_limit_exceeded",
|
|
142
|
+
});
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const bytes = sanitizeArtifact(raw, mediaType, mediaType === "application/json", credentialValues, redactions);
|
|
146
|
+
artifacts.push({ name, mediaType, bytes, sha256: sha256Bytes(bytes), sourceComplete: true });
|
|
147
|
+
}
|
|
148
|
+
return { artifacts, redactions };
|
|
149
|
+
}
|
|
150
|
+
function sanitizeArtifact(stored, mediaType, parseJson, credentials, redactions) {
|
|
151
|
+
if (mediaType === "application/json" && parseJson) {
|
|
152
|
+
const parsed = JSON.parse(stored.toString("utf8"));
|
|
153
|
+
if (!isJsonValue(parsed))
|
|
154
|
+
throw new TypeError("CTRF artifact is not JSON data");
|
|
155
|
+
const safe = sanitizeVerifierJson(parsed, credentials);
|
|
156
|
+
mergeCounts(redactions, safe.redactions);
|
|
157
|
+
return Buffer.from(JSON.stringify(safe.value), "utf8");
|
|
158
|
+
}
|
|
159
|
+
const safe = sanitizeVerifierText(stored.toString("utf8"), credentials);
|
|
160
|
+
mergeCounts(redactions, safe.redactions);
|
|
161
|
+
return Buffer.from(safe.text, "utf8");
|
|
162
|
+
}
|
|
163
|
+
function mediaTypeFor(name) {
|
|
164
|
+
return name === "ctrf.json" ? "application/json" : "text/plain";
|
|
165
|
+
}
|
|
166
|
+
async function secureRead(root, ref, maxBytes) {
|
|
167
|
+
const relative = validateRelativePath(ref, "verifier diagnostic ref");
|
|
168
|
+
const opened = await openContainedRegularFile(root, relative, maxBytes);
|
|
169
|
+
try {
|
|
170
|
+
const bytes = Buffer.allocUnsafe(opened.size);
|
|
171
|
+
let position = 0;
|
|
172
|
+
while (position < bytes.length) {
|
|
173
|
+
const read = await opened.handle.read(bytes, position, bytes.length - position, position);
|
|
174
|
+
if (read.bytesRead === 0)
|
|
175
|
+
throw new TypeError(`${path.basename(ref)} changed while being read`);
|
|
176
|
+
position += read.bytesRead;
|
|
177
|
+
}
|
|
178
|
+
if ((await opened.handle.read(Buffer.allocUnsafe(1), 0, 1, bytes.length)).bytesRead !== 0) {
|
|
179
|
+
throw new TypeError(`${path.basename(ref)} changed while being read`);
|
|
180
|
+
}
|
|
181
|
+
await opened.assertUnchanged();
|
|
182
|
+
return bytes;
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
await opened.handle.close();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function nonNegativeInteger(value, label) {
|
|
189
|
+
if (!Number.isSafeInteger(value) || Number(value) < 0)
|
|
190
|
+
throw new TypeError(`${label} is invalid`);
|
|
191
|
+
return Number(value);
|
|
192
|
+
}
|
|
193
|
+
function sha256Value(value, label) {
|
|
194
|
+
if (typeof value !== "string" || !/^sha256:[0-9a-f]{64}$/.test(value))
|
|
195
|
+
throw new TypeError(`${label} is invalid`);
|
|
196
|
+
return value;
|
|
197
|
+
}
|
|
198
|
+
function asRecord(value, label) {
|
|
199
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
200
|
+
throw new TypeError(`${label} must be an object`);
|
|
201
|
+
return value;
|
|
202
|
+
}
|
|
203
|
+
function exactFields(record, allowed, label) {
|
|
204
|
+
const fields = new Set(allowed);
|
|
205
|
+
const unexpected = Object.keys(record).find((field) => !fields.has(field));
|
|
206
|
+
if (unexpected)
|
|
207
|
+
throw new TypeError(`${label} has unknown field: ${unexpected}`);
|
|
208
|
+
}
|
|
209
|
+
function isJsonValue(value) {
|
|
210
|
+
if (value === null || typeof value === "string" || typeof value === "boolean")
|
|
211
|
+
return true;
|
|
212
|
+
if (typeof value === "number")
|
|
213
|
+
return Number.isFinite(value);
|
|
214
|
+
if (Array.isArray(value))
|
|
215
|
+
return value.every(isJsonValue);
|
|
216
|
+
return Boolean(value) && typeof value === "object"
|
|
217
|
+
&& Object.values(value).every(isJsonValue);
|
|
218
|
+
}
|
|
219
|
+
function mergeCounts(target, source) {
|
|
220
|
+
for (const [rule, count] of source)
|
|
221
|
+
increment(target, rule, count);
|
|
222
|
+
}
|
|
223
|
+
function increment(counts, rule, count = 1) {
|
|
224
|
+
counts.set(rule, (counts.get(rule) ?? 0) + count);
|
|
225
|
+
}
|
|
226
|
+
async function exists(file) {
|
|
227
|
+
try {
|
|
228
|
+
await lstat(file);
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
if (error.code === "ENOENT")
|
|
233
|
+
return false;
|
|
234
|
+
throw error;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=verifier-diagnostic-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier-diagnostic-storage.js","sourceRoot":"","sources":["../../../src/runs/verifier-diagnostic-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { lstat, realpath } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { openContainedRegularFile, sha256Bytes, statePaths } from "../foundation/index.js";
|
|
4
|
+
import { verifyResultBundleIndex } from "./bundle.js";
|
|
5
|
+
import { loadRunRecord } from "./records.js";
|
|
6
|
+
const DIAGNOSTICS_INDEX_REF = "verifier/diagnostics.json";
|
|
7
|
+
const MAX_INDEX_BYTES = 1024 * 1024;
|
|
8
|
+
const ARTIFACT_NAMES = new Set(["ctrf.json", "test-stdout.txt", "test-stderr.txt", "stdout.txt", "stderr.txt"]);
|
|
9
|
+
export function verifierDiagnosticSupplementRelative(runId, originalIndexSha256) {
|
|
10
|
+
if (!/^run_[a-f0-9]{32}$/.test(runId) || !/^sha256:[0-9a-f]{64}$/.test(originalIndexSha256)) {
|
|
11
|
+
throw new TypeError("verifier diagnostic supplement identity is invalid");
|
|
12
|
+
}
|
|
13
|
+
return path.join(runId, originalIndexSha256.slice("sha256:".length));
|
|
14
|
+
}
|
|
15
|
+
export function verifierDiagnosticSupplementBase(root) {
|
|
16
|
+
return path.join(statePaths(root).root, "derived", "verifier-diagnostics");
|
|
17
|
+
}
|
|
18
|
+
export async function loadVerifierDiagnosticSupplement(root, runRoot, runId) {
|
|
19
|
+
let originalIndex;
|
|
20
|
+
try {
|
|
21
|
+
originalIndex = await readContained(runRoot, DIAGNOSTICS_INDEX_REF, MAX_INDEX_BYTES);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (error.code === "ENOENT")
|
|
25
|
+
return null;
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
const originalIndexSha256 = sha256Bytes(originalIndex);
|
|
29
|
+
const relative = verifierDiagnosticSupplementRelative(runId, originalIndexSha256);
|
|
30
|
+
const base = verifierDiagnosticSupplementBase(await canonicalStateRoot(root));
|
|
31
|
+
let canonicalBase;
|
|
32
|
+
try {
|
|
33
|
+
const info = await lstat(base);
|
|
34
|
+
if (info.isSymbolicLink() || !info.isDirectory())
|
|
35
|
+
throw new TypeError("verifier diagnostic supplement root is unsafe");
|
|
36
|
+
canonicalBase = await realpath(base);
|
|
37
|
+
if (canonicalBase !== path.resolve(base))
|
|
38
|
+
throw new TypeError("verifier diagnostic supplement root is unsafe");
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
if (error.code === "ENOENT")
|
|
42
|
+
return null;
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
const manifestRef = path.join(relative, "repair.json").split(path.sep).join("/");
|
|
46
|
+
let manifestBytes;
|
|
47
|
+
try {
|
|
48
|
+
manifestBytes = await readContained(canonicalBase, manifestRef, MAX_INDEX_BYTES);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (error.code === "ENOENT")
|
|
52
|
+
return null;
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
const manifest = parseVerifierDiagnosticRepairManifest(JSON.parse(manifestBytes.toString("utf8")));
|
|
56
|
+
const run = await loadRunRecord(runRoot, { verifyTrajectory: false });
|
|
57
|
+
const parent = run.record.parent;
|
|
58
|
+
if (manifest.run_id !== runId || !parent || run.record.context.kind !== "benchmark_task"
|
|
59
|
+
|| manifest.parent.eval_id !== parent.eval_id || manifest.parent.trial_id !== parent.trial_id
|
|
60
|
+
|| manifest.parent.attempt !== parent.attempt || manifest.parent.task_id !== run.record.context.task_id) {
|
|
61
|
+
throw new TypeError("verifier diagnostic repair parent identity mismatch");
|
|
62
|
+
}
|
|
63
|
+
const bundle = await verifyResultBundleIndex(runRoot);
|
|
64
|
+
const bundleIndexSha256 = sha256Bytes(await readContained(runRoot, "bundle.index.json", MAX_INDEX_BYTES));
|
|
65
|
+
if (manifest.original.bundle_digest !== bundle.bundle_digest
|
|
66
|
+
|| manifest.original.bundle_index_sha256 !== bundleIndexSha256
|
|
67
|
+
|| manifest.original.diagnostics_index_sha256 !== originalIndexSha256) {
|
|
68
|
+
throw new TypeError("verifier diagnostic repair original bundle identity mismatch");
|
|
69
|
+
}
|
|
70
|
+
const expectedSources = sourceIdentitiesFromLegacyIndex(JSON.parse(originalIndex.toString("utf8")));
|
|
71
|
+
if (JSON.stringify(manifest.source.artifacts) !== JSON.stringify(expectedSources)) {
|
|
72
|
+
throw new TypeError("verifier diagnostic repair source identity mismatch");
|
|
73
|
+
}
|
|
74
|
+
const repairedIndexRef = path.join(relative, DIAGNOSTICS_INDEX_REF).split(path.sep).join("/");
|
|
75
|
+
const repairedIndex = await readContained(canonicalBase, repairedIndexRef, MAX_INDEX_BYTES);
|
|
76
|
+
if (sha256Bytes(repairedIndex) !== manifest.repaired.diagnostics_index_sha256) {
|
|
77
|
+
throw new TypeError("verifier diagnostic repair index digest mismatch");
|
|
78
|
+
}
|
|
79
|
+
const repairedValue = JSON.parse(repairedIndex.toString("utf8"));
|
|
80
|
+
if (repairedValue.schema_version !== "2" || repairedValue.kind !== "verifier-diagnostics"
|
|
81
|
+
|| !Array.isArray(repairedValue.artifacts) || !Array.isArray(repairedValue.losses)
|
|
82
|
+
|| repairedValue.losses.length !== 0) {
|
|
83
|
+
throw new TypeError("verifier diagnostic repair index is incomplete");
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
directory: path.join(canonicalBase, relative),
|
|
87
|
+
manifest,
|
|
88
|
+
repair_sha256: sha256Bytes(manifestBytes),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
async function canonicalStateRoot(root) {
|
|
92
|
+
const resolved = path.resolve(root);
|
|
93
|
+
const info = await lstat(resolved);
|
|
94
|
+
if (info.isSymbolicLink() || !info.isDirectory())
|
|
95
|
+
throw new TypeError("Hitch state root is unsafe");
|
|
96
|
+
const canonical = await realpath(resolved);
|
|
97
|
+
const canonicalInfo = await lstat(canonical);
|
|
98
|
+
if (canonicalInfo.isSymbolicLink() || !canonicalInfo.isDirectory())
|
|
99
|
+
throw new TypeError("Hitch state root is unsafe");
|
|
100
|
+
return canonical;
|
|
101
|
+
}
|
|
102
|
+
export function sourceIdentitiesFromLegacyIndex(value) {
|
|
103
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
104
|
+
throw new TypeError("verifier diagnostics index is invalid");
|
|
105
|
+
const index = value;
|
|
106
|
+
if (index.schema_version !== "1" || index.kind !== "verifier-diagnostics" || !Array.isArray(index.artifacts)) {
|
|
107
|
+
throw new TypeError("verifier diagnostics repair requires a legacy index");
|
|
108
|
+
}
|
|
109
|
+
const seen = new Set();
|
|
110
|
+
const artifacts = index.artifacts.map((raw) => {
|
|
111
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
112
|
+
throw new TypeError("legacy verifier diagnostic artifact is invalid");
|
|
113
|
+
const artifact = raw;
|
|
114
|
+
const name = artifact.name;
|
|
115
|
+
if (typeof name !== "string" || !ARTIFACT_NAMES.has(name) || seen.has(name)
|
|
116
|
+
|| artifact.ref !== `verifier/${name}` || typeof artifact.truncated !== "boolean"
|
|
117
|
+
|| !Number.isSafeInteger(artifact.source_bytes) || Number(artifact.source_bytes) < 0
|
|
118
|
+
|| typeof artifact.source_sha256 !== "string" || !/^sha256:[0-9a-f]{64}$/.test(artifact.source_sha256)) {
|
|
119
|
+
throw new TypeError("legacy verifier diagnostic artifact identity is invalid");
|
|
120
|
+
}
|
|
121
|
+
seen.add(name);
|
|
122
|
+
return {
|
|
123
|
+
name: name,
|
|
124
|
+
bytes: Number(artifact.source_bytes),
|
|
125
|
+
sha256: artifact.source_sha256,
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
return artifacts.sort((left, right) => left.name.localeCompare(right.name));
|
|
129
|
+
}
|
|
130
|
+
export function legacyIndexNeedsDiagnosticRepair(value) {
|
|
131
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
132
|
+
return false;
|
|
133
|
+
const index = value;
|
|
134
|
+
return index.schema_version === "1" && Array.isArray(index.artifacts)
|
|
135
|
+
&& index.artifacts.some((raw) => Boolean(raw && typeof raw === "object" && !Array.isArray(raw) && raw.truncated === true));
|
|
136
|
+
}
|
|
137
|
+
async function readContained(root, relative, maximumBytes) {
|
|
138
|
+
const opened = await openContainedRegularFile(root, relative, maximumBytes);
|
|
139
|
+
try {
|
|
140
|
+
const bytes = Buffer.allocUnsafe(opened.size);
|
|
141
|
+
let position = 0;
|
|
142
|
+
while (position < bytes.length) {
|
|
143
|
+
const read = await opened.handle.read(bytes, position, bytes.length - position, position);
|
|
144
|
+
if (read.bytesRead === 0)
|
|
145
|
+
throw new TypeError("verifier diagnostic evidence changed while being read");
|
|
146
|
+
position += read.bytesRead;
|
|
147
|
+
}
|
|
148
|
+
if ((await opened.handle.read(Buffer.allocUnsafe(1), 0, 1, bytes.length)).bytesRead !== 0) {
|
|
149
|
+
throw new TypeError("verifier diagnostic evidence changed while being read");
|
|
150
|
+
}
|
|
151
|
+
await opened.assertUnchanged();
|
|
152
|
+
return bytes;
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
await opened.handle.close();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function parseVerifierDiagnosticRepairManifest(value) {
|
|
159
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
160
|
+
throw new TypeError("verifier diagnostic repair manifest is invalid");
|
|
161
|
+
const record = value;
|
|
162
|
+
exact(record, ["schema_version", "kind", "run_id", "parent", "original", "source", "repaired", "created_at"]);
|
|
163
|
+
if (record.schema_version !== "1" || record.kind !== "verifier-diagnostics-repair"
|
|
164
|
+
|| typeof record.run_id !== "string" || !/^run_[a-f0-9]{32}$/.test(record.run_id)
|
|
165
|
+
|| typeof record.created_at !== "string" || !Number.isFinite(Date.parse(record.created_at))) {
|
|
166
|
+
throw new TypeError("verifier diagnostic repair manifest identity is invalid");
|
|
167
|
+
}
|
|
168
|
+
const parent = object(record.parent, "verifier diagnostic repair parent");
|
|
169
|
+
exact(parent, ["eval_id", "trial_id", "attempt", "task_id"]);
|
|
170
|
+
if (typeof parent.eval_id !== "string" || !/^eval_[a-f0-9]{32}$/.test(parent.eval_id)
|
|
171
|
+
|| typeof parent.trial_id !== "string" || !parent.trial_id || typeof parent.task_id !== "string" || !parent.task_id
|
|
172
|
+
|| !Number.isSafeInteger(parent.attempt) || Number(parent.attempt) < 1)
|
|
173
|
+
throw new TypeError("verifier diagnostic repair parent is invalid");
|
|
174
|
+
const original = object(record.original, "verifier diagnostic repair original identity");
|
|
175
|
+
exact(original, ["bundle_digest", "bundle_index_sha256", "diagnostics_index_sha256"]);
|
|
176
|
+
const source = object(record.source, "verifier diagnostic repair source");
|
|
177
|
+
exact(source, ["kind", "relative_trial_directory", "artifacts"]);
|
|
178
|
+
const repaired = object(record.repaired, "verifier diagnostic repair output");
|
|
179
|
+
exact(repaired, ["diagnostics_index_sha256"]);
|
|
180
|
+
for (const digest of [original.bundle_digest, original.bundle_index_sha256, original.diagnostics_index_sha256, repaired.diagnostics_index_sha256]) {
|
|
181
|
+
if (typeof digest !== "string" || !/^sha256:[0-9a-f]{64}$/.test(digest))
|
|
182
|
+
throw new TypeError("verifier diagnostic repair digest is invalid");
|
|
183
|
+
}
|
|
184
|
+
if (source.kind !== "harbor-trial" || typeof source.relative_trial_directory !== "string"
|
|
185
|
+
|| !validRelativePath(source.relative_trial_directory) || !Array.isArray(source.artifacts)) {
|
|
186
|
+
throw new TypeError("verifier diagnostic repair source is invalid");
|
|
187
|
+
}
|
|
188
|
+
const artifacts = source.artifacts.map((raw) => {
|
|
189
|
+
const artifact = object(raw, "verifier diagnostic repair source artifact");
|
|
190
|
+
exact(artifact, ["name", "bytes", "sha256"]);
|
|
191
|
+
if (typeof artifact.name !== "string" || !ARTIFACT_NAMES.has(artifact.name)
|
|
192
|
+
|| !Number.isSafeInteger(artifact.bytes) || Number(artifact.bytes) < 0
|
|
193
|
+
|| typeof artifact.sha256 !== "string" || !/^sha256:[0-9a-f]{64}$/.test(artifact.sha256)) {
|
|
194
|
+
throw new TypeError("verifier diagnostic repair source artifact is invalid");
|
|
195
|
+
}
|
|
196
|
+
return { name: artifact.name, bytes: Number(artifact.bytes), sha256: artifact.sha256 };
|
|
197
|
+
});
|
|
198
|
+
const canonical = [...artifacts].sort((left, right) => left.name.localeCompare(right.name));
|
|
199
|
+
if (new Set(artifacts.map((entry) => entry.name)).size !== artifacts.length || JSON.stringify(canonical) !== JSON.stringify(artifacts)) {
|
|
200
|
+
throw new TypeError("verifier diagnostic repair source artifacts are not canonical");
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
schema_version: "1", kind: "verifier-diagnostics-repair", run_id: record.run_id,
|
|
204
|
+
parent: { eval_id: parent.eval_id, trial_id: parent.trial_id, attempt: Number(parent.attempt), task_id: parent.task_id },
|
|
205
|
+
original: {
|
|
206
|
+
bundle_digest: original.bundle_digest,
|
|
207
|
+
bundle_index_sha256: original.bundle_index_sha256,
|
|
208
|
+
diagnostics_index_sha256: original.diagnostics_index_sha256,
|
|
209
|
+
},
|
|
210
|
+
source: { kind: "harbor-trial", relative_trial_directory: source.relative_trial_directory, artifacts },
|
|
211
|
+
repaired: { diagnostics_index_sha256: repaired.diagnostics_index_sha256 },
|
|
212
|
+
created_at: record.created_at,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
function object(value, label) {
|
|
216
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
217
|
+
throw new TypeError(`${label} is invalid`);
|
|
218
|
+
return value;
|
|
219
|
+
}
|
|
220
|
+
function exact(value, fields) {
|
|
221
|
+
if (Object.keys(value).some((field) => !fields.includes(field)))
|
|
222
|
+
throw new TypeError("verifier diagnostic repair has unknown fields");
|
|
223
|
+
}
|
|
224
|
+
function validRelativePath(value) {
|
|
225
|
+
return value === value.normalize("NFC") && !path.posix.isAbsolute(value) && !value.includes("\\")
|
|
226
|
+
&& value.split("/").every((segment) => segment !== "" && segment !== "." && segment !== "..");
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=verifier-diagnostic-supplement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier-diagnostic-supplement.js","sourceRoot":"","sources":["../../../src/runs/verifier-diagnostic-supplement.ts"],"names":[],"mappings":"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"}
|