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
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ export declare const trainingImageSchema: z.ZodString;
3
+ export declare const trainingContainerConfigSchema: z.ZodObject<{
4
+ version: z.ZodEnum<{
5
+ "spawnfile.training-container.v1": "spawnfile.training-container.v1";
6
+ "spawnfile.training-container.v3": "spawnfile.training-container.v3";
7
+ }>;
8
+ dockerContext: z.ZodString;
9
+ inputs: z.ZodArray<z.ZodObject<{
10
+ source: z.ZodString;
11
+ destination: z.ZodString;
12
+ }, z.core.$strict>>;
13
+ output: z.ZodObject<{
14
+ source: z.ZodString;
15
+ destination: z.ZodLiteral<"/run/training/output">;
16
+ }, z.core.$strict>;
17
+ auth: z.ZodArray<z.ZodObject<{
18
+ source: z.ZodString;
19
+ provider: z.ZodEnum<{
20
+ codex: "codex";
21
+ claude: "claude";
22
+ }>;
23
+ }, z.core.$strict>>;
24
+ broker: z.ZodOptional<z.ZodObject<{
25
+ engine: z.ZodLiteral<"grok">;
26
+ realmVolume: z.ZodString;
27
+ bootstrap: z.ZodString;
28
+ declaration: z.ZodString;
29
+ }, z.core.$strict>>;
30
+ }, z.core.$strict>;
31
+ export type TrainingContainerConfig = z.infer<typeof trainingContainerConfigSchema>;
@@ -0,0 +1,33 @@
1
+ import path from "node:path";
2
+ import { z } from "zod";
3
+ const hostPath = z.string().min(1).refine((value) => path.isAbsolute(value) && !/[,\r\n\0]/u.test(value), "Expected an absolute bind path");
4
+ const inputPath = z.string().regex(/^\/run\/training\/inputs\/[A-Za-z0-9._/-]+$/u).refine((value) => path.posix.normalize(value) === value && !value.endsWith("/"));
5
+ export const trainingImageSchema = z.string().regex(/^(?:sha256:[a-f0-9]{64}|[A-Za-z0-9][A-Za-z0-9._:/-]*@sha256:[a-f0-9]{64})$/u);
6
+ const brokerLaunchSchema = z.object({
7
+ engine: z.literal("grok"),
8
+ /** The named Docker volume holding the training Grok realm: `auth.json` and the broker credential journal, nothing else. */
9
+ realmVolume: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/u),
10
+ /** Host leaf of the dedicated training Grok login. Never the desktop `~/.grok/auth.json`. */
11
+ bootstrap: hostPath,
12
+ /** `spawnfile.training-broker.v1`, written beside the launch config and bound read-only into the container. */
13
+ declaration: hostPath
14
+ }).strict();
15
+ export const trainingContainerConfigSchema = z.object({
16
+ version: z.enum(["spawnfile.training-container.v1", "spawnfile.training-container.v3"]),
17
+ dockerContext: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/u),
18
+ inputs: z.array(z.object({ source: hostPath, destination: inputPath }).strict()).min(1).max(64),
19
+ output: z.object({ source: hostPath, destination: z.literal("/run/training/output") }).strict(),
20
+ auth: z.array(z.object({ source: hostPath, provider: z.enum(["codex", "claude"]) }).strict()).max(2),
21
+ /** Present only on `spawnfile.training-container.v3`: the brokered Grok slot this container runs as root. */
22
+ broker: brokerLaunchSchema.optional()
23
+ }).strict().superRefine((value, context) => {
24
+ const destinations = value.inputs.map((entry) => entry.destination);
25
+ if (destinations.some((entry, index) => destinations.some((other, otherIndex) => otherIndex !== index && (entry === other || entry.startsWith(`${other}/`))))) {
26
+ context.addIssue({ code: "custom", message: "Input destinations must not overlap" });
27
+ }
28
+ if (new Set(value.auth.map((entry) => entry.provider)).size !== value.auth.length)
29
+ context.addIssue({ code: "custom", message: "Duplicate auth provider" });
30
+ if ((value.version === "spawnfile.training-container.v3") !== (value.broker !== undefined)) {
31
+ context.addIssue({ code: "custom", message: "Only spawnfile.training-container.v3 declares a broker slot, and it always does" });
32
+ }
33
+ });
@@ -0,0 +1,4 @@
1
+ export { trainingContainerConfigSchema, trainingImageSchema } from "./contract.js";
2
+ export type { TrainingContainerConfig } from "./contract.js";
3
+ export { launchTrainingContainer } from "./launch.js";
4
+ export type { LaunchTrainingContainerOptions } from "./launch.js";
@@ -0,0 +1,2 @@
1
+ export { trainingContainerConfigSchema, trainingImageSchema } from "./contract.js";
2
+ export { launchTrainingContainer } from "./launch.js";
@@ -0,0 +1,18 @@
1
+ import type { TrainingContext } from "../contract.js";
2
+ import { type TrainingDockerProcess } from "./process.js";
3
+ export interface LaunchTrainingContainerOptions {
4
+ image: string;
5
+ configPath: string;
6
+ context: TrainingContext;
7
+ args: readonly string[];
8
+ timeoutMs: number;
9
+ signal?: AbortSignal;
10
+ streams: {
11
+ stdout(line: string): void;
12
+ stderr(line: string): void;
13
+ };
14
+ process?: TrainingDockerProcess;
15
+ preparationPath?: string;
16
+ repairPath?: string;
17
+ }
18
+ export declare const launchTrainingContainer: (options: LaunchTrainingContainerOptions) => Promise<number>;
@@ -0,0 +1,173 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { chmod, mkdtemp, readFile, realpath, rm, stat, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { DAIMON_CODEX_NATIVE_SANDBOX_DOCKER_SECURITY_OPTS } from "../../../shared/index.js";
5
+ import { assertNotDesktopGrokAuth } from "../broker/entrypoint.js";
6
+ import { TRAINING_BROKER_ENTRYPOINT, trainingBrokerMounts, trainingBrokerSecurityArgs, trainingBrokerTmpfsTargets } from "./security.js";
7
+ import { parseDetachedContainerInspect } from "../../runProjectDocker.js";
8
+ import { trainingImageSchema } from "./contract.js";
9
+ import { prepareTrainingContainer } from "./prepare.js";
10
+ import { runTrainingDocker } from "./process.js";
11
+ import { repairEnvelopeSchema } from "../repair/contract.js";
12
+ import { hashJson } from "../preparation/files.js";
13
+ import { parseTrainingMappedPreparation } from "../preparation/contract.js";
14
+ const inspectFormat = "{{json .Id}}\n{{json .Name}}\n{{json .Image}}\n{{json .Config.Labels}}";
15
+ export const launchTrainingContainer = async (options) => {
16
+ if (options.signal?.aborted)
17
+ return 130;
18
+ const image = trainingImageSchema.parse(options.image);
19
+ const uid = process.getuid?.(), gid = process.getgid?.();
20
+ if (uid === undefined || gid === undefined || uid === 0)
21
+ throw Error("Training requires an explicit non-root local user");
22
+ const configBytes = await readFile(options.configPath, "utf8");
23
+ if (Buffer.byteLength(configBytes) > 1024 * 1024)
24
+ throw Error("Training launch config exceeds 1 MiB");
25
+ const prepared = await prepareTrainingContainer(JSON.parse(configBytes), options.context, options.args);
26
+ // D2: the training Grok login is a dedicated one. Refuse the developer's desktop leaf before Docker ever sees it.
27
+ if (prepared.config.broker)
28
+ assertNotDesktopGrokAuth(prepared.config.broker.bootstrap);
29
+ if (options.preparationPath) {
30
+ if (await realpath(options.preparationPath) !== options.preparationPath)
31
+ throw Error("Preparation receipt path must be canonical");
32
+ parseTrainingMappedPreparation(JSON.parse(await readFile(options.preparationPath, "utf8")));
33
+ }
34
+ if (options.repairPath) {
35
+ if (await realpath(options.repairPath) !== options.repairPath)
36
+ throw Error("Repair receipt path must be canonical");
37
+ const raw = JSON.parse(await readFile(options.repairPath, "utf8"));
38
+ const envelope = repairEnvelopeSchema.parse(raw);
39
+ if (hashJson(raw.receipt) !== envelope.digest || envelope.receipt.current.imageId !== image ||
40
+ !prepared.config.inputs.some(input => input.destination === envelope.receipt.parent.root))
41
+ throw Error("Repair receipt launch identity mismatch");
42
+ }
43
+ const execute = options.process ?? runTrainingDocker;
44
+ const controller = new AbortController(), deadline = Date.now() + options.timeoutMs;
45
+ let interrupted = false, timedOut = false;
46
+ const interrupt = () => { interrupted = true; controller.abort(); };
47
+ const timer = setTimeout(() => { timedOut = true; controller.abort(); }, options.timeoutMs);
48
+ options.signal?.addEventListener("abort", interrupt, { once: true });
49
+ process.once("SIGINT", interrupt);
50
+ process.once("SIGTERM", interrupt);
51
+ if (options.signal?.aborted)
52
+ interrupt();
53
+ const prefix = ["--context", prepared.config.dockerContext];
54
+ const call = async (args, cleanup = false, stream = false) => {
55
+ if (!cleanup && controller.signal.aborted)
56
+ throw Error("Container operation cancelled");
57
+ return execute([...prefix, ...args], {
58
+ timeoutMs: cleanup ? 10_000 : Math.max(1, deadline - Date.now()),
59
+ ...(cleanup ? {} : { signal: controller.signal }), ...(stream ? options.streams : {})
60
+ });
61
+ };
62
+ const name = `spawnfile-training-${randomUUID()}`;
63
+ const labels = { "com.spawnfile.training.owner": name };
64
+ let privateRoot, containerId, creationAttempted = false;
65
+ let expectedImage, lastLine = "", closureVerified = false;
66
+ try {
67
+ const endpoint = await execute(["context", "inspect", prepared.config.dockerContext, "--format", "{{json .Endpoints.docker.Host}}"], { timeoutMs: 10_000, signal: controller.signal });
68
+ if (endpoint.code !== 0 || !/^unix:\/\//u.test(JSON.parse(endpoint.stdout)))
69
+ throw Error("Training requires an explicitly selected local Unix Docker context");
70
+ const inspected = await call(["image", "inspect", image, "--format", "{{.Id}}"]);
71
+ expectedImage = inspected.stdout.trim();
72
+ if (inspected.code !== 0 || !/^sha256:[a-f0-9]{64}$/u.test(expectedImage) || (image.startsWith("sha256:") && image !== expectedImage))
73
+ throw Error("Training image must be locally available with an immutable identity");
74
+ privateRoot = await realpath(await mkdtemp(path.join(path.dirname(prepared.config.output.source), ".spawnfile-training-container-")));
75
+ await chmod(privateRoot, 0o700);
76
+ const contextFile = path.join(privateRoot, "context.json");
77
+ await writeFile(contextFile, JSON.stringify(prepared.context), { mode: 0o444, flag: "wx" });
78
+ const mounts = [...prepared.config.inputs.map((entry) => `type=bind,src=${entry.source},dst=${entry.destination},readonly`),
79
+ `type=bind,src=${prepared.config.output.source},dst=/run/training/output`,
80
+ `type=bind,src=${contextFile},dst=/run/paideia/context.json,readonly`,
81
+ ...options.preparationPath ? [`type=bind,src=${options.preparationPath},dst=/run/paideia/preparation.json,readonly`] : [],
82
+ ...options.repairPath ? [`type=bind,src=${options.repairPath},dst=/run/paideia/repair.json,readonly`] : [],
83
+ ...prepared.config.auth.map((entry) => `type=bind,src=${entry.source},dst=/run/paideia-auth/${entry.provider},readonly`)];
84
+ const broker = prepared.config.broker;
85
+ // A brokered Grok slot runs the launcher, the broker and the model's own worker uid inside this container, so it
86
+ // starts as root with the production Daimon capability set instead of the host user with no capabilities at all.
87
+ const privilege = broker
88
+ ? [...await trainingBrokerSecurityArgs(privateRoot), "--pids-limit", "2048",
89
+ ...trainingBrokerTmpfsTargets().flatMap((entry) => ["--tmpfs", `${entry.path}:rw,nosuid,nodev,size=${entry.size},mode=${entry.mode}`])]
90
+ : ["--user", `${uid}:${gid}`, "--cap-drop", "ALL", "--security-opt", "no-new-privileges",
91
+ ...DAIMON_CODEX_NATIVE_SANDBOX_DOCKER_SECURITY_OPTS, "--pids-limit", "512",
92
+ "--tmpfs", `/tmp:rw,nosuid,nodev,size=1g,uid=${uid},gid=${gid},mode=1777`, "--tmpfs", `/work:rw,nosuid,nodev,size=4g,uid=${uid},gid=${gid},mode=700`,
93
+ "--tmpfs", `/home/training:rw,nosuid,nodev,size=1g,uid=${uid},gid=${gid},mode=700`];
94
+ const args = ["create", "--name", name, "--label", `com.spawnfile.training.owner=${name}`,
95
+ "--init", "--read-only", ...privilege,
96
+ "--env", "HOME=/home/training", "--workdir", "/work", "--entrypoint", broker ? TRAINING_BROKER_ENTRYPOINT : "/opt/training/bin/train",
97
+ ...[...mounts, ...(broker ? trainingBrokerMounts(broker) : [])].flatMap((mount) => ["--mount", mount]),
98
+ ...(prepared.viewerPort === undefined ? [] : ["--publish", `127.0.0.1:${prepared.viewerPort}:${prepared.viewerPort}`]), expectedImage,
99
+ "train", "--spawnfile-context", "/run/paideia/context.json", ...prepared.args];
100
+ creationAttempted = true;
101
+ const created = await call(args);
102
+ containerId = created.stdout.trim();
103
+ if (created.code !== 0 || !/^[a-f0-9]{64}$/u.test(containerId)) {
104
+ let diagnostic = created.stderr;
105
+ for (const auth of prepared.config.auth)
106
+ diagnostic = diagnostic.replaceAll(auth.source, "[auth source]");
107
+ diagnostic = diagnostic.replace(/\p{Cc}/gu, " ").trim().slice(0, 2048);
108
+ throw Error(`Docker did not return a valid training container identity${diagnostic ? `: ${diagnostic}` : ""}`);
109
+ }
110
+ const identity = await call(["inspect", "--format", inspectFormat, containerId]);
111
+ if (identity.code !== 0 || parseDetachedContainerInspect(identity.stdout, containerId, labels, name).imageId !== expectedImage)
112
+ throw Error("Training container identity mismatch");
113
+ if (controller.signal.aborted)
114
+ throw Error("Container operation cancelled");
115
+ const result = await execute([...prefix, "start", "--attach", containerId], {
116
+ timeoutMs: Math.max(1, deadline - Date.now()), signal: controller.signal,
117
+ stdout: (line) => { if (line.trim())
118
+ lastLine = line; options.streams.stdout(line); }, stderr: options.streams.stderr
119
+ });
120
+ const terminal = await call(["inspect", "--format", "{{json .State}}", containerId]);
121
+ const state = JSON.parse(terminal.stdout);
122
+ if (terminal.code !== 0 || state.Running !== false || !Number.isInteger(state.ExitCode) || result.code !== state.ExitCode)
123
+ throw Error("Training container final state is unverified");
124
+ if (state.ExitCode !== 0 && state.ExitCode !== 1)
125
+ return state.ExitCode;
126
+ const receipt = JSON.parse(lastLine);
127
+ if (receipt.status !== "completed" || typeof receipt.index !== "string" || !receipt.index.startsWith("/run/training/output/") || path.posix.normalize(receipt.index) !== receipt.index)
128
+ throw Error("Training exited without a valid final receipt");
129
+ const artifact = path.join(prepared.config.output.source, receipt.index.slice("/run/training/output/".length));
130
+ if (await realpath(artifact) !== artifact || !(await stat(artifact)).isFile())
131
+ throw Error("Training completion artifact is missing or escapes output");
132
+ return state.ExitCode;
133
+ }
134
+ catch (error) {
135
+ if (interrupted)
136
+ return 130;
137
+ if (timedOut)
138
+ throw Error("Container training exceeded command deadline");
139
+ throw error;
140
+ }
141
+ finally {
142
+ clearTimeout(timer);
143
+ options.signal?.removeEventListener("abort", interrupt);
144
+ process.removeListener("SIGINT", interrupt);
145
+ process.removeListener("SIGTERM", interrupt);
146
+ try {
147
+ if (creationAttempted) {
148
+ // A timed-out create may still have created our uniquely labelled container.
149
+ const found = await call(["inspect", "--format", inspectFormat, name], true);
150
+ if (found.code === 0) {
151
+ const id = JSON.parse(found.stdout.split("\n")[0]);
152
+ if (typeof id !== "string" || parseDetachedContainerInspect(found.stdout, id, labels, name).imageId !== expectedImage || (containerId && /^[a-f0-9]{64}$/u.test(containerId) && id !== containerId))
153
+ throw Error("Refusing cleanup of unverified training container");
154
+ const removed = await call(["rm", "--force", id], true);
155
+ const remaining = await call(["container", "ls", "--all", "--no-trunc", "--filter", `id=${id}`, "--format", "{{.ID}}"], true);
156
+ if (removed.code !== 0 || remaining.code !== 0 || remaining.stdout.trim())
157
+ throw Error("Training container cleanup is unverified");
158
+ closureVerified = true;
159
+ }
160
+ else {
161
+ const remaining = await call(["container", "ls", "--all", "--filter", `name=^/${name}$`, "--format", "{{.ID}}"], true);
162
+ if (remaining.code !== 0 || remaining.stdout.trim())
163
+ throw Error("Training container closure is unknown");
164
+ closureVerified = true;
165
+ }
166
+ }
167
+ }
168
+ finally {
169
+ if (privateRoot && (!creationAttempted || closureVerified))
170
+ await rm(privateRoot, { recursive: true, force: true });
171
+ }
172
+ }
173
+ };
@@ -0,0 +1,8 @@
1
+ import { type TrainingContext } from "../contract.js";
2
+ import { type TrainingContainerConfig } from "./contract.js";
3
+ export declare const prepareTrainingContainer: (raw: unknown, context: TrainingContext, args: readonly string[]) => Promise<{
4
+ config: TrainingContainerConfig;
5
+ context: TrainingContext;
6
+ args: string[];
7
+ viewerPort?: number;
8
+ }>;
@@ -0,0 +1,80 @@
1
+ import { lstat, realpath } from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { trainingContextSchema } from "../contract.js";
5
+ import { trainingContainerConfigSchema } from "./contract.js";
6
+ const inside = (root, value) => value === root || value.startsWith(`${root}/`);
7
+ export const prepareTrainingContainer = async (raw, context, args) => {
8
+ const config = trainingContainerConfigSchema.parse(raw);
9
+ const entries = [...config.inputs, config.output];
10
+ const home = path.resolve(os.homedir());
11
+ const globalConfigRoots = [".codex", ".claude", ".grok", ".ssh", ".config"].map((name) => path.join(home, name));
12
+ for (const entry of [...entries, ...config.auth]) {
13
+ const canonical = await realpath(entry.source);
14
+ if (canonical !== entry.source)
15
+ throw Error("Training bind sources must be canonical, without symlink aliases");
16
+ const stat = await lstat(canonical);
17
+ if (stat.isSymbolicLink() || (!stat.isFile() && !stat.isDirectory()))
18
+ throw Error("Training binds require regular files or directories");
19
+ if (config.auth.includes(entry) && !stat.isFile())
20
+ throw Error("Auth must be a single regular leaf file");
21
+ if (entries.includes(entry)) {
22
+ if (["/", "/etc", "/var", "/run", "/tmp", "/opt", "/usr", "/Users", "/home", home].includes(canonical) || globalConfigRoots.some((root) => inside(root, canonical)))
23
+ throw Error("Host homes, configuration and system roots cannot be training inputs");
24
+ if (config.auth.some((auth) => inside(canonical, auth.source)))
25
+ throw Error("Auth must not be exposed through input or output mounts");
26
+ }
27
+ }
28
+ if (config.inputs.some((entry, index) => config.inputs.some((other, otherIndex) => index !== otherIndex && inside(entry.source, other.source))))
29
+ throw Error("Training input source roots must not overlap");
30
+ if (!(await lstat(config.output.source)).isDirectory())
31
+ throw Error("Training output must be an existing directory");
32
+ if (config.inputs.some((entry) => inside(entry.source, config.output.source) || inside(config.output.source, entry.source)))
33
+ throw Error("Training output and inputs must not overlap");
34
+ const map = (value) => {
35
+ const absolute = path.resolve(value);
36
+ const entry = entries.find((item) => inside(item.source, absolute));
37
+ if (!entry)
38
+ throw Error(`Training path is not covered by a declared mount: ${value}`);
39
+ return path.posix.join(entry.destination, path.relative(entry.source, absolute).split(path.sep).join("/"));
40
+ };
41
+ const source = (entry) => ({ ...entry, sourcePath: map(entry.sourcePath) });
42
+ const mapped = trainingContextSchema.parse({ ...context,
43
+ project: { ...context.project, root: map(context.project.root), manifest: map(context.project.manifest) },
44
+ agent: { ...context.agent, source: map(context.agent.source) },
45
+ sources: context.sources.map(source), documents: context.documents.map(source), skills: context.skills.map(source)
46
+ });
47
+ const mappedArgs = [...args];
48
+ let viewerPort;
49
+ for (let index = 0; index < mappedArgs.length; index++) {
50
+ const flag = mappedArgs[index];
51
+ if (["--train", "--test", "--out", "--cost-config"].includes(flag)) {
52
+ const value = mappedArgs[++index];
53
+ if (!value)
54
+ throw Error(`Missing ${flag} path`);
55
+ mappedArgs[index] = map(value);
56
+ if (flag === "--out" && !inside("/run/training/output", mappedArgs[index]))
57
+ throw Error("Training --out must use the writable output mount");
58
+ }
59
+ else if (flag === "--resource") {
60
+ const value = mappedArgs[++index] ?? "", equals = value.indexOf("=");
61
+ if (equals < 1)
62
+ throw Error("Expected resource=id path mapping");
63
+ mappedArgs[index] = `${value.slice(0, equals)}=${map(value.slice(equals + 1))}`;
64
+ }
65
+ else if (flag === "--bridge-command") {
66
+ const value = mappedArgs[++index] ?? "";
67
+ if (!/^\/opt\/training\/[A-Za-z0-9._/-]+$/u.test(value) || path.posix.normalize(value) !== value)
68
+ throw Error("Bridge must be an installed executable under /opt/training");
69
+ }
70
+ else if (flag === "--view") {
71
+ const value = mappedArgs[++index] ?? "";
72
+ const port = Number(value);
73
+ if (viewerPort !== undefined || !/^\d+$/u.test(value) || !Number.isSafeInteger(port) || port < 1 || port > 65535)
74
+ throw Error("Container --view requires one explicit port from 1 to 65535");
75
+ viewerPort = port;
76
+ mappedArgs[index] = String(port);
77
+ }
78
+ }
79
+ return { config, context: mapped, args: mappedArgs, ...(viewerPort === undefined ? {} : { viewerPort }) };
80
+ };
@@ -0,0 +1,14 @@
1
+ export interface TrainingDockerProcess {
2
+ (args: readonly string[], options: {
3
+ timeoutMs: number;
4
+ signal?: AbortSignal;
5
+ stdout?: (line: string) => void;
6
+ stderr?: (line: string) => void;
7
+ }): Promise<{
8
+ code: number;
9
+ stdout: string;
10
+ stderr: string;
11
+ }>;
12
+ }
13
+ /** Docker client only; no model executable runs on the host. */
14
+ export declare const runTrainingDocker: TrainingDockerProcess;
@@ -0,0 +1,70 @@
1
+ import { spawn } from "node:child_process";
2
+ /** Docker client only; no model executable runs on the host. */
3
+ export const runTrainingDocker = (args, options) => new Promise((resolve, reject) => {
4
+ if (options.signal?.aborted) {
5
+ reject(Error("Training Docker operation cancelled"));
6
+ return;
7
+ }
8
+ const child = spawn("docker", [...args], { shell: false, stdio: ["ignore", "pipe", "pipe"] });
9
+ let stdout = "", stderr = "", failure;
10
+ let forceClose;
11
+ let settled = false;
12
+ const pending = { stdout: "", stderr: "" };
13
+ const stop = (message) => {
14
+ failure ??= Error(message);
15
+ child.kill("SIGKILL");
16
+ forceClose ??= setTimeout(() => {
17
+ // Releasing a stuck client lets the owner independently stop/verify the container.
18
+ child.stdout.destroy();
19
+ child.stderr.destroy();
20
+ finish(null);
21
+ }, 1000);
22
+ };
23
+ const abort = () => stop("Training Docker operation cancelled");
24
+ const timer = setTimeout(() => stop("Training Docker operation exceeded deadline"), options.timeoutMs);
25
+ options.signal?.addEventListener("abort", abort, { once: true });
26
+ if (options.signal?.aborted)
27
+ abort();
28
+ const consume = (channel, chunk) => {
29
+ pending[channel] += chunk;
30
+ if (Buffer.byteLength(pending[channel]) > 1024 * 1024) {
31
+ stop("Docker output exceeded bounded line size");
32
+ return;
33
+ }
34
+ const lines = pending[channel].split("\n");
35
+ pending[channel] = lines.pop();
36
+ for (const line of lines) {
37
+ options[channel]?.(line);
38
+ if (channel === "stdout")
39
+ stdout = options.stdout ? line : stdout + line + "\n";
40
+ else
41
+ stderr = options.stderr ? line : stderr + line + "\n";
42
+ if (stdout.length + stderr.length > 2 * 1024 * 1024)
43
+ stop("Docker output exceeded bounded capture size");
44
+ }
45
+ };
46
+ child.stdout.setEncoding("utf8").on("data", (chunk) => consume("stdout", chunk));
47
+ child.stderr.setEncoding("utf8").on("data", (chunk) => consume("stderr", chunk));
48
+ child.once("error", (error) => { failure = error; });
49
+ const finish = (code) => {
50
+ if (settled)
51
+ return;
52
+ settled = true;
53
+ clearTimeout(forceClose);
54
+ clearTimeout(timer);
55
+ options.signal?.removeEventListener("abort", abort);
56
+ for (const channel of ["stdout", "stderr"])
57
+ if (pending[channel]) {
58
+ options[channel]?.(pending[channel]);
59
+ if (channel === "stdout")
60
+ stdout = options.stdout ? pending[channel] : stdout + pending[channel];
61
+ else
62
+ stderr = options.stderr ? pending[channel] : stderr + pending[channel];
63
+ }
64
+ if (failure)
65
+ reject(failure);
66
+ else
67
+ resolve({ code: code ?? 1, stdout, stderr });
68
+ };
69
+ child.once("close", finish);
70
+ });
@@ -0,0 +1,36 @@
1
+ export declare const TRAINING_BROKER_ENTRYPOINT = "/opt/training/bin/train-broker";
2
+ /**
3
+ * Writable state of a broker-capable training container, all on tmpfs.
4
+ *
5
+ * The image root stays read-only and nothing here is a host bind, so a trial's
6
+ * worker home, workspace, turn store, wake-acceptance store and ledgers are
7
+ * on a filesystem that enforces unix ownership — which is what lets the slot
8
+ * supervisor's worker-uid canaries mean anything (P0 §5: a host bind under
9
+ * Docker Desktop or Colima silently ignores `chown`). The Grok realm is the
10
+ * one durable mount, and it is a named volume, not a bind.
11
+ */
12
+ export declare const trainingBrokerTmpfsTargets: () => readonly {
13
+ path: string;
14
+ size: string;
15
+ mode: string;
16
+ }[];
17
+ /**
18
+ * `docker create` arguments for the broker-capable training container.
19
+ *
20
+ * It starts as root with the *production* Daimon capability set rather than
21
+ * the v1 path's `--cap-drop ALL` as the host user: the root entrypoint has to
22
+ * provision uid-owned directories (`CAP_CHOWN`), let the native launcher
23
+ * `setuid` to a worker (`CAP_SETUID`/`SETGID`), drop bounding sets
24
+ * (`CAP_SETPCAP`), supervise dropped children (`CAP_KILL`) and read the
25
+ * attested layout it does not own (`CAP_DAC_READ_SEARCH`). `CAP_FOWNER` is
26
+ * deliberately absent, which is why every provisioning chmod reclaims the
27
+ * inode first. Grok 1.0.34 runs every sandbox profile inside bubblewrap, so
28
+ * the container also needs the pinned default-plus-userns seccomp profile and
29
+ * AppArmor unconfined — the narrowest combination P0 found.
30
+ */
31
+ export declare const trainingBrokerSecurityArgs: (seccompProfileDirectory: string) => Promise<string[]>;
32
+ export declare const trainingBrokerMounts: (broker: {
33
+ realmVolume: string;
34
+ bootstrap: string;
35
+ declaration: string;
36
+ }) => string[];
@@ -0,0 +1,58 @@
1
+ import { DAIMON_DOCKER_RUNTIME_SECURITY_ARGS, materializeDaimonGrokSeccompProfile } from "../../../shared/index.js";
2
+ import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
3
+ import { DAIMON_GROK_TURN_USAGE_LEDGER } from "../../../runtime/daimon/contractManifest.js";
4
+ import { DAIMON_WAKE_FUSE_DIRECTORY } from "../../../runtime/daimon/config.js";
5
+ import { TRAINING_BROKER_TMPDIR, TRAINING_GRANT_HOME_ROOT, TRAINING_INFERENCE_DIRECTORY, TRAINING_PAIDEIA_ROOT, TRAINING_SLOT_ROOT, TRAINING_SUPERVISOR_DIRECTORY, TRAINING_WORKER_ROOT } from "../broker/paths.js";
6
+ export const TRAINING_BROKER_ENTRYPOINT = "/opt/training/bin/train-broker";
7
+ /**
8
+ * Writable state of a broker-capable training container, all on tmpfs.
9
+ *
10
+ * The image root stays read-only and nothing here is a host bind, so a trial's
11
+ * worker home, workspace, turn store, wake-acceptance store and ledgers are
12
+ * on a filesystem that enforces unix ownership — which is what lets the slot
13
+ * supervisor's worker-uid canaries mean anything (P0 §5: a host bind under
14
+ * Docker Desktop or Colima silently ignores `chown`). The Grok realm is the
15
+ * one durable mount, and it is a named volume, not a bind.
16
+ */
17
+ export const trainingBrokerTmpfsTargets = () => [
18
+ { path: "/tmp", size: "1g", mode: "1777" },
19
+ { path: "/var/tmp", size: "256m", mode: "1777" },
20
+ { path: "/work", size: "4g", mode: "0755" },
21
+ { path: "/home/training", size: "1g", mode: "0755" },
22
+ { path: TRAINING_PAIDEIA_ROOT, size: "64m", mode: "0755" },
23
+ { path: TRAINING_SLOT_ROOT, size: "4g", mode: "0755" },
24
+ { path: TRAINING_GRANT_HOME_ROOT, size: "64m", mode: "0755" },
25
+ { path: TRAINING_INFERENCE_DIRECTORY, size: "64m", mode: "0755" },
26
+ { path: TRAINING_SUPERVISOR_DIRECTORY, size: "16m", mode: "0755" },
27
+ { path: TRAINING_WORKER_ROOT, size: "1g", mode: "0755" },
28
+ { path: "/etc/daimon-engine-broker", size: "16m", mode: "0755" },
29
+ { path: "/run/daimon-engine-broker", size: "64m", mode: "0755" },
30
+ { path: TRAINING_BROKER_TMPDIR, size: "64m", mode: "0755" },
31
+ { path: DAIMON_GROK_TURN_USAGE_LEDGER.directoryPath, size: "64m", mode: "0755" },
32
+ { path: DAIMON_WAKE_FUSE_DIRECTORY, size: "16m", mode: "0755" }
33
+ ];
34
+ /**
35
+ * `docker create` arguments for the broker-capable training container.
36
+ *
37
+ * It starts as root with the *production* Daimon capability set rather than
38
+ * the v1 path's `--cap-drop ALL` as the host user: the root entrypoint has to
39
+ * provision uid-owned directories (`CAP_CHOWN`), let the native launcher
40
+ * `setuid` to a worker (`CAP_SETUID`/`SETGID`), drop bounding sets
41
+ * (`CAP_SETPCAP`), supervise dropped children (`CAP_KILL`) and read the
42
+ * attested layout it does not own (`CAP_DAC_READ_SEARCH`). `CAP_FOWNER` is
43
+ * deliberately absent, which is why every provisioning chmod reclaims the
44
+ * inode first. Grok 1.0.34 runs every sandbox profile inside bubblewrap, so
45
+ * the container also needs the pinned default-plus-userns seccomp profile and
46
+ * AppArmor unconfined — the narrowest combination P0 found.
47
+ */
48
+ export const trainingBrokerSecurityArgs = async (seccompProfileDirectory) => [
49
+ "--user", "0:0",
50
+ ...DAIMON_DOCKER_RUNTIME_SECURITY_ARGS,
51
+ `--security-opt=seccomp=${await materializeDaimonGrokSeccompProfile(seccompProfileDirectory)}`,
52
+ "--security-opt=apparmor=unconfined"
53
+ ];
54
+ export const trainingBrokerMounts = (broker) => [
55
+ `type=volume,src=${broker.realmVolume},dst=${DAIMON_GROK_ENGINE_BROKER.credentialHomePath}`,
56
+ `type=bind,src=${broker.bootstrap},dst=/var/lib/spawnfile/daimon/grok-bootstrap-auth,readonly`,
57
+ `type=bind,src=${broker.declaration},dst=${TRAINING_PAIDEIA_ROOT}/training-broker.json,readonly`
58
+ ];
@@ -0,0 +1,7 @@
1
+ import { type TrainingContext } from "./contract.js";
2
+ export interface CreateTrainingContextOptions {
3
+ agent?: string;
4
+ packageVersion: string;
5
+ }
6
+ /** Resolves the complete project, preserving inherited selection and source provenance. */
7
+ export declare const createTrainingContext: (inputPath: string, options: CreateTrainingContextOptions) => Promise<TrainingContext>;