spawnfile 0.1.17 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/README.md +1 -1
  2. package/dist/auth/importers.js +21 -5
  3. package/dist/auth/index.d.ts +1 -0
  4. package/dist/auth/index.js +1 -0
  5. package/dist/auth/profileStore.js +4 -1
  6. package/dist/auth/trainingGrokWriteback.d.ts +4 -0
  7. package/dist/auth/trainingGrokWriteback.js +119 -0
  8. package/dist/auth/trainingGrokWritebackLock.d.ts +5 -0
  9. package/dist/auth/trainingGrokWritebackLock.js +56 -0
  10. package/dist/cli/authCommands.js +9 -5
  11. package/dist/cli/compileBuildCommands.js +4 -0
  12. package/dist/cli/devCommands.js +4 -2
  13. package/dist/cli/downCommand.d.ts +2 -0
  14. package/dist/cli/downCommand.js +3 -0
  15. package/dist/cli/envFileOption.d.ts +18 -0
  16. package/dist/cli/envFileOption.js +20 -0
  17. package/dist/cli/lifecycleCommands.d.ts +1 -1
  18. package/dist/cli/lifecycleCommands.js +3 -1
  19. package/dist/cli/lifecyclePlan.d.ts +1 -0
  20. package/dist/cli/lifecyclePlan.js +2 -0
  21. package/dist/cli/paideiaDelegation.d.ts +2 -1
  22. package/dist/cli/paideiaDelegation.js +5 -4
  23. package/dist/cli/recordCommands.d.ts +17 -0
  24. package/dist/cli/recordCommands.js +43 -0
  25. package/dist/cli/releaseCommand.d.ts +6 -0
  26. package/dist/cli/releaseCommand.js +91 -0
  27. package/dist/cli/runCli.d.ts +7 -1
  28. package/dist/cli/runCli.js +11 -6
  29. package/dist/cli/runPublishCommands.js +5 -3
  30. package/dist/cli/trainCommand.js +73 -20
  31. package/dist/cli/upCommand.js +5 -1
  32. package/dist/cli/volumeCommands.d.ts +8 -0
  33. package/dist/cli/volumeCommands.js +53 -0
  34. package/dist/compiler/agentNodeMerge.js +3 -2
  35. package/dist/compiler/buildCompilePlan.js +4 -0
  36. package/dist/compiler/buildCompilePlanAgent.js +3 -1
  37. package/dist/compiler/buildCompilePlanTraversal.js +2 -0
  38. package/dist/compiler/buildCompilePlanTraversalHelpers.d.ts +2 -2
  39. package/dist/compiler/buildCompilePlanTraversalHelpers.js +4 -3
  40. package/dist/compiler/buildProject.d.ts +10 -0
  41. package/dist/compiler/buildProject.js +14 -2
  42. package/dist/compiler/cleanCompileOutput.d.ts +2 -0
  43. package/dist/compiler/cleanCompileOutput.js +14 -0
  44. package/dist/compiler/compilePlanHelpers.js +2 -0
  45. package/dist/compiler/compileProject.d.ts +10 -0
  46. package/dist/compiler/compileProject.js +29 -3
  47. package/dist/compiler/containerArtifactSummaries.js +1 -0
  48. package/dist/compiler/containerArtifacts.d.ts +4 -4
  49. package/dist/compiler/containerArtifacts.js +18 -34
  50. package/dist/compiler/containerArtifactsPlans.js +7 -0
  51. package/dist/compiler/containerArtifactsTypes.d.ts +7 -0
  52. package/dist/compiler/containerDaimonBrokerRender.d.ts +3 -1
  53. package/dist/compiler/containerDaimonBrokerRender.js +6 -3
  54. package/dist/compiler/containerDaimonGrokTaskClock.d.ts +5 -0
  55. package/dist/compiler/containerDaimonGrokTaskClock.js +29 -0
  56. package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +1 -1
  57. package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +38 -16
  58. package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +33 -8
  59. package/dist/compiler/containerDaimonGrokWorkerRender.js +18 -5
  60. package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +14 -1
  61. package/dist/compiler/containerDaimonOwnershipGuardRender.js +15 -2
  62. package/dist/compiler/containerDaimonUidEntrypointRender.js +6 -12
  63. package/dist/compiler/containerTargetResources.d.ts +10 -0
  64. package/dist/compiler/containerTargetResources.js +21 -13
  65. package/dist/compiler/containerWorkspaceResourceRender.js +4 -1
  66. package/dist/compiler/index.d.ts +2 -0
  67. package/dist/compiler/index.js +2 -0
  68. package/dist/compiler/mcpPlaceholders.d.ts +11 -0
  69. package/dist/compiler/mcpPlaceholders.js +58 -0
  70. package/dist/compiler/mcpServerInheritance.d.ts +18 -0
  71. package/dist/compiler/mcpServerInheritance.js +43 -0
  72. package/dist/compiler/moltnetArtifactTypes.d.ts +1 -0
  73. package/dist/compiler/moltnetArtifacts.js +1 -0
  74. package/dist/compiler/preflightCompilePlan.d.ts +9 -0
  75. package/dist/compiler/preflightCompilePlan.js +38 -0
  76. package/dist/compiler/recordingAgentFacts.d.ts +4 -0
  77. package/dist/compiler/recordingAgentFacts.js +35 -0
  78. package/dist/compiler/recordingCapability.d.ts +4 -0
  79. package/dist/compiler/recordingCapability.js +22 -0
  80. package/dist/compiler/recordingReport.d.ts +4 -0
  81. package/dist/compiler/recordingReport.js +18 -0
  82. package/dist/compiler/runProject.d.ts +2 -1
  83. package/dist/compiler/runProject.js +2 -0
  84. package/dist/compiler/surfaces.d.ts +1 -2
  85. package/dist/compiler/surfaces.js +0 -1
  86. package/dist/compiler/syncProjectAuth.js +2 -1
  87. package/dist/compiler/training/broker/clockProbe.d.ts +6 -0
  88. package/dist/compiler/training/broker/clockProbe.js +27 -0
  89. package/dist/compiler/training/broker/declaration.d.ts +4 -2
  90. package/dist/compiler/training/broker/declaration.js +4 -2
  91. package/dist/compiler/training/broker/entrypoint.js +33 -18
  92. package/dist/compiler/training/broker/evaluatorSecrets.d.ts +2 -0
  93. package/dist/compiler/training/broker/evaluatorSecrets.js +60 -0
  94. package/dist/compiler/training/broker/index.d.ts +3 -2
  95. package/dist/compiler/training/broker/index.js +3 -2
  96. package/dist/compiler/training/broker/main.js +1 -1
  97. package/dist/compiler/training/broker/paths.d.ts +96 -56
  98. package/dist/compiler/training/broker/paths.js +97 -89
  99. package/dist/compiler/training/broker/processes.d.ts +9 -0
  100. package/dist/compiler/training/broker/processes.js +4 -1
  101. package/dist/compiler/training/broker/projection.d.ts +3 -2
  102. package/dist/compiler/training/broker/projection.js +21 -9
  103. package/dist/compiler/training/broker/provisioning.d.ts +6 -15
  104. package/dist/compiler/training/broker/provisioning.js +71 -53
  105. package/dist/compiler/training/broker/registration.d.ts +3 -1
  106. package/dist/compiler/training/broker/registration.js +29 -21
  107. package/dist/compiler/training/broker/reset.d.ts +9 -0
  108. package/dist/compiler/training/broker/reset.js +71 -0
  109. package/dist/compiler/training/broker/runtime.d.ts +10 -13
  110. package/dist/compiler/training/broker/runtime.js +69 -115
  111. package/dist/compiler/training/broker/supervisor.d.ts +10 -11
  112. package/dist/compiler/training/broker/supervisor.js +22 -23
  113. package/dist/compiler/training/broker/taskClock.d.ts +5 -0
  114. package/dist/compiler/training/broker/taskClock.js +41 -0
  115. package/dist/compiler/training/compiledAgent.d.ts +21 -0
  116. package/dist/compiler/training/compiledAgent.js +62 -0
  117. package/dist/compiler/training/container/contract.d.ts +23 -0
  118. package/dist/compiler/training/container/contract.js +23 -5
  119. package/dist/compiler/training/container/evaluators.d.ts +48 -0
  120. package/dist/compiler/training/container/evaluators.js +50 -0
  121. package/dist/compiler/training/container/grokWriteback.d.ts +8 -0
  122. package/dist/compiler/training/container/grokWriteback.js +26 -0
  123. package/dist/compiler/training/container/index.d.ts +2 -1
  124. package/dist/compiler/training/container/index.js +2 -1
  125. package/dist/compiler/training/container/launch.d.ts +3 -0
  126. package/dist/compiler/training/container/launch.js +119 -28
  127. package/dist/compiler/training/container/nativeSlots.d.ts +14 -0
  128. package/dist/compiler/training/container/nativeSlots.js +13 -0
  129. package/dist/compiler/training/container/outputCopy.d.ts +2 -0
  130. package/dist/compiler/training/container/outputCopy.js +72 -0
  131. package/dist/compiler/training/container/outputVolume.d.ts +27 -0
  132. package/dist/compiler/training/container/outputVolume.js +161 -0
  133. package/dist/compiler/training/container/prepare.d.ts +3 -1
  134. package/dist/compiler/training/container/prepare.js +57 -12
  135. package/dist/compiler/training/container/security.d.ts +5 -3
  136. package/dist/compiler/training/container/security.js +15 -5
  137. package/dist/compiler/training/container/subjectIsolation.d.ts +5 -0
  138. package/dist/compiler/training/container/subjectIsolation.js +15 -0
  139. package/dist/compiler/training/context.d.ts +8 -0
  140. package/dist/compiler/training/context.js +12 -12
  141. package/dist/compiler/training/contract.d.ts +2 -0
  142. package/dist/compiler/training/contract.js +2 -0
  143. package/dist/compiler/training/execution.d.ts +417 -0
  144. package/dist/compiler/training/execution.js +160 -0
  145. package/dist/compiler/training/index.d.ts +8 -0
  146. package/dist/compiler/training/index.js +7 -0
  147. package/dist/compiler/training/moments.d.ts +80 -0
  148. package/dist/compiler/training/moments.js +118 -0
  149. package/dist/compiler/training/output.d.ts +2 -0
  150. package/dist/compiler/training/output.js +20 -0
  151. package/dist/compiler/training/plan/contract.d.ts +287 -0
  152. package/dist/compiler/training/plan/contract.js +49 -0
  153. package/dist/compiler/training/plan/index.d.ts +5 -0
  154. package/dist/compiler/training/plan/index.js +4 -0
  155. package/dist/compiler/training/plan/load.d.ts +9 -0
  156. package/dist/compiler/training/plan/load.js +153 -0
  157. package/dist/compiler/training/plan/references.d.ts +19 -0
  158. package/dist/compiler/training/plan/references.js +57 -0
  159. package/dist/compiler/training/plan/resolve.d.ts +4 -0
  160. package/dist/compiler/training/plan/resolve.js +73 -0
  161. package/dist/compiler/training/plan/targets.d.ts +11 -0
  162. package/dist/compiler/training/plan/targets.js +71 -0
  163. package/dist/compiler/training/plan/types.d.ts +36 -0
  164. package/dist/compiler/training/plan/types.js +1 -0
  165. package/dist/compiler/training/preparation/assets/Dockerfile +13 -2
  166. package/dist/compiler/training/preparation/assets/package-lock.json +2 -2
  167. package/dist/compiler/training/preparation/broker.d.ts +3 -3
  168. package/dist/compiler/training/preparation/broker.js +6 -4
  169. package/dist/compiler/training/preparation/contract.d.ts +27 -2
  170. package/dist/compiler/training/preparation/contract.js +23 -4
  171. package/dist/compiler/training/preparation/files.d.ts +5 -1
  172. package/dist/compiler/training/preparation/files.js +76 -15
  173. package/dist/compiler/training/preparation/image.js +9 -4
  174. package/dist/compiler/training/preparation/inputs.d.ts +1 -0
  175. package/dist/compiler/training/preparation/inputs.js +18 -10
  176. package/dist/compiler/training/preparation/prepare.d.ts +5 -0
  177. package/dist/compiler/training/preparation/prepare.js +66 -29
  178. package/dist/compiler/training/preparation/scratch.d.ts +6 -17
  179. package/dist/compiler/training/preparation/scratch.js +89 -23
  180. package/dist/compiler/training/repair/contract.d.ts +338 -4
  181. package/dist/compiler/training/repair/contract.js +2 -0
  182. package/dist/compiler/training/repair/index.d.ts +1 -1
  183. package/dist/compiler/training/repair/index.js +1 -1
  184. package/dist/compiler/training/repair/prepare.d.ts +155 -3
  185. package/dist/compiler/training/repair/prepare.js +6 -2
  186. package/dist/compiler/training/repair/witness.d.ts +152 -3
  187. package/dist/compiler/training/repair/witness.js +8 -2
  188. package/dist/compiler/training/resolution.d.ts +25 -0
  189. package/dist/compiler/training/resolution.js +69 -0
  190. package/dist/compiler/training/rewind/contract.d.ts +321 -0
  191. package/dist/compiler/training/rewind/contract.js +39 -0
  192. package/dist/compiler/training/rewind/deployedResource.d.ts +22 -0
  193. package/dist/compiler/training/rewind/deployedResource.js +19 -0
  194. package/dist/compiler/training/rewind/feed.d.ts +12 -0
  195. package/dist/compiler/training/rewind/feed.js +182 -0
  196. package/dist/compiler/training/rewind/feedContent.d.ts +6 -0
  197. package/dist/compiler/training/rewind/feedContent.js +38 -0
  198. package/dist/compiler/training/rewind/git.d.ts +8 -0
  199. package/dist/compiler/training/rewind/git.js +159 -0
  200. package/dist/compiler/training/rewind/gitArchive.d.ts +2 -0
  201. package/dist/compiler/training/rewind/gitArchive.js +7 -0
  202. package/dist/compiler/training/rewind/gitHistory.d.ts +3 -0
  203. package/dist/compiler/training/rewind/gitHistory.js +55 -0
  204. package/dist/compiler/training/rewind/gitProcess.d.ts +19 -0
  205. package/dist/compiler/training/rewind/gitProcess.js +81 -0
  206. package/dist/compiler/training/rewind/gitTree.d.ts +14 -0
  207. package/dist/compiler/training/rewind/gitTree.js +90 -0
  208. package/dist/compiler/training/rewind/history.d.ts +28 -0
  209. package/dist/compiler/training/rewind/history.js +239 -0
  210. package/dist/compiler/training/rewind/index.d.ts +18 -0
  211. package/dist/compiler/training/rewind/index.js +15 -0
  212. package/dist/compiler/training/rewind/inputs.d.ts +9 -0
  213. package/dist/compiler/training/rewind/inputs.js +67 -0
  214. package/dist/compiler/training/rewind/instant.d.ts +4 -0
  215. package/dist/compiler/training/rewind/instant.js +24 -0
  216. package/dist/compiler/training/rewind/leakCheck.d.ts +10 -0
  217. package/dist/compiler/training/rewind/leakCheck.js +56 -0
  218. package/dist/compiler/training/rewind/leakFeed.d.ts +5 -0
  219. package/dist/compiler/training/rewind/leakFeed.js +25 -0
  220. package/dist/compiler/training/rewind/leakFiles.d.ts +10 -0
  221. package/dist/compiler/training/rewind/leakFiles.js +106 -0
  222. package/dist/compiler/training/rewind/leakGit.d.ts +3 -0
  223. package/dist/compiler/training/rewind/leakGit.js +78 -0
  224. package/dist/compiler/training/rewind/leakGitPayload.d.ts +4 -0
  225. package/dist/compiler/training/rewind/leakGitPayload.js +57 -0
  226. package/dist/compiler/training/rewind/leakInputs.d.ts +7 -0
  227. package/dist/compiler/training/rewind/leakInputs.js +135 -0
  228. package/dist/compiler/training/rewind/leakLayout.d.ts +2 -0
  229. package/dist/compiler/training/rewind/leakLayout.js +17 -0
  230. package/dist/compiler/training/rewind/leakProvenance.d.ts +3 -0
  231. package/dist/compiler/training/rewind/leakProvenance.js +88 -0
  232. package/dist/compiler/training/rewind/materialize.d.ts +136 -0
  233. package/dist/compiler/training/rewind/materialize.js +212 -0
  234. package/dist/compiler/training/rewind/memory.d.ts +10 -0
  235. package/dist/compiler/training/rewind/memory.js +84 -0
  236. package/dist/compiler/training/rewind/memorySchemas.d.ts +87 -0
  237. package/dist/compiler/training/rewind/memorySchemas.js +50 -0
  238. package/dist/compiler/training/rewind/moltnet.d.ts +2 -0
  239. package/dist/compiler/training/rewind/moltnet.js +54 -0
  240. package/dist/compiler/training/rewind/moltnetJson.d.ts +13 -0
  241. package/dist/compiler/training/rewind/moltnetJson.js +180 -0
  242. package/dist/compiler/training/rewind/moltnetSchemas.d.ts +1226 -0
  243. package/dist/compiler/training/rewind/moltnetSchemas.js +75 -0
  244. package/dist/compiler/training/rewind/moltnetSqlite.d.ts +31 -0
  245. package/dist/compiler/training/rewind/moltnetSqlite.js +192 -0
  246. package/dist/compiler/training/rewind/moltnetSqliteData.d.ts +10 -0
  247. package/dist/compiler/training/rewind/moltnetSqliteData.js +113 -0
  248. package/dist/compiler/training/rewind/recordInput.d.ts +40 -0
  249. package/dist/compiler/training/rewind/recordInput.js +49 -0
  250. package/dist/compiler/training/rewind/recordedBundle.d.ts +4 -0
  251. package/dist/compiler/training/rewind/recordedBundle.js +58 -0
  252. package/dist/compiler/training/rewind/recordedCommit.d.ts +2 -0
  253. package/dist/compiler/training/rewind/recordedCommit.js +10 -0
  254. package/dist/compiler/training/rewind/select.d.ts +18 -0
  255. package/dist/compiler/training/rewind/select.js +64 -0
  256. package/dist/compiler/training/rewind/snapshotManifest.d.ts +42 -0
  257. package/dist/compiler/training/rewind/snapshotManifest.js +134 -0
  258. package/dist/compiler/training/rewind/taskClock.d.ts +12 -0
  259. package/dist/compiler/training/rewind/taskClock.js +40 -0
  260. package/dist/compiler/training/rewind/timestamps.d.ts +4 -0
  261. package/dist/compiler/training/rewind/timestamps.js +26 -0
  262. package/dist/compiler/training/rewind/types.d.ts +43 -0
  263. package/dist/compiler/training/rewind/types.js +1 -0
  264. package/dist/compiler/training/rewind/volumes.d.ts +12 -0
  265. package/dist/compiler/training/rewind/volumes.js +58 -0
  266. package/dist/compiler/training/selection.d.ts +7 -0
  267. package/dist/compiler/training/selection.js +15 -0
  268. package/dist/compiler/types.d.ts +6 -3
  269. package/dist/compiler/upProject.d.ts +1 -0
  270. package/dist/compiler/upProject.js +21 -5
  271. package/dist/compiler/workspaceBundleArtifacts.d.ts +16 -1
  272. package/dist/compiler/workspaceBundleArtifacts.js +69 -20
  273. package/dist/compiler/workspaceBundleCache.d.ts +23 -0
  274. package/dist/compiler/workspaceBundleCache.js +79 -0
  275. package/dist/compiler/workspaceBundleDependencies.d.ts +21 -0
  276. package/dist/compiler/workspaceBundleDependencies.js +122 -0
  277. package/dist/compiler/workspaceBundleFiles.d.ts +51 -0
  278. package/dist/compiler/workspaceBundleFiles.js +251 -0
  279. package/dist/compiler/workspaceBundleGenerated.d.ts +25 -0
  280. package/dist/compiler/workspaceBundleGenerated.js +103 -0
  281. package/dist/compiler/workspaceBundleGit.d.ts +64 -0
  282. package/dist/compiler/workspaceBundleGit.js +154 -0
  283. package/dist/compiler/workspaceBundleKey.d.ts +34 -0
  284. package/dist/compiler/workspaceBundleKey.js +17 -0
  285. package/dist/compiler/workspaceBundleResolve.d.ts +56 -0
  286. package/dist/compiler/workspaceBundleResolve.js +144 -0
  287. package/dist/compiler/workspaceBundleRun.d.ts +41 -0
  288. package/dist/compiler/workspaceBundleRun.js +79 -0
  289. package/dist/compiler/workspaceBundleTar.d.ts +47 -0
  290. package/dist/compiler/workspaceBundleTar.js +140 -0
  291. package/dist/compiler/workspaceBundleTree.d.ts +15 -0
  292. package/dist/compiler/workspaceBundleTree.js +58 -0
  293. package/dist/compiler/workspaceGitFetch.d.ts +41 -0
  294. package/dist/compiler/workspaceGitFetch.js +155 -0
  295. package/dist/compiler/workspaceGitPins.d.ts +33 -0
  296. package/dist/compiler/workspaceGitPins.js +127 -0
  297. package/dist/compiler/workspaceResources.d.ts +5 -1
  298. package/dist/compiler/workspaceResources.js +32 -5
  299. package/dist/deployment/activation.d.ts +3 -0
  300. package/dist/deployment/activation.js +12 -0
  301. package/dist/deployment/canaryCutover.d.ts +1 -1
  302. package/dist/deployment/candidateRecording.d.ts +8 -0
  303. package/dist/deployment/candidateRecording.js +22 -0
  304. package/dist/deployment/dockerManager.d.ts +5 -3
  305. package/dist/deployment/dockerManager.js +12 -2
  306. package/dist/deployment/downDeployment.d.ts +2 -0
  307. package/dist/deployment/downDeployment.js +6 -2
  308. package/dist/deployment/homeStore.d.ts +9 -1
  309. package/dist/deployment/homeStore.js +16 -53
  310. package/dist/deployment/index.d.ts +6 -0
  311. package/dist/deployment/index.js +6 -0
  312. package/dist/deployment/pidLock.d.ts +25 -0
  313. package/dist/deployment/pidLock.js +81 -0
  314. package/dist/deployment/record.d.ts +85 -1
  315. package/dist/deployment/record.js +11 -5
  316. package/dist/deployment/recordPublication.d.ts +15 -0
  317. package/dist/deployment/recordPublication.js +76 -0
  318. package/dist/deployment/recordedMemoryRetention.d.ts +18 -0
  319. package/dist/deployment/recordedMemoryRetention.js +27 -0
  320. package/dist/deployment/resourceLog.d.ts +140 -0
  321. package/dist/deployment/resourceLog.js +78 -0
  322. package/dist/distribution/buildDistributionReport.d.ts +3 -0
  323. package/dist/distribution/buildDistributionReport.js +5 -0
  324. package/dist/distribution/consumeImage.d.ts +3 -0
  325. package/dist/distribution/consumeImage.js +23 -31
  326. package/dist/distribution/consumeImageLifecycle.d.ts +4 -1
  327. package/dist/distribution/consumeImageLifecycle.js +14 -3
  328. package/dist/distribution/consumeImageSupport.d.ts +7 -0
  329. package/dist/distribution/consumeImageSupport.js +25 -0
  330. package/dist/distribution/distributionReportSchema.d.ts +47 -0
  331. package/dist/distribution/distributionReportSchema.js +20 -0
  332. package/dist/distribution/renderImageInterface.js +1 -1
  333. package/dist/distribution/types.d.ts +15 -0
  334. package/dist/filesystem/durableWrite.d.ts +10 -0
  335. package/dist/filesystem/durableWrite.js +87 -0
  336. package/dist/filesystem/index.d.ts +2 -0
  337. package/dist/filesystem/index.js +2 -0
  338. package/dist/filesystem/retainedJsonl.d.ts +23 -0
  339. package/dist/filesystem/retainedJsonl.js +123 -0
  340. package/dist/manifest/commandSchemas.d.ts +5 -0
  341. package/dist/manifest/commandSchemas.js +5 -0
  342. package/dist/manifest/executionSchemas.d.ts +20 -0
  343. package/dist/manifest/executionSchemas.js +13 -3
  344. package/dist/manifest/index.d.ts +2 -0
  345. package/dist/manifest/index.js +2 -0
  346. package/dist/manifest/loadManifest.js +3 -26
  347. package/dist/manifest/mcpSchemas.d.ts +61 -0
  348. package/dist/manifest/mcpSchemas.js +57 -11
  349. package/dist/manifest/memorySchemas.d.ts +1 -1
  350. package/dist/manifest/memorySchemas.js +1 -1
  351. package/dist/manifest/parseManifest.d.ts +7 -0
  352. package/dist/manifest/parseManifest.js +65 -0
  353. package/dist/manifest/renderSpawnfile.js +4 -1
  354. package/dist/manifest/renderSpawnfileWorkspace.js +6 -2
  355. package/dist/manifest/schemas.d.ts +1206 -132
  356. package/dist/manifest/schemas.js +14 -4
  357. package/dist/manifest/teamNetworkSchemas.d.ts +1 -1
  358. package/dist/manifest/trainingDataSchemas.d.ts +357 -0
  359. package/dist/manifest/trainingDataSchemas.js +31 -0
  360. package/dist/manifest/trainingSchemas.d.ts +49 -0
  361. package/dist/manifest/trainingSchemas.js +44 -0
  362. package/dist/manifest/volumeFeedSchemas.d.ts +52 -0
  363. package/dist/manifest/volumeFeedSchemas.js +104 -0
  364. package/dist/manifest/workspaceSchemas.d.ts +182 -5
  365. package/dist/manifest/workspaceSchemas.js +111 -7
  366. package/dist/recording/compose.d.ts +3 -0
  367. package/dist/recording/compose.js +93 -0
  368. package/dist/recording/deployment.d.ts +15 -0
  369. package/dist/recording/deployment.js +38 -0
  370. package/dist/recording/history.d.ts +16 -0
  371. package/dist/recording/history.js +47 -0
  372. package/dist/recording/index.d.ts +9 -0
  373. package/dist/recording/index.js +9 -0
  374. package/dist/recording/moment.d.ts +61 -0
  375. package/dist/recording/moment.js +36 -0
  376. package/dist/recording/parse.d.ts +15 -0
  377. package/dist/recording/parse.js +74 -0
  378. package/dist/recording/read.d.ts +8 -0
  379. package/dist/recording/read.js +61 -0
  380. package/dist/recording/store.d.ts +10 -0
  381. package/dist/recording/store.js +94 -0
  382. package/dist/recording/sync.d.ts +24 -0
  383. package/dist/recording/sync.js +126 -0
  384. package/dist/recording/types.d.ts +45 -0
  385. package/dist/recording/types.js +2 -0
  386. package/dist/release/drainControl.d.ts +54 -0
  387. package/dist/release/drainControl.js +137 -0
  388. package/dist/release/drainPhase.d.ts +37 -0
  389. package/dist/release/drainPhase.js +161 -0
  390. package/dist/release/index.d.ts +11 -0
  391. package/dist/release/index.js +11 -0
  392. package/dist/release/ledger.d.ts +75 -0
  393. package/dist/release/ledger.js +111 -0
  394. package/dist/release/notify.d.ts +58 -0
  395. package/dist/release/notify.js +126 -0
  396. package/dist/release/pending.d.ts +35 -0
  397. package/dist/release/pending.js +60 -0
  398. package/dist/release/postDeploy.d.ts +32 -0
  399. package/dist/release/postDeploy.js +62 -0
  400. package/dist/release/releaseDefaults.d.ts +9 -0
  401. package/dist/release/releaseDefaults.js +115 -0
  402. package/dist/release/releaseDocker.d.ts +38 -0
  403. package/dist/release/releaseDocker.js +94 -0
  404. package/dist/release/releaseTypes.d.ts +94 -0
  405. package/dist/release/releaseTypes.js +1 -0
  406. package/dist/release/runRelease.d.ts +9 -0
  407. package/dist/release/runRelease.js +218 -0
  408. package/dist/release/swap.d.ts +23 -0
  409. package/dist/release/swap.js +55 -0
  410. package/dist/release/types.d.ts +50 -0
  411. package/dist/release/types.js +29 -0
  412. package/dist/report/index.d.ts +1 -0
  413. package/dist/report/index.js +1 -0
  414. package/dist/report/recording.d.ts +57 -0
  415. package/dist/report/recording.js +26 -0
  416. package/dist/report/types.d.ts +58 -0
  417. package/dist/runtime/container.js +8 -13
  418. package/dist/runtime/daimon/adapter.js +15 -4
  419. package/dist/runtime/daimon/config.d.ts +4 -0
  420. package/dist/runtime/daimon/config.js +53 -4
  421. package/dist/runtime/daimon/contract-manifest.json +1 -0
  422. package/dist/runtime/daimon/contract-manifest.sha256 +1 -0
  423. package/dist/runtime/daimon/contractManifest.d.ts +59 -8
  424. package/dist/runtime/daimon/contractManifest.js +26 -10
  425. package/dist/runtime/daimon/grokTurnLimits.d.ts +25 -0
  426. package/dist/runtime/daimon/grokTurnLimits.js +51 -0
  427. package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +17 -0
  428. package/dist/runtime/daimon/grokWorkerConfigBytes.js +17 -0
  429. package/dist/runtime/daimon/grokWorkerContract.d.ts +5 -0
  430. package/dist/runtime/daimon/grokWorkerContract.js +13 -1
  431. package/dist/runtime/daimon/recording.d.ts +19 -0
  432. package/dist/runtime/daimon/recording.js +50 -0
  433. package/dist/runtime/daimon/scheduleAuthority.d.ts +8 -0
  434. package/dist/runtime/daimon/scheduleAuthority.js +19 -5
  435. package/dist/runtime/daimon/wakeMoments.d.ts +15 -0
  436. package/dist/runtime/daimon/wakeMoments.js +17 -0
  437. package/dist/runtime/daimonInstall.d.ts +3 -0
  438. package/dist/runtime/daimonInstall.js +25 -0
  439. package/dist/runtime/index.d.ts +1 -0
  440. package/dist/runtime/index.js +1 -0
  441. package/dist/runtime/install.d.ts +2 -0
  442. package/dist/runtime/install.js +1 -0
  443. package/dist/runtime/openclaw/adapter.js +3 -0
  444. package/dist/runtime/pi/adapter.js +3 -0
  445. package/dist/runtime/pi/containerTargets.js +6 -0
  446. package/dist/runtime/picoclaw/adapter.js +3 -0
  447. package/dist/runtime/registry.d.ts +3 -0
  448. package/dist/runtime/registry.js +13 -1
  449. package/dist/runtime/types.d.ts +15 -0
  450. package/dist/runtime/usageLedgerRead.d.ts +6 -0
  451. package/dist/runtime/usageLedgerRead.js +3 -3
  452. package/dist/shared/index.d.ts +1 -0
  453. package/dist/shared/index.js +1 -0
  454. package/dist/shared/recording.d.ts +8 -0
  455. package/dist/shared/recording.js +25 -0
  456. package/dist/target/dockerCommandExecutorCore.js +1 -1
  457. package/dist/target/dockerTargetBinding.js +2 -1
  458. package/dist/volume/feedLand.d.ts +31 -0
  459. package/dist/volume/feedLand.js +174 -0
  460. package/dist/volume/feedLandings.d.ts +45 -0
  461. package/dist/volume/feedLandings.js +111 -0
  462. package/dist/volume/feedLayout.d.ts +61 -0
  463. package/dist/volume/feedLayout.js +234 -0
  464. package/dist/volume/feedLock.d.ts +7 -0
  465. package/dist/volume/feedLock.js +131 -0
  466. package/dist/volume/feedManifest.d.ts +27 -0
  467. package/dist/volume/feedManifest.js +123 -0
  468. package/dist/volume/feedPrepare.d.ts +16 -0
  469. package/dist/volume/feedPrepare.js +228 -0
  470. package/dist/volume/feedProject.d.ts +39 -0
  471. package/dist/volume/feedProject.js +92 -0
  472. package/dist/volume/feedRecord.d.ts +55 -0
  473. package/dist/volume/feedRecord.js +148 -0
  474. package/dist/volume/feedRef.d.ts +43 -0
  475. package/dist/volume/feedRef.js +117 -0
  476. package/dist/volume/feedRefresh.d.ts +15 -0
  477. package/dist/volume/feedRefresh.js +187 -0
  478. package/dist/volume/feedSource.d.ts +66 -0
  479. package/dist/volume/feedSource.js +104 -0
  480. package/dist/volume/feedTarget.d.ts +70 -0
  481. package/dist/volume/feedTarget.js +9 -0
  482. package/dist/volume/feedTestKit.d.ts +11 -0
  483. package/dist/volume/feedTestKit.js +45 -0
  484. package/dist/volume/feedVerify.d.ts +18 -0
  485. package/dist/volume/feedVerify.js +104 -0
  486. package/dist/volume/index.d.ts +13 -0
  487. package/dist/volume/index.js +13 -0
  488. package/package.json +3 -3
  489. package/runtimes.yaml +8 -6
