spawnfile 0.1.13 → 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 +61 -121
- 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/importers.d.ts +10 -0
- package/dist/auth/importers.js +29 -4
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/paths.d.ts +12 -1
- package/dist/auth/paths.js +21 -0
- package/dist/auth/profileStore.js +9 -9
- package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
- package/dist/auth/targetSecretSourceAuthor.js +52 -0
- package/dist/auth/targetSecretSourceFsIdentity.d.ts +40 -0
- package/dist/auth/targetSecretSourceFsIdentity.js +42 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +17 -0
- package/dist/auth/targetSecretSourceFsPublish.js +51 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +17 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +468 -0
- package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
- package/dist/auth/targetSecretSourceFsRead.js +189 -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/auth/trainingAuth.d.ts +21 -0
- package/dist/auth/trainingAuth.js +86 -0
- package/dist/auth/types.d.ts +1 -1
- 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 +230 -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.d.ts +3 -0
- package/dist/cli/compileBuildCommands.js +48 -0
- package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
- package/dist/cli/composedLifecycleContractSet.js +204 -0
- package/dist/cli/containerBundleCommand.d.ts +6 -0
- package/dist/cli/containerBundleCommand.js +116 -0
- package/dist/cli/devCommands.js +2 -0
- package/dist/cli/downCommand.d.ts +25 -0
- package/dist/cli/downCommand.js +145 -0
- package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
- package/dist/cli/evidenceExportHelperCommand.js +51 -0
- package/dist/cli/index.js +15 -3
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +11 -181
- package/dist/cli/lifecycleMachine.d.ts +25 -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/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 +19 -2
- package/dist/cli/runCli.js +58 -74
- 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 +30 -0
- package/dist/cli/targetCommands.js +227 -0
- package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
- package/dist/cli/targetComposedPreparationCommand.js +39 -0
- 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/targetDefaultArtifactAuthority.d.ts +5 -0
- package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +55 -0
- package/dist/cli/targetDefaultAuthorities.js +213 -0
- package/dist/cli/targetDefaultConfig.d.ts +75 -0
- package/dist/cli/targetDefaultConfig.js +334 -0
- package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
- package/dist/cli/targetDefaultConfigStdin.js +221 -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 +268 -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/targetProductionCommands.d.ts +5 -0
- package/dist/cli/targetProductionCommands.js +45 -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/targetWorldReadinessCommand.d.ts +10 -0
- package/dist/cli/targetWorldReadinessCommand.js +43 -0
- package/dist/cli/trainCommand.d.ts +3 -0
- package/dist/cli/trainCommand.js +61 -0
- package/dist/cli/upCommand.d.ts +3 -0
- package/dist/cli/upCommand.js +162 -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 +197 -0
- 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/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 +2 -1
- package/dist/compiler/buildCompilePlanTeams.js +9 -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 +5 -0
- package/dist/compiler/compileProject.d.ts +15 -0
- package/dist/compiler/compileProject.js +31 -75
- package/dist/compiler/compileProjectPolicy.d.ts +5 -0
- package/dist/compiler/compileProjectPolicy.js +21 -0
- package/dist/compiler/compileProjectReports.d.ts +9 -0
- package/dist/compiler/compileProjectReports.js +52 -0
- package/dist/compiler/compileProjectSupport.js +9 -0
- package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
- package/dist/compiler/containerArtifactSummaries.js +138 -0
- package/dist/compiler/containerArtifacts.d.ts +12 -0
- package/dist/compiler/containerArtifacts.js +180 -127
- package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
- package/dist/compiler/containerArtifactsPlans.js +54 -124
- package/dist/compiler/containerArtifactsRender.d.ts +5 -2
- package/dist/compiler/containerArtifactsRender.js +106 -70
- package/dist/compiler/containerArtifactsTypes.d.ts +20 -0
- package/dist/compiler/containerBackedMountRender.d.ts +56 -0
- package/dist/compiler/containerBackedMountRender.js +101 -0
- package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
- package/dist/compiler/containerConfigEnvRender.js +54 -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 +8 -0
- package/dist/compiler/containerEntrypointRender.js +82 -72
- 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/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/containerTargetPlanResolution.d.ts +20 -0
- package/dist/compiler/containerTargetPlanResolution.js +97 -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 +22 -0
- package/dist/compiler/daimonTelemetryArtifacts.js +56 -0
- package/dist/compiler/deploymentLineage.d.ts +40 -0
- package/dist/compiler/deploymentLineage.js +50 -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 +7 -0
- package/dist/compiler/index.js +7 -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 +26 -0
- package/dist/compiler/memoryArtifacts.js +210 -0
- package/dist/compiler/memoryResolution.d.ts +4 -0
- package/dist/compiler/memoryResolution.js +147 -0
- package/dist/compiler/modelEnv.d.ts +7 -0
- package/dist/compiler/modelEnv.js +13 -1
- package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
- package/dist/compiler/moltnetArtifactPaths.d.ts +31 -0
- package/dist/compiler/moltnetArtifactPaths.js +51 -0
- package/dist/compiler/moltnetArtifactTypes.d.ts +56 -0
- package/dist/compiler/moltnetArtifactTypes.js +1 -0
- package/dist/compiler/moltnetArtifacts.d.ts +3 -41
- package/dist/compiler/moltnetArtifacts.js +87 -101
- package/dist/compiler/moltnetBinaries.d.ts +33 -4
- package/dist/compiler/moltnetBinaries.js +173 -26
- package/dist/compiler/moltnetClientConfig.js +7 -2
- package/dist/compiler/moltnetConfigLowering.d.ts +18 -1
- package/dist/compiler/moltnetConfigLowering.js +92 -6
- 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 +40 -0
- package/dist/compiler/moltnetReleaseAuthority.js +102 -0
- package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
- package/dist/compiler/moltnetReleaseDownload.js +85 -0
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +2 -1
- package/dist/compiler/moltnetRepresentativeResolution.js +17 -3
- package/dist/compiler/moltnetResolution.js +67 -21
- package/dist/compiler/moltnetRoomMemberships.js +52 -9
- 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.d.ts +9 -0
- package/dist/compiler/moltnetServerPlans.js +151 -0
- package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
- package/dist/compiler/organizationExternalParticipants.js +176 -0
- package/dist/compiler/organizationIdentity.d.ts +21 -0
- package/dist/compiler/organizationIdentity.js +64 -0
- package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
- package/dist/compiler/organizationIdentityGraph.js +115 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +57 -0
- package/dist/compiler/organizationReadyEvidence.js +281 -0
- package/dist/compiler/projectManifestGraph.d.ts +4 -0
- package/dist/compiler/projectManifestGraph.js +24 -0
- package/dist/compiler/runProject.d.ts +8 -2
- package/dist/compiler/runProject.js +62 -27
- package/dist/compiler/runProjectAuth.d.ts +10 -2
- package/dist/compiler/runProjectAuth.js +105 -11
- package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
- package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
- package/dist/compiler/runProjectDocker.d.ts +11 -0
- package/dist/compiler/runProjectDocker.js +64 -16
- 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.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/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 +84 -1
- package/dist/compiler/upProject.d.ts +31 -1
- package/dist/compiler/upProject.js +197 -22
- package/dist/compiler/upProjectHandoff.d.ts +62 -0
- package/dist/compiler/upProjectHandoff.js +204 -0
- package/dist/compiler/upReceipt.d.ts +36 -0
- package/dist/compiler/upReceipt.js +127 -0
- package/dist/compiler/updateProjectModels.js +43 -60
- package/dist/compiler/updateProjectRuntime.js +22 -35
- package/dist/compiler/updateProjectSurfaces.js +53 -47
- 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/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 +185 -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/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/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 +5 -10
- package/dist/deployment/dockerManager.d.ts +51 -0
- package/dist/deployment/dockerManager.js +124 -1
- package/dist/deployment/dockerProbeGateway.d.ts +17 -0
- package/dist/deployment/dockerProbeGateway.js +80 -6
- 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 +39 -0
- package/dist/deployment/downDeployment.js +248 -0
- package/dist/deployment/downReceiptTypes.d.ts +36 -0
- package/dist/deployment/downReceiptTypes.js +45 -0
- package/dist/deployment/index.d.ts +20 -0
- package/dist/deployment/index.js +21 -0
- package/dist/deployment/lifecycleCompletion.d.ts +37 -0
- package/dist/deployment/lifecycleCompletion.js +236 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +224 -0
- package/dist/deployment/lifecycleCompletionContracts.js +140 -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 +12 -0
- package/dist/deployment/lifecycleCompletionPaths.js +19 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +7 -0
- package/dist/deployment/lifecycleCompletionPublication.js +49 -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/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.d.ts +17 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +187 -0
- package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
- package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +431 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
- package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +355 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.js +149 -0
- package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
- package/dist/deployment/organizationHandoffTypes.js +80 -0
- package/dist/deployment/organizationReady.d.ts +54 -0
- package/dist/deployment/organizationReady.js +232 -0
- package/dist/deployment/privateArtifactsExport.d.ts +18 -0
- package/dist/deployment/privateArtifactsExport.js +80 -0
- package/dist/deployment/productStateClone.d.ts +43 -0
- package/dist/deployment/productStateClone.js +319 -0
- package/dist/deployment/record.d.ts +26 -1
- package/dist/deployment/record.js +49 -4
- package/dist/deployment/target.d.ts +1 -35
- package/dist/deployment/target.js +1 -96
- package/dist/deployment/upLifecycleRecoveryState.d.ts +23 -0
- package/dist/deployment/upLifecycleRecoveryState.js +12 -0
- package/dist/deployment/upReceiptTypes.d.ts +137 -0
- package/dist/deployment/upReceiptTypes.js +191 -0
- 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 +24 -9
- package/dist/distribution/buildDistributionReport.d.ts +2 -1
- package/dist/distribution/buildDistributionReport.js +2 -1
- 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 +16 -1
- package/dist/distribution/distributionReportSchema.js +21 -3
- 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 +3 -3
- package/dist/distribution/index.js +2 -2
- package/dist/distribution/preflight.js +5 -1
- package/dist/distribution/types.d.ts +21 -1
- package/dist/distribution/types.js +4 -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/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/executionSchemas.d.ts +27 -0
- package/dist/manifest/executionSchemas.js +21 -2
- 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 +18 -0
- package/dist/manifest/mcpSchemas.js +44 -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 +20 -2
- package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
- package/dist/manifest/renderSpawnfileSurfaces.js +134 -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 +2034 -40
- package/dist/manifest/schemas.js +82 -33
- package/dist/manifest/surfaceSchemas.d.ts +17 -0
- package/dist/manifest/surfaceSchemas.js +24 -1
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +6 -2
- package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
- package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
- package/dist/manifest/teamNetworkSchemas.d.ts +25 -190
- package/dist/manifest/teamNetworkSchemas.js +21 -317
- package/dist/manifest/teamNetworkServerSchemas.d.ts +155 -0
- package/dist/manifest/teamNetworkServerSchemas.js +215 -0
- package/dist/manifest/workspaceSchemas.d.ts +16 -0
- package/dist/manifest/workspaceSchemas.js +11 -0
- package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
- package/dist/ownership/siblingBuildFreshness.js +20 -0
- package/dist/report/types.d.ts +173 -1
- package/dist/runtime/common.d.ts +63 -1
- package/dist/runtime/common.js +88 -3
- package/dist/runtime/container.d.ts +28 -1
- package/dist/runtime/container.js +78 -29
- package/dist/runtime/containerPackageOverrides.d.ts +37 -0
- package/dist/runtime/containerPackageOverrides.js +33 -0
- 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 +6 -0
- package/dist/runtime/index.js +6 -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 +28 -0
- package/dist/runtime/mnemeMcp.js +135 -0
- package/dist/runtime/openclaw/adapter.js +17 -6
- 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 -2
- package/dist/runtime/pi/adapter.js +87 -58
- 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 +84 -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 +25 -29
- package/dist/runtime/picoclaw/mcp.d.ts +4 -0
- package/dist/runtime/picoclaw/mcp.js +43 -0
- package/dist/runtime/picoclaw/memory.d.ts +7 -0
- package/dist/runtime/picoclaw/memory.js +17 -0
- package/dist/runtime/picoclaw/runAuth.js +1 -1
- package/dist/runtime/picoclaw/scaffold.js +1 -1
- package/dist/runtime/picoclaw/schedules.d.ts +26 -0
- package/dist/runtime/picoclaw/schedules.js +62 -3
- package/dist/runtime/registry.d.ts +3 -0
- package/dist/runtime/registry.js +19 -2
- package/dist/runtime/scheduleUtils.d.ts +3 -0
- package/dist/runtime/scheduleUtils.js +19 -0
- package/dist/runtime/types.d.ts +50 -2
- 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/errors.d.ts +1 -1
- package/dist/shared/errors.js +2 -2
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.js +3 -0
- package/dist/shared/redaction.d.ts +2 -0
- package/dist/shared/redaction.js +10 -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/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/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 +476 -0
- package/dist/target/dockerBaseImage.d.ts +2 -0
- package/dist/target/dockerBaseImage.js +11 -0
- package/dist/target/dockerCommandExecutor.d.ts +38 -0
- package/dist/target/dockerCommandExecutor.js +251 -0
- package/dist/target/dockerCommandExecutorCore.d.ts +35 -0
- package/dist/target/dockerCommandExecutorCore.js +275 -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 +83 -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 +53 -0
- package/dist/target/dockerTarget.js +48 -0
- package/dist/target/dockerTargetBinding.d.ts +13 -0
- package/dist/target/dockerTargetBinding.js +95 -0
- package/dist/target/dockerTargetExecFile.d.ts +19 -0
- package/dist/target/dockerTargetExecFile.js +194 -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 +64 -0
- package/dist/target/dockerWorldServiceProvider.js +330 -0
- package/dist/target/dockerWorldServiceStore.d.ts +73 -0
- package/dist/target/dockerWorldServiceStore.js +367 -0
- package/dist/target/evidenceExport.d.ts +57 -0
- package/dist/target/evidenceExport.js +527 -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 +87 -0
- package/dist/target/evidenceExportProvider.js +197 -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 +72 -0
- package/dist/target/publicArtifactSnapshot.js +184 -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/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 +21 -0
- package/package.json +57 -14
- package/runtimes.yaml +11 -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,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostics and convergence budget for the organization handoff filesystem
|
|
3
|
+
* authority.
|
|
4
|
+
*
|
|
5
|
+
* This module is deliberately dependency-free: the authority worker is forked
|
|
6
|
+
* as a standalone process whose only other imports are `node:fs`, and that
|
|
7
|
+
* minimal surface is part of its threat model.
|
|
8
|
+
*
|
|
9
|
+
* ## Why a wall-clock budget
|
|
10
|
+
*
|
|
11
|
+
* Concurrent publishers converge by waiting for a peer to finish writing and
|
|
12
|
+
* linking a record. That is a wall-clock event — it completes when the peer is
|
|
13
|
+
* scheduled and its I/O lands. An attempt-counted budget answers a different
|
|
14
|
+
* question ("have I looked N times?") whose relationship to elapsed time is set
|
|
15
|
+
* by machine load, so the effective patience of the loop drifts with the very
|
|
16
|
+
* contention it exists to absorb. The budget below is therefore primarily a
|
|
17
|
+
* deadline; the attempt cap is only a secondary guard against a pathological
|
|
18
|
+
* hot loop if a timer or clock misbehaves.
|
|
19
|
+
*
|
|
20
|
+
* ## Why one budget per request
|
|
21
|
+
*
|
|
22
|
+
* The convergence loops nest (write -> settle -> read-staging -> read). Giving
|
|
23
|
+
* each loop its own budget bounds no level usefully: each individual loop is
|
|
24
|
+
* too impatient while their product is effectively unbounded. A single budget
|
|
25
|
+
* threaded through one request bounds the thing that actually has a deadline —
|
|
26
|
+
* the request — and is what the client's own request deadline must exceed.
|
|
27
|
+
*/
|
|
28
|
+
/** Uniform public failure message. Detail is appended, never substituted. */
|
|
29
|
+
export declare const ORGANIZATION_HANDOFF_AUTHORITY_ERROR = "Organization handoff authority failed";
|
|
30
|
+
/** Wall-clock convergence budget for one authority request. */
|
|
31
|
+
export declare const PUBLICATION_BUDGET_MS = 2000;
|
|
32
|
+
/**
|
|
33
|
+
* Secondary bound only. It is far above the attempt count any healthy
|
|
34
|
+
* convergence needs; it exists so a broken timer cannot spin forever.
|
|
35
|
+
*/
|
|
36
|
+
export declare const PUBLICATION_MAX_ATTEMPTS = 4096;
|
|
37
|
+
/**
|
|
38
|
+
* Fraction of the budget spent waiting for a peer before a proven, incomplete
|
|
39
|
+
* staging prefix is retired instead. Patience must expire strictly before the
|
|
40
|
+
* budget does, or the recovery path could never run.
|
|
41
|
+
*/
|
|
42
|
+
export declare const PUBLICATION_PATIENCE_FRACTION = 0.5;
|
|
43
|
+
/**
|
|
44
|
+
* Structural diagnostics for a failed authority request.
|
|
45
|
+
*
|
|
46
|
+
* `state` describes the *shape* of the contending filesystem state — sidecar
|
|
47
|
+
* presence, link counts, sizes. It never carries record bytes, leaf names, or
|
|
48
|
+
* paths: this is the secret-publication path, and the diagnostic must not
|
|
49
|
+
* become a disclosure channel.
|
|
50
|
+
*/
|
|
51
|
+
export interface OrganizationHandoffAuthorityFailureDetail {
|
|
52
|
+
readonly attempts?: number;
|
|
53
|
+
readonly budget?: string;
|
|
54
|
+
readonly code: string;
|
|
55
|
+
readonly elapsedMs?: number;
|
|
56
|
+
readonly limitMs?: number;
|
|
57
|
+
readonly state?: string;
|
|
58
|
+
}
|
|
59
|
+
/** Render a detail as the suffix appended to the uniform failure message. */
|
|
60
|
+
export declare const describeOrganizationHandoffAuthorityFailure: (detail: OrganizationHandoffAuthorityFailureDetail) => string;
|
|
61
|
+
/** An authority failure that carries its structural diagnostics. */
|
|
62
|
+
export declare class OrganizationHandoffAuthorityFailure extends Error {
|
|
63
|
+
readonly detail: OrganizationHandoffAuthorityFailureDetail;
|
|
64
|
+
constructor(detail: OrganizationHandoffAuthorityFailureDetail);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Build an error for the uniform message plus optional detail. Callers that
|
|
68
|
+
* have no diagnostics still produce the exact historical message, so existing
|
|
69
|
+
* substring expectations and the store's opaque public boundary hold.
|
|
70
|
+
*/
|
|
71
|
+
export declare const createOrganizationHandoffAuthorityError: (detail?: OrganizationHandoffAuthorityFailureDetail) => Error;
|
|
72
|
+
/** Narrow an unknown IPC payload to a bounded, well-formed detail. */
|
|
73
|
+
export declare const parseOrganizationHandoffAuthorityFailureDetail: (raw: unknown) => OrganizationHandoffAuthorityFailureDetail | undefined;
|
|
74
|
+
/** Reduce an unknown thrown value to a bounded detail suitable for IPC. */
|
|
75
|
+
export declare const toOrganizationHandoffAuthorityFailureDetail: (error: unknown) => OrganizationHandoffAuthorityFailureDetail;
|
|
76
|
+
export interface OrganizationHandoffAuthorityBudgetOptions {
|
|
77
|
+
readonly limitMs?: number;
|
|
78
|
+
readonly maxAttempts?: number;
|
|
79
|
+
readonly now?: () => number;
|
|
80
|
+
readonly sleep?: (ms: number) => Promise<void>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* One request's convergence budget: a wall-clock deadline, a secondary attempt
|
|
84
|
+
* cap, and adaptive backoff with jitter.
|
|
85
|
+
*
|
|
86
|
+
* The jitter matters as much as the deadline. Symmetric publishers waking on a
|
|
87
|
+
* fixed 2ms timer retry in lockstep, so every peer re-observes the same
|
|
88
|
+
* unfinished state and burns the budget in phase. Randomised, growing waits
|
|
89
|
+
* break that convoy so peers observe each other's progress instead.
|
|
90
|
+
*/
|
|
91
|
+
export declare class OrganizationHandoffAuthorityBudget {
|
|
92
|
+
#private;
|
|
93
|
+
constructor(options?: OrganizationHandoffAuthorityBudgetOptions);
|
|
94
|
+
get attempts(): number;
|
|
95
|
+
get elapsedMs(): number;
|
|
96
|
+
get limitMs(): number;
|
|
97
|
+
/** True once no further waiting is permitted for this request. */
|
|
98
|
+
exhausted(): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* True while a peer still deserves the benefit of the doubt. Once false, a
|
|
101
|
+
* proven incomplete staging prefix may be retired — the caller has already
|
|
102
|
+
* linked, or is about to link, the immutable final record that prevents that
|
|
103
|
+
* prefix from winning a later election.
|
|
104
|
+
*/
|
|
105
|
+
patient(): boolean;
|
|
106
|
+
/** Snapshot the budget for a failure detail. */
|
|
107
|
+
snapshot(code: string, budget: string, state?: string): OrganizationHandoffAuthorityFailureDetail;
|
|
108
|
+
/** Back off before the next observation, never past the deadline. */
|
|
109
|
+
wait(): Promise<void>;
|
|
110
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostics and convergence budget for the organization handoff filesystem
|
|
3
|
+
* authority.
|
|
4
|
+
*
|
|
5
|
+
* This module is deliberately dependency-free: the authority worker is forked
|
|
6
|
+
* as a standalone process whose only other imports are `node:fs`, and that
|
|
7
|
+
* minimal surface is part of its threat model.
|
|
8
|
+
*
|
|
9
|
+
* ## Why a wall-clock budget
|
|
10
|
+
*
|
|
11
|
+
* Concurrent publishers converge by waiting for a peer to finish writing and
|
|
12
|
+
* linking a record. That is a wall-clock event — it completes when the peer is
|
|
13
|
+
* scheduled and its I/O lands. An attempt-counted budget answers a different
|
|
14
|
+
* question ("have I looked N times?") whose relationship to elapsed time is set
|
|
15
|
+
* by machine load, so the effective patience of the loop drifts with the very
|
|
16
|
+
* contention it exists to absorb. The budget below is therefore primarily a
|
|
17
|
+
* deadline; the attempt cap is only a secondary guard against a pathological
|
|
18
|
+
* hot loop if a timer or clock misbehaves.
|
|
19
|
+
*
|
|
20
|
+
* ## Why one budget per request
|
|
21
|
+
*
|
|
22
|
+
* The convergence loops nest (write -> settle -> read-staging -> read). Giving
|
|
23
|
+
* each loop its own budget bounds no level usefully: each individual loop is
|
|
24
|
+
* too impatient while their product is effectively unbounded. A single budget
|
|
25
|
+
* threaded through one request bounds the thing that actually has a deadline —
|
|
26
|
+
* the request — and is what the client's own request deadline must exceed.
|
|
27
|
+
*/
|
|
28
|
+
/** Uniform public failure message. Detail is appended, never substituted. */
|
|
29
|
+
export const ORGANIZATION_HANDOFF_AUTHORITY_ERROR = "Organization handoff authority failed";
|
|
30
|
+
/** Wall-clock convergence budget for one authority request. */
|
|
31
|
+
export const PUBLICATION_BUDGET_MS = 2_000;
|
|
32
|
+
/**
|
|
33
|
+
* Secondary bound only. It is far above the attempt count any healthy
|
|
34
|
+
* convergence needs; it exists so a broken timer cannot spin forever.
|
|
35
|
+
*/
|
|
36
|
+
export const PUBLICATION_MAX_ATTEMPTS = 4_096;
|
|
37
|
+
/**
|
|
38
|
+
* Fraction of the budget spent waiting for a peer before a proven, incomplete
|
|
39
|
+
* staging prefix is retired instead. Patience must expire strictly before the
|
|
40
|
+
* budget does, or the recovery path could never run.
|
|
41
|
+
*/
|
|
42
|
+
export const PUBLICATION_PATIENCE_FRACTION = 0.5;
|
|
43
|
+
const BASE_WAIT_MS = 1;
|
|
44
|
+
const MAX_WAIT_MS = 25;
|
|
45
|
+
const MAX_CODE_LENGTH = 64;
|
|
46
|
+
const MAX_STATE_LENGTH = 240;
|
|
47
|
+
const clamp = (value, limit) => value.length > limit ? `${value.slice(0, limit - 1)}~` : value;
|
|
48
|
+
const isSafeNumber = (value) => typeof value === "number" && Number.isFinite(value);
|
|
49
|
+
/** Render a detail as the suffix appended to the uniform failure message. */
|
|
50
|
+
export const describeOrganizationHandoffAuthorityFailure = (detail) => {
|
|
51
|
+
const fields = [];
|
|
52
|
+
if (detail.budget !== undefined)
|
|
53
|
+
fields.push(`budget=${detail.budget}`);
|
|
54
|
+
if (detail.attempts !== undefined)
|
|
55
|
+
fields.push(`attempts=${detail.attempts}`);
|
|
56
|
+
if (detail.elapsedMs !== undefined)
|
|
57
|
+
fields.push(`elapsed=${Math.round(detail.elapsedMs)}ms`);
|
|
58
|
+
if (detail.limitMs !== undefined)
|
|
59
|
+
fields.push(`limit=${Math.round(detail.limitMs)}ms`);
|
|
60
|
+
if (detail.state !== undefined)
|
|
61
|
+
fields.push(`state=${detail.state}`);
|
|
62
|
+
return fields.length === 0 ? detail.code : `${detail.code} (${fields.join(" ")})`;
|
|
63
|
+
};
|
|
64
|
+
/** An authority failure that carries its structural diagnostics. */
|
|
65
|
+
export class OrganizationHandoffAuthorityFailure extends Error {
|
|
66
|
+
detail;
|
|
67
|
+
constructor(detail) {
|
|
68
|
+
super(`${ORGANIZATION_HANDOFF_AUTHORITY_ERROR}: ${describeOrganizationHandoffAuthorityFailure(detail)}`);
|
|
69
|
+
this.name = "OrganizationHandoffAuthorityFailure";
|
|
70
|
+
this.detail = detail;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Build an error for the uniform message plus optional detail. Callers that
|
|
75
|
+
* have no diagnostics still produce the exact historical message, so existing
|
|
76
|
+
* substring expectations and the store's opaque public boundary hold.
|
|
77
|
+
*/
|
|
78
|
+
export const createOrganizationHandoffAuthorityError = (detail) => detail === undefined
|
|
79
|
+
? new Error(ORGANIZATION_HANDOFF_AUTHORITY_ERROR)
|
|
80
|
+
: new OrganizationHandoffAuthorityFailure(detail);
|
|
81
|
+
/** Narrow an unknown IPC payload to a bounded, well-formed detail. */
|
|
82
|
+
export const parseOrganizationHandoffAuthorityFailureDetail = (raw) => {
|
|
83
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
84
|
+
return undefined;
|
|
85
|
+
const value = raw;
|
|
86
|
+
if (typeof value.code !== "string" || value.code.length === 0)
|
|
87
|
+
return undefined;
|
|
88
|
+
return {
|
|
89
|
+
...(isSafeNumber(value.attempts) ? { attempts: value.attempts } : {}),
|
|
90
|
+
...(typeof value.budget === "string" ? { budget: clamp(value.budget, MAX_CODE_LENGTH) } : {}),
|
|
91
|
+
code: clamp(value.code, MAX_CODE_LENGTH),
|
|
92
|
+
...(isSafeNumber(value.elapsedMs) ? { elapsedMs: value.elapsedMs } : {}),
|
|
93
|
+
...(isSafeNumber(value.limitMs) ? { limitMs: value.limitMs } : {}),
|
|
94
|
+
...(typeof value.state === "string" ? { state: clamp(value.state, MAX_STATE_LENGTH) } : {})
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
/** Reduce an unknown thrown value to a bounded detail suitable for IPC. */
|
|
98
|
+
export const toOrganizationHandoffAuthorityFailureDetail = (error) => error instanceof OrganizationHandoffAuthorityFailure
|
|
99
|
+
? error.detail
|
|
100
|
+
: { code: "unexpected_error", state: clamp(error instanceof Error ? `${error.name}` : typeof error, MAX_STATE_LENGTH) };
|
|
101
|
+
/**
|
|
102
|
+
* One request's convergence budget: a wall-clock deadline, a secondary attempt
|
|
103
|
+
* cap, and adaptive backoff with jitter.
|
|
104
|
+
*
|
|
105
|
+
* The jitter matters as much as the deadline. Symmetric publishers waking on a
|
|
106
|
+
* fixed 2ms timer retry in lockstep, so every peer re-observes the same
|
|
107
|
+
* unfinished state and burns the budget in phase. Randomised, growing waits
|
|
108
|
+
* break that convoy so peers observe each other's progress instead.
|
|
109
|
+
*/
|
|
110
|
+
export class OrganizationHandoffAuthorityBudget {
|
|
111
|
+
#attempts = 0;
|
|
112
|
+
#limitMs;
|
|
113
|
+
#maxAttempts;
|
|
114
|
+
#now;
|
|
115
|
+
#sleep;
|
|
116
|
+
#startedAt;
|
|
117
|
+
constructor(options = {}) {
|
|
118
|
+
this.#limitMs = options.limitMs ?? PUBLICATION_BUDGET_MS;
|
|
119
|
+
this.#maxAttempts = options.maxAttempts ?? PUBLICATION_MAX_ATTEMPTS;
|
|
120
|
+
this.#now = options.now ?? (() => performance.now());
|
|
121
|
+
this.#sleep = options.sleep ?? (async (ms) => new Promise((resolve) => { setTimeout(resolve, ms); }));
|
|
122
|
+
this.#startedAt = this.#now();
|
|
123
|
+
}
|
|
124
|
+
get attempts() { return this.#attempts; }
|
|
125
|
+
get elapsedMs() { return this.#now() - this.#startedAt; }
|
|
126
|
+
get limitMs() { return this.#limitMs; }
|
|
127
|
+
/** True once no further waiting is permitted for this request. */
|
|
128
|
+
exhausted() {
|
|
129
|
+
return this.elapsedMs >= this.#limitMs || this.#attempts >= this.#maxAttempts;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* True while a peer still deserves the benefit of the doubt. Once false, a
|
|
133
|
+
* proven incomplete staging prefix may be retired — the caller has already
|
|
134
|
+
* linked, or is about to link, the immutable final record that prevents that
|
|
135
|
+
* prefix from winning a later election.
|
|
136
|
+
*/
|
|
137
|
+
patient() {
|
|
138
|
+
return !this.exhausted() && this.elapsedMs < this.#limitMs * PUBLICATION_PATIENCE_FRACTION;
|
|
139
|
+
}
|
|
140
|
+
/** Snapshot the budget for a failure detail. */
|
|
141
|
+
snapshot(code, budget, state) {
|
|
142
|
+
return {
|
|
143
|
+
attempts: this.#attempts, budget, code,
|
|
144
|
+
elapsedMs: this.elapsedMs, limitMs: this.#limitMs,
|
|
145
|
+
...(state === undefined ? {} : { state: clamp(state, MAX_STATE_LENGTH) })
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/** Back off before the next observation, never past the deadline. */
|
|
149
|
+
async wait() {
|
|
150
|
+
this.#attempts += 1;
|
|
151
|
+
const growth = Math.min(MAX_WAIT_MS, BASE_WAIT_MS * 2 ** Math.min(this.#attempts - 1, 10));
|
|
152
|
+
const remaining = Math.max(0, this.#limitMs - this.elapsedMs);
|
|
153
|
+
const delay = Math.max(0, Math.min(remaining, growth * (0.5 + Math.random() * 0.5)));
|
|
154
|
+
await this.#sleep(delay);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ChildProcess } from "node:child_process";
|
|
2
|
+
export interface OrganizationHandoffAuthorityFsClientOptions {
|
|
3
|
+
readonly cwd: string;
|
|
4
|
+
readonly dev: number;
|
|
5
|
+
readonly ino: number;
|
|
6
|
+
readonly parentPid?: number;
|
|
7
|
+
readonly uid?: number;
|
|
8
|
+
readonly workerPath?: string;
|
|
9
|
+
readonly testOnChildStarted?: (child: ChildProcess) => void;
|
|
10
|
+
}
|
|
11
|
+
export interface OrganizationHandoffAuthorityFsClient {
|
|
12
|
+
create(name: string, content: string): Promise<boolean>;
|
|
13
|
+
dispose(): Promise<void>;
|
|
14
|
+
read(name: string): Promise<string | null>;
|
|
15
|
+
write(name: string, content: string): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export declare const initializeOrganizationHandoffAuthorityFsClient: (options: OrganizationHandoffAuthorityFsClientOptions) => Promise<OrganizationHandoffAuthorityFsClient>;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { fork } from "node:child_process";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { createOrganizationHandoffAuthorityError, parseOrganizationHandoffAuthorityFailureDetail, PUBLICATION_BUDGET_MS } from "./organizationHandoffAuthorityFsBudget.js";
|
|
5
|
+
const VERSION = "spawnfile.organization-handoff-fs-worker.v1";
|
|
6
|
+
const MAX_BYTES = 32_768;
|
|
7
|
+
/**
|
|
8
|
+
* The client deadline must exceed the worker's own convergence budget, or the
|
|
9
|
+
* client times out first and replaces a diagnosable worker failure with an
|
|
10
|
+
* opaque one. The margin covers fork/IPC latency and event-loop lag.
|
|
11
|
+
*/
|
|
12
|
+
const REQUEST_DEADLINE_MS = PUBLICATION_BUDGET_MS + 3_000;
|
|
13
|
+
/**
|
|
14
|
+
* Startup deadline for the worker's ready handshake. This bounds a hung or
|
|
15
|
+
* broken helper; it is not a latency budget for process startup.
|
|
16
|
+
*
|
|
17
|
+
* Measured ready latency for eight concurrently forked source-mode helpers on
|
|
18
|
+
* a host at eleven times CPU oversubscription is 67-411ms, so this is margin
|
|
19
|
+
* rather than a fix — the observed startup failures were the helper's own
|
|
20
|
+
* liveness watchdog killing it, not this deadline expiring. It is sized above
|
|
21
|
+
* that measurement because CI forks far more helpers at once, and a caller
|
|
22
|
+
* initializes several clients in sequence, which bounds the worst case.
|
|
23
|
+
*/
|
|
24
|
+
const READY_DEADLINE_MS = 5_000;
|
|
25
|
+
const DISPOSE_GRACE_MS = 1_000;
|
|
26
|
+
const fail = (code, state) => {
|
|
27
|
+
throw createOrganizationHandoffAuthorityError({ code, ...(state === undefined ? {} : { state }) });
|
|
28
|
+
};
|
|
29
|
+
const bytes = (value) => Buffer.byteLength(value, "utf8");
|
|
30
|
+
const name = (value) => typeof value === "string" && /^(?:[a-f0-9]{128}|[a-f0-9]{142})\.json$/u.test(value) ? value : fail("invalid_name");
|
|
31
|
+
class Client {
|
|
32
|
+
#child;
|
|
33
|
+
#closed = false;
|
|
34
|
+
#next = 1;
|
|
35
|
+
#exited;
|
|
36
|
+
#pending = new Map();
|
|
37
|
+
constructor(child) {
|
|
38
|
+
this.#child = child;
|
|
39
|
+
let settleExit;
|
|
40
|
+
this.#exited = new Promise((resolve) => { settleExit = resolve; });
|
|
41
|
+
const settle = () => { this.rejectPending("worker_exited"); settleExit(); };
|
|
42
|
+
child.on("message", (raw) => this.message(raw));
|
|
43
|
+
child.on("error", () => this.rejectPending("worker_errored"));
|
|
44
|
+
child.on("disconnect", () => this.rejectPending("worker_disconnected"));
|
|
45
|
+
child.once("exit", settle);
|
|
46
|
+
if (child.exitCode !== null || child.signalCode !== null)
|
|
47
|
+
settle();
|
|
48
|
+
// `fork(..., { silent: true })` creates pipes. Consume them so a failing
|
|
49
|
+
// helper cannot block on a full pipe or accumulate stream listeners.
|
|
50
|
+
child.stdout?.resume();
|
|
51
|
+
child.stderr?.resume();
|
|
52
|
+
}
|
|
53
|
+
terminal() { return this.#child.exitCode !== null || this.#child.signalCode !== null; }
|
|
54
|
+
rejectPending(code) {
|
|
55
|
+
for (const pending of this.#pending.values())
|
|
56
|
+
pending.reject({ code });
|
|
57
|
+
this.#pending.clear();
|
|
58
|
+
}
|
|
59
|
+
message(raw) {
|
|
60
|
+
if (!raw || typeof raw !== "object")
|
|
61
|
+
return;
|
|
62
|
+
const value = raw;
|
|
63
|
+
if (value.version !== VERSION)
|
|
64
|
+
return;
|
|
65
|
+
if (value.ready === true)
|
|
66
|
+
return;
|
|
67
|
+
if (!Number.isSafeInteger(value.id) || typeof value.ok !== "boolean")
|
|
68
|
+
return;
|
|
69
|
+
const pending = this.#pending.get(value.id);
|
|
70
|
+
if (!pending)
|
|
71
|
+
return;
|
|
72
|
+
this.#pending.delete(value.id);
|
|
73
|
+
if (value.ok !== true || value.content !== undefined && typeof value.content !== "string"
|
|
74
|
+
|| value.created !== undefined && typeof value.created !== "boolean") {
|
|
75
|
+
// The worker reports which budget or invariant failed. Preserve it: a
|
|
76
|
+
// bare failure here is what made this path undiagnosable from CI logs.
|
|
77
|
+
pending.reject(parseOrganizationHandoffAuthorityFailureDetail(value.failure) ?? { code: "worker_rejected" });
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
pending.resolve(value);
|
|
81
|
+
}
|
|
82
|
+
request(op, file, content) {
|
|
83
|
+
if (this.#closed)
|
|
84
|
+
return Promise.reject(createOrganizationHandoffAuthorityError({ code: "client_closed" }));
|
|
85
|
+
if (content !== undefined && bytes(content) > MAX_BYTES)
|
|
86
|
+
return Promise.reject(createOrganizationHandoffAuthorityError({ code: "content_too_large", state: `bytes=${bytes(content)} limit=${MAX_BYTES}` }));
|
|
87
|
+
const id = this.#next++;
|
|
88
|
+
const packet = { version: VERSION, id, op, name: name(file), ...(content === undefined ? {} : { content }) };
|
|
89
|
+
const size = bytes(JSON.stringify(packet));
|
|
90
|
+
if (size > MAX_BYTES)
|
|
91
|
+
return Promise.reject(createOrganizationHandoffAuthorityError({ code: "packet_too_large", state: `bytes=${size} limit=${MAX_BYTES}` }));
|
|
92
|
+
return new Promise((resolve, reject) => {
|
|
93
|
+
const startedAt = performance.now();
|
|
94
|
+
const settle = (detail) => {
|
|
95
|
+
clearTimeout(timer);
|
|
96
|
+
reject(createOrganizationHandoffAuthorityError(detail ?? { code: "request_failed" }));
|
|
97
|
+
};
|
|
98
|
+
const timer = setTimeout(() => {
|
|
99
|
+
this.#pending.delete(id);
|
|
100
|
+
settle({ budget: "client_request", code: "client_request_deadline", elapsedMs: performance.now() - startedAt, limitMs: REQUEST_DEADLINE_MS, state: `op=${op}` });
|
|
101
|
+
}, REQUEST_DEADLINE_MS);
|
|
102
|
+
this.#pending.set(id, {
|
|
103
|
+
reject: (detail) => settle(detail === undefined ? detail : { ...detail, state: `${detail.state === undefined ? "" : `${detail.state} `}op=${op}` }),
|
|
104
|
+
resolve: (value) => { clearTimeout(timer); resolve(value); }
|
|
105
|
+
});
|
|
106
|
+
if (!this.#child.send(packet)) {
|
|
107
|
+
clearTimeout(timer);
|
|
108
|
+
this.#pending.delete(id);
|
|
109
|
+
reject(createOrganizationHandoffAuthorityError({ code: "worker_send_failed", state: `op=${op}` }));
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async create(file, content) {
|
|
114
|
+
const result = await this.request("create", file, content);
|
|
115
|
+
return result.created === true;
|
|
116
|
+
}
|
|
117
|
+
async read(file) { return (await this.request("read", file)).content ?? null; }
|
|
118
|
+
async write(file, content) { await this.request("write", file, content); }
|
|
119
|
+
async dispose() {
|
|
120
|
+
if (this.#closed)
|
|
121
|
+
return;
|
|
122
|
+
this.#closed = true;
|
|
123
|
+
this.rejectPending("client_disposed");
|
|
124
|
+
if (!this.terminal()) {
|
|
125
|
+
if (this.#child.connected) {
|
|
126
|
+
try {
|
|
127
|
+
this.#child.disconnect();
|
|
128
|
+
}
|
|
129
|
+
catch { /* already disconnected */ }
|
|
130
|
+
}
|
|
131
|
+
this.#child.kill();
|
|
132
|
+
}
|
|
133
|
+
let clear;
|
|
134
|
+
const graceful = await Promise.race([this.#exited.then(() => true), new Promise((resolve) => {
|
|
135
|
+
const timer = setTimeout(() => resolve(false), DISPOSE_GRACE_MS);
|
|
136
|
+
clear = () => clearTimeout(timer);
|
|
137
|
+
})]);
|
|
138
|
+
clear?.();
|
|
139
|
+
if (!graceful && !this.terminal())
|
|
140
|
+
this.#child.kill("SIGKILL");
|
|
141
|
+
await this.#exited;
|
|
142
|
+
this.#child.stdout?.destroy();
|
|
143
|
+
this.#child.stderr?.destroy();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
export const initializeOrganizationHandoffAuthorityFsClient = async (options) => {
|
|
147
|
+
const source = import.meta.url.endsWith(".ts");
|
|
148
|
+
const workerPath = options.workerPath ?? fileURLToPath(new URL(source ? "./organizationHandoffAuthorityFsWorker.ts" : "./organizationHandoffAuthorityFsWorker.js", import.meta.url));
|
|
149
|
+
const tsWorker = workerPath.endsWith(".ts");
|
|
150
|
+
// The helper's cwd is the protected state directory, which is intentionally
|
|
151
|
+
// outside the repository. Resolve the source loader before changing cwd so
|
|
152
|
+
// source-mode tests do not depend on module lookup from that directory.
|
|
153
|
+
const tsxLoader = tsWorker ? createRequire(import.meta.url).resolve("tsx") : undefined;
|
|
154
|
+
const child = fork(workerPath, [], { cwd: options.cwd, env: { SPAWNFILE_AUTHORITY_FS_ANCHOR: JSON.stringify({ dev: options.dev, ino: options.ino, uid: options.uid, parent_pid: options.parentPid ?? process.pid }) }, silent: true, ...(tsxLoader === undefined ? {} : { execArgv: ["--import", tsxLoader] }) });
|
|
155
|
+
const client = new Client(child);
|
|
156
|
+
options.testOnChildStarted?.(child);
|
|
157
|
+
const startedAt = performance.now();
|
|
158
|
+
let detail = { code: "worker_ready_failed" };
|
|
159
|
+
try {
|
|
160
|
+
await new Promise((resolve, reject) => {
|
|
161
|
+
let timer;
|
|
162
|
+
const message = (raw) => { if (typeof raw === "object" && raw !== null && raw.ready === true)
|
|
163
|
+
doneResolve(); };
|
|
164
|
+
const exited = () => doneReject("worker_exited_before_ready");
|
|
165
|
+
const errored = () => doneReject("worker_errored_before_ready");
|
|
166
|
+
const clean = () => { clearTimeout(timer); child.off("message", message); child.off("exit", exited); child.off("error", errored); };
|
|
167
|
+
function doneResolve() { clean(); resolve(); }
|
|
168
|
+
function doneReject(code) {
|
|
169
|
+
clean();
|
|
170
|
+
detail = {
|
|
171
|
+
budget: "worker_ready", code, elapsedMs: performance.now() - startedAt, limitMs: READY_DEADLINE_MS,
|
|
172
|
+
state: `source=${String(tsWorker)} exit=${String(child.exitCode)} signal=${String(child.signalCode)}`
|
|
173
|
+
};
|
|
174
|
+
reject(createOrganizationHandoffAuthorityError(detail));
|
|
175
|
+
}
|
|
176
|
+
timer = setTimeout(() => doneReject("worker_ready_deadline"), READY_DEADLINE_MS);
|
|
177
|
+
child.on("message", message);
|
|
178
|
+
child.once("exit", exited);
|
|
179
|
+
child.once("error", errored);
|
|
180
|
+
});
|
|
181
|
+
return client;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
await client.dispose();
|
|
185
|
+
throw createOrganizationHandoffAuthorityError(detail);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Stats } from "node:fs";
|
|
2
|
+
export type AuthorityLeafStat = Stats;
|
|
3
|
+
export type AuthorityLstat = (name: string) => Promise<AuthorityLeafStat>;
|
|
4
|
+
export interface AuthorityLeafInspector {
|
|
5
|
+
/** Every leaf that could legitimately hold the other end of a two-link publication. */
|
|
6
|
+
aliasesOf(name: string): readonly string[];
|
|
7
|
+
/**
|
|
8
|
+
* Whether an observed publication race is one the caller may retry.
|
|
9
|
+
*
|
|
10
|
+
* `true` permits a retry, `false` fails closed, and `null` reports that the
|
|
11
|
+
* leaf is simply absent.
|
|
12
|
+
*/
|
|
13
|
+
expectedElectionState(name: string): Promise<boolean | null>;
|
|
14
|
+
/** Stat a leaf, rejecting anything that is not an ordinary owned record. */
|
|
15
|
+
statFile(name: string): Promise<AuthorityLeafStat | null>;
|
|
16
|
+
}
|
|
17
|
+
export interface AuthorityLeafInspectorOptions {
|
|
18
|
+
readonly lstat?: AuthorityLstat;
|
|
19
|
+
readonly owner?: number;
|
|
20
|
+
}
|
|
21
|
+
export declare const createAuthorityLeafInspector: (options?: AuthorityLeafInspectorOptions) => AuthorityLeafInspector;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { lstat as nodeLstat } from "node:fs/promises";
|
|
2
|
+
import { OrganizationHandoffAuthorityFailure } from "./organizationHandoffAuthorityFsBudget.js";
|
|
3
|
+
/**
|
|
4
|
+
* Leaf inspection and link-election admission for the organization handoff
|
|
5
|
+
* filesystem authority.
|
|
6
|
+
*
|
|
7
|
+
* These three functions decide whether a failed read may be retried or must
|
|
8
|
+
* fail closed, which makes them the authority's most consequential branch and
|
|
9
|
+
* the reason they live behind an injectable `lstat`: the interesting states
|
|
10
|
+
* are mid-race interleavings that cannot be staged on a real filesystem.
|
|
11
|
+
*/
|
|
12
|
+
const MAX_BYTES = 32_768;
|
|
13
|
+
const fail = (code) => { throw new OrganizationHandoffAuthorityFailure({ code }); };
|
|
14
|
+
export const createAuthorityLeafInspector = (options = {}) => {
|
|
15
|
+
const lstat = options.lstat ?? nodeLstat;
|
|
16
|
+
const owner = options.owner;
|
|
17
|
+
const statFile = async (name) => {
|
|
18
|
+
const stat = await lstat(name).catch((error) => error.code === "ENOENT" ? null : fail("lstat_failed"));
|
|
19
|
+
if (stat === null)
|
|
20
|
+
return null;
|
|
21
|
+
if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink > 2 || stat.size > MAX_BYTES || (stat.mode & 0o077) !== 0
|
|
22
|
+
|| owner !== undefined && stat.uid !== owner)
|
|
23
|
+
return fail("leaf_not_ordinary");
|
|
24
|
+
return stat;
|
|
25
|
+
};
|
|
26
|
+
const aliasesOf = (name) => [
|
|
27
|
+
`${name}.pending`, `${name}.recovery`,
|
|
28
|
+
...(name.endsWith(".pending") ? [name.slice(0, -".pending".length)] : []),
|
|
29
|
+
...(name.endsWith(".recovery") ? [name.slice(0, -".recovery".length)] : [])
|
|
30
|
+
];
|
|
31
|
+
const expectedElectionState = async (name) => {
|
|
32
|
+
let stat = await statFile(name);
|
|
33
|
+
if (stat === null)
|
|
34
|
+
return null;
|
|
35
|
+
if (stat.nlink === 1)
|
|
36
|
+
return true;
|
|
37
|
+
for (const alias of aliasesOf(name)) {
|
|
38
|
+
const counterpart = await lstat(alias).catch((error) => error.code === "ENOENT" ? null : fail("election_lstat_failed"));
|
|
39
|
+
if (counterpart?.isFile() && !counterpart.isSymbolicLink() && counterpart.nlink === 2 && counterpart.dev === stat.dev && counterpart.ino === stat.ino)
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
// The counterpart may have disappeared just before this check. Accept only
|
|
43
|
+
// the resulting ordinary single-link state, never an unknown hard link.
|
|
44
|
+
//
|
|
45
|
+
// The leaf itself may also have gone: the helper that won the election
|
|
46
|
+
// unlinks its staging sidecar immediately after linking the final record,
|
|
47
|
+
// so a peer that observed the sidecar at two links can find it absent one
|
|
48
|
+
// syscall later. That is an absence, not an unknown link. Reporting it as
|
|
49
|
+
// a rejected election turned a benign, converging race into a hard failure
|
|
50
|
+
// for the losing publisher.
|
|
51
|
+
stat = await statFile(name);
|
|
52
|
+
if (stat === null)
|
|
53
|
+
return null;
|
|
54
|
+
return stat.nlink === 1;
|
|
55
|
+
};
|
|
56
|
+
return { aliasesOf, expectedElectionState, statFile };
|
|
57
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|