spawnfile 0.1.14 → 0.1.18
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 +60 -159
- package/dist/audit/checksShared.d.ts +1 -1
- package/dist/auth/importers.d.ts +10 -0
- package/dist/auth/importers.js +46 -5
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/paths.d.ts +1 -1
- package/dist/auth/profileStore.js +13 -10
- package/dist/auth/targetSecretSourceFsIdentity.d.ts +40 -0
- package/dist/auth/targetSecretSourceFsIdentity.js +42 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +2 -0
- package/dist/auth/targetSecretSourceFsPublish.js +3 -1
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +2 -1
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +104 -71
- package/dist/auth/targetSecretSourceFsRead.js +5 -14
- package/dist/auth/trainingAuth.d.ts +21 -0
- package/dist/auth/trainingAuth.js +86 -0
- 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/auth/types.d.ts +1 -1
- package/dist/cli/authCommands.d.ts +1 -1
- package/dist/cli/authCommands.js +18 -5
- package/dist/cli/canaryCutoverCommand.d.ts +2 -0
- package/dist/cli/canaryCutoverCommand.js +30 -0
- package/dist/cli/capabilitiesCommand.d.ts +3 -0
- package/dist/cli/capabilitiesCommand.js +12 -0
- package/dist/cli/capabilitiesReceipt.d.ts +56 -0
- package/dist/cli/capabilitiesReceipt.js +56 -0
- package/dist/cli/compileBuildCommands.js +17 -0
- package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
- package/dist/cli/composedLifecycleContractSet.js +204 -0
- package/dist/cli/devCommands.js +6 -2
- package/dist/cli/downCommand.d.ts +2 -0
- package/dist/cli/downCommand.js +22 -8
- package/dist/cli/envFileOption.d.ts +18 -0
- package/dist/cli/envFileOption.js +20 -0
- package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
- package/dist/cli/evidenceExportHelperCommand.js +51 -0
- package/dist/cli/index.js +12 -3
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +3 -1
- package/dist/cli/lifecycleMachine.d.ts +7 -1
- package/dist/cli/lifecycleMachine.js +2 -2
- package/dist/cli/lifecyclePlan.d.ts +1 -0
- package/dist/cli/lifecyclePlan.js +2 -0
- package/dist/cli/paideiaDelegation.d.ts +18 -0
- package/dist/cli/paideiaDelegation.js +211 -0
- package/dist/cli/paideiaSupervisor.d.ts +17 -0
- package/dist/cli/paideiaSupervisor.js +48 -0
- package/dist/cli/productStateCloneCommand.d.ts +2 -0
- package/dist/cli/productStateCloneCommand.js +34 -0
- 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 +19 -3
- package/dist/cli/runCli.js +43 -10
- package/dist/cli/runPublishCommands.js +5 -3
- package/dist/cli/targetCommands.d.ts +4 -7
- package/dist/cli/targetCommands.js +16 -46
- package/dist/cli/targetConfigPreparedPlan.d.ts +3 -0
- package/dist/cli/targetConfigPreparedPlan.js +74 -0
- package/dist/cli/targetConfigResolver.d.ts +3 -0
- package/dist/cli/targetConfigResolver.js +111 -0
- package/dist/cli/targetConfigResolverCommand.d.ts +6 -0
- package/dist/cli/targetConfigResolverCommand.js +43 -0
- package/dist/cli/targetConfigResolverContracts.d.ts +56 -0
- package/dist/cli/targetConfigResolverContracts.js +30 -0
- package/dist/cli/targetConfigResolverDocker.d.ts +4 -0
- package/dist/cli/targetConfigResolverDocker.js +47 -0
- package/dist/cli/targetConfigResolverValidation.d.ts +10 -0
- package/dist/cli/targetConfigResolverValidation.js +94 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +2 -0
- package/dist/cli/targetDefaultAuthorities.js +3 -0
- package/dist/cli/targetDefaultConfig.d.ts +7 -0
- package/dist/cli/targetDefaultConfig.js +22 -5
- package/dist/cli/targetDefaultConfigStdin.js +7 -1
- package/dist/cli/targetDefaultHandlerFactory.js +23 -2
- package/dist/cli/targetDefaultHandlers.d.ts +2 -2
- package/dist/cli/targetProductionCommands.d.ts +5 -0
- package/dist/cli/targetProductionCommands.js +45 -0
- package/dist/cli/trainCommand.d.ts +3 -0
- package/dist/cli/trainCommand.js +114 -0
- package/dist/cli/upCommand.js +40 -7
- package/dist/cli/upLifecycleRecovery.d.ts +2 -2
- package/dist/cli/upLifecycleRecovery.js +188 -44
- package/dist/cli/usageCommand.d.ts +40 -0
- package/dist/cli/usageCommand.js +284 -0
- package/dist/cli/usageCommandLive.d.ts +84 -0
- package/dist/cli/usageCommandLive.js +95 -0
- package/dist/cli/usageDeploymentSource.d.ts +9 -0
- package/dist/cli/usageDeploymentSource.js +22 -0
- package/dist/cli/volumeCommands.d.ts +8 -0
- package/dist/cli/volumeCommands.js +53 -0
- package/dist/cli/workspaceResourceMigrationCommand.d.ts +8 -0
- package/dist/cli/workspaceResourceMigrationCommand.js +36 -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/buildCompilePlanTeams.d.ts +1 -1
- package/dist/compiler/buildCompilePlanTeams.js +6 -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 +5 -0
- package/dist/compiler/compileProject.d.ts +12 -0
- package/dist/compiler/compileProject.js +33 -3
- package/dist/compiler/compileProjectSupport.js +9 -0
- package/dist/compiler/containerArtifactSummaries.js +1 -0
- package/dist/compiler/containerArtifacts.d.ts +7 -5
- package/dist/compiler/containerArtifacts.js +77 -41
- package/dist/compiler/containerArtifactsPlans.d.ts +1 -1
- package/dist/compiler/containerArtifactsPlans.js +31 -7
- package/dist/compiler/containerArtifactsRender.d.ts +2 -1
- package/dist/compiler/containerArtifactsRender.js +91 -58
- package/dist/compiler/containerArtifactsTypes.d.ts +15 -0
- package/dist/compiler/containerBackedMountRender.d.ts +56 -0
- package/dist/compiler/containerBackedMountRender.js +101 -0
- package/dist/compiler/containerDaimonBrokerRender.d.ts +114 -0
- package/dist/compiler/containerDaimonBrokerRender.js +194 -0
- package/dist/compiler/containerDaimonGrokTaskClock.d.ts +5 -0
- package/dist/compiler/containerDaimonGrokTaskClock.js +29 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +130 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +197 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.js +281 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +25 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.js +204 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.js +291 -0
- package/dist/compiler/containerEntrypointRender.d.ts +7 -0
- package/dist/compiler/containerEntrypointRender.js +28 -22
- package/dist/compiler/containerPersistentMounts.d.ts +30 -0
- package/dist/compiler/containerPersistentMounts.js +66 -0
- package/dist/compiler/containerReadinessPaths.d.ts +1 -0
- package/dist/compiler/containerReadinessPaths.js +1 -0
- package/dist/compiler/containerRuntimeLinkMaterializer.d.ts +2 -0
- package/dist/compiler/containerRuntimeLinkMaterializer.js +12 -0
- package/dist/compiler/containerRuntimeReadinessRender.d.ts +7 -0
- package/dist/compiler/containerRuntimeReadinessRender.js +40 -0
- package/dist/compiler/containerStateOwnershipRender.d.ts +4 -0
- package/dist/compiler/containerStateOwnershipRender.js +75 -0
- package/dist/compiler/containerTargetResources.d.ts +32 -1
- package/dist/compiler/containerTargetResources.js +115 -15
- package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
- package/dist/compiler/containerVolumeBootstrap.js +3 -0
- package/dist/compiler/containerWorkspaceResourceRender.js +52 -1
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +2 -2
- package/dist/compiler/daimonTelemetryArtifacts.js +5 -10
- package/dist/compiler/deploymentLineage.d.ts +40 -0
- package/dist/compiler/deploymentLineage.js +50 -0
- package/dist/compiler/index.d.ts +5 -0
- package/dist/compiler/index.js +5 -0
- package/dist/compiler/initProject.d.ts +2 -0
- package/dist/compiler/initProject.js +39 -1
- package/dist/compiler/localMoltnetAuthority.d.ts +64 -0
- package/dist/compiler/localMoltnetAuthority.js +177 -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/memoryArtifacts.d.ts +1 -1
- package/dist/compiler/memoryArtifacts.js +108 -32
- package/dist/compiler/modelEnv.d.ts +5 -0
- package/dist/compiler/modelEnv.js +8 -2
- package/dist/compiler/moltnetArtifactPaths.d.ts +17 -12
- package/dist/compiler/moltnetArtifactPaths.js +17 -15
- package/dist/compiler/moltnetArtifactTypes.d.ts +11 -0
- package/dist/compiler/moltnetArtifacts.d.ts +1 -1
- package/dist/compiler/moltnetArtifacts.js +53 -12
- package/dist/compiler/moltnetBinaries.d.ts +16 -4
- package/dist/compiler/moltnetBinaries.js +46 -6
- package/dist/compiler/moltnetClientConfig.js +1 -1
- package/dist/compiler/moltnetConfigLowering.d.ts +3 -1
- package/dist/compiler/moltnetConfigLowering.js +30 -6
- package/dist/compiler/moltnetNodeConfig.js +1 -1
- package/dist/compiler/moltnetReleaseAuthority.d.ts +24 -1
- package/dist/compiler/moltnetReleaseAuthority.js +33 -4
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -1
- package/dist/compiler/moltnetRepresentativeResolution.js +2 -2
- package/dist/compiler/moltnetResolution.js +9 -15
- package/dist/compiler/moltnetRoomMemberships.js +20 -5
- package/dist/compiler/moltnetRoomPolicyCompatibility.d.ts +1 -1
- package/dist/compiler/moltnetRoomPolicyCompatibility.js +3 -1
- package/dist/compiler/moltnetRuntimeConfig.d.ts +1 -1
- package/dist/compiler/moltnetRuntimeConfig.js +22 -2
- package/dist/compiler/moltnetServerPlans.js +19 -0
- package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
- package/dist/compiler/organizationExternalParticipants.js +176 -0
- package/dist/compiler/organizationIdentity.d.ts +3 -9
- package/dist/compiler/organizationIdentity.js +37 -270
- package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
- package/dist/compiler/organizationIdentityGraph.js +115 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +8 -0
- package/dist/compiler/organizationReadyEvidence.js +23 -3
- 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 +6 -3
- package/dist/compiler/runProject.js +34 -6
- package/dist/compiler/runProjectAuth.d.ts +3 -1
- package/dist/compiler/runProjectAuth.js +19 -3
- package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
- package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
- package/dist/compiler/runProjectDocker.d.ts +8 -4
- package/dist/compiler/runProjectDocker.js +43 -18
- package/dist/compiler/runProjectDockerDaimonGuards.d.ts +15 -0
- package/dist/compiler/runProjectDockerDaimonGuards.js +122 -0
- package/dist/compiler/runProjectDockerReservation.d.ts +3 -0
- package/dist/compiler/runProjectDockerReservation.js +118 -0
- package/dist/compiler/runProjectLifecycle.js +1 -1
- 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 +47 -0
- package/dist/compiler/training/broker/declaration.js +57 -0
- package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
- package/dist/compiler/training/broker/entrypoint.js +126 -0
- 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 +11 -0
- package/dist/compiler/training/broker/index.js +11 -0
- package/dist/compiler/training/broker/main.d.ts +2 -0
- package/dist/compiler/training/broker/main.js +14 -0
- package/dist/compiler/training/broker/paths.d.ts +236 -0
- package/dist/compiler/training/broker/paths.js +249 -0
- package/dist/compiler/training/broker/processes.d.ts +51 -0
- package/dist/compiler/training/broker/processes.js +102 -0
- package/dist/compiler/training/broker/projection.d.ts +52 -0
- package/dist/compiler/training/broker/projection.js +88 -0
- package/dist/compiler/training/broker/provisioning.d.ts +78 -0
- package/dist/compiler/training/broker/provisioning.js +231 -0
- package/dist/compiler/training/broker/receipt.d.ts +77 -0
- package/dist/compiler/training/broker/receipt.js +110 -0
- package/dist/compiler/training/broker/registration.d.ts +43 -0
- package/dist/compiler/training/broker/registration.js +110 -0
- 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 +22 -0
- package/dist/compiler/training/broker/runtime.js +127 -0
- package/dist/compiler/training/broker/seccompRoutes.d.ts +31 -0
- package/dist/compiler/training/broker/seccompRoutes.js +36 -0
- package/dist/compiler/training/broker/supervisor.d.ts +108 -0
- package/dist/compiler/training/broker/supervisor.js +172 -0
- 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 +54 -0
- package/dist/compiler/training/container/contract.js +51 -0
- 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 +5 -0
- package/dist/compiler/training/container/index.js +3 -0
- package/dist/compiler/training/container/launch.d.ts +21 -0
- package/dist/compiler/training/container/launch.js +264 -0
- 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 +10 -0
- package/dist/compiler/training/container/prepare.js +125 -0
- package/dist/compiler/training/container/process.d.ts +14 -0
- package/dist/compiler/training/container/process.js +70 -0
- package/dist/compiler/training/container/security.d.ts +38 -0
- package/dist/compiler/training/container/security.js +68 -0
- 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 +15 -0
- package/dist/compiler/training/context.js +93 -0
- package/dist/compiler/training/contract.d.ts +144 -0
- package/dist/compiler/training/contract.js +36 -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 +12 -0
- package/dist/compiler/training/index.js +10 -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 +109 -0
- package/dist/compiler/training/preparation/assets/package-lock.json +3787 -0
- package/dist/compiler/training/preparation/broker.d.ts +21 -0
- package/dist/compiler/training/preparation/broker.js +45 -0
- package/dist/compiler/training/preparation/contextModes.d.ts +12 -0
- package/dist/compiler/training/preparation/contextModes.js +38 -0
- package/dist/compiler/training/preparation/contract.d.ts +207 -0
- package/dist/compiler/training/preparation/contract.js +113 -0
- package/dist/compiler/training/preparation/copyAssets.d.ts +1 -0
- package/dist/compiler/training/preparation/copyAssets.js +8 -0
- package/dist/compiler/training/preparation/daimonParent.d.ts +42 -0
- package/dist/compiler/training/preparation/daimonParent.js +114 -0
- package/dist/compiler/training/preparation/files.d.ts +29 -0
- package/dist/compiler/training/preparation/files.js +146 -0
- package/dist/compiler/training/preparation/image.d.ts +28 -0
- package/dist/compiler/training/preparation/image.js +107 -0
- package/dist/compiler/training/preparation/index.d.ts +3 -0
- package/dist/compiler/training/preparation/index.js +2 -0
- package/dist/compiler/training/preparation/inputs.d.ts +24 -0
- package/dist/compiler/training/preparation/inputs.js +101 -0
- package/dist/compiler/training/preparation/prepare.d.ts +38 -0
- package/dist/compiler/training/preparation/prepare.js +223 -0
- package/dist/compiler/training/preparation/scratch.d.ts +8 -0
- package/dist/compiler/training/preparation/scratch.js +114 -0
- package/dist/compiler/training/repair/compatibility.d.ts +11 -0
- package/dist/compiler/training/repair/compatibility.js +34 -0
- package/dist/compiler/training/repair/contract.d.ts +840 -0
- package/dist/compiler/training/repair/contract.js +33 -0
- package/dist/compiler/training/repair/index.d.ts +3 -0
- package/dist/compiler/training/repair/index.js +3 -0
- package/dist/compiler/training/repair/prepare.d.ts +382 -0
- package/dist/compiler/training/repair/prepare.js +78 -0
- package/dist/compiler/training/repair/witness.d.ts +352 -0
- package/dist/compiler/training/repair/witness.js +48 -0
- 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 +7 -2
- package/dist/compiler/upProject.d.ts +27 -1
- package/dist/compiler/upProject.js +135 -180
- package/dist/compiler/upProjectHandoff.d.ts +62 -0
- package/dist/compiler/upProjectHandoff.js +204 -0
- package/dist/compiler/upReceipt.js +49 -4
- package/dist/compiler/updateProjectModels.js +1 -0
- package/dist/compiler/view/types.d.ts +1 -1
- package/dist/compiler/workspaceBundleArtifacts.d.ts +18 -0
- package/dist/compiler/workspaceBundleArtifacts.js +155 -0
- 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 +9 -2
- package/dist/compiler/workspaceResources.js +39 -7
- package/dist/deployment/activation.d.ts +3 -0
- package/dist/deployment/activation.js +12 -0
- package/dist/deployment/artifactsExportPlan.js +51 -1
- package/dist/deployment/canaryCutover.d.ts +42 -0
- package/dist/deployment/canaryCutover.js +140 -0
- package/dist/deployment/candidateDiagnostics.d.ts +15 -0
- package/dist/deployment/candidateDiagnostics.js +90 -0
- package/dist/deployment/candidateRecording.d.ts +8 -0
- package/dist/deployment/candidateRecording.js +22 -0
- package/dist/deployment/dockerLogs.js +4 -1
- package/dist/deployment/dockerManager.d.ts +5 -3
- package/dist/deployment/dockerManager.js +21 -5
- package/dist/deployment/dockerProbeGateway.d.ts +17 -0
- package/dist/deployment/dockerProbeGateway.js +17 -2
- package/dist/deployment/downDeployment.d.ts +7 -0
- package/dist/deployment/downDeployment.js +114 -9
- package/dist/deployment/downReceiptTypes.d.ts +17 -2
- package/dist/deployment/downReceiptTypes.js +17 -2
- package/dist/deployment/homeStore.d.ts +9 -1
- package/dist/deployment/homeStore.js +16 -53
- package/dist/deployment/index.d.ts +10 -0
- package/dist/deployment/index.js +10 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +66 -0
- package/dist/deployment/lifecycleCompletionContracts.js +34 -0
- package/dist/deployment/lifecycleCompletionPaths.d.ts +4 -1
- package/dist/deployment/lifecycleCompletionPaths.js +3 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +2 -0
- package/dist/deployment/lifecycleCompletionPublication.js +18 -4
- package/dist/deployment/lifecycleCompletionStore.d.ts +1 -1
- package/dist/deployment/lifecycleCompletionStore.js +7 -7
- package/dist/deployment/lifecycleUpRecords.d.ts +11 -0
- package/dist/deployment/lifecycleUpRecords.js +127 -0
- package/dist/deployment/native/AGENTS.md +11 -0
- package/dist/deployment/native/rename-noreplace-arm64 +0 -0
- package/dist/deployment/native/rename-noreplace-arm64.provenance.json +1 -0
- package/dist/deployment/native/rename-noreplace-x64 +0 -0
- package/dist/deployment/native/rename-noreplace-x64.provenance.json +1 -0
- package/dist/deployment/noReplaceActivation.d.ts +17 -0
- package/dist/deployment/noReplaceActivation.js +50 -0
- package/dist/deployment/organizationHandoffAuthorityFsBudget.d.ts +110 -0
- package/dist/deployment/organizationHandoffAuthorityFsBudget.js +156 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +82 -27
- package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
- package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +254 -108
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +14 -7
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +2 -2
- package/dist/deployment/organizationHandoffAuthorityTypes.js +2 -1
- package/dist/deployment/organizationReady.d.ts +2 -0
- package/dist/deployment/organizationReady.js +36 -4
- package/dist/deployment/pidLock.d.ts +25 -0
- package/dist/deployment/pidLock.js +81 -0
- package/dist/deployment/productStateClone.d.ts +43 -0
- package/dist/deployment/productStateClone.js +319 -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/deployment/upLifecycleRecoveryState.d.ts +23 -0
- package/dist/deployment/upLifecycleRecoveryState.js +12 -0
- package/dist/deployment/upReceiptTypes.d.ts +32 -6
- package/dist/deployment/upReceiptTypes.js +29 -2
- package/dist/deployment/workspaceResourceMigration.d.ts +55 -0
- package/dist/deployment/workspaceResourceMigration.js +315 -0
- package/dist/dev/project.d.ts +7 -0
- package/dist/dev/project.js +9 -0
- package/dist/distribution/buildDistributionReport.d.ts +3 -0
- package/dist/distribution/buildDistributionReport.js +5 -0
- package/dist/distribution/consumeImage.d.ts +5 -0
- package/dist/distribution/consumeImage.js +115 -98
- package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
- package/dist/distribution/consumeImageDaimonDocker.js +45 -0
- package/dist/distribution/consumeImageLifecycle.d.ts +20 -0
- package/dist/distribution/consumeImageLifecycle.js +242 -0
- package/dist/distribution/consumeImageSupport.d.ts +19 -0
- package/dist/distribution/consumeImageSupport.js +40 -0
- package/dist/distribution/distributionReportSchema.d.ts +58 -1
- package/dist/distribution/distributionReportSchema.js +35 -2
- package/dist/distribution/dockerRunner.d.ts +6 -1
- package/dist/distribution/dockerRunner.js +31 -4
- package/dist/distribution/imageRuntimeAuth.d.ts +9 -1
- package/dist/distribution/imageRuntimeAuth.js +70 -1
- package/dist/distribution/index.d.ts +1 -1
- package/dist/distribution/index.js +1 -1
- package/dist/distribution/preflight.js +5 -1
- package/dist/distribution/renderImageInterface.js +1 -1
- package/dist/distribution/types.d.ts +29 -1
- package/dist/distribution/types.js +3 -0
- package/dist/evidenceExportHelper/boundedExecutor.d.ts +3 -0
- package/dist/evidenceExportHelper/boundedExecutor.js +33 -0
- package/dist/evidenceExportHelper/helperProgram.mjs +156 -0
- package/dist/evidenceExportHelper/index.d.ts +4 -0
- package/dist/evidenceExportHelper/index.js +4 -0
- package/dist/evidenceExportHelper/preparedAuthority.d.ts +64 -0
- package/dist/evidenceExportHelper/preparedAuthority.js +228 -0
- package/dist/evidenceExportHelper/preparedBuilder.d.ts +10 -0
- package/dist/evidenceExportHelper/preparedBuilder.js +183 -0
- package/dist/evidenceExportHelper/preparedBuilderTypes.d.ts +19 -0
- package/dist/evidenceExportHelper/preparedBuilderTypes.js +1 -0
- package/dist/evidenceExportHelper/recipe.d.ts +7 -0
- package/dist/evidenceExportHelper/recipe.js +83 -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/io.d.ts +2 -0
- package/dist/filesystem/io.js +16 -1
- 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 +47 -0
- package/dist/manifest/executionSchemas.js +31 -2
- 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 +62 -0
- package/dist/manifest/mcpSchemas.js +57 -8
- 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/renderSpawnfileNetworks.js +11 -0
- package/dist/manifest/renderSpawnfileWorkspace.js +10 -1
- package/dist/manifest/scheduleSchemas.d.ts +3 -1
- package/dist/manifest/scheduleSchemas.js +91 -5
- package/dist/manifest/schemas.d.ts +1419 -120
- package/dist/manifest/schemas.js +19 -6
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +5 -1
- package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +1 -1
- package/dist/manifest/teamNetworkSchemas.d.ts +18 -4
- package/dist/manifest/teamNetworkSchemas.js +19 -1
- package/dist/manifest/teamNetworkServerSchemas.d.ts +8 -3
- package/dist/manifest/teamNetworkServerSchemas.js +18 -2
- 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 +194 -1
- package/dist/manifest/workspaceSchemas.js +117 -2
- 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 +92 -4
- package/dist/runtime/common.d.ts +28 -1
- package/dist/runtime/common.js +33 -3
- package/dist/runtime/container.js +46 -35
- package/dist/runtime/daimon/adapter.d.ts +14 -0
- package/dist/runtime/daimon/adapter.js +254 -0
- package/dist/runtime/daimon/attention.d.ts +8 -0
- package/dist/runtime/daimon/attention.js +32 -0
- package/dist/runtime/daimon/config.d.ts +29 -0
- package/dist/runtime/daimon/config.js +321 -0
- 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 +346 -0
- package/dist/runtime/daimon/contractManifest.js +335 -0
- package/dist/runtime/daimon/grokModel.d.ts +19 -0
- package/dist/runtime/daimon/grokModel.js +33 -0
- package/dist/runtime/daimon/grokTurnLimits.d.ts +25 -0
- package/dist/runtime/daimon/grokTurnLimits.js +51 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +43 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.js +53 -0
- package/dist/runtime/daimon/grokWorkerContract.d.ts +27 -0
- package/dist/runtime/daimon/grokWorkerContract.js +60 -0
- package/dist/runtime/daimon/memory.d.ts +57 -0
- package/dist/runtime/daimon/memory.js +125 -0
- package/dist/runtime/daimon/recording.d.ts +19 -0
- package/dist/runtime/daimon/recording.js +50 -0
- package/dist/runtime/daimon/runAuth.d.ts +51 -0
- package/dist/runtime/daimon/runAuth.js +279 -0
- package/dist/runtime/daimon/runtimeIdentity.d.ts +22 -0
- package/dist/runtime/daimon/runtimeIdentity.js +22 -0
- package/dist/runtime/daimon/scheduleAuthority.d.ts +11 -0
- package/dist/runtime/daimon/scheduleAuthority.js +31 -0
- 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 +5 -0
- package/dist/runtime/index.js +5 -0
- package/dist/runtime/install.d.ts +5 -0
- package/dist/runtime/install.js +4 -0
- package/dist/runtime/localDaimonAuthority.d.ts +11 -0
- package/dist/runtime/localDaimonAuthority.js +77 -0
- package/dist/runtime/mnemeMcp.d.ts +13 -0
- package/dist/runtime/mnemeMcp.js +26 -0
- package/dist/runtime/openclaw/adapter.js +5 -2
- package/dist/runtime/pi/adapter.d.ts +0 -1
- package/dist/runtime/pi/adapter.js +5 -6
- package/dist/runtime/pi/appCliSource.js +1 -1
- package/dist/runtime/pi/appScheduleSource.js +6 -2
- package/dist/runtime/pi/appTemplateTypes.d.ts +1 -1
- package/dist/runtime/pi/containerTargets.js +6 -0
- package/dist/runtime/picoclaw/adapter.js +5 -2
- package/dist/runtime/registry.d.ts +6 -0
- package/dist/runtime/registry.js +32 -3
- package/dist/runtime/scheduleUtils.d.ts +1 -0
- package/dist/runtime/scheduleUtils.js +5 -1
- package/dist/runtime/types.d.ts +40 -0
- package/dist/runtime/usageLedger.d.ts +158 -0
- package/dist/runtime/usageLedger.js +269 -0
- package/dist/runtime/usageLedgerRead.d.ts +54 -0
- package/dist/runtime/usageLedgerRead.js +102 -0
- package/dist/runtime/usageRequestLedger.d.ts +42 -0
- package/dist/runtime/usageRequestLedger.js +72 -0
- package/dist/shared/daimonCodexDocker.d.ts +32 -0
- package/dist/shared/daimonCodexDocker.js +120 -0
- package/dist/shared/daimonGrokSeccompProfile.d.ts +10 -0
- package/dist/shared/daimonGrokSeccompProfile.js +11 -0
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.js +3 -0
- package/dist/shared/recording.d.ts +8 -0
- package/dist/shared/recording.js +25 -0
- package/dist/shared/types.d.ts +1 -1
- package/dist/shared/volumeNames.d.ts +6 -0
- package/dist/shared/volumeNames.js +14 -0
- package/dist/target/dockerArtifactsProvider.js +34 -7
- package/dist/target/dockerBaseImage.d.ts +2 -0
- package/dist/target/dockerBaseImage.js +11 -0
- package/dist/target/dockerCommandExecutor.d.ts +11 -0
- package/dist/target/dockerCommandExecutor.js +53 -2
- package/dist/target/dockerCommandExecutorCore.d.ts +2 -1
- package/dist/target/dockerCommandExecutorCore.js +5 -3
- package/dist/target/dockerPublicArtifactSnapshot.d.ts +3 -3
- package/dist/target/dockerPublicArtifactSnapshot.js +17 -33
- package/dist/target/dockerTarget.d.ts +1 -0
- package/dist/target/dockerTargetBinding.d.ts +1 -2
- package/dist/target/dockerTargetBinding.js +4 -4
- package/dist/target/dockerTargetExecFile.d.ts +19 -0
- package/dist/target/dockerTargetExecFile.js +194 -0
- package/dist/target/dockerWorldServiceProvider.d.ts +4 -0
- package/dist/target/dockerWorldServiceProvider.js +13 -1
- package/dist/target/evidenceExport.d.ts +3 -1
- package/dist/target/evidenceExport.js +12 -3
- package/dist/target/evidenceExportOperationsTestKit.js +3 -3
- package/dist/target/evidenceExportProvider.d.ts +2 -0
- package/dist/target/evidenceExportProvider.js +15 -5
- package/dist/target/publicArtifactSnapshot.d.ts +31 -0
- package/dist/target/publicArtifactSnapshot.js +37 -3
- 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/examples/README.md +45 -0
- package/examples/agent-with-subagents/AGENTS.md +3 -0
- package/examples/agent-with-subagents/Spawnfile +30 -0
- package/examples/agent-with-subagents/subagents/critic/AGENTS.md +3 -0
- package/examples/agent-with-subagents/subagents/critic/Spawnfile +15 -0
- package/examples/agent-with-subagents/subagents/researcher/AGENTS.md +3 -0
- package/examples/agent-with-subagents/subagents/researcher/Spawnfile +17 -0
- package/examples/daimon-org/Spawnfile +68 -0
- package/examples/daimon-org/TEAM.md +4 -0
- package/examples/daimon-org/agents/mapper/AGENTS.md +4 -0
- package/examples/daimon-org/agents/mapper/Spawnfile +37 -0
- package/examples/daimon-org/shared/skills/file-note/SKILL.md +9 -0
- package/examples/daimon-org/teams/review/Spawnfile +53 -0
- package/examples/daimon-org/teams/review/agents/reviewer/AGENTS.md +4 -0
- package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +37 -0
- package/examples/daimon-public-host/AGENTS.md +3 -0
- package/examples/daimon-public-host/Spawnfile +21 -0
- package/examples/distribution-org/Spawnfile +43 -0
- package/examples/distribution-org/TEAM.md +4 -0
- package/examples/distribution-org/agents/coordinator/AGENTS.md +1 -0
- package/examples/distribution-org/agents/coordinator/Spawnfile +20 -0
- package/examples/distribution-org/agents/researcher/AGENTS.md +1 -0
- package/examples/distribution-org/agents/researcher/Spawnfile +20 -0
- package/examples/jungian-daimon-org/Spawnfile +41 -0
- package/examples/jungian-daimon-org/TEAM.md +21 -0
- package/examples/jungian-daimon-org/teams/luna/Spawnfile +47 -0
- package/examples/jungian-daimon-org/teams/luna/TEAM.md +4 -0
- package/examples/jungian-daimon-org/teams/luna/agents/animus/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/luna/agents/representative/AGENTS.md +21 -0
- package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +30 -0
- package/examples/jungian-daimon-org/teams/luna/agents/shadow/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/Spawnfile +47 -0
- package/examples/jungian-daimon-org/teams/selene/TEAM.md +4 -0
- package/examples/jungian-daimon-org/teams/selene/agents/animus/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/agents/representative/AGENTS.md +19 -0
- package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/agents/shadow/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +30 -0
- package/examples/mixed-runtime-org/Spawnfile +71 -0
- package/examples/mixed-runtime-org/TEAM.md +8 -0
- package/examples/mixed-runtime-org/agents/analyst/AGENTS.md +8 -0
- package/examples/mixed-runtime-org/agents/analyst/Spawnfile +27 -0
- package/examples/mixed-runtime-org/agents/conductor/AGENTS.md +8 -0
- package/examples/mixed-runtime-org/agents/conductor/Spawnfile +27 -0
- package/examples/mixed-runtime-org/agents/localist/AGENTS.md +7 -0
- package/examples/mixed-runtime-org/agents/localist/Spawnfile +50 -0
- package/examples/moltnet-team-chat/Spawnfile +43 -0
- package/examples/moltnet-team-chat/TEAM.md +5 -0
- package/examples/moltnet-team-chat/agents/coordinator/AGENTS.md +9 -0
- package/examples/moltnet-team-chat/agents/coordinator/Spawnfile +26 -0
- package/examples/moltnet-team-chat/teams/analysis/Spawnfile +23 -0
- package/examples/moltnet-team-chat/teams/analysis/TEAM.md +3 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/observer/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/observer/Spawnfile +19 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/representative/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/representative/Spawnfile +19 -0
- package/examples/moltnet-team-chat/teams/field/Spawnfile +41 -0
- package/examples/moltnet-team-chat/teams/field/TEAM.md +3 -0
- package/examples/moltnet-team-chat/teams/field/agents/observer/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/field/agents/observer/Spawnfile +26 -0
- package/examples/moltnet-team-chat/teams/field/agents/representative/AGENTS.md +11 -0
- package/examples/moltnet-team-chat/teams/field/agents/representative/Spawnfile +26 -0
- package/examples/single-agent/AGENTS.md +3 -0
- package/examples/single-agent/HEARTBEAT.md +3 -0
- package/examples/single-agent/IDENTITY.md +3 -0
- package/examples/single-agent/MEMORY.md +3 -0
- package/examples/single-agent/SOUL.md +3 -0
- package/examples/single-agent/Spawnfile +41 -0
- package/examples/single-agent/skills/web_search/SKILL.md +6 -0
- package/moltnet-releases.json +5 -4
- package/package.json +36 -9
- package/runtimes.yaml +8 -3
- package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +0 -13
- package/dist/cli/targetWorldClockCrossProcess.test-helper.js +0 -109
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +0 -8
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +0 -60
- package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +0 -8
- package/dist/deployment/simfileFixtureBoundary.test-helper.js +0 -103
- package/dist/ownership/simfileRunOperatorInputs.d.ts +0 -103
- package/dist/ownership/simfileRunOperatorInputs.js +0 -139
- package/dist/target/cleanupRunDocker.test-helper.d.ts +0 -67
- package/dist/target/cleanupRunDocker.test-helper.js +0 -238
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { createRuntimeInstallRecipe, getRuntimeAdapter } from "../runtime/index.js";
|
|
2
|
+
import { resolveNoopolisRunId } from "../runtime/index.js";
|
|
2
3
|
import { listAgentSurfaceSecretNames } from "./agentSurfaces.js";
|
|
3
4
|
import { resolveTargetResources } from "./containerTargetResources.js";
|
|
4
5
|
import { assertTargetHasConfig, createDefaultTargets, resolveInstancePaths, resolveTargetConfigEnvBindings, resolveTargetEnvFiles, resolveTargetExposure, resolveTargetModelAuthMethods, resolveTargetModelSecrets, resolveTargetPackages } from "./containerTargetPlanResolution.js";
|
|
5
6
|
import { listExecutionModelSecretNames } from "./modelEnv.js";
|
|
7
|
+
import { createPersistentVolumeName } from "./moltnetArtifactPaths.js";
|
|
8
|
+
import { createExclusiveReattachVolumeName } from "../shared/index.js";
|
|
6
9
|
import { findWorldBindingForNode } from "./worldBindings.js";
|
|
7
10
|
export const createEnvVariableMap = (compiledNodes, runtimePlans, moltnet) => {
|
|
8
11
|
const variables = new Map();
|
|
@@ -32,8 +35,10 @@ export const createEnvVariableMap = (compiledNodes, runtimePlans, moltnet) => {
|
|
|
32
35
|
if (node.value.kind === "agent") {
|
|
33
36
|
for (const secret of node.value.secrets)
|
|
34
37
|
registerSecret(secret);
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
if (node.runtimeName !== "daimon") {
|
|
39
|
+
for (const secretName of listExecutionModelSecretNames(node.value.execution)) {
|
|
40
|
+
register(secretName, true, `Model provider auth for ${secretName}`, "model");
|
|
41
|
+
}
|
|
37
42
|
}
|
|
38
43
|
for (const secretName of listAgentSurfaceSecretNames(node.value.surfaces)) {
|
|
39
44
|
register(secretName, true, "Bot token for declared agent surfaces", "surface");
|
|
@@ -58,14 +63,15 @@ export const createEnvVariableMap = (compiledNodes, runtimePlans, moltnet) => {
|
|
|
58
63
|
}
|
|
59
64
|
return variables;
|
|
60
65
|
};
|
|
61
|
-
export const createRuntimeTargetPlans = async (plan, compiledNodes, worldBindings) => {
|
|
66
|
+
export const createRuntimeTargetPlans = async (plan, compiledNodes, worldBindings, deploymentLineage = "compile") => {
|
|
62
67
|
const runtimeNames = Object.keys(plan.runtimes).sort();
|
|
68
|
+
const runId = resolveNoopolisRunId(process.env);
|
|
63
69
|
const runtimePlans = [];
|
|
64
70
|
for (const runtimeName of runtimeNames) {
|
|
65
71
|
const adapter = getRuntimeAdapter(runtimeName);
|
|
66
72
|
const recipe = await createRuntimeInstallRecipe(runtimeName);
|
|
67
73
|
const targetInputs = compiledNodes
|
|
68
|
-
.filter((node) => node.runtimeName === runtimeName && node.emittedFiles.length > 0)
|
|
74
|
+
.filter((node) => node.runtimeName === runtimeName && (node.emittedFiles.length > 0 || runtimeName === "daimon"))
|
|
69
75
|
.map((node) => {
|
|
70
76
|
const id = node.id ?? `${node.kind}:${node.slug}`;
|
|
71
77
|
const worldBinding = node.kind === "agent"
|
|
@@ -87,21 +93,39 @@ export const createRuntimeTargetPlans = async (plan, compiledNodes, worldBinding
|
|
|
87
93
|
const instancePaths = resolveInstancePaths(runtimeName, target.id, adapter.container);
|
|
88
94
|
const portStride = adapter.container.portStride ?? 1;
|
|
89
95
|
runtimePlans.push({
|
|
96
|
+
...(target.agentPathsByNodeId ? { agentPathsByNodeId: Object.fromEntries(Object.entries(target.agentPathsByNodeId).map(([id, paths]) => {
|
|
97
|
+
const expand = (value) => value.replaceAll("<instance-root>", instancePaths.instanceRoot)
|
|
98
|
+
.replaceAll("<workspace-path>", instancePaths.workspacePath);
|
|
99
|
+
return [id, { workspacePath: expand(paths.workspacePath),
|
|
100
|
+
homePath: paths.homePath === null ? null : expand(paths.homePath), skillRoots: paths.skillRoots.map(expand) }];
|
|
101
|
+
})) } : {}),
|
|
90
102
|
configEnvBindings: resolveTargetConfigEnvBindings(adapter.container, target) ?? [],
|
|
91
103
|
...(target.engineByNodeId ? { engineByNodeId: target.engineByNodeId } : {}),
|
|
104
|
+
...(target.grokModelByNodeId ? { grokModelByNodeId: target.grokModelByNodeId } : {}),
|
|
105
|
+
...(target.grokTurnLimitsByNodeId ? { grokTurnLimitsByNodeId: target.grokTurnLimitsByNodeId } : {}),
|
|
92
106
|
envFiles: resolveTargetEnvFiles(instancePaths.configPath, target),
|
|
93
107
|
packages: resolveTargetPackages(target, targetInputs),
|
|
94
108
|
id: target.id,
|
|
95
109
|
instancePaths,
|
|
96
110
|
meta: adapter.container,
|
|
97
|
-
modelAuthMethods: resolveTargetModelAuthMethods(target, targetInputs),
|
|
98
|
-
modelSecretsRequired: resolveTargetModelSecrets(target, targetInputs),
|
|
111
|
+
modelAuthMethods: runtimeName === "daimon" ? {} : resolveTargetModelAuthMethods(target, targetInputs),
|
|
112
|
+
modelSecretsRequired: runtimeName === "daimon" ? [] : resolveTargetModelSecrets(target, targetInputs),
|
|
113
|
+
...(target.opaqueMountTargets ? { opaqueMountTargets: [...target.opaqueMountTargets].sort() } : {}),
|
|
114
|
+
...(target.persistentMounts ? { persistentMounts: target.persistentMounts.map((mount) => ({
|
|
115
|
+
id: mount.id,
|
|
116
|
+
...(mount.lifecycle ? { lifecycle: mount.lifecycle } : {}),
|
|
117
|
+
mount_path: mount.mountPath.replaceAll("<instance-root>", instancePaths.instanceRoot),
|
|
118
|
+
reason: mount.reason,
|
|
119
|
+
volume_name: mount.lifecycle === "exclusive-reattach"
|
|
120
|
+
? createExclusiveReattachVolumeName(`${plan.root}\0${deploymentLineage}`, mount.id)
|
|
121
|
+
: createPersistentVolumeName(plan.root, mount.id, runId)
|
|
122
|
+
})).sort((left, right) => left.id.localeCompare(right.id)) } : {}),
|
|
99
123
|
port: adapter.container.port ? adapter.container.port + (index * portStride) : undefined,
|
|
100
124
|
publishedPort: resolveTargetExposure(target, targetInputs) && adapter.container.port
|
|
101
125
|
? adapter.container.port + (index * portStride)
|
|
102
126
|
: undefined,
|
|
103
127
|
recipeEnv: recipe.env,
|
|
104
|
-
resources: resolveTargetResources(target, targetInputs, instancePaths, adapter.container),
|
|
128
|
+
resources: resolveTargetResources(target, targetInputs, instancePaths, adapter.container, plan.root, deploymentLineage),
|
|
105
129
|
runtimeName,
|
|
106
130
|
runtimeRoot: recipe.runtimeRoot,
|
|
107
131
|
sourceIds: [...(target.sourceIds ?? [])].sort(),
|
|
@@ -3,6 +3,7 @@ import type { ContainerEnvVariable, RuntimeTargetPlan } from "./containerArtifac
|
|
|
3
3
|
import type { EntrypointOptions } from "./containerEntrypointRender.js";
|
|
4
4
|
export { renderEntrypoint } from "./containerEntrypointRender.js";
|
|
5
5
|
export type { EntrypointOptions } from "./containerEntrypointRender.js";
|
|
6
|
+
import type { BackedMountRequirement } from "./containerBackedMountRender.js";
|
|
6
7
|
export declare const renderEnvExample: (variables: ContainerEnvVariable[]) => string;
|
|
7
8
|
export interface DockerfileDistributionOptions {
|
|
8
9
|
labels: Record<string, string>;
|
|
@@ -13,4 +14,4 @@ export declare const renderDockerfile: (runtimePlans: RuntimeTargetPlan[], optio
|
|
|
13
14
|
distribution?: DockerfileDistributionOptions;
|
|
14
15
|
runtimePackageOverrides?: RuntimeContainerPackageOverrides;
|
|
15
16
|
}) => Promise<string>;
|
|
16
|
-
export declare const createRootfsFiles: (runtimePlans: RuntimeTargetPlan[]) => EmittedFile[];
|
|
17
|
+
export declare const createRootfsFiles: (runtimePlans: RuntimeTargetPlan[], persistentMountPaths?: string[], moltnet?: EntrypointOptions["moltnet"], persistentMounts?: readonly BackedMountRequirement[]) => EmittedFile[];
|
|
@@ -3,30 +3,20 @@ import { DISTRIBUTION_REPORT_IMAGE_PATH, WORLD_BINDINGS_IMAGE_PATH } from "../di
|
|
|
3
3
|
import { createRuntimeInstallRecipe } from "../runtime/index.js";
|
|
4
4
|
import { SpawnfileError } from "../shared/index.js";
|
|
5
5
|
export { renderEntrypoint } from "./containerEntrypointRender.js";
|
|
6
|
+
import { DAIMON_RUNTIME_UID, DAIMON_UID_ENTRYPOINT_PATH, renderDaimonUidEntrypoint } from "./containerDaimonUidEntrypointRender.js";
|
|
7
|
+
import { createStateOwnershipCommand } from "./containerStateOwnershipRender.js";
|
|
8
|
+
import { RUNTIME_LINK_MATERIALIZER_PATH, renderRuntimeLinkMaterializer } from "./containerRuntimeLinkMaterializer.js";
|
|
6
9
|
import { MOLTNET_BIN_DIRECTORY, MOLTNET_BINARY_NAMES } from "./moltnetBinaries.js";
|
|
7
10
|
import { collectPackagesByManager, createAptPackageInstallItem, createNpmPackageInstallCommand, createNpmPackageInstallItem, createPackageInstallCommand, createPipxPackageInstallCommand, createPipxPackageInstallItem, getNpmInstallItemName } from "./containerPackageRender.js";
|
|
8
11
|
const CONTAINER_ROOTFS_ROOT = "container/rootfs";
|
|
9
12
|
const GATEWAY_PORT_PLACEHOLDER = "<gateway-port>";
|
|
10
13
|
const WORKSPACE_PLACEHOLDER = "<workspace-path>";
|
|
11
14
|
const RUNTIME_ROOT_PLACEHOLDER = "<runtime-root>";
|
|
15
|
+
const PREBUILT_FINAL_SYSTEM_DEPS_BY_RUNTIME = {
|
|
16
|
+
daimon: new Set(["bubblewrap", "dbus-daemon", "gnome-keyring", "util-linux"])
|
|
17
|
+
};
|
|
12
18
|
const shellQuote = (value) => `'${value.replace(/'/g, `'\"'\"'`)}'`;
|
|
13
19
|
const extractNodeMajorVersion = (image) => Number(image.match(/^node:(\d+)/)?.[1] ?? "0");
|
|
14
|
-
const createStateOwnershipCommand = (persistentMountPaths = []) => {
|
|
15
|
-
const mountPaths = [...new Set(persistentMountPaths)].sort();
|
|
16
|
-
const mkdirPaths = [...new Set(["/var/lib/spawnfile", ...mountPaths])].sort();
|
|
17
|
-
const markerCommands = mountPaths.map((mountPath) => `touch ${shellQuote(path.posix.join(mountPath, ".spawnfile-volume-init"))}`);
|
|
18
|
-
const chownPaths = [
|
|
19
|
-
...new Set([
|
|
20
|
-
"/var/lib/spawnfile",
|
|
21
|
-
...mountPaths.filter((mountPath) => !mountPath.startsWith("/var/lib/spawnfile/"))
|
|
22
|
-
])
|
|
23
|
-
].sort();
|
|
24
|
-
return [
|
|
25
|
-
`mkdir -p ${mkdirPaths.map(shellQuote).join(" ")}`,
|
|
26
|
-
...markerCommands,
|
|
27
|
-
`chown -R spawnfile:spawnfile ${chownPaths.map(shellQuote).join(" ")}`
|
|
28
|
-
].join(" && ");
|
|
29
|
-
};
|
|
30
20
|
const selectBaseImage = (runtimePlans, runtimeRecipes) => {
|
|
31
21
|
const recipeBaseImages = [
|
|
32
22
|
...new Set(runtimeRecipes.flatMap((recipe) => recipe.baseImage ? [recipe.baseImage] : []))
|
|
@@ -74,6 +64,7 @@ export const renderDockerfile = async (runtimePlans, options = {}) => {
|
|
|
74
64
|
throw new SpawnfileError("compile_error", "Moltnet must be supplied as a pinned, digest-verified, pi-bridge-stamped release; unpinned latest installation is disabled");
|
|
75
65
|
}
|
|
76
66
|
const runtimeNames = [...new Set(runtimePlans.map((plan) => plan.runtimeName))];
|
|
67
|
+
const hasDaimon = runtimeNames.includes("daimon");
|
|
77
68
|
const runtimeRecipes = await Promise.all(runtimeNames.map((runtimeName) => createRuntimeInstallRecipe(runtimeName, { packageOverrides: options.runtimePackageOverrides })));
|
|
78
69
|
const recipeByRuntimeName = new Map(runtimeRecipes.map((recipe) => [recipe.runtimeName, recipe]));
|
|
79
70
|
const baseImage = selectBaseImage(runtimePlans, runtimeRecipes);
|
|
@@ -82,10 +73,14 @@ export const renderDockerfile = async (runtimePlans, options = {}) => {
|
|
|
82
73
|
&& plan.configPath !== null
|
|
83
74
|
&& plan.secretPatches.length > 0);
|
|
84
75
|
const needsGit = runtimePlans.some((plan) => (plan.resources ?? []).some((resource) => resource.kind === "git"));
|
|
76
|
+
const needsBundle = runtimePlans.some((plan) => (plan.resources ?? []).some((resource) => resource.kind === "bundle"));
|
|
85
77
|
const systemDeps = [
|
|
86
78
|
...new Set([
|
|
87
|
-
...runtimePlans.flatMap((plan) => recipeByRuntimeName.get(plan.runtimeName)?.baseImage
|
|
79
|
+
...runtimePlans.flatMap((plan) => recipeByRuntimeName.get(plan.runtimeName)?.baseImage
|
|
80
|
+
? plan.meta.systemDeps.filter((dependency) => PREBUILT_FINAL_SYSTEM_DEPS_BY_RUNTIME[plan.runtimeName]?.has(dependency))
|
|
81
|
+
: plan.meta.systemDeps),
|
|
88
82
|
...(needsGit ? ["git"] : []),
|
|
83
|
+
...(needsBundle ? ["tar"] : []),
|
|
89
84
|
...(needsJsonEnvWriter ? ["python3"] : [])
|
|
90
85
|
])
|
|
91
86
|
].sort();
|
|
@@ -124,6 +119,8 @@ export const renderDockerfile = async (runtimePlans, options = {}) => {
|
|
|
124
119
|
if (options.hasMoltnet && options.hasStagedMoltnetBinaries) {
|
|
125
120
|
lines.push(`COPY ${MOLTNET_BIN_DIRECTORY}/ /usr/local/bin/`, `RUN chmod +x ${MOLTNET_BINARY_NAMES.map((binaryName) => `/usr/local/bin/${binaryName}`).join(" ")}`, "");
|
|
126
121
|
}
|
|
122
|
+
if (options.hasWorkspaceBundles)
|
|
123
|
+
lines.push("COPY container/workspace-bundles/ /opt/spawnfile/workspace-bundles/", "");
|
|
127
124
|
for (const recipe of runtimeRecipes) {
|
|
128
125
|
for (const copyCommand of recipe.copyCommands) {
|
|
129
126
|
lines.push(copyCommand);
|
|
@@ -133,8 +130,19 @@ export const renderDockerfile = async (runtimePlans, options = {}) => {
|
|
|
133
130
|
}
|
|
134
131
|
lines.push("");
|
|
135
132
|
}
|
|
136
|
-
lines.push(
|
|
137
|
-
|
|
133
|
+
lines.push(hasDaimon
|
|
134
|
+
? `RUN if ! getent group spawnfile >/dev/null 2>&1; then groupadd --gid ${DAIMON_RUNTIME_UID} spawnfile; fi && if ! id -u spawnfile >/dev/null 2>&1; then useradd --uid ${DAIMON_RUNTIME_UID} --gid spawnfile --create-home --home-dir /home/spawnfile --shell /bin/bash spawnfile; fi`
|
|
135
|
+
: 'RUN if ! id -u spawnfile >/dev/null 2>&1; then useradd --create-home --home-dir /home/spawnfile --shell /bin/bash spawnfile; fi', "");
|
|
136
|
+
lines.push("COPY container/rootfs/ /", ...(hasDaimon
|
|
137
|
+
? ["RUN chown root:root /var /var/lib /var/lib/spawnfile && chmod 755 /var /var/lib && chmod 711 /var/lib/spawnfile"]
|
|
138
|
+
: []), "COPY .env.example /opt/spawnfile/.env.example", 'COPY entrypoint.sh /opt/spawnfile/entrypoint.sh', `RUN chmod +x /opt/spawnfile/entrypoint.sh${hasDaimon ? ` ${DAIMON_UID_ENTRYPOINT_PATH}` : ""}${hasDaimon ? " && chmod 711 /opt /opt/spawnfile" : ""}`);
|
|
139
|
+
if (hasDaimon) {
|
|
140
|
+
for (const runtimeRoot of [...new Set(runtimePlans
|
|
141
|
+
.filter((plan) => plan.runtimeName === "daimon")
|
|
142
|
+
.map((plan) => plan.runtimeRoot))].sort()) {
|
|
143
|
+
lines.push(`RUN node ${shellQuote(RUNTIME_LINK_MATERIALIZER_PATH)} ${shellQuote(runtimeRoot)} && rm ${shellQuote(RUNTIME_LINK_MATERIALIZER_PATH)} && test -d ${shellQuote(runtimeRoot)} && test ! -L ${shellQuote(runtimeRoot)} && test -z "$(find -P ${shellQuote(runtimeRoot)} \\( -type l -o ! -user root -o ! -group root \\) -print -quit)" && chmod 711 /opt/spawnfile/runtime-installs ${shellQuote(runtimeRoot)} && find -P ${shellQuote(runtimeRoot)} -type d -exec chmod 711 {} + && find -P ${shellQuote(runtimeRoot)} -type f -perm /111 -exec chmod 555 {} + && find -P ${shellQuote(runtimeRoot)} -type f ! -perm /111 -exec chmod 444 {} + && chmod 555 ${shellQuote(path.posix.join(runtimeRoot, "daimon-start.sh"))}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
138
146
|
const postRootfsCommands = [
|
|
139
147
|
...new Set(runtimePlans.flatMap((plan) => plan.meta.postRootfsCommands ?? []))
|
|
140
148
|
];
|
|
@@ -151,48 +159,73 @@ export const renderDockerfile = async (runtimePlans, options = {}) => {
|
|
|
151
159
|
.sort(([left], [right]) => left.localeCompare(right))
|
|
152
160
|
.map(([name, value]) => `LABEL ${name}=${shellQuote(value)}`));
|
|
153
161
|
}
|
|
154
|
-
lines.push(`RUN ${createStateOwnershipCommand(options.persistentMountPaths)}`);
|
|
162
|
+
lines.push(`RUN ${createStateOwnershipCommand(runtimePlans, options.persistentMountPaths, options.moltnet)}`);
|
|
155
163
|
if (exposedPorts.length > 0) {
|
|
156
164
|
lines.push(`EXPOSE ${exposedPorts.join(" ")}`);
|
|
157
165
|
}
|
|
158
|
-
|
|
159
|
-
|
|
166
|
+
if (hasDaimon) {
|
|
167
|
+
const daimonConfig = runtimePlans.find((plan) => plan.runtimeName === "daimon")?.instancePaths.configPath;
|
|
168
|
+
if (!daimonConfig)
|
|
169
|
+
throw new Error("Daimon container plan is missing its runtime config path");
|
|
170
|
+
const healthProgram = "const fs=require('node:fs');const c=JSON.parse(fs.readFileSync(process.argv[1],'utf8'));fetch(`http://127.0.0.1:${c.host.port}/healthz`).then(async r=>{if(!r.ok||JSON.stringify(await r.json())!==JSON.stringify({status:'ok'}))process.exit(1)}).catch(()=>process.exit(1))";
|
|
171
|
+
lines.push(`HEALTHCHECK --interval=5s --timeout=3s --start-period=10s --retries=12 CMD ["node","-e",${JSON.stringify(healthProgram)},${JSON.stringify(daimonConfig)}]`);
|
|
172
|
+
}
|
|
173
|
+
lines.push(hasDaimon ? "USER root" : "USER spawnfile");
|
|
174
|
+
lines.push(hasDaimon
|
|
175
|
+
? `ENTRYPOINT ["${DAIMON_UID_ENTRYPOINT_PATH}"]`
|
|
176
|
+
: 'ENTRYPOINT ["/opt/spawnfile/entrypoint.sh"]');
|
|
160
177
|
return `${lines.join("\n").trimEnd()}\n`;
|
|
161
178
|
};
|
|
162
|
-
export const createRootfsFiles = (runtimePlans
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
179
|
+
export const createRootfsFiles = (runtimePlans, persistentMountPaths = [], moltnet, persistentMounts = []) => {
|
|
180
|
+
const files = runtimePlans.flatMap((plan) => plan.targetFiles.map((file) => {
|
|
181
|
+
const renderedContent = file.content
|
|
182
|
+
.replaceAll("<config-path>", plan.instancePaths.configPath)
|
|
183
|
+
.replaceAll(WORKSPACE_PLACEHOLDER, plan.instancePaths.workspacePath)
|
|
184
|
+
.replaceAll("<instance-root>", plan.instancePaths.instanceRoot ?? "")
|
|
185
|
+
.replaceAll(RUNTIME_ROOT_PLACEHOLDER, plan.runtimeRoot)
|
|
186
|
+
.replaceAll(`"${GATEWAY_PORT_PLACEHOLDER}"`, plan.port ? String(plan.port) : "0")
|
|
187
|
+
.replaceAll(GATEWAY_PORT_PLACEHOLDER, plan.port ? String(plan.port) : "");
|
|
188
|
+
if (file.path === plan.meta.configFileName) {
|
|
189
|
+
return {
|
|
190
|
+
content: renderedContent,
|
|
191
|
+
path: `${CONTAINER_ROOTFS_ROOT}${plan.instancePaths.configPath}`
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
if (file.path.startsWith("runtime/")) {
|
|
195
|
+
const relativeRuntimePath = file.path.slice("runtime/".length);
|
|
196
|
+
return {
|
|
197
|
+
content: renderedContent,
|
|
198
|
+
path: `${CONTAINER_ROOTFS_ROOT}${path.posix.join(plan.runtimeRoot, relativeRuntimePath)}`
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
if (file.path.startsWith("workspace/")) {
|
|
202
|
+
const relativeWorkspacePath = file.path.slice("workspace/".length);
|
|
203
|
+
return {
|
|
204
|
+
content: file.content,
|
|
205
|
+
path: `${CONTAINER_ROOTFS_ROOT}${path.posix.join(plan.instancePaths.workspacePath, relativeWorkspacePath)}`
|
|
206
|
+
};
|
|
190
207
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
})
|
|
208
|
+
if (file.path.startsWith("home/")) {
|
|
209
|
+
if (!plan.instancePaths.homePath) {
|
|
210
|
+
throw new SpawnfileError("runtime_error", `Container target ${plan.id} for ${plan.runtimeName} emitted home-scoped files without a home path`);
|
|
211
|
+
}
|
|
212
|
+
const relativeHomePath = file.path.slice("home/".length);
|
|
213
|
+
return {
|
|
214
|
+
content: file.content,
|
|
215
|
+
path: `${CONTAINER_ROOTFS_ROOT}${path.posix.join(plan.instancePaths.homePath, relativeHomePath)}`
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
throw new SpawnfileError("runtime_error", `Container target ${plan.id} for ${plan.runtimeName} emitted unsupported path ${file.path}`);
|
|
219
|
+
}));
|
|
220
|
+
return runtimePlans.some((plan) => plan.runtimeName === "daimon")
|
|
221
|
+
? [{
|
|
222
|
+
content: renderRuntimeLinkMaterializer(),
|
|
223
|
+
mode: 0o600,
|
|
224
|
+
path: `${CONTAINER_ROOTFS_ROOT}${RUNTIME_LINK_MATERIALIZER_PATH}`
|
|
225
|
+
}, {
|
|
226
|
+
content: renderDaimonUidEntrypoint(runtimePlans, persistentMountPaths, moltnet, persistentMounts),
|
|
227
|
+
mode: 0o755,
|
|
228
|
+
path: `${CONTAINER_ROOTFS_ROOT}${DAIMON_UID_ENTRYPOINT_PATH}`
|
|
229
|
+
}, ...files]
|
|
230
|
+
: files;
|
|
231
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { DistributionReport } from "../distribution/index.js";
|
|
2
2
|
import type { ContainerReport } from "../report/index.js";
|
|
3
|
+
import type { ContainerPersistentMountReport } from "../report/index.js";
|
|
3
4
|
import type { EmittedFile, RuntimeContainerConfigEnvBinding, RuntimeContainerMeta } from "../runtime/index.js";
|
|
4
5
|
import type { ModelAuthMethod } from "../shared/index.js";
|
|
5
6
|
import type { ResolvedAgentNode, ResolvedPackage, ResolvedTeamNode } from "./types.js";
|
|
@@ -13,10 +14,22 @@ export interface ContainerEnvVariable {
|
|
|
13
14
|
required: boolean;
|
|
14
15
|
}
|
|
15
16
|
export interface RuntimeTargetPlan {
|
|
17
|
+
agentPathsByNodeId?: import("../runtime/types.js").ContainerTarget["agentPathsByNodeId"];
|
|
16
18
|
configEnvBindings?: RuntimeContainerConfigEnvBinding[];
|
|
17
19
|
/** Passthrough of `ContainerTarget.engineByNodeId` (see `runtime/types.ts`), for
|
|
18
20
|
* `containerArtifacts.ts` to stamp onto `ContainerRuntimeInstanceReport.engine_by_node_id`. */
|
|
19
21
|
engineByNodeId?: Record<string, string>;
|
|
22
|
+
/** Passthrough of `ContainerTarget.grokModelByNodeId` for the Daimon broker worker render. */
|
|
23
|
+
grokModelByNodeId?: Record<string, {
|
|
24
|
+
model: string;
|
|
25
|
+
reasoningEffort: string;
|
|
26
|
+
}>;
|
|
27
|
+
/** Passthrough of `ContainerTarget.grokTurnLimitsByNodeId` for the Daimon broker worker render. */
|
|
28
|
+
grokTurnLimitsByNodeId?: Record<string, {
|
|
29
|
+
maxRequests?: number;
|
|
30
|
+
maxTokens?: number;
|
|
31
|
+
timeoutMs?: number;
|
|
32
|
+
}>;
|
|
20
33
|
packages?: ResolvedPackage[];
|
|
21
34
|
envFiles: Array<{
|
|
22
35
|
envName: string;
|
|
@@ -32,6 +45,8 @@ export interface RuntimeTargetPlan {
|
|
|
32
45
|
meta: RuntimeContainerMeta;
|
|
33
46
|
modelAuthMethods: Record<string, ModelAuthMethod>;
|
|
34
47
|
modelSecretsRequired: string[];
|
|
48
|
+
opaqueMountTargets?: string[];
|
|
49
|
+
persistentMounts?: ContainerPersistentMountReport[];
|
|
35
50
|
port?: number;
|
|
36
51
|
publishedPort?: number;
|
|
37
52
|
/**
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fail-closed guard for durable container state.
|
|
3
|
+
*
|
|
4
|
+
* Every path in `container.persistent_mounts[]` is state the compiler expects
|
|
5
|
+
* a host-backed named volume to hold. `spawnfile run`/`spawnfile up` and
|
|
6
|
+
* `spawnfile deploy` mount them; a hand-rolled `docker run` of the same image
|
|
7
|
+
* does not, and nothing in the image declares `VOLUME`, so the container would
|
|
8
|
+
* silently write its whole durable record onto the container's own writable
|
|
9
|
+
* layer and lose it on `docker rm`. That is exactly how a newsroom's message
|
|
10
|
+
* history was destroyed by a routine recreate.
|
|
11
|
+
*
|
|
12
|
+
* These checks make that case loud instead of silent: the entrypoint refuses
|
|
13
|
+
* to start unless each durable path is a real mount point, naming the mount
|
|
14
|
+
* id, the path, and the volume name to attach. `SPAWNFILE_ALLOW_EPHEMERAL_STATE=1`
|
|
15
|
+
* is the deliberate opt-out for throwaway containers.
|
|
16
|
+
*
|
|
17
|
+
* Detection reads `/proc/self/mountinfo` and looks for an EXACT mount point,
|
|
18
|
+
* rather than comparing `stat -c %d` against the parent directory: two nested
|
|
19
|
+
* durable volumes live on the same host filesystem and therefore share a
|
|
20
|
+
* device number, which would make a device comparison report a genuinely
|
|
21
|
+
* backed inner mount as unbacked.
|
|
22
|
+
*
|
|
23
|
+
* The kernel octal-escapes four characters in the mountinfo mount-point field
|
|
24
|
+
* (`show_mountinfo` passes `" \t\n\\"` to `seq_path_root`), so a declared
|
|
25
|
+
* `mount: "/var/lib/my store"` appears there as `/var/lib/my\040store`. The
|
|
26
|
+
* comparison is therefore made against the compiler-escaped form — computed
|
|
27
|
+
* here, where it is exactly testable — while the operator-facing message keeps
|
|
28
|
+
* the real path. Escaping at compile time rather than decoding in shell keeps
|
|
29
|
+
* the check a deterministic string compare with no dependence on how a
|
|
30
|
+
* particular `printf %b` implementation treats `\nnn` vs `\0nnn`. For a path
|
|
31
|
+
* containing none of those four characters both forms are identical.
|
|
32
|
+
*/
|
|
33
|
+
export declare const EPHEMERAL_STATE_OPT_OUT_ENV = "SPAWNFILE_ALLOW_EPHEMERAL_STATE";
|
|
34
|
+
export interface BackedMountRequirement {
|
|
35
|
+
id: string;
|
|
36
|
+
mount_path: string;
|
|
37
|
+
volume_name: string;
|
|
38
|
+
}
|
|
39
|
+
/** The mount-point field exactly as `/proc/self/mountinfo` renders this path. */
|
|
40
|
+
export declare const escapeMountInfoPath: (value: string) => string;
|
|
41
|
+
export declare const createBackedMountShellFunction: () => string[];
|
|
42
|
+
/**
|
|
43
|
+
* One check per durable mount, deduplicated by path and ordered by path so the
|
|
44
|
+
* rendered entrypoint is a deterministic function of the compile plan.
|
|
45
|
+
*/
|
|
46
|
+
export declare const createBackedMountChecks: (mounts: readonly BackedMountRequirement[]) => string[];
|
|
47
|
+
/**
|
|
48
|
+
* The full guard — function plus checks — or nothing at all when the compile
|
|
49
|
+
* declares no durable mounts.
|
|
50
|
+
*/
|
|
51
|
+
export declare const createBackedMountGuard: (mounts: readonly BackedMountRequirement[]) => string[];
|
|
52
|
+
/**
|
|
53
|
+
* Compile-time operator surface: how many durable mounts this organization
|
|
54
|
+
* requires a launcher to attach.
|
|
55
|
+
*/
|
|
56
|
+
export declare const describeBackedMountRequirement: (mounts: readonly BackedMountRequirement[]) => string | null;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fail-closed guard for durable container state.
|
|
3
|
+
*
|
|
4
|
+
* Every path in `container.persistent_mounts[]` is state the compiler expects
|
|
5
|
+
* a host-backed named volume to hold. `spawnfile run`/`spawnfile up` and
|
|
6
|
+
* `spawnfile deploy` mount them; a hand-rolled `docker run` of the same image
|
|
7
|
+
* does not, and nothing in the image declares `VOLUME`, so the container would
|
|
8
|
+
* silently write its whole durable record onto the container's own writable
|
|
9
|
+
* layer and lose it on `docker rm`. That is exactly how a newsroom's message
|
|
10
|
+
* history was destroyed by a routine recreate.
|
|
11
|
+
*
|
|
12
|
+
* These checks make that case loud instead of silent: the entrypoint refuses
|
|
13
|
+
* to start unless each durable path is a real mount point, naming the mount
|
|
14
|
+
* id, the path, and the volume name to attach. `SPAWNFILE_ALLOW_EPHEMERAL_STATE=1`
|
|
15
|
+
* is the deliberate opt-out for throwaway containers.
|
|
16
|
+
*
|
|
17
|
+
* Detection reads `/proc/self/mountinfo` and looks for an EXACT mount point,
|
|
18
|
+
* rather than comparing `stat -c %d` against the parent directory: two nested
|
|
19
|
+
* durable volumes live on the same host filesystem and therefore share a
|
|
20
|
+
* device number, which would make a device comparison report a genuinely
|
|
21
|
+
* backed inner mount as unbacked.
|
|
22
|
+
*
|
|
23
|
+
* The kernel octal-escapes four characters in the mountinfo mount-point field
|
|
24
|
+
* (`show_mountinfo` passes `" \t\n\\"` to `seq_path_root`), so a declared
|
|
25
|
+
* `mount: "/var/lib/my store"` appears there as `/var/lib/my\040store`. The
|
|
26
|
+
* comparison is therefore made against the compiler-escaped form — computed
|
|
27
|
+
* here, where it is exactly testable — while the operator-facing message keeps
|
|
28
|
+
* the real path. Escaping at compile time rather than decoding in shell keeps
|
|
29
|
+
* the check a deterministic string compare with no dependence on how a
|
|
30
|
+
* particular `printf %b` implementation treats `\nnn` vs `\0nnn`. For a path
|
|
31
|
+
* containing none of those four characters both forms are identical.
|
|
32
|
+
*/
|
|
33
|
+
export const EPHEMERAL_STATE_OPT_OUT_ENV = "SPAWNFILE_ALLOW_EPHEMERAL_STATE";
|
|
34
|
+
const shellQuote = (value) => `'${value.replace(/'/g, `'"'"'`)}'`;
|
|
35
|
+
const MOUNTINFO_ESCAPES = {
|
|
36
|
+
"\\": "\\134",
|
|
37
|
+
" ": "\\040",
|
|
38
|
+
"\t": "\\011",
|
|
39
|
+
"\n": "\\012"
|
|
40
|
+
};
|
|
41
|
+
/** The mount-point field exactly as `/proc/self/mountinfo` renders this path. */
|
|
42
|
+
export const escapeMountInfoPath = (value) => value.replace(/[\\ \t\n]/gu, (character) => MOUNTINFO_ESCAPES[character]);
|
|
43
|
+
export const createBackedMountShellFunction = () => [
|
|
44
|
+
"require_backed_mount() {",
|
|
45
|
+
' local mount_id="$1"',
|
|
46
|
+
// As mountinfo renders it (octal-escaped), for the comparison only.
|
|
47
|
+
' local mount_field="$2"',
|
|
48
|
+
// The real path, for every operator-facing message.
|
|
49
|
+
' local mount_target="$3"',
|
|
50
|
+
' local mount_volume="$4"',
|
|
51
|
+
" local mount_point",
|
|
52
|
+
` if [ "\${${EPHEMERAL_STATE_OPT_OUT_ENV}:-}" = "1" ]; then`,
|
|
53
|
+
" return 0",
|
|
54
|
+
" fi",
|
|
55
|
+
" if [ ! -r /proc/self/mountinfo ]; then",
|
|
56
|
+
' echo "Durable mount $mount_id at $mount_target cannot be verified: /proc/self/mountinfo is unreadable" >&2',
|
|
57
|
+
" exit 1",
|
|
58
|
+
" fi",
|
|
59
|
+
" while read -r _ _ _ _ mount_point _; do",
|
|
60
|
+
' if [ "$mount_point" = "$mount_field" ]; then',
|
|
61
|
+
" return 0",
|
|
62
|
+
" fi",
|
|
63
|
+
" done < /proc/self/mountinfo",
|
|
64
|
+
' echo "Durable mount $mount_id is not backed by a volume at $mount_target; this container would lose that state when it is removed." >&2',
|
|
65
|
+
` echo "Start this image with 'spawnfile run' or 'spawnfile up', or pass: --mount type=volume,source=\$mount_volume,target=\$mount_target" >&2`,
|
|
66
|
+
` echo "Set ${EPHEMERAL_STATE_OPT_OUT_ENV}=1 to run this container without durable state." >&2`,
|
|
67
|
+
" exit 1",
|
|
68
|
+
"}"
|
|
69
|
+
];
|
|
70
|
+
/**
|
|
71
|
+
* One check per durable mount, deduplicated by path and ordered by path so the
|
|
72
|
+
* rendered entrypoint is a deterministic function of the compile plan.
|
|
73
|
+
*/
|
|
74
|
+
export const createBackedMountChecks = (mounts) => {
|
|
75
|
+
const byPath = new Map();
|
|
76
|
+
for (const mount of mounts) {
|
|
77
|
+
if (!byPath.has(mount.mount_path))
|
|
78
|
+
byPath.set(mount.mount_path, mount);
|
|
79
|
+
}
|
|
80
|
+
return [...byPath.values()]
|
|
81
|
+
.sort((left, right) => left.mount_path.localeCompare(right.mount_path))
|
|
82
|
+
.map((mount) => `require_backed_mount ${shellQuote(mount.id)} ${shellQuote(escapeMountInfoPath(mount.mount_path))} ${shellQuote(mount.mount_path)} ${shellQuote(mount.volume_name)}`);
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* The full guard — function plus checks — or nothing at all when the compile
|
|
86
|
+
* declares no durable mounts.
|
|
87
|
+
*/
|
|
88
|
+
export const createBackedMountGuard = (mounts) => {
|
|
89
|
+
const checks = createBackedMountChecks(mounts);
|
|
90
|
+
return checks.length === 0 ? [] : [...createBackedMountShellFunction(), "", ...checks, ""];
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Compile-time operator surface: how many durable mounts this organization
|
|
94
|
+
* requires a launcher to attach.
|
|
95
|
+
*/
|
|
96
|
+
export const describeBackedMountRequirement = (mounts) => {
|
|
97
|
+
const count = new Set(mounts.map((mount) => mount.mount_path)).size;
|
|
98
|
+
if (count === 0)
|
|
99
|
+
return null;
|
|
100
|
+
return `${count} durable mount${count === 1 ? "" : "s"} must be attached at start: use 'spawnfile run'/'spawnfile up', or pass matching --mount type=volume args. The entrypoint refuses to start otherwise (set ${EPHEMERAL_STATE_OPT_OUT_ENV}=1 to accept state loss).`;
|
|
101
|
+
};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { RuntimeTargetPlan } from "./containerArtifactsTypes.js";
|
|
2
|
+
import { type DaimonGrokRegistration, type DaimonGrokServiceConfigOptions } from "./containerDaimonGrokWorkerRender.js";
|
|
3
|
+
import { DAIMON_BROKER_UID, DAIMON_FIRST_WORKER_UID, DAIMON_ORGANIZATION_UID } from "../runtime/daimon/runtimeIdentity.js";
|
|
4
|
+
export { DAIMON_BROKER_UID, DAIMON_FIRST_WORKER_UID, DAIMON_ORGANIZATION_UID };
|
|
5
|
+
export declare const DAIMON_BROKER_EXECUTABLE = "/opt/daimon/bin/daimon-engine-broker";
|
|
6
|
+
export declare const DAIMON_BROKER_REGISTRATIONS = "/etc/daimon-engine-broker/registrations.bin";
|
|
7
|
+
export declare const DAIMON_BROKER_SOCKET = "/run/daimon-engine-broker/control.sock";
|
|
8
|
+
export declare const DAIMON_BROKER_BACKEND_SOCKET = "/run/daimon-engine-broker/backend.sock";
|
|
9
|
+
export declare const DAIMON_BROKER_LAUNCHER_SOCKET = "/run/daimon-engine-broker/launcher.sock";
|
|
10
|
+
export declare const DAIMON_BROKER_SERVICE_CONFIG = "/etc/daimon-engine-broker/service.json";
|
|
11
|
+
export declare const DAIMON_BROKER_REALM = "/var/lib/spawnfile/daimon/grok-subscription-realm";
|
|
12
|
+
/**
|
|
13
|
+
* Private temp for the broker and its relay (uid 2100, outside the organization
|
|
14
|
+
* group): shared `/tmp` and `/var/tmp` are `root:2000 1774` in a Grok
|
|
15
|
+
* organization, so any non-root process outside group 2000 needs its own
|
|
16
|
+
* `TMPDIR`. It lives in the broker's `/run` directory, which every worker denies.
|
|
17
|
+
*/
|
|
18
|
+
export declare const DAIMON_BROKER_TMPDIR = "/run/daimon-engine-broker/tmp";
|
|
19
|
+
export { DAIMON_ORGANIZATION_STATE_DIRECTORY, DAIMON_WORKER_ROOT, resolveDaimonGrokRegistrations } from "./containerDaimonGrokWorkerRender.js";
|
|
20
|
+
interface WorkspaceSecurityResource {
|
|
21
|
+
backingPath: string;
|
|
22
|
+
kind: "bundle" | "git" | "volume";
|
|
23
|
+
linkPath: string;
|
|
24
|
+
mode: "mutable" | "readonly";
|
|
25
|
+
resolvedIdentity: string | null;
|
|
26
|
+
}
|
|
27
|
+
export declare const renderDaimonWorkspaceResourceSecurity: (resources: WorkspaceSecurityResource[], owners?: {
|
|
28
|
+
linkUid: number;
|
|
29
|
+
linkGid: number;
|
|
30
|
+
readonlyUid: number;
|
|
31
|
+
readonlyGid: number;
|
|
32
|
+
privilegedUid: number;
|
|
33
|
+
privilegedGid: number;
|
|
34
|
+
}, resourceRoot?: string) => string[];
|
|
35
|
+
/**
|
|
36
|
+
* Fixes ownership and mode of the per-turn usage ledger directory for every
|
|
37
|
+
* Daimon organization, not just ones with a Grok agent. AGY and Codex both
|
|
38
|
+
* write here too (`onTurnUsage` in Daimon's `engineDispatcher.ts`), from the
|
|
39
|
+
* organization-uid runtime process (`uid`/`gid` below, set in
|
|
40
|
+
* `renderDaimonUidEntrypoint`) rather than the privileged broker — so this
|
|
41
|
+
* must run whether or not any Grok registration exists, and the directory
|
|
42
|
+
* must be group-writable (0770), not merely group-readable (0750): a mode
|
|
43
|
+
* that only lets the group list the directory silently defeated every
|
|
44
|
+
* AGY/Codex advisory usage write and, with it, Daimon's wake-fuse token
|
|
45
|
+
* ceiling, which now refuses to start at all if this ledger is missing or
|
|
46
|
+
* unreadable (`wakeFuse.ts`'s `ensureUsageLedgerReadable`).
|
|
47
|
+
*
|
|
48
|
+
* The directory itself is never created here: it is a persistent volume
|
|
49
|
+
* mount (`daimon-grok-usage-ledger` in `config.ts`, unconditional for every
|
|
50
|
+
* Daimon organization) that Docker always materializes before the entrypoint
|
|
51
|
+
* runs — exactly like `DAIMON_WAKE_FUSE_DIRECTORY`, whose own fix-up
|
|
52
|
+
* (`renderDaimonUidEntrypoint`) uses this same three-step order. `chown` to
|
|
53
|
+
* root first, `chmod` next, `chown` to the final owner last — never
|
|
54
|
+
* `install -d`'s create-then-chown-then-chmod order, and never a single
|
|
55
|
+
* `chown owner:group` followed by `chmod`: root only ever chmods a path it
|
|
56
|
+
* currently owns, so it never needs `CAP_FOWNER` (`runProject.ts`'s
|
|
57
|
+
* capability set grants `CAP_CHOWN` but not `CAP_FOWNER`) — chmod-ing
|
|
58
|
+
* *after* the final `chown` hands ownership to the broker uid fails with
|
|
59
|
+
* `EPERM` the moment root no longer owns the path.
|
|
60
|
+
*/
|
|
61
|
+
export declare const renderDaimonUsageLedgerProvisioning: () => string[];
|
|
62
|
+
/**
|
|
63
|
+
* Empties a directory without touching a mount point inside it.
|
|
64
|
+
*
|
|
65
|
+
* `rm -rf` and `find -delete` both fail `EBUSY` on a mount point — it is
|
|
66
|
+
* another filesystem's root, and its entry cannot be unlinked while it is
|
|
67
|
+
* mounted. A deployment that mounts a tmpfs below a directory it later clears
|
|
68
|
+
* would otherwise abort provisioning on a bare `find` failure, which is exactly
|
|
69
|
+
* how a live training launch died. Mount points are left in place and descended
|
|
70
|
+
* into; anything else that cannot be removed is reported by name.
|
|
71
|
+
*
|
|
72
|
+
* Mount points come from `/proc/self/mountinfo` field 5. The kernel
|
|
73
|
+
* octal-escapes space, tab, newline and backslash there; every path this
|
|
74
|
+
* compiler provisions is free of all four, and a path that is not would simply
|
|
75
|
+
* fail to match and be treated as an ordinary directory.
|
|
76
|
+
*/
|
|
77
|
+
export declare const MOUNT_AWARE_CLEAR_HELPER: string[];
|
|
78
|
+
export declare const renderDaimonBrokerProvisioning: (plans: RuntimeTargetPlan[]) => string[];
|
|
79
|
+
/**
|
|
80
|
+
* The root broker provisioning program itself, over already-resolved
|
|
81
|
+
* registrations and workspace resources.
|
|
82
|
+
*
|
|
83
|
+
* Production reaches it through {@link renderDaimonBrokerProvisioning}; the
|
|
84
|
+
* broker-capable training container reaches it directly for its single fixed
|
|
85
|
+
* slot, with `serviceOptions` pointing the turn store at per-slot tmpfs and
|
|
86
|
+
* declaring the evaluator inference ledger. Both callers get byte-identical
|
|
87
|
+
* credential, registration, worker-home, temp and spill provisioning — the
|
|
88
|
+
* whole point of sharing it rather than writing a second root program.
|
|
89
|
+
*
|
|
90
|
+
* It is re-runnable: the shell wrapper removes `/etc/daimon-engine-broker` and
|
|
91
|
+
* `/run/daimon-engine-broker` first, so a slot recycle replays exactly the
|
|
92
|
+
* audited start-up path, credential-journal recovery included.
|
|
93
|
+
*/
|
|
94
|
+
export declare const renderDaimonBrokerProvisioningProgram: (registrations: readonly DaimonGrokRegistration[], workspaceResources: WorkspaceSecurityResource[], serviceOptions?: DaimonGrokServiceConfigOptions,
|
|
95
|
+
/**
|
|
96
|
+
* How the broker's `/etc` and `/run` roots are reset before provisioning.
|
|
97
|
+
* A production organization owns both as ordinary image directories and
|
|
98
|
+
* removes them outright. The training container mounts each as its own
|
|
99
|
+
* tmpfs, which cannot be unlinked, so it empties them instead — the same
|
|
100
|
+
* end state, reached the only way a mount point allows.
|
|
101
|
+
*/
|
|
102
|
+
rootReset?: "remove" | "clear",
|
|
103
|
+
/** Deny targets the worker provisioning creates when absent; see `renderDaimonGrokWorkerProvisioning`. */
|
|
104
|
+
optionalDenyPaths?: readonly string[],
|
|
105
|
+
/**
|
|
106
|
+
* Where the broker and relay get their private `TMPDIR`. Production keeps it
|
|
107
|
+
* inside the control root, which it removes and recreates exactly once. A
|
|
108
|
+
* deployment that re-provisions that root — the training slot recycle — must
|
|
109
|
+
* pass a path outside it: a `tmp/` inside a cleared root is a mount point in
|
|
110
|
+
* the training launch, and clearing a mount point fails `EBUSY`.
|
|
111
|
+
*/
|
|
112
|
+
brokerTmpdir?: string,
|
|
113
|
+
/** Root-owned training deny targets, created after root reset and before worker attestation. */
|
|
114
|
+
beforeWorkerProvisioning?: readonly string[]) => string[];
|