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,104 @@
1
+ import { z } from "zod";
2
+ import { argvSchema, pinnedImageSchema } from "./commandSchemas.js";
3
+ /** `${date}` (UTC) or `${date:<IANA zone>}`: the local date (YYYY-MM-DD) at refresh time. The only placeholder a ref or path template knows. */
4
+ export const FEED_REF_PLACEHOLDER = /\$\{date(?::([^}]*))?\}/gu;
5
+ export const FEED_CLOCK_PATTERN = /^(?:[01]\d|2[0-3]):[0-5]\d$/u;
6
+ export const isFeedTimeZone = (zone) => {
7
+ try {
8
+ new Intl.DateTimeFormat("en-US", { timeZone: zone });
9
+ return zone.trim() !== "";
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ };
15
+ const plainRelativePath = (entry) => !entry.startsWith("/") && !entry.split("/").some((segment) => segment === ".." || segment === "." || segment === "");
16
+ /** Issues with the placeholders in a ref or path template: only `${date}` and `${date:<IANA zone>}` exist. */
17
+ const templateIssues = (template, what) => {
18
+ const issues = [];
19
+ for (const match of template.matchAll(FEED_REF_PLACEHOLDER)) {
20
+ if (match[1] !== undefined && !isFeedTimeZone(match[1]))
21
+ issues.push(`${what} time zone ${JSON.stringify(match[1])} is not an IANA time zone`);
22
+ }
23
+ if (template.replace(FEED_REF_PLACEHOLDER, "").includes("${"))
24
+ issues.push(`${what}s know only \${date} and \${date:<time zone>}`);
25
+ return issues;
26
+ };
27
+ /** A ref resolved per refresh: a template or a command printing a ref, with an optional fallback when it does not exist yet. */
28
+ const volumeFeedRefRuleSchema = z.object({
29
+ command: argvSchema.optional(),
30
+ fallback: z.string().trim().min(1).optional(),
31
+ template: z.string().trim().min(1).optional()
32
+ }).strict().superRefine((value, context) => {
33
+ if ((value.command === undefined) === (value.template === undefined)) {
34
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "a volume feed ref rule must declare exactly one of template or command" });
35
+ }
36
+ if (value.template === undefined)
37
+ return;
38
+ for (const message of templateIssues(value.template, "volume feed ref template"))
39
+ context.addIssue({ code: z.ZodIssueCode.custom, message });
40
+ });
41
+ /**
42
+ * Host-fed content for a volume: a host directory or a git ref Spawnfile copies into the volume by atomic
43
+ * swap (`spawnfile volume refresh`), never through the image. Exactly one source per feed.
44
+ */
45
+ export const volumeFeedSchema = z.object({
46
+ directory: z.string().trim().min(1).optional(),
47
+ /** Once local time passes `after`, a volume that already landed this period's ref stops advancing until the period or the ref changes. */
48
+ freeze: z.object({
49
+ after: z.string().regex(FEED_CLOCK_PATTERN, "freeze.after must be HH:MM (24-hour)"),
50
+ timezone: z.string().trim().min(1).refine(isFeedTimeZone, "freeze.timezone must be an IANA time zone")
51
+ }).strict().optional(),
52
+ git: z.object({
53
+ fetch: z.boolean().optional(),
54
+ /** Directories to feed instead of the whole tree; each MAY carry `${date}` placeholders, expanded with the ref. */
55
+ paths: z.array(z.string().trim().min(1)).min(1).optional(),
56
+ ref: z.union([z.string().trim().min(1), volumeFeedRefRuleSchema]).optional(),
57
+ repo: z.string().trim().min(1)
58
+ }).strict().optional(),
59
+ /** Host directories (files not in the source, e.g. fonts) staged into the tree before `prepare`. */
60
+ include: z.array(z.object({
61
+ from: z.string().trim().min(1),
62
+ to: z.string().trim().min(1)
63
+ }).strict()).min(1).optional(),
64
+ keep: z.number().int().min(1).optional(),
65
+ owner: z.string().regex(/^\d+:\d+$/u, "owner must be <uid>:<gid>").optional(),
66
+ /** A command run inside the staged tree after fetch and before validate: in a digest-pinned image, or explicitly on the host. */
67
+ prepare: z.object({
68
+ command: argvSchema,
69
+ host: z.literal(true).optional(),
70
+ image: pinnedImageSchema.optional(),
71
+ network: z.boolean().optional(),
72
+ platform: z.enum(["linux/amd64", "linux/arm64"]).optional(),
73
+ timeout_seconds: z.number().int().positive().max(86_400).optional()
74
+ }).strict().superRefine((value, context) => {
75
+ if ((value.image === undefined) === (value.host === undefined)) {
76
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "volume feed prepare must declare exactly one of image (digest-pinned) or host: true" });
77
+ }
78
+ if (value.host && (value.platform !== undefined || value.network !== undefined)) {
79
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "volume feed prepare platform and network apply only to an image" });
80
+ }
81
+ }).optional(),
82
+ validate: z.array(z.string().min(1)).min(1).optional()
83
+ }).strict().superRefine((value, context) => {
84
+ if ((value.directory === undefined) === (value.git === undefined)) {
85
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "volume feeds must declare exactly one of directory or git" });
86
+ }
87
+ for (const entry of value.git?.paths ?? []) {
88
+ const placeholders = templateIssues(entry, "volume feed git path template");
89
+ for (const message of placeholders)
90
+ context.addIssue({ code: z.ZodIssueCode.custom, message });
91
+ // A placeholder expands to YYYY-MM-DD, so the path is judged with one in its place.
92
+ if (placeholders.length === 0 && !plainRelativePath(entry.replace(FEED_REF_PLACEHOLDER, "0000-00-00"))) {
93
+ context.addIssue({ code: z.ZodIssueCode.custom, message: `volume feed git path ${entry} must be a plain repository-relative path` });
94
+ }
95
+ }
96
+ const targets = (value.include ?? []).map((entry) => entry.to);
97
+ for (const [index, to] of targets.entries()) {
98
+ if (!plainRelativePath(to))
99
+ context.addIssue({ code: z.ZodIssueCode.custom, message: `volume feed include target ${to} must be a plain tree-relative path` });
100
+ if (targets.some((other, at) => at !== index && (other === to || other.startsWith(`${to}/`)))) {
101
+ context.addIssue({ code: z.ZodIssueCode.custom, message: `volume feed include target ${to} overlaps another include` });
102
+ }
103
+ }
104
+ });
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { volumeFeedSchema } from "./volumeFeedSchemas.js";
2
3
  export declare const teamWorkspaceDocsSchema: z.ZodObject<{
3
4
  extras: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
4
5
  heartbeat: z.ZodOptional<z.ZodString>;
@@ -7,8 +8,49 @@ export declare const teamWorkspaceDocsSchema: z.ZodObject<{
7
8
  soul: z.ZodOptional<z.ZodString>;
8
9
  system: z.ZodOptional<z.ZodString>;
9
10
  }, z.core.$strict>;
10
- declare const teamWorkspaceResourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
11
+ /**
12
+ * Declared inputs Spawnfile builds into the bundle archive. Exactly one input kind per bundle:
13
+ * `files` (git-tracked files), `dependencies` (lockfile installed for the target platform in a
14
+ * pinned image) or `generated` (a declared command writing an output directory from declared inputs).
15
+ */
16
+ declare const workspaceBundleBuildSchema: z.ZodObject<{
17
+ dependencies: z.ZodOptional<z.ZodObject<{
18
+ check: z.ZodOptional<z.ZodArray<z.ZodString>>;
19
+ dev: z.ZodOptional<z.ZodBoolean>;
20
+ directory: z.ZodString;
21
+ image: z.ZodString;
22
+ manager: z.ZodOptional<z.ZodLiteral<"npm">>;
23
+ scripts: z.ZodOptional<z.ZodBoolean>;
24
+ }, z.core.$strict>>;
25
+ files: z.ZodOptional<z.ZodObject<{
26
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
+ ref: z.ZodOptional<z.ZodString>;
28
+ root: z.ZodString;
29
+ }, z.core.$strict>>;
30
+ generated: z.ZodOptional<z.ZodObject<{
31
+ command: z.ZodArray<z.ZodString>;
32
+ cwd: z.ZodOptional<z.ZodString>;
33
+ image: z.ZodOptional<z.ZodString>;
34
+ inputs: z.ZodArray<z.ZodObject<{
35
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
36
+ ref: z.ZodOptional<z.ZodString>;
37
+ root: z.ZodString;
38
+ }, z.core.$strict>>;
39
+ timeout_seconds: z.ZodOptional<z.ZodNumber>;
40
+ tools: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
41
+ }, z.core.$strict>>;
42
+ }, z.core.$strict>;
43
+ export declare const teamWorkspaceResourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
44
+ auth: z.ZodOptional<z.ZodObject<{
45
+ ssh_key: z.ZodOptional<z.ZodString>;
46
+ ssh_key_env: z.ZodOptional<z.ZodString>;
47
+ }, z.core.$strict>>;
11
48
  branch: z.ZodOptional<z.ZodString>;
49
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
50
+ fetch: z.ZodOptional<z.ZodEnum<{
51
+ start: "start";
52
+ build: "build";
53
+ }>>;
12
54
  id: z.ZodString;
13
55
  kind: z.ZodLiteral<"git">;
14
56
  mount: z.ZodString;
@@ -24,14 +66,76 @@ declare const teamWorkspaceResourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
24
66
  tag: z.ZodOptional<z.ZodString>;
25
67
  url: z.ZodString;
26
68
  }, z.core.$strict>, z.ZodObject<{
69
+ build: z.ZodOptional<z.ZodObject<{
70
+ dependencies: z.ZodOptional<z.ZodObject<{
71
+ check: z.ZodOptional<z.ZodArray<z.ZodString>>;
72
+ dev: z.ZodOptional<z.ZodBoolean>;
73
+ directory: z.ZodString;
74
+ image: z.ZodString;
75
+ manager: z.ZodOptional<z.ZodLiteral<"npm">>;
76
+ scripts: z.ZodOptional<z.ZodBoolean>;
77
+ }, z.core.$strict>>;
78
+ files: z.ZodOptional<z.ZodObject<{
79
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
80
+ ref: z.ZodOptional<z.ZodString>;
81
+ root: z.ZodString;
82
+ }, z.core.$strict>>;
83
+ generated: z.ZodOptional<z.ZodObject<{
84
+ command: z.ZodArray<z.ZodString>;
85
+ cwd: z.ZodOptional<z.ZodString>;
86
+ image: z.ZodOptional<z.ZodString>;
87
+ inputs: z.ZodArray<z.ZodObject<{
88
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
89
+ ref: z.ZodOptional<z.ZodString>;
90
+ root: z.ZodString;
91
+ }, z.core.$strict>>;
92
+ timeout_seconds: z.ZodOptional<z.ZodNumber>;
93
+ tools: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
94
+ }, z.core.$strict>>;
95
+ }, z.core.$strict>>;
27
96
  id: z.ZodString;
28
97
  kind: z.ZodLiteral<"bundle">;
29
98
  mount: z.ZodString;
30
99
  mode: z.ZodLiteral<"readonly">;
31
- sha256: z.ZodString;
100
+ sha256: z.ZodOptional<z.ZodString>;
32
101
  sharing: z.ZodOptional<z.ZodLiteral<"per_agent">>;
33
- source: z.ZodString;
102
+ source: z.ZodOptional<z.ZodString>;
34
103
  }, z.core.$strict>, z.ZodObject<{
104
+ feed: z.ZodOptional<z.ZodObject<{
105
+ directory: z.ZodOptional<z.ZodString>;
106
+ freeze: z.ZodOptional<z.ZodObject<{
107
+ after: z.ZodString;
108
+ timezone: z.ZodString;
109
+ }, z.core.$strict>>;
110
+ git: z.ZodOptional<z.ZodObject<{
111
+ fetch: z.ZodOptional<z.ZodBoolean>;
112
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
113
+ ref: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
114
+ command: z.ZodOptional<z.ZodArray<z.ZodString>>;
115
+ fallback: z.ZodOptional<z.ZodString>;
116
+ template: z.ZodOptional<z.ZodString>;
117
+ }, z.core.$strict>]>>;
118
+ repo: z.ZodString;
119
+ }, z.core.$strict>>;
120
+ include: z.ZodOptional<z.ZodArray<z.ZodObject<{
121
+ from: z.ZodString;
122
+ to: z.ZodString;
123
+ }, z.core.$strict>>>;
124
+ keep: z.ZodOptional<z.ZodNumber>;
125
+ owner: z.ZodOptional<z.ZodString>;
126
+ prepare: z.ZodOptional<z.ZodObject<{
127
+ command: z.ZodArray<z.ZodString>;
128
+ host: z.ZodOptional<z.ZodLiteral<true>>;
129
+ image: z.ZodOptional<z.ZodString>;
130
+ network: z.ZodOptional<z.ZodBoolean>;
131
+ platform: z.ZodOptional<z.ZodEnum<{
132
+ "linux/amd64": "linux/amd64";
133
+ "linux/arm64": "linux/arm64";
134
+ }>>;
135
+ timeout_seconds: z.ZodOptional<z.ZodNumber>;
136
+ }, z.core.$strict>>;
137
+ validate: z.ZodOptional<z.ZodArray<z.ZodString>>;
138
+ }, z.core.$strict>>;
35
139
  id: z.ZodString;
