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,139 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { cp, mkdir, open, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { parse as parseTOML } from "smol-toml";
|
|
5
|
+
import { capturePortableHarborRegradeConfig, parsePortableHarborRegradeConfig } from "../backends/index.js";
|
|
6
|
+
import { HitchError, readJSON, sha256JSON } from "../foundation/index.js";
|
|
7
|
+
import { verifyResultBundleIndex } from "../runs/index.js";
|
|
8
|
+
import { regradeTreeDigest } from "./regrade-evidence.js";
|
|
9
|
+
import { portableRemoteTrial } from "./remote-trial.js";
|
|
10
|
+
const MAX_SOURCE_BYTES = 48 * 1024 * 1024;
|
|
11
|
+
const SHA = /^sha256:[a-f0-9]{64}$/;
|
|
12
|
+
/** Only recorded artifacts and host lifecycle/response receipts cross this boundary; never agent config or credentials. */
|
|
13
|
+
export async function captureRemoteVerifierSource(input) {
|
|
14
|
+
const identity = { schema_version: "2", task_id: input.taskId, trial_id: String(input.trial.trial_name), run_id: input.runId,
|
|
15
|
+
controller_runtime_id: input.runtimeId, source_result_digest: sha256JSON(portableRemoteTrial(input.trial)), original_result_digest: sha256JSON(input.trial) };
|
|
16
|
+
const unavailable = (reason) => ({ manifest: { ...identity, status: "unavailable", reason } });
|
|
17
|
+
let created = false;
|
|
18
|
+
try {
|
|
19
|
+
const task = parseTOML(await readFile(path.join(input.taskDirectory, "task.toml"), "utf8"));
|
|
20
|
+
if (task.steps || task.verifier?.environment_mode !== "separate")
|
|
21
|
+
return unavailable("unsupported-task");
|
|
22
|
+
const bundle = await verifyResultBundleIndex(input.bundleDirectory);
|
|
23
|
+
const result = await readJSON(path.join(input.bundleDirectory, "result.json"));
|
|
24
|
+
const config = await readJSON(path.join(input.trialDirectory, "config.json"));
|
|
25
|
+
const sourceResult = await readJSON(path.join(input.trialDirectory, "result.json"));
|
|
26
|
+
const metadata = sourceResult.agent_result?.metadata;
|
|
27
|
+
if (bundle.run_id !== input.runId || result.run_id !== input.runId || result.status !== "succeeded"
|
|
28
|
+
|| metadata?.hitch_run_id !== input.runId || metadata.controller_runtime_id !== input.runtimeId
|
|
29
|
+
|| sha256JSON(sourceResult) !== identity.original_result_digest || config.task?.path !== input.taskDirectory
|
|
30
|
+
|| sourceResult.config !== undefined && sha256JSON(sourceResult.config) !== sha256JSON(config)
|
|
31
|
+
|| typeof sourceResult.id !== "string" || !sourceResult.id)
|
|
32
|
+
return unavailable("source-unavailable");
|
|
33
|
+
const taskDigest = await regradeTreeDigest(input.taskDirectory);
|
|
34
|
+
const regradeConfig = capturePortableHarborRegradeConfig(config, input.taskDirectory);
|
|
35
|
+
const artifacts = path.join(input.trialDirectory, "artifacts");
|
|
36
|
+
const artifactsDigest = await regradeTreeDigest(artifacts, MAX_SOURCE_BYTES);
|
|
37
|
+
await mkdir(input.destination, { recursive: false, mode: 0o700 });
|
|
38
|
+
created = true;
|
|
39
|
+
await writeFile(path.join(input.destination, "regrade-config.json"), `${JSON.stringify(regradeConfig)}\n`, { flag: "wx", mode: 0o600 });
|
|
40
|
+
await cp(artifacts, path.join(input.destination, "artifacts"), { recursive: true, force: false, errorOnExist: true, dereference: false, verbatimSymlinks: true });
|
|
41
|
+
const lifecycle = await regularFile(path.join(input.trialDirectory, "benchmark-lifecycle.json"));
|
|
42
|
+
const journal = JSON.parse(lifecycle.toString());
|
|
43
|
+
if (journal.schema_version !== "1" || journal.failure !== null || !journal.phases || typeof journal.phases !== "object" || Array.isArray(journal.phases))
|
|
44
|
+
throw invalid("source lifecycle is incomplete");
|
|
45
|
+
await writeFile(path.join(input.destination, "benchmark-lifecycle.json"), lifecycle, { flag: "wx", mode: 0o600 });
|
|
46
|
+
const response = await regularFile(path.join(input.trialDirectory, "hitch-final-response.json")).catch(error => {
|
|
47
|
+
if (error.code === "ENOENT")
|
|
48
|
+
return null;
|
|
49
|
+
throw error;
|
|
50
|
+
});
|
|
51
|
+
if (response) {
|
|
52
|
+
const exported = JSON.parse(response.toString());
|
|
53
|
+
if (exported.schema_version !== "1" || exported.source !== "hitch-run-result" || exported.run_id !== input.runId
|
|
54
|
+
|| exported.termination !== result.status || typeof result.output !== "string" || exported.response !== result.output)
|
|
55
|
+
throw invalid("source response differs from the sealed candidate");
|
|
56
|
+
await writeFile(path.join(input.destination, "hitch-final-response.json"), response, { flag: "wx", mode: 0o600 });
|
|
57
|
+
}
|
|
58
|
+
if (await regradeTreeDigest(artifacts, MAX_SOURCE_BYTES) !== artifactsDigest
|
|
59
|
+
|| await regradeTreeDigest(path.join(input.destination, "artifacts"), MAX_SOURCE_BYTES) !== artifactsDigest
|
|
60
|
+
|| await regradeTreeDigest(input.taskDirectory) !== taskDigest
|
|
61
|
+
|| sha256JSON(await verifyResultBundleIndex(input.bundleDirectory)) !== sha256JSON(bundle))
|
|
62
|
+
throw invalid("source changed while capturing verifier inputs");
|
|
63
|
+
const manifest = { ...identity, status: "available", source_bundle_digest: sha256JSON(bundle),
|
|
64
|
+
source_config_digest: sha256JSON(config), regrade_config_digest: sha256JSON(regradeConfig), task_digest: taskDigest, artifacts_digest: artifactsDigest,
|
|
65
|
+
snapshot_digest: await regradeTreeDigest(input.destination, MAX_SOURCE_BYTES) };
|
|
66
|
+
return { manifest: parseRemoteVerifierSourceManifest(manifest), directory: input.destination };
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
if (created)
|
|
70
|
+
await rm(input.destination, { recursive: true, force: true });
|
|
71
|
+
return unavailable("source-unavailable");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export function parseRemoteVerifierSourceManifest(value) {
|
|
75
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
76
|
+
throw invalid("verifier source manifest is invalid");
|
|
77
|
+
const r = value;
|
|
78
|
+
const keys = ["schema_version", "task_id", "trial_id", "run_id", "controller_runtime_id", "source_result_digest",
|
|
79
|
+
...(r.original_result_digest !== undefined ? ["original_result_digest"] : []),
|
|
80
|
+
...(r.status === "available" ? ["status", "source_bundle_digest", "source_config_digest", "task_digest", "artifacts_digest", "snapshot_digest", ...(r.regrade_config_digest !== undefined ? ["regrade_config_digest"] : [])] : ["status", "reason"])];
|
|
81
|
+
if (Object.keys(r).sort().join(",") !== keys.sort().join(",") || r.schema_version !== "2"
|
|
82
|
+
|| typeof r.task_id !== "string" || !r.task_id || r.task_id.length > 512
|
|
83
|
+
|| typeof r.trial_id !== "string" || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,255}$/.test(r.trial_id)
|
|
84
|
+
|| typeof r.run_id !== "string" || !/^run_[a-f0-9]{32}$/.test(r.run_id)
|
|
85
|
+
|| ![r.controller_runtime_id, r.source_result_digest, ...(r.original_result_digest !== undefined ? [r.original_result_digest] : [])].every(v => typeof v === "string" && SHA.test(v))
|
|
86
|
+
|| !(r.status === "available" && [r.source_bundle_digest, r.source_config_digest, r.task_digest, r.artifacts_digest, r.snapshot_digest, ...(r.regrade_config_digest !== undefined ? [r.regrade_config_digest] : [])].every(v => typeof v === "string" && SHA.test(v))
|
|
87
|
+
|| r.status === "unavailable" && typeof r.reason === "string" && ["unsupported-task", "source-unavailable", "source-too-large"].includes(r.reason)))
|
|
88
|
+
throw invalid("verifier source manifest identity is invalid");
|
|
89
|
+
return structuredClone(r);
|
|
90
|
+
}
|
|
91
|
+
export async function verifyRemoteVerifierSourceSnapshot(input) {
|
|
92
|
+
const m = parseRemoteVerifierSourceManifest(input.manifest);
|
|
93
|
+
if (m.status !== "available" || m.source_bundle_digest !== sha256JSON(await verifyResultBundleIndex(input.bundleDirectory)))
|
|
94
|
+
throw invalid("verifier source bundle digest mismatch");
|
|
95
|
+
await verifyRemoteVerifierSourceContents(input);
|
|
96
|
+
}
|
|
97
|
+
export async function verifyRemoteVerifierSourceContents(input) {
|
|
98
|
+
const m = parseRemoteVerifierSourceManifest(input.manifest);
|
|
99
|
+
if (m.status !== "available" || m.task_digest !== await regradeTreeDigest(input.taskDirectory)
|
|
100
|
+
|| m.artifacts_digest !== await regradeTreeDigest(path.join(input.snapshotDirectory, "artifacts"), MAX_SOURCE_BYTES)
|
|
101
|
+
|| m.snapshot_digest !== await regradeTreeDigest(input.snapshotDirectory, MAX_SOURCE_BYTES))
|
|
102
|
+
throw invalid("verifier source snapshot digest mismatch");
|
|
103
|
+
if (m.regrade_config_digest) {
|
|
104
|
+
const config = parsePortableHarborRegradeConfig(JSON.parse((await regularFile(path.join(input.snapshotDirectory, "regrade-config.json"))).toString()));
|
|
105
|
+
if (sha256JSON(config) !== m.regrade_config_digest || config.source_config_digest !== m.source_config_digest)
|
|
106
|
+
throw invalid("verifier source config digest mismatch");
|
|
107
|
+
}
|
|
108
|
+
const task = parseTOML(await readFile(path.join(input.taskDirectory, "task.toml"), "utf8"));
|
|
109
|
+
const journal = JSON.parse((await regularFile(path.join(input.snapshotDirectory, "benchmark-lifecycle.json"))).toString());
|
|
110
|
+
if (task.steps || task.verifier?.environment_mode !== "separate"
|
|
111
|
+
|| journal.schema_version !== "1" || journal.failure !== null || !journal.phases || typeof journal.phases !== "object" || Array.isArray(journal.phases))
|
|
112
|
+
throw invalid("verifier source lifecycle/task contract is invalid");
|
|
113
|
+
const response = await regularFile(path.join(input.snapshotDirectory, "hitch-final-response.json")).catch(error => {
|
|
114
|
+
if (error.code === "ENOENT")
|
|
115
|
+
return null;
|
|
116
|
+
throw error;
|
|
117
|
+
});
|
|
118
|
+
if (response) {
|
|
119
|
+
const exported = JSON.parse(response.toString());
|
|
120
|
+
const result = await readJSON(path.join(input.bundleDirectory, "result.json"));
|
|
121
|
+
if (exported.schema_version !== "1" || exported.source !== "hitch-run-result" || exported.run_id !== m.run_id
|
|
122
|
+
|| exported.termination !== result.status || result.status !== "succeeded" || typeof result.output !== "string" || exported.response !== result.output)
|
|
123
|
+
throw invalid("source response differs from the sealed candidate");
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async function regularFile(file) {
|
|
127
|
+
const handle = await open(file, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
|
|
128
|
+
try {
|
|
129
|
+
const stat = await handle.stat();
|
|
130
|
+
if (!stat.isFile() || stat.nlink !== 1 || stat.size > 8 * 1024 * 1024)
|
|
131
|
+
throw invalid("unsafe verifier source receipt");
|
|
132
|
+
return await handle.readFile();
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
await handle.close();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function invalid(message) { return new HitchError(message, { code: "remote_verifier_source_invalid", exitCode: 12 }); }
|
|
139
|
+
//# sourceMappingURL=verifier-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier-source.js","sourceRoot":"","sources":["../../../src/evals/verifier-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Validate padded Base64 without recursive regex groups on large artifacts. */
|
|
2
|
+
export function isBase64(value) {
|
|
3
|
+
if (value.length % 4 !== 0)
|
|
4
|
+
return false;
|
|
5
|
+
let end = value.length;
|
|
6
|
+
if (end > 0 && value.charCodeAt(end - 1) === 61)
|
|
7
|
+
end--;
|
|
8
|
+
if (end > 0 && value.charCodeAt(end - 1) === 61)
|
|
9
|
+
end--;
|
|
10
|
+
for (let index = 0; index < end; index++) {
|
|
11
|
+
const code = value.charCodeAt(index);
|
|
12
|
+
if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)
|
|
13
|
+
|| (code >= 48 && code <= 57) || code === 43 || code === 47)
|
|
14
|
+
continue;
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../../src/foundation/base64.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,CAAC;IACvD,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,CAAC;IACvD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC;eACxD,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE;YAAE,SAAS;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -50,6 +50,16 @@ export function statePaths(root) {
|
|
|
50
50
|
environmentImages: path.join(root, "store", "environment-images", "sha256"),
|
|
51
51
|
environmentImagePins: path.join(root, "store", "environment-image-pins", "sha256"),
|
|
52
52
|
environmentImageReferenceLocks: path.join(root, "locks", "environment-image-references"),
|
|
53
|
+
modelFiles: path.join(root, "store", "model-files", "sha256"),
|
|
54
|
+
models: path.join(root, "store", "models", "sha256"),
|
|
55
|
+
modelAliases: path.join(root, "indexes", "models", "aliases.json"),
|
|
56
|
+
inferenceRuntimes: path.join(root, "store", "inference-runtimes", "sha256"),
|
|
57
|
+
inferenceLocks: path.join(root, "store", "inference-locks", "sha256"),
|
|
58
|
+
inferenceNodes: path.join(root, "private", "inference-nodes"),
|
|
59
|
+
inferenceServices: path.join(root, "inference", "services"),
|
|
60
|
+
inferencePrivate: path.join(root, "inference", "private"),
|
|
61
|
+
inferenceOperationLocks: path.join(root, "locks", "inference"),
|
|
62
|
+
inferenceCache: path.join(root, "cache", "inference"),
|
|
53
63
|
buildRecords: path.join(root, "store", "build-records", "sha256"),
|
|
54
64
|
buildLocks: path.join(root, "locks", "builds"),
|
|
55
65
|
buildIndexes: path.join(root, "indexes", "builds"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/foundation/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/foundation/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export const PROVIDER_ENVIRONMENT_NAMES = [
|
|
|
9
9
|
];
|
|
10
10
|
const OVERSIZED_LINE_MARKER = "[REDACTED OVERSIZED LOG LINE]";
|
|
11
11
|
const DEFAULT_MAX_LINE_BYTES = 1024 * 1024;
|
|
12
|
+
const MAX_STRUCTURED_CREDENTIAL_BYTES = 256 * 1024;
|
|
12
13
|
const TEXT_RULES = [
|
|
13
14
|
{ id: "authorization-bearer-v1", pattern: /\bBearer\s+[A-Za-z0-9._~+\/-]{8,}/gi, replacement: `Bearer ${CREDENTIAL_REDACTION_MARKER}` },
|
|
14
15
|
{ id: "provider-api-key-v1", pattern: /\b(?:sk|rk|pk)-[A-Za-z0-9_-]{12,}\b/g, replacement: CREDENTIAL_REDACTION_MARKER },
|
|
@@ -78,22 +79,34 @@ export function credentialValuesFromEnv(names, env) {
|
|
|
78
79
|
values.push(value);
|
|
79
80
|
// Structured credential files can be handed off as one environment value.
|
|
80
81
|
// Also redact their opaque strings when a client prints a nested token.
|
|
81
|
-
|
|
82
|
+
collectStructuredCredential(value, values);
|
|
83
|
+
if (name.endsWith("_B64") && Buffer.byteLength(value) <= MAX_STRUCTURED_CREDENTIAL_BYTES * 2
|
|
84
|
+
&& /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(value)) {
|
|
82
85
|
try {
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
else if (entry && typeof entry === "object")
|
|
87
|
-
Object.values(entry).forEach(collect);
|
|
88
|
-
};
|
|
89
|
-
collect(JSON.parse(value));
|
|
86
|
+
const decoded = Buffer.from(value, "base64");
|
|
87
|
+
if (decoded.byteLength <= MAX_STRUCTURED_CREDENTIAL_BYTES)
|
|
88
|
+
collectStructuredCredential(decoded.toString("utf8"), values);
|
|
90
89
|
}
|
|
91
|
-
catch { /*
|
|
90
|
+
catch { /* The exact encoded value remains protected. */ }
|
|
92
91
|
}
|
|
93
92
|
}
|
|
94
93
|
}
|
|
95
94
|
return [...new Set(values)].sort((left, right) => right.length - left.length || left.localeCompare(right));
|
|
96
95
|
}
|
|
96
|
+
function collectStructuredCredential(value, values) {
|
|
97
|
+
if (!value.trimStart().startsWith("{") || Buffer.byteLength(value) > MAX_STRUCTURED_CREDENTIAL_BYTES)
|
|
98
|
+
return;
|
|
99
|
+
try {
|
|
100
|
+
const collect = (entry) => {
|
|
101
|
+
if (typeof entry === "string" && entry.length >= 16)
|
|
102
|
+
values.push(entry);
|
|
103
|
+
else if (entry && typeof entry === "object")
|
|
104
|
+
Object.values(entry).forEach(collect);
|
|
105
|
+
};
|
|
106
|
+
collect(JSON.parse(value));
|
|
107
|
+
}
|
|
108
|
+
catch { /* Opaque non-JSON credentials retain the exact-value rule. */ }
|
|
109
|
+
}
|
|
97
110
|
export function createCredentialRedactionTransform(credentialValues, maxLineBytes = DEFAULT_MAX_LINE_BYTES) {
|
|
98
111
|
if (!Number.isSafeInteger(maxLineBytes) || maxLineBytes < 1)
|
|
99
112
|
throw new TypeError("redaction max line bytes must be positive");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-redaction.js","sourceRoot":"","sources":["../../../src/foundation/credential-redaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,2BAA2B,GAAG,YAAY,CAAC;AACxD,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,kBAAkB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,qBAAqB;IACpH,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,gBAAgB;IAChI,sBAAsB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,uBAAuB;IACzH,mBAAmB,EAAE,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,UAAU;CAC3E,CAAC;AACX,MAAM,qBAAqB,GAAG,+BAA+B,CAAC;AAC9D,MAAM,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"credential-redaction.js","sourceRoot":"","sources":["../../../src/foundation/credential-redaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,5 +11,6 @@ export { packageRoot, packageVersion } from "./package-root.js";
|
|
|
11
11
|
export { delay, terminateProcess } from "./process.js";
|
|
12
12
|
export { commandExecutable, commandVersion, detectVersion, fingerprintExecutable, prepareSpawnCommand, resolveExecutable, runCommand, selectVersionLine } from "./executable.js";
|
|
13
13
|
export { canonicalJSON, digest, sha256Bytes, sha256JSON } from "./hash.js";
|
|
14
|
+
export { isBase64 } from "./base64.js";
|
|
14
15
|
export { CREDENTIAL_REDACTION_MARKER, PROVIDER_ENVIRONMENT_NAMES, createCredentialRedactionTransform, credentialValuesFromEnv, isSensitiveFieldName, redactCredentialText, safeDiagnosticMessage } from "./credential-redaction.js";
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/foundation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzJ,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC7G,OAAO,EAAE,wBAAwB,EAA6B,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGhH,OAAO,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,iCAAiC,EAAE,mCAAmC,EAAE,MAAM,mCAAmC,CAAC;AAElM,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEjL,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,kCAAkC,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/foundation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzJ,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC7G,OAAO,EAAE,wBAAwB,EAA6B,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGhH,OAAO,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,iCAAiC,EAAE,mCAAmC,EAAE,MAAM,mCAAmC,CAAC;AAElM,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEjL,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,kCAAkC,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import { sha256JSON } from "./hash.js";
|
|
3
3
|
export async function captureProcessIdentity(pid) {
|
|
4
4
|
const snapshot = await processSnapshot(pid);
|
|
5
|
-
if (!snapshot || terminalState(snapshot.state))
|
|
5
|
+
if (!snapshot || snapshot === "unavailable" || terminalState(snapshot.state))
|
|
6
6
|
return null;
|
|
7
7
|
return {
|
|
8
8
|
pid,
|
|
@@ -13,6 +13,8 @@ export async function captureProcessIdentity(pid) {
|
|
|
13
13
|
export async function inspectProcessIdentity(identity) {
|
|
14
14
|
validateProcessIdentity(identity);
|
|
15
15
|
const snapshot = await processSnapshot(identity.pid);
|
|
16
|
+
if (snapshot === "unavailable")
|
|
17
|
+
return "unavailable";
|
|
16
18
|
if (!snapshot)
|
|
17
19
|
return "terminal";
|
|
18
20
|
const current = sha256JSON({ pid: identity.pid, started: snapshot.started, command: snapshot.command });
|
|
@@ -36,31 +38,33 @@ async function processSnapshot(pid) {
|
|
|
36
38
|
if (!Number.isSafeInteger(pid) || pid < 1)
|
|
37
39
|
throw new TypeError("process pid must be a positive safe integer");
|
|
38
40
|
if (process.platform === "win32")
|
|
39
|
-
return
|
|
41
|
+
return "unavailable";
|
|
40
42
|
const output = await runPs(pid);
|
|
41
|
-
if (output.code === 1 && output.stdout.trim() === "")
|
|
43
|
+
if (output.code === 1 && output.stdout.trim() === "" && output.stderr.trim() === "")
|
|
42
44
|
return null;
|
|
43
45
|
if (output.code !== 0)
|
|
44
|
-
return
|
|
46
|
+
return "unavailable";
|
|
45
47
|
const fields = output.stdout.trim().split(/\s+/);
|
|
46
48
|
if (fields.length < 7)
|
|
47
|
-
return
|
|
49
|
+
return "unavailable";
|
|
48
50
|
const state = fields.at(-1);
|
|
49
51
|
const command = fields.at(-2);
|
|
50
52
|
const started = fields.slice(0, -2).join(" ");
|
|
51
|
-
return started && command && state ? { started, command, state } :
|
|
53
|
+
return started && command && state ? { started, command, state } : "unavailable";
|
|
52
54
|
}
|
|
53
55
|
function runPs(pid) {
|
|
54
56
|
return new Promise((resolve) => {
|
|
55
57
|
const child = spawn("/bin/ps", ["-o", "lstart=", "-o", "comm=", "-o", "stat=", "-p", String(pid)], {
|
|
56
58
|
env: { PATH: "/usr/bin:/bin", LC_ALL: "C" },
|
|
57
|
-
stdio: ["ignore", "pipe", "
|
|
59
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
58
60
|
windowsHide: true,
|
|
59
61
|
});
|
|
60
62
|
let stdout = "";
|
|
63
|
+
let stderr = "";
|
|
61
64
|
child.stdout.on("data", (chunk) => { stdout = `${stdout}${chunk.toString("utf8")}`.slice(-8_192); });
|
|
62
|
-
child.
|
|
63
|
-
child.once("
|
|
65
|
+
child.stderr.on("data", (chunk) => { stderr = `${stderr}${chunk.toString("utf8")}`.slice(-8_192); });
|
|
66
|
+
child.once("error", () => resolve({ code: null, stdout: "", stderr: "process observation failed" }));
|
|
67
|
+
child.once("close", (code) => resolve({ code, stdout, stderr }));
|
|
64
68
|
});
|
|
65
69
|
}
|
|
66
70
|
function terminalState(state) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-identity.js","sourceRoot":"","sources":["../../../src/foundation/process-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAUvC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,GAAW;IACtD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"process-identity.js","sourceRoot":"","sources":["../../../src/foundation/process-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { statfs } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { runCommand } from "../foundation/index.js";
|
|
4
|
+
/** Supply optional resource dimensions for the automatically started daemon.
|
|
5
|
+
* Explicit user limits, including zero, always take precedence. */
|
|
6
|
+
export async function localInferenceDaemonEnvironment(root, env = process.env, options = {}) {
|
|
7
|
+
const result = { ...env };
|
|
8
|
+
if (result.HITCH_CAPACITY_EPHEMERAL_DISK_MIB === undefined) {
|
|
9
|
+
const bytes = await (options.freeDiskBytes ?? availableDiskBytes)(root);
|
|
10
|
+
result.HITCH_CAPACITY_EPHEMERAL_DISK_MIB = String(Math.floor(bytes / 1024 ** 2));
|
|
11
|
+
}
|
|
12
|
+
if (result.HITCH_CAPACITY_GPUS === undefined) {
|
|
13
|
+
try {
|
|
14
|
+
const invoke = options.run ?? ((executable, args) => runCommand(executable, args, {
|
|
15
|
+
env, timeoutMs: 5_000, failureCode: "gpu_detection_failed",
|
|
16
|
+
}));
|
|
17
|
+
const observed = await invoke(env.HITCH_NVIDIA_SMI_PATH || "nvidia-smi", ["-L"]);
|
|
18
|
+
const count = observed.stdout.split(/\r?\n/).filter((line) => /^GPU \d+:/.test(line)).length;
|
|
19
|
+
if (count > 0)
|
|
20
|
+
result.HITCH_CAPACITY_GPUS = String(count);
|
|
21
|
+
}
|
|
22
|
+
catch { /* CPU-only daemon capacity remains valid. */ }
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
async function availableDiskBytes(directory) {
|
|
27
|
+
let current = path.resolve(directory);
|
|
28
|
+
for (;;) {
|
|
29
|
+
try {
|
|
30
|
+
const info = await statfs(current, { bigint: true });
|
|
31
|
+
return Number(info.bavail * info.bsize);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
const parent = path.dirname(current);
|
|
35
|
+
if (error.code !== "ENOENT" || parent === current)
|
|
36
|
+
throw error;
|
|
37
|
+
current = parent;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=daemon-capacity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-capacity.js","sourceRoot":"","sources":["../../../src/inference/daemon-capacity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD;mEACmE;AACnE,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,IAAY,EAAE,MAAyB,OAAO,CAAC,GAAG,EAAE,UAGtG,EAAE;IACJ,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC1B,IAAI,MAAM,CAAC,iCAAiC,KAAK,SAAS,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,CAAC,iCAAiC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,UAAkB,EAAE,IAAc,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE;gBAClG,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,sBAAsB;aAC3D,CAAC,CAAC,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,IAAI,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACjF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7F,IAAI,KAAK,GAAG,CAAC;gBAAE,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC,CAAC,6CAA6C,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACjD,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,SAAS,CAAC;QACR,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,KAAK,OAAO;gBAAE,MAAM,KAAK,CAAC;YAC1F,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { mkdir, readdir, rm } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { HitchError, atomicWriteJSON, hitchRootId, readJSON, sha256JSON, withFileLock } from "../foundation/index.js";
|
|
5
|
+
export const defaultDeviceReservationDirectory = () => path.join(homedir(), ".cache", "agent-hitch", "inference-devices");
|
|
6
|
+
export async function reservedInferenceDevices(directory = defaultDeviceReservationDirectory()) {
|
|
7
|
+
let files;
|
|
8
|
+
try {
|
|
9
|
+
files = await readdir(directory);
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
if (error.code === "ENOENT")
|
|
13
|
+
return [];
|
|
14
|
+
throw error;
|
|
15
|
+
}
|
|
16
|
+
const devices = [];
|
|
17
|
+
for (const name of files.filter((name) => /^[a-f0-9]{64}\.json$/.test(name))) {
|
|
18
|
+
const record = await readJSON(path.join(directory, name), null);
|
|
19
|
+
if (record?.gpu_uuid)
|
|
20
|
+
devices.push(record.gpu_uuid);
|
|
21
|
+
}
|
|
22
|
+
return devices;
|
|
23
|
+
}
|
|
24
|
+
/** Survives daemon death. Only confirmed container cleanup releases a reservation;
|
|
25
|
+
* a dead PID alone is never evidence that a GPU is free. Shared across Hitch roots. */
|
|
26
|
+
export async function reserveInferenceDevice(directory, root, serviceId, gpuUuid) {
|
|
27
|
+
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
28
|
+
const key = sha256JSON(gpuUuid).slice(7);
|
|
29
|
+
await withFileLock(directory, key, async () => {
|
|
30
|
+
const file = path.join(directory, `${key}.json`);
|
|
31
|
+
const existing = await readJSON(file, null);
|
|
32
|
+
if (existing)
|
|
33
|
+
throw new HitchError(`GPU ${gpuUuid} is reserved by another inference service; stop or recover its owning Hitch daemon first`, {
|
|
34
|
+
code: "inference_device_in_use", exitCode: 12,
|
|
35
|
+
});
|
|
36
|
+
await atomicWriteJSON(file, { root_id: hitchRootId(root), service_id: serviceId, gpu_uuid: gpuUuid });
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
export async function releaseInferenceDevice(directory, root, serviceId) {
|
|
40
|
+
let files;
|
|
41
|
+
try {
|
|
42
|
+
files = await readdir(directory);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (error.code === "ENOENT")
|
|
46
|
+
return;
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
for (const name of files.filter((name) => /^[a-f0-9]{64}\.json$/.test(name))) {
|
|
50
|
+
await withFileLock(directory, name.slice(0, -5), async () => {
|
|
51
|
+
const file = path.join(directory, name);
|
|
52
|
+
const record = await readJSON(file, null);
|
|
53
|
+
if (record?.root_id === hitchRootId(root) && record.service_id === serviceId)
|
|
54
|
+
await rm(file);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=device-reservation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-reservation.js","sourceRoot":"","sources":["../../../src/inference/device-reservation.ts"],"names":[],"mappings":"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"}
|