spawnfile 0.1.14 → 0.1.17

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 (546) hide show
  1. package/README.md +60 -159
  2. package/dist/audit/checksShared.d.ts +1 -1
  3. package/dist/auth/importers.d.ts +10 -0
  4. package/dist/auth/importers.js +29 -4
  5. package/dist/auth/index.d.ts +2 -0
  6. package/dist/auth/index.js +1 -0
  7. package/dist/auth/paths.d.ts +1 -1
  8. package/dist/auth/profileStore.js +9 -9
  9. package/dist/auth/targetSecretSourceFsIdentity.d.ts +40 -0
  10. package/dist/auth/targetSecretSourceFsIdentity.js +42 -0
  11. package/dist/auth/targetSecretSourceFsPublish.d.ts +2 -0
  12. package/dist/auth/targetSecretSourceFsPublish.js +3 -1
  13. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +2 -1
  14. package/dist/auth/targetSecretSourceFsPublishImmutable.js +104 -71
  15. package/dist/auth/targetSecretSourceFsRead.js +5 -14
  16. package/dist/auth/trainingAuth.d.ts +21 -0
  17. package/dist/auth/trainingAuth.js +86 -0
  18. package/dist/auth/types.d.ts +1 -1
  19. package/dist/cli/authCommands.d.ts +1 -1
  20. package/dist/cli/authCommands.js +9 -0
  21. package/dist/cli/canaryCutoverCommand.d.ts +2 -0
  22. package/dist/cli/canaryCutoverCommand.js +30 -0
  23. package/dist/cli/capabilitiesCommand.d.ts +3 -0
  24. package/dist/cli/capabilitiesCommand.js +12 -0
  25. package/dist/cli/capabilitiesReceipt.d.ts +56 -0
  26. package/dist/cli/capabilitiesReceipt.js +56 -0
  27. package/dist/cli/compileBuildCommands.js +13 -0
  28. package/dist/cli/composedLifecycleContractSet.d.ts +21 -0
  29. package/dist/cli/composedLifecycleContractSet.js +204 -0
  30. package/dist/cli/devCommands.js +2 -0
  31. package/dist/cli/downCommand.js +19 -8
  32. package/dist/cli/evidenceExportHelperCommand.d.ts +13 -0
  33. package/dist/cli/evidenceExportHelperCommand.js +51 -0
  34. package/dist/cli/index.js +12 -3
  35. package/dist/cli/lifecycleMachine.d.ts +7 -1
  36. package/dist/cli/lifecycleMachine.js +2 -2
  37. package/dist/cli/paideiaDelegation.d.ts +17 -0
  38. package/dist/cli/paideiaDelegation.js +210 -0
  39. package/dist/cli/paideiaSupervisor.d.ts +17 -0
  40. package/dist/cli/paideiaSupervisor.js +48 -0
  41. package/dist/cli/productStateCloneCommand.d.ts +2 -0
  42. package/dist/cli/productStateCloneCommand.js +34 -0
  43. package/dist/cli/runCli.d.ts +13 -3
  44. package/dist/cli/runCli.js +37 -9
  45. package/dist/cli/targetCommands.d.ts +4 -7
  46. package/dist/cli/targetCommands.js +16 -46
  47. package/dist/cli/targetConfigPreparedPlan.d.ts +3 -0
  48. package/dist/cli/targetConfigPreparedPlan.js +74 -0
  49. package/dist/cli/targetConfigResolver.d.ts +3 -0
  50. package/dist/cli/targetConfigResolver.js +111 -0
  51. package/dist/cli/targetConfigResolverCommand.d.ts +6 -0
  52. package/dist/cli/targetConfigResolverCommand.js +43 -0
  53. package/dist/cli/targetConfigResolverContracts.d.ts +56 -0
  54. package/dist/cli/targetConfigResolverContracts.js +30 -0
  55. package/dist/cli/targetConfigResolverDocker.d.ts +4 -0
  56. package/dist/cli/targetConfigResolverDocker.js +47 -0
  57. package/dist/cli/targetConfigResolverValidation.d.ts +10 -0
  58. package/dist/cli/targetConfigResolverValidation.js +94 -0
  59. package/dist/cli/targetDefaultAuthorities.d.ts +2 -0
  60. package/dist/cli/targetDefaultAuthorities.js +3 -0
  61. package/dist/cli/targetDefaultConfig.d.ts +7 -0
  62. package/dist/cli/targetDefaultConfig.js +22 -5
  63. package/dist/cli/targetDefaultConfigStdin.js +7 -1
  64. package/dist/cli/targetDefaultHandlerFactory.js +23 -2
  65. package/dist/cli/targetDefaultHandlers.d.ts +2 -2
  66. package/dist/cli/targetProductionCommands.d.ts +5 -0
  67. package/dist/cli/targetProductionCommands.js +45 -0
  68. package/dist/cli/trainCommand.d.ts +3 -0
  69. package/dist/cli/trainCommand.js +61 -0
  70. package/dist/cli/upCommand.js +35 -6
  71. package/dist/cli/upLifecycleRecovery.d.ts +2 -2
  72. package/dist/cli/upLifecycleRecovery.js +188 -44
  73. package/dist/cli/usageCommand.d.ts +40 -0
  74. package/dist/cli/usageCommand.js +284 -0
  75. package/dist/cli/usageCommandLive.d.ts +84 -0
  76. package/dist/cli/usageCommandLive.js +95 -0
  77. package/dist/cli/usageDeploymentSource.d.ts +9 -0
  78. package/dist/cli/usageDeploymentSource.js +22 -0
  79. package/dist/cli/workspaceResourceMigrationCommand.d.ts +8 -0
  80. package/dist/cli/workspaceResourceMigrationCommand.js +36 -0
  81. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -1
  82. package/dist/compiler/buildCompilePlanTeams.js +6 -1
  83. package/dist/compiler/compilePlanHelpers.js +3 -0
  84. package/dist/compiler/compileProject.d.ts +2 -0
  85. package/dist/compiler/compileProject.js +5 -1
  86. package/dist/compiler/compileProjectSupport.js +9 -0
  87. package/dist/compiler/containerArtifacts.d.ts +3 -1
  88. package/dist/compiler/containerArtifacts.js +92 -40
  89. package/dist/compiler/containerArtifactsPlans.d.ts +1 -1
  90. package/dist/compiler/containerArtifactsPlans.js +24 -7
  91. package/dist/compiler/containerArtifactsRender.d.ts +2 -1
  92. package/dist/compiler/containerArtifactsRender.js +91 -58
  93. package/dist/compiler/containerArtifactsTypes.d.ts +8 -0
  94. package/dist/compiler/containerBackedMountRender.d.ts +56 -0
  95. package/dist/compiler/containerBackedMountRender.js +101 -0
  96. package/dist/compiler/containerDaimonBrokerRender.d.ts +112 -0
  97. package/dist/compiler/containerDaimonBrokerRender.js +191 -0
  98. package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +38 -0
  99. package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +108 -0
  100. package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +172 -0
  101. package/dist/compiler/containerDaimonGrokWorkerRender.js +268 -0
  102. package/dist/compiler/containerDaimonOwnershipGuardRender.d.ts +12 -0
  103. package/dist/compiler/containerDaimonOwnershipGuardRender.js +191 -0
  104. package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +24 -0
  105. package/dist/compiler/containerDaimonUidEntrypointRender.js +297 -0
  106. package/dist/compiler/containerEntrypointRender.d.ts +7 -0
  107. package/dist/compiler/containerEntrypointRender.js +28 -22
  108. package/dist/compiler/containerPersistentMounts.d.ts +30 -0
  109. package/dist/compiler/containerPersistentMounts.js +66 -0
  110. package/dist/compiler/containerReadinessPaths.d.ts +1 -0
  111. package/dist/compiler/containerReadinessPaths.js +1 -0
  112. package/dist/compiler/containerRuntimeLinkMaterializer.d.ts +2 -0
  113. package/dist/compiler/containerRuntimeLinkMaterializer.js +12 -0
  114. package/dist/compiler/containerRuntimeReadinessRender.d.ts +7 -0
  115. package/dist/compiler/containerRuntimeReadinessRender.js +40 -0
  116. package/dist/compiler/containerStateOwnershipRender.d.ts +4 -0
  117. package/dist/compiler/containerStateOwnershipRender.js +75 -0
  118. package/dist/compiler/containerTargetResources.d.ts +22 -1
  119. package/dist/compiler/containerTargetResources.js +94 -2
  120. package/dist/compiler/containerVolumeBootstrap.d.ts +3 -0
  121. package/dist/compiler/containerVolumeBootstrap.js +3 -0
  122. package/dist/compiler/containerWorkspaceResourceRender.js +49 -1
  123. package/dist/compiler/daimonTelemetryArtifacts.d.ts +2 -2
  124. package/dist/compiler/daimonTelemetryArtifacts.js +5 -10
  125. package/dist/compiler/deploymentLineage.d.ts +40 -0
  126. package/dist/compiler/deploymentLineage.js +50 -0
  127. package/dist/compiler/index.d.ts +3 -0
  128. package/dist/compiler/index.js +3 -0
  129. package/dist/compiler/initProject.d.ts +2 -0
  130. package/dist/compiler/initProject.js +39 -1
  131. package/dist/compiler/localMoltnetAuthority.d.ts +64 -0
  132. package/dist/compiler/localMoltnetAuthority.js +177 -0
  133. package/dist/compiler/memoryArtifacts.d.ts +1 -1
  134. package/dist/compiler/memoryArtifacts.js +108 -32
  135. package/dist/compiler/modelEnv.d.ts +5 -0
  136. package/dist/compiler/modelEnv.js +8 -2
  137. package/dist/compiler/moltnetArtifactPaths.d.ts +17 -12
  138. package/dist/compiler/moltnetArtifactPaths.js +17 -15
  139. package/dist/compiler/moltnetArtifactTypes.d.ts +10 -0
  140. package/dist/compiler/moltnetArtifacts.d.ts +1 -1
  141. package/dist/compiler/moltnetArtifacts.js +52 -12
  142. package/dist/compiler/moltnetBinaries.d.ts +16 -4
  143. package/dist/compiler/moltnetBinaries.js +46 -6
  144. package/dist/compiler/moltnetClientConfig.js +1 -1
  145. package/dist/compiler/moltnetConfigLowering.d.ts +3 -1
  146. package/dist/compiler/moltnetConfigLowering.js +30 -6
  147. package/dist/compiler/moltnetNodeConfig.js +1 -1
  148. package/dist/compiler/moltnetReleaseAuthority.d.ts +24 -1
  149. package/dist/compiler/moltnetReleaseAuthority.js +33 -4
  150. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -1
  151. package/dist/compiler/moltnetRepresentativeResolution.js +2 -2
  152. package/dist/compiler/moltnetResolution.js +9 -15
  153. package/dist/compiler/moltnetRoomMemberships.js +20 -5
  154. package/dist/compiler/moltnetRoomPolicyCompatibility.d.ts +1 -1
  155. package/dist/compiler/moltnetRoomPolicyCompatibility.js +3 -1
  156. package/dist/compiler/moltnetRuntimeConfig.d.ts +1 -1
  157. package/dist/compiler/moltnetRuntimeConfig.js +22 -2
  158. package/dist/compiler/moltnetServerPlans.js +19 -0
  159. package/dist/compiler/organizationExternalParticipants.d.ts +3 -0
  160. package/dist/compiler/organizationExternalParticipants.js +176 -0
  161. package/dist/compiler/organizationIdentity.d.ts +3 -9
  162. package/dist/compiler/organizationIdentity.js +37 -270
  163. package/dist/compiler/organizationIdentityGraph.d.ts +15 -0
  164. package/dist/compiler/organizationIdentityGraph.js +115 -0
  165. package/dist/compiler/organizationReadyEvidence.d.ts +8 -0
  166. package/dist/compiler/organizationReadyEvidence.js +23 -3
  167. package/dist/compiler/runProject.d.ts +4 -2
  168. package/dist/compiler/runProject.js +32 -6
  169. package/dist/compiler/runProjectAuth.d.ts +3 -1
  170. package/dist/compiler/runProjectAuth.js +19 -3
  171. package/dist/compiler/runProjectDaimonCodexDocker.d.ts +3 -0
  172. package/dist/compiler/runProjectDaimonCodexDocker.js +36 -0
  173. package/dist/compiler/runProjectDocker.d.ts +8 -4
  174. package/dist/compiler/runProjectDocker.js +43 -18
  175. package/dist/compiler/runProjectDockerDaimonGuards.d.ts +15 -0
  176. package/dist/compiler/runProjectDockerDaimonGuards.js +122 -0
  177. package/dist/compiler/runProjectDockerReservation.d.ts +3 -0
  178. package/dist/compiler/runProjectDockerReservation.js +118 -0
  179. package/dist/compiler/runProjectLifecycle.js +1 -1
  180. package/dist/compiler/training/broker/declaration.d.ts +45 -0
  181. package/dist/compiler/training/broker/declaration.js +55 -0
  182. package/dist/compiler/training/broker/entrypoint.d.ts +39 -0
  183. package/dist/compiler/training/broker/entrypoint.js +111 -0
  184. package/dist/compiler/training/broker/index.d.ts +10 -0
  185. package/dist/compiler/training/broker/index.js +10 -0
  186. package/dist/compiler/training/broker/main.d.ts +2 -0
  187. package/dist/compiler/training/broker/main.js +14 -0
  188. package/dist/compiler/training/broker/paths.d.ts +196 -0
  189. package/dist/compiler/training/broker/paths.js +241 -0
  190. package/dist/compiler/training/broker/processes.d.ts +42 -0
  191. package/dist/compiler/training/broker/processes.js +99 -0
  192. package/dist/compiler/training/broker/projection.d.ts +51 -0
  193. package/dist/compiler/training/broker/projection.js +76 -0
  194. package/dist/compiler/training/broker/provisioning.d.ts +87 -0
  195. package/dist/compiler/training/broker/provisioning.js +213 -0
  196. package/dist/compiler/training/broker/receipt.d.ts +77 -0
  197. package/dist/compiler/training/broker/receipt.js +110 -0
  198. package/dist/compiler/training/broker/registration.d.ts +41 -0
  199. package/dist/compiler/training/broker/registration.js +102 -0
  200. package/dist/compiler/training/broker/runtime.d.ts +25 -0
  201. package/dist/compiler/training/broker/runtime.js +173 -0
  202. package/dist/compiler/training/broker/seccompRoutes.d.ts +31 -0
  203. package/dist/compiler/training/broker/seccompRoutes.js +36 -0
  204. package/dist/compiler/training/broker/supervisor.d.ts +109 -0
  205. package/dist/compiler/training/broker/supervisor.js +173 -0
  206. package/dist/compiler/training/container/contract.d.ts +31 -0
  207. package/dist/compiler/training/container/contract.js +33 -0
  208. package/dist/compiler/training/container/index.d.ts +4 -0
  209. package/dist/compiler/training/container/index.js +2 -0
  210. package/dist/compiler/training/container/launch.d.ts +18 -0
  211. package/dist/compiler/training/container/launch.js +173 -0
  212. package/dist/compiler/training/container/prepare.d.ts +8 -0
  213. package/dist/compiler/training/container/prepare.js +80 -0
  214. package/dist/compiler/training/container/process.d.ts +14 -0
  215. package/dist/compiler/training/container/process.js +70 -0
  216. package/dist/compiler/training/container/security.d.ts +36 -0
  217. package/dist/compiler/training/container/security.js +58 -0
  218. package/dist/compiler/training/context.d.ts +7 -0
  219. package/dist/compiler/training/context.js +93 -0
  220. package/dist/compiler/training/contract.d.ts +142 -0
  221. package/dist/compiler/training/contract.js +34 -0
  222. package/dist/compiler/training/index.d.ts +4 -0
  223. package/dist/compiler/training/index.js +3 -0
  224. package/dist/compiler/training/preparation/assets/Dockerfile +98 -0
  225. package/dist/compiler/training/preparation/assets/package-lock.json +3787 -0
  226. package/dist/compiler/training/preparation/broker.d.ts +21 -0
  227. package/dist/compiler/training/preparation/broker.js +43 -0
  228. package/dist/compiler/training/preparation/contextModes.d.ts +12 -0
  229. package/dist/compiler/training/preparation/contextModes.js +38 -0
  230. package/dist/compiler/training/preparation/contract.d.ts +182 -0
  231. package/dist/compiler/training/preparation/contract.js +94 -0
  232. package/dist/compiler/training/preparation/copyAssets.d.ts +1 -0
  233. package/dist/compiler/training/preparation/copyAssets.js +8 -0
  234. package/dist/compiler/training/preparation/daimonParent.d.ts +42 -0
  235. package/dist/compiler/training/preparation/daimonParent.js +114 -0
  236. package/dist/compiler/training/preparation/files.d.ts +25 -0
  237. package/dist/compiler/training/preparation/files.js +85 -0
  238. package/dist/compiler/training/preparation/image.d.ts +28 -0
  239. package/dist/compiler/training/preparation/image.js +102 -0
  240. package/dist/compiler/training/preparation/index.d.ts +3 -0
  241. package/dist/compiler/training/preparation/index.js +2 -0
  242. package/dist/compiler/training/preparation/inputs.d.ts +23 -0
  243. package/dist/compiler/training/preparation/inputs.js +93 -0
  244. package/dist/compiler/training/preparation/prepare.d.ts +33 -0
  245. package/dist/compiler/training/preparation/prepare.js +186 -0
  246. package/dist/compiler/training/preparation/scratch.d.ts +19 -0
  247. package/dist/compiler/training/preparation/scratch.js +48 -0
  248. package/dist/compiler/training/repair/compatibility.d.ts +11 -0
  249. package/dist/compiler/training/repair/compatibility.js +34 -0
  250. package/dist/compiler/training/repair/contract.d.ts +506 -0
  251. package/dist/compiler/training/repair/contract.js +31 -0
  252. package/dist/compiler/training/repair/index.d.ts +3 -0
  253. package/dist/compiler/training/repair/index.js +3 -0
  254. package/dist/compiler/training/repair/prepare.d.ts +230 -0
  255. package/dist/compiler/training/repair/prepare.js +74 -0
  256. package/dist/compiler/training/repair/witness.d.ts +203 -0
  257. package/dist/compiler/training/repair/witness.js +42 -0
  258. package/dist/compiler/types.d.ts +2 -0
  259. package/dist/compiler/upProject.d.ts +26 -1
  260. package/dist/compiler/upProject.js +117 -178
  261. package/dist/compiler/upProjectHandoff.d.ts +62 -0
  262. package/dist/compiler/upProjectHandoff.js +204 -0
  263. package/dist/compiler/upReceipt.js +49 -4
  264. package/dist/compiler/updateProjectModels.js +1 -0
  265. package/dist/compiler/view/types.d.ts +1 -1
  266. package/dist/compiler/workspaceBundleArtifacts.d.ts +3 -0
  267. package/dist/compiler/workspaceBundleArtifacts.js +106 -0
  268. package/dist/compiler/workspaceResources.d.ts +4 -1
  269. package/dist/compiler/workspaceResources.js +12 -7
  270. package/dist/deployment/artifactsExportPlan.js +51 -1
  271. package/dist/deployment/canaryCutover.d.ts +42 -0
  272. package/dist/deployment/canaryCutover.js +140 -0
  273. package/dist/deployment/candidateDiagnostics.d.ts +15 -0
  274. package/dist/deployment/candidateDiagnostics.js +90 -0
  275. package/dist/deployment/dockerLogs.js +4 -1
  276. package/dist/deployment/dockerManager.js +9 -3
  277. package/dist/deployment/dockerProbeGateway.d.ts +17 -0
  278. package/dist/deployment/dockerProbeGateway.js +17 -2
  279. package/dist/deployment/downDeployment.d.ts +5 -0
  280. package/dist/deployment/downDeployment.js +109 -8
  281. package/dist/deployment/downReceiptTypes.d.ts +17 -2
  282. package/dist/deployment/downReceiptTypes.js +17 -2
  283. package/dist/deployment/index.d.ts +4 -0
  284. package/dist/deployment/index.js +4 -0
  285. package/dist/deployment/lifecycleCompletionContracts.d.ts +66 -0
  286. package/dist/deployment/lifecycleCompletionContracts.js +34 -0
  287. package/dist/deployment/lifecycleCompletionPaths.d.ts +4 -1
  288. package/dist/deployment/lifecycleCompletionPaths.js +3 -0
  289. package/dist/deployment/lifecycleCompletionPublication.d.ts +2 -0
  290. package/dist/deployment/lifecycleCompletionPublication.js +18 -4
  291. package/dist/deployment/lifecycleCompletionStore.d.ts +1 -1
  292. package/dist/deployment/lifecycleCompletionStore.js +7 -7
  293. package/dist/deployment/lifecycleUpRecords.d.ts +11 -0
  294. package/dist/deployment/lifecycleUpRecords.js +127 -0
  295. package/dist/deployment/native/AGENTS.md +11 -0
  296. package/dist/deployment/native/rename-noreplace-arm64 +0 -0
  297. package/dist/deployment/native/rename-noreplace-arm64.provenance.json +1 -0
  298. package/dist/deployment/native/rename-noreplace-x64 +0 -0
  299. package/dist/deployment/native/rename-noreplace-x64.provenance.json +1 -0
  300. package/dist/deployment/noReplaceActivation.d.ts +17 -0
  301. package/dist/deployment/noReplaceActivation.js +50 -0
  302. package/dist/deployment/organizationHandoffAuthorityFsBudget.d.ts +110 -0
  303. package/dist/deployment/organizationHandoffAuthorityFsBudget.js +156 -0
  304. package/dist/deployment/organizationHandoffAuthorityFsClient.js +82 -27
  305. package/dist/deployment/organizationHandoffAuthorityFsElection.d.ts +21 -0
  306. package/dist/deployment/organizationHandoffAuthorityFsElection.js +57 -0
  307. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +254 -108
  308. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.d.ts +1 -0
  309. package/dist/deployment/organizationHandoffAuthorityFsWorkerStall.fixture.js +16 -0
  310. package/dist/deployment/organizationHandoffAuthorityStore.js +14 -7
  311. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +2 -2
  312. package/dist/deployment/organizationHandoffAuthorityTypes.js +2 -1
  313. package/dist/deployment/organizationReady.d.ts +2 -0
  314. package/dist/deployment/organizationReady.js +36 -4
  315. package/dist/deployment/productStateClone.d.ts +43 -0
  316. package/dist/deployment/productStateClone.js +319 -0
  317. package/dist/deployment/upLifecycleRecoveryState.d.ts +23 -0
  318. package/dist/deployment/upLifecycleRecoveryState.js +12 -0
  319. package/dist/deployment/upReceiptTypes.d.ts +32 -6
  320. package/dist/deployment/upReceiptTypes.js +29 -2
  321. package/dist/deployment/workspaceResourceMigration.d.ts +55 -0
  322. package/dist/deployment/workspaceResourceMigration.js +315 -0
  323. package/dist/dev/project.d.ts +7 -0
  324. package/dist/dev/project.js +9 -0
  325. package/dist/distribution/consumeImage.d.ts +2 -0
  326. package/dist/distribution/consumeImage.js +98 -73
  327. package/dist/distribution/consumeImageDaimonDocker.d.ts +3 -0
  328. package/dist/distribution/consumeImageDaimonDocker.js +45 -0
  329. package/dist/distribution/consumeImageLifecycle.d.ts +17 -0
  330. package/dist/distribution/consumeImageLifecycle.js +231 -0
  331. package/dist/distribution/consumeImageSupport.d.ts +12 -0
  332. package/dist/distribution/consumeImageSupport.js +15 -0
  333. package/dist/distribution/distributionReportSchema.d.ts +11 -1
  334. package/dist/distribution/distributionReportSchema.js +15 -2
  335. package/dist/distribution/dockerRunner.d.ts +6 -1
  336. package/dist/distribution/dockerRunner.js +31 -4
  337. package/dist/distribution/imageRuntimeAuth.d.ts +9 -1
  338. package/dist/distribution/imageRuntimeAuth.js +70 -1
  339. package/dist/distribution/index.d.ts +1 -1
  340. package/dist/distribution/index.js +1 -1
  341. package/dist/distribution/preflight.js +5 -1
  342. package/dist/distribution/types.d.ts +14 -1
  343. package/dist/distribution/types.js +3 -0
  344. package/dist/evidenceExportHelper/boundedExecutor.d.ts +3 -0
  345. package/dist/evidenceExportHelper/boundedExecutor.js +33 -0
  346. package/dist/evidenceExportHelper/helperProgram.mjs +156 -0
  347. package/dist/evidenceExportHelper/index.d.ts +4 -0
  348. package/dist/evidenceExportHelper/index.js +4 -0
  349. package/dist/evidenceExportHelper/preparedAuthority.d.ts +64 -0
  350. package/dist/evidenceExportHelper/preparedAuthority.js +228 -0
  351. package/dist/evidenceExportHelper/preparedBuilder.d.ts +10 -0
  352. package/dist/evidenceExportHelper/preparedBuilder.js +183 -0
  353. package/dist/evidenceExportHelper/preparedBuilderTypes.d.ts +19 -0
  354. package/dist/evidenceExportHelper/preparedBuilderTypes.js +1 -0
  355. package/dist/evidenceExportHelper/recipe.d.ts +7 -0
  356. package/dist/evidenceExportHelper/recipe.js +83 -0
  357. package/dist/filesystem/io.d.ts +2 -0
  358. package/dist/filesystem/io.js +16 -1
  359. package/dist/manifest/executionSchemas.d.ts +27 -0
  360. package/dist/manifest/executionSchemas.js +21 -2
  361. package/dist/manifest/mcpSchemas.d.ts +1 -0
  362. package/dist/manifest/mcpSchemas.js +3 -0
  363. package/dist/manifest/renderSpawnfileNetworks.js +11 -0
  364. package/dist/manifest/renderSpawnfileWorkspace.js +5 -0
  365. package/dist/manifest/scheduleSchemas.d.ts +3 -1
  366. package/dist/manifest/scheduleSchemas.js +91 -5
  367. package/dist/manifest/schemas.d.ts +237 -12
  368. package/dist/manifest/schemas.js +5 -2
  369. package/dist/manifest/teamNetworkAccessSchemas.d.ts +5 -1
  370. package/dist/manifest/teamNetworkAccessSchemas.js +11 -0
  371. package/dist/manifest/teamNetworkAuthSchemas.d.ts +1 -1
  372. package/dist/manifest/teamNetworkSchemas.d.ts +17 -3
  373. package/dist/manifest/teamNetworkSchemas.js +19 -1
  374. package/dist/manifest/teamNetworkServerSchemas.d.ts +8 -3
  375. package/dist/manifest/teamNetworkServerSchemas.js +18 -2
  376. package/dist/manifest/workspaceSchemas.d.ts +16 -0
  377. package/dist/manifest/workspaceSchemas.js +11 -0
  378. package/dist/report/types.d.ts +34 -4
  379. package/dist/runtime/common.d.ts +28 -1
  380. package/dist/runtime/common.js +33 -3
  381. package/dist/runtime/container.js +49 -33
  382. package/dist/runtime/daimon/adapter.d.ts +14 -0
  383. package/dist/runtime/daimon/adapter.js +243 -0
  384. package/dist/runtime/daimon/attention.d.ts +8 -0
  385. package/dist/runtime/daimon/attention.js +32 -0
  386. package/dist/runtime/daimon/config.d.ts +25 -0
  387. package/dist/runtime/daimon/config.js +272 -0
  388. package/dist/runtime/daimon/contractManifest.d.ts +295 -0
  389. package/dist/runtime/daimon/contractManifest.js +319 -0
  390. package/dist/runtime/daimon/grokModel.d.ts +19 -0
  391. package/dist/runtime/daimon/grokModel.js +33 -0
  392. package/dist/runtime/daimon/grokWorkerConfigBytes.d.ts +26 -0
  393. package/dist/runtime/daimon/grokWorkerConfigBytes.js +36 -0
  394. package/dist/runtime/daimon/grokWorkerContract.d.ts +22 -0
  395. package/dist/runtime/daimon/grokWorkerContract.js +48 -0
  396. package/dist/runtime/daimon/memory.d.ts +57 -0
  397. package/dist/runtime/daimon/memory.js +125 -0
  398. package/dist/runtime/daimon/runAuth.d.ts +51 -0
  399. package/dist/runtime/daimon/runAuth.js +279 -0
  400. package/dist/runtime/daimon/runtimeIdentity.d.ts +22 -0
  401. package/dist/runtime/daimon/runtimeIdentity.js +22 -0
  402. package/dist/runtime/daimon/scheduleAuthority.d.ts +3 -0
  403. package/dist/runtime/daimon/scheduleAuthority.js +17 -0
  404. package/dist/runtime/index.d.ts +4 -0
  405. package/dist/runtime/index.js +4 -0
  406. package/dist/runtime/install.d.ts +3 -0
  407. package/dist/runtime/install.js +3 -0
  408. package/dist/runtime/localDaimonAuthority.d.ts +11 -0
  409. package/dist/runtime/localDaimonAuthority.js +77 -0
  410. package/dist/runtime/mnemeMcp.d.ts +13 -0
  411. package/dist/runtime/mnemeMcp.js +26 -0
  412. package/dist/runtime/openclaw/adapter.js +2 -2
  413. package/dist/runtime/pi/adapter.d.ts +0 -1
  414. package/dist/runtime/pi/adapter.js +2 -6
  415. package/dist/runtime/pi/appCliSource.js +1 -1
  416. package/dist/runtime/pi/appScheduleSource.js +6 -2
  417. package/dist/runtime/pi/appTemplateTypes.d.ts +1 -1
  418. package/dist/runtime/picoclaw/adapter.js +2 -2
  419. package/dist/runtime/registry.d.ts +3 -0
  420. package/dist/runtime/registry.js +19 -2
  421. package/dist/runtime/scheduleUtils.d.ts +1 -0
  422. package/dist/runtime/scheduleUtils.js +5 -1
  423. package/dist/runtime/types.d.ts +25 -0
  424. package/dist/runtime/usageLedger.d.ts +158 -0
  425. package/dist/runtime/usageLedger.js +269 -0
  426. package/dist/runtime/usageLedgerRead.d.ts +48 -0
  427. package/dist/runtime/usageLedgerRead.js +102 -0
  428. package/dist/runtime/usageRequestLedger.d.ts +42 -0
  429. package/dist/runtime/usageRequestLedger.js +72 -0
  430. package/dist/shared/daimonCodexDocker.d.ts +32 -0
  431. package/dist/shared/daimonCodexDocker.js +120 -0
  432. package/dist/shared/daimonGrokSeccompProfile.d.ts +10 -0
  433. package/dist/shared/daimonGrokSeccompProfile.js +11 -0
  434. package/dist/shared/index.d.ts +2 -0
  435. package/dist/shared/index.js +2 -0
  436. package/dist/shared/types.d.ts +1 -1
  437. package/dist/shared/volumeNames.d.ts +6 -0
  438. package/dist/shared/volumeNames.js +14 -0
  439. package/dist/target/dockerArtifactsProvider.js +34 -7
  440. package/dist/target/dockerBaseImage.d.ts +2 -0
  441. package/dist/target/dockerBaseImage.js +11 -0
  442. package/dist/target/dockerCommandExecutor.d.ts +11 -0
  443. package/dist/target/dockerCommandExecutor.js +53 -2
  444. package/dist/target/dockerCommandExecutorCore.d.ts +2 -1
  445. package/dist/target/dockerCommandExecutorCore.js +4 -2
  446. package/dist/target/dockerPublicArtifactSnapshot.d.ts +3 -3
  447. package/dist/target/dockerPublicArtifactSnapshot.js +17 -33
  448. package/dist/target/dockerTarget.d.ts +1 -0
  449. package/dist/target/dockerTargetBinding.d.ts +1 -2
  450. package/dist/target/dockerTargetBinding.js +2 -3
  451. package/dist/target/dockerTargetExecFile.d.ts +19 -0
  452. package/dist/target/dockerTargetExecFile.js +194 -0
  453. package/dist/target/dockerWorldServiceProvider.d.ts +4 -0
  454. package/dist/target/dockerWorldServiceProvider.js +13 -1
  455. package/dist/target/evidenceExport.d.ts +3 -1
  456. package/dist/target/evidenceExport.js +12 -3
  457. package/dist/target/evidenceExportOperationsTestKit.js +3 -3
  458. package/dist/target/evidenceExportProvider.d.ts +2 -0
  459. package/dist/target/evidenceExportProvider.js +15 -5
  460. package/dist/target/publicArtifactSnapshot.d.ts +31 -0
  461. package/dist/target/publicArtifactSnapshot.js +37 -3
  462. package/examples/README.md +45 -0
  463. package/examples/agent-with-subagents/AGENTS.md +3 -0
  464. package/examples/agent-with-subagents/Spawnfile +30 -0
  465. package/examples/agent-with-subagents/subagents/critic/AGENTS.md +3 -0
  466. package/examples/agent-with-subagents/subagents/critic/Spawnfile +15 -0
  467. package/examples/agent-with-subagents/subagents/researcher/AGENTS.md +3 -0
  468. package/examples/agent-with-subagents/subagents/researcher/Spawnfile +17 -0
  469. package/examples/daimon-org/Spawnfile +68 -0
  470. package/examples/daimon-org/TEAM.md +4 -0
  471. package/examples/daimon-org/agents/mapper/AGENTS.md +4 -0
  472. package/examples/daimon-org/agents/mapper/Spawnfile +37 -0
  473. package/examples/daimon-org/shared/skills/file-note/SKILL.md +9 -0
  474. package/examples/daimon-org/teams/review/Spawnfile +53 -0
  475. package/examples/daimon-org/teams/review/agents/reviewer/AGENTS.md +4 -0
  476. package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +37 -0
  477. package/examples/daimon-public-host/AGENTS.md +3 -0
  478. package/examples/daimon-public-host/Spawnfile +21 -0
  479. package/examples/distribution-org/Spawnfile +43 -0
  480. package/examples/distribution-org/TEAM.md +4 -0
  481. package/examples/distribution-org/agents/coordinator/AGENTS.md +1 -0
  482. package/examples/distribution-org/agents/coordinator/Spawnfile +20 -0
  483. package/examples/distribution-org/agents/researcher/AGENTS.md +1 -0
  484. package/examples/distribution-org/agents/researcher/Spawnfile +20 -0
  485. package/examples/jungian-daimon-org/Spawnfile +41 -0
  486. package/examples/jungian-daimon-org/TEAM.md +21 -0
  487. package/examples/jungian-daimon-org/teams/luna/Spawnfile +47 -0
  488. package/examples/jungian-daimon-org/teams/luna/TEAM.md +4 -0
  489. package/examples/jungian-daimon-org/teams/luna/agents/animus/AGENTS.md +10 -0
  490. package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +33 -0
  491. package/examples/jungian-daimon-org/teams/luna/agents/representative/AGENTS.md +21 -0
  492. package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +30 -0
  493. package/examples/jungian-daimon-org/teams/luna/agents/shadow/AGENTS.md +10 -0
  494. package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +33 -0
  495. package/examples/jungian-daimon-org/teams/selene/Spawnfile +47 -0
  496. package/examples/jungian-daimon-org/teams/selene/TEAM.md +4 -0
  497. package/examples/jungian-daimon-org/teams/selene/agents/animus/AGENTS.md +10 -0
  498. package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +33 -0
  499. package/examples/jungian-daimon-org/teams/selene/agents/representative/AGENTS.md +19 -0
  500. package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +33 -0
  501. package/examples/jungian-daimon-org/teams/selene/agents/shadow/AGENTS.md +10 -0
  502. package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +30 -0
  503. package/examples/mixed-runtime-org/Spawnfile +71 -0
  504. package/examples/mixed-runtime-org/TEAM.md +8 -0
  505. package/examples/mixed-runtime-org/agents/analyst/AGENTS.md +8 -0
  506. package/examples/mixed-runtime-org/agents/analyst/Spawnfile +27 -0
  507. package/examples/mixed-runtime-org/agents/conductor/AGENTS.md +8 -0
  508. package/examples/mixed-runtime-org/agents/conductor/Spawnfile +27 -0
  509. package/examples/mixed-runtime-org/agents/localist/AGENTS.md +7 -0
  510. package/examples/mixed-runtime-org/agents/localist/Spawnfile +50 -0
  511. package/examples/moltnet-team-chat/Spawnfile +43 -0
  512. package/examples/moltnet-team-chat/TEAM.md +5 -0
  513. package/examples/moltnet-team-chat/agents/coordinator/AGENTS.md +9 -0
  514. package/examples/moltnet-team-chat/agents/coordinator/Spawnfile +26 -0
  515. package/examples/moltnet-team-chat/teams/analysis/Spawnfile +23 -0
  516. package/examples/moltnet-team-chat/teams/analysis/TEAM.md +3 -0
  517. package/examples/moltnet-team-chat/teams/analysis/agents/observer/AGENTS.md +5 -0
  518. package/examples/moltnet-team-chat/teams/analysis/agents/observer/Spawnfile +19 -0
  519. package/examples/moltnet-team-chat/teams/analysis/agents/representative/AGENTS.md +5 -0
  520. package/examples/moltnet-team-chat/teams/analysis/agents/representative/Spawnfile +19 -0
  521. package/examples/moltnet-team-chat/teams/field/Spawnfile +41 -0
  522. package/examples/moltnet-team-chat/teams/field/TEAM.md +3 -0
  523. package/examples/moltnet-team-chat/teams/field/agents/observer/AGENTS.md +5 -0
  524. package/examples/moltnet-team-chat/teams/field/agents/observer/Spawnfile +26 -0
  525. package/examples/moltnet-team-chat/teams/field/agents/representative/AGENTS.md +11 -0
  526. package/examples/moltnet-team-chat/teams/field/agents/representative/Spawnfile +26 -0
  527. package/examples/single-agent/AGENTS.md +3 -0
  528. package/examples/single-agent/HEARTBEAT.md +3 -0
  529. package/examples/single-agent/IDENTITY.md +3 -0
  530. package/examples/single-agent/MEMORY.md +3 -0
  531. package/examples/single-agent/SOUL.md +3 -0
  532. package/examples/single-agent/Spawnfile +41 -0
  533. package/examples/single-agent/skills/web_search/SKILL.md +6 -0
  534. package/moltnet-releases.json +5 -4
  535. package/package.json +36 -9
  536. package/runtimes.yaml +5 -2
  537. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +0 -13
  538. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +0 -109
  539. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +0 -8
  540. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +0 -60
  541. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +0 -8
  542. package/dist/deployment/simfileFixtureBoundary.test-helper.js +0 -103
  543. package/dist/ownership/simfileRunOperatorInputs.d.ts +0 -103
  544. package/dist/ownership/simfileRunOperatorInputs.js +0 -139
  545. package/dist/target/cleanupRunDocker.test-helper.d.ts +0 -67
  546. package/dist/target/cleanupRunDocker.test-helper.js +0 -238