36
140
  kind: z.ZodLiteral<"volume">;
37
141
  mount: z.ZodString;
@@ -61,7 +165,16 @@ export declare const teamWorkspaceSchema: z.ZodObject<{
61
165
  system: z.ZodOptional<z.ZodString>;
62
166
  }, z.core.$strict>>;
63
167
  resources: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
168
+ auth: z.ZodOptional<z.ZodObject<{
169
+ ssh_key: z.ZodOptional<z.ZodString>;
170
+ ssh_key_env: z.ZodOptional<z.ZodString>;
171
+ }, z.core.$strict>>;
64
172
  branch: z.ZodOptional<z.ZodString>;
173
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
174
+ fetch: z.ZodOptional<z.ZodEnum<{
175
+ start: "start";
176
+ build: "build";
177
+ }>>;
65
178
  id: z.ZodString;
66
179
  kind: z.ZodLiteral<"git">;
67
180
  mount: z.ZodString;
@@ -77,14 +190,76 @@ export declare const teamWorkspaceSchema: z.ZodObject<{
77
190
  tag: z.ZodOptional<z.ZodString>;
78
191
  url: z.ZodString;
79
192
  }, z.core.$strict>, z.ZodObject<{
193
+ build: z.ZodOptional<z.ZodObject<{
194
+ dependencies: z.ZodOptional<z.ZodObject<{
195
+ check: z.ZodOptional<z.ZodArray<z.ZodString>>;
196
+ dev: z.ZodOptional<z.ZodBoolean>;
197
+ directory: z.ZodString;
198
+ image: z.ZodString;
199
+ manager: z.ZodOptional<z.ZodLiteral<"npm">>;
200
+ scripts: z.ZodOptional<z.ZodBoolean>;
201
+ }, z.core.$strict>>;
202
+ files: z.ZodOptional<z.ZodObject<{
203
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
204
+ ref: z.ZodOptional<z.ZodString>;
205
+ root: z.ZodString;
206
+ }, z.core.$strict>>;
207
+ generated: z.ZodOptional<z.ZodObject<{
208
+ command: z.ZodArray<z.ZodString>;
209
+ cwd: z.ZodOptional<z.ZodString>;
210
+ image: z.ZodOptional<z.ZodString>;
211
+ inputs: z.ZodArray<z.ZodObject<{
212
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
213
+ ref: z.ZodOptional<z.ZodString>;
214
+ root: z.ZodString;
215
+ }, z.core.$strict>>;
216
+ timeout_seconds: z.ZodOptional<z.ZodNumber>;
217
+ tools: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
218
+ }, z.core.$strict>>;
219
+ }, z.core.$strict>>;
80
220
  id: z.ZodString;
81
221
  kind: z.ZodLiteral<"bundle">;
82
222
  mount: z.ZodString;
83
223
  mode: z.ZodLiteral<"readonly">;
84
- sha256: z.ZodString;
224
+ sha256: z.ZodOptional<z.ZodString>;
85
225
  sharing: z.ZodOptional<z.ZodLiteral<"per_agent">>;
86
- source: z.ZodString;
226
+ source: z.ZodOptional<z.ZodString>;
87
227
  }, z.core.$strict>, z.ZodObject<{
228
+ feed: z.ZodOptional<z.ZodObject<{
229
+ directory: z.ZodOptional<z.ZodString>;
230
+ freeze: z.ZodOptional<z.ZodObject<{
231
+ after: z.ZodString;
232
+ timezone: z.ZodString;
233
+ }, z.core.$strict>>;
234
+ git: z.ZodOptional<z.ZodObject<{
235
+ fetch: z.ZodOptional<z.ZodBoolean>;
236
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
237
+ ref: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
238
+ command: z.ZodOptional<z.ZodArray<z.ZodString>>;
239
+ fallback: z.ZodOptional<z.ZodString>;
240
+ template: z.ZodOptional<z.ZodString>;
241
+ }, z.core.$strict>]>>;
242
+ repo: z.ZodString;
243
+ }, z.core.$strict>>;
244
+ include: z.ZodOptional<z.ZodArray<z.ZodObject<{
245
+ from: z.ZodString;
246
+ to: z.ZodString;
247
+ }, z.core.$strict>>>;
248
+ keep: z.ZodOptional<z.ZodNumber>;
249
+ owner: z.ZodOptional<z.ZodString>;
250
+ prepare: z.ZodOptional<z.ZodObject<{
251
+ command: z.ZodArray<z.ZodString>;
252
+ host: z.ZodOptional<z.ZodLiteral<true>>;
253
+ image: z.ZodOptional<z.ZodString>;
254
+ network: z.ZodOptional<z.ZodBoolean>;
255
+ platform: z.ZodOptional<z.ZodEnum<{
256
+ "linux/amd64": "linux/amd64";
257
+ "linux/arm64": "linux/arm64";
258
+ }>>;
259
+ timeout_seconds: z.ZodOptional<z.ZodNumber>;
260
+ }, z.core.$strict>>;
261
+ validate: z.ZodOptional<z.ZodArray<z.ZodString>>;
262
+ }, z.core.$strict>>;
88
263
  id: z.ZodString;
