agent-hitch 0.2.9 → 0.2.10

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 (410) hide show
  1. package/README.md +206 -137
  2. package/README.zh-CN.md +193 -119
  3. package/dist/scripts/canary-native-training.js +221 -0
  4. package/dist/scripts/canary-native-training.js.map +1 -0
  5. package/dist/scripts/canary-remote-training.js +246 -0
  6. package/dist/scripts/canary-remote-training.js.map +1 -0
  7. package/dist/scripts/canary-remote-verifier.js +124 -0
  8. package/dist/scripts/canary-remote-verifier.js.map +1 -0
  9. package/dist/scripts/canary-worker-host.js +113 -0
  10. package/dist/scripts/canary-worker-host.js.map +1 -0
  11. package/dist/scripts/canary-worker-peer.js +188 -0
  12. package/dist/scripts/canary-worker-peer.js.map +1 -0
  13. package/dist/scripts/check-architecture.js +4 -3
  14. package/dist/scripts/check-architecture.js.map +1 -1
  15. package/dist/src/adapters/catalog.js +2 -1
  16. package/dist/src/adapters/catalog.js.map +1 -1
  17. package/dist/src/adapters/providers/codex.js +65 -2
  18. package/dist/src/adapters/providers/codex.js.map +1 -1
  19. package/dist/src/adapters/providers/model-call.js +17 -1
  20. package/dist/src/adapters/providers/model-call.js.map +1 -1
  21. package/dist/src/adapters/providers/training-tool.js +29 -0
  22. package/dist/src/adapters/providers/training-tool.js.map +1 -0
  23. package/dist/src/artifacts/index.js +1 -1
  24. package/dist/src/artifacts/index.js.map +1 -1
  25. package/dist/src/artifacts/store.js +15 -10
  26. package/dist/src/artifacts/store.js.map +1 -1
  27. package/dist/src/backends/harbor/backend.js +24 -15
  28. package/dist/src/backends/harbor/backend.js.map +1 -1
  29. package/dist/src/backends/harbor/bridge-environment.js +12 -0
  30. package/dist/src/backends/harbor/bridge-environment.js.map +1 -0
  31. package/dist/src/backends/harbor/environment-config.js +2 -2
  32. package/dist/src/backends/harbor/environment-config.js.map +1 -1
  33. package/dist/src/backends/harbor/host-credential-helper.js +81 -0
  34. package/dist/src/backends/harbor/host-credential-helper.js.map +1 -0
  35. package/dist/src/backends/harbor/index.js +3 -0
  36. package/dist/src/backends/harbor/index.js.map +1 -1
  37. package/dist/src/backends/harbor/model-proxy-config.js +18 -1
  38. package/dist/src/backends/harbor/model-proxy-config.js.map +1 -1
  39. package/dist/src/backends/harbor/observation.js +61 -0
  40. package/dist/src/backends/harbor/observation.js.map +1 -0
  41. package/dist/src/backends/harbor/portable-regrade.js +150 -0
  42. package/dist/src/backends/harbor/portable-regrade.js.map +1 -0
  43. package/dist/src/backends/harbor/process.js +26 -5
  44. package/dist/src/backends/harbor/process.js.map +1 -1
  45. package/dist/src/backends/harbor/regrade.js +4 -1
  46. package/dist/src/backends/harbor/regrade.js.map +1 -1
  47. package/dist/src/backends/harbor/supervisor.js +22 -0
  48. package/dist/src/backends/harbor/supervisor.js.map +1 -1
  49. package/dist/src/backends/harbor/tools.js +2 -0
  50. package/dist/src/backends/harbor/tools.js.map +1 -1
  51. package/dist/src/backends/index.js +3 -0
  52. package/dist/src/backends/index.js.map +1 -1
  53. package/dist/src/cli/arguments.js +33 -0
  54. package/dist/src/cli/arguments.js.map +1 -1
  55. package/dist/src/cli/commands/capabilities.js +14 -1
  56. package/dist/src/cli/commands/capabilities.js.map +1 -1
  57. package/dist/src/cli/commands/daemon.js +19 -0
  58. package/dist/src/cli/commands/daemon.js.map +1 -1
  59. package/dist/src/cli/commands/eval.js +38 -10
  60. package/dist/src/cli/commands/eval.js.map +1 -1
  61. package/dist/src/cli/commands/local.js +130 -0
  62. package/dist/src/cli/commands/local.js.map +1 -0
  63. package/dist/src/cli/commands/model-node.js +26 -0
  64. package/dist/src/cli/commands/model-node.js.map +1 -0
  65. package/dist/src/cli/commands/models.js +72 -0
  66. package/dist/src/cli/commands/models.js.map +1 -0
  67. package/dist/src/cli/commands/run.js +36 -1
  68. package/dist/src/cli/commands/run.js.map +1 -1
  69. package/dist/src/cli/commands/training.js +32 -0
  70. package/dist/src/cli/commands/training.js.map +1 -0
  71. package/dist/src/cli/commands/worker.js +30 -2
  72. package/dist/src/cli/commands/worker.js.map +1 -1
  73. package/dist/src/cli/main.js +8 -0
  74. package/dist/src/cli/main.js.map +1 -1
  75. package/dist/src/cli/output.js +24 -2
  76. package/dist/src/cli/output.js.map +1 -1
  77. package/dist/src/control-plane/eval-records.js +2 -0
  78. package/dist/src/control-plane/eval-records.js.map +1 -1
  79. package/dist/src/control-plane/eval-recovery.js +7 -1
  80. package/dist/src/control-plane/eval-recovery.js.map +1 -1
  81. package/dist/src/control-plane/eval-scheduler.js +24 -50
  82. package/dist/src/control-plane/eval-scheduler.js.map +1 -1
  83. package/dist/src/control-plane/eval-submission-persist.js +30 -0
  84. package/dist/src/control-plane/eval-submission-persist.js.map +1 -0
  85. package/dist/src/control-plane/execution-observation-contract.js +60 -0
  86. package/dist/src/control-plane/execution-observation-contract.js.map +1 -0
  87. package/dist/src/control-plane/index.js +10 -0
  88. package/dist/src/control-plane/index.js.map +1 -1
  89. package/dist/src/control-plane/inference-manager.js +357 -0
  90. package/dist/src/control-plane/inference-manager.js.map +1 -0
  91. package/dist/src/control-plane/managed-gateway-receipt.js +26 -0
  92. package/dist/src/control-plane/managed-gateway-receipt.js.map +1 -0
  93. package/dist/src/control-plane/managed-service-recovery.js +158 -0
  94. package/dist/src/control-plane/managed-service-recovery.js.map +1 -0
  95. package/dist/src/control-plane/model-capture-planning.js +15 -1
  96. package/dist/src/control-plane/model-capture-planning.js.map +1 -1
  97. package/dist/src/control-plane/ordered-eval-control.js +221 -0
  98. package/dist/src/control-plane/ordered-eval-control.js.map +1 -0
  99. package/dist/src/control-plane/remote-backend-result.js +18 -0
  100. package/dist/src/control-plane/remote-backend-result.js.map +1 -0
  101. package/dist/src/control-plane/remote-execution-lease.js +15 -0
  102. package/dist/src/control-plane/remote-execution-lease.js.map +1 -0
  103. package/dist/src/control-plane/remote-execution-observation.js +108 -0
  104. package/dist/src/control-plane/remote-execution-observation.js.map +1 -0
  105. package/dist/src/control-plane/remote-model-routes.js +107 -0
  106. package/dist/src/control-plane/remote-model-routes.js.map +1 -0
  107. package/dist/src/control-plane/remote-observation-reporter.js +37 -0
  108. package/dist/src/control-plane/remote-observation-reporter.js.map +1 -0
  109. package/dist/src/control-plane/remote-offer-contract.js +48 -0
  110. package/dist/src/control-plane/remote-offer-contract.js.map +1 -0
  111. package/dist/src/control-plane/remote-rerun-journal.js +61 -0
  112. package/dist/src/control-plane/remote-rerun-journal.js.map +1 -0
  113. package/dist/src/control-plane/remote-result-transport.js +55 -9
  114. package/dist/src/control-plane/remote-result-transport.js.map +1 -1
  115. package/dist/src/control-plane/remote-verifier-import.js +52 -0
  116. package/dist/src/control-plane/remote-verifier-import.js.map +1 -0
  117. package/dist/src/control-plane/remote-verifier-result.js +61 -0
  118. package/dist/src/control-plane/remote-verifier-result.js.map +1 -0
  119. package/dist/src/control-plane/remote-verifier-source-transport.js +68 -0
  120. package/dist/src/control-plane/remote-verifier-source-transport.js.map +1 -0
  121. package/dist/src/control-plane/remote-work-coordinator.js +103 -47
  122. package/dist/src/control-plane/remote-work-coordinator.js.map +1 -1
  123. package/dist/src/control-plane/remote-work-inputs.js +26 -5
  124. package/dist/src/control-plane/remote-work-inputs.js.map +1 -1
  125. package/dist/src/control-plane/remote-work-recovery.js +123 -34
  126. package/dist/src/control-plane/remote-work-recovery.js.map +1 -1
  127. package/dist/src/control-plane/remote-worker-artifacts.js +10 -7
  128. package/dist/src/control-plane/remote-worker-artifacts.js.map +1 -1
  129. package/dist/src/control-plane/remote-worker-cleanup.js +104 -0
  130. package/dist/src/control-plane/remote-worker-cleanup.js.map +1 -0
  131. package/dist/src/control-plane/remote-worker-client.js +156 -14
  132. package/dist/src/control-plane/remote-worker-client.js.map +1 -1
  133. package/dist/src/control-plane/remote-worker-codecs.js +160 -0
  134. package/dist/src/control-plane/remote-worker-codecs.js.map +1 -0
  135. package/dist/src/control-plane/remote-worker-generation-recovery.js +67 -0
  136. package/dist/src/control-plane/remote-worker-generation-recovery.js.map +1 -0
  137. package/dist/src/control-plane/remote-worker-ownership.js +51 -0
  138. package/dist/src/control-plane/remote-worker-ownership.js.map +1 -0
  139. package/dist/src/control-plane/remote-worker-protocol.js +85 -119
  140. package/dist/src/control-plane/remote-worker-protocol.js.map +1 -1
  141. package/dist/src/control-plane/remote-worker-runner.js +95 -18
  142. package/dist/src/control-plane/remote-worker-runner.js.map +1 -1
  143. package/dist/src/control-plane/remote-workers.js +33 -5
  144. package/dist/src/control-plane/remote-workers.js.map +1 -1
  145. package/dist/src/control-plane/rerun-recovery.js +89 -0
  146. package/dist/src/control-plane/rerun-recovery.js.map +1 -0
  147. package/dist/src/control-plane/rerun-scheduler.js +70 -96
  148. package/dist/src/control-plane/rerun-scheduler.js.map +1 -1
  149. package/dist/src/control-plane/rerun-source.js +57 -0
  150. package/dist/src/control-plane/rerun-source.js.map +1 -0
  151. package/dist/src/control-plane/worker-model-relay.js +76 -0
  152. package/dist/src/control-plane/worker-model-relay.js.map +1 -0
  153. package/dist/src/controller-runtime/hash.js +3 -0
  154. package/dist/src/controller-runtime/hash.js.map +1 -1
  155. package/dist/src/controller-runtime/index.js +2 -0
  156. package/dist/src/controller-runtime/index.js.map +1 -1
  157. package/dist/src/controller-runtime/observation.js +29 -0
  158. package/dist/src/controller-runtime/observation.js.map +1 -0
  159. package/dist/src/controller-runtime/resident.js +22 -0
  160. package/dist/src/controller-runtime/resident.js.map +1 -0
  161. package/dist/src/daemon/client.js +34 -1
  162. package/dist/src/daemon/client.js.map +1 -1
  163. package/dist/src/daemon/execution-observation.js +38 -0
  164. package/dist/src/daemon/execution-observation.js.map +1 -0
  165. package/dist/src/daemon/http.js +57 -0
  166. package/dist/src/daemon/http.js.map +1 -0
  167. package/dist/src/daemon/inference-prepare.js +47 -0
  168. package/dist/src/daemon/inference-prepare.js.map +1 -0
  169. package/dist/src/daemon/scheduler.js +4 -1
  170. package/dist/src/daemon/scheduler.js.map +1 -1
  171. package/dist/src/daemon/server.js +80 -82
  172. package/dist/src/daemon/server.js.map +1 -1
  173. package/dist/src/daemon/worker-observation.js +34 -0
  174. package/dist/src/daemon/worker-observation.js.map +1 -0
  175. package/dist/src/daemon/worker-ownership.js +71 -0
  176. package/dist/src/daemon/worker-ownership.js.map +1 -0
  177. package/dist/src/daemon/worker-routes.js +83 -15
  178. package/dist/src/daemon/worker-routes.js.map +1 -1
  179. package/dist/src/domain/execution-observation.js +2 -0
  180. package/dist/src/domain/execution-observation.js.map +1 -0
  181. package/dist/src/domain/index.js +1 -0
  182. package/dist/src/domain/index.js.map +1 -1
  183. package/dist/src/domain/inference.js +2 -0
  184. package/dist/src/domain/inference.js.map +1 -0
  185. package/dist/src/domain/runs.js.map +1 -1
  186. package/dist/src/domain/training.js +2 -0
  187. package/dist/src/domain/training.js.map +1 -0
  188. package/dist/src/domain/validation.js +11 -0
  189. package/dist/src/domain/validation.js.map +1 -1
  190. package/dist/src/domain/verifier-source.js +2 -0
  191. package/dist/src/domain/verifier-source.js.map +1 -0
  192. package/dist/src/domain/worker-recovery.js +2 -0
  193. package/dist/src/domain/worker-recovery.js.map +1 -0
  194. package/dist/src/evals/eval-logical-plan.js +8 -1
  195. package/dist/src/evals/eval-logical-plan.js.map +1 -1
  196. package/dist/src/evals/execution-leases.js +15 -2
  197. package/dist/src/evals/execution-leases.js.map +1 -1
  198. package/dist/src/evals/execution-plan.js +11 -1
  199. package/dist/src/evals/execution-plan.js.map +1 -1
  200. package/dist/src/evals/harbor-bridge-error.js +8 -0
  201. package/dist/src/evals/harbor-bridge-error.js.map +1 -1
  202. package/dist/src/evals/index.js +19 -0
  203. package/dist/src/evals/index.js.map +1 -1
  204. package/dist/src/evals/model-capture-plan.js +12 -0
  205. package/dist/src/evals/model-capture-plan.js.map +1 -1
  206. package/dist/src/evals/model-capture-runtime.js +25 -0
  207. package/dist/src/evals/model-capture-runtime.js.map +1 -1
  208. package/dist/src/evals/physical-work-plan.js +57 -0
  209. package/dist/src/evals/physical-work-plan.js.map +1 -0
  210. package/dist/src/evals/preparation-rerun.js +6 -0
  211. package/dist/src/evals/preparation-rerun.js.map +1 -1
  212. package/dist/src/evals/recovery.js +8 -1
  213. package/dist/src/evals/recovery.js.map +1 -1
  214. package/dist/src/evals/regrade-evidence.js +4 -4
  215. package/dist/src/evals/regrade-evidence.js.map +1 -1
  216. package/dist/src/evals/remote-execution-ownership.js +50 -0
  217. package/dist/src/evals/remote-execution-ownership.js.map +1 -0
  218. package/dist/src/evals/remote-infrastructure-retry.js +2 -0
  219. package/dist/src/evals/remote-infrastructure-retry.js.map +1 -1
  220. package/dist/src/evals/remote-lease-release.js +58 -0
  221. package/dist/src/evals/remote-lease-release.js.map +1 -0
  222. package/dist/src/evals/remote-rerun-execution.js +85 -0
  223. package/dist/src/evals/remote-rerun-execution.js.map +1 -0
  224. package/dist/src/evals/remote-trial.js +6 -0
  225. package/dist/src/evals/remote-trial.js.map +1 -0
  226. package/dist/src/evals/remote-verifier-assessment.js +85 -0
  227. package/dist/src/evals/remote-verifier-assessment.js.map +1 -0
  228. package/dist/src/evals/remote-verifier-contract.js +43 -0
  229. package/dist/src/evals/remote-verifier-contract.js.map +1 -0
  230. package/dist/src/evals/remote-verifier-execution.js +105 -0
  231. package/dist/src/evals/remote-verifier-execution.js.map +1 -0
  232. package/dist/src/evals/remote-verifier-journal.js +21 -0
  233. package/dist/src/evals/remote-verifier-journal.js.map +1 -0
  234. package/dist/src/evals/remote-verifier-outcome.js +51 -0
  235. package/dist/src/evals/remote-verifier-outcome.js.map +1 -0
  236. package/dist/src/evals/remote-verifier-rerun.js +134 -0
  237. package/dist/src/evals/remote-verifier-rerun.js.map +1 -0
  238. package/dist/src/evals/remote-verifier-selection.js +61 -0
  239. package/dist/src/evals/remote-verifier-selection.js.map +1 -0
  240. package/dist/src/evals/remote-verifier-source.js +33 -0
  241. package/dist/src/evals/remote-verifier-source.js.map +1 -0
  242. package/dist/src/evals/remote-worker-cleanup.js +46 -0
  243. package/dist/src/evals/remote-worker-cleanup.js.map +1 -0
  244. package/dist/src/evals/request.js +58 -1
  245. package/dist/src/evals/request.js.map +1 -1
  246. package/dist/src/evals/rerun-completion.js +39 -0
  247. package/dist/src/evals/rerun-completion.js.map +1 -0
  248. package/dist/src/evals/rerun-resume.js +70 -0
  249. package/dist/src/evals/rerun-resume.js.map +1 -0
  250. package/dist/src/evals/rerun-state.js +25 -0
  251. package/dist/src/evals/rerun-state.js.map +1 -0
  252. package/dist/src/evals/rerun-types.js.map +1 -1
  253. package/dist/src/evals/rerun.js +90 -46
  254. package/dist/src/evals/rerun.js.map +1 -1
  255. package/dist/src/evals/service.js +59 -5
  256. package/dist/src/evals/service.js.map +1 -1
  257. package/dist/src/evals/verifier-only-rerun.js +2 -16
  258. package/dist/src/evals/verifier-only-rerun.js.map +1 -1
  259. package/dist/src/evals/verifier-rerun-result.js +24 -0
  260. package/dist/src/evals/verifier-rerun-result.js.map +1 -0
  261. package/dist/src/evals/verifier-source-import.js +48 -0
  262. package/dist/src/evals/verifier-source-import.js.map +1 -0
  263. package/dist/src/evals/verifier-source.js +139 -0
  264. package/dist/src/evals/verifier-source.js.map +1 -0
  265. package/dist/src/foundation/base64.js +19 -0
  266. package/dist/src/foundation/base64.js.map +1 -0
  267. package/dist/src/foundation/config.js +10 -0
  268. package/dist/src/foundation/config.js.map +1 -1
  269. package/dist/src/foundation/credential-redaction.js +22 -9
  270. package/dist/src/foundation/credential-redaction.js.map +1 -1
  271. package/dist/src/foundation/index.js +1 -0
  272. package/dist/src/foundation/index.js.map +1 -1
  273. package/dist/src/foundation/process-identity.js +13 -9
  274. package/dist/src/foundation/process-identity.js.map +1 -1
  275. package/dist/src/inference/daemon-capacity.js +41 -0
  276. package/dist/src/inference/daemon-capacity.js.map +1 -0
  277. package/dist/src/inference/device-reservation.js +58 -0
  278. package/dist/src/inference/device-reservation.js.map +1 -0
  279. package/dist/src/inference/doctor.js +95 -0
  280. package/dist/src/inference/doctor.js.map +1 -0
  281. package/dist/src/inference/generation-recovery.js +83 -0
  282. package/dist/src/inference/generation-recovery.js.map +1 -0
  283. package/dist/src/inference/index.js +24 -0
  284. package/dist/src/inference/index.js.map +1 -0
  285. package/dist/src/inference/lock.js +331 -0
  286. package/dist/src/inference/lock.js.map +1 -0
  287. package/dist/src/inference/managed-launcher.js +35 -0
  288. package/dist/src/inference/managed-launcher.js.map +1 -0
  289. package/dist/src/inference/manifest.js +262 -0
  290. package/dist/src/inference/manifest.js.map +1 -0
  291. package/dist/src/inference/materialize.js +66 -0
  292. package/dist/src/inference/materialize.js.map +1 -0
  293. package/dist/src/inference/model-location.js +34 -0
  294. package/dist/src/inference/model-location.js.map +1 -0
  295. package/dist/src/inference/model-store.js +439 -0
  296. package/dist/src/inference/model-store.js.map +1 -0
  297. package/dist/src/inference/node-client.js +167 -0
  298. package/dist/src/inference/node-client.js.map +1 -0
  299. package/dist/src/inference/node-registry.js +79 -0
  300. package/dist/src/inference/node-registry.js.map +1 -0
  301. package/dist/src/inference/observation.js +79 -0
  302. package/dist/src/inference/observation.js.map +1 -0
  303. package/dist/src/inference/preflight.js +132 -0
  304. package/dist/src/inference/preflight.js.map +1 -0
  305. package/dist/src/inference/process-sglang.js +169 -0
  306. package/dist/src/inference/process-sglang.js.map +1 -0
  307. package/dist/src/inference/protocol-probe.js +29 -0
  308. package/dist/src/inference/protocol-probe.js.map +1 -0
  309. package/dist/src/inference/remote-model-store.js +24 -0
  310. package/dist/src/inference/remote-model-store.js.map +1 -0
  311. package/dist/src/inference/runtime-catalog.js +41 -0
  312. package/dist/src/inference/runtime-catalog.js.map +1 -0
  313. package/dist/src/inference/runtime-store.js +93 -0
  314. package/dist/src/inference/runtime-store.js.map +1 -0
  315. package/dist/src/inference/service-attachment.js +46 -0
  316. package/dist/src/inference/service-attachment.js.map +1 -0
  317. package/dist/src/inference/service-inspection.js +38 -0
  318. package/dist/src/inference/service-inspection.js.map +1 -0
  319. package/dist/src/inference/sglang.js +279 -0
  320. package/dist/src/inference/sglang.js.map +1 -0
  321. package/dist/src/inference/supervisor.js +460 -0
  322. package/dist/src/inference/supervisor.js.map +1 -0
  323. package/dist/src/model-access/environment.js +28 -0
  324. package/dist/src/model-access/environment.js.map +1 -0
  325. package/dist/src/model-access/index.js +4 -0
  326. package/dist/src/model-access/index.js.map +1 -1
  327. package/dist/src/model-access/local-gateway-request.js +139 -0
  328. package/dist/src/model-access/local-gateway-request.js.map +1 -0
  329. package/dist/src/model-access/local-gateway.js +323 -0
  330. package/dist/src/model-access/local-gateway.js.map +1 -0
  331. package/dist/src/model-access/proxy.js +90 -5
  332. package/dist/src/model-access/proxy.js.map +1 -1
  333. package/dist/src/model-access/remote-model.js +58 -0
  334. package/dist/src/model-access/remote-model.js.map +1 -0
  335. package/dist/src/model-access/training.js +115 -0
  336. package/dist/src/model-access/training.js.map +1 -0
  337. package/dist/src/runs/adapter-process.js +2 -2
  338. package/dist/src/runs/adapter-process.js.map +1 -1
  339. package/dist/src/runs/executor-types.js +2 -0
  340. package/dist/src/runs/executor-types.js.map +1 -0
  341. package/dist/src/runs/executor.js +54 -34
  342. package/dist/src/runs/executor.js.map +1 -1
  343. package/dist/src/runs/index.js +1 -0
  344. package/dist/src/runs/index.js.map +1 -1
  345. package/dist/src/runs/local-inference-environment.js +59 -0
  346. package/dist/src/runs/local-inference-environment.js.map +1 -0
  347. package/dist/src/runs/local-inference-run.js +53 -0
  348. package/dist/src/runs/local-inference-run.js.map +1 -0
  349. package/dist/src/runs/outcome.js +22 -0
  350. package/dist/src/runs/outcome.js.map +1 -1
  351. package/dist/src/runs/records.js +9 -0
  352. package/dist/src/runs/records.js.map +1 -1
  353. package/dist/src/runs/request.js +58 -3
  354. package/dist/src/runs/request.js.map +1 -1
  355. package/dist/src/runs/training-evidence.js +22 -0
  356. package/dist/src/runs/training-evidence.js.map +1 -0
  357. package/dist/src/runs/training-runtime.js +20 -0
  358. package/dist/src/runs/training-runtime.js.map +1 -0
  359. package/dist/src/workers/execution-observation.js +32 -0
  360. package/dist/src/workers/execution-observation.js.map +1 -0
  361. package/dist/src/workers/index.js +2 -0
  362. package/dist/src/workers/index.js.map +1 -1
  363. package/dist/src/workers/remote-harbor-ownership.js +266 -0
  364. package/dist/src/workers/remote-harbor-ownership.js.map +1 -0
  365. package/dist/src/workers/remote-harbor-verifier.js +76 -0
  366. package/dist/src/workers/remote-harbor-verifier.js.map +1 -0
  367. package/dist/src/workers/remote-harbor-work-spec.js +66 -10
  368. package/dist/src/workers/remote-harbor-work-spec.js.map +1 -1
  369. package/dist/src/workers/remote-harbor-worker.js +56 -49
  370. package/dist/src/workers/remote-harbor-worker.js.map +1 -1
  371. package/dist/src/workers/remote-worker-host.js +33 -0
  372. package/dist/src/workers/remote-worker-host.js.map +1 -0
  373. package/docs/local-model-inference-spec.zh-CN.md +666 -0
  374. package/docs/schemas/controller-runtime-observation.schema.json +21 -0
  375. package/docs/schemas/eval-execution-plan.schema.json +1 -0
  376. package/docs/schemas/eval-request.schema.json +3 -1
  377. package/docs/schemas/execution-lease.schema.json +95 -1
  378. package/docs/schemas/execution-provider-status.schema.json +162 -28
  379. package/docs/schemas/inference-execution-evidence.schema.json +487 -0
  380. package/docs/schemas/inference-lock.schema.json +487 -0
  381. package/docs/schemas/inference-runtime-manifest.schema.json +156 -0
  382. package/docs/schemas/inference-service-record.schema.json +227 -0
  383. package/docs/schemas/local-inference-selection.schema.json +98 -0
  384. package/docs/schemas/local-model-manifest.schema.json +43 -0
  385. package/docs/schemas/model-node-binding.schema.json +34 -0
  386. package/docs/schemas/model-node-generation-release.schema.json +46 -0
  387. package/docs/schemas/ordered-eval-control.schema.json +39 -0
  388. package/docs/schemas/remote-execution-lease-grant.schema.json +45 -0
  389. package/docs/schemas/remote-harbor-work-spec.schema.json +325 -0
  390. package/docs/schemas/remote-model-binding.schema.json +21 -0
  391. package/docs/schemas/remote-physical-execution.schema.json +108 -0
  392. package/docs/schemas/remote-result-envelope.schema.json +9 -3
  393. package/docs/schemas/remote-tree-envelope.schema.json +17 -3
  394. package/docs/schemas/remote-verifier-result.schema.json +203 -0
  395. package/docs/schemas/remote-verifier-source.schema.json +52 -0
  396. package/docs/schemas/remote-verifier-work.schema.json +125 -0
  397. package/docs/schemas/remote-work-offer.schema.json +170 -34
  398. package/docs/schemas/remote-worker-execution-admission.schema.json +214 -0
  399. package/docs/schemas/remote-worker-generation-cleanup.schema.json +199 -0
  400. package/docs/schemas/remote-worker-registration.schema.json +226 -25
  401. package/docs/schemas/run-manifest.schema.json +211 -44
  402. package/docs/schemas/run-request.schema.json +2 -1
  403. package/docs/schemas/training-external-binding.schema.json +26 -0
  404. package/integrations/harbor/hitch_harbor_agent.py +241 -13
  405. package/integrations/harbor/hitch_harbor_environment.py +22 -1
  406. package/integrations/harbor/hitch_host_credentials.py +354 -0
  407. package/integrations/harbor/hitch_private_exec.py +150 -0
  408. package/integrations/model-call/cli.js +13 -5
  409. package/integrations/training-tool/cli.js +72 -0
  410. package/package.json +8 -2
