agent-hitch 0.2.16 → 0.2.17

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 (361) hide show
  1. package/README.md +7 -28
  2. package/README.zh-CN.md +6 -26
  3. package/dist/scripts/benchmark-dataset-verification.js +118 -0
  4. package/dist/scripts/benchmark-dataset-verification.js.map +1 -0
  5. package/dist/scripts/canary-external-endpoint.js +56 -0
  6. package/dist/scripts/canary-external-endpoint.js.map +1 -0
  7. package/dist/scripts/canary-native-training.js +8 -6
  8. package/dist/scripts/canary-native-training.js.map +1 -1
  9. package/dist/scripts/canary-remote-training.js +8 -6
  10. package/dist/scripts/canary-remote-training.js.map +1 -1
  11. package/dist/scripts/check-architecture.js +1 -1
  12. package/dist/scripts/check-architecture.js.map +1 -1
  13. package/dist/src/adapters/providers/codex.js +5 -2
  14. package/dist/src/adapters/providers/codex.js.map +1 -1
  15. package/dist/src/adapters/providers/model-call.js +1 -2
  16. package/dist/src/adapters/providers/model-call.js.map +1 -1
  17. package/dist/src/adapters/providers/training-tool.js +2 -0
  18. package/dist/src/adapters/providers/training-tool.js.map +1 -1
  19. package/dist/src/backends/harbor/artifact-pins.js +42 -0
  20. package/dist/src/backends/harbor/artifact-pins.js.map +1 -0
  21. package/dist/src/backends/harbor/backend.js +16 -8
  22. package/dist/src/backends/harbor/backend.js.map +1 -1
  23. package/dist/src/backends/harbor/bound-credential-helper.js +24 -0
  24. package/dist/src/backends/harbor/bound-credential-helper.js.map +1 -0
  25. package/dist/src/backends/harbor/credential-snapshot.js +71 -0
  26. package/dist/src/backends/harbor/credential-snapshot.js.map +1 -0
  27. package/dist/src/backends/harbor/environment-config.js +25 -2
  28. package/dist/src/backends/harbor/environment-config.js.map +1 -1
  29. package/dist/src/backends/harbor/environment-files.js +143 -0
  30. package/dist/src/backends/harbor/environment-files.js.map +1 -0
  31. package/dist/src/backends/harbor/evaluation-binding.js +160 -0
  32. package/dist/src/backends/harbor/evaluation-binding.js.map +1 -0
  33. package/dist/src/backends/harbor/host-credential-helper.js +5 -0
  34. package/dist/src/backends/harbor/host-credential-helper.js.map +1 -1
  35. package/dist/src/backends/harbor/index.js +2 -0
  36. package/dist/src/backends/harbor/index.js.map +1 -1
  37. package/dist/src/backends/harbor/model-proxy-config.js +3 -18
  38. package/dist/src/backends/harbor/model-proxy-config.js.map +1 -1
  39. package/dist/src/backends/harbor/portable-regrade.js +15 -3
  40. package/dist/src/backends/harbor/portable-regrade.js.map +1 -1
  41. package/dist/src/backends/harbor/python-runtime.js +71 -0
  42. package/dist/src/backends/harbor/python-runtime.js.map +1 -0
  43. package/dist/src/backends/harbor/tools.js +6 -4
  44. package/dist/src/backends/harbor/tools.js.map +1 -1
  45. package/dist/src/backends/index.js +3 -0
  46. package/dist/src/backends/index.js.map +1 -1
  47. package/dist/src/cli/arguments.js +30 -30
  48. package/dist/src/cli/arguments.js.map +1 -1
  49. package/dist/src/cli/commands/capabilities.js +7 -3
  50. package/dist/src/cli/commands/capabilities.js.map +1 -1
  51. package/dist/src/cli/commands/daemon.js +0 -17
  52. package/dist/src/cli/commands/daemon.js.map +1 -1
  53. package/dist/src/cli/commands/eval-binding.js +32 -0
  54. package/dist/src/cli/commands/eval-binding.js.map +1 -0
  55. package/dist/src/cli/commands/eval.js +21 -15
  56. package/dist/src/cli/commands/eval.js.map +1 -1
  57. package/dist/src/cli/commands/models.js +32 -45
  58. package/dist/src/cli/commands/models.js.map +1 -1
  59. package/dist/src/cli/commands/run.js +0 -35
  60. package/dist/src/cli/commands/run.js.map +1 -1
  61. package/dist/src/cli/main.js +0 -4
  62. package/dist/src/cli/main.js.map +1 -1
  63. package/dist/src/cli/output.js +5 -16
  64. package/dist/src/cli/output.js.map +1 -1
  65. package/dist/src/control-plane/eval-records.js +3 -1
  66. package/dist/src/control-plane/eval-records.js.map +1 -1
  67. package/dist/src/control-plane/eval-recovery.js +4 -1
  68. package/dist/src/control-plane/eval-recovery.js.map +1 -1
  69. package/dist/src/control-plane/eval-scheduler.js +16 -8
  70. package/dist/src/control-plane/eval-scheduler.js.map +1 -1
  71. package/dist/src/control-plane/index.js +0 -2
  72. package/dist/src/control-plane/index.js.map +1 -1
  73. package/dist/src/control-plane/model-capture-planning.js +3 -4
  74. package/dist/src/control-plane/model-capture-planning.js.map +1 -1
  75. package/dist/src/control-plane/remote-model-routes.js +4 -24
  76. package/dist/src/control-plane/remote-model-routes.js.map +1 -1
  77. package/dist/src/control-plane/remote-offer-contract.js +2 -2
  78. package/dist/src/control-plane/remote-offer-contract.js.map +1 -1
  79. package/dist/src/control-plane/remote-result-transport.js +7 -8
  80. package/dist/src/control-plane/remote-result-transport.js.map +1 -1
  81. package/dist/src/control-plane/remote-work-coordinator.js +2 -2
  82. package/dist/src/control-plane/remote-work-coordinator.js.map +1 -1
  83. package/dist/src/control-plane/remote-work-recovery.js +2 -2
  84. package/dist/src/control-plane/remote-work-recovery.js.map +1 -1
  85. package/dist/src/control-plane/remote-worker-protocol.js +1 -1
  86. package/dist/src/control-plane/remote-worker-protocol.js.map +1 -1
  87. package/dist/src/control-plane/remote-worker-runner.js +21 -6
  88. package/dist/src/control-plane/remote-worker-runner.js.map +1 -1
  89. package/dist/src/control-plane/remote-workers.js +2 -2
  90. package/dist/src/control-plane/remote-workers.js.map +1 -1
  91. package/dist/src/control-plane/rerun-recovery.js +1 -1
  92. package/dist/src/control-plane/rerun-recovery.js.map +1 -1
  93. package/dist/src/control-plane/rerun-scheduler.js +21 -14
  94. package/dist/src/control-plane/rerun-scheduler.js.map +1 -1
  95. package/dist/src/control-plane/rerun-source.js +5 -2
  96. package/dist/src/control-plane/rerun-source.js.map +1 -1
  97. package/dist/src/control-plane/rerun-submission.js +7 -5
  98. package/dist/src/control-plane/rerun-submission.js.map +1 -1
  99. package/dist/src/control-plane/synthetic-result.js +3 -2
  100. package/dist/src/control-plane/synthetic-result.js.map +1 -1
  101. package/dist/src/control-plane/worker-model-relay.js +1 -1
  102. package/dist/src/control-plane/worker-model-relay.js.map +1 -1
  103. package/dist/src/controller-runtime/hash.js +6 -0
  104. package/dist/src/controller-runtime/hash.js.map +1 -1
  105. package/dist/src/daemon/client.js +12 -35
  106. package/dist/src/daemon/client.js.map +1 -1
  107. package/dist/src/daemon/evaluation-binding.js +33 -0
  108. package/dist/src/daemon/evaluation-binding.js.map +1 -0
  109. package/dist/src/daemon/evaluation-submission.js +27 -0
  110. package/dist/src/daemon/evaluation-submission.js.map +1 -0
  111. package/dist/src/daemon/index.js +1 -0
  112. package/dist/src/daemon/index.js.map +1 -1
  113. package/dist/src/daemon/json-stream.js +98 -0
  114. package/dist/src/daemon/json-stream.js.map +1 -0
  115. package/dist/src/daemon/scheduler.js +1 -4
  116. package/dist/src/daemon/scheduler.js.map +1 -1
  117. package/dist/src/daemon/server.js +14 -54
  118. package/dist/src/daemon/server.js.map +1 -1
  119. package/dist/src/domain/endpoints.js +2 -0
  120. package/dist/src/domain/endpoints.js.map +1 -0
  121. package/dist/src/domain/evaluation-binding.js +5 -0
  122. package/dist/src/domain/evaluation-binding.js.map +1 -0
  123. package/dist/src/domain/index.js +2 -0
  124. package/dist/src/domain/index.js.map +1 -1
  125. package/dist/src/domain/runs.js.map +1 -1
  126. package/dist/src/evals/benchmark-adapter-manifest.js +95 -32
  127. package/dist/src/evals/benchmark-adapter-manifest.js.map +1 -1
  128. package/dist/src/evals/benchmark-verification.js +106 -0
  129. package/dist/src/evals/benchmark-verification.js.map +1 -0
  130. package/dist/src/evals/collect-only-rerun.js +3 -2
  131. package/dist/src/evals/collect-only-rerun.js.map +1 -1
  132. package/dist/src/evals/directory.js +9 -1
  133. package/dist/src/evals/directory.js.map +1 -1
  134. package/dist/src/evals/endpoint-attempts.js +112 -0
  135. package/dist/src/evals/endpoint-attempts.js.map +1 -0
  136. package/dist/src/evals/endpoint-usage.js +8 -0
  137. package/dist/src/evals/endpoint-usage.js.map +1 -0
  138. package/dist/src/evals/environment-binding.js +9 -0
  139. package/dist/src/evals/environment-binding.js.map +1 -0
  140. package/dist/src/evals/eval-artifact-planning.js +10 -1
  141. package/dist/src/evals/eval-artifact-planning.js.map +1 -1
  142. package/dist/src/evals/eval-finalization.js +2 -3
  143. package/dist/src/evals/eval-finalization.js.map +1 -1
  144. package/dist/src/evals/eval-logical-plan.js +2 -0
  145. package/dist/src/evals/eval-logical-plan.js.map +1 -1
  146. package/dist/src/evals/eval-result-builder.js +4 -0
  147. package/dist/src/evals/eval-result-builder.js.map +1 -1
  148. package/dist/src/evals/eval-state.js +22 -0
  149. package/dist/src/evals/eval-state.js.map +1 -0
  150. package/dist/src/evals/execution-plan.js +6 -2
  151. package/dist/src/evals/execution-plan.js.map +1 -1
  152. package/dist/src/evals/index.js +5 -1
  153. package/dist/src/evals/index.js.map +1 -1
  154. package/dist/src/evals/infrastructure-retry.js +2 -0
  155. package/dist/src/evals/infrastructure-retry.js.map +1 -1
  156. package/dist/src/evals/model-capture-runtime.js +9 -13
  157. package/dist/src/evals/model-capture-runtime.js.map +1 -1
  158. package/dist/src/evals/native-phase-evidence.js +8 -2
  159. package/dist/src/evals/native-phase-evidence.js.map +1 -1
  160. package/dist/src/evals/planned-execution.js +7 -2
  161. package/dist/src/evals/planned-execution.js.map +1 -1
  162. package/dist/src/evals/planned-progress-publisher.js +18 -5
  163. package/dist/src/evals/planned-progress-publisher.js.map +1 -1
  164. package/dist/src/evals/planned-retry-execution.js +1 -0
  165. package/dist/src/evals/planned-retry-execution.js.map +1 -1
  166. package/dist/src/evals/preparation-rerun.js +0 -1
  167. package/dist/src/evals/preparation-rerun.js.map +1 -1
  168. package/dist/src/evals/progress.js +92 -7
  169. package/dist/src/evals/progress.js.map +1 -1
  170. package/dist/src/evals/records.js +12 -2
  171. package/dist/src/evals/records.js.map +1 -1
  172. package/dist/src/evals/recovery.js +2 -0
  173. package/dist/src/evals/recovery.js.map +1 -1
  174. package/dist/src/evals/remote-rerun-execution.js +1 -3
  175. package/dist/src/evals/remote-rerun-execution.js.map +1 -1
  176. package/dist/src/evals/remote-verifier-rerun.js +1 -1
  177. package/dist/src/evals/remote-verifier-rerun.js.map +1 -1
  178. package/dist/src/evals/request.js +14 -45
  179. package/dist/src/evals/request.js.map +1 -1
  180. package/dist/src/evals/rerun-observation.js +31 -0
  181. package/dist/src/evals/rerun-observation.js.map +1 -0
  182. package/dist/src/evals/rerun.js +23 -28
  183. package/dist/src/evals/rerun.js.map +1 -1
  184. package/dist/src/evals/service.js +45 -42
  185. package/dist/src/evals/service.js.map +1 -1
  186. package/dist/src/evals/shared-runtime.js +125 -0
  187. package/dist/src/evals/shared-runtime.js.map +1 -0
  188. package/dist/src/evals/trial-import.js +10 -2
  189. package/dist/src/evals/trial-import.js.map +1 -1
  190. package/dist/src/evals/trial-publication-recovery.js +1 -1
  191. package/dist/src/evals/trial-publication-recovery.js.map +1 -1
  192. package/dist/src/evals/verifier-artifacts.js +1 -0
  193. package/dist/src/evals/verifier-artifacts.js.map +1 -1
  194. package/dist/src/evals/verifier-only-rerun.js +1 -1
  195. package/dist/src/evals/verifier-only-rerun.js.map +1 -1
  196. package/dist/src/evals/verifier-rerun-result.js +3 -2
  197. package/dist/src/evals/verifier-rerun-result.js.map +1 -1
  198. package/dist/src/evals/verifier-score-artifacts.js +9 -1
  199. package/dist/src/evals/verifier-score-artifacts.js.map +1 -1
  200. package/dist/src/foundation/config.js +0 -5
  201. package/dist/src/foundation/config.js.map +1 -1
  202. package/dist/src/inference/index.js +3 -22
  203. package/dist/src/inference/index.js.map +1 -1
  204. package/dist/src/inference/lock.js +44 -130
  205. package/dist/src/inference/lock.js.map +1 -1
  206. package/dist/src/model-access/endpoint-contract.js +127 -0
  207. package/dist/src/model-access/endpoint-contract.js.map +1 -0
  208. package/dist/src/model-access/endpoint-credentials.js +54 -0
  209. package/dist/src/model-access/endpoint-credentials.js.map +1 -0
  210. package/dist/src/model-access/endpoint-probe-stream.js +66 -0
  211. package/dist/src/model-access/endpoint-probe-stream.js.map +1 -0
  212. package/dist/src/model-access/endpoint-verification.js +76 -0
  213. package/dist/src/model-access/endpoint-verification.js.map +1 -0
  214. package/dist/src/model-access/endpoints.js +105 -0
  215. package/dist/src/model-access/endpoints.js.map +1 -0
  216. package/dist/src/model-access/index.js +5 -1
  217. package/dist/src/model-access/index.js.map +1 -1
  218. package/dist/src/model-access/proxy.js +57 -14
  219. package/dist/src/model-access/proxy.js.map +1 -1
  220. package/dist/src/model-access/remote-model.js +21 -29
  221. package/dist/src/model-access/remote-model.js.map +1 -1
  222. package/dist/src/model-access/usage.js +30 -0
  223. package/dist/src/model-access/usage.js.map +1 -0
  224. package/dist/src/runs/endpoint-runtime.js +40 -0
  225. package/dist/src/runs/endpoint-runtime.js.map +1 -0
  226. package/dist/src/runs/executor.js +28 -42
  227. package/dist/src/runs/executor.js.map +1 -1
  228. package/dist/src/runs/local-inference-environment.js +5 -53
  229. package/dist/src/runs/local-inference-environment.js.map +1 -1
  230. package/dist/src/runs/manifest.js +1 -0
  231. package/dist/src/runs/manifest.js.map +1 -1
  232. package/dist/src/runs/outcome.js +3 -10
  233. package/dist/src/runs/outcome.js.map +1 -1
  234. package/dist/src/runs/queued.js +3 -2
  235. package/dist/src/runs/queued.js.map +1 -1
  236. package/dist/src/runs/records.js +3 -0
  237. package/dist/src/runs/records.js.map +1 -1
  238. package/dist/src/runs/request.js +10 -38
  239. package/dist/src/runs/request.js.map +1 -1
  240. package/dist/src/workers/remote-harbor-work-spec.js +8 -10
  241. package/dist/src/workers/remote-harbor-work-spec.js.map +1 -1
  242. package/dist/src/workers/remote-harbor-worker.js +3 -0
  243. package/dist/src/workers/remote-harbor-worker.js.map +1 -1
  244. package/docs/evidence/eval-preparation-2026-10-09.json +393 -0
  245. package/docs/evidence/eval-preparation-2026-10-09.md +178 -0
  246. package/docs/local-model-inference-spec.zh-CN.md +4 -663
  247. package/docs/resource-storage.zh-CN.md +116 -0
  248. package/docs/schemas/endpoint-evaluation-attempt.schema.json +29 -0
  249. package/docs/schemas/eval-artifact-pin.schema.json +14 -0
  250. package/docs/schemas/eval-execution-plan.schema.json +486 -105
  251. package/docs/schemas/eval-progress.schema.json +1 -1
  252. package/docs/schemas/eval-request.schema.json +149 -18
  253. package/docs/schemas/eval-rerun-submission.schema.json +8 -1
  254. package/docs/schemas/eval-result.schema.json +310 -56
  255. package/docs/schemas/evaluation-binding.schema.json +15 -0
  256. package/docs/schemas/external-endpoint-binding.schema.json +153 -0
  257. package/docs/schemas/external-endpoint-config.schema.json +93 -0
  258. package/docs/schemas/inference-execution-evidence.schema.json +253 -3
  259. package/docs/schemas/inference-lock-v3.schema.json +6 -0
  260. package/docs/schemas/inference-lock.schema.json +842 -341
  261. package/docs/schemas/ordered-eval-control.schema.json +7 -1
  262. package/docs/schemas/ready-endpoint-binding.schema.json +201 -0
  263. package/docs/schemas/run-manifest.schema.json +6 -0
  264. package/docs/schemas/run-request.schema.json +122 -20
  265. package/examples/external-inference/.env.example +16 -0
  266. package/examples/external-inference/README.md +203 -0
  267. package/examples/external-inference/accept.mjs +297 -0
  268. package/examples/external-inference/compose.gateway.yaml +119 -0
  269. package/examples/external-inference/compose.single.yaml +64 -0
  270. package/examples/external-inference/compose.tp2.yaml +15 -0
  271. package/examples/external-inference/deployment.example.json +58 -0
  272. package/examples/external-inference/endpoint.chat-completions.example.json +13 -0
  273. package/examples/external-inference/endpoint.responses.example.json +13 -0
  274. package/integrations/harbor/hitch_build_inputs.py +213 -0
  275. package/integrations/harbor/hitch_build_process.py +126 -0
  276. package/integrations/harbor/hitch_compose_preparation.py +274 -0
  277. package/integrations/harbor/hitch_harbor_agent.py +25 -39
  278. package/integrations/harbor/hitch_harbor_environment.py +96 -3
  279. package/integrations/harbor/hitch_image_cache.py +357 -0
  280. package/integrations/harbor/hitch_python_runtime.py +303 -0
  281. package/integrations/harbor/hitch_shared_runtime.py +123 -0
  282. package/integrations/model-call/cli.js +11 -10
  283. package/integrations/training-tool/cli.js +5 -3
  284. package/node_modules/smol-toml/LICENSE +24 -0
  285. package/node_modules/smol-toml/README.md +418 -0
  286. package/node_modules/smol-toml/dist/date.d.ts +41 -0
  287. package/node_modules/smol-toml/dist/date.js +127 -0
  288. package/node_modules/smol-toml/dist/error.d.ts +38 -0
  289. package/node_modules/smol-toml/dist/error.js +63 -0
  290. package/node_modules/smol-toml/dist/extract.js +69 -0
  291. package/node_modules/smol-toml/dist/index.cjs +734 -0
  292. package/node_modules/smol-toml/dist/index.d.ts +43 -0
  293. package/node_modules/smol-toml/dist/index.js +33 -0
  294. package/node_modules/smol-toml/dist/parse.d.ts +36 -0
  295. package/node_modules/smol-toml/dist/parse.js +149 -0
  296. package/node_modules/smol-toml/dist/primitive.js +238 -0
  297. package/node_modules/smol-toml/dist/stringify.d.ts +31 -0
  298. package/node_modules/smol-toml/dist/stringify.js +181 -0
  299. package/node_modules/smol-toml/dist/struct.js +179 -0
  300. package/node_modules/smol-toml/dist/util.d.ts +38 -0
  301. package/node_modules/smol-toml/dist/util.js +89 -0
  302. package/node_modules/smol-toml/package.json +68 -0
  303. package/package.json +15 -4
  304. package/dist/src/cli/commands/local.js +0 -130
  305. package/dist/src/cli/commands/local.js.map +0 -1
  306. package/dist/src/cli/commands/model-node.js +0 -26
  307. package/dist/src/cli/commands/model-node.js.map +0 -1
  308. package/dist/src/control-plane/inference-manager.js +0 -357
  309. package/dist/src/control-plane/inference-manager.js.map +0 -1
  310. package/dist/src/control-plane/managed-gateway-receipt.js +0 -26
  311. package/dist/src/control-plane/managed-gateway-receipt.js.map +0 -1
  312. package/dist/src/control-plane/managed-service-recovery.js +0 -158
  313. package/dist/src/control-plane/managed-service-recovery.js.map +0 -1
  314. package/dist/src/daemon/inference-prepare.js +0 -47
  315. package/dist/src/daemon/inference-prepare.js.map +0 -1
  316. package/dist/src/inference/daemon-capacity.js +0 -41
  317. package/dist/src/inference/daemon-capacity.js.map +0 -1
  318. package/dist/src/inference/device-reservation.js +0 -58
  319. package/dist/src/inference/device-reservation.js.map +0 -1
  320. package/dist/src/inference/doctor.js +0 -95
  321. package/dist/src/inference/doctor.js.map +0 -1
  322. package/dist/src/inference/generation-recovery.js +0 -83
  323. package/dist/src/inference/generation-recovery.js.map +0 -1
  324. package/dist/src/inference/managed-launcher.js +0 -35
  325. package/dist/src/inference/managed-launcher.js.map +0 -1
  326. package/dist/src/inference/materialize.js +0 -66
  327. package/dist/src/inference/materialize.js.map +0 -1
  328. package/dist/src/inference/model-location.js +0 -34
  329. package/dist/src/inference/model-location.js.map +0 -1
  330. package/dist/src/inference/node-client.js +0 -167
  331. package/dist/src/inference/node-client.js.map +0 -1
  332. package/dist/src/inference/node-registry.js +0 -79
  333. package/dist/src/inference/node-registry.js.map +0 -1
  334. package/dist/src/inference/observation.js +0 -79
  335. package/dist/src/inference/observation.js.map +0 -1
  336. package/dist/src/inference/preflight.js +0 -132
  337. package/dist/src/inference/preflight.js.map +0 -1
  338. package/dist/src/inference/process-sglang.js +0 -169
  339. package/dist/src/inference/process-sglang.js.map +0 -1
  340. package/dist/src/inference/protocol-probe.js +0 -29
  341. package/dist/src/inference/protocol-probe.js.map +0 -1
  342. package/dist/src/inference/remote-model-store.js +0 -24
  343. package/dist/src/inference/remote-model-store.js.map +0 -1
  344. package/dist/src/inference/runtime-catalog.js +0 -41
  345. package/dist/src/inference/runtime-catalog.js.map +0 -1
  346. package/dist/src/inference/runtime-store.js +0 -93
  347. package/dist/src/inference/runtime-store.js.map +0 -1
  348. package/dist/src/inference/service-attachment.js +0 -46
  349. package/dist/src/inference/service-attachment.js.map +0 -1
  350. package/dist/src/inference/service-inspection.js +0 -38
  351. package/dist/src/inference/service-inspection.js.map +0 -1
  352. package/dist/src/inference/sglang.js +0 -279
  353. package/dist/src/inference/sglang.js.map +0 -1
  354. package/dist/src/inference/supervisor.js +0 -460
  355. package/dist/src/inference/supervisor.js.map +0 -1
  356. package/dist/src/model-access/local-gateway-request.js +0 -139
  357. package/dist/src/model-access/local-gateway-request.js.map +0 -1
  358. package/dist/src/model-access/local-gateway.js +0 -323
  359. package/dist/src/model-access/local-gateway.js.map +0 -1
  360. package/dist/src/runs/local-inference-run.js +0 -53
  361. package/dist/src/runs/local-inference-run.js.map +0 -1
