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
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { lstat, mkdir, open, realpath } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { resolveSpawnfileHome } from "../auth/index.js";
|
|
5
|
+
import { failLifecycleStore } from "./lifecycleCompletionPaths.js";
|
|
6
|
+
const OWNER = process.getuid?.() ?? -1;
|
|
7
|
+
const authorities = new Map();
|
|
8
|
+
const chain = (value) => {
|
|
9
|
+
const parsed = path.parse(value);
|
|
10
|
+
const result = [parsed.root];
|
|
11
|
+
let current = parsed.root;
|
|
12
|
+
for (const part of value.slice(parsed.root.length).split(path.sep).filter(Boolean)) {
|
|
13
|
+
current = path.join(current, part);
|
|
14
|
+
result.push(current);
|
|
15
|
+
}
|
|
16
|
+
return result;
|
|
17
|
+
};
|
|
18
|
+
const isKnownDarwinAlias = async (value) => {
|
|
19
|
+
if (process.platform !== "darwin" || (value !== "/var" && value !== "/tmp"))
|
|
20
|
+
return false;
|
|
21
|
+
const resolved = await realpath(value).catch(() => "");
|
|
22
|
+
return resolved === (value === "/var" ? "/private/var" : "/private/tmp");
|
|
23
|
+
};
|
|
24
|
+
const validateConfiguredAliases = async (configuredHome, canonicalHome) => {
|
|
25
|
+
for (const value of chain(configuredHome)) {
|
|
26
|
+
const info = await lstat(value).catch(() => failLifecycleStore("unsafe root"));
|
|
27
|
+
if (info.isSymbolicLink()) {
|
|
28
|
+
if (info.uid !== 0 || (info.mode & 0o022) !== 0 || !(await isKnownDarwinAlias(value))) {
|
|
29
|
+
failLifecycleStore("unsafe root");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else if (!info.isDirectory()) {
|
|
33
|
+
failLifecycleStore("unsafe root");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if ((await realpath(configuredHome).catch(() => "")) !== canonicalHome) {
|
|
37
|
+
failLifecycleStore("root changed");
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const captureCanonicalChain = async (canonicalHome, root) => {
|
|
41
|
+
const identities = [];
|
|
42
|
+
for (const value of chain(root)) {
|
|
43
|
+
const info = await lstat(value).catch(() => failLifecycleStore("unsafe root"));
|
|
44
|
+
const writable = (info.mode & 0o022) !== 0;
|
|
45
|
+
const stickyRootTemp = info.uid === 0 && writable && (info.mode & 0o1000) !== 0;
|
|
46
|
+
if (!info.isDirectory() ||
|
|
47
|
+
info.isSymbolicLink() ||
|
|
48
|
+
(info.uid !== OWNER && info.uid !== 0) ||
|
|
49
|
+
(writable && !stickyRootTemp))
|
|
50
|
+
failLifecycleStore("unsafe root");
|
|
51
|
+
if ((value === canonicalHome || value === root) &&
|
|
52
|
+
(info.uid !== OWNER || (info.mode & 0o777) !== 0o700))
|
|
53
|
+
failLifecycleStore("unsafe root");
|
|
54
|
+
identities.push({ dev: info.dev, ino: info.ino, path: value });
|
|
55
|
+
}
|
|
56
|
+
return identities;
|
|
57
|
+
};
|
|
58
|
+
const revalidateIdentities = async (identities) => {
|
|
59
|
+
for (const expected of identities) {
|
|
60
|
+
const current = await lstat(expected.path).catch(() => failLifecycleStore("root changed"));
|
|
61
|
+
const writable = (current.mode & 0o022) !== 0;
|
|
62
|
+
const stickyRootTemp = current.uid === 0 && writable && (current.mode & 0o1000) !== 0;
|
|
63
|
+
if (!current.isDirectory() ||
|
|
64
|
+
current.isSymbolicLink() ||
|
|
65
|
+
(current.uid !== OWNER && current.uid !== 0) ||
|
|
66
|
+
(writable && !stickyRootTemp))
|
|
67
|
+
failLifecycleStore("unsafe root");
|
|
68
|
+
if (current.dev !== expected.dev || current.ino !== expected.ino) {
|
|
69
|
+
failLifecycleStore("root changed");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const captureSafeExistingChain = async (value) => {
|
|
74
|
+
const identities = [];
|
|
75
|
+
for (const current of chain(value)) {
|
|
76
|
+
const info = await lstat(current).catch(() => failLifecycleStore("unsafe root"));
|
|
77
|
+
const writable = (info.mode & 0o022) !== 0;
|
|
78
|
+
const stickyRootTemp = info.uid === 0 && writable && (info.mode & 0o1000) !== 0;
|
|
79
|
+
if (!info.isDirectory() ||
|
|
80
|
+
info.isSymbolicLink() ||
|
|
81
|
+
(info.uid !== OWNER && info.uid !== 0) ||
|
|
82
|
+
(writable && !stickyRootTemp))
|
|
83
|
+
failLifecycleStore("unsafe root");
|
|
84
|
+
identities.push({ dev: info.dev, ino: info.ino, path: current });
|
|
85
|
+
}
|
|
86
|
+
return identities;
|
|
87
|
+
};
|
|
88
|
+
const resolveOrCreateConfiguredHome = async (configuredHome, create) => {
|
|
89
|
+
const logical = chain(configuredHome);
|
|
90
|
+
let existing = logical[0];
|
|
91
|
+
let missingAt = logical.length;
|
|
92
|
+
for (let index = 0; index < logical.length; index += 1) {
|
|
93
|
+
const current = logical[index];
|
|
94
|
+
let info;
|
|
95
|
+
try {
|
|
96
|
+
info = await lstat(current);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
if (error.code !== "ENOENT")
|
|
100
|
+
failLifecycleStore("unsafe root");
|
|
101
|
+
missingAt = index;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
if (info.isSymbolicLink()) {
|
|
105
|
+
if (info.uid !== 0 || (info.mode & 0o022) !== 0 || !(await isKnownDarwinAlias(current))) {
|
|
106
|
+
failLifecycleStore("unsafe root");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else if (!info.isDirectory()) {
|
|
110
|
+
failLifecycleStore("unsafe root");
|
|
111
|
+
}
|
|
112
|
+
existing = current;
|
|
113
|
+
}
|
|
114
|
+
if (missingAt === logical.length) {
|
|
115
|
+
return realpath(configuredHome).catch(() => failLifecycleStore("unsafe root"));
|
|
116
|
+
}
|
|
117
|
+
if (!create)
|
|
118
|
+
return null;
|
|
119
|
+
let canonicalParent = await realpath(existing).catch(() => failLifecycleStore("unsafe root"));
|
|
120
|
+
let identities = await captureSafeExistingChain(canonicalParent);
|
|
121
|
+
for (let index = missingAt; index < logical.length; index += 1) {
|
|
122
|
+
const name = path.basename(logical[index]);
|
|
123
|
+
const next = path.join(canonicalParent, name);
|
|
124
|
+
await revalidateIdentities(identities);
|
|
125
|
+
await mkdir(next, { mode: 0o700 }).catch((error) => {
|
|
126
|
+
if (error.code !== "EEXIST")
|
|
127
|
+
failLifecycleStore("unsafe root");
|
|
128
|
+
});
|
|
129
|
+
await revalidateIdentities(identities);
|
|
130
|
+
const created = await lstat(next).catch(() => failLifecycleStore("unsafe root"));
|
|
131
|
+
if (!created.isDirectory() ||
|
|
132
|
+
created.isSymbolicLink() ||
|
|
133
|
+
created.uid !== OWNER ||
|
|
134
|
+
(created.mode & 0o777) !== 0o700)
|
|
135
|
+
failLifecycleStore("unsafe root");
|
|
136
|
+
canonicalParent = next;
|
|
137
|
+
identities = [...identities, { dev: created.dev, ino: created.ino, path: next }];
|
|
138
|
+
}
|
|
139
|
+
return canonicalParent;
|
|
140
|
+
};
|
|
141
|
+
export const revalidateLifecycleRootAuthority = async (authority) => {
|
|
142
|
+
await validateConfiguredAliases(authority.configuredHome, authority.canonicalHome);
|
|
143
|
+
for (const expected of authority.identities) {
|
|
144
|
+
const current = await lstat(expected.path).catch(() => failLifecycleStore("root changed"));
|
|
145
|
+
const writable = (current.mode & 0o022) !== 0;
|
|
146
|
+
const stickyRootTemp = current.uid === 0 && writable && (current.mode & 0o1000) !== 0;
|
|
147
|
+
if (!current.isDirectory() ||
|
|
148
|
+
current.isSymbolicLink() ||
|
|
149
|
+
(current.uid !== OWNER && current.uid !== 0) ||
|
|
150
|
+
(writable && !stickyRootTemp) ||
|
|
151
|
+
((expected.path === authority.canonicalHome || expected.path === authority.root) &&
|
|
152
|
+
(current.uid !== OWNER || (current.mode & 0o777) !== 0o700)))
|
|
153
|
+
failLifecycleStore("unsafe root");
|
|
154
|
+
if (current.dev !== expected.dev || current.ino !== expected.ino) {
|
|
155
|
+
failLifecycleStore("root changed");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
export const validateLifecycleRoot = async (create) => {
|
|
160
|
+
const configuredHome = resolveSpawnfileHome();
|
|
161
|
+
const cached = authorities.get(configuredHome);
|
|
162
|
+
if (cached) {
|
|
163
|
+
await revalidateLifecycleRootAuthority(cached);
|
|
164
|
+
return cached;
|
|
165
|
+
}
|
|
166
|
+
const canonicalHome = await resolveOrCreateConfiguredHome(configuredHome, create);
|
|
167
|
+
if (canonicalHome === null)
|
|
168
|
+
return null;
|
|
169
|
+
await validateConfiguredAliases(configuredHome, canonicalHome);
|
|
170
|
+
const homeIdentities = await captureSafeExistingChain(canonicalHome);
|
|
171
|
+
const homeInfo = await lstat(canonicalHome).catch(() => failLifecycleStore("unsafe root"));
|
|
172
|
+
if (homeInfo.uid !== OWNER || (homeInfo.mode & 0o777) !== 0o700) {
|
|
173
|
+
failLifecycleStore("unsafe root");
|
|
174
|
+
}
|
|
175
|
+
const root = path.join(canonicalHome, "lifecycle-completions");
|
|
176
|
+
if (create) {
|
|
177
|
+
await revalidateIdentities(homeIdentities);
|
|
178
|
+
await mkdir(root, { mode: 0o700 }).catch((error) => {
|
|
179
|
+
if (error.code !== "EEXIST")
|
|
180
|
+
failLifecycleStore("unsafe root");
|
|
181
|
+
});
|
|
182
|
+
await revalidateIdentities(homeIdentities);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
try {
|
|
186
|
+
await lstat(root);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
if (error.code === "ENOENT")
|
|
190
|
+
return null;
|
|
191
|
+
failLifecycleStore("unsafe root");
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const authority = {
|
|
195
|
+
canonicalHome,
|
|
196
|
+
configuredHome,
|
|
197
|
+
identities: await captureCanonicalChain(canonicalHome, root),
|
|
198
|
+
root
|
|
199
|
+
};
|
|
200
|
+
const prior = authorities.get(configuredHome);
|
|
201
|
+
if (prior) {
|
|
202
|
+
await revalidateLifecycleRootAuthority(prior);
|
|
203
|
+
return prior;
|
|
204
|
+
}
|
|
205
|
+
authorities.set(configuredHome, authority);
|
|
206
|
+
return authority;
|
|
207
|
+
};
|
|
208
|
+
export const lifecycleRoot = async () => (await validateLifecycleRoot(true))?.root ?? failLifecycleStore("unsafe root");
|
|
209
|
+
export const existingLifecycleRoot = async () => (await validateLifecycleRoot(false))?.root ?? null;
|
|
210
|
+
export const requireLifecycleRootAuthority = async () => (await validateLifecycleRoot(true)) ?? failLifecycleStore("unsafe root");
|
|
211
|
+
export const openLifecycleAuthorityRoot = async (authority) => {
|
|
212
|
+
await revalidateLifecycleRootAuthority(authority);
|
|
213
|
+
const handle = await open(authority.root, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW).catch(() => failLifecycleStore("root changed"));
|
|
214
|
+
const expected = authority.identities.at(-1);
|
|
215
|
+
const info = await handle.stat();
|
|
216
|
+
if (info.dev !== expected.dev || info.ino !== expected.ino) {
|
|
217
|
+
await handle.close().catch(() => undefined);
|
|
218
|
+
failLifecycleStore("root changed");
|
|
219
|
+
}
|
|
220
|
+
return handle;
|
|
221
|
+
};
|
|
222
|
+
export const revalidateHeldLifecycleRoot = async (authority, handle) => {
|
|
223
|
+
const expected = authority.identities.at(-1);
|
|
224
|
+
const info = await handle.stat();
|
|
225
|
+
if (info.dev !== expected.dev || info.ino !== expected.ino)
|
|
226
|
+
failLifecycleStore("root changed");
|
|
227
|
+
await revalidateLifecycleRootAuthority(authority);
|
|
228
|
+
};
|
|
229
|
+
export const syncLifecycleDirectory = async (directory) => {
|
|
230
|
+
const authority = await requireLifecycleRootAuthority();
|
|
231
|
+
if (path.resolve(directory) !== authority.root)
|
|
232
|
+
failLifecycleStore("unsafe root");
|
|
233
|
+
const handle = await openLifecycleAuthorityRoot(authority);
|
|
234
|
+
try {
|
|
235
|
+
await revalidateHeldLifecycleRoot(authority, handle);
|
|
236
|
+
await handle.sync();
|
|
237
|
+
await revalidateHeldLifecycleRoot(authority, handle);
|
|
238
|
+
}
|
|
239
|
+
finally {
|
|
240
|
+
await handle.close();
|
|
241
|
+
}
|
|
242
|
+
await revalidateLifecycleRootAuthority(authority);
|
|
243
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { admissionPath, evidencePath, failLifecycleStore, heartbeatPath, lifecycleRecordName, planPath, recoveryPath, upCleanupPath, upReservationPath, upStartPath, resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath } from "./lifecycleCompletionPaths.js";
|
|
2
|
+
export { existingLifecycleRoot, lifecycleRoot, syncLifecycleDirectory } from "./lifecycleCompletionRoot.js";
|
|
3
|
+
export type LifecycleStoreTestHookPoint = "before_missing_return" | "before_record_open" | "before_publish_link" | "before_publish_temp_open" | "before_publish_unlink";
|
|
4
|
+
export declare const setLifecycleStoreTestHook: (hook: ((point: LifecycleStoreTestHookPoint) => Promise<void> | void) | null) => void;
|
|
5
|
+
export declare const readLifecycleRecord: (file: string, links?: readonly number[]) => Promise<string | null>;
|
|
6
|
+
export declare const publishLifecycleRecord: (directory: string, file: string, content: string, existing?: "ignore" | "match") => Promise<boolean>;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { link, lstat, open, unlink } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { LIFECYCLE_RECORD_MAX_BYTES } from "./lifecycleCompletionContracts.js";
|
|
6
|
+
import { failLifecycleStore, resolveLifecycleCompletionDirectory } from "./lifecycleCompletionPaths.js";
|
|
7
|
+
import { openLifecycleAuthorityRoot, requireLifecycleRootAuthority, revalidateHeldLifecycleRoot, revalidateLifecycleRootAuthority, syncLifecycleDirectory, validateLifecycleRoot } from "./lifecycleCompletionRoot.js";
|
|
8
|
+
import { matchesSettledLifecyclePublication, readSettledLifecycleRecord, settleLifecyclePublicationUntil } from "./lifecycleCompletionPublication.js";
|
|
9
|
+
export { admissionPath, evidencePath, failLifecycleStore, heartbeatPath, lifecycleRecordName, planPath, recoveryPath, upCleanupPath, upReservationPath, upStartPath, resolveLifecycleCompletionDirectory, resolveLifecycleCompletionPath } from "./lifecycleCompletionPaths.js";
|
|
10
|
+
export { existingLifecycleRoot, lifecycleRoot, syncLifecycleDirectory } from "./lifecycleCompletionRoot.js";
|
|
11
|
+
const OWNER = process.getuid?.() ?? -1;
|
|
12
|
+
let testHook = null;
|
|
13
|
+
export const setLifecycleStoreTestHook = (hook) => {
|
|
14
|
+
testHook = hook;
|
|
15
|
+
};
|
|
16
|
+
const runTestHook = async (point) => {
|
|
17
|
+
await testHook?.(point);
|
|
18
|
+
};
|
|
19
|
+
const canonicalRecordPath = (file, authority) => {
|
|
20
|
+
const directory = path.dirname(path.resolve(file));
|
|
21
|
+
const configuredRoot = resolveLifecycleCompletionDirectory();
|
|
22
|
+
if (directory !== authority.root && directory !== configuredRoot) {
|
|
23
|
+
failLifecycleStore("unsafe record");
|
|
24
|
+
}
|
|
25
|
+
const base = path.basename(file);
|
|
26
|
+
if (base.includes(path.sep) || base === "." || base === "..") {
|
|
27
|
+
failLifecycleStore("unsafe record");
|
|
28
|
+
}
|
|
29
|
+
return path.join(authority.root, base);
|
|
30
|
+
};
|
|
31
|
+
export const readLifecycleRecord = async (file, links = [1]) => {
|
|
32
|
+
const authority = await validateLifecycleRoot(false);
|
|
33
|
+
if (!authority)
|
|
34
|
+
return null;
|
|
35
|
+
await revalidateLifecycleRootAuthority(authority);
|
|
36
|
+
const exactFile = canonicalRecordPath(file, authority);
|
|
37
|
+
let before;
|
|
38
|
+
try {
|
|
39
|
+
before = await lstat(exactFile);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (error.code === "ENOENT") {
|
|
43
|
+
await runTestHook("before_missing_return");
|
|
44
|
+
await revalidateLifecycleRootAuthority(authority);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
failLifecycleStore("unsafe record");
|
|
48
|
+
}
|
|
49
|
+
if (!before.isFile() || before.isSymbolicLink() || before.uid !== OWNER ||
|
|
50
|
+
before.size > LIFECYCLE_RECORD_MAX_BYTES || (before.mode & 0o777) !== 0o600 ||
|
|
51
|
+
!links.includes(before.nlink)) {
|
|
52
|
+
failLifecycleStore("unsafe record");
|
|
53
|
+
}
|
|
54
|
+
await runTestHook("before_record_open");
|
|
55
|
+
await revalidateLifecycleRootAuthority(authority);
|
|
56
|
+
const handle = await open(exactFile, constants.O_RDONLY | constants.O_NOFOLLOW)
|
|
57
|
+
.catch(() => failLifecycleStore("unsafe record"));
|
|
58
|
+
try {
|
|
59
|
+
const info = await handle.stat();
|
|
60
|
+
if (!info.isFile() || info.uid !== OWNER || info.size > LIFECYCLE_RECORD_MAX_BYTES ||
|
|
61
|
+
(info.mode & 0o777) !== 0o600 || !links.includes(info.nlink)) {
|
|
62
|
+
failLifecycleStore("unsafe record");
|
|
63
|
+
}
|
|
64
|
+
if (before.dev !== info.dev || before.ino !== info.ino)
|
|
65
|
+
failLifecycleStore("record changed");
|
|
66
|
+
const content = await handle.readFile({ encoding: "utf8" });
|
|
67
|
+
const after = await lstat(exactFile).catch(() => failLifecycleStore("record changed"));
|
|
68
|
+
if (after.dev !== info.dev || after.ino !== info.ino)
|
|
69
|
+
failLifecycleStore("record changed");
|
|
70
|
+
await revalidateLifecycleRootAuthority(authority);
|
|
71
|
+
return content;
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
await handle.close().catch(() => undefined);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
export const publishLifecycleRecord = async (directory, file, content, existing = "match") => {
|
|
78
|
+
const authority = await requireLifecycleRootAuthority();
|
|
79
|
+
if (path.resolve(directory) !== authority.root)
|
|
80
|
+
failLifecycleStore("unsafe root");
|
|
81
|
+
const rootHandle = await openLifecycleAuthorityRoot(authority);
|
|
82
|
+
try {
|
|
83
|
+
if (Buffer.byteLength(content) > LIFECYCLE_RECORD_MAX_BYTES) {
|
|
84
|
+
failLifecycleStore("oversize record");
|
|
85
|
+
}
|
|
86
|
+
const final = path.join(authority.root, file);
|
|
87
|
+
if (existing === "match") {
|
|
88
|
+
if (await matchesSettledLifecyclePublication(final, content, readLifecycleRecord))
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
else if ((await readSettledLifecycleRecord(final, readLifecycleRecord)) !== null) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
const temp = path.join(authority.root, `.${file}.${process.pid}.${randomUUID()}.tmp`);
|
|
95
|
+
let handle;
|
|
96
|
+
let linked = false;
|
|
97
|
+
try {
|
|
98
|
+
await runTestHook("before_publish_temp_open");
|
|
99
|
+
await revalidateHeldLifecycleRoot(authority, rootHandle);
|
|
100
|
+
handle = await open(temp, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW, 0o600);
|
|
101
|
+
await handle.chmod(0o600);
|
|
102
|
+
await handle.writeFile(content, "utf8");
|
|
103
|
+
await handle.sync();
|
|
104
|
+
await handle.close();
|
|
105
|
+
handle = undefined;
|
|
106
|
+
try {
|
|
107
|
+
await runTestHook("before_publish_link");
|
|
108
|
+
await revalidateHeldLifecycleRoot(authority, rootHandle);
|
|
109
|
+
await link(temp, final);
|
|
110
|
+
linked = true;
|
|
111
|
+
await syncLifecycleDirectory(authority.root);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
if (error.code !== "EEXIST") {
|
|
115
|
+
failLifecycleStore("publication failed");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
if (handle)
|
|
121
|
+
await handle.close().catch(() => undefined);
|
|
122
|
+
await runTestHook("before_publish_unlink");
|
|
123
|
+
await revalidateHeldLifecycleRoot(authority, rootHandle);
|
|
124
|
+
await unlink(temp).catch((error) => {
|
|
125
|
+
if (error.code !== "ENOENT")
|
|
126
|
+
failLifecycleStore("publication cleanup failed");
|
|
127
|
+
});
|
|
128
|
+
await syncLifecycleDirectory(authority.root);
|
|
129
|
+
}
|
|
130
|
+
if (!linked && existing === "ignore") {
|
|
131
|
+
if ((await readSettledLifecycleRecord(final, readLifecycleRecord)) === null) {
|
|
132
|
+
failLifecycleStore("publication changed");
|
|
133
|
+
}
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
await settleLifecyclePublicationUntil(async () => {
|
|
137
|
+
const exact = await readLifecycleRecord(final, [1, 2]);
|
|
138
|
+
if (exact !== content)
|
|
139
|
+
failLifecycleStore("publication changed");
|
|
140
|
+
if ((await lstat(final).catch(() => null))?.nlink === 1) {
|
|
141
|
+
await revalidateHeldLifecycleRoot(authority, rootHandle);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
});
|
|
146
|
+
return linked;
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
await rootHandle.close().catch(() => undefined);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type LifecycleInvocation, type LifecycleOwnerCapability, type LifecycleUpReservation, type LifecycleUpStart } from "./lifecycleCompletionContracts.js";
|
|
2
|
+
export { LIFECYCLE_UP_EXTRA_LABELS, type LifecycleUpReservation, type LifecycleUpStart, } from "./lifecycleCompletionContracts.js";
|
|
3
|
+
export declare const findLifecycleUpReservation: (raw: LifecycleInvocation) => Promise<LifecycleUpReservation | null>;
|
|
4
|
+
export declare const recordLifecycleUpReservation: (raw: LifecycleInvocation, reservation: Omit<LifecycleUpReservation, "invocation" | "version">, capability: LifecycleOwnerCapability) => Promise<void>;
|
|
5
|
+
export interface LifecycleUpStartState {
|
|
6
|
+
readonly attempt: number;
|
|
7
|
+
readonly start: LifecycleUpStart;
|
|
8
|
+
}
|
|
9
|
+
export declare const findLifecycleUpStart: (raw: LifecycleInvocation) => Promise<LifecycleUpStartState | null>;
|
|
10
|
+
export declare const recordLifecycleUpStart: (raw: LifecycleInvocation, start: Omit<LifecycleUpStart, "attempt" | "invocation" | "version">, capability: LifecycleOwnerCapability) => Promise<void>;
|
|
11
|
+
export declare const recordLifecycleUpCleanup: (raw: LifecycleInvocation, state: LifecycleUpStartState, capability: LifecycleOwnerCapability) => Promise<void>;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { readSettledLifecycleRecord } from "./lifecycleCompletionPublication.js";
|
|
3
|
+
import { canonicalLifecycleJson, lifecycleUpCleanupSchema, lifecycleUpReservationSchema, lifecycleUpStartSchema, LIFECYCLE_UP_CLEANUP_VERSION, LIFECYCLE_UP_RESERVATION_VERSION, LIFECYCLE_UP_START_VERSION, } from "./lifecycleCompletionContracts.js";
|
|
4
|
+
import { assertLifecycleOwnerCapability } from "./lifecycleCompletionOwner.js";
|
|
5
|
+
import { parseLifecycleAdmission, parseLifecycleInvocation } from "./lifecycleCompletionParsing.js";
|
|
6
|
+
import { admissionPath, failLifecycleStore, lifecycleRecordName, lifecycleRoot, publishLifecycleRecord, readLifecycleRecord, recoveryPath, upCleanupPath, upReservationPath, upStartPath, } from "./lifecycleCompletionStore.js";
|
|
7
|
+
export { LIFECYCLE_UP_EXTRA_LABELS, } from "./lifecycleCompletionContracts.js";
|
|
8
|
+
const MAX_ATTEMPTS = 16;
|
|
9
|
+
const canonical = canonicalLifecycleJson;
|
|
10
|
+
const fail = failLifecycleStore;
|
|
11
|
+
const exactAdmission = async (invocation) => {
|
|
12
|
+
const text = await readSettledLifecycleRecord(admissionPath(invocation.id), readLifecycleRecord);
|
|
13
|
+
if (text === null)
|
|
14
|
+
return fail("missing admission");
|
|
15
|
+
const admission = parseLifecycleAdmission(text);
|
|
16
|
+
if (canonical(admission.invocation) !== canonical(invocation))
|
|
17
|
+
fail("invocation id drift");
|
|
18
|
+
return admission;
|
|
19
|
+
};
|
|
20
|
+
const assertOwner = async (invocation, capability) => {
|
|
21
|
+
const recoveryText = await readSettledLifecycleRecord(recoveryPath(invocation.id), readLifecycleRecord);
|
|
22
|
+
const recovered = recoveryText ? parseLifecycleAdmission(recoveryText) : null;
|
|
23
|
+
assertLifecycleOwnerCapability(invocation, await exactAdmission(invocation), recovered, capability);
|
|
24
|
+
};
|
|
25
|
+
const parseRecord = (text, parse, invocation) => {
|
|
26
|
+
const value = (() => {
|
|
27
|
+
try {
|
|
28
|
+
return parse(JSON.parse(text));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return fail("invalid up lifecycle record");
|
|
32
|
+
}
|
|
33
|
+
})();
|
|
34
|
+
const record = value;
|
|
35
|
+
if (`${canonical(value)}\n` !== text || canonical(record.invocation) !== canonical(invocation)) {
|
|
36
|
+
fail("invocation id drift");
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
};
|
|
40
|
+
export const findLifecycleUpReservation = async (raw) => {
|
|
41
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
42
|
+
if (invocation.operation !== "up")
|
|
43
|
+
fail("non-up reservation lookup");
|
|
44
|
+
await lifecycleRoot();
|
|
45
|
+
const text = await readSettledLifecycleRecord(upReservationPath(invocation.id), readLifecycleRecord);
|
|
46
|
+
return text === null ? null : parseRecord(text, (value) => lifecycleUpReservationSchema.parse(value), invocation);
|
|
47
|
+
};
|
|
48
|
+
export const recordLifecycleUpReservation = async (raw, reservation, capability) => {
|
|
49
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
50
|
+
if (invocation.operation !== "up")
|
|
51
|
+
fail("non-up reservation record");
|
|
52
|
+
const directory = await lifecycleRoot();
|
|
53
|
+
await assertOwner(invocation, capability);
|
|
54
|
+
const value = lifecycleUpReservationSchema.parse({
|
|
55
|
+
...reservation, invocation, version: LIFECYCLE_UP_RESERVATION_VERSION,
|
|
56
|
+
});
|
|
57
|
+
await publishLifecycleRecord(directory, lifecycleRecordName(invocation.id, "up-reservation"), `${canonical(value)}\n`);
|
|
58
|
+
};
|
|
59
|
+
const readStart = async (invocation, attempt) => {
|
|
60
|
+
const text = await readSettledLifecycleRecord(upStartPath(invocation.id, attempt), readLifecycleRecord);
|
|
61
|
+
return text === null ? null : parseRecord(text, (value) => lifecycleUpStartSchema.parse(value), invocation);
|
|
62
|
+
};
|
|
63
|
+
const readCleanup = async (invocation, attempt) => {
|
|
64
|
+
const text = await readSettledLifecycleRecord(upCleanupPath(invocation.id, attempt), readLifecycleRecord);
|
|
65
|
+
return text === null ? null : parseRecord(text, (value) => lifecycleUpCleanupSchema.parse(value), invocation);
|
|
66
|
+
};
|
|
67
|
+
const findUpAttempt = async (invocation) => {
|
|
68
|
+
for (let attempt = 0; attempt <= MAX_ATTEMPTS; attempt += 1) {
|
|
69
|
+
const start = await readStart(invocation, attempt);
|
|
70
|
+
if (start === null) {
|
|
71
|
+
if (await readCleanup(invocation, attempt))
|
|
72
|
+
fail("up cleanup without start");
|
|
73
|
+
return { active: null, next: attempt };
|
|
74
|
+
}
|
|
75
|
+
if (start.attempt !== attempt)
|
|
76
|
+
fail("up start attempt drift");
|
|
77
|
+
const cleanup = await readCleanup(invocation, attempt);
|
|
78
|
+
if (cleanup === null)
|
|
79
|
+
return { active: { attempt, start }, next: attempt };
|
|
80
|
+
if (cleanup.attempt !== attempt || cleanup.container_id !== start.container_id)
|
|
81
|
+
fail("up cleanup drift");
|
|
82
|
+
}
|
|
83
|
+
return fail("up retry limit reached");
|
|
84
|
+
};
|
|
85
|
+
export const findLifecycleUpStart = async (raw) => {
|
|
86
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
87
|
+
if (invocation.operation !== "up")
|
|
88
|
+
fail("non-up start lookup");
|
|
89
|
+
await lifecycleRoot();
|
|
90
|
+
return (await findUpAttempt(invocation)).active;
|
|
91
|
+
};
|
|
92
|
+
const sameAuthority = (reservation, start) => reservation.container_name === start.container_name
|
|
93
|
+
&& canonical(reservation.label_authority) === canonical(start.label_authority);
|
|
94
|
+
export const recordLifecycleUpStart = async (raw, start, capability) => {
|
|
95
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
96
|
+
if (invocation.operation !== "up")
|
|
97
|
+
fail("non-up start record");
|
|
98
|
+
const directory = await lifecycleRoot();
|
|
99
|
+
await assertOwner(invocation, capability);
|
|
100
|
+
const reservation = await findLifecycleUpReservation(invocation);
|
|
101
|
+
if (!reservation)
|
|
102
|
+
return fail("missing up reservation");
|
|
103
|
+
const current = await findUpAttempt(invocation);
|
|
104
|
+
const value = lifecycleUpStartSchema.parse({ ...start, attempt: current.next, invocation, version: LIFECYCLE_UP_START_VERSION });
|
|
105
|
+
if (!sameAuthority(reservation, value))
|
|
106
|
+
fail("up start authority drift");
|
|
107
|
+
if (current.active) {
|
|
108
|
+
if (canonical(current.active.start) !== canonical(value))
|
|
109
|
+
fail("active up start changed");
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
await publishLifecycleRecord(directory, path.basename(upStartPath(invocation.id, current.next)), `${canonical(value)}\n`);
|
|
113
|
+
};
|
|
114
|
+
export const recordLifecycleUpCleanup = async (raw, state, capability) => {
|
|
115
|
+
const invocation = parseLifecycleInvocation(raw);
|
|
116
|
+
const directory = await lifecycleRoot();
|
|
117
|
+
await assertOwner(invocation, capability);
|
|
118
|
+
const active = await findUpAttempt(invocation);
|
|
119
|
+
if (!active.active || active.active.attempt !== state.attempt
|
|
120
|
+
|| canonical(active.active.start) !== canonical(state.start))
|
|
121
|
+
fail("up cleanup without active start");
|
|
122
|
+
const value = lifecycleUpCleanupSchema.parse({
|
|
123
|
+
attempt: state.attempt, container_id: state.start.container_id, invocation,
|
|
124
|
+
version: LIFECYCLE_UP_CLEANUP_VERSION,
|
|
125
|
+
});
|
|
126
|
+
await publishLifecycleRecord(directory, path.basename(upCleanupPath(invocation.id, state.attempt)), `${canonical(value)}\n`);
|
|
127
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Native deployment helpers
|
|
2
|
+
|
|
3
|
+
This folder contains bounded, package-owned native helpers for deployment
|
|
4
|
+
syscalls Node does not expose. Helpers accept validated single-component names,
|
|
5
|
+
emit one bounded JSON result, and fail closed.
|
|
6
|
+
|
|
7
|
+
`artifacts/` contains the verified Linux x64 and arm64 package inputs so the
|
|
8
|
+
normal Node build stays offline and Docker-free. `copyArtifacts.ts` verifies
|
|
9
|
+
and copies them into `dist`. Only the explicit maintainer `build:native` path
|
|
10
|
+
may replace them using the digest-pinned compiler image; CI rebuilds and
|
|
11
|
+
syscall-tests both architectures before publication.
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"spawnfile.rename-noreplace-build.v1","architecture":"arm64","binary_sha256":"sha256:fb1f0d24fe7dfc4db18e972b9d60d839bf11ed82c78bf89cf6eca3f21502529f","builder_image":"gcc:14.2.0@sha256:b99b86a28812b1e6453a231a947dc43d76fe192788a12f344a9b568bf9f5d24c","compiler":"gcc:14.2.0","source_sha256":"sha256:64458e923931f7ca4df9ac2d19fd0361093e985ab3fbd8bf422ceb31a60b0e79","target":"linux/arm64"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"spawnfile.rename-noreplace-build.v1","architecture":"x64","binary_sha256":"sha256:5c80678b8b1325085eeb56fd8125dbad9a8e00e7a9871994702d95eabd80ab26","builder_image":"gcc:14.2.0@sha256:b99b86a28812b1e6453a231a947dc43d76fe192788a12f344a9b568bf9f5d24c","compiler":"gcc:14.2.0","source_sha256":"sha256:64458e923931f7ca4df9ac2d19fd0361093e985ab3fbd8bf422ceb31a60b0e79","target":"linux/amd64"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type HelperResult = {
|
|
2
|
+
stderr: string;
|
|
3
|
+
stdout: string;
|
|
4
|
+
};
|
|
5
|
+
type HelperRun = (file: string, args: string[], options: {
|
|
6
|
+
encoding: "utf8";
|
|
7
|
+
maxBuffer: number;
|
|
8
|
+
timeout: number;
|
|
9
|
+
windowsHide: true;
|
|
10
|
+
}) => Promise<HelperResult>;
|
|
11
|
+
export declare const activateNoReplaceWith: (temporaryPath: string, destinationPath: string, runtime: {
|
|
12
|
+
arch: string;
|
|
13
|
+
platform: string;
|
|
14
|
+
run: HelperRun;
|
|
15
|
+
}) => Promise<void>;
|
|
16
|
+
export declare const activateNoReplace: (temporaryPath: string, destinationPath: string) => Promise<void>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { execFile as execFileCallback } from "node:child_process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
const execFile = promisify(execFileCallback);
|
|
6
|
+
const MAX_OUTPUT = 4096;
|
|
7
|
+
const TIMEOUT_MS = 5_000;
|
|
8
|
+
const component = (value) => value.length > 0 && value !== "." && value !== ".." && !value.includes(path.sep);
|
|
9
|
+
export const activateNoReplaceWith = async (temporaryPath, destinationPath, runtime) => {
|
|
10
|
+
if (runtime.platform !== "linux" || (runtime.arch !== "x64" && runtime.arch !== "arm64"))
|
|
11
|
+
throw new Error("Workspace resource atomic no-replace activation is unsupported on this platform");
|
|
12
|
+
const parent = path.dirname(temporaryPath);
|
|
13
|
+
if (parent !== path.dirname(destinationPath) || !path.isAbsolute(parent))
|
|
14
|
+
throw new Error("Workspace resource activation paths must share one canonical parent");
|
|
15
|
+
const source = path.basename(temporaryPath);
|
|
16
|
+
const destination = path.basename(destinationPath);
|
|
17
|
+
if (!component(source) || !component(destination))
|
|
18
|
+
throw new Error("Workspace resource activation names must be single components");
|
|
19
|
+
const helper = fileURLToPath(new URL(`./native/rename-noreplace-${runtime.arch}`, import.meta.url));
|
|
20
|
+
try {
|
|
21
|
+
const result = await runtime.run(helper, [parent, source, destination], { encoding: "utf8", maxBuffer: MAX_OUTPUT, timeout: TIMEOUT_MS, windowsHide: true });
|
|
22
|
+
if (result.stderr !== "" || result.stdout !== '{"ok":true}\n')
|
|
23
|
+
throw new Error("Workspace resource atomic helper returned malformed output");
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const failure = error;
|
|
27
|
+
if (failure.killed || failure.code === "ETIMEDOUT")
|
|
28
|
+
throw new Error("Workspace resource atomic helper timed out");
|
|
29
|
+
if (failure.code === "ENOENT")
|
|
30
|
+
throw new Error("Workspace resource atomic helper is missing");
|
|
31
|
+
if (typeof failure.stdout === "string" && failure.stdout.length <= MAX_OUTPUT) {
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(failure.stdout);
|
|
34
|
+
if (parsed.ok === false && ["EEXIST", "EXDEV", "ENOSYS", "EOPNOTSUPP"].includes(parsed.error ?? "")) {
|
|
35
|
+
const mapped = new Error(`Workspace resource atomic activation failed: ${parsed.error}`);
|
|
36
|
+
mapped.code = parsed.error;
|
|
37
|
+
throw mapped;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (parsedError) {
|
|
41
|
+
if (parsedError.code)
|
|
42
|
+
throw parsedError;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (failure.message.includes("malformed output"))
|
|
46
|
+
throw failure;
|
|
47
|
+
throw new Error("Workspace resource atomic helper failed closed");
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
export const activateNoReplace = async (temporaryPath, destinationPath) => await activateNoReplaceWith(temporaryPath, destinationPath, { arch: process.arch, platform: process.platform, run: execFile });
|