spawnfile 0.1.12 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -12
- package/dist/audit/auditCli.d.ts +19 -0
- package/dist/audit/auditCli.js +63 -0
- package/dist/audit/checks.d.ts +100 -0
- package/dist/audit/checks.js +279 -0
- package/dist/audit/checksShared.d.ts +74 -0
- package/dist/audit/checksShared.js +37 -0
- package/dist/audit/generateAudit.d.ts +19 -0
- package/dist/audit/generateAudit.js +122 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.js +4 -0
- package/dist/audit/readAudit.d.ts +50 -0
- package/dist/audit/readAudit.js +59 -0
- package/dist/audit/types.d.ts +40 -0
- package/dist/audit/types.js +8 -0
- package/dist/auth/credentialEnvFile.d.ts +11 -0
- package/dist/auth/credentialEnvFile.js +60 -0
- package/dist/auth/credentialProvisioning.d.ts +15 -0
- package/dist/auth/credentialProvisioning.js +75 -0
- package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
- package/dist/auth/credentialProvisioningReceipt.js +70 -0
- package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
- package/dist/auth/credentialProvisioningRequest.js +169 -0
- package/dist/auth/credentialWorldBindings.d.ts +21 -0
- package/dist/auth/credentialWorldBindings.js +104 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/paths.d.ts +11 -0
- package/dist/auth/paths.js +21 -0
- package/dist/auth/runtimeCredentials.js +18 -2
- package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
- package/dist/auth/targetSecretSourceAuthor.js +52 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
- package/dist/auth/targetSecretSourceFsPublish.js +49 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
- package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
- package/dist/auth/targetSecretSourceFsRead.js +198 -0
- package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
- package/dist/auth/targetSecretSourceGrant.js +99 -0
- package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
- package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
- package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
- package/dist/auth/targetSecretSourceLifecycle.js +52 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
- package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
- package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
- package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
- package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
- package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
- package/dist/auth/targetSecretSourceResolver.js +137 -0
- package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
- package/dist/auth/targetSecretSourceRevoke.js +92 -0
- package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
- package/dist/auth/targetSecretSourceRotate.js +121 -0
- package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
- package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
- package/dist/cli/artifactsCommands.d.ts +27 -0
- package/dist/cli/artifactsCommands.js +132 -0
- package/dist/cli/authCommands.d.ts +5 -0
- package/dist/cli/authCommands.js +221 -0
- package/dist/cli/compileBuildCommands.d.ts +3 -0
- package/dist/cli/compileBuildCommands.js +35 -0
- package/dist/cli/containerBundleCommand.d.ts +6 -0
- package/dist/cli/containerBundleCommand.js +116 -0
- package/dist/cli/devCommands.d.ts +3 -0
- package/dist/cli/devCommands.js +115 -0
- package/dist/cli/downCommand.d.ts +25 -0
- package/dist/cli/downCommand.js +134 -0
- package/dist/cli/index.js +6 -3
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +11 -179
- package/dist/cli/lifecycleMachine.d.ts +19 -0
- package/dist/cli/lifecycleMachine.js +78 -0
- package/dist/cli/lifecyclePlan.d.ts +35 -0
- package/dist/cli/lifecyclePlan.js +240 -0
- package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
- package/dist/cli/lifecyclePlanningCommands.js +30 -0
- package/dist/cli/runCli.d.ts +15 -2
- package/dist/cli/runCli.js +31 -71
- package/dist/cli/runPublishCommands.d.ts +3 -0
- package/dist/cli/runPublishCommands.js +70 -0
- package/dist/cli/statusCommand.d.ts +3 -32
- package/dist/cli/statusCommand.js +37 -233
- package/dist/cli/statusCommandLive.d.ts +20 -0
- package/dist/cli/statusCommandLive.js +188 -0
- package/dist/cli/statusCommandOptions.d.ts +40 -0
- package/dist/cli/statusCommandOptions.js +42 -0
- package/dist/cli/targetCliRoute.d.ts +2 -0
- package/dist/cli/targetCliRoute.js +30 -0
- package/dist/cli/targetCommands.d.ts +33 -0
- package/dist/cli/targetCommands.js +257 -0
- package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
- package/dist/cli/targetComposedPreparationCommand.js +39 -0
- package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
- package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
- package/dist/cli/targetDefaultAuthorities.js +210 -0
- package/dist/cli/targetDefaultConfig.d.ts +68 -0
- package/dist/cli/targetDefaultConfig.js +317 -0
- package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
- package/dist/cli/targetDefaultConfigStdin.js +215 -0
- package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
- package/dist/cli/targetDefaultEnvelope.js +13 -0
- package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
- package/dist/cli/targetDefaultHandlerFactory.js +247 -0
- package/dist/cli/targetDefaultHandlers.d.ts +21 -0
- package/dist/cli/targetDefaultHandlers.js +72 -0
- package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
- package/dist/cli/targetDefaultJournalAuthority.js +135 -0
- package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
- package/dist/cli/targetDefaultWorldClock.js +14 -0
- package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
- package/dist/cli/targetDefaultWorldQueries.js +11 -0
- package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
- package/dist/cli/targetDefaultWorldReadiness.js +17 -0
- package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
- package/dist/cli/targetEvidenceHelperResolution.js +23 -0
- package/dist/cli/targetLookupCli.d.ts +3 -0
- package/dist/cli/targetLookupCli.js +31 -0
- package/dist/cli/targetLookupCommands.d.ts +12 -0
- package/dist/cli/targetLookupCommands.js +69 -0
- package/dist/cli/targetOperationDispatch.d.ts +58 -0
- package/dist/cli/targetOperationDispatch.js +21 -0
- package/dist/cli/targetReceiptOutput.d.ts +14 -0
- package/dist/cli/targetReceiptOutput.js +21 -0
- package/dist/cli/targetRequestFile.d.ts +14 -0
- package/dist/cli/targetRequestFile.js +63 -0
- package/dist/cli/targetSecretSourceInput.d.ts +28 -0
- package/dist/cli/targetSecretSourceInput.js +121 -0
- package/dist/cli/targetWorldClockCommand.d.ts +10 -0
- package/dist/cli/targetWorldClockCommand.js +42 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
- package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
- package/dist/cli/targetWorldReadinessCommand.js +43 -0
- package/dist/cli/upCommand.d.ts +3 -0
- package/dist/cli/upCommand.js +133 -0
- package/dist/cli/upImageCommand.d.ts +11 -0
- package/dist/cli/upImageCommand.js +41 -0
- package/dist/cli/upLifecycleInvocation.d.ts +41 -0
- package/dist/cli/upLifecycleInvocation.js +48 -0
- package/dist/cli/upLifecycleRecovery.d.ts +4 -0
- package/dist/cli/upLifecycleRecovery.js +53 -0
- package/dist/compiler/agentNodeMerge.d.ts +2 -0
- package/dist/compiler/agentNodeMerge.js +79 -0
- package/dist/compiler/agentSurfaces.js +11 -1
- package/dist/compiler/buildCompilePlan.js +17 -0
- package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
- package/dist/compiler/buildCompilePlanAgent.js +56 -0
- package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
- package/dist/compiler/buildCompilePlanTeams.js +4 -1
- package/dist/compiler/buildCompilePlanTraversal.js +75 -82
- package/dist/compiler/buildProject.d.ts +20 -1
- package/dist/compiler/buildProject.js +121 -7
- package/dist/compiler/compilePlanHelpers.js +2 -0
- package/dist/compiler/compileProject.d.ts +15 -0
- package/dist/compiler/compileProject.js +29 -75
- package/dist/compiler/compileProjectPolicy.d.ts +5 -0
- package/dist/compiler/compileProjectPolicy.js +21 -0
- package/dist/compiler/compileProjectReports.d.ts +9 -0
- package/dist/compiler/compileProjectReports.js +52 -0
- package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
- package/dist/compiler/containerArtifactSummaries.js +138 -0
- package/dist/compiler/containerArtifacts.d.ts +10 -0
- package/dist/compiler/containerArtifacts.js +126 -125
- package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
- package/dist/compiler/containerArtifactsPlans.js +31 -118
- package/dist/compiler/containerArtifactsRender.d.ts +3 -1
- package/dist/compiler/containerArtifactsRender.js +40 -81
- package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
- package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
- package/dist/compiler/containerConfigEnvRender.js +54 -0
- package/dist/compiler/containerEntrypointRender.d.ts +1 -0
- package/dist/compiler/containerEntrypointRender.js +60 -53
- package/dist/compiler/containerEntrypointShell.d.ts +5 -0
- package/dist/compiler/containerEntrypointShell.js +29 -0
- package/dist/compiler/containerPackageOverrides.d.ts +27 -0
- package/dist/compiler/containerPackageOverrides.js +63 -0
- package/dist/compiler/containerPackageRender.d.ts +15 -0
- package/dist/compiler/containerPackageRender.js +63 -0
- package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
- package/dist/compiler/containerTargetPlanResolution.js +97 -0
- package/dist/compiler/containerTargetResources.js +3 -1
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
- package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
- package/dist/compiler/dockerBuildContext.d.ts +16 -0
- package/dist/compiler/dockerBuildContext.js +159 -0
- package/dist/compiler/dockerBuildSkip.d.ts +30 -0
- package/dist/compiler/dockerBuildSkip.js +81 -0
- package/dist/compiler/index.d.ts +4 -0
- package/dist/compiler/index.js +4 -0
- package/dist/compiler/memoryArtifacts.d.ts +26 -0
- package/dist/compiler/memoryArtifacts.js +134 -0
- package/dist/compiler/memoryResolution.d.ts +4 -0
- package/dist/compiler/memoryResolution.js +147 -0
- package/dist/compiler/modelEnv.d.ts +2 -0
- package/dist/compiler/modelEnv.js +6 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
- package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
- package/dist/compiler/moltnetArtifactPaths.js +49 -0
- package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
- package/dist/compiler/moltnetArtifactTypes.js +1 -0
- package/dist/compiler/moltnetArtifacts.d.ts +2 -40
- package/dist/compiler/moltnetArtifacts.js +56 -95
- package/dist/compiler/moltnetBinaries.d.ts +21 -1
- package/dist/compiler/moltnetBinaries.js +156 -28
- package/dist/compiler/moltnetClientConfig.js +18 -2
- package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
- package/dist/compiler/moltnetConfigLowering.js +67 -5
- package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
- package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
- package/dist/compiler/moltnetNodeConfig.js +7 -2
- package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
- package/dist/compiler/moltnetReleaseAuthority.js +73 -0
- package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
- package/dist/compiler/moltnetReleaseDownload.js +85 -0
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
- package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
- package/dist/compiler/moltnetResolution.js +72 -20
- package/dist/compiler/moltnetRoomMemberships.js +37 -9
- package/dist/compiler/moltnetRuntimeConfig.js +11 -0
- package/dist/compiler/moltnetServerPlans.d.ts +9 -0
- package/dist/compiler/moltnetServerPlans.js +132 -0
- package/dist/compiler/organizationIdentity.d.ts +27 -0
- package/dist/compiler/organizationIdentity.js +297 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
- package/dist/compiler/organizationReadyEvidence.js +261 -0
- package/dist/compiler/projectManifestGraph.d.ts +4 -0
- package/dist/compiler/projectManifestGraph.js +24 -0
- package/dist/compiler/runProject.d.ts +4 -0
- package/dist/compiler/runProject.js +37 -22
- package/dist/compiler/runProjectAuth.d.ts +7 -1
- package/dist/compiler/runProjectAuth.js +87 -9
- package/dist/compiler/runProjectDocker.d.ts +7 -0
- package/dist/compiler/runProjectDocker.js +187 -19
- package/dist/compiler/runProjectLifecycle.d.ts +7 -0
- package/dist/compiler/runProjectLifecycle.js +40 -0
- package/dist/compiler/syncProjectAuth.js +4 -1
- package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
- package/dist/compiler/teamContextActiveEnvironments.js +255 -0
- package/dist/compiler/teamContextSupport.js +32 -40
- package/dist/compiler/teamContextTypes.d.ts +2 -0
- package/dist/compiler/types.d.ts +82 -1
- package/dist/compiler/upProject.d.ts +5 -0
- package/dist/compiler/upProject.js +257 -20
- package/dist/compiler/upReceipt.d.ts +36 -0
- package/dist/compiler/upReceipt.js +82 -0
- package/dist/compiler/updateProjectModels.js +42 -60
- package/dist/compiler/updateProjectRuntime.js +22 -35
- package/dist/compiler/updateProjectSurfaces.js +53 -47
- package/dist/compiler/worldBindings.d.ts +39 -0
- package/dist/compiler/worldBindings.js +247 -0
- package/dist/compiler/worldBindingsFile.d.ts +5 -0
- package/dist/compiler/worldBindingsFile.js +162 -0
- package/dist/deployment/artifactsExport.d.ts +49 -0
- package/dist/deployment/artifactsExport.js +217 -0
- package/dist/deployment/artifactsExportDocker.d.ts +48 -0
- package/dist/deployment/artifactsExportDocker.js +91 -0
- package/dist/deployment/artifactsExportPlan.d.ts +24 -0
- package/dist/deployment/artifactsExportPlan.js +135 -0
- package/dist/deployment/artifactsExportTypes.d.ts +50 -0
- package/dist/deployment/artifactsExportTypes.js +52 -0
- package/dist/deployment/buildImageCacheStore.d.ts +23 -0
- package/dist/deployment/buildImageCacheStore.js +54 -0
- package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
- package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
- package/dist/deployment/dockerInspect.d.ts +9 -0
- package/dist/deployment/dockerInspect.js +24 -1
- package/dist/deployment/dockerLabels.d.ts +2 -0
- package/dist/deployment/dockerLabels.js +2 -0
- package/dist/deployment/dockerLogs.js +2 -10
- package/dist/deployment/dockerManager.d.ts +51 -0
- package/dist/deployment/dockerManager.js +118 -1
- package/dist/deployment/dockerProbeGateway.js +64 -5
- package/dist/deployment/dockerRecover.d.ts +17 -0
- package/dist/deployment/dockerRecover.js +137 -0
- package/dist/deployment/dockerTeardown.d.ts +32 -0
- package/dist/deployment/dockerTeardown.js +61 -0
- package/dist/deployment/downDeployment.d.ts +34 -0
- package/dist/deployment/downDeployment.js +147 -0
- package/dist/deployment/downReceiptTypes.d.ts +21 -0
- package/dist/deployment/downReceiptTypes.js +30 -0
- package/dist/deployment/index.d.ts +17 -0
- package/dist/deployment/index.js +18 -0
- package/dist/deployment/lifecycleCompletion.d.ts +37 -0
- package/dist/deployment/lifecycleCompletion.js +236 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
- package/dist/deployment/lifecycleCompletionContracts.js +106 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
- package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
- package/dist/deployment/lifecycleCompletionLookup.js +88 -0
- package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
- package/dist/deployment/lifecycleCompletionOwner.js +31 -0
- package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
- package/dist/deployment/lifecycleCompletionParsing.js +108 -0
- package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
- package/dist/deployment/lifecycleCompletionPaths.js +16 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
- package/dist/deployment/lifecycleCompletionPublication.js +35 -0
- package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
- package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRoot.js +243 -0
- package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
- package/dist/deployment/lifecycleCompletionStore.js +151 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
- package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
- package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
- package/dist/deployment/organizationHandoffTypes.js +80 -0
- package/dist/deployment/organizationReady.d.ts +52 -0
- package/dist/deployment/organizationReady.js +200 -0
- package/dist/deployment/privateArtifactsExport.d.ts +18 -0
- package/dist/deployment/privateArtifactsExport.js +80 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
- package/dist/deployment/record.d.ts +26 -1
- package/dist/deployment/record.js +49 -4
- package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
- package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
- package/dist/deployment/target.d.ts +1 -35
- package/dist/deployment/target.js +1 -96
- package/dist/deployment/upReceiptTypes.d.ts +111 -0
- package/dist/deployment/upReceiptTypes.js +164 -0
- package/dist/dev/activity.d.ts +14 -0
- package/dist/dev/activity.js +48 -0
- package/dist/dev/docker.d.ts +16 -0
- package/dist/dev/docker.js +71 -0
- package/dist/dev/index.d.ts +2 -0
- package/dist/dev/index.js +2 -0
- package/dist/dev/project.d.ts +35 -0
- package/dist/dev/project.js +170 -0
- package/dist/distribution/buildDistributionReport.d.ts +2 -1
- package/dist/distribution/buildDistributionReport.js +2 -1
- package/dist/distribution/distributionReportSchema.d.ts +5 -0
- package/dist/distribution/distributionReportSchema.js +7 -2
- package/dist/distribution/index.d.ts +2 -2
- package/dist/distribution/index.js +1 -1
- package/dist/distribution/types.d.ts +7 -0
- package/dist/distribution/types.js +1 -0
- package/dist/filesystem/paths.js +10 -1
- package/dist/ledger/causalConformanceCli.d.ts +1 -0
- package/dist/ledger/causalConformanceCli.js +41 -0
- package/dist/ledger/causeNamespace.d.ts +8 -0
- package/dist/ledger/causeNamespace.js +24 -0
- package/dist/ledger/conformance.d.ts +83 -0
- package/dist/ledger/conformance.js +259 -0
- package/dist/ledger/emitters.d.ts +76 -0
- package/dist/ledger/emitters.js +188 -0
- package/dist/ledger/index.d.ts +4 -0
- package/dist/ledger/index.js +4 -0
- package/dist/ledger/principal.d.ts +96 -0
- package/dist/ledger/principal.js +121 -0
- package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
- package/dist/manifest/externalParticipantSchemas.js +17 -0
- package/dist/manifest/index.d.ts +1 -0
- package/dist/manifest/index.js +1 -0
- package/dist/manifest/inlineAgentMember.d.ts +2 -0
- package/dist/manifest/inlineAgentMember.js +9 -0
- package/dist/manifest/loadManifest.js +14 -8
- package/dist/manifest/mcpSchemas.d.ts +17 -0
- package/dist/manifest/mcpSchemas.js +41 -0
- package/dist/manifest/memorySchemas.d.ts +245 -0
- package/dist/manifest/memorySchemas.js +148 -0
- package/dist/manifest/renderSpawnfile.js +22 -131
- package/dist/manifest/renderSpawnfileNetworks.js +9 -2
- package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
- package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
- package/dist/manifest/schemas.d.ts +1868 -99
- package/dist/manifest/schemas.js +78 -32
- package/dist/manifest/surfaceSchemas.d.ts +17 -0
- package/dist/manifest/surfaceSchemas.js +24 -1
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
- package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
- package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
- package/dist/manifest/teamNetworkSchemas.js +3 -317
- package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
- package/dist/manifest/teamNetworkServerSchemas.js +199 -0
- package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
- package/dist/ownership/siblingBuildFreshness.js +20 -0
- package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
- package/dist/ownership/simfileRunOperatorInputs.js +139 -0
- package/dist/report/types.d.ts +142 -0
- package/dist/runtime/common.d.ts +37 -0
- package/dist/runtime/common.js +56 -1
- package/dist/runtime/container.d.ts +29 -1
- package/dist/runtime/container.js +127 -11
- package/dist/runtime/containerPackageOverrides.d.ts +37 -0
- package/dist/runtime/containerPackageOverrides.js +33 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/install.d.ts +1 -1
- package/dist/runtime/install.js +43 -1
- package/dist/runtime/mnemeMcp.d.ts +15 -0
- package/dist/runtime/mnemeMcp.js +109 -0
- package/dist/runtime/openclaw/adapter.js +15 -4
- package/dist/runtime/openclaw/mcp.d.ts +10 -0
- package/dist/runtime/openclaw/mcp.js +69 -0
- package/dist/runtime/openclaw/runAuth.js +2 -2
- package/dist/runtime/openclaw/scaffold.js +1 -1
- package/dist/runtime/openclaw/schedules.d.ts +38 -0
- package/dist/runtime/openclaw/schedules.js +74 -0
- package/dist/runtime/pi/adapter.d.ts +4 -0
- package/dist/runtime/pi/adapter.js +231 -0
- package/dist/runtime/pi/appActivitySource.d.ts +1 -0
- package/dist/runtime/pi/appActivitySource.js +199 -0
- package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
- package/dist/runtime/pi/appAgentConfig.js +264 -0
- package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
- package/dist/runtime/pi/appCliEnginesSource.js +183 -0
- package/dist/runtime/pi/appCliSource.d.ts +1 -0
- package/dist/runtime/pi/appCliSource.js +353 -0
- package/dist/runtime/pi/appControlSource.d.ts +1 -0
- package/dist/runtime/pi/appControlSource.js +390 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
- package/dist/runtime/pi/appCoreSource.d.ts +4 -0
- package/dist/runtime/pi/appCoreSource.js +244 -0
- package/dist/runtime/pi/appPreludeSource.d.ts +1 -0
- package/dist/runtime/pi/appPreludeSource.js +191 -0
- package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
- package/dist/runtime/pi/appScheduleSource.js +80 -0
- package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
- package/dist/runtime/pi/appScriptedEngine.js +42 -0
- package/dist/runtime/pi/appSource.d.ts +4 -0
- package/dist/runtime/pi/appSource.js +12 -0
- package/dist/runtime/pi/appTemplate.d.ts +14 -0
- package/dist/runtime/pi/appTemplate.js +27 -0
- package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
- package/dist/runtime/pi/appTemplateTypes.js +18 -0
- package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
- package/dist/runtime/pi/appWakeContextSource.js +398 -0
- package/dist/runtime/pi/containerTargets.d.ts +4 -0
- package/dist/runtime/pi/containerTargets.js +57 -0
- package/dist/runtime/pi/runAuth.d.ts +2 -0
- package/dist/runtime/pi/runAuth.js +185 -0
- package/dist/runtime/pi/testHelpers.d.ts +2 -0
- package/dist/runtime/pi/testHelpers.js +40 -0
- package/dist/runtime/picoclaw/adapter.js +23 -27
- package/dist/runtime/picoclaw/mcp.d.ts +4 -0
- package/dist/runtime/picoclaw/mcp.js +43 -0
- package/dist/runtime/picoclaw/memory.d.ts +7 -0
- package/dist/runtime/picoclaw/memory.js +17 -0
- package/dist/runtime/picoclaw/runAuth.js +1 -1
- package/dist/runtime/picoclaw/scaffold.js +1 -1
- package/dist/runtime/picoclaw/schedules.d.ts +26 -0
- package/dist/runtime/picoclaw/schedules.js +62 -3
- package/dist/runtime/registry.js +3 -0
- package/dist/runtime/scheduleUtils.d.ts +2 -0
- package/dist/runtime/scheduleUtils.js +15 -0
- package/dist/runtime/types.d.ts +26 -2
- package/dist/shared/errors.d.ts +1 -1
- package/dist/shared/errors.js +2 -2
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/shared/redaction.d.ts +2 -0
- package/dist/shared/redaction.js +10 -0
- package/dist/status/buildStatus.d.ts +1 -0
- package/dist/status/buildStatus.js +2 -0
- package/dist/status/compileReport.d.ts +22 -0
- package/dist/status/compileReport.js +16 -2
- package/dist/status/compiledProbeCollection.d.ts +21 -0
- package/dist/status/compiledProbeCollection.js +27 -0
- package/dist/status/deployments.js +5 -12
- package/dist/status/imageStatusReport.js +6 -0
- package/dist/status/index.d.ts +3 -0
- package/dist/status/index.js +3 -0
- package/dist/status/lifecycleProbes.d.ts +19 -0
- package/dist/status/lifecycleProbes.js +174 -0
- package/dist/status/moltnetProbes.d.ts +7 -8
- package/dist/status/moltnetProbes.js +27 -198
- package/dist/status/moltnetWiringProbes.d.ts +19 -0
- package/dist/status/moltnetWiringProbes.js +178 -0
- package/dist/target/cleanupRun.d.ts +41 -0
- package/dist/target/cleanupRun.js +139 -0
- package/dist/target/cleanupRunDocker.d.ts +16 -0
- package/dist/target/cleanupRunDocker.js +66 -0
- package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
- package/dist/target/cleanupRunDocker.test-helper.js +238 -0
- package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
- package/dist/target/cleanupRunDockerPreflight.js +224 -0
- package/dist/target/composedPreparation.d.ts +205 -0
- package/dist/target/composedPreparation.js +223 -0
- package/dist/target/containerBundle.d.ts +82 -0
- package/dist/target/containerBundle.js +243 -0
- package/dist/target/containerBundleArchive.d.ts +31 -0
- package/dist/target/containerBundleArchive.js +140 -0
- package/dist/target/containerBundleAuthority.d.ts +25 -0
- package/dist/target/containerBundleAuthority.js +65 -0
- package/dist/target/containerBundleContracts.d.ts +114 -0
- package/dist/target/containerBundleContracts.js +173 -0
- package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
- package/dist/target/containerBundleFilesystemStore.js +247 -0
- package/dist/target/containerBundlePolicy.d.ts +33 -0
- package/dist/target/containerBundlePolicy.js +64 -0
- package/dist/target/containerBundleStore.d.ts +127 -0
- package/dist/target/containerBundleStore.js +284 -0
- package/dist/target/contracts.d.ts +538 -0
- package/dist/target/contracts.js +373 -0
- package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
- package/dist/target/dockerArtifactIdentityTypes.js +1 -0
- package/dist/target/dockerArtifactInspection.d.ts +40 -0
- package/dist/target/dockerArtifactInspection.js +125 -0
- package/dist/target/dockerArtifacts.d.ts +21 -0
- package/dist/target/dockerArtifacts.js +110 -0
- package/dist/target/dockerArtifactsProvider.d.ts +41 -0
- package/dist/target/dockerArtifactsProvider.js +449 -0
- package/dist/target/dockerCommandExecutor.d.ts +27 -0
- package/dist/target/dockerCommandExecutor.js +200 -0
- package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
- package/dist/target/dockerCommandExecutorCore.js +273 -0
- package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
- package/dist/target/dockerContainerBundleBuilder.js +256 -0
- package/dist/target/dockerContextSnapshot.d.ts +21 -0
- package/dist/target/dockerContextSnapshot.js +158 -0
- package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
- package/dist/target/dockerEndpointFingerprint.js +9 -0
- package/dist/target/dockerPreparedArtifact.d.ts +48 -0
- package/dist/target/dockerPreparedArtifact.js +131 -0
- package/dist/target/dockerProjectionJson.d.ts +1 -0
- package/dist/target/dockerProjectionJson.js +80 -0
- package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
- package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
- package/dist/target/dockerResources.d.ts +26 -0
- package/dist/target/dockerResources.js +162 -0
- package/dist/target/dockerResourcesProvider.d.ts +44 -0
- package/dist/target/dockerResourcesProvider.js +207 -0
- package/dist/target/dockerSecrets.d.ts +39 -0
- package/dist/target/dockerSecrets.js +249 -0
- package/dist/target/dockerSecretsAuthority.d.ts +26 -0
- package/dist/target/dockerSecretsAuthority.js +216 -0
- package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
- package/dist/target/dockerSecretsLifecycle.js +133 -0
- package/dist/target/dockerSecretsProvider.d.ts +68 -0
- package/dist/target/dockerSecretsProvider.js +329 -0
- package/dist/target/dockerTarget.d.ts +52 -0
- package/dist/target/dockerTarget.js +48 -0
- package/dist/target/dockerTargetBinding.d.ts +14 -0
- package/dist/target/dockerTargetBinding.js +96 -0
- package/dist/target/dockerWorldClock.d.ts +17 -0
- package/dist/target/dockerWorldClock.js +111 -0
- package/dist/target/dockerWorldReadiness.d.ts +17 -0
- package/dist/target/dockerWorldReadiness.js +119 -0
- package/dist/target/dockerWorldService.d.ts +23 -0
- package/dist/target/dockerWorldService.js +216 -0
- package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
- package/dist/target/dockerWorldServiceAuthority.js +182 -0
- package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
- package/dist/target/dockerWorldServiceLifecycle.js +275 -0
- package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
- package/dist/target/dockerWorldServiceProvider.js +318 -0
- package/dist/target/dockerWorldServiceStore.d.ts +73 -0
- package/dist/target/dockerWorldServiceStore.js +367 -0
- package/dist/target/evidenceExport.d.ts +55 -0
- package/dist/target/evidenceExport.js +518 -0
- package/dist/target/evidenceExportArchive.d.ts +10 -0
- package/dist/target/evidenceExportArchive.js +302 -0
- package/dist/target/evidenceExportContract.d.ts +27 -0
- package/dist/target/evidenceExportContract.js +40 -0
- package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
- package/dist/target/evidenceExportOperationsTestKit.js +312 -0
- package/dist/target/evidenceExportProvider.d.ts +85 -0
- package/dist/target/evidenceExportProvider.js +187 -0
- package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
- package/dist/target/evidenceExportPublicationTypes.js +1 -0
- package/dist/target/evidenceExportStore.d.ts +70 -0
- package/dist/target/evidenceExportStore.js +498 -0
- package/dist/target/evidenceExportStorePublication.d.ts +7 -0
- package/dist/target/evidenceExportStorePublication.js +395 -0
- package/dist/target/handles.d.ts +20 -0
- package/dist/target/handles.js +56 -0
- package/dist/target/index.d.ts +12 -0
- package/dist/target/index.js +11 -0
- package/dist/target/journal.d.ts +59 -0
- package/dist/target/journal.js +529 -0
- package/dist/target/journalFilesystem.d.ts +3 -0
- package/dist/target/journalFilesystem.js +111 -0
- package/dist/target/journalRoot.d.ts +4 -0
- package/dist/target/journalRoot.js +6 -0
- package/dist/target/organizationAttachment.d.ts +23 -0
- package/dist/target/organizationAttachment.js +263 -0
- package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
- package/dist/target/organizationAttachmentAuthority.js +161 -0
- package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
- package/dist/target/organizationAttachmentLifecycle.js +101 -0
- package/dist/target/organizationAttachmentProvider.d.ts +76 -0
- package/dist/target/organizationAttachmentProvider.js +289 -0
- package/dist/target/organizationAttachmentStore.d.ts +51 -0
- package/dist/target/organizationAttachmentStore.js +316 -0
- package/dist/target/publicArtifactSnapshot.d.ts +41 -0
- package/dist/target/publicArtifactSnapshot.js +150 -0
- package/dist/target/topologyActivation.d.ts +51 -0
- package/dist/target/topologyActivation.js +149 -0
- package/dist/target/topologyAttestation.d.ts +37 -0
- package/dist/target/topologyAttestation.js +300 -0
- package/dist/target/topologyAttestationErrors.d.ts +1 -0
- package/dist/target/topologyAttestationErrors.js +1 -0
- package/dist/target/worldClock.d.ts +60 -0
- package/dist/target/worldClock.js +129 -0
- package/dist/target/worldReadiness.d.ts +103 -0
- package/dist/target/worldReadiness.js +153 -0
- package/moltnet-releases.json +20 -0
- package/package.json +29 -8
- package/runtimes.yaml +28 -27
- package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
- package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
- /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
- /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
import { open } from "node:fs/promises";
|
|
3
|
+
import { MAX_TARGET_SECRET_SOURCE_SECRET_BYTES, TARGET_SECRET_SOURCE_ERROR, assertOrdinaryJsonGraph, createCanonicalTargetSecretSourceJson, parseCanonicalTargetSecretSourceJson, parseTargetSecretSourceOpaqueHandle } from "../auth/targetSecretSourceRecordCommon.js";
|
|
4
|
+
import { parseTargetSecretSourceGrantCommandInput } from "../auth/targetSecretSourceGrantRecords.js";
|
|
5
|
+
export const TARGET_SECRET_SOURCE_REQUEST_VERSION = "spawnfile.auth.target-secret.source-request.v1";
|
|
6
|
+
export const TARGET_SECRET_SOURCE_GRANT_REQUEST_VERSION = "spawnfile.auth.target-secret.grant-request.v1";
|
|
7
|
+
export const TARGET_SECRET_SOURCE_RECEIPT_VERSION = "spawnfile.auth.target-secret.receipt.v1";
|
|
8
|
+
export const MAX_TARGET_SECRET_SOURCE_REQUEST_FILE_BYTES = 65_536;
|
|
9
|
+
const fail = () => { throw new Error(TARGET_SECRET_SOURCE_ERROR); };
|
|
10
|
+
const exact = (raw, keys) => {
|
|
11
|
+
assertOrdinaryJsonGraph(raw);
|
|
12
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
13
|
+
return fail();
|
|
14
|
+
const record = raw;
|
|
15
|
+
const actual = Object.keys(record).sort();
|
|
16
|
+
if (actual.length !== keys.length || actual.some((key, index) => key !== keys[index]))
|
|
17
|
+
fail();
|
|
18
|
+
return record;
|
|
19
|
+
};
|
|
20
|
+
export const parseTargetSecretSourceRequestBytes = (bytes) => {
|
|
21
|
+
const record = exact(parseCanonicalTargetSecretSourceJson(bytes), ["source_handle", "version"]);
|
|
22
|
+
if (record.version !== TARGET_SECRET_SOURCE_REQUEST_VERSION)
|
|
23
|
+
fail();
|
|
24
|
+
return Object.freeze({
|
|
25
|
+
source_handle: parseTargetSecretSourceOpaqueHandle(record.source_handle),
|
|
26
|
+
version: TARGET_SECRET_SOURCE_REQUEST_VERSION
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
export const parseTargetSecretSourceGrantRequestBytes = (bytes) => {
|
|
30
|
+
const record = exact(parseCanonicalTargetSecretSourceJson(bytes), ["grant", "version"]);
|
|
31
|
+
if (record.version !== TARGET_SECRET_SOURCE_GRANT_REQUEST_VERSION)
|
|
32
|
+
fail();
|
|
33
|
+
return parseTargetSecretSourceGrantCommandInput(record.grant);
|
|
34
|
+
};
|
|
35
|
+
const readRequestFile = async (filePath, parse, options) => {
|
|
36
|
+
let bytes;
|
|
37
|
+
let handle;
|
|
38
|
+
try {
|
|
39
|
+
handle = await open(filePath, "r");
|
|
40
|
+
const info = await handle.stat();
|
|
41
|
+
if (!info.isFile() || info.size < 1 || info.size > MAX_TARGET_SECRET_SOURCE_REQUEST_FILE_BYTES)
|
|
42
|
+
fail();
|
|
43
|
+
await options.beforeReadForTest?.();
|
|
44
|
+
bytes = Buffer.alloc(info.size + 1);
|
|
45
|
+
let offset = 0;
|
|
46
|
+
while (offset < bytes.length) {
|
|
47
|
+
const { bytesRead } = await handle.read(bytes, offset, bytes.length - offset, offset);
|
|
48
|
+
if (bytesRead === 0)
|
|
49
|
+
break;
|
|
50
|
+
offset += bytesRead;
|
|
51
|
+
}
|
|
52
|
+
if (offset !== info.size)
|
|
53
|
+
fail();
|
|
54
|
+
return parse(bytes.subarray(0, offset));
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return fail();
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
bytes?.fill(0);
|
|
61
|
+
await handle?.close().catch(() => undefined);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
export const readTargetSecretSourceRequestFile = (filePath, options = {}) => readRequestFile(filePath, parseTargetSecretSourceRequestBytes, options);
|
|
65
|
+
export const readTargetSecretSourceGrantRequestFile = (filePath, options = {}) => readRequestFile(filePath, parseTargetSecretSourceGrantRequestBytes, options);
|
|
66
|
+
export const createTargetSecretSourceReceiptBytes = (raw) => {
|
|
67
|
+
try {
|
|
68
|
+
const record = exact(raw, ["kind", "source_handle"]);
|
|
69
|
+
const kinds = ["author", "grant", "revoke-grant", "revoke-version", "rotate"];
|
|
70
|
+
if (!kinds.includes(record.kind))
|
|
71
|
+
fail();
|
|
72
|
+
const receipt = Object.freeze({
|
|
73
|
+
kind: record.kind,
|
|
74
|
+
source_handle: parseTargetSecretSourceOpaqueHandle(record.source_handle),
|
|
75
|
+
version: TARGET_SECRET_SOURCE_RECEIPT_VERSION
|
|
76
|
+
});
|
|
77
|
+
const canonical = createCanonicalTargetSecretSourceJson(receipt);
|
|
78
|
+
return canonical;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return fail();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
export const readBoundedTargetSecretStdin = async (input, maximumBytes) => {
|
|
85
|
+
const chunks = [];
|
|
86
|
+
let total = 0;
|
|
87
|
+
try {
|
|
88
|
+
if (!input || typeof input[Symbol.asyncIterator] !== "function"
|
|
89
|
+
|| !Number.isSafeInteger(maximumBytes) || maximumBytes < 1
|
|
90
|
+
|| maximumBytes > MAX_TARGET_SECRET_SOURCE_SECRET_BYTES)
|
|
91
|
+
fail();
|
|
92
|
+
for await (const raw of input) {
|
|
93
|
+
if (typeof raw === "string" && Buffer.byteLength(raw, "utf8") > maximumBytes - total)
|
|
94
|
+
fail();
|
|
95
|
+
if (raw instanceof Uint8Array && raw.byteLength > maximumBytes - total)
|
|
96
|
+
fail();
|
|
97
|
+
const chunk = typeof raw === "string" ? new TextEncoder().encode(raw)
|
|
98
|
+
: raw instanceof Uint8Array ? Uint8Array.from(raw) : fail();
|
|
99
|
+
chunks.push(chunk);
|
|
100
|
+
total += chunk.length;
|
|
101
|
+
if (total > maximumBytes)
|
|
102
|
+
fail();
|
|
103
|
+
}
|
|
104
|
+
if (total === 0)
|
|
105
|
+
fail();
|
|
106
|
+
const result = new Uint8Array(total);
|
|
107
|
+
let offset = 0;
|
|
108
|
+
for (const chunk of chunks) {
|
|
109
|
+
result.set(chunk, offset);
|
|
110
|
+
offset += chunk.length;
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return fail();
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
for (const chunk of chunks)
|
|
119
|
+
chunk.fill(0);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import { type TargetWorldClockReceipt, type TargetWorldClockRequest } from "../target/worldClock.js";
|
|
3
|
+
export interface TargetWorldClockSession {
|
|
4
|
+
queryWorldClock?(request: TargetWorldClockRequest): Promise<TargetWorldClockReceipt>;
|
|
5
|
+
}
|
|
6
|
+
export type TargetWorldClockSessionLoader = (configInput: unknown) => Promise<TargetWorldClockSession>;
|
|
7
|
+
export declare const registerTargetWorldClockCommand: (target: Command, session: TargetWorldClockSession | TargetWorldClockSessionLoader, streams: {
|
|
8
|
+
readonly stderr: (message: string) => void;
|
|
9
|
+
readonly stdout: (message: string) => void;
|
|
10
|
+
}, setExitCode: (exitCode: 1 | 2) => void) => void;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createCanonicalTargetWorldClockReceiptBytes, verifyTargetWorldClockReceipt, } from "../target/worldClock.js";
|
|
2
|
+
import { formatCaughtTargetCliError } from "./targetReceiptOutput.js";
|
|
3
|
+
import { readTargetWorldClockRequestFile } from "./targetRequestFile.js";
|
|
4
|
+
export const registerTargetWorldClockCommand = (target, session, streams, setExitCode) => {
|
|
5
|
+
target.command("query_world_clock")
|
|
6
|
+
.description("Query one exact activated world's observed public clock")
|
|
7
|
+
.argument("<request-file>", "Strict world clock request JSON file")
|
|
8
|
+
.action(async (requestFile) => {
|
|
9
|
+
let request;
|
|
10
|
+
try {
|
|
11
|
+
request = await readTargetWorldClockRequestFile(requestFile);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
streams.stderr("error: Invalid world clock request");
|
|
15
|
+
setExitCode(2);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
let active;
|
|
19
|
+
try {
|
|
20
|
+
active = typeof session === "function"
|
|
21
|
+
? await session(target.opts().config)
|
|
22
|
+
: session;
|
|
23
|
+
if (typeof active.queryWorldClock !== "function")
|
|
24
|
+
throw new TypeError();
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
streams.stderr("error: Invalid target configuration");
|
|
28
|
+
setExitCode(2);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const receipt = verifyTargetWorldClockReceipt({
|
|
33
|
+
receipt: await active.queryWorldClock(request), request,
|
|
34
|
+
});
|
|
35
|
+
streams.stdout(createCanonicalTargetWorldClockReceiptBytes(receipt));
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
streams.stderr(formatCaughtTargetCliError(error, "Target world clock query crashed"));
|
|
39
|
+
setExitCode(1);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type TargetWorldClockRequest } from "../target/worldClock.js";
|
|
2
|
+
export type BuiltWorldClockMode = "success" | "tick-zero" | "stale" | "topology" | "activation" | "nonzero-action";
|
|
3
|
+
export interface BuiltWorldClockState {
|
|
4
|
+
readonly callsPath: string;
|
|
5
|
+
readonly config: Readonly<Record<string, unknown>>;
|
|
6
|
+
readonly home: string;
|
|
7
|
+
readonly modePath: string;
|
|
8
|
+
readonly request: TargetWorldClockRequest;
|
|
9
|
+
readonly requestPath: string;
|
|
10
|
+
readonly root: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const createBuiltWorldClockState: () => Promise<BuiltWorldClockState>;
|
|
13
|
+
export declare const selectBuiltWorldClockMode: (state: BuiltWorldClockState, mode: BuiltWorldClockMode) => Promise<void>;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { chmod, mkdtemp, realpath, writeFile } from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { parseOpaqueTargetHandle } from "../target/contracts.js";
|
|
5
|
+
import { createDockerArtifactSpec } from "../target/dockerArtifactsProvider.js";
|
|
6
|
+
import { createDockerResourceSpec } from "../target/dockerResourcesProvider.js";
|
|
7
|
+
import { createWorldServiceAuthorization, parseWorldServiceResolution } from "../target/dockerWorldServiceAuthority.js";
|
|
8
|
+
import { worldServiceSpecForBinding } from "../target/dockerWorldServiceLifecycle.js";
|
|
9
|
+
import { createWorldServiceBinding, initializeWorldServiceAuthorityStore, worldServiceResourceBindings, } from "../target/dockerWorldServiceStore.js";
|
|
10
|
+
import { createCanonicalWorldServiceActivationBytes, createTargetTopologyActivationReceiptDigest, createWorldServiceActivationDigest, parseWorldServiceActivation, } from "../target/topologyActivation.js";
|
|
11
|
+
import { parseTargetWorldClockRequest } from "../target/worldClock.js";
|
|
12
|
+
const d = (value) => `sha256:${value.repeat(64).slice(0, 64)}`;
|
|
13
|
+
const h = (value) => parseOpaqueTargetHandle(`opaque_${value.repeat(16)}`);
|
|
14
|
+
const containerId = "c".repeat(64);
|
|
15
|
+
const after = (args, flag) => args[args.indexOf(flag) + 1];
|
|
16
|
+
const inspection = (spec) => ({
|
|
17
|
+
AutoRemove: false, BindCount: 0, CapAddCount: 0, CapDrop: ["ALL"], CgroupnsMode: "private", DeviceCount: 0,
|
|
18
|
+
DeviceRequestCount: 0, DnsCount: 0, Domainname: "", ExposedPortCount: 0, ExtraHostCount: 0, GroupAddCount: 0,
|
|
19
|
+
Hostname: spec.containerName, Id: containerId, Image: spec.imageReference, IpcMode: "none", Labels: spec.receiptLabels,
|
|
20
|
+
LinkCount: 0, LogType: "none", Mounts: spec.createArgs.filter((value, index, values) => values[index - 1] === "--mount")
|
|
21
|
+
.map((value) => Object.fromEntries(value.split(",").map((part) => part.split("=", 2))))
|
|
22
|
+
.map((mount) => ({ Destination: mount.dst, Name: mount.src, RW: mount.dst === spec.evidenceMountPath, Type: "volume" })),
|
|
23
|
+
Name: `/${spec.containerName}`, NetworkAliases: spec.networkAlias ? [spec.networkAlias] : null,
|
|
24
|
+
NetworkAttachmentCount: 1, NetworkAttachmentId: "b".repeat(64), NetworkAttachmentName: after(spec.createArgs, "--network"),
|
|
25
|
+
NetworkMode: after(spec.createArgs, "--network"), PidMode: "", PortBindingCount: 0, Privileged: false,
|
|
26
|
+
PublishAllPorts: false, ReadonlyRootfs: true, RestartMaximumRetryCount: 0, RestartPolicyName: "no",
|
|
27
|
+
SecurityOpt: ["no-new-privileges=true"], Status: "running", Tmpfs: { "/tmp": "rw,noexec,nosuid,nodev,size=1m,mode=1777" },
|
|
28
|
+
UTSMode: "", UsernsMode: "", VolumesFromCount: 0,
|
|
29
|
+
});
|
|
30
|
+
const fixture = () => {
|
|
31
|
+
const selectedTarget = { fingerprint: `sha256:${"1".repeat(32)}`, handle: h("1") };
|
|
32
|
+
const runId = "run-built-clock";
|
|
33
|
+
const dataClaim = { operationHandle: h("2"), requestDigest: d("2") };
|
|
34
|
+
const evidenceClaim = { operationHandle: h("3"), requestDigest: d("3") };
|
|
35
|
+
const data = createDockerResourceSpec({ kind: "data_network", ...dataClaim, runId, selectedTargetHandle: selectedTarget.handle });
|
|
36
|
+
const evidence = createDockerResourceSpec({ kind: "evidence_volume", ...evidenceClaim, runId, selectedTargetHandle: selectedTarget.handle });
|
|
37
|
+
const artifact = createDockerArtifactSpec({ artifactManifestDigest: d("4"), imageDigest: d("5"),
|
|
38
|
+
imageReference: `registry.example/world@${d("5")}`, operationHandle: h("4"), requestDigest: d("4"),
|
|
39
|
+
selectedTargetHandle: selectedTarget.handle });
|
|
40
|
+
const authorization = createWorldServiceAuthorization({ dataNetworkHandle: data.resultHandle, descriptorDigest: d("6"),
|
|
41
|
+
evidenceMountPath: "/run/world/evidence", evidenceVolumeHandle: evidence.resultHandle, operationHandle: h("6"),
|
|
42
|
+
requestDigest: d("6"), runId, secretBindingsHandle: h("7"), selectedTarget, worldArtifactHandle: artifact.resultHandle });
|
|
43
|
+
const resolution = parseWorldServiceResolution({ artifact: { artifact_manifest_digest: d("4"), identity_kind: "oci_image_manifest",
|
|
44
|
+
image_digest: artifact.imageDigest, image_reference: artifact.imageReference, operation_handle: h("4"),
|
|
45
|
+
request_digest: d("4"), result_handle: artifact.resultHandle }, authorization });
|
|
46
|
+
const resources = worldServiceResourceBindings({ dataNetworkClaim: dataClaim, evidenceVolumeClaim: evidenceClaim, resolution });
|
|
47
|
+
const spec = worldServiceSpecForBinding({ resolution, resources });
|
|
48
|
+
const binding = createWorldServiceBinding({ containerId, dataNetwork: resources.data_network, evidenceVolume: resources.evidence_volume,
|
|
49
|
+
resolution, secretBindings: resources.secret_bindings, spec });
|
|
50
|
+
const marker = parseWorldServiceActivation({ bundle_digest: d("8"), run_id: runId, state: "activated",
|
|
51
|
+
topology_receipt_digest: d("9"), topology_request_digest: d("a"), version: "spawnfile.world-service-activation.v1" });
|
|
52
|
+
const activationDigest = createWorldServiceActivationDigest(marker);
|
|
53
|
+
const activationReceiptDigest = createTargetTopologyActivationReceiptDigest({ activation_digest: activationDigest,
|
|
54
|
+
bundle_digest: marker.bundle_digest, receipt_digest: d("0"), run_id: runId, state: "activated",
|
|
55
|
+
topology_receipt_digest: marker.topology_receipt_digest, topology_request_digest: marker.topology_request_digest,
|
|
56
|
+
version: "spawnfile.target-topology-activation-receipt.v1" });
|
|
57
|
+
const request = parseTargetWorldClockRequest({ activation_digest: activationDigest,
|
|
58
|
+
activation_receipt_digest: activationReceiptDigest, descriptor_digest: authorization.descriptor_digest,
|
|
59
|
+
endpoint: { internal_port: 4_070, path: "/v1/world/clock" },
|
|
60
|
+
expected: { document_version: "world.clock-document.v1", world_instance_id: "world-built-clock" }, run_id: runId,
|
|
61
|
+
selected_target: selectedTarget, topology_receipt_digest: marker.topology_receipt_digest,
|
|
62
|
+
topology_request_digest: marker.topology_request_digest, version: "spawnfile.target-world-clock.request.v1",
|
|
63
|
+
world_service_handle: binding.world_service_handle });
|
|
64
|
+
return { binding, marker, request, spec };
|
|
65
|
+
};
|
|
66
|
+
export const createBuiltWorldClockState = async () => {
|
|
67
|
+
const root = await realpath(await mkdtemp(path.join(os.tmpdir(), "spawnfile-built-world-clock-")));
|
|
68
|
+
const home = path.join(root, "home");
|
|
69
|
+
const callsPath = path.join(root, "docker-calls.ndjson");
|
|
70
|
+
const modePath = path.join(root, "mode");
|
|
71
|
+
const scenariosPath = path.join(root, "scenarios.json");
|
|
72
|
+
const fakeDocker = path.join(root, "docker-clock");
|
|
73
|
+
const requestPath = path.join(root, "request.json");
|
|
74
|
+
const { binding, marker, request, spec } = fixture();
|
|
75
|
+
const store = await initializeWorldServiceAuthorityStore(path.join(home, "target", "world-authority"));
|
|
76
|
+
await store.bindService(binding);
|
|
77
|
+
const observation = { action_count: 0, clock: { completed_tick: 1, next_tick: 2, state: "running" },
|
|
78
|
+
run_id: request.run_id, version: request.expected.document_version, world_instance_id: request.expected.world_instance_id };
|
|
79
|
+
const topologyMarker = parseWorldServiceActivation({ ...marker, topology_receipt_digest: d("b") });
|
|
80
|
+
const activationMarker = parseWorldServiceActivation({ ...marker, bundle_digest: d("c") });
|
|
81
|
+
const scenarios = {
|
|
82
|
+
success: { marker: createCanonicalWorldServiceActivationBytes(marker), observation: JSON.stringify(observation) },
|
|
83
|
+
"tick-zero": { marker: createCanonicalWorldServiceActivationBytes(marker), observation: JSON.stringify({ ...observation,
|
|
84
|
+
clock: { completed_tick: 0, next_tick: 1, state: "running" } }) },
|
|
85
|
+
stale: { marker: createCanonicalWorldServiceActivationBytes(marker), observation: JSON.stringify({ ...observation, run_id: "run-stale-clock" }) },
|
|
86
|
+
topology: { marker: createCanonicalWorldServiceActivationBytes(topologyMarker), observation: JSON.stringify(observation) },
|
|
87
|
+
activation: { marker: createCanonicalWorldServiceActivationBytes(activationMarker), observation: JSON.stringify(observation) },
|
|
88
|
+
"nonzero-action": { marker: createCanonicalWorldServiceActivationBytes(marker), observation: JSON.stringify({ ...observation, action_count: 1 }) },
|
|
89
|
+
};
|
|
90
|
+
await writeFile(callsPath, "", { mode: 0o600 });
|
|
91
|
+
await writeFile(modePath, "success", { mode: 0o600 });
|
|
92
|
+
await writeFile(scenariosPath, JSON.stringify(scenarios), { mode: 0o600 });
|
|
93
|
+
await writeFile(requestPath, JSON.stringify(request), { mode: 0o600 });
|
|
94
|
+
await writeFile(fakeDocker, `#!${process.execPath}
|
|
95
|
+
const fs=require("node:fs");const args=process.argv.slice(2);
|
|
96
|
+
fs.appendFileSync(${JSON.stringify(callsPath)},JSON.stringify(args)+"\\n");
|
|
97
|
+
const all=JSON.parse(fs.readFileSync(${JSON.stringify(scenariosPath)},"utf8"));
|
|
98
|
+
const current=all[fs.readFileSync(${JSON.stringify(modePath)},"utf8").trim()];
|
|
99
|
+
if(args[2]==="container"&&args[3]==="inspect")process.stdout.write(${JSON.stringify(JSON.stringify([inspection(spec)]))});
|
|
100
|
+
else if(args[2]==="container"&&args[3]==="exec"&&args.includes("/bin/cat"))process.stdout.write(current.marker);
|
|
101
|
+
else if(args[2]==="container"&&args[3]==="exec"&&args.includes("/usr/local/bin/node"))process.stdout.write(current.observation);
|
|
102
|
+
else{process.stderr.write("unexpected fake Docker command\\n");process.exitCode=71;}
|
|
103
|
+
`, { mode: 0o700 });
|
|
104
|
+
await chmod(fakeDocker, 0o700);
|
|
105
|
+
return { callsPath, config: { context: "built_clock", dockerCommand: fakeDocker,
|
|
106
|
+
evidenceDestination: path.join(root, "unused.tar"), timeoutMs: 10_000,
|
|
107
|
+
version: "spawnfile.target-default-config.v1" }, home, modePath, request, requestPath, root };
|
|
108
|
+
};
|
|
109
|
+
export const selectBuiltWorldClockMode = async (state, mode) => { await writeFile(state.modePath, mode, { mode: 0o600 }); };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import { type TargetWorldReadinessRequest, type TargetWorldReadinessReceipt } from "../target/worldReadiness.js";
|
|
3
|
+
export interface TargetWorldReadinessSession {
|
|
4
|
+
queryWorldReadiness?(request: TargetWorldReadinessRequest): Promise<TargetWorldReadinessReceipt>;
|
|
5
|
+
}
|
|
6
|
+
export type TargetWorldReadinessSessionLoader = (configInput: unknown) => Promise<TargetWorldReadinessSession>;
|
|
7
|
+
export declare const registerTargetWorldReadinessCommand: (target: Command, session: TargetWorldReadinessSession | TargetWorldReadinessSessionLoader, streams: {
|
|
8
|
+
readonly stderr: (message: string) => void;
|
|
9
|
+
readonly stdout: (message: string) => void;
|
|
10
|
+
}, setExitCode: (exitCode: 1 | 2) => void) => void;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { createCanonicalTargetWorldReadinessReceiptBytes, verifyTargetWorldReadinessReceipt } from "../target/worldReadiness.js";
|
|
2
|
+
import { formatCaughtTargetCliError } from "./targetReceiptOutput.js";
|
|
3
|
+
import { readTargetWorldReadinessRequestFile } from "./targetRequestFile.js";
|
|
4
|
+
export const registerTargetWorldReadinessCommand = (target, session, streams, setExitCode) => {
|
|
5
|
+
target.command("query_world_readiness")
|
|
6
|
+
.description("Query one exact running world's public readiness document")
|
|
7
|
+
.argument("<request-file>", "Strict world readiness request JSON file")
|
|
8
|
+
.action(async (requestFile) => {
|
|
9
|
+
let request;
|
|
10
|
+
try {
|
|
11
|
+
request = await readTargetWorldReadinessRequestFile(requestFile);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
streams.stderr("error: Invalid world readiness request");
|
|
15
|
+
setExitCode(2);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
let activeSession;
|
|
19
|
+
try {
|
|
20
|
+
activeSession = typeof session === "function"
|
|
21
|
+
? await session(target.opts().config)
|
|
22
|
+
: session;
|
|
23
|
+
if (typeof activeSession.queryWorldReadiness !== "function")
|
|
24
|
+
throw new TypeError();
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
streams.stderr("error: Invalid target configuration");
|
|
28
|
+
setExitCode(2);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const receipt = verifyTargetWorldReadinessReceipt({
|
|
33
|
+
receipt: await activeSession.queryWorldReadiness(request),
|
|
34
|
+
request
|
|
35
|
+
});
|
|
36
|
+
streams.stdout(createCanonicalTargetWorldReadinessReceiptBytes(receipt));
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
streams.stderr(formatCaughtTargetCliError(error, "Target world readiness query crashed"));
|
|
40
|
+
setExitCode(1);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { open } from "node:fs/promises";
|
|
3
|
+
import { createDeploymentInstanceDigest, readDeploymentRecord, recordLifecycleOutcomeEvidence } from "../deployment/index.js";
|
|
4
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
5
|
+
import { requireMachineLifecycle, runMachineLifecycle } from "./lifecycleMachine.js";
|
|
6
|
+
import { resolveCommandInput } from "./resolveCommandInput.js";
|
|
7
|
+
import { runImageUpCommand } from "./upImageCommand.js";
|
|
8
|
+
import { createUpLifecycleInvocation, createUpProjectOptions } from "./upLifecycleInvocation.js";
|
|
9
|
+
import { reconcileUpLifecycle } from "./upLifecycleRecovery.js";
|
|
10
|
+
const readSelectedTargetReceipt = async (file) => {
|
|
11
|
+
if (typeof file !== "string" || file.length < 1 || Buffer.byteLength(file, "utf8") > 4096) {
|
|
12
|
+
throw new SpawnfileError("validation_error", "Invalid selected target receipt");
|
|
13
|
+
}
|
|
14
|
+
let handle;
|
|
15
|
+
try {
|
|
16
|
+
handle = await open(file, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
17
|
+
const stat = await handle.stat();
|
|
18
|
+
if (!stat.isFile() || stat.size < 1 || stat.size > 65_536)
|
|
19
|
+
throw new Error();
|
|
20
|
+
return JSON.parse(await handle.readFile("utf8"));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
throw new SpawnfileError("validation_error", "Invalid selected target receipt");
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
await handle?.close().catch(() => undefined);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
export const registerUpCommand = (program, handlers, streams) => {
|
|
30
|
+
program
|
|
31
|
+
.command("up")
|
|
32
|
+
.description("Deploy an organization from a project or a published image reference")
|
|
33
|
+
.argument("[path]", "Project directory, Spawnfile path, or image reference", process.cwd())
|
|
34
|
+
.option("-o, --out <directory>", "Output directory")
|
|
35
|
+
.option("-t, --tag <image>", "Docker image tag")
|
|
36
|
+
.option("--auth-profile <name>", "Local Spawnfile auth profile")
|
|
37
|
+
.option("--context <name>", "Docker context for the deployment target")
|
|
38
|
+
.option("--deployment <name>", "Detached deployment record name")
|
|
39
|
+
.option("--docker-command <command>", "Docker command")
|
|
40
|
+
.option("--name <container>", "Docker container name")
|
|
41
|
+
.option("--env-file <file>", "Path to an env file for runtime secrets")
|
|
42
|
+
.option("--world-bindings <file>", "Path to a versioned world-bindings artifact")
|
|
43
|
+
.option("--selected-target-receipt-digest <digest>", "Selected target receipt digest for an organization handoff")
|
|
44
|
+
.option("--selected-target-receipt <file>", "Selected target receipt for an organization handoff")
|
|
45
|
+
.option("--network-attachment-handle <handle>", "Opaque network attachment handle for an organization handoff")
|
|
46
|
+
.option("--organization-handoff-run-id <id>", "Authorized run id for an organization handoff")
|
|
47
|
+
.option("--descriptor-digest <digest>", "Production descriptor digest for an organization handoff")
|
|
48
|
+
.option("--image", "Interpret the argument as an image reference")
|
|
49
|
+
.option("--pull", "Pull the image before deploying")
|
|
50
|
+
.option("-d, --detach", "Run the container in detached mode")
|
|
51
|
+
.option("--json", "Render a spawnfile.up-receipt.v1 machine-readable receipt")
|
|
52
|
+
.option("--lifecycle-invocation <id>", "Durably bind this exact JSON lifecycle invocation")
|
|
53
|
+
.action(async (inputPath, options) => {
|
|
54
|
+
requireMachineLifecycle(options.lifecycleInvocation, options.json);
|
|
55
|
+
const upInput = resolveCommandInput(inputPath, { forceImage: options.image });
|
|
56
|
+
if (upInput.kind === "invalid") {
|
|
57
|
+
throw new SpawnfileError("validation_error", `Cannot resolve "${inputPath}" as a project path or image reference. ` +
|
|
58
|
+
"Pass a project directory, a Spawnfile path, or an image like 'name:tag' (use --image to force image mode).");
|
|
59
|
+
}
|
|
60
|
+
if (upInput.kind === "image") {
|
|
61
|
+
if (options.selectedTargetReceiptDigest !== undefined ||
|
|
62
|
+
options.selectedTargetReceipt !== undefined ||
|
|
63
|
+
options.networkAttachmentHandle !== undefined ||
|
|
64
|
+
options.organizationHandoffRunId !== undefined ||
|
|
65
|
+
options.descriptorDigest !== undefined) {
|
|
66
|
+
throw new SpawnfileError("validation_error", "Organization handoff inputs are only supported for project-mode deployments");
|
|
67
|
+
}
|
|
68
|
+
if (options.worldBindings !== undefined) {
|
|
69
|
+
throw new SpawnfileError("validation_error", "`--world-bindings` is only supported for project-mode deployments");
|
|
70
|
+
}
|
|
71
|
+
if (options.json) {
|
|
72
|
+
throw new SpawnfileError("validation_error", "`spawnfile up --json` is not yet supported for image-mode deployments " +
|
|
73
|
+
"(there is no source Spawnfile to derive compiled_schedule from).");
|
|
74
|
+
}
|
|
75
|
+
await runImageUpCommand(upInput.ref, options, handlers, streams);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const handoffValues = [
|
|
79
|
+
options.descriptorDigest,
|
|
80
|
+
options.organizationHandoffRunId,
|
|
81
|
+
options.selectedTargetReceipt,
|
|
82
|
+
options.selectedTargetReceiptDigest,
|
|
83
|
+
options.networkAttachmentHandle,
|
|
84
|
+
options.worldBindings
|
|
85
|
+
];
|
|
86
|
+
if (handoffValues.some((value) => value !== undefined) &&
|
|
87
|
+
handoffValues.some((value) => value === undefined)) {
|
|
88
|
+
throw new SpawnfileError("validation_error", "Organization handoff requires --organization-handoff-run-id, --descriptor-digest, --selected-target-receipt, --selected-target-receipt-digest, --network-attachment-handle, and --world-bindings");
|
|
89
|
+
}
|
|
90
|
+
if (options.lifecycleInvocation !== undefined &&
|
|
91
|
+
(!options.detach ||
|
|
92
|
+
!options.deployment ||
|
|
93
|
+
handoffValues.some((value) => value === undefined))) {
|
|
94
|
+
throw new SpawnfileError("validation_error", "Machine lifecycle up requires a detached deployment with durable organization handoff authority");
|
|
95
|
+
}
|
|
96
|
+
if (options.json) {
|
|
97
|
+
const exactInvocation = options.lifecycleInvocation === undefined
|
|
98
|
+
? undefined
|
|
99
|
+
: createUpLifecycleInvocation(inputPath, {
|
|
100
|
+
...options,
|
|
101
|
+
forceImage: options.image,
|
|
102
|
+
lifecycleInvocation: options.lifecycleInvocation
|
|
103
|
+
});
|
|
104
|
+
const render = async (capability) => {
|
|
105
|
+
const selectedTargetReceipt = options.selectedTargetReceipt === undefined
|
|
106
|
+
? undefined
|
|
107
|
+
: await readSelectedTargetReceipt(options.selectedTargetReceipt);
|
|
108
|
+
const result = await handlers.upProject(inputPath, createUpProjectOptions({ ...options, selectedTargetReceipt }));
|
|
109
|
+
const receipt = await handlers.buildUpReceipt(inputPath, result);
|
|
110
|
+
const bytes = JSON.stringify(receipt, null, 2);
|
|
111
|
+
if (exactInvocation && capability) {
|
|
112
|
+
await recordLifecycleOutcomeEvidence(exactInvocation, bytes, capability, result.deploymentRecordPath
|
|
113
|
+
? createDeploymentInstanceDigest(await readDeploymentRecord(result.deploymentRecordPath))
|
|
114
|
+
: "");
|
|
115
|
+
}
|
|
116
|
+
return bytes;
|
|
117
|
+
};
|
|
118
|
+
const output = options.lifecycleInvocation === undefined
|
|
119
|
+
? await render()
|
|
120
|
+
: await runMachineLifecycle(exactInvocation, render, () => reconcileUpLifecycle(inputPath, options, exactInvocation));
|
|
121
|
+
streams.stdout(output);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const result = await handlers.upProject(inputPath, createUpProjectOptions(options));
|
|
125
|
+
streams.stdout(`built image ${result.imageTag}`);
|
|
126
|
+
streams.stdout(`compiled to ${result.outputDirectory}`);
|
|
127
|
+
streams.stdout(`report: ${result.reportPath}`);
|
|
128
|
+
if (options.detach) {
|
|
129
|
+
streams.stdout(`running container ${result.containerName ?? "unknown"}`);
|
|
130
|
+
streams.stdout(`image: ${result.imageTag}`);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CliHandlers, CliStreams } from "./runCli.js";
|
|
2
|
+
interface ImageUpOptions {
|
|
3
|
+
authProfile?: string;
|
|
4
|
+
context?: string;
|
|
5
|
+
deployment?: string;
|
|
6
|
+
dockerCommand?: string;
|
|
7
|
+
envFile?: string;
|
|
8
|
+
pull?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const runImageUpCommand: (ref: string, options: ImageUpOptions, handlers: CliHandlers, streams: CliStreams) => Promise<void>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { readRunEnvFile } from "../compiler/runProjectAuth.js";
|
|
2
|
+
const shortDigest = (digest) => digest ? digest.replace(/^sha256:/, "").slice(0, 12) : "unknown";
|
|
3
|
+
const redeploySummary = (previous, newRef, newDigest) => {
|
|
4
|
+
if (previous.ref === newRef &&
|
|
5
|
+
newDigest !== null &&
|
|
6
|
+
previous.digest === newDigest) {
|
|
7
|
+
return `redeployed image ${newRef} (digest unchanged ${shortDigest(newDigest)})`;
|
|
8
|
+
}
|
|
9
|
+
return (`redeployed image: ${previous.ref} (${shortDigest(previous.digest)}) ` +
|
|
10
|
+
`→ ${newRef} (${shortDigest(newDigest)})`);
|
|
11
|
+
};
|
|
12
|
+
export const runImageUpCommand = async (ref, options, handlers, streams) => {
|
|
13
|
+
const authProfile = options.authProfile && handlers.requireAuthProfile
|
|
14
|
+
? await handlers.requireAuthProfile(options.authProfile)
|
|
15
|
+
: null;
|
|
16
|
+
const envFileEnv = await readRunEnvFile(options.envFile);
|
|
17
|
+
const consumed = await handlers.consumeImageUp(ref, {
|
|
18
|
+
authProfile,
|
|
19
|
+
authProfileName: options.authProfile ?? null,
|
|
20
|
+
authValues: authProfile?.env ?? {},
|
|
21
|
+
deploymentName: options.deployment,
|
|
22
|
+
dockerCommand: options.dockerCommand,
|
|
23
|
+
dockerContext: options.context,
|
|
24
|
+
envFileEnv,
|
|
25
|
+
envFilePath: options.envFile ?? null,
|
|
26
|
+
pull: options.pull,
|
|
27
|
+
});
|
|
28
|
+
if (consumed.previous) {
|
|
29
|
+
const digest = consumed.record.source.kind === "image"
|
|
30
|
+
? consumed.record.source.digest
|
|
31
|
+
: null;
|
|
32
|
+
streams.stdout(redeploySummary(consumed.previous, consumed.imageRef, digest));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
streams.stdout(`deployed image ${consumed.imageRef}`);
|
|
36
|
+
}
|
|
37
|
+
streams.stdout(`deployment: ${consumed.deploymentName}`);
|
|
38
|
+
streams.stdout(`running container ${consumed.containerName}`);
|
|
39
|
+
streams.stdout(`record: ${consumed.recordPath}`);
|
|
40
|
+
streams.stdout(`next: spawnfile status --deployment ${consumed.deploymentName} --live`);
|
|
41
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { LifecycleInvocation } from "../deployment/index.js";
|
|
2
|
+
export interface UpLifecycleOptions {
|
|
3
|
+
authProfile?: string;
|
|
4
|
+
context?: string;
|
|
5
|
+
deployment?: string;
|
|
6
|
+
descriptorDigest?: string;
|
|
7
|
+
detach?: boolean;
|
|
8
|
+
dockerCommand?: string;
|
|
9
|
+
envFile?: string;
|
|
10
|
+
forceImage?: boolean;
|
|
11
|
+
lifecycleInvocation?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
networkAttachmentHandle?: string;
|
|
14
|
+
organizationHandoffRunId?: string;
|
|
15
|
+
out?: string;
|
|
16
|
+
pull?: boolean;
|
|
17
|
+
selectedTargetReceipt?: unknown;
|
|
18
|
+
selectedTargetReceiptDigest?: string;
|
|
19
|
+
tag?: string;
|
|
20
|
+
worldBindings?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare const createUpLifecycleInvocation: (inputPath: string, options: UpLifecycleOptions & {
|
|
23
|
+
lifecycleInvocation: string;
|
|
24
|
+
}) => LifecycleInvocation;
|
|
25
|
+
export declare const createUpProjectOptions: (options: UpLifecycleOptions) => {
|
|
26
|
+
worldBindingsPath?: string | undefined;
|
|
27
|
+
selectedTargetReceipt?: {} | null | undefined;
|
|
28
|
+
selectedTargetReceiptDigest?: string | undefined;
|
|
29
|
+
networkAttachmentHandle?: string | undefined;
|
|
30
|
+
authProfile: string | undefined;
|
|
31
|
+
containerName: string | undefined;
|
|
32
|
+
detach: boolean | undefined;
|
|
33
|
+
deploymentName: string | undefined;
|
|
34
|
+
dockerCommand: string | undefined;
|
|
35
|
+
dockerContext: string | undefined;
|
|
36
|
+
descriptorDigest: string | undefined;
|
|
37
|
+
envFilePath: string | undefined;
|
|
38
|
+
imageTag: string | undefined;
|
|
39
|
+
organizationHandoffRunId: string | undefined;
|
|
40
|
+
outputDirectory: string | undefined;
|
|
41
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { createLifecycleInvocation, digestLifecycleBinding, } from "./lifecycleMachine.js";
|
|
3
|
+
export const createUpLifecycleInvocation = (inputPath, options) => createLifecycleInvocation(options.lifecycleInvocation, "up", {
|
|
4
|
+
input_kind: "project",
|
|
5
|
+
project_path: path.resolve(inputPath),
|
|
6
|
+
}, {
|
|
7
|
+
auth_profile_digest: digestLifecycleBinding(options.authProfile),
|
|
8
|
+
container_name: options.name ?? null,
|
|
9
|
+
deployment: options.deployment ?? null,
|
|
10
|
+
detach: options.detach ?? false,
|
|
11
|
+
docker_command_digest: digestLifecycleBinding(options.dockerCommand),
|
|
12
|
+
docker_context: options.context ?? null,
|
|
13
|
+
descriptor_digest: options.descriptorDigest ?? null,
|
|
14
|
+
env_file_digest: digestLifecycleBinding(options.envFile),
|
|
15
|
+
force_image: options.forceImage ?? false,
|
|
16
|
+
image_tag: options.tag ?? null,
|
|
17
|
+
network_attachment_handle_digest: digestLifecycleBinding(options.networkAttachmentHandle),
|
|
18
|
+
organization_handoff_run_id: options.organizationHandoffRunId ?? null,
|
|
19
|
+
output_directory: options.out ? path.resolve(options.out) : null,
|
|
20
|
+
pull: options.pull ?? false,
|
|
21
|
+
selected_target_receipt_digest: options.selectedTargetReceiptDigest ?? null,
|
|
22
|
+
world_bindings_digest: digestLifecycleBinding(options.worldBindings),
|
|
23
|
+
});
|
|
24
|
+
export const createUpProjectOptions = (options) => ({
|
|
25
|
+
authProfile: options.authProfile,
|
|
26
|
+
containerName: options.name,
|
|
27
|
+
detach: options.detach,
|
|
28
|
+
deploymentName: options.deployment,
|
|
29
|
+
dockerCommand: options.dockerCommand,
|
|
30
|
+
dockerContext: options.context,
|
|
31
|
+
descriptorDigest: options.descriptorDigest,
|
|
32
|
+
envFilePath: options.envFile,
|
|
33
|
+
imageTag: options.tag,
|
|
34
|
+
organizationHandoffRunId: options.organizationHandoffRunId,
|
|
35
|
+
outputDirectory: options.out,
|
|
36
|
+
...(options.networkAttachmentHandle !== undefined
|
|
37
|
+
? { networkAttachmentHandle: options.networkAttachmentHandle }
|
|
38
|
+
: {}),
|
|
39
|
+
...(options.selectedTargetReceiptDigest !== undefined
|
|
40
|
+
? { selectedTargetReceiptDigest: options.selectedTargetReceiptDigest }
|
|
41
|
+
: {}),
|
|
42
|
+
...(options.selectedTargetReceipt !== undefined
|
|
43
|
+
? { selectedTargetReceipt: options.selectedTargetReceipt }
|
|
44
|
+
: {}),
|
|
45
|
+
...(options.worldBindings !== undefined
|
|
46
|
+
? { worldBindingsPath: options.worldBindings }
|
|
47
|
+
: {}),
|
|
48
|
+
});
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { findLifecycleOutcomeEvidence } from "../deployment/index.js";
|
|
2
|
+
import type { LifecycleReconciliation } from "./lifecycleMachine.js";
|
|
3
|
+
import type { UpLifecycleOptions } from "./upLifecycleInvocation.js";
|
|
4
|
+
export declare const reconcileUpLifecycle: (inputPath: string, options: UpLifecycleOptions, invocation: Parameters<typeof findLifecycleOutcomeEvidence>[0]) => Promise<LifecycleReconciliation>;
|