spawnfile 0.1.33 → 0.1.34
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/auth/trainingAuth.d.ts +2 -5
- package/dist/cli/devCommands.d.ts +1 -1
- package/dist/cli/devCommands.js +0 -66
- package/dist/cli/runCli.d.ts +1 -4
- package/dist/cli/runCli.js +2 -2
- package/dist/cli/trainCommand.js +9 -15
- package/dist/cli/trainingBooted.d.ts +7 -0
- package/dist/cli/trainingBooted.js +41 -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 +7 -88
- package/dist/compiler/containerDaimonGatewayRender.d.ts +50 -0
- package/dist/compiler/containerDaimonGatewayRender.js +157 -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 +26 -46
- 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 +1 -0
- package/dist/compiler/runProject.js +9 -3
- package/dist/compiler/runProjectAuth.js +2 -17
- 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/trial/boot.d.ts +53 -0
- package/dist/compiler/training/trial/boot.js +147 -0
- package/dist/compiler/training/trial/docker.d.ts +8 -0
- package/dist/compiler/training/trial/docker.js +22 -0
- package/dist/compiler/training/trial/gateway.d.ts +42 -0
- package/dist/compiler/training/trial/gateway.js +98 -0
- package/dist/compiler/training/trial/index.d.ts +4 -0
- package/dist/compiler/training/trial/index.js +4 -0
- package/dist/compiler/training/trial/launcher.d.ts +32 -0
- package/dist/compiler/training/trial/launcher.js +49 -0
- package/dist/compiler/training/trial/project.d.ts +11 -0
- package/dist/compiler/training/trial/project.js +31 -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/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 +6 -12
- 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 +7 -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 +9 -3
- package/dist/runtime/daimon/subscriptionRealms.js +22 -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 +46 -0
- package/dist/runtime/daimon/training/booted/adapter.js +59 -0
- package/dist/runtime/daimon/training/booted/adapter.js.map +1 -0
- package/dist/runtime/daimon/training/booted/index.d.ts +2 -0
- package/dist/runtime/daimon/training/booted/index.js +2 -0
- package/dist/runtime/daimon/training/booted/index.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/training/providers/codex-subscription/index.js.map +1 -0
- package/dist/runtime/daimon/training/providers/codex-subscription/protocol.js.map +1 -0
- package/dist/runtime/daimon/training/providers/codex-subscription/provider.js.map +1 -0
- package/dist/runtime/daimon/training/providers/codex-subscription/strict-schema.js.map +1 -0
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.d.ts +1 -3
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.js +5 -5
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.js.map +1 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/index.d.ts +1 -2
- package/dist/runtime/daimon/training/providers/grok-subscription/index.js +0 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/index.js.map +1 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.d.ts +5 -17
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js +18 -31
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js.map +1 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/provider.js +1 -2
- package/dist/runtime/daimon/training/providers/grok-subscription/provider.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 +1 -1
- package/dist/runtime/trainingProviders.d.ts +1 -2
- package/dist/runtime/trainingProviders.js +9 -19
- 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/shared/errors.js +0 -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.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.js.map +0 -1
- 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.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/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
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/index.d.ts +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/index.js +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/protocol.d.ts +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/protocol.js +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/provider.d.ts +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/provider.js +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/strict-schema.d.ts +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/strict-schema.js +0 -0
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export declare const TRAINING_EVALUATOR_ROUTES_FILE = "/run/spawnfile-training/evaluator-routes.json";
|
|
3
|
-
export declare const TRAINING_TYPESAFE_SECRET_FILE = "/run/spawnfile-training/secrets/typesafe";
|
|
4
|
-
export declare const TRAINING_TYPESAFE_SECRET_INGRESS = "/run/spawnfile-training/secret-ingress/typesafe";
|
|
5
|
-
export declare const trainingEvaluatorRouteSchema: z.ZodObject<{
|
|
6
|
-
purpose: z.ZodEnum<{
|
|
7
|
-
decisions: "decisions";
|
|
8
|
-
extraction: "extraction";
|
|
9
|
-
proposals: "proposals";
|
|
10
|
-
}>;
|
|
11
|
-
provider: z.ZodEnum<{
|
|
12
|
-
"codex-subscription": "codex-subscription";
|
|
13
|
-
typesafe: "typesafe";
|
|
14
|
-
}>;
|
|
15
|
-
model: z.ZodString;
|
|
16
|
-
maxRequests: z.ZodNumber;
|
|
17
|
-
maxSpendUsd: z.ZodOptional<z.ZodNumber>;
|
|
18
|
-
}, z.core.$strict>;
|
|
19
|
-
export declare const trainingEvaluatorRoutesSchema: z.ZodArray<z.ZodObject<{
|
|
20
|
-
purpose: z.ZodEnum<{
|
|
21
|
-
decisions: "decisions";
|
|
22
|
-
extraction: "extraction";
|
|
23
|
-
proposals: "proposals";
|
|
24
|
-
}>;
|
|
25
|
-
provider: z.ZodEnum<{
|
|
26
|
-
"codex-subscription": "codex-subscription";
|
|
27
|
-
typesafe: "typesafe";
|
|
28
|
-
}>;
|
|
29
|
-
model: z.ZodString;
|
|
30
|
-
maxRequests: z.ZodNumber;
|
|
31
|
-
maxSpendUsd: z.ZodOptional<z.ZodNumber>;
|
|
32
|
-
}, z.core.$strict>>;
|
|
33
|
-
/** Only a reference is declared. Secret bytes are never read by the compiler or launcher. */
|
|
34
|
-
export declare const trainingEvaluatorSecretsSchema: (source: z.ZodString) => z.ZodArray<z.ZodObject<{
|
|
35
|
-
provider: z.ZodLiteral<"typesafe">;
|
|
36
|
-
source: z.ZodString;
|
|
37
|
-
}, z.core.$strict>>;
|
|
38
|
-
export declare const prepareTrainingEvaluators: (root: string, config: {
|
|
39
|
-
evaluatorRoutes?: z.infer<typeof trainingEvaluatorRoutesSchema>;
|
|
40
|
-
evaluatorSecrets?: {
|
|
41
|
-
provider: "typesafe";
|
|
42
|
-
source: string;
|
|
43
|
-
}[];
|
|
44
|
-
subjectIsolation?: "codex-native-sandbox";
|
|
45
|
-
}, mappedArgs: readonly string[]) => Promise<{
|
|
46
|
-
mounts: string[];
|
|
47
|
-
env: string[];
|
|
48
|
-
}>;
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { writeFile } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { z } from "zod";
|
|
4
|
-
export const TRAINING_EVALUATOR_ROUTES_FILE = "/run/spawnfile-training/evaluator-routes.json";
|
|
5
|
-
export const TRAINING_TYPESAFE_SECRET_FILE = "/run/spawnfile-training/secrets/typesafe";
|
|
6
|
-
export const TRAINING_TYPESAFE_SECRET_INGRESS = "/run/spawnfile-training/secret-ingress/typesafe";
|
|
7
|
-
export const trainingEvaluatorRouteSchema = z.object({
|
|
8
|
-
purpose: z.enum(["extraction", "proposals", "decisions"]),
|
|
9
|
-
provider: z.enum(["codex-subscription", "typesafe"]),
|
|
10
|
-
model: z.string().min(1).max(128).regex(/^[A-Za-z0-9._:-]+$/u),
|
|
11
|
-
maxRequests: z.number().int().positive().max(Number.MAX_SAFE_INTEGER),
|
|
12
|
-
maxSpendUsd: z.number().finite().nonnegative().optional()
|
|
13
|
-
}).strict().superRefine((route, context) => {
|
|
14
|
-
if (route.provider === "codex-subscription" ? route.purpose === "decisions" || route.maxSpendUsd !== undefined
|
|
15
|
-
: route.purpose !== "decisions" || route.maxSpendUsd === undefined) {
|
|
16
|
-
context.addIssue({ code: "custom", message: "Evaluator provider/purpose mismatch or missing TypeSafe spend budget" });
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
export const trainingEvaluatorRoutesSchema = z.array(trainingEvaluatorRouteSchema).min(1).max(64)
|
|
20
|
-
.refine(routes => new Set(routes.map(route => JSON.stringify([route.purpose, route.provider, route.model]))).size === routes.length, "Duplicate evaluator route");
|
|
21
|
-
/** Only a reference is declared. Secret bytes are never read by the compiler or launcher. */
|
|
22
|
-
export const trainingEvaluatorSecretsSchema = (source) => z.array(z.object({
|
|
23
|
-
provider: z.literal("typesafe"), source
|
|
24
|
-
}).strict()).min(1).max(1);
|
|
25
|
-
export const prepareTrainingEvaluators = async (root, config, mappedArgs) => {
|
|
26
|
-
const mounts = [], env = [];
|
|
27
|
-
if (config.evaluatorRoutes) {
|
|
28
|
-
const outputs = mappedArgs.flatMap((arg, index) => arg === "--out" ? [mappedArgs[index + 1]] : []);
|
|
29
|
-
const output = outputs[0];
|
|
30
|
-
if (outputs.length !== 1 || !output || path.posix.normalize(output) !== output ||
|
|
31
|
-
!(output === "/run/training/output" || output.startsWith("/run/training/output/"))) {
|
|
32
|
-
throw Error("Evaluator receipts require one mapped training --out directory");
|
|
33
|
-
}
|
|
34
|
-
const source = path.join(root, "evaluator-routes.json");
|
|
35
|
-
await writeFile(source, JSON.stringify({ version: "spawnfile.training.evaluator-routes.v1", routes: config.evaluatorRoutes,
|
|
36
|
-
receiptPath: path.posix.join(output, "evaluator-requests.jsonl") }), { mode: 0o444, flag: "wx" });
|
|
37
|
-
mounts.push(`type=bind,src=${source},dst=${TRAINING_EVALUATOR_ROUTES_FILE},readonly`);
|
|
38
|
-
env.push(`SPAWNFILE_TRAINING_EVALUATOR_ROUTES_FILE=${TRAINING_EVALUATOR_ROUTES_FILE}`);
|
|
39
|
-
}
|
|
40
|
-
for (const secret of config.evaluatorSecrets ?? []) {
|
|
41
|
-
// The host-uid v1 launcher cannot stage a root-owned copy; bind the canonical leaf at the consumer path.
|
|
42
|
-
if (config.subjectIsolation === "codex-native-sandbox") {
|
|
43
|
-
mounts.push(`type=bind,src=${secret.source},dst=${TRAINING_TYPESAFE_SECRET_FILE},readonly`);
|
|
44
|
-
}
|
|
45
|
-
else
|
|
46
|
-
mounts.push(`type=bind,src=${secret.source},dst=${TRAINING_TYPESAFE_SECRET_INGRESS},readonly`);
|
|
47
|
-
env.push(`SPAWNFILE_TRAINING_TYPESAFE_SECRET_FILE=${TRAINING_TYPESAFE_SECRET_FILE}`);
|
|
48
|
-
}
|
|
49
|
-
return { mounts, env };
|
|
50
|
-
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
type DockerCall = (args: string[], cleanup: boolean) => Promise<{
|
|
2
|
-
code: number;
|
|
3
|
-
stdout: string;
|
|
4
|
-
stderr: string;
|
|
5
|
-
}>;
|
|
6
|
-
/** Called only for an ownership-verified container, before removal, including failure/cancellation. */
|
|
7
|
-
export declare const persistTrainingGrokCredential: (id: string, profile: string, scratch: string, call: DockerCall) => Promise<void>;
|
|
8
|
-
export {};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { writeBackTrainingGrokCredential } from "../../../auth/index.js";
|
|
3
|
-
import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
|
|
4
|
-
/** Called only for an ownership-verified container, before removal, including failure/cancellation. */
|
|
5
|
-
export const persistTrainingGrokCredential = async (id, profile, scratch, call) => {
|
|
6
|
-
const state = await call(["inspect", "--format", "{{json .State}}", id], true);
|
|
7
|
-
if (state.code !== 0)
|
|
8
|
-
throw Error("Cannot verify training credential writer state");
|
|
9
|
-
if (JSON.parse(state.stdout).Running === true) {
|
|
10
|
-
const stopped = await call(["stop", "--time", "5", id], true);
|
|
11
|
-
if (stopped.code !== 0)
|
|
12
|
-
throw Error("Cannot stop training credential writer");
|
|
13
|
-
}
|
|
14
|
-
const terminal = await call(["inspect", "--format", "{{json .State}}", id], true);
|
|
15
|
-
if (terminal.code !== 0 || JSON.parse(terminal.stdout).Running !== false)
|
|
16
|
-
throw Error("Training credential writer is still active");
|
|
17
|
-
const realm = DAIMON_GROK_ENGINE_BROKER.credentialHomePath;
|
|
18
|
-
const candidate = path.join(scratch, "grok-auth.json"), journal = path.join(scratch, "grok-journal.json");
|
|
19
|
-
// Docker writes directly into a host-private directory: no credential bytes in stdout, logs or arguments.
|
|
20
|
-
const copied = await call(["cp", `${id}:${realm}/auth.json`, candidate], true);
|
|
21
|
-
if (copied.code !== 0)
|
|
22
|
-
throw Error("Cannot export training Grok credential");
|
|
23
|
-
const journalCopy = await call(["cp", `${id}:${realm}/.daimon-broker/credential-journal.json`, journal], true);
|
|
24
|
-
// A realm that never rotated has no journal. The auth owner accepts only unchanged bytes in that case.
|
|
25
|
-
await writeBackTrainingGrokCredential(profile, candidate, journalCopy.code === 0 ? journal : `${journal}.absent`);
|
|
26
|
-
};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export { TRAINING_FAKETIME_LIBRARY_PATH, trainingContainerConfigSchema, trainingImageSchema } from "./contract.js";
|
|
2
|
-
export type { TrainingContainerConfig } from "./contract.js";
|
|
3
|
-
export { launchTrainingContainer } from "./launch.js";
|
|
4
|
-
export type { LaunchTrainingContainerOptions } from "./launch.js";
|
|
5
|
-
export { trainingEvaluatorRouteSchema, trainingEvaluatorRoutesSchema, trainingEvaluatorSecretsSchema, TRAINING_EVALUATOR_ROUTES_FILE, TRAINING_TYPESAFE_SECRET_FILE } from "./evaluators.js";
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { TRAINING_FAKETIME_LIBRARY_PATH, trainingContainerConfigSchema, trainingImageSchema } from "./contract.js";
|
|
2
|
-
export { launchTrainingContainer } from "./launch.js";
|
|
3
|
-
export { trainingEvaluatorRouteSchema, trainingEvaluatorRoutesSchema, trainingEvaluatorSecretsSchema, TRAINING_EVALUATOR_ROUTES_FILE, TRAINING_TYPESAFE_SECRET_FILE } from "./evaluators.js";
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { type TrainingExecution } from "../execution.js";
|
|
2
|
-
import type { TrainingContext } from "../contract.js";
|
|
3
|
-
import { type TrainingDockerProcess } from "./process.js";
|
|
4
|
-
export declare const TRAINING_INPUTS_GID = 2000;
|
|
5
|
-
export interface LaunchTrainingContainerOptions {
|
|
6
|
-
image: string;
|
|
7
|
-
configPath: string;
|
|
8
|
-
context: TrainingContext;
|
|
9
|
-
args: readonly string[];
|
|
10
|
-
timeoutMs: number;
|
|
11
|
-
signal?: AbortSignal;
|
|
12
|
-
streams: {
|
|
13
|
-
stdout(line: string): void;
|
|
14
|
-
stderr(line: string): void;
|
|
15
|
-
};
|
|
16
|
-
process?: TrainingDockerProcess;
|
|
17
|
-
execution?: TrainingExecution;
|
|
18
|
-
preparationPath?: string;
|
|
19
|
-
repairPath?: string;
|
|
20
|
-
}
|
|
21
|
-
export declare const launchTrainingContainer: (options: LaunchTrainingContainerOptions) => Promise<number>;
|
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
import { getRegisteredRuntime } from '../../../runtime/registry.js';
|
|
2
|
-
import { randomUUID } from "node:crypto";
|
|
3
|
-
import { chmod, mkdtemp, readFile, realpath, stat, writeFile } from "node:fs/promises";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import { DAIMON_CODEX_NATIVE_SANDBOX_DOCKER_SECURITY_OPTS } from "../../../shared/index.js";
|
|
6
|
-
import { parseTrainingBrokerDeclaration } from "../broker/declaration.js";
|
|
7
|
-
import { trainingSlotsDocument, TRAINING_SLOTS_FILE } from "../broker/paths.js";
|
|
8
|
-
import { assertNotDesktopGrokAuth } from "../broker/entrypoint.js";
|
|
9
|
-
import { TRAINING_BROKER_ENTRYPOINT, trainingBrokerMounts, trainingBrokerSecurityArgs, trainingBrokerTmpfsTargets, trainingRunRequestMount } from "./security.js";
|
|
10
|
-
import { parseDetachedContainerInspect } from "../../runProjectDocker.js";
|
|
11
|
-
import { mapTrainingExecution, trainingExecutionSchema, TRAINING_EXECUTION_FILE, TRAINING_EXECUTION_CAPABILITY_LABEL, TRAINING_EXECUTION_VERSION } from "../execution.js";
|
|
12
|
-
import { verifyCanonicalPins } from "../preparation/inputs.js";
|
|
13
|
-
import { removeTrainingPreparationScratch } from "../preparation/scratch.js";
|
|
14
|
-
import { trainingImageSchema } from "./contract.js";
|
|
15
|
-
import { prepareTrainingEvaluators } from "./evaluators.js";
|
|
16
|
-
import { prepareTrainingContainer } from "./prepare.js";
|
|
17
|
-
import { runTrainingDocker } from "./process.js";
|
|
18
|
-
import { repairEnvelopeSchema } from "../repair/contract.js";
|
|
19
|
-
import { hashJson } from "../preparation/files.js";
|
|
20
|
-
import { parseTrainingMappedPreparation } from "../preparation/contract.js";
|
|
21
|
-
import { persistTrainingGrokCredential } from "./grokWriteback.js";
|
|
22
|
-
import { nativeTrainingSlotsDocument } from "./nativeSlots.js";
|
|
23
|
-
import { createTrainingOutputVolume, trainingOutputVolumeEnabled } from "./outputVolume.js";
|
|
24
|
-
import { prepareTrainingCodexAuthority } from '../../../auth/index.js';
|
|
25
|
-
import { DAIMON_CODEX_SUBSCRIPTION_REALM } from '../../../runtime/daimon/contractManifest.js';
|
|
26
|
-
// The image bakes /run/training/inputs as 0:2000 0750 for brokered worker isolation; the
|
|
27
|
-
// non-brokered host-uid evaluator joins that group so it can still traverse its own inputs.
|
|
28
|
-
export const TRAINING_INPUTS_GID = 2_000;
|
|
29
|
-
const inspectFormat = "{{json .Id}}\n{{json .Name}}\n{{json .Image}}\n{{json .Config.Labels}}";
|
|
30
|
-
export const launchTrainingContainer = async (options) => {
|
|
31
|
-
if (options.signal?.aborted)
|
|
32
|
-
return 130;
|
|
33
|
-
const image = trainingImageSchema.parse(options.image);
|
|
34
|
-
const volumeEnabled = trainingOutputVolumeEnabled();
|
|
35
|
-
const uid = process.getuid?.(), gid = process.getgid?.();
|
|
36
|
-
if (uid === undefined || gid === undefined || uid === 0)
|
|
37
|
-
throw Error("Training requires an explicit non-root local user");
|
|
38
|
-
const configBytes = await readFile(options.configPath, "utf8");
|
|
39
|
-
if (Buffer.byteLength(configBytes) > 1024 * 1024)
|
|
40
|
-
throw Error("Training launch config exceeds 1 MiB");
|
|
41
|
-
const raw = JSON.parse(configBytes);
|
|
42
|
-
const prepared = await prepareTrainingContainer(options.execution
|
|
43
|
-
? { ...raw, output: { ...raw.output, source: options.execution.output } } : raw, options.context, options.args, { createOutput: options.execution !== undefined && !options.args.includes("--resume") });
|
|
44
|
-
const execution = options.execution ? mapTrainingExecution(options.execution, file => {
|
|
45
|
-
const absolute = path.resolve(file);
|
|
46
|
-
const binding = [...prepared.config.inputs, prepared.config.output].find(entry => absolute === entry.source || absolute.startsWith(entry.source + path.sep));
|
|
47
|
-
if (!binding)
|
|
48
|
-
throw Error(`Training execution path is not covered by a declared mount: ${file}`);
|
|
49
|
-
return path.posix.join(binding.destination, path.relative(binding.source, absolute).split(path.sep).join("/"));
|
|
50
|
-
}) : undefined;
|
|
51
|
-
if (options.execution)
|
|
52
|
-
await verifyCanonicalPins(prepared.config.inputs.map((input, index) => ({ ...input, id: String(index), digest: "" })), options.execution.datasetPins, prepared.config.inputs.map(input => input.source));
|
|
53
|
-
// D2: the training Grok login is a dedicated one. Refuse the developer's desktop leaf before Docker ever sees it.
|
|
54
|
-
if (prepared.config.broker) {
|
|
55
|
-
assertNotDesktopGrokAuth(prepared.config.broker.bootstrap);
|
|
56
|
-
const declaration = parseTrainingBrokerDeclaration(JSON.parse(await readFile(prepared.config.broker.declaration, "utf8")));
|
|
57
|
-
if (declaration.slots !== prepared.config.slots)
|
|
58
|
-
throw Error("Training launch and broker declaration slots differ");
|
|
59
|
-
}
|
|
60
|
-
if (options.preparationPath) {
|
|
61
|
-
if (await realpath(options.preparationPath) !== options.preparationPath)
|
|
62
|
-
throw Error("Preparation receipt path must be canonical");
|
|
63
|
-
parseTrainingMappedPreparation(JSON.parse(await readFile(options.preparationPath, "utf8")));
|
|
64
|
-
}
|
|
65
|
-
if (options.repairPath) {
|
|
66
|
-
if (await realpath(options.repairPath) !== options.repairPath)
|
|
67
|
-
throw Error("Repair receipt path must be canonical");
|
|
68
|
-
const raw = JSON.parse(await readFile(options.repairPath, "utf8"));
|
|
69
|
-
const envelope = repairEnvelopeSchema.parse(raw);
|
|
70
|
-
if (["native", "trials", "optimizer"].some(name => name in envelope.receipt.compatibility.components)) {
|
|
71
|
-
throw Error("Repair receipt references external training components; re-prepare with Spawnfile before repairing measurements");
|
|
72
|
-
}
|
|
73
|
-
const registered = await getRegisteredRuntime(options.context.agent.runtime);
|
|
74
|
-
if (!registered?.training?.adapterId || envelope.receipt.current.adapterId !== registered.training.adapterId) {
|
|
75
|
-
throw Error("Repair receipt adapter is not registered for the selected runtime");
|
|
76
|
-
}
|
|
77
|
-
if (hashJson(raw.receipt) !== envelope.digest || envelope.receipt.current.imageId !== image ||
|
|
78
|
-
!prepared.config.inputs.some(input => input.destination === envelope.receipt.parent.root))
|
|
79
|
-
throw Error("Repair receipt launch identity mismatch");
|
|
80
|
-
}
|
|
81
|
-
const execute = options.process ?? runTrainingDocker;
|
|
82
|
-
const controller = new AbortController(), deadline = Date.now() + options.timeoutMs;
|
|
83
|
-
let interrupted = false, timedOut = false;
|
|
84
|
-
const interrupt = () => { interrupted = true; controller.abort(); };
|
|
85
|
-
const timer = setTimeout(() => { timedOut = true; controller.abort(); }, options.timeoutMs);
|
|
86
|
-
options.signal?.addEventListener("abort", interrupt, { once: true });
|
|
87
|
-
process.on("SIGINT", interrupt);
|
|
88
|
-
process.on("SIGTERM", interrupt);
|
|
89
|
-
if (options.signal?.aborted)
|
|
90
|
-
interrupt();
|
|
91
|
-
const prefix = ["--context", prepared.config.dockerContext];
|
|
92
|
-
const call = async (args, cleanup = false, stream = false, cleanupTimeoutMs = 10_000) => {
|
|
93
|
-
if (!cleanup && controller.signal.aborted)
|
|
94
|
-
throw Error("Container operation cancelled");
|
|
95
|
-
return execute([...prefix, ...args], {
|
|
96
|
-
timeoutMs: cleanup ? cleanupTimeoutMs : Math.max(1, deadline - Date.now()),
|
|
97
|
-
...(cleanup ? {} : { signal: controller.signal }), ...(stream ? options.streams : {})
|
|
98
|
-
});
|
|
99
|
-
};
|
|
100
|
-
const name = `spawnfile-training-${randomUUID()}`;
|
|
101
|
-
const labels = { "com.spawnfile.training.owner": name };
|
|
102
|
-
let privateRoot, containerId, creationAttempted = false, startAttempted = false;
|
|
103
|
-
let expectedImage, lastLine = "", closureVerified = false;
|
|
104
|
-
let outputVolume;
|
|
105
|
-
try {
|
|
106
|
-
const endpoint = await execute(["context", "inspect", prepared.config.dockerContext, "--format", "{{json .Endpoints.docker.Host}}"], { timeoutMs: 10_000, signal: controller.signal });
|
|
107
|
-
if (endpoint.code !== 0 || !/^unix:\/\//u.test(JSON.parse(endpoint.stdout)))
|
|
108
|
-
throw Error("Training requires an explicitly selected local Unix Docker context");
|
|
109
|
-
const inspected = await call(["image", "inspect", image, "--format", "{{.Id}}"]);
|
|
110
|
-
expectedImage = inspected.stdout.trim();
|
|
111
|
-
if (inspected.code !== 0 || !/^sha256:[a-f0-9]{64}$/u.test(expectedImage) || (image.startsWith("sha256:") && image !== expectedImage))
|
|
112
|
-
throw Error("Training image must be locally available with an immutable identity");
|
|
113
|
-
if (execution) {
|
|
114
|
-
const capability = await call(["image", "inspect", expectedImage, "--format", `{{json (index .Config.Labels "${TRAINING_EXECUTION_CAPABILITY_LABEL}")}}`]);
|
|
115
|
-
if (capability.code !== 0 || capability.stdout.trim() !== JSON.stringify(TRAINING_EXECUTION_VERSION)) {
|
|
116
|
-
throw Error(`Authored training requires an image implementing --spawnfile-execution ${TRAINING_EXECUTION_FILE} and labelled ${TRAINING_EXECUTION_CAPABILITY_LABEL}=${TRAINING_EXECUTION_VERSION}; legacy Training datasets are incompatible`);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
privateRoot = await realpath(await mkdtemp(path.join(path.dirname(prepared.config.output.source), ".spawnfile-training-container-")));
|
|
120
|
-
await chmod(privateRoot, 0o700);
|
|
121
|
-
const contextFile = path.join(privateRoot, "context.json");
|
|
122
|
-
await writeFile(contextFile, JSON.stringify(prepared.context), { mode: 0o444, flag: "wx" });
|
|
123
|
-
const executionFile = path.join(privateRoot, "execution.json");
|
|
124
|
-
if (execution)
|
|
125
|
-
await writeFile(executionFile, JSON.stringify(trainingExecutionSchema.parse(execution)), { mode: 0o444, flag: "wx" });
|
|
126
|
-
const evaluators = await prepareTrainingEvaluators(privateRoot, prepared.config, prepared.args);
|
|
127
|
-
if (volumeEnabled) {
|
|
128
|
-
outputVolume = createTrainingOutputVolume({ name, image: expectedImage, host: prepared.config.output.source, scratch: privateRoot,
|
|
129
|
-
uid, gid, runtimeUid: prepared.config.broker ? 2000 : uid, runtimeGid: prepared.config.broker ? 2000 : gid,
|
|
130
|
-
authSources: [...prepared.config.auth, ...prepared.config.evaluatorSecrets ?? []].map(auth => auth.source),
|
|
131
|
-
context: prepared.config.dockerContext, call: (args, cleanup) => call(args, cleanup, false, 120_000), stderr: options.streams.stderr });
|
|
132
|
-
await outputVolume.seed();
|
|
133
|
-
}
|
|
134
|
-
const mounts = [...evaluators.mounts, ...prepared.config.inputs.map((entry) => `type=bind,src=${entry.source},dst=${entry.destination},readonly`),
|
|
135
|
-
outputVolume?.mount ?? `type=bind,src=${prepared.config.output.source},dst=/run/training/output`,
|
|
136
|
-
`type=bind,src=${contextFile},dst=/run/spawnfile-training/context.json,readonly`,
|
|
137
|
-
...execution ? [`type=bind,src=${executionFile},dst=${TRAINING_EXECUTION_FILE},readonly`] : [],
|
|
138
|
-
...options.preparationPath ? [`type=bind,src=${options.preparationPath},dst=/run/spawnfile-training/preparation.json,readonly`] : [],
|
|
139
|
-
...options.repairPath ? [`type=bind,src=${options.repairPath},dst=/run/spawnfile-training/repair.json,readonly`] : [],
|
|
140
|
-
...prepared.config.auth.map((entry) => `type=bind,src=${entry.source},dst=/run/spawnfile-training-auth/${entry.provider},readonly`)];
|
|
141
|
-
const broker = prepared.config.broker;
|
|
142
|
-
const codex = prepared.config.auth.find(entry => entry.provider === 'codex');
|
|
143
|
-
if (codex && !broker) {
|
|
144
|
-
const account = await prepareTrainingCodexAuthority(codex.source, prepared.config.dockerContext);
|
|
145
|
-
mounts.push(`type=bind,src=${account},dst=${DAIMON_CODEX_SUBSCRIPTION_REALM.durableMountPath}`, `type=bind,src=${codex.source},dst=${DAIMON_CODEX_SUBSCRIPTION_REALM.bootstrapMountPath},readonly`);
|
|
146
|
-
}
|
|
147
|
-
if (broker) {
|
|
148
|
-
mounts.push(trainingRunRequestMount(prepared.config.output.source, prepared.args));
|
|
149
|
-
const slotsFile = path.join(privateRoot, "slots.json");
|
|
150
|
-
await writeFile(slotsFile, `${JSON.stringify(trainingSlotsDocument(prepared.config.slots))}\n`, { mode: 0o444, flag: "wx" });
|
|
151
|
-
mounts.push(`type=bind,src=${slotsFile},dst=${TRAINING_SLOTS_FILE},readonly`);
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
const slotsFile = path.join(privateRoot, "slots.json");
|
|
155
|
-
await writeFile(slotsFile, `${JSON.stringify(nativeTrainingSlotsDocument(prepared.config.slots, uid))}\n`, { mode: 0o444, flag: "wx" });
|
|
156
|
-
mounts.push(`type=bind,src=${slotsFile},dst=${TRAINING_SLOTS_FILE},readonly`);
|
|
157
|
-
}
|
|
158
|
-
// A brokered Grok slot runs the launcher, the broker and the model's own worker uid inside this container, so it
|
|
159
|
-
// starts as root with the production Daimon capability set instead of the host user with no capabilities at all.
|
|
160
|
-
const privilege = broker
|
|
161
|
-
? [...await trainingBrokerSecurityArgs(privateRoot), "--pids-limit", "2048",
|
|
162
|
-
...trainingBrokerTmpfsTargets(prepared.config.slots).flatMap((entry) => ["--tmpfs", `${entry.path}:rw,nosuid,nodev,size=${entry.size},mode=${entry.mode}`])]
|
|
163
|
-
: ["--user", `${uid}:${gid}`, "--group-add", String(TRAINING_INPUTS_GID), "--cap-drop", "ALL", "--security-opt", "no-new-privileges",
|
|
164
|
-
...DAIMON_CODEX_NATIVE_SANDBOX_DOCKER_SECURITY_OPTS, "--pids-limit", String(512 * prepared.config.slots),
|
|
165
|
-
"--tmpfs", `/tmp:rw,nosuid,nodev,size=${prepared.config.slots}g,uid=${uid},gid=${gid},mode=1777`, "--tmpfs", `/work:rw,nosuid,nodev,size=${4 * prepared.config.slots}g,uid=${uid},gid=${gid},mode=700`,
|
|
166
|
-
"--tmpfs", `/home/training:rw,nosuid,nodev,size=${prepared.config.slots}g,uid=${uid},gid=${gid},mode=700`];
|
|
167
|
-
const args = ["create", "--name", name, "--label", `com.spawnfile.training.owner=${name}`,
|
|
168
|
-
"--init", "--read-only", ...privilege,
|
|
169
|
-
"--env", "HOME=/home/training", "--workdir", "/work", "--entrypoint", broker ? TRAINING_BROKER_ENTRYPOINT : "/opt/training/bin/train",
|
|
170
|
-
...(broker ? ["--env", "SPAWNFILE_TRAINING_MODEL_REQUEST_CAP=broker"] : []),
|
|
171
|
-
...evaluators.env.flatMap(value => ["--env", value]),
|
|
172
|
-
...[...mounts, ...(broker ? trainingBrokerMounts(broker) : [])].flatMap((mount) => ["--mount", mount]),
|
|
173
|
-
...(prepared.viewerPort === undefined ? [] : ["--publish", `127.0.0.1:${prepared.viewerPort}:${prepared.viewerPort}`]), expectedImage,
|
|
174
|
-
"train", "--spawnfile-context", "/run/spawnfile-training/context.json",
|
|
175
|
-
...(execution ? ["--spawnfile-execution", TRAINING_EXECUTION_FILE] : []), ...prepared.args];
|
|
176
|
-
creationAttempted = true;
|
|
177
|
-
const created = await call(args);
|
|
178
|
-
containerId = created.stdout.trim();
|
|
179
|
-
if (created.code !== 0 || !/^[a-f0-9]{64}$/u.test(containerId)) {
|
|
180
|
-
let diagnostic = created.stderr;
|
|
181
|
-
for (const auth of [...prepared.config.auth, ...prepared.config.evaluatorSecrets ?? []])
|
|
182
|
-
diagnostic = diagnostic.replaceAll(auth.source, "[auth source]");
|
|
183
|
-
diagnostic = diagnostic.replace(/\p{Cc}/gu, " ").trim().slice(0, 2048);
|
|
184
|
-
throw Error(`Docker did not return a valid training container identity${diagnostic ? `: ${diagnostic}` : ""}`);
|
|
185
|
-
}
|
|
186
|
-
const identity = await call(["inspect", "--format", inspectFormat, containerId]);
|
|
187
|
-
if (identity.code !== 0 || parseDetachedContainerInspect(identity.stdout, containerId, labels, name).imageId !== expectedImage)
|
|
188
|
-
throw Error("Training container identity mismatch");
|
|
189
|
-
if (controller.signal.aborted)
|
|
190
|
-
throw Error("Container operation cancelled");
|
|
191
|
-
startAttempted = true;
|
|
192
|
-
const result = await execute([...prefix, "start", "--attach", containerId], {
|
|
193
|
-
timeoutMs: Math.max(1, deadline - Date.now()), signal: controller.signal,
|
|
194
|
-
stdout: (line) => { if (line.trim())
|
|
195
|
-
lastLine = line; options.streams.stdout(line); }, stderr: options.streams.stderr
|
|
196
|
-
});
|
|
197
|
-
const terminal = await call(["inspect", "--format", "{{json .State}}", containerId]);
|
|
198
|
-
const state = JSON.parse(terminal.stdout);
|
|
199
|
-
if (terminal.code !== 0 || state.Running !== false || !Number.isInteger(state.ExitCode) || result.code !== state.ExitCode)
|
|
200
|
-
throw Error("Training container final state is unverified");
|
|
201
|
-
await outputVolume?.export();
|
|
202
|
-
if (state.ExitCode !== 0 && state.ExitCode !== 1)
|
|
203
|
-
return state.ExitCode;
|
|
204
|
-
const receipt = JSON.parse(lastLine);
|
|
205
|
-
if (receipt.status !== "completed" || typeof receipt.index !== "string" || !receipt.index.startsWith("/run/training/output/") || path.posix.normalize(receipt.index) !== receipt.index)
|
|
206
|
-
throw Error("Training exited without a valid final receipt");
|
|
207
|
-
const artifact = path.join(prepared.config.output.source, receipt.index.slice("/run/training/output/".length));
|
|
208
|
-
if (await realpath(artifact) !== artifact || !(await stat(artifact)).isFile())
|
|
209
|
-
throw Error("Training completion artifact is missing or escapes output");
|
|
210
|
-
return state.ExitCode;
|
|
211
|
-
}
|
|
212
|
-
catch (error) {
|
|
213
|
-
if (interrupted)
|
|
214
|
-
return 130;
|
|
215
|
-
if (timedOut)
|
|
216
|
-
throw Error("Container training exceeded command deadline");
|
|
217
|
-
throw error;
|
|
218
|
-
}
|
|
219
|
-
finally {
|
|
220
|
-
clearTimeout(timer);
|
|
221
|
-
try {
|
|
222
|
-
if (creationAttempted) {
|
|
223
|
-
// A timed-out create may still have created our uniquely labelled container.
|
|
224
|
-
const found = await call(["inspect", "--format", inspectFormat, name], true);
|
|
225
|
-
if (found.code === 0) {
|
|
226
|
-
const id = JSON.parse(found.stdout.split("\n")[0]);
|
|
227
|
-
if (typeof id !== "string" || parseDetachedContainerInspect(found.stdout, id, labels, name).imageId !== expectedImage || (containerId && /^[a-f0-9]{64}$/u.test(containerId) && id !== containerId))
|
|
228
|
-
throw Error("Refusing cleanup of unverified training container");
|
|
229
|
-
try {
|
|
230
|
-
if (startAttempted) {
|
|
231
|
-
const current = await call(["inspect", "--format", "{{json .State}}", id], true);
|
|
232
|
-
if (current.code !== 0)
|
|
233
|
-
throw Error("Cannot verify training writer state");
|
|
234
|
-
if (JSON.parse(current.stdout).Running === true) {
|
|
235
|
-
const stopped = await call(["stop", "--time", "5", id], true);
|
|
236
|
-
if (stopped.code !== 0)
|
|
237
|
-
throw Error("Cannot stop training output writer");
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
if (startAttempted && prepared.config.broker && privateRoot) {
|
|
241
|
-
await persistTrainingGrokCredential(id, prepared.config.broker.bootstrap, privateRoot, call);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
finally {
|
|
245
|
-
const removed = await call(["rm", "--force", id], true);
|
|
246
|
-
const remaining = await call(["container", "ls", "--all", "--no-trunc", "--filter", `id=${id}`, "--format", "{{.ID}}"], true);
|
|
247
|
-
if (removed.code !== 0 || remaining.code !== 0 || remaining.stdout.trim())
|
|
248
|
-
throw Error("Training container cleanup is unverified");
|
|
249
|
-
closureVerified = true;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
const remaining = await call(["container", "ls", "--all", "--filter", `name=^/${name}$`, "--format", "{{.ID}}"], true);
|
|
254
|
-
if (remaining.code !== 0 || remaining.stdout.trim())
|
|
255
|
-
throw Error("Training container closure is unknown");
|
|
256
|
-
closureVerified = true;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
finally {
|
|
261
|
-
try {
|
|
262
|
-
const closed = !creationAttempted || closureVerified;
|
|
263
|
-
try {
|
|
264
|
-
if (closed)
|
|
265
|
-
await outputVolume?.export();
|
|
266
|
-
}
|
|
267
|
-
finally {
|
|
268
|
-
await outputVolume?.dispose(closed);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
finally {
|
|
272
|
-
options.signal?.removeEventListener("abort", interrupt);
|
|
273
|
-
process.removeListener("SIGINT", interrupt);
|
|
274
|
-
process.removeListener("SIGTERM", interrupt);
|
|
275
|
-
if (privateRoot && (!creationAttempted || closureVerified) && (!outputVolume || outputVolume.safeToCleanup()))
|
|
276
|
-
await removeTrainingPreparationScratch(privateRoot);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/** Native trials keep fresh per-trial roots; only their port blocks are provisioned. */
|
|
2
|
-
export declare const nativeTrainingSlotsDocument: (slots: number, workerUid: number) => {
|
|
3
|
-
schema: "spawnfile.training-slots.v2";
|
|
4
|
-
slots: {
|
|
5
|
-
index: number;
|
|
6
|
-
workerUid: number;
|
|
7
|
-
isolation: "shared-uid";
|
|
8
|
-
roots: {};
|
|
9
|
-
ports: {
|
|
10
|
-
base: number;
|
|
11
|
-
count: number;
|
|
12
|
-
};
|
|
13
|
-
}[];
|
|
14
|
-
};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { assertTrainingSlotCount, TRAINING_PORT_BASE, TRAINING_PORT_STRIDE } from "../broker/paths.js";
|
|
2
|
-
/** Native trials keep fresh per-trial roots; only their port blocks are provisioned. */
|
|
3
|
-
export const nativeTrainingSlotsDocument = (slots, workerUid) => {
|
|
4
|
-
if (!Number.isInteger(workerUid) || workerUid <= 0 || workerUid > 4_294_967_294)
|
|
5
|
-
throw Error("Native slots require a non-root worker uid");
|
|
6
|
-
return {
|
|
7
|
-
schema: "spawnfile.training-slots.v2",
|
|
8
|
-
slots: Array.from({ length: assertTrainingSlotCount(slots) }, (_, index) => ({
|
|
9
|
-
index, workerUid, isolation: "shared-uid", roots: {},
|
|
10
|
-
ports: { base: TRAINING_PORT_BASE + index * TRAINING_PORT_STRIDE, count: TRAINING_PORT_STRIDE }
|
|
11
|
-
}))
|
|
12
|
-
};
|
|
13
|
-
};
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/** Runs only in the verified Linux training image. No project code is imported. */
|
|
2
|
-
export const trainingOutputCopyProgram = String.raw `
|
|
3
|
-
const fs = require('node:fs');
|
|
4
|
-
const path = require('node:path');
|
|
5
|
-
const [source, destination, owner, group] = process.argv.slice(1);
|
|
6
|
-
const uid = Number(owner), gid = Number(group);
|
|
7
|
-
const limits = { entries: 1_000_000, bytes: 64 * 1024 ** 3, depth: 64 };
|
|
8
|
-
let entries = 0, bytes = 0;
|
|
9
|
-
const links = new Map();
|
|
10
|
-
const buffer = Buffer.alloc(1024 * 1024);
|
|
11
|
-
// Linux fd-relative traversal keeps renamed directories and symlink swaps from
|
|
12
|
-
// redirecting reads/writes outside the two mounts. The fallback permits local QA.
|
|
13
|
-
const fdPath = (fd, file) => process.platform === 'linux' ? '/proc/self/fd/' + fd : file;
|
|
14
|
-
const directory = fs.constants.O_RDONLY | fs.constants.O_DIRECTORY | fs.constants.O_NOFOLLOW;
|
|
15
|
-
function copy(src, dst, depth) {
|
|
16
|
-
if (++entries > limits.entries || depth > limits.depth) throw Error('Output tree exceeds entry/depth limit');
|
|
17
|
-
const info = fs.lstatSync(src);
|
|
18
|
-
if (info.isSymbolicLink()) {
|
|
19
|
-
const target = fs.readlinkSync(src);
|
|
20
|
-
bytes += Buffer.byteLength(target);
|
|
21
|
-
if (bytes > limits.bytes) throw Error('Output exceeds 64 GiB');
|
|
22
|
-
fs.symlinkSync(target, dst); fs.lchownSync(dst, uid, gid);
|
|
23
|
-
fs.lutimesSync(dst, info.atime, info.mtime);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
if (info.isDirectory()) {
|
|
27
|
-
const input = fs.openSync(src, directory);
|
|
28
|
-
let output;
|
|
29
|
-
try {
|
|
30
|
-
if (depth !== 0) fs.mkdirSync(dst, { mode: 0o700 });
|
|
31
|
-
output = fs.openSync(dst, directory);
|
|
32
|
-
fs.fchownSync(output, uid, gid);
|
|
33
|
-
const from = fdPath(input, src), to = fdPath(output, dst);
|
|
34
|
-
if (depth === 0 && fs.readdirSync(to).length) throw Error('Output copy destination must be empty');
|
|
35
|
-
for (const name of fs.readdirSync(from)) copy(path.join(from, name), path.join(to, name), depth + 1);
|
|
36
|
-
fs.fchownSync(output, uid, gid); fs.fchmodSync(output, info.mode & 0o7777);
|
|
37
|
-
fs.futimesSync(output, info.atime, info.mtime); fs.fsyncSync(output);
|
|
38
|
-
} finally { if (output !== undefined) fs.closeSync(output); fs.closeSync(input); }
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
if (!info.isFile()) throw Error('Output contains a special file');
|
|
42
|
-
const input = fs.openSync(src, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW | fs.constants.O_NONBLOCK);
|
|
43
|
-
let output;
|
|
44
|
-
try {
|
|
45
|
-
const opened = fs.fstatSync(input);
|
|
46
|
-
if (!opened.isFile() || opened.dev !== info.dev || opened.ino !== info.ino) throw Error('Output changed during copy');
|
|
47
|
-
const key = info.dev + ':' + info.ino;
|
|
48
|
-
// Store a path rooted at the destination mount, not an fd that closes after recursion.
|
|
49
|
-
const previous = links.get(key);
|
|
50
|
-
if (previous) { fs.linkSync(previous, dst); return; }
|
|
51
|
-
bytes += info.size;
|
|
52
|
-
if (bytes > limits.bytes) throw Error('Output exceeds 64 GiB');
|
|
53
|
-
output = fs.openSync(dst, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_NOFOLLOW, 0o600);
|
|
54
|
-
fs.fchownSync(output, uid, gid);
|
|
55
|
-
let position = 0;
|
|
56
|
-
while (position < info.size) {
|
|
57
|
-
const count = fs.readSync(input, buffer, 0, Math.min(buffer.length, info.size - position), position);
|
|
58
|
-
if (!count) throw Error('Output truncated during copy');
|
|
59
|
-
let written = 0;
|
|
60
|
-
while (written < count) written += fs.writeSync(output, buffer, written, count - written);
|
|
61
|
-
position += count;
|
|
62
|
-
}
|
|
63
|
-
const after = fs.fstatSync(input);
|
|
64
|
-
if (after.size !== info.size || after.mtimeMs !== info.mtimeMs) throw Error('Output changed during copy');
|
|
65
|
-
fs.fchownSync(output, uid, gid); fs.fchmodSync(output, info.mode & 0o7777);
|
|
66
|
-
fs.futimesSync(output, info.atime, info.mtime); fs.fsyncSync(output);
|
|
67
|
-
links.set(key, fs.realpathSync(dst));
|
|
68
|
-
} finally { if (output !== undefined) fs.closeSync(output); fs.closeSync(input); }
|
|
69
|
-
}
|
|
70
|
-
copy(source, destination, 0);
|
|
71
|
-
console.log('spawnfile-output-copy-complete');
|
|
72
|
-
`;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
type DockerCall = (args: string[], cleanup?: boolean) => Promise<{
|
|
2
|
-
code: number;
|
|
3
|
-
stdout: string;
|
|
4
|
-
stderr: string;
|
|
5
|
-
}>;
|
|
6
|
-
export declare const trainingOutputVolumeEnabled: () => boolean;
|
|
7
|
-
/** One launch owns this volume; budgets and auth volumes are never touched. */
|
|
8
|
-
export declare const createTrainingOutputVolume: (options: {
|
|
9
|
-
name: string;
|
|
10
|
-
image: string;
|
|
11
|
-
host: string;
|
|
12
|
-
scratch: string;
|
|
13
|
-
uid: number;
|
|
14
|
-
gid: number;
|
|
15
|
-
runtimeUid: number;
|
|
16
|
-
runtimeGid: number;
|
|
17
|
-
context: string;
|
|
18
|
-
authSources?: readonly string[];
|
|
19
|
-
call: DockerCall;
|
|
20
|
-
stderr(line: string): void;
|
|
21
|
-
}) => {
|
|
22
|
-
safeToCleanup: () => boolean;
|
|
23
|
-
mount: string;
|
|
24
|
-
seed(): Promise<void>;
|
|
25
|
-
export(): Promise<void>;
|
|
26
|
-
dispose(closureVerified: boolean): Promise<void>;
|
|
27
|
-
};
|
|
28
|
-
export {};
|