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
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
2
|
+
export const ORGANIZATION_ID_SEGMENT_PATTERN_SOURCE = "^[a-z][a-z0-9-]{0,62}$";
|
|
3
|
+
export const ORGANIZATION_MEMBER_ID_PATTERN_SOURCE = "^[a-z][a-z0-9-]{0,62}(\\.[a-z][a-z0-9-]{0,62}){0,7}$";
|
|
4
|
+
export const MAX_ORGANIZATION_MEMBER_DEPTH = 8;
|
|
5
|
+
export const MAX_ORGANIZATION_MEMBER_ID_BYTES = 255;
|
|
6
|
+
export const MAX_ORGANIZATION_AGENT_MEMBERS = 128;
|
|
7
|
+
export const MAX_EXTERNAL_PARTICIPANTS = 32;
|
|
8
|
+
const segment = new RegExp(ORGANIZATION_ID_SEGMENT_PATTERN_SOURCE, "u");
|
|
9
|
+
export const organizationIdentityFail = (message) => {
|
|
10
|
+
throw new SpawnfileError("validation_error", message);
|
|
11
|
+
};
|
|
12
|
+
export const requiredOrganizationIdentity = (value, message) => value == null ? organizationIdentityFail(message) : value;
|
|
13
|
+
export const assertOrganizationSegment = (value, label) => {
|
|
14
|
+
if (!segment.test(value)) {
|
|
15
|
+
organizationIdentityFail(`${label} must match ${ORGANIZATION_ID_SEGMENT_PATTERN_SOURCE}`);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
export const freezeOrganizationIdentity = (value) => {
|
|
19
|
+
if (value && typeof value === "object") {
|
|
20
|
+
Object.freeze(value);
|
|
21
|
+
for (const child of Object.values(value)) {
|
|
22
|
+
freezeOrganizationIdentity(child);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
};
|
|
27
|
+
export const compareOrganizationIds = (left, right) => left < right ? -1 : left > right ? 1 : 0;
|
|
28
|
+
export const exactOrganizationStrings = (actual, expected) => actual?.length === expected.length
|
|
29
|
+
&& actual.every((value, index) => value === expected[index]);
|
|
30
|
+
const teamNodes = (plan) => new Map(plan.nodes.filter((node) => node.kind === "team")
|
|
31
|
+
.map((node) => [node.value.source, node.value]));
|
|
32
|
+
export const rootOrganizationTeam = (plan) => {
|
|
33
|
+
const node = plan.nodes.find((entry) => entry.id === plan.root || entry.value.source === plan.root);
|
|
34
|
+
return node?.value.kind === "team" ? node.value : undefined;
|
|
35
|
+
};
|
|
36
|
+
export const organizationAgentPaths = (plan) => {
|
|
37
|
+
const teams = teamNodes(plan);
|
|
38
|
+
const edges = plan.edges.filter((edge) => edge.kind === "team_member");
|
|
39
|
+
const paths = new Map();
|
|
40
|
+
const teamPaths = new Map();
|
|
41
|
+
const visitedNodeIds = new Set();
|
|
42
|
+
// External-participant authority needs one unambiguous path per principal.
|
|
43
|
+
// Ordinary organizations still have a canonical identity, but retain the
|
|
44
|
+
// compiler's long-standing ability to reuse an identical agent/team ref.
|
|
45
|
+
const requireUniquePaths = (rootOrganizationTeam(plan)?.externalParticipants?.length ?? 0) > 0;
|
|
46
|
+
const walk = (source, prefix, seen) => {
|
|
47
|
+
if (seen.has(source))
|
|
48
|
+
organizationIdentityFail(`organization member graph cycle at ${source}`);
|
|
49
|
+
const team = teams.get(source);
|
|
50
|
+
if (!team)
|
|
51
|
+
return;
|
|
52
|
+
if (teamPaths.has(source)) {
|
|
53
|
+
if (requireUniquePaths) {
|
|
54
|
+
organizationIdentityFail(`team is reached through multiple organization paths: ${source}`);
|
|
55
|
+
}
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
teamPaths.set(source, prefix);
|
|
59
|
+
const node = plan.nodes.find((entry) => entry.value.source === source);
|
|
60
|
+
if (!node || node.kind !== "team") {
|
|
61
|
+
throw new SpawnfileError("validation_error", `organization graph references missing team ${source}`);
|
|
62
|
+
}
|
|
63
|
+
visitedNodeIds.add(node.id);
|
|
64
|
+
const outgoing = edges.filter((entry) => entry.from === node.id)
|
|
65
|
+
.sort((left, right) => compareOrganizationIds(left.label, right.label));
|
|
66
|
+
const memberSlots = new Set(team.members.map((member) => member.id));
|
|
67
|
+
if (memberSlots.size !== team.members.length || outgoing.length !== team.members.length) {
|
|
68
|
+
organizationIdentityFail(`organization graph cardinality mismatch for team ${team.name}`);
|
|
69
|
+
}
|
|
70
|
+
const localSlots = new Set();
|
|
71
|
+
for (const edge of outgoing) {
|
|
72
|
+
if (localSlots.has(edge.label)) {
|
|
73
|
+
organizationIdentityFail(`duplicate organization member slot: ${edge.label}`);
|
|
74
|
+
}
|
|
75
|
+
localSlots.add(edge.label);
|
|
76
|
+
assertOrganizationSegment(edge.label, "organization member slot");
|
|
77
|
+
const next = [...prefix, edge.label];
|
|
78
|
+
if (next.length > MAX_ORGANIZATION_MEMBER_DEPTH) {
|
|
79
|
+
organizationIdentityFail("organization member depth exceeds 8");
|
|
80
|
+
}
|
|
81
|
+
const child = plan.nodes.find((candidate) => candidate.id === edge.to);
|
|
82
|
+
if (!child) {
|
|
83
|
+
throw new SpawnfileError("validation_error", `organization graph references missing node ${edge.to}`);
|
|
84
|
+
}
|
|
85
|
+
const member = team.members.find((entry) => entry.id === edge.label);
|
|
86
|
+
if (!member || member.kind !== child.kind || member.nodeSource !== child.value.source) {
|
|
87
|
+
organizationIdentityFail(`organization graph member edge mismatch: ${edge.label}`);
|
|
88
|
+
}
|
|
89
|
+
if (child.kind === "agent") {
|
|
90
|
+
if (paths.has(child.value.source) && requireUniquePaths) {
|
|
91
|
+
organizationIdentityFail(`agent source is reached through multiple organization paths: ${child.value.source}`);
|
|
92
|
+
}
|
|
93
|
+
const prior = paths.get(child.value.source);
|
|
94
|
+
if (!prior || compareOrganizationIds(next.join("."), prior.join(".")) < 0) {
|
|
95
|
+
paths.set(child.value.source, next);
|
|
96
|
+
}
|
|
97
|
+
visitedNodeIds.add(child.id);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
walk(child.value.source, next, new Set([...seen, source]));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
walk(plan.root, [], new Set());
|
|
105
|
+
const rootNode = plan.nodes.find((node) => node.value.source === plan.root);
|
|
106
|
+
const organizationNodeIds = new Set(rootNode ? [rootNode.id] : []);
|
|
107
|
+
for (const edge of edges) {
|
|
108
|
+
organizationNodeIds.add(edge.from);
|
|
109
|
+
organizationNodeIds.add(edge.to);
|
|
110
|
+
}
|
|
111
|
+
const extra = plan.nodes.find((node) => organizationNodeIds.has(node.id) && !visitedNodeIds.has(node.id));
|
|
112
|
+
if (extra)
|
|
113
|
+
organizationIdentityFail(`unreachable organization graph node: ${extra.id}`);
|
|
114
|
+
return paths;
|
|
115
|
+
};
|
|
@@ -22,6 +22,13 @@ export interface OrganizationReadinessEvidence {
|
|
|
22
22
|
readonly nodeId: string;
|
|
23
23
|
}[];
|
|
24
24
|
} | null;
|
|
25
|
+
readonly daimon?: {
|
|
26
|
+
readonly receiptPath: string;
|
|
27
|
+
readonly agents: readonly {
|
|
28
|
+
readonly agentId: string;
|
|
29
|
+
readonly engine: string;
|
|
30
|
+
}[];
|
|
31
|
+
} | null;
|
|
25
32
|
readonly networks: readonly {
|
|
26
33
|
readonly id: string;
|
|
27
34
|
readonly mode: "external" | "managed";
|
|
@@ -34,6 +41,7 @@ export interface OrganizationReadinessEvidence {
|
|
|
34
41
|
readonly nodeId: string;
|
|
35
42
|
readonly memberId: string;
|
|
36
43
|
readonly configPath: string;
|
|
44
|
+
readonly receiptPath: string;
|
|
37
45
|
readonly sha256: string;
|
|
38
46
|
}[];
|
|
39
47
|
}[];
|
|
@@ -96,6 +96,17 @@ const assertMemberId = (value, label) => {
|
|
|
96
96
|
if (!MEMBER_ID.test(value))
|
|
97
97
|
fail(`${label} is unbounded or noncanonical`);
|
|
98
98
|
};
|
|
99
|
+
const assertMoltnetRoomMemberId = (value, label) => {
|
|
100
|
+
if (MEMBER_ID.test(value))
|
|
101
|
+
return;
|
|
102
|
+
const separator = value.indexOf(":");
|
|
103
|
+
const networkId = value.slice(0, separator);
|
|
104
|
+
const agentId = value.slice(separator + 1);
|
|
105
|
+
if (separator <= 0 || separator === value.length - 1 || value.length > 128
|
|
106
|
+
|| !ID.test(networkId) || !ID.test(agentId)) {
|
|
107
|
+
fail(`${label} is unbounded or noncanonical`);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
99
110
|
const assertConfigPath = (value) => {
|
|
100
111
|
if (value.length > 255 || !CONFIG_PATH.test(value)) {
|
|
101
112
|
fail(`Moltnet config path is noncanonical: ${value}`);
|
|
@@ -167,14 +178,15 @@ const validateMoltnet = (artifacts, plan) => {
|
|
|
167
178
|
const rooms = sort(server.rooms.map((room) => {
|
|
168
179
|
assertId(room.id, "Moltnet room id");
|
|
169
180
|
assertUnique(room.members, (member) => member, `Moltnet room member on ${server.networkId}/${room.id}`);
|
|
170
|
-
for (const member of room.members)
|
|
171
|
-
|
|
181
|
+
for (const member of room.members) {
|
|
182
|
+
assertMoltnetRoomMemberId(member, `Moltnet room member on ${server.networkId}/${room.id}`);
|
|
183
|
+
}
|
|
172
184
|
return { id: room.id, members: sort(room.members, (member) => member) };
|
|
173
185
|
}), (room) => room.id);
|
|
174
186
|
assertUnique(rooms, (room) => room.id, `Moltnet room on ${server.networkId}`);
|
|
175
187
|
const nodes = sort(nodePlans.filter((node) => node.networkId === server.networkId).map((node) => {
|
|
176
188
|
const attachment = attachmentByKey.get(`${node.networkId}\u0000${node.memberId}`);
|
|
177
|
-
return { configPath: node.configPath, memberId: node.memberId, nodeId: attachment.nodeId,
|
|
189
|
+
return { configPath: node.configPath, receiptPath: `/run/spawnfile/moltnet-readiness/${node.networkId}-${node.memberId}.json`, memberId: node.memberId, nodeId: attachment.nodeId,
|
|
178
190
|
sha256: sha256(emittedConfigContent(artifacts, node.configPath)) };
|
|
179
191
|
}), (node) => `${node.memberId}\u0000${node.nodeId}`);
|
|
180
192
|
return { id: server.networkId, internalPort: server.mode === "managed" ? server.port : null,
|
|
@@ -248,9 +260,17 @@ export const createOrganizationReadinessEvidence = (input) => {
|
|
|
248
260
|
const projectLabel = normalizeProjectLabelSlug(distribution.organization.project);
|
|
249
261
|
if (projectLabel.length > 128 || !ID.test(projectLabel))
|
|
250
262
|
fail("project label is unbounded or noncanonical");
|
|
263
|
+
const daimonInstance = input.containerArtifacts.report.runtime_instances.find((instance) => instance.runtime === "daimon");
|
|
264
|
+
const daimon = daimonInstance === undefined ? null : {
|
|
265
|
+
receiptPath: "/var/lib/spawnfile/instances/daimon/daimon-organization/state/wake-acceptance/runtime-readiness.json",
|
|
266
|
+
agents: Object.entries(daimonInstance.engine_by_node_id ?? {}).sort(([left], [right]) => left.localeCompare(right)).map(([agentId, engine]) => ({ agentId, engine }))
|
|
267
|
+
};
|
|
268
|
+
if (daimon !== null && daimon.agents.length === 0)
|
|
269
|
+
fail("Daimon readiness has no compiled agent engines");
|
|
251
270
|
return freeze({
|
|
252
271
|
compileFingerprint: fingerprint,
|
|
253
272
|
compileVersion: input.compileVersion,
|
|
273
|
+
daimon,
|
|
254
274
|
hasExternalMoltnet: networks.some((network) => network.mode === "external"),
|
|
255
275
|
networks,
|
|
256
276
|
organizationMembers,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CompilePlan } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Runs, without emitting anything, the per-agent checks compile would refuse
|
|
4
|
+
* on: runtime-option errors and each adapter's `preflightAgent` (for Daimon:
|
|
5
|
+
* MCP allowlists and absolute commands, engine/model pairing, and the public
|
|
6
|
+
* instruction-size limit). Every failing agent is reported, each named by its
|
|
7
|
+
* node id, so `spawnfile validate` can be an organization's structural check.
|
|
8
|
+
*/
|
|
9
|
+
export declare const preflightCompilePlan: (plan: CompilePlan) => void;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { getRuntimeAdapter } from "../runtime/index.js";
|
|
2
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Runs, without emitting anything, the per-agent checks compile would refuse
|
|
5
|
+
* on: runtime-option errors and each adapter's `preflightAgent` (for Daimon:
|
|
6
|
+
* MCP allowlists and absolute commands, engine/model pairing, and the public
|
|
7
|
+
* instruction-size limit). Every failing agent is reported, each named by its
|
|
8
|
+
* node id, so `spawnfile validate` can be an organization's structural check.
|
|
9
|
+
*/
|
|
10
|
+
export const preflightCompilePlan = (plan) => {
|
|
11
|
+
const failures = new Map();
|
|
12
|
+
for (const node of plan.nodes) {
|
|
13
|
+
if (node.value.kind !== "agent")
|
|
14
|
+
continue;
|
|
15
|
+
const runtimeName = node.runtimeName ?? node.value.runtime.name;
|
|
16
|
+
const adapter = getRuntimeAdapter(runtimeName);
|
|
17
|
+
const key = `${node.id} (${runtimeName})`;
|
|
18
|
+
const report = (message) => {
|
|
19
|
+
failures.set(key, (failures.get(key) ?? new Set()).add(message));
|
|
20
|
+
};
|
|
21
|
+
for (const diagnostic of adapter.validateRuntimeOptions?.(node.value.runtime.options) ?? []) {
|
|
22
|
+
if (diagnostic.level === "error")
|
|
23
|
+
report(diagnostic.message);
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
adapter.preflightAgent?.(node.value, node.id);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (!(error instanceof SpawnfileError))
|
|
30
|
+
throw error;
|
|
31
|
+
report(error.message);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (failures.size > 0) {
|
|
35
|
+
const lines = [...failures].flatMap(([agent, messages]) => [...messages].map((message) => `- ${agent}: ${message}`));
|
|
36
|
+
throw new SpawnfileError("validation_error", [`Compile would refuse ${failures.size} agent(s):`, ...lines].join("\n"));
|
|
37
|
+
}
|
|
38
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CompileReportWorkspaceGitResource, RecordingAgentReport } from "../report/index.js";
|
|
2
|
+
import type { CompilePlan } from "./types.js";
|
|
3
|
+
/** Only compiled, portable identities: no host sources and no history reads. */
|
|
4
|
+
export declare const resolveRecordingAgentFacts: (plan: CompilePlan, gitPins?: readonly CompileReportWorkspaceGitResource[]) => RecordingAgentReport[];
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { resolveMnemeDurableMemoryMountPath } from "../runtime/mnemeMcp.js";
|
|
3
|
+
import { daimonRecordingDirectory } from "../runtime/daimon/recording.js";
|
|
4
|
+
import { recordingKeepMs, SpawnfileError } from "../shared/index.js";
|
|
5
|
+
import { resolveTrainingRecordVolumes } from "./training/plan/index.js";
|
|
6
|
+
/** Only compiled, portable identities: no host sources and no history reads. */
|
|
7
|
+
export const resolveRecordingAgentFacts = (plan, gitPins = []) => plan.nodes.flatMap((node) => {
|
|
8
|
+
if (node.value.kind !== "agent" || node.value.training?.record === undefined)
|
|
9
|
+
return [];
|
|
10
|
+
const agent = node.value;
|
|
11
|
+
const memory = new Map();
|
|
12
|
+
for (const access of agent.memoryAccess ?? []) {
|
|
13
|
+
const declaring = plan.nodes.find((entry) => entry.value.source === access.source);
|
|
14
|
+
if (!declaring)
|
|
15
|
+
throw new SpawnfileError("validation_error", `Recording bank ${access.bank.id} has no declaring node`);
|
|
16
|
+
const home = resolveMnemeDurableMemoryMountPath(access.bank);
|
|
17
|
+
memory.set(`${declaring.id}\0${access.bank.id}`, {
|
|
18
|
+
id: access.bank.id, declared_by: declaring.id,
|
|
19
|
+
ledger_path: home === null ? null : path.posix.join(home, "memory/events.jsonl")
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
const resources = agent.workspaceResources ?? [];
|
|
23
|
+
return [{
|
|
24
|
+
node_id: node.id, slug: node.slug, directory: daimonRecordingDirectory(node.slug),
|
|
25
|
+
keep_ms: recordingKeepMs(agent.training.record),
|
|
26
|
+
networks: [...new Set((agent.surfaces?.moltnet ?? []).map((entry) => entry.network))].sort(),
|
|
27
|
+
memory: [...memory.values()].sort((a, b) => `${a.declared_by}:${a.id}`.localeCompare(`${b.declared_by}:${b.id}`)),
|
|
28
|
+
feeds: resources.flatMap((resource) => resource.kind === "volume" && resource.feed
|
|
29
|
+
? [{ id: resource.id, volume_name: resource.name }] : []).sort((a, b) => a.id.localeCompare(b.id)),
|
|
30
|
+
resources: resources.flatMap((resource) => resource.kind === "volume" ? []
|
|
31
|
+
: [{ id: resource.id, kind: gitPins.some((pin) => pin.id === resource.id && pin.agent_node_ids?.includes(node.id)) ? "git" : resource.kind }])
|
|
32
|
+
.sort((a, b) => a.id.localeCompare(b.id)),
|
|
33
|
+
snapshots: resolveTrainingRecordVolumes({ id: node.id, value: agent }).map((resource) => resource.id)
|
|
34
|
+
}];
|
|
35
|
+
}).sort((a, b) => a.node_id.localeCompare(b.node_id));
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type DaimonContractManifest } from "../runtime/daimon/contractManifest.js";
|
|
2
|
+
import type { CompilePlan } from "./types.js";
|
|
3
|
+
/** No runtime lookup, check output, or manifest I/O when recording is absent. */
|
|
4
|
+
export declare const assertRecordingCapability: (plan: CompilePlan, injectedManifest?: DaimonContractManifest) => Promise<void>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
2
|
+
import { DAIMON_CONTRACT_MANIFEST_SHA256, daimonSupportsWakeMoments, readVerifiedDaimonContractManifest } from "../runtime/daimon/contractManifest.js";
|
|
3
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
4
|
+
/** No runtime lookup, check output, or manifest I/O when recording is absent. */
|
|
5
|
+
export const assertRecordingCapability = async (plan, injectedManifest) => {
|
|
6
|
+
const agents = plan.nodes.filter((node) => node.kind === "agent" && node.value.training?.record !== undefined);
|
|
7
|
+
if (agents.length === 0)
|
|
8
|
+
return;
|
|
9
|
+
for (const agent of agents) {
|
|
10
|
+
if (agent.runtimeName !== "daimon")
|
|
11
|
+
throw new SpawnfileError("validation_error", `Training recording for ${agent.id} requires Daimon; runtime ${agent.runtimeName ?? "unknown"} does not support wake moments`);
|
|
12
|
+
}
|
|
13
|
+
let manifest = injectedManifest;
|
|
14
|
+
if (manifest === undefined) {
|
|
15
|
+
const verified = await readVerifiedDaimonContractManifest(fileURLToPath(new URL("../runtime/daimon/", import.meta.url)));
|
|
16
|
+
if (verified.digest !== DAIMON_CONTRACT_MANIFEST_SHA256)
|
|
17
|
+
throw new SpawnfileError("validation_error", "Pinned Daimon contract manifest does not match the capability-receipt digest");
|
|
18
|
+
manifest = verified.manifest;
|
|
19
|
+
}
|
|
20
|
+
if (!daimonSupportsWakeMoments(manifest))
|
|
21
|
+
throw new SpawnfileError("validation_error", "The pinned Daimon runtime image does not declare the wakeMoments capability; a Daimon release with it and a runtimes.yaml / contract-manifest re-pin are required");
|
|
22
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CompileReport, ContainerMemoryReport, RecordingReport } from "../report/index.js";
|
|
2
|
+
import type { CompilePlan } from "./types.js";
|
|
3
|
+
/** Project effective agent declarations and existing memory access facts only. */
|
|
4
|
+
export declare const resolveRecordingReport: (plan: CompilePlan, memories: readonly ContainerMemoryReport[], gitPins?: CompileReport["workspace_git_resources"]) => RecordingReport | undefined;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { maxRecordingKeepMs } from "../shared/index.js";
|
|
2
|
+
import { daimonRecordingMountId } from "../runtime/daimon/recording.js";
|
|
3
|
+
import { resolveRecordingAgentFacts } from "./recordingAgentFacts.js";
|
|
4
|
+
/** Project effective agent declarations and existing memory access facts only. */
|
|
5
|
+
export const resolveRecordingReport = (plan, memories, gitPins = []) => {
|
|
6
|
+
const agents = plan.nodes.filter((node) => node.kind === "agent" && node.value.training?.record !== undefined);
|
|
7
|
+
const keepMs = maxRecordingKeepMs(agents.map((node) => node.value.training?.record));
|
|
8
|
+
if (keepMs === undefined)
|
|
9
|
+
return undefined;
|
|
10
|
+
const agentIds = new Set(agents.map((node) => node.id));
|
|
11
|
+
const memoryMountIds = memories.flatMap((memory) => memory.store.persistent_mount_id !== undefined && memory.accessible_node_ids.some((id) => agentIds.has(id))
|
|
12
|
+
? [memory.store.persistent_mount_id] : []);
|
|
13
|
+
return {
|
|
14
|
+
keep_ms: keepMs, memory_mount_ids: [...new Set(memoryMountIds)].sort(),
|
|
15
|
+
recording_mount_ids: agents.filter((agent) => agent.runtimeName === "daimon").map((agent) => daimonRecordingMountId(agent.slug)).sort(),
|
|
16
|
+
agents: resolveRecordingAgentFacts(plan, gitPins)
|
|
17
|
+
};
|
|
18
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type ResolvedAuthProfile } from "../auth/index.js";
|
|
2
|
-
import { type DockerTargetExecFile } from "../deployment/index.js";
|
|
2
|
+
import { type DeploymentRecord, type DockerTargetExecFile } from "../deployment/index.js";
|
|
3
3
|
import { type CompileProjectOptions, type CompileProjectResult } from "./compileProject.js";
|
|
4
|
-
import { runDockerContainer, type DockerRunInvocation, type DockerRunResult, type DockerRunRunner } from "./runProjectDocker.js";
|
|
5
|
-
export { runDockerContainer };
|
|
4
|
+
import { inspectDetachedContainer as recoverDetachedDockerRun, runDockerContainer, type DockerRunInvocation, type DockerRunResult, type DockerRunRunner } from "./runProjectDocker.js";
|
|
5
|
+
export { recoverDetachedDockerRun, runDockerContainer };
|
|
6
6
|
export type { DockerRunInvocation, DockerRunResult, DockerRunRunner };
|
|
7
7
|
export interface RunProjectOptions extends CompileProjectOptions {
|
|
8
8
|
authProfile?: string;
|
|
@@ -29,6 +29,8 @@ export declare const createDockerRunInvocation: (compileResult: CompileProjectRe
|
|
|
29
29
|
name: string;
|
|
30
30
|
value: string;
|
|
31
31
|
};
|
|
32
|
+
/** See `RuntimeAuthPreparationInput.containerCredentialUid`. */
|
|
33
|
+
containerCredentialUid?: number;
|
|
32
34
|
containerName?: string;
|
|
33
35
|
detach?: boolean;
|
|
34
36
|
deploymentName?: string;
|
|
@@ -38,6 +40,7 @@ export declare const createDockerRunInvocation: (compileResult: CompileProjectRe
|
|
|
38
40
|
envFilePath?: string;
|
|
39
41
|
}) => Promise<DockerRunInvocation>;
|
|
40
42
|
interface ResolvedRunDeploymentOptions {
|
|
43
|
+
previousRecord?: DeploymentRecord;
|
|
41
44
|
authProfile?: string;
|
|
42
45
|
containerName?: string;
|
|
43
46
|
deploymentName?: string;
|
|
@@ -4,15 +4,16 @@ import { mkdtemp } from "node:fs/promises";
|
|
|
4
4
|
import { requireAuthProfile } from "../auth/index.js";
|
|
5
5
|
import { ensureDirectory, fileExists, removeDirectory, writeUtf8File } from "../filesystem/index.js";
|
|
6
6
|
import { appendDockerLabelArgs, createDockerDeploymentLabels, createDockerDeploymentUnitId, createDockerProjectLabel, dockerContextNameForTarget, dockerHostValueForTarget, normalizeDeploymentName, readDeploymentRecordFromOutput, resolveDeploymentRecordPath, verifyDockerDeploymentTarget, writeDockerDeploymentRecordForRun } from "../deployment/index.js";
|
|
7
|
-
import { DEFAULT_OUTPUT_DIRECTORY, SpawnfileError } from "../shared/index.js";
|
|
7
|
+
import { DAIMON_DOCKER_RUNTIME_SECURITY_ARGS, DEFAULT_OUTPUT_DIRECTORY, SpawnfileError } from "../shared/index.js";
|
|
8
8
|
import { ensureNoopolisRunId, resolveNoopolisRunId } from "../runtime/index.js";
|
|
9
9
|
import { compileProject } from "./compileProject.js";
|
|
10
10
|
import { createDefaultImageTag, resolveDockerBuildArchitecture } from "./buildProject.js";
|
|
11
11
|
import { slugify } from "./helpers.js";
|
|
12
|
-
import {
|
|
12
|
+
import { resolveDaimonCodexNativeSandboxDockerSecurityOptions } from "./runProjectDaimonCodexDocker.js";
|
|
13
|
+
import { inspectDetachedContainer as recoverDetachedDockerRun, runDockerContainer } from "./runProjectDocker.js";
|
|
13
14
|
import { executeDockerRunWithSupportCleanup } from "./runProjectLifecycle.js";
|
|
14
15
|
import { assertDeclaredModelAuthSatisfied, assertMoltnetCredentialValuesDistinct, assertRunEnvironmentSatisfied, prepareRuntimeAuthMounts, readRunEnvFile, renderDockerEnvFile, resolveAuthMountArgs, resolveRunEnvironment } from "./runProjectAuth.js";
|
|
15
|
-
export { runDockerContainer };
|
|
16
|
+
export { recoverDetachedDockerRun, runDockerContainer };
|
|
16
17
|
const resolveImageTagRoot = (inputPath) => {
|
|
17
18
|
const resolvedPath = path.resolve(inputPath);
|
|
18
19
|
return path.basename(resolvedPath).toLowerCase() === "spawnfile"
|
|
@@ -36,9 +37,11 @@ export const createDockerRunInvocation = async (compileResult, imageTag, options
|
|
|
36
37
|
...(await readRunEnvFile(options.envFilePath)),
|
|
37
38
|
...(options.cliCredential ? { [options.cliCredential.name]: options.cliCredential.value } : {})
|
|
38
39
|
});
|
|
39
|
-
const preparedRuntimeAuth = await prepareRuntimeAuthMounts(compileResult.outputDirectory, containerReport, options.authProfile ?? null, env, supportDirectory);
|
|
40
|
+
const preparedRuntimeAuth = await prepareRuntimeAuthMounts(compileResult.outputDirectory, containerReport, options.authProfile ?? null, env, supportDirectory, options.containerCredentialUid);
|
|
40
41
|
assertRunEnvironmentSatisfied(containerReport, env, preparedRuntimeAuth.coveredModelSecrets);
|
|
41
42
|
assertMoltnetCredentialValuesDistinct(containerReport, env);
|
|
43
|
+
const hasDaimon = containerReport.runtime_instances.some((instance) => instance.runtime === "daimon");
|
|
44
|
+
const opaqueDaimonCredentials = preparedRuntimeAuth.launchIdentity?.kind === "daimon";
|
|
42
45
|
await ensureDirectory(supportDirectory);
|
|
43
46
|
await writeUtf8File(envFilePath, renderDockerEnvFile(env));
|
|
44
47
|
const deploymentName = options.deploymentName
|
|
@@ -53,17 +56,32 @@ export const createDockerRunInvocation = async (compileResult, imageTag, options
|
|
|
53
56
|
? ["--host", options.dockerHost, "run"]
|
|
54
57
|
: ["run"];
|
|
55
58
|
if (options.detach) {
|
|
56
|
-
args.push("-d");
|
|
59
|
+
args.push("-d", "--restart", "unless-stopped");
|
|
57
60
|
}
|
|
58
61
|
else {
|
|
59
62
|
args.push("--rm");
|
|
60
63
|
}
|
|
61
64
|
args.push("--name", containerName);
|
|
65
|
+
if (hasDaimon) {
|
|
66
|
+
args.push(...DAIMON_DOCKER_RUNTIME_SECURITY_ARGS, ...(await resolveDaimonCodexNativeSandboxDockerSecurityOptions(compileResult)));
|
|
67
|
+
}
|
|
62
68
|
for (const port of containerReport.ports) {
|
|
63
69
|
args.push("-p", `${port}:${port}`);
|
|
64
70
|
}
|
|
71
|
+
// Compiler-owned persistent mounts are mounted WITHOUT `volume-nocopy`.
|
|
72
|
+
// The image is the authority for the bootstrap preimage at these paths:
|
|
73
|
+
// `createStateOwnershipCommand` writes a `.spawnfile-volume-init` marker
|
|
74
|
+
// into every one of them at build time, and the Daimon ownership guard
|
|
75
|
+
// (`secureVolumeIdentity`) and `prepare_volume_resource` both REQUIRE that
|
|
76
|
+
// marker as the fresh-volume preimage. `volume-nocopy` is exactly the flag
|
|
77
|
+
// that stops Docker copying image content into an empty volume, so it
|
|
78
|
+
// starved the guard and no Daimon organization with persistent volumes
|
|
79
|
+
// could bootstrap. Copy-up only ever populates an EMPTY volume, so a
|
|
80
|
+
// reattached volume that already holds state is untouched by dropping it.
|
|
81
|
+
// (Target/secrets volumes under src/target/* keep `volume-nocopy`: no
|
|
82
|
+
// image content backs those paths and they must stay opaque.)
|
|
65
83
|
for (const mount of containerReport.persistent_mounts ?? []) {
|
|
66
|
-
args.push("
|
|
84
|
+
args.push("--mount", `type=volume,source=${mount.volume_name},target=${mount.mount_path}`);
|
|
67
85
|
}
|
|
68
86
|
const deploymentLabels = options.detach && deploymentName ? (() => {
|
|
69
87
|
const compileFingerprint = compileResult.report.compile_fingerprint ?? "sf1:unknown";
|
|
@@ -91,7 +109,14 @@ export const createDockerRunInvocation = async (compileResult, imageTag, options
|
|
|
91
109
|
dockerContext: options.dockerContext ?? null,
|
|
92
110
|
dockerHost: options.dockerHost ?? null,
|
|
93
111
|
envFilePath,
|
|
112
|
+
...((containerReport.persistent_mounts ?? []).some((mount) => mount.lifecycle === "exclusive-reattach") ? {
|
|
113
|
+
exclusiveReattachVolumes: (containerReport.persistent_mounts ?? [])
|
|
114
|
+
.filter((mount) => mount.lifecycle === "exclusive-reattach")
|
|
115
|
+
.map((mount) => mount.volume_name)
|
|
116
|
+
.sort()
|
|
117
|
+
} : {}),
|
|
94
118
|
imageTag,
|
|
119
|
+
...(opaqueDaimonCredentials ? { opaqueDaimonCredentials } : {}),
|
|
95
120
|
supportDirectory
|
|
96
121
|
};
|
|
97
122
|
}
|
|
@@ -128,6 +153,7 @@ export const resolveDetachedDeploymentOptions = async (outputDirectory, options)
|
|
|
128
153
|
});
|
|
129
154
|
}
|
|
130
155
|
return {
|
|
156
|
+
previousRecord: record,
|
|
131
157
|
authProfile: options.authProfile ?? record.auth_profile ?? undefined,
|
|
132
158
|
containerName: options.containerName ?? unit?.container_name ?? undefined,
|
|
133
159
|
deploymentName,
|
|
@@ -164,6 +190,7 @@ export const runProject = async (inputPath, options = {}) => {
|
|
|
164
190
|
const compileResult = await compileProject(inputPath, {
|
|
165
191
|
clean: options.clean,
|
|
166
192
|
containerArchitecture: targetArchitecture,
|
|
193
|
+
deploymentLineage: resolvedOptions.deploymentName ?? "ephemeral",
|
|
167
194
|
outputDirectory: options.outputDirectory,
|
|
168
195
|
...(options.worldBindingsPath !== undefined
|
|
169
196
|
? { worldBindingsPath: options.worldBindingsPath }
|
|
@@ -186,6 +213,7 @@ export const runProject = async (inputPath, options = {}) => {
|
|
|
186
213
|
const runMetadata = await executeDockerRunWithSupportCleanup(invocation, options.runRunner ?? runDockerContainer);
|
|
187
214
|
const deploymentRecordPath = invocation.detach && invocation.deploymentName
|
|
188
215
|
? await writeDockerDeploymentRecordForRun({
|
|
216
|
+
previousRecord: resolvedOptions.previousRecord,
|
|
189
217
|
authProfileName: authProfile?.name ?? null,
|
|
190
218
|
envFilePath: resolvedOptions.envFilePath,
|
|
191
219
|
imageTag,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { ResolvedAuthProfile } from "../auth/index.js";
|
|
2
2
|
import type { ContainerReport } from "../report/index.js";
|
|
3
|
+
import type { RuntimeAuthPreparationResult } from "../runtime/types.js";
|
|
3
4
|
interface PreparedRunAuth {
|
|
4
5
|
coveredModelSecrets: Set<string>;
|
|
6
|
+
launchIdentity?: RuntimeAuthPreparationResult["launchIdentity"];
|
|
5
7
|
mountArgs: string[];
|
|
6
8
|
}
|
|
7
9
|
export declare const resolveHostCliCredential: (containerReport: ContainerReport) => Promise<{
|
|
@@ -9,7 +11,7 @@ export declare const resolveHostCliCredential: (containerReport: ContainerReport
|
|
|
9
11
|
sourcePath: string;
|
|
10
12
|
value: string;
|
|
11
13
|
} | null>;
|
|
12
|
-
export declare const prepareRuntimeAuthMounts: (outputDirectory: string, containerReport: ContainerReport, authProfile: ResolvedAuthProfile | null, env: Record<string, string>, tempRoot: string) => Promise<PreparedRunAuth>;
|
|
14
|
+
export declare const prepareRuntimeAuthMounts: (outputDirectory: string, containerReport: ContainerReport, authProfile: ResolvedAuthProfile | null, env: Record<string, string>, tempRoot: string, containerCredentialUid?: number) => Promise<PreparedRunAuth>;
|
|
13
15
|
export declare const assertDeclaredModelAuthSatisfied: (containerReport: ContainerReport, authProfile: ResolvedAuthProfile | null, cliCredentialProvided?: boolean) => void;
|
|
14
16
|
export declare const resolveRunEnvironment: (containerReport: ContainerReport, authProfile: ResolvedAuthProfile | null, envFileEnv?: Record<string, string>) => Record<string, string>;
|
|
15
17
|
export declare const assertRunEnvironmentSatisfied: (containerReport: ContainerReport, env: Record<string, string>, coveredModelSecrets: Set<string>) => void;
|
|
@@ -10,6 +10,7 @@ const MODEL_AUTH_IMPORT_KINDS = {
|
|
|
10
10
|
api_key: null,
|
|
11
11
|
"claude-code": "claude-code",
|
|
12
12
|
codex: "codex",
|
|
13
|
+
grok: null,
|
|
13
14
|
none: null
|
|
14
15
|
};
|
|
15
16
|
export const resolveHostCliCredential = async (containerReport) => {
|
|
@@ -44,7 +45,7 @@ const addCoveredModelSecrets = (coveredModelSecrets, instanceId, secretNames) =>
|
|
|
44
45
|
coveredModelSecrets.add(`${instanceId}:${secretName}`);
|
|
45
46
|
}
|
|
46
47
|
};
|
|
47
|
-
export const prepareRuntimeAuthMounts = async (outputDirectory, containerReport, authProfile, env, tempRoot) => {
|
|
48
|
+
export const prepareRuntimeAuthMounts = async (outputDirectory, containerReport, authProfile, env, tempRoot, containerCredentialUid) => {
|
|
48
49
|
// No early return when `authProfile` is null: an adapter's
|
|
49
50
|
// `prepareRuntimeAuth` may still have host-credential staging to do that
|
|
50
51
|
// does not depend on an imported Spawnfile auth profile (e.g. the Pi
|
|
@@ -53,6 +54,7 @@ export const prepareRuntimeAuthMounts = async (outputDirectory, containerReport,
|
|
|
53
54
|
// responsible for treating a `null` `authProfile` as "no profile-derived
|
|
54
55
|
// imports available" rather than failing.
|
|
55
56
|
const coveredModelSecrets = new Set();
|
|
57
|
+
let launchIdentity;
|
|
56
58
|
const mountArgs = [];
|
|
57
59
|
for (const instance of containerReport.runtime_instances) {
|
|
58
60
|
const adapter = getRuntimeAdapter(instance.runtime);
|
|
@@ -61,15 +63,26 @@ export const prepareRuntimeAuthMounts = async (outputDirectory, containerReport,
|
|
|
61
63
|
}
|
|
62
64
|
const prepared = await adapter.prepareRuntimeAuth({
|
|
63
65
|
authProfile,
|
|
66
|
+
...(containerCredentialUid === undefined ? {} : { containerCredentialUid }),
|
|
64
67
|
env,
|
|
65
68
|
instance,
|
|
66
69
|
outputDirectory,
|
|
67
70
|
tempRoot
|
|
68
71
|
});
|
|
69
72
|
addCoveredModelSecrets(coveredModelSecrets, instance.id, prepared.coveredModelSecrets);
|
|
73
|
+
if (prepared.launchIdentity) {
|
|
74
|
+
if (launchIdentity && launchIdentity.uid !== prepared.launchIdentity.uid) {
|
|
75
|
+
throw new SpawnfileError("validation_error", "Opaque runtime credentials resolve conflicting launch UIDs");
|
|
76
|
+
}
|
|
77
|
+
launchIdentity = prepared.launchIdentity;
|
|
78
|
+
}
|
|
70
79
|
mountArgs.push(...prepared.mountArgs);
|
|
71
80
|
}
|
|
72
|
-
return {
|
|
81
|
+
return {
|
|
82
|
+
coveredModelSecrets,
|
|
83
|
+
...(launchIdentity ? { launchIdentity } : {}),
|
|
84
|
+
mountArgs
|
|
85
|
+
};
|
|
73
86
|
};
|
|
74
87
|
export const assertDeclaredModelAuthSatisfied = (containerReport, authProfile, cliCredentialProvided = false) => {
|
|
75
88
|
const requiredImportKinds = new Set();
|
|
@@ -108,6 +121,9 @@ const createGeneratedRuntimeSecret = (secretName, generatedMoltnetSecrets) => {
|
|
|
108
121
|
if (generatedMoltnetSecrets.has(secretName)) {
|
|
109
122
|
return randomBytes(32).toString("base64url");
|
|
110
123
|
}
|
|
124
|
+
if (secretName === "SPAWNFILE_DAIMON_CONTROL_TOKEN") {
|
|
125
|
+
return randomBytes(32).toString("base64url");
|
|
126
|
+
}
|
|
111
127
|
return null;
|
|
112
128
|
};
|
|
113
129
|
const hasEnvValue = (env, name) => typeof env[name] === "string" && env[name].length > 0;
|
|
@@ -215,7 +231,7 @@ export const resolveAuthMountArgs = async (containerReport, authProfile) => {
|
|
|
215
231
|
// Mounting the generic imported home onto the same destination would create
|
|
216
232
|
// duplicate Docker mount points and bypass the adapter's minimal-file staging.
|
|
217
233
|
const piRuntimeHomes = new Set(containerReport.runtime_instances
|
|
218
|
-
.filter((instance) => instance.runtime === "pi"
|
|
234
|
+
.filter((instance) => instance.runtime === "pi")
|
|
219
235
|
.map((instance) => instance.home_path)
|
|
220
236
|
.filter((homePath) => homePath !== null));
|
|
221
237
|
const genericRuntimeHomes = containerReport.runtime_homes
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CompileProjectResult } from "./compileProject.js";
|
|
2
|
+
export { DAIMON_CODEX_NATIVE_SANDBOX_DOCKER_SECURITY_OPTS } from "../shared/index.js";
|
|
3
|
+
export declare const resolveDaimonCodexNativeSandboxDockerSecurityOptions: (compileResult: CompileProjectResult) => Promise<string[]>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { readUtf8File } from "../filesystem/index.js";
|
|
3
|
+
import { daimonEngineDockerSecurityArgsForConfigs, materializeDaimonGrokSeccompProfile, SpawnfileError } from "../shared/index.js";
|
|
4
|
+
export { DAIMON_CODEX_NATIVE_SANDBOX_DOCKER_SECURITY_OPTS } from "../shared/index.js";
|
|
5
|
+
const assertContainedPath = (root, candidate) => {
|
|
6
|
+
const normalizedRoot = path.resolve(root);
|
|
7
|
+
const normalizedCandidate = path.resolve(candidate);
|
|
8
|
+
const relative = path.relative(normalizedRoot, normalizedCandidate);
|
|
9
|
+
if (relative === "" || relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
|
|
10
|
+
throw new SpawnfileError("validation_error", "Daimon generated config path escapes the compiled container rootfs");
|
|
11
|
+
}
|
|
12
|
+
return normalizedCandidate;
|
|
13
|
+
};
|
|
14
|
+
const configPathInOutput = (outputDirectory, instance) => {
|
|
15
|
+
if (!instance.config_path.startsWith("/")) {
|
|
16
|
+
throw new SpawnfileError("validation_error", "Daimon runtime instance has a non-absolute generated config path");
|
|
17
|
+
}
|
|
18
|
+
const rootfs = path.join(outputDirectory, "container", "rootfs");
|
|
19
|
+
return assertContainedPath(rootfs, path.join(rootfs, `.${instance.config_path}`));
|
|
20
|
+
};
|
|
21
|
+
export const resolveDaimonCodexNativeSandboxDockerSecurityOptions = async (compileResult) => {
|
|
22
|
+
const instances = compileResult.report.container?.runtime_instances
|
|
23
|
+
.filter((instance) => instance.runtime === "daimon") ?? [];
|
|
24
|
+
const sources = [];
|
|
25
|
+
for (const instance of instances) {
|
|
26
|
+
try {
|
|
27
|
+
sources.push(await readUtf8File(configPathInOutput(compileResult.outputDirectory, instance)));
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (error instanceof SpawnfileError)
|
|
31
|
+
throw error;
|
|
32
|
+
throw new SpawnfileError("validation_error", "Could not read Daimon's generated organization config before Docker launch");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return daimonEngineDockerSecurityArgsForConfigs(sources, () => materializeDaimonGrokSeccompProfile(path.join(compileResult.outputDirectory, "container", "security")));
|
|
36
|
+
};
|
|
@@ -9,18 +9,22 @@ export interface DockerRunInvocation {
|
|
|
9
9
|
dockerContext?: string | null;
|
|
10
10
|
dockerHost?: string | null;
|
|
11
11
|
envFilePath: string;
|
|
12
|
+
/** Host-stable credential realms that must have at most one live deployment. */
|
|
13
|
+
exclusiveReattachVolumes?: readonly string[];
|
|
12
14
|
imageTag: string;
|
|
13
|
-
onDetachedStarted?: (result:
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
onDetachedStarted?: (result: DockerRunResult) => Promise<void>;
|
|
16
|
+
/** Ephemeral guard; never serialized into reports, records, or labels. */
|
|
17
|
+
opaqueDaimonCredentials?: boolean;
|
|
16
18
|
supportDirectory: string;
|
|
17
19
|
}
|
|
18
20
|
export interface DockerRunResult {
|
|
19
21
|
containerId?: string;
|
|
22
|
+
containerName?: string;
|
|
20
23
|
deploymentLabels?: Readonly<Record<string, string>>;
|
|
21
24
|
imageId?: string;
|
|
22
25
|
}
|
|
23
26
|
export type DockerRunRunner = (invocation: DockerRunInvocation) => Promise<DockerRunResult | void>;
|
|
24
27
|
export declare const createDetachedContainerInspectArgs: (invocation: DockerRunInvocation, containerId: string) => string[];
|
|
25
|
-
export declare const parseDetachedContainerInspect: (stdout: string, expectedContainerId: string, expectedLabels?: Readonly<Record<string, string
|
|
28
|
+
export declare const parseDetachedContainerInspect: (stdout: string, expectedContainerId: string, expectedLabels?: Readonly<Record<string, string>>, expectedContainerName?: string | null) => DockerRunResult;
|
|
29
|
+
export declare const inspectDetachedContainer: (invocation: DockerRunInvocation, containerId: string) => Promise<DockerRunResult>;
|
|
26
30
|
export declare const runDockerContainer: DockerRunRunner;
|