@@ -1,16 +1,11 @@
1
1
  import path from "node:path/posix";
2
2
  import { resolveNoopolisRunId } from "../runtime/index.js";
3
3
  import { createPersistentVolumeName } from "./moltnetArtifactPaths.js";
4
- /** Runtime names whose generated app is `src/runtime/pi/appCoreSource.ts` (the pi harness
5
- * and its `daimonAdapter` alias — see `src/runtime/pi/adapter.ts`'s
6
- * `export const daimonAdapter: RuntimeAdapter = { ...piAdapter, name: "daimon" }`, which
7
- * shares `piAdapter.container`/`createContainerTargets` byte-for-byte). Both write daimon
8
- * turn/wake causal telemetry the same way, under `runtimeHomePath` (appCoreSource.ts:189),
9
- * so both need the telemetry mount, not just the literal "pi" runtime name. */
10
- const DAIMON_TELEMETRY_RUNTIME_NAMES = new Set(["daimon", "pi"]);
4
+ /** Only the legacy generated Pi application writes this telemetry layout. */
5
+ const PI_TELEMETRY_RUNTIME_NAMES = new Set(["pi"]);
11
6
  const createTelemetryMountId = (agentSlug) => `agent-${agentSlug}-daimon-telemetry`;
12
7
  /**
13
- * Registers one run-scoped durable volume per pi/daimon agent for its daimon turn/wake
8
+ * Registers one run-scoped durable volume per legacy Pi agent for its daimon turn/wake
14
9
  * causal telemetry directory (`<instanceRoot>/runtime/agents/<slug>/telemetry` — the parent
15
10
  * of `causal.jsonl`, see `appCoreSource.ts`'s `runtimeHomePath`/`instanceRoot`), mirroring
16
11
  * exactly how `moltnetArtifacts.ts` mounts the Moltnet causal directory (Piece 4b,
@@ -31,7 +26,7 @@ export const createDaimonTelemetryArtifacts = (plan, runtimePlans, compiledNodes
31
26
  const mounts = [];
32
27
  const telemetryMountIdsByInstance = new Map();
33
28
  for (const runtimePlan of runtimePlans) {
34
- if (!DAIMON_TELEMETRY_RUNTIME_NAMES.has(runtimePlan.runtimeName) || !runtimePlan.instancePaths.homePath) {
29
+ if (!PI_TELEMETRY_RUNTIME_NAMES.has(runtimePlan.runtimeName) || !runtimePlan.instancePaths.homePath) {
35
30
  continue;
36
31
  }
37
32
  const instanceRoot = runtimePlan.instancePaths.instanceRoot ?? path.dirname(runtimePlan.instancePaths.homePath);
@@ -46,7 +41,7 @@ export const createDaimonTelemetryArtifacts = (plan, runtimePlans, compiledNodes
46
41
  id: mountId,
47
42
  mount_path: path.join(instanceRoot, "runtime", "agents", agentSlug, "telemetry"),
48
43
  reason: `daimon turn/wake causal telemetry for ${agentSlug}`,
49
- volume_name: createPersistentVolumeName(plan.root, mountId, undefined, runId)
44
+ volume_name: createPersistentVolumeName(plan.root, mountId, runId)
50
45
  });
51
46
  mountIdsByNodeId[nodeId] = mountId;
52
47
  }
@@ -0,0 +1,40 @@
1
+ import type { ContainerPersistentMountReport } from "../report/types.js";
2
+ /**
3
+ * Lineage namespace for `spawnfile dev up`.
4
+ *
5
+ * A derived `exclusive-reattach` volume name folds in the deployment lineage,
6
+ * and `dev up` used to delegate straight to `up` with no distinguishing
7
+ * identity — so both defaulted to the lineage `default` and resolved to the
8
+ * SAME host volumes. A dev deployment started while production was stopped
9
+ * therefore attached production's volumes and wrote into live state. That is
10
+ * strictly worse than the loss this branch set out to fix: loss is recoverable
11
+ * from a backup, a dev agent editing production's message store is not.
12
+ *
13
+ * The namespace applies to the lineage only, never to the deployment name, so
14
+ * deployment records, labels, and `spawnfile dev stop --deployment <name>` are
15
+ * unchanged. It also applies regardless of `--deployment`, so `dev up
16
+ * --deployment blue` and `up --deployment blue` still cannot collide.
17
+ */
18
+ export declare const DEV_DEPLOYMENT_LINEAGE_NAMESPACE = "dev";
19
+ /**
20
+ * Combines a lineage namespace with a deployment name. The result is only ever
21
+ * a hash input (`createExclusiveReattachVolumeName`), so any injective
22
+ * encoding works; `\0` cannot occur in a deployment name and therefore cannot
23
+ * be used to forge a collision with a production lineage.
24
+ */
25
+ export declare const resolveDeploymentLineage: (deploymentName: string, namespace?: string) => string;
26
+ /**
27
+ * An author-declared volume name carries no lineage — that is the point of
28
+ * declaring it, and it is what lets an operator pre-create or migrate the
29
+ * volume. It also means the namespace above cannot protect a declared volume:
30
+ * `dev up` would attach production's `clank-newsroom-store` by that exact name.
31
+ *
32
+ * "I declared a stable host volume name" and "this is a throwaway dev
33
+ * deployment" are contradictory intentions, and the branch's established
34
+ * posture for that situation is to fail closed with a named, explicit
35
+ * override rather than to warn into a scrolling log. So `dev up` refuses,
36
+ * listing the exact volumes it would have attached, and `--allow-declared-volumes`
37
+ * is how an operator says they meant it (a scratch clone of the project, or a
38
+ * deliberate read of real state).
39
+ */
40
+ export declare const assertNoDeclaredVolumeNames: (mounts: readonly ContainerPersistentMountReport[]) => void;
@@ -0,0 +1,50 @@
1
+ import { SpawnfileError } from "../shared/index.js";
2
+ /**
3
+ * Lineage namespace for `spawnfile dev up`.
4
+ *
5
+ * A derived `exclusive-reattach` volume name folds in the deployment lineage,
6
+ * and `dev up` used to delegate straight to `up` with no distinguishing
7
+ * identity — so both defaulted to the lineage `default` and resolved to the
8
+ * SAME host volumes. A dev deployment started while production was stopped
9
+ * therefore attached production's volumes and wrote into live state. That is
10
+ * strictly worse than the loss this branch set out to fix: loss is recoverable
11
+ * from a backup, a dev agent editing production's message store is not.
12
+ *
13
+ * The namespace applies to the lineage only, never to the deployment name, so
14
+ * deployment records, labels, and `spawnfile dev stop --deployment <name>` are
15
+ * unchanged. It also applies regardless of `--deployment`, so `dev up
16
+ * --deployment blue` and `up --deployment blue` still cannot collide.
17
+ */
18
+ export const DEV_DEPLOYMENT_LINEAGE_NAMESPACE = "dev";
19
+ /**
20
+ * Combines a lineage namespace with a deployment name. The result is only ever
21
+ * a hash input (`createExclusiveReattachVolumeName`), so any injective
22
+ * encoding works; `\0` cannot occur in a deployment name and therefore cannot
23
+ * be used to forge a collision with a production lineage.
24
+ */
25
+ export const resolveDeploymentLineage = (deploymentName, namespace) => namespace ? `${namespace}\0${deploymentName}` : deploymentName;
26
+ /**
27
+ * An author-declared volume name carries no lineage — that is the point of
28
+ * declaring it, and it is what lets an operator pre-create or migrate the
29
+ * volume. It also means the namespace above cannot protect a declared volume:
30
+ * `dev up` would attach production's `clank-newsroom-store` by that exact name.
31
+ *
32
+ * "I declared a stable host volume name" and "this is a throwaway dev
33
+ * deployment" are contradictory intentions, and the branch's established
34
+ * posture for that situation is to fail closed with a named, explicit
35
+ * override rather than to warn into a scrolling log. So `dev up` refuses,
36
+ * listing the exact volumes it would have attached, and `--allow-declared-volumes`
37
+ * is how an operator says they meant it (a scratch clone of the project, or a
38
+ * deliberate read of real state).
39
+ */
40
+ export const assertNoDeclaredVolumeNames = (mounts) => {
41
+ const declared = [...new Set(mounts.flatMap((mount) => mount.declared_volume_name ? [mount.declared_volume_name] : []))].sort();
42
+ if (declared.length === 0)
43
+ return;
44
+ throw new SpawnfileError("validation_error", `This dev deployment would attach ${declared.length} author-declared volume`
45
+ + `${declared.length === 1 ? "" : "s"} by name, which a production deployment of `
46
+ + `this project uses too: ${declared.join(", ")}. A declared name carries no `
47
+ + "deployment identity, so dev would write into that live state. Remove the "
48
+ + "declared name, run dev against a copy of the project, or pass "
49
+ + "--allow-declared-volumes to attach them deliberately.");
50
+ };
@@ -4,6 +4,8 @@ export * from "./buildProject.js";
4
4
  export * from "./publishProject.js";
