spawnfile 0.1.12 → 0.1.14
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 +58 -12
- package/dist/audit/auditCli.d.ts +19 -0
- package/dist/audit/auditCli.js +63 -0
- package/dist/audit/checks.d.ts +100 -0
- package/dist/audit/checks.js +279 -0
- package/dist/audit/checksShared.d.ts +74 -0
- package/dist/audit/checksShared.js +37 -0
- package/dist/audit/generateAudit.d.ts +19 -0
- package/dist/audit/generateAudit.js +122 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.js +4 -0
- package/dist/audit/readAudit.d.ts +50 -0
- package/dist/audit/readAudit.js +59 -0
- package/dist/audit/types.d.ts +40 -0
- package/dist/audit/types.js +8 -0
- package/dist/auth/credentialEnvFile.d.ts +11 -0
- package/dist/auth/credentialEnvFile.js +60 -0
- package/dist/auth/credentialProvisioning.d.ts +15 -0
- package/dist/auth/credentialProvisioning.js +75 -0
- package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
- package/dist/auth/credentialProvisioningReceipt.js +70 -0
- package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
- package/dist/auth/credentialProvisioningRequest.js +169 -0
- package/dist/auth/credentialWorldBindings.d.ts +21 -0
- package/dist/auth/credentialWorldBindings.js +104 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/paths.d.ts +11 -0
- package/dist/auth/paths.js +21 -0
- package/dist/auth/runtimeCredentials.js +18 -2
- package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
- package/dist/auth/targetSecretSourceAuthor.js +52 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
- package/dist/auth/targetSecretSourceFsPublish.js +49 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
- package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
- package/dist/auth/targetSecretSourceFsRead.js +198 -0
- package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
- package/dist/auth/targetSecretSourceGrant.js +99 -0
- package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
- package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
- package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
- package/dist/auth/targetSecretSourceLifecycle.js +52 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
- package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
- package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
- package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
- package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
- package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
- package/dist/auth/targetSecretSourceResolver.js +137 -0
- package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
- package/dist/auth/targetSecretSourceRevoke.js +92 -0
- package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
- package/dist/auth/targetSecretSourceRotate.js +121 -0
- package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
- package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
- package/dist/cli/artifactsCommands.d.ts +27 -0
- package/dist/cli/artifactsCommands.js +132 -0
- package/dist/cli/authCommands.d.ts +5 -0
- package/dist/cli/authCommands.js +221 -0
- package/dist/cli/compileBuildCommands.d.ts +3 -0
- package/dist/cli/compileBuildCommands.js +35 -0
- package/dist/cli/containerBundleCommand.d.ts +6 -0
- package/dist/cli/containerBundleCommand.js +116 -0
- package/dist/cli/devCommands.d.ts +3 -0
- package/dist/cli/devCommands.js +115 -0
- package/dist/cli/downCommand.d.ts +25 -0
- package/dist/cli/downCommand.js +134 -0
- package/dist/cli/index.js +6 -3
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +11 -179
- package/dist/cli/lifecycleMachine.d.ts +19 -0
- package/dist/cli/lifecycleMachine.js +78 -0
- package/dist/cli/lifecyclePlan.d.ts +35 -0
- package/dist/cli/lifecyclePlan.js +240 -0
- package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
- package/dist/cli/lifecyclePlanningCommands.js +30 -0
- package/dist/cli/runCli.d.ts +15 -2
- package/dist/cli/runCli.js +31 -71
- package/dist/cli/runPublishCommands.d.ts +3 -0
- package/dist/cli/runPublishCommands.js +70 -0
- package/dist/cli/statusCommand.d.ts +3 -32
- package/dist/cli/statusCommand.js +37 -233
- package/dist/cli/statusCommandLive.d.ts +20 -0
- package/dist/cli/statusCommandLive.js +188 -0
- package/dist/cli/statusCommandOptions.d.ts +40 -0
- package/dist/cli/statusCommandOptions.js +42 -0
- package/dist/cli/targetCliRoute.d.ts +2 -0
- package/dist/cli/targetCliRoute.js +30 -0
- package/dist/cli/targetCommands.d.ts +33 -0
- package/dist/cli/targetCommands.js +257 -0
- package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
- package/dist/cli/targetComposedPreparationCommand.js +39 -0
- package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
- package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
- package/dist/cli/targetDefaultAuthorities.js +210 -0
- package/dist/cli/targetDefaultConfig.d.ts +68 -0
- package/dist/cli/targetDefaultConfig.js +317 -0
- package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
- package/dist/cli/targetDefaultConfigStdin.js +215 -0
- package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
- package/dist/cli/targetDefaultEnvelope.js +13 -0
- package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
- package/dist/cli/targetDefaultHandlerFactory.js +247 -0
- package/dist/cli/targetDefaultHandlers.d.ts +21 -0
- package/dist/cli/targetDefaultHandlers.js +72 -0
- package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
- package/dist/cli/targetDefaultJournalAuthority.js +135 -0
- package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
- package/dist/cli/targetDefaultWorldClock.js +14 -0
- package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
- package/dist/cli/targetDefaultWorldQueries.js +11 -0
- package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
- package/dist/cli/targetDefaultWorldReadiness.js +17 -0
- package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
- package/dist/cli/targetEvidenceHelperResolution.js +23 -0
- package/dist/cli/targetLookupCli.d.ts +3 -0
- package/dist/cli/targetLookupCli.js +31 -0
- package/dist/cli/targetLookupCommands.d.ts +12 -0
- package/dist/cli/targetLookupCommands.js +69 -0
- package/dist/cli/targetOperationDispatch.d.ts +58 -0
- package/dist/cli/targetOperationDispatch.js +21 -0
- package/dist/cli/targetReceiptOutput.d.ts +14 -0
- package/dist/cli/targetReceiptOutput.js +21 -0
- package/dist/cli/targetRequestFile.d.ts +14 -0
- package/dist/cli/targetRequestFile.js +63 -0
- package/dist/cli/targetSecretSourceInput.d.ts +28 -0
- package/dist/cli/targetSecretSourceInput.js +121 -0
- package/dist/cli/targetWorldClockCommand.d.ts +10 -0
- package/dist/cli/targetWorldClockCommand.js +42 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
- package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
- package/dist/cli/targetWorldReadinessCommand.js +43 -0
- package/dist/cli/upCommand.d.ts +3 -0
- package/dist/cli/upCommand.js +133 -0
- package/dist/cli/upImageCommand.d.ts +11 -0
- package/dist/cli/upImageCommand.js +41 -0
- package/dist/cli/upLifecycleInvocation.d.ts +41 -0
- package/dist/cli/upLifecycleInvocation.js +48 -0
- package/dist/cli/upLifecycleRecovery.d.ts +4 -0
- package/dist/cli/upLifecycleRecovery.js +53 -0
- package/dist/compiler/agentNodeMerge.d.ts +2 -0
- package/dist/compiler/agentNodeMerge.js +79 -0
- package/dist/compiler/agentSurfaces.js +11 -1
- package/dist/compiler/buildCompilePlan.js +17 -0
- package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
- package/dist/compiler/buildCompilePlanAgent.js +56 -0
- package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
- package/dist/compiler/buildCompilePlanTeams.js +4 -1
- package/dist/compiler/buildCompilePlanTraversal.js +75 -82
- package/dist/compiler/buildProject.d.ts +20 -1
- package/dist/compiler/buildProject.js +121 -7
- package/dist/compiler/compilePlanHelpers.js +2 -0
- package/dist/compiler/compileProject.d.ts +15 -0
- package/dist/compiler/compileProject.js +29 -75
- package/dist/compiler/compileProjectPolicy.d.ts +5 -0
- package/dist/compiler/compileProjectPolicy.js +21 -0
- package/dist/compiler/compileProjectReports.d.ts +9 -0
- package/dist/compiler/compileProjectReports.js +52 -0
- package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
- package/dist/compiler/containerArtifactSummaries.js +138 -0
- package/dist/compiler/containerArtifacts.d.ts +10 -0
- package/dist/compiler/containerArtifacts.js +126 -125
- package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
- package/dist/compiler/containerArtifactsPlans.js +31 -118
- package/dist/compiler/containerArtifactsRender.d.ts +3 -1
- package/dist/compiler/containerArtifactsRender.js +40 -81
- package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
- package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
- package/dist/compiler/containerConfigEnvRender.js +54 -0
- package/dist/compiler/containerEntrypointRender.d.ts +1 -0
- package/dist/compiler/containerEntrypointRender.js +60 -53
- package/dist/compiler/containerEntrypointShell.d.ts +5 -0
- package/dist/compiler/containerEntrypointShell.js +29 -0
- package/dist/compiler/containerPackageOverrides.d.ts +27 -0
- package/dist/compiler/containerPackageOverrides.js +63 -0
- package/dist/compiler/containerPackageRender.d.ts +15 -0
- package/dist/compiler/containerPackageRender.js +63 -0
- package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
- package/dist/compiler/containerTargetPlanResolution.js +97 -0
- package/dist/compiler/containerTargetResources.js +3 -1
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
- package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
- package/dist/compiler/dockerBuildContext.d.ts +16 -0
- package/dist/compiler/dockerBuildContext.js +159 -0
- package/dist/compiler/dockerBuildSkip.d.ts +30 -0
- package/dist/compiler/dockerBuildSkip.js +81 -0
- package/dist/compiler/index.d.ts +4 -0
- package/dist/compiler/index.js +4 -0
- package/dist/compiler/memoryArtifacts.d.ts +26 -0
- package/dist/compiler/memoryArtifacts.js +134 -0
- package/dist/compiler/memoryResolution.d.ts +4 -0
- package/dist/compiler/memoryResolution.js +147 -0
- package/dist/compiler/modelEnv.d.ts +2 -0
- package/dist/compiler/modelEnv.js +6 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
- package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
- package/dist/compiler/moltnetArtifactPaths.js +49 -0
- package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
- package/dist/compiler/moltnetArtifactTypes.js +1 -0
- package/dist/compiler/moltnetArtifacts.d.ts +2 -40
- package/dist/compiler/moltnetArtifacts.js +56 -95
- package/dist/compiler/moltnetBinaries.d.ts +21 -1
- package/dist/compiler/moltnetBinaries.js +156 -28
- package/dist/compiler/moltnetClientConfig.js +18 -2
- package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
- package/dist/compiler/moltnetConfigLowering.js +67 -5
- package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
- package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
- package/dist/compiler/moltnetNodeConfig.js +7 -2
- package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
- package/dist/compiler/moltnetReleaseAuthority.js +73 -0
- package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
- package/dist/compiler/moltnetReleaseDownload.js +85 -0
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
- package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
- package/dist/compiler/moltnetResolution.js +72 -20
- package/dist/compiler/moltnetRoomMemberships.js +37 -9
- package/dist/compiler/moltnetRuntimeConfig.js +11 -0
- package/dist/compiler/moltnetServerPlans.d.ts +9 -0
- package/dist/compiler/moltnetServerPlans.js +132 -0
- package/dist/compiler/organizationIdentity.d.ts +27 -0
- package/dist/compiler/organizationIdentity.js +297 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
- package/dist/compiler/organizationReadyEvidence.js +261 -0
- package/dist/compiler/projectManifestGraph.d.ts +4 -0
- package/dist/compiler/projectManifestGraph.js +24 -0
- package/dist/compiler/runProject.d.ts +4 -0
- package/dist/compiler/runProject.js +37 -22
- package/dist/compiler/runProjectAuth.d.ts +7 -1
- package/dist/compiler/runProjectAuth.js +87 -9
- package/dist/compiler/runProjectDocker.d.ts +7 -0
- package/dist/compiler/runProjectDocker.js +187 -19
- package/dist/compiler/runProjectLifecycle.d.ts +7 -0
- package/dist/compiler/runProjectLifecycle.js +40 -0
- package/dist/compiler/syncProjectAuth.js +4 -1
- package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
- package/dist/compiler/teamContextActiveEnvironments.js +255 -0
- package/dist/compiler/teamContextSupport.js +32 -40
- package/dist/compiler/teamContextTypes.d.ts +2 -0
- package/dist/compiler/types.d.ts +82 -1
- package/dist/compiler/upProject.d.ts +5 -0
- package/dist/compiler/upProject.js +257 -20
- package/dist/compiler/upReceipt.d.ts +36 -0
- package/dist/compiler/upReceipt.js +82 -0
- package/dist/compiler/updateProjectModels.js +42 -60
- package/dist/compiler/updateProjectRuntime.js +22 -35
- package/dist/compiler/updateProjectSurfaces.js +53 -47
- package/dist/compiler/worldBindings.d.ts +39 -0
- package/dist/compiler/worldBindings.js +247 -0
- package/dist/compiler/worldBindingsFile.d.ts +5 -0
- package/dist/compiler/worldBindingsFile.js +162 -0
- package/dist/deployment/artifactsExport.d.ts +49 -0
- package/dist/deployment/artifactsExport.js +217 -0
- package/dist/deployment/artifactsExportDocker.d.ts +48 -0
- package/dist/deployment/artifactsExportDocker.js +91 -0
- package/dist/deployment/artifactsExportPlan.d.ts +24 -0
- package/dist/deployment/artifactsExportPlan.js +135 -0
- package/dist/deployment/artifactsExportTypes.d.ts +50 -0
- package/dist/deployment/artifactsExportTypes.js +52 -0
- package/dist/deployment/buildImageCacheStore.d.ts +23 -0
- package/dist/deployment/buildImageCacheStore.js +54 -0
- package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
- package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
- package/dist/deployment/dockerInspect.d.ts +9 -0
- package/dist/deployment/dockerInspect.js +24 -1
- package/dist/deployment/dockerLabels.d.ts +2 -0
- package/dist/deployment/dockerLabels.js +2 -0
- package/dist/deployment/dockerLogs.js +2 -10
- package/dist/deployment/dockerManager.d.ts +51 -0
- package/dist/deployment/dockerManager.js +118 -1
- package/dist/deployment/dockerProbeGateway.js +64 -5
- package/dist/deployment/dockerRecover.d.ts +17 -0
- package/dist/deployment/dockerRecover.js +137 -0
- package/dist/deployment/dockerTeardown.d.ts +32 -0
- package/dist/deployment/dockerTeardown.js +61 -0
- package/dist/deployment/downDeployment.d.ts +34 -0
- package/dist/deployment/downDeployment.js +147 -0
- package/dist/deployment/downReceiptTypes.d.ts +21 -0
- package/dist/deployment/downReceiptTypes.js +30 -0
- package/dist/deployment/index.d.ts +17 -0
- package/dist/deployment/index.js +18 -0
- package/dist/deployment/lifecycleCompletion.d.ts +37 -0
- package/dist/deployment/lifecycleCompletion.js +236 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
- package/dist/deployment/lifecycleCompletionContracts.js +106 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
- package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
- package/dist/deployment/lifecycleCompletionLookup.js +88 -0
- package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
- package/dist/deployment/lifecycleCompletionOwner.js +31 -0
- package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
- package/dist/deployment/lifecycleCompletionParsing.js +108 -0
- package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
- package/dist/deployment/lifecycleCompletionPaths.js +16 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
- package/dist/deployment/lifecycleCompletionPublication.js +35 -0
- package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
- package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRoot.js +243 -0
- package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
- package/dist/deployment/lifecycleCompletionStore.js +151 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
- package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
- package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
- package/dist/deployment/organizationHandoffTypes.js +80 -0
- package/dist/deployment/organizationReady.d.ts +52 -0
- package/dist/deployment/organizationReady.js +200 -0
- package/dist/deployment/privateArtifactsExport.d.ts +18 -0
- package/dist/deployment/privateArtifactsExport.js +80 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
- package/dist/deployment/record.d.ts +26 -1
- package/dist/deployment/record.js +49 -4
- package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
- package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
- package/dist/deployment/target.d.ts +1 -35
- package/dist/deployment/target.js +1 -96
- package/dist/deployment/upReceiptTypes.d.ts +111 -0
- package/dist/deployment/upReceiptTypes.js +164 -0
- package/dist/dev/activity.d.ts +14 -0
- package/dist/dev/activity.js +48 -0
- package/dist/dev/docker.d.ts +16 -0
- package/dist/dev/docker.js +71 -0
- package/dist/dev/index.d.ts +2 -0
- package/dist/dev/index.js +2 -0
- package/dist/dev/project.d.ts +35 -0
- package/dist/dev/project.js +170 -0
- package/dist/distribution/buildDistributionReport.d.ts +2 -1
- package/dist/distribution/buildDistributionReport.js +2 -1
- package/dist/distribution/distributionReportSchema.d.ts +5 -0
- package/dist/distribution/distributionReportSchema.js +7 -2
- package/dist/distribution/index.d.ts +2 -2
- package/dist/distribution/index.js +1 -1
- package/dist/distribution/types.d.ts +7 -0
- package/dist/distribution/types.js +1 -0
- package/dist/filesystem/paths.js +10 -1
- package/dist/ledger/causalConformanceCli.d.ts +1 -0
- package/dist/ledger/causalConformanceCli.js +41 -0
- package/dist/ledger/causeNamespace.d.ts +8 -0
- package/dist/ledger/causeNamespace.js +24 -0
- package/dist/ledger/conformance.d.ts +83 -0
- package/dist/ledger/conformance.js +259 -0
- package/dist/ledger/emitters.d.ts +76 -0
- package/dist/ledger/emitters.js +188 -0
- package/dist/ledger/index.d.ts +4 -0
- package/dist/ledger/index.js +4 -0
- package/dist/ledger/principal.d.ts +96 -0
- package/dist/ledger/principal.js +121 -0
- package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
- package/dist/manifest/externalParticipantSchemas.js +17 -0
- package/dist/manifest/index.d.ts +1 -0
- package/dist/manifest/index.js +1 -0
- package/dist/manifest/inlineAgentMember.d.ts +2 -0
- package/dist/manifest/inlineAgentMember.js +9 -0
- package/dist/manifest/loadManifest.js +14 -8
- package/dist/manifest/mcpSchemas.d.ts +17 -0
- package/dist/manifest/mcpSchemas.js +41 -0
- package/dist/manifest/memorySchemas.d.ts +245 -0
- package/dist/manifest/memorySchemas.js +148 -0
- package/dist/manifest/renderSpawnfile.js +22 -131
- package/dist/manifest/renderSpawnfileNetworks.js +9 -2
- package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
- package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
- package/dist/manifest/schemas.d.ts +1868 -99
- package/dist/manifest/schemas.js +78 -32
- package/dist/manifest/surfaceSchemas.d.ts +17 -0
- package/dist/manifest/surfaceSchemas.js +24 -1
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
- package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
- package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
- package/dist/manifest/teamNetworkSchemas.js +3 -317
- package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
- package/dist/manifest/teamNetworkServerSchemas.js +199 -0
- package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
- package/dist/ownership/siblingBuildFreshness.js +20 -0
- package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
- package/dist/ownership/simfileRunOperatorInputs.js +139 -0
- package/dist/report/types.d.ts +142 -0
- package/dist/runtime/common.d.ts +37 -0
- package/dist/runtime/common.js +56 -1
- package/dist/runtime/container.d.ts +29 -1
- package/dist/runtime/container.js +127 -11
- package/dist/runtime/containerPackageOverrides.d.ts +37 -0
- package/dist/runtime/containerPackageOverrides.js +33 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/install.d.ts +1 -1
- package/dist/runtime/install.js +43 -1
- package/dist/runtime/mnemeMcp.d.ts +15 -0
- package/dist/runtime/mnemeMcp.js +109 -0
- package/dist/runtime/openclaw/adapter.js +15 -4
- package/dist/runtime/openclaw/mcp.d.ts +10 -0
- package/dist/runtime/openclaw/mcp.js +69 -0
- package/dist/runtime/openclaw/runAuth.js +2 -2
- package/dist/runtime/openclaw/scaffold.js +1 -1
- package/dist/runtime/openclaw/schedules.d.ts +38 -0
- package/dist/runtime/openclaw/schedules.js +74 -0
- package/dist/runtime/pi/adapter.d.ts +4 -0
- package/dist/runtime/pi/adapter.js +231 -0
- package/dist/runtime/pi/appActivitySource.d.ts +1 -0
- package/dist/runtime/pi/appActivitySource.js +199 -0
- package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
- package/dist/runtime/pi/appAgentConfig.js +264 -0
- package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
- package/dist/runtime/pi/appCliEnginesSource.js +183 -0
- package/dist/runtime/pi/appCliSource.d.ts +1 -0
- package/dist/runtime/pi/appCliSource.js +353 -0
- package/dist/runtime/pi/appControlSource.d.ts +1 -0
- package/dist/runtime/pi/appControlSource.js +390 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
- package/dist/runtime/pi/appCoreSource.d.ts +4 -0
- package/dist/runtime/pi/appCoreSource.js +244 -0
- package/dist/runtime/pi/appPreludeSource.d.ts +1 -0
- package/dist/runtime/pi/appPreludeSource.js +191 -0
- package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
- package/dist/runtime/pi/appScheduleSource.js +80 -0
- package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
- package/dist/runtime/pi/appScriptedEngine.js +42 -0
- package/dist/runtime/pi/appSource.d.ts +4 -0
- package/dist/runtime/pi/appSource.js +12 -0
- package/dist/runtime/pi/appTemplate.d.ts +14 -0
- package/dist/runtime/pi/appTemplate.js +27 -0
- package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
- package/dist/runtime/pi/appTemplateTypes.js +18 -0
- package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
- package/dist/runtime/pi/appWakeContextSource.js +398 -0
- package/dist/runtime/pi/containerTargets.d.ts +4 -0
- package/dist/runtime/pi/containerTargets.js +57 -0
- package/dist/runtime/pi/runAuth.d.ts +2 -0
- package/dist/runtime/pi/runAuth.js +185 -0
- package/dist/runtime/pi/testHelpers.d.ts +2 -0
- package/dist/runtime/pi/testHelpers.js +40 -0
- package/dist/runtime/picoclaw/adapter.js +23 -27
- package/dist/runtime/picoclaw/mcp.d.ts +4 -0
- package/dist/runtime/picoclaw/mcp.js +43 -0
- package/dist/runtime/picoclaw/memory.d.ts +7 -0
- package/dist/runtime/picoclaw/memory.js +17 -0
- package/dist/runtime/picoclaw/runAuth.js +1 -1
- package/dist/runtime/picoclaw/scaffold.js +1 -1
- package/dist/runtime/picoclaw/schedules.d.ts +26 -0
- package/dist/runtime/picoclaw/schedules.js +62 -3
- package/dist/runtime/registry.js +3 -0
- package/dist/runtime/scheduleUtils.d.ts +2 -0
- package/dist/runtime/scheduleUtils.js +15 -0
- package/dist/runtime/types.d.ts +26 -2
- package/dist/shared/errors.d.ts +1 -1
- package/dist/shared/errors.js +2 -2
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/shared/redaction.d.ts +2 -0
- package/dist/shared/redaction.js +10 -0
- package/dist/status/buildStatus.d.ts +1 -0
- package/dist/status/buildStatus.js +2 -0
- package/dist/status/compileReport.d.ts +22 -0
- package/dist/status/compileReport.js +16 -2
- package/dist/status/compiledProbeCollection.d.ts +21 -0
- package/dist/status/compiledProbeCollection.js +27 -0
- package/dist/status/deployments.js +5 -12
- package/dist/status/imageStatusReport.js +6 -0
- package/dist/status/index.d.ts +3 -0
- package/dist/status/index.js +3 -0
- package/dist/status/lifecycleProbes.d.ts +19 -0
- package/dist/status/lifecycleProbes.js +174 -0
- package/dist/status/moltnetProbes.d.ts +7 -8
- package/dist/status/moltnetProbes.js +27 -198
- package/dist/status/moltnetWiringProbes.d.ts +19 -0
- package/dist/status/moltnetWiringProbes.js +178 -0
- package/dist/target/cleanupRun.d.ts +41 -0
- package/dist/target/cleanupRun.js +139 -0
- package/dist/target/cleanupRunDocker.d.ts +16 -0
- package/dist/target/cleanupRunDocker.js +66 -0
- package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
- package/dist/target/cleanupRunDocker.test-helper.js +238 -0
- package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
- package/dist/target/cleanupRunDockerPreflight.js +224 -0
- package/dist/target/composedPreparation.d.ts +205 -0
- package/dist/target/composedPreparation.js +223 -0
- package/dist/target/containerBundle.d.ts +82 -0
- package/dist/target/containerBundle.js +243 -0
- package/dist/target/containerBundleArchive.d.ts +31 -0
- package/dist/target/containerBundleArchive.js +140 -0
- package/dist/target/containerBundleAuthority.d.ts +25 -0
- package/dist/target/containerBundleAuthority.js +65 -0
- package/dist/target/containerBundleContracts.d.ts +114 -0
- package/dist/target/containerBundleContracts.js +173 -0
- package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
- package/dist/target/containerBundleFilesystemStore.js +247 -0
- package/dist/target/containerBundlePolicy.d.ts +33 -0
- package/dist/target/containerBundlePolicy.js +64 -0
- package/dist/target/containerBundleStore.d.ts +127 -0
- package/dist/target/containerBundleStore.js +284 -0
- package/dist/target/contracts.d.ts +538 -0
- package/dist/target/contracts.js +373 -0
- package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
- package/dist/target/dockerArtifactIdentityTypes.js +1 -0
- package/dist/target/dockerArtifactInspection.d.ts +40 -0
- package/dist/target/dockerArtifactInspection.js +125 -0
- package/dist/target/dockerArtifacts.d.ts +21 -0
- package/dist/target/dockerArtifacts.js +110 -0
- package/dist/target/dockerArtifactsProvider.d.ts +41 -0
- package/dist/target/dockerArtifactsProvider.js +449 -0
- package/dist/target/dockerCommandExecutor.d.ts +27 -0
- package/dist/target/dockerCommandExecutor.js +200 -0
- package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
- package/dist/target/dockerCommandExecutorCore.js +273 -0
- package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
- package/dist/target/dockerContainerBundleBuilder.js +256 -0
- package/dist/target/dockerContextSnapshot.d.ts +21 -0
- package/dist/target/dockerContextSnapshot.js +158 -0
- package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
- package/dist/target/dockerEndpointFingerprint.js +9 -0
- package/dist/target/dockerPreparedArtifact.d.ts +48 -0
- package/dist/target/dockerPreparedArtifact.js +131 -0
- package/dist/target/dockerProjectionJson.d.ts +1 -0
- package/dist/target/dockerProjectionJson.js +80 -0
- package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
- package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
- package/dist/target/dockerResources.d.ts +26 -0
- package/dist/target/dockerResources.js +162 -0
- package/dist/target/dockerResourcesProvider.d.ts +44 -0
- package/dist/target/dockerResourcesProvider.js +207 -0
- package/dist/target/dockerSecrets.d.ts +39 -0
- package/dist/target/dockerSecrets.js +249 -0
- package/dist/target/dockerSecretsAuthority.d.ts +26 -0
- package/dist/target/dockerSecretsAuthority.js +216 -0
- package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
- package/dist/target/dockerSecretsLifecycle.js +133 -0
- package/dist/target/dockerSecretsProvider.d.ts +68 -0
- package/dist/target/dockerSecretsProvider.js +329 -0
- package/dist/target/dockerTarget.d.ts +52 -0
- package/dist/target/dockerTarget.js +48 -0
- package/dist/target/dockerTargetBinding.d.ts +14 -0
- package/dist/target/dockerTargetBinding.js +96 -0
- package/dist/target/dockerWorldClock.d.ts +17 -0
- package/dist/target/dockerWorldClock.js +111 -0
- package/dist/target/dockerWorldReadiness.d.ts +17 -0
- package/dist/target/dockerWorldReadiness.js +119 -0
- package/dist/target/dockerWorldService.d.ts +23 -0
- package/dist/target/dockerWorldService.js +216 -0
- package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
- package/dist/target/dockerWorldServiceAuthority.js +182 -0
- package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
- package/dist/target/dockerWorldServiceLifecycle.js +275 -0
- package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
- package/dist/target/dockerWorldServiceProvider.js +318 -0
- package/dist/target/dockerWorldServiceStore.d.ts +73 -0
- package/dist/target/dockerWorldServiceStore.js +367 -0
- package/dist/target/evidenceExport.d.ts +55 -0
- package/dist/target/evidenceExport.js +518 -0
- package/dist/target/evidenceExportArchive.d.ts +10 -0
- package/dist/target/evidenceExportArchive.js +302 -0
- package/dist/target/evidenceExportContract.d.ts +27 -0
- package/dist/target/evidenceExportContract.js +40 -0
- package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
- package/dist/target/evidenceExportOperationsTestKit.js +312 -0
- package/dist/target/evidenceExportProvider.d.ts +85 -0
- package/dist/target/evidenceExportProvider.js +187 -0
- package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
- package/dist/target/evidenceExportPublicationTypes.js +1 -0
- package/dist/target/evidenceExportStore.d.ts +70 -0
- package/dist/target/evidenceExportStore.js +498 -0
- package/dist/target/evidenceExportStorePublication.d.ts +7 -0
- package/dist/target/evidenceExportStorePublication.js +395 -0
- package/dist/target/handles.d.ts +20 -0
- package/dist/target/handles.js +56 -0
- package/dist/target/index.d.ts +12 -0
- package/dist/target/index.js +11 -0
- package/dist/target/journal.d.ts +59 -0
- package/dist/target/journal.js +529 -0
- package/dist/target/journalFilesystem.d.ts +3 -0
- package/dist/target/journalFilesystem.js +111 -0
- package/dist/target/journalRoot.d.ts +4 -0
- package/dist/target/journalRoot.js +6 -0
- package/dist/target/organizationAttachment.d.ts +23 -0
- package/dist/target/organizationAttachment.js +263 -0
- package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
- package/dist/target/organizationAttachmentAuthority.js +161 -0
- package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
- package/dist/target/organizationAttachmentLifecycle.js +101 -0
- package/dist/target/organizationAttachmentProvider.d.ts +76 -0
- package/dist/target/organizationAttachmentProvider.js +289 -0
- package/dist/target/organizationAttachmentStore.d.ts +51 -0
- package/dist/target/organizationAttachmentStore.js +316 -0
- package/dist/target/publicArtifactSnapshot.d.ts +41 -0
- package/dist/target/publicArtifactSnapshot.js +150 -0
- package/dist/target/topologyActivation.d.ts +51 -0
- package/dist/target/topologyActivation.js +149 -0
- package/dist/target/topologyAttestation.d.ts +37 -0
- package/dist/target/topologyAttestation.js +300 -0
- package/dist/target/topologyAttestationErrors.d.ts +1 -0
- package/dist/target/topologyAttestationErrors.js +1 -0
- package/dist/target/worldClock.d.ts +60 -0
- package/dist/target/worldClock.js +129 -0
- package/dist/target/worldReadiness.d.ts +103 -0
- package/dist/target/worldReadiness.js +153 -0
- package/moltnet-releases.json +20 -0
- package/package.json +29 -8
- package/runtimes.yaml +28 -27
- package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
- package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
- /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
- /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileExists, readUtf8File } from "../filesystem/index.js";
|
|
3
|
+
import { REPORT_FILENAME, SpawnfileError } from "../shared/index.js";
|
|
4
|
+
import { exportRunArtifacts } from "./artifactsExport.js";
|
|
5
|
+
import { assertDeploymentLifecycleCorrelation, } from "./deploymentLifecycleCorrelation.js";
|
|
6
|
+
import { defaultDockerTeardownExecFile, removeDockerContainer, removeDockerVolume, } from "./dockerTeardown.js";
|
|
7
|
+
import { DOWN_RECEIPT_VERSION } from "./downReceiptTypes.js";
|
|
8
|
+
import { initializeOrganizationHandoffAuthorityStore, } from "./organizationHandoffAuthorityStore.js";
|
|
9
|
+
import { readDeploymentRecordFromOutput } from "./record.js";
|
|
10
|
+
const targetRefForUnit = (unit) => unit.container_id ?? unit.container_name;
|
|
11
|
+
const readCompileReport = async (compiledOutputDirectory) => {
|
|
12
|
+
const reportPath = path.join(compiledOutputDirectory, REPORT_FILENAME);
|
|
13
|
+
if (!(await fileExists(reportPath))) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return JSON.parse(await readUtf8File(reportPath));
|
|
17
|
+
};
|
|
18
|
+
const explainRefusal = (deploymentName) => `Deployment "${deploymentName}" has no export-index: its durable artifacts (moltnet ` +
|
|
19
|
+
"causal log, mneme bank ledgers, daimon telemetry) have not been exported yet, and " +
|
|
20
|
+
"`spawnfile down` would destroy the container they live in before anyone reads them. " +
|
|
21
|
+
`Run \`spawnfile artifacts export --deployment ${deploymentName} --out <dir>\` first, ` +
|
|
22
|
+
"or pass `--export-to <dir>` to export-then-down in one call, or `--force` to " +
|
|
23
|
+
"deliberately discard the un-exported artifacts.";
|
|
24
|
+
/** Enforces the export-before-teardown invariant (Decision 21): resolves whether this
|
|
25
|
+
* deployment's record already carries an `export_index` marker (stamped by
|
|
26
|
+
* `exportRunArtifacts` — see record.ts), and if not, either refuses, auto-exports, or
|
|
27
|
+
* (with `--force`) proceeds anyway. Returns the record `spawnfile down` should act on —
|
|
28
|
+
* re-read after an auto-export, since that call updates the record on disk. */
|
|
29
|
+
const ensureExported = async (record, options) => {
|
|
30
|
+
if (record.export_index || options.force) {
|
|
31
|
+
return record;
|
|
32
|
+
}
|
|
33
|
+
const exportTo = options.exportTo;
|
|
34
|
+
if (!exportTo) {
|
|
35
|
+
throw new SpawnfileError("runtime_error", explainRefusal(options.deploymentName));
|
|
36
|
+
}
|
|
37
|
+
await exportRunArtifacts({
|
|
38
|
+
compiledOutputDirectory: options.compiledOutputDirectory,
|
|
39
|
+
deploymentName: options.deploymentName,
|
|
40
|
+
destinationDirectory: exportTo,
|
|
41
|
+
dockerCommand: options.dockerCommand,
|
|
42
|
+
// Structurally identical exec-call shape as DockerArtifactExecFile (see
|
|
43
|
+
// artifactsExportDocker.ts) — forwarded so an injected fake/override execFile covers
|
|
44
|
+
// the auto-export step too, not just container/volume removal.
|
|
45
|
+
execFile: options.execFile,
|
|
46
|
+
readerImage: options.readerImage,
|
|
47
|
+
timeoutMs: options.timeoutMs,
|
|
48
|
+
});
|
|
49
|
+
return readDeploymentRecordFromOutput(options.compiledOutputDirectory, options.deploymentName);
|
|
50
|
+
};
|
|
51
|
+
const closeOrganizationHandoff = async (record) => {
|
|
52
|
+
const hasPublicHandoff = record.organization_handoff !== undefined;
|
|
53
|
+
const hasPrivateHandle = record.organization_handoff_handle !== undefined;
|
|
54
|
+
if (hasPublicHandoff !== hasPrivateHandle) {
|
|
55
|
+
throw new SpawnfileError("runtime_error", "Deployment organization handoff authority is incomplete; refusing teardown");
|
|
56
|
+
}
|
|
57
|
+
if (!hasPrivateHandle ||
|
|
58
|
+
record.organization_handoff === undefined ||
|
|
59
|
+
record.organization_handoff_handle === undefined)
|
|
60
|
+
return;
|
|
61
|
+
let authority;
|
|
62
|
+
let failed = false;
|
|
63
|
+
try {
|
|
64
|
+
authority = await initializeOrganizationHandoffAuthorityStore();
|
|
65
|
+
await authority.close({
|
|
66
|
+
expectedHandoff: record.organization_handoff,
|
|
67
|
+
organizationHandoffHandle: record.organization_handoff_handle,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
failed = true;
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
try {
|
|
75
|
+
await authority?.dispose();
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
failed = true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (failed) {
|
|
82
|
+
throw new SpawnfileError("runtime_error", "Unable to close organization handoff authority before deployment teardown");
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* `spawnfile down` — record-driven teardown: resolves the deployment record, enforces the
|
|
87
|
+
* export-before-teardown invariant, `docker rm -f`s every recorded container unit, and
|
|
88
|
+
* (only with `--volumes`) removes named volumes. Always returns a `spawnfile.down-
|
|
89
|
+
* receipt.v1`, even when some units/volumes failed to remove (`errors` carries the
|
|
90
|
+
* per-item failures; a partial failure is never silently swallowed, but it also never
|
|
91
|
+
* stops the rest of the teardown from being attempted).
|
|
92
|
+
*/
|
|
93
|
+
export const downDeployment = async (options) => {
|
|
94
|
+
const compiledOutputDirectory = path.resolve(options.compiledOutputDirectory);
|
|
95
|
+
const dockerCommand = options.dockerCommand ?? "docker";
|
|
96
|
+
const execFileImpl = options.execFile ?? defaultDockerTeardownExecFile;
|
|
97
|
+
const timeoutMs = options.timeoutMs ?? 30_000;
|
|
98
|
+
const initialRecord = await readDeploymentRecordFromOutput(compiledOutputDirectory, options.deploymentName);
|
|
99
|
+
assertDeploymentLifecycleCorrelation(initialRecord, options.expectedLifecycleCorrelation);
|
|
100
|
+
const record = await ensureExported(initialRecord, {
|
|
101
|
+
...options,
|
|
102
|
+
compiledOutputDirectory,
|
|
103
|
+
});
|
|
104
|
+
assertDeploymentLifecycleCorrelation(record, options.expectedLifecycleCorrelation);
|
|
105
|
+
await closeOrganizationHandoff(record);
|
|
106
|
+
const runnerOptions = { dockerCommand, execFile: execFileImpl, timeoutMs };
|
|
107
|
+
const unitsStopped = [];
|
|
108
|
+
const errors = [];
|
|
109
|
+
for (const unit of record.units) {
|
|
110
|
+
const containerRef = targetRefForUnit(unit);
|
|
111
|
+
if (!containerRef) {
|
|
112
|
+
errors.push(`unit ${unit.id} has no recorded container id or name; nothing to remove`);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const outcome = await removeDockerContainer(record.target, containerRef, runnerOptions);
|
|
116
|
+
if (outcome.removed) {
|
|
117
|
+
unitsStopped.push(unit.id);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
errors.push(`unable to remove container ${containerRef} (unit ${unit.id}): ${outcome.error}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const report = await readCompileReport(compiledOutputDirectory);
|
|
124
|
+
const volumeNames = [
|
|
125
|
+
...new Set((report?.container?.persistent_mounts ?? []).map((mount) => mount.volume_name)),
|
|
126
|
+
].sort();
|
|
127
|
+
const retainedVolumes = [];
|
|
128
|
+
if (options.removeVolumes) {
|
|
129
|
+
for (const volumeName of volumeNames) {
|
|
130
|
+
const outcome = await removeDockerVolume(record.target, volumeName, runnerOptions);
|
|
131
|
+
if (!outcome.removed) {
|
|
132
|
+
errors.push(`unable to remove volume ${volumeName}: ${outcome.error}`);
|
|
133
|
+
retainedVolumes.push(volumeName);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
retainedVolumes.push(...volumeNames);
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
deployment: record.name,
|
|
142
|
+
errors,
|
|
143
|
+
retained_volumes: retainedVolumes.sort(),
|
|
144
|
+
units_stopped: unitsStopped.sort(),
|
|
145
|
+
version: DOWN_RECEIPT_VERSION,
|
|
146
|
+
};
|
|
147
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* `spawnfile.down-receipt.v1` — the machine contract `spawnfile down --json` writes to
|
|
4
|
+
* stdout (contracts.md's Spawnfile down-receipt registry row; Decision 21's Piece 4).
|
|
5
|
+
* `units_stopped` names the deployment record's own unit ids (`record.ts`'s
|
|
6
|
+
* `unit.id`, e.g. `"<deployment>-container"`), not raw Docker container ids, so a caller
|
|
7
|
+
* can cross-reference the up-receipt/deployment record without re-deriving anything.
|
|
8
|
+
* `retained_volumes` is "named volumes still present on disk after this call returns" —
|
|
9
|
+
* true whether they were never touched (the default) or survived an attempted
|
|
10
|
+
* `--volumes` removal that failed (surfaced in `errors`, not silently dropped).
|
|
11
|
+
*/
|
|
12
|
+
export declare const DOWN_RECEIPT_VERSION: "spawnfile.down-receipt.v1";
|
|
13
|
+
export declare const downReceiptSchema: z.ZodObject<{
|
|
14
|
+
version: z.ZodLiteral<"spawnfile.down-receipt.v1">;
|
|
15
|
+
deployment: z.ZodString;
|
|
16
|
+
units_stopped: z.ZodArray<z.ZodString>;
|
|
17
|
+
retained_volumes: z.ZodArray<z.ZodString>;
|
|
18
|
+
errors: z.ZodArray<z.ZodString>;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
export type DownReceipt = z.infer<typeof downReceiptSchema>;
|
|
21
|
+
export declare const parseDownReceipt: (raw: unknown) => DownReceipt;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* `spawnfile.down-receipt.v1` — the machine contract `spawnfile down --json` writes to
|
|
4
|
+
* stdout (contracts.md's Spawnfile down-receipt registry row; Decision 21's Piece 4).
|
|
5
|
+
* `units_stopped` names the deployment record's own unit ids (`record.ts`'s
|
|
6
|
+
* `unit.id`, e.g. `"<deployment>-container"`), not raw Docker container ids, so a caller
|
|
7
|
+
* can cross-reference the up-receipt/deployment record without re-deriving anything.
|
|
8
|
+
* `retained_volumes` is "named volumes still present on disk after this call returns" —
|
|
9
|
+
* true whether they were never touched (the default) or survived an attempted
|
|
10
|
+
* `--volumes` removal that failed (surfaced in `errors`, not silently dropped).
|
|
11
|
+
*/
|
|
12
|
+
export const DOWN_RECEIPT_VERSION = "spawnfile.down-receipt.v1";
|
|
13
|
+
export const downReceiptSchema = z
|
|
14
|
+
.object({
|
|
15
|
+
version: z.literal(DOWN_RECEIPT_VERSION),
|
|
16
|
+
deployment: z.string().min(1),
|
|
17
|
+
units_stopped: z.array(z.string().min(1)),
|
|
18
|
+
retained_volumes: z.array(z.string().min(1)),
|
|
19
|
+
errors: z.array(z.string().min(1))
|
|
20
|
+
})
|
|
21
|
+
.strict();
|
|
22
|
+
export const parseDownReceipt = (raw) => {
|
|
23
|
+
const result = downReceiptSchema.safeParse(raw);
|
|
24
|
+
if (!result.success) {
|
|
25
|
+
throw new Error(`invalid ${DOWN_RECEIPT_VERSION}: ${result.error.issues
|
|
26
|
+
.map((issue) => `${issue.path.join(".") || "<root>"}: ${issue.message}`)
|
|
27
|
+
.join("; ")}`);
|
|
28
|
+
}
|
|
29
|
+
return result.data;
|
|
30
|
+
};
|
|
@@ -1,9 +1,26 @@
|
|
|
1
|
+
export * from "./artifactsExport.js";
|
|
2
|
+
export * from "./artifactsExportDocker.js";
|
|
3
|
+
export * from "./artifactsExportPlan.js";
|
|
4
|
+
export * from "./artifactsExportTypes.js";
|
|
5
|
+
export * from "./privateArtifactsExport.js";
|
|
6
|
+
export * from "./buildImageCacheStore.js";
|
|
1
7
|
export * from "./dockerLabels.js";
|
|
2
8
|
export * from "./dockerInspect.js";
|
|
3
9
|
export * from "./dockerLogs.js";
|
|
4
10
|
export * from "./dockerManager.js";
|
|
5
11
|
export * from "./dockerProbeGateway.js";
|
|
12
|
+
export * from "./dockerRecover.js";
|
|
13
|
+
export * from "./dockerTeardown.js";
|
|
14
|
+
export * from "./deploymentLifecycleCorrelation.js";
|
|
15
|
+
export * from "./downDeployment.js";
|
|
16
|
+
export * from "./downReceiptTypes.js";
|
|
6
17
|
export * from "./homeStore.js";
|
|
18
|
+
export * from "./lifecycleCompletion.js";
|
|
7
19
|
export * from "./names.js";
|
|
20
|
+
export * from "./organizationHandoffTypes.js";
|
|
21
|
+
export * from "./organizationHandoffAuthorityTypes.js";
|
|
22
|
+
export * from "./organizationHandoffAuthorityStore.js";
|
|
23
|
+
export * from "./organizationReady.js";
|
|
8
24
|
export * from "./record.js";
|
|
9
25
|
export * from "./target.js";
|
|
26
|
+
export * from "./upReceiptTypes.js";
|
package/dist/deployment/index.js
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
|
+
export * from "./artifactsExport.js";
|
|
2
|
+
export * from "./artifactsExportDocker.js";
|
|
3
|
+
export * from "./artifactsExportPlan.js";
|
|
4
|
+
export * from "./artifactsExportTypes.js";
|
|
5
|
+
export * from "./privateArtifactsExport.js";
|
|
6
|
+
export * from "./buildImageCacheStore.js";
|
|
1
7
|
export * from "./dockerLabels.js";
|
|
2
8
|
export * from "./dockerInspect.js";
|
|
3
9
|
export * from "./dockerLogs.js";
|
|
4
10
|
export * from "./dockerManager.js";
|
|
5
11
|
export * from "./dockerProbeGateway.js";
|
|
12
|
+
export * from "./dockerRecover.js";
|
|
13
|
+
export * from "./dockerTeardown.js";
|
|
14
|
+
export * from "./deploymentLifecycleCorrelation.js";
|
|
15
|
+
export * from "./downDeployment.js";
|
|
16
|
+
export * from "./downReceiptTypes.js";
|
|
6
17
|
export * from "./homeStore.js";
|
|
18
|
+
export * from "./lifecycleCompletion.js";
|
|
7
19
|
export * from "./names.js";
|
|
20
|
+
export * from "./organizationHandoffTypes.js";
|
|
21
|
+
export * from "./organizationHandoffAuthorityTypes.js";
|
|
22
|
+
export * from "./organizationHandoffAuthorityStore.js";
|
|
23
|
+
export * from "./organizationReady.js";
|
|
8
24
|
export * from "./record.js";
|
|
25
|
+
// Compatibility target exports remain available from this legacy deployment barrel.
|
|
9
26
|
export * from "./target.js";
|
|
27
|
+
export * from "./upReceiptTypes.js";
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type LifecycleAmbiguousReason, type LifecycleCompletion, type LifecycleInvocation, type LifecycleOwnerCapability } from "./lifecycleCompletionContracts.js";
|
|
2
|
+
import { resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath } from "./lifecycleCompletionStore.js";
|
|
3
|
+
export { LIFECYCLE_COMPLETION_VERSION, LIFECYCLE_INVOCATION_VERSION, LIFECYCLE_LOOKUP_VERSION, type LifecycleCompletion, type LifecycleInvocation, type LifecycleLookup, type LifecycleOwnerCapability, } from "./lifecycleCompletionContracts.js";
|
|
4
|
+
export { resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath };
|
|
5
|
+
export declare const findLifecycleInvocation: (id: string) => Promise<{
|
|
6
|
+
correlation: Record<string, string | number | boolean | null>;
|
|
7
|
+
id: string;
|
|
8
|
+
operation: "down" | "up" | "artifacts_export";
|
|
9
|
+
request_policy: Record<string, string | number | boolean | null>;
|
|
10
|
+
version: "spawnfile.lifecycle-invocation.v1";
|
|
11
|
+
} | null>;
|
|
12
|
+
/**
|
|
13
|
+
* Durably reserves one exact effect-free lifecycle plan. Execution later
|
|
14
|
+
* promotes the same bytes to an admission or refuses id drift.
|
|
15
|
+
*/
|
|
16
|
+
export declare const admitLifecyclePlan: (raw: LifecycleInvocation) => Promise<LifecycleInvocation>;
|
|
17
|
+
export declare const findExactLifecycleCompletion: (invocation: LifecycleInvocation) => Promise<LifecycleCompletion | null>;
|
|
18
|
+
export declare const claimLifecycleInvocation: (raw: LifecycleInvocation) => Promise<{
|
|
19
|
+
readonly capability: {
|
|
20
|
+
readonly epoch: string;
|
|
21
|
+
readonly role: "initial";
|
|
22
|
+
};
|
|
23
|
+
readonly status: "owner";
|
|
24
|
+
} | {
|
|
25
|
+
readonly status: "pending" | "replay";
|
|
26
|
+
readonly capability?: undefined;
|
|
27
|
+
}>;
|
|
28
|
+
export declare const claimLifecycleRecovery: (raw: LifecycleInvocation) => Promise<import("./lifecycleCompletionRecovery.js").LifecycleRecoveryClaim>;
|
|
29
|
+
export declare const renewLifecycleOwner: (raw: LifecycleInvocation, capability: LifecycleOwnerCapability) => Promise<void>;
|
|
30
|
+
export declare const recordLifecycleOutcomeEvidence: (raw: LifecycleInvocation, outcomeBytes: string, capability: LifecycleOwnerCapability, deploymentInstanceDigest: string) => Promise<void>;
|
|
31
|
+
export declare const findLifecycleOutcomeEvidence: (raw: LifecycleInvocation) => Promise<{
|
|
32
|
+
completion: LifecycleCompletion;
|
|
33
|
+
deployment_instance_digest: string;
|
|
34
|
+
} | null>;
|
|
35
|
+
export declare const completeLifecycleInvocation: (raw: LifecycleInvocation, outcomeBytes: string, capability: LifecycleOwnerCapability) => Promise<LifecycleCompletion>;
|
|
36
|
+
export declare const markLifecycleAmbiguous: (raw: LifecycleInvocation, reasonCode: LifecycleAmbiguousReason, capability: LifecycleOwnerCapability) => Promise<void>;
|
|
37
|
+
export declare const lookupLifecycleCompletion: (id: string) => Promise<import("./lifecycleCompletionContracts.js").LifecycleLookup>;
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { readSettledLifecycleRecord } from "./lifecycleCompletionPublication.js";
|
|
3
|
+
import { canonicalLifecycleJson, lifecycleIdSchema, LIFECYCLE_COMPLETION_VERSION, LIFECYCLE_TERMINAL_VERSION, } from "./lifecycleCompletionContracts.js";
|
|
4
|
+
import { findLifecycleInvocationRecord, lookupLifecycleCompletionRecord, } from "./lifecycleCompletionLookup.js";
|
|
5
|
+
import { writeLifecycleHeartbeat } from "./lifecycleCompletionHeartbeat.js";
|
|
6
|
+
import { assertLifecycleOwnerCapability, createLifecycleAdmission, } from "./lifecycleCompletionOwner.js";
|
|
7
|
+
import { parseLifecycleAdmission, parseLifecycleCompletedTerminal, parseLifecycleCompletion, parseLifecycleHeartbeat, parseLifecycleInvocation, } from "./lifecycleCompletionParsing.js";
|
|
8
|
+
import { claimLifecycleRecoveryRecord, markLifecycleAmbiguousRecord, } from "./lifecycleCompletionRecovery.js";
|
|
9
|
+
import { admissionPath, evidencePath, existingLifecycleRoot as existingRoot, failLifecycleStore as fail, heartbeatPath, lifecycleRecordName as name, lifecycleRoot as root, planPath, publishLifecycleRecord as publish, readLifecycleRecord as read, recoveryPath, resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath, syncLifecycleDirectory as sync, } from "./lifecycleCompletionStore.js";
|
|
10
|
+
export { LIFECYCLE_COMPLETION_VERSION, LIFECYCLE_INVOCATION_VERSION, LIFECYCLE_LOOKUP_VERSION, } from "./lifecycleCompletionContracts.js";
|
|
11
|
+
const canonical = canonicalLifecycleJson;
|
|
12
|
+
export { resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath };
|
|
13
|
+
const exactAdmission = async (invocation) => {
|
|
14
|
+
const text = await readSettledLifecycleRecord(admissionPath(invocation.id), read);
|
|
15
|
+
if (text === null)
|
|
16
|
+
return null;
|
|
17
|
+
const stored = parseLifecycleAdmission(text);
|
|
18
|
+
if (canonical(stored.invocation) !== canonical(invocation))
|
|
19
|
+
fail("invocation id drift");
|
|
20
|
+
return stored;
|
|
21
|
+
};
|
|
22
|
+
const exactCompletion = async (invocation) => {
|
|
23
|
+
const text = await readSettledLifecycleRecord(resolveLifecycleCompletionPath(invocation.id), read);
|
|
24
|
+
if (text === null)
|
|
25
|
+
return null;
|
|
26
|
+
const stored = parseLifecycleCompletedTerminal(text);
|
|
27
|
+
if (canonical(stored.invocation) !== canonical(invocation))
|
|
28
|
+
fail("invocation id drift");
|
|
29
|
+
return stored;
|
|
30
|
+
};
|
|
31
|
+
export const findLifecycleInvocation = (id) => (async () => {
|
|
32
|
+
const parsed = lifecycleIdSchema.safeParse(id);
|
|
33
|
+
if (!parsed.success)
|
|
34
|
+
fail("invalid invocation id");
|
|
35
|
+
if ((await existingRoot()) === null)
|
|
36
|
+
return null;
|
|
37
|
+
const value = parsed.data;
|
|
38
|
+
const admitted = await findLifecycleInvocationRecord(value, {
|
|
39
|
+
admissionPath,
|
|
40
|
+
existingRoot,
|
|
41
|
+
read: (file) => readSettledLifecycleRecord(file, read),
|
|
42
|
+
});
|
|
43
|
+
if (admitted)
|
|
44
|
+
return admitted;
|
|
45
|
+
const text = await readSettledLifecycleRecord(planPath(value), read);
|
|
46
|
+
if (text === null)
|
|
47
|
+
return null;
|
|
48
|
+
let raw;
|
|
49
|
+
try {
|
|
50
|
+
raw = JSON.parse(text);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
fail("corrupt lifecycle plan");
|
|
54
|
+
}
|
|
55
|
+
const planned = parseLifecycleInvocation(raw);
|
|
56
|
+
if (`${canonical(planned)}\n` !== text)
|
|
57
|
+
fail("corrupt lifecycle plan");
|
|
58
|
+
return planned;
|
|
59
|
+
})();
|
|
60
|
+
const exactPlan = async (invocation) => {
|
|
61
|
+
const text = await readSettledLifecycleRecord(planPath(invocation.id), read);
|
|
62
|
+
if (text === null)
|
|
63
|
+
return null;
|
|
64
|
+
let raw;
|
|
65
|
+
try {
|
|
66
|
+
raw = JSON.parse(text);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
fail("corrupt lifecycle plan");
|
|
70
|
+
}
|
|
71
|
+
const stored = parseLifecycleInvocation(raw);
|
|
72
|
+
if (`${canonical(stored)}\n` !== text ||
|
|
73
|
+
canonical(stored) !== canonical(invocation))
|
|
74
|
+
fail("invocation id drift");
|
|
75
|
+
return stored;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Durably reserves one exact effect-free lifecycle plan. Execution later
|
|
79
|
+
* promotes the same bytes to an admission or refuses id drift.
|
|
80
|
+
*/
|
|
81
|
+
export const admitLifecyclePlan = async (raw) => {
|
|
82
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
83
|
+
const directory = await root();
|
|
84
|
+
const admitted = await exactAdmission(invocation);
|
|
85
|
+
const completed = await exactCompletion(invocation);
|
|
86
|
+
if (completed && !admitted)
|
|
87
|
+
fail("completion without admission");
|
|
88
|
+
if (admitted)
|
|
89
|
+
return invocation;
|
|
90
|
+
const content = `${canonical(invocation)}\n`;
|
|
91
|
+
await publish(directory, name(invocation.id, "plan"), content);
|
|
92
|
+
await exactPlan(invocation);
|
|
93
|
+
// Close the plan-vs-execution race: an admission published concurrently is
|
|
94
|
+
// authoritative and must contain the same invocation bytes.
|
|
95
|
+
await exactAdmission(invocation);
|
|
96
|
+
return invocation;
|
|
97
|
+
};
|
|
98
|
+
export const findExactLifecycleCompletion = async (invocation) => {
|
|
99
|
+
const parsed = parseLifecycleInvocation(invocation);
|
|
100
|
+
await root();
|
|
101
|
+
const admission = await exactAdmission(parsed);
|
|
102
|
+
const completion = await exactCompletion(parsed);
|
|
103
|
+
if (completion && !admission)
|
|
104
|
+
fail("completion without admission");
|
|
105
|
+
return completion;
|
|
106
|
+
};
|
|
107
|
+
export const claimLifecycleInvocation = async (raw) => {
|
|
108
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
109
|
+
const directory = await root();
|
|
110
|
+
const admission = await exactAdmission(invocation);
|
|
111
|
+
// An existing admission is authoritative. Otherwise a prior read-only plan
|
|
112
|
+
// reserves this id and must match before we publish the first effect owner.
|
|
113
|
+
if (!admission)
|
|
114
|
+
await exactPlan(invocation);
|
|
115
|
+
const completion = await exactCompletion(invocation);
|
|
116
|
+
if (completion && !admission)
|
|
117
|
+
fail("completion without admission");
|
|
118
|
+
if (completion)
|
|
119
|
+
return { status: "replay" };
|
|
120
|
+
const createdAdmission = createLifecycleAdmission(invocation);
|
|
121
|
+
const content = `${canonical(createdAdmission)}\n`;
|
|
122
|
+
const created = await publish(directory, name(invocation.id, "admission"), content, "ignore");
|
|
123
|
+
if (created)
|
|
124
|
+
return {
|
|
125
|
+
capability: { epoch: createdAdmission.owner.epoch, role: "initial" },
|
|
126
|
+
status: "owner",
|
|
127
|
+
};
|
|
128
|
+
await exactAdmission(invocation);
|
|
129
|
+
return {
|
|
130
|
+
status: (await exactCompletion(invocation)) ? "replay" : "pending",
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
export const claimLifecycleRecovery = async (raw) => {
|
|
134
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
135
|
+
const directory = await root();
|
|
136
|
+
return claimLifecycleRecoveryRecord(invocation, {
|
|
137
|
+
exactAdmission,
|
|
138
|
+
exactCompletion,
|
|
139
|
+
publish: (value, kind, content) => publish(directory, name(value.id, kind), content, kind === "recovery" ? "ignore" : "match"),
|
|
140
|
+
readRecovery: (value) => readSettledLifecycleRecord(recoveryPath(value.id), read),
|
|
141
|
+
readHeartbeat: async (value) => {
|
|
142
|
+
const text = await readSettledLifecycleRecord(heartbeatPath(value.id), read);
|
|
143
|
+
return text ? parseLifecycleHeartbeat(text) : null;
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
export const renewLifecycleOwner = async (raw, capability) => {
|
|
148
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
149
|
+
const directory = await root();
|
|
150
|
+
const admitted = await exactAdmission(invocation);
|
|
151
|
+
const exactAdmitted = admitted ?? fail("missing admission");
|
|
152
|
+
const recoveryText = await readSettledLifecycleRecord(recoveryPath(invocation.id), read);
|
|
153
|
+
const recovered = recoveryText ? parseLifecycleAdmission(recoveryText) : null;
|
|
154
|
+
assertLifecycleOwnerCapability(invocation, exactAdmitted, recovered, capability);
|
|
155
|
+
await writeLifecycleHeartbeat(directory, path.basename(heartbeatPath(invocation.id)), capability.epoch, sync);
|
|
156
|
+
};
|
|
157
|
+
const assertActiveCapability = async (invocation, capability) => {
|
|
158
|
+
const admitted = await exactAdmission(invocation);
|
|
159
|
+
const exactAdmitted = admitted ?? fail("missing admission");
|
|
160
|
+
const recoveryText = await readSettledLifecycleRecord(recoveryPath(invocation.id), read);
|
|
161
|
+
const recovered = recoveryText ? parseLifecycleAdmission(recoveryText) : null;
|
|
162
|
+
assertLifecycleOwnerCapability(invocation, exactAdmitted, recovered, capability);
|
|
163
|
+
};
|
|
164
|
+
export const recordLifecycleOutcomeEvidence = async (raw, outcomeBytes, capability, deploymentInstanceDigest) => {
|
|
165
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
166
|
+
const directory = await root();
|
|
167
|
+
await assertActiveCapability(invocation, capability);
|
|
168
|
+
const evidence = parseLifecycleCompletion(`${canonical({
|
|
169
|
+
invocation,
|
|
170
|
+
outcome_bytes: outcomeBytes,
|
|
171
|
+
version: LIFECYCLE_COMPLETION_VERSION,
|
|
172
|
+
})}\n`);
|
|
173
|
+
await publish(directory, name(invocation.id, "evidence"), `${canonical({
|
|
174
|
+
completion: evidence,
|
|
175
|
+
deployment_instance_digest: deploymentInstanceDigest,
|
|
176
|
+
version: "spawnfile.lifecycle-evidence.v1",
|
|
177
|
+
})}\n`);
|
|
178
|
+
};
|
|
179
|
+
export const findLifecycleOutcomeEvidence = async (raw) => {
|
|
180
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
181
|
+
await root();
|
|
182
|
+
await exactAdmission(invocation);
|
|
183
|
+
const text = await readSettledLifecycleRecord(evidencePath(invocation.id), read);
|
|
184
|
+
if (text === null)
|
|
185
|
+
return null;
|
|
186
|
+
const rawEvidence = JSON.parse(text);
|
|
187
|
+
if (rawEvidence.version !== "spawnfile.lifecycle-evidence.v1" ||
|
|
188
|
+
typeof rawEvidence.deployment_instance_digest !== "string")
|
|
189
|
+
fail("invalid outcome evidence");
|
|
190
|
+
const deploymentInstanceDigest = rawEvidence.deployment_instance_digest;
|
|
191
|
+
const evidence = parseLifecycleCompletion(`${canonical(rawEvidence.completion)}\n`);
|
|
192
|
+
if (`${canonical(rawEvidence)}\n` !== text ||
|
|
193
|
+
canonical(evidence.invocation) !== canonical(invocation))
|
|
194
|
+
fail("invocation id drift");
|
|
195
|
+
return {
|
|
196
|
+
completion: evidence,
|
|
197
|
+
deployment_instance_digest: deploymentInstanceDigest,
|
|
198
|
+
};
|
|
199
|
+
};
|
|
200
|
+
export const completeLifecycleInvocation = async (raw, outcomeBytes, capability) => {
|
|
201
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
202
|
+
const directory = await root();
|
|
203
|
+
await assertActiveCapability(invocation, capability);
|
|
204
|
+
const completion = parseLifecycleCompletion(`${canonical({ invocation, outcome_bytes: outcomeBytes, version: LIFECYCLE_COMPLETION_VERSION })}\n`);
|
|
205
|
+
await publish(directory, name(invocation.id, "completion"), `${canonical({
|
|
206
|
+
completion,
|
|
207
|
+
status: "completed",
|
|
208
|
+
version: LIFECYCLE_TERMINAL_VERSION,
|
|
209
|
+
})}\n`);
|
|
210
|
+
const stored = await exactCompletion(invocation);
|
|
211
|
+
if (!stored)
|
|
212
|
+
fail("missing completion");
|
|
213
|
+
return parseLifecycleCompletion(`${canonical(stored)}\n`);
|
|
214
|
+
};
|
|
215
|
+
export const markLifecycleAmbiguous = async (raw, reasonCode, capability) => {
|
|
216
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
217
|
+
const directory = await root();
|
|
218
|
+
await markLifecycleAmbiguousRecord(invocation, reasonCode, capability, {
|
|
219
|
+
exactAdmission,
|
|
220
|
+
exactCompletion,
|
|
221
|
+
publish: (value, kind, content) => publish(directory, name(value.id, kind), content),
|
|
222
|
+
readRecovery: (value) => readSettledLifecycleRecord(recoveryPath(value.id), read),
|
|
223
|
+
readHeartbeat: async (value) => {
|
|
224
|
+
const text = await readSettledLifecycleRecord(heartbeatPath(value.id), read);
|
|
225
|
+
return text ? parseLifecycleHeartbeat(text) : null;
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
export const lookupLifecycleCompletion = (id) => lookupLifecycleCompletionRecord(id, {
|
|
230
|
+
admissionPath,
|
|
231
|
+
completionPath: resolveLifecycleCompletionPath,
|
|
232
|
+
existingRoot,
|
|
233
|
+
heartbeatPath,
|
|
234
|
+
read: (file) => readSettledLifecycleRecord(file, read),
|
|
235
|
+
recoveryPath,
|
|
236
|
+
});
|