@@ -77,6 +77,57 @@ hitch --root ROOT resources legacy-export --ref /absolute/v2-dataset --output /a
77
77
 
78
78
  崩溃后用 `inspect`/`audit` 检查引用;确认导入已经结束后 `lease-end {"leaseId":"...","confirmation":"ended"}` 清理该 UUID 的 staging 并结束保护。无法证明远程结束时使用 `unknown`,不得按 PID、年龄或超时释放。执行 workspace 通过 `workspace-end` 要求明确 `executionEnded:true` 和 `resultSealed:true`;CLI 确认由操作方负责,正常执行链自动提供实际结束证明。
79
79
 
80
+ ## v1 目录数据集校验
81
+
82
+ 各阶段优化的测量方法、冷/热缓存收益及证据边界见 [2026-10-09 性能记录](evidence/eval-preparation-2026-10-09.md)。
83
+
84
+ 标准 v1 数据集的正常 eval 在 admission/planning 时校验全部 task,收集每个结果时校验锁定的 manifest 摘要、评分契约、task 集合和当前 task 的全部文件,最终完成前再校验一次全部数据。已收集 task 后续发生的变化会使最终 eval 失败。取消不增加全量扫描;没有前后校验边界的独立导入、恢复和手动重跑入口继续使用全量校验。
85
+
86
+ 这个优化按 manifest 的 task 身份工作,不依赖 benchmark 名称、文件布局或 task 数量,不缓存路径或文件修改时间。完整准入校验产生绑定 eval、请求、候选和数据集身份的内部凭据;收集时对当前 task 创建一次已校验快照,native phase 描述和评分收集共享该快照,不能由调用方任意缩小校验范围。文件内容、执行权限、文件增删和链接仍参与检查,失败后重试会重新读取。Package-native 编译包原有的 source/compiled 整包证明保持不变。v2 数据集和 selection 继续使用资源闭包校验。
87
+
88
+ 对每个 task 收集一次、无 native phase 描述的 v1 eval,task payload 的读取量由随 task 数量平方增长变为线性增长;manifest 解析和 task 集合检查仍逐次执行。这不改变 task 数据的物理副本,也不替代 v2 的 CAS 去重。可用不调用模型的脚本复现校验开销,先运行优化版,再运行旧版,再运行优化版,检查身份和描述结果完全一致:
89
+
90
+ ```sh
91
+ npm run build
92
+ node dist/scripts/benchmark-dataset-verification.js \
93
+ --dataset /absolute/v1-dataset \
94
+ --baseline /absolute/old-agent-hitch-package \
95
+ --output /absolute/comparison.json
96
+ ```
97
+
98
+ 输出区分整个校验序列与逐 task 收集阶段,记录 task 内容的读取次数及逻辑读取字节,不计根目录 manifest 元数据;这是校验回放,不是完整 eval 加速比,也不是物理磁盘吞吐量。baseline 必须使用按任务校验优化之前的已构建版本。
99
+
100
+ ## 共享 controller 与 harness 安装目录
101
+
102
+ 本地 Linux Docker eval 可显式启用 `HITCH_HARBOR_RUNTIME_TRANSPORT=readonly-bind`:
103
+
104
+ ```sh
105
+ HITCH_HARBOR_RUNTIME_TRANSPORT=readonly-bind hitch --root ROOT eval run \
106
+ --dataset DATASET --harness HARNESS --model MODEL --max-concurrent 16
107
+ ```
108
+
109
+ 每个 eval 为 controller bundle 创建一次独立快照,为每种固定内容身份的 harness artifact 创建一次快照。优先使用文件系统 reflink,不支持时复制;不使用硬链接。目录填充完成后恢复 payload 原始权限,完整校验固定身份与内容,再通过原子重命名发布。不同 task 将这些快照分别只读挂载到 `/opt/hitch` 和 `/opt/hitch-harness-artifact`,共用依赖文件和宿主页缓存,减少逐 task 上传与容器可写层副本。实现不依赖数据集名称、任务布局或 harness 类型。
110
+
111
+ 绑定挂载保留宿主文件所有权,任务用户须能按现有权限读取和执行 payload。不参与 artifact 内容摘要的安装根目录和 `artifact.json` 分别规范为 0755、0644,使元数据读取不依赖容器的 DAC_OVERRIDE 能力;拒绝元数据符号链接。带摘要的文件、目录权限及原缓存均保持不变。
112
+
113
+ 任务的工作目录、状态、凭据和 Node 解包目录仍各自隔离。bridge 与容器内原有内容校验保留,不使用路径、mtime 或“校验过一次”的全局缓存跳过检查。bridge 检查 Docker 实际挂载源、只读标志、嵌套遮挡和候选容器权限;冲突、缺失或内容错误会失败。额外的 verifier 容器不会获得这些安装目录。
114
+
115
+ 每次启动前,先由 Compose 合并配置、解析变量与继承关系,再检查 main 的实际权限和任务挂载,最后添加共享安装目录。字符串或变量表达式最终解析为 privileged=false 时可正常使用;危险权限和继承的挂载冲突在创建候选容器之前被拒绝。
116
+
117
+ Harbor 宿主侧的 Python 导入和能力检查同样使用所选 controller 快照,与任务配置中校验的运行时一致;快照发布后,原缓存的修改不能改变后续任务导入的 bridge 代码。
118
+
119
+ 此模式要求 harness 运行时不改写安装目录,并使用能够访问快照路径的本地 Linux Docker daemon;远程 worker 不支持该选项。需要改写安装目录的 harness 使用默认上传方式:不设置该变量,或设置为 `upload`。显式选用共享模式后不会因挂载错误静默回退。
120
+
121
+ 快照保留在 `<eval-directory>/shared-runtime/`,随 eval 的本地工作文件一起留存,避免取消、恢复或另一轮执行清理仍在使用的文件。原缓存的后续改写不会改变已发布快照;宿主自身仍是受信任边界,不能由同权限进程改写这些快照。只在确认该 eval 的容器全部结束且无需保留本地 job 重放后,才能清理其快照。持久化的 artifact 身份不包含这些临时传输路径,既有恢复和远程交付继续采用原上传路径。
122
+
123
+ 真实 Docker 回归检查只使用已存在的固定 Node 镜像,不调用模型或下载镜像:
124
+
125
+ ```sh
126
+ npm run build
127
+ HITCH_NODE_RUNTIME_DOCKER_TEST=1 \
128
+ node --test dist/test/shared-runtime.integration.test.js dist/test/harbor-node-runtime.integration.test.js
129
+ ```
130
+
80
131
  ## 验证
