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,63 @@
|
|
|
1
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
2
|
+
export const createPackageInstallCommand = (packages) => `RUN apt-get update && apt-get install -y --no-install-recommends ${packages.join(" ")} && rm -rf /var/lib/apt/lists/*`;
|
|
3
|
+
export const createNpmPackageInstallCommand = (packages) => `RUN npm install -g --omit=dev --no-fund --no-audit ${packages.join(" ")}`;
|
|
4
|
+
export const createPipxPackageInstallCommand = (packages) => `RUN PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/local/bin pipx install ${packages.join(" ")}`;
|
|
5
|
+
const packageIdentity = (pkg) => `${pkg.manager}\u0000${pkg.name}\u0000${pkg.version ?? ""}\u0000${pkg.scope ?? ""}`;
|
|
6
|
+
const packageConflictIdentity = (pkg) => `${pkg.manager}\u0000${pkg.name}`;
|
|
7
|
+
const dedupePackages = (packages) => {
|
|
8
|
+
const seen = new Map();
|
|
9
|
+
for (const currentPackage of packages) {
|
|
10
|
+
seen.set(packageIdentity(currentPackage), currentPackage);
|
|
11
|
+
}
|
|
12
|
+
return [...seen.values()].sort((left, right) => packageIdentity(left).localeCompare(packageIdentity(right)));
|
|
13
|
+
};
|
|
14
|
+
const assertImagePackageCompatibility = (packages) => {
|
|
15
|
+
const byName = new Map();
|
|
16
|
+
for (const currentPackage of packages) {
|
|
17
|
+
const conflictIdentity = packageConflictIdentity(currentPackage);
|
|
18
|
+
const existingPackage = byName.get(conflictIdentity);
|
|
19
|
+
if (!existingPackage) {
|
|
20
|
+
byName.set(conflictIdentity, currentPackage);
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (packageIdentity(existingPackage) !== packageIdentity(currentPackage)) {
|
|
24
|
+
throw new SpawnfileError("validation_error", `Generated container declares conflicting package definitions for ${currentPackage.manager} package ${currentPackage.name}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
export const createAptPackageInstallItem = (pkg) => pkg.version ? `${pkg.name}=${pkg.version}` : pkg.name;
|
|
29
|
+
export const createNpmPackageInstallItem = (pkg) => pkg.version ? `${pkg.name}@${pkg.version}` : pkg.name;
|
|
30
|
+
export const createPipxPackageInstallItem = (pkg) => pkg.version ? `${pkg.name}==${pkg.version}` : pkg.name;
|
|
31
|
+
export const getNpmInstallItemName = (item) => {
|
|
32
|
+
if (!item.startsWith("@")) {
|
|
33
|
+
const versionMarker = item.indexOf("@");
|
|
34
|
+
return versionMarker === -1 ? item : item.slice(0, versionMarker);
|
|
35
|
+
}
|
|
36
|
+
const slashIndex = item.indexOf("/");
|
|
37
|
+
if (slashIndex === -1) {
|
|
38
|
+
return item;
|
|
39
|
+
}
|
|
40
|
+
const versionMarker = item.indexOf("@", slashIndex);
|
|
41
|
+
return versionMarker === -1 ? item : item.slice(0, versionMarker);
|
|
42
|
+
};
|
|
43
|
+
export const collectPackagesByManager = (runtimePlans) => {
|
|
44
|
+
const packagesByManager = {
|
|
45
|
+
apt: [],
|
|
46
|
+
npm: [],
|
|
47
|
+
pipx: []
|
|
48
|
+
};
|
|
49
|
+
const imagePackages = runtimePlans.flatMap((plan) => plan.packages ?? []);
|
|
50
|
+
assertImagePackageCompatibility(imagePackages);
|
|
51
|
+
for (const packageConfig of dedupePackages(imagePackages)) {
|
|
52
|
+
if (packageConfig.manager === "apt") {
|
|
53
|
+
packagesByManager.apt.push(packageConfig);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (packageConfig.manager === "npm") {
|
|
57
|
+
packagesByManager.npm.push(packageConfig);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
packagesByManager.pipx.push(packageConfig);
|
|
61
|
+
}
|
|
62
|
+
return packagesByManager;
|
|
63
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ModelAuthMethod } from "../shared/index.js";
|
|
2
|
+
import type { ContainerTarget, ContainerTargetInput, EmittedFile, RuntimeContainerMeta } from "../runtime/index.js";
|
|
3
|
+
import type { ResolvedPackage } from "./types.js";
|
|
4
|
+
export declare const createDefaultTargets: (inputs: ContainerTargetInput[]) => ContainerTarget[];
|
|
5
|
+
export declare const resolveTargetEnvFiles: (configPath: string, target: ContainerTarget) => Array<{
|
|
6
|
+
envName: string;
|
|
7
|
+
filePath: string;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const resolveTargetConfigEnvBindings: (meta: RuntimeContainerMeta, target: ContainerTarget) => RuntimeContainerMeta["configEnvBindings"];
|
|
10
|
+
export declare const assertTargetHasConfig: (runtimeName: string, targetId: string, meta: RuntimeContainerMeta, files: EmittedFile[]) => void;
|
|
11
|
+
export declare const resolveTargetPackages: (target: ContainerTarget, inputs: ContainerTargetInput[]) => ResolvedPackage[];
|
|
12
|
+
export declare const resolveInstancePaths: (runtimeName: string, targetId: string, meta: RuntimeContainerMeta) => {
|
|
13
|
+
configPath: string;
|
|
14
|
+
homePath?: string;
|
|
15
|
+
instanceRoot: string;
|
|
16
|
+
workspacePath: string;
|
|
17
|
+
};
|
|
18
|
+
export declare const resolveTargetModelSecrets: (target: ContainerTarget, inputs: ContainerTargetInput[]) => string[];
|
|
19
|
+
export declare const resolveTargetModelAuthMethods: (target: ContainerTarget, inputs: ContainerTargetInput[]) => Record<string, ModelAuthMethod>;
|
|
20
|
+
export declare const resolveTargetExposure: (target: ContainerTarget, inputs: ContainerTargetInput[]) => boolean;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
3
|
+
import { listExecutionModelSecretNames, resolveExecutionModelAuthMethods } from "./modelEnv.js";
|
|
4
|
+
const CONFIG_FILE_PLACEHOLDER = "<config-file>";
|
|
5
|
+
const INSTANCE_ROOT_PLACEHOLDER = "<instance-root>";
|
|
6
|
+
export const createDefaultTargets = (inputs) => inputs.map((input) => ({
|
|
7
|
+
files: input.emittedFiles,
|
|
8
|
+
id: `${input.kind}-${input.slug}`,
|
|
9
|
+
sourceIds: [input.id]
|
|
10
|
+
}));
|
|
11
|
+
export const resolveTargetEnvFiles = (configPath, target) => (target.envFiles ?? []).map((binding) => ({
|
|
12
|
+
envName: binding.envName,
|
|
13
|
+
filePath: path.posix.join(path.posix.dirname(configPath), binding.relativePath)
|
|
14
|
+
}));
|
|
15
|
+
export const resolveTargetConfigEnvBindings = (meta, target) => [...(meta.configEnvBindings ?? []), ...(target.configEnvBindings ?? [])];
|
|
16
|
+
export const assertTargetHasConfig = (runtimeName, targetId, meta, files) => {
|
|
17
|
+
if (!files.some((file) => file.path === meta.configFileName)) {
|
|
18
|
+
throw new SpawnfileError("runtime_error", `Container target ${targetId} for ${runtimeName} is missing ${meta.configFileName}`);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const createPackageIdentity = (pkg) => `${pkg.manager}\u0000${pkg.name}\u0000${pkg.version ?? ""}\u0000${pkg.scope ?? ""}`;
|
|
22
|
+
const createPackageConflictIdentity = (pkg) => `${pkg.manager}\u0000${pkg.name}`;
|
|
23
|
+
const createPackageLabel = (pkg) => `${pkg.manager} package ${pkg.name}`;
|
|
24
|
+
export const resolveTargetPackages = (target, inputs) => {
|
|
25
|
+
const sourceIds = new Set(target.sourceIds ?? []);
|
|
26
|
+
if (sourceIds.size === 0)
|
|
27
|
+
return [];
|
|
28
|
+
const byIdentity = new Map();
|
|
29
|
+
for (const input of inputs) {
|
|
30
|
+
if (!sourceIds.has(input.id) || input.value.kind !== "agent")
|
|
31
|
+
continue;
|
|
32
|
+
for (const currentPackage of input.value.packages ?? []) {
|
|
33
|
+
const conflictIdentity = createPackageConflictIdentity(currentPackage);
|
|
34
|
+
const existingPackage = byIdentity.get(conflictIdentity);
|
|
35
|
+
if (!existingPackage) {
|
|
36
|
+
byIdentity.set(conflictIdentity, currentPackage);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (createPackageIdentity(existingPackage) !== createPackageIdentity(currentPackage)) {
|
|
40
|
+
throw new SpawnfileError("validation_error", `Container target ${target.id} declares conflicting package definitions for ${createPackageLabel(currentPackage)}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return [...byIdentity.values()].sort((left, right) => createPackageIdentity(left).localeCompare(createPackageIdentity(right)));
|
|
45
|
+
};
|
|
46
|
+
const replaceContainerPathTemplate = (template, instanceRoot, configFileName) => template
|
|
47
|
+
.replaceAll(INSTANCE_ROOT_PLACEHOLDER, instanceRoot)
|
|
48
|
+
.replaceAll(CONFIG_FILE_PLACEHOLDER, configFileName);
|
|
49
|
+
export const resolveInstancePaths = (runtimeName, targetId, meta) => {
|
|
50
|
+
const instanceRoot = `/var/lib/spawnfile/instances/${runtimeName}/${targetId}`;
|
|
51
|
+
return {
|
|
52
|
+
configPath: replaceContainerPathTemplate(meta.instancePaths.configPathTemplate, instanceRoot, meta.configFileName),
|
|
53
|
+
homePath: meta.instancePaths.homePathTemplate
|
|
54
|
+
? replaceContainerPathTemplate(meta.instancePaths.homePathTemplate, instanceRoot, meta.configFileName)
|
|
55
|
+
: undefined,
|
|
56
|
+
instanceRoot,
|
|
57
|
+
workspacePath: replaceContainerPathTemplate(meta.instancePaths.workspacePathTemplate, instanceRoot, meta.configFileName)
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
export const resolveTargetModelSecrets = (target, inputs) => {
|
|
61
|
+
const sourceIds = new Set(target.sourceIds ?? []);
|
|
62
|
+
if (sourceIds.size === 0)
|
|
63
|
+
return [];
|
|
64
|
+
const secretNames = new Set();
|
|
65
|
+
for (const input of inputs) {
|
|
66
|
+
if (!sourceIds.has(input.id) || input.value.kind !== "agent")
|
|
67
|
+
continue;
|
|
68
|
+
for (const secretName of listExecutionModelSecretNames(input.value.execution)) {
|
|
69
|
+
secretNames.add(secretName);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return [...secretNames].sort();
|
|
73
|
+
};
|
|
74
|
+
export const resolveTargetModelAuthMethods = (target, inputs) => {
|
|
75
|
+
const sourceIds = new Set(target.sourceIds ?? []);
|
|
76
|
+
if (sourceIds.size === 0)
|
|
77
|
+
return {};
|
|
78
|
+
const methods = new Map();
|
|
79
|
+
for (const input of inputs) {
|
|
80
|
+
if (!sourceIds.has(input.id) || input.value.kind !== "agent")
|
|
81
|
+
continue;
|
|
82
|
+
for (const [provider, method] of Object.entries(resolveExecutionModelAuthMethods(input.value.execution))) {
|
|
83
|
+
const existingMethod = methods.get(provider);
|
|
84
|
+
if (existingMethod && existingMethod !== method) {
|
|
85
|
+
throw new SpawnfileError("validation_error", `Container target ${target.id} declares conflicting auth methods for provider ${provider}`);
|
|
86
|
+
}
|
|
87
|
+
methods.set(provider, method);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return Object.fromEntries([...methods.entries()].sort(([left], [right]) => left.localeCompare(right)));
|
|
91
|
+
};
|
|
92
|
+
export const resolveTargetExposure = (target, inputs) => {
|
|
93
|
+
const sourceIds = new Set(target.sourceIds ?? []);
|
|
94
|
+
if (sourceIds.size === 0)
|
|
95
|
+
return false;
|
|
96
|
+
return inputs.some((input) => sourceIds.has(input.id) && input.value.kind === "agent" && input.value.expose === true);
|
|
97
|
+
};
|
|
@@ -4,13 +4,15 @@ import { mergeWorkspaceResourcePlans } from "./workspaceResources.js";
|
|
|
4
4
|
const CONFIG_FILE_PLACEHOLDER = "<config-file>";
|
|
5
5
|
const INSTANCE_ROOT_PLACEHOLDER = "<instance-root>";
|
|
6
6
|
const SOURCE_AGENT_PLACEHOLDER = "<agent-name>";
|
|
7
|
+
const SOURCE_SLUG_PLACEHOLDER = "<source-slug>";
|
|
7
8
|
const replaceSourceWorkspacePathTemplate = (template, input, instancePaths, meta) => {
|
|
8
9
|
const agentName = input.value.kind === "agent" ? input.value.name : input.slug;
|
|
9
10
|
const instanceRoot = instancePaths.instanceRoot ?? path.posix.dirname(instancePaths.workspacePath);
|
|
10
11
|
return template
|
|
11
12
|
.replaceAll(INSTANCE_ROOT_PLACEHOLDER, instanceRoot)
|
|
12
13
|
.replaceAll(CONFIG_FILE_PLACEHOLDER, meta.configFileName)
|
|
13
|
-
.replaceAll(SOURCE_AGENT_PLACEHOLDER, agentName)
|
|
14
|
+
.replaceAll(SOURCE_AGENT_PLACEHOLDER, agentName)
|
|
15
|
+
.replaceAll(SOURCE_SLUG_PLACEHOLDER, input.slug);
|
|
14
16
|
};
|
|
15
17
|
const resolveSourceWorkspacePath = (input, instancePaths, meta) => meta.instancePaths.sourceWorkspacePathTemplate
|
|
16
18
|
? replaceSourceWorkspacePathTemplate(meta.instancePaths.sourceWorkspacePathTemplate, input, instancePaths, meta)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ContainerPersistentMountReport } from "../report/index.js";
|
|
2
|
+
import type { CompiledNodeArtifact, RuntimeTargetPlan } from "./containerArtifactsTypes.js";
|
|
3
|
+
import type { CompilePlan } from "./types.js";
|
|
4
|
+
export interface DaimonTelemetryArtifactBundle {
|
|
5
|
+
/** One durable volume per pi/daimon agent, mounted onto its telemetry directory. */
|
|
6
|
+
mounts: ContainerPersistentMountReport[];
|
|
7
|
+
/** Runtime target plan id (e.g. "pi-app") -> { node id -> telemetry persistent mount id
|
|
8
|
+
* }, so `containerArtifacts.ts` can stamp `runtime_instances[].telemetry_mount_ids` and
|
|
9
|
+
* `artifactsExportPlan.ts`'s `planDaimonFiles` can resolve each agent's telemetry volume
|
|
10
|
+
* without re-deriving container paths of its own. */
|
|
11
|
+
telemetryMountIdsByInstance: Map<string, Record<string, string>>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Registers one run-scoped durable volume per pi/daimon agent for its daimon turn/wake
|
|
15
|
+
* causal telemetry directory (`<instanceRoot>/runtime/agents/<slug>/telemetry` — the parent
|
|
16
|
+
* of `causal.jsonl`, see `appCoreSource.ts`'s `runtimeHomePath`/`instanceRoot`), mirroring
|
|
17
|
+
* exactly how `moltnetArtifacts.ts` mounts the Moltnet causal directory (Piece 4b,
|
|
18
|
+
* Decision 21: daimon inner-truth telemetry was container-local — `docker cp` only — until
|
|
19
|
+
* now). Daimon's own write path is untouched: this only makes the HOST side of that same
|
|
20
|
+
* directory a named volume, so `docker rm` no longer discards it.
|
|
21
|
+
*/
|
|
22
|
+
export declare const createDaimonTelemetryArtifacts: (plan: CompilePlan, runtimePlans: RuntimeTargetPlan[], compiledNodes: CompiledNodeArtifact[]) => DaimonTelemetryArtifactBundle;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import path from "node:path/posix";
|
|
2
|
+
import { resolveNoopolisRunId } from "../runtime/index.js";
|
|
3
|
+
import { createPersistentVolumeName } from "./moltnetArtifactPaths.js";
|
|
4
|
+
/** Runtime names whose generated app is `src/runtime/pi/appCoreSource.ts` (the pi harness
|
|
5
|
+
* and its `daimonAdapter` alias — see `src/runtime/pi/adapter.ts`'s
|
|
6
|
+
* `export const daimonAdapter: RuntimeAdapter = { ...piAdapter, name: "daimon" }`, which
|
|
7
|
+
* shares `piAdapter.container`/`createContainerTargets` byte-for-byte). Both write daimon
|
|
8
|
+
* turn/wake causal telemetry the same way, under `runtimeHomePath` (appCoreSource.ts:189),
|
|
9
|
+
* so both need the telemetry mount, not just the literal "pi" runtime name. */
|
|
10
|
+
const DAIMON_TELEMETRY_RUNTIME_NAMES = new Set(["daimon", "pi"]);
|
|
11
|
+
const createTelemetryMountId = (agentSlug) => `agent-${agentSlug}-daimon-telemetry`;
|
|
12
|
+
/**
|
|
13
|
+
* Registers one run-scoped durable volume per pi/daimon agent for its daimon turn/wake
|
|
14
|
+
* causal telemetry directory (`<instanceRoot>/runtime/agents/<slug>/telemetry` — the parent
|
|
15
|
+
* of `causal.jsonl`, see `appCoreSource.ts`'s `runtimeHomePath`/`instanceRoot`), mirroring
|
|
16
|
+
* exactly how `moltnetArtifacts.ts` mounts the Moltnet causal directory (Piece 4b,
|
|
17
|
+
* Decision 21: daimon inner-truth telemetry was container-local — `docker cp` only — until
|
|
18
|
+
* now). Daimon's own write path is untouched: this only makes the HOST side of that same
|
|
19
|
+
* directory a named volume, so `docker rm` no longer discards it.
|
|
20
|
+
*/
|
|
21
|
+
export const createDaimonTelemetryArtifacts = (plan, runtimePlans, compiledNodes) => {
|
|
22
|
+
// Same run-scoping key as every other durable mount (see
|
|
23
|
+
// moltnetArtifactPaths.ts's createPersistentVolumeName doc comment): present for
|
|
24
|
+
// `spawnfile run`/`up` (which always call ensureNoopolisRunId() first), absent for a
|
|
25
|
+
// bare `spawnfile compile`/`build`, keeping those byte-identical to before this module
|
|
26
|
+
// existed.
|
|
27
|
+
const runId = resolveNoopolisRunId(process.env);
|
|
28
|
+
const agentSlugByNodeId = new Map(compiledNodes
|
|
29
|
+
.filter((node) => node.kind === "agent" && Boolean(node.id))
|
|
30
|
+
.map((node) => [node.id, node.slug]));
|
|
31
|
+
const mounts = [];
|
|
32
|
+
const telemetryMountIdsByInstance = new Map();
|
|
33
|
+
for (const runtimePlan of runtimePlans) {
|
|
34
|
+
if (!DAIMON_TELEMETRY_RUNTIME_NAMES.has(runtimePlan.runtimeName) || !runtimePlan.instancePaths.homePath) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const instanceRoot = runtimePlan.instancePaths.instanceRoot ?? path.dirname(runtimePlan.instancePaths.homePath);
|
|
38
|
+
const mountIdsByNodeId = {};
|
|
39
|
+
for (const nodeId of runtimePlan.sourceIds ?? []) {
|
|
40
|
+
const agentSlug = agentSlugByNodeId.get(nodeId);
|
|
41
|
+
if (!agentSlug) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const mountId = createTelemetryMountId(agentSlug);
|
|
45
|
+
mounts.push({
|
|
46
|
+
id: mountId,
|
|
47
|
+
mount_path: path.join(instanceRoot, "runtime", "agents", agentSlug, "telemetry"),
|
|
48
|
+
reason: `daimon turn/wake causal telemetry for ${agentSlug}`,
|
|
49
|
+
volume_name: createPersistentVolumeName(plan.root, mountId, undefined, runId)
|
|
50
|
+
});
|
|
51
|
+
mountIdsByNodeId[nodeId] = mountId;
|
|
52
|
+
}
|
|
53
|
+
if (Object.keys(mountIdsByNodeId).length > 0) {
|
|
54
|
+
telemetryMountIdsByInstance.set(runtimePlan.id, mountIdsByNodeId);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
mounts: mounts.sort((left, right) => left.id.localeCompare(right.id)),
|
|
59
|
+
telemetryMountIdsByInstance
|
|
60
|
+
};
|
|
61
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const DOCKER_BUILD_CONTEXT_IGNORE_PATTERNS: readonly ["runtimes/", "spawnfile-report.json", "deployments/"];
|
|
2
|
+
export interface DockerBuildContextFile {
|
|
3
|
+
mode: number;
|
|
4
|
+
path: string;
|
|
5
|
+
size: number;
|
|
6
|
+
}
|
|
7
|
+
export interface DockerBuildContextIgnoreViolation {
|
|
8
|
+
pattern: string;
|
|
9
|
+
source: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const matchesDockerBuildIgnorePattern: (relativePath: string, pattern: string) => boolean;
|
|
12
|
+
export declare const createDockerIgnoreContent: () => string;
|
|
13
|
+
export declare const listDockerBuildContextFiles: (directory: string) => Promise<DockerBuildContextFile[]>;
|
|
14
|
+
export declare const createDockerBuildContextDigest: (directory: string) => Promise<string>;
|
|
15
|
+
export declare const extractDockerBuildContextSources: (dockerfile: string) => string[];
|
|
16
|
+
export declare const findIgnoredDockerBuildSources: (dockerfile: string, patterns?: readonly string[]) => DockerBuildContextIgnoreViolation[];
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFile, readdir, stat } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
export const DOCKER_BUILD_CONTEXT_IGNORE_PATTERNS = Object.freeze([
|
|
5
|
+
"runtimes/",
|
|
6
|
+
"spawnfile-report.json",
|
|
7
|
+
"deployments/"
|
|
8
|
+
]);
|
|
9
|
+
const compareBytes = (left, right) => Buffer.compare(Buffer.from(left), Buffer.from(right));
|
|
10
|
+
const normalizeContextPath = (relativePath) => relativePath.replaceAll(path.sep, "/").replace(/^\.\/+/u, "");
|
|
11
|
+
const normalizeContextPathForContainment = (relativePath) => {
|
|
12
|
+
const normalized = path.posix.normalize(normalizeContextPath(relativePath));
|
|
13
|
+
return normalized === "." ? "" : normalized.replace(/\/+$/u, "");
|
|
14
|
+
};
|
|
15
|
+
export const matchesDockerBuildIgnorePattern = (relativePath, pattern) => {
|
|
16
|
+
const normalizedPath = normalizeContextPath(relativePath).replace(/\/+$/u, "");
|
|
17
|
+
const normalizedPattern = normalizeContextPath(pattern);
|
|
18
|
+
if (normalizedPattern.endsWith("/")) {
|
|
19
|
+
const directory = normalizedPattern.replace(/\/+$/u, "");
|
|
20
|
+
return normalizedPath === directory || normalizedPath.startsWith(`${directory}/`);
|
|
21
|
+
}
|
|
22
|
+
return normalizedPath === normalizedPattern;
|
|
23
|
+
};
|
|
24
|
+
export const createDockerIgnoreContent = () => `${DOCKER_BUILD_CONTEXT_IGNORE_PATTERNS.join("\n")}\n`;
|
|
25
|
+
const isIgnoredContextPath = (relativePath) => DOCKER_BUILD_CONTEXT_IGNORE_PATTERNS.some((pattern) => matchesDockerBuildIgnorePattern(relativePath, pattern));
|
|
26
|
+
const walkContextFiles = async (directory, relativeDirectory = "") => {
|
|
27
|
+
const entries = await readdir(path.join(directory, relativeDirectory), {
|
|
28
|
+
withFileTypes: true
|
|
29
|
+
});
|
|
30
|
+
const files = [];
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
const relativePath = normalizeContextPath(path.join(relativeDirectory, entry.name));
|
|
33
|
+
if (isIgnoredContextPath(relativePath)) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (entry.isDirectory()) {
|
|
37
|
+
files.push(...await walkContextFiles(directory, relativePath));
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const metadata = await stat(path.join(directory, relativePath));
|
|
41
|
+
if (metadata.isFile()) {
|
|
42
|
+
files.push({
|
|
43
|
+
mode: metadata.mode & 0o777,
|
|
44
|
+
path: relativePath,
|
|
45
|
+
size: metadata.size
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return files;
|
|
50
|
+
};
|
|
51
|
+
export const listDockerBuildContextFiles = async (directory) => (await walkContextFiles(path.resolve(directory))).sort((left, right) => compareBytes(left.path, right.path));
|
|
52
|
+
const canonicalJson = (value) => {
|
|
53
|
+
if (Array.isArray(value)) {
|
|
54
|
+
return `[${value.map((entry) => canonicalJson(entry)).join(",")}]`;
|
|
55
|
+
}
|
|
56
|
+
if (value !== null && typeof value === "object") {
|
|
57
|
+
return `{${Object.entries(value)
|
|
58
|
+
.sort(([left], [right]) => compareBytes(left, right))
|
|
59
|
+
.map(([key, entry]) => `${JSON.stringify(key)}:${canonicalJson(entry)}`)
|
|
60
|
+
.join(",")}}`;
|
|
61
|
+
}
|
|
62
|
+
return JSON.stringify(value);
|
|
63
|
+
};
|
|
64
|
+
const createFileContentHash = async (directory, relativePath) => {
|
|
65
|
+
const content = await readFile(path.join(directory, relativePath));
|
|
66
|
+
if (relativePath !== "distribution-report.json") {
|
|
67
|
+
return createHash("sha256").update(content).digest("hex");
|
|
68
|
+
}
|
|
69
|
+
const report = JSON.parse(content.toString("utf8"));
|
|
70
|
+
const { generated_at: _generatedAt, ...normalizedReport } = report;
|
|
71
|
+
return createHash("sha256")
|
|
72
|
+
.update(canonicalJson(normalizedReport))
|
|
73
|
+
.digest("hex");
|
|
74
|
+
};
|
|
75
|
+
export const createDockerBuildContextDigest = async (directory) => {
|
|
76
|
+
const resolvedDirectory = path.resolve(directory);
|
|
77
|
+
const digest = createHash("sha256");
|
|
78
|
+
for (const file of await listDockerBuildContextFiles(resolvedDirectory)) {
|
|
79
|
+
const contentHash = await createFileContentHash(resolvedDirectory, file.path);
|
|
80
|
+
digest.update(`${file.path}\0${file.mode}\0${contentHash}`);
|
|
81
|
+
}
|
|
82
|
+
return `sha256:${digest.digest("hex")}`;
|
|
83
|
+
};
|
|
84
|
+
const createLogicalDockerfileLines = (dockerfile) => {
|
|
85
|
+
const logicalLines = [];
|
|
86
|
+
let current = "";
|
|
87
|
+
for (const line of dockerfile.split(/\r?\n/u)) {
|
|
88
|
+
const trimmed = line.trim();
|
|
89
|
+
current = current.length === 0 ? trimmed : `${current} ${trimmed}`;
|
|
90
|
+
if (current.endsWith("\\")) {
|
|
91
|
+
current = current.slice(0, -1).trimEnd();
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
logicalLines.push(current);
|
|
95
|
+
current = "";
|
|
96
|
+
}
|
|
97
|
+
if (current.length > 0) {
|
|
98
|
+
logicalLines.push(current);
|
|
99
|
+
}
|
|
100
|
+
return logicalLines;
|
|
101
|
+
};
|
|
102
|
+
const tokenizeDockerInstruction = (source) => {
|
|
103
|
+
const tokens = [];
|
|
104
|
+
const pattern = /"((?:\\.|[^"])*)"|'([^']*)'|([^\s]+)/gu;
|
|
105
|
+
for (const match of source.matchAll(pattern)) {
|
|
106
|
+
if (match[1] !== undefined) {
|
|
107
|
+
tokens.push(JSON.parse(`"${match[1]}"`));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
tokens.push(match[2] ?? match[3] ?? "");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return tokens;
|
|
114
|
+
};
|
|
115
|
+
const stripInstructionFlags = (tokens) => {
|
|
116
|
+
let index = 0;
|
|
117
|
+
while (tokens[index]?.startsWith("--")) {
|
|
118
|
+
index += tokens[index]?.includes("=") ? 1 : 2;
|
|
119
|
+
}
|
|
120
|
+
return tokens.slice(index);
|
|
121
|
+
};
|
|
122
|
+
export const extractDockerBuildContextSources = (dockerfile) => {
|
|
123
|
+
const sources = [];
|
|
124
|
+
for (const line of createLogicalDockerfileLines(dockerfile)) {
|
|
125
|
+
const match = line.match(/^(COPY|ADD)\s+(.+)$/iu);
|
|
126
|
+
if (!match) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
const instruction = match[1].toUpperCase();
|
|
130
|
+
const argumentsSource = match[2].trim();
|
|
131
|
+
const rawTokens = argumentsSource.startsWith("[")
|
|
132
|
+
? JSON.parse(argumentsSource)
|
|
133
|
+
: tokenizeDockerInstruction(argumentsSource);
|
|
134
|
+
if (instruction === "COPY"
|
|
135
|
+
&& rawTokens.some((token) => token === "--from" || token.startsWith("--from="))) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const tokens = stripInstructionFlags(rawTokens);
|
|
139
|
+
for (const source of tokens.slice(0, -1)) {
|
|
140
|
+
if (instruction === "ADD" && /^(?:https?|git):\/\//u.test(source)) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
sources.push(normalizeContextPath(source));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return sources;
|
|
147
|
+
};
|
|
148
|
+
export const findIgnoredDockerBuildSources = (dockerfile, patterns = DOCKER_BUILD_CONTEXT_IGNORE_PATTERNS) => extractDockerBuildContextSources(dockerfile).flatMap((source) => {
|
|
149
|
+
const normalizedSource = normalizeContextPathForContainment(source);
|
|
150
|
+
return patterns.flatMap((pattern) => {
|
|
151
|
+
const normalizedPattern = normalizeContextPathForContainment(pattern);
|
|
152
|
+
const swallowsIgnoredPath = normalizedSource.length === 0
|
|
153
|
+
|| normalizedPattern === normalizedSource
|
|
154
|
+
|| normalizedPattern.startsWith(`${normalizedSource}/`);
|
|
155
|
+
return matchesDockerBuildIgnorePattern(source, pattern) || swallowsIgnoredPath
|
|
156
|
+
? [{ pattern, source }]
|
|
157
|
+
: [];
|
|
158
|
+
});
|
|
159
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { BuildImageCacheEntry } from "../deployment/buildImageCacheStore.js";
|
|
2
|
+
export declare const DOCKER_IMAGE_INSPECT_MAX_OUTPUT_BYTES: number;
|
|
3
|
+
export declare const DOCKER_IMAGE_INSPECT_TIMEOUT_MS = 5000;
|
|
4
|
+
export interface DockerImageInspection {
|
|
5
|
+
id: string;
|
|
6
|
+
labels: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
export interface DockerImageInspectInput {
|
|
9
|
+
dockerCommand?: string;
|
|
10
|
+
dockerContext?: string | null;
|
|
11
|
+
imageTag: string;
|
|
12
|
+
}
|
|
13
|
+
export interface DockerImageInspectCommandOptions {
|
|
14
|
+
encoding: "utf8";
|
|
15
|
+
maxBuffer: number;
|
|
16
|
+
timeout: number;
|
|
17
|
+
}
|
|
18
|
+
export type DockerImageInspectCommandRunner = (command: string, args: string[], options: DockerImageInspectCommandOptions) => Promise<{
|
|
19
|
+
stdout: string;
|
|
20
|
+
}>;
|
|
21
|
+
export type DockerImageInspector = (input: DockerImageInspectInput) => Promise<DockerImageInspection | null>;
|
|
22
|
+
export declare const createDockerImageInspector: (runner?: DockerImageInspectCommandRunner) => DockerImageInspector;
|
|
23
|
+
export declare const inspectDockerImage: DockerImageInspector;
|
|
24
|
+
export interface DockerBuildSkipInput extends DockerImageInspectInput {
|
|
25
|
+
cacheEntry: BuildImageCacheEntry | null;
|
|
26
|
+
compileFingerprint: string;
|
|
27
|
+
contextDigest: string;
|
|
28
|
+
imageInspector?: DockerImageInspector;
|
|
29
|
+
}
|
|
30
|
+
export declare const shouldSkipDockerBuild: (input: DockerBuildSkipInput) => Promise<boolean>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { execFile as execFileCallback } from "node:child_process";
|
|
2
|
+
export const DOCKER_IMAGE_INSPECT_MAX_OUTPUT_BYTES = 64 * 1024;
|
|
3
|
+
export const DOCKER_IMAGE_INSPECT_TIMEOUT_MS = 5_000;
|
|
4
|
+
const runDockerImageInspectCommand = async (command, args, options) => new Promise((resolve, reject) => {
|
|
5
|
+
execFileCallback(command, args, options, (error, stdout) => {
|
|
6
|
+
if (error) {
|
|
7
|
+
reject(error);
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
resolve({ stdout });
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
const parseDockerImageInspection = (source) => {
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(source);
|
|
16
|
+
if (typeof parsed.id !== "string" || parsed.id.length === 0) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
if (parsed.labels === null || parsed.labels === undefined) {
|
|
20
|
+
return { id: parsed.id, labels: {} };
|
|
21
|
+
}
|
|
22
|
+
if (typeof parsed.labels !== "object" || Array.isArray(parsed.labels)) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const labels = Object.fromEntries(Object.entries(parsed.labels).filter((entry) => typeof entry[1] === "string"));
|
|
26
|
+
if (Object.keys(labels).length !== Object.keys(parsed.labels).length) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return { id: parsed.id, labels };
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
export const createDockerImageInspector = (runner = runDockerImageInspectCommand) => async (input) => {
|
|
36
|
+
const args = input.dockerContext
|
|
37
|
+
? ["--context", input.dockerContext, "image", "inspect", input.imageTag]
|
|
38
|
+
: ["image", "inspect", input.imageTag];
|
|
39
|
+
args.push("--format", '{"id":{{json .Id}},"labels":{{json .Config.Labels}}}');
|
|
40
|
+
try {
|
|
41
|
+
const { stdout } = await runner(input.dockerCommand ?? "docker", args, {
|
|
42
|
+
encoding: "utf8",
|
|
43
|
+
maxBuffer: DOCKER_IMAGE_INSPECT_MAX_OUTPUT_BYTES,
|
|
44
|
+
timeout: DOCKER_IMAGE_INSPECT_TIMEOUT_MS
|
|
45
|
+
});
|
|
46
|
+
if (Buffer.byteLength(stdout) > DOCKER_IMAGE_INSPECT_MAX_OUTPUT_BYTES) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return parseDockerImageInspection(stdout);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
export const inspectDockerImage = createDockerImageInspector();
|
|
56
|
+
export const shouldSkipDockerBuild = async (input) => {
|
|
57
|
+
const entry = input.cacheEntry;
|
|
58
|
+
if (!entry) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
if (entry.contextDigest !== input.contextDigest) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
if (entry.imageTag !== input.imageTag) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (entry.compileFingerprint !== input.compileFingerprint) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (entry.dockerContext !== (input.dockerContext ?? null)) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const inspection = await (input.imageInspector ?? inspectDockerImage)(input);
|
|
75
|
+
return inspection?.id === entry.imageId
|
|
76
|
+
&& inspection.labels["com.spawnfile.compile_fingerprint"] === entry.compileFingerprint;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
};
|
package/dist/compiler/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export * from "./buildProject.js";
|
|
|
4
4
|
export * from "./publishProject.js";
|
|
5
5
|
export * from "./upProject.js";
|
|
6
6
|
export * from "./compileProject.js";
|
|
7
|
+
export * from "./dockerBuildContext.js";
|
|
8
|
+
export * from "./dockerBuildSkip.js";
|
|
7
9
|
export * from "./initProject.js";
|
|
8
10
|
export * from "./moltnetRoomMemberships.js";
|
|
9
11
|
export * from "./runProject.js";
|
|
@@ -12,4 +14,6 @@ export * from "./types.js";
|
|
|
12
14
|
export * from "./updateProjectModels.js";
|
|
13
15
|
export * from "./updateProjectRuntime.js";
|
|
14
16
|
export * from "./updateProjectSurfaces.js";
|
|
17
|
+
export * from "./upReceipt.js";
|
|
18
|
+
export * from "./worldBindings.js";
|
|
15
19
|
export * from "./view/index.js";
|
package/dist/compiler/index.js
CHANGED
|
@@ -4,6 +4,8 @@ export * from "./buildProject.js";
|
|
|
4
4
|
export * from "./publishProject.js";
|
|
5
5
|
export * from "./upProject.js";
|
|
6
6
|
export * from "./compileProject.js";
|
|
7
|
+
export * from "./dockerBuildContext.js";
|
|
8
|
+
export * from "./dockerBuildSkip.js";
|
|
7
9
|
export * from "./initProject.js";
|
|
8
10
|
export * from "./moltnetRoomMemberships.js";
|
|
9
11
|
export * from "./runProject.js";
|
|
@@ -12,4 +14,6 @@ export * from "./types.js";
|
|
|
12
14
|
export * from "./updateProjectModels.js";
|
|
13
15
|
export * from "./updateProjectRuntime.js";
|
|
14
16
|
export * from "./updateProjectSurfaces.js";
|
|
17
|
+
export * from "./upReceipt.js";
|
|
18
|
+
export * from "./worldBindings.js";
|
|
15
19
|
export * from "./view/index.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CompilePlan, ResolvedMemoryBank } from "./types.js";
|
|
2
|
+
import type { ContainerMemoryTransport, ContainerPersistentMountReport } from "../report/types.js";
|
|
3
|
+
type MemoryStoreKind = "json" | "memory" | "postgres" | "sqlite";
|
|
4
|
+
type MemoryArtifactSummary = {
|
|
5
|
+
id: string;
|
|
6
|
+
declaring_node_id: string;
|
|
7
|
+
accessible_node_ids: string[];
|
|
8
|
+
store: {
|
|
9
|
+
kind: MemoryStoreKind;
|
|
10
|
+
path?: string;
|
|
11
|
+
persistence?: "durable" | "ephemeral";
|
|
12
|
+
persistent_mount_id?: string;
|
|
13
|
+
dsn_secret?: string;
|
|
14
|
+
};
|
|
15
|
+
index: ResolvedMemoryBank["index"];
|
|
16
|
+
consolidation: ResolvedMemoryBank["consolidation"];
|
|
17
|
+
retention: ResolvedMemoryBank["retention"];
|
|
18
|
+
transport_by_node_id: Record<string, ContainerMemoryTransport>;
|
|
19
|
+
};
|
|
20
|
+
export interface MemoryArtifactBundle {
|
|
21
|
+
mountPathMemoryMap: Map<string, string>;
|
|
22
|
+
mounts: ContainerPersistentMountReport[];
|
|
23
|
+
memories: MemoryArtifactSummary[];
|
|
24
|
+
}
|
|
25
|
+
export declare const createMemoryArtifactBundle: (plan: CompilePlan) => MemoryArtifactBundle;
|
|
26
|
+
export {};
|