@@ -1,10 +1,9 @@
1
- import { DocsBlock, McpServer, Secret, SkillReference } from "../manifest/index.js";
1
+ import { DocsBlock, Secret, SkillReference } from "../manifest/index.js";
2
2
  import { StringMap } from "../shared/index.js";
3
3
  import { ResolvedDocument, ResolvedPackage, ResolvedSkill } from "./types.js";
4
4
  export declare const mergeSkills: (sharedSkills?: SkillReference[], localSkills?: SkillReference[]) => SkillReference[];
5
5
  export declare const mergeResolvedSkills: (sharedSkills?: ResolvedSkill[], localSkills?: ResolvedSkill[]) => ResolvedSkill[];
6
6
  export declare const mergePackages: (sharedPackages?: ResolvedPackage[], localPackages?: ResolvedPackage[]) => ResolvedPackage[];
7
- export declare const mergeMcpServers: (sharedServers?: McpServer[], localServers?: McpServer[]) => McpServer[];
8
7
  export declare const mergeSecrets: (sharedSecrets?: Secret[], localSecrets?: Secret[]) => Secret[];
9
8
  export declare const mergeEnv: (sharedEnv?: StringMap, localEnv?: StringMap) => StringMap;
10
9
  export declare const loadResolvedDocuments: (manifestPath: string, docs: DocsBlock | undefined) => Promise<ResolvedDocument[]>;
