spawnfile 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -11
- package/dist/audit/auditCli.d.ts +19 -0
- package/dist/audit/auditCli.js +63 -0
- package/dist/audit/checks.d.ts +100 -0
- package/dist/audit/checks.js +279 -0
- package/dist/audit/checksShared.d.ts +74 -0
- package/dist/audit/checksShared.js +37 -0
- package/dist/audit/generateAudit.d.ts +19 -0
- package/dist/audit/generateAudit.js +122 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.js +4 -0
- package/dist/audit/readAudit.d.ts +50 -0
- package/dist/audit/readAudit.js +59 -0
- package/dist/audit/types.d.ts +40 -0
- package/dist/audit/types.js +8 -0
- package/dist/auth/credentialEnvFile.d.ts +11 -0
- package/dist/auth/credentialEnvFile.js +60 -0
- package/dist/auth/credentialProvisioning.d.ts +15 -0
- package/dist/auth/credentialProvisioning.js +75 -0
- package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
- package/dist/auth/credentialProvisioningReceipt.js +70 -0
- package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
- package/dist/auth/credentialProvisioningRequest.js +169 -0
- package/dist/auth/credentialWorldBindings.d.ts +21 -0
- package/dist/auth/credentialWorldBindings.js +104 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/paths.d.ts +11 -0
- package/dist/auth/paths.js +21 -0
- package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
- package/dist/auth/targetSecretSourceAuthor.js +52 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
- package/dist/auth/targetSecretSourceFsPublish.js +49 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
- package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
- package/dist/auth/targetSecretSourceFsRead.js +198 -0
- package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
- package/dist/auth/targetSecretSourceGrant.js +99 -0
- package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
- package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
- package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
- package/dist/auth/targetSecretSourceLifecycle.js +52 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
- package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
- package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
- package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
- package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
- package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
- package/dist/auth/targetSecretSourceResolver.js +137 -0
- package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
- package/dist/auth/targetSecretSourceRevoke.js +92 -0
- package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
- package/dist/auth/targetSecretSourceRotate.js +121 -0
- package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
- package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
- package/dist/cli/artifactsCommands.d.ts +27 -0
- package/dist/cli/artifactsCommands.js +132 -0
- package/dist/cli/authCommands.d.ts +5 -0
- package/dist/cli/authCommands.js +221 -0
- package/dist/cli/compileBuildCommands.d.ts +3 -0
- package/dist/cli/compileBuildCommands.js +35 -0
- package/dist/cli/containerBundleCommand.d.ts +6 -0
- package/dist/cli/containerBundleCommand.js +116 -0
- package/dist/cli/downCommand.d.ts +25 -0
- package/dist/cli/downCommand.js +134 -0
- package/dist/cli/index.js +6 -3
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +11 -181
- package/dist/cli/lifecycleMachine.d.ts +19 -0
- package/dist/cli/lifecycleMachine.js +78 -0
- package/dist/cli/lifecyclePlan.d.ts +35 -0
- package/dist/cli/lifecyclePlan.js +240 -0
- package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
- package/dist/cli/lifecyclePlanningCommands.js +30 -0
- package/dist/cli/runCli.d.ts +9 -2
- package/dist/cli/runCli.js +27 -71
- package/dist/cli/runPublishCommands.d.ts +3 -0
- package/dist/cli/runPublishCommands.js +70 -0
- package/dist/cli/statusCommand.d.ts +3 -33
- package/dist/cli/statusCommand.js +19 -249
- package/dist/cli/statusCommandLive.d.ts +20 -0
- package/dist/cli/statusCommandLive.js +188 -0
- package/dist/cli/statusCommandOptions.d.ts +40 -0
- package/dist/cli/statusCommandOptions.js +42 -0
- package/dist/cli/targetCliRoute.d.ts +2 -0
- package/dist/cli/targetCliRoute.js +30 -0
- package/dist/cli/targetCommands.d.ts +33 -0
- package/dist/cli/targetCommands.js +257 -0
- package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
- package/dist/cli/targetComposedPreparationCommand.js +39 -0
- package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
- package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
- package/dist/cli/targetDefaultAuthorities.js +210 -0
- package/dist/cli/targetDefaultConfig.d.ts +68 -0
- package/dist/cli/targetDefaultConfig.js +317 -0
- package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
- package/dist/cli/targetDefaultConfigStdin.js +215 -0
- package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
- package/dist/cli/targetDefaultEnvelope.js +13 -0
- package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
- package/dist/cli/targetDefaultHandlerFactory.js +247 -0
- package/dist/cli/targetDefaultHandlers.d.ts +21 -0
- package/dist/cli/targetDefaultHandlers.js +72 -0
- package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
- package/dist/cli/targetDefaultJournalAuthority.js +135 -0
- package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
- package/dist/cli/targetDefaultWorldClock.js +14 -0
- package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
- package/dist/cli/targetDefaultWorldQueries.js +11 -0
- package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
- package/dist/cli/targetDefaultWorldReadiness.js +17 -0
- package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
- package/dist/cli/targetEvidenceHelperResolution.js +23 -0
- package/dist/cli/targetLookupCli.d.ts +3 -0
- package/dist/cli/targetLookupCli.js +31 -0
- package/dist/cli/targetLookupCommands.d.ts +12 -0
- package/dist/cli/targetLookupCommands.js +69 -0
- package/dist/cli/targetOperationDispatch.d.ts +58 -0
- package/dist/cli/targetOperationDispatch.js +21 -0
- package/dist/cli/targetReceiptOutput.d.ts +14 -0
- package/dist/cli/targetReceiptOutput.js +21 -0
- package/dist/cli/targetRequestFile.d.ts +14 -0
- package/dist/cli/targetRequestFile.js +63 -0
- package/dist/cli/targetSecretSourceInput.d.ts +28 -0
- package/dist/cli/targetSecretSourceInput.js +121 -0
- package/dist/cli/targetWorldClockCommand.d.ts +10 -0
- package/dist/cli/targetWorldClockCommand.js +42 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
- package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
- package/dist/cli/targetWorldReadinessCommand.js +43 -0
- package/dist/cli/upCommand.d.ts +3 -0
- package/dist/cli/upCommand.js +133 -0
- package/dist/cli/upImageCommand.d.ts +11 -0
- package/dist/cli/upImageCommand.js +41 -0
- package/dist/cli/upLifecycleInvocation.d.ts +41 -0
- package/dist/cli/upLifecycleInvocation.js +48 -0
- package/dist/cli/upLifecycleRecovery.d.ts +4 -0
- package/dist/cli/upLifecycleRecovery.js +53 -0
- package/dist/compiler/agentNodeMerge.d.ts +2 -0
- package/dist/compiler/agentNodeMerge.js +79 -0
- package/dist/compiler/agentSurfaces.js +11 -1
- package/dist/compiler/buildCompilePlan.js +17 -0
- package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
- package/dist/compiler/buildCompilePlanAgent.js +56 -0
- package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
- package/dist/compiler/buildCompilePlanTeams.js +4 -1
- package/dist/compiler/buildCompilePlanTraversal.js +75 -82
- package/dist/compiler/buildProject.d.ts +11 -0
- package/dist/compiler/buildProject.js +77 -2
- package/dist/compiler/compilePlanHelpers.js +2 -0
- package/dist/compiler/compileProject.d.ts +13 -0
- package/dist/compiler/compileProject.js +26 -74
- package/dist/compiler/compileProjectPolicy.d.ts +5 -0
- package/dist/compiler/compileProjectPolicy.js +21 -0
- package/dist/compiler/compileProjectReports.d.ts +9 -0
- package/dist/compiler/compileProjectReports.js +52 -0
- package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
- package/dist/compiler/containerArtifactSummaries.js +138 -0
- package/dist/compiler/containerArtifacts.d.ts +10 -0
- package/dist/compiler/containerArtifacts.js +126 -125
- package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
- package/dist/compiler/containerArtifactsPlans.js +31 -118
- package/dist/compiler/containerArtifactsRender.d.ts +3 -1
- package/dist/compiler/containerArtifactsRender.js +15 -12
- package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
- package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
- package/dist/compiler/containerConfigEnvRender.js +54 -0
- package/dist/compiler/containerEntrypointRender.d.ts +1 -0
- package/dist/compiler/containerEntrypointRender.js +56 -52
- package/dist/compiler/containerEntrypointShell.d.ts +5 -0
- package/dist/compiler/containerEntrypointShell.js +29 -0
- package/dist/compiler/containerPackageOverrides.d.ts +27 -0
- package/dist/compiler/containerPackageOverrides.js +63 -0
- package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
- package/dist/compiler/containerTargetPlanResolution.js +97 -0
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
- package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
- package/dist/compiler/dockerBuildContext.d.ts +16 -0
- package/dist/compiler/dockerBuildContext.js +159 -0
- package/dist/compiler/dockerBuildSkip.d.ts +30 -0
- package/dist/compiler/dockerBuildSkip.js +81 -0
- package/dist/compiler/index.d.ts +4 -0
- package/dist/compiler/index.js +4 -0
- package/dist/compiler/memoryArtifacts.d.ts +26 -0
- package/dist/compiler/memoryArtifacts.js +134 -0
- package/dist/compiler/memoryResolution.d.ts +4 -0
- package/dist/compiler/memoryResolution.js +147 -0
- package/dist/compiler/modelEnv.d.ts +2 -0
- package/dist/compiler/modelEnv.js +6 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
- package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
- package/dist/compiler/moltnetArtifactPaths.js +49 -0
- package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
- package/dist/compiler/moltnetArtifactTypes.js +1 -0
- package/dist/compiler/moltnetArtifacts.d.ts +2 -40
- package/dist/compiler/moltnetArtifacts.js +43 -97
- package/dist/compiler/moltnetBinaries.d.ts +21 -4
- package/dist/compiler/moltnetBinaries.js +134 -27
- package/dist/compiler/moltnetClientConfig.js +7 -2
- package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
- package/dist/compiler/moltnetConfigLowering.js +67 -5
- package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
- package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
- package/dist/compiler/moltnetNodeConfig.js +7 -2
- package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
- package/dist/compiler/moltnetReleaseAuthority.js +73 -0
- package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
- package/dist/compiler/moltnetReleaseDownload.js +85 -0
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
- package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
- package/dist/compiler/moltnetResolution.js +72 -20
- package/dist/compiler/moltnetRoomMemberships.js +37 -9
- package/dist/compiler/moltnetServerPlans.d.ts +9 -0
- package/dist/compiler/moltnetServerPlans.js +132 -0
- package/dist/compiler/organizationIdentity.d.ts +27 -0
- package/dist/compiler/organizationIdentity.js +297 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
- package/dist/compiler/organizationReadyEvidence.js +261 -0
- package/dist/compiler/projectManifestGraph.d.ts +4 -0
- package/dist/compiler/projectManifestGraph.js +24 -0
- package/dist/compiler/runProject.d.ts +4 -0
- package/dist/compiler/runProject.js +30 -21
- package/dist/compiler/runProjectAuth.d.ts +7 -1
- package/dist/compiler/runProjectAuth.js +87 -9
- package/dist/compiler/runProjectDocker.d.ts +7 -0
- package/dist/compiler/runProjectDocker.js +31 -8
- package/dist/compiler/runProjectLifecycle.d.ts +7 -0
- package/dist/compiler/runProjectLifecycle.js +40 -0
- package/dist/compiler/syncProjectAuth.js +4 -1
- package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
- package/dist/compiler/teamContextActiveEnvironments.js +255 -0
- package/dist/compiler/teamContextSupport.js +32 -40
- package/dist/compiler/teamContextTypes.d.ts +2 -0
- package/dist/compiler/types.d.ts +82 -1
- package/dist/compiler/upProject.d.ts +5 -0
- package/dist/compiler/upProject.js +256 -20
- package/dist/compiler/upReceipt.d.ts +36 -0
- package/dist/compiler/upReceipt.js +82 -0
- package/dist/compiler/updateProjectModels.js +42 -60
- package/dist/compiler/updateProjectRuntime.js +22 -35
- package/dist/compiler/updateProjectSurfaces.js +53 -47
- package/dist/compiler/worldBindings.d.ts +39 -0
- package/dist/compiler/worldBindings.js +247 -0
- package/dist/compiler/worldBindingsFile.d.ts +5 -0
- package/dist/compiler/worldBindingsFile.js +162 -0
- package/dist/deployment/artifactsExport.d.ts +49 -0
- package/dist/deployment/artifactsExport.js +217 -0
- package/dist/deployment/artifactsExportDocker.d.ts +48 -0
- package/dist/deployment/artifactsExportDocker.js +91 -0
- package/dist/deployment/artifactsExportPlan.d.ts +24 -0
- package/dist/deployment/artifactsExportPlan.js +135 -0
- package/dist/deployment/artifactsExportTypes.d.ts +50 -0
- package/dist/deployment/artifactsExportTypes.js +52 -0
- package/dist/deployment/buildImageCacheStore.d.ts +23 -0
- package/dist/deployment/buildImageCacheStore.js +54 -0
- package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
- package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
- package/dist/deployment/dockerInspect.d.ts +9 -0
- package/dist/deployment/dockerInspect.js +24 -1
- package/dist/deployment/dockerLabels.d.ts +2 -0
- package/dist/deployment/dockerLabels.js +2 -0
- package/dist/deployment/dockerLogs.js +2 -10
- package/dist/deployment/dockerManager.d.ts +51 -0
- package/dist/deployment/dockerManager.js +118 -1
- package/dist/deployment/dockerProbeGateway.js +64 -5
- package/dist/deployment/dockerRecover.js +9 -1
- package/dist/deployment/dockerTeardown.d.ts +32 -0
- package/dist/deployment/dockerTeardown.js +61 -0
- package/dist/deployment/downDeployment.d.ts +34 -0
- package/dist/deployment/downDeployment.js +147 -0
- package/dist/deployment/downReceiptTypes.d.ts +21 -0
- package/dist/deployment/downReceiptTypes.js +30 -0
- package/dist/deployment/index.d.ts +16 -0
- package/dist/deployment/index.js +17 -0
- package/dist/deployment/lifecycleCompletion.d.ts +37 -0
- package/dist/deployment/lifecycleCompletion.js +236 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
- package/dist/deployment/lifecycleCompletionContracts.js +106 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
- package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
- package/dist/deployment/lifecycleCompletionLookup.js +88 -0
- package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
- package/dist/deployment/lifecycleCompletionOwner.js +31 -0
- package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
- package/dist/deployment/lifecycleCompletionParsing.js +108 -0
- package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
- package/dist/deployment/lifecycleCompletionPaths.js +16 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
- package/dist/deployment/lifecycleCompletionPublication.js +35 -0
- package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
- package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRoot.js +243 -0
- package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
- package/dist/deployment/lifecycleCompletionStore.js +151 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
- package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
- package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
- package/dist/deployment/organizationHandoffTypes.js +80 -0
- package/dist/deployment/organizationReady.d.ts +52 -0
- package/dist/deployment/organizationReady.js +200 -0
- package/dist/deployment/privateArtifactsExport.d.ts +18 -0
- package/dist/deployment/privateArtifactsExport.js +80 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
- package/dist/deployment/record.d.ts +26 -1
- package/dist/deployment/record.js +49 -4
- package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
- package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
- package/dist/deployment/target.d.ts +1 -35
- package/dist/deployment/target.js +1 -96
- package/dist/deployment/upReceiptTypes.d.ts +111 -0
- package/dist/deployment/upReceiptTypes.js +164 -0
- package/dist/dev/project.js +15 -9
- package/dist/distribution/buildDistributionReport.d.ts +2 -1
- package/dist/distribution/buildDistributionReport.js +2 -1
- package/dist/distribution/distributionReportSchema.d.ts +5 -0
- package/dist/distribution/distributionReportSchema.js +7 -2
- package/dist/distribution/index.d.ts +2 -2
- package/dist/distribution/index.js +1 -1
- package/dist/distribution/types.d.ts +7 -0
- package/dist/distribution/types.js +1 -0
- package/dist/filesystem/paths.js +10 -1
- package/dist/ledger/causalConformanceCli.d.ts +1 -0
- package/dist/ledger/causalConformanceCli.js +41 -0
- package/dist/ledger/causeNamespace.d.ts +8 -0
- package/dist/ledger/causeNamespace.js +24 -0
- package/dist/ledger/conformance.d.ts +83 -0
- package/dist/ledger/conformance.js +259 -0
- package/dist/ledger/emitters.d.ts +76 -0
- package/dist/ledger/emitters.js +188 -0
- package/dist/ledger/index.d.ts +4 -0
- package/dist/ledger/index.js +4 -0
- package/dist/ledger/principal.d.ts +96 -0
- package/dist/ledger/principal.js +121 -0
- package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
- package/dist/manifest/externalParticipantSchemas.js +17 -0
- package/dist/manifest/index.d.ts +1 -0
- package/dist/manifest/index.js +1 -0
- package/dist/manifest/inlineAgentMember.d.ts +2 -0
- package/dist/manifest/inlineAgentMember.js +9 -0
- package/dist/manifest/loadManifest.js +14 -8
- package/dist/manifest/mcpSchemas.d.ts +17 -0
- package/dist/manifest/mcpSchemas.js +41 -0
- package/dist/manifest/memorySchemas.d.ts +245 -0
- package/dist/manifest/memorySchemas.js +148 -0
- package/dist/manifest/renderSpawnfile.js +22 -131
- package/dist/manifest/renderSpawnfileNetworks.js +9 -2
- package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
- package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
- package/dist/manifest/schemas.d.ts +1868 -99
- package/dist/manifest/schemas.js +78 -32
- package/dist/manifest/surfaceSchemas.d.ts +17 -0
- package/dist/manifest/surfaceSchemas.js +24 -1
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
- package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
- package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
- package/dist/manifest/teamNetworkSchemas.js +3 -317
- package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
- package/dist/manifest/teamNetworkServerSchemas.js +199 -0
- package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
- package/dist/ownership/siblingBuildFreshness.js +20 -0
- package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
- package/dist/ownership/simfileRunOperatorInputs.js +139 -0
- package/dist/report/types.d.ts +142 -0
- package/dist/runtime/common.d.ts +35 -0
- package/dist/runtime/common.js +55 -0
- package/dist/runtime/container.d.ts +28 -1
- package/dist/runtime/container.js +38 -5
- package/dist/runtime/containerPackageOverrides.d.ts +37 -0
- package/dist/runtime/containerPackageOverrides.js +33 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/mnemeMcp.d.ts +15 -0
- package/dist/runtime/mnemeMcp.js +109 -0
- package/dist/runtime/openclaw/adapter.js +15 -4
- package/dist/runtime/openclaw/mcp.d.ts +10 -0
- package/dist/runtime/openclaw/mcp.js +69 -0
- package/dist/runtime/openclaw/runAuth.js +2 -2
- package/dist/runtime/openclaw/scaffold.js +1 -1
- package/dist/runtime/openclaw/schedules.d.ts +38 -0
- package/dist/runtime/openclaw/schedules.js +74 -0
- package/dist/runtime/pi/adapter.d.ts +1 -1
- package/dist/runtime/pi/adapter.js +86 -53
- package/dist/runtime/pi/appActivitySource.js +114 -2
- package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
- package/dist/runtime/pi/appAgentConfig.js +264 -0
- package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
- package/dist/runtime/pi/appCliEnginesSource.js +183 -0
- package/dist/runtime/pi/appCliSource.d.ts +1 -0
- package/dist/runtime/pi/appCliSource.js +353 -0
- package/dist/runtime/pi/appControlSource.d.ts +1 -0
- package/dist/runtime/pi/appControlSource.js +390 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
- package/dist/runtime/pi/appCoreSource.d.ts +4 -1
- package/dist/runtime/pi/appCoreSource.js +104 -214
- package/dist/runtime/pi/appPreludeSource.js +140 -52
- package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
- package/dist/runtime/pi/appScheduleSource.js +80 -0
- package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
- package/dist/runtime/pi/appScriptedEngine.js +42 -0
- package/dist/runtime/pi/appSource.d.ts +4 -1
- package/dist/runtime/pi/appSource.js +6 -2
- package/dist/runtime/pi/appTemplate.d.ts +8 -22
- package/dist/runtime/pi/appTemplate.js +9 -126
- package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
- package/dist/runtime/pi/appTemplateTypes.js +18 -0
- package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
- package/dist/runtime/pi/appWakeContextSource.js +398 -0
- package/dist/runtime/pi/containerTargets.d.ts +4 -0
- package/dist/runtime/pi/containerTargets.js +57 -0
- package/dist/runtime/pi/runAuth.js +126 -9
- package/dist/runtime/pi/testHelpers.d.ts +2 -0
- package/dist/runtime/pi/testHelpers.js +40 -0
- package/dist/runtime/picoclaw/adapter.js +23 -27
- package/dist/runtime/picoclaw/mcp.d.ts +4 -0
- package/dist/runtime/picoclaw/mcp.js +43 -0
- package/dist/runtime/picoclaw/memory.d.ts +7 -0
- package/dist/runtime/picoclaw/memory.js +17 -0
- package/dist/runtime/picoclaw/runAuth.js +1 -1
- package/dist/runtime/picoclaw/scaffold.js +1 -1
- package/dist/runtime/picoclaw/schedules.d.ts +26 -0
- package/dist/runtime/picoclaw/schedules.js +62 -3
- package/dist/runtime/scheduleUtils.d.ts +2 -0
- package/dist/runtime/scheduleUtils.js +15 -0
- package/dist/runtime/types.d.ts +25 -2
- package/dist/shared/errors.d.ts +1 -1
- package/dist/shared/errors.js +2 -2
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/shared/redaction.d.ts +2 -0
- package/dist/shared/redaction.js +10 -0
- package/dist/status/buildStatus.d.ts +1 -0
- package/dist/status/buildStatus.js +2 -0
- package/dist/status/compileReport.d.ts +22 -0
- package/dist/status/compileReport.js +16 -2
- package/dist/status/compiledProbeCollection.d.ts +21 -0
- package/dist/status/compiledProbeCollection.js +27 -0
- package/dist/status/imageStatusReport.js +6 -0
- package/dist/status/index.d.ts +3 -0
- package/dist/status/index.js +3 -0
- package/dist/status/lifecycleProbes.d.ts +19 -0
- package/dist/status/lifecycleProbes.js +174 -0
- package/dist/status/moltnetProbes.d.ts +7 -8
- package/dist/status/moltnetProbes.js +27 -198
- package/dist/status/moltnetWiringProbes.d.ts +19 -0
- package/dist/status/moltnetWiringProbes.js +178 -0
- package/dist/target/cleanupRun.d.ts +41 -0
- package/dist/target/cleanupRun.js +139 -0
- package/dist/target/cleanupRunDocker.d.ts +16 -0
- package/dist/target/cleanupRunDocker.js +66 -0
- package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
- package/dist/target/cleanupRunDocker.test-helper.js +238 -0
- package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
- package/dist/target/cleanupRunDockerPreflight.js +224 -0
- package/dist/target/composedPreparation.d.ts +205 -0
- package/dist/target/composedPreparation.js +223 -0
- package/dist/target/containerBundle.d.ts +82 -0
- package/dist/target/containerBundle.js +243 -0
- package/dist/target/containerBundleArchive.d.ts +31 -0
- package/dist/target/containerBundleArchive.js +140 -0
- package/dist/target/containerBundleAuthority.d.ts +25 -0
- package/dist/target/containerBundleAuthority.js +65 -0
- package/dist/target/containerBundleContracts.d.ts +114 -0
- package/dist/target/containerBundleContracts.js +173 -0
- package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
- package/dist/target/containerBundleFilesystemStore.js +247 -0
- package/dist/target/containerBundlePolicy.d.ts +33 -0
- package/dist/target/containerBundlePolicy.js +64 -0
- package/dist/target/containerBundleStore.d.ts +127 -0
- package/dist/target/containerBundleStore.js +284 -0
- package/dist/target/contracts.d.ts +538 -0
- package/dist/target/contracts.js +373 -0
- package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
- package/dist/target/dockerArtifactIdentityTypes.js +1 -0
- package/dist/target/dockerArtifactInspection.d.ts +40 -0
- package/dist/target/dockerArtifactInspection.js +125 -0
- package/dist/target/dockerArtifacts.d.ts +21 -0
- package/dist/target/dockerArtifacts.js +110 -0
- package/dist/target/dockerArtifactsProvider.d.ts +41 -0
- package/dist/target/dockerArtifactsProvider.js +449 -0
- package/dist/target/dockerCommandExecutor.d.ts +27 -0
- package/dist/target/dockerCommandExecutor.js +200 -0
- package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
- package/dist/target/dockerCommandExecutorCore.js +273 -0
- package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
- package/dist/target/dockerContainerBundleBuilder.js +256 -0
- package/dist/target/dockerContextSnapshot.d.ts +21 -0
- package/dist/target/dockerContextSnapshot.js +158 -0
- package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
- package/dist/target/dockerEndpointFingerprint.js +9 -0
- package/dist/target/dockerPreparedArtifact.d.ts +48 -0
- package/dist/target/dockerPreparedArtifact.js +131 -0
- package/dist/target/dockerProjectionJson.d.ts +1 -0
- package/dist/target/dockerProjectionJson.js +80 -0
- package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
- package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
- package/dist/target/dockerResources.d.ts +26 -0
- package/dist/target/dockerResources.js +162 -0
- package/dist/target/dockerResourcesProvider.d.ts +44 -0
- package/dist/target/dockerResourcesProvider.js +207 -0
- package/dist/target/dockerSecrets.d.ts +39 -0
- package/dist/target/dockerSecrets.js +249 -0
- package/dist/target/dockerSecretsAuthority.d.ts +26 -0
- package/dist/target/dockerSecretsAuthority.js +216 -0
- package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
- package/dist/target/dockerSecretsLifecycle.js +133 -0
- package/dist/target/dockerSecretsProvider.d.ts +68 -0
- package/dist/target/dockerSecretsProvider.js +329 -0
- package/dist/target/dockerTarget.d.ts +52 -0
- package/dist/target/dockerTarget.js +48 -0
- package/dist/target/dockerTargetBinding.d.ts +14 -0
- package/dist/target/dockerTargetBinding.js +96 -0
- package/dist/target/dockerWorldClock.d.ts +17 -0
- package/dist/target/dockerWorldClock.js +111 -0
- package/dist/target/dockerWorldReadiness.d.ts +17 -0
- package/dist/target/dockerWorldReadiness.js +119 -0
- package/dist/target/dockerWorldService.d.ts +23 -0
- package/dist/target/dockerWorldService.js +216 -0
- package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
- package/dist/target/dockerWorldServiceAuthority.js +182 -0
- package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
- package/dist/target/dockerWorldServiceLifecycle.js +275 -0
- package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
- package/dist/target/dockerWorldServiceProvider.js +318 -0
- package/dist/target/dockerWorldServiceStore.d.ts +73 -0
- package/dist/target/dockerWorldServiceStore.js +367 -0
- package/dist/target/evidenceExport.d.ts +55 -0
- package/dist/target/evidenceExport.js +518 -0
- package/dist/target/evidenceExportArchive.d.ts +10 -0
- package/dist/target/evidenceExportArchive.js +302 -0
- package/dist/target/evidenceExportContract.d.ts +27 -0
- package/dist/target/evidenceExportContract.js +40 -0
- package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
- package/dist/target/evidenceExportOperationsTestKit.js +312 -0
- package/dist/target/evidenceExportProvider.d.ts +85 -0
- package/dist/target/evidenceExportProvider.js +187 -0
- package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
- package/dist/target/evidenceExportPublicationTypes.js +1 -0
- package/dist/target/evidenceExportStore.d.ts +70 -0
- package/dist/target/evidenceExportStore.js +498 -0
- package/dist/target/evidenceExportStorePublication.d.ts +7 -0
- package/dist/target/evidenceExportStorePublication.js +395 -0
- package/dist/target/handles.d.ts +20 -0
- package/dist/target/handles.js +56 -0
- package/dist/target/index.d.ts +12 -0
- package/dist/target/index.js +11 -0
- package/dist/target/journal.d.ts +59 -0
- package/dist/target/journal.js +529 -0
- package/dist/target/journalFilesystem.d.ts +3 -0
- package/dist/target/journalFilesystem.js +111 -0
- package/dist/target/journalRoot.d.ts +4 -0
- package/dist/target/journalRoot.js +6 -0
- package/dist/target/organizationAttachment.d.ts +23 -0
- package/dist/target/organizationAttachment.js +263 -0
- package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
- package/dist/target/organizationAttachmentAuthority.js +161 -0
- package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
- package/dist/target/organizationAttachmentLifecycle.js +101 -0
- package/dist/target/organizationAttachmentProvider.d.ts +76 -0
- package/dist/target/organizationAttachmentProvider.js +289 -0
- package/dist/target/organizationAttachmentStore.d.ts +51 -0
- package/dist/target/organizationAttachmentStore.js +316 -0
- package/dist/target/publicArtifactSnapshot.d.ts +41 -0
- package/dist/target/publicArtifactSnapshot.js +150 -0
- package/dist/target/topologyActivation.d.ts +51 -0
- package/dist/target/topologyActivation.js +149 -0
- package/dist/target/topologyAttestation.d.ts +37 -0
- package/dist/target/topologyAttestation.js +300 -0
- package/dist/target/topologyAttestationErrors.d.ts +1 -0
- package/dist/target/topologyAttestationErrors.js +1 -0
- package/dist/target/worldClock.d.ts +60 -0
- package/dist/target/worldClock.js +129 -0
- package/dist/target/worldReadiness.d.ts +103 -0
- package/dist/target/worldReadiness.js +153 -0
- package/moltnet-releases.json +20 -0
- package/package.json +27 -11
- package/runtimes.yaml +8 -23
- package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
- package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
- /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
- /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { parseCausalJsonl } from "@noopolis/stele";
|
|
6
|
+
/** run_id every emitter is invoked with. Sourced from NOOPOLIS_RUN_ID, never model output. */
|
|
7
|
+
export const EMITTER_RUN_ID = "b92-conformance";
|
|
8
|
+
/** Per-emitter kill timeout. `go run` pays a compile cost on a cold module cache. */
|
|
9
|
+
const EMITTER_TIMEOUT_MS = 120_000;
|
|
10
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
// src/ledger -> src -> <repo root>
|
|
12
|
+
const ROOT_DIR = path.resolve(__dirname, "..", "..");
|
|
13
|
+
const ecosystemPath = (name) => path.resolve(ROOT_DIR, "ecosystem", name);
|
|
14
|
+
/**
|
|
15
|
+
* The four real sibling fixture emitters, invoked by path (never `npm run`).
|
|
16
|
+
* See B92 packet §1-§2 and each sibling's own runtime/observability AGENTS.md
|
|
17
|
+
* for what each emitter does.
|
|
18
|
+
*/
|
|
19
|
+
export const EMITTER_SPECS = [
|
|
20
|
+
{
|
|
21
|
+
command: ["node_modules/.bin/tsx", "src/runtime/emit-causal-fixture.ts"],
|
|
22
|
+
cwd: ecosystemPath("simfile"),
|
|
23
|
+
name: "simfile",
|
|
24
|
+
output: "stdout-jsonl"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
command: ["node_modules/.bin/tsx", "scripts/emit-causal-fixture.ts"],
|
|
28
|
+
cwd: ecosystemPath("mneme"),
|
|
29
|
+
name: "mneme",
|
|
30
|
+
output: "stdout-jsonl"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
command: ["node_modules/.bin/tsx", "src/observability/emitCausalFixture.ts"],
|
|
34
|
+
cwd: ecosystemPath("daimon"),
|
|
35
|
+
name: "daimon",
|
|
36
|
+
output: "path-line"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
command: ["go", "run", "./cmd/emit-causal-fixture"],
|
|
40
|
+
cwd: ecosystemPath("moltnet"),
|
|
41
|
+
name: "moltnet",
|
|
42
|
+
output: "stdout-jsonl"
|
|
43
|
+
}
|
|
44
|
+
];
|
|
45
|
+
/**
|
|
46
|
+
* Builds the adversarial "spoof mode" variant of an `EmitterSpec` (B62
|
|
47
|
+
* enforcement point #4): the sibling fixture emitter is asked to embed a
|
|
48
|
+
* forged/claimed identity in its fixture's input or output content, while
|
|
49
|
+
* still stamping `principal_id` as its own authenticated identity — never
|
|
50
|
+
* the claimed one. `--spoof` is the flag convention daimon's own fixture
|
|
51
|
+
* emitter already understands (`npm run emit-causal-fixture:spoof`, see
|
|
52
|
+
* `ecosystem/daimon/src/observability/emitCausalFixture.ts`); this helper
|
|
53
|
+
* applies the same convention uniformly across all four `EmitterSpec`s so a
|
|
54
|
+
* future caller does not need one-off spoof plumbing per sibling.
|
|
55
|
+
*
|
|
56
|
+
* `EMITTER_SPOOF_SPECS` is deliberately NOT part of the default real-mode
|
|
57
|
+
* `EMITTER_SPECS` list `causalConformanceCli.ts` invokes: today only
|
|
58
|
+
* daimon's real fixture script understands `--spoof` (simfile/mneme/moltnet
|
|
59
|
+
* have not yet added a spoof-capable fixture variant), so spawning the
|
|
60
|
+
* other three with an unrecognized flag would break the hermetic real-mode
|
|
61
|
+
* run. `EMITTER_SPOOF_SPECS` exists for callers — and this file's own
|
|
62
|
+
* injected-exec tests — that want to exercise spoof-mode collection
|
|
63
|
+
* explicitly, and is the shape every sibling's real spoof script should
|
|
64
|
+
* match once added.
|
|
65
|
+
*/
|
|
66
|
+
export const toSpoofEmitterSpec = (spec) => ({
|
|
67
|
+
...spec,
|
|
68
|
+
command: [...spec.command, "--spoof"],
|
|
69
|
+
name: `${spec.name}-spoof`
|
|
70
|
+
});
|
|
71
|
+
/** The adversarial "spoof mode" counterpart to `EMITTER_SPECS` — see `toSpoofEmitterSpec`. */
|
|
72
|
+
export const EMITTER_SPOOF_SPECS = EMITTER_SPECS.map(toSpoofEmitterSpec);
|
|
73
|
+
/**
|
|
74
|
+
* Spawns `spec.command` directly (no shell) in `spec.cwd`, with stdout and
|
|
75
|
+
* stderr captured separately so stderr noise (npm banners, SQLite
|
|
76
|
+
* ExperimentalWarning, etc.) never corrupts stdout-jsonl parsing. Kills the
|
|
77
|
+
* child on `EMITTER_TIMEOUT_MS` expiry.
|
|
78
|
+
*/
|
|
79
|
+
export const realExec = (spec) => new Promise((resolve) => {
|
|
80
|
+
const [command, ...args] = spec.command;
|
|
81
|
+
if (!command) {
|
|
82
|
+
resolve({ exitCode: null, spawnError: new Error("empty command"), stderr: "", stdout: "", timedOut: false });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
let stdout = "";
|
|
86
|
+
let stderr = "";
|
|
87
|
+
let timedOut = false;
|
|
88
|
+
let settled = false;
|
|
89
|
+
const child = spawn(command, args, {
|
|
90
|
+
cwd: spec.cwd,
|
|
91
|
+
env: { ...process.env, NOOPOLIS_RUN_ID: EMITTER_RUN_ID }
|
|
92
|
+
});
|
|
93
|
+
const timer = setTimeout(() => {
|
|
94
|
+
timedOut = true;
|
|
95
|
+
child.kill("SIGKILL");
|
|
96
|
+
}, EMITTER_TIMEOUT_MS);
|
|
97
|
+
child.stdout?.on("data", (chunk) => {
|
|
98
|
+
stdout += chunk.toString("utf8");
|
|
99
|
+
});
|
|
100
|
+
child.stderr?.on("data", (chunk) => {
|
|
101
|
+
stderr += chunk.toString("utf8");
|
|
102
|
+
});
|
|
103
|
+
child.on("error", (error) => {
|
|
104
|
+
if (settled) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
settled = true;
|
|
108
|
+
clearTimeout(timer);
|
|
109
|
+
resolve({ exitCode: null, spawnError: error, stderr, stdout, timedOut });
|
|
110
|
+
});
|
|
111
|
+
child.on("close", (code) => {
|
|
112
|
+
if (settled) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
settled = true;
|
|
116
|
+
clearTimeout(timer);
|
|
117
|
+
resolve({ exitCode: code, stderr, stdout, timedOut });
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
const lastNonEmptyLine = (text) => {
|
|
121
|
+
const lines = text.split("\n").map((line) => line.trim()).filter((line) => line.length > 0);
|
|
122
|
+
return lines[lines.length - 1];
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Runs every emitter spec sequentially (daimon reuses a fixed on-disk
|
|
126
|
+
* directory across runs, so concurrent invocation is unsafe) and turns each
|
|
127
|
+
* result into either a conformance fixture source or a reported issue.
|
|
128
|
+
* Never silently skips an emitter: spawn error, timeout, nonzero exit, zero
|
|
129
|
+
* parsed records, and an unreadable daimon path-line are all reported as a
|
|
130
|
+
* `ConformanceIssue{source}` rather than dropped.
|
|
131
|
+
*/
|
|
132
|
+
export const collectEmitterFixtures = async (specs = EMITTER_SPECS, exec = realExec) => {
|
|
133
|
+
const sources = [];
|
|
134
|
+
const issues = [];
|
|
135
|
+
for (const spec of specs) {
|
|
136
|
+
const result = await exec(spec);
|
|
137
|
+
if (result.spawnError) {
|
|
138
|
+
issues.push({ message: `spawn error: ${result.spawnError.message}`, source: spec.name });
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (result.timedOut) {
|
|
142
|
+
issues.push({ message: `timed out after ${EMITTER_TIMEOUT_MS}ms`, source: spec.name });
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (result.exitCode !== 0) {
|
|
146
|
+
const stderrDetail = result.stderr.trim();
|
|
147
|
+
issues.push({
|
|
148
|
+
message: `exited with code ${String(result.exitCode)}${stderrDetail ? `: ${stderrDetail}` : ""}`,
|
|
149
|
+
source: spec.name
|
|
150
|
+
});
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
let jsonl;
|
|
154
|
+
if (spec.output === "path-line") {
|
|
155
|
+
const pathLine = lastNonEmptyLine(result.stdout);
|
|
156
|
+
if (!pathLine) {
|
|
157
|
+
issues.push({ message: "path-line emitter produced no output path on stdout", source: spec.name });
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
jsonl = await readFile(pathLine, "utf8");
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
issues.push({
|
|
165
|
+
message: `unreadable path ${pathLine}: ${error instanceof Error ? error.message : String(error)}`,
|
|
166
|
+
source: spec.name
|
|
167
|
+
});
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
jsonl = result.stdout;
|
|
173
|
+
}
|
|
174
|
+
const { errors, events } = parseCausalJsonl(jsonl);
|
|
175
|
+
if (errors.length > 0) {
|
|
176
|
+
for (const error of errors) {
|
|
177
|
+
issues.push({ line: error.line, message: error.message, source: spec.name });
|
|
178
|
+
}
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (events.length === 0) {
|
|
182
|
+
issues.push({ message: "emitter produced zero parsed records", source: spec.name });
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
sources.push({ jsonl, name: spec.name });
|
|
186
|
+
}
|
|
187
|
+
return { issues, sources };
|
|
188
|
+
};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { CausalEvent } from "@noopolis/stele";
|
|
2
|
+
import { PRINCIPAL_GRAMMAR_SOURCE } from "@noopolis/stele";
|
|
3
|
+
/**
|
|
4
|
+
* Principal grammar (specs/CAUSAL.md §3, `specs/causal-event.v1.schema.json`
|
|
5
|
+
* `principal_id.pattern`): `agent:<agentId>` | `operator:<credentialKey|name>`
|
|
6
|
+
* | `system:<system>[.<component>]`. A principal is minted only by a
|
|
7
|
+
* trusted layer (root's container env, a per-agent harness config, an
|
|
8
|
+
* authn claim) — never derived from `request.From`, tool arguments, or
|
|
9
|
+
* model output. This module owns parsing/validating that grammar on the
|
|
10
|
+
* root side, plus the per-event conformance checks conformance.ts layers
|
|
11
|
+
* on top of it; it has no I/O and no knowledge of any specific authority's
|
|
12
|
+
* transport.
|
|
13
|
+
*
|
|
14
|
+
* The grammar itself (`PRINCIPAL_GRAMMAR_SOURCE`) is defined once in
|
|
15
|
+
* `envelope.ts` — the same regex `causalEventSchema` enforces on the wire —
|
|
16
|
+
* and re-exported from here so existing callers of this module keep working;
|
|
17
|
+
* this file never hardcodes a second copy of the pattern.
|
|
18
|
+
*/
|
|
19
|
+
export type PrincipalKind = "agent" | "operator" | "system";
|
|
20
|
+
export interface Principal {
|
|
21
|
+
id: string;
|
|
22
|
+
kind: PrincipalKind;
|
|
23
|
+
}
|
|
24
|
+
export interface PrincipalParseError {
|
|
25
|
+
message: string;
|
|
26
|
+
}
|
|
27
|
+
export { PRINCIPAL_GRAMMAR_SOURCE };
|
|
28
|
+
/**
|
|
29
|
+
* `system:moltnet.anonymous` is moltnet's stamped principal for the
|
|
30
|
+
* unauthenticated dev-mode case (no authn claims on the request context at
|
|
31
|
+
* all) — see `ecosystem/moltnet/internal/rooms/causal.go`. It is grammar-
|
|
32
|
+
* valid (a real `system:` principal) but conformance treats it as
|
|
33
|
+
* unauthenticated on purpose: it is a placeholder for "no principal",
|
|
34
|
+
* never a credential to attribute causal events to.
|
|
35
|
+
*/
|
|
36
|
+
export declare const ANONYMOUS_SYSTEM_PRINCIPAL = "system:moltnet.anonymous";
|
|
37
|
+
/**
|
|
38
|
+
* Parses a `principal_id` string against the grammar. Returns a
|
|
39
|
+
* `PrincipalParseError` (never throws) for anything that does not match
|
|
40
|
+
* `^(agent|operator|system):.+` — a bare id with no prefix, an unknown
|
|
41
|
+
* prefix, or an empty string all land here.
|
|
42
|
+
*/
|
|
43
|
+
export declare const parsePrincipal: (value: string) => Principal | PrincipalParseError;
|
|
44
|
+
export declare const isPrincipalParseError: (value: Principal | PrincipalParseError) => value is PrincipalParseError;
|
|
45
|
+
/**
|
|
46
|
+
* True only for a principal that is both grammar-valid and represents a
|
|
47
|
+
* real authenticated identity: grammar mismatches, a bare id, an empty
|
|
48
|
+
* trailing id, the literal `anonymous`, and `system:moltnet.anonymous`
|
|
49
|
+
* (moltnet's unauthenticated dev-mode placeholder) are all rejected.
|
|
50
|
+
* Conformance (`conformance.ts`) uses this as its per-event grammar check.
|
|
51
|
+
*/
|
|
52
|
+
export declare const isAuthenticatedPrincipal: (value: string) => boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Lightweight structural sibling of `conformance.ts`'s `ConformanceIssue`
|
|
55
|
+
* (message + source; no line number — these are per-event, not per-line
|
|
56
|
+
* fixture checks). Kept local to this module to avoid a circular import
|
|
57
|
+
* with `conformance.ts`, which imports `PRINCIPAL_DISCIPLINE_CHECKS` from
|
|
58
|
+
* here; every field here is a subset of `ConformanceIssue`'s, so these
|
|
59
|
+
* values are usable anywhere a `ConformanceIssue` is expected.
|
|
60
|
+
*/
|
|
61
|
+
export interface PrincipalConformanceIssue {
|
|
62
|
+
message: string;
|
|
63
|
+
source: string;
|
|
64
|
+
}
|
|
65
|
+
export type PrincipalEventCheck = (event: CausalEvent, sourceName: string) => PrincipalConformanceIssue[];
|
|
66
|
+
/**
|
|
67
|
+
* Principal-grammar check (specs/CAUSAL.md §3, B62 enforcement point #4a):
|
|
68
|
+
* every event's `principal_id` must be an authenticated `agent:`/`operator:`/
|
|
69
|
+
* `system:` principal — never a bare id, the literal `anonymous`, or
|
|
70
|
+
* moltnet's `system:moltnet.anonymous` unauthenticated placeholder.
|
|
71
|
+
*/
|
|
72
|
+
export declare const checkPrincipalGrammar: PrincipalEventCheck;
|
|
73
|
+
/**
|
|
74
|
+
* Stream/principal consistency check (B62 enforcement point #4b): for
|
|
75
|
+
* daimon's turn events, `principal_id` must exactly equal `emitter.stream_id`
|
|
76
|
+
* — the agent whose stream this is must be the agent this event is
|
|
77
|
+
* attributed to. This deliberately does NOT apply to daimon's control-wake
|
|
78
|
+
* events (`control.wake.accepted`/`control.wake.denied`), whose stream is
|
|
79
|
+
* the *target* agent being woken but whose principal is the *operator* who
|
|
80
|
+
* requested the wake — an intentional mismatch, not a violation.
|
|
81
|
+
*/
|
|
82
|
+
export declare const checkStreamPrincipalConsistency: PrincipalEventCheck;
|
|
83
|
+
/**
|
|
84
|
+
* Per-event checks `conformance.ts`'s `runSyntheticConformance` AND (as of
|
|
85
|
+
* the B62 fix) `runRealConformance` both layer on top of schema parsing +
|
|
86
|
+
* payload minimums, via `validateConformanceSources`'s `extraChecks`
|
|
87
|
+
* parameter. Wiring this into `runRealConformance` is what gives the real
|
|
88
|
+
* `npm run test:causal-conformance` path teeth: without it, a real sibling
|
|
89
|
+
* emitter stamping a non-grammar `principal_id` would pass conformance
|
|
90
|
+
* silently (the schema-level `PRINCIPAL_GRAMMAR_SOURCE` regex in
|
|
91
|
+
* `envelope.ts` already rejects most malformed principals at parse time, but
|
|
92
|
+
* `checkStreamPrincipalConsistency` in particular is conformance-only — it
|
|
93
|
+
* has no envelope-schema equivalent). `realConformance.test.ts`'s hand-
|
|
94
|
+
* authored fixtures are kept grammar-compliant for exactly this reason.
|
|
95
|
+
*/
|
|
96
|
+
export declare const PRINCIPAL_DISCIPLINE_CHECKS: PrincipalEventCheck[];
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { PRINCIPAL_GRAMMAR_SOURCE } from "@noopolis/stele";
|
|
2
|
+
export { PRINCIPAL_GRAMMAR_SOURCE };
|
|
3
|
+
/** Boolean grammar test built from the single source of truth, `PRINCIPAL_GRAMMAR_SOURCE`. */
|
|
4
|
+
const PRINCIPAL_PATTERN = new RegExp(PRINCIPAL_GRAMMAR_SOURCE, "u");
|
|
5
|
+
/**
|
|
6
|
+
* `system:moltnet.anonymous` is moltnet's stamped principal for the
|
|
7
|
+
* unauthenticated dev-mode case (no authn claims on the request context at
|
|
8
|
+
* all) — see `ecosystem/moltnet/internal/rooms/causal.go`. It is grammar-
|
|
9
|
+
* valid (a real `system:` principal) but conformance treats it as
|
|
10
|
+
* unauthenticated on purpose: it is a placeholder for "no principal",
|
|
11
|
+
* never a credential to attribute causal events to.
|
|
12
|
+
*/
|
|
13
|
+
export const ANONYMOUS_SYSTEM_PRINCIPAL = "system:moltnet.anonymous";
|
|
14
|
+
/** The literal bare string some legacy/dev paths might stamp instead of a real principal. */
|
|
15
|
+
const ANONYMOUS_LITERAL = "anonymous";
|
|
16
|
+
/**
|
|
17
|
+
* Parses a `principal_id` string against the grammar. Returns a
|
|
18
|
+
* `PrincipalParseError` (never throws) for anything that does not match
|
|
19
|
+
* `^(agent|operator|system):.+` — a bare id with no prefix, an unknown
|
|
20
|
+
* prefix, or an empty string all land here.
|
|
21
|
+
*/
|
|
22
|
+
export const parsePrincipal = (value) => {
|
|
23
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
24
|
+
return { message: "principal_id must be a non-empty string" };
|
|
25
|
+
}
|
|
26
|
+
if (!PRINCIPAL_PATTERN.test(value)) {
|
|
27
|
+
return {
|
|
28
|
+
message: `principal_id "${value}" does not match the <agent|operator|system>:<id> grammar (specs/CAUSAL.md §3)`
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// PRINCIPAL_PATTERN already guarantees a `<kind>:<rest>` shape with a
|
|
32
|
+
// known kind prefix, so a plain split on the first colon is safe and
|
|
33
|
+
// avoids maintaining a second, capturing copy of the same pattern.
|
|
34
|
+
const separatorIndex = value.indexOf(":");
|
|
35
|
+
const kind = value.slice(0, separatorIndex);
|
|
36
|
+
const id = value.slice(separatorIndex + 1);
|
|
37
|
+
return { id, kind };
|
|
38
|
+
};
|
|
39
|
+
export const isPrincipalParseError = (value) => "message" in value;
|
|
40
|
+
/**
|
|
41
|
+
* True only for a principal that is both grammar-valid and represents a
|
|
42
|
+
* real authenticated identity: grammar mismatches, a bare id, an empty
|
|
43
|
+
* trailing id, the literal `anonymous`, and `system:moltnet.anonymous`
|
|
44
|
+
* (moltnet's unauthenticated dev-mode placeholder) are all rejected.
|
|
45
|
+
* Conformance (`conformance.ts`) uses this as its per-event grammar check.
|
|
46
|
+
*/
|
|
47
|
+
export const isAuthenticatedPrincipal = (value) => {
|
|
48
|
+
if (typeof value !== "string") {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const trimmed = value.trim();
|
|
52
|
+
if (trimmed.length === 0 || trimmed === ANONYMOUS_LITERAL || trimmed === ANONYMOUS_SYSTEM_PRINCIPAL) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
const parsed = parsePrincipal(trimmed);
|
|
56
|
+
if (isPrincipalParseError(parsed)) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return parsed.id.trim().length > 0;
|
|
60
|
+
};
|
|
61
|
+
/** `type`s whose `principal_id` must exactly equal `emitter.stream_id` (a daimon `agent:<id>` stream). */
|
|
62
|
+
const AGENT_STREAM_TURN_EVENT_TYPES = new Set(["turn.input.submitted", "turn.output.completed"]);
|
|
63
|
+
/**
|
|
64
|
+
* Principal-grammar check (specs/CAUSAL.md §3, B62 enforcement point #4a):
|
|
65
|
+
* every event's `principal_id` must be an authenticated `agent:`/`operator:`/
|
|
66
|
+
* `system:` principal — never a bare id, the literal `anonymous`, or
|
|
67
|
+
* moltnet's `system:moltnet.anonymous` unauthenticated placeholder.
|
|
68
|
+
*/
|
|
69
|
+
export const checkPrincipalGrammar = (event, sourceName) => {
|
|
70
|
+
if (isAuthenticatedPrincipal(event.principal_id)) {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
return [
|
|
74
|
+
{
|
|
75
|
+
message: `event ${event.event_id} has principal_id "${event.principal_id}", which is not an authenticated ` +
|
|
76
|
+
`agent:/operator:/system: principal (specs/CAUSAL.md §3)`,
|
|
77
|
+
source: sourceName
|
|
78
|
+
}
|
|
79
|
+
];
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Stream/principal consistency check (B62 enforcement point #4b): for
|
|
83
|
+
* daimon's turn events, `principal_id` must exactly equal `emitter.stream_id`
|
|
84
|
+
* — the agent whose stream this is must be the agent this event is
|
|
85
|
+
* attributed to. This deliberately does NOT apply to daimon's control-wake
|
|
86
|
+
* events (`control.wake.accepted`/`control.wake.denied`), whose stream is
|
|
87
|
+
* the *target* agent being woken but whose principal is the *operator* who
|
|
88
|
+
* requested the wake — an intentional mismatch, not a violation.
|
|
89
|
+
*/
|
|
90
|
+
export const checkStreamPrincipalConsistency = (event, sourceName) => {
|
|
91
|
+
if (event.emitter.system !== "daimon" || !AGENT_STREAM_TURN_EVENT_TYPES.has(event.type)) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
if (!event.emitter.stream_id.startsWith("agent:") || event.principal_id === event.emitter.stream_id) {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
return [
|
|
98
|
+
{
|
|
99
|
+
message: `event ${event.event_id} is on stream ${event.emitter.stream_id} but has principal_id ` +
|
|
100
|
+
`"${event.principal_id}" — daimon turn events must be attributed to the agent that owns their stream`,
|
|
101
|
+
source: sourceName
|
|
102
|
+
}
|
|
103
|
+
];
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Per-event checks `conformance.ts`'s `runSyntheticConformance` AND (as of
|
|
107
|
+
* the B62 fix) `runRealConformance` both layer on top of schema parsing +
|
|
108
|
+
* payload minimums, via `validateConformanceSources`'s `extraChecks`
|
|
109
|
+
* parameter. Wiring this into `runRealConformance` is what gives the real
|
|
110
|
+
* `npm run test:causal-conformance` path teeth: without it, a real sibling
|
|
111
|
+
* emitter stamping a non-grammar `principal_id` would pass conformance
|
|
112
|
+
* silently (the schema-level `PRINCIPAL_GRAMMAR_SOURCE` regex in
|
|
113
|
+
* `envelope.ts` already rejects most malformed principals at parse time, but
|
|
114
|
+
* `checkStreamPrincipalConsistency` in particular is conformance-only — it
|
|
115
|
+
* has no envelope-schema equivalent). `realConformance.test.ts`'s hand-
|
|
116
|
+
* authored fixtures are kept grammar-compliant for exactly this reason.
|
|
117
|
+
*/
|
|
118
|
+
export const PRINCIPAL_DISCIPLINE_CHECKS = [
|
|
119
|
+
checkPrincipalGrammar,
|
|
120
|
+
checkStreamPrincipalConsistency
|
|
121
|
+
];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const externalParticipantServiceSchema: z.ZodObject<{
|
|
3
|
+
id: z.ZodString;
|
|
4
|
+
kind: z.ZodLiteral<"service">;
|
|
5
|
+
surfaces: z.ZodObject<{
|
|
6
|
+
moltnet: z.ZodArray<z.ZodObject<{
|
|
7
|
+
network: z.ZodString;
|
|
8
|
+
auth: z.ZodObject<{
|
|
9
|
+
token_id: z.ZodString;
|
|
10
|
+
}, z.core.$strict>;
|
|
11
|
+
dms: z.ZodObject<{
|
|
12
|
+
enabled: z.ZodLiteral<true>;
|
|
13
|
+
}, z.core.$strict>;
|
|
14
|
+
}, z.core.$strict>>;
|
|
15
|
+
}, z.core.$strict>;
|
|
16
|
+
}, z.core.$strict>;
|
|
17
|
+
export type ExternalParticipantService = z.infer<typeof externalParticipantServiceSchema>;
|
|
18
|
+
export type ExternalParticipantMoltnetAttachment = ExternalParticipantService["surfaces"]["moltnet"][number];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const segment = z.string().regex(/^[a-z][a-z0-9-]{0,62}$/u);
|
|
3
|
+
const attachmentSchema = z.object({
|
|
4
|
+
network: segment,
|
|
5
|
+
auth: z.object({ token_id: segment }).strict(),
|
|
6
|
+
dms: z.object({ enabled: z.literal(true) }).strict()
|
|
7
|
+
}).strict();
|
|
8
|
+
export const externalParticipantServiceSchema = z.object({
|
|
9
|
+
id: segment,
|
|
10
|
+
kind: z.literal("service"),
|
|
11
|
+
surfaces: z.object({ moltnet: z.array(attachmentSchema).min(1).max(16) }).strict()
|
|
12
|
+
}).strict().superRefine((value, context) => {
|
|
13
|
+
const networks = value.surfaces.moltnet.map((entry) => entry.network);
|
|
14
|
+
if (new Set(networks).size !== networks.length) {
|
|
15
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "external participant networks must be unique" });
|
|
16
|
+
}
|
|
17
|
+
});
|
package/dist/manifest/index.d.ts
CHANGED
package/dist/manifest/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { parse as parseYaml } from "yaml";
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { fileExists, isSymlink, readUtf8File, resolveProjectPath } from "../filesystem/index.js";
|
|
5
5
|
import { SpawnfileError } from "../shared/index.js";
|
|
6
|
-
import { isAgentManifest, isTeamManifest, manifestSchema } from "./schemas.js";
|
|
6
|
+
import { isAgentManifest, isInlineAgentMember, isReferencedMember, isTeamManifest, manifestSchema } from "./schemas.js";
|
|
7
7
|
import { parseSkillFrontmatter } from "./skillFrontmatter.js";
|
|
8
8
|
const ensureUniqueNames = (names, label) => {
|
|
9
9
|
const seen = new Set();
|
|
@@ -84,16 +84,19 @@ const validateSkills = async (manifestPath, skills) => {
|
|
|
84
84
|
parseSkillFrontmatter(await readUtf8File(skillFilePath));
|
|
85
85
|
}));
|
|
86
86
|
};
|
|
87
|
-
const
|
|
88
|
-
const agentWorkspaceSkills =
|
|
89
|
-
const agentEnvironment =
|
|
87
|
+
const validateLocalAgentConfiguration = async (manifestPath, agent) => {
|
|
88
|
+
const agentWorkspaceSkills = agent.workspace?.skills;
|
|
89
|
+
const agentEnvironment = agent.environment;
|
|
90
90
|
ensureUniqueNames((agentEnvironment?.mcp_servers ?? []).map((server) => server.name), "MCP server");
|
|
91
|
-
|
|
92
|
-
await validateDocFiles(manifestPath, manifest.workspace?.docs);
|
|
91
|
+
await validateDocFiles(manifestPath, agent.workspace?.docs);
|
|
93
92
|
await validateSkills(manifestPath, agentWorkspaceSkills);
|
|
94
|
-
await validateManifestRefs(manifestPath, manifest.subagents?.map((subagent) => subagent.ref), "Subagent");
|
|
95
93
|
validateSkillRequirements(agentWorkspaceSkills, getMcpNames(agentEnvironment?.mcp_servers));
|
|
96
94
|
};
|
|
95
|
+
const validateLocalAgentManifest = async (manifestPath, manifest) => {
|
|
96
|
+
ensureUniqueNames((manifest.subagents ?? []).map((subagent) => subagent.id), "subagent id");
|
|
97
|
+
await validateLocalAgentConfiguration(manifestPath, manifest);
|
|
98
|
+
await validateManifestRefs(manifestPath, manifest.subagents?.map((subagent) => subagent.ref), "Subagent");
|
|
99
|
+
};
|
|
97
100
|
const getSharedMcpNames = (shared) => getMcpNames(shared?.environment?.mcp_servers);
|
|
98
101
|
const validateLocalTeamManifest = async (manifestPath, manifest) => {
|
|
99
102
|
const sharedWorkspace = manifest.shared?.workspace;
|
|
@@ -102,7 +105,10 @@ const validateLocalTeamManifest = async (manifestPath, manifest) => {
|
|
|
102
105
|
ensureUniqueNames(manifest.members.map((member) => member.id), "member id");
|
|
103
106
|
await validateDocFiles(manifestPath, sharedWorkspace?.docs);
|
|
104
107
|
await validateSkills(manifestPath, sharedWorkspace?.skills);
|
|
105
|
-
await validateManifestRefs(manifestPath, manifest.members.map((member) => member.ref), "Member");
|
|
108
|
+
await validateManifestRefs(manifestPath, manifest.members.filter(isReferencedMember).map((member) => member.ref), "Member");
|
|
109
|
+
await Promise.all(manifest.members
|
|
110
|
+
.filter(isInlineAgentMember)
|
|
111
|
+
.map((member) => validateLocalAgentConfiguration(manifestPath, member)));
|
|
106
112
|
validateSkillRequirements(sharedWorkspace?.skills, getSharedMcpNames(manifest.shared));
|
|
107
113
|
const memberIds = new Set(manifest.members.map((member) => member.id));
|
|
108
114
|
if (manifest.lead && !memberIds.has(manifest.lead)) {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const mcpServerSchema: z.ZodObject<{
|
|
3
|
+
args: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
4
|
+
auth: z.ZodOptional<z.ZodObject<{
|
|
5
|
+
mode: z.ZodOptional<z.ZodLiteral<"bearer">>;
|
|
6
|
+
secret: z.ZodString;
|
|
7
|
+
}, z.core.$strict>>;
|
|
8
|
+
command: z.ZodOptional<z.ZodString>;
|
|
9
|
+
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
10
|
+
name: z.ZodString;
|
|
11
|
+
transport: z.ZodEnum<{
|
|
12
|
+
sse: "sse";
|
|
13
|
+
stdio: "stdio";
|
|
14
|
+
streamable_http: "streamable_http";
|
|
15
|
+
}>;
|
|
16
|
+
url: z.ZodOptional<z.ZodString>;
|
|
17
|
+
}, z.core.$strict>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const mcpAuthSchema = z
|
|
3
|
+
.object({
|
|
4
|
+
mode: z.literal("bearer").optional(),
|
|
5
|
+
secret: z.string()
|
|
6
|
+
})
|
|
7
|
+
.strict()
|
|
8
|
+
.superRefine((value, context) => {
|
|
9
|
+
if (value.mode === "bearer" && !/^[A-Za-z_][A-Za-z0-9_]*$/.test(value.secret)) {
|
|
10
|
+
context.addIssue({
|
|
11
|
+
code: z.ZodIssueCode.custom,
|
|
12
|
+
path: ["secret"],
|
|
13
|
+
message: "bearer auth.secret must be a valid shell environment-variable name"
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
export const mcpServerSchema = z
|
|
18
|
+
.object({
|
|
19
|
+
args: z.array(z.string()).optional(),
|
|
20
|
+
auth: mcpAuthSchema.optional(),
|
|
21
|
+
command: z.string().optional(),
|
|
22
|
+
env: z.record(z.string(), z.string()).optional(),
|
|
23
|
+
name: z.string().min(1),
|
|
24
|
+
transport: z.enum(["sse", "stdio", "streamable_http"]),
|
|
25
|
+
url: z.string().optional()
|
|
26
|
+
})
|
|
27
|
+
.strict()
|
|
28
|
+
.superRefine((value, context) => {
|
|
29
|
+
if (value.name.startsWith("spawnfile.") || value.name.startsWith("mneme-")) {
|
|
30
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "MCP server name is reserved for compiler-owned generated services" });
|
|
31
|
+
}
|
|
32
|
+
if (value.transport === "stdio" && !value.command) {
|
|
33
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "stdio MCP servers must declare command" });
|
|
34
|
+
}
|
|
35
|
+
if (value.transport === "stdio" && value.auth?.mode === "bearer") {
|
|
36
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "stdio MCP servers do not support bearer auth" });
|
|
37
|
+
}
|
|
38
|
+
if (value.transport !== "stdio" && !value.url) {
|
|
39
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: `${value.transport} MCP servers must declare url` });
|
|
40
|
+
}
|
|
41
|
+
});
|