89
264
  kind: z.ZodLiteral<"volume">;
90
265
  mount: z.ZodString;
@@ -108,5 +283,7 @@ export declare const teamWorkspaceSchema: z.ZodObject<{
108
283
  export type TeamWorkspace = z.infer<typeof teamWorkspaceSchema>;
109
284
  export type TeamWorkspaceDocs = z.infer<typeof teamWorkspaceDocsSchema>;
110
285
  export type TeamWorkspaceResource = z.infer<typeof teamWorkspaceResourceSchema>;
286
+ export type WorkspaceBundleBuild = z.infer<typeof workspaceBundleBuildSchema>;
287
+ export type VolumeFeed = z.infer<typeof volumeFeedSchema>;
111
288
  export type TeamWorkspaceSkill = z.infer<typeof workspaceSkillReferenceSchema>;
112
289
  export {};
@@ -1,4 +1,6 @@
1
1
  import { z } from "zod";
2
+ import { argvSchema, pinnedImageSchema } from "./commandSchemas.js";
3
+ import { volumeFeedSchema } from "./volumeFeedSchemas.js";
2
4
  const workspaceResourceModeSchema = z.enum(["mutable", "readonly"]);
3
5
  const workspaceResourceSharingSchema = z.enum(["per_agent", "team"]);
4
6
  export const teamWorkspaceDocsSchema = z
@@ -51,9 +53,36 @@ const resourceMountSchema = z
51
53
  });
