agent-hitch 0.2.7 → 0.2.8

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 (287) hide show
  1. package/README.md +16 -2
  2. package/README.zh-CN.md +14 -2
  3. package/dist/bin/hitch.js +25 -3
  4. package/dist/bin/hitch.js.map +1 -1
  5. package/dist/scripts/canary-benchmark.js +54 -0
  6. package/dist/scripts/canary-benchmark.js.map +1 -0
  7. package/dist/scripts/canary-eval-scheduler-throughput.js +47 -0
  8. package/dist/scripts/canary-eval-scheduler-throughput.js.map +1 -0
  9. package/dist/scripts/check-architecture.js +3 -2
  10. package/dist/scripts/check-architecture.js.map +1 -1
  11. package/dist/src/adapters/catalog.js +2 -1
  12. package/dist/src/adapters/catalog.js.map +1 -1
  13. package/dist/src/adapters/providers/codex-auth.js +29 -0
  14. package/dist/src/adapters/providers/codex-auth.js.map +1 -0
  15. package/dist/src/adapters/providers/codex.js +23 -6
  16. package/dist/src/adapters/providers/codex.js.map +1 -1
  17. package/dist/src/adapters/providers/model-call.js +26 -0
  18. package/dist/src/adapters/providers/model-call.js.map +1 -0
  19. package/dist/src/artifacts/index.js +1 -1
  20. package/dist/src/artifacts/index.js.map +1 -1
  21. package/dist/src/artifacts/preparer.js +7 -2
  22. package/dist/src/artifacts/preparer.js.map +1 -1
  23. package/dist/src/backends/harbor/agent-budget.js +31 -0
  24. package/dist/src/backends/harbor/agent-budget.js.map +1 -0
  25. package/dist/src/backends/harbor/backend.js +6 -4
  26. package/dist/src/backends/harbor/backend.js.map +1 -1
  27. package/dist/src/backends/harbor/index.js +1 -0
  28. package/dist/src/backends/harbor/index.js.map +1 -1
  29. package/dist/src/backends/harbor/regrade.js +77 -0
  30. package/dist/src/backends/harbor/regrade.js.map +1 -0
  31. package/dist/src/backends/index.js +1 -0
  32. package/dist/src/backends/index.js.map +1 -1
  33. package/dist/src/benchmarks/index.js +3 -0
  34. package/dist/src/benchmarks/index.js.map +1 -0
  35. package/dist/src/benchmarks/loader.js +271 -0
  36. package/dist/src/benchmarks/loader.js.map +1 -0
  37. package/dist/src/benchmarks/metrics.js +16 -0
  38. package/dist/src/benchmarks/metrics.js.map +1 -0
  39. package/dist/src/benchmarks/toml.js +13 -0
  40. package/dist/src/benchmarks/toml.js.map +1 -0
  41. package/dist/src/benchmarks/validation.js +242 -0
  42. package/dist/src/benchmarks/validation.js.map +1 -0
  43. package/dist/src/cli/arguments.js +6 -4
  44. package/dist/src/cli/arguments.js.map +1 -1
  45. package/dist/src/cli/commands/benchmark.js +22 -0
  46. package/dist/src/cli/commands/benchmark.js.map +1 -0
  47. package/dist/src/cli/commands/capabilities.js +18 -0
  48. package/dist/src/cli/commands/capabilities.js.map +1 -0
  49. package/dist/src/cli/commands/eval.js +15 -3
  50. package/dist/src/cli/commands/eval.js.map +1 -1
  51. package/dist/src/cli/commands/run.js +37 -15
  52. package/dist/src/cli/commands/run.js.map +1 -1
  53. package/dist/src/cli/commands/trajectory.js +96 -5
  54. package/dist/src/cli/commands/trajectory.js.map +1 -1
  55. package/dist/src/cli/commands/verifier.js +36 -0
  56. package/dist/src/cli/commands/verifier.js.map +1 -0
  57. package/dist/src/cli/main.js +6 -0
  58. package/dist/src/cli/main.js.map +1 -1
  59. package/dist/src/cli/output.js +14 -2
  60. package/dist/src/cli/output.js.map +1 -1
  61. package/dist/src/control-plane/eval-control-work.js +5 -0
  62. package/dist/src/control-plane/eval-control-work.js.map +1 -1
  63. package/dist/src/control-plane/eval-scheduler.js +4 -1
  64. package/dist/src/control-plane/eval-scheduler.js.map +1 -1
  65. package/dist/src/control-plane/index.js +1 -1
  66. package/dist/src/control-plane/index.js.map +1 -1
  67. package/dist/src/control-plane/remote-result-transport.js +3 -0
  68. package/dist/src/control-plane/remote-result-transport.js.map +1 -1
  69. package/dist/src/control-plane/remote-work-coordinator.js +1 -0
  70. package/dist/src/control-plane/remote-work-coordinator.js.map +1 -1
  71. package/dist/src/control-plane/remote-work-item.js +62 -0
  72. package/dist/src/control-plane/remote-work-item.js.map +1 -0
  73. package/dist/src/control-plane/remote-work-recovery.js +44 -5
  74. package/dist/src/control-plane/remote-work-recovery.js.map +1 -1
  75. package/dist/src/control-plane/remote-worker-protocol.js +2 -23
  76. package/dist/src/control-plane/remote-worker-protocol.js.map +1 -1
  77. package/dist/src/control-plane/rerun-scheduler.js +51 -14
  78. package/dist/src/control-plane/rerun-scheduler.js.map +1 -1
  79. package/dist/src/control-plane/rerun-submission.js +10 -4
  80. package/dist/src/control-plane/rerun-submission.js.map +1 -1
  81. package/dist/src/control-plane/work-admission.js +2 -0
  82. package/dist/src/control-plane/work-admission.js.map +1 -1
  83. package/dist/src/control-plane/work-dispatcher.js +9 -1
  84. package/dist/src/control-plane/work-dispatcher.js.map +1 -1
  85. package/dist/src/controller-runtime/hash.js +7 -2
  86. package/dist/src/controller-runtime/hash.js.map +1 -1
  87. package/dist/src/daemon/auth.js +5 -0
  88. package/dist/src/daemon/auth.js.map +1 -1
  89. package/dist/src/domain/benchmarks.js +2 -0
  90. package/dist/src/domain/benchmarks.js.map +1 -0
  91. package/dist/src/domain/index.js +4 -0
  92. package/dist/src/domain/index.js.map +1 -1
  93. package/dist/src/domain/runs.js.map +1 -1
  94. package/dist/src/domain/validation.js +11 -4
  95. package/dist/src/domain/validation.js.map +1 -1
  96. package/dist/src/domain/verifier-evidence-validation.js +214 -0
  97. package/dist/src/domain/verifier-evidence-validation.js.map +1 -0
  98. package/dist/src/domain/verifier-evidence.js +3 -0
  99. package/dist/src/domain/verifier-evidence.js.map +1 -0
  100. package/dist/src/domain/verifier-score-contract.js +232 -0
  101. package/dist/src/domain/verifier-score-contract.js.map +1 -0
  102. package/dist/src/evals/benchmark-adapter-manifest.js +219 -0
  103. package/dist/src/evals/benchmark-adapter-manifest.js.map +1 -0
  104. package/dist/src/evals/benchmark-candidate.js +36 -0
  105. package/dist/src/evals/benchmark-candidate.js.map +1 -0
  106. package/dist/src/evals/benchmark-run.js +166 -0
  107. package/dist/src/evals/benchmark-run.js.map +1 -0
  108. package/dist/src/evals/collect-only-rerun.js +2 -1
  109. package/dist/src/evals/collect-only-rerun.js.map +1 -1
  110. package/dist/src/evals/directory.js +1 -1
  111. package/dist/src/evals/directory.js.map +1 -1
  112. package/dist/src/evals/duration-estimator.js +126 -0
  113. package/dist/src/evals/duration-estimator.js.map +1 -0
  114. package/dist/src/evals/eval-lifecycle-events.js +13 -0
  115. package/dist/src/evals/eval-lifecycle-events.js.map +1 -1
  116. package/dist/src/evals/eval-logical-plan.js +51 -0
  117. package/dist/src/evals/eval-logical-plan.js.map +1 -0
  118. package/dist/src/evals/eval-result-builder.js +81 -0
  119. package/dist/src/evals/eval-result-builder.js.map +1 -0
  120. package/dist/src/evals/evolution-baseline.js +191 -0
  121. package/dist/src/evals/evolution-baseline.js.map +1 -0
  122. package/dist/src/evals/execution-plan.js +39 -3
  123. package/dist/src/evals/execution-plan.js.map +1 -1
  124. package/dist/src/evals/failure-classifier.js +61 -0
  125. package/dist/src/evals/failure-classifier.js.map +1 -0
  126. package/dist/src/evals/harbor-artifact-builder.js +6 -2
  127. package/dist/src/evals/harbor-artifact-builder.js.map +1 -1
  128. package/dist/src/evals/harbor-bridge-error.js +41 -1
  129. package/dist/src/evals/harbor-bridge-error.js.map +1 -1
  130. package/dist/src/evals/harbor-node-runtime.js +146 -0
  131. package/dist/src/evals/harbor-node-runtime.js.map +1 -0
  132. package/dist/src/evals/index.js +15 -0
  133. package/dist/src/evals/index.js.map +1 -1
  134. package/dist/src/evals/infrastructure-retry.js +109 -22
  135. package/dist/src/evals/infrastructure-retry.js.map +1 -1
  136. package/dist/src/evals/native-phase-evidence.js +440 -0
  137. package/dist/src/evals/native-phase-evidence.js.map +1 -0
  138. package/dist/src/evals/physical-retry-work.js +31 -0
  139. package/dist/src/evals/physical-retry-work.js.map +1 -0
  140. package/dist/src/evals/planned-execution-support.js +22 -10
  141. package/dist/src/evals/planned-execution-support.js.map +1 -1
  142. package/dist/src/evals/planned-execution.js +120 -112
  143. package/dist/src/evals/planned-execution.js.map +1 -1
  144. package/dist/src/evals/planned-progress-publisher.js +62 -0
  145. package/dist/src/evals/planned-progress-publisher.js.map +1 -0
  146. package/dist/src/evals/planned-retry-execution.js +174 -0
  147. package/dist/src/evals/planned-retry-execution.js.map +1 -0
  148. package/dist/src/evals/planned-retry-lifecycle.js +4 -2
  149. package/dist/src/evals/planned-retry-lifecycle.js.map +1 -1
  150. package/dist/src/evals/preparation-rerun.js +225 -0
  151. package/dist/src/evals/preparation-rerun.js.map +1 -0
  152. package/dist/src/evals/progress.js +48 -8
  153. package/dist/src/evals/progress.js.map +1 -1
  154. package/dist/src/evals/recovery.js +54 -4
  155. package/dist/src/evals/recovery.js.map +1 -1
  156. package/dist/src/evals/regrade-evidence.js +77 -0
  157. package/dist/src/evals/regrade-evidence.js.map +1 -0
  158. package/dist/src/evals/remote-infrastructure-retry.js +84 -18
  159. package/dist/src/evals/remote-infrastructure-retry.js.map +1 -1
  160. package/dist/src/evals/request.js +21 -3
  161. package/dist/src/evals/request.js.map +1 -1
  162. package/dist/src/evals/rerun-inputs.js +19 -0
  163. package/dist/src/evals/rerun-inputs.js.map +1 -1
  164. package/dist/src/evals/rerun-types.js +2 -6
  165. package/dist/src/evals/rerun-types.js.map +1 -1
  166. package/dist/src/evals/rerun.js +27 -20
  167. package/dist/src/evals/rerun.js.map +1 -1
  168. package/dist/src/evals/result-helpers.js +13 -0
  169. package/dist/src/evals/result-helpers.js.map +1 -1
  170. package/dist/src/evals/retry-backoff.js +20 -0
  171. package/dist/src/evals/retry-backoff.js.map +1 -0
  172. package/dist/src/evals/retry-state.js +195 -0
  173. package/dist/src/evals/retry-state.js.map +1 -0
  174. package/dist/src/evals/scheduler-metrics.js +95 -0
  175. package/dist/src/evals/scheduler-metrics.js.map +1 -0
  176. package/dist/src/evals/scheduler-trace-replay.js +107 -0
  177. package/dist/src/evals/scheduler-trace-replay.js.map +1 -0
  178. package/dist/src/evals/service.js +87 -138
  179. package/dist/src/evals/service.js.map +1 -1
  180. package/dist/src/evals/trial-import.js +47 -50
  181. package/dist/src/evals/trial-import.js.map +1 -1
  182. package/dist/src/evals/trial-publication-recovery.js +45 -5
  183. package/dist/src/evals/trial-publication-recovery.js.map +1 -1
  184. package/dist/src/evals/trial-reference-validation.js +49 -0
  185. package/dist/src/evals/trial-reference-validation.js.map +1 -0
  186. package/dist/src/evals/verifier-artifacts.js +317 -0
  187. package/dist/src/evals/verifier-artifacts.js.map +1 -0
  188. package/dist/src/evals/verifier-eligibility.js +25 -0
  189. package/dist/src/evals/verifier-eligibility.js.map +1 -0
  190. package/dist/src/evals/verifier-only-rerun.js +210 -0
  191. package/dist/src/evals/verifier-only-rerun.js.map +1 -0
  192. package/dist/src/evals/verifier-runtime.js +61 -0
  193. package/dist/src/evals/verifier-runtime.js.map +1 -0
  194. package/dist/src/evals/verifier-score-artifacts.js +119 -0
  195. package/dist/src/evals/verifier-score-artifacts.js.map +1 -0
  196. package/dist/src/foundation/contained-file.js +85 -0
  197. package/dist/src/foundation/contained-file.js.map +1 -0
  198. package/dist/src/foundation/credential-redaction.js +26 -1
  199. package/dist/src/foundation/credential-redaction.js.map +1 -1
  200. package/dist/src/foundation/fs.js +2 -1
  201. package/dist/src/foundation/fs.js.map +1 -1
  202. package/dist/src/foundation/index.js +2 -1
  203. package/dist/src/foundation/index.js.map +1 -1
  204. package/dist/src/runs/adapter-process.js +12 -0
  205. package/dist/src/runs/adapter-process.js.map +1 -0
  206. package/dist/src/runs/executor.js +24 -30
  207. package/dist/src/runs/executor.js.map +1 -1
  208. package/dist/src/runs/finalizer.js +17 -0
  209. package/dist/src/runs/finalizer.js.map +1 -1
  210. package/dist/src/runs/index.js +5 -0
  211. package/dist/src/runs/index.js.map +1 -1
  212. package/dist/src/runs/phase-bundle.js +86 -0
  213. package/dist/src/runs/phase-bundle.js.map +1 -0
  214. package/dist/src/runs/phase-cancellation.js +107 -0
  215. package/dist/src/runs/phase-cancellation.js.map +1 -0
  216. package/dist/src/runs/phase-group.js +113 -0
  217. package/dist/src/runs/phase-group.js.map +1 -0
  218. package/dist/src/runs/query.js +1 -1
  219. package/dist/src/runs/query.js.map +1 -1
  220. package/dist/src/runs/records.js +3 -0
  221. package/dist/src/runs/records.js.map +1 -1
  222. package/dist/src/runs/request.js +4 -2
  223. package/dist/src/runs/request.js.map +1 -1
  224. package/dist/src/runs/verifier-evidence-redaction.js +61 -0
  225. package/dist/src/runs/verifier-evidence-redaction.js.map +1 -0
  226. package/dist/src/runs/verifier-evidence.js +459 -0
  227. package/dist/src/runs/verifier-evidence.js.map +1 -0
  228. package/dist/src/runs/verifier-structured-evidence.js +83 -0
  229. package/dist/src/runs/verifier-structured-evidence.js.map +1 -0
  230. package/dist/src/trajectories/analysis.js +288 -0
  231. package/dist/src/trajectories/analysis.js.map +1 -0
  232. package/dist/src/trajectories/chunk-projection.js +148 -0
  233. package/dist/src/trajectories/chunk-projection.js.map +1 -0
  234. package/dist/src/trajectories/content-projection.js +389 -0
  235. package/dist/src/trajectories/content-projection.js.map +1 -0
  236. package/dist/src/trajectories/dsh-chunk-contract.js +176 -0
  237. package/dist/src/trajectories/dsh-chunk-contract.js.map +1 -0
  238. package/dist/src/trajectories/dsh-contract.js +284 -0
  239. package/dist/src/trajectories/dsh-contract.js.map +1 -0
  240. package/dist/src/trajectories/events-chunk-drill.js +95 -0
  241. package/dist/src/trajectories/events-chunk-drill.js.map +1 -0
  242. package/dist/src/trajectories/events-page.js +367 -0
  243. package/dist/src/trajectories/events-page.js.map +1 -0
  244. package/dist/src/trajectories/index.js +3 -0
  245. package/dist/src/trajectories/index.js.map +1 -1
  246. package/dist/src/trajectories/request-attempt.js +47 -0
  247. package/dist/src/trajectories/request-attempt.js.map +1 -0
  248. package/dist/src/trajectories/stream-reader.js +311 -0
  249. package/dist/src/trajectories/stream-reader.js.map +1 -0
  250. package/dist/src/trajectories/surface-fold.js +126 -0
  251. package/dist/src/trajectories/surface-fold.js.map +1 -0
  252. package/dist/src/workers/remote-harbor-worker.js +3 -0
  253. package/dist/src/workers/remote-harbor-worker.js.map +1 -1
  254. package/docs/schemas/benchmark-hook-request-v1.schema.json +65 -0
  255. package/docs/schemas/benchmark-hook-response-v1.schema.json +75 -0
  256. package/docs/schemas/benchmark-hook-v1.schema.json +33 -0
  257. package/docs/schemas/benchmark-lock-v1.schema.json +351 -0
  258. package/docs/schemas/benchmark-metric-v1.schema.json +37 -0
  259. package/docs/schemas/benchmark-package-v1.schema.json +167 -0
  260. package/docs/schemas/benchmark-phase-group.schema.json +41 -0
  261. package/docs/schemas/benchmark-profile-v1.schema.json +141 -0
  262. package/docs/schemas/benchmark-task-v1.schema.json +384 -0
  263. package/docs/schemas/benchmark-tool-result-v1.schema.json +30 -0
  264. package/docs/schemas/error.schema.json +22 -0
  265. package/docs/schemas/eval-progress.schema.json +1 -15
  266. package/docs/schemas/eval-rerun-result.schema.json +6 -1
  267. package/docs/schemas/eval-rerun-submission.schema.json +3 -1
  268. package/docs/schemas/eval-result.schema.json +1 -15
  269. package/docs/schemas/eval-trial-publication.schema.json +1 -25
  270. package/docs/schemas/eval-trial-reference.schema.json +129 -0
  271. package/docs/schemas/regrade-assessment-reference.schema.json +11 -0
  272. package/docs/schemas/run-context.schema.json +15 -0
  273. package/docs/schemas/run-manifest.schema.json +4 -0
  274. package/docs/schemas/run-request.schema.json +4 -0
  275. package/docs/schemas/trajectory-analysis.schema.json +258 -0
  276. package/docs/schemas/trajectory-events-page.schema.json +40 -0
  277. package/docs/schemas/verifier-assessment.schema.json +77 -0
  278. package/docs/schemas/verifier-evidence.schema.json +276 -0
  279. package/integrations/harbor/hitch_benchmark.py +252 -0
  280. package/integrations/harbor/hitch_candidate_recycle.py +262 -0
  281. package/integrations/harbor/hitch_harbor_agent.py +541 -43
  282. package/integrations/harbor/hitch_harbor_environment.py +138 -0
  283. package/integrations/harbor/hitch_harbor_verifier.py +60 -2
  284. package/integrations/harbor/hitch_phase_supervisor.py +452 -0
  285. package/integrations/harbor/hitch_tool_client.mjs +91 -0
  286. package/integrations/model-call/cli.js +57 -0
  287. package/package.json +17 -6
