spawnfile 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -11
- package/dist/audit/auditCli.d.ts +19 -0
- package/dist/audit/auditCli.js +63 -0
- package/dist/audit/checks.d.ts +100 -0
- package/dist/audit/checks.js +279 -0
- package/dist/audit/checksShared.d.ts +74 -0
- package/dist/audit/checksShared.js +37 -0
- package/dist/audit/generateAudit.d.ts +19 -0
- package/dist/audit/generateAudit.js +122 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.js +4 -0
- package/dist/audit/readAudit.d.ts +50 -0
- package/dist/audit/readAudit.js +59 -0
- package/dist/audit/types.d.ts +40 -0
- package/dist/audit/types.js +8 -0
- package/dist/auth/credentialEnvFile.d.ts +11 -0
- package/dist/auth/credentialEnvFile.js +60 -0
- package/dist/auth/credentialProvisioning.d.ts +15 -0
- package/dist/auth/credentialProvisioning.js +75 -0
- package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
- package/dist/auth/credentialProvisioningReceipt.js +70 -0
- package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
- package/dist/auth/credentialProvisioningRequest.js +169 -0
- package/dist/auth/credentialWorldBindings.d.ts +21 -0
- package/dist/auth/credentialWorldBindings.js +104 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/paths.d.ts +11 -0
- package/dist/auth/paths.js +21 -0
- package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
- package/dist/auth/targetSecretSourceAuthor.js +52 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
- package/dist/auth/targetSecretSourceFsPublish.js +49 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
- package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
- package/dist/auth/targetSecretSourceFsRead.js +198 -0
- package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
- package/dist/auth/targetSecretSourceGrant.js +99 -0
- package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
- package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
- package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
- package/dist/auth/targetSecretSourceLifecycle.js +52 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
- package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
- package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
- package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
- package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
- package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
- package/dist/auth/targetSecretSourceResolver.js +137 -0
- package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
- package/dist/auth/targetSecretSourceRevoke.js +92 -0
- package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
- package/dist/auth/targetSecretSourceRotate.js +121 -0
- package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
- package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
- package/dist/cli/artifactsCommands.d.ts +27 -0
- package/dist/cli/artifactsCommands.js +132 -0
- package/dist/cli/authCommands.d.ts +5 -0
- package/dist/cli/authCommands.js +221 -0
- package/dist/cli/compileBuildCommands.d.ts +3 -0
- package/dist/cli/compileBuildCommands.js +35 -0
- package/dist/cli/containerBundleCommand.d.ts +6 -0
- package/dist/cli/containerBundleCommand.js +116 -0
- package/dist/cli/downCommand.d.ts +25 -0
- package/dist/cli/downCommand.js +134 -0
- package/dist/cli/index.js +6 -3
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +11 -181
- package/dist/cli/lifecycleMachine.d.ts +19 -0
- package/dist/cli/lifecycleMachine.js +78 -0
- package/dist/cli/lifecyclePlan.d.ts +35 -0
- package/dist/cli/lifecyclePlan.js +240 -0
- package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
- package/dist/cli/lifecyclePlanningCommands.js +30 -0
- package/dist/cli/runCli.d.ts +9 -2
- package/dist/cli/runCli.js +27 -71
- 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 +33 -0
- package/dist/cli/targetCommands.js +257 -0
- package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
- package/dist/cli/targetComposedPreparationCommand.js +39 -0
- package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
- package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
- package/dist/cli/targetDefaultAuthorities.js +210 -0
- package/dist/cli/targetDefaultConfig.d.ts +68 -0
- package/dist/cli/targetDefaultConfig.js +317 -0
- package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
- package/dist/cli/targetDefaultConfigStdin.js +215 -0
- package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
- package/dist/cli/targetDefaultEnvelope.js +13 -0
- package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
- package/dist/cli/targetDefaultHandlerFactory.js +247 -0
- package/dist/cli/targetDefaultHandlers.d.ts +21 -0
- package/dist/cli/targetDefaultHandlers.js +72 -0
- package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
- package/dist/cli/targetDefaultJournalAuthority.js +135 -0
- package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
- package/dist/cli/targetDefaultWorldClock.js +14 -0
- package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
- package/dist/cli/targetDefaultWorldQueries.js +11 -0
- package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
- package/dist/cli/targetDefaultWorldReadiness.js +17 -0
- package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
- package/dist/cli/targetEvidenceHelperResolution.js +23 -0
- package/dist/cli/targetLookupCli.d.ts +3 -0
- package/dist/cli/targetLookupCli.js +31 -0
- package/dist/cli/targetLookupCommands.d.ts +12 -0
- package/dist/cli/targetLookupCommands.js +69 -0
- package/dist/cli/targetOperationDispatch.d.ts +58 -0
- package/dist/cli/targetOperationDispatch.js +21 -0
- package/dist/cli/targetReceiptOutput.d.ts +14 -0
- package/dist/cli/targetReceiptOutput.js +21 -0
- package/dist/cli/targetRequestFile.d.ts +14 -0
- package/dist/cli/targetRequestFile.js +63 -0
- package/dist/cli/targetSecretSourceInput.d.ts +28 -0
- package/dist/cli/targetSecretSourceInput.js +121 -0
- package/dist/cli/targetWorldClockCommand.d.ts +10 -0
- package/dist/cli/targetWorldClockCommand.js +42 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
- package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
- package/dist/cli/targetWorldReadinessCommand.js +43 -0
- package/dist/cli/upCommand.d.ts +3 -0
- package/dist/cli/upCommand.js +133 -0
- package/dist/cli/upImageCommand.d.ts +11 -0
- package/dist/cli/upImageCommand.js +41 -0
- package/dist/cli/upLifecycleInvocation.d.ts +41 -0
- package/dist/cli/upLifecycleInvocation.js +48 -0
- package/dist/cli/upLifecycleRecovery.d.ts +4 -0
- package/dist/cli/upLifecycleRecovery.js +53 -0
- package/dist/compiler/agentNodeMerge.d.ts +2 -0
- package/dist/compiler/agentNodeMerge.js +79 -0
- package/dist/compiler/agentSurfaces.js +11 -1
- package/dist/compiler/buildCompilePlan.js +17 -0
- package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
- package/dist/compiler/buildCompilePlanAgent.js +56 -0
- package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
- package/dist/compiler/buildCompilePlanTeams.js +4 -1
- package/dist/compiler/buildCompilePlanTraversal.js +75 -82
- package/dist/compiler/buildProject.d.ts +11 -0
- package/dist/compiler/buildProject.js +77 -2
- package/dist/compiler/compilePlanHelpers.js +2 -0
- package/dist/compiler/compileProject.d.ts +13 -0
- package/dist/compiler/compileProject.js +26 -74
- package/dist/compiler/compileProjectPolicy.d.ts +5 -0
- package/dist/compiler/compileProjectPolicy.js +21 -0
- package/dist/compiler/compileProjectReports.d.ts +9 -0
- package/dist/compiler/compileProjectReports.js +52 -0
- package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
- package/dist/compiler/containerArtifactSummaries.js +138 -0
- package/dist/compiler/containerArtifacts.d.ts +10 -0
- package/dist/compiler/containerArtifacts.js +126 -125
- package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
- package/dist/compiler/containerArtifactsPlans.js +31 -118
- package/dist/compiler/containerArtifactsRender.d.ts +3 -1
- package/dist/compiler/containerArtifactsRender.js +15 -12
- package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
- package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
- package/dist/compiler/containerConfigEnvRender.js +54 -0
- package/dist/compiler/containerEntrypointRender.d.ts +1 -0
- package/dist/compiler/containerEntrypointRender.js +56 -52
- 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/containerTargetPlanResolution.d.ts +20 -0
- package/dist/compiler/containerTargetPlanResolution.js +97 -0
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
- package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
- package/dist/compiler/dockerBuildContext.d.ts +16 -0
- package/dist/compiler/dockerBuildContext.js +159 -0
- package/dist/compiler/dockerBuildSkip.d.ts +30 -0
- package/dist/compiler/dockerBuildSkip.js +81 -0
- package/dist/compiler/index.d.ts +4 -0
- package/dist/compiler/index.js +4 -0
- package/dist/compiler/memoryArtifacts.d.ts +26 -0
- package/dist/compiler/memoryArtifacts.js +134 -0
- package/dist/compiler/memoryResolution.d.ts +4 -0
- package/dist/compiler/memoryResolution.js +147 -0
- package/dist/compiler/modelEnv.d.ts +2 -0
- package/dist/compiler/modelEnv.js +6 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
- package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
- package/dist/compiler/moltnetArtifactPaths.js +49 -0
- package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
- package/dist/compiler/moltnetArtifactTypes.js +1 -0
- package/dist/compiler/moltnetArtifacts.d.ts +2 -40
- package/dist/compiler/moltnetArtifacts.js +43 -97
- package/dist/compiler/moltnetBinaries.d.ts +21 -4
- package/dist/compiler/moltnetBinaries.js +134 -27
- package/dist/compiler/moltnetClientConfig.js +7 -2
- package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
- package/dist/compiler/moltnetConfigLowering.js +67 -5
- package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
- package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
- package/dist/compiler/moltnetNodeConfig.js +7 -2
- package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
- package/dist/compiler/moltnetReleaseAuthority.js +73 -0
- package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
- package/dist/compiler/moltnetReleaseDownload.js +85 -0
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
- package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
- package/dist/compiler/moltnetResolution.js +72 -20
- package/dist/compiler/moltnetRoomMemberships.js +37 -9
- package/dist/compiler/moltnetServerPlans.d.ts +9 -0
- package/dist/compiler/moltnetServerPlans.js +132 -0
- package/dist/compiler/organizationIdentity.d.ts +27 -0
- package/dist/compiler/organizationIdentity.js +297 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
- package/dist/compiler/organizationReadyEvidence.js +261 -0
- package/dist/compiler/projectManifestGraph.d.ts +4 -0
- package/dist/compiler/projectManifestGraph.js +24 -0
- package/dist/compiler/runProject.d.ts +4 -0
- package/dist/compiler/runProject.js +30 -21
- package/dist/compiler/runProjectAuth.d.ts +7 -1
- package/dist/compiler/runProjectAuth.js +87 -9
- package/dist/compiler/runProjectDocker.d.ts +7 -0
- package/dist/compiler/runProjectDocker.js +31 -8
- package/dist/compiler/runProjectLifecycle.d.ts +7 -0
- package/dist/compiler/runProjectLifecycle.js +40 -0
- package/dist/compiler/syncProjectAuth.js +4 -1
- package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
- package/dist/compiler/teamContextActiveEnvironments.js +255 -0
- package/dist/compiler/teamContextSupport.js +32 -40
- package/dist/compiler/teamContextTypes.d.ts +2 -0
- package/dist/compiler/types.d.ts +82 -1
- package/dist/compiler/upProject.d.ts +5 -0
- package/dist/compiler/upProject.js +256 -20
- package/dist/compiler/upReceipt.d.ts +36 -0
- package/dist/compiler/upReceipt.js +82 -0
- package/dist/compiler/updateProjectModels.js +42 -60
- package/dist/compiler/updateProjectRuntime.js +22 -35
- package/dist/compiler/updateProjectSurfaces.js +53 -47
- package/dist/compiler/worldBindings.d.ts +39 -0
- package/dist/compiler/worldBindings.js +247 -0
- package/dist/compiler/worldBindingsFile.d.ts +5 -0
- package/dist/compiler/worldBindingsFile.js +162 -0
- package/dist/deployment/artifactsExport.d.ts +49 -0
- package/dist/deployment/artifactsExport.js +217 -0
- package/dist/deployment/artifactsExportDocker.d.ts +48 -0
- package/dist/deployment/artifactsExportDocker.js +91 -0
- package/dist/deployment/artifactsExportPlan.d.ts +24 -0
- package/dist/deployment/artifactsExportPlan.js +135 -0
- package/dist/deployment/artifactsExportTypes.d.ts +50 -0
- package/dist/deployment/artifactsExportTypes.js +52 -0
- package/dist/deployment/buildImageCacheStore.d.ts +23 -0
- package/dist/deployment/buildImageCacheStore.js +54 -0
- package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
- package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
- package/dist/deployment/dockerInspect.d.ts +9 -0
- package/dist/deployment/dockerInspect.js +24 -1
- package/dist/deployment/dockerLabels.d.ts +2 -0
- package/dist/deployment/dockerLabels.js +2 -0
- package/dist/deployment/dockerLogs.js +2 -10
- package/dist/deployment/dockerManager.d.ts +51 -0
- package/dist/deployment/dockerManager.js +118 -1
- package/dist/deployment/dockerProbeGateway.js +64 -5
- package/dist/deployment/dockerRecover.js +9 -1
- package/dist/deployment/dockerTeardown.d.ts +32 -0
- package/dist/deployment/dockerTeardown.js +61 -0
- package/dist/deployment/downDeployment.d.ts +34 -0
- package/dist/deployment/downDeployment.js +147 -0
- package/dist/deployment/downReceiptTypes.d.ts +21 -0
- package/dist/deployment/downReceiptTypes.js +30 -0
- package/dist/deployment/index.d.ts +16 -0
- package/dist/deployment/index.js +17 -0
- package/dist/deployment/lifecycleCompletion.d.ts +37 -0
- package/dist/deployment/lifecycleCompletion.js +236 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
- package/dist/deployment/lifecycleCompletionContracts.js +106 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
- package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
- package/dist/deployment/lifecycleCompletionLookup.js +88 -0
- package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
- package/dist/deployment/lifecycleCompletionOwner.js +31 -0
- package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
- package/dist/deployment/lifecycleCompletionParsing.js +108 -0
- package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
- package/dist/deployment/lifecycleCompletionPaths.js +16 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
- package/dist/deployment/lifecycleCompletionPublication.js +35 -0
- package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
- package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRoot.js +243 -0
- package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
- package/dist/deployment/lifecycleCompletionStore.js +151 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
- package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
- package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
- package/dist/deployment/organizationHandoffTypes.js +80 -0
- package/dist/deployment/organizationReady.d.ts +52 -0
- package/dist/deployment/organizationReady.js +200 -0
- package/dist/deployment/privateArtifactsExport.d.ts +18 -0
- package/dist/deployment/privateArtifactsExport.js +80 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
- package/dist/deployment/record.d.ts +26 -1
- package/dist/deployment/record.js +49 -4
- package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
- package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
- package/dist/deployment/target.d.ts +1 -35
- package/dist/deployment/target.js +1 -96
- package/dist/deployment/upReceiptTypes.d.ts +111 -0
- package/dist/deployment/upReceiptTypes.js +164 -0
- package/dist/dev/project.js +15 -9
- package/dist/distribution/buildDistributionReport.d.ts +2 -1
- package/dist/distribution/buildDistributionReport.js +2 -1
- package/dist/distribution/distributionReportSchema.d.ts +5 -0
- package/dist/distribution/distributionReportSchema.js +7 -2
- package/dist/distribution/index.d.ts +2 -2
- package/dist/distribution/index.js +1 -1
- package/dist/distribution/types.d.ts +7 -0
- package/dist/distribution/types.js +1 -0
- package/dist/filesystem/paths.js +10 -1
- package/dist/ledger/causalConformanceCli.d.ts +1 -0
- package/dist/ledger/causalConformanceCli.js +41 -0
- package/dist/ledger/causeNamespace.d.ts +8 -0
- package/dist/ledger/causeNamespace.js +24 -0
- package/dist/ledger/conformance.d.ts +83 -0
- package/dist/ledger/conformance.js +259 -0
- package/dist/ledger/emitters.d.ts +76 -0
- package/dist/ledger/emitters.js +188 -0
- package/dist/ledger/index.d.ts +4 -0
- package/dist/ledger/index.js +4 -0
- package/dist/ledger/principal.d.ts +96 -0
- package/dist/ledger/principal.js +121 -0
- package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
- package/dist/manifest/externalParticipantSchemas.js +17 -0
- package/dist/manifest/index.d.ts +1 -0
- package/dist/manifest/index.js +1 -0
- package/dist/manifest/inlineAgentMember.d.ts +2 -0
- package/dist/manifest/inlineAgentMember.js +9 -0
- package/dist/manifest/loadManifest.js +14 -8
- package/dist/manifest/mcpSchemas.d.ts +17 -0
- package/dist/manifest/mcpSchemas.js +41 -0
- package/dist/manifest/memorySchemas.d.ts +245 -0
- package/dist/manifest/memorySchemas.js +148 -0
- package/dist/manifest/renderSpawnfile.js +22 -131
- package/dist/manifest/renderSpawnfileNetworks.js +9 -2
- package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
- package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
- package/dist/manifest/schemas.d.ts +1868 -99
- package/dist/manifest/schemas.js +78 -32
- package/dist/manifest/surfaceSchemas.d.ts +17 -0
- package/dist/manifest/surfaceSchemas.js +24 -1
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
- package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
- package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
- package/dist/manifest/teamNetworkSchemas.js +3 -317
- package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
- package/dist/manifest/teamNetworkServerSchemas.js +199 -0
- package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
- package/dist/ownership/siblingBuildFreshness.js +20 -0
- package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
- package/dist/ownership/simfileRunOperatorInputs.js +139 -0
- package/dist/report/types.d.ts +142 -0
- package/dist/runtime/common.d.ts +35 -0
- package/dist/runtime/common.js +55 -0
- package/dist/runtime/container.d.ts +28 -1
- package/dist/runtime/container.js +38 -5
- package/dist/runtime/containerPackageOverrides.d.ts +37 -0
- package/dist/runtime/containerPackageOverrides.js +33 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/mnemeMcp.d.ts +15 -0
- package/dist/runtime/mnemeMcp.js +109 -0
- package/dist/runtime/openclaw/adapter.js +15 -4
- package/dist/runtime/openclaw/mcp.d.ts +10 -0
- package/dist/runtime/openclaw/mcp.js +69 -0
- package/dist/runtime/openclaw/runAuth.js +2 -2
- package/dist/runtime/openclaw/scaffold.js +1 -1
- package/dist/runtime/openclaw/schedules.d.ts +38 -0
- package/dist/runtime/openclaw/schedules.js +74 -0
- package/dist/runtime/pi/adapter.d.ts +1 -1
- package/dist/runtime/pi/adapter.js +86 -53
- 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 +80 -0
- package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
- package/dist/runtime/pi/appScriptedEngine.js +42 -0
- package/dist/runtime/pi/appSource.d.ts +4 -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 +23 -27
- package/dist/runtime/picoclaw/mcp.d.ts +4 -0
- package/dist/runtime/picoclaw/mcp.js +43 -0
- package/dist/runtime/picoclaw/memory.d.ts +7 -0
- package/dist/runtime/picoclaw/memory.js +17 -0
- package/dist/runtime/picoclaw/runAuth.js +1 -1
- package/dist/runtime/picoclaw/scaffold.js +1 -1
- package/dist/runtime/picoclaw/schedules.d.ts +26 -0
- package/dist/runtime/picoclaw/schedules.js +62 -3
- package/dist/runtime/scheduleUtils.d.ts +2 -0
- package/dist/runtime/scheduleUtils.js +15 -0
- package/dist/runtime/types.d.ts +25 -2
- package/dist/shared/errors.d.ts +1 -1
- package/dist/shared/errors.js +2 -2
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/shared/redaction.d.ts +2 -0
- package/dist/shared/redaction.js +10 -0
- package/dist/status/buildStatus.d.ts +1 -0
- package/dist/status/buildStatus.js +2 -0
- package/dist/status/compileReport.d.ts +22 -0
- package/dist/status/compileReport.js +16 -2
- package/dist/status/compiledProbeCollection.d.ts +21 -0
- package/dist/status/compiledProbeCollection.js +27 -0
- package/dist/status/imageStatusReport.js +6 -0
- package/dist/status/index.d.ts +3 -0
- package/dist/status/index.js +3 -0
- package/dist/status/lifecycleProbes.d.ts +19 -0
- package/dist/status/lifecycleProbes.js +174 -0
- package/dist/status/moltnetProbes.d.ts +7 -8
- package/dist/status/moltnetProbes.js +27 -198
- package/dist/status/moltnetWiringProbes.d.ts +19 -0
- package/dist/status/moltnetWiringProbes.js +178 -0
- package/dist/target/cleanupRun.d.ts +41 -0
- package/dist/target/cleanupRun.js +139 -0
- package/dist/target/cleanupRunDocker.d.ts +16 -0
- package/dist/target/cleanupRunDocker.js +66 -0
- package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
- package/dist/target/cleanupRunDocker.test-helper.js +238 -0
- package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
- package/dist/target/cleanupRunDockerPreflight.js +224 -0
- package/dist/target/composedPreparation.d.ts +205 -0
- package/dist/target/composedPreparation.js +223 -0
- package/dist/target/containerBundle.d.ts +82 -0
- package/dist/target/containerBundle.js +243 -0
- package/dist/target/containerBundleArchive.d.ts +31 -0
- package/dist/target/containerBundleArchive.js +140 -0
- package/dist/target/containerBundleAuthority.d.ts +25 -0
- package/dist/target/containerBundleAuthority.js +65 -0
- package/dist/target/containerBundleContracts.d.ts +114 -0
- package/dist/target/containerBundleContracts.js +173 -0
- package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
- package/dist/target/containerBundleFilesystemStore.js +247 -0
- package/dist/target/containerBundlePolicy.d.ts +33 -0
- package/dist/target/containerBundlePolicy.js +64 -0
- package/dist/target/containerBundleStore.d.ts +127 -0
- package/dist/target/containerBundleStore.js +284 -0
- package/dist/target/contracts.d.ts +538 -0
- package/dist/target/contracts.js +373 -0
- package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
- package/dist/target/dockerArtifactIdentityTypes.js +1 -0
- package/dist/target/dockerArtifactInspection.d.ts +40 -0
- package/dist/target/dockerArtifactInspection.js +125 -0
- package/dist/target/dockerArtifacts.d.ts +21 -0
- package/dist/target/dockerArtifacts.js +110 -0
- package/dist/target/dockerArtifactsProvider.d.ts +41 -0
- package/dist/target/dockerArtifactsProvider.js +449 -0
- package/dist/target/dockerCommandExecutor.d.ts +27 -0
- package/dist/target/dockerCommandExecutor.js +200 -0
- package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
- package/dist/target/dockerCommandExecutorCore.js +273 -0
- package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
- package/dist/target/dockerContainerBundleBuilder.js +256 -0
- package/dist/target/dockerContextSnapshot.d.ts +21 -0
- package/dist/target/dockerContextSnapshot.js +158 -0
- package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
- package/dist/target/dockerEndpointFingerprint.js +9 -0
- package/dist/target/dockerPreparedArtifact.d.ts +48 -0
- package/dist/target/dockerPreparedArtifact.js +131 -0
- package/dist/target/dockerProjectionJson.d.ts +1 -0
- package/dist/target/dockerProjectionJson.js +80 -0
- package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
- package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
- package/dist/target/dockerResources.d.ts +26 -0
- package/dist/target/dockerResources.js +162 -0
- package/dist/target/dockerResourcesProvider.d.ts +44 -0
- package/dist/target/dockerResourcesProvider.js +207 -0
- package/dist/target/dockerSecrets.d.ts +39 -0
- package/dist/target/dockerSecrets.js +249 -0
- package/dist/target/dockerSecretsAuthority.d.ts +26 -0
- package/dist/target/dockerSecretsAuthority.js +216 -0
- package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
- package/dist/target/dockerSecretsLifecycle.js +133 -0
- package/dist/target/dockerSecretsProvider.d.ts +68 -0
- package/dist/target/dockerSecretsProvider.js +329 -0
- package/dist/target/dockerTarget.d.ts +52 -0
- package/dist/target/dockerTarget.js +48 -0
- package/dist/target/dockerTargetBinding.d.ts +14 -0
- package/dist/target/dockerTargetBinding.js +96 -0
- package/dist/target/dockerWorldClock.d.ts +17 -0
- package/dist/target/dockerWorldClock.js +111 -0
- package/dist/target/dockerWorldReadiness.d.ts +17 -0
- package/dist/target/dockerWorldReadiness.js +119 -0
- package/dist/target/dockerWorldService.d.ts +23 -0
- package/dist/target/dockerWorldService.js +216 -0
- package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
- package/dist/target/dockerWorldServiceAuthority.js +182 -0
- package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
- package/dist/target/dockerWorldServiceLifecycle.js +275 -0
- package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
- package/dist/target/dockerWorldServiceProvider.js +318 -0
- package/dist/target/dockerWorldServiceStore.d.ts +73 -0
- package/dist/target/dockerWorldServiceStore.js +367 -0
- package/dist/target/evidenceExport.d.ts +55 -0
- package/dist/target/evidenceExport.js +518 -0
- package/dist/target/evidenceExportArchive.d.ts +10 -0
- package/dist/target/evidenceExportArchive.js +302 -0
- package/dist/target/evidenceExportContract.d.ts +27 -0
- package/dist/target/evidenceExportContract.js +40 -0
- package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
- package/dist/target/evidenceExportOperationsTestKit.js +312 -0
- package/dist/target/evidenceExportProvider.d.ts +85 -0
- package/dist/target/evidenceExportProvider.js +187 -0
- package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
- package/dist/target/evidenceExportPublicationTypes.js +1 -0
- package/dist/target/evidenceExportStore.d.ts +70 -0
- package/dist/target/evidenceExportStore.js +498 -0
- package/dist/target/evidenceExportStorePublication.d.ts +7 -0
- package/dist/target/evidenceExportStorePublication.js +395 -0
- package/dist/target/handles.d.ts +20 -0
- package/dist/target/handles.js +56 -0
- package/dist/target/index.d.ts +12 -0
- package/dist/target/index.js +11 -0
- package/dist/target/journal.d.ts +59 -0
- package/dist/target/journal.js +529 -0
- package/dist/target/journalFilesystem.d.ts +3 -0
- package/dist/target/journalFilesystem.js +111 -0
- package/dist/target/journalRoot.d.ts +4 -0
- package/dist/target/journalRoot.js +6 -0
- package/dist/target/organizationAttachment.d.ts +23 -0
- package/dist/target/organizationAttachment.js +263 -0
- package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
- package/dist/target/organizationAttachmentAuthority.js +161 -0
- package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
- package/dist/target/organizationAttachmentLifecycle.js +101 -0
- package/dist/target/organizationAttachmentProvider.d.ts +76 -0
- package/dist/target/organizationAttachmentProvider.js +289 -0
- package/dist/target/organizationAttachmentStore.d.ts +51 -0
- package/dist/target/organizationAttachmentStore.js +316 -0
- package/dist/target/publicArtifactSnapshot.d.ts +41 -0
- package/dist/target/publicArtifactSnapshot.js +150 -0
- package/dist/target/topologyActivation.d.ts +51 -0
- package/dist/target/topologyActivation.js +149 -0
- package/dist/target/topologyAttestation.d.ts +37 -0
- package/dist/target/topologyAttestation.js +300 -0
- package/dist/target/topologyAttestationErrors.d.ts +1 -0
- package/dist/target/topologyAttestationErrors.js +1 -0
- package/dist/target/worldClock.d.ts +60 -0
- package/dist/target/worldClock.js +129 -0
- package/dist/target/worldReadiness.d.ts +103 -0
- package/dist/target/worldReadiness.js +153 -0
- package/moltnet-releases.json +20 -0
- package/package.json +27 -11
- package/runtimes.yaml +8 -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,247 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { chmod, lstat, mkdir, open, realpath, rename, unlink } from "node:fs/promises";
|
|
3
|
+
import { Buffer } from "node:buffer";
|
|
4
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { createMemoryTargetLocalBundleStore } from "./containerBundleStore.js";
|
|
7
|
+
const ERROR = "Target-local container bundle store failed";
|
|
8
|
+
const OWNER = process.getuid?.() ?? -1;
|
|
9
|
+
const MAX_RECORD_BYTES = 4_194_304;
|
|
10
|
+
const STALE_LOCK_MS = 60_000;
|
|
11
|
+
const fail = () => { throw new Error(ERROR); };
|
|
12
|
+
const replayInput = (raw) => {
|
|
13
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
14
|
+
return fail();
|
|
15
|
+
const value = raw;
|
|
16
|
+
if (Object.keys(value).sort().join("\0") !== "idempotency_key\0maximum_wait_ms\0request_digest"
|
|
17
|
+
|| typeof value.idempotency_key !== "string" || !/^idem_[a-z0-9]{16,64}$/u.test(value.idempotency_key)
|
|
18
|
+
|| typeof value.request_digest !== "string" || !/^sha256:[a-f0-9]{64}$/u.test(value.request_digest)
|
|
19
|
+
|| !Number.isSafeInteger(value.maximum_wait_ms) || value.maximum_wait_ms < 0 || value.maximum_wait_ms > 30_000)
|
|
20
|
+
return fail();
|
|
21
|
+
return Object.freeze({ idempotency_key: value.idempotency_key, maximum_wait_ms: value.maximum_wait_ms, request_digest: value.request_digest });
|
|
22
|
+
};
|
|
23
|
+
const secureDirectory = async (raw) => {
|
|
24
|
+
if (typeof raw !== "string" || !path.isAbsolute(raw) || path.parse(raw).root === raw || raw.length > 4096 || path.normalize(raw) !== raw)
|
|
25
|
+
fail();
|
|
26
|
+
/* Resolve pre-existing platform aliases once, then retain physical ancestor
|
|
27
|
+
identities. Subsequent alias/root swaps cannot redirect a state operation. */
|
|
28
|
+
const requested = raw;
|
|
29
|
+
const root = path.join(await realpath(path.dirname(requested)).catch(fail), path.basename(requested));
|
|
30
|
+
const parsed = path.parse(root);
|
|
31
|
+
let current = parsed.root;
|
|
32
|
+
const identities = [];
|
|
33
|
+
for (const part of root.slice(parsed.root.length).split(path.sep).filter(Boolean)) {
|
|
34
|
+
current = path.join(current, part);
|
|
35
|
+
let info;
|
|
36
|
+
try {
|
|
37
|
+
info = await lstat(current);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (error.code !== "ENOENT")
|
|
41
|
+
fail();
|
|
42
|
+
await mkdir(current, { mode: 0o700 });
|
|
43
|
+
info = await lstat(current).catch(fail);
|
|
44
|
+
}
|
|
45
|
+
if (!info.isDirectory() || info.isSymbolicLink())
|
|
46
|
+
fail();
|
|
47
|
+
identities.push(Object.freeze({ dev: info.dev, ino: info.ino, path: current }));
|
|
48
|
+
}
|
|
49
|
+
await chmod(root, 0o700).catch(fail);
|
|
50
|
+
const final = await lstat(root).catch(fail);
|
|
51
|
+
const rootIdentity = identities.at(-1);
|
|
52
|
+
if (!rootIdentity || final.dev !== rootIdentity.dev || final.ino !== rootIdentity.ino
|
|
53
|
+
|| final.uid !== OWNER || (final.mode & 0o777) !== 0o700)
|
|
54
|
+
fail();
|
|
55
|
+
return Object.freeze({ identities: Object.freeze(identities), path: root });
|
|
56
|
+
};
|
|
57
|
+
const assertSecureDirectory = async (directory) => {
|
|
58
|
+
for (const expected of directory.identities) {
|
|
59
|
+
const current = await lstat(expected.path).catch(fail);
|
|
60
|
+
if (!current.isDirectory() || current.isSymbolicLink() || current.dev !== expected.dev || current.ino !== expected.ino)
|
|
61
|
+
fail();
|
|
62
|
+
}
|
|
63
|
+
const root = await lstat(directory.path).catch(fail);
|
|
64
|
+
if (root.uid !== OWNER || (root.mode & 0o777) !== 0o700)
|
|
65
|
+
fail();
|
|
66
|
+
};
|
|
67
|
+
const read = async (directory, file, maximum = MAX_RECORD_BYTES) => {
|
|
68
|
+
await assertSecureDirectory(directory);
|
|
69
|
+
let handle;
|
|
70
|
+
try {
|
|
71
|
+
handle = await open(file, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (error.code === "ENOENT") {
|
|
75
|
+
await assertSecureDirectory(directory);
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
fail();
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const opened = handle;
|
|
82
|
+
const stat = await opened.stat();
|
|
83
|
+
if (!stat.isFile() || stat.nlink !== 1 || stat.uid !== OWNER || (stat.mode & 0o777) !== 0o600 || stat.size > maximum)
|
|
84
|
+
fail();
|
|
85
|
+
const bytes = await opened.readFile();
|
|
86
|
+
await assertSecureDirectory(directory);
|
|
87
|
+
return bytes;
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
await handle?.close().catch(() => undefined);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const syncDirectory = async (directory) => { const handle = await open(directory, constants.O_RDONLY); try {
|
|
94
|
+
await handle.sync();
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
await handle.close();
|
|
98
|
+
} };
|
|
99
|
+
const write = async (directory, file, content) => {
|
|
100
|
+
await assertSecureDirectory(directory);
|
|
101
|
+
const temp = `${file}.${process.pid}.${randomUUID()}.tmp`;
|
|
102
|
+
let handle;
|
|
103
|
+
try {
|
|
104
|
+
handle = await open(temp, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW, 0o600);
|
|
105
|
+
await handle.writeFile(content);
|
|
106
|
+
await handle.sync();
|
|
107
|
+
await handle.close();
|
|
108
|
+
handle = undefined;
|
|
109
|
+
await assertSecureDirectory(directory);
|
|
110
|
+
await rename(temp, file);
|
|
111
|
+
await syncDirectory(path.dirname(file));
|
|
112
|
+
await assertSecureDirectory(directory);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
await handle?.close().catch(() => undefined);
|
|
116
|
+
fail();
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const acquire = async (directory, lock) => {
|
|
120
|
+
for (let attempt = 0; attempt < 600; attempt += 1) {
|
|
121
|
+
await assertSecureDirectory(directory);
|
|
122
|
+
try {
|
|
123
|
+
const handle = await open(lock, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | constants.O_NOFOLLOW, 0o600);
|
|
124
|
+
await handle.close();
|
|
125
|
+
await assertSecureDirectory(directory);
|
|
126
|
+
return async () => { await assertSecureDirectory(directory); await unlink(lock).catch(fail); await assertSecureDirectory(directory); };
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (error.code !== "EEXIST")
|
|
130
|
+
fail();
|
|
131
|
+
const current = await lstat(lock).catch(() => null);
|
|
132
|
+
if (!current)
|
|
133
|
+
continue;
|
|
134
|
+
if (!current.isFile() || current.isSymbolicLink() || current.nlink !== 1 || current.uid !== OWNER || (current.mode & 0o777) !== 0o600)
|
|
135
|
+
fail();
|
|
136
|
+
if (Date.now() - current.mtimeMs > STALE_LOCK_MS) {
|
|
137
|
+
await unlink(lock).catch(() => undefined);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return fail();
|
|
144
|
+
};
|
|
145
|
+
/** Secure single-file persistence around the strict exact-key store. */
|
|
146
|
+
export const initializeFilesystemTargetLocalBundleStore = async (root) => {
|
|
147
|
+
const directory = await secureDirectory(root);
|
|
148
|
+
const archives = await secureDirectory(path.join(directory.path, "archives"));
|
|
149
|
+
const file = path.join(directory.path, "container-bundles.json");
|
|
150
|
+
const lock = `${file}.lock`;
|
|
151
|
+
const archive = async (digest) => {
|
|
152
|
+
if (typeof digest !== "string" || !/^sha256:[a-f0-9]{64}$/u.test(digest))
|
|
153
|
+
fail();
|
|
154
|
+
const exactDigest = digest;
|
|
155
|
+
const bytes = await read(archives, path.join(archives.path, exactDigest.slice(7)), 4_194_304);
|
|
156
|
+
if (!bytes || bytes.byteLength > 4_194_304 || `sha256:${createHash("sha256").update(bytes).digest("hex")}` !== exactDigest)
|
|
157
|
+
fail();
|
|
158
|
+
return bytes;
|
|
159
|
+
};
|
|
160
|
+
const writeArchive = async (request) => {
|
|
161
|
+
const bytes = Buffer.from(request.archive_base64, "base64");
|
|
162
|
+
if (bytes.byteLength > 4_194_304 || `sha256:${createHash("sha256").update(bytes).digest("hex")}` !== request.archive_digest)
|
|
163
|
+
fail();
|
|
164
|
+
const target = path.join(archives.path, request.archive_digest.slice(7));
|
|
165
|
+
const current = await read(archives, target, 4_194_304);
|
|
166
|
+
if (current && !current.equals(bytes))
|
|
167
|
+
fail();
|
|
168
|
+
else if (!current)
|
|
169
|
+
await write(archives, target, bytes);
|
|
170
|
+
};
|
|
171
|
+
const load = async () => {
|
|
172
|
+
await assertSecureDirectory(directory);
|
|
173
|
+
await assertSecureDirectory(archives);
|
|
174
|
+
const store = createMemoryTargetLocalBundleStore();
|
|
175
|
+
const text = await read(directory, file);
|
|
176
|
+
if (!text)
|
|
177
|
+
return store;
|
|
178
|
+
let state;
|
|
179
|
+
try {
|
|
180
|
+
state = JSON.parse(text.toString("utf8"));
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
fail();
|
|
184
|
+
}
|
|
185
|
+
if (!state || typeof state !== "object" || Array.isArray(state))
|
|
186
|
+
fail();
|
|
187
|
+
const value = state;
|
|
188
|
+
const records = value.records;
|
|
189
|
+
if (!Array.isArray(records) || Object.keys(value).sort().join("\0") !== "records\0version"
|
|
190
|
+
|| value.version !== "spawnfile.target-local-container-bundle.private.v2")
|
|
191
|
+
fail();
|
|
192
|
+
const hydrated = await Promise.all(records.map(async (raw) => {
|
|
193
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
194
|
+
fail();
|
|
195
|
+
const record = raw;
|
|
196
|
+
if (!record.request || typeof record.request !== "object" || Array.isArray(record.request))
|
|
197
|
+
fail();
|
|
198
|
+
const request = record.request;
|
|
199
|
+
if (Object.keys(request).includes("archive_base64") || typeof request.archive_digest !== "string")
|
|
200
|
+
fail();
|
|
201
|
+
return { ...record, request: { ...request, archive_base64: (await archive(request.archive_digest)).toString("base64") } };
|
|
202
|
+
}));
|
|
203
|
+
store.restore(hydrated);
|
|
204
|
+
return store;
|
|
205
|
+
};
|
|
206
|
+
const save = async (store) => {
|
|
207
|
+
const records = store.snapshot();
|
|
208
|
+
await Promise.all(records.map((record) => writeArchive(record.request)));
|
|
209
|
+
const privateRecords = records.map(({ request, ...record }) => { const { archive_base64: _archive, ...metadata } = request; return { ...record, request: metadata }; });
|
|
210
|
+
await write(directory, file, JSON.stringify({ records: privateRecords, version: "spawnfile.target-local-container-bundle.private.v2" }));
|
|
211
|
+
};
|
|
212
|
+
const mutate = async (action) => { const release = await acquire(directory, lock); try {
|
|
213
|
+
const store = await load();
|
|
214
|
+
const result = await action(store);
|
|
215
|
+
await save(store);
|
|
216
|
+
return result;
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
await release();
|
|
220
|
+
} };
|
|
221
|
+
/* The production adapter persists its exact mapping separately; this store keeps
|
|
222
|
+
admissions strict and intentionally exposes no scan/list primitive. */
|
|
223
|
+
const store = {
|
|
224
|
+
awaitReplay: async (raw) => {
|
|
225
|
+
const value = replayInput(raw);
|
|
226
|
+
const deadline = Date.now() + value.maximum_wait_ms;
|
|
227
|
+
for (;;) {
|
|
228
|
+
const result = await load().then((memory) => memory.lookup(value));
|
|
229
|
+
if (result.status !== "pending" || Date.now() >= deadline)
|
|
230
|
+
return result;
|
|
231
|
+
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
beginBuild: (value) => mutate((memory) => memory.beginBuild(value)),
|
|
235
|
+
reserve: (raw) => mutate((memory) => memory.reserve(raw)),
|
|
236
|
+
renew: (value) => mutate((memory) => memory.renew(value)),
|
|
237
|
+
retryMissingCompleted: (value) => mutate((memory) => memory.retryMissingCompleted(value)),
|
|
238
|
+
retryPrebuild: (value) => mutate((memory) => memory.retryPrebuild(value)),
|
|
239
|
+
complete: (value) => mutate((memory) => memory.complete(value)),
|
|
240
|
+
markIncomplete: (value) => mutate((memory) => memory.markIncomplete(value)),
|
|
241
|
+
resolve: (value) => load().then((memory) => memory.resolve(value)),
|
|
242
|
+
resolvePrepared: (value) => load().then((memory) => memory.resolvePrepared(value)),
|
|
243
|
+
stagePostbuild: (value) => mutate((memory) => memory.stagePostbuild(value)),
|
|
244
|
+
lookup: (value) => load().then((memory) => memory.lookup(value))
|
|
245
|
+
};
|
|
246
|
+
return Object.freeze(store);
|
|
247
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Private policy derivation for a target-local Docker bundle build. This
|
|
3
|
+
* intentionally produces only commitment digests; the base-image config ID
|
|
4
|
+
* remains an operator-side configuration input and is never a public receipt
|
|
5
|
+
* field.
|
|
6
|
+
*/
|
|
7
|
+
export declare const TARGET_LOCAL_CONTAINER_BUNDLE_POLICY: Readonly<{
|
|
8
|
+
builder: Readonly<{
|
|
9
|
+
dockerfile: "FROM pinned-config; WORKDIR /opt/bundle; COPY bundle; ENTRYPOINT node /opt/bundle/<entrypoint>; CMD []";
|
|
10
|
+
network: "none";
|
|
11
|
+
pull: false;
|
|
12
|
+
version: "spawnfile.target-local-container-bundle.builder.v1";
|
|
13
|
+
}>;
|
|
14
|
+
version: "spawnfile.target-local-container-bundle-policy.v1";
|
|
15
|
+
}>;
|
|
16
|
+
export interface TargetLocalContainerBundlePolicyInput {
|
|
17
|
+
readonly archiveDigest: string;
|
|
18
|
+
readonly artifactDigest: string;
|
|
19
|
+
readonly baseImageConfigDigest: string;
|
|
20
|
+
readonly bundleDigest: string;
|
|
21
|
+
readonly entrypoint: string;
|
|
22
|
+
readonly launcherDigest: string;
|
|
23
|
+
readonly networkAlias: string;
|
|
24
|
+
readonly platform: {
|
|
25
|
+
readonly architecture: "amd64" | "arm64";
|
|
26
|
+
readonly os: "linux";
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** One frozen derivation binds immutable bundle claims to the generic builder. */
|
|
30
|
+
export declare const deriveTargetLocalContainerBundlePolicy: (raw: TargetLocalContainerBundlePolicyInput) => Readonly<{
|
|
31
|
+
readonly buildPolicyDigest: `sha256:${string}`;
|
|
32
|
+
readonly platformDigest: `sha256:${string}`;
|
|
33
|
+
}>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Private policy derivation for a target-local Docker bundle build. This
|
|
4
|
+
* intentionally produces only commitment digests; the base-image config ID
|
|
5
|
+
* remains an operator-side configuration input and is never a public receipt
|
|
6
|
+
* field.
|
|
7
|
+
*/
|
|
8
|
+
export const TARGET_LOCAL_CONTAINER_BUNDLE_POLICY = Object.freeze({
|
|
9
|
+
builder: Object.freeze({
|
|
10
|
+
dockerfile: "FROM pinned-config; WORKDIR /opt/bundle; COPY bundle; ENTRYPOINT node /opt/bundle/<entrypoint>; CMD []",
|
|
11
|
+
network: "none",
|
|
12
|
+
pull: false,
|
|
13
|
+
version: "spawnfile.target-local-container-bundle.builder.v1"
|
|
14
|
+
}),
|
|
15
|
+
version: "spawnfile.target-local-container-bundle-policy.v1"
|
|
16
|
+
});
|
|
17
|
+
const DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
18
|
+
const ENTRYPOINT = /^[A-Za-z0-9][A-Za-z0-9._/-]{0,239}$/u;
|
|
19
|
+
const ALIAS = /^[a-z][a-z0-9-]{0,62}$/u;
|
|
20
|
+
const fail = () => {
|
|
21
|
+
throw new Error("Target-local container bundle policy failed");
|
|
22
|
+
};
|
|
23
|
+
const canonical = (value) => {
|
|
24
|
+
if (Array.isArray(value))
|
|
25
|
+
return `[${value.map(canonical).join(",")}]`;
|
|
26
|
+
if (value !== null && typeof value === "object") {
|
|
27
|
+
const entry = value;
|
|
28
|
+
return `{${Object.keys(entry).sort().map((key) => `${JSON.stringify(key)}:${canonical(entry[key])}`).join(",")}}`;
|
|
29
|
+
}
|
|
30
|
+
return JSON.stringify(value);
|
|
31
|
+
};
|
|
32
|
+
const digest = (domain, value) => `sha256:${createHash("sha256")
|
|
33
|
+
.update(`spawnfile.target-local-container-bundle.${domain}.v1\0`, "utf8")
|
|
34
|
+
.update(canonical(value), "utf8").digest("hex")}`;
|
|
35
|
+
/** One frozen derivation binds immutable bundle claims to the generic builder. */
|
|
36
|
+
export const deriveTargetLocalContainerBundlePolicy = (raw) => {
|
|
37
|
+
if (!raw || typeof raw !== "object"
|
|
38
|
+
|| ![raw.archiveDigest, raw.artifactDigest, raw.baseImageConfigDigest, raw.bundleDigest, raw.launcherDigest]
|
|
39
|
+
.every((value) => typeof value === "string" && DIGEST.test(value))
|
|
40
|
+
|| typeof raw.entrypoint !== "string" || !ENTRYPOINT.test(raw.entrypoint)
|
|
41
|
+
|| raw.entrypoint.includes("//") || raw.entrypoint.split("/").some((part) => part === "." || part === "..")
|
|
42
|
+
|| typeof raw.networkAlias !== "string" || !ALIAS.test(raw.networkAlias)
|
|
43
|
+
|| !raw.platform || raw.platform.os !== "linux"
|
|
44
|
+
|| (raw.platform.architecture !== "amd64" && raw.platform.architecture !== "arm64"))
|
|
45
|
+
fail();
|
|
46
|
+
const platform = Object.freeze({ architecture: raw.platform.architecture, os: "linux" });
|
|
47
|
+
const platformDigest = digest("platform", platform);
|
|
48
|
+
const buildPolicyDigest = digest("build-policy", {
|
|
49
|
+
builder: TARGET_LOCAL_CONTAINER_BUNDLE_POLICY.builder,
|
|
50
|
+
claims: {
|
|
51
|
+
archive_digest: raw.archiveDigest,
|
|
52
|
+
artifact_digest: raw.artifactDigest,
|
|
53
|
+
base_image_config_digest: raw.baseImageConfigDigest,
|
|
54
|
+
bundle_digest: raw.bundleDigest,
|
|
55
|
+
entrypoint: raw.entrypoint,
|
|
56
|
+
launcher_digest: raw.launcherDigest,
|
|
57
|
+
network_alias: raw.networkAlias,
|
|
58
|
+
platform,
|
|
59
|
+
platform_digest: platformDigest
|
|
60
|
+
},
|
|
61
|
+
version: TARGET_LOCAL_CONTAINER_BUNDLE_POLICY.version
|
|
62
|
+
});
|
|
63
|
+
return Object.freeze({ buildPolicyDigest, platformDigest });
|
|
64
|
+
};
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { type TargetLocalBundleLookup, type TargetLocalBundlePrepareReceipt, type TargetLocalBundlePrepareRequest } from "./containerBundleContracts.js";
|
|
2
|
+
import { type OpaqueTargetHandle } from "./contracts.js";
|
|
3
|
+
export interface TargetLocalBundlePrivateMapping {
|
|
4
|
+
readonly archive_digest: string;
|
|
5
|
+
readonly artifact_digest: string;
|
|
6
|
+
readonly base_image_config_digest: string;
|
|
7
|
+
readonly build_policy_digest: string;
|
|
8
|
+
readonly bundle_digest: string;
|
|
9
|
+
readonly config_id: string;
|
|
10
|
+
readonly daemon_epoch: string;
|
|
11
|
+
readonly entrypoint: string;
|
|
12
|
+
readonly gc_tag: string;
|
|
13
|
+
readonly identity_kind: "docker_image_config_digest";
|
|
14
|
+
readonly launcher_digest: string;
|
|
15
|
+
readonly network_alias: string;
|
|
16
|
+
readonly operation_handle: OpaqueTargetHandle;
|
|
17
|
+
readonly platform: {
|
|
18
|
+
readonly architecture: "amd64" | "arm64";
|
|
19
|
+
readonly os: "linux";
|
|
20
|
+
};
|
|
21
|
+
readonly platform_digest: string;
|
|
22
|
+
readonly request_digest: string;
|
|
23
|
+
readonly selected_target: TargetLocalBundlePrepareRequest["selected_target"];
|
|
24
|
+
}
|
|
25
|
+
export interface TargetLocalBundleLease {
|
|
26
|
+
readonly generation: number;
|
|
27
|
+
readonly lease_id: string;
|
|
28
|
+
readonly operation_handle: OpaqueTargetHandle;
|
|
29
|
+
readonly request_digest: string;
|
|
30
|
+
}
|
|
31
|
+
export type TargetLocalBundleWorkState = "prebuild" | "inflight" | "postbuild";
|
|
32
|
+
export type TargetLocalBundleReservation = {
|
|
33
|
+
readonly kind: "owner";
|
|
34
|
+
readonly lease: TargetLocalBundleLease;
|
|
35
|
+
readonly mapping?: TargetLocalBundlePrivateMapping;
|
|
36
|
+
readonly operation_handle: OpaqueTargetHandle;
|
|
37
|
+
readonly request_digest: string;
|
|
38
|
+
readonly state: TargetLocalBundleWorkState;
|
|
39
|
+
} | {
|
|
40
|
+
readonly generation: number;
|
|
41
|
+
readonly kind: "replay";
|
|
42
|
+
readonly mapping: TargetLocalBundlePrivateMapping;
|
|
43
|
+
readonly receipt: TargetLocalBundlePrepareReceipt;
|
|
44
|
+
} | {
|
|
45
|
+
readonly kind: "pending";
|
|
46
|
+
readonly operation_handle: OpaqueTargetHandle;
|
|
47
|
+
readonly request_digest: string;
|
|
48
|
+
readonly state: TargetLocalBundleWorkState;
|
|
49
|
+
} | {
|
|
50
|
+
readonly kind: "incomplete";
|
|
51
|
+
readonly operation_handle: OpaqueTargetHandle;
|
|
52
|
+
readonly request_digest: string;
|
|
53
|
+
};
|
|
54
|
+
export interface TargetLocalBundleStore {
|
|
55
|
+
/** Read-only, bounded join for another durable owner. It never reserves or recovers work. */
|
|
56
|
+
awaitReplay(input: {
|
|
57
|
+
readonly idempotency_key: unknown;
|
|
58
|
+
readonly maximum_wait_ms: unknown;
|
|
59
|
+
readonly request_digest: unknown;
|
|
60
|
+
}): Promise<TargetLocalBundleLookup>;
|
|
61
|
+
beginBuild(input: {
|
|
62
|
+
readonly lease: unknown;
|
|
63
|
+
}): Promise<TargetLocalBundleLease>;
|
|
64
|
+
complete(input: {
|
|
65
|
+
readonly lease: unknown;
|
|
66
|
+
readonly mapping: TargetLocalBundlePrivateMapping;
|
|
67
|
+
readonly receipt: unknown;
|
|
68
|
+
}): Promise<TargetLocalBundlePrepareReceipt>;
|
|
69
|
+
lookup(input: {
|
|
70
|
+
readonly idempotency_key: unknown;
|
|
71
|
+
readonly request_digest: unknown;
|
|
72
|
+
}): Promise<TargetLocalBundleLookup>;
|
|
73
|
+
markIncomplete(input: {
|
|
74
|
+
readonly lease: unknown;
|
|
75
|
+
readonly operation_handle: unknown;
|
|
76
|
+
readonly request_digest: unknown;
|
|
77
|
+
}): Promise<void>;
|
|
78
|
+
reserve(raw: unknown): Promise<TargetLocalBundleReservation>;
|
|
79
|
+
renew(input: {
|
|
80
|
+
readonly lease: unknown;
|
|
81
|
+
}): Promise<TargetLocalBundleLease>;
|
|
82
|
+
/** Atomically reclaims only the completed generation whose exact anchor was proven absent. */
|
|
83
|
+
retryMissingCompleted(input: {
|
|
84
|
+
readonly generation: unknown;
|
|
85
|
+
readonly operation_handle: unknown;
|
|
86
|
+
readonly request_digest: unknown;
|
|
87
|
+
}): Promise<TargetLocalBundleReservation>;
|
|
88
|
+
/** A reclaimed owner may retry only a proven absent pre-effect. */
|
|
89
|
+
retryPrebuild(input: {
|
|
90
|
+
readonly lease: unknown;
|
|
91
|
+
}): Promise<TargetLocalBundleLease>;
|
|
92
|
+
resolve(input: {
|
|
93
|
+
readonly operation_handle: unknown;
|
|
94
|
+
readonly request_digest: unknown;
|
|
95
|
+
}): Promise<TargetLocalBundlePrivateMapping | null>;
|
|
96
|
+
resolvePrepared(input: {
|
|
97
|
+
readonly artifact_digest: unknown;
|
|
98
|
+
readonly build_policy_digest: unknown;
|
|
99
|
+
readonly bundle_digest: unknown;
|
|
100
|
+
readonly selected_target: unknown;
|
|
101
|
+
}): Promise<{
|
|
102
|
+
readonly mapping: TargetLocalBundlePrivateMapping;
|
|
103
|
+
readonly request: TargetLocalBundlePrepareRequest;
|
|
104
|
+
} | null>;
|
|
105
|
+
stagePostbuild(input: {
|
|
106
|
+
readonly lease: unknown;
|
|
107
|
+
readonly mapping: TargetLocalBundlePrivateMapping;
|
|
108
|
+
}): Promise<TargetLocalBundleLease>;
|
|
109
|
+
}
|
|
110
|
+
export interface TargetLocalBundleStoredRecord {
|
|
111
|
+
readonly generation: number;
|
|
112
|
+
readonly idempotency_key: string;
|
|
113
|
+
readonly lease_expires_at: number | null;
|
|
114
|
+
readonly lease_id: string | null;
|
|
115
|
+
readonly mapping?: TargetLocalBundlePrivateMapping;
|
|
116
|
+
readonly operation_handle: OpaqueTargetHandle;
|
|
117
|
+
readonly receipt?: TargetLocalBundlePrepareReceipt;
|
|
118
|
+
readonly request: TargetLocalBundlePrepareRequest;
|
|
119
|
+
readonly request_digest: string;
|
|
120
|
+
readonly state: TargetLocalBundleWorkState | "completed" | "incomplete";
|
|
121
|
+
}
|
|
122
|
+
export interface TargetLocalBundleMemoryStore extends TargetLocalBundleStore {
|
|
123
|
+
restore(records: readonly unknown[]): void;
|
|
124
|
+
snapshot(): readonly TargetLocalBundleStoredRecord[];
|
|
125
|
+
}
|
|
126
|
+
/** Exact-key private store. It never enumerates Docker state or admits inverse config-ID lookup. */
|
|
127
|
+
export declare const createMemoryTargetLocalBundleStore: () => TargetLocalBundleMemoryStore;
|