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,110 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { SpawnfileError } from "../../../shared/index.js";
|
|
5
|
+
import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
|
|
6
|
+
/** Filesystems that silently ignore `chown`/`chmod`, so a worker-uid probe over them proves nothing. */
|
|
7
|
+
export const UNENFORCED_OWNERSHIP_FILESYSTEMS = ["virtiofs", "9p", "nfs", "nfs4", "cifs", "smb3", "vboxsf", "grpcfuse"];
|
|
8
|
+
const isUnenforced = (fstype) => UNENFORCED_OWNERSHIP_FILESYSTEMS.includes(fstype) || fstype.startsWith("fuse");
|
|
9
|
+
/**
|
|
10
|
+
* The filesystem type backing `target`, from the longest mount point that is a
|
|
11
|
+
* prefix of it. `/proc/self/mountinfo` octal-escapes space, tab, newline and
|
|
12
|
+
* backslash in the mount point field, exactly as the durable-mount guard
|
|
13
|
+
* already handles elsewhere in this compiler.
|
|
14
|
+
*/
|
|
15
|
+
export const resolveBackingFilesystem = (target, mountinfo) => {
|
|
16
|
+
let best = "", fstype = "";
|
|
17
|
+
for (const line of mountinfo.split("\n")) {
|
|
18
|
+
const fields = line.split(" ");
|
|
19
|
+
const separator = fields.indexOf("-");
|
|
20
|
+
if (separator < 0 || fields.length < separator + 2)
|
|
21
|
+
continue;
|
|
22
|
+
const mountPoint = (fields[4] ?? "").replace(/\\(04[0011]|134)/gu, (match) => ({ "\\040": " ", "\\011": "\t", "\\012": "\n", "\\134": "\\" }[match] ?? match));
|
|
23
|
+
if (mountPoint !== "/" && target !== mountPoint && !target.startsWith(`${mountPoint}/`))
|
|
24
|
+
continue;
|
|
25
|
+
if (mountPoint.length >= best.length) {
|
|
26
|
+
best = mountPoint;
|
|
27
|
+
fstype = fields[separator + 1] ?? "";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return fstype;
|
|
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 const resolveTrainingCanaries = async (options) => {
|
|
54
|
+
const canaries = [];
|
|
55
|
+
for (const target of options.denyPaths) {
|
|
56
|
+
const fstype = resolveBackingFilesystem(target, options.mountinfo);
|
|
57
|
+
const origin = `${options.hostBindPaths.includes(target) ? "a host bind mount on " : ""}${fstype || "an unknown filesystem"}`;
|
|
58
|
+
if (options.sealedPaths.includes(target)) {
|
|
59
|
+
if (isUnenforced(fstype)) {
|
|
60
|
+
throw new SpawnfileError("runtime_error", `Grok slot sealed canary ${target} is backed by ${origin}, which ignores unix ownership, so the worker uid's denial cannot be proven; the sealed datasets must sit under a directory on an ownership-enforcing filesystem and no unenforcedBindPolicy waives this`);
|
|
61
|
+
}
|
|
62
|
+
if (!await options.probe(target, "enter")) {
|
|
63
|
+
throw new SpawnfileError("runtime_error", `Grok slot sealed canary ${target} is still reachable by the worker uid`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else if (isUnenforced(fstype)) {
|
|
67
|
+
if (options.unenforcedBindPolicy === "refuse") {
|
|
68
|
+
throw new SpawnfileError("runtime_error", `Grok slot canary ${target} is backed by ${origin}, which ignores unix ownership; declare unenforcedBindPolicy "profile-only" to accept the bubblewrap deny list as its only boundary`);
|
|
69
|
+
}
|
|
70
|
+
options.log(`canary ${target} certified by the enforced sandbox profile only (${origin} ignores unix ownership)`);
|
|
71
|
+
}
|
|
72
|
+
else if (!await options.probe(target, "read")) {
|
|
73
|
+
throw new SpawnfileError("runtime_error", `Grok slot canary ${target} is still readable by the worker uid`);
|
|
74
|
+
}
|
|
75
|
+
canaries.push({ path: target, method: "sandboxed-read", result: "denied" });
|
|
76
|
+
}
|
|
77
|
+
return canaries;
|
|
78
|
+
};
|
|
79
|
+
/** `noopolis.daimon.grok-slot-preflight.v2`, in the exact member order Daimon's strict schema accepts. */
|
|
80
|
+
export const buildTrainingSlotReceipt = (input) => {
|
|
81
|
+
if (!/^[a-f0-9]{64}$/u.test(input.nonce))
|
|
82
|
+
throw new SpawnfileError("runtime_error", "Grok slot recycle nonce must be 32 random bytes in lowercase hex");
|
|
83
|
+
if (!Number.isSafeInteger(input.generation) || input.generation < 1)
|
|
84
|
+
throw new SpawnfileError("runtime_error", "Grok slot generation must be a positive integer");
|
|
85
|
+
if (input.canaries.length === 0)
|
|
86
|
+
throw new SpawnfileError("runtime_error", "Grok slot receipt requires at least one denied canary");
|
|
87
|
+
return {
|
|
88
|
+
version: DAIMON_GROK_ENGINE_BROKER.slotPreflightVersion,
|
|
89
|
+
slot: input.slot,
|
|
90
|
+
worker_uid: input.workerUid,
|
|
91
|
+
generation: input.generation,
|
|
92
|
+
nonce: input.nonce,
|
|
93
|
+
projection_sha256: input.projectionSha256,
|
|
94
|
+
sandbox_profile_sha256: input.sandboxProfileSha256,
|
|
95
|
+
seccomp_profile_sha256: input.seccompProfileSha256,
|
|
96
|
+
sandbox_runtime: "bubblewrap",
|
|
97
|
+
grok_executable_sha256: input.grokExecutableSha256,
|
|
98
|
+
canaries: [...input.canaries],
|
|
99
|
+
created_at: `${input.createdAt.toISOString().slice(0, 23)}Z`
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
/** sha256 of the pinned Grok executable the slot's workers exec, refused unless it is a manifest-pinned 1.0.34 build. */
|
|
103
|
+
export const readGrokExecutableSha256 = (executable = DAIMON_GROK_ENGINE_BROKER.grokExecutablePath) => {
|
|
104
|
+
const digest = createHash("sha256").update(readFileSync(executable)).digest("hex");
|
|
105
|
+
const pinned = [DAIMON_GROK_ENGINE_BROKER.grokCliArtifacts.arm64.sha256, DAIMON_GROK_ENGINE_BROKER.grokCliArtifacts.x64.sha256];
|
|
106
|
+
if (!pinned.includes(digest)) {
|
|
107
|
+
throw new SpawnfileError("runtime_error", `${path.basename(executable)} is not the manifest-pinned Grok ${DAIMON_GROK_ENGINE_BROKER.grokCliVersion} build`);
|
|
108
|
+
}
|
|
109
|
+
return digest;
|
|
110
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type DaimonGrokBrokerModel, type DaimonGrokBrokerReasoningEffort } from "../../../runtime/daimon/contractManifest.js";
|
|
2
|
+
import { type DaimonGrokRegistration } from "../../containerDaimonGrokWorkerRender.js";
|
|
3
|
+
/**
|
|
4
|
+
* The one training slot's deny list: Daimon's own protected set for a
|
|
5
|
+
* single-agent organization (Grok bootstrap, realm, and the slot state root that
|
|
6
|
+
* holds the wake-acceptance store) plus everything this container provisions that the subject must not read —
|
|
7
|
+
* the evaluator roots, the caller's protected `/run/paideia` paths, the broker
|
|
8
|
+
* control and registration roots, the grant home root, the inference ledger,
|
|
9
|
+
* the per-slot ledger, turn store and supervisor socket directory.
|
|
10
|
+
*
|
|
11
|
+
* The same two refusals the production render enforces apply here: an entry
|
|
12
|
+
* that equals or contains a Grok 1.0.34 base-profile grant makes Grok refuse
|
|
13
|
+
* the profile outright, and masks cannot nest, so an entry covered by another
|
|
14
|
+
* entry is a provisioning bug rather than something to silently drop.
|
|
15
|
+
*/
|
|
16
|
+
export declare const resolveTrainingGrokDenyPaths: (added?: readonly string[]) => string[];
|
|
17
|
+
export interface TrainingGrokSlotInput {
|
|
18
|
+
agentId: string;
|
|
19
|
+
model: DaimonGrokBrokerModel;
|
|
20
|
+
reasoningEffort: DaimonGrokBrokerReasoningEffort;
|
|
21
|
+
/** Deny entries this container adds beyond Daimon's own protected set; defaults to the fixed training set. */
|
|
22
|
+
denyPaths?: readonly string[];
|
|
23
|
+
/**
|
|
24
|
+
* The declaration's per-turn limits. The broker registration must declare
|
|
25
|
+
* them, because a wake may only LOWER a declared limit: a trial whose wake
|
|
26
|
+
* ceiling exceeds the manifest defaults is refused as `invalid_request`.
|
|
27
|
+
*/
|
|
28
|
+
limits?: {
|
|
29
|
+
maxRequests: number;
|
|
30
|
+
maxTokens: number;
|
|
31
|
+
timeoutMs: number;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The single brokered Grok registration a training container runs, at the
|
|
36
|
+
* fixed container paths in `paths.ts`. Unlike production it points
|
|
37
|
+
* `usageLedgerPath` at the per-slot ledger, because each trial's spend must be
|
|
38
|
+
* separable and a recycle wipes it; the container-wide ledger and wake fuse do
|
|
39
|
+
* not exist here.
|
|
40
|
+
*/
|
|
41
|
+
export declare const resolveTrainingGrokRegistration: (input: TrainingGrokSlotInput) => DaimonGrokRegistration;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { SpawnfileError } from "../../../shared/index.js";
|
|
3
|
+
import { DAIMON_GROK_BROKER_MODELS, DAIMON_GROK_BROKER_REASONING_EFFORTS, DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
|
|
4
|
+
import { DAIMON_GROK_WORKER_HOME_DIRECTORY, daimonGrokWorkerSandboxProfileSha256, renderDaimonGrokWorkerSandboxProfile, resolveDaimonGrokWorkerConfig } from "../../../runtime/daimon/grokWorkerContract.js";
|
|
5
|
+
import { DAIMON_GROK_BASE_PROFILE_GRANTS, assertCanonicalRegisteredPath } from "../../containerDaimonGrokWorkerRender.js";
|
|
6
|
+
import { TRAINING_ADDED_DENY_PATHS, TRAINING_BOOTSTRAP_MOUNT, TRAINING_DEFERRED_DENY_PATHS, TRAINING_REALM_MOUNT, TRAINING_SLOT_INDEX, TRAINING_SLOT_RUNTIME_HOME, TRAINING_SLOT_STATE_ROOT, TRAINING_SLOT_USAGE_LEDGER, TRAINING_SLOT_WORKSPACE, TRAINING_WORKER_HOME, TRAINING_WORKER_UID } from "./paths.js";
|
|
7
|
+
const fail = (message) => {
|
|
8
|
+
throw new SpawnfileError("compile_error", message);
|
|
9
|
+
};
|
|
10
|
+
const within = (candidate, root) => candidate === root || candidate.startsWith(`${root}/`);
|
|
11
|
+
/**
|
|
12
|
+
* The one training slot's deny list: Daimon's own protected set for a
|
|
13
|
+
* single-agent organization (Grok bootstrap, realm, and the slot state root that
|
|
14
|
+
* holds the wake-acceptance store) plus everything this container provisions that the subject must not read —
|
|
15
|
+
* the evaluator roots, the caller's protected `/run/paideia` paths, the broker
|
|
16
|
+
* control and registration roots, the grant home root, the inference ledger,
|
|
17
|
+
* the per-slot ledger, turn store and supervisor socket directory.
|
|
18
|
+
*
|
|
19
|
+
* The same two refusals the production render enforces apply here: an entry
|
|
20
|
+
* that equals or contains a Grok 1.0.34 base-profile grant makes Grok refuse
|
|
21
|
+
* the profile outright, and masks cannot nest, so an entry covered by another
|
|
22
|
+
* entry is a provisioning bug rather than something to silently drop.
|
|
23
|
+
*/
|
|
24
|
+
export const resolveTrainingGrokDenyPaths = (added = TRAINING_ADDED_DENY_PATHS) => {
|
|
25
|
+
// The wake-acceptance store is masked through `TRAINING_SLOT_STATE_ROOT`, never directly: Grok 1.0.34
|
|
26
|
+
// materializes every deny target inside bubblewrap AS THE WORKER UID, and the store's parent is
|
|
27
|
+
// `2000:2000 0700`, so the store itself is unplaceable and would make Grok refuse the whole profile
|
|
28
|
+
// (`.runtime/grok-deny-placement/EVIDENCE.md`). The state root covers it and nothing else lives there.
|
|
29
|
+
const daimonOwn = [TRAINING_BOOTSTRAP_MOUNT, TRAINING_REALM_MOUNT, TRAINING_SLOT_STATE_ROOT];
|
|
30
|
+
const grokHome = path.posix.join(TRAINING_WORKER_HOME, DAIMON_GROK_WORKER_HOME_DIRECTORY);
|
|
31
|
+
const grants = [
|
|
32
|
+
...DAIMON_GROK_BASE_PROFILE_GRANTS, TRAINING_SLOT_WORKSPACE, grokHome,
|
|
33
|
+
path.posix.join(grokHome, "sessions"), path.posix.join(TRAINING_WORKER_HOME, "tmp")
|
|
34
|
+
];
|
|
35
|
+
const candidates = [...new Set([...daimonOwn, ...added])].sort();
|
|
36
|
+
for (const entry of candidates) {
|
|
37
|
+
assertCanonicalRegisteredPath("deny path", entry);
|
|
38
|
+
const grant = grants.find((candidate) => within(candidate, entry));
|
|
39
|
+
if (grant)
|
|
40
|
+
fail(`Training Grok deny path ${entry} equals or contains the base profile grant ${grant}; Grok refuses such a profile`);
|
|
41
|
+
if (within(TRAINING_SLOT_WORKSPACE, entry) || within(TRAINING_WORKER_HOME, entry) || within(TRAINING_SLOT_RUNTIME_HOME, entry)) {
|
|
42
|
+
fail(`Training Grok deny path ${entry} would hide the subject's own workspace, home, or runtime home`);
|
|
43
|
+
}
|
|
44
|
+
const ancestor = candidates.find((other) => other !== entry && within(entry, other));
|
|
45
|
+
if (ancestor)
|
|
46
|
+
fail(`Training Grok deny path ${ancestor} would cover ${entry}; masks cannot nest`);
|
|
47
|
+
}
|
|
48
|
+
return candidates;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* The single brokered Grok registration a training container runs, at the
|
|
52
|
+
* fixed container paths in `paths.ts`. Unlike production it points
|
|
53
|
+
* `usageLedgerPath` at the per-slot ledger, because each trial's spend must be
|
|
54
|
+
* separable and a recycle wipes it; the container-wide ledger and wake fuse do
|
|
55
|
+
* not exist here.
|
|
56
|
+
*/
|
|
57
|
+
export const resolveTrainingGrokRegistration = (input) => {
|
|
58
|
+
if (!input.agentId.trim())
|
|
59
|
+
fail("Training Grok slot requires an agent id");
|
|
60
|
+
if (!DAIMON_GROK_BROKER_MODELS.includes(input.model)
|
|
61
|
+
|| !DAIMON_GROK_BROKER_REASONING_EFFORTS.includes(input.reasoningEffort)) {
|
|
62
|
+
fail(`Training Grok slot has no declared broker model and reasoning effort: ${input.agentId}`);
|
|
63
|
+
}
|
|
64
|
+
const home = assertCanonicalRegisteredPath("home", TRAINING_WORKER_HOME);
|
|
65
|
+
const grokHome = path.posix.join(home, DAIMON_GROK_WORKER_HOME_DIRECTORY);
|
|
66
|
+
const config = resolveDaimonGrokWorkerConfig(input.model, input.reasoningEffort);
|
|
67
|
+
const denyPaths = resolveTrainingGrokDenyPaths(input.denyPaths);
|
|
68
|
+
const profile = renderDaimonGrokWorkerSandboxProfile(denyPaths);
|
|
69
|
+
const eventsPath = path.posix.join(grokHome, DAIMON_GROK_ENGINE_BROKER.worker.home.sandboxEvents.relativePath);
|
|
70
|
+
const profilePath = path.posix.join(grokHome, "sandbox.toml");
|
|
71
|
+
for (const [label, value] of [["GROK_HOME", grokHome], ["profile", profilePath], ["events", eventsPath],
|
|
72
|
+
["workspace", TRAINING_SLOT_WORKSPACE], ["runtime home", TRAINING_SLOT_RUNTIME_HOME],
|
|
73
|
+
["usage ledger", TRAINING_SLOT_USAGE_LEDGER]])
|
|
74
|
+
assertCanonicalRegisteredPath(label, value);
|
|
75
|
+
return {
|
|
76
|
+
agentId: input.agentId,
|
|
77
|
+
config: config.bytes,
|
|
78
|
+
...(input.limits === undefined ? {} : { limits: { ...input.limits } }),
|
|
79
|
+
configSha256: config.sha256,
|
|
80
|
+
deferredDenyPaths: denyPaths.filter((entry) => TRAINING_DEFERRED_DENY_PATHS.includes(entry)),
|
|
81
|
+
denyPaths,
|
|
82
|
+
eventsPath,
|
|
83
|
+
grokHome,
|
|
84
|
+
home,
|
|
85
|
+
model: input.model,
|
|
86
|
+
profile,
|
|
87
|
+
profilePath,
|
|
88
|
+
profileSha256: daimonGrokWorkerSandboxProfileSha256(denyPaths),
|
|
89
|
+
privateTmp: path.posix.join(home, DAIMON_GROK_ENGINE_BROKER.worker.home.privateTmp.relativeToWorkerHome),
|
|
90
|
+
reasoningEffort: input.reasoningEffort,
|
|
91
|
+
runtimeHome: TRAINING_SLOT_RUNTIME_HOME,
|
|
92
|
+
// Empty on purpose: training has no persistent mounts at all. Everything a trial writes under the slot
|
|
93
|
+
// runtime home is per-slot tmpfs the recycle wipes, and the only thing provisioned inside it is the
|
|
94
|
+
// setgid `tool-output/` spill directory, so the traversable `0710` home exposes nothing else.
|
|
95
|
+
runtimeHomeMounts: [],
|
|
96
|
+
slot: TRAINING_SLOT_INDEX,
|
|
97
|
+
spillDirectory: path.posix.join(TRAINING_SLOT_RUNTIME_HOME, DAIMON_GROK_ENGINE_BROKER.worker.home.spillDirectory.relativeToRuntimeHome),
|
|
98
|
+
uid: TRAINING_WORKER_UID,
|
|
99
|
+
usageLedgerPath: TRAINING_SLOT_USAGE_LEDGER,
|
|
100
|
+
workspace: TRAINING_SLOT_WORKSPACE
|
|
101
|
+
};
|
|
102
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DaimonGrokRegistration } from "../../containerDaimonGrokWorkerRender.js";
|
|
2
|
+
import type { TrainingBrokerDeclaration } from "./declaration.js";
|
|
3
|
+
import { type BrokerChild } from "./processes.js";
|
|
4
|
+
import type { TrainingSlotRuntime } from "./supervisor.js";
|
|
5
|
+
export interface TrainingSlotRuntimeOptions {
|
|
6
|
+
declaration: TrainingBrokerDeclaration;
|
|
7
|
+
registration: DaimonGrokRegistration;
|
|
8
|
+
projectionSha256: string;
|
|
9
|
+
/** Test seam: the shell the provisioning script runs in and the `/proc` it reads identities from. */
|
|
10
|
+
shell?: string;
|
|
11
|
+
procRoot?: string;
|
|
12
|
+
logPath?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The real slot runtime: what `recycle` actually does to this container.
|
|
16
|
+
*
|
|
17
|
+
* Every mutation goes through the same rendered provisioning the root
|
|
18
|
+
* entrypoint ran at startup, so a recycled slot is byte-identically
|
|
19
|
+
* provisioned — including the credential journal recovery, which is how a
|
|
20
|
+
* recycle that lands on a `refreshing` or `stale` realm either recovers or
|
|
21
|
+
* fails closed with a named error instead of leaving a silently stale realm.
|
|
22
|
+
*/
|
|
23
|
+
export declare const createTrainingSlotRuntime: (options: TrainingSlotRuntimeOptions) => TrainingSlotRuntime & {
|
|
24
|
+
children(): readonly BrokerChild[];
|
|
25
|
+
};
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { appendFileSync } from "node:fs";
|
|
4
|
+
import { chmod, chown, mkdir, readFile, readdir, rename, writeFile } from "node:fs/promises";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { setTimeout as pause } from "node:timers/promises";
|
|
7
|
+
import { promisify } from "node:util";
|
|
8
|
+
import { SpawnfileError } from "../../../shared/index.js";
|
|
9
|
+
import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
|
|
10
|
+
import { MOUNT_AWARE_CLEAR_HELPER } from "../../containerDaimonBrokerRender.js";
|
|
11
|
+
import { renderTrainingBrokerProvisioning, renderTrainingIdentities } from "./provisioning.js";
|
|
12
|
+
import { startBrokerProcesses, stopBrokerProcesses } from "./processes.js";
|
|
13
|
+
import { buildTrainingSlotReceipt, readGrokExecutableSha256, resolveTrainingCanaries } from "./receipt.js";
|
|
14
|
+
import { DAIMON_ORGANIZATION_UID, TRAINING_HOST_BIND_DENY_PATHS, TRAINING_SEALED_DENY_PATHS, TRAINING_WIPE_TARGETS, TRAINING_SLOT_GENERATION_FILE, TRAINING_SLOT_PREFLIGHT_RECEIPT, TRAINING_SLOT_TURN_STORE, TRAINING_SLOT_USAGE_DIRECTORY, TRAINING_SLOT_WORKSPACE, TRAINING_SUPERVISOR_LOG } from "./paths.js";
|
|
15
|
+
const run = promisify(execFile);
|
|
16
|
+
const quote = (value) => `'${value.replace(/'/gu, `'"'"'`)}'`;
|
|
17
|
+
const CREDENTIAL_JOURNAL = `${DAIMON_GROK_ENGINE_BROKER.credentialHomePath}/.daimon-broker/credential-journal.json`;
|
|
18
|
+
/** State the broker's credential authority may be left in; only `promoted` (or no journal at all) is settled. */
|
|
19
|
+
const settledJournal = async () => {
|
|
20
|
+
const raw = await readFile(CREDENTIAL_JOURNAL, "utf8").catch((error) => {
|
|
21
|
+
if (error.code === "ENOENT")
|
|
22
|
+
return undefined;
|
|
23
|
+
throw error;
|
|
24
|
+
});
|
|
25
|
+
if (raw === undefined)
|
|
26
|
+
return "settled";
|
|
27
|
+
const journal = JSON.parse(raw);
|
|
28
|
+
if (journal.version !== "noopolis.daimon.broker-credential-journal.v1")
|
|
29
|
+
throw new SpawnfileError("runtime_error", "The broker credential journal is not a recognised version");
|
|
30
|
+
return journal.state === "promoted" ? "settled" : journal.state === "refreshing" ? "refreshing" : "stale";
|
|
31
|
+
};
|
|
32
|
+
/** A turn is active while its registry record says so; a terminal record is finished work and never blocks a recycle. */
|
|
33
|
+
const activeTurns = async () => {
|
|
34
|
+
const names = await readdir(TRAINING_SLOT_TURN_STORE).catch((error) => {
|
|
35
|
+
if (error.code === "ENOENT")
|
|
36
|
+
return [];
|
|
37
|
+
throw error;
|
|
38
|
+
});
|
|
39
|
+
let active = 0;
|
|
40
|
+
for (const name of names) {
|
|
41
|
+
if (!name.endsWith(".json"))
|
|
42
|
+
continue;
|
|
43
|
+
const raw = await readFile(path.join(TRAINING_SLOT_TURN_STORE, name), "utf8").catch(() => "");
|
|
44
|
+
try {
|
|
45
|
+
if (JSON.parse(raw).state === "active")
|
|
46
|
+
active += 1;
|
|
47
|
+
}
|
|
48
|
+
catch { /* a half-written record is not an active turn */ }
|
|
49
|
+
}
|
|
50
|
+
return active;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* The real slot runtime: what `recycle` actually does to this container.
|
|
54
|
+
*
|
|
55
|
+
* Every mutation goes through the same rendered provisioning the root
|
|
56
|
+
* entrypoint ran at startup, so a recycled slot is byte-identically
|
|
57
|
+
* provisioned — including the credential journal recovery, which is how a
|
|
58
|
+
* recycle that lands on a `refreshing` or `stale` realm either recovers or
|
|
59
|
+
* fails closed with a named error instead of leaving a silently stale realm.
|
|
60
|
+
*/
|
|
61
|
+
export const createTrainingSlotRuntime = (options) => {
|
|
62
|
+
const shell = options.shell ?? "/bin/bash";
|
|
63
|
+
const logPath = options.logPath ?? TRAINING_SUPERVISOR_LOG;
|
|
64
|
+
const script = [...renderTrainingIdentities(), ...renderTrainingBrokerProvisioning(options.registration)].join("\n");
|
|
65
|
+
let children = [];
|
|
66
|
+
const log = (line) => {
|
|
67
|
+
const entry = `${new Date().toISOString()} ${line}\n`;
|
|
68
|
+
process.stderr.write(`[slot-supervisor] ${entry}`);
|
|
69
|
+
try {
|
|
70
|
+
appendFileSync(logPath, entry, { mode: 0o640 });
|
|
71
|
+
}
|
|
72
|
+
catch { /* the log is diagnostics, never the gate */ }
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* One worker-uid reachability attempt. The command below *succeeds* when the
|
|
76
|
+
* worker can still reach the target, so a non-zero exit is the denial.
|
|
77
|
+
*
|
|
78
|
+
* `enter` is the stronger question a sealed root needs answered: a directory
|
|
79
|
+
* can be unreadable (`test -r` fails) and still searchable, and a subject
|
|
80
|
+
* that knows `test.paideia.yaml` by name needs only search permission.
|
|
81
|
+
*/
|
|
82
|
+
const probe = async (target, depth) => {
|
|
83
|
+
const quoted = JSON.stringify(target);
|
|
84
|
+
const reachable = depth === "enter"
|
|
85
|
+
? `test -r ${quoted} || test -x ${quoted} || ls -1 ${quoted} >/dev/null 2>&1`
|
|
86
|
+
: `test -r ${quoted}`;
|
|
87
|
+
try {
|
|
88
|
+
await run("setpriv", ["--clear-groups", `--reuid=${options.registration.uid}`, `--regid=${options.registration.uid}`,
|
|
89
|
+
"--inh-caps=-all", "--ambient-caps=-all", "--bounding-set=-all", "--", "/bin/sh", "-c", reachable], { timeout: 10_000 });
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
return {
|
|
97
|
+
log,
|
|
98
|
+
children: () => children,
|
|
99
|
+
drain: async (signal) => {
|
|
100
|
+
for (;;) {
|
|
101
|
+
signal.throwIfAborted();
|
|
102
|
+
const state = await settledJournal();
|
|
103
|
+
if (state === "stale") {
|
|
104
|
+
// The audited provisioning below owns stale-realm recovery; it promotes the bootstrap or refuses outright.
|
|
105
|
+
log("credential journal is stale; the recycle will replay the root credential recovery");
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (state === "settled" && await activeTurns() === 0)
|
|
109
|
+
return;
|
|
110
|
+
await pause(100);
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
stop: async () => { await stopBrokerProcesses(children, log); children = []; },
|
|
114
|
+
wipe: async () => {
|
|
115
|
+
// Root holds `CAP_CHOWN` and `CAP_DAC_READ_SEARCH` but not `CAP_DAC_OVERRIDE`, so it cannot delete
|
|
116
|
+
// inside a directory it handed to the worker or the broker. Reclaim each tree first, then remove it.
|
|
117
|
+
const targets = TRAINING_WIPE_TARGETS;
|
|
118
|
+
const contents = [TRAINING_SLOT_WORKSPACE, TRAINING_SLOT_USAGE_DIRECTORY];
|
|
119
|
+
const script = [
|
|
120
|
+
...MOUNT_AWARE_CLEAR_HELPER,
|
|
121
|
+
// The parent has to be reclaimed too: unlinking is a write to the *directory*, and the slot hands
|
|
122
|
+
// several of these parents to uid 2000 or the broker. Provisioning restores every mode right after.
|
|
123
|
+
'reclaim() { parent=$(dirname "$1"); chown 0:0 "$parent"; chmod u+rwx "$parent"; if [ -e "$1" ]; then chown -R 0:0 "$1"; chmod -R u+rwX "$1"; fi; }',
|
|
124
|
+
...targets.map((target) => `reclaim ${quote(target)}; spawnfile_remove_tree ${quote(target)}`),
|
|
125
|
+
// The workspace and the per-slot ledger directory keep their own root: the registered paths must
|
|
126
|
+
// stay canonical across a recycle, so only what a trial put inside them goes.
|
|
127
|
+
...contents.map((target) => `reclaim ${quote(target)}; spawnfile_clear_tree ${quote(target)}`)
|
|
128
|
+
].join("\n");
|
|
129
|
+
await run(shell, ["--noprofile", "--norc", "-ceu", script], { maxBuffer: 1024 * 1024 }).catch((error) => {
|
|
130
|
+
const detail = error;
|
|
131
|
+
throw new SpawnfileError("runtime_error", `Training slot wipe failed: ${(detail.stderr ?? "").slice(-1024).trim() || "no diagnostic"}`);
|
|
132
|
+
});
|
|
133
|
+
},
|
|
134
|
+
provision: async () => {
|
|
135
|
+
const result = await run(shell, ["--noprofile", "--norc", "-ceu", script], { maxBuffer: 8 * 1024 * 1024 }).catch((error) => {
|
|
136
|
+
const detail = error;
|
|
137
|
+
throw new SpawnfileError("runtime_error", `Training slot provisioning failed: ${(detail.stderr ?? detail.stdout ?? "").slice(-2048).trim()}`);
|
|
138
|
+
});
|
|
139
|
+
if (result.stdout.trim())
|
|
140
|
+
log(`provisioning: ${result.stdout.trim().slice(-2048)}`);
|
|
141
|
+
},
|
|
142
|
+
start: async () => { children = await startBrokerProcesses({ log, procRoot: options.procRoot }); },
|
|
143
|
+
canaries: async () => resolveTrainingCanaries({
|
|
144
|
+
denyPaths: options.registration.denyPaths, probe, log, hostBindPaths: TRAINING_HOST_BIND_DENY_PATHS,
|
|
145
|
+
sealedPaths: TRAINING_SEALED_DENY_PATHS,
|
|
146
|
+
mountinfo: await readFile(`${options.procRoot ?? "/proc"}/self/mountinfo`, "utf8"),
|
|
147
|
+
unenforcedBindPolicy: options.declaration.unenforcedBindPolicy
|
|
148
|
+
}),
|
|
149
|
+
nextGeneration: async () => {
|
|
150
|
+
const previous = await readFile(TRAINING_SLOT_GENERATION_FILE, "utf8").catch(() => "");
|
|
151
|
+
const parsed = Number.parseInt(JSON.parse(previous || "{}").generation ?? "0", 10);
|
|
152
|
+
// Seeded from the wall clock so a container restart cannot hand out a generation an evaluator already accepted.
|
|
153
|
+
const generation = Math.max(Number.isSafeInteger(parsed) && parsed > 0 ? parsed + 1 : 1, Math.floor(Date.now() / 1000));
|
|
154
|
+
await writeFile(TRAINING_SLOT_GENERATION_FILE, `${JSON.stringify({ generation })}\n`, { mode: 0o600 });
|
|
155
|
+
return generation;
|
|
156
|
+
},
|
|
157
|
+
publishReceipt: async ({ generation, nonce, canaries }) => {
|
|
158
|
+
const receipt = buildTrainingSlotReceipt({
|
|
159
|
+
slot: options.registration.slot, workerUid: options.registration.uid, generation, nonce,
|
|
160
|
+
projectionSha256: options.projectionSha256, sandboxProfileSha256: options.registration.profileSha256,
|
|
161
|
+
seccompProfileSha256: options.declaration.seccompProfileSha256,
|
|
162
|
+
grokExecutableSha256: readGrokExecutableSha256(), canaries, createdAt: new Date()
|
|
163
|
+
});
|
|
164
|
+
const temporary = `${TRAINING_SLOT_PREFLIGHT_RECEIPT}.${randomUUID()}.tmp`;
|
|
165
|
+
await mkdir(path.dirname(TRAINING_SLOT_PREFLIGHT_RECEIPT), { recursive: true });
|
|
166
|
+
await writeFile(temporary, `${JSON.stringify(receipt)}\n`, { mode: 0o600, flag: "wx" });
|
|
167
|
+
await chown(temporary, 0, DAIMON_ORGANIZATION_UID);
|
|
168
|
+
await chmod(temporary, 0o640);
|
|
169
|
+
await rename(temporary, TRAINING_SLOT_PREFLIGHT_RECEIPT);
|
|
170
|
+
return TRAINING_SLOT_PREFLIGHT_RECEIPT;
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The syscalls a worker-uid namespace escape needs before it can even be
|
|
3
|
+
* attempted: a new user namespace, a new mount namespace, and the mount and
|
|
4
|
+
* unmount calls inside them.
|
|
5
|
+
*
|
|
6
|
+
* `clone`/`clone3` are deliberately absent. The pinned profile allows them only
|
|
7
|
+
* under an argument filter, so a static "is it allowed" question has no honest
|
|
8
|
+
* yes/no answer for them, and `unshare` already gates the route.
|
|
9
|
+
*/
|
|
10
|
+
export declare const TRAINING_NAMESPACE_ROUTE_SYSCALLS: readonly ["unshare", "mount", "umount2", "setns"];
|
|
11
|
+
/**
|
|
12
|
+
* Whether the pinned seccomp profile lets the worker uid attempt a namespace
|
|
13
|
+
* escape at all — an **unconditional** `SCMP_ACT_ALLOW`, with no
|
|
14
|
+
* `includes.caps` (the container drops `CAP_SYS_ADMIN`) and no argument filter.
|
|
15
|
+
*
|
|
16
|
+
* This exists to keep one specific lie out of the slot receipt. When a probe
|
|
17
|
+
* route cannot run, the honest record is *which layer refused it*: a syscall
|
|
18
|
+
* the profile filters is a stronger denial than DAC and must be named as
|
|
19
|
+
* `seccomp`, while the same syscall refused by a profile that allows it came
|
|
20
|
+
* from the kernel or an LSM and must be named `kernel`. Merging the two into
|
|
21
|
+
* "denied" would let a filtered-syscall run read as though DAC had held.
|
|
22
|
+
*/
|
|
23
|
+
export declare const pinnedProfileAllowsNamespaceRoutes: (bytes?: string) => boolean;
|
|
24
|
+
/**
|
|
25
|
+
* What to blame when the worker uid cannot open the namespace a route needs.
|
|
26
|
+
*
|
|
27
|
+
* Derived, never guessed: seccomp and a DAC/LSM refusal both surface as
|
|
28
|
+
* `EPERM`, so errno cannot tell them apart. The pinned profile can — Spawnfile
|
|
29
|
+
* ships its bytes and the declaration binds their digest.
|
|
30
|
+
*/
|
|
31
|
+
export declare const trainingNamespaceDenialMechanism: (bytes?: string) => "seccomp" | "kernel";
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { DAIMON_GROK_SECCOMP_PROFILE_BYTES } from "../../../shared/daimonGrokSeccompProfile.js";
|
|
2
|
+
/**
|
|
3
|
+
* The syscalls a worker-uid namespace escape needs before it can even be
|
|
4
|
+
* attempted: a new user namespace, a new mount namespace, and the mount and
|
|
5
|
+
* unmount calls inside them.
|
|
6
|
+
*
|
|
7
|
+
* `clone`/`clone3` are deliberately absent. The pinned profile allows them only
|
|
8
|
+
* under an argument filter, so a static "is it allowed" question has no honest
|
|
9
|
+
* yes/no answer for them, and `unshare` already gates the route.
|
|
10
|
+
*/
|
|
11
|
+
export const TRAINING_NAMESPACE_ROUTE_SYSCALLS = ["unshare", "mount", "umount2", "setns"];
|
|
12
|
+
/**
|
|
13
|
+
* Whether the pinned seccomp profile lets the worker uid attempt a namespace
|
|
14
|
+
* escape at all — an **unconditional** `SCMP_ACT_ALLOW`, with no
|
|
15
|
+
* `includes.caps` (the container drops `CAP_SYS_ADMIN`) and no argument filter.
|
|
16
|
+
*
|
|
17
|
+
* This exists to keep one specific lie out of the slot receipt. When a probe
|
|
18
|
+
* route cannot run, the honest record is *which layer refused it*: a syscall
|
|
19
|
+
* the profile filters is a stronger denial than DAC and must be named as
|
|
20
|
+
* `seccomp`, while the same syscall refused by a profile that allows it came
|
|
21
|
+
* from the kernel or an LSM and must be named `kernel`. Merging the two into
|
|
22
|
+
* "denied" would let a filtered-syscall run read as though DAC had held.
|
|
23
|
+
*/
|
|
24
|
+
export const pinnedProfileAllowsNamespaceRoutes = (bytes = DAIMON_GROK_SECCOMP_PROFILE_BYTES) => {
|
|
25
|
+
const profile = JSON.parse(bytes);
|
|
26
|
+
return TRAINING_NAMESPACE_ROUTE_SYSCALLS.every((syscall) => (profile.syscalls ?? []).some((rule) => (rule.names ?? []).includes(syscall) && rule.action === "SCMP_ACT_ALLOW"
|
|
27
|
+
&& (rule.includes?.caps ?? []).length === 0 && (rule.args ?? []).length === 0));
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* What to blame when the worker uid cannot open the namespace a route needs.
|
|
31
|
+
*
|
|
32
|
+
* Derived, never guessed: seccomp and a DAC/LSM refusal both surface as
|
|
33
|
+
* `EPERM`, so errno cannot tell them apart. The pinned profile can — Spawnfile
|
|
34
|
+
* ships its bytes and the declaration binds their digest.
|
|
35
|
+
*/
|
|
36
|
+
export const trainingNamespaceDenialMechanism = (bytes) => pinnedProfileAllowsNamespaceRoutes(bytes) ? "kernel" : "seccomp";
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
export declare const TRAINING_SUPERVISOR_PROTOCOL: "spawnfile.training-slot-supervisor.v1";
|
|
2
|
+
export declare const TRAINING_SUPERVISOR_MAX_REQUEST_BYTES = 4096;
|
|
3
|
+
/**
|
|
4
|
+
* Everything the recycle verb does to the running slot. It is an interface so
|
|
5
|
+
* the state machine below can be tested without Docker, a broker, or root:
|
|
6
|
+
* the order of these calls *is* the contract, and getting it wrong (wiping
|
|
7
|
+
* before draining, writing a receipt before the canaries) is exactly the class
|
|
8
|
+
* of bug a live check finds far too late.
|
|
9
|
+
*/
|
|
10
|
+
export interface TrainingSlotRuntime {
|
|
11
|
+
/** Waits for no active turn and a settled credential journal; throws a named error on an unrecoverable realm. */
|
|
12
|
+
drain(signal: AbortSignal): Promise<void>;
|
|
13
|
+
stop(): Promise<void>;
|
|
14
|
+
/** Removes worker home, slot workspace, wake-acceptance, turn store, per-slot ledger and Grok session state. */
|
|
15
|
+
wipe(): Promise<void>;
|
|
16
|
+
/** Replays the audited root provisioning: registrations, service.json, worker home, temp, spill, ledgers. */
|
|
17
|
+
provision(): Promise<void>;
|
|
18
|
+
start(): Promise<void>;
|
|
19
|
+
/** Worker-uid denial canaries over every deny path; throws when one is still reachable. */
|
|
20
|
+
canaries(): Promise<{
|
|
21
|
+
path: string;
|
|
22
|
+
method: "sandboxed-read";
|
|
23
|
+
result: "denied";
|
|
24
|
+
}[]>;
|
|
25
|
+
/** Writes the slot preflight receipt v2 atomically, readable by the organization uid. */
|
|
26
|
+
publishReceipt(input: {
|
|
27
|
+
generation: number;
|
|
28
|
+
nonce: string;
|
|
29
|
+
canaries: readonly {
|
|
30
|
+
path: string;
|
|
31
|
+
method: "sandboxed-read";
|
|
32
|
+
result: "denied";
|
|
33
|
+
}[];
|
|
34
|
+
}): Promise<string>;
|
|
35
|
+
/** Monotonic per-slot generation; strictly greater than every generation this slot has ever published. */
|
|
36
|
+
nextGeneration(): Promise<number>;
|
|
37
|
+
log(line: string): void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Bringing a slot up, receipt included — the only way this container starts one.
|
|
41
|
+
*
|
|
42
|
+
* `provision → start` alone was the whole start-up path, and `canaries` and
|
|
43
|
+
* `publishReceipt` were reachable only from `recycle`. The first trial of every
|
|
44
|
+
* run therefore executed with no worker-uid denial evidence at all, and a
|
|
45
|
+
* refusal that should have cost nothing surfaced only after that trial's spend.
|
|
46
|
+
* Trial 1 is exactly the trial whose sealed datasets have never been probed, so
|
|
47
|
+
* it is the one that most needs the evidence.
|
|
48
|
+
*
|
|
49
|
+
* The receipt this publishes carries generation 1..N and a nonce of the
|
|
50
|
+
* container's own, so an evaluator that reads `preflight.json` before its first
|
|
51
|
+
* wake sees the same `noopolis.daimon.grok-slot-preflight.v2` shape a recycle
|
|
52
|
+
* publishes, from the same canaries.
|
|
53
|
+
*/
|
|
54
|
+
export declare const startTrainingSlot: (runtime: TrainingSlotRuntime, nonce: string) => Promise<{
|
|
55
|
+
generation: number;
|
|
56
|
+
receipt: string;
|
|
57
|
+
canaries: number;
|
|
58
|
+
}>;
|
|
59
|
+
export interface TrainingSlotSupervisorOptions {
|
|
60
|
+
runtime: TrainingSlotRuntime;
|
|
61
|
+
/** Only this uid may recycle. Paideia, DSPy and the judges all run as it; every worker uid is refused. */
|
|
62
|
+
organizationUid?: number;
|
|
63
|
+
drainTimeoutMs?: number;
|
|
64
|
+
now?: () => number;
|
|
65
|
+
}
|
|
66
|
+
export interface TrainingRecycleResult {
|
|
67
|
+
ok: true;
|
|
68
|
+
verb: "recycle";
|
|
69
|
+
generation: number;
|
|
70
|
+
nonce: string;
|
|
71
|
+
receipt: string;
|
|
72
|
+
durationMs: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The single-verb root slot supervisor.
|
|
76
|
+
*
|
|
77
|
+
* One verb, one argument, no path or command ever supplied by the caller: the
|
|
78
|
+
* whole point of D4 is that recycling replays the container's own audited
|
|
79
|
+
* provisioning rather than exposing a root file-system API to the evaluator.
|
|
80
|
+
* Recycles are serialized — a second caller waits rather than interleaving a
|
|
81
|
+
* wipe with a provision.
|
|
82
|
+
*/
|
|
83
|
+
export declare const createTrainingSlotSupervisor: (options: TrainingSlotSupervisorOptions) => {
|
|
84
|
+
/** Serialized: a recycle already in flight completes before the next one starts. */
|
|
85
|
+
recycle: (nonce: string, peerUid: number) => Promise<TrainingRecycleResult>;
|
|
86
|
+
};
|
|
87
|
+
export type TrainingSlotSupervisor = ReturnType<typeof createTrainingSlotSupervisor>;
|
|
88
|
+
/**
|
|
89
|
+
* Re-establishes, and re-checks on every connection, the only uid gate this
|
|
90
|
+
* socket has.
|
|
91
|
+
*
|
|
92
|
+
* The scope asked for `SO_PEERCRED`. Node exposes no ancillary-data or
|
|
93
|
+
* peer-credential API on a unix socket and no native addon ships in this
|
|
94
|
+
* image, so the gate is the socket node itself, which the kernel enforces on
|
|
95
|
+
* `connect()` exactly as it does on `open()`: the node is
|
|
96
|
+
* `root:<organization gid> 0660` inside a root-owned `0711` directory on
|
|
97
|
+
* tmpfs, where modes *are* enforced. Only uid 2000 (and root) can connect;
|
|
98
|
+
* uid 2200 gets `EACCES` before a byte is written. A `0600` root-owned socket
|
|
99
|
+
* — the literal reading of the scope — would deny the one caller it exists
|
|
100
|
+
* for, so this is the same restriction stated in the only mechanism available.
|
|
101
|
+
* The directory holds no write permission for anyone but root, so the node
|
|
102
|
+
* cannot be replaced by a laxer one.
|
|
103
|
+
*/
|
|
104
|
+
export declare const assertTrainingSupervisorSocketIdentity: (socketPath: string, organizationGid: number) => void;
|
|
105
|
+
/**
|
|
106
|
+
* Line-delimited JSON over a unix socket. Every request is bounded,
|
|
107
|
+
* single-line, and must name the protocol, the one verb and nothing else.
|
|
108
|
+
*/
|
|
109
|
+
export declare const serveTrainingSlotSupervisor: (supervisor: TrainingSlotSupervisor, socketPath: string, log: (line: string) => void, organizationUid?: number) => import("net").Server;
|