@@ -0,0 +1,440 @@
1
+ import { cp, lstat, mkdir, readFile, realpath } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { isDeepStrictEqual } from "node:util";
4
+ import { benchmarkTreeDigest } from "../benchmarks/index.js";
5
+ import { parseVerifierScores, validateRunObservation } from "../domain/index.js";
6
+ import { atomicWriteJSON, ensureDir, readJSON, sha256Bytes, sha256JSON, statePaths, withFileLock } from "../foundation/index.js";
7
+ import { benchmarkVerifierIdentity, copySealedPhaseRunBundle, defaultModelIdentity, inspectSealedPhaseRunBundle, readBenchmarkPhaseGroup, sealBenchmarkPhaseGroup } from "../runs/index.js";
8
+ import { parseHarnessReference } from "../revisions/index.js";
9
+ import { regradeTreeDigest } from "./regrade-evidence.js";
10
+ import { detectVerifierInfrastructureFailure, primaryVerifierReward, verifierObservation, verifierResult } from "./verifier-diagnostics.js";
11
+ import { importTrialInteractionCapture } from "./interaction-capture-import.js";
12
+ import { writeTrialExecutionEvidence } from "./trial-execution-evidence.js";
13
+ import { writeTrialEnvironmentImageEvidence } from "./trial-environment-evidence.js";
14
+ import { writeEvalTrialPublication } from "./trial-publication.js";
15
+ import { loadBenchmarkAdapterManifest } from "./benchmark-adapter-manifest.js";
16
+ export class NativePhaseBundlePendingError extends Error {
17
+ }
18
+ function object(value) {
19
+ if (!value || typeof value !== "object" || Array.isArray(value))
20
+ throw new Error("invalid native phase evidence object");
21
+ return value;
22
+ }
23
+ async function bytes(directory, relative, maximum = 16 * 1024 * 1024) {
24
+ if (path.isAbsolute(relative) || relative.split(/[\\/]/).some(part => !part || part === "." || part === ".."))
25
+ throw new Error("invalid native evidence path");
26
+ const root = await realpath(directory), file = path.join(root, relative);
27
+ const info = await lstat(file);
28
+ if (!info.isFile() || info.isSymbolicLink() || info.nlink !== 1 || info.size > maximum || await realpath(file) !== file)
29
+ throw new Error("invalid native evidence file");
30
+ return readFile(file);
31
+ }
32
+ async function json(directory, relative) {
33
+ return object(JSON.parse((await bytes(directory, relative)).toString("utf8")));
34
+ }
35
+ /** The private descriptor must belong to the immutable compiled package. */
36
+ export async function nativePhaseDescriptor(input, taskId) {
37
+ const pkg = await readJSON(path.join(input.evalDirectory, "benchmark/package.json"), null);
38
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/.test(taskId))
39
+ return null;
40
+ if (!pkg) {
41
+ if (typeof input.request.dataset !== "string" || !input.request.dataset)
42
+ return null;
43
+ const manifest = await loadBenchmarkAdapterManifest(input.request.dataset);
44
+ if (!manifest || manifest.benchmark.id !== input.benchmarkId || manifest.dataset_digest !== input.benchmarkRevision)
45
+ return null;
46
+ const descriptor = await readJSON(path.join(input.request.dataset, taskId, ".hitch-benchmark.json"), null);
47
+ if (!descriptor)
48
+ return null;
49
+ const task = descriptor.task;
50
+ if (task?.driver?.kind !== "tool-server" || !task.driver.config.native_phases)
51
+ return null;
52
+ const contract = descriptor.score_contract;
53
+ if (descriptor.task_id !== taskId || typeof descriptor.task_digest !== "string"
54
+ || descriptor.primary_metric !== manifest.scoring.total_score.source_metric
55
+ || !contract || Object.keys(contract).length !== 1 || contract.total_score !== descriptor.primary_metric) {
56
+ throw new Error("native standardized descriptor is invalid");
57
+ }
58
+ return {
59
+ task,
60
+ task_digest: descriptor.task_digest,
61
+ primary_metric: String(descriptor.primary_metric),
62
+ metrics: descriptor.metrics,
63
+ audit_path: task.driver.config.native_phases.audit_path,
64
+ agent_timeout_ms: Number(descriptor.agent_timeout_sec) * 1000,
65
+ standard_total_range: manifest.scoring.total_score.range,
66
+ };
67
+ }
68
+ const descriptor = await readJSON(path.join(pkg.tasks, taskId, ".hitch-benchmark.json"), null);
69
+ if (!descriptor)
70
+ return null;
71
+ const task = descriptor.task;
72
+ if (task?.driver?.kind !== "tool-server" || !task.driver.config.native_phases)
73
+ return null;
74
+ const lock = await readJSON(path.join(input.evalDirectory, "benchmark/benchmark.lock.json"));
75
+ const compiled = await readJSON(path.join(path.dirname(pkg.tasks), "compiled.json"));
76
+ const lockedTask = lock.tasks.find(item => item.task_id === taskId);
77
+ const standardCompiler = compiled.digest === sha256JSON({ lock, compiler: "harbor-package@6" });
78
+ const standardManifest = standardCompiler ? await loadBenchmarkAdapterManifest(pkg.tasks) : null;
79
+ const revisionMatches = standardManifest
80
+ ? standardManifest.benchmark.id === input.benchmarkId && standardManifest.dataset_digest === input.benchmarkRevision
81
+ : lock.package_digest === input.benchmarkRevision;
82
+ if (lock.protocol !== "hitch-benchmark@1" || lock.benchmark_id !== input.benchmarkId || !revisionMatches
83
+ || pkg.package_digest !== lock.package_digest || lock.package_digest !== sha256JSON(lock.files)
84
+ || lock.package_digest !== await benchmarkTreeDigest(pkg.source) || compiled.digest !== pkg.compiled_digest
85
+ || !["harbor-package@4", "harbor-package@5", "harbor-package@6"].some(compiler => compiled.digest === sha256JSON({ lock, compiler })) || compiled.tasks_digest !== await benchmarkTreeDigest(pkg.tasks)
86
+ || !lockedTask || descriptor.task_digest !== lockedTask.task_digest || descriptor.package_digest !== lock.package_digest
87
+ || descriptor.task_id !== taskId || task.source_task_id !== lockedTask.source_task_id)
88
+ throw new Error("native compiled benchmark identity changed");
89
+ return { task, task_digest: lockedTask.task_digest, primary_metric: String(descriptor.primary_metric),
90
+ metrics: descriptor.metrics, audit_path: task.driver.config.native_phases.audit_path,
91
+ agent_timeout_ms: Number(descriptor.agent_timeout_sec) * 1000,
92
+ ...(standardManifest ? { standard_total_range: standardManifest.scoring.total_score.range } : {}) };
93
+ }
94
+ function budgetReceipt(supervision, protocol) {
95
+ if (!supervision.budget_finalization)
96
+ return undefined;
97
+ const finalization = object(supervision.budget_finalization), receipt = object(finalization.receipt);
98
+ const started = Date.parse(String(supervision.started_at)), requested = Date.parse(String(finalization.requested_at));
99
+ if (protocol !== "hitch-native-phase-control@2" || finalization.status !== "completed" || receipt.budget_exhausted !== true
100
+ || !Number.isSafeInteger(supervision.timeout_ms) || Number(supervision.timeout_ms) <= 0 || !Number.isFinite(started) || !Number.isFinite(requested)
101
+ || !Number.isSafeInteger(finalization.elapsed_ms) || Number(finalization.elapsed_ms) < Number(supervision.timeout_ms)
102
+ || typeof receipt.pending_prediction !== "boolean" || typeof receipt.action_submitted !== "boolean")
103
+ throw new Error("native deadline finalization is unproven");
104
+ return receipt;
105
+ }
106
+ /** Verify the independently collected channel, not a caller-selected group prefix. */
107
+ async function verifyNativeChannel(artifacts, auditPath, group, supervision, protocol) {
108
+ const relative = auditPath.replace(/^\//, "");
109
+ const text = (await bytes(artifacts, relative, 128 * 1024 * 1024)).toString("utf8");
110
+ if (!text.endsWith("\n"))
111
+ throw new Error("native channel audit is incomplete");
112
+ const lines = text.trimEnd().split("\n");
113
+ if (lines.length > 100_000)
114
+ throw new Error("native channel audit exceeds limits");
115
+ let generation = 0, sequence = 0, bound = false, pending = false, completed = false;
116
+ const phases = supervision.phases;
117
+ const first = new Set(), bindings = new Set(), receipt = budgetReceipt(supervision, protocol);
118
+ let budgetSeen = false;
119
+ for (const line of lines) {
120
+ if (Buffer.byteLength(line) > 2 * 1024 * 1024)
121
+ throw new Error("native channel record exceeds limits");
122
+ const event = object(JSON.parse(line));
123
+ if (completed || budgetSeen && event.event !== "completed" || !Number.isSafeInteger(event.generation) || !Number.isSafeInteger(event.sequence))
124
+ throw new Error("native channel sequence is invalid");
125
+ if (event.event === "context_required") {
126
+ if (pending || generation > 0 && !bound || event.generation !== generation + 1 || event.sequence !== sequence
127
+ || generation >= group.phases.length + (receipt ? 1 : 0))
128
+ throw new Error("native phase coverage mismatch");
129
+ generation += 1;
130
+ bound = false;
131
+ if (generation > 1) {
132
+ const boundary = object(phases[generation - 2].boundary);
133
+ const finalDeadlineBoundary = receipt && generation === group.phases.length + 1 && boundary.state === "completed";
134
+ if ((!finalDeadlineBoundary && boundary.state !== "context_required") || boundary.generation !== generation || !Number.isSafeInteger(boundary.sequence)
135
+ || Number(boundary.sequence) < sequence || Number(boundary.sequence) > sequence + 1)
136
+ throw new Error("supervisor reset differs from native audit");
137
+ }
138
+ continue;
139
+ }
140
+ if (event.generation !== generation || generation < 1 || event.sequence !== (event.event === "prediction" ? sequence + 1 : sequence))
141
+ throw new Error("native audit generation or sequence mismatch");
142
+ if (event.event === "prediction") {
143
+ if (pending || typeof event.screenshot_file !== "string" || !/^observation-[0-9]{6,}\.png$/.test(event.screenshot_file)
144
+ || typeof event.screenshot_sha256 !== "string" || !/^[a-f0-9]{64}$/.test(event.screenshot_sha256))
145
+ throw new Error("invalid native prediction");
146
+ sequence += 1;
147
+ pending = true;
148
+ const screenshot = await bytes(artifacts, path.posix.join(path.posix.dirname(relative), event.screenshot_file), 4 * 1024 * 1024);
149
+ if (sha256Bytes(screenshot) !== `sha256:${event.screenshot_sha256}`)
150
+ throw new Error("native screenshot changed");
151
+ if (!first.has(generation)) {
152
+ const phase = phases[generation - 1];
153
+ if (phase && (phase.first_prediction_sequence !== sequence || phase.first_screenshot_sha256 !== event.screenshot_sha256))
154
+ throw new Error("supervisor first prediction differs from native audit");
155
+ if (!phase && (!receipt || generation !== group.phases.length + 1))
156
+ throw new Error("unrepresented native candidate phase");
157
+ first.add(generation);
158
+ }
159
+ }
160
+ else if (event.event === "context_bound") {
161
+ if (!pending || bound || !group.phases[generation - 1] || event.run_id !== group.phases[generation - 1].run_id)
162
+ throw new Error("native binding differs from phase group");
163
+ bound = true;
164
+ bindings.add(generation);
165
+ }
166
+ else if (event.event === "action_submitted") {
167
+ if (!pending || !bound || event.run_id !== group.phases[generation - 1].run_id)
168
+ throw new Error("native action has no matching bound prediction");
169
+ pending = false;
170
+ }
171
+ else if (event.event === "budget_exhausted") {
172
+ const expected = { event: "budget_exhausted", generation, sequence, run_id: bound ? group.phases[generation - 1].run_id : null,
173
+ pending_prediction: pending || event.action_submitted === true, action_submitted: event.action_submitted };
174
+ const { event: _event, ...fields } = expected;
175
+ if (!receipt || !isDeepStrictEqual(event, expected) || event.action_submitted === true && (!bound || pending)
176
+ || !isDeepStrictEqual(receipt, { ...fields, budget_exhausted: true }))
177
+ throw new Error("native deadline receipt differs from audit");
178
+ pending = false;
179
+ budgetSeen = true;
180
+ }
181
+ else if (event.event === "completed") {
182
+ if (pending || !budgetSeen && (!bound || generation !== group.phases.length)
183
+ || budgetSeen && (generation < group.phases.length || generation > group.phases.length + 1))
184
+ throw new Error("native completion is incomplete");
185
+ const boundary = object(budgetSeen ? supervision.final_native_state : phases[generation - 1].boundary);
186
+ if (boundary.state !== "completed" || boundary.generation !== generation || boundary.sequence !== sequence)
187
+ throw new Error("supervisor completion differs from native audit");
188
+ completed = true;
189
+ }
190
+ else
191
+ throw new Error("native channel did not complete normally");
192
+ }
193
+ if (!completed || Boolean(receipt) !== budgetSeen || group.phases.some((_, i) => !first.has(i + 1) || !bindings.has(i + 1)))
194
+ throw new Error("native channel does not prove all phases completed");
195
+ }
196
+ function metricContract(descriptor) {
197
+ return { task_digest: descriptor.task_digest, source_task_id: descriptor.task.source_task_id, primary_metric: descriptor.primary_metric,
198
+ metrics: descriptor.metrics, metric_map: descriptor.task.grading.metric_map };
199
+ }
200
+ function verifyMetrics(value, descriptor, reward) {
201
+ const metrics = object(value.metrics), raw = object(value.raw);
202
+ if (value.primary_metric !== descriptor.primary_metric || value.source_task_id !== descriptor.source_task_id || value.task_digest !== descriptor.task_digest
203
+ || !isDeepStrictEqual(Object.keys(metrics).sort(), Object.keys(descriptor.metrics).sort()))
204
+ throw new Error("native metric identity mismatch");
205
+ for (const [name, spec] of Object.entries(descriptor.metrics)) {
206
+ const score = metrics[name];
207
+ if (typeof score !== "number" || !Number.isFinite(score) || score < spec.range[0] || score > spec.range[1]
208
+ || spec.type === "binary" && score !== 0 && score !== 1 || score !== raw[descriptor.metric_map[name]])
209
+ throw new Error("native metric is invalid");
210
+ }
211
+ if (metrics[descriptor.primary_metric] !== reward)
212
+ throw new Error("native primary metric differs from Harbor reward");
213
+ }
214
+ function verifyReplacements(receipts, group, service, unusedReplacement = false) {
215
+ if (receipts.length !== group.phases.length - 1 + Number(unusedReplacement))
216
+ throw new Error("candidate retirement receipts are incomplete");
217
+ let previous;
218
+ const candidates = new Set();
219
+ for (const [offset, receipt] of receipts.entries()) {
220
+ const ownership = object(receipt.ownership), sidecars = object(receipt.sidecars);
221
+ if (receipt.schema_version !== "hitch-candidate-recycle@1" || receipt.scope !== "environment-only" || receipt.status !== "completed" || receipt.phase_index !== offset + 1
222
+ || !/^[a-f0-9]{64}$/.test(String(receipt.old_container_id)) || !/^[a-f0-9]{64}$/.test(String(receipt.new_container_id)) || receipt.old_container_id === receipt.new_container_id
223
+ || !/^sha256:[a-f0-9]{64}$/.test(String(receipt.image)) || !/^sha256:[a-f0-9]{64}$/.test(String(receipt.configuration_digest))
224
+ || ownership["io.hitch.eval-id"] !== group.eval_id || ownership["io.hitch.task-id"] !== group.task_id
225
+ || typeof ownership["io.hitch.lease-id"] !== "string" || !ownership["io.hitch.lease-id"] || !/^[1-9][0-9]*$/.test(String(ownership["io.hitch.lease-epoch"]))
226
+ || !sidecars[service] || object(receipt.archives)["/logs/agent"] !== `phase-${String(offset + 1).padStart(4, "0")}/agent`)
227
+ throw new Error("candidate retirement identity mismatch");
228
+ for (const value of Object.values(sidecars)) {
229
+ const sidecar = object(value);
230
+ if (!/^[a-f0-9]{64}$/.test(String(sidecar.id)) || !/^sha256:[a-f0-9]{64}$/.test(String(sidecar.image))
231
+ || !Number.isFinite(Date.parse(String(sidecar.started_at))) || sidecar.id === receipt.old_container_id || sidecar.id === receipt.new_container_id)
232
+ throw new Error("invalid preserved native sidecar");
233
+ }
234
+ if (previous && (previous.new_container_id !== receipt.old_container_id || previous.image !== receipt.image || previous.configuration_digest !== receipt.configuration_digest
235
+ || !isDeepStrictEqual(previous.ownership, ownership) || !isDeepStrictEqual(previous.sidecars, sidecars)))
236
+ throw new Error("native environment changed across phase replacements");
237
+ if (!previous)
238
+ candidates.add(String(receipt.old_container_id));
239
+ if (candidates.has(String(receipt.new_container_id)))
240
+ throw new Error("candidate container identity reused");
241
+ candidates.add(String(receipt.new_container_id));
242
+ previous = receipt;
243
+ }
244
+ }
245
+ export async function importNativePhaseTrial(input, descriptor) {
246
+ let supervision;
247
+ try {
248
+ supervision = await json(input.trialDirectory, "hitch-native-phases/supervision.json");
249
+ }
250
+ catch (error) {
251
+ if (error.code === "ENOENT" && input.requireCompleteMarker && !input.allowMissingBundleDiagnostic)
252
+ throw new NativePhaseBundlePendingError();
253
+ throw error;
254
+ }
255
+ if (supervision.status === "running" && input.requireCompleteMarker && !input.allowMissingBundleDiagnostic)
256
+ throw new NativePhaseBundlePendingError();
257
+ if (supervision.schema_version !== "hitch-native-phase-supervision@1" || supervision.scope !== "candidate-evidence-only" || supervision.status !== "completed"
258
+ || supervision.task_digest !== descriptor.task_digest || typeof supervision.run_group_id !== "string" || !/^run_group_[a-f0-9]{32}$/.test(supervision.run_group_id)
259
+ || !Array.isArray(supervision.phases) || !supervision.phases.length || supervision.phases.length > 10000)
260
+ throw new Error("native phase supervision is incomplete");
261
+ const phases = supervision.phases.map(object);
262
+ const control = descriptor.task.driver.kind === "tool-server" ? descriptor.task.driver.config.native_phases : undefined;
263
+ const deadline = budgetReceipt(supervision, control?.protocol);
264
+ if (deadline && (supervision.timeout_ms !== Math.min(descriptor.agent_timeout_ms, input.request.timeout_ms > 0 ? input.request.timeout_ms : descriptor.agent_timeout_ms)
265
+ || object(supervision.budget_finalization).timeout_ms !== control?.finalization_timeout_ms))
266
+ throw new Error("native deadline differs from frozen task budget");
267
+ const unusedReplacement = Boolean(deadline && phases[phases.length - 1].replacement_receipt_ref);
268
+ const runIds = [];
269
+ const runs = await ensureDir(statePaths(input.root).runs);
270
+ for (const [offset, phase] of phases.entries()) {
271
+ const source = offset === phases.length - 1 && !unusedReplacement ? "agent/hitch-run-bundle" : `hitch-candidate-phases/phase-${String(offset + 1).padStart(4, "0")}/agent/hitch-run-bundle`;
272
+ if (phase.phase_index !== offset + 1 || phase.generation !== offset + 1 || phase.status !== "sealed" || phase.bundle_ref !== source
273
+ || typeof phase.run_id !== "string" || !/^run_[a-f0-9]{32}$/.test(phase.run_id) || runIds.includes(phase.run_id))
274
+ throw new Error("invalid phase group membership");
275
+ const expected = { run_id: phase.run_id, revision_identity: input.resolvedRevision.identity,
276
+ context: { kind: "benchmark_phase", benchmark_id: input.benchmarkId, benchmark_revision: input.benchmarkRevision,
277
+ task_id: input.taskId, task_digest: descriptor.task_digest, verifier_identity: benchmarkVerifierIdentity(input.benchmarkId, input.benchmarkRevision),
278
+ run_group_id: supervision.run_group_id, phase_index: offset + 1 },
279
+ parent: { kind: "eval", eval_id: input.evalId, trial_id: input.trialId, attempt: input.attempt } };
280
+ const sourceDirectory = path.join(input.trialDirectory, source);
281
+ const proof = await inspectSealedPhaseRunBundle({ sourceDirectory, expected });
282
+ if (!isDeepStrictEqual(JSON.parse(JSON.stringify(proof)), phase.evidence))
283
+ throw new Error("phase bundle proof differs from supervisor");
284
+ if (proof.model.requested_id !== defaultModelIdentity(input.request.model, input.resolvedRevision.harness_id).requested_id)
285
+ throw new Error("phase model differs from the frozen candidate");
286
+ if (parseHarnessReference(proof.harness.requested_ref).canonical !== parseHarnessReference(input.request.harness_ref).canonical)
287
+ throw new Error("phase harness reference differs from the frozen candidate");
288
+ if (!["succeeded", "cancelled"].includes(proof.process_status) && !(deadline && offset === phases.length - 1 && proof.process_status === "timed_out"))
289
+ throw new Error("native phase candidate did not finish or cancel at its boundary");
290
+ const destinationDirectory = path.join(runs, phase.run_id);
291
+ await withFileLock(path.join(statePaths(input.root).temporary, "phase-import-locks"), phase.run_id, async () => {
292
+ try {
293
+ const existing = await inspectSealedPhaseRunBundle({ sourceDirectory: destinationDirectory, expected });
294
+ if (!isDeepStrictEqual(existing, proof))
295
+ throw new Error("existing phase run conflicts with exported evidence");
296
+ }
297
+ catch (error) {
298
+ // Only an absent destination may be created. Never repair/reseal a
299
+ // partial existing run as a side effect of an import retry.
300
+ if (error.code !== "ENOENT")
301
+ throw error;
302
+ try {
303
+ await lstat(destinationDirectory);
304
+ throw new Error("existing phase destination is incomplete");
305
+ }
306
+ catch (missing) {
307
+ if (missing.code !== "ENOENT")
308
+ throw missing;
309
+ }
310
+ await copySealedPhaseRunBundle({ sourceDirectory, destinationDirectory, expected });
311
+ }
312
+ });
313
+ runIds.push(phase.run_id);
314
+ }
315
+ const reference = await sealBenchmarkPhaseGroup({ root: input.root, runIds });
316
+ const group = await readBenchmarkPhaseGroup({ root: input.root, evalId: input.evalId, reference });
317
+ const receipts = [];
318
+ for (let index = 0; index < phases.length - 1 + Number(unusedReplacement); index++) {
319
+ const ref = `hitch-candidate-phases/phase-${String(index + 1).padStart(4, "0")}/receipt.json`;
320
+ if (phases[index].replacement_receipt_ref !== ref)
321
+ throw new Error("candidate retirement receipt reference mismatch");
322
+ receipts.push(await json(input.trialDirectory, ref));
323
+ }
324
+ const service = descriptor.task.driver.kind === "tool-server" ? descriptor.task.driver.config.service : "";
325
+ verifyReplacements(receipts, group, service, unusedReplacement);
326
+ await verifyNativeChannel(path.join(input.trialDirectory, "artifacts"), descriptor.audit_path, group, supervision, control?.protocol);
327
+ const lifecycle = await json(input.trialDirectory, "benchmark-lifecycle.json");
328
+ if (lifecycle.failure || !["prepare", "quiesce", "snapshot"].every(name => object(object(lifecycle.phases)[name]).status === "ok"))
329
+ throw new Error("native lifecycle snapshot is incomplete");
330
+ const reward = primaryVerifierReward(input.trial);
331
+ const verifier = verifierResult(input.trial);
332
+ const infrastructure = await detectVerifierInfrastructureFailure(input.trialDirectory, reward);
333
+ // The independent native task completed; phase process statuses remain
334
+ // unchanged in their bundles (often cancelled at a native boundary).
335
+ const observation = verifierObservation({ trial: input.trial, runStatus: "succeeded", trajectoryStatus: "valid", recordStatus: "valid",
336
+ verifierRef: verifier ? "evidence/verifier/result.json" : undefined, infrastructure });
337
+ const scores = observation.status === "valid" && descriptor.standard_total_range !== undefined ? parseVerifierScores(verifier) : undefined;
338
+ if (observation.status === "valid" && descriptor.standard_total_range !== undefined && (!scores || scores.normalization !== "standard"
339
+ || scores.process_score !== undefined || scores.total_score !== reward
340
+ || scores.total_score < descriptor.standard_total_range[0] || scores.total_score > descriptor.standard_total_range[1])) {
341
+ throw new Error("native standardized score contract is invalid");
342
+ }
343
+ const publishedScores = observation.status === "valid" ? scores : undefined;
344
+ const contract = metricContract(descriptor);
345
+ if (observation.status === "valid")
346
+ verifyMetrics(await json(input.trialDirectory, "verifier/benchmark-rewards.json"), contract, reward);
347
+ const artifactsDigest = await regradeTreeDigest(path.join(input.trialDirectory, "artifacts"));
348
+ const verifierDigest = await regradeTreeDigest(path.join(input.trialDirectory, "verifier"));
349
+ const sourceDigest = sha256JSON({ supervision, lifecycle, receipts, verifier, observation, artifacts: artifactsDigest, verifier_files: verifierDigest });
350
+ const id = "assessment_" + sha256JSON({ eval: input.evalId, trial: input.trialId, group: reference }).slice(7, 39);
351
+ const directory = path.join(await ensureDir(path.join(input.evalDirectory, "assessments")), id);
352
+ return withFileLock(path.join(statePaths(input.root).temporary, "phase-assessment-locks"), id, async () => {
353
+ const existing = await readJSON(path.join(directory, "assessment.json"), null);
354
+ if (existing) {
355
+ if (existing.source_digest !== sourceDigest)
356
+ throw new Error("native assessment source changed after publication");
357
+ const ref = trialRef(input, reference, { id, digest: sha256Bytes(await bytes(directory, "assessment.json")) }, observation, publishedScores);
358
+ await readNativePhaseObservation(input.root, input.evalId, ref);
359
+ return ref;
360
+ }
361
+ await mkdir(directory); // No overwrite, including an incomplete prior import.
362
+ const evidence = await ensureDir(path.join(directory, "evidence"));
363
+ await cp(path.join(input.trialDirectory, "artifacts"), path.join(evidence, "artifacts"), { recursive: true, force: false, errorOnExist: true });
364
+ await cp(path.join(input.trialDirectory, "verifier"), path.join(evidence, "verifier"), { recursive: true, force: false, errorOnExist: true });
365
+ if (await regradeTreeDigest(path.join(evidence, "artifacts")) !== artifactsDigest || await regradeTreeDigest(path.join(input.trialDirectory, "artifacts")) !== artifactsDigest
366
+ || await regradeTreeDigest(path.join(evidence, "verifier")) !== verifierDigest || await regradeTreeDigest(path.join(input.trialDirectory, "verifier")) !== verifierDigest
367
+ || !isDeepStrictEqual(await json(input.trialDirectory, "hitch-native-phases/supervision.json"), supervision)
368
+ || !isDeepStrictEqual(await json(input.trialDirectory, "benchmark-lifecycle.json"), lifecycle))
369
+ throw new Error("native assessment source changed during capture");
370
+ await atomicWriteJSON(path.join(evidence, "supervision.json"), supervision);
371
+ await atomicWriteJSON(path.join(evidence, "benchmark-lifecycle.json"), lifecycle);
372
+ await atomicWriteJSON(path.join(evidence, "candidate-replacements.json"), { receipts });
373
+ if (observation.status === "valid")
374
+ verifyMetrics(await json(evidence, "verifier/benchmark-rewards.json"), contract, reward);
375
+ if (verifier)
376
+ await atomicWriteJSON(path.join(evidence, "verifier/result.json"), verifier);
377
+ for (const runId of runIds)
378
+ await importTrialInteractionCapture(input, runId, await ensureDir(path.join(evidence, "phase-captures", runId)));
379
+ await writeTrialExecutionEvidence(evidence, input.executionEvidence, { evalId: input.evalId, taskId: input.taskId });
380
+ await writeTrialEnvironmentImageEvidence(evidence, input.taskId, input.environmentImages);
381
+ await verifyNativeChannel(path.join(evidence, "artifacts"), descriptor.audit_path, group, supervision, control?.protocol);
382
+ const record = { schema_version: "1", kind: "native-phase-assessment", eval_id: input.evalId, trial_id: input.trialId,
383
+ task_id: input.taskId, attempt: input.attempt, benchmark_id: input.benchmarkId, benchmark_revision: input.benchmarkRevision,
384
+ task_digest: descriptor.task_digest, verifier_identity: group.verifier_identity, run_group: reference, observation,
385
+ ...(publishedScores === undefined ? {} : { scores: publishedScores }),
386
+ publication_mode: input.publicationMode ?? "settle",
387
+ metric_contract: contract, controller_service: service, native_control_protocol: control?.protocol, unused_candidate_replacement: unusedReplacement,
388
+ native_audit_path: descriptor.audit_path, source_digest: sourceDigest, evidence_digest: await regradeTreeDigest(evidence), created_at: new Date().toISOString() };
389
+ await atomicWriteJSON(path.join(directory, "assessment.json"), record);
390
+ const ref = trialRef(input, reference, { id, digest: sha256Bytes(await bytes(directory, "assessment.json")) }, observation, publishedScores);
391
+ await readNativePhaseObservation(input.root, input.evalId, ref);
392
+ // Publication is separate from every original candidate bundle.
393
+ await writeEvalTrialPublication(directory, input.evalId, input.publicationMode ?? "settle", ref);
394
+ return ref;
395
+ });
396
+ }
397
+ function trialRef(input, group, assessment, observation, scores) {
398
+ return { trial_id: input.trialId, task_id: input.taskId, attempt: input.attempt, run_group: group, assessment,
399
+ observation_status: observation.status, ...(observation.reward !== undefined ? { reward: observation.reward } : {}),
400
+ ...(scores === undefined ? {} : { scores }),
401
+ ...(observation.invalid_reason ? { invalid_reason: observation.invalid_reason } : {}),
402
+ ...(observation.verifier_result_ref ? { verifier_result_ref: observation.verifier_result_ref } : {}) };
403
+ }
404
+ export async function readNativePhaseObservation(root, evalId, trial, expected) {
405
+ if (!trial.run_group || trial.run_id !== undefined || !trial.assessment || !/^assessment_[a-f0-9]{32}$/.test(trial.assessment.id))
406
+ throw new Error("invalid native phase assessment reference");
407
+ const directory = path.join(statePaths(root).evals, evalId, "assessments", trial.assessment.id);
408
+ const raw = await bytes(directory, "assessment.json");
409
+ if (sha256Bytes(raw) !== trial.assessment.digest)
410
+ throw new Error("native assessment digest mismatch");
411
+ const record = object(JSON.parse(raw.toString("utf8")));
412
+ const group = await readBenchmarkPhaseGroup({ root, evalId, reference: trial.run_group });
413
+ if (record.schema_version !== "1" || record.kind !== "native-phase-assessment" || record.eval_id !== evalId || record.trial_id !== trial.trial_id
414
+ || record.task_id !== trial.task_id || record.attempt !== trial.attempt || !isDeepStrictEqual(record.run_group, trial.run_group)
415
+ || group.trial_id !== trial.trial_id || group.task_id !== trial.task_id || group.attempt !== trial.attempt || group.task_digest !== record.task_digest
416
+ || group.benchmark_id !== record.benchmark_id || group.benchmark_revision !== record.benchmark_revision || group.verifier_identity !== record.verifier_identity
417
+ || expected && (group.benchmark_id !== expected.benchmarkId || group.benchmark_revision !== expected.benchmarkRevision
418
+ || group.verifier_identity !== benchmarkVerifierIdentity(expected.benchmarkId, expected.benchmarkRevision)))
419
+ throw new Error("native assessment identity mismatch");
420
+ if (record.evidence_digest !== await regradeTreeDigest(path.join(directory, "evidence")))
421
+ throw new Error("native assessment evidence changed");
422
+ const supervision = await json(path.join(directory, "evidence"), "supervision.json");
423
+ await verifyNativeChannel(path.join(directory, "evidence/artifacts"), String(record.native_audit_path), group, supervision, record.native_control_protocol);
424
+ const receipts = await json(path.join(directory, "evidence"), "candidate-replacements.json");
425
+ if (!Array.isArray(receipts.receipts))
426
+ throw new Error("missing candidate replacement evidence");
427
+ verifyReplacements(receipts.receipts.map(object), group, String(record.controller_service), record.unused_candidate_replacement === true);
428
+ const observation = validateRunObservation(record.observation);
429
+ if (observation.status === "valid")
430
+ verifyMetrics(await json(path.join(directory, "evidence"), "verifier/benchmark-rewards.json"), record.metric_contract, observation.reward);
431
+ if (!isDeepStrictEqual(record.scores, trial.scores))
432
+ throw new Error("native assessment score channels mismatch");
433
+ if (trial.scores !== undefined) {
434
+ const result = await json(path.join(directory, "evidence"), "verifier/result.json");
435
+ if (!isDeepStrictEqual(parseVerifierScores(result), trial.scores))
436
+ throw new Error("native assessment score evidence mismatch");
437
+ }
438
+ return observation;
439
+ }
440
+ //# sourceMappingURL=native-phase-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-phase-evidence.js","sourceRoot":"","sources":["../../../src/evals/native-phase-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { sha256JSON } from "../foundation/index.js";
2
+ /** Derive one unique physical work identity for a Candidate infrastructure
3
+ * retry. The logical slot and original work item remain unchanged. */
4
+ export function physicalRetryWorkItem(item, retry, triggers) {
5
+ return physicalRetryWorkItemForTriggerIds(item, retry, triggers.map((trial) => trial.trial_id));
6
+ }
7
+ export function physicalRetryWorkItemForTriggerIds(item, retry, triggerTrialIds) {
8
+ if (!Number.isSafeInteger(retry) || retry < 1)
9
+ throw new TypeError("physical retry index must be a positive safe integer");
10
+ const triggerTrials = [...new Set(triggerTrialIds)].sort(compareBytes);
11
+ if (triggerTrials.length === 0)
12
+ throw new TypeError("physical retry requires at least one trigger trial");
13
+ const identity = sha256JSON({
14
+ origin_work_id: item.work_id,
15
+ slots: item.slots,
16
+ execution_kind: "physical-infrastructure-retry",
17
+ retry,
18
+ trigger_trials: triggerTrials,
19
+ });
20
+ return {
21
+ ...item,
22
+ work_id: `work_${identity.slice("sha256:".length, "sha256:".length + 32)}`,
23
+ ...(item.scheduling ? {
24
+ scheduling: { ...item.scheduling, remaining_path_ms: item.scheduling.estimated_duration_ms },
25
+ } : {}),
26
+ };
27
+ }
28
+ function compareBytes(left, right) {
29
+ return Buffer.compare(Buffer.from(left), Buffer.from(right));
30
+ }
31
+ //# sourceMappingURL=physical-retry-work.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physical-retry-work.js","sourceRoot":"","sources":["../../../src/evals/physical-retry-work.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD;sEACsE;AACtE,MAAM,UAAU,qBAAqB,CACnC,IAAuB,EACvB,KAAa,EACb,QAAmC;IAEnC,OAAO,kCAAkC,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,IAAuB,EACvB,KAAa,EACb,eAAkC;IAElC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;IAC3H,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;IAC1G,MAAM,QAAQ,GAAG,UAAU,CAAC;QAC1B,cAAc,EAAE,IAAI,CAAC,OAAO;QAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,cAAc,EAAE,+BAA+B;QAC/C,KAAK;QACL,cAAc,EAAE,aAAa;KAC9B,CAAC,CAAC;IACH,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,QAAQ,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE;QAC1E,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACpB,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;SAC7F,CAAC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,KAAa;IAC/C,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -1,28 +1,31 @@
1
- export class FairSemaphore {
1
+ export class PrioritySemaphore {
2
2
  available;
3
3
  waiters = [];
4
+ sequence = 0;
4
5
  constructor(capacity) {
5
6
  this.available = capacity;
6
7
  }
7
- async acquire(signal) {
8
+ async acquire(signal, priority = 0) {
8
9
  if (signal?.aborted)
9
10
  throw new Error("eval work item scheduling was cancelled");
11
+ if (!Number.isFinite(priority) || priority < 0)
12
+ throw new TypeError("eval work item scheduling priority is invalid");
10
13
  if (this.available > 0) {
11
14
  this.available -= 1;
12
15
  return this.releaseFunction();
13
16
  }
14
17
  await new Promise((resolve, reject) => {
15
- const ready = () => {
16
- signal?.removeEventListener("abort", aborted);
17
- resolve();
18
- };
18
+ const waiter = { priority, sequence: this.sequence++, ready: () => {
19
+ signal?.removeEventListener("abort", aborted);
20
+ resolve();
21
+ } };
19
22
  const aborted = () => {
20
- const index = this.waiters.indexOf(ready);
23
+ const index = this.waiters.indexOf(waiter);
21
24
  if (index >= 0)
22
25
  this.waiters.splice(index, 1);
23
26
  reject(new Error("eval work item scheduling was cancelled"));
24
27
  };
25
- this.waiters.push(ready);
28
+ this.waiters.push(waiter);
26
29
  signal?.addEventListener("abort", aborted, { once: true });
27
30
  });
28
31
  return this.releaseFunction();
@@ -33,14 +36,23 @@ export class FairSemaphore {
33
36
  if (released)
34
37
  return;
35
38
  released = true;
36
- const next = this.waiters.shift();
39
+ const next = this.waiters.sort(compareWaiters).shift();
37
40
  if (next)
38
- next();
41
+ next.ready();
39
42
  else
40
43
  this.available += 1;
41
44
  };
42
45
  }
43
46
  }
47
+ /** Compatibility name for callers that do not supply priorities. */
48
+ export class FairSemaphore extends PrioritySemaphore {
49
+ }
50
+ export function workSchedulingPriority(item) {
51
+ return item.scheduling?.remaining_path_ms ?? 0;
52
+ }
53
+ function compareWaiters(left, right) {
54
+ return right.priority - left.priority || left.sequence - right.sequence;
55
+ }
44
56
  export function assertTaskSlotPlan(plan) {
45
57
  if (plan.membership !== "known" || plan.work_items.length === 0
46
58
  || plan.work_items.some((item) => item.opaque_membership || item.task_ids.length !== 1 || item.slots.length !== 1