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,116 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { open } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { createTargetLocalContainerBundleOperations } from "../target/containerBundle.js";
|
|
5
|
+
import { createContainerBundlePreparationAuthority } from "../target/containerBundleAuthority.js";
|
|
6
|
+
import { createCanonicalTargetLocalBundleLookupBytes, createCanonicalTargetLocalBundleReceiptBytes, parseTargetLocalBundleLookupRequest, parseTargetLocalBundlePrepareRequest } from "../target/containerBundleContracts.js";
|
|
7
|
+
import { initializeFilesystemTargetLocalBundleStore } from "../target/containerBundleFilesystemStore.js";
|
|
8
|
+
import { createDockerTargetLocalBundleBuilder } from "../target/dockerContainerBundleBuilder.js";
|
|
9
|
+
import { createDockerTargetExecutors } from "../target/dockerCommandExecutor.js";
|
|
10
|
+
import { deriveTargetLocalContainerBundlePolicy } from "../target/containerBundlePolicy.js";
|
|
11
|
+
import { readTargetDefaultConfigStdin } from "./targetDefaultConfigStdin.js";
|
|
12
|
+
const MAX_BUNDLE_REQUEST_FILE_BYTES = 5_600_000;
|
|
13
|
+
const readJson = async (raw) => {
|
|
14
|
+
if (typeof raw !== "string" || raw.includes("\0") || !path.isAbsolute(raw) || path.normalize(raw) !== raw
|
|
15
|
+
|| Buffer.byteLength(raw, "utf8") > 4096)
|
|
16
|
+
throw new Error();
|
|
17
|
+
const file = await open(raw, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
18
|
+
try {
|
|
19
|
+
const info = await file.stat();
|
|
20
|
+
if (!info.isFile() || info.size > MAX_BUNDLE_REQUEST_FILE_BYTES)
|
|
21
|
+
throw new Error();
|
|
22
|
+
const bytes = Buffer.alloc(info.size + 1);
|
|
23
|
+
let offset = 0;
|
|
24
|
+
while (offset <= info.size) {
|
|
25
|
+
const result = await file.read(bytes, offset, info.size + 1 - offset, offset);
|
|
26
|
+
if (result.bytesRead === 0)
|
|
27
|
+
break;
|
|
28
|
+
offset += result.bytesRead;
|
|
29
|
+
}
|
|
30
|
+
if (offset !== info.size)
|
|
31
|
+
throw new Error();
|
|
32
|
+
return JSON.parse(bytes.toString("utf8", 0, offset));
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
await file.close();
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const readRequest = async (file) => parseTargetLocalBundlePrepareRequest(await readJson(file));
|
|
39
|
+
const readLookup = async (file) => parseTargetLocalBundleLookupRequest(await readJson(file));
|
|
40
|
+
const operations = async (config) => {
|
|
41
|
+
const executors = createDockerTargetExecutors({ dockerCommand: config.dockerCommand });
|
|
42
|
+
return createTargetLocalContainerBundleOperations({
|
|
43
|
+
authority: createContainerBundlePreparationAuthority(config.preparedArtifactMappings),
|
|
44
|
+
builder: createDockerTargetLocalBundleBuilder({ context: config.context, executor: executors.artifact, timeoutMs: config.timeoutMs }),
|
|
45
|
+
store: await initializeFilesystemTargetLocalBundleStore(config.paths.containerBundles)
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
/** Production-only command. Its stdout is the secret-free canonical receipt. */
|
|
49
|
+
export const registerContainerBundleCommand = (target, stdin, streams, setExitCode) => {
|
|
50
|
+
target.command("derive_container_bundle_policy")
|
|
51
|
+
.argument("<claims-file>", "Strict target-local bundle policy claims")
|
|
52
|
+
.action(async (claimsFile) => {
|
|
53
|
+
try {
|
|
54
|
+
const raw = await readJson(claimsFile);
|
|
55
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw)
|
|
56
|
+
|| Object.keys(raw).sort().join("\0") !== "archiveDigest\0artifactDigest\0baseImageConfigDigest\0bundleDigest\0entrypoint\0launcherDigest\0networkAlias\0platform") {
|
|
57
|
+
throw new Error();
|
|
58
|
+
}
|
|
59
|
+
const policy = deriveTargetLocalContainerBundlePolicy(raw);
|
|
60
|
+
streams.stdout(JSON.stringify({
|
|
61
|
+
version: "spawnfile.target-local-container-bundle-policy.v1",
|
|
62
|
+
build_policy_digest: policy.buildPolicyDigest,
|
|
63
|
+
platform_digest: policy.platformDigest
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
streams.stderr("error: Invalid container bundle policy claims");
|
|
68
|
+
setExitCode(2);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
const execute = (name) => target.command(name)
|
|
72
|
+
.argument("<request-file>", "Strict container-bundle preparation request")
|
|
73
|
+
.action(async (requestFile) => {
|
|
74
|
+
let request;
|
|
75
|
+
try {
|
|
76
|
+
request = await readRequest(requestFile);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
streams.stderr("error: Invalid container bundle request");
|
|
80
|
+
setExitCode(2);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const config = await readTargetDefaultConfigStdin(stdin);
|
|
85
|
+
const receipt = await (await operations(config))[name === "prepare_container_bundle" ? "prepare" : "recover"](request);
|
|
86
|
+
streams.stdout(createCanonicalTargetLocalBundleReceiptBytes(receipt));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
streams.stderr("error: Target-local container bundle preparation failed");
|
|
90
|
+
setExitCode(1);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
execute("prepare_container_bundle");
|
|
94
|
+
execute("recover_container_bundle");
|
|
95
|
+
target.command("lookup_container_bundle").argument("<lookup-file>", "Strict semantic bundle lookup")
|
|
96
|
+
.action(async (lookupFile) => {
|
|
97
|
+
let request;
|
|
98
|
+
try {
|
|
99
|
+
request = await readLookup(lookupFile);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
streams.stderr("error: Invalid container bundle lookup");
|
|
103
|
+
setExitCode(2);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const config = await readTargetDefaultConfigStdin(stdin);
|
|
108
|
+
const result = await (await operations(config)).lookup(request);
|
|
109
|
+
streams.stdout(createCanonicalTargetLocalBundleLookupBytes(result));
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
streams.stderr("error: Target-local container bundle preparation failed");
|
|
113
|
+
setExitCode(1);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { InvalidArgumentError } from "commander";
|
|
2
|
+
const parsePositiveIntegerOption = (value) => {
|
|
3
|
+
if (!/^[1-9]\d*$/u.test(value)) {
|
|
4
|
+
throw new InvalidArgumentError("must be a positive integer");
|
|
5
|
+
}
|
|
6
|
+
return Number(value);
|
|
7
|
+
};
|
|
8
|
+
export const registerDevCommands = (program, handlers, streams) => {
|
|
9
|
+
const dev = program.command("dev").description("Run an interactive Spawnfile development deployment");
|
|
10
|
+
dev
|
|
11
|
+
.command("up")
|
|
12
|
+
.description("Compile, build, and start a detached dev deployment under .spawn-dev")
|
|
13
|
+
.argument("[path]", "Project directory or Spawnfile path", process.cwd())
|
|
14
|
+
.option("--auth-profile <name>", "Local Spawnfile auth profile")
|
|
15
|
+
.option("--context <name>", "Docker context for the deployment target")
|
|
16
|
+
.option("--deployment <name>", "Detached deployment record name")
|
|
17
|
+
.option("--docker-command <command>", "Docker command")
|
|
18
|
+
.option("--env-file <file>", "Path to an env file for runtime secrets")
|
|
19
|
+
.option("--name <container>", "Docker container name")
|
|
20
|
+
.option("-o, --out <directory>", "Dev output directory")
|
|
21
|
+
.option("-t, --tag <image>", "Docker image tag")
|
|
22
|
+
.action(async (inputPath, options) => {
|
|
23
|
+
const result = await handlers.devUpProject(inputPath, {
|
|
24
|
+
authProfile: options.authProfile,
|
|
25
|
+
containerName: options.name,
|
|
26
|
+
deploymentName: options.deployment,
|
|
27
|
+
dockerCommand: options.dockerCommand,
|
|
28
|
+
dockerContext: options.context,
|
|
29
|
+
envFilePath: options.envFile,
|
|
30
|
+
imageTag: options.tag,
|
|
31
|
+
outputDirectory: options.out
|
|
32
|
+
});
|
|
33
|
+
streams.stdout(`dev deployment: ${result.containerName ?? "unknown"}`);
|
|
34
|
+
streams.stdout(`image: ${result.imageTag}`);
|
|
35
|
+
streams.stdout(`compiled to ${result.outputDirectory}`);
|
|
36
|
+
if (result.deploymentRecordPath) {
|
|
37
|
+
streams.stdout(`record: ${result.deploymentRecordPath}`);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
dev
|
|
41
|
+
.command("apply")
|
|
42
|
+
.description("Hot-apply one agent into a running dev deployment")
|
|
43
|
+
.argument("[path]", "Project directory or Spawnfile path", process.cwd())
|
|
44
|
+
.requiredOption("--agent <id>", "Agent id, slug, or name to hot-apply")
|
|
45
|
+
.option("--deployment <name>", "Detached deployment record name")
|
|
46
|
+
.option("--docker-command <command>", "Docker command")
|
|
47
|
+
.option("-o, --out <directory>", "Dev output directory")
|
|
48
|
+
.action(async (inputPath, options) => {
|
|
49
|
+
const result = await handlers.devApplyProject(inputPath, {
|
|
50
|
+
agent: options.agent,
|
|
51
|
+
deploymentName: options.deployment,
|
|
52
|
+
dockerCommand: options.dockerCommand,
|
|
53
|
+
outputDirectory: options.out
|
|
54
|
+
});
|
|
55
|
+
streams.stdout(`applied agent ${result.agentId}`);
|
|
56
|
+
streams.stdout(`container: ${result.containerName}`);
|
|
57
|
+
streams.stdout(`bridge: ${result.bridgeStarted ? "started" : "unchanged"}`);
|
|
58
|
+
});
|
|
59
|
+
dev
|
|
60
|
+
.command("restart")
|
|
61
|
+
.description("Reload one agent in a running dev deployment")
|
|
62
|
+
.argument("[path]", "Project directory or Spawnfile path", process.cwd())
|
|
63
|
+
.requiredOption("--agent <id>", "Agent id, slug, or name to reload")
|
|
64
|
+
.option("--deployment <name>", "Detached deployment record name")
|
|
65
|
+
.option("--docker-command <command>", "Docker command")
|
|
66
|
+
.option("-o, --out <directory>", "Dev output directory")
|
|
67
|
+
.action(async (inputPath, options) => {
|
|
68
|
+
const result = await handlers.devRestartProject(inputPath, {
|
|
69
|
+
agent: options.agent,
|
|
70
|
+
deploymentName: options.deployment,
|
|
71
|
+
dockerCommand: options.dockerCommand,
|
|
72
|
+
outputDirectory: options.out
|
|
73
|
+
});
|
|
74
|
+
streams.stdout(`restarted agent ${result.agentId}`);
|
|
75
|
+
streams.stdout(`container: ${result.containerName}`);
|
|
76
|
+
streams.stdout(`bridge: ${result.bridgeStarted ? "started" : "unchanged"}`);
|
|
77
|
+
});
|
|
78
|
+
dev
|
|
79
|
+
.command("activity")
|
|
80
|
+
.description("Print the current Pi agent activity buffer from a running dev deployment")
|
|
81
|
+
.argument("[path]", "Project directory or Spawnfile path", process.cwd())
|
|
82
|
+
.option("--agent <id>", "Only show events for one agent id, slug, or name")
|
|
83
|
+
.option("--deployment <name>", "Detached deployment record name")
|
|
84
|
+
.option("--docker-command <command>", "Docker command")
|
|
85
|
+
.option("-o, --out <directory>", "Dev output directory")
|
|
86
|
+
.option("--tail <count>", "Maximum buffered events to print", parsePositiveIntegerOption)
|
|
87
|
+
.action(async (inputPath, options) => {
|
|
88
|
+
const result = await handlers.devActivityProject(inputPath, {
|
|
89
|
+
agent: options.agent,
|
|
90
|
+
deploymentName: options.deployment,
|
|
91
|
+
dockerCommand: options.dockerCommand,
|
|
92
|
+
outputDirectory: options.out,
|
|
93
|
+
tail: options.tail
|
|
94
|
+
});
|
|
95
|
+
for (const event of result.events) {
|
|
96
|
+
streams.stdout(JSON.stringify(event));
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
dev
|
|
100
|
+
.command("stop")
|
|
101
|
+
.description("Stop the recorded dev deployment container")
|
|
102
|
+
.argument("[path]", "Project directory or Spawnfile path", process.cwd())
|
|
103
|
+
.option("--deployment <name>", "Detached deployment record name")
|
|
104
|
+
.option("--docker-command <command>", "Docker command")
|
|
105
|
+
.option("-o, --out <directory>", "Dev output directory")
|
|
106
|
+
.action(async (inputPath, options) => {
|
|
107
|
+
const result = await handlers.devStopProject(inputPath, {
|
|
108
|
+
deploymentName: options.deployment,
|
|
109
|
+
dockerCommand: options.dockerCommand,
|
|
110
|
+
outputDirectory: options.out
|
|
111
|
+
});
|
|
112
|
+
streams.stdout(`stopped dev deployment ${result.deploymentName}`);
|
|
113
|
+
streams.stdout(`container: ${result.containerName}`);
|
|
114
|
+
});
|
|
115
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import { type DeploymentLifecycleCorrelation, type LifecycleInvocation } from "../deployment/index.js";
|
|
3
|
+
import type { CliHandlers, CliStreams } from "./runCli.js";
|
|
4
|
+
export interface DownOptions {
|
|
5
|
+
compiled?: string;
|
|
6
|
+
deployment: string;
|
|
7
|
+
dockerCommand?: string;
|
|
8
|
+
exportTo?: string;
|
|
9
|
+
force?: boolean;
|
|
10
|
+
json?: boolean;
|
|
11
|
+
lifecycleInvocation?: string;
|
|
12
|
+
readerImage?: string;
|
|
13
|
+
timeout?: string;
|
|
14
|
+
volumes?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const createDownLifecyclePolicy: (options: DownOptions) => {
|
|
17
|
+
docker_command: string | null;
|
|
18
|
+
export_to: string | null;
|
|
19
|
+
force: boolean;
|
|
20
|
+
reader_image: string | null;
|
|
21
|
+
remove_volumes: boolean;
|
|
22
|
+
timeout_ms: number | null;
|
|
23
|
+
};
|
|
24
|
+
export declare const createDownLifecycleInvocation: (id: string, compiledOutputDirectory: string, options: DownOptions, correlation: DeploymentLifecycleCorrelation) => LifecycleInvocation;
|
|
25
|
+
export declare const registerDownCommand: (program: Command, handlers: CliHandlers, streams: CliStreams) => void;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { createDeploymentLifecycleCorrelation, findLifecycleInvocation, readDeploymentRecordFromOutput, } from "../deployment/index.js";
|
|
3
|
+
import { resolveProjectOutputDirectory } from "../filesystem/index.js";
|
|
4
|
+
import { DEFAULT_OUTPUT_DIRECTORY, SpawnfileError } from "../shared/index.js";
|
|
5
|
+
import { canonicalLifecycleJson } from "../deployment/lifecycleCompletionContracts.js";
|
|
6
|
+
import { createLifecycleInvocation, requireMachineLifecycle, runMachineLifecycle, } from "./lifecycleMachine.js";
|
|
7
|
+
export const createDownLifecyclePolicy = (options) => ({
|
|
8
|
+
docker_command: options.dockerCommand ?? null,
|
|
9
|
+
export_to: options.exportTo ? path.resolve(options.exportTo) : null,
|
|
10
|
+
force: options.force ?? false,
|
|
11
|
+
reader_image: options.readerImage ?? null,
|
|
12
|
+
remove_volumes: options.volumes ?? false,
|
|
13
|
+
timeout_ms: options.timeout ? Number(options.timeout) : null,
|
|
14
|
+
});
|
|
15
|
+
export const createDownLifecycleInvocation = (id, compiledOutputDirectory, options, correlation) => createLifecycleInvocation(id, "down", {
|
|
16
|
+
compiled_output_directory: compiledOutputDirectory,
|
|
17
|
+
...correlation,
|
|
18
|
+
}, createDownLifecyclePolicy(options));
|
|
19
|
+
const correlationFrom = (stored) => {
|
|
20
|
+
const value = stored.correlation;
|
|
21
|
+
if (typeof value.compile_fingerprint !== "string" ||
|
|
22
|
+
typeof value.deployment_instance_digest !== "string" ||
|
|
23
|
+
typeof value.deployment !== "string" ||
|
|
24
|
+
(value.run_id !== null && typeof value.run_id !== "string") ||
|
|
25
|
+
typeof value.target !== "string") {
|
|
26
|
+
throw new SpawnfileError("runtime_error", "Invalid stored down correlation");
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
compile_fingerprint: value.compile_fingerprint,
|
|
30
|
+
deployment: value.deployment,
|
|
31
|
+
deployment_instance_digest: value.deployment_instance_digest,
|
|
32
|
+
run_id: value.run_id,
|
|
33
|
+
target: value.target,
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
const assertExactRequest = (stored, compiledOutputDirectory, options) => {
|
|
37
|
+
if (stored.operation !== "down" ||
|
|
38
|
+
stored.correlation.compiled_output_directory !== compiledOutputDirectory ||
|
|
39
|
+
stored.correlation.deployment !== options.deployment ||
|
|
40
|
+
JSON.stringify(stored.request_policy) !==
|
|
41
|
+
JSON.stringify(createDownLifecyclePolicy(options))) {
|
|
42
|
+
throw new SpawnfileError("runtime_error", "Lifecycle invocation id drift");
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
export const registerDownCommand = (program, handlers, streams) => {
|
|
46
|
+
program
|
|
47
|
+
.command("down")
|
|
48
|
+
.description("Tear down a recorded deployment; named volumes are retained by default.")
|
|
49
|
+
.argument("[path]", "Project directory or Spawnfile path", process.cwd())
|
|
50
|
+
.requiredOption("--deployment <name>", "Deployment record name to tear down")
|
|
51
|
+
.option("--compiled <directory>", "Compile output directory")
|
|
52
|
+
.option("--docker-command <command>", "Docker command")
|
|
53
|
+
.option("--export-to <directory>", "Export first, then tear down")
|
|
54
|
+
.option("--force", "Discard un-exported artifacts")
|
|
55
|
+
.option("--reader-image <image>", "Image used to read named volumes during auto export")
|
|
56
|
+
.option("--timeout <ms>", "Bound each Docker call in milliseconds")
|
|
57
|
+
.option("--volumes", "Also remove named volumes")
|
|
58
|
+
.option("--json", "Render a spawnfile.down-receipt.v1 machine-readable receipt")
|
|
59
|
+
.option("--lifecycle-invocation <id>", "Durably bind this exact JSON lifecycle invocation")
|
|
60
|
+
.action(async (inputPath, options) => {
|
|
61
|
+
requireMachineLifecycle(options.lifecycleInvocation, options.json);
|
|
62
|
+
const compiled = resolveProjectOutputDirectory(inputPath, options.compiled, DEFAULT_OUTPUT_DIRECTORY);
|
|
63
|
+
const render = async (expected) => {
|
|
64
|
+
const expectedUnits = expected
|
|
65
|
+
? (await readDeploymentRecordFromOutput(compiled, options.deployment)).units.map((unit) => unit.id).sort()
|
|
66
|
+
: undefined;
|
|
67
|
+
const receipt = await handlers.downDeployment({
|
|
68
|
+
compiledOutputDirectory: compiled,
|
|
69
|
+
deploymentName: options.deployment,
|
|
70
|
+
dockerCommand: options.dockerCommand,
|
|
71
|
+
exportTo: options.exportTo,
|
|
72
|
+
force: options.force,
|
|
73
|
+
readerImage: options.readerImage,
|
|
74
|
+
removeVolumes: options.volumes,
|
|
75
|
+
timeoutMs: options.timeout ? Number(options.timeout) : undefined,
|
|
76
|
+
...(expected ? { expectedLifecycleCorrelation: expected } : {}),
|
|
77
|
+
});
|
|
78
|
+
if (expectedUnits !== undefined &&
|
|
79
|
+
(receipt.errors.length !== 0 ||
|
|
80
|
+
(options.volumes === true &&
|
|
81
|
+
receipt.retained_volumes.length !== 0) ||
|
|
82
|
+
JSON.stringify([...receipt.units_stopped].sort()) !==
|
|
83
|
+
JSON.stringify(expectedUnits))) {
|
|
84
|
+
throw new SpawnfileError("runtime_error", "Lifecycle down is incomplete and remains retryable");
|
|
85
|
+
}
|
|
86
|
+
return JSON.stringify(receipt, null, 2);
|
|
87
|
+
};
|
|
88
|
+
if (options.json && options.lifecycleInvocation) {
|
|
89
|
+
const stored = await findLifecycleInvocation(options.lifecycleInvocation);
|
|
90
|
+
let exact;
|
|
91
|
+
let correlation;
|
|
92
|
+
if (stored) {
|
|
93
|
+
assertExactRequest(stored, compiled, options);
|
|
94
|
+
exact = stored;
|
|
95
|
+
correlation = correlationFrom(stored);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const record = await readDeploymentRecordFromOutput(compiled, options.deployment);
|
|
99
|
+
correlation = createDeploymentLifecycleCorrelation(record);
|
|
100
|
+
exact = createDownLifecycleInvocation(options.lifecycleInvocation, compiled, options, correlation);
|
|
101
|
+
}
|
|
102
|
+
const output = await runMachineLifecycle(exact, () => render(correlation), async () => {
|
|
103
|
+
try {
|
|
104
|
+
const current = createDeploymentLifecycleCorrelation(await readDeploymentRecordFromOutput(compiled, options.deployment));
|
|
105
|
+
return canonicalLifecycleJson(current) ===
|
|
106
|
+
canonicalLifecycleJson(correlation)
|
|
107
|
+
? { status: "resume_safe" }
|
|
108
|
+
: {
|
|
109
|
+
reason: "deployment_correlation_changed",
|
|
110
|
+
status: "ambiguous",
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return {
|
|
115
|
+
reason: "deployment_correlation_unavailable",
|
|
116
|
+
status: "ambiguous",
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
streams.stdout(output);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const output = await render();
|
|
124
|
+
if (options.json) {
|
|
125
|
+
streams.stdout(output);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const receipt = JSON.parse(output);
|
|
129
|
+
streams.stdout(`deployment: ${receipt.deployment}`);
|
|
130
|
+
receipt.units_stopped.forEach((unit) => streams.stdout(`stopped: ${unit}`));
|
|
131
|
+
receipt.retained_volumes.forEach((volume) => streams.stdout(`retained volume: ${volume}`));
|
|
132
|
+
receipt.errors.forEach((error) => streams.stderr(`error: ${error}`));
|
|
133
|
+
});
|
|
134
|
+
};
|
package/dist/cli/index.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
const
|
|
4
|
-
|
|
2
|
+
import { isTargetLookupInvocation } from "./targetCliRoute.js";
|
|
3
|
+
const argv = process.argv.slice(2);
|
|
4
|
+
const exitCode = isTargetLookupInvocation(argv)
|
|
5
|
+
? await (await import("./targetLookupCli.js")).runTargetLookupCli(argv)
|
|
6
|
+
: await (await import("./runCli.js")).runCli(argv);
|
|
7
|
+
process.exitCode = exitCode;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
2
|
import type { CliHandlers, CliStreams } from "./runCli.js";
|
|
3
|
-
export declare const registerLifecycleCommands: (program: Command, handlers: CliHandlers, streams: CliStreams) => void;
|
|
3
|
+
export declare const registerLifecycleCommands: (program: Command, handlers: CliHandlers, streams: CliStreams, stdin: AsyncIterable<unknown>) => void;
|
|
@@ -1,180 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const formatRedeploySummary = (previous, newRef, newDigest) => {
|
|
13
|
-
// Only claim "unchanged" when we actually resolved a matching digest; two null
|
|
14
|
-
// digests (local-only images) are unknown, not provably identical.
|
|
15
|
-
if (previous.ref === newRef && newDigest !== null && previous.digest === newDigest) {
|
|
16
|
-
return `redeployed image ${newRef} (digest unchanged ${shortDigest(newDigest)})`;
|
|
17
|
-
}
|
|
18
|
-
return (`redeployed image: ${previous.ref} (${shortDigest(previous.digest)}) ` +
|
|
19
|
-
`→ ${newRef} (${shortDigest(newDigest)})`);
|
|
20
|
-
};
|
|
21
|
-
export const registerLifecycleCommands = (program, handlers, streams) => {
|
|
22
|
-
program
|
|
23
|
-
.command("compile")
|
|
24
|
-
.description("Compile a project into runtime-native output under .spawn")
|
|
25
|
-
.argument("[path]", "Project directory or Spawnfile path", process.cwd())
|
|
26
|
-
.option("-o, --out <directory>", "Output directory")
|
|
27
|
-
.action(async (inputPath, options) => {
|
|
28
|
-
const result = await handlers.compileProject(inputPath, { outputDirectory: options.out });
|
|
29
|
-
streams.stdout(`compiled to ${result.outputDirectory}`);
|
|
30
|
-
streams.stdout(`report: ${result.reportPath}`);
|
|
31
|
-
});
|
|
32
|
-
program
|
|
33
|
-
.command("build")
|
|
34
|
-
.description("Compile and build the organization Docker image")
|
|
35
|
-
.argument("[path]", "Project directory or Spawnfile path", process.cwd())
|
|
36
|
-
.option("--docker-command <command>", "Docker command")
|
|
37
|
-
.option("-o, --out <directory>", "Output directory")
|
|
38
|
-
.option("-t, --tag <image>", "Docker image tag")
|
|
39
|
-
.action(async (inputPath, options) => {
|
|
40
|
-
const result = await handlers.buildProject(inputPath, {
|
|
41
|
-
dockerCommand: options.dockerCommand,
|
|
42
|
-
imageTag: options.tag,
|
|
43
|
-
outputDirectory: options.out
|
|
44
|
-
});
|
|
45
|
-
streams.stdout(`built image ${result.imageTag}`);
|
|
46
|
-
streams.stdout(`compiled to ${result.outputDirectory}`);
|
|
47
|
-
streams.stdout(`report: ${result.reportPath}`);
|
|
48
|
-
});
|
|
49
|
-
program
|
|
50
|
-
.command("run")
|
|
51
|
-
.description("Compile, build, and run the organization container locally")
|
|
52
|
-
.argument("[path]", "Project directory or Spawnfile path", process.cwd())
|
|
53
|
-
.option("-o, --out <directory>", "Output directory")
|
|
54
|
-
.option("-t, --tag <image>", "Docker image tag")
|
|
55
|
-
.option("--auth-profile <name>", "Local Spawnfile auth profile")
|
|
56
|
-
.option("--context <name>", "Docker context for the deployment target")
|
|
57
|
-
.option("--deployment <name>", "Detached deployment record name")
|
|
58
|
-
.option("--docker-command <command>", "Docker command")
|
|
59
|
-
.option("--name <container>", "Docker container name")
|
|
60
|
-
.option("--env-file <file>", "Path to an env file for runtime secrets")
|
|
61
|
-
.option("--image", "Interpret the argument as an image reference")
|
|
62
|
-
.option("-d, --detach", "Run the container in detached mode")
|
|
63
|
-
.action(async (inputPath, options) => {
|
|
64
|
-
const runInput = resolveCommandInput(inputPath, { forceImage: options.image });
|
|
65
|
-
if (runInput.kind === "image" || (runInput.kind === "invalid" && options.image)) {
|
|
66
|
-
throw new SpawnfileError("validation_error", `Image-mode run is not supported. Deploy the image with: ` +
|
|
67
|
-
`spawnfile up ${inputPath} --auth-profile <profile> ` +
|
|
68
|
-
"(add --env-file for any extra secrets; image deployments always detach).");
|
|
69
|
-
}
|
|
70
|
-
if (runInput.kind === "invalid") {
|
|
71
|
-
throw new SpawnfileError("validation_error", `Cannot resolve "${inputPath}" as a project path or image reference. ` +
|
|
72
|
-
"Pass a project directory, a Spawnfile path, or an image like 'name:tag' (use --image to force image mode).");
|
|
73
|
-
}
|
|
74
|
-
const result = await handlers.runProject(inputPath, {
|
|
75
|
-
authProfile: options.authProfile,
|
|
76
|
-
containerName: options.name,
|
|
77
|
-
detach: options.detach,
|
|
78
|
-
deploymentName: options.deployment,
|
|
79
|
-
dockerCommand: options.dockerCommand,
|
|
80
|
-
dockerContext: options.context,
|
|
81
|
-
envFilePath: options.envFile,
|
|
82
|
-
imageTag: options.tag,
|
|
83
|
-
outputDirectory: options.out
|
|
84
|
-
});
|
|
85
|
-
if (options.detach) {
|
|
86
|
-
streams.stdout(`running container ${result.containerName ?? "unknown"}`);
|
|
87
|
-
streams.stdout(`image: ${result.imageTag}`);
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
program
|
|
91
|
-
.command("publish")
|
|
92
|
-
.description("Compile, build, verify, and push the organization image to a registry")
|
|
93
|
-
.argument("[path]", "Project directory or Spawnfile path", process.cwd())
|
|
94
|
-
.requiredOption("-t, --tag <image>", "Registry image reference to push")
|
|
95
|
-
.option("-o, --out <directory>", "Output directory")
|
|
96
|
-
.option("--docker-command <command>", "Docker command")
|
|
97
|
-
.action(async (inputPath, options) => {
|
|
98
|
-
const publishInput = resolveCommandInput(inputPath);
|
|
99
|
-
if (publishInput.kind !== "project") {
|
|
100
|
-
throw new SpawnfileError("validation_error", "publish operates on a project path, not an image reference");
|
|
101
|
-
}
|
|
102
|
-
const result = await handlers.publishProject(inputPath, {
|
|
103
|
-
dockerCommand: options.dockerCommand,
|
|
104
|
-
imageTag: options.tag,
|
|
105
|
-
outputDirectory: options.out
|
|
106
|
-
});
|
|
107
|
-
streams.stdout(`published ${result.imageTag}`);
|
|
108
|
-
streams.stdout(`digest: ${result.digest ?? "unknown"}`);
|
|
109
|
-
streams.stdout(`next: spawnfile up ${result.imageTag} --detach --auth-profile <profile>`);
|
|
110
|
-
});
|
|
111
|
-
program
|
|
112
|
-
.command("up")
|
|
113
|
-
.description("Deploy an organization from a project or a published image reference")
|
|
114
|
-
.argument("[path]", "Project directory, Spawnfile path, or image reference", process.cwd())
|
|
115
|
-
.option("-o, --out <directory>", "Output directory")
|
|
116
|
-
.option("-t, --tag <image>", "Docker image tag")
|
|
117
|
-
.option("--auth-profile <name>", "Local Spawnfile auth profile")
|
|
118
|
-
.option("--context <name>", "Docker context for the deployment target")
|
|
119
|
-
.option("--deployment <name>", "Detached deployment record name")
|
|
120
|
-
.option("--docker-command <command>", "Docker command")
|
|
121
|
-
.option("--name <container>", "Docker container name")
|
|
122
|
-
.option("--env-file <file>", "Path to an env file for runtime secrets")
|
|
123
|
-
.option("--image", "Interpret the argument as an image reference")
|
|
124
|
-
.option("--pull", "Pull the image before deploying")
|
|
125
|
-
.option("-d, --detach", "Run the container in detached mode")
|
|
126
|
-
.action(async (inputPath, options) => {
|
|
127
|
-
const upInput = resolveCommandInput(inputPath, { forceImage: options.image });
|
|
128
|
-
if (upInput.kind === "invalid") {
|
|
129
|
-
throw new SpawnfileError("validation_error", `Cannot resolve "${inputPath}" as a project path or image reference. ` +
|
|
130
|
-
"Pass a project directory, a Spawnfile path, or an image like 'name:tag' (use --image to force image mode).");
|
|
131
|
-
}
|
|
132
|
-
if (upInput.kind === "image") {
|
|
133
|
-
const [authProfile, envFileEnv] = await Promise.all([
|
|
134
|
-
resolveAuthProfileForImage(handlers, options.authProfile),
|
|
135
|
-
readRunEnvFile(options.envFile)
|
|
136
|
-
]);
|
|
137
|
-
const consumed = await handlers.consumeImageUp(upInput.ref, {
|
|
138
|
-
authProfile,
|
|
139
|
-
authProfileName: options.authProfile ?? null,
|
|
140
|
-
authValues: authProfile?.env ?? {},
|
|
141
|
-
deploymentName: options.deployment,
|
|
142
|
-
dockerCommand: options.dockerCommand,
|
|
143
|
-
dockerContext: options.context,
|
|
144
|
-
envFileEnv,
|
|
145
|
-
envFilePath: options.envFile ?? null,
|
|
146
|
-
pull: options.pull
|
|
147
|
-
});
|
|
148
|
-
if (consumed.previous) {
|
|
149
|
-
const newDigest = consumed.record.source.kind === "image" ? consumed.record.source.digest : null;
|
|
150
|
-
streams.stdout(formatRedeploySummary(consumed.previous, consumed.imageRef, newDigest));
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
streams.stdout(`deployed image ${consumed.imageRef}`);
|
|
154
|
-
}
|
|
155
|
-
streams.stdout(`deployment: ${consumed.deploymentName}`);
|
|
156
|
-
streams.stdout(`running container ${consumed.containerName}`);
|
|
157
|
-
streams.stdout(`record: ${consumed.recordPath}`);
|
|
158
|
-
streams.stdout(`next: spawnfile status --deployment ${consumed.deploymentName} --live`);
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
const result = await handlers.upProject(inputPath, {
|
|
162
|
-
authProfile: options.authProfile,
|
|
163
|
-
containerName: options.name,
|
|
164
|
-
detach: options.detach,
|
|
165
|
-
deploymentName: options.deployment,
|
|
166
|
-
dockerCommand: options.dockerCommand,
|
|
167
|
-
dockerContext: options.context,
|
|
168
|
-
envFilePath: options.envFile,
|
|
169
|
-
imageTag: options.tag,
|
|
170
|
-
outputDirectory: options.out
|
|
171
|
-
});
|
|
172
|
-
streams.stdout(`built image ${result.imageTag}`);
|
|
173
|
-
streams.stdout(`compiled to ${result.outputDirectory}`);
|
|
174
|
-
streams.stdout(`report: ${result.reportPath}`);
|
|
175
|
-
if (options.detach) {
|
|
176
|
-
streams.stdout(`running container ${result.containerName ?? "unknown"}`);
|
|
177
|
-
streams.stdout(`image: ${result.imageTag}`);
|
|
178
|
-
}
|
|
179
|
-
});
|
|
1
|
+
import { registerCompileBuildCommands } from "./compileBuildCommands.js";
|
|
2
|
+
import { registerDownCommand } from "./downCommand.js";
|
|
3
|
+
import { registerLifecyclePlanningCommands } from "./lifecyclePlanningCommands.js";
|
|
4
|
+
import { registerRunPublishCommands } from "./runPublishCommands.js";
|
|
5
|
+
import { registerUpCommand } from "./upCommand.js";
|
|
6
|
+
export const registerLifecycleCommands = (program, handlers, streams, stdin) => {
|
|
7
|
+
registerLifecyclePlanningCommands(program, streams, stdin);
|
|
8
|
+
registerCompileBuildCommands(program, handlers, streams);
|
|
9
|
+
registerRunPublishCommands(program, handlers, streams);
|
|
10
|
+
registerUpCommand(program, handlers, streams);
|
|
11
|
+
registerDownCommand(program, handlers, streams);
|
|
180
12
|
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type LifecycleInvocation } from "../deployment/index.js";
|
|
2
|
+
export declare const createLifecycleInvocation: (id: string, operation: LifecycleInvocation["operation"], correlation: LifecycleInvocation["correlation"], requestPolicy: LifecycleInvocation["request_policy"]) => LifecycleInvocation;
|
|
3
|
+
export declare const digestLifecycleBinding: (value: string | undefined) => string | null;
|
|
4
|
+
export type LifecycleReconciliation = {
|
|
5
|
+
outcomeBytes: string;
|
|
6
|
+
status: "completed";
|
|
7
|
+
} | {
|
|
8
|
+
status: "provably_not_applied";
|
|
9
|
+
} | {
|
|
10
|
+
status: "resume_safe";
|
|
11
|
+
} | {
|
|
12
|
+
reason: string;
|
|
13
|
+
status: "ambiguous";
|
|
14
|
+
};
|
|
15
|
+
export declare const runMachineLifecycle: (invocation: LifecycleInvocation, owner: (capability: {
|
|
16
|
+
epoch: string;
|
|
17
|
+
role: "initial" | "recovery";
|
|
18
|
+
}) => Promise<string>, reconcile?: () => Promise<LifecycleReconciliation>) => Promise<string>;
|
|
19
|
+
export declare const requireMachineLifecycle: (invocationId: string | undefined, json: boolean | undefined) => void;
|