spawnfile 0.1.13 → 0.1.17
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 +61 -121
- 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/importers.d.ts +10 -0
- package/dist/auth/importers.js +29 -4
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/paths.d.ts +12 -1
- package/dist/auth/paths.js +21 -0
- package/dist/auth/profileStore.js +9 -9
- package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
- package/dist/auth/targetSecretSourceAuthor.js +52 -0
- package/dist/auth/targetSecretSourceFsIdentity.d.ts +40 -0
- package/dist/auth/targetSecretSourceFsIdentity.js +42 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +17 -0
- package/dist/auth/targetSecretSourceFsPublish.js +51 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +17 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +468 -0
- package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
- package/dist/auth/targetSecretSourceFsRead.js +189 -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/auth/trainingAuth.d.ts +21 -0
- package/dist/auth/trainingAuth.js +86 -0
- package/dist/auth/types.d.ts +1 -1
- 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 +230 -0
- 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.d.ts +3 -0
- package/dist/cli/compileBuildCommands.js +48 -0
- package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
- package/dist/cli/composedLifecycleContractSet.js +204 -0
- package/dist/cli/containerBundleCommand.d.ts +6 -0
- package/dist/cli/containerBundleCommand.js +116 -0
- package/dist/cli/devCommands.js +2 -0
- package/dist/cli/downCommand.d.ts +25 -0
- package/dist/cli/downCommand.js +145 -0
- package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
- package/dist/cli/evidenceExportHelperCommand.js +51 -0
- package/dist/cli/index.js +15 -3
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +11 -181
- package/dist/cli/lifecycleMachine.d.ts +25 -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/paideiaDelegation.d.ts +17 -0
- package/dist/cli/paideiaDelegation.js +210 -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/runCli.d.ts +19 -2
- package/dist/cli/runCli.js +58 -74
- package/dist/cli/runPublishCommands.d.ts +3 -0
- package/dist/cli/runPublishCommands.js +70 -0
- package/dist/cli/statusCommand.d.ts +3 -33
- package/dist/cli/statusCommand.js +19 -249
- 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 +30 -0
- package/dist/cli/targetCommands.js +227 -0
- package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
- package/dist/cli/targetComposedPreparationCommand.js +39 -0
- 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/targetDefaultArtifactAuthority.d.ts +5 -0
- package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +55 -0
- package/dist/cli/targetDefaultAuthorities.js +213 -0
- package/dist/cli/targetDefaultConfig.d.ts +75 -0
- package/dist/cli/targetDefaultConfig.js +334 -0
- package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
- package/dist/cli/targetDefaultConfigStdin.js +221 -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 +268 -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/targetProductionCommands.d.ts +5 -0
- package/dist/cli/targetProductionCommands.js +45 -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/targetWorldReadinessCommand.d.ts +10 -0
- package/dist/cli/targetWorldReadinessCommand.js +43 -0
- package/dist/cli/trainCommand.d.ts +3 -0
- package/dist/cli/trainCommand.js +61 -0
- package/dist/cli/upCommand.d.ts +3 -0
- package/dist/cli/upCommand.js +162 -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 +197 -0
- 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/workspaceResourceMigrationCommand.d.ts +8 -0
- package/dist/cli/workspaceResourceMigrationCommand.js +36 -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 +2 -1
- package/dist/compiler/buildCompilePlanTeams.js +9 -1
- package/dist/compiler/buildCompilePlanTraversal.js +75 -82
- package/dist/compiler/buildProject.d.ts +11 -0
- package/dist/compiler/buildProject.js +77 -2
- package/dist/compiler/compilePlanHelpers.js +5 -0
- package/dist/compiler/compileProject.d.ts +15 -0
- package/dist/compiler/compileProject.js +31 -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/compileProjectSupport.js +9 -0
- package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
- package/dist/compiler/containerArtifactSummaries.js +138 -0
- package/dist/compiler/containerArtifacts.d.ts +12 -0
- package/dist/compiler/containerArtifacts.js +180 -127
- package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
- package/dist/compiler/containerArtifactsPlans.js +54 -124
- package/dist/compiler/containerArtifactsRender.d.ts +5 -2
- package/dist/compiler/containerArtifactsRender.js +106 -70
- package/dist/compiler/containerArtifactsTypes.d.ts +20 -0
- package/dist/compiler/containerBackedMountRender.d.ts +56 -0
- package/dist/compiler/containerBackedMountRender.js +101 -0
- package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
- package/dist/compiler/containerConfigEnvRender.js +54 -0
- package/dist/compiler/containerDaimonBrokerRender.d.ts +112 -0
- package/dist/compiler/containerDaimonBrokerRender.js +191 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +108 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +172 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.js +268 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +12 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.js +191 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.js +297 -0
- package/dist/compiler/containerEntrypointRender.d.ts +8 -0
- package/dist/compiler/containerEntrypointRender.js +82 -72
- 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/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/containerTargetPlanResolution.d.ts +20 -0
- package/dist/compiler/containerTargetPlanResolution.js +97 -0
- package/dist/compiler/containerTargetResources.d.ts +22 -1
- package/dist/compiler/containerTargetResources.js +94 -2
- package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
- package/dist/compiler/containerVolumeBootstrap.js +3 -0
- package/dist/compiler/containerWorkspaceResourceRender.js +49 -1
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
- package/dist/compiler/daimonTelemetryArtifacts.js +56 -0
- package/dist/compiler/deploymentLineage.d.ts +40 -0
- package/dist/compiler/deploymentLineage.js +50 -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 +7 -0
- package/dist/compiler/index.js +7 -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/memoryArtifacts.d.ts +26 -0
- package/dist/compiler/memoryArtifacts.js +210 -0
- package/dist/compiler/memoryResolution.d.ts +4 -0
- package/dist/compiler/memoryResolution.js +147 -0
- package/dist/compiler/modelEnv.d.ts +7 -0
- package/dist/compiler/modelEnv.js +13 -1
- package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
- package/dist/compiler/moltnetArtifactPaths.d.ts +31 -0
- package/dist/compiler/moltnetArtifactPaths.js +51 -0
- package/dist/compiler/moltnetArtifactTypes.d.ts +56 -0
- package/dist/compiler/moltnetArtifactTypes.js +1 -0
- package/dist/compiler/moltnetArtifacts.d.ts +3 -41
- package/dist/compiler/moltnetArtifacts.js +87 -101
- package/dist/compiler/moltnetBinaries.d.ts +33 -4
- package/dist/compiler/moltnetBinaries.js +173 -26
- package/dist/compiler/moltnetClientConfig.js +7 -2
- package/dist/compiler/moltnetConfigLowering.d.ts +18 -1
- package/dist/compiler/moltnetConfigLowering.js +92 -6
- 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 +40 -0
- package/dist/compiler/moltnetReleaseAuthority.js +102 -0
- package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
- package/dist/compiler/moltnetReleaseDownload.js +85 -0
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +2 -1
- package/dist/compiler/moltnetRepresentativeResolution.js +17 -3
- package/dist/compiler/moltnetResolution.js +67 -21
- package/dist/compiler/moltnetRoomMemberships.js +52 -9
- 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.d.ts +9 -0
- package/dist/compiler/moltnetServerPlans.js +151 -0
- package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
- package/dist/compiler/organizationExternalParticipants.js +176 -0
- package/dist/compiler/organizationIdentity.d.ts +21 -0
- package/dist/compiler/organizationIdentity.js +64 -0
- package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
- package/dist/compiler/organizationIdentityGraph.js +115 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +57 -0
- package/dist/compiler/organizationReadyEvidence.js +281 -0
- package/dist/compiler/projectManifestGraph.d.ts +4 -0
- package/dist/compiler/projectManifestGraph.js +24 -0
- package/dist/compiler/runProject.d.ts +8 -2
- package/dist/compiler/runProject.js +62 -27
- package/dist/compiler/runProjectAuth.d.ts +10 -2
- package/dist/compiler/runProjectAuth.js +105 -11
- package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
- package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
- package/dist/compiler/runProjectDocker.d.ts +11 -0
- package/dist/compiler/runProjectDocker.js +64 -16
- 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.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/training/broker/declaration.d.ts +45 -0
- package/dist/compiler/training/broker/declaration.js +55 -0
- package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
- package/dist/compiler/training/broker/entrypoint.js +111 -0
- package/dist/compiler/training/broker/index.d.ts +10 -0
- package/dist/compiler/training/broker/index.js +10 -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 +196 -0
- package/dist/compiler/training/broker/paths.js +241 -0
- package/dist/compiler/training/broker/processes.d.ts +42 -0
- package/dist/compiler/training/broker/processes.js +99 -0
- package/dist/compiler/training/broker/projection.d.ts +51 -0
- package/dist/compiler/training/broker/projection.js +76 -0
- package/dist/compiler/training/broker/provisioning.d.ts +87 -0
- package/dist/compiler/training/broker/provisioning.js +213 -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 +41 -0
- package/dist/compiler/training/broker/registration.js +102 -0
- package/dist/compiler/training/broker/runtime.d.ts +25 -0
- package/dist/compiler/training/broker/runtime.js +173 -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 +109 -0
- package/dist/compiler/training/broker/supervisor.js +173 -0
- package/dist/compiler/training/container/contract.d.ts +31 -0
- package/dist/compiler/training/container/contract.js +33 -0
- package/dist/compiler/training/container/index.d.ts +4 -0
- package/dist/compiler/training/container/index.js +2 -0
- package/dist/compiler/training/container/launch.d.ts +18 -0
- package/dist/compiler/training/container/launch.js +173 -0
- package/dist/compiler/training/container/prepare.d.ts +8 -0
- package/dist/compiler/training/container/prepare.js +80 -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 +36 -0
- package/dist/compiler/training/container/security.js +58 -0
- package/dist/compiler/training/context.d.ts +7 -0
- package/dist/compiler/training/context.js +93 -0
- package/dist/compiler/training/contract.d.ts +142 -0
- package/dist/compiler/training/contract.js +34 -0
- package/dist/compiler/training/index.d.ts +4 -0
- package/dist/compiler/training/index.js +3 -0
- package/dist/compiler/training/preparation/assets/Dockerfile +98 -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 +43 -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 +182 -0
- package/dist/compiler/training/preparation/contract.js +94 -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 +25 -0
- package/dist/compiler/training/preparation/files.js +85 -0
- package/dist/compiler/training/preparation/image.d.ts +28 -0
- package/dist/compiler/training/preparation/image.js +102 -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 +23 -0
- package/dist/compiler/training/preparation/inputs.js +93 -0
- package/dist/compiler/training/preparation/prepare.d.ts +33 -0
- package/dist/compiler/training/preparation/prepare.js +186 -0
- package/dist/compiler/training/preparation/scratch.d.ts +19 -0
- package/dist/compiler/training/preparation/scratch.js +48 -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 +506 -0
- package/dist/compiler/training/repair/contract.js +31 -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 +230 -0
- package/dist/compiler/training/repair/prepare.js +74 -0
- package/dist/compiler/training/repair/witness.d.ts +203 -0
- package/dist/compiler/training/repair/witness.js +42 -0
- package/dist/compiler/types.d.ts +84 -1
- package/dist/compiler/upProject.d.ts +31 -1
- package/dist/compiler/upProject.js +197 -22
- package/dist/compiler/upProjectHandoff.d.ts +62 -0
- package/dist/compiler/upProjectHandoff.js +204 -0
- package/dist/compiler/upReceipt.d.ts +36 -0
- package/dist/compiler/upReceipt.js +127 -0
- package/dist/compiler/updateProjectModels.js +43 -60
- package/dist/compiler/updateProjectRuntime.js +22 -35
- package/dist/compiler/updateProjectSurfaces.js +53 -47
- package/dist/compiler/view/types.d.ts +1 -1
- package/dist/compiler/workspaceBundleArtifacts.d.ts +3 -0
- package/dist/compiler/workspaceBundleArtifacts.js +106 -0
- package/dist/compiler/workspaceResources.d.ts +4 -1
- package/dist/compiler/workspaceResources.js +12 -7
- 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 +185 -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/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/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 +5 -10
- package/dist/deployment/dockerManager.d.ts +51 -0
- package/dist/deployment/dockerManager.js +124 -1
- package/dist/deployment/dockerProbeGateway.d.ts +17 -0
- package/dist/deployment/dockerProbeGateway.js +80 -6
- package/dist/deployment/dockerRecover.js +9 -1
- package/dist/deployment/dockerTeardown.d.ts +32 -0
- package/dist/deployment/dockerTeardown.js +61 -0
- package/dist/deployment/downDeployment.d.ts +39 -0
- package/dist/deployment/downDeployment.js +248 -0
- package/dist/deployment/downReceiptTypes.d.ts +36 -0
- package/dist/deployment/downReceiptTypes.js +45 -0
- package/dist/deployment/index.d.ts +20 -0
- package/dist/deployment/index.js +21 -0
- package/dist/deployment/lifecycleCompletion.d.ts +37 -0
- package/dist/deployment/lifecycleCompletion.js +236 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +224 -0
- package/dist/deployment/lifecycleCompletionContracts.js +140 -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 +12 -0
- package/dist/deployment/lifecycleCompletionPaths.js +19 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +7 -0
- package/dist/deployment/lifecycleCompletionPublication.js +49 -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/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.d.ts +17 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +187 -0
- package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
- package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +431 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
- package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +355 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.js +149 -0
- package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
- package/dist/deployment/organizationHandoffTypes.js +80 -0
- package/dist/deployment/organizationReady.d.ts +54 -0
- package/dist/deployment/organizationReady.js +232 -0
- package/dist/deployment/privateArtifactsExport.d.ts +18 -0
- package/dist/deployment/privateArtifactsExport.js +80 -0
- package/dist/deployment/productStateClone.d.ts +43 -0
- package/dist/deployment/productStateClone.js +319 -0
- package/dist/deployment/record.d.ts +26 -1
- package/dist/deployment/record.js +49 -4
- package/dist/deployment/target.d.ts +1 -35
- package/dist/deployment/target.js +1 -96
- package/dist/deployment/upLifecycleRecoveryState.d.ts +23 -0
- package/dist/deployment/upLifecycleRecoveryState.js +12 -0
- package/dist/deployment/upReceiptTypes.d.ts +137 -0
- package/dist/deployment/upReceiptTypes.js +191 -0
- 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 +24 -9
- package/dist/distribution/buildDistributionReport.d.ts +2 -1
- package/dist/distribution/buildDistributionReport.js +2 -1
- package/dist/distribution/consumeImage.d.ts +2 -0
- package/dist/distribution/consumeImage.js +98 -73
- package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
- package/dist/distribution/consumeImageDaimonDocker.js +45 -0
- package/dist/distribution/consumeImageLifecycle.d.ts +17 -0
- package/dist/distribution/consumeImageLifecycle.js +231 -0
- package/dist/distribution/consumeImageSupport.d.ts +12 -0
- package/dist/distribution/consumeImageSupport.js +15 -0
- package/dist/distribution/distributionReportSchema.d.ts +16 -1
- package/dist/distribution/distributionReportSchema.js +21 -3
- 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 +3 -3
- package/dist/distribution/index.js +2 -2
- package/dist/distribution/preflight.js +5 -1
- package/dist/distribution/types.d.ts +21 -1
- package/dist/distribution/types.js +4 -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/io.d.ts +2 -0
- package/dist/filesystem/io.js +16 -1
- 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/executionSchemas.d.ts +27 -0
- package/dist/manifest/executionSchemas.js +21 -2
- 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 +18 -0
- package/dist/manifest/mcpSchemas.js +44 -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 +20 -2
- package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
- package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
- package/dist/manifest/renderSpawnfileWorkspace.js +5 -0
- package/dist/manifest/scheduleSchemas.d.ts +3 -1
- package/dist/manifest/scheduleSchemas.js +91 -5
- package/dist/manifest/schemas.d.ts +2034 -40
- package/dist/manifest/schemas.js +82 -33
- package/dist/manifest/surfaceSchemas.d.ts +17 -0
- package/dist/manifest/surfaceSchemas.js +24 -1
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +6 -2
- package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
- package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
- package/dist/manifest/teamNetworkSchemas.d.ts +25 -190
- package/dist/manifest/teamNetworkSchemas.js +21 -317
- package/dist/manifest/teamNetworkServerSchemas.d.ts +155 -0
- package/dist/manifest/teamNetworkServerSchemas.js +215 -0
- package/dist/manifest/workspaceSchemas.d.ts +16 -0
- package/dist/manifest/workspaceSchemas.js +11 -0
- package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
- package/dist/ownership/siblingBuildFreshness.js +20 -0
- package/dist/report/types.d.ts +173 -1
- package/dist/runtime/common.d.ts +63 -1
- package/dist/runtime/common.js +88 -3
- package/dist/runtime/container.d.ts +28 -1
- package/dist/runtime/container.js +78 -29
- package/dist/runtime/containerPackageOverrides.d.ts +37 -0
- package/dist/runtime/containerPackageOverrides.js +33 -0
- package/dist/runtime/daimon/adapter.d.ts +14 -0
- package/dist/runtime/daimon/adapter.js +243 -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 +25 -0
- package/dist/runtime/daimon/config.js +272 -0
- package/dist/runtime/daimon/contractManifest.d.ts +295 -0
- package/dist/runtime/daimon/contractManifest.js +319 -0
- package/dist/runtime/daimon/grokModel.d.ts +19 -0
- package/dist/runtime/daimon/grokModel.js +33 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +26 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.js +36 -0
- package/dist/runtime/daimon/grokWorkerContract.d.ts +22 -0
- package/dist/runtime/daimon/grokWorkerContract.js +48 -0
- package/dist/runtime/daimon/memory.d.ts +57 -0
- package/dist/runtime/daimon/memory.js +125 -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 +3 -0
- package/dist/runtime/daimon/scheduleAuthority.js +17 -0
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.js +6 -0
- package/dist/runtime/install.d.ts +3 -0
- package/dist/runtime/install.js +3 -0
- package/dist/runtime/localDaimonAuthority.d.ts +11 -0
- package/dist/runtime/localDaimonAuthority.js +77 -0
- package/dist/runtime/mnemeMcp.d.ts +28 -0
- package/dist/runtime/mnemeMcp.js +135 -0
- package/dist/runtime/openclaw/adapter.js +17 -6
- 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 +1 -2
- package/dist/runtime/pi/adapter.js +87 -58
- package/dist/runtime/pi/appActivitySource.js +114 -2
- 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 -1
- package/dist/runtime/pi/appCoreSource.js +104 -214
- package/dist/runtime/pi/appPreludeSource.js +140 -52
- package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
- package/dist/runtime/pi/appScheduleSource.js +84 -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 -1
- package/dist/runtime/pi/appSource.js +6 -2
- package/dist/runtime/pi/appTemplate.d.ts +8 -22
- package/dist/runtime/pi/appTemplate.js +9 -126
- 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.js +126 -9
- package/dist/runtime/pi/testHelpers.d.ts +2 -0
- package/dist/runtime/pi/testHelpers.js +40 -0
- package/dist/runtime/picoclaw/adapter.js +25 -29
- 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.d.ts +3 -0
- package/dist/runtime/registry.js +19 -2
- package/dist/runtime/scheduleUtils.d.ts +3 -0
- package/dist/runtime/scheduleUtils.js +19 -0
- package/dist/runtime/types.d.ts +50 -2
- package/dist/runtime/usageLedger.d.ts +158 -0
- package/dist/runtime/usageLedger.js +269 -0
- package/dist/runtime/usageLedgerRead.d.ts +48 -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/errors.d.ts +1 -1
- package/dist/shared/errors.js +2 -2
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.js +3 -0
- package/dist/shared/redaction.d.ts +2 -0
- package/dist/shared/redaction.js +10 -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/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/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/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 +476 -0
- package/dist/target/dockerBaseImage.d.ts +2 -0
- package/dist/target/dockerBaseImage.js +11 -0
- package/dist/target/dockerCommandExecutor.d.ts +38 -0
- package/dist/target/dockerCommandExecutor.js +251 -0
- package/dist/target/dockerCommandExecutorCore.d.ts +35 -0
- package/dist/target/dockerCommandExecutorCore.js +275 -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 +83 -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 +53 -0
- package/dist/target/dockerTarget.js +48 -0
- package/dist/target/dockerTargetBinding.d.ts +13 -0
- package/dist/target/dockerTargetBinding.js +95 -0
- package/dist/target/dockerTargetExecFile.d.ts +19 -0
- package/dist/target/dockerTargetExecFile.js +194 -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 +64 -0
- package/dist/target/dockerWorldServiceProvider.js +330 -0
- package/dist/target/dockerWorldServiceStore.d.ts +73 -0
- package/dist/target/dockerWorldServiceStore.js +367 -0
- package/dist/target/evidenceExport.d.ts +57 -0
- package/dist/target/evidenceExport.js +527 -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 +87 -0
- package/dist/target/evidenceExportProvider.js +197 -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 +72 -0
- package/dist/target/publicArtifactSnapshot.js +184 -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/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 +21 -0
- package/package.json +57 -14
- package/runtimes.yaml +11 -23
- 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
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import { execFile as execFileCallback } from "node:child_process";
|
|
2
2
|
import { promisify } from "node:util";
|
|
3
|
+
import { DAIMON_GROK_TURN_USAGE_LEDGER } from "../runtime/daimon/contractManifest.js";
|
|
3
4
|
import { dockerContextNameForTarget } from "./target.js";
|
|
4
5
|
const execFile = promisify(execFileCallback);
|
|
6
|
+
/**
|
|
7
|
+
* The ledger this gateway reads (`spawnfile usage`) rotates once a generation
|
|
8
|
+
* reaches `DAIMON_GROK_TURN_USAGE_LEDGER.rotateBytes`, and rotation happens on
|
|
9
|
+
* the append *after* that threshold is crossed — so a rotated generation is
|
|
10
|
+
* always at least the bound and the crossing line pushes it over. A maxBuffer
|
|
11
|
+
* merely equal to the bound therefore rejects the exact read this feature
|
|
12
|
+
* exists to perform (Node's `execFile` accepts a payload of exactly
|
|
13
|
+
* `maxBuffer` bytes and fails the next one with
|
|
14
|
+
* `ERR_CHILD_PROCESS_STDIO_MAXBUFFER`). Doubling the bound leaves a full
|
|
15
|
+
* generation of headroom, and is derived from the ledger constant rather than
|
|
16
|
+
* restated so the two cannot drift apart.
|
|
17
|
+
*/
|
|
18
|
+
export const DEFAULT_DOCKER_PROBE_MAX_BUFFER_BYTES = 2 * DAIMON_GROK_TURN_USAGE_LEDGER.rotateBytes;
|
|
5
19
|
const targetRefForUnit = (unit) => {
|
|
6
20
|
const targetRef = unit.container_id ?? unit.container_name;
|
|
7
21
|
if (!targetRef) {
|
|
@@ -19,26 +33,86 @@ const withDockerTarget = (record, args) => {
|
|
|
19
33
|
}
|
|
20
34
|
return args;
|
|
21
35
|
};
|
|
36
|
+
const imageRefForUnit = (unit) => unit.image_id
|
|
37
|
+
? (/^[a-f0-9]{64}$/u.test(unit.image_id) ? `sha256:${unit.image_id}` : unit.image_id)
|
|
38
|
+
: unit.image_tag;
|
|
39
|
+
const redactProbeText = (value, limit) => value
|
|
40
|
+
.replace(/\s+/gu, " ")
|
|
41
|
+
.replace(/(bearer|token|password|passwd|secret|authorization)[=: ]+(?:bearer[ ]+)?[^ ]+/giu, "$1=[redacted]")
|
|
42
|
+
.replace(/https?:\/\/[^ ]+/giu, "[url redacted]")
|
|
43
|
+
.slice(0, limit);
|
|
44
|
+
const boundedProbeFailure = (error) => {
|
|
45
|
+
if (!error || typeof error !== "object")
|
|
46
|
+
return redactProbeText(String(error), 240) || "probe failed";
|
|
47
|
+
const candidate = error;
|
|
48
|
+
const hasStatus = typeof candidate.status === "number" || typeof candidate.status === "string";
|
|
49
|
+
const hasCode = typeof candidate.code === "number" || typeof candidate.code === "string";
|
|
50
|
+
const status = hasStatus
|
|
51
|
+
? `status ${String(candidate.status)}`
|
|
52
|
+
: hasCode
|
|
53
|
+
? `exit ${String(candidate.code)}`
|
|
54
|
+
: "failed";
|
|
55
|
+
const stderr = typeof candidate.stderr === "string"
|
|
56
|
+
? redactProbeText(candidate.stderr, 240)
|
|
57
|
+
: "";
|
|
58
|
+
const message = typeof candidate.message === "string" ? redactProbeText(candidate.message, 160) : "";
|
|
59
|
+
if (error instanceof Error && !stderr)
|
|
60
|
+
return message || "probe failed";
|
|
61
|
+
if (stderr)
|
|
62
|
+
return `docker probe ${status}: ${stderr}`;
|
|
63
|
+
if (message)
|
|
64
|
+
return hasStatus || hasCode ? `docker probe ${status}: ${message}` : message;
|
|
65
|
+
return `docker probe ${status}`;
|
|
66
|
+
};
|
|
67
|
+
const parseCurlHttpOutput = (stdout) => {
|
|
68
|
+
const match = /\n(\d{3})$/u.exec(stdout);
|
|
69
|
+
if (!match || match.index === undefined) {
|
|
70
|
+
return { body: "", error: "malformed HTTP probe response", ok: false };
|
|
71
|
+
}
|
|
72
|
+
const status = Number(match[1]);
|
|
73
|
+
const body = stdout.slice(0, match.index);
|
|
74
|
+
return status >= 200 && status <= 299
|
|
75
|
+
? { body, ok: true }
|
|
76
|
+
: { body, error: `HTTP ${status}`, ok: false };
|
|
77
|
+
};
|
|
78
|
+
const httpProbeArgs = (targetRef, imageRef, url) => [
|
|
79
|
+
"run",
|
|
80
|
+
"--rm",
|
|
81
|
+
"--network",
|
|
82
|
+
`container:${targetRef}`,
|
|
83
|
+
"--entrypoint",
|
|
84
|
+
"curl",
|
|
85
|
+
imageRef,
|
|
86
|
+
"-sS",
|
|
87
|
+
"--output",
|
|
88
|
+
"-",
|
|
89
|
+
"--write-out",
|
|
90
|
+
"\\n%{http_code}",
|
|
91
|
+
url
|
|
92
|
+
];
|
|
22
93
|
export const createDockerProbeGateway = (record, unit, options) => {
|
|
23
94
|
const dockerCommand = options.dockerCommand ?? "docker";
|
|
24
95
|
const runExec = options.execFile ?? execFile;
|
|
25
96
|
const timeout = options.timeoutMs ?? 10_000;
|
|
97
|
+
const maxBuffer = options.maxBufferBytes ?? DEFAULT_DOCKER_PROBE_MAX_BUFFER_BYTES;
|
|
26
98
|
const exec = async (command) => {
|
|
27
99
|
const targetRef = targetRefForUnit(unit);
|
|
28
|
-
return runExec(dockerCommand, withDockerTarget(record, ["exec", targetRef, ...command]), { timeout });
|
|
100
|
+
return runExec(dockerCommand, withDockerTarget(record, ["exec", targetRef, ...command]), { maxBuffer, timeout });
|
|
29
101
|
};
|
|
30
102
|
return {
|
|
31
103
|
exec,
|
|
32
104
|
async httpGet(port, requestPath, headers = {}) {
|
|
105
|
+
if (Object.keys(headers).length > 0) {
|
|
106
|
+
return { body: "", error: "HTTP probe headers are forbidden", ok: false };
|
|
107
|
+
}
|
|
33
108
|
const url = `http://127.0.0.1:${port}${requestPath.startsWith("/") ? requestPath : `/${requestPath}`}`;
|
|
34
109
|
try {
|
|
35
|
-
const
|
|
36
|
-
const result = await
|
|
37
|
-
return
|
|
110
|
+
const targetRef = targetRefForUnit(unit);
|
|
111
|
+
const result = await runExec(dockerCommand, withDockerTarget(record, httpProbeArgs(targetRef, imageRefForUnit(unit), url)), { maxBuffer, timeout });
|
|
112
|
+
return parseCurlHttpOutput(result.stdout);
|
|
38
113
|
}
|
|
39
114
|
catch (error) {
|
|
40
|
-
|
|
41
|
-
return { body: "", error: message, ok: false };
|
|
115
|
+
return { body: "", error: boundedProbeFailure(error), ok: false };
|
|
42
116
|
}
|
|
43
117
|
},
|
|
44
118
|
async inspectUnit() {
|
|
@@ -62,6 +62,7 @@ const groupByDeployment = (inspections, options, target) => {
|
|
|
62
62
|
}
|
|
63
63
|
const name = deploymentNameFor(labels);
|
|
64
64
|
const compileFingerprint = labels[dockerDeploymentLabelKeys.compileFingerprint];
|
|
65
|
+
const runId = labels[dockerDeploymentLabelKeys.runId];
|
|
65
66
|
if (!name || !compileFingerprint) {
|
|
66
67
|
continue;
|
|
67
68
|
}
|
|
@@ -75,13 +76,20 @@ const groupByDeployment = (inspections, options, target) => {
|
|
|
75
76
|
}
|
|
76
77
|
seenUnits.add(unit.id);
|
|
77
78
|
unitsByDeployment.set(name, seenUnits);
|
|
78
|
-
const
|
|
79
|
+
const existing = records.get(name);
|
|
80
|
+
if (existing
|
|
81
|
+
&& (existing.compile_fingerprint !== compileFingerprint
|
|
82
|
+
|| existing.run_id !== runId)) {
|
|
83
|
+
throw new SpawnfileError("validation_error", `Recovered deployment "${name}" has inconsistent identity labels`);
|
|
84
|
+
}
|
|
85
|
+
const record = existing ?? {
|
|
79
86
|
auth_profile: null,
|
|
80
87
|
compile_fingerprint: compileFingerprint,
|
|
81
88
|
created_at: toStringOrNull(inspection.Created) ?? new Date().toISOString(),
|
|
82
89
|
manager: "docker",
|
|
83
90
|
name,
|
|
84
91
|
output_directory: options.outputDirectory,
|
|
92
|
+
...(runId ? { run_id: runId } : {}),
|
|
85
93
|
source: { kind: "project", root: options.sourceRoot },
|
|
86
94
|
target,
|
|
87
95
|
units: [],
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { DeploymentRecord } from "./record.js";
|
|
2
|
+
/** Same injectable exec shape as `artifactsExportDocker.ts`/`dockerInspect.ts` — real
|
|
3
|
+
* Docker calls are the default, tests inject a fake. */
|
|
4
|
+
export type DockerTeardownExecFile = (file: string, args: string[], options: {
|
|
5
|
+
timeout: number;
|
|
6
|
+
}) => Promise<{
|
|
7
|
+
stderr: string;
|
|
8
|
+
stdout: string;
|
|
9
|
+
}>;
|
|
10
|
+
export interface DockerTeardownRunnerOptions {
|
|
11
|
+
dockerCommand: string;
|
|
12
|
+
execFile: DockerTeardownExecFile;
|
|
13
|
+
timeoutMs: number;
|
|
14
|
+
}
|
|
15
|
+
export interface DockerRemovalOutcome {
|
|
16
|
+
error: string | null;
|
|
17
|
+
removed: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* `docker rm -f <containerRef>` — force-removes a container whether it is running or
|
|
21
|
+
* already stopped. A container Docker reports as already gone ("No such container")
|
|
22
|
+
* counts as removed: `spawnfile down` is idempotent (calling it twice, or after the
|
|
23
|
+
* container died on its own, is a success, not a partial failure).
|
|
24
|
+
*/
|
|
25
|
+
export declare const removeDockerContainer: (target: DeploymentRecord["target"], containerRef: string, options: DockerTeardownRunnerOptions) => Promise<DockerRemovalOutcome>;
|
|
26
|
+
/**
|
|
27
|
+
* `docker volume rm -f <volumeName>` — only called when the caller explicitly opts into
|
|
28
|
+
* volume removal (`spawnfile down --volumes`; the default is to retain volumes). A volume
|
|
29
|
+
* Docker reports as already gone ("No such volume") also counts as removed.
|
|
30
|
+
*/
|
|
31
|
+
export declare const removeDockerVolume: (target: DeploymentRecord["target"], volumeName: string, options: DockerTeardownRunnerOptions) => Promise<DockerRemovalOutcome>;
|
|
32
|
+
export declare const defaultDockerTeardownExecFile: DockerTeardownExecFile;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { execFile as execFileCallback } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { dockerContextNameForTarget } from "./target.js";
|
|
4
|
+
const execFile = promisify(execFileCallback);
|
|
5
|
+
const withDockerTarget = (target, args) => {
|
|
6
|
+
const context = dockerContextNameForTarget(target);
|
|
7
|
+
if (context) {
|
|
8
|
+
return ["--context", context, ...args];
|
|
9
|
+
}
|
|
10
|
+
if (target.kind === "host") {
|
|
11
|
+
return ["--host", target.value, ...args];
|
|
12
|
+
}
|
|
13
|
+
return args;
|
|
14
|
+
};
|
|
15
|
+
const toErrorMessage = (error) => {
|
|
16
|
+
if (typeof error === "object" && error !== null && "stderr" in error) {
|
|
17
|
+
const stderr = error.stderr;
|
|
18
|
+
if (typeof stderr === "string" && stderr.length > 0) {
|
|
19
|
+
return stderr.trim();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return error instanceof Error ? error.message : String(error);
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* `docker rm -f <containerRef>` — force-removes a container whether it is running or
|
|
26
|
+
* already stopped. A container Docker reports as already gone ("No such container")
|
|
27
|
+
* counts as removed: `spawnfile down` is idempotent (calling it twice, or after the
|
|
28
|
+
* container died on its own, is a success, not a partial failure).
|
|
29
|
+
*/
|
|
30
|
+
export const removeDockerContainer = async (target, containerRef, options) => {
|
|
31
|
+
try {
|
|
32
|
+
await options.execFile(options.dockerCommand, withDockerTarget(target, ["rm", "-f", containerRef]), { timeout: options.timeoutMs });
|
|
33
|
+
return { error: null, removed: true };
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
const message = toErrorMessage(error);
|
|
37
|
+
if (/No such container/i.test(message)) {
|
|
38
|
+
return { error: null, removed: true };
|
|
39
|
+
}
|
|
40
|
+
return { error: message, removed: false };
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* `docker volume rm -f <volumeName>` — only called when the caller explicitly opts into
|
|
45
|
+
* volume removal (`spawnfile down --volumes`; the default is to retain volumes). A volume
|
|
46
|
+
* Docker reports as already gone ("No such volume") also counts as removed.
|
|
47
|
+
*/
|
|
48
|
+
export const removeDockerVolume = async (target, volumeName, options) => {
|
|
49
|
+
try {
|
|
50
|
+
await options.execFile(options.dockerCommand, withDockerTarget(target, ["volume", "rm", "-f", volumeName]), { timeout: options.timeoutMs });
|
|
51
|
+
return { error: null, removed: true };
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
const message = toErrorMessage(error);
|
|
55
|
+
if (/No such volume/i.test(message)) {
|
|
56
|
+
return { error: null, removed: true };
|
|
57
|
+
}
|
|
58
|
+
return { error: message, removed: false };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
export const defaultDockerTeardownExecFile = execFile;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type DeploymentLifecycleCorrelation } from "./deploymentLifecycleCorrelation.js";
|
|
2
|
+
import { type DockerTeardownExecFile } from "./dockerTeardown.js";
|
|
3
|
+
import { type DownReceipt } from "./downReceiptTypes.js";
|
|
4
|
+
import type { DeploymentRecord } from "./record.js";
|
|
5
|
+
export interface DownDeploymentOptions {
|
|
6
|
+
/** Where the deployment record + compile report already live (the compile's own
|
|
7
|
+
* `--out` directory) — same convention as `exportRunArtifacts`'s `compiledOutputDirectory`. */
|
|
8
|
+
compiledOutputDirectory: string;
|
|
9
|
+
deploymentName: string;
|
|
10
|
+
dockerCommand?: string;
|
|
11
|
+
execFile?: DockerTeardownExecFile;
|
|
12
|
+
/** Auto-runs `spawnfile artifacts export` to this directory before tearing down, when
|
|
13
|
+
* this run has no export-index yet. Mutually satisfying with `force` — either one
|
|
14
|
+
* clears the export-before-teardown guard, `exportTo` by doing the export, `force` by
|
|
15
|
+
* deliberately skipping it. */
|
|
16
|
+
exportTo?: string;
|
|
17
|
+
/** Deliberately discards un-exported artifacts and proceeds without exporting. */
|
|
18
|
+
force?: boolean;
|
|
19
|
+
readerImage?: string;
|
|
20
|
+
/** Also removes this deployment's named volumes. Default: retain (see CLAUDE.md's
|
|
21
|
+
* folder rule — this is the only reversible-by-default lifecycle boundary spawnfile
|
|
22
|
+
* has: containers are cheap to recreate, the durable stores are not). */
|
|
23
|
+
removeVolumes?: boolean;
|
|
24
|
+
expectedLifecycleCorrelation?: DeploymentLifecycleCorrelation;
|
|
25
|
+
timeoutMs?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare const readCanonicalDownRecord: (compiledOutputDirectory: string, deploymentName: string) => Promise<{
|
|
28
|
+
mode: "image" | "project";
|
|
29
|
+
record: DeploymentRecord;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* `spawnfile down` — record-driven teardown: resolves the deployment record, enforces the
|
|
33
|
+
* export-before-teardown invariant, `docker rm -f`s every recorded container unit, and
|
|
34
|
+
* (only with `--volumes`) removes named volumes. Always returns a `spawnfile.down-
|
|
35
|
+
* receipt.v1`, even when some units/volumes failed to remove (`errors` carries the
|
|
36
|
+
* per-item failures; a partial failure is never silently swallowed, but it also never
|
|
37
|
+
* stops the rest of the teardown from being attempted).
|
|
38
|
+
*/
|
|
39
|
+
export declare const downDeployment: (options: DownDeploymentOptions) => Promise<DownReceipt>;
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileExists, readUtf8File } from "../filesystem/index.js";
|
|
3
|
+
import { derivePersistentMountVolumeName, parseDistributionReport } from "../distribution/index.js";
|
|
4
|
+
import { REPORT_FILENAME, SpawnfileError } from "../shared/index.js";
|
|
5
|
+
import { exportRunArtifacts } from "./artifactsExport.js";
|
|
6
|
+
import { assertDeploymentLifecycleCorrelation, } from "./deploymentLifecycleCorrelation.js";
|
|
7
|
+
import { defaultDockerTeardownExecFile, removeDockerContainer, removeDockerVolume, } from "./dockerTeardown.js";
|
|
8
|
+
import { DOWN_RECEIPT_VERSION } from "./downReceiptTypes.js";
|
|
9
|
+
import { initializeOrganizationHandoffAuthorityStore, } from "./organizationHandoffAuthorityStore.js";
|
|
10
|
+
import { readDeploymentRecordFromOutput } from "./record.js";
|
|
11
|
+
import { readHomeDeploymentRecord, readHomeDeploymentReport, resolveHomeRecordPath } from "./homeStore.js";
|
|
12
|
+
import { resolveDeploymentRecordPath } from "./names.js";
|
|
13
|
+
import { dockerContextNameForTarget } from "./target.js";
|
|
14
|
+
export const readCanonicalDownRecord = async (compiledOutputDirectory, deploymentName) => {
|
|
15
|
+
const projectPath = resolveDeploymentRecordPath(path.resolve(compiledOutputDirectory), deploymentName);
|
|
16
|
+
const homePath = resolveHomeRecordPath(deploymentName);
|
|
17
|
+
const [projectExists, homeExists] = await Promise.all([fileExists(projectPath), fileExists(homePath)]);
|
|
18
|
+
if (projectExists && homeExists)
|
|
19
|
+
throw new SpawnfileError("runtime_error", "Deployment record is ambiguous between project and image stores");
|
|
20
|
+
if (projectExists) {
|
|
21
|
+
const record = await readDeploymentRecordFromOutput(path.resolve(compiledOutputDirectory), deploymentName);
|
|
22
|
+
if (record.source.kind !== "project")
|
|
23
|
+
throw new SpawnfileError("runtime_error", "Project deployment store contains a non-project record");
|
|
24
|
+
return { mode: "project", record };
|
|
25
|
+
}
|
|
26
|
+
if (homeExists) {
|
|
27
|
+
const record = await readHomeDeploymentRecord(deploymentName);
|
|
28
|
+
if (record.source.kind !== "image")
|
|
29
|
+
throw new SpawnfileError("runtime_error", "Image deployment store contains a non-image record");
|
|
30
|
+
return { mode: "image", record };
|
|
31
|
+
}
|
|
32
|
+
throw new SpawnfileError("validation_error", `No recorded deployment named ${deploymentName}`);
|
|
33
|
+
};
|
|
34
|
+
const imageDown = async (record, options, runner) => {
|
|
35
|
+
if (record.source.kind !== "image" || record.units.length !== 1)
|
|
36
|
+
throw new SpawnfileError("runtime_error", "Image deployment record is invalid for teardown");
|
|
37
|
+
if (!record.export_index && !options.force)
|
|
38
|
+
throw new SpawnfileError("runtime_error", "Image deployment artifact export is unsupported; pass --force to discard unexported artifacts");
|
|
39
|
+
const unit = record.units[0];
|
|
40
|
+
if (!unit.container_id || !unit.image_id)
|
|
41
|
+
throw new SpawnfileError("runtime_error", "Image deployment has no exact recorded container or image identity");
|
|
42
|
+
const context = dockerContextNameForTarget(record.target);
|
|
43
|
+
const prefix = context ? ["--context", context] : record.target.kind === "host" ? ["--host", record.target.value] : [];
|
|
44
|
+
const inspected = await runner.execFile(runner.dockerCommand, [...prefix, "container", "inspect", "--format", "{{json .Id}}\n{{json .Name}}\n{{json .Image}}\n{{json .Config.Labels}}", unit.container_id], { timeout: runner.timeoutMs });
|
|
45
|
+
let identity;
|
|
46
|
+
try {
|
|
47
|
+
const [idLine, nameLine, imageLine, labelsLine, ...extra] = inspected.stdout.trim().split("\n");
|
|
48
|
+
if (!idLine || !nameLine || !imageLine || !labelsLine || extra.length)
|
|
49
|
+
throw new Error();
|
|
50
|
+
identity = { id: JSON.parse(idLine), imageId: JSON.parse(imageLine), name: JSON.parse(nameLine), labels: JSON.parse(labelsLine) };
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
throw new SpawnfileError("runtime_error", "Image deployment container identity is malformed");
|
|
54
|
+
}
|
|
55
|
+
if (identity.id !== unit.container_id || identity.name !== `/${unit.container_name}` || identity.imageId !== unit.image_id
|
|
56
|
+
|| identity.labels["com.spawnfile.deployment"] !== record.name
|
|
57
|
+
|| identity.labels["com.spawnfile.compile_fingerprint"] !== record.compile_fingerprint
|
|
58
|
+
|| identity.labels["com.spawnfile.unit"] !== unit.id) {
|
|
59
|
+
throw new SpawnfileError("runtime_error", "Image deployment container identity does not match its record");
|
|
60
|
+
}
|
|
61
|
+
let reportValue;
|
|
62
|
+
try {
|
|
63
|
+
reportValue = JSON.parse(await readHomeDeploymentReport(record.name));
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
67
|
+
throw new SpawnfileError("runtime_error", `Cached image distribution report is unreadable: ${reason}`);
|
|
68
|
+
}
|
|
69
|
+
const report = parseDistributionReport(reportValue, "cached image distribution report");
|
|
70
|
+
if (report.compile_fingerprint !== record.compile_fingerprint)
|
|
71
|
+
throw new SpawnfileError("runtime_error", "Cached image distribution report does not match its deployment record");
|
|
72
|
+
const { owned, skipped } = partitionDeclaredVolumes(report.persistent_mounts, (mount) => derivePersistentMountVolumeName(record.name, mount));
|
|
73
|
+
const volumes = [...owned, ...skipped].sort();
|
|
74
|
+
const removed = await removeDockerContainer(record.target, unit.container_id, runner);
|
|
75
|
+
if (!removed.removed)
|
|
76
|
+
return { deployment: record.name, errors: [`unable to remove container ${unit.container_id} (unit ${unit.id}): ${removed.error}`], retained_volumes: volumes, units_stopped: [], version: DOWN_RECEIPT_VERSION, ...(skipped.length > 0 ? { skipped_volumes: skipped } : {}) };
|
|
77
|
+
const errors = [], retained = [...skipped];
|
|
78
|
+
if (options.removeVolumes)
|
|
79
|
+
for (const volume of owned) {
|
|
80
|
+
const result = await removeDockerVolume(record.target, volume, runner);
|
|
81
|
+
if (!result.removed) {
|
|
82
|
+
errors.push(`unable to remove volume ${volume}: ${result.error}`);
|
|
83
|
+
retained.push(volume);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else
|
|
87
|
+
retained.push(...owned);
|
|
88
|
+
return { deployment: record.name, errors, retained_volumes: retained.sort(), units_stopped: [unit.id], version: DOWN_RECEIPT_VERSION, ...(skipped.length > 0 ? { skipped_volumes: skipped } : {}) };
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Splits the volumes a `--volumes` teardown found into the ones this deployment
|
|
92
|
+
* owns and the author-declared ones it shares with every other deployment of the
|
|
93
|
+
* project. See downReceiptTypes.ts for why the declared ones are never removed.
|
|
94
|
+
*/
|
|
95
|
+
const partitionDeclaredVolumes = (mounts, volumeNameOf) => {
|
|
96
|
+
const skipped = new Set();
|
|
97
|
+
const owned = new Set();
|
|
98
|
+
for (const mount of mounts) {
|
|
99
|
+
(mount.declared_volume_name?.trim() ? skipped : owned).add(volumeNameOf(mount));
|
|
100
|
+
}
|
|
101
|
+
// A name claimed by both is shared state, and the compiler already rejects that
|
|
102
|
+
// collision; fail safe here regardless by never removing it.
|
|
103
|
+
for (const name of skipped)
|
|
104
|
+
owned.delete(name);
|
|
105
|
+
return { owned: [...owned].sort(), skipped: [...skipped].sort() };
|
|
106
|
+
};
|
|
107
|
+
const targetRefForUnit = (unit) => unit.container_id ?? unit.container_name;
|
|
108
|
+
const readCompileReport = async (compiledOutputDirectory) => {
|
|
109
|
+
const reportPath = path.join(compiledOutputDirectory, REPORT_FILENAME);
|
|
110
|
+
if (!(await fileExists(reportPath))) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
return JSON.parse(await readUtf8File(reportPath));
|
|
114
|
+
};
|
|
115
|
+
const explainRefusal = (deploymentName) => `Deployment "${deploymentName}" has no export-index: its durable artifacts (moltnet ` +
|
|
116
|
+
"causal log, mneme bank ledgers, daimon telemetry) have not been exported yet, and " +
|
|
117
|
+
"`spawnfile down` would destroy the container they live in before anyone reads them. " +
|
|
118
|
+
`Run \`spawnfile artifacts export --deployment ${deploymentName} --out <dir>\` first, ` +
|
|
119
|
+
"or pass `--export-to <dir>` to export-then-down in one call, or `--force` to " +
|
|
120
|
+
"deliberately discard the un-exported artifacts.";
|
|
121
|
+
/** Enforces the export-before-teardown invariant (Decision 21): resolves whether this
|
|
122
|
+
* deployment's record already carries an `export_index` marker (stamped by
|
|
123
|
+
* `exportRunArtifacts` — see record.ts), and if not, either refuses, auto-exports, or
|
|
124
|
+
* (with `--force`) proceeds anyway. Returns the record `spawnfile down` should act on —
|
|
125
|
+
* re-read after an auto-export, since that call updates the record on disk. */
|
|
126
|
+
const ensureExported = async (record, options) => {
|
|
127
|
+
if (record.export_index || options.force) {
|
|
128
|
+
return record;
|
|
129
|
+
}
|
|
130
|
+
const exportTo = options.exportTo;
|
|
131
|
+
if (!exportTo) {
|
|
132
|
+
throw new SpawnfileError("runtime_error", explainRefusal(options.deploymentName));
|
|
133
|
+
}
|
|
134
|
+
await exportRunArtifacts({
|
|
135
|
+
compiledOutputDirectory: options.compiledOutputDirectory,
|
|
136
|
+
deploymentName: options.deploymentName,
|
|
137
|
+
destinationDirectory: exportTo,
|
|
138
|
+
dockerCommand: options.dockerCommand,
|
|
139
|
+
// Structurally identical exec-call shape as DockerArtifactExecFile (see
|
|
140
|
+
// artifactsExportDocker.ts) — forwarded so an injected fake/override execFile covers
|
|
141
|
+
// the auto-export step too, not just container/volume removal.
|
|
142
|
+
execFile: options.execFile,
|
|
143
|
+
readerImage: options.readerImage,
|
|
144
|
+
timeoutMs: options.timeoutMs,
|
|
145
|
+
});
|
|
146
|
+
return readDeploymentRecordFromOutput(options.compiledOutputDirectory, options.deploymentName);
|
|
147
|
+
};
|
|
148
|
+
const closeOrganizationHandoff = async (record) => {
|
|
149
|
+
const hasPublicHandoff = record.organization_handoff !== undefined;
|
|
150
|
+
const hasPrivateHandle = record.organization_handoff_handle !== undefined;
|
|
151
|
+
if (hasPublicHandoff !== hasPrivateHandle) {
|
|
152
|
+
throw new SpawnfileError("runtime_error", "Deployment organization handoff authority is incomplete; refusing teardown");
|
|
153
|
+
}
|
|
154
|
+
if (!hasPrivateHandle ||
|
|
155
|
+
record.organization_handoff === undefined ||
|
|
156
|
+
record.organization_handoff_handle === undefined)
|
|
157
|
+
return;
|
|
158
|
+
let authority;
|
|
159
|
+
let failed = false;
|
|
160
|
+
try {
|
|
161
|
+
authority = await initializeOrganizationHandoffAuthorityStore();
|
|
162
|
+
await authority.close({
|
|
163
|
+
expectedHandoff: record.organization_handoff,
|
|
164
|
+
organizationHandoffHandle: record.organization_handoff_handle,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
failed = true;
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
try {
|
|
172
|
+
await authority?.dispose();
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
failed = true;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (failed) {
|
|
179
|
+
throw new SpawnfileError("runtime_error", "Unable to close organization handoff authority before deployment teardown");
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* `spawnfile down` — record-driven teardown: resolves the deployment record, enforces the
|
|
184
|
+
* export-before-teardown invariant, `docker rm -f`s every recorded container unit, and
|
|
185
|
+
* (only with `--volumes`) removes named volumes. Always returns a `spawnfile.down-
|
|
186
|
+
* receipt.v1`, even when some units/volumes failed to remove (`errors` carries the
|
|
187
|
+
* per-item failures; a partial failure is never silently swallowed, but it also never
|
|
188
|
+
* stops the rest of the teardown from being attempted).
|
|
189
|
+
*/
|
|
190
|
+
export const downDeployment = async (options) => {
|
|
191
|
+
const compiledOutputDirectory = path.resolve(options.compiledOutputDirectory);
|
|
192
|
+
const dockerCommand = options.dockerCommand ?? "docker";
|
|
193
|
+
const execFileImpl = options.execFile ?? defaultDockerTeardownExecFile;
|
|
194
|
+
const timeoutMs = options.timeoutMs ?? 30_000;
|
|
195
|
+
const resolved = await readCanonicalDownRecord(compiledOutputDirectory, options.deploymentName);
|
|
196
|
+
const initialRecord = resolved.record;
|
|
197
|
+
assertDeploymentLifecycleCorrelation(initialRecord, options.expectedLifecycleCorrelation);
|
|
198
|
+
const runnerOptions = { dockerCommand, execFile: execFileImpl, timeoutMs };
|
|
199
|
+
if (resolved.mode === "image")
|
|
200
|
+
return imageDown(initialRecord, options, runnerOptions);
|
|
201
|
+
const record = await ensureExported(initialRecord, {
|
|
202
|
+
...options,
|
|
203
|
+
compiledOutputDirectory,
|
|
204
|
+
});
|
|
205
|
+
assertDeploymentLifecycleCorrelation(record, options.expectedLifecycleCorrelation);
|
|
206
|
+
await closeOrganizationHandoff(record);
|
|
207
|
+
const unitsStopped = [];
|
|
208
|
+
const errors = [];
|
|
209
|
+
for (const unit of record.units) {
|
|
210
|
+
const containerRef = targetRefForUnit(unit);
|
|
211
|
+
if (!containerRef) {
|
|
212
|
+
errors.push(`unit ${unit.id} has no recorded container id or name; nothing to remove`);
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
const outcome = await removeDockerContainer(record.target, containerRef, runnerOptions);
|
|
216
|
+
if (outcome.removed) {
|
|
217
|
+
unitsStopped.push(unit.id);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
errors.push(`unable to remove container ${containerRef} (unit ${unit.id}): ${outcome.error}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const report = await readCompileReport(compiledOutputDirectory);
|
|
224
|
+
const { owned, skipped } = partitionDeclaredVolumes(report?.container?.persistent_mounts ?? [], (mount) => mount.volume_name);
|
|
225
|
+
// Declared volumes are retained unconditionally: they are shared project
|
|
226
|
+
// state, not this deployment's, so `--volumes` must never destroy them.
|
|
227
|
+
const retainedVolumes = [...skipped];
|
|
228
|
+
if (options.removeVolumes) {
|
|
229
|
+
for (const volumeName of owned) {
|
|
230
|
+
const outcome = await removeDockerVolume(record.target, volumeName, runnerOptions);
|
|
231
|
+
if (!outcome.removed) {
|
|
232
|
+
errors.push(`unable to remove volume ${volumeName}: ${outcome.error}`);
|
|
233
|
+
retainedVolumes.push(volumeName);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
retainedVolumes.push(...owned);
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
deployment: record.name,
|
|
242
|
+
errors,
|
|
243
|
+
retained_volumes: retainedVolumes.sort(),
|
|
244
|
+
...(skipped.length > 0 ? { skipped_volumes: skipped } : {}),
|
|
245
|
+
units_stopped: unitsStopped.sort(),
|
|
246
|
+
version: DOWN_RECEIPT_VERSION,
|
|
247
|
+
};
|
|
248
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
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), survived an attempted
|
|
10
|
+
* `--volumes` removal that failed (surfaced in `errors`, not silently dropped), or
|
|
11
|
+
* were deliberately skipped as shared project state (`skipped_volumes`).
|
|
12
|
+
*
|
|
13
|
+
* `skipped_volumes` is the third outcome this contract originally could not express.
|
|
14
|
+
* An author-declared volume name (a workspace resource `name`, a
|
|
15
|
+
* `store.persistence.name`, a memory bank's `persistence.name`) is verbatim in every
|
|
16
|
+
* mode and every deployment, so it is NOT "this deployment's named volume" — a
|
|
17
|
+
* `down --volumes` of a dev or scratch deployment would otherwise destroy the
|
|
18
|
+
* production state that same name refers to, whenever production happens to be
|
|
19
|
+
* stopped (Docker only refuses a volume that is currently in use). Those volumes are
|
|
20
|
+
* skipped, listed here AND in `retained_volumes`, and removing one is a deliberate
|
|
21
|
+
* project-level act: `docker volume rm <name>`.
|
|
22
|
+
*
|
|
23
|
+
* The field is OMITTED when nothing was skipped, so every receipt that could be
|
|
24
|
+
* produced before this existed is still byte-identical.
|
|
25
|
+
*/
|
|
26
|
+
export declare const DOWN_RECEIPT_VERSION: "spawnfile.down-receipt.v1";
|
|
27
|
+
export declare const downReceiptSchema: z.ZodObject<{
|
|
28
|
+
version: z.ZodLiteral<"spawnfile.down-receipt.v1">;
|
|
29
|
+
deployment: z.ZodString;
|
|
30
|
+
units_stopped: z.ZodArray<z.ZodString>;
|
|
31
|
+
retained_volumes: z.ZodArray<z.ZodString>;
|
|
32
|
+
skipped_volumes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
33
|
+
errors: z.ZodArray<z.ZodString>;
|
|
34
|
+
}, z.core.$strict>;
|
|
35
|
+
export type DownReceipt = z.infer<typeof downReceiptSchema>;
|
|
36
|
+
export declare const parseDownReceipt: (raw: unknown) => DownReceipt;
|
|
@@ -0,0 +1,45 @@
|
|
|
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), survived an attempted
|
|
10
|
+
* `--volumes` removal that failed (surfaced in `errors`, not silently dropped), or
|
|
11
|
+
* were deliberately skipped as shared project state (`skipped_volumes`).
|
|
12
|
+
*
|
|
13
|
+
* `skipped_volumes` is the third outcome this contract originally could not express.
|
|
14
|
+
* An author-declared volume name (a workspace resource `name`, a
|
|
15
|
+
* `store.persistence.name`, a memory bank's `persistence.name`) is verbatim in every
|
|
16
|
+
* mode and every deployment, so it is NOT "this deployment's named volume" — a
|
|
17
|
+
* `down --volumes` of a dev or scratch deployment would otherwise destroy the
|
|
18
|
+
* production state that same name refers to, whenever production happens to be
|
|
19
|
+
* stopped (Docker only refuses a volume that is currently in use). Those volumes are
|
|
20
|
+
* skipped, listed here AND in `retained_volumes`, and removing one is a deliberate
|
|
21
|
+
* project-level act: `docker volume rm <name>`.
|
|
22
|
+
*
|
|
23
|
+
* The field is OMITTED when nothing was skipped, so every receipt that could be
|
|
24
|
+
* produced before this existed is still byte-identical.
|
|
25
|
+
*/
|
|
26
|
+
export const DOWN_RECEIPT_VERSION = "spawnfile.down-receipt.v1";
|
|
27
|
+
export const downReceiptSchema = z
|
|
28
|
+
.object({
|
|
29
|
+
version: z.literal(DOWN_RECEIPT_VERSION),
|
|
30
|
+
deployment: z.string().min(1),
|
|
31
|
+
units_stopped: z.array(z.string().min(1)),
|
|
32
|
+
retained_volumes: z.array(z.string().min(1)),
|
|
33
|
+
skipped_volumes: z.array(z.string().min(1)).optional(),
|
|
34
|
+
errors: z.array(z.string().min(1))
|
|
35
|
+
})
|
|
36
|
+
.strict();
|
|
37
|
+
export const parseDownReceipt = (raw) => {
|
|
38
|
+
const result = downReceiptSchema.safeParse(raw);
|
|
39
|
+
if (!result.success) {
|
|
40
|
+
throw new Error(`invalid ${DOWN_RECEIPT_VERSION}: ${result.error.issues
|
|
41
|
+
.map((issue) => `${issue.path.join(".") || "<root>"}: ${issue.message}`)
|
|
42
|
+
.join("; ")}`);
|
|
43
|
+
}
|
|
44
|
+
return result.data;
|
|
45
|
+
};
|
|
@@ -1,10 +1,30 @@
|
|
|
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";
|
|
7
|
+
export * from "./candidateDiagnostics.js";
|
|
1
8
|
export * from "./dockerLabels.js";
|
|
2
9
|
export * from "./dockerInspect.js";
|
|
3
10
|
export * from "./dockerLogs.js";
|
|
4
11
|
export * from "./dockerManager.js";
|
|
5
12
|
export * from "./dockerProbeGateway.js";
|
|
6
13
|
export * from "./dockerRecover.js";
|
|
14
|
+
export * from "./dockerTeardown.js";
|
|
15
|
+
export * from "./deploymentLifecycleCorrelation.js";
|
|
16
|
+
export * from "./downDeployment.js";
|
|
17
|
+
export * from "./downReceiptTypes.js";
|
|
7
18
|
export * from "./homeStore.js";
|
|
19
|
+
export * from "./lifecycleCompletion.js";
|
|
20
|
+
export * from "./lifecycleUpRecords.js";
|
|
8
21
|
export * from "./names.js";
|
|
22
|
+
export * from "./organizationHandoffTypes.js";
|
|
23
|
+
export * from "./organizationHandoffAuthorityTypes.js";
|
|
24
|
+
export * from "./organizationHandoffAuthorityStore.js";
|
|
25
|
+
export * from "./organizationReady.js";
|
|
26
|
+
export * from "./canaryCutover.js";
|
|
27
|
+
export * from "./productStateClone.js";
|
|
9
28
|
export * from "./record.js";
|
|
10
29
|
export * from "./target.js";
|
|
30
|
+
export * from "./upReceiptTypes.js";
|