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.
Files changed (30) hide show
  1. package/README.md +12 -11
  2. package/README.zh-CN.md +10 -9
  3. package/dist/src/cli/commands/capabilities.js +1 -0
  4. package/dist/src/cli/commands/capabilities.js.map +1 -1
  5. package/dist/src/cli/commands/verifier.js +54 -3
  6. package/dist/src/cli/commands/verifier.js.map +1 -1
  7. package/dist/src/cli/output.js +2 -0
  8. package/dist/src/cli/output.js.map +1 -1
  9. package/dist/src/evals/benchmark-adapter-manifest.js +19 -1
  10. package/dist/src/evals/benchmark-adapter-manifest.js.map +1 -1
  11. package/dist/src/evals/index.js +1 -0
  12. package/dist/src/evals/index.js.map +1 -1
  13. package/dist/src/evals/verifier-artifacts.js +98 -153
  14. package/dist/src/evals/verifier-artifacts.js.map +1 -1
  15. package/dist/src/evals/verifier-diagnostic-repair.js +276 -0
  16. package/dist/src/evals/verifier-diagnostic-repair.js.map +1 -0
  17. package/dist/src/runs/index.js +3 -2
  18. package/dist/src/runs/index.js.map +1 -1
  19. package/dist/src/runs/verifier-diagnostic-storage.js +237 -0
  20. package/dist/src/runs/verifier-diagnostic-storage.js.map +1 -0
  21. package/dist/src/runs/verifier-diagnostic-supplement.js +228 -0
  22. package/dist/src/runs/verifier-diagnostic-supplement.js.map +1 -0
  23. package/dist/src/runs/verifier-evidence.js +119 -118
  24. package/dist/src/runs/verifier-evidence.js.map +1 -1
  25. package/dist/src/trajectories/providers/deepseek.js +52 -38
  26. package/dist/src/trajectories/providers/deepseek.js.map +1 -1
  27. package/dist/src/trajectories/store.js +17 -0
  28. package/dist/src/trajectories/store.js.map +1 -1
  29. package/docs/schemas/verifier-diagnostic-page.schema.json +97 -0
  30. package/package.json +1 -1
@@ -1,17 +1,15 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { realpath } from "node:fs/promises";
3
- import { StringDecoder } from "node:string_decoder";
4
3
  import path from "node:path";
5
4
  import { PROVIDER_ENVIRONMENT_NAMES, atomicWriteJSON, credentialValuesFromEnv, openContainedRegularFile, redactCredentialText, writePrivateFile } from "../foundation/index.js";
5
+ import { sanitizeVerifierJson, sanitizeVerifierText } from "../runs/index.js";
6
6
  import { captureVerifierScoreEvidence } from "./verifier-score-artifacts.js";
7
- export const DEFAULT_VERIFIER_DIAGNOSTIC_MAX_BYTES = 64 * 1024;
8
7
  export const MAX_VERIFIER_DIAGNOSTIC_MAX_BYTES = 16 * 1024 * 1024;
8
+ export const DEFAULT_VERIFIER_DIAGNOSTIC_MAX_BYTES = MAX_VERIFIER_DIAGNOSTIC_MAX_BYTES;
9
9
  export const VERIFIER_DIAGNOSTICS_INDEX_REF = "verifier/diagnostics.json";
10
10
  export const VERIFIER_ARTIFACT_NAMES = [
11
11
  "ctrf.json", "test-stdout.txt", "test-stderr.txt", "stdout.txt", "stderr.txt",
12
12
  ];
