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,5 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileExists, readUtf8File } from "../filesystem/index.js";
|
|
3
|
+
import { derivePersistentMountVolumeName, parseDistributionReport } from "../distribution/index.js";
|
|
3
4
|
import { REPORT_FILENAME, SpawnfileError } from "../shared/index.js";
|
|
4
5
|
import { exportRunArtifacts } from "./artifactsExport.js";
|
|
5
6
|
import { assertDeploymentLifecycleCorrelation, } from "./deploymentLifecycleCorrelation.js";
|
|
@@ -7,6 +8,104 @@ import { defaultDockerTeardownExecFile, removeDockerContainer, removeDockerVolum
|
|
|
7
8
|
import { DOWN_RECEIPT_VERSION } from "./downReceiptTypes.js";
|
|
8
9
|
import { initializeOrganizationHandoffAuthorityStore, } from "./organizationHandoffAuthorityStore.js";
|
|
9
10
|
import { readDeploymentRecordFromOutput } from "./record.js";
|
|
11
|
+
import { assertRecordedMemoryRetention, recordedMemoryForDeletion } from "./recordedMemoryRetention.js";
|
|
12
|
+
import { readHomeDeploymentRecord, readHomeDeploymentReport, resolveHomeRecordPath } from "./homeStore.js";
|
|
13
|
+
import { resolveDeploymentRecordPath } from "./names.js";
|
|
14
|
+
import { dockerContextNameForTarget } from "./target.js";
|
|
15
|
+
export const readCanonicalDownRecord = async (compiledOutputDirectory, deploymentName) => {
|
|
16
|
+
const projectPath = resolveDeploymentRecordPath(path.resolve(compiledOutputDirectory), deploymentName);
|
|
17
|
+
const homePath = resolveHomeRecordPath(deploymentName);
|
|
18
|
+
const [projectExists, homeExists] = await Promise.all([fileExists(projectPath), fileExists(homePath)]);
|
|
19
|
+
if (projectExists && homeExists)
|
|
20
|
+
throw new SpawnfileError("runtime_error", "Deployment record is ambiguous between project and image stores");
|
|
21
|
+
if (projectExists) {
|
|
22
|
+
const record = await readDeploymentRecordFromOutput(path.resolve(compiledOutputDirectory), deploymentName);
|
|
23
|
+
if (record.source.kind !== "project")
|
|
24
|
+
throw new SpawnfileError("runtime_error", "Project deployment store contains a non-project record");
|
|
25
|
+
return { mode: "project", record };
|
|
26
|
+
}
|
|
27
|
+
if (homeExists) {
|
|
28
|
+
const record = await readHomeDeploymentRecord(deploymentName);
|
|
29
|
+
if (record.source.kind !== "image")
|
|
30
|
+
throw new SpawnfileError("runtime_error", "Image deployment store contains a non-image record");
|
|
31
|
+
return { mode: "image", record };
|
|
32
|
+
}
|
|
33
|
+
throw new SpawnfileError("validation_error", `No recorded deployment named ${deploymentName}`);
|
|
34
|
+
};
|
|
35
|
+
const imageDown = async (record, options, runner) => {
|
|
36
|
+
if (record.source.kind !== "image" || record.units.length !== 1)
|
|
37
|
+
throw new SpawnfileError("runtime_error", "Image deployment record is invalid for teardown");
|
|
38
|
+
if (!record.export_index && !options.force)
|
|
39
|
+
throw new SpawnfileError("runtime_error", "Image deployment artifact export is unsupported; pass --force to discard unexported artifacts");
|
|
40
|
+
const unit = record.units[0];
|
|
41
|
+
if (!unit.container_id || !unit.image_id)
|
|
42
|
+
throw new SpawnfileError("runtime_error", "Image deployment has no exact recorded container or image identity");
|
|
43
|
+
const context = dockerContextNameForTarget(record.target);
|
|
44
|
+
const prefix = context ? ["--context", context] : record.target.kind === "host" ? ["--host", record.target.value] : [];
|
|
45
|
+
const inspected = await runner.execFile(runner.dockerCommand, [...prefix, "container", "inspect", "--format", "{{json .Id}}\n{{json .Name}}\n{{json .Image}}\n{{json .Config.Labels}}", unit.container_id], { timeout: runner.timeoutMs });
|
|
46
|
+
let identity;
|
|
47
|
+
try {
|
|
48
|
+
const [idLine, nameLine, imageLine, labelsLine, ...extra] = inspected.stdout.trim().split("\n");
|
|
49
|
+
if (!idLine || !nameLine || !imageLine || !labelsLine || extra.length)
|
|
50
|
+
throw new Error();
|
|
51
|
+
identity = { id: JSON.parse(idLine), imageId: JSON.parse(imageLine), name: JSON.parse(nameLine), labels: JSON.parse(labelsLine) };
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
throw new SpawnfileError("runtime_error", "Image deployment container identity is malformed");
|
|
55
|
+
}
|
|
56
|
+
if (identity.id !== unit.container_id || identity.name !== `/${unit.container_name}` || identity.imageId !== unit.image_id
|
|
57
|
+
|| identity.labels["com.spawnfile.deployment"] !== record.name
|
|
58
|
+
|| identity.labels["com.spawnfile.compile_fingerprint"] !== record.compile_fingerprint
|
|
59
|
+
|| identity.labels["com.spawnfile.unit"] !== unit.id) {
|
|
60
|
+
throw new SpawnfileError("runtime_error", "Image deployment container identity does not match its record");
|
|
61
|
+
}
|
|
62
|
+
let reportValue;
|
|
63
|
+
try {
|
|
64
|
+
reportValue = JSON.parse(await readHomeDeploymentReport(record.name));
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
68
|
+
throw new SpawnfileError("runtime_error", `Cached image distribution report is unreadable: ${reason}`);
|
|
69
|
+
}
|
|
70
|
+
const report = parseDistributionReport(reportValue, "cached image distribution report");
|
|
71
|
+
if (report.compile_fingerprint !== record.compile_fingerprint)
|
|
72
|
+
throw new SpawnfileError("runtime_error", "Cached image distribution report does not match its deployment record");
|
|
73
|
+
const { owned, skipped } = partitionDeclaredVolumes(report.persistent_mounts, (mount) => derivePersistentMountVolumeName(record.name, mount));
|
|
74
|
+
assertRecordedMemoryRetention(recordedMemoryForDeletion(record, report, report.persistent_mounts, options), report.persistent_mounts, owned, (mount) => derivePersistentMountVolumeName(record.name, mount), options);
|
|
75
|
+
const volumes = [...owned, ...skipped].sort();
|
|
76
|
+
const removed = await removeDockerContainer(record.target, unit.container_id, runner);
|
|
77
|
+
if (!removed.removed)
|
|
78
|
+
return { deployment: record.name, errors: [`unable to remove container ${unit.container_id} (unit ${unit.id}): ${removed.error}`], retained_volumes: volumes, units_stopped: [], version: DOWN_RECEIPT_VERSION, ...(skipped.length > 0 ? { skipped_volumes: skipped } : {}) };
|
|
79
|
+
const errors = [], retained = [...skipped];
|
|
80
|
+
if (options.removeVolumes)
|
|
81
|
+
for (const volume of owned) {
|
|
82
|
+
const result = await removeDockerVolume(record.target, volume, runner);
|
|
83
|
+
if (!result.removed) {
|
|
84
|
+
errors.push(`unable to remove volume ${volume}: ${result.error}`);
|
|
85
|
+
retained.push(volume);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else
|
|
89
|
+
retained.push(...owned);
|
|
90
|
+
return { deployment: record.name, errors, retained_volumes: retained.sort(), units_stopped: [unit.id], version: DOWN_RECEIPT_VERSION, ...(skipped.length > 0 ? { skipped_volumes: skipped } : {}) };
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Splits the volumes a `--volumes` teardown found into the ones this deployment
|
|
94
|
+
* owns and the author-declared ones it shares with every other deployment of the
|
|
95
|
+
* project. See downReceiptTypes.ts for why the declared ones are never removed.
|
|
96
|
+
*/
|
|
97
|
+
const partitionDeclaredVolumes = (mounts, volumeNameOf) => {
|
|
98
|
+
const skipped = new Set();
|
|
99
|
+
const owned = new Set();
|
|
100
|
+
for (const mount of mounts) {
|
|
101
|
+
(mount.declared_volume_name?.trim() ? skipped : owned).add(volumeNameOf(mount));
|
|
102
|
+
}
|
|
103
|
+
// A name claimed by both is shared state, and the compiler already rejects that
|
|
104
|
+
// collision; fail safe here regardless by never removing it.
|
|
105
|
+
for (const name of skipped)
|
|
106
|
+
owned.delete(name);
|
|
107
|
+
return { owned: [...owned].sort(), skipped: [...skipped].sort() };
|
|
108
|
+
};
|
|
10
109
|
const targetRefForUnit = (unit) => unit.container_id ?? unit.container_name;
|
|
11
110
|
const readCompileReport = async (compiledOutputDirectory) => {
|
|
12
111
|
const reportPath = path.join(compiledOutputDirectory, REPORT_FILENAME);
|
|
@@ -95,15 +194,22 @@ export const downDeployment = async (options) => {
|
|
|
95
194
|
const dockerCommand = options.dockerCommand ?? "docker";
|
|
96
195
|
const execFileImpl = options.execFile ?? defaultDockerTeardownExecFile;
|
|
97
196
|
const timeoutMs = options.timeoutMs ?? 30_000;
|
|
98
|
-
const
|
|
197
|
+
const resolved = await readCanonicalDownRecord(compiledOutputDirectory, options.deploymentName);
|
|
198
|
+
const initialRecord = resolved.record;
|
|
99
199
|
assertDeploymentLifecycleCorrelation(initialRecord, options.expectedLifecycleCorrelation);
|
|
200
|
+
const runnerOptions = { dockerCommand, execFile: execFileImpl, timeoutMs };
|
|
201
|
+
if (resolved.mode === "image")
|
|
202
|
+
return imageDown(initialRecord, options, runnerOptions);
|
|
203
|
+
const report = await readCompileReport(compiledOutputDirectory);
|
|
204
|
+
const mounts = report?.container?.persistent_mounts ?? [];
|
|
205
|
+
const { owned, skipped } = partitionDeclaredVolumes(mounts, (mount) => mount.volume_name);
|
|
206
|
+
assertRecordedMemoryRetention(recordedMemoryForDeletion(initialRecord, report, mounts, options), mounts, owned, (mount) => mount.volume_name, options);
|
|
100
207
|
const record = await ensureExported(initialRecord, {
|
|
101
208
|
...options,
|
|
102
209
|
compiledOutputDirectory,
|
|
103
210
|
});
|
|
104
211
|
assertDeploymentLifecycleCorrelation(record, options.expectedLifecycleCorrelation);
|
|
105
212
|
await closeOrganizationHandoff(record);
|
|
106
|
-
const runnerOptions = { dockerCommand, execFile: execFileImpl, timeoutMs };
|
|
107
213
|
const unitsStopped = [];
|
|
108
214
|
const errors = [];
|
|
109
215
|
for (const unit of record.units) {
|
|
@@ -120,13 +226,11 @@ export const downDeployment = async (options) => {
|
|
|
120
226
|
errors.push(`unable to remove container ${containerRef} (unit ${unit.id}): ${outcome.error}`);
|
|
121
227
|
}
|
|
122
228
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
].sort();
|
|
127
|
-
const retainedVolumes = [];
|
|
229
|
+
// Declared volumes are retained unconditionally: they are shared project
|
|
230
|
+
// state, not this deployment's, so `--volumes` must never destroy them.
|
|
231
|
+
const retainedVolumes = [...skipped];
|
|
128
232
|
if (options.removeVolumes) {
|
|
129
|
-
for (const volumeName of
|
|
233
|
+
for (const volumeName of owned) {
|
|
130
234
|
const outcome = await removeDockerVolume(record.target, volumeName, runnerOptions);
|
|
131
235
|
if (!outcome.removed) {
|
|
132
236
|
errors.push(`unable to remove volume ${volumeName}: ${outcome.error}`);
|
|
@@ -135,12 +239,13 @@ export const downDeployment = async (options) => {
|
|
|
135
239
|
}
|
|
136
240
|
}
|
|
137
241
|
else {
|
|
138
|
-
retainedVolumes.push(...
|
|
242
|
+
retainedVolumes.push(...owned);
|
|
139
243
|
}
|
|
140
244
|
return {
|
|
141
245
|
deployment: record.name,
|
|
142
246
|
errors,
|
|
143
247
|
retained_volumes: retainedVolumes.sort(),
|
|
248
|
+
...(skipped.length > 0 ? { skipped_volumes: skipped } : {}),
|
|
144
249
|
units_stopped: unitsStopped.sort(),
|
|
145
250
|
version: DOWN_RECEIPT_VERSION,
|
|
146
251
|
};
|
|
@@ -6,8 +6,22 @@ import { z } from "zod";
|
|
|
6
6
|
* `unit.id`, e.g. `"<deployment>-container"`), not raw Docker container ids, so a caller
|
|
7
7
|
* can cross-reference the up-receipt/deployment record without re-deriving anything.
|
|
8
8
|
* `retained_volumes` is "named volumes still present on disk after this call returns" —
|
|
9
|
-
* true whether they were never touched (the default)
|
|
10
|
-
* `--volumes` removal that failed (surfaced in `errors`, not silently dropped)
|
|
9
|
+
* true whether they were never touched (the default), survived an attempted
|
|
10
|
+
* `--volumes` removal that failed (surfaced in `errors`, not silently dropped), or
|
|
11
|
+
* were deliberately skipped as shared project state (`skipped_volumes`).
|
|
12
|
+
*
|
|
13
|
+
* `skipped_volumes` is the third outcome this contract originally could not express.
|
|
14
|
+
* An author-declared volume name (a workspace resource `name`, a
|
|
15
|
+
* `store.persistence.name`, a memory bank's `persistence.name`) is verbatim in every
|
|
16
|
+
* mode and every deployment, so it is NOT "this deployment's named volume" — a
|
|
17
|
+
* `down --volumes` of a dev or scratch deployment would otherwise destroy the
|
|
18
|
+
* production state that same name refers to, whenever production happens to be
|
|
19
|
+
* stopped (Docker only refuses a volume that is currently in use). Those volumes are
|
|
20
|
+
* skipped, listed here AND in `retained_volumes`, and removing one is a deliberate
|
|
21
|
+
* project-level act: `docker volume rm <name>`.
|
|
22
|
+
*
|
|
23
|
+
* The field is OMITTED when nothing was skipped, so every receipt that could be
|
|
24
|
+
* produced before this existed is still byte-identical.
|
|
11
25
|
*/
|
|
12
26
|
export declare const DOWN_RECEIPT_VERSION: "spawnfile.down-receipt.v1";
|
|
13
27
|
export declare const downReceiptSchema: z.ZodObject<{
|
|
@@ -15,6 +29,7 @@ export declare const downReceiptSchema: z.ZodObject<{
|
|
|
15
29
|
deployment: z.ZodString;
|
|
16
30
|
units_stopped: z.ZodArray<z.ZodString>;
|
|
17
31
|
retained_volumes: z.ZodArray<z.ZodString>;
|
|
32
|
+
skipped_volumes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
18
33
|
errors: z.ZodArray<z.ZodString>;
|
|
19
34
|
}, z.core.$strict>;
|
|
20
35
|
export type DownReceipt = z.infer<typeof downReceiptSchema>;
|
|
@@ -6,8 +6,22 @@ import { z } from "zod";
|
|
|
6
6
|
* `unit.id`, e.g. `"<deployment>-container"`), not raw Docker container ids, so a caller
|
|
7
7
|
* can cross-reference the up-receipt/deployment record without re-deriving anything.
|
|
8
8
|
* `retained_volumes` is "named volumes still present on disk after this call returns" —
|
|
9
|
-
* true whether they were never touched (the default)
|
|
10
|
-
* `--volumes` removal that failed (surfaced in `errors`, not silently dropped)
|
|
9
|
+
* true whether they were never touched (the default), survived an attempted
|
|
10
|
+
* `--volumes` removal that failed (surfaced in `errors`, not silently dropped), or
|
|
11
|
+
* were deliberately skipped as shared project state (`skipped_volumes`).
|
|
12
|
+
*
|
|
13
|
+
* `skipped_volumes` is the third outcome this contract originally could not express.
|
|
14
|
+
* An author-declared volume name (a workspace resource `name`, a
|
|
15
|
+
* `store.persistence.name`, a memory bank's `persistence.name`) is verbatim in every
|
|
16
|
+
* mode and every deployment, so it is NOT "this deployment's named volume" — a
|
|
17
|
+
* `down --volumes` of a dev or scratch deployment would otherwise destroy the
|
|
18
|
+
* production state that same name refers to, whenever production happens to be
|
|
19
|
+
* stopped (Docker only refuses a volume that is currently in use). Those volumes are
|
|
20
|
+
* skipped, listed here AND in `retained_volumes`, and removing one is a deliberate
|
|
21
|
+
* project-level act: `docker volume rm <name>`.
|
|
22
|
+
*
|
|
23
|
+
* The field is OMITTED when nothing was skipped, so every receipt that could be
|
|
24
|
+
* produced before this existed is still byte-identical.
|
|
11
25
|
*/
|
|
12
26
|
export const DOWN_RECEIPT_VERSION = "spawnfile.down-receipt.v1";
|
|
13
27
|
export const downReceiptSchema = z
|
|
@@ -16,6 +30,7 @@ export const downReceiptSchema = z
|
|
|
16
30
|
deployment: z.string().min(1),
|
|
17
31
|
units_stopped: z.array(z.string().min(1)),
|
|
18
32
|
retained_volumes: z.array(z.string().min(1)),
|
|
33
|
+
skipped_volumes: z.array(z.string().min(1)).optional(),
|
|
19
34
|
errors: z.array(z.string().min(1))
|
|
20
35
|
})
|
|
21
36
|
.strict();
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import type { DistributionReport } from "../distribution/index.js";
|
|
2
2
|
import { type DeploymentRecord } from "./record.js";
|
|
3
|
+
export { HomeDeploymentRecordingError } from "./recordPublication.js";
|
|
3
4
|
export declare const resolveHomeDeploymentsDirectory: () => string;
|
|
4
5
|
export declare const resolveHomeDeploymentDirectory: (deploymentName: string) => string;
|
|
5
6
|
export declare const resolveHomeRecordPath: (deploymentName: string) => string;
|
|
6
7
|
export declare const resolveHomeReportPath: (deploymentName: string) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Acquires an exclusive lock for a home deployment so concurrent `up`
|
|
10
|
+
* invocations (and a drained release holding it across its swap) cannot race
|
|
11
|
+
* on the same record or orphan each other's containers. Returns a release
|
|
12
|
+
* function. Throws if a live operation holds the lock; a lock left by a
|
|
13
|
+
* process that is gone is reclaimed. See `pidLock.ts`.
|
|
14
|
+
*/
|
|
7
15
|
export declare const acquireHomeDeploymentLock: (deploymentName: string) => Promise<() => Promise<void>>;
|
|
8
16
|
/** Writes the record and the cached distribution report together, record last. */
|
|
9
|
-
export declare const writeHomeDeployment: (record: DeploymentRecord, report: DistributionReport) => Promise<{
|
|
17
|
+
export declare const writeHomeDeployment: (record: DeploymentRecord, report: DistributionReport, previous?: DeploymentRecord | null) => Promise<{
|
|
10
18
|
recordPath: string;
|
|
11
19
|
reportPath: string;
|
|
12
20
|
}>;
|
|
@@ -1,84 +1,47 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import {
|
|
2
|
+
import { readdir } from "node:fs/promises";
|
|
3
3
|
import { resolveSpawnfileHome } from "../auth/index.js";
|
|
4
|
-
import { ensureDirectory, readUtf8File } from "../filesystem/index.js";
|
|
4
|
+
import { ensureDirectory, readUtf8File, writeDurableFile } from "../filesystem/index.js";
|
|
5
5
|
import { SpawnfileError } from "../shared/index.js";
|
|
6
6
|
import { normalizeDeploymentName } from "./names.js";
|
|
7
|
+
import { acquirePidLock, PidLockBusyError } from "./pidLock.js";
|
|
7
8
|
import { parseDeploymentRecord } from "./record.js";
|
|
9
|
+
import { bindDeploymentRecording, publishDeploymentRecord, writeAtomicDeploymentFile } from "./recordPublication.js";
|
|
10
|
+
export { HomeDeploymentRecordingError } from "./recordPublication.js";
|
|
8
11
|
export const resolveHomeDeploymentsDirectory = () => path.join(resolveSpawnfileHome(), "deployments");
|
|
9
12
|
export const resolveHomeDeploymentDirectory = (deploymentName) => path.join(resolveHomeDeploymentsDirectory(), normalizeDeploymentName(deploymentName));
|
|
10
13
|
export const resolveHomeRecordPath = (deploymentName) => path.join(resolveHomeDeploymentDirectory(deploymentName), "record.json");
|
|
11
14
|
export const resolveHomeReportPath = (deploymentName) => path.join(resolveHomeDeploymentDirectory(deploymentName), "spawnfile-report.json");
|
|
12
15
|
/**
|
|
13
16
|
* Acquires an exclusive lock for a home deployment so concurrent `up`
|
|
14
|
-
* invocations
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
+
* invocations (and a drained release holding it across its swap) cannot race
|
|
18
|
+
* on the same record or orphan each other's containers. Returns a release
|
|
19
|
+
* function. Throws if a live operation holds the lock; a lock left by a
|
|
20
|
+
* process that is gone is reclaimed. See `pidLock.ts`.
|
|
17
21
|
*/
|
|
18
|
-
const isProcessAlive = (pid) => {
|
|
19
|
-
try {
|
|
20
|
-
process.kill(pid, 0);
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
// ESRCH means no such process (stale); EPERM means it exists but is ours to
|
|
25
|
-
// not signal — treat as alive to stay safe.
|
|
26
|
-
return error.code === "EPERM";
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
22
|
export const acquireHomeDeploymentLock = async (deploymentName) => {
|
|
30
23
|
const directory = resolveHomeDeploymentDirectory(deploymentName);
|
|
31
24
|
await ensureDirectory(directory);
|
|
32
|
-
const lockPath = path.join(directory, ".lock");
|
|
33
|
-
const write = async () => {
|
|
34
|
-
const handle = await open(lockPath, "wx");
|
|
35
|
-
try {
|
|
36
|
-
await handle.write(JSON.stringify({ pid: process.pid }));
|
|
37
|
-
}
|
|
38
|
-
finally {
|
|
39
|
-
await handle.close();
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
25
|
try {
|
|
43
|
-
await
|
|
26
|
+
return await acquirePidLock(path.join(directory, ".lock"));
|
|
44
27
|
}
|
|
45
28
|
catch (error) {
|
|
46
|
-
if (error
|
|
47
|
-
throw error;
|
|
48
|
-
}
|
|
49
|
-
// A lock exists. Reclaim it only if the owning process is gone (a crashed
|
|
50
|
-
// deploy must not lock the deployment forever); otherwise it is genuinely busy.
|
|
51
|
-
let ownerPid = null;
|
|
52
|
-
try {
|
|
53
|
-
ownerPid = JSON.parse(await readUtf8File(lockPath)).pid ?? null;
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
ownerPid = null;
|
|
57
|
-
}
|
|
58
|
-
if (ownerPid !== null && isProcessAlive(ownerPid)) {
|
|
29
|
+
if (error instanceof PidLockBusyError) {
|
|
59
30
|
throw new SpawnfileError("runtime_error", `Deployment "${normalizeDeploymentName(deploymentName)}" is already being modified by another operation`);
|
|
60
31
|
}
|
|
61
|
-
|
|
62
|
-
await write();
|
|
32
|
+
throw error;
|
|
63
33
|
}
|
|
64
|
-
return async () => {
|
|
65
|
-
await rm(lockPath, { force: true });
|
|
66
|
-
};
|
|
67
|
-
};
|
|
68
|
-
const writeAtomic = async (filePath, content) => {
|
|
69
|
-
const temporaryPath = path.join(path.dirname(filePath), `.${path.basename(filePath)}.${process.pid}.${Date.now()}.tmp`);
|
|
70
|
-
await writeFile(temporaryPath, content, "utf8");
|
|
71
|
-
await rename(temporaryPath, filePath);
|
|
72
34
|
};
|
|
73
35
|
/** Writes the record and the cached distribution report together, record last. */
|
|
74
|
-
export const writeHomeDeployment = async (record, report) => {
|
|
36
|
+
export const writeHomeDeployment = async (record, report, previous) => {
|
|
75
37
|
const parsed = parseDeploymentRecord(record);
|
|
76
38
|
const directory = resolveHomeDeploymentDirectory(parsed.name);
|
|
77
39
|
await ensureDirectory(directory);
|
|
78
40
|
const reportPath = resolveHomeReportPath(parsed.name);
|
|
79
41
|
const recordPath = resolveHomeRecordPath(parsed.name);
|
|
80
|
-
|
|
81
|
-
|
|
42
|
+
const reportBytes = `${JSON.stringify(report, null, 2)}\n`;
|
|
43
|
+
const bound = parseDeploymentRecord(bindDeploymentRecording(recordPath, parsed, report, reportBytes));
|
|
44
|
+
await publishDeploymentRecord(recordPath, bound, (durable) => (durable ? writeDurableFile : writeAtomicDeploymentFile)(reportPath, reportBytes), previous);
|
|
82
45
|
return { recordPath, reportPath };
|
|
83
46
|
};
|
|
84
47
|
export const readHomeDeploymentRecord = async (deploymentName) => {
|
|
@@ -4,6 +4,8 @@ export * from "./artifactsExportPlan.js";
|
|
|
4
4
|
export * from "./artifactsExportTypes.js";
|
|
5
5
|
export * from "./privateArtifactsExport.js";
|
|
6
6
|
export * from "./buildImageCacheStore.js";
|
|
7
|
+
export * from "./candidateDiagnostics.js";
|
|
8
|
+
export * from "./candidateRecording.js";
|
|
7
9
|
export * from "./dockerLabels.js";
|
|
8
10
|
export * from "./dockerInspect.js";
|
|
9
11
|
export * from "./dockerLogs.js";
|
|
@@ -16,11 +18,19 @@ export * from "./downDeployment.js";
|
|
|
16
18
|
export * from "./downReceiptTypes.js";
|
|
17
19
|
export * from "./homeStore.js";
|
|
18
20
|
export * from "./lifecycleCompletion.js";
|
|
21
|
+
export * from "./lifecycleUpRecords.js";
|
|
19
22
|
export * from "./names.js";
|
|
20
23
|
export * from "./organizationHandoffTypes.js";
|
|
21
24
|
export * from "./organizationHandoffAuthorityTypes.js";
|
|
22
25
|
export * from "./organizationHandoffAuthorityStore.js";
|
|
23
26
|
export * from "./organizationReady.js";
|
|
27
|
+
export * from "./pidLock.js";
|
|
28
|
+
export * from "./canaryCutover.js";
|
|
29
|
+
export * from "./productStateClone.js";
|
|
24
30
|
export * from "./record.js";
|
|
31
|
+
export * from "./recordedMemoryRetention.js";
|
|
25
32
|
export * from "./target.js";
|
|
26
33
|
export * from "./upReceiptTypes.js";
|
|
34
|
+
export * from "./resourceLog.js";
|
|
35
|
+
export * from "./activation.js";
|
|
36
|
+
export { bindDeploymentRecording, reconcileDeploymentResources } from "./recordPublication.js";
|
package/dist/deployment/index.js
CHANGED
|
@@ -4,6 +4,8 @@ export * from "./artifactsExportPlan.js";
|
|
|
4
4
|
export * from "./artifactsExportTypes.js";
|
|
5
5
|
export * from "./privateArtifactsExport.js";
|
|
6
6
|
export * from "./buildImageCacheStore.js";
|
|
7
|
+
export * from "./candidateDiagnostics.js";
|
|
8
|
+
export * from "./candidateRecording.js";
|
|
7
9
|
export * from "./dockerLabels.js";
|
|
8
10
|
export * from "./dockerInspect.js";
|
|
9
11
|
export * from "./dockerLogs.js";
|
|
@@ -16,12 +18,20 @@ export * from "./downDeployment.js";
|
|
|
16
18
|
export * from "./downReceiptTypes.js";
|
|
17
19
|
export * from "./homeStore.js";
|
|
18
20
|
export * from "./lifecycleCompletion.js";
|
|
21
|
+
export * from "./lifecycleUpRecords.js";
|
|
19
22
|
export * from "./names.js";
|
|
20
23
|
export * from "./organizationHandoffTypes.js";
|
|
21
24
|
export * from "./organizationHandoffAuthorityTypes.js";
|
|
22
25
|
export * from "./organizationHandoffAuthorityStore.js";
|
|
23
26
|
export * from "./organizationReady.js";
|
|
27
|
+
export * from "./pidLock.js";
|
|
28
|
+
export * from "./canaryCutover.js";
|
|
29
|
+
export * from "./productStateClone.js";
|
|
24
30
|
export * from "./record.js";
|
|
31
|
+
export * from "./recordedMemoryRetention.js";
|
|
25
32
|
// Compatibility target exports remain available from this legacy deployment barrel.
|
|
26
33
|
export * from "./target.js";
|
|
27
34
|
export * from "./upReceiptTypes.js";
|
|
35
|
+
export * from "./resourceLog.js";
|
|
36
|
+
export * from "./activation.js";
|
|
37
|
+
export { bindDeploymentRecording, reconcileDeploymentResources } from "./recordPublication.js";
|
|
@@ -6,6 +6,10 @@ export declare const LIFECYCLE_OWNER_VERSION: "spawnfile.lifecycle-owner.v1";
|
|
|
6
6
|
export declare const LIFECYCLE_ADMISSION_VERSION: "spawnfile.lifecycle-admission.v1";
|
|
7
7
|
export declare const LIFECYCLE_AMBIGUOUS_VERSION: "spawnfile.lifecycle-ambiguous.v1";
|
|
8
8
|
export declare const LIFECYCLE_TERMINAL_VERSION: "spawnfile.lifecycle-terminal.v1";
|
|
9
|
+
export declare const LIFECYCLE_UP_START_VERSION: "spawnfile.lifecycle-up-start.v1";
|
|
10
|
+
export declare const LIFECYCLE_UP_RESERVATION_VERSION: "spawnfile.lifecycle-up-reservation.v1";
|
|
11
|
+
export declare const LIFECYCLE_UP_CLEANUP_VERSION: "spawnfile.lifecycle-up-cleanup.v1";
|
|
12
|
+
export declare const LIFECYCLE_UP_EXTRA_LABELS: "image-config-labels";
|
|
9
13
|
export declare const LIFECYCLE_RECORD_MAX_BYTES = 1000000;
|
|
10
14
|
export declare const lifecycleIdSchema: z.ZodString;
|
|
11
15
|
export declare const lifecycleInvocationSchema: z.ZodObject<{
|
|
@@ -94,6 +98,68 @@ export declare const lifecycleCompletionSchema: z.ZodObject<{
|
|
|
94
98
|
version: z.ZodLiteral<"spawnfile.lifecycle-completion.v1">;
|
|
95
99
|
}, z.core.$strict>;
|
|
96
100
|
export type LifecycleCompletion = z.infer<typeof lifecycleCompletionSchema>;
|
|
101
|
+
export declare const lifecycleUpReservationSchema: z.ZodObject<{
|
|
102
|
+
container_name: z.ZodString;
|
|
103
|
+
docker_command: z.ZodString;
|
|
104
|
+
docker_context: z.ZodNullable<z.ZodString>;
|
|
105
|
+
invocation: z.ZodObject<{
|
|
106
|
+
correlation: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
|
|
107
|
+
id: z.ZodString;
|
|
108
|
+
operation: z.ZodEnum<{
|
|
109
|
+
down: "down";
|
|
110
|
+
up: "up";
|
|
111
|
+
artifacts_export: "artifacts_export";
|
|
112
|
+
}>;
|
|
113
|
+
request_policy: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
|
|
114
|
+
version: z.ZodLiteral<"spawnfile.lifecycle-invocation.v1">;
|
|
115
|
+
}, z.core.$strict>;
|
|
116
|
+
label_authority: z.ZodObject<{
|
|
117
|
+
required: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
118
|
+
permitted_extra_labels: z.ZodLiteral<"image-config-labels">;
|
|
119
|
+
}, z.core.$strict>;
|
|
120
|
+
version: z.ZodLiteral<"spawnfile.lifecycle-up-reservation.v1">;
|
|
121
|
+
}, z.core.$strict>;
|
|
122
|
+
export type LifecycleUpReservation = z.infer<typeof lifecycleUpReservationSchema>;
|
|
123
|
+
export declare const lifecycleUpStartSchema: z.ZodObject<{
|
|
124
|
+
attempt: z.ZodNumber;
|
|
125
|
+
container_id: z.ZodString;
|
|
126
|
+
container_name: z.ZodString;
|
|
127
|
+
image_id: z.ZodString;
|
|
128
|
+
invocation: z.ZodObject<{
|
|
129
|
+
correlation: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
|
|
130
|
+
id: z.ZodString;
|
|
131
|
+
operation: z.ZodEnum<{
|
|
132
|
+
down: "down";
|
|
133
|
+
up: "up";
|
|
134
|
+
artifacts_export: "artifacts_export";
|
|
135
|
+
}>;
|
|
136
|
+
request_policy: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
|
|
137
|
+
version: z.ZodLiteral<"spawnfile.lifecycle-invocation.v1">;
|
|
138
|
+
}, z.core.$strict>;
|
|
139
|
+
label_authority: z.ZodObject<{
|
|
140
|
+
required: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
141
|
+
permitted_extra_labels: z.ZodLiteral<"image-config-labels">;
|
|
142
|
+
}, z.core.$strict>;
|
|
143
|
+
version: z.ZodLiteral<"spawnfile.lifecycle-up-start.v1">;
|
|
144
|
+
}, z.core.$strict>;
|
|
145
|
+
export type LifecycleUpStart = z.infer<typeof lifecycleUpStartSchema>;
|
|
146
|
+
export declare const lifecycleUpCleanupSchema: z.ZodObject<{
|
|
147
|
+
attempt: z.ZodNumber;
|
|
148
|
+
container_id: z.ZodString;
|
|
149
|
+
invocation: z.ZodObject<{
|
|
150
|
+
correlation: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
|
|
151
|
+
id: z.ZodString;
|
|
152
|
+
operation: z.ZodEnum<{
|
|
153
|
+
down: "down";
|
|
154
|
+
up: "up";
|
|
155
|
+
artifacts_export: "artifacts_export";
|
|
156
|
+
}>;
|
|
157
|
+
request_policy: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber, z.ZodNull]>>;
|
|
158
|
+
version: z.ZodLiteral<"spawnfile.lifecycle-invocation.v1">;
|
|
159
|
+
}, z.core.$strict>;
|
|
160
|
+
version: z.ZodLiteral<"spawnfile.lifecycle-up-cleanup.v1">;
|
|
161
|
+
}, z.core.$strict>;
|
|
162
|
+
export type LifecycleUpCleanup = z.infer<typeof lifecycleUpCleanupSchema>;
|
|
97
163
|
export declare const lifecycleTerminalSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
98
164
|
completion: z.ZodObject<{
|
|
99
165
|
invocation: z.ZodObject<{
|
|
@@ -7,6 +7,11 @@ export const LIFECYCLE_OWNER_VERSION = "spawnfile.lifecycle-owner.v1";
|
|
|
7
7
|
export const LIFECYCLE_ADMISSION_VERSION = "spawnfile.lifecycle-admission.v1";
|
|
8
8
|
export const LIFECYCLE_AMBIGUOUS_VERSION = "spawnfile.lifecycle-ambiguous.v1";
|
|
9
9
|
export const LIFECYCLE_TERMINAL_VERSION = "spawnfile.lifecycle-terminal.v1";
|
|
10
|
+
export const LIFECYCLE_UP_START_VERSION = "spawnfile.lifecycle-up-start.v1";
|
|
11
|
+
export const LIFECYCLE_UP_RESERVATION_VERSION = "spawnfile.lifecycle-up-reservation.v1";
|
|
12
|
+
export const LIFECYCLE_UP_CLEANUP_VERSION = "spawnfile.lifecycle-up-cleanup.v1";
|
|
13
|
+
// Docker carries an image's config labels onto a container; no other extras are allowed.
|
|
14
|
+
export const LIFECYCLE_UP_EXTRA_LABELS = "image-config-labels";
|
|
10
15
|
export const LIFECYCLE_RECORD_MAX_BYTES = 1_000_000;
|
|
11
16
|
export const lifecycleIdSchema = z
|
|
12
17
|
.string()
|
|
@@ -70,6 +75,35 @@ export const lifecycleCompletionSchema = z
|
|
|
70
75
|
version: z.literal(LIFECYCLE_COMPLETION_VERSION),
|
|
71
76
|
})
|
|
72
77
|
.strict();
|
|
78
|
+
const lifecycleUpLabelAuthoritySchema = z.object({
|
|
79
|
+
required: z.record(z.string().min(1).max(255), z.string().max(4096)),
|
|
80
|
+
permitted_extra_labels: z.literal(LIFECYCLE_UP_EXTRA_LABELS),
|
|
81
|
+
}).strict();
|
|
82
|
+
export const lifecycleUpReservationSchema = z.object({
|
|
83
|
+
container_name: z.string().min(1).max(255),
|
|
84
|
+
docker_command: z.string().min(1).max(4096),
|
|
85
|
+
docker_context: z.string().min(1).max(128).nullable(),
|
|
86
|
+
invocation: lifecycleInvocationSchema,
|
|
87
|
+
label_authority: lifecycleUpLabelAuthoritySchema,
|
|
88
|
+
version: z.literal(LIFECYCLE_UP_RESERVATION_VERSION),
|
|
89
|
+
}).strict();
|
|
90
|
+
export const lifecycleUpStartSchema = z
|
|
91
|
+
.object({
|
|
92
|
+
attempt: z.number().int().min(0).max(16),
|
|
93
|
+
container_id: z.string().regex(/^[a-f0-9]{64}$/u),
|
|
94
|
+
container_name: z.string().min(1).max(255),
|
|
95
|
+
image_id: z.string().regex(/^sha256:[a-f0-9]{64}$/u),
|
|
96
|
+
invocation: lifecycleInvocationSchema,
|
|
97
|
+
label_authority: lifecycleUpLabelAuthoritySchema,
|
|
98
|
+
version: z.literal(LIFECYCLE_UP_START_VERSION),
|
|
99
|
+
})
|
|
100
|
+
.strict();
|
|
101
|
+
export const lifecycleUpCleanupSchema = z.object({
|
|
102
|
+
attempt: z.number().int().min(0).max(16),
|
|
103
|
+
container_id: z.string().regex(/^[a-f0-9]{64}$/u),
|
|
104
|
+
invocation: lifecycleInvocationSchema,
|
|
105
|
+
version: z.literal(LIFECYCLE_UP_CLEANUP_VERSION),
|
|
106
|
+
}).strict();
|
|
73
107
|
export const lifecycleTerminalSchema = z.discriminatedUnion("status", [
|
|
74
108
|
z
|
|
75
109
|
.object({
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export declare const failLifecycleStore: (message: string) => never;
|
|
2
2
|
export declare const resolveLifecycleCompletionDirectory: () => string;
|
|
3
|
-
export declare const lifecycleRecordName: (id: string, kind: "admission" | "completion" | "evidence" | "plan" | "recovery") => string;
|
|
3
|
+
export declare const lifecycleRecordName: (id: string, kind: "admission" | "completion" | "evidence" | "plan" | "recovery" | "up-reservation") => string;
|
|
4
4
|
export declare const resolveLifecycleCompletionPath: (id: string) => string;
|
|
5
5
|
export declare const admissionPath: (id: string) => string;
|
|
6
6
|
export declare const planPath: (id: string) => string;
|
|
7
7
|
export declare const recoveryPath: (id: string) => string;
|
|
8
8
|
export declare const evidencePath: (id: string) => string;
|
|
9
|
+
export declare const upReservationPath: (id: string) => string;
|
|
10
|
+
export declare const upStartPath: (id: string, attempt: number) => string;
|
|
11
|
+
export declare const upCleanupPath: (id: string, attempt: number) => string;
|
|
9
12
|
export declare const heartbeatPath: (id: string) => string;
|
|
@@ -13,4 +13,7 @@ export const admissionPath = (id) => lifecyclePath(id, "admission");
|
|
|
13
13
|
export const planPath = (id) => lifecyclePath(id, "plan");
|
|
14
14
|
export const recoveryPath = (id) => lifecyclePath(id, "recovery");
|
|
15
15
|
export const evidencePath = (id) => lifecyclePath(id, "evidence");
|
|
16
|
+
export const upReservationPath = (id) => lifecyclePath(id, "up-reservation");
|
|
17
|
+
export const upStartPath = (id, attempt) => path.join(resolveLifecycleCompletionDirectory(), `${lifecycleIdSchema.parse(id)}.up-start-${attempt}`);
|
|
18
|
+
export const upCleanupPath = (id, attempt) => path.join(resolveLifecycleCompletionDirectory(), `${lifecycleIdSchema.parse(id)}.up-cleanup-${attempt}`);
|
|
16
19
|
export const heartbeatPath = (id) => path.join(resolveLifecycleCompletionDirectory(), `${lifecycleIdSchema.parse(id)}.heartbeat`);
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
type RecordReader = (file: string, links?: readonly number[]) => Promise<string | null>;
|
|
2
|
+
export declare const LIFECYCLE_PUBLICATION_SETTLE_TIMEOUT_MS = 1000;
|
|
2
3
|
export declare const settleLifecyclePublication: (file: string) => Promise<void>;
|
|
4
|
+
export declare const settleLifecyclePublicationUntil: (settled: () => Promise<boolean>) => Promise<void>;
|
|
3
5
|
export declare const readSettledLifecycleRecord: (file: string, read: RecordReader) => Promise<string | null>;
|
|
4
6
|
export declare const matchesSettledLifecyclePublication: (file: string, expected: string, read: RecordReader) => Promise<boolean>;
|
|
5
7
|
export {};
|
|
@@ -1,16 +1,30 @@
|
|
|
1
1
|
import { lstat } from "node:fs/promises";
|
|
2
|
+
import { performance } from "node:perf_hooks";
|
|
2
3
|
import { SpawnfileError } from "../shared/index.js";
|
|
4
|
+
// A competing publisher removes its temporary hard link asynchronously. A
|
|
5
|
+
// short run of event-loop turns can elapse before that unlink is scheduled
|
|
6
|
+
// when many lifecycle operations are active, so leave a bounded but practical
|
|
7
|
+
// window before treating an extra link as hostile.
|
|
8
|
+
export const LIFECYCLE_PUBLICATION_SETTLE_TIMEOUT_MS = 1_000;
|
|
9
|
+
const LIFECYCLE_PUBLICATION_SETTLE_BACKOFF_MS = 2;
|
|
3
10
|
const refuse = (message) => {
|
|
4
11
|
throw new SpawnfileError("runtime_error", `Lifecycle completion store refused: ${message}`);
|
|
5
12
|
};
|
|
6
13
|
export const settleLifecyclePublication = async (file) => {
|
|
7
|
-
|
|
14
|
+
await settleLifecyclePublicationUntil(async () => {
|
|
8
15
|
const info = await lstat(file).catch(() => refuse("publication changed"));
|
|
9
|
-
|
|
16
|
+
return info.nlink === 1;
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
export const settleLifecyclePublicationUntil = async (settled) => {
|
|
20
|
+
const deadline = performance.now() + LIFECYCLE_PUBLICATION_SETTLE_TIMEOUT_MS;
|
|
21
|
+
while (true) {
|
|
22
|
+
if (await settled())
|
|
10
23
|
return;
|
|
11
|
-
|
|
24
|
+
if (performance.now() >= deadline)
|
|
25
|
+
refuse("publication did not settle");
|
|
26
|
+
await new Promise((resolve) => setTimeout(resolve, LIFECYCLE_PUBLICATION_SETTLE_BACKOFF_MS));
|
|
12
27
|
}
|
|
13
|
-
refuse("publication did not settle");
|
|
14
28
|
};
|
|
15
29
|
export const readSettledLifecycleRecord = async (file, read) => {
|
|
16
30
|
const text = await read(file, [1, 2]);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { admissionPath, evidencePath, failLifecycleStore, heartbeatPath, lifecycleRecordName, planPath, recoveryPath, resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath } from "./lifecycleCompletionPaths.js";
|
|
1
|
+
export { admissionPath, evidencePath, failLifecycleStore, heartbeatPath, lifecycleRecordName, planPath, recoveryPath, upCleanupPath, upReservationPath, upStartPath, resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath } from "./lifecycleCompletionPaths.js";
|
|
2
2
|
export { existingLifecycleRoot, lifecycleRoot, syncLifecycleDirectory } from "./lifecycleCompletionRoot.js";
|
|
3
3
|
export type LifecycleStoreTestHookPoint = "before_missing_return" | "before_record_open" | "before_publish_link" | "before_publish_temp_open" | "before_publish_unlink";
|
|
4
4
|
export declare const setLifecycleStoreTestHook: (hook: ((point: LifecycleStoreTestHookPoint) => Promise<void> | void) | null) => void;
|