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.
- package/README.md +206 -137
- package/README.zh-CN.md +193 -119
- package/dist/scripts/canary-native-training.js +221 -0
- package/dist/scripts/canary-native-training.js.map +1 -0
- package/dist/scripts/canary-remote-training.js +246 -0
- package/dist/scripts/canary-remote-training.js.map +1 -0
- package/dist/scripts/canary-remote-verifier.js +124 -0
- package/dist/scripts/canary-remote-verifier.js.map +1 -0
- package/dist/scripts/canary-worker-host.js +113 -0
- package/dist/scripts/canary-worker-host.js.map +1 -0
- package/dist/scripts/canary-worker-peer.js +188 -0
- package/dist/scripts/canary-worker-peer.js.map +1 -0
- package/dist/scripts/check-architecture.js +4 -3
- package/dist/scripts/check-architecture.js.map +1 -1
- package/dist/src/adapters/catalog.js +2 -1
- package/dist/src/adapters/catalog.js.map +1 -1
- package/dist/src/adapters/providers/codex.js +65 -2
- package/dist/src/adapters/providers/codex.js.map +1 -1
- package/dist/src/adapters/providers/model-call.js +17 -1
- package/dist/src/adapters/providers/model-call.js.map +1 -1
- package/dist/src/adapters/providers/training-tool.js +29 -0
- package/dist/src/adapters/providers/training-tool.js.map +1 -0
- package/dist/src/artifacts/index.js +1 -1
- package/dist/src/artifacts/index.js.map +1 -1
- package/dist/src/artifacts/store.js +15 -10
- package/dist/src/artifacts/store.js.map +1 -1
- package/dist/src/backends/harbor/backend.js +24 -15
- package/dist/src/backends/harbor/backend.js.map +1 -1
- package/dist/src/backends/harbor/bridge-environment.js +12 -0
- package/dist/src/backends/harbor/bridge-environment.js.map +1 -0
- package/dist/src/backends/harbor/environment-config.js +2 -2
- package/dist/src/backends/harbor/environment-config.js.map +1 -1
- package/dist/src/backends/harbor/host-credential-helper.js +81 -0
- package/dist/src/backends/harbor/host-credential-helper.js.map +1 -0
- package/dist/src/backends/harbor/index.js +3 -0
- package/dist/src/backends/harbor/index.js.map +1 -1
- package/dist/src/backends/harbor/model-proxy-config.js +18 -1
- package/dist/src/backends/harbor/model-proxy-config.js.map +1 -1
- package/dist/src/backends/harbor/observation.js +61 -0
- package/dist/src/backends/harbor/observation.js.map +1 -0
- package/dist/src/backends/harbor/portable-regrade.js +150 -0
- package/dist/src/backends/harbor/portable-regrade.js.map +1 -0
- package/dist/src/backends/harbor/process.js +26 -5
- package/dist/src/backends/harbor/process.js.map +1 -1
- package/dist/src/backends/harbor/regrade.js +4 -1
- package/dist/src/backends/harbor/regrade.js.map +1 -1
- package/dist/src/backends/harbor/supervisor.js +22 -0
- package/dist/src/backends/harbor/supervisor.js.map +1 -1
- package/dist/src/backends/harbor/tools.js +2 -0
- package/dist/src/backends/harbor/tools.js.map +1 -1
- package/dist/src/backends/index.js +3 -0
- package/dist/src/backends/index.js.map +1 -1
- package/dist/src/cli/arguments.js +33 -0
- package/dist/src/cli/arguments.js.map +1 -1
- package/dist/src/cli/commands/capabilities.js +14 -1
- package/dist/src/cli/commands/capabilities.js.map +1 -1
- package/dist/src/cli/commands/daemon.js +19 -0
- package/dist/src/cli/commands/daemon.js.map +1 -1
- package/dist/src/cli/commands/eval.js +38 -10
- package/dist/src/cli/commands/eval.js.map +1 -1
- package/dist/src/cli/commands/local.js +130 -0
- package/dist/src/cli/commands/local.js.map +1 -0
- package/dist/src/cli/commands/model-node.js +26 -0
- package/dist/src/cli/commands/model-node.js.map +1 -0
- package/dist/src/cli/commands/models.js +72 -0
- package/dist/src/cli/commands/models.js.map +1 -0
- package/dist/src/cli/commands/run.js +36 -1
- package/dist/src/cli/commands/run.js.map +1 -1
- package/dist/src/cli/commands/training.js +32 -0
- package/dist/src/cli/commands/training.js.map +1 -0
- package/dist/src/cli/commands/worker.js +30 -2
- package/dist/src/cli/commands/worker.js.map +1 -1
- package/dist/src/cli/main.js +8 -0
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/output.js +24 -2
- package/dist/src/cli/output.js.map +1 -1
- package/dist/src/control-plane/eval-records.js +2 -0
- package/dist/src/control-plane/eval-records.js.map +1 -1
- package/dist/src/control-plane/eval-recovery.js +7 -1
- package/dist/src/control-plane/eval-recovery.js.map +1 -1
- package/dist/src/control-plane/eval-scheduler.js +24 -50
- package/dist/src/control-plane/eval-scheduler.js.map +1 -1
- package/dist/src/control-plane/eval-submission-persist.js +30 -0
- package/dist/src/control-plane/eval-submission-persist.js.map +1 -0
- package/dist/src/control-plane/execution-observation-contract.js +60 -0
- package/dist/src/control-plane/execution-observation-contract.js.map +1 -0
- package/dist/src/control-plane/index.js +10 -0
- package/dist/src/control-plane/index.js.map +1 -1
- package/dist/src/control-plane/inference-manager.js +357 -0
- package/dist/src/control-plane/inference-manager.js.map +1 -0
- package/dist/src/control-plane/managed-gateway-receipt.js +26 -0
- package/dist/src/control-plane/managed-gateway-receipt.js.map +1 -0
- package/dist/src/control-plane/managed-service-recovery.js +158 -0
- package/dist/src/control-plane/managed-service-recovery.js.map +1 -0
- package/dist/src/control-plane/model-capture-planning.js +15 -1
- package/dist/src/control-plane/model-capture-planning.js.map +1 -1
- package/dist/src/control-plane/ordered-eval-control.js +221 -0
- package/dist/src/control-plane/ordered-eval-control.js.map +1 -0
- package/dist/src/control-plane/remote-backend-result.js +18 -0
- package/dist/src/control-plane/remote-backend-result.js.map +1 -0
- package/dist/src/control-plane/remote-execution-lease.js +15 -0
- package/dist/src/control-plane/remote-execution-lease.js.map +1 -0
- package/dist/src/control-plane/remote-execution-observation.js +108 -0
- package/dist/src/control-plane/remote-execution-observation.js.map +1 -0
- package/dist/src/control-plane/remote-model-routes.js +107 -0
- package/dist/src/control-plane/remote-model-routes.js.map +1 -0
- package/dist/src/control-plane/remote-observation-reporter.js +37 -0
- package/dist/src/control-plane/remote-observation-reporter.js.map +1 -0
- package/dist/src/control-plane/remote-offer-contract.js +48 -0
- package/dist/src/control-plane/remote-offer-contract.js.map +1 -0
- package/dist/src/control-plane/remote-rerun-journal.js +61 -0
- package/dist/src/control-plane/remote-rerun-journal.js.map +1 -0
- package/dist/src/control-plane/remote-result-transport.js +55 -9
- package/dist/src/control-plane/remote-result-transport.js.map +1 -1
- package/dist/src/control-plane/remote-verifier-import.js +52 -0
- package/dist/src/control-plane/remote-verifier-import.js.map +1 -0
- package/dist/src/control-plane/remote-verifier-result.js +61 -0
- package/dist/src/control-plane/remote-verifier-result.js.map +1 -0
- package/dist/src/control-plane/remote-verifier-source-transport.js +68 -0
- package/dist/src/control-plane/remote-verifier-source-transport.js.map +1 -0
- package/dist/src/control-plane/remote-work-coordinator.js +103 -47
- package/dist/src/control-plane/remote-work-coordinator.js.map +1 -1
- package/dist/src/control-plane/remote-work-inputs.js +26 -5
- package/dist/src/control-plane/remote-work-inputs.js.map +1 -1
- package/dist/src/control-plane/remote-work-recovery.js +123 -34
- package/dist/src/control-plane/remote-work-recovery.js.map +1 -1
- package/dist/src/control-plane/remote-worker-artifacts.js +10 -7
- package/dist/src/control-plane/remote-worker-artifacts.js.map +1 -1
- package/dist/src/control-plane/remote-worker-cleanup.js +104 -0
- package/dist/src/control-plane/remote-worker-cleanup.js.map +1 -0
- package/dist/src/control-plane/remote-worker-client.js +156 -14
- package/dist/src/control-plane/remote-worker-client.js.map +1 -1
- package/dist/src/control-plane/remote-worker-codecs.js +160 -0
- package/dist/src/control-plane/remote-worker-codecs.js.map +1 -0
- package/dist/src/control-plane/remote-worker-generation-recovery.js +67 -0
- package/dist/src/control-plane/remote-worker-generation-recovery.js.map +1 -0
- package/dist/src/control-plane/remote-worker-ownership.js +51 -0
- package/dist/src/control-plane/remote-worker-ownership.js.map +1 -0
- package/dist/src/control-plane/remote-worker-protocol.js +85 -119
- package/dist/src/control-plane/remote-worker-protocol.js.map +1 -1
- package/dist/src/control-plane/remote-worker-runner.js +95 -18
- package/dist/src/control-plane/remote-worker-runner.js.map +1 -1
- package/dist/src/control-plane/remote-workers.js +33 -5
- package/dist/src/control-plane/remote-workers.js.map +1 -1
- package/dist/src/control-plane/rerun-recovery.js +89 -0
- package/dist/src/control-plane/rerun-recovery.js.map +1 -0
- package/dist/src/control-plane/rerun-scheduler.js +70 -96
- package/dist/src/control-plane/rerun-scheduler.js.map +1 -1
- package/dist/src/control-plane/rerun-source.js +57 -0
- package/dist/src/control-plane/rerun-source.js.map +1 -0
- package/dist/src/control-plane/worker-model-relay.js +76 -0
- package/dist/src/control-plane/worker-model-relay.js.map +1 -0
- package/dist/src/controller-runtime/hash.js +3 -0
- package/dist/src/controller-runtime/hash.js.map +1 -1
- package/dist/src/controller-runtime/index.js +2 -0
- package/dist/src/controller-runtime/index.js.map +1 -1
- package/dist/src/controller-runtime/observation.js +29 -0
- package/dist/src/controller-runtime/observation.js.map +1 -0
- package/dist/src/controller-runtime/resident.js +22 -0
- package/dist/src/controller-runtime/resident.js.map +1 -0
- package/dist/src/daemon/client.js +34 -1
- package/dist/src/daemon/client.js.map +1 -1
- package/dist/src/daemon/execution-observation.js +38 -0
- package/dist/src/daemon/execution-observation.js.map +1 -0
- package/dist/src/daemon/http.js +57 -0
- package/dist/src/daemon/http.js.map +1 -0
- package/dist/src/daemon/inference-prepare.js +47 -0
- package/dist/src/daemon/inference-prepare.js.map +1 -0
- package/dist/src/daemon/scheduler.js +4 -1
- package/dist/src/daemon/scheduler.js.map +1 -1
- package/dist/src/daemon/server.js +80 -82
- package/dist/src/daemon/server.js.map +1 -1
- package/dist/src/daemon/worker-observation.js +34 -0
- package/dist/src/daemon/worker-observation.js.map +1 -0
- package/dist/src/daemon/worker-ownership.js +71 -0
- package/dist/src/daemon/worker-ownership.js.map +1 -0
- package/dist/src/daemon/worker-routes.js +83 -15
- package/dist/src/daemon/worker-routes.js.map +1 -1
- package/dist/src/domain/execution-observation.js +2 -0
- package/dist/src/domain/execution-observation.js.map +1 -0
- package/dist/src/domain/index.js +1 -0
- package/dist/src/domain/index.js.map +1 -1
- package/dist/src/domain/inference.js +2 -0
- package/dist/src/domain/inference.js.map +1 -0
- package/dist/src/domain/runs.js.map +1 -1
- package/dist/src/domain/training.js +2 -0
- package/dist/src/domain/training.js.map +1 -0
- package/dist/src/domain/validation.js +11 -0
- package/dist/src/domain/validation.js.map +1 -1
- package/dist/src/domain/verifier-source.js +2 -0
- package/dist/src/domain/verifier-source.js.map +1 -0
- package/dist/src/domain/worker-recovery.js +2 -0
- package/dist/src/domain/worker-recovery.js.map +1 -0
- package/dist/src/evals/eval-logical-plan.js +8 -1
- package/dist/src/evals/eval-logical-plan.js.map +1 -1
- package/dist/src/evals/execution-leases.js +15 -2
- package/dist/src/evals/execution-leases.js.map +1 -1
- package/dist/src/evals/execution-plan.js +11 -1
- package/dist/src/evals/execution-plan.js.map +1 -1
- package/dist/src/evals/harbor-bridge-error.js +8 -0
- package/dist/src/evals/harbor-bridge-error.js.map +1 -1
- package/dist/src/evals/index.js +19 -0
- package/dist/src/evals/index.js.map +1 -1
- package/dist/src/evals/model-capture-plan.js +12 -0
- package/dist/src/evals/model-capture-plan.js.map +1 -1
- package/dist/src/evals/model-capture-runtime.js +25 -0
- package/dist/src/evals/model-capture-runtime.js.map +1 -1
- package/dist/src/evals/physical-work-plan.js +57 -0
- package/dist/src/evals/physical-work-plan.js.map +1 -0
- package/dist/src/evals/preparation-rerun.js +6 -0
- package/dist/src/evals/preparation-rerun.js.map +1 -1
- package/dist/src/evals/recovery.js +8 -1
- package/dist/src/evals/recovery.js.map +1 -1
- package/dist/src/evals/regrade-evidence.js +4 -4
- package/dist/src/evals/regrade-evidence.js.map +1 -1
- package/dist/src/evals/remote-execution-ownership.js +50 -0
- package/dist/src/evals/remote-execution-ownership.js.map +1 -0
- package/dist/src/evals/remote-infrastructure-retry.js +2 -0
- package/dist/src/evals/remote-infrastructure-retry.js.map +1 -1
- package/dist/src/evals/remote-lease-release.js +58 -0
- package/dist/src/evals/remote-lease-release.js.map +1 -0
- package/dist/src/evals/remote-rerun-execution.js +85 -0
- package/dist/src/evals/remote-rerun-execution.js.map +1 -0
- package/dist/src/evals/remote-trial.js +6 -0
- package/dist/src/evals/remote-trial.js.map +1 -0
- package/dist/src/evals/remote-verifier-assessment.js +85 -0
- package/dist/src/evals/remote-verifier-assessment.js.map +1 -0
- package/dist/src/evals/remote-verifier-contract.js +43 -0
- package/dist/src/evals/remote-verifier-contract.js.map +1 -0
- package/dist/src/evals/remote-verifier-execution.js +105 -0
- package/dist/src/evals/remote-verifier-execution.js.map +1 -0
- package/dist/src/evals/remote-verifier-journal.js +21 -0
- package/dist/src/evals/remote-verifier-journal.js.map +1 -0
- package/dist/src/evals/remote-verifier-outcome.js +51 -0
- package/dist/src/evals/remote-verifier-outcome.js.map +1 -0
- package/dist/src/evals/remote-verifier-rerun.js +134 -0
- package/dist/src/evals/remote-verifier-rerun.js.map +1 -0
- package/dist/src/evals/remote-verifier-selection.js +61 -0
- package/dist/src/evals/remote-verifier-selection.js.map +1 -0
- package/dist/src/evals/remote-verifier-source.js +33 -0
- package/dist/src/evals/remote-verifier-source.js.map +1 -0
- package/dist/src/evals/remote-worker-cleanup.js +46 -0
- package/dist/src/evals/remote-worker-cleanup.js.map +1 -0
- package/dist/src/evals/request.js +58 -1
- package/dist/src/evals/request.js.map +1 -1
- package/dist/src/evals/rerun-completion.js +39 -0
- package/dist/src/evals/rerun-completion.js.map +1 -0
- package/dist/src/evals/rerun-resume.js +70 -0
- package/dist/src/evals/rerun-resume.js.map +1 -0
- package/dist/src/evals/rerun-state.js +25 -0
- package/dist/src/evals/rerun-state.js.map +1 -0
- package/dist/src/evals/rerun-types.js.map +1 -1
- package/dist/src/evals/rerun.js +90 -46
- package/dist/src/evals/rerun.js.map +1 -1
- package/dist/src/evals/service.js +59 -5
- package/dist/src/evals/service.js.map +1 -1
- package/dist/src/evals/verifier-only-rerun.js +2 -16
- package/dist/src/evals/verifier-only-rerun.js.map +1 -1
- package/dist/src/evals/verifier-rerun-result.js +24 -0
- package/dist/src/evals/verifier-rerun-result.js.map +1 -0
- package/dist/src/evals/verifier-source-import.js +48 -0
- package/dist/src/evals/verifier-source-import.js.map +1 -0
- package/dist/src/evals/verifier-source.js +139 -0
- package/dist/src/evals/verifier-source.js.map +1 -0
- package/dist/src/foundation/base64.js +19 -0
- package/dist/src/foundation/base64.js.map +1 -0
- package/dist/src/foundation/config.js +10 -0
- package/dist/src/foundation/config.js.map +1 -1
- package/dist/src/foundation/credential-redaction.js +22 -9
- package/dist/src/foundation/credential-redaction.js.map +1 -1
- package/dist/src/foundation/index.js +1 -0
- package/dist/src/foundation/index.js.map +1 -1
- package/dist/src/foundation/process-identity.js +13 -9
- package/dist/src/foundation/process-identity.js.map +1 -1
- package/dist/src/inference/daemon-capacity.js +41 -0
- package/dist/src/inference/daemon-capacity.js.map +1 -0
- package/dist/src/inference/device-reservation.js +58 -0
- package/dist/src/inference/device-reservation.js.map +1 -0
- package/dist/src/inference/doctor.js +95 -0
- package/dist/src/inference/doctor.js.map +1 -0
- package/dist/src/inference/generation-recovery.js +83 -0
- package/dist/src/inference/generation-recovery.js.map +1 -0
- package/dist/src/inference/index.js +24 -0
- package/dist/src/inference/index.js.map +1 -0
- package/dist/src/inference/lock.js +331 -0
- package/dist/src/inference/lock.js.map +1 -0
- package/dist/src/inference/managed-launcher.js +35 -0
- package/dist/src/inference/managed-launcher.js.map +1 -0
- package/dist/src/inference/manifest.js +262 -0
- package/dist/src/inference/manifest.js.map +1 -0
- package/dist/src/inference/materialize.js +66 -0
- package/dist/src/inference/materialize.js.map +1 -0
- package/dist/src/inference/model-location.js +34 -0
- package/dist/src/inference/model-location.js.map +1 -0
- package/dist/src/inference/model-store.js +439 -0
- package/dist/src/inference/model-store.js.map +1 -0
- package/dist/src/inference/node-client.js +167 -0
- package/dist/src/inference/node-client.js.map +1 -0
- package/dist/src/inference/node-registry.js +79 -0
- package/dist/src/inference/node-registry.js.map +1 -0
- package/dist/src/inference/observation.js +79 -0
- package/dist/src/inference/observation.js.map +1 -0
- package/dist/src/inference/preflight.js +132 -0
- package/dist/src/inference/preflight.js.map +1 -0
- package/dist/src/inference/process-sglang.js +169 -0
- package/dist/src/inference/process-sglang.js.map +1 -0
- package/dist/src/inference/protocol-probe.js +29 -0
- package/dist/src/inference/protocol-probe.js.map +1 -0
- package/dist/src/inference/remote-model-store.js +24 -0
- package/dist/src/inference/remote-model-store.js.map +1 -0
- package/dist/src/inference/runtime-catalog.js +41 -0
- package/dist/src/inference/runtime-catalog.js.map +1 -0
- package/dist/src/inference/runtime-store.js +93 -0
- package/dist/src/inference/runtime-store.js.map +1 -0
- package/dist/src/inference/service-attachment.js +46 -0
- package/dist/src/inference/service-attachment.js.map +1 -0
- package/dist/src/inference/service-inspection.js +38 -0
- package/dist/src/inference/service-inspection.js.map +1 -0
- package/dist/src/inference/sglang.js +279 -0
- package/dist/src/inference/sglang.js.map +1 -0
- package/dist/src/inference/supervisor.js +460 -0
- package/dist/src/inference/supervisor.js.map +1 -0
- package/dist/src/model-access/environment.js +28 -0
- package/dist/src/model-access/environment.js.map +1 -0
- package/dist/src/model-access/index.js +4 -0
- package/dist/src/model-access/index.js.map +1 -1
- package/dist/src/model-access/local-gateway-request.js +139 -0
- package/dist/src/model-access/local-gateway-request.js.map +1 -0
- package/dist/src/model-access/local-gateway.js +323 -0
- package/dist/src/model-access/local-gateway.js.map +1 -0
- package/dist/src/model-access/proxy.js +90 -5
- package/dist/src/model-access/proxy.js.map +1 -1
- package/dist/src/model-access/remote-model.js +58 -0
- package/dist/src/model-access/remote-model.js.map +1 -0
- package/dist/src/model-access/training.js +115 -0
- package/dist/src/model-access/training.js.map +1 -0
- package/dist/src/runs/adapter-process.js +2 -2
- package/dist/src/runs/adapter-process.js.map +1 -1
- package/dist/src/runs/executor-types.js +2 -0
- package/dist/src/runs/executor-types.js.map +1 -0
- package/dist/src/runs/executor.js +54 -34
- package/dist/src/runs/executor.js.map +1 -1
- package/dist/src/runs/index.js +1 -0
- package/dist/src/runs/index.js.map +1 -1
- package/dist/src/runs/local-inference-environment.js +59 -0
- package/dist/src/runs/local-inference-environment.js.map +1 -0
- package/dist/src/runs/local-inference-run.js +53 -0
- package/dist/src/runs/local-inference-run.js.map +1 -0
- package/dist/src/runs/outcome.js +22 -0
- package/dist/src/runs/outcome.js.map +1 -1
- package/dist/src/runs/records.js +9 -0
- package/dist/src/runs/records.js.map +1 -1
- package/dist/src/runs/request.js +58 -3
- package/dist/src/runs/request.js.map +1 -1
- package/dist/src/runs/training-evidence.js +22 -0
- package/dist/src/runs/training-evidence.js.map +1 -0
- package/dist/src/runs/training-runtime.js +20 -0
- package/dist/src/runs/training-runtime.js.map +1 -0
- package/dist/src/workers/execution-observation.js +32 -0
- package/dist/src/workers/execution-observation.js.map +1 -0
- package/dist/src/workers/index.js +2 -0
- package/dist/src/workers/index.js.map +1 -1
- package/dist/src/workers/remote-harbor-ownership.js +266 -0
- package/dist/src/workers/remote-harbor-ownership.js.map +1 -0
- package/dist/src/workers/remote-harbor-verifier.js +76 -0
- package/dist/src/workers/remote-harbor-verifier.js.map +1 -0
- package/dist/src/workers/remote-harbor-work-spec.js +66 -10
- package/dist/src/workers/remote-harbor-work-spec.js.map +1 -1
- package/dist/src/workers/remote-harbor-worker.js +56 -49
- package/dist/src/workers/remote-harbor-worker.js.map +1 -1
- package/dist/src/workers/remote-worker-host.js +33 -0
- package/dist/src/workers/remote-worker-host.js.map +1 -0
- package/docs/local-model-inference-spec.zh-CN.md +666 -0
- package/docs/schemas/controller-runtime-observation.schema.json +21 -0
- package/docs/schemas/eval-execution-plan.schema.json +1 -0
- package/docs/schemas/eval-request.schema.json +3 -1
- package/docs/schemas/execution-lease.schema.json +95 -1
- package/docs/schemas/execution-provider-status.schema.json +162 -28
- package/docs/schemas/inference-execution-evidence.schema.json +487 -0
- package/docs/schemas/inference-lock.schema.json +487 -0
- package/docs/schemas/inference-runtime-manifest.schema.json +156 -0
- package/docs/schemas/inference-service-record.schema.json +227 -0
- package/docs/schemas/local-inference-selection.schema.json +98 -0
- package/docs/schemas/local-model-manifest.schema.json +43 -0
- package/docs/schemas/model-node-binding.schema.json +34 -0
- package/docs/schemas/model-node-generation-release.schema.json +46 -0
- package/docs/schemas/ordered-eval-control.schema.json +39 -0
- package/docs/schemas/remote-execution-lease-grant.schema.json +45 -0
- package/docs/schemas/remote-harbor-work-spec.schema.json +325 -0
- package/docs/schemas/remote-model-binding.schema.json +21 -0
- package/docs/schemas/remote-physical-execution.schema.json +108 -0
- package/docs/schemas/remote-result-envelope.schema.json +9 -3
- package/docs/schemas/remote-tree-envelope.schema.json +17 -3
- package/docs/schemas/remote-verifier-result.schema.json +203 -0
- package/docs/schemas/remote-verifier-source.schema.json +52 -0
- package/docs/schemas/remote-verifier-work.schema.json +125 -0
- package/docs/schemas/remote-work-offer.schema.json +170 -34
- package/docs/schemas/remote-worker-execution-admission.schema.json +214 -0
- package/docs/schemas/remote-worker-generation-cleanup.schema.json +199 -0
- package/docs/schemas/remote-worker-registration.schema.json +226 -25
- package/docs/schemas/run-manifest.schema.json +211 -44
- package/docs/schemas/run-request.schema.json +2 -1
- package/docs/schemas/training-external-binding.schema.json +26 -0
- package/integrations/harbor/hitch_harbor_agent.py +241 -13
- package/integrations/harbor/hitch_harbor_environment.py +22 -1
- package/integrations/harbor/hitch_host_credentials.py +354 -0
- package/integrations/harbor/hitch_private_exec.py +150 -0
- package/integrations/model-call/cli.js +13 -5
- package/integrations/training-tool/cli.js +72 -0
- 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 {
|
|
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
|
-
|
|
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
|
|
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" ||
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGpG,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAGxH,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAC7C,MAAM,SAAS,GAAG,OAAO,CAAC;AAqB1B,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,KAQhD;IACC,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,oBAAoB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnG,MAAM,QAAQ,GAAyB;QACrC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAY,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAY,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM;QACxJ,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK;KACvG,CAAC;IACF,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,IAAI,QAAQ,CAAC,cAAc,KAAK,GAAG,IAAI,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACvI,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC5C,QAAQ,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM;gBACtH,qBAAqB,EAAE,CAAC,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,CAAC,CAAC,oBAAoB;gBAC5F,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC;QACnJ,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB;QAAE,MAAM,cAAc,CAAC,+CAA+C,CAAC,CAAC;IAC/G,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,KAehD;IACC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,kBAAkB;QAAE,MAAM,cAAc,CAAC,mDAAmD,CAAC,CAAC;IAC7K,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAY,CAAC,CAAC;IAC9G,IAAI,CAAC,QAAQ,CAAC,cAAc,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,KAAK,IAAI,CAAC;QAAE,MAAM,cAAc,CAAC,uEAAuE,CAAC,CAAC;IACjL,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvD,IAAI,QAAQ,CAAC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,MAAM,cAAc,CAAC,0DAA0D,CAAC,CAAC;IAC1I,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3J,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO;QAAE,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,YAAY,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;IACpH,MAAM,EAAE,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACrD,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACxF,IAAI,CAAC,KAAK,CAAC,UAAU;gBAAE,MAAM,cAAc,CAAC,uDAAuD,CAAC,CAAC;YACrG,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA0B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;YACtG,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,UAAU,CAAC,KAAK;gBAAE,MAAM,cAAc,CAAC,0DAA0D,CAAC,CAAC;YACjI,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe;uBAC/D,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;uBAC3E,UAAU,CAAC,QAAQ,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,UAAU,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBAC5G,MAAM,cAAc,CAAC,8DAA8D,CAAC,CAAC;gBACvF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,QAAQ,CAAC,KAA4C,CAAC;gBACpE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,IAAI,QAAQ,CAAC,iBAAiB;uBAC7F,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY;uBACnE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;uBAC/F,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ;uBACxF,KAAK,EAAE,iBAAiB,KAAK,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,IAAI,IAAI,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;oBACnH,MAAM,cAAc,CAAC,mEAAmE,CAAC,CAAC;gBAC5F,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACvG,IAAI,SAAS,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC,KAAK,CAAC,SAAS;eAC3F,SAAS,CAAC,mBAAmB,KAAK,KAAK,CAAC,KAAK,CAAC,mBAAmB,IAAI,SAAS,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO;eAC9G,SAAS,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,CAAC,QAAQ;eACxF,SAAS,CAAC,WAAW,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;eAC3F,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACtF,MAAM,cAAc,CAAC,2DAA2D,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,cAAc,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,oBAAoB,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,eAAe,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK;YAC/I,cAAc,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;YAC1I,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,MAAM,8BAA8B,CAAC,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC;YACnC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;YAC3B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;YACtD,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,eAAyB;YACrD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;YACvC,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB;YACnD,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,iBAAiB,EAAE,SAAS;YAC5B,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,qBAAqB,EAAE,IAAI;SAC5B,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,kBAAkB,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,MAAM;gBAAE,MAAM,cAAc,CAAC,kDAAkD,CAAC,CAAC;YAC1F,MAAM,kBAAkB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,8BAA8B,CAAC,eAAuB,EAAE,QAA8B,EAAE,OAAe;IACpH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA0B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;IACtG,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvF,MAAM,cAAc,CAAC,2DAA2D,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,sBAAsB,CAAC,EAAE;QACxE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO;KAC3F,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAAsC,CAAC,cAAc,KAAK,GAAG,CAAC;IAClH,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;IACjL,yBAAyB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACxI,IAAI,MAAM,CAAC,cAAc,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;WACvH,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;QAAE,MAAM,cAAc,CAAC,mCAAmC,CAAC,CAAC;IAC3J,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;QAAE,MAAM,cAAc,CAAC,kDAAkD,CAAC,CAAC;IAChM,OAAO;QACL,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAY,EAAE,eAAe,EAAE,mBAAmB,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAY,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAiB,EAAE,OAAO,EAAE,MAAM,CAAC,OAAiB;QACjN,QAAQ,EAAE,MAAM,CAAC,QAAkB,EAAE,WAAW,EAAE,MAAM,CAAC,WAAqB;QAC9E,KAAK,EAAE,MAAM,CAAC,KAAgC,EAAE,KAAK;KACtD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,QAAQ,GAAG,EAAE;IACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3G,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAClE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;aAChE,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACrE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzH,CAAC;;YAAM,MAAM,cAAc,CAAC,kDAAkD,KAAK,EAAE,CAAC,CAAC;QACvF,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS;YAAE,MAAM,cAAc,CAAC,yCAAyC,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,QAA8B,EAAE,WAAmB;IACpF,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAC3D,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;QACxB,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,kBAAkB;YAAE,MAAM,cAAc,CAAC,wCAAwC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7K,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACtC,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAChG,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAK,MAAM,CAAC,IAAe,GAAG,CAAC,IAAK,MAAM,CAAC,IAAe,GAAG,kBAAkB;WAChH,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;WACjF,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QACnF,MAAM,cAAc,CAAC,+BAA+B,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAgB,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC;AACjI,CAAC;AAED,SAAS,sBAAsB,CAAC,QAA8B,EAAE,IAAuB,EAAE,KAAuB;IAC9G,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;WAC3G,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,KAAK,KAAK,CAAC,KAAK;WAClH,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,cAAc,CAAC,0DAA0D,CAAC,CAAC;AACrJ,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAkF;IACnH,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;WAC5E,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;WAC7E,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;WAChF,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAK,KAAK,CAAC,UAAqB,GAAG,CAAC;QAAE,MAAM,cAAc,CAAC,6CAA6C,CAAC,CAAC;AACxJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;WAC9H,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC;QAAE,MAAM,cAAc,CAAC,8BAA8B,CAAC,CAAC;IACnI,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,cAAc,CAAC,kCAAkC,CAAC,CAAC;IAC7I,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK,CAAC,KAAc,EAAE,IAAc,EAAE,KAAa;IAC1D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,cAAc,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IACpH,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,MAAM,cAAc,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAC;IAChH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,IAAY,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/G,SAAS,cAAc,CAAC,OAAe,IAAgB,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -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":"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"}
|
|
@@ -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":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEhI,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAG5F,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;AAUjC,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,KAGxD;IACC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAClF,IAAI,OAAO,CAAC,sBAAsB,KAAK,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,uBAAuB,KAAK,QAAQ,CAAC,uBAAuB;QAAE,MAAM,OAAO,EAAE,CAAC;IACrK,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,iCAAiC,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,sBAAsB;QACjG,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;QAC1H,oBAAoB,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,QAAQ;QACpD,OAAO,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE;YACrJ,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;YACxH,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACvF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS;QAAE,MAAM,OAAO,EAAE,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,IAAY;IACjE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS;QAAE,MAAM,OAAO,EAAE,CAAC;IAC1G,OAAO,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,KAAc;IAC9D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IACjF,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,sBAAsB,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACxI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,sBAAsB;WACxJ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,KAAK,QAAQ,IAAI,IAAI,MAAM,CAAC,IAAI,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,CAAW,CAAC,CAAC;WAC7J,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC;WACjE,OAAO,CAAC,CAAC,oBAAoB,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IAC1H,MAAM,QAAQ,GAAG,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACtG,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;WACjF,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;WACxF,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,SAAS;WACrI,OAAO,CAAC,SAAS,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;WAClF,OAAO,CAAC,SAAS,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW;QAAE,MAAM,OAAO,EAAE,CAAC;IACnH,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAA+C,CAAC;AAClF,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,SAAiB;IAC3C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1I,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAyB;QAC5G,CAAC,CAAC,EAAE,cAAc,EAAE,GAAY,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC/E,IAAI,IAAI,IAAI,MAAM,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,MAAM;QAAE,MAAM,OAAO,EAAE,CAAC;IACtF,OAAO,uBAAuB,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtH,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACvJ,CAAC;AACD,SAAS,OAAO,KAAiB,OAAO,IAAI,UAAU,CAAC,4EAA4E,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -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":"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"}
|