@@ -0,0 +1,48 @@
1
+ import { assertPhysicalWork, assertRemoteVerifierWork, parseEvalExecutionPlan, parsePhysicalExecution } from "../evals/index.js";
2
+ import { HitchError, readJSON, sha256JSON } from "../foundation/index.js";
3
+ import { remoteModelBinding } from "./remote-model-routes.js";
4
+ export async function validateRemoteOfferContract(offer, features, inputs, target) {
5
+ const ref = offer.inputs?.find(input => input.kind === "work-spec");
6
+ if (!ref) {
7
+ if (target)
8
+ throw rejected("remote model needs a sealed work spec");
9
+ return;
10
+ }
11
+ const spec = await readJSON((await inputs.verify(ref)).path);
12
+ const physical = spec.physical_execution === undefined ? undefined : parsePhysicalExecution(spec.physical_execution);
13
+ if (spec.physical_execution !== undefined) {
14
+ if (spec.schema_version !== "2" || features.physical_work !== "2")
15
+ throw rejected("remote worker lacks physical_work v2");
16
+ assertPhysicalWork(parseEvalExecutionPlan(spec.plan), offer.work, physical);
17
+ if (sha256JSON(spec.work) !== sha256JSON(offer.work))
18
+ throw rejected("remote physical work differs from the sealed spec");
19
+ }
20
+ if ((physical?.kind === "verifier-only") !== (spec.verifier_only !== undefined))
21
+ throw rejected("verifier-only has no matching source descriptor and physical identity");
22
+ if (spec.verifier_only !== undefined) {
23
+ if (features.verifier_only !== "2" || !features.docker)
24
+ throw rejected("remote worker lacks verifier_only v2");
25
+ const runtime = spec.controller_runtime;
26
+ assertRemoteVerifierWork({ verifier: spec.verifier_only, plan: parseEvalExecutionPlan(spec.plan), work: offer.work,
27
+ physical, runtimeId: typeof runtime?.runtime_id === "string" ? runtime.runtime_id : "" });
28
+ if (target || spec.model_binding !== undefined || spec.verifier_source !== undefined || offer.credential_names?.length
29
+ || !Array.isArray(spec.credential_names) || spec.credential_names.length)
30
+ throw rejected("remote verifier-only must not acquire model access");
31
+ const kinds = ["work-spec", "harness-artifact", "controller-runtime", "task-input", "verifier-source", "verifier-runtime"];
32
+ if (offer.inputs?.length !== kinds.length || kinds.some(kind => offer.inputs.filter(item => item.kind === kind).length !== 1)
33
+ || offer.inputs.some(item => item.format !== (item.kind === "work-spec" ? "json" : "hitch-tree-v1")))
34
+ throw rejected("remote verifier-only inputs are incomplete or ambiguous");
35
+ }
36
+ if (target) {
37
+ const binding = remoteModelBinding(target);
38
+ const feature = binding.kind === "training-external" ? "training_external_binding" : "managed_model_node";
39
+ if (features[feature] !== "2" || !features.model_proxy)
40
+ throw rejected(`remote worker lacks ${feature} v2`);
41
+ if (spec.schema_version !== "2" || sha256JSON(spec.model_binding) !== sha256JSON(binding))
42
+ throw rejected("remote model target differs from the sealed work spec");
43
+ }
44
+ else if (spec.model_binding !== undefined)
45
+ throw rejected("remote model work has no controller-owned target");
46
+ }
47
+ function rejected(message) { return new HitchError(message, { code: "worker_protocol_invalid", exitCode: 2 }); }
48
+ //# sourceMappingURL=remote-offer-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-offer-contract.js","sourceRoot":"","sources":["../../../src/control-plane/remote-offer-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import path from "node:path";
2
+ import { assertPhysicalWork, parsePhysicalExecution, parseRemoteVerifierWork, remoteVerifierWorkIdentity } from "../evals/index.js";
3
+ import { HitchError, atomicWriteJSON, readJSON, sha256JSON } from "../foundation/index.js";
4
+ import { RemoteWorkInputStore } from "./remote-work-inputs.js";
5
+ export async function remoteRerunSpec(root, offer) {
6
+ const ref = offer.inputs?.find(input => input.kind === "work-spec");
7
+ if (!ref)
8
+ return null;
9
+ const spec = await readJSON((await new RemoteWorkInputStore(root).verify(ref)).path);
10
+ if (!spec.physical_execution)
11
+ return null;
12
+ return parsePhysicalExecution(spec.physical_execution).kind !== "physical-infrastructure-retry" ? spec : null;
13
+ }
14
+ export async function loadRemoteRerunJournal(input) {
15
+ const spec = await remoteRerunSpec(input.root, input.offer);
16
+ if (!spec)
17
+ return null;
18
+ const physical = parsePhysicalExecution(spec.physical_execution);
19
+ if (physical.kind === "physical-infrastructure-retry")
20
+ return null;
21
+ assertPhysicalWork(input.plan, input.offer.work, physical);
22
+ if (spec.schema_version !== "2" || sha256JSON(spec.plan) !== sha256JSON(input.plan)
23
+ || sha256JSON(spec.work) !== sha256JSON(input.offer.work)
24
+ || sha256JSON(spec.request) !== sha256JSON({ ...input.request, dataset: "task-input" }))
25
+ throw ambiguous("remote rerun sealed inputs differ from its frozen source");
26
+ const verifier = physical.kind === "verifier-only" ? parseRemoteVerifierWork(spec.verifier_only) : undefined;
27
+ const identity = verifier ? remoteVerifierWorkIdentity({ ...input, verifier, physical, work: input.offer.work })
28
+ : { schema_version: "1", rerun_id: physical.rerun_id, source_work_id: physical.source_work_id,
29
+ work_id: input.offer.work.work_id, plan_digest: sha256JSON(input.plan), request_digest: sha256JSON(input.request) };
30
+ const file = path.join(input.evalDirectory, "reruns", physical.rerun_id, "remote-work", `${input.offer.work.work_id}.json`);
31
+ const record = await readJSON(file, null);
32
+ if (!record || sha256JSON(record.identity) !== sha256JSON(identity)
33
+ || !["dispatching", "running", "terminal", "not-started", "collected", "completed"].includes(record.state)
34
+ || record.lease_id !== undefined && record.lease_id !== input.offer.lease.lease_id
35
+ || record.result !== undefined && record.result.leaseId !== input.offer.lease.lease_id)
36
+ throw ambiguous("remote rerun journal has no matching durable dispatch identity");
37
+ return { file, identity, record, physical, ...(verifier ? { verifier } : {}) };
38
+ }
39
+ export async function withdrawRemoteRerunJournal(journal, leaseId) {
40
+ if (journal.record.result)
41
+ throw ambiguous("a collected remote rerun cannot become unstarted");
42
+ await atomicWriteJSON(journal.file, { identity: journal.identity, state: "not-started", lease_id: leaseId });
43
+ }
44
+ export async function collectRemoteRerunJournal(journal, result) {
45
+ if (journal.record.result) {
46
+ if (sha256JSON(journal.record.result) !== sha256JSON(result))
47
+ throw ambiguous("remote rerun changed its collected result");
48
+ if (["collected", "completed"].includes(journal.record.state))
49
+ return;
50
+ }
51
+ await atomicWriteJSON(journal.file, { identity: journal.identity, state: "collected", lease_id: result.leaseId, result });
52
+ }
53
+ export async function completeRemoteRerunJournal(journal, leaseId) {
54
+ const current = await readJSON(journal.file);
55
+ if (sha256JSON(current.identity) !== sha256JSON(journal.identity) || !["collected", "completed"].includes(current.state)
56
+ || current.result?.leaseId !== leaseId)
57
+ throw ambiguous("remote rerun has no collected result for its released lease");
58
+ await atomicWriteJSON(journal.file, { ...current, state: "completed" });
59
+ }
60
+ function ambiguous(message) { return new HitchError(message, { code: "execution_state_ambiguous", exitCode: 12 }); }
61
+ //# sourceMappingURL=remote-rerun-journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-rerun-journal.js","sourceRoot":"","sources":["../../../src/control-plane/remote-rerun-journal.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,28 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { lstat, mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
3
3
  import path from "node:path";
