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
|
@@ -5,6 +5,7 @@ import { z } from "zod";
|
|
|
5
5
|
import { assertOrdinaryJsonGraph, opaqueTargetHandleSchema, runIdSchema, selectedTargetSchema } from "./contracts.js";
|
|
6
6
|
export const TARGET_PUBLIC_ARTIFACT_SNAPSHOT_REQUEST_VERSION = "spawnfile.target-public-artifact-snapshot.request.v1";
|
|
7
7
|
export const TARGET_PUBLIC_ARTIFACT_SNAPSHOT_VERSION = "spawnfile.target-public-artifact-snapshot.v1";
|
|
8
|
+
export const TARGET_PUBLIC_ARTIFACT_SNAPSHOT_NOT_PRESENT_VERSION = "spawnfile.target-public-artifact-snapshot.not-present.v1";
|
|
8
9
|
export const TARGET_PUBLIC_ARTIFACT_ROOT = "/tmp/spawnfile-public";
|
|
9
10
|
export const MAX_TARGET_PUBLIC_ARTIFACT_BYTES = 131_072;
|
|
10
11
|
const digestSchema = z.string().regex(/^sha256:[0-9a-f]{64}$/u);
|
|
@@ -12,10 +13,13 @@ const identifierSchema = z.string().regex(/^[a-z][a-z0-9_-]{0,63}$/u);
|
|
|
12
13
|
const mediaTypeSchema = z.string()
|
|
13
14
|
.max(127)
|
|
14
15
|
.regex(/^[a-z][a-z0-9!#$&^_.+-]*\/[a-z0-9][a-z0-9!#$&^_.+-]*$/u);
|
|
16
|
+
const PUBLIC_ARTIFACT_PATH = /^\/tmp\/spawnfile-public\/[A-Za-z0-9][A-Za-z0-9._-]*$/u;
|
|
15
17
|
const publicPathSchema = z.string().max(255)
|
|
16
|
-
.
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
// This is intentionally a direct child of the isolated public tmpfs. A
|
|
19
|
+
// nested path would require a recursive openat-style resolver to keep every
|
|
20
|
+
// parent below the mount while an untrusted world is writing its output.
|
|
21
|
+
.regex(PUBLIC_ARTIFACT_PATH);
|
|
22
|
+
export const isTargetPublicArtifactPath = (value) => typeof value === "string" && value.length <= 255 && PUBLIC_ARTIFACT_PATH.test(value);
|
|
19
23
|
export const targetPublicArtifactSnapshotRequestSchema = z.object({
|
|
20
24
|
artifact: z.object({
|
|
21
25
|
id: identifierSchema,
|
|
@@ -53,6 +57,17 @@ export const targetPublicArtifactSnapshotSchema = z.object({
|
|
|
53
57
|
context.addIssue({ code: z.ZodIssueCode.custom, message: "artifact content mismatch" });
|
|
54
58
|
}
|
|
55
59
|
});
|
|
60
|
+
export const targetPublicArtifactSnapshotNotPresentSchema = z.object({
|
|
61
|
+
artifact_id: identifierSchema,
|
|
62
|
+
request_digest: digestSchema,
|
|
63
|
+
run_id: runIdSchema,
|
|
64
|
+
status: z.literal("not_present"),
|
|
65
|
+
version: z.literal(TARGET_PUBLIC_ARTIFACT_SNAPSHOT_NOT_PRESENT_VERSION)
|
|
66
|
+
}).strict();
|
|
67
|
+
export const targetPublicArtifactSnapshotResultSchema = z.union([
|
|
68
|
+
targetPublicArtifactSnapshotSchema,
|
|
69
|
+
targetPublicArtifactSnapshotNotPresentSchema
|
|
70
|
+
]);
|
|
56
71
|
const canonicalJsonValue = (value) => {
|
|
57
72
|
if (Array.isArray(value))
|
|
58
73
|
return `[${value.map(canonicalJsonValue).join(",")}]`;
|
|
@@ -126,6 +141,14 @@ export const parseTargetPublicArtifactSnapshot = (raw) => {
|
|
|
126
141
|
assertOrdinaryPublicArtifactSnapshot(raw);
|
|
127
142
|
return targetPublicArtifactSnapshotSchema.parse(raw);
|
|
128
143
|
};
|
|
144
|
+
export const parseTargetPublicArtifactSnapshotNotPresent = (raw) => {
|
|
145
|
+
assertOrdinaryPublicArtifactSnapshot(raw);
|
|
146
|
+
return targetPublicArtifactSnapshotNotPresentSchema.parse(raw);
|
|
147
|
+
};
|
|
148
|
+
export const parseTargetPublicArtifactSnapshotResult = (raw) => {
|
|
149
|
+
assertOrdinaryPublicArtifactSnapshot(raw);
|
|
150
|
+
return targetPublicArtifactSnapshotResultSchema.parse(raw);
|
|
151
|
+
};
|
|
129
152
|
export const createTargetPublicArtifactSnapshotRequestDigest = (raw) => `sha256:${createHash("sha256")
|
|
130
153
|
.update("spawnfile.target-public-artifact-snapshot.request.v1\0", "utf8")
|
|
131
154
|
.update(canonicalJson(parseTargetPublicArtifactSnapshotRequest(raw)), "utf8")
|
|
@@ -147,4 +170,15 @@ export const createTargetPublicArtifactSnapshot = (input) => {
|
|
|
147
170
|
version: TARGET_PUBLIC_ARTIFACT_SNAPSHOT_VERSION
|
|
148
171
|
});
|
|
149
172
|
};
|
|
173
|
+
export const createTargetPublicArtifactSnapshotNotPresent = (raw) => {
|
|
174
|
+
const request = parseTargetPublicArtifactSnapshotRequest(raw);
|
|
175
|
+
return parseTargetPublicArtifactSnapshotNotPresent({
|
|
176
|
+
artifact_id: request.artifact.id,
|
|
177
|
+
request_digest: createTargetPublicArtifactSnapshotRequestDigest(request),
|
|
178
|
+
run_id: request.run_id,
|
|
179
|
+
status: "not_present",
|
|
180
|
+
version: TARGET_PUBLIC_ARTIFACT_SNAPSHOT_NOT_PRESENT_VERSION
|
|
181
|
+
});
|
|
182
|
+
};
|
|
150
183
|
export const createCanonicalTargetPublicArtifactSnapshotBytes = (raw) => canonicalJsonValue(parseTargetPublicArtifactSnapshot(raw));
|
|
184
|
+
export const createCanonicalTargetPublicArtifactSnapshotResultBytes = (raw) => canonicalJsonValue(parseTargetPublicArtifactSnapshotResult(raw));
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type LinkOps } from "./feedLayout.js";
|
|
2
|
+
import { type FeedLandedRecord } from "./feedRecord.js";
|
|
3
|
+
import { type FeedExec, type ResolvedFeedSource } from "./feedSource.js";
|
|
4
|
+
import { type FeedTarget } from "./feedTarget.js";
|
|
5
|
+
export interface FeedRuntime {
|
|
6
|
+
exec?: FeedExec;
|
|
7
|
+
log?: (line: string) => void;
|
|
8
|
+
now?: () => Date;
|
|
9
|
+
ops?: LinkOps;
|
|
10
|
+
}
|
|
11
|
+
export interface FeedLandResult {
|
|
12
|
+
revision: string;
|
|
13
|
+
reused: boolean;
|
|
14
|
+
tree: string;
|
|
15
|
+
treesRemoved: string[];
|
|
16
|
+
unknownTrees: string[];
|
|
17
|
+
}
|
|
18
|
+
export declare const isoSeconds: (date: Date) => string;
|
|
19
|
+
/**
|
|
20
|
+
* The declared validation hook: the gate between "staged" and "reachable". Non-zero exit lands nothing.
|
|
21
|
+
* It validates; it may not edit: the tree is digested before and after, and any change is a refusal,
|
|
22
|
+
* because changed bytes would be served under a revision that does not describe them.
|
|
23
|
+
*/
|
|
24
|
+
export declare const runFeedValidation: (target: FeedTarget, tree: string, resolved: ResolvedFeedSource) => void;
|
|
25
|
+
export declare const landFeed: (target: FeedTarget, resolved: ResolvedFeedSource, record: FeedLandedRecord | null, { exact, force, heals, period, runtime }?: {
|
|
26
|
+
exact?: boolean;
|
|
27
|
+
force?: boolean;
|
|
28
|
+
heals?: Record<string, number>;
|
|
29
|
+
period?: string;
|
|
30
|
+
runtime?: FeedRuntime;
|
|
31
|
+
}) => FeedLandResult;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// The mutating half of a refresh: stage, validate, freeze, land, point `current`, publish the identity,
|
|
2
|
+
// record, collect garbage. Read feedLayout.ts first: it owns every rule about what may touch the volume.
|
|
3
|
+
//
|
|
4
|
+
// WHAT THIS FILE DECIDES FROM, EXHAUSTIVELY: the host record and manifests outside the volume, the
|
|
5
|
+
// source, and the host clock. The volume itself is read only to assert that what is about to be touched
|
|
6
|
+
// is the real directory the host created, and to find a tree name nobody occupies.
|
|
7
|
+
//
|
|
8
|
+
// GENERATIONS, NOT REPLACEMENTS. A tree is never replaced under its own name: a re-land of revision R
|
|
9
|
+
// lands as `trees/R.1` (then `.2`, ...) beside the drifted `trees/R`, `current` moves to it with one
|
|
10
|
+
// rename, and the drifted tree is retired later like any other. So `current` never dangles, not even
|
|
11
|
+
// between two adjacent renames, and nothing the host did not record is ever parked or deleted.
|
|
12
|
+
import { spawnSync } from "node:child_process";
|
|
13
|
+
import { lstatSync, mkdirSync, readdirSync } from "node:fs";
|
|
14
|
+
import path from "node:path";
|
|
15
|
+
import { FEED_TREES_DIR, LINK_OPS, assertRealDirectory, feedError, feedTreeLink, landTree, ownAndFreeze, parkTree, pointCurrent, removeTree } from "./feedLayout.js";
|
|
16
|
+
import { buildFeedManifest, compareFeedManifest, manifestDrift, readFeedManifest, removeFeedManifest, writeFeedManifest } from "./feedManifest.js";
|
|
17
|
+
import { ensureFeedLanding, publishFeedLanded } from "./feedLandings.js";
|
|
18
|
+
import { FEED_IDENTITY_VERSION, FEED_LANDED_VERSION, writeFeedIdentity } from "./feedRecord.js";
|
|
19
|
+
import { stageFeedContent } from "./feedPrepare.js";
|
|
20
|
+
import { digestDirectory, hostExec } from "./feedSource.js";
|
|
21
|
+
import { feedStagingDir, feedTrashDir } from "./feedTarget.js";
|
|
22
|
+
export const isoSeconds = (date) => `${date.toISOString().slice(0, 19)}Z`;
|
|
23
|
+
const stampOf = (date) => `${isoSeconds(date).replace(/[:-]/gu, "")}.${process.pid}`;
|
|
24
|
+
/**
|
|
25
|
+
* The declared validation hook: the gate between "staged" and "reachable". Non-zero exit lands nothing.
|
|
26
|
+
* It validates; it may not edit: the tree is digested before and after, and any change is a refusal,
|
|
27
|
+
* because changed bytes would be served under a revision that does not describe them.
|
|
28
|
+
*/
|
|
29
|
+
export const runFeedValidation = (target, tree, resolved) => {
|
|
30
|
+
if (!target.validate)
|
|
31
|
+
return;
|
|
32
|
+
const before = digestDirectory(tree);
|
|
33
|
+
const [command, ...args] = target.validate.command;
|
|
34
|
+
const result = spawnSync(command, args, {
|
|
35
|
+
cwd: target.validate.cwd,
|
|
36
|
+
encoding: "utf8",
|
|
37
|
+
env: {
|
|
38
|
+
...process.env,
|
|
39
|
+
SPAWNFILE_FEED_PROVENANCE: JSON.stringify(resolved.provenance),
|
|
40
|
+
SPAWNFILE_FEED_RESOURCE: target.resourceId,
|
|
41
|
+
SPAWNFILE_FEED_REVISION: resolved.revision,
|
|
42
|
+
SPAWNFILE_FEED_TREE: tree
|
|
43
|
+
},
|
|
44
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
45
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
46
|
+
timeout: target.validate.timeoutMs
|
|
47
|
+
});
|
|
48
|
+
if (result.error?.code === "ETIMEDOUT") {
|
|
49
|
+
throw feedError(`the feed validation command for ${target.resourceId} did not finish within ${Math.round(target.validate.timeoutMs / 1000)}s and was killed; nothing was landed`);
|
|
50
|
+
}
|
|
51
|
+
if (result.error)
|
|
52
|
+
throw feedError(`the feed validation command for ${target.resourceId} could not run: ${result.error.message}`);
|
|
53
|
+
if (result.status !== 0) {
|
|
54
|
+
const output = `${result.stderr ?? ""}${result.stdout ?? ""}`.trim().split("\n").slice(-20).join("\n");
|
|
55
|
+
throw feedError(`the feed validation command rejected revision ${resolved.revision.slice(0, 12)} of ${target.resourceId} (${result.signal ? `killed by ${result.signal}` : `exit ${result.status}`}); nothing was landed${output ? `:\n${output}` : ""}`);
|
|
56
|
+
}
|
|
57
|
+
if (digestDirectory(tree) !== before)
|
|
58
|
+
throw feedError(`the feed validation command for ${target.resourceId} modified the tree it was validating; a validation hook may only read it, so nothing was landed`);
|
|
59
|
+
};
|
|
60
|
+
const treesDirOf = (target) => path.join(target.volume, FEED_TREES_DIR);
|
|
61
|
+
const treeMatches = (target, name) => {
|
|
62
|
+
const treePath = path.join(treesDirOf(target), name);
|
|
63
|
+
if (!assertRealDirectory(treePath, `the fed tree ${FEED_TREES_DIR}/${name.slice(0, 12)}`))
|
|
64
|
+
return false;
|
|
65
|
+
const manifest = readFeedManifest(target.stateDir, name);
|
|
66
|
+
return manifest !== null && manifestDrift(compareFeedManifest(treePath, manifest)).length === 0;
|
|
67
|
+
};
|
|
68
|
+
/** The first name for `revision` that nothing occupies -- whatever occupies the others, the host never moves it. */
|
|
69
|
+
const freshTreeName = (target, revision) => {
|
|
70
|
+
for (let generation = 0;; generation += 1) {
|
|
71
|
+
const name = generation === 0 ? revision : `${revision}.${generation}`;
|
|
72
|
+
try {
|
|
73
|
+
lstatSync(path.join(treesDirOf(target), name));
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return name;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
/** Copies, validates, owns and freezes OUTSIDE the volume, then moves the finished tree in with one rename. */
|
|
81
|
+
const stageAndLand = (target, resolved, { exact, exec, log }) => {
|
|
82
|
+
const stagingDir = path.join(feedStagingDir(target), `${resolved.revision}-${process.pid}`);
|
|
83
|
+
removeTree(stagingDir, { volume: target.volume });
|
|
84
|
+
mkdirSync(stagingDir);
|
|
85
|
+
let staged;
|
|
86
|
+
try {
|
|
87
|
+
staged = stageFeedContent(target, resolved, stagingDir, { exec, log });
|
|
88
|
+
// A held volume re-lands exactly what it serves: inputs that moved mid-copy are a refusal, not a new revision.
|
|
89
|
+
if (exact && staged.revision !== resolved.revision)
|
|
90
|
+
throw feedError(`the source moved while ${resolved.revision.slice(0, 12)} was being re-landed (copied ${staged.revision.slice(0, 12)}); a held volume never advances, so nothing was landed`);
|
|
91
|
+
if (staged.revision !== resolved.revision)
|
|
92
|
+
log(`the source moved while it was copied; landing what was copied as ${staged.revision.slice(0, 12)}`);
|
|
93
|
+
runFeedValidation(target, stagingDir, staged);
|
|
94
|
+
ownAndFreeze(stagingDir, { owner: target.owner, volume: target.volume });
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
try {
|
|
98
|
+
removeTree(stagingDir, { volume: target.volume });
|
|
99
|
+
}
|
|
100
|
+
catch { /* the original error says more */ }
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
const name = freshTreeName(target, staged.revision);
|
|
104
|
+
writeFeedManifest(target.stateDir, buildFeedManifest(stagingDir, name));
|
|
105
|
+
landTree(stagingDir, path.join(treesDirOf(target), name));
|
|
106
|
+
log(`landed ${FEED_TREES_DIR}/${name.slice(0, 12)}${name.length > 64 ? name.slice(64) : ""}`);
|
|
107
|
+
return { name, resolved: staged };
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Retires recorded trees beyond `keep`, oldest-served first by the host's own order (never by
|
|
111
|
+
* filesystem mtimes). Names the host never recorded are reported and left in place.
|
|
112
|
+
*/
|
|
113
|
+
const collectGarbage = (target, order, serving, now) => {
|
|
114
|
+
const treesDir = treesDirOf(target);
|
|
115
|
+
if (!assertRealDirectory(treesDir, "the fed volume's trees/ directory"))
|
|
116
|
+
return { removed: [], unknown: [] };
|
|
117
|
+
const present = readdirSync(treesDir, { withFileTypes: true });
|
|
118
|
+
const real = new Set(present.filter((entry) => entry.isDirectory()).map((entry) => entry.name));
|
|
119
|
+
const unknown = present.map((entry) => entry.name).filter((name) => !order.includes(name)).sort();
|
|
120
|
+
const retired = order.filter((name) => name !== serving);
|
|
121
|
+
const doomed = retired.slice(0, Math.max(0, retired.length - target.keep));
|
|
122
|
+
for (const name of doomed) {
|
|
123
|
+
if (!real.has(name))
|
|
124
|
+
continue;
|
|
125
|
+
removeTree(parkTree(path.join(treesDir, name), feedTrashDir(target), stampOf(now)), { volume: target.volume });
|
|
126
|
+
}
|
|
127
|
+
return { removed: doomed, unknown };
|
|
128
|
+
};
|
|
129
|
+
export const landFeed = (target, resolved, record, { exact = false, force = false, heals = {}, period, runtime = {} } = {}) => {
|
|
130
|
+
const clock = runtime.now ?? (() => new Date()), log = runtime.log ?? (() => undefined), exec = runtime.exec ?? hostExec;
|
|
131
|
+
if (record && (target.record || record.recording))
|
|
132
|
+
ensureFeedLanding(target, record, clock());
|
|
133
|
+
// Preserve the existing timestamp behavior when recording is absent.
|
|
134
|
+
const started = target.record ? undefined : clock();
|
|
135
|
+
if (!assertRealDirectory(treesDirOf(target), "the fed volume's trees/ directory"))
|
|
136
|
+
mkdirSync(treesDirOf(target), { mode: 0o755 });
|
|
137
|
+
// A retained tree for this revision is reused only when the host recorded it and its manifest still
|
|
138
|
+
// describes it -- and it passes the validation policy as declared NOW, like any new tree.
|
|
139
|
+
const retained = force ? undefined : [...(record?.trees ?? [])].reverse().find((name) => name.slice(0, 64) === resolved.revision && treeMatches(target, name));
|
|
140
|
+
let name, landedSource = resolved;
|
|
141
|
+
if (retained) {
|
|
142
|
+
runFeedValidation(target, path.join(treesDirOf(target), retained), resolved);
|
|
143
|
+
name = retained;
|
|
144
|
+
}
|
|
145
|
+
else
|
|
146
|
+
({ name, resolved: landedSource } = stageAndLand(target, resolved, { exact, exec, log }));
|
|
147
|
+
const revision = landedSource.revision;
|
|
148
|
+
let switchingAt;
|
|
149
|
+
const changed = pointCurrent(target.volume, feedTreeLink(name), { ops: runtime.ops ?? LINK_OPS, tmpDir: feedStagingDir(target),
|
|
150
|
+
...(target.record ? { beforeRename: () => { switchingAt = clock().toISOString(); } } : {}) });
|
|
151
|
+
const now = started ?? clock();
|
|
152
|
+
if (changed)
|
|
153
|
+
log(`current -> ${feedTreeLink(name.slice(0, 12))}`);
|
|
154
|
+
const manifest = readFeedManifest(target.stateDir, name) ?? buildFeedManifest(path.join(treesDirOf(target), name), name);
|
|
155
|
+
const identity = {
|
|
156
|
+
files: manifest.files, landed_at: target.record ? now.toISOString() : isoSeconds(now), resource: target.resourceId, revision, source: landedSource.provenance,
|
|
157
|
+
tree: feedTreeLink(name), version: FEED_IDENTITY_VERSION, volume: target.volumeName
|
|
158
|
+
};
|
|
159
|
+
const identitySha = writeFeedIdentity(target.volume, identity, { owner: target.owner, tmpDir: feedStagingDir(target) });
|
|
160
|
+
// Order is serving history: the serving tree is always last.
|
|
161
|
+
let trees = [...(record?.trees ?? []).filter((entry) => entry !== name), name];
|
|
162
|
+
let previous = record;
|
|
163
|
+
const write = () => previous = publishFeedLanded(target, { heals, identity, identity_sha256: identitySha, ...(period ? { period } : {}), revision, tree: name, trees, version: FEED_LANDED_VERSION }, now, previous, switchingAt);
|
|
164
|
+
write();
|
|
165
|
+
const gc = collectGarbage(target, trees, name, now);
|
|
166
|
+
if (gc.removed.length) {
|
|
167
|
+
for (const removed of gc.removed)
|
|
168
|
+
removeFeedManifest(target.stateDir, removed);
|
|
169
|
+
trees = trees.filter((entry) => !gc.removed.includes(entry));
|
|
170
|
+
write();
|
|
171
|
+
log(`retired ${gc.removed.length} tree(s): ${gc.removed.map((entry) => entry.slice(0, 12)).join(", ")}`);
|
|
172
|
+
}
|
|
173
|
+
return { revision, reused: retained !== undefined, tree: name, treesRemoved: gc.removed, unknownTrees: gc.unknown };
|
|
174
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type FeedLandedRecord } from "./feedRecord.js";
|
|
2
|
+
import type { FeedPreparedProvenance } from "./feedSource.js";
|
|
3
|
+
import type { FeedTarget } from "./feedTarget.js";
|
|
4
|
+
export declare const FEED_LANDING_VERSION = "spawnfile.volume-feed-landing.v1";
|
|
5
|
+
export declare const FEED_LANDINGS_FILE = "landings.jsonl";
|
|
6
|
+
export interface FeedLanding {
|
|
7
|
+
version: typeof FEED_LANDING_VERSION;
|
|
8
|
+
resource: string;
|
|
9
|
+
volume: string;
|
|
10
|
+
revision: string;
|
|
11
|
+
tree: string;
|
|
12
|
+
source: ({
|
|
13
|
+
kind: "git";
|
|
14
|
+
repo: string;
|
|
15
|
+
} | {
|
|
16
|
+
kind: "directory";
|
|
17
|
+
directory: string;
|
|
18
|
+
}) & {
|
|
19
|
+
prepared?: FeedPreparedProvenance;
|
|
20
|
+
};
|
|
21
|
+
commit?: string;
|
|
22
|
+
ref?: string;
|
|
23
|
+
paths?: string[];
|
|
24
|
+
switching_at: string;
|
|
25
|
+
landed_at: string;
|
|
26
|
+
period?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare const isFeedLanding: (value: unknown) => value is FeedLanding;
|
|
29
|
+
/** Invalid lines are findings beside valid entries; an absent log is an empty history. */
|
|
30
|
+
export declare const readFeedLandings: (stateDir: string) => {
|
|
31
|
+
entries: FeedLanding[];
|
|
32
|
+
errors: string[];
|
|
33
|
+
};
|
|
34
|
+
/** A transition's inclusive window cannot identify which tree a concurrent reader observed. */
|
|
35
|
+
export declare const feedLandingAt: (entries: readonly FeedLanding[], instant: string | Date) => (FeedLanding & {
|
|
36
|
+
ambiguous?: true;
|
|
37
|
+
}) | null;
|
|
38
|
+
type LandingTarget = Pick<FeedTarget, "stateDir" | "record"> & Partial<Pick<FeedTarget, "source">>;
|
|
39
|
+
/** Call only after writing the corresponding landed.json; the existing feed lock serializes writers. */
|
|
40
|
+
export declare const appendFeedLanding: (target: LandingTarget, record: FeedLandedRecord, now: Date) => void;
|
|
41
|
+
/** A verified clean host record seeds opt-in history or repairs a previously failed append. */
|
|
42
|
+
export declare const ensureFeedLanding: (target: LandingTarget, record: FeedLandedRecord, now: Date) => void;
|
|
43
|
+
/** Reconcile the authoritative predecessor before ANY replacement, even a revision advance. */
|
|
44
|
+
export declare const publishFeedLanded: (target: FeedTarget, record: FeedLandedRecord, now: Date, previous: FeedLandedRecord | null, switchingAt?: string) => FeedLandedRecord;
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// Recording history is host state, beside landed.json, and survives retirement of the physical trees.
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { appendRetainedJsonl, entryAt, readRetainedJsonl, syncFileSync } from "../filesystem/index.js";
|
|
4
|
+
import { isFeedRevision, isFeedTreeName, writeFeedLanded } from "./feedRecord.js";
|
|
5
|
+
export const FEED_LANDING_VERSION = "spawnfile.volume-feed-landing.v1";
|
|
6
|
+
export const FEED_LANDINGS_FILE = "landings.jsonl";
|
|
7
|
+
const object = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
8
|
+
const text = (value) => typeof value === "string" && value.length > 0;
|
|
9
|
+
const stringArray = (value) => Array.isArray(value) && value.every(text);
|
|
10
|
+
const prepared = (value) => {
|
|
11
|
+
if (value === undefined)
|
|
12
|
+
return true;
|
|
13
|
+
if (!object(value) || !isFeedRevision(value.source_revision) || !Array.isArray(value.include))
|
|
14
|
+
return false;
|
|
15
|
+
if (!value.include.every((entry) => object(entry) && isFeedRevision(entry.digest) && text(entry.to)))
|
|
16
|
+
return false;
|
|
17
|
+
const recipe = value.prepare;
|
|
18
|
+
return recipe === null || (object(recipe) && stringArray(recipe.command)
|
|
19
|
+
&& (recipe.image === null || text(recipe.image)) && (recipe.network === null || typeof recipe.network === "boolean")
|
|
20
|
+
&& (recipe.platform === null || text(recipe.platform)));
|
|
21
|
+
};
|
|
22
|
+
export const isFeedLanding = (value) => {
|
|
23
|
+
if (!object(value) || value.version !== FEED_LANDING_VERSION || !text(value.resource) || !text(value.volume))
|
|
24
|
+
return false;
|
|
25
|
+
if (!isFeedRevision(value.revision) || !text(value.tree) || value.tree !== `trees/${value.tree.slice(6)}`
|
|
26
|
+
|| !isFeedTreeName(value.tree.slice(6)) || value.tree.slice(6, 70) !== value.revision)
|
|
27
|
+
return false;
|
|
28
|
+
if (!text(value.landed_at) || !Number.isFinite(Date.parse(value.landed_at)))
|
|
29
|
+
return false;
|
|
30
|
+
if (!text(value.switching_at) || !Number.isFinite(Date.parse(value.switching_at))
|
|
31
|
+
|| Date.parse(value.switching_at) > Date.parse(value.landed_at))
|
|
32
|
+
return false;
|
|
33
|
+
if (value.period !== undefined && (typeof value.period !== "string" || !/^\d{4}-\d{2}-\d{2}$/u.test(value.period)))
|
|
34
|
+
return false;
|
|
35
|
+
if (!object(value.source) || !prepared(value.source.prepared))
|
|
36
|
+
return false;
|
|
37
|
+
if (value.source.kind === "directory") {
|
|
38
|
+
return text(value.source.directory) && value.commit === undefined && value.ref === undefined && value.paths === undefined;
|
|
39
|
+
}
|
|
40
|
+
return value.source.kind === "git" && text(value.source.repo) && text(value.commit) && /^[0-9a-f]{40}(?:[0-9a-f]{24})?$/u.test(value.commit)
|
|
41
|
+
&& text(value.ref) && (value.paths === undefined || stringArray(value.paths));
|
|
42
|
+
};
|
|
43
|
+
/** Invalid lines are findings beside valid entries; an absent log is an empty history. */
|
|
44
|
+
export const readFeedLandings = (stateDir) => readRetainedJsonl(path.join(stateDir, FEED_LANDINGS_FILE), isFeedLanding);
|
|
45
|
+
/** A transition's inclusive window cannot identify which tree a concurrent reader observed. */
|
|
46
|
+
export const feedLandingAt = (entries, instant) => {
|
|
47
|
+
const at = instant instanceof Date ? instant.getTime() : Date.parse(instant);
|
|
48
|
+
const transition = entryAt(entries.filter((entry) => at <= Date.parse(entry.landed_at)), instant, (entry) => entry.switching_at);
|
|
49
|
+
return transition ? { ...transition, ambiguous: true } : entryAt(entries, instant, (entry) => entry.landed_at);
|
|
50
|
+
};
|
|
51
|
+
const landingFromRecord = (target, record) => {
|
|
52
|
+
if (record.recording)
|
|
53
|
+
return record.recording.landing;
|
|
54
|
+
if (!target.source)
|
|
55
|
+
throw new Error("Landed record has no recoverable recording provenance");
|
|
56
|
+
const identity = record.identity, provenance = identity.source;
|
|
57
|
+
const source = target.source.kind === "git"
|
|
58
|
+
? { kind: "git", repo: target.source.repo }
|
|
59
|
+
: { directory: target.source.directory, kind: "directory" };
|
|
60
|
+
if (provenance.prepared)
|
|
61
|
+
source.prepared = provenance.prepared;
|
|
62
|
+
return {
|
|
63
|
+
version: FEED_LANDING_VERSION, resource: identity.resource, volume: identity.volume,
|
|
64
|
+
revision: identity.revision, tree: identity.tree, source, switching_at: identity.landed_at, landed_at: identity.landed_at,
|
|
65
|
+
...(provenance.kind === "git" ? { commit: provenance.commit, ref: provenance.ref, ...(provenance.paths ? { paths: provenance.paths } : {}) } : {}),
|
|
66
|
+
...(record.period ? { period: record.period } : {})
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
/** Call only after writing the corresponding landed.json; the existing feed lock serializes writers. */
|
|
70
|
+
export const appendFeedLanding = (target, record, now) => {
|
|
71
|
+
const keepMs = record.recording?.keep_ms ?? target.record?.keepMs;
|
|
72
|
+
if (keepMs === undefined)
|
|
73
|
+
return;
|
|
74
|
+
const entry = landingFromRecord(target, record);
|
|
75
|
+
appendRetainedJsonl(path.join(target.stateDir, FEED_LANDINGS_FILE), entry, {
|
|
76
|
+
isEntry: isFeedLanding, keepMs, now, timeOf: (landing) => landing.landed_at
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
/** A verified clean host record seeds opt-in history or repairs a previously failed append. */
|
|
80
|
+
export const ensureFeedLanding = (target, record, now) => {
|
|
81
|
+
if (!target.record && !record.recording)
|
|
82
|
+
return;
|
|
83
|
+
const expected = JSON.stringify(landingFromRecord(target, record));
|
|
84
|
+
const history = readFeedLandings(target.stateDir);
|
|
85
|
+
if (history.errors.length)
|
|
86
|
+
throw new Error(`Cannot reconcile feed history: ${history.errors.join("; ")}`);
|
|
87
|
+
if (JSON.stringify(history.entries.at(-1)) === expected) {
|
|
88
|
+
syncFileSync(path.join(target.stateDir, FEED_LANDINGS_FILE));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Also covers recovery after a previous host-record directory fsync failed.
|
|
92
|
+
syncFileSync(path.join(target.stateDir, "landed.json"));
|
|
93
|
+
appendFeedLanding(target, record, now);
|
|
94
|
+
};
|
|
95
|
+
/** Reconcile the authoritative predecessor before ANY replacement, even a revision advance. */
|
|
96
|
+
export const publishFeedLanded = (target, record, now, previous, switchingAt) => {
|
|
97
|
+
if (previous)
|
|
98
|
+
ensureFeedLanding(target, previous, now);
|
|
99
|
+
const { recording: _previousRecording, ...next } = record;
|
|
100
|
+
const landing = target.record ? landingFromRecord(target, next) : undefined;
|
|
101
|
+
if (landing)
|
|
102
|
+
landing.switching_at = switchingAt
|
|
103
|
+
?? (previous?.identity.landed_at === next.identity.landed_at ? previous.recording?.landing.switching_at : undefined)
|
|
104
|
+
?? landing.landed_at;
|
|
105
|
+
const published = writeFeedLanded(target.stateDir, target.record ? {
|
|
106
|
+
...next, recording: { keep_ms: target.record.keepMs, landing: landing }
|
|
107
|
+
} : next);
|
|
108
|
+
if (target.record)
|
|
109
|
+
ensureFeedLanding(target, published, now);
|
|
110
|
+
return published;
|
|
111
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { readlinkSync, renameSync, symlinkSync, unlinkSync } from "node:fs";
|
|
2
|
+
import type { Stats } from "node:fs";
|
|
3
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
4
|
+
export declare const FEED_TREES_DIR = "trees";
|
|
5
|
+
export declare const FEED_CURRENT_LINK = "current";
|
|
6
|
+
export declare const FEED_IDENTITY_FILE = ".spawnfile-feed.json";
|
|
7
|
+
export declare const VOLUME_RESOURCE_SENTINEL = ".spawnfile-resource-identity";
|
|
8
|
+
export declare const VOLUME_ROOT_MODE = 493;
|
|
9
|
+
/** Every name the host itself ever writes at the volume root, plus the container's own sentinel. */
|
|
10
|
+
export declare const FEED_ROOT_NAMES: readonly string[];
|
|
11
|
+
export declare const feedError: (message: string) => SpawnfileError;
|
|
12
|
+
export declare const feedTreeLink: (revision: string) => string;
|
|
13
|
+
/** Read before any write, and a refusal rather than a repair: the start guard owns that contract. */
|
|
14
|
+
export declare const assertFeedVolumeRoot: (volume: string) => void;
|
|
15
|
+
/** Absent is not an error (null); a symlink or file where a host directory belongs is a refusal, never a repair. */
|
|
16
|
+
export declare const assertRealDirectory: (target: string, label: string) => Stats | null;
|
|
17
|
+
/** rename(2) is atomic only within one filesystem; a cross-device "rename" is a copy readers can watch. */
|
|
18
|
+
export declare const assertSameDevice: (volume: string, other: string, label: string) => void;
|
|
19
|
+
/** Host state must never live where an agent can write it: it decides what a root-run job deletes. */
|
|
20
|
+
export declare const assertOutsideVolume: (volume: string, target: string, label: string) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Ownership and read-only modes for a staged tree, before it is reachable. Never follows a symlink.
|
|
23
|
+
* The top directory stays 0755 so the one rename into the volume works for a non-root writer;
|
|
24
|
+
* `landTree` freezes it the moment it lands.
|
|
25
|
+
*/
|
|
26
|
+
export declare const ownAndFreeze: (stagingDir: string, { owner, volume }: {
|
|
27
|
+
owner?: string;
|
|
28
|
+
volume: string;
|
|
29
|
+
}) => void;
|
|
30
|
+
/** The one rename that makes a validated tree part of the volume, with its root frozen the moment it lands. */
|
|
31
|
+
export declare const landTree: (stagingDir: string, treePath: string) => void;
|
|
32
|
+
/** Every filesystem call the link swap makes, so a test can watch what the swap actually does. */
|
|
33
|
+
export declare const LINK_OPS: Readonly<{
|
|
34
|
+
lstat: import("fs").StatSyncFn;
|
|
35
|
+
readlink: typeof readlinkSync;
|
|
36
|
+
rename: typeof renameSync;
|
|
37
|
+
symlink: typeof symlinkSync;
|
|
38
|
+
unlink: typeof unlinkSync;
|
|
39
|
+
}>;
|
|
40
|
+
export type LinkOps = typeof LINK_OPS;
|
|
41
|
+
export declare const moveAsideCommand: (volume: string, target: string) => string;
|
|
42
|
+
/**
|
|
43
|
+
* ATOMIC OR NOTHING. The live name is never unlinked: a new link is created under a temporary name outside
|
|
44
|
+
* the volume and rename(2)'d over the live one, so a reader resolving `current` sees the old target or
|
|
45
|
+
* the new one, never a missing name. The target is relative so it resolves the same on the host and at
|
|
46
|
+
* the container mount. Returns false when the link already points at `target`.
|
|
47
|
+
*/
|
|
48
|
+
export declare const pointCurrent: (volume: string, target: string, { ops, tmpDir, beforeRename }: {
|
|
49
|
+
ops?: LinkOps;
|
|
50
|
+
tmpDir: string;
|
|
51
|
+
beforeRename?: () => void;
|
|
52
|
+
}) => boolean;
|
|
53
|
+
/** Thaw and delete a tree OUTSIDE the volume. A recursive delete is only ever aimed at a real directory. */
|
|
54
|
+
export declare const removeTree: (target: string, { volume }: {
|
|
55
|
+
volume: string;
|
|
56
|
+
}) => void;
|
|
57
|
+
/** One rename out of the volume. Write on the moved directory is needed to change its parent. */
|
|
58
|
+
export declare const parkTree: (treePath: string, trash: string, stamp: string) => string;
|
|
59
|
+
/** Names at the volume root the host never writes. Reported, never deleted: they are evidence. */
|
|
60
|
+
export declare const auditFeedRoot: (volume: string) => string[];
|
|
61
|
+
export declare const treeShape: (target: string) => "missing" | "directory" | "symlink" | "file";
|