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,212 @@
1
+ import { lstat, mkdir, mkdtemp, readdir, realpath, rename, rm, utimes, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { materializedMomentSchema } from "./contract.js";
4
+ import { materializeFeed } from "./feed.js";
5
+ import { materializeGit } from "./git.js";
6
+ import { historyKey, inside, openHistory } from "./history.js";
7
+ import { resolveRewindInputs } from "./inputs.js";
8
+ import { inspectTrainingMoment } from "./leakCheck.js";
9
+ import { inspectBundleFiles, restoreInspectedAccessTimes, snapshotBundleFiles } from "./leakFiles.js";
10
+ import { materializeMemory } from "./memory.js";
11
+ import { materializeMoltnet } from "./moltnet.js";
12
+ import { matchingMomentRecords, originalMomentRecords, selectMomentRecord } from "./select.js";
13
+ import { hasRecordPin, recordForInput } from "./recordInput.js";
14
+ import { assertTaskClockInstant, createTaskClock } from "./taskClock.js";
15
+ import { restoreAccessTimes, stampTree } from "./timestamps.js";
16
+ import { materializeVolume } from "./volumes.js";
17
+ /** Pure core for a per-trial caller: effective declarations, example identity and matching record. */
18
+ export const resolveTrainingMoment = (plan, project, example, records = []) => {
19
+ const resolved = resolveRewindInputs(plan, project, example);
20
+ assertTaskClockInstant(resolved.at);
21
+ const candidateRecords = originalMomentRecords(matchingMomentRecords(records, plan.agent.id, resolved.at));
22
+ const record = selectMomentRecord(candidateRecords, plan.agent.id, resolved.at, resolved.inputs.filter((input) => !input.overridden));
23
+ const effectiveAt = record?.wake.startedAt ?? resolved.at;
24
+ assertTaskClockInstant(effectiveAt);
25
+ return { ...resolved, candidateRecords, record, effectiveAt };
26
+ };
27
+ const reason = (error) => error instanceof Error ? error.message : String(error);
28
+ const serialize = (value) => `${JSON.stringify(value, null, 2)}\n`;
29
+ const kindOf = (input) => input.section === "memory" ? "memory"
30
+ : input.section === "networks" ? "moltnet" : input.declaration.kind === "volume" && input.declaration.feed ? "feed" : input.declaration.kind;
31
+ const reportInput = (input) => ({
32
+ section: input.section, id: input.id, declaredBy: input.declaredBy, kind: kindOf(input), fidelity: null,
33
+ basis: "refused", source: {}, path: null, notes: [], refusal: null
34
+ });
35
+ const dispatch = (context) => {
36
+ const { input } = context;
37
+ if (input.section === "memory")
38
+ return materializeMemory(context);
39
+ if (input.section === "networks")
40
+ return materializeMoltnet(context);
41
+ if (input.declaration.kind !== "volume")
42
+ return materializeGit(context);
43
+ return input.declaration.feed ? materializeFeed(context) : materializeVolume(context);
44
+ };
45
+ const assertEmptyOutput = async (out) => {
46
+ const existing = await lstat(out).catch((error) => {
47
+ if (error.code === "ENOENT")
48
+ return null;
49
+ throw error;
50
+ });
51
+ if (existing && (!existing.isDirectory() || (await readdir(out)).length))
52
+ throw new Error("Rewind --out must not exist or must be an empty directory");
53
+ };
54
+ const discardPayload = async (staging, moment) => {
55
+ moment.status = "refused";
56
+ for (const input of moment.inputs)
57
+ input.path = null;
58
+ for (const name of await readdir(staging))
59
+ if (name !== "moment.json" && name !== "leak-check.json") {
60
+ await rm(path.join(staging, name), { recursive: true, force: true });
61
+ }
62
+ };
63
+ /** A separately callable disk acceptance gate, also used to test deliberately broken producers. */
64
+ export const finalizeTrainingMoment = async (staging, out, options = {}) => {
65
+ // Capture disk metadata before reading even moment.json; inspection preserves access times.
66
+ const { moment, check } = await inspectTrainingMoment(staging, options, true);
67
+ if (check) {
68
+ moment.leakCheck = { ok: check.ok, findings: check.findings.length };
69
+ if (!check.ok) {
70
+ for (const finding of check.findings) {
71
+ const affected = finding.input ? moment.inputs.filter((input) => input.section === finding.input.section
72
+ && input.id === finding.input.id && input.declaredBy === finding.input.declaredBy) : moment.inputs;
73
+ for (const input of affected)
74
+ input.refusal = [input.refusal, `${finding.class}: ${finding.path}: ${finding.detail}`].filter(Boolean).join("; ");
75
+ }
76
+ await discardPayload(staging, moment);
77
+ }
78
+ await writeFile(path.join(staging, "leak-check.json"), serialize(check));
79
+ await stampTree(path.join(staging, "leak-check.json"), moment.effectiveAt, moment.effectiveAt);
80
+ }
81
+ else
82
+ await discardPayload(staging, moment);
83
+ await writeFile(path.join(staging, "moment.json"), serialize(materializedMomentSchema.parse(moment)));
84
+ await stampTree(path.join(staging, "moment.json"), moment.effectiveAt, moment.effectiveAt);
85
+ await utimes(staging, new Date(moment.effectiveAt), new Date(moment.effectiveAt));
86
+ await restoreAccessTimes(staging, moment.effectiveAt);
87
+ await assertEmptyOutput(out);
88
+ await rename(staging, out);
89
+ if (check?.ok) {
90
+ // The post-restoration, post-rename payload is the acceptance target.
91
+ try {
92
+ const files = await snapshotBundleFiles(out);
93
+ const published = { ...check, checked: { ...check.checked, files: 0 }, findings: [] };
94
+ try {
95
+ await inspectBundleFiles(out, moment.inputs, published, files);
96
+ }
97
+ finally {
98
+ await restoreInspectedAccessTimes(files);
99
+ }
100
+ if (published.findings.length) {
101
+ check.findings.push(...published.findings);
102
+ check.ok = false;
103
+ moment.leakCheck = { ok: false, findings: check.findings.length };
104
+ for (const finding of published.findings)
105
+ for (const input of moment.inputs.filter((entry) => !finding.input
106
+ || entry.section === finding.input.section && entry.id === finding.input.id && entry.declaredBy === finding.input.declaredBy)) {
107
+ input.refusal = `${finding.class}: ${finding.path}: ${finding.detail}`;
108
+ }
109
+ await discardPayload(out, moment);
110
+ await writeFile(path.join(out, "moment.json"), serialize(materializedMomentSchema.parse(moment)));
111
+ await stampTree(path.join(out, "moment.json"), moment.effectiveAt, moment.effectiveAt);
112
+ }
113
+ check.checked.files = published.checked.files;
114
+ await writeFile(path.join(out, "leak-check.json"), serialize(check));
115
+ await stampTree(path.join(out, "leak-check.json"), moment.effectiveAt, moment.effectiveAt);
116
+ await utimes(out, new Date(moment.effectiveAt), new Date(moment.effectiveAt));
117
+ }
118
+ catch (error) {
119
+ await rm(out, { recursive: true, force: true });
120
+ throw error;
121
+ }
122
+ }
123
+ return moment;
124
+ };
125
+ /** Local-only rewind. No compilation artifacts, model invocation, auth, shell or network access. */
126
+ export const materializeTrainingMoment = async (options) => {
127
+ const { plan, project, example } = options;
128
+ const resolved = resolveRewindInputs(plan, project, example);
129
+ assertTaskClockInstant(resolved.at);
130
+ let out = path.resolve(options.out);
131
+ await assertEmptyOutput(out);
132
+ let history, historyError;
133
+ try {
134
+ history = await openHistory(options.historyDir);
135
+ }
136
+ catch (error) {
137
+ historyError = `Cannot open history: ${reason(error)}`;
138
+ }
139
+ let record = null, recordError;
140
+ let candidateRecords = [];
141
+ try {
142
+ candidateRecords = matchingMomentRecords(await history?.records() ?? [], plan.agent.id, resolved.at);
143
+ record = selectMomentRecord(candidateRecords, plan.agent.id, resolved.at, resolved.inputs.filter((input) => !input.overridden));
144
+ }
145
+ catch (error) {
146
+ recordError = reason(error);
147
+ }
148
+ const attempts = candidateRecords.length;
149
+ candidateRecords = originalMomentRecords(candidateRecords);
150
+ const effectiveAt = record?.wake.startedAt ?? resolved.at;
151
+ assertTaskClockInstant(effectiveAt);
152
+ await mkdir(path.dirname(out), { recursive: true });
153
+ out = path.join(await realpath(path.dirname(out)), path.basename(out));
154
+ if (history && (inside(history.root, out) || inside(out, history.root)))
155
+ throw new Error("Rewind output and history must not overlap");
156
+ const staging = await mkdtemp(path.join(path.dirname(out), `.${path.basename(out)}.rewind-`));
157
+ try {
158
+ const moment = {
159
+ version: "spawnfile.materialized-moment.v1", status: "materialized", agent: plan.agent.id,
160
+ example: { id: resolved.selected.id, role: resolved.selected.role, dataset: resolved.selected.dataset },
161
+ at: resolved.at, effectiveAt, inputs: [], record: { matched: record !== null, ...(record ? {
162
+ attempts, selectedStartedAt: record.wake.startedAt, executionId: record.wake.executionId, selection: "earliest-startedAt"
163
+ } : {}) }, leakCheck: { ok: false, findings: 0 }
164
+ };
165
+ for (const input of resolved.inputs) {
166
+ const entry = reportInput(input);
167
+ moment.inputs.push(entry);
168
+ try {
169
+ if (!input.overridden && (historyError || recordError))
170
+ throw new Error(historyError ?? recordError);
171
+ const relative = `${input.section === "networks" ? "moltnet" : input.section}/${historyKey(input)}`;
172
+ const destination = path.join(staging, relative);
173
+ const usableRecord = recordForInput(record, input);
174
+ const result = await dispatch({ input, at: effectiveAt, agentSlug: resolved.agentSlug, agentId: plan.agent.id,
175
+ record: usableRecord, candidateRecords: candidateRecords.filter((candidate) => recordForInput(candidate, input)), history, destination });
176
+ if (record && !record.exact && !input.overridden && !hasRecordPin(usableRecord, input)) {
177
+ result.fidelity = "approximate";
178
+ result.notes.push(...(record.errors ?? []));
179
+ }
180
+ await stampTree(destination, result.instant, effectiveAt);
181
+ Object.assign(entry, { fidelity: result.fidelity, basis: result.basis, source: result.source,
182
+ notes: result.notes, path: relative, ...(result.build ? { build: result.build } : {}) });
183
+ }
184
+ catch (error) {
185
+ entry.refusal = reason(error);
186
+ moment.status = "refused";
187
+ }
188
+ }
189
+ if (recordError && resolved.inputs.length === 0)
190
+ throw new Error(recordError);
191
+ await writeFile(path.join(staging, "task-clock.json"), serialize(createTaskClock(effectiveAt)));
192
+ await writeFile(path.join(staging, "moment.json"), serialize(moment));
193
+ // Set only unstamped wrapper directories; per-input source times remain intact.
194
+ const wrappers = async (directory) => {
195
+ const relative = path.relative(staging, directory).split(path.sep).join("/");
196
+ if (moment.inputs.some((input) => input.path === relative))
197
+ return;
198
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
199
+ if (entry.isDirectory())
200
+ await wrappers(path.join(directory, entry.name));
201
+ else if (directory === staging)
202
+ await stampTree(path.join(directory, entry.name), effectiveAt, effectiveAt);
203
+ }
204
+ await utimes(directory, new Date(effectiveAt), new Date(effectiveAt));
205
+ };
206
+ await wrappers(staging);
207
+ return await finalizeTrainingMoment(staging, out, { historyDir: options.historyDir });
208
+ }
209
+ finally {
210
+ await rm(staging, { recursive: true, force: true });
211
+ }
212
+ };
@@ -0,0 +1,10 @@
1
+ import { type MemoryLedgerEvent } from "./memorySchemas.js";
2
+ import type { InputContext, InputResult } from "./types.js";
3
+ export interface MemoryLedger {
4
+ lines: string[];
5
+ events: MemoryLedgerEvent[];
6
+ }
7
+ export declare const parseMemoryLedger: (payload: string, label?: string) => MemoryLedger;
8
+ /** The first future event is a boundary; a clock regression after it cannot reopen the cut. */
9
+ export declare const selectMemoryPrefix: (ledger: MemoryLedger, at: string, seq?: number) => MemoryLedger;
10
+ export declare const materializeMemory: (context: InputContext) => Promise<InputResult>;
@@ -0,0 +1,84 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { historyKey } from "./history.js";
4
+ import { compareInstants } from "./instant.js";
5
+ import { parseMemoryLedgerEvent } from "./memorySchemas.js";
6
+ const reason = (error) => error instanceof Error ? error.message : String(error);
7
+ export const parseMemoryLedger = (payload, label = "memory/events.jsonl") => {
8
+ if (payload === "")
9
+ return { lines: [], events: [] };
10
+ if (!payload.endsWith("\n"))
11
+ throw new Error(`${label}: ledger must end with LF`);
12
+ const lines = payload.slice(0, -1).split("\n");
13
+ const events = lines.map((line, index) => {
14
+ try {
15
+ return parseMemoryLedgerEvent(line);
16
+ }
17
+ catch (error) {
18
+ throw new Error(`${label}:${index + 1}: invalid Mneme event: ${reason(error)}`);
19
+ }
20
+ });
21
+ return { lines, events };
22
+ };
23
+ /** The first future event is a boundary; a clock regression after it cannot reopen the cut. */
24
+ export const selectMemoryPrefix = (ledger, at, seq) => {
25
+ if (seq !== undefined && (!Number.isSafeInteger(seq) || seq < 0 || seq > ledger.events.length)) {
26
+ throw new Error(`Memory record seq ${seq} exceeds or does not identify a ledger prefix`);
27
+ }
28
+ const firstFuture = ledger.events.findIndex((event) => compareInstants(event.createdAt, at) > 0);
29
+ const length = seq ?? (firstFuture < 0 ? ledger.events.length : firstFuture);
30
+ const events = ledger.events.slice(0, length);
31
+ let sawNative = false;
32
+ events.forEach((event, index) => {
33
+ if (event.seq !== undefined) {
34
+ if (event.seq !== index + 1)
35
+ throw new Error(`Memory ledger line ${index + 1}: seq ${event.seq} is not contiguous`);
36
+ sawNative = true;
37
+ }
38
+ else if (sawNative)
39
+ throw new Error(`Memory ledger line ${index + 1}: seq-less legacy events must form a leading run`);
40
+ if (compareInstants(event.createdAt, at) > 0)
41
+ throw new Error(`Memory ledger line ${index + 1}: createdAt is later than the moment`);
42
+ if (index > 0 && compareInstants(event.createdAt, events[index - 1].createdAt) < 0) {
43
+ throw new Error(`Memory ledger line ${index + 1}: createdAt regresses within the selected prefix`);
44
+ }
45
+ });
46
+ return { events, lines: ledger.lines.slice(0, length) };
47
+ };
48
+ export const materializeMemory = async (context) => {
49
+ const { input, at, record, history, destination } = context;
50
+ if (input.section !== "memory")
51
+ throw new Error("Memory materialization requires a memory input");
52
+ const directory = path.join(destination, "memory");
53
+ if (input.overridden) {
54
+ await mkdir(directory, { recursive: true });
55
+ await writeFile(path.join(directory, "events.jsonl"), "");
56
+ return { fidelity: "overridden", basis: "override", source: { seq: 0 }, notes: [], instant: at };
57
+ }
58
+ const pin = record?.memory.find((entry) => entry.id === input.id && entry.declaredBy === input.declaredBy);
59
+ if (pin?.generation !== undefined)
60
+ throw new Error(`Memory bank ${input.id}: Mneme generations are unsupported`);
61
+ if (pin?.seq === 0) {
62
+ await mkdir(directory, { recursive: true });
63
+ await writeFile(path.join(directory, "events.jsonl"), "");
64
+ return { fidelity: "exact", basis: "record", source: { seq: 0 },
65
+ notes: ["The record pins an empty bank (seq: 0); no history ledger is required."], instant: at };
66
+ }
67
+ if (!history)
68
+ throw new Error(`Memory bank ${input.id} requires --history or an override`);
69
+ const ledgerPath = `memory/${historyKey(input)}/events.jsonl`;
70
+ const payload = await history.text(ledgerPath);
71
+ if (payload === null)
72
+ throw new Error(`Missing memory ledger ${ledgerPath}`);
73
+ const prefix = selectMemoryPrefix(parseMemoryLedger(payload, ledgerPath), at, pin?.seq);
74
+ await mkdir(directory, { recursive: true });
75
+ await writeFile(path.join(directory, "events.jsonl"), prefix.lines.length ? `${prefix.lines.join("\n")}\n` : "");
76
+ return {
77
+ fidelity: pin ? "exact" : "approximate", basis: pin ? "record" : "created-at-prefix",
78
+ source: { seq: prefix.events.length },
79
+ notes: ["Spawnfile structurally validated the selected ledger without a Mneme runtime dependency; no derived or authority audit state is included.",
80
+ "Mneme 0.1.1 rebuilds its index from the ledger before every index read.",
81
+ "Checksum verification is skipped: Mneme 0.1.1 hashes the original input before normalization, which cannot be reconstructed exactly from stored events."],
82
+ instant: prefix.events.at(-1)?.createdAt ?? at
83
+ };
84
+ };
@@ -0,0 +1,87 @@
1
+ import { z } from "zod";
2
+ /** Mirrors the public MemoryEvent contract and Mneme 0.1.1's strict ledger reader. */
3
+ export declare const memoryEventSchema: z.ZodObject<{
4
+ id: z.ZodString;
5
+ type: z.ZodEnum<{
6
+ "memory.recalled": "memory.recalled";
7
+ "memory.observed": "memory.observed";
8
+ "memory.claimed": "memory.claimed";
9
+ "memory.registered": "memory.registered";
10
+ "memory.summarized": "memory.summarized";
11
+ "memory.located": "memory.located";
12
+ "memory.denied": "memory.denied";
13
+ "memory.forgotten": "memory.forgotten";
14
+ "memory.promoted": "memory.promoted";
15
+ "memory.consolidated": "memory.consolidated";
16
+ }>;
17
+ createdAt: z.ZodISODateTime;
18
+ principal: z.ZodObject<{
19
+ agentId: z.ZodString;
20
+ scope: z.ZodEnum<{
21
+ role: "role";
22
+ pair: "pair";
23
+ room: "room";
24
+ team: "team";
25
+ global: "global";
26
+ artifact: "artifact";
27
+ task: "task";
28
+ }>;
29
+ qualifier: z.ZodOptional<z.ZodString>;
30
+ }, z.core.$strict>;
31
+ scope: z.ZodString;
32
+ visibility: z.ZodEnum<{
33
+ private: "private";
34
+ public: "public";
35
+ pair: "pair";
36
+ room: "room";
37
+ team: "team";
38
+ global: "global";
39
+ sealed: "sealed";
40
+ }>;
41
+ source: z.ZodString;
42
+ content: z.ZodDiscriminatedUnion<[z.ZodObject<{
43
+ kind: z.ZodLiteral<"text">;
44
+ text: z.ZodString;
45
+ }, z.core.$strict>, z.ZodObject<{
46
+ kind: z.ZodLiteral<"claim">;
47
+ subject: z.ZodString;
48
+ predicate: z.ZodString;
49
+ object: z.ZodString;
50
+ }, z.core.$strict>, z.ZodObject<{
51
+ kind: z.ZodLiteral<"decision">;
52
+ decision: z.ZodString;
53
+ rationale: z.ZodOptional<z.ZodString>;
54
+ }, z.core.$strict>, z.ZodObject<{
55
+ kind: z.ZodLiteral<"artifact">;
56
+ description: z.ZodString;
57
+ path: z.ZodOptional<z.ZodString>;
58
+ uri: z.ZodOptional<z.ZodString>;
59
+ }, z.core.$strict>, z.ZodObject<{
60
+ kind: z.ZodLiteral<"relationship">;
61
+ from: z.ZodString;
62
+ relation: z.ZodString;
63
+ to: z.ZodString;
64
+ }, z.core.$strict>], "kind">;
65
+ tags: z.ZodArray<z.ZodString>;
66
+ entities: z.ZodArray<z.ZodString>;
67
+ sensitivity: z.ZodEnum<{
68
+ secret: "secret";
69
+ normal: "normal";
70
+ sensitive: "sensitive";
71
+ }>;
72
+ confidence: z.ZodOptional<z.ZodNumber>;
73
+ ttl: z.ZodOptional<z.ZodString>;
74
+ parentEventIds: z.ZodArray<z.ZodString>;
75
+ checksum: z.ZodString;
76
+ seq: z.ZodOptional<z.ZodNumber>;
77
+ memoryId: z.ZodOptional<z.ZodString>;
78
+ origin: z.ZodOptional<z.ZodEnum<{
79
+ system: "system";
80
+ awake: "awake";
81
+ dream: "dream";
82
+ }>>;
83
+ highWaterSeq: z.ZodOptional<z.ZodNumber>;
84
+ }, z.core.$strict>;
85
+ export type MemoryLedgerEvent = z.infer<typeof memoryEventSchema>;
86
+ /** Mneme rejects duplicate JSON keys, including escaped and nested duplicates. */
87
+ export declare const parseMemoryLedgerEvent: (line: string) => MemoryLedgerEvent;
@@ -0,0 +1,50 @@
1
+ import { z } from "zod";
2
+ import { trainingInstantSchema } from "../../../manifest/index.js";
3
+ const safeSequence = z.number().int().nonnegative().refine(Number.isSafeInteger);
4
+ /** Mirrors the public MemoryEvent contract and Mneme 0.1.1's strict ledger reader. */
5
+ export const memoryEventSchema = z.object({
6
+ id: z.string().min(1),
7
+ type: z.enum(["memory.observed", "memory.claimed", "memory.registered", "memory.summarized",
8
+ "memory.recalled", "memory.located", "memory.denied", "memory.forgotten", "memory.promoted", "memory.consolidated"]),
9
+ createdAt: trainingInstantSchema,
10
+ principal: z.object({ agentId: z.string().min(1),
11
+ scope: z.enum(["global", "team", "room", "pair", "task", "role", "artifact"]), qualifier: z.string().optional()
12
+ }).strict(),
13
+ scope: z.string(), visibility: z.enum(["private", "pair", "team", "room", "global", "public", "sealed"]),
14
+ source: z.string(),
15
+ content: z.discriminatedUnion("kind", [
16
+ z.object({ kind: z.literal("text"), text: z.string() }).strict(),
17
+ z.object({ kind: z.literal("claim"), subject: z.string(), predicate: z.string(), object: z.string() }).strict(),
18
+ z.object({ kind: z.literal("decision"), decision: z.string(), rationale: z.string().optional() }).strict(),
19
+ z.object({ kind: z.literal("artifact"), description: z.string(), path: z.string().optional(), uri: z.string().optional() }).strict(),
20
+ z.object({ kind: z.literal("relationship"), from: z.string(), relation: z.string(), to: z.string() }).strict()
21
+ ]),
22
+ tags: z.array(z.string()), entities: z.array(z.string()),
23
+ sensitivity: z.enum(["normal", "sensitive", "secret"]), confidence: z.number().finite().optional(),
24
+ ttl: z.string().optional(), parentEventIds: z.array(z.string()), checksum: z.string().min(1),
25
+ seq: safeSequence.refine((value) => value > 0).optional(), memoryId: z.string().optional(),
26
+ origin: z.enum(["awake", "dream", "system"]).optional(), highWaterSeq: safeSequence.optional()
27
+ }).strict();
28
+ /** Mneme rejects duplicate JSON keys, including escaped and nested duplicates. */
29
+ export const parseMemoryLedgerEvent = (line) => {
30
+ const value = JSON.parse(line);
31
+ const objects = [];
32
+ let string = "";
33
+ for (const [token] of line.matchAll(/"(?:\\.|[^"\\])*"|[{}\[\]:]/gu)) {
34
+ if (token === "{")
35
+ objects.push(new Set());
36
+ else if (token === "[")
37
+ objects.push(null);
38
+ else if (token === "}" || token === "]")
39
+ objects.pop();
40
+ else if (token === ":") {
41
+ const key = JSON.parse(string), keys = objects.at(-1);
42
+ if (keys.has(key))
43
+ throw new Error(`duplicate JSON key ${JSON.stringify(key)}`);
44
+ keys.add(key);
45
+ }
46
+ else
47
+ string = token;
48
+ }
49
+ return memoryEventSchema.parse(value);
50
+ };
@@ -0,0 +1,2 @@
1
+ import type { InputContext, InputResult } from "./types.js";
2
+ export declare const materializeMoltnet: (context: InputContext) => Promise<InputResult>;
@@ -0,0 +1,54 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { historyKey } from "./history.js";
4
+ import { compareInstants } from "./instant.js";
5
+ import { emptyMoltnetSnapshot, moltnetMessages, parseMoltnetSnapshot, rewindMoltnetJson } from "./moltnetJson.js";
6
+ import { rewindMoltnetSqlite } from "./moltnetSqlite.js";
7
+ export const materializeMoltnet = async (context) => {
8
+ const { input, at, record, history, destination } = context;
9
+ if (input.section !== "networks")
10
+ throw new Error("Moltnet materialization requires a network input");
11
+ if (input.overridden) {
12
+ await mkdir(destination, { recursive: true });
13
+ await writeFile(path.join(destination, "state.json"), `${JSON.stringify(emptyMoltnetSnapshot(input.declaration, at), null, 2)}\n`);
14
+ return { fidelity: "overridden", basis: "override", source: {}, notes: ["Fresh network state is stored as a JSON snapshot with the declared rooms."], instant: at };
15
+ }
16
+ const pin = record?.moltnet.find((entry) => entry.network === input.id);
17
+ if (pin && compareInstants(pin.cursor, at) !== 0) {
18
+ throw new Error(`Moltnet network ${input.id}: recorded cursor must equal wake.startedAt (${at})`);
19
+ }
20
+ if (!history)
21
+ throw new Error(`Moltnet network ${input.id} requires --history or an override`);
22
+ const base = `moltnet/${historyKey(input)}`;
23
+ const json = await history.bytes(`${base}/state.json`), sqlite = await history.bytes(`${base}/moltnet.sqlite`);
24
+ if (!json && !sqlite)
25
+ throw new Error(`Missing Moltnet store ${base}/state.json or moltnet.sqlite`);
26
+ if (json && sqlite)
27
+ throw new Error(`Ambiguous Moltnet history: both state.json and moltnet.sqlite exist for ${input.id}`);
28
+ await mkdir(destination, { recursive: true });
29
+ let messages;
30
+ if (json) {
31
+ const cut = rewindMoltnetJson(parseMoltnetSnapshot(JSON.parse(json.toString("utf8"))), at);
32
+ messages = moltnetMessages(cut);
33
+ await writeFile(path.join(destination, "state.json"), `${JSON.stringify(cut, null, 2)}\n`);
34
+ }
35
+ else {
36
+ const file = path.join(destination, "moltnet.sqlite");
37
+ await writeFile(file, sqlite);
38
+ // History readers never open the source database: SQLite recovery is confined to these copies.
39
+ for (const suffix of ["-wal", "-journal"]) {
40
+ const bytes = await history.bytes(`${base}/moltnet.sqlite${suffix}`);
41
+ if (bytes)
42
+ await writeFile(`${file}${suffix}`, bytes);
43
+ }
44
+ messages = await rewindMoltnetSqlite(file, at);
45
+ }
46
+ const retainedIds = new Set(messages.map((message) => message.id));
47
+ const missing = pin?.messageIds?.filter((id) => !retainedIds.has(id)) ?? [];
48
+ if (missing.length)
49
+ throw new Error(`Moltnet network ${input.id}: recorded wake message IDs ${missing.join(", ")} are not retained after the cursor cut`);
50
+ return { fidelity: pin ? "exact" : "approximate", basis: pin ? "record-cursor" : "created-at-cut",
51
+ source: pin ? { cursor: pin.cursor } : {}, instant: at,
52
+ notes: ["Future agent registrations and their memberships are removed; retained registration updates are clamped. Other membership history is unavailable (best effort).",
53
+ "Room removals without a recorded removal instant retain the current removal state; current JSON Moltnet uses a zero-time marker."] };
54
+ };
@@ -0,0 +1,13 @@
1
+ import type { TeamNetwork } from "../../../manifest/index.js";
2
+ import { type MoltnetSnapshot, type MoltnetEvent, type MoltnetMessage, type MoltnetInspection, type MoltnetFinding } from "./moltnetSchemas.js";
3
+ export declare const moltnetMessages: (snapshot: MoltnetSnapshot) => MoltnetMessage[];
4
+ export declare const parseMoltnetSnapshot: (value: unknown) => MoltnetSnapshot;
5
+ export declare const emptyMoltnetSnapshot: (network: TeamNetwork, at: string) => MoltnetSnapshot;
6
+ export declare const latestMoltnetMessage: <T extends {
7
+ created_at: string;
8
+ }>(messages: T[]) => T | undefined;
9
+ /** Pure cut. Delivery offsets must be remapped after removing interior future events. */
10
+ export declare const rewindMoltnetJson: (source: MoltnetSnapshot, at: string) => MoltnetSnapshot;
11
+ /** Independent timestamp inspection of event payloads, including embedded messages and rooms. */
12
+ export declare const inspectMoltnetEvent: (event: MoltnetEvent, at: string, path: string) => MoltnetFinding[];
13
+ export declare const inspectMoltnetJson: (path: string, at: string) => Promise<MoltnetInspection>;