spawnfile 0.1.14 → 0.1.17
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 +60 -159
- package/dist/audit/checksShared.d.ts +1 -1
- package/dist/auth/importers.d.ts +10 -0
- package/dist/auth/importers.js +29 -4
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.js +1 -0
- package/dist/auth/paths.d.ts +1 -1
- package/dist/auth/profileStore.js +9 -9
- package/dist/auth/targetSecretSourceFsIdentity.d.ts +40 -0
- package/dist/auth/targetSecretSourceFsIdentity.js +42 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +2 -0
- package/dist/auth/targetSecretSourceFsPublish.js +3 -1
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +2 -1
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +104 -71
- package/dist/auth/targetSecretSourceFsRead.js +5 -14
- package/dist/auth/trainingAuth.d.ts +21 -0
- package/dist/auth/trainingAuth.js +86 -0
- package/dist/auth/types.d.ts +1 -1
- package/dist/cli/authCommands.d.ts +1 -1
- package/dist/cli/authCommands.js +9 -0
- package/dist/cli/canaryCutoverCommand.d.ts +2 -0
- package/dist/cli/canaryCutoverCommand.js +30 -0
- package/dist/cli/capabilitiesCommand.d.ts +3 -0
- package/dist/cli/capabilitiesCommand.js +12 -0
- package/dist/cli/capabilitiesReceipt.d.ts +56 -0
- package/dist/cli/capabilitiesReceipt.js +56 -0
- package/dist/cli/compileBuildCommands.js +13 -0
- package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
- package/dist/cli/composedLifecycleContractSet.js +204 -0
- package/dist/cli/devCommands.js +2 -0
- package/dist/cli/downCommand.js +19 -8
- package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
- package/dist/cli/evidenceExportHelperCommand.js +51 -0
- package/dist/cli/index.js +12 -3
- package/dist/cli/lifecycleMachine.d.ts +7 -1
- package/dist/cli/lifecycleMachine.js +2 -2
- package/dist/cli/paideiaDelegation.d.ts +17 -0
- package/dist/cli/paideiaDelegation.js +210 -0
- package/dist/cli/paideiaSupervisor.d.ts +17 -0
- package/dist/cli/paideiaSupervisor.js +48 -0
- package/dist/cli/productStateCloneCommand.d.ts +2 -0
- package/dist/cli/productStateCloneCommand.js +34 -0
- package/dist/cli/runCli.d.ts +13 -3
- package/dist/cli/runCli.js +37 -9
- package/dist/cli/targetCommands.d.ts +4 -7
- package/dist/cli/targetCommands.js +16 -46
- package/dist/cli/targetConfigPreparedPlan.d.ts +3 -0
- package/dist/cli/targetConfigPreparedPlan.js +74 -0
- package/dist/cli/targetConfigResolver.d.ts +3 -0
- package/dist/cli/targetConfigResolver.js +111 -0
- package/dist/cli/targetConfigResolverCommand.d.ts +6 -0
- package/dist/cli/targetConfigResolverCommand.js +43 -0
- package/dist/cli/targetConfigResolverContracts.d.ts +56 -0
- package/dist/cli/targetConfigResolverContracts.js +30 -0
- package/dist/cli/targetConfigResolverDocker.d.ts +4 -0
- package/dist/cli/targetConfigResolverDocker.js +47 -0
- package/dist/cli/targetConfigResolverValidation.d.ts +10 -0
- package/dist/cli/targetConfigResolverValidation.js +94 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +2 -0
- package/dist/cli/targetDefaultAuthorities.js +3 -0
- package/dist/cli/targetDefaultConfig.d.ts +7 -0
- package/dist/cli/targetDefaultConfig.js +22 -5
- package/dist/cli/targetDefaultConfigStdin.js +7 -1
- package/dist/cli/targetDefaultHandlerFactory.js +23 -2
- package/dist/cli/targetDefaultHandlers.d.ts +2 -2
- package/dist/cli/targetProductionCommands.d.ts +5 -0
- package/dist/cli/targetProductionCommands.js +45 -0
- package/dist/cli/trainCommand.d.ts +3 -0
- package/dist/cli/trainCommand.js +61 -0
- package/dist/cli/upCommand.js +35 -6
- package/dist/cli/upLifecycleRecovery.d.ts +2 -2
- package/dist/cli/upLifecycleRecovery.js +188 -44
- package/dist/cli/usageCommand.d.ts +40 -0
- package/dist/cli/usageCommand.js +284 -0
- package/dist/cli/usageCommandLive.d.ts +84 -0
- package/dist/cli/usageCommandLive.js +95 -0
- package/dist/cli/usageDeploymentSource.d.ts +9 -0
- package/dist/cli/usageDeploymentSource.js +22 -0
- package/dist/cli/workspaceResourceMigrationCommand.d.ts +8 -0
- package/dist/cli/workspaceResourceMigrationCommand.js +36 -0
- package/dist/compiler/buildCompilePlanTeams.d.ts +1 -1
- package/dist/compiler/buildCompilePlanTeams.js +6 -1
- package/dist/compiler/compilePlanHelpers.js +3 -0
- package/dist/compiler/compileProject.d.ts +2 -0
- package/dist/compiler/compileProject.js +5 -1
- package/dist/compiler/compileProjectSupport.js +9 -0
- package/dist/compiler/containerArtifacts.d.ts +3 -1
- package/dist/compiler/containerArtifacts.js +92 -40
- package/dist/compiler/containerArtifactsPlans.d.ts +1 -1
- package/dist/compiler/containerArtifactsPlans.js +24 -7
- package/dist/compiler/containerArtifactsRender.d.ts +2 -1
- package/dist/compiler/containerArtifactsRender.js +91 -58
- package/dist/compiler/containerArtifactsTypes.d.ts +8 -0
- package/dist/compiler/containerBackedMountRender.d.ts +56 -0
- package/dist/compiler/containerBackedMountRender.js +101 -0
- package/dist/compiler/containerDaimonBrokerRender.d.ts +112 -0
- package/dist/compiler/containerDaimonBrokerRender.js +191 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +108 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +172 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.js +268 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +12 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.js +191 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.js +297 -0
- package/dist/compiler/containerEntrypointRender.d.ts +7 -0
- package/dist/compiler/containerEntrypointRender.js +28 -22
- package/dist/compiler/containerPersistentMounts.d.ts +30 -0
- package/dist/compiler/containerPersistentMounts.js +66 -0
- package/dist/compiler/containerReadinessPaths.d.ts +1 -0
- package/dist/compiler/containerReadinessPaths.js +1 -0
- package/dist/compiler/containerRuntimeLinkMaterializer.d.ts +2 -0
- package/dist/compiler/containerRuntimeLinkMaterializer.js +12 -0
- package/dist/compiler/containerRuntimeReadinessRender.d.ts +7 -0
- package/dist/compiler/containerRuntimeReadinessRender.js +40 -0
- package/dist/compiler/containerStateOwnershipRender.d.ts +4 -0
- package/dist/compiler/containerStateOwnershipRender.js +75 -0
- package/dist/compiler/containerTargetResources.d.ts +22 -1
- package/dist/compiler/containerTargetResources.js +94 -2
- package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
- package/dist/compiler/containerVolumeBootstrap.js +3 -0
- package/dist/compiler/containerWorkspaceResourceRender.js +49 -1
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +2 -2
- package/dist/compiler/daimonTelemetryArtifacts.js +5 -10
- package/dist/compiler/deploymentLineage.d.ts +40 -0
- package/dist/compiler/deploymentLineage.js +50 -0
- package/dist/compiler/index.d.ts +3 -0
- package/dist/compiler/index.js +3 -0
- package/dist/compiler/initProject.d.ts +2 -0
- package/dist/compiler/initProject.js +39 -1
- package/dist/compiler/localMoltnetAuthority.d.ts +64 -0
- package/dist/compiler/localMoltnetAuthority.js +177 -0
- package/dist/compiler/memoryArtifacts.d.ts +1 -1
- package/dist/compiler/memoryArtifacts.js +108 -32
- package/dist/compiler/modelEnv.d.ts +5 -0
- package/dist/compiler/modelEnv.js +8 -2
- package/dist/compiler/moltnetArtifactPaths.d.ts +17 -12
- package/dist/compiler/moltnetArtifactPaths.js +17 -15
- package/dist/compiler/moltnetArtifactTypes.d.ts +10 -0
- package/dist/compiler/moltnetArtifacts.d.ts +1 -1
- package/dist/compiler/moltnetArtifacts.js +52 -12
- package/dist/compiler/moltnetBinaries.d.ts +16 -4
- package/dist/compiler/moltnetBinaries.js +46 -6
- package/dist/compiler/moltnetClientConfig.js +1 -1
- package/dist/compiler/moltnetConfigLowering.d.ts +3 -1
- package/dist/compiler/moltnetConfigLowering.js +30 -6
- package/dist/compiler/moltnetNodeConfig.js +1 -1
- package/dist/compiler/moltnetReleaseAuthority.d.ts +24 -1
- package/dist/compiler/moltnetReleaseAuthority.js +33 -4
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -1
- package/dist/compiler/moltnetRepresentativeResolution.js +2 -2
- package/dist/compiler/moltnetResolution.js +9 -15
- package/dist/compiler/moltnetRoomMemberships.js +20 -5
- package/dist/compiler/moltnetRoomPolicyCompatibility.d.ts +1 -1
- package/dist/compiler/moltnetRoomPolicyCompatibility.js +3 -1
- package/dist/compiler/moltnetRuntimeConfig.d.ts +1 -1
- package/dist/compiler/moltnetRuntimeConfig.js +22 -2
- package/dist/compiler/moltnetServerPlans.js +19 -0
- package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
- package/dist/compiler/organizationExternalParticipants.js +176 -0
- package/dist/compiler/organizationIdentity.d.ts +3 -9
- package/dist/compiler/organizationIdentity.js +37 -270
- package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
- package/dist/compiler/organizationIdentityGraph.js +115 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +8 -0
- package/dist/compiler/organizationReadyEvidence.js +23 -3
- package/dist/compiler/runProject.d.ts +4 -2
- package/dist/compiler/runProject.js +32 -6
- package/dist/compiler/runProjectAuth.d.ts +3 -1
- package/dist/compiler/runProjectAuth.js +19 -3
- package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
- package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
- package/dist/compiler/runProjectDocker.d.ts +8 -4
- package/dist/compiler/runProjectDocker.js +43 -18
- package/dist/compiler/runProjectDockerDaimonGuards.d.ts +15 -0
- package/dist/compiler/runProjectDockerDaimonGuards.js +122 -0
- package/dist/compiler/runProjectDockerReservation.d.ts +3 -0
- package/dist/compiler/runProjectDockerReservation.js +118 -0
- package/dist/compiler/runProjectLifecycle.js +1 -1
- package/dist/compiler/training/broker/declaration.d.ts +45 -0
- package/dist/compiler/training/broker/declaration.js +55 -0
- package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
- package/dist/compiler/training/broker/entrypoint.js +111 -0
- package/dist/compiler/training/broker/index.d.ts +10 -0
- package/dist/compiler/training/broker/index.js +10 -0
- package/dist/compiler/training/broker/main.d.ts +2 -0
- package/dist/compiler/training/broker/main.js +14 -0
- package/dist/compiler/training/broker/paths.d.ts +196 -0
- package/dist/compiler/training/broker/paths.js +241 -0
- package/dist/compiler/training/broker/processes.d.ts +42 -0
- package/dist/compiler/training/broker/processes.js +99 -0
- package/dist/compiler/training/broker/projection.d.ts +51 -0
- package/dist/compiler/training/broker/projection.js +76 -0
- package/dist/compiler/training/broker/provisioning.d.ts +87 -0
- package/dist/compiler/training/broker/provisioning.js +213 -0
- package/dist/compiler/training/broker/receipt.d.ts +77 -0
- package/dist/compiler/training/broker/receipt.js +110 -0
- package/dist/compiler/training/broker/registration.d.ts +41 -0
- package/dist/compiler/training/broker/registration.js +102 -0
- package/dist/compiler/training/broker/runtime.d.ts +25 -0
- package/dist/compiler/training/broker/runtime.js +173 -0
- package/dist/compiler/training/broker/seccompRoutes.d.ts +31 -0
- package/dist/compiler/training/broker/seccompRoutes.js +36 -0
- package/dist/compiler/training/broker/supervisor.d.ts +109 -0
- package/dist/compiler/training/broker/supervisor.js +173 -0
- package/dist/compiler/training/container/contract.d.ts +31 -0
- package/dist/compiler/training/container/contract.js +33 -0
- package/dist/compiler/training/container/index.d.ts +4 -0
- package/dist/compiler/training/container/index.js +2 -0
- package/dist/compiler/training/container/launch.d.ts +18 -0
- package/dist/compiler/training/container/launch.js +173 -0
- package/dist/compiler/training/container/prepare.d.ts +8 -0
- package/dist/compiler/training/container/prepare.js +80 -0
- package/dist/compiler/training/container/process.d.ts +14 -0
- package/dist/compiler/training/container/process.js +70 -0
- package/dist/compiler/training/container/security.d.ts +36 -0
- package/dist/compiler/training/container/security.js +58 -0
- package/dist/compiler/training/context.d.ts +7 -0
- package/dist/compiler/training/context.js +93 -0
- package/dist/compiler/training/contract.d.ts +142 -0
- package/dist/compiler/training/contract.js +34 -0
- package/dist/compiler/training/index.d.ts +4 -0
- package/dist/compiler/training/index.js +3 -0
- package/dist/compiler/training/preparation/assets/Dockerfile +98 -0
- package/dist/compiler/training/preparation/assets/package-lock.json +3787 -0
- package/dist/compiler/training/preparation/broker.d.ts +21 -0
- package/dist/compiler/training/preparation/broker.js +43 -0
- package/dist/compiler/training/preparation/contextModes.d.ts +12 -0
- package/dist/compiler/training/preparation/contextModes.js +38 -0
- package/dist/compiler/training/preparation/contract.d.ts +182 -0
- package/dist/compiler/training/preparation/contract.js +94 -0
- package/dist/compiler/training/preparation/copyAssets.d.ts +1 -0
- package/dist/compiler/training/preparation/copyAssets.js +8 -0
- package/dist/compiler/training/preparation/daimonParent.d.ts +42 -0
- package/dist/compiler/training/preparation/daimonParent.js +114 -0
- package/dist/compiler/training/preparation/files.d.ts +25 -0
- package/dist/compiler/training/preparation/files.js +85 -0
- package/dist/compiler/training/preparation/image.d.ts +28 -0
- package/dist/compiler/training/preparation/image.js +102 -0
- package/dist/compiler/training/preparation/index.d.ts +3 -0
- package/dist/compiler/training/preparation/index.js +2 -0
- package/dist/compiler/training/preparation/inputs.d.ts +23 -0
- package/dist/compiler/training/preparation/inputs.js +93 -0
- package/dist/compiler/training/preparation/prepare.d.ts +33 -0
- package/dist/compiler/training/preparation/prepare.js +186 -0
- package/dist/compiler/training/preparation/scratch.d.ts +19 -0
- package/dist/compiler/training/preparation/scratch.js +48 -0
- package/dist/compiler/training/repair/compatibility.d.ts +11 -0
- package/dist/compiler/training/repair/compatibility.js +34 -0
- package/dist/compiler/training/repair/contract.d.ts +506 -0
- package/dist/compiler/training/repair/contract.js +31 -0
- package/dist/compiler/training/repair/index.d.ts +3 -0
- package/dist/compiler/training/repair/index.js +3 -0
- package/dist/compiler/training/repair/prepare.d.ts +230 -0
- package/dist/compiler/training/repair/prepare.js +74 -0
- package/dist/compiler/training/repair/witness.d.ts +203 -0
- package/dist/compiler/training/repair/witness.js +42 -0
- package/dist/compiler/types.d.ts +2 -0
- package/dist/compiler/upProject.d.ts +26 -1
- package/dist/compiler/upProject.js +117 -178
- package/dist/compiler/upProjectHandoff.d.ts +62 -0
- package/dist/compiler/upProjectHandoff.js +204 -0
- package/dist/compiler/upReceipt.js +49 -4
- package/dist/compiler/updateProjectModels.js +1 -0
- package/dist/compiler/view/types.d.ts +1 -1
- package/dist/compiler/workspaceBundleArtifacts.d.ts +3 -0
- package/dist/compiler/workspaceBundleArtifacts.js +106 -0
- package/dist/compiler/workspaceResources.d.ts +4 -1
- package/dist/compiler/workspaceResources.js +12 -7
- package/dist/deployment/artifactsExportPlan.js +51 -1
- package/dist/deployment/canaryCutover.d.ts +42 -0
- package/dist/deployment/canaryCutover.js +140 -0
- package/dist/deployment/candidateDiagnostics.d.ts +15 -0
- package/dist/deployment/candidateDiagnostics.js +90 -0
- package/dist/deployment/dockerLogs.js +4 -1
- package/dist/deployment/dockerManager.js +9 -3
- package/dist/deployment/dockerProbeGateway.d.ts +17 -0
- package/dist/deployment/dockerProbeGateway.js +17 -2
- package/dist/deployment/downDeployment.d.ts +5 -0
- package/dist/deployment/downDeployment.js +109 -8
- package/dist/deployment/downReceiptTypes.d.ts +17 -2
- package/dist/deployment/downReceiptTypes.js +17 -2
- package/dist/deployment/index.d.ts +4 -0
- package/dist/deployment/index.js +4 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +66 -0
- package/dist/deployment/lifecycleCompletionContracts.js +34 -0
- package/dist/deployment/lifecycleCompletionPaths.d.ts +4 -1
- package/dist/deployment/lifecycleCompletionPaths.js +3 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +2 -0
- package/dist/deployment/lifecycleCompletionPublication.js +18 -4
- package/dist/deployment/lifecycleCompletionStore.d.ts +1 -1
- package/dist/deployment/lifecycleCompletionStore.js +7 -7
- package/dist/deployment/lifecycleUpRecords.d.ts +11 -0
- package/dist/deployment/lifecycleUpRecords.js +127 -0
- package/dist/deployment/native/AGENTS.md +11 -0
- package/dist/deployment/native/rename-noreplace-arm64 +0 -0
- package/dist/deployment/native/rename-noreplace-arm64.provenance.json +1 -0
- package/dist/deployment/native/rename-noreplace-x64 +0 -0
- package/dist/deployment/native/rename-noreplace-x64.provenance.json +1 -0
- package/dist/deployment/noReplaceActivation.d.ts +17 -0
- package/dist/deployment/noReplaceActivation.js +50 -0
- package/dist/deployment/organizationHandoffAuthorityFsBudget.d.ts +110 -0
- package/dist/deployment/organizationHandoffAuthorityFsBudget.js +156 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +82 -27
- package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
- package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +254 -108
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +14 -7
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +2 -2
- package/dist/deployment/organizationHandoffAuthorityTypes.js +2 -1
- package/dist/deployment/organizationReady.d.ts +2 -0
- package/dist/deployment/organizationReady.js +36 -4
- package/dist/deployment/productStateClone.d.ts +43 -0
- package/dist/deployment/productStateClone.js +319 -0
- package/dist/deployment/upLifecycleRecoveryState.d.ts +23 -0
- package/dist/deployment/upLifecycleRecoveryState.js +12 -0
- package/dist/deployment/upReceiptTypes.d.ts +32 -6
- package/dist/deployment/upReceiptTypes.js +29 -2
- package/dist/deployment/workspaceResourceMigration.d.ts +55 -0
- package/dist/deployment/workspaceResourceMigration.js +315 -0
- package/dist/dev/project.d.ts +7 -0
- package/dist/dev/project.js +9 -0
- package/dist/distribution/consumeImage.d.ts +2 -0
- package/dist/distribution/consumeImage.js +98 -73
- package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
- package/dist/distribution/consumeImageDaimonDocker.js +45 -0
- package/dist/distribution/consumeImageLifecycle.d.ts +17 -0
- package/dist/distribution/consumeImageLifecycle.js +231 -0
- package/dist/distribution/consumeImageSupport.d.ts +12 -0
- package/dist/distribution/consumeImageSupport.js +15 -0
- package/dist/distribution/distributionReportSchema.d.ts +11 -1
- package/dist/distribution/distributionReportSchema.js +15 -2
- package/dist/distribution/dockerRunner.d.ts +6 -1
- package/dist/distribution/dockerRunner.js +31 -4
- package/dist/distribution/imageRuntimeAuth.d.ts +9 -1
- package/dist/distribution/imageRuntimeAuth.js +70 -1
- package/dist/distribution/index.d.ts +1 -1
- package/dist/distribution/index.js +1 -1
- package/dist/distribution/preflight.js +5 -1
- package/dist/distribution/types.d.ts +14 -1
- package/dist/distribution/types.js +3 -0
- package/dist/evidenceExportHelper/boundedExecutor.d.ts +3 -0
- package/dist/evidenceExportHelper/boundedExecutor.js +33 -0
- package/dist/evidenceExportHelper/helperProgram.mjs +156 -0
- package/dist/evidenceExportHelper/index.d.ts +4 -0
- package/dist/evidenceExportHelper/index.js +4 -0
- package/dist/evidenceExportHelper/preparedAuthority.d.ts +64 -0
- package/dist/evidenceExportHelper/preparedAuthority.js +228 -0
- package/dist/evidenceExportHelper/preparedBuilder.d.ts +10 -0
- package/dist/evidenceExportHelper/preparedBuilder.js +183 -0
- package/dist/evidenceExportHelper/preparedBuilderTypes.d.ts +19 -0
- package/dist/evidenceExportHelper/preparedBuilderTypes.js +1 -0
- package/dist/evidenceExportHelper/recipe.d.ts +7 -0
- package/dist/evidenceExportHelper/recipe.js +83 -0
- package/dist/filesystem/io.d.ts +2 -0
- package/dist/filesystem/io.js +16 -1
- package/dist/manifest/executionSchemas.d.ts +27 -0
- package/dist/manifest/executionSchemas.js +21 -2
- package/dist/manifest/mcpSchemas.d.ts +1 -0
- package/dist/manifest/mcpSchemas.js +3 -0
- package/dist/manifest/renderSpawnfileNetworks.js +11 -0
- package/dist/manifest/renderSpawnfileWorkspace.js +5 -0
- package/dist/manifest/scheduleSchemas.d.ts +3 -1
- package/dist/manifest/scheduleSchemas.js +91 -5
- package/dist/manifest/schemas.d.ts +237 -12
- package/dist/manifest/schemas.js +5 -2
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +5 -1
- package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +1 -1
- package/dist/manifest/teamNetworkSchemas.d.ts +17 -3
- package/dist/manifest/teamNetworkSchemas.js +19 -1
- package/dist/manifest/teamNetworkServerSchemas.d.ts +8 -3
- package/dist/manifest/teamNetworkServerSchemas.js +18 -2
- package/dist/manifest/workspaceSchemas.d.ts +16 -0
- package/dist/manifest/workspaceSchemas.js +11 -0
- package/dist/report/types.d.ts +34 -4
- package/dist/runtime/common.d.ts +28 -1
- package/dist/runtime/common.js +33 -3
- package/dist/runtime/container.js +49 -33
- package/dist/runtime/daimon/adapter.d.ts +14 -0
- package/dist/runtime/daimon/adapter.js +243 -0
- package/dist/runtime/daimon/attention.d.ts +8 -0
- package/dist/runtime/daimon/attention.js +32 -0
- package/dist/runtime/daimon/config.d.ts +25 -0
- package/dist/runtime/daimon/config.js +272 -0
- package/dist/runtime/daimon/contractManifest.d.ts +295 -0
- package/dist/runtime/daimon/contractManifest.js +319 -0
- package/dist/runtime/daimon/grokModel.d.ts +19 -0
- package/dist/runtime/daimon/grokModel.js +33 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +26 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.js +36 -0
- package/dist/runtime/daimon/grokWorkerContract.d.ts +22 -0
- package/dist/runtime/daimon/grokWorkerContract.js +48 -0
- package/dist/runtime/daimon/memory.d.ts +57 -0
- package/dist/runtime/daimon/memory.js +125 -0
- package/dist/runtime/daimon/runAuth.d.ts +51 -0
- package/dist/runtime/daimon/runAuth.js +279 -0
- package/dist/runtime/daimon/runtimeIdentity.d.ts +22 -0
- package/dist/runtime/daimon/runtimeIdentity.js +22 -0
- package/dist/runtime/daimon/scheduleAuthority.d.ts +3 -0
- package/dist/runtime/daimon/scheduleAuthority.js +17 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/install.d.ts +3 -0
- package/dist/runtime/install.js +3 -0
- package/dist/runtime/localDaimonAuthority.d.ts +11 -0
- package/dist/runtime/localDaimonAuthority.js +77 -0
- package/dist/runtime/mnemeMcp.d.ts +13 -0
- package/dist/runtime/mnemeMcp.js +26 -0
- package/dist/runtime/openclaw/adapter.js +2 -2
- package/dist/runtime/pi/adapter.d.ts +0 -1
- package/dist/runtime/pi/adapter.js +2 -6
- package/dist/runtime/pi/appCliSource.js +1 -1
- package/dist/runtime/pi/appScheduleSource.js +6 -2
- package/dist/runtime/pi/appTemplateTypes.d.ts +1 -1
- package/dist/runtime/picoclaw/adapter.js +2 -2
- package/dist/runtime/registry.d.ts +3 -0
- package/dist/runtime/registry.js +19 -2
- package/dist/runtime/scheduleUtils.d.ts +1 -0
- package/dist/runtime/scheduleUtils.js +5 -1
- package/dist/runtime/types.d.ts +25 -0
- package/dist/runtime/usageLedger.d.ts +158 -0
- package/dist/runtime/usageLedger.js +269 -0
- package/dist/runtime/usageLedgerRead.d.ts +48 -0
- package/dist/runtime/usageLedgerRead.js +102 -0
- package/dist/runtime/usageRequestLedger.d.ts +42 -0
- package/dist/runtime/usageRequestLedger.js +72 -0
- package/dist/shared/daimonCodexDocker.d.ts +32 -0
- package/dist/shared/daimonCodexDocker.js +120 -0
- package/dist/shared/daimonGrokSeccompProfile.d.ts +10 -0
- package/dist/shared/daimonGrokSeccompProfile.js +11 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.js +2 -0
- package/dist/shared/types.d.ts +1 -1
- package/dist/shared/volumeNames.d.ts +6 -0
- package/dist/shared/volumeNames.js +14 -0
- package/dist/target/dockerArtifactsProvider.js +34 -7
- package/dist/target/dockerBaseImage.d.ts +2 -0
- package/dist/target/dockerBaseImage.js +11 -0
- package/dist/target/dockerCommandExecutor.d.ts +11 -0
- package/dist/target/dockerCommandExecutor.js +53 -2
- package/dist/target/dockerCommandExecutorCore.d.ts +2 -1
- package/dist/target/dockerCommandExecutorCore.js +4 -2
- package/dist/target/dockerPublicArtifactSnapshot.d.ts +3 -3
- package/dist/target/dockerPublicArtifactSnapshot.js +17 -33
- package/dist/target/dockerTarget.d.ts +1 -0
- package/dist/target/dockerTargetBinding.d.ts +1 -2
- package/dist/target/dockerTargetBinding.js +2 -3
- package/dist/target/dockerTargetExecFile.d.ts +19 -0
- package/dist/target/dockerTargetExecFile.js +194 -0
- package/dist/target/dockerWorldServiceProvider.d.ts +4 -0
- package/dist/target/dockerWorldServiceProvider.js +13 -1
- package/dist/target/evidenceExport.d.ts +3 -1
- package/dist/target/evidenceExport.js +12 -3
- package/dist/target/evidenceExportOperationsTestKit.js +3 -3
- package/dist/target/evidenceExportProvider.d.ts +2 -0
- package/dist/target/evidenceExportProvider.js +15 -5
- package/dist/target/publicArtifactSnapshot.d.ts +31 -0
- package/dist/target/publicArtifactSnapshot.js +37 -3
- package/examples/README.md +45 -0
- package/examples/agent-with-subagents/AGENTS.md +3 -0
- package/examples/agent-with-subagents/Spawnfile +30 -0
- package/examples/agent-with-subagents/subagents/critic/AGENTS.md +3 -0
- package/examples/agent-with-subagents/subagents/critic/Spawnfile +15 -0
- package/examples/agent-with-subagents/subagents/researcher/AGENTS.md +3 -0
- package/examples/agent-with-subagents/subagents/researcher/Spawnfile +17 -0
- package/examples/daimon-org/Spawnfile +68 -0
- package/examples/daimon-org/TEAM.md +4 -0
- package/examples/daimon-org/agents/mapper/AGENTS.md +4 -0
- package/examples/daimon-org/agents/mapper/Spawnfile +37 -0
- package/examples/daimon-org/shared/skills/file-note/SKILL.md +9 -0
- package/examples/daimon-org/teams/review/Spawnfile +53 -0
- package/examples/daimon-org/teams/review/agents/reviewer/AGENTS.md +4 -0
- package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +37 -0
- package/examples/daimon-public-host/AGENTS.md +3 -0
- package/examples/daimon-public-host/Spawnfile +21 -0
- package/examples/distribution-org/Spawnfile +43 -0
- package/examples/distribution-org/TEAM.md +4 -0
- package/examples/distribution-org/agents/coordinator/AGENTS.md +1 -0
- package/examples/distribution-org/agents/coordinator/Spawnfile +20 -0
- package/examples/distribution-org/agents/researcher/AGENTS.md +1 -0
- package/examples/distribution-org/agents/researcher/Spawnfile +20 -0
- package/examples/jungian-daimon-org/Spawnfile +41 -0
- package/examples/jungian-daimon-org/TEAM.md +21 -0
- package/examples/jungian-daimon-org/teams/luna/Spawnfile +47 -0
- package/examples/jungian-daimon-org/teams/luna/TEAM.md +4 -0
- package/examples/jungian-daimon-org/teams/luna/agents/animus/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/luna/agents/representative/AGENTS.md +21 -0
- package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +30 -0
- package/examples/jungian-daimon-org/teams/luna/agents/shadow/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/Spawnfile +47 -0
- package/examples/jungian-daimon-org/teams/selene/TEAM.md +4 -0
- package/examples/jungian-daimon-org/teams/selene/agents/animus/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/agents/representative/AGENTS.md +19 -0
- package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/agents/shadow/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +30 -0
- package/examples/mixed-runtime-org/Spawnfile +71 -0
- package/examples/mixed-runtime-org/TEAM.md +8 -0
- package/examples/mixed-runtime-org/agents/analyst/AGENTS.md +8 -0
- package/examples/mixed-runtime-org/agents/analyst/Spawnfile +27 -0
- package/examples/mixed-runtime-org/agents/conductor/AGENTS.md +8 -0
- package/examples/mixed-runtime-org/agents/conductor/Spawnfile +27 -0
- package/examples/mixed-runtime-org/agents/localist/AGENTS.md +7 -0
- package/examples/mixed-runtime-org/agents/localist/Spawnfile +50 -0
- package/examples/moltnet-team-chat/Spawnfile +43 -0
- package/examples/moltnet-team-chat/TEAM.md +5 -0
- package/examples/moltnet-team-chat/agents/coordinator/AGENTS.md +9 -0
- package/examples/moltnet-team-chat/agents/coordinator/Spawnfile +26 -0
- package/examples/moltnet-team-chat/teams/analysis/Spawnfile +23 -0
- package/examples/moltnet-team-chat/teams/analysis/TEAM.md +3 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/observer/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/observer/Spawnfile +19 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/representative/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/representative/Spawnfile +19 -0
- package/examples/moltnet-team-chat/teams/field/Spawnfile +41 -0
- package/examples/moltnet-team-chat/teams/field/TEAM.md +3 -0
- package/examples/moltnet-team-chat/teams/field/agents/observer/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/field/agents/observer/Spawnfile +26 -0
- package/examples/moltnet-team-chat/teams/field/agents/representative/AGENTS.md +11 -0
- package/examples/moltnet-team-chat/teams/field/agents/representative/Spawnfile +26 -0
- package/examples/single-agent/AGENTS.md +3 -0
- package/examples/single-agent/HEARTBEAT.md +3 -0
- package/examples/single-agent/IDENTITY.md +3 -0
- package/examples/single-agent/MEMORY.md +3 -0
- package/examples/single-agent/SOUL.md +3 -0
- package/examples/single-agent/Spawnfile +41 -0
- package/examples/single-agent/skills/web_search/SKILL.md +6 -0
- package/moltnet-releases.json +5 -4
- package/package.json +36 -9
- package/runtimes.yaml +5 -2
- package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +0 -13
- package/dist/cli/targetWorldClockCrossProcess.test-helper.js +0 -109
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +0 -8
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +0 -60
- package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +0 -8
- package/dist/deployment/simfileFixtureBoundary.test-helper.js +0 -103
- package/dist/ownership/simfileRunOperatorInputs.d.ts +0 -103
- package/dist/ownership/simfileRunOperatorInputs.js +0 -139
- package/dist/target/cleanupRunDocker.test-helper.d.ts +0 -67
- package/dist/target/cleanupRunDocker.test-helper.js +0 -238
|
@@ -24,7 +24,7 @@ const createAttachmentConfig = (node, artifacts, attachment, agentSlug) => {
|
|
|
24
24
|
throw new SpawnfileError("compile_error", `Moltnet client config requires a resolved member id for ${node.name}`);
|
|
25
25
|
}
|
|
26
26
|
const serverPlan = findServerPlan(artifacts, attachment);
|
|
27
|
-
const auth = resolveMoltnetClientAuth(serverPlan.server, attachment.network, attachment.memberId, agentSlug, attachment.auth?.tokenId);
|
|
27
|
+
const auth = resolveMoltnetClientAuth(serverPlan.server, attachment.network, attachment.memberId, agentSlug, attachment.auth?.tokenId, node.runtime.name);
|
|
28
28
|
return {
|
|
29
29
|
agent_name: node.name,
|
|
30
30
|
auth: {
|
|
@@ -13,6 +13,7 @@ export interface MoltnetClientAuthPlan {
|
|
|
13
13
|
tokenPath?: string;
|
|
14
14
|
}
|
|
15
15
|
export interface MoltnetNativeRoomConfig {
|
|
16
|
+
federation?: "all" | "none" | string[];
|
|
16
17
|
id: string;
|
|
17
18
|
members: string[];
|
|
18
19
|
name?: string;
|
|
@@ -33,6 +34,7 @@ type ManagedMoltnetStore = Extract<TeamNetworkServer, {
|
|
|
33
34
|
export declare const createMoltnetOpenTokenDirectory: (agentSlug: string) => string;
|
|
34
35
|
export declare const createMoltnetOpenTokenPath: (networkId: string, memberId: string, agentSlug?: string) => string;
|
|
35
36
|
export declare const createMoltnetNetworkStateDirectory: (networkId: string) => string;
|
|
37
|
+
export declare const createMoltnetDaimonReceiptStorePath: (networkId: string, memberId: string) => string;
|
|
36
38
|
export declare const createDefaultMoltnetStorePath: (networkId: string, kind: "json" | "sqlite", mountPath?: string) => string;
|
|
37
39
|
export declare const resolveMoltnetStorePath: (networkId: string, store: ManagedMoltnetStore) => string | null;
|
|
38
40
|
export declare const resolveMoltnetStorePersistenceMountPath: (networkId: string, store: ManagedMoltnetStore) => string | null;
|
|
@@ -55,7 +57,7 @@ export declare const renderMoltnetListenAddr: (server: Extract<TeamNetworkServer
|
|
|
55
57
|
mode: "managed";
|
|
56
58
|
}>) => string;
|
|
57
59
|
export declare const resolveMoltnetBaseUrl: (server: TeamNetworkServer) => string;
|
|
58
|
-
export declare const resolveMoltnetClientAuth: (server: TeamNetworkServer, networkId: string, memberId: string, agentSlug?: string, attachmentTokenId?: string) => MoltnetClientAuthPlan;
|
|
60
|
+
export declare const resolveMoltnetClientAuth: (server: TeamNetworkServer, networkId: string, memberId: string, agentSlug?: string, attachmentTokenId?: string, runtimeName?: string) => MoltnetClientAuthPlan;
|
|
59
61
|
export declare const createMoltnetNativeServerConfig: ({ networkId, networkName, rooms, server }: MoltnetNativeServerConfigInput) => {
|
|
60
62
|
config: Record<string, unknown>;
|
|
61
63
|
secretPatches: MoltnetSecretPatch[];
|
|
@@ -5,6 +5,14 @@ const normalizePosixPath = (value) => value.replace(/\/+/g, "/").replace(/\/+$/u
|
|
|
5
5
|
export const createMoltnetOpenTokenDirectory = (agentSlug) => `/var/lib/spawnfile/agents/${pathSafeSegment(agentSlug)}/state/moltnet`;
|
|
6
6
|
export const createMoltnetOpenTokenPath = (networkId, memberId, agentSlug = memberId) => `${createMoltnetOpenTokenDirectory(agentSlug)}/${pathSafeSegment(networkId)}-${pathSafeSegment(memberId)}.token`;
|
|
7
7
|
export const createMoltnetNetworkStateDirectory = (networkId) => `/var/lib/spawnfile/moltnet/networks/${pathSafeSegment(networkId)}`;
|
|
8
|
+
export const createMoltnetDaimonReceiptStorePath = (networkId, memberId) => {
|
|
9
|
+
const network = pathSafeSegment(networkId);
|
|
10
|
+
const member = pathSafeSegment(memberId);
|
|
11
|
+
if (network !== networkId || member !== memberId || !/^[A-Za-z0-9][A-Za-z0-9_.-]{0,254}$/u.test(memberId)) {
|
|
12
|
+
throw new SpawnfileError("validation_error", "invalid Daimon receipt-store path segment");
|
|
13
|
+
}
|
|
14
|
+
return `${createMoltnetNetworkStateDirectory(networkId)}/daimon-receipts/${member}.json`;
|
|
15
|
+
};
|
|
8
16
|
export const createDefaultMoltnetStorePath = (networkId, kind, mountPath) => {
|
|
9
17
|
const directory = mountPath
|
|
10
18
|
? normalizePosixPath(mountPath)
|
|
@@ -64,7 +72,7 @@ export const resolveMoltnetBaseUrl = (server) => {
|
|
|
64
72
|
: bind;
|
|
65
73
|
return `http://${host}:${server.listen.port}`;
|
|
66
74
|
};
|
|
67
|
-
export const resolveMoltnetClientAuth = (server, networkId, memberId, agentSlug, attachmentTokenId) => {
|
|
75
|
+
export const resolveMoltnetClientAuth = (server, networkId, memberId, agentSlug, attachmentTokenId, runtimeName) => {
|
|
68
76
|
if (server.auth.mode === "none") {
|
|
69
77
|
if (attachmentTokenId !== undefined) {
|
|
70
78
|
throw new SpawnfileError("validation_error", `Moltnet attachment ${networkId}/${memberId} cannot select token ${attachmentTokenId} when auth.mode is none`);
|
|
@@ -83,10 +91,12 @@ export const resolveMoltnetClientAuth = (server, networkId, memberId, agentSlug,
|
|
|
83
91
|
if (tokens.length !== 1) {
|
|
84
92
|
throw new SpawnfileError("validation_error", `invalid Moltnet actor token ${attachmentTokenId} for ${memberId}: token id must exist exactly once`);
|
|
85
93
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
94
|
+
const requiredScopes = runtimeName === "daimon"
|
|
95
|
+
? ["attach", "observe", "write"]
|
|
96
|
+
: ["attach", "write"];
|
|
97
|
+
if (token.scopes.length !== requiredScopes.length
|
|
98
|
+
|| token.scopes.some((scope, index) => scope !== requiredScopes[index])) {
|
|
99
|
+
throw new SpawnfileError("validation_error", `invalid Moltnet actor token ${attachmentTokenId} for ${memberId}: token must include ${requiredScopes.join(", ")} scopes exactly`);
|
|
90
100
|
}
|
|
91
101
|
if (token.agents?.length !== 1 || token.agents[0] !== memberId) {
|
|
92
102
|
throw new SpawnfileError("validation_error", `invalid Moltnet actor token ${attachmentTokenId} for ${memberId}: token must declare exactly agents: [${memberId}]`);
|
|
@@ -174,11 +184,20 @@ export const createMoltnetNativeServerConfig = ({ networkId, networkName, rooms,
|
|
|
174
184
|
envName: pairing.token_secret,
|
|
175
185
|
jsonPath: `pairings.${index}.token`
|
|
176
186
|
});
|
|
187
|
+
if (pairing.relay) {
|
|
188
|
+
secretPatches.push({
|
|
189
|
+
envName: pairing.relay.token_secret,
|
|
190
|
+
jsonPath: `pairings.${index}.relay.token`
|
|
191
|
+
});
|
|
192
|
+
}
|
|
177
193
|
return {
|
|
178
194
|
id: pairing.id,
|
|
179
195
|
remote_network_id: pairing.remote_network_id,
|
|
180
196
|
remote_network_name: pairing.remote_network_name,
|
|
181
|
-
remote_base_url: pairing.remote_base_url,
|
|
197
|
+
...(pairing.remote_base_url ? { remote_base_url: pairing.remote_base_url } : {}),
|
|
198
|
+
...(pairing.relay
|
|
199
|
+
? { relay: { room: pairing.relay.room, token: "", url: pairing.relay.url } }
|
|
200
|
+
: {}),
|
|
182
201
|
token: ""
|
|
183
202
|
};
|
|
184
203
|
});
|
|
@@ -214,6 +233,11 @@ export const createMoltnetNativeServerConfig = ({ networkId, networkName, rooms,
|
|
|
214
233
|
},
|
|
215
234
|
storage: storageConfigFor(networkId, server.store),
|
|
216
235
|
rooms: rooms.map((room) => ({
|
|
236
|
+
...(room.federation !== undefined
|
|
237
|
+
? { federation: room.federation }
|
|
238
|
+
: pairings.length > 0
|
|
239
|
+
? { federation: "none" }
|
|
240
|
+
: {}),
|
|
217
241
|
id: room.id,
|
|
218
242
|
...(room.name ? { name: room.name } : {}),
|
|
219
243
|
...(room.visibility ? { visibility: room.visibility } : {}),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveMoltnetClientAuth } from "./moltnetConfigLowering.js";
|
|
2
2
|
import { resolveRuntimeConfig } from "./moltnetRuntimeConfig.js";
|
|
3
3
|
export const createMoltnetNodeConfigContent = ({ agentNode, attachment, networkServer, nodeSlug, plan, serverPlan }) => {
|
|
4
|
-
const clientAuth = resolveMoltnetClientAuth(networkServer, attachment.network, attachment.memberId, nodeSlug, attachment.auth?.tokenId);
|
|
4
|
+
const clientAuth = resolveMoltnetClientAuth(networkServer, attachment.network, attachment.memberId, nodeSlug, attachment.auth?.tokenId, agentNode.runtime.name);
|
|
5
5
|
const usesPerAttachmentOpenToken = clientAuth.mode === "open" &&
|
|
6
6
|
clientAuth.staticToken !== true &&
|
|
7
7
|
Boolean(clientAuth.tokenEnv || clientAuth.tokenPath);
|
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
export declare const MOLTNET_RELEASE_AUTHORITY_VERSION: "spawnfile.moltnet-release-authority.v1";
|
|
2
2
|
export type MoltnetTargetArchitecture = "amd64" | "arm64";
|
|
3
|
+
/**
|
|
4
|
+
* The bridge capabilities a Moltnet build can advertise.
|
|
5
|
+
*
|
|
6
|
+
* CANONICAL ORDERING: `daimon-bridge` before `pi-bridge`. Several places
|
|
7
|
+
* compare this list by exact equality (`upReceipt.ts`, `localMoltnetAuthority.ts`)
|
|
8
|
+
* rather than as a set, so a differently ordered but equivalent list is
|
|
9
|
+
* rejected as a different release. The local builder
|
|
10
|
+
* (`scripts/build-local-moltnet.ts`) already writes this order; every producer
|
|
11
|
+
* must match it, and `moltnetReleaseAuthority.test.ts` asserts it.
|
|
12
|
+
*
|
|
13
|
+
* This is a UNION, never a replacement: an older pi-only release must keep
|
|
14
|
+
* pinning cleanly after a dual-capability one is published.
|
|
15
|
+
*/
|
|
16
|
+
export declare const MOLTNET_PI_ONLY_CAPABILITIES: readonly ["pi-bridge"];
|
|
17
|
+
export declare const MOLTNET_DUAL_BRIDGE_CAPABILITIES: readonly ["daimon-bridge", "pi-bridge"];
|
|
18
|
+
export type MoltnetBridgeCapabilities = typeof MOLTNET_PI_ONLY_CAPABILITIES | typeof MOLTNET_DUAL_BRIDGE_CAPABILITIES;
|
|
19
|
+
/**
|
|
20
|
+
* The single runtime check for an advertised capability list. Every producer
|
|
21
|
+
* and parser funnels through this so the type and the runtime check can never
|
|
22
|
+
* drift apart — widening one without the other is precisely how a release
|
|
23
|
+
* becomes typecheck-green and runtime-rejected.
|
|
24
|
+
*/
|
|
25
|
+
export declare const parseMoltnetBridgeCapabilities: (value: unknown) => MoltnetBridgeCapabilities | null;
|
|
3
26
|
export interface TrustedMoltnetReleaseAsset {
|
|
4
27
|
readonly architecture: MoltnetTargetArchitecture;
|
|
5
28
|
readonly asset: string;
|
|
@@ -9,7 +32,7 @@ export interface TrustedMoltnetReleaseAuthority {
|
|
|
9
32
|
readonly version: typeof MOLTNET_RELEASE_AUTHORITY_VERSION;
|
|
10
33
|
readonly release_version: string;
|
|
11
34
|
readonly source_revision: string;
|
|
12
|
-
readonly capabilities:
|
|
35
|
+
readonly capabilities: MoltnetBridgeCapabilities;
|
|
13
36
|
readonly assets: readonly TrustedMoltnetReleaseAsset[];
|
|
14
37
|
}
|
|
15
38
|
export declare const parseTrustedMoltnetReleaseAuthority: (raw: unknown) => TrustedMoltnetReleaseAuthority;
|
|
@@ -1,6 +1,37 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { SpawnfileError } from "../shared/index.js";
|
|
3
3
|
export const MOLTNET_RELEASE_AUTHORITY_VERSION = "spawnfile.moltnet-release-authority.v1";
|
|
4
|
+
/**
|
|
5
|
+
* The bridge capabilities a Moltnet build can advertise.
|
|
6
|
+
*
|
|
7
|
+
* CANONICAL ORDERING: `daimon-bridge` before `pi-bridge`. Several places
|
|
8
|
+
* compare this list by exact equality (`upReceipt.ts`, `localMoltnetAuthority.ts`)
|
|
9
|
+
* rather than as a set, so a differently ordered but equivalent list is
|
|
10
|
+
* rejected as a different release. The local builder
|
|
11
|
+
* (`scripts/build-local-moltnet.ts`) already writes this order; every producer
|
|
12
|
+
* must match it, and `moltnetReleaseAuthority.test.ts` asserts it.
|
|
13
|
+
*
|
|
14
|
+
* This is a UNION, never a replacement: an older pi-only release must keep
|
|
15
|
+
* pinning cleanly after a dual-capability one is published.
|
|
16
|
+
*/
|
|
17
|
+
export const MOLTNET_PI_ONLY_CAPABILITIES = ["pi-bridge"];
|
|
18
|
+
export const MOLTNET_DUAL_BRIDGE_CAPABILITIES = ["daimon-bridge", "pi-bridge"];
|
|
19
|
+
/**
|
|
20
|
+
* The single runtime check for an advertised capability list. Every producer
|
|
21
|
+
* and parser funnels through this so the type and the runtime check can never
|
|
22
|
+
* drift apart — widening one without the other is precisely how a release
|
|
23
|
+
* becomes typecheck-green and runtime-rejected.
|
|
24
|
+
*/
|
|
25
|
+
export const parseMoltnetBridgeCapabilities = (value) => {
|
|
26
|
+
if (!Array.isArray(value))
|
|
27
|
+
return null;
|
|
28
|
+
const joined = value.join("\0");
|
|
29
|
+
if (joined === MOLTNET_PI_ONLY_CAPABILITIES.join("\0"))
|
|
30
|
+
return MOLTNET_PI_ONLY_CAPABILITIES;
|
|
31
|
+
if (joined === MOLTNET_DUAL_BRIDGE_CAPABILITIES.join("\0"))
|
|
32
|
+
return MOLTNET_DUAL_BRIDGE_CAPABILITIES;
|
|
33
|
+
return null;
|
|
34
|
+
};
|
|
4
35
|
const SHA256 = /^sha256:[a-f0-9]{64}$/u;
|
|
5
36
|
const REVISION = /^[a-f0-9]{40}$/u;
|
|
6
37
|
const VERSION = /^v?\d+\.\d+\.\d+(?:-\d+-g[a-f0-9]{7,40})?$/u;
|
|
@@ -20,9 +51,7 @@ export const parseTrustedMoltnetReleaseAuthority = (raw) => {
|
|
|
20
51
|
|| !VERSION.test(value.release_version)
|
|
21
52
|
|| typeof value.source_revision !== "string"
|
|
22
53
|
|| !REVISION.test(value.source_revision)
|
|
23
|
-
||
|
|
24
|
-
|| value.capabilities.length !== 1
|
|
25
|
-
|| value.capabilities[0] !== "pi-bridge"
|
|
54
|
+
|| parseMoltnetBridgeCapabilities(value.capabilities) === null
|
|
26
55
|
|| !Array.isArray(value.assets)
|
|
27
56
|
|| value.assets.length !== 2)
|
|
28
57
|
return fail();
|
|
@@ -52,7 +81,7 @@ export const parseTrustedMoltnetReleaseAuthority = (raw) => {
|
|
|
52
81
|
version: MOLTNET_RELEASE_AUTHORITY_VERSION,
|
|
53
82
|
release_version: value.release_version,
|
|
54
83
|
source_revision: value.source_revision,
|
|
55
|
-
capabilities:
|
|
84
|
+
capabilities: parseMoltnetBridgeCapabilities(value.capabilities),
|
|
56
85
|
assets: Object.freeze(assets)
|
|
57
86
|
});
|
|
58
87
|
};
|
|
@@ -14,4 +14,4 @@ export interface TeamRepresentativeResolution {
|
|
|
14
14
|
sourceTeamSource: string;
|
|
15
15
|
}
|
|
16
16
|
export declare const resolveTeamRepresentatives: (plan: CompilePlan, teamNode: ResolvedTeamNode, seen?: string[]) => TeamRepresentativeResolution[];
|
|
17
|
-
export declare const resolveMoltnetAttachments: (attachments: ResolvedMoltnetAttachment[] | undefined, context: MoltnetTeamContext | undefined, nodeName: string) => ResolvedMoltnetAttachment[] | undefined;
|
|
17
|
+
export declare const resolveMoltnetAttachments: (attachments: ResolvedMoltnetAttachment[] | undefined, context: MoltnetTeamContext | undefined, nodeName: string, runtimeName?: string) => ResolvedMoltnetAttachment[] | undefined;
|
|
@@ -71,7 +71,7 @@ export const resolveTeamRepresentatives = (plan, teamNode, seen = []) => {
|
|
|
71
71
|
}
|
|
72
72
|
return representatives;
|
|
73
73
|
};
|
|
74
|
-
export const resolveMoltnetAttachments = (attachments, context, nodeName) => {
|
|
74
|
+
export const resolveMoltnetAttachments = (attachments, context, nodeName, runtimeName) => {
|
|
75
75
|
if (!attachments || attachments.length === 0) {
|
|
76
76
|
return undefined;
|
|
77
77
|
}
|
|
@@ -84,7 +84,7 @@ export const resolveMoltnetAttachments = (attachments, context, nodeName) => {
|
|
|
84
84
|
throw new SpawnfileError("validation_error", `Agent ${nodeName} references unknown Moltnet network ${attachment.network} on team ${context.teamName}`);
|
|
85
85
|
}
|
|
86
86
|
if (network.server) {
|
|
87
|
-
resolveMoltnetClientAuth(network.server, network.id, context.memberId, undefined, attachment.auth?.tokenId);
|
|
87
|
+
resolveMoltnetClientAuth(network.server, network.id, context.memberId, undefined, attachment.auth?.tokenId, runtimeName);
|
|
88
88
|
}
|
|
89
89
|
for (const roomId of Object.keys(attachment.rooms ?? {})) {
|
|
90
90
|
const room = network.rooms.find((entry) => entry.id === roomId);
|
|
@@ -26,15 +26,9 @@ const validateGlobalMemberIds = (plan) => {
|
|
|
26
26
|
context
|
|
27
27
|
]));
|
|
28
28
|
for (const context of uniqueContexts.values()) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const matches = plan.organizationIdentity.agentMembers.filter((member) => member.memberId === canonicalMemberId);
|
|
33
|
-
if (!canonicalMemberId || matches.length !== 1) {
|
|
34
|
-
throw new SpawnfileError("validation_error", `Unable to resolve exactly one canonical Moltnet member id for ${context.agentSource}`);
|
|
35
|
-
}
|
|
36
|
-
memberId = canonicalMemberId;
|
|
37
|
-
}
|
|
29
|
+
const memberId = (plan.organizationIdentity?.externalParticipants.length ?? 0) > 0
|
|
30
|
+
? resolveCanonicalAgentMemberId(plan, context.agentSource) ?? context.memberId
|
|
31
|
+
: context.memberId;
|
|
38
32
|
const previous = seen.get(memberId);
|
|
39
33
|
const label = `${context.teamName} (${context.teamSource}) member ${context.memberId}`;
|
|
40
34
|
if (previous &&
|
|
@@ -181,9 +175,7 @@ export const resolvePlanMoltnetAttachments = (plan) => {
|
|
|
181
175
|
for (const synthesized of synthesizedAttachments) {
|
|
182
176
|
const { agentSource, attachment, directTeamSource } = synthesized;
|
|
183
177
|
const representativeContext = (plan.memberships ?? []).find((context) => context.agentSource === agentSource &&
|
|
184
|
-
|
|
185
|
-
? context.teamSource === directTeamSource
|
|
186
|
-
: context.memberId === attachment.memberId));
|
|
178
|
+
context.teamSource === directTeamSource);
|
|
187
179
|
if (!representativeContext) {
|
|
188
180
|
throw new SpawnfileError("validation_error", `Unable to find direct member context for synthesized Moltnet member ${attachment.memberId ?? "unknown"}`);
|
|
189
181
|
}
|
|
@@ -207,14 +199,16 @@ export const resolvePlanMoltnetAttachments = (plan) => {
|
|
|
207
199
|
continue;
|
|
208
200
|
}
|
|
209
201
|
const teamNode = findTeamBySource(plan, context.teamSource);
|
|
210
|
-
const
|
|
202
|
+
const resolvedMemberId = (plan.organizationIdentity?.externalParticipants.length ?? 0) > 0
|
|
203
|
+
? resolveCanonicalAgentMemberId(plan, context.agentSource) ?? context.memberId
|
|
204
|
+
: context.memberId;
|
|
211
205
|
const resolved = resolveMoltnetAttachments(declaredAttachments, {
|
|
212
206
|
memberId: context.memberId,
|
|
213
207
|
networks: teamNode.networks ?? [],
|
|
214
|
-
resolvedMemberId
|
|
208
|
+
resolvedMemberId,
|
|
215
209
|
teamName: context.teamName,
|
|
216
210
|
teamSource: context.teamSource
|
|
217
|
-
}, agentNode.name);
|
|
211
|
+
}, agentNode.name, agentNode.runtime.name);
|
|
218
212
|
resolvedAttachments.push(...(resolved ?? []));
|
|
219
213
|
}
|
|
220
214
|
resolvedAttachments.push(...(synthesizedByAgent.get(agentNode.source) ?? []));
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SpawnfileError } from "../shared/index.js";
|
|
2
2
|
import { resolveTeamRepresentatives } from "./moltnetRepresentativeResolution.js";
|
|
3
3
|
import { resolveCanonicalAgentMemberId } from "./organizationIdentity.js";
|
|
4
|
+
import { isDeclaredPairedRemoteRoomMember } from "../manifest/index.js";
|
|
4
5
|
import { isAttachedExternalRoomMember } from "./buildCompilePlanTeams.js";
|
|
5
6
|
const hasOwn = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
6
7
|
const findAgentBySource = (plan, source) => {
|
|
@@ -23,13 +24,15 @@ const clonePolicy = (policy) => ({
|
|
|
23
24
|
const defaultNestedRepresentativePolicy = () => ({
|
|
24
25
|
wake: "mentions"
|
|
25
26
|
});
|
|
27
|
+
// Ordinary Moltnet uses direct member slots. B31's externally authorized
|
|
28
|
+
// organization uses its canonical nested principal identifiers instead.
|
|
26
29
|
const resolveConcreteMemberId = (plan, agentSource, authoredMemberId) => {
|
|
27
|
-
if (
|
|
30
|
+
if ((plan.organizationIdentity?.externalParticipants.length ?? 0) === 0) {
|
|
28
31
|
return authoredMemberId;
|
|
32
|
+
}
|
|
29
33
|
const canonicalMemberId = resolveCanonicalAgentMemberId(plan, agentSource);
|
|
30
|
-
if (!canonicalMemberId
|
|
31
|
-
|
|
32
|
-
throw new SpawnfileError("validation_error", `Unable to resolve exactly one canonical Moltnet member id for ${agentSource}`);
|
|
34
|
+
if (!canonicalMemberId) {
|
|
35
|
+
throw new SpawnfileError("validation_error", `Unable to resolve canonical Moltnet member id for ${agentSource}`);
|
|
33
36
|
}
|
|
34
37
|
return canonicalMemberId;
|
|
35
38
|
};
|
|
@@ -62,7 +65,11 @@ const compareRoomMemberships = (left, right) => [
|
|
|
62
65
|
left.agentSource.localeCompare(right.agentSource)
|
|
63
66
|
].find((result) => result !== 0) ?? 0;
|
|
64
67
|
export const listConcreteMoltnetRoomMemberIds = (plan, teamNode, networkId, room, memberships = plan.moltnetRoomMemberships) => {
|
|
68
|
+
const network = teamNode.networks?.find((candidate) => candidate.id === networkId);
|
|
65
69
|
const externalMembers = room.members.filter((memberId) => isAttachedExternalRoomMember(teamNode, networkId, memberId));
|
|
70
|
+
const remoteMembers = network
|
|
71
|
+
? room.members.filter((memberId) => isDeclaredPairedRemoteRoomMember(network, room, memberId))
|
|
72
|
+
: [];
|
|
66
73
|
if (memberships) {
|
|
67
74
|
return [
|
|
68
75
|
...new Set([
|
|
@@ -71,7 +78,8 @@ export const listConcreteMoltnetRoomMemberIds = (plan, teamNode, networkId, room
|
|
|
71
78
|
&& membership.networkId === networkId
|
|
72
79
|
&& membership.roomId === room.id)
|
|
73
80
|
.map((membership) => membership.concreteMemberId),
|
|
74
|
-
...externalMembers
|
|
81
|
+
...externalMembers,
|
|
82
|
+
...remoteMembers
|
|
75
83
|
])
|
|
76
84
|
].sort();
|
|
77
85
|
}
|
|
@@ -83,6 +91,10 @@ export const listConcreteMoltnetRoomMemberIds = (plan, teamNode, networkId, room
|
|
|
83
91
|
concreteMembers.push(declaredSlot);
|
|
84
92
|
continue;
|
|
85
93
|
}
|
|
94
|
+
if (network && isDeclaredPairedRemoteRoomMember(network, room, declaredSlot)) {
|
|
95
|
+
concreteMembers.push(declaredSlot);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
86
98
|
throw new SpawnfileError("validation_error", `Team ${teamNode.name} Moltnet room ${room.id} references unknown member ${declaredSlot}`);
|
|
87
99
|
}
|
|
88
100
|
if (member.kind === "agent") {
|
|
@@ -113,6 +125,9 @@ export const resolveMoltnetRoomMemberships = (plan) => {
|
|
|
113
125
|
if (isAttachedExternalRoomMember(teamNode, network.id, declaredSlot)) {
|
|
114
126
|
continue;
|
|
115
127
|
}
|
|
128
|
+
if (isDeclaredPairedRemoteRoomMember(network, room, declaredSlot)) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
116
131
|
throw new SpawnfileError("validation_error", `Team ${teamNode.name} Moltnet room ${room.id} references unknown member ${declaredSlot}`);
|
|
117
132
|
}
|
|
118
133
|
if (declaredMember.kind === "agent") {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { TeamNetworkServer } from "../manifest/index.js";
|
|
2
2
|
export declare const assertCompatibleMoltnetNetworkName: (networkId: string, existing: string | undefined, next: string | undefined) => void;
|
|
3
3
|
export declare const assertCompatibleMoltnetServer: (networkId: string, existing: TeamNetworkServer, next: TeamNetworkServer) => void;
|
|
4
|
-
export declare const assertCompatibleMoltnetRoomPolicy: (networkId: string, roomId: string, field: "visibility" | "write_policy", existing: string | undefined, next: string | undefined) => void;
|
|
4
|
+
export declare const assertCompatibleMoltnetRoomPolicy: (networkId: string, roomId: string, field: "federation" | "visibility" | "write_policy", existing: string | string[] | undefined, next: string | string[] | undefined) => void;
|
|
@@ -22,7 +22,9 @@ export const assertCompatibleMoltnetServer = (networkId, existing, next) => {
|
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
24
|
export const assertCompatibleMoltnetRoomPolicy = (networkId, roomId, field, existing, next) => {
|
|
25
|
-
if (existing !== undefined
|
|
25
|
+
if (existing !== undefined
|
|
26
|
+
&& next !== undefined
|
|
27
|
+
&& stableStringify(existing) !== stableStringify(next)) {
|
|
26
28
|
throw new SpawnfileError("validation_error", `Duplicate Moltnet network ${networkId} room ${roomId} declares conflicting ${field}: ${existing} vs ${next}`);
|
|
27
29
|
}
|
|
28
30
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { CompilePlan, ResolvedAgentNode } from "./types.js";
|
|
2
|
-
export declare const resolveRuntimeConfig: (plan: CompilePlan, agentNode: ResolvedAgentNode, nodeSlug: string,
|
|
2
|
+
export declare const resolveRuntimeConfig: (plan: CompilePlan, agentNode: ResolvedAgentNode, nodeSlug: string, networkId: string, moltnetAgentId: string) => Record<string, string>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getRuntimeAdapter } from "../runtime/index.js";
|
|
2
2
|
import { SpawnfileError } from "../shared/index.js";
|
|
3
|
+
import { createMoltnetDaimonReceiptStorePath } from "./moltnetConfigLowering.js";
|
|
3
4
|
const INSTANCE_ROOT_PLACEHOLDER = "<instance-root>";
|
|
4
5
|
const CONFIG_FILE_PLACEHOLDER = "<config-file>";
|
|
5
6
|
const resolveSequentialRuntimePort = (plan, runtimeName, slug) => {
|
|
@@ -28,7 +29,14 @@ const resolveRuntimeInstancePaths = (runtimeName, slug) => {
|
|
|
28
29
|
: undefined
|
|
29
30
|
};
|
|
30
31
|
};
|
|
31
|
-
|
|
32
|
+
const resolveDaimonAgentId = (plan, agentNode) => {
|
|
33
|
+
const compiled = plan.nodes.find((node) => node.kind === "agent" && node.value.source === agentNode.source);
|
|
34
|
+
if (!compiled) {
|
|
35
|
+
throw new SpawnfileError("compile_error", `Unable to resolve Daimon runtime agent identity for ${agentNode.name}`);
|
|
36
|
+
}
|
|
37
|
+
return compiled.id;
|
|
38
|
+
};
|
|
39
|
+
export const resolveRuntimeConfig = (plan, agentNode, nodeSlug, networkId, moltnetAgentId) => {
|
|
32
40
|
switch (agentNode.runtime.name) {
|
|
33
41
|
case "openclaw": {
|
|
34
42
|
const port = resolveSequentialRuntimePort(plan, "openclaw", nodeSlug);
|
|
@@ -51,7 +59,19 @@ export const resolveRuntimeConfig = (plan, agentNode, nodeSlug, _networkId, _age
|
|
|
51
59
|
kind: "picoclaw"
|
|
52
60
|
};
|
|
53
61
|
}
|
|
54
|
-
case "daimon":
|
|
62
|
+
case "daimon": {
|
|
63
|
+
const port = getRuntimeAdapter("daimon").container.port;
|
|
64
|
+
if (!port) {
|
|
65
|
+
throw new SpawnfileError("compile_error", `Unable to resolve Daimon control port for Moltnet agent ${agentNode.name}`);
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
agent_id: resolveDaimonAgentId(plan, agentNode),
|
|
69
|
+
control_url: `http://127.0.0.1:${port}`,
|
|
70
|
+
kind: "daimon",
|
|
71
|
+
receipt_store_path: createMoltnetDaimonReceiptStorePath(networkId, moltnetAgentId),
|
|
72
|
+
token_env: "SPAWNFILE_DAIMON_CONTROL_TOKEN"
|
|
73
|
+
};
|
|
74
|
+
}
|
|
55
75
|
case "pi": {
|
|
56
76
|
const port = getRuntimeAdapter(agentNode.runtime.name).container.port;
|
|
57
77
|
if (!port) {
|
|
@@ -71,6 +71,7 @@ const mergeRooms = (plan, serverPlan, declaration) => {
|
|
|
71
71
|
const existingRoom = serverPlan.rooms.find((entry) => entry.id === room.id);
|
|
72
72
|
if (!existingRoom) {
|
|
73
73
|
serverPlan.rooms.push({
|
|
74
|
+
...(room.federation ? { federation: room.federation } : {}),
|
|
74
75
|
id: room.id,
|
|
75
76
|
members: concreteMembers,
|
|
76
77
|
...(room.name ? { name: room.name } : {}),
|
|
@@ -82,8 +83,10 @@ const mergeRooms = (plan, serverPlan, declaration) => {
|
|
|
82
83
|
existingRoom.members = [
|
|
83
84
|
...new Set([...existingRoom.members, ...concreteMembers])
|
|
84
85
|
].sort();
|
|
86
|
+
assertCompatibleMoltnetRoomPolicy(network.id, room.id, "federation", existingRoom.federation, room.federation);
|
|
85
87
|
assertCompatibleMoltnetRoomPolicy(network.id, room.id, "visibility", existingRoom.visibility, room.visibility);
|
|
86
88
|
assertCompatibleMoltnetRoomPolicy(network.id, room.id, "write_policy", existingRoom.write_policy, room.write_policy);
|
|
89
|
+
existingRoom.federation ??= room.federation;
|
|
87
90
|
existingRoom.visibility ??= room.visibility;
|
|
88
91
|
existingRoom.write_policy ??= room.write_policy;
|
|
89
92
|
}
|
|
@@ -128,5 +131,21 @@ export const resolveMoltnetServerPlans = (plan, teamNodes) => {
|
|
|
128
131
|
if (count > 1)
|
|
129
132
|
serverPlans.get(networkId)?.rooms.sort((left, right) => left.id.localeCompare(right.id));
|
|
130
133
|
}
|
|
134
|
+
for (const serverPlan of serverPlans.values()) {
|
|
135
|
+
const pairingIds = new Set(serverPlan.server.mode === "managed"
|
|
136
|
+
? (serverPlan.server.pairings ?? []).map((pairing) => pairing.id)
|
|
137
|
+
: []);
|
|
138
|
+
for (const room of serverPlan.rooms) {
|
|
139
|
+
if (serverPlan.server.mode === "external" && room.federation !== undefined) {
|
|
140
|
+
throw new SpawnfileError("validation_error", `External Moltnet network ${serverPlan.networkId} room ${room.id} cannot declare federation`);
|
|
141
|
+
}
|
|
142
|
+
if (!Array.isArray(room.federation))
|
|
143
|
+
continue;
|
|
144
|
+
const unknownPairing = room.federation.find((pairingId) => !pairingIds.has(pairingId));
|
|
145
|
+
if (unknownPairing) {
|
|
146
|
+
throw new SpawnfileError("validation_error", `Moltnet network ${serverPlan.networkId} room ${room.id} federation references unknown pairing ${unknownPairing}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
131
150
|
return serverPlans;
|
|
132
151
|
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CompilePlan, MoltnetExternalParticipantIntent } from "./types.js";
|
|
2
|
+
export declare const validateB31MoltnetAuth: (plan: CompilePlan) => void;
|
|
3
|
+
export declare const resolveMoltnetExternalParticipantIntents: (plan: CompilePlan) => MoltnetExternalParticipantIntent[];
|