spawnfile 0.1.33 → 0.1.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/audit/readAudit.d.ts +3 -3
- package/dist/auth/profileStore.d.ts +3 -1
- package/dist/auth/profileStore.js +31 -30
- package/dist/auth/trainingAuth.d.ts +2 -5
- package/dist/auth/types.d.ts +16 -0
- package/dist/cli/authCommands.d.ts +1 -1
- package/dist/cli/authCommands.js +21 -1
- package/dist/cli/devCommands.d.ts +1 -1
- package/dist/cli/devCommands.js +0 -66
- package/dist/cli/runCli.d.ts +3 -4
- package/dist/cli/runCli.js +4 -3
- package/dist/cli/trainCommand.js +9 -15
- package/dist/cli/trainingBooted.d.ts +9 -0
- package/dist/cli/trainingBooted.js +45 -0
- package/dist/cli/trainingExecution.d.ts +4 -7
- package/dist/cli/trainingExecution.js +4 -32
- package/dist/compiler/containerArtifacts.js +0 -5
- package/dist/compiler/containerBackedMountRender.js +5 -1
- package/dist/compiler/containerDaimonBrokerRender.d.ts +5 -50
- package/dist/compiler/containerDaimonBrokerRender.js +19 -90
- package/dist/compiler/containerDaimonGatewayRender.d.ts +50 -0
- package/dist/compiler/containerDaimonGatewayRender.js +161 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +2 -10
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +13 -25
- package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +11 -49
- package/dist/compiler/containerDaimonGrokWorkerRender.js +15 -39
- package/dist/compiler/containerDaimonStartupSupervision.d.ts +8 -0
- package/dist/compiler/containerDaimonStartupSupervision.js +39 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +1 -2
- package/dist/compiler/containerDaimonUidEntrypointRender.js +29 -47
- package/dist/compiler/containerRuntimeReadinessRender.js +1 -1
- package/dist/compiler/memoryArtifacts.js +0 -1
- package/dist/compiler/moltnetArtifacts.js +1 -17
- package/dist/compiler/moltnetClientConfig.js +1 -1
- package/dist/compiler/moltnetRuntimeConfig.js +0 -10
- package/dist/compiler/runProject.d.ts +3 -0
- package/dist/compiler/runProject.js +12 -5
- package/dist/compiler/runProjectAuth.js +6 -18
- package/dist/compiler/training/contract.d.ts +0 -2
- package/dist/compiler/training/contract.js +0 -2
- package/dist/compiler/training/execution.d.ts +1 -128
- package/dist/compiler/training/execution.js +7 -68
- package/dist/compiler/training/index.d.ts +0 -8
- package/dist/compiler/training/index.js +0 -7
- package/dist/compiler/training/output.d.ts +1 -0
- package/dist/compiler/training/output.js +1 -1
- package/dist/compiler/training/rewind/contract.d.ts +6 -6
- package/dist/compiler/training/trial/boot.d.ts +72 -0
- package/dist/compiler/training/trial/boot.js +225 -0
- package/dist/compiler/training/trial/docker.d.ts +10 -0
- package/dist/compiler/training/trial/docker.js +22 -0
- package/dist/compiler/training/trial/gateway.d.ts +47 -0
- package/dist/compiler/training/trial/gateway.js +113 -0
- package/dist/compiler/training/trial/homeLogin.d.ts +31 -0
- package/dist/compiler/training/trial/homeLogin.js +69 -0
- package/dist/compiler/training/trial/index.d.ts +8 -0
- package/dist/compiler/training/trial/index.js +8 -0
- package/dist/compiler/training/trial/judge.d.ts +15 -0
- package/dist/compiler/training/trial/judge.js +42 -0
- package/dist/compiler/training/trial/launcher.d.ts +47 -0
- package/dist/compiler/training/trial/launcher.js +193 -0
- package/dist/compiler/training/trial/login.d.ts +35 -0
- package/dist/compiler/training/trial/login.js +85 -0
- package/dist/compiler/training/trial/project.d.ts +11 -0
- package/dist/compiler/training/trial/project.js +31 -0
- package/dist/compiler/training/trial/realmTurns.d.ts +20 -0
- package/dist/compiler/training/trial/realmTurns.js +69 -0
- package/dist/compiler/upReceipt.d.ts +2 -17
- package/dist/compiler/upReceipt.js +2 -17
- package/dist/deployment/artifactsExportPlan.js +2 -18
- package/dist/deployment/privateArtifactsExport.js +1 -1
- package/dist/dev/docker.d.ts +0 -5
- package/dist/dev/docker.js +0 -46
- package/dist/dev/index.d.ts +0 -1
- package/dist/dev/index.js +0 -1
- package/dist/dev/project.d.ts +0 -16
- package/dist/dev/project.js +1 -128
- package/dist/distribution/distributionReportSchema.js +1 -1
- package/dist/distribution/imageRuntimeAuth.js +3 -2
- package/dist/manifest/renderSpawnfile.js +2 -1
- package/dist/release/drainControl.d.ts +5 -19
- package/dist/release/drainControl.js +12 -67
- package/dist/report/types.d.ts +3 -6
- package/dist/runtime/common.d.ts +1 -1
- package/dist/runtime/common.js +1 -1
- package/dist/runtime/container.d.ts +2 -2
- package/dist/runtime/container.js +1 -39
- package/dist/runtime/daimon/config.js +8 -14
- package/dist/runtime/daimon/contractManifest.js +0 -1
- package/dist/runtime/daimon/contractManifestSchema.js +0 -1
- package/dist/runtime/daimon/control.d.ts +31 -0
- package/dist/runtime/daimon/control.js +83 -0
- package/dist/runtime/daimon/engineDescriptorSchema.js +0 -1
- package/dist/runtime/daimon/engineDescriptors.generated.d.ts +1 -1
- package/dist/runtime/daimon/engineDescriptors.generated.js +1 -2
- package/dist/runtime/daimon/engines.js +0 -1
- package/dist/runtime/daimon/gateway.d.ts +62 -0
- package/dist/runtime/daimon/gateway.js +77 -0
- package/dist/runtime/daimon/grokWorkerContract.d.ts +0 -5
- package/dist/runtime/daimon/grokWorkerContract.js +1 -13
- package/dist/runtime/daimon/index.d.ts +2 -0
- package/dist/runtime/daimon/index.js +2 -1
- package/dist/runtime/daimon/memory.js +1 -1
- package/dist/runtime/daimon/packageName.js +0 -1
- package/dist/runtime/daimon/runAuth.js +15 -4
- package/dist/runtime/daimon/runtimeIdentity.d.ts +2 -0
- package/dist/runtime/daimon/runtimeIdentity.js +2 -0
- package/dist/runtime/daimon/subscriptionRealms.d.ts +27 -3
- package/dist/runtime/daimon/subscriptionRealms.js +35 -13
- package/dist/runtime/daimon/testHelpers.d.ts +2 -0
- package/dist/runtime/{pi → daimon}/testHelpers.js +3 -3
- package/dist/runtime/daimon/training/booted/adapter.d.ts +50 -0
- package/dist/runtime/daimon/training/booted/adapter.js +60 -0
- package/dist/runtime/daimon/training/booted/adapter.js.map +1 -0
- package/dist/runtime/daimon/training/booted/index.d.ts +4 -0
- package/dist/runtime/daimon/training/booted/index.js +3 -0
- package/dist/runtime/daimon/training/booted/index.js.map +1 -0
- package/dist/runtime/daimon/training/booted/judge.d.ts +39 -0
- package/dist/runtime/daimon/training/booted/judge.js +122 -0
- package/dist/runtime/daimon/training/booted/judge.js.map +1 -0
- package/dist/runtime/daimon/training/index.d.ts +5 -0
- package/dist/runtime/daimon/training/index.js +8 -4
- package/dist/runtime/daimon/training/index.js.map +1 -1
- package/dist/runtime/daimon/wakeMoments.js +0 -1
- package/dist/runtime/install.js +0 -21
- package/dist/runtime/registry.js +0 -2
- package/dist/runtime/trainingGraderProviders.js +10 -4
- package/dist/runtime/trainingProviders.d.ts +5 -3
- package/dist/runtime/trainingProviders.js +21 -24
- package/dist/runtime/trainingSubjects.d.ts +0 -121
- package/dist/runtime/trainingSubjects.js +2 -13
- package/dist/runtime/types.d.ts +1 -8
- package/dist/runtime/usageRequestLedger.d.ts +2 -0
- package/dist/runtime/usageRequestLedger.js +3 -1
- package/dist/shared/errors.js +0 -1
- package/dist/shared/trainingLegacy/trainingLegacyHashDomains.d.ts +1 -0
- package/dist/shared/trainingLegacy/trainingLegacyHashDomains.js +1 -0
- package/dist/shared/trainingLegacy/trainingLegacyHashDomains.js.map +1 -1
- package/dist/status/lifecycleProbes.js +3 -6
- package/dist/status/moltnetWiringProbes.js +1 -17
- package/dist/training/subjects/index.d.ts +0 -1
- package/dist/training/subjects/index.js +0 -1
- package/dist/training/subjects/index.js.map +1 -1
- package/examples/README.md +0 -1
- package/examples/daimon-org/agents/mapper/Spawnfile +4 -1
- package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +4 -1
- package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +1 -1
- package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +1 -1
- package/examples/mixed-runtime-org/agents/localist/Spawnfile +7 -7
- package/package.json +4 -13
- package/runtimes.yaml +5 -15
- package/dist/compiler/containerDaimonGrokTaskClock.d.ts +0 -5
- package/dist/compiler/containerDaimonGrokTaskClock.js +0 -29
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +0 -22
- package/dist/compiler/daimonTelemetryArtifacts.js +0 -56
- package/dist/compiler/training/broker/clockProbe.d.ts +0 -6
- package/dist/compiler/training/broker/clockProbe.js +0 -27
- package/dist/compiler/training/broker/declaration.d.ts +0 -54
- package/dist/compiler/training/broker/declaration.js +0 -70
- package/dist/compiler/training/broker/entrypoint.d.ts +0 -39
- package/dist/compiler/training/broker/entrypoint.js +0 -124
- package/dist/compiler/training/broker/evaluatorSecrets.d.ts +0 -2
- package/dist/compiler/training/broker/evaluatorSecrets.js +0 -62
- package/dist/compiler/training/broker/index.d.ts +0 -12
- package/dist/compiler/training/broker/index.js +0 -12
- package/dist/compiler/training/broker/main.d.ts +0 -2
- package/dist/compiler/training/broker/main.js +0 -14
- package/dist/compiler/training/broker/paths.d.ts +0 -236
- package/dist/compiler/training/broker/paths.js +0 -249
- package/dist/compiler/training/broker/processes.d.ts +0 -51
- package/dist/compiler/training/broker/processes.js +0 -102
- package/dist/compiler/training/broker/projection.d.ts +0 -61
- package/dist/compiler/training/broker/projection.js +0 -109
- package/dist/compiler/training/broker/provisioning.d.ts +0 -78
- package/dist/compiler/training/broker/provisioning.js +0 -231
- package/dist/compiler/training/broker/receipt.d.ts +0 -77
- package/dist/compiler/training/broker/receipt.js +0 -110
- package/dist/compiler/training/broker/recycleClient.d.ts +0 -33
- package/dist/compiler/training/broker/recycleClient.js +0 -112
- package/dist/compiler/training/broker/registration.d.ts +0 -46
- package/dist/compiler/training/broker/registration.js +0 -113
- package/dist/compiler/training/broker/reset.d.ts +0 -9
- package/dist/compiler/training/broker/reset.js +0 -71
- package/dist/compiler/training/broker/rootScript.d.ts +0 -32
- package/dist/compiler/training/broker/rootScript.js +0 -33
- package/dist/compiler/training/broker/runtime.d.ts +0 -22
- package/dist/compiler/training/broker/runtime.js +0 -128
- package/dist/compiler/training/broker/seccompRoutes.d.ts +0 -31
- package/dist/compiler/training/broker/seccompRoutes.js +0 -36
- package/dist/compiler/training/broker/supervisor.d.ts +0 -108
- package/dist/compiler/training/broker/supervisor.js +0 -172
- package/dist/compiler/training/broker/taskClock.d.ts +0 -5
- package/dist/compiler/training/broker/taskClock.js +0 -41
- package/dist/compiler/training/container/contract.d.ts +0 -54
- package/dist/compiler/training/container/contract.js +0 -52
- package/dist/compiler/training/container/evaluators.d.ts +0 -48
- package/dist/compiler/training/container/evaluators.js +0 -50
- package/dist/compiler/training/container/grokWriteback.d.ts +0 -8
- package/dist/compiler/training/container/grokWriteback.js +0 -26
- package/dist/compiler/training/container/index.d.ts +0 -5
- package/dist/compiler/training/container/index.js +0 -3
- package/dist/compiler/training/container/launch.d.ts +0 -21
- package/dist/compiler/training/container/launch.js +0 -280
- package/dist/compiler/training/container/nativeSlots.d.ts +0 -14
- package/dist/compiler/training/container/nativeSlots.js +0 -13
- package/dist/compiler/training/container/outputCopy.d.ts +0 -2
- package/dist/compiler/training/container/outputCopy.js +0 -72
- package/dist/compiler/training/container/outputVolume.d.ts +0 -28
- package/dist/compiler/training/container/outputVolume.js +0 -185
- package/dist/compiler/training/container/prepare.d.ts +0 -10
- package/dist/compiler/training/container/prepare.js +0 -125
- package/dist/compiler/training/container/process.d.ts +0 -14
- package/dist/compiler/training/container/process.js +0 -70
- package/dist/compiler/training/container/security.d.ts +0 -38
- package/dist/compiler/training/container/security.js +0 -68
- package/dist/compiler/training/container/subjectIsolation.d.ts +0 -5
- package/dist/compiler/training/container/subjectIsolation.js +0 -16
- package/dist/compiler/training/preparation/assets/Dockerfile +0 -100
- package/dist/compiler/training/preparation/assets/package-lock.json +0 -5483
- package/dist/compiler/training/preparation/broker.d.ts +0 -30
- package/dist/compiler/training/preparation/broker.js +0 -68
- package/dist/compiler/training/preparation/contextModes.d.ts +0 -12
- package/dist/compiler/training/preparation/contextModes.js +0 -38
- package/dist/compiler/training/preparation/contract.d.ts +0 -203
- package/dist/compiler/training/preparation/contract.js +0 -114
- package/dist/compiler/training/preparation/copyAssets.d.ts +0 -1
- package/dist/compiler/training/preparation/copyAssets.js +0 -8
- package/dist/compiler/training/preparation/daimonParent.d.ts +0 -42
- package/dist/compiler/training/preparation/daimonParent.js +0 -114
- package/dist/compiler/training/preparation/files.d.ts +0 -29
- package/dist/compiler/training/preparation/files.js +0 -146
- package/dist/compiler/training/preparation/image.d.ts +0 -28
- package/dist/compiler/training/preparation/image.js +0 -105
- package/dist/compiler/training/preparation/index.d.ts +0 -3
- package/dist/compiler/training/preparation/index.js +0 -2
- package/dist/compiler/training/preparation/inputs.d.ts +0 -24
- package/dist/compiler/training/preparation/inputs.js +0 -101
- package/dist/compiler/training/preparation/prepare.d.ts +0 -38
- package/dist/compiler/training/preparation/prepare.js +0 -224
- package/dist/compiler/training/preparation/scratch.d.ts +0 -8
- package/dist/compiler/training/preparation/scratch.js +0 -114
- package/dist/compiler/training/repair/compatibility.d.ts +0 -11
- package/dist/compiler/training/repair/compatibility.js +0 -45
- package/dist/compiler/training/repair/contract.d.ts +0 -832
- package/dist/compiler/training/repair/contract.js +0 -34
- package/dist/compiler/training/repair/index.d.ts +0 -3
- package/dist/compiler/training/repair/index.js +0 -3
- package/dist/compiler/training/repair/prepare.d.ts +0 -378
- package/dist/compiler/training/repair/prepare.js +0 -84
- package/dist/compiler/training/repair/witness.d.ts +0 -348
- package/dist/compiler/training/repair/witness.js +0 -62
- package/dist/compiler/training/subjectDeclaration.d.ts +0 -26
- package/dist/compiler/training/subjectDeclaration.js +0 -54
- package/dist/compiler/training/subjectLease.d.ts +0 -115
- package/dist/compiler/training/subjectLease.js +0 -179
- package/dist/dev/activity.d.ts +0 -14
- package/dist/dev/activity.js +0 -48
- package/dist/runtime/codex-exec/training/adapter.d.ts +0 -13
- package/dist/runtime/codex-exec/training/adapter.js +0 -101
- package/dist/runtime/codex-exec/training/adapter.js.map +0 -1
- package/dist/runtime/codex-exec/training/environment.d.ts +0 -3
- package/dist/runtime/codex-exec/training/environment.js +0 -26
- package/dist/runtime/codex-exec/training/environment.js.map +0 -1
- package/dist/runtime/codex-exec/training/index.d.ts +0 -2
- package/dist/runtime/codex-exec/training/index.js +0 -3
- package/dist/runtime/codex-exec/training/index.js.map +0 -1
- package/dist/runtime/codex-exec/training/protocol.d.ts +0 -15
- package/dist/runtime/codex-exec/training/protocol.js +0 -102
- package/dist/runtime/codex-exec/training/protocol.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/index.d.ts +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/index.js +0 -2
- package/dist/runtime/codex-exec/training/providers/codex-subscription/index.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.d.ts +0 -17
- package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.js +0 -80
- package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.d.ts +0 -12
- package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.js +0 -125
- package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.d.ts +0 -6
- package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.js +0 -219
- package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.js.map +0 -1
- package/dist/runtime/daimon/contractManifest.js.map +0 -1
- package/dist/runtime/daimon/contractManifestSchema.js.map +0 -1
- package/dist/runtime/daimon/engineDescriptorSchema.js.map +0 -1
- package/dist/runtime/daimon/engineDescriptors.generated.js.map +0 -1
- package/dist/runtime/daimon/engines.js.map +0 -1
- package/dist/runtime/daimon/index.js.map +0 -1
- package/dist/runtime/daimon/packageName.js.map +0 -1
- package/dist/runtime/daimon/training/legacy/adapter.d.ts +0 -11
- package/dist/runtime/daimon/training/legacy/adapter.js +0 -175
- package/dist/runtime/daimon/training/legacy/adapter.js.map +0 -1
- package/dist/runtime/daimon/training/legacy/index.d.ts +0 -2
- package/dist/runtime/daimon/training/legacy/index.js +0 -3
- package/dist/runtime/daimon/training/legacy/index.js.map +0 -1
- package/dist/runtime/daimon/training/legacy/public.d.ts +0 -49
- package/dist/runtime/daimon/training/legacy/public.js +0 -16
- package/dist/runtime/daimon/training/legacy/public.js.map +0 -1
- package/dist/runtime/daimon/training/native/adapter.d.ts +0 -18
- package/dist/runtime/daimon/training/native/adapter.js +0 -252
- package/dist/runtime/daimon/training/native/adapter.js.map +0 -1
- package/dist/runtime/daimon/training/native/admission.d.ts +0 -7
- package/dist/runtime/daimon/training/native/admission.js +0 -52
- package/dist/runtime/daimon/training/native/admission.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/arguments.d.ts +0 -16
- package/dist/runtime/daimon/training/native/child/arguments.js +0 -70
- package/dist/runtime/daimon/training/native/child/arguments.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/deferred-trial.d.ts +0 -24
- package/dist/runtime/daimon/training/native/child/deferred-trial.js +0 -63
- package/dist/runtime/daimon/training/native/child/deferred-trial.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/diagnostics.d.ts +0 -58
- package/dist/runtime/daimon/training/native/child/diagnostics.js +0 -215
- package/dist/runtime/daimon/training/native/child/diagnostics.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/fixture.d.ts +0 -16
- package/dist/runtime/daimon/training/native/child/fixture.js +0 -159
- package/dist/runtime/daimon/training/native/child/fixture.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/grok.d.ts +0 -14
- package/dist/runtime/daimon/training/native/child/grok.js +0 -47
- package/dist/runtime/daimon/training/native/child/grok.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/index.d.ts +0 -7
- package/dist/runtime/daimon/training/native/child/index.js +0 -5
- package/dist/runtime/daimon/training/native/child/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/lifecycle.d.ts +0 -40
- package/dist/runtime/daimon/training/native/child/lifecycle.js +0 -400
- package/dist/runtime/daimon/training/native/child/lifecycle.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/probe.d.ts +0 -2
- package/dist/runtime/daimon/training/native/child/probe.js +0 -11
- package/dist/runtime/daimon/training/native/child/probe.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/sandbox.d.ts +0 -4
- package/dist/runtime/daimon/training/native/child/sandbox.js +0 -76
- package/dist/runtime/daimon/training/native/child/sandbox.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/types.d.ts +0 -15
- package/dist/runtime/daimon/training/native/child/types.js +0 -2
- package/dist/runtime/daimon/training/native/child/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/docker.d.ts +0 -29
- package/dist/runtime/daimon/training/native/container/docker.js +0 -105
- package/dist/runtime/daimon/training/native/container/docker.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/grok-slot.d.ts +0 -22
- package/dist/runtime/daimon/training/native/container/grok-slot.js +0 -38
- package/dist/runtime/daimon/training/native/container/grok-slot.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/index.d.ts +0 -6
- package/dist/runtime/daimon/training/native/container/index.js +0 -6
- package/dist/runtime/daimon/training/native/container/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/lifecycle.d.ts +0 -8
- package/dist/runtime/daimon/training/native/container/lifecycle.js +0 -111
- package/dist/runtime/daimon/training/native/container/lifecycle.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/manifest.d.ts +0 -17
- package/dist/runtime/daimon/training/native/container/manifest.js +0 -164
- package/dist/runtime/daimon/training/native/container/manifest.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/native-preflight.d.ts +0 -8
- package/dist/runtime/daimon/training/native/container/native-preflight.js +0 -40
- package/dist/runtime/daimon/training/native/container/native-preflight.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/preflight.d.ts +0 -15
- package/dist/runtime/daimon/training/native/container/preflight.js +0 -79
- package/dist/runtime/daimon/training/native/container/preflight.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/slot.d.ts +0 -4
- package/dist/runtime/daimon/training/native/container/slot.js +0 -58
- package/dist/runtime/daimon/training/native/container/slot.js.map +0 -1
- package/dist/runtime/daimon/training/native/external.d.ts +0 -37
- package/dist/runtime/daimon/training/native/external.js +0 -75
- package/dist/runtime/daimon/training/native/external.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/authority.d.ts +0 -36
- package/dist/runtime/daimon/training/native/grants/authority.js +0 -49
- package/dist/runtime/daimon/training/native/grants/authority.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/index.d.ts +0 -2
- package/dist/runtime/daimon/training/native/grants/index.js +0 -3
- package/dist/runtime/daimon/training/native/grants/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/pins.d.ts +0 -30
- package/dist/runtime/daimon/training/native/grants/pins.js +0 -20
- package/dist/runtime/daimon/training/native/grants/pins.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/test-socket.d.ts +0 -6
- package/dist/runtime/daimon/training/native/grants/test-socket.js +0 -35
- package/dist/runtime/daimon/training/native/grants/test-socket.js.map +0 -1
- package/dist/runtime/daimon/training/native/grok-fixtures.d.ts +0 -34
- package/dist/runtime/daimon/training/native/grok-fixtures.js +0 -179
- package/dist/runtime/daimon/training/native/grok-fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/native/index.d.ts +0 -38
- package/dist/runtime/daimon/training/native/index.js +0 -27
- package/dist/runtime/daimon/training/native/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/live-checkout.d.ts +0 -2
- package/dist/runtime/daimon/training/native/live-checkout.js +0 -15
- package/dist/runtime/daimon/training/native/live-checkout.js.map +0 -1
- package/dist/runtime/daimon/training/native/observations.d.ts +0 -51
- package/dist/runtime/daimon/training/native/observations.js +0 -217
- package/dist/runtime/daimon/training/native/observations.js.map +0 -1
- package/dist/runtime/daimon/training/native/outcome.d.ts +0 -13
- package/dist/runtime/daimon/training/native/outcome.js +0 -37
- package/dist/runtime/daimon/training/native/outcome.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/engine-config.d.ts +0 -21
- package/dist/runtime/daimon/training/native/preparation/engine-config.js +0 -30
- package/dist/runtime/daimon/training/native/preparation/engine-config.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/fixtures.d.ts +0 -17
- package/dist/runtime/daimon/training/native/preparation/fixtures.js +0 -52
- package/dist/runtime/daimon/training/native/preparation/fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/index.d.ts +0 -7
- package/dist/runtime/daimon/training/native/preparation/index.js +0 -5
- package/dist/runtime/daimon/training/native/preparation/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/layout.d.ts +0 -66
- package/dist/runtime/daimon/training/native/preparation/layout.js +0 -87
- package/dist/runtime/daimon/training/native/preparation/layout.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/subject.d.ts +0 -14
- package/dist/runtime/daimon/training/native/preparation/subject.js +0 -67
- package/dist/runtime/daimon/training/native/preparation/subject.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/types.d.ts +0 -69
- package/dist/runtime/daimon/training/native/preparation/types.js +0 -2
- package/dist/runtime/daimon/training/native/preparation/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/artifacts.d.ts +0 -25
- package/dist/runtime/daimon/training/native/receipt/artifacts.js +0 -32
- package/dist/runtime/daimon/training/native/receipt/artifacts.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.d.ts +0 -129
- package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js +0 -45
- package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/grok.d.ts +0 -246
- package/dist/runtime/daimon/training/native/receipt/grok.js +0 -195
- package/dist/runtime/daimon/training/native/receipt/grok.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/index.d.ts +0 -11
- package/dist/runtime/daimon/training/native/receipt/index.js +0 -8
- package/dist/runtime/daimon/training/native/receipt/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/paths.d.ts +0 -3
- package/dist/runtime/daimon/training/native/receipt/paths.js +0 -18
- package/dist/runtime/daimon/training/native/receipt/paths.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/sandbox.d.ts +0 -42
- package/dist/runtime/daimon/training/native/receipt/sandbox.js +0 -35
- package/dist/runtime/daimon/training/native/receipt/sandbox.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/schema.d.ts +0 -490
- package/dist/runtime/daimon/training/native/receipt/schema.js +0 -138
- package/dist/runtime/daimon/training/native/receipt/schema.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/subscription.d.ts +0 -13
- package/dist/runtime/daimon/training/native/receipt/subscription.js +0 -13
- package/dist/runtime/daimon/training/native/receipt/subscription.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/task-clock.d.ts +0 -19
- package/dist/runtime/daimon/training/native/receipt/task-clock.js +0 -49
- package/dist/runtime/daimon/training/native/receipt/task-clock.js.map +0 -1
- package/dist/runtime/daimon/training/native/sealed-usage.d.ts +0 -218
- package/dist/runtime/daimon/training/native/sealed-usage.js +0 -261
- package/dist/runtime/daimon/training/native/sealed-usage.js.map +0 -1
- package/dist/runtime/daimon/training/native/test-fixtures.d.ts +0 -27
- package/dist/runtime/daimon/training/native/test-fixtures.js +0 -162
- package/dist/runtime/daimon/training/native/test-fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/native/transcript.d.ts +0 -96
- package/dist/runtime/daimon/training/native/transcript.js +0 -239
- package/dist/runtime/daimon/training/native/transcript.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/delivery.d.ts +0 -27
- package/dist/runtime/daimon/training/native/transport/delivery.js +0 -98
- package/dist/runtime/daimon/training/native/transport/delivery.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/http.d.ts +0 -3
- package/dist/runtime/daimon/training/native/transport/http.js +0 -81
- package/dist/runtime/daimon/training/native/transport/http.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/index.d.ts +0 -4
- package/dist/runtime/daimon/training/native/transport/index.js +0 -3
- package/dist/runtime/daimon/training/native/transport/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/types.d.ts +0 -15
- package/dist/runtime/daimon/training/native/transport/types.js +0 -2
- package/dist/runtime/daimon/training/native/transport/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/cli.d.ts +0 -1
- package/dist/runtime/daimon/training/native/worker/cli.js +0 -17
- package/dist/runtime/daimon/training/native/worker/cli.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/control.d.ts +0 -20
- package/dist/runtime/daimon/training/native/worker/control.js +0 -266
- package/dist/runtime/daimon/training/native/worker/control.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/deliveries.d.ts +0 -38
- package/dist/runtime/daimon/training/native/worker/deliveries.js +0 -91
- package/dist/runtime/daimon/training/native/worker/deliveries.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/collect.d.ts +0 -54
- package/dist/runtime/daimon/training/native/worker/evidence/collect.js +0 -278
- package/dist/runtime/daimon/training/native/worker/evidence/collect.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/execution.d.ts +0 -102
- package/dist/runtime/daimon/training/native/worker/evidence/execution.js +0 -191
- package/dist/runtime/daimon/training/native/worker/evidence/execution.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/index.d.ts +0 -3
- package/dist/runtime/daimon/training/native/worker/evidence/index.js +0 -4
- package/dist/runtime/daimon/training/native/worker/evidence/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/io.d.ts +0 -20
- package/dist/runtime/daimon/training/native/worker/evidence/io.js +0 -130
- package/dist/runtime/daimon/training/native/worker/evidence/io.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/seal.d.ts +0 -3
- package/dist/runtime/daimon/training/native/worker/evidence/seal.js +0 -67
- package/dist/runtime/daimon/training/native/worker/evidence/seal.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/index.d.ts +0 -11
- package/dist/runtime/daimon/training/native/worker/index.js +0 -8
- package/dist/runtime/daimon/training/native/worker/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/profile.d.ts +0 -23
- package/dist/runtime/daimon/training/native/worker/profile.js +0 -149
- package/dist/runtime/daimon/training/native/worker/profile.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/public.d.ts +0 -53
- package/dist/runtime/daimon/training/native/worker/public.js +0 -22
- package/dist/runtime/daimon/training/native/worker/public.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/sandbox.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/sandbox.js +0 -54
- package/dist/runtime/daimon/training/native/worker/sandbox.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/server.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/server.js +0 -102
- package/dist/runtime/daimon/training/native/worker/server.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/types.d.ts +0 -318
- package/dist/runtime/daimon/training/native/worker/types.js +0 -2
- package/dist/runtime/daimon/training/native/worker/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/index.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js +0 -4
- package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/source.d.ts +0 -3
- package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js +0 -16
- package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js +0 -52
- package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.d.ts +0 -21
- package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js +0 -198
- package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/types.d.ts +0 -91
- package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js +0 -2
- package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/worker.d.ts +0 -1
- package/dist/runtime/daimon/training/native/worker/worker.js +0 -105
- package/dist/runtime/daimon/training/native/worker/worker.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/broker.d.ts +0 -20
- package/dist/runtime/daimon/training/providers/grok-broker/broker.js +0 -55
- package/dist/runtime/daimon/training/providers/grok-broker/broker.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.d.ts +0 -15
- package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js +0 -29
- package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-home.d.ts +0 -16
- package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js +0 -60
- package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.d.ts +0 -81
- package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js +0 -221
- package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.d.ts +0 -31
- package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js +0 -78
- package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grants.d.ts +0 -63
- package/dist/runtime/daimon/training/providers/grok-broker/grants.js +0 -20
- package/dist/runtime/daimon/training/providers/grok-broker/grants.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/index.d.ts +0 -3
- package/dist/runtime/daimon/training/providers/grok-broker/index.js +0 -4
- package/dist/runtime/daimon/training/providers/grok-broker/index.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.d.ts +0 -21
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.js +0 -81
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/index.d.ts +0 -4
- package/dist/runtime/daimon/training/providers/grok-subscription/index.js +0 -5
- package/dist/runtime/daimon/training/providers/grok-subscription/index.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.d.ts +0 -26
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js +0 -102
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/provider.d.ts +0 -9
- package/dist/runtime/daimon/training/providers/grok-subscription/provider.js +0 -38
- package/dist/runtime/daimon/training/providers/grok-subscription/provider.js.map +0 -1
- package/dist/runtime/daimon/training/public.d.ts +0 -6
- package/dist/runtime/daimon/training/public.js +0 -5
- package/dist/runtime/daimon/training/public.js.map +0 -1
- package/dist/runtime/daimon/training/services/account-lease.d.ts +0 -7
- package/dist/runtime/daimon/training/services/account-lease.js +0 -76
- package/dist/runtime/daimon/training/services/account-lease.js.map +0 -1
- package/dist/runtime/daimon/training/services/freshness.d.ts +0 -15
- package/dist/runtime/daimon/training/services/freshness.js +0 -19
- package/dist/runtime/daimon/training/services/freshness.js.map +0 -1
- package/dist/runtime/daimon/training/services/index.d.ts +0 -4
- package/dist/runtime/daimon/training/services/index.js +0 -4
- package/dist/runtime/daimon/training/services/index.js.map +0 -1
- package/dist/runtime/daimon/training/services/slot-freshness.d.ts +0 -34
- package/dist/runtime/daimon/training/services/slot-freshness.js +0 -178
- package/dist/runtime/daimon/training/services/slot-freshness.js.map +0 -1
- package/dist/runtime/daimon/wakeMoments.js.map +0 -1
- package/dist/runtime/pi/adapter.d.ts +0 -3
- package/dist/runtime/pi/adapter.js +0 -230
- package/dist/runtime/pi/appActivitySource.d.ts +0 -1
- package/dist/runtime/pi/appActivitySource.js +0 -199
- package/dist/runtime/pi/appAgentConfig.d.ts +0 -11
- package/dist/runtime/pi/appAgentConfig.js +0 -264
- package/dist/runtime/pi/appCliEnginesSource.d.ts +0 -1
- package/dist/runtime/pi/appCliEnginesSource.js +0 -183
- package/dist/runtime/pi/appCliSource.d.ts +0 -1
- package/dist/runtime/pi/appCliSource.js +0 -353
- package/dist/runtime/pi/appControlSource.d.ts +0 -1
- package/dist/runtime/pi/appControlSource.js +0 -390
- package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +0 -1
- package/dist/runtime/pi/appControlWakeIdentitySource.js +0 -19
- package/dist/runtime/pi/appCoreSource.d.ts +0 -4
- package/dist/runtime/pi/appCoreSource.js +0 -244
- package/dist/runtime/pi/appPreludeSource.d.ts +0 -1
- package/dist/runtime/pi/appPreludeSource.js +0 -192
- package/dist/runtime/pi/appScheduleSource.d.ts +0 -1
- package/dist/runtime/pi/appScheduleSource.js +0 -84
- package/dist/runtime/pi/appScriptedEngine.d.ts +0 -31
- package/dist/runtime/pi/appScriptedEngine.js +0 -42
- package/dist/runtime/pi/appSource.d.ts +0 -4
- package/dist/runtime/pi/appSource.js +0 -12
- package/dist/runtime/pi/appTemplate.d.ts +0 -14
- package/dist/runtime/pi/appTemplate.js +0 -28
- package/dist/runtime/pi/appTemplateTypes.d.ts +0 -64
- package/dist/runtime/pi/appTemplateTypes.js +0 -18
- package/dist/runtime/pi/appWakeContextSource.d.ts +0 -1
- package/dist/runtime/pi/appWakeContextSource.js +0 -398
- package/dist/runtime/pi/containerTargets.d.ts +0 -4
- package/dist/runtime/pi/containerTargets.js +0 -63
- package/dist/runtime/pi/runAuth.d.ts +0 -2
- package/dist/runtime/pi/runAuth.js +0 -185
- package/dist/runtime/pi/testHelpers.d.ts +0 -2
- package/dist/shared/errors.js.map +0 -1
- package/dist/training/subjects/environment.d.ts +0 -2
- package/dist/training/subjects/environment.js +0 -14
- package/dist/training/subjects/environment.js.map +0 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { mkdir, mkdtemp, rm } from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { ensureAuthProfile, registerSubscriptionRealm } from "../../../auth/index.js";
|
|
5
|
+
import { getDaimonEngineDescriptor } from "../../../runtime/daimon/index.js";
|
|
6
|
+
import { DAIMON_ORGANIZATION_UID } from "../../../runtime/daimon/runtimeIdentity.js";
|
|
7
|
+
import { DAIMON_PROFILE_UNLOCK_FILE } from "../../../runtime/daimon/subscriptionRealms.js";
|
|
8
|
+
import { SpawnfileError } from "../../../shared/index.js";
|
|
9
|
+
import { slugify } from "../../helpers.js";
|
|
10
|
+
import { prepareTrial } from "./boot.js";
|
|
11
|
+
import { createTrialDocker } from "./docker.js";
|
|
12
|
+
import { trainingGatewayRealmVolume } from "./gateway.js";
|
|
13
|
+
import { JUDGE_INSTRUCTIONS, writeJudgeAgent } from "./judge.js";
|
|
14
|
+
const LABEL = "spawnfile.subscription-realm";
|
|
15
|
+
/** The profile's volume names for an engine's volume-held login. */
|
|
16
|
+
export const subscriptionRealmBinding = (profileName, engine) => {
|
|
17
|
+
const prefix = `spawnfile-training-${slugify(profileName) || "profile"}-${engine}`;
|
|
18
|
+
return { homeVolume: `${prefix}-home`, realmVolume: trainingGatewayRealmVolume(profileName, engine), unlockVolume: `${prefix}-unlock` };
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Creates the unlock secret inside its volume exactly once, as the organization
|
|
22
|
+
* uid Daimon checks it against (one `0600` regular file, no newline). Generated
|
|
23
|
+
* and written inside a network-less container: the bytes never reach the host.
|
|
24
|
+
* An existing secret is kept (replacing it would orphan the encrypted keyring)
|
|
25
|
+
* unless it is unsafe, which is refused.
|
|
26
|
+
*/
|
|
27
|
+
const UNLOCK_PROGRAM = [
|
|
28
|
+
"const fs = require('node:fs'), crypto = require('node:crypto');",
|
|
29
|
+
"const [uid, name] = process.argv.slice(1); const target = `/unlock/${name}`;",
|
|
30
|
+
"try { const entry = fs.lstatSync(target);",
|
|
31
|
+
" if (!entry.isFile() || entry.nlink !== 1 || entry.uid !== Number(uid) || (entry.mode & 0o777) !== 0o600 || entry.size < 1) { console.error('existing unlock secret is unsafe'); process.exit(3); }",
|
|
32
|
+
" process.exit(0);",
|
|
33
|
+
"} catch (error) { if (error.code !== 'ENOENT') throw error; }",
|
|
34
|
+
"const fd = fs.openSync(target, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_NOFOLLOW, 0o600);",
|
|
35
|
+
"const bytes = Buffer.from(crypto.randomBytes(32).toString('hex'));",
|
|
36
|
+
"fs.writeSync(fd, bytes); bytes.fill(0); fs.fchmodSync(fd, 0o600); fs.fsyncSync(fd); fs.fchownSync(fd, Number(uid), Number(uid)); fs.closeSync(fd);"
|
|
37
|
+
].join("\n");
|
|
38
|
+
export const ensureSubscriptionRealmVolumes = async (docker, image, engine, binding) => {
|
|
39
|
+
for (const volume of [binding.realmVolume, binding.unlockVolume, ...(binding.homeVolume ? [binding.homeVolume] : [])]) {
|
|
40
|
+
await docker(["volume", "create", "--label", `${LABEL}=${engine}`, volume]);
|
|
41
|
+
}
|
|
42
|
+
await docker(["run", "--rm", "--network", "none", "--user", "0:0", "--cap-drop", "ALL", "--cap-add", "CHOWN",
|
|
43
|
+
"--security-opt", "no-new-privileges", "--entrypoint", "node", "--mount", `type=volume,source=${binding.unlockVolume},target=/unlock`,
|
|
44
|
+
image, "-e", UNLOCK_PROGRAM, String(DAIMON_ORGANIZATION_UID), DAIMON_PROFILE_UNLOCK_FILE]);
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* `spawnfile auth login <engine>`: gives an auth profile its own volume-held
|
|
48
|
+
* login for an engine that keeps its login in a Daimon secret-service realm
|
|
49
|
+
* (AGY). Creates the profile's realm, unlock and home login volumes, then runs
|
|
50
|
+
* Daimon's own interactive `auth <engine> login` in a throwaway,
|
|
51
|
+
* production-booted one-agent organization (a tool-free judge) attached to the
|
|
52
|
+
* operator's terminal, keeps the engine's login files from that throwaway home
|
|
53
|
+
* in the home login volume, and records the volume names on the profile once
|
|
54
|
+
* it succeeds.
|
|
55
|
+
* Spawnfile never reads the login or the unlock secret.
|
|
56
|
+
*/
|
|
57
|
+
export const loginSubscriptionRealm = async (options) => {
|
|
58
|
+
const descriptor = getDaimonEngineDescriptor(options.engine);
|
|
59
|
+
if (descriptor?.auth.staging !== "secret-service") {
|
|
60
|
+
throw new SpawnfileError("validation_error", `Engine ${options.engine} has no volume-held login; use \`spawnfile auth import ${options.engine}\``);
|
|
61
|
+
}
|
|
62
|
+
const docker = options.docker ?? createTrialDocker();
|
|
63
|
+
const current = await ensureAuthProfile(options.profileName);
|
|
64
|
+
// An earlier login keeps its volumes; one recorded before home login files were kept gains its home volume.
|
|
65
|
+
const binding = { ...subscriptionRealmBinding(current.name, options.engine), ...current.realms?.[options.engine] };
|
|
66
|
+
const realms = { ...current, env: {}, imports: {}, realms: { [options.engine]: binding } };
|
|
67
|
+
const scratch = options.scratchRoot ?? os.tmpdir();
|
|
68
|
+
await mkdir(scratch, { recursive: true });
|
|
69
|
+
const root = await mkdtemp(path.join(scratch, "spawnfile-auth-login-"));
|
|
70
|
+
let prepared;
|
|
71
|
+
try {
|
|
72
|
+
prepared = await (options.prepare ?? prepareTrial)({
|
|
73
|
+
agentManifestPath: await writeJudgeAgent({ engine: options.engine, model: "default" }, path.join(root, "source")),
|
|
74
|
+
directory: root, docker, instructions: JUDGE_INSTRUCTIONS, trialId: `login-${options.engine}-${current.name}`
|
|
75
|
+
});
|
|
76
|
+
await ensureSubscriptionRealmVolumes(docker, prepared.image, options.engine, binding);
|
|
77
|
+
const command = await prepared.login(realms, { dryRun: options.dryRun === true });
|
|
78
|
+
const profile = options.dryRun ? current : await registerSubscriptionRealm(current.name, options.engine, binding);
|
|
79
|
+
return { binding, command, profile };
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
await prepared?.dispose();
|
|
83
|
+
await rm(root, { recursive: true, force: true });
|
|
84
|
+
}
|
|
85
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** The candidate's instructions become this agent's system document. */
|
|
2
|
+
export declare const TRIAL_INSTRUCTIONS_FILE = "TRAINING_INSTRUCTIONS.md";
|
|
3
|
+
/**
|
|
4
|
+
* Writes the trial's one-agent organization: a copy of the subject agent's own
|
|
5
|
+
* declaration directory (so every relative doc, skill and resource keeps
|
|
6
|
+
* resolving) whose Spawnfile is the subject's, re-rendered with the candidate
|
|
7
|
+
* prompt as its system document and with every surface (federation), its
|
|
8
|
+
* schedule and its training block removed. Nothing else changes: runtime,
|
|
9
|
+
* engine, model, memory and tools are the subject's.
|
|
10
|
+
*/
|
|
11
|
+
export declare const writeTrialProject: (agentManifestPath: string, instructions: string, directory: string) => Promise<string>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { cp, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { isAgentManifest, loadManifest, renderSpawnfile } from "../../../manifest/index.js";
|
|
4
|
+
import { SpawnfileError } from "../../../shared/index.js";
|
|
5
|
+
/** The candidate's instructions become this agent's system document. */
|
|
6
|
+
export const TRIAL_INSTRUCTIONS_FILE = "TRAINING_INSTRUCTIONS.md";
|
|
7
|
+
const SKIPPED = new Set([".git", "node_modules", ".runtime", ".spawn", ".spawn-dev", ".sim"]);
|
|
8
|
+
/**
|
|
9
|
+
* Writes the trial's one-agent organization: a copy of the subject agent's own
|
|
10
|
+
* declaration directory (so every relative doc, skill and resource keeps
|
|
11
|
+
* resolving) whose Spawnfile is the subject's, re-rendered with the candidate
|
|
12
|
+
* prompt as its system document and with every surface (federation), its
|
|
13
|
+
* schedule and its training block removed. Nothing else changes: runtime,
|
|
14
|
+
* engine, model, memory and tools are the subject's.
|
|
15
|
+
*/
|
|
16
|
+
export const writeTrialProject = async (agentManifestPath, instructions, directory) => {
|
|
17
|
+
const { manifest } = await loadManifest(agentManifestPath);
|
|
18
|
+
if (!isAgentManifest(manifest)) {
|
|
19
|
+
throw new SpawnfileError("validation_error", "A production-booted training subject must be declared in its own agent Spawnfile");
|
|
20
|
+
}
|
|
21
|
+
await cp(path.dirname(agentManifestPath), directory, {
|
|
22
|
+
recursive: true,
|
|
23
|
+
filter: (source) => !SKIPPED.has(path.basename(source))
|
|
24
|
+
});
|
|
25
|
+
const { schedule: _schedule, surfaces: _surfaces, training: _training, ...kept } = manifest;
|
|
26
|
+
const trial = { ...kept, workspace: { ...kept.workspace, docs: { ...kept.workspace?.docs, system: TRIAL_INSTRUCTIONS_FILE } } };
|
|
27
|
+
await writeFile(path.join(directory, TRIAL_INSTRUCTIONS_FILE), instructions);
|
|
28
|
+
const manifestPath = path.join(directory, "Spawnfile");
|
|
29
|
+
await writeFile(manifestPath, renderSpawnfile(trial));
|
|
30
|
+
return manifestPath;
|
|
31
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Gives the turn back; idempotent. */
|
|
2
|
+
export type ReleaseRealmTurn = () => void;
|
|
3
|
+
export interface RealmTurnOptions {
|
|
4
|
+
/** Called once on the holder when another caller starts waiting: a warm holder should hand the turn over. */
|
|
5
|
+
onContended?: () => void;
|
|
6
|
+
/** Bound on the wait; on expiry the caller is refused instead of waiting forever. */
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* First-come turns on exclusive login realms, one holder per realm at a time.
|
|
12
|
+
* An engine whose login is one realm held under an exclusive lock (Daimon's
|
|
13
|
+
* AGY keyring, `flock` on `.daimon-lease`) admits one container per login:
|
|
14
|
+
* every container of a run that mounts that realm takes a turn here first, so
|
|
15
|
+
* a second container never boots into the lock and dies at readiness.
|
|
16
|
+
*/
|
|
17
|
+
export interface RealmTurns {
|
|
18
|
+
take(realm: string, options?: RealmTurnOptions): Promise<ReleaseRealmTurn>;
|
|
19
|
+
}
|
|
20
|
+
export declare const createRealmTurns: () => RealmTurns;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { SpawnfileError } from "../../../shared/index.js";
|
|
2
|
+
export const createRealmTurns = () => {
|
|
3
|
+
const realms = new Map();
|
|
4
|
+
const release = (key, state) => {
|
|
5
|
+
let released = false;
|
|
6
|
+
return () => {
|
|
7
|
+
if (released)
|
|
8
|
+
return;
|
|
9
|
+
released = true;
|
|
10
|
+
const next = state.queue.shift();
|
|
11
|
+
if (!next) {
|
|
12
|
+
realms.delete(key);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
state.holder = next.options;
|
|
16
|
+
state.contended = false;
|
|
17
|
+
next.grant();
|
|
18
|
+
if (state.queue.length > 0)
|
|
19
|
+
notify(state);
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
const notify = (state) => {
|
|
23
|
+
if (state.contended)
|
|
24
|
+
return;
|
|
25
|
+
state.contended = true;
|
|
26
|
+
state.holder?.onContended?.();
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
take: (key, options = {}) => {
|
|
30
|
+
if (options.signal?.aborted)
|
|
31
|
+
return Promise.reject(new SpawnfileError("runtime_error", `cancelled waiting for login realm ${key}`));
|
|
32
|
+
const state = realms.get(key);
|
|
33
|
+
if (!state) {
|
|
34
|
+
const fresh = { holder: options, contended: false, queue: [] };
|
|
35
|
+
realms.set(key, fresh);
|
|
36
|
+
return Promise.resolve(release(key, fresh));
|
|
37
|
+
}
|
|
38
|
+
return new Promise((resolve, reject) => {
|
|
39
|
+
let timer;
|
|
40
|
+
const leave = (message) => {
|
|
41
|
+
const index = state.queue.indexOf(waiter);
|
|
42
|
+
if (index < 0)
|
|
43
|
+
return;
|
|
44
|
+
state.queue.splice(index, 1);
|
|
45
|
+
if (timer)
|
|
46
|
+
clearTimeout(timer);
|
|
47
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
48
|
+
reject(new SpawnfileError("runtime_error", message));
|
|
49
|
+
};
|
|
50
|
+
const onAbort = () => leave(`cancelled waiting for login realm ${key}`);
|
|
51
|
+
const waiter = {
|
|
52
|
+
options,
|
|
53
|
+
grant: () => {
|
|
54
|
+
if (timer)
|
|
55
|
+
clearTimeout(timer);
|
|
56
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
57
|
+
resolve(release(key, state));
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
state.queue.push(waiter);
|
|
61
|
+
if (options.timeoutMs !== undefined) {
|
|
62
|
+
timer = setTimeout(() => leave(`login realm ${key} stayed held by another container for ${options.timeoutMs}ms; one login admits one container at a time`), options.timeoutMs);
|
|
63
|
+
}
|
|
64
|
+
options.signal?.addEventListener("abort", onAbort, { once: true });
|
|
65
|
+
notify(state);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
};
|
|
@@ -1,24 +1,9 @@
|
|
|
1
1
|
import { type CompiledEngineEntry, type CompiledScheduleEntry, type UpReceipt } from "../deployment/index.js";
|
|
2
2
|
import type { CompilePlan } from "./types.js";
|
|
3
3
|
import type { UpProjectResult } from "./upProject.js";
|
|
4
|
-
/**
|
|
5
|
-
* Extracts the `{agent, cron}` pairs an up-receipt's `compiled_schedule` field carries
|
|
6
|
-
* (Decision 21 Piece 4) — the raw material for simfile's wake-diff denominator oracle.
|
|
7
|
-
* Only `kind: "cron"` schedules are represented; `every`/`disabled` schedules have no
|
|
8
|
-
* cron-fire cadence to diff against sim-time and are intentionally omitted, not zeroed.
|
|
9
|
-
*/
|
|
4
|
+
/** Reads adapter-resolved engine kinds from the compiled report for the up receipt. */
|
|
10
5
|
export declare const resolveCompiledSchedule: (plan: CompilePlan) => CompiledScheduleEntry[];
|
|
11
|
-
/**
|
|
12
|
-
* Extracts `{agent, engine}` pairs (Piece 5, Slice B) — disclosure ground truth for the
|
|
13
|
-
* run-manifest's `pinned-engine` field, so a `scripted` (or any non-default) pi engine is
|
|
14
|
-
* visibly disclosed rather than an invisible test-only branch. Reads
|
|
15
|
-
* `report.container.runtime_instances[].engine_by_node_id`, the single source of truth
|
|
16
|
-
* `containerArtifacts.ts` already stamps from the pi adapter's own resolved engine kinds
|
|
17
|
-
* (see `src/runtime/pi/adapter.ts`'s `createContainerTargets`) — deliberately not
|
|
18
|
-
* re-derived from a fresh `buildCompilePlan` walk (unlike `resolveCompiledSchedule` above),
|
|
19
|
-
* since that would recompute the exact same fact from pi-adapter-internal logic
|
|
20
|
-
* (`resolvePiEngine`) that compiler code has no business reaching into directly.
|
|
21
|
-
*/
|
|
6
|
+
/** Reads adapter-resolved engine kinds from the compiled report for the up receipt. */
|
|
22
7
|
export declare const resolveCompiledEngines: (report: UpProjectResult["report"]) => CompiledEngineEntry[];
|
|
23
8
|
/**
|
|
24
9
|
* Builds `spawnfile.up-receipt.v1` from a project-path `upProject()` result. Reads back
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { readDeploymentRecord, UP_RECEIPT_VERSION } from "../deployment/index.js";
|
|
2
2
|
import { SpawnfileError } from "../shared/index.js";
|
|
3
3
|
import { buildCompilePlan } from "./buildCompilePlan.js";
|
|
4
|
-
/**
|
|
5
|
-
* Extracts the `{agent, cron}` pairs an up-receipt's `compiled_schedule` field carries
|
|
6
|
-
* (Decision 21 Piece 4) — the raw material for simfile's wake-diff denominator oracle.
|
|
7
|
-
* Only `kind: "cron"` schedules are represented; `every`/`disabled` schedules have no
|
|
8
|
-
* cron-fire cadence to diff against sim-time and are intentionally omitted, not zeroed.
|
|
9
|
-
*/
|
|
4
|
+
/** Reads adapter-resolved engine kinds from the compiled report for the up receipt. */
|
|
10
5
|
export const resolveCompiledSchedule = (plan) => plan.nodes
|
|
11
6
|
.filter((node) => node.kind === "agent")
|
|
12
7
|
.flatMap((node) => {
|
|
@@ -14,17 +9,7 @@ export const resolveCompiledSchedule = (plan) => plan.nodes
|
|
|
14
9
|
return schedule?.kind === "cron" ? [{ agent: node.id, cron: schedule.cron }] : [];
|
|
15
10
|
})
|
|
16
11
|
.sort((left, right) => left.agent.localeCompare(right.agent));
|
|
17
|
-
/**
|
|
18
|
-
* Extracts `{agent, engine}` pairs (Piece 5, Slice B) — disclosure ground truth for the
|
|
19
|
-
* run-manifest's `pinned-engine` field, so a `scripted` (or any non-default) pi engine is
|
|
20
|
-
* visibly disclosed rather than an invisible test-only branch. Reads
|
|
21
|
-
* `report.container.runtime_instances[].engine_by_node_id`, the single source of truth
|
|
22
|
-
* `containerArtifacts.ts` already stamps from the pi adapter's own resolved engine kinds
|
|
23
|
-
* (see `src/runtime/pi/adapter.ts`'s `createContainerTargets`) — deliberately not
|
|
24
|
-
* re-derived from a fresh `buildCompilePlan` walk (unlike `resolveCompiledSchedule` above),
|
|
25
|
-
* since that would recompute the exact same fact from pi-adapter-internal logic
|
|
26
|
-
* (`resolvePiEngine`) that compiler code has no business reaching into directly.
|
|
27
|
-
*/
|
|
12
|
+
/** Reads adapter-resolved engine kinds from the compiled report for the up receipt. */
|
|
28
13
|
export const resolveCompiledEngines = (report) => (report.container?.runtime_instances ?? [])
|
|
29
14
|
.flatMap((instance) => Object.entries(instance.engine_by_node_id ?? {}))
|
|
30
15
|
.map(([agent, engine]) => ({ agent, engine }))
|
|
@@ -73,25 +73,9 @@ const planMnemeFiles = (report, mounts) => (report.container?.memory ?? []).flat
|
|
|
73
73
|
}
|
|
74
74
|
}));
|
|
75
75
|
});
|
|
76
|
-
/** Daimon
|
|
77
|
-
* stream at `runtime/agents/<slug>/telemetry/causal.jsonl` under the instance root (see
|
|
78
|
-
* `ecosystem/daimon/src/observability/causalEvents.ts`). As of Piece 4b, that directory is
|
|
79
|
-
* a run-scoped durable volume (`daimonTelemetryArtifacts.ts`, mirroring how
|
|
80
|
-
* `moltnetArtifacts.ts` mounts the Moltnet causal directory), resolved here via each
|
|
81
|
-
* instance's `telemetry_mount_ids` (node id -> persistent mount id). This is the real
|
|
82
|
-
* relaxation of the export-before-teardown invariant (Decision 21) for daimon truth:
|
|
83
|
-
* `spawnfile down` (without `--volumes`) can run BEFORE `spawnfile artifacts export`, and
|
|
84
|
-
* export still recovers every agent's causal.jsonl from its named volume.
|
|
85
|
-
*
|
|
86
|
-
* The `instance.home_path`-keyed branch below is a legacy fallback for a compile report
|
|
87
|
-
* written before Piece 4b (no `telemetry_mount_ids` yet) — it reads the old container-local
|
|
88
|
-
* path with `docker cp`, which only works while the container is still live. Any report
|
|
89
|
-
* produced by this compiler build always populates `telemetry_mount_ids` for a pi/daimon
|
|
90
|
-
* instance, so that branch never fires today; it exists only so an out-of-date report
|
|
91
|
-
* doesn't silently export zero daimon files. Optional either way: a fresh instance that
|
|
92
|
-
* never woke has no telemetry file yet. */
|
|
76
|
+
/** Plans optional Daimon causal telemetry exports from declared mounts or a legacy instance home. */
|
|
93
77
|
const planDaimonFiles = (report, mounts) => (report.container?.runtime_instances ?? [])
|
|
94
|
-
.filter((instance) => instance.runtime === "
|
|
78
|
+
.filter((instance) => instance.runtime === "daimon")
|
|
95
79
|
.flatMap((instance) => (instance.node_ids ?? []).flatMap((nodeId) => {
|
|
96
80
|
const slug = agentSlugFromNodeId(nodeId);
|
|
97
81
|
if (!slug) {
|
|
@@ -4,7 +4,7 @@ import path from "node:path";
|
|
|
4
4
|
import { ensureDirectory } from "../filesystem/index.js";
|
|
5
5
|
import { copyContainerFileToHost, } from "./artifactsExportDocker.js";
|
|
6
6
|
const plans = (report) => (report.container?.runtime_instances ?? [])
|
|
7
|
-
.filter((instance) =>
|
|
7
|
+
.filter((instance) => instance.runtime === "daimon"
|
|
8
8
|
&& instance.home_path !== null)
|
|
9
9
|
.flatMap((instance) => {
|
|
10
10
|
const instanceRoot = path.posix.dirname(instance.home_path);
|
package/dist/dev/docker.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { type CompileProjectResult } from "../compiler/index.js";
|
|
2
1
|
import { type DeploymentRecord } from "../deployment/index.js";
|
|
3
2
|
export type DevExecFile = (file: string, args: string[], options: {
|
|
4
3
|
timeout: number;
|
|
@@ -9,8 +8,4 @@ export type DevExecFile = (file: string, args: string[], options: {
|
|
|
9
8
|
export declare const defaultExecFile: DevExecFile;
|
|
10
9
|
export declare const dockerArgsForRecord: (record: DeploymentRecord) => string[];
|
|
11
10
|
export declare const firstContainerName: (record: DeploymentRecord) => string;
|
|
12
|
-
export declare const compileForDevApply: (inputPath: string, outputDirectory: string, record: DeploymentRecord, dockerCommand: string, execFileImpl: DevExecFile) => Promise<CompileProjectResult>;
|
|
13
11
|
export declare const runDocker: (command: string, args: string[], execFileImpl: DevExecFile, timeout?: number) => Promise<string>;
|
|
14
|
-
export declare const copyIntoContainer: (dockerCommand: string, dockerPrefix: string[], source: string, destination: string, execFileImpl: DevExecFile) => Promise<void>;
|
|
15
|
-
export declare const ensureContainerDirectories: (dockerCommand: string, dockerPrefix: string[], containerName: string, paths: string[], execFileImpl: DevExecFile) => Promise<void>;
|
|
16
|
-
export declare const chownContainerPaths: (dockerCommand: string, dockerPrefix: string[], containerName: string, paths: string[], execFileImpl: DevExecFile) => Promise<void>;
|
package/dist/dev/docker.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { execFile as execFileCallback } from "node:child_process";
|
|
2
2
|
import { promisify } from "node:util";
|
|
3
|
-
import { compileProject, normalizeDockerArchitecture } from "../compiler/index.js";
|
|
4
3
|
import { dockerContextNameForTarget, dockerHostValueForTarget } from "../deployment/index.js";
|
|
5
4
|
import { SpawnfileError } from "../shared/index.js";
|
|
6
5
|
export const defaultExecFile = promisify(execFileCallback);
|
|
@@ -20,52 +19,7 @@ export const firstContainerName = (record) => {
|
|
|
20
19
|
}
|
|
21
20
|
return name;
|
|
22
21
|
};
|
|
23
|
-
export const compileForDevApply = async (inputPath, outputDirectory, record, dockerCommand, execFileImpl) => {
|
|
24
|
-
const dockerContext = dockerContextNameForTarget(record.target) ?? undefined;
|
|
25
|
-
const architecture = dockerContext
|
|
26
|
-
? normalizeDockerArchitecture((await execFileImpl(dockerCommand, ["--context", dockerContext, "info", "--format", "{{.Architecture}}"], { timeout: 10_000 })).stdout)
|
|
27
|
-
: undefined;
|
|
28
|
-
return compileProject(inputPath, {
|
|
29
|
-
clean: false,
|
|
30
|
-
containerArchitecture: architecture,
|
|
31
|
-
outputDirectory
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
22
|
export const runDocker = async (command, args, execFileImpl, timeout = 30_000) => {
|
|
35
23
|
const { stdout } = await execFileImpl(command, args, { timeout });
|
|
36
24
|
return stdout;
|
|
37
25
|
};
|
|
38
|
-
export const copyIntoContainer = async (dockerCommand, dockerPrefix, source, destination, execFileImpl) => {
|
|
39
|
-
await runDocker(dockerCommand, [...dockerPrefix, "cp", source, destination], execFileImpl, 60_000);
|
|
40
|
-
};
|
|
41
|
-
export const ensureContainerDirectories = async (dockerCommand, dockerPrefix, containerName, paths, execFileImpl) => {
|
|
42
|
-
if (paths.length === 0) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
await runDocker(dockerCommand, [
|
|
46
|
-
...dockerPrefix,
|
|
47
|
-
"exec",
|
|
48
|
-
"--user",
|
|
49
|
-
"root",
|
|
50
|
-
containerName,
|
|
51
|
-
"mkdir",
|
|
52
|
-
"-p",
|
|
53
|
-
...paths
|
|
54
|
-
], execFileImpl);
|
|
55
|
-
};
|
|
56
|
-
export const chownContainerPaths = async (dockerCommand, dockerPrefix, containerName, paths, execFileImpl) => {
|
|
57
|
-
if (paths.length === 0) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
await runDocker(dockerCommand, [
|
|
61
|
-
...dockerPrefix,
|
|
62
|
-
"exec",
|
|
63
|
-
"--user",
|
|
64
|
-
"root",
|
|
65
|
-
containerName,
|
|
66
|
-
"chown",
|
|
67
|
-
"-R",
|
|
68
|
-
"spawnfile:spawnfile",
|
|
69
|
-
...paths
|
|
70
|
-
], execFileImpl);
|
|
71
|
-
};
|
package/dist/dev/index.d.ts
CHANGED
package/dist/dev/index.js
CHANGED
package/dist/dev/project.d.ts
CHANGED
|
@@ -1,25 +1,11 @@
|
|
|
1
1
|
import { type UpProjectOptions, type UpProjectResult } from "../compiler/index.js";
|
|
2
2
|
import { type DeploymentRecord } from "../deployment/index.js";
|
|
3
3
|
import { type DevExecFile } from "./docker.js";
|
|
4
|
-
export declare const PI_CONTROL_URL = "http://127.0.0.1:19690";
|
|
5
4
|
export interface DevProjectOptions {
|
|
6
5
|
deploymentName?: string;
|
|
7
6
|
dockerCommand?: string;
|
|
8
7
|
outputDirectory?: string;
|
|
9
8
|
}
|
|
10
|
-
export interface DevApplyProjectOptions extends DevProjectOptions {
|
|
11
|
-
agent: string;
|
|
12
|
-
execFile?: DevExecFile;
|
|
13
|
-
restart?: boolean;
|
|
14
|
-
}
|
|
15
|
-
export interface DevApplyProjectResult {
|
|
16
|
-
agentId: string;
|
|
17
|
-
bridgeStarted: boolean;
|
|
18
|
-
containerName: string;
|
|
19
|
-
deploymentName: string;
|
|
20
|
-
existingAgent: boolean;
|
|
21
|
-
outputDirectory: string;
|
|
22
|
-
}
|
|
23
9
|
export interface DevStopProjectResult {
|
|
24
10
|
containerName: string;
|
|
25
11
|
deploymentName: string;
|
|
@@ -35,8 +21,6 @@ export declare const resolveDevOutputDirectory: (inputPath: string, outputDirect
|
|
|
35
21
|
*/
|
|
36
22
|
export declare const devUpProject: (inputPath: string, options?: UpProjectOptions) => Promise<UpProjectResult>;
|
|
37
23
|
export declare const selectDeploymentRecord: (outputDirectory: string, deploymentName?: string) => Promise<DeploymentRecord>;
|
|
38
|
-
export declare const devApplyProject: (inputPath: string, options: DevApplyProjectOptions) => Promise<DevApplyProjectResult>;
|
|
39
|
-
export declare const devRestartProject: (inputPath: string, options: DevApplyProjectOptions) => Promise<DevApplyProjectResult>;
|
|
40
24
|
export declare const devStopProject: (inputPath: string, options?: DevProjectOptions & {
|
|
41
25
|
execFile?: DevExecFile;
|
|
42
26
|
}) => Promise<DevStopProjectResult>;
|
package/dist/dev/project.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import { readFile } from "node:fs/promises";
|
|
3
2
|
import { buildCompilePlan, upProject } from "../compiler/index.js";
|
|
4
3
|
import { listDeploymentRecords, normalizeDeploymentName } from "../deployment/index.js";
|
|
5
4
|
import { SpawnfileError } from "../shared/index.js";
|
|
6
5
|
import { DEV_DEPLOYMENT_LINEAGE_NAMESPACE } from "../compiler/deploymentLineage.js";
|
|
7
|
-
import {
|
|
6
|
+
import { defaultExecFile, dockerArgsForRecord, firstContainerName, runDocker } from "./docker.js";
|
|
8
7
|
const DEV_OUTPUT_DIRECTORY = ".spawn-dev";
|
|
9
|
-
export const PI_CONTROL_URL = "http://127.0.0.1:19690";
|
|
10
8
|
export const resolveDevOutputDirectory = async (inputPath, outputDirectory) => {
|
|
11
9
|
if (outputDirectory) {
|
|
12
10
|
return path.resolve(outputDirectory);
|
|
@@ -45,131 +43,6 @@ export const selectDeploymentRecord = async (outputDirectory, deploymentName) =>
|
|
|
45
43
|
}
|
|
46
44
|
return records[0].record;
|
|
47
45
|
};
|
|
48
|
-
const readJson = async (filePath) => JSON.parse(await readFile(filePath, "utf8"));
|
|
49
|
-
const rootfsPath = (outputDirectory, containerPath) => path.join(outputDirectory, "container", "rootfs", containerPath.replace(/^\/+/u, ""));
|
|
50
|
-
const matchesAgent = (agent, input) => agent.slug === input || agent.id === input || agent.name === input || agent.id === `agent:${input}`;
|
|
51
|
-
const selectPiAgent = async (compileResult, agentInput) => {
|
|
52
|
-
const instance = compileResult.report.container?.runtime_instances.find((candidate) => candidate.id === "pi-app" && ["daimon", "pi"].includes(candidate.runtime));
|
|
53
|
-
if (!instance?.config_path || !instance.workspace_path || !instance.home_path) {
|
|
54
|
-
throw new SpawnfileError("runtime_error", "Compiled output does not contain a generated Daimon runtime instance");
|
|
55
|
-
}
|
|
56
|
-
const configPath = rootfsPath(compileResult.outputDirectory, instance.config_path);
|
|
57
|
-
const config = await readJson(configPath);
|
|
58
|
-
const agent = (config.agents ?? []).find((candidate) => matchesAgent(candidate, agentInput));
|
|
59
|
-
if (!agent) {
|
|
60
|
-
throw new SpawnfileError("validation_error", `Daimon agent "${agentInput}" was not found in compiled output`);
|
|
61
|
-
}
|
|
62
|
-
return {
|
|
63
|
-
agent,
|
|
64
|
-
configPath,
|
|
65
|
-
instanceRoot: path.posix.dirname(instance.home_path),
|
|
66
|
-
remoteConfigPath: instance.config_path,
|
|
67
|
-
remoteWorkspaceRoot: `${instance.workspace_path}/agents`,
|
|
68
|
-
workspacePath: rootfsPath(compileResult.outputDirectory, `${instance.workspace_path}/agents/${agent.slug}`)
|
|
69
|
-
};
|
|
70
|
-
};
|
|
71
|
-
const selectMoltnetNodes = async (result, agent) => {
|
|
72
|
-
const nodePlans = result.report.container?.moltnet?.node_plans ?? [];
|
|
73
|
-
const matches = [];
|
|
74
|
-
for (const plan of nodePlans) {
|
|
75
|
-
const configPath = rootfsPath(result.outputDirectory, plan.config_path);
|
|
76
|
-
const config = await readJson(configPath);
|
|
77
|
-
const attachment = (config.attachments ?? []).find((candidate) => {
|
|
78
|
-
const id = candidate.agent?.id ?? "";
|
|
79
|
-
const name = candidate.agent?.name ?? "";
|
|
80
|
-
return id === agent.slug || id === agent.id || name === agent.name;
|
|
81
|
-
});
|
|
82
|
-
if (attachment?.agent?.id) {
|
|
83
|
-
matches.push({
|
|
84
|
-
configPath,
|
|
85
|
-
remotePath: plan.config_path,
|
|
86
|
-
...(attachment.moltnet?.token_path
|
|
87
|
-
? { tokenDirectory: path.posix.dirname(attachment.moltnet.token_path) }
|
|
88
|
-
: {})
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return matches;
|
|
93
|
-
};
|
|
94
|
-
const selectManagedMoltnetServers = (result) => (result.report.container?.moltnet?.server_plans ?? [])
|
|
95
|
-
.filter((plan) => plan.mode === "managed" && Boolean(plan.config_path))
|
|
96
|
-
.map((plan) => ({
|
|
97
|
-
configPath: rootfsPath(result.outputDirectory, plan.config_path),
|
|
98
|
-
remotePath: plan.config_path
|
|
99
|
-
}));
|
|
100
|
-
const shellQuote = (value) => `'${value.replaceAll("'", "'\"'\"'")}'`;
|
|
101
|
-
const listRunningPiAgents = async (dockerCommand, dockerPrefix, containerName, execFileImpl) => {
|
|
102
|
-
const stdout = await runDocker(dockerCommand, [...dockerPrefix, "exec", containerName, "curl", "-fsS", `${PI_CONTROL_URL}/spawnfile/agents`], execFileImpl);
|
|
103
|
-
const parsed = JSON.parse(stdout);
|
|
104
|
-
return parsed.agents ?? [];
|
|
105
|
-
};
|
|
106
|
-
const loadPiAgent = async (dockerCommand, dockerPrefix, containerName, slug, action, execFileImpl) => {
|
|
107
|
-
await runDocker(dockerCommand, [
|
|
108
|
-
...dockerPrefix,
|
|
109
|
-
"exec",
|
|
110
|
-
containerName,
|
|
111
|
-
"curl",
|
|
112
|
-
"-fsS",
|
|
113
|
-
"-X",
|
|
114
|
-
"POST",
|
|
115
|
-
"-H",
|
|
116
|
-
"content-type: application/json",
|
|
117
|
-
"--data",
|
|
118
|
-
JSON.stringify({ slug }),
|
|
119
|
-
`${PI_CONTROL_URL}/spawnfile/agents/${action}`
|
|
120
|
-
], execFileImpl, 120_000);
|
|
121
|
-
};
|
|
122
|
-
export const devApplyProject = async (inputPath, options) => {
|
|
123
|
-
const outputDirectory = await resolveDevOutputDirectory(inputPath, options.outputDirectory);
|
|
124
|
-
const record = await selectDeploymentRecord(outputDirectory, options.deploymentName);
|
|
125
|
-
const dockerCommand = options.dockerCommand ?? "docker";
|
|
126
|
-
const dockerPrefix = dockerArgsForRecord(record);
|
|
127
|
-
const containerName = firstContainerName(record);
|
|
128
|
-
const execFileImpl = options.execFile ?? defaultExecFile;
|
|
129
|
-
const existingAgents = await listRunningPiAgents(dockerCommand, dockerPrefix, containerName, execFileImpl);
|
|
130
|
-
const compileResult = await compileForDevApply(inputPath, outputDirectory, record, dockerCommand, execFileImpl);
|
|
131
|
-
const { agent, configPath, instanceRoot, remoteConfigPath, remoteWorkspaceRoot, workspacePath } = await selectPiAgent(compileResult, options.agent);
|
|
132
|
-
const nodes = await selectMoltnetNodes(compileResult, agent);
|
|
133
|
-
const serverConfigs = selectManagedMoltnetServers(compileResult);
|
|
134
|
-
const existingAgent = existingAgents.some((candidate) => matchesAgent(candidate, agent.slug));
|
|
135
|
-
await copyIntoContainer(dockerCommand, dockerPrefix, configPath, `${containerName}:${remoteConfigPath}`, execFileImpl);
|
|
136
|
-
await copyIntoContainer(dockerCommand, dockerPrefix, workspacePath, `${containerName}:${remoteWorkspaceRoot}`, execFileImpl);
|
|
137
|
-
for (const node of nodes) {
|
|
138
|
-
await copyIntoContainer(dockerCommand, dockerPrefix, node.configPath, `${containerName}:${node.remotePath}`, execFileImpl);
|
|
139
|
-
}
|
|
140
|
-
for (const serverConfig of serverConfigs) {
|
|
141
|
-
await copyIntoContainer(dockerCommand, dockerPrefix, serverConfig.configPath, `${containerName}:${serverConfig.remotePath}`, execFileImpl);
|
|
142
|
-
}
|
|
143
|
-
const tokenDirectories = nodes
|
|
144
|
-
.map((node) => node.tokenDirectory)
|
|
145
|
-
.filter((directory) => Boolean(directory));
|
|
146
|
-
await ensureContainerDirectories(dockerCommand, dockerPrefix, containerName, tokenDirectories, execFileImpl);
|
|
147
|
-
await chownContainerPaths(dockerCommand, dockerPrefix, containerName, [
|
|
148
|
-
instanceRoot,
|
|
149
|
-
...nodes.flatMap((node) => [
|
|
150
|
-
node.remotePath,
|
|
151
|
-
...(node.tokenDirectory ? [node.tokenDirectory] : [])
|
|
152
|
-
]),
|
|
153
|
-
...serverConfigs.map((serverConfig) => serverConfig.remotePath)
|
|
154
|
-
], execFileImpl);
|
|
155
|
-
await loadPiAgent(dockerCommand, dockerPrefix, containerName, agent.slug, options.restart === true ? "restart" : "load", execFileImpl);
|
|
156
|
-
if (!existingAgent) {
|
|
157
|
-
for (const node of nodes) {
|
|
158
|
-
const prepare = node.tokenDirectory ? `mkdir -p ${shellQuote(node.tokenDirectory)} && ` : "";
|
|
159
|
-
const command = `${prepare}/usr/local/bin/moltnet node ${shellQuote(node.remotePath)}`;
|
|
160
|
-
await runDocker(dockerCommand, [...dockerPrefix, "exec", "-d", "--user", "spawnfile", containerName, "sh", "-lc", command], execFileImpl);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return {
|
|
164
|
-
agentId: agent.id,
|
|
165
|
-
bridgeStarted: !existingAgent && nodes.length > 0,
|
|
166
|
-
containerName,
|
|
167
|
-
deploymentName: record.name,
|
|
168
|
-
existingAgent,
|
|
169
|
-
outputDirectory
|
|
170
|
-
};
|
|
171
|
-
};
|
|
172
|
-
export const devRestartProject = async (inputPath, options) => devApplyProject(inputPath, { ...options, restart: true });
|
|
173
46
|
export const devStopProject = async (inputPath, options = {}) => {
|
|
174
47
|
const outputDirectory = await resolveDevOutputDirectory(inputPath, options.outputDirectory);
|
|
175
48
|
const record = await selectDeploymentRecord(outputDirectory, options.deploymentName);
|
|
@@ -42,7 +42,7 @@ const runtimeInstanceSchema = z.object({
|
|
|
42
42
|
node_ids: z.array(z.string()),
|
|
43
43
|
published_port: portSchema.nullable(),
|
|
44
44
|
runtime: z.string().min(1),
|
|
45
|
-
// node id -> persistent mount id for per-agent telemetry; every
|
|
45
|
+
// node id -> persistent mount id for per-agent telemetry; every Daimon
|
|
46
46
|
// image this compiler builds carries it, so a strict schema without it
|
|
47
47
|
// refused image-mode `up` of the compiler's own output.
|
|
48
48
|
telemetry_mount_ids: z.record(z.string().min(1), instanceIdSchema).optional(),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { daimonGatewayBootstrapMountPath } from "../runtime/daimon/gateway.js";
|
|
1
2
|
import { DAIMON_ENGINE_DESCRIPTORS } from "../runtime/daimon/engines.js";
|
|
2
3
|
import path from "node:path";
|
|
3
4
|
import { loadImportedClaudeCodeCredential, loadImportedCodexCredential } from "../auth/index.js";
|
|
@@ -60,7 +61,7 @@ export const prepareDaimonImageAuthMounts = async (instance, environment, authPr
|
|
|
60
61
|
const source = daimonSourcePathForEngine(descriptor.id, environment, authProfile, descriptor);
|
|
61
62
|
const ownerUid = await assertSafeDaimonSourceFile(source, descriptor.id, descriptor.auth.maxCredentialBytes, descriptor);
|
|
62
63
|
assertDaimonCredentialContainerOwner(ownerUid, descriptor.id, containerCredentialUid);
|
|
63
|
-
mounts.push("-v", `${source}:${descriptor.auth.realm
|
|
64
|
+
mounts.push("-v", `${source}:${daimonGatewayBootstrapMountPath(descriptor.auth.realm)}:ro`);
|
|
64
65
|
}
|
|
65
66
|
for (const descriptor of descriptors) {
|
|
66
67
|
if (descriptor.auth.staging !== "broker-realm")
|
|
@@ -69,7 +70,7 @@ export const prepareDaimonImageAuthMounts = async (instance, environment, authPr
|
|
|
69
70
|
// do not require ownership by the eventual organization uid.
|
|
70
71
|
const source = daimonSourcePathForEngine(descriptor.id, environment, null, descriptor);
|
|
71
72
|
await assertSafeDaimonSourceFile(source, descriptor.id, descriptor.auth.maxCredentialBytes, descriptor);
|
|
72
|
-
mounts.push("-v", `${source}:${descriptor.auth.realm
|
|
73
|
+
mounts.push("-v", `${source}:${daimonGatewayBootstrapMountPath(descriptor.auth.realm)}:ro`);
|
|
73
74
|
}
|
|
74
75
|
for (const descriptor of descriptors) {
|
|
75
76
|
if (descriptor.auth.staging !== "secret-service")
|
|
@@ -31,7 +31,8 @@ const orderModelTarget = (target) => {
|
|
|
31
31
|
["provider", target.provider],
|
|
32
32
|
["name", target.name],
|
|
33
33
|
["auth", orderModelEntryAuth(target.auth)],
|
|
34
|
-
["endpoint", target.endpoint]
|
|
34
|
+
["endpoint", target.endpoint],
|
|
35
|
+
["reasoning_effort", target.reasoning_effort]
|
|
35
36
|
]);
|
|
36
37
|
};
|
|
37
38
|
const orderExecution = (execution) => {
|