spawnfile 0.1.17 → 0.1.19

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 (490) 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/moltnet-releases.json +4 -4
  489. package/package.json +3 -3
  490. package/runtimes.yaml +8 -6
@@ -0,0 +1,118 @@
1
+ import { createHash } from "node:crypto";
2
+ import { lstat, mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { isDeepStrictEqual } from "node:util";
5
+ import { materializeTrainingMoment } from "./rewind/materialize.js";
6
+ import { normalizeInstant } from "./rewind/instant.js";
7
+ import { materializedMomentSchema } from "./rewind/contract.js";
8
+ const roles = ["train", "validation", "test"];
9
+ const hash = (value) => createHash("sha256").update(JSON.stringify(value)).digest("hex");
10
+ const save = (file, value) => writeFile(file, `${JSON.stringify(value, null, 2)}\n`, { flag: "wx", mode: 0o600 });
11
+ /** Rewind each authored example exactly once; repeated target references share one case. */
12
+ export const lowerTrainingMoments = async (options) => {
13
+ const { project, plan } = options;
14
+ const out = path.resolve(options.out);
15
+ // A fresh root is intentional: resume must use the persisted lowered dataset, never overwrite it.
16
+ await mkdir(out, { mode: 0o700 });
17
+ const entries = [];
18
+ const records = { train: [], validation: [], test: [] };
19
+ const seen = new Set(), declared = new Set();
20
+ const historyDir = options.historyDir ?? plan.preparation?.history;
21
+ for (const role of roles)
22
+ for (const target of plan.targets) {
23
+ const dataset = target.datasets[role];
24
+ if (!dataset)
25
+ continue;
26
+ declared.add(role);
27
+ for (const example of dataset.examples) {
28
+ const identity = JSON.stringify([role, dataset.sourcePath, example.id]);
29
+ if (seen.has(identity))
30
+ continue;
31
+ seen.add(identity);
32
+ // Group follows the authored example's identity, not its split, preventing split leakage.
33
+ const group = `moment:${hash([plan.agent.id, example.id])}`;
34
+ const momentRoot = path.join(out, "moments", role, hash(identity));
35
+ const entry = { id: example.id, role, dataset: dataset.path, at: example.at,
36
+ wake: example.wake, group, lineage: null, momentRoot, status: "refused" };
37
+ entries.push(entry);
38
+ try {
39
+ const lineage = `moment:${hash([plan.agent.id, normalizeInstant(example.at), example.wake])}`;
40
+ entry.lineage = lineage;
41
+ // Scope the selector to this dataset; different datasets may use the same example ID.
42
+ const scoped = { ...plan, targets: [{ ...target, datasets: { ...target.datasets, [role]: dataset } }] };
43
+ const moment = await materializeTrainingMoment({ project, plan: scoped, example: `${role}:${example.id}`, historyDir, out: momentRoot });
44
+ entry.moment = moment;
45
+ if (moment.status === "refused") {
46
+ entry.reason = moment.inputs.flatMap(input => input.refusal ? [input.refusal] : []).join("; ") || "Rewind leak check refused the example";
47
+ continue;
48
+ }
49
+ const prepared = await options.prepareCase?.({ moment, momentRoot, example, role, dataset: dataset.path, group, lineage }) ?? {};
50
+ if (!prepared.checks?.length && !prepared.stages?.length)
51
+ throw new Error("Moment case hook must supply terminal checks or stages");
52
+ const trainingMoment = { version: "spawnfile.training-moment-case.v1", projectRoot: project.root,
53
+ agent: plan.agent.id, example: `${role}:${example.id}`, role, dataset: dataset.path, at: moment.at, effectiveAt: moment.effectiveAt,
54
+ wake: example.wake, group, lineage, momentRoot, ...(historyDir ? { historyDir } : {}),
55
+ hook: plan.preparation?.hook ?? "spawnfile/rewind" };
56
+ records[role].push({ ...prepared, id: example.id, group, lineage: [lineage],
57
+ input: { message: { network: example.wake.surface, sender: example.wake.from,
58
+ target: example.wake.room, text: example.wake.text } },
59
+ setup: { ...prepared.setup, trainingMoment }, context: { ...prepared.context, trainingMomentProvenance: moment } });
60
+ entry.status = "materialized";
61
+ }
62
+ catch (error) {
63
+ entry.reason = error instanceof Error ? error.message : String(error);
64
+ }
65
+ }
66
+ }
67
+ const datasets = {};
68
+ for (const role of roles)
69
+ if (declared.has(role)) {
70
+ datasets[role] = path.join(out, `${role}.paideia.json`);
71
+ await save(datasets[role], { schema: "paideia.dataset.v1", id: `${plan.agent.id}:${role}`, subject: plan.agent.name,
72
+ setup: { profile: plan.preparation?.hook ?? "spawnfile/rewind" }, records: records[role] });
73
+ }
74
+ const report = { version: "spawnfile.training-moment-lowering.v1", agent: plan.agent.id, entries };
75
+ await save(path.join(out, "lowering.json"), report);
76
+ // Keep every refusal on disk, including an all-refused role. Never substitute another split.
77
+ for (const role of declared)
78
+ if (records[role].length === 0)
79
+ throw new Error(`No executable ${role} moments; see ${path.join(out, "lowering.json")}`);
80
+ for (const role of roles) {
81
+ const ids = records[role].map(record => record.id);
82
+ if (new Set(ids).size !== ids.length)
83
+ throw new Error(`Duplicate executable ${role} example IDs across datasets; use unique IDs`);
84
+ }
85
+ return { datasets: datasets, report };
86
+ };
87
+ /** Trial hooks call this on fresh paths; historical identity must match the accepted lowering. */
88
+ export const materializeTrainingCase = async (options) => {
89
+ const { project, plan, moment } = options;
90
+ if (project.root !== moment.projectRoot || plan.agent.id !== moment.agent)
91
+ throw new Error("Trial moment project or agent differs from lowering");
92
+ const targets = plan.targets.filter(target => target.datasets[moment.role]?.path === moment.dataset);
93
+ if (!targets.length)
94
+ throw new Error("Trial moment dataset is not declared");
95
+ const example = targets[0].datasets[moment.role].examples.find(value => `${moment.role}:${value.id}` === moment.example);
96
+ if (!example || !isDeepStrictEqual(example.wake, moment.wake) || normalizeInstant(example.at) !== normalizeInstant(moment.at)) {
97
+ throw new Error("Trial moment wake or instant differs from lowering");
98
+ }
99
+ const file = path.join(moment.momentRoot, "moment.json");
100
+ if (!options.expected) {
101
+ const stat = await lstat(file);
102
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.size > 2_000_000)
103
+ throw new Error("Accepted moment provenance must be a bounded regular file");
104
+ }
105
+ const expected = materializedMomentSchema.parse(options.expected ?? JSON.parse(await readFile(file, "utf8")));
106
+ if (expected.status !== "materialized" || expected.agent !== moment.agent || expected.example.id !== example.id ||
107
+ expected.example.role !== moment.role || expected.example.dataset !== moment.dataset || expected.at !== moment.at ||
108
+ expected.effectiveAt !== moment.effectiveAt || !expected.leakCheck.ok)
109
+ throw new Error("Accepted moment provenance differs from lowering");
110
+ const result = await materializeTrainingMoment({ project, plan: { ...plan, targets }, example: moment.example,
111
+ historyDir: moment.historyDir, out: options.out });
112
+ if (result.status !== "materialized" || result.effectiveAt !== moment.effectiveAt)
113
+ throw new Error("Trial rewind refused or historical start instant changed");
114
+ if (!isDeepStrictEqual(result.inputs, expected.inputs) || !isDeepStrictEqual(result.record, expected.record)) {
115
+ throw new Error("Trial rewind provenance differs from accepted lowering");
116
+ }
117
+ return result;
118
+ };
@@ -0,0 +1,2 @@
1
+ /** Durable default namespace disjoint from every declared input, even a project ancestor. */
2
+ export declare const defaultTrainingOutputRoot: (projectRoot: string, inputs?: readonly string[]) => string;
@@ -0,0 +1,20 @@
1
+ import { createHash } from "node:crypto";
2
+ import path from "node:path";
3
+ import { within } from "./preparation/files.js";
4
+ /** Durable default namespace disjoint from every declared input, even a project ancestor. */
5
+ export const defaultTrainingOutputRoot = (projectRoot, inputs = []) => {
6
+ const sources = [projectRoot, ...inputs].map(source => path.resolve(source));
7
+ if (sources.includes(path.parse(projectRoot).root))
8
+ throw Error("No training output location exists outside declared inputs; supply --out");
9
+ const identity = createHash("sha256").update(projectRoot).digest("hex").slice(0, 16);
10
+ let ancestor = path.dirname(projectRoot);
11
+ for (;;) {
12
+ const candidate = path.join(ancestor, ".spawn-training", `${path.basename(projectRoot)}-${identity}`);
13
+ if (!sources.some(source => within(source, candidate) || within(candidate, source)))
14
+ return candidate;
15
+ const parent = path.dirname(ancestor);
16
+ if (parent === ancestor)
17
+ throw Error("No training output location exists outside declared inputs; supply --out");
18
+ ancestor = parent;
19
+ }
20
+ };
@@ -0,0 +1,287 @@
1
+ import { z } from "zod";
2
+ export declare const TRAINING_PLAN_VERSION: "spawnfile.training-plan.v1";
3
+ export declare const trainingPlanDatasetSchema: z.ZodObject<{
4
+ sourcePath: z.ZodString;
5
+ path: z.ZodString;
6
+ examples: z.ZodArray<z.ZodObject<{
7
+ id: z.ZodString;
8
+ at: z.ZodISODateTime;
9
+ wake: z.ZodObject<{
10
+ surface: z.ZodLiteral<"moltnet">;
11
+ room: z.ZodString;
12
+ from: z.ZodString;
13
+ text: z.ZodString;
14
+ }, z.core.$strict>;
15
+ overrides: z.ZodArray<z.ZodObject<{
16
+ id: z.ZodString;
17
+ declaredBy: z.ZodString;
18
+ section: z.ZodEnum<{
19
+ memory: "memory";
20
+ resources: "resources";
21
+ networks: "networks";
22
+ }>;
23
+ }, z.core.$strict>>;
24
+ }, z.core.$strict>>;
25
+ }, z.core.$strict>;
26
+ export declare const trainingPlanOptimizerSchema: z.ZodObject<{
27
+ method: z.ZodString;
28
+ model: z.ZodString;
29
+ variants: z.ZodNumber;
30
+ keep: z.ZodNumber;
31
+ budget: z.ZodObject<{
32
+ rounds: z.ZodNumber;
33
+ }, z.core.$strict>;
34
+ }, z.core.$strict>;
35
+ export declare const trainingPlanSchema: z.ZodObject<{
36
+ version: z.ZodLiteral<"spawnfile.training-plan.v1">;
37
+ producer: z.ZodObject<{
38
+ package: z.ZodLiteral<"spawnfile">;
39
+ version: z.ZodString;
40
+ }, z.core.$strict>;
41
+ project: z.ZodObject<{
42
+ root: z.ZodString;
43
+ manifest: z.ZodString;
44
+ }, z.core.$strict>;
45
+ agent: z.ZodObject<{
46
+ id: z.ZodString;
47
+ name: z.ZodString;
48
+ }, z.core.$strict>;
49
+ deadlines: z.ZodOptional<z.ZodObject<{
50
+ experiment_ms: z.ZodNumber;
51
+ trial_ms: z.ZodOptional<z.ZodNumber>;
52
+ }, z.core.$strict>>;
53
+ preparation: z.ZodOptional<z.ZodObject<{
54
+ hook: z.ZodString;
55
+ history: z.ZodOptional<z.ZodString>;
56
+ }, z.core.$strict>>;
57
+ record: z.ZodNullable<z.ZodObject<{
58
+ keep: z.ZodNullable<z.ZodString>;
59
+ volumes: z.ZodArray<z.ZodObject<{
60
+ id: z.ZodString;
61
+ declaredBy: z.ZodString;
62
+ }, z.core.$strict>>;
63
+ }, z.core.$strict>>;
64
+ optimizer: z.ZodNullable<z.ZodObject<{
65
+ method: z.ZodString;
66
+ model: z.ZodString;
67
+ variants: z.ZodNumber;
68
+ keep: z.ZodNumber;
69
+ budget: z.ZodObject<{
70
+ rounds: z.ZodNumber;
71
+ }, z.core.$strict>;
72
+ }, z.core.$strict>>;
73
+ graders: z.ZodArray<z.ZodObject<{
74
+ sourcePath: z.ZodString;
75
+ path: z.ZodString;
76
+ name: z.ZodString;
77
+ declaredBy: z.ZodString;
78
+ }, z.core.$strict>>;
79
+ targets: z.ZodArray<z.ZodObject<{
80
+ declaredBy: z.ZodString;
81
+ grader: z.ZodString;
82
+ files: z.ZodArray<z.ZodObject<{
83
+ sourcePath: z.ZodString;
84
+ path: z.ZodString;
85
+ consumers: z.ZodArray<z.ZodString>;
86
+ }, z.core.$strict>>;
87
+ datasets: z.ZodObject<{
88
+ train: z.ZodObject<{
89
+ sourcePath: z.ZodString;
90
+ path: z.ZodString;
91
+ examples: z.ZodArray<z.ZodObject<{
92
+ id: z.ZodString;
93
+ at: z.ZodISODateTime;
94
+ wake: z.ZodObject<{
95
+ surface: z.ZodLiteral<"moltnet">;
96
+ room: z.ZodString;
97
+ from: z.ZodString;
98
+ text: z.ZodString;
99
+ }, z.core.$strict>;
100
+ overrides: z.ZodArray<z.ZodObject<{
101
+ id: z.ZodString;
102
+ declaredBy: z.ZodString;
103
+ section: z.ZodEnum<{
104
+ memory: "memory";
105
+ resources: "resources";
106
+ networks: "networks";
107
+ }>;
108
+ }, z.core.$strict>>;
109
+ }, z.core.$strict>>;
110
+ }, z.core.$strict>;
111
+ validation: z.ZodNullable<z.ZodObject<{
112
+ sourcePath: z.ZodString;
113
+ path: z.ZodString;
114
+ examples: z.ZodArray<z.ZodObject<{
115
+ id: z.ZodString;
116
+ at: z.ZodISODateTime;
117
+ wake: z.ZodObject<{
118
+ surface: z.ZodLiteral<"moltnet">;
119
+ room: z.ZodString;
120
+ from: z.ZodString;
121
+ text: z.ZodString;
122
+ }, z.core.$strict>;
123
+ overrides: z.ZodArray<z.ZodObject<{
124
+ id: z.ZodString;
125
+ declaredBy: z.ZodString;
126
+ section: z.ZodEnum<{
127
+ memory: "memory";
128
+ resources: "resources";
129
+ networks: "networks";
130
+ }>;
131
+ }, z.core.$strict>>;
132
+ }, z.core.$strict>>;
133
+ }, z.core.$strict>>;
134
+ test: z.ZodObject<{
135
+ sourcePath: z.ZodString;
136
+ path: z.ZodString;
137
+ examples: z.ZodArray<z.ZodObject<{
138
+ id: z.ZodString;
139
+ at: z.ZodISODateTime;
140
+ wake: z.ZodObject<{
141
+ surface: z.ZodLiteral<"moltnet">;
142
+ room: z.ZodString;
143
+ from: z.ZodString;
144
+ text: z.ZodString;
145
+ }, z.core.$strict>;
146
+ overrides: z.ZodArray<z.ZodObject<{
147
+ id: z.ZodString;
148
+ declaredBy: z.ZodString;
149
+ section: z.ZodEnum<{
150
+ memory: "memory";
151
+ resources: "resources";
152
+ networks: "networks";
153
+ }>;
154
+ }, z.core.$strict>>;
155
+ }, z.core.$strict>>;
156
+ }, z.core.$strict>;
157
+ }, z.core.$strict>;
158
+ }, z.core.$strict>>;
159
+ }, z.core.$strict>;
160
+ export type TrainingPlan = z.infer<typeof trainingPlanSchema>;
161
+ export type TrainingPlanDataset = z.infer<typeof trainingPlanDatasetSchema>;
162
+ export type TrainingPlanOverride = TrainingPlanDataset["examples"][number]["overrides"][number];
163
+ export declare const trainingPlanJsonSchema: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
164
+ version: z.ZodLiteral<"spawnfile.training-plan.v1">;
165
+ producer: z.ZodObject<{
166
+ package: z.ZodLiteral<"spawnfile">;
167
+ version: z.ZodString;
168
+ }, z.core.$strict>;
169
+ project: z.ZodObject<{
170
+ root: z.ZodString;
171
+ manifest: z.ZodString;
172
+ }, z.core.$strict>;
173
+ agent: z.ZodObject<{
174
+ id: z.ZodString;
175
+ name: z.ZodString;
176
+ }, z.core.$strict>;
177
+ deadlines: z.ZodOptional<z.ZodObject<{
178
+ experiment_ms: z.ZodNumber;
179
+ trial_ms: z.ZodOptional<z.ZodNumber>;
180
+ }, z.core.$strict>>;
181
+ preparation: z.ZodOptional<z.ZodObject<{
182
+ hook: z.ZodString;
183
+ history: z.ZodOptional<z.ZodString>;
184
+ }, z.core.$strict>>;
185
+ record: z.ZodNullable<z.ZodObject<{
186
+ keep: z.ZodNullable<z.ZodString>;
187
+ volumes: z.ZodArray<z.ZodObject<{
188
+ id: z.ZodString;
189
+ declaredBy: z.ZodString;
190
+ }, z.core.$strict>>;
191
+ }, z.core.$strict>>;
192
+ optimizer: z.ZodNullable<z.ZodObject<{
193
+ method: z.ZodString;
194
+ model: z.ZodString;
195
+ variants: z.ZodNumber;
196
+ keep: z.ZodNumber;
197
+ budget: z.ZodObject<{
198
+ rounds: z.ZodNumber;
199
+ }, z.core.$strict>;
200
+ }, z.core.$strict>>;
201
+ graders: z.ZodArray<z.ZodObject<{
202
+ sourcePath: z.ZodString;
203
+ path: z.ZodString;
204
+ name: z.ZodString;
205
+ declaredBy: z.ZodString;
206
+ }, z.core.$strict>>;
207
+ targets: z.ZodArray<z.ZodObject<{
208
+ declaredBy: z.ZodString;
209
+ grader: z.ZodString;
210
+ files: z.ZodArray<z.ZodObject<{
211
+ sourcePath: z.ZodString;
212
+ path: z.ZodString;
213
+ consumers: z.ZodArray<z.ZodString>;
214
+ }, z.core.$strict>>;
215
+ datasets: z.ZodObject<{
216
+ train: z.ZodObject<{
217
+ sourcePath: z.ZodString;
218
+ path: z.ZodString;
219
+ examples: z.ZodArray<z.ZodObject<{
220
+ id: z.ZodString;
221
+ at: z.ZodISODateTime;
222
+ wake: z.ZodObject<{
223
+ surface: z.ZodLiteral<"moltnet">;
224
+ room: z.ZodString;
225
+ from: z.ZodString;
226
+ text: z.ZodString;
227
+ }, z.core.$strict>;
228
+ overrides: z.ZodArray<z.ZodObject<{
229
+ id: z.ZodString;
230
+ declaredBy: z.ZodString;
231
+ section: z.ZodEnum<{
232
+ memory: "memory";
233
+ resources: "resources";
234
+ networks: "networks";
235
+ }>;
236
+ }, z.core.$strict>>;
237
+ }, z.core.$strict>>;
238
+ }, z.core.$strict>;
239
+ validation: z.ZodNullable<z.ZodObject<{
240
+ sourcePath: z.ZodString;
241
+ path: z.ZodString;
242
+ examples: z.ZodArray<z.ZodObject<{
243
+ id: z.ZodString;
244
+ at: z.ZodISODateTime;
245
+ wake: z.ZodObject<{
246
+ surface: z.ZodLiteral<"moltnet">;
247
+ room: z.ZodString;
248
+ from: z.ZodString;
249
+ text: z.ZodString;
250
+ }, z.core.$strict>;
251
+ overrides: z.ZodArray<z.ZodObject<{
252
+ id: z.ZodString;
253
+ declaredBy: z.ZodString;
254
+ section: z.ZodEnum<{
255
+ memory: "memory";
256
+ resources: "resources";
257
+ networks: "networks";
258
+ }>;
259
+ }, z.core.$strict>>;
260
+ }, z.core.$strict>>;
261
+ }, z.core.$strict>>;
262
+ test: z.ZodObject<{
263
+ sourcePath: z.ZodString;
264
+ path: z.ZodString;
265
+ examples: z.ZodArray<z.ZodObject<{
266
+ id: z.ZodString;
267
+ at: z.ZodISODateTime;
268
+ wake: z.ZodObject<{
269
+ surface: z.ZodLiteral<"moltnet">;
270
+ room: z.ZodString;
271
+ from: z.ZodString;
272
+ text: z.ZodString;
273
+ }, z.core.$strict>;
274
+ overrides: z.ZodArray<z.ZodObject<{
275
+ id: z.ZodString;
276
+ declaredBy: z.ZodString;
277
+ section: z.ZodEnum<{
278
+ memory: "memory";
279
+ resources: "resources";
280
+ networks: "networks";
281
+ }>;
282
+ }, z.core.$strict>>;
283
+ }, z.core.$strict>>;
284
+ }, z.core.$strict>;
285
+ }, z.core.$strict>;
286
+ }, z.core.$strict>>;
287
+ }, z.core.$strict>>;
@@ -0,0 +1,49 @@
1
+ import { z } from "zod";
2
+ import { trainingInstantSchema, trainingWakeSchema } from "../../../manifest/index.js";
3
+ export const TRAINING_PLAN_VERSION = "spawnfile.training-plan.v1";
4
+ const text = z.string().min(1);
5
+ const absolutePath = text.regex(/^(?:\/|[A-Za-z]:[\\/])/u);
6
+ const relativePath = text.regex(/^(?!\/)[^\\]+$/u);
7
+ const source = z.object({ sourcePath: absolutePath, path: relativePath }).strict();
8
+ const reference = z.object({ id: text, declaredBy: text }).strict();
9
+ export const trainingPlanDatasetSchema = source.extend({
10
+ examples: z.array(z.object({
11
+ id: text.regex(/^[A-Za-z0-9._-]+$/u),
12
+ at: trainingInstantSchema,
13
+ wake: trainingWakeSchema,
14
+ overrides: z.array(reference.extend({ section: z.enum(["resources", "memory", "networks"]) }).strict())
15
+ }).strict()).min(1)
16
+ }).strict();
17
+ export const trainingPlanOptimizerSchema = z.object({
18
+ method: text, model: text, variants: z.number().int().min(1), keep: z.number().int().min(1),
19
+ budget: z.object({ rounds: z.number().int().min(1) }).strict()
20
+ }).strict();
21
+ export const trainingPlanSchema = z.object({
22
+ version: z.literal(TRAINING_PLAN_VERSION),
23
+ producer: z.object({ package: z.literal("spawnfile"), version: text }).strict(),
24
+ project: z.object({ root: absolutePath, manifest: absolutePath }).strict(),
25
+ agent: z.object({ id: text, name: text }).strict(),
26
+ deadlines: z.object({
27
+ experiment_ms: z.number().int().min(1).max(604_800_000),
28
+ trial_ms: z.number().int().min(1).max(86_400_000).optional()
29
+ }).strict().optional(),
30
+ preparation: z.object({ hook: text, history: absolutePath.optional() }).strict().optional(),
31
+ record: z.object({
32
+ keep: text.regex(/^[1-9][0-9]*[mhd]$/u).nullable(),
33
+ volumes: z.array(reference)
34
+ }).strict().nullable(),
35
+ optimizer: trainingPlanOptimizerSchema.nullable(),
36
+ graders: z.array(source.extend({
37
+ name: text.regex(/^[A-Za-z0-9_-]+$/u), declaredBy: text
38
+ }).strict()),
39
+ targets: z.array(z.object({
40
+ declaredBy: text, grader: text.regex(/^[A-Za-z0-9_-]+$/u),
41
+ files: z.array(source.extend({ consumers: z.array(text).min(1) }).strict()).min(1),
42
+ datasets: z.object({
43
+ train: trainingPlanDatasetSchema,
44
+ validation: trainingPlanDatasetSchema.nullable(),
45
+ test: trainingPlanDatasetSchema
46
+ }).strict()
47
+ }).strict())
48
+ }).strict();
49
+ export const trainingPlanJsonSchema = z.toJSONSchema(trainingPlanSchema);
@@ -0,0 +1,5 @@
1
+ export * from "./contract.js";
2
+ export * from "./load.js";
3
+ export * from "./resolve.js";
4
+ export { resolveTrainingRecordVolumes } from "./references.js";
5
+ export type * from "./types.js";
@@ -0,0 +1,4 @@
1
+ export * from "./contract.js";
2
+ export * from "./load.js";
3
+ export * from "./resolve.js";
4
+ export { resolveTrainingRecordVolumes } from "./references.js";
@@ -0,0 +1,9 @@
1
+ import type { TrainingPlan } from "./contract.js";
2
+ import type { LoadedTrainingProject } from "./types.js";
3
+ /** Local reads only. Loading preserves complete declarations; resolution projects public identities. */
4
+ export declare const loadTrainingProject: (inputPath: string) => Promise<LoadedTrainingProject>;
5
+ export interface CreateTrainingPlanOptions {
6
+ agent?: string;
7
+ packageVersion: string;
8
+ }
9
+ export declare const createTrainingPlan: (inputPath: string, options: CreateTrainingPlanOptions) => Promise<TrainingPlan>;
@@ -0,0 +1,153 @@
1
+ import { lstat, readFile, realpath, stat } from "node:fs/promises";
2
+ import { createHash } from "node:crypto";
3
+ import path from "node:path";
4
+ import { parse as parseYaml } from "yaml";
5
+ import { getManifestPath, resolveProjectPath } from "../../../filesystem/index.js";
6
+ import { isInlineAgentMember, isReferencedMember, trainingDatasetSchema } from "../../../manifest/index.js";
7
+ import { parseManifest } from "../../../manifest/parseManifest.js";
8
+ import { buildCompilePlan } from "../../buildCompilePlan.js";
9
+ import { invalidTraining } from "./references.js";
10
+ import { resolveTrainingPlan } from "./resolve.js";
11
+ const source = (root, sourcePath) => ({
12
+ sourcePath, path: path.relative(root, sourcePath).split(path.sep).join("/")
13
+ });
14
+ const reason = (error) => error instanceof Error ? error.message : String(error);
15
+ const inside = (root, file) => {
16
+ const relative = path.relative(root, file);
17
+ return relative !== "" && relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);
18
+ };
19
+ /** Training-only preflight preserves target diagnostics before the compiler reads docs/skills. */
20
+ const validateTrainingTargetSources = async (manifestPath, visited = new Set()) => {
21
+ const realManifest = await realpath(manifestPath).catch((error) => invalidTraining(`Unable to load training manifest ${manifestPath}: ${reason(error)}`));
22
+ if (visited.has(realManifest))
23
+ return;
24
+ visited.add(realManifest);
25
+ const manifest = parseManifest(await readFile(manifestPath, "utf8"), manifestPath);
26
+ const declarations = manifest.kind === "agent"
27
+ ? [{ declaredBy: `agent:${manifest.name}`, training: manifest.training }]
28
+ : [
29
+ { declaredBy: `team:${manifest.name}`, training: manifest.shared?.training },
30
+ ...manifest.members.filter(isInlineAgentMember).map((member) => ({
31
+ declaredBy: `agent:${member.id}`, training: member.training
32
+ }))
33
+ ];
34
+ for (const { declaredBy, training } of declarations) {
35
+ for (const target of training?.targets ?? []) {
36
+ for (const file of target.files) {
37
+ const sourcePath = resolveProjectPath(manifestPath, file);
38
+ const context = `Training target ${sourcePath} declared by ${declaredBy} (${manifestPath})`;
39
+ const stats = await lstat(sourcePath).catch((error) => invalidTraining(`${context} must be an existing regular .md file: ${reason(error)}`));
40
+ if (stats.isSymbolicLink())
41
+ invalidTraining(`${context} must not be a symlink`);
42
+ if (!stats.isFile())
43
+ invalidTraining(`${context} must be an existing regular .md file`);
44
+ }
45
+ }
46
+ }
47
+ const refs = manifest.kind === "team"
48
+ ? manifest.members.filter(isReferencedMember).map((member) => member.ref)
49
+ : (manifest.subagents ?? []).map((subagent) => subagent.ref);
50
+ for (const ref of refs) {
51
+ await validateTrainingTargetSources(getManifestPath(resolveProjectPath(manifestPath, ref)), visited);
52
+ }
53
+ };
54
+ const readYaml = async (file, schema, declaredBy) => {
55
+ try {
56
+ const bytes = await readFile(file);
57
+ return { value: schema.parse(parseYaml(bytes.toString("utf8"), { strict: true, uniqueKeys: true })),
58
+ sha256: `sha256:${createHash("sha256").update(bytes).digest("hex")}` };
59
+ }
60
+ catch (error) {
61
+ return invalidTraining(`Invalid training file ${file} declared by ${declaredBy}: ${reason(error)}`);
62
+ }
63
+ };
64
+ const loadDataFileSource = async (root, file, declaredBy) => {
65
+ const context = `Invalid training file ${file} declared by ${declaredBy}:`;
66
+ if (!inside(root, file))
67
+ invalidTraining(`${context} must be inside project root ${root}`);
68
+ const realPath = await realpath(file).catch((error) => invalidTraining(`${context} must be an existing regular file: ${reason(error)}`));
69
+ if (!inside(root, realPath))
70
+ invalidTraining(`${context} must be inside project root ${root} (no symlink escape)`);
71
+ const stats = await stat(file).catch((error) => invalidTraining(`${context} must be an existing regular file: ${reason(error)}`));
72
+ if (!stats.isFile())
73
+ invalidTraining(`${context} must be an existing regular file`);
74
+ return source(root, file);
75
+ };
76
+ /** Inspect every ancestor, including unreferenced Spawnfiles outside the compiled graph. */
77
+ const nestedManifests = async (directory, file) => {
78
+ if (!inside(directory, file))
79
+ return [];
80
+ const manifests = [];
81
+ for (let ancestor = path.dirname(file); ancestor !== directory; ancestor = path.dirname(ancestor)) {
82
+ const manifest = path.join(ancestor, "Spawnfile");
83
+ try {
84
+ if ((await stat(manifest)).isFile())
85
+ manifests.push(manifest);
86
+ }
87
+ catch (error) {
88
+ if (error.code !== "ENOENT") {
89
+ invalidTraining(`Unable to inspect nested Spawnfile ${manifest} for training target ${file}: ${reason(error)}`);
90
+ }
91
+ }
92
+ }
93
+ return manifests;
94
+ };
95
+ const loadTargetFile = async (root, directory, realDirectory, file) => {
96
+ const result = { ...source(root, file), realPath: null, regular: false, nestedManifests: [] };
97
+ try {
98
+ result.realPath = await realpath(file);
99
+ result.regular = (await stat(file)).isFile();
100
+ }
101
+ catch (error) {
102
+ result.error = reason(error);
103
+ return result;
104
+ }
105
+ result.nestedManifests = [...new Set([
106
+ ...await nestedManifests(directory, file),
107
+ ...await nestedManifests(realDirectory, result.realPath)
108
+ ])].sort();
109
+ return result;
110
+ };
111
+ /** Local reads only. Loading preserves complete declarations; resolution projects public identities. */
112
+ export const loadTrainingProject = async (inputPath) => {
113
+ let manifest;
114
+ try {
115
+ manifest = await realpath(getManifestPath(inputPath));
116
+ }
117
+ catch (error) {
118
+ return invalidTraining(`Unable to load training project ${inputPath}: ${reason(error)}`);
119
+ }
120
+ await validateTrainingTargetSources(manifest);
121
+ const compilePlan = await buildCompilePlan(manifest);
122
+ const root = path.dirname(compilePlan.root);
123
+ const project = { root, manifest, compilePlan, targets: [], datasets: {}, graders: {} };
124
+ for (const node of compilePlan.nodes) {
125
+ const training = node.value.training;
126
+ if (!training)
127
+ continue;
128
+ const manifestPath = node.value.kind === "agent" ? node.value.sourcePath ?? node.value.source : node.value.source;
129
+ const directory = path.dirname(manifestPath);
130
+ const realDirectory = await realpath(directory);
131
+ for (const grader of Object.values(training.graders)) {
132
+ if (project.graders[grader.sourcePath])
133
+ continue;
134
+ project.graders[grader.sourcePath] = await loadDataFileSource(root, grader.sourcePath, grader.declaredBy);
135
+ }
136
+ for (const declaration of training.targets) {
137
+ const target = {
138
+ declaredBy: node.id, kind: node.kind, directory, realDirectory, declaration,
139
+ files: await Promise.all(declaration.files.map((file) => loadTargetFile(root, directory, realDirectory, file)))
140
+ };
141
+ project.targets.push(target);
142
+ for (const file of Object.values(declaration.datasets)) {
143
+ if (!file || project.datasets[file])
144
+ continue;
145
+ project.datasets[file] = {
146
+ ...await loadDataFileSource(root, file, node.id), ...await readYaml(file, trainingDatasetSchema, node.id)
147
+ };
148
+ }
149
+ }
150
+ }
151
+ return project;
152
+ };
153
+ export const createTrainingPlan = async (inputPath, options) => resolveTrainingPlan(await loadTrainingProject(inputPath), options.agent, options.packageVersion);