spawnfile 0.1.32 → 0.1.34

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 (585) hide show
  1. package/README.md +1 -1
  2. package/dist/auth/trainingAuth.d.ts +2 -5
  3. package/dist/cli/devCommands.d.ts +1 -1
  4. package/dist/cli/devCommands.js +0 -66
  5. package/dist/cli/runCli.d.ts +1 -4
  6. package/dist/cli/runCli.js +2 -2
  7. package/dist/cli/trainCommand.js +9 -15
  8. package/dist/cli/trainingBooted.d.ts +7 -0
  9. package/dist/cli/trainingBooted.js +41 -0
  10. package/dist/cli/trainingExecution.d.ts +4 -7
  11. package/dist/cli/trainingExecution.js +4 -32
  12. package/dist/compiler/containerArtifacts.js +0 -5
  13. package/dist/compiler/containerBackedMountRender.js +5 -1
  14. package/dist/compiler/containerDaimonBrokerRender.d.ts +5 -50
  15. package/dist/compiler/containerDaimonBrokerRender.js +7 -88
  16. package/dist/compiler/containerDaimonGatewayRender.d.ts +50 -0
  17. package/dist/compiler/containerDaimonGatewayRender.js +157 -0
  18. package/dist/compiler/containerDaimonGrokWorkerProvisioning.d.ts +2 -10
  19. package/dist/compiler/containerDaimonGrokWorkerProvisioning.js +13 -25
  20. package/dist/compiler/containerDaimonGrokWorkerRender.d.ts +11 -49
  21. package/dist/compiler/containerDaimonGrokWorkerRender.js +15 -39
  22. package/dist/compiler/containerDaimonStartupSupervision.d.ts +8 -0
  23. package/dist/compiler/containerDaimonStartupSupervision.js +39 -0
  24. package/dist/compiler/containerDaimonUidEntrypointRender.d.ts +1 -2
  25. package/dist/compiler/containerDaimonUidEntrypointRender.js +26 -46
  26. package/dist/compiler/containerRuntimeReadinessRender.js +1 -1
  27. package/dist/compiler/memoryArtifacts.js +0 -1
  28. package/dist/compiler/moltnetArtifacts.js +1 -17
  29. package/dist/compiler/moltnetClientConfig.js +1 -1
  30. package/dist/compiler/moltnetRuntimeConfig.js +0 -10
  31. package/dist/compiler/runProject.d.ts +1 -0
  32. package/dist/compiler/runProject.js +9 -3
  33. package/dist/compiler/runProjectAuth.js +2 -17
  34. package/dist/compiler/training/contract.d.ts +0 -2
  35. package/dist/compiler/training/contract.js +0 -2
  36. package/dist/compiler/training/execution.d.ts +1 -128
  37. package/dist/compiler/training/execution.js +7 -68
  38. package/dist/compiler/training/index.d.ts +0 -8
  39. package/dist/compiler/training/index.js +0 -7
  40. package/dist/compiler/training/output.d.ts +1 -0
  41. package/dist/compiler/training/output.js +1 -1
  42. package/dist/compiler/training/trial/boot.d.ts +53 -0
  43. package/dist/compiler/training/trial/boot.js +147 -0
  44. package/dist/compiler/training/trial/docker.d.ts +8 -0
  45. package/dist/compiler/training/trial/docker.js +22 -0
  46. package/dist/compiler/training/trial/gateway.d.ts +42 -0
  47. package/dist/compiler/training/trial/gateway.js +98 -0
  48. package/dist/compiler/training/trial/index.d.ts +4 -0
  49. package/dist/compiler/training/trial/index.js +4 -0
  50. package/dist/compiler/training/trial/launcher.d.ts +32 -0
  51. package/dist/compiler/training/trial/launcher.js +49 -0
  52. package/dist/compiler/training/trial/project.d.ts +11 -0
  53. package/dist/compiler/training/trial/project.js +31 -0
  54. package/dist/compiler/upReceipt.d.ts +2 -17
  55. package/dist/compiler/upReceipt.js +2 -17
  56. package/dist/deployment/artifactsExportPlan.js +2 -18
  57. package/dist/deployment/privateArtifactsExport.js +1 -1
  58. package/dist/dev/docker.d.ts +0 -5
  59. package/dist/dev/docker.js +0 -46
  60. package/dist/dev/index.d.ts +0 -1
  61. package/dist/dev/index.js +0 -1
  62. package/dist/dev/project.d.ts +0 -16
  63. package/dist/dev/project.js +1 -128
  64. package/dist/distribution/distributionReportSchema.js +1 -1
  65. package/dist/distribution/imageRuntimeAuth.js +3 -2
  66. package/dist/release/drainControl.d.ts +5 -19
  67. package/dist/release/drainControl.js +12 -67
  68. package/dist/report/types.d.ts +3 -6
  69. package/dist/runtime/common.d.ts +1 -1
  70. package/dist/runtime/common.js +1 -1
  71. package/dist/runtime/container.d.ts +2 -2
  72. package/dist/runtime/container.js +1 -39
  73. package/dist/runtime/daimon/config.js +6 -12
  74. package/dist/runtime/daimon/contractManifest.js +0 -1
  75. package/dist/runtime/daimon/contractManifestSchema.js +0 -1
  76. package/dist/runtime/daimon/control.d.ts +31 -0
  77. package/dist/runtime/daimon/control.js +83 -0
  78. package/dist/runtime/daimon/engineDescriptorSchema.js +0 -1
  79. package/dist/runtime/daimon/engineDescriptors.generated.d.ts +1 -1
  80. package/dist/runtime/daimon/engineDescriptors.generated.js +1 -2
  81. package/dist/runtime/daimon/engines.js +0 -1
  82. package/dist/runtime/daimon/gateway.d.ts +62 -0
  83. package/dist/runtime/daimon/gateway.js +77 -0
  84. package/dist/runtime/daimon/grokWorkerContract.d.ts +0 -5
  85. package/dist/runtime/daimon/grokWorkerContract.js +1 -13
  86. package/dist/runtime/daimon/index.d.ts +2 -0
  87. package/dist/runtime/daimon/index.js +2 -1
  88. package/dist/runtime/daimon/memory.js +1 -1
  89. package/dist/runtime/daimon/packageName.js +0 -1
  90. package/dist/runtime/daimon/runAuth.js +7 -4
  91. package/dist/runtime/daimon/runtimeIdentity.d.ts +2 -0
  92. package/dist/runtime/daimon/runtimeIdentity.js +2 -0
  93. package/dist/runtime/daimon/subscriptionRealms.d.ts +9 -3
  94. package/dist/runtime/daimon/subscriptionRealms.js +22 -13
  95. package/dist/runtime/daimon/testHelpers.d.ts +2 -0
  96. package/dist/runtime/{pi → daimon}/testHelpers.js +3 -3
  97. package/dist/runtime/daimon/training/booted/adapter.d.ts +46 -0
  98. package/dist/runtime/daimon/training/booted/adapter.js +59 -0
  99. package/dist/runtime/daimon/training/booted/adapter.js.map +1 -0
  100. package/dist/runtime/daimon/training/booted/index.d.ts +2 -0
  101. package/dist/runtime/daimon/training/booted/index.js +2 -0
  102. package/dist/runtime/daimon/training/booted/index.js.map +1 -0
  103. package/dist/runtime/daimon/training/index.d.ts +5 -0
  104. package/dist/runtime/daimon/training/index.js +8 -4
  105. package/dist/runtime/daimon/training/index.js.map +1 -1
  106. package/dist/runtime/daimon/training/providers/codex-subscription/index.js.map +1 -0
  107. package/dist/runtime/daimon/training/providers/codex-subscription/protocol.js.map +1 -0
  108. package/dist/runtime/daimon/training/providers/codex-subscription/provider.js.map +1 -0
  109. package/dist/runtime/daimon/training/providers/codex-subscription/strict-schema.js.map +1 -0
  110. package/dist/runtime/daimon/training/providers/grok-subscription/cli.d.ts +1 -3
  111. package/dist/runtime/daimon/training/providers/grok-subscription/cli.js +5 -5
  112. package/dist/runtime/daimon/training/providers/grok-subscription/cli.js.map +1 -1
  113. package/dist/runtime/daimon/training/providers/grok-subscription/index.d.ts +1 -2
  114. package/dist/runtime/daimon/training/providers/grok-subscription/index.js +0 -1
  115. package/dist/runtime/daimon/training/providers/grok-subscription/index.js.map +1 -1
  116. package/dist/runtime/daimon/training/providers/grok-subscription/protocol.d.ts +5 -17
  117. package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js +18 -31
  118. package/dist/runtime/daimon/training/providers/grok-subscription/protocol.js.map +1 -1
  119. package/dist/runtime/daimon/training/providers/grok-subscription/provider.js +1 -2
  120. package/dist/runtime/daimon/training/providers/grok-subscription/provider.js.map +1 -1
  121. package/dist/runtime/daimon/wakeMoments.js +0 -1
  122. package/dist/runtime/install.js +0 -21
  123. package/dist/runtime/registry.js +0 -2
  124. package/dist/runtime/trainingGraderProviders.js +1 -1
  125. package/dist/runtime/trainingProviders.d.ts +1 -2
  126. package/dist/runtime/trainingProviders.js +9 -19
  127. package/dist/runtime/trainingSubjects.d.ts +0 -121
  128. package/dist/runtime/trainingSubjects.js +2 -13
  129. package/dist/runtime/types.d.ts +1 -8
  130. package/dist/shared/errors.js +0 -1
  131. package/dist/status/lifecycleProbes.js +3 -6
  132. package/dist/status/moltnetWiringProbes.js +1 -17
  133. package/dist/training/subjects/index.d.ts +0 -1
  134. package/dist/training/subjects/index.js +0 -1
  135. package/dist/training/subjects/index.js.map +1 -1
  136. package/examples/README.md +0 -1
  137. package/examples/daimon-org/agents/mapper/Spawnfile +4 -1
  138. package/examples/daimon-org/teams/review/agents/reviewer/Spawnfile +4 -1
  139. package/examples/jungian-daimon-org/teams/luna/agents/animus/Spawnfile +5 -8
  140. package/examples/jungian-daimon-org/teams/luna/agents/representative/Spawnfile +1 -1
  141. package/examples/jungian-daimon-org/teams/luna/agents/shadow/Spawnfile +5 -8
  142. package/examples/jungian-daimon-org/teams/selene/agents/animus/Spawnfile +5 -8
  143. package/examples/jungian-daimon-org/teams/selene/agents/representative/Spawnfile +5 -8
  144. package/examples/jungian-daimon-org/teams/selene/agents/shadow/Spawnfile +1 -1
  145. package/examples/mixed-runtime-org/agents/localist/Spawnfile +7 -7
  146. package/package.json +4 -13
  147. package/runtimes.yaml +5 -15
  148. package/dist/compiler/containerDaimonGrokTaskClock.d.ts +0 -5
  149. package/dist/compiler/containerDaimonGrokTaskClock.js +0 -29
  150. package/dist/compiler/daimonTelemetryArtifacts.d.ts +0 -22
  151. package/dist/compiler/daimonTelemetryArtifacts.js +0 -56
  152. package/dist/compiler/training/broker/clockProbe.d.ts +0 -6
  153. package/dist/compiler/training/broker/clockProbe.js +0 -27
  154. package/dist/compiler/training/broker/declaration.d.ts +0 -54
  155. package/dist/compiler/training/broker/declaration.js +0 -70
  156. package/dist/compiler/training/broker/entrypoint.d.ts +0 -39
  157. package/dist/compiler/training/broker/entrypoint.js +0 -124
  158. package/dist/compiler/training/broker/evaluatorSecrets.d.ts +0 -2
  159. package/dist/compiler/training/broker/evaluatorSecrets.js +0 -62
  160. package/dist/compiler/training/broker/index.d.ts +0 -12
  161. package/dist/compiler/training/broker/index.js +0 -12
  162. package/dist/compiler/training/broker/main.d.ts +0 -2
  163. package/dist/compiler/training/broker/main.js +0 -14
  164. package/dist/compiler/training/broker/paths.d.ts +0 -236
  165. package/dist/compiler/training/broker/paths.js +0 -249
  166. package/dist/compiler/training/broker/processes.d.ts +0 -51
  167. package/dist/compiler/training/broker/processes.js +0 -102
  168. package/dist/compiler/training/broker/projection.d.ts +0 -61
  169. package/dist/compiler/training/broker/projection.js +0 -109
  170. package/dist/compiler/training/broker/provisioning.d.ts +0 -78
  171. package/dist/compiler/training/broker/provisioning.js +0 -231
  172. package/dist/compiler/training/broker/receipt.d.ts +0 -77
  173. package/dist/compiler/training/broker/receipt.js +0 -110
  174. package/dist/compiler/training/broker/recycleClient.d.ts +0 -33
  175. package/dist/compiler/training/broker/recycleClient.js +0 -112
  176. package/dist/compiler/training/broker/registration.d.ts +0 -46
  177. package/dist/compiler/training/broker/registration.js +0 -113
  178. package/dist/compiler/training/broker/reset.d.ts +0 -9
  179. package/dist/compiler/training/broker/reset.js +0 -71
  180. package/dist/compiler/training/broker/rootScript.d.ts +0 -32
  181. package/dist/compiler/training/broker/rootScript.js +0 -33
  182. package/dist/compiler/training/broker/runtime.d.ts +0 -22
  183. package/dist/compiler/training/broker/runtime.js +0 -128
  184. package/dist/compiler/training/broker/seccompRoutes.d.ts +0 -31
  185. package/dist/compiler/training/broker/seccompRoutes.js +0 -36
  186. package/dist/compiler/training/broker/supervisor.d.ts +0 -108
  187. package/dist/compiler/training/broker/supervisor.js +0 -172
  188. package/dist/compiler/training/broker/taskClock.d.ts +0 -5
  189. package/dist/compiler/training/broker/taskClock.js +0 -41
  190. package/dist/compiler/training/container/contract.d.ts +0 -54
  191. package/dist/compiler/training/container/contract.js +0 -52
  192. package/dist/compiler/training/container/evaluators.d.ts +0 -48
  193. package/dist/compiler/training/container/evaluators.js +0 -50
  194. package/dist/compiler/training/container/grokWriteback.d.ts +0 -8
  195. package/dist/compiler/training/container/grokWriteback.js +0 -26
  196. package/dist/compiler/training/container/index.d.ts +0 -5
  197. package/dist/compiler/training/container/index.js +0 -3
  198. package/dist/compiler/training/container/launch.d.ts +0 -21
  199. package/dist/compiler/training/container/launch.js +0 -280
  200. package/dist/compiler/training/container/nativeSlots.d.ts +0 -14
  201. package/dist/compiler/training/container/nativeSlots.js +0 -13
  202. package/dist/compiler/training/container/outputCopy.d.ts +0 -2
  203. package/dist/compiler/training/container/outputCopy.js +0 -72
  204. package/dist/compiler/training/container/outputVolume.d.ts +0 -28
  205. package/dist/compiler/training/container/outputVolume.js +0 -185
  206. package/dist/compiler/training/container/prepare.d.ts +0 -10
  207. package/dist/compiler/training/container/prepare.js +0 -125
  208. package/dist/compiler/training/container/process.d.ts +0 -14
  209. package/dist/compiler/training/container/process.js +0 -70
  210. package/dist/compiler/training/container/security.d.ts +0 -38
  211. package/dist/compiler/training/container/security.js +0 -68
  212. package/dist/compiler/training/container/subjectIsolation.d.ts +0 -5
  213. package/dist/compiler/training/container/subjectIsolation.js +0 -16
  214. package/dist/compiler/training/preparation/assets/Dockerfile +0 -100
  215. package/dist/compiler/training/preparation/assets/package-lock.json +0 -5483
  216. package/dist/compiler/training/preparation/broker.d.ts +0 -30
  217. package/dist/compiler/training/preparation/broker.js +0 -68
  218. package/dist/compiler/training/preparation/contextModes.d.ts +0 -12
  219. package/dist/compiler/training/preparation/contextModes.js +0 -38
  220. package/dist/compiler/training/preparation/contract.d.ts +0 -203
  221. package/dist/compiler/training/preparation/contract.js +0 -114
  222. package/dist/compiler/training/preparation/copyAssets.d.ts +0 -1
  223. package/dist/compiler/training/preparation/copyAssets.js +0 -8
  224. package/dist/compiler/training/preparation/daimonParent.d.ts +0 -42
  225. package/dist/compiler/training/preparation/daimonParent.js +0 -114
  226. package/dist/compiler/training/preparation/files.d.ts +0 -29
  227. package/dist/compiler/training/preparation/files.js +0 -146
  228. package/dist/compiler/training/preparation/image.d.ts +0 -28
  229. package/dist/compiler/training/preparation/image.js +0 -105
  230. package/dist/compiler/training/preparation/index.d.ts +0 -3
  231. package/dist/compiler/training/preparation/index.js +0 -2
  232. package/dist/compiler/training/preparation/inputs.d.ts +0 -24
  233. package/dist/compiler/training/preparation/inputs.js +0 -101
  234. package/dist/compiler/training/preparation/prepare.d.ts +0 -38
  235. package/dist/compiler/training/preparation/prepare.js +0 -224
  236. package/dist/compiler/training/preparation/scratch.d.ts +0 -8
  237. package/dist/compiler/training/preparation/scratch.js +0 -114
  238. package/dist/compiler/training/repair/compatibility.d.ts +0 -11
  239. package/dist/compiler/training/repair/compatibility.js +0 -45
  240. package/dist/compiler/training/repair/contract.d.ts +0 -832
  241. package/dist/compiler/training/repair/contract.js +0 -34
  242. package/dist/compiler/training/repair/index.d.ts +0 -3
  243. package/dist/compiler/training/repair/index.js +0 -3
  244. package/dist/compiler/training/repair/prepare.d.ts +0 -378
  245. package/dist/compiler/training/repair/prepare.js +0 -84
  246. package/dist/compiler/training/repair/witness.d.ts +0 -348
  247. package/dist/compiler/training/repair/witness.js +0 -62
  248. package/dist/compiler/training/subjectDeclaration.d.ts +0 -26
  249. package/dist/compiler/training/subjectDeclaration.js +0 -54
  250. package/dist/compiler/training/subjectLease.d.ts +0 -115
  251. package/dist/compiler/training/subjectLease.js +0 -179
  252. package/dist/dev/activity.d.ts +0 -14
  253. package/dist/dev/activity.js +0 -48
  254. package/dist/runtime/codex-exec/training/adapter.d.ts +0 -13
  255. package/dist/runtime/codex-exec/training/adapter.js +0 -101
  256. package/dist/runtime/codex-exec/training/adapter.js.map +0 -1
  257. package/dist/runtime/codex-exec/training/environment.d.ts +0 -3
  258. package/dist/runtime/codex-exec/training/environment.js +0 -26
  259. package/dist/runtime/codex-exec/training/environment.js.map +0 -1
  260. package/dist/runtime/codex-exec/training/index.d.ts +0 -2
  261. package/dist/runtime/codex-exec/training/index.js +0 -3
  262. package/dist/runtime/codex-exec/training/index.js.map +0 -1
  263. package/dist/runtime/codex-exec/training/protocol.d.ts +0 -15
  264. package/dist/runtime/codex-exec/training/protocol.js +0 -102
  265. package/dist/runtime/codex-exec/training/protocol.js.map +0 -1
  266. package/dist/runtime/codex-exec/training/providers/codex-subscription/index.js.map +0 -1
  267. package/dist/runtime/codex-exec/training/providers/codex-subscription/protocol.js.map +0 -1
  268. package/dist/runtime/codex-exec/training/providers/codex-subscription/provider.js.map +0 -1
  269. package/dist/runtime/codex-exec/training/providers/codex-subscription/strict-schema.js.map +0 -1
  270. package/dist/runtime/daimon/contractManifest.js.map +0 -1
  271. package/dist/runtime/daimon/contractManifestSchema.js.map +0 -1
  272. package/dist/runtime/daimon/engineDescriptorSchema.js.map +0 -1
  273. package/dist/runtime/daimon/engineDescriptors.generated.js.map +0 -1
  274. package/dist/runtime/daimon/engines.js.map +0 -1
  275. package/dist/runtime/daimon/index.js.map +0 -1
  276. package/dist/runtime/daimon/packageName.js.map +0 -1
  277. package/dist/runtime/daimon/training/legacy/adapter.d.ts +0 -11
  278. package/dist/runtime/daimon/training/legacy/adapter.js +0 -175
  279. package/dist/runtime/daimon/training/legacy/adapter.js.map +0 -1
  280. package/dist/runtime/daimon/training/legacy/index.d.ts +0 -2
  281. package/dist/runtime/daimon/training/legacy/index.js +0 -3
  282. package/dist/runtime/daimon/training/legacy/index.js.map +0 -1
  283. package/dist/runtime/daimon/training/legacy/public.d.ts +0 -49
  284. package/dist/runtime/daimon/training/legacy/public.js +0 -16
  285. package/dist/runtime/daimon/training/legacy/public.js.map +0 -1
  286. package/dist/runtime/daimon/training/native/adapter.d.ts +0 -18
  287. package/dist/runtime/daimon/training/native/adapter.js +0 -252
  288. package/dist/runtime/daimon/training/native/adapter.js.map +0 -1
  289. package/dist/runtime/daimon/training/native/admission.d.ts +0 -7
  290. package/dist/runtime/daimon/training/native/admission.js +0 -52
  291. package/dist/runtime/daimon/training/native/admission.js.map +0 -1
  292. package/dist/runtime/daimon/training/native/child/arguments.d.ts +0 -16
  293. package/dist/runtime/daimon/training/native/child/arguments.js +0 -70
  294. package/dist/runtime/daimon/training/native/child/arguments.js.map +0 -1
  295. package/dist/runtime/daimon/training/native/child/deferred-trial.d.ts +0 -24
  296. package/dist/runtime/daimon/training/native/child/deferred-trial.js +0 -63
  297. package/dist/runtime/daimon/training/native/child/deferred-trial.js.map +0 -1
  298. package/dist/runtime/daimon/training/native/child/diagnostics.d.ts +0 -58
  299. package/dist/runtime/daimon/training/native/child/diagnostics.js +0 -215
  300. package/dist/runtime/daimon/training/native/child/diagnostics.js.map +0 -1
  301. package/dist/runtime/daimon/training/native/child/fixture.d.ts +0 -16
  302. package/dist/runtime/daimon/training/native/child/fixture.js +0 -159
  303. package/dist/runtime/daimon/training/native/child/fixture.js.map +0 -1
  304. package/dist/runtime/daimon/training/native/child/grok.d.ts +0 -14
  305. package/dist/runtime/daimon/training/native/child/grok.js +0 -47
  306. package/dist/runtime/daimon/training/native/child/grok.js.map +0 -1
  307. package/dist/runtime/daimon/training/native/child/index.d.ts +0 -7
  308. package/dist/runtime/daimon/training/native/child/index.js +0 -5
  309. package/dist/runtime/daimon/training/native/child/index.js.map +0 -1
  310. package/dist/runtime/daimon/training/native/child/lifecycle.d.ts +0 -40
  311. package/dist/runtime/daimon/training/native/child/lifecycle.js +0 -400
  312. package/dist/runtime/daimon/training/native/child/lifecycle.js.map +0 -1
  313. package/dist/runtime/daimon/training/native/child/probe.d.ts +0 -2
  314. package/dist/runtime/daimon/training/native/child/probe.js +0 -11
  315. package/dist/runtime/daimon/training/native/child/probe.js.map +0 -1
  316. package/dist/runtime/daimon/training/native/child/sandbox.d.ts +0 -4
  317. package/dist/runtime/daimon/training/native/child/sandbox.js +0 -76
  318. package/dist/runtime/daimon/training/native/child/sandbox.js.map +0 -1
  319. package/dist/runtime/daimon/training/native/child/types.d.ts +0 -15
  320. package/dist/runtime/daimon/training/native/child/types.js +0 -2
  321. package/dist/runtime/daimon/training/native/child/types.js.map +0 -1
  322. package/dist/runtime/daimon/training/native/container/docker.d.ts +0 -29
  323. package/dist/runtime/daimon/training/native/container/docker.js +0 -105
  324. package/dist/runtime/daimon/training/native/container/docker.js.map +0 -1
  325. package/dist/runtime/daimon/training/native/container/grok-slot.d.ts +0 -22
  326. package/dist/runtime/daimon/training/native/container/grok-slot.js +0 -38
  327. package/dist/runtime/daimon/training/native/container/grok-slot.js.map +0 -1
  328. package/dist/runtime/daimon/training/native/container/index.d.ts +0 -6
  329. package/dist/runtime/daimon/training/native/container/index.js +0 -6
  330. package/dist/runtime/daimon/training/native/container/index.js.map +0 -1
  331. package/dist/runtime/daimon/training/native/container/lifecycle.d.ts +0 -8
  332. package/dist/runtime/daimon/training/native/container/lifecycle.js +0 -111
  333. package/dist/runtime/daimon/training/native/container/lifecycle.js.map +0 -1
  334. package/dist/runtime/daimon/training/native/container/manifest.d.ts +0 -17
  335. package/dist/runtime/daimon/training/native/container/manifest.js +0 -164
  336. package/dist/runtime/daimon/training/native/container/manifest.js.map +0 -1
  337. package/dist/runtime/daimon/training/native/container/native-preflight.d.ts +0 -8
  338. package/dist/runtime/daimon/training/native/container/native-preflight.js +0 -40
  339. package/dist/runtime/daimon/training/native/container/native-preflight.js.map +0 -1
  340. package/dist/runtime/daimon/training/native/container/preflight.d.ts +0 -15
  341. package/dist/runtime/daimon/training/native/container/preflight.js +0 -79
  342. package/dist/runtime/daimon/training/native/container/preflight.js.map +0 -1
  343. package/dist/runtime/daimon/training/native/container/slot.d.ts +0 -4
  344. package/dist/runtime/daimon/training/native/container/slot.js +0 -58
  345. package/dist/runtime/daimon/training/native/container/slot.js.map +0 -1
  346. package/dist/runtime/daimon/training/native/external.d.ts +0 -37
  347. package/dist/runtime/daimon/training/native/external.js +0 -75
  348. package/dist/runtime/daimon/training/native/external.js.map +0 -1
  349. package/dist/runtime/daimon/training/native/grants/authority.d.ts +0 -36
  350. package/dist/runtime/daimon/training/native/grants/authority.js +0 -49
  351. package/dist/runtime/daimon/training/native/grants/authority.js.map +0 -1
  352. package/dist/runtime/daimon/training/native/grants/index.d.ts +0 -2
  353. package/dist/runtime/daimon/training/native/grants/index.js +0 -3
  354. package/dist/runtime/daimon/training/native/grants/index.js.map +0 -1
  355. package/dist/runtime/daimon/training/native/grants/pins.d.ts +0 -30
  356. package/dist/runtime/daimon/training/native/grants/pins.js +0 -20
  357. package/dist/runtime/daimon/training/native/grants/pins.js.map +0 -1
  358. package/dist/runtime/daimon/training/native/grants/test-socket.d.ts +0 -6
  359. package/dist/runtime/daimon/training/native/grants/test-socket.js +0 -35
  360. package/dist/runtime/daimon/training/native/grants/test-socket.js.map +0 -1
  361. package/dist/runtime/daimon/training/native/grok-fixtures.d.ts +0 -34
  362. package/dist/runtime/daimon/training/native/grok-fixtures.js +0 -179
  363. package/dist/runtime/daimon/training/native/grok-fixtures.js.map +0 -1
  364. package/dist/runtime/daimon/training/native/index.d.ts +0 -38
  365. package/dist/runtime/daimon/training/native/index.js +0 -27
  366. package/dist/runtime/daimon/training/native/index.js.map +0 -1
  367. package/dist/runtime/daimon/training/native/live-checkout.d.ts +0 -2
  368. package/dist/runtime/daimon/training/native/live-checkout.js +0 -15
  369. package/dist/runtime/daimon/training/native/live-checkout.js.map +0 -1
  370. package/dist/runtime/daimon/training/native/observations.d.ts +0 -51
  371. package/dist/runtime/daimon/training/native/observations.js +0 -217
  372. package/dist/runtime/daimon/training/native/observations.js.map +0 -1
  373. package/dist/runtime/daimon/training/native/outcome.d.ts +0 -13
  374. package/dist/runtime/daimon/training/native/outcome.js +0 -37
  375. package/dist/runtime/daimon/training/native/outcome.js.map +0 -1
  376. package/dist/runtime/daimon/training/native/preparation/engine-config.d.ts +0 -21
  377. package/dist/runtime/daimon/training/native/preparation/engine-config.js +0 -30
  378. package/dist/runtime/daimon/training/native/preparation/engine-config.js.map +0 -1
  379. package/dist/runtime/daimon/training/native/preparation/fixtures.d.ts +0 -17
  380. package/dist/runtime/daimon/training/native/preparation/fixtures.js +0 -52
  381. package/dist/runtime/daimon/training/native/preparation/fixtures.js.map +0 -1
  382. package/dist/runtime/daimon/training/native/preparation/index.d.ts +0 -7
  383. package/dist/runtime/daimon/training/native/preparation/index.js +0 -5
  384. package/dist/runtime/daimon/training/native/preparation/index.js.map +0 -1
  385. package/dist/runtime/daimon/training/native/preparation/layout.d.ts +0 -66
  386. package/dist/runtime/daimon/training/native/preparation/layout.js +0 -87
  387. package/dist/runtime/daimon/training/native/preparation/layout.js.map +0 -1
  388. package/dist/runtime/daimon/training/native/preparation/subject.d.ts +0 -14
  389. package/dist/runtime/daimon/training/native/preparation/subject.js +0 -67
  390. package/dist/runtime/daimon/training/native/preparation/subject.js.map +0 -1
  391. package/dist/runtime/daimon/training/native/preparation/types.d.ts +0 -69
  392. package/dist/runtime/daimon/training/native/preparation/types.js +0 -2
  393. package/dist/runtime/daimon/training/native/preparation/types.js.map +0 -1
  394. package/dist/runtime/daimon/training/native/receipt/artifacts.d.ts +0 -25
  395. package/dist/runtime/daimon/training/native/receipt/artifacts.js +0 -32
  396. package/dist/runtime/daimon/training/native/receipt/artifacts.js.map +0 -1
  397. package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.d.ts +0 -129
  398. package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js +0 -45
  399. package/dist/runtime/daimon/training/native/receipt/grok-clocked-pins.js.map +0 -1
  400. package/dist/runtime/daimon/training/native/receipt/grok.d.ts +0 -246
  401. package/dist/runtime/daimon/training/native/receipt/grok.js +0 -195
  402. package/dist/runtime/daimon/training/native/receipt/grok.js.map +0 -1
  403. package/dist/runtime/daimon/training/native/receipt/index.d.ts +0 -11
  404. package/dist/runtime/daimon/training/native/receipt/index.js +0 -8
  405. package/dist/runtime/daimon/training/native/receipt/index.js.map +0 -1
  406. package/dist/runtime/daimon/training/native/receipt/paths.d.ts +0 -3
  407. package/dist/runtime/daimon/training/native/receipt/paths.js +0 -18
  408. package/dist/runtime/daimon/training/native/receipt/paths.js.map +0 -1
  409. package/dist/runtime/daimon/training/native/receipt/sandbox.d.ts +0 -42
  410. package/dist/runtime/daimon/training/native/receipt/sandbox.js +0 -35
  411. package/dist/runtime/daimon/training/native/receipt/sandbox.js.map +0 -1
  412. package/dist/runtime/daimon/training/native/receipt/schema.d.ts +0 -490
  413. package/dist/runtime/daimon/training/native/receipt/schema.js +0 -138
  414. package/dist/runtime/daimon/training/native/receipt/schema.js.map +0 -1
  415. package/dist/runtime/daimon/training/native/receipt/subscription.d.ts +0 -13
  416. package/dist/runtime/daimon/training/native/receipt/subscription.js +0 -13
  417. package/dist/runtime/daimon/training/native/receipt/subscription.js.map +0 -1
  418. package/dist/runtime/daimon/training/native/receipt/task-clock.d.ts +0 -19
  419. package/dist/runtime/daimon/training/native/receipt/task-clock.js +0 -49
  420. package/dist/runtime/daimon/training/native/receipt/task-clock.js.map +0 -1
  421. package/dist/runtime/daimon/training/native/sealed-usage.d.ts +0 -218
  422. package/dist/runtime/daimon/training/native/sealed-usage.js +0 -261
  423. package/dist/runtime/daimon/training/native/sealed-usage.js.map +0 -1
  424. package/dist/runtime/daimon/training/native/test-fixtures.d.ts +0 -27
  425. package/dist/runtime/daimon/training/native/test-fixtures.js +0 -162
  426. package/dist/runtime/daimon/training/native/test-fixtures.js.map +0 -1
  427. package/dist/runtime/daimon/training/native/transcript.d.ts +0 -96
  428. package/dist/runtime/daimon/training/native/transcript.js +0 -239
  429. package/dist/runtime/daimon/training/native/transcript.js.map +0 -1
  430. package/dist/runtime/daimon/training/native/transport/delivery.d.ts +0 -27
  431. package/dist/runtime/daimon/training/native/transport/delivery.js +0 -98
  432. package/dist/runtime/daimon/training/native/transport/delivery.js.map +0 -1
  433. package/dist/runtime/daimon/training/native/transport/http.d.ts +0 -3
  434. package/dist/runtime/daimon/training/native/transport/http.js +0 -81
  435. package/dist/runtime/daimon/training/native/transport/http.js.map +0 -1
  436. package/dist/runtime/daimon/training/native/transport/index.d.ts +0 -4
  437. package/dist/runtime/daimon/training/native/transport/index.js +0 -3
  438. package/dist/runtime/daimon/training/native/transport/index.js.map +0 -1
  439. package/dist/runtime/daimon/training/native/transport/types.d.ts +0 -15
  440. package/dist/runtime/daimon/training/native/transport/types.js +0 -2
  441. package/dist/runtime/daimon/training/native/transport/types.js.map +0 -1
  442. package/dist/runtime/daimon/training/native/worker/cli.d.ts +0 -1
  443. package/dist/runtime/daimon/training/native/worker/cli.js +0 -17
  444. package/dist/runtime/daimon/training/native/worker/cli.js.map +0 -1
  445. package/dist/runtime/daimon/training/native/worker/control.d.ts +0 -20
  446. package/dist/runtime/daimon/training/native/worker/control.js +0 -266
  447. package/dist/runtime/daimon/training/native/worker/control.js.map +0 -1
  448. package/dist/runtime/daimon/training/native/worker/deliveries.d.ts +0 -38
  449. package/dist/runtime/daimon/training/native/worker/deliveries.js +0 -91
  450. package/dist/runtime/daimon/training/native/worker/deliveries.js.map +0 -1
  451. package/dist/runtime/daimon/training/native/worker/evidence/collect.d.ts +0 -54
  452. package/dist/runtime/daimon/training/native/worker/evidence/collect.js +0 -278
  453. package/dist/runtime/daimon/training/native/worker/evidence/collect.js.map +0 -1
  454. package/dist/runtime/daimon/training/native/worker/evidence/execution.d.ts +0 -102
  455. package/dist/runtime/daimon/training/native/worker/evidence/execution.js +0 -191
  456. package/dist/runtime/daimon/training/native/worker/evidence/execution.js.map +0 -1
  457. package/dist/runtime/daimon/training/native/worker/evidence/index.d.ts +0 -3
  458. package/dist/runtime/daimon/training/native/worker/evidence/index.js +0 -4
  459. package/dist/runtime/daimon/training/native/worker/evidence/index.js.map +0 -1
  460. package/dist/runtime/daimon/training/native/worker/evidence/io.d.ts +0 -20
  461. package/dist/runtime/daimon/training/native/worker/evidence/io.js +0 -130
  462. package/dist/runtime/daimon/training/native/worker/evidence/io.js.map +0 -1
  463. package/dist/runtime/daimon/training/native/worker/evidence/seal.d.ts +0 -3
  464. package/dist/runtime/daimon/training/native/worker/evidence/seal.js +0 -67
  465. package/dist/runtime/daimon/training/native/worker/evidence/seal.js.map +0 -1
  466. package/dist/runtime/daimon/training/native/worker/index.d.ts +0 -11
  467. package/dist/runtime/daimon/training/native/worker/index.js +0 -8
  468. package/dist/runtime/daimon/training/native/worker/index.js.map +0 -1
  469. package/dist/runtime/daimon/training/native/worker/profile.d.ts +0 -23
  470. package/dist/runtime/daimon/training/native/worker/profile.js +0 -149
  471. package/dist/runtime/daimon/training/native/worker/profile.js.map +0 -1
  472. package/dist/runtime/daimon/training/native/worker/public.d.ts +0 -53
  473. package/dist/runtime/daimon/training/native/worker/public.js +0 -22
  474. package/dist/runtime/daimon/training/native/worker/public.js.map +0 -1
  475. package/dist/runtime/daimon/training/native/worker/sandbox.d.ts +0 -4
  476. package/dist/runtime/daimon/training/native/worker/sandbox.js +0 -54
  477. package/dist/runtime/daimon/training/native/worker/sandbox.js.map +0 -1
  478. package/dist/runtime/daimon/training/native/worker/server.d.ts +0 -4
  479. package/dist/runtime/daimon/training/native/worker/server.js +0 -102
  480. package/dist/runtime/daimon/training/native/worker/server.js.map +0 -1
  481. package/dist/runtime/daimon/training/native/worker/types.d.ts +0 -318
  482. package/dist/runtime/daimon/training/native/worker/types.js +0 -2
  483. package/dist/runtime/daimon/training/native/worker/types.js.map +0 -1
  484. package/dist/runtime/daimon/training/native/worker/wake-delivery/index.d.ts +0 -4
  485. package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js +0 -4
  486. package/dist/runtime/daimon/training/native/worker/wake-delivery/index.js.map +0 -1
  487. package/dist/runtime/daimon/training/native/worker/wake-delivery/source.d.ts +0 -3
  488. package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js +0 -16
  489. package/dist/runtime/daimon/training/native/worker/wake-delivery/source.js.map +0 -1
  490. package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.d.ts +0 -4
  491. package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js +0 -52
  492. package/dist/runtime/daimon/training/native/worker/wake-delivery/terminal.js.map +0 -1
  493. package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.d.ts +0 -21
  494. package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js +0 -198
  495. package/dist/runtime/daimon/training/native/worker/wake-delivery/transport.js.map +0 -1
  496. package/dist/runtime/daimon/training/native/worker/wake-delivery/types.d.ts +0 -91
  497. package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js +0 -2
  498. package/dist/runtime/daimon/training/native/worker/wake-delivery/types.js.map +0 -1
  499. package/dist/runtime/daimon/training/native/worker/worker.d.ts +0 -1
  500. package/dist/runtime/daimon/training/native/worker/worker.js +0 -105
  501. package/dist/runtime/daimon/training/native/worker/worker.js.map +0 -1
  502. package/dist/runtime/daimon/training/providers/grok-broker/broker.d.ts +0 -20
  503. package/dist/runtime/daimon/training/providers/grok-broker/broker.js +0 -55
  504. package/dist/runtime/daimon/training/providers/grok-broker/broker.js.map +0 -1
  505. package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.d.ts +0 -15
  506. package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js +0 -29
  507. package/dist/runtime/daimon/training/providers/grok-broker/grant-fixtures.js.map +0 -1
  508. package/dist/runtime/daimon/training/providers/grok-broker/grant-home.d.ts +0 -16
  509. package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js +0 -60
  510. package/dist/runtime/daimon/training/providers/grok-broker/grant-home.js.map +0 -1
  511. package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.d.ts +0 -81
  512. package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js +0 -221
  513. package/dist/runtime/daimon/training/providers/grok-broker/grant-pool.js.map +0 -1
  514. package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.d.ts +0 -31
  515. package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js +0 -78
  516. package/dist/runtime/daimon/training/providers/grok-broker/grant-releases.js.map +0 -1
  517. package/dist/runtime/daimon/training/providers/grok-broker/grants.d.ts +0 -63
  518. package/dist/runtime/daimon/training/providers/grok-broker/grants.js +0 -20
  519. package/dist/runtime/daimon/training/providers/grok-broker/grants.js.map +0 -1
  520. package/dist/runtime/daimon/training/providers/grok-broker/index.d.ts +0 -3
  521. package/dist/runtime/daimon/training/providers/grok-broker/index.js +0 -4
  522. package/dist/runtime/daimon/training/providers/grok-broker/index.js.map +0 -1
  523. package/dist/runtime/daimon/training/public.d.ts +0 -6
  524. package/dist/runtime/daimon/training/public.js +0 -5
  525. package/dist/runtime/daimon/training/public.js.map +0 -1
  526. package/dist/runtime/daimon/training/services/account-lease.d.ts +0 -7
  527. package/dist/runtime/daimon/training/services/account-lease.js +0 -76
  528. package/dist/runtime/daimon/training/services/account-lease.js.map +0 -1
  529. package/dist/runtime/daimon/training/services/freshness.d.ts +0 -15
  530. package/dist/runtime/daimon/training/services/freshness.js +0 -19
  531. package/dist/runtime/daimon/training/services/freshness.js.map +0 -1
  532. package/dist/runtime/daimon/training/services/index.d.ts +0 -4
  533. package/dist/runtime/daimon/training/services/index.js +0 -4
  534. package/dist/runtime/daimon/training/services/index.js.map +0 -1
  535. package/dist/runtime/daimon/training/services/slot-freshness.d.ts +0 -34
  536. package/dist/runtime/daimon/training/services/slot-freshness.js +0 -178
  537. package/dist/runtime/daimon/training/services/slot-freshness.js.map +0 -1
  538. package/dist/runtime/daimon/wakeMoments.js.map +0 -1
  539. package/dist/runtime/pi/adapter.d.ts +0 -3
  540. package/dist/runtime/pi/adapter.js +0 -230
  541. package/dist/runtime/pi/appActivitySource.d.ts +0 -1
  542. package/dist/runtime/pi/appActivitySource.js +0 -199
  543. package/dist/runtime/pi/appAgentConfig.d.ts +0 -11
  544. package/dist/runtime/pi/appAgentConfig.js +0 -264
  545. package/dist/runtime/pi/appCliEnginesSource.d.ts +0 -1
  546. package/dist/runtime/pi/appCliEnginesSource.js +0 -183
  547. package/dist/runtime/pi/appCliSource.d.ts +0 -1
  548. package/dist/runtime/pi/appCliSource.js +0 -353
  549. package/dist/runtime/pi/appControlSource.d.ts +0 -1
  550. package/dist/runtime/pi/appControlSource.js +0 -390
  551. package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +0 -1
  552. package/dist/runtime/pi/appControlWakeIdentitySource.js +0 -19
  553. package/dist/runtime/pi/appCoreSource.d.ts +0 -4
  554. package/dist/runtime/pi/appCoreSource.js +0 -244
  555. package/dist/runtime/pi/appPreludeSource.d.ts +0 -1
  556. package/dist/runtime/pi/appPreludeSource.js +0 -192
  557. package/dist/runtime/pi/appScheduleSource.d.ts +0 -1
  558. package/dist/runtime/pi/appScheduleSource.js +0 -84
  559. package/dist/runtime/pi/appScriptedEngine.d.ts +0 -31
  560. package/dist/runtime/pi/appScriptedEngine.js +0 -42
  561. package/dist/runtime/pi/appSource.d.ts +0 -4
  562. package/dist/runtime/pi/appSource.js +0 -12
  563. package/dist/runtime/pi/appTemplate.d.ts +0 -14
  564. package/dist/runtime/pi/appTemplate.js +0 -28
  565. package/dist/runtime/pi/appTemplateTypes.d.ts +0 -64
  566. package/dist/runtime/pi/appTemplateTypes.js +0 -18
  567. package/dist/runtime/pi/appWakeContextSource.d.ts +0 -1
  568. package/dist/runtime/pi/appWakeContextSource.js +0 -398
  569. package/dist/runtime/pi/containerTargets.d.ts +0 -4
  570. package/dist/runtime/pi/containerTargets.js +0 -63
  571. package/dist/runtime/pi/runAuth.d.ts +0 -2
  572. package/dist/runtime/pi/runAuth.js +0 -185
  573. package/dist/runtime/pi/testHelpers.d.ts +0 -2
  574. package/dist/shared/errors.js.map +0 -1
  575. package/dist/training/subjects/environment.d.ts +0 -2
  576. package/dist/training/subjects/environment.js +0 -14
  577. package/dist/training/subjects/environment.js.map +0 -1
  578. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/index.d.ts +0 -0
  579. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/index.js +0 -0
  580. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/protocol.d.ts +0 -0
  581. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/protocol.js +0 -0
  582. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/provider.d.ts +0 -0
  583. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/provider.js +0 -0
  584. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/strict-schema.d.ts +0 -0
  585. /package/dist/runtime/{codex-exec → daimon}/training/providers/codex-subscription/strict-schema.js +0 -0
