spawnfile 0.1.14 → 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.
Files changed (546) hide show
  1. package/README.md +60 -159
  2. package/dist/audit/checksShared.d.ts +1 -1
  3. package/dist/auth/importers.d.ts +10 -0
  4. package/dist/auth/importers.js +29 -4
  5. package/dist/auth/index.d.ts +2 -0
  6. package/dist/auth/index.js +1 -0
  7. package/dist/auth/paths.d.ts +1 -1
  8. package/dist/auth/profileStore.js +9 -9
  9. package/dist/auth/targetSecretSourceFsIdentity.d.ts +40 -0
  10. package/dist/auth/targetSecretSourceFsIdentity.js +42 -0
  11. package/dist/auth/targetSecretSourceFsPublish.d.ts +2 -0
  12. package/dist/auth/targetSecretSourceFsPublish.js +3 -1
  13. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +2 -1
  14. package/dist/auth/targetSecretSourceFsPublishImmutable.js +104 -71
  15. package/dist/auth/targetSecretSourceFsRead.js +5 -14
  16. package/dist/auth/trainingAuth.d.ts +21 -0
  17. package/dist/auth/trainingAuth.js +86 -0
  18. package/dist/auth/types.d.ts +1 -1
  19. package/dist/cli/authCommands.d.ts +1 -1
  20. package/dist/cli/authCommands.js +9 -0
  21. package/dist/cli/canaryCutoverCommand.d.ts +2 -0
  22. package/dist/cli/canaryCutoverCommand.js +30 -0
  23. package/dist/cli/capabilitiesCommand.d.ts +3 -0
  24. package/dist/cli/capabilitiesCommand.js +12 -0
  25. package/dist/cli/capabilitiesReceipt.d.ts +56 -0
  26. package/dist/cli/capabilitiesReceipt.js +56 -0
  27. package/dist/cli/compileBuildCommands.js +13 -0
  28. package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
  29. package/dist/cli/composedLifecycleContractSet.js +204 -0
  30. package/dist/cli/devCommands.js +2 -0
  31. package/dist/cli/downCommand.js +19 -8
  32. package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
  33. package/dist/cli/evidenceExportHelperCommand.js +51 -0
  34. package/dist/cli/index.js +12 -3
  35. package/dist/cli/lifecycleMachine.d.ts +7 -1
  36. package/dist/cli/lifecycleMachine.js +2 -2
  37. package/dist/cli/paideiaDelegation.d.ts +17 -0
  38. package/dist/cli/paideiaDelegation.js +210 -0
  39. package/dist/cli/paideiaSupervisor.d.ts +17 -0
  40. package/dist/cli/paideiaSupervisor.js +48 -0
  41. package/dist/cli/productStateCloneCommand.d.ts +2 -0
  42. package/dist/cli/productStateCloneCommand.js +34 -0
  43. package/dist/cli/runCli.d.ts +13 -3
  44. package/dist/cli/runCli.js +37 -9
  45. package/dist/cli/targetCommands.d.ts +4 -7
  46. package/dist/cli/targetCommands.js +16 -46
  47. package/dist/cli/targetConfigPreparedPlan.d.ts +3 -0
  48. package/dist/cli/targetConfigPreparedPlan.js +74 -0
  49. package/dist/cli/targetConfigResolver.d.ts +3 -0
  50. package/dist/cli/targetConfigResolver.js +111 -0
  51. package/dist/cli/targetConfigResolverCommand.d.ts +6 -0
  52. package/dist/cli/targetConfigResolverCommand.js +43 -0
  53. package/dist/cli/targetConfigResolverContracts.d.ts +56 -0
  54. package/dist/cli/targetConfigResolverContracts.js +30 -0
  55. package/dist/cli/targetConfigResolverDocker.d.ts +4 -0
  56. package/dist/cli/targetConfigResolverDocker.js +47 -0
  57. package/dist/cli/targetConfigResolverValidation.d.ts +10 -0
  58. package/dist/cli/targetConfigResolverValidation.js +94 -0
  59. package/dist/cli/targetDefaultAuthorities.d.ts +2 -0
  60. package/dist/cli/targetDefaultAuthorities.js +3 -0
  61. package/dist/cli/targetDefaultConfig.d.ts +7 -0
  62. package/dist/cli/targetDefaultConfig.js +22 -5
  63. package/dist/cli/targetDefaultConfigStdin.js +7 -1
  64. package/dist/cli/targetDefaultHandlerFactory.js +23 -2
  65. package/dist/cli/targetDefaultHandlers.d.ts +2 -2
  66. package/dist/cli/targetProductionCommands.d.ts +5 -0
  67. package/dist/cli/targetProductionCommands.js +45 -0
  68. package/dist/cli/trainCommand.d.ts +3 -0
  69. package/dist/cli/trainCommand.js +61 -0
  70. package/dist/cli/upCommand.js +35 -6
  71. package/dist/cli/upLifecycleRecovery.d.ts +2 -2
  72. package/dist/cli/upLifecycleRecovery.js +188 -44
  73. package/dist/cli/usageCommand.d.ts +40 -0
  74. package/dist/cli/usageCommand.js +284 -0
  75. package/dist/cli/usageCommandLive.d.ts +84 -0
  76. package/dist/cli/usageCommandLive.js +95 -0
  77. package/dist/cli/usageDeploymentSource.d.ts +9 -0
  78. package/dist/cli/usageDeploymentSource.js +22 -0
  79. package/dist/cli/workspaceResourceMigrationCommand.d.ts +8 -0
  80. package/dist/cli/workspaceResourceMigrationCommand.js +36 -0
  81. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -1
  82. package/dist/compiler/buildCompilePlanTeams.js +6 -1
  83. package/dist/compiler/compilePlanHelpers.js +3 -0
  84. package/dist/compiler/compileProject.d.ts +2 -0
  85. package/dist/compiler/compileProject.js +5 -1
  86. package/dist/compiler/compileProjectSupport.js +9 -0
  87. package/dist/compiler/containerArtifacts.d.ts +3 -1
  88. package/dist/compiler/containerArtifacts.js +92 -40
  89. package/dist/compiler/containerArtifactsPlans.d.ts +1 -1
  90. package/dist/compiler/containerArtifactsPlans.js +24 -7
  91. package/dist/compiler/containerArtifactsRender.d.ts +2 -1
  92. package/dist/compiler/containerArtifactsRender.js +91 -58
  93. package/dist/compiler/containerArtifactsTypes.d.ts +8 -0
  94. package/dist/compiler/containerBackedMountRender.d.ts +56 -0
  95. package/dist/compiler/containerBackedMountRender.js +101 -0
  96. package/dist/compiler/containerDaimonBrokerRender.d.ts +112 -0
  97. package/dist/compiler/containerDaimonBrokerRender.js +191 -0
  98. package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
  99. package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +108 -0
  100. package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +172 -0
  101. package/dist/compiler/containerDaimonGrokWorkerRender.js +268 -0
  102. package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +12 -0
  103. package/dist/compiler/containerDaimonOwnershipGuardRender.js +191 -0
  104. package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
  105. package/dist/compiler/containerDaimonUidEntrypointRender.js +297 -0
  106. package/dist/compiler/containerEntrypointRender.d.ts +7 -0
  107. package/dist/compiler/containerEntrypointRender.js +28 -22
  108. package/dist/compiler/containerPersistentMounts.d.ts +30 -0
  109. package/dist/compiler/containerPersistentMounts.js +66 -0
  110. package/dist/compiler/containerReadinessPaths.d.ts +1 -0
  111. package/dist/compiler/containerReadinessPaths.js +1 -0
  112. package/dist/compiler/containerRuntimeLinkMaterializer.d.ts +2 -0
  113. package/dist/compiler/containerRuntimeLinkMaterializer.js +12 -0
  114. package/dist/compiler/containerRuntimeReadinessRender.d.ts +7 -0
  115. package/dist/compiler/containerRuntimeReadinessRender.js +40 -0
  116. package/dist/compiler/containerStateOwnershipRender.d.ts +4 -0
  117. package/dist/compiler/containerStateOwnershipRender.js +75 -0
  118. package/dist/compiler/containerTargetResources.d.ts +22 -1
  119. package/dist/compiler/containerTargetResources.js +94 -2
  120. package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
  121. package/dist/compiler/containerVolumeBootstrap.js +3 -0
  122. package/dist/compiler/containerWorkspaceResourceRender.js +49 -1
  123. package/dist/compiler/daimonTelemetryArtifacts.d.ts +2 -2
  124. package/dist/compiler/daimonTelemetryArtifacts.js +5 -10
  125. package/dist/compiler/deploymentLineage.d.ts +40 -0
  126. package/dist/compiler/deploymentLineage.js +50 -0
  127. package/dist/compiler/index.d.ts +3 -0
  128. package/dist/compiler/index.js +3 -0
  129. package/dist/compiler/initProject.d.ts +2 -0
  130. package/dist/compiler/initProject.js +39 -1
  131. package/dist/compiler/localMoltnetAuthority.d.ts +64 -0
  132. package/dist/compiler/localMoltnetAuthority.js +177 -0
  133. package/dist/compiler/memoryArtifacts.d.ts +1 -1
  134. package/dist/compiler/memoryArtifacts.js +108 -32
  135. package/dist/compiler/modelEnv.d.ts +5 -0
  136. package/dist/compiler/modelEnv.js +8 -2
  137. package/dist/compiler/moltnetArtifactPaths.d.ts +17 -12
  138. package/dist/compiler/moltnetArtifactPaths.js +17 -15
  139. package/dist/compiler/moltnetArtifactTypes.d.ts +10 -0
  140. package/dist/compiler/moltnetArtifacts.d.ts +1 -1
  141. package/dist/compiler/moltnetArtifacts.js +52 -12
  142. package/dist/compiler/moltnetBinaries.d.ts +16 -4
  143. package/dist/compiler/moltnetBinaries.js +46 -6
  144. package/dist/compiler/moltnetClientConfig.js +1 -1
  145. package/dist/compiler/moltnetConfigLowering.d.ts +3 -1
  146. package/dist/compiler/moltnetConfigLowering.js +30 -6
  147. package/dist/compiler/moltnetNodeConfig.js +1 -1
  148. package/dist/compiler/moltnetReleaseAuthority.d.ts +24 -1
  149. package/dist/compiler/moltnetReleaseAuthority.js +33 -4
  150. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -1
  151. package/dist/compiler/moltnetRepresentativeResolution.js +2 -2
  152. package/dist/compiler/moltnetResolution.js +9 -15
  153. package/dist/compiler/moltnetRoomMemberships.js +20 -5
  154. package/dist/compiler/moltnetRoomPolicyCompatibility.d.ts +1 -1
  155. package/dist/compiler/moltnetRoomPolicyCompatibility.js +3 -1
  156. package/dist/compiler/moltnetRuntimeConfig.d.ts +1 -1
  157. package/dist/compiler/moltnetRuntimeConfig.js +22 -2
  158. package/dist/compiler/moltnetServerPlans.js +19 -0
  159. package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
  160. package/dist/compiler/organizationExternalParticipants.js +176 -0
  161. package/dist/compiler/organizationIdentity.d.ts +3 -9
  162. package/dist/compiler/organizationIdentity.js +37 -270
  163. package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
  164. package/dist/compiler/organizationIdentityGraph.js +115 -0
  165. package/dist/compiler/organizationReadyEvidence.d.ts +8 -0
  166. package/dist/compiler/organizationReadyEvidence.js +23 -3
  167. package/dist/compiler/runProject.d.ts +4 -2
  168. package/dist/compiler/runProject.js +32 -6
  169. package/dist/compiler/runProjectAuth.d.ts +3 -1
  170. package/dist/compiler/runProjectAuth.js +19 -3
  171. package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
  172. package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
  173. package/dist/compiler/runProjectDocker.d.ts +8 -4
  174. package/dist/compiler/runProjectDocker.js +43 -18
  175. package/dist/compiler/runProjectDockerDaimonGuards.d.ts +15 -0
  176. package/dist/compiler/runProjectDockerDaimonGuards.js +122 -0
  177. package/dist/compiler/runProjectDockerReservation.d.ts +3 -0
  178. package/dist/compiler/runProjectDockerReservation.js +118 -0
  179. package/dist/compiler/runProjectLifecycle.js +1 -1
  180. package/dist/compiler/training/broker/declaration.d.ts +45 -0
  181. package/dist/compiler/training/broker/declaration.js +55 -0
  182. package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
  183. package/dist/compiler/training/broker/entrypoint.js +111 -0
  184. package/dist/compiler/training/broker/index.d.ts +10 -0
  185. package/dist/compiler/training/broker/index.js +10 -0
  186. package/dist/compiler/training/broker/main.d.ts +2 -0
  187. package/dist/compiler/training/broker/main.js +14 -0
  188. package/dist/compiler/training/broker/paths.d.ts +196 -0
  189. package/dist/compiler/training/broker/paths.js +241 -0
  190. package/dist/compiler/training/broker/processes.d.ts +42 -0
  191. package/dist/compiler/training/broker/processes.js +99 -0
  192. package/dist/compiler/training/broker/projection.d.ts +51 -0
  193. package/dist/compiler/training/broker/projection.js +76 -0
  194. package/dist/compiler/training/broker/provisioning.d.ts +87 -0
  195. package/dist/compiler/training/broker/provisioning.js +213 -0
  196. package/dist/compiler/training/broker/receipt.d.ts +77 -0
  197. package/dist/compiler/training/broker/receipt.js +110 -0
  198. package/dist/compiler/training/broker/registration.d.ts +41 -0
  199. package/dist/compiler/training/broker/registration.js +102 -0
  200. package/dist/compiler/training/broker/runtime.d.ts +25 -0
  201. package/dist/compiler/training/broker/runtime.js +173 -0
  202. package/dist/compiler/training/broker/seccompRoutes.d.ts +31 -0
  203. package/dist/compiler/training/broker/seccompRoutes.js +36 -0
  204. package/dist/compiler/training/broker/supervisor.d.ts +109 -0
  205. package/dist/compiler/training/broker/supervisor.js +173 -0
  206. package/dist/compiler/training/container/contract.d.ts +31 -0
  207. package/dist/compiler/training/container/contract.js +33 -0
  208. package/dist/compiler/training/container/index.d.ts +4 -0
  209. package/dist/compiler/training/container/index.js +2 -0
  210. package/dist/compiler/training/container/launch.d.ts +18 -0
  211. package/dist/compiler/training/container/launch.js +173 -0
  212. package/dist/compiler/training/container/prepare.d.ts +8 -0
  213. package/dist/compiler/training/container/prepare.js +80 -0
  214. package/dist/compiler/training/container/process.d.ts +14 -0
  215. package/dist/compiler/training/container/process.js +70 -0
  216. package/dist/compiler/training/container/security.d.ts +36 -0
  217. package/dist/compiler/training/container/security.js +58 -0
  218. package/dist/compiler/training/context.d.ts +7 -0
  219. package/dist/compiler/training/context.js +93 -0
  220. package/dist/compiler/training/contract.d.ts +142 -0
  221. package/dist/compiler/training/contract.js +34 -0
  222. package/dist/compiler/training/index.d.ts +4 -0
  223. package/dist/compiler/training/index.js +3 -0
  224. package/dist/compiler/training/preparation/assets/Dockerfile +98 -0
  225. package/dist/compiler/training/preparation/assets/package-lock.json +3787 -0
  226. package/dist/compiler/training/preparation/broker.d.ts +21 -0
  227. package/dist/compiler/training/preparation/broker.js +43 -0
  228. package/dist/compiler/training/preparation/contextModes.d.ts +12 -0
  229. package/dist/compiler/training/preparation/contextModes.js +38 -0
  230. package/dist/compiler/training/preparation/contract.d.ts +182 -0
  231. package/dist/compiler/training/preparation/contract.js +94 -0
  232. package/dist/compiler/training/preparation/copyAssets.d.ts +1 -0
  233. package/dist/compiler/training/preparation/copyAssets.js +8 -0
  234. package/dist/compiler/training/preparation/daimonParent.d.ts +42 -0
  235. package/dist/compiler/training/preparation/daimonParent.js +114 -0
  236. package/dist/compiler/training/preparation/files.d.ts +25 -0
  237. package/dist/compiler/training/preparation/files.js +85 -0
  238. package/dist/compiler/training/preparation/image.d.ts +28 -0
  239. package/dist/compiler/training/preparation/image.js +102 -0
  240. package/dist/compiler/training/preparation/index.d.ts +3 -0
  241. package/dist/compiler/training/preparation/index.js +2 -0
  242. package/dist/compiler/training/preparation/inputs.d.ts +23 -0
  243. package/dist/compiler/training/preparation/inputs.js +93 -0
  244. package/dist/compiler/training/preparation/prepare.d.ts +33 -0
  245. package/dist/compiler/training/preparation/prepare.js +186 -0
  246. package/dist/compiler/training/preparation/scratch.d.ts +19 -0
  247. package/dist/compiler/training/preparation/scratch.js +48 -0
  248. package/dist/compiler/training/repair/compatibility.d.ts +11 -0
  249. package/dist/compiler/training/repair/compatibility.js +34 -0
  250. package/dist/compiler/training/repair/contract.d.ts +506 -0
  251. package/dist/compiler/training/repair/contract.js +31 -0
  252. package/dist/compiler/training/repair/index.d.ts +3 -0
  253. package/dist/compiler/training/repair/index.js +3 -0
  254. package/dist/compiler/training/repair/prepare.d.ts +230 -0
  255. package/dist/compiler/training/repair/prepare.js +74 -0
  256. package/dist/compiler/training/repair/witness.d.ts +203 -0
  257. package/dist/compiler/training/repair/witness.js +42 -0
  258. package/dist/compiler/types.d.ts +2 -0
  259. package/dist/compiler/upProject.d.ts +26 -1
  260. package/dist/compiler/upProject.js +117 -178
  261. package/dist/compiler/upProjectHandoff.d.ts +62 -0
  262. package/dist/compiler/upProjectHandoff.js +204 -0
  263. package/dist/compiler/upReceipt.js +49 -4
  264. package/dist/compiler/updateProjectModels.js +1 -0
  265. package/dist/compiler/view/types.d.ts +1 -1
  266. package/dist/compiler/workspaceBundleArtifacts.d.ts +3 -0
  267. package/dist/compiler/workspaceBundleArtifacts.js +106 -0
  268. package/dist/compiler/workspaceResources.d.ts +4 -1
  269. package/dist/compiler/workspaceResources.js +12 -7
  270. package/dist/deployment/artifactsExportPlan.js +51 -1
  271. package/dist/deployment/canaryCutover.d.ts +42 -0
  272. package/dist/deployment/canaryCutover.js +140 -0
  273. package/dist/deployment/candidateDiagnostics.d.ts +15 -0
  274. package/dist/deployment/candidateDiagnostics.js +90 -0
  275. package/dist/deployment/dockerLogs.js +4 -1
  276. package/dist/deployment/dockerManager.js +9 -3
  277. package/dist/deployment/dockerProbeGateway.d.ts +17 -0
  278. package/dist/deployment/dockerProbeGateway.js +17 -2
  279. package/dist/deployment/downDeployment.d.ts +5 -0
  280. package/dist/deployment/downDeployment.js +109 -8
  281. package/dist/deployment/downReceiptTypes.d.ts +17 -2
  282. package/dist/deployment/downReceiptTypes.js +17 -2
  283. package/dist/deployment/index.d.ts +4 -0
  284. package/dist/deployment/index.js +4 -0
  285. package/dist/deployment/lifecycleCompletionContracts.d.ts +66 -0
  286. package/dist/deployment/lifecycleCompletionContracts.js +34 -0
  287. package/dist/deployment/lifecycleCompletionPaths.d.ts +4 -1
  288. package/dist/deployment/lifecycleCompletionPaths.js +3 -0
  289. package/dist/deployment/lifecycleCompletionPublication.d.ts +2 -0
  290. package/dist/deployment/lifecycleCompletionPublication.js +18 -4
  291. package/dist/deployment/lifecycleCompletionStore.d.ts +1 -1
  292. package/dist/deployment/lifecycleCompletionStore.js +7 -7
  293. package/dist/deployment/lifecycleUpRecords.d.ts +11 -0
  294. package/dist/deployment/lifecycleUpRecords.js +127 -0
  295. package/dist/deployment/native/AGENTS.md +11 -0
  296. package/dist/deployment/native/rename-noreplace-arm64 +0 -0
  297. package/dist/deployment/native/rename-noreplace-arm64.provenance.json +1 -0
  298. package/dist/deployment/native/rename-noreplace-x64 +0 -0
  299. package/dist/deployment/native/rename-noreplace-x64.provenance.json +1 -0
  300. package/dist/deployment/noReplaceActivation.d.ts +17 -0
  301. package/dist/deployment/noReplaceActivation.js +50 -0
  302. package/dist/deployment/organizationHandoffAuthorityFsBudget.d.ts +110 -0
  303. package/dist/deployment/organizationHandoffAuthorityFsBudget.js +156 -0
  304. package/dist/deployment/organizationHandoffAuthorityFsClient.js +82 -27
  305. package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
  306. package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
  307. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +254 -108
  308. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
  309. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
  310. package/dist/deployment/organizationHandoffAuthorityStore.js +14 -7
  311. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +2 -2
  312. package/dist/deployment/organizationHandoffAuthorityTypes.js +2 -1
  313. package/dist/deployment/organizationReady.d.ts +2 -0
  314. package/dist/deployment/organizationReady.js +36 -4
  315. package/dist/deployment/productStateClone.d.ts +43 -0
  316. package/dist/deployment/productStateClone.js +319 -0
  317. package/dist/deployment/upLifecycleRecoveryState.d.ts +23 -0
  318. package/dist/deployment/upLifecycleRecoveryState.js +12 -0
  319. package/dist/deployment/upReceiptTypes.d.ts +32 -6
  320. package/dist/deployment/upReceiptTypes.js +29 -2
  321. package/dist/deployment/workspaceResourceMigration.d.ts +55 -0
  322. package/dist/deployment/workspaceResourceMigration.js +315 -0
  323. package/dist/dev/project.d.ts +7 -0
  324. package/dist/dev/project.js +9 -0
  325. package/dist/distribution/consumeImage.d.ts +2 -0
  326. package/dist/distribution/consumeImage.js +98 -73
  327. package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
  328. package/dist/distribution/consumeImageDaimonDocker.js +45 -0
  329. package/dist/distribution/consumeImageLifecycle.d.ts +17 -0
  330. package/dist/distribution/consumeImageLifecycle.js +231 -0
  331. package/dist/distribution/consumeImageSupport.d.ts +12 -0
  332. package/dist/distribution/consumeImageSupport.js +15 -0
  333. package/dist/distribution/distributionReportSchema.d.ts +11 -1
  334. package/dist/distribution/distributionReportSchema.js +15 -2
  335. package/dist/distribution/dockerRunner.d.ts +6 -1
  336. package/dist/distribution/dockerRunner.js +31 -4
  337. package/dist/distribution/imageRuntimeAuth.d.ts +9 -1
  338. package/dist/distribution/imageRuntimeAuth.js +70 -1
  339. package/dist/distribution/index.d.ts +1 -1
  340. package/dist/distribution/index.js +1 -1
  341. package/dist/distribution/preflight.js +5 -1
  342. package/dist/distribution/types.d.ts +14 -1
  343. package/dist/distribution/types.js +3 -0
  344. package/dist/evidenceExportHelper/boundedExecutor.d.ts +3 -0
  345. package/dist/evidenceExportHelper/boundedExecutor.js +33 -0
  346. package/dist/evidenceExportHelper/helperProgram.mjs +156 -0
  347. package/dist/evidenceExportHelper/index.d.ts +4 -0
  348. package/dist/evidenceExportHelper/index.js +4 -0
  349. package/dist/evidenceExportHelper/preparedAuthority.d.ts +64 -0
  350. package/dist/evidenceExportHelper/preparedAuthority.js +228 -0
  351. package/dist/evidenceExportHelper/preparedBuilder.d.ts +10 -0
  352. package/dist/evidenceExportHelper/preparedBuilder.js +183 -0
  353. package/dist/evidenceExportHelper/preparedBuilderTypes.d.ts +19 -0
  354. package/dist/evidenceExportHelper/preparedBuilderTypes.js +1 -0
  355. package/dist/evidenceExportHelper/recipe.d.ts +7 -0
  356. package/dist/evidenceExportHelper/recipe.js +83 -0
  357. package/dist/filesystem/io.d.ts +2 -0
  358. package/dist/filesystem/io.js +16 -1
  359. package/dist/manifest/executionSchemas.d.ts +27 -0
  360. package/dist/manifest/executionSchemas.js +21 -2
  361. package/dist/manifest/mcpSchemas.d.ts +1 -0
  362. package/dist/manifest/mcpSchemas.js +3 -0
  363. package/dist/manifest/renderSpawnfileNetworks.js +11 -0
  364. package/dist/manifest/renderSpawnfileWorkspace.js +5 -0
  365. package/dist/manifest/scheduleSchemas.d.ts +3 -1
  366. package/dist/manifest/scheduleSchemas.js +91 -5
  367. package/dist/manifest/schemas.d.ts +237 -12
  368. package/dist/manifest/schemas.js +5 -2
  369. package/dist/manifest/teamNetworkAccessSchemas.d.ts +5 -1
  370. package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
  371. package/dist/manifest/teamNetworkAuthSchemas.d.ts +1 -1
  372. package/dist/manifest/teamNetworkSchemas.d.ts +17 -3
  373. package/dist/manifest/teamNetworkSchemas.js +19 -1
  374. package/dist/manifest/teamNetworkServerSchemas.d.ts +8 -3
  375. package/dist/manifest/teamNetworkServerSchemas.js +18 -2
  376. package/dist/manifest/workspaceSchemas.d.ts +16 -0
  377. package/dist/manifest/workspaceSchemas.js +11 -0
  378. package/dist/report/types.d.ts +34 -4
  379. package/dist/runtime/common.d.ts +28 -1
  380. package/dist/runtime/common.js +33 -3
  381. package/dist/runtime/container.js +49 -33
  382. package/dist/runtime/daimon/adapter.d.ts +14 -0
  383. package/dist/runtime/daimon/adapter.js +243 -0
  384. package/dist/runtime/daimon/attention.d.ts +8 -0
  385. package/dist/runtime/daimon/attention.js +32 -0
  386. package/dist/runtime/daimon/config.d.ts +25 -0
  387. package/dist/runtime/daimon/config.js +272 -0
  388. package/dist/runtime/daimon/contractManifest.d.ts +295 -0
  389. package/dist/runtime/daimon/contractManifest.js +319 -0
  390. package/dist/runtime/daimon/grokModel.d.ts +19 -0
  391. package/dist/runtime/daimon/grokModel.js +33 -0
  392. package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +26 -0
  393. package/dist/runtime/daimon/grokWorkerConfigBytes.js +36 -0
  394. package/dist/runtime/daimon/grokWorkerContract.d.ts +22 -0
  395. package/dist/runtime/daimon/grokWorkerContract.js +48 -0
  396. package/dist/runtime/daimon/memory.d.ts +57 -0
  397. package/dist/runtime/daimon/memory.js +125 -0
  398. package/dist/runtime/daimon/runAuth.d.ts +51 -0
  399. package/dist/runtime/daimon/runAuth.js +279 -0
  400. package/dist/runtime/daimon/runtimeIdentity.d.ts +22 -0
  401. package/dist/runtime/daimon/runtimeIdentity.js +22 -0
  402. package/dist/runtime/daimon/scheduleAuthority.d.ts +3 -0
  403. package/dist/runtime/daimon/scheduleAuthority.js +17 -0
  404. package/dist/runtime/index.d.ts +4 -0
  405. package/dist/runtime/index.js +4 -0
  406. package/dist/runtime/install.d.ts +3 -0
  407. package/dist/runtime/install.js +3 -0
  408. package/dist/runtime/localDaimonAuthority.d.ts +11 -0
  409. package/dist/runtime/localDaimonAuthority.js +77 -0
  410. package/dist/runtime/mnemeMcp.d.ts +13 -0
  411. package/dist/runtime/mnemeMcp.js +26 -0
  412. package/dist/runtime/openclaw/adapter.js +2 -2
  413. package/dist/runtime/pi/adapter.d.ts +0 -1
  414. package/dist/runtime/pi/adapter.js +2 -6
  415. package/dist/runtime/pi/appCliSource.js +1 -1
  416. package/dist/runtime/pi/appScheduleSource.js +6 -2
  417. package/dist/runtime/pi/appTemplateTypes.d.ts +1 -1
  418. package/dist/runtime/picoclaw/adapter.js +2 -2
  419. package/dist/runtime/registry.d.ts +3 -0
  420. package/dist/runtime/registry.js +19 -2
  421. package/dist/runtime/scheduleUtils.d.ts +1 -0
  422. package/dist/runtime/scheduleUtils.js +5 -1
  423. package/dist/runtime/types.d.ts +25 -0
  424. package/dist/runtime/usageLedger.d.ts +158 -0
  425. package/dist/runtime/usageLedger.js +269 -0
  426. package/dist/runtime/usageLedgerRead.d.ts +48 -0
  427. package/dist/runtime/usageLedgerRead.js +102 -0
  428. package/dist/runtime/usageRequestLedger.d.ts +42 -0
  429. package/dist/runtime/usageRequestLedger.js +72 -0
  430. package/dist/shared/daimonCodexDocker.d.ts +32 -0
  431. package/dist/shared/daimonCodexDocker.js +120 -0
  432. package/dist/shared/daimonGrokSeccompProfile.d.ts +10 -0
  433. package/dist/shared/daimonGrokSeccompProfile.js +11 -0
  434. package/dist/shared/index.d.ts +2 -0
  435. package/dist/shared/index.js +2 -0
  436. package/dist/shared/types.d.ts +1 -1
  437. package/dist/shared/volumeNames.d.ts +6 -0
  438. package/dist/shared/volumeNames.js +14 -0
  439. package/dist/target/dockerArtifactsProvider.js +34 -7
  440. package/dist/target/dockerBaseImage.d.ts +2 -0
  441. package/dist/target/dockerBaseImage.js +11 -0
  442. package/dist/target/dockerCommandExecutor.d.ts +11 -0
  443. package/dist/target/dockerCommandExecutor.js +53 -2
  444. package/dist/target/dockerCommandExecutorCore.d.ts +2 -1
  445. package/dist/target/dockerCommandExecutorCore.js +4 -2
  446. package/dist/target/dockerPublicArtifactSnapshot.d.ts +3 -3
  447. package/dist/target/dockerPublicArtifactSnapshot.js +17 -33
  448. package/dist/target/dockerTarget.d.ts +1 -0
  449. package/dist/target/dockerTargetBinding.d.ts +1 -2
  450. package/dist/target/dockerTargetBinding.js +2 -3
  451. package/dist/target/dockerTargetExecFile.d.ts +19 -0
  452. package/dist/target/dockerTargetExecFile.js +194 -0
  453. package/dist/target/dockerWorldServiceProvider.d.ts +4 -0
  454. package/dist/target/dockerWorldServiceProvider.js +13 -1
  455. package/dist/target/evidenceExport.d.ts +3 -1
  456. package/dist/target/evidenceExport.js +12 -3
  457. package/dist/target/evidenceExportOperationsTestKit.js +3 -3
  458. package/dist/target/evidenceExportProvider.d.ts +2 -0
  459. package/dist/target/evidenceExportProvider.js +15 -5
  460. package/dist/target/publicArtifactSnapshot.d.ts +31 -0
  461. package/dist/target/publicArtifactSnapshot.js +37 -3
  462. package/examples/README.md +45 -0
  463. package/examples/agent-with-subagents/AGENTS.md +3 -0
  464. package/examples/agent-with-subagents/Spawnfile +30 -0
  465. package/examples/agent-with-subagents/subagents/critic/AGENTS.md +3 -0
  466. package/examples/agent-with-subagents/subagents/critic/Spawnfile +15 -0
  467. package/examples/agent-with-subagents/subagents/researcher/AGENTS.md +3 -0
  468. package/examples/agent-with-subagents/subagents/researcher/Spawnfile +17 -0
  469. package/examples/daimon-org/Spawnfile +68 -0
  470. package/examples/daimon-org/TEAM.md +4 -0
  471. package/examples/daimon-org/agents/mapper/AGENTS.md +4 -0
  472. package/examples/daimon-org/agents/mapper/Spawnfile +37 -0
  473. package/examples/daimon-org/shared/skills/file-note/SKILL.md +9 -0
  474. package/examples/daimon-org/teams/review/Spawnfile +53 -0
  475. package/examples/daimon-org/teams/review/agents/reviewer/AGENTS.md +4 -0
  476. package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +37 -0
  477. package/examples/daimon-public-host/AGENTS.md +3 -0
  478. package/examples/daimon-public-host/Spawnfile +21 -0
  479. package/examples/distribution-org/Spawnfile +43 -0
  480. package/examples/distribution-org/TEAM.md +4 -0
  481. package/examples/distribution-org/agents/coordinator/AGENTS.md +1 -0
  482. package/examples/distribution-org/agents/coordinator/Spawnfile +20 -0
  483. package/examples/distribution-org/agents/researcher/AGENTS.md +1 -0
  484. package/examples/distribution-org/agents/researcher/Spawnfile +20 -0
  485. package/examples/jungian-daimon-org/Spawnfile +41 -0
  486. package/examples/jungian-daimon-org/TEAM.md +21 -0
  487. package/examples/jungian-daimon-org/teams/luna/Spawnfile +47 -0
  488. package/examples/jungian-daimon-org/teams/luna/TEAM.md +4 -0
  489. package/examples/jungian-daimon-org/teams/luna/agents/animus/AGENTS.md +10 -0
  490. package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +33 -0
  491. package/examples/jungian-daimon-org/teams/luna/agents/representative/AGENTS.md +21 -0
  492. package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +30 -0
  493. package/examples/jungian-daimon-org/teams/luna/agents/shadow/AGENTS.md +10 -0
  494. package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +33 -0
  495. package/examples/jungian-daimon-org/teams/selene/Spawnfile +47 -0
  496. package/examples/jungian-daimon-org/teams/selene/TEAM.md +4 -0
  497. package/examples/jungian-daimon-org/teams/selene/agents/animus/AGENTS.md +10 -0
  498. package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +33 -0
  499. package/examples/jungian-daimon-org/teams/selene/agents/representative/AGENTS.md +19 -0
  500. package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +33 -0
  501. package/examples/jungian-daimon-org/teams/selene/agents/shadow/AGENTS.md +10 -0
  502. package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +30 -0
  503. package/examples/mixed-runtime-org/Spawnfile +71 -0
  504. package/examples/mixed-runtime-org/TEAM.md +8 -0
  505. package/examples/mixed-runtime-org/agents/analyst/AGENTS.md +8 -0
  506. package/examples/mixed-runtime-org/agents/analyst/Spawnfile +27 -0
  507. package/examples/mixed-runtime-org/agents/conductor/AGENTS.md +8 -0
  508. package/examples/mixed-runtime-org/agents/conductor/Spawnfile +27 -0
  509. package/examples/mixed-runtime-org/agents/localist/AGENTS.md +7 -0
  510. package/examples/mixed-runtime-org/agents/localist/Spawnfile +50 -0
  511. package/examples/moltnet-team-chat/Spawnfile +43 -0
  512. package/examples/moltnet-team-chat/TEAM.md +5 -0
  513. package/examples/moltnet-team-chat/agents/coordinator/AGENTS.md +9 -0
  514. package/examples/moltnet-team-chat/agents/coordinator/Spawnfile +26 -0
  515. package/examples/moltnet-team-chat/teams/analysis/Spawnfile +23 -0
  516. package/examples/moltnet-team-chat/teams/analysis/TEAM.md +3 -0
  517. package/examples/moltnet-team-chat/teams/analysis/agents/observer/AGENTS.md +5 -0
  518. package/examples/moltnet-team-chat/teams/analysis/agents/observer/Spawnfile +19 -0
  519. package/examples/moltnet-team-chat/teams/analysis/agents/representative/AGENTS.md +5 -0
  520. package/examples/moltnet-team-chat/teams/analysis/agents/representative/Spawnfile +19 -0
  521. package/examples/moltnet-team-chat/teams/field/Spawnfile +41 -0
  522. package/examples/moltnet-team-chat/teams/field/TEAM.md +3 -0
  523. package/examples/moltnet-team-chat/teams/field/agents/observer/AGENTS.md +5 -0
  524. package/examples/moltnet-team-chat/teams/field/agents/observer/Spawnfile +26 -0
  525. package/examples/moltnet-team-chat/teams/field/agents/representative/AGENTS.md +11 -0
  526. package/examples/moltnet-team-chat/teams/field/agents/representative/Spawnfile +26 -0
  527. package/examples/single-agent/AGENTS.md +3 -0
  528. package/examples/single-agent/HEARTBEAT.md +3 -0
  529. package/examples/single-agent/IDENTITY.md +3 -0
  530. package/examples/single-agent/MEMORY.md +3 -0
  531. package/examples/single-agent/SOUL.md +3 -0
  532. package/examples/single-agent/Spawnfile +41 -0
  533. package/examples/single-agent/skills/web_search/SKILL.md +6 -0
  534. package/moltnet-releases.json +5 -4
  535. package/package.json +36 -9
  536. package/runtimes.yaml +5 -2
  537. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +0 -13
  538. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +0 -109
  539. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +0 -8
  540. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +0 -60
  541. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +0 -8
  542. package/dist/deployment/simfileFixtureBoundary.test-helper.js +0 -103
  543. package/dist/ownership/simfileRunOperatorInputs.d.ts +0 -103
  544. package/dist/ownership/simfileRunOperatorInputs.js +0 -139
  545. package/dist/target/cleanupRunDocker.test-helper.d.ts +0 -67
  546. package/dist/target/cleanupRunDocker.test-helper.js +0 -238
