spawnfile 0.1.33 → 0.1.35
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 +1 -1
- package/dist/audit/readAudit.d.ts +3 -3
- package/dist/auth/profileStore.d.ts +3 -1
- package/dist/auth/profileStore.js +31 -30
- package/dist/auth/trainingAuth.d.ts +2 -5
- package/dist/auth/types.d.ts +16 -0
- package/dist/cli/authCommands.d.ts +1 -1
- package/dist/cli/authCommands.js +21 -1
- package/dist/cli/devCommands.d.ts +1 -1
- package/dist/cli/devCommands.js +0 -66
- package/dist/cli/runCli.d.ts +3 -4
- package/dist/cli/runCli.js +4 -3
- package/dist/cli/trainCommand.js +9 -15
- package/dist/cli/trainingBooted.d.ts +9 -0
- package/dist/cli/trainingBooted.js +45 -0
- package/dist/cli/trainingExecution.d.ts +4 -7
- package/dist/cli/trainingExecution.js +4 -32
- package/dist/compiler/containerArtifacts.js +0 -5
- package/dist/compiler/containerBackedMountRender.js +5 -1
- package/dist/compiler/containerDaimonBrokerRender.d.ts +5 -50
- package/dist/compiler/containerDaimonBrokerRender.js +19 -90
- package/dist/compiler/containerDaimonGatewayRender.d.ts +50 -0
- package/dist/compiler/containerDaimonGatewayRender.js +161 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +2 -10
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +13 -25
- package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +11 -49
- package/dist/compiler/containerDaimonGrokWorkerRender.js +15 -39
- package/dist/compiler/containerDaimonStartupSupervision.d.ts +8 -0
- package/dist/compiler/containerDaimonStartupSupervision.js +39 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +1 -2
- package/dist/compiler/containerDaimonUidEntrypointRender.js +29 -47
- package/dist/compiler/containerRuntimeReadinessRender.js +1 -1
- package/dist/compiler/memoryArtifacts.js +0 -1
- package/dist/compiler/moltnetArtifacts.js +1 -17
- package/dist/compiler/moltnetClientConfig.js +1 -1
- package/dist/compiler/moltnetRuntimeConfig.js +0 -10
- package/dist/compiler/runProject.d.ts +3 -0
- package/dist/compiler/runProject.js +12 -5
- package/dist/compiler/runProjectAuth.js +6 -18
- package/dist/compiler/training/contract.d.ts +0 -2
- package/dist/compiler/training/contract.js +0 -2
- package/dist/compiler/training/execution.d.ts +1 -128
- package/dist/compiler/training/execution.js +7 -68
- package/dist/compiler/training/index.d.ts +0 -8
- package/dist/compiler/training/index.js +0 -7
- package/dist/compiler/training/output.d.ts +1 -0
- package/dist/compiler/training/output.js +1 -1
- package/dist/compiler/training/rewind/contract.d.ts +6 -6
- package/dist/compiler/training/trial/boot.d.ts +72 -0
- package/dist/compiler/training/trial/boot.js +225 -0
- package/dist/compiler/training/trial/docker.d.ts +10 -0
- package/dist/compiler/training/trial/docker.js +22 -0
- package/dist/compiler/training/trial/gateway.d.ts +47 -0
- package/dist/compiler/training/trial/gateway.js +113 -0
- package/dist/compiler/training/trial/homeLogin.d.ts +31 -0
- package/dist/compiler/training/trial/homeLogin.js +69 -0
- package/dist/compiler/training/trial/index.d.ts +8 -0
- package/dist/compiler/training/trial/index.js +8 -0
- package/dist/compiler/training/trial/judge.d.ts +15 -0
- package/dist/compiler/training/trial/judge.js +42 -0
- package/dist/compiler/training/trial/launcher.d.ts +47 -0
- package/dist/compiler/training/trial/launcher.js +193 -0
- package/dist/compiler/training/trial/login.d.ts +35 -0
- package/dist/compiler/training/trial/login.js +85 -0
- package/dist/compiler/training/trial/project.d.ts +11 -0
- package/dist/compiler/training/trial/project.js +31 -0
- package/dist/compiler/training/trial/realmTurns.d.ts +20 -0
- package/dist/compiler/training/trial/realmTurns.js +69 -0
- package/dist/compiler/upReceipt.d.ts +2 -17
- package/dist/compiler/upReceipt.js +2 -17
- package/dist/deployment/artifactsExportPlan.js +2 -18
- package/dist/deployment/privateArtifactsExport.js +1 -1
- package/dist/dev/docker.d.ts +0 -5
- package/dist/dev/docker.js +0 -46
- package/dist/dev/index.d.ts +0 -1
- package/dist/dev/index.js +0 -1
- package/dist/dev/project.d.ts +0 -16
- package/dist/dev/project.js +1 -128
- package/dist/distribution/distributionReportSchema.js +1 -1
- package/dist/distribution/imageRuntimeAuth.js +3 -2
- package/dist/manifest/renderSpawnfile.js +2 -1
- package/dist/release/drainControl.d.ts +5 -19
- package/dist/release/drainControl.js +12 -67
- package/dist/report/types.d.ts +3 -6
- package/dist/runtime/common.d.ts +1 -1
- package/dist/runtime/common.js +1 -1
- package/dist/runtime/container.d.ts +2 -2
- package/dist/runtime/container.js +1 -39
- package/dist/runtime/daimon/config.js +8 -14
- package/dist/runtime/daimon/contractManifest.js +0 -1
- package/dist/runtime/daimon/contractManifestSchema.js +0 -1
- package/dist/runtime/daimon/control.d.ts +31 -0
- package/dist/runtime/daimon/control.js +83 -0
- package/dist/runtime/daimon/engineDescriptorSchema.js +0 -1
- package/dist/runtime/daimon/engineDescriptors.generated.d.ts +1 -1
- package/dist/runtime/daimon/engineDescriptors.generated.js +1 -2
- package/dist/runtime/daimon/engines.js +0 -1
- package/dist/runtime/daimon/gateway.d.ts +62 -0
- package/dist/runtime/daimon/gateway.js +77 -0
- package/dist/runtime/daimon/grokWorkerContract.d.ts +0 -5
- package/dist/runtime/daimon/grokWorkerContract.js +1 -13
- package/dist/runtime/daimon/index.d.ts +2 -0
- package/dist/runtime/daimon/index.js +2 -1
- package/dist/runtime/daimon/memory.js +1 -1
- package/dist/runtime/daimon/packageName.js +0 -1
- package/dist/runtime/daimon/runAuth.js +15 -4
- package/dist/runtime/daimon/runtimeIdentity.d.ts +2 -0
- package/dist/runtime/daimon/runtimeIdentity.js +2 -0
- package/dist/runtime/daimon/subscriptionRealms.d.ts +27 -3
- package/dist/runtime/daimon/subscriptionRealms.js +35 -13
- package/dist/runtime/daimon/testHelpers.d.ts +2 -0
- package/dist/runtime/{pi → daimon}/testHelpers.js +3 -3
- package/dist/runtime/daimon/training/booted/adapter.d.ts +50 -0
- package/dist/runtime/daimon/training/booted/adapter.js +60 -0
- package/dist/runtime/daimon/training/booted/adapter.js.map +1 -0
- package/dist/runtime/daimon/training/booted/index.d.ts +4 -0
- package/dist/runtime/daimon/training/booted/index.js +3 -0
- package/dist/runtime/daimon/training/booted/index.js.map +1 -0
- package/dist/runtime/daimon/training/booted/judge.d.ts +39 -0
- package/dist/runtime/daimon/training/booted/judge.js +122 -0
- package/dist/runtime/daimon/training/booted/judge.js.map +1 -0
- package/dist/runtime/daimon/training/index.d.ts +5 -0
- package/dist/runtime/daimon/training/index.js +8 -4
- package/dist/runtime/daimon/training/index.js.map +1 -1
- package/dist/runtime/daimon/wakeMoments.js +0 -1
- package/dist/runtime/install.js +0 -21
- package/dist/runtime/registry.js +0 -2
- package/dist/runtime/trainingGraderProviders.js +10 -4
- package/dist/runtime/trainingProviders.d.ts +5 -3
- package/dist/runtime/trainingProviders.js +21 -24
- package/dist/runtime/trainingSubjects.d.ts +0 -121
- package/dist/runtime/trainingSubjects.js +2 -13
- package/dist/runtime/types.d.ts +1 -8
- package/dist/runtime/usageRequestLedger.d.ts +2 -0
- package/dist/runtime/usageRequestLedger.js +3 -1
- package/dist/shared/errors.js +0 -1
- package/dist/shared/trainingLegacy/trainingLegacyHashDomains.d.ts +1 -0
- package/dist/shared/trainingLegacy/trainingLegacyHashDomains.js +1 -0
- package/dist/shared/trainingLegacy/trainingLegacyHashDomains.js.map +1 -1
- package/dist/status/lifecycleProbes.js +3 -6
- package/dist/status/moltnetWiringProbes.js +1 -17
- package/dist/training/subjects/index.d.ts +0 -1
- package/dist/training/subjects/index.js +0 -1
- package/dist/training/subjects/index.js.map +1 -1
- package/examples/README.md +0 -1
- package/examples/daimon-org/agents/mapper/Spawnfile +4 -1
- package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +4 -1
- package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +1 -1
- package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +1 -1
- package/examples/mixed-runtime-org/agents/localist/Spawnfile +7 -7
- package/package.json +4 -13
- package/runtimes.yaml +5 -15
- package/dist/compiler/containerDaimonGrokTaskClock.d.ts +0 -5
- package/dist/compiler/containerDaimonGrokTaskClock.js +0 -29
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +0 -22
- package/dist/compiler/daimonTelemetryArtifacts.js +0 -56
- package/dist/compiler/training/broker/clockProbe.d.ts +0 -6
- package/dist/compiler/training/broker/clockProbe.js +0 -27
- package/dist/compiler/training/broker/declaration.d.ts +0 -54
- package/dist/compiler/training/broker/declaration.js +0 -70
- package/dist/compiler/training/broker/entrypoint.d.ts +0 -39
- package/dist/compiler/training/broker/entrypoint.js +0 -124
- package/dist/compiler/training/broker/evaluatorSecrets.d.ts +0 -2
- package/dist/compiler/training/broker/evaluatorSecrets.js +0 -62
- package/dist/compiler/training/broker/index.d.ts +0 -12
- package/dist/compiler/training/broker/index.js +0 -12
- package/dist/compiler/training/broker/main.d.ts +0 -2
- package/dist/compiler/training/broker/main.js +0 -14
- package/dist/compiler/training/broker/paths.d.ts +0 -236
- package/dist/compiler/training/broker/paths.js +0 -249
- package/dist/compiler/training/broker/processes.d.ts +0 -51
- package/dist/compiler/training/broker/processes.js +0 -102
- package/dist/compiler/training/broker/projection.d.ts +0 -61
- package/dist/compiler/training/broker/projection.js +0 -109
- package/dist/compiler/training/broker/provisioning.d.ts +0 -78
- package/dist/compiler/training/broker/provisioning.js +0 -231
- package/dist/compiler/training/broker/receipt.d.ts +0 -77
- package/dist/compiler/training/broker/receipt.js +0 -110
- package/dist/compiler/training/broker/recycleClient.d.ts +0 -33
- package/dist/compiler/training/broker/recycleClient.js +0 -112
- package/dist/compiler/training/broker/registration.d.ts +0 -46
- package/dist/compiler/training/broker/registration.js +0 -113
- package/dist/compiler/training/broker/reset.d.ts +0 -9
- package/dist/compiler/training/broker/reset.js +0 -71
- package/dist/compiler/training/broker/rootScript.d.ts +0 -32
- package/dist/compiler/training/broker/rootScript.js +0 -33
- package/dist/compiler/training/broker/runtime.d.ts +0 -22
- package/dist/compiler/training/broker/runtime.js +0 -128
- package/dist/compiler/training/broker/seccompRoutes.d.ts +0 -31
- package/dist/compiler/training/broker/seccompRoutes.js +0 -36
- package/dist/compiler/training/broker/supervisor.d.ts +0 -108
- package/dist/compiler/training/broker/supervisor.js +0 -172
- package/dist/compiler/training/broker/taskClock.d.ts +0 -5
- package/dist/compiler/training/broker/taskClock.js +0 -41
- package/dist/compiler/training/container/contract.d.ts +0 -54
- package/dist/compiler/training/container/contract.js +0 -52
- package/dist/compiler/training/container/evaluators.d.ts +0 -48
- package/dist/compiler/training/container/evaluators.js +0 -50
- package/dist/compiler/training/container/grokWriteback.d.ts +0 -8
- package/dist/compiler/training/container/grokWriteback.js +0 -26
- package/dist/compiler/training/container/index.d.ts +0 -5
- package/dist/compiler/training/container/index.js +0 -3
- package/dist/compiler/training/container/launch.d.ts +0 -21
- package/dist/compiler/training/container/launch.js +0 -280
- package/dist/compiler/training/container/nativeSlots.d.ts +0 -14
- package/dist/compiler/training/container/nativeSlots.js +0 -13
- package/dist/compiler/training/container/outputCopy.d.ts +0 -2
- package/dist/compiler/training/container/outputCopy.js +0 -72
- package/dist/compiler/training/container/outputVolume.d.ts +0 -28
- package/dist/compiler/training/container/outputVolume.js +0 -185
- package/dist/compiler/training/container/prepare.d.ts +0 -10
- package/dist/compiler/training/container/prepare.js +0 -125
- package/dist/compiler/training/container/process.d.ts +0 -14
- package/dist/compiler/training/container/process.js +0 -70
- package/dist/compiler/training/container/security.d.ts +0 -38
- package/dist/compiler/training/container/security.js +0 -68
- package/dist/compiler/training/container/subjectIsolation.d.ts +0 -5
- package/dist/compiler/training/container/subjectIsolation.js +0 -16
- package/dist/compiler/training/preparation/assets/Dockerfile +0 -100
- package/dist/compiler/training/preparation/assets/package-lock.json +0 -5483
- package/dist/compiler/training/preparation/broker.d.ts +0 -30
- package/dist/compiler/training/preparation/broker.js +0 -68
- package/dist/compiler/training/preparation/contextModes.d.ts +0 -12
- package/dist/compiler/training/preparation/contextModes.js +0 -38
- package/dist/compiler/training/preparation/contract.d.ts +0 -203
- package/dist/compiler/training/preparation/contract.js +0 -114
- package/dist/compiler/training/preparation/copyAssets.d.ts +0 -1
- package/dist/compiler/training/preparation/copyAssets.js +0 -8
- package/dist/compiler/training/preparation/daimonParent.d.ts +0 -42
- package/dist/compiler/training/preparation/daimonParent.js +0 -114
- package/dist/compiler/training/preparation/files.d.ts +0 -29
- package/dist/compiler/training/preparation/files.js +0 -146
- package/dist/compiler/training/preparation/image.d.ts +0 -28
- package/dist/compiler/training/preparation/image.js +0 -105
- package/dist/compiler/training/preparation/index.d.ts +0 -3
- package/dist/compiler/training/preparation/index.js +0 -2
- package/dist/compiler/training/preparation/inputs.d.ts +0 -24
- package/dist/compiler/training/preparation/inputs.js +0 -101
- package/dist/compiler/training/preparation/prepare.d.ts +0 -38
- package/dist/compiler/training/preparation/prepare.js +0 -224
- package/dist/compiler/training/preparation/scratch.d.ts +0 -8
- package/dist/compiler/training/preparation/scratch.js +0 -114
- package/dist/compiler/training/repair/compatibility.d.ts +0 -11
- package/dist/compiler/training/repair/compatibility.js +0 -45
- package/dist/compiler/training/repair/contract.d.ts +0 -832
- package/dist/compiler/training/repair/contract.js +0 -34
- package/dist/compiler/training/repair/index.d.ts +0 -3
- package/dist/compiler/training/repair/index.js +0 -3
- package/dist/compiler/training/repair/prepare.d.ts +0 -378
- package/dist/compiler/training/repair/prepare.js +0 -84
- package/dist/compiler/training/repair/witness.d.ts +0 -348
- package/dist/compiler/training/repair/witness.js +0 -62
- package/dist/compiler/training/subjectDeclaration.d.ts +0 -26
- package/dist/compiler/training/subjectDeclaration.js +0 -54
- package/dist/compiler/training/subjectLease.d.ts +0 -115
- package/dist/compiler/training/subjectLease.js +0 -179
- package/dist/dev/activity.d.ts +0 -14
- package/dist/dev/activity.js +0 -48
- package/dist/runtime/codex-exec/training/adapter.d.ts +0 -13
- package/dist/runtime/codex-exec/training/adapter.js +0 -101
- package/dist/runtime/codex-exec/training/adapter.js.map +0 -1
- package/dist/runtime/codex-exec/training/environment.d.ts +0 -3
- package/dist/runtime/codex-exec/training/environment.js +0 -26
- package/dist/runtime/codex-exec/training/environment.js.map +0 -1
- package/dist/runtime/codex-exec/training/index.d.ts +0 -2
- package/dist/runtime/codex-exec/training/index.js +0 -3
- package/dist/runtime/codex-exec/training/index.js.map +0 -1
- package/dist/runtime/codex-exec/training/protocol.d.ts +0 -15
- package/dist/runtime/codex-exec/training/protocol.js +0 -102
- package/dist/runtime/codex-exec/training/protocol.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/index.d.ts +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/index.js +0 -2
- package/dist/runtime/codex-exec/training/providers/codex-subscription/index.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.d.ts +0 -17
- package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.js +0 -80
- package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.d.ts +0 -12
- package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.js +0 -125
- package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.d.ts +0 -6
- package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.js +0 -219
- package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.js.map +0 -1
- package/dist/runtime/daimon/contractManifest.js.map +0 -1
- package/dist/runtime/daimon/contractManifestSchema.js.map +0 -1
- package/dist/runtime/daimon/engineDescriptorSchema.js.map +0 -1
- package/dist/runtime/daimon/engineDescriptors.generated.js.map +0 -1
- package/dist/runtime/daimon/engines.js.map +0 -1
- package/dist/runtime/daimon/index.js.map +0 -1
- package/dist/runtime/daimon/packageName.js.map +0 -1
- package/dist/runtime/daimon/training/legacy/adapter.d.ts +0 -11
- package/dist/runtime/daimon/training/legacy/adapter.js +0 -175
- package/dist/runtime/daimon/training/legacy/adapter.js.map +0 -1
- package/dist/runtime/daimon/training/legacy/index.d.ts +0 -2
- package/dist/runtime/daimon/training/legacy/index.js +0 -3
- package/dist/runtime/daimon/training/legacy/index.js.map +0 -1
- package/dist/runtime/daimon/training/legacy/public.d.ts +0 -49
- package/dist/runtime/daimon/training/legacy/public.js +0 -16
- package/dist/runtime/daimon/training/legacy/public.js.map +0 -1
- package/dist/runtime/daimon/training/native/adapter.d.ts +0 -18
- package/dist/runtime/daimon/training/native/adapter.js +0 -252
- package/dist/runtime/daimon/training/native/adapter.js.map +0 -1
- package/dist/runtime/daimon/training/native/admission.d.ts +0 -7
- package/dist/runtime/daimon/training/native/admission.js +0 -52
- package/dist/runtime/daimon/training/native/admission.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/arguments.d.ts +0 -16
- package/dist/runtime/daimon/training/native/child/arguments.js +0 -70
- package/dist/runtime/daimon/training/native/child/arguments.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/deferred-trial.d.ts +0 -24
- package/dist/runtime/daimon/training/native/child/deferred-trial.js +0 -63
- package/dist/runtime/daimon/training/native/child/deferred-trial.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/diagnostics.d.ts +0 -58
- package/dist/runtime/daimon/training/native/child/diagnostics.js +0 -215
- package/dist/runtime/daimon/training/native/child/diagnostics.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/fixture.d.ts +0 -16
- package/dist/runtime/daimon/training/native/child/fixture.js +0 -159
- package/dist/runtime/daimon/training/native/child/fixture.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/grok.d.ts +0 -14
- package/dist/runtime/daimon/training/native/child/grok.js +0 -47
- package/dist/runtime/daimon/training/native/child/grok.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/index.d.ts +0 -7
- package/dist/runtime/daimon/training/native/child/index.js +0 -5
- package/dist/runtime/daimon/training/native/child/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/lifecycle.d.ts +0 -40
- package/dist/runtime/daimon/training/native/child/lifecycle.js +0 -400
- package/dist/runtime/daimon/training/native/child/lifecycle.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/probe.d.ts +0 -2
- package/dist/runtime/daimon/training/native/child/probe.js +0 -11
- package/dist/runtime/daimon/training/native/child/probe.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/sandbox.d.ts +0 -4
- package/dist/runtime/daimon/training/native/child/sandbox.js +0 -76
- package/dist/runtime/daimon/training/native/child/sandbox.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/types.d.ts +0 -15
- package/dist/runtime/daimon/training/native/child/types.js +0 -2
- package/dist/runtime/daimon/training/native/child/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/docker.d.ts +0 -29
- package/dist/runtime/daimon/training/native/container/docker.js +0 -105
- package/dist/runtime/daimon/training/native/container/docker.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/grok-slot.d.ts +0 -22
- package/dist/runtime/daimon/training/native/container/grok-slot.js +0 -38
- package/dist/runtime/daimon/training/native/container/grok-slot.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/index.d.ts +0 -6
- package/dist/runtime/daimon/training/native/container/index.js +0 -6
- package/dist/runtime/daimon/training/native/container/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/lifecycle.d.ts +0 -8
- package/dist/runtime/daimon/training/native/container/lifecycle.js +0 -111
- package/dist/runtime/daimon/training/native/container/lifecycle.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/manifest.d.ts +0 -17
- package/dist/runtime/daimon/training/native/container/manifest.js +0 -164
- package/dist/runtime/daimon/training/native/container/manifest.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/native-preflight.d.ts +0 -8
- package/dist/runtime/daimon/training/native/container/native-preflight.js +0 -40
- package/dist/runtime/daimon/training/native/container/native-preflight.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/preflight.d.ts +0 -15
- package/dist/runtime/daimon/training/native/container/preflight.js +0 -79
- package/dist/runtime/daimon/training/native/container/preflight.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/slot.d.ts +0 -4
- package/dist/runtime/daimon/training/native/container/slot.js +0 -58
- package/dist/runtime/daimon/training/native/container/slot.js.map +0 -1
- package/dist/runtime/daimon/training/native/external.d.ts +0 -37
- package/dist/runtime/daimon/training/native/external.js +0 -75
- package/dist/runtime/daimon/training/native/external.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/authority.d.ts +0 -36
- package/dist/runtime/daimon/training/native/grants/authority.js +0 -49
- package/dist/runtime/daimon/training/native/grants/authority.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/index.d.ts +0 -2
- package/dist/runtime/daimon/training/native/grants/index.js +0 -3
- package/dist/runtime/daimon/training/native/grants/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/pins.d.ts +0 -30
- package/dist/runtime/daimon/training/native/grants/pins.js +0 -20
- package/dist/runtime/daimon/training/native/grants/pins.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/test-socket.d.ts +0 -6
- package/dist/runtime/daimon/training/native/grants/test-socket.js +0 -35
- package/dist/runtime/daimon/training/native/grants/test-socket.js.map +0 -1
- package/dist/runtime/daimon/training/native/grok-fixtures.d.ts +0 -34
- package/dist/runtime/daimon/training/native/grok-fixtures.js +0 -179
- package/dist/runtime/daimon/training/native/grok-fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/native/index.d.ts +0 -38
- package/dist/runtime/daimon/training/native/index.js +0 -27
- package/dist/runtime/daimon/training/native/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/live-checkout.d.ts +0 -2
- package/dist/runtime/daimon/training/native/live-checkout.js +0 -15
- package/dist/runtime/daimon/training/native/live-checkout.js.map +0 -1
- package/dist/runtime/daimon/training/native/observations.d.ts +0 -51
- package/dist/runtime/daimon/training/native/observations.js +0 -217
- package/dist/runtime/daimon/training/native/observations.js.map +0 -1
- package/dist/runtime/daimon/training/native/outcome.d.ts +0 -13
- package/dist/runtime/daimon/training/native/outcome.js +0 -37
- package/dist/runtime/daimon/training/native/outcome.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/engine-config.d.ts +0 -21
- package/dist/runtime/daimon/training/native/preparation/engine-config.js +0 -30
- package/dist/runtime/daimon/training/native/preparation/engine-config.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/fixtures.d.ts +0 -17
- package/dist/runtime/daimon/training/native/preparation/fixtures.js +0 -52
- package/dist/runtime/daimon/training/native/preparation/fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/index.d.ts +0 -7
- package/dist/runtime/daimon/training/native/preparation/index.js +0 -5
- package/dist/runtime/daimon/training/native/preparation/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/layout.d.ts +0 -66
- package/dist/runtime/daimon/training/native/preparation/layout.js +0 -87
- package/dist/runtime/daimon/training/native/preparation/layout.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/subject.d.ts +0 -14
- package/dist/runtime/daimon/training/native/preparation/subject.js +0 -67
- package/dist/runtime/daimon/training/native/preparation/subject.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/types.d.ts +0 -69
- package/dist/runtime/daimon/training/native/preparation/types.js +0 -2
- package/dist/runtime/daimon/training/native/preparation/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/artifacts.d.ts +0 -25
- package/dist/runtime/daimon/training/native/receipt/artifacts.js +0 -32
- package/dist/runtime/daimon/training/native/receipt/artifacts.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.d.ts +0 -129
- package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js +0 -45
- package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/grok.d.ts +0 -246
- package/dist/runtime/daimon/training/native/receipt/grok.js +0 -195
- package/dist/runtime/daimon/training/native/receipt/grok.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/index.d.ts +0 -11
- package/dist/runtime/daimon/training/native/receipt/index.js +0 -8
- package/dist/runtime/daimon/training/native/receipt/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/paths.d.ts +0 -3
- package/dist/runtime/daimon/training/native/receipt/paths.js +0 -18
- package/dist/runtime/daimon/training/native/receipt/paths.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/sandbox.d.ts +0 -42
- package/dist/runtime/daimon/training/native/receipt/sandbox.js +0 -35
- package/dist/runtime/daimon/training/native/receipt/sandbox.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/schema.d.ts +0 -490
- package/dist/runtime/daimon/training/native/receipt/schema.js +0 -138
- package/dist/runtime/daimon/training/native/receipt/schema.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/subscription.d.ts +0 -13
- package/dist/runtime/daimon/training/native/receipt/subscription.js +0 -13
- package/dist/runtime/daimon/training/native/receipt/subscription.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/task-clock.d.ts +0 -19
- package/dist/runtime/daimon/training/native/receipt/task-clock.js +0 -49
- package/dist/runtime/daimon/training/native/receipt/task-clock.js.map +0 -1
- package/dist/runtime/daimon/training/native/sealed-usage.d.ts +0 -218
- package/dist/runtime/daimon/training/native/sealed-usage.js +0 -261
- package/dist/runtime/daimon/training/native/sealed-usage.js.map +0 -1
- package/dist/runtime/daimon/training/native/test-fixtures.d.ts +0 -27
- package/dist/runtime/daimon/training/native/test-fixtures.js +0 -162
- package/dist/runtime/daimon/training/native/test-fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/native/transcript.d.ts +0 -96
- package/dist/runtime/daimon/training/native/transcript.js +0 -239
- package/dist/runtime/daimon/training/native/transcript.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/delivery.d.ts +0 -27
- package/dist/runtime/daimon/training/native/transport/delivery.js +0 -98
- package/dist/runtime/daimon/training/native/transport/delivery.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/http.d.ts +0 -3
- package/dist/runtime/daimon/training/native/transport/http.js +0 -81
- package/dist/runtime/daimon/training/native/transport/http.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/index.d.ts +0 -4
- package/dist/runtime/daimon/training/native/transport/index.js +0 -3
- package/dist/runtime/daimon/training/native/transport/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/types.d.ts +0 -15
- package/dist/runtime/daimon/training/native/transport/types.js +0 -2
- package/dist/runtime/daimon/training/native/transport/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/cli.d.ts +0 -1
- package/dist/runtime/daimon/training/native/worker/cli.js +0 -17
- package/dist/runtime/daimon/training/native/worker/cli.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/control.d.ts +0 -20
- package/dist/runtime/daimon/training/native/worker/control.js +0 -266
- package/dist/runtime/daimon/training/native/worker/control.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/deliveries.d.ts +0 -38
- package/dist/runtime/daimon/training/native/worker/deliveries.js +0 -91
- package/dist/runtime/daimon/training/native/worker/deliveries.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/collect.d.ts +0 -54
- package/dist/runtime/daimon/training/native/worker/evidence/collect.js +0 -278
- package/dist/runtime/daimon/training/native/worker/evidence/collect.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/execution.d.ts +0 -102
- package/dist/runtime/daimon/training/native/worker/evidence/execution.js +0 -191
- package/dist/runtime/daimon/training/native/worker/evidence/execution.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/index.d.ts +0 -3
- package/dist/runtime/daimon/training/native/worker/evidence/index.js +0 -4
- package/dist/runtime/daimon/training/native/worker/evidence/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/io.d.ts +0 -20
- package/dist/runtime/daimon/training/native/worker/evidence/io.js +0 -130
- package/dist/runtime/daimon/training/native/worker/evidence/io.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/seal.d.ts +0 -3
- package/dist/runtime/daimon/training/native/worker/evidence/seal.js +0 -67
- package/dist/runtime/daimon/training/native/worker/evidence/seal.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/index.d.ts +0 -11
- package/dist/runtime/daimon/training/native/worker/index.js +0 -8
- package/dist/runtime/daimon/training/native/worker/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/profile.d.ts +0 -23
- package/dist/runtime/daimon/training/native/worker/profile.js +0 -149
- package/dist/runtime/daimon/training/native/worker/profile.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/public.d.ts +0 -53
- package/dist/runtime/daimon/training/native/worker/public.js +0 -22
- package/dist/runtime/daimon/training/native/worker/public.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/sandbox.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/sandbox.js +0 -54
- package/dist/runtime/daimon/training/native/worker/sandbox.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/server.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/server.js +0 -102
- package/dist/runtime/daimon/training/native/worker/server.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/types.d.ts +0 -318
- package/dist/runtime/daimon/training/native/worker/types.js +0 -2
- package/dist/runtime/daimon/training/native/worker/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/index.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js +0 -4
- package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/source.d.ts +0 -3
- package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js +0 -16
- package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js +0 -52
- package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.d.ts +0 -21
- package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js +0 -198
- package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/types.d.ts +0 -91
- package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js +0 -2
- package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/worker.d.ts +0 -1
- package/dist/runtime/daimon/training/native/worker/worker.js +0 -105
- package/dist/runtime/daimon/training/native/worker/worker.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/broker.d.ts +0 -20
- package/dist/runtime/daimon/training/providers/grok-broker/broker.js +0 -55
- package/dist/runtime/daimon/training/providers/grok-broker/broker.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.d.ts +0 -15
- package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js +0 -29
- package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-home.d.ts +0 -16
- package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js +0 -60
- package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.d.ts +0 -81
- package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js +0 -221
- package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.d.ts +0 -31
- package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js +0 -78
- package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grants.d.ts +0 -63
- package/dist/runtime/daimon/training/providers/grok-broker/grants.js +0 -20
- package/dist/runtime/daimon/training/providers/grok-broker/grants.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/index.d.ts +0 -3
- package/dist/runtime/daimon/training/providers/grok-broker/index.js +0 -4
- package/dist/runtime/daimon/training/providers/grok-broker/index.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.d.ts +0 -21
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.js +0 -81
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/index.d.ts +0 -4
- package/dist/runtime/daimon/training/providers/grok-subscription/index.js +0 -5
- package/dist/runtime/daimon/training/providers/grok-subscription/index.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.d.ts +0 -26
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js +0 -102
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/provider.d.ts +0 -9
- package/dist/runtime/daimon/training/providers/grok-subscription/provider.js +0 -38
- package/dist/runtime/daimon/training/providers/grok-subscription/provider.js.map +0 -1
- package/dist/runtime/daimon/training/public.d.ts +0 -6
- package/dist/runtime/daimon/training/public.js +0 -5
- package/dist/runtime/daimon/training/public.js.map +0 -1
- package/dist/runtime/daimon/training/services/account-lease.d.ts +0 -7
- package/dist/runtime/daimon/training/services/account-lease.js +0 -76
- package/dist/runtime/daimon/training/services/account-lease.js.map +0 -1
- package/dist/runtime/daimon/training/services/freshness.d.ts +0 -15
- package/dist/runtime/daimon/training/services/freshness.js +0 -19
- package/dist/runtime/daimon/training/services/freshness.js.map +0 -1
- package/dist/runtime/daimon/training/services/index.d.ts +0 -4
- package/dist/runtime/daimon/training/services/index.js +0 -4
- package/dist/runtime/daimon/training/services/index.js.map +0 -1
- package/dist/runtime/daimon/training/services/slot-freshness.d.ts +0 -34
- package/dist/runtime/daimon/training/services/slot-freshness.js +0 -178
- package/dist/runtime/daimon/training/services/slot-freshness.js.map +0 -1
- package/dist/runtime/daimon/wakeMoments.js.map +0 -1
- package/dist/runtime/pi/adapter.d.ts +0 -3
- package/dist/runtime/pi/adapter.js +0 -230
- package/dist/runtime/pi/appActivitySource.d.ts +0 -1
- package/dist/runtime/pi/appActivitySource.js +0 -199
- package/dist/runtime/pi/appAgentConfig.d.ts +0 -11
- package/dist/runtime/pi/appAgentConfig.js +0 -264
- package/dist/runtime/pi/appCliEnginesSource.d.ts +0 -1
- package/dist/runtime/pi/appCliEnginesSource.js +0 -183
- package/dist/runtime/pi/appCliSource.d.ts +0 -1
- package/dist/runtime/pi/appCliSource.js +0 -353
- package/dist/runtime/pi/appControlSource.d.ts +0 -1
- package/dist/runtime/pi/appControlSource.js +0 -390
- package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +0 -1
- package/dist/runtime/pi/appControlWakeIdentitySource.js +0 -19
- package/dist/runtime/pi/appCoreSource.d.ts +0 -4
- package/dist/runtime/pi/appCoreSource.js +0 -244
- package/dist/runtime/pi/appPreludeSource.d.ts +0 -1
- package/dist/runtime/pi/appPreludeSource.js +0 -192
- package/dist/runtime/pi/appScheduleSource.d.ts +0 -1
- package/dist/runtime/pi/appScheduleSource.js +0 -84
- package/dist/runtime/pi/appScriptedEngine.d.ts +0 -31
- package/dist/runtime/pi/appScriptedEngine.js +0 -42
- package/dist/runtime/pi/appSource.d.ts +0 -4
- package/dist/runtime/pi/appSource.js +0 -12
- package/dist/runtime/pi/appTemplate.d.ts +0 -14
- package/dist/runtime/pi/appTemplate.js +0 -28
- package/dist/runtime/pi/appTemplateTypes.d.ts +0 -64
- package/dist/runtime/pi/appTemplateTypes.js +0 -18
- package/dist/runtime/pi/appWakeContextSource.d.ts +0 -1
- package/dist/runtime/pi/appWakeContextSource.js +0 -398
- package/dist/runtime/pi/containerTargets.d.ts +0 -4
- package/dist/runtime/pi/containerTargets.js +0 -63
- package/dist/runtime/pi/runAuth.d.ts +0 -2
- package/dist/runtime/pi/runAuth.js +0 -185
- package/dist/runtime/pi/testHelpers.d.ts +0 -2
- package/dist/shared/errors.js.map +0 -1
- package/dist/training/subjects/environment.d.ts +0 -2
- package/dist/training/subjects/environment.js +0 -14
- package/dist/training/subjects/environment.js.map +0 -1
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
import { lstat, mkdir, readFile, realpath, writeFile } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { mapTrainingExecution, trainingExecutionIdentity } from "../execution.js";
|
|
4
|
-
import { trainingContainerConfigSchema } from "../container/contract.js";
|
|
5
|
-
import { assertTrainingSubjectIsolation } from "../container/subjectIsolation.js";
|
|
6
|
-
import { trainingPreparationSchema, parseTrainingMappedPreparation } from "./contract.js";
|
|
7
|
-
import { assertInputRoot, exactPath, fileIdentity, hashJson, sealTree, within } from "./files.js";
|
|
8
|
-
import { planInputs, readBoundedJson, stageInput, verifyCanonicalPins } from "./inputs.js";
|
|
9
|
-
import { planTrainingImage, buildTrainingImage } from "./image.js";
|
|
10
|
-
import { planMeasurementRepair, stageMeasurementRepair, validateMeasurementRepairOutput, writeTrainingWitness } from "../repair/index.js";
|
|
11
|
-
import { prepareTrainingBroker, trainingBrokerSkills } from "./broker.js";
|
|
12
|
-
import { claimTrainingPreparationScratch, removeTrainingPreparationScratch } from "./scratch.js";
|
|
13
|
-
function mappedReceipt(digest, image, config) {
|
|
14
|
-
return parseTrainingMappedPreparation({ version: "spawnfile.training-preparation.v1", preparationDigest: digest, imageId: image,
|
|
15
|
-
bindings: config.inputs.map(input => ({ inputId: input.id, destination: input.destination })), outputRoot: "/run/training/output",
|
|
16
|
-
packagePaths: { spawnfile: "build" in config.image && config.image.build.compiler
|
|
17
|
-
? "/opt/training/compiler/dist/cli/index.js" : "/opt/training/spawnfile/dist/cli/index.js", training: "/opt/training/spawnfile/dist/training", bridge: "/opt/training/spawnfile/dist/training/dspy",
|
|
18
|
-
nativeWorker: "/opt/training/spawnfile/dist/runtime/daimon/training/native", integration: "/opt/training/integration", bootstrap: "/opt/training/bootstrap" }, integration: config.integration });
|
|
19
|
-
}
|
|
20
|
-
/** Reads only until the explicit dry-run boundary; preparation never executes project code. */
|
|
21
|
-
export async function prepareTraining(options) {
|
|
22
|
-
const raw = await readBoundedJson(options.configPath);
|
|
23
|
-
const config = trainingPreparationSchema.parse({ ...raw,
|
|
24
|
-
...(options.outputOverride ? { output: { source: options.outputOverride, destination: "/run/training/output" } } : {}),
|
|
25
|
-
...(options.imageOverride ? { image: { ref: options.imageOverride } } : {}) });
|
|
26
|
-
await assertTrainingSubjectIsolation(config, options.context);
|
|
27
|
-
// A v2 declaration still lowers to the unchanged v1 launch config; v4 carries the broker slots into Docker.
|
|
28
|
-
const launchVersion = config.version === "spawnfile.training-container.v4" ? config.version : "spawnfile.training-container.v1";
|
|
29
|
-
const root = path.dirname(path.resolve(options.configPath));
|
|
30
|
-
const auth = config.auth.map(entry => ({ ...entry, source: path.resolve(root, entry.source) }));
|
|
31
|
-
const evaluatorSecrets = config.evaluatorSecrets?.map(entry => ({ ...entry, source: path.resolve(root, entry.source) }));
|
|
32
|
-
const protectedLeaves = [...auth, ...evaluatorSecrets ?? []];
|
|
33
|
-
const evaluatorConfig = { ...(config.evaluatorRoutes ? { evaluatorRoutes: config.evaluatorRoutes } : {}),
|
|
34
|
-
...(config.subjectIsolation ? { subjectIsolation: config.subjectIsolation } : {}),
|
|
35
|
-
...(evaluatorSecrets ? { evaluatorSecrets } : {}) };
|
|
36
|
-
const output = path.resolve(root, config.output.source), parent = path.dirname(output);
|
|
37
|
-
for (let index = 0; index < options.args.length; index++) {
|
|
38
|
-
if (options.args[index] !== "--out")
|
|
39
|
-
continue;
|
|
40
|
-
const declared = options.args[++index];
|
|
41
|
-
if (declared === undefined || path.resolve(declared) !== output)
|
|
42
|
-
throw Error("Training --out must match configured output");
|
|
43
|
-
}
|
|
44
|
-
// Refuse invalid repair destinations before auth validation or source/witness reads.
|
|
45
|
-
if (options.repairMeasurements)
|
|
46
|
-
await validateMeasurementRepairOutput({ parent: options.repairMeasurements,
|
|
47
|
-
output, resume: options.args.includes("--resume") });
|
|
48
|
-
// Validate references before traversing image/input sources; aliases must never bypass secret exclusions.
|
|
49
|
-
for (const entry of options.dryRun ? evaluatorSecrets ?? [] : protectedLeaves) {
|
|
50
|
-
const source = await exactPath(entry.source), info = await lstat(source);
|
|
51
|
-
if (source !== entry.source || !info.isFile())
|
|
52
|
-
throw Error("Training auth must be a canonical regular leaf");
|
|
53
|
-
if (evaluatorSecrets?.includes(entry) && info.nlink !== 1)
|
|
54
|
-
throw Error("Evaluator secrets must not have hardlink aliases");
|
|
55
|
-
}
|
|
56
|
-
assertInputRoot(output, protectedLeaves.map(entry => entry.source));
|
|
57
|
-
if (await realpath(parent) !== parent)
|
|
58
|
-
throw Error("Training output parent must be canonical and already exist");
|
|
59
|
-
const inputs = await planInputs(config, root, protectedLeaves.map(entry => entry.source));
|
|
60
|
-
const canonicalPins = [...options.context.sources, ...options.execution?.datasetPins ?? []];
|
|
61
|
-
const roots = inputs.map(input => input.source);
|
|
62
|
-
for (let index = 0; index < inputs.length; index++) {
|
|
63
|
-
const input = inputs[index];
|
|
64
|
-
// A selected/Git snapshot is staged before launch; never bind the source project over its own output.
|
|
65
|
-
const snapshotPaths = input.files?.map(file => path.join(input.source, file.destination))
|
|
66
|
-
?? (input.git ? [...input.git.paths, ...input.git.overlays.map(file => file.destination)].map(file => path.join(input.source, file)) : undefined);
|
|
67
|
-
if (within(output, input.source) || (within(input.source, output) &&
|
|
68
|
-
(!snapshotPaths || snapshotPaths.some(file => within(output, file) || within(file, output))))) {
|
|
69
|
-
throw Error("Training output overlaps readonly input");
|
|
70
|
-
}
|
|
71
|
-
for (const other of inputs.slice(index + 1))
|
|
72
|
-
if (within(input.source, other.source) || within(other.source, input.source) ||
|
|
73
|
-
within(input.destination, other.destination) || within(other.destination, input.destination))
|
|
74
|
-
throw Error("Training inputs overlap");
|
|
75
|
-
}
|
|
76
|
-
const imagePlan = "build" in config.image
|
|
77
|
-
? await planTrainingImage(config.image.build, root, protectedLeaves.map(entry => entry.source), options.packageRoot, path.resolve(options.configPath))
|
|
78
|
-
: undefined;
|
|
79
|
-
if (options.repairWitness && !options.repairMeasurements)
|
|
80
|
-
throw Error("A repair witness requires --repair-measurements");
|
|
81
|
-
if (options.repairMeasurements && !imagePlan)
|
|
82
|
-
throw Error("Measurement repair requires a verifiable image build recipe");
|
|
83
|
-
const repair = options.repairMeasurements ? await planMeasurementRepair({ parent: options.repairMeasurements,
|
|
84
|
-
witness: options.repairWitness, output, auth: protectedLeaves.map(entry => entry.source), image: imagePlan, inputs,
|
|
85
|
-
context: options.context, resume: options.args.includes("--resume") }) : undefined;
|
|
86
|
-
if (repair && hashJson(config.integration) !== hashJson(repair.witness.manifest.config.integration))
|
|
87
|
-
throw Error("Repair integration settings binding changed");
|
|
88
|
-
const digest = hashJson({ config, sources: inputs.map(input => ({ id: input.id, digest: input.digest })), image: imagePlan?.digest ?? config.image,
|
|
89
|
-
canonical: options.context.project.sourceDigest,
|
|
90
|
-
...(options.execution ? { execution: trainingExecutionIdentity(options.execution) } : {}), ...(repair ? { repair: { witness: repair.witness.digest, parent: repair.manifestDigest } } : {}) });
|
|
91
|
-
const brokerSkills = config.broker ? await trainingBrokerSkills(options.context) : undefined;
|
|
92
|
-
if (config.broker)
|
|
93
|
-
await prepareTrainingBroker(config.broker, root, path.dirname(path.resolve(options.configPath)), false, config.slots, brokerSkills);
|
|
94
|
-
if (options.dryRun)
|
|
95
|
-
return { digest, dryRun: true };
|
|
96
|
-
options.signal?.throwIfAborted();
|
|
97
|
-
const execute = (args) => options.process(args, { timeoutMs: options.timeoutMs, signal: options.signal });
|
|
98
|
-
const endpoint = await execute(["context", "inspect", config.dockerContext, "--format", "{{json .Endpoints.docker.Host}}"]);
|
|
99
|
-
if (endpoint.code !== 0 || !/^unix:\/\//u.test(JSON.parse(endpoint.stdout)))
|
|
100
|
-
throw Error("Training preparation requires a local Unix Docker context");
|
|
101
|
-
if (repair) {
|
|
102
|
-
const label = await execute(["--context", config.dockerContext, "image", "inspect", repair.witness.manifest.parentImage,
|
|
103
|
-
"--format", '{{json .Id}}\n{{json (index .Config.Labels "com.spawnfile.training.recipe")}}']);
|
|
104
|
-
const values = label.stdout.trim().split("\n").map(value => JSON.parse(value));
|
|
105
|
-
if (label.code !== 0 || values[0] !== repair.witness.manifest.parentImage || values[1] !== repair.witness.manifest.imagePlanDigest)
|
|
106
|
-
throw Error("Parent image recipe witness is unverified");
|
|
107
|
-
}
|
|
108
|
-
const staging = path.join(parent, `.spawnfile-training-preparation-${hashJson(output).slice(7, 23)}`);
|
|
109
|
-
const configPath = path.join(staging, "launch.json"), preparationPath = path.join(staging, "mapped.json"), statePath = path.join(staging, "state.json");
|
|
110
|
-
const resume = options.args.includes("--resume");
|
|
111
|
-
let image, staged;
|
|
112
|
-
if (resume) {
|
|
113
|
-
await claimTrainingPreparationScratch(staging, digest, options.streams.stderr, "resume");
|
|
114
|
-
const previous = JSON.parse(await readFile(statePath, "utf8"));
|
|
115
|
-
if (previous.digest !== digest || !/^sha256:[a-f0-9]{64}$/u.test(previous.image) ||
|
|
116
|
-
JSON.stringify(previous.staged) !== JSON.stringify(inputs.map(input => input.git || input.files ? path.join(staging, input.id) : input.source)))
|
|
117
|
-
throw Error("Training preparation changed; exact resume rejected");
|
|
118
|
-
image = previous.image;
|
|
119
|
-
staged = previous.staged;
|
|
120
|
-
const snapshots = await Promise.all(inputs.map(async (input, index) => input.git || input.files ? hashJson(fileIdentity(await sealTree(staged[index], "input", { ignoreGit: true, internalSymlinks: true }))) : null));
|
|
121
|
-
if (JSON.stringify(previous.snapshots) !== JSON.stringify(snapshots))
|
|
122
|
-
throw Error("Persisted training input snapshot changed");
|
|
123
|
-
const mapped = parseTrainingMappedPreparation(await readBoundedJson(preparationPath));
|
|
124
|
-
if (mapped.preparationDigest !== digest || mapped.imageId !== image)
|
|
125
|
-
throw Error("Persisted training preparation identity mismatch");
|
|
126
|
-
await verifyCanonicalPins(inputs, canonicalPins, staged);
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
let owned = false;
|
|
130
|
-
try {
|
|
131
|
-
await claimTrainingPreparationScratch(staging, digest, options.streams.stderr);
|
|
132
|
-
owned = true;
|
|
133
|
-
try {
|
|
134
|
-
await mkdir(output, { mode: 0o700 });
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
if (error.code !== "EEXIST" || !(await lstat(output)).isDirectory() || await realpath(output) !== output)
|
|
138
|
-
throw error;
|
|
139
|
-
}
|
|
140
|
-
// Do not remove owned staging while sibling input jobs can still write into it.
|
|
141
|
-
const results = await Promise.allSettled(inputs.map(input => stageInput(input, path.join(staging, input.id))));
|
|
142
|
-
const failure = results.find(result => result.status === "rejected");
|
|
143
|
-
if (failure?.status === "rejected")
|
|
144
|
-
throw failure.reason;
|
|
145
|
-
staged = results.map(result => result.value);
|
|
146
|
-
await verifyCanonicalPins(inputs, canonicalPins, staged);
|
|
147
|
-
image = imagePlan ? (await buildTrainingImage(imagePlan, { parent, dockerContext: config.dockerContext, process: options.process,
|
|
148
|
-
timeoutMs: options.timeoutMs, signal: options.signal, streams: options.streams })).imageId : "ref" in config.image ? config.image.ref : "";
|
|
149
|
-
if (!image.startsWith("sha256:")) {
|
|
150
|
-
const inspected = await execute(["--context", config.dockerContext, "image", "inspect", image, "--format", "{{.Id}}"]);
|
|
151
|
-
if (inspected.code !== 0)
|
|
152
|
-
throw Error("Training image is unavailable");
|
|
153
|
-
image = inspected.stdout.trim();
|
|
154
|
-
}
|
|
155
|
-
const mapped = mappedReceipt(digest, image, config);
|
|
156
|
-
const preparedBroker = config.broker ? await prepareTrainingBroker(config.broker, root, staging, true, config.slots, brokerSkills) : undefined;
|
|
157
|
-
const launch = trainingContainerConfigSchema.parse({ version: launchVersion, slots: config.slots, dockerContext: config.dockerContext,
|
|
158
|
-
inputs: inputs.map((input, index) => ({ source: staged[index], destination: input.destination })), output: { source: output, destination: "/run/training/output" }, auth, ...evaluatorConfig,
|
|
159
|
-
...(preparedBroker ? { broker: preparedBroker.launch } : {}) });
|
|
160
|
-
await writeFile(configPath, JSON.stringify(launch), { flag: "wx", mode: 0o600 });
|
|
161
|
-
await writeFile(preparationPath, JSON.stringify(parseTrainingMappedPreparation(mapped)), { flag: "wx", mode: 0o400 });
|
|
162
|
-
const snapshots = await Promise.all(inputs.map(async (input, index) => input.git || input.files ? hashJson(fileIdentity(await sealTree(staged[index], "input", { ignoreGit: true, internalSymlinks: true }))) : null));
|
|
163
|
-
await writeFile(statePath, JSON.stringify({ digest, image, staged, snapshots }), { flag: "wx", mode: 0o600 });
|
|
164
|
-
if (imagePlan)
|
|
165
|
-
await writeTrainingWitness({ directory: staging, digest, image, config, context: options.context,
|
|
166
|
-
args: options.args, execution: options.execution, inputs, staged, snapshots, plan: imagePlan,
|
|
167
|
-
...(repair ? { repair: { witness: repair.witness.digest, parent: repair.manifestDigest } } : {}) });
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
if (owned)
|
|
171
|
-
await removeTrainingPreparationScratch(staging);
|
|
172
|
-
throw error;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
const expectedBroker = config.broker ? await prepareTrainingBroker(config.broker, root, staging, false, config.slots, brokerSkills) : undefined;
|
|
176
|
-
const expectedLaunch = trainingContainerConfigSchema.parse({ version: launchVersion, slots: config.slots, dockerContext: config.dockerContext,
|
|
177
|
-
inputs: inputs.map((input, index) => ({ source: staged[index], destination: input.destination })), output: { source: output, destination: "/run/training/output" }, auth, ...evaluatorConfig,
|
|
178
|
-
...(expectedBroker ? { broker: expectedBroker.launch } : {}) });
|
|
179
|
-
if (hashJson(await readBoundedJson(configPath)) !== hashJson(expectedLaunch) ||
|
|
180
|
-
hashJson(await readBoundedJson(preparationPath)) !== hashJson(mappedReceipt(digest, image, config)))
|
|
181
|
-
throw Error("Saved training launch or mapped receipt changed");
|
|
182
|
-
const inspected = await execute(["--context", config.dockerContext, "image", "inspect", image, "--format", "{{.Id}}"]);
|
|
183
|
-
if (inspected.code !== 0 || inspected.stdout.trim() !== image)
|
|
184
|
-
throw Error("Saved training image is missing or changed");
|
|
185
|
-
const map = (file) => {
|
|
186
|
-
const absolute = path.resolve(file);
|
|
187
|
-
if (within(output, absolute))
|
|
188
|
-
return absolute;
|
|
189
|
-
const index = roots.findIndex(source => within(source, absolute));
|
|
190
|
-
return index < 0 ? absolute : path.join(staged[index], path.relative(roots[index], absolute));
|
|
191
|
-
};
|
|
192
|
-
const context = { ...options.context,
|
|
193
|
-
project: { ...options.context.project, root: map(options.context.project.root), manifest: map(options.context.project.manifest) },
|
|
194
|
-
agent: { ...options.context.agent, source: map(options.context.agent.source) },
|
|
195
|
-
sources: options.context.sources.map(source => ({ ...source, sourcePath: map(source.sourcePath) })),
|
|
196
|
-
documents: options.context.documents.map(source => ({ ...source, sourcePath: map(source.sourcePath) })),
|
|
197
|
-
skills: options.context.skills.map(source => ({ ...source, sourcePath: map(source.sourcePath) })) };
|
|
198
|
-
const args = [...options.args];
|
|
199
|
-
for (let index = 0; index < args.length; index++) {
|
|
200
|
-
if (["--train", "--validation", "--test", "--cost-config"].includes(args[index]))
|
|
201
|
-
args[++index] = map(args[index]);
|
|
202
|
-
else if (args[index] === "--resource") {
|
|
203
|
-
const value = args[++index], split = value.indexOf("=");
|
|
204
|
-
args[index] = `${value.slice(0, split)}=${map(value.slice(split + 1))}`;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
if (repair) {
|
|
208
|
-
const projected = await stageMeasurementRepair(repair, staging, image, options.context.project.sourceDigest, resume);
|
|
209
|
-
const repairLaunch = { ...expectedLaunch, inputs: [...expectedLaunch.inputs,
|
|
210
|
-
{ source: projected.root, destination: "/run/training/inputs/repair-parent" }] };
|
|
211
|
-
const repairConfig = path.join(staging, "repair-launch.json");
|
|
212
|
-
if (resume) {
|
|
213
|
-
if (hashJson(await readBoundedJson(repairConfig)) !== hashJson(repairLaunch))
|
|
214
|
-
throw Error("Saved repair launch changed");
|
|
215
|
-
}
|
|
216
|
-
else
|
|
217
|
-
await writeFile(repairConfig, JSON.stringify(repairLaunch), { flag: "wx", mode: 0o600 });
|
|
218
|
-
return { digest, image, configPath: repairConfig, preparationPath, repairPath: projected.repairPath, context,
|
|
219
|
-
...(options.execution ? { execution: mapTrainingExecution(options.execution, map) } : {}),
|
|
220
|
-
args: [...args, "--repair-measurements", "/run/training/inputs/repair-parent", "--repair-context", "/run/spawnfile-training/repair.json"] };
|
|
221
|
-
}
|
|
222
|
-
return { digest, image, configPath, preparationPath, context, args,
|
|
223
|
-
...(options.execution ? { execution: mapTrainingExecution(options.execution, map) } : {}) };
|
|
224
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The receipt binds identity AND the owning process before staging starts.
|
|
3
|
-
* A matching digest alone never permits deletion. Unknown/remote/reused PIDs
|
|
4
|
-
* fail closed; only ESRCH on this host proves that a writer has stopped.
|
|
5
|
-
*/
|
|
6
|
-
export declare const claimTrainingPreparationScratch: (staging: string, digest: string, notify: (line: string) => void, mode?: "fresh" | "resume") => Promise<void>;
|
|
7
|
-
/** Make sealed directories removable without following input links out of owned scratch. */
|
|
8
|
-
export declare const removeTrainingPreparationScratch: (staging: string) => Promise<void>;
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { hostname } from "node:os";
|
|
3
|
-
import { chmod, lstat, mkdir, readFile, readdir, realpath, rm, writeFile } from "node:fs/promises";
|
|
4
|
-
/**
|
|
5
|
-
* The receipt binds identity AND the owning process before staging starts.
|
|
6
|
-
* A matching digest alone never permits deletion. Unknown/remote/reused PIDs
|
|
7
|
-
* fail closed; only ESRCH on this host proves that a writer has stopped.
|
|
8
|
-
*/
|
|
9
|
-
export const claimTrainingPreparationScratch = async (staging, digest, notify, mode = "fresh") => {
|
|
10
|
-
const recordOwner = (flag = "wx") => writeFile(path.join(staging, "owner.json"), JSON.stringify({ digest, host: hostname(), pid: process.pid }), { flag, mode: 0o600 });
|
|
11
|
-
// This guard lives outside scratch so removal/recreation cannot drop the
|
|
12
|
-
// exclusion barrier. Never break a stranded guard automatically: its absence
|
|
13
|
-
// of a receipt cannot establish that its holder stopped.
|
|
14
|
-
const guard = `${staging}.reclaim`;
|
|
15
|
-
try {
|
|
16
|
-
await mkdir(guard, { mode: 0o700 });
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
if (error.code !== "EEXIST")
|
|
20
|
-
throw error;
|
|
21
|
-
throw Error(`Training preparation scratch recovery is already claimed: ${guard}; if no preparation is running, remove that guard and retry`);
|
|
22
|
-
}
|
|
23
|
-
try {
|
|
24
|
-
if (mode === "fresh") {
|
|
25
|
-
let created = false;
|
|
26
|
-
try {
|
|
27
|
-
await mkdir(staging, { mode: 0o700 });
|
|
28
|
-
created = true;
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
if (error.code !== "EEXIST")
|
|
32
|
-
throw error;
|
|
33
|
-
}
|
|
34
|
-
if (created) {
|
|
35
|
-
await recordOwner();
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
// Re-read under exclusion, never delete based on an earlier observation.
|
|
40
|
-
await assertAbandonedScratch(staging, digest, mode === "resume");
|
|
41
|
-
if (mode === "resume") {
|
|
42
|
-
// Claim before validating or reading snapshots: fresh recovery must see
|
|
43
|
-
// this live process rather than the stopped original preparer.
|
|
44
|
-
await recordOwner("w");
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
notify(`Reusing the preparation scratch left by an earlier launch of this exact preparation: ${staging}`);
|
|
48
|
-
await removeTrainingPreparationScratch(staging);
|
|
49
|
-
await mkdir(staging, { mode: 0o700 });
|
|
50
|
-
await recordOwner();
|
|
51
|
-
}
|
|
52
|
-
finally {
|
|
53
|
-
await rm(guard, { recursive: true });
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
const assertAbandonedScratch = async (staging, digest, resume) => {
|
|
57
|
-
const info = await lstat(staging);
|
|
58
|
-
if (!info.isDirectory() || info.isSymbolicLink() || await realpath(staging) !== staging) {
|
|
59
|
-
throw Error(`Training preparation scratch ${staging} is not a canonical directory; remove it and retry`);
|
|
60
|
-
}
|
|
61
|
-
let previous;
|
|
62
|
-
try {
|
|
63
|
-
previous = JSON.parse(await readFile(`${staging}/state.json`, "utf8"));
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
try {
|
|
67
|
-
previous = JSON.parse(await readFile(path.join(staging, "owner.json"), "utf8"));
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
previous = undefined;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
if (previous?.digest !== digest) {
|
|
74
|
-
if (resume)
|
|
75
|
-
throw Error("Training preparation changed; exact resume rejected");
|
|
76
|
-
throw Error(previous === undefined
|
|
77
|
-
? `Training preparation scratch ${staging} is left over from an interrupted launch that never recorded its identity; remove it to retry: rm -rf ${JSON.stringify(staging)}`
|
|
78
|
-
: `Training preparation scratch ${staging} belongs to a different preparation (${String(previous.digest)}); remove it to retry: rm -rf ${JSON.stringify(staging)}`);
|
|
79
|
-
}
|
|
80
|
-
let owner;
|
|
81
|
-
try {
|
|
82
|
-
owner = JSON.parse(await readFile(path.join(staging, "owner.json"), "utf8"));
|
|
83
|
-
}
|
|
84
|
-
catch { /* Unknown ownership fails closed. */ }
|
|
85
|
-
if (owner?.digest !== digest || owner.host !== hostname() || typeof owner.pid !== "number" ||
|
|
86
|
-
!Number.isSafeInteger(owner.pid) || owner.pid <= 0) {
|
|
87
|
-
throw Error(`Training preparation scratch ${staging} has no verifiable local owner; cannot prove its previous launch stopped`);
|
|
88
|
-
}
|
|
89
|
-
// Revalidation by the owning process is idempotent; other live owners refuse.
|
|
90
|
-
if (resume && owner.pid === process.pid)
|
|
91
|
-
return;
|
|
92
|
-
let stopped = false;
|
|
93
|
-
try {
|
|
94
|
-
process.kill(owner.pid, 0);
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
stopped = error.code === "ESRCH";
|
|
98
|
-
}
|
|
99
|
-
if (!stopped)
|
|
100
|
-
throw Error(`Training preparation scratch ${staging} still has an active or unverifiable owner (${owner.pid}); retry after it stops`);
|
|
101
|
-
};
|
|
102
|
-
/** Make sealed directories removable without following input links out of owned scratch. */
|
|
103
|
-
export const removeTrainingPreparationScratch = async (staging) => {
|
|
104
|
-
const writable = async (entry) => {
|
|
105
|
-
const info = await lstat(entry);
|
|
106
|
-
if (!info.isDirectory() || info.isSymbolicLink())
|
|
107
|
-
return;
|
|
108
|
-
await chmod(entry, (info.mode & 0o777) | 0o700);
|
|
109
|
-
for (const child of await readdir(entry))
|
|
110
|
-
await writable(path.join(entry, child));
|
|
111
|
-
};
|
|
112
|
-
await writable(staging);
|
|
113
|
-
await rm(staging, { recursive: true, force: true });
|
|
114
|
-
};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { TrainingContext } from "../contract.js";
|
|
2
|
-
import type { TrainingImagePlan } from "../preparation/image.js";
|
|
3
|
-
import type { PlannedInput } from "../preparation/inputs.js";
|
|
4
|
-
import type { TrainingWitness } from "./contract.js";
|
|
5
|
-
/** Subject and optimizer semantics remain pinned; only evaluation/fork plumbing may change. */
|
|
6
|
-
export declare function verifyTrainingCompatibility(witness: TrainingWitness, current: TrainingImagePlan, inputs: PlannedInput[], context: TrainingContext): {
|
|
7
|
-
components: Record<string, string>;
|
|
8
|
-
inputs: {
|
|
9
|
-
[k: string]: string;
|
|
10
|
-
};
|
|
11
|
-
};
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { hasLegacyTrainingDistribution } from '../../../shared/index.js';
|
|
2
|
-
import { fileIdentity, hashJson } from "../preparation/files.js";
|
|
3
|
-
/** Subject and optimizer semantics remain pinned; only evaluation/fork plumbing may change. */
|
|
4
|
-
export function verifyTrainingCompatibility(witness, current, inputs, context) {
|
|
5
|
-
if (context.agent.runtime !== "daimon" || context.project.sourceDigest !== witness.context.project.sourceDigest ||
|
|
6
|
-
JSON.stringify(context.agent) !== JSON.stringify(witness.context.agent))
|
|
7
|
-
throw Error("Repair canonical agent changed");
|
|
8
|
-
const old = witness.image.files, next = fileIdentity(current.files);
|
|
9
|
-
if (hasLegacyTrainingDistribution(witness.image)) {
|
|
10
|
-
throw Error("Repair references an external training distribution; re-prepare with Spawnfile before repairing measurements");
|
|
11
|
-
}
|
|
12
|
-
const selection = (files, prefix, excludes = []) => {
|
|
13
|
-
const values = files.filter(file => file.destination.startsWith(prefix) && !excludes.some(value => file.destination === value || (value.endsWith("/") && file.destination.startsWith(value))))
|
|
14
|
-
.map(file => ({ ...file, destination: file.destination.slice(prefix.length) })).sort((a, b) => a.destination.localeCompare(b.destination));
|
|
15
|
-
if (!values.length)
|
|
16
|
-
throw Error(`Repair lacks compatibility evidence for ${prefix}`);
|
|
17
|
-
return hashJson(values);
|
|
18
|
-
};
|
|
19
|
-
const components = {};
|
|
20
|
-
const compare = (name, previous, updated) => {
|
|
21
|
-
if (previous !== updated)
|
|
22
|
-
throw Error(`Repair subject compatibility changed: ${name}; re-prepare with Spawnfile before repairing measurements`);
|
|
23
|
-
components[name] = updated;
|
|
24
|
-
};
|
|
25
|
-
for (const field of ["nativeImage", "pythonImage", "platform"])
|
|
26
|
-
compare(field, hashJson(witness.image.build[field]), hashJson(current.build[field]));
|
|
27
|
-
// The compiler closure excludes the training implementation so repair may update
|
|
28
|
-
// evaluator/fork transport while preserving subject and optimizer semantics below.
|
|
29
|
-
const compilerExclusions = ["compiler/dist/training/", "compiler/dist/runtime/trainingCli.js",
|
|
30
|
-
"compiler/dist/runtime/trainingCli.d.ts", "compiler/dist/runtime/trainingSubjects.js",
|
|
31
|
-
"compiler/dist/runtime/trainingSubjects.d.ts", "compiler/dist/runtime/daimon/training/", "compiler/dist/runtime/codex-exec/training/"];
|
|
32
|
-
compare("compiler", selection(old, "compiler/", compilerExclusions), selection(next, "compiler/", compilerExclusions));
|
|
33
|
-
for (const [name, prefix] of Object.entries({ integration: "integration/", "training-native": "spawnfile/dist/runtime/daimon/training/",
|
|
34
|
-
"training-trials": "spawnfile/dist/training/experiments/trials/" }))
|
|
35
|
-
compare(name, selection(old, prefix), selection(next, prefix));
|
|
36
|
-
const bridge = "spawnfile/dist/training/dspy/";
|
|
37
|
-
const excluded = ["spawnfile_training_dspy/checkpoint.py", "spawnfile_training_dspy/protocol.py", "README.md", "protocol.md", ".coverage", ".pytest_cache/", "coverage.json"]
|
|
38
|
-
.map(file => bridge + file);
|
|
39
|
-
compare("training-optimizer", selection(old, bridge, excluded), selection(next, bridge, excluded));
|
|
40
|
-
const previousInputs = witness.inputs.map(input => ({ id: input.id, destination: input.destination, digest: input.digest }));
|
|
41
|
-
const currentInputs = inputs.map(input => ({ id: input.id, destination: input.destination, digest: input.digest }));
|
|
42
|
-
if (hashJson(previousInputs) !== hashJson(currentInputs))
|
|
43
|
-
throw Error("Repair evidence or dataset inputs changed");
|
|
44
|
-
return { components, inputs: Object.fromEntries(currentInputs.map(input => [input.id, input.digest])) };
|
|
45
|
-
}
|