spawnfile 0.1.32 → 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,110 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import { readFileSync } from "node:fs";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { SpawnfileError } from "../../../shared/index.js";
|
|
5
|
-
import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
|
|
6
|
-
/** Filesystems that silently ignore `chown`/`chmod`, so a worker-uid probe over them proves nothing. */
|
|
7
|
-
export const UNENFORCED_OWNERSHIP_FILESYSTEMS = ["virtiofs", "9p", "nfs", "nfs4", "cifs", "smb3", "vboxsf", "grpcfuse"];
|
|
8
|
-
const isUnenforced = (fstype) => UNENFORCED_OWNERSHIP_FILESYSTEMS.includes(fstype) || fstype.startsWith("fuse");
|
|
9
|
-
/**
|
|
10
|
-
* The filesystem type backing `target`, from the longest mount point that is a
|
|
11
|
-
* prefix of it. `/proc/self/mountinfo` octal-escapes space, tab, newline and
|
|
12
|
-
* backslash in the mount point field, exactly as the durable-mount guard
|
|
13
|
-
* already handles elsewhere in this compiler.
|
|
14
|
-
*/
|
|
15
|
-
export const resolveBackingFilesystem = (target, mountinfo) => {
|
|
16
|
-
let best = "", fstype = "";
|
|
17
|
-
for (const line of mountinfo.split("\n")) {
|
|
18
|
-
const fields = line.split(" ");
|
|
19
|
-
const separator = fields.indexOf("-");
|
|
20
|
-
if (separator < 0 || fields.length < separator + 2)
|
|
21
|
-
continue;
|
|
22
|
-
const mountPoint = (fields[4] ?? "").replace(/\\(04[0011]|134)/gu, (match) => ({ "\\040": " ", "\\011": "\t", "\\012": "\n", "\\134": "\\" }[match] ?? match));
|
|
23
|
-
if (mountPoint !== "/" && target !== mountPoint && !target.startsWith(`${mountPoint}/`))
|
|
24
|
-
continue;
|
|
25
|
-
if (mountPoint.length >= best.length) {
|
|
26
|
-
best = mountPoint;
|
|
27
|
-
fstype = fields[separator + 1] ?? "";
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return fstype;
|
|
31
|
-
};
|
|
32
|
-
/**
|
|
33
|
-
* One denied canary per deny path, or a refusal naming the first path whose
|
|
34
|
-
* denial this container cannot prove.
|
|
35
|
-
*
|
|
36
|
-
* Three cases, in decreasing strength:
|
|
37
|
-
*
|
|
38
|
-
* - A **sealed** path (the datasets' root) must sit on a filesystem that
|
|
39
|
-
* enforces unix ownership and must be observed *unenterable* by the worker
|
|
40
|
-
* uid. `unenforcedBindPolicy` does not reach it: the sandbox profile alone
|
|
41
|
-
* is a boundary the worker can lift from inside a namespace of its own, and
|
|
42
|
-
* the held-out test set is the one thing that cannot rest on it.
|
|
43
|
-
* - Any other path on an ownership-enforcing filesystem — a host bind over
|
|
44
|
-
* ext4/xfs/btrfs/overlay included — gets a real worker-uid read probe. This
|
|
45
|
-
* is what makes the documented `refuse` default reachable: a host bind is
|
|
46
|
-
* only unprovable where the filesystem says so.
|
|
47
|
-
* - A path on a filesystem that ignores ownership (virtiofs and grpcfuse under
|
|
48
|
-
* Docker Desktop and Colima, 9p, nfs, cifs, fuse) cannot be probed at all.
|
|
49
|
-
* `refuse` — the default — fails the recycle and writes no receipt;
|
|
50
|
-
* `profile-only` accepts the attested deny entry as that path's only
|
|
51
|
-
* boundary and names every such path in the supervisor log.
|
|
52
|
-
*/
|
|
53
|
-
export const resolveTrainingCanaries = async (options) => {
|
|
54
|
-
const canaries = [];
|
|
55
|
-
for (const target of options.denyPaths) {
|
|
56
|
-
const fstype = resolveBackingFilesystem(target, options.mountinfo);
|
|
57
|
-
const origin = `${options.hostBindPaths.includes(target) ? "a host bind mount on " : ""}${fstype || "an unknown filesystem"}`;
|
|
58
|
-
if (options.sealedPaths.includes(target)) {
|
|
59
|
-
if (isUnenforced(fstype)) {
|
|
60
|
-
throw new SpawnfileError("runtime_error", `Grok slot sealed canary ${target} is backed by ${origin}, which ignores unix ownership, so the worker uid's denial cannot be proven; the sealed datasets must sit under a directory on an ownership-enforcing filesystem and no unenforcedBindPolicy waives this`);
|
|
61
|
-
}
|
|
62
|
-
if (!await options.probe(target, "enter")) {
|
|
63
|
-
throw new SpawnfileError("runtime_error", `Grok slot sealed canary ${target} is still reachable by the worker uid`);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
else if (isUnenforced(fstype)) {
|
|
67
|
-
if (options.unenforcedBindPolicy === "refuse") {
|
|
68
|
-
throw new SpawnfileError("runtime_error", `Grok slot canary ${target} is backed by ${origin}, which ignores unix ownership; declare unenforcedBindPolicy "profile-only" to accept the bubblewrap deny list as its only boundary`);
|
|
69
|
-
}
|
|
70
|
-
options.log(`canary ${target} certified by the enforced sandbox profile only (${origin} ignores unix ownership)`);
|
|
71
|
-
}
|
|
72
|
-
else if (!await options.probe(target, "read")) {
|
|
73
|
-
throw new SpawnfileError("runtime_error", `Grok slot canary ${target} is still readable by the worker uid`);
|
|
74
|
-
}
|
|
75
|
-
canaries.push({ path: target, method: "sandboxed-read", result: "denied" });
|
|
76
|
-
}
|
|
77
|
-
return canaries;
|
|
78
|
-
};
|
|
79
|
-
/** `noopolis.daimon.grok-slot-preflight.v2`, in the exact member order Daimon's strict schema accepts. */
|
|
80
|
-
export const buildTrainingSlotReceipt = (input) => {
|
|
81
|
-
if (!/^[a-f0-9]{64}$/u.test(input.nonce))
|
|
82
|
-
throw new SpawnfileError("runtime_error", "Grok slot recycle nonce must be 32 random bytes in lowercase hex");
|
|
83
|
-
if (!Number.isSafeInteger(input.generation) || input.generation < 1)
|
|
84
|
-
throw new SpawnfileError("runtime_error", "Grok slot generation must be a positive integer");
|
|
85
|
-
if (input.canaries.length === 0)
|
|
86
|
-
throw new SpawnfileError("runtime_error", "Grok slot receipt requires at least one denied canary");
|
|
87
|
-
return {
|
|
88
|
-
version: DAIMON_GROK_ENGINE_BROKER.slotPreflightVersion,
|
|
89
|
-
slot: input.slot,
|
|
90
|
-
worker_uid: input.workerUid,
|
|
91
|
-
generation: input.generation,
|
|
92
|
-
nonce: input.nonce,
|
|
93
|
-
projection_sha256: input.projectionSha256,
|
|
94
|
-
sandbox_profile_sha256: input.sandboxProfileSha256,
|
|
95
|
-
seccomp_profile_sha256: input.seccompProfileSha256,
|
|
96
|
-
sandbox_runtime: "bubblewrap",
|
|
97
|
-
grok_executable_sha256: input.grokExecutableSha256,
|
|
98
|
-
canaries: [...input.canaries],
|
|
99
|
-
created_at: `${input.createdAt.toISOString().slice(0, 23)}Z`
|
|
100
|
-
};
|
|
101
|
-
};
|
|
102
|
-
/** sha256 of the pinned Grok executable the slot's workers exec, refused unless it is a manifest-pinned 1.0.34 build. */
|
|
103
|
-
export const readGrokExecutableSha256 = (executable = DAIMON_GROK_ENGINE_BROKER.grokExecutablePath) => {
|
|
104
|
-
const digest = createHash("sha256").update(readFileSync(executable)).digest("hex");
|
|
105
|
-
const pinned = [DAIMON_GROK_ENGINE_BROKER.grokCliArtifacts.arm64.sha256, DAIMON_GROK_ENGINE_BROKER.grokCliArtifacts.x64.sha256];
|
|
106
|
-
if (!pinned.includes(digest)) {
|
|
107
|
-
throw new SpawnfileError("runtime_error", `${path.basename(executable)} is not the manifest-pinned Grok ${DAIMON_GROK_ENGINE_BROKER.grokCliVersion} build`);
|
|
108
|
-
}
|
|
109
|
-
return digest;
|
|
110
|
-
};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { type Socket } from "node:net";
|
|
2
|
-
/** A reply is one short JSON line; anything longer is not this supervisor. */
|
|
3
|
-
export declare const TRAINING_RECYCLE_MAX_REPLY_BYTES = 65536;
|
|
4
|
-
/** Above the supervisor's 120 s drain deadline plus wipe, provision and canaries. */
|
|
5
|
-
export declare const TRAINING_RECYCLE_DEFAULT_TIMEOUT_MS = 180000;
|
|
6
|
-
export interface RecycleTrainingSlotOptions {
|
|
7
|
-
slot: number;
|
|
8
|
-
/** This trial's 32-byte hex nonce; the published receipt must echo it. */
|
|
9
|
-
nonce: string;
|
|
10
|
-
signal?: AbortSignal;
|
|
11
|
-
/** Opens the supervisor connection; defaults to the container's fixed supervisor socket. */
|
|
12
|
-
connect?: () => Socket;
|
|
13
|
-
timeoutMs?: number;
|
|
14
|
-
}
|
|
15
|
-
export interface TrainingSlotRecycleReceipt {
|
|
16
|
-
slot: number;
|
|
17
|
-
generation: number;
|
|
18
|
-
nonce: string;
|
|
19
|
-
/** The receipt path the supervisor says it published; callers compare it to the slot descriptor. */
|
|
20
|
-
receipt: string;
|
|
21
|
-
durationMs: number;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* One `recycle` over the root slot supervisor socket (`spawnfile.training-slot-supervisor.v2`).
|
|
25
|
-
*
|
|
26
|
-
* The verb takes a slot and a nonce, never a path or a command: the container
|
|
27
|
-
* replays its own audited provisioning and publishes the slot preflight receipt
|
|
28
|
-
* echoing this nonce. The answer must bind this request exactly (protocol,
|
|
29
|
-
* verb, slot, nonce, a generation of at least 1) or it is refused; a supervisor
|
|
30
|
-
* refusal surfaces with its own reason. The reply is bounded, and the call is
|
|
31
|
-
* bounded by `timeoutMs` and `signal`.
|
|
32
|
-
*/
|
|
33
|
-
export declare const recycleTrainingSlot: (options: RecycleTrainingSlotOptions) => Promise<TrainingSlotRecycleReceipt>;
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { createConnection } from "node:net";
|
|
2
|
-
import { SpawnfileError } from "../../../shared/index.js";
|
|
3
|
-
import { TRAINING_MAX_SLOTS, TRAINING_SUPERVISOR_SOCKET } from "./paths.js";
|
|
4
|
-
import { TRAINING_SUPERVISOR_PROTOCOL } from "./supervisor.js";
|
|
5
|
-
/** A reply is one short JSON line; anything longer is not this supervisor. */
|
|
6
|
-
export const TRAINING_RECYCLE_MAX_REPLY_BYTES = 65_536;
|
|
7
|
-
/** Above the supervisor's 120 s drain deadline plus wipe, provision and canaries. */
|
|
8
|
-
export const TRAINING_RECYCLE_DEFAULT_TIMEOUT_MS = 180_000;
|
|
9
|
-
const NONCE = /^[a-f0-9]{64}$/u;
|
|
10
|
-
const REPLY_KEYS = ["durationMs", "generation", "nonce", "ok", "receipt", "slot", "v", "verb"];
|
|
11
|
-
const refuse = (message) => new SpawnfileError("runtime_error", message);
|
|
12
|
-
/** The supervisor's refusal text is diagnostic only; keep it one bounded printable line. */
|
|
13
|
-
const refusalText = (value) => typeof value === "string" ? value.replace(/[^\x20-\x7e]/gu, "?").slice(0, 512) || "unknown" : "unknown";
|
|
14
|
-
const bindReply = (answer, slot, nonce) => {
|
|
15
|
-
if (answer.ok !== true)
|
|
16
|
-
throw refuse(`Training slot ${slot} recycle refused: ${refusalText(answer.error)}`);
|
|
17
|
-
if (Object.keys(answer).sort().join(",") !== REPLY_KEYS.join(",") || answer.verb !== "recycle") {
|
|
18
|
-
throw refuse("Training slot recycle answer is not a recycle receipt");
|
|
19
|
-
}
|
|
20
|
-
if (answer.slot !== slot)
|
|
21
|
-
throw refuse(`Training slot recycle answer names slot ${String(answer.slot)}, not the leased slot ${slot}`);
|
|
22
|
-
if (answer.nonce !== nonce)
|
|
23
|
-
throw refuse("Training slot recycle answer does not echo this trial's nonce");
|
|
24
|
-
if (!Number.isSafeInteger(answer.generation) || answer.generation < 1) {
|
|
25
|
-
throw refuse("Training slot recycle answer carries no valid generation");
|
|
26
|
-
}
|
|
27
|
-
if (typeof answer.receipt !== "string" || answer.receipt.length === 0)
|
|
28
|
-
throw refuse("Training slot recycle answer names no receipt");
|
|
29
|
-
if (typeof answer.durationMs !== "number" || !Number.isFinite(answer.durationMs) || answer.durationMs < 0) {
|
|
30
|
-
throw refuse("Training slot recycle answer carries no valid duration");
|
|
31
|
-
}
|
|
32
|
-
return { slot, generation: answer.generation, nonce, receipt: answer.receipt, durationMs: answer.durationMs };
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* One `recycle` over the root slot supervisor socket (`spawnfile.training-slot-supervisor.v2`).
|
|
36
|
-
*
|
|
37
|
-
* The verb takes a slot and a nonce, never a path or a command: the container
|
|
38
|
-
* replays its own audited provisioning and publishes the slot preflight receipt
|
|
39
|
-
* echoing this nonce. The answer must bind this request exactly (protocol,
|
|
40
|
-
* verb, slot, nonce, a generation of at least 1) or it is refused; a supervisor
|
|
41
|
-
* refusal surfaces with its own reason. The reply is bounded, and the call is
|
|
42
|
-
* bounded by `timeoutMs` and `signal`.
|
|
43
|
-
*/
|
|
44
|
-
export const recycleTrainingSlot = (options) => {
|
|
45
|
-
const { slot, nonce } = options;
|
|
46
|
-
if (!Number.isInteger(slot) || slot < 0 || slot >= TRAINING_MAX_SLOTS) {
|
|
47
|
-
return Promise.reject(new SpawnfileError("validation_error", `Training slot recycle requires a slot index from 0 to ${TRAINING_MAX_SLOTS - 1}`));
|
|
48
|
-
}
|
|
49
|
-
if (!NONCE.test(nonce))
|
|
50
|
-
return Promise.reject(new SpawnfileError("validation_error", "Training slot recycle requires a 32-byte hex nonce"));
|
|
51
|
-
try {
|
|
52
|
-
options.signal?.throwIfAborted();
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
return Promise.reject(error);
|
|
56
|
-
}
|
|
57
|
-
return new Promise((resolve, reject) => {
|
|
58
|
-
const socket = (options.connect ?? (() => createConnection(TRAINING_SUPERVISOR_SOCKET)))();
|
|
59
|
-
let buffer = Buffer.alloc(0), settled = false;
|
|
60
|
-
const onAbort = () => finish(options.signal?.reason instanceof Error ? options.signal.reason : refuse("Training slot recycle was aborted"));
|
|
61
|
-
const timer = setTimeout(() => finish(refuse(`Training slot ${slot} recycle timed out before the supervisor answered`)), options.timeoutMs ?? TRAINING_RECYCLE_DEFAULT_TIMEOUT_MS);
|
|
62
|
-
function finish(error, value) {
|
|
63
|
-
if (settled)
|
|
64
|
-
return;
|
|
65
|
-
settled = true;
|
|
66
|
-
clearTimeout(timer);
|
|
67
|
-
options.signal?.removeEventListener("abort", onAbort);
|
|
68
|
-
socket.destroy();
|
|
69
|
-
if (error === undefined)
|
|
70
|
-
resolve(value);
|
|
71
|
-
else
|
|
72
|
-
reject(error);
|
|
73
|
-
}
|
|
74
|
-
options.signal?.addEventListener("abort", onAbort, { once: true });
|
|
75
|
-
socket.on("error", (error) => finish(refuse(`Training slot recycle could not reach the root supervisor: ${error.message}`)));
|
|
76
|
-
socket.on("close", () => finish(refuse("Training slot recycle connection closed before an answer")));
|
|
77
|
-
socket.on("connect", () => socket.write(`${JSON.stringify({ v: TRAINING_SUPERVISOR_PROTOCOL, verb: "recycle", slot, nonce })}\n`));
|
|
78
|
-
socket.on("data", (chunk) => {
|
|
79
|
-
buffer = Buffer.concat([buffer, chunk]);
|
|
80
|
-
const end = buffer.indexOf(0x0a);
|
|
81
|
-
if (end < 0 ? buffer.length > TRAINING_RECYCLE_MAX_REPLY_BYTES : end > TRAINING_RECYCLE_MAX_REPLY_BYTES) {
|
|
82
|
-
finish(refuse("Training slot recycle answer exceeded its bound"));
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
if (end < 0)
|
|
86
|
-
return;
|
|
87
|
-
let answer;
|
|
88
|
-
try {
|
|
89
|
-
answer = JSON.parse(buffer.subarray(0, end).toString("utf8"));
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
finish(refuse("Training slot recycle answer is not JSON"));
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
if (!answer || typeof answer !== "object" || Array.isArray(answer)) {
|
|
96
|
-
finish(refuse("Training slot recycle answer is not an object"));
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
const record = answer;
|
|
100
|
-
if (record.v !== TRAINING_SUPERVISOR_PROTOCOL) {
|
|
101
|
-
finish(refuse("Training slot recycle answer names another protocol"));
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
try {
|
|
105
|
-
finish(undefined, bindReply(record, slot, nonce));
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
finish(error);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
};
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { type DaimonGrokBrokerModel, type DaimonGrokBrokerReasoningEffort } from "../../../runtime/daimon/contractManifest.js";
|
|
2
|
-
import { type DaimonAgentSkill } from "../../../runtime/daimon/grokWorkerSkills.js";
|
|
3
|
-
import { type DaimonGrokRegistration } from "../../containerDaimonGrokWorkerRender.js";
|
|
4
|
-
/**
|
|
5
|
-
* The one training slot's deny list: Daimon's own protected set for a
|
|
6
|
-
* single-agent organization (Grok bootstrap, realm, and the slot state root that
|
|
7
|
-
* holds the wake-acceptance store) plus everything this container provisions that the subject must not read —
|
|
8
|
-
* the evaluator roots, the caller's protected `/run/spawnfile-training` paths, the broker
|
|
9
|
-
* control and registration roots, the grant home root, the inference ledger,
|
|
10
|
-
* the per-slot ledger, turn store and supervisor socket directory.
|
|
11
|
-
*
|
|
12
|
-
* The same two refusals the production render enforces apply here: an entry
|
|
13
|
-
* that equals or contains a Grok 1.0.34 base-profile grant makes Grok refuse
|
|
14
|
-
* the profile outright, and masks cannot nest, so an entry covered by another
|
|
15
|
-
* entry is a provisioning bug rather than something to silently drop.
|
|
16
|
-
*/
|
|
17
|
-
export declare const resolveTrainingGrokDenyPaths: (added?: readonly string[] | undefined, slot?: number, slots?: number) => string[];
|
|
18
|
-
export interface TrainingGrokSlotInput {
|
|
19
|
-
slot?: number;
|
|
20
|
-
slots?: number;
|
|
21
|
-
agentId: string;
|
|
22
|
-
model: DaimonGrokBrokerModel;
|
|
23
|
-
reasoningEffort: DaimonGrokBrokerReasoningEffort;
|
|
24
|
-
/** Deny entries this container adds beyond Daimon's own protected set; defaults to the fixed training set. */
|
|
25
|
-
denyPaths?: readonly string[];
|
|
26
|
-
/**
|
|
27
|
-
* The declaration's per-turn limits. The broker registration must declare
|
|
28
|
-
* them, because a wake may only LOWER a declared limit: a trial whose wake
|
|
29
|
-
* ceiling exceeds the manifest defaults is refused as `invalid_request`.
|
|
30
|
-
*/
|
|
31
|
-
limits?: {
|
|
32
|
-
maxRequests: number;
|
|
33
|
-
maxTokens: number;
|
|
34
|
-
timeoutMs: number;
|
|
35
|
-
};
|
|
36
|
-
/** The declaration's skills; rendered into the slot's `$GROK_HOME/skills` and bound as `skillsSha256`. */
|
|
37
|
-
skills?: readonly DaimonAgentSkill[];
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* The single brokered Grok registration a training container runs, at the
|
|
41
|
-
* fixed container paths in `paths.ts`. Unlike production it points
|
|
42
|
-
* `usageLedgerPath` at the per-slot ledger, because each trial's spend must be
|
|
43
|
-
* separable and a recycle wipes it; the container-wide ledger and wake fuse do
|
|
44
|
-
* not exist here.
|
|
45
|
-
*/
|
|
46
|
-
export declare const resolveTrainingGrokRegistration: (input: TrainingGrokSlotInput) => DaimonGrokRegistration;
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { SpawnfileError } from "../../../shared/index.js";
|
|
3
|
-
import { DAIMON_GROK_BROKER_MODELS, DAIMON_GROK_BROKER_REASONING_EFFORTS, DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
|
|
4
|
-
import { DAIMON_GROK_WORKER_HOME_DIRECTORY, daimonGrokWorkerSandboxProfileSha256, renderDaimonGrokWorkerSandboxProfile, resolveDaimonGrokClockedWorkerConfig } from "../../../runtime/daimon/grokWorkerContract.js";
|
|
5
|
-
import { resolveDaimonGrokWorkerSkills } from "../../../runtime/daimon/grokWorkerSkills.js";
|
|
6
|
-
import { DAIMON_GROK_BASE_PROFILE_GRANTS, assertCanonicalRegisteredPath } from "../../containerDaimonGrokWorkerRender.js";
|
|
7
|
-
import { trainingSlotPaths, trainingEvaluatorPaths, TRAINING_BOOTSTRAP_MOUNT, TRAINING_REALM_MOUNT, TRAINING_DEFERRED_DENY_PATHS } from "./paths.js";
|
|
8
|
-
const fail = (message) => {
|
|
9
|
-
throw new SpawnfileError("compile_error", message);
|
|
10
|
-
};
|
|
11
|
-
const within = (candidate, root) => candidate === root || candidate.startsWith(`${root}/`);
|
|
12
|
-
/**
|
|
13
|
-
* The one training slot's deny list: Daimon's own protected set for a
|
|
14
|
-
* single-agent organization (Grok bootstrap, realm, and the slot state root that
|
|
15
|
-
* holds the wake-acceptance store) plus everything this container provisions that the subject must not read —
|
|
16
|
-
* the evaluator roots, the caller's protected `/run/spawnfile-training` paths, the broker
|
|
17
|
-
* control and registration roots, the grant home root, the inference ledger,
|
|
18
|
-
* the per-slot ledger, turn store and supervisor socket directory.
|
|
19
|
-
*
|
|
20
|
-
* The same two refusals the production render enforces apply here: an entry
|
|
21
|
-
* that equals or contains a Grok 1.0.34 base-profile grant makes Grok refuse
|
|
22
|
-
* the profile outright, and masks cannot nest, so an entry covered by another
|
|
23
|
-
* entry is a provisioning bug rather than something to silently drop.
|
|
24
|
-
*/
|
|
25
|
-
export const resolveTrainingGrokDenyPaths = (added = undefined, slot = 0, slots = 1) => {
|
|
26
|
-
const p = trainingSlotPaths(slot);
|
|
27
|
-
const required = trainingEvaluatorPaths(slot, slots).map(entry => entry.path);
|
|
28
|
-
// The wake-acceptance store is masked through `p.state`, never directly: Grok 1.0.34
|
|
29
|
-
// materializes every deny target inside bubblewrap AS THE WORKER UID, and the store's parent is
|
|
30
|
-
// `2000:2000 0700`, so the store itself is unplaceable and would make Grok refuse the whole profile
|
|
31
|
-
// (`.runtime/grok-deny-placement/EVIDENCE.md`). The state root covers it and nothing else lives there.
|
|
32
|
-
const daimonOwn = [TRAINING_BOOTSTRAP_MOUNT, TRAINING_REALM_MOUNT, p.state];
|
|
33
|
-
const grokHome = path.posix.join(p.workerHome, DAIMON_GROK_WORKER_HOME_DIRECTORY);
|
|
34
|
-
const grants = [
|
|
35
|
-
...DAIMON_GROK_BASE_PROFILE_GRANTS, p.workspace, grokHome,
|
|
36
|
-
path.posix.join(grokHome, "sessions"), path.posix.join(p.workerHome, "tmp")
|
|
37
|
-
];
|
|
38
|
-
const candidates = [...new Set([...daimonOwn, ...required, ...(added ?? [])])].sort();
|
|
39
|
-
for (const entry of candidates) {
|
|
40
|
-
assertCanonicalRegisteredPath("deny path", entry);
|
|
41
|
-
const grant = grants.find((candidate) => within(candidate, entry));
|
|
42
|
-
if (grant)
|
|
43
|
-
fail(`Training Grok deny path ${entry} equals or contains the base profile grant ${grant}; Grok refuses such a profile`);
|
|
44
|
-
if (within(p.workspace, entry) || within(p.workerHome, entry) || within(p.runtimeHome, entry)) {
|
|
45
|
-
fail(`Training Grok deny path ${entry} would hide the subject's own workspace, home, or runtime home`);
|
|
46
|
-
}
|
|
47
|
-
if ([p.clockFile, DAIMON_GROK_ENGINE_BROKER.worker.taskClock.preloadPath,
|
|
48
|
-
"/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1", "/usr/lib/aarch64-linux-gnu/faketime/libfaketime.so.1"].some(file => within(file, entry))) {
|
|
49
|
-
fail(`Training Grok deny path ${entry} would hide the subject's task clock`);
|
|
50
|
-
}
|
|
51
|
-
const ancestor = candidates.find((other) => other !== entry && within(entry, other));
|
|
52
|
-
if (ancestor)
|
|
53
|
-
fail(`Training Grok deny path ${ancestor} would cover ${entry}; masks cannot nest`);
|
|
54
|
-
}
|
|
55
|
-
return candidates;
|
|
56
|
-
};
|
|
57
|
-
/**
|
|
58
|
-
* The single brokered Grok registration a training container runs, at the
|
|
59
|
-
* fixed container paths in `paths.ts`. Unlike production it points
|
|
60
|
-
* `usageLedgerPath` at the per-slot ledger, because each trial's spend must be
|
|
61
|
-
* separable and a recycle wipes it; the container-wide ledger and wake fuse do
|
|
62
|
-
* not exist here.
|
|
63
|
-
*/
|
|
64
|
-
export const resolveTrainingGrokRegistration = (input) => {
|
|
65
|
-
const p = trainingSlotPaths(input.slot ?? 0);
|
|
66
|
-
if (!input.agentId.trim())
|
|
67
|
-
fail("Training Grok slot requires an agent id");
|
|
68
|
-
if (!DAIMON_GROK_BROKER_MODELS.includes(input.model)
|
|
69
|
-
|| !DAIMON_GROK_BROKER_REASONING_EFFORTS.includes(input.reasoningEffort)) {
|
|
70
|
-
fail(`Training Grok slot has no declared broker model and reasoning effort: ${input.agentId}`);
|
|
71
|
-
}
|
|
72
|
-
const home = assertCanonicalRegisteredPath("home", p.workerHome);
|
|
73
|
-
const grokHome = path.posix.join(home, DAIMON_GROK_WORKER_HOME_DIRECTORY);
|
|
74
|
-
const config = resolveDaimonGrokClockedWorkerConfig(input.model, input.reasoningEffort, p.slot);
|
|
75
|
-
const denyPaths = resolveTrainingGrokDenyPaths(input.denyPaths, p.slot, input.slots ?? 1);
|
|
76
|
-
const profile = renderDaimonGrokWorkerSandboxProfile(denyPaths);
|
|
77
|
-
const eventsPath = path.posix.join(grokHome, DAIMON_GROK_ENGINE_BROKER.worker.home.sandboxEvents.relativePath);
|
|
78
|
-
const profilePath = path.posix.join(grokHome, "sandbox.toml");
|
|
79
|
-
for (const [label, value] of [["GROK_HOME", grokHome], ["profile", profilePath], ["events", eventsPath],
|
|
80
|
-
["workspace", p.workspace], ["runtime home", p.runtimeHome],
|
|
81
|
-
["usage ledger", p.usageLedger]])
|
|
82
|
-
assertCanonicalRegisteredPath(label, value);
|
|
83
|
-
const skills = resolveDaimonGrokWorkerSkills(input.skills);
|
|
84
|
-
return {
|
|
85
|
-
...(skills ? { skills } : {}),
|
|
86
|
-
agentId: input.agentId,
|
|
87
|
-
config: config.bytes,
|
|
88
|
-
configVariant: "clocked",
|
|
89
|
-
...(input.limits === undefined ? {} : { limits: { ...input.limits } }),
|
|
90
|
-
configSha256: config.sha256,
|
|
91
|
-
deferredDenyPaths: denyPaths.filter((entry) => TRAINING_DEFERRED_DENY_PATHS.includes(entry)),
|
|
92
|
-
denyPaths,
|
|
93
|
-
eventsPath,
|
|
94
|
-
grokHome,
|
|
95
|
-
home,
|
|
96
|
-
model: input.model,
|
|
97
|
-
profile,
|
|
98
|
-
profilePath,
|
|
99
|
-
profileSha256: daimonGrokWorkerSandboxProfileSha256(denyPaths),
|
|
100
|
-
privateTmp: path.posix.join(home, DAIMON_GROK_ENGINE_BROKER.worker.home.privateTmp.relativeToWorkerHome),
|
|
101
|
-
reasoningEffort: input.reasoningEffort,
|
|
102
|
-
runtimeHome: p.runtimeHome,
|
|
103
|
-
// Empty on purpose: training has no persistent mounts at all. Everything a trial writes under the slot
|
|
104
|
-
// runtime home is per-slot tmpfs the recycle wipes, and the only thing provisioned inside it is the
|
|
105
|
-
// setgid `tool-output/` spill directory, so the traversable `0710` home exposes nothing else.
|
|
106
|
-
runtimeHomeMounts: [],
|
|
107
|
-
slot: p.slot,
|
|
108
|
-
spillDirectory: path.posix.join(p.runtimeHome, DAIMON_GROK_ENGINE_BROKER.worker.home.spillDirectory.relativeToRuntimeHome),
|
|
109
|
-
uid: p.workerUid,
|
|
110
|
-
usageLedgerPath: p.usageLedger,
|
|
111
|
-
workspace: p.workspace
|
|
112
|
-
};
|
|
113
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/** Root uses the broker's slot reset seam; the broker owns active-turn, worker-reap and clock checks. */
|
|
2
|
-
export declare const resetTrainingBrokerSlot: (slot: number, signal: AbortSignal, socketPath?: "/run/daimon-engine-broker/control.sock") => Promise<void>;
|
|
3
|
-
/** The native control relay authenticates SO_PEERCRED uid 2000 and rejects root. */
|
|
4
|
-
export declare const resetTrainingBrokerSlotAsOrganization: (slot: number, signal: AbortSignal, execute?: (file: string, args: string[], options: {
|
|
5
|
-
signal: AbortSignal;
|
|
6
|
-
timeout: number;
|
|
7
|
-
}) => Promise<{
|
|
8
|
-
stdout: string;
|
|
9
|
-
}>) => Promise<void>;
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
|
-
import { promisify } from "node:util";
|
|
3
|
-
import { randomUUID } from "node:crypto";
|
|
4
|
-
import { createConnection } from "node:net";
|
|
5
|
-
import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
|
|
6
|
-
import { trainingSlotPaths } from "./paths.js";
|
|
7
|
-
/** Root uses the broker's slot reset seam; the broker owns active-turn, worker-reap and clock checks. */
|
|
8
|
-
export const resetTrainingBrokerSlot = (slot, signal, socketPath = DAIMON_GROK_ENGINE_BROKER.controlSocketPath) => {
|
|
9
|
-
trainingSlotPaths(slot);
|
|
10
|
-
signal.throwIfAborted();
|
|
11
|
-
const requestId = randomUUID();
|
|
12
|
-
const version = DAIMON_GROK_ENGINE_BROKER.controlProtocolVersion;
|
|
13
|
-
const payload = Buffer.from(JSON.stringify({ version, kind: "reset_slot", requestId, slot }));
|
|
14
|
-
const frame = Buffer.alloc(4 + payload.length);
|
|
15
|
-
frame.writeUInt32BE(payload.length);
|
|
16
|
-
payload.copy(frame, 4);
|
|
17
|
-
return new Promise((resolve, reject) => {
|
|
18
|
-
const socket = createConnection(socketPath);
|
|
19
|
-
let buffer = Buffer.alloc(0), settled = false;
|
|
20
|
-
const finish = (error) => {
|
|
21
|
-
if (settled)
|
|
22
|
-
return;
|
|
23
|
-
settled = true;
|
|
24
|
-
signal.removeEventListener("abort", abort);
|
|
25
|
-
socket.destroy();
|
|
26
|
-
if (error)
|
|
27
|
-
reject(error);
|
|
28
|
-
else
|
|
29
|
-
resolve();
|
|
30
|
-
};
|
|
31
|
-
const abort = () => finish(new Error("Training broker reset aborted; slot must be quarantined"));
|
|
32
|
-
signal.addEventListener("abort", abort, { once: true });
|
|
33
|
-
socket.once("error", error => finish(error));
|
|
34
|
-
socket.once("close", () => finish(new Error("Training broker reset refused: slot active, unavailable, or reset failed")));
|
|
35
|
-
socket.once("connect", () => socket.write(frame));
|
|
36
|
-
socket.on("data", chunk => {
|
|
37
|
-
buffer = Buffer.concat([buffer, chunk]);
|
|
38
|
-
if (buffer.length < 4)
|
|
39
|
-
return;
|
|
40
|
-
const size = buffer.readUInt32BE(0);
|
|
41
|
-
if (size < 2 || size > 4096 || buffer.length > size + 4) {
|
|
42
|
-
finish(new Error("Invalid broker reset response frame"));
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (buffer.length < size + 4)
|
|
46
|
-
return;
|
|
47
|
-
try {
|
|
48
|
-
const response = JSON.parse(buffer.subarray(4).toString("utf8"));
|
|
49
|
-
if (!response || response.version !== version || response.kind !== "slot_reset" || response.requestId !== requestId
|
|
50
|
-
|| response.slot !== slot || Object.keys(response).length !== 4)
|
|
51
|
-
throw Error("Invalid broker reset acknowledgement");
|
|
52
|
-
finish();
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
finish(error instanceof Error ? error : new Error("Invalid broker reset response"));
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
};
|
|
60
|
-
/** The native control relay authenticates SO_PEERCRED uid 2000 and rejects root. */
|
|
61
|
-
export const resetTrainingBrokerSlotAsOrganization = async (slot, signal, execute = promisify(execFile)) => {
|
|
62
|
-
trainingSlotPaths(slot);
|
|
63
|
-
signal.throwIfAborted();
|
|
64
|
-
const uid = DAIMON_GROK_ENGINE_BROKER.identities.organizationUid;
|
|
65
|
-
const program = `import { resetTrainingBrokerSlot } from ${JSON.stringify(import.meta.url)}; await resetTrainingBrokerSlot(Number(process.argv[1]), AbortSignal.timeout(10000)); process.stdout.write("slot-reset-complete\\n");`;
|
|
66
|
-
const result = await execute("setpriv", ["--clear-groups", `--reuid=${uid}`, `--regid=${uid}`,
|
|
67
|
-
"--inh-caps=-all", "--ambient-caps=-all", "--bounding-set=-all", "--", process.execPath,
|
|
68
|
-
"--input-type=module", "--eval", program, String(slot)], { signal, timeout: 15_000 });
|
|
69
|
-
if (result.stdout !== "slot-reset-complete\n")
|
|
70
|
-
throw Error("Broker reset child returned no verified acknowledgement");
|
|
71
|
-
};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Linux `MAX_ARG_STRLEN`: the most bytes one `execve` argument may carry. A
|
|
3
|
-
* generated root program passed as `bash -c <script>` dies with `E2BIG` past
|
|
4
|
-
* it — and a slot program embeds its declared skills, so the size grows with
|
|
5
|
-
* the declaration. macOS has no per-argument limit, which is why this is
|
|
6
|
-
* asserted in tests rather than observed.
|
|
7
|
-
*/
|
|
8
|
-
export declare const LINUX_MAX_ARG_STRLEN = 131072;
|
|
9
|
-
export type TrainingRootScriptRunner = (file: string, args: readonly string[], options: {
|
|
10
|
-
maxBuffer: number;
|
|
11
|
-
}) => Promise<{
|
|
12
|
-
stdout: string;
|
|
13
|
-
stderr: string;
|
|
14
|
-
}>;
|
|
15
|
-
export interface TrainingRootScriptOptions {
|
|
16
|
-
shell?: string;
|
|
17
|
-
maxBuffer?: number;
|
|
18
|
-
run?: TrainingRootScriptRunner;
|
|
19
|
-
tmpRoot?: string;
|
|
20
|
-
}
|
|
21
|
-
/** The argv a generated script runs under: bounded and independent of the script's size. */
|
|
22
|
-
export declare const trainingRootScriptArgv: (scriptFile: string) => string[];
|
|
23
|
-
/**
|
|
24
|
-
* Runs a generated root shell program from a fresh `0700` directory holding a
|
|
25
|
-
* `0600` script file, never from argv and never from stdin (a child that reads
|
|
26
|
-
* stdin would consume the rest of the program). The directory is removed
|
|
27
|
-
* afterwards, whatever the outcome.
|
|
28
|
-
*/
|
|
29
|
-
export declare const runTrainingRootScript: (script: string, options?: TrainingRootScriptOptions) => Promise<{
|
|
30
|
-
stdout: string;
|
|
31
|
-
stderr: string;
|
|
32
|
-
}>;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
|
-
import { mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
3
|
-
import os from "node:os";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import { promisify } from "node:util";
|
|
6
|
-
/**
|
|
7
|
-
* Linux `MAX_ARG_STRLEN`: the most bytes one `execve` argument may carry. A
|
|
8
|
-
* generated root program passed as `bash -c <script>` dies with `E2BIG` past
|
|
9
|
-
* it — and a slot program embeds its declared skills, so the size grows with
|
|
10
|
-
* the declaration. macOS has no per-argument limit, which is why this is
|
|
11
|
-
* asserted in tests rather than observed.
|
|
12
|
-
*/
|
|
13
|
-
export const LINUX_MAX_ARG_STRLEN = 131_072;
|
|
14
|
-
const execFileAsync = promisify(execFile);
|
|
15
|
-
/** The argv a generated script runs under: bounded and independent of the script's size. */
|
|
16
|
-
export const trainingRootScriptArgv = (scriptFile) => ["--noprofile", "--norc", "-eu", scriptFile];
|
|
17
|
-
/**
|
|
18
|
-
* Runs a generated root shell program from a fresh `0700` directory holding a
|
|
19
|
-
* `0600` script file, never from argv and never from stdin (a child that reads
|
|
20
|
-
* stdin would consume the rest of the program). The directory is removed
|
|
21
|
-
* afterwards, whatever the outcome.
|
|
22
|
-
*/
|
|
23
|
-
export const runTrainingRootScript = async (script, options = {}) => {
|
|
24
|
-
const directory = await mkdtemp(path.join(options.tmpRoot ?? os.tmpdir(), "spawnfile-root-script-"));
|
|
25
|
-
try {
|
|
26
|
-
const file = path.join(directory, "script.sh");
|
|
27
|
-
await writeFile(file, script, { mode: 0o600, flag: "wx" });
|
|
28
|
-
return await (options.run ?? execFileAsync)(options.shell ?? "/bin/bash", trainingRootScriptArgv(file), { maxBuffer: options.maxBuffer ?? 1024 * 1024 });
|
|
29
|
-
}
|
|
30
|
-
finally {
|
|
31
|
-
await rm(directory, { recursive: true, force: true });
|
|
32
|
-
}
|
|
33
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { DaimonGrokRegistration } from "../../containerDaimonGrokWorkerRender.js";
|
|
2
|
-
import type { TrainingBrokerDeclaration } from "./declaration.js";
|
|
3
|
-
import type { TrainingSlotRuntime } from "./supervisor.js";
|
|
4
|
-
export interface TrainingSlotRuntimeOptions {
|
|
5
|
-
declaration: TrainingBrokerDeclaration;
|
|
6
|
-
registration: DaimonGrokRegistration;
|
|
7
|
-
projectionSha256: string;
|
|
8
|
-
reset: (slot: number, signal: AbortSignal) => Promise<void>;
|
|
9
|
-
/** Test seam: the shell the provisioning script runs in and the `/proc` it reads identities from. */
|
|
10
|
-
shell?: string;
|
|
11
|
-
procRoot?: string;
|
|
12
|
-
logPath?: string;
|
|
13
|
-
}
|
|
14
|
-
export declare const createTrainingSlotRuntime: (options: TrainingSlotRuntimeOptions) => TrainingSlotRuntime;
|
|
15
|
-
/** Never remove or change the ownership/mode of a worker home or tmp: siblings attest those inodes. */
|
|
16
|
-
export declare const renderTrainingSlotWipe: (slot: number) => string[];
|
|
17
|
-
/** A failed privilege drop is not evidence of denial; require a positive worker verdict. */
|
|
18
|
-
export declare const probeTrainingWorker: (uid: number, target: string, depth: "read" | "enter", execute?: (command: string, args: string[], options: {
|
|
19
|
-
timeout: number;
|
|
20
|
-
}) => Promise<{
|
|
21
|
-
stdout: string;
|
|
22
|
-
}>) => Promise<boolean>;
|