spawnfile 0.1.14 → 0.1.18
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 +46 -5
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/paths.d.ts +1 -1
- package/dist/auth/profileStore.js +13 -10
- 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/trainingGrokWriteback.d.ts +4 -0
- package/dist/auth/trainingGrokWriteback.js +119 -0
- package/dist/auth/trainingGrokWritebackLock.d.ts +5 -0
- package/dist/auth/trainingGrokWritebackLock.js +56 -0
- package/dist/auth/types.d.ts +1 -1
- package/dist/cli/authCommands.d.ts +1 -1
- package/dist/cli/authCommands.js +18 -5
- 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 +17 -0
- package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
- package/dist/cli/composedLifecycleContractSet.js +204 -0
- package/dist/cli/devCommands.js +6 -2
- package/dist/cli/downCommand.d.ts +2 -0
- package/dist/cli/downCommand.js +22 -8
- package/dist/cli/envFileOption.d.ts +18 -0
- package/dist/cli/envFileOption.js +20 -0
- 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/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +3 -1
- package/dist/cli/lifecycleMachine.d.ts +7 -1
- package/dist/cli/lifecycleMachine.js +2 -2
- package/dist/cli/lifecyclePlan.d.ts +1 -0
- package/dist/cli/lifecyclePlan.js +2 -0
- package/dist/cli/paideiaDelegation.d.ts +18 -0
- package/dist/cli/paideiaDelegation.js +211 -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/recordCommands.d.ts +17 -0
- package/dist/cli/recordCommands.js +43 -0
- package/dist/cli/releaseCommand.d.ts +6 -0
- package/dist/cli/releaseCommand.js +91 -0
- package/dist/cli/runCli.d.ts +19 -3
- package/dist/cli/runCli.js +43 -10
- package/dist/cli/runPublishCommands.js +5 -3
- 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 +114 -0
- package/dist/cli/upCommand.js +40 -7
- 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/volumeCommands.d.ts +8 -0
- package/dist/cli/volumeCommands.js +53 -0
- package/dist/cli/workspaceResourceMigrationCommand.d.ts +8 -0
- package/dist/cli/workspaceResourceMigrationCommand.js +36 -0
- package/dist/compiler/agentNodeMerge.js +3 -2
- package/dist/compiler/buildCompilePlan.js +4 -0
- package/dist/compiler/buildCompilePlanAgent.js +3 -1
- package/dist/compiler/buildCompilePlanTeams.d.ts +1 -1
- package/dist/compiler/buildCompilePlanTeams.js +6 -1
- package/dist/compiler/buildCompilePlanTraversal.js +2 -0
- package/dist/compiler/buildCompilePlanTraversalHelpers.d.ts +2 -2
- package/dist/compiler/buildCompilePlanTraversalHelpers.js +4 -3
- package/dist/compiler/buildProject.d.ts +10 -0
- package/dist/compiler/buildProject.js +14 -2
- package/dist/compiler/cleanCompileOutput.d.ts +2 -0
- package/dist/compiler/cleanCompileOutput.js +14 -0
- package/dist/compiler/compilePlanHelpers.js +5 -0
- package/dist/compiler/compileProject.d.ts +12 -0
- package/dist/compiler/compileProject.js +33 -3
- package/dist/compiler/compileProjectSupport.js +9 -0
- package/dist/compiler/containerArtifactSummaries.js +1 -0
- package/dist/compiler/containerArtifacts.d.ts +7 -5
- package/dist/compiler/containerArtifacts.js +77 -41
- package/dist/compiler/containerArtifactsPlans.d.ts +1 -1
- package/dist/compiler/containerArtifactsPlans.js +31 -7
- package/dist/compiler/containerArtifactsRender.d.ts +2 -1
- package/dist/compiler/containerArtifactsRender.js +91 -58
- package/dist/compiler/containerArtifactsTypes.d.ts +15 -0
- package/dist/compiler/containerBackedMountRender.d.ts +56 -0
- package/dist/compiler/containerBackedMountRender.js +101 -0
- package/dist/compiler/containerDaimonBrokerRender.d.ts +114 -0
- package/dist/compiler/containerDaimonBrokerRender.js +194 -0
- package/dist/compiler/containerDaimonGrokTaskClock.d.ts +5 -0
- package/dist/compiler/containerDaimonGrokTaskClock.js +29 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +130 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +197 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.js +281 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +25 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.js +204 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.js +291 -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 +32 -1
- package/dist/compiler/containerTargetResources.js +115 -15
- package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
- package/dist/compiler/containerVolumeBootstrap.js +3 -0
- package/dist/compiler/containerWorkspaceResourceRender.js +52 -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 +5 -0
- package/dist/compiler/index.js +5 -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/mcpPlaceholders.d.ts +11 -0
- package/dist/compiler/mcpPlaceholders.js +58 -0
- package/dist/compiler/mcpServerInheritance.d.ts +18 -0
- package/dist/compiler/mcpServerInheritance.js +43 -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 +11 -0
- package/dist/compiler/moltnetArtifacts.d.ts +1 -1
- package/dist/compiler/moltnetArtifacts.js +53 -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/preflightCompilePlan.d.ts +9 -0
- package/dist/compiler/preflightCompilePlan.js +38 -0
- package/dist/compiler/recordingAgentFacts.d.ts +4 -0
- package/dist/compiler/recordingAgentFacts.js +35 -0
- package/dist/compiler/recordingCapability.d.ts +4 -0
- package/dist/compiler/recordingCapability.js +22 -0
- package/dist/compiler/recordingReport.d.ts +4 -0
- package/dist/compiler/recordingReport.js +18 -0
- package/dist/compiler/runProject.d.ts +6 -3
- package/dist/compiler/runProject.js +34 -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/surfaces.d.ts +1 -2
- package/dist/compiler/surfaces.js +0 -1
- package/dist/compiler/syncProjectAuth.js +2 -1
- package/dist/compiler/training/broker/clockProbe.d.ts +6 -0
- package/dist/compiler/training/broker/clockProbe.js +27 -0
- package/dist/compiler/training/broker/declaration.d.ts +47 -0
- package/dist/compiler/training/broker/declaration.js +57 -0
- package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
- package/dist/compiler/training/broker/entrypoint.js +126 -0
- package/dist/compiler/training/broker/evaluatorSecrets.d.ts +2 -0
- package/dist/compiler/training/broker/evaluatorSecrets.js +60 -0
- package/dist/compiler/training/broker/index.d.ts +11 -0
- package/dist/compiler/training/broker/index.js +11 -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 +236 -0
- package/dist/compiler/training/broker/paths.js +249 -0
- package/dist/compiler/training/broker/processes.d.ts +51 -0
- package/dist/compiler/training/broker/processes.js +102 -0
- package/dist/compiler/training/broker/projection.d.ts +52 -0
- package/dist/compiler/training/broker/projection.js +88 -0
- package/dist/compiler/training/broker/provisioning.d.ts +78 -0
- package/dist/compiler/training/broker/provisioning.js +231 -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 +43 -0
- package/dist/compiler/training/broker/registration.js +110 -0
- package/dist/compiler/training/broker/reset.d.ts +9 -0
- package/dist/compiler/training/broker/reset.js +71 -0
- package/dist/compiler/training/broker/runtime.d.ts +22 -0
- package/dist/compiler/training/broker/runtime.js +127 -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 +108 -0
- package/dist/compiler/training/broker/supervisor.js +172 -0
- package/dist/compiler/training/broker/taskClock.d.ts +5 -0
- package/dist/compiler/training/broker/taskClock.js +41 -0
- package/dist/compiler/training/compiledAgent.d.ts +21 -0
- package/dist/compiler/training/compiledAgent.js +62 -0
- package/dist/compiler/training/container/contract.d.ts +54 -0
- package/dist/compiler/training/container/contract.js +51 -0
- package/dist/compiler/training/container/evaluators.d.ts +48 -0
- package/dist/compiler/training/container/evaluators.js +50 -0
- package/dist/compiler/training/container/grokWriteback.d.ts +8 -0
- package/dist/compiler/training/container/grokWriteback.js +26 -0
- package/dist/compiler/training/container/index.d.ts +5 -0
- package/dist/compiler/training/container/index.js +3 -0
- package/dist/compiler/training/container/launch.d.ts +21 -0
- package/dist/compiler/training/container/launch.js +264 -0
- package/dist/compiler/training/container/nativeSlots.d.ts +14 -0
- package/dist/compiler/training/container/nativeSlots.js +13 -0
- package/dist/compiler/training/container/outputCopy.d.ts +2 -0
- package/dist/compiler/training/container/outputCopy.js +72 -0
- package/dist/compiler/training/container/outputVolume.d.ts +27 -0
- package/dist/compiler/training/container/outputVolume.js +161 -0
- package/dist/compiler/training/container/prepare.d.ts +10 -0
- package/dist/compiler/training/container/prepare.js +125 -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 +38 -0
- package/dist/compiler/training/container/security.js +68 -0
- package/dist/compiler/training/container/subjectIsolation.d.ts +5 -0
- package/dist/compiler/training/container/subjectIsolation.js +15 -0
- package/dist/compiler/training/context.d.ts +15 -0
- package/dist/compiler/training/context.js +93 -0
- package/dist/compiler/training/contract.d.ts +144 -0
- package/dist/compiler/training/contract.js +36 -0
- package/dist/compiler/training/execution.d.ts +417 -0
- package/dist/compiler/training/execution.js +160 -0
- package/dist/compiler/training/index.d.ts +12 -0
- package/dist/compiler/training/index.js +10 -0
- package/dist/compiler/training/moments.d.ts +80 -0
- package/dist/compiler/training/moments.js +118 -0
- package/dist/compiler/training/output.d.ts +2 -0
- package/dist/compiler/training/output.js +20 -0
- package/dist/compiler/training/plan/contract.d.ts +287 -0
- package/dist/compiler/training/plan/contract.js +49 -0
- package/dist/compiler/training/plan/index.d.ts +5 -0
- package/dist/compiler/training/plan/index.js +4 -0
- package/dist/compiler/training/plan/load.d.ts +9 -0
- package/dist/compiler/training/plan/load.js +153 -0
- package/dist/compiler/training/plan/references.d.ts +19 -0
- package/dist/compiler/training/plan/references.js +57 -0
- package/dist/compiler/training/plan/resolve.d.ts +4 -0
- package/dist/compiler/training/plan/resolve.js +73 -0
- package/dist/compiler/training/plan/targets.d.ts +11 -0
- package/dist/compiler/training/plan/targets.js +71 -0
- package/dist/compiler/training/plan/types.d.ts +36 -0
- package/dist/compiler/training/plan/types.js +1 -0
- package/dist/compiler/training/preparation/assets/Dockerfile +109 -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 +45 -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 +207 -0
- package/dist/compiler/training/preparation/contract.js +113 -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 +29 -0
- package/dist/compiler/training/preparation/files.js +146 -0
- package/dist/compiler/training/preparation/image.d.ts +28 -0
- package/dist/compiler/training/preparation/image.js +107 -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 +24 -0
- package/dist/compiler/training/preparation/inputs.js +101 -0
- package/dist/compiler/training/preparation/prepare.d.ts +38 -0
- package/dist/compiler/training/preparation/prepare.js +223 -0
- package/dist/compiler/training/preparation/scratch.d.ts +8 -0
- package/dist/compiler/training/preparation/scratch.js +114 -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 +840 -0
- package/dist/compiler/training/repair/contract.js +33 -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 +382 -0
- package/dist/compiler/training/repair/prepare.js +78 -0
- package/dist/compiler/training/repair/witness.d.ts +352 -0
- package/dist/compiler/training/repair/witness.js +48 -0
- package/dist/compiler/training/resolution.d.ts +25 -0
- package/dist/compiler/training/resolution.js +69 -0
- package/dist/compiler/training/rewind/contract.d.ts +321 -0
- package/dist/compiler/training/rewind/contract.js +39 -0
- package/dist/compiler/training/rewind/deployedResource.d.ts +22 -0
- package/dist/compiler/training/rewind/deployedResource.js +19 -0
- package/dist/compiler/training/rewind/feed.d.ts +12 -0
- package/dist/compiler/training/rewind/feed.js +182 -0
- package/dist/compiler/training/rewind/feedContent.d.ts +6 -0
- package/dist/compiler/training/rewind/feedContent.js +38 -0
- package/dist/compiler/training/rewind/git.d.ts +8 -0
- package/dist/compiler/training/rewind/git.js +159 -0
- package/dist/compiler/training/rewind/gitArchive.d.ts +2 -0
- package/dist/compiler/training/rewind/gitArchive.js +7 -0
- package/dist/compiler/training/rewind/gitHistory.d.ts +3 -0
- package/dist/compiler/training/rewind/gitHistory.js +55 -0
- package/dist/compiler/training/rewind/gitProcess.d.ts +19 -0
- package/dist/compiler/training/rewind/gitProcess.js +81 -0
- package/dist/compiler/training/rewind/gitTree.d.ts +14 -0
- package/dist/compiler/training/rewind/gitTree.js +90 -0
- package/dist/compiler/training/rewind/history.d.ts +28 -0
- package/dist/compiler/training/rewind/history.js +239 -0
- package/dist/compiler/training/rewind/index.d.ts +18 -0
- package/dist/compiler/training/rewind/index.js +15 -0
- package/dist/compiler/training/rewind/inputs.d.ts +9 -0
- package/dist/compiler/training/rewind/inputs.js +67 -0
- package/dist/compiler/training/rewind/instant.d.ts +4 -0
- package/dist/compiler/training/rewind/instant.js +24 -0
- package/dist/compiler/training/rewind/leakCheck.d.ts +10 -0
- package/dist/compiler/training/rewind/leakCheck.js +56 -0
- package/dist/compiler/training/rewind/leakFeed.d.ts +5 -0
- package/dist/compiler/training/rewind/leakFeed.js +25 -0
- package/dist/compiler/training/rewind/leakFiles.d.ts +10 -0
- package/dist/compiler/training/rewind/leakFiles.js +106 -0
- package/dist/compiler/training/rewind/leakGit.d.ts +3 -0
- package/dist/compiler/training/rewind/leakGit.js +78 -0
- package/dist/compiler/training/rewind/leakGitPayload.d.ts +4 -0
- package/dist/compiler/training/rewind/leakGitPayload.js +57 -0
- package/dist/compiler/training/rewind/leakInputs.d.ts +7 -0
- package/dist/compiler/training/rewind/leakInputs.js +135 -0
- package/dist/compiler/training/rewind/leakLayout.d.ts +2 -0
- package/dist/compiler/training/rewind/leakLayout.js +17 -0
- package/dist/compiler/training/rewind/leakProvenance.d.ts +3 -0
- package/dist/compiler/training/rewind/leakProvenance.js +88 -0
- package/dist/compiler/training/rewind/materialize.d.ts +136 -0
- package/dist/compiler/training/rewind/materialize.js +212 -0
- package/dist/compiler/training/rewind/memory.d.ts +10 -0
- package/dist/compiler/training/rewind/memory.js +84 -0
- package/dist/compiler/training/rewind/memorySchemas.d.ts +87 -0
- package/dist/compiler/training/rewind/memorySchemas.js +50 -0
- package/dist/compiler/training/rewind/moltnet.d.ts +2 -0
- package/dist/compiler/training/rewind/moltnet.js +54 -0
- package/dist/compiler/training/rewind/moltnetJson.d.ts +13 -0
- package/dist/compiler/training/rewind/moltnetJson.js +180 -0
- package/dist/compiler/training/rewind/moltnetSchemas.d.ts +1226 -0
- package/dist/compiler/training/rewind/moltnetSchemas.js +75 -0
- package/dist/compiler/training/rewind/moltnetSqlite.d.ts +31 -0
- package/dist/compiler/training/rewind/moltnetSqlite.js +192 -0
- package/dist/compiler/training/rewind/moltnetSqliteData.d.ts +10 -0
- package/dist/compiler/training/rewind/moltnetSqliteData.js +113 -0
- package/dist/compiler/training/rewind/recordInput.d.ts +40 -0
- package/dist/compiler/training/rewind/recordInput.js +49 -0
- package/dist/compiler/training/rewind/recordedBundle.d.ts +4 -0
- package/dist/compiler/training/rewind/recordedBundle.js +58 -0
- package/dist/compiler/training/rewind/recordedCommit.d.ts +2 -0
- package/dist/compiler/training/rewind/recordedCommit.js +10 -0
- package/dist/compiler/training/rewind/select.d.ts +18 -0
- package/dist/compiler/training/rewind/select.js +64 -0
- package/dist/compiler/training/rewind/snapshotManifest.d.ts +42 -0
- package/dist/compiler/training/rewind/snapshotManifest.js +134 -0
- package/dist/compiler/training/rewind/taskClock.d.ts +12 -0
- package/dist/compiler/training/rewind/taskClock.js +40 -0
- package/dist/compiler/training/rewind/timestamps.d.ts +4 -0
- package/dist/compiler/training/rewind/timestamps.js +26 -0
- package/dist/compiler/training/rewind/types.d.ts +43 -0
- package/dist/compiler/training/rewind/types.js +1 -0
- package/dist/compiler/training/rewind/volumes.d.ts +12 -0
- package/dist/compiler/training/rewind/volumes.js +58 -0
- package/dist/compiler/training/selection.d.ts +7 -0
- package/dist/compiler/training/selection.js +15 -0
- package/dist/compiler/types.d.ts +7 -2
- package/dist/compiler/upProject.d.ts +27 -1
- package/dist/compiler/upProject.js +135 -180
- 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 +18 -0
- package/dist/compiler/workspaceBundleArtifacts.js +155 -0
- package/dist/compiler/workspaceBundleCache.d.ts +23 -0
- package/dist/compiler/workspaceBundleCache.js +79 -0
- package/dist/compiler/workspaceBundleDependencies.d.ts +21 -0
- package/dist/compiler/workspaceBundleDependencies.js +122 -0
- package/dist/compiler/workspaceBundleFiles.d.ts +51 -0
- package/dist/compiler/workspaceBundleFiles.js +251 -0
- package/dist/compiler/workspaceBundleGenerated.d.ts +25 -0
- package/dist/compiler/workspaceBundleGenerated.js +103 -0
- package/dist/compiler/workspaceBundleGit.d.ts +64 -0
- package/dist/compiler/workspaceBundleGit.js +154 -0
- package/dist/compiler/workspaceBundleKey.d.ts +34 -0
- package/dist/compiler/workspaceBundleKey.js +17 -0
- package/dist/compiler/workspaceBundleResolve.d.ts +56 -0
- package/dist/compiler/workspaceBundleResolve.js +144 -0
- package/dist/compiler/workspaceBundleRun.d.ts +41 -0
- package/dist/compiler/workspaceBundleRun.js +79 -0
- package/dist/compiler/workspaceBundleTar.d.ts +47 -0
- package/dist/compiler/workspaceBundleTar.js +140 -0
- package/dist/compiler/workspaceBundleTree.d.ts +15 -0
- package/dist/compiler/workspaceBundleTree.js +58 -0
- package/dist/compiler/workspaceGitFetch.d.ts +41 -0
- package/dist/compiler/workspaceGitFetch.js +155 -0
- package/dist/compiler/workspaceGitPins.d.ts +33 -0
- package/dist/compiler/workspaceGitPins.js +127 -0
- package/dist/compiler/workspaceResources.d.ts +9 -2
- package/dist/compiler/workspaceResources.js +39 -7
- package/dist/deployment/activation.d.ts +3 -0
- package/dist/deployment/activation.js +12 -0
- 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/candidateRecording.d.ts +8 -0
- package/dist/deployment/candidateRecording.js +22 -0
- package/dist/deployment/dockerLogs.js +4 -1
- package/dist/deployment/dockerManager.d.ts +5 -3
- package/dist/deployment/dockerManager.js +21 -5
- package/dist/deployment/dockerProbeGateway.d.ts +17 -0
- package/dist/deployment/dockerProbeGateway.js +17 -2
- package/dist/deployment/downDeployment.d.ts +7 -0
- package/dist/deployment/downDeployment.js +114 -9
- package/dist/deployment/downReceiptTypes.d.ts +17 -2
- package/dist/deployment/downReceiptTypes.js +17 -2
- package/dist/deployment/homeStore.d.ts +9 -1
- package/dist/deployment/homeStore.js +16 -53
- package/dist/deployment/index.d.ts +10 -0
- package/dist/deployment/index.js +10 -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/pidLock.d.ts +25 -0
- package/dist/deployment/pidLock.js +81 -0
- package/dist/deployment/productStateClone.d.ts +43 -0
- package/dist/deployment/productStateClone.js +319 -0
- package/dist/deployment/record.d.ts +85 -1
- package/dist/deployment/record.js +11 -5
- package/dist/deployment/recordPublication.d.ts +15 -0
- package/dist/deployment/recordPublication.js +76 -0
- package/dist/deployment/recordedMemoryRetention.d.ts +18 -0
- package/dist/deployment/recordedMemoryRetention.js +27 -0
- package/dist/deployment/resourceLog.d.ts +140 -0
- package/dist/deployment/resourceLog.js +78 -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/buildDistributionReport.d.ts +3 -0
- package/dist/distribution/buildDistributionReport.js +5 -0
- package/dist/distribution/consumeImage.d.ts +5 -0
- package/dist/distribution/consumeImage.js +115 -98
- package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
- package/dist/distribution/consumeImageDaimonDocker.js +45 -0
- package/dist/distribution/consumeImageLifecycle.d.ts +20 -0
- package/dist/distribution/consumeImageLifecycle.js +242 -0
- package/dist/distribution/consumeImageSupport.d.ts +19 -0
- package/dist/distribution/consumeImageSupport.js +40 -0
- package/dist/distribution/distributionReportSchema.d.ts +58 -1
- package/dist/distribution/distributionReportSchema.js +35 -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/renderImageInterface.js +1 -1
- package/dist/distribution/types.d.ts +29 -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/durableWrite.d.ts +10 -0
- package/dist/filesystem/durableWrite.js +87 -0
- package/dist/filesystem/index.d.ts +2 -0
- package/dist/filesystem/index.js +2 -0
- package/dist/filesystem/io.d.ts +2 -0
- package/dist/filesystem/io.js +16 -1
- package/dist/filesystem/retainedJsonl.d.ts +23 -0
- package/dist/filesystem/retainedJsonl.js +123 -0
- package/dist/manifest/commandSchemas.d.ts +5 -0
- package/dist/manifest/commandSchemas.js +5 -0
- package/dist/manifest/executionSchemas.d.ts +47 -0
- package/dist/manifest/executionSchemas.js +31 -2
- package/dist/manifest/index.d.ts +2 -0
- package/dist/manifest/index.js +2 -0
- package/dist/manifest/loadManifest.js +3 -26
- package/dist/manifest/mcpSchemas.d.ts +62 -0
- package/dist/manifest/mcpSchemas.js +57 -8
- package/dist/manifest/memorySchemas.d.ts +1 -1
- package/dist/manifest/memorySchemas.js +1 -1
- package/dist/manifest/parseManifest.d.ts +7 -0
- package/dist/manifest/parseManifest.js +65 -0
- package/dist/manifest/renderSpawnfile.js +4 -1
- package/dist/manifest/renderSpawnfileNetworks.js +11 -0
- package/dist/manifest/renderSpawnfileWorkspace.js +10 -1
- package/dist/manifest/scheduleSchemas.d.ts +3 -1
- package/dist/manifest/scheduleSchemas.js +91 -5
- package/dist/manifest/schemas.d.ts +1419 -120
- package/dist/manifest/schemas.js +19 -6
- 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 +18 -4
- 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/trainingDataSchemas.d.ts +357 -0
- package/dist/manifest/trainingDataSchemas.js +31 -0
- package/dist/manifest/trainingSchemas.d.ts +49 -0
- package/dist/manifest/trainingSchemas.js +44 -0
- package/dist/manifest/volumeFeedSchemas.d.ts +52 -0
- package/dist/manifest/volumeFeedSchemas.js +104 -0
- package/dist/manifest/workspaceSchemas.d.ts +194 -1
- package/dist/manifest/workspaceSchemas.js +117 -2
- package/dist/recording/compose.d.ts +3 -0
- package/dist/recording/compose.js +93 -0
- package/dist/recording/deployment.d.ts +15 -0
- package/dist/recording/deployment.js +38 -0
- package/dist/recording/history.d.ts +16 -0
- package/dist/recording/history.js +47 -0
- package/dist/recording/index.d.ts +9 -0
- package/dist/recording/index.js +9 -0
- package/dist/recording/moment.d.ts +61 -0
- package/dist/recording/moment.js +36 -0
- package/dist/recording/parse.d.ts +15 -0
- package/dist/recording/parse.js +74 -0
- package/dist/recording/read.d.ts +8 -0
- package/dist/recording/read.js +61 -0
- package/dist/recording/store.d.ts +10 -0
- package/dist/recording/store.js +94 -0
- package/dist/recording/sync.d.ts +24 -0
- package/dist/recording/sync.js +126 -0
- package/dist/recording/types.d.ts +45 -0
- package/dist/recording/types.js +2 -0
- package/dist/release/drainControl.d.ts +54 -0
- package/dist/release/drainControl.js +137 -0
- package/dist/release/drainPhase.d.ts +37 -0
- package/dist/release/drainPhase.js +161 -0
- package/dist/release/index.d.ts +11 -0
- package/dist/release/index.js +11 -0
- package/dist/release/ledger.d.ts +75 -0
- package/dist/release/ledger.js +111 -0
- package/dist/release/notify.d.ts +58 -0
- package/dist/release/notify.js +126 -0
- package/dist/release/pending.d.ts +35 -0
- package/dist/release/pending.js +60 -0
- package/dist/release/postDeploy.d.ts +32 -0
- package/dist/release/postDeploy.js +62 -0
- package/dist/release/releaseDefaults.d.ts +9 -0
- package/dist/release/releaseDefaults.js +115 -0
- package/dist/release/releaseDocker.d.ts +38 -0
- package/dist/release/releaseDocker.js +94 -0
- package/dist/release/releaseTypes.d.ts +94 -0
- package/dist/release/releaseTypes.js +1 -0
- package/dist/release/runRelease.d.ts +9 -0
- package/dist/release/runRelease.js +218 -0
- package/dist/release/swap.d.ts +23 -0
- package/dist/release/swap.js +55 -0
- package/dist/release/types.d.ts +50 -0
- package/dist/release/types.js +29 -0
- package/dist/report/index.d.ts +1 -0
- package/dist/report/index.js +1 -0
- package/dist/report/recording.d.ts +57 -0
- package/dist/report/recording.js +26 -0
- package/dist/report/types.d.ts +92 -4
- package/dist/runtime/common.d.ts +28 -1
- package/dist/runtime/common.js +33 -3
- package/dist/runtime/container.js +46 -35
- package/dist/runtime/daimon/adapter.d.ts +14 -0
- package/dist/runtime/daimon/adapter.js +254 -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 +29 -0
- package/dist/runtime/daimon/config.js +321 -0
- package/dist/runtime/daimon/contract-manifest.json +1 -0
- package/dist/runtime/daimon/contract-manifest.sha256 +1 -0
- package/dist/runtime/daimon/contractManifest.d.ts +346 -0
- package/dist/runtime/daimon/contractManifest.js +335 -0
- package/dist/runtime/daimon/grokModel.d.ts +19 -0
- package/dist/runtime/daimon/grokModel.js +33 -0
- package/dist/runtime/daimon/grokTurnLimits.d.ts +25 -0
- package/dist/runtime/daimon/grokTurnLimits.js +51 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +43 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.js +53 -0
- package/dist/runtime/daimon/grokWorkerContract.d.ts +27 -0
- package/dist/runtime/daimon/grokWorkerContract.js +60 -0
- package/dist/runtime/daimon/memory.d.ts +57 -0
- package/dist/runtime/daimon/memory.js +125 -0
- package/dist/runtime/daimon/recording.d.ts +19 -0
- package/dist/runtime/daimon/recording.js +50 -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 +11 -0
- package/dist/runtime/daimon/scheduleAuthority.js +31 -0
- package/dist/runtime/daimon/wakeMoments.d.ts +15 -0
- package/dist/runtime/daimon/wakeMoments.js +17 -0
- package/dist/runtime/daimonInstall.d.ts +3 -0
- package/dist/runtime/daimonInstall.js +25 -0
- package/dist/runtime/index.d.ts +5 -0
- package/dist/runtime/index.js +5 -0
- package/dist/runtime/install.d.ts +5 -0
- package/dist/runtime/install.js +4 -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 +5 -2
- package/dist/runtime/pi/adapter.d.ts +0 -1
- package/dist/runtime/pi/adapter.js +5 -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/pi/containerTargets.js +6 -0
- package/dist/runtime/picoclaw/adapter.js +5 -2
- package/dist/runtime/registry.d.ts +6 -0
- package/dist/runtime/registry.js +32 -3
- package/dist/runtime/scheduleUtils.d.ts +1 -0
- package/dist/runtime/scheduleUtils.js +5 -1
- package/dist/runtime/types.d.ts +40 -0
- package/dist/runtime/usageLedger.d.ts +158 -0
- package/dist/runtime/usageLedger.js +269 -0
- package/dist/runtime/usageLedgerRead.d.ts +54 -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 +3 -0
- package/dist/shared/index.js +3 -0
- package/dist/shared/recording.d.ts +8 -0
- package/dist/shared/recording.js +25 -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 +5 -3
- 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 +4 -4
- 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/dist/volume/feedLand.d.ts +31 -0
- package/dist/volume/feedLand.js +174 -0
- package/dist/volume/feedLandings.d.ts +45 -0
- package/dist/volume/feedLandings.js +111 -0
- package/dist/volume/feedLayout.d.ts +61 -0
- package/dist/volume/feedLayout.js +234 -0
- package/dist/volume/feedLock.d.ts +7 -0
- package/dist/volume/feedLock.js +131 -0
- package/dist/volume/feedManifest.d.ts +27 -0
- package/dist/volume/feedManifest.js +123 -0
- package/dist/volume/feedPrepare.d.ts +16 -0
- package/dist/volume/feedPrepare.js +228 -0
- package/dist/volume/feedProject.d.ts +39 -0
- package/dist/volume/feedProject.js +92 -0
- package/dist/volume/feedRecord.d.ts +55 -0
- package/dist/volume/feedRecord.js +148 -0
- package/dist/volume/feedRef.d.ts +43 -0
- package/dist/volume/feedRef.js +117 -0
- package/dist/volume/feedRefresh.d.ts +15 -0
- package/dist/volume/feedRefresh.js +187 -0
- package/dist/volume/feedSource.d.ts +66 -0
- package/dist/volume/feedSource.js +104 -0
- package/dist/volume/feedTarget.d.ts +70 -0
- package/dist/volume/feedTarget.js +9 -0
- package/dist/volume/feedTestKit.d.ts +11 -0
- package/dist/volume/feedTestKit.js +45 -0
- package/dist/volume/feedVerify.d.ts +18 -0
- package/dist/volume/feedVerify.js +104 -0
- package/dist/volume/index.d.ts +13 -0
- package/dist/volume/index.js +13 -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 +5 -4
- package/package.json +36 -9
- package/runtimes.yaml +8 -3
- 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
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { StringDecoder } from "node:string_decoder";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
// Daimon's generated organization image uses its Node standalone base (runtime metadata),
|
|
4
|
+
// and runs the Node daimon-runtime launcher. No optional container executable is required.
|
|
5
|
+
const readChunkScript = `
|
|
6
|
+
const fs = require('node:fs');
|
|
7
|
+
try {
|
|
8
|
+
const fd = fs.openSync(process.argv[1], 'r');
|
|
9
|
+
try {
|
|
10
|
+
const stat = fs.fstatSync(fd);
|
|
11
|
+
if (!stat.isFile()) throw {code:'NOT_REGULAR_FILE'};
|
|
12
|
+
const bytes = Buffer.alloc(Number(process.argv[3]));
|
|
13
|
+
const count = fs.readSync(fd, bytes, 0, bytes.length, Number(process.argv[2]));
|
|
14
|
+
process.stdout.write(JSON.stringify({size:stat.size, identity:stat.dev+':'+stat.ino, data:bytes.subarray(0,count).toString('base64')}));
|
|
15
|
+
} finally { fs.closeSync(fd); }
|
|
16
|
+
} catch (error) {
|
|
17
|
+
if (error.code === 'ENOENT') process.stdout.write('null');
|
|
18
|
+
else { process.stderr.write(String(error.code || 'READ_FAILED')); process.exitCode = 1; }
|
|
19
|
+
}`;
|
|
20
|
+
const chunkSchema = z.object({
|
|
21
|
+
size: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER), identity: z.string().min(1),
|
|
22
|
+
data: z.string().regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u)
|
|
23
|
+
}).strict().nullable();
|
|
24
|
+
/** Each exec response is bounded (base64 adds 1/3); decode UTF-8 across byte boundaries.
|
|
25
|
+
* Pin the initial length/inode so appends cannot make sync chase a growing ledger forever. */
|
|
26
|
+
export const readRecordingJsonl = async (exec, file, parser, chunkBytes = 256 * 1024) => {
|
|
27
|
+
const decoder = new StringDecoder("utf8");
|
|
28
|
+
let offset = 0, length, identity;
|
|
29
|
+
try {
|
|
30
|
+
if (!Number.isSafeInteger(chunkBytes) || chunkBytes <= 0 || chunkBytes > 256 * 1024)
|
|
31
|
+
throw new Error("Invalid recording chunk size");
|
|
32
|
+
do {
|
|
33
|
+
const count = Math.min(chunkBytes, length === undefined ? chunkBytes : length - offset);
|
|
34
|
+
const { stdout } = await exec(["node", "-e", readChunkScript, file, String(offset), String(count)]);
|
|
35
|
+
const chunk = chunkSchema.parse(JSON.parse(stdout));
|
|
36
|
+
if (chunk === null) {
|
|
37
|
+
if (length !== undefined)
|
|
38
|
+
throw new Error("Runtime file disappeared during read");
|
|
39
|
+
return { ...parser.finish(), missing: true };
|
|
40
|
+
}
|
|
41
|
+
length ??= chunk.size;
|
|
42
|
+
identity ??= chunk.identity;
|
|
43
|
+
if (identity !== chunk.identity || chunk.size < length)
|
|
44
|
+
throw new Error("Runtime file replaced or truncated during read");
|
|
45
|
+
const bytes = Buffer.from(chunk.data, "base64");
|
|
46
|
+
if (bytes.length > count || bytes.length < Math.min(count, length - offset))
|
|
47
|
+
throw new Error("Incomplete runtime file chunk");
|
|
48
|
+
const bounded = bytes.subarray(0, length - offset);
|
|
49
|
+
parser.write(decoder.write(bounded));
|
|
50
|
+
offset += bounded.length;
|
|
51
|
+
} while (offset < length);
|
|
52
|
+
parser.write(decoder.end());
|
|
53
|
+
return parser.finish();
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
// The remote script emits codes only. Do not expose raw exec messages or partial stdout.
|
|
57
|
+
const reason = error instanceof Error && /^(?:Invalid recording|Runtime file|Incomplete runtime)/u.test(error.message)
|
|
58
|
+
? error.message : "Runtime file exec or chunk decoding failed";
|
|
59
|
+
return { entries: [], errors: [], failure: reason };
|
|
60
|
+
}
|
|
61
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MomentRecord, WakeMomentRow } from "./types.js";
|
|
2
|
+
/** Project records share a directory, so each gets its own state subdirectory. */
|
|
3
|
+
export declare const deploymentMomentsDirectory: (recordPath: string) => string;
|
|
4
|
+
export declare const momentFileName: (row: WakeMomentRow) => string;
|
|
5
|
+
export declare const withMomentStore: <T>(recordPath: string, slug: string, action: (directory: string) => Promise<T>) => Promise<T>;
|
|
6
|
+
/** Caller holds the store lock. Existing records are never replaced, including non-exact ones. */
|
|
7
|
+
export declare const writeMomentRecord: (directory: string, record: MomentRecord, row: WakeMomentRow) => Promise<boolean>;
|
|
8
|
+
export declare const newestMomentInstant: (directory: string, agentId: string) => Promise<number>;
|
|
9
|
+
/** Retention reads the recorded instant, never mtime; preserve all newest-instant ties. */
|
|
10
|
+
export declare const pruneMomentRecords: (directory: string, agentId: string, now: Date, keepMs: number) => Promise<void>;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { lstat, mkdir, readFile, readdir, unlink } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { acquirePidLock } from "../deployment/pidLock.js";
|
|
5
|
+
import { syncDirectory, writeDurableFile } from "../filesystem/index.js";
|
|
6
|
+
/** Project records share a directory, so each gets its own state subdirectory. */
|
|
7
|
+
export const deploymentMomentsDirectory = (recordPath) => path.join(path.dirname(recordPath), ...(path.basename(recordPath) === "record.json" ? [] : [path.basename(recordPath, ".json")]), "moments");
|
|
8
|
+
/** JSON object keys are sorted recursively; array order and all row values remain significant. */
|
|
9
|
+
const canonicalJson = (value) => {
|
|
10
|
+
if (Array.isArray(value))
|
|
11
|
+
return `[${value.map(canonicalJson).join(",")}]`;
|
|
12
|
+
if (value !== null && typeof value === "object")
|
|
13
|
+
return `{${Object.entries(value)
|
|
14
|
+
.filter(([, entry]) => entry !== undefined).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
|
|
15
|
+
.map(([key, entry]) => `${JSON.stringify(key)}:${canonicalJson(entry)}`).join(",")}}`;
|
|
16
|
+
return JSON.stringify(value);
|
|
17
|
+
};
|
|
18
|
+
export const momentFileName = (row) => {
|
|
19
|
+
const { started_at: startedAt, execution_id: executionId } = row;
|
|
20
|
+
const compact = new Date(startedAt).toISOString().replace(/[-:.]/gu, "");
|
|
21
|
+
const safeId = /^[A-Za-z0-9._-]{1,128}$/u.test(executionId)
|
|
22
|
+
? executionId : `sha256-${createHash("sha256").update(executionId).digest("hex")}`;
|
|
23
|
+
const attempt = createHash("sha256").update(canonicalJson(row)).digest("hex").slice(0, 12);
|
|
24
|
+
return `${compact}-${safeId}-${attempt}.json`;
|
|
25
|
+
};
|
|
26
|
+
const ensurePrivateDirectory = async (directory) => {
|
|
27
|
+
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
28
|
+
const stat = await lstat(directory);
|
|
29
|
+
if (!stat.isDirectory() || stat.isSymbolicLink())
|
|
30
|
+
throw new Error(`Moment directory is not a real directory: ${directory}`);
|
|
31
|
+
};
|
|
32
|
+
export const withMomentStore = async (recordPath, slug, action) => {
|
|
33
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(slug))
|
|
34
|
+
throw new Error("Unsafe recording agent slug");
|
|
35
|
+
const root = deploymentMomentsDirectory(recordPath);
|
|
36
|
+
await ensurePrivateDirectory(root);
|
|
37
|
+
const directory = path.join(root, slug);
|
|
38
|
+
await ensurePrivateDirectory(directory);
|
|
39
|
+
const release = await acquirePidLock(path.join(directory, ".sync.lock"));
|
|
40
|
+
try {
|
|
41
|
+
return await action(directory);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
await release();
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
/** Caller holds the store lock. Existing records are never replaced, including non-exact ones. */
|
|
48
|
+
export const writeMomentRecord = async (directory, record, row) => {
|
|
49
|
+
const file = path.join(directory, momentFileName(row));
|
|
50
|
+
try {
|
|
51
|
+
const stat = await lstat(file);
|
|
52
|
+
if (!stat.isFile() || stat.isSymbolicLink())
|
|
53
|
+
throw new Error(`Moment is not a regular file: ${file}`);
|
|
54
|
+
const existing = JSON.parse(await readFile(file, "utf8"));
|
|
55
|
+
if (existing.agent !== record.agent || existing.wake?.executionId !== record.wake.executionId
|
|
56
|
+
|| existing.wake?.startedAt !== record.wake.startedAt)
|
|
57
|
+
throw new Error(`Moment filename collision: ${file}`);
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (error.code !== "ENOENT")
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
await writeDurableFile(file, `${JSON.stringify(record, null, 2)}\n`);
|
|
65
|
+
return true;
|
|
66
|
+
};
|
|
67
|
+
const storedMoments = async (directory, agentId) => {
|
|
68
|
+
const candidates = [];
|
|
69
|
+
for (const name of (await readdir(directory)).sort()) {
|
|
70
|
+
if (!name.endsWith(".json"))
|
|
71
|
+
continue;
|
|
72
|
+
const file = path.join(directory, name), stat = await lstat(file);
|
|
73
|
+
if (!stat.isFile() || stat.isSymbolicLink())
|
|
74
|
+
throw new Error(`Moment is not a regular file: ${file}`);
|
|
75
|
+
const record = JSON.parse(await readFile(file, "utf8"));
|
|
76
|
+
const started = Date.parse(record.wake?.startedAt);
|
|
77
|
+
if (record.version !== "spawnfile.moment-record.v1" || record.agent !== agentId || !Number.isFinite(started)) {
|
|
78
|
+
throw new Error(`Invalid retained moment: ${file}`);
|
|
79
|
+
}
|
|
80
|
+
candidates.push({ file, started });
|
|
81
|
+
}
|
|
82
|
+
return candidates;
|
|
83
|
+
};
|
|
84
|
+
export const newestMomentInstant = async (directory, agentId) => (await storedMoments(directory, agentId)).reduce((latest, item) => Math.max(latest, item.started), -Infinity);
|
|
85
|
+
/** Retention reads the recorded instant, never mtime; preserve all newest-instant ties. */
|
|
86
|
+
export const pruneMomentRecords = async (directory, agentId, now, keepMs) => {
|
|
87
|
+
const candidates = await storedMoments(directory, agentId);
|
|
88
|
+
const newest = candidates.reduce((latest, item) => Math.max(latest, item.started), -Infinity);
|
|
89
|
+
const expired = candidates.filter((item) => item.started < newest && item.started < now.getTime() - keepMs);
|
|
90
|
+
for (const item of expired)
|
|
91
|
+
await unlink(item.file);
|
|
92
|
+
if (expired.length)
|
|
93
|
+
await syncDirectory(directory);
|
|
94
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type DeployResources } from "../deployment/index.js";
|
|
2
|
+
import type { RecordingAgentReport } from "../report/index.js";
|
|
3
|
+
import type { UsageLedgerExec } from "../runtime/usageLedgerRead.js";
|
|
4
|
+
import type { FeedLanding } from "../volume/index.js";
|
|
5
|
+
import { type RecordingHistory } from "./history.js";
|
|
6
|
+
export interface SyncMomentRecordsOptions {
|
|
7
|
+
recordPath: string;
|
|
8
|
+
agents: readonly RecordingAgentReport[];
|
|
9
|
+
execForAgent: (agent: RecordingAgentReport) => UsageLedgerExec;
|
|
10
|
+
readFeedHistory: (feed: RecordingAgentReport["feeds"][number]) => Promise<RecordingHistory<FeedLanding>>;
|
|
11
|
+
readDeployHistory?: (recordPath: string) => RecordingHistory<DeployResources> | Promise<RecordingHistory<DeployResources>>;
|
|
12
|
+
readChunkBytes?: number;
|
|
13
|
+
now?: () => Date;
|
|
14
|
+
}
|
|
15
|
+
export interface SyncMomentRecordsResult {
|
|
16
|
+
written: number;
|
|
17
|
+
skipped: number;
|
|
18
|
+
nonExact: number;
|
|
19
|
+
/** Operational errors cause nonzero exit; data errors only qualify exactness. */
|
|
20
|
+
failures: string[];
|
|
21
|
+
warnings: string[];
|
|
22
|
+
}
|
|
23
|
+
/** Artifact egress only. No turn, snapshot copy, network-history fetch, or source resolution. */
|
|
24
|
+
export declare const syncMomentRecords: (options: SyncMomentRecordsOptions) => Promise<SyncMomentRecordsResult>;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { deployResourcesAt } from "../deployment/index.js";
|
|
3
|
+
import { composeMomentRecord } from "./compose.js";
|
|
4
|
+
import { readRecordingDeployHistory, recordingHistoryAt } from "./history.js";
|
|
5
|
+
import { createMemoryLedgerParser, createWakeMomentsParser } from "./parse.js";
|
|
6
|
+
import { readRecordingJsonl } from "./read.js";
|
|
7
|
+
import { newestMomentInstant, pruneMomentRecords, withMomentStore, writeMomentRecord } from "./store.js";
|
|
8
|
+
/** Artifact egress only. No turn, snapshot copy, network-history fetch, or source resolution. */
|
|
9
|
+
export const syncMomentRecords = async (options) => {
|
|
10
|
+
const result = { written: 0, skipped: 0, nonExact: 0, failures: [], warnings: [] };
|
|
11
|
+
if (!options.agents.length)
|
|
12
|
+
return result;
|
|
13
|
+
const now = (options.now ?? (() => new Date()))();
|
|
14
|
+
if (!Number.isFinite(now.getTime()))
|
|
15
|
+
throw new Error("Recording requires a valid clock");
|
|
16
|
+
const deploy = await (options.readDeployHistory ?? readRecordingDeployHistory)(options.recordPath);
|
|
17
|
+
const deployTail = deploy.entries.at(-1);
|
|
18
|
+
const deployPendingSince = deployTail ? Date.parse(deployTail.activated_at) : -Infinity;
|
|
19
|
+
const currentDeployment = deployResourcesAt(deploy.entries, options.recordPath, now);
|
|
20
|
+
for (const agent of options.agents) {
|
|
21
|
+
try {
|
|
22
|
+
if (!Number.isSafeInteger(agent.keep_ms) || agent.keep_ms <= 0)
|
|
23
|
+
throw new Error("Invalid recording retention");
|
|
24
|
+
const exec = options.execForAgent(agent);
|
|
25
|
+
const directories = new Set([agent.directory, ...deploy.entries
|
|
26
|
+
.filter((entry) => entry.deployment_id === path.resolve(options.recordPath))
|
|
27
|
+
.flatMap((entry) => entry.recording_agents ?? []).filter((entry) => entry.node_id === agent.node_id)
|
|
28
|
+
.map((entry) => entry.directory)]);
|
|
29
|
+
const errors = deploy.errors.map((error) => `Deploy history: ${error}`);
|
|
30
|
+
const rowsBySlug = new Map();
|
|
31
|
+
rowsBySlug.set(agent.slug, []);
|
|
32
|
+
for (const directory of directories) {
|
|
33
|
+
// Retention still runs when a log has become empty since the previous sync.
|
|
34
|
+
rowsBySlug.set(path.posix.basename(directory), rowsBySlug.get(path.posix.basename(directory)) ?? []);
|
|
35
|
+
const wake = await readRecordingJsonl(exec, path.posix.join(directory, "wake-moments.jsonl"), createWakeMomentsParser(), options.readChunkBytes);
|
|
36
|
+
if (wake.failure)
|
|
37
|
+
throw new Error(`Wake moments unreadable: ${wake.failure}`);
|
|
38
|
+
errors.push(...wake.errors);
|
|
39
|
+
for (const row of wake.entries) {
|
|
40
|
+
if (row.agent_id !== agent.node_id) {
|
|
41
|
+
errors.push(`Foreign wake row for ${row.agent_id}`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const historical = recordingHistoryAt(deploy.entries, options.recordPath, row.started_at, agent.node_id).agent;
|
|
45
|
+
const slug = historical?.slug ?? agent.slug;
|
|
46
|
+
const rows = rowsBySlug.get(slug) ?? [];
|
|
47
|
+
rows.push({ row, directory });
|
|
48
|
+
rowsBySlug.set(slug, rows);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const memoryCache = Object.create(null);
|
|
52
|
+
const feedCache = new Map();
|
|
53
|
+
result.warnings.push(...errors.map((error) => `${agent.node_id}: ${error}`));
|
|
54
|
+
for (const [slug, rows] of rowsBySlug)
|
|
55
|
+
await withMomentStore(options.recordPath, slug, async (directory) => {
|
|
56
|
+
const newest = rows.reduce((latest, { row }) => Math.max(latest, Date.parse(row.started_at)), await newestMomentInstant(directory, agent.node_id));
|
|
57
|
+
for (const { row, directory: sourceDirectory } of rows) {
|
|
58
|
+
const started = Date.parse(row.started_at);
|
|
59
|
+
// Do not recreate already-pruned attempts on every sync while Daimon retains its row log.
|
|
60
|
+
if (started < now.getTime() - agent.keep_ms && started < newest) {
|
|
61
|
+
result.skipped += 1;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const { agent: historical, deployment } = recordingHistoryAt(deploy.entries, options.recordPath, row.started_at, agent.node_id);
|
|
65
|
+
const rowErrors = [...errors];
|
|
66
|
+
if (deploy.publicationPending && started >= deployPendingSince)
|
|
67
|
+
rowErrors.push("Deploy history publication pending");
|
|
68
|
+
if (historical && historical.directory !== sourceDirectory)
|
|
69
|
+
rowErrors.push("Wake row directory differs from activation recording facts");
|
|
70
|
+
const feedLandings = Object.create(null);
|
|
71
|
+
for (const feed of historical?.feeds ?? []) {
|
|
72
|
+
const key = JSON.stringify([feed.id, feed.volume_name]);
|
|
73
|
+
if (!feedCache.has(key)) {
|
|
74
|
+
try {
|
|
75
|
+
feedCache.set(key, await options.readFeedHistory(feed));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
feedCache.set(key, { entries: [], errors: [`cannot resolve or read host landing history for volume ${feed.volume_name}`] });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const history = feedCache.get(key);
|
|
82
|
+
feedLandings[feed.id] = history.entries.filter((entry) => entry.resource === feed.id && entry.volume === feed.volume_name);
|
|
83
|
+
const tail = history.entries.at(-1);
|
|
84
|
+
const pendingSince = tail ? Date.parse(tail.landed_at) : -Infinity;
|
|
85
|
+
if (history.publicationPending && started >= pendingSince)
|
|
86
|
+
rowErrors.push(`Feed ${feed.id}: history publication pending`);
|
|
87
|
+
rowErrors.push(...history.errors.map((error) => `Feed ${feed.id}: ${error}`));
|
|
88
|
+
}
|
|
89
|
+
const memoryLedgers = Object.create(null);
|
|
90
|
+
for (const bank of historical?.memory ?? []) {
|
|
91
|
+
if (bank.ledger_path === null)
|
|
92
|
+
continue;
|
|
93
|
+
const current = agent.memory.some((entry) => entry.id === bank.id && entry.declared_by === bank.declared_by
|
|
94
|
+
&& entry.ledger_path === bank.ledger_path);
|
|
95
|
+
// Older facts do not carry a physical volume ID. A different report cannot
|
|
96
|
+
// establish that today's readable path still names the historical bank.
|
|
97
|
+
if (!current || deployment?.report_sha256 !== currentDeployment?.report_sha256) {
|
|
98
|
+
memoryLedgers[bank.ledger_path] = { entries: [], errors: ["Historical bank identity or mount cannot be verified in the current deployment"] };
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (!memoryCache[bank.ledger_path]) {
|
|
102
|
+
const ledger = await readRecordingJsonl(exec, bank.ledger_path, createMemoryLedgerParser(), options.readChunkBytes);
|
|
103
|
+
memoryCache[bank.ledger_path] = ledger.failure || ledger.missing
|
|
104
|
+
? { entries: [], errors: [`Ledger unreadable: ${ledger.failure ?? "runtime file is absent"}`] } : ledger;
|
|
105
|
+
}
|
|
106
|
+
memoryLedgers[bank.ledger_path] = memoryCache[bank.ledger_path];
|
|
107
|
+
}
|
|
108
|
+
const record = composeMomentRecord({ row, agentNodeId: agent.node_id, deploymentRecordPath: options.recordPath,
|
|
109
|
+
feedLandings, deployResources: deploy.entries, memoryLedgers, errors: rowErrors, recordedAt: now.toISOString() });
|
|
110
|
+
if (await writeMomentRecord(directory, record, row)) {
|
|
111
|
+
result.written += 1;
|
|
112
|
+
if (!record.exact)
|
|
113
|
+
result.nonExact += 1;
|
|
114
|
+
}
|
|
115
|
+
else
|
|
116
|
+
result.skipped += 1;
|
|
117
|
+
}
|
|
118
|
+
await pruneMomentRecords(directory, agent.node_id, now, agent.keep_ms);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
result.failures.push(`${agent.node_id}: ${error instanceof Error ? error.message : String(error)}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { DeployResources } from "../deployment/index.js";
|
|
2
|
+
import type { FeedLanding } from "../volume/index.js";
|
|
3
|
+
export declare const WAKE_MOMENT_VERSION = "noopolis.daimon.wake-moment.v1";
|
|
4
|
+
export declare const MOMENT_RECORD_VERSION = "spawnfile.moment-record.v1";
|
|
5
|
+
/** The public, data-only row written by Daimon before each turn attempt. */
|
|
6
|
+
export interface WakeMomentRow {
|
|
7
|
+
version: typeof WAKE_MOMENT_VERSION;
|
|
8
|
+
agent_id: string;
|
|
9
|
+
execution_id: string;
|
|
10
|
+
started_at: string;
|
|
11
|
+
deliveries: {
|
|
12
|
+
acceptance_id: string;
|
|
13
|
+
delivery_id: string;
|
|
14
|
+
kind: string;
|
|
15
|
+
occurred_at: string;
|
|
16
|
+
}[];
|
|
17
|
+
snapshots: {
|
|
18
|
+
id: string;
|
|
19
|
+
snapshot: string;
|
|
20
|
+
files: number;
|
|
21
|
+
copied: number;
|
|
22
|
+
linked: number;
|
|
23
|
+
skipped: number;
|
|
24
|
+
}[];
|
|
25
|
+
error?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface MemoryLedgerEntry {
|
|
28
|
+
seq: number;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
}
|
|
31
|
+
export interface MemoryLedgerRead {
|
|
32
|
+
entries: readonly MemoryLedgerEntry[];
|
|
33
|
+
errors?: readonly string[];
|
|
34
|
+
}
|
|
35
|
+
export interface ComposeMomentRecordInput {
|
|
36
|
+
row: WakeMomentRow;
|
|
37
|
+
agentNodeId: string;
|
|
38
|
+
deploymentRecordPath: string;
|
|
39
|
+
feedLandings: Readonly<Record<string, readonly FeedLanding[]>>;
|
|
40
|
+
deployResources: readonly DeployResources[];
|
|
41
|
+
memoryLedgers: Readonly<Record<string, MemoryLedgerRead>>;
|
|
42
|
+
errors?: readonly string[];
|
|
43
|
+
recordedAt: string;
|
|
44
|
+
}
|
|
45
|
+
export type { MomentRecord } from "./moment.js";
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The running organization's control plane, reached the way every other
|
|
3
|
+
* Spawnfile probe reaches a container's loopback: an ephemeral helper from the
|
|
4
|
+
* same image inside the target's network namespace. The bearer token goes to
|
|
5
|
+
* curl on stdin (`-H @-`), never on a command line another host process could
|
|
6
|
+
* read.
|
|
7
|
+
*/
|
|
8
|
+
export interface RuntimeControlTarget {
|
|
9
|
+
containerRef: string;
|
|
10
|
+
dockerArgs: readonly string[];
|
|
11
|
+
dockerCommand: string;
|
|
12
|
+
imageRef: string;
|
|
13
|
+
token: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ControlResponse {
|
|
16
|
+
body: string;
|
|
17
|
+
status: number;
|
|
18
|
+
}
|
|
19
|
+
export type ControlCall = (target: RuntimeControlTarget, method: "GET" | "POST", route: string) => Promise<ControlResponse>;
|
|
20
|
+
export declare const CONTROL_CALL_TIMEOUT_MS = 60000;
|
|
21
|
+
export declare const controlHelperArgs: (target: RuntimeControlTarget, method: "GET" | "POST", route: string) => string[];
|
|
22
|
+
export declare const parseHelperOutput: (stdout: string) => ControlResponse;
|
|
23
|
+
export declare const helperControlCall: ControlCall;
|
|
24
|
+
export type DrainState = "draining" | "drained" | null;
|
|
25
|
+
export interface Availability {
|
|
26
|
+
drain: DrainState;
|
|
27
|
+
state: string;
|
|
28
|
+
}
|
|
29
|
+
/** The parts of `noopolis.daimon.work-availability.v1` a release reads. */
|
|
30
|
+
export declare const parseAvailability: (response: ControlResponse, route: string) => Availability;
|
|
31
|
+
export declare const requestDrain: (target: RuntimeControlTarget, call?: ControlCall) => Promise<Availability>;
|
|
32
|
+
export declare const requestResume: (target: RuntimeControlTarget, call?: ControlCall) => Promise<Availability>;
|
|
33
|
+
export interface WaitForDrainedOptions {
|
|
34
|
+
call?: ControlCall;
|
|
35
|
+
now?: () => number;
|
|
36
|
+
pollMs: number;
|
|
37
|
+
signal?: AbortSignal;
|
|
38
|
+
sleep?: (ms: number) => Promise<void>;
|
|
39
|
+
timeoutMs: number;
|
|
40
|
+
}
|
|
41
|
+
export type DrainWait = {
|
|
42
|
+
drained: true;
|
|
43
|
+
waitedMs: number;
|
|
44
|
+
} | {
|
|
45
|
+
drained: false;
|
|
46
|
+
reason: "interrupted" | "timeout";
|
|
47
|
+
waitedMs: number;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Polls until no turn is running or admitted ("drained"), or the bound runs
|
|
51
|
+
* out. Running turns are never touched: on timeout the caller abandons the
|
|
52
|
+
* release and resumes; nothing here can stop a turn.
|
|
53
|
+
*/
|
|
54
|
+
export declare const waitForDrained: (target: RuntimeControlTarget, options: WaitForDrainedOptions) => Promise<DrainWait>;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { DAIMON_CONTROL_PORT } from "../runtime/daimon/config.js";
|
|
3
|
+
import { ReleaseError } from "./types.js";
|
|
4
|
+
export const CONTROL_CALL_TIMEOUT_MS = 60_000;
|
|
5
|
+
const MAX_CONTROL_OUTPUT_BYTES = 1024 * 1024;
|
|
6
|
+
export const controlHelperArgs = (target, method, route) => [
|
|
7
|
+
...target.dockerArgs,
|
|
8
|
+
"run", "--rm", "-i", "--pull", "never",
|
|
9
|
+
"--network", `container:${target.containerRef}`,
|
|
10
|
+
"--entrypoint", "curl",
|
|
11
|
+
target.imageRef,
|
|
12
|
+
"-sS", "--max-time", "15", "-X", method, "-H", "@-",
|
|
13
|
+
"--output", "-", "--write-out", "\\n%{http_code}",
|
|
14
|
+
`http://127.0.0.1:${DAIMON_CONTROL_PORT}${route}`
|
|
15
|
+
];
|
|
16
|
+
const redact = (text, token) => (token ? text.split(token).join("[redacted]") : text).replace(/\s+/gu, " ").slice(0, 240);
|
|
17
|
+
export const parseHelperOutput = (stdout) => {
|
|
18
|
+
const match = /\n(\d{3})$/u.exec(stdout);
|
|
19
|
+
if (!match || match.index === undefined) {
|
|
20
|
+
throw new ReleaseError("drain-failed", "the runtime control helper returned no HTTP status");
|
|
21
|
+
}
|
|
22
|
+
return { body: stdout.slice(0, match.index), status: Number(match[1]) };
|
|
23
|
+
};
|
|
24
|
+
export const helperControlCall = (target, method, route) => new Promise((resolve, reject) => {
|
|
25
|
+
const child = spawn(target.dockerCommand, controlHelperArgs(target, method, route), {
|
|
26
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
27
|
+
});
|
|
28
|
+
const out = [];
|
|
29
|
+
let bytes = 0;
|
|
30
|
+
let stderr = "";
|
|
31
|
+
let settled = false;
|
|
32
|
+
const finish = (error, value) => {
|
|
33
|
+
if (settled)
|
|
34
|
+
return;
|
|
35
|
+
settled = true;
|
|
36
|
+
clearTimeout(timer);
|
|
37
|
+
if (error)
|
|
38
|
+
reject(error);
|
|
39
|
+
else
|
|
40
|
+
resolve(value);
|
|
41
|
+
};
|
|
42
|
+
const timer = setTimeout(() => {
|
|
43
|
+
child.kill("SIGKILL");
|
|
44
|
+
finish(new ReleaseError("drain-failed", `runtime control ${method} ${route} timed out`));
|
|
45
|
+
}, CONTROL_CALL_TIMEOUT_MS);
|
|
46
|
+
child.stdout.on("data", (chunk) => {
|
|
47
|
+
bytes += chunk.length;
|
|
48
|
+
if (bytes > MAX_CONTROL_OUTPUT_BYTES) {
|
|
49
|
+
child.kill("SIGKILL");
|
|
50
|
+
finish(new ReleaseError("drain-failed", `runtime control ${method} ${route} answered more than the output bound`));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
out.push(chunk);
|
|
54
|
+
});
|
|
55
|
+
child.stderr.on("data", (chunk) => { stderr = `${stderr}${chunk.toString("utf8")}`.slice(-2000); });
|
|
56
|
+
child.once("error", (error) => finish(new ReleaseError("drain-failed", `cannot start the runtime control helper: ${error.message}`)));
|
|
57
|
+
child.once("close", (code) => {
|
|
58
|
+
if (code !== 0) {
|
|
59
|
+
finish(new ReleaseError("drain-failed", `runtime control ${method} ${route} failed (exit ${code ?? "signal"}): ${redact(stderr, target.token)}`));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
finish(null, parseHelperOutput(Buffer.concat(out).toString("utf8")));
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
finish(error);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
child.stdin.on("error", () => undefined);
|
|
70
|
+
child.stdin.end(`Authorization: Bearer ${target.token}\n`);
|
|
71
|
+
});
|
|
72
|
+
/** The parts of `noopolis.daimon.work-availability.v1` a release reads. */
|
|
73
|
+
export const parseAvailability = (response, route) => {
|
|
74
|
+
if (response.status === 404) {
|
|
75
|
+
throw new ReleaseError("drain-failed", `the running runtime has no ${route} control route; it predates reversible drain, so it cannot be released without killing turns`);
|
|
76
|
+
}
|
|
77
|
+
if (response.status === 401) {
|
|
78
|
+
throw new ReleaseError("drain-failed", `the runtime refused the control token on ${route}; SPAWNFILE_DAIMON_CONTROL_TOKEN in the env file must be the running deployment's token`);
|
|
79
|
+
}
|
|
80
|
+
if (response.status !== 200) {
|
|
81
|
+
throw new ReleaseError("drain-failed", `runtime control ${route} answered HTTP ${response.status}`);
|
|
82
|
+
}
|
|
83
|
+
let parsed;
|
|
84
|
+
try {
|
|
85
|
+
parsed = JSON.parse(response.body);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
throw new ReleaseError("drain-failed", `runtime control ${route} answered invalid JSON`);
|
|
89
|
+
}
|
|
90
|
+
const document = parsed;
|
|
91
|
+
if (document?.version !== "noopolis.daimon.work-availability.v1" || typeof document.state !== "string") {
|
|
92
|
+
throw new ReleaseError("drain-failed", `runtime control ${route} answered something other than a work-availability document`);
|
|
93
|
+
}
|
|
94
|
+
const drain = document.drain === undefined ? null : document.drain.state;
|
|
95
|
+
if (drain !== null && drain !== "draining" && drain !== "drained") {
|
|
96
|
+
throw new ReleaseError("drain-failed", `runtime control ${route} reported an unknown drain state`);
|
|
97
|
+
}
|
|
98
|
+
return { drain, state: document.state };
|
|
99
|
+
};
|
|
100
|
+
export const requestDrain = async (target, call = helperControlCall) => {
|
|
101
|
+
const availability = parseAvailability(await call(target, "POST", "/v2/drain"), "/v2/drain");
|
|
102
|
+
if (availability.drain === null) {
|
|
103
|
+
throw new ReleaseError("drain-failed", "the runtime accepted /v2/drain but does not report a drain; refusing to deploy over turns it may still admit");
|
|
104
|
+
}
|
|
105
|
+
return availability;
|
|
106
|
+
};
|
|
107
|
+
export const requestResume = async (target, call = helperControlCall) => {
|
|
108
|
+
const availability = parseAvailability(await call(target, "POST", "/v2/resume"), "/v2/resume");
|
|
109
|
+
if (availability.drain !== null) {
|
|
110
|
+
throw new ReleaseError("resume-failed", "the runtime answered /v2/resume but still reports a drain");
|
|
111
|
+
}
|
|
112
|
+
return availability;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Polls until no turn is running or admitted ("drained"), or the bound runs
|
|
116
|
+
* out. Running turns are never touched: on timeout the caller abandons the
|
|
117
|
+
* release and resumes; nothing here can stop a turn.
|
|
118
|
+
*/
|
|
119
|
+
export const waitForDrained = async (target, options) => {
|
|
120
|
+
const now = options.now ?? Date.now;
|
|
121
|
+
const sleep = options.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
122
|
+
const started = now();
|
|
123
|
+
for (;;) {
|
|
124
|
+
if (options.signal?.aborted)
|
|
125
|
+
return { drained: false, reason: "interrupted", waitedMs: now() - started };
|
|
126
|
+
const availability = parseAvailability(await (options.call ?? helperControlCall)(target, "GET", "/v2/availability"), "/v2/availability");
|
|
127
|
+
if (availability.drain === null) {
|
|
128
|
+
throw new ReleaseError("drain-failed", "the runtime stopped reporting the drain while a release was waiting on it (did it restart?)");
|
|
129
|
+
}
|
|
130
|
+
if (availability.drain === "drained")
|
|
131
|
+
return { drained: true, waitedMs: now() - started };
|
|
132
|
+
const remaining = options.timeoutMs - (now() - started);
|
|
133
|
+
if (remaining <= 0)
|
|
134
|
+
return { drained: false, reason: "timeout", waitedMs: now() - started };
|
|
135
|
+
await sleep(Math.min(options.pollMs, remaining));
|
|
136
|
+
}
|
|
137
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { DockerDeploymentTarget } from "../deployment/index.js";
|
|
2
|
+
import type { RuntimeControlTarget } from "./drainControl.js";
|
|
3
|
+
import { type ReleasePaths } from "./ledger.js";
|
|
4
|
+
import type { RunningUnit } from "./releaseDocker.js";
|
|
5
|
+
import { type ReleaseDependencies, type ReleaseRequest } from "./releaseTypes.js";
|
|
6
|
+
export declare const RELEASE_DRAIN_MARKER_VERSION: "spawnfile.release-drain.v1";
|
|
7
|
+
/** Same precedence `up` applies: a process value overrides the env file. */
|
|
8
|
+
export declare const resolveControlToken: (request: ReleaseRequest) => string | null;
|
|
9
|
+
export declare const controlTargetFor: (request: ReleaseRequest, containerRef: string, imageRef: string) => RuntimeControlTarget;
|
|
10
|
+
/** The same request, addressed at exactly this Docker daemon. */
|
|
11
|
+
export declare const requestForTarget: (request: ReleaseRequest, target: DockerDeploymentTarget) => ReleaseRequest;
|
|
12
|
+
export declare const clearDrainMarker: (paths: ReleasePaths) => Promise<void>;
|
|
13
|
+
export declare const recoverInterruptedDrain: (request: ReleaseRequest, deps: ReleaseDependencies, paths: ReleasePaths) => Promise<boolean>;
|
|
14
|
+
export type DrainOutcome = {
|
|
15
|
+
drainMs: number;
|
|
16
|
+
kind: "drained";
|
|
17
|
+
} | {
|
|
18
|
+
drainMs: number;
|
|
19
|
+
kind: "skipped";
|
|
20
|
+
} | {
|
|
21
|
+
drainMs: number;
|
|
22
|
+
kind: "timeout";
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Admission pauses, queued wakes stay queued, running turns finish. On a
|
|
26
|
+
* timeout or interruption the release is abandoned and admission resumed:
|
|
27
|
+
* nothing in this module, or anything it calls, stops a turn.
|
|
28
|
+
*/
|
|
29
|
+
export declare const drainForRelease: (request: ReleaseRequest, deps: ReleaseDependencies, paths: ReleasePaths, unit: RunningUnit | null) => Promise<DrainOutcome>;
|
|
30
|
+
/** Resumes a container this release drained, keeping the marker if that fails. */
|
|
31
|
+
export declare const resumeDrained: (request: ReleaseRequest, deps: ReleaseDependencies, paths: ReleasePaths, unit: RunningUnit) => Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* After a failed deploy, whatever container now holds the name is either the
|
|
34
|
+
* restored previous one (restarted, so it admits) or the original, still
|
|
35
|
+
* drained because the deploy failed before touching it. Resume either way.
|
|
36
|
+
*/
|
|
37
|
+
export declare const resumeAfterFailedDeploy: (request: ReleaseRequest, deps: ReleaseDependencies, paths: ReleasePaths, containerName: string) => Promise<void>;
|