@@ -10,6 +10,7 @@ const MAX_OUTPUT_BYTES = 32_768;
10
10
  const MAX_REPOSITORY_BYTES = 255;
11
11
  const MAX_REFERENCE_BYTES = MAX_REPOSITORY_BYTES + 72;
12
12
  const MAX_IDENTITY_BYTES = 262_144;
13
+ const IDENTITY_RETRY_ATTEMPTS = 64;
13
14
  const DIGEST_PATTERN = /^sha256:[0-9a-f]{64}$/u;
14
15
  const PORT_PATTERN = /^[1-9][0-9]{0,4}$/u;
15
16
  const NAME_COMPONENT_PATTERN = /^[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*$/u;
@@ -282,7 +283,9 @@ const openSecureIdentity = async (filePath) => {
282
283
  };
283
284
  const openIdentity = async (filePath, links) => {
284
285
  const value = await openSecureIdentity(filePath);
285
- if (value !== null && !links.includes(value.nlink))
286
+ if (value === null || value.nlink === 0)
287
+ return null;
288
+ if (!links.includes(value.nlink))
286
289
  return fail();
287
290
  return value;
288
291
  };
@@ -295,6 +298,12 @@ const syncDirectory = async (directory) => {
295
298
  await handle.close();
296
299
  }
297
300
  };
