spawnfile 0.1.33 → 0.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/auth/trainingAuth.d.ts +2 -5
- package/dist/cli/devCommands.d.ts +1 -1
- package/dist/cli/devCommands.js +0 -66
- package/dist/cli/runCli.d.ts +1 -4
- package/dist/cli/runCli.js +2 -2
- package/dist/cli/trainCommand.js +9 -15
- package/dist/cli/trainingBooted.d.ts +7 -0
- package/dist/cli/trainingBooted.js +41 -0
- package/dist/cli/trainingExecution.d.ts +4 -7
- package/dist/cli/trainingExecution.js +4 -32
- package/dist/compiler/containerArtifacts.js +0 -5
- package/dist/compiler/containerBackedMountRender.js +5 -1
- package/dist/compiler/containerDaimonBrokerRender.d.ts +5 -50
- package/dist/compiler/containerDaimonBrokerRender.js +7 -88
- package/dist/compiler/containerDaimonGatewayRender.d.ts +50 -0
- package/dist/compiler/containerDaimonGatewayRender.js +157 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +2 -10
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +13 -25
- package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +11 -49
- package/dist/compiler/containerDaimonGrokWorkerRender.js +15 -39
- package/dist/compiler/containerDaimonStartupSupervision.d.ts +8 -0
- package/dist/compiler/containerDaimonStartupSupervision.js +39 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +1 -2
- package/dist/compiler/containerDaimonUidEntrypointRender.js +26 -46
- package/dist/compiler/containerRuntimeReadinessRender.js +1 -1
- package/dist/compiler/memoryArtifacts.js +0 -1
- package/dist/compiler/moltnetArtifacts.js +1 -17
- package/dist/compiler/moltnetClientConfig.js +1 -1
- package/dist/compiler/moltnetRuntimeConfig.js +0 -10
- package/dist/compiler/runProject.d.ts +1 -0
- package/dist/compiler/runProject.js +9 -3
- package/dist/compiler/runProjectAuth.js +2 -17
- package/dist/compiler/training/contract.d.ts +0 -2
- package/dist/compiler/training/contract.js +0 -2
- package/dist/compiler/training/execution.d.ts +1 -128
- package/dist/compiler/training/execution.js +7 -68
- package/dist/compiler/training/index.d.ts +0 -8
- package/dist/compiler/training/index.js +0 -7
- package/dist/compiler/training/output.d.ts +1 -0
- package/dist/compiler/training/output.js +1 -1
- package/dist/compiler/training/trial/boot.d.ts +53 -0
- package/dist/compiler/training/trial/boot.js +147 -0
- package/dist/compiler/training/trial/docker.d.ts +8 -0
- package/dist/compiler/training/trial/docker.js +22 -0
- package/dist/compiler/training/trial/gateway.d.ts +42 -0
- package/dist/compiler/training/trial/gateway.js +98 -0
- package/dist/compiler/training/trial/index.d.ts +4 -0
- package/dist/compiler/training/trial/index.js +4 -0
- package/dist/compiler/training/trial/launcher.d.ts +32 -0
- package/dist/compiler/training/trial/launcher.js +49 -0
- package/dist/compiler/training/trial/project.d.ts +11 -0
- package/dist/compiler/training/trial/project.js +31 -0
- package/dist/compiler/upReceipt.d.ts +2 -17
- package/dist/compiler/upReceipt.js +2 -17
- package/dist/deployment/artifactsExportPlan.js +2 -18
- package/dist/deployment/privateArtifactsExport.js +1 -1
- package/dist/dev/docker.d.ts +0 -5
- package/dist/dev/docker.js +0 -46
- package/dist/dev/index.d.ts +0 -1
- package/dist/dev/index.js +0 -1
- package/dist/dev/project.d.ts +0 -16
- package/dist/dev/project.js +1 -128
- package/dist/distribution/distributionReportSchema.js +1 -1
- package/dist/distribution/imageRuntimeAuth.js +3 -2
- package/dist/release/drainControl.d.ts +5 -19
- package/dist/release/drainControl.js +12 -67
- package/dist/report/types.d.ts +3 -6
- package/dist/runtime/common.d.ts +1 -1
- package/dist/runtime/common.js +1 -1
- package/dist/runtime/container.d.ts +2 -2
- package/dist/runtime/container.js +1 -39
- package/dist/runtime/daimon/config.js +6 -12
- package/dist/runtime/daimon/contractManifest.js +0 -1
- package/dist/runtime/daimon/contractManifestSchema.js +0 -1
- package/dist/runtime/daimon/control.d.ts +31 -0
- package/dist/runtime/daimon/control.js +83 -0
- package/dist/runtime/daimon/engineDescriptorSchema.js +0 -1
- package/dist/runtime/daimon/engineDescriptors.generated.d.ts +1 -1
- package/dist/runtime/daimon/engineDescriptors.generated.js +1 -2
- package/dist/runtime/daimon/engines.js +0 -1
- package/dist/runtime/daimon/gateway.d.ts +62 -0
- package/dist/runtime/daimon/gateway.js +77 -0
- package/dist/runtime/daimon/grokWorkerContract.d.ts +0 -5
- package/dist/runtime/daimon/grokWorkerContract.js +1 -13
- package/dist/runtime/daimon/index.d.ts +2 -0
- package/dist/runtime/daimon/index.js +2 -1
- package/dist/runtime/daimon/memory.js +1 -1
- package/dist/runtime/daimon/packageName.js +0 -1
- package/dist/runtime/daimon/runAuth.js +7 -4
- package/dist/runtime/daimon/runtimeIdentity.d.ts +2 -0
- package/dist/runtime/daimon/runtimeIdentity.js +2 -0
- package/dist/runtime/daimon/subscriptionRealms.d.ts +9 -3
- package/dist/runtime/daimon/subscriptionRealms.js +22 -13
- package/dist/runtime/daimon/testHelpers.d.ts +2 -0
- package/dist/runtime/{pi → daimon}/testHelpers.js +3 -3
- package/dist/runtime/daimon/training/booted/adapter.d.ts +46 -0
- package/dist/runtime/daimon/training/booted/adapter.js +59 -0
- package/dist/runtime/daimon/training/booted/adapter.js.map +1 -0
- package/dist/runtime/daimon/training/booted/index.d.ts +2 -0
- package/dist/runtime/daimon/training/booted/index.js +2 -0
- package/dist/runtime/daimon/training/booted/index.js.map +1 -0
- package/dist/runtime/daimon/training/index.d.ts +5 -0
- package/dist/runtime/daimon/training/index.js +8 -4
- package/dist/runtime/daimon/training/index.js.map +1 -1
- package/dist/runtime/daimon/training/providers/codex-subscription/index.js.map +1 -0
- package/dist/runtime/daimon/training/providers/codex-subscription/protocol.js.map +1 -0
- package/dist/runtime/daimon/training/providers/codex-subscription/provider.js.map +1 -0
- package/dist/runtime/daimon/training/providers/codex-subscription/strict-schema.js.map +1 -0
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.d.ts +1 -3
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.js +5 -5
- package/dist/runtime/daimon/training/providers/grok-subscription/cli.js.map +1 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/index.d.ts +1 -2
- package/dist/runtime/daimon/training/providers/grok-subscription/index.js +0 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/index.js.map +1 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.d.ts +5 -17
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js +18 -31
- package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js.map +1 -1
- package/dist/runtime/daimon/training/providers/grok-subscription/provider.js +1 -2
- package/dist/runtime/daimon/training/providers/grok-subscription/provider.js.map +1 -1
- package/dist/runtime/daimon/wakeMoments.js +0 -1
- package/dist/runtime/install.js +0 -21
- package/dist/runtime/registry.js +0 -2
- package/dist/runtime/trainingGraderProviders.js +1 -1
- package/dist/runtime/trainingProviders.d.ts +1 -2
- package/dist/runtime/trainingProviders.js +9 -19
- package/dist/runtime/trainingSubjects.d.ts +0 -121
- package/dist/runtime/trainingSubjects.js +2 -13
- package/dist/runtime/types.d.ts +1 -8
- package/dist/shared/errors.js +0 -1
- package/dist/status/lifecycleProbes.js +3 -6
- package/dist/status/moltnetWiringProbes.js +1 -17
- package/dist/training/subjects/index.d.ts +0 -1
- package/dist/training/subjects/index.js +0 -1
- package/dist/training/subjects/index.js.map +1 -1
- package/examples/README.md +0 -1
- package/examples/daimon-org/agents/mapper/Spawnfile +4 -1
- package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +4 -1
- package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +1 -1
- package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +5 -8
- package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +1 -1
- package/examples/mixed-runtime-org/agents/localist/Spawnfile +7 -7
- package/package.json +4 -13
- package/runtimes.yaml +5 -15
- package/dist/compiler/containerDaimonGrokTaskClock.d.ts +0 -5
- package/dist/compiler/containerDaimonGrokTaskClock.js +0 -29
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +0 -22
- package/dist/compiler/daimonTelemetryArtifacts.js +0 -56
- package/dist/compiler/training/broker/clockProbe.d.ts +0 -6
- package/dist/compiler/training/broker/clockProbe.js +0 -27
- package/dist/compiler/training/broker/declaration.d.ts +0 -54
- package/dist/compiler/training/broker/declaration.js +0 -70
- package/dist/compiler/training/broker/entrypoint.d.ts +0 -39
- package/dist/compiler/training/broker/entrypoint.js +0 -124
- package/dist/compiler/training/broker/evaluatorSecrets.d.ts +0 -2
- package/dist/compiler/training/broker/evaluatorSecrets.js +0 -62
- package/dist/compiler/training/broker/index.d.ts +0 -12
- package/dist/compiler/training/broker/index.js +0 -12
- package/dist/compiler/training/broker/main.d.ts +0 -2
- package/dist/compiler/training/broker/main.js +0 -14
- package/dist/compiler/training/broker/paths.d.ts +0 -236
- package/dist/compiler/training/broker/paths.js +0 -249
- package/dist/compiler/training/broker/processes.d.ts +0 -51
- package/dist/compiler/training/broker/processes.js +0 -102
- package/dist/compiler/training/broker/projection.d.ts +0 -61
- package/dist/compiler/training/broker/projection.js +0 -109
- package/dist/compiler/training/broker/provisioning.d.ts +0 -78
- package/dist/compiler/training/broker/provisioning.js +0 -231
- package/dist/compiler/training/broker/receipt.d.ts +0 -77
- package/dist/compiler/training/broker/receipt.js +0 -110
- package/dist/compiler/training/broker/recycleClient.d.ts +0 -33
- package/dist/compiler/training/broker/recycleClient.js +0 -112
- package/dist/compiler/training/broker/registration.d.ts +0 -46
- package/dist/compiler/training/broker/registration.js +0 -113
- package/dist/compiler/training/broker/reset.d.ts +0 -9
- package/dist/compiler/training/broker/reset.js +0 -71
- package/dist/compiler/training/broker/rootScript.d.ts +0 -32
- package/dist/compiler/training/broker/rootScript.js +0 -33
- package/dist/compiler/training/broker/runtime.d.ts +0 -22
- package/dist/compiler/training/broker/runtime.js +0 -128
- package/dist/compiler/training/broker/seccompRoutes.d.ts +0 -31
- package/dist/compiler/training/broker/seccompRoutes.js +0 -36
- package/dist/compiler/training/broker/supervisor.d.ts +0 -108
- package/dist/compiler/training/broker/supervisor.js +0 -172
- package/dist/compiler/training/broker/taskClock.d.ts +0 -5
- package/dist/compiler/training/broker/taskClock.js +0 -41
- package/dist/compiler/training/container/contract.d.ts +0 -54
- package/dist/compiler/training/container/contract.js +0 -52
- package/dist/compiler/training/container/evaluators.d.ts +0 -48
- package/dist/compiler/training/container/evaluators.js +0 -50
- package/dist/compiler/training/container/grokWriteback.d.ts +0 -8
- package/dist/compiler/training/container/grokWriteback.js +0 -26
- package/dist/compiler/training/container/index.d.ts +0 -5
- package/dist/compiler/training/container/index.js +0 -3
- package/dist/compiler/training/container/launch.d.ts +0 -21
- package/dist/compiler/training/container/launch.js +0 -280
- package/dist/compiler/training/container/nativeSlots.d.ts +0 -14
- package/dist/compiler/training/container/nativeSlots.js +0 -13
- package/dist/compiler/training/container/outputCopy.d.ts +0 -2
- package/dist/compiler/training/container/outputCopy.js +0 -72
- package/dist/compiler/training/container/outputVolume.d.ts +0 -28
- package/dist/compiler/training/container/outputVolume.js +0 -185
- package/dist/compiler/training/container/prepare.d.ts +0 -10
- package/dist/compiler/training/container/prepare.js +0 -125
- package/dist/compiler/training/container/process.d.ts +0 -14
- package/dist/compiler/training/container/process.js +0 -70
- package/dist/compiler/training/container/security.d.ts +0 -38
- package/dist/compiler/training/container/security.js +0 -68
- package/dist/compiler/training/container/subjectIsolation.d.ts +0 -5
- package/dist/compiler/training/container/subjectIsolation.js +0 -16
- package/dist/compiler/training/preparation/assets/Dockerfile +0 -100
- package/dist/compiler/training/preparation/assets/package-lock.json +0 -5483
- package/dist/compiler/training/preparation/broker.d.ts +0 -30
- package/dist/compiler/training/preparation/broker.js +0 -68
- package/dist/compiler/training/preparation/contextModes.d.ts +0 -12
- package/dist/compiler/training/preparation/contextModes.js +0 -38
- package/dist/compiler/training/preparation/contract.d.ts +0 -203
- package/dist/compiler/training/preparation/contract.js +0 -114
- package/dist/compiler/training/preparation/copyAssets.d.ts +0 -1
- package/dist/compiler/training/preparation/copyAssets.js +0 -8
- package/dist/compiler/training/preparation/daimonParent.d.ts +0 -42
- package/dist/compiler/training/preparation/daimonParent.js +0 -114
- package/dist/compiler/training/preparation/files.d.ts +0 -29
- package/dist/compiler/training/preparation/files.js +0 -146
- package/dist/compiler/training/preparation/image.d.ts +0 -28
- package/dist/compiler/training/preparation/image.js +0 -105
- package/dist/compiler/training/preparation/index.d.ts +0 -3
- package/dist/compiler/training/preparation/index.js +0 -2
- package/dist/compiler/training/preparation/inputs.d.ts +0 -24
- package/dist/compiler/training/preparation/inputs.js +0 -101
- package/dist/compiler/training/preparation/prepare.d.ts +0 -38
- package/dist/compiler/training/preparation/prepare.js +0 -224
- package/dist/compiler/training/preparation/scratch.d.ts +0 -8
- package/dist/compiler/training/preparation/scratch.js +0 -114
- package/dist/compiler/training/repair/compatibility.d.ts +0 -11
- package/dist/compiler/training/repair/compatibility.js +0 -45
- package/dist/compiler/training/repair/contract.d.ts +0 -832
- package/dist/compiler/training/repair/contract.js +0 -34
- package/dist/compiler/training/repair/index.d.ts +0 -3
- package/dist/compiler/training/repair/index.js +0 -3
- package/dist/compiler/training/repair/prepare.d.ts +0 -378
- package/dist/compiler/training/repair/prepare.js +0 -84
- package/dist/compiler/training/repair/witness.d.ts +0 -348
- package/dist/compiler/training/repair/witness.js +0 -62
- package/dist/compiler/training/subjectDeclaration.d.ts +0 -26
- package/dist/compiler/training/subjectDeclaration.js +0 -54
- package/dist/compiler/training/subjectLease.d.ts +0 -115
- package/dist/compiler/training/subjectLease.js +0 -179
- package/dist/dev/activity.d.ts +0 -14
- package/dist/dev/activity.js +0 -48
- package/dist/runtime/codex-exec/training/adapter.d.ts +0 -13
- package/dist/runtime/codex-exec/training/adapter.js +0 -101
- package/dist/runtime/codex-exec/training/adapter.js.map +0 -1
- package/dist/runtime/codex-exec/training/environment.d.ts +0 -3
- package/dist/runtime/codex-exec/training/environment.js +0 -26
- package/dist/runtime/codex-exec/training/environment.js.map +0 -1
- package/dist/runtime/codex-exec/training/index.d.ts +0 -2
- package/dist/runtime/codex-exec/training/index.js +0 -3
- package/dist/runtime/codex-exec/training/index.js.map +0 -1
- package/dist/runtime/codex-exec/training/protocol.d.ts +0 -15
- package/dist/runtime/codex-exec/training/protocol.js +0 -102
- package/dist/runtime/codex-exec/training/protocol.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/index.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.js.map +0 -1
- package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.js.map +0 -1
- package/dist/runtime/daimon/contractManifest.js.map +0 -1
- package/dist/runtime/daimon/contractManifestSchema.js.map +0 -1
- package/dist/runtime/daimon/engineDescriptorSchema.js.map +0 -1
- package/dist/runtime/daimon/engineDescriptors.generated.js.map +0 -1
- package/dist/runtime/daimon/engines.js.map +0 -1
- package/dist/runtime/daimon/index.js.map +0 -1
- package/dist/runtime/daimon/packageName.js.map +0 -1
- package/dist/runtime/daimon/training/legacy/adapter.d.ts +0 -11
- package/dist/runtime/daimon/training/legacy/adapter.js +0 -175
- package/dist/runtime/daimon/training/legacy/adapter.js.map +0 -1
- package/dist/runtime/daimon/training/legacy/index.d.ts +0 -2
- package/dist/runtime/daimon/training/legacy/index.js +0 -3
- package/dist/runtime/daimon/training/legacy/index.js.map +0 -1
- package/dist/runtime/daimon/training/legacy/public.d.ts +0 -49
- package/dist/runtime/daimon/training/legacy/public.js +0 -16
- package/dist/runtime/daimon/training/legacy/public.js.map +0 -1
- package/dist/runtime/daimon/training/native/adapter.d.ts +0 -18
- package/dist/runtime/daimon/training/native/adapter.js +0 -252
- package/dist/runtime/daimon/training/native/adapter.js.map +0 -1
- package/dist/runtime/daimon/training/native/admission.d.ts +0 -7
- package/dist/runtime/daimon/training/native/admission.js +0 -52
- package/dist/runtime/daimon/training/native/admission.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/arguments.d.ts +0 -16
- package/dist/runtime/daimon/training/native/child/arguments.js +0 -70
- package/dist/runtime/daimon/training/native/child/arguments.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/deferred-trial.d.ts +0 -24
- package/dist/runtime/daimon/training/native/child/deferred-trial.js +0 -63
- package/dist/runtime/daimon/training/native/child/deferred-trial.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/diagnostics.d.ts +0 -58
- package/dist/runtime/daimon/training/native/child/diagnostics.js +0 -215
- package/dist/runtime/daimon/training/native/child/diagnostics.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/fixture.d.ts +0 -16
- package/dist/runtime/daimon/training/native/child/fixture.js +0 -159
- package/dist/runtime/daimon/training/native/child/fixture.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/grok.d.ts +0 -14
- package/dist/runtime/daimon/training/native/child/grok.js +0 -47
- package/dist/runtime/daimon/training/native/child/grok.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/index.d.ts +0 -7
- package/dist/runtime/daimon/training/native/child/index.js +0 -5
- package/dist/runtime/daimon/training/native/child/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/lifecycle.d.ts +0 -40
- package/dist/runtime/daimon/training/native/child/lifecycle.js +0 -400
- package/dist/runtime/daimon/training/native/child/lifecycle.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/probe.d.ts +0 -2
- package/dist/runtime/daimon/training/native/child/probe.js +0 -11
- package/dist/runtime/daimon/training/native/child/probe.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/sandbox.d.ts +0 -4
- package/dist/runtime/daimon/training/native/child/sandbox.js +0 -76
- package/dist/runtime/daimon/training/native/child/sandbox.js.map +0 -1
- package/dist/runtime/daimon/training/native/child/types.d.ts +0 -15
- package/dist/runtime/daimon/training/native/child/types.js +0 -2
- package/dist/runtime/daimon/training/native/child/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/docker.d.ts +0 -29
- package/dist/runtime/daimon/training/native/container/docker.js +0 -105
- package/dist/runtime/daimon/training/native/container/docker.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/grok-slot.d.ts +0 -22
- package/dist/runtime/daimon/training/native/container/grok-slot.js +0 -38
- package/dist/runtime/daimon/training/native/container/grok-slot.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/index.d.ts +0 -6
- package/dist/runtime/daimon/training/native/container/index.js +0 -6
- package/dist/runtime/daimon/training/native/container/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/lifecycle.d.ts +0 -8
- package/dist/runtime/daimon/training/native/container/lifecycle.js +0 -111
- package/dist/runtime/daimon/training/native/container/lifecycle.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/manifest.d.ts +0 -17
- package/dist/runtime/daimon/training/native/container/manifest.js +0 -164
- package/dist/runtime/daimon/training/native/container/manifest.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/native-preflight.d.ts +0 -8
- package/dist/runtime/daimon/training/native/container/native-preflight.js +0 -40
- package/dist/runtime/daimon/training/native/container/native-preflight.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/preflight.d.ts +0 -15
- package/dist/runtime/daimon/training/native/container/preflight.js +0 -79
- package/dist/runtime/daimon/training/native/container/preflight.js.map +0 -1
- package/dist/runtime/daimon/training/native/container/slot.d.ts +0 -4
- package/dist/runtime/daimon/training/native/container/slot.js +0 -58
- package/dist/runtime/daimon/training/native/container/slot.js.map +0 -1
- package/dist/runtime/daimon/training/native/external.d.ts +0 -37
- package/dist/runtime/daimon/training/native/external.js +0 -75
- package/dist/runtime/daimon/training/native/external.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/authority.d.ts +0 -36
- package/dist/runtime/daimon/training/native/grants/authority.js +0 -49
- package/dist/runtime/daimon/training/native/grants/authority.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/index.d.ts +0 -2
- package/dist/runtime/daimon/training/native/grants/index.js +0 -3
- package/dist/runtime/daimon/training/native/grants/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/pins.d.ts +0 -30
- package/dist/runtime/daimon/training/native/grants/pins.js +0 -20
- package/dist/runtime/daimon/training/native/grants/pins.js.map +0 -1
- package/dist/runtime/daimon/training/native/grants/test-socket.d.ts +0 -6
- package/dist/runtime/daimon/training/native/grants/test-socket.js +0 -35
- package/dist/runtime/daimon/training/native/grants/test-socket.js.map +0 -1
- package/dist/runtime/daimon/training/native/grok-fixtures.d.ts +0 -34
- package/dist/runtime/daimon/training/native/grok-fixtures.js +0 -179
- package/dist/runtime/daimon/training/native/grok-fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/native/index.d.ts +0 -38
- package/dist/runtime/daimon/training/native/index.js +0 -27
- package/dist/runtime/daimon/training/native/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/live-checkout.d.ts +0 -2
- package/dist/runtime/daimon/training/native/live-checkout.js +0 -15
- package/dist/runtime/daimon/training/native/live-checkout.js.map +0 -1
- package/dist/runtime/daimon/training/native/observations.d.ts +0 -51
- package/dist/runtime/daimon/training/native/observations.js +0 -217
- package/dist/runtime/daimon/training/native/observations.js.map +0 -1
- package/dist/runtime/daimon/training/native/outcome.d.ts +0 -13
- package/dist/runtime/daimon/training/native/outcome.js +0 -37
- package/dist/runtime/daimon/training/native/outcome.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/engine-config.d.ts +0 -21
- package/dist/runtime/daimon/training/native/preparation/engine-config.js +0 -30
- package/dist/runtime/daimon/training/native/preparation/engine-config.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/fixtures.d.ts +0 -17
- package/dist/runtime/daimon/training/native/preparation/fixtures.js +0 -52
- package/dist/runtime/daimon/training/native/preparation/fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/index.d.ts +0 -7
- package/dist/runtime/daimon/training/native/preparation/index.js +0 -5
- package/dist/runtime/daimon/training/native/preparation/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/layout.d.ts +0 -66
- package/dist/runtime/daimon/training/native/preparation/layout.js +0 -87
- package/dist/runtime/daimon/training/native/preparation/layout.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/subject.d.ts +0 -14
- package/dist/runtime/daimon/training/native/preparation/subject.js +0 -67
- package/dist/runtime/daimon/training/native/preparation/subject.js.map +0 -1
- package/dist/runtime/daimon/training/native/preparation/types.d.ts +0 -69
- package/dist/runtime/daimon/training/native/preparation/types.js +0 -2
- package/dist/runtime/daimon/training/native/preparation/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/artifacts.d.ts +0 -25
- package/dist/runtime/daimon/training/native/receipt/artifacts.js +0 -32
- package/dist/runtime/daimon/training/native/receipt/artifacts.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.d.ts +0 -129
- package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js +0 -45
- package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/grok.d.ts +0 -246
- package/dist/runtime/daimon/training/native/receipt/grok.js +0 -195
- package/dist/runtime/daimon/training/native/receipt/grok.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/index.d.ts +0 -11
- package/dist/runtime/daimon/training/native/receipt/index.js +0 -8
- package/dist/runtime/daimon/training/native/receipt/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/paths.d.ts +0 -3
- package/dist/runtime/daimon/training/native/receipt/paths.js +0 -18
- package/dist/runtime/daimon/training/native/receipt/paths.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/sandbox.d.ts +0 -42
- package/dist/runtime/daimon/training/native/receipt/sandbox.js +0 -35
- package/dist/runtime/daimon/training/native/receipt/sandbox.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/schema.d.ts +0 -490
- package/dist/runtime/daimon/training/native/receipt/schema.js +0 -138
- package/dist/runtime/daimon/training/native/receipt/schema.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/subscription.d.ts +0 -13
- package/dist/runtime/daimon/training/native/receipt/subscription.js +0 -13
- package/dist/runtime/daimon/training/native/receipt/subscription.js.map +0 -1
- package/dist/runtime/daimon/training/native/receipt/task-clock.d.ts +0 -19
- package/dist/runtime/daimon/training/native/receipt/task-clock.js +0 -49
- package/dist/runtime/daimon/training/native/receipt/task-clock.js.map +0 -1
- package/dist/runtime/daimon/training/native/sealed-usage.d.ts +0 -218
- package/dist/runtime/daimon/training/native/sealed-usage.js +0 -261
- package/dist/runtime/daimon/training/native/sealed-usage.js.map +0 -1
- package/dist/runtime/daimon/training/native/test-fixtures.d.ts +0 -27
- package/dist/runtime/daimon/training/native/test-fixtures.js +0 -162
- package/dist/runtime/daimon/training/native/test-fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/native/transcript.d.ts +0 -96
- package/dist/runtime/daimon/training/native/transcript.js +0 -239
- package/dist/runtime/daimon/training/native/transcript.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/delivery.d.ts +0 -27
- package/dist/runtime/daimon/training/native/transport/delivery.js +0 -98
- package/dist/runtime/daimon/training/native/transport/delivery.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/http.d.ts +0 -3
- package/dist/runtime/daimon/training/native/transport/http.js +0 -81
- package/dist/runtime/daimon/training/native/transport/http.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/index.d.ts +0 -4
- package/dist/runtime/daimon/training/native/transport/index.js +0 -3
- package/dist/runtime/daimon/training/native/transport/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/transport/types.d.ts +0 -15
- package/dist/runtime/daimon/training/native/transport/types.js +0 -2
- package/dist/runtime/daimon/training/native/transport/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/cli.d.ts +0 -1
- package/dist/runtime/daimon/training/native/worker/cli.js +0 -17
- package/dist/runtime/daimon/training/native/worker/cli.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/control.d.ts +0 -20
- package/dist/runtime/daimon/training/native/worker/control.js +0 -266
- package/dist/runtime/daimon/training/native/worker/control.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/deliveries.d.ts +0 -38
- package/dist/runtime/daimon/training/native/worker/deliveries.js +0 -91
- package/dist/runtime/daimon/training/native/worker/deliveries.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/collect.d.ts +0 -54
- package/dist/runtime/daimon/training/native/worker/evidence/collect.js +0 -278
- package/dist/runtime/daimon/training/native/worker/evidence/collect.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/execution.d.ts +0 -102
- package/dist/runtime/daimon/training/native/worker/evidence/execution.js +0 -191
- package/dist/runtime/daimon/training/native/worker/evidence/execution.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/index.d.ts +0 -3
- package/dist/runtime/daimon/training/native/worker/evidence/index.js +0 -4
- package/dist/runtime/daimon/training/native/worker/evidence/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/io.d.ts +0 -20
- package/dist/runtime/daimon/training/native/worker/evidence/io.js +0 -130
- package/dist/runtime/daimon/training/native/worker/evidence/io.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/evidence/seal.d.ts +0 -3
- package/dist/runtime/daimon/training/native/worker/evidence/seal.js +0 -67
- package/dist/runtime/daimon/training/native/worker/evidence/seal.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/index.d.ts +0 -11
- package/dist/runtime/daimon/training/native/worker/index.js +0 -8
- package/dist/runtime/daimon/training/native/worker/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/profile.d.ts +0 -23
- package/dist/runtime/daimon/training/native/worker/profile.js +0 -149
- package/dist/runtime/daimon/training/native/worker/profile.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/public.d.ts +0 -53
- package/dist/runtime/daimon/training/native/worker/public.js +0 -22
- package/dist/runtime/daimon/training/native/worker/public.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/sandbox.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/sandbox.js +0 -54
- package/dist/runtime/daimon/training/native/worker/sandbox.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/server.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/server.js +0 -102
- package/dist/runtime/daimon/training/native/worker/server.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/types.d.ts +0 -318
- package/dist/runtime/daimon/training/native/worker/types.js +0 -2
- package/dist/runtime/daimon/training/native/worker/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/index.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js +0 -4
- package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/source.d.ts +0 -3
- package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js +0 -16
- package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.d.ts +0 -4
- package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js +0 -52
- package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.d.ts +0 -21
- package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js +0 -198
- package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/wake-delivery/types.d.ts +0 -91
- package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js +0 -2
- package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js.map +0 -1
- package/dist/runtime/daimon/training/native/worker/worker.d.ts +0 -1
- package/dist/runtime/daimon/training/native/worker/worker.js +0 -105
- package/dist/runtime/daimon/training/native/worker/worker.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/broker.d.ts +0 -20
- package/dist/runtime/daimon/training/providers/grok-broker/broker.js +0 -55
- package/dist/runtime/daimon/training/providers/grok-broker/broker.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.d.ts +0 -15
- package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js +0 -29
- package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-home.d.ts +0 -16
- package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js +0 -60
- package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.d.ts +0 -81
- package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js +0 -221
- package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.d.ts +0 -31
- package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js +0 -78
- package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/grants.d.ts +0 -63
- package/dist/runtime/daimon/training/providers/grok-broker/grants.js +0 -20
- package/dist/runtime/daimon/training/providers/grok-broker/grants.js.map +0 -1
- package/dist/runtime/daimon/training/providers/grok-broker/index.d.ts +0 -3
- package/dist/runtime/daimon/training/providers/grok-broker/index.js +0 -4
- package/dist/runtime/daimon/training/providers/grok-broker/index.js.map +0 -1
- package/dist/runtime/daimon/training/public.d.ts +0 -6
- package/dist/runtime/daimon/training/public.js +0 -5
- package/dist/runtime/daimon/training/public.js.map +0 -1
- package/dist/runtime/daimon/training/services/account-lease.d.ts +0 -7
- package/dist/runtime/daimon/training/services/account-lease.js +0 -76
- package/dist/runtime/daimon/training/services/account-lease.js.map +0 -1
- package/dist/runtime/daimon/training/services/freshness.d.ts +0 -15
- package/dist/runtime/daimon/training/services/freshness.js +0 -19
- package/dist/runtime/daimon/training/services/freshness.js.map +0 -1
- package/dist/runtime/daimon/training/services/index.d.ts +0 -4
- package/dist/runtime/daimon/training/services/index.js +0 -4
- package/dist/runtime/daimon/training/services/index.js.map +0 -1
- package/dist/runtime/daimon/training/services/slot-freshness.d.ts +0 -34
- package/dist/runtime/daimon/training/services/slot-freshness.js +0 -178
- package/dist/runtime/daimon/training/services/slot-freshness.js.map +0 -1
- package/dist/runtime/daimon/wakeMoments.js.map +0 -1
- package/dist/runtime/pi/adapter.d.ts +0 -3
- package/dist/runtime/pi/adapter.js +0 -230
- package/dist/runtime/pi/appActivitySource.d.ts +0 -1
- package/dist/runtime/pi/appActivitySource.js +0 -199
- package/dist/runtime/pi/appAgentConfig.d.ts +0 -11
- package/dist/runtime/pi/appAgentConfig.js +0 -264
- package/dist/runtime/pi/appCliEnginesSource.d.ts +0 -1
- package/dist/runtime/pi/appCliEnginesSource.js +0 -183
- package/dist/runtime/pi/appCliSource.d.ts +0 -1
- package/dist/runtime/pi/appCliSource.js +0 -353
- package/dist/runtime/pi/appControlSource.d.ts +0 -1
- package/dist/runtime/pi/appControlSource.js +0 -390
- package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +0 -1
- package/dist/runtime/pi/appControlWakeIdentitySource.js +0 -19
- package/dist/runtime/pi/appCoreSource.d.ts +0 -4
- package/dist/runtime/pi/appCoreSource.js +0 -244
- package/dist/runtime/pi/appPreludeSource.d.ts +0 -1
- package/dist/runtime/pi/appPreludeSource.js +0 -192
- package/dist/runtime/pi/appScheduleSource.d.ts +0 -1
- package/dist/runtime/pi/appScheduleSource.js +0 -84
- package/dist/runtime/pi/appScriptedEngine.d.ts +0 -31
- package/dist/runtime/pi/appScriptedEngine.js +0 -42
- package/dist/runtime/pi/appSource.d.ts +0 -4
- package/dist/runtime/pi/appSource.js +0 -12
- package/dist/runtime/pi/appTemplate.d.ts +0 -14
- package/dist/runtime/pi/appTemplate.js +0 -28
- package/dist/runtime/pi/appTemplateTypes.d.ts +0 -64
- package/dist/runtime/pi/appTemplateTypes.js +0 -18
- package/dist/runtime/pi/appWakeContextSource.d.ts +0 -1
- package/dist/runtime/pi/appWakeContextSource.js +0 -398
- package/dist/runtime/pi/containerTargets.d.ts +0 -4
- package/dist/runtime/pi/containerTargets.js +0 -63
- package/dist/runtime/pi/runAuth.d.ts +0 -2
- package/dist/runtime/pi/runAuth.js +0 -185
- package/dist/runtime/pi/testHelpers.d.ts +0 -2
- package/dist/shared/errors.js.map +0 -1
- package/dist/training/subjects/environment.d.ts +0 -2
- package/dist/training/subjects/environment.js +0 -14
- package/dist/training/subjects/environment.js.map +0 -1
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/index.d.ts +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/index.js +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/protocol.d.ts +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/protocol.js +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/provider.d.ts +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/provider.js +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/strict-schema.d.ts +0 -0
- /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/strict-schema.js +0 -0
|
@@ -2,13 +2,6 @@ export * from "./contract.js";
|
|
|
2
2
|
export * from "./context.js";
|
|
3
3
|
export * from "./plan/index.js";
|
|
4
4
|
export * from "./rewind/index.js";
|
|
5
|
-
export { parseTrainingMappedPreparation, trainingPreparationSchema } from "./preparation/contract.js";
|
|
6
|
-
export { prepareTrainingEvaluators } from "./container/evaluators.js";
|
|
7
|
-
export { TRAINING_SLOTS_FILE, TRAINING_SLOTS_VERSION, trainingSlotPaths, trainingSlotDescriptors, trainingSlotsDocument } from "./broker/paths.js";
|
|
8
5
|
export * from "./execution.js";
|
|
9
6
|
export * from "./moments.js";
|
|
10
7
|
export * from "./compiledAgent.js";
|
|
11
|
-
export { TRAINING_FAKETIME_LIBRARY_PATH } from "./container/contract.js";
|
|
12
|
-
export * from "./subjectLease.js";
|
|
13
|
-
export * from "./subjectDeclaration.js";
|
|
14
|
-
export { recycleTrainingSlot } from "./broker/recycleClient.js";
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
+
export declare const within: (root: string, file: string) => boolean;
|
|
1
2
|
/** Durable default namespace disjoint from every declared input, even a project ancestor. */
|
|
2
3
|
export declare const defaultTrainingOutputRoot: (projectRoot: string, inputs?: readonly string[]) => string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
|
|
3
|
+
export const within = (root, file) => file === root || file.startsWith(root + path.sep);
|
|
4
4
|
/** Durable default namespace disjoint from every declared input, even a project ancestor. */
|
|
5
5
|
export const defaultTrainingOutputRoot = (projectRoot, inputs = []) => {
|
|
6
6
|
const sources = [projectRoot, ...inputs].map(source => path.resolve(source));
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type DaimonControlCall } from "../../../runtime/daimon/control.js";
|
|
2
|
+
import { type UsageRecord } from "../../../runtime/usageLedger.js";
|
|
3
|
+
import { type TrialDocker } from "./docker.js";
|
|
4
|
+
import type { TrainingGatewayAccess } from "./gateway.js";
|
|
5
|
+
/**
|
|
6
|
+
* Lineage namespace for training trials: every trial derives its own durable
|
|
7
|
+
* volume names, so no trial ever attaches production's, dev's or another
|
|
8
|
+
* trial's state (see `deploymentLineage.ts`).
|
|
9
|
+
*/
|
|
10
|
+
export declare const TRAINING_TRIAL_LINEAGE_NAMESPACE = "training";
|
|
11
|
+
export interface TrialOptions {
|
|
12
|
+
agentManifestPath: string;
|
|
13
|
+
instructions: string;
|
|
14
|
+
trialId: string;
|
|
15
|
+
/** Fresh per trial; holds the trial project, compile output and boot env file. */
|
|
16
|
+
directory: string;
|
|
17
|
+
docker?: TrialDocker;
|
|
18
|
+
control?: DaimonControlCall;
|
|
19
|
+
}
|
|
20
|
+
export interface TrialWake {
|
|
21
|
+
state: "completed" | "failed" | "stopped" | "timeout";
|
|
22
|
+
acceptanceId: string;
|
|
23
|
+
executionId: string | null;
|
|
24
|
+
code: string | null;
|
|
25
|
+
text: string;
|
|
26
|
+
/** Usage ledger rows this wake appended; empty means none were written, never zero spend. */
|
|
27
|
+
usage: UsageRecord[];
|
|
28
|
+
/** The engine's own newest session record, bounded; null when none exists. */
|
|
29
|
+
transcript: string | null;
|
|
30
|
+
}
|
|
31
|
+
export interface BootedTrial {
|
|
32
|
+
container: string;
|
|
33
|
+
wake(text: string, options: {
|
|
34
|
+
deliveryId: string;
|
|
35
|
+
timeoutMs: number;
|
|
36
|
+
signal?: AbortSignal;
|
|
37
|
+
}): Promise<TrialWake>;
|
|
38
|
+
/** Credential-shaped files anywhere in the trial container (expected: none). */
|
|
39
|
+
scanCredentials(): Promise<string[]>;
|
|
40
|
+
teardown(): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
export interface PreparedTrial {
|
|
43
|
+
image: string;
|
|
44
|
+
runtimeRoot: string;
|
|
45
|
+
engines: string[];
|
|
46
|
+
agentId: string;
|
|
47
|
+
boot(gateway: TrainingGatewayAccess, options?: {
|
|
48
|
+
readyTimeoutMs?: number;
|
|
49
|
+
}): Promise<BootedTrial>;
|
|
50
|
+
dispose(): Promise<void>;
|
|
51
|
+
}
|
|
52
|
+
/** Compiles and builds the trial's one-agent organization under its own lineage, as production does. */
|
|
53
|
+
export declare const prepareTrial: (options: TrialOptions) => Promise<PreparedTrial>;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
import { mkdir, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { DAIMON_GATEWAY_KEY_ENV, DAIMON_GATEWAY_URL_ENV, getDaimonEngineDescriptor, isDaimonGatewayRealmMountId } from "../../../runtime/daimon/index.js";
|
|
5
|
+
import { daimonHelperControlCall } from "../../../runtime/daimon/control.js";
|
|
6
|
+
import { RUNTIME_INSTALL_ROOT } from "../../../runtime/container.js";
|
|
7
|
+
import { parseUsageLedger } from "../../../runtime/usageLedger.js";
|
|
8
|
+
import { DAIMON_GROK_TURN_USAGE_LEDGER } from "../../../runtime/daimon/contractManifest.js";
|
|
9
|
+
import { SpawnfileError } from "../../../shared/index.js";
|
|
10
|
+
import { buildCompiledProject } from "../../buildProject.js";
|
|
11
|
+
import { compileProject } from "../../compileProject.js";
|
|
12
|
+
import { resolveDeploymentLineage } from "../../deploymentLineage.js";
|
|
13
|
+
import { slugify } from "../../helpers.js";
|
|
14
|
+
import { createDockerRunInvocation, runDockerContainer } from "../../runProject.js";
|
|
15
|
+
import { executeDockerRunWithSupportCleanup } from "../../runProjectLifecycle.js";
|
|
16
|
+
import { createTrialDocker, waitFor } from "./docker.js";
|
|
17
|
+
import { writeTrialProject } from "./project.js";
|
|
18
|
+
/**
|
|
19
|
+
* Lineage namespace for training trials: every trial derives its own durable
|
|
20
|
+
* volume names, so no trial ever attaches production's, dev's or another
|
|
21
|
+
* trial's state (see `deploymentLineage.ts`).
|
|
22
|
+
*/
|
|
23
|
+
export const TRAINING_TRIAL_LINEAGE_NAMESPACE = "training";
|
|
24
|
+
const CONTROL_TOKEN_ENV = "SPAWNFILE_DAIMON_CONTROL_TOKEN";
|
|
25
|
+
const WAKE_VERSION = "noopolis.daimon.wake.v2";
|
|
26
|
+
const TERMINAL = new Set(["completed", "failed", "stopped"]);
|
|
27
|
+
const MAX_TRANSCRIPT_BYTES = 1024 * 1024;
|
|
28
|
+
/** Compiles and builds the trial's one-agent organization under its own lineage, as production does. */
|
|
29
|
+
export const prepareTrial = async (options) => {
|
|
30
|
+
const docker = options.docker ?? createTrialDocker();
|
|
31
|
+
// Readable and collision-free: trial ids may share long prefixes.
|
|
32
|
+
const slug = `${slugify(options.trialId).slice(0, 32) || "trial"}-${createHash("sha256").update(options.trialId).digest("hex").slice(0, 8)}`;
|
|
33
|
+
const project = await writeTrialProject(options.agentManifestPath, options.instructions, path.join(options.directory, "project"));
|
|
34
|
+
const compiled = await compileProject(project, {
|
|
35
|
+
deploymentLineage: resolveDeploymentLineage(slug, TRAINING_TRIAL_LINEAGE_NAMESPACE),
|
|
36
|
+
outputDirectory: path.join(options.directory, "out")
|
|
37
|
+
});
|
|
38
|
+
const image = `spawnfile-training-trial:${slug}`;
|
|
39
|
+
await buildCompiledProject(project, compiled, { imageTag: image });
|
|
40
|
+
const instance = compiled.report.container?.runtime_instances.find((entry) => entry.runtime === "daimon");
|
|
41
|
+
const agents = Object.entries(instance?.engine_by_node_id ?? {});
|
|
42
|
+
if (!instance || agents.length !== 1)
|
|
43
|
+
throw new SpawnfileError("validation_error", "A production-booted trial compiles exactly one Daimon agent");
|
|
44
|
+
const [agentId] = agents[0];
|
|
45
|
+
const home = instance.agent_paths?.[agentId]?.home_path;
|
|
46
|
+
// The engine writes its own session records under its home inside the agent's runtime home.
|
|
47
|
+
const engineHome = getDaimonEngineDescriptor(agents[0][1])?.homeDirectory;
|
|
48
|
+
const sessionsPath = home && engineHome !== undefined ? path.posix.join(home, engineHome, "sessions") : null;
|
|
49
|
+
const dispose = async () => {
|
|
50
|
+
await docker(["image", "rm", "-f", image]).catch(() => undefined);
|
|
51
|
+
await rm(options.directory, { recursive: true, force: true });
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
agentId, dispose, image,
|
|
55
|
+
engines: agents.map(([, engine]) => engine),
|
|
56
|
+
runtimeRoot: `${RUNTIME_INSTALL_ROOT}/daimon`,
|
|
57
|
+
boot: async (gateway, bootOptions = {}) => {
|
|
58
|
+
const token = randomBytes(32).toString("base64url");
|
|
59
|
+
const container = `spawnfile-trial-${slug}`;
|
|
60
|
+
await mkdir(options.directory, { recursive: true });
|
|
61
|
+
const envFilePath = path.join(options.directory, "boot.env");
|
|
62
|
+
// The boot inputs: control token, gateway URL and key. No login, no realm.
|
|
63
|
+
await writeFile(envFilePath, `${CONTROL_TOKEN_ENV}=${token}\n${DAIMON_GATEWAY_URL_ENV}=${gateway.url}\n${DAIMON_GATEWAY_KEY_ENV}=${gateway.key}\n`, { mode: 0o600 });
|
|
64
|
+
const invocation = await createDockerRunInvocation(compiled, image, {
|
|
65
|
+
containerName: container, deploymentName: slug, detach: true, envFilePath, network: gateway.network
|
|
66
|
+
});
|
|
67
|
+
const volumes = (compiled.report.container?.persistent_mounts ?? [])
|
|
68
|
+
.filter((mount) => !isDaimonGatewayRealmMountId(mount.id)).map((mount) => mount.volume_name);
|
|
69
|
+
const teardown = async () => {
|
|
70
|
+
await docker(["rm", "-f", container]).catch(() => undefined);
|
|
71
|
+
for (const volume of volumes)
|
|
72
|
+
await docker(["volume", "rm", "-f", volume]).catch(() => undefined);
|
|
73
|
+
await rm(invocation.supportDirectory, { recursive: true, force: true });
|
|
74
|
+
await rm(envFilePath, { force: true });
|
|
75
|
+
};
|
|
76
|
+
try {
|
|
77
|
+
await executeDockerRunWithSupportCleanup(invocation, runDockerContainer);
|
|
78
|
+
await rm(envFilePath, { force: true });
|
|
79
|
+
const target = { containerRef: container, dockerArgs: [], dockerCommand: "docker", imageRef: image, token };
|
|
80
|
+
const call = options.control ?? daimonHelperControlCall;
|
|
81
|
+
await waitFor(async () => {
|
|
82
|
+
if (await docker(["inspect", "--format", "{{.State.Running}}", container]) !== "true") {
|
|
83
|
+
const logs = await docker(["logs", "--tail", "30", container]).catch(() => "");
|
|
84
|
+
throw new SpawnfileError("runtime_error", `trial organization exited before readiness: ${logs.replace(/\s+/gu, " ").slice(-600)}`);
|
|
85
|
+
}
|
|
86
|
+
return call(target, "GET", "/v2/availability").then((response) => response.status === 200, () => false);
|
|
87
|
+
}, bootOptions.readyTimeoutMs ?? 180_000, "trial organization readiness", 1_000);
|
|
88
|
+
return createBootedTrial({ agentId, call, container, docker, sessionsPath, target, teardown });
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
await teardown();
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
const readLedger = async (docker, container) => {
|
|
98
|
+
const text = await docker(["exec", container, "cat", DAIMON_GROK_TURN_USAGE_LEDGER.filePath]).catch(() => "");
|
|
99
|
+
return parseUsageLedger(text);
|
|
100
|
+
};
|
|
101
|
+
const createBootedTrial = (input) => {
|
|
102
|
+
let seenRows = 0;
|
|
103
|
+
return {
|
|
104
|
+
container: input.container,
|
|
105
|
+
teardown: input.teardown,
|
|
106
|
+
scanCredentials: async () => {
|
|
107
|
+
const found = await input.docker(["exec", input.container, "find", "/", "-xdev", "(", "-name", "auth.json", "-o", "-name", "*token*", "-o", "-name", "*bootstrap-auth*", ")",
|
|
108
|
+
"-not", "-path", "/proc/*", "-not", "-path", "/sys/*", "-not", "-path", "/usr/*", "-not", "-path", "/opt/spawnfile/runtime-installs/*"], { timeoutMs: 60_000 }).catch((error) => error.message);
|
|
109
|
+
return found.split("\n").filter(Boolean);
|
|
110
|
+
},
|
|
111
|
+
wake: async (text, options) => {
|
|
112
|
+
const body = { agent_id: input.agentId, delivery_id: options.deliveryId,
|
|
113
|
+
event: { version: WAKE_VERSION, kind: "manual", text, occurred_at: new Date().toISOString() } };
|
|
114
|
+
const accepted = await input.call(input.target, "POST", "/v2/wakes", body);
|
|
115
|
+
const acceptance = JSON.parse(accepted.body);
|
|
116
|
+
if (accepted.status !== 202 || acceptance.state !== "accepted" || !acceptance.acceptance_id) {
|
|
117
|
+
throw new SpawnfileError("runtime_error", `trial wake was not accepted (HTTP ${accepted.status}${acceptance.code ? `, ${acceptance.code}` : ""})`);
|
|
118
|
+
}
|
|
119
|
+
const id = acceptance.acceptance_id;
|
|
120
|
+
let receipt = {};
|
|
121
|
+
const deadline = Date.now() + options.timeoutMs;
|
|
122
|
+
while (!TERMINAL.has(receipt.state ?? "") && Date.now() < deadline && !options.signal?.aborted) {
|
|
123
|
+
await new Promise((resolve) => setTimeout(resolve, 1_000));
|
|
124
|
+
const response = await input.call(input.target, "GET", `/v2/wake-receipts/${id}`);
|
|
125
|
+
if (response.status === 200)
|
|
126
|
+
receipt = JSON.parse(response.body);
|
|
127
|
+
}
|
|
128
|
+
const rows = await readLedger(input.docker, input.container);
|
|
129
|
+
const usage = rows.slice(seenRows).filter((row) => row.agent === input.agentId);
|
|
130
|
+
seenRows = rows.length;
|
|
131
|
+
return {
|
|
132
|
+
acceptanceId: id, code: receipt.code ?? null, executionId: receipt.execution_id ?? null, usage,
|
|
133
|
+
state: TERMINAL.has(receipt.state ?? "") ? receipt.state : "timeout",
|
|
134
|
+
text: receipt.text ?? "",
|
|
135
|
+
transcript: input.sessionsPath === null ? null : await readTranscript(input.docker, input.container, input.sessionsPath)
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
/** The engine's newest session record, bounded. */
|
|
141
|
+
const readTranscript = async (docker, container, sessionsPath) => {
|
|
142
|
+
const newest = await docker(["exec", container, "sh", "-c", 'find "$1" -name "*.jsonl" -type f -printf "%T@ %p\\n" 2>/dev/null | sort -n | tail -1 | cut -d" " -f2-', "sh", sessionsPath]).catch(() => "");
|
|
143
|
+
if (!newest)
|
|
144
|
+
return null;
|
|
145
|
+
const text = await docker(["exec", container, "head", "-c", String(MAX_TRANSCRIPT_BYTES), newest]).catch(() => "");
|
|
146
|
+
return text || null;
|
|
147
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Bounded Docker CLI call for trial lifecycle; stdout trimmed, stderr bounded into the error. */
|
|
2
|
+
export type TrialDocker = (args: readonly string[], options?: {
|
|
3
|
+
timeoutMs?: number;
|
|
4
|
+
stdin?: string;
|
|
5
|
+
}) => Promise<string>;
|
|
6
|
+
export declare const createTrialDocker: (dockerCommand?: string) => TrialDocker;
|
|
7
|
+
/** Poll `probe` until it resolves true, or fail after `timeoutMs`. */
|
|
8
|
+
export declare const waitFor: (probe: () => Promise<boolean>, timeoutMs: number, label: string, pollMs?: number) => Promise<void>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { SpawnfileError } from "../../../shared/index.js";
|
|
3
|
+
export const createTrialDocker = (dockerCommand = "docker") => (args, options = {}) => new Promise((resolve, reject) => {
|
|
4
|
+
const child = execFile(dockerCommand, [...args], { maxBuffer: 16 * 1024 * 1024, timeout: options.timeoutMs ?? 120_000 }, (error, stdout, stderr) => error
|
|
5
|
+
? reject(new SpawnfileError("runtime_error", `docker ${args[0]} ${args[1] ?? ""} failed: ${String(stderr).replace(/\s+/gu, " ").slice(-400)}`))
|
|
6
|
+
: resolve(String(stdout).trim()));
|
|
7
|
+
if (options.stdin !== undefined)
|
|
8
|
+
child.stdin?.end(options.stdin);
|
|
9
|
+
else
|
|
10
|
+
child.stdin?.end();
|
|
11
|
+
});
|
|
12
|
+
/** Poll `probe` until it resolves true, or fail after `timeoutMs`. */
|
|
13
|
+
export const waitFor = async (probe, timeoutMs, label, pollMs = 500) => {
|
|
14
|
+
const deadline = Date.now() + timeoutMs;
|
|
15
|
+
for (;;) {
|
|
16
|
+
if (await probe())
|
|
17
|
+
return;
|
|
18
|
+
if (Date.now() >= deadline)
|
|
19
|
+
throw new SpawnfileError("runtime_error", `${label} timed out after ${timeoutMs}ms`);
|
|
20
|
+
await new Promise((resolve) => setTimeout(resolve, pollMs));
|
|
21
|
+
}
|
|
22
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ResolvedAuthProfile } from "../../../auth/index.js";
|
|
2
|
+
import { type TrialDocker } from "./docker.js";
|
|
3
|
+
export interface TrainingGatewayOptions {
|
|
4
|
+
/** Any compiled image of the subject: it carries the pinned Daimon runtime the gateway binary comes from. */
|
|
5
|
+
image: string;
|
|
6
|
+
runtimeRoot: string;
|
|
7
|
+
engines: readonly string[];
|
|
8
|
+
authProfile: ResolvedAuthProfile;
|
|
9
|
+
/** Training run identity; names the run's networks and labels every resource. */
|
|
10
|
+
runId: string;
|
|
11
|
+
docker?: TrialDocker;
|
|
12
|
+
/** Overrides the rendered sidecar script (tests and diagnostics only). */
|
|
13
|
+
script?: (script: string) => string;
|
|
14
|
+
readyTimeoutMs?: number;
|
|
15
|
+
}
|
|
16
|
+
/** What a trial needs to boot against the sidecar: one agent contract, never a login. */
|
|
17
|
+
export interface TrainingGatewayAccess {
|
|
18
|
+
url: string;
|
|
19
|
+
key: string;
|
|
20
|
+
/** Internal (no egress) network the trials join; only the gateway reaches the internet. */
|
|
21
|
+
network: string;
|
|
22
|
+
}
|
|
23
|
+
export interface TrainingGateway extends TrainingGatewayAccess {
|
|
24
|
+
container: string;
|
|
25
|
+
realmVolumes: readonly string[];
|
|
26
|
+
/** Stops and removes the sidecar and both networks. The realm volumes stay: they are the login. */
|
|
27
|
+
stop(): Promise<void>;
|
|
28
|
+
/** Replaces a dead or stuck sidecar in place: same key, networks and realm, so booted trials keep working. */
|
|
29
|
+
restart(script?: (script: string) => string): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
/** One durable realm volume per auth profile and engine: the gateway is its sole holder (exclusive flock). */
|
|
32
|
+
export declare const trainingGatewayRealmVolume: (profile: string, engine: string) => string;
|
|
33
|
+
/**
|
|
34
|
+
* Places Daimon's auth gateway as a sidecar for one training run: a container
|
|
35
|
+
* from the subject's own compiled image (the pinned Daimon runtime is a
|
|
36
|
+
* scratch copy source and runs nothing by itself), with the production Docker
|
|
37
|
+
* security posture, owning the engine realm volume, on a dedicated egress
|
|
38
|
+
* network plus the run's internal network that the trials join. Nothing is
|
|
39
|
+
* published to the host. The bootstrap leaf of the selected auth profile is
|
|
40
|
+
* staged through the same gate as `spawnfile up`.
|
|
41
|
+
*/
|
|
42
|
+
export declare const startTrainingGateway: (options: TrainingGatewayOptions) => Promise<TrainingGateway>;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
import { mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { DAIMON_GATEWAY_PORT, daimonGatewayBootstrapMountPath, daimonGatewayedEngines, daimonGatewayRealmPath } from "../../../runtime/daimon/gateway.js";
|
|
6
|
+
import { assertSafeDaimonSourceFile, daimonSourcePathForEngine } from "../../../runtime/daimon/runAuth.js";
|
|
7
|
+
import { DAIMON_DOCKER_RUNTIME_SECURITY_ARGS, SpawnfileError } from "../../../shared/index.js";
|
|
8
|
+
import { createDockerTargetExecutors } from "../../../target/dockerCommandExecutor.js";
|
|
9
|
+
import { removeExactDockerResource } from "../../../target/dockerResources.js";
|
|
10
|
+
import { createDockerResourceSpec, executeDockerResource } from "../../../target/dockerResourcesProvider.js";
|
|
11
|
+
import { parseOpaqueTargetHandle } from "../../../target/contracts.js";
|
|
12
|
+
import { DAIMON_GATEWAY_SIDECAR_ALIAS, DAIMON_GATEWAY_SIDECAR_KEY_ENV, DAIMON_GATEWAY_SIDECAR_URL, renderDaimonGatewaySidecarScript } from "../../containerDaimonGatewayRender.js";
|
|
13
|
+
import { slugify } from "../../helpers.js";
|
|
14
|
+
import { createTrialDocker, waitFor } from "./docker.js";
|
|
15
|
+
const hex = (value) => createHash("sha256").update(value).digest("hex");
|
|
16
|
+
const opaque = (value) => parseOpaqueTargetHandle(`opaque_${hex(value)}`);
|
|
17
|
+
const LABEL = "spawnfile.training-gateway";
|
|
18
|
+
/** One durable realm volume per auth profile and engine: the gateway is its sole holder (exclusive flock). */
|
|
19
|
+
export const trainingGatewayRealmVolume = (profile, engine) => `spawnfile-training-${slugify(profile) || "profile"}-${engine}-realm`;
|
|
20
|
+
/**
|
|
21
|
+
* Places Daimon's auth gateway as a sidecar for one training run: a container
|
|
22
|
+
* from the subject's own compiled image (the pinned Daimon runtime is a
|
|
23
|
+
* scratch copy source and runs nothing by itself), with the production Docker
|
|
24
|
+
* security posture, owning the engine realm volume, on a dedicated egress
|
|
25
|
+
* network plus the run's internal network that the trials join. Nothing is
|
|
26
|
+
* published to the host. The bootstrap leaf of the selected auth profile is
|
|
27
|
+
* staged through the same gate as `spawnfile up`.
|
|
28
|
+
*/
|
|
29
|
+
export const startTrainingGateway = async (options) => {
|
|
30
|
+
const docker = options.docker ?? createTrialDocker();
|
|
31
|
+
const descriptors = daimonGatewayedEngines(options.engines);
|
|
32
|
+
if (descriptors.length === 0)
|
|
33
|
+
throw new SpawnfileError("validation_error", "Training gateway needs a gatewayed engine");
|
|
34
|
+
const context = await docker(["context", "show"]);
|
|
35
|
+
const executor = createDockerTargetExecutors().resource;
|
|
36
|
+
const internal = createDockerResourceSpec({
|
|
37
|
+
kind: "data_network", operationHandle: opaque(`${options.runId}\0network`), requestDigest: `sha256:${hex(options.runId)}`,
|
|
38
|
+
runId: options.runId, selectedTargetHandle: opaque(context)
|
|
39
|
+
});
|
|
40
|
+
const suffix = hex(options.runId).slice(0, 16);
|
|
41
|
+
const egress = `spawnfile-training-egress-${suffix}`;
|
|
42
|
+
const container = `spawnfile-training-gateway-${suffix}`;
|
|
43
|
+
const key = randomBytes(32).toString("hex");
|
|
44
|
+
const mounts = [];
|
|
45
|
+
const realmVolumes = [];
|
|
46
|
+
for (const descriptor of descriptors) {
|
|
47
|
+
const source = daimonSourcePathForEngine(descriptor.id, process.env, options.authProfile);
|
|
48
|
+
await assertSafeDaimonSourceFile(source, descriptor.id, descriptor.auth.maxCredentialBytes, descriptor.id);
|
|
49
|
+
const volume = trainingGatewayRealmVolume(options.authProfile.name, descriptor.id);
|
|
50
|
+
realmVolumes.push(volume);
|
|
51
|
+
mounts.push("--mount", `type=volume,source=${volume},target=${daimonGatewayRealmPath(descriptor)}`, "-v", `${source}:${daimonGatewayBootstrapMountPath(descriptor.auth.realm)}:ro`);
|
|
52
|
+
}
|
|
53
|
+
const stop = async () => {
|
|
54
|
+
await docker(["rm", "-f", container]).catch(() => undefined);
|
|
55
|
+
await docker(["network", "rm", egress]).catch(() => undefined);
|
|
56
|
+
await removeExactDockerResource(internal, { context, executor, timeoutMs: 30_000 }).catch(() => undefined);
|
|
57
|
+
};
|
|
58
|
+
const launch = async (wrap = options.script) => {
|
|
59
|
+
const support = await mkdtemp(path.join(os.tmpdir(), "spawnfile-training-gateway-"));
|
|
60
|
+
try {
|
|
61
|
+
const envFile = path.join(support, "gateway.env");
|
|
62
|
+
await writeFile(envFile, `${DAIMON_GATEWAY_SIDECAR_KEY_ENV}=${key}\n`, { mode: 0o600 });
|
|
63
|
+
const script = renderDaimonGatewaySidecarScript(options.engines, options.runtimeRoot);
|
|
64
|
+
await docker(["create", "--name", container, "--restart", "no", "--network", egress, "--label", `${LABEL}=${suffix}`,
|
|
65
|
+
...DAIMON_DOCKER_RUNTIME_SECURITY_ARGS, ...mounts, "--env-file", envFile,
|
|
66
|
+
"--entrypoint", "bash", options.image, "-ceu", wrap ? wrap(script) : script]);
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
await rm(support, { recursive: true, force: true });
|
|
70
|
+
}
|
|
71
|
+
await docker(["network", "connect", "--alias", DAIMON_GATEWAY_SIDECAR_ALIAS, internal.name, container]);
|
|
72
|
+
await docker(["start", container]);
|
|
73
|
+
await waitFor(async () => {
|
|
74
|
+
const state = await docker(["inspect", "--format", "{{.State.Running}}", container]);
|
|
75
|
+
if (state !== "true") {
|
|
76
|
+
const logs = await docker(["logs", "--tail", "20", container]).catch(() => "");
|
|
77
|
+
throw new SpawnfileError("runtime_error", `training auth gateway exited before readiness: ${logs.replace(/\s+/gu, " ").slice(-400)}`);
|
|
78
|
+
}
|
|
79
|
+
return docker(["exec", container, "bash", "-c", `(exec 3<>/dev/tcp/127.0.0.1/${DAIMON_GATEWAY_PORT})`]).then(() => true, () => false);
|
|
80
|
+
}, options.readyTimeoutMs ?? 60_000, "training auth gateway readiness");
|
|
81
|
+
};
|
|
82
|
+
try {
|
|
83
|
+
await executeDockerResource({ args: ["--context", context, ...internal.args], executor, timeoutMs: 30_000 });
|
|
84
|
+
await docker(["network", "create", "--label", `${LABEL}=${suffix}`, egress]);
|
|
85
|
+
await launch();
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
await stop();
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
container, key, network: internal.name, realmVolumes, stop, url: DAIMON_GATEWAY_SIDECAR_URL,
|
|
93
|
+
restart: async (wrap) => {
|
|
94
|
+
await docker(["rm", "-f", container]);
|
|
95
|
+
await launch(wrap);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { TRAINING_TRIAL_LINEAGE_NAMESPACE, prepareTrial, type BootedTrial, type PreparedTrial, type TrialOptions, type TrialWake } from "./boot.js";
|
|
2
|
+
export { startTrainingGateway, trainingGatewayRealmVolume, type TrainingGateway, type TrainingGatewayAccess, type TrainingGatewayOptions } from "./gateway.js";
|
|
3
|
+
export { createBootedTrialRun, type BootedTrialLauncherOptions, type BootedTrialRun } from "./launcher.js";
|
|
4
|
+
export { TRIAL_INSTRUCTIONS_FILE, writeTrialProject } from "./project.js";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { TRAINING_TRIAL_LINEAGE_NAMESPACE, prepareTrial } from "./boot.js";
|
|
2
|
+
export { startTrainingGateway, trainingGatewayRealmVolume } from "./gateway.js";
|
|
3
|
+
export { createBootedTrialRun } from "./launcher.js";
|
|
4
|
+
export { TRIAL_INSTRUCTIONS_FILE, writeTrialProject } from "./project.js";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ResolvedAuthProfile } from "../../../auth/index.js";
|
|
2
|
+
import { type TrialWake } from "./boot.js";
|
|
3
|
+
import { type TrialDocker } from "./docker.js";
|
|
4
|
+
export interface BootedTrialLauncherOptions {
|
|
5
|
+
/** The subject agent's own Spawnfile. */
|
|
6
|
+
agentManifestPath: string;
|
|
7
|
+
authProfile: ResolvedAuthProfile;
|
|
8
|
+
/** Trial projects, compile outputs and boot env files live here, one fresh directory per trial. */
|
|
9
|
+
scratchRoot: string;
|
|
10
|
+
docker?: TrialDocker;
|
|
11
|
+
}
|
|
12
|
+
export interface BootedTrialRun {
|
|
13
|
+
boot(input: {
|
|
14
|
+
trialId: string;
|
|
15
|
+
instructions: string;
|
|
16
|
+
}): Promise<{
|
|
17
|
+
wake(text: string, options: {
|
|
18
|
+
deliveryId: string;
|
|
19
|
+
timeoutMs: number;
|
|
20
|
+
signal?: AbortSignal;
|
|
21
|
+
}): Promise<TrialWake>;
|
|
22
|
+
teardown(): Promise<void>;
|
|
23
|
+
}>;
|
|
24
|
+
/** Stops the run's gateway and removes its image and networks; the realm volume stays. */
|
|
25
|
+
close(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* One training run's trials: each boot compiles and starts the subject's
|
|
29
|
+
* one-agent organization, and every trial shares the run's single auth
|
|
30
|
+
* gateway, started from the first trial's image on first use.
|
|
31
|
+
*/
|
|
32
|
+
export declare const createBootedTrialRun: (options: BootedTrialLauncherOptions) => BootedTrialRun;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { mkdir, mkdtemp } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ensureNoopolisRunId } from "../../../runtime/index.js";
|
|
4
|
+
import { prepareTrial } from "./boot.js";
|
|
5
|
+
import { createTrialDocker } from "./docker.js";
|
|
6
|
+
import { startTrainingGateway } from "./gateway.js";
|
|
7
|
+
/**
|
|
8
|
+
* One training run's trials: each boot compiles and starts the subject's
|
|
9
|
+
* one-agent organization, and every trial shares the run's single auth
|
|
10
|
+
* gateway, started from the first trial's image on first use.
|
|
11
|
+
*/
|
|
12
|
+
export const createBootedTrialRun = (options) => {
|
|
13
|
+
const docker = options.docker ?? createTrialDocker();
|
|
14
|
+
const runId = ensureNoopolisRunId();
|
|
15
|
+
let gateway;
|
|
16
|
+
return {
|
|
17
|
+
boot: async ({ trialId, instructions }) => {
|
|
18
|
+
await mkdir(options.scratchRoot, { recursive: true });
|
|
19
|
+
const prepared = await prepareTrial({ agentManifestPath: options.agentManifestPath, docker, instructions, trialId,
|
|
20
|
+
directory: await mkdtemp(path.join(options.scratchRoot, "trial-")) });
|
|
21
|
+
try {
|
|
22
|
+
gateway ??= (async () => {
|
|
23
|
+
const image = `spawnfile-training-gateway:${runId.replace(/[^A-Za-z0-9_.-]/gu, "-").slice(0, 100)}`;
|
|
24
|
+
await docker(["tag", prepared.image, image]);
|
|
25
|
+
return { image, gateway: await startTrainingGateway({ authProfile: options.authProfile, docker, engines: prepared.engines,
|
|
26
|
+
image, runId, runtimeRoot: prepared.runtimeRoot }) };
|
|
27
|
+
})();
|
|
28
|
+
const booted = await prepared.boot((await gateway).gateway);
|
|
29
|
+
return { wake: booted.wake, teardown: async () => { try {
|
|
30
|
+
await booted.teardown();
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
await prepared.dispose();
|
|
34
|
+
} } };
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
await prepared.dispose();
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
close: async () => {
|
|
42
|
+
const started = await gateway?.catch(() => undefined);
|
|
43
|
+
if (!started)
|
|
44
|
+
return;
|
|
45
|
+
await started.gateway.stop();
|
|
46
|
+
await docker(["image", "rm", "-f", started.image]).catch(() => undefined);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
};
|
|
@@ -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
|
+
};
|
|
@@ -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) {
|