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
@@ -0,0 +1,19 @@
1
+ import type { CompilePlan, ResolvedAgentNode } from "../../types.js";
2
+ import type { ResolvedWorkspaceResource } from "../../workspaceResources.js";
3
+ import type { TrainingPlanOverride } from "./contract.js";
4
+ import type { TrainingAgentNode } from "./types.js";
5
+ export declare const invalidTraining: (message: string) => never;
6
+ export declare const lexical: (left: string, right: string) => number;
7
+ /** Shared selection for the authoring plan and runtime recording; resolved visibility is authoritative. */
8
+ export declare const resolveTrainingRecordVolumes: (agent: {
9
+ id: string;
10
+ value: ResolvedAgentNode;
11
+ }) => Array<ResolvedWorkspaceResource & {
12
+ kind: "volume";
13
+ }>;
14
+ export declare const resolveTrainingResource: (plan: CompilePlan, agent: TrainingAgentNode, id: string, context: string) => {
15
+ resource: ResolvedWorkspaceResource;
16
+ declaredBy: string;
17
+ };
18
+ /** Uses compiler-resolved visibility, including shared banks and representative attachments. */
19
+ export declare const resolveTrainingOverride: (plan: CompilePlan, agent: TrainingAgentNode, section: TrainingPlanOverride["section"], id: string, context: string) => TrainingPlanOverride;
@@ -0,0 +1,57 @@
1
+ import { SpawnfileError } from "../../../shared/index.js";
2
+ export const invalidTraining = (message) => {
3
+ throw new SpawnfileError("validation_error", message);
4
+ };
5
+ export const lexical = (left, right) => left < right ? -1 : left > right ? 1 : 0;
6
+ const declaredId = (plan, source) => plan.nodes.find((node) => node.value.source === source)?.id
7
+ ?? invalidTraining(`Training reference has no declaring node: ${source}`);
8
+ const one = (matches, id, context) => {
9
+ if (matches.length === 0)
10
+ invalidTraining(`${context}: unknown id ${id}`);
11
+ if (matches.length > 1)
12
+ invalidTraining(`${context}: ambiguous id ${id}`);
13
+ return matches[0];
14
+ };
15
+ /** Shared selection for the authoring plan and runtime recording; resolved visibility is authoritative. */
16
+ export const resolveTrainingRecordVolumes = (agent) => (agent.value.training?.record?.volumes ?? []).map((id) => {
17
+ const context = `Training record.volumes for ${agent.id}`;
18
+ const resource = one((agent.value.workspaceResources ?? []).filter((entry) => entry.id === id), id, context);
19
+ if (resource.kind !== "volume")
20
+ return invalidTraining(`${context}: ${id} must be a volume`);
21
+ if (resource.feed)
22
+ return invalidTraining(`${context}: fed volume ${id} is recorded through its landing log`);
23
+ return resource;
24
+ }).sort((left, right) => lexical(left.id, right.id));
25
+ export const resolveTrainingResource = (plan, agent, id, context) => {
26
+ const resource = one((agent.value.workspaceResources ?? []).filter((entry) => entry.id === id), id, context);
27
+ return { resource, declaredBy: declaredId(plan, resource.scope.key) };
28
+ };
29
+ /** Uses compiler-resolved visibility, including shared banks and representative attachments. */
30
+ export const resolveTrainingOverride = (plan, agent, section, id, context) => {
31
+ let declaredBy;
32
+ if (section === "resources") {
33
+ declaredBy = resolveTrainingResource(plan, agent, id, context).declaredBy;
34
+ }
35
+ else if (section === "memory") {
36
+ // Multiple member slots can expose the same bank. They are one item, not ambiguity.
37
+ const sources = [...new Set((agent.value.memoryAccess ?? [])
38
+ .filter((entry) => entry.bank.id === id).map((entry) => entry.source))];
39
+ declaredBy = declaredId(plan, one(sources, id, context));
40
+ }
41
+ else {
42
+ const attachedSources = new Set();
43
+ for (const attachment of agent.value.surfaces?.moltnet ?? []) {
44
+ if (attachment.network !== id)
45
+ continue;
46
+ if (attachment.teamSource)
47
+ attachedSources.add(attachment.teamSource);
48
+ for (const source of Object.keys(attachment.contextRooms ?? {}))
49
+ attachedSources.add(source);
50
+ }
51
+ const matches = plan.nodes.filter((node) => node.value.kind === "team"
52
+ && attachedSources.has(node.value.source)
53
+ && node.value.networks?.some((network) => network.id === id));
54
+ declaredBy = one(matches, id, context).id;
55
+ }
56
+ return { section, id, declaredBy };
57
+ };
@@ -0,0 +1,4 @@
1
+ import { type TrainingPlan } from "./contract.js";
2
+ import type { LoadedTrainingProject } from "./types.js";
3
+ /** Pure projection over loaded facts: no filesystem, clock, execution, or mutation. */
4
+ export declare const resolveTrainingPlan: (project: LoadedTrainingProject, agentId: string | undefined, producerVersion: string) => TrainingPlan;
@@ -0,0 +1,73 @@
1
+ import { selectTrainingAgent } from "../selection.js";
2
+ import { TRAINING_PLAN_VERSION, trainingPlanSchema } from "./contract.js";
3
+ import { invalidTraining, lexical, resolveTrainingRecordVolumes, resolveTrainingResource } from "./references.js";
4
+ import { planGrader, resolveTrainingTarget, trainingAgents } from "./targets.js";
5
+ const optimizerFor = (agent, hasTargets) => {
6
+ const optimizer = agent.value.training?.optimizer;
7
+ const required = ["method", "model", "variants", "keep"];
8
+ const missing = required.filter((key) => optimizer?.[key] === undefined);
9
+ if (optimizer?.budget?.rounds === undefined)
10
+ missing.push("budget.rounds");
11
+ if (missing.length > 0) {
12
+ if (hasTargets)
13
+ invalidTraining(`Training optimizer for ${agent.id} is missing fields: ${missing.join(", ")}`);
14
+ return null;
15
+ }
16
+ if (hasTargets && optimizer.keep > optimizer.variants) {
17
+ invalidTraining(`Training optimizer for ${agent.id} requires keep <= variants`);
18
+ }
19
+ return {
20
+ method: optimizer.method, model: optimizer.model, variants: optimizer.variants, keep: optimizer.keep,
21
+ budget: { rounds: optimizer.budget.rounds }
22
+ };
23
+ };
24
+ const recordFor = (project, agent) => {
25
+ const record = agent.value.training?.record;
26
+ if (record === undefined)
27
+ return null;
28
+ return {
29
+ keep: record.keep ?? null,
30
+ volumes: resolveTrainingRecordVolumes(agent).map(({ id }) => {
31
+ const context = `Training record.volumes for ${agent.id}`;
32
+ const { declaredBy } = resolveTrainingResource(project.compilePlan, agent, id, context);
33
+ return { id, declaredBy };
34
+ })
35
+ };
36
+ };
37
+ /** JSON key ordering is part of the deterministic public representation. */
38
+ const sortKeys = (value) => {
39
+ if (Array.isArray(value))
40
+ return value.map(sortKeys);
41
+ if (value !== null && typeof value === "object")
42
+ return Object.fromEntries(Object.entries(value).sort(([left], [right]) => lexical(left, right)).map(([key, item]) => [key, sortKeys(item)]));
43
+ return value;
44
+ };
45
+ /** Pure projection over loaded facts: no filesystem, clock, execution, or mutation. */
46
+ export const resolveTrainingPlan = (project, agentId, producerVersion) => {
47
+ const agents = trainingAgents(project);
48
+ const selected = selectTrainingAgent(agents, agentId);
49
+ const graders = Object.entries(selected.value.training?.graders ?? {})
50
+ .map(([name, grader]) => planGrader(project, name, grader));
51
+ const targets = [];
52
+ for (const target of project.targets) {
53
+ const resolved = resolveTrainingTarget(project, target, selected.id);
54
+ if (!resolved)
55
+ continue;
56
+ targets.push(resolved.target);
57
+ graders.push(resolved.grader);
58
+ }
59
+ const uniqueGraders = [...new Map(graders.map((grader) => [JSON.stringify(sortKeys(grader)), grader])).values()];
60
+ uniqueGraders.sort((left, right) => lexical(`${left.name}:${left.declaredBy}:${left.path}`, `${right.name}:${right.declaredBy}:${right.path}`));
61
+ targets.sort((left, right) => lexical(JSON.stringify(sortKeys(left)), JSON.stringify(sortKeys(right))));
62
+ const plan = trainingPlanSchema.parse({
63
+ version: TRAINING_PLAN_VERSION,
64
+ producer: { package: "spawnfile", version: producerVersion },
65
+ project: { root: project.root, manifest: project.manifest },
66
+ agent: { id: selected.id, name: selected.value.name },
67
+ deadlines: { experiment_ms: 43_200_000, ...selected.value.training?.deadlines },
68
+ ...(selected.value.training?.preparation ? { preparation: selected.value.training.preparation } : {}),
69
+ record: recordFor(project, selected), optimizer: optimizerFor(selected, targets.length > 0),
70
+ graders: uniqueGraders, targets
71
+ });
72
+ return sortKeys(plan);
73
+ };
@@ -0,0 +1,11 @@
1
+ import type { TrainingPlan } from "./contract.js";
2
+ import type { LoadedTrainingProject, LoadedTrainingTarget, TrainingAgentNode } from "./types.js";
3
+ export declare const trainingAgents: (project: LoadedTrainingProject) => TrainingAgentNode[];
4
+ export declare const planGrader: (project: LoadedTrainingProject, name: string, reference: {
5
+ sourcePath: string;
6
+ declaredBy: string;
7
+ }) => TrainingPlan["graders"][number];
8
+ export declare const resolveTrainingTarget: (project: LoadedTrainingProject, target: LoadedTrainingTarget, selectedId: string) => {
9
+ target: TrainingPlan["targets"][number];
10
+ grader: TrainingPlan["graders"][number];
11
+ } | null;
@@ -0,0 +1,71 @@
1
+ import path from "node:path";
2
+ import { invalidTraining, lexical, resolveTrainingOverride } from "./references.js";
3
+ const inside = (root, file) => {
4
+ const relative = path.relative(root, file);
5
+ return relative !== "" && relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);
6
+ };
7
+ export const trainingAgents = (project) => project.compilePlan.nodes.filter((node) => node.value.kind === "agent");
8
+ const targetFile = (file, target, agents) => {
9
+ const context = `Training target ${file.sourcePath} declared by ${target.declaredBy}`;
10
+ if (file.error)
11
+ invalidTraining(`${context}: ${file.error}`);
12
+ if (!file.realPath || !inside(target.directory, file.sourcePath) || !inside(target.realDirectory, file.realPath)) {
13
+ invalidTraining(`${context} must be inside its declaring manifest directory (no symlink escape)`);
14
+ }
15
+ if (!file.regular || !file.sourcePath.endsWith(".md"))
16
+ invalidTraining(`${context} must be an existing regular .md file`);
17
+ if (file.nestedManifests.length > 0)
18
+ invalidTraining(`${context} belongs to a nested Spawnfile: ${file.nestedManifests.join(", ")}`);
19
+ const consumers = agents.filter((agent) => [...agent.value.docs, ...agent.value.skills]
20
+ .some((entry) => entry.sourcePath === file.sourcePath)).map((agent) => agent.id).sort(lexical);
21
+ if (consumers.length === 0)
22
+ invalidTraining(`${context} is not consumed by any agent document or skill`);
23
+ return { sourcePath: file.sourcePath, path: file.path, consumers };
24
+ };
25
+ export const planGrader = (project, name, reference) => {
26
+ const grader = project.graders[reference.sourcePath]
27
+ ?? invalidTraining(`Training grader ${name} declared by ${reference.declaredBy} was not loaded: ${reference.sourcePath}`);
28
+ return {
29
+ name, declaredBy: reference.declaredBy, sourcePath: grader.sourcePath, path: grader.path
30
+ };
31
+ };
32
+ const datasetFor = (project, target, agent, sourcePath) => {
33
+ const dataset = project.datasets[sourcePath]
34
+ ?? invalidTraining(`Training dataset ${sourcePath} declared by ${target.declaredBy} was not loaded`);
35
+ return {
36
+ sourcePath: dataset.sourcePath, path: dataset.path,
37
+ examples: dataset.value.examples.map((example) => ({
38
+ id: example.id, at: example.at, wake: { ...example.wake },
39
+ overrides: ["resources", "memory", "networks"].flatMap((section) => (example[section] ?? []).map((entry) => resolveTrainingOverride(project.compilePlan, agent, section, entry.id, `Training dataset ${sourcePath} example ${example.id} declared by ${target.declaredBy} for ${agent.id} ${section}`))).sort((left, right) => lexical(`${left.section}:${left.id}:${left.declaredBy}`, `${right.section}:${right.id}:${right.declaredBy}`))
40
+ })).sort((left, right) => lexical(left.id, right.id))
41
+ };
42
+ };
43
+ export const resolveTrainingTarget = (project, target, selectedId) => {
44
+ const agents = trainingAgents(project);
45
+ const files = target.files.map((file) => targetFile(file, target, agents)).sort((left, right) => lexical(left.path, right.path));
46
+ const declaringNode = project.compilePlan.nodes.find((node) => node.id === target.declaredBy)
47
+ ?? invalidTraining(`Unknown training declaring node ${target.declaredBy}`);
48
+ const registry = declaringNode.value.training?.graders ?? {};
49
+ const reference = (Object.hasOwn(registry, target.declaration.grader) ? registry[target.declaration.grader] : undefined)
50
+ ?? invalidTraining(`Training target declared by ${target.declaredBy} references unknown grader ${target.declaration.grader}`);
51
+ const grader = planGrader(project, target.declaration.grader, reference);
52
+ const consumerIds = new Set(files.flatMap((file) => file.consumers));
53
+ const checkedAgents = target.kind === "team"
54
+ ? agents.filter((agent) => consumerIds.has(agent.id))
55
+ : agents.filter((agent) => agent.id === target.declaredBy);
56
+ const { train, validation, test } = target.declaration.datasets;
57
+ let selectedDatasets;
58
+ // Resolve every consumer even when the caller selects a different one.
59
+ for (const agent of checkedAgents) {
60
+ const datasets = {
61
+ train: datasetFor(project, target, agent, train),
62
+ validation: validation === undefined ? null : datasetFor(project, target, agent, validation),
63
+ test: datasetFor(project, target, agent, test)
64
+ };
65
+ if (agent.id === selectedId)
66
+ selectedDatasets = datasets;
67
+ }
68
+ return selectedDatasets ? {
69
+ target: { declaredBy: target.declaredBy, grader: target.declaration.grader, files, datasets: selectedDatasets }, grader
70
+ } : null;
71
+ };
@@ -0,0 +1,36 @@
1
+ import type { TrainingDataset, TrainingTarget } from "../../../manifest/index.js";
2
+ import type { CompilePlan, CompilePlanNode, ResolvedAgentNode } from "../../types.js";
3
+ export interface TrainingFileSource {
4
+ sourcePath: string;
5
+ path: string;
6
+ }
7
+ /** Filesystem observations only; ownership decisions belong to the pure resolver. */
8
+ export interface TrainingTargetFile extends TrainingFileSource {
9
+ realPath: string | null;
10
+ regular: boolean;
11
+ nestedManifests: string[];
12
+ error?: string;
13
+ }
14
+ export interface LoadedTrainingTarget {
15
+ declaredBy: string;
16
+ kind: "agent" | "team";
17
+ directory: string;
18
+ realDirectory: string;
19
+ declaration: TrainingTarget;
20
+ files: TrainingTargetFile[];
21
+ }
22
+ export interface LoadedTrainingDataset extends TrainingFileSource {
23
+ value: TrainingDataset;
24
+ sha256: string;
25
+ }
26
+ export interface LoadedTrainingProject {
27
+ root: string;
28
+ manifest: string;
29
+ compilePlan: CompilePlan;
30
+ targets: LoadedTrainingTarget[];
31
+ datasets: Record<string, LoadedTrainingDataset>;
32
+ graders: Record<string, TrainingFileSource>;
33
+ }
34
+ export type TrainingAgentNode = CompilePlanNode & {
35
+ value: ResolvedAgentNode;
36
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -10,11 +10,22 @@ COPY --from=python /usr/lib/*-linux-gnu/libsqlite3.so.0* /opt/python/lib/
10
10
  # libraries in the image so Python extensions also load in that clean process.
11
11
  RUN echo /opt/python/lib > /etc/ld.so.conf.d/training-python.conf && ldconfig
12
12
 
13
+ # Bookworm's distro library, shared by broker shell tools and direct clocked
14
+ # Daimon children. Resolve the multiarch path at build time; never preload the image.
15
+ RUN . /etc/os-release && test "$VERSION_CODENAME" = bookworm \
16
+ && apt-get update && apt-get install --yes --no-install-recommends libfaketime=0.9.10-2.1 \
17
+ && library="$(dpkg-query -L libfaketime | sed -n '\|/faketime/libfaketime\.so\.1$|p')" \
18
+ && test -f "$library" \
19
+ && install -d -o root -g root -m 0755 /usr/local/lib/daimon \
20
+ && ln -s "$library" /usr/local/lib/daimon/libfaketime.so.1 \
21
+ && chown -h root:root /usr/local/lib/daimon/libfaketime.so.1 \
22
+ && rm -rf /var/lib/apt/lists/*
23
+
13
24
  # The broker-capable container runs on a read-only root, so the fixed Daimon
14
25
  # identities are baked here instead of being created by the entrypoint the way
15
26
  # the production organization image creates them. It depends on nothing from the
16
27
  # build context, so it sits first: it is the least frequently changing layer.
17
- RUN for fixed_uid in 2000 2100 2200; do \
28
+ RUN for fixed_uid in 2000 2100 2200 2201 2202 2203 2204 2205 2206 2207; do \
18
29
  groupadd -K GID_MIN=1 --gid "$fixed_uid" "daimon-$fixed_uid" \
19
30
  && useradd -K UID_MIN=1 --no-create-home --no-log-init --uid "$fixed_uid" --gid "$fixed_uid" \
20
31
  --home-dir /nonexistent --shell /usr/sbin/nologin "daimon-$fixed_uid"; \
@@ -27,7 +38,7 @@ RUN for fixed_uid in 2000 2100 2200; do \
27
38
  # CAP_DAC_OVERRIDE there cannot override an inode owned by real uid 0; and a fresh bind of the parent
28
39
  # re-exposes this same directory rather than the bytes under it. Nothing at runtime can widen it,
29
40
  # because the container root is read-only — the slot provisioning asserts the mode and refuses otherwise.
30
- RUN mkdir -p /run/training/inputs /run/training/output \
41
+ RUN mkdir -p /run/training/inputs /run/training/output /run/training/slots \
31
42
  && chown 0:0 /run/training /run/training/output && chmod 0755 /run/training /run/training/output \
32
43
  && chown 0:2000 /run/training/inputs && chmod 0750 /run/training/inputs
33
44
 
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "spawnfile",
3
- "version": "0.1.17",
3
+ "version": "0.1.18",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "spawnfile",
9
- "version": "0.1.17",
9
+ "version": "0.1.18",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@noopolis/stele": "0.0.2",
@@ -9,8 +9,8 @@ export interface PreparedTrainingBroker {
9
9
  };
10
10
  }
11
11
  /**
12
- * Lowers `spawnfile.training-container.v3`'s broker block into the read-only
13
- * `spawnfile.training-broker.v1` declaration the container's own root
12
+ * Lowers `spawnfile.training-container.v4`'s broker block into the read-only
13
+ * `spawnfile.training-broker.v2` declaration the container's own root
14
14
  * entrypoint reads, plus the launch bindings that carry the realm volume and
15
15
  * bootstrap leaf.
16
16
  *
@@ -18,4 +18,4 @@ export interface PreparedTrainingBroker {
18
18
  * `docker create` — a dry run, a failed build — must still refuse the
19
19
  * developer's desktop Grok login rather than report it later.
20
20
  */
21
- export declare const prepareTrainingBroker: (broker: NonNullable<TrainingPreparationConfig["broker"]>, root: string, staging: string, write: boolean) => Promise<PreparedTrainingBroker>;
21
+ export declare const prepareTrainingBroker: (broker: NonNullable<TrainingPreparationConfig["broker"]>, root: string, staging: string, write: boolean, slots?: number) => Promise<PreparedTrainingBroker>;
@@ -6,8 +6,8 @@ import { parseTrainingBrokerDeclaration } from "../broker/declaration.js";
6
6
  import { TRAINING_BOOTSTRAP_MOUNT } from "../broker/paths.js";
7
7
  import { DAIMON_ORGANIZATION_UID } from "../../../runtime/daimon/runtimeIdentity.js";
8
8
  /**
9
- * Lowers `spawnfile.training-container.v3`'s broker block into the read-only
10
- * `spawnfile.training-broker.v1` declaration the container's own root
9
+ * Lowers `spawnfile.training-container.v4`'s broker block into the read-only
10
+ * `spawnfile.training-broker.v2` declaration the container's own root
11
11
  * entrypoint reads, plus the launch bindings that carry the realm volume and
12
12
  * bootstrap leaf.
13
13
  *
@@ -15,7 +15,7 @@ import { DAIMON_ORGANIZATION_UID } from "../../../runtime/daimon/runtimeIdentity
15
15
  * `docker create` — a dry run, a failed build — must still refuse the
16
16
  * developer's desktop Grok login rather than report it later.
17
17
  */
18
- export const prepareTrainingBroker = async (broker, root, staging, write) => {
18
+ export const prepareTrainingBroker = async (broker, root, staging, write, slots = 4) => {
19
19
  const bootstrap = path.resolve(root, broker.bootstrap);
20
20
  assertNotDesktopGrokAuth(bootstrap);
21
21
  const info = await lstat(bootstrap).catch(() => undefined);
@@ -24,7 +24,9 @@ export const prepareTrainingBroker = async (broker, root, staging, write) => {
24
24
  if ((info.mode & 0o077) !== 0)
25
25
  throw Error("The training Grok bootstrap must not be group- or world-accessible");
26
26
  const declaration = parseTrainingBrokerDeclaration({
27
- version: "spawnfile.training-broker.v1",
27
+ version: "spawnfile.training-broker.v2",
28
+ slots,
29
+ maxRunRequests: broker.maxRunRequests,
28
30
  engine: broker.engine,
29
31
  agentId: broker.agentId,
30
32
  model: broker.model,
@@ -4,8 +4,8 @@ export declare const trainingBuildSchema: z.ZodObject<{
4
4
  nativeImage: z.ZodString;
5
5
  pythonImage: z.ZodString;
6
6
  platform: z.ZodEnum<{
7
- "linux/arm64": "linux/arm64";
8
7
  "linux/amd64": "linux/amd64";
8
+ "linux/arm64": "linux/arm64";
9
9
  }>;
10
10
  paideia: z.ZodString;
11
11
  bridge: z.ZodString;
@@ -18,6 +18,7 @@ export declare const trainingBuildSchema: z.ZodObject<{
18
18
  integration: z.ZodObject<{
19
19
  source: z.ZodString;
20
20
  entry: z.ZodString;
21
+ execution: z.ZodOptional<z.ZodLiteral<"spawnfile.training-execution.v1">>;
21
22
  }, z.core.$strict>;
22
23
  bootstrap: z.ZodOptional<z.ZodString>;
23
24
  }, z.core.$strict>;
@@ -31,6 +32,7 @@ export declare const trainingBuildSchema: z.ZodObject<{
31
32
  * No Grok binary and no Grok auth staging enter the image.
32
33
  */
33
34
  export declare const trainingBrokerSchema: z.ZodObject<{
35
+ maxRunRequests: z.ZodDefault<z.ZodNumber>;
34
36
  engine: z.ZodLiteral<"grok">;
35
37
  agentId: z.ZodString;
36
38
  model: z.ZodEnum<{
@@ -62,8 +64,10 @@ export declare const trainingBrokerSchema: z.ZodObject<{
62
64
  export declare const trainingPreparationSchema: z.ZodObject<{
63
65
  version: z.ZodEnum<{
64
66
  "spawnfile.training-container.v3": "spawnfile.training-container.v3";
67
+ "spawnfile.training-container.v4": "spawnfile.training-container.v4";
65
68
  "spawnfile.training-container.v2": "spawnfile.training-container.v2";
66
69
  }>;
70
+ slots: z.ZodDefault<z.ZodNumber>;
67
71
  dockerContext: z.ZodString;
68
72
  image: z.ZodUnion<readonly [z.ZodObject<{
69
73
  ref: z.ZodString;
@@ -73,8 +77,8 @@ export declare const trainingPreparationSchema: z.ZodObject<{
73
77
  nativeImage: z.ZodString;
74
78
  pythonImage: z.ZodString;
75
79
  platform: z.ZodEnum<{
76
- "linux/arm64": "linux/arm64";
77
80
  "linux/amd64": "linux/amd64";
81
+ "linux/arm64": "linux/arm64";
78
82
  }>;
79
83
  paideia: z.ZodString;
80
84
  bridge: z.ZodString;
@@ -87,6 +91,7 @@ export declare const trainingPreparationSchema: z.ZodObject<{
87
91
  integration: z.ZodObject<{
88
92
  source: z.ZodString;
89
93
  entry: z.ZodString;
94
+ execution: z.ZodOptional<z.ZodLiteral<"spawnfile.training-execution.v1">>;
90
95
  }, z.core.$strict>;
91
96
  bootstrap: z.ZodOptional<z.ZodString>;
92
97
  }, z.core.$strict>;
@@ -122,7 +127,27 @@ export declare const trainingPreparationSchema: z.ZodObject<{
122
127
  claude: "claude";
123
128
  }>;
124
129
  }, z.core.$strict>>;
130
+ evaluatorRoutes: z.ZodOptional<z.ZodArray<z.ZodObject<{
131
+ purpose: z.ZodEnum<{
132
+ decisions: "decisions";
133
+ extraction: "extraction";
134
+ proposals: "proposals";
135
+ }>;
136
+ provider: z.ZodEnum<{
137
+ "codex-subscription": "codex-subscription";
138
+ typesafe: "typesafe";
139
+ }>;
140
+ model: z.ZodString;
141
+ maxRequests: z.ZodNumber;
142
+ maxSpendUsd: z.ZodOptional<z.ZodNumber>;
143
+ }, z.core.$strict>>>;
144
+ evaluatorSecrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
145
+ provider: z.ZodLiteral<"typesafe">;
146
+ source: z.ZodString;
147
+ }, z.core.$strict>>>;
148
+ subjectIsolation: z.ZodOptional<z.ZodLiteral<"codex-native-sandbox">>;
125
149
  broker: z.ZodOptional<z.ZodObject<{
150
+ maxRunRequests: z.ZodDefault<z.ZodNumber>;
126
151
  engine: z.ZodLiteral<"grok">;
127
152
  agentId: z.ZodString;
128
153
  model: z.ZodEnum<{
@@ -1,6 +1,8 @@
1
1
  import path from "node:path";
2
2
  import { z } from "zod";
3
+ import { trainingEvaluatorRoutesSchema, trainingEvaluatorSecretsSchema } from "../container/evaluators.js";
3
4
  import { trainingImageSchema } from "../container/contract.js";
5
+ import { TRAINING_EXECUTION_VERSION } from "../contract.js";
4
6
  import { DAIMON_GROK_BROKER_MODELS, DAIMON_GROK_BROKER_REASONING_EFFORTS, DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
5
7
  const local = z.string().min(1).refine(value => !/[,\r\n\0]/u.test(value));
6
8
  const relative = local.refine(value => !path.isAbsolute(value) && !value.includes("\\") && value.split("/").every(part => part !== "" && part !== "." && part !== ".." && part !== ".git"));
@@ -18,7 +20,8 @@ export const trainingBuildSchema = z.object({
18
20
  * could only ever be a different, unattested build.
19
21
  */
20
22
  grok: z.object({ source: local, sha256: sha }).strict().optional(),
21
- integration: z.object({ source: local, entry: relative.refine(value => /^[A-Za-z0-9._/-]+$/u.test(value)) }).strict(), bootstrap: local.optional()
23
+ integration: z.object({ source: local, entry: relative.refine(value => /^[A-Za-z0-9._/-]+$/u.test(value)),
24
+ execution: z.literal(TRAINING_EXECUTION_VERSION).optional() }).strict(), bootstrap: local.optional()
22
25
  }).strict();
23
26
  const bounds = DAIMON_GROK_ENGINE_BROKER.turnLimits.bounds;
24
27
  /**
@@ -31,6 +34,7 @@ const bounds = DAIMON_GROK_ENGINE_BROKER.turnLimits.bounds;
31
34
  * No Grok binary and no Grok auth staging enter the image.
32
35
  */
33
36
  export const trainingBrokerSchema = z.object({
37
+ maxRunRequests: z.number().int().positive().max(Number.MAX_SAFE_INTEGER).default(1000),
34
38
  engine: z.literal("grok"),
35
39
  agentId: z.string().min(1).max(128).regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u),
36
40
  model: z.enum(DAIMON_GROK_BROKER_MODELS),
@@ -48,7 +52,8 @@ export const trainingBrokerSchema = z.object({
48
52
  unenforcedBindPolicy: z.enum(["refuse", "profile-only"]).optional()
49
53
  }).strict();
50
54
  export const trainingPreparationSchema = z.object({
51
- version: z.enum(["spawnfile.training-container.v2", "spawnfile.training-container.v3"]),
55
+ version: z.enum(["spawnfile.training-container.v2", "spawnfile.training-container.v3", "spawnfile.training-container.v4"]),
56
+ slots: z.number().int().min(1).max(8).default(4),
52
57
  dockerContext: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/u),
53
58
  image: z.union([z.object({ ref: trainingImageSchema }).strict(), z.object({ build: trainingBuildSchema }).strict()]),
54
59
  integration: z.object({ settings: reference }).strict(),
@@ -61,10 +66,24 @@ export const trainingPreparationSchema = z.object({
61
66
  }).strict()).min(1).max(64),
62
67
  output: z.object({ source: local, destination: z.literal("/run/training/output") }).strict(),
63
68
  auth: z.array(z.object({ source: local, provider: z.enum(["codex", "claude"]) }).strict()).max(2),
69
+ evaluatorRoutes: trainingEvaluatorRoutesSchema.optional(),
70
+ evaluatorSecrets: trainingEvaluatorSecretsSchema(local).optional(),
71
+ subjectIsolation: z.literal("codex-native-sandbox").optional(),
64
72
  broker: trainingBrokerSchema.optional()
65
73
  }).strict().superRefine((value, context) => {
66
- if ((value.version === "spawnfile.training-container.v3") !== (value.broker !== undefined)) {
67
- context.addIssue({ code: "custom", message: "Only spawnfile.training-container.v3 declares a broker slot, and it always does" });
74
+ if (value.evaluatorSecrets && !value.broker && !value.subjectIsolation)
75
+ context.addIssue({ code: "custom", message: "Evaluator secrets require brokered v4 isolation or explicit codex-native-sandbox subject isolation" });
76
+ if (value.subjectIsolation && value.version !== "spawnfile.training-container.v2")
77
+ context.addIssue({ code: "custom", message: "Codex native subject isolation requires a non-brokered v2 preparation" });
78
+ if (value.subjectIsolation && !value.evaluatorRoutes?.some(route => route.provider === "typesafe"))
79
+ context.addIssue({ code: "custom", message: "Codex native subject isolation requires a TypeSafe evaluator route" });
80
+ if (value.evaluatorSecrets && !value.evaluatorRoutes?.some(route => route.provider === "typesafe")) {
81
+ context.addIssue({ code: "custom", message: "TypeSafe secret requires a declared evaluator route" });
82
+ }
83
+ if (value.version === "spawnfile.training-container.v3")
84
+ context.addIssue({ code: "custom", message: "Training-container v3 is unsupported; migrate to v4 with slots: 1" });
85
+ if ((value.version === "spawnfile.training-container.v4") !== (value.broker !== undefined)) {
86
+ context.addIssue({ code: "custom", message: "Only spawnfile.training-container.v4 declares broker slots; migrate v3 by setting version to v4 and slots to 1" });
68
87
  }
69
88
  if (value.broker && "build" in value.image && value.image.build.grok) {
70
89
  context.addIssue({ code: "custom", message: "A v3 training image never copies a Grok binary; judges use the native parent's pinned /usr/local/bin/grok" });
@@ -6,11 +6,13 @@ export interface SealedFile {
6
6
  sha256: string;
7
7
  mode: number;
8
8
  size: number;
9
+ target?: string;
10
+ directory?: true;
9
11
  }
10
12
  export declare function assertInputRoot(source: string, auth: readonly string[]): void;
11
13
  export declare function exactPath(source: string): Promise<string>;
12
14
  export declare function sealFile(source: string, destination: string): Promise<SealedFile>;
13
- /** Only explicitly selected trees are traversed. Symlinks never enter Docker context. */
15
+ /** Only physical entries are walked; confined input links retain their own identity. */
14
16
  export declare function sealTree(source: string, destination: string, options?: {
15
17
  ignoreDevelopment?: boolean;
16
18
  ignoreGit?: boolean;
@@ -18,6 +20,8 @@ export declare function sealTree(source: string, destination: string, options?:
18
20
  }): Promise<SealedFile[]>;
19
21
  export declare function copySealed(files: readonly SealedFile[], root: string): Promise<void>;
20
22
  export declare const fileIdentity: (files: readonly SealedFile[]) => {
23
+ type?: "directory" | "symlink" | undefined;
24
+ target?: string | undefined;
21
25
  destination: string;
22
26
  sha256: string;
23
27
  mode: number;