81
132
 
82
133
  单元/集成覆盖共享对象、隔离写入、未知能力、摘要/路径/平台错误、预算、两进程发布与 GC、SIGKILL、旧 generation、view/quarantine 重获、旧 worker 和 lease 对象授权;`resource-transfer.test.ts` 另覆盖镜像清单与任务声明的完整对应,以及停滞 reader/迭代器的取消和锁释放。真实 Docker canary 单独运行,无模型调用:
@@ -93,3 +144,68 @@ node dist/scripts/canary-resource-empty-daemon.js SHARED_TREE_CANARY_BUNDLE
93
144
  空 daemon canary 需要预先缓存 `mirror.gcr.io/library/docker:27-dind` 和 `registry:2` 基础设施镜像。它新建隔离 VFS daemon,不挂载宿主 Docker socket 或用户目录,检查初始镜像/BuildKit 为空;导入后停止 registry、断开 daemon 外网再执行及评分。默认 loopback 52990;记录基础设施、导入和执行阶段的 Docker/BuildKit 快照,并连续采样源 dataset、selection、文件 CAS、视图、工作区、导入 staging、bundle 和封存证据。Docker 总项只计一次;allocated blocks 不作为 CoW 独占物理字节,短于采样间隔的瞬态可能遗漏。证据封存后确认 execution lease 和 workspace 回收,最后只删除自身容器及匿名卷。
