spawnfile 0.1.13 → 0.1.14

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 (598) hide show
  1. package/README.md +50 -11
  2. package/dist/audit/auditCli.d.ts +19 -0
  3. package/dist/audit/auditCli.js +63 -0
  4. package/dist/audit/checks.d.ts +100 -0
  5. package/dist/audit/checks.js +279 -0
  6. package/dist/audit/checksShared.d.ts +74 -0
  7. package/dist/audit/checksShared.js +37 -0
  8. package/dist/audit/generateAudit.d.ts +19 -0
  9. package/dist/audit/generateAudit.js +122 -0
  10. package/dist/audit/index.d.ts +4 -0
  11. package/dist/audit/index.js +4 -0
  12. package/dist/audit/readAudit.d.ts +50 -0
  13. package/dist/audit/readAudit.js +59 -0
  14. package/dist/audit/types.d.ts +40 -0
  15. package/dist/audit/types.js +8 -0
  16. package/dist/auth/credentialEnvFile.d.ts +11 -0
  17. package/dist/auth/credentialEnvFile.js +60 -0
  18. package/dist/auth/credentialProvisioning.d.ts +15 -0
  19. package/dist/auth/credentialProvisioning.js +75 -0
  20. package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
  21. package/dist/auth/credentialProvisioningReceipt.js +70 -0
  22. package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
  23. package/dist/auth/credentialProvisioningRequest.js +169 -0
  24. package/dist/auth/credentialWorldBindings.d.ts +21 -0
  25. package/dist/auth/credentialWorldBindings.js +104 -0
  26. package/dist/auth/index.d.ts +7 -0
  27. package/dist/auth/index.js +7 -0
  28. package/dist/auth/paths.d.ts +11 -0
  29. package/dist/auth/paths.js +21 -0
  30. package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
  31. package/dist/auth/targetSecretSourceAuthor.js +52 -0
  32. package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
  33. package/dist/auth/targetSecretSourceFsPublish.js +49 -0
  34. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
  35. package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
  36. package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
  37. package/dist/auth/targetSecretSourceFsRead.js +198 -0
  38. package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
  39. package/dist/auth/targetSecretSourceGrant.js +99 -0
  40. package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
  41. package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
  42. package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
  43. package/dist/auth/targetSecretSourceLifecycle.js +52 -0
  44. package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
  45. package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
  46. package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
  47. package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
  48. package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
  49. package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
  50. package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
  51. package/dist/auth/targetSecretSourceResolver.js +137 -0
  52. package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
  53. package/dist/auth/targetSecretSourceRevoke.js +92 -0
  54. package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
  55. package/dist/auth/targetSecretSourceRotate.js +121 -0
  56. package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
  57. package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
  58. package/dist/cli/artifactsCommands.d.ts +27 -0
  59. package/dist/cli/artifactsCommands.js +132 -0
  60. package/dist/cli/authCommands.d.ts +5 -0
  61. package/dist/cli/authCommands.js +221 -0
  62. package/dist/cli/compileBuildCommands.d.ts +3 -0
  63. package/dist/cli/compileBuildCommands.js +35 -0
  64. package/dist/cli/containerBundleCommand.d.ts +6 -0
  65. package/dist/cli/containerBundleCommand.js +116 -0
  66. package/dist/cli/downCommand.d.ts +25 -0
  67. package/dist/cli/downCommand.js +134 -0
  68. package/dist/cli/index.js +6 -3
  69. package/dist/cli/lifecycleCommands.d.ts +1 -1
  70. package/dist/cli/lifecycleCommands.js +11 -181
  71. package/dist/cli/lifecycleMachine.d.ts +19 -0
  72. package/dist/cli/lifecycleMachine.js +78 -0
  73. package/dist/cli/lifecyclePlan.d.ts +35 -0
  74. package/dist/cli/lifecyclePlan.js +240 -0
  75. package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
  76. package/dist/cli/lifecyclePlanningCommands.js +30 -0
  77. package/dist/cli/runCli.d.ts +9 -2
  78. package/dist/cli/runCli.js +27 -71
  79. package/dist/cli/runPublishCommands.d.ts +3 -0
  80. package/dist/cli/runPublishCommands.js +70 -0
  81. package/dist/cli/statusCommand.d.ts +3 -33
  82. package/dist/cli/statusCommand.js +19 -249
  83. package/dist/cli/statusCommandLive.d.ts +20 -0
  84. package/dist/cli/statusCommandLive.js +188 -0
  85. package/dist/cli/statusCommandOptions.d.ts +40 -0
  86. package/dist/cli/statusCommandOptions.js +42 -0
  87. package/dist/cli/targetCliRoute.d.ts +2 -0
  88. package/dist/cli/targetCliRoute.js +30 -0
  89. package/dist/cli/targetCommands.d.ts +33 -0
  90. package/dist/cli/targetCommands.js +257 -0
  91. package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
  92. package/dist/cli/targetComposedPreparationCommand.js +39 -0
  93. package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
  94. package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
  95. package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
  96. package/dist/cli/targetDefaultAuthorities.js +210 -0
  97. package/dist/cli/targetDefaultConfig.d.ts +68 -0
  98. package/dist/cli/targetDefaultConfig.js +317 -0
  99. package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
  100. package/dist/cli/targetDefaultConfigStdin.js +215 -0
  101. package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
  102. package/dist/cli/targetDefaultEnvelope.js +13 -0
  103. package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
  104. package/dist/cli/targetDefaultHandlerFactory.js +247 -0
  105. package/dist/cli/targetDefaultHandlers.d.ts +21 -0
  106. package/dist/cli/targetDefaultHandlers.js +72 -0
  107. package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
  108. package/dist/cli/targetDefaultJournalAuthority.js +135 -0
  109. package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
  110. package/dist/cli/targetDefaultWorldClock.js +14 -0
  111. package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
  112. package/dist/cli/targetDefaultWorldQueries.js +11 -0
  113. package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
  114. package/dist/cli/targetDefaultWorldReadiness.js +17 -0
  115. package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
  116. package/dist/cli/targetEvidenceHelperResolution.js +23 -0
  117. package/dist/cli/targetLookupCli.d.ts +3 -0
  118. package/dist/cli/targetLookupCli.js +31 -0
  119. package/dist/cli/targetLookupCommands.d.ts +12 -0
  120. package/dist/cli/targetLookupCommands.js +69 -0
  121. package/dist/cli/targetOperationDispatch.d.ts +58 -0
  122. package/dist/cli/targetOperationDispatch.js +21 -0
  123. package/dist/cli/targetReceiptOutput.d.ts +14 -0
  124. package/dist/cli/targetReceiptOutput.js +21 -0
  125. package/dist/cli/targetRequestFile.d.ts +14 -0
  126. package/dist/cli/targetRequestFile.js +63 -0
  127. package/dist/cli/targetSecretSourceInput.d.ts +28 -0
  128. package/dist/cli/targetSecretSourceInput.js +121 -0
  129. package/dist/cli/targetWorldClockCommand.d.ts +10 -0
  130. package/dist/cli/targetWorldClockCommand.js +42 -0
  131. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
  132. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
  133. package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
  134. package/dist/cli/targetWorldReadinessCommand.js +43 -0
  135. package/dist/cli/upCommand.d.ts +3 -0
  136. package/dist/cli/upCommand.js +133 -0
  137. package/dist/cli/upImageCommand.d.ts +11 -0
  138. package/dist/cli/upImageCommand.js +41 -0
  139. package/dist/cli/upLifecycleInvocation.d.ts +41 -0
  140. package/dist/cli/upLifecycleInvocation.js +48 -0
  141. package/dist/cli/upLifecycleRecovery.d.ts +4 -0
  142. package/dist/cli/upLifecycleRecovery.js +53 -0
  143. package/dist/compiler/agentNodeMerge.d.ts +2 -0
  144. package/dist/compiler/agentNodeMerge.js +79 -0
  145. package/dist/compiler/agentSurfaces.js +11 -1
  146. package/dist/compiler/buildCompilePlan.js +17 -0
  147. package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
  148. package/dist/compiler/buildCompilePlanAgent.js +56 -0
  149. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
  150. package/dist/compiler/buildCompilePlanTeams.js +4 -1
  151. package/dist/compiler/buildCompilePlanTraversal.js +75 -82
  152. package/dist/compiler/buildProject.d.ts +11 -0
  153. package/dist/compiler/buildProject.js +77 -2
  154. package/dist/compiler/compilePlanHelpers.js +2 -0
  155. package/dist/compiler/compileProject.d.ts +13 -0
  156. package/dist/compiler/compileProject.js +26 -74
  157. package/dist/compiler/compileProjectPolicy.d.ts +5 -0
  158. package/dist/compiler/compileProjectPolicy.js +21 -0
  159. package/dist/compiler/compileProjectReports.d.ts +9 -0
  160. package/dist/compiler/compileProjectReports.js +52 -0
  161. package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
  162. package/dist/compiler/containerArtifactSummaries.js +138 -0
  163. package/dist/compiler/containerArtifacts.d.ts +10 -0
  164. package/dist/compiler/containerArtifacts.js +126 -125
  165. package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
  166. package/dist/compiler/containerArtifactsPlans.js +31 -118
  167. package/dist/compiler/containerArtifactsRender.d.ts +3 -1
  168. package/dist/compiler/containerArtifactsRender.js +15 -12
  169. package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
  170. package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
  171. package/dist/compiler/containerConfigEnvRender.js +54 -0
  172. package/dist/compiler/containerEntrypointRender.d.ts +1 -0
  173. package/dist/compiler/containerEntrypointRender.js +56 -52
  174. package/dist/compiler/containerEntrypointShell.d.ts +5 -0
  175. package/dist/compiler/containerEntrypointShell.js +29 -0
  176. package/dist/compiler/containerPackageOverrides.d.ts +27 -0
  177. package/dist/compiler/containerPackageOverrides.js +63 -0
  178. package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
  179. package/dist/compiler/containerTargetPlanResolution.js +97 -0
  180. package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
  181. package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
  182. package/dist/compiler/dockerBuildContext.d.ts +16 -0
  183. package/dist/compiler/dockerBuildContext.js +159 -0
  184. package/dist/compiler/dockerBuildSkip.d.ts +30 -0
  185. package/dist/compiler/dockerBuildSkip.js +81 -0
  186. package/dist/compiler/index.d.ts +4 -0
  187. package/dist/compiler/index.js +4 -0
  188. package/dist/compiler/memoryArtifacts.d.ts +26 -0
  189. package/dist/compiler/memoryArtifacts.js +134 -0
  190. package/dist/compiler/memoryResolution.d.ts +4 -0
  191. package/dist/compiler/memoryResolution.js +147 -0
  192. package/dist/compiler/modelEnv.d.ts +2 -0
  193. package/dist/compiler/modelEnv.js +6 -0
  194. package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
  195. package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
  196. package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
  197. package/dist/compiler/moltnetArtifactPaths.js +49 -0
  198. package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
  199. package/dist/compiler/moltnetArtifactTypes.js +1 -0
  200. package/dist/compiler/moltnetArtifacts.d.ts +2 -40
  201. package/dist/compiler/moltnetArtifacts.js +43 -97
  202. package/dist/compiler/moltnetBinaries.d.ts +21 -4
  203. package/dist/compiler/moltnetBinaries.js +134 -27
  204. package/dist/compiler/moltnetClientConfig.js +7 -2
  205. package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
  206. package/dist/compiler/moltnetConfigLowering.js +67 -5
  207. package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
  208. package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
  209. package/dist/compiler/moltnetNodeConfig.js +7 -2
  210. package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
  211. package/dist/compiler/moltnetReleaseAuthority.js +73 -0
  212. package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
  213. package/dist/compiler/moltnetReleaseDownload.js +85 -0
  214. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
  215. package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
  216. package/dist/compiler/moltnetResolution.js +72 -20
  217. package/dist/compiler/moltnetRoomMemberships.js +37 -9
  218. package/dist/compiler/moltnetServerPlans.d.ts +9 -0
  219. package/dist/compiler/moltnetServerPlans.js +132 -0
  220. package/dist/compiler/organizationIdentity.d.ts +27 -0
  221. package/dist/compiler/organizationIdentity.js +297 -0
  222. package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
  223. package/dist/compiler/organizationReadyEvidence.js +261 -0
  224. package/dist/compiler/projectManifestGraph.d.ts +4 -0
  225. package/dist/compiler/projectManifestGraph.js +24 -0
  226. package/dist/compiler/runProject.d.ts +4 -0
  227. package/dist/compiler/runProject.js +30 -21
  228. package/dist/compiler/runProjectAuth.d.ts +7 -1
  229. package/dist/compiler/runProjectAuth.js +87 -9
  230. package/dist/compiler/runProjectDocker.d.ts +7 -0
  231. package/dist/compiler/runProjectDocker.js +31 -8
  232. package/dist/compiler/runProjectLifecycle.d.ts +7 -0
  233. package/dist/compiler/runProjectLifecycle.js +40 -0
  234. package/dist/compiler/syncProjectAuth.js +4 -1
  235. package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
  236. package/dist/compiler/teamContextActiveEnvironments.js +255 -0
  237. package/dist/compiler/teamContextSupport.js +32 -40
  238. package/dist/compiler/teamContextTypes.d.ts +2 -0
  239. package/dist/compiler/types.d.ts +82 -1
  240. package/dist/compiler/upProject.d.ts +5 -0
  241. package/dist/compiler/upProject.js +256 -20
  242. package/dist/compiler/upReceipt.d.ts +36 -0
  243. package/dist/compiler/upReceipt.js +82 -0
  244. package/dist/compiler/updateProjectModels.js +42 -60
  245. package/dist/compiler/updateProjectRuntime.js +22 -35
  246. package/dist/compiler/updateProjectSurfaces.js +53 -47
  247. package/dist/compiler/worldBindings.d.ts +39 -0
  248. package/dist/compiler/worldBindings.js +247 -0
  249. package/dist/compiler/worldBindingsFile.d.ts +5 -0
  250. package/dist/compiler/worldBindingsFile.js +162 -0
  251. package/dist/deployment/artifactsExport.d.ts +49 -0
  252. package/dist/deployment/artifactsExport.js +217 -0
  253. package/dist/deployment/artifactsExportDocker.d.ts +48 -0
  254. package/dist/deployment/artifactsExportDocker.js +91 -0
  255. package/dist/deployment/artifactsExportPlan.d.ts +24 -0
  256. package/dist/deployment/artifactsExportPlan.js +135 -0
  257. package/dist/deployment/artifactsExportTypes.d.ts +50 -0
  258. package/dist/deployment/artifactsExportTypes.js +52 -0
  259. package/dist/deployment/buildImageCacheStore.d.ts +23 -0
  260. package/dist/deployment/buildImageCacheStore.js +54 -0
  261. package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
  262. package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
  263. package/dist/deployment/dockerInspect.d.ts +9 -0
  264. package/dist/deployment/dockerInspect.js +24 -1
  265. package/dist/deployment/dockerLabels.d.ts +2 -0
  266. package/dist/deployment/dockerLabels.js +2 -0
  267. package/dist/deployment/dockerLogs.js +2 -10
  268. package/dist/deployment/dockerManager.d.ts +51 -0
  269. package/dist/deployment/dockerManager.js +118 -1
  270. package/dist/deployment/dockerProbeGateway.js +64 -5
  271. package/dist/deployment/dockerRecover.js +9 -1
  272. package/dist/deployment/dockerTeardown.d.ts +32 -0
  273. package/dist/deployment/dockerTeardown.js +61 -0
  274. package/dist/deployment/downDeployment.d.ts +34 -0
  275. package/dist/deployment/downDeployment.js +147 -0
  276. package/dist/deployment/downReceiptTypes.d.ts +21 -0
  277. package/dist/deployment/downReceiptTypes.js +30 -0
  278. package/dist/deployment/index.d.ts +16 -0
  279. package/dist/deployment/index.js +17 -0
  280. package/dist/deployment/lifecycleCompletion.d.ts +37 -0
  281. package/dist/deployment/lifecycleCompletion.js +236 -0
  282. package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
  283. package/dist/deployment/lifecycleCompletionContracts.js +106 -0
  284. package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
  285. package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
  286. package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
  287. package/dist/deployment/lifecycleCompletionLookup.js +88 -0
  288. package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
  289. package/dist/deployment/lifecycleCompletionOwner.js +31 -0
  290. package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
  291. package/dist/deployment/lifecycleCompletionParsing.js +108 -0
  292. package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
  293. package/dist/deployment/lifecycleCompletionPaths.js +16 -0
  294. package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
  295. package/dist/deployment/lifecycleCompletionPublication.js +35 -0
  296. package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
  297. package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
  298. package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
  299. package/dist/deployment/lifecycleCompletionRoot.js +243 -0
  300. package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
  301. package/dist/deployment/lifecycleCompletionStore.js +151 -0
  302. package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
  303. package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
  304. package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
  305. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
  306. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
  307. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
  308. package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
  309. package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
  310. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
  311. package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
  312. package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
  313. package/dist/deployment/organizationHandoffTypes.js +80 -0
  314. package/dist/deployment/organizationReady.d.ts +52 -0
  315. package/dist/deployment/organizationReady.js +200 -0
  316. package/dist/deployment/privateArtifactsExport.d.ts +18 -0
  317. package/dist/deployment/privateArtifactsExport.js +80 -0
  318. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
  319. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
  320. package/dist/deployment/record.d.ts +26 -1
  321. package/dist/deployment/record.js +49 -4
  322. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
  323. package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
  324. package/dist/deployment/target.d.ts +1 -35
  325. package/dist/deployment/target.js +1 -96
  326. package/dist/deployment/upReceiptTypes.d.ts +111 -0
  327. package/dist/deployment/upReceiptTypes.js +164 -0
  328. package/dist/dev/project.js +15 -9
  329. package/dist/distribution/buildDistributionReport.d.ts +2 -1
  330. package/dist/distribution/buildDistributionReport.js +2 -1
  331. package/dist/distribution/distributionReportSchema.d.ts +5 -0
  332. package/dist/distribution/distributionReportSchema.js +7 -2
  333. package/dist/distribution/index.d.ts +2 -2
  334. package/dist/distribution/index.js +1 -1
  335. package/dist/distribution/types.d.ts +7 -0
  336. package/dist/distribution/types.js +1 -0
  337. package/dist/filesystem/paths.js +10 -1
  338. package/dist/ledger/causalConformanceCli.d.ts +1 -0
  339. package/dist/ledger/causalConformanceCli.js +41 -0
  340. package/dist/ledger/causeNamespace.d.ts +8 -0
  341. package/dist/ledger/causeNamespace.js +24 -0
  342. package/dist/ledger/conformance.d.ts +83 -0
  343. package/dist/ledger/conformance.js +259 -0
  344. package/dist/ledger/emitters.d.ts +76 -0
  345. package/dist/ledger/emitters.js +188 -0
  346. package/dist/ledger/index.d.ts +4 -0
  347. package/dist/ledger/index.js +4 -0
  348. package/dist/ledger/principal.d.ts +96 -0
  349. package/dist/ledger/principal.js +121 -0
  350. package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
  351. package/dist/manifest/externalParticipantSchemas.js +17 -0
  352. package/dist/manifest/index.d.ts +1 -0
  353. package/dist/manifest/index.js +1 -0
  354. package/dist/manifest/inlineAgentMember.d.ts +2 -0
  355. package/dist/manifest/inlineAgentMember.js +9 -0
  356. package/dist/manifest/loadManifest.js +14 -8
  357. package/dist/manifest/mcpSchemas.d.ts +17 -0
  358. package/dist/manifest/mcpSchemas.js +41 -0
  359. package/dist/manifest/memorySchemas.d.ts +245 -0
  360. package/dist/manifest/memorySchemas.js +148 -0
  361. package/dist/manifest/renderSpawnfile.js +22 -131
  362. package/dist/manifest/renderSpawnfileNetworks.js +9 -2
  363. package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
  364. package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
  365. package/dist/manifest/schemas.d.ts +1868 -99
  366. package/dist/manifest/schemas.js +78 -32
  367. package/dist/manifest/surfaceSchemas.d.ts +17 -0
  368. package/dist/manifest/surfaceSchemas.js +24 -1
  369. package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
  370. package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
  371. package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
  372. package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
  373. package/dist/manifest/teamNetworkSchemas.js +3 -317
  374. package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
  375. package/dist/manifest/teamNetworkServerSchemas.js +199 -0
  376. package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
  377. package/dist/ownership/siblingBuildFreshness.js +20 -0
  378. package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
  379. package/dist/ownership/simfileRunOperatorInputs.js +139 -0
  380. package/dist/report/types.d.ts +142 -0
  381. package/dist/runtime/common.d.ts +35 -0
  382. package/dist/runtime/common.js +55 -0
  383. package/dist/runtime/container.d.ts +28 -1
  384. package/dist/runtime/container.js +38 -5
  385. package/dist/runtime/containerPackageOverrides.d.ts +37 -0
  386. package/dist/runtime/containerPackageOverrides.js +33 -0
  387. package/dist/runtime/index.d.ts +2 -0
  388. package/dist/runtime/index.js +2 -0
  389. package/dist/runtime/mnemeMcp.d.ts +15 -0
  390. package/dist/runtime/mnemeMcp.js +109 -0
  391. package/dist/runtime/openclaw/adapter.js +15 -4
  392. package/dist/runtime/openclaw/mcp.d.ts +10 -0
  393. package/dist/runtime/openclaw/mcp.js +69 -0
  394. package/dist/runtime/openclaw/runAuth.js +2 -2
  395. package/dist/runtime/openclaw/scaffold.js +1 -1
  396. package/dist/runtime/openclaw/schedules.d.ts +38 -0
  397. package/dist/runtime/openclaw/schedules.js +74 -0
  398. package/dist/runtime/pi/adapter.d.ts +1 -1
  399. package/dist/runtime/pi/adapter.js +86 -53
  400. package/dist/runtime/pi/appActivitySource.js +114 -2
  401. package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
  402. package/dist/runtime/pi/appAgentConfig.js +264 -0
  403. package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
  404. package/dist/runtime/pi/appCliEnginesSource.js +183 -0
  405. package/dist/runtime/pi/appCliSource.d.ts +1 -0
  406. package/dist/runtime/pi/appCliSource.js +353 -0
  407. package/dist/runtime/pi/appControlSource.d.ts +1 -0
  408. package/dist/runtime/pi/appControlSource.js +390 -0
  409. package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
  410. package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
  411. package/dist/runtime/pi/appCoreSource.d.ts +4 -1
  412. package/dist/runtime/pi/appCoreSource.js +104 -214
  413. package/dist/runtime/pi/appPreludeSource.js +140 -52
  414. package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
  415. package/dist/runtime/pi/appScheduleSource.js +80 -0
  416. package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
  417. package/dist/runtime/pi/appScriptedEngine.js +42 -0
  418. package/dist/runtime/pi/appSource.d.ts +4 -1
  419. package/dist/runtime/pi/appSource.js +6 -2
  420. package/dist/runtime/pi/appTemplate.d.ts +8 -22
  421. package/dist/runtime/pi/appTemplate.js +9 -126
  422. package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
  423. package/dist/runtime/pi/appTemplateTypes.js +18 -0
  424. package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
  425. package/dist/runtime/pi/appWakeContextSource.js +398 -0
  426. package/dist/runtime/pi/containerTargets.d.ts +4 -0
  427. package/dist/runtime/pi/containerTargets.js +57 -0
  428. package/dist/runtime/pi/runAuth.js +126 -9
  429. package/dist/runtime/pi/testHelpers.d.ts +2 -0
  430. package/dist/runtime/pi/testHelpers.js +40 -0
  431. package/dist/runtime/picoclaw/adapter.js +23 -27
  432. package/dist/runtime/picoclaw/mcp.d.ts +4 -0
  433. package/dist/runtime/picoclaw/mcp.js +43 -0
  434. package/dist/runtime/picoclaw/memory.d.ts +7 -0
  435. package/dist/runtime/picoclaw/memory.js +17 -0
  436. package/dist/runtime/picoclaw/runAuth.js +1 -1
  437. package/dist/runtime/picoclaw/scaffold.js +1 -1
  438. package/dist/runtime/picoclaw/schedules.d.ts +26 -0
  439. package/dist/runtime/picoclaw/schedules.js +62 -3
  440. package/dist/runtime/scheduleUtils.d.ts +2 -0
  441. package/dist/runtime/scheduleUtils.js +15 -0
  442. package/dist/runtime/types.d.ts +25 -2
  443. package/dist/shared/errors.d.ts +1 -1
  444. package/dist/shared/errors.js +2 -2
  445. package/dist/shared/index.d.ts +1 -0
  446. package/dist/shared/index.js +1 -0
  447. package/dist/shared/redaction.d.ts +2 -0
  448. package/dist/shared/redaction.js +10 -0
  449. package/dist/status/buildStatus.d.ts +1 -0
  450. package/dist/status/buildStatus.js +2 -0
  451. package/dist/status/compileReport.d.ts +22 -0
  452. package/dist/status/compileReport.js +16 -2
  453. package/dist/status/compiledProbeCollection.d.ts +21 -0
  454. package/dist/status/compiledProbeCollection.js +27 -0
  455. package/dist/status/imageStatusReport.js +6 -0
  456. package/dist/status/index.d.ts +3 -0
  457. package/dist/status/index.js +3 -0
  458. package/dist/status/lifecycleProbes.d.ts +19 -0
  459. package/dist/status/lifecycleProbes.js +174 -0
  460. package/dist/status/moltnetProbes.d.ts +7 -8
  461. package/dist/status/moltnetProbes.js +27 -198
  462. package/dist/status/moltnetWiringProbes.d.ts +19 -0
  463. package/dist/status/moltnetWiringProbes.js +178 -0
  464. package/dist/target/cleanupRun.d.ts +41 -0
  465. package/dist/target/cleanupRun.js +139 -0
  466. package/dist/target/cleanupRunDocker.d.ts +16 -0
  467. package/dist/target/cleanupRunDocker.js +66 -0
  468. package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
  469. package/dist/target/cleanupRunDocker.test-helper.js +238 -0
  470. package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
  471. package/dist/target/cleanupRunDockerPreflight.js +224 -0
  472. package/dist/target/composedPreparation.d.ts +205 -0
  473. package/dist/target/composedPreparation.js +223 -0
  474. package/dist/target/containerBundle.d.ts +82 -0
  475. package/dist/target/containerBundle.js +243 -0
  476. package/dist/target/containerBundleArchive.d.ts +31 -0
  477. package/dist/target/containerBundleArchive.js +140 -0
  478. package/dist/target/containerBundleAuthority.d.ts +25 -0
  479. package/dist/target/containerBundleAuthority.js +65 -0
  480. package/dist/target/containerBundleContracts.d.ts +114 -0
  481. package/dist/target/containerBundleContracts.js +173 -0
  482. package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
  483. package/dist/target/containerBundleFilesystemStore.js +247 -0
  484. package/dist/target/containerBundlePolicy.d.ts +33 -0
  485. package/dist/target/containerBundlePolicy.js +64 -0
  486. package/dist/target/containerBundleStore.d.ts +127 -0
  487. package/dist/target/containerBundleStore.js +284 -0
  488. package/dist/target/contracts.d.ts +538 -0
  489. package/dist/target/contracts.js +373 -0
  490. package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
  491. package/dist/target/dockerArtifactIdentityTypes.js +1 -0
  492. package/dist/target/dockerArtifactInspection.d.ts +40 -0
  493. package/dist/target/dockerArtifactInspection.js +125 -0
  494. package/dist/target/dockerArtifacts.d.ts +21 -0
  495. package/dist/target/dockerArtifacts.js +110 -0
  496. package/dist/target/dockerArtifactsProvider.d.ts +41 -0
  497. package/dist/target/dockerArtifactsProvider.js +449 -0
  498. package/dist/target/dockerCommandExecutor.d.ts +27 -0
  499. package/dist/target/dockerCommandExecutor.js +200 -0
  500. package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
  501. package/dist/target/dockerCommandExecutorCore.js +273 -0
  502. package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
  503. package/dist/target/dockerContainerBundleBuilder.js +256 -0
  504. package/dist/target/dockerContextSnapshot.d.ts +21 -0
  505. package/dist/target/dockerContextSnapshot.js +158 -0
  506. package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
  507. package/dist/target/dockerEndpointFingerprint.js +9 -0
  508. package/dist/target/dockerPreparedArtifact.d.ts +48 -0
  509. package/dist/target/dockerPreparedArtifact.js +131 -0
  510. package/dist/target/dockerProjectionJson.d.ts +1 -0
  511. package/dist/target/dockerProjectionJson.js +80 -0
  512. package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
  513. package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
  514. package/dist/target/dockerResources.d.ts +26 -0
  515. package/dist/target/dockerResources.js +162 -0
  516. package/dist/target/dockerResourcesProvider.d.ts +44 -0
  517. package/dist/target/dockerResourcesProvider.js +207 -0
  518. package/dist/target/dockerSecrets.d.ts +39 -0
  519. package/dist/target/dockerSecrets.js +249 -0
  520. package/dist/target/dockerSecretsAuthority.d.ts +26 -0
  521. package/dist/target/dockerSecretsAuthority.js +216 -0
  522. package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
  523. package/dist/target/dockerSecretsLifecycle.js +133 -0
  524. package/dist/target/dockerSecretsProvider.d.ts +68 -0
  525. package/dist/target/dockerSecretsProvider.js +329 -0
  526. package/dist/target/dockerTarget.d.ts +52 -0
  527. package/dist/target/dockerTarget.js +48 -0
  528. package/dist/target/dockerTargetBinding.d.ts +14 -0
  529. package/dist/target/dockerTargetBinding.js +96 -0
  530. package/dist/target/dockerWorldClock.d.ts +17 -0
  531. package/dist/target/dockerWorldClock.js +111 -0
  532. package/dist/target/dockerWorldReadiness.d.ts +17 -0
  533. package/dist/target/dockerWorldReadiness.js +119 -0
  534. package/dist/target/dockerWorldService.d.ts +23 -0
  535. package/dist/target/dockerWorldService.js +216 -0
  536. package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
  537. package/dist/target/dockerWorldServiceAuthority.js +182 -0
  538. package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
  539. package/dist/target/dockerWorldServiceLifecycle.js +275 -0
  540. package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
  541. package/dist/target/dockerWorldServiceProvider.js +318 -0
  542. package/dist/target/dockerWorldServiceStore.d.ts +73 -0
  543. package/dist/target/dockerWorldServiceStore.js +367 -0
  544. package/dist/target/evidenceExport.d.ts +55 -0
  545. package/dist/target/evidenceExport.js +518 -0
  546. package/dist/target/evidenceExportArchive.d.ts +10 -0
  547. package/dist/target/evidenceExportArchive.js +302 -0
  548. package/dist/target/evidenceExportContract.d.ts +27 -0
  549. package/dist/target/evidenceExportContract.js +40 -0
  550. package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
  551. package/dist/target/evidenceExportOperationsTestKit.js +312 -0
  552. package/dist/target/evidenceExportProvider.d.ts +85 -0
  553. package/dist/target/evidenceExportProvider.js +187 -0
  554. package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
  555. package/dist/target/evidenceExportPublicationTypes.js +1 -0
  556. package/dist/target/evidenceExportStore.d.ts +70 -0
  557. package/dist/target/evidenceExportStore.js +498 -0
  558. package/dist/target/evidenceExportStorePublication.d.ts +7 -0
  559. package/dist/target/evidenceExportStorePublication.js +395 -0
  560. package/dist/target/handles.d.ts +20 -0
  561. package/dist/target/handles.js +56 -0
  562. package/dist/target/index.d.ts +12 -0
  563. package/dist/target/index.js +11 -0
  564. package/dist/target/journal.d.ts +59 -0
  565. package/dist/target/journal.js +529 -0
  566. package/dist/target/journalFilesystem.d.ts +3 -0
  567. package/dist/target/journalFilesystem.js +111 -0
  568. package/dist/target/journalRoot.d.ts +4 -0
  569. package/dist/target/journalRoot.js +6 -0
  570. package/dist/target/organizationAttachment.d.ts +23 -0
  571. package/dist/target/organizationAttachment.js +263 -0
  572. package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
  573. package/dist/target/organizationAttachmentAuthority.js +161 -0
  574. package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
  575. package/dist/target/organizationAttachmentLifecycle.js +101 -0
  576. package/dist/target/organizationAttachmentProvider.d.ts +76 -0
  577. package/dist/target/organizationAttachmentProvider.js +289 -0
  578. package/dist/target/organizationAttachmentStore.d.ts +51 -0
  579. package/dist/target/organizationAttachmentStore.js +316 -0
  580. package/dist/target/publicArtifactSnapshot.d.ts +41 -0
  581. package/dist/target/publicArtifactSnapshot.js +150 -0
  582. package/dist/target/topologyActivation.d.ts +51 -0
  583. package/dist/target/topologyActivation.js +149 -0
  584. package/dist/target/topologyAttestation.d.ts +37 -0
  585. package/dist/target/topologyAttestation.js +300 -0
  586. package/dist/target/topologyAttestationErrors.d.ts +1 -0
  587. package/dist/target/topologyAttestationErrors.js +1 -0
  588. package/dist/target/worldClock.d.ts +60 -0
  589. package/dist/target/worldClock.js +129 -0
  590. package/dist/target/worldReadiness.d.ts +103 -0
  591. package/dist/target/worldReadiness.js +153 -0
  592. package/moltnet-releases.json +20 -0
  593. package/package.json +27 -11
  594. package/runtimes.yaml +8 -23
  595. package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
  596. package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
  597. /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
  598. /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
