spawnfile 0.1.12 → 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 (620) hide show
  1. package/README.md +58 -12
  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/runtimeCredentials.js +18 -2
  31. package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
  32. package/dist/auth/targetSecretSourceAuthor.js +52 -0
  33. package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
  34. package/dist/auth/targetSecretSourceFsPublish.js +49 -0
  35. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
  36. package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
  37. package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
  38. package/dist/auth/targetSecretSourceFsRead.js +198 -0
  39. package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
  40. package/dist/auth/targetSecretSourceGrant.js +99 -0
  41. package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
  42. package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
  43. package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
  44. package/dist/auth/targetSecretSourceLifecycle.js +52 -0
  45. package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
  46. package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
  47. package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
  48. package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
  49. package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
  50. package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
  51. package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
  52. package/dist/auth/targetSecretSourceResolver.js +137 -0
  53. package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
  54. package/dist/auth/targetSecretSourceRevoke.js +92 -0
  55. package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
  56. package/dist/auth/targetSecretSourceRotate.js +121 -0
  57. package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
  58. package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
  59. package/dist/cli/artifactsCommands.d.ts +27 -0
  60. package/dist/cli/artifactsCommands.js +132 -0
  61. package/dist/cli/authCommands.d.ts +5 -0
  62. package/dist/cli/authCommands.js +221 -0
  63. package/dist/cli/compileBuildCommands.d.ts +3 -0
  64. package/dist/cli/compileBuildCommands.js +35 -0
  65. package/dist/cli/containerBundleCommand.d.ts +6 -0
  66. package/dist/cli/containerBundleCommand.js +116 -0
  67. package/dist/cli/devCommands.d.ts +3 -0
  68. package/dist/cli/devCommands.js +115 -0
  69. package/dist/cli/downCommand.d.ts +25 -0
  70. package/dist/cli/downCommand.js +134 -0
  71. package/dist/cli/index.js +6 -3
  72. package/dist/cli/lifecycleCommands.d.ts +1 -1
  73. package/dist/cli/lifecycleCommands.js +11 -179
  74. package/dist/cli/lifecycleMachine.d.ts +19 -0
  75. package/dist/cli/lifecycleMachine.js +78 -0
  76. package/dist/cli/lifecyclePlan.d.ts +35 -0
  77. package/dist/cli/lifecyclePlan.js +240 -0
  78. package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
  79. package/dist/cli/lifecyclePlanningCommands.js +30 -0
  80. package/dist/cli/runCli.d.ts +15 -2
  81. package/dist/cli/runCli.js +31 -71
  82. package/dist/cli/runPublishCommands.d.ts +3 -0
  83. package/dist/cli/runPublishCommands.js +70 -0
  84. package/dist/cli/statusCommand.d.ts +3 -32
  85. package/dist/cli/statusCommand.js +37 -233
  86. package/dist/cli/statusCommandLive.d.ts +20 -0
  87. package/dist/cli/statusCommandLive.js +188 -0
  88. package/dist/cli/statusCommandOptions.d.ts +40 -0
  89. package/dist/cli/statusCommandOptions.js +42 -0
  90. package/dist/cli/targetCliRoute.d.ts +2 -0
  91. package/dist/cli/targetCliRoute.js +30 -0
  92. package/dist/cli/targetCommands.d.ts +33 -0
  93. package/dist/cli/targetCommands.js +257 -0
  94. package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
  95. package/dist/cli/targetComposedPreparationCommand.js +39 -0
  96. package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
  97. package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
  98. package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
  99. package/dist/cli/targetDefaultAuthorities.js +210 -0
  100. package/dist/cli/targetDefaultConfig.d.ts +68 -0
  101. package/dist/cli/targetDefaultConfig.js +317 -0
  102. package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
  103. package/dist/cli/targetDefaultConfigStdin.js +215 -0
  104. package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
  105. package/dist/cli/targetDefaultEnvelope.js +13 -0
  106. package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
  107. package/dist/cli/targetDefaultHandlerFactory.js +247 -0
  108. package/dist/cli/targetDefaultHandlers.d.ts +21 -0
  109. package/dist/cli/targetDefaultHandlers.js +72 -0
  110. package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
  111. package/dist/cli/targetDefaultJournalAuthority.js +135 -0
  112. package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
  113. package/dist/cli/targetDefaultWorldClock.js +14 -0
  114. package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
  115. package/dist/cli/targetDefaultWorldQueries.js +11 -0
  116. package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
  117. package/dist/cli/targetDefaultWorldReadiness.js +17 -0
  118. package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
  119. package/dist/cli/targetEvidenceHelperResolution.js +23 -0
  120. package/dist/cli/targetLookupCli.d.ts +3 -0
  121. package/dist/cli/targetLookupCli.js +31 -0
  122. package/dist/cli/targetLookupCommands.d.ts +12 -0
  123. package/dist/cli/targetLookupCommands.js +69 -0
  124. package/dist/cli/targetOperationDispatch.d.ts +58 -0
  125. package/dist/cli/targetOperationDispatch.js +21 -0
  126. package/dist/cli/targetReceiptOutput.d.ts +14 -0
  127. package/dist/cli/targetReceiptOutput.js +21 -0
  128. package/dist/cli/targetRequestFile.d.ts +14 -0
  129. package/dist/cli/targetRequestFile.js +63 -0
  130. package/dist/cli/targetSecretSourceInput.d.ts +28 -0
  131. package/dist/cli/targetSecretSourceInput.js +121 -0
  132. package/dist/cli/targetWorldClockCommand.d.ts +10 -0
  133. package/dist/cli/targetWorldClockCommand.js +42 -0
  134. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
  135. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
  136. package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
  137. package/dist/cli/targetWorldReadinessCommand.js +43 -0
  138. package/dist/cli/upCommand.d.ts +3 -0
  139. package/dist/cli/upCommand.js +133 -0
  140. package/dist/cli/upImageCommand.d.ts +11 -0
  141. package/dist/cli/upImageCommand.js +41 -0
  142. package/dist/cli/upLifecycleInvocation.d.ts +41 -0
  143. package/dist/cli/upLifecycleInvocation.js +48 -0
  144. package/dist/cli/upLifecycleRecovery.d.ts +4 -0
  145. package/dist/cli/upLifecycleRecovery.js +53 -0
  146. package/dist/compiler/agentNodeMerge.d.ts +2 -0
  147. package/dist/compiler/agentNodeMerge.js +79 -0
  148. package/dist/compiler/agentSurfaces.js +11 -1
  149. package/dist/compiler/buildCompilePlan.js +17 -0
  150. package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
  151. package/dist/compiler/buildCompilePlanAgent.js +56 -0
  152. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
  153. package/dist/compiler/buildCompilePlanTeams.js +4 -1
  154. package/dist/compiler/buildCompilePlanTraversal.js +75 -82
  155. package/dist/compiler/buildProject.d.ts +20 -1
  156. package/dist/compiler/buildProject.js +121 -7
  157. package/dist/compiler/compilePlanHelpers.js +2 -0
  158. package/dist/compiler/compileProject.d.ts +15 -0
  159. package/dist/compiler/compileProject.js +29 -75
  160. package/dist/compiler/compileProjectPolicy.d.ts +5 -0
  161. package/dist/compiler/compileProjectPolicy.js +21 -0
  162. package/dist/compiler/compileProjectReports.d.ts +9 -0
  163. package/dist/compiler/compileProjectReports.js +52 -0
  164. package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
  165. package/dist/compiler/containerArtifactSummaries.js +138 -0
  166. package/dist/compiler/containerArtifacts.d.ts +10 -0
  167. package/dist/compiler/containerArtifacts.js +126 -125
  168. package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
  169. package/dist/compiler/containerArtifactsPlans.js +31 -118
  170. package/dist/compiler/containerArtifactsRender.d.ts +3 -1
  171. package/dist/compiler/containerArtifactsRender.js +40 -81
  172. package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
  173. package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
  174. package/dist/compiler/containerConfigEnvRender.js +54 -0
  175. package/dist/compiler/containerEntrypointRender.d.ts +1 -0
  176. package/dist/compiler/containerEntrypointRender.js +60 -53
  177. package/dist/compiler/containerEntrypointShell.d.ts +5 -0
  178. package/dist/compiler/containerEntrypointShell.js +29 -0
  179. package/dist/compiler/containerPackageOverrides.d.ts +27 -0
  180. package/dist/compiler/containerPackageOverrides.js +63 -0
  181. package/dist/compiler/containerPackageRender.d.ts +15 -0
  182. package/dist/compiler/containerPackageRender.js +63 -0
  183. package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
  184. package/dist/compiler/containerTargetPlanResolution.js +97 -0
  185. package/dist/compiler/containerTargetResources.js +3 -1
  186. package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
  187. package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
  188. package/dist/compiler/dockerBuildContext.d.ts +16 -0
  189. package/dist/compiler/dockerBuildContext.js +159 -0
  190. package/dist/compiler/dockerBuildSkip.d.ts +30 -0
  191. package/dist/compiler/dockerBuildSkip.js +81 -0
  192. package/dist/compiler/index.d.ts +4 -0
  193. package/dist/compiler/index.js +4 -0
  194. package/dist/compiler/memoryArtifacts.d.ts +26 -0
  195. package/dist/compiler/memoryArtifacts.js +134 -0
  196. package/dist/compiler/memoryResolution.d.ts +4 -0
  197. package/dist/compiler/memoryResolution.js +147 -0
  198. package/dist/compiler/modelEnv.d.ts +2 -0
  199. package/dist/compiler/modelEnv.js +6 -0
  200. package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
  201. package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
  202. package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
  203. package/dist/compiler/moltnetArtifactPaths.js +49 -0
  204. package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
  205. package/dist/compiler/moltnetArtifactTypes.js +1 -0
  206. package/dist/compiler/moltnetArtifacts.d.ts +2 -40
  207. package/dist/compiler/moltnetArtifacts.js +56 -95
  208. package/dist/compiler/moltnetBinaries.d.ts +21 -1
  209. package/dist/compiler/moltnetBinaries.js +156 -28
  210. package/dist/compiler/moltnetClientConfig.js +18 -2
  211. package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
  212. package/dist/compiler/moltnetConfigLowering.js +67 -5
  213. package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
  214. package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
  215. package/dist/compiler/moltnetNodeConfig.js +7 -2
  216. package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
  217. package/dist/compiler/moltnetReleaseAuthority.js +73 -0
  218. package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
  219. package/dist/compiler/moltnetReleaseDownload.js +85 -0
  220. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
  221. package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
  222. package/dist/compiler/moltnetResolution.js +72 -20
  223. package/dist/compiler/moltnetRoomMemberships.js +37 -9
  224. package/dist/compiler/moltnetRuntimeConfig.js +11 -0
  225. package/dist/compiler/moltnetServerPlans.d.ts +9 -0
  226. package/dist/compiler/moltnetServerPlans.js +132 -0
  227. package/dist/compiler/organizationIdentity.d.ts +27 -0
  228. package/dist/compiler/organizationIdentity.js +297 -0
  229. package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
  230. package/dist/compiler/organizationReadyEvidence.js +261 -0
  231. package/dist/compiler/projectManifestGraph.d.ts +4 -0
  232. package/dist/compiler/projectManifestGraph.js +24 -0
  233. package/dist/compiler/runProject.d.ts +4 -0
  234. package/dist/compiler/runProject.js +37 -22
  235. package/dist/compiler/runProjectAuth.d.ts +7 -1
  236. package/dist/compiler/runProjectAuth.js +87 -9
  237. package/dist/compiler/runProjectDocker.d.ts +7 -0
  238. package/dist/compiler/runProjectDocker.js +187 -19
  239. package/dist/compiler/runProjectLifecycle.d.ts +7 -0
  240. package/dist/compiler/runProjectLifecycle.js +40 -0
  241. package/dist/compiler/syncProjectAuth.js +4 -1
  242. package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
  243. package/dist/compiler/teamContextActiveEnvironments.js +255 -0
  244. package/dist/compiler/teamContextSupport.js +32 -40
  245. package/dist/compiler/teamContextTypes.d.ts +2 -0
  246. package/dist/compiler/types.d.ts +82 -1
  247. package/dist/compiler/upProject.d.ts +5 -0
  248. package/dist/compiler/upProject.js +257 -20
  249. package/dist/compiler/upReceipt.d.ts +36 -0
  250. package/dist/compiler/upReceipt.js +82 -0
  251. package/dist/compiler/updateProjectModels.js +42 -60
  252. package/dist/compiler/updateProjectRuntime.js +22 -35
  253. package/dist/compiler/updateProjectSurfaces.js +53 -47
  254. package/dist/compiler/worldBindings.d.ts +39 -0
  255. package/dist/compiler/worldBindings.js +247 -0
  256. package/dist/compiler/worldBindingsFile.d.ts +5 -0
  257. package/dist/compiler/worldBindingsFile.js +162 -0
  258. package/dist/deployment/artifactsExport.d.ts +49 -0
  259. package/dist/deployment/artifactsExport.js +217 -0
  260. package/dist/deployment/artifactsExportDocker.d.ts +48 -0
  261. package/dist/deployment/artifactsExportDocker.js +91 -0
  262. package/dist/deployment/artifactsExportPlan.d.ts +24 -0
  263. package/dist/deployment/artifactsExportPlan.js +135 -0
  264. package/dist/deployment/artifactsExportTypes.d.ts +50 -0
  265. package/dist/deployment/artifactsExportTypes.js +52 -0
  266. package/dist/deployment/buildImageCacheStore.d.ts +23 -0
  267. package/dist/deployment/buildImageCacheStore.js +54 -0
  268. package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
  269. package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
  270. package/dist/deployment/dockerInspect.d.ts +9 -0
  271. package/dist/deployment/dockerInspect.js +24 -1
  272. package/dist/deployment/dockerLabels.d.ts +2 -0
  273. package/dist/deployment/dockerLabels.js +2 -0
  274. package/dist/deployment/dockerLogs.js +2 -10
  275. package/dist/deployment/dockerManager.d.ts +51 -0
  276. package/dist/deployment/dockerManager.js +118 -1
  277. package/dist/deployment/dockerProbeGateway.js +64 -5
  278. package/dist/deployment/dockerRecover.d.ts +17 -0
  279. package/dist/deployment/dockerRecover.js +137 -0
  280. package/dist/deployment/dockerTeardown.d.ts +32 -0
  281. package/dist/deployment/dockerTeardown.js +61 -0
  282. package/dist/deployment/downDeployment.d.ts +34 -0
  283. package/dist/deployment/downDeployment.js +147 -0
  284. package/dist/deployment/downReceiptTypes.d.ts +21 -0
  285. package/dist/deployment/downReceiptTypes.js +30 -0
  286. package/dist/deployment/index.d.ts +17 -0
  287. package/dist/deployment/index.js +18 -0
  288. package/dist/deployment/lifecycleCompletion.d.ts +37 -0
  289. package/dist/deployment/lifecycleCompletion.js +236 -0
  290. package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
  291. package/dist/deployment/lifecycleCompletionContracts.js +106 -0
  292. package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
  293. package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
  294. package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
  295. package/dist/deployment/lifecycleCompletionLookup.js +88 -0
  296. package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
  297. package/dist/deployment/lifecycleCompletionOwner.js +31 -0
  298. package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
  299. package/dist/deployment/lifecycleCompletionParsing.js +108 -0
  300. package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
  301. package/dist/deployment/lifecycleCompletionPaths.js +16 -0
  302. package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
  303. package/dist/deployment/lifecycleCompletionPublication.js +35 -0
  304. package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
  305. package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
  306. package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
  307. package/dist/deployment/lifecycleCompletionRoot.js +243 -0
  308. package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
  309. package/dist/deployment/lifecycleCompletionStore.js +151 -0
  310. package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
  311. package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
  312. package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
  313. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
  314. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
  315. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
  316. package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
  317. package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
  318. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
  319. package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
  320. package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
  321. package/dist/deployment/organizationHandoffTypes.js +80 -0
  322. package/dist/deployment/organizationReady.d.ts +52 -0
  323. package/dist/deployment/organizationReady.js +200 -0
  324. package/dist/deployment/privateArtifactsExport.d.ts +18 -0
  325. package/dist/deployment/privateArtifactsExport.js +80 -0
  326. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
  327. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
  328. package/dist/deployment/record.d.ts +26 -1
  329. package/dist/deployment/record.js +49 -4
  330. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
  331. package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
  332. package/dist/deployment/target.d.ts +1 -35
  333. package/dist/deployment/target.js +1 -96
  334. package/dist/deployment/upReceiptTypes.d.ts +111 -0
  335. package/dist/deployment/upReceiptTypes.js +164 -0
  336. package/dist/dev/activity.d.ts +14 -0
  337. package/dist/dev/activity.js +48 -0
  338. package/dist/dev/docker.d.ts +16 -0
  339. package/dist/dev/docker.js +71 -0
  340. package/dist/dev/index.d.ts +2 -0
  341. package/dist/dev/index.js +2 -0
  342. package/dist/dev/project.d.ts +35 -0
  343. package/dist/dev/project.js +170 -0
  344. package/dist/distribution/buildDistributionReport.d.ts +2 -1
  345. package/dist/distribution/buildDistributionReport.js +2 -1
  346. package/dist/distribution/distributionReportSchema.d.ts +5 -0
  347. package/dist/distribution/distributionReportSchema.js +7 -2
  348. package/dist/distribution/index.d.ts +2 -2
  349. package/dist/distribution/index.js +1 -1
  350. package/dist/distribution/types.d.ts +7 -0
  351. package/dist/distribution/types.js +1 -0
  352. package/dist/filesystem/paths.js +10 -1
  353. package/dist/ledger/causalConformanceCli.d.ts +1 -0
  354. package/dist/ledger/causalConformanceCli.js +41 -0
  355. package/dist/ledger/causeNamespace.d.ts +8 -0
  356. package/dist/ledger/causeNamespace.js +24 -0
  357. package/dist/ledger/conformance.d.ts +83 -0
  358. package/dist/ledger/conformance.js +259 -0
  359. package/dist/ledger/emitters.d.ts +76 -0
  360. package/dist/ledger/emitters.js +188 -0
  361. package/dist/ledger/index.d.ts +4 -0
  362. package/dist/ledger/index.js +4 -0
  363. package/dist/ledger/principal.d.ts +96 -0
  364. package/dist/ledger/principal.js +121 -0
  365. package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
  366. package/dist/manifest/externalParticipantSchemas.js +17 -0
  367. package/dist/manifest/index.d.ts +1 -0
  368. package/dist/manifest/index.js +1 -0
  369. package/dist/manifest/inlineAgentMember.d.ts +2 -0
  370. package/dist/manifest/inlineAgentMember.js +9 -0
  371. package/dist/manifest/loadManifest.js +14 -8
  372. package/dist/manifest/mcpSchemas.d.ts +17 -0
  373. package/dist/manifest/mcpSchemas.js +41 -0
  374. package/dist/manifest/memorySchemas.d.ts +245 -0
  375. package/dist/manifest/memorySchemas.js +148 -0
  376. package/dist/manifest/renderSpawnfile.js +22 -131
  377. package/dist/manifest/renderSpawnfileNetworks.js +9 -2
  378. package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
  379. package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
  380. package/dist/manifest/schemas.d.ts +1868 -99
  381. package/dist/manifest/schemas.js +78 -32
  382. package/dist/manifest/surfaceSchemas.d.ts +17 -0
  383. package/dist/manifest/surfaceSchemas.js +24 -1
  384. package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
  385. package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
  386. package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
  387. package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
  388. package/dist/manifest/teamNetworkSchemas.js +3 -317
  389. package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
  390. package/dist/manifest/teamNetworkServerSchemas.js +199 -0
  391. package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
  392. package/dist/ownership/siblingBuildFreshness.js +20 -0
  393. package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
  394. package/dist/ownership/simfileRunOperatorInputs.js +139 -0
  395. package/dist/report/types.d.ts +142 -0
  396. package/dist/runtime/common.d.ts +37 -0
  397. package/dist/runtime/common.js +56 -1
  398. package/dist/runtime/container.d.ts +29 -1
  399. package/dist/runtime/container.js +127 -11
  400. package/dist/runtime/containerPackageOverrides.d.ts +37 -0
  401. package/dist/runtime/containerPackageOverrides.js +33 -0
  402. package/dist/runtime/index.d.ts +2 -0
  403. package/dist/runtime/index.js +2 -0
  404. package/dist/runtime/install.d.ts +1 -1
  405. package/dist/runtime/install.js +43 -1
  406. package/dist/runtime/mnemeMcp.d.ts +15 -0
  407. package/dist/runtime/mnemeMcp.js +109 -0
  408. package/dist/runtime/openclaw/adapter.js +15 -4
  409. package/dist/runtime/openclaw/mcp.d.ts +10 -0
  410. package/dist/runtime/openclaw/mcp.js +69 -0
  411. package/dist/runtime/openclaw/runAuth.js +2 -2
  412. package/dist/runtime/openclaw/scaffold.js +1 -1
  413. package/dist/runtime/openclaw/schedules.d.ts +38 -0
  414. package/dist/runtime/openclaw/schedules.js +74 -0
  415. package/dist/runtime/pi/adapter.d.ts +4 -0
  416. package/dist/runtime/pi/adapter.js +231 -0
  417. package/dist/runtime/pi/appActivitySource.d.ts +1 -0
  418. package/dist/runtime/pi/appActivitySource.js +199 -0
  419. package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
  420. package/dist/runtime/pi/appAgentConfig.js +264 -0
  421. package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
  422. package/dist/runtime/pi/appCliEnginesSource.js +183 -0
  423. package/dist/runtime/pi/appCliSource.d.ts +1 -0
  424. package/dist/runtime/pi/appCliSource.js +353 -0
  425. package/dist/runtime/pi/appControlSource.d.ts +1 -0
  426. package/dist/runtime/pi/appControlSource.js +390 -0
  427. package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
  428. package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
  429. package/dist/runtime/pi/appCoreSource.d.ts +4 -0
  430. package/dist/runtime/pi/appCoreSource.js +244 -0
  431. package/dist/runtime/pi/appPreludeSource.d.ts +1 -0
  432. package/dist/runtime/pi/appPreludeSource.js +191 -0
  433. package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
  434. package/dist/runtime/pi/appScheduleSource.js +80 -0
  435. package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
  436. package/dist/runtime/pi/appScriptedEngine.js +42 -0
  437. package/dist/runtime/pi/appSource.d.ts +4 -0
  438. package/dist/runtime/pi/appSource.js +12 -0
  439. package/dist/runtime/pi/appTemplate.d.ts +14 -0
  440. package/dist/runtime/pi/appTemplate.js +27 -0
  441. package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
  442. package/dist/runtime/pi/appTemplateTypes.js +18 -0
  443. package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
  444. package/dist/runtime/pi/appWakeContextSource.js +398 -0
  445. package/dist/runtime/pi/containerTargets.d.ts +4 -0
  446. package/dist/runtime/pi/containerTargets.js +57 -0
  447. package/dist/runtime/pi/runAuth.d.ts +2 -0
  448. package/dist/runtime/pi/runAuth.js +185 -0
  449. package/dist/runtime/pi/testHelpers.d.ts +2 -0
  450. package/dist/runtime/pi/testHelpers.js +40 -0
  451. package/dist/runtime/picoclaw/adapter.js +23 -27
  452. package/dist/runtime/picoclaw/mcp.d.ts +4 -0
  453. package/dist/runtime/picoclaw/mcp.js +43 -0
  454. package/dist/runtime/picoclaw/memory.d.ts +7 -0
  455. package/dist/runtime/picoclaw/memory.js +17 -0
  456. package/dist/runtime/picoclaw/runAuth.js +1 -1
  457. package/dist/runtime/picoclaw/scaffold.js +1 -1
  458. package/dist/runtime/picoclaw/schedules.d.ts +26 -0
  459. package/dist/runtime/picoclaw/schedules.js +62 -3
  460. package/dist/runtime/registry.js +3 -0
  461. package/dist/runtime/scheduleUtils.d.ts +2 -0
  462. package/dist/runtime/scheduleUtils.js +15 -0
  463. package/dist/runtime/types.d.ts +26 -2
  464. package/dist/shared/errors.d.ts +1 -1
  465. package/dist/shared/errors.js +2 -2
  466. package/dist/shared/index.d.ts +1 -0
  467. package/dist/shared/index.js +1 -0
  468. package/dist/shared/redaction.d.ts +2 -0
  469. package/dist/shared/redaction.js +10 -0
  470. package/dist/status/buildStatus.d.ts +1 -0
  471. package/dist/status/buildStatus.js +2 -0
  472. package/dist/status/compileReport.d.ts +22 -0
  473. package/dist/status/compileReport.js +16 -2
  474. package/dist/status/compiledProbeCollection.d.ts +21 -0
  475. package/dist/status/compiledProbeCollection.js +27 -0
  476. package/dist/status/deployments.js +5 -12
  477. package/dist/status/imageStatusReport.js +6 -0
  478. package/dist/status/index.d.ts +3 -0
  479. package/dist/status/index.js +3 -0
  480. package/dist/status/lifecycleProbes.d.ts +19 -0
  481. package/dist/status/lifecycleProbes.js +174 -0
  482. package/dist/status/moltnetProbes.d.ts +7 -8
  483. package/dist/status/moltnetProbes.js +27 -198
  484. package/dist/status/moltnetWiringProbes.d.ts +19 -0
  485. package/dist/status/moltnetWiringProbes.js +178 -0
  486. package/dist/target/cleanupRun.d.ts +41 -0
  487. package/dist/target/cleanupRun.js +139 -0
  488. package/dist/target/cleanupRunDocker.d.ts +16 -0
  489. package/dist/target/cleanupRunDocker.js +66 -0
  490. package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
  491. package/dist/target/cleanupRunDocker.test-helper.js +238 -0
  492. package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
  493. package/dist/target/cleanupRunDockerPreflight.js +224 -0
  494. package/dist/target/composedPreparation.d.ts +205 -0
  495. package/dist/target/composedPreparation.js +223 -0
  496. package/dist/target/containerBundle.d.ts +82 -0
  497. package/dist/target/containerBundle.js +243 -0
  498. package/dist/target/containerBundleArchive.d.ts +31 -0
  499. package/dist/target/containerBundleArchive.js +140 -0
  500. package/dist/target/containerBundleAuthority.d.ts +25 -0
  501. package/dist/target/containerBundleAuthority.js +65 -0
  502. package/dist/target/containerBundleContracts.d.ts +114 -0
  503. package/dist/target/containerBundleContracts.js +173 -0
  504. package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
  505. package/dist/target/containerBundleFilesystemStore.js +247 -0
  506. package/dist/target/containerBundlePolicy.d.ts +33 -0
  507. package/dist/target/containerBundlePolicy.js +64 -0
  508. package/dist/target/containerBundleStore.d.ts +127 -0
  509. package/dist/target/containerBundleStore.js +284 -0
  510. package/dist/target/contracts.d.ts +538 -0
  511. package/dist/target/contracts.js +373 -0
  512. package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
  513. package/dist/target/dockerArtifactIdentityTypes.js +1 -0
  514. package/dist/target/dockerArtifactInspection.d.ts +40 -0
  515. package/dist/target/dockerArtifactInspection.js +125 -0
  516. package/dist/target/dockerArtifacts.d.ts +21 -0
  517. package/dist/target/dockerArtifacts.js +110 -0
  518. package/dist/target/dockerArtifactsProvider.d.ts +41 -0
  519. package/dist/target/dockerArtifactsProvider.js +449 -0
  520. package/dist/target/dockerCommandExecutor.d.ts +27 -0
  521. package/dist/target/dockerCommandExecutor.js +200 -0
  522. package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
  523. package/dist/target/dockerCommandExecutorCore.js +273 -0
  524. package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
  525. package/dist/target/dockerContainerBundleBuilder.js +256 -0
  526. package/dist/target/dockerContextSnapshot.d.ts +21 -0
  527. package/dist/target/dockerContextSnapshot.js +158 -0
  528. package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
  529. package/dist/target/dockerEndpointFingerprint.js +9 -0
  530. package/dist/target/dockerPreparedArtifact.d.ts +48 -0
  531. package/dist/target/dockerPreparedArtifact.js +131 -0
  532. package/dist/target/dockerProjectionJson.d.ts +1 -0
  533. package/dist/target/dockerProjectionJson.js +80 -0
  534. package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
  535. package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
  536. package/dist/target/dockerResources.d.ts +26 -0
  537. package/dist/target/dockerResources.js +162 -0
  538. package/dist/target/dockerResourcesProvider.d.ts +44 -0
  539. package/dist/target/dockerResourcesProvider.js +207 -0
  540. package/dist/target/dockerSecrets.d.ts +39 -0
  541. package/dist/target/dockerSecrets.js +249 -0
  542. package/dist/target/dockerSecretsAuthority.d.ts +26 -0
  543. package/dist/target/dockerSecretsAuthority.js +216 -0
  544. package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
  545. package/dist/target/dockerSecretsLifecycle.js +133 -0
  546. package/dist/target/dockerSecretsProvider.d.ts +68 -0
  547. package/dist/target/dockerSecretsProvider.js +329 -0
  548. package/dist/target/dockerTarget.d.ts +52 -0
  549. package/dist/target/dockerTarget.js +48 -0
  550. package/dist/target/dockerTargetBinding.d.ts +14 -0
  551. package/dist/target/dockerTargetBinding.js +96 -0
  552. package/dist/target/dockerWorldClock.d.ts +17 -0
  553. package/dist/target/dockerWorldClock.js +111 -0
  554. package/dist/target/dockerWorldReadiness.d.ts +17 -0
  555. package/dist/target/dockerWorldReadiness.js +119 -0
  556. package/dist/target/dockerWorldService.d.ts +23 -0
  557. package/dist/target/dockerWorldService.js +216 -0
  558. package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
  559. package/dist/target/dockerWorldServiceAuthority.js +182 -0
  560. package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
  561. package/dist/target/dockerWorldServiceLifecycle.js +275 -0
  562. package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
  563. package/dist/target/dockerWorldServiceProvider.js +318 -0
  564. package/dist/target/dockerWorldServiceStore.d.ts +73 -0
  565. package/dist/target/dockerWorldServiceStore.js +367 -0
  566. package/dist/target/evidenceExport.d.ts +55 -0
  567. package/dist/target/evidenceExport.js +518 -0
  568. package/dist/target/evidenceExportArchive.d.ts +10 -0
  569. package/dist/target/evidenceExportArchive.js +302 -0
  570. package/dist/target/evidenceExportContract.d.ts +27 -0
  571. package/dist/target/evidenceExportContract.js +40 -0
  572. package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
  573. package/dist/target/evidenceExportOperationsTestKit.js +312 -0
  574. package/dist/target/evidenceExportProvider.d.ts +85 -0
  575. package/dist/target/evidenceExportProvider.js +187 -0
  576. package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
  577. package/dist/target/evidenceExportPublicationTypes.js +1 -0
  578. package/dist/target/evidenceExportStore.d.ts +70 -0
  579. package/dist/target/evidenceExportStore.js +498 -0
  580. package/dist/target/evidenceExportStorePublication.d.ts +7 -0
  581. package/dist/target/evidenceExportStorePublication.js +395 -0
  582. package/dist/target/handles.d.ts +20 -0
  583. package/dist/target/handles.js +56 -0
  584. package/dist/target/index.d.ts +12 -0
  585. package/dist/target/index.js +11 -0
  586. package/dist/target/journal.d.ts +59 -0
  587. package/dist/target/journal.js +529 -0
  588. package/dist/target/journalFilesystem.d.ts +3 -0
  589. package/dist/target/journalFilesystem.js +111 -0
  590. package/dist/target/journalRoot.d.ts +4 -0
  591. package/dist/target/journalRoot.js +6 -0
  592. package/dist/target/organizationAttachment.d.ts +23 -0
  593. package/dist/target/organizationAttachment.js +263 -0
  594. package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
  595. package/dist/target/organizationAttachmentAuthority.js +161 -0
  596. package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
  597. package/dist/target/organizationAttachmentLifecycle.js +101 -0
  598. package/dist/target/organizationAttachmentProvider.d.ts +76 -0
  599. package/dist/target/organizationAttachmentProvider.js +289 -0
  600. package/dist/target/organizationAttachmentStore.d.ts +51 -0
  601. package/dist/target/organizationAttachmentStore.js +316 -0
  602. package/dist/target/publicArtifactSnapshot.d.ts +41 -0
  603. package/dist/target/publicArtifactSnapshot.js +150 -0
  604. package/dist/target/topologyActivation.d.ts +51 -0
  605. package/dist/target/topologyActivation.js +149 -0
  606. package/dist/target/topologyAttestation.d.ts +37 -0
  607. package/dist/target/topologyAttestation.js +300 -0
  608. package/dist/target/topologyAttestationErrors.d.ts +1 -0
  609. package/dist/target/topologyAttestationErrors.js +1 -0
  610. package/dist/target/worldClock.d.ts +60 -0
  611. package/dist/target/worldClock.js +129 -0
  612. package/dist/target/worldReadiness.d.ts +103 -0
  613. package/dist/target/worldReadiness.js +153 -0
  614. package/moltnet-releases.json +20 -0
  615. package/package.json +29 -8
  616. package/runtimes.yaml +28 -27
  617. package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
  618. package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
  619. /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
  620. /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