@@ -1,110 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { readFileSync } from "node:fs";
3
- import path from "node:path";
4
- import { SpawnfileError } from "../../../shared/index.js";
5
- import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
6
- /** Filesystems that silently ignore `chown`/`chmod`, so a worker-uid probe over them proves nothing. */
7
- export const UNENFORCED_OWNERSHIP_FILESYSTEMS = ["virtiofs", "9p", "nfs", "nfs4", "cifs", "smb3", "vboxsf", "grpcfuse"];
8
- const isUnenforced = (fstype) => UNENFORCED_OWNERSHIP_FILESYSTEMS.includes(fstype) || fstype.startsWith("fuse");
9
- /**
10
- * The filesystem type backing `target`, from the longest mount point that is a
11
- * prefix of it. `/proc/self/mountinfo` octal-escapes space, tab, newline and
12
- * backslash in the mount point field, exactly as the durable-mount guard
13
- * already handles elsewhere in this compiler.
14
- */
15
- export const resolveBackingFilesystem = (target, mountinfo) => {
16
- let best = "", fstype = "";
17
- for (const line of mountinfo.split("\n")) {
18
- const fields = line.split(" ");
19
- const separator = fields.indexOf("-");
20
- if (separator < 0 || fields.length < separator + 2)
21
- continue;
22
- const mountPoint = (fields[4] ?? "").replace(/\\(04[0011]|134)/gu, (match) => ({ "\\040": " ", "\\011": "\t", "\\012": "\n", "\\134": "\\" }[match] ?? match));
23
- if (mountPoint !== "/" && target !== mountPoint && !target.startsWith(`${mountPoint}/`))
24
- continue;
25
- if (mountPoint.length >= best.length) {
26
- best = mountPoint;
27
- fstype = fields[separator + 1] ?? "";
28
- }
29
- }
30
- return fstype;
31
- };
32
- /**
33
- * One denied canary per deny path, or a refusal naming the first path whose
34
- * denial this container cannot prove.
35
- *
36
- * Three cases, in decreasing strength:
37
- *
38
- * - A **sealed** path (the datasets' root) must sit on a filesystem that
39
- * enforces unix ownership and must be observed *unenterable* by the worker
40
- * uid. `unenforcedBindPolicy` does not reach it: the sandbox profile alone
41
- * is a boundary the worker can lift from inside a namespace of its own, and
42
- * the held-out test set is the one thing that cannot rest on it.
43
- * - Any other path on an ownership-enforcing filesystem — a host bind over
44
- * ext4/xfs/btrfs/overlay included — gets a real worker-uid read probe. This
45
- * is what makes the documented `refuse` default reachable: a host bind is
46
- * only unprovable where the filesystem says so.
47
- * - A path on a filesystem that ignores ownership (virtiofs and grpcfuse under
48
- * Docker Desktop and Colima, 9p, nfs, cifs, fuse) cannot be probed at all.
49
- * `refuse` — the default — fails the recycle and writes no receipt;
50
- * `profile-only` accepts the attested deny entry as that path's only
51
- * boundary and names every such path in the supervisor log.
52
- */
53
- export const resolveTrainingCanaries = async (options) => {
54
- const canaries = [];
55
- for (const target of options.denyPaths) {
56
- const fstype = resolveBackingFilesystem(target, options.mountinfo);
57
- const origin = `${options.hostBindPaths.includes(target) ? "a host bind mount on " : ""}${fstype || "an unknown filesystem"}`;
58
- if (options.sealedPaths.includes(target)) {
59
- if (isUnenforced(fstype)) {
60
- throw new SpawnfileError("runtime_error", `Grok slot sealed canary ${target} is backed by ${origin}, which ignores unix ownership, so the worker uid's denial cannot be proven; the sealed datasets must sit under a directory on an ownership-enforcing filesystem and no unenforcedBindPolicy waives this`);
61
- }
62
- if (!await options.probe(target, "enter")) {
63
- throw new SpawnfileError("runtime_error", `Grok slot sealed canary ${target} is still reachable by the worker uid`);
64
- }
65
- }
66
- else if (isUnenforced(fstype)) {
67
- if (options.unenforcedBindPolicy === "refuse") {
68
- throw new SpawnfileError("runtime_error", `Grok slot canary ${target} is backed by ${origin}, which ignores unix ownership; declare unenforcedBindPolicy "profile-only" to accept the bubblewrap deny list as its only boundary`);
69
- }
70
- options.log(`canary ${target} certified by the enforced sandbox profile only (${origin} ignores unix ownership)`);
71
- }
72
- else if (!await options.probe(target, "read")) {
73
- throw new SpawnfileError("runtime_error", `Grok slot canary ${target} is still readable by the worker uid`);
74
- }
75
- canaries.push({ path: target, method: "sandboxed-read", result: "denied" });
76
- }
77
- return canaries;
78
- };
79
- /** `noopolis.daimon.grok-slot-preflight.v2`, in the exact member order Daimon's strict schema accepts. */
80
- export const buildTrainingSlotReceipt = (input) => {
81
- if (!/^[a-f0-9]{64}$/u.test(input.nonce))
82
- throw new SpawnfileError("runtime_error", "Grok slot recycle nonce must be 32 random bytes in lowercase hex");
83
- if (!Number.isSafeInteger(input.generation) || input.generation < 1)
84
- throw new SpawnfileError("runtime_error", "Grok slot generation must be a positive integer");
85
- if (input.canaries.length === 0)
86
- throw new SpawnfileError("runtime_error", "Grok slot receipt requires at least one denied canary");
87
- return {
88
- version: DAIMON_GROK_ENGINE_BROKER.slotPreflightVersion,
89
- slot: input.slot,
90
- worker_uid: input.workerUid,
91
- generation: input.generation,
92
- nonce: input.nonce,
93
- projection_sha256: input.projectionSha256,
94
- sandbox_profile_sha256: input.sandboxProfileSha256,
95
- seccomp_profile_sha256: input.seccompProfileSha256,
96
- sandbox_runtime: "bubblewrap",
97
- grok_executable_sha256: input.grokExecutableSha256,
98
- canaries: [...input.canaries],
99
- created_at: `${input.createdAt.toISOString().slice(0, 23)}Z`
100
- };
101
- };
102
- /** sha256 of the pinned Grok executable the slot's workers exec, refused unless it is a manifest-pinned 1.0.34 build. */
103
- export const readGrokExecutableSha256 = (executable = DAIMON_GROK_ENGINE_BROKER.grokExecutablePath) => {
104
- const digest = createHash("sha256").update(readFileSync(executable)).digest("hex");
105
- const pinned = [DAIMON_GROK_ENGINE_BROKER.grokCliArtifacts.arm64.sha256, DAIMON_GROK_ENGINE_BROKER.grokCliArtifacts.x64.sha256];
106
- if (!pinned.includes(digest)) {
107
- throw new SpawnfileError("runtime_error", `${path.basename(executable)} is not the manifest-pinned Grok ${DAIMON_GROK_ENGINE_BROKER.grokCliVersion} build`);
108
- }
109
- return digest;
110
- };
@@ -1,33 +0,0 @@
1
- import { type Socket } from "node:net";
2
- /** A reply is one short JSON line; anything longer is not this supervisor. */
3
- export declare const TRAINING_RECYCLE_MAX_REPLY_BYTES = 65536;
4
- /** Above the supervisor's 120 s drain deadline plus wipe, provision and canaries. */
5
- export declare const TRAINING_RECYCLE_DEFAULT_TIMEOUT_MS = 180000;
6
- export interface RecycleTrainingSlotOptions {
7
- slot: number;
8
- /** This trial's 32-byte hex nonce; the published receipt must echo it. */
9
- nonce: string;
10
- signal?: AbortSignal;
11
- /** Opens the supervisor connection; defaults to the container's fixed supervisor socket. */
12
- connect?: () => Socket;
13
- timeoutMs?: number;
14
- }
15
- export interface TrainingSlotRecycleReceipt {
16
- slot: number;
17
- generation: number;
18
- nonce: string;
19
- /** The receipt path the supervisor says it published; callers compare it to the slot descriptor. */
20
- receipt: string;
21
- durationMs: number;
22
- }
23
- /**
24
- * One `recycle` over the root slot supervisor socket (`spawnfile.training-slot-supervisor.v2`).
25
- *
26
- * The verb takes a slot and a nonce, never a path or a command: the container
27
- * replays its own audited provisioning and publishes the slot preflight receipt
28
- * echoing this nonce. The answer must bind this request exactly (protocol,
29
- * verb, slot, nonce, a generation of at least 1) or it is refused; a supervisor
30
- * refusal surfaces with its own reason. The reply is bounded, and the call is
31
- * bounded by `timeoutMs` and `signal`.
32
- */
33
- export declare const recycleTrainingSlot: (options: RecycleTrainingSlotOptions) => Promise<TrainingSlotRecycleReceipt>;
@@ -1,112 +0,0 @@
1
- import { createConnection } from "node:net";
2
- import { SpawnfileError } from "../../../shared/index.js";
3
- import { TRAINING_MAX_SLOTS, TRAINING_SUPERVISOR_SOCKET } from "./paths.js";
4
- import { TRAINING_SUPERVISOR_PROTOCOL } from "./supervisor.js";
5
- /** A reply is one short JSON line; anything longer is not this supervisor. */
6
- export const TRAINING_RECYCLE_MAX_REPLY_BYTES = 65_536;
7
- /** Above the supervisor's 120 s drain deadline plus wipe, provision and canaries. */
8
- export const TRAINING_RECYCLE_DEFAULT_TIMEOUT_MS = 180_000;
9
- const NONCE = /^[a-f0-9]{64}$/u;
10
- const REPLY_KEYS = ["durationMs", "generation", "nonce", "ok", "receipt", "slot", "v", "verb"];
11
- const refuse = (message) => new SpawnfileError("runtime_error", message);
12
- /** The supervisor's refusal text is diagnostic only; keep it one bounded printable line. */
13
- const refusalText = (value) => typeof value === "string" ? value.replace(/[^\x20-\x7e]/gu, "?").slice(0, 512) || "unknown" : "unknown";
14
- const bindReply = (answer, slot, nonce) => {
15
- if (answer.ok !== true)
16
- throw refuse(`Training slot ${slot} recycle refused: ${refusalText(answer.error)}`);
17
- if (Object.keys(answer).sort().join(",") !== REPLY_KEYS.join(",") || answer.verb !== "recycle") {
18
- throw refuse("Training slot recycle answer is not a recycle receipt");
19
- }
20
- if (answer.slot !== slot)
21
- throw refuse(`Training slot recycle answer names slot ${String(answer.slot)}, not the leased slot ${slot}`);
22
- if (answer.nonce !== nonce)
23
- throw refuse("Training slot recycle answer does not echo this trial's nonce");
24
- if (!Number.isSafeInteger(answer.generation) || answer.generation < 1) {
25
- throw refuse("Training slot recycle answer carries no valid generation");
26
- }
27
- if (typeof answer.receipt !== "string" || answer.receipt.length === 0)
28
- throw refuse("Training slot recycle answer names no receipt");
29
- if (typeof answer.durationMs !== "number" || !Number.isFinite(answer.durationMs) || answer.durationMs < 0) {
30
- throw refuse("Training slot recycle answer carries no valid duration");
31
- }
32
- return { slot, generation: answer.generation, nonce, receipt: answer.receipt, durationMs: answer.durationMs };
33
- };
34
- /**
35
- * One `recycle` over the root slot supervisor socket (`spawnfile.training-slot-supervisor.v2`).
36
- *
37
- * The verb takes a slot and a nonce, never a path or a command: the container
38
- * replays its own audited provisioning and publishes the slot preflight receipt
39
- * echoing this nonce. The answer must bind this request exactly (protocol,
40
- * verb, slot, nonce, a generation of at least 1) or it is refused; a supervisor
41
- * refusal surfaces with its own reason. The reply is bounded, and the call is
42
- * bounded by `timeoutMs` and `signal`.
43
- */
44
- export const recycleTrainingSlot = (options) => {
45
- const { slot, nonce } = options;
46
- if (!Number.isInteger(slot) || slot < 0 || slot >= TRAINING_MAX_SLOTS) {
47
- return Promise.reject(new SpawnfileError("validation_error", `Training slot recycle requires a slot index from 0 to ${TRAINING_MAX_SLOTS - 1}`));
48
- }
49
- if (!NONCE.test(nonce))
50
- return Promise.reject(new SpawnfileError("validation_error", "Training slot recycle requires a 32-byte hex nonce"));
51
- try {
52
- options.signal?.throwIfAborted();
53
- }
54
- catch (error) {
55
- return Promise.reject(error);
56
- }
57
- return new Promise((resolve, reject) => {
58
- const socket = (options.connect ?? (() => createConnection(TRAINING_SUPERVISOR_SOCKET)))();
59
- let buffer = Buffer.alloc(0), settled = false;
60
- const onAbort = () => finish(options.signal?.reason instanceof Error ? options.signal.reason : refuse("Training slot recycle was aborted"));
61
- const timer = setTimeout(() => finish(refuse(`Training slot ${slot} recycle timed out before the supervisor answered`)), options.timeoutMs ?? TRAINING_RECYCLE_DEFAULT_TIMEOUT_MS);
62
- function finish(error, value) {
63
- if (settled)
64
- return;
65
- settled = true;
66
- clearTimeout(timer);
67
- options.signal?.removeEventListener("abort", onAbort);
68
- socket.destroy();
69
- if (error === undefined)
70
- resolve(value);
71
- else
72
- reject(error);
73
- }
74
- options.signal?.addEventListener("abort", onAbort, { once: true });
75
- socket.on("error", (error) => finish(refuse(`Training slot recycle could not reach the root supervisor: ${error.message}`)));
76
- socket.on("close", () => finish(refuse("Training slot recycle connection closed before an answer")));
77
- socket.on("connect", () => socket.write(`${JSON.stringify({ v: TRAINING_SUPERVISOR_PROTOCOL, verb: "recycle", slot, nonce })}\n`));
78
- socket.on("data", (chunk) => {
79
- buffer = Buffer.concat([buffer, chunk]);
80
- const end = buffer.indexOf(0x0a);
81
- if (end < 0 ? buffer.length > TRAINING_RECYCLE_MAX_REPLY_BYTES : end > TRAINING_RECYCLE_MAX_REPLY_BYTES) {
82
- finish(refuse("Training slot recycle answer exceeded its bound"));
83
- return;
84
- }
85
- if (end < 0)
86
- return;
87
- let answer;
88
- try {
89
- answer = JSON.parse(buffer.subarray(0, end).toString("utf8"));
90
- }
91
- catch {
92
- finish(refuse("Training slot recycle answer is not JSON"));
93
- return;
94
- }
95
- if (!answer || typeof answer !== "object" || Array.isArray(answer)) {
96
- finish(refuse("Training slot recycle answer is not an object"));
97
- return;
98
- }
99
- const record = answer;
100
- if (record.v !== TRAINING_SUPERVISOR_PROTOCOL) {
101
- finish(refuse("Training slot recycle answer names another protocol"));
102
- return;
103
- }
104
- try {
105
- finish(undefined, bindReply(record, slot, nonce));
106
- }
107
- catch (error) {
108
- finish(error);
109
- }
110
- });
111
- });
112
- };
@@ -1,46 +0,0 @@
1
- import { type DaimonGrokBrokerModel, type DaimonGrokBrokerReasoningEffort } from "../../../runtime/daimon/contractManifest.js";
2
- import { type DaimonAgentSkill } from "../../../runtime/daimon/grokWorkerSkills.js";
3
- import { type DaimonGrokRegistration } from "../../containerDaimonGrokWorkerRender.js";
4
- /**
5
- * The one training slot's deny list: Daimon's own protected set for a
6
- * single-agent organization (Grok bootstrap, realm, and the slot state root that
7
- * holds the wake-acceptance store) plus everything this container provisions that the subject must not read —
8
- * the evaluator roots, the caller's protected `/run/spawnfile-training` paths, the broker
9
- * control and registration roots, the grant home root, the inference ledger,
10
- * the per-slot ledger, turn store and supervisor socket directory.
11
- *
12
- * The same two refusals the production render enforces apply here: an entry
13
- * that equals or contains a Grok 1.0.34 base-profile grant makes Grok refuse
14
- * the profile outright, and masks cannot nest, so an entry covered by another
15
- * entry is a provisioning bug rather than something to silently drop.
16
- */
17
- export declare const resolveTrainingGrokDenyPaths: (added?: readonly string[] | undefined, slot?: number, slots?: number) => string[];
18
- export interface TrainingGrokSlotInput {
19
- slot?: number;
20
- slots?: number;
21
- agentId: string;
22
- model: DaimonGrokBrokerModel;
23
- reasoningEffort: DaimonGrokBrokerReasoningEffort;
24
- /** Deny entries this container adds beyond Daimon's own protected set; defaults to the fixed training set. */
25
- denyPaths?: readonly string[];
26
- /**
27
- * The declaration's per-turn limits. The broker registration must declare
28
- * them, because a wake may only LOWER a declared limit: a trial whose wake
29
- * ceiling exceeds the manifest defaults is refused as `invalid_request`.
30
- */
31
- limits?: {
32
- maxRequests: number;
33
- maxTokens: number;
34
- timeoutMs: number;
35
- };
36
- /** The declaration's skills; rendered into the slot's `$GROK_HOME/skills` and bound as `skillsSha256`. */
37
- skills?: readonly DaimonAgentSkill[];
38
- }
39
- /**
40
- * The single brokered Grok registration a training container runs, at the
41
- * fixed container paths in `paths.ts`. Unlike production it points
42
- * `usageLedgerPath` at the per-slot ledger, because each trial's spend must be
43
- * separable and a recycle wipes it; the container-wide ledger and wake fuse do
44
- * not exist here.
45
- */
46
- export declare const resolveTrainingGrokRegistration: (input: TrainingGrokSlotInput) => DaimonGrokRegistration;
@@ -1,113 +0,0 @@
1
- import path from "node:path";
2
- import { SpawnfileError } from "../../../shared/index.js";
3
- import { DAIMON_GROK_BROKER_MODELS, DAIMON_GROK_BROKER_REASONING_EFFORTS, DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
4
- import { DAIMON_GROK_WORKER_HOME_DIRECTORY, daimonGrokWorkerSandboxProfileSha256, renderDaimonGrokWorkerSandboxProfile, resolveDaimonGrokClockedWorkerConfig } from "../../../runtime/daimon/grokWorkerContract.js";
5
- import { resolveDaimonGrokWorkerSkills } from "../../../runtime/daimon/grokWorkerSkills.js";
6
- import { DAIMON_GROK_BASE_PROFILE_GRANTS, assertCanonicalRegisteredPath } from "../../containerDaimonGrokWorkerRender.js";
7
- import { trainingSlotPaths, trainingEvaluatorPaths, TRAINING_BOOTSTRAP_MOUNT, TRAINING_REALM_MOUNT, TRAINING_DEFERRED_DENY_PATHS } from "./paths.js";
8
- const fail = (message) => {
9
- throw new SpawnfileError("compile_error", message);
10
- };
11
- const within = (candidate, root) => candidate === root || candidate.startsWith(`${root}/`);
12
- /**
13
- * The one training slot's deny list: Daimon's own protected set for a
14
- * single-agent organization (Grok bootstrap, realm, and the slot state root that
15
- * holds the wake-acceptance store) plus everything this container provisions that the subject must not read —
16
- * the evaluator roots, the caller's protected `/run/spawnfile-training` paths, the broker
17
- * control and registration roots, the grant home root, the inference ledger,
18
- * the per-slot ledger, turn store and supervisor socket directory.
19
- *
20
- * The same two refusals the production render enforces apply here: an entry
21
- * that equals or contains a Grok 1.0.34 base-profile grant makes Grok refuse
22
- * the profile outright, and masks cannot nest, so an entry covered by another
23
- * entry is a provisioning bug rather than something to silently drop.
24
- */
25
- export const resolveTrainingGrokDenyPaths = (added = undefined, slot = 0, slots = 1) => {
26
- const p = trainingSlotPaths(slot);
27
- const required = trainingEvaluatorPaths(slot, slots).map(entry => entry.path);
28
- // The wake-acceptance store is masked through `p.state`, never directly: Grok 1.0.34
29
- // materializes every deny target inside bubblewrap AS THE WORKER UID, and the store's parent is
30
- // `2000:2000 0700`, so the store itself is unplaceable and would make Grok refuse the whole profile
31
- // (`.runtime/grok-deny-placement/EVIDENCE.md`). The state root covers it and nothing else lives there.
32
- const daimonOwn = [TRAINING_BOOTSTRAP_MOUNT, TRAINING_REALM_MOUNT, p.state];
33
- const grokHome = path.posix.join(p.workerHome, DAIMON_GROK_WORKER_HOME_DIRECTORY);
34
- const grants = [
35
- ...DAIMON_GROK_BASE_PROFILE_GRANTS, p.workspace, grokHome,
36
- path.posix.join(grokHome, "sessions"), path.posix.join(p.workerHome, "tmp")
37
- ];
38
- const candidates = [...new Set([...daimonOwn, ...required, ...(added ?? [])])].sort();
39
- for (const entry of candidates) {
40
- assertCanonicalRegisteredPath("deny path", entry);
41
- const grant = grants.find((candidate) => within(candidate, entry));
42
- if (grant)
43
- fail(`Training Grok deny path ${entry} equals or contains the base profile grant ${grant}; Grok refuses such a profile`);
44
- if (within(p.workspace, entry) || within(p.workerHome, entry) || within(p.runtimeHome, entry)) {
45
- fail(`Training Grok deny path ${entry} would hide the subject's own workspace, home, or runtime home`);
46
- }
47
- if ([p.clockFile, DAIMON_GROK_ENGINE_BROKER.worker.taskClock.preloadPath,
48
- "/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1", "/usr/lib/aarch64-linux-gnu/faketime/libfaketime.so.1"].some(file => within(file, entry))) {
49
- fail(`Training Grok deny path ${entry} would hide the subject's task clock`);
50
- }
51
- const ancestor = candidates.find((other) => other !== entry && within(entry, other));
52
- if (ancestor)
53
- fail(`Training Grok deny path ${ancestor} would cover ${entry}; masks cannot nest`);
54
- }
55
- return candidates;
56
- };
57
- /**
58
- * The single brokered Grok registration a training container runs, at the
59
- * fixed container paths in `paths.ts`. Unlike production it points
60
- * `usageLedgerPath` at the per-slot ledger, because each trial's spend must be
61
- * separable and a recycle wipes it; the container-wide ledger and wake fuse do
62
- * not exist here.
63
- */
64
- export const resolveTrainingGrokRegistration = (input) => {
65
- const p = trainingSlotPaths(input.slot ?? 0);
66
- if (!input.agentId.trim())
67
- fail("Training Grok slot requires an agent id");
68
- if (!DAIMON_GROK_BROKER_MODELS.includes(input.model)
69
- || !DAIMON_GROK_BROKER_REASONING_EFFORTS.includes(input.reasoningEffort)) {
70
- fail(`Training Grok slot has no declared broker model and reasoning effort: ${input.agentId}`);
71
- }
72
- const home = assertCanonicalRegisteredPath("home", p.workerHome);
73
- const grokHome = path.posix.join(home, DAIMON_GROK_WORKER_HOME_DIRECTORY);
74
- const config = resolveDaimonGrokClockedWorkerConfig(input.model, input.reasoningEffort, p.slot);
75
- const denyPaths = resolveTrainingGrokDenyPaths(input.denyPaths, p.slot, input.slots ?? 1);
76
- const profile = renderDaimonGrokWorkerSandboxProfile(denyPaths);
77
- const eventsPath = path.posix.join(grokHome, DAIMON_GROK_ENGINE_BROKER.worker.home.sandboxEvents.relativePath);
78
- const profilePath = path.posix.join(grokHome, "sandbox.toml");
79
- for (const [label, value] of [["GROK_HOME", grokHome], ["profile", profilePath], ["events", eventsPath],
80
- ["workspace", p.workspace], ["runtime home", p.runtimeHome],
81
- ["usage ledger", p.usageLedger]])
82
- assertCanonicalRegisteredPath(label, value);
83
- const skills = resolveDaimonGrokWorkerSkills(input.skills);
84
- return {
85
- ...(skills ? { skills } : {}),
86
- agentId: input.agentId,
87
- config: config.bytes,
88
- configVariant: "clocked",
89
- ...(input.limits === undefined ? {} : { limits: { ...input.limits } }),
90
- configSha256: config.sha256,
91
- deferredDenyPaths: denyPaths.filter((entry) => TRAINING_DEFERRED_DENY_PATHS.includes(entry)),
92
- denyPaths,
93
- eventsPath,
94
- grokHome,
95
- home,
96
- model: input.model,
97
- profile,
98
- profilePath,
99
- profileSha256: daimonGrokWorkerSandboxProfileSha256(denyPaths),
100
- privateTmp: path.posix.join(home, DAIMON_GROK_ENGINE_BROKER.worker.home.privateTmp.relativeToWorkerHome),
101
- reasoningEffort: input.reasoningEffort,
102
- runtimeHome: p.runtimeHome,
103
- // Empty on purpose: training has no persistent mounts at all. Everything a trial writes under the slot
104
- // runtime home is per-slot tmpfs the recycle wipes, and the only thing provisioned inside it is the
105
- // setgid `tool-output/` spill directory, so the traversable `0710` home exposes nothing else.
106
- runtimeHomeMounts: [],
107
- slot: p.slot,
108
- spillDirectory: path.posix.join(p.runtimeHome, DAIMON_GROK_ENGINE_BROKER.worker.home.spillDirectory.relativeToRuntimeHome),
109
- uid: p.workerUid,
110
- usageLedgerPath: p.usageLedger,
111
- workspace: p.workspace
112
- };
113
- };
@@ -1,9 +0,0 @@
1
- /** Root uses the broker's slot reset seam; the broker owns active-turn, worker-reap and clock checks. */
2
- export declare const resetTrainingBrokerSlot: (slot: number, signal: AbortSignal, socketPath?: "/run/daimon-engine-broker/control.sock") => Promise<void>;
3
- /** The native control relay authenticates SO_PEERCRED uid 2000 and rejects root. */
4
- export declare const resetTrainingBrokerSlotAsOrganization: (slot: number, signal: AbortSignal, execute?: (file: string, args: string[], options: {
5
- signal: AbortSignal;
6
- timeout: number;
7
- }) => Promise<{
8
- stdout: string;
9
- }>) => Promise<void>;
@@ -1,71 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { promisify } from "node:util";
3
- import { randomUUID } from "node:crypto";
4
- import { createConnection } from "node:net";
5
- import { DAIMON_GROK_ENGINE_BROKER } from "../../../runtime/daimon/contractManifest.js";
6
- import { trainingSlotPaths } from "./paths.js";
7
- /** Root uses the broker's slot reset seam; the broker owns active-turn, worker-reap and clock checks. */
8
- export const resetTrainingBrokerSlot = (slot, signal, socketPath = DAIMON_GROK_ENGINE_BROKER.controlSocketPath) => {
9
- trainingSlotPaths(slot);
10
- signal.throwIfAborted();
11
- const requestId = randomUUID();
12
- const version = DAIMON_GROK_ENGINE_BROKER.controlProtocolVersion;
13
- const payload = Buffer.from(JSON.stringify({ version, kind: "reset_slot", requestId, slot }));
14
- const frame = Buffer.alloc(4 + payload.length);
15
- frame.writeUInt32BE(payload.length);
16
- payload.copy(frame, 4);
17
- return new Promise((resolve, reject) => {
18
- const socket = createConnection(socketPath);
19
- let buffer = Buffer.alloc(0), settled = false;
20
- const finish = (error) => {
21
- if (settled)
22
- return;
23
- settled = true;
24
- signal.removeEventListener("abort", abort);
25
- socket.destroy();
26
- if (error)
27
- reject(error);
28
- else
29
- resolve();
30
- };
31
- const abort = () => finish(new Error("Training broker reset aborted; slot must be quarantined"));
32
- signal.addEventListener("abort", abort, { once: true });
33
- socket.once("error", error => finish(error));
34
- socket.once("close", () => finish(new Error("Training broker reset refused: slot active, unavailable, or reset failed")));
35
- socket.once("connect", () => socket.write(frame));
36
- socket.on("data", chunk => {
37
- buffer = Buffer.concat([buffer, chunk]);
38
- if (buffer.length < 4)
39
- return;
40
- const size = buffer.readUInt32BE(0);
41
- if (size < 2 || size > 4096 || buffer.length > size + 4) {
42
- finish(new Error("Invalid broker reset response frame"));
43
- return;
44
- }
45
- if (buffer.length < size + 4)
46
- return;
47
- try {
48
- const response = JSON.parse(buffer.subarray(4).toString("utf8"));
49
- if (!response || response.version !== version || response.kind !== "slot_reset" || response.requestId !== requestId
50
- || response.slot !== slot || Object.keys(response).length !== 4)
51
- throw Error("Invalid broker reset acknowledgement");
52
- finish();
53
- }
54
- catch (error) {
55
- finish(error instanceof Error ? error : new Error("Invalid broker reset response"));
56
- }
57
- });
58
- });
59
- };
60
- /** The native control relay authenticates SO_PEERCRED uid 2000 and rejects root. */
61
- export const resetTrainingBrokerSlotAsOrganization = async (slot, signal, execute = promisify(execFile)) => {
62
- trainingSlotPaths(slot);
63
- signal.throwIfAborted();
64
- const uid = DAIMON_GROK_ENGINE_BROKER.identities.organizationUid;
65
- const program = `import { resetTrainingBrokerSlot } from ${JSON.stringify(import.meta.url)}; await resetTrainingBrokerSlot(Number(process.argv[1]), AbortSignal.timeout(10000)); process.stdout.write("slot-reset-complete\\n");`;
66
- const result = await execute("setpriv", ["--clear-groups", `--reuid=${uid}`, `--regid=${uid}`,
67
- "--inh-caps=-all", "--ambient-caps=-all", "--bounding-set=-all", "--", process.execPath,
68
- "--input-type=module", "--eval", program, String(slot)], { signal, timeout: 15_000 });
69
- if (result.stdout !== "slot-reset-complete\n")
70
- throw Error("Broker reset child returned no verified acknowledgement");
71
- };
@@ -1,32 +0,0 @@
1
- /**
2
- * Linux `MAX_ARG_STRLEN`: the most bytes one `execve` argument may carry. A
3
- * generated root program passed as `bash -c <script>` dies with `E2BIG` past
4
- * it — and a slot program embeds its declared skills, so the size grows with
5
- * the declaration. macOS has no per-argument limit, which is why this is
6
- * asserted in tests rather than observed.
7
- */
8
- export declare const LINUX_MAX_ARG_STRLEN = 131072;
9
- export type TrainingRootScriptRunner = (file: string, args: readonly string[], options: {
10
- maxBuffer: number;
11
- }) => Promise<{
12
- stdout: string;
13
- stderr: string;
14
- }>;
15
- export interface TrainingRootScriptOptions {
16
- shell?: string;
17
- maxBuffer?: number;
18
- run?: TrainingRootScriptRunner;
19
- tmpRoot?: string;
20
- }
21
- /** The argv a generated script runs under: bounded and independent of the script's size. */
22
- export declare const trainingRootScriptArgv: (scriptFile: string) => string[];
23
- /**
24
- * Runs a generated root shell program from a fresh `0700` directory holding a
25
- * `0600` script file, never from argv and never from stdin (a child that reads
26
- * stdin would consume the rest of the program). The directory is removed
27
- * afterwards, whatever the outcome.
28
- */
29
- export declare const runTrainingRootScript: (script: string, options?: TrainingRootScriptOptions) => Promise<{
30
- stdout: string;
31
- stderr: string;
32
- }>;
@@ -1,33 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { mkdtemp, rm, writeFile } from "node:fs/promises";
3
- import os from "node:os";
4
- import path from "node:path";
5
- import { promisify } from "node:util";
6
- /**
7
- * Linux `MAX_ARG_STRLEN`: the most bytes one `execve` argument may carry. A
8
- * generated root program passed as `bash -c <script>` dies with `E2BIG` past
9
- * it — and a slot program embeds its declared skills, so the size grows with
10
- * the declaration. macOS has no per-argument limit, which is why this is
11
- * asserted in tests rather than observed.
12
- */
13
- export const LINUX_MAX_ARG_STRLEN = 131_072;
14
- const execFileAsync = promisify(execFile);
15
- /** The argv a generated script runs under: bounded and independent of the script's size. */
16
- export const trainingRootScriptArgv = (scriptFile) => ["--noprofile", "--norc", "-eu", scriptFile];
17
- /**
18
- * Runs a generated root shell program from a fresh `0700` directory holding a
19
- * `0600` script file, never from argv and never from stdin (a child that reads
20
- * stdin would consume the rest of the program). The directory is removed
21
- * afterwards, whatever the outcome.
22
- */
23
- export const runTrainingRootScript = async (script, options = {}) => {
24
- const directory = await mkdtemp(path.join(options.tmpRoot ?? os.tmpdir(), "spawnfile-root-script-"));
25
- try {
26
- const file = path.join(directory, "script.sh");
27
- await writeFile(file, script, { mode: 0o600, flag: "wx" });
28
- return await (options.run ?? execFileAsync)(options.shell ?? "/bin/bash", trainingRootScriptArgv(file), { maxBuffer: options.maxBuffer ?? 1024 * 1024 });
29
- }
30
- finally {
31
- await rm(directory, { recursive: true, force: true });
32
- }
33
- };
@@ -1,22 +0,0 @@
1
- import type { DaimonGrokRegistration } from "../../containerDaimonGrokWorkerRender.js";
2
- import type { TrainingBrokerDeclaration } from "./declaration.js";
3
- import type { TrainingSlotRuntime } from "./supervisor.js";
4
- export interface TrainingSlotRuntimeOptions {
5
- declaration: TrainingBrokerDeclaration;
6
- registration: DaimonGrokRegistration;
7
- projectionSha256: string;
8
- reset: (slot: number, signal: AbortSignal) => Promise<void>;
9
- /** Test seam: the shell the provisioning script runs in and the `/proc` it reads identities from. */
10
- shell?: string;
11
- procRoot?: string;
12
- logPath?: string;
13
- }
14
- export declare const createTrainingSlotRuntime: (options: TrainingSlotRuntimeOptions) => TrainingSlotRuntime;
15
- /** Never remove or change the ownership/mode of a worker home or tmp: siblings attest those inodes. */
16
- export declare const renderTrainingSlotWipe: (slot: number) => string[];
17
- /** A failed privilege drop is not evidence of denial; require a positive worker verdict. */
18
- export declare const probeTrainingWorker: (uid: number, target: string, depth: "read" | "enter", execute?: (command: string, args: string[], options: {
19
- timeout: number;
20
- }) => Promise<{
21
- stdout: string;
22
- }>) => Promise<boolean>;