13
- const TRUNCATION_MARKER = Buffer.from("\n[... verifier artifact truncated ...]\n", "utf8");
14
- const MAX_LOG_LINE_BYTES = 1024 * 1024;
15
13
  export async function persistTrialVerifierDiagnostics(input) {
16
14
  const env = input.env ?? process.env;
17
15
  const credentialValues = credentialValuesFromEnv([...PROVIDER_ENVIRONMENT_NAMES, ...(input.passEnv ?? [])], env);
@@ -53,25 +51,43 @@ async function copyCandidateIneligibleDiagnostic(trialDirectory, runDirectory, s
53
51
  return;
54
52
  await atomicWriteJSON(path.join(runDirectory, "verifier", "candidate-ineligible.json"), value);
55
53
  }
56
- /** Persist bounded, redacted verifier artifacts in the immutable run bundle. */
54
+ /** Persist complete redacted verifier artifacts up to an explicit hard cap. */
57
55
  export async function captureVerifierDiagnostics(trialDirectory, runDirectory, options = {}) {
58
56
  const maxArtifactBytes = options.maxArtifactBytes ?? DEFAULT_VERIFIER_DIAGNOSTIC_MAX_BYTES;
59
- if (!Number.isSafeInteger(maxArtifactBytes) || maxArtifactBytes <= TRUNCATION_MARKER.length + 2
57
+ if (!Number.isSafeInteger(maxArtifactBytes) || maxArtifactBytes <= 0
60
58
  || maxArtifactBytes > MAX_VERIFIER_DIAGNOSTIC_MAX_BYTES) {
61
59
  throw new TypeError("verifier diagnostic artifact limit is invalid");
62
60
  }
63
61
  throwIfAborted(options.signal);
64
62
  const root = await realpath(trialDirectory);
65
63
  const artifacts = [];
64
+ const losses = [];
66
65
  const redactions = new Map();
67
66
  for (const name of VERIFIER_ARTIFACT_NAMES) {
68
67
  throwIfAborted(options.signal);
69
68
  const safe = await safeArtifact(root, name);
70
69
  if (!safe)
71
70
  continue;
71
+ const mediaType = name === "ctrf.json" ? "application/json" : "text/plain";
72
+ if (safe.size > maxArtifactBytes) {
73
+ try {
74
+ await safe.assertUnchanged();
75
+ }
76
+ finally {
77
+ await safe.handle.close();
78
+ }
79
+ losses.push({
80
+ name,
81
+ media_type: mediaType,
82
+ source_bytes: safe.size,
83
+ loss_reason: "persistence_limit_exceeded",
84
+ persistence_limit_bytes: maxArtifactBytes,
85
+ });
86
+ continue;
87
+ }
72
88
  let captured;
73
89
  try {
74
- captured = await captureText(safe.handle, maxArtifactBytes, options.credentialValues ?? [], options.signal);
90
+ captured = await captureArtifact(safe.handle, safe.size, mediaType, options.credentialValues ?? [], options.signal);
75
91
  await safe.assertUnchanged();
76
92
  if (captured.sourceBytes !== safe.size)
77
93
  throw new TypeError(`verifier artifact changed while being captured: ${name}`);
@@ -79,6 +95,17 @@ export async function captureVerifierDiagnostics(trialDirectory, runDirectory, o
79
95
  finally {
80
96
  await safe.handle.close();
81
97
  }
98
+ if (captured.lossReason || !captured.stored || captured.stored.length > maxArtifactBytes) {
99
+ losses.push({
100
+ name,
101
+ media_type: mediaType,
102
+ source_bytes: captured.sourceBytes,
103
+ source_sha256: captured.sourceSha256,
104
+ loss_reason: captured.lossReason ?? "persistence_limit_exceeded",
105
+ persistence_limit_bytes: maxArtifactBytes,
106
+ });
107
+ continue;
108
+ }
82
109
  mergeCounts(redactions, captured.redactions);
83
110
  const ref = `verifier/${name}`;
84
111
  const destination = path.join(runDirectory, ...ref.split("/"));
@@ -87,22 +114,24 @@ export async function captureVerifierDiagnostics(trialDirectory, runDirectory, o
87
114
  artifacts.push({
88
115
  name,
89
116
  ref,
90
- media_type: name === "ctrf.json" ? "application/json" : "text/plain",
117
+ media_type: mediaType,
91
118
  source_bytes: captured.sourceBytes,
92
119
  source_sha256: captured.sourceSha256,
93
120
  bytes: captured.contentBytes,
94
121
  sha256: captured.contentSha256,
95
122
  stored_bytes: stored.length,
96
123
  stored_sha256: sha256(stored),
97
- truncated: captured.truncated,
124
+ truncated: false,
98
125
  });
99
126
  }
100
- if (artifacts.length === 0)
127
+ if (artifacts.length === 0 && losses.length === 0)
101
128
  return null;
102
129
  const index = {
103
- schema_version: "1",
130
+ schema_version: "2",
104
131
  kind: "verifier-diagnostics",
132
+ hard_cap_bytes: maxArtifactBytes,
105
133
  artifacts,
134
+ losses,
106
135
  redactions: canonicalCounts(redactions),
107
136
  };
108
137
  await atomicWriteJSON(path.join(runDirectory, ...VERIFIER_DIAGNOSTICS_INDEX_REF.split("/")), index);
@@ -118,157 +147,73 @@ async function safeArtifact(root, name, maximumBytes) {
118
147
  throw new TypeError(`unsafe verifier artifact: ${name}`, { cause: error });
119
148
  }
120
149
  }
121
- async function captureText(handle, maxBytes, credentialValues, signal) {
122
- const sourceHash = createHash("sha256");
123
- const contentHash = createHash("sha256");
124
- const decoder = new StringDecoder("utf8");
125
- const bounded = new BoundedBuffer(maxBytes);
126
- const redactions = new Map();
127
- let sourceBytes = 0;
128
- let pending = "";
129
- let discarding = false;
130
- const emit = (value) => {
131
- const redacted = redactCredentialText(value, credentialValues);
132
- mergeCounts(redactions, redacted.redactions);
133
- const bytes = Buffer.from(redacted.text, "utf8");
134
- contentHash.update(bytes);
135
- bounded.append(bytes);
136
- };
137
- const drain = () => {
138
- for (;;) {
139
- const newline = pending.indexOf("\n");
140
- if (discarding) {
141
- if (newline < 0) {
142
- pending = "";
143
- return;
144
- }
145
- pending = pending.slice(newline + 1);
146
- discarding = false;
147
- continue;
148
- }
149
- if (newline >= 0) {
150
- emit(pending.slice(0, newline + 1));
151
- pending = pending.slice(newline + 1);
152
- continue;
153
- }
154
- if (Buffer.byteLength(pending, "utf8") > MAX_LOG_LINE_BYTES) {
155
- emit("[REDACTED OVERSIZED VERIFIER LOG LINE]\n");
156
- increment(redactions, "oversized-verifier-log-line-v1");
157
- bounded.markOmitted();
158
- pending = "";
159
- discarding = true;
160
- }
161
- return;
150
+ async function captureArtifact(handle, expectedBytes, mediaType, credentialValues, signal) {
151
+ throwIfAborted(signal);
152
+ const source = await readExactFile(handle, expectedBytes, signal);
153
+ throwIfAborted(signal);
154
+ let stored;
155
+ let redactions;
156
+ if (mediaType === "application/json") {
157
+ let parsed;
158
+ try {
159
+ parsed = JSON.parse(source.toString("utf8"));
162
160
  }
163
- };
164
- const buffer = Buffer.allocUnsafe(64 * 1024);
165
- let position = 0;
166
- for (;;) {
167
- throwIfAborted(signal);
168
- const { bytesRead } = await handle.read(buffer, 0, buffer.length, position);
169
- if (bytesRead === 0)
170
- break;
171
- position += bytesRead;
172
- const bytes = buffer.subarray(0, bytesRead);
173
- sourceHash.update(bytes);
174
- sourceBytes += bytes.length;
175
- pending += decoder.write(bytes);
176
- drain();
161
+ catch {
162
+ return {
163
+ sourceSha256: sha256(source), sourceBytes: source.length,
164
+ contentSha256: sha256(Buffer.alloc(0)), contentBytes: 0,
165
+ lossReason: "invalid_json", redactions: new Map(),
166
+ };
167
+ }
168
+ if (!isJsonValue(parsed)) {
169
+ return {
170
+ sourceSha256: sha256(source), sourceBytes: source.length,
171
+ contentSha256: sha256(Buffer.alloc(0)), contentBytes: 0,
172
+ lossReason: "invalid_json", redactions: new Map(),
173
+ };
174
+ }
175
+ const sanitized = sanitizeVerifierJson(parsed, credentialValues);
176
+ stored = Buffer.from(JSON.stringify(sanitized.value), "utf8");
177
+ redactions = sanitized.redactions;
178
+ }
179
+ else {
180
+ const sanitized = sanitizeVerifierText(source.toString("utf8"), credentialValues);
181
+ stored = Buffer.from(sanitized.text, "utf8");
182
+ redactions = sanitized.redactions;
177
183
  }
178
- pending += decoder.end();
179
- drain();
180
- if (!discarding && pending)
181
- emit(pending);
182
- throwIfAborted(signal);
183
184
  return {
184
- sourceSha256: `sha256:${sourceHash.digest("hex")}`,
185
- sourceBytes,
186
- contentSha256: `sha256:${contentHash.digest("hex")}`,
187
- contentBytes: bounded.totalBytes,
188
- stored: bounded.value(),
189
- truncated: bounded.truncated,
185
+ sourceSha256: sha256(source),
186
+ sourceBytes: source.length,
187
+ contentSha256: sha256(stored),
188
+ contentBytes: stored.length,
189
+ stored,
190
190
  redactions,
191
191
  };
192
192
  }
193
- class BoundedBuffer {
194
- limit;
195
- payloadLimit;
196
- headLimit;
197
- tailLimit;
198
- totalBytes = 0;
199
- clipped = false;
200
- omitted = false;
201
- complete = [];
202
- head = Buffer.alloc(0);
203
- tail = Buffer.alloc(0);
204
- constructor(limit) {
205
- this.limit = limit;
206
- this.payloadLimit = limit - TRUNCATION_MARKER.length;
207
- this.headLimit = Math.floor(this.payloadLimit / 2);
208
- this.tailLimit = this.payloadLimit - this.headLimit;
209
- }
210
- append(value) {
211
- if (value.length === 0)
212
- return;
213
- this.totalBytes += value.length;
214
- if (!this.clipped) {
215
- this.complete.push(value);
216
- const combined = Buffer.concat(this.complete);
217
- if (combined.length <= this.limit)
218
- return;
219
- this.clipped = true;
220
- this.complete = [];
221
- this.head = combined.subarray(0, this.headLimit);
222
- this.tail = combined.subarray(Math.max(0, combined.length - this.tailLimit));
223
- return;
224
- }
225
- this.tail = rollingTail(this.tail, value, this.tailLimit);
226
- }
227
- value() {
228
- return this.clipped
229
- ? Buffer.concat([
230
- validUtf8Prefix(this.head),
231
- TRUNCATION_MARKER,
232
- validUtf8Suffix(this.tail),
233
- ])
234
- : Buffer.concat(this.complete);
235
- }
236
- markOmitted() {
237
- this.omitted = true;
193
+ async function readExactFile(handle, expectedBytes, signal) {
194
+ const result = Buffer.allocUnsafe(expectedBytes);
195
+ let position = 0;
196
+ while (position < expectedBytes) {
197
+ throwIfAborted(signal);
198
+ const read = await handle.read(result, position, expectedBytes - position, position);
199
+ if (read.bytesRead === 0)
200
+ throw new TypeError("verifier artifact changed while being captured");
201
+ position += read.bytesRead;
238
202
  }
239
- get truncated() {
240
- return this.clipped || this.omitted;
203
+ const probe = Buffer.allocUnsafe(1);
204
+ if ((await handle.read(probe, 0, 1, expectedBytes)).bytesRead !== 0) {
205
+ throw new TypeError("verifier artifact changed while being captured");
241
206
  }
207
+ return result;
242
208
  }
243
- function validUtf8Prefix(value) {
244
- let end = value.length;
245
- while (end > 0 && (value[end - 1] & 0xc0) === 0x80)
246
- end -= 1;
247
- const lead = end - 1;
248
- return lead >= 0 && utf8SequenceLength(value[lead]) > value.length - lead ? value.subarray(0, lead) : value;
249
- }
250
- function validUtf8Suffix(value) {
251
- let start = 0;
252
- while (start < value.length && (value[start] & 0xc0) === 0x80)
253
- start += 1;
254
- return value.subarray(start);
255
- }
256
- function utf8SequenceLength(byte) {
257
- if ((byte & 0x80) === 0)
258
- return 1;
259
- if ((byte & 0xe0) === 0xc0)
260
- return 2;
261
- if ((byte & 0xf0) === 0xe0)
262
- return 3;
263
- if ((byte & 0xf8) === 0xf0)
264
- return 4;
265
- return 1;
266
- }
267
- function rollingTail(current, next, limit) {
268
- if (next.length >= limit)
269
- return next.subarray(next.length - limit);
270
- const keep = Math.max(0, limit - next.length);
271
- return Buffer.concat([current.subarray(Math.max(0, current.length - keep)), next]);
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" && Object.values(value).every(isJsonValue);
272
217
  }
273
218
  function canonicalCounts(counts) {
274
219
  return [...counts.entries()]
@@ -1 +1 @@
1
- {"version":3,"file":"verifier-artifacts.js","sourceRoot":"","sources":["../../../src/evals/verifier-artifacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verifier-artifacts.js","sourceRoot":"","sources":["../../../src/evals/verifier-artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,276 @@
1
+ import { lstat, mkdir, mkdtemp, realpath, rename, rm, stat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { validateRelativePath } from "../domain/index.js";
4
+ import { HitchError, PROVIDER_ENVIRONMENT_NAMES, atomicWriteJSON, credentialValuesFromEnv, ensureDir, openContainedRegularFile, sha256Bytes, statePaths, withFileLock } from "../foundation/index.js";
5
+ import { legacyIndexNeedsDiagnosticRepair, loadRunRecord, loadVerifierDiagnosticSupplement, loadVerifierEvidence, sourceIdentitiesFromLegacyIndex, verifierDiagnosticSupplementRelative, verifyResultBundleIndex, } from "../runs/index.js";
6
+ import { captureVerifierDiagnostics } from "./verifier-artifacts.js";
7
+ const DIAGNOSTICS_INDEX_REF = "verifier/diagnostics.json";
8
+ const MAX_INDEX_BYTES = 16 * 1024 * 1024;
9
+ export async function repairVerifierDiagnostics(options) {
10
+ const { root, runId } = options;
11
+ if (!/^run_[a-f0-9]{32}$/.test(runId))
12
+ throw new TypeError(`invalid run ID: ${runId}`);
13
+ const stateRoot = await canonicalStateRoot(root);
14
+ const runDirectory = path.join(statePaths(stateRoot).runs, runId);
15
+ const runRoot = await safeDirectory(runDirectory, "run");
16
+ const loaded = await loadRunRecord(runRoot, { verifyTrajectory: false });
17
+ const parent = loaded.record.parent;
18
+ if (!parent || !/^eval_[a-f0-9]{32}$/.test(parent.eval_id) || loaded.record.context.kind !== "benchmark_task") {
19
+ throw repairError("run has no supported Harbor eval parent", "verifier_diagnostic_repair_unsupported");
20
+ }
21
+ const evidence = await loadVerifierEvidence(stateRoot, runId, { env: options.env ?? process.env });
22
+ if (evidence.verifier.status === "corrupt") {
23
+ throw repairError("run verifier evidence is corrupt", "verifier_evidence_corrupt");
24
+ }
25
+ const bundle = await verifyResultBundleIndex(runRoot);
26
+ const bundleIndexSha256 = sha256Bytes(await readContained(runRoot, "bundle.index.json", MAX_INDEX_BYTES));
27
+ const originalIndexBytes = await readContained(runRoot, DIAGNOSTICS_INDEX_REF, MAX_INDEX_BYTES).catch((error) => {
28
+ if (error.code === "ENOENT") {
29
+ throw repairError("run has no indexed verifier diagnostics", "verifier_diagnostic_repair_unsupported");
30
+ }
31
+ throw error;
32
+ });
33
+ const originalIndex = JSON.parse(originalIndexBytes.toString("utf8"));
34
+ if (!legacyIndexNeedsDiagnosticRepair(originalIndex)) {
35
+ if (hasExplicitV2Losses(originalIndex)) {
36
+ throw repairError("version 2 diagnostics contain explicit source loss and cannot be safely reconstructed", "verifier_diagnostic_repair_source_unavailable");
37
+ }
38
+ return { schema_version: "1", kind: "verifier-diagnostics-repair-result", run_id: runId, status: "not_needed" };
39
+ }
40
+ if (hasRetiredCredentialRedactions(originalIndex)) {
41
+ throw repairError("legacy diagnostics used credential-value redaction that cannot be safely reproduced", "verifier_diagnostic_repair_credentials_required");
42
+ }
43
+ const originalIndexSha256 = sha256Bytes(originalIndexBytes);
44
+ const existing = await loadVerifierDiagnosticSupplement(stateRoot, runRoot, runId).catch((error) => {
45
+ throw repairError("existing verifier diagnostic repair is corrupt", "verifier_diagnostic_repair_conflict", error);
46
+ });
47
+ if (existing)
48
+ return {
49
+ schema_version: "1", kind: "verifier-diagnostics-repair-result", run_id: runId,
50
+ status: "already_repaired", repair_sha256: existing.repair_sha256,
51
+ diagnostics_index_sha256: existing.manifest.repaired.diagnostics_index_sha256,
52
+ };
53
+ const sourceIdentities = sourceIdentitiesFromLegacyIndex(originalIndex);
54
+ const evalDirectory = path.join(statePaths(stateRoot).evals, parent.eval_id);
55
+ const relativeSource = await resolveSource(evalDirectory, parent.trial_id, parent.attempt, options.source);
56
+ const sourceDirectory = await safeRelativeDirectory(evalDirectory, relativeSource);
57
+ const temporaryRoot = await ensureSafeRelativeDirectory(stateRoot, "tmp");
58
+ const temporaryParent = await mkdtemp(path.join(temporaryRoot, "verifier-diagnostics-repair-"));
59
+ const staging = path.join(temporaryParent, "supplement");
60
+ await ensureDir(staging);
61
+ try {
62
+ const request = JSON.parse((await readContained(runRoot, loaded.record.request_ref, MAX_INDEX_BYTES)).toString("utf8"));
63
+ const credentialNames = Array.isArray(request.credential_names)
64
+ ? request.credential_names.filter((entry) => typeof entry === "string") : [];
65
+ const credentialValues = credentialValuesFromEnv([...PROVIDER_ENVIRONMENT_NAMES, ...credentialNames], options.env ?? process.env);
66
+ const captured = await captureVerifierDiagnostics(sourceDirectory, staging, {
67
+ credentialValues,
68
+ ...(options.signal ? { signal: options.signal } : {}),
69
+ });
70
+ if (!captured || captured.losses.length > 0) {
71
+ throw repairError("Harbor verifier diagnostics cannot be fully persisted", "verifier_diagnostic_repair_source_unavailable");
72
+ }
73
+ const capturedSources = captured.artifacts.map((artifact) => ({
74
+ name: artifact.name, bytes: artifact.source_bytes, sha256: artifact.source_sha256,
75
+ })).sort((left, right) => left.name.localeCompare(right.name));
76
+ if (JSON.stringify(capturedSources) !== JSON.stringify(sourceIdentities)) {
77
+ throw repairError("Harbor verifier diagnostics do not match the sealed source digests", "verifier_diagnostic_repair_source_mismatch");
78
+ }
79
+ const repairedIndexSha256 = sha256Bytes(await readContained(staging, DIAGNOSTICS_INDEX_REF, MAX_INDEX_BYTES));
80
+ const currentBundle = await verifyResultBundleIndex(runRoot);
81
+ const currentBundleIndexSha256 = sha256Bytes(await readContained(runRoot, "bundle.index.json", MAX_INDEX_BYTES));
82
+ const currentOriginalIndexSha256 = sha256Bytes(await readContained(runRoot, DIAGNOSTICS_INDEX_REF, MAX_INDEX_BYTES));
83
+ if (currentBundle.bundle_digest !== bundle.bundle_digest || currentBundleIndexSha256 !== bundleIndexSha256
84
+ || currentOriginalIndexSha256 !== originalIndexSha256) {
85
+ throw repairError("sealed verifier evidence changed during repair", "verifier_diagnostic_repair_conflict");
86
+ }
87
+ const manifest = {
88
+ schema_version: "1",
89
+ kind: "verifier-diagnostics-repair",
90
+ run_id: runId,
91
+ parent: {
92
+ eval_id: parent.eval_id,
93
+ trial_id: parent.trial_id,
94
+ attempt: parent.attempt,
95
+ task_id: loaded.record.context.task_id,
96
+ },
97
+ original: {
98
+ bundle_digest: bundle.bundle_digest,
99
+ bundle_index_sha256: bundleIndexSha256,
100
+ diagnostics_index_sha256: originalIndexSha256,
101
+ },
102
+ source: {
103
+ kind: "harbor-trial",
104
+ relative_trial_directory: relativeSource,
105
+ artifacts: sourceIdentities,
106
+ },
107
+ repaired: { diagnostics_index_sha256: repairedIndexSha256 },
108
+ created_at: new Date().toISOString(),
109
+ };
110
+ await atomicWriteJSON(path.join(staging, "repair.json"), manifest);
111
+ const relativeDestination = verifierDiagnosticSupplementRelative(runId, originalIndexSha256);
112
+ const destinationParent = await ensureSafeRelativeDirectory(stateRoot, path.posix.join("derived", "verifier-diagnostics", runId));
113
+ const destination = path.join(destinationParent, path.basename(relativeDestination));
114
+ const lockDirectory = await ensureSafeRelativeDirectory(stateRoot, path.posix.join("locks", "verifier-diagnostics"));
115
+ const result = await withFileLock(lockDirectory, runId, async () => {
116
+ const already = await loadVerifierDiagnosticSupplement(stateRoot, runRoot, runId).catch((error) => {
117
+ throw repairError("existing verifier diagnostic repair is corrupt", "verifier_diagnostic_repair_conflict", error);
118
+ });
119
+ if (already)
120
+ return {
121
+ schema_version: "1", kind: "verifier-diagnostics-repair-result", run_id: runId,
122
+ status: "already_repaired", repair_sha256: already.repair_sha256,
123
+ diagnostics_index_sha256: already.manifest.repaired.diagnostics_index_sha256,
124
+ };
125
+ try {
126
+ await stat(destination);
127
+ throw repairError("verifier diagnostic repair destination already exists", "verifier_diagnostic_repair_conflict");
128
+ }
129
+ catch (error) {
130
+ if (error.code !== "ENOENT")
131
+ throw error;
132
+ }
133
+ await rename(staging, destination);
134
+ const published = await loadVerifierDiagnosticSupplement(stateRoot, runRoot, runId);
135
+ if (!published)
136
+ throw repairError("verifier diagnostic repair publication is missing", "verifier_diagnostic_repair_conflict");
137
+ return {
138
+ schema_version: "1", kind: "verifier-diagnostics-repair-result", run_id: runId,
139
+ status: "repaired", repair_sha256: published.repair_sha256,
140
+ diagnostics_index_sha256: published.manifest.repaired.diagnostics_index_sha256,
141
+ };
142
+ }, { timeoutCode: "verifier_diagnostic_repair_locked", timeoutExitCode: 12, ...(options.signal ? { signal: options.signal } : {}) });
143
+ return result;
144
+ }
145
+ finally {
146
+ await rm(temporaryParent, { recursive: true, force: true });
147
+ }
148
+ }
149
+ async function canonicalStateRoot(root) {
150
+ const resolved = path.resolve(root);
151
+ const info = await lstat(resolved);
152
+ if (info.isSymbolicLink() || !info.isDirectory())
153
+ throw new TypeError("Hitch state root is unsafe");
154
+ const canonical = await realpath(resolved);
155
+ const canonicalInfo = await lstat(canonical);
156
+ if (canonicalInfo.isSymbolicLink() || !canonicalInfo.isDirectory())
157
+ throw new TypeError("Hitch state root is unsafe");
158
+ return canonical;
159
+ }
160
+ function hasExplicitV2Losses(value) {
161
+ return Boolean(value && typeof value === "object" && !Array.isArray(value)
162
+ && value.schema_version === "2"
163
+ && Array.isArray(value.losses)
164
+ && value.losses.length > 0);
165
+ }
166
+ function hasRetiredCredentialRedactions(value) {
167
+ if (!value || typeof value !== "object" || Array.isArray(value))
168
+ return true;
169
+ const redactions = value.redactions;
170
+ if (!Array.isArray(redactions))
171
+ return true;
172
+ return redactions.some((entry) => Boolean(entry && typeof entry === "object" && !Array.isArray(entry)
173
+ && entry.rule_id === "known-credential-value-v1"));
174
+ }
175
+ async function resolveSource(evalDirectory, trialId, attempt, requested) {
176
+ const candidates = [
177
+ path.posix.join("harbor", "job", trialId),
178
+ path.posix.join("harbor", `attempt-${String(attempt).padStart(4, "0")}`, "job", trialId),
179
+ ];
180
+ if (requested !== undefined) {
181
+ const normalized = validateRelativePath(requested, "verifier repair source");
182
+ if (!candidates.includes(normalized)) {
183
+ throw repairError("verifier repair source is outside the run's known Harbor trial paths", "verifier_diagnostic_repair_source_mismatch");
184
+ }
185
+ await safeRelativeDirectory(evalDirectory, normalized).catch((error) => {
186
+ if (error.code === "ENOENT") {
187
+ throw repairError("Harbor verifier diagnostic source is missing", "verifier_diagnostic_repair_source_unavailable");
188
+ }
189
+ throw error;
190
+ });
191
+ return normalized;
192
+ }
193
+ const available = [];
194
+ for (const candidate of candidates) {
195
+ try {
196
+ await safeRelativeDirectory(evalDirectory, candidate);
197
+ available.push(candidate);
198
+ }
199
+ catch (error) {
200
+ if (error.code !== "ENOENT")
201
+ throw error;
202
+ }
203
+ }
204
+ if (available.length === 0)
205
+ throw repairError("Harbor verifier diagnostic source is missing", "verifier_diagnostic_repair_source_unavailable");
206
+ if (available.length > 1)
207
+ throw repairError("Harbor verifier diagnostic source is ambiguous", "verifier_diagnostic_repair_source_ambiguous");
208
+ return available[0];
209
+ }
210
+ async function safeRelativeDirectory(root, relative) {
211
+ const normalized = validateRelativePath(relative, "verifier repair source");
212
+ const canonicalRoot = await safeDirectory(root, "eval");
213
+ let current = canonicalRoot;
214
+ for (const segment of normalized.split("/")) {
215
+ current = path.join(current, segment);
216
+ const info = await lstat(current);
217
+ if (info.isSymbolicLink() || !info.isDirectory())
218
+ throw new TypeError("verifier repair source path is unsafe");
219
+ if (await realpath(current) !== path.resolve(current))
220
+ throw new TypeError("verifier repair source path is unsafe");
221
+ }
222
+ return current;
223
+ }
224
+ async function safeDirectory(directory, label) {
225
+ const info = await lstat(directory);
226
+ if (info.isSymbolicLink() || !info.isDirectory())
227
+ throw new TypeError(`${label} directory is unsafe`);
228
+ const canonical = await realpath(directory);
229
+ if (canonical !== path.resolve(directory))
230
+ throw new TypeError(`${label} directory is unsafe`);
231
+ return canonical;
232
+ }
233
+ async function ensureSafeRelativeDirectory(root, relative) {
234
+ const normalized = validateRelativePath(relative, "Hitch state directory");
235
+ let current = await safeDirectory(root, "Hitch state root");
236
+ for (const segment of normalized.split("/")) {
237
+ current = path.join(current, segment);
238
+ try {
239
+ await mkdir(current, { mode: 0o700 });
240
+ }
241
+ catch (error) {
242
+ if (error.code !== "EEXIST")
243
+ throw error;
244
+ }
245
+ const info = await lstat(current);
246
+ if (info.isSymbolicLink() || !info.isDirectory() || await realpath(current) !== path.resolve(current)) {
247
+ throw new TypeError("Hitch state directory is unsafe");
248
+ }
249
+ }
250
+ return current;
251
+ }
252
+ async function readContained(root, relative, maximumBytes) {
253
+ const opened = await openContainedRegularFile(root, relative, maximumBytes);
254
+ try {
255
+ const bytes = Buffer.allocUnsafe(opened.size);
256
+ let position = 0;
257
+ while (position < bytes.length) {
258
+ const read = await opened.handle.read(bytes, position, bytes.length - position, position);
259
+ if (read.bytesRead === 0)
260
+ throw new TypeError("verifier diagnostic repair evidence changed while being read");
261
+ position += read.bytesRead;
262
+ }
263
+ if ((await opened.handle.read(Buffer.allocUnsafe(1), 0, 1, bytes.length)).bytesRead !== 0) {
264
+ throw new TypeError("verifier diagnostic repair evidence changed while being read");
265
+ }
266
+ await opened.assertUnchanged();
267
+ return bytes;
268
+ }
269
+ finally {
270
+ await opened.handle.close();
271
+ }
272
+ }
273
+ function repairError(message, code, cause) {
274
+ return new HitchError(message, { code, exitCode: 12, ...(cause === undefined ? {} : { cause }) });
275
+ }
276
+ //# sourceMappingURL=verifier-diagnostic-repair.js.map