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
|
@@ -52,8 +52,8 @@ const organizationReadinessObjectSchema = z.object({
|
|
|
52
52
|
if (!validStateCode(result.state, result.code)) {
|
|
53
53
|
context.addIssue({ code: z.ZodIssueCode.custom, path: ["state"], message: "invalid state/code combination" });
|
|
54
54
|
}
|
|
55
|
-
if (result.state === "ready" &&
|
|
56
|
-
context.addIssue({ code: z.ZodIssueCode.custom, path: ["state"], message: "ready requires run_id
|
|
55
|
+
if (result.state === "ready" && result.run_id === null) {
|
|
56
|
+
context.addIssue({ code: z.ZodIssueCode.custom, path: ["state"], message: "ready requires run_id" });
|
|
57
57
|
}
|
|
58
58
|
});
|
|
59
59
|
export const organizationReadinessSchema = z.preprocess((value) => isPlainRecord(value) ? value : null, organizationReadinessObjectSchema);
|
|
@@ -126,6 +126,8 @@ const validNodeConfig = (content, expectedDigest) => {
|
|
|
126
126
|
}
|
|
127
127
|
};
|
|
128
128
|
const validBindings = (evidence, content) => {
|
|
129
|
+
if (evidence.worldBindings === null)
|
|
130
|
+
return content === null;
|
|
129
131
|
if (!content || !evidence.worldBindings || hash(content) !== evidence.worldBindings.digest)
|
|
130
132
|
return false;
|
|
131
133
|
try {
|
|
@@ -148,11 +150,41 @@ const validBindings = (evidence, content) => {
|
|
|
148
150
|
return false;
|
|
149
151
|
}
|
|
150
152
|
};
|
|
153
|
+
const validDaimon = (evidence, content) => {
|
|
154
|
+
if (evidence.daimon == null)
|
|
155
|
+
return content == null;
|
|
156
|
+
try {
|
|
157
|
+
const value = exact(JSON.parse(content ?? ""), ["version", "agents"]);
|
|
158
|
+
if (value?.version !== "noopolis.daimon.readiness-receipt.v1" || !Array.isArray(value.agents))
|
|
159
|
+
return false;
|
|
160
|
+
const agents = value.agents.map((entry) => { const item = exact(entry, ["agent_id", "engine"]); return item && typeof item.agent_id === "string" && typeof item.engine === "string" ? [item.agent_id, item.engine] : null; });
|
|
161
|
+
return agents.every(Boolean) && JSON.stringify(agents) === JSON.stringify(evidence.daimon.agents.map((agent) => [agent.agentId, agent.engine]));
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const validAttachmentReceipts = (evidence, receipts) => {
|
|
168
|
+
const expected = evidence.networks.flatMap((network) => network.nodes.map((node) => ({ networkId: network.id, memberId: node.memberId, path: node.receiptPath })));
|
|
169
|
+
if (!receipts || receipts.size !== expected.length)
|
|
170
|
+
return expected.length === 0;
|
|
171
|
+
return expected.every((entry) => {
|
|
172
|
+
try {
|
|
173
|
+
const body = exact(JSON.parse(receipts.get(entry.path) ?? ""), ["version", "attachments"]);
|
|
174
|
+
if (body?.version !== "moltnet.node-readiness.v1" || !Array.isArray(body.attachments))
|
|
175
|
+
return false;
|
|
176
|
+
return body.attachments.length === 1 && body.attachments.every((value) => { const attachment = exact(value, ["network_id", "agent_id"]); return attachment?.network_id === entry.networkId && attachment.agent_id === entry.memberId; });
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
};
|
|
151
183
|
export const reconcileOrganizationReadiness = (input) => {
|
|
152
184
|
const { evidence, inspection, record } = input;
|
|
153
185
|
if (evidence.hasExternalMoltnet)
|
|
154
186
|
return correlation(evidence, record, "pending", "external_moltnet");
|
|
155
|
-
if (!
|
|
187
|
+
if (!record.runId)
|
|
156
188
|
return correlation(evidence, record, "pending", "compiled_evidence_missing");
|
|
157
189
|
if (record.unitCount !== 1 || !inspection || inspection.running !== true || inspection.exists !== true) {
|
|
158
190
|
return correlation(evidence, record, "pending", "unit_unavailable");
|
|
@@ -168,7 +200,7 @@ export const reconcileOrganizationReadiness = (input) => {
|
|
|
168
200
|
|| identity.unit !== record.unitId || identity.version !== evidence.compileVersion) {
|
|
169
201
|
return correlation(evidence, record, "failed", "identity_mismatch");
|
|
170
202
|
}
|
|
171
|
-
if (!input.probe || input.probe.networks.length !== evidence.networks.length
|
|
203
|
+
if (!input.probe || !validDaimon(evidence, input.probe.daimonReceipt) || !validAttachmentReceipts(evidence, input.probe.attachmentReceipts) || input.probe.networks.length !== evidence.networks.length
|
|
172
204
|
|| !evidence.networks.every((network) => {
|
|
173
205
|
const live = input.probe?.networks.find((candidate) => candidate.id === network.id);
|
|
174
206
|
return live?.healthOk === true;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Thrown when a live process holds the lock (or won a race for it). */
|
|
2
|
+
export declare class PidLockBusyError extends Error {
|
|
3
|
+
readonly ownerPid: number | null;
|
|
4
|
+
constructor(ownerPid: number | null);
|
|
5
|
+
}
|
|
6
|
+
export interface PidLockHooks {
|
|
7
|
+
/** Test seam: runs between reading a stale lock and moving it aside. */
|
|
8
|
+
afterStaleRead?: () => Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* An exclusive lock file that names its owner from the instant it exists:
|
|
12
|
+
* the content is written aside and hard-linked into place, and `link` fails
|
|
13
|
+
* when the path exists, so no reader ever sees an empty lock and calls it
|
|
14
|
+
* stale. A lock whose owner process is gone is moved aside under a unique
|
|
15
|
+
* name and checked: if what was moved is not the stale lock that was read,
|
|
16
|
+
* another process replaced it in between, and it is put back.
|
|
17
|
+
*
|
|
18
|
+
* Residual: pid locks cannot be made race-free for stale reclamation without
|
|
19
|
+
* kernel locks. Three contenders arriving within microseconds of each other,
|
|
20
|
+
* all after a crashed owner, can still overlap. Run unattended jobs through a
|
|
21
|
+
* scheduler that does not overlap them.
|
|
22
|
+
*
|
|
23
|
+
* Release removes the lock only while it still carries this owner's token.
|
|
24
|
+
*/
|
|
25
|
+
export declare const acquirePidLock: (lockPath: string, hooks?: PidLockHooks) => Promise<() => Promise<void>>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { link, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
/** Thrown when a live process holds the lock (or won a race for it). */
|
|
4
|
+
export class PidLockBusyError extends Error {
|
|
5
|
+
ownerPid;
|
|
6
|
+
constructor(ownerPid) {
|
|
7
|
+
super(ownerPid === null ? "the lock was taken by another process" : `the lock is held by pid ${ownerPid}`);
|
|
8
|
+
this.ownerPid = ownerPid;
|
|
9
|
+
this.name = "PidLockBusyError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const isProcessAlive = (pid) => {
|
|
13
|
+
try {
|
|
14
|
+
process.kill(pid, 0);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
// ESRCH: no such process (stale). EPERM: it exists but is not ours to signal.
|
|
19
|
+
return error.code === "EPERM";
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* An exclusive lock file that names its owner from the instant it exists:
|
|
24
|
+
* the content is written aside and hard-linked into place, and `link` fails
|
|
25
|
+
* when the path exists, so no reader ever sees an empty lock and calls it
|
|
26
|
+
* stale. A lock whose owner process is gone is moved aside under a unique
|
|
27
|
+
* name and checked: if what was moved is not the stale lock that was read,
|
|
28
|
+
* another process replaced it in between, and it is put back.
|
|
29
|
+
*
|
|
30
|
+
* Residual: pid locks cannot be made race-free for stale reclamation without
|
|
31
|
+
* kernel locks. Three contenders arriving within microseconds of each other,
|
|
32
|
+
* all after a crashed owner, can still overlap. Run unattended jobs through a
|
|
33
|
+
* scheduler that does not overlap them.
|
|
34
|
+
*
|
|
35
|
+
* Release removes the lock only while it still carries this owner's token.
|
|
36
|
+
*/
|
|
37
|
+
export const acquirePidLock = async (lockPath, hooks = {}) => {
|
|
38
|
+
const token = `${process.pid}.${randomUUID()}`;
|
|
39
|
+
const staged = `${lockPath}.${token}`;
|
|
40
|
+
await writeFile(staged, JSON.stringify({ pid: process.pid, token }), { mode: 0o600 });
|
|
41
|
+
try {
|
|
42
|
+
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
43
|
+
try {
|
|
44
|
+
await link(staged, lockPath);
|
|
45
|
+
return async () => {
|
|
46
|
+
const current = await readFile(lockPath, "utf8").catch(() => "");
|
|
47
|
+
if (current.includes(token))
|
|
48
|
+
await rm(lockPath, { force: true });
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error.code !== "EEXIST")
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
const seen = await readFile(lockPath, "utf8").catch(() => "");
|
|
56
|
+
let owner = null;
|
|
57
|
+
try {
|
|
58
|
+
owner = JSON.parse(seen).pid ?? null;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
owner = null;
|
|
62
|
+
}
|
|
63
|
+
if (owner !== null && isProcessAlive(owner))
|
|
64
|
+
throw new PidLockBusyError(owner);
|
|
65
|
+
await hooks.afterStaleRead?.();
|
|
66
|
+
const tombstone = `${lockPath}.stale.${token}`;
|
|
67
|
+
await rename(lockPath, tombstone).catch(() => undefined);
|
|
68
|
+
const moved = await readFile(tombstone, "utf8").catch(() => null);
|
|
69
|
+
if (moved !== null && moved !== seen) {
|
|
70
|
+
await link(tombstone, lockPath).catch(() => undefined);
|
|
71
|
+
await rm(tombstone, { force: true });
|
|
72
|
+
throw new PidLockBusyError(null);
|
|
73
|
+
}
|
|
74
|
+
await rm(tombstone, { force: true });
|
|
75
|
+
}
|
|
76
|
+
throw new PidLockBusyError(null);
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
await rm(staged, { force: true });
|
|
80
|
+
}
|
|
81
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
type DockerExec = (command: string, args: string[]) => Promise<{
|
|
2
|
+
stdout: string;
|
|
3
|
+
}>;
|
|
4
|
+
export declare const issueProductStateSourceAuthority: (input: {
|
|
5
|
+
dockerCommand: string;
|
|
6
|
+
container: string;
|
|
7
|
+
sourceRunId: string;
|
|
8
|
+
mountPath: string;
|
|
9
|
+
candidateVolumeName: string;
|
|
10
|
+
candidateResourceIdentity: string;
|
|
11
|
+
}, docker?: DockerExec) => Promise<Record<string, unknown>>;
|
|
12
|
+
export declare const createProductStateProof: (source: string, sourceRunId: string) => Promise<Record<string, unknown>>;
|
|
13
|
+
export declare const issueProductStateSourceSnapshot: (input: {
|
|
14
|
+
dockerCommand: string;
|
|
15
|
+
container: string;
|
|
16
|
+
sourceRunId: string;
|
|
17
|
+
mountPath: string;
|
|
18
|
+
candidateVolumeName: string;
|
|
19
|
+
candidateResourceIdentity: string;
|
|
20
|
+
}, docker?: DockerExec) => Promise<{
|
|
21
|
+
authority: Record<string, unknown>;
|
|
22
|
+
proof: Record<string, unknown>;
|
|
23
|
+
}>;
|
|
24
|
+
export declare const cloneQuiescedProductState: (input: {
|
|
25
|
+
source: string;
|
|
26
|
+
destination: string;
|
|
27
|
+
proof: unknown;
|
|
28
|
+
candidateRunId: string;
|
|
29
|
+
activationIdentity?: string;
|
|
30
|
+
}) => Promise<{
|
|
31
|
+
files: number;
|
|
32
|
+
source_run_id: string;
|
|
33
|
+
candidate_run_id: string;
|
|
34
|
+
}>;
|
|
35
|
+
export declare const runProductStateCloneWorkflow: (input: {
|
|
36
|
+
authorityReceiptPath: string;
|
|
37
|
+
dockerCommand: string;
|
|
38
|
+
destination: string;
|
|
39
|
+
proofPath: string;
|
|
40
|
+
receiptPath: string;
|
|
41
|
+
candidateRunId: string;
|
|
42
|
+
}, docker?: DockerExec) => Promise<Record<string, unknown>>;
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { chmod, copyFile, link, mkdir, open, readFile, readdir, rename, rm, stat } from "node:fs/promises";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { execFile as execFileCallback } from "node:child_process";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
9
|
+
const digest = z.string().regex(/^sha256:[a-f0-9]{64}$/u);
|
|
10
|
+
const relative = z.string().min(1).max(255).refine((value) => !path.isAbsolute(value) && !value.split(/[\\/]/u).includes(".."));
|
|
11
|
+
const proofSchema = z.object({ version: z.literal("spawnfile.product-state-quiescence.v1"), state: z.literal("quiesced"), source_run_id: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$/u), files: z.array(z.object({ path: relative, sha256: digest }).strict()).min(1).max(4096) }).strict();
|
|
12
|
+
const forbidden = /(?:^|[._/-])(?:auth|credential|token|secret|session|wake)(?:[._/-]|$)|\.(?:db|sqlite|sqlite3)(?:-|$)/iu;
|
|
13
|
+
const execFile = promisify(execFileCallback);
|
|
14
|
+
const authoritySchema = z.object({ version: z.literal("spawnfile.product-state-source-authority.v1"), source_run_id: z.string(), container_id: z.string().regex(/^[a-f0-9]{64}$/u), image_id: z.string().regex(/^sha256:[a-f0-9]{64}$/u), started_at: z.string().min(1), was_paused: z.boolean(), source: z.string().min(1), mount_path: z.string().min(1), volume_name: z.string().min(1), candidate_volume_name: z.string().min(1), candidate_resource_identity: digest }).strict();
|
|
15
|
+
const defaultDockerExec = async (command, args) => await execFile(command, args, { encoding: "utf8", maxBuffer: 1_048_576, timeout: 10_000 });
|
|
16
|
+
const inspectContainer = async (docker, command, container) => { const value = JSON.parse((await docker(command, ["inspect", container])).stdout); if (!Array.isArray(value) || value.length !== 1 || typeof value[0] !== "object")
|
|
17
|
+
throw new SpawnfileError("validation_error", "Managed source container inspection failed"); return value[0]; };
|
|
18
|
+
const restoreRunningState = async (docker, command, authority) => {
|
|
19
|
+
await docker(command, ["unpause", authority.container_id]);
|
|
20
|
+
const restored = await inspectContainer(docker, command, authority.container_id);
|
|
21
|
+
if (restored.Id !== authority.container_id || restored.Image !== authority.image_id || restored.State?.StartedAt !== authority.started_at || restored.State?.Running !== true || restored.State?.Paused !== false)
|
|
22
|
+
throw new SpawnfileError("validation_error", "Managed source state restoration could not be proven");
|
|
23
|
+
};
|
|
24
|
+
export const issueProductStateSourceAuthority = async (input, docker = defaultDockerExec) => {
|
|
25
|
+
const inspected = await inspectContainer(docker, input.dockerCommand, input.container), labels = inspected.Config?.Labels, state = inspected.State;
|
|
26
|
+
const mounts = Array.isArray(inspected.Mounts) ? inspected.Mounts.filter((mount) => mount.Type === "volume" && mount.Destination === input.mountPath && mount.RW === true) : [];
|
|
27
|
+
if (inspected.Id?.length !== 64 || !/^sha256:[a-f0-9]{64}$/u.test(inspected.Image) || labels?.["com.spawnfile.run_id"] !== input.sourceRunId || state?.Running !== true || typeof state.StartedAt !== "string" || mounts.length !== 1 || typeof mounts[0].Source !== "string" || typeof mounts[0].Name !== "string")
|
|
28
|
+
throw new SpawnfileError("validation_error", "Source run does not own one exact managed writable state root");
|
|
29
|
+
const volume = JSON.parse((await docker(input.dockerCommand, ["volume", "inspect", input.candidateVolumeName])).stdout);
|
|
30
|
+
if (!Array.isArray(volume) || volume.length !== 1 || typeof volume[0]?.Mountpoint !== "string")
|
|
31
|
+
throw new SpawnfileError("validation_error", "Candidate volume is unavailable");
|
|
32
|
+
return authoritySchema.parse({ version: "spawnfile.product-state-source-authority.v1", source_run_id: input.sourceRunId, container_id: inspected.Id, image_id: inspected.Image, started_at: state.StartedAt, was_paused: state.Paused === true, source: mounts[0].Source, mount_path: input.mountPath, volume_name: mounts[0].Name, candidate_volume_name: input.candidateVolumeName, candidate_resource_identity: input.candidateResourceIdentity });
|
|
33
|
+
};
|
|
34
|
+
const hashFile = async (file) => {
|
|
35
|
+
const handle = await open(file, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
36
|
+
try {
|
|
37
|
+
const info = await handle.stat();
|
|
38
|
+
if (!info.isFile() || info.size > 67_108_864)
|
|
39
|
+
throw new SpawnfileError("validation_error", "Product state file is unsafe or oversized");
|
|
40
|
+
return `sha256:${createHash("sha256").update(await handle.readFile()).digest("hex")}`;
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
await handle.close();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const syncDirectory = async (directory) => { const handle = await open(directory, constants.O_RDONLY); try {
|
|
47
|
+
await handle.sync();
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
await handle.close();
|
|
51
|
+
} };
|
|
52
|
+
const syncTreeDirectories = async (directory) => { for (const entry of await readdir(directory, { withFileTypes: true }))
|
|
53
|
+
if (entry.isDirectory())
|
|
54
|
+
await syncTreeDirectories(path.join(directory, entry.name)); await syncDirectory(directory); };
|
|
55
|
+
const wholeSourceManifest = async (root) => {
|
|
56
|
+
const result = new Map();
|
|
57
|
+
const visit = async (directory, prefix) => {
|
|
58
|
+
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
59
|
+
const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
60
|
+
if ([".spawnfile-product-state-write-fence", ".spawnfile-product-state-preseed-journal", ".spawnfile-resource-identity"].includes(relativePath))
|
|
61
|
+
continue;
|
|
62
|
+
const absolutePath = path.join(directory, entry.name);
|
|
63
|
+
if (entry.isDirectory()) {
|
|
64
|
+
await visit(absolutePath, relativePath);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (!entry.isFile() || result.size >= 4096)
|
|
68
|
+
throw new SpawnfileError("validation_error", "Product-state source contains an unsafe or excessive entry");
|
|
69
|
+
result.set(relativePath, await hashFile(absolutePath));
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
await visit(root, "");
|
|
73
|
+
return result;
|
|
74
|
+
};
|
|
75
|
+
const verifyWholeSourceManifest = async (root, proof) => {
|
|
76
|
+
const actual = await wholeSourceManifest(root), expected = new Map(proof.files.map((entry) => [entry.path, entry.sha256]));
|
|
77
|
+
if (actual.size !== expected.size || [...actual].some(([name, checksum]) => expected.get(name) !== checksum))
|
|
78
|
+
throw new SpawnfileError("validation_error", "Whole product-state source manifest drifted or is incomplete");
|
|
79
|
+
};
|
|
80
|
+
export const createProductStateProof = async (source, sourceRunId) => {
|
|
81
|
+
const manifest = await wholeSourceManifest(source);
|
|
82
|
+
const files = [...manifest].sort(([left], [right]) => left.localeCompare(right)).map(([filePath, sha256]) => { if (forbidden.test(filePath))
|
|
83
|
+
throw new SpawnfileError("validation_error", "Product-state source includes prohibited state"); return { path: filePath, sha256 }; });
|
|
84
|
+
return proofSchema.parse({ version: "spawnfile.product-state-quiescence.v1", state: "quiesced", source_run_id: sourceRunId, files });
|
|
85
|
+
};
|
|
86
|
+
export const issueProductStateSourceSnapshot = async (input, docker = defaultDockerExec) => {
|
|
87
|
+
const authority = authoritySchema.parse(await issueProductStateSourceAuthority(input, docker));
|
|
88
|
+
let pausedByUs = false;
|
|
89
|
+
try {
|
|
90
|
+
if (!authority.was_paused) {
|
|
91
|
+
await docker(input.dockerCommand, ["pause", authority.container_id]);
|
|
92
|
+
pausedByUs = true;
|
|
93
|
+
}
|
|
94
|
+
const frozen = await inspectContainer(docker, input.dockerCommand, authority.container_id);
|
|
95
|
+
if (frozen.Id !== authority.container_id || frozen.Image !== authority.image_id || frozen.State?.StartedAt !== authority.started_at || frozen.State?.Paused !== true)
|
|
96
|
+
throw new SpawnfileError("validation_error", "Source changed before authoritative snapshot");
|
|
97
|
+
return { authority, proof: await createProductStateProof(authority.source, authority.source_run_id) };
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
if (pausedByUs)
|
|
101
|
+
await restoreRunningState(docker, input.dockerCommand, authority);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
export const cloneQuiescedProductState = async (input) => {
|
|
105
|
+
const proof = proofSchema.parse(input.proof);
|
|
106
|
+
if (proof.source_run_id === input.candidateRunId)
|
|
107
|
+
throw new SpawnfileError("validation_error", "Candidate state namespace must differ from source");
|
|
108
|
+
const destinationExists = await stat(input.destination).then((info) => { if (!info.isDirectory())
|
|
109
|
+
throw new SpawnfileError("validation_error", "Candidate state destination is not a directory"); return true; }, (error) => error.code === "ENOENT" ? false : Promise.reject(error));
|
|
110
|
+
const journalPath = path.join(input.destination, ".spawnfile-product-state-preseed-journal");
|
|
111
|
+
if (destinationExists && await stat(journalPath).then(() => true, () => false)) {
|
|
112
|
+
const journal = z.object({ version: z.literal("spawnfile.product-state-preseed-journal.v1"), candidate_run_id: z.string(), entries: z.array(relative), staging: relative }).strict().parse(JSON.parse(await readFile(journalPath, "utf8")));
|
|
113
|
+
if (journal.candidate_run_id !== input.candidateRunId)
|
|
114
|
+
throw new SpawnfileError("validation_error", "Candidate preseed journal belongs to another run");
|
|
115
|
+
const identityPath = path.join(input.destination, ".spawnfile-resource-identity"), activated = input.activationIdentity && await readFile(identityPath, "utf8").then((value) => value === `${input.activationIdentity}\n`, () => false);
|
|
116
|
+
if (activated) {
|
|
117
|
+
await verifyWholeSourceManifest(input.destination, proof);
|
|
118
|
+
await rm(journalPath);
|
|
119
|
+
await syncDirectory(input.destination);
|
|
120
|
+
return { files: proof.files.length, source_run_id: proof.source_run_id, candidate_run_id: input.candidateRunId };
|
|
121
|
+
}
|
|
122
|
+
for (const entry of [...journal.entries, journal.staging])
|
|
123
|
+
await rm(path.join(input.destination, entry), { recursive: true, force: true });
|
|
124
|
+
await rm(journalPath);
|
|
125
|
+
await syncDirectory(input.destination);
|
|
126
|
+
}
|
|
127
|
+
if (destinationExists && (await readdir(input.destination)).length !== 0)
|
|
128
|
+
throw new SpawnfileError("validation_error", "Candidate state destination is not empty");
|
|
129
|
+
const names = new Set();
|
|
130
|
+
for (const entry of proof.files) {
|
|
131
|
+
if (forbidden.test(entry.path) || names.has(entry.path))
|
|
132
|
+
throw new SpawnfileError("validation_error", "Product-state classification contains a prohibited or duplicate path");
|
|
133
|
+
names.add(entry.path);
|
|
134
|
+
if (await hashFile(path.join(input.source, entry.path)) !== entry.sha256)
|
|
135
|
+
throw new SpawnfileError("validation_error", "Quiesced product-state checksum mismatch");
|
|
136
|
+
}
|
|
137
|
+
const temporary = destinationExists ? path.join(input.destination, `.spawnfile-preseed-${process.pid}`) : `${input.destination}.candidate-${process.pid}`;
|
|
138
|
+
await mkdir(temporary, { recursive: false, mode: 0o700 });
|
|
139
|
+
const activated = [];
|
|
140
|
+
try {
|
|
141
|
+
for (const entry of proof.files) {
|
|
142
|
+
const target = path.join(temporary, entry.path);
|
|
143
|
+
await mkdir(path.dirname(target), { recursive: true, mode: 0o700 });
|
|
144
|
+
await copyFile(path.join(input.source, entry.path), target, constants.COPYFILE_EXCL);
|
|
145
|
+
const copied = await open(target, constants.O_RDONLY);
|
|
146
|
+
try {
|
|
147
|
+
await copied.sync();
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
await copied.close();
|
|
151
|
+
}
|
|
152
|
+
if (await hashFile(target) !== entry.sha256 || await hashFile(path.join(input.source, entry.path)) !== entry.sha256)
|
|
153
|
+
throw new SpawnfileError("validation_error", "Product state changed during clone");
|
|
154
|
+
}
|
|
155
|
+
await syncTreeDirectories(temporary);
|
|
156
|
+
if (destinationExists) {
|
|
157
|
+
const entries = await readdir(temporary), journal = await open(journalPath, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 0o600);
|
|
158
|
+
try {
|
|
159
|
+
await journal.writeFile(`${JSON.stringify({ version: "spawnfile.product-state-preseed-journal.v1", candidate_run_id: input.candidateRunId, entries, staging: path.basename(temporary) })}\n`);
|
|
160
|
+
await journal.sync();
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
await journal.close();
|
|
164
|
+
}
|
|
165
|
+
await syncDirectory(input.destination);
|
|
166
|
+
for (const entry of entries) {
|
|
167
|
+
await rename(path.join(temporary, entry), path.join(input.destination, entry));
|
|
168
|
+
activated.push(path.join(input.destination, entry));
|
|
169
|
+
await syncDirectory(input.destination);
|
|
170
|
+
}
|
|
171
|
+
await rm(temporary, { recursive: true });
|
|
172
|
+
await syncDirectory(input.destination);
|
|
173
|
+
await verifyWholeSourceManifest(input.destination, proof);
|
|
174
|
+
if (input.activationIdentity) {
|
|
175
|
+
const identity = await open(path.join(input.destination, ".spawnfile-resource-identity"), constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 0o600);
|
|
176
|
+
try {
|
|
177
|
+
await identity.writeFile(`${input.activationIdentity}\n`);
|
|
178
|
+
await identity.sync();
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
await identity.close();
|
|
182
|
+
}
|
|
183
|
+
await syncDirectory(input.destination);
|
|
184
|
+
}
|
|
185
|
+
await rm(journalPath);
|
|
186
|
+
await syncDirectory(input.destination);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
await rename(temporary, input.destination);
|
|
190
|
+
await syncDirectory(path.dirname(input.destination));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
if (input.activationIdentity) {
|
|
195
|
+
await rm(path.join(input.destination, ".spawnfile-resource-identity"), { force: true });
|
|
196
|
+
if (destinationExists)
|
|
197
|
+
await syncDirectory(input.destination);
|
|
198
|
+
}
|
|
199
|
+
for (const entry of activated.reverse()) {
|
|
200
|
+
await rm(entry, { recursive: true, force: true });
|
|
201
|
+
if (destinationExists)
|
|
202
|
+
await syncDirectory(input.destination);
|
|
203
|
+
}
|
|
204
|
+
await rm(temporary, { recursive: true, force: true });
|
|
205
|
+
await syncDirectory(destinationExists ? input.destination : path.dirname(input.destination));
|
|
206
|
+
await rm(journalPath, { force: true });
|
|
207
|
+
if (destinationExists)
|
|
208
|
+
await syncDirectory(input.destination);
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
return { files: proof.files.length, source_run_id: proof.source_run_id, candidate_run_id: input.candidateRunId };
|
|
212
|
+
};
|
|
213
|
+
export const runProductStateCloneWorkflow = async (input, docker = defaultDockerExec) => {
|
|
214
|
+
const authority = authoritySchema.parse(JSON.parse(await readFile(input.authorityReceiptPath, "utf8")));
|
|
215
|
+
const candidateVolume = JSON.parse((await docker(input.dockerCommand, ["volume", "inspect", authority.candidate_volume_name])).stdout);
|
|
216
|
+
if (!Array.isArray(candidateVolume) || candidateVolume.length !== 1 || candidateVolume[0]?.Mountpoint !== path.resolve(input.destination))
|
|
217
|
+
throw new SpawnfileError("validation_error", "Clone destination is not the attested candidate volume");
|
|
218
|
+
const current = await inspectContainer(docker, input.dockerCommand, authority.container_id), currentMounts = Array.isArray(current.Mounts) ? current.Mounts : [];
|
|
219
|
+
if (current.Id !== authority.container_id || current.Image !== authority.image_id || current.State?.StartedAt !== authority.started_at || current.Config?.Labels?.["com.spawnfile.run_id"] !== authority.source_run_id || current.State?.Running !== true || current.State?.Paused !== authority.was_paused || !currentMounts.some((mount) => mount.Type === "volume" && mount.Name === authority.volume_name && mount.Source === authority.source && mount.Destination === authority.mount_path && mount.RW === true))
|
|
220
|
+
throw new SpawnfileError("validation_error", "Source run authority is stale or rebound");
|
|
221
|
+
const proofBytes = await readFile(input.proofPath);
|
|
222
|
+
if (proofBytes.length > 1_048_576)
|
|
223
|
+
throw new SpawnfileError("validation_error", "Product-state proof is oversized");
|
|
224
|
+
const proof = proofSchema.parse(JSON.parse(proofBytes.toString("utf8")));
|
|
225
|
+
if (proof.source_run_id !== authority.source_run_id)
|
|
226
|
+
throw new SpawnfileError("validation_error", "Proof source run does not match managed authority");
|
|
227
|
+
const fencePath = path.join(authority.source, ".spawnfile-product-state-write-fence");
|
|
228
|
+
const fence = await open(fencePath, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW, 0o400);
|
|
229
|
+
const modes = [];
|
|
230
|
+
let pausedByUs = false;
|
|
231
|
+
try {
|
|
232
|
+
await fence.writeFile(`${proof.source_run_id}\n`);
|
|
233
|
+
await fence.sync();
|
|
234
|
+
if (!authority.was_paused) {
|
|
235
|
+
await docker(input.dockerCommand, ["pause", authority.container_id]);
|
|
236
|
+
pausedByUs = true;
|
|
237
|
+
}
|
|
238
|
+
const frozen = await inspectContainer(docker, input.dockerCommand, authority.container_id);
|
|
239
|
+
if (frozen.State?.Paused !== true || frozen.State?.StartedAt !== authority.started_at || frozen.Id !== authority.container_id)
|
|
240
|
+
throw new SpawnfileError("validation_error", "Managed source cgroup did not freeze exactly");
|
|
241
|
+
await verifyWholeSourceManifest(authority.source, proof);
|
|
242
|
+
for (const entry of proof.files) {
|
|
243
|
+
if (forbidden.test(entry.path))
|
|
244
|
+
throw new SpawnfileError("validation_error", "Product-state classification contains a prohibited path");
|
|
245
|
+
const file = path.join(authority.source, entry.path), info = await stat(file);
|
|
246
|
+
modes.push({ file, mode: info.mode & 0o777 });
|
|
247
|
+
await chmod(file, info.mode & ~0o222);
|
|
248
|
+
}
|
|
249
|
+
const cloned = await cloneQuiescedProductState({ source: authority.source, destination: input.destination, proof, candidateRunId: input.candidateRunId, activationIdentity: authority.candidate_resource_identity });
|
|
250
|
+
await verifyWholeSourceManifest(authority.source, proof);
|
|
251
|
+
await verifyWholeSourceManifest(input.destination, proof);
|
|
252
|
+
const receipt = { version: "spawnfile.product-state-clone-receipt.v1", ...cloned, proof_sha256: `sha256:${createHash("sha256").update(proofBytes).digest("hex")}`, destination: path.resolve(input.destination), candidate_volume_name: authority.candidate_volume_name, source_container_id: authority.container_id };
|
|
253
|
+
const temporaryReceipt = `${input.receiptPath}.tmp-${process.pid}`;
|
|
254
|
+
await mkdir(path.dirname(input.receiptPath), { recursive: true, mode: 0o700 });
|
|
255
|
+
let published = false;
|
|
256
|
+
try {
|
|
257
|
+
const receiptFile = await open(temporaryReceipt, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 0o600);
|
|
258
|
+
try {
|
|
259
|
+
await receiptFile.writeFile(`${JSON.stringify(receipt)}\n`);
|
|
260
|
+
await receiptFile.sync();
|
|
261
|
+
}
|
|
262
|
+
finally {
|
|
263
|
+
await receiptFile.close();
|
|
264
|
+
}
|
|
265
|
+
await link(temporaryReceipt, input.receiptPath);
|
|
266
|
+
published = true;
|
|
267
|
+
const receiptDirectory = await open(path.dirname(input.receiptPath), constants.O_RDONLY);
|
|
268
|
+
try {
|
|
269
|
+
await receiptDirectory.sync();
|
|
270
|
+
}
|
|
271
|
+
finally {
|
|
272
|
+
await receiptDirectory.close();
|
|
273
|
+
}
|
|
274
|
+
await rm(temporaryReceipt);
|
|
275
|
+
await syncDirectory(path.dirname(input.receiptPath));
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
await rm(temporaryReceipt, { force: true });
|
|
279
|
+
await syncDirectory(path.dirname(input.receiptPath));
|
|
280
|
+
if (published) {
|
|
281
|
+
await rm(input.receiptPath, { force: true });
|
|
282
|
+
await syncDirectory(path.dirname(input.receiptPath));
|
|
283
|
+
}
|
|
284
|
+
for (const entry of await readdir(input.destination)) {
|
|
285
|
+
await rm(path.join(input.destination, entry), { recursive: true, force: true });
|
|
286
|
+
await syncDirectory(input.destination);
|
|
287
|
+
}
|
|
288
|
+
throw error;
|
|
289
|
+
}
|
|
290
|
+
return receipt;
|
|
291
|
+
}
|
|
292
|
+
finally {
|
|
293
|
+
let restorationError;
|
|
294
|
+
for (const item of modes.reverse())
|
|
295
|
+
try {
|
|
296
|
+
await chmod(item.file, item.mode);
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
restorationError ??= error;
|
|
300
|
+
}
|
|
301
|
+
try {
|
|
302
|
+
await fence.close();
|
|
303
|
+
await rm(fencePath, { force: true });
|
|
304
|
+
await syncDirectory(authority.source);
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
restorationError ??= error;
|
|
308
|
+
}
|
|
309
|
+
try {
|
|
310
|
+
if (pausedByUs)
|
|
311
|
+
await restoreRunningState(docker, input.dockerCommand, authority);
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
restorationError ??= error;
|
|
315
|
+
}
|
|
316
|
+
if (restorationError)
|
|
317
|
+
throw new SpawnfileError("validation_error", "Product-state source restoration failed", { cause: restorationError });
|
|
318
|
+
}
|
|
319
|
+
};
|
|
@@ -12,6 +12,90 @@ declare const recordSourceSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
12
12
|
}, z.core.$strict>]>;
|
|
13
13
|
export type DeploymentRecordSource = z.infer<typeof recordSourceSchema>;
|
|
14
14
|
export declare const deploymentRecordSchema: z.ZodObject<{
|
|
15
|
+
activated_at: z.ZodOptional<z.ZodISODateTime>;
|
|
16
|
+
activation_exact: z.ZodOptional<z.ZodBoolean>;
|
|
17
|
+
activation_note: z.ZodOptional<z.ZodString>;
|
|
18
|
+
recording: z.ZodOptional<z.ZodObject<{
|
|
19
|
+
keep_ms: z.ZodNumber;
|
|
20
|
+
memory_mount_ids: z.ZodArray<z.ZodString>;
|
|
21
|
+
recording_mount_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
22
|
+
agents: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
23
|
+
node_id: z.ZodString;
|
|
24
|
+
slug: z.ZodString;
|
|
25
|
+
directory: z.ZodString;
|
|
26
|
+
keep_ms: z.ZodNumber;
|
|
27
|
+
networks: z.ZodArray<z.ZodString>;
|
|
28
|
+
memory: z.ZodArray<z.ZodObject<{
|
|
29
|
+
id: z.ZodString;
|
|
30
|
+
declared_by: z.ZodString;
|
|
31
|
+
ledger_path: z.ZodNullable<z.ZodString>;
|
|
32
|
+
}, z.core.$strict>>;
|
|
33
|
+
feeds: z.ZodArray<z.ZodObject<{
|
|
34
|
+
id: z.ZodString;
|
|
35
|
+
volume_name: z.ZodString;
|
|
36
|
+
}, z.core.$strict>>;
|
|
37
|
+
resources: z.ZodArray<z.ZodObject<{
|
|
38
|
+
id: z.ZodString;
|
|
39
|
+
kind: z.ZodEnum<{
|
|
40
|
+
git: "git";
|
|
41
|
+
bundle: "bundle";
|
|
42
|
+
}>;
|
|
43
|
+
}, z.core.$strict>>;
|
|
44
|
+
snapshots: z.ZodArray<z.ZodString>;
|
|
45
|
+
}, z.core.$strict>>>;
|
|
46
|
+
}, z.core.$strict>>;
|
|
47
|
+
resource_snapshot: z.ZodOptional<z.ZodObject<{
|
|
48
|
+
version: z.ZodLiteral<"spawnfile.deploy-resources.v1">;
|
|
49
|
+
deployment: z.ZodString;
|
|
50
|
+
deployment_id: z.ZodString;
|
|
51
|
+
activated_at: z.ZodISODateTime;
|
|
52
|
+
activation_exact: z.ZodBoolean;
|
|
53
|
+
activation_note: z.ZodOptional<z.ZodString>;
|
|
54
|
+
rolled_back_at: z.ZodOptional<z.ZodISODateTime>;
|
|
55
|
+
exact: z.ZodOptional<z.ZodLiteral<false>>;
|
|
56
|
+
deployed_at: z.ZodISODateTime;
|
|
57
|
+
report_sha256: z.ZodString;
|
|
58
|
+
resources: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
59
|
+
id: z.ZodString;
|
|
60
|
+
kind: z.ZodLiteral<"git">;
|
|
61
|
+
commit: z.ZodString;
|
|
62
|
+
sha256: z.ZodString;
|
|
63
|
+
url: z.ZodOptional<z.ZodString>;
|
|
64
|
+
agent_node_ids: z.ZodArray<z.ZodString>;
|
|
65
|
+
declared_by: z.ZodOptional<z.ZodString>;
|
|
66
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
67
|
+
id: z.ZodString;
|
|
68
|
+
kind: z.ZodLiteral<"bundle">;
|
|
69
|
+
sha256: z.ZodString;
|
|
70
|
+
origin: z.ZodOptional<z.ZodString>;
|
|
71
|
+
agent_node_ids: z.ZodArray<z.ZodString>;
|
|
72
|
+
declared_by: z.ZodOptional<z.ZodString>;
|
|
73
|
+
}, z.core.$strict>], "kind">>;
|
|
74
|
+
recording_agents: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
75
|
+
node_id: z.ZodString;
|
|
76
|
+
slug: z.ZodString;
|
|
77
|
+
directory: z.ZodString;
|
|
78
|
+
keep_ms: z.ZodNumber;
|
|
79
|
+
networks: z.ZodArray<z.ZodString>;
|
|
80
|
+
memory: z.ZodArray<z.ZodObject<{
|
|
81
|
+
id: z.ZodString;
|
|
82
|
+
declared_by: z.ZodString;
|
|
83
|
+
ledger_path: z.ZodNullable<z.ZodString>;
|
|
84
|
+
}, z.core.$strict>>;
|
|
85
|
+
feeds: z.ZodArray<z.ZodObject<{
|
|
86
|
+
id: z.ZodString;
|
|
87
|
+
volume_name: z.ZodString;
|
|
88
|
+
}, z.core.$strict>>;
|
|
89
|
+
resources: z.ZodArray<z.ZodObject<{
|
|
90
|
+
id: z.ZodString;
|
|
91
|
+
kind: z.ZodEnum<{
|
|
92
|
+
git: "git";
|
|
93
|
+
bundle: "bundle";
|
|
94
|
+
}>;
|
|
95
|
+
}, z.core.$strict>>;
|
|
96
|
+
snapshots: z.ZodArray<z.ZodString>;
|
|
97
|
+
}, z.core.$strict>>>;
|
|
98
|
+
}, z.core.$strict>>;
|
|
15
99
|
auth_profile: z.ZodNullable<z.ZodString>;
|
|
16
100
|
compile_fingerprint: z.ZodString;
|
|
17
101
|
created_at: z.ZodString;
|
|
@@ -97,5 +181,5 @@ export declare const listDeploymentRecords: (outputDirectory: string) => Promise
|
|
|
97
181
|
path: string;
|
|
98
182
|
record: DeploymentRecord;
|
|
99
183
|
}>>;
|
|
100
|
-
export declare const writeDeploymentRecord: (outputDirectory: string, record: DeploymentRecord) => Promise<string>;
|
|
184
|
+
export declare const writeDeploymentRecord: (outputDirectory: string, record: DeploymentRecord, previous?: DeploymentRecord | null) => Promise<string>;
|
|
101
185
|
export {};
|