5
5
  export * from "./upProject.js";
6
6
  export * from "./compileProject.js";
7
+ export * from "./containerBackedMountRender.js";
8
+ export * from "./deploymentLineage.js";
7
9
  export * from "./dockerBuildContext.js";
8
10
  export * from "./dockerBuildSkip.js";
9
11
  export * from "./initProject.js";
@@ -17,3 +19,4 @@ export * from "./updateProjectSurfaces.js";
17
19
  export * from "./upReceipt.js";
18
20
  export * from "./worldBindings.js";
19
21
  export * from "./view/index.js";
22
+ export * from "./training/index.js";
@@ -4,6 +4,8 @@ export * from "./buildProject.js";
4
4
  export * from "./publishProject.js";
5
5
  export * from "./upProject.js";
6
6
  export * from "./compileProject.js";
7
+ export * from "./containerBackedMountRender.js";
8
+ export * from "./deploymentLineage.js";
7
9
  export * from "./dockerBuildContext.js";
8
10
  export * from "./dockerBuildSkip.js";
9
11
  export * from "./initProject.js";
@@ -17,3 +19,4 @@ export * from "./updateProjectSurfaces.js";
17
19
  export * from "./upReceipt.js";
18
20
  export * from "./worldBindings.js";
19
21
  export * from "./view/index.js";
