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,80 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { assertOrdinaryJsonGraph, parseOpaqueTargetHandle, parseRunId } from "../target/index.js";
|
|
4
|
+
export const ORGANIZATION_HANDOFF_VERSION = "spawnfile.organization-handoff.v1";
|
|
5
|
+
const digestSchema = z.string().regex(/^sha256:[a-f0-9]{64}$/u);
|
|
6
|
+
const lifecycleReceiptsSchema = z.object({
|
|
7
|
+
down: z.literal("spawnfile.down-receipt.v1"),
|
|
8
|
+
export: z.literal("spawnfile.export-index.v1"),
|
|
9
|
+
up: z.literal("spawnfile.up-receipt.v1")
|
|
10
|
+
}).strict();
|
|
11
|
+
const parseError = (label, detail) => {
|
|
12
|
+
throw new Error(`invalid ${ORGANIZATION_HANDOFF_VERSION} ${label}: ${detail}`);
|
|
13
|
+
};
|
|
14
|
+
export const parseCanonicalSha256Digest = (value, label = "digest") => {
|
|
15
|
+
const parsed = digestSchema.safeParse(value);
|
|
16
|
+
if (!parsed.success)
|
|
17
|
+
parseError(label, "must be a canonical sha256 digest");
|
|
18
|
+
return parsed.data;
|
|
19
|
+
};
|
|
20
|
+
const lifecycleReceipts = {
|
|
21
|
+
down: "spawnfile.down-receipt.v1",
|
|
22
|
+
export: "spawnfile.export-index.v1",
|
|
23
|
+
up: "spawnfile.up-receipt.v1"
|
|
24
|
+
};
|
|
25
|
+
const canonicalDerivationBytes = (input) => [
|
|
26
|
+
"spawnfile.organization-handoff.v1\0",
|
|
27
|
+
input.run_id,
|
|
28
|
+
input.selected_target_receipt_digest,
|
|
29
|
+
input.network_attachment_handle,
|
|
30
|
+
input.binding_digest,
|
|
31
|
+
input.lifecycle_receipts.up,
|
|
32
|
+
input.lifecycle_receipts.export,
|
|
33
|
+
input.lifecycle_receipts.down
|
|
34
|
+
].join("\n");
|
|
35
|
+
export const createOrganizationDeploymentHandle = (input) => `sf-oh1-${createHash("sha256").update(canonicalDerivationBytes(input), "utf8").digest("hex")}`;
|
|
36
|
+
export const createOrganizationHandoff = (runId, input) => {
|
|
37
|
+
const handoff = {
|
|
38
|
+
binding_digest: parseCanonicalSha256Digest(input.bindingDigest, "binding_digest"),
|
|
39
|
+
lifecycle_receipts: lifecycleReceipts,
|
|
40
|
+
network_attachment_handle: parseOpaqueTargetHandle(input.networkAttachmentHandle),
|
|
41
|
+
run_id: parseRunId(runId),
|
|
42
|
+
selected_target_receipt_digest: parseCanonicalSha256Digest(input.selectedTargetReceiptDigest, "selected_target_receipt_digest")
|
|
43
|
+
};
|
|
44
|
+
return {
|
|
45
|
+
...handoff,
|
|
46
|
+
deployment_handle: createOrganizationDeploymentHandle(handoff),
|
|
47
|
+
version: ORGANIZATION_HANDOFF_VERSION
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
const organizationHandoffSchema = z.object({
|
|
51
|
+
binding_digest: digestSchema,
|
|
52
|
+
deployment_handle: z.string().regex(/^sf-oh1-[a-f0-9]{64}$/u),
|
|
53
|
+
lifecycle_receipts: lifecycleReceiptsSchema,
|
|
54
|
+
network_attachment_handle: z.string(),
|
|
55
|
+
run_id: z.string(),
|
|
56
|
+
selected_target_receipt_digest: digestSchema,
|
|
57
|
+
version: z.literal(ORGANIZATION_HANDOFF_VERSION)
|
|
58
|
+
}).strict();
|
|
59
|
+
export const parseOrganizationHandoff = (value) => {
|
|
60
|
+
try {
|
|
61
|
+
assertOrdinaryJsonGraph(value);
|
|
62
|
+
const parsed = organizationHandoffSchema.safeParse(value);
|
|
63
|
+
if (!parsed.success)
|
|
64
|
+
throw new TypeError();
|
|
65
|
+
const handoff = {
|
|
66
|
+
binding_digest: parseCanonicalSha256Digest(parsed.data.binding_digest, "binding_digest"),
|
|
67
|
+
lifecycle_receipts: parsed.data.lifecycle_receipts,
|
|
68
|
+
network_attachment_handle: parseOpaqueTargetHandle(parsed.data.network_attachment_handle),
|
|
69
|
+
run_id: parseRunId(parsed.data.run_id),
|
|
70
|
+
selected_target_receipt_digest: parseCanonicalSha256Digest(parsed.data.selected_target_receipt_digest, "selected_target_receipt_digest")
|
|
71
|
+
};
|
|
72
|
+
const expectedHandle = createOrganizationDeploymentHandle(handoff);
|
|
73
|
+
if (parsed.data.deployment_handle !== expectedHandle)
|
|
74
|
+
throw new TypeError();
|
|
75
|
+
return { ...handoff, deployment_handle: expectedHandle, version: ORGANIZATION_HANDOFF_VERSION };
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return parseError("artifact", "must be a bounded canonical handoff");
|
|
79
|
+
}
|
|
80
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { OrganizationReadinessEvidence } from "../compiler/organizationReadyEvidence.js";
|
|
3
|
+
import type { DockerUnitInspection } from "./dockerInspect.js";
|
|
4
|
+
export declare const ORGANIZATION_READY_VERSION: "spawnfile.organization-ready.v1";
|
|
5
|
+
declare const codes: readonly ["organization_ready", "external_moltnet", "compiled_evidence_missing", "unit_unavailable", "unit_restarted", "probe_unavailable", "identity_mismatch", "topology_mismatch", "probe_timeout", "probe_cancelled"];
|
|
6
|
+
export type OrganizationReadyCode = (typeof codes)[number];
|
|
7
|
+
export type OrganizationReadyState = "ready" | "pending" | "failed" | "cancelled";
|
|
8
|
+
export interface OrganizationReadiness {
|
|
9
|
+
readonly version: typeof ORGANIZATION_READY_VERSION;
|
|
10
|
+
readonly run_id: string | null;
|
|
11
|
+
readonly compile_fingerprint: string;
|
|
12
|
+
readonly unit_id: string;
|
|
13
|
+
readonly world_binding_digest: string | null;
|
|
14
|
+
readonly state: OrganizationReadyState;
|
|
15
|
+
readonly code: OrganizationReadyCode;
|
|
16
|
+
readonly reason?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface OrganizationReadinessProbeData {
|
|
19
|
+
readonly configs: ReadonlyMap<string, string>;
|
|
20
|
+
readonly networks: readonly {
|
|
21
|
+
readonly healthOk: boolean;
|
|
22
|
+
readonly id: string;
|
|
23
|
+
}[];
|
|
24
|
+
readonly worldBindings: string | null;
|
|
25
|
+
}
|
|
26
|
+
export interface ReconcileOrganizationReadinessInput {
|
|
27
|
+
readonly evidence: OrganizationReadinessEvidence;
|
|
28
|
+
readonly inspection: DockerUnitInspection | null;
|
|
29
|
+
readonly record: {
|
|
30
|
+
readonly compileFingerprint: string;
|
|
31
|
+
readonly deploymentName: string;
|
|
32
|
+
readonly runId: string | null;
|
|
33
|
+
readonly unitCount: number;
|
|
34
|
+
readonly unitId: string;
|
|
35
|
+
};
|
|
36
|
+
readonly probe: OrganizationReadinessProbeData | null;
|
|
37
|
+
}
|
|
38
|
+
export declare const organizationReadinessSchema: z.ZodPreprocess<z.ZodObject<{
|
|
39
|
+
code: z.ZodUnion<readonly [z.ZodLiteral<"organization_ready">, z.ZodLiteral<"external_moltnet">, z.ZodLiteral<"compiled_evidence_missing">, z.ZodLiteral<"unit_unavailable">, z.ZodLiteral<"unit_restarted">, z.ZodLiteral<"probe_unavailable">, z.ZodLiteral<"identity_mismatch">, z.ZodLiteral<"topology_mismatch">, z.ZodLiteral<"probe_timeout">, z.ZodLiteral<"probe_cancelled">]>;
|
|
40
|
+
compile_fingerprint: z.ZodString;
|
|
41
|
+
run_id: z.ZodNullable<z.ZodString>;
|
|
42
|
+
state: z.ZodUnion<readonly [z.ZodLiteral<"ready">, z.ZodLiteral<"pending">, z.ZodLiteral<"failed">, z.ZodLiteral<"cancelled">]>;
|
|
43
|
+
unit_id: z.ZodString;
|
|
44
|
+
version: z.ZodLiteral<"spawnfile.organization-ready.v1">;
|
|
45
|
+
world_binding_digest: z.ZodNullable<z.ZodString>;
|
|
46
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
47
|
+
}, z.core.$strict>>;
|
|
48
|
+
export declare const createOrganizationReadinessPending: (evidence: OrganizationReadinessEvidence, record: ReconcileOrganizationReadinessInput["record"]) => OrganizationReadiness;
|
|
49
|
+
export declare const parseOrganizationReadiness: (value: unknown) => OrganizationReadiness;
|
|
50
|
+
export declare const reconcileOrganizationReadiness: (input: ReconcileOrganizationReadinessInput) => OrganizationReadiness;
|
|
51
|
+
export declare const organizationReadinessFromProbeError: (evidence: OrganizationReadinessEvidence, record: ReconcileOrganizationReadinessInput["record"], error: unknown) => OrganizationReadiness;
|
|
52
|
+
export {};
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { types as nodeTypes } from "node:util";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
export const ORGANIZATION_READY_VERSION = "spawnfile.organization-ready.v1";
|
|
5
|
+
const ID = /^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$/u;
|
|
6
|
+
const FINGERPRINT = /^sf1:[a-f0-9]{12}$/u;
|
|
7
|
+
const DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
8
|
+
const codes = [
|
|
9
|
+
"organization_ready",
|
|
10
|
+
"external_moltnet",
|
|
11
|
+
"compiled_evidence_missing",
|
|
12
|
+
"unit_unavailable",
|
|
13
|
+
"unit_restarted",
|
|
14
|
+
"probe_unavailable",
|
|
15
|
+
"identity_mismatch",
|
|
16
|
+
"topology_mismatch",
|
|
17
|
+
"probe_timeout",
|
|
18
|
+
"probe_cancelled"
|
|
19
|
+
];
|
|
20
|
+
const isPlainRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value)
|
|
21
|
+
&& Object.getPrototypeOf(value) === Object.prototype && !nodeTypes.isProxy(value);
|
|
22
|
+
const organizationReadinessObjectSchema = z.object({
|
|
23
|
+
code: z.union([
|
|
24
|
+
z.literal("organization_ready"), z.literal("external_moltnet"),
|
|
25
|
+
z.literal("compiled_evidence_missing"), z.literal("unit_unavailable"),
|
|
26
|
+
z.literal("unit_restarted"), z.literal("probe_unavailable"),
|
|
27
|
+
z.literal("identity_mismatch"), z.literal("topology_mismatch"),
|
|
28
|
+
z.literal("probe_timeout"), z.literal("probe_cancelled")
|
|
29
|
+
]),
|
|
30
|
+
compile_fingerprint: z.string(),
|
|
31
|
+
run_id: z.string().nullable(),
|
|
32
|
+
state: z.union([
|
|
33
|
+
z.literal("ready"), z.literal("pending"), z.literal("failed"), z.literal("cancelled")
|
|
34
|
+
]),
|
|
35
|
+
unit_id: z.string(),
|
|
36
|
+
version: z.literal(ORGANIZATION_READY_VERSION),
|
|
37
|
+
world_binding_digest: z.string().nullable(),
|
|
38
|
+
reason: z.string().min(1).max(512).optional()
|
|
39
|
+
}).strict().superRefine((result, context) => {
|
|
40
|
+
if (!FINGERPRINT.test(result.compile_fingerprint)) {
|
|
41
|
+
context.addIssue({ code: z.ZodIssueCode.custom, path: ["compile_fingerprint"], message: "invalid fingerprint" });
|
|
42
|
+
}
|
|
43
|
+
if (!ID.test(result.unit_id)) {
|
|
44
|
+
context.addIssue({ code: z.ZodIssueCode.custom, path: ["unit_id"], message: "invalid unit id" });
|
|
45
|
+
}
|
|
46
|
+
if (result.run_id !== null && !ID.test(result.run_id)) {
|
|
47
|
+
context.addIssue({ code: z.ZodIssueCode.custom, path: ["run_id"], message: "invalid run id" });
|
|
48
|
+
}
|
|
49
|
+
if (result.world_binding_digest !== null && !DIGEST.test(result.world_binding_digest)) {
|
|
50
|
+
context.addIssue({ code: z.ZodIssueCode.custom, path: ["world_binding_digest"], message: "invalid digest" });
|
|
51
|
+
}
|
|
52
|
+
if (!validStateCode(result.state, result.code)) {
|
|
53
|
+
context.addIssue({ code: z.ZodIssueCode.custom, path: ["state"], message: "invalid state/code combination" });
|
|
54
|
+
}
|
|
55
|
+
if (result.state === "ready" && (result.run_id === null || result.world_binding_digest === null)) {
|
|
56
|
+
context.addIssue({ code: z.ZodIssueCode.custom, path: ["state"], message: "ready requires run_id and world_binding_digest" });
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
export const organizationReadinessSchema = z.preprocess((value) => isPlainRecord(value) ? value : null, organizationReadinessObjectSchema);
|
|
60
|
+
const exact = (value, fields) => {
|
|
61
|
+
if (!isPlainRecord(value))
|
|
62
|
+
return null;
|
|
63
|
+
const keys = Object.keys(value);
|
|
64
|
+
return keys.length === fields.length
|
|
65
|
+
&& keys.every((key) => fields.includes(key))
|
|
66
|
+
&& fields.every((field) => Object.hasOwn(value, field))
|
|
67
|
+
? value
|
|
68
|
+
: null;
|
|
69
|
+
};
|
|
70
|
+
const sameSet = (left, right) => left.length === right.length
|
|
71
|
+
&& new Set(left).size === left.length
|
|
72
|
+
&& new Set(right).size === right.length
|
|
73
|
+
&& left.every((entry) => right.includes(entry));
|
|
74
|
+
const create = (input) => ({
|
|
75
|
+
code: input.code,
|
|
76
|
+
compile_fingerprint: input.compileFingerprint,
|
|
77
|
+
run_id: input.runId,
|
|
78
|
+
state: input.state,
|
|
79
|
+
unit_id: input.unitId,
|
|
80
|
+
version: ORGANIZATION_READY_VERSION,
|
|
81
|
+
world_binding_digest: input.worldBindingDigest,
|
|
82
|
+
...(input.reason ? { reason: input.reason } : {})
|
|
83
|
+
});
|
|
84
|
+
const correlation = (evidence, record, state, code) => create({
|
|
85
|
+
code,
|
|
86
|
+
compileFingerprint: evidence.compileFingerprint,
|
|
87
|
+
runId: record.runId,
|
|
88
|
+
state,
|
|
89
|
+
unitId: record.unitId,
|
|
90
|
+
worldBindingDigest: evidence.worldBindings?.digest ?? null
|
|
91
|
+
});
|
|
92
|
+
const validStateCode = (state, code) => (state === "ready" && code === "organization_ready")
|
|
93
|
+
|| (state === "pending" && [
|
|
94
|
+
"external_moltnet", "compiled_evidence_missing", "unit_unavailable", "unit_restarted", "probe_unavailable"
|
|
95
|
+
].includes(code))
|
|
96
|
+
|| (state === "failed" && ["identity_mismatch", "topology_mismatch", "probe_timeout"].includes(code))
|
|
97
|
+
|| (state === "cancelled" && code === "probe_cancelled");
|
|
98
|
+
export const createOrganizationReadinessPending = (evidence, record) => correlation(evidence, record, "pending", evidence.hasExternalMoltnet ? "external_moltnet" : evidence.worldBindings ? "probe_unavailable" : "compiled_evidence_missing");
|
|
99
|
+
export const parseOrganizationReadiness = (value) => {
|
|
100
|
+
const parsed = organizationReadinessSchema.safeParse(value);
|
|
101
|
+
if (!parsed.success) {
|
|
102
|
+
throw new Error(`invalid ${ORGANIZATION_READY_VERSION}`);
|
|
103
|
+
}
|
|
104
|
+
const result = {
|
|
105
|
+
code: parsed.data.code,
|
|
106
|
+
compile_fingerprint: parsed.data.compile_fingerprint,
|
|
107
|
+
run_id: parsed.data.run_id,
|
|
108
|
+
state: parsed.data.state,
|
|
109
|
+
unit_id: parsed.data.unit_id,
|
|
110
|
+
version: ORGANIZATION_READY_VERSION,
|
|
111
|
+
world_binding_digest: parsed.data.world_binding_digest,
|
|
112
|
+
...(parsed.data.reason ? { reason: parsed.data.reason } : {})
|
|
113
|
+
};
|
|
114
|
+
return result;
|
|
115
|
+
};
|
|
116
|
+
const hash = (content) => `sha256:${createHash("sha256").update(content).digest("hex")}`;
|
|
117
|
+
const validNodeConfig = (content, expectedDigest) => {
|
|
118
|
+
if (!content || hash(content) !== expectedDigest)
|
|
119
|
+
return false;
|
|
120
|
+
try {
|
|
121
|
+
const config = JSON.parse(content);
|
|
122
|
+
return isPlainRecord(config) && config.version === "moltnet.node.v1";
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const validBindings = (evidence, content) => {
|
|
129
|
+
if (!content || !evidence.worldBindings || hash(content) !== evidence.worldBindings.digest)
|
|
130
|
+
return false;
|
|
131
|
+
try {
|
|
132
|
+
const body = exact(JSON.parse(content), ["schema", "bindings"]);
|
|
133
|
+
if (!body || body.schema !== evidence.worldBindings.schema || !Array.isArray(body.bindings))
|
|
134
|
+
return false;
|
|
135
|
+
const members = body.bindings.map((entry) => {
|
|
136
|
+
const binding = exact(entry, [
|
|
137
|
+
"member", "run_id", "world_instance_id", "capability_manifest_digest", "token_env", "json", "mcp"
|
|
138
|
+
]);
|
|
139
|
+
const member = binding ? exact(binding.member, ["id", "principal_id"]) : null;
|
|
140
|
+
return member && typeof member.id === "string" && member.principal_id === `agent:${member.id}` && ID.test(member.id)
|
|
141
|
+
? member.id
|
|
142
|
+
: null;
|
|
143
|
+
});
|
|
144
|
+
return members.every((member) => member !== null)
|
|
145
|
+
&& sameSet(members, evidence.worldBindings.assignments.map((assignment) => assignment.memberId));
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
export const reconcileOrganizationReadiness = (input) => {
|
|
152
|
+
const { evidence, inspection, record } = input;
|
|
153
|
+
if (evidence.hasExternalMoltnet)
|
|
154
|
+
return correlation(evidence, record, "pending", "external_moltnet");
|
|
155
|
+
if (!evidence.worldBindings || !record.runId)
|
|
156
|
+
return correlation(evidence, record, "pending", "compiled_evidence_missing");
|
|
157
|
+
if (record.unitCount !== 1 || !inspection || inspection.running !== true || inspection.exists !== true) {
|
|
158
|
+
return correlation(evidence, record, "pending", "unit_unavailable");
|
|
159
|
+
}
|
|
160
|
+
if (inspection.restartCount !== 0)
|
|
161
|
+
return correlation(evidence, record, "pending", "unit_restarted");
|
|
162
|
+
const identity = inspection.identity;
|
|
163
|
+
if (!identity)
|
|
164
|
+
return correlation(evidence, record, "pending", "probe_unavailable");
|
|
165
|
+
if (inspection.drift.length > 0 || record.compileFingerprint !== evidence.compileFingerprint
|
|
166
|
+
|| identity.compileFingerprint !== evidence.compileFingerprint || identity.deployment !== record.deploymentName
|
|
167
|
+
|| identity.project !== evidence.projectLabel || identity.runId !== record.runId
|
|
168
|
+
|| identity.unit !== record.unitId || identity.version !== evidence.compileVersion) {
|
|
169
|
+
return correlation(evidence, record, "failed", "identity_mismatch");
|
|
170
|
+
}
|
|
171
|
+
if (!input.probe || input.probe.networks.length !== evidence.networks.length
|
|
172
|
+
|| !evidence.networks.every((network) => {
|
|
173
|
+
const live = input.probe?.networks.find((candidate) => candidate.id === network.id);
|
|
174
|
+
return live?.healthOk === true;
|
|
175
|
+
})
|
|
176
|
+
|| !evidence.networks.every((network) => network.nodes.every((node) => validNodeConfig(input.probe.configs.get(node.configPath), node.sha256)))
|
|
177
|
+
|| !validBindings(evidence, input.probe.worldBindings)) {
|
|
178
|
+
return correlation(evidence, record, "failed", "topology_mismatch");
|
|
179
|
+
}
|
|
180
|
+
return correlation(evidence, record, "ready", "organization_ready");
|
|
181
|
+
};
|
|
182
|
+
export const organizationReadinessFromProbeError = (evidence, record, error) => {
|
|
183
|
+
const name = error instanceof Error ? error.name : "";
|
|
184
|
+
const message = error instanceof Error ? error.message : "";
|
|
185
|
+
if (name === "TimeoutError" || /timeout|timed out/iu.test(message)) {
|
|
186
|
+
return { ...correlation(evidence, record, "failed", "probe_timeout"), reason: boundedReadinessReason(message) };
|
|
187
|
+
}
|
|
188
|
+
if (name === "AbortError" || /cancel|abort/iu.test(message)) {
|
|
189
|
+
return { ...correlation(evidence, record, "cancelled", "probe_cancelled"), reason: boundedReadinessReason(message) };
|
|
190
|
+
}
|
|
191
|
+
if (/\bHTTP 4\d{2}\b/iu.test(message)) {
|
|
192
|
+
return { ...correlation(evidence, record, "failed", "topology_mismatch"), reason: boundedReadinessReason(message) };
|
|
193
|
+
}
|
|
194
|
+
return { ...correlation(evidence, record, "pending", "probe_unavailable"), reason: boundedReadinessReason(message) };
|
|
195
|
+
};
|
|
196
|
+
const boundedReadinessReason = (message) => message
|
|
197
|
+
.replace(/\s+/gu, " ")
|
|
198
|
+
.replace(/(bearer|token|password|passwd|secret|authorization)[=: ]+(?:bearer[ ]+)?[^ ]+/giu, "$1=[redacted]")
|
|
199
|
+
.replace(/https?:\/\/[^ ]+/giu, "[url redacted]")
|
|
200
|
+
.slice(0, 512) || "probe unavailable";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CompileReport } from "../report/index.js";
|
|
2
|
+
import { type DockerArtifactExecFile } from "./artifactsExportDocker.js";
|
|
3
|
+
import type { ExportIndexFile } from "./artifactsExportTypes.js";
|
|
4
|
+
import type { DeploymentRecord } from "./record.js";
|
|
5
|
+
export interface PrivateArtifactsExportResult {
|
|
6
|
+
readonly files: readonly ExportIndexFile[];
|
|
7
|
+
readonly missing: readonly string[];
|
|
8
|
+
}
|
|
9
|
+
/** Explicit opt-in egress for unredacted runtime training artifacts. */
|
|
10
|
+
export declare const exportPrivateRuntimeArtifacts: (input: Readonly<{
|
|
11
|
+
containerRef: string;
|
|
12
|
+
destinationDirectory: string;
|
|
13
|
+
dockerCommand: string;
|
|
14
|
+
execFile: DockerArtifactExecFile;
|
|
15
|
+
report: CompileReport;
|
|
16
|
+
target: DeploymentRecord["target"];
|
|
17
|
+
timeoutMs: number;
|
|
18
|
+
}>) => Promise<PrivateArtifactsExportResult>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { lstat, readFile, readdir, rm } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { ensureDirectory } from "../filesystem/index.js";
|
|
5
|
+
import { copyContainerFileToHost, } from "./artifactsExportDocker.js";
|
|
6
|
+
const plans = (report) => (report.container?.runtime_instances ?? [])
|
|
7
|
+
.filter((instance) => (instance.runtime === "pi" || instance.runtime === "daimon")
|
|
8
|
+
&& instance.home_path !== null)
|
|
9
|
+
.flatMap((instance) => {
|
|
10
|
+
const instanceRoot = path.posix.dirname(instance.home_path);
|
|
11
|
+
return (instance.node_ids ?? [])
|
|
12
|
+
.filter((nodeId) => nodeId.startsWith("agent:"))
|
|
13
|
+
.map((nodeId) => nodeId.slice("agent:".length))
|
|
14
|
+
.filter((slug) => /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(slug))
|
|
15
|
+
.map((slug) => Object.freeze({
|
|
16
|
+
containerPath: `${instanceRoot}/runtime/agents/${slug}/private-training/pi/raw`,
|
|
17
|
+
relativePath: `private/daimon/${slug}/private-training/pi/raw`,
|
|
18
|
+
}));
|
|
19
|
+
});
|
|
20
|
+
const filesUnder = async (root) => {
|
|
21
|
+
if (!(await lstat(root)).isDirectory()) {
|
|
22
|
+
throw new Error("Private artifact export source is not a directory");
|
|
23
|
+
}
|
|
24
|
+
const files = [];
|
|
25
|
+
const pending = [root];
|
|
26
|
+
while (pending.length > 0) {
|
|
27
|
+
const directory = pending.pop();
|
|
28
|
+
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
29
|
+
const child = path.join(directory, entry.name);
|
|
30
|
+
if (entry.isSymbolicLink() || !entry.isDirectory() && !entry.isFile()) {
|
|
31
|
+
throw new Error("Private artifact export rejects non-regular entries");
|
|
32
|
+
}
|
|
33
|
+
if (entry.isDirectory())
|
|
34
|
+
pending.push(child);
|
|
35
|
+
else
|
|
36
|
+
files.push(path.relative(root, child).split(path.sep).join("/"));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return Object.freeze(files.sort());
|
|
40
|
+
};
|
|
41
|
+
const digest = (bytes) => createHash("sha256").update(bytes).digest("hex");
|
|
42
|
+
/** Explicit opt-in egress for unredacted runtime training artifacts. */
|
|
43
|
+
export const exportPrivateRuntimeArtifacts = async (input) => {
|
|
44
|
+
const output = [];
|
|
45
|
+
const missing = [];
|
|
46
|
+
for (const plan of plans(input.report)) {
|
|
47
|
+
const destination = path.join(input.destinationDirectory, ...plan.relativePath.split("/"));
|
|
48
|
+
await ensureDirectory(path.dirname(destination));
|
|
49
|
+
const copied = await copyContainerFileToHost({
|
|
50
|
+
containerPath: plan.containerPath,
|
|
51
|
+
containerRef: input.containerRef,
|
|
52
|
+
dockerCommand: input.dockerCommand,
|
|
53
|
+
execFile: input.execFile,
|
|
54
|
+
hostPath: destination,
|
|
55
|
+
target: input.target,
|
|
56
|
+
timeoutMs: input.timeoutMs,
|
|
57
|
+
});
|
|
58
|
+
if (!copied) {
|
|
59
|
+
await rm(destination, { force: true, recursive: true });
|
|
60
|
+
missing.push(plan.relativePath);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
for (const relative of await filesUnder(destination)) {
|
|
64
|
+
const bytes = await readFile(path.join(destination, ...relative.split("/")));
|
|
65
|
+
output.push({
|
|
66
|
+
bytes: bytes.byteLength,
|
|
67
|
+
path: `${plan.relativePath}/${relative}`,
|
|
68
|
+
sha256: digest(bytes),
|
|
69
|
+
source: {
|
|
70
|
+
kind: "container",
|
|
71
|
+
ref: `${input.containerRef}:${plan.containerPath}/${relative}`,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return Object.freeze({
|
|
77
|
+
files: Object.freeze(output),
|
|
78
|
+
missing: Object.freeze(missing),
|
|
79
|
+
});
|
|
80
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ProviderRuntimeViolationKind = "moltnet-live-endpoint" | "provider-authenticated-http" | "docker-exec-http-transport" | "transport-receipt" | "generated-client" | "cursor-operation";
|
|
2
|
+
export type ProviderRuntimeViolation = {
|
|
3
|
+
classification: ProviderRuntimeViolationKind;
|
|
4
|
+
file: string;
|
|
5
|
+
matched: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const scanProviderRuntimeSource: (source: string, file?: string) => ProviderRuntimeViolation[];
|
|
8
|
+
export declare const scanProviderRuntimeTree: (repositoryRoot: string) => Promise<ProviderRuntimeViolation[]>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const forbiddenIdentifiers = [
|
|
4
|
+
["transport-receipt", /spawnfile\.moltnet-transport/u],
|
|
5
|
+
["transport-receipt", /ContainedMoltnetTransport/u],
|
|
6
|
+
["generated-client", /CONTAINED_MOLTNET_CLIENT/u],
|
|
7
|
+
["generated-client", /SendMessageRequest/u],
|
|
8
|
+
["cursor-operation", /ListRoomMessages/u]
|
|
9
|
+
];
|
|
10
|
+
const productionFiles = async (directory) => {
|
|
11
|
+
const entries = await readdir(directory, { withFileTypes: true });
|
|
12
|
+
const nested = await Promise.all(entries.map(async (entry) => {
|
|
13
|
+
const file = path.join(directory, entry.name);
|
|
14
|
+
if (entry.isDirectory())
|
|
15
|
+
return productionFiles(file);
|
|
16
|
+
if (!entry.isFile() || !entry.name.endsWith(".ts") || entry.name.endsWith(".test.ts") || entry.name.endsWith(".test-helper.ts"))
|
|
17
|
+
return [];
|
|
18
|
+
return [file];
|
|
19
|
+
}));
|
|
20
|
+
return nested.flat();
|
|
21
|
+
};
|
|
22
|
+
const violationsForSource = (source, file) => {
|
|
23
|
+
const violations = [];
|
|
24
|
+
for (const endpoint of ["/v1/messages", "/v1/network", "/v1/rooms", "/v1/agents"]) {
|
|
25
|
+
if (source.includes(endpoint))
|
|
26
|
+
violations.push({ classification: "moltnet-live-endpoint", file, matched: endpoint });
|
|
27
|
+
}
|
|
28
|
+
const providerSurface = /(?:fetch|httpGet|curl)[\s\S]*(?:\/healthz|\/v1\/)/u.test(source)
|
|
29
|
+
|| /(?:\/healthz|\/v1\/)[\s\S]*(?:fetch|httpGet|curl)/u.test(source);
|
|
30
|
+
const authenticatedMarker = [
|
|
31
|
+
[/\bAuthorization\s*:/u, "Authorization property"],
|
|
32
|
+
[/["']Authorization["']\s*:/u, "Authorization string key"],
|
|
33
|
+
[/\[\s*["']Authorization["']\s*\]\s*=/u, "Authorization element assignment"],
|
|
34
|
+
[/`Bearer\s+/u, "Bearer template"],
|
|
35
|
+
[/["']Bearer\s+["']\s*\+/u, "Bearer concatenation"],
|
|
36
|
+
[/["']Bearer\s+/u, "Bearer literal"]
|
|
37
|
+
].find(([pattern]) => pattern.test(source));
|
|
38
|
+
if (providerSurface && authenticatedMarker) {
|
|
39
|
+
violations.push({
|
|
40
|
+
classification: "provider-authenticated-http",
|
|
41
|
+
file,
|
|
42
|
+
matched: authenticatedMarker[1]
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
if (/(?:exec\s*\(\s*\[\s*["'](?:curl|wget)["'])|(?:["']exec["'][\s\S]{0,160}["'](?:curl|wget)["'])/u.test(source)) {
|
|
46
|
+
violations.push({ classification: "docker-exec-http-transport", file, matched: "exec curl/wget" });
|
|
47
|
+
}
|
|
48
|
+
for (const [classification, pattern] of forbiddenIdentifiers) {
|
|
49
|
+
if (pattern.test(source))
|
|
50
|
+
violations.push({ classification, file, matched: pattern.source });
|
|
51
|
+
}
|
|
52
|
+
return violations;
|
|
53
|
+
};
|
|
54
|
+
export const scanProviderRuntimeSource = (source, file = "synthetic.ts") => violationsForSource(source, file);
|
|
55
|
+
export const scanProviderRuntimeTree = async (repositoryRoot) => {
|
|
56
|
+
const roots = ["cli", "compiler", "deployment", "status"].map((folder) => path.join(repositoryRoot, "src", folder));
|
|
57
|
+
const files = (await Promise.all(roots.map(productionFiles))).flat();
|
|
58
|
+
const results = await Promise.all(files.map(async (file) => violationsForSource(await readFile(file, "utf8"), path.relative(repositoryRoot, file))));
|
|
59
|
+
return results.flat();
|
|
60
|
+
};
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { type OrganizationHandoff } from "./organizationHandoffTypes.js";
|
|
3
|
+
import { type OpaqueTargetHandle } from "../target/index.js";
|
|
4
|
+
import { type OrganizationReadiness } from "./organizationReady.js";
|
|
2
5
|
declare const recordSourceSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
3
6
|
kind: z.ZodLiteral<"project">;
|
|
4
7
|
root: z.ZodString;
|
|
@@ -15,7 +18,10 @@ export declare const deploymentRecordSchema: z.ZodObject<{
|
|
|
15
18
|
env_file: z.ZodOptional<z.ZodString>;
|
|
16
19
|
manager: z.ZodString;
|
|
17
20
|
name: z.ZodString;
|
|
21
|
+
organization_handoff: z.ZodOptional<z.ZodUnknown>;
|
|
22
|
+
organization_handoff_handle: z.ZodOptional<z.ZodString>;
|
|
18
23
|
output_directory: z.ZodNullable<z.ZodString>;
|
|
24
|
+
run_id: z.ZodOptional<z.ZodString>;
|
|
19
25
|
source: z.ZodUnion<readonly [z.ZodObject<{
|
|
20
26
|
kind: z.ZodLiteral<"project">;
|
|
21
27
|
root: z.ZodString;
|
|
@@ -63,8 +69,27 @@ export declare const deploymentRecordSchema: z.ZodObject<{
|
|
|
63
69
|
}, z.core.$strict>]>>;
|
|
64
70
|
}, z.core.$strict>>;
|
|
65
71
|
version: z.ZodLiteral<"spawnfile.deployment.v2">;
|
|
72
|
+
export_index: z.ZodOptional<z.ZodObject<{
|
|
73
|
+
exported_at: z.ZodString;
|
|
74
|
+
path: z.ZodString;
|
|
75
|
+
run_id: z.ZodString;
|
|
76
|
+
}, z.core.$strict>>;
|
|
77
|
+
organization_ready: z.ZodOptional<z.ZodPreprocess<z.ZodObject<{
|
|
78
|
+
code: z.ZodUnion<readonly [z.ZodLiteral<"organization_ready">, z.ZodLiteral<"external_moltnet">, z.ZodLiteral<"compiled_evidence_missing">, z.ZodLiteral<"unit_unavailable">, z.ZodLiteral<"unit_restarted">, z.ZodLiteral<"probe_unavailable">, z.ZodLiteral<"identity_mismatch">, z.ZodLiteral<"topology_mismatch">, z.ZodLiteral<"probe_timeout">, z.ZodLiteral<"probe_cancelled">]>;
|
|
79
|
+
compile_fingerprint: z.ZodString;
|
|
80
|
+
run_id: z.ZodNullable<z.ZodString>;
|
|
81
|
+
state: z.ZodUnion<readonly [z.ZodLiteral<"ready">, z.ZodLiteral<"pending">, z.ZodLiteral<"failed">, z.ZodLiteral<"cancelled">]>;
|
|
82
|
+
unit_id: z.ZodString;
|
|
83
|
+
version: z.ZodLiteral<"spawnfile.organization-ready.v1">;
|
|
84
|
+
world_binding_digest: z.ZodNullable<z.ZodString>;
|
|
85
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
86
|
+
}, z.core.$strict>>>;
|
|
66
87
|
}, z.core.$strict>;
|
|
67
|
-
export type DeploymentRecord = z.infer<typeof deploymentRecordSchema
|
|
88
|
+
export type DeploymentRecord = Omit<z.infer<typeof deploymentRecordSchema>, "organization_handoff" | "organization_handoff_handle" | "organization_ready"> & {
|
|
89
|
+
organization_handoff?: OrganizationHandoff;
|
|
90
|
+
organization_handoff_handle?: OpaqueTargetHandle;
|
|
91
|
+
organization_ready?: OrganizationReadiness;
|
|
92
|
+
};
|
|
68
93
|
export declare const parseDeploymentRecord: (source: unknown, sourceLabel?: string) => DeploymentRecord;
|
|
69
94
|
export declare const readDeploymentRecord: (recordPath: string) => Promise<DeploymentRecord>;
|
|
70
95
|
export declare const readDeploymentRecordFromOutput: (outputDirectory: string, deploymentName: string) => Promise<DeploymentRecord>;
|
|
@@ -3,7 +3,10 @@ import { readdir, rename, writeFile } from "node:fs/promises";
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { ensureDirectory, readUtf8File } from "../filesystem/index.js";
|
|
5
5
|
import { SpawnfileError } from "../shared/index.js";
|
|
6
|
+
import { parseOrganizationHandoff } from "./organizationHandoffTypes.js";
|
|
7
|
+
import { parseOpaqueTargetHandle } from "../target/index.js";
|
|
6
8
|
import { normalizeDeploymentName, resolveDeploymentRecordPath, resolveDeploymentRecordsDirectory } from "./names.js";
|
|
9
|
+
import { parseOrganizationReadiness, organizationReadinessSchema } from "./organizationReady.js";
|
|
7
10
|
const contextTargetSchema = z.object({
|
|
8
11
|
endpoint_fingerprint: z.string().regex(/^sha256:[a-f0-9]{32}$/),
|
|
9
12
|
kind: z.literal("context"),
|
|
@@ -82,12 +85,40 @@ export const deploymentRecordSchema = z.object({
|
|
|
82
85
|
env_file: z.string().min(1).optional(),
|
|
83
86
|
manager: z.string().min(1),
|
|
84
87
|
name: z.string().min(1),
|
|
88
|
+
organization_handoff: z.unknown().optional(),
|
|
89
|
+
organization_handoff_handle: z.string().optional(),
|
|
85
90
|
output_directory: z.string().min(1).nullable(),
|
|
91
|
+
// Optional: the NOOPOLIS_RUN_ID stamped on every authority container's
|
|
92
|
+
// causal events for this deployment's run (see specs/CAUSAL.md and
|
|
93
|
+
// src/runtime/common.ts). Populated only when the compiling process had a
|
|
94
|
+
// run id set (every `spawnfile run`/`up --detach` invocation via
|
|
95
|
+
// ensureNoopolisRunId()); absent for image-consume/recovered records that
|
|
96
|
+
// have no reliable run-time id to source. This is what lets
|
|
97
|
+
// `spawnfile artifacts export --run-id <id>` find the deployment whose
|
|
98
|
+
// containers/volumes were compiled under that run.
|
|
99
|
+
run_id: z.string().min(1).optional(),
|
|
86
100
|
source: recordSourceSchema,
|
|
87
101
|
target: targetSchema,
|
|
88
102
|
units: z.array(unitSchema).min(1),
|
|
89
|
-
version: z.literal("spawnfile.deployment.v2")
|
|
90
|
-
|
|
103
|
+
version: z.literal("spawnfile.deployment.v2"),
|
|
104
|
+
// Optional: stamped by `spawnfile artifacts export` (artifactsExport.ts) once it has
|
|
105
|
+
// successfully written `spawnfile.export-index.v1` for this deployment's run. This is
|
|
106
|
+
// the record-driven marker `spawnfile down` (downDeployment.ts) reads to enforce the
|
|
107
|
+
// export-before-teardown invariant (Decision 21) without needing to be told, out of
|
|
108
|
+
// band, where a prior export went: down resolves the SAME deployment record export
|
|
109
|
+
// already writes back to, so the two commands share one source of truth. Absent means
|
|
110
|
+
// "never exported" — not "exported to an unknown location".
|
|
111
|
+
export_index: z.object({
|
|
112
|
+
exported_at: z.string().min(1),
|
|
113
|
+
path: z.string().min(1),
|
|
114
|
+
run_id: z.string().min(1)
|
|
115
|
+
}).strict().optional(),
|
|
116
|
+
organization_ready: organizationReadinessSchema.optional()
|
|
117
|
+
}).strict().superRefine((value, context) => {
|
|
118
|
+
if (value.organization_handoff_handle !== undefined && value.organization_handoff === undefined) {
|
|
119
|
+
context.addIssue({ code: z.ZodIssueCode.custom, path: ["organization_handoff_handle"], message: "organization handoff handle requires organization handoff" });
|
|
120
|
+
}
|
|
121
|
+
});
|
|
91
122
|
const upgradeV1Record = (record) => ({
|
|
92
123
|
auth_profile: record.auth_profile,
|
|
93
124
|
compile_fingerprint: record.compile_fingerprint,
|
|
@@ -104,7 +135,14 @@ const upgradeV1Record = (record) => ({
|
|
|
104
135
|
const hasVersion = (source, version) => typeof source === "object"
|
|
105
136
|
&& source !== null
|
|
106
137
|
&& source.version === version;
|
|
138
|
+
const readOrganizationReadiness = (source) => {
|
|
139
|
+
if (typeof source !== "object" || source === null || !Object.hasOwn(source, "organization_ready")) {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
return parseOrganizationReadiness(source.organization_ready);
|
|
143
|
+
};
|
|
107
144
|
export const parseDeploymentRecord = (source, sourceLabel = "deployment record") => {
|
|
145
|
+
const organizationReadiness = readOrganizationReadiness(source);
|
|
108
146
|
let record;
|
|
109
147
|
if (hasVersion(source, "spawnfile.deployment.v1")) {
|
|
110
148
|
const parsed = deploymentRecordV1Schema.safeParse(source);
|
|
@@ -118,13 +156,20 @@ export const parseDeploymentRecord = (source, sourceLabel = "deployment record")
|
|
|
118
156
|
if (!parsed.success) {
|
|
119
157
|
throw new SpawnfileError("validation_error", `Invalid ${sourceLabel}: ${z.prettifyError(parsed.error)}`);
|
|
120
158
|
}
|
|
121
|
-
|
|
159
|
+
const { organization_handoff: organizationHandoff, organization_handoff_handle: organizationHandoffHandle, organization_ready: _organizationReady, ...recordWithoutMetadata } = parsed.data;
|
|
160
|
+
record = {
|
|
161
|
+
...recordWithoutMetadata,
|
|
162
|
+
...(organizationHandoff === undefined
|
|
163
|
+
? {}
|
|
164
|
+
: { organization_handoff: parseOrganizationHandoff(organizationHandoff) }),
|
|
165
|
+
...(organizationHandoffHandle === undefined ? {} : { organization_handoff_handle: parseOpaqueTargetHandle(organizationHandoffHandle) })
|
|
166
|
+
};
|
|
122
167
|
}
|
|
123
168
|
const normalizedName = normalizeDeploymentName(record.name);
|
|
124
169
|
if (normalizedName !== record.name) {
|
|
125
170
|
throw new SpawnfileError("validation_error", `Invalid ${sourceLabel}: deployment name must be normalized`);
|
|
126
171
|
}
|
|
127
|
-
return record;
|
|
172
|
+
return organizationReadiness ? { ...record, organization_ready: organizationReadiness } : record;
|
|
128
173
|
};
|
|
129
174
|
export const readDeploymentRecord = async (recordPath) => {
|
|
130
175
|
let parsed;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type SimfileFixtureViolation = {
|
|
2
|
+
file: string;
|
|
3
|
+
classification: "simfile-scenario-direct-literal" | "simfile-scenario-path-join" | "simfile-scenario-path-resolve";
|
|
4
|
+
matchedPath: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const scanSimfileFixtureSource: (text: string, file?: string) => SimfileFixtureViolation[];
|
|
7
|
+
export declare const scanSimfileFixtureFile: (file: string) => Promise<SimfileFixtureViolation[]>;
|
|
8
|
+
export declare const scanSimfileFixtureTree: (repositoryRoot: string) => Promise<SimfileFixtureViolation[]>;
|