4
- import { HitchError, atomicWriteJSON, ensureDir, readJSON } from "../foundation/index.js";
5
- import { importEvalTrialRun, parseExecutionEvidence } from "../evals/index.js";
4
+ import { HitchError, atomicWriteJSON, ensureDir, isBase64, readJSON, sha256JSON } from "../foundation/index.js";
5
+ import { parseRemoteModelBinding, trainingProxyIdentity } from "../model-access/index.js";
6
+ import { importEvalTrialRun, parseExecutionEvidence, portableRemoteTrial } from "../evals/index.js";
7
+ import { encodeVerifierSource, importVerifierSource, parseVerifierSource } from "./remote-verifier-source-transport.js";
6
8
  const MAX_ENVELOPE_BYTES = 128 * 1024 * 1024;
7
9
  const MAX_FILES = 100_000;
8
10
  export async function encodeRemoteResultEnvelope(input) {
9
11
  validateTransportIdentity(input);
10
12
  const files = await encodeTree(input.bundleDirectory);
13
+ const source = input.verifierSource ? await encodeVerifierSource(input.verifierSource) : undefined;
11
14
  const envelope = {
12
- schema_version: "1", eval_id: input.evalId, work_id: input.workId,
13
- lease_id: input.leaseId, lease_epoch: input.leaseEpoch, trial: input.trial, files,
15
+ ...(source ? { schema_version: "2", verifier_source: source } : { schema_version: "1" }), eval_id: input.evalId, work_id: input.workId,
16
+ lease_id: input.leaseId, lease_epoch: input.leaseEpoch, trial: portableRemoteTrial(input.trial), files,
14
17
  };
15
- const encoded = Buffer.from(`${JSON.stringify(envelope)}\n`);
18
+ let encoded = Buffer.from(`${JSON.stringify(envelope)}\n`);
19
+ if (encoded.length > MAX_ENVELOPE_BYTES && envelope.schema_version === "2" && envelope.verifier_source.manifest.status === "available") {
20
+ const m = envelope.verifier_source.manifest;
21
+ envelope.verifier_source = { manifest: { schema_version: "2", task_id: m.task_id, trial_id: m.trial_id, run_id: m.run_id,
22
+ controller_runtime_id: m.controller_runtime_id, source_result_digest: m.source_result_digest,
23
+ ...(m.original_result_digest ? { original_result_digest: m.original_result_digest } : {}), status: "unavailable", reason: "source-too-large" } };
24
+ encoded = Buffer.from(`${JSON.stringify(envelope)}\n`);
25
+ }
16
26
  if (encoded.length > MAX_ENVELOPE_BYTES)
17
27
  throw transportError("remote result envelope exceeds its size limit");
18
28
  return encoded;
@@ -22,6 +32,8 @@ export async function importRemoteResultEnvelope(input) {
22
32
  if (!info.isFile() || info.isSymbolicLink() || info.nlink !== 1 || info.size > MAX_ENVELOPE_BYTES)
23
33
  throw transportError("remote result artifact is not a safe bounded file");
24
34
  const envelope = parseRemoteResultEnvelope(JSON.parse(await readFile(input.artifactPath, "utf8")));
35
+ if ((envelope.schema_version === "2") !== (input.verifierSourceExpected === true))
36
+ throw transportError("remote verifier source result does not match its negotiated work spec");
25
37
  assertEnvelopeIdentity(envelope, input.work, input.lease);
26
38
  const trialId = safeTrialId(envelope.trial.trial_name);
27
39
  if (envelope.trial.task_name !== input.work.task_ids[0])
@@ -34,6 +46,31 @@ export async function importRemoteResultEnvelope(input) {
34
46
  await rm(backendDirectory, { recursive: true, force: true });
35
47
  try {
36
48
  await materializeEnvelope(envelope, bundleDirectory);
49
+ if (input.request.training_binding || input.request.local_inference || input.modelProof) {
50
+ if (!input.modelProof)
51
+ throw transportError("remote bound result has no controller model/run proof");
52
+ const binding = parseRemoteModelBinding(input.modelProof.binding);
53
+ const manifest = await readJSON(path.join(bundleDirectory, "manifest.json"));
54
+ if (manifest.run_id !== input.modelProof.runId)
55
+ throw transportError("remote result canonical run differs from its model lease");
56
+ if (binding.kind === "training-external") {
57
+ if (!input.request.training_binding || input.request.local_inference
58
+ || sha256JSON(binding.training) !== sha256JSON(input.request.training_binding)
59
+ || sha256JSON(manifest.training_external ?? null) !== sha256JSON(trainingProxyIdentity(binding.training))) {
60
+ throw transportError("remote result training identity differs from its model lease");
61
+ }
62
+ }
63
+ else {
64
+ const model = manifest.model;
65
+ if (!input.request.local_inference || input.request.training_binding || manifest.training_external
66
+ || input.request.local_inference.inference_id !== binding.inference_id
67
+ || sha256JSON(input.request.local_inference.model_node ?? null) !== sha256JSON(binding.model_node)
68
+ || model?.inference_id !== binding.inference_id || model?.effective_id !== binding.model_id
69
+ || model?.identity_resolved !== true || sha256JSON(model?.model_node ?? null) !== sha256JSON(binding.model_node)) {
70
+ throw transportError("remote result managed model identity differs from its model lease");
71
+ }
72
+ }
73
+ }
37
74
  const execution = parseExecutionEvidence(await readJSON(path.join(bundleDirectory, "execution.json")));
38
75
  if (execution.provider !== input.lease.provider || execution.worker_id !== input.lease.worker_id
39
76
  || execution.collision_domain_id !== input.lease.collision_domain_id || execution.eval_id !== input.lease.eval_id
@@ -42,6 +79,9 @@ export async function importRemoteResultEnvelope(input) {
42
79
  || JSON.stringify(execution.reservation) !== JSON.stringify(input.work.reservation)) {
43
80
  throw transportError("remote result execution evidence does not match its lease");
44
81
  }
82
+ const sealVerifierSource = envelope.schema_version === "2" ? await importVerifierSource({ source: envelope.verifier_source, trial: envelope.trial,
83
+ trialDirectory, bundleDirectory, taskId: input.work.task_ids[0], taskDirectory: path.join(input.request.dataset, input.work.task_ids[0]),
84
+ ...(input.runtimeId ? { runtimeId: input.runtimeId } : {}) }) : undefined;
45
85
  await writeTransportCompletionMarker(bundleDirectory, envelope, trialId);
46
86
  const ref = await importEvalTrialRun({
47
87
  root: input.root,
@@ -61,6 +101,11 @@ export async function importRemoteResultEnvelope(input) {
61
101
  ...(input.signal ? { signal: input.signal } : {}),
62
102
  requireCompleteMarker: true,
63
103
  }, envelope.trial);
104
+ if (sealVerifierSource) {
105
+ if (!ref.run_id)
106
+ throw transportError("verifier source publication has no canonical run");
107
+ await sealVerifierSource({ root: input.root, runId: ref.run_id });
108
+ }
64
109
  return { ref, trial: envelope.trial, backendDirectory };
65
110
  }
66
111
  catch (error) {
@@ -78,9 +123,10 @@ async function writeTransportCompletionMarker(bundleDirectory, envelope, trialId
78
123
  });
79
124
  }
80
125
  export function parseRemoteResultEnvelope(value) {
81
- const record = exact(value, ["schema_version", "eval_id", "work_id", "lease_id", "lease_epoch", "trial", "files"], "remote result envelope");
126
+ const v2 = !!value && typeof value === "object" && value.schema_version === "2";
127
+ const record = exact(value, ["schema_version", "eval_id", "work_id", "lease_id", "lease_epoch", "trial", "files", ...(v2 ? ["verifier_source"] : [])], "remote result envelope");
82
128
  validateTransportIdentity({ evalId: record.eval_id, workId: record.work_id, leaseId: record.lease_id, leaseEpoch: record.lease_epoch });
83
- if (record.schema_version !== "1" || !record.trial || typeof record.trial !== "object" || Array.isArray(record.trial)
129
+ if (record.schema_version !== "1" && !v2 || !record.trial || typeof record.trial !== "object" || Array.isArray(record.trial)
84
130
  || !Array.isArray(record.files) || record.files.length < 1 || record.files.length > MAX_FILES)
85
131
  throw transportError("remote result envelope is invalid");
86
132
  const files = record.files.map(parseFile);
@@ -88,7 +134,7 @@ export function parseRemoteResultEnvelope(value) {
88
134
  if (JSON.stringify(sorted) !== JSON.stringify(files) || new Set(files.map((file) => file.path)).size !== files.length)
89
135
  throw transportError("remote result files are not canonical and unique");
90
136
  return {
91
- schema_version: "1", eval_id: record.eval_id, work_id: record.work_id,
137
+ ...(v2 ? { schema_version: "2", verifier_source: parseVerifierSource(record.verifier_source) } : { schema_version: "1" }), eval_id: record.eval_id, work_id: record.work_id,
92
138
  lease_id: record.lease_id, lease_epoch: record.lease_epoch,
93
139
  trial: record.trial, files,
94
140
  };
@@ -133,7 +179,7 @@ function parseFile(value) {
133
179
  const relative = safeRelativePath(record.path);
134
180
  if (!Number.isSafeInteger(record.size) || record.size < 0 || record.size > MAX_ENVELOPE_BYTES
135
181
  || typeof record.sha256 !== "string" || !/^sha256:[a-f0-9]{64}$/.test(record.sha256)
136
- || typeof record.content_base64 !== "string" || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(record.content_base64)) {
182
+ || typeof record.content_base64 !== "string" || !isBase64(record.content_base64)) {
137
183
  throw transportError("remote result file is invalid");
138
184
  }
139
185
  return { path: relative, size: record.size, sha256: record.sha256, content_base64: record.content_base64 };
@@ -1 +1 @@
1
- {"version":3,"file":"remote-result-transport.js","sourceRoot":"","sources":["../../../src/control-plane/remote-result-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-result-transport.js","sourceRoot":"","sources":["../../../src/control-plane/remote-result-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { lstat, mkdtemp, readFile, rename } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { HitchError, ensureDir, readJSON, sha256Bytes, sha256JSON, statePaths, withFileLock } from "../foundation/index.js";
4
+ import { parseEvalTrialRef, regradeTreeDigest, sealRemoteVerifierAssessment, validateEvalTrialReferences, validateRemoteVerifierAssessment } from "../evals/index.js";
5
+ import { materializeRemoteTreeEnvelope, removeMaterializedTree } from "./remote-work-inputs.js";
6
+ import { readRemoteVerifierResultEnvelope } from "./remote-verifier-result.js";
7
+ export async function importRemoteVerifierResultEnvelope(input) {
8
+ const envelope = await readRemoteVerifierResultEnvelope(input.artifactPath), resultDigest = sha256JSON(envelope);
9
+ if (path.resolve(input.evalDirectory) !== path.join(statePaths(input.root).evals, input.plan.eval_id)
10
+ || envelope.verifier_work_digest !== sha256JSON(input.verifier) || envelope.eval_id !== input.lease.eval_id
11
+ || envelope.work_id !== input.lease.work_id || envelope.lease_id !== input.lease.lease_id || envelope.lease_epoch !== input.lease.epoch)
12
+ throw invalid();
13
+ const args = { ...input, outcome: envelope.outcome, resultDigest };
14
+ await validateRemoteVerifierAssessment(args);
15
+ const parent = await ensureDir(path.join(input.evalDirectory, "assessments")), directory = path.join(parent, input.verifier.assessment_id);
16
+ return withFileLock(path.join(input.evalDirectory, "assessment-locks"), input.verifier.assessment_id, async () => {
17
+ input.signal?.throwIfAborted();
18
+ const existing = await lstat(directory).catch(error => { if (error.code === "ENOENT")
19
+ return null; throw error; });
20
+ if (existing && (!existing.isDirectory() || existing.isSymbolicLink()))
21
+ throw invalid();
22
+ if (!existing) {
23
+ const staging = await mkdtemp(path.join(parent, `.${input.verifier.assessment_id}-`));
24
+ try {
25
+ await materializeRemoteTreeEnvelope(envelope.evidence, path.join(staging, "evidence"));
26
+ await sealRemoteVerifierAssessment({ ...args, directory: staging });
27
+ input.signal?.throwIfAborted();
28
+ await rename(staging, directory);
29
+ }
30
+ finally {
31
+ await removeMaterializedTree(staging);
32
+ }
33
+ }
34
+ await validateRemoteVerifierAssessment(args);
35
+ const raw = await readFile(path.join(directory, "assessment.json")), record = JSON.parse(raw.toString());
36
+ const publication = parseEvalTrialRef(await readJSON(path.join(directory, "publication.json")));
37
+ if (record.remote_result_digest !== resultDigest || record.remote_verifier_work_digest !== sha256JSON(input.verifier)
38
+ || record.schema_version !== "1" || record.kind !== "verifier-only-assessment" || record.candidate_executes !== false
39
+ || record.remote_publication_digest !== sha256JSON(publication) || record.evidence_digest !== await regradeTreeDigest(path.join(directory, "evidence"))
40
+ || publication.trial_id !== input.verifier.source_ref.trial_id || publication.run_id !== input.verifier.source_ref.run_id
41
+ || publication.task_id !== input.verifier.source_ref.task_id || publication.attempt !== input.verifier.source_ref.attempt
42
+ || publication.assessment || publication.run_group
43
+ || publication.observation_status === "invalid" && sha256JSON(publication) !== sha256JSON(input.verifier.source_ref))
44
+ throw invalid();
45
+ const assessment = { id: input.verifier.assessment_id, digest: sha256Bytes(raw) };
46
+ const ref = publication.observation_status === "valid" ? { ...publication, assessment } : publication;
47
+ await validateEvalTrialReferences(input.root, input.plan.eval_id, [ref], { benchmarkId: input.plan.benchmark.id, benchmarkRevision: input.plan.benchmark.revision });
48
+ return { ref, assessment, trial: envelope.outcome.trial, backendDirectory: directory, outcome: envelope.outcome };
49
+ }, { timeoutCode: "remote_verifier_assessment_locked", timeoutExitCode: 12 });
50
+ }
51
+ function invalid() { return new HitchError("remote verifier assessment publication conflicts with its sealed result", { code: "remote_verifier_result_invalid", exitCode: 12 }); }
52
+ //# sourceMappingURL=remote-verifier-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-verifier-import.js","sourceRoot":"","sources":["../../../src/control-plane/remote-verifier-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC5H,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAC;AAEtK,OAAO,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAE/E,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,KAAuH;IAC9K,MAAM,QAAQ,GAAG,MAAM,gCAAgC,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjH,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;WAChG,QAAQ,CAAC,oBAAoB,KAAK,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO;WACxG,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK;QAAE,MAAM,OAAO,EAAE,CAAC;IAC3J,MAAM,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IACnE,MAAM,gCAAgC,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3I,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC/G,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9I,IAAI,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAAE,MAAM,OAAO,EAAE,CAAC;QACxF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YACtF,IAAI,CAAC;gBACH,MAAM,6BAA6B,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;gBACvF,MAAM,4BAA4B,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpE,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;gBAC/B,MAAM,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACnC,CAAC;oBAAS,CAAC;gBAAC,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;QACtD,CAAC;QACD,MAAM,gCAAgC,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAA4B,CAAC;QACpI,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAChG,IAAI,MAAM,CAAC,oBAAoB,KAAK,YAAY,IAAI,MAAM,CAAC,2BAA2B,KAAK,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;eAChH,MAAM,CAAC,cAAc,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,0BAA0B,IAAI,MAAM,CAAC,kBAAkB,KAAK,KAAK;eAClH,MAAM,CAAC,yBAAyB,KAAK,UAAU,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,eAAe,KAAK,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;eACpJ,WAAW,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM;eACtH,WAAW,CAAC,OAAO,KAAK,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,KAAK,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO;eACtH,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,SAAS;eAC/C,WAAW,CAAC,kBAAkB,KAAK,SAAS,IAAI,UAAU,CAAC,WAAW,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,MAAM,OAAO,EAAE,CAAC;QACxI,MAAM,UAAU,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QAClF,MAAM,GAAG,GAAmB,WAAW,CAAC,kBAAkB,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QACtH,MAAM,2BAA2B,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrK,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IACpH,CAAC,EAAE,EAAE,WAAW,EAAE,mCAAmC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;AAChF,CAAC;AACD,SAAS,OAAO,KAAiB,OAAO,IAAI,UAAU,CAAC,yEAAyE,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { lstat, readFile } from "node:fs/promises";
2
+ import { HitchError, sha256JSON } from "../foundation/index.js";
3
+ import { parseRemoteVerifierOutcome, parseRemoteVerifierWork, portableRemoteTrial, regradeTreeDigest } from "../evals/index.js";
4
+ import { encodeRemoteTreeEnvelope, parseRemoteTreeEnvelope } from "./remote-work-inputs.js";
5
+ const MAX_BYTES = 64 * 1024 ** 2;
6
+ export async function encodeRemoteVerifierResultEnvelope(input) {
7
+ const verifier = parseRemoteVerifierWork(input.verifier), outcome = input.outcome;
8
+ if (outcome.source_manifest_digest !== sha256JSON(verifier.source_manifest) || outcome.candidate_result_digest !== verifier.candidate_result_digest)
9
+ throw invalid();
10
+ const evidence = await verifierTree(input.verifierDirectory);
11
+ const value = parseRemoteVerifierResultEnvelope({ schema_version: "2", kind: "verifier-only-result",
12
+ eval_id: input.lease.eval_id, work_id: input.lease.work_id, lease_id: input.lease.lease_id, lease_epoch: input.lease.epoch,
13
+ verifier_work_digest: sha256JSON(verifier), evidence,
14
+ outcome: { trial: portableRemoteTrial(outcome.trial), backend: { process_exit_code: outcome.backend.process_exit_code, signal: outcome.backend.signal },
15
+ execution: outcome.execution, config_digest: outcome.config_digest, controller_runtime_id: outcome.controller_runtime_id,
16
+ ...(outcome.runtime_repair ? { runtime_repair: outcome.runtime_repair } : {}) } });
17
+ const body = Buffer.from(`${JSON.stringify(value)}\n`);
18
+ if (body.length > MAX_BYTES)
19
+ throw invalid();
20
+ return body;
21
+ }
22
+ export async function readRemoteVerifierResultEnvelope(file) {
23
+ const info = await lstat(file);
24
+ if (!info.isFile() || info.isSymbolicLink() || info.nlink !== 1 || info.size > MAX_BYTES)
25
+ throw invalid();
26
+ return parseRemoteVerifierResultEnvelope(JSON.parse(await readFile(file, "utf8")));
27
+ }
28
+ export function parseRemoteVerifierResultEnvelope(value) {
29
+ if (!value || typeof value !== "object" || Array.isArray(value))
30
+ throw invalid();
31
+ const r = value;
32
+ const keys = ["schema_version", "kind", "eval_id", "work_id", "lease_id", "lease_epoch", "verifier_work_digest", "outcome", "evidence"];
33
+ if (Object.keys(r).length !== keys.length || Object.keys(r).some(key => !keys.includes(key)) || r.schema_version !== "2" || r.kind !== "verifier-only-result"
34
+ || !["eval", "work", "lease"].every(prefix => typeof r[`${prefix}_id`] === "string" && new RegExp(`^${prefix}_[a-f0-9]{32}$`).test(r[`${prefix}_id`]))
35
+ || !Number.isSafeInteger(r.lease_epoch) || Number(r.lease_epoch) < 1
36
+ || typeof r.verifier_work_digest !== "string" || !/^sha256:[a-f0-9]{64}$/.test(r.verifier_work_digest))
37
+ throw invalid();
38
+ const evidence = parseRemoteTreeEnvelope(r.evidence), outcome = parseRemoteVerifierOutcome(r.outcome);
39
+ if (evidence.symlinks.length || !evidence.directories.some(d => d.path === "verifier")
40
+ || evidence.directories.some(d => d.path !== "verifier" && !d.path.startsWith("verifier/"))
41
+ || evidence.files.some(f => !f.path.startsWith("verifier/")) || evidence.files.reduce((total, file) => total + file.size, 0) > MAX_BYTES
42
+ || outcome.execution.eval_id !== r.eval_id || outcome.execution.work_id !== r.work_id
43
+ || outcome.execution.lease_id !== r.lease_id || outcome.execution.lease_epoch !== r.lease_epoch)
44
+ throw invalid();
45
+ return { ...r, outcome, evidence };
46
+ }
47
+ async function verifierTree(directory) {
48
+ const info = await lstat(directory).catch(error => { if (error.code === "ENOENT")
49
+ return null; throw error; });
50
+ if (info && (!info.isDirectory() || info.isSymbolicLink()))
51
+ throw invalid();
52
+ const before = info ? await regradeTreeDigest(directory, MAX_BYTES) : undefined;
53
+ const tree = info ? JSON.parse((await encodeRemoteTreeEnvelope(directory)).toString())
54
+ : { schema_version: "1", files: [], directories: [], symlinks: [] };
55
+ if (info && await regradeTreeDigest(directory, MAX_BYTES) !== before)
56
+ throw invalid();
57
+ return parseRemoteTreeEnvelope({ schema_version: "1", files: tree.files.map(f => ({ ...f, path: `verifier/${f.path}` })),
58
+ directories: [{ path: "verifier", mode: 0o700 }, ...tree.directories.map(d => ({ ...d, path: `verifier/${d.path}` }))], symlinks: tree.symlinks });
59
+ }
60
+ function invalid() { return new HitchError("remote verifier result is not bounded scoring evidence for its sealed work", { code: "remote_verifier_result_invalid", exitCode: 12 }); }
61
+ //# sourceMappingURL=remote-verifier-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-verifier-result.js","sourceRoot":"","sources":["../../../src/control-plane/remote-verifier-result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import path from "node:path";
2
+ import { HitchError, atomicWriteJSON, readJSON, sha256JSON } from "../foundation/index.js";
3
+ import { parseRemoteVerifierSourceManifest, sealRemoteVerifierSourceImport, verifyRemoteVerifierSourceSnapshot } from "../evals/index.js";
4
+ import { RemoteWorkInputStore, encodeRemoteTreeEnvelope, materializeRemoteTreeEnvelope, parseRemoteTreeEnvelope } from "./remote-work-inputs.js";
5
+ export async function verifierSourceRequested(root, offer) {
6
+ const ref = offer.inputs?.find(input => input.kind === "work-spec");
7
+ if (!ref)
8
+ return false;
9
+ const spec = await readJSON((await new RemoteWorkInputStore(root).verify(ref)).path);
10
+ if (spec.verifier_source === undefined)
11
+ return false;
12
+ if (spec.schema_version !== "2" || spec.verifier_source !== "2")
13
+ throw invalid("sealed work spec has an invalid verifier source contract");
14
+ return true;
15
+ }
16
+ export async function encodeVerifierSource(capture) {
17
+ const manifest = parseRemoteVerifierSourceManifest(capture.manifest);
18
+ if (manifest.status === "unavailable")
19
+ return { manifest };
20
+ if (!capture.directory)
21
+ throw invalid("available verifier source has no snapshot");
22
+ return parseVerifierSource({ manifest, tree: JSON.parse((await encodeRemoteTreeEnvelope(capture.directory)).toString()) });
23
+ }
24
+ export function parseVerifierSource(value) {
25
+ if (!value || typeof value !== "object" || Array.isArray(value))
26
+ throw invalid("verifier source transport is invalid");
27
+ const r = value, manifest = parseRemoteVerifierSourceManifest(r.manifest);
28
+ if (Object.keys(r).sort().join(",") !== (manifest.status === "available" ? "manifest,tree" : "manifest"))
29
+ throw invalid("verifier source has unexpected fields");
30
+ if (manifest.status === "unavailable")
31
+ return { manifest };
32
+ const tree = parseRemoteTreeEnvelope(r.tree);
33
+ if (tree.symlinks.length || tree.directories.some(d => d.path !== "artifacts" && !d.path.startsWith("artifacts/"))
34
+ || tree.files.some(f => !f.path.startsWith("artifacts/") && !["benchmark-lifecycle.json", "hitch-final-response.json", "regrade-config.json"].includes(f.path))
35
+ || tree.files.some(f => f.path === "regrade-config.json") !== !!manifest.regrade_config_digest
36
+ || !tree.directories.some(d => d.path === "artifacts") || !tree.files.some(f => f.path === "benchmark-lifecycle.json")) {
37
+ throw invalid("verifier source may contain only recorded artifacts and host receipts");
38
+ }
39
+ return { manifest, tree };
40
+ }
41
+ export async function importVerifierSource(input) {
42
+ const source = parseVerifierSource(input.source), m = source.manifest;
43
+ const candidate = await readJSON(path.join(input.bundleDirectory, "manifest.json"));
44
+ const metadata = input.trial.agent_result?.metadata;
45
+ if (m.task_id !== input.taskId || m.trial_id !== input.trial.trial_name || m.run_id !== candidate.run_id
46
+ || m.source_result_digest !== sha256JSON(input.trial) || input.runtimeId && m.controller_runtime_id !== input.runtimeId
47
+ || m.status === "available" && (m.run_id !== metadata?.hitch_run_id || m.controller_runtime_id !== metadata.controller_runtime_id)) {
48
+ throw invalid("verifier source differs from its original candidate/task/runtime");
49
+ }
50
+ if (m.status === "available") {
51
+ const snapshotDirectory = path.join(input.trialDirectory, "verifier-source");
52
+ await materializeRemoteTreeEnvelope(source.tree, snapshotDirectory);
53
+ await verifyRemoteVerifierSourceSnapshot({ manifest: m, snapshotDirectory, taskDirectory: input.taskDirectory, bundleDirectory: input.bundleDirectory });
54
+ }
55
+ await atomicWriteJSON(path.join(input.trialDirectory, "verifier-source.json"), m);
56
+ await atomicWriteJSON(path.join(input.trialDirectory, "result.json"), input.trial);
57
+ const candidateResultDigest = sha256JSON(await readJSON(path.join(input.bundleDirectory, "result.json")));
58
+ const { observation: _observation, ...candidateIdentity } = candidate;
59
+ const candidateIdentityDigest = sha256JSON(candidateIdentity);
60
+ const executionDigest = sha256JSON(await readJSON(path.join(input.bundleDirectory, "execution.json"), null));
61
+ return async ({ root, runId }) => {
62
+ if (m.status === "available")
63
+ await sealRemoteVerifierSourceImport({ root, runId, trialDirectory: input.trialDirectory,
64
+ manifest: m, candidateResultDigest, candidateIdentityDigest, executionDigest });
65
+ };
66
+ }
67
+ function invalid(message) { return new HitchError(message, { code: "remote_verifier_source_invalid", exitCode: 12 }); }
68
+ //# sourceMappingURL=remote-verifier-source-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-verifier-source-transport.js","sourceRoot":"","sources":["../../../src/control-plane/remote-verifier-source-transport.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,iCAAiC,EAAE,8BAA8B,EAAE,kCAAkC,EAAE,MAAM,mBAAmB,CAAC;AAE1I,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAKjJ,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAY,EAAE,KAAwB;IAClF,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IACpE,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAA0B,CAAC,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9G,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,IAAI,CAAC,cAAc,KAAK,GAAG,IAAI,IAAI,CAAC,eAAe,KAAK,GAAG;QAAE,MAAM,OAAO,CAAC,0DAA0D,CAAC,CAAC;IAC3I,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAoC;IAC7E,MAAM,QAAQ,GAAG,iCAAiC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC3D,IAAI,CAAC,OAAO,CAAC,SAAS;QAAE,MAAM,OAAO,CAAC,2CAA2C,CAAC,CAAC;IACnF,OAAO,mBAAmB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,wBAAwB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7H,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,OAAO,CAAC,sCAAsC,CAAC,CAAC;IACvH,MAAM,CAAC,GAAG,KAAgC,EAAE,QAAQ,GAAG,iCAAiC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;QAAE,MAAM,OAAO,CAAC,uCAAuC,CAAC,CAAC;IACjK,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC3D,MAAM,IAAI,GAAG,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;WAC7G,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,2BAA2B,EAAE,qBAAqB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;WAC5J,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB;WAC3F,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,0BAA0B,CAAC,EAAE,CAAC;QACzH,MAAM,OAAO,CAAC,uEAAuE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAG1C;IACC,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;IACtE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAA0B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;IAC7G,MAAM,QAAQ,GAAI,KAAK,CAAC,KAAK,CAAC,YAAmE,EAAE,QAAQ,CAAC;IAC5G,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;WACnG,CAAC,CAAC,oBAAoB,KAAK,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,qBAAqB,KAAK,KAAK,CAAC,SAAS;WACpH,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,YAAY,IAAI,CAAC,CAAC,qBAAqB,KAAK,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACrI,MAAM,OAAO,CAAC,kEAAkE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAC7E,MAAM,6BAA6B,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACpE,MAAM,kCAAkC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,iBAAiB,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IAC3J,CAAC;IACD,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC;IAClF,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACnF,MAAM,qBAAqB,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1G,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,iBAAiB,EAAE,GAAG,SAAS,CAAC;IACtE,MAAM,uBAAuB,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7G,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/B,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;YAAE,MAAM,8BAA8B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpH,QAAQ,EAAE,CAAC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,eAAe,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC;AACJ,CAAC;AACD,SAAS,OAAO,CAAC,OAAe,IAAgB,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC"}