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,140 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { execFile as execFileCallback } from "node:child_process";
|
|
3
|
+
import { link, open, readFile, rm } from "node:fs/promises";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
8
|
+
import { parseUpReceipt } from "./upReceiptTypes.js";
|
|
9
|
+
import { parseDownReceipt } from "./downReceiptTypes.js";
|
|
10
|
+
const execFile = promisify(execFileCallback);
|
|
11
|
+
const digest = z.string().regex(/^sha256:[a-f0-9]{64}$/u), runId = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$/u), nonce = z.string().regex(/^[a-f0-9]{32}$/u);
|
|
12
|
+
const ingressReceiptSchema = z.object({ version: z.literal("spawnfile.ingress-cutover-receipt.v1"), state: z.literal("switched"), nonce, from_deployment: z.string().min(1), to_deployment: z.string().min(1), target_run_id: runId, readiness_sha256: digest }).strict();
|
|
13
|
+
const decisionReceiptSchema = z.object({ version: z.literal("spawnfile.canary-decision-receipt.v1"), decision: z.literal("cutover"), nonce, target_run_id: runId, deployment_mode: z.enum(["project", "image"]), target_identity_sha256: digest, ingress_receipt_sha256: digest, teardown_checkpoint_sha256: digest, down_receipt_sha256: digest }).strict();
|
|
14
|
+
const reportSchema = z.object({
|
|
15
|
+
persistent_mounts: z.array(z.object({
|
|
16
|
+
id: z.string().min(1),
|
|
17
|
+
lifecycle: z.literal("exclusive-reattach").optional()
|
|
18
|
+
}).passthrough()).max(4096).optional().default([]),
|
|
19
|
+
published_ports: z.array(z.number().int().min(1).max(65535)).max(64)
|
|
20
|
+
}).passthrough();
|
|
21
|
+
export const deploymentIdentitySchema = z.object({ version: z.literal("spawnfile.deployment-identity.v1"), run_id: runId, fingerprint: z.string().min(1), deployment_name: z.string().min(1), deployment_mode: z.enum(["project", "image"]), image_id: z.string().regex(/^sha256:[a-f0-9]{64}$/u), organization_unit_id: z.string().min(1), organization_compile_fingerprint: z.string().min(1), organization_world_binding_digest: digest.nullable(), topology_sha256: digest }).strict();
|
|
22
|
+
const execute = async (command, args) => (await execFile(command, args, { encoding: "utf8", timeout: 30_000, maxBuffer: 1_048_576 })).stdout;
|
|
23
|
+
const inspect = async (command, args) => (await execFile(command, args, { encoding: "utf8", timeout: 10_000, maxBuffer: 1_048_576 })).stdout;
|
|
24
|
+
const sha = (bytes) => `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
|
|
25
|
+
const canonical = (value) => JSON.stringify(value, (_key, item) => item && typeof item === "object" && !Array.isArray(item) ? Object.fromEntries(Object.entries(item).sort(([left], [right]) => left.localeCompare(right))) : item);
|
|
26
|
+
const topologyDigest = (receipt) => sha(canonical({ compiled_schedule: receipt.compiled_schedule, engines: receipt.engines ?? [], moltnet_release: receipt.moltnet_release ?? null }));
|
|
27
|
+
export const verifyCandidatePortIsolation = (liveReport, candidateReport) => {
|
|
28
|
+
const liveReportValue = reportSchema.parse(liveReport), candidateReportValue = reportSchema.parse(candidateReport);
|
|
29
|
+
const live = new Set(liveReportValue.published_ports), candidate = candidateReportValue.published_ports;
|
|
30
|
+
if (candidate.some((port) => live.has(port)) || new Set(candidate).size !== candidate.length)
|
|
31
|
+
throw new SpawnfileError("validation_error", "Candidate published ports are not mechanically isolated from live");
|
|
32
|
+
const liveMounts = new Map(liveReportValue.persistent_mounts.map((mount) => [mount.id, mount]));
|
|
33
|
+
const sharedExclusive = candidateReportValue.persistent_mounts.find((mount) => liveMounts.has(mount.id)
|
|
34
|
+
&& (mount.lifecycle === "exclusive-reattach" || liveMounts.get(mount.id)?.lifecycle === "exclusive-reattach"));
|
|
35
|
+
if (sharedExclusive)
|
|
36
|
+
throw new SpawnfileError("validation_error", `Candidate shares exclusive persistent mount ${sharedExclusive.id}; use stop-and-reattach deployment instead of concurrent canary`);
|
|
37
|
+
return candidate;
|
|
38
|
+
};
|
|
39
|
+
const verifyIdentity = (receipt, expected) => {
|
|
40
|
+
const ready = receipt.organization_ready;
|
|
41
|
+
if (receipt.run_id !== expected.run_id || receipt.fingerprint !== expected.fingerprint || receipt.deployment.name !== expected.deployment_name || ready?.state !== "ready" || ready.unit_id !== expected.organization_unit_id || ready.compile_fingerprint !== expected.organization_compile_fingerprint || ready.world_binding_digest !== expected.organization_world_binding_digest || topologyDigest(receipt) !== expected.topology_sha256)
|
|
42
|
+
throw new SpawnfileError("validation_error", "Readiness does not bind the exact intended deployment identity and topology");
|
|
43
|
+
};
|
|
44
|
+
export const issueDeploymentIdentity = async (readinessPath, deploymentMode, dockerCommand, imageInspect = inspect) => {
|
|
45
|
+
const receipt = parseUpReceipt(JSON.parse(await readFile(readinessPath, "utf8"))), ready = receipt.organization_ready;
|
|
46
|
+
if (receipt.run_id === null || receipt.deployment.name === null || receipt.deployment.container_ids.length < 1 || ready?.state !== "ready")
|
|
47
|
+
throw new SpawnfileError("validation_error", "Deployment is not identity-ready");
|
|
48
|
+
const images = await Promise.all(receipt.deployment.container_ids.map(async (container) => (await imageInspect(dockerCommand, ["inspect", "--format", "{{.Image}}", container])).trim()));
|
|
49
|
+
if (!images[0] || images.some((image) => image !== images[0]))
|
|
50
|
+
throw new SpawnfileError("validation_error", "Deployment containers do not share one exact image identity");
|
|
51
|
+
return deploymentIdentitySchema.parse({ version: "spawnfile.deployment-identity.v1", run_id: receipt.run_id, fingerprint: receipt.fingerprint, deployment_name: receipt.deployment.name, deployment_mode: deploymentMode, image_id: images[0], organization_unit_id: ready.unit_id, organization_compile_fingerprint: ready.compile_fingerprint, organization_world_binding_digest: ready.world_binding_digest, topology_sha256: topologyDigest(receipt) });
|
|
52
|
+
};
|
|
53
|
+
const syncParent = async (filePath) => { const directory = await open(path.dirname(filePath), "r"); try {
|
|
54
|
+
await directory.sync();
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
await directory.close();
|
|
58
|
+
} };
|
|
59
|
+
const publishExclusive = async (filePath, value) => { const temporary = `${filePath}.tmp-${process.pid}`; const file = await open(temporary, "wx", 0o600); try {
|
|
60
|
+
await file.writeFile(`${JSON.stringify(value)}\n`);
|
|
61
|
+
await file.sync();
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
await file.close();
|
|
65
|
+
} try {
|
|
66
|
+
await link(temporary, filePath);
|
|
67
|
+
await syncParent(filePath);
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
await rm(temporary, { force: true });
|
|
71
|
+
await syncParent(filePath);
|
|
72
|
+
} };
|
|
73
|
+
const exists = async (filePath) => await readFile(filePath).then(() => true, (error) => error.code === "ENOENT" ? false : Promise.reject(error));
|
|
74
|
+
export const runCanaryCutover = async (input, runner = execute, imageInspect = inspect) => {
|
|
75
|
+
const expected = deploymentIdentitySchema.parse(input.expectedIdentity), operationNonce = nonce.parse(input.nonce);
|
|
76
|
+
if (input.ingressArgs.length > 32 || input.teardownArgs.length > 32 || [...input.ingressArgs, ...input.teardownArgs].some((arg) => arg.length > 4096))
|
|
77
|
+
throw new SpawnfileError("validation_error", "Canary command arguments exceed bounds");
|
|
78
|
+
const lifecycleId = `lci_canary_${operationNonce}`, exportIndex = input.teardownArgs.indexOf("--export-to"), prefix = ["down", input.teardownProjectPath, "--compiled", input.teardownCompiledPath, "--deployment", input.fromDeployment], expectedTeardownArgs = input.teardownPolicy === "export" ? [...prefix, "--export-to", input.teardownArgs[exportIndex + 1] ?? "", "--json", "--lifecycle-invocation", lifecycleId] : [...prefix, "--force", "--json", "--lifecycle-invocation", lifecycleId];
|
|
79
|
+
const canonicalPath = (value) => path.isAbsolute(value) && path.resolve(value) === value && path.normalize(value) === value;
|
|
80
|
+
if (!canonicalPath(input.teardownProjectPath) || !canonicalPath(input.teardownCompiledPath) || path.basename(input.teardownCommand) !== "spawnfile" || (input.teardownPolicy === "export" && (exportIndex < 0 || !expectedTeardownArgs[7])) || canonical(input.teardownArgs) !== canonical(expectedTeardownArgs))
|
|
81
|
+
throw new SpawnfileError("validation_error", "Teardown is not the exact canonical Spawnfile lifecycle down operation");
|
|
82
|
+
verifyCandidatePortIsolation(JSON.parse(await readFile(input.liveReportPath, "utf8")), JSON.parse(await readFile(input.candidateReportPath, "utf8")));
|
|
83
|
+
const readinessBytes = await readFile(input.readinessPath), readiness = parseUpReceipt(JSON.parse(readinessBytes.toString("utf8")));
|
|
84
|
+
verifyIdentity(readiness, expected);
|
|
85
|
+
if (readiness.deployment.container_ids.length < 1)
|
|
86
|
+
throw new SpawnfileError("validation_error", "Ready deployment has no image-bearing containers");
|
|
87
|
+
for (const container of readiness.deployment.container_ids)
|
|
88
|
+
if ((await imageInspect(input.dockerCommand, ["inspect", "--format", "{{.Image}}", container])).trim() !== expected.image_id)
|
|
89
|
+
throw new SpawnfileError("validation_error", "Ready deployment image does not match intended identity");
|
|
90
|
+
const binding = sha(canonical({ ...input, expectedIdentity: expected }));
|
|
91
|
+
const transaction = { version: "spawnfile.canary-transaction.v1", state: "reserved", nonce: operationNonce, binding_sha256: binding };
|
|
92
|
+
const recovering = await exists(input.transactionPath);
|
|
93
|
+
if (recovering) {
|
|
94
|
+
const prior = JSON.parse(await readFile(input.transactionPath, "utf8"));
|
|
95
|
+
if (prior.version !== transaction.version || prior.nonce !== operationNonce || prior.binding_sha256 !== binding)
|
|
96
|
+
throw new SpawnfileError("validation_error", "Canary transaction authority does not match");
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
if (await exists(input.ingressReceiptPath) || await exists(input.decisionReceiptPath))
|
|
100
|
+
throw new SpawnfileError("validation_error", "Stale canary receipt exists before transaction reservation");
|
|
101
|
+
await publishExclusive(input.transactionPath, transaction);
|
|
102
|
+
}
|
|
103
|
+
if (!await exists(input.ingressReceiptPath))
|
|
104
|
+
await runner(input.ingressCommand, input.ingressArgs);
|
|
105
|
+
const ingressBytes = await readFile(input.ingressReceiptPath), ingress = ingressReceiptSchema.parse(JSON.parse(ingressBytes.toString("utf8")));
|
|
106
|
+
if (ingress.nonce !== operationNonce || ingress.from_deployment !== input.fromDeployment || ingress.to_deployment !== input.toDeployment || ingress.target_run_id !== expected.run_id || ingress.readiness_sha256 !== sha(readinessBytes))
|
|
107
|
+
throw new SpawnfileError("validation_error", "Ingress receipt does not bind the exact ready target and transaction nonce");
|
|
108
|
+
const teardownStartedPath = `${input.transactionPath}.teardown-started`, teardownReceiptPath = `${input.transactionPath}.teardown-receipt`, teardownCheckpointPath = `${input.transactionPath}.teardown-complete`, checkpointBase = { nonce: operationNonce, binding_sha256: binding, ingress_receipt_sha256: sha(ingressBytes), lifecycle_invocation: lifecycleId };
|
|
109
|
+
if (!await exists(teardownCheckpointPath)) {
|
|
110
|
+
if (await exists(input.decisionReceiptPath))
|
|
111
|
+
throw new SpawnfileError("validation_error", "Canary decision exists without its teardown checkpoint");
|
|
112
|
+
if (!await exists(teardownStartedPath))
|
|
113
|
+
await publishExclusive(teardownStartedPath, { version: "spawnfile.canary-teardown-started.v1", ...checkpointBase });
|
|
114
|
+
if (!await exists(teardownReceiptPath)) {
|
|
115
|
+
const output = await runner(input.teardownCommand, input.teardownArgs), down = parseDownReceipt(JSON.parse(typeof output === "string" ? output : ""));
|
|
116
|
+
if (down.deployment !== input.fromDeployment || down.errors.length !== 0)
|
|
117
|
+
throw new SpawnfileError("validation_error", "Down receipt does not prove exact teardown completion");
|
|
118
|
+
await publishExclusive(teardownReceiptPath, down);
|
|
119
|
+
}
|
|
120
|
+
const downBytes = await readFile(teardownReceiptPath), down = parseDownReceipt(JSON.parse(downBytes.toString("utf8")));
|
|
121
|
+
if (down.deployment !== input.fromDeployment || down.errors.length !== 0)
|
|
122
|
+
throw new SpawnfileError("validation_error", "Stored down receipt does not bind the teardown operation");
|
|
123
|
+
await publishExclusive(teardownCheckpointPath, { version: "spawnfile.canary-teardown-checkpoint.v1", ...checkpointBase, down_receipt_sha256: sha(downBytes) });
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
const downBytes = await readFile(teardownReceiptPath), down = parseDownReceipt(JSON.parse(downBytes.toString("utf8"))), expectedCheckpoint = { version: "spawnfile.canary-teardown-checkpoint.v1", ...checkpointBase, down_receipt_sha256: sha(downBytes) };
|
|
127
|
+
if (down.deployment !== input.fromDeployment || down.errors.length !== 0 || canonical(JSON.parse(await readFile(teardownCheckpointPath, "utf8"))) !== canonical(expectedCheckpoint))
|
|
128
|
+
throw new SpawnfileError("validation_error", "Canary teardown checkpoint does not match the recovered transaction");
|
|
129
|
+
}
|
|
130
|
+
const checkpointBytes = await readFile(teardownCheckpointPath), downBytes = await readFile(teardownReceiptPath), decision = { version: "spawnfile.canary-decision-receipt.v1", decision: "cutover", nonce: operationNonce, target_run_id: expected.run_id, deployment_mode: expected.deployment_mode, target_identity_sha256: sha(canonical(expected)), ingress_receipt_sha256: sha(ingressBytes), teardown_checkpoint_sha256: sha(checkpointBytes), down_receipt_sha256: sha(downBytes) };
|
|
131
|
+
if (!await exists(input.decisionReceiptPath)) {
|
|
132
|
+
await publishExclusive(input.decisionReceiptPath, decision);
|
|
133
|
+
return decision;
|
|
134
|
+
}
|
|
135
|
+
const priorDecision = decisionReceiptSchema.parse(JSON.parse(await readFile(input.decisionReceiptPath, "utf8")));
|
|
136
|
+
if (canonical(priorDecision) !== canonical(decision))
|
|
137
|
+
throw new SpawnfileError("validation_error", "Canary decision receipt does not match the recovered transaction");
|
|
138
|
+
return priorDecision;
|
|
139
|
+
};
|
|
140
|
+
export const verifyEquivalentRollbackReadiness = async (rollbackReadinessPath, expectedIdentity) => { const expected = deploymentIdentitySchema.parse(expectedIdentity), rollback = parseUpReceipt(JSON.parse(await readFile(rollbackReadinessPath, "utf8"))); verifyIdentity(rollback, expected); };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DockerCommandRunner } from "../distribution/dockerRunner.js";
|
|
2
|
+
export interface CandidateDiagnosticsInput {
|
|
3
|
+
candidateId: string;
|
|
4
|
+
deploymentName: string;
|
|
5
|
+
runDocker: DockerCommandRunner;
|
|
6
|
+
secretValues: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface CandidateDiagnosticsResult {
|
|
9
|
+
path: string | null;
|
|
10
|
+
summary: string;
|
|
11
|
+
}
|
|
12
|
+
/** Redaction is best effort; diagnostic artifacts remain private operator data. */
|
|
13
|
+
export declare const sanitizeCandidateDiagnostic: (text: string, secrets: string[]) => string;
|
|
14
|
+
/** Collect before rollback deletes the only container-local startup evidence. */
|
|
15
|
+
export declare const captureCandidateDiagnostics: (input: CandidateDiagnosticsInput) => Promise<CandidateDiagnosticsResult>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { lstat, mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { resolveSpawnfileHome } from "../auth/index.js";
|
|
5
|
+
import { redactDockerLogText } from "./dockerLogs.js";
|
|
6
|
+
import { resolveHomeDeploymentDirectory } from "./homeStore.js";
|
|
7
|
+
const outputLimit = 64 * 1024;
|
|
8
|
+
const commandOptions = { captureStderr: true, maxOutputBytes: outputLimit, timeoutMs: 5_000 };
|
|
9
|
+
const containerIdPattern = /^[a-f0-9]{64}$/u;
|
|
10
|
+
/** Redaction is best effort; diagnostic artifacts remain private operator data. */
|
|
11
|
+
export const sanitizeCandidateDiagnostic = (text, secrets) => redactDockerLogText(text, secrets)
|
|
12
|
+
.replace(/-----BEGIN [^-]*PRIVATE KEY-----[\s\S]*?(?:-----END [^-]*PRIVATE KEY-----|$)/gu, "[REDACTED PRIVATE KEY]")
|
|
13
|
+
.replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/gu, "[REDACTED JWT]")
|
|
14
|
+
.replace(/https?:\/\/[^\s<>"']+/giu, "[REDACTED URL]")
|
|
15
|
+
.replace(/\b([a-z0-9_-]*(?:authorization|cookie|password|secret|token|api[_-]?key)[a-z0-9_-]*)["']?\s*[:=]\s*[^\r\n]+/giu, "$1: [REDACTED]");
|
|
16
|
+
const collect = async (runDocker, args) => {
|
|
17
|
+
try {
|
|
18
|
+
const bytes = await runDocker(args, commandOptions);
|
|
19
|
+
// Injectable runners must obey the same limit as the default Docker runner.
|
|
20
|
+
if (bytes.length > outputLimit)
|
|
21
|
+
throw new Error("limit");
|
|
22
|
+
return { available: true, text: bytes.toString("utf8") };
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Docker transport errors can contain command/env details; never persist them.
|
|
26
|
+
return { available: false, text: "Diagnostic command failed, timed out, or exceeded its byte limit" };
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const summarizeState = (raw, secrets) => {
|
|
30
|
+
try {
|
|
31
|
+
const state = JSON.parse(raw);
|
|
32
|
+
const health = state.Health?.Status;
|
|
33
|
+
const status = ["created", "running", "paused", "restarting", "removing", "exited", "dead"].includes(String(state.Status))
|
|
34
|
+
? state.Status : "unknown";
|
|
35
|
+
const parts = [`state=${status}`];
|
|
36
|
+
if (["starting", "healthy", "unhealthy"].includes(String(health)))
|
|
37
|
+
parts.push(`health=${health}`);
|
|
38
|
+
if (Number.isSafeInteger(state.ExitCode))
|
|
39
|
+
parts.push(`exit=${state.ExitCode}`);
|
|
40
|
+
if (state.OOMKilled === true)
|
|
41
|
+
parts.push("oom-killed");
|
|
42
|
+
const healthState = state.Health;
|
|
43
|
+
const text = (value) => typeof value === "string"
|
|
44
|
+
? sanitizeCandidateDiagnostic(value, secrets).slice(0, 4_096) : "";
|
|
45
|
+
return { available: true, summary: parts.join(", "), error: text(state.Error),
|
|
46
|
+
healthOutput: Array.isArray(healthState?.Log) ? healthState.Log.slice(-3).map((entry) => text(entry && typeof entry === "object" ? entry.Output : null)) : [] };
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return { available: false, summary: "state unavailable", error: "", healthOutput: [] };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
/** Collect before rollback deletes the only container-local startup evidence. */
|
|
53
|
+
export const captureCandidateDiagnostics = async (input) => {
|
|
54
|
+
if (!containerIdPattern.test(input.candidateId))
|
|
55
|
+
return { path: null, summary: "invalid candidate identity" };
|
|
56
|
+
const [state, logs] = await Promise.all([
|
|
57
|
+
collect(input.runDocker, ["container", "inspect", "--format", "{{json .State}}", input.candidateId]),
|
|
58
|
+
collect(input.runDocker, ["logs", "--tail", "100", input.candidateId])
|
|
59
|
+
]);
|
|
60
|
+
const health = summarizeState(state.available ? state.text : "", input.secretValues);
|
|
61
|
+
const summary = health.summary;
|
|
62
|
+
try {
|
|
63
|
+
const deploymentDirectory = resolveHomeDeploymentDirectory(input.deploymentName);
|
|
64
|
+
for (const parent of [resolveSpawnfileHome(), path.dirname(deploymentDirectory), deploymentDirectory]) {
|
|
65
|
+
const info = await lstat(parent);
|
|
66
|
+
if (!info.isDirectory() || info.isSymbolicLink() || (info.mode & 0o022) !== 0
|
|
67
|
+
|| (process.getuid && info.uid !== process.getuid()))
|
|
68
|
+
throw new Error("unsafe diagnostics parent");
|
|
69
|
+
}
|
|
70
|
+
const directory = path.join(deploymentDirectory, "diagnostics");
|
|
71
|
+
await mkdir(directory, { mode: 0o700 }).catch((error) => {
|
|
72
|
+
if (error.code !== "EEXIST")
|
|
73
|
+
throw error;
|
|
74
|
+
});
|
|
75
|
+
const info = await lstat(directory);
|
|
76
|
+
if (!info.isDirectory() || info.isSymbolicLink() || (info.mode & 0o777) !== 0o700
|
|
77
|
+
|| (process.getuid && info.uid !== process.getuid()))
|
|
78
|
+
throw new Error("unsafe diagnostics directory");
|
|
79
|
+
const destination = path.join(directory, `candidate-${Date.now()}-${randomUUID()}.json`);
|
|
80
|
+
await writeFile(destination, `${JSON.stringify({
|
|
81
|
+
version: "spawnfile.candidate-diagnostics.v1", capturedAt: new Date().toISOString(),
|
|
82
|
+
candidateId: input.candidateId, deployment: input.deploymentName, summary, health,
|
|
83
|
+
logs: { available: logs.available, text: sanitizeCandidateDiagnostic(logs.text, input.secretValues) }
|
|
84
|
+
}, null, 2)}\n`, { flag: "wx", mode: 0o600 });
|
|
85
|
+
return { path: destination, summary };
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return { path: null, summary };
|
|
89
|
+
}
|
|
90
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type DeploymentActivation, type DeployResourceReport, type DeployResources } from "./resourceLog.js";
|
|
2
|
+
/** A candidate may execute turns before failing readiness/publication. Preserve its pins
|
|
3
|
+
* after rollback, without replacing the still-authoritative predecessor's record. */
|
|
4
|
+
export declare const recordDeploymentRollback: (recordPath: string, record: DeploymentActivation & {
|
|
5
|
+
name: string;
|
|
6
|
+
created_at: string;
|
|
7
|
+
resource_snapshot?: DeployResources;
|
|
8
|
+
}, report: DeployResourceReport, reportBytes: string, rolledBackAt: string) => Promise<void>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { ensureDirectory } from "../filesystem/index.js";
|
|
3
|
+
import { acquirePidLock } from "./pidLock.js";
|
|
4
|
+
import { createDeployResources, ensureDeployResources } from "./resourceLog.js";
|
|
5
|
+
/** A candidate may execute turns before failing readiness/publication. Preserve its pins
|
|
6
|
+
* after rollback, without replacing the still-authoritative predecessor's record. */
|
|
7
|
+
export const recordDeploymentRollback = async (recordPath, record, report, reportBytes, rolledBackAt) => {
|
|
8
|
+
if (!report.recording)
|
|
9
|
+
return;
|
|
10
|
+
await ensureDirectory(path.dirname(recordPath));
|
|
11
|
+
const release = await acquirePidLock(`${recordPath}.resource-log.lock`);
|
|
12
|
+
try {
|
|
13
|
+
ensureDeployResources(recordPath, {
|
|
14
|
+
...(record.resource_snapshot ?? createDeployResources(recordPath, record, report, reportBytes)),
|
|
15
|
+
rolled_back_at: rolledBackAt, activation_exact: false, exact: false,
|
|
16
|
+
activation_note: "Candidate ran before rollback; its turns cannot be distinguished from predecessor turns"
|
|
17
|
+
}, report.recording.keep_ms);
|
|
18
|
+
}
|
|
19
|
+
finally {
|
|
20
|
+
await release();
|
|
21
|
+
}
|
|
22
|
+
};
|
|
@@ -15,10 +15,13 @@ const withDockerTarget = (record, args) => {
|
|
|
15
15
|
return args;
|
|
16
16
|
};
|
|
17
17
|
const normalizeTail = (tail) => typeof tail === "number" && Number.isInteger(tail) && tail > 0 ? tail : 100;
|
|
18
|
+
const stripTerminalControls = (value) => value.replace(/\x1b\[[0-?]*[ -/]*[@-~]|[\x00-\x08\x0b-\x1f\x7f]/gu, "");
|
|
18
19
|
const redactKnownSecrets = (text, secretValues) => secretValues
|
|
20
|
+
.map(stripTerminalControls)
|
|
19
21
|
.filter((secret) => secret.length > 0)
|
|
22
|
+
.sort((left, right) => right.length - left.length)
|
|
20
23
|
.reduce((redacted, secret) => redacted.replaceAll(secret, "[REDACTED]"), text);
|
|
21
|
-
export const redactDockerLogText = (text, secretValues = []) => redactSensitiveText(redactKnownSecrets(text, secretValues));
|
|
24
|
+
export const redactDockerLogText = (text, secretValues = []) => redactSensitiveText(redactKnownSecrets(stripTerminalControls(text), secretValues));
|
|
22
25
|
const combineLogStreams = (stdout, stderr) => {
|
|
23
26
|
if (!stdout) {
|
|
24
27
|
return stderr;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { DeploymentRecordSource } from "./record.js";
|
|
2
2
|
import type { OrganizationReadinessEvidence } from "../compiler/organizationReadyEvidence.js";
|
|
3
|
+
import type { DeploymentActivation, DeployResourceReport } from "./resourceLog.js";
|
|
3
4
|
import { type DockerProbeExecFile } from "./dockerProbeGateway.js";
|
|
4
5
|
import { type OrganizationReadiness } from "./organizationReady.js";
|
|
5
6
|
import { type DockerDeploymentTarget, type DockerTargetExecFile } from "./target.js";
|
|
@@ -22,7 +23,7 @@ export interface DockerDeploymentRunInvocationInput {
|
|
|
22
23
|
dockerContext?: string | null;
|
|
23
24
|
dockerHost?: string | null;
|
|
24
25
|
}
|
|
25
|
-
export interface DockerDeploymentReportInput {
|
|
26
|
+
export interface DockerDeploymentReportInput extends DeployResourceReport {
|
|
26
27
|
compile_fingerprint?: string;
|
|
27
28
|
container?: {
|
|
28
29
|
moltnet?: {
|
|
@@ -38,7 +39,7 @@ export interface DockerDeploymentReportInput {
|
|
|
38
39
|
nodes: DockerDeploymentNodeInput[];
|
|
39
40
|
root: string;
|
|
40
41
|
}
|
|
41
|
-
export interface WriteDockerDeploymentRecordInput {
|
|
42
|
+
export interface WriteDockerDeploymentRecordInput extends DeploymentActivation {
|
|
42
43
|
authProfileName: string | null;
|
|
43
44
|
compileFingerprint: string;
|
|
44
45
|
containerName: string | null;
|
|
@@ -82,7 +83,8 @@ export declare const createDockerDeploymentUnitId: (deploymentName: string) => s
|
|
|
82
83
|
export declare const createDockerDeploymentRecord: (input: WriteDockerDeploymentRecordInput) => DeploymentRecord;
|
|
83
84
|
export declare const createDockerProjectLabel: (projectRoot: string, projectName?: string) => string;
|
|
84
85
|
export declare const writeDockerDeploymentRecord: (input: WriteDockerDeploymentRecordInput) => Promise<string>;
|
|
85
|
-
export declare const writeDockerDeploymentRecordForRun: (input: {
|
|
86
|
+
export declare const writeDockerDeploymentRecordForRun: (input: DeploymentActivation & {
|
|
87
|
+
previousRecord?: DeploymentRecord;
|
|
86
88
|
authProfileName: string | null;
|
|
87
89
|
envFilePath?: string;
|
|
88
90
|
imageTag: string;
|
|
@@ -3,7 +3,10 @@ import { normalizeProjectLabelSlug } from "../distribution/index.js";
|
|
|
3
3
|
import { resolveNoopolisRunId } from "../runtime/index.js";
|
|
4
4
|
import { SpawnfileError } from "../shared/index.js";
|
|
5
5
|
import { inspectDockerDeployment } from "./dockerInspect.js";
|
|
6
|
-
import {
|
|
6
|
+
import { bindDeploymentRecording } from "./recordPublication.js";
|
|
7
|
+
import { readUtf8File } from "../filesystem/index.js";
|
|
8
|
+
import { REPORT_FILENAME } from "../shared/index.js";
|
|
9
|
+
import { normalizeDeploymentName, resolveDeploymentRecordPath } from "./names.js";
|
|
7
10
|
import { createDockerProbeGateway } from "./dockerProbeGateway.js";
|
|
8
11
|
import { organizationReadinessFromProbeError, reconcileOrganizationReadiness } from "./organizationReady.js";
|
|
9
12
|
import { resolveDockerDeploymentTarget } from "./target.js";
|
|
@@ -40,6 +43,7 @@ export const createDockerDeploymentRecord = (input) => {
|
|
|
40
43
|
auth_profile: input.authProfileName,
|
|
41
44
|
compile_fingerprint: input.compileFingerprint,
|
|
42
45
|
created_at: new Date().toISOString(),
|
|
46
|
+
...(input.activated_at ? { activated_at: input.activated_at, activation_exact: input.activation_exact, activation_note: input.activation_note } : {}),
|
|
43
47
|
...(input.envFilePath ? { env_file: path.resolve(input.envFilePath) } : {}),
|
|
44
48
|
manager: "docker",
|
|
45
49
|
name,
|
|
@@ -85,7 +89,8 @@ export const writeDockerDeploymentRecordForRun = async (input) => {
|
|
|
85
89
|
if (!input.invocation.detach || !input.invocation.deploymentName) {
|
|
86
90
|
return null;
|
|
87
91
|
}
|
|
88
|
-
|
|
92
|
+
const record = createDockerDeploymentRecord({
|
|
93
|
+
activated_at: input.activated_at, activation_exact: input.activation_exact, activation_note: input.activation_note,
|
|
89
94
|
authProfileName: input.authProfileName,
|
|
90
95
|
compileFingerprint: requireCompileFingerprint(input.report.compile_fingerprint),
|
|
91
96
|
containerName: input.invocation.containerName,
|
|
@@ -116,6 +121,11 @@ export const writeDockerDeploymentRecordForRun = async (input) => {
|
|
|
116
121
|
timeoutMs: input.targetTimeoutMs
|
|
117
122
|
})
|
|
118
123
|
});
|
|
124
|
+
const recordPath = resolveDeploymentRecordPath(input.outputDirectory, record.name);
|
|
125
|
+
const bound = input.report.recording
|
|
126
|
+
? bindDeploymentRecording(recordPath, record, input.report, await readUtf8File(path.join(input.outputDirectory, REPORT_FILENAME)))
|
|
127
|
+
: record;
|
|
128
|
+
return writeDeploymentRecord(input.outputDirectory, bound, input.previousRecord);
|
|
119
129
|
};
|
|
120
130
|
const recordCorrelation = (record) => ({
|
|
121
131
|
compileFingerprint: record.compile_fingerprint,
|
|
@@ -151,7 +161,7 @@ export const probeDockerOrganizationReadiness = async (input) => {
|
|
|
151
161
|
timeoutMs: input.timeoutMs
|
|
152
162
|
});
|
|
153
163
|
const inspection = await gateway.inspectUnit();
|
|
154
|
-
if (input.evidence.hasExternalMoltnet
|
|
164
|
+
if (input.evidence.hasExternalMoltnet) {
|
|
155
165
|
return reconcileOrganizationReadiness({
|
|
156
166
|
evidence: input.evidence, inspection, probe: null, record: correlation
|
|
157
167
|
});
|
|
@@ -173,17 +183,23 @@ export const probeDockerOrganizationReadiness = async (input) => {
|
|
|
173
183
|
});
|
|
174
184
|
}
|
|
175
185
|
const configs = new Map();
|
|
186
|
+
const attachmentReceipts = new Map();
|
|
176
187
|
for (const network of input.evidence.networks) {
|
|
177
188
|
for (const node of network.nodes) {
|
|
178
189
|
const result = await gateway.exec(["cat", node.configPath]);
|
|
179
190
|
configs.set(node.configPath, result.stdout);
|
|
191
|
+
const receipt = await gateway.exec(["cat", node.receiptPath]);
|
|
192
|
+
attachmentReceipts.set(node.receiptPath, receipt.stdout);
|
|
180
193
|
}
|
|
181
194
|
}
|
|
182
|
-
const
|
|
195
|
+
const daimonReceipt = input.evidence.daimon == null ? null : (await gateway.exec(["cat", input.evidence.daimon.receiptPath])).stdout;
|
|
196
|
+
const bindings = input.evidence.worldBindings === null
|
|
197
|
+
? null
|
|
198
|
+
: await gateway.exec(["cat", input.evidence.worldBindings.artifactPath]);
|
|
183
199
|
return reconcileOrganizationReadiness({
|
|
184
200
|
evidence: input.evidence,
|
|
185
201
|
inspection,
|
|
186
|
-
probe: { configs, networks, worldBindings: bindings
|
|
202
|
+
probe: { attachmentReceipts, configs, daimonReceipt, networks, worldBindings: bindings?.stdout ?? null },
|
|
187
203
|
record: correlation
|
|
188
204
|
});
|
|
189
205
|
}
|
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import type { RuntimeProbeGateway } from "../runtime/index.js";
|
|
2
2
|
import type { DeploymentRecord } from "./record.js";
|
|
3
3
|
import type { DockerUnitInspection } from "./dockerInspect.js";
|
|
4
|
+
/**
|
|
5
|
+
* The ledger this gateway reads (`spawnfile usage`) rotates once a generation
|
|
6
|
+
* reaches `DAIMON_GROK_TURN_USAGE_LEDGER.rotateBytes`, and rotation happens on
|
|
7
|
+
* the append *after* that threshold is crossed — so a rotated generation is
|
|
8
|
+
* always at least the bound and the crossing line pushes it over. A maxBuffer
|
|
9
|
+
* merely equal to the bound therefore rejects the exact read this feature
|
|
10
|
+
* exists to perform (Node's `execFile` accepts a payload of exactly
|
|
11
|
+
* `maxBuffer` bytes and fails the next one with
|
|
12
|
+
* `ERR_CHILD_PROCESS_STDIO_MAXBUFFER`). Doubling the bound leaves a full
|
|
13
|
+
* generation of headroom, and is derived from the ledger constant rather than
|
|
14
|
+
* restated so the two cannot drift apart.
|
|
15
|
+
*/
|
|
16
|
+
export declare const DEFAULT_DOCKER_PROBE_MAX_BUFFER_BYTES: number;
|
|
4
17
|
export type DockerProbeExecFile = (file: string, args: string[], options: {
|
|
18
|
+
maxBuffer?: number;
|
|
5
19
|
timeout: number;
|
|
6
20
|
}) => Promise<{
|
|
7
21
|
stderr: string;
|
|
@@ -11,6 +25,9 @@ export interface DockerProbeGatewayOptions {
|
|
|
11
25
|
dockerCommand?: string;
|
|
12
26
|
execFile?: DockerProbeExecFile;
|
|
13
27
|
inspection: DockerUnitInspection;
|
|
28
|
+
/** Overrides Node's 1 MiB `execFile` default `maxBuffer`. Defaults to
|
|
29
|
+
* {@link DEFAULT_DOCKER_PROBE_MAX_BUFFER_BYTES}. */
|
|
30
|
+
maxBufferBytes?: number;
|
|
14
31
|
timeoutMs?: number;
|
|
15
32
|
}
|
|
16
33
|
export declare const createDockerProbeGateway: (record: DeploymentRecord, unit: DeploymentRecord["units"][number], options: DockerProbeGatewayOptions) => RuntimeProbeGateway;
|
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import { execFile as execFileCallback } from "node:child_process";
|
|
2
2
|
import { promisify } from "node:util";
|
|
3
|
+
import { DAIMON_GROK_TURN_USAGE_LEDGER } from "../runtime/daimon/contractManifest.js";
|
|
3
4
|
import { dockerContextNameForTarget } from "./target.js";
|
|
4
5
|
const execFile = promisify(execFileCallback);
|
|
6
|
+
/**
|
|
7
|
+
* The ledger this gateway reads (`spawnfile usage`) rotates once a generation
|
|
8
|
+
* reaches `DAIMON_GROK_TURN_USAGE_LEDGER.rotateBytes`, and rotation happens on
|
|
9
|
+
* the append *after* that threshold is crossed — so a rotated generation is
|
|
10
|
+
* always at least the bound and the crossing line pushes it over. A maxBuffer
|
|
11
|
+
* merely equal to the bound therefore rejects the exact read this feature
|
|
12
|
+
* exists to perform (Node's `execFile` accepts a payload of exactly
|
|
13
|
+
* `maxBuffer` bytes and fails the next one with
|
|
14
|
+
* `ERR_CHILD_PROCESS_STDIO_MAXBUFFER`). Doubling the bound leaves a full
|
|
15
|
+
* generation of headroom, and is derived from the ledger constant rather than
|
|
16
|
+
* restated so the two cannot drift apart.
|
|
17
|
+
*/
|
|
18
|
+
export const DEFAULT_DOCKER_PROBE_MAX_BUFFER_BYTES = 2 * DAIMON_GROK_TURN_USAGE_LEDGER.rotateBytes;
|
|
5
19
|
const targetRefForUnit = (unit) => {
|
|
6
20
|
const targetRef = unit.container_id ?? unit.container_name;
|
|
7
21
|
if (!targetRef) {
|
|
@@ -80,9 +94,10 @@ export const createDockerProbeGateway = (record, unit, options) => {
|
|
|
80
94
|
const dockerCommand = options.dockerCommand ?? "docker";
|
|
81
95
|
const runExec = options.execFile ?? execFile;
|
|
82
96
|
const timeout = options.timeoutMs ?? 10_000;
|
|
97
|
+
const maxBuffer = options.maxBufferBytes ?? DEFAULT_DOCKER_PROBE_MAX_BUFFER_BYTES;
|
|
83
98
|
const exec = async (command) => {
|
|
84
99
|
const targetRef = targetRefForUnit(unit);
|
|
85
|
-
return runExec(dockerCommand, withDockerTarget(record, ["exec", targetRef, ...command]), { timeout });
|
|
100
|
+
return runExec(dockerCommand, withDockerTarget(record, ["exec", targetRef, ...command]), { maxBuffer, timeout });
|
|
86
101
|
};
|
|
87
102
|
return {
|
|
88
103
|
exec,
|
|
@@ -93,7 +108,7 @@ export const createDockerProbeGateway = (record, unit, options) => {
|
|
|
93
108
|
const url = `http://127.0.0.1:${port}${requestPath.startsWith("/") ? requestPath : `/${requestPath}`}`;
|
|
94
109
|
try {
|
|
95
110
|
const targetRef = targetRefForUnit(unit);
|
|
96
|
-
const result = await runExec(dockerCommand, withDockerTarget(record, httpProbeArgs(targetRef, imageRefForUnit(unit), url)), { timeout });
|
|
111
|
+
const result = await runExec(dockerCommand, withDockerTarget(record, httpProbeArgs(targetRef, imageRefForUnit(unit), url)), { maxBuffer, timeout });
|
|
97
112
|
return parseCurlHttpOutput(result.stdout);
|
|
98
113
|
}
|
|
99
114
|
catch (error) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type DeploymentLifecycleCorrelation } from "./deploymentLifecycleCorrelation.js";
|
|
2
2
|
import { type DockerTeardownExecFile } from "./dockerTeardown.js";
|
|
3
3
|
import { type DownReceipt } from "./downReceiptTypes.js";
|
|
4
|
+
import type { DeploymentRecord } from "./record.js";
|
|
4
5
|
export interface DownDeploymentOptions {
|
|
5
6
|
/** Where the deployment record + compile report already live (the compile's own
|
|
6
7
|
* `--out` directory) — same convention as `exportRunArtifacts`'s `compiledOutputDirectory`. */
|
|
@@ -20,9 +21,15 @@ export interface DownDeploymentOptions {
|
|
|
20
21
|
* folder rule — this is the only reversible-by-default lifecycle boundary spawnfile
|
|
21
22
|
* has: containers are cheap to recreate, the durable stores are not). */
|
|
22
23
|
removeVolumes?: boolean;
|
|
24
|
+
/** Explicitly permits deleting memory ledgers used by recording agents. */
|
|
25
|
+
discardRecordedMemory?: boolean;
|
|
23
26
|
expectedLifecycleCorrelation?: DeploymentLifecycleCorrelation;
|
|
24
27
|
timeoutMs?: number;
|
|
25
28
|
}
|
|
29
|
+
export declare const readCanonicalDownRecord: (compiledOutputDirectory: string, deploymentName: string) => Promise<{
|
|
30
|
+
mode: "image" | "project";
|
|
31
|
+
record: DeploymentRecord;
|
|
32
|
+
}>;
|
|
26
33
|
/**
|
|
27
34
|
* `spawnfile down` — record-driven teardown: resolves the deployment record, enforces the
|
|
28
35
|
* export-before-teardown invariant, `docker rm -f`s every recorded container unit, and
|