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,279 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { constants } from "node:fs";
|
|
4
|
+
import { chmod, lstat, mkdir, open, readFile } from "node:fs/promises";
|
|
5
|
+
import { SpawnfileError } from "../../shared/index.js";
|
|
6
|
+
import { DAIMON_AGY_SUBSCRIPTION_REALM, assertDaimonRuntimeHome, DAIMON_ENGINE_CREDENTIALS, DAIMON_ENGINE_KINDS, DAIMON_GROK_SUBSCRIPTION_REALM, DAIMON_ORGANIZATION_RUNTIME_CONFIG_VERSIONS } from "./contractManifest.js";
|
|
7
|
+
import { DAIMON_ORGANIZATION_UID } from "./runtimeIdentity.js";
|
|
8
|
+
const MAX_OPAQUE_CREDENTIAL_BYTES = 64 * 1024;
|
|
9
|
+
export const DAIMON_GROK_ACCESS_TOKEN_MIN_BYTES = 32;
|
|
10
|
+
export const DAIMON_GROK_REFRESH_TOKEN_MIN_BYTES = 16;
|
|
11
|
+
export const DAIMON_AGY_UNLOCK_SOURCE_ENV = "SPAWNFILE_DAIMON_SOURCE_AGY_UNLOCK_SECRET";
|
|
12
|
+
const fail = (message) => {
|
|
13
|
+
throw new SpawnfileError("validation_error", `Daimon runtime auth ${message}`);
|
|
14
|
+
};
|
|
15
|
+
export const daimonSourceEnvironmentName = (slot) => `SPAWNFILE_DAIMON_SOURCE_${slot.replace(/[^A-Za-z0-9]+/g, "_").toUpperCase()}`;
|
|
16
|
+
export const daimonSourcePathForEngine = (engine, environment = process.env, authProfile = null) => {
|
|
17
|
+
const declaredSource = environment[daimonSourceEnvironmentName(engine === "grok"
|
|
18
|
+
? DAIMON_GROK_SUBSCRIPTION_REALM.bootstrapSourceSlot
|
|
19
|
+
: DAIMON_ENGINE_CREDENTIALS.codex.sourceSlot)]?.trim();
|
|
20
|
+
if (declaredSource)
|
|
21
|
+
return declaredSource;
|
|
22
|
+
if (engine === "codex" && authProfile) {
|
|
23
|
+
const imported = authProfile.imports.codex;
|
|
24
|
+
return path.join(imported?.path ?? fail("selected auth profile has no imported codex credential"), "auth.json");
|
|
25
|
+
}
|
|
26
|
+
const home = os.homedir();
|
|
27
|
+
switch (engine) {
|
|
28
|
+
case "codex":
|
|
29
|
+
return path.join(process.env.CODEX_HOME || path.join(home, ".codex"), "auth.json");
|
|
30
|
+
case "grok":
|
|
31
|
+
return path.join(process.env.GROK_HOME || path.join(home, ".grok"), "auth.json");
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const sourceFileIdentity = (entry) => [entry.dev, entry.ino, entry.size, entry.mtimeMs, entry.uid, entry.mode, entry.nlink].join(":");
|
|
35
|
+
/**
|
|
36
|
+
* The uid a bind-mounted Daimon credential must be owned by on the host.
|
|
37
|
+
*
|
|
38
|
+
* Daimon compares the file's owner against its own `process.getuid()` inside
|
|
39
|
+
* the container, the container runs as {@link DAIMON_ORGANIZATION_UID}, and a
|
|
40
|
+
* read-only bind mount carries the host uid through unchanged, so the two are
|
|
41
|
+
* the same number. See `runtimeIdentity.ts` for the full chain.
|
|
42
|
+
*/
|
|
43
|
+
export const DAIMON_CREDENTIAL_CONTAINER_UID = DAIMON_ORGANIZATION_UID;
|
|
44
|
+
/**
|
|
45
|
+
* The host-side safety gate, isolated from `lstat` so every branch is directly
|
|
46
|
+
* exercisable. A credential the deploying process does not own is material it
|
|
47
|
+
* cannot vouch for, and a root deploy (`callerUid <= 0`) is refused outright
|
|
48
|
+
* so a privileged process never launders someone else's credential into a
|
|
49
|
+
* container.
|
|
50
|
+
*/
|
|
51
|
+
export const isUnsafeDaimonSourceFile = (entry, callerUid, maxBytes) => !entry.isFile ||
|
|
52
|
+
entry.isSymbolicLink ||
|
|
53
|
+
entry.size === 0 ||
|
|
54
|
+
entry.size > maxBytes ||
|
|
55
|
+
entry.nlink !== 1 ||
|
|
56
|
+
(entry.mode & 0o777) !== 0o600 ||
|
|
57
|
+
typeof callerUid !== "number" ||
|
|
58
|
+
callerUid <= 0 ||
|
|
59
|
+
entry.uid !== callerUid;
|
|
60
|
+
/**
|
|
61
|
+
* Refuses, at deploy time, a credential whose owner is not the uid the
|
|
62
|
+
* container will demand.
|
|
63
|
+
*
|
|
64
|
+
* Without this the host gate above and Daimon's in-container gate impose two
|
|
65
|
+
* uncoordinated uid requirements on the same file: the host one passes for any
|
|
66
|
+
* non-root deploying account, and the container one then fails at readiness
|
|
67
|
+
* with an opaque "credential materialization failed" inside a candidate that
|
|
68
|
+
* lives ~15 seconds. Naming both numbers here turns that into a refusal the
|
|
69
|
+
* operator can act on.
|
|
70
|
+
*/
|
|
71
|
+
export const assertDaimonCredentialContainerOwner = (observedUid, label, requiredUid = DAIMON_CREDENTIAL_CONTAINER_UID) => {
|
|
72
|
+
if (observedUid === requiredUid)
|
|
73
|
+
return;
|
|
74
|
+
fail(`selected ${label} artifact is owned by uid ${observedUid} but the Daimon container reads it as uid ` +
|
|
75
|
+
`${requiredUid}; the credential is bind-mounted read-only and keeps its host owner, so deploy from an ` +
|
|
76
|
+
`account whose uid is exactly ${requiredUid} (for example \`usermod -u ${requiredUid} <deploy-user>\` ` +
|
|
77
|
+
`followed by \`chown -R ${requiredUid} <deploy-home>\`) instead of uid ${observedUid}`);
|
|
78
|
+
};
|
|
79
|
+
export const assertSafeDaimonSourceFile = async (sourcePath, label, maxBytes = MAX_OPAQUE_CREDENTIAL_BYTES, portableKind) => {
|
|
80
|
+
let entry;
|
|
81
|
+
try {
|
|
82
|
+
entry = await lstat(sourcePath);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return fail(`is missing the selected ${label} artifact`);
|
|
86
|
+
}
|
|
87
|
+
const callerUid = process.getuid?.();
|
|
88
|
+
if (isUnsafeDaimonSourceFile({
|
|
89
|
+
isFile: entry.isFile(),
|
|
90
|
+
isSymbolicLink: entry.isSymbolicLink(),
|
|
91
|
+
mode: entry.mode,
|
|
92
|
+
nlink: entry.nlink,
|
|
93
|
+
size: entry.size,
|
|
94
|
+
uid: entry.uid
|
|
95
|
+
}, callerUid, maxBytes) || typeof callerUid !== "number") {
|
|
96
|
+
return fail(`selected ${label} artifact must be one bounded caller-owned 0600 regular file`);
|
|
97
|
+
}
|
|
98
|
+
if (portableKind !== undefined) {
|
|
99
|
+
let handle;
|
|
100
|
+
let bytes;
|
|
101
|
+
try {
|
|
102
|
+
handle = await open(sourcePath, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
|
|
103
|
+
const opened = await handle.stat();
|
|
104
|
+
if (sourceFileIdentity(opened) !== sourceFileIdentity(entry)) {
|
|
105
|
+
return fail(`selected ${label} artifact changed during validation`);
|
|
106
|
+
}
|
|
107
|
+
bytes = await handle.readFile();
|
|
108
|
+
const after = await handle.stat();
|
|
109
|
+
if (sourceFileIdentity(after) !== sourceFileIdentity(opened)) {
|
|
110
|
+
return fail(`selected ${label} artifact changed during validation`);
|
|
111
|
+
}
|
|
112
|
+
if (!hasRefreshableCredential(portableKind, bytes)) {
|
|
113
|
+
return fail(`selected ${label} artifact is not a refreshable subscription credential`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
if (error instanceof SpawnfileError)
|
|
118
|
+
throw error;
|
|
119
|
+
return fail(`selected ${label} artifact could not be validated`);
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
bytes?.fill(0);
|
|
123
|
+
await handle?.close().catch(() => undefined);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return callerUid;
|
|
127
|
+
};
|
|
128
|
+
const hasRefreshableCredential = (kind, bytes) => {
|
|
129
|
+
let parsed;
|
|
130
|
+
try {
|
|
131
|
+
parsed = JSON.parse(bytes.toString("utf8"));
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
137
|
+
return false;
|
|
138
|
+
const root = parsed;
|
|
139
|
+
const source = kind === "codex"
|
|
140
|
+
? ((root.tokens && typeof root.tokens === "object" && !Array.isArray(root.tokens)) ? root.tokens : root)
|
|
141
|
+
: Object.entries(root).find(([key, value]) => /^https:\/\/auth\.x\.ai::/u.test(key) && value && typeof value === "object" && !Array.isArray(value))?.[1];
|
|
142
|
+
if (!source)
|
|
143
|
+
return false;
|
|
144
|
+
const access = kind === "grok" ? source.key : source.access_token ?? source.accessToken ?? source.token;
|
|
145
|
+
const refresh = kind === "grok" ? source.refresh_token : source.refresh_token ?? source.refreshToken;
|
|
146
|
+
if (typeof access !== "string" || !access.trim() || typeof refresh !== "string" || !refresh.trim())
|
|
147
|
+
return false;
|
|
148
|
+
if (kind === "grok" && (access.length < DAIMON_GROK_ACCESS_TOKEN_MIN_BYTES
|
|
149
|
+
|| refresh.length < DAIMON_GROK_REFRESH_TOKEN_MIN_BYTES))
|
|
150
|
+
return false;
|
|
151
|
+
return kind !== "grok" || (typeof source.expires_at === "string" && Number.isFinite(Date.parse(source.expires_at)));
|
|
152
|
+
};
|
|
153
|
+
const assertContainedPath = (root, candidate) => {
|
|
154
|
+
const normalizedRoot = path.resolve(root);
|
|
155
|
+
const normalizedCandidate = path.resolve(candidate);
|
|
156
|
+
const relative = path.relative(normalizedRoot, normalizedCandidate);
|
|
157
|
+
if (relative === "" || relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
|
|
158
|
+
return fail("attempted to stage outside its ephemeral support root");
|
|
159
|
+
}
|
|
160
|
+
return normalizedCandidate;
|
|
161
|
+
};
|
|
162
|
+
const configPathInOutput = (input) => {
|
|
163
|
+
if (!input.instance.config_path.startsWith("/"))
|
|
164
|
+
fail("has a non-absolute generated config path");
|
|
165
|
+
return assertContainedPath(path.join(input.outputDirectory, "container", "rootfs"), path.join(input.outputDirectory, "container", "rootfs", `.${input.instance.config_path}`));
|
|
166
|
+
};
|
|
167
|
+
const parseConfigAgents = (source) => {
|
|
168
|
+
let parsed;
|
|
169
|
+
try {
|
|
170
|
+
parsed = JSON.parse(source);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return fail("generated organization config is not JSON");
|
|
174
|
+
}
|
|
175
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
176
|
+
fail("generated organization config has an invalid shape");
|
|
177
|
+
const root = parsed;
|
|
178
|
+
if (!DAIMON_ORGANIZATION_RUNTIME_CONFIG_VERSIONS.includes(root.version) || !Array.isArray(root.agents))
|
|
179
|
+
fail("generated organization config is not a supported v1/v2 contract");
|
|
180
|
+
const rawAgents = root.agents;
|
|
181
|
+
const seenHomes = new Set();
|
|
182
|
+
const agents = [];
|
|
183
|
+
for (const value of rawAgents) {
|
|
184
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
185
|
+
fail("generated organization config has an invalid agent");
|
|
186
|
+
const agent = value;
|
|
187
|
+
const engine = agent.engine;
|
|
188
|
+
const engineKind = engine && typeof engine === "object" && !Array.isArray(engine)
|
|
189
|
+
? engine.kind
|
|
190
|
+
: undefined;
|
|
191
|
+
if (typeof agent.id !== "string" || !agent.id || typeof agent.runtimeHomePath !== "string"
|
|
192
|
+
|| typeof engineKind !== "string"
|
|
193
|
+
|| !DAIMON_ENGINE_KINDS.includes(engineKind)) {
|
|
194
|
+
fail("generated organization config has an invalid agent credential target");
|
|
195
|
+
}
|
|
196
|
+
const agentId = agent.id;
|
|
197
|
+
const runtimeHomePath = assertDaimonRuntimeHome(agent.runtimeHomePath);
|
|
198
|
+
if (seenHomes.has(runtimeHomePath))
|
|
199
|
+
fail("generated organization config has overlapping runtime homes");
|
|
200
|
+
seenHomes.add(runtimeHomePath);
|
|
201
|
+
agents.push({
|
|
202
|
+
engine: { kind: engineKind },
|
|
203
|
+
id: agentId,
|
|
204
|
+
runtimeHomePath
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
return agents.sort((left, right) => left.id.localeCompare(right.id));
|
|
208
|
+
};
|
|
209
|
+
const resolveCredentialSource = (agent, authProfile) => daimonSourcePathForEngine(agent.engine.kind, process.env, authProfile);
|
|
210
|
+
const prepareNeutralIngress = async (outputDirectory, agent) => {
|
|
211
|
+
const rootfs = path.join(outputDirectory, "container", "rootfs");
|
|
212
|
+
const runtimeHome = assertContainedPath(rootfs, path.join(rootfs, `.${agent.runtimeHomePath}`));
|
|
213
|
+
const inbound = assertContainedPath(runtimeHome, path.join(runtimeHome, path.posix.dirname(DAIMON_ENGINE_CREDENTIALS[agent.engine.kind].sourceRelativePath)));
|
|
214
|
+
await mkdir(runtimeHome, { mode: 0o700, recursive: true });
|
|
215
|
+
await chmod(runtimeHome, 0o700);
|
|
216
|
+
await mkdir(inbound, { mode: 0o700, recursive: true });
|
|
217
|
+
await chmod(inbound, 0o700);
|
|
218
|
+
return path.posix.join(agent.runtimeHomePath, DAIMON_ENGINE_CREDENTIALS[agent.engine.kind].sourceRelativePath);
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Binds Codex leaves per agent and one Grok bootstrap leaf per organization.
|
|
222
|
+
* Every leaf is validated from a stable descriptor and mounted read-only;
|
|
223
|
+
* Daimon alone owns writable credential state and refresh reconciliation.
|
|
224
|
+
*/
|
|
225
|
+
export const prepareDaimonRuntimeAuth = async (input) => {
|
|
226
|
+
const containerCredentialUid = input.containerCredentialUid ?? DAIMON_CREDENTIAL_CONTAINER_UID;
|
|
227
|
+
const allowedSourceEnvironments = new Set([
|
|
228
|
+
...Object.values(DAIMON_ENGINE_CREDENTIALS).map((credential) => daimonSourceEnvironmentName(credential.sourceSlot)),
|
|
229
|
+
daimonSourceEnvironmentName(DAIMON_GROK_SUBSCRIPTION_REALM.bootstrapSourceSlot),
|
|
230
|
+
DAIMON_AGY_UNLOCK_SOURCE_ENV
|
|
231
|
+
]);
|
|
232
|
+
for (const name of Object.keys(process.env)) {
|
|
233
|
+
if (name.startsWith("SPAWNFILE_DAIMON_SOURCE_") && !allowedSourceEnvironments.has(name)) {
|
|
234
|
+
return fail(`source slot environment ${name} is not declared by the consumed manifest`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const configPath = configPathInOutput(input);
|
|
238
|
+
let configSource;
|
|
239
|
+
try {
|
|
240
|
+
configSource = await readFile(configPath, "utf8");
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
return fail("could not read its generated organization config");
|
|
244
|
+
}
|
|
245
|
+
const agents = parseConfigAgents(configSource);
|
|
246
|
+
const mountArgs = [];
|
|
247
|
+
for (const agent of agents) {
|
|
248
|
+
if (agent.engine.kind !== "codex")
|
|
249
|
+
continue;
|
|
250
|
+
const portableAgent = agent;
|
|
251
|
+
const sourcePath = resolveCredentialSource(portableAgent, input.authProfile);
|
|
252
|
+
const ingressPath = await prepareNeutralIngress(input.outputDirectory, portableAgent);
|
|
253
|
+
const ownerUid = await assertSafeDaimonSourceFile(sourcePath, agent.engine.kind, MAX_OPAQUE_CREDENTIAL_BYTES, "codex");
|
|
254
|
+
assertDaimonCredentialContainerOwner(ownerUid, agent.engine.kind, containerCredentialUid);
|
|
255
|
+
mountArgs.push("-v", `${sourcePath}:${ingressPath}:ro`);
|
|
256
|
+
}
|
|
257
|
+
// No container-owner assertion for the Grok bootstrap leaf: unlike the Codex
|
|
258
|
+
// credential and the AGY unlock secret, nothing in the organization runtime
|
|
259
|
+
// process reads it. The live Grok path goes through the engine broker, which
|
|
260
|
+
// runs under its own uid and reads only its durable realm, so pinning this
|
|
261
|
+
// leaf to the organization uid would refuse deployments that work today.
|
|
262
|
+
if (agents.some((agent) => agent.engine.kind === "grok")) {
|
|
263
|
+
const sourcePath = daimonSourcePathForEngine("grok");
|
|
264
|
+
await assertSafeDaimonSourceFile(sourcePath, "grok", DAIMON_GROK_SUBSCRIPTION_REALM.maxCredentialBytes, "grok");
|
|
265
|
+
mountArgs.push("-v", `${sourcePath}:${DAIMON_GROK_SUBSCRIPTION_REALM.bootstrapMountPath}:ro`);
|
|
266
|
+
}
|
|
267
|
+
if (agents.some((agent) => agent.engine.kind === "agy")) {
|
|
268
|
+
const source = process.env[DAIMON_AGY_UNLOCK_SOURCE_ENV]?.trim();
|
|
269
|
+
if (!source)
|
|
270
|
+
return fail("is missing the operator-authorized AGY realm unlock artifact");
|
|
271
|
+
const ownerUid = await assertSafeDaimonSourceFile(source, "AGY realm unlock", DAIMON_AGY_SUBSCRIPTION_REALM.maxUnlockBytes);
|
|
272
|
+
assertDaimonCredentialContainerOwner(ownerUid, "AGY realm unlock", containerCredentialUid);
|
|
273
|
+
mountArgs.push("-v", `${source}:${DAIMON_AGY_SUBSCRIPTION_REALM.unlockMountPath}:ro`);
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
coveredModelSecrets: [],
|
|
277
|
+
mountArgs
|
|
278
|
+
};
|
|
279
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fixed container-side uids a compiled Daimon image runs under.
|
|
3
|
+
*
|
|
4
|
+
* These are compiler-wide constants, not per-organization values: the rendered
|
|
5
|
+
* Daimon entrypoint pins `uid=DAIMON_ORGANIZATION_UID` and drops to it through
|
|
6
|
+
* `setpriv --reuid`, so every organization's Daimon runtime process shares the
|
|
7
|
+
* same uid. The engine broker and its Grok workers run under their own fixed
|
|
8
|
+
* uids alongside it.
|
|
9
|
+
*
|
|
10
|
+
* Why the deploy path cares: Daimon's own credential guards compare a
|
|
11
|
+
* credential file's owner against `process.getuid()` *inside* the container
|
|
12
|
+
* (`portableCredentialMaterial.ts` for Codex, `agySubscriptionRealm.ts` for the
|
|
13
|
+
* AGY unlock secret). Spawnfile bind-mounts those files read-only from the
|
|
14
|
+
* host, the daemon applies no user-namespace remapping, and the credential
|
|
15
|
+
* leaves are declared opaque so the entrypoint ownership guard never chowns
|
|
16
|
+
* them. A host file therefore keeps its host uid inside the container, which
|
|
17
|
+
* makes "owned by DAIMON_ORGANIZATION_UID" a host-side deployment requirement
|
|
18
|
+
* rather than something the container can repair.
|
|
19
|
+
*/
|
|
20
|
+
export declare const DAIMON_ORGANIZATION_UID = 2000;
|
|
21
|
+
export declare const DAIMON_BROKER_UID = 2100;
|
|
22
|
+
export declare const DAIMON_FIRST_WORKER_UID = 2200;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fixed container-side uids a compiled Daimon image runs under.
|
|
3
|
+
*
|
|
4
|
+
* These are compiler-wide constants, not per-organization values: the rendered
|
|
5
|
+
* Daimon entrypoint pins `uid=DAIMON_ORGANIZATION_UID` and drops to it through
|
|
6
|
+
* `setpriv --reuid`, so every organization's Daimon runtime process shares the
|
|
7
|
+
* same uid. The engine broker and its Grok workers run under their own fixed
|
|
8
|
+
* uids alongside it.
|
|
9
|
+
*
|
|
10
|
+
* Why the deploy path cares: Daimon's own credential guards compare a
|
|
11
|
+
* credential file's owner against `process.getuid()` *inside* the container
|
|
12
|
+
* (`portableCredentialMaterial.ts` for Codex, `agySubscriptionRealm.ts` for the
|
|
13
|
+
* AGY unlock secret). Spawnfile bind-mounts those files read-only from the
|
|
14
|
+
* host, the daemon applies no user-namespace remapping, and the credential
|
|
15
|
+
* leaves are declared opaque so the entrypoint ownership guard never chowns
|
|
16
|
+
* them. A host file therefore keeps its host uid inside the container, which
|
|
17
|
+
* makes "owned by DAIMON_ORGANIZATION_UID" a host-side deployment requirement
|
|
18
|
+
* rather than something the container can repair.
|
|
19
|
+
*/
|
|
20
|
+
export const DAIMON_ORGANIZATION_UID = 2_000;
|
|
21
|
+
export const DAIMON_BROKER_UID = 2_100;
|
|
22
|
+
export const DAIMON_FIRST_WORKER_UID = 2_200;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* True when the image the build will select attests the compiler's exact
|
|
3
|
+
* contract manifest (organization runtime v2): either the explicit local
|
|
4
|
+
* development identity, or the published registry pin with a digest, its
|
|
5
|
+
* per-architecture capability receipts and a matching contract manifest.
|
|
6
|
+
* The published receipts embed that manifest digest; the generated image
|
|
7
|
+
* re-checks the receipt it copies, so the pin is the attestation.
|
|
8
|
+
*/
|
|
9
|
+
export declare const hasDaimonScheduleAuthority: () => Promise<boolean>;
|
|
10
|
+
/** Schedule lowering is allowed only when the selected image receipt binds v2. */
|
|
11
|
+
export declare const assertDaimonScheduleAuthority: () => Promise<void>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SpawnfileError } from "../../shared/index.js";
|
|
2
|
+
import { DAIMON_LOCAL_RUNTIME_IDENTITY_ENV, loadLocalDaimonRuntimeIdentity } from "../localDaimonAuthority.js";
|
|
3
|
+
import { DAIMON_CONTRACT_MANIFEST_SHA256 } from "./contractManifest.js";
|
|
4
|
+
/**
|
|
5
|
+
* True when the image the build will select attests the compiler's exact
|
|
6
|
+
* contract manifest (organization runtime v2): either the explicit local
|
|
7
|
+
* development identity, or the published registry pin with a digest, its
|
|
8
|
+
* per-architecture capability receipts and a matching contract manifest.
|
|
9
|
+
* The published receipts embed that manifest digest; the generated image
|
|
10
|
+
* re-checks the receipt it copies, so the pin is the attestation.
|
|
11
|
+
*/
|
|
12
|
+
export const hasDaimonScheduleAuthority = async () => {
|
|
13
|
+
const identityPath = process.env[DAIMON_LOCAL_RUNTIME_IDENTITY_ENV]?.trim();
|
|
14
|
+
if (identityPath) {
|
|
15
|
+
return (await loadLocalDaimonRuntimeIdentity(identityPath)).manifestSha256 ===
|
|
16
|
+
DAIMON_CONTRACT_MANIFEST_SHA256;
|
|
17
|
+
}
|
|
18
|
+
// Lazy: install.js -> registry.js -> this adapter would otherwise form an import cycle.
|
|
19
|
+
const { resolveRuntimeInstallSelection } = await import("../install.js");
|
|
20
|
+
const selection = await resolveRuntimeInstallSelection("daimon");
|
|
21
|
+
return selection.kind === "container_image" &&
|
|
22
|
+
Boolean(selection.digest) &&
|
|
23
|
+
Boolean(selection.capabilityReceipt || selection.capabilityReceipts) &&
|
|
24
|
+
selection.contractManifestSha256 === DAIMON_CONTRACT_MANIFEST_SHA256;
|
|
25
|
+
};
|
|
26
|
+
/** Schedule lowering is allowed only when the selected image receipt binds v2. */
|
|
27
|
+
export const assertDaimonScheduleAuthority = async () => {
|
|
28
|
+
if (!await hasDaimonScheduleAuthority()) {
|
|
29
|
+
throw new SpawnfileError("runtime_error", "Daimon schedules are disabled: the selected image capability receipt does not attest organization runtime v2");
|
|
30
|
+
}
|
|
31
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Exact data-only wake recording contract advertised by Daimon's image receipt. */
|
|
2
|
+
export declare const DAIMON_WAKE_MOMENTS: {
|
|
3
|
+
readonly version: "noopolis.daimon.wake-moment.v1";
|
|
4
|
+
readonly rowsFile: "wake-moments.jsonl";
|
|
5
|
+
readonly snapshotsDirectory: "snapshots";
|
|
6
|
+
readonly completionSuffix: ".complete";
|
|
7
|
+
readonly maxSnapshotRoots: 16;
|
|
8
|
+
readonly maxSnapshotEntries: 200000;
|
|
9
|
+
readonly maxRowBytes: 4194304;
|
|
10
|
+
readonly maxManifestBytes: 134217728;
|
|
11
|
+
readonly captureDeadlineMs: 60000;
|
|
12
|
+
readonly finalizationDeadlineMs: 1000;
|
|
13
|
+
readonly configField: "agents[].recording";
|
|
14
|
+
};
|
|
15
|
+
export declare const isDaimonWakeMoments: (value: unknown) => value is typeof DAIMON_WAKE_MOMENTS;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Exact data-only wake recording contract advertised by Daimon's image receipt. */
|
|
2
|
+
export const DAIMON_WAKE_MOMENTS = {
|
|
3
|
+
version: "noopolis.daimon.wake-moment.v1",
|
|
4
|
+
rowsFile: "wake-moments.jsonl",
|
|
5
|
+
snapshotsDirectory: "snapshots",
|
|
6
|
+
completionSuffix: ".complete",
|
|
7
|
+
maxSnapshotRoots: 16,
|
|
8
|
+
maxSnapshotEntries: 200_000,
|
|
9
|
+
maxRowBytes: 4_194_304,
|
|
10
|
+
maxManifestBytes: 134_217_728,
|
|
11
|
+
captureDeadlineMs: 60_000,
|
|
12
|
+
finalizationDeadlineMs: 1_000,
|
|
13
|
+
configField: "agents[].recording"
|
|
14
|
+
};
|
|
15
|
+
export const isDaimonWakeMoments = (value) => value !== null && typeof value === "object" && !Array.isArray(value)
|
|
16
|
+
&& Object.keys(value).length === Object.keys(DAIMON_WAKE_MOMENTS).length
|
|
17
|
+
&& Object.entries(DAIMON_WAKE_MOMENTS).every(([key, expected]) => Object.hasOwn(value, key) && value[key] === expected);
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { DaimonCapabilityReceipts } from "./registry.js";
|
|
2
|
+
/** Shared install verification and launchers for organization and training images. */
|
|
3
|
+
export declare const createDaimonInstallCommands: (installRoot: string, capabilityReceipt: string | DaimonCapabilityReceipts) => string[];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DAIMON_CONTRACT_MANIFEST_SHA256, DAIMON_GROK_ENGINE_BROKER } from "./daimon/contractManifest.js";
|
|
2
|
+
/**
|
|
3
|
+
* A published multi-architecture Daimon index embeds a different receipt per
|
|
4
|
+
* platform (the packaged broker and pinned CLIs are per-architecture), so the
|
|
5
|
+
* generated image checks the receipt pinned for the architecture it builds.
|
|
6
|
+
*/
|
|
7
|
+
const createDaimonReceiptCheck = (receiptPath, receipt) => {
|
|
8
|
+
const actual = `test -f ${receiptPath} && actual="$(sha256sum ${receiptPath} | awk '{print "sha256:" $1}')"`;
|
|
9
|
+
if (typeof receipt === "string")
|
|
10
|
+
return `${actual} && test "$actual" = ${JSON.stringify(receipt)}`;
|
|
11
|
+
const cases = Object.entries(receipt)
|
|
12
|
+
.map(([architecture, digest]) => `${architecture}) expected=${JSON.stringify(digest)} ;;`)
|
|
13
|
+
.join(" ");
|
|
14
|
+
return `${actual} && arch="$(dpkg --print-architecture)" && case "$arch" in ${cases} *) echo "No pinned Daimon capability receipt for $arch" >&2; exit 1 ;; esac && test "$actual" = "$expected"`;
|
|
15
|
+
};
|
|
16
|
+
/** Shared install verification and launchers for organization and training images. */
|
|
17
|
+
export const createDaimonInstallCommands = (installRoot, capabilityReceipt) => [
|
|
18
|
+
createDaimonReceiptCheck(`${installRoot}/capability-receipt.json`, capabilityReceipt),
|
|
19
|
+
`test -f ${installRoot}/contract-manifest.json && test -f ${installRoot}/contract-manifest.sha256 && manifest="$(cat ${installRoot}/contract-manifest.sha256)" && test "$manifest" = ${JSON.stringify(DAIMON_CONTRACT_MANIFEST_SHA256)} && test "$(sha256sum ${installRoot}/contract-manifest.json | awk '{print "sha256:" $1}')" = "$manifest" && node -e 'const fs=require("fs");const r=JSON.parse(fs.readFileSync(process.argv[1],"utf8"));if(r.manifest_sha256!==process.argv[2])process.exit(1)' ${installRoot}/capability-receipt.json "$manifest"`,
|
|
20
|
+
`ln -sf ${installRoot}/bin/daimon-runtime /usr/local/bin/daimon-runtime`,
|
|
21
|
+
`ln -sf ${installRoot}/bin/codex /usr/local/bin/codex`,
|
|
22
|
+
`install -o root -g root -m 0555 ${installRoot}/bin/grok /usr/local/bin/grok && arch="$(dpkg --print-architecture)" && case "$arch" in amd64) expected=${DAIMON_GROK_ENGINE_BROKER.grokCliArtifacts.x64.sha256} ;; arm64) expected=${DAIMON_GROK_ENGINE_BROKER.grokCliArtifacts.arm64.sha256} ;; *) exit 1 ;; esac && test "$(sha256sum /usr/local/bin/grok | awk '{print $1}')" = "$expected"`,
|
|
23
|
+
`ln -sf ${installRoot}/bin/agy /usr/local/bin/agy`,
|
|
24
|
+
`mkdir -p /opt/daimon/bin && install -o root -g root -m 0555 ${installRoot}/bin/daimon-engine-broker /opt/daimon/bin/daimon-engine-broker && arch="$(dpkg --print-architecture)" && case "$arch" in amd64) expected=${DAIMON_GROK_ENGINE_BROKER.artifacts.x64Sha256} ;; arm64) expected=${DAIMON_GROK_ENGINE_BROKER.artifacts.arm64Sha256} ;; *) exit 1 ;; esac && test "$(sha256sum /opt/daimon/bin/daimon-engine-broker | awk '{print $1}')" = "$expected"`
|
|
25
|
+
];
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -2,6 +2,11 @@ export * from "./common.js";
|
|
|
2
2
|
export * from "./container.js";
|
|
3
3
|
export * from "./containerPackageOverrides.js";
|
|
4
4
|
export * from "./install.js";
|
|
5
|
+
export * from "./localDaimonAuthority.js";
|
|
5
6
|
export * from "./registry.js";
|
|
6
7
|
export * from "./statusProbes.js";
|
|
7
8
|
export * from "./types.js";
|
|
9
|
+
export * from "./usageLedger.js";
|
|
10
|
+
export * from "./usageLedgerRead.js";
|
|
11
|
+
export * from "./usageRequestLedger.js";
|
|
12
|
+
export * from "./daimonInstall.js";
|
package/dist/runtime/index.js
CHANGED
|
@@ -2,6 +2,11 @@ export * from "./common.js";
|
|
|
2
2
|
export * from "./container.js";
|
|
3
3
|
export * from "./containerPackageOverrides.js";
|
|
4
4
|
export * from "./install.js";
|
|
5
|
+
export * from "./localDaimonAuthority.js";
|
|
5
6
|
export * from "./registry.js";
|
|
6
7
|
export * from "./statusProbes.js";
|
|
7
8
|
export * from "./types.js";
|
|
9
|
+
export * from "./usageLedger.js";
|
|
10
|
+
export * from "./usageLedgerRead.js";
|
|
11
|
+
export * from "./usageRequestLedger.js";
|
|
12
|
+
export * from "./daimonInstall.js";
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import { type DaimonCapabilityReceipts } from "./registry.js";
|
|
1
2
|
export type RuntimeInstallSelection = {
|
|
2
3
|
ecosystem: "go" | "node";
|
|
4
|
+
capabilityReceipt?: string;
|
|
5
|
+
capabilityReceipts?: DaimonCapabilityReceipts;
|
|
6
|
+
contractManifestSha256?: string;
|
|
7
|
+
digest?: string;
|
|
3
8
|
image: string;
|
|
4
9
|
installHint: string;
|
|
5
10
|
kind: "container_image";
|
package/dist/runtime/install.js
CHANGED
|
@@ -104,6 +104,10 @@ export const resolveRuntimeInstallSelection = async (runtimeName) => {
|
|
|
104
104
|
case "container_image":
|
|
105
105
|
return {
|
|
106
106
|
ecosystem: installProfile.container_image.ecosystem,
|
|
107
|
+
capabilityReceipt: runtime.install.capabilityReceipt,
|
|
108
|
+
...(runtime.install.capabilityReceipts ? { capabilityReceipts: runtime.install.capabilityReceipts } : {}),
|
|
109
|
+
contractManifestSha256: runtime.install.contractManifestSha256,
|
|
110
|
+
digest: runtime.install.digest,
|
|
107
111
|
image: runtime.install.image,
|
|
108
112
|
installHint: installProfile.container_image.installHint,
|
|
109
113
|
kind: "container_image",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const DAIMON_LOCAL_RUNTIME_IDENTITY_ENV = "SPAWNFILE_DAIMON_LOCAL_RUNTIME_IDENTITY";
|
|
2
|
+
export interface LocalDaimonRuntimeIdentity {
|
|
3
|
+
capabilityReceipt: string;
|
|
4
|
+
imageArchitecture: "amd64" | "arm64";
|
|
5
|
+
imageConfigDigest: string;
|
|
6
|
+
imageManifestDigest: string;
|
|
7
|
+
imageReference: string;
|
|
8
|
+
manifestSha256: string;
|
|
9
|
+
registryAuthority: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const loadLocalDaimonRuntimeIdentity: (identityPath: string) => Promise<LocalDaimonRuntimeIdentity>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { lstat, readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { SpawnfileError } from "../shared/index.js";
|
|
5
|
+
import { DAIMON_CONTRACT_MANIFEST_SHA256 } from "./daimon/contractManifest.js";
|
|
6
|
+
export const DAIMON_LOCAL_RUNTIME_IDENTITY_ENV = "SPAWNFILE_DAIMON_LOCAL_RUNTIME_IDENTITY";
|
|
7
|
+
const LOCAL_DAIMON_REPOSITORY_PATH = "noopolis/spawnfile-runtime-daimon";
|
|
8
|
+
const DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
9
|
+
const MAX_IDENTITY_BYTES = 16 * 1024;
|
|
10
|
+
const localDaimonRuntimeIdentitySchema = z
|
|
11
|
+
.object({
|
|
12
|
+
capability_receipt_sha256: z.string().regex(DIGEST),
|
|
13
|
+
development: z
|
|
14
|
+
.object({
|
|
15
|
+
mode: z.literal("local-development"),
|
|
16
|
+
non_production: z.literal(true),
|
|
17
|
+
unpublished: z.literal(true),
|
|
18
|
+
unsigned: z.literal(true)
|
|
19
|
+
})
|
|
20
|
+
.strict(),
|
|
21
|
+
image_architecture: z.union([z.literal("amd64"), z.literal("arm64")]),
|
|
22
|
+
image_config_digest: z.string().regex(DIGEST),
|
|
23
|
+
image_manifest_digest: z.string().regex(DIGEST),
|
|
24
|
+
image_reference: z.string(),
|
|
25
|
+
manifest_sha256: z.string().regex(DIGEST),
|
|
26
|
+
registry_authority: z.string().regex(/^127\.0\.0\.1:(?:[1-9]\d{0,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/u),
|
|
27
|
+
version: z.literal("spawnfile.local-daimon-runtime-identity.v3")
|
|
28
|
+
})
|
|
29
|
+
.strict()
|
|
30
|
+
.superRefine((identity, context) => {
|
|
31
|
+
const expected = `${identity.registry_authority}/${LOCAL_DAIMON_REPOSITORY_PATH}@${identity.image_manifest_digest}`;
|
|
32
|
+
if (identity.image_reference !== expected) {
|
|
33
|
+
context.addIssue({
|
|
34
|
+
code: "custom",
|
|
35
|
+
message: "image_reference must bind the approved local registry repository and manifest digest",
|
|
36
|
+
path: ["image_reference"]
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
const fail = (message) => {
|
|
41
|
+
throw new SpawnfileError("runtime_error", message);
|
|
42
|
+
};
|
|
43
|
+
export const loadLocalDaimonRuntimeIdentity = async (identityPath) => {
|
|
44
|
+
if (!path.isAbsolute(identityPath)) {
|
|
45
|
+
return fail("Local Daimon runtime identity path must be absolute");
|
|
46
|
+
}
|
|
47
|
+
let entry;
|
|
48
|
+
try {
|
|
49
|
+
entry = await lstat(identityPath);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return fail("Local Daimon runtime identity is missing or unreadable");
|
|
53
|
+
}
|
|
54
|
+
if (!entry.isFile() || entry.isSymbolicLink() || entry.size === 0 || entry.size > MAX_IDENTITY_BYTES) {
|
|
55
|
+
return fail("Local Daimon runtime identity must be a bounded nonempty regular file");
|
|
56
|
+
}
|
|
57
|
+
let value;
|
|
58
|
+
try {
|
|
59
|
+
value = JSON.parse(await readFile(identityPath, "utf8"));
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return fail("Local Daimon runtime identity must contain valid JSON");
|
|
63
|
+
}
|
|
64
|
+
const parsed = localDaimonRuntimeIdentitySchema.safeParse(value);
|
|
65
|
+
if (!parsed.success || parsed.data.manifest_sha256 !== DAIMON_CONTRACT_MANIFEST_SHA256) {
|
|
66
|
+
return fail("Local Daimon runtime identity is invalid or incomplete");
|
|
67
|
+
}
|
|
68
|
+
return Object.freeze({
|
|
69
|
+
capabilityReceipt: parsed.data.capability_receipt_sha256,
|
|
70
|
+
imageArchitecture: parsed.data.image_architecture,
|
|
71
|
+
imageConfigDigest: parsed.data.image_config_digest,
|
|
72
|
+
imageManifestDigest: parsed.data.image_manifest_digest,
|
|
73
|
+
imageReference: parsed.data.image_reference,
|
|
74
|
+
manifestSha256: parsed.data.manifest_sha256,
|
|
75
|
+
registryAuthority: parsed.data.registry_authority
|
|
76
|
+
});
|
|
77
|
+
};
|
|
@@ -7,6 +7,19 @@ interface MnemeMcpServerOptions {
|
|
|
7
7
|
}
|
|
8
8
|
export declare const resolveMnemeMemoryRuntimeHomePath: (access: MnemeMemoryAccess) => string | null;
|
|
9
9
|
export declare const isMnemeMemoryAccessSupported: (access: MnemeMemoryAccess) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* The container path a bank's Mneme runtime home is durably mounted at, or
|
|
12
|
+
* `null` when the compiler emits no persistent volume for it.
|
|
13
|
+
*
|
|
14
|
+
* This is the single authority shared by two sides that must never disagree:
|
|
15
|
+
* `src/compiler/memoryArtifacts.ts`, which emits the persistent mount (and
|
|
16
|
+
* therefore the directory the Daimon UID entrypoint creates and chowns to the
|
|
17
|
+
* runtime uid), and the runtime config emitters, which may only point an
|
|
18
|
+
* in-process Mneme runtime at a path the container actually mounts. A path
|
|
19
|
+
* without a mount is either absent at runtime or root-owned, so an in-process
|
|
20
|
+
* runtime pointed at one fails its first `mkdir`/write instead of degrading.
|
|
21
|
+
*/
|
|
22
|
+
export declare const resolveMnemeDurableMemoryMountPath: (bank: MnemeMemoryAccess["bank"]) => string | null;
|
|
10
23
|
export declare const mnemeMemoryServerBaseName: (node: ResolvedAgentNode, access: MnemeMemoryAccess) => string;
|
|
11
24
|
export declare const mnemeMemoryServerName: (node: ResolvedAgentNode, access: MnemeMemoryAccess, mode: MnemeMcpMode) => string;
|
|
12
25
|
export declare const buildMnemeMemoryMcpServers: (node: ResolvedAgentNode, options?: MnemeMcpServerOptions) => Record<string, Record<string, unknown>>;
|
package/dist/runtime/mnemeMcp.js
CHANGED
|
@@ -13,6 +13,32 @@ export const resolveMnemeMemoryRuntimeHomePath = (access) => {
|
|
|
13
13
|
return store.path ? path.dirname(store.path) : null;
|
|
14
14
|
};
|
|
15
15
|
export const isMnemeMemoryAccessSupported = (access) => resolveMnemeMemoryRuntimeHomePath(access) !== null;
|
|
16
|
+
const normalizePosixPath = (value) => path.normalize(value).replace(/\/+$/u, "") || "/";
|
|
17
|
+
/**
|
|
18
|
+
* The container path a bank's Mneme runtime home is durably mounted at, or
|
|
19
|
+
* `null` when the compiler emits no persistent volume for it.
|
|
20
|
+
*
|
|
21
|
+
* This is the single authority shared by two sides that must never disagree:
|
|
22
|
+
* `src/compiler/memoryArtifacts.ts`, which emits the persistent mount (and
|
|
23
|
+
* therefore the directory the Daimon UID entrypoint creates and chowns to the
|
|
24
|
+
* runtime uid), and the runtime config emitters, which may only point an
|
|
25
|
+
* in-process Mneme runtime at a path the container actually mounts. A path
|
|
26
|
+
* without a mount is either absent at runtime or root-owned, so an in-process
|
|
27
|
+
* runtime pointed at one fails its first `mkdir`/write instead of degrading.
|
|
28
|
+
*/
|
|
29
|
+
export const resolveMnemeDurableMemoryMountPath = (bank) => {
|
|
30
|
+
const store = bank.store;
|
|
31
|
+
if (store.kind !== "sqlite" && store.kind !== "json") {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (store.persistence?.mode === "ephemeral") {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
if (store.persistence?.mount) {
|
|
38
|
+
return normalizePosixPath(store.persistence.mount);
|
|
39
|
+
}
|
|
40
|
+
return store.path ? path.dirname(normalizePosixPath(store.path)) : null;
|
|
41
|
+
};
|
|
16
42
|
const memoryAccessKey = (access) => `${access.source}:${access.bank.id}`;
|
|
17
43
|
const sourceDiscriminatorFor = (access) => {
|
|
18
44
|
const nameSlug = slugify(`${access.declaringKind}-${access.bank.declaredName}`) || access.declaringKind;
|