@@ -14,6 +14,11 @@ export interface UpProjectOptions extends CompileProjectOptions {
14
14
  envFilePath?: string;
15
15
  imageTag?: string;
16
16
  runRunner?: DockerRunRunner;
17
+ networkAttachmentHandle?: string;
18
+ organizationHandoffRunId?: string;
19
+ descriptorDigest?: string;
20
+ selectedTargetReceipt?: unknown;
21
+ selectedTargetReceiptDigest?: string;
17
22
  targetExecFile?: DockerTargetExecFile;
18
23
  }
19
24
  export interface UpProjectResult extends BuildProjectResult {
@@ -1,11 +1,110 @@
1
1
  import path from "node:path";
2
- import { removeDirectory } from "../filesystem/index.js";
3
- import { writeDockerDeploymentRecordForRun } from "../deployment/index.js";
2
+ import { createHash } from "node:crypto";
3
+ import { rm } from "node:fs/promises";
4
+ import { createOrganizationReadinessPending, createDockerOrganizationHandoffSession, createDockerDeploymentRecord, initializeOrganizationHandoffAuthorityStore, parseCanonicalSha256Digest, probeDockerOrganizationReadiness, readDeploymentRecord, resolveDockerDeploymentTarget, resolveDeploymentRecordPath, writeDeploymentRecord, writeDockerDeploymentRecordForRun } from "../deployment/index.js";
5
+ import { createCanonicalSelectedTargetReceiptBytes, parseOpaqueTargetHandle, parseRunId, parseSelectedTargetReceipt, selectTarget } from "../target/index.js";
4
6
  import { buildProject } from "./buildProject.js";
5
7
  import { createDockerRunInvocation, resolveDetachedDeploymentOptions, runDockerContainer } from "./runProject.js";
8
+ import { executeDockerRunWithSupportCleanup } from "./runProjectLifecycle.js";
6
9
  import { requireAuthProfile } from "../auth/index.js";
7
- import { DEFAULT_OUTPUT_DIRECTORY } from "../shared/index.js";
10
+ import { DEFAULT_OUTPUT_DIRECTORY, SpawnfileError } from "../shared/index.js";
11
+ import { ensureNoopolisRunId, resolveNoopolisRunId } from "../runtime/index.js";
12
+ import { fileExists } from "../filesystem/index.js";
13
+ import { resolveHostCliCredential } from "./runProjectAuth.js";
14
+ const handoffInputError = () => new SpawnfileError("validation_error", "Organization handoff requires authorized run id, selected target receipt, descriptor digest, selected target receipt digest, network attachment handle, and world bindings");
15
+ const handoffRecoveryIncompleteError = () => new SpawnfileError("runtime_error", "Organization handoff recovery is incomplete; redeploy with explicit authorization");
16
+ const stableRecord = (record) => {
17
+ const { created_at: _createdAt, export_index: _exportIndex, organization_ready: _organizationReady, ...stable } = record;
18
+ return stable;
19
+ };
20
+ const canonicalJson = (value) => {
21
+ if (Array.isArray(value))
22
+ return `[${value.map(canonicalJson).join(",")}]`;
23
+ if (value !== null && typeof value === "object") {
24
+ const record = value;
25
+ return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`).join(",")}}`;
26
+ }
27
+ const serialized = JSON.stringify(value);
28
+ if (serialized === undefined)
29
+ throw handoffInputError();
30
+ return serialized;
31
+ };
32
+ const resolveRequestedHandoff = (options) => {
33
+ const values = [
34
+ options.descriptorDigest,
35
+ options.organizationHandoffRunId,
36
+ options.selectedTargetReceiptDigest,
37
+ options.selectedTargetReceipt,
38
+ options.networkAttachmentHandle,
39
+ options.worldBindingsPath
40
+ ];
41
+ if (values.every((value) => value === undefined))
42
+ return null;
43
+ if (values.some((value) => value === undefined) || !options.detach)
44
+ throw handoffInputError();
45
+ try {
46
+ const selectedTarget = parseSelectedTargetReceipt(options.selectedTargetReceipt);
47
+ const selectedDigest = parseCanonicalSha256Digest(options.selectedTargetReceiptDigest, "selected_target_receipt_digest");
48
+ const computedDigest = `sha256:${createHash("sha256").update(createCanonicalSelectedTargetReceiptBytes(selectedTarget), "utf8").digest("hex")}`;
49
+ if (selectedDigest !== computedDigest)
50
+ throw new Error("selected receipt digest mismatch");
51
+ return {
52
+ descriptorDigest: parseCanonicalSha256Digest(options.descriptorDigest, "descriptor_digest"),
53
+ runId: parseRunId(options.organizationHandoffRunId),
54
+ networkAttachmentHandle: parseOpaqueTargetHandle(options.networkAttachmentHandle),
55
+ selectedTarget,
56
+ selectedTargetReceiptDigest: selectedDigest
57
+ };
58
+ }
59
+ catch {
60
+ throw handoffInputError();
61
+ }
62
+ };
63
+ const verifyRequestedHandoffTarget = async (requested, resolved, options) => {
64
+ if (!requested)
65
+ return;
66
+ if (typeof resolved.dockerContext !== "string" || resolved.dockerContext.length === 0
67
+ || resolved.dockerHost != null || process.env.DOCKER_HOST != null)
68
+ throw handoffInputError();
69
+ try {
70
+ const actual = await selectTarget({
71
+ context: resolved.dockerContext,
72
+ dockerCommand: options.dockerCommand,
73
+ execFile: options.targetExecFile
74
+ });
75
+ if (createCanonicalSelectedTargetReceiptBytes(actual)
76
+ !== createCanonicalSelectedTargetReceiptBytes(requested.selectedTarget))
77
+ throw new Error("target mismatch");
78
+ }
79
+ catch {
80
+ throw handoffInputError();
81
+ }
82
+ };
83
+ const resolveCompiledHandoff = (requested, buildResult) => {
84
+ if (!requested)
85
+ return undefined;
86
+ try {
87
+ const bindingDigest = buildResult.organizationReadinessEvidence.worldBindings?.digest;
88
+ if (!bindingDigest)
89
+ throw new Error("missing compiled binding evidence");
90
+ const bindingDigestParsed = parseCanonicalSha256Digest(bindingDigest, "binding_digest");
91
+ return { authority: { ...requested, bindingDigest: bindingDigestParsed }, organizationHandoff: {
92
+ bindingDigest: bindingDigestParsed, networkAttachmentHandle: requested.networkAttachmentHandle,
93
+ selectedTargetReceiptDigest: requested.selectedTargetReceiptDigest
94
+ } };
95
+ }
96
+ catch {
97
+ throw handoffInputError();
98
+ }
99
+ };
8
100
  export const upProject = async (inputPath, options = {}) => {
101
+ // Parse caller authority before any target or build work. Target identity is
102
+ // verified below from the resolved detached options, including exact record reuse.
103
+ const requestedHandoff = resolveRequestedHandoff(options);
104
+ // Handoff reservation identity must survive a process crash. Unlike an
105
+ // ordinary deployment run, it may never silently mint a fresh run id.
106
+ if (requestedHandoff && resolveNoopolisRunId(process.env) !== requestedHandoff.runId)
107
+ throw handoffInputError();
9
108
  const resolvedOptions = await resolveDetachedDeploymentOptions(path.resolve(options.outputDirectory ?? DEFAULT_OUTPUT_DIRECTORY), {
10
109
  authProfile: options.authProfile,
11
110
  containerName: options.containerName,
@@ -18,20 +117,37 @@ export const upProject = async (inputPath, options = {}) => {
18
117
  imageTag: options.imageTag,
19
118
  targetExecFile: options.targetExecFile
20
119
  });
120
+ await verifyRequestedHandoffTarget(requestedHandoff, resolvedOptions, options);
121
+ // Every authority container compiled for this deployment must stamp
122
+ // causal events under the same real run id (see specs/CAUSAL.md).
123
+ // buildProject/compileProject stay deterministic functions of the host
124
+ // env; this only fills in a generated id when the host did not already
125
+ // provide one, before the build step that bakes it into the
126
+ // entrypoint/recipe env.
127
+ if (!requestedHandoff)
128
+ ensureNoopolisRunId();
21
129
  const buildResult = await buildProject(inputPath, {
22
130
  buildRunner: options.buildRunner,
23
131
  clean: options.clean,
132
+ containerArchitecture: options.containerArchitecture,
24
133
  dockerContext: resolvedOptions.dockerContext,
25
134
  dockerCommand: options.dockerCommand,
26
135
  imageTag: resolvedOptions.imageTag,
27
- outputDirectory: options.outputDirectory
136
+ outputDirectory: options.outputDirectory,
137
+ runtimePackageOverrides: options.runtimePackageOverrides,
138
+ ...(options.worldBindingsPath !== undefined
139
+ ? { worldBindingsPath: options.worldBindingsPath }
140
+ : {})
28
141
  });
142
+ const handoff = resolveCompiledHandoff(requestedHandoff, buildResult);
29
143
  const authProfile = resolvedOptions.authProfile
30
144
  ? await requireAuthProfile(resolvedOptions.authProfile)
31
145
  : null;
146
+ const cliCredential = await resolveHostCliCredential(buildResult.report.container);
32
147
  const imageTag = resolvedOptions.imageTag ?? buildResult.imageTag;
33
148
  const invocation = await createDockerRunInvocation(buildResult, imageTag, {
34
149
  authProfile,
150
+ ...(cliCredential ? { cliCredential: { name: cliCredential.name, value: cliCredential.value } } : {}),
35
151
  containerName: resolvedOptions.containerName,
36
152
  detach: options.detach,
37
153
  deploymentName: resolvedOptions.deploymentName,
@@ -40,27 +156,147 @@ export const upProject = async (inputPath, options = {}) => {
40
156
  dockerHost: resolvedOptions.dockerHost,
41
157
  envFilePath: resolvedOptions.envFilePath
42
158
  });
43
- let runMetadata;
159
+ let authority;
160
+ let deploymentRecordPath;
161
+ let recovered = false;
162
+ let dockerLifecycleInvoked = false;
44
163
  try {
45
- runMetadata = await (options.runRunner ?? runDockerContainer)(invocation);
164
+ let pending;
165
+ if (handoff) {
166
+ if (!invocation.deploymentLabels || !invocation.containerName)
167
+ throw handoffInputError();
168
+ const session = createDockerOrganizationHandoffSession({
169
+ bindingDigest: handoff.authority.bindingDigest,
170
+ containerName: invocation.containerName,
171
+ deploymentLabels: invocation.deploymentLabels,
172
+ descriptorDigest: handoff.authority.descriptorDigest,
173
+ organizationHandoff: handoff.organizationHandoff,
174
+ runId: handoff.authority.runId,
175
+ selectedTarget: handoff.authority.selectedTarget,
176
+ selectedTargetReceiptDigest: handoff.authority.selectedTargetReceiptDigest
177
+ });
178
+ authority = await initializeOrganizationHandoffAuthorityStore();
179
+ const begun = await authority.begin(session.authorityInput);
180
+ pending = begun.pending;
181
+ recovered = !begun.created;
182
+ }
183
+ let runMetadata = undefined;
184
+ if (!recovered) {
185
+ dockerLifecycleInvoked = true;
186
+ runMetadata = await executeDockerRunWithSupportCleanup(invocation, options.runRunner ?? runDockerContainer);
187
+ }
188
+ const observed = recovered && authority && pending
189
+ ? await authority.readDockerMutation(pending.pending_key)
190
+ : undefined;
191
+ if (recovered && !observed)
192
+ throw handoffRecoveryIncompleteError();
193
+ const recoveredMetadata = observed
194
+ ? { containerId: observed.container_id, deploymentLabels: observed.deployment_labels, imageId: observed.image_id }
195
+ : undefined;
196
+ const exactRunMetadata = runMetadata ?? recoveredMetadata;
197
+ let organizationHandoffHandle;
198
+ if (handoff) {
199
+ if (!exactRunMetadata?.containerId || !exactRunMetadata.deploymentLabels || !exactRunMetadata.imageId || !authority || !pending)
200
+ throw handoffInputError();
201
+ if (!recovered)
202
+ await authority.observeDockerMutation(pending.pending_key, {
203
+ containerId: exactRunMetadata.containerId, deploymentLabels: exactRunMetadata.deploymentLabels, imageId: exactRunMetadata.imageId
204
+ });
205
+ const finalized = await authority.finalize(pending.pending_key, { containerId: exactRunMetadata.containerId, deploymentLabels: exactRunMetadata.deploymentLabels });
206
+ organizationHandoffHandle = finalized.organization_handoff_handle;
207
+ const existingRecordPath = invocation.detach && invocation.deploymentName
208
+ ? resolveDeploymentRecordPath(buildResult.outputDirectory, invocation.deploymentName)
209
+ : null;
210
+ if (existingRecordPath && await fileExists(existingRecordPath)) {
211
+ const existing = await readDeploymentRecord(existingRecordPath);
212
+ const target = await resolveDockerDeploymentTarget({
213
+ context: invocation.dockerContext ?? undefined,
214
+ dockerCommand: invocation.command,
215
+ dockerHost: invocation.dockerHost ?? undefined,
216
+ execFile: options.targetExecFile
217
+ });
218
+ const expected = createDockerDeploymentRecord({
219
+ authProfileName: authProfile?.name ?? null,
220
+ compileFingerprint: buildResult.report.compile_fingerprint ?? "",
221
+ containerName: invocation.containerName,
222
+ deploymentName: invocation.deploymentName ?? undefined,
223
+ envFilePath: resolvedOptions.envFilePath,
224
+ imageTag,
225
+ networkIds: buildResult.report.container?.moltnet?.server_plans
226
+ .filter((server) => server.mode === "managed").map((server) => server.network_id),
227
+ nodes: buildResult.report.nodes,
228
+ organizationHandoff: handoff.organizationHandoff,
229
+ organizationHandoffHandle,
230
+ outputDirectory: buildResult.outputDirectory,
231
+ projectRoot: buildResult.report.root,
232
+ runId: handoff.authority.runId,
233
+ runMetadata: exactRunMetadata,
234
+ runtimeInstanceIds: buildResult.report.container?.runtime_instances.map((instance) => instance.id) ?? [],
235
+ target
236
+ });
237
+ if (canonicalJson(stableRecord(existing)) !== canonicalJson(stableRecord(expected)))
238
+ throw handoffInputError();
239
+ deploymentRecordPath = existingRecordPath;
240
+ }
241
+ else
242
+ deploymentRecordPath = invocation.detach && invocation.deploymentName
243
+ ? await writeDockerDeploymentRecordForRun({ authProfileName: authProfile?.name ?? null, envFilePath: resolvedOptions.envFilePath,
244
+ imageTag, invocation, outputDirectory: buildResult.outputDirectory,
245
+ organizationHandoff: handoff.organizationHandoff, organizationHandoffHandle, report: buildResult.report,
246
+ runMetadata: exactRunMetadata, targetExecFile: options.targetExecFile })
247
+ : null;
248
+ }
249
+ else
250
+ deploymentRecordPath = invocation.detach && invocation.deploymentName
251
+ ? await writeDockerDeploymentRecordForRun({ authProfileName: authProfile?.name ?? null, envFilePath: resolvedOptions.envFilePath,
252
+ imageTag, invocation, outputDirectory: buildResult.outputDirectory, report: buildResult.report,
253
+ runMetadata: runMetadata ?? undefined, targetExecFile: options.targetExecFile })
254
+ : null;
46
255
  }
47
256
  finally {
48
- if (!invocation.detach) {
49
- await removeDirectory(invocation.supportDirectory);
257
+ // Replay creates a fresh support directory but does not invoke the normal
258
+ // Docker lifecycle wrapper. Preserve its detached credential cleanup
259
+ // semantics without deleting bind-mount support files.
260
+ let cleanupError;
261
+ try {
262
+ if (invocation.detach && !dockerLifecycleInvoked)
263
+ await rm(invocation.envFilePath, { force: true });
50
264
  }
265
+ catch (error) {
266
+ cleanupError = error;
267
+ }
268
+ try {
269
+ await authority?.dispose();
270
+ }
271
+ catch (error) {
272
+ if (cleanupError === undefined)
273
+ throw error;
274
+ }
275
+ if (cleanupError !== undefined)
276
+ throw cleanupError;
277
+ }
278
+ if (deploymentRecordPath && buildResult.organizationReadinessEvidence) {
279
+ const record = await readDeploymentRecord(deploymentRecordPath);
280
+ const pending = createOrganizationReadinessPending(buildResult.organizationReadinessEvidence, {
281
+ compileFingerprint: record.compile_fingerprint,
282
+ deploymentName: record.name,
283
+ runId: record.run_id ?? null,
284
+ unitCount: record.units.length,
285
+ unitId: record.units[0]?.id ?? "invalid-unit"
286
+ });
287
+ const pendingRecord = { ...record, organization_ready: pending };
288
+ await writeDeploymentRecord(buildResult.outputDirectory, pendingRecord);
289
+ const organizationReady = await probeDockerOrganizationReadiness({
290
+ dockerCommand: options.dockerCommand,
291
+ evidence: buildResult.organizationReadinessEvidence,
292
+ execFile: options.targetExecFile,
293
+ record: pendingRecord
294
+ });
295
+ await writeDeploymentRecord(buildResult.outputDirectory, {
296
+ ...pendingRecord,
297
+ organization_ready: organizationReady
298
+ });
51
299
  }
52
- const deploymentRecordPath = invocation.detach && invocation.deploymentName
53
- ? await writeDockerDeploymentRecordForRun({
54
- authProfileName: authProfile?.name ?? null,
55
- envFilePath: resolvedOptions.envFilePath,
56
- imageTag,
57
- invocation,
58
- outputDirectory: buildResult.outputDirectory,
59
- report: buildResult.report,
60
- runMetadata: runMetadata ?? undefined,
61
- targetExecFile: options.targetExecFile
62
- })
63
- : null;
64
300
  return {
65
301
  ...buildResult,
66
302
  authProfileName: authProfile?.name ?? null,
@@ -0,0 +1,36 @@
1
+ import { type CompiledEngineEntry, type CompiledScheduleEntry, type UpReceipt } from "../deployment/index.js";
2
+ import type { CompilePlan } from "./types.js";
3
+ import type { UpProjectResult } from "./upProject.js";
4
+ /**
5
+ * Extracts the `{agent, cron}` pairs an up-receipt's `compiled_schedule` field carries
6
+ * (Decision 21 Piece 4) — the raw material for simfile's wake-diff denominator oracle.
7
+ * Only `kind: "cron"` schedules are represented; `every`/`disabled` schedules have no
8
+ * cron-fire cadence to diff against sim-time and are intentionally omitted, not zeroed.
9
+ */
10
+ export declare const resolveCompiledSchedule: (plan: CompilePlan) => CompiledScheduleEntry[];
11
+ /**
12
+ * Extracts `{agent, engine}` pairs (Piece 5, Slice B) — disclosure ground truth for the
13
+ * run-manifest's `pinned-engine` field, so a `scripted` (or any non-default) pi engine is
14
+ * visibly disclosed rather than an invisible test-only branch. Reads
15
+ * `report.container.runtime_instances[].engine_by_node_id`, the single source of truth
16
+ * `containerArtifacts.ts` already stamps from the pi adapter's own resolved engine kinds
17
+ * (see `src/runtime/pi/adapter.ts`'s `createContainerTargets`) — deliberately not
18
+ * re-derived from a fresh `buildCompilePlan` walk (unlike `resolveCompiledSchedule` above),
19
+ * since that would recompute the exact same fact from pi-adapter-internal logic
20
+ * (`resolvePiEngine`) that compiler code has no business reaching into directly.
21
+ */
22
+ export declare const resolveCompiledEngines: (report: UpProjectResult["report"]) => CompiledEngineEntry[];
23
+ /**
24
+ * Builds `spawnfile.up-receipt.v1` from a project-path `upProject()` result. Reads back
25
+ * the deployment record `upProject` already wrote (for `run_id`/deployment name/container
26
+ * id — the same record `spawnfile artifacts export`/`spawnfile down` resolve), and
27
+ * re-derives `compiled_schedule` from the resolved graph, since `compileProject` does not
28
+ * retain its own `CompilePlan` past the compile step.
29
+ *
30
+ * `readiness` reuses whatever signal `upProject` already has — a bare `docker run -d`
31
+ * that returned a container id, not a new health probe: `up` has never polled
32
+ * application-level readiness, and this receipt does not invent one. `moltnet_base_url`
33
+ * comes straight from the compiled container report's own managed/external server plan;
34
+ * no credentials ever land on this contract (contracts.md).
35
+ */
36
+ export declare const buildUpReceipt: (inputPath: string, result: UpProjectResult) => Promise<UpReceipt>;
@@ -0,0 +1,82 @@
1
+ import { readDeploymentRecord, UP_RECEIPT_VERSION } from "../deployment/index.js";
2
+ import { SpawnfileError } from "../shared/index.js";
3
+ import { buildCompilePlan } from "./buildCompilePlan.js";
4
+ /**
5
+ * Extracts the `{agent, cron}` pairs an up-receipt's `compiled_schedule` field carries
6
+ * (Decision 21 Piece 4) — the raw material for simfile's wake-diff denominator oracle.
7
+ * Only `kind: "cron"` schedules are represented; `every`/`disabled` schedules have no
8
+ * cron-fire cadence to diff against sim-time and are intentionally omitted, not zeroed.
9
+ */
10
+ export const resolveCompiledSchedule = (plan) => plan.nodes
11
+ .filter((node) => node.kind === "agent")
12
+ .flatMap((node) => {
13
+ const schedule = node.value.schedule;
14
+ return schedule?.kind === "cron" ? [{ agent: node.id, cron: schedule.cron }] : [];
15
+ })
16
+ .sort((left, right) => left.agent.localeCompare(right.agent));
17
+ /**
18
+ * Extracts `{agent, engine}` pairs (Piece 5, Slice B) — disclosure ground truth for the
19
+ * run-manifest's `pinned-engine` field, so a `scripted` (or any non-default) pi engine is
20
+ * visibly disclosed rather than an invisible test-only branch. Reads
21
+ * `report.container.runtime_instances[].engine_by_node_id`, the single source of truth
22
+ * `containerArtifacts.ts` already stamps from the pi adapter's own resolved engine kinds
23
+ * (see `src/runtime/pi/adapter.ts`'s `createContainerTargets`) — deliberately not
24
+ * re-derived from a fresh `buildCompilePlan` walk (unlike `resolveCompiledSchedule` above),
25
+ * since that would recompute the exact same fact from pi-adapter-internal logic
26
+ * (`resolvePiEngine`) that compiler code has no business reaching into directly.
27
+ */
28
+ export const resolveCompiledEngines = (report) => (report.container?.runtime_instances ?? [])
29
+ .flatMap((instance) => Object.entries(instance.engine_by_node_id ?? {}))
30
+ .map(([agent, engine]) => ({ agent, engine }))
31
+ .sort((left, right) => left.agent.localeCompare(right.agent));
32
+ /**
33
+ * Builds `spawnfile.up-receipt.v1` from a project-path `upProject()` result. Reads back
34
+ * the deployment record `upProject` already wrote (for `run_id`/deployment name/container
35
+ * id — the same record `spawnfile artifacts export`/`spawnfile down` resolve), and
36
+ * re-derives `compiled_schedule` from the resolved graph, since `compileProject` does not
37
+ * retain its own `CompilePlan` past the compile step.
38
+ *
39
+ * `readiness` reuses whatever signal `upProject` already has — a bare `docker run -d`
40
+ * that returned a container id, not a new health probe: `up` has never polled
41
+ * application-level readiness, and this receipt does not invent one. `moltnet_base_url`
42
+ * comes straight from the compiled container report's own managed/external server plan;
43
+ * no credentials ever land on this contract (contracts.md).
44
+ */
45
+ export const buildUpReceipt = async (inputPath, result) => {
46
+ const plan = await buildCompilePlan(inputPath);
47
+ const compiledSchedule = resolveCompiledSchedule(plan);
48
+ const compiledEngines = resolveCompiledEngines(result.report);
49
+ const record = result.deploymentRecordPath
50
+ ? await readDeploymentRecord(result.deploymentRecordPath)
51
+ : null;
52
+ const unit = record?.units[0] ?? null;
53
+ const containerIds = unit?.container_id ? [unit.container_id] : [];
54
+ const fingerprint = result.report.compile_fingerprint;
55
+ if (!fingerprint) {
56
+ throw new SpawnfileError("runtime_error", "Compiled output has no compile_fingerprint; cannot build an up-receipt");
57
+ }
58
+ return {
59
+ version: UP_RECEIPT_VERSION,
60
+ run_id: record?.run_id ?? null,
61
+ fingerprint,
62
+ deployment: {
63
+ name: record?.name ?? null,
64
+ container_ids: containerIds
65
+ },
66
+ readiness: {
67
+ state: containerIds.length > 0 ? "running" : "unknown",
68
+ moltnet_base_url: result.report.container?.moltnet?.server_plans?.[0]?.base_url ?? null
69
+ },
70
+ compiled_schedule: compiledSchedule,
71
+ engines: compiledEngines,
72
+ ...(result.report.container?.moltnet?.release
73
+ ? { moltnet_release: {
74
+ ...result.report.container.moltnet.release,
75
+ capabilities: ["pi-bridge"]
76
+ } }
77
+ : {}),
78
+ ...(record?.organization_handoff ? { organization_handoff: record.organization_handoff } : {}),
79
+ ...(record?.organization_handoff_handle ? { organization_handoff_handle: record.organization_handoff_handle } : {}),
80
+ ...(record?.organization_ready ? { organization_ready: record.organization_ready } : {})
81
+ };
82
+ };
@@ -1,8 +1,9 @@
1
1
  import path from "node:path";
2
- import { getCanonicalManifestPath, getManifestPath, getProjectRoot, writeUtf8File } from "../filesystem/index.js";
2
+ import { getManifestPath, writeUtf8File } from "../filesystem/index.js";
3
3
  import { loadManifest, renderSpawnfile } from "../manifest/index.js";
4
4
  import { SpawnfileError } from "../shared/index.js";
5
5
  import { resolveEffectiveModelTarget } from "./modelEnv.js";
6
+ import { collectProjectManifestPaths, createInlineAgentSource, rewriteInlineAgentMembers } from "./projectManifestGraph.js";
6
7
  const TEAM_MODEL_COMMAND_ERROR = "spawnfile model commands only write agent manifests; use --recursive to update descendant agents of a team project";
7
8
  const AUTH_METHOD_PROVIDER_HINTS = {
8
9
  "api_key": "use a model provider like openai or anthropic, then pass --auth api_key",
@@ -74,22 +75,6 @@ const buildModelTarget = (options) => {
74
75
  provider: options.provider
75
76
  };
76
77
  };
77
- const collectManifestPaths = async (manifestPath, recursive, visited = new Set()) => {
78
- const canonicalPath = getCanonicalManifestPath(manifestPath);
79
- if (visited.has(canonicalPath)) {
80
- return [];
81
- }
82
- visited.add(canonicalPath);
83
- if (!recursive) {
84
- return [canonicalPath];
85
- }
86
- const loadedManifest = await loadManifest(canonicalPath);
87
- const childRefs = loadedManifest.manifest.kind === "team"
88
- ? loadedManifest.manifest.members.map((member) => member.ref)
89
- : (loadedManifest.manifest.subagents ?? []).map((subagent) => subagent.ref);
90
- const nestedPaths = await Promise.all(childRefs.map((ref) => collectManifestPaths(getManifestPath(path.resolve(getProjectRoot(canonicalPath), ref)), true, visited)));
91
- return [canonicalPath, ...nestedPaths.flat()];
92
- };
93
78
  const updateManifestExecution = (manifest, model) => ({
94
79
  ...manifest,
95
80
  execution: {
@@ -98,14 +83,14 @@ const updateManifestExecution = (manifest, model) => ({
98
83
  }
99
84
  });
100
85
  const manifestChanged = (current, next) => JSON.stringify(current) !== JSON.stringify(next);
101
- const assertModelMutationAllowed = (manifest, recursive) => {
86
+ const mutateAgentDeclarations = (manifest, manifestPath, recursive, mutate) => {
102
87
  if (manifest.kind === "agent") {
103
- return true;
88
+ return mutate(manifest, manifestPath);
104
89
  }
105
- if (recursive) {
106
- return false;
90
+ if (!recursive) {
91
+ throw new SpawnfileError("validation_error", TEAM_MODEL_COMMAND_ERROR);
107
92
  }
108
- throw new SpawnfileError("validation_error", TEAM_MODEL_COMMAND_ERROR);
93
+ return rewriteInlineAgentMembers(manifest, (member) => mutate(member, createInlineAgentSource(manifestPath, member.id)) ?? member);
109
94
  };
110
95
  const rewriteTouchedManifests = async (manifestPaths, mutate) => {
111
96
  const updatedFiles = [];
@@ -123,59 +108,56 @@ const rewriteTouchedManifests = async (manifestPaths, mutate) => {
123
108
  export const setProjectPrimaryModel = async (options) => {
124
109
  const modelTarget = buildModelTarget(options);
125
110
  const recursive = options.recursive ?? false;
126
- const manifestPaths = await collectManifestPaths(resolveTargetManifestPath(options.path), recursive);
127
- return rewriteTouchedManifests(manifestPaths, (manifest) => {
128
- if (!assertModelMutationAllowed(manifest, recursive)) {
129
- return null;
130
- }
131
- const normalizedModel = normalizeExecutionModel(manifest.execution);
132
- return updateManifestExecution(manifest, {
133
- ...(normalizedModel?.fallback ? { fallback: normalizedModel.fallback } : {}),
134
- primary: modelTarget
111
+ const manifestPaths = await collectProjectManifestPaths(resolveTargetManifestPath(options.path), recursive);
112
+ return rewriteTouchedManifests(manifestPaths, (manifest, manifestPath) => {
113
+ return mutateAgentDeclarations(manifest, manifestPath, recursive, (declaration) => {
114
+ const normalizedModel = normalizeExecutionModel(declaration.execution);
115
+ return updateManifestExecution(declaration, {
116
+ ...(normalizedModel?.fallback ? { fallback: normalizedModel.fallback } : {}),
117
+ primary: modelTarget
118
+ });
135
119
  });
136
120
  });
137
121
  };
138
122
  export const addProjectModelFallback = async (options) => {
139
123
  const modelTarget = buildModelTarget(options);
140
124
  const recursive = options.recursive ?? false;
141
- const manifestPaths = await collectManifestPaths(resolveTargetManifestPath(options.path), recursive);
125
+ const manifestPaths = await collectProjectManifestPaths(resolveTargetManifestPath(options.path), recursive);
142
126
  return rewriteTouchedManifests(manifestPaths, (manifest, manifestPath) => {
143
- if (!assertModelMutationAllowed(manifest, recursive)) {
144
- return null;
145
- }
146
- const normalizedModel = normalizeExecutionModel(manifest.execution);
147
- if (!normalizedModel) {
148
- if (recursive) {
149
- return null;
127
+ return mutateAgentDeclarations(manifest, manifestPath, recursive, (declaration, source) => {
128
+ const normalizedModel = normalizeExecutionModel(declaration.execution);
129
+ if (!normalizedModel) {
130
+ if (recursive) {
131
+ return null;
132
+ }
133
+ throw new SpawnfileError("validation_error", `Manifest at ${source} must declare a primary model before adding fallback models`);
150
134
  }
151
- throw new SpawnfileError("validation_error", `Manifest at ${manifestPath} must declare a primary model before adding fallback models`);
152
- }
153
- const existingFallback = normalizedModel.fallback ?? [];
154
- const nextFallback = existingFallback.some((entry) => JSON.stringify(entry) === JSON.stringify(modelTarget))
155
- ? existingFallback
156
- : [...existingFallback, modelTarget];
157
- return updateManifestExecution(manifest, {
158
- fallback: nextFallback,
159
- primary: normalizedModel.primary
135
+ const existingFallback = normalizedModel.fallback ?? [];
136
+ const nextFallback = existingFallback.some((entry) => JSON.stringify(entry) === JSON.stringify(modelTarget))
137
+ ? existingFallback
138
+ : [...existingFallback, modelTarget];
139
+ return updateManifestExecution(declaration, {
140
+ fallback: nextFallback,
141
+ primary: normalizedModel.primary
142
+ });
160
143
  });
161
144
  });
162
145
  };
163
146
  export const clearProjectModelFallbacks = async (options = {}) => {
164
147
  const recursive = options.recursive ?? false;
165
- const manifestPaths = await collectManifestPaths(resolveTargetManifestPath(options.path), recursive);
148
+ const manifestPaths = await collectProjectManifestPaths(resolveTargetManifestPath(options.path), recursive);
166
149
  return rewriteTouchedManifests(manifestPaths, (manifest, manifestPath) => {
167
- if (!assertModelMutationAllowed(manifest, recursive)) {
168
- return null;
169
- }
170
- const normalizedModel = normalizeExecutionModel(manifest.execution);
171
- if (!normalizedModel) {
172
- if (recursive) {
173
- return null;
150
+ return mutateAgentDeclarations(manifest, manifestPath, recursive, (declaration, source) => {
151
+ const normalizedModel = normalizeExecutionModel(declaration.execution);
152
+ if (!normalizedModel) {
153
+ if (recursive) {
154
+ return null;
155
+ }
156
+ throw new SpawnfileError("validation_error", `Manifest at ${source} does not declare any execution model`);
174
157
  }
175
- throw new SpawnfileError("validation_error", `Manifest at ${manifestPath} does not declare any execution model`);
176
- }
177
- return updateManifestExecution(manifest, {
178
- primary: normalizedModel.primary
158
+ return updateManifestExecution(declaration, {
159
+ primary: normalizedModel.primary
160
+ });
179
161
  });
180
162
  });
181
163
  };