301
+ const retryTurn = (attempt) => new Promise((resolve) => {
302
+ if ((attempt + 1) % 8 === 0)
303
+ setTimeout(resolve, 1);
304
+ else
305
+ setImmediate(resolve);
306
+ });
298
307
  /* One canonical immutable record exists for one exact operation/request pair. */
299
308
  const keyPath = (root, operationHandle, requestDigest) => path.join(root, `${digest("identity-operation", `${operationHandle}\0${requestDigest}`)}.identity.json`);
300
309
  const pendingPath = (file) => path.join(path.dirname(file), `.${path.basename(file)}.pending`);
@@ -308,7 +317,7 @@ const sameInode = (left, right) => left.dev === right.dev && left.ino === right.
308
317
  * what makes unlink-after-same-inode-proof safe here.
309
318
  */
310
319
  const reconcilePublishedIdentity = async (root, file, expected) => {
311
- for (let attempt = 0; attempt < 16; attempt += 1) {
320
+ for (let attempt = 0; attempt < IDENTITY_RETRY_ATTEMPTS; attempt += 1) {
312
321
  const final = await openIdentity(file, [1, 2]);
313
322
  if (!final || final.bytes !== expected)
314
323
  return fail();
@@ -316,15 +325,24 @@ const reconcilePublishedIdentity = async (root, file, expected) => {
316
325
  if (final.nlink === 1) {
317
326
  if (pending === null)
318
327
  return;
319
- if (pending.bytes !== expected)
328
+ if (pending.bytes !== expected) {
329
+ if (pending.nlink === 1 && expected.startsWith(pending.bytes)) {
330
+ await retryTurn(attempt);
331
+ continue;
332
+ }
320
333
  return fail();
321
- if (pending.nlink !== 1)
334
+ }
335
+ if (pending.nlink !== 1) {
336
+ await retryTurn(attempt);
322
337
  continue;
338
+ }
323
339
  }
324
340
  else {
325
341
  /* A concurrent unlink can make a just-read two-link final become one-link. */
326
- if (pending === null || pending.nlink !== 2)
342
+ if (pending === null || pending.nlink !== 2) {
343
+ await retryTurn(attempt);
327
344
  continue;
345
+ }
328
346
  if (!sameInode(final, pending) || pending.bytes !== expected)
329
347
  return fail();
330
348
  }
@@ -337,6 +355,7 @@ const reconcilePublishedIdentity = async (root, file, expected) => {
337
355
  return fail();
338
356
  if (await openIdentity(pendingPath(file), [1]) === null)
339
357
  return;
358
+ await retryTurn(attempt);
340
359
  }
341
360
  return fail();
342
361
  };
@@ -357,7 +376,7 @@ const exactPublishedIdentity = async (root, file, content) => {
357
376
  };
358
377
  const publishIdentity = async (root, file, content, options) => {
359
378
  const pending = pendingPath(file);
360
- for (let attempt = 0; attempt < 16; attempt += 1) {
379
+ for (let attempt = 0; attempt < IDENTITY_RETRY_ATTEMPTS; attempt += 1) {
361
380
  if (await exactPublishedIdentity(root, file, content))
362
381
  return;
363
382
  let created = false;
@@ -385,13 +404,20 @@ const publishIdentity = async (root, file, content, options) => {
385
404
  if (pendingRecord === null) {
386
405
  if (await exactPublishedIdentity(root, file, content))
387
406
  return;
407
+ await retryTurn(attempt);
388
408
  continue;
389
409
  }
390
- if (pendingRecord.bytes !== content)
410
+ if (pendingRecord.bytes !== content) {
411
+ if (pendingRecord.nlink === 1 && content.startsWith(pendingRecord.bytes)) {
412
+ await retryTurn(attempt);
413
+ continue;
414
+ }
391
415
  return fail();
416
+ }
392
417
  if (pendingRecord.nlink === 2) {
393
418
  if (await exactPublishedIdentity(root, file, content))
394
419
  return;
420
+ await retryTurn(attempt);
395
421
  continue;
396
422
  }
397
423
  if (created)
@@ -409,6 +435,7 @@ const publishIdentity = async (root, file, content, options) => {
409
435
  /* EEXIST may mean another exact binder linked first or a final vanished; retry only after an exact proof. */
410
436
  if (await exactPublishedIdentity(root, file, content))
411
437
  return;
438
+ await retryTurn(attempt);
412
439
  }
413
440
  return fail();
414
441
  };
@@ -0,0 +1,2 @@
1
+ /** Strict portable image-reference grammar shared by target resolution and local helper setup. */
2
+ export declare const parseDockerBaseImageReference: (raw: unknown) => string | null;
@@ -0,0 +1,11 @@
1
+ import { parseImageReference } from "../distribution/index.js";
2
+ const CONFIG_DIGEST = /^sha256:[a-f0-9]{64}$/u;
3
+ const MAX_REFERENCE_BYTES = 512;
4
+ /** Strict portable image-reference grammar shared by target resolution and local helper setup. */
5
+ export const parseDockerBaseImageReference = (raw) => {
6
+ if (typeof raw !== "string" || raw !== raw.trim() || raw.includes("\0")
7
+ || Buffer.byteLength(raw, "utf8") > MAX_REFERENCE_BYTES || CONFIG_DIGEST.test(raw)
8
+ || parseImageReference(raw) === null)
9
+ return null;
10
+ return raw;
11
+ };
@@ -5,6 +5,12 @@ import { type DockerSecretExecutor } from "./dockerSecretsProvider.js";
5
5
  import { type DockerWorldServiceExecutor } from "./dockerWorldServiceProvider.js";
6
6
  import type { DockerEvidenceExportExecutor } from "./evidenceExportProvider.js";
7
7
  import { type DockerCommandSpawn } from "./dockerCommandExecutorCore.js";
8
+ export declare const PUBLIC_ARTIFACT_READER_PROGRAM: string;
9
+ /** Private control signal emitted only for an exact missing public path probe. */
10
+ export declare class DockerPublicArtifactNotPresentError extends Error {
11
+ readonly kind: "not_present";
12
+ constructor();
13
+ }
8
14
  export interface DockerTargetExecutors {
9
15
  readonly artifact: DockerArtifactExecutor;
10
16
  readonly attachment: DockerOrganizationAttachmentExecutor;
@@ -19,6 +25,11 @@ export interface DockerTargetExecutors {
19
25
  readonly secret: DockerSecretExecutor;
20
26
  readonly world: DockerWorldServiceExecutor;
21
27
  }
28
+ export declare const createPublicArtifactReadCommand: (input: {
29
+ readonly containerId: string;
30
+ readonly context: string;
31
+ readonly path: string;
32
+ }) => string[];
22
33
  export interface CreateDockerTargetExecutorsOptions {
23
34
  readonly dockerCommand?: string;
24
35
  readonly spawn?: DockerCommandSpawn;
@@ -5,8 +5,34 @@ import { DockerArtifactProviderError } from "./dockerArtifactsProvider.js";
5
5
  import { DockerResourceProviderError } from "./dockerResourcesProvider.js";
6
6
  import { DockerSecretProviderError } from "./dockerSecretsProvider.js";
7
7
  import { DockerWorldServiceProviderError } from "./dockerWorldServiceProvider.js";
8
- import { MAX_TARGET_PUBLIC_ARTIFACT_BYTES } from "./publicArtifactSnapshot.js";
8
+ import { MAX_TARGET_PUBLIC_ARTIFACT_BYTES, isTargetPublicArtifactPath } from "./publicArtifactSnapshot.js";
9
9
  import { DOCKER_COMMAND_ERROR, DockerCommandFailure, executeDockerCommandCore } from "./dockerCommandExecutorCore.js";
10
+ const PUBLIC_ARTIFACT_NOT_PRESENT_EXIT = 42;
11
+ // The public directory is a separately mounted tmpfs and paths are restricted
12
+ // to direct children. Open the leaf exactly once with O_NOFOLLOW: no path
13
+ // preflight is permitted because it would turn a replacement into a TOCTOU
14
+ // disclosure. Only ENOENT from that open denotes the terminal absence state.
15
+ export const PUBLIC_ARTIFACT_READER_PROGRAM = [
16
+ "import fs from 'node:fs';",
17
+ "const path = process.argv[1];",
18
+ "let fd;",
19
+ "try { fd = fs.openSync(path, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW); }",
20
+ "catch (error) { process.exitCode = error?.code === 'ENOENT' ? 42 : 43; }",
21
+ "if (fd !== undefined) {",
22
+ " try {",
23
+ " if (!fs.fstatSync(fd).isFile()) process.exitCode = 43;",
24
+ " else { const chunks = []; let bytes; do { const chunk = Buffer.allocUnsafe(65536); bytes = fs.readSync(fd, chunk); if (bytes) chunks.push(chunk.subarray(0, bytes)); } while (bytes); process.stdout.write(Buffer.concat(chunks)); }",
25
+ " } catch { process.exitCode = 43; } finally { fs.closeSync(fd); }",
26
+ "}"
27
+ ].join(" ");
28
+ /** Private control signal emitted only for an exact missing public path probe. */
29
+ export class DockerPublicArtifactNotPresentError extends Error {
30
+ kind = "not_present";
31
+ constructor() {
32
+ super("Target public artifact is not present");
33
+ this.name = "DockerPublicArtifactNotPresentError";
34
+ }
35
+ }
10
36
  const role = (args) => {
11
37
  if (args[0] === "--context") {
12
38
  return args.length >= 3 && /^[a-z][a-z0-9_-]{0,63}$/u.test(args[1]) ? args.slice(2) : [];
@@ -19,6 +45,23 @@ const role = (args) => {
19
45
  }
20
46
  return args;
21
47
  };
48
+ const exactPublicArtifactAbsence = (args, error) => {
49
+ if (!(error instanceof DockerCommandFailure)
50
+ || error.code !== PUBLIC_ARTIFACT_NOT_PRESENT_EXIT || error.stderr !== ""
51
+ || error.stdoutBytes !== 0)
52
+ return undefined;
53
+ const command = role(args);
54
+ const path = command[8];
55
+ if (command.length !== 9
56
+ || command[0] !== "container" || command[1] !== "exec"
57
+ || !/^[a-f0-9]{64}$/u.test(command[2])
58
+ || command[3] !== "/usr/local/bin/node" || command[4] !== "--input-type=module"
59
+ || command[5] !== "-e" || command[6] !== PUBLIC_ARTIFACT_READER_PROGRAM
60
+ || command[7] !== "spawnfile-public-artifact-read"
61
+ || !isTargetPublicArtifactPath(path))
62
+ return undefined;
63
+ return new DockerPublicArtifactNotPresentError();
64
+ };
22
65
  const exactMissingImageReference = (requested, reported) => {
23
66
  if (requested === undefined || reported === requested)
24
67
  return reported === requested;
@@ -112,6 +155,11 @@ const classify = (kind, args, error) => {
112
155
  }
113
156
  return new Error(DOCKER_COMMAND_ERROR);
114
157
  };
158
+ export const createPublicArtifactReadCommand = (input) => [
159
+ "--context", input.context, "container", "exec", input.containerId,
160
+ "/usr/local/bin/node", "--input-type=module", "-e", PUBLIC_ARTIFACT_READER_PROGRAM,
161
+ "spawnfile-public-artifact-read", input.path
162
+ ];
115
163
  const normalizeCommandOptions = (raw, allowStdin) => {
116
164
  if (!raw || typeof raw !== "object" || Array.isArray(raw) || nodeTypes.isProxy(raw)
117
165
  || Object.getPrototypeOf(raw) !== Object.prototype)
@@ -189,7 +237,10 @@ export const createDockerTargetExecutors = (options = {}) => {
189
237
  });
190
238
  return { bytes: Uint8Array.from(result.stdout) };
191
239
  }
192
- catch {
240
+ catch (error) {
241
+ const absence = exactPublicArtifactAbsence(args, error);
242
+ if (absence)
243
+ throw absence;
193
244
  throw new Error(DOCKER_COMMAND_ERROR);
194
245
  }
195
246
  },
@@ -18,7 +18,8 @@ export type DockerCommandSpawn = (file: string, args: readonly string[], options
18
18
  export declare class DockerCommandFailure extends Error {
19
19
  readonly code: number;
20
20
  readonly stderr: string;
21
- constructor(code: number, stderr: string);
21
+ readonly stdoutBytes: number;
22
+ constructor(code: number, stderr: string, stdoutBytes: number);
22
23
  }
23
24
  export interface DockerCommandCoreOptions {
24
25
  readonly binary: boolean;
@@ -7,10 +7,12 @@ const FALLBACK_MS = 50;
7
7
  export class DockerCommandFailure extends Error {
8
8
  code;
9
9
  stderr;
10
- constructor(code, stderr) {
10
+ stdoutBytes;
11
+ constructor(code, stderr, stdoutBytes) {
11
12
  super(DOCKER_COMMAND_ERROR);
12
13
  this.code = code;
13
14
  this.stderr = stderr;
15
+ this.stdoutBytes = stdoutBytes;
14
16
  }
15
17
  }
16
18
  const ordinaryOptions = (raw) => {
@@ -197,7 +199,7 @@ export const executeDockerCommandCore = (spawnCommand, file, args, rawOptions) =
197
199
  return;
198
200
  }
199
201
  if (closeCode !== 0) {
200
- settle(new DockerCommandFailure(closeCode, stderr));
202
+ settle(new DockerCommandFailure(closeCode, stderr, typeof stdout === "string" ? Buffer.byteLength(stdout, "utf8") : stdout.byteLength));
201
203
  return;
202
204
  }
203
205
  settle(undefined, { stderr, stdout });
@@ -1,5 +1,5 @@
1
- import type { DockerTargetExecutors } from "./dockerCommandExecutor.js";
2
- import { type TargetPublicArtifactSnapshot } from "./publicArtifactSnapshot.js";
1
+ import { type DockerTargetExecutors } from "./dockerCommandExecutor.js";
2
+ import { type TargetPublicArtifactSnapshotResult } from "./publicArtifactSnapshot.js";
3
3
  import { type DockerWorldServiceExecutor } from "./dockerWorldServiceProvider.js";
4
4
  import type { WorldServiceAuthorityStore } from "./dockerWorldServiceStore.js";
5
5
  export declare const TARGET_PUBLIC_ARTIFACT_SNAPSHOT_ERROR = "Target public artifact snapshot failed";
@@ -12,6 +12,6 @@ export interface DockerPublicArtifactSnapshotOptions {
12
12
  readonly timeoutMs: number;
13
13
  }
14
14
  export interface PublicArtifactSnapshotReader {
15
- snapshot(raw: unknown): Promise<TargetPublicArtifactSnapshot>;
15
+ snapshot(raw: unknown): Promise<TargetPublicArtifactSnapshotResult>;
16
16
  }
17
17
  export declare const createDockerPublicArtifactSnapshotReader: (options: DockerPublicArtifactSnapshotOptions) => PublicArtifactSnapshotReader;
@@ -1,5 +1,6 @@
1
1
  import { SpawnfileError } from "../shared/index.js";
2
- import { createTargetPublicArtifactSnapshot, parseTargetPublicArtifactSnapshotRequest } from "./publicArtifactSnapshot.js";
2
+ import { createPublicArtifactReadCommand, DockerPublicArtifactNotPresentError } from "./dockerCommandExecutor.js";
3
+ import { createTargetPublicArtifactSnapshot, createTargetPublicArtifactSnapshotNotPresent, parseTargetPublicArtifactSnapshotRequest } from "./publicArtifactSnapshot.js";
3
4
  import { inspectDockerWorldService, sameWorldServiceValue, worldServiceSpecForBinding } from "./dockerWorldServiceLifecycle.js";
4
5
  export const TARGET_PUBLIC_ARTIFACT_SNAPSHOT_ERROR = "Target public artifact snapshot failed";
5
6
  const CONTEXT_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/u;
@@ -29,45 +30,26 @@ const exactBinding = async (request, options) => {
29
30
  return binding;
30
31
  };
31
32
  const readPublicArtifact = async (containerId, request, options) => {
33
+ let result;
32
34
  try {
33
- const resolved = await options.contentExecutor("docker", [
34
- "--context", options.context,
35
- "container", "exec",
35
+ result = await options.contentExecutor("docker", createPublicArtifactReadCommand({
36
36
  containerId,
37
- "/usr/bin/readlink",
38
- "-e",
39
- request.artifact.path
40
- ], {
37
+ context: options.context,
38
+ path: request.artifact.path
39
+ }), {
41
40
  signal: options.signal,
42
41
  timeout: options.timeoutMs
43
42
  });
44
- if (!resolved || !(resolved.bytes instanceof Uint8Array))
45
- return fail();
46
- const resolvedPath = new TextDecoder("utf-8", { fatal: true })
47
- .decode(resolved.bytes);
48
- // Reject the final file and every parent alias. The world may publish only
49
- // the exact regular path that its descriptor declared, never a symlink
50
- // into private evidence, credentials, or another runtime surface.
51
- if (resolvedPath !== `${request.artifact.path}\n`)
52
- return fail();
53
- const result = await options.contentExecutor("docker", [
54
- "--context", options.context,
55
- "container", "exec",
56
- containerId,
57
- "/bin/cat",
58
- request.artifact.path
59
- ], {
60
- signal: options.signal,
61
- timeout: options.timeoutMs
62
- });
63
- if (!result || !(result.bytes instanceof Uint8Array)
64
- || result.bytes.byteLength > request.artifact.max_bytes)
65
- return fail();
66
- return Uint8Array.from(result.bytes);
67
43
  }
68
- catch {
44
+ catch (error) {
45
+ if (error instanceof DockerPublicArtifactNotPresentError)
46
+ return null;
69
47
  return fail();
70
48
  }
49
+ if (!result || !(result.bytes instanceof Uint8Array)
50
+ || result.bytes.byteLength > request.artifact.max_bytes)
51
+ return fail();
52
+ return Uint8Array.from(result.bytes);
71
53
  };
72
54
  class DockerPublicArtifactSnapshotReader {
73
55
  #options;
@@ -93,7 +75,9 @@ class DockerPublicArtifactSnapshotReader {
93
75
  if (!after || after.containerId !== before.containerId
94
76
  || after.status !== "running")
95
77
  return fail();
96
- return createTargetPublicArtifactSnapshot({ content, request });
78
+ return content === null
79
+ ? createTargetPublicArtifactSnapshotNotPresent(request)
80
+ : createTargetPublicArtifactSnapshot({ content, request });
97
81
  }
98
82
  }
99
83
  export const createDockerPublicArtifactSnapshotReader = (options) => new DockerPublicArtifactSnapshotReader(options);
@@ -12,6 +12,7 @@ export type DockerDeploymentTarget = {
12
12
  };
13
13
  export type DockerTargetExecFile = (file: string, args: string[], options: {
14
14
  signal?: AbortSignal;
15
+ stdin?: Uint8Array;
15
16
  timeout: number;
16
17
  }) => Promise<{
17
18
  stderr: string;
@@ -1,7 +1,6 @@
1
- import { execFile as execFileCallback } from "node:child_process";
2
1
  import { type SelectedTargetReceipt } from "./contracts.js";
3
2
  import type { ResolveDockerDeploymentTargetOptions, SelectTargetOptions } from "./dockerTarget.js";
4
- export declare const defaultDockerTargetExecFile: typeof execFileCallback.__promisify__;
3
+ export { defaultDockerTargetExecFile } from "./dockerTargetExecFile.js";
5
4
  /** Private owner-only endpoint binding. Never export this module through the target barrel. */
6
5
  export interface ResolvedSelectedTargetBinding {
7
6
  readonly endpoint: string;
@@ -1,10 +1,9 @@
1
- import { execFile as execFileCallback } from "node:child_process";
2
1
  import { createHash } from "node:crypto";
3
- import { promisify } from "node:util";
4
2
  import { SpawnfileError } from "../shared/index.js";
5
3
  import { SELECTED_TARGET_VERSION, parseOpaqueTargetHandle, parseSelectedTargetReceipt } from "./contracts.js";
6
4
  import { createEndpointFingerprint } from "./dockerEndpointFingerprint.js";
7
- export const defaultDockerTargetExecFile = promisify(execFileCallback);
5
+ import { defaultDockerTargetExecFile } from "./dockerTargetExecFile.js";
6
+ export { defaultDockerTargetExecFile } from "./dockerTargetExecFile.js";
8
7
  const TARGET_SELECTION_ERROR = "Target selection failed";
9
8
  const DOCKER_CONTEXT_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/u;
10
9
  const MAX_RAW_EXECUTOR_STDOUT_BYTES = 4_096;
@@ -0,0 +1,19 @@
1
+ import type { DockerTargetExecFile } from "./dockerTarget.js";
2
+ export type DockerTargetExecutionFailureKind = "aborted" | "cleanup_failed" | "failed" | "timeout";
3
+ export declare class DockerTargetExecutionError extends Error {
4
+ readonly kind: DockerTargetExecutionFailureKind;
5
+ constructor(kind: DockerTargetExecutionFailureKind);
6
+ }
7
+ export declare class DockerTargetCommandFailure extends DockerTargetExecutionError {
8
+ readonly code: number;
9
+ readonly stderr: string;
10
+ readonly stdoutBytes: number;
11
+ constructor(code: number, stderr: string, stdoutBytes: number);
12
+ }
13
+ /**
14
+ * Docker target probe/build transport with exact stdin and bounded tree teardown.
15
+ * POSIX children lead a private process group so timeout/abort cannot strand a
16
+ * buildx descendant that inherited the CLI's stdio handles.
17
+ */
18
+ export declare const createBoundedDockerTargetExecFile: () => DockerTargetExecFile;
19
+ export declare const defaultDockerTargetExecFile: DockerTargetExecFile;
@@ -0,0 +1,194 @@
1
+ import { spawn } from "node:child_process";
2
+ const ERROR = "Docker target command failed";
3
+ const OUTPUT_CAP = 65_536;
4
+ const TERM_GRACE_MS = 50;
5
+ const KILL_GRACE_MS = 250;
6
+ export class DockerTargetExecutionError extends Error {
7
+ kind;
8
+ constructor(kind) {
9
+ super(ERROR);
10
+ this.name = "DockerTargetExecutionError";
11
+ this.kind = kind;
12
+ }
13
+ }
14
+ export class DockerTargetCommandFailure extends DockerTargetExecutionError {
15
+ code;
16
+ stderr;
17
+ stdoutBytes;
18
+ constructor(code, stderr, stdoutBytes) {
19
+ super("failed");
20
+ this.name = "DockerTargetCommandFailure";
21
+ this.code = code;
22
+ this.stderr = stderr;
23
+ this.stdoutBytes = stdoutBytes;
24
+ }
25
+ }
26
+ const decode = (chunks) => {
27
+ try {
28
+ return new TextDecoder("utf-8", { fatal: true }).decode(Buffer.concat(chunks));
29
+ }
30
+ catch {
31
+ throw new DockerTargetExecutionError("failed");
32
+ }
33
+ };
34
+ /**
35
+ * Docker target probe/build transport with exact stdin and bounded tree teardown.
36
+ * POSIX children lead a private process group so timeout/abort cannot strand a
37
+ * buildx descendant that inherited the CLI's stdio handles.
38
+ */
39
+ export const createBoundedDockerTargetExecFile = () => (file, args, options) => {
40
+ if (typeof file !== "string" || file.length < 1 || file.includes("\0")
41
+ || !Array.isArray(args) || args.some((arg) => typeof arg !== "string" || arg.includes("\0"))
42
+ || !options || !Number.isSafeInteger(options.timeout) || options.timeout < 1
43
+ || options.timeout > 120_000
44
+ || options.signal !== undefined && !(options.signal instanceof AbortSignal)
45
+ || options.stdin !== undefined && !(options.stdin instanceof Uint8Array)) {
46
+ return Promise.reject(new DockerTargetExecutionError("failed"));
47
+ }
48
+ if (options.signal?.aborted) {
49
+ return Promise.reject(new DockerTargetExecutionError("aborted"));
50
+ }
51
+ return new Promise((resolve, reject) => {
52
+ const grouped = process.platform !== "win32";
53
+ let child;
54
+ try {
55
+ child = spawn(file, args, {
56
+ detached: grouped,
57
+ shell: false,
58
+ stdio: ["pipe", "pipe", "pipe"],
59
+ });
60
+ }
61
+ catch {
62
+ reject(new DockerTargetExecutionError("failed"));
63
+ return;
64
+ }
65
+ const stdout = [];
66
+ const stderr = [];
67
+ let stdoutBytes = 0;
68
+ let stderrBytes = 0;
69
+ let terminal;
70
+ let settled = false;
71
+ let termTimer;
72
+ let killTimer;
73
+ const groupAbsent = () => {
74
+ if (!grouped || !child.pid)
75
+ return false;
76
+ try {
77
+ process.kill(-child.pid, 0);
78
+ return false;
79
+ }
80
+ catch (error) {
81
+ return error.code === "ESRCH";
82
+ }
83
+ };
84
+ const signalTree = (signal) => {
85
+ try {
86
+ if (grouped && child.pid)
87
+ process.kill(-child.pid, signal);
88
+ else
89
+ child.kill(signal);
90
+ }
91
+ catch { /* only a later ESRCH liveness probe proves quiescence */ }
92
+ };
93
+ const destroyPipes = () => {
94
+ child.stdin.on("error", () => undefined);
95
+ child.stdout.on("error", () => undefined);
96
+ child.stderr.on("error", () => undefined);
97
+ child.stdin.destroy();
98
+ child.stdout.destroy();
99
+ child.stderr.destroy();
100
+ };
101
+ const cleanup = () => {
102
+ clearTimeout(timeoutTimer);
103
+ if (termTimer)
104
+ clearTimeout(termTimer);
105
+ if (killTimer)
106
+ clearTimeout(killTimer);
107
+ options.signal?.removeEventListener("abort", onAbort);
108
+ };
109
+ const finish = (error, unresolved = false) => {
110
+ if (settled || !unresolved && !groupAbsent())
111
+ return;
112
+ settled = true;
113
+ cleanup();
114
+ destroyPipes();
115
+ reject(error);
116
+ };
117
+ const terminate = (kind) => {
118
+ if (terminal || settled)
119
+ return;
120
+ terminal = new DockerTargetExecutionError(kind);
121
+ signalTree("SIGTERM");
122
+ termTimer = setTimeout(() => {
123
+ signalTree("SIGKILL");
124
+ destroyPipes();
125
+ const started = Date.now();
126
+ const poll = () => {
127
+ if (!terminal || settled)
128
+ return;
129
+ if (groupAbsent()) {
130
+ finish(terminal);
131
+ return;
132
+ }
133
+ signalTree("SIGKILL");
134
+ if (Date.now() - started >= KILL_GRACE_MS) {
135
+ finish(new DockerTargetExecutionError("cleanup_failed"), true);
136
+ return;
137
+ }
138
+ killTimer = setTimeout(poll, 10);
139
+ };
140
+ poll();
141
+ }, TERM_GRACE_MS);
142
+ };
143
+ const append = (target, chunk, output) => {
144
+ const value = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
145
+ if (output === "stdout")
146
+ stdoutBytes += value.byteLength;
147
+ else
148
+ stderrBytes += value.byteLength;
149
+ if (stdoutBytes > OUTPUT_CAP || stderrBytes > OUTPUT_CAP) {
150
+ terminate("failed");
151
+ return;
152
+ }
153
+ target.push(Buffer.from(value));
154
+ };
155
+ function onAbort() { terminate("aborted"); }
156
+ child.stdout.on("data", (chunk) => append(stdout, chunk, "stdout"));
157
+ child.stderr.on("data", (chunk) => append(stderr, chunk, "stderr"));
158
+ child.stdin.on("error", () => terminate("failed"));
159
+ child.on("error", () => terminate("failed"));
160
+ child.on("close", (code) => {
161
+ if (terminal || settled)
162
+ return;
163
+ settled = true;
164
+ cleanup();
165
+ try {
166
+ const stderrText = decode(stderr);
167
+ const stdoutText = decode(stdout);
168
+ if (code !== 0) {
169
+ reject(new DockerTargetCommandFailure(code ?? -1, stderrText, Buffer.byteLength(stdoutText, "utf8")));
170
+ return;
171
+ }
172
+ resolve({ stderr: stderrText, stdout: stdoutText });
173
+ }
174
+ catch (error) {
175
+ reject(error);
176
+ }
177
+ });
178
+ options.signal?.addEventListener("abort", onAbort, { once: true });
179
+ const timeoutTimer = setTimeout(() => terminate("timeout"), options.timeout);
180
+ if (options.signal?.aborted) {
181
+ terminate("aborted");
182
+ return;
183
+ }
184
+ try {
185
+ const input = options.stdin === undefined ? undefined
186
+ : Buffer.from(options.stdin.buffer, options.stdin.byteOffset, options.stdin.byteLength);
187
+ child.stdin.end(input);
188
+ }
189
+ catch {
190
+ terminate("failed");
191
+ }
192
+ });
193
+ };
194
+ export const defaultDockerTargetExecFile = createBoundedDockerTargetExecFile();
@@ -5,6 +5,10 @@ export declare const WORLD_RUNTIME_TMPFS: Readonly<{
5
5
  path: "/tmp";
6
6
  options: "rw,noexec,nosuid,nodev,size=1m,mode=1777";
7
7
  }>;
8
+ export declare const WORLD_PUBLIC_ARTIFACT_TMPFS: Readonly<{
9
+ path: "/tmp/spawnfile-public";
10
+ options: "rw,noexec,nosuid,nodev,size=1m,mode=1777";
11
+ }>;
8
12
  export type DockerWorldServiceFailureKind = "collision" | "not_found";
9
13
  export interface DockerWorldServiceExecutor {
10
14
  (file: string, args: string[], options: {
@@ -9,6 +9,16 @@ export const WORLD_RUNTIME_TMPFS = Object.freeze({
9
9
  path: "/tmp",
10
10
  options: "rw,noexec,nosuid,nodev,size=1m,mode=1777"
11
11
  });
12
+ /*
13
+ * A distinct mount point is a confinement boundary, not merely a convenient
14
+ * directory. The public-artifact reader opens one direct child with
15
+ * O_NOFOLLOW; this mount prevents that child from being hard-linked or
16
+ * replaced with a path from the world root, secrets, or evidence mounts.
17
+ */
18
+ export const WORLD_PUBLIC_ARTIFACT_TMPFS = Object.freeze({
19
+ path: "/tmp/spawnfile-public",
20
+ options: "rw,noexec,nosuid,nodev,size=1m,mode=1777"
21
+ });
12
22
  const MAX_OUTPUT_BYTES = 32_768;
13
23
  const MAX_NAME_LENGTH = 63;
14
24
  const DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/u;
@@ -183,6 +193,7 @@ export const createDockerWorldServiceSpec = (input) => {
183
193
  "--cap-drop", "ALL", "--security-opt", "no-new-privileges=true",
184
194
  "--ipc", "none", "--cgroupns", "private",
185
195
  "--tmpfs", `${WORLD_RUNTIME_TMPFS.path}:${WORLD_RUNTIME_TMPFS.options}`,
196
+ "--tmpfs", `${WORLD_PUBLIC_ARTIFACT_TMPFS.path}:${WORLD_PUBLIC_ARTIFACT_TMPFS.options}`,
186
197
  ...labelArgs,
187
198
  "--mount", `type=volume,src=${evidence.name},dst=${evidenceMountPath},volume-nocopy`,
188
199
  "--mount", `type=volume,src=${secrets.name},dst=${WORLD_SECRETS_PATH},readonly,volume-nocopy`,
@@ -304,8 +315,9 @@ export const parseExpectedDockerWorldService = (stdout, spec) => {
304
315
  && value.PidMode === "" && value.IpcMode === "none" && value.UTSMode === ""
305
316
  && value.UsernsMode === "" && value.CgroupnsMode === "private"
306
317
  && exactRecord(value.Tmpfs)
307
- && exactKeys(value.Tmpfs, [WORLD_RUNTIME_TMPFS.path])
318
+ && exactKeys(value.Tmpfs, [WORLD_RUNTIME_TMPFS.path, WORLD_PUBLIC_ARTIFACT_TMPFS.path])
308
319
  && value.Tmpfs[WORLD_RUNTIME_TMPFS.path] === WORLD_RUNTIME_TMPFS.options
320
+ && value.Tmpfs[WORLD_PUBLIC_ARTIFACT_TMPFS.path] === WORLD_PUBLIC_ARTIFACT_TMPFS.options
309
321
  && value.ReadonlyRootfs === true
310
322
  && JSON.stringify(value.SecurityOpt) === JSON.stringify(["no-new-privileges=true"])
311
323
  && value.LogType === "none" && value.RestartPolicyName === "no"