22
+ export * from "./training/index.js";
@@ -2,7 +2,9 @@ export interface InitProjectOptions {
2
2
  directory?: string;
3
3
  runtime?: string;
4
4
  team?: boolean;
5
+ template?: string;
5
6
  }
7
+ export declare const listInitTemplates: () => Promise<string[]>;
6
8
  export declare const initProject: (options?: InitProjectOptions) => Promise<{
7
9
  createdFiles: string[];
8
10
  directory: string;
@@ -1,9 +1,22 @@
1
1
  import path from "node:path";
2
- import { ensureDirectory, ensureGitignoreEntry, fileExists, writeUtf8File } from "../filesystem/index.js";
2
+ import { readdir } from "node:fs/promises";
3
+ import { fileURLToPath } from "node:url";
4
+ import { copyDirectory, ensureDirectory, ensureGitignoreEntry, fileExists, writeUtf8File } from "../filesystem/index.js";
3
5
  import { createTeamScaffoldManifest, renderSpawnfile } from "../manifest/index.js";
4
6
  import { getRuntimeAdapter } from "../runtime/index.js";
5
7
  import { DEFAULT_OUTPUT_DIRECTORY, SpawnfileError } from "../shared/index.js";
6
8
  const DEFAULT_AGENT_RUNTIME = "openclaw";
9
+ // Bundled example org projects double as `init --template` starting points.
10
+ // Resolves to the package's examples/ dir in both dev (src/) and the published
11
+ // package (dist/), so examples/ must ship in package.json "files".
12
+ const EXAMPLES_ROOT = fileURLToPath(new URL("../../examples", import.meta.url));
13
+ export const listInitTemplates = async () => {
14
+ const entries = await readdir(EXAMPLES_ROOT, { withFileTypes: true });
15
+ return entries
16
+ .filter((entry) => entry.isDirectory())
17
+ .map((entry) => entry.name)
18
+ .sort();
19
+ };
7
20
  export const initProject = async (options = {}) => {
8
21
  const directory = path.resolve(options.directory ?? process.cwd());
9
22
  const manifestPath = path.join(directory, "Spawnfile");
@@ -11,10 +24,35 @@ export const initProject = async (options = {}) => {
11
24
  if (await fileExists(manifestPath)) {
12
25
  throw new SpawnfileError("io_error", `Refusing to overwrite existing Spawnfile at ${manifestPath}`);
13
26
  }
27
+ if (options.template && (options.team || options.runtime)) {
28
+ throw new SpawnfileError("validation_error", "--template cannot be combined with --team or --runtime");
29
+ }
14
30
  if (options.team && options.runtime) {
15
31
  throw new SpawnfileError("validation_error", "Team scaffolds do not accept --runtime");
16
32
  }
33
+ // Resolve and validate the template before creating anything, so an unknown
34
+ // template name never leaves an empty directory behind.
35
+ let templateSource;
36
+ if (options.template) {
37
+ const templates = await listInitTemplates();
38
+ if (!templates.includes(options.template)) {
39
+ throw new SpawnfileError("validation_error", `Unknown template "${options.template}". Available templates: ${templates.join(", ")}`);
40
+ }
41
+ templateSource = path.join(EXAMPLES_ROOT, options.template);
42
+ }
17
43
  await ensureDirectory(directory);
44
+ if (templateSource) {
45
+ await copyDirectory(templateSource, directory);
46
+ await ensureGitignoreEntry(directory, `${DEFAULT_OUTPUT_DIRECTORY}/`);
47
+ // Report only the files this template contributed — never pre-existing
48
+ // contents of the target directory.
49
+ const sourceEntries = await readdir(templateSource, { recursive: true, withFileTypes: true });
50
+ const createdFiles = sourceEntries
51
+ .filter((entry) => entry.isFile())
52
+ .map((entry) => path.join(directory, path.relative(templateSource, path.join(entry.parentPath, entry.name))))
53
+ .sort();
54
+ return { createdFiles, directory };
55
+ }
18
56
  const createdFiles = [manifestPath];
19
57
  const gitignorePath = path.join(directory, ".gitignore");
20
58
  const hadGitignore = await fileExists(gitignorePath);
@@ -0,0 +1,64 @@
1
+ import type { MoltnetTargetArchitecture } from "./moltnetReleaseAuthority.js";
2
+ export interface LocalMoltnetReleaseIdentity {
3
+ readonly architecture: MoltnetTargetArchitecture;
4
+ readonly asset: string;
5
+ readonly asset_sha256: `sha256:${string}`;
6
+ readonly capabilities: readonly ["daimon-bridge", "pi-bridge"];
7
+ readonly development: Readonly<{
8
+ mode: "local-development";
9
+ non_production: true;
10
+ unsigned: true;
11
+ unpublished: true;
12
+ }>;
13
+ readonly source_sha256: `sha256:${string}`;
14
+ readonly source_inputs?: Readonly<{
15
+ dependencies_sha256: `sha256:${string}`;
16
+ mode: "source-bundle";
17
+ source_sha256: `sha256:${string}`;
18
+ toolchain: string;
19
+ }>;
20
+ readonly version: "spawnfile.moltnet-release-identity.v1";
21
+ }
22
+ interface LocalMoltnetReleaseStamp {
23
+ readonly arch: MoltnetTargetArchitecture;
24
+ readonly asset: string;
25
+ readonly capabilities: readonly ["daimon-bridge", "pi-bridge"];
26
+ readonly development: LocalMoltnetReleaseIdentity["development"];
27
+ readonly sha256: string;
28
+ readonly source_sha256: `sha256:${string}`;
29
+ readonly source_inputs?: LocalMoltnetReleaseIdentity["source_inputs"];
30
+ readonly stamp_version: "spawnfile.local-moltnet-release-stamp.v1";
31
+ }
32
+ /** @internal Complete synthetic bridge contract used by local artifact verification. */
33
+ export declare const createLocalMoltnetBridgeProbeConfig: (kind: "daimon" | "pi", directory: string) => string;
34
+ /** @internal Strict parser shared with provenance regression tests. */
35
+ export declare const parseLocalReleaseStamp: (raw: string, architecture: MoltnetTargetArchitecture) => LocalMoltnetReleaseStamp;
36
+ /**
37
+ * The platform actually executing this compile -- never the build target.
38
+ *
39
+ * `architecture` is absent when the host CPU is one Spawnfile cannot name as a
40
+ * Moltnet target (so it can never accidentally equal one), and `platform` is a
41
+ * raw `process.platform`.
42
+ */
43
+ export interface MoltnetExecutionHost {
44
+ readonly architecture?: MoltnetTargetArchitecture;
45
+ readonly platform: NodeJS.Platform;
46
+ }
47
+ /**
48
+ * Whether this host can run the built binary directly, deciding between the
49
+ * direct-exec probe and the Docker cross-platform probe below.
50
+ *
51
+ * A local Moltnet build is ALWAYS `GOOS=linux` (the asset is
52
+ * `moltnet_linux_<arch>.tar.gz`), so matching the architecture alone is not
53
+ * enough: a darwin/arm64 host and a linux/arm64 binary share a CPU
54
+ * architecture and share nothing else. Executing that ELF on macOS fails with
55
+ * ENOEXEC and the probe reports the binary as unprovable, rejecting a
56
+ * perfectly good build. The host must therefore match on OS *and*
57
+ * architecture; everything else goes through Docker, which can run a
58
+ * linux/<arch> image anywhere.
59
+ *
60
+ * @internal Exported for the branch-selection tests.
61
+ */
62
+ export declare const moltnetBinaryIsDirectlyExecutable: (architecture: MoltnetTargetArchitecture, host: MoltnetExecutionHost) => boolean;
63
+ export declare const readLocalMoltnetReleaseIdentity: (releaseDirectory: string, architecture: MoltnetTargetArchitecture, host: MoltnetExecutionHost) => Promise<LocalMoltnetReleaseIdentity>;
64
+ export {};
@@ -0,0 +1,177 @@
1
+ import { execFile as execFileCallback } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import path from "node:path";
4
+ import { chmod, readFile, rm, writeFile } from "node:fs/promises";
5
+ import { promisify } from "node:util";
6
+ import { ensureDirectory, fileExists } from "../filesystem/index.js";
7
+ import { SpawnfileError } from "../shared/index.js";
8
+ const execFile = promisify(execFileCallback);
9
+ const SHA256 = /^[a-f0-9]{64}$/u;
10
+ const exactKeys = (value, keys) => Object.keys(value).sort().join("\0") === [...keys].sort().join("\0");
11
+ const assetName = (architecture) => `moltnet_linux_${architecture}.tar.gz`;
12
+ /** @internal Complete synthetic bridge contract used by local artifact verification. */
13
+ export const createLocalMoltnetBridgeProbeConfig = (kind, directory) => JSON.stringify({
14
+ attachments: [{
15
+ agent: { id: `${kind}-capability-probe`, name: `${kind} capability probe` },
16
+ runtime: kind === "daimon"
17
+ ? {
18
+ control_url: "http://127.0.0.1:9",
19
+ kind,
20
+ receipt_store_path: path.join(directory, "daimon-receipts", "daimon-capability-probe.json"),
21
+ token_env: "SPAWNFILE_DAIMON_CONTROL_TOKEN"
22
+ }
23
+ : { control_url: "http://127.0.0.1:9/agents/pi-capability-probe/wake", kind }
24
+ }],
25
+ moltnet: { base_url: "http://127.0.0.1:9", network_id: "capability-probe" },
26
+ version: "moltnet.node.v1"
27
+ });
28
+ const assertBridgeCapability = async (binaryPath, directory, kind) => {
29
+ const configPath = path.join(directory, `${kind}-bridge-probe.json`);
30
+ const receiptDirectory = path.join(directory, "daimon-receipts");
31
+ await ensureDirectory(receiptDirectory);
32
+ await chmod(receiptDirectory, 0o700);
33
+ await writeFile(configPath, createLocalMoltnetBridgeProbeConfig(kind, directory), { mode: 0o600 });
34
+ try {
35
+ await execFile(binaryPath, ["node", configPath], {
36
+ env: { ...process.env, SPAWNFILE_DAIMON_CONTROL_TOKEN: "capability-probe" },
37
+ timeout: 1_000
38
+ });
39
+ throw new SpawnfileError("compile_error", `Local Moltnet binary exited before proving its ${kind}-bridge capability`);
40
+ }
41
+ catch (error) {
42
+ if (error instanceof SpawnfileError)
43
+ throw error;
44
+ const execution = error;
45
+ const output = `${String(execution.stdout ?? "")}\n${String(execution.stderr ?? "")}`;
46
+ if (/unsupported|only supported|required|invalid|unknown runtime/i.test(output)) {
47
+ throw new SpawnfileError("compile_error", `Local Moltnet binary does not accept ${kind}-bridge configuration`);
48
+ }
49
+ if (execution.killed === true || execution.signal === "SIGTERM" || execution.code === "ETIMEDOUT")
50
+ return;
51
+ if (/connection refused|connect:|dial tcp|network is unreachable/i.test(output))
52
+ return;
53
+ throw new SpawnfileError("compile_error", `Local Moltnet binary could not prove its ${kind}-bridge capability`);
54
+ }
55
+ };
56
+ /** @internal Strict parser shared with provenance regression tests. */
57
+ export const parseLocalReleaseStamp = (raw, architecture) => {
58
+ let parsed;
59
+ try {
60
+ parsed = JSON.parse(raw);
61
+ }
62
+ catch {
63
+ throw new SpawnfileError("compile_error", "Local Moltnet release stamp is not valid JSON");
64
+ }
65
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
66
+ throw new SpawnfileError("compile_error", "Local Moltnet release stamp has an invalid shape");
67
+ }
68
+ const value = parsed;
69
+ const development = value.development;
70
+ const sourceInputs = value.source_inputs;
71
+ if (!exactKeys(value, ["arch", "asset", "capabilities", "development", "sha256", "source_sha256", "stamp_version", ...(sourceInputs ? ["source_inputs"] : [])])
72
+ || value.stamp_version !== "spawnfile.local-moltnet-release-stamp.v1"
73
+ || value.arch !== architecture
74
+ || value.asset !== assetName(architecture)
75
+ || !Array.isArray(value.capabilities)
76
+ || value.capabilities.join("\0") !== "daimon-bridge\0pi-bridge"
77
+ || !development
78
+ || !exactKeys(development, ["mode", "non_production", "unsigned", "unpublished"])
79
+ || development.mode !== "local-development"
80
+ || development.non_production !== true
81
+ || development.unsigned !== true
82
+ || development.unpublished !== true
83
+ || typeof value.sha256 !== "string"
84
+ || !SHA256.test(value.sha256)
85
+ || typeof value.source_sha256 !== "string"
86
+ || !/^sha256:[a-f0-9]{64}$/u.test(value.source_sha256)
87
+ || (sourceInputs && (!exactKeys(sourceInputs, ["dependencies_sha256", "mode", "source_sha256", "toolchain"]) || sourceInputs.mode !== "source-bundle" || !/^sha256:[a-f0-9]{64}$/u.test(String(sourceInputs.dependencies_sha256)) || sourceInputs.source_sha256 !== value.source_sha256 || sourceInputs.toolchain !== "golang:1.24-bookworm@sha256:1a6d4452c65dea36aac2e2d606b01b4a029ec90cc1ae53890540ce6173ea77ac"))) {
88
+ throw new SpawnfileError("compile_error", "Local Moltnet release stamp must be a complete development-only dual-bridge identity");
89
+ }
90
+ return value;
91
+ };
92
+ /**
93
+ * Whether this host can run the built binary directly, deciding between the
94
+ * direct-exec probe and the Docker cross-platform probe below.
95
+ *
96
+ * A local Moltnet build is ALWAYS `GOOS=linux` (the asset is
97
+ * `moltnet_linux_<arch>.tar.gz`), so matching the architecture alone is not
98
+ * enough: a darwin/arm64 host and a linux/arm64 binary share a CPU
99
+ * architecture and share nothing else. Executing that ELF on macOS fails with
100
+ * ENOEXEC and the probe reports the binary as unprovable, rejecting a
101
+ * perfectly good build. The host must therefore match on OS *and*
102
+ * architecture; everything else goes through Docker, which can run a
103
+ * linux/<arch> image anywhere.
104
+ *
105
+ * @internal Exported for the branch-selection tests.
106
+ */
107
+ export const moltnetBinaryIsDirectlyExecutable = (architecture, host) => host.platform === "linux" && host.architecture === architecture;
108
+ const verifyBuiltMoltnetArchive = async (releaseAssetPath, architecture, host) => {
109
+ const temporaryDirectory = path.join(path.dirname(releaseAssetPath), `.spawnfile-moltnet-verify-${process.pid}-${Date.now()}`);
110
+ try {
111
+ await ensureDirectory(temporaryDirectory);
112
+ await execFile("tar", ["-C", temporaryDirectory, "-xzf", releaseAssetPath]);
113
+ const binaryPath = path.join(temporaryDirectory, "moltnet");
114
+ if (!(await fileExists(binaryPath))) {
115
+ throw new SpawnfileError("compile_error", "Local Moltnet archive does not contain its moltnet binary");
116
+ }
117
+ await chmod(binaryPath, 0o755);
118
+ if (moltnetBinaryIsDirectlyExecutable(architecture, host)) {
119
+ const { stdout } = await execFile(binaryPath, ["version"]);
120
+ if (!stdout.trim())
121
+ throw new SpawnfileError("compile_error", "Local Moltnet binary did not produce a bounded version identity");
122
+ await assertBridgeCapability(binaryPath, temporaryDirectory, "pi");
123
+ await assertBridgeCapability(binaryPath, temporaryDirectory, "daimon");
124
+ }
125
+ else {
126
+ for (const kind of ["pi", "daimon"]) {
127
+ const configPath = path.join(temporaryDirectory, `${kind}-docker-probe.json`);
128
+ await writeFile(configPath, createLocalMoltnetBridgeProbeConfig(kind, "/receipts"));
129
+ const { stdout: rawId } = await execFile("docker", ["create", "--platform", `linux/${architecture}`, "--env", "SPAWNFILE_DAIMON_CONTROL_TOKEN=probe", "node:24-bookworm-slim@sha256:a9f5f7c91a432850b2a8a7797adf5eadb6c733ceed61167806cee7ea7fbc29df", "timeout", "2", "/moltnet", "node", "/config.json"]);
130
+ const id = rawId.trim();
131
+ try {
132
+ await execFile("docker", ["cp", binaryPath, `${id}:/moltnet`]);
133
+ await execFile("docker", ["cp", configPath, `${id}:/config.json`]);
134
+ try {
135
+ await execFile("docker", ["start", "--attach", id]);
136
+ }
137
+ catch (error) {
138
+ const result = error;
139
+ const output = `${String(result.stdout ?? "")}\n${String(result.stderr ?? "")}`;
140
+ if (result.code !== 124 && !/connection refused|connect:|dial tcp|network is unreachable/iu.test(output))
141
+ throw new SpawnfileError("compile_error", `Local Moltnet cross-host ${kind} capability probe failed`);
142
+ }
143
+ }
144
+ finally {
145
+ await execFile("docker", ["rm", "--force", id]);
146
+ }
147
+ }
148
+ }
149
+ }
150
+ finally {
151
+ await rm(temporaryDirectory, { force: true, recursive: true });
152
+ }
153
+ };
154
+ export const readLocalMoltnetReleaseIdentity = async (releaseDirectory, architecture, host) => {
155
+ const asset = assetName(architecture);
156
+ const assetPath = path.join(releaseDirectory, asset);
157
+ const stampPath = path.join(releaseDirectory, `local_moltnet_release_stamp_${architecture}.json`);
158
+ if (!(await fileExists(assetPath)) || !(await fileExists(stampPath))) {
159
+ throw new SpawnfileError("compile_error", "Local Moltnet release requires its exact archive and development identity stamp");
160
+ }
161
+ const stamp = parseLocalReleaseStamp(await readFile(stampPath, "utf8"), architecture);
162
+ const sha256 = createHash("sha256").update(await readFile(assetPath)).digest("hex");
163
+ if (stamp.sha256 !== sha256) {
164
+ throw new SpawnfileError("compile_error", "Local Moltnet development stamp does not match its archive bytes");
165
+ }
166
+ await verifyBuiltMoltnetArchive(assetPath, architecture, host);
167
+ return Object.freeze({
168
+ architecture,
169
+ asset,
170
+ asset_sha256: `sha256:${sha256}`,
171
+ capabilities: Object.freeze(["daimon-bridge", "pi-bridge"]),
172
+ development: Object.freeze({ mode: "local-development", non_production: true, unsigned: true, unpublished: true }),
173
+ source_sha256: stamp.source_sha256,
174
+ ...(stamp.source_inputs ? { source_inputs: Object.freeze(stamp.source_inputs) } : {}),
175
+ version: "spawnfile.moltnet-release-identity.v1"
176
+ });
177
+ };
@@ -22,5 +22,5 @@ export interface MemoryArtifactBundle {
22
22
  mounts: ContainerPersistentMountReport[];
23
23
  memories: MemoryArtifactSummary[];
24
24
  }
25
- export declare const createMemoryArtifactBundle: (plan: CompilePlan) => MemoryArtifactBundle;
25
+ export declare const createMemoryArtifactBundle: (plan: CompilePlan, deploymentLineage?: string) => MemoryArtifactBundle;
26
26
  export {};