94
145
 
95
146
  后者运行 candidate 隔离检查、模拟器 API 调用和官方 verifier,并将同一 snapshot 交叉评分;初始化随机 ID/时间戳不当作存储语义变化。canary 只删除自身创建的容器和镜像 tag,保留证据目录,不 prune 现有缓存。
147
+
148
+
149
+ ## 候选、配套服务与独立验证器的镜像准备缓存
150
+
151
+ POSIX 宿主上的 Linux Docker 环境可显式启用:
152
+
153
+ ```sh
154
+ export HITCH_HARBOR_IMAGE_CACHE_DIR=/absolute/private/path/prepared-images
155
+ export HITCH_HARBOR_IMAGE_BUILD_SLOTS=2
156
+ export HITCH_HARBOR_MANAGED_KEEPALIVE=1
157
+ ```
158
+
159
+ 未设置时使用原构建与停止行为。缓存目录由当前用户所有,不能由其他用户写入。同一目录的使用者应采用相同的 build slots 设置;这是缓存内的构建限流,不替代 eval 的资源预算。冷缓存仍要构建并载入镜像,默认最多两个构建同时进行;缓存命中只需快照校验和镜像检查,不占构建槽位。
160
+
161
+ bridge 在 Harbor 的实际环境目录上读取 Compose 最终解析后的构建配置,因此同一逻辑覆盖候选、Compose 配套服务、独立验证器及多步骤验证器。身份包括完整上下文的相对路径、内容和权限、Dockerfile、固定摘要的基础镜像、平台、target、显式参数/标签、实际 daemon、builder 配置以及代理配置。mtime 不代替内容校验;完整上下文参与身份,未被 COPY 使用的文件变化也会保守地使缓存失效。不按数据集、task 名称或文件名写特殊规则。
162
+
163
+ 有效平台来自 Compose 的 `build --print` 计划,包含项目 `.env` 中的默认平台;不自行猜测 dotenv 的优先级。平台冲突、计划无法解析或 Compose 版本不支持该选项时保留原构建路径。完整快照无法读取或遍历的输入也回退,让 Docker 自行处理 `.dockerignore` 排除的无权限文件;快照目标写入失败仍作为错误报告。
164
+
165
+ 有多个硬链接的文件回退原构建,因为逐文件复制和字节摘要不足以保留 COPY 的链接关系。请求 `BUILDX_GIT_LABELS` 或 `BUILDX_GIT_CHECK_DIRTY` 时也回退;仓库状态可能位于构建上下文之外,不能通过迁移后的快照正确重现。Dockerfile 无法按 UTF-8 解码时,整组 Compose 回退原生构建,保留原文件字节;有效 UTF-8 注释仍可正常使用缓存。
166
+
167
+ 构建消费独立复制的快照。相同内容在不同目录、task、轮次或角色之间可复用;进程间文件锁合并同一个构建,原子写入记录。每次命中仍核对 Docker 中的镜像 ID、平台和缓存身份标签。镜像被删除或记录不匹配时重新构建;失败和取消不发布记录,取消先收回构建子进程再释放锁。配置、构建参数及凭据值不写入缓存记录或诊断收据。
168
+
169
+ 基础镜像或已有缓存镜像的可选元数据探测超时、不可用或返回无效 JSON 时,整组 Compose 回退原生构建,不发布未经校验的复用结果。实际构建失败、构建后的镜像校验失败和取消请求仍向上抛出;回退不会吞掉这些错误。
170
+
171
+ 每个缓存 Docker 命令通过独立监督进程运行。监督进程持有相同的 key/slot 锁描述符,以管道检测 Harbor 存活;即使 Harbor 被强制终止,也会停止该命令进程组后释放锁。正常退出需要命令及其输出管道完成。这个机制管理宿主 CLI/plugin 生命周期,不宣称任意远程 builder 已完成物理资源清理。
172
+
173
+ 正常退出也会收回剩余命令进程组:主进程成功和输出 EOF 不能证明关闭输出的后台 helper 已停止。发送 SIGKILL 后仍会核对进程组存活状态,不能用信号已发送代替进程已结束;Linux 下已退出的僵尸进程不再持有资源,不阻塞锁释放。macOS 对仅含待回收僵尸进程的组可能返回 `EPERM`;权限错误不能证明进程组已消失,监督进程继续持锁并等待确认。若 helper 陷入内核不可中断 I/O 或无法确认存活状态,监督进程继续持锁,直到能够确认停止。缓存仅使用当前 Docker context 的内置 Docker builder,并在构建命令中固定其名称;自定义 builder 或另一个 context 的 builder 保留原 Compose 构建,避免误用不同 BuildKit 宿主的平台和默认设置。显式选择 legacy builder(`DOCKER_BUILDKIT=0/false`)或 Buildx 能力探测不可用时,同样回退原生构建;实际构建失败和取消请求仍向上抛出。
174
+
175
+ 临时构建上下文持有独立的存活锁,监督进程也继承该锁。后续准备操作仅在取得该锁后回收父进程异常退出所遗留的副本,不按 PID、文件年龄或超时时间猜测存活状态;没有存活锁标记的旧目录保留供人工检查。目录创建与持锁标记发布由短期注册锁串行保护,正常复制和构建不持有注册锁。
176
+
177
+ 基础镜像元数据按实际目标平台读取并检查 CPU variant,无法确认时回退到原构建。新版基础镜像检查使用独立版本的校验记录,不复用未校验 variant 的旧记录。构建上下文路径、Dockerfile 路径、参数或标签中含字面量 `$` 时,也保留原 Compose 解释,避免把 `config` 输出为再次解析而添加的转义直接传给 Buildx,或选择另一个实际存在的目录/文件。
178
+
179
+ 目前缓存支持普通文件/目录的本地上下文、标准 Dockerfile、固定摘要基础镜像、build args、target 和 labels。基础镜像配置也检查继承的 ONBUILD。可变基础镜像、自定义 frontend、ADD、RUN 外部挂载、SSH/secrets、额外上下文、符号链接/特殊文件/xattr、显式 pull/no_cache 等不能完整确定输入的配置,整组 Compose 保留原构建路径。宿主 Python 不提供扩展属性检查(如 macOS),或文件系统不支持、拒绝该检查时,也回退原构建流程,不假定扩展属性为空。首次获取基础镜像配置可能需要 registry;校验后的固定摘要配置可在后续直接复用。force_build 绕过准备缓存。只有 Harbor 显式发出的 build 请求进入缓存;已选择预构建镜像时,up 保留原有镜像及 pull policy 的优先级。
180
+
181
+ 如果一个服务构建的镜像名还被其他服务引用,整组 Compose 回退原构建路径,由 Compose 发布共享 tag 并处理 pull policy,避免冷启动缺少镜像或复用旧 tag。检测包含服务的 image 字段、type=image 数据卷的 source、默认 latest、Docker Hub 名称别名及多个构建服务使用同名镜像的情况。未显式指定 image 的构建服务与任何声明 image 的服务混用时,也保守回退,包括后者同样声明 build 的情况,因为它可能引用或覆盖 Compose 自动生成的镜像名。全部使用隐式名称的构建服务、显式名称互不依赖的服务仍可使用缓存。没有 build 服务时不探测 builder。
182
+
183
+ 通过 `build.args.BUILDKIT_SYNTAX` 选择自定义 frontend,或设置 `EXPERIMENTAL_BUILDKIT_SOURCE_POLICY` / `BUILDX_DEFAULT_POLICY` 时,同样回退原构建路径;不能通过缓存跳过 frontend 或外部策略对输入的解释。
184
+
185
+ 命中后用不可变镜像 ID 启动,移除对应 build 字段并设置 pull_policy=never,防止 up 再次构建。候选、验证器和配套服务仍各自创建容器、可写层、工作目录和日志;缓存目录不挂入任何任务容器,评分、产物传递、资源和网络限制不变。候选预构建镜像参数不会传递成验证器的镜像。
186
+
187
+ managed keepalive 只替换 Harbor 默认的 sh/sleep 保活命令,让 shell 接收停止信号、终止并等待 sleep、正常退出。任务声明 command、entrypoint、init、停止信号/超时或 pre_stop,镜像含 ENTRYPOINT 或使用其他停止信号时,保留其行为。也检查 Compose 解析后的生命周期设置;遇到 include、main 的 extends 或 PyYAML 无法解析的 Compose 标签时保守跳过,由 Compose 处理原配置。不会缩短用户停止宽限期或复用有状态验证器。
188
+
189
+ 如果 `up` 的 pull policy 可能拉取或重新构建镜像,跳过 keepalive 修改,避免用旧本地镜像的元数据判断新镜像的生命周期;这也覆盖 `missing` 策略下会刷新的 `latest` 标签。已经存在且不会被该策略刷新的镜像仍可使用优化。
190
+
191
+ 运行平台同时考虑服务声明和 Compose 项目 dotenv 默认值。通过仅供 `config` 使用的临时标签读取解析后的默认值,标签不会进入容器;本地镜像架构不匹配或平台格式无法确认时跳过优化,由 Compose 选择或拉取实际镜像。
192
+
193
+ keepalive 的可选镜像探测超时、不可用或返回无效 JSON 时,记录回退并保留原容器启动流程。探测仍使用原有的 30 秒期限,命令监督进程先完成回收;取消请求继续向上抛出,不被当成普通回退。
194
+
195
+ 构建缓存同样保留镜像刷新语义:显式镜像名使用 `latest`(包括省略标签)且允许刷新时,整组 Compose 回退原始构建与拉取路径,避免本地构建覆盖本应在 `up` 阶段选取的远端镜像。`never`、`build` 策略下的 latest 构建仍可缓存。
196
+
197
+ 共享安装目录要求所有服务显式声明挂载,且整个 Compose 配置都不启用 privileged 或 CAP_SYS_ADMIN(包括 ALL)。任何服务使用 `volumes_from` 时,启动前拒绝共享模式,覆盖直接继承、只读继承、多级继承和外部容器引用;避免 sidecar 获得安装目录,或特权消费者通过共享 PID 命名空间等方式重新挂载并修改跨任务共享的内容。这类任务应使用默认 upload 传输。
198
+
199
+ 准备镜像持久保留;使用缓存的 down 不执行 --rmi local,容器、卷和网络仍按原参数清理。目录中的 image-*.json 给出对应的 Hitch 专用镜像 tag,可在确认不再被使用后按 tag 清理;删除缓存记录不等于删除 Docker 镜像。缓存镜像或记录被外部清理后,下次使用会重新准备。宿主同权限进程仍属于受信任边界。
200
+
201
+ 每个环境在 trial 根目录写入 hitch-preparation-*.json,包含命中/回退、镜像 ID、缓存 key 以及快照、基础镜像检查、锁等待、构建和探测时间。可移植验证器重放移除宿主安装与缓存路径,保留评分设置。
202
+
203
+ 真实 Docker 回归使用独立应用 fixture,不调用模型;基础镜像以摘要指定,可从 registry 获取:
204
+
205
+ ```sh
206
+ npm run build
207
+ HITCH_IMAGE_PREPARATION_DOCKER_TEST=1 \
208
+ HITCH_HARBOR_TEST_PYTHON=/path/to/harbor/venv/bin/python \
209
+ HITCH_IMAGE_PREPARATION_TEST_IMAGE='node@sha256:YOUR_DIGEST' \
210
+ node --test dist/test/image-preparation.integration.test.js
211
+ ```
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://agent-hitch.local/schemas/endpoint-evaluation-attempt.schema.json",
4
+ "title": "Immutable endpoint evaluation attempt V1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "id",
10
+ "parent_id",
11
+ "endpoint_binding"
12
+ ],
13
+ "properties": {
14
+ "schema_version": {
15
+ "const": "1"
16
+ },
17
+ "id": {
18
+ "type": "string",
19
+ "pattern": "^endpoint_attempt_[a-f0-9]{32}$"
20
+ },
21
+ "parent_id": {
22
+ "type": "string",
23
+ "pattern": "^endpoint_attempt_[a-f0-9]{32}$"
24
+ },
25
+ "endpoint_binding": {
26
+ "$ref": "external-endpoint-binding.schema.json"
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://agent-hitch.local/schemas/eval-artifact-pin.schema.json",
4
+ "title": "Hitch pre-submission Harbor artifact pin",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["platform", "artifact_id", "artifact_integrity", "entrypoint_integrity"],
8
+ "properties": {
9
+ "platform": { "enum": ["linux-x64", "linux-arm64"] },
10
+ "artifact_id": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
11
+ "artifact_integrity": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
12
+ "entrypoint_integrity": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }
13
+ }
14
+ }