52
54
  }
53
55
  });
56
+ /** Host-side credentials for a `fetch: build` git resource: a key file path, or an env var holding the key. */
57
+ const gitResourceAuthSchema = z
58
+ .object({
59
+ ssh_key: z.string().trim().min(1).optional(),
60
+ ssh_key_env: z.string().trim().regex(/^[A-Za-z_][A-Za-z0-9_]*$/u, "ssh_key_env must be an environment variable name").optional()
61
+ })
62
+ .strict()
63
+ .refine((value) => (value.ssh_key === undefined) !== (value.ssh_key_env === undefined), {
64
+ message: "git resource auth must declare exactly one of ssh_key or ssh_key_env"
65
+ });
66
+ /**
67
+ * True when a URL may carry a credential: any password, any userinfo on a
68
+ * non-SSH URL (a token is often sent as the user name), or a query string.
69
+ * An SSH user name (`git@host:...`, `ssh://git@host/...`) is not a secret.
70
+ */
71
+ const urlEmbedsCredential = (url) => {
72
+ const scheme = /^([a-z][a-z0-9+.-]*):\/\/([^/]*)/iu.exec(url);
73
+ if (!scheme)
74
+ return url.includes("?");
75
+ const authority = scheme[2], userinfo = authority.includes("@") ? authority.slice(0, authority.lastIndexOf("@")) : undefined;
76
+ if (url.includes("?") || userinfo?.includes(":"))
77
+ return true;
78
+ return userinfo !== undefined && !/^(ssh|git\+ssh|ssh\+git)$/iu.test(scheme[1]);
79
+ };
54
80
  const teamWorkspaceResourceGitSchema = z
