spawnfile 0.1.17 → 0.1.19
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/importers.js +21 -5
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.js +1 -0
- package/dist/auth/profileStore.js +4 -1
- package/dist/auth/trainingGrokWriteback.d.ts +4 -0
- package/dist/auth/trainingGrokWriteback.js +119 -0
- package/dist/auth/trainingGrokWritebackLock.d.ts +5 -0
- package/dist/auth/trainingGrokWritebackLock.js +56 -0
- package/dist/cli/authCommands.js +9 -5
- package/dist/cli/compileBuildCommands.js +4 -0
- package/dist/cli/devCommands.js +4 -2
- package/dist/cli/downCommand.d.ts +2 -0
- package/dist/cli/downCommand.js +3 -0
- package/dist/cli/envFileOption.d.ts +18 -0
- package/dist/cli/envFileOption.js +20 -0
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +3 -1
- package/dist/cli/lifecyclePlan.d.ts +1 -0
- package/dist/cli/lifecyclePlan.js +2 -0
- package/dist/cli/paideiaDelegation.d.ts +2 -1
- package/dist/cli/paideiaDelegation.js +5 -4
- package/dist/cli/recordCommands.d.ts +17 -0
- package/dist/cli/recordCommands.js +43 -0
- package/dist/cli/releaseCommand.d.ts +6 -0
- package/dist/cli/releaseCommand.js +91 -0
- package/dist/cli/runCli.d.ts +7 -1
- package/dist/cli/runCli.js +11 -6
- package/dist/cli/runPublishCommands.js +5 -3
- package/dist/cli/trainCommand.js +73 -20
- package/dist/cli/upCommand.js +5 -1
- package/dist/cli/volumeCommands.d.ts +8 -0
- package/dist/cli/volumeCommands.js +53 -0
- package/dist/compiler/agentNodeMerge.js +3 -2
- package/dist/compiler/buildCompilePlan.js +4 -0
- package/dist/compiler/buildCompilePlanAgent.js +3 -1
- package/dist/compiler/buildCompilePlanTraversal.js +2 -0
- package/dist/compiler/buildCompilePlanTraversalHelpers.d.ts +2 -2
- package/dist/compiler/buildCompilePlanTraversalHelpers.js +4 -3
- package/dist/compiler/buildProject.d.ts +10 -0
- package/dist/compiler/buildProject.js +14 -2
- package/dist/compiler/cleanCompileOutput.d.ts +2 -0
- package/dist/compiler/cleanCompileOutput.js +14 -0
- package/dist/compiler/compilePlanHelpers.js +2 -0
- package/dist/compiler/compileProject.d.ts +10 -0
- package/dist/compiler/compileProject.js +29 -3
- package/dist/compiler/containerArtifactSummaries.js +1 -0
- package/dist/compiler/containerArtifacts.d.ts +4 -4
- package/dist/compiler/containerArtifacts.js +18 -34
- package/dist/compiler/containerArtifactsPlans.js +7 -0
- package/dist/compiler/containerArtifactsTypes.d.ts +7 -0
- package/dist/compiler/containerDaimonBrokerRender.d.ts +3 -1
- package/dist/compiler/containerDaimonBrokerRender.js +6 -3
- package/dist/compiler/containerDaimonGrokTaskClock.d.ts +5 -0
- package/dist/compiler/containerDaimonGrokTaskClock.js +29 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +1 -1
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +38 -16
- package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +33 -8
- package/dist/compiler/containerDaimonGrokWorkerRender.js +18 -5
- package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +14 -1
- package/dist/compiler/containerDaimonOwnershipGuardRender.js +15 -2
- package/dist/compiler/containerDaimonUidEntrypointRender.js +6 -12
- package/dist/compiler/containerTargetResources.d.ts +10 -0
- package/dist/compiler/containerTargetResources.js +21 -13
- package/dist/compiler/containerWorkspaceResourceRender.js +4 -1
- package/dist/compiler/index.d.ts +2 -0
- package/dist/compiler/index.js +2 -0
- package/dist/compiler/mcpPlaceholders.d.ts +11 -0
- package/dist/compiler/mcpPlaceholders.js +58 -0
- package/dist/compiler/mcpServerInheritance.d.ts +18 -0
- package/dist/compiler/mcpServerInheritance.js +43 -0
- package/dist/compiler/moltnetArtifactTypes.d.ts +1 -0
- package/dist/compiler/moltnetArtifacts.js +1 -0
- package/dist/compiler/preflightCompilePlan.d.ts +9 -0
- package/dist/compiler/preflightCompilePlan.js +38 -0
- package/dist/compiler/recordingAgentFacts.d.ts +4 -0
- package/dist/compiler/recordingAgentFacts.js +35 -0
- package/dist/compiler/recordingCapability.d.ts +4 -0
- package/dist/compiler/recordingCapability.js +22 -0
- package/dist/compiler/recordingReport.d.ts +4 -0
- package/dist/compiler/recordingReport.js +18 -0
- package/dist/compiler/runProject.d.ts +2 -1
- package/dist/compiler/runProject.js +2 -0
- package/dist/compiler/surfaces.d.ts +1 -2
- package/dist/compiler/surfaces.js +0 -1
- package/dist/compiler/syncProjectAuth.js +2 -1
- package/dist/compiler/training/broker/clockProbe.d.ts +6 -0
- package/dist/compiler/training/broker/clockProbe.js +27 -0
- package/dist/compiler/training/broker/declaration.d.ts +4 -2
- package/dist/compiler/training/broker/declaration.js +4 -2
- package/dist/compiler/training/broker/entrypoint.js +33 -18
- package/dist/compiler/training/broker/evaluatorSecrets.d.ts +2 -0
- package/dist/compiler/training/broker/evaluatorSecrets.js +60 -0
- package/dist/compiler/training/broker/index.d.ts +3 -2
- package/dist/compiler/training/broker/index.js +3 -2
- package/dist/compiler/training/broker/main.js +1 -1
- package/dist/compiler/training/broker/paths.d.ts +96 -56
- package/dist/compiler/training/broker/paths.js +97 -89
- package/dist/compiler/training/broker/processes.d.ts +9 -0
- package/dist/compiler/training/broker/processes.js +4 -1
- package/dist/compiler/training/broker/projection.d.ts +3 -2
- package/dist/compiler/training/broker/projection.js +21 -9
- package/dist/compiler/training/broker/provisioning.d.ts +6 -15
- package/dist/compiler/training/broker/provisioning.js +71 -53
- package/dist/compiler/training/broker/registration.d.ts +3 -1
- package/dist/compiler/training/broker/registration.js +29 -21
- package/dist/compiler/training/broker/reset.d.ts +9 -0
- package/dist/compiler/training/broker/reset.js +71 -0
- package/dist/compiler/training/broker/runtime.d.ts +10 -13
- package/dist/compiler/training/broker/runtime.js +69 -115
- package/dist/compiler/training/broker/supervisor.d.ts +10 -11
- package/dist/compiler/training/broker/supervisor.js +22 -23
- package/dist/compiler/training/broker/taskClock.d.ts +5 -0
- package/dist/compiler/training/broker/taskClock.js +41 -0
- package/dist/compiler/training/compiledAgent.d.ts +21 -0
- package/dist/compiler/training/compiledAgent.js +62 -0
- package/dist/compiler/training/container/contract.d.ts +23 -0
- package/dist/compiler/training/container/contract.js +23 -5
- package/dist/compiler/training/container/evaluators.d.ts +48 -0
- package/dist/compiler/training/container/evaluators.js +50 -0
- package/dist/compiler/training/container/grokWriteback.d.ts +8 -0
- package/dist/compiler/training/container/grokWriteback.js +26 -0
- package/dist/compiler/training/container/index.d.ts +2 -1
- package/dist/compiler/training/container/index.js +2 -1
- package/dist/compiler/training/container/launch.d.ts +3 -0
- package/dist/compiler/training/container/launch.js +119 -28
- package/dist/compiler/training/container/nativeSlots.d.ts +14 -0
- package/dist/compiler/training/container/nativeSlots.js +13 -0
- package/dist/compiler/training/container/outputCopy.d.ts +2 -0
- package/dist/compiler/training/container/outputCopy.js +72 -0
- package/dist/compiler/training/container/outputVolume.d.ts +27 -0
- package/dist/compiler/training/container/outputVolume.js +161 -0
- package/dist/compiler/training/container/prepare.d.ts +3 -1
- package/dist/compiler/training/container/prepare.js +57 -12
- package/dist/compiler/training/container/security.d.ts +5 -3
- package/dist/compiler/training/container/security.js +15 -5
- package/dist/compiler/training/container/subjectIsolation.d.ts +5 -0
- package/dist/compiler/training/container/subjectIsolation.js +15 -0
- package/dist/compiler/training/context.d.ts +8 -0
- package/dist/compiler/training/context.js +12 -12
- package/dist/compiler/training/contract.d.ts +2 -0
- package/dist/compiler/training/contract.js +2 -0
- package/dist/compiler/training/execution.d.ts +417 -0
- package/dist/compiler/training/execution.js +160 -0
- package/dist/compiler/training/index.d.ts +8 -0
- package/dist/compiler/training/index.js +7 -0
- package/dist/compiler/training/moments.d.ts +80 -0
- package/dist/compiler/training/moments.js +118 -0
- package/dist/compiler/training/output.d.ts +2 -0
- package/dist/compiler/training/output.js +20 -0
- package/dist/compiler/training/plan/contract.d.ts +287 -0
- package/dist/compiler/training/plan/contract.js +49 -0
- package/dist/compiler/training/plan/index.d.ts +5 -0
- package/dist/compiler/training/plan/index.js +4 -0
- package/dist/compiler/training/plan/load.d.ts +9 -0
- package/dist/compiler/training/plan/load.js +153 -0
- package/dist/compiler/training/plan/references.d.ts +19 -0
- package/dist/compiler/training/plan/references.js +57 -0
- package/dist/compiler/training/plan/resolve.d.ts +4 -0
- package/dist/compiler/training/plan/resolve.js +73 -0
- package/dist/compiler/training/plan/targets.d.ts +11 -0
- package/dist/compiler/training/plan/targets.js +71 -0
- package/dist/compiler/training/plan/types.d.ts +36 -0
- package/dist/compiler/training/plan/types.js +1 -0
- package/dist/compiler/training/preparation/assets/Dockerfile +13 -2
- package/dist/compiler/training/preparation/assets/package-lock.json +2 -2
- package/dist/compiler/training/preparation/broker.d.ts +3 -3
- package/dist/compiler/training/preparation/broker.js +6 -4
- package/dist/compiler/training/preparation/contract.d.ts +27 -2
- package/dist/compiler/training/preparation/contract.js +23 -4
- package/dist/compiler/training/preparation/files.d.ts +5 -1
- package/dist/compiler/training/preparation/files.js +76 -15
- package/dist/compiler/training/preparation/image.js +9 -4
- package/dist/compiler/training/preparation/inputs.d.ts +1 -0
- package/dist/compiler/training/preparation/inputs.js +18 -10
- package/dist/compiler/training/preparation/prepare.d.ts +5 -0
- package/dist/compiler/training/preparation/prepare.js +66 -29
- package/dist/compiler/training/preparation/scratch.d.ts +6 -17
- package/dist/compiler/training/preparation/scratch.js +89 -23
- package/dist/compiler/training/repair/contract.d.ts +338 -4
- package/dist/compiler/training/repair/contract.js +2 -0
- package/dist/compiler/training/repair/index.d.ts +1 -1
- package/dist/compiler/training/repair/index.js +1 -1
- package/dist/compiler/training/repair/prepare.d.ts +155 -3
- package/dist/compiler/training/repair/prepare.js +6 -2
- package/dist/compiler/training/repair/witness.d.ts +152 -3
- package/dist/compiler/training/repair/witness.js +8 -2
- package/dist/compiler/training/resolution.d.ts +25 -0
- package/dist/compiler/training/resolution.js +69 -0
- package/dist/compiler/training/rewind/contract.d.ts +321 -0
- package/dist/compiler/training/rewind/contract.js +39 -0
- package/dist/compiler/training/rewind/deployedResource.d.ts +22 -0
- package/dist/compiler/training/rewind/deployedResource.js +19 -0
- package/dist/compiler/training/rewind/feed.d.ts +12 -0
- package/dist/compiler/training/rewind/feed.js +182 -0
- package/dist/compiler/training/rewind/feedContent.d.ts +6 -0
- package/dist/compiler/training/rewind/feedContent.js +38 -0
- package/dist/compiler/training/rewind/git.d.ts +8 -0
- package/dist/compiler/training/rewind/git.js +159 -0
- package/dist/compiler/training/rewind/gitArchive.d.ts +2 -0
- package/dist/compiler/training/rewind/gitArchive.js +7 -0
- package/dist/compiler/training/rewind/gitHistory.d.ts +3 -0
- package/dist/compiler/training/rewind/gitHistory.js +55 -0
- package/dist/compiler/training/rewind/gitProcess.d.ts +19 -0
- package/dist/compiler/training/rewind/gitProcess.js +81 -0
- package/dist/compiler/training/rewind/gitTree.d.ts +14 -0
- package/dist/compiler/training/rewind/gitTree.js +90 -0
- package/dist/compiler/training/rewind/history.d.ts +28 -0
- package/dist/compiler/training/rewind/history.js +239 -0
- package/dist/compiler/training/rewind/index.d.ts +18 -0
- package/dist/compiler/training/rewind/index.js +15 -0
- package/dist/compiler/training/rewind/inputs.d.ts +9 -0
- package/dist/compiler/training/rewind/inputs.js +67 -0
- package/dist/compiler/training/rewind/instant.d.ts +4 -0
- package/dist/compiler/training/rewind/instant.js +24 -0
- package/dist/compiler/training/rewind/leakCheck.d.ts +10 -0
- package/dist/compiler/training/rewind/leakCheck.js +56 -0
- package/dist/compiler/training/rewind/leakFeed.d.ts +5 -0
- package/dist/compiler/training/rewind/leakFeed.js +25 -0
- package/dist/compiler/training/rewind/leakFiles.d.ts +10 -0
- package/dist/compiler/training/rewind/leakFiles.js +106 -0
- package/dist/compiler/training/rewind/leakGit.d.ts +3 -0
- package/dist/compiler/training/rewind/leakGit.js +78 -0
- package/dist/compiler/training/rewind/leakGitPayload.d.ts +4 -0
- package/dist/compiler/training/rewind/leakGitPayload.js +57 -0
- package/dist/compiler/training/rewind/leakInputs.d.ts +7 -0
- package/dist/compiler/training/rewind/leakInputs.js +135 -0
- package/dist/compiler/training/rewind/leakLayout.d.ts +2 -0
- package/dist/compiler/training/rewind/leakLayout.js +17 -0
- package/dist/compiler/training/rewind/leakProvenance.d.ts +3 -0
- package/dist/compiler/training/rewind/leakProvenance.js +88 -0
- package/dist/compiler/training/rewind/materialize.d.ts +136 -0
- package/dist/compiler/training/rewind/materialize.js +212 -0
- package/dist/compiler/training/rewind/memory.d.ts +10 -0
- package/dist/compiler/training/rewind/memory.js +84 -0
- package/dist/compiler/training/rewind/memorySchemas.d.ts +87 -0
- package/dist/compiler/training/rewind/memorySchemas.js +50 -0
- package/dist/compiler/training/rewind/moltnet.d.ts +2 -0
- package/dist/compiler/training/rewind/moltnet.js +54 -0
- package/dist/compiler/training/rewind/moltnetJson.d.ts +13 -0
- package/dist/compiler/training/rewind/moltnetJson.js +180 -0
- package/dist/compiler/training/rewind/moltnetSchemas.d.ts +1226 -0
- package/dist/compiler/training/rewind/moltnetSchemas.js +75 -0
- package/dist/compiler/training/rewind/moltnetSqlite.d.ts +31 -0
- package/dist/compiler/training/rewind/moltnetSqlite.js +192 -0
- package/dist/compiler/training/rewind/moltnetSqliteData.d.ts +10 -0
- package/dist/compiler/training/rewind/moltnetSqliteData.js +113 -0
- package/dist/compiler/training/rewind/recordInput.d.ts +40 -0
- package/dist/compiler/training/rewind/recordInput.js +49 -0
- package/dist/compiler/training/rewind/recordedBundle.d.ts +4 -0
- package/dist/compiler/training/rewind/recordedBundle.js +58 -0
- package/dist/compiler/training/rewind/recordedCommit.d.ts +2 -0
- package/dist/compiler/training/rewind/recordedCommit.js +10 -0
- package/dist/compiler/training/rewind/select.d.ts +18 -0
- package/dist/compiler/training/rewind/select.js +64 -0
- package/dist/compiler/training/rewind/snapshotManifest.d.ts +42 -0
- package/dist/compiler/training/rewind/snapshotManifest.js +134 -0
- package/dist/compiler/training/rewind/taskClock.d.ts +12 -0
- package/dist/compiler/training/rewind/taskClock.js +40 -0
- package/dist/compiler/training/rewind/timestamps.d.ts +4 -0
- package/dist/compiler/training/rewind/timestamps.js +26 -0
- package/dist/compiler/training/rewind/types.d.ts +43 -0
- package/dist/compiler/training/rewind/types.js +1 -0
- package/dist/compiler/training/rewind/volumes.d.ts +12 -0
- package/dist/compiler/training/rewind/volumes.js +58 -0
- package/dist/compiler/training/selection.d.ts +7 -0
- package/dist/compiler/training/selection.js +15 -0
- package/dist/compiler/types.d.ts +6 -3
- package/dist/compiler/upProject.d.ts +1 -0
- package/dist/compiler/upProject.js +21 -5
- package/dist/compiler/workspaceBundleArtifacts.d.ts +16 -1
- package/dist/compiler/workspaceBundleArtifacts.js +69 -20
- package/dist/compiler/workspaceBundleCache.d.ts +23 -0
- package/dist/compiler/workspaceBundleCache.js +79 -0
- package/dist/compiler/workspaceBundleDependencies.d.ts +21 -0
- package/dist/compiler/workspaceBundleDependencies.js +122 -0
- package/dist/compiler/workspaceBundleFiles.d.ts +51 -0
- package/dist/compiler/workspaceBundleFiles.js +251 -0
- package/dist/compiler/workspaceBundleGenerated.d.ts +25 -0
- package/dist/compiler/workspaceBundleGenerated.js +103 -0
- package/dist/compiler/workspaceBundleGit.d.ts +64 -0
- package/dist/compiler/workspaceBundleGit.js +154 -0
- package/dist/compiler/workspaceBundleKey.d.ts +34 -0
- package/dist/compiler/workspaceBundleKey.js +17 -0
- package/dist/compiler/workspaceBundleResolve.d.ts +56 -0
- package/dist/compiler/workspaceBundleResolve.js +144 -0
- package/dist/compiler/workspaceBundleRun.d.ts +41 -0
- package/dist/compiler/workspaceBundleRun.js +79 -0
- package/dist/compiler/workspaceBundleTar.d.ts +47 -0
- package/dist/compiler/workspaceBundleTar.js +140 -0
- package/dist/compiler/workspaceBundleTree.d.ts +15 -0
- package/dist/compiler/workspaceBundleTree.js +58 -0
- package/dist/compiler/workspaceGitFetch.d.ts +41 -0
- package/dist/compiler/workspaceGitFetch.js +155 -0
- package/dist/compiler/workspaceGitPins.d.ts +33 -0
- package/dist/compiler/workspaceGitPins.js +127 -0
- package/dist/compiler/workspaceResources.d.ts +5 -1
- package/dist/compiler/workspaceResources.js +32 -5
- package/dist/deployment/activation.d.ts +3 -0
- package/dist/deployment/activation.js +12 -0
- package/dist/deployment/canaryCutover.d.ts +1 -1
- package/dist/deployment/candidateRecording.d.ts +8 -0
- package/dist/deployment/candidateRecording.js +22 -0
- package/dist/deployment/dockerManager.d.ts +5 -3
- package/dist/deployment/dockerManager.js +12 -2
- package/dist/deployment/downDeployment.d.ts +2 -0
- package/dist/deployment/downDeployment.js +6 -2
- package/dist/deployment/homeStore.d.ts +9 -1
- package/dist/deployment/homeStore.js +16 -53
- package/dist/deployment/index.d.ts +6 -0
- package/dist/deployment/index.js +6 -0
- package/dist/deployment/pidLock.d.ts +25 -0
- package/dist/deployment/pidLock.js +81 -0
- package/dist/deployment/record.d.ts +85 -1
- package/dist/deployment/record.js +11 -5
- package/dist/deployment/recordPublication.d.ts +15 -0
- package/dist/deployment/recordPublication.js +76 -0
- package/dist/deployment/recordedMemoryRetention.d.ts +18 -0
- package/dist/deployment/recordedMemoryRetention.js +27 -0
- package/dist/deployment/resourceLog.d.ts +140 -0
- package/dist/deployment/resourceLog.js +78 -0
- package/dist/distribution/buildDistributionReport.d.ts +3 -0
- package/dist/distribution/buildDistributionReport.js +5 -0
- package/dist/distribution/consumeImage.d.ts +3 -0
- package/dist/distribution/consumeImage.js +23 -31
- package/dist/distribution/consumeImageLifecycle.d.ts +4 -1
- package/dist/distribution/consumeImageLifecycle.js +14 -3
- package/dist/distribution/consumeImageSupport.d.ts +7 -0
- package/dist/distribution/consumeImageSupport.js +25 -0
- package/dist/distribution/distributionReportSchema.d.ts +47 -0
- package/dist/distribution/distributionReportSchema.js +20 -0
- package/dist/distribution/renderImageInterface.js +1 -1
- package/dist/distribution/types.d.ts +15 -0
- package/dist/filesystem/durableWrite.d.ts +10 -0
- package/dist/filesystem/durableWrite.js +87 -0
- package/dist/filesystem/index.d.ts +2 -0
- package/dist/filesystem/index.js +2 -0
- package/dist/filesystem/retainedJsonl.d.ts +23 -0
- package/dist/filesystem/retainedJsonl.js +123 -0
- package/dist/manifest/commandSchemas.d.ts +5 -0
- package/dist/manifest/commandSchemas.js +5 -0
- package/dist/manifest/executionSchemas.d.ts +20 -0
- package/dist/manifest/executionSchemas.js +13 -3
- package/dist/manifest/index.d.ts +2 -0
- package/dist/manifest/index.js +2 -0
- package/dist/manifest/loadManifest.js +3 -26
- package/dist/manifest/mcpSchemas.d.ts +61 -0
- package/dist/manifest/mcpSchemas.js +57 -11
- package/dist/manifest/memorySchemas.d.ts +1 -1
- package/dist/manifest/memorySchemas.js +1 -1
- package/dist/manifest/parseManifest.d.ts +7 -0
- package/dist/manifest/parseManifest.js +65 -0
- package/dist/manifest/renderSpawnfile.js +4 -1
- package/dist/manifest/renderSpawnfileWorkspace.js +6 -2
- package/dist/manifest/schemas.d.ts +1206 -132
- package/dist/manifest/schemas.js +14 -4
- package/dist/manifest/teamNetworkSchemas.d.ts +1 -1
- package/dist/manifest/trainingDataSchemas.d.ts +357 -0
- package/dist/manifest/trainingDataSchemas.js +31 -0
- package/dist/manifest/trainingSchemas.d.ts +49 -0
- package/dist/manifest/trainingSchemas.js +44 -0
- package/dist/manifest/volumeFeedSchemas.d.ts +52 -0
- package/dist/manifest/volumeFeedSchemas.js +104 -0
- package/dist/manifest/workspaceSchemas.d.ts +182 -5
- package/dist/manifest/workspaceSchemas.js +111 -7
- package/dist/recording/compose.d.ts +3 -0
- package/dist/recording/compose.js +93 -0
- package/dist/recording/deployment.d.ts +15 -0
- package/dist/recording/deployment.js +38 -0
- package/dist/recording/history.d.ts +16 -0
- package/dist/recording/history.js +47 -0
- package/dist/recording/index.d.ts +9 -0
- package/dist/recording/index.js +9 -0
- package/dist/recording/moment.d.ts +61 -0
- package/dist/recording/moment.js +36 -0
- package/dist/recording/parse.d.ts +15 -0
- package/dist/recording/parse.js +74 -0
- package/dist/recording/read.d.ts +8 -0
- package/dist/recording/read.js +61 -0
- package/dist/recording/store.d.ts +10 -0
- package/dist/recording/store.js +94 -0
- package/dist/recording/sync.d.ts +24 -0
- package/dist/recording/sync.js +126 -0
- package/dist/recording/types.d.ts +45 -0
- package/dist/recording/types.js +2 -0
- package/dist/release/drainControl.d.ts +54 -0
- package/dist/release/drainControl.js +137 -0
- package/dist/release/drainPhase.d.ts +37 -0
- package/dist/release/drainPhase.js +161 -0
- package/dist/release/index.d.ts +11 -0
- package/dist/release/index.js +11 -0
- package/dist/release/ledger.d.ts +75 -0
- package/dist/release/ledger.js +111 -0
- package/dist/release/notify.d.ts +58 -0
- package/dist/release/notify.js +126 -0
- package/dist/release/pending.d.ts +35 -0
- package/dist/release/pending.js +60 -0
- package/dist/release/postDeploy.d.ts +32 -0
- package/dist/release/postDeploy.js +62 -0
- package/dist/release/releaseDefaults.d.ts +9 -0
- package/dist/release/releaseDefaults.js +115 -0
- package/dist/release/releaseDocker.d.ts +38 -0
- package/dist/release/releaseDocker.js +94 -0
- package/dist/release/releaseTypes.d.ts +94 -0
- package/dist/release/releaseTypes.js +1 -0
- package/dist/release/runRelease.d.ts +9 -0
- package/dist/release/runRelease.js +218 -0
- package/dist/release/swap.d.ts +23 -0
- package/dist/release/swap.js +55 -0
- package/dist/release/types.d.ts +50 -0
- package/dist/release/types.js +29 -0
- package/dist/report/index.d.ts +1 -0
- package/dist/report/index.js +1 -0
- package/dist/report/recording.d.ts +57 -0
- package/dist/report/recording.js +26 -0
- package/dist/report/types.d.ts +58 -0
- package/dist/runtime/container.js +8 -13
- package/dist/runtime/daimon/adapter.js +15 -4
- package/dist/runtime/daimon/config.d.ts +4 -0
- package/dist/runtime/daimon/config.js +53 -4
- package/dist/runtime/daimon/contract-manifest.json +1 -0
- package/dist/runtime/daimon/contract-manifest.sha256 +1 -0
- package/dist/runtime/daimon/contractManifest.d.ts +59 -8
- package/dist/runtime/daimon/contractManifest.js +26 -10
- package/dist/runtime/daimon/grokTurnLimits.d.ts +25 -0
- package/dist/runtime/daimon/grokTurnLimits.js +51 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +17 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.js +17 -0
- package/dist/runtime/daimon/grokWorkerContract.d.ts +5 -0
- package/dist/runtime/daimon/grokWorkerContract.js +13 -1
- package/dist/runtime/daimon/recording.d.ts +19 -0
- package/dist/runtime/daimon/recording.js +50 -0
- package/dist/runtime/daimon/scheduleAuthority.d.ts +8 -0
- package/dist/runtime/daimon/scheduleAuthority.js +19 -5
- package/dist/runtime/daimon/wakeMoments.d.ts +15 -0
- package/dist/runtime/daimon/wakeMoments.js +17 -0
- package/dist/runtime/daimonInstall.d.ts +3 -0
- package/dist/runtime/daimonInstall.js +25 -0
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.js +1 -0
- package/dist/runtime/install.d.ts +2 -0
- package/dist/runtime/install.js +1 -0
- package/dist/runtime/openclaw/adapter.js +3 -0
- package/dist/runtime/pi/adapter.js +3 -0
- package/dist/runtime/pi/containerTargets.js +6 -0
- package/dist/runtime/picoclaw/adapter.js +3 -0
- package/dist/runtime/registry.d.ts +3 -0
- package/dist/runtime/registry.js +13 -1
- package/dist/runtime/types.d.ts +15 -0
- package/dist/runtime/usageLedgerRead.d.ts +6 -0
- package/dist/runtime/usageLedgerRead.js +3 -3
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/shared/recording.d.ts +8 -0
- package/dist/shared/recording.js +25 -0
- package/dist/target/dockerCommandExecutorCore.js +1 -1
- package/dist/target/dockerTargetBinding.js +2 -1
- package/dist/volume/feedLand.d.ts +31 -0
- package/dist/volume/feedLand.js +174 -0
- package/dist/volume/feedLandings.d.ts +45 -0
- package/dist/volume/feedLandings.js +111 -0
- package/dist/volume/feedLayout.d.ts +61 -0
- package/dist/volume/feedLayout.js +234 -0
- package/dist/volume/feedLock.d.ts +7 -0
- package/dist/volume/feedLock.js +131 -0
- package/dist/volume/feedManifest.d.ts +27 -0
- package/dist/volume/feedManifest.js +123 -0
- package/dist/volume/feedPrepare.d.ts +16 -0
- package/dist/volume/feedPrepare.js +228 -0
- package/dist/volume/feedProject.d.ts +39 -0
- package/dist/volume/feedProject.js +92 -0
- package/dist/volume/feedRecord.d.ts +55 -0
- package/dist/volume/feedRecord.js +148 -0
- package/dist/volume/feedRef.d.ts +43 -0
- package/dist/volume/feedRef.js +117 -0
- package/dist/volume/feedRefresh.d.ts +15 -0
- package/dist/volume/feedRefresh.js +187 -0
- package/dist/volume/feedSource.d.ts +66 -0
- package/dist/volume/feedSource.js +104 -0
- package/dist/volume/feedTarget.d.ts +70 -0
- package/dist/volume/feedTarget.js +9 -0
- package/dist/volume/feedTestKit.d.ts +11 -0
- package/dist/volume/feedTestKit.js +45 -0
- package/dist/volume/feedVerify.d.ts +18 -0
- package/dist/volume/feedVerify.js +104 -0
- package/dist/volume/index.d.ts +13 -0
- package/dist/volume/index.js +13 -0
- package/moltnet-releases.json +4 -4
- package/package.json +3 -3
- package/runtimes.yaml +8 -6
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { DocsBlock,
|
|
1
|
+
import { DocsBlock, Secret, SkillReference } from "../manifest/index.js";
|
|
2
2
|
import { StringMap } from "../shared/index.js";
|
|
3
3
|
import { ResolvedDocument, ResolvedPackage, ResolvedSkill } from "./types.js";
|
|
4
4
|
export declare const mergeSkills: (sharedSkills?: SkillReference[], localSkills?: SkillReference[]) => SkillReference[];
|
|
5
5
|
export declare const mergeResolvedSkills: (sharedSkills?: ResolvedSkill[], localSkills?: ResolvedSkill[]) => ResolvedSkill[];
|
|
6
6
|
export declare const mergePackages: (sharedPackages?: ResolvedPackage[], localPackages?: ResolvedPackage[]) => ResolvedPackage[];
|
|
7
|
-
export declare const mergeMcpServers: (sharedServers?: McpServer[], localServers?: McpServer[]) => McpServer[];
|
|
8
7
|
export declare const mergeSecrets: (sharedSecrets?: Secret[], localSecrets?: Secret[]) => Secret[];
|
|
9
8
|
export declare const mergeEnv: (sharedEnv?: StringMap, localEnv?: StringMap) => StringMap;
|
|
10
9
|
export declare const loadResolvedDocuments: (manifestPath: string, docs: DocsBlock | undefined) => Promise<ResolvedDocument[]>;
|
|
@@ -13,7 +13,6 @@ const mergeByKey = (sharedValues, localValues, getKey) => {
|
|
|
13
13
|
export const mergeSkills = (sharedSkills = [], localSkills = []) => mergeByKey(sharedSkills, localSkills, (skill) => skill.ref);
|
|
14
14
|
export const mergeResolvedSkills = (sharedSkills = [], localSkills = []) => mergeByKey(sharedSkills, localSkills, (skill) => skill.ref);
|
|
15
15
|
export const mergePackages = (sharedPackages = [], localPackages = []) => mergeByKey(sharedPackages, localPackages, (pkg) => `${pkg.manager}::${pkg.name}`);
|
|
16
|
-
export const mergeMcpServers = (sharedServers = [], localServers = []) => mergeByKey(sharedServers, localServers, (server) => server.name);
|
|
17
16
|
export const mergeSecrets = (sharedSecrets = [], localSecrets = []) => mergeByKey(sharedSecrets, localSecrets, (secret) => secret.name);
|
|
18
17
|
export const mergeEnv = (sharedEnv = {}, localEnv = {}) => ({
|
|
19
18
|
...sharedEnv,
|
|
@@ -25,7 +25,8 @@ const resolveAuthRequirements = async (inputPath) => {
|
|
|
25
25
|
addProjectSecret(secret);
|
|
26
26
|
}
|
|
27
27
|
for (const server of node.value.shared.mcpServers) {
|
|
28
|
-
|
|
28
|
+
// An opt-in server's secret is required only through the members that select it.
|
|
29
|
+
if (server.auth?.secret && server.opt_in !== true) {
|
|
29
30
|
addProjectSecret({ name: server.auth.secret, required: true });
|
|
30
31
|
}
|
|
31
32
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Clock directories are public by contract; prove the sibling mask in the worker's mount namespace. */
|
|
2
|
+
export declare const probeTrainingSiblingClock: (slot: number, target: string, execute?: (command: string, args: string[], options: {
|
|
3
|
+
timeout: number;
|
|
4
|
+
}) => Promise<{
|
|
5
|
+
stdout: string;
|
|
6
|
+
}>) => Promise<boolean>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { SpawnfileError } from "../../../shared/index.js";
|
|
4
|
+
import { trainingSlotPaths } from "./paths.js";
|
|
5
|
+
const run = promisify(execFile);
|
|
6
|
+
const quote = (value) => `'${value.replace(/'/gu, `'"'"'`)}'`;
|
|
7
|
+
/** Clock directories are public by contract; prove the sibling mask in the worker's mount namespace. */
|
|
8
|
+
export const probeTrainingSiblingClock = async (slot, target, execute = run) => {
|
|
9
|
+
const p = trainingSlotPaths(slot);
|
|
10
|
+
const script = [
|
|
11
|
+
'set -eu',
|
|
12
|
+
`cat ${quote(p.clockFile)} >/dev/null`,
|
|
13
|
+
// Use the same mode-000 directory bind as Grok's deny mounts. Neither an unavailable
|
|
14
|
+
// namespace nor a hidden own clock is a successful denial.
|
|
15
|
+
`blocked=$(mktemp -d ${quote(`${p.privateTmp}/clock-probe.XXXXXX`)})`,
|
|
16
|
+
'trap \'chmod 700 "$blocked"; rmdir "$blocked"\' EXIT',
|
|
17
|
+
'chmod 000 "$blocked"',
|
|
18
|
+
`bwrap --die-with-parent --cap-drop ALL --ro-bind / / --dev /dev --ro-bind "$blocked" ${quote(target)} -- /bin/sh -ceu ${quote(`cat ${quote(p.clockFile)} >/dev/null; if ls -A ${quote(target)} >/dev/null 2>&1; then echo reachable; else echo denied; fi`)}`
|
|
19
|
+
].join("\n");
|
|
20
|
+
const result = await execute("setpriv", ["--clear-groups", `--reuid=${p.workerUid}`, `--regid=${p.workerUid}`,
|
|
21
|
+
"--inh-caps=-all", "--ambient-caps=-all", "--bounding-set=-all", "--", "/bin/sh", "-ceu", script], { timeout: 10_000 });
|
|
22
|
+
if (result.stdout.trim() === "denied")
|
|
23
|
+
return true;
|
|
24
|
+
if (result.stdout.trim() === "reachable")
|
|
25
|
+
return false;
|
|
26
|
+
throw new SpawnfileError("runtime_error", "Training clock canary returned no verified verdict");
|
|
27
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
/**
|
|
3
|
-
* `spawnfile.training-broker.
|
|
3
|
+
* `spawnfile.training-broker.v2`: the only thing the host tells the
|
|
4
4
|
* broker-capable training container about its slot. It is data, never code —
|
|
5
5
|
* the image's own Spawnfile distribution renders the provisioning from it with
|
|
6
6
|
* the same renderers production uses, so no host-written executable is ever
|
|
@@ -11,7 +11,9 @@ import { z } from "zod";
|
|
|
11
11
|
* the named realm volume.
|
|
12
12
|
*/
|
|
13
13
|
export declare const trainingBrokerDeclarationSchema: z.ZodObject<{
|
|
14
|
-
version: z.ZodLiteral<"spawnfile.training-broker.
|
|
14
|
+
version: z.ZodLiteral<"spawnfile.training-broker.v2">;
|
|
15
|
+
maxRunRequests: z.ZodDefault<z.ZodNumber>;
|
|
16
|
+
slots: z.ZodDefault<z.ZodNumber>;
|
|
15
17
|
engine: z.ZodLiteral<"grok">;
|
|
16
18
|
agentId: z.ZodString;
|
|
17
19
|
model: z.ZodEnum<{
|
|
@@ -3,7 +3,7 @@ import { z } from "zod";
|
|
|
3
3
|
import { DAIMON_GROK_BROKER_MODELS, DAIMON_GROK_BROKER_REASONING_EFFORTS, DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
|
|
4
4
|
const canonical = z.string().min(2).max(4_096).refine((value) => path.posix.isAbsolute(value) && path.posix.normalize(value) === value && !value.endsWith("/") && !value.includes("\0"), "canonical absolute path");
|
|
5
5
|
/**
|
|
6
|
-
* `spawnfile.training-broker.
|
|
6
|
+
* `spawnfile.training-broker.v2`: the only thing the host tells the
|
|
7
7
|
* broker-capable training container about its slot. It is data, never code —
|
|
8
8
|
* the image's own Spawnfile distribution renders the provisioning from it with
|
|
9
9
|
* the same renderers production uses, so no host-written executable is ever
|
|
@@ -14,7 +14,9 @@ const canonical = z.string().min(2).max(4_096).refine((value) => path.posix.isAb
|
|
|
14
14
|
* the named realm volume.
|
|
15
15
|
*/
|
|
16
16
|
export const trainingBrokerDeclarationSchema = z.strictObject({
|
|
17
|
-
version: z.literal("spawnfile.training-broker.
|
|
17
|
+
version: z.literal("spawnfile.training-broker.v2"),
|
|
18
|
+
maxRunRequests: z.number().int().positive().max(Number.MAX_SAFE_INTEGER).default(1000),
|
|
19
|
+
slots: z.number().int().min(1).max(8).default(4),
|
|
18
20
|
engine: z.literal("grok"),
|
|
19
21
|
agentId: z.string().min(1).max(128).regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u),
|
|
20
22
|
model: z.enum(DAIMON_GROK_BROKER_MODELS),
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
1
|
+
import { execFile, spawn } from "node:child_process";
|
|
2
2
|
import { randomBytes } from "node:crypto";
|
|
3
3
|
import { lstat, readFile } from "node:fs/promises";
|
|
4
4
|
import os from "node:os";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { renderTrainingBrokerProvisioning } from "./provisioning.js";
|
|
7
|
+
import { stageTrainingEvaluatorSecret } from "./evaluatorSecrets.js";
|
|
8
|
+
import { startBrokerProcesses, stopBrokerProcesses } from "./processes.js";
|
|
9
|
+
import { resetTrainingBrokerSlotAsOrganization } from "./reset.js";
|
|
5
10
|
import path from "node:path";
|
|
6
11
|
import { SpawnfileError } from "../../../shared/index.js";
|
|
7
12
|
import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
|
|
@@ -10,7 +15,7 @@ import { loadDaimonProjectionModule, resolveTrainingGrokProjection } from "./pro
|
|
|
10
15
|
import { resolveTrainingGrokRegistration } from "./registration.js";
|
|
11
16
|
import { createTrainingSlotRuntime } from "./runtime.js";
|
|
12
17
|
import { createTrainingSlotSupervisor, serveTrainingSlotSupervisor, startTrainingSlot } from "./supervisor.js";
|
|
13
|
-
import { DAIMON_ORGANIZATION_UID, TRAINING_BOOTSTRAP_MOUNT, TRAINING_BROKER_DECLARATION_FILE, TRAINING_GRANT_HOME_ROOT, TRAINING_SUPERVISOR_SOCKET } from "./paths.js";
|
|
18
|
+
import { trainingSlotDescriptors, assertTrainingSlotsDocument, TRAINING_SLOTS_FILE, DAIMON_ORGANIZATION_UID, TRAINING_BOOTSTRAP_MOUNT, TRAINING_BROKER_DECLARATION_FILE, TRAINING_GRANT_HOME_ROOT, TRAINING_SUPERVISOR_SOCKET } from "./paths.js";
|
|
14
19
|
export const TRAINING_GROK_BROKER_CONTROL_SOCKET_ENV = "PAIDEIA_GROK_BROKER_CONTROL_SOCKET";
|
|
15
20
|
export const TRAINING_GROK_GRANT_HOME_ROOT_ENV = "PAIDEIA_GROK_GRANT_HOME_ROOT";
|
|
16
21
|
export const TRAINING_ENTRYPOINT_COMMAND = "/opt/training/bin/train";
|
|
@@ -57,23 +62,32 @@ export const runTrainingBrokerEntrypoint = async (options) => {
|
|
|
57
62
|
throw new SpawnfileError("runtime_error", "The broker-capable training container must start as root");
|
|
58
63
|
const declaration = parseTrainingBrokerDeclaration(JSON.parse(await readFile(options.declarationPath ?? TRAINING_BROKER_DECLARATION_FILE, "utf8")));
|
|
59
64
|
await assertBootstrap(declaration);
|
|
60
|
-
const
|
|
65
|
+
const descriptors = trainingSlotDescriptors(declaration.slots);
|
|
66
|
+
const document = JSON.parse(await readFile(TRAINING_SLOTS_FILE, "utf8"));
|
|
67
|
+
assertTrainingSlotsDocument(document, declaration.slots);
|
|
68
|
+
const registrations = descriptors.map(p => resolveTrainingGrokRegistration({ ...declaration, slot: p.slot }));
|
|
61
69
|
const daimon = await (options.loadDaimon ?? loadDaimonProjectionModule)();
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
70
|
+
const reset = resetTrainingBrokerSlotAsOrganization;
|
|
71
|
+
const runtimes = await Promise.all(registrations.map(async (registration) => {
|
|
72
|
+
const { projectionSha256 } = await resolveTrainingGrokProjection(declaration, registration, daimon);
|
|
73
|
+
return createTrainingSlotRuntime({ declaration, registration, projectionSha256, reset });
|
|
74
|
+
}));
|
|
75
|
+
await stageTrainingEvaluatorSecret();
|
|
76
|
+
await promisify(execFile)("/bin/bash", ["--noprofile", "--norc", "-ceu", renderTrainingBrokerProvisioning(registrations, declaration.maxRunRequests).join("\n")], { maxBuffer: 8 * 1024 * 1024 });
|
|
77
|
+
const children = await startBrokerProcesses({ log });
|
|
78
|
+
let server;
|
|
79
|
+
try {
|
|
80
|
+
for (const runtime of runtimes)
|
|
81
|
+
await startTrainingSlot(runtime, randomBytes(32).toString("hex"));
|
|
82
|
+
const supervisor = createTrainingSlotSupervisor({ runtimes, organizationUid: declaration.organizationUid });
|
|
83
|
+
server = serveTrainingSlotSupervisor(supervisor, TRAINING_SUPERVISOR_SOCKET, log, declaration.organizationUid);
|
|
84
|
+
log(`provisioned ${registrations.length} training slots with one broker process set`);
|
|
85
|
+
return await runTrainingChild(options.argv, declaration, log);
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
server?.close();
|
|
89
|
+
await stopBrokerProcesses(children, log);
|
|
90
|
+
}
|
|
77
91
|
};
|
|
78
92
|
/**
|
|
79
93
|
* `train` as uid 2000 with an empty bounding set, proven inside the child
|
|
@@ -98,6 +112,7 @@ const runTrainingChild = (argv, declaration, log) => new Promise((resolve) => {
|
|
|
98
112
|
...process.env,
|
|
99
113
|
[TRAINING_GROK_BROKER_CONTROL_SOCKET_ENV]: DAIMON_GROK_ENGINE_BROKER.controlSocketPath,
|
|
100
114
|
[TRAINING_GROK_GRANT_HOME_ROOT_ENV]: TRAINING_GRANT_HOME_ROOT,
|
|
115
|
+
PAIDEIA_TRAINING_SLOTS_FILE: TRAINING_SLOTS_FILE,
|
|
101
116
|
HOME: "/home/training"
|
|
102
117
|
}
|
|
103
118
|
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { chmod, chown, lstat, mkdir, open } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { TRAINING_TYPESAFE_SECRET_FILE, TRAINING_TYPESAFE_SECRET_INGRESS } from "../container/evaluators.js";
|
|
5
|
+
import { DAIMON_ORGANIZATION_UID } from "./paths.js";
|
|
6
|
+
/** Root stages into tmpfs before provisioning drops directory ownership and evaluator capabilities. */
|
|
7
|
+
export const stageTrainingEvaluatorSecret = async (env = process.env) => {
|
|
8
|
+
if (env.PAIDEIA_TYPESAFE_SECRET_FILE === undefined)
|
|
9
|
+
return;
|
|
10
|
+
if (process.getuid?.() !== 0 || env.PAIDEIA_TYPESAFE_SECRET_FILE !== TRAINING_TYPESAFE_SECRET_FILE) {
|
|
11
|
+
throw Error("Invalid evaluator secret staging declaration");
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const ingress = path.posix.dirname(TRAINING_TYPESAFE_SECRET_INGRESS);
|
|
15
|
+
const parent = await lstat(ingress);
|
|
16
|
+
if (!parent.isDirectory() || parent.isSymbolicLink() || parent.uid !== 0)
|
|
17
|
+
throw Error("Invalid ingress directory");
|
|
18
|
+
// This directory is tmpfs, never the mounted credential inode.
|
|
19
|
+
await chmod(ingress, 0o700);
|
|
20
|
+
const source = await open(TRAINING_TYPESAFE_SECRET_INGRESS, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
21
|
+
let bytes;
|
|
22
|
+
try {
|
|
23
|
+
const info = await source.stat();
|
|
24
|
+
if (!info.isFile() || info.nlink !== 1 || info.size < 1 || info.size > 64 * 1024)
|
|
25
|
+
throw Error("Invalid ingress leaf");
|
|
26
|
+
const buffer = Buffer.alloc(64 * 1024 + 1);
|
|
27
|
+
const { bytesRead } = await source.read(buffer, 0, buffer.length, 0);
|
|
28
|
+
const after = await source.stat();
|
|
29
|
+
if (bytesRead !== info.size || after.size !== info.size || after.mtimeMs !== info.mtimeMs || after.ctimeMs !== info.ctimeMs) {
|
|
30
|
+
throw Error("Secret changed while staging");
|
|
31
|
+
}
|
|
32
|
+
bytes = buffer.subarray(0, bytesRead);
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
await source.close();
|
|
36
|
+
}
|
|
37
|
+
const destination = path.posix.dirname(TRAINING_TYPESAFE_SECRET_FILE);
|
|
38
|
+
await mkdir(destination, { mode: 0o700 });
|
|
39
|
+
const target = await open(TRAINING_TYPESAFE_SECRET_FILE, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
40
|
+
try {
|
|
41
|
+
await target.writeFile(bytes);
|
|
42
|
+
await target.sync();
|
|
43
|
+
await target.chown(DAIMON_ORGANIZATION_UID, DAIMON_ORGANIZATION_UID);
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
bytes.fill(0);
|
|
47
|
+
await target.close();
|
|
48
|
+
}
|
|
49
|
+
await chown(destination, DAIMON_ORGANIZATION_UID, DAIMON_ORGANIZATION_UID);
|
|
50
|
+
const info = await lstat(TRAINING_TYPESAFE_SECRET_FILE), directory = await lstat(destination);
|
|
51
|
+
if (info.uid !== DAIMON_ORGANIZATION_UID || info.gid !== DAIMON_ORGANIZATION_UID || (info.mode & 0o777) !== 0o600 ||
|
|
52
|
+
directory.uid !== DAIMON_ORGANIZATION_UID || directory.gid !== DAIMON_ORGANIZATION_UID || (directory.mode & 0o777) !== 0o700) {
|
|
53
|
+
throw Error("Invalid evaluator secret ownership");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Filesystem errors may contain credential bytes supplied by a transport; emit only a fixed diagnostic.
|
|
58
|
+
throw Error("Evaluator secret staging failed");
|
|
59
|
+
}
|
|
60
|
+
};
|
|
@@ -2,9 +2,10 @@ export { parseTrainingBrokerDeclaration, trainingBrokerDeclarationSchema, type T
|
|
|
2
2
|
export { assertNotDesktopGrokAuth, desktopGrokAuthPaths, runTrainingBrokerEntrypoint, trainingChildArgv, TRAINING_GROK_BROKER_CONTROL_SOCKET_ENV, TRAINING_GROK_GRANT_HOME_ROOT_ENV } from "./entrypoint.js";
|
|
3
3
|
export { brokerProcessPlan, startBrokerProcesses, stopBrokerProcesses } from "./processes.js";
|
|
4
4
|
export { loadDaimonProjectionModule, resolveTrainingGrokProjection, trainingOrganizationRuntimeConfig } from "./projection.js";
|
|
5
|
-
export { renderTrainingBrokerProvisioning, renderTrainingIdentities, trainingSlotDirectories } from "./provisioning.js";
|
|
5
|
+
export { renderTrainingBrokerProvisioning, renderTrainingIdentities, renderTrainingSlotProvisioning, trainingSlotDirectories } from "./provisioning.js";
|
|
6
6
|
export { buildTrainingSlotReceipt, readGrokExecutableSha256, resolveBackingFilesystem, resolveTrainingCanaries } from "./receipt.js";
|
|
7
7
|
export { resolveTrainingGrokDenyPaths, resolveTrainingGrokRegistration } from "./registration.js";
|
|
8
|
-
export {
|
|
8
|
+
export { resetTrainingBrokerSlot, resetTrainingBrokerSlotAsOrganization } from "./reset.js";
|
|
9
|
+
export { createTrainingSlotRuntime, renderTrainingSlotWipe } from "./runtime.js";
|
|
9
10
|
export { assertTrainingSupervisorSocketIdentity, createTrainingSlotSupervisor, serveTrainingSlotSupervisor, TRAINING_SUPERVISOR_PROTOCOL, type TrainingSlotRuntime } from "./supervisor.js";
|
|
10
11
|
export * from "./paths.js";
|
|
@@ -2,9 +2,10 @@ export { parseTrainingBrokerDeclaration, trainingBrokerDeclarationSchema } from
|
|
|
2
2
|
export { assertNotDesktopGrokAuth, desktopGrokAuthPaths, runTrainingBrokerEntrypoint, trainingChildArgv, TRAINING_GROK_BROKER_CONTROL_SOCKET_ENV, TRAINING_GROK_GRANT_HOME_ROOT_ENV } from "./entrypoint.js";
|
|
3
3
|
export { brokerProcessPlan, startBrokerProcesses, stopBrokerProcesses } from "./processes.js";
|
|
4
4
|
export { loadDaimonProjectionModule, resolveTrainingGrokProjection, trainingOrganizationRuntimeConfig } from "./projection.js";
|
|
5
|
-
export { renderTrainingBrokerProvisioning, renderTrainingIdentities, trainingSlotDirectories } from "./provisioning.js";
|
|
5
|
+
export { renderTrainingBrokerProvisioning, renderTrainingIdentities, renderTrainingSlotProvisioning, trainingSlotDirectories } from "./provisioning.js";
|
|
6
6
|
export { buildTrainingSlotReceipt, readGrokExecutableSha256, resolveBackingFilesystem, resolveTrainingCanaries } from "./receipt.js";
|
|
7
7
|
export { resolveTrainingGrokDenyPaths, resolveTrainingGrokRegistration } from "./registration.js";
|
|
8
|
-
export {
|
|
8
|
+
export { resetTrainingBrokerSlot, resetTrainingBrokerSlotAsOrganization } from "./reset.js";
|
|
9
|
+
export { createTrainingSlotRuntime, renderTrainingSlotWipe } from "./runtime.js";
|
|
9
10
|
export { assertTrainingSupervisorSocketIdentity, createTrainingSlotSupervisor, serveTrainingSlotSupervisor, TRAINING_SUPERVISOR_PROTOCOL } from "./supervisor.js";
|
|
10
11
|
export * from "./paths.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { runTrainingBrokerEntrypoint } from "./entrypoint.js";
|
|
3
3
|
/**
|
|
4
4
|
* The broker-capable training image's root entrypoint process. The image ships
|
|
5
|
-
* it; the host supplies only the read-only `spawnfile.training-broker.
|
|
5
|
+
* it; the host supplies only the read-only `spawnfile.training-broker.v2`
|
|
6
6
|
* declaration and never a script, so no host executable enters the container.
|
|
7
7
|
*/
|
|
8
8
|
const main = async () => {
|
|
@@ -2,7 +2,7 @@ import { DAIMON_BROKER_UID, DAIMON_ORGANIZATION_UID } from "../../../runtime/dai
|
|
|
2
2
|
/**
|
|
3
3
|
* Every container path the broker-capable training container fixes.
|
|
4
4
|
*
|
|
5
|
-
* They are
|
|
5
|
+
* They are deterministic because three parties must agree on them
|
|
6
6
|
* without talking to each other: the root entrypoint that provisions them, the
|
|
7
7
|
* root slot supervisor that wipes and re-provisions them on recycle, and
|
|
8
8
|
* Paideia's native adapter, which writes them into `paideia.daimon-native.launch.v2`
|
|
@@ -10,7 +10,7 @@ import { DAIMON_BROKER_UID, DAIMON_ORGANIZATION_UID } from "../../../runtime/dai
|
|
|
10
10
|
* resolves a path, so each one must also be canonical and never a symlink; the
|
|
11
11
|
* provisioning program asserts that before a slot is used.
|
|
12
12
|
*
|
|
13
|
-
* Everything under `/run/training/
|
|
13
|
+
* Everything under `/run/training/slots/<i>` is per-trial state on tmpfs — never the
|
|
14
14
|
* Grok realm volume (R2). The realm volume holds only `auth.json` and the
|
|
15
15
|
* broker credential journal, so a recycle can wipe the slot without touching
|
|
16
16
|
* the one durable rotating credential.
|
|
@@ -19,20 +19,8 @@ export declare const TRAINING_RUN_ROOT = "/run/training/output";
|
|
|
19
19
|
export declare const TRAINING_SEALED_INPUTS_ROOT = "/run/training/inputs";
|
|
20
20
|
export declare const TRAINING_PAIDEIA_ROOT = "/run/paideia";
|
|
21
21
|
export declare const TRAINING_CONTEXT_FILE = "/run/paideia/context.json";
|
|
22
|
-
/** Host-written, read-only `spawnfile.training-broker.
|
|
22
|
+
/** Host-written, read-only `spawnfile.training-broker.v2` declaration the root entrypoint reads. */
|
|
23
23
|
export declare const TRAINING_BROKER_DECLARATION_FILE = "/run/paideia/training-broker.json";
|
|
24
|
-
export declare const TRAINING_SLOT_ROOT = "/run/training/slot";
|
|
25
|
-
export declare const TRAINING_SLOT_WORKSPACE = "/run/training/slot/workspace";
|
|
26
|
-
export declare const TRAINING_SLOT_RUNTIME_HOME = "/run/training/slot/runtime-home";
|
|
27
|
-
export declare const TRAINING_SLOT_STATE_ROOT = "/run/training/slot/state";
|
|
28
|
-
export declare const TRAINING_SLOT_ACCEPTANCE_STORE = "/run/training/slot/state/wake-acceptance";
|
|
29
|
-
/** Per-slot turn store. On tmpfs on purpose: a replayed turn from trial N must never satisfy trial N+1 (R2). */
|
|
30
|
-
export declare const TRAINING_SLOT_TURN_STORE = "/run/training/slot/turns";
|
|
31
|
-
export declare const TRAINING_SLOT_USAGE_DIRECTORY = "/run/training/slot/usage";
|
|
32
|
-
export declare const TRAINING_SLOT_USAGE_LEDGER = "/run/training/slot/usage/usage.jsonl";
|
|
33
|
-
export declare const TRAINING_SLOT_PREFLIGHT_RECEIPT = "/run/training/slot/preflight.json";
|
|
34
|
-
/** Supervisor-owned monotonic generation counter; survives a recycle, never a container restart. */
|
|
35
|
-
export declare const TRAINING_SLOT_GENERATION_FILE = "/run/training/slot/generation.json";
|
|
36
24
|
export declare const TRAINING_INFERENCE_DIRECTORY = "/run/training/inference";
|
|
37
25
|
export declare const TRAINING_INFERENCE_LEDGER = "/run/training/inference/inference.jsonl";
|
|
38
26
|
/** Judge grant homes: `2000:2000 0700`, denied to every worker uid. Paideia reads it as `PAIDEIA_GROK_GRANT_HOME_ROOT`. */
|
|
@@ -54,9 +42,6 @@ export declare const TRAINING_SUPERVISOR_DIRECTORY = "/run/training/supervisor";
|
|
|
54
42
|
export declare const TRAINING_SUPERVISOR_SOCKET = "/run/training/supervisor/control.sock";
|
|
55
43
|
export declare const TRAINING_SUPERVISOR_LOG = "/run/training/supervisor/supervisor.log";
|
|
56
44
|
export declare const TRAINING_WORKER_ROOT = "/var/lib/daimon-workers";
|
|
57
|
-
export declare const TRAINING_SLOT_INDEX = 0;
|
|
58
|
-
export declare const TRAINING_WORKER_UID: number;
|
|
59
|
-
export declare const TRAINING_WORKER_HOME: string;
|
|
60
45
|
/**
|
|
61
46
|
* Paideia's own fixed container paths (`containerPaths` in its native launch
|
|
62
47
|
* schema). They are *not* individual deny entries: Grok 1.0.34 materializes
|
|
@@ -82,43 +67,99 @@ export declare const TRAINING_CALLER_PROTECTED_PATHS: readonly ["/run/paideia/co
|
|
|
82
67
|
* tagged `context` — the caller-state role — since there is no other way to
|
|
83
68
|
* carry a path through that contract.
|
|
84
69
|
*/
|
|
85
|
-
export declare const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
export declare const
|
|
70
|
+
export declare const TRAINING_SLOTS_FILE = "/run/paideia/slots.json";
|
|
71
|
+
export declare const TRAINING_SLOTS_VERSION: "spawnfile.training-slots.v1";
|
|
72
|
+
export declare const TRAINING_DEFAULT_SLOTS = 4;
|
|
73
|
+
export declare const TRAINING_MAX_SLOTS = 8;
|
|
74
|
+
/** 100 ports per slot: offsets 0=Moltnet, 1=worker control, 2=bridge; 3..99 reserved. */
|
|
75
|
+
export declare const TRAINING_PORT_BASE = 20000;
|
|
76
|
+
export declare const TRAINING_PORT_STRIDE = 100;
|
|
77
|
+
export declare const TRAINING_BROKER_SOCKET_PATHS: readonly ["/run/daimon-engine-broker/control.sock", "/run/daimon-engine-broker/backend.sock", "/run/daimon-engine-broker/launcher.sock"];
|
|
78
|
+
export declare const TRAINING_TURN_STORE_ROOT = "/run/training/turns";
|
|
79
|
+
/** Persistent, broker-only run counter; never part of a slot recycle. */
|
|
80
|
+
export declare const TRAINING_RUN_REQUEST_STORE = "/run/training/request-budget";
|
|
81
|
+
export declare const assertTrainingSlotCount: (slots: number) => number;
|
|
82
|
+
export declare const trainingSlotPaths: (slot: number) => {
|
|
83
|
+
slot: number;
|
|
84
|
+
workerUid: number;
|
|
85
|
+
root: string;
|
|
86
|
+
workerHome: string;
|
|
87
|
+
workspace: string;
|
|
88
|
+
runtimeHome: string;
|
|
89
|
+
state: string;
|
|
90
|
+
acceptanceStore: string;
|
|
91
|
+
turns: string;
|
|
92
|
+
usageDirectory: string;
|
|
93
|
+
usageLedger: string;
|
|
94
|
+
preflightReceipt: string;
|
|
95
|
+
generationFile: string;
|
|
96
|
+
sealedInputsAttestation: string;
|
|
97
|
+
privateTmp: string;
|
|
98
|
+
clockDirectory: string;
|
|
99
|
+
clockFile: string;
|
|
100
|
+
ports: {
|
|
101
|
+
base: number;
|
|
102
|
+
stride: number;
|
|
103
|
+
moltnet: number;
|
|
104
|
+
workerControl: number;
|
|
105
|
+
bridge: number;
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
export type TrainingSlotPaths = ReturnType<typeof trainingSlotPaths>;
|
|
109
|
+
export type TrainingEvaluatorPath = {
|
|
94
110
|
role: "run-root" | "context" | "sealed-inputs" | "judge-home" | "slot-ledger";
|
|
95
111
|
path: string;
|
|
112
|
+
};
|
|
113
|
+
/** The complete additional projection deny set. Sibling roots and homes never nest with own masks. */
|
|
114
|
+
export declare const trainingEvaluatorPaths: (slot: number, slots: number) => TrainingEvaluatorPath[];
|
|
115
|
+
export declare const trainingSlotDescriptors: (slots?: number) => {
|
|
116
|
+
evaluatorPaths: TrainingEvaluatorPath[];
|
|
117
|
+
containerPaths: {
|
|
118
|
+
path: "/run/paideia/config.json" | "/run/paideia/control" | "/run/paideia/launch.json" | "/run/paideia/token" | "/run/paideia/env" | "/run/paideia/preparation.json" | "/run/paideia/repair.json";
|
|
119
|
+
}[];
|
|
120
|
+
controlRoot: string;
|
|
121
|
+
slot: number;
|
|
122
|
+
workerUid: number;
|
|
123
|
+
root: string;
|
|
124
|
+
workerHome: string;
|
|
125
|
+
workspace: string;
|
|
126
|
+
runtimeHome: string;
|
|
127
|
+
state: string;
|
|
128
|
+
acceptanceStore: string;
|
|
129
|
+
turns: string;
|
|
130
|
+
usageDirectory: string;
|
|
131
|
+
usageLedger: string;
|
|
132
|
+
preflightReceipt: string;
|
|
133
|
+
generationFile: string;
|
|
134
|
+
sealedInputsAttestation: string;
|
|
135
|
+
privateTmp: string;
|
|
136
|
+
clockDirectory: string;
|
|
137
|
+
clockFile: string;
|
|
138
|
+
ports: {
|
|
139
|
+
base: number;
|
|
140
|
+
stride: number;
|
|
141
|
+
moltnet: number;
|
|
142
|
+
workerControl: number;
|
|
143
|
+
bridge: number;
|
|
144
|
+
};
|
|
96
145
|
}[];
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
*/
|
|
115
|
-
/**
|
|
116
|
-
* The added deny set is exactly the launch's `evaluatorPaths`, so Spawnfile and
|
|
117
|
-
* Paideia hand Daimon's resolver the same list. `TRAINING_SLOT_STATE_ROOT` is
|
|
118
|
-
* deliberately absent: Daimon adds it itself, from the control root above.
|
|
119
|
-
*/
|
|
120
|
-
export declare const TRAINING_ADDED_DENY_PATHS: readonly string[];
|
|
121
|
-
/** Paths the provisioning program creates root-owned `0700` when absent, so every deny entry always has a target inode. */
|
|
146
|
+
export type TrainingSlotDescriptor = ReturnType<typeof trainingSlotDescriptors>[number];
|
|
147
|
+
export interface TrainingSlotsDocument {
|
|
148
|
+
schema: typeof TRAINING_SLOTS_VERSION;
|
|
149
|
+
slots: {
|
|
150
|
+
index: number;
|
|
151
|
+
workerUid: number;
|
|
152
|
+
roots: Record<string, string>;
|
|
153
|
+
ports: {
|
|
154
|
+
base: number;
|
|
155
|
+
count: number;
|
|
156
|
+
};
|
|
157
|
+
}[];
|
|
158
|
+
}
|
|
159
|
+
export declare const trainingSlotsDocument: (slots?: number) => TrainingSlotsDocument;
|
|
160
|
+
/** Both sides derive the descriptor bytes; a stale or edited bind must never certify a different pool. */
|
|
161
|
+
export declare const assertTrainingSlotsDocument: (value: unknown, slots: number) => void;
|
|
162
|
+
/** Shared deny targets exist before worker attestation; no per-slot subtree is touched here. */
|
|
122
163
|
export declare const TRAINING_OPTIONAL_DENY_DIRECTORIES: readonly string[];
|
|
123
164
|
/**
|
|
124
165
|
* Deny entries a launch may legitimately not have mounted. Everything else must
|
|
@@ -170,7 +211,6 @@ export declare const TRAINING_HOST_BIND_DENY_PATHS: readonly string[];
|
|
|
170
211
|
*/
|
|
171
212
|
export declare const TRAINING_SEALED_DENY_PATHS: readonly string[];
|
|
172
213
|
/** Spawnfile-owned per-route seal attestation, written by provisioning beside the slot preflight receipt. */
|
|
173
|
-
export declare const TRAINING_SEALED_INPUTS_ATTESTATION = "/run/training/slot/sealed-inputs.json";
|
|
174
214
|
/** The image-baked identity of the sealed inputs root, asserted before every slot and never writable at runtime. */
|
|
175
215
|
export declare const TRAINING_SEALED_INPUTS_IDENTITY: {
|
|
176
216
|
readonly uid: 0;
|
|
@@ -188,9 +228,9 @@ export declare const TRAINING_SEALED_INPUTS_IDENTITY: {
|
|
|
188
228
|
* anyway, so an undeclared one degrades to "left in place and reported" rather
|
|
189
229
|
* than a failed provision.
|
|
190
230
|
*/
|
|
191
|
-
export declare const
|
|
192
|
-
/**
|
|
193
|
-
export declare const
|
|
231
|
+
export declare const trainingWipeTargets: (slot: number) => readonly string[];
|
|
232
|
+
/** Broker-owned turns and clocks are reset through its control seam, never by filesystem deletion. */
|
|
233
|
+
export declare const trainingClearTargets: (slot: number) => readonly string[];
|
|
194
234
|
export declare const TRAINING_REALM_MOUNT: "/var/lib/spawnfile/daimon/grok-subscription-realm";
|
|
195
235
|
export declare const TRAINING_BOOTSTRAP_MOUNT: "/var/lib/spawnfile/daimon/grok-bootstrap-auth";
|
|
196
236
|
export { DAIMON_BROKER_UID, DAIMON_ORGANIZATION_UID };
|