agent-hitch 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/README.md +14 -1
  2. package/dist/scripts/canary-buildkit-secrets.js +166 -0
  3. package/dist/scripts/canary-buildkit-secrets.js.map +1 -0
  4. package/dist/scripts/canary-collision-domains.js +77 -0
  5. package/dist/scripts/canary-collision-domains.js.map +1 -0
  6. package/dist/scripts/canary-docker-image-observation.js +181 -0
  7. package/dist/scripts/canary-docker-image-observation.js.map +1 -0
  8. package/dist/scripts/canary-gpu-hardware.js +95 -0
  9. package/dist/scripts/canary-gpu-hardware.js.map +1 -0
  10. package/dist/scripts/canary-harbor-load.js +365 -0
  11. package/dist/scripts/canary-harbor-load.js.map +1 -0
  12. package/dist/scripts/canary-packaged-harness.js +75 -0
  13. package/dist/scripts/canary-packaged-harness.js.map +1 -0
  14. package/dist/scripts/canary-resource-load.js +188 -0
  15. package/dist/scripts/canary-resource-load.js.map +1 -0
  16. package/dist/scripts/check-architecture.js +8 -4
  17. package/dist/scripts/check-architecture.js.map +1 -1
  18. package/dist/scripts/docker-reaper-crash-child.js +21 -0
  19. package/dist/scripts/docker-reaper-crash-child.js.map +1 -0
  20. package/dist/src/adapters/catalog.js +1 -0
  21. package/dist/src/adapters/catalog.js.map +1 -1
  22. package/dist/src/adapters/discovery.js +1 -1
  23. package/dist/src/adapters/discovery.js.map +1 -1
  24. package/dist/src/adapters/providers/claude.js +6 -0
  25. package/dist/src/adapters/providers/claude.js.map +1 -1
  26. package/dist/src/adapters/providers/codex.js +6 -0
  27. package/dist/src/adapters/providers/codex.js.map +1 -1
  28. package/dist/src/adapters/providers/deepseek.js +6 -0
  29. package/dist/src/adapters/providers/deepseek.js.map +1 -1
  30. package/dist/src/adapters/providers/opencode.js +6 -0
  31. package/dist/src/adapters/providers/opencode.js.map +1 -1
  32. package/dist/src/adapters/providers/pi.js +6 -0
  33. package/dist/src/adapters/providers/pi.js.map +1 -1
  34. package/dist/src/artifacts/index.js +1 -0
  35. package/dist/src/artifacts/index.js.map +1 -1
  36. package/dist/src/backends/harbor/backend.js +53 -103
  37. package/dist/src/backends/harbor/backend.js.map +1 -1
  38. package/dist/src/backends/harbor/environment-config.js +92 -0
  39. package/dist/src/backends/harbor/environment-config.js.map +1 -0
  40. package/dist/src/backends/harbor/index.js +5 -1
  41. package/dist/src/backends/harbor/index.js.map +1 -1
  42. package/dist/src/backends/harbor/model-proxy-config.js +23 -0
  43. package/dist/src/backends/harbor/model-proxy-config.js.map +1 -0
  44. package/dist/src/backends/harbor/process.js +177 -0
  45. package/dist/src/backends/harbor/process.js.map +1 -0
  46. package/dist/src/backends/harbor/runtime-toolchain.js +30 -0
  47. package/dist/src/backends/harbor/runtime-toolchain.js.map +1 -0
  48. package/dist/src/backends/harbor/supervisor.js +74 -0
  49. package/dist/src/backends/harbor/supervisor.js.map +1 -0
  50. package/dist/src/backends/harbor/task-resources.js +206 -0
  51. package/dist/src/backends/harbor/task-resources.js.map +1 -0
  52. package/dist/src/backends/harbor/tools.js +6 -29
  53. package/dist/src/backends/harbor/tools.js.map +1 -1
  54. package/dist/src/backends/index.js +4 -1
  55. package/dist/src/backends/index.js.map +1 -1
  56. package/dist/src/cli/commands/daemon.js +135 -8
  57. package/dist/src/cli/commands/daemon.js.map +1 -1
  58. package/dist/src/cli/commands/eval.js +214 -4
  59. package/dist/src/cli/commands/eval.js.map +1 -1
  60. package/dist/src/cli/commands/images.js +40 -0
  61. package/dist/src/cli/commands/images.js.map +1 -0
  62. package/dist/src/cli/commands/run.js +6 -3
  63. package/dist/src/cli/commands/run.js.map +1 -1
  64. package/dist/src/cli/commands/runs.js +25 -3
  65. package/dist/src/cli/commands/runs.js.map +1 -1
  66. package/dist/src/cli/commands/worker.js +79 -0
  67. package/dist/src/cli/commands/worker.js.map +1 -0
  68. package/dist/src/cli/main.js +4 -0
  69. package/dist/src/cli/main.js.map +1 -1
  70. package/dist/src/cli/output.js +71 -3
  71. package/dist/src/cli/output.js.map +1 -1
  72. package/dist/src/control-plane/build-admission.js +69 -0
  73. package/dist/src/control-plane/build-admission.js.map +1 -0
  74. package/dist/src/control-plane/build-records.js +6 -0
  75. package/dist/src/control-plane/build-records.js.map +1 -0
  76. package/dist/src/control-plane/collisions.js +40 -0
  77. package/dist/src/control-plane/collisions.js.map +1 -0
  78. package/dist/src/control-plane/eval-control-state.js +22 -0
  79. package/dist/src/control-plane/eval-control-state.js.map +1 -0
  80. package/dist/src/control-plane/eval-control-work.js +39 -0
  81. package/dist/src/control-plane/eval-control-work.js.map +1 -0
  82. package/dist/src/control-plane/eval-image-resolution.js +52 -0
  83. package/dist/src/control-plane/eval-image-resolution.js.map +1 -0
  84. package/dist/src/control-plane/eval-image-services.js +30 -0
  85. package/dist/src/control-plane/eval-image-services.js.map +1 -0
  86. package/dist/src/control-plane/eval-records.js +252 -0
  87. package/dist/src/control-plane/eval-records.js.map +1 -0
  88. package/dist/src/control-plane/eval-recovery.js +181 -0
  89. package/dist/src/control-plane/eval-recovery.js.map +1 -0
  90. package/dist/src/control-plane/eval-scheduler.js +447 -0
  91. package/dist/src/control-plane/eval-scheduler.js.map +1 -0
  92. package/dist/src/control-plane/index.js +20 -0
  93. package/dist/src/control-plane/index.js.map +1 -0
  94. package/dist/src/control-plane/local-worker.js +49 -0
  95. package/dist/src/control-plane/local-worker.js.map +1 -0
  96. package/dist/src/control-plane/model-capture-planning.js +12 -0
  97. package/dist/src/control-plane/model-capture-planning.js.map +1 -0
  98. package/dist/src/control-plane/remote-result-transport.js +172 -0
  99. package/dist/src/control-plane/remote-result-transport.js.map +1 -0
  100. package/dist/src/control-plane/remote-work-coordinator.js +332 -0
  101. package/dist/src/control-plane/remote-work-coordinator.js.map +1 -0
  102. package/dist/src/control-plane/remote-work-inputs.js +266 -0
  103. package/dist/src/control-plane/remote-work-inputs.js.map +1 -0
  104. package/dist/src/control-plane/remote-work-recovery.js +181 -0
  105. package/dist/src/control-plane/remote-work-recovery.js.map +1 -0
  106. package/dist/src/control-plane/remote-worker-artifacts.js +135 -0
  107. package/dist/src/control-plane/remote-worker-artifacts.js.map +1 -0
  108. package/dist/src/control-plane/remote-worker-client.js +202 -0
  109. package/dist/src/control-plane/remote-worker-client.js.map +1 -0
  110. package/dist/src/control-plane/remote-worker-configuration.js +34 -0
  111. package/dist/src/control-plane/remote-worker-configuration.js.map +1 -0
  112. package/dist/src/control-plane/remote-worker-credentials.js +58 -0
  113. package/dist/src/control-plane/remote-worker-credentials.js.map +1 -0
  114. package/dist/src/control-plane/remote-worker-protocol.js +510 -0
  115. package/dist/src/control-plane/remote-worker-protocol.js.map +1 -0
  116. package/dist/src/control-plane/remote-worker-runner.js +214 -0
  117. package/dist/src/control-plane/remote-worker-runner.js.map +1 -0
  118. package/dist/src/control-plane/remote-workers.js +377 -0
  119. package/dist/src/control-plane/remote-workers.js.map +1 -0
  120. package/dist/src/control-plane/rerun-scheduler.js +411 -0
  121. package/dist/src/control-plane/rerun-scheduler.js.map +1 -0
  122. package/dist/src/control-plane/rerun-submission.js +56 -0
  123. package/dist/src/control-plane/rerun-submission.js.map +1 -0
  124. package/dist/src/control-plane/resources.js +182 -0
  125. package/dist/src/control-plane/resources.js.map +1 -0
  126. package/dist/src/control-plane/scheduler-eval-entry.js +32 -0
  127. package/dist/src/control-plane/scheduler-eval-entry.js.map +1 -0
  128. package/dist/src/control-plane/synthetic-result.js +21 -0
  129. package/dist/src/control-plane/synthetic-result.js.map +1 -0
  130. package/dist/src/control-plane/work-admission.js +21 -0
  131. package/dist/src/control-plane/work-admission.js.map +1 -0
  132. package/dist/src/control-plane/work-dispatcher.js +229 -0
  133. package/dist/src/control-plane/work-dispatcher.js.map +1 -0
  134. package/dist/src/controller-runtime/hash.js +12 -1
  135. package/dist/src/controller-runtime/hash.js.map +1 -1
  136. package/dist/src/controller-runtime/index.js +1 -1
  137. package/dist/src/controller-runtime/index.js.map +1 -1
  138. package/dist/src/controller-runtime/store.js +15 -6
  139. package/dist/src/controller-runtime/store.js.map +1 -1
  140. package/dist/src/daemon/client.js.map +1 -1
  141. package/dist/src/daemon/event-stream.js +46 -0
  142. package/dist/src/daemon/event-stream.js.map +1 -0
  143. package/dist/src/daemon/health.js +66 -0
  144. package/dist/src/daemon/health.js.map +1 -0
  145. package/dist/src/daemon/launcher.js +28 -1
  146. package/dist/src/daemon/launcher.js.map +1 -1
  147. package/dist/src/daemon/logging.js +23 -0
  148. package/dist/src/daemon/logging.js.map +1 -0
  149. package/dist/src/daemon/scheduler.js +26 -5
  150. package/dist/src/daemon/scheduler.js.map +1 -1
  151. package/dist/src/daemon/server.js +255 -98
  152. package/dist/src/daemon/server.js.map +1 -1
  153. package/dist/src/daemon/telemetry.js +163 -0
  154. package/dist/src/daemon/telemetry.js.map +1 -0
  155. package/dist/src/daemon/worker-routes.js +219 -0
  156. package/dist/src/daemon/worker-routes.js.map +1 -0
  157. package/dist/src/domain/bundles.js +2 -0
  158. package/dist/src/domain/bundles.js.map +1 -0
  159. package/dist/src/domain/control-plane.js +2 -0
  160. package/dist/src/domain/control-plane.js.map +1 -0
  161. package/dist/src/domain/execution-evidence.js +2 -0
  162. package/dist/src/domain/execution-evidence.js.map +1 -0
  163. package/dist/src/domain/execution-plan.js +2 -0
  164. package/dist/src/domain/execution-plan.js.map +1 -0
  165. package/dist/src/domain/images.js +2 -0
  166. package/dist/src/domain/images.js.map +1 -0
  167. package/dist/src/domain/index.js +9 -0
  168. package/dist/src/domain/index.js.map +1 -1
  169. package/dist/src/domain/interactions.js +2 -0
  170. package/dist/src/domain/interactions.js.map +1 -0
  171. package/dist/src/domain/providers.js +2 -0
  172. package/dist/src/domain/providers.js.map +1 -0
  173. package/dist/src/domain/resources.js +2 -0
  174. package/dist/src/domain/resources.js.map +1 -0
  175. package/dist/src/domain/workers.js +2 -0
  176. package/dist/src/domain/workers.js.map +1 -0
  177. package/dist/src/evals/collect-only-rerun.js +182 -0
  178. package/dist/src/evals/collect-only-rerun.js.map +1 -0
  179. package/dist/src/evals/directory.js +30 -0
  180. package/dist/src/evals/directory.js.map +1 -0
  181. package/dist/src/evals/docker-engine-stats.js +89 -0
  182. package/dist/src/evals/docker-engine-stats.js.map +1 -0
  183. package/dist/src/evals/docker-ownership.js +51 -0
  184. package/dist/src/evals/docker-ownership.js.map +1 -0
  185. package/dist/src/evals/docker-reaper.js +144 -0
  186. package/dist/src/evals/docker-reaper.js.map +1 -0
  187. package/dist/src/evals/docker-resource-observer.js +207 -0
  188. package/dist/src/evals/docker-resource-observer.js.map +1 -0
  189. package/dist/src/evals/environment-image-planning.js +164 -0
  190. package/dist/src/evals/environment-image-planning.js.map +1 -0
  191. package/dist/src/evals/eval-artifact-planning.js +56 -0
  192. package/dist/src/evals/eval-artifact-planning.js.map +1 -0
  193. package/dist/src/evals/eval-finalization.js +10 -0
  194. package/dist/src/evals/eval-finalization.js.map +1 -0
  195. package/dist/src/evals/eval-lifecycle-events.js +16 -0
  196. package/dist/src/evals/eval-lifecycle-events.js.map +1 -0
  197. package/dist/src/evals/events.js +53 -5
  198. package/dist/src/evals/events.js.map +1 -1
  199. package/dist/src/evals/execution-evidence.js +116 -0
  200. package/dist/src/evals/execution-evidence.js.map +1 -0
  201. package/dist/src/evals/execution-leases.js +342 -0
  202. package/dist/src/evals/execution-leases.js.map +1 -0
  203. package/dist/src/evals/execution-plan-artifacts.js +72 -0
  204. package/dist/src/evals/execution-plan-artifacts.js.map +1 -0
  205. package/dist/src/evals/execution-plan-images.js +69 -0
  206. package/dist/src/evals/execution-plan-images.js.map +1 -0
  207. package/dist/src/evals/execution-plan-resources.js +174 -0
  208. package/dist/src/evals/execution-plan-resources.js.map +1 -0
  209. package/dist/src/evals/execution-plan.js +415 -0
  210. package/dist/src/evals/execution-plan.js.map +1 -0
  211. package/dist/src/evals/harbor-artifact-builder-image.js +99 -0
  212. package/dist/src/evals/harbor-artifact-builder-image.js.map +1 -0
  213. package/dist/src/evals/harbor-artifact-builder.js +354 -0
  214. package/dist/src/evals/harbor-artifact-builder.js.map +1 -0
  215. package/dist/src/evals/harbor-bridge-error.js +18 -3
  216. package/dist/src/evals/harbor-bridge-error.js.map +1 -1
  217. package/dist/src/evals/harbor-phase-timings.js +60 -0
  218. package/dist/src/evals/harbor-phase-timings.js.map +1 -0
  219. package/dist/src/evals/index.js +25 -2
  220. package/dist/src/evals/index.js.map +1 -1
  221. package/dist/src/evals/infrastructure-retry.js +100 -63
  222. package/dist/src/evals/infrastructure-retry.js.map +1 -1
  223. package/dist/src/evals/interaction-capture-import.js +49 -0
  224. package/dist/src/evals/interaction-capture-import.js.map +1 -0
  225. package/dist/src/evals/local-docker-provider.js +372 -0
  226. package/dist/src/evals/local-docker-provider.js.map +1 -0
  227. package/dist/src/evals/local-eval-planning.js +80 -0
  228. package/dist/src/evals/local-eval-planning.js.map +1 -0
  229. package/dist/src/evals/model-capture-plan.js +22 -0
  230. package/dist/src/evals/model-capture-plan.js.map +1 -0
  231. package/dist/src/evals/model-capture-runtime.js +114 -0
  232. package/dist/src/evals/model-capture-runtime.js.map +1 -0
  233. package/dist/src/evals/model-proxy-runtime-state.js +53 -0
  234. package/dist/src/evals/model-proxy-runtime-state.js.map +1 -0
  235. package/dist/src/evals/planned-execution-support.js +54 -0
  236. package/dist/src/evals/planned-execution-support.js.map +1 -0
  237. package/dist/src/evals/planned-execution.js +461 -0
  238. package/dist/src/evals/planned-execution.js.map +1 -0
  239. package/dist/src/evals/planned-remote-execution.js +40 -0
  240. package/dist/src/evals/planned-remote-execution.js.map +1 -0
  241. package/dist/src/evals/planned-retry-lifecycle.js +186 -0
  242. package/dist/src/evals/planned-retry-lifecycle.js.map +1 -0
  243. package/dist/src/evals/prepared-harness.js +76 -0
  244. package/dist/src/evals/prepared-harness.js.map +1 -0
  245. package/dist/src/evals/progress.js +4 -4
  246. package/dist/src/evals/progress.js.map +1 -1
  247. package/dist/src/evals/records.js +20 -3
  248. package/dist/src/evals/records.js.map +1 -1
  249. package/dist/src/evals/recovery.js +192 -0
  250. package/dist/src/evals/recovery.js.map +1 -0
  251. package/dist/src/evals/remote-infrastructure-retry.js +99 -0
  252. package/dist/src/evals/remote-infrastructure-retry.js.map +1 -0
  253. package/dist/src/evals/rerun-inputs.js +89 -0
  254. package/dist/src/evals/rerun-inputs.js.map +1 -0
  255. package/dist/src/evals/rerun-slots.js +4 -3
  256. package/dist/src/evals/rerun-slots.js.map +1 -1
  257. package/dist/src/evals/rerun-types.js +49 -0
  258. package/dist/src/evals/rerun-types.js.map +1 -0
  259. package/dist/src/evals/rerun.js +113 -75
  260. package/dist/src/evals/rerun.js.map +1 -1
  261. package/dist/src/evals/result-helpers.js +65 -0
  262. package/dist/src/evals/result-helpers.js.map +1 -0
  263. package/dist/src/evals/resume-state.js +36 -0
  264. package/dist/src/evals/resume-state.js.map +1 -0
  265. package/dist/src/evals/service-types.js +2 -0
  266. package/dist/src/evals/service-types.js.map +1 -0
  267. package/dist/src/evals/service.js +292 -257
  268. package/dist/src/evals/service.js.map +1 -1
  269. package/dist/src/evals/task-resources.js +209 -0
  270. package/dist/src/evals/task-resources.js.map +1 -0
  271. package/dist/src/evals/trial-environment-evidence.js +87 -0
  272. package/dist/src/evals/trial-environment-evidence.js.map +1 -0
  273. package/dist/src/evals/trial-execution-evidence.js +13 -0
  274. package/dist/src/evals/trial-execution-evidence.js.map +1 -0
  275. package/dist/src/evals/trial-import-identity.js +31 -0
  276. package/dist/src/evals/trial-import-identity.js.map +1 -0
  277. package/dist/src/evals/trial-import.js +143 -145
  278. package/dist/src/evals/trial-import.js.map +1 -1
  279. package/dist/src/evals/trial-publication-recovery.js +104 -0
  280. package/dist/src/evals/trial-publication-recovery.js.map +1 -0
  281. package/dist/src/evals/trial-publication.js +25 -0
  282. package/dist/src/evals/trial-publication.js.map +1 -0
  283. package/dist/src/evals/work-item-artifacts.js +23 -0
  284. package/dist/src/evals/work-item-artifacts.js.map +1 -0
  285. package/dist/src/foundation/config.js +17 -0
  286. package/dist/src/foundation/config.js.map +1 -1
  287. package/dist/src/foundation/credential-redaction.js +137 -0
  288. package/dist/src/foundation/credential-redaction.js.map +1 -0
  289. package/dist/src/foundation/environment-image-references.js +59 -0
  290. package/dist/src/foundation/environment-image-references.js.map +1 -0
  291. package/dist/src/foundation/executable.js +45 -5
  292. package/dist/src/foundation/executable.js.map +1 -1
  293. package/dist/src/foundation/index.js +5 -2
  294. package/dist/src/foundation/index.js.map +1 -1
  295. package/dist/src/foundation/process-identity.js +69 -0
  296. package/dist/src/foundation/process-identity.js.map +1 -0
  297. package/dist/src/images/context.js +47 -0
  298. package/dist/src/images/context.js.map +1 -0
  299. package/dist/src/images/docker-buildkit.js +137 -0
  300. package/dist/src/images/docker-buildkit.js.map +1 -0
  301. package/dist/src/images/dockerfile.js +67 -0
  302. package/dist/src/images/dockerfile.js.map +1 -0
  303. package/dist/src/images/gc.js +261 -0
  304. package/dist/src/images/gc.js.map +1 -0
  305. package/dist/src/images/index.js +10 -0
  306. package/dist/src/images/index.js.map +1 -0
  307. package/dist/src/images/manifest.js +109 -0
  308. package/dist/src/images/manifest.js.map +1 -0
  309. package/dist/src/images/ownership.js +5 -0
  310. package/dist/src/images/ownership.js.map +1 -0
  311. package/dist/src/images/records.js +32 -0
  312. package/dist/src/images/records.js.map +1 -0
  313. package/dist/src/images/registry.js +154 -0
  314. package/dist/src/images/registry.js.map +1 -0
  315. package/dist/src/images/service.js +224 -0
  316. package/dist/src/images/service.js.map +1 -0
  317. package/dist/src/model-access/capture.js +255 -0
  318. package/dist/src/model-access/capture.js.map +1 -0
  319. package/dist/src/model-access/index.js +5 -0
  320. package/dist/src/model-access/index.js.map +1 -0
  321. package/dist/src/model-access/policy.js +49 -0
  322. package/dist/src/model-access/policy.js.map +1 -0
  323. package/dist/src/model-access/proxy.js +336 -0
  324. package/dist/src/model-access/proxy.js.map +1 -0
  325. package/dist/src/model-access/records.js +167 -0
  326. package/dist/src/model-access/records.js.map +1 -0
  327. package/dist/src/runs/bundle.js +450 -0
  328. package/dist/src/runs/bundle.js.map +1 -0
  329. package/dist/src/runs/events.js +12 -1
  330. package/dist/src/runs/events.js.map +1 -1
  331. package/dist/src/runs/executor.js +24 -17
  332. package/dist/src/runs/executor.js.map +1 -1
  333. package/dist/src/runs/index.js +3 -1
  334. package/dist/src/runs/index.js.map +1 -1
  335. package/dist/src/runs/manifest.js +5 -5
  336. package/dist/src/runs/manifest.js.map +1 -1
  337. package/dist/src/runs/request.js +6 -1
  338. package/dist/src/runs/request.js.map +1 -1
  339. package/dist/src/runs/training-candidate.js +161 -0
  340. package/dist/src/runs/training-candidate.js.map +1 -0
  341. package/dist/src/trajectories/provider-capture.js +15 -24
  342. package/dist/src/trajectories/provider-capture.js.map +1 -1
  343. package/dist/src/trajectories/providers/deepseek.js +3 -3
  344. package/dist/src/trajectories/providers/deepseek.js.map +1 -1
  345. package/dist/src/workers/index.js +3 -0
  346. package/dist/src/workers/index.js.map +1 -0
  347. package/dist/src/workers/remote-harbor-work-spec.js +97 -0
  348. package/dist/src/workers/remote-harbor-work-spec.js.map +1 -0
  349. package/dist/src/workers/remote-harbor-worker.js +220 -0
  350. package/dist/src/workers/remote-harbor-worker.js.map +1 -0
  351. package/docs/schemas/environment-build-index.schema.json +13 -0
  352. package/docs/schemas/environment-build-record.schema.json +25 -0
  353. package/docs/schemas/environment-image-manifest.schema.json +62 -0
  354. package/docs/schemas/eval-control.schema.json +36 -0
  355. package/docs/schemas/eval-execution-plan.schema.json +216 -0
  356. package/docs/schemas/eval-rerun-result.schema.json +53 -0
  357. package/docs/schemas/eval-rerun-state.schema.json +61 -0
  358. package/docs/schemas/eval-rerun-submission.schema.json +58 -0
  359. package/docs/schemas/eval-result.schema.json +34 -1
  360. package/docs/schemas/eval-submission-input.schema.json +14 -0
  361. package/docs/schemas/eval-submission.schema.json +68 -0
  362. package/docs/schemas/eval-trial-publication.schema.json +39 -0
  363. package/docs/schemas/execution-evidence.schema.json +96 -0
  364. package/docs/schemas/execution-lease.schema.json +50 -0
  365. package/docs/schemas/execution-provider-status.schema.json +65 -0
  366. package/docs/schemas/execution-worker.schema.json +53 -0
  367. package/docs/schemas/harbor-process-exit.schema.json +14 -0
  368. package/docs/schemas/interaction-capture-ref.schema.json +45 -0
  369. package/docs/schemas/local-provider-execution.schema.json +33 -0
  370. package/docs/schemas/model-interaction.schema.json +41 -0
  371. package/docs/schemas/remote-result-envelope.schema.json +32 -0
  372. package/docs/schemas/remote-tree-envelope.schema.json +25 -0
  373. package/docs/schemas/remote-work-offer.schema.json +58 -0
  374. package/docs/schemas/remote-work-receipt.schema.json +50 -0
  375. package/docs/schemas/remote-worker-artifact.schema.json +17 -0
  376. package/docs/schemas/remote-worker-event.schema.json +18 -0
  377. package/docs/schemas/remote-worker-heartbeat.schema.json +37 -0
  378. package/docs/schemas/remote-worker-registration.schema.json +52 -0
  379. package/docs/schemas/result-bundle-index.schema.json +133 -0
  380. package/docs/schemas/run-environment-images.schema.json +39 -0
  381. package/docs/schemas/training-data-candidate.schema.json +46 -0
  382. package/integrations/harbor/hitch_harbor_agent.py +171 -539
  383. package/integrations/harbor/hitch_harbor_environment.py +331 -0
  384. package/integrations/harbor/hitch_harbor_task_resources.py +275 -0
  385. package/integrations/harbor/hitch_harbor_verifier.py +23 -0
  386. package/package.json +14 -1