@@ -13,7 +13,6 @@ const mergeByKey = (sharedValues, localValues, getKey) => {
13
13
  export const mergeSkills = (sharedSkills = [], localSkills = []) => mergeByKey(sharedSkills, localSkills, (skill) => skill.ref);
14
14
  export const mergeResolvedSkills = (sharedSkills = [], localSkills = []) => mergeByKey(sharedSkills, localSkills, (skill) => skill.ref);
15
15
  export const mergePackages = (sharedPackages = [], localPackages = []) => mergeByKey(sharedPackages, localPackages, (pkg) => `${pkg.manager}::${pkg.name}`);
16
- export const mergeMcpServers = (sharedServers = [], localServers = []) => mergeByKey(sharedServers, localServers, (server) => server.name);
17
16
  export const mergeSecrets = (sharedSecrets = [], localSecrets = []) => mergeByKey(sharedSecrets, localSecrets, (secret) => secret.name);
18
17
  export const mergeEnv = (sharedEnv = {}, localEnv = {}) => ({
19
18
  ...sharedEnv,
@@ -25,7 +25,8 @@ const resolveAuthRequirements = async (inputPath) => {
25
25
  addProjectSecret(secret);
26
26
  }
27
27
  for (const server of node.value.shared.mcpServers) {
28
- if (server.auth?.secret) {
28
+ // An opt-in server's secret is required only through the members that select it.
29
+ if (server.auth?.secret && server.opt_in !== true) {
29
30
  addProjectSecret({ name: server.auth.secret, required: true });
30
31
  }
31
32
  }
@@ -0,0 +1,6 @@
1
+ /** Clock directories are public by contract; prove the sibling mask in the worker's mount namespace. */
2
+ export declare const probeTrainingSiblingClock: (slot: number, target: string, execute?: (command: string, args: string[], options: {
3
+ timeout: number;
4
+ }) => Promise<{
5
+ stdout: string;
6
+ }>) => Promise<boolean>;
@@ -0,0 +1,27 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { SpawnfileError } from "../../../shared/index.js";
4
+ import { trainingSlotPaths } from "./paths.js";
5
+ const run = promisify(execFile);
6
+ const quote = (value) => `'${value.replace(/'/gu, `'"'"'`)}'`;
7
+ /** Clock directories are public by contract; prove the sibling mask in the worker's mount namespace. */
8
+ export const probeTrainingSiblingClock = async (slot, target, execute = run) => {
9
+ const p = trainingSlotPaths(slot);
10
+ const script = [
11
+ 'set -eu',
12
+ `cat ${quote(p.clockFile)} >/dev/null`,
13
+ // Use the same mode-000 directory bind as Grok's deny mounts. Neither an unavailable
14
+ // namespace nor a hidden own clock is a successful denial.
15
+ `blocked=$(mktemp -d ${quote(`${p.privateTmp}/clock-probe.XXXXXX`)})`,
16
+ 'trap \'chmod 700 "$blocked"; rmdir "$blocked"\' EXIT',
17
+ 'chmod 000 "$blocked"',
18
+ `bwrap --die-with-parent --cap-drop ALL --ro-bind / / --dev /dev --ro-bind "$blocked" ${quote(target)} -- /bin/sh -ceu ${quote(`cat ${quote(p.clockFile)} >/dev/null; if ls -A ${quote(target)} >/dev/null 2>&1; then echo reachable; else echo denied; fi`)}`
19
+ ].join("\n");
20
+ const result = await execute("setpriv", ["--clear-groups", `--reuid=${p.workerUid}`, `--regid=${p.workerUid}`,
21
+ "--inh-caps=-all", "--ambient-caps=-all", "--bounding-set=-all", "--", "/bin/sh", "-ceu", script], { timeout: 10_000 });
22
+ if (result.stdout.trim() === "denied")
23
+ return true;
24
+ if (result.stdout.trim() === "reachable")
25
+ return false;
26
+ throw new SpawnfileError("runtime_error", "Training clock canary returned no verified verdict");
27
+ };
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  /**
3
- * `spawnfile.training-broker.v1`: the only thing the host tells the
3
+ * `spawnfile.training-broker.v2`: the only thing the host tells the
4
4
  * broker-capable training container about its slot. It is data, never code —
5
5
  * the image's own Spawnfile distribution renders the provisioning from it with
6
6
  * the same renderers production uses, so no host-written executable is ever
@@ -11,7 +11,9 @@ import { z } from "zod";
11
11
  * the named realm volume.
12
12
  */
13
13
  export declare const trainingBrokerDeclarationSchema: z.ZodObject<{
14
- version: z.ZodLiteral<"spawnfile.training-broker.v1">;
14
+ version: z.ZodLiteral<"spawnfile.training-broker.v2">;
15
+ maxRunRequests: z.ZodDefault<z.ZodNumber>;
16
+ slots: z.ZodDefault<z.ZodNumber>;
15
17
  engine: z.ZodLiteral<"grok">;
16
18
  agentId: z.ZodString;
17
19
  model: z.ZodEnum<{
@@ -3,7 +3,7 @@ import { z } from "zod";
3
3
  import { DAIMON_GROK_BROKER_MODELS, DAIMON_GROK_BROKER_REASONING_EFFORTS, DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
4
4
  const canonical = z.string().min(2).max(4_096).refine((value) => path.posix.isAbsolute(value) && path.posix.normalize(value) === value && !value.endsWith("/") && !value.includes("\0"), "canonical absolute path");
5
5
  /**
6
- * `spawnfile.training-broker.v1`: the only thing the host tells the
6
+ * `spawnfile.training-broker.v2`: the only thing the host tells the
7
7
  * broker-capable training container about its slot. It is data, never code —
8
8
  * the image's own Spawnfile distribution renders the provisioning from it with
9
9
  * the same renderers production uses, so no host-written executable is ever
@@ -14,7 +14,9 @@ const canonical = z.string().min(2).max(4_096).refine((value) => path.posix.isAb
14
14
  * the named realm volume.
15
15
  */
16
16
  export const trainingBrokerDeclarationSchema = z.strictObject({
17
- version: z.literal("spawnfile.training-broker.v1"),
17
+ version: z.literal("spawnfile.training-broker.v2"),
18
+ maxRunRequests: z.number().int().positive().max(Number.MAX_SAFE_INTEGER).default(1000),
19
+ slots: z.number().int().min(1).max(8).default(4),
18
20
  engine: z.literal("grok"),
19
21
  agentId: z.string().min(1).max(128).regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u),
20
22
  model: z.enum(DAIMON_GROK_BROKER_MODELS),
@@ -1,7 +1,12 @@
1
- import { spawn } from "node:child_process";
1
+ import { execFile, spawn } from "node:child_process";
2
2
  import { randomBytes } from "node:crypto";
3
3
  import { lstat, readFile } from "node:fs/promises";
4
4
  import os from "node:os";
5
+ import { promisify } from "node:util";
6
+ import { renderTrainingBrokerProvisioning } from "./provisioning.js";
7
+ import { stageTrainingEvaluatorSecret } from "./evaluatorSecrets.js";
8
+ import { startBrokerProcesses, stopBrokerProcesses } from "./processes.js";
9
+ import { resetTrainingBrokerSlotAsOrganization } from "./reset.js";
5
10
  import path from "node:path";
6
11
  import { SpawnfileError } from "../../../shared/index.js";
7
12
  import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
@@ -10,7 +15,7 @@ import { loadDaimonProjectionModule, resolveTrainingGrokProjection } from "./pro
10
15
  import { resolveTrainingGrokRegistration } from "./registration.js";
11
16
  import { createTrainingSlotRuntime } from "./runtime.js";
12
17
  import { createTrainingSlotSupervisor, serveTrainingSlotSupervisor, startTrainingSlot } from "./supervisor.js";
13
- import { DAIMON_ORGANIZATION_UID, TRAINING_BOOTSTRAP_MOUNT, TRAINING_BROKER_DECLARATION_FILE, TRAINING_GRANT_HOME_ROOT, TRAINING_SUPERVISOR_SOCKET } from "./paths.js";
18
+ import { trainingSlotDescriptors, assertTrainingSlotsDocument, TRAINING_SLOTS_FILE, DAIMON_ORGANIZATION_UID, TRAINING_BOOTSTRAP_MOUNT, TRAINING_BROKER_DECLARATION_FILE, TRAINING_GRANT_HOME_ROOT, TRAINING_SUPERVISOR_SOCKET } from "./paths.js";
14
19
  export const TRAINING_GROK_BROKER_CONTROL_SOCKET_ENV = "PAIDEIA_GROK_BROKER_CONTROL_SOCKET";
15
20
  export const TRAINING_GROK_GRANT_HOME_ROOT_ENV = "PAIDEIA_GROK_GRANT_HOME_ROOT";
16
21
  export const TRAINING_ENTRYPOINT_COMMAND = "/opt/training/bin/train";
@@ -57,23 +62,32 @@ export const runTrainingBrokerEntrypoint = async (options) => {
57
62
  throw new SpawnfileError("runtime_error", "The broker-capable training container must start as root");
58
63
  const declaration = parseTrainingBrokerDeclaration(JSON.parse(await readFile(options.declarationPath ?? TRAINING_BROKER_DECLARATION_FILE, "utf8")));
59
64
  await assertBootstrap(declaration);
60
- const registration = resolveTrainingGrokRegistration(declaration);
65
+ const descriptors = trainingSlotDescriptors(declaration.slots);
66
+ const document = JSON.parse(await readFile(TRAINING_SLOTS_FILE, "utf8"));
67
+ assertTrainingSlotsDocument(document, declaration.slots);
68
+ const registrations = descriptors.map(p => resolveTrainingGrokRegistration({ ...declaration, slot: p.slot }));
61
69
  const daimon = await (options.loadDaimon ?? loadDaimonProjectionModule)();
62
- // Daimon's projection is I/O-free, so the digest the receipt will bind is known before anything is provisioned.
63
- const { projectionSha256 } = await resolveTrainingGrokProjection(declaration, registration, daimon);
64
- const runtime = createTrainingSlotRuntime({ declaration, registration, projectionSha256 });
65
- // Provision, start, canary and publish the slot preflight receipt before `train` exists at all: the
66
- // first trial must not be the one trial that runs on no worker-uid denial evidence, and a refusal
67
- // here costs nothing while the same refusal after the first wake costs that trial's spend.
68
- const preflight = await startTrainingSlot(runtime, randomBytes(32).toString("hex"));
69
- const supervisor = createTrainingSlotSupervisor({ runtime, organizationUid: declaration.organizationUid });
70
- const server = serveTrainingSlotSupervisor(supervisor, TRAINING_SUPERVISOR_SOCKET, log, declaration.organizationUid);
71
- log(`slot ${registration.slot} provisioned for ${registration.agentId} (${registration.model}/${registration.reasoningEffort}), projection ${projectionSha256}, `
72
- + `generation ${preflight.generation} with ${preflight.canaries} denied canaries at ${preflight.receipt}`);
73
- const status = await runTrainingChild(options.argv, declaration, log);
74
- server.close();
75
- await runtime.stop();
76
- return status;
70
+ const reset = resetTrainingBrokerSlotAsOrganization;
71
+ const runtimes = await Promise.all(registrations.map(async (registration) => {
72
+ const { projectionSha256 } = await resolveTrainingGrokProjection(declaration, registration, daimon);
73
+ return createTrainingSlotRuntime({ declaration, registration, projectionSha256, reset });
74
+ }));
75
+ await stageTrainingEvaluatorSecret();
76
+ await promisify(execFile)("/bin/bash", ["--noprofile", "--norc", "-ceu", renderTrainingBrokerProvisioning(registrations, declaration.maxRunRequests).join("\n")], { maxBuffer: 8 * 1024 * 1024 });
77
+ const children = await startBrokerProcesses({ log });
78
+ let server;
79
+ try {
80
+ for (const runtime of runtimes)
81
+ await startTrainingSlot(runtime, randomBytes(32).toString("hex"));
82
+ const supervisor = createTrainingSlotSupervisor({ runtimes, organizationUid: declaration.organizationUid });
83
+ server = serveTrainingSlotSupervisor(supervisor, TRAINING_SUPERVISOR_SOCKET, log, declaration.organizationUid);
84
+ log(`provisioned ${registrations.length} training slots with one broker process set`);
85
+ return await runTrainingChild(options.argv, declaration, log);
86
+ }
87
+ finally {
88
+ server?.close();
89
+ await stopBrokerProcesses(children, log);
90
+ }
77
91
  };
78
92
  /**
79
93
  * `train` as uid 2000 with an empty bounding set, proven inside the child
@@ -98,6 +112,7 @@ const runTrainingChild = (argv, declaration, log) => new Promise((resolve) => {
98
112
  ...process.env,
99
113
  [TRAINING_GROK_BROKER_CONTROL_SOCKET_ENV]: DAIMON_GROK_ENGINE_BROKER.controlSocketPath,
100
114
  [TRAINING_GROK_GRANT_HOME_ROOT_ENV]: TRAINING_GRANT_HOME_ROOT,
115
+ PAIDEIA_TRAINING_SLOTS_FILE: TRAINING_SLOTS_FILE,
101
116
  HOME: "/home/training"
102
117
  }
103
118
  });
@@ -0,0 +1,2 @@
1
+ /** Root stages into tmpfs before provisioning drops directory ownership and evaluator capabilities. */
2
+ export declare const stageTrainingEvaluatorSecret: (env?: NodeJS.ProcessEnv) => Promise<void>;
@@ -0,0 +1,60 @@
1
+ import { constants } from "node:fs";
2
+ import { chmod, chown, lstat, mkdir, open } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { TRAINING_TYPESAFE_SECRET_FILE, TRAINING_TYPESAFE_SECRET_INGRESS } from "../container/evaluators.js";
5
+ import { DAIMON_ORGANIZATION_UID } from "./paths.js";
6
+ /** Root stages into tmpfs before provisioning drops directory ownership and evaluator capabilities. */
7
+ export const stageTrainingEvaluatorSecret = async (env = process.env) => {
8
+ if (env.PAIDEIA_TYPESAFE_SECRET_FILE === undefined)
9
+ return;
10
+ if (process.getuid?.() !== 0 || env.PAIDEIA_TYPESAFE_SECRET_FILE !== TRAINING_TYPESAFE_SECRET_FILE) {
11
+ throw Error("Invalid evaluator secret staging declaration");
12
+ }
13
+ try {
14
+ const ingress = path.posix.dirname(TRAINING_TYPESAFE_SECRET_INGRESS);
15
+ const parent = await lstat(ingress);
16
+ if (!parent.isDirectory() || parent.isSymbolicLink() || parent.uid !== 0)
17
+ throw Error("Invalid ingress directory");
18
+ // This directory is tmpfs, never the mounted credential inode.
19
+ await chmod(ingress, 0o700);
20
+ const source = await open(TRAINING_TYPESAFE_SECRET_INGRESS, constants.O_RDONLY | constants.O_NOFOLLOW);
21
+ let bytes;
22
+ try {
23
+ const info = await source.stat();
24
+ if (!info.isFile() || info.nlink !== 1 || info.size < 1 || info.size > 64 * 1024)
25
+ throw Error("Invalid ingress leaf");
26
+ const buffer = Buffer.alloc(64 * 1024 + 1);
27
+ const { bytesRead } = await source.read(buffer, 0, buffer.length, 0);
28
+ const after = await source.stat();
29
+ if (bytesRead !== info.size || after.size !== info.size || after.mtimeMs !== info.mtimeMs || after.ctimeMs !== info.ctimeMs) {
30
+ throw Error("Secret changed while staging");
31
+ }
32
+ bytes = buffer.subarray(0, bytesRead);
33
+ }
34
+ finally {
35
+ await source.close();
36
+ }
37
+ const destination = path.posix.dirname(TRAINING_TYPESAFE_SECRET_FILE);
38
+ await mkdir(destination, { mode: 0o700 });
39
+ const target = await open(TRAINING_TYPESAFE_SECRET_FILE, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
40
+ try {
41
+ await target.writeFile(bytes);
42
+ await target.sync();
43
+ await target.chown(DAIMON_ORGANIZATION_UID, DAIMON_ORGANIZATION_UID);
44
+ }
45
+ finally {
46
+ bytes.fill(0);
47
+ await target.close();
48
+ }
49
+ await chown(destination, DAIMON_ORGANIZATION_UID, DAIMON_ORGANIZATION_UID);
50
+ const info = await lstat(TRAINING_TYPESAFE_SECRET_FILE), directory = await lstat(destination);
51
+ if (info.uid !== DAIMON_ORGANIZATION_UID || info.gid !== DAIMON_ORGANIZATION_UID || (info.mode & 0o777) !== 0o600 ||
52
+ directory.uid !== DAIMON_ORGANIZATION_UID || directory.gid !== DAIMON_ORGANIZATION_UID || (directory.mode & 0o777) !== 0o700) {
53
+ throw Error("Invalid evaluator secret ownership");
54
+ }
55
+ }
56
+ catch {
57
+ // Filesystem errors may contain credential bytes supplied by a transport; emit only a fixed diagnostic.
58
+ throw Error("Evaluator secret staging failed");
59
+ }
60
+ };
@@ -2,9 +2,10 @@ export { parseTrainingBrokerDeclaration, trainingBrokerDeclarationSchema, type T
2
2
  export { assertNotDesktopGrokAuth, desktopGrokAuthPaths, runTrainingBrokerEntrypoint, trainingChildArgv, TRAINING_GROK_BROKER_CONTROL_SOCKET_ENV, TRAINING_GROK_GRANT_HOME_ROOT_ENV } from "./entrypoint.js";
3
3
  export { brokerProcessPlan, startBrokerProcesses, stopBrokerProcesses } from "./processes.js";
4
4
  export { loadDaimonProjectionModule, resolveTrainingGrokProjection, trainingOrganizationRuntimeConfig } from "./projection.js";
5
- export { renderTrainingBrokerProvisioning, renderTrainingIdentities, trainingSlotDirectories } from "./provisioning.js";
5
+ export { renderTrainingBrokerProvisioning, renderTrainingIdentities, renderTrainingSlotProvisioning, trainingSlotDirectories } from "./provisioning.js";
6
6
  export { buildTrainingSlotReceipt, readGrokExecutableSha256, resolveBackingFilesystem, resolveTrainingCanaries } from "./receipt.js";
7
7
  export { resolveTrainingGrokDenyPaths, resolveTrainingGrokRegistration } from "./registration.js";
8
- export { createTrainingSlotRuntime } from "./runtime.js";
8
+ export { resetTrainingBrokerSlot, resetTrainingBrokerSlotAsOrganization } from "./reset.js";
9
+ export { createTrainingSlotRuntime, renderTrainingSlotWipe } from "./runtime.js";
9
10
  export { assertTrainingSupervisorSocketIdentity, createTrainingSlotSupervisor, serveTrainingSlotSupervisor, TRAINING_SUPERVISOR_PROTOCOL, type TrainingSlotRuntime } from "./supervisor.js";
10
11
  export * from "./paths.js";
@@ -2,9 +2,10 @@ export { parseTrainingBrokerDeclaration, trainingBrokerDeclarationSchema } from
2
2
  export { assertNotDesktopGrokAuth, desktopGrokAuthPaths, runTrainingBrokerEntrypoint, trainingChildArgv, TRAINING_GROK_BROKER_CONTROL_SOCKET_ENV, TRAINING_GROK_GRANT_HOME_ROOT_ENV } from "./entrypoint.js";
3
3
  export { brokerProcessPlan, startBrokerProcesses, stopBrokerProcesses } from "./processes.js";
4
4
  export { loadDaimonProjectionModule, resolveTrainingGrokProjection, trainingOrganizationRuntimeConfig } from "./projection.js";
5
- export { renderTrainingBrokerProvisioning, renderTrainingIdentities, trainingSlotDirectories } from "./provisioning.js";
5
+ export { renderTrainingBrokerProvisioning, renderTrainingIdentities, renderTrainingSlotProvisioning, trainingSlotDirectories } from "./provisioning.js";
6
6
  export { buildTrainingSlotReceipt, readGrokExecutableSha256, resolveBackingFilesystem, resolveTrainingCanaries } from "./receipt.js";
7
7
  export { resolveTrainingGrokDenyPaths, resolveTrainingGrokRegistration } from "./registration.js";
8
- export { createTrainingSlotRuntime } from "./runtime.js";
8
+ export { resetTrainingBrokerSlot, resetTrainingBrokerSlotAsOrganization } from "./reset.js";
9
+ export { createTrainingSlotRuntime, renderTrainingSlotWipe } from "./runtime.js";
9
10
  export { assertTrainingSupervisorSocketIdentity, createTrainingSlotSupervisor, serveTrainingSlotSupervisor, TRAINING_SUPERVISOR_PROTOCOL } from "./supervisor.js";
10
11
  export * from "./paths.js";
@@ -2,7 +2,7 @@
2
2
  import { runTrainingBrokerEntrypoint } from "./entrypoint.js";
3
3
  /**
4
4
  * The broker-capable training image's root entrypoint process. The image ships
5
- * it; the host supplies only the read-only `spawnfile.training-broker.v1`
5
+ * it; the host supplies only the read-only `spawnfile.training-broker.v2`
6
6
  * declaration and never a script, so no host executable enters the container.
7
7
  */
8
8
  const main = async () => {
@@ -2,7 +2,7 @@ import { DAIMON_BROKER_UID, DAIMON_ORGANIZATION_UID } from "../../../runtime/dai
2
2
  /**
3
3
  * Every container path the broker-capable training container fixes.
4
4
  *
5
- * They are fixed rather than derived because three parties must agree on them
5
+ * They are deterministic because three parties must agree on them
6
6
  * without talking to each other: the root entrypoint that provisions them, the
7
7
  * root slot supervisor that wipes and re-provisions them on recycle, and
8
8
  * Paideia's native adapter, which writes them into `paideia.daimon-native.launch.v2`
@@ -10,7 +10,7 @@ import { DAIMON_BROKER_UID, DAIMON_ORGANIZATION_UID } from "../../../runtime/dai
10
10
  * resolves a path, so each one must also be canonical and never a symlink; the
11
11
  * provisioning program asserts that before a slot is used.
12
12
  *
13
- * Everything under `/run/training/slot` is per-trial state on tmpfs — never the
13
+ * Everything under `/run/training/slots/<i>` is per-trial state on tmpfs — never the
14
14
  * Grok realm volume (R2). The realm volume holds only `auth.json` and the
15
15
  * broker credential journal, so a recycle can wipe the slot without touching
16
16
  * the one durable rotating credential.
@@ -19,20 +19,8 @@ export declare const TRAINING_RUN_ROOT = "/run/training/output";
19
19
  export declare const TRAINING_SEALED_INPUTS_ROOT = "/run/training/inputs";
20
20
  export declare const TRAINING_PAIDEIA_ROOT = "/run/paideia";
21
21
  export declare const TRAINING_CONTEXT_FILE = "/run/paideia/context.json";
22
- /** Host-written, read-only `spawnfile.training-broker.v1` declaration the root entrypoint reads. */
22
+ /** Host-written, read-only `spawnfile.training-broker.v2` declaration the root entrypoint reads. */
23
23
  export declare const TRAINING_BROKER_DECLARATION_FILE = "/run/paideia/training-broker.json";
24
- export declare const TRAINING_SLOT_ROOT = "/run/training/slot";
25
- export declare const TRAINING_SLOT_WORKSPACE = "/run/training/slot/workspace";
26
- export declare const TRAINING_SLOT_RUNTIME_HOME = "/run/training/slot/runtime-home";
27
- export declare const TRAINING_SLOT_STATE_ROOT = "/run/training/slot/state";
28
- export declare const TRAINING_SLOT_ACCEPTANCE_STORE = "/run/training/slot/state/wake-acceptance";
29
- /** Per-slot turn store. On tmpfs on purpose: a replayed turn from trial N must never satisfy trial N+1 (R2). */
30
- export declare const TRAINING_SLOT_TURN_STORE = "/run/training/slot/turns";
31
- export declare const TRAINING_SLOT_USAGE_DIRECTORY = "/run/training/slot/usage";
32
- export declare const TRAINING_SLOT_USAGE_LEDGER = "/run/training/slot/usage/usage.jsonl";
33
- export declare const TRAINING_SLOT_PREFLIGHT_RECEIPT = "/run/training/slot/preflight.json";
34
- /** Supervisor-owned monotonic generation counter; survives a recycle, never a container restart. */
35
- export declare const TRAINING_SLOT_GENERATION_FILE = "/run/training/slot/generation.json";
36
24
  export declare const TRAINING_INFERENCE_DIRECTORY = "/run/training/inference";
37
25
  export declare const TRAINING_INFERENCE_LEDGER = "/run/training/inference/inference.jsonl";
38
26
  /** Judge grant homes: `2000:2000 0700`, denied to every worker uid. Paideia reads it as `PAIDEIA_GROK_GRANT_HOME_ROOT`. */
@@ -54,9 +42,6 @@ export declare const TRAINING_SUPERVISOR_DIRECTORY = "/run/training/supervisor";
54
42
  export declare const TRAINING_SUPERVISOR_SOCKET = "/run/training/supervisor/control.sock";
55
43
  export declare const TRAINING_SUPERVISOR_LOG = "/run/training/supervisor/supervisor.log";
56
44
  export declare const TRAINING_WORKER_ROOT = "/var/lib/daimon-workers";
57
- export declare const TRAINING_SLOT_INDEX = 0;
58
- export declare const TRAINING_WORKER_UID: number;
59
- export declare const TRAINING_WORKER_HOME: string;
60
45
  /**
61
46
  * Paideia's own fixed container paths (`containerPaths` in its native launch
62
47
  * schema). They are *not* individual deny entries: Grok 1.0.34 materializes
@@ -82,43 +67,99 @@ export declare const TRAINING_CALLER_PROTECTED_PATHS: readonly ["/run/paideia/co
82
67
  * tagged `context` — the caller-state role — since there is no other way to
83
68
  * carry a path through that contract.
84
69
  */
85
- export declare const TRAINING_EVALUATOR_PATHS: readonly {
86
- role: "run-root" | "context" | "sealed-inputs" | "judge-home" | "slot-ledger";
87
- path: string;
88
- }[];
89
- /**
90
- * One entry per evaluator role, in declaration order: the launch receipt requires all five roles,
91
- * and several `context` paths share that role, so the first of each role is the role's root.
92
- */
93
- export declare const TRAINING_EVALUATOR_ROOTS: {
70
+ export declare const TRAINING_SLOTS_FILE = "/run/paideia/slots.json";
71
+ export declare const TRAINING_SLOTS_VERSION: "spawnfile.training-slots.v1";
72
+ export declare const TRAINING_DEFAULT_SLOTS = 4;
73
+ export declare const TRAINING_MAX_SLOTS = 8;
74
+ /** 100 ports per slot: offsets 0=Moltnet, 1=worker control, 2=bridge; 3..99 reserved. */
75
+ export declare const TRAINING_PORT_BASE = 20000;
76
+ export declare const TRAINING_PORT_STRIDE = 100;
77
+ export declare const TRAINING_BROKER_SOCKET_PATHS: readonly ["/run/daimon-engine-broker/control.sock", "/run/daimon-engine-broker/backend.sock", "/run/daimon-engine-broker/launcher.sock"];
78
+ export declare const TRAINING_TURN_STORE_ROOT = "/run/training/turns";
79
+ /** Persistent, broker-only run counter; never part of a slot recycle. */
80
+ export declare const TRAINING_RUN_REQUEST_STORE = "/run/training/request-budget";
81
+ export declare const assertTrainingSlotCount: (slots: number) => number;
82
+ export declare const trainingSlotPaths: (slot: number) => {
83
+ slot: number;
84
+ workerUid: number;
85
+ root: string;
86
+ workerHome: string;
87
+ workspace: string;
88
+ runtimeHome: string;
89
+ state: string;
90
+ acceptanceStore: string;
91
+ turns: string;
92
+ usageDirectory: string;
93
+ usageLedger: string;
94
+ preflightReceipt: string;
95
+ generationFile: string;
96
+ sealedInputsAttestation: string;
97
+ privateTmp: string;
98
+ clockDirectory: string;
99
+ clockFile: string;
100
+ ports: {
101
+ base: number;
102
+ stride: number;
103
+ moltnet: number;
104
+ workerControl: number;
105
+ bridge: number;
106
+ };
107
+ };
108
+ export type TrainingSlotPaths = ReturnType<typeof trainingSlotPaths>;
109
+ export type TrainingEvaluatorPath = {
94
110
  role: "run-root" | "context" | "sealed-inputs" | "judge-home" | "slot-ledger";
95
111
  path: string;
112
+ };
113
+ /** The complete additional projection deny set. Sibling roots and homes never nest with own masks. */
114
+ export declare const trainingEvaluatorPaths: (slot: number, slots: number) => TrainingEvaluatorPath[];
115
+ export declare const trainingSlotDescriptors: (slots?: number) => {
116
+ evaluatorPaths: TrainingEvaluatorPath[];
117
+ containerPaths: {
118
+ path: "/run/paideia/config.json" | "/run/paideia/control" | "/run/paideia/launch.json" | "/run/paideia/token" | "/run/paideia/env" | "/run/paideia/preparation.json" | "/run/paideia/repair.json";
119
+ }[];
120
+ controlRoot: string;
121
+ slot: number;
122
+ workerUid: number;
123
+ root: string;
124
+ workerHome: string;
125
+ workspace: string;
126
+ runtimeHome: string;
127
+ state: string;
128
+ acceptanceStore: string;
129
+ turns: string;
130
+ usageDirectory: string;
131
+ usageLedger: string;
132
+ preflightReceipt: string;
133
+ generationFile: string;
134
+ sealedInputsAttestation: string;
135
+ privateTmp: string;
136
+ clockDirectory: string;
137
+ clockFile: string;
138
+ ports: {
139
+ base: number;
140
+ stride: number;
141
+ moltnet: number;
142
+ workerControl: number;
143
+ bridge: number;
144
+ };
96
145
  }[];
97
- /**
98
- * What `paideia.daimon-native.launch.v2`'s `controlRoot` must be.
99
- *
100
- * Paideia's worker passes it to Daimon as `acceptanceStorePath`, and Daimon adds
101
- * it to the projection's deny list, so it has to be the same path this
102
- * container masks as its slot state root. Its own default
103
- * (`/run/paideia/control`) would both change the digest and nest inside the
104
- * `/run/paideia` mask, which Grok refuses — Daimon renders a nested mask
105
- * without complaining, so the failure would only appear at the first turn.
106
- */
107
- export declare const TRAINING_CALLER_CONTROL_ROOT = "/run/training/slot/state";
108
- /**
109
- * Everything this container provisions that the one training worker must not
110
- * read, beyond Daimon's own protected set (realm, bootstrap, acceptance store).
111
- * Each entry sits strictly below a Grok 1.0.34 base-profile grant — Grok
112
- * refuses a profile whose deny entry equals or contains `/run`, `/var`, `/etc`
113
- * or `/tmp` — and no entry covers another, because masks cannot nest.
114
- */
115
- /**
116
- * The added deny set is exactly the launch's `evaluatorPaths`, so Spawnfile and
117
- * Paideia hand Daimon's resolver the same list. `TRAINING_SLOT_STATE_ROOT` is
118
- * deliberately absent: Daimon adds it itself, from the control root above.
119
- */
120
- export declare const TRAINING_ADDED_DENY_PATHS: readonly string[];
121
- /** Paths the provisioning program creates root-owned `0700` when absent, so every deny entry always has a target inode. */
146
+ export type TrainingSlotDescriptor = ReturnType<typeof trainingSlotDescriptors>[number];
147
+ export interface TrainingSlotsDocument {
148
+ schema: typeof TRAINING_SLOTS_VERSION;
149
+ slots: {
150
+ index: number;
151
+ workerUid: number;
152
+ roots: Record<string, string>;
153
+ ports: {
154
+ base: number;
155
+ count: number;
156
+ };
157
+ }[];
158
+ }
159
+ export declare const trainingSlotsDocument: (slots?: number) => TrainingSlotsDocument;
160
+ /** Both sides derive the descriptor bytes; a stale or edited bind must never certify a different pool. */
161
+ export declare const assertTrainingSlotsDocument: (value: unknown, slots: number) => void;
162
+ /** Shared deny targets exist before worker attestation; no per-slot subtree is touched here. */
122
163
  export declare const TRAINING_OPTIONAL_DENY_DIRECTORIES: readonly string[];
123
164
  /**
124
165
  * Deny entries a launch may legitimately not have mounted. Everything else must
@@ -170,7 +211,6 @@ export declare const TRAINING_HOST_BIND_DENY_PATHS: readonly string[];
170
211
  */
171
212
  export declare const TRAINING_SEALED_DENY_PATHS: readonly string[];
172
213
  /** Spawnfile-owned per-route seal attestation, written by provisioning beside the slot preflight receipt. */
173
- export declare const TRAINING_SEALED_INPUTS_ATTESTATION = "/run/training/slot/sealed-inputs.json";
174
214
  /** The image-baked identity of the sealed inputs root, asserted before every slot and never writable at runtime. */
175
215
  export declare const TRAINING_SEALED_INPUTS_IDENTITY: {
176
216
  readonly uid: 0;
@@ -188,9 +228,9 @@ export declare const TRAINING_SEALED_INPUTS_IDENTITY: {
188
228
  * anyway, so an undeclared one degrades to "left in place and reported" rather
189
229
  * than a failed provision.
190
230
  */
191
- export declare const TRAINING_WIPE_TARGETS: readonly string[];
192
- /** Emptied but kept: their paths are registered with Daimon and must stay canonical across a recycle. */
193
- export declare const TRAINING_CLEAR_TARGETS: readonly string[];
231
+ export declare const trainingWipeTargets: (slot: number) => readonly string[];
232
+ /** Broker-owned turns and clocks are reset through its control seam, never by filesystem deletion. */
233
+ export declare const trainingClearTargets: (slot: number) => readonly string[];
194
234
  export declare const TRAINING_REALM_MOUNT: "/var/lib/spawnfile/daimon/grok-subscription-realm";
195
235
  export declare const TRAINING_BOOTSTRAP_MOUNT: "/var/lib/spawnfile/daimon/grok-bootstrap-auth";
196
236
  export { DAIMON_BROKER_UID, DAIMON_ORGANIZATION_UID };