spawnfile 0.1.13 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -121
- package/dist/audit/auditCli.d.ts +19 -0
- package/dist/audit/auditCli.js +63 -0
- package/dist/audit/checks.d.ts +100 -0
- package/dist/audit/checks.js +279 -0
- package/dist/audit/checksShared.d.ts +74 -0
- package/dist/audit/checksShared.js +37 -0
- package/dist/audit/generateAudit.d.ts +19 -0
- package/dist/audit/generateAudit.js +122 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.js +4 -0
- package/dist/audit/readAudit.d.ts +50 -0
- package/dist/audit/readAudit.js +59 -0
- package/dist/audit/types.d.ts +40 -0
- package/dist/audit/types.js +8 -0
- package/dist/auth/credentialEnvFile.d.ts +11 -0
- package/dist/auth/credentialEnvFile.js +60 -0
- package/dist/auth/credentialProvisioning.d.ts +15 -0
- package/dist/auth/credentialProvisioning.js +75 -0
- package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
- package/dist/auth/credentialProvisioningReceipt.js +70 -0
- package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
- package/dist/auth/credentialProvisioningRequest.js +169 -0
- package/dist/auth/credentialWorldBindings.d.ts +21 -0
- package/dist/auth/credentialWorldBindings.js +104 -0
- package/dist/auth/importers.d.ts +10 -0
- package/dist/auth/importers.js +29 -4
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/paths.d.ts +12 -1
- package/dist/auth/paths.js +21 -0
- package/dist/auth/profileStore.js +9 -9
- package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
- package/dist/auth/targetSecretSourceAuthor.js +52 -0
- package/dist/auth/targetSecretSourceFsIdentity.d.ts +40 -0
- package/dist/auth/targetSecretSourceFsIdentity.js +42 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +17 -0
- package/dist/auth/targetSecretSourceFsPublish.js +51 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +17 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +468 -0
- package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
- package/dist/auth/targetSecretSourceFsRead.js +189 -0
- package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
- package/dist/auth/targetSecretSourceGrant.js +99 -0
- package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
- package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
- package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
- package/dist/auth/targetSecretSourceLifecycle.js +52 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
- package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
- package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
- package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
- package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
- package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
- package/dist/auth/targetSecretSourceResolver.js +137 -0
- package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
- package/dist/auth/targetSecretSourceRevoke.js +92 -0
- package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
- package/dist/auth/targetSecretSourceRotate.js +121 -0
- package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
- package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
- package/dist/auth/trainingAuth.d.ts +21 -0
- package/dist/auth/trainingAuth.js +86 -0
- package/dist/auth/types.d.ts +1 -1
- package/dist/cli/artifactsCommands.d.ts +27 -0
- package/dist/cli/artifactsCommands.js +132 -0
- package/dist/cli/authCommands.d.ts +5 -0
- package/dist/cli/authCommands.js +230 -0
- package/dist/cli/canaryCutoverCommand.d.ts +2 -0
- package/dist/cli/canaryCutoverCommand.js +30 -0
- package/dist/cli/capabilitiesCommand.d.ts +3 -0
- package/dist/cli/capabilitiesCommand.js +12 -0
- package/dist/cli/capabilitiesReceipt.d.ts +56 -0
- package/dist/cli/capabilitiesReceipt.js +56 -0
- package/dist/cli/compileBuildCommands.d.ts +3 -0
- package/dist/cli/compileBuildCommands.js +48 -0
- package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
- package/dist/cli/composedLifecycleContractSet.js +204 -0
- package/dist/cli/containerBundleCommand.d.ts +6 -0
- package/dist/cli/containerBundleCommand.js +116 -0
- package/dist/cli/devCommands.js +2 -0
- package/dist/cli/downCommand.d.ts +25 -0
- package/dist/cli/downCommand.js +145 -0
- package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
- package/dist/cli/evidenceExportHelperCommand.js +51 -0
- package/dist/cli/index.js +15 -3
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +11 -181
- package/dist/cli/lifecycleMachine.d.ts +25 -0
- package/dist/cli/lifecycleMachine.js +78 -0
- package/dist/cli/lifecyclePlan.d.ts +35 -0
- package/dist/cli/lifecyclePlan.js +240 -0
- package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
- package/dist/cli/lifecyclePlanningCommands.js +30 -0
- package/dist/cli/paideiaDelegation.d.ts +17 -0
- package/dist/cli/paideiaDelegation.js +210 -0
- package/dist/cli/paideiaSupervisor.d.ts +17 -0
- package/dist/cli/paideiaSupervisor.js +48 -0
- package/dist/cli/productStateCloneCommand.d.ts +2 -0
- package/dist/cli/productStateCloneCommand.js +34 -0
- package/dist/cli/runCli.d.ts +19 -2
- package/dist/cli/runCli.js +58 -74
- package/dist/cli/runPublishCommands.d.ts +3 -0
- package/dist/cli/runPublishCommands.js +70 -0
- package/dist/cli/statusCommand.d.ts +3 -33
- package/dist/cli/statusCommand.js +19 -249
- package/dist/cli/statusCommandLive.d.ts +20 -0
- package/dist/cli/statusCommandLive.js +188 -0
- package/dist/cli/statusCommandOptions.d.ts +40 -0
- package/dist/cli/statusCommandOptions.js +42 -0
- package/dist/cli/targetCliRoute.d.ts +2 -0
- package/dist/cli/targetCliRoute.js +30 -0
- package/dist/cli/targetCommands.d.ts +30 -0
- package/dist/cli/targetCommands.js +227 -0
- package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
- package/dist/cli/targetComposedPreparationCommand.js +39 -0
- package/dist/cli/targetConfigPreparedPlan.d.ts +3 -0
- package/dist/cli/targetConfigPreparedPlan.js +74 -0
- package/dist/cli/targetConfigResolver.d.ts +3 -0
- package/dist/cli/targetConfigResolver.js +111 -0
- package/dist/cli/targetConfigResolverCommand.d.ts +6 -0
- package/dist/cli/targetConfigResolverCommand.js +43 -0
- package/dist/cli/targetConfigResolverContracts.d.ts +56 -0
- package/dist/cli/targetConfigResolverContracts.js +30 -0
- package/dist/cli/targetConfigResolverDocker.d.ts +4 -0
- package/dist/cli/targetConfigResolverDocker.js +47 -0
- package/dist/cli/targetConfigResolverValidation.d.ts +10 -0
- package/dist/cli/targetConfigResolverValidation.js +94 -0
- package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
- package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +55 -0
- package/dist/cli/targetDefaultAuthorities.js +213 -0
- package/dist/cli/targetDefaultConfig.d.ts +75 -0
- package/dist/cli/targetDefaultConfig.js +334 -0
- package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
- package/dist/cli/targetDefaultConfigStdin.js +221 -0
- package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
- package/dist/cli/targetDefaultEnvelope.js +13 -0
- package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
- package/dist/cli/targetDefaultHandlerFactory.js +268 -0
- package/dist/cli/targetDefaultHandlers.d.ts +21 -0
- package/dist/cli/targetDefaultHandlers.js +72 -0
- package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
- package/dist/cli/targetDefaultJournalAuthority.js +135 -0
- package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
- package/dist/cli/targetDefaultWorldClock.js +14 -0
- package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
- package/dist/cli/targetDefaultWorldQueries.js +11 -0
- package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
- package/dist/cli/targetDefaultWorldReadiness.js +17 -0
- package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
- package/dist/cli/targetEvidenceHelperResolution.js +23 -0
- package/dist/cli/targetLookupCli.d.ts +3 -0
- package/dist/cli/targetLookupCli.js +31 -0
- package/dist/cli/targetLookupCommands.d.ts +12 -0
- package/dist/cli/targetLookupCommands.js +69 -0
- package/dist/cli/targetOperationDispatch.d.ts +58 -0
- package/dist/cli/targetOperationDispatch.js +21 -0
- package/dist/cli/targetProductionCommands.d.ts +5 -0
- package/dist/cli/targetProductionCommands.js +45 -0
- package/dist/cli/targetReceiptOutput.d.ts +14 -0
- package/dist/cli/targetReceiptOutput.js +21 -0
- package/dist/cli/targetRequestFile.d.ts +14 -0
- package/dist/cli/targetRequestFile.js +63 -0
- package/dist/cli/targetSecretSourceInput.d.ts +28 -0
- package/dist/cli/targetSecretSourceInput.js +121 -0
- package/dist/cli/targetWorldClockCommand.d.ts +10 -0
- package/dist/cli/targetWorldClockCommand.js +42 -0
- package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
- package/dist/cli/targetWorldReadinessCommand.js +43 -0
- package/dist/cli/trainCommand.d.ts +3 -0
- package/dist/cli/trainCommand.js +61 -0
- package/dist/cli/upCommand.d.ts +3 -0
- package/dist/cli/upCommand.js +162 -0
- package/dist/cli/upImageCommand.d.ts +11 -0
- package/dist/cli/upImageCommand.js +41 -0
- package/dist/cli/upLifecycleInvocation.d.ts +41 -0
- package/dist/cli/upLifecycleInvocation.js +48 -0
- package/dist/cli/upLifecycleRecovery.d.ts +4 -0
- package/dist/cli/upLifecycleRecovery.js +197 -0
- package/dist/cli/usageCommand.d.ts +40 -0
- package/dist/cli/usageCommand.js +284 -0
- package/dist/cli/usageCommandLive.d.ts +84 -0
- package/dist/cli/usageCommandLive.js +95 -0
- package/dist/cli/usageDeploymentSource.d.ts +9 -0
- package/dist/cli/usageDeploymentSource.js +22 -0
- package/dist/cli/workspaceResourceMigrationCommand.d.ts +8 -0
- package/dist/cli/workspaceResourceMigrationCommand.js +36 -0
- package/dist/compiler/agentNodeMerge.d.ts +2 -0
- package/dist/compiler/agentNodeMerge.js +79 -0
- package/dist/compiler/agentSurfaces.js +11 -1
- package/dist/compiler/buildCompilePlan.js +17 -0
- package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
- package/dist/compiler/buildCompilePlanAgent.js +56 -0
- package/dist/compiler/buildCompilePlanTeams.d.ts +2 -1
- package/dist/compiler/buildCompilePlanTeams.js +9 -1
- package/dist/compiler/buildCompilePlanTraversal.js +75 -82
- package/dist/compiler/buildProject.d.ts +11 -0
- package/dist/compiler/buildProject.js +77 -2
- package/dist/compiler/compilePlanHelpers.js +5 -0
- package/dist/compiler/compileProject.d.ts +15 -0
- package/dist/compiler/compileProject.js +31 -75
- package/dist/compiler/compileProjectPolicy.d.ts +5 -0
- package/dist/compiler/compileProjectPolicy.js +21 -0
- package/dist/compiler/compileProjectReports.d.ts +9 -0
- package/dist/compiler/compileProjectReports.js +52 -0
- package/dist/compiler/compileProjectSupport.js +9 -0
- package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
- package/dist/compiler/containerArtifactSummaries.js +138 -0
- package/dist/compiler/containerArtifacts.d.ts +12 -0
- package/dist/compiler/containerArtifacts.js +180 -127
- package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
- package/dist/compiler/containerArtifactsPlans.js +54 -124
- package/dist/compiler/containerArtifactsRender.d.ts +5 -2
- package/dist/compiler/containerArtifactsRender.js +106 -70
- package/dist/compiler/containerArtifactsTypes.d.ts +20 -0
- package/dist/compiler/containerBackedMountRender.d.ts +56 -0
- package/dist/compiler/containerBackedMountRender.js +101 -0
- package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
- package/dist/compiler/containerConfigEnvRender.js +54 -0
- package/dist/compiler/containerDaimonBrokerRender.d.ts +112 -0
- package/dist/compiler/containerDaimonBrokerRender.js +191 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
- package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +108 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +172 -0
- package/dist/compiler/containerDaimonGrokWorkerRender.js +268 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +12 -0
- package/dist/compiler/containerDaimonOwnershipGuardRender.js +191 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
- package/dist/compiler/containerDaimonUidEntrypointRender.js +297 -0
- package/dist/compiler/containerEntrypointRender.d.ts +8 -0
- package/dist/compiler/containerEntrypointRender.js +82 -72
- package/dist/compiler/containerEntrypointShell.d.ts +5 -0
- package/dist/compiler/containerEntrypointShell.js +29 -0
- package/dist/compiler/containerPackageOverrides.d.ts +27 -0
- package/dist/compiler/containerPackageOverrides.js +63 -0
- package/dist/compiler/containerPersistentMounts.d.ts +30 -0
- package/dist/compiler/containerPersistentMounts.js +66 -0
- package/dist/compiler/containerReadinessPaths.d.ts +1 -0
- package/dist/compiler/containerReadinessPaths.js +1 -0
- package/dist/compiler/containerRuntimeLinkMaterializer.d.ts +2 -0
- package/dist/compiler/containerRuntimeLinkMaterializer.js +12 -0
- package/dist/compiler/containerRuntimeReadinessRender.d.ts +7 -0
- package/dist/compiler/containerRuntimeReadinessRender.js +40 -0
- package/dist/compiler/containerStateOwnershipRender.d.ts +4 -0
- package/dist/compiler/containerStateOwnershipRender.js +75 -0
- package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
- package/dist/compiler/containerTargetPlanResolution.js +97 -0
- package/dist/compiler/containerTargetResources.d.ts +22 -1
- package/dist/compiler/containerTargetResources.js +94 -2
- package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
- package/dist/compiler/containerVolumeBootstrap.js +3 -0
- package/dist/compiler/containerWorkspaceResourceRender.js +49 -1
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
- package/dist/compiler/daimonTelemetryArtifacts.js +56 -0
- package/dist/compiler/deploymentLineage.d.ts +40 -0
- package/dist/compiler/deploymentLineage.js +50 -0
- package/dist/compiler/dockerBuildContext.d.ts +16 -0
- package/dist/compiler/dockerBuildContext.js +159 -0
- package/dist/compiler/dockerBuildSkip.d.ts +30 -0
- package/dist/compiler/dockerBuildSkip.js +81 -0
- package/dist/compiler/index.d.ts +7 -0
- package/dist/compiler/index.js +7 -0
- package/dist/compiler/initProject.d.ts +2 -0
- package/dist/compiler/initProject.js +39 -1
- package/dist/compiler/localMoltnetAuthority.d.ts +64 -0
- package/dist/compiler/localMoltnetAuthority.js +177 -0
- package/dist/compiler/memoryArtifacts.d.ts +26 -0
- package/dist/compiler/memoryArtifacts.js +210 -0
- package/dist/compiler/memoryResolution.d.ts +4 -0
- package/dist/compiler/memoryResolution.js +147 -0
- package/dist/compiler/modelEnv.d.ts +7 -0
- package/dist/compiler/modelEnv.js +13 -1
- package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
- package/dist/compiler/moltnetArtifactPaths.d.ts +31 -0
- package/dist/compiler/moltnetArtifactPaths.js +51 -0
- package/dist/compiler/moltnetArtifactTypes.d.ts +56 -0
- package/dist/compiler/moltnetArtifactTypes.js +1 -0
- package/dist/compiler/moltnetArtifacts.d.ts +3 -41
- package/dist/compiler/moltnetArtifacts.js +87 -101
- package/dist/compiler/moltnetBinaries.d.ts +33 -4
- package/dist/compiler/moltnetBinaries.js +173 -26
- package/dist/compiler/moltnetClientConfig.js +7 -2
- package/dist/compiler/moltnetConfigLowering.d.ts +18 -1
- package/dist/compiler/moltnetConfigLowering.js +92 -6
- package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
- package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
- package/dist/compiler/moltnetNodeConfig.js +7 -2
- package/dist/compiler/moltnetReleaseAuthority.d.ts +40 -0
- package/dist/compiler/moltnetReleaseAuthority.js +102 -0
- package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
- package/dist/compiler/moltnetReleaseDownload.js +85 -0
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +2 -1
- package/dist/compiler/moltnetRepresentativeResolution.js +17 -3
- package/dist/compiler/moltnetResolution.js +67 -21
- package/dist/compiler/moltnetRoomMemberships.js +52 -9
- package/dist/compiler/moltnetRoomPolicyCompatibility.d.ts +1 -1
- package/dist/compiler/moltnetRoomPolicyCompatibility.js +3 -1
- package/dist/compiler/moltnetRuntimeConfig.d.ts +1 -1
- package/dist/compiler/moltnetRuntimeConfig.js +22 -2
- package/dist/compiler/moltnetServerPlans.d.ts +9 -0
- package/dist/compiler/moltnetServerPlans.js +151 -0
- package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
- package/dist/compiler/organizationExternalParticipants.js +176 -0
- package/dist/compiler/organizationIdentity.d.ts +21 -0
- package/dist/compiler/organizationIdentity.js +64 -0
- package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
- package/dist/compiler/organizationIdentityGraph.js +115 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +57 -0
- package/dist/compiler/organizationReadyEvidence.js +281 -0
- package/dist/compiler/projectManifestGraph.d.ts +4 -0
- package/dist/compiler/projectManifestGraph.js +24 -0
- package/dist/compiler/runProject.d.ts +8 -2
- package/dist/compiler/runProject.js +62 -27
- package/dist/compiler/runProjectAuth.d.ts +10 -2
- package/dist/compiler/runProjectAuth.js +105 -11
- package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
- package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
- package/dist/compiler/runProjectDocker.d.ts +11 -0
- package/dist/compiler/runProjectDocker.js +64 -16
- package/dist/compiler/runProjectDockerDaimonGuards.d.ts +15 -0
- package/dist/compiler/runProjectDockerDaimonGuards.js +122 -0
- package/dist/compiler/runProjectDockerReservation.d.ts +3 -0
- package/dist/compiler/runProjectDockerReservation.js +118 -0
- package/dist/compiler/runProjectLifecycle.d.ts +7 -0
- package/dist/compiler/runProjectLifecycle.js +40 -0
- package/dist/compiler/syncProjectAuth.js +4 -1
- package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
- package/dist/compiler/teamContextActiveEnvironments.js +255 -0
- package/dist/compiler/teamContextSupport.js +32 -40
- package/dist/compiler/teamContextTypes.d.ts +2 -0
- package/dist/compiler/training/broker/declaration.d.ts +45 -0
- package/dist/compiler/training/broker/declaration.js +55 -0
- package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
- package/dist/compiler/training/broker/entrypoint.js +111 -0
- package/dist/compiler/training/broker/index.d.ts +10 -0
- package/dist/compiler/training/broker/index.js +10 -0
- package/dist/compiler/training/broker/main.d.ts +2 -0
- package/dist/compiler/training/broker/main.js +14 -0
- package/dist/compiler/training/broker/paths.d.ts +196 -0
- package/dist/compiler/training/broker/paths.js +241 -0
- package/dist/compiler/training/broker/processes.d.ts +42 -0
- package/dist/compiler/training/broker/processes.js +99 -0
- package/dist/compiler/training/broker/projection.d.ts +51 -0
- package/dist/compiler/training/broker/projection.js +76 -0
- package/dist/compiler/training/broker/provisioning.d.ts +87 -0
- package/dist/compiler/training/broker/provisioning.js +213 -0
- package/dist/compiler/training/broker/receipt.d.ts +77 -0
- package/dist/compiler/training/broker/receipt.js +110 -0
- package/dist/compiler/training/broker/registration.d.ts +41 -0
- package/dist/compiler/training/broker/registration.js +102 -0
- package/dist/compiler/training/broker/runtime.d.ts +25 -0
- package/dist/compiler/training/broker/runtime.js +173 -0
- package/dist/compiler/training/broker/seccompRoutes.d.ts +31 -0
- package/dist/compiler/training/broker/seccompRoutes.js +36 -0
- package/dist/compiler/training/broker/supervisor.d.ts +109 -0
- package/dist/compiler/training/broker/supervisor.js +173 -0
- package/dist/compiler/training/container/contract.d.ts +31 -0
- package/dist/compiler/training/container/contract.js +33 -0
- package/dist/compiler/training/container/index.d.ts +4 -0
- package/dist/compiler/training/container/index.js +2 -0
- package/dist/compiler/training/container/launch.d.ts +18 -0
- package/dist/compiler/training/container/launch.js +173 -0
- package/dist/compiler/training/container/prepare.d.ts +8 -0
- package/dist/compiler/training/container/prepare.js +80 -0
- package/dist/compiler/training/container/process.d.ts +14 -0
- package/dist/compiler/training/container/process.js +70 -0
- package/dist/compiler/training/container/security.d.ts +36 -0
- package/dist/compiler/training/container/security.js +58 -0
- package/dist/compiler/training/context.d.ts +7 -0
- package/dist/compiler/training/context.js +93 -0
- package/dist/compiler/training/contract.d.ts +142 -0
- package/dist/compiler/training/contract.js +34 -0
- package/dist/compiler/training/index.d.ts +4 -0
- package/dist/compiler/training/index.js +3 -0
- package/dist/compiler/training/preparation/assets/Dockerfile +98 -0
- package/dist/compiler/training/preparation/assets/package-lock.json +3787 -0
- package/dist/compiler/training/preparation/broker.d.ts +21 -0
- package/dist/compiler/training/preparation/broker.js +43 -0
- package/dist/compiler/training/preparation/contextModes.d.ts +12 -0
- package/dist/compiler/training/preparation/contextModes.js +38 -0
- package/dist/compiler/training/preparation/contract.d.ts +182 -0
- package/dist/compiler/training/preparation/contract.js +94 -0
- package/dist/compiler/training/preparation/copyAssets.d.ts +1 -0
- package/dist/compiler/training/preparation/copyAssets.js +8 -0
- package/dist/compiler/training/preparation/daimonParent.d.ts +42 -0
- package/dist/compiler/training/preparation/daimonParent.js +114 -0
- package/dist/compiler/training/preparation/files.d.ts +25 -0
- package/dist/compiler/training/preparation/files.js +85 -0
- package/dist/compiler/training/preparation/image.d.ts +28 -0
- package/dist/compiler/training/preparation/image.js +102 -0
- package/dist/compiler/training/preparation/index.d.ts +3 -0
- package/dist/compiler/training/preparation/index.js +2 -0
- package/dist/compiler/training/preparation/inputs.d.ts +23 -0
- package/dist/compiler/training/preparation/inputs.js +93 -0
- package/dist/compiler/training/preparation/prepare.d.ts +33 -0
- package/dist/compiler/training/preparation/prepare.js +186 -0
- package/dist/compiler/training/preparation/scratch.d.ts +19 -0
- package/dist/compiler/training/preparation/scratch.js +48 -0
- package/dist/compiler/training/repair/compatibility.d.ts +11 -0
- package/dist/compiler/training/repair/compatibility.js +34 -0
- package/dist/compiler/training/repair/contract.d.ts +506 -0
- package/dist/compiler/training/repair/contract.js +31 -0
- package/dist/compiler/training/repair/index.d.ts +3 -0
- package/dist/compiler/training/repair/index.js +3 -0
- package/dist/compiler/training/repair/prepare.d.ts +230 -0
- package/dist/compiler/training/repair/prepare.js +74 -0
- package/dist/compiler/training/repair/witness.d.ts +203 -0
- package/dist/compiler/training/repair/witness.js +42 -0
- package/dist/compiler/types.d.ts +84 -1
- package/dist/compiler/upProject.d.ts +31 -1
- package/dist/compiler/upProject.js +197 -22
- package/dist/compiler/upProjectHandoff.d.ts +62 -0
- package/dist/compiler/upProjectHandoff.js +204 -0
- package/dist/compiler/upReceipt.d.ts +36 -0
- package/dist/compiler/upReceipt.js +127 -0
- package/dist/compiler/updateProjectModels.js +43 -60
- package/dist/compiler/updateProjectRuntime.js +22 -35
- package/dist/compiler/updateProjectSurfaces.js +53 -47
- package/dist/compiler/view/types.d.ts +1 -1
- package/dist/compiler/workspaceBundleArtifacts.d.ts +3 -0
- package/dist/compiler/workspaceBundleArtifacts.js +106 -0
- package/dist/compiler/workspaceResources.d.ts +4 -1
- package/dist/compiler/workspaceResources.js +12 -7
- package/dist/compiler/worldBindings.d.ts +39 -0
- package/dist/compiler/worldBindings.js +247 -0
- package/dist/compiler/worldBindingsFile.d.ts +5 -0
- package/dist/compiler/worldBindingsFile.js +162 -0
- package/dist/deployment/artifactsExport.d.ts +49 -0
- package/dist/deployment/artifactsExport.js +217 -0
- package/dist/deployment/artifactsExportDocker.d.ts +48 -0
- package/dist/deployment/artifactsExportDocker.js +91 -0
- package/dist/deployment/artifactsExportPlan.d.ts +24 -0
- package/dist/deployment/artifactsExportPlan.js +185 -0
- package/dist/deployment/artifactsExportTypes.d.ts +50 -0
- package/dist/deployment/artifactsExportTypes.js +52 -0
- package/dist/deployment/buildImageCacheStore.d.ts +23 -0
- package/dist/deployment/buildImageCacheStore.js +54 -0
- package/dist/deployment/canaryCutover.d.ts +42 -0
- package/dist/deployment/canaryCutover.js +140 -0
- package/dist/deployment/candidateDiagnostics.d.ts +15 -0
- package/dist/deployment/candidateDiagnostics.js +90 -0
- package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
- package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
- package/dist/deployment/dockerInspect.d.ts +9 -0
- package/dist/deployment/dockerInspect.js +24 -1
- package/dist/deployment/dockerLabels.d.ts +2 -0
- package/dist/deployment/dockerLabels.js +2 -0
- package/dist/deployment/dockerLogs.js +5 -10
- package/dist/deployment/dockerManager.d.ts +51 -0
- package/dist/deployment/dockerManager.js +124 -1
- package/dist/deployment/dockerProbeGateway.d.ts +17 -0
- package/dist/deployment/dockerProbeGateway.js +80 -6
- package/dist/deployment/dockerRecover.js +9 -1
- package/dist/deployment/dockerTeardown.d.ts +32 -0
- package/dist/deployment/dockerTeardown.js +61 -0
- package/dist/deployment/downDeployment.d.ts +39 -0
- package/dist/deployment/downDeployment.js +248 -0
- package/dist/deployment/downReceiptTypes.d.ts +36 -0
- package/dist/deployment/downReceiptTypes.js +45 -0
- package/dist/deployment/index.d.ts +20 -0
- package/dist/deployment/index.js +21 -0
- package/dist/deployment/lifecycleCompletion.d.ts +37 -0
- package/dist/deployment/lifecycleCompletion.js +236 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +224 -0
- package/dist/deployment/lifecycleCompletionContracts.js +140 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
- package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
- package/dist/deployment/lifecycleCompletionLookup.js +88 -0
- package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
- package/dist/deployment/lifecycleCompletionOwner.js +31 -0
- package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
- package/dist/deployment/lifecycleCompletionParsing.js +108 -0
- package/dist/deployment/lifecycleCompletionPaths.d.ts +12 -0
- package/dist/deployment/lifecycleCompletionPaths.js +19 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +7 -0
- package/dist/deployment/lifecycleCompletionPublication.js +49 -0
- package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
- package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRoot.js +243 -0
- package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
- package/dist/deployment/lifecycleCompletionStore.js +151 -0
- package/dist/deployment/lifecycleUpRecords.d.ts +11 -0
- package/dist/deployment/lifecycleUpRecords.js +127 -0
- package/dist/deployment/native/AGENTS.md +11 -0
- package/dist/deployment/native/rename-noreplace-arm64 +0 -0
- package/dist/deployment/native/rename-noreplace-arm64.provenance.json +1 -0
- package/dist/deployment/native/rename-noreplace-x64 +0 -0
- package/dist/deployment/native/rename-noreplace-x64.provenance.json +1 -0
- package/dist/deployment/noReplaceActivation.d.ts +17 -0
- package/dist/deployment/noReplaceActivation.js +50 -0
- package/dist/deployment/organizationHandoffAuthorityFsBudget.d.ts +110 -0
- package/dist/deployment/organizationHandoffAuthorityFsBudget.js +156 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +187 -0
- package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
- package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +431 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
- package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +355 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.js +149 -0
- package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
- package/dist/deployment/organizationHandoffTypes.js +80 -0
- package/dist/deployment/organizationReady.d.ts +54 -0
- package/dist/deployment/organizationReady.js +232 -0
- package/dist/deployment/privateArtifactsExport.d.ts +18 -0
- package/dist/deployment/privateArtifactsExport.js +80 -0
- package/dist/deployment/productStateClone.d.ts +43 -0
- package/dist/deployment/productStateClone.js +319 -0
- package/dist/deployment/record.d.ts +26 -1
- package/dist/deployment/record.js +49 -4
- package/dist/deployment/target.d.ts +1 -35
- package/dist/deployment/target.js +1 -96
- package/dist/deployment/upLifecycleRecoveryState.d.ts +23 -0
- package/dist/deployment/upLifecycleRecoveryState.js +12 -0
- package/dist/deployment/upReceiptTypes.d.ts +137 -0
- package/dist/deployment/upReceiptTypes.js +191 -0
- package/dist/deployment/workspaceResourceMigration.d.ts +55 -0
- package/dist/deployment/workspaceResourceMigration.js +315 -0
- package/dist/dev/project.d.ts +7 -0
- package/dist/dev/project.js +24 -9
- package/dist/distribution/buildDistributionReport.d.ts +2 -1
- package/dist/distribution/buildDistributionReport.js +2 -1
- package/dist/distribution/consumeImage.d.ts +2 -0
- package/dist/distribution/consumeImage.js +98 -73
- package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
- package/dist/distribution/consumeImageDaimonDocker.js +45 -0
- package/dist/distribution/consumeImageLifecycle.d.ts +17 -0
- package/dist/distribution/consumeImageLifecycle.js +231 -0
- package/dist/distribution/consumeImageSupport.d.ts +12 -0
- package/dist/distribution/consumeImageSupport.js +15 -0
- package/dist/distribution/distributionReportSchema.d.ts +16 -1
- package/dist/distribution/distributionReportSchema.js +21 -3
- package/dist/distribution/dockerRunner.d.ts +6 -1
- package/dist/distribution/dockerRunner.js +31 -4
- package/dist/distribution/imageRuntimeAuth.d.ts +9 -1
- package/dist/distribution/imageRuntimeAuth.js +70 -1
- package/dist/distribution/index.d.ts +3 -3
- package/dist/distribution/index.js +2 -2
- package/dist/distribution/preflight.js +5 -1
- package/dist/distribution/types.d.ts +21 -1
- package/dist/distribution/types.js +4 -0
- package/dist/evidenceExportHelper/boundedExecutor.d.ts +3 -0
- package/dist/evidenceExportHelper/boundedExecutor.js +33 -0
- package/dist/evidenceExportHelper/helperProgram.mjs +156 -0
- package/dist/evidenceExportHelper/index.d.ts +4 -0
- package/dist/evidenceExportHelper/index.js +4 -0
- package/dist/evidenceExportHelper/preparedAuthority.d.ts +64 -0
- package/dist/evidenceExportHelper/preparedAuthority.js +228 -0
- package/dist/evidenceExportHelper/preparedBuilder.d.ts +10 -0
- package/dist/evidenceExportHelper/preparedBuilder.js +183 -0
- package/dist/evidenceExportHelper/preparedBuilderTypes.d.ts +19 -0
- package/dist/evidenceExportHelper/preparedBuilderTypes.js +1 -0
- package/dist/evidenceExportHelper/recipe.d.ts +7 -0
- package/dist/evidenceExportHelper/recipe.js +83 -0
- package/dist/filesystem/io.d.ts +2 -0
- package/dist/filesystem/io.js +16 -1
- package/dist/filesystem/paths.js +10 -1
- package/dist/ledger/causalConformanceCli.d.ts +1 -0
- package/dist/ledger/causalConformanceCli.js +41 -0
- package/dist/ledger/causeNamespace.d.ts +8 -0
- package/dist/ledger/causeNamespace.js +24 -0
- package/dist/ledger/conformance.d.ts +83 -0
- package/dist/ledger/conformance.js +259 -0
- package/dist/ledger/emitters.d.ts +76 -0
- package/dist/ledger/emitters.js +188 -0
- package/dist/ledger/index.d.ts +4 -0
- package/dist/ledger/index.js +4 -0
- package/dist/ledger/principal.d.ts +96 -0
- package/dist/ledger/principal.js +121 -0
- package/dist/manifest/executionSchemas.d.ts +27 -0
- package/dist/manifest/executionSchemas.js +21 -2
- package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
- package/dist/manifest/externalParticipantSchemas.js +17 -0
- package/dist/manifest/index.d.ts +1 -0
- package/dist/manifest/index.js +1 -0
- package/dist/manifest/inlineAgentMember.d.ts +2 -0
- package/dist/manifest/inlineAgentMember.js +9 -0
- package/dist/manifest/loadManifest.js +14 -8
- package/dist/manifest/mcpSchemas.d.ts +18 -0
- package/dist/manifest/mcpSchemas.js +44 -0
- package/dist/manifest/memorySchemas.d.ts +245 -0
- package/dist/manifest/memorySchemas.js +148 -0
- package/dist/manifest/renderSpawnfile.js +22 -131
- package/dist/manifest/renderSpawnfileNetworks.js +20 -2
- package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
- package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
- package/dist/manifest/renderSpawnfileWorkspace.js +5 -0
- package/dist/manifest/scheduleSchemas.d.ts +3 -1
- package/dist/manifest/scheduleSchemas.js +91 -5
- package/dist/manifest/schemas.d.ts +2034 -40
- package/dist/manifest/schemas.js +82 -33
- package/dist/manifest/surfaceSchemas.d.ts +17 -0
- package/dist/manifest/surfaceSchemas.js +24 -1
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +6 -2
- package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
- package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
- package/dist/manifest/teamNetworkSchemas.d.ts +25 -190
- package/dist/manifest/teamNetworkSchemas.js +21 -317
- package/dist/manifest/teamNetworkServerSchemas.d.ts +155 -0
- package/dist/manifest/teamNetworkServerSchemas.js +215 -0
- package/dist/manifest/workspaceSchemas.d.ts +16 -0
- package/dist/manifest/workspaceSchemas.js +11 -0
- package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
- package/dist/ownership/siblingBuildFreshness.js +20 -0
- package/dist/report/types.d.ts +173 -1
- package/dist/runtime/common.d.ts +63 -1
- package/dist/runtime/common.js +88 -3
- package/dist/runtime/container.d.ts +28 -1
- package/dist/runtime/container.js +78 -29
- package/dist/runtime/containerPackageOverrides.d.ts +37 -0
- package/dist/runtime/containerPackageOverrides.js +33 -0
- package/dist/runtime/daimon/adapter.d.ts +14 -0
- package/dist/runtime/daimon/adapter.js +243 -0
- package/dist/runtime/daimon/attention.d.ts +8 -0
- package/dist/runtime/daimon/attention.js +32 -0
- package/dist/runtime/daimon/config.d.ts +25 -0
- package/dist/runtime/daimon/config.js +272 -0
- package/dist/runtime/daimon/contractManifest.d.ts +295 -0
- package/dist/runtime/daimon/contractManifest.js +319 -0
- package/dist/runtime/daimon/grokModel.d.ts +19 -0
- package/dist/runtime/daimon/grokModel.js +33 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +26 -0
- package/dist/runtime/daimon/grokWorkerConfigBytes.js +36 -0
- package/dist/runtime/daimon/grokWorkerContract.d.ts +22 -0
- package/dist/runtime/daimon/grokWorkerContract.js +48 -0
- package/dist/runtime/daimon/memory.d.ts +57 -0
- package/dist/runtime/daimon/memory.js +125 -0
- package/dist/runtime/daimon/runAuth.d.ts +51 -0
- package/dist/runtime/daimon/runAuth.js +279 -0
- package/dist/runtime/daimon/runtimeIdentity.d.ts +22 -0
- package/dist/runtime/daimon/runtimeIdentity.js +22 -0
- package/dist/runtime/daimon/scheduleAuthority.d.ts +3 -0
- package/dist/runtime/daimon/scheduleAuthority.js +17 -0
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.js +6 -0
- package/dist/runtime/install.d.ts +3 -0
- package/dist/runtime/install.js +3 -0
- package/dist/runtime/localDaimonAuthority.d.ts +11 -0
- package/dist/runtime/localDaimonAuthority.js +77 -0
- package/dist/runtime/mnemeMcp.d.ts +28 -0
- package/dist/runtime/mnemeMcp.js +135 -0
- package/dist/runtime/openclaw/adapter.js +17 -6
- package/dist/runtime/openclaw/mcp.d.ts +10 -0
- package/dist/runtime/openclaw/mcp.js +69 -0
- package/dist/runtime/openclaw/runAuth.js +2 -2
- package/dist/runtime/openclaw/scaffold.js +1 -1
- package/dist/runtime/openclaw/schedules.d.ts +38 -0
- package/dist/runtime/openclaw/schedules.js +74 -0
- package/dist/runtime/pi/adapter.d.ts +1 -2
- package/dist/runtime/pi/adapter.js +87 -58
- package/dist/runtime/pi/appActivitySource.js +114 -2
- package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
- package/dist/runtime/pi/appAgentConfig.js +264 -0
- package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
- package/dist/runtime/pi/appCliEnginesSource.js +183 -0
- package/dist/runtime/pi/appCliSource.d.ts +1 -0
- package/dist/runtime/pi/appCliSource.js +353 -0
- package/dist/runtime/pi/appControlSource.d.ts +1 -0
- package/dist/runtime/pi/appControlSource.js +390 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
- package/dist/runtime/pi/appCoreSource.d.ts +4 -1
- package/dist/runtime/pi/appCoreSource.js +104 -214
- package/dist/runtime/pi/appPreludeSource.js +140 -52
- package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
- package/dist/runtime/pi/appScheduleSource.js +84 -0
- package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
- package/dist/runtime/pi/appScriptedEngine.js +42 -0
- package/dist/runtime/pi/appSource.d.ts +4 -1
- package/dist/runtime/pi/appSource.js +6 -2
- package/dist/runtime/pi/appTemplate.d.ts +8 -22
- package/dist/runtime/pi/appTemplate.js +9 -126
- package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
- package/dist/runtime/pi/appTemplateTypes.js +18 -0
- package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
- package/dist/runtime/pi/appWakeContextSource.js +398 -0
- package/dist/runtime/pi/containerTargets.d.ts +4 -0
- package/dist/runtime/pi/containerTargets.js +57 -0
- package/dist/runtime/pi/runAuth.js +126 -9
- package/dist/runtime/pi/testHelpers.d.ts +2 -0
- package/dist/runtime/pi/testHelpers.js +40 -0
- package/dist/runtime/picoclaw/adapter.js +25 -29
- package/dist/runtime/picoclaw/mcp.d.ts +4 -0
- package/dist/runtime/picoclaw/mcp.js +43 -0
- package/dist/runtime/picoclaw/memory.d.ts +7 -0
- package/dist/runtime/picoclaw/memory.js +17 -0
- package/dist/runtime/picoclaw/runAuth.js +1 -1
- package/dist/runtime/picoclaw/scaffold.js +1 -1
- package/dist/runtime/picoclaw/schedules.d.ts +26 -0
- package/dist/runtime/picoclaw/schedules.js +62 -3
- package/dist/runtime/registry.d.ts +3 -0
- package/dist/runtime/registry.js +19 -2
- package/dist/runtime/scheduleUtils.d.ts +3 -0
- package/dist/runtime/scheduleUtils.js +19 -0
- package/dist/runtime/types.d.ts +50 -2
- package/dist/runtime/usageLedger.d.ts +158 -0
- package/dist/runtime/usageLedger.js +269 -0
- package/dist/runtime/usageLedgerRead.d.ts +48 -0
- package/dist/runtime/usageLedgerRead.js +102 -0
- package/dist/runtime/usageRequestLedger.d.ts +42 -0
- package/dist/runtime/usageRequestLedger.js +72 -0
- package/dist/shared/daimonCodexDocker.d.ts +32 -0
- package/dist/shared/daimonCodexDocker.js +120 -0
- package/dist/shared/daimonGrokSeccompProfile.d.ts +10 -0
- package/dist/shared/daimonGrokSeccompProfile.js +11 -0
- package/dist/shared/errors.d.ts +1 -1
- package/dist/shared/errors.js +2 -2
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.js +3 -0
- package/dist/shared/redaction.d.ts +2 -0
- package/dist/shared/redaction.js +10 -0
- package/dist/shared/types.d.ts +1 -1
- package/dist/shared/volumeNames.d.ts +6 -0
- package/dist/shared/volumeNames.js +14 -0
- package/dist/status/buildStatus.d.ts +1 -0
- package/dist/status/buildStatus.js +2 -0
- package/dist/status/compileReport.d.ts +22 -0
- package/dist/status/compileReport.js +16 -2
- package/dist/status/compiledProbeCollection.d.ts +21 -0
- package/dist/status/compiledProbeCollection.js +27 -0
- package/dist/status/imageStatusReport.js +6 -0
- package/dist/status/index.d.ts +3 -0
- package/dist/status/index.js +3 -0
- package/dist/status/lifecycleProbes.d.ts +19 -0
- package/dist/status/lifecycleProbes.js +174 -0
- package/dist/status/moltnetProbes.d.ts +7 -8
- package/dist/status/moltnetProbes.js +27 -198
- package/dist/status/moltnetWiringProbes.d.ts +19 -0
- package/dist/status/moltnetWiringProbes.js +178 -0
- package/dist/target/cleanupRun.d.ts +41 -0
- package/dist/target/cleanupRun.js +139 -0
- package/dist/target/cleanupRunDocker.d.ts +16 -0
- package/dist/target/cleanupRunDocker.js +66 -0
- package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
- package/dist/target/cleanupRunDockerPreflight.js +224 -0
- package/dist/target/composedPreparation.d.ts +205 -0
- package/dist/target/composedPreparation.js +223 -0
- package/dist/target/containerBundle.d.ts +82 -0
- package/dist/target/containerBundle.js +243 -0
- package/dist/target/containerBundleArchive.d.ts +31 -0
- package/dist/target/containerBundleArchive.js +140 -0
- package/dist/target/containerBundleAuthority.d.ts +25 -0
- package/dist/target/containerBundleAuthority.js +65 -0
- package/dist/target/containerBundleContracts.d.ts +114 -0
- package/dist/target/containerBundleContracts.js +173 -0
- package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
- package/dist/target/containerBundleFilesystemStore.js +247 -0
- package/dist/target/containerBundlePolicy.d.ts +33 -0
- package/dist/target/containerBundlePolicy.js +64 -0
- package/dist/target/containerBundleStore.d.ts +127 -0
- package/dist/target/containerBundleStore.js +284 -0
- package/dist/target/contracts.d.ts +538 -0
- package/dist/target/contracts.js +373 -0
- package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
- package/dist/target/dockerArtifactIdentityTypes.js +1 -0
- package/dist/target/dockerArtifactInspection.d.ts +40 -0
- package/dist/target/dockerArtifactInspection.js +125 -0
- package/dist/target/dockerArtifacts.d.ts +21 -0
- package/dist/target/dockerArtifacts.js +110 -0
- package/dist/target/dockerArtifactsProvider.d.ts +41 -0
- package/dist/target/dockerArtifactsProvider.js +476 -0
- package/dist/target/dockerBaseImage.d.ts +2 -0
- package/dist/target/dockerBaseImage.js +11 -0
- package/dist/target/dockerCommandExecutor.d.ts +38 -0
- package/dist/target/dockerCommandExecutor.js +251 -0
- package/dist/target/dockerCommandExecutorCore.d.ts +35 -0
- package/dist/target/dockerCommandExecutorCore.js +275 -0
- package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
- package/dist/target/dockerContainerBundleBuilder.js +256 -0
- package/dist/target/dockerContextSnapshot.d.ts +21 -0
- package/dist/target/dockerContextSnapshot.js +158 -0
- package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
- package/dist/target/dockerEndpointFingerprint.js +9 -0
- package/dist/target/dockerPreparedArtifact.d.ts +48 -0
- package/dist/target/dockerPreparedArtifact.js +131 -0
- package/dist/target/dockerProjectionJson.d.ts +1 -0
- package/dist/target/dockerProjectionJson.js +80 -0
- package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
- package/dist/target/dockerPublicArtifactSnapshot.js +83 -0
- package/dist/target/dockerResources.d.ts +26 -0
- package/dist/target/dockerResources.js +162 -0
- package/dist/target/dockerResourcesProvider.d.ts +44 -0
- package/dist/target/dockerResourcesProvider.js +207 -0
- package/dist/target/dockerSecrets.d.ts +39 -0
- package/dist/target/dockerSecrets.js +249 -0
- package/dist/target/dockerSecretsAuthority.d.ts +26 -0
- package/dist/target/dockerSecretsAuthority.js +216 -0
- package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
- package/dist/target/dockerSecretsLifecycle.js +133 -0
- package/dist/target/dockerSecretsProvider.d.ts +68 -0
- package/dist/target/dockerSecretsProvider.js +329 -0
- package/dist/target/dockerTarget.d.ts +53 -0
- package/dist/target/dockerTarget.js +48 -0
- package/dist/target/dockerTargetBinding.d.ts +13 -0
- package/dist/target/dockerTargetBinding.js +95 -0
- package/dist/target/dockerTargetExecFile.d.ts +19 -0
- package/dist/target/dockerTargetExecFile.js +194 -0
- package/dist/target/dockerWorldClock.d.ts +17 -0
- package/dist/target/dockerWorldClock.js +111 -0
- package/dist/target/dockerWorldReadiness.d.ts +17 -0
- package/dist/target/dockerWorldReadiness.js +119 -0
- package/dist/target/dockerWorldService.d.ts +23 -0
- package/dist/target/dockerWorldService.js +216 -0
- package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
- package/dist/target/dockerWorldServiceAuthority.js +182 -0
- package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
- package/dist/target/dockerWorldServiceLifecycle.js +275 -0
- package/dist/target/dockerWorldServiceProvider.d.ts +64 -0
- package/dist/target/dockerWorldServiceProvider.js +330 -0
- package/dist/target/dockerWorldServiceStore.d.ts +73 -0
- package/dist/target/dockerWorldServiceStore.js +367 -0
- package/dist/target/evidenceExport.d.ts +57 -0
- package/dist/target/evidenceExport.js +527 -0
- package/dist/target/evidenceExportArchive.d.ts +10 -0
- package/dist/target/evidenceExportArchive.js +302 -0
- package/dist/target/evidenceExportContract.d.ts +27 -0
- package/dist/target/evidenceExportContract.js +40 -0
- package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
- package/dist/target/evidenceExportOperationsTestKit.js +312 -0
- package/dist/target/evidenceExportProvider.d.ts +87 -0
- package/dist/target/evidenceExportProvider.js +197 -0
- package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
- package/dist/target/evidenceExportPublicationTypes.js +1 -0
- package/dist/target/evidenceExportStore.d.ts +70 -0
- package/dist/target/evidenceExportStore.js +498 -0
- package/dist/target/evidenceExportStorePublication.d.ts +7 -0
- package/dist/target/evidenceExportStorePublication.js +395 -0
- package/dist/target/handles.d.ts +20 -0
- package/dist/target/handles.js +56 -0
- package/dist/target/index.d.ts +12 -0
- package/dist/target/index.js +11 -0
- package/dist/target/journal.d.ts +59 -0
- package/dist/target/journal.js +529 -0
- package/dist/target/journalFilesystem.d.ts +3 -0
- package/dist/target/journalFilesystem.js +111 -0
- package/dist/target/journalRoot.d.ts +4 -0
- package/dist/target/journalRoot.js +6 -0
- package/dist/target/organizationAttachment.d.ts +23 -0
- package/dist/target/organizationAttachment.js +263 -0
- package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
- package/dist/target/organizationAttachmentAuthority.js +161 -0
- package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
- package/dist/target/organizationAttachmentLifecycle.js +101 -0
- package/dist/target/organizationAttachmentProvider.d.ts +76 -0
- package/dist/target/organizationAttachmentProvider.js +289 -0
- package/dist/target/organizationAttachmentStore.d.ts +51 -0
- package/dist/target/organizationAttachmentStore.js +316 -0
- package/dist/target/publicArtifactSnapshot.d.ts +72 -0
- package/dist/target/publicArtifactSnapshot.js +184 -0
- package/dist/target/topologyActivation.d.ts +51 -0
- package/dist/target/topologyActivation.js +149 -0
- package/dist/target/topologyAttestation.d.ts +37 -0
- package/dist/target/topologyAttestation.js +300 -0
- package/dist/target/topologyAttestationErrors.d.ts +1 -0
- package/dist/target/topologyAttestationErrors.js +1 -0
- package/dist/target/worldClock.d.ts +60 -0
- package/dist/target/worldClock.js +129 -0
- package/dist/target/worldReadiness.d.ts +103 -0
- package/dist/target/worldReadiness.js +153 -0
- package/examples/README.md +45 -0
- package/examples/agent-with-subagents/AGENTS.md +3 -0
- package/examples/agent-with-subagents/Spawnfile +30 -0
- package/examples/agent-with-subagents/subagents/critic/AGENTS.md +3 -0
- package/examples/agent-with-subagents/subagents/critic/Spawnfile +15 -0
- package/examples/agent-with-subagents/subagents/researcher/AGENTS.md +3 -0
- package/examples/agent-with-subagents/subagents/researcher/Spawnfile +17 -0
- package/examples/daimon-org/Spawnfile +68 -0
- package/examples/daimon-org/TEAM.md +4 -0
- package/examples/daimon-org/agents/mapper/AGENTS.md +4 -0
- package/examples/daimon-org/agents/mapper/Spawnfile +37 -0
- package/examples/daimon-org/shared/skills/file-note/SKILL.md +9 -0
- package/examples/daimon-org/teams/review/Spawnfile +53 -0
- package/examples/daimon-org/teams/review/agents/reviewer/AGENTS.md +4 -0
- package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +37 -0
- package/examples/daimon-public-host/AGENTS.md +3 -0
- package/examples/daimon-public-host/Spawnfile +21 -0
- package/examples/distribution-org/Spawnfile +43 -0
- package/examples/distribution-org/TEAM.md +4 -0
- package/examples/distribution-org/agents/coordinator/AGENTS.md +1 -0
- package/examples/distribution-org/agents/coordinator/Spawnfile +20 -0
- package/examples/distribution-org/agents/researcher/AGENTS.md +1 -0
- package/examples/distribution-org/agents/researcher/Spawnfile +20 -0
- package/examples/jungian-daimon-org/Spawnfile +41 -0
- package/examples/jungian-daimon-org/TEAM.md +21 -0
- package/examples/jungian-daimon-org/teams/luna/Spawnfile +47 -0
- package/examples/jungian-daimon-org/teams/luna/TEAM.md +4 -0
- package/examples/jungian-daimon-org/teams/luna/agents/animus/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/luna/agents/representative/AGENTS.md +21 -0
- package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +30 -0
- package/examples/jungian-daimon-org/teams/luna/agents/shadow/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/Spawnfile +47 -0
- package/examples/jungian-daimon-org/teams/selene/TEAM.md +4 -0
- package/examples/jungian-daimon-org/teams/selene/agents/animus/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/agents/representative/AGENTS.md +19 -0
- package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +33 -0
- package/examples/jungian-daimon-org/teams/selene/agents/shadow/AGENTS.md +10 -0
- package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +30 -0
- package/examples/mixed-runtime-org/Spawnfile +71 -0
- package/examples/mixed-runtime-org/TEAM.md +8 -0
- package/examples/mixed-runtime-org/agents/analyst/AGENTS.md +8 -0
- package/examples/mixed-runtime-org/agents/analyst/Spawnfile +27 -0
- package/examples/mixed-runtime-org/agents/conductor/AGENTS.md +8 -0
- package/examples/mixed-runtime-org/agents/conductor/Spawnfile +27 -0
- package/examples/mixed-runtime-org/agents/localist/AGENTS.md +7 -0
- package/examples/mixed-runtime-org/agents/localist/Spawnfile +50 -0
- package/examples/moltnet-team-chat/Spawnfile +43 -0
- package/examples/moltnet-team-chat/TEAM.md +5 -0
- package/examples/moltnet-team-chat/agents/coordinator/AGENTS.md +9 -0
- package/examples/moltnet-team-chat/agents/coordinator/Spawnfile +26 -0
- package/examples/moltnet-team-chat/teams/analysis/Spawnfile +23 -0
- package/examples/moltnet-team-chat/teams/analysis/TEAM.md +3 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/observer/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/observer/Spawnfile +19 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/representative/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/analysis/agents/representative/Spawnfile +19 -0
- package/examples/moltnet-team-chat/teams/field/Spawnfile +41 -0
- package/examples/moltnet-team-chat/teams/field/TEAM.md +3 -0
- package/examples/moltnet-team-chat/teams/field/agents/observer/AGENTS.md +5 -0
- package/examples/moltnet-team-chat/teams/field/agents/observer/Spawnfile +26 -0
- package/examples/moltnet-team-chat/teams/field/agents/representative/AGENTS.md +11 -0
- package/examples/moltnet-team-chat/teams/field/agents/representative/Spawnfile +26 -0
- package/examples/single-agent/AGENTS.md +3 -0
- package/examples/single-agent/HEARTBEAT.md +3 -0
- package/examples/single-agent/IDENTITY.md +3 -0
- package/examples/single-agent/MEMORY.md +3 -0
- package/examples/single-agent/SOUL.md +3 -0
- package/examples/single-agent/Spawnfile +41 -0
- package/examples/single-agent/skills/web_search/SKILL.md +6 -0
- package/moltnet-releases.json +21 -0
- package/package.json +57 -14
- package/runtimes.yaml +11 -23
- package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
- package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
- /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
- /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { readFile, stat } from "node:fs/promises";
|
|
3
|
+
import { setTimeout as pause } from "node:timers/promises";
|
|
4
|
+
import { SpawnfileError } from "../../../shared/index.js";
|
|
5
|
+
import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
|
|
6
|
+
import { DAIMON_BROKER_UID, TRAINING_BROKER_TMPDIR } from "./paths.js";
|
|
7
|
+
export const DAIMON_RUNTIME_ROOT = "/opt/spawnfile/runtime-installs/daimon";
|
|
8
|
+
/** `00000000000000c1` = CHOWN|SETGID|SETUID, the launcher's bounding set after `setpriv`. */
|
|
9
|
+
export const LAUNCHER_CAPABILITY_BOUND = "00000000000000c1";
|
|
10
|
+
export const DROPPED_CAPABILITY_BOUND = "0000000000000000";
|
|
11
|
+
const setpriv = (args) => ["setpriv", ...args];
|
|
12
|
+
/**
|
|
13
|
+
* The three broker processes, in the order and with the identities production
|
|
14
|
+
* starts them: the root launcher (which alone may `setuid` to a worker uid),
|
|
15
|
+
* the broker backend as uid 2100, and the native control relay as uid 2100.
|
|
16
|
+
* Each one runs with the same bounding set the production entrypoint verifies,
|
|
17
|
+
* and the broker and relay carry their own `TMPDIR` because shared `/tmp` is
|
|
18
|
+
* closed to every process outside the organization group.
|
|
19
|
+
*/
|
|
20
|
+
export const brokerProcessPlan = () => [
|
|
21
|
+
{
|
|
22
|
+
name: "engine broker launcher", socket: DAIMON_GROK_ENGINE_BROKER.launcherSocketPath, uid: 0, capBnd: LAUNCHER_CAPABILITY_BOUND,
|
|
23
|
+
argv: setpriv(["--inh-caps=-all", "--ambient-caps=-all", "--bounding-set=-all,+chown,+setuid,+setgid", "--", DAIMON_GROK_ENGINE_BROKER.nativeExecutablePath])
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: "engine broker backend", socket: DAIMON_GROK_ENGINE_BROKER.backendSocketPath, uid: DAIMON_BROKER_UID, capBnd: DROPPED_CAPABILITY_BOUND,
|
|
27
|
+
argv: setpriv(["--clear-groups", `--reuid=${DAIMON_BROKER_UID}`, `--regid=${DAIMON_BROKER_UID}`, "--inh-caps=-all", "--ambient-caps=-all", "--bounding-set=-all",
|
|
28
|
+
"--", "env", `TMPDIR=${TRAINING_BROKER_TMPDIR}`, `${DAIMON_RUNTIME_ROOT}/bin/daimon-runtime`, "engine-broker", "serve"])
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: "engine broker control relay", socket: DAIMON_GROK_ENGINE_BROKER.controlSocketPath, uid: DAIMON_BROKER_UID, capBnd: DROPPED_CAPABILITY_BOUND,
|
|
32
|
+
argv: setpriv(["--inh-caps=-all", "--ambient-caps=-all", "--bounding-set=-all,+chown,+setuid,+setgid,+setpcap", "--", "env", `TMPDIR=${TRAINING_BROKER_TMPDIR}`,
|
|
33
|
+
DAIMON_GROK_ENGINE_BROKER.nativeExecutablePath, "--relay"])
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
const processIdentity = async (pid, procRoot) => {
|
|
37
|
+
const status = await readFile(`${procRoot}/${pid}/status`, "utf8");
|
|
38
|
+
return {
|
|
39
|
+
uid: /^Uid:\s+(\d+)/mu.exec(status)?.[1] ?? "",
|
|
40
|
+
capBnd: /^CapBnd:\s+([0-9a-f]+)/mu.exec(status)?.[1] ?? ""
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Starts all three, then proves each one reached its socket *and* its expected
|
|
45
|
+
* post-drop identity before the next starts. A broker that is alive but still
|
|
46
|
+
* root, or a relay whose socket never appeared, fails the slot here rather
|
|
47
|
+
* than at the first trial wake.
|
|
48
|
+
*/
|
|
49
|
+
export const startBrokerProcesses = async (options) => {
|
|
50
|
+
const timeoutMs = options.timeoutMs ?? 60_000, pollMs = options.pollMs ?? 100, procRoot = options.procRoot ?? "/proc";
|
|
51
|
+
const started = [];
|
|
52
|
+
const deadline = Date.now() + timeoutMs;
|
|
53
|
+
try {
|
|
54
|
+
for (const entry of brokerProcessPlan()) {
|
|
55
|
+
const child = spawn(entry.argv[0], entry.argv.slice(1), { stdio: ["ignore", "inherit", "inherit"] });
|
|
56
|
+
if (child.pid === undefined)
|
|
57
|
+
throw new SpawnfileError("runtime_error", `${entry.name} did not start`);
|
|
58
|
+
let exited = false;
|
|
59
|
+
child.once("exit", (code) => { exited = true; options.log(`${entry.name} exited with status ${code ?? "signal"}`); });
|
|
60
|
+
started.push({ name: entry.name, pid: child.pid, child, uid: entry.uid, capBnd: entry.capBnd });
|
|
61
|
+
for (;;) {
|
|
62
|
+
if (exited)
|
|
63
|
+
throw new SpawnfileError("runtime_error", `${entry.name} exited before readiness`);
|
|
64
|
+
if (Date.now() > deadline)
|
|
65
|
+
throw new SpawnfileError("runtime_error", `${entry.name} readiness timed out`);
|
|
66
|
+
const socket = await stat(entry.socket).catch(() => undefined);
|
|
67
|
+
if (socket?.isSocket()) {
|
|
68
|
+
const identity = await processIdentity(child.pid, procRoot);
|
|
69
|
+
if (identity.uid === String(entry.uid) && identity.capBnd === entry.capBnd)
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
await pause(pollMs);
|
|
73
|
+
}
|
|
74
|
+
options.log(`${entry.name} ready pid=${child.pid} uid=${entry.uid} capbnd=${entry.capBnd}`);
|
|
75
|
+
}
|
|
76
|
+
return started;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
await stopBrokerProcesses(started, options.log);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
/** Graceful stop in reverse start order: relay, backend, launcher. `SIGKILL` only after the grace window. */
|
|
84
|
+
export const stopBrokerProcesses = async (children, log, graceMs = 5_000) => {
|
|
85
|
+
for (const entry of [...children].reverse()) {
|
|
86
|
+
if (entry.child.exitCode !== null || entry.child.signalCode !== null)
|
|
87
|
+
continue;
|
|
88
|
+
entry.child.kill("SIGTERM");
|
|
89
|
+
const deadline = Date.now() + graceMs;
|
|
90
|
+
while (entry.child.exitCode === null && entry.child.signalCode === null && Date.now() < deadline)
|
|
91
|
+
await pause(25);
|
|
92
|
+
if (entry.child.exitCode === null && entry.child.signalCode === null) {
|
|
93
|
+
log(`${entry.name} did not stop gracefully; killing`);
|
|
94
|
+
entry.child.kill("SIGKILL");
|
|
95
|
+
}
|
|
96
|
+
while (entry.child.exitCode === null && entry.child.signalCode === null)
|
|
97
|
+
await pause(25);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type DaimonGrokBrokerModel, type DaimonGrokBrokerReasoningEffort } from "../../../runtime/daimon/contractManifest.js";
|
|
2
|
+
import type { DaimonGrokRegistration } from "../../containerDaimonGrokWorkerRender.js";
|
|
3
|
+
import type { TrainingBrokerDeclaration } from "./declaration.js";
|
|
4
|
+
/**
|
|
5
|
+
* The slice of Daimon's public `@noopolis/daimon/runtime` export the slot
|
|
6
|
+
* supervisor needs. Daimon stays the resolver: the slot preflight receipt binds
|
|
7
|
+
* `projection_sha256`, and a second implementation of that digest would fork
|
|
8
|
+
* the contract the moment either side changed a member.
|
|
9
|
+
*/
|
|
10
|
+
export interface DaimonProjectionModule {
|
|
11
|
+
resolveOrganizationGrokBrokerProjection(config: unknown, agentId: string, options: Record<string, unknown>): {
|
|
12
|
+
version: string;
|
|
13
|
+
profileSha256: string;
|
|
14
|
+
denyPaths: readonly string[];
|
|
15
|
+
};
|
|
16
|
+
grokBrokerProjectionSha256(projection: unknown): string;
|
|
17
|
+
GROK_ENGINE_BROKER: {
|
|
18
|
+
projectionVersion: string;
|
|
19
|
+
slotPreflightVersion: string;
|
|
20
|
+
nativeAbiVersion: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare const loadDaimonProjectionModule: (load?: () => Promise<unknown>) => Promise<DaimonProjectionModule>;
|
|
24
|
+
/**
|
|
25
|
+
* The one-agent organization runtime config the training slot's projection is
|
|
26
|
+
* resolved from.
|
|
27
|
+
*
|
|
28
|
+
* It is a projection *input*, never a runtime config Daimon hosts: the trial's
|
|
29
|
+
* real config is Paideia's. Only `agents[].id`, `workspacePath`,
|
|
30
|
+
* `runtimeHomePath`, the engine's declared model and effort, and the *absence*
|
|
31
|
+
* of peers reach `resolveOrganizationGrokBrokerProjection`, so this minimal
|
|
32
|
+
* config and Paideia's fuller one compute the same projection digest. A peer
|
|
33
|
+
* agent would change Daimon's protected set and the digest with it, which is
|
|
34
|
+
* exactly why training runs one slot.
|
|
35
|
+
*/
|
|
36
|
+
export declare const trainingOrganizationRuntimeConfig: (declaration: {
|
|
37
|
+
agentId: string;
|
|
38
|
+
model: DaimonGrokBrokerModel;
|
|
39
|
+
reasoningEffort: DaimonGrokBrokerReasoningEffort;
|
|
40
|
+
}) => Record<string, unknown>;
|
|
41
|
+
export interface TrainingGrokProjection {
|
|
42
|
+
projection: Record<string, unknown>;
|
|
43
|
+
projectionSha256: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolve the slot's public Grok broker projection through Daimon, over exactly
|
|
47
|
+
* the provisioned registration. A profile digest that differs from Daimon's own
|
|
48
|
+
* render is refused there, so the receipt can never certify a slot whose deny
|
|
49
|
+
* list drifted from the bytes provisioning wrote.
|
|
50
|
+
*/
|
|
51
|
+
export declare const resolveTrainingGrokProjection: (declaration: TrainingBrokerDeclaration, registration: DaimonGrokRegistration, daimon: DaimonProjectionModule) => Promise<TrainingGrokProjection>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { SpawnfileError } from "../../../shared/index.js";
|
|
2
|
+
import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
|
|
3
|
+
import { TRAINING_SLOT_RUNTIME_HOME, TRAINING_SLOT_STATE_ROOT, TRAINING_SLOT_WORKSPACE, TRAINING_WORKER_HOME } from "./paths.js";
|
|
4
|
+
/** Indirect specifier: Daimon is an in-image runtime peer of the training container, never a Spawnfile source dependency. */
|
|
5
|
+
const loadRuntime = async () => {
|
|
6
|
+
const packageName = "@noopolis/daimon/runtime";
|
|
7
|
+
return import(packageName);
|
|
8
|
+
};
|
|
9
|
+
export const loadDaimonProjectionModule = async (load = loadRuntime) => {
|
|
10
|
+
let daimon;
|
|
11
|
+
try {
|
|
12
|
+
daimon = await load();
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
throw new SpawnfileError("runtime_error", "The training image must install @noopolis/daimon with its public /runtime export");
|
|
16
|
+
}
|
|
17
|
+
if (typeof daimon.resolveOrganizationGrokBrokerProjection !== "function" || typeof daimon.grokBrokerProjectionSha256 !== "function"
|
|
18
|
+
|| daimon.GROK_ENGINE_BROKER?.projectionVersion !== DAIMON_GROK_ENGINE_BROKER.projectionVersion
|
|
19
|
+
|| daimon.GROK_ENGINE_BROKER.slotPreflightVersion !== DAIMON_GROK_ENGINE_BROKER.slotPreflightVersion
|
|
20
|
+
|| daimon.GROK_ENGINE_BROKER.nativeAbiVersion !== DAIMON_GROK_ENGINE_BROKER.nativeAbiVersion) {
|
|
21
|
+
throw new SpawnfileError("runtime_error", "The installed Daimon Grok broker contract differs from this compiler's vendored manifest");
|
|
22
|
+
}
|
|
23
|
+
return daimon;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* The one-agent organization runtime config the training slot's projection is
|
|
27
|
+
* resolved from.
|
|
28
|
+
*
|
|
29
|
+
* It is a projection *input*, never a runtime config Daimon hosts: the trial's
|
|
30
|
+
* real config is Paideia's. Only `agents[].id`, `workspacePath`,
|
|
31
|
+
* `runtimeHomePath`, the engine's declared model and effort, and the *absence*
|
|
32
|
+
* of peers reach `resolveOrganizationGrokBrokerProjection`, so this minimal
|
|
33
|
+
* config and Paideia's fuller one compute the same projection digest. A peer
|
|
34
|
+
* agent would change Daimon's protected set and the digest with it, which is
|
|
35
|
+
* exactly why training runs one slot.
|
|
36
|
+
*/
|
|
37
|
+
export const trainingOrganizationRuntimeConfig = (declaration) => ({
|
|
38
|
+
version: "noopolis.daimon.organization-runtime.v1",
|
|
39
|
+
host: { bindHost: "127.0.0.1", port: 19_700, controlTokenEnv: "SPAWNFILE_DAIMON_CONTROL_TOKEN" },
|
|
40
|
+
agents: [{
|
|
41
|
+
id: declaration.agentId,
|
|
42
|
+
name: declaration.agentId,
|
|
43
|
+
instructions: "training subject",
|
|
44
|
+
workspacePath: TRAINING_SLOT_WORKSPACE,
|
|
45
|
+
runtimeHomePath: TRAINING_SLOT_RUNTIME_HOME,
|
|
46
|
+
engine: { kind: "grok", model: declaration.model, reasoningEffort: declaration.reasoningEffort }
|
|
47
|
+
}]
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Resolve the slot's public Grok broker projection through Daimon, over exactly
|
|
51
|
+
* the provisioned registration. A profile digest that differs from Daimon's own
|
|
52
|
+
* render is refused there, so the receipt can never certify a slot whose deny
|
|
53
|
+
* list drifted from the bytes provisioning wrote.
|
|
54
|
+
*/
|
|
55
|
+
export const resolveTrainingGrokProjection = async (declaration, registration, daimon) => {
|
|
56
|
+
const projection = daimon.resolveOrganizationGrokBrokerProjection(trainingOrganizationRuntimeConfig(declaration), declaration.agentId, {
|
|
57
|
+
slot: registration.slot,
|
|
58
|
+
workerUid: registration.uid,
|
|
59
|
+
workerHomePath: TRAINING_WORKER_HOME,
|
|
60
|
+
architecture: declaration.architecture,
|
|
61
|
+
usageLedgerPath: registration.usageLedgerPath,
|
|
62
|
+
limits: declaration.limits,
|
|
63
|
+
// The mask that protects the wake-acceptance store is the slot state root it lives in: the store's
|
|
64
|
+
// own parent is `2000:2000 0700`, so bubblewrap could not materialize a deny target inside it as
|
|
65
|
+
// the worker uid. Every party that recomputes this projection must pass the same value.
|
|
66
|
+
acceptanceStorePath: TRAINING_SLOT_STATE_ROOT,
|
|
67
|
+
denyPaths: registration.denyPaths,
|
|
68
|
+
seccompProfileSha256: declaration.seccompProfileSha256,
|
|
69
|
+
profileSha256: registration.profileSha256
|
|
70
|
+
});
|
|
71
|
+
const denied = [...projection.denyPaths];
|
|
72
|
+
if (denied.length !== registration.denyPaths.length || denied.some((entry, index) => entry !== registration.denyPaths[index])) {
|
|
73
|
+
throw new SpawnfileError("runtime_error", "Daimon's Grok broker projection deny list differs from the provisioned sandbox profile");
|
|
74
|
+
}
|
|
75
|
+
return { projection, projectionSha256: daimon.grokBrokerProjectionSha256(projection) };
|
|
76
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { DaimonGrokRegistration } from "../../containerDaimonGrokWorkerRender.js";
|
|
2
|
+
/**
|
|
3
|
+
* Every directory the training slot owns, with the identity that must hold it.
|
|
4
|
+
*
|
|
5
|
+
* The two ledger directories are setgid to the organization group on purpose:
|
|
6
|
+
* the broker writes its rows `0640` owned by the broker group, so without
|
|
7
|
+
* `2100:2000 2750` uid 2000 — Paideia, DSPy and every judge — cannot read a
|
|
8
|
+
* single subject usage row or inference row it paid for.
|
|
9
|
+
*/
|
|
10
|
+
export declare const trainingSlotDirectories: () => readonly {
|
|
11
|
+
path: string;
|
|
12
|
+
mode: string;
|
|
13
|
+
uid: number;
|
|
14
|
+
gid: number;
|
|
15
|
+
}[];
|
|
16
|
+
/**
|
|
17
|
+
* The fixed identities the slot needs, checked rather than created.
|
|
18
|
+
*
|
|
19
|
+
* The broker-capable training container runs on a read-only root, so
|
|
20
|
+
* `/etc/passwd` and `/etc/group` cannot be written at start-up the way the
|
|
21
|
+
* production Daimon entrypoint writes them. The image bakes uid/gid 2000, 2100
|
|
22
|
+
* and the worker uid instead, and this refuses to provision a slot in an image
|
|
23
|
+
* that did not.
|
|
24
|
+
*/
|
|
25
|
+
export declare const renderTrainingIdentities: () => string[];
|
|
26
|
+
/**
|
|
27
|
+
* Root provisioning for the training container's one broker slot, as bash
|
|
28
|
+
* lines run by the image's own root entrypoint and replayed verbatim by the
|
|
29
|
+
* slot supervisor on every recycle.
|
|
30
|
+
*
|
|
31
|
+
* Everything below the slot skeleton is Daimon's audited production
|
|
32
|
+
* provisioning: the same credential bootstrap and journal recovery, the same
|
|
33
|
+
* `registrations.bin`, the same attested worker `GROK_HOME` layout, the same
|
|
34
|
+
* P1b private worker temp, closed shared temp and setgid spill directory, and
|
|
35
|
+
* the same `service.json` — here v2 with the per-slot usage ledger, the
|
|
36
|
+
* per-slot tmpfs turn store and the evaluator `inferenceLedgerPath`.
|
|
37
|
+
*/
|
|
38
|
+
export declare const renderTrainingBrokerProvisioning: (registration: DaimonGrokRegistration) => string[];
|
|
39
|
+
/**
|
|
40
|
+
* The sealed-inputs seal, asserted and then attacked before any slot is used.
|
|
41
|
+
*
|
|
42
|
+
* The declared datasets are bind-mounted at `/run/training/inputs/<id>`, so
|
|
43
|
+
* `/run/training/inputs` is their common ancestor and the only inode in the
|
|
44
|
+
* chain the container controls: it lives on the read-only image root, the image
|
|
45
|
+
* bakes it `0:<organization gid> 0750`, and nothing in the container can widen
|
|
46
|
+
* it afterwards. The worker uid is in neither its owner nor its group class, so
|
|
47
|
+
* it loses *search* permission on the directory every dataset read must
|
|
48
|
+
* traverse.
|
|
49
|
+
*
|
|
50
|
+
* Four attacker routes, not a cooperating tool's read: a direct
|
|
51
|
+
* read/search/list; a user + mount namespace of the worker's own with the
|
|
52
|
+
* bubblewrap mask and its parent lazily unmounted; a fresh `mount --bind` of
|
|
53
|
+
* `/run/training` made inside that namespace; and, per dataset, a `mount --bind`
|
|
54
|
+
* of the dataset's *own* mount, which carries no mask and — unlike its parent —
|
|
55
|
+
* is not refused for locked children. A live control container left at Docker's
|
|
56
|
+
* own `0755 root:root` hands the held-out answer key to uid 2200 through routes
|
|
57
|
+
* one, two and four (`.runtime/sealed-inputs-dac/EVIDENCE.md`).
|
|
58
|
+
*
|
|
59
|
+
* Every route reports one verdict, and the verdicts are deliberately not
|
|
60
|
+
* interchangeable:
|
|
61
|
+
*
|
|
62
|
+
* - `reachable` — the bytes were read. Refuse.
|
|
63
|
+
* - `denied at-read` — the route ran and the kernel's permission check refused
|
|
64
|
+
* the open or the list. This is the DAC seal doing the work.
|
|
65
|
+
* - `denied at-mount` — the mount the route needs was refused although the
|
|
66
|
+
* syscall is available.
|
|
67
|
+
* - `unavailable seccomp` / `unavailable kernel` — the worker uid cannot open
|
|
68
|
+
* the namespace the route needs at all, so the route provably cannot happen.
|
|
69
|
+
* That is a *stronger* denial than DAC, and naming which layer refused is
|
|
70
|
+
* the point: `EPERM` from a seccomp filter and `EPERM` from a kernel or LSM
|
|
71
|
+
* policy are indistinguishable by errno, so the mechanism is derived from
|
|
72
|
+
* the pinned profile Spawnfile ships and the declaration's digest binds
|
|
73
|
+
* (`seccompRoutes.ts`), never guessed.
|
|
74
|
+
* - anything else — no verdict. Refuse. "Provably cannot happen" and "could
|
|
75
|
+
* not tell" must never collapse into one pass.
|
|
76
|
+
*
|
|
77
|
+
* The probe's workspace is the worker's **private** tmp, never `/tmp`: the
|
|
78
|
+
* shared temps are provisioned `root:<organization gid> 1774` so a worker lists
|
|
79
|
+
* names only, and probing from there is what made the first live run refuse
|
|
80
|
+
* every trial on `namespace-rebind reached no verdict` — the `mkdir` failed, not
|
|
81
|
+
* the seal. The private tmp is also the workspace the subject itself has.
|
|
82
|
+
*/
|
|
83
|
+
export declare const renderTrainingSealedInputsAssertions: (workerUid?: number, privateTmp?: string, mechanism?: "seccomp" | "kernel") => string[];
|
|
84
|
+
/** Where the broker's own `service.json` lands, so the supervisor can prove the slot it restarted is the slot it provisioned. */
|
|
85
|
+
export declare const TRAINING_SERVICE_CONFIG_PATH: "/etc/daimon-engine-broker/service.json";
|
|
86
|
+
export declare const TRAINING_REGISTRATION_PATH: "/etc/daimon-engine-broker/registrations.bin";
|
|
87
|
+
export declare const TRAINING_BROKER_CONTROL_ROOT: string;
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { DAIMON_GROK_SECCOMP_PROFILE_SHA256 } from "../../../shared/daimonGrokSeccompProfile.js";
|
|
3
|
+
import { DAIMON_GROK_ENGINE_BROKER, DAIMON_GROK_TURN_USAGE_LEDGER } from "../../../runtime/daimon/contractManifest.js";
|
|
4
|
+
import { DAIMON_WAKE_FUSE_DIRECTORY } from "../../../runtime/daimon/config.js";
|
|
5
|
+
import { renderDaimonBrokerProvisioningProgram } from "../../containerDaimonBrokerRender.js";
|
|
6
|
+
import { renderDaimonGrokHostPreflight } from "../../containerDaimonGrokWorkerProvisioning.js";
|
|
7
|
+
import { DAIMON_BROKER_UID, DAIMON_ORGANIZATION_UID, TRAINING_GRANT_HOME_ROOT, TRAINING_INFERENCE_DIRECTORY, TRAINING_INFERENCE_LEDGER, TRAINING_OPTIONAL_DENY_DIRECTORIES, TRAINING_PAIDEIA_ROOT, TRAINING_SLOT_ACCEPTANCE_STORE, TRAINING_SEALED_INPUTS_ATTESTATION, TRAINING_SEALED_INPUTS_IDENTITY, TRAINING_SEALED_INPUTS_ROOT, TRAINING_SLOT_ROOT, TRAINING_SLOT_STATE_ROOT, TRAINING_SLOT_TURN_STORE, TRAINING_SLOT_USAGE_DIRECTORY, TRAINING_SLOT_USAGE_LEDGER, TRAINING_SUPERVISOR_DIRECTORY, TRAINING_BROKER_TMPDIR, TRAINING_SLOT_WORKSPACE, TRAINING_WORKER_ROOT, TRAINING_WORKER_UID } from "./paths.js";
|
|
8
|
+
import { trainingNamespaceDenialMechanism } from "./seccompRoutes.js";
|
|
9
|
+
const quote = (value) => `'${value.replace(/'/g, `'"'"'`)}'`;
|
|
10
|
+
/**
|
|
11
|
+
* Root only ever chmods an inode it currently owns: the container's capability
|
|
12
|
+
* set grants `CAP_CHOWN` but not `CAP_FOWNER` (P0 §2), so `install -d -o u -g g
|
|
13
|
+
* -m m` — which chowns before it chmods — fails with `EPERM` for every
|
|
14
|
+
* non-root owner. Reclaim, set the mode, then hand over.
|
|
15
|
+
*/
|
|
16
|
+
const PROVISION_DIRECTORY_HELPER = [
|
|
17
|
+
"provision_dir() {",
|
|
18
|
+
" target=$1; mode=$2; owner=$3; group=$4",
|
|
19
|
+
" test -d \"$target\" && test ! -L \"$target\"",
|
|
20
|
+
" chown 0:0 \"$target\"; chmod \"$mode\" \"$target\"; chown \"$owner:$group\" \"$target\"",
|
|
21
|
+
"}"
|
|
22
|
+
];
|
|
23
|
+
/**
|
|
24
|
+
* Every directory the training slot owns, with the identity that must hold it.
|
|
25
|
+
*
|
|
26
|
+
* The two ledger directories are setgid to the organization group on purpose:
|
|
27
|
+
* the broker writes its rows `0640` owned by the broker group, so without
|
|
28
|
+
* `2100:2000 2750` uid 2000 — Paideia, DSPy and every judge — cannot read a
|
|
29
|
+
* single subject usage row or inference row it paid for.
|
|
30
|
+
*/
|
|
31
|
+
export const trainingSlotDirectories = () => [
|
|
32
|
+
// `/run/training` itself is deliberately absent: it is a mount-point parent on the read-only
|
|
33
|
+
// image root, and every writable child below it is its own tmpfs or bind.
|
|
34
|
+
{ path: TRAINING_SLOT_ROOT, mode: "0755", uid: 0, gid: 0 },
|
|
35
|
+
{ path: TRAINING_PAIDEIA_ROOT, mode: "0750", uid: DAIMON_ORGANIZATION_UID, gid: DAIMON_ORGANIZATION_UID },
|
|
36
|
+
{ path: "/home/training", mode: "0700", uid: DAIMON_ORGANIZATION_UID, gid: DAIMON_ORGANIZATION_UID },
|
|
37
|
+
{ path: "/work", mode: "0700", uid: DAIMON_ORGANIZATION_UID, gid: DAIMON_ORGANIZATION_UID },
|
|
38
|
+
{ path: TRAINING_SLOT_WORKSPACE, mode: "0750", uid: DAIMON_ORGANIZATION_UID, gid: TRAINING_WORKER_UID },
|
|
39
|
+
// The agent runtime home is deliberately absent: the shared broker provisioning creates it root-owned,
|
|
40
|
+
// fills its setgid `tool-output/`, and only then narrows it to `2000:<worker> 0710`. Handing it over here
|
|
41
|
+
// would leave root — which holds no `CAP_DAC_OVERRIDE` — unable to create the spill directory inside it.
|
|
42
|
+
{ path: TRAINING_SLOT_STATE_ROOT, mode: "0700", uid: DAIMON_ORGANIZATION_UID, gid: DAIMON_ORGANIZATION_UID },
|
|
43
|
+
{ path: TRAINING_SLOT_ACCEPTANCE_STORE, mode: "0700", uid: DAIMON_ORGANIZATION_UID, gid: DAIMON_ORGANIZATION_UID },
|
|
44
|
+
{ path: TRAINING_SLOT_TURN_STORE, mode: "0700", uid: DAIMON_BROKER_UID, gid: DAIMON_BROKER_UID },
|
|
45
|
+
{ path: TRAINING_SLOT_USAGE_DIRECTORY, mode: "2750", uid: DAIMON_BROKER_UID, gid: DAIMON_ORGANIZATION_UID },
|
|
46
|
+
{ path: TRAINING_INFERENCE_DIRECTORY, mode: "2750", uid: DAIMON_BROKER_UID, gid: DAIMON_ORGANIZATION_UID },
|
|
47
|
+
{ path: TRAINING_GRANT_HOME_ROOT, mode: "0700", uid: DAIMON_ORGANIZATION_UID, gid: DAIMON_ORGANIZATION_UID },
|
|
48
|
+
// Traverse only: the supervisor socket inside it is the uid gate, and a directory nobody but root may
|
|
49
|
+
// write is what keeps that socket from being replaced by a laxer one.
|
|
50
|
+
{ path: TRAINING_SUPERVISOR_DIRECTORY, mode: "0711", uid: 0, gid: 0 },
|
|
51
|
+
// The broker and its relay run as uid 2100, outside the organization group, and shared `/tmp` is closed
|
|
52
|
+
// to them; this is their own temp, outside every wipe target (see `TRAINING_BROKER_TMPDIR`).
|
|
53
|
+
{ path: TRAINING_BROKER_TMPDIR, mode: "0700", uid: DAIMON_BROKER_UID, gid: DAIMON_BROKER_UID },
|
|
54
|
+
{ path: TRAINING_WORKER_ROOT, mode: "0711", uid: 0, gid: 0 },
|
|
55
|
+
// Denied and unused by training, which meters per slot — but a world-readable directory would make its
|
|
56
|
+
// worker-uid canary meaningless, so both get the modes the production organization gives them.
|
|
57
|
+
{ path: DAIMON_GROK_TURN_USAGE_LEDGER.directoryPath, mode: "0750", uid: DAIMON_BROKER_UID, gid: DAIMON_ORGANIZATION_UID },
|
|
58
|
+
{ path: DAIMON_WAKE_FUSE_DIRECTORY, mode: "0700", uid: DAIMON_ORGANIZATION_UID, gid: DAIMON_ORGANIZATION_UID }
|
|
59
|
+
];
|
|
60
|
+
/**
|
|
61
|
+
* The fixed identities the slot needs, checked rather than created.
|
|
62
|
+
*
|
|
63
|
+
* The broker-capable training container runs on a read-only root, so
|
|
64
|
+
* `/etc/passwd` and `/etc/group` cannot be written at start-up the way the
|
|
65
|
+
* production Daimon entrypoint writes them. The image bakes uid/gid 2000, 2100
|
|
66
|
+
* and the worker uid instead, and this refuses to provision a slot in an image
|
|
67
|
+
* that did not.
|
|
68
|
+
*/
|
|
69
|
+
export const renderTrainingIdentities = () => [
|
|
70
|
+
`for fixed_uid in ${DAIMON_ORGANIZATION_UID} ${DAIMON_BROKER_UID} ${TRAINING_WORKER_UID}; do`,
|
|
71
|
+
' getent passwd "$fixed_uid" >/dev/null && getent group "$fixed_uid" >/dev/null || { echo "the training image must bake uid/gid $fixed_uid; the container root is read-only" >&2; exit 1; }',
|
|
72
|
+
"done"
|
|
73
|
+
];
|
|
74
|
+
/**
|
|
75
|
+
* Root provisioning for the training container's one broker slot, as bash
|
|
76
|
+
* lines run by the image's own root entrypoint and replayed verbatim by the
|
|
77
|
+
* slot supervisor on every recycle.
|
|
78
|
+
*
|
|
79
|
+
* Everything below the slot skeleton is Daimon's audited production
|
|
80
|
+
* provisioning: the same credential bootstrap and journal recovery, the same
|
|
81
|
+
* `registrations.bin`, the same attested worker `GROK_HOME` layout, the same
|
|
82
|
+
* P1b private worker temp, closed shared temp and setgid spill directory, and
|
|
83
|
+
* the same `service.json` — here v2 with the per-slot usage ledger, the
|
|
84
|
+
* per-slot tmpfs turn store and the evaluator `inferenceLedgerPath`.
|
|
85
|
+
*/
|
|
86
|
+
export const renderTrainingBrokerProvisioning = (registration) => [
|
|
87
|
+
...PROVISION_DIRECTORY_HELPER,
|
|
88
|
+
// Two passes, because root here holds neither `CAP_DAC_OVERRIDE` nor `CAP_FOWNER`: create every
|
|
89
|
+
// directory while they are all still root-owned and traversable, then set ownership and mode from the
|
|
90
|
+
// deepest path up, so tightening a parent to `0700` never strands a child that still has to be created.
|
|
91
|
+
...trainingSlotDirectories().map((entry) => `mkdir -p ${quote(entry.path)}`),
|
|
92
|
+
// Every deny entry needs an inode to mask; a bind the host did not supply is created root-owned and unreadable.
|
|
93
|
+
...TRAINING_OPTIONAL_DENY_DIRECTORIES.map((target) => `if [ ! -e ${quote(target)} ]; then mkdir -p ${quote(target)}; provision_dir ${quote(target)} 0700 0 0; fi`),
|
|
94
|
+
// Both ledgers exist before their directories are handed to the broker: the broker appends rows `0640` in
|
|
95
|
+
// its own group, and the setgid directory below is what lets uid 2000 read a row it paid for.
|
|
96
|
+
...[TRAINING_SLOT_USAGE_LEDGER, TRAINING_INFERENCE_LEDGER].map((ledger) => `if [ ! -e ${quote(ledger)} ]; then : > ${quote(ledger)}; fi; chown 0:0 ${quote(ledger)}; chmod 0640 ${quote(ledger)}; chown ${DAIMON_BROKER_UID}:${DAIMON_ORGANIZATION_UID} ${quote(ledger)}`),
|
|
97
|
+
...[...trainingSlotDirectories()].sort((left, right) => right.path.split("/").length - left.path.split("/").length)
|
|
98
|
+
.map((entry) => `provision_dir ${quote(entry.path)} ${entry.mode} ${entry.uid} ${entry.gid}`),
|
|
99
|
+
...renderDaimonGrokHostPreflight(),
|
|
100
|
+
...renderDaimonBrokerProvisioningProgram([registration], [], {
|
|
101
|
+
turnStore: TRAINING_SLOT_TURN_STORE,
|
|
102
|
+
inferenceLedgerPath: TRAINING_INFERENCE_LEDGER
|
|
103
|
+
}, "clear", TRAINING_OPTIONAL_DENY_DIRECTORIES, TRAINING_BROKER_TMPDIR),
|
|
104
|
+
// The shared program leaves the broker's `/etc` root `0555 root:root`, which every uid can list. Training
|
|
105
|
+
// denies that directory to its worker, and a canary can only observe a denial the kernel actually enforces.
|
|
106
|
+
`chmod 0550 /etc/daimon-engine-broker; chown 0:${DAIMON_BROKER_UID} /etc/daimon-engine-broker`,
|
|
107
|
+
`test "$(stat -c '%u:%g %a' ${quote(TRAINING_SLOT_USAGE_DIRECTORY)})" = "${DAIMON_BROKER_UID}:${DAIMON_ORGANIZATION_UID} 2750"`,
|
|
108
|
+
`test "$(stat -c '%u:%g %a' ${quote(TRAINING_INFERENCE_DIRECTORY)})" = "${DAIMON_BROKER_UID}:${DAIMON_ORGANIZATION_UID} 2750"`,
|
|
109
|
+
`test "$(stat -c '%u:%g %a' ${quote(TRAINING_GRANT_HOME_ROOT)})" = "${DAIMON_ORGANIZATION_UID}:${DAIMON_ORGANIZATION_UID} 700"`,
|
|
110
|
+
// The judge grant home root is the evaluator's alone: no worker uid may even traverse it.
|
|
111
|
+
`setpriv --clear-groups --reuid ${TRAINING_WORKER_UID} --regid ${TRAINING_WORKER_UID} --inh-caps=-all --ambient-caps=-all --bounding-set=-all -- bash -ceu '! test -r ${quote(TRAINING_GRANT_HOME_ROOT)}'`,
|
|
112
|
+
`setpriv --clear-groups --reuid ${DAIMON_ORGANIZATION_UID} --regid ${DAIMON_ORGANIZATION_UID} --inh-caps=-all --ambient-caps=-all --bounding-set=-all -- bash -ceu 'test -r ${quote(TRAINING_SLOT_USAGE_LEDGER)} && test -r ${quote(TRAINING_INFERENCE_LEDGER)}'`,
|
|
113
|
+
// The sealed train and test datasets: the one boundary here that must hold against the subject's own
|
|
114
|
+
// namespace, not only against an honest tool. Last, so it runs with every mode already final.
|
|
115
|
+
...renderTrainingSealedInputsAssertions(registration.uid, registration.privateTmp)
|
|
116
|
+
];
|
|
117
|
+
/**
|
|
118
|
+
* The sealed-inputs seal, asserted and then attacked before any slot is used.
|
|
119
|
+
*
|
|
120
|
+
* The declared datasets are bind-mounted at `/run/training/inputs/<id>`, so
|
|
121
|
+
* `/run/training/inputs` is their common ancestor and the only inode in the
|
|
122
|
+
* chain the container controls: it lives on the read-only image root, the image
|
|
123
|
+
* bakes it `0:<organization gid> 0750`, and nothing in the container can widen
|
|
124
|
+
* it afterwards. The worker uid is in neither its owner nor its group class, so
|
|
125
|
+
* it loses *search* permission on the directory every dataset read must
|
|
126
|
+
* traverse.
|
|
127
|
+
*
|
|
128
|
+
* Four attacker routes, not a cooperating tool's read: a direct
|
|
129
|
+
* read/search/list; a user + mount namespace of the worker's own with the
|
|
130
|
+
* bubblewrap mask and its parent lazily unmounted; a fresh `mount --bind` of
|
|
131
|
+
* `/run/training` made inside that namespace; and, per dataset, a `mount --bind`
|
|
132
|
+
* of the dataset's *own* mount, which carries no mask and — unlike its parent —
|
|
133
|
+
* is not refused for locked children. A live control container left at Docker's
|
|
134
|
+
* own `0755 root:root` hands the held-out answer key to uid 2200 through routes
|
|
135
|
+
* one, two and four (`.runtime/sealed-inputs-dac/EVIDENCE.md`).
|
|
136
|
+
*
|
|
137
|
+
* Every route reports one verdict, and the verdicts are deliberately not
|
|
138
|
+
* interchangeable:
|
|
139
|
+
*
|
|
140
|
+
* - `reachable` — the bytes were read. Refuse.
|
|
141
|
+
* - `denied at-read` — the route ran and the kernel's permission check refused
|
|
142
|
+
* the open or the list. This is the DAC seal doing the work.
|
|
143
|
+
* - `denied at-mount` — the mount the route needs was refused although the
|
|
144
|
+
* syscall is available.
|
|
145
|
+
* - `unavailable seccomp` / `unavailable kernel` — the worker uid cannot open
|
|
146
|
+
* the namespace the route needs at all, so the route provably cannot happen.
|
|
147
|
+
* That is a *stronger* denial than DAC, and naming which layer refused is
|
|
148
|
+
* the point: `EPERM` from a seccomp filter and `EPERM` from a kernel or LSM
|
|
149
|
+
* policy are indistinguishable by errno, so the mechanism is derived from
|
|
150
|
+
* the pinned profile Spawnfile ships and the declaration's digest binds
|
|
151
|
+
* (`seccompRoutes.ts`), never guessed.
|
|
152
|
+
* - anything else — no verdict. Refuse. "Provably cannot happen" and "could
|
|
153
|
+
* not tell" must never collapse into one pass.
|
|
154
|
+
*
|
|
155
|
+
* The probe's workspace is the worker's **private** tmp, never `/tmp`: the
|
|
156
|
+
* shared temps are provisioned `root:<organization gid> 1774` so a worker lists
|
|
157
|
+
* names only, and probing from there is what made the first live run refuse
|
|
158
|
+
* every trial on `namespace-rebind reached no verdict` — the `mkdir` failed, not
|
|
159
|
+
* the seal. The private tmp is also the workspace the subject itself has.
|
|
160
|
+
*/
|
|
161
|
+
export const renderTrainingSealedInputsAssertions = (workerUid = TRAINING_WORKER_UID, privateTmp = path.posix.join(TRAINING_WORKER_ROOT, String(TRAINING_WORKER_UID), "tmp"), mechanism = trainingNamespaceDenialMechanism()) => [
|
|
162
|
+
// Diagnostics go to a file rather than into the verdict: a route's stderr is util-linux prose that
|
|
163
|
+
// would turn every real verdict into "unknown", but a no-verdict refusal with no diagnostic is what
|
|
164
|
+
// made the first live failure unreadable, so the unknown branch prints it back.
|
|
165
|
+
`seal_diagnostic=${quote(`${TRAINING_SLOT_ROOT}/seal-probe.err`)}`,
|
|
166
|
+
`seal_worker() { setpriv --clear-groups --reuid ${workerUid} --regid ${workerUid} --inh-caps=-all --ambient-caps=-all --bounding-set=-all -- /bin/sh -c "$1" 2>"$seal_diagnostic"; }`,
|
|
167
|
+
"seal_rows=''",
|
|
168
|
+
'seal_record() { if [ -n "$seal_rows" ]; then seal_rows="$seal_rows,"; fi; seal_rows="$seal_rows{\\"route\\":\\"$1\\",\\"verdict\\":\\"$2\\"}"; }',
|
|
169
|
+
"seal_route() {",
|
|
170
|
+
' case "$2" in',
|
|
171
|
+
` reachable) echo "the sealed inputs root ${TRAINING_SEALED_INPUTS_ROOT} is REACHABLE by uid ${workerUid} via $1" >&2; exit 1 ;;`,
|
|
172
|
+
' "denied at-read"|"denied at-mount") echo "sealed inputs route $1: $2"; seal_record "$1" "$2" ;;',
|
|
173
|
+
' "unavailable seccomp"|"unavailable kernel") echo "sealed inputs route $1: $2 — the worker uid cannot open the namespace this route needs, so it provably cannot happen"; seal_record "$1" "$2" ;;',
|
|
174
|
+
' *) echo "sealed inputs route $1 reached no verdict, so the denial is unproven: ${2:-no stdout} [stderr: $(cat "$seal_diagnostic" 2>/dev/null | tr "\\n" " " | cut -c1-400)]" >&2; exit 1 ;;',
|
|
175
|
+
" esac",
|
|
176
|
+
"}",
|
|
177
|
+
// One availability determination for every namespace route, so a filtered syscall is reported as the
|
|
178
|
+
// verdict it is instead of surfacing as a route that mysteriously produced nothing.
|
|
179
|
+
"seal_namespace=available",
|
|
180
|
+
`if ! seal_worker 'unshare --user --map-root-user --mount true' >/dev/null 2>&1; then seal_namespace='unavailable ${mechanism}'; fi`,
|
|
181
|
+
'seal_ns_route() { if [ "$seal_namespace" != available ]; then seal_route "$1" "$seal_namespace"; else seal_route "$1" "$(seal_worker "$2")"; fi; }',
|
|
182
|
+
// Asserted, never set: the root filesystem is read-only, so an image that did not bake this mode
|
|
183
|
+
// cannot be corrected here — and that is the point. Refuse instead.
|
|
184
|
+
`test ! -L ${quote(TRAINING_SEALED_INPUTS_ROOT)} && test -d ${quote(TRAINING_SEALED_INPUTS_ROOT)}`,
|
|
185
|
+
`if [ "$(stat -c '%u:%g %a' ${quote(TRAINING_SEALED_INPUTS_ROOT)})" != "${TRAINING_SEALED_INPUTS_IDENTITY.uid}:${TRAINING_SEALED_INPUTS_IDENTITY.gid} ${TRAINING_SEALED_INPUTS_IDENTITY.mode}" ]; then`,
|
|
186
|
+
` echo "the training image must bake ${TRAINING_SEALED_INPUTS_ROOT} as ${TRAINING_SEALED_INPUTS_IDENTITY.uid}:${TRAINING_SEALED_INPUTS_IDENTITY.gid} ${TRAINING_SEALED_INPUTS_IDENTITY.mode} on its read-only root; the sealed datasets are unprotected otherwise" >&2; exit 1`,
|
|
187
|
+
"fi",
|
|
188
|
+
`seal_route direct-read "$(seal_worker 'if ls -1 ${TRAINING_SEALED_INPUTS_ROOT} >/dev/null 2>&1 || test -r ${TRAINING_SEALED_INPUTS_ROOT} || test -x ${TRAINING_SEALED_INPUTS_ROOT}; then echo reachable; else echo denied at-read; fi')"`,
|
|
189
|
+
`seal_ns_route namespace-unmount "unshare --user --map-root-user --mount -- /bin/sh -c 'umount -l ${TRAINING_SEALED_INPUTS_ROOT} >/dev/null 2>&1; umount -l /run/training >/dev/null 2>&1; if ls -1 ${TRAINING_SEALED_INPUTS_ROOT} >/dev/null 2>&1; then echo reachable; else echo denied at-read; fi; exit 0'"`,
|
|
190
|
+
`seal_ns_route namespace-rebind-parent "unshare --user --map-root-user --mount -- /bin/sh -c 'mkdir -p ${privateTmp}/seal-parent 2>/dev/null || { echo unknown private-tmp-unwritable; exit 0; }; if mount --bind /run/training ${privateTmp}/seal-parent 2>/dev/null; then ls -1 ${privateTmp}/seal-parent/inputs >/dev/null 2>&1 && echo reachable || echo denied at-read; else echo denied at-mount; fi; exit 0'"`,
|
|
191
|
+
// Per dataset, because the strongest route is specific. Root enumerates the children; the worker may not.
|
|
192
|
+
`for sealed_child in ${TRAINING_SEALED_INPUTS_ROOT}/*; do`,
|
|
193
|
+
' test -e "$sealed_child" || continue',
|
|
194
|
+
` seal_route "direct-read $sealed_child" "$(seal_worker "if ls -1 '$sealed_child' >/dev/null 2>&1 || cat '$sealed_child'/* >/dev/null 2>&1; then echo reachable; else echo denied at-read; fi")"`,
|
|
195
|
+
` seal_ns_route "namespace-rebind $sealed_child" "unshare --user --map-root-user --mount -- /bin/sh -c 'mkdir -p ${privateTmp}/seal-child 2>/dev/null || { echo unknown private-tmp-unwritable; exit 0; }; if mount --bind \\"$sealed_child\\" ${privateTmp}/seal-child 2>/dev/null; then ls -1 ${privateTmp}/seal-child >/dev/null 2>&1 && echo reachable || echo denied at-read; else echo denied at-mount; fi; exit 0'"`,
|
|
196
|
+
"done",
|
|
197
|
+
// A Spawnfile-owned attestation beside the slot receipt, readable by the organization uid. The
|
|
198
|
+
// cross-repo `noopolis.daimon.grok-slot-preflight.v2` canary shape is deliberately untouched — its
|
|
199
|
+
// schema lives in Daimon and no consumer here can validate an added member — so the per-route
|
|
200
|
+
// mechanism is recorded here rather than implied by a bare `result: "denied"` there.
|
|
201
|
+
`seal_attestation=${quote(TRAINING_SEALED_INPUTS_ATTESTATION)}`,
|
|
202
|
+
`printf '{"version":"spawnfile.training-sealed-inputs.v1","root":"%s","worker_uid":%s,"identity":"%s","pinned_seccomp_profile_sha256":"%s","namespace_routes":"%s","routes":[%s]}\\n' `
|
|
203
|
+
+ `${quote(TRAINING_SEALED_INPUTS_ROOT)} ${workerUid} `
|
|
204
|
+
+ `"$(stat -c '%u:%g %a' ${quote(TRAINING_SEALED_INPUTS_ROOT)})" ${quote(DAIMON_GROK_SECCOMP_PROFILE_SHA256)} `
|
|
205
|
+
+ '"$seal_namespace" "$seal_rows" > "$seal_attestation.tmp"',
|
|
206
|
+
'chown 0:0 "$seal_attestation.tmp"; chmod 0640 "$seal_attestation.tmp"; chown 0:' + String(DAIMON_ORGANIZATION_UID) + ' "$seal_attestation.tmp"',
|
|
207
|
+
'mv "$seal_attestation.tmp" "$seal_attestation"',
|
|
208
|
+
'echo "sealed inputs attestation written to $seal_attestation"'
|
|
209
|
+
];
|
|
210
|
+
/** Where the broker's own `service.json` lands, so the supervisor can prove the slot it restarted is the slot it provisioned. */
|
|
211
|
+
export const TRAINING_SERVICE_CONFIG_PATH = DAIMON_GROK_ENGINE_BROKER.serviceConfigPath;
|
|
212
|
+
export const TRAINING_REGISTRATION_PATH = DAIMON_GROK_ENGINE_BROKER.registrationPath;
|
|
213
|
+
export const TRAINING_BROKER_CONTROL_ROOT = path.posix.dirname(DAIMON_GROK_ENGINE_BROKER.controlSocketPath);
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** Filesystems that silently ignore `chown`/`chmod`, so a worker-uid probe over them proves nothing. */
|
|
2
|
+
export declare const UNENFORCED_OWNERSHIP_FILESYSTEMS: readonly ["virtiofs", "9p", "nfs", "nfs4", "cifs", "smb3", "vboxsf", "grpcfuse"];
|
|
3
|
+
/**
|
|
4
|
+
* The filesystem type backing `target`, from the longest mount point that is a
|
|
5
|
+
* prefix of it. `/proc/self/mountinfo` octal-escapes space, tab, newline and
|
|
6
|
+
* backslash in the mount point field, exactly as the durable-mount guard
|
|
7
|
+
* already handles elsewhere in this compiler.
|
|
8
|
+
*/
|
|
9
|
+
export declare const resolveBackingFilesystem: (target: string, mountinfo: string) => string;
|
|
10
|
+
export interface TrainingCanaryProbe {
|
|
11
|
+
/**
|
|
12
|
+
* Runs one worker-uid attempt and resolves true when it was denied.
|
|
13
|
+
*
|
|
14
|
+
* `read` is an `open()` for reading. `enter` additionally requires that the
|
|
15
|
+
* worker uid cannot *search* the directory, which is the property a sealed
|
|
16
|
+
* root actually needs: its protection is that every dataset read has to
|
|
17
|
+
* traverse it, not that the directory listing itself is unreadable.
|
|
18
|
+
*/
|
|
19
|
+
(target: string, depth: "read" | "enter"): Promise<boolean>;
|
|
20
|
+
}
|
|
21
|
+
export interface TrainingCanaryOptions {
|
|
22
|
+
denyPaths: readonly string[];
|
|
23
|
+
probe: TrainingCanaryProbe;
|
|
24
|
+
mountinfo: string;
|
|
25
|
+
/** Deny entries the launch bound from the host. Diagnostics only: the backing filesystem decides, not this list. */
|
|
26
|
+
hostBindPaths: readonly string[];
|
|
27
|
+
/** Deny entries no policy may waive; each one must be observed unenterable by the worker uid. */
|
|
28
|
+
sealedPaths: readonly string[];
|
|
29
|
+
unenforcedBindPolicy: "refuse" | "profile-only";
|
|
30
|
+
log(line: string): void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* One denied canary per deny path, or a refusal naming the first path whose
|
|
34
|
+
* denial this container cannot prove.
|
|
35
|
+
*
|
|
36
|
+
* Three cases, in decreasing strength:
|
|
37
|
+
*
|
|
38
|
+
* - A **sealed** path (the datasets' root) must sit on a filesystem that
|
|
39
|
+
* enforces unix ownership and must be observed *unenterable* by the worker
|
|
40
|
+
* uid. `unenforcedBindPolicy` does not reach it: the sandbox profile alone
|
|
41
|
+
* is a boundary the worker can lift from inside a namespace of its own, and
|
|
42
|
+
* the held-out test set is the one thing that cannot rest on it.
|
|
43
|
+
* - Any other path on an ownership-enforcing filesystem — a host bind over
|
|
44
|
+
* ext4/xfs/btrfs/overlay included — gets a real worker-uid read probe. This
|
|
45
|
+
* is what makes the documented `refuse` default reachable: a host bind is
|
|
46
|
+
* only unprovable where the filesystem says so.
|
|
47
|
+
* - A path on a filesystem that ignores ownership (virtiofs and grpcfuse under
|
|
48
|
+
* Docker Desktop and Colima, 9p, nfs, cifs, fuse) cannot be probed at all.
|
|
49
|
+
* `refuse` — the default — fails the recycle and writes no receipt;
|
|
50
|
+
* `profile-only` accepts the attested deny entry as that path's only
|
|
51
|
+
* boundary and names every such path in the supervisor log.
|
|
52
|
+
*/
|
|
53
|
+
export declare const resolveTrainingCanaries: (options: TrainingCanaryOptions) => Promise<{
|
|
54
|
+
path: string;
|
|
55
|
+
method: "sandboxed-read";
|
|
56
|
+
result: "denied";
|
|
57
|
+
}[]>;
|
|
58
|
+
export interface TrainingSlotReceiptInput {
|
|
59
|
+
slot: number;
|
|
60
|
+
workerUid: number;
|
|
61
|
+
generation: number;
|
|
62
|
+
nonce: string;
|
|
63
|
+
projectionSha256: string;
|
|
64
|
+
sandboxProfileSha256: string;
|
|
65
|
+
seccompProfileSha256: string;
|
|
66
|
+
grokExecutableSha256: string;
|
|
67
|
+
canaries: readonly {
|
|
68
|
+
path: string;
|
|
69
|
+
method: "sandboxed-read";
|
|
70
|
+
result: "denied";
|
|
71
|
+
}[];
|
|
72
|
+
createdAt: Date;
|
|
73
|
+
}
|
|
74
|
+
/** `noopolis.daimon.grok-slot-preflight.v2`, in the exact member order Daimon's strict schema accepts. */
|
|
75
|
+
export declare const buildTrainingSlotReceipt: (input: TrainingSlotReceiptInput) => Record<string, unknown>;
|
|
76
|
+
/** sha256 of the pinned Grok executable the slot's workers exec, refused unless it is a manifest-pinned 1.0.34 build. */
|
|
77
|
+
export declare const readGrokExecutableSha256: (executable?: "/usr/local/bin/grok") => string;
|