package/README.md CHANGED
@@ -20,6 +20,26 @@ It's not a runtime-to-runtime translator. The compiler starts from the canonical
20
20
 
21
21
  Pairs with [**Moltnet**](https://moltnet.dev) as the first provider for `team.networks[]`, letting compiled agents share declared rooms, DMs, and history across runtimes without Spawnfile injecting its own message router.
22
22
 
23
+ For a Simfile linked to a Spawnfile, the product entrypoint is owned by
24
+ Simfile:
25
+
26
+ ```bash
27
+ simfile run ./Simfile --view
28
+ ```
29
+
30
+ That command delegates only organization lifecycle operations to Spawnfile's
31
+ public CLI and versioned receipts. Spawnfile prepares target resources,
32
+ deploys the organization, records the pinned Pi-bridge Moltnet identity,
33
+ exports evidence, and cleans up; it does not carry simulation behavior or
34
+ trigger cognition. The world reaches paused/pristine readiness first, the
35
+ organization starts second, and one attested activation releases independent
36
+ world ticks and organization-owned schedules. A separately manifested
37
+ `simfile.world-decision-claim.v1` capability may extend the base world-sidecar
38
+ ABI without changing it. See
39
+ [`specs/ECOSYSTEM_RUNTIME_BOUNDARIES.md`](specs/ECOSYSTEM_RUNTIME_BOUNDARIES.md)
40
+ for ownership and [`specs/TARGETS.md`](specs/TARGETS.md) for target, auth,
41
+ Moltnet pinning, recovery, and cleanup contracts.
42
+
23
43
  ## Install
24
44
 
25
45
  ```bash
@@ -40,17 +60,50 @@ spawnfile compile # lower to runtime-native outpu
40
60
  spawnfile status . # read declared/compiled status
41
61
  spawnfile auth sync --profile dev --env-file .env
42
62
  spawnfile build --tag my-agent # compile + docker build
63
+ spawnfile up . --context gpu-4090 --detach # build and run on a Docker context
64
+ spawnfile dev up . --auth-profile dev # detached dev loop in .spawn-dev
65
+ spawnfile dev apply . --agent researcher # hot-add/reload one Pi agent
66
+ spawnfile dev activity . --agent researcher # inspect buffered Pi activity events
43
67
  spawnfile run --tag my-agent --auth-profile dev --detach
44
68
  spawnfile status . --live # inspect the detached deployment
45
69
  spawnfile publish . --tag you/my-agent:1.0.0 # compile + build + verify + push
46
70
  ```
47
71
 
48
- Compiled output lands under `.spawn/` by default, including a `Dockerfile`, `entrypoint.sh`, `.env.example`, and a prebuilt `container/rootfs/` tree. `spawnfile build` uses the pinned runtime artifacts from `runtimes.yaml`; it does not rebuild runtimes from source.
72
+ Compiled output lands under `.spawn/` by default, including a `Dockerfile`, `entrypoint.sh`, `.env.example`, and a prebuilt `container/rootfs/` tree. `spawnfile build` uses the pinned runtime artifacts from `runtimes.yaml`; it does not rebuild runtimes from source. Daimon, OpenClaw, and PicoClaw use published copyable artifact images by default, so normal prompt/config edits reuse their dependency layers. To test a local runtime artifact instead, set `SPAWNFILE_DAIMON_RUNTIME_IMAGE`, `SPAWNFILE_OPENCLAW_RUNTIME_IMAGE`, or `SPAWNFILE_PICOCLAW_RUNTIME_IMAGE` to a local image tag. For `build`/`up` on a docker `--context`, Moltnet release assets are staged for that context's architecture (`amd64` or `arm64`); for local-only manual compile targeting a fixed architecture, set `SPAWNFILE_MOLTNET_TARGET_ARCH=amd64|arm64`.
73
+
74
+ `spawnfile status` is read-only. By default it shows authored and compiled state without Docker, runtime, or Moltnet calls. With `--live`, it reads the selected detached deployment record, inspects the recorded Docker target, runs adapter-owned runtime probes, and checks Moltnet metadata without reading message bodies. Add `--logs` for a redacted Docker log tail, or `--watch` to refresh status continuously. For a remote Docker context where the local record is missing, pass `--context <name>` with `--live` to recover the deployment from Spawnfile container labels.
49
75
 
50
- `spawnfile status` is read-only. By default it shows authored and compiled state without Docker, runtime, or Moltnet calls. With `--live`, it reads the selected detached deployment record, inspects the recorded Docker target, runs adapter-owned runtime probes, and checks Moltnet metadata without reading message bodies. Add `--logs` for a redacted Docker log tail, or `--watch` to refresh status continuously.
76
+ `spawnfile dev` is the source-backed interactive loop. It uses `.spawn-dev/` by default, starts a detached dev deployment with `spawnfile dev up`, and can hot-apply one Daimon runtime agent with `spawnfile dev apply --agent <id>` without restarting the rest of the org. Hot apply recompiles source, copies the selected agent workspace, Daimon config, matching Moltnet node configs, and managed Moltnet server configs into the running container, loads it through the Daimon control endpoint, and starts only that agent's Moltnet bridges when it is new. `spawnfile dev activity` reads the generated Daimon app's bounded activity buffer as JSON lines so operators can see queued wakes, turn starts/completions, runtime event types, output completions, and errors without mixing those diagnostics into Moltnet chat. Running managed Moltnet servers keep their current in-memory room membership until an operator-token `moltnet apply` or server restart reconciles the copied server config.
51
77
 
52
78
  Compiled images are self-describing: `spawnfile publish` pushes one to any OCI registry, and anyone can run it with no source — `spawnfile up you/my-agent:1.0.0 --deployment prod --detach --auth-profile me` — or inspect what it needs first with `spawnfile status you/my-agent:1.0.0`. See [`specs/DISTRIBUTION.md`](specs/DISTRIBUTION.md).
53
79
 
80
+ ### Target adapter CLI
81
+
82
+ `spawnfile target` is the explicit, non-interactive target-adapter boundary for
83
+ an external orchestrator. It takes one absolute request JSON file and one
84
+ strict private configuration object on standard input — never a configuration
85
+ path or inline configuration:
86
+
87
+ ```bash
88
+ target-config-producer | spawnfile target --config - create_data_network /absolute/path/request.json
89
+ ```
90
+
91
+ On success it writes exactly one canonical JSON receipt followed by a newline.
92
+
93
+ For a crash-safe machine caller handoff, project-mode `up --json`, `artifacts export
94
+ --json`, and `down --json` accept `--lifecycle-invocation lci_<stable-id>`. Spawnfile
95
+ binds that id to the exact operation, correlation, and request policy, atomically stores
96
+ the exact JSON bytes after the owner returns and before stdout, and rejects reuse with
97
+ drift. `spawnfile lifecycle lookup <id>` is read-only and returns one versioned state:
98
+ `not_applied`, `pending`, `completed`, or `ambiguous`, without Docker/provider
99
+ inspection. Recovery only resumes an operation when that command verifies exact durable
100
+ evidence that resumption is safe; otherwise it seals `ambiguous` and fails closed.
101
+ It writes no secret values to output or diagnostics. The full verb list,
102
+ request/receipt contract, and exit behavior are in [`specs/TARGETS.md`](specs/TARGETS.md).
103
+ `target lookup_operation` accepts the original mutation request with a minimal
104
+ read-only context config and reports `completed`, `pending`, or `not_applied`
105
+ without calling the target provider or changing its journal.
106
+
54
107
  Declare external credentials in `secrets:` and provide values through an ignored env file or the shell environment. `spawnfile auth sync --env-file .env` stores declared model auth and project secrets in a local auth profile; `spawnfile run --env-file .env` can inject the same values directly for a single run. This is the intended pattern for credentials like `GH_TOKEN`, MCP tokens, and provider API keys.
55
108
 
56
109
  ## Project structure
@@ -98,8 +151,7 @@ v0.1 targets autonomous agent runtimes that share a markdown workspace identity
98
151
  |-----------|---------------|---------|-----------------------------------------------|
99
152
  | OpenClaw | active | ✅ | Discord, Telegram, WhatsApp, Slack |
100
153
  | PicoClaw | active | | Discord, Telegram, Slack (WhatsApp blocked) |
101
- | NullClaw | exploratory | | No active adapter yet |
102
- | ZeroClaw | exploratory | | No active adapter yet |
154
+ | Pi | active | | Embedded org app, Moltnet client config |
103
155
  | OpenFang | exploratory | | No active adapter yet |
104
156
  | Hermes Agent | exploratory | | No active adapter yet |
105
157
  | OpenCode | exploratory | | No active adapter yet |
@@ -124,7 +176,7 @@ The source-of-truth specs live in this repo:
124
176
  - [`specs/SURFACES.md`](specs/SURFACES.md) — messaging surface model
125
177
  - [`specs/STATUS.md`](specs/STATUS.md) — static and live operational status
126
178
  - [`specs/DISTRIBUTION.md`](specs/DISTRIBUTION.md) — image distribution, publish, and sourceless run
127
- - [`fixtures/`](fixtures/) — canonical example projects
179
+ - [`test/fixtures/`](test/fixtures/) — canonical example projects
128
180
 
129
181
  ## From source
130
182
 
@@ -137,16 +189,10 @@ npm run build
137
189
  npm link
138
190
  ```
139
191
 
140
- To clone pinned runtimes and generate reference blueprints:
141
-
142
- ```bash
143
- npm run runtimes:sync
144
- ```
145
-
146
192
  For local development without linking globally:
147
193
 
148
194
  ```bash
149
- npm run dev -- validate fixtures/single-agent
195
+ npm run dev -- validate test/fixtures/single-agent
150
196
  ```
151
197
 
152
198
  ## Contributing
@@ -0,0 +1,19 @@
1
+ export interface AuditCliOptions {
2
+ compiledOutput?: string;
3
+ fixtures?: string;
4
+ ledger?: string;
5
+ out?: string;
6
+ requiredSecret?: string[];
7
+ }
8
+ /**
9
+ * `npm run audit:generate` entry point / `tsx src/audit/auditCli.ts`. Two
10
+ * input modes: `--fixtures <dir>` treats one directory as BOTH the
11
+ * compiled-output root (`Dockerfile`/`entrypoint.sh`/`runtime/app.mjs`) and
12
+ * the ledger root (`*.jsonl` + `expected-denials.json`) — the shape every
13
+ * `src/audit/fixtures/<name>/` directory uses. `--compiled-output <dir>` /
14
+ * `--ledger <dir>` set them independently, for a real `spawnfile compile`
15
+ * output paired with a separately-located ledger capture. Prints the report
16
+ * JSON to stdout (or writes it to `--out <path>`), a one-line summary to
17
+ * stderr, and exits 1 if any check failed.
18
+ */
19
+ export declare const runAuditCli: (argv: string[]) => Promise<void>;
@@ -0,0 +1,63 @@
1
+ import { writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { Command } from "commander";
4
+ import { generateAudit } from "./generateAudit.js";
5
+ const collectRepeatable = (value, previous) => [...previous, value];
6
+ /**
7
+ * `npm run audit:generate` entry point / `tsx src/audit/auditCli.ts`. Two
8
+ * input modes: `--fixtures <dir>` treats one directory as BOTH the
9
+ * compiled-output root (`Dockerfile`/`entrypoint.sh`/`runtime/app.mjs`) and
10
+ * the ledger root (`*.jsonl` + `expected-denials.json`) — the shape every
11
+ * `src/audit/fixtures/<name>/` directory uses. `--compiled-output <dir>` /
12
+ * `--ledger <dir>` set them independently, for a real `spawnfile compile`
13
+ * output paired with a separately-located ledger capture. Prints the report
14
+ * JSON to stdout (or writes it to `--out <path>`), a one-line summary to
15
+ * stderr, and exits 1 if any check failed.
16
+ */
17
+ export const runAuditCli = async (argv) => {
18
+ const command = new Command();
19
+ command
20
+ .name("spawnfile audit:generate")
21
+ .description("Generate a deterministic offline spawnfile.audit.v1 security-audit report")
22
+ .option("--fixtures <dir>", "Directory used as both the compiled-output and ledger root")
23
+ .option("--compiled-output <dir>", "Compiled-output directory (Dockerfile/entrypoint.sh/runtime/app.mjs)")
24
+ .option("--ledger <dir>", "Ledger directory (*.jsonl + expected-denials.json)")
25
+ .option("--required-secret <name>", "Required secret env var name (repeatable)", collectRepeatable, [])
26
+ .option("--out <path>", "Write the report JSON to this path instead of stdout");
27
+ await command.parseAsync(argv, { from: "user" });
28
+ const options = command.opts();
29
+ const compiledOutputDirPath = options.compiledOutput ?? options.fixtures;
30
+ const ledgerDirPath = options.ledger ?? options.fixtures;
31
+ if (!compiledOutputDirPath) {
32
+ throw new Error("audit:generate requires --fixtures <dir> or --compiled-output <dir>");
33
+ }
34
+ const report = await generateAudit({
35
+ compiledOutputDirPath,
36
+ ledgerDirPath,
37
+ requiredSecrets: options.requiredSecret
38
+ });
39
+ const json = `${JSON.stringify(report, null, 2)}\n`;
40
+ if (options.out) {
41
+ await writeFile(path.resolve(options.out), json, "utf8");
42
+ }
43
+ else {
44
+ process.stdout.write(json);
45
+ }
46
+ process.stderr.write(`spawnfile audit: ${report.summary.passed} passed, ${report.summary.failed} failed, ${report.summary.na} n/a\n`);
47
+ if (report.summary.failed > 0) {
48
+ process.exitCode = 1;
49
+ }
50
+ };
51
+ // Only run when invoked directly (`tsx src/audit/auditCli.ts ...`), never on
52
+ // import — this keeps `runAuditCli` safely testable in isolation. Not
53
+ // unit-testable itself (import.meta.url never equals process.argv[1] under
54
+ // vitest), mirroring how src/ledger/causalConformanceCli.ts's own bottom
55
+ // bootstrap is excluded from coverage.
56
+ /* v8 ignore start -- process entrypoint bootstrap, exercised by `npm run audit:generate` / the CLI-run validate step, not by unit tests */
57
+ if (import.meta.url === `file://${process.argv[1]}`) {
58
+ runAuditCli(process.argv.slice(2)).catch((error) => {
59
+ process.stderr.write(`${error instanceof Error ? (error.stack ?? error.message) : String(error)}\n`);
60
+ process.exitCode = 1;
61
+ });
62
+ }
63
+ /* v8 ignore stop */
@@ -0,0 +1,100 @@
1
+ import type { RunLedgerEvidence, StaticContainerEvidence } from "./checksShared.js";
2
+ import type { AuditCheck } from "./types.js";
3
+ export type { RunLedgerEvidence, StaticContainerEvidence } from "./checksShared.js";
4
+ /**
5
+ * Check 1 — `causal.principals-authenticated` (run). Grounded in
6
+ * `runRealConformance` reporting zero issues over the ledger jsonl, and in
7
+ * `isAuthenticatedPrincipal` (src/ledger/principal.ts:87) rejecting a bare,
8
+ * literal-`anonymous`, or `system:moltnet.anonymous` principal
9
+ * (principal.ts:45,93). Fails on either a nonempty `issues` list (any
10
+ * schema/seq/payload/principal/chain problem `runRealConformance` found) or
11
+ * an event whose `principal_id` is not authenticated — evidence names the
12
+ * offending event and principal directly rather than relying on issue-
13
+ * message string matching.
14
+ */
15
+ export declare const checkPrincipalsAuthenticated: (evidence: RunLedgerEvidence | undefined) => AuditCheck;
16
+ /**
17
+ * Check 2 — `causal.denied-ledger-visible` (run). Grounded in
18
+ * `DEFAULT_PAYLOAD_MINIMUMS` (conformance.ts:67-69) for every `*.denied`
19
+ * type: any such event that appears must carry its required keys. Also
20
+ * detects a silent drop — this fixture's `expected-denials.json` asserted a
21
+ * denial type occurred, but no matching `*.denied` event exists in the
22
+ * ledger — which fails even when every event that *is* present is well
23
+ * shaped.
24
+ *
25
+ * `not_applicable`, never `pass`, when there is no `expected-denials.json`
26
+ * manifest AND zero `*.denied` events are present in the ledger — with
27
+ * neither an assertion to check against nor an event to inspect, there is
28
+ * nothing here to actually assess (see AGENTS.md's cardinal rule: absent
29
+ * evidence is `not_applicable`, never `pass`). A manifest being present is
30
+ * enough to keep evaluating (silent-drop detection needs no observed event
31
+ * to fire), and any `*.denied` event that *is* present is always
32
+ * key-validated regardless of manifest presence.
33
+ */
34
+ export declare const checkDeniedLedgerVisible: (evidence: RunLedgerEvidence | undefined) => AuditCheck;
35
+ /**
36
+ * Check 3 — `control.wake-fail-closed` (static). Grounded in
37
+ * appControlSource.ts:31-47 (B62 Option B): the operator wake endpoint must
38
+ * fail closed when `SPAWNFILE_PI_CONTROL_TOKEN` is unset, never treat an
39
+ * unset token as "auth disabled". Passes only when the compiled Pi app
40
+ * source references the token env, contains the verbatim fail-closed
41
+ * rejection text, and never bakes a literal default value for it.
42
+ */
43
+ export declare const checkControlWakeFailClosed: (evidence: StaticContainerEvidence) => AuditCheck;
44
+ /**
45
+ * Check 4 — `container.no-baked-secrets` (static). Grounded in
46
+ * containerEntrypointRender.ts:232-233: every required secret is emitted as
47
+ * a `require_env <name>` runtime check, never a literal value baked into the
48
+ * Dockerfile build layer or the entrypoint script. Passes only when every
49
+ * `requiredSecrets` name is `require_env`-guarded in the entrypoint AND no
50
+ * name is ever followed by a literal (non-`$`) assignment anywhere in the
51
+ * compiled Dockerfile/entrypoint text.
52
+ */
53
+ export declare const checkContainerNoBakedSecrets: (evidence: StaticContainerEvidence) => AuditCheck;
54
+ /**
55
+ * Check 5 — `memory.cross-scope-capability` (run). Grounded in mneme's
56
+ * `mneme.cap.system.v1` foreign-scope escalation capability
57
+ * (ecosystem/mneme/src/policy/capability.ts:28) and the
58
+ * `memory.write.denied` payload minimum (conformance.ts:68:
59
+ * `requested_scope`, `reason`). `mneme.cap.system.v1` is carried as an
60
+ * informational `grounding` string only — this function performs no static
61
+ * check against mneme's source, so the status is never driven by that
62
+ * literal.
63
+ *
64
+ * `not_applicable`, never `pass`, when no `memory.write.denied` event is
65
+ * present in the ledger: enforcement was never exercised in this run, and
66
+ * "nothing to violate" is not evidence the capability guard works (see
67
+ * AGENTS.md). When one or more denial events are present, every one must
68
+ * carry both `requested_scope` and `reason` to pass.
69
+ */
70
+ export declare const checkMemoryCrossScopeCapability: (evidence: RunLedgerEvidence | undefined) => AuditCheck;
71
+ /**
72
+ * Check 6 — `network.non-member-write-denied` (run). Grounded in moltnet's
73
+ * `writeForbiddenError` (ecosystem/moltnet/internal/rooms/access_policy.go:23,71-72)
74
+ * and the `message.denied` payload minimum (conformance.ts:67: `target`,
75
+ * `reason`, `content_sha256`). The `writeForbiddenError` path is carried as
76
+ * an informational `grounding` string only — this function performs no
77
+ * static check against moltnet's source, so the status is never driven by
78
+ * that literal.
79
+ *
80
+ * `not_applicable`, never `pass`, when no `message.denied` event is present:
81
+ * non-member-write enforcement was never exercised in this run, which is not
82
+ * evidence it works (see AGENTS.md). When one or more denial events are
83
+ * present, every one must carry `target`, `reason`, and `content_sha256` to
84
+ * pass.
85
+ */
86
+ export declare const checkNonMemberWriteDenied: (evidence: RunLedgerEvidence | undefined) => AuditCheck;
87
+ /**
88
+ * Check 7 — `provenance.signed-report` — always `not_applicable`. Report
89
+ * signing/provenance is deferred to B66; this audit generator has no
90
+ * signing input to check and must never claim it. Takes no evidence input
91
+ * on purpose: there is nothing yet for it to inspect.
92
+ */
93
+ export declare const checkProvenanceSignedReport: () => AuditCheck;
94
+ /**
95
+ * The seven check ids in the order `generateAudit.ts` assembles
96
+ * `AuditReport.checks` in (each check function above takes a different
97
+ * evidence shape, so this is a documentation/ordering list only — not a
98
+ * uniformly-callable array).
99
+ */
100
+ export declare const AUDIT_CHECK_IDS: readonly ["causal.principals-authenticated", "causal.denied-ledger-visible", "control.wake-fail-closed", "container.no-baked-secrets", "memory.cross-scope-capability", "network.non-member-write-denied", "provenance.signed-report"];
@@ -0,0 +1,279 @@
1
+ // Not re-exported by src/ledger/index.js's barrel (see conformance.ts, which
2
+ // also imports it directly from principal.js rather than through the
3
+ // barrel); mirrored here for the same reason.
4
+ import { isAuthenticatedPrincipal } from "../ledger/principal.js";
5
+ import { CONTROL_TOKEN_ENV, DENIAL_MINIMUMS_BY_TYPE, escapeRegExp, FAIL_CLOSED_MARKER, literalAssignmentPattern, missingRequiredKeys, notApplicable, statusFor } from "./checksShared.js";
6
+ /**
7
+ * Check 1 — `causal.principals-authenticated` (run). Grounded in
8
+ * `runRealConformance` reporting zero issues over the ledger jsonl, and in
9
+ * `isAuthenticatedPrincipal` (src/ledger/principal.ts:87) rejecting a bare,
10
+ * literal-`anonymous`, or `system:moltnet.anonymous` principal
11
+ * (principal.ts:45,93). Fails on either a nonempty `issues` list (any
12
+ * schema/seq/payload/principal/chain problem `runRealConformance` found) or
13
+ * an event whose `principal_id` is not authenticated — evidence names the
14
+ * offending event and principal directly rather than relying on issue-
15
+ * message string matching.
16
+ */
17
+ export const checkPrincipalsAuthenticated = (evidence) => {
18
+ const id = "causal.principals-authenticated";
19
+ const category = "causal";
20
+ const severity = "critical";
21
+ if (!evidence) {
22
+ return notApplicable(id, category, severity, "no run artifacts provided");
23
+ }
24
+ const offendingPrincipals = evidence.events
25
+ .filter((event) => !isAuthenticatedPrincipal(event.principal_id))
26
+ .map((event) => ({ event_id: event.event_id, principal_id: event.principal_id }));
27
+ return {
28
+ category,
29
+ evidence: {
30
+ eventCount: evidence.eventCount,
31
+ issueCount: evidence.issues.length,
32
+ offendingPrincipals,
33
+ sources: evidence.sources
34
+ },
35
+ id,
36
+ severity,
37
+ status: statusFor(evidence.issues.length === 0 && offendingPrincipals.length === 0)
38
+ };
39
+ };
40
+ /**
41
+ * Check 2 — `causal.denied-ledger-visible` (run). Grounded in
42
+ * `DEFAULT_PAYLOAD_MINIMUMS` (conformance.ts:67-69) for every `*.denied`
43
+ * type: any such event that appears must carry its required keys. Also
44
+ * detects a silent drop — this fixture's `expected-denials.json` asserted a
45
+ * denial type occurred, but no matching `*.denied` event exists in the
46
+ * ledger — which fails even when every event that *is* present is well
47
+ * shaped.
48
+ *
49
+ * `not_applicable`, never `pass`, when there is no `expected-denials.json`
50
+ * manifest AND zero `*.denied` events are present in the ledger — with
51
+ * neither an assertion to check against nor an event to inspect, there is
52
+ * nothing here to actually assess (see AGENTS.md's cardinal rule: absent
53
+ * evidence is `not_applicable`, never `pass`). A manifest being present is
54
+ * enough to keep evaluating (silent-drop detection needs no observed event
55
+ * to fire), and any `*.denied` event that *is* present is always
56
+ * key-validated regardless of manifest presence.
57
+ */
58
+ export const checkDeniedLedgerVisible = (evidence) => {
59
+ const id = "causal.denied-ledger-visible";
60
+ const category = "causal";
61
+ const severity = "high";
62
+ if (!evidence) {
63
+ return notApplicable(id, category, severity, "no run artifacts provided");
64
+ }
65
+ const presentDenials = evidence.events.filter((event) => DENIAL_MINIMUMS_BY_TYPE.has(event.type));
66
+ if (!evidence.manifestPresent && presentDenials.length === 0) {
67
+ return notApplicable(id, category, severity, "no denial events and no expected-denials manifest; cannot assess silent-drop");
68
+ }
69
+ const malformed = presentDenials
70
+ .map((event) => ({
71
+ event_id: event.event_id,
72
+ /* v8 ignore next -- presentDenials already filtered by DENIAL_MINIMUMS_BY_TYPE.has(event.type), so .get() always hits; defensive fallback only */
73
+ missingKeys: missingRequiredKeys(event, DENIAL_MINIMUMS_BY_TYPE.get(event.type) ?? []),
74
+ type: event.type
75
+ }))
76
+ .filter((entry) => entry.missingKeys.length > 0);
77
+ const presentTypes = new Set(presentDenials.map((event) => event.type));
78
+ const silentlyDropped = evidence.expectedDenialTypes.filter((type) => !presentTypes.has(type));
79
+ return {
80
+ category,
81
+ evidence: {
82
+ deniedEventCount: presentDenials.length,
83
+ expectedDenialTypes: evidence.expectedDenialTypes,
84
+ malformed,
85
+ silentlyDropped
86
+ },
87
+ id,
88
+ severity,
89
+ status: statusFor(malformed.length === 0 && silentlyDropped.length === 0)
90
+ };
91
+ };
92
+ /**
93
+ * Check 3 — `control.wake-fail-closed` (static). Grounded in
94
+ * appControlSource.ts:31-47 (B62 Option B): the operator wake endpoint must
95
+ * fail closed when `SPAWNFILE_PI_CONTROL_TOKEN` is unset, never treat an
96
+ * unset token as "auth disabled". Passes only when the compiled Pi app
97
+ * source references the token env, contains the verbatim fail-closed
98
+ * rejection text, and never bakes a literal default value for it.
99
+ */
100
+ export const checkControlWakeFailClosed = (evidence) => {
101
+ const combined = `${evidence.dockerfile}\n${evidence.entrypoint}\n${evidence.piAppSource}`;
102
+ const tokenReferenced = combined.includes(CONTROL_TOKEN_ENV);
103
+ const failClosedMarkerFound = evidence.piAppSource.includes(FAIL_CLOSED_MARKER);
104
+ const bakedDefaultFound = literalAssignmentPattern(CONTROL_TOKEN_ENV).test(combined);
105
+ return {
106
+ category: "control",
107
+ evidence: {
108
+ bakedDefaultFound,
109
+ envSourceList: [CONTROL_TOKEN_ENV],
110
+ failClosedMarkerFound,
111
+ tokenReferenced
112
+ },
113
+ id: "control.wake-fail-closed",
114
+ severity: "critical",
115
+ status: statusFor(tokenReferenced && failClosedMarkerFound && !bakedDefaultFound)
116
+ };
117
+ };
118
+ /**
119
+ * Check 4 — `container.no-baked-secrets` (static). Grounded in
120
+ * containerEntrypointRender.ts:232-233: every required secret is emitted as
121
+ * a `require_env <name>` runtime check, never a literal value baked into the
122
+ * Dockerfile build layer or the entrypoint script. Passes only when every
123
+ * `requiredSecrets` name is `require_env`-guarded in the entrypoint AND no
124
+ * name is ever followed by a literal (non-`$`) assignment anywhere in the
125
+ * compiled Dockerfile/entrypoint text.
126
+ */
127
+ export const checkContainerNoBakedSecrets = (evidence) => {
128
+ const combined = `${evidence.dockerfile}\n${evidence.entrypoint}`;
129
+ const missingRequireEnv = evidence.requiredSecrets.filter((name) => !new RegExp(`require_env\\s+['"]${escapeRegExp(name)}['"]`, "u").test(evidence.entrypoint));
130
+ const bakedLiteralValues = evidence.requiredSecrets.filter((name) => literalAssignmentPattern(name).test(combined));
131
+ return {
132
+ category: "container",
133
+ evidence: {
134
+ bakedLiteralValues,
135
+ missingRequireEnv,
136
+ requiredSecrets: evidence.requiredSecrets
137
+ },
138
+ id: "container.no-baked-secrets",
139
+ severity: "critical",
140
+ status: statusFor(missingRequireEnv.length === 0 && bakedLiteralValues.length === 0)
141
+ };
142
+ };
143
+ /**
144
+ * Check 5 — `memory.cross-scope-capability` (run). Grounded in mneme's
145
+ * `mneme.cap.system.v1` foreign-scope escalation capability
146
+ * (ecosystem/mneme/src/policy/capability.ts:28) and the
147
+ * `memory.write.denied` payload minimum (conformance.ts:68:
148
+ * `requested_scope`, `reason`). `mneme.cap.system.v1` is carried as an
149
+ * informational `grounding` string only — this function performs no static
150
+ * check against mneme's source, so the status is never driven by that
151
+ * literal.
152
+ *
153
+ * `not_applicable`, never `pass`, when no `memory.write.denied` event is
154
+ * present in the ledger: enforcement was never exercised in this run, and
155
+ * "nothing to violate" is not evidence the capability guard works (see
156
+ * AGENTS.md). When one or more denial events are present, every one must
157
+ * carry both `requested_scope` and `reason` to pass.
158
+ */
159
+ export const checkMemoryCrossScopeCapability = (evidence) => {
160
+ const id = "memory.cross-scope-capability";
161
+ const category = "memory";
162
+ const severity = "high";
163
+ if (!evidence) {
164
+ return notApplicable(id, category, severity, "no run artifacts provided");
165
+ }
166
+ const denials = evidence.events.filter((event) => event.type === "memory.write.denied");
167
+ if (denials.length === 0) {
168
+ return {
169
+ category,
170
+ evidence: {
171
+ deniedEventCount: 0,
172
+ reason: "no memory.write.denied events observed; cross-scope enforcement was not exercised in this run"
173
+ },
174
+ id,
175
+ severity,
176
+ status: "not_applicable"
177
+ };
178
+ }
179
+ /* v8 ignore next -- "memory.write.denied" is always in DEFAULT_PAYLOAD_MINIMUMS (conformance.ts:68); defensive fallback only */
180
+ const requiredKeys = DENIAL_MINIMUMS_BY_TYPE.get("memory.write.denied") ?? [];
181
+ const malformed = denials
182
+ .map((event) => ({
183
+ event_id: event.event_id,
184
+ missingKeys: missingRequiredKeys(event, requiredKeys),
185
+ requested_scope: event.payload.requested_scope,
186
+ reason: event.payload.reason
187
+ }))
188
+ .filter((entry) => entry.missingKeys.length > 0);
189
+ return {
190
+ category,
191
+ evidence: {
192
+ deniedEventCount: denials.length,
193
+ grounding: "mneme.cap.system.v1",
194
+ malformed
195
+ },
196
+ id,
197
+ severity,
198
+ status: statusFor(malformed.length === 0)
199
+ };
200
+ };
201
+ /**
202
+ * Check 6 — `network.non-member-write-denied` (run). Grounded in moltnet's
203
+ * `writeForbiddenError` (ecosystem/moltnet/internal/rooms/access_policy.go:23,71-72)
204
+ * and the `message.denied` payload minimum (conformance.ts:67: `target`,
205
+ * `reason`, `content_sha256`). The `writeForbiddenError` path is carried as
206
+ * an informational `grounding` string only — this function performs no
207
+ * static check against moltnet's source, so the status is never driven by
208
+ * that literal.
209
+ *
210
+ * `not_applicable`, never `pass`, when no `message.denied` event is present:
211
+ * non-member-write enforcement was never exercised in this run, which is not
212
+ * evidence it works (see AGENTS.md). When one or more denial events are
213
+ * present, every one must carry `target`, `reason`, and `content_sha256` to
214
+ * pass.
215
+ */
216
+ export const checkNonMemberWriteDenied = (evidence) => {
217
+ const id = "network.non-member-write-denied";
218
+ const category = "network";
219
+ const severity = "high";
220
+ if (!evidence) {
221
+ return notApplicable(id, category, severity, "no run artifacts provided");
222
+ }
223
+ const denials = evidence.events.filter((event) => event.type === "message.denied");
224
+ if (denials.length === 0) {
225
+ return {
226
+ category,
227
+ evidence: {
228
+ deniedEventCount: 0,
229
+ reason: "no message.denied events observed; non-member write enforcement was not exercised in this run"
230
+ },
231
+ id,
232
+ severity,
233
+ status: "not_applicable"
234
+ };
235
+ }
236
+ /* v8 ignore next -- "message.denied" is always in DEFAULT_PAYLOAD_MINIMUMS (conformance.ts:67); defensive fallback only */
237
+ const requiredKeys = DENIAL_MINIMUMS_BY_TYPE.get("message.denied") ?? [];
238
+ const malformed = denials
239
+ .map((event) => ({
240
+ event_id: event.event_id,
241
+ missingKeys: missingRequiredKeys(event, requiredKeys),
242
+ target: event.payload.target,
243
+ reason: event.payload.reason
244
+ }))
245
+ .filter((entry) => entry.missingKeys.length > 0);
246
+ return {
247
+ category,
248
+ evidence: {
249
+ deniedEventCount: denials.length,
250
+ grounding: "ecosystem/moltnet/internal/rooms/access_policy.go writeForbiddenError",
251
+ malformed
252
+ },
253
+ id,
254
+ severity,
255
+ status: statusFor(malformed.length === 0)
256
+ };
257
+ };
258
+ /**
259
+ * Check 7 — `provenance.signed-report` — always `not_applicable`. Report
260
+ * signing/provenance is deferred to B66; this audit generator has no
261
+ * signing input to check and must never claim it. Takes no evidence input
262
+ * on purpose: there is nothing yet for it to inspect.
263
+ */
264
+ export const checkProvenanceSignedReport = () => notApplicable("provenance.signed-report", "provenance", "medium", "not yet enforced (see B66)");
265
+ /**
266
+ * The seven check ids in the order `generateAudit.ts` assembles
267
+ * `AuditReport.checks` in (each check function above takes a different
268
+ * evidence shape, so this is a documentation/ordering list only — not a
269
+ * uniformly-callable array).
270
+ */
271
+ export const AUDIT_CHECK_IDS = [
272
+ "causal.principals-authenticated",
273
+ "causal.denied-ledger-visible",
274
+ "control.wake-fail-closed",
275
+ "container.no-baked-secrets",
276
+ "memory.cross-scope-capability",
277
+ "network.non-member-write-denied",
278
+ "provenance.signed-report"
279
+ ];
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Evidence input types and small pure helpers shared by every check function
3
+ * in checks.ts. Split out purely to keep checks.ts under the repo's 400-line
4
+ * cap (see /Users/apresmoi/Documents/spawnfile/CLAUDE.md) — nothing here is
5
+ * a different layer or a different contract, it is checks.ts's own
6
+ * plumbing. No I/O, same as checks.ts itself.
7
+ */
8
+ import type { CausalEvent, ConformanceIssue } from "../ledger/index.js";
9
+ import type { AuditCheck, AuditCheckCategory, AuditCheckSeverity, AuditCheckStatus } from "./types.js";
10
+ /**
11
+ * Ledger evidence handed to every run-mode check (1, 2, 5, 6). Built once by
12
+ * `generateAudit.ts` from `runRealConformance` (offline-mode: an injected
13
+ * `exec` that reads fixture files instead of spawning a sibling process —
14
+ * see generateAudit.ts) plus the audit's own `expected-denials.json`
15
+ * manifest. `undefined` means "no run artifacts provided" — every run-mode
16
+ * check below returns `not_applicable` in that case, and never `pass`.
17
+ */
18
+ export interface RunLedgerEvidence {
19
+ eventCount: number;
20
+ events: CausalEvent[];
21
+ /** Denial types this fixture's `expected-denials.json` asserts a `*.denied` event must exist for (silent-drop detection, check 2). */
22
+ expectedDenialTypes: string[];
23
+ /** Every schema/seq/payload-minimum/principal-grammar/chain-stitch issue `runRealConformance` reported — reused, never recomputed. */
24
+ issues: ConformanceIssue[];
25
+ /** Whether the ledger directory actually contained an `expected-denials.json` file — distinct from `expectedDenialTypes.length === 0`, which is also true for a *present-but-empty* manifest. Check 2 uses this to tell "no manifest, so silent-drop cannot be assessed" apart from "a manifest exists and asserts nothing". */
26
+ manifestPresent: boolean;
27
+ sources: string[];
28
+ }
29
+ /**
30
+ * Compiled-output evidence handed to every static check (3, 4). Plain
31
+ * strings, not paths — `generateAudit.ts` owns the file reads, these
32
+ * functions stay pure. Any file that does not exist in the compiled output
33
+ * directory reads as an empty string; that is itself audit-worthy (absence
34
+ * of proof is not proof of enforcement), never treated as not_applicable —
35
+ * unlike run-mode checks, the compiled-output directory is a required
36
+ * `generateAudit` input, never optional.
37
+ */
38
+ export interface StaticContainerEvidence {
39
+ /** Rendered Dockerfile text (containerArtifactsRender.ts's `renderDockerfile` output shape). */
40
+ dockerfile: string;
41
+ /** Rendered entrypoint.sh text (containerEntrypointRender.ts's `renderEntrypoint` output shape). */
42
+ entrypoint: string;
43
+ /** Rendered generated Pi app source, if this compile targeted Pi (appControlSource.ts's `renderPiControlSource` output is inlined into it). Empty string if the compiled output has no such file. */
44
+ piAppSource: string;
45
+ /** Secret env var NAMES this compile declared required (containerEntrypointRender.ts's `renderEntrypoint(runtimePlans, requiredSecrets, ...)` second argument) — never the values. */
46
+ requiredSecrets: string[];
47
+ }
48
+ export declare const notApplicable: (id: string, category: AuditCheckCategory, severity: AuditCheckSeverity, reason: string) => AuditCheck;
49
+ export declare const statusFor: (ok: boolean) => AuditCheckStatus;
50
+ /** `conformance.ts`'s `checkPayloadMinimums` is not exported (it is that module's private helper); this is the same one-line key-presence rule applied directly to already-parsed events, not a reimplementation of `validateConformanceSources`'s schema/seq/stitch pipeline. */
51
+ export declare const missingRequiredKeys: (event: CausalEvent, requiredKeys: string[]) => string[];
52
+ export declare const DENIAL_MINIMUMS_BY_TYPE: Map<string, string[]>;
53
+ /** Env name gating the operator-only wake endpoint (appControlSource.ts:45, `CONTROL_TOKEN_ENV`). */
54
+ export declare const CONTROL_TOKEN_ENV = "SPAWNFILE_PI_CONTROL_TOKEN";
55
+ /**
56
+ * Verbatim source-text substring of appControlSource.ts:75's fail-closed
57
+ * rejection branch (`return { ok: false, reason: "no operator token
58
+ * configured (" + CONTROL_TOKEN_ENV + " is unset)" }`). The literal string
59
+ * checked here is only the first concatenated chunk — the source
60
+ * concatenates `CONTROL_TOKEN_ENV` in with `+`, so the fully-assembled
61
+ * runtime message never appears as one literal in the source text itself.
62
+ * Its presence is direct evidence the fail-closed branch was actually
63
+ * emitted, not paraphrased.
64
+ */
65
+ export declare const FAIL_CLOSED_MARKER = "no operator token configured (";
66
+ export declare const escapeRegExp: (value: string) => string;
67
+ /**
68
+ * Matches a literal (non-`$`-expansion) shell/Dockerfile assignment
69
+ * `NAME=<value>` — never a `require_env 'NAME'` call (no `=` follows the
70
+ * name there at all) and never a same-name passthrough reference like
71
+ * `NAME="$NAME"`/`NAME=${NAME}` (an optional quote followed by `$`), both of
72
+ * which read the env rather than bake a value into it.
73
+ */
74
+ export declare const literalAssignmentPattern: (name: string) => RegExp;