@@ -0,0 +1,415 @@
1
+ import { sha256JSON } from "../foundation/index.js";
2
+ import { artifactPinFields, opaqueWorkId, parseArtifactAssignments, parseRuntimeContract, workItemId } from "./execution-plan-artifacts.js";
3
+ import { imagesForTasks, parseEnvironmentImageFallbacks, parseEnvironmentImageUses } from "./execution-plan-images.js";
4
+ import { parseTaskResourceRequirements, reservationForTasks } from "./execution-plan-resources.js";
5
+ export const DEFAULT_EVAL_TRIAL_RESOURCES = {
6
+ cpu_millis: 1_000,
7
+ memory_bytes: 1024 * 1024 * 1024,
8
+ container_slots: 1,
9
+ build_slots: 0,
10
+ };
11
+ export function buildEvalExecutionPlan(options) {
12
+ const resources = parseResourceVector(options.trialResources || DEFAULT_EVAL_TRIAL_RESOURCES, "default trial resources");
13
+ if (!isSha256(options.candidate.revisionIdentity) || !isSha256(options.candidate.artifactId)) {
14
+ throw new TypeError("execution plan candidate identity is invalid");
15
+ }
16
+ if (!Number.isSafeInteger(options.maxParallelism) || options.maxParallelism < 1 || options.maxParallelism > options.request.max_concurrent) {
17
+ throw new TypeError("execution plan max parallelism is invalid");
18
+ }
19
+ const provider = options.provider || "local-docker";
20
+ if (!provider)
21
+ throw new TypeError("execution plan provider is invalid");
22
+ const modelCapture = options.modelCapture === null ? undefined : parseModelCapturePlan(options.modelCapture ?? {
23
+ requested_mode: "native",
24
+ effective_mode: "native",
25
+ required: false,
26
+ });
27
+ const tasks = options.tasks === null ? null : canonicalTasks(options.tasks);
28
+ const artifactAssignments = parseArtifactAssignments(options.candidate.artifactAssignments, tasks, options.candidate.artifactId);
29
+ const taskResources = tasks === null ? undefined : parseTaskResourceRequirements(options.taskResources, tasks);
30
+ const environmentImages = tasks === null ? [] : parseEnvironmentImageUses(options.environmentImages ?? [], tasks, "execution plan environment images");
31
+ const imageFallbacks = tasks === null ? [] : parseEnvironmentImageFallbacks(options.environmentImageFallbacks ?? [], tasks);
32
+ const candidateIdentity = sha256JSON({
33
+ harness_revision_identity: options.candidate.revisionIdentity,
34
+ artifact_assignments: artifactAssignments.length > 0
35
+ ? artifactAssignments.map((entry) => ({ task_ids: entry.taskIds, artifact_id: entry.artifactId, runtime_contract: entry.runtimeContract }))
36
+ : [{ task_ids: tasks ?? [], artifact_id: options.candidate.artifactId }],
37
+ requested_model: options.request.model,
38
+ agent_args_sha256: sha256JSON(options.request.agent_args),
39
+ protocol: {
40
+ timeout_ms: options.request.timeout_ms,
41
+ setup_timeout_ms: options.request.setup_timeout_ms,
42
+ },
43
+ });
44
+ const slots = tasks === null ? [] : buildSlots(options.evalId, tasks, options.request.attempts, candidateIdentity);
45
+ const workItems = tasks === null
46
+ ? [opaqueWorkItem(options.evalId, options.maxParallelism, resources, provider, artifactAssignments[0])]
47
+ : options.workItemMode === "task-slots"
48
+ ? buildTaskWorkItems(options.evalId, slots, resources, provider, taskResources, environmentImages, artifactAssignments)
49
+ : buildAttemptWorkItems(options.evalId, tasks, slots, options.request.attempts, options.maxParallelism, resources, provider, taskResources, environmentImages, artifactAssignments);
50
+ return parseEvalExecutionPlan({
51
+ schema_version: "1",
52
+ planner: "hitch-local-v1",
53
+ eval_id: options.evalId,
54
+ membership: tasks === null ? "opaque" : "known",
55
+ candidate_identity: candidateIdentity,
56
+ benchmark: {
57
+ id: options.request.benchmark_id,
58
+ revision: options.request.benchmark_revision,
59
+ verifier_identity: sha256JSON({
60
+ backend: "harbor",
61
+ benchmark_id: options.request.benchmark_id,
62
+ benchmark_revision: options.request.benchmark_revision,
63
+ verifier: "dataset",
64
+ }),
65
+ },
66
+ provider,
67
+ ...(modelCapture ? { model_capture: modelCapture } : {}),
68
+ max_parallelism: options.maxParallelism,
69
+ default_trial_resources: resources,
70
+ ...(taskResources ? { task_resources: taskResources } : {}),
71
+ ...(imageFallbacks.length > 0 ? { image_fallbacks: imageFallbacks } : {}),
72
+ slots,
73
+ work_items: workItems,
74
+ retry_policy: {
75
+ infrastructure_retries: options.request.infrastructure_retries,
76
+ infrastructure_retry_backoff_ms: options.request.infrastructure_retry_backoff_ms,
77
+ verifier_execution: "same-trial-verifier-only",
78
+ candidate_rerun_on_verifier_failure: false,
79
+ },
80
+ created_at: options.createdAt || new Date().toISOString(),
81
+ });
82
+ }
83
+ export function parseEvalExecutionPlan(value) {
84
+ if (!isRecord(value))
85
+ throw new TypeError("eval execution plan must be an object");
86
+ const plan = value;
87
+ assertOnlyKeys(plan, [
88
+ "schema_version", "planner", "eval_id", "membership", "candidate_identity", "benchmark", "provider", "model_capture",
89
+ "max_parallelism", "default_trial_resources", "task_resources", "image_fallbacks", "slots", "work_items", "retry_policy", "created_at",
90
+ ], "eval execution plan");
91
+ if (plan.schema_version !== "1" || plan.planner !== "hitch-local-v1" || !isEvalId(plan.eval_id)
92
+ || (plan.membership !== "known" && plan.membership !== "opaque")
93
+ || !isSha256(plan.candidate_identity) || typeof plan.provider !== "string" || !plan.provider
94
+ || !Number.isSafeInteger(plan.max_parallelism) || plan.max_parallelism < 1
95
+ || typeof plan.created_at !== "string" || !Number.isFinite(Date.parse(plan.created_at))) {
96
+ throw new TypeError("eval execution plan identity is invalid");
97
+ }
98
+ const benchmark = parseBenchmark(plan.benchmark);
99
+ const modelCapture = plan.model_capture === undefined ? undefined : parseModelCapturePlan(plan.model_capture);
100
+ const resources = parseResourceVector(plan.default_trial_resources, "execution plan default trial resources");
101
+ if (!Array.isArray(plan.slots) || !Array.isArray(plan.work_items))
102
+ throw new TypeError("eval execution plan work graph is invalid");
103
+ const slots = plan.slots.map((slot, index) => parseSlot(slot, plan.eval_id, plan.candidate_identity, index));
104
+ const taskResources = parseTaskResourceRequirements(plan.task_resources, slots.map((slot) => slot.task_id).filter((task, index, all) => all.indexOf(task) === index));
105
+ const taskIds = slots.map((slot) => slot.task_id).filter((task, index, all) => all.indexOf(task) === index);
106
+ const imageFallbacks = parseEnvironmentImageFallbacks(plan.image_fallbacks ?? [], taskIds);
107
+ const workItems = plan.work_items.map((item, index) => parseWorkItem(item, plan.eval_id, plan.provider, plan.max_parallelism, index));
108
+ assertPlanGraph(plan.membership, slots, workItems, resources, taskResources);
109
+ const retry = parseRetryPolicy(plan.retry_policy);
110
+ return {
111
+ schema_version: "1",
112
+ planner: "hitch-local-v1",
113
+ eval_id: plan.eval_id,
114
+ membership: plan.membership,
115
+ candidate_identity: plan.candidate_identity,
116
+ benchmark,
117
+ provider: plan.provider,
118
+ ...(modelCapture ? { model_capture: modelCapture } : {}),
119
+ max_parallelism: plan.max_parallelism,
120
+ default_trial_resources: resources,
121
+ ...(taskResources ? { task_resources: taskResources } : {}),
122
+ ...(imageFallbacks.length > 0 ? { image_fallbacks: imageFallbacks } : {}),
123
+ slots,
124
+ work_items: workItems,
125
+ retry_policy: retry,
126
+ created_at: plan.created_at,
127
+ };
128
+ }
129
+ function parseModelCapturePlan(value) {
130
+ if (!isRecord(value))
131
+ throw new TypeError("execution plan model capture must be an object");
132
+ assertOnlyKeys(value, ["requested_mode", "effective_mode", "required", "topology", "degraded_reason"], "execution plan model capture");
133
+ const modes = new Set(["off", "native", "proxy", "hybrid"]);
134
+ if (!modes.has(value.requested_mode) || !modes.has(value.effective_mode)
135
+ || typeof value.required !== "boolean"
136
+ || value.topology !== undefined && value.topology !== "host-side" && value.topology !== "in-sandbox"
137
+ || value.degraded_reason !== undefined && (typeof value.degraded_reason !== "string" || !value.degraded_reason)) {
138
+ throw new TypeError("execution plan model capture is invalid");
139
+ }
140
+ if ((value.effective_mode === "proxy" || value.effective_mode === "hybrid") !== (value.topology !== undefined)) {
141
+ throw new TypeError("execution plan model capture topology is invalid");
142
+ }
143
+ if ((value.requested_mode !== value.effective_mode) !== (value.degraded_reason !== undefined)) {
144
+ throw new TypeError("execution plan model capture degradation evidence is invalid");
145
+ }
146
+ if (value.required === true && value.requested_mode !== value.effective_mode) {
147
+ throw new TypeError("required model capture cannot be degraded");
148
+ }
149
+ return {
150
+ requested_mode: value.requested_mode,
151
+ effective_mode: value.effective_mode,
152
+ required: value.required,
153
+ ...(value.topology === undefined ? {} : { topology: value.topology }),
154
+ ...(value.degraded_reason === undefined ? {} : { degraded_reason: value.degraded_reason }),
155
+ };
156
+ }
157
+ function buildSlots(evalId, tasks, attempts, candidateIdentity) {
158
+ const slots = [];
159
+ for (const taskId of tasks) {
160
+ for (let attempt = 1; attempt <= attempts; attempt += 1) {
161
+ const identity = { eval_id: evalId, task_id: taskId, attempt, candidate_identity: candidateIdentity };
162
+ slots.push({
163
+ schema_version: "1",
164
+ slot_id: `slot_${sha256JSON(identity).slice("sha256:".length, "sha256:".length + 32)}`,
165
+ eval_id: evalId,
166
+ task_id: taskId,
167
+ attempt,
168
+ candidate_identity: candidateIdentity,
169
+ state: "pending",
170
+ physical_execution: 1,
171
+ });
172
+ }
173
+ }
174
+ return slots;
175
+ }
176
+ function buildAttemptWorkItems(evalId, tasks, slots, attempts, maxParallelism, resources, provider, taskResources, environmentImages = [], artifactAssignments = []) {
177
+ const items = [];
178
+ for (let attempt = 1; attempt <= attempts; attempt += 1) {
179
+ const groups = artifactAssignments.length > 0
180
+ ? artifactAssignments
181
+ : [{ taskIds: [...tasks] }];
182
+ for (const group of groups) {
183
+ const groupTasks = tasks.filter((task) => group.taskIds.includes(task));
184
+ if (groupTasks.length === 0)
185
+ continue;
186
+ const selected = slots.filter((slot) => slot.attempt === attempt && groupTasks.includes(slot.task_id)).map((slot) => slot.slot_id);
187
+ const imageRefs = imagesForTasks(environmentImages, groupTasks);
188
+ const requestedParallelism = Math.min(maxParallelism, selected.length);
189
+ const artifactPin = artifactPinFields(group);
190
+ items.push({
191
+ schema_version: "1",
192
+ work_id: workItemId(evalId, attempt, selected, imageRefs, artifactPin),
193
+ eval_id: evalId,
194
+ backend: "harbor",
195
+ logical_attempt: attempt,
196
+ task_ids: [...groupTasks],
197
+ slots: selected,
198
+ opaque_membership: false,
199
+ requested_parallelism: requestedParallelism,
200
+ reservation: reservationForTasks(groupTasks, requestedParallelism, resources, taskResources),
201
+ provider,
202
+ ...(imageRefs.length > 0 ? { image_refs: imageRefs } : {}),
203
+ ...artifactPin,
204
+ });
205
+ }
206
+ }
207
+ return items;
208
+ }
209
+ function buildTaskWorkItems(evalId, slots, resources, provider, taskResources, environmentImages = [], artifactAssignments = []) {
210
+ return slots.map((slot) => {
211
+ const imageRefs = imagesForTasks(environmentImages, [slot.task_id]);
212
+ const assignment = artifactAssignments.find((entry) => entry.taskIds.includes(slot.task_id));
213
+ const artifactPin = artifactPinFields(assignment);
214
+ return {
215
+ schema_version: "1",
216
+ work_id: workItemId(evalId, slot.attempt, [slot.slot_id], imageRefs, artifactPin),
217
+ eval_id: evalId,
218
+ backend: "harbor",
219
+ logical_attempt: slot.attempt,
220
+ task_ids: [slot.task_id],
221
+ slots: [slot.slot_id],
222
+ opaque_membership: false,
223
+ requested_parallelism: 1,
224
+ reservation: reservationForTasks([slot.task_id], 1, resources, taskResources),
225
+ provider,
226
+ ...(imageRefs.length > 0 ? { image_refs: imageRefs } : {}),
227
+ ...artifactPin,
228
+ };
229
+ });
230
+ }
231
+ function opaqueWorkItem(evalId, maxParallelism, resources, provider, assignment) {
232
+ const artifactPin = artifactPinFields(assignment);
233
+ const identity = { eval_id: evalId, backend: "harbor", membership: "opaque", ...artifactPin };
234
+ return {
235
+ schema_version: "1",
236
+ work_id: `work_${sha256JSON(identity).slice("sha256:".length, "sha256:".length + 32)}`,
237
+ eval_id: evalId,
238
+ backend: "harbor",
239
+ logical_attempt: null,
240
+ task_ids: [],
241
+ slots: [],
242
+ opaque_membership: true,
243
+ requested_parallelism: maxParallelism,
244
+ reservation: scaleResources(resources, maxParallelism),
245
+ provider,
246
+ ...artifactPin,
247
+ };
248
+ }
249
+ function parseSlot(value, evalId, candidateIdentity, index) {
250
+ if (!isRecord(value))
251
+ throw new TypeError(`eval execution plan slot ${index} is invalid`);
252
+ assertOnlyKeys(value, [
253
+ "schema_version", "slot_id", "eval_id", "task_id", "task_digest", "attempt", "candidate_identity",
254
+ "state", "physical_execution", "authoritative_run_id", "invalid_reason",
255
+ ], `eval execution plan slot ${index}`);
256
+ if (value.schema_version !== "1" || typeof value.slot_id !== "string" || !/^slot_[a-f0-9]{32}$/.test(value.slot_id)
257
+ || value.eval_id !== evalId || typeof value.task_id !== "string" || !value.task_id
258
+ || !Number.isSafeInteger(value.attempt) || value.attempt < 1 || value.candidate_identity !== candidateIdentity
259
+ || value.state !== "pending" || value.physical_execution !== 1) {
260
+ throw new TypeError(`eval execution plan slot ${index} is invalid`);
261
+ }
262
+ if (value.task_digest !== undefined && !isSha256(value.task_digest))
263
+ throw new TypeError(`eval execution plan slot ${index} task digest is invalid`);
264
+ if (value.authoritative_run_id !== undefined || value.invalid_reason !== undefined)
265
+ throw new TypeError(`pending execution plan slot ${index} is already settled`);
266
+ const identity = { eval_id: evalId, task_id: value.task_id, attempt: value.attempt, candidate_identity: candidateIdentity };
267
+ const expected = `slot_${sha256JSON(identity).slice("sha256:".length, "sha256:".length + 32)}`;
268
+ if (value.slot_id !== expected)
269
+ throw new TypeError(`eval execution plan slot ${index} identity does not match`);
270
+ return value;
271
+ }
272
+ function parseWorkItem(value, evalId, provider, maxParallelism, index) {
273
+ if (!isRecord(value))
274
+ throw new TypeError(`eval execution plan work item ${index} is invalid`);
275
+ assertOnlyKeys(value, [
276
+ "schema_version", "work_id", "eval_id", "backend", "logical_attempt", "task_ids", "slots",
277
+ "opaque_membership", "requested_parallelism", "reservation", "provider",
278
+ "image_refs", "artifact_id", "runtime_contract",
279
+ ], `eval execution plan work item ${index}`);
280
+ if (value.schema_version !== "1" || typeof value.work_id !== "string" || !/^work_[a-f0-9]{32}$/.test(value.work_id)
281
+ || value.eval_id !== evalId || value.backend !== "harbor"
282
+ || (value.logical_attempt !== null && (!Number.isSafeInteger(value.logical_attempt) || value.logical_attempt < 1))
283
+ || !Array.isArray(value.task_ids) || value.task_ids.some((task) => typeof task !== "string" || !task)
284
+ || !Array.isArray(value.slots) || value.slots.some((slot) => typeof slot !== "string" || !/^slot_[a-f0-9]{32}$/.test(slot))
285
+ || typeof value.opaque_membership !== "boolean" || !Number.isSafeInteger(value.requested_parallelism) || value.requested_parallelism < 1
286
+ || value.requested_parallelism > maxParallelism || value.provider !== provider) {
287
+ throw new TypeError(`eval execution plan work item ${index} is invalid`);
288
+ }
289
+ if (new Set(value.task_ids).size !== value.task_ids.length || new Set(value.slots).size !== value.slots.length) {
290
+ throw new TypeError(`eval execution plan work item ${index} members are duplicated`);
291
+ }
292
+ const imageRefs = parseEnvironmentImageUses(value.image_refs ?? [], value.task_ids, `eval execution plan work item ${index} image refs`);
293
+ const artifactId = value.artifact_id === undefined ? undefined : isSha256(value.artifact_id) ? value.artifact_id : (() => { throw new TypeError(`eval execution plan work item ${index} artifact id is invalid`); })();
294
+ const runtimeContract = value.runtime_contract === undefined ? undefined : parseRuntimeContract(value.runtime_contract, `eval execution plan work item ${index}`);
295
+ if ((artifactId === undefined) !== (runtimeContract === undefined))
296
+ throw new TypeError(`eval execution plan work item ${index} artifact contract is incomplete`);
297
+ return {
298
+ ...value,
299
+ reservation: parseResourceVector(value.reservation, `eval execution plan work item ${index} reservation`),
300
+ ...(imageRefs.length > 0 ? { image_refs: imageRefs } : {}),
301
+ ...(artifactId ? { artifact_id: artifactId } : {}),
302
+ ...(runtimeContract ? { runtime_contract: runtimeContract } : {}),
303
+ };
304
+ }
305
+ function assertPlanGraph(membership, slots, workItems, resources, taskResources) {
306
+ if (new Set(slots.map((slot) => slot.slot_id)).size !== slots.length || new Set(workItems.map((item) => item.work_id)).size !== workItems.length) {
307
+ throw new TypeError("eval execution plan identities are duplicated");
308
+ }
309
+ if (membership === "opaque") {
310
+ const item = workItems[0];
311
+ if (slots.length !== 0 || workItems.length !== 1 || item?.opaque_membership !== true || item.logical_attempt !== null
312
+ || item.slots.length !== 0 || item.task_ids.length !== 0 || item.work_id !== opaqueWorkId(item.eval_id, artifactPinFields(item.artifact_id && item.runtime_contract ? { taskIds: [], artifactId: item.artifact_id, runtimeContract: item.runtime_contract } : undefined))
313
+ || taskResources !== undefined
314
+ || JSON.stringify(item.reservation) !== JSON.stringify(scaleResources(resources, item.requested_parallelism))) {
315
+ throw new TypeError("opaque execution plan shape is invalid");
316
+ }
317
+ return;
318
+ }
319
+ if (slots.length === 0 || workItems.length === 0 || workItems.some((item) => item.opaque_membership))
320
+ throw new TypeError("known execution plan shape is invalid");
321
+ const planned = new Set(slots.map((slot) => slot.slot_id));
322
+ const assigned = workItems.flatMap((item) => item.slots);
323
+ if (new Set(assigned).size !== assigned.length || assigned.length !== planned.size || assigned.some((slot) => !planned.has(slot))) {
324
+ throw new TypeError("eval execution plan slots are not assigned exactly once");
325
+ }
326
+ const byId = new Map(slots.map((slot) => [slot.slot_id, slot]));
327
+ for (const item of workItems) {
328
+ const members = item.slots.map((slotId) => byId.get(slotId));
329
+ const taskIds = [...new Set(members.map((slot) => slot.task_id))].sort(compareBytes);
330
+ if (item.logical_attempt === null || members.some((slot) => slot.attempt !== item.logical_attempt)
331
+ || JSON.stringify(item.task_ids) !== JSON.stringify(taskIds)
332
+ || item.requested_parallelism > item.slots.length
333
+ || JSON.stringify(item.reservation) !== JSON.stringify(reservationForTasks(item.task_ids, item.requested_parallelism, resources, taskResources))) {
334
+ throw new TypeError(`eval execution plan work item does not match its slots: ${item.work_id}`);
335
+ }
336
+ const expected = workItemId(item.eval_id, item.logical_attempt, item.slots, item.image_refs ?? [], {
337
+ ...(item.artifact_id ? { artifact_id: item.artifact_id } : {}),
338
+ ...(item.runtime_contract ? { runtime_contract: item.runtime_contract } : {}),
339
+ });
340
+ if (item.work_id !== expected)
341
+ throw new TypeError(`eval execution plan work item identity does not match: ${item.work_id}`);
342
+ }
343
+ }
344
+ function parseBenchmark(value) {
345
+ if (!isRecord(value))
346
+ throw new TypeError("eval execution plan benchmark is invalid");
347
+ assertOnlyKeys(value, ["id", "revision", "verifier_identity"], "eval execution plan benchmark");
348
+ if (typeof value.id !== "string" || !value.id || typeof value.revision !== "string" || !value.revision || !isSha256(value.verifier_identity)) {
349
+ throw new TypeError("eval execution plan benchmark is invalid");
350
+ }
351
+ return { id: value.id, revision: value.revision, verifier_identity: value.verifier_identity };
352
+ }
353
+ function parseRetryPolicy(value) {
354
+ if (!isRecord(value))
355
+ throw new TypeError("eval execution plan retry policy is invalid");
356
+ assertOnlyKeys(value, [
357
+ "infrastructure_retries", "infrastructure_retry_backoff_ms", "verifier_execution", "candidate_rerun_on_verifier_failure",
358
+ ], "eval execution plan retry policy");
359
+ if (!Number.isSafeInteger(value.infrastructure_retries) || value.infrastructure_retries < 0
360
+ || typeof value.infrastructure_retry_backoff_ms !== "number" || !Number.isFinite(value.infrastructure_retry_backoff_ms) || value.infrastructure_retry_backoff_ms < 0
361
+ || value.verifier_execution !== "same-trial-verifier-only" || value.candidate_rerun_on_verifier_failure !== false) {
362
+ throw new TypeError("eval execution plan retry policy is invalid");
363
+ }
364
+ return value;
365
+ }
366
+ function canonicalTasks(tasks) {
367
+ if (tasks.length === 0 || tasks.some((task) => typeof task !== "string" || !task) || new Set(tasks).size !== tasks.length) {
368
+ throw new TypeError("execution plan tasks must be a non-empty unique list");
369
+ }
370
+ return [...tasks].sort(compareBytes);
371
+ }
372
+ function parseResourceVector(value, label) {
373
+ if (!isRecord(value))
374
+ throw new TypeError(`${label} must be an object`);
375
+ const required = ["cpu_millis", "memory_bytes", "container_slots", "build_slots"];
376
+ const allowed = [...required, "gpu_count", "ephemeral_disk_bytes"];
377
+ if (Object.keys(value).some((key) => !allowed.includes(key)))
378
+ throw new TypeError(`${label} has unknown fields`);
379
+ for (const field of required) {
380
+ if (!Number.isSafeInteger(value[field]) || value[field] < 0)
381
+ throw new TypeError(`${label} ${field} is invalid`);
382
+ }
383
+ if (value.gpu_count !== undefined && (!Number.isSafeInteger(value.gpu_count) || value.gpu_count < 0))
384
+ throw new TypeError(`${label} gpu_count is invalid`);
385
+ if (value.ephemeral_disk_bytes !== undefined && (!Number.isSafeInteger(value.ephemeral_disk_bytes) || value.ephemeral_disk_bytes < 0))
386
+ throw new TypeError(`${label} ephemeral_disk_bytes is invalid`);
387
+ return {
388
+ ...Object.fromEntries(required.map((field) => [field, value[field]])),
389
+ ...(value.gpu_count === undefined ? {} : { gpu_count: value.gpu_count }),
390
+ ...(value.ephemeral_disk_bytes === undefined ? {} : { ephemeral_disk_bytes: value.ephemeral_disk_bytes }),
391
+ };
392
+ }
393
+ function scaleResources(resources, count) {
394
+ const scaled = Object.fromEntries(Object.entries(resources).map(([name, value]) => [name, value * count]));
395
+ return parseResourceVector(scaled, "scaled work item reservation");
396
+ }
397
+ function isEvalId(value) {
398
+ return typeof value === "string" && /^eval_[a-f0-9]{32}$/.test(value);
399
+ }
400
+ function isSha256(value) {
401
+ return typeof value === "string" && /^sha256:[a-f0-9]{64}$/.test(value);
402
+ }
403
+ function isRecord(value) {
404
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
405
+ }
406
+ function compareBytes(left, right) {
407
+ return Buffer.from(left).compare(Buffer.from(right));
408
+ }
409
+ function assertOnlyKeys(record, allowed, label) {
410
+ const allowedSet = new Set(allowed);
411
+ const unexpected = Object.keys(record).find((key) => !allowedSet.has(key));
412
+ if (unexpected)
413
+ throw new TypeError(`${label} has unknown field: ${unexpected}`);
414
+ }
415
+ //# sourceMappingURL=execution-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-plan.js","sourceRoot":"","sources":["../../../src/evals/execution-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import { mkdtemp, rm, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { HARBOR_NODE_VERSION, HARBOR_NODE_VERSION_WITH_PREFIX, HARBOR_PNPM_VERSION } from "../backends/index.js";
4
+ import { HitchError, digest, hitchRootId, runCommand, withFileLock } from "../foundation/index.js";
5
+ export const DEFAULT_HARBOR_ARTIFACT_BUILDER_BASE_IMAGE = `node:${HARBOR_NODE_VERSION}-bookworm-slim`;
6
+ export const HARBOR_ARTIFACT_BUILDER_RECIPE_VERSION = "1";
7
+ export async function ensureHarborArtifactBuilderImage(input) {
8
+ const base = input.env.HITCH_HARBOR_BUILDER_BASE_IMAGE?.trim() || DEFAULT_HARBOR_ARTIFACT_BUILDER_BASE_IMAGE;
9
+ if (!/^[A-Za-z0-9][A-Za-z0-9._/@:+-]*$/.test(base)) {
10
+ throw new HitchError("Harbor artifact builder base image reference is invalid", { code: "invalid_input", exitCode: 2 });
11
+ }
12
+ const imageKey = digest({ base, node: HARBOR_NODE_VERSION, pnpm: HARBOR_PNPM_VERSION, platform: input.dockerPlatform });
13
+ const tag = `hitch-harbor-artifact-builder:${imageKey.slice("sha256:".length, "sha256:".length + 24)}`;
14
+ return withFileLock(input.cache.locks, `builder-image-${imageKey.slice("sha256:".length)}`, async () => {
15
+ const existing = await inspectBuilderImage(input.docker, tag, input.dockerPlatform, input.env, input.signal);
16
+ if (existing)
17
+ return existing;
18
+ const context = await mkdtemp(path.join(input.cache.temporary, "builder-image-"));
19
+ try {
20
+ const dockerfile = [
21
+ `FROM ${base}`,
22
+ "RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ca-certificates git && rm -rf /var/lib/apt/lists/*",
23
+ `RUN npm install --global pnpm@${HARBOR_PNPM_VERSION} && test \"$(node -p process.version)\" = \"${HARBOR_NODE_VERSION_WITH_PREFIX}\" && test \"$(pnpm --version)\" = \"${HARBOR_PNPM_VERSION}\"`,
24
+ `LABEL io.hitch.harbor-artifact-builder.recipe=${JSON.stringify(HARBOR_ARTIFACT_BUILDER_RECIPE_VERSION)}`,
25
+ `LABEL io.hitch.harbor-artifact-builder.node=${JSON.stringify(HARBOR_NODE_VERSION_WITH_PREFIX)}`,
26
+ `LABEL io.hitch.harbor-artifact-builder.pnpm=${JSON.stringify(HARBOR_PNPM_VERSION)}`,
27
+ "ENTRYPOINT []",
28
+ "",
29
+ ].join("\n");
30
+ await writeFile(path.join(context, "Dockerfile"), dockerfile, { mode: 0o600 });
31
+ await runCommand(input.docker, [
32
+ "build", "--platform", input.dockerPlatform, "--tag", tag,
33
+ "--label", `io.hitch.root-id=${hitchRootId(input.root)}`, context,
34
+ ], {
35
+ env: input.env,
36
+ ...(input.signal ? { signal: input.signal } : {}),
37
+ timeoutMs: 30 * 60 * 1_000,
38
+ failureCode: "harbor_artifact_builder_image_failed",
39
+ failureExitCode: 12,
40
+ });
41
+ }
42
+ finally {
43
+ await rm(context, { recursive: true, force: true });
44
+ }
45
+ const built = await inspectBuilderImage(input.docker, tag, input.dockerPlatform, input.env, input.signal);
46
+ if (!built) {
47
+ throw new HitchError("Harbor artifact builder image failed post-build verification", {
48
+ code: "harbor_artifact_builder_image_failed",
49
+ exitCode: 12,
50
+ });
51
+ }
52
+ return built;
53
+ }, {
54
+ timeoutCode: "harbor_artifact_builder_image_locked",
55
+ timeoutExitCode: 12,
56
+ ...(input.signal ? { signal: input.signal } : {}),
57
+ });
58
+ }
59
+ async function inspectBuilderImage(docker, reference, expectedPlatform, env, signal) {
60
+ let result;
61
+ try {
62
+ result = await runCommand(docker, ["image", "inspect", "--format", "{{json .}}", reference], {
63
+ env,
64
+ ...(signal ? { signal } : {}),
65
+ timeoutMs: 30_000,
66
+ failureCode: "harbor_artifact_builder_image_unavailable",
67
+ failureExitCode: 12,
68
+ });
69
+ }
70
+ catch (error) {
71
+ if (error.code === "cancelled")
72
+ throw error;
73
+ return null;
74
+ }
75
+ let image;
76
+ try {
77
+ image = JSON.parse(result.stdout);
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ const config = image.Config && typeof image.Config === "object" && !Array.isArray(image.Config) ? image.Config : {};
83
+ const labels = config.Labels && typeof config.Labels === "object" && !Array.isArray(config.Labels) ? config.Labels : {};
84
+ const os = typeof image.Os === "string" ? image.Os : "";
85
+ const architecture = image.Architecture === "x86_64" ? "amd64" : image.Architecture === "aarch64" ? "arm64" : image.Architecture;
86
+ const platform = `${os}/${String(architecture || "")}`;
87
+ if (!/^sha256:[0-9a-f]{64}$/.test(String(image.Id || "")) || platform !== expectedPlatform
88
+ || labels["io.hitch.harbor-artifact-builder.recipe"] !== HARBOR_ARTIFACT_BUILDER_RECIPE_VERSION
89
+ || labels["io.hitch.harbor-artifact-builder.node"] !== HARBOR_NODE_VERSION_WITH_PREFIX
90
+ || labels["io.hitch.harbor-artifact-builder.pnpm"] !== HARBOR_PNPM_VERSION)
91
+ return null;
92
+ return {
93
+ reference,
94
+ id: String(image.Id),
95
+ dockerPlatform: platform,
96
+ artifactPlatform: platform === "linux/amd64" ? "linux-x64" : "linux-arm64",
97
+ };
98
+ }
99
+ //# sourceMappingURL=harbor-artifact-builder-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harbor-artifact-builder-image.js","sourceRoot":"","sources":["../../../src/evals/harbor-artifact-builder-image.ts"],"names":[],"mappings":"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"}