55
81
  .object({
82
+ auth: gitResourceAuthSchema.optional(),
56
83
  branch: z.string().trim().optional(),
84
+ exclude: z.array(z.string().trim().min(1)).optional(),
85
+ fetch: z.enum(["start", "build"]).optional(),
57
86
  id: z.string().trim().min(1),
58
87
  kind: z.literal("git"),
59
88
  mount: resourceMountSchema,
@@ -72,6 +101,25 @@ const teamWorkspaceResourceGitSchema = z
72
101
  message: "git resources may declare at most one of branch, tag, or ref"
73
102
  });
74
103
  }
104
+ if (value.fetch === "build") {
105
+ if ([value.branch, value.tag, value.ref].some((selector) => selector !== undefined && selector === "")) {
106
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "git resource branch, tag, or ref must not be empty with fetch: build" });
107
+ }
108
+ if (value.mode !== "readonly") {
109
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "git resources with fetch: build are pinned image content and must be mode: readonly" });
110
+ }
111
+ if (urlEmbedsCredential(value.url)) {
112
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "git resource url must not embed a credential; declare auth instead" });
113
+ }
114
+ }
115
+ else {
116
+ if (value.auth !== undefined) {
117
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "git resource auth requires fetch: build; a container-start clone never receives host credentials" });
118
+ }
119
+ if (value.exclude !== undefined) {
120
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "git resource exclude requires fetch: build" });
121
+ }
122
+ }
75
123
  if (value.sharing === "team") {
76
124
  context.addIssue({
77
125
  code: z.ZodIssueCode.custom,
@@ -81,6 +129,7 @@ const teamWorkspaceResourceGitSchema = z
81
129
  });
82
130
  const teamWorkspaceResourceVolumeSchema = z
83
131
  .object({
132
+ feed: volumeFeedSchema.optional(),
84
133
  id: z.string().trim().min(1),
85
134
  kind: z.literal("volume"),
86
135
  mount: resourceMountSchema,
@@ -88,13 +137,64 @@ const teamWorkspaceResourceVolumeSchema = z
88
137
  name: z.string().trim().optional(),
89
138
  sharing: workspaceResourceSharingSchema.optional()
90
139
  })
91
- .strict();
140
+ .strict()
141
+ .superRefine((value, context) => {
142
+ if (!value.feed)
143
+ return;
144
+ // The host job addresses the volume by its exact host name, so a derived, unpublished name cannot be fed.
145
+ if (!value.name)
146
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "fed volumes must declare name" });
147
+ // A readonly volume is made read-only by the container rewriting the whole volume on every start;
148
+ // a fed volume is instead frozen tree by tree on the host, so it stays mutable at the mount.
149
+ if (value.mode !== "mutable")
150
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "fed volumes must declare mode: mutable; the host freezes every landed tree" });
151
+ });
152
+ /** Declared inputs Spawnfile builds into the bundle archive. Exactly one input kind per bundle. */
153
+ const workspaceBundleFilesSchema = z.object({
154
+ exclude: z.array(z.string().trim().min(1)).optional(),
155
+ /** Archive the tree of this commit (any git revision) instead of the work tree; needs no clean checkout. */
156
+ ref: z.string().trim().min(1).optional(),
157
+ root: z.string().trim().min(1)
158
+ }).strict();
159
+ /**
160
+ * Declared inputs Spawnfile builds into the bundle archive. Exactly one input kind per bundle:
161
+ * `files` (git-tracked files), `dependencies` (lockfile installed for the target platform in a
162
+ * pinned image) or `generated` (a declared command writing an output directory from declared inputs).
163
+ */
164
+ const workspaceBundleBuildSchema = z.object({
165
+ dependencies: z.object({
166
+ check: argvSchema.optional(),
167
+ dev: z.boolean().optional(),
168
+ directory: z.string().trim().min(1),
169
+ image: pinnedImageSchema,
170
+ manager: z.literal("npm").optional(),
171
+ scripts: z.boolean().optional()
172
+ }).strict().optional(),
173
+ files: workspaceBundleFilesSchema.optional(),
174
+ generated: z.object({
175
+ command: argvSchema,
176
+ cwd: z.string().trim().min(1).optional(),
177
+ image: pinnedImageSchema.optional(),
178
+ inputs: z.array(workspaceBundleFilesSchema).min(1),
179
+ timeout_seconds: z.number().int().positive().max(86_400).optional(),
180
+ tools: z.array(argvSchema).optional()
181
+ }).strict().optional()
182
+ }).strict().superRefine((value, context) => {
183
+ if ([value.files, value.dependencies, value.generated].filter((kind) => kind !== undefined).length !== 1) {
184
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "bundle build must declare exactly one of files, dependencies or generated" });
185
+ }
186
+ });
92
187
  const teamWorkspaceResourceBundleSchema = z.object({
188
+ build: workspaceBundleBuildSchema.optional(),
93
189
  id: z.string().trim().min(1), kind: z.literal("bundle"), mount: resourceMountSchema,
94
- mode: z.literal("readonly"), sha256: z.string().regex(/^sha256:[a-f0-9]{64}$/u),
95
- sharing: z.literal("per_agent").optional(), source: z.string().trim().min(1)
96
- }).strict();
97
- const teamWorkspaceResourceSchema = z.discriminatedUnion("kind", [
190
+ mode: z.literal("readonly"), sha256: z.string().regex(/^sha256:[a-f0-9]{64}$/u).optional(),
191
+ sharing: z.literal("per_agent").optional(), source: z.string().trim().min(1).optional()
192
+ }).strict().superRefine((value, context) => {
193
+ if ((value.source === undefined) === (value.build === undefined)) {
194
+ context.addIssue({ code: z.ZodIssueCode.custom, message: "bundle resources must declare exactly one of source or build" });
195
+ }
196
+ });
197
+ export const teamWorkspaceResourceSchema = z.discriminatedUnion("kind", [
98
198
  teamWorkspaceResourceGitSchema,
99
199
  teamWorkspaceResourceBundleSchema,
100
200
  teamWorkspaceResourceVolumeSchema
@@ -125,7 +225,10 @@ export const teamWorkspaceSchema = z
125
225
  const normalizeResourceIdentity = (resource) => {
126
226
  if (resource.kind === "git") {
127
227
  return JSON.stringify({
228
+ auth: resource.auth ?? null,
128
229
  branch: resource.branch?.trim() ?? "",
230
+ exclude: resource.exclude ?? null,
231
+ fetch: resource.fetch ?? "start",
129
232
  kind: "git",
130
233
  mode: resource.mode,
131
234
  mount: normalizeMount(resource.mount),
@@ -137,10 +240,11 @@ export const teamWorkspaceSchema = z
137
240
  }
138
241
  if (resource.kind === "bundle")
139
242
  return JSON.stringify({
140
- kind: resource.kind, mode: resource.mode, mount: normalizeMount(resource.mount),
141
- sha256: resource.sha256, sharing: resource.sharing ?? "per_agent", source: resource.source
243
+ build: resource.build ?? null, kind: resource.kind, mode: resource.mode, mount: normalizeMount(resource.mount),
244
+ sha256: resource.sha256 ?? null, sharing: resource.sharing ?? "per_agent", source: resource.source ?? null
142
245
  });
143
246
  return JSON.stringify({
247
+ ...(resource.feed ? { feed: resource.feed } : {}),
144
248
  kind: "volume",
145
249
  mode: resource.mode,
146
250
  mount: normalizeMount(resource.mount),
@@ -0,0 +1,3 @@
1
+ import { type ComposeMomentRecordInput, type MomentRecord } from "./types.js";
2
+ /** Compose only supplied evidence at the turn boundary; this function reads no files or clock. */
3
+ export declare const composeMomentRecord: (input: ComposeMomentRecordInput) => MomentRecord;
@@ -0,0 +1,93 @@
1
+ import { feedLandingAt } from "../volume/index.js";
2
+ import { recordingHistoryAt } from "./history.js";
3
+ import { MOMENT_RECORD_VERSION } from "./types.js";
4
+ const orderedUnique = (values) => [...new Set(values)].sort();
5
+ /** Compose only supplied evidence at the turn boundary; this function reads no files or clock. */
6
+ export const composeMomentRecord = (input) => {
7
+ const { row, agentNodeId } = input;
8
+ const errors = [...(input.errors ?? [])];
9
+ if (row.agent_id !== agentNodeId)
10
+ errors.push(`Wake agent ${row.agent_id} does not match compiled agent ${agentNodeId}`);
11
+ if (row.error !== undefined)
12
+ errors.push(`Wake recording: ${row.error}`);
13
+ if (!row.deliveries.length)
14
+ throw new Error("A wake moment requires at least one delivery");
15
+ const startedAt = row.started_at, started = Date.parse(startedAt);
16
+ if (!Number.isFinite(started))
17
+ throw new Error("A wake moment requires a valid started_at");
18
+ const resources = [];
19
+ const history = recordingHistoryAt(input.deployResources, input.deploymentRecordPath, startedAt, agentNodeId);
20
+ const { deployment, agent } = history;
21
+ errors.push(...history.errors);
22
+ if (deployment && (!deployment.activation_exact || deployment.exact === false)) {
23
+ errors.push(`Deployment activation is non-exact${deployment.activation_note ? `: ${deployment.activation_note}` : ""}`);
24
+ }
25
+ for (const resource of [...(agent?.resources ?? [])].sort((a, b) => a.id.localeCompare(b.id) || a.kind.localeCompare(b.kind))) {
26
+ const matches = deployment?.resources.filter((entry) => entry.id === resource.id && entry.kind === resource.kind) ?? [];
27
+ const pin = matches[0];
28
+ if (matches.length !== 1 || !pin) {
29
+ errors.push(`${matches.length ? "Ambiguous" : "Missing"} deployment history for ${resource.kind} resource ${resource.id} at ${startedAt}`);
30
+ continue;
31
+ }
32
+ resources.push(pin.kind === "git"
33
+ ? { id: pin.id, kind: pin.kind, commit: pin.commit, sha256: pin.sha256 }
34
+ : { id: pin.id, kind: pin.kind, sha256: pin.sha256 });
35
+ }
36
+ const feeds = [];
37
+ for (const { id, volume_name } of agent?.feeds ?? []) {
38
+ const history = Object.hasOwn(input.feedLandings, id) ? input.feedLandings[id] : [];
39
+ const landing = feedLandingAt(history.filter((entry) => entry.resource === id && entry.volume === volume_name), startedAt);
40
+ if (!landing) {
41
+ errors.push(`Missing feed history for ${id} at ${startedAt}`);
42
+ continue;
43
+ }
44
+ if (landing.ambiguous)
45
+ errors.push(`Feed ${id} transition is ambiguous at ${startedAt} (${landing.switching_at} through ${landing.landed_at})`);
46
+ feeds.push({ id, revision: landing.revision, tree: landing.tree, landedAt: landing.landed_at,
47
+ ...(landing.commit === undefined ? {} : { commit: landing.commit }),
48
+ ...(landing.ref === undefined ? {} : { ref: landing.ref }),
49
+ ...(landing.paths === undefined ? {} : { paths: [...landing.paths] }),
50
+ ...(landing.period === undefined ? {} : { period: landing.period }) });
51
+ }
52
+ const memory = [];
53
+ for (const bank of [...(agent?.memory ?? [])].sort((a, b) => a.id.localeCompare(b.id) || a.declared_by.localeCompare(b.declared_by))) {
54
+ const ledger = bank.ledger_path === null ? undefined : input.memoryLedgers[bank.ledger_path];
55
+ if (!ledger || ledger.errors?.length) {
56
+ const reasons = ledger?.errors?.length ? ledger.errors : ["ledger could not be read"];
57
+ errors.push(...reasons.map((reason) => `Memory bank ${bank.id} (${bank.declared_by}): ${reason}`));
58
+ continue;
59
+ }
60
+ const seq = ledger.entries.reduce((highest, entry) => Date.parse(entry.createdAt) <= started ? Math.max(highest, entry.seq) : highest, 0);
61
+ memory.push({ id: bank.id, declaredBy: bank.declared_by, seq });
62
+ }
63
+ const snapshotIds = orderedUnique(agent?.snapshots ?? []);
64
+ for (const id of snapshotIds) {
65
+ if (!row.snapshots.some((entry) => entry.id === id))
66
+ errors.push(`Missing pre-turn snapshot for ${id}`);
67
+ }
68
+ const volumes = [];
69
+ for (const { id, snapshot } of [...row.snapshots].sort((a, b) => a.id.localeCompare(b.id))) {
70
+ if (!snapshotIds.includes(id)) {
71
+ errors.push(`Unexpected pre-turn snapshot for ${id}: not an effective recording root for ${agentNodeId}`);
72
+ continue;
73
+ }
74
+ volumes.push({ id, snapshot });
75
+ }
76
+ const messageIds = row.deliveries.flatMap(({ delivery_id }) => {
77
+ const match = /^moltnet:(.+)$/u.exec(delivery_id);
78
+ return match ? [match[1]] : [];
79
+ });
80
+ return {
81
+ version: MOMENT_RECORD_VERSION, agent: agentNodeId,
82
+ wake: {
83
+ at: row.deliveries[0].occurred_at, startedAt, executionId: row.execution_id,
84
+ deliveries: row.deliveries.map(({ delivery_id, kind, occurred_at }) => ({ deliveryId: delivery_id, kind, occurredAt: occurred_at })),
85
+ ...(messageIds.length ? { surface: "moltnet", messageId: messageIds[0] } : {})
86
+ },
87
+ recordedAt: input.recordedAt, exact: errors.length === 0, resources, feeds, memory,
88
+ moltnet: orderedUnique(agent?.networks ?? []).map((network) => ({ network, cursor: startedAt,
89
+ ...(messageIds.length ? { messageIds: [...messageIds] } : {}) })),
90
+ volumes,
91
+ ...(errors.length ? { errors } : {})
92
+ };
93
+ };
@@ -0,0 +1,15 @@
1
+ import { createDockerProbeGateway, inspectDockerDeployment, type DeploymentRecord } from "../deployment/index.js";
2
+ import { type SyncMomentRecordsOptions, type SyncMomentRecordsResult } from "./sync.js";
3
+ export interface RecordingDeploymentHandlers {
4
+ createDockerProbeGateway?: typeof createDockerProbeGateway;
5
+ inspectDockerDeployment?: typeof inspectDockerDeployment;
6
+ readFeedHistory?: SyncMomentRecordsOptions["readFeedHistory"];
7
+ now?: () => Date;
8
+ }
9
+ export interface RecordingDeploymentOptions {
10
+ record: DeploymentRecord;
11
+ recordPath: string;
12
+ dockerCommand?: string;
13
+ timeoutMs?: number;
14
+ }
15
+ export declare const syncDeploymentMoments: (options: RecordingDeploymentOptions, handlers?: RecordingDeploymentHandlers) => Promise<SyncMomentRecordsResult>;