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
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![npm version](https://img.shields.io/npm/v/agent-hitch.svg)](https://www.npmjs.com/package/agent-hitch)
8
8
  [![GitHub release](https://img.shields.io/github/v/release/rsi-gear/agent-hitch)](https://github.com/rsi-gear/agent-hitch/releases)
9
9
  [![License](https://img.shields.io/badge/license-Apache--2.0-green)](LICENSE)
10
- [![Discord](https://img.shields.io/badge/Discord-Join_chat-5865F2?logo=discord&logoColor=white)](https://discord.gg/cZ4NBbHDk)
10
+ [![Discord](https://img.shields.io/badge/Discord-Join_chat-5865F2?logo=discord&logoColor=white)](https://discord.gg/ZduvAtS2k)
11
11
 
12
12
  English | [简体中文](README.zh-CN.md)
13
13
 
@@ -26,7 +26,7 @@ compare models, or fix the model to compare harnesses.
26
26
 
27
27
  - [x] **Build and cache.** Pin harness versions and reuse verified artifacts and environment images.
28
28
  - [x] **Adapt the harness.** Run Codex, Claude Code, and other supported harnesses through one interface.
29
- - [x] **Connect the model.** Use hosted APIs or managed local and remote SGLang inference.
29
+ - [x] **Connect the model.** Connect hosted APIs or already deployed local/remote SGLang endpoints.
30
30
  - [x] **Place the work.** Execute task sandboxes on local Docker or registered remote workers.
31
31
  - [x] **Run and recover.** Share resource budgets, run trials in parallel, and preserve completed work through supported recovery paths.
32
32
  - [x] **Collect the evidence.** Keep scores, trajectories, verifier evidence, and provenance in one result bundle.
@@ -136,28 +136,7 @@ and resource admission; it is not a speed or cost comparison against native Harb
136
136
 
137
137
  ## Local and remote model inference
138
138
 
139
- Import a complete Hugging Face safetensors checkpoint once, then use the same
140
- run and eval commands with a `local/<name>` model. Hitch chooses a pinned
141
- CPU or CUDA preview runtime, starts the daemon and SGLang service when needed, and
142
- records the immutable model/runtime/inference identities automatically.
143
-
144
- ```bash
145
- hitch models add /models/coder-checkpoint --name coder
146
-
147
- hitch run \
148
- --harness codex@version:0.145.0 \
149
- --model local/coder \
150
- --prompt "Inspect this repository"
151
- ```
152
-
153
- The local preview targets Linux/amd64 Docker with an Intel Xeon AMX CPU or a
154
- compatible single NVIDIA CUDA GPU. Managed Codex requires the exact version above
155
- and a supported model tool parser. Unsupported hardware never falls back to a cloud model.
156
-
157
- For remote inference, use your Harness’s model API configuration or register a
158
- managed model node. Node-bound models also use `local/<name>`; the binding selects
159
- the remote GPU host. See the [model inference guide](https://rsigear.xyz/docs/hitch/model-inference)
160
- for setup, Docker access, parallel capacity, and service recovery.
139
+ Connect already deployed APIs with `hitch models connect --name coder --file ENDPOINT.json`, verify with `hitch models inspect endpoint/coder --verify --json`, then use `--model endpoint/coder` for run/eval. Submissions freeze revisions and generation parameters. `models connect --persist-credential` explicitly hands a revision-scoped credential to an existing daemon through private host storage. A recovered deployment uses `eval rerun --invalid --endpoint-attempt-file READY_ATTEMPT.json` with a stable rerun ID and parent attempt, preserving valid observations and cumulative cost. Tasks share services and cancel only their own requests. See the [model inference guide](docs/guide/en/model-inference.md) and [pinned upstream deployment examples](examples/external-inference/README.md).
161
140
 
162
141
  ## Parallel execution and recovery
163
142
 
@@ -226,7 +205,7 @@ selection, artifact preparation, and workspace modes.
226
205
  | Guide | What you will learn |
227
206
  | --- | --- |
228
207
  | [Quick Start](docs/guide/en/quickstart.md) | Install, authenticate, run a task, and submit parallel work |
229
- | [Local and remote model inference](docs/guide/en/model-inference.md) | Use remote APIs, managed local SGLang, and remote model nodes |
208
+ | [Local and remote model inference](docs/guide/en/model-inference.md) | Connect immutable model endpoints and share upstream services |
230
209
  | [Versions and workspaces](docs/guide/en/versions-and-workspaces.md) | Pin the executable and choose worktree, copy, or shared mode |
231
210
  | [Runs and evidence](docs/guide/en/runs-and-evidence.md) | Query results, trajectories, verifier evidence, and feedback |
232
211
  | [First evaluation](docs/guide/en/evaluations.md) | Run a small Docker task and interpret valid and invalid results |
@@ -272,13 +251,13 @@ registry, branches, tags, candidate promotion, or rollback policy.
272
251
 
273
252
  ## Community
274
253
 
275
- Join [Discord](https://discord.gg/cZ4NBbHDk) to ask questions, share feedback,
254
+ Join [Discord](https://discord.gg/ZduvAtS2k) to ask questions, share feedback,
276
255
  and discuss model and agent evaluation infrastructure.
277
256
 
278
257
  Hitch draws inspiration from [Multica](https://github.com/multica-ai/multica),
279
258
  adopts [Harbor](https://github.com/harbor-framework/harbor)'s task definition format,
280
- and integrates [SGLang](https://github.com/sgl-project/sglang) for managed local
281
- and remote model inference.
259
+ and connects to deployed model services through standard APIs. The
260
+ [external inference examples](examples/external-inference/README.md) use official SGLang and Gateway images.
282
261
 
283
262
  ## License
284
263
 
package/README.zh-CN.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![npm version](https://img.shields.io/npm/v/agent-hitch.svg)](https://www.npmjs.com/package/agent-hitch)
8
8
  [![GitHub release](https://img.shields.io/github/v/release/rsi-gear/agent-hitch)](https://github.com/rsi-gear/agent-hitch/releases)
9
9
  [![License](https://img.shields.io/badge/license-Apache--2.0-green)](LICENSE)
10
- [![Discord](https://img.shields.io/badge/Discord-加入讨论-5865F2?logo=discord&logoColor=white)](https://discord.gg/cZ4NBbHDk)
10
+ [![Discord](https://img.shields.io/badge/Discord-加入讨论-5865F2?logo=discord&logoColor=white)](https://discord.gg/ZduvAtS2k)
11
11
 
12
12
  [English](README.md) | 简体中文
13
13
 
@@ -131,27 +131,7 @@ Hitch 采用 **Harbor 的任务定义格式**,接入已有 Benchmark 和自定
131
131
 
132
132
  ## 本地与远程模型推理
133
133
 
134
- 完整的 Hugging Face safetensors checkpoint 只需导入一次,此后继续使用原有
135
- run/eval 命令,并把模型写成 `local/<name>`。Hitch 会自动选择固定摘要的 CPU 或
136
- CUDA preview runtime、按需启动 daemon 和 SGLang 服务,并记录不可变的模型、runtime
137
- 和 inference 身份。
138
-
139
- ```bash
140
- hitch models add /models/coder-checkpoint --name coder
141
-
142
- hitch run \
143
- --harness codex@version:0.145.0 \
144
- --model local/coder \
145
- --prompt "Inspect this repository"
146
- ```
147
-
148
- 本机预览面向 Linux/amd64 Docker,以及 Intel Xeon AMX CPU 或兼容的单张
149
- NVIDIA CUDA GPU。托管 Codex 要求上述确定版本及受支持的模型工具解析器;
150
- 不支持的硬件不会回退到云模型。
151
-
152
- 远程推理可以通过 Harness 的模型 API 配置接入,也可以注册托管模型节点。
153
- 节点模型仍使用 `local/<name>`,由绑定选择远程 GPU 主机。配置、Docker 访问、
154
- 并行容量与服务恢复见[模型推理指南](https://rsigear.xyz/docs/hitch/zh/model-inference)。
134
+ 使用 `hitch models connect --name coder --file ENDPOINT.json` 连接已部署 API,执行 `hitch models inspect endpoint/coder --verify --json` 验证,再在 run/eval 中使用 `--model endpoint/coder`。提交时冻结 revision 与生成参数;任务共享服务,取消只撤销自己的请求。参见[模型推理指南](docs/guide/zh-CN/model-inference.md)与[固定版本上游部署示例](examples/external-inference/README.md)。
155
135
 
156
136
  ## 并行执行与恢复
157
137
 
@@ -216,7 +196,7 @@ hitch eval doctor
216
196
  | 指南 | 你会学到什么 |
217
197
  | --- | --- |
218
198
  | [Quick Start](docs/guide/zh-CN/quickstart.md) | 安装、认证、运行任务并提交并行工作 |
219
- | [本地与远程模型推理](docs/guide/zh-CN/model-inference.md) | 接入远程 API、托管本机 SGLang 和远程模型节点 |
199
+ | [本地与远程模型推理](docs/guide/zh-CN/model-inference.md) | 接入冻结模型端点并共享上游服务 |
220
200
  | [固定版本与隔离工作区](docs/guide/zh-CN/versions-and-workspaces.md) | 固定可执行版本,选择 worktree、copy 或 shared 模式 |
221
201
  | [查看运行与证据](docs/guide/zh-CN/runs-and-evidence.md) | 查询结果、轨迹、Verifier 证据和消息反馈 |
222
202
  | [第一次评测](docs/guide/zh-CN/evaluations.md) | 运行小型 Docker 任务,理解有效与无效结果 |
@@ -259,12 +239,12 @@ Hitch 是 pre-alpha 阶段的模型与 Harness 评测执行层。远端制品同
259
239
 
260
240
  ## 社区
261
241
 
262
- 加入 [Discord](https://discord.gg/cZ4NBbHDk),提问、分享反馈,并讨论模型与
242
+ 加入 [Discord](https://discord.gg/ZduvAtS2k),提问、分享反馈,并讨论模型与
263
243
  智能体评测基础设施。
264
244
 
265
245
  Hitch 的设计受到 [Multica](https://github.com/multica-ai/multica) 启发,采用
266
- [Harbor](https://github.com/harbor-framework/harbor) 的任务定义格式,并集成
267
- [SGLang](https://github.com/sgl-project/sglang),提供托管的本地与远程模型推理支持。
246
+ [Harbor](https://github.com/harbor-framework/harbor) 的任务定义格式,通过标准 API 连接
247
+ 已部署的模型服务。[外部推理示例](examples/external-inference/README.md) 使用官方 SGLang 与 Gateway 镜像。
268
248
 
269
249
  ## 许可证
270
250
 
@@ -0,0 +1,118 @@
1
+ /** Model-free replay of the dataset checks in eval admission and trial collection. */
2
+ import assert from "node:assert/strict";
3
+ import fs, { mkdir, mkdtemp, realpath, rm, writeFile } from "node:fs/promises";
4
+ import { channel } from "node:diagnostics_channel";
5
+ import { syncBuiltinESMExports } from "node:module";
6
+ import { tmpdir } from "node:os";
7
+ import path from "node:path";
8
+ import { pathToFileURL } from "node:url";
9
+ import { parseArgs } from "node:util";
10
+ import { loadBenchmarkAdapterManifest } from "../src/evals/benchmark-adapter-manifest.js";
11
+ import { verifyBenchmarkExecution, verifyTrialBenchmark, verifiedTrialManifest } from "../src/evals/benchmark-verification.js";
12
+ import { nativePhaseDescriptor } from "../src/evals/native-phase-evidence.js";
13
+ const { values } = parseArgs({ options: { dataset: { type: "string" }, baseline: { type: "string" }, output: { type: "string" } } });
14
+ if (!values.dataset || !values.baseline || !values.output)
15
+ throw new Error("required: --dataset PATH --baseline PACKAGE_DIRECTORY --output JSON_FILE");
16
+ const dataset = await realpath(values.dataset), baseline = path.resolve(values.baseline);
17
+ const oldManifest = await import(pathToFileURL(path.join(baseline, "dist/src/evals/benchmark-adapter-manifest.js")).href);
18
+ const oldNative = await import(pathToFileURL(path.join(baseline, "dist/src/evals/native-phase-evidence.js")).href);
19
+ const scratch = await realpath(await mkdtemp(path.join(tmpdir(), "hitch-dataset-replay-")));
20
+ const originalRead = fs.readFile;
21
+ let reads = 0, bytes = 0;
22
+ let optimizedReads = false;
23
+ fs.readFile = (async (...args) => {
24
+ const value = await Reflect.apply(originalRead, fs, args);
25
+ const file = String(args[0]);
26
+ if (!optimizedReads && file.startsWith(`${dataset}${path.sep}`)
27
+ && path.relative(dataset, file).includes(path.sep)) {
28
+ reads++;
29
+ bytes += typeof value === "string" ? Buffer.byteLength(value) : value.length;
30
+ }
31
+ return value;
32
+ });
33
+ syncBuiltinESMExports();
34
+ const diagnostics = channel("hitch.benchmark.task-content-read");
35
+ const observe = (message) => {
36
+ const value = message;
37
+ if (optimizedReads && value.root.startsWith(`${dataset}${path.sep}`)) {
38
+ reads++;
39
+ bytes += value.bytes;
40
+ }
41
+ };
42
+ diagnostics.subscribe(observe);
43
+ async function replay(optimized) {
44
+ const loader = optimized ? loadBenchmarkAdapterManifest : oldManifest.loadBenchmarkAdapterManifest;
45
+ const native = optimized ? nativePhaseDescriptor : oldNative.nativePhaseDescriptor;
46
+ optimizedReads = optimized;
47
+ reads = 0;
48
+ bytes = 0;
49
+ const start = performance.now();
50
+ const manifest = await loader(dataset);
51
+ if (!manifest || manifest.schema_version !== "1")
52
+ throw new Error("replay requires a legacy standardized dataset");
53
+ const evalId = `eval_${"e".repeat(32)}`;
54
+ const evalDirectory = path.join(scratch, "evals", evalId);
55
+ const request = {
56
+ schema_version: "1", backend: "harbor", dataset, harness_ref: "pi@version:1.2.3", model: "synthetic-model",
57
+ attempts: 1, max_concurrent: 1, infrastructure_retries: 0, infrastructure_retry_backoff_ms: 0,
58
+ timeout_ms: 0, setup_timeout_ms: 1000, agent_args: [], pass_env: [],
59
+ benchmark_id: manifest.benchmark.id, benchmark_revision: manifest.dataset_digest,
60
+ };
61
+ const resolvedRevision = {
62
+ schema_version: "1", requested_ref: request.harness_ref, canonical_ref: request.harness_ref,
63
+ harness_id: "pi", selector: { type: "version", value: "1.2.3" }, source: { type: "npm" },
64
+ revision: { type: "version", version: "1.2.3" }, identity: `sha256:${"a".repeat(64)}`,
65
+ resolved_at: "2026-10-11T00:00:00.000Z",
66
+ };
67
+ await mkdir(evalDirectory, { recursive: true });
68
+ await writeFile(path.join(evalDirectory, "request.json"), JSON.stringify(request));
69
+ const input = { root: scratch, evalId, evalDirectory, request, resolvedRevision,
70
+ benchmarkId: manifest.benchmark.id, benchmarkRevision: manifest.dataset_digest,
71
+ revisionIdentity: resolvedRevision.identity };
72
+ const execution = optimized ? await verifyBenchmarkExecution(input) : null;
73
+ if (optimized)
74
+ assert.ok(execution);
75
+ else
76
+ assert.deepEqual(await loader(dataset), manifest); // admission and planning
77
+ const descriptors = [];
78
+ const collectionStart = performance.now();
79
+ for (const [index, task] of manifest.tasks.entries()) {
80
+ const binding = { ...input, taskId: task.task_id, trialDirectory: path.join(evalDirectory, "harbor/job", `${task.task_id}__1`) };
81
+ const receipt = execution ? await verifyTrialBenchmark(binding, task.task_id, execution) : undefined;
82
+ const descriptor = await native({ ...input, ...(receipt ? { verifiedTrialBenchmark: receipt, verifiedTrialBinding: binding } : {}) }, task.task_id);
83
+ descriptors.push(descriptor);
84
+ if (!descriptor)
85
+ assert.deepEqual(receipt ? await verifiedTrialManifest(receipt, binding) : await loader(dataset), manifest);
86
+ if ((index + 1) % 5 === 0)
87
+ process.stderr.write(`${optimized ? "optimized" : "baseline"}: ${index + 1}/${manifest.tasks.length} tasks\n`);
88
+ }
89
+ const collectionMs = performance.now() - collectionStart;
90
+ if (optimized)
91
+ assert.deepEqual(await loader(dataset), manifest);
92
+ return { mode: optimized ? "optimized" : "baseline", tasks: manifest.tasks.length,
93
+ dataset_digest: manifest.dataset_digest, wall_ms: performance.now() - start,
94
+ collection_ms: collectionMs, successful_task_content_reads: reads, logical_task_content_bytes: bytes, descriptors };
95
+ }
96
+ try {
97
+ // Bracket the baseline so the timing comparison is not only a cold/warm pair.
98
+ const before = await replay(true), baselineResult = await replay(false), after = await replay(true);
99
+ assert.equal(before.dataset_digest, baselineResult.dataset_digest);
100
+ assert.equal(after.dataset_digest, baselineResult.dataset_digest);
101
+ assert.deepEqual(before.descriptors, baselineResult.descriptors);
102
+ assert.deepEqual(after.descriptors, baselineResult.descriptors);
103
+ assert.equal(before.logical_task_content_bytes, after.logical_task_content_bytes);
104
+ assert.ok(baselineResult.logical_task_content_bytes > 0, "baseline package must expose pre-optimization task reads");
105
+ const result = { dataset, baseline, measured_at: new Date().toISOString(), model_calls: 0,
106
+ note: "Sequential dataset-check replay against a pre-optimization package, not end-to-end evaluation; bytes count task content only, exclude root manifest metadata, and are logical reads rather than physical disk I/O.",
107
+ results: [before, baselineResult, after],
108
+ logical_byte_reduction: 1 - after.logical_task_content_bytes / baselineResult.logical_task_content_bytes };
109
+ await writeFile(values.output, `${JSON.stringify(result, null, 2)}\n`);
110
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
111
+ }
112
+ finally {
113
+ fs.readFile = originalRead;
114
+ syncBuiltinESMExports();
115
+ diagnostics.unsubscribe(observe);
116
+ await rm(scratch, { recursive: true, force: true });
117
+ }
118
+ //# sourceMappingURL=benchmark-dataset-verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark-dataset-verification.js","sourceRoot":"","sources":["../../scripts/benchmark-dataset-verification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import assert from "node:assert/strict";
2
+ import { createServer } from "node:http";
3
+ import { execFile } from "node:child_process";
4
+ import { promisify } from "node:util";
5
+ import { chmod, copyFile, mkdtemp, readdir, rm, writeFile } from "node:fs/promises";
6
+ import { tmpdir } from "node:os";
7
+ import path from "node:path";
8
+ import { packageRoot } from "../src/foundation/index.js";
9
+ // Installed-package canary: PATH contains Node only, with no Python/CUDA/model engine requirement.
10
+ const directory = await mkdtemp(path.join(tmpdir(), "hitch-endpoint-canary-"));
11
+ const calls = [];
12
+ const upstream = createServer(async (request, response) => {
13
+ let raw = "";
14
+ for await (const chunk of request)
15
+ raw += chunk;
16
+ const body = JSON.parse(raw);
17
+ calls.push(body);
18
+ assert.equal(request.url, "/tenant/v1/responses");
19
+ assert.equal(body.max_output_tokens, 1024);
20
+ response.setHeader("content-type", "application/json");
21
+ response.end(JSON.stringify({ id: "resp_canary", status: "completed", model: "canary-v1", usage: { input_tokens: 12, output_tokens: 7 },
22
+ output: [{ type: "message", content: [{ type: "output_text", text: "endpoint canary passed" }] }] }));
23
+ });
24
+ await new Promise(r => upstream.listen(0, "127.0.0.1", r));
25
+ try {
26
+ const config = path.join(directory, "endpoint.json"), root = path.join(directory, "state");
27
+ await writeFile(config, JSON.stringify({ schema_version: "1", base_url: `http://127.0.0.1:${upstream.address().port}/tenant/v1`,
28
+ api: "responses", wire_model: "canary-v1", auth: { kind: "none" }, capabilities: { streaming: false, tool_calls: false, parallel_tool_calls: false, input_modalities: ["text"] } }));
29
+ // Installed discovery requires an executable; keep the packaged source's
30
+ // trusted bytes while making a task-local executable for the real CLI path.
31
+ const executable = path.join(directory, "model-call");
32
+ await copyFile(path.join(packageRoot(), "integrations/model-call/cli.js"), executable);
33
+ await chmod(executable, 0o755);
34
+ const env = { PATH: path.dirname(process.execPath), HITCH_MODEL_CALL_PATH: executable };
35
+ const cli = (...args) => promisify(execFile)(process.execPath, [path.join(packageRoot(), "dist/bin/hitch.js"), "--root", root, ...args], { env });
36
+ await cli("models", "connect", "--name", "canary", "--file", config);
37
+ const result = JSON.parse((await cli("run", "--harness", "model-call@installed", "--model", "endpoint/canary", "--max-output-tokens", "1024", "--cwd", directory, "--prompt", "ordinary text", "--output", "json")).stdout);
38
+ assert.equal(result.status, "succeeded", JSON.stringify(result));
39
+ assert.equal(result.output, "endpoint canary passed");
40
+ assert.equal(result.usage.input_tokens, 12);
41
+ assert.equal(calls.length, 2);
42
+ process.stdout.write("External endpoint installed-package canary passed without Python/CUDA.\n");
43
+ }
44
+ finally {
45
+ upstream.closeAllConnections();
46
+ await new Promise(r => upstream.close(() => r()));
47
+ await writable(directory);
48
+ await rm(directory, { recursive: true, force: true });
49
+ }
50
+ async function writable(directory) {
51
+ await chmod(directory, 0o700);
52
+ for (const entry of await readdir(directory, { withFileTypes: true }))
53
+ if (entry.isDirectory())
54
+ await writable(path.join(directory, entry.name));
55
+ }
56
+ //# sourceMappingURL=canary-external-endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canary-external-endpoint.js","sourceRoot":"","sources":["../../scripts/canary-external-endpoint.ts"],"names":[],"mappings":"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"}
@@ -9,12 +9,14 @@ import { pathToFileURL } from "node:url";
9
9
  import { DaemonServer, daemonClient } from "../src/daemon/index.js";
10
10
  import { readExecutionLeases, reapOwnedDockerResources, runEval, validateEvalId } from "../src/evals/index.js";
11
11
  import { parseTrainingBinding } from "../src/model-access/index.js";
12
- import { atomicWriteJSON, runCommand, sha256JSON, statePaths } from "../src/foundation/index.js";
12
+ import { atomicWriteJSON, resolveExecutable, runCommand, sha256JSON, statePaths } from "../src/foundation/index.js";
13
13
  // Real Harbor/Docker and public worker CLI against a separately supervised native gateway.
14
14
  // The node independently verifies exact receipts; neither script certifies a training runtime.
15
15
  const python = process.env.HITCH_HARBOR_TEST_PYTHON;
16
16
  const image = process.env.HITCH_TRAINING_CANARY_IMAGE;
17
17
  assert.ok(python && image, "Set HITCH_HARBOR_TEST_PYTHON and HITCH_TRAINING_CANARY_IMAGE (local bash-capable image)");
18
+ const docker = await resolveExecutable(process.env.HITCH_DOCKER_PATH?.trim() || "docker", process.env.PATH || "");
19
+ assert.ok(docker, "Set HITCH_DOCKER_PATH to an executable Docker CLI or put docker on PATH");
18
20
  const harbor = path.join(path.dirname(python), "harbor");
19
21
  const cli = path.resolve("dist/bin/hitch.js");
20
22
  const root = await mkdtemp(path.join(tmpdir(), "hitch-native-remote-training-"));
@@ -40,16 +42,16 @@ const privateRoot = path.join(root, "private"), dataset = path.join(root, "datas
40
42
  await mkdir(privateRoot, { recursive: true, mode: 0o700 });
41
43
  const resource = { cpu_millis: 1000, memory_bytes: 1024 ** 3, container_slots: 1, build_slots: 0 };
42
44
  const zero = { cpu_millis: 0, memory_bytes: 0, container_slots: 0, build_slots: 0 };
43
- const env = { ...process.env, HITCH_HARBOR_PYTHON_PATH: python };
45
+ const env = { ...process.env, HITCH_HARBOR_PYTHON_PATH: python, HITCH_DOCKER_PATH: docker };
44
46
  delete env.HITCH_TEST_HOST_ARTIFACT_BUILDER;
45
- const imageInfo = await runCommand("docker", ["image", "inspect", image, "--format", "{{json .}}"], { timeoutMs: 10_000 });
47
+ const imageInfo = await runCommand(docker, ["image", "inspect", image, "--format", "{{json .}}"], { timeoutMs: 10_000 });
46
48
  const inspected = JSON.parse(imageInfo.stdout);
47
49
  assert.match(inspected.Id, /^sha256:[a-f0-9]{64}$/);
48
50
  assert.equal(inspected.Id, taskInput.image_id);
49
51
  assert.equal(`${inspected.Os}/${inspected.Architecture}`, "linux/amd64");
50
52
  const version = (await runCommand(python, ["-c", 'import importlib.metadata; print(importlib.metadata.version("harbor"))'], { timeoutMs: 10_000 })).stdout.trim();
51
53
  assert.equal(version, "0.21.0");
52
- const localEngine = (await runCommand("docker", ["info", "--format", "{{.ID}}"], { timeoutMs: 10_000 })).stdout.trim();
54
+ const localEngine = (await runCommand(docker, ["info", "--format", "{{.ID}}"], { timeoutMs: 10_000 })).stdout.trim();
53
55
  const remoteWorker = await remoteCanaryWorker(root, workerRoot);
54
56
  const workerObservation = await remoteWorker?.observe(inspected.Id, localEngine);
55
57
  const engine = workerObservation?.engine ?? localEngine;
@@ -68,7 +70,7 @@ try {
68
70
  await server.start();
69
71
  const registration = { schema_version: "1", worker_id: "worker_real_training", provider: "remote-docker",
70
72
  collision_domain_id: `docker-engine:${engine}`, platforms: ["linux-x64"], backends: [{ id: "harbor", version }],
71
- features: { docker: true, buildkit: true, model_proxy: true, isolated_same_task_attempts: false, training_external_binding: "2" },
73
+ features: { docker: true, buildkit: true, model_proxy: true, isolated_same_task_attempts: false, physical_work: "2", training_external_binding: "2" },
72
74
  task_membership: ["known"], capacity: { total: resource, reserved_for_system: zero, allocatable: resource } };
73
75
  const registrationFile = path.join(privateRoot, "registration.json"), credentialFile = path.join(privateRoot, "worker-credential.json");
74
76
  const bindingFile = path.join(privateRoot, "binding.json");
@@ -79,7 +81,7 @@ try {
79
81
  await runCommand(process.execPath, [cli, "worker", "register", "--server", baseUrl, "--registration", registrationFile,
80
82
  "--admin-token-file", statePaths(controllerRoot).token, "--credential-file", credentialFile], { env, timeoutMs: 10_000 });
81
83
  worker = remoteWorker ? await remoteWorker.start(server.port, registrationFile, credentialFile) : spawn(process.execPath, [cli, "--root", workerRoot, "worker", "run", "--server", baseUrl, "--registration", registrationFile,
82
- "--credential-file", credentialFile, "--harbor", harbor, "--docker", "/usr/local/bin/docker", "--once", "--poll-interval", "100ms", "--heartbeat-interval", "1s"], { env, stdio: ["ignore", "pipe", "pipe"] });
84
+ "--credential-file", credentialFile, "--harbor", harbor, "--docker", docker, "--once", "--poll-interval", "100ms", "--heartbeat-interval", "1s"], { env, stdio: ["ignore", "pipe", "pipe"] });
83
85
  worker.stdout.pipe(workerLog, { end: false });
84
86
  worker.stderr.pipe(workerLog, { end: false });
85
87
  workerDone = new Promise((resolve, reject) => { worker.once("error", reject); worker.once("exit", code => resolve(code)); });
@@ -1 +1 @@
1
- {"version":3,"file":"canary-native-training.js","sourceRoot":"","sources":["../../scripts/canary-native-training.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canary-native-training.js","sourceRoot":"","sources":["../../scripts/canary-native-training.ts"],"names":[],"mappings":"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"}
@@ -12,12 +12,14 @@ import { pathToFileURL } from "node:url";
12
12
  import { DaemonServer, daemonClient } from "../src/daemon/index.js";
13
13
  import { readExecutionLeases, reapOwnedDockerResources, runEval, validateEvalId } from "../src/evals/index.js";
14
14
  import { parseTrainingBinding } from "../src/model-access/index.js";
15
- import { atomicWriteJSON, runCommand, sha256JSON, statePaths } from "../src/foundation/index.js";
15
+ import { atomicWriteJSON, resolveExecutable, runCommand, sha256JSON, statePaths } from "../src/foundation/index.js";
16
16
  // Real Harbor/Docker and public worker CLI, with a deterministic model fixture.
17
17
  // This cannot certify native token facts, Slime training, or a GPU runtime.
18
18
  const python = process.env.HITCH_HARBOR_TEST_PYTHON;
19
19
  const image = process.env.HITCH_TRAINING_CANARY_IMAGE;
20
20
  assert.ok(python && image, "Set HITCH_HARBOR_TEST_PYTHON and HITCH_TRAINING_CANARY_IMAGE (local bash-capable image)");
21
+ const docker = await resolveExecutable(process.env.HITCH_DOCKER_PATH?.trim() || "docker", process.env.PATH || "");
22
+ assert.ok(docker, "Set HITCH_DOCKER_PATH to an executable Docker CLI or put docker on PATH");
21
23
  const harbor = path.join(path.dirname(python), "harbor");
22
24
  const cli = path.resolve("dist/bin/hitch.js");
23
25
  const root = await mkdtemp(path.join(tmpdir(), "hitch-real-remote-training-"));
@@ -26,15 +28,15 @@ const privateRoot = path.join(root, "private"), dataset = path.join(root, "datas
26
28
  await mkdir(privateRoot, { recursive: true, mode: 0o700 });
27
29
  const resource = { cpu_millis: 1000, memory_bytes: 1024 ** 3, container_slots: 1, build_slots: 0 };
28
30
  const zero = { cpu_millis: 0, memory_bytes: 0, container_slots: 0, build_slots: 0 };
29
- const env = { ...process.env, HITCH_HARBOR_PYTHON_PATH: python };
31
+ const env = { ...process.env, HITCH_HARBOR_PYTHON_PATH: python, HITCH_DOCKER_PATH: docker };
30
32
  delete env.HITCH_TEST_HOST_ARTIFACT_BUILDER;
31
- const imageInfo = await runCommand("docker", ["image", "inspect", image, "--format", "{{json .}}"], { timeoutMs: 10_000 });
33
+ const imageInfo = await runCommand(docker, ["image", "inspect", image, "--format", "{{json .}}"], { timeoutMs: 10_000 });
32
34
  const inspected = JSON.parse(imageInfo.stdout);
33
35
  assert.match(inspected.Id, /^sha256:[a-f0-9]{64}$/);
34
36
  assert.equal(`${inspected.Os}/${inspected.Architecture}`, "linux/amd64");
35
37
  const version = (await runCommand(python, ["-c", 'import importlib.metadata; print(importlib.metadata.version("harbor"))'], { timeoutMs: 10_000 })).stdout.trim();
36
38
  assert.equal(version, "0.21.0");
37
- const localEngine = (await runCommand("docker", ["info", "--format", "{{.ID}}"], { timeoutMs: 10_000 })).stdout.trim();
39
+ const localEngine = (await runCommand(docker, ["info", "--format", "{{.ID}}"], { timeoutMs: 10_000 })).stdout.trim();
38
40
  const remoteWorker = await remoteCanaryWorker(root, workerRoot);
39
41
  const workerObservation = await remoteWorker?.observe(inspected.Id, localEngine);
40
42
  const engine = workerObservation?.engine ?? localEngine;
@@ -110,7 +112,7 @@ try {
110
112
  await server.start();
111
113
  const registration = { schema_version: "1", worker_id: "worker_real_training", provider: "remote-docker",
112
114
  collision_domain_id: `docker-engine:${engine}`, platforms: ["linux-x64"], backends: [{ id: "harbor", version }],
113
- features: { docker: true, buildkit: true, model_proxy: true, isolated_same_task_attempts: false, training_external_binding: "2" },
115
+ features: { docker: true, buildkit: true, model_proxy: true, isolated_same_task_attempts: false, physical_work: "2", training_external_binding: "2" },
114
116
  task_membership: ["known"], capacity: { total: resource, reserved_for_system: zero, allocatable: resource } };
115
117
  const registrationFile = path.join(privateRoot, "registration.json"), credentialFile = path.join(privateRoot, "worker-credential.json");
116
118
  const bindingFile = path.join(privateRoot, "binding.json");
@@ -121,7 +123,7 @@ try {
121
123
  await runCommand(process.execPath, [cli, "worker", "register", "--server", baseUrl, "--registration", registrationFile,
122
124
  "--admin-token-file", statePaths(controllerRoot).token, "--credential-file", credentialFile], { env, timeoutMs: 10_000 });
123
125
  worker = remoteWorker ? await remoteWorker.start(server.port, registrationFile, credentialFile) : spawn(process.execPath, [cli, "--root", workerRoot, "worker", "run", "--server", baseUrl, "--registration", registrationFile,
124
- "--credential-file", credentialFile, "--harbor", harbor, "--docker", "/usr/local/bin/docker", "--once", "--poll-interval", "100ms", "--heartbeat-interval", "1s"], { env, stdio: ["ignore", "pipe", "pipe"] });
126
+ "--credential-file", credentialFile, "--harbor", harbor, "--docker", docker, "--once", "--poll-interval", "100ms", "--heartbeat-interval", "1s"], { env, stdio: ["ignore", "pipe", "pipe"] });
125
127
  worker.stdout.pipe(workerLog, { end: false });
126
128
  worker.stderr.pipe(workerLog, { end: false });
127
129
  workerDone = new Promise((resolve, reject) => { worker.once("error", reject); worker.once("exit", code => resolve(code)); });