@xemahq/xema 0.59.1 → 0.60.1

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 (850) hide show
  1. package/README.md +1 -2
  2. package/dist/appliance-owner.d.ts.map +1 -1
  3. package/dist/appliance-owner.js +6 -6
  4. package/dist/appliance-owner.js.map +1 -1
  5. package/dist/assets/appliance-base/authorization.lock.json +5186 -0
  6. package/dist/assets/appliance-base/distribution.lock.json +760 -279
  7. package/dist/assets/appliance-base/images.lock.json +576 -513
  8. package/dist/assets/appliance-lean/authorization.lock.json +4648 -0
  9. package/dist/assets/appliance-lean/distribution.lock.json +641 -186
  10. package/dist/assets/appliance-lean/images.lock.json +574 -512
  11. package/dist/assets/boot-graph.json +33 -14
  12. package/dist/assets/distribution-assets.manifest.json +23 -20
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +7 -9
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/biome-dev.d.ts.map +1 -1
  17. package/dist/commands/biome-dev.js +41 -137
  18. package/dist/commands/biome-dev.js.map +1 -1
  19. package/dist/commands/biome-lifecycle.d.ts +24 -0
  20. package/dist/commands/biome-lifecycle.d.ts.map +1 -0
  21. package/dist/commands/biome-lifecycle.js +253 -0
  22. package/dist/commands/biome-lifecycle.js.map +1 -0
  23. package/dist/commands/biome.d.ts +2 -4
  24. package/dist/commands/biome.d.ts.map +1 -1
  25. package/dist/commands/biome.js +61 -46
  26. package/dist/commands/biome.js.map +1 -1
  27. package/dist/commands/config.d.ts.map +1 -1
  28. package/dist/commands/config.js +96 -8
  29. package/dist/commands/config.js.map +1 -1
  30. package/dist/commands/doctor.d.ts.map +1 -1
  31. package/dist/commands/doctor.js +13 -20
  32. package/dist/commands/doctor.js.map +1 -1
  33. package/dist/commands/down.d.ts.map +1 -1
  34. package/dist/commands/down.js +14 -21
  35. package/dist/commands/down.js.map +1 -1
  36. package/dist/commands/init.d.ts.map +1 -1
  37. package/dist/commands/init.js +6 -3
  38. package/dist/commands/init.js.map +1 -1
  39. package/dist/commands/installation-tenancy.d.ts +11 -0
  40. package/dist/commands/installation-tenancy.d.ts.map +1 -0
  41. package/dist/commands/installation-tenancy.js +308 -0
  42. package/dist/commands/installation-tenancy.js.map +1 -0
  43. package/dist/commands/installation.d.ts.map +1 -1
  44. package/dist/commands/installation.js +19 -5
  45. package/dist/commands/installation.js.map +1 -1
  46. package/dist/commands/logs.d.ts +2 -0
  47. package/dist/commands/logs.d.ts.map +1 -1
  48. package/dist/commands/logs.js +41 -8
  49. package/dist/commands/logs.js.map +1 -1
  50. package/dist/commands/{dev.d.ts → mirror.d.ts} +1 -1
  51. package/dist/commands/mirror.d.ts.map +1 -0
  52. package/dist/commands/mirror.js +132 -0
  53. package/dist/commands/mirror.js.map +1 -0
  54. package/dist/commands/source.d.ts.map +1 -1
  55. package/dist/commands/source.js +3 -2
  56. package/dist/commands/source.js.map +1 -1
  57. package/dist/commands/status.d.ts.map +1 -1
  58. package/dist/commands/status.js +40 -21
  59. package/dist/commands/status.js.map +1 -1
  60. package/dist/commands/up.d.ts.map +1 -1
  61. package/dist/commands/up.js +36 -4
  62. package/dist/commands/up.js.map +1 -1
  63. package/dist/dev/infra-preflight.d.ts.map +1 -1
  64. package/dist/dev/infra-preflight.js +0 -4
  65. package/dist/dev/infra-preflight.js.map +1 -1
  66. package/dist/lib/confirm.d.ts +3 -0
  67. package/dist/lib/confirm.d.ts.map +1 -0
  68. package/dist/lib/confirm.js +19 -0
  69. package/dist/lib/confirm.js.map +1 -0
  70. package/dist/lib/output-format.d.ts +6 -0
  71. package/dist/lib/output-format.d.ts.map +1 -0
  72. package/dist/lib/output-format.js +20 -0
  73. package/dist/lib/output-format.js.map +1 -0
  74. package/dist/mirror/config/mirror-config-document.d.ts +18 -0
  75. package/dist/mirror/config/mirror-config-document.d.ts.map +1 -0
  76. package/dist/mirror/config/mirror-config-document.js +57 -0
  77. package/dist/mirror/config/mirror-config-document.js.map +1 -0
  78. package/dist/mirror/config/mirror-config-schema.d.ts +54 -0
  79. package/dist/mirror/config/mirror-config-schema.d.ts.map +1 -0
  80. package/dist/mirror/config/mirror-config-schema.js +80 -0
  81. package/dist/mirror/config/mirror-config-schema.js.map +1 -0
  82. package/dist/mirror/kit/delta.d.ts +4 -0
  83. package/dist/mirror/kit/delta.d.ts.map +1 -0
  84. package/dist/mirror/kit/delta.js +41 -0
  85. package/dist/mirror/kit/delta.js.map +1 -0
  86. package/dist/mirror/kit/export-kit.d.ts +16 -0
  87. package/dist/mirror/kit/export-kit.d.ts.map +1 -0
  88. package/dist/mirror/kit/export-kit.js +112 -0
  89. package/dist/mirror/kit/export-kit.js.map +1 -0
  90. package/dist/mirror/kit/import-kit.d.ts +9 -0
  91. package/dist/mirror/kit/import-kit.d.ts.map +1 -0
  92. package/dist/mirror/kit/import-kit.js +166 -0
  93. package/dist/mirror/kit/import-kit.js.map +1 -0
  94. package/dist/mirror/kit/kit-archive.d.ts +4 -0
  95. package/dist/mirror/kit/kit-archive.d.ts.map +1 -0
  96. package/dist/mirror/kit/kit-archive.js +38 -0
  97. package/dist/mirror/kit/kit-archive.js.map +1 -0
  98. package/dist/mirror/kit/kit-layout.d.ts +10 -0
  99. package/dist/mirror/kit/kit-layout.d.ts.map +1 -0
  100. package/dist/mirror/kit/kit-layout.js +19 -0
  101. package/dist/mirror/kit/kit-layout.js.map +1 -0
  102. package/dist/mirror/kit/kit-sums.d.ts +5 -0
  103. package/dist/mirror/kit/kit-sums.d.ts.map +1 -0
  104. package/dist/mirror/kit/kit-sums.js +63 -0
  105. package/dist/mirror/kit/kit-sums.js.map +1 -0
  106. package/dist/mirror/kit/layout-sync.d.ts +8 -0
  107. package/dist/mirror/kit/layout-sync.d.ts.map +1 -0
  108. package/dist/mirror/kit/layout-sync.js +58 -0
  109. package/dist/mirror/kit/layout-sync.js.map +1 -0
  110. package/dist/mirror/plan/bundle-content.d.ts +10 -0
  111. package/dist/mirror/plan/bundle-content.d.ts.map +1 -0
  112. package/dist/mirror/plan/bundle-content.js +61 -0
  113. package/dist/mirror/plan/bundle-content.js.map +1 -0
  114. package/dist/mirror/plan/declaration-file.d.ts +9 -0
  115. package/dist/mirror/plan/declaration-file.d.ts.map +1 -0
  116. package/dist/mirror/plan/declaration-file.js +27 -0
  117. package/dist/mirror/plan/declaration-file.js.map +1 -0
  118. package/dist/mirror/plan/edition-inputs.d.ts +57 -0
  119. package/dist/mirror/plan/edition-inputs.d.ts.map +1 -0
  120. package/dist/mirror/plan/edition-inputs.js +44 -0
  121. package/dist/mirror/plan/edition-inputs.js.map +1 -0
  122. package/dist/mirror/plan/edition-reader.d.ts +9 -0
  123. package/dist/mirror/plan/edition-reader.d.ts.map +1 -0
  124. package/dist/mirror/plan/edition-reader.js +47 -0
  125. package/dist/mirror/plan/edition-reader.js.map +1 -0
  126. package/dist/mirror/plan/image-content.d.ts +30 -0
  127. package/dist/mirror/plan/image-content.d.ts.map +1 -0
  128. package/dist/mirror/plan/image-content.js +120 -0
  129. package/dist/mirror/plan/image-content.js.map +1 -0
  130. package/dist/mirror/plan/npm-lockfile.d.ts +12 -0
  131. package/dist/mirror/plan/npm-lockfile.d.ts.map +1 -0
  132. package/dist/mirror/plan/npm-lockfile.js +106 -0
  133. package/dist/mirror/plan/npm-lockfile.js.map +1 -0
  134. package/dist/mirror/plan/oci-reads.d.ts +22 -0
  135. package/dist/mirror/plan/oci-reads.d.ts.map +1 -0
  136. package/dist/mirror/plan/oci-reads.js +43 -0
  137. package/dist/mirror/plan/oci-reads.js.map +1 -0
  138. package/dist/mirror/plan/plan-command.d.ts +22 -0
  139. package/dist/mirror/plan/plan-command.d.ts.map +1 -0
  140. package/dist/mirror/plan/plan-command.js +81 -0
  141. package/dist/mirror/plan/plan-command.js.map +1 -0
  142. package/dist/mirror/plan/plan-file.d.ts +13 -0
  143. package/dist/mirror/plan/plan-file.d.ts.map +1 -0
  144. package/dist/mirror/plan/plan-file.js +63 -0
  145. package/dist/mirror/plan/plan-file.js.map +1 -0
  146. package/dist/mirror/plan/resolve-content-set.d.ts +16 -0
  147. package/dist/mirror/plan/resolve-content-set.d.ts.map +1 -0
  148. package/dist/mirror/plan/resolve-content-set.js +90 -0
  149. package/dist/mirror/plan/resolve-content-set.js.map +1 -0
  150. package/dist/mirror/preflight/glob.d.ts +2 -0
  151. package/dist/mirror/preflight/glob.d.ts.map +1 -0
  152. package/dist/mirror/preflight/glob.js +59 -0
  153. package/dist/mirror/preflight/glob.js.map +1 -0
  154. package/dist/mirror/preflight/harbor-api.d.ts +27 -0
  155. package/dist/mirror/preflight/harbor-api.d.ts.map +1 -0
  156. package/dist/mirror/preflight/harbor-api.js +39 -0
  157. package/dist/mirror/preflight/harbor-api.js.map +1 -0
  158. package/dist/mirror/preflight/preflight.d.ts +18 -0
  159. package/dist/mirror/preflight/preflight.d.ts.map +1 -0
  160. package/dist/mirror/preflight/preflight.js +41 -0
  161. package/dist/mirror/preflight/preflight.js.map +1 -0
  162. package/dist/mirror/preflight/tag-moves.d.ts +16 -0
  163. package/dist/mirror/preflight/tag-moves.d.ts.map +1 -0
  164. package/dist/mirror/preflight/tag-moves.js +28 -0
  165. package/dist/mirror/preflight/tag-moves.js.map +1 -0
  166. package/dist/mirror/preflight/write-probe.d.ts +10 -0
  167. package/dist/mirror/preflight/write-probe.d.ts.map +1 -0
  168. package/dist/mirror/preflight/write-probe.js +36 -0
  169. package/dist/mirror/preflight/write-probe.js.map +1 -0
  170. package/dist/mirror/target/extras.d.ts +16 -0
  171. package/dist/mirror/target/extras.d.ts.map +1 -0
  172. package/dist/mirror/target/extras.js +47 -0
  173. package/dist/mirror/target/extras.js.map +1 -0
  174. package/dist/mirror/target/npm-registry.d.ts +20 -0
  175. package/dist/mirror/target/npm-registry.d.ts.map +1 -0
  176. package/dist/mirror/target/npm-registry.js +67 -0
  177. package/dist/mirror/target/npm-registry.js.map +1 -0
  178. package/dist/mirror/target/npm-sync.d.ts +15 -0
  179. package/dist/mirror/target/npm-sync.d.ts.map +1 -0
  180. package/dist/mirror/target/npm-sync.js +44 -0
  181. package/dist/mirror/target/npm-sync.js.map +1 -0
  182. package/dist/mirror/target/oci-items.d.ts +27 -0
  183. package/dist/mirror/target/oci-items.d.ts.map +1 -0
  184. package/dist/mirror/target/oci-items.js +79 -0
  185. package/dist/mirror/target/oci-items.js.map +1 -0
  186. package/dist/mirror/target/oci-sync.d.ts +20 -0
  187. package/dist/mirror/target/oci-sync.d.ts.map +1 -0
  188. package/dist/mirror/target/oci-sync.js +93 -0
  189. package/dist/mirror/target/oci-sync.js.map +1 -0
  190. package/dist/mirror/target/receipt-store.d.ts +13 -0
  191. package/dist/mirror/target/receipt-store.d.ts.map +1 -0
  192. package/dist/mirror/target/receipt-store.js +61 -0
  193. package/dist/mirror/target/receipt-store.js.map +1 -0
  194. package/dist/mirror/target/receipt.d.ts +13 -0
  195. package/dist/mirror/target/receipt.d.ts.map +1 -0
  196. package/dist/mirror/target/receipt.js +25 -0
  197. package/dist/mirror/target/receipt.js.map +1 -0
  198. package/dist/mirror/target/seed-push.d.ts +15 -0
  199. package/dist/mirror/target/seed-push.d.ts.map +1 -0
  200. package/dist/mirror/target/seed-push.js +20 -0
  201. package/dist/mirror/target/seed-push.js.map +1 -0
  202. package/dist/mirror/target/target-access.d.ts +7 -0
  203. package/dist/mirror/target/target-access.d.ts.map +1 -0
  204. package/dist/mirror/target/target-access.js +17 -0
  205. package/dist/mirror/target/target-access.js.map +1 -0
  206. package/dist/mirror/target/target-commands.d.ts +21 -0
  207. package/dist/mirror/target/target-commands.d.ts.map +1 -0
  208. package/dist/mirror/target/target-commands.js +134 -0
  209. package/dist/mirror/target/target-commands.js.map +1 -0
  210. package/dist/mirror/target/target-context.d.ts +11 -0
  211. package/dist/mirror/target/target-context.d.ts.map +1 -0
  212. package/dist/mirror/target/target-context.js +31 -0
  213. package/dist/mirror/target/target-context.js.map +1 -0
  214. package/dist/mirror/target/target-ports.d.ts +18 -0
  215. package/dist/mirror/target/target-ports.d.ts.map +1 -0
  216. package/dist/mirror/target/target-ports.js +49 -0
  217. package/dist/mirror/target/target-ports.js.map +1 -0
  218. package/dist/mirror/target/target-state.d.ts +22 -0
  219. package/dist/mirror/target/target-state.d.ts.map +1 -0
  220. package/dist/mirror/target/target-state.js +41 -0
  221. package/dist/mirror/target/target-state.js.map +1 -0
  222. package/dist/runtime/biome-dev.d.ts +0 -16
  223. package/dist/runtime/biome-dev.d.ts.map +1 -1
  224. package/dist/runtime/biome-dev.js +0 -53
  225. package/dist/runtime/biome-dev.js.map +1 -1
  226. package/dist/runtime/biome-host/biome-directory-packer.d.ts +3 -0
  227. package/dist/runtime/biome-host/biome-directory-packer.d.ts.map +1 -0
  228. package/dist/runtime/biome-host/biome-directory-packer.js +12 -0
  229. package/dist/runtime/biome-host/biome-directory-packer.js.map +1 -0
  230. package/dist/runtime/biome-host/bundle-packer.d.ts +8 -0
  231. package/dist/runtime/biome-host/bundle-packer.d.ts.map +1 -0
  232. package/dist/runtime/biome-host/bundle-packer.js +3 -0
  233. package/dist/runtime/biome-host/bundle-packer.js.map +1 -0
  234. package/dist/runtime/biome-host/from-spec.d.ts +33 -0
  235. package/dist/runtime/biome-host/from-spec.d.ts.map +1 -0
  236. package/dist/runtime/biome-host/from-spec.js +70 -0
  237. package/dist/runtime/biome-host/from-spec.js.map +1 -0
  238. package/dist/runtime/biome-host/lifecycle-client.d.ts +20 -0
  239. package/dist/runtime/biome-host/lifecycle-client.d.ts.map +1 -0
  240. package/dist/runtime/biome-host/lifecycle-client.js +197 -0
  241. package/dist/runtime/biome-host/lifecycle-client.js.map +1 -0
  242. package/dist/runtime/biome-host/lifecycle-contract.d.ts +95 -0
  243. package/dist/runtime/biome-host/lifecycle-contract.d.ts.map +1 -0
  244. package/dist/runtime/biome-host/lifecycle-contract.js +61 -0
  245. package/dist/runtime/biome-host/lifecycle-contract.js.map +1 -0
  246. package/dist/runtime/biome-host/lifecycle-flow.d.ts +29 -0
  247. package/dist/runtime/biome-host/lifecycle-flow.d.ts.map +1 -0
  248. package/dist/runtime/biome-host/lifecycle-flow.js +106 -0
  249. package/dist/runtime/biome-host/lifecycle-flow.js.map +1 -0
  250. package/dist/runtime/biome-host/plan-sources.d.ts +4 -0
  251. package/dist/runtime/biome-host/plan-sources.d.ts.map +1 -0
  252. package/dist/runtime/biome-host/plan-sources.js +26 -0
  253. package/dist/runtime/biome-host/plan-sources.js.map +1 -0
  254. package/dist/runtime/biome-host/relay/bundle-fetch.d.ts +12 -0
  255. package/dist/runtime/biome-host/relay/bundle-fetch.d.ts.map +1 -0
  256. package/dist/runtime/biome-host/relay/bundle-fetch.js +76 -0
  257. package/dist/runtime/biome-host/relay/bundle-fetch.js.map +1 -0
  258. package/dist/runtime/biome-host/relay/declared-scheme.d.ts +3 -0
  259. package/dist/runtime/biome-host/relay/declared-scheme.d.ts.map +1 -0
  260. package/dist/runtime/biome-host/relay/declared-scheme.js +14 -0
  261. package/dist/runtime/biome-host/relay/declared-scheme.js.map +1 -0
  262. package/dist/runtime/biome-host/relay/npm-token.d.ts +4 -0
  263. package/dist/runtime/biome-host/relay/npm-token.d.ts.map +1 -0
  264. package/dist/runtime/biome-host/relay/npm-token.js +16 -0
  265. package/dist/runtime/biome-host/relay/npm-token.js.map +1 -0
  266. package/dist/runtime/biome-host/relay/relay-flow.d.ts +16 -0
  267. package/dist/runtime/biome-host/relay/relay-flow.d.ts.map +1 -0
  268. package/dist/runtime/biome-host/relay/relay-flow.js +48 -0
  269. package/dist/runtime/biome-host/relay/relay-flow.js.map +1 -0
  270. package/dist/runtime/biome-host/source-staging.d.ts +17 -0
  271. package/dist/runtime/biome-host/source-staging.d.ts.map +1 -0
  272. package/dist/runtime/biome-host/source-staging.js +80 -0
  273. package/dist/runtime/biome-host/source-staging.js.map +1 -0
  274. package/dist/runtime/biome-host/sse.d.ts +2 -0
  275. package/dist/runtime/biome-host/sse.d.ts.map +1 -0
  276. package/dist/runtime/biome-host/sse.js +33 -0
  277. package/dist/runtime/biome-host/sse.js.map +1 -0
  278. package/dist/runtime/biome-local-install.js +1 -1
  279. package/dist/runtime/biome-local-install.js.map +1 -1
  280. package/dist/runtime/browser-origins.d.ts +9 -0
  281. package/dist/runtime/browser-origins.d.ts.map +1 -1
  282. package/dist/runtime/browser-origins.js +10 -0
  283. package/dist/runtime/browser-origins.js.map +1 -1
  284. package/dist/runtime/config/config-document.d.ts +10 -0
  285. package/dist/runtime/config/config-document.d.ts.map +1 -0
  286. package/dist/runtime/config/config-document.js +56 -0
  287. package/dist/runtime/config/config-document.js.map +1 -0
  288. package/dist/runtime/config/config-migrations.d.ts +21 -0
  289. package/dist/runtime/config/config-migrations.d.ts.map +1 -0
  290. package/dist/runtime/config/config-migrations.js +102 -0
  291. package/dist/runtime/config/config-migrations.js.map +1 -0
  292. package/dist/runtime/config/config-paths.d.ts +3 -0
  293. package/dist/runtime/config/config-paths.d.ts.map +1 -0
  294. package/dist/runtime/config/config-paths.js +9 -0
  295. package/dist/runtime/config/config-paths.js.map +1 -0
  296. package/dist/runtime/config/dev-mode.d.ts +0 -1
  297. package/dist/runtime/config/dev-mode.d.ts.map +1 -1
  298. package/dist/runtime/config/dev-mode.js +11 -27
  299. package/dist/runtime/config/dev-mode.js.map +1 -1
  300. package/dist/runtime/config/init-presets.js +5 -9
  301. package/dist/runtime/config/init-presets.js.map +1 -1
  302. package/dist/runtime/config/launch-config-help.d.ts +4 -0
  303. package/dist/runtime/config/launch-config-help.d.ts.map +1 -0
  304. package/dist/runtime/config/launch-config-help.js +42 -0
  305. package/dist/runtime/config/launch-config-help.js.map +1 -0
  306. package/dist/runtime/config/launch-config.d.ts +60 -0
  307. package/dist/runtime/config/launch-config.d.ts.map +1 -0
  308. package/dist/runtime/config/launch-config.js +123 -0
  309. package/dist/runtime/config/launch-config.js.map +1 -0
  310. package/dist/runtime/config/launch-schema.d.ts +18 -0
  311. package/dist/runtime/config/launch-schema.d.ts.map +1 -0
  312. package/dist/runtime/config/launch-schema.js +31 -0
  313. package/dist/runtime/config/launch-schema.js.map +1 -0
  314. package/dist/runtime/config/loader.d.ts.map +1 -1
  315. package/dist/runtime/config/loader.js +4 -14
  316. package/dist/runtime/config/loader.js.map +1 -1
  317. package/dist/runtime/config/schema.d.ts +43 -38
  318. package/dist/runtime/config/schema.d.ts.map +1 -1
  319. package/dist/runtime/config/schema.js +17 -46
  320. package/dist/runtime/config/schema.js.map +1 -1
  321. package/dist/runtime/config/sources-config.d.ts +0 -2
  322. package/dist/runtime/config/sources-config.d.ts.map +1 -1
  323. package/dist/runtime/config/sources-config.js +10 -29
  324. package/dist/runtime/config/sources-config.js.map +1 -1
  325. package/dist/runtime/config/versioned-document.d.ts +26 -0
  326. package/dist/runtime/config/versioned-document.d.ts.map +1 -0
  327. package/dist/runtime/config/versioned-document.js +87 -0
  328. package/dist/runtime/config/versioned-document.js.map +1 -0
  329. package/dist/runtime/directory-changes.d.ts +12 -0
  330. package/dist/runtime/directory-changes.d.ts.map +1 -0
  331. package/dist/runtime/directory-changes.js +62 -0
  332. package/dist/runtime/directory-changes.js.map +1 -0
  333. package/dist/runtime/foreground.d.ts +2 -0
  334. package/dist/runtime/foreground.d.ts.map +1 -1
  335. package/dist/runtime/foreground.js +5 -20
  336. package/dist/runtime/foreground.js.map +1 -1
  337. package/dist/runtime/infra/infra-runner.js +5 -5
  338. package/dist/runtime/infra/infra-runner.js.map +1 -1
  339. package/dist/runtime/infra/keycloak-realm.d.ts +3 -19
  340. package/dist/runtime/infra/keycloak-realm.d.ts.map +1 -1
  341. package/dist/runtime/infra/keycloak-realm.js +12 -133
  342. package/dist/runtime/infra/keycloak-realm.js.map +1 -1
  343. package/dist/runtime/installation/current-launcher-renderer.js.map +1 -1
  344. package/dist/runtime/installation/from-current-config.d.ts.map +1 -1
  345. package/dist/runtime/installation/from-current-config.js +24 -47
  346. package/dist/runtime/installation/from-current-config.js.map +1 -1
  347. package/dist/runtime/installation/index.d.ts +1 -0
  348. package/dist/runtime/installation/index.d.ts.map +1 -1
  349. package/dist/runtime/installation/index.js +1 -0
  350. package/dist/runtime/installation/index.js.map +1 -1
  351. package/dist/runtime/installation/installation-file.d.ts +3 -0
  352. package/dist/runtime/installation/installation-file.d.ts.map +1 -0
  353. package/dist/runtime/installation/installation-file.js +9 -0
  354. package/dist/runtime/installation/installation-file.js.map +1 -0
  355. package/dist/runtime/installation/readiness.d.ts +6 -7
  356. package/dist/runtime/installation/readiness.d.ts.map +1 -1
  357. package/dist/runtime/installation/readiness.js +82 -132
  358. package/dist/runtime/installation/readiness.js.map +1 -1
  359. package/dist/runtime/installation/state-store.d.ts +4 -0
  360. package/dist/runtime/installation/state-store.d.ts.map +1 -1
  361. package/dist/runtime/installation/state-store.js +22 -1
  362. package/dist/runtime/installation/state-store.js.map +1 -1
  363. package/dist/runtime/installation/to-current-config.d.ts +4 -1
  364. package/dist/runtime/installation/to-current-config.d.ts.map +1 -1
  365. package/dist/runtime/installation/to-current-config.js +10 -36
  366. package/dist/runtime/installation/to-current-config.js.map +1 -1
  367. package/dist/runtime/launch-plan-format.d.ts.map +1 -1
  368. package/dist/runtime/launch-plan-format.js +31 -6
  369. package/dist/runtime/launch-plan-format.js.map +1 -1
  370. package/dist/runtime/launch-result.d.ts +15 -0
  371. package/dist/runtime/launch-result.d.ts.map +1 -0
  372. package/dist/runtime/launch-result.js +3 -0
  373. package/dist/runtime/launch-result.js.map +1 -0
  374. package/dist/runtime/launch.d.ts +16 -5
  375. package/dist/runtime/launch.d.ts.map +1 -1
  376. package/dist/runtime/launch.js +151 -315
  377. package/dist/runtime/launch.js.map +1 -1
  378. package/dist/runtime/license/helm-pull-secret.d.ts +1 -1
  379. package/dist/runtime/license/helm-pull-secret.d.ts.map +1 -1
  380. package/dist/runtime/license/helm-pull-secret.js +2 -2
  381. package/dist/runtime/license/helm-pull-secret.js.map +1 -1
  382. package/dist/runtime/lifecycle-progress/index.d.ts +9 -0
  383. package/dist/runtime/lifecycle-progress/index.d.ts.map +1 -0
  384. package/dist/runtime/lifecycle-progress/index.js +30 -0
  385. package/dist/runtime/lifecycle-progress/index.js.map +1 -0
  386. package/dist/runtime/lifecycle-progress/json-renderer.d.ts +3 -0
  387. package/dist/runtime/lifecycle-progress/json-renderer.d.ts.map +1 -0
  388. package/dist/runtime/lifecycle-progress/json-renderer.js +27 -0
  389. package/dist/runtime/lifecycle-progress/json-renderer.js.map +1 -0
  390. package/dist/runtime/lifecycle-progress/text-renderer.d.ts +5 -0
  391. package/dist/runtime/lifecycle-progress/text-renderer.d.ts.map +1 -0
  392. package/dist/runtime/lifecycle-progress/text-renderer.js +83 -0
  393. package/dist/runtime/lifecycle-progress/text-renderer.js.map +1 -0
  394. package/dist/runtime/lifecycle-progress/types.d.ts +79 -0
  395. package/dist/runtime/lifecycle-progress/types.d.ts.map +1 -0
  396. package/dist/runtime/lifecycle-progress/types.js +32 -0
  397. package/dist/runtime/lifecycle-progress/types.js.map +1 -0
  398. package/dist/runtime/lock-loader.d.ts +13 -3
  399. package/dist/runtime/lock-loader.d.ts.map +1 -1
  400. package/dist/runtime/lock-loader.js +28 -8
  401. package/dist/runtime/lock-loader.js.map +1 -1
  402. package/dist/runtime/paths.d.ts +2 -0
  403. package/dist/runtime/paths.d.ts.map +1 -1
  404. package/dist/runtime/paths.js +17 -4
  405. package/dist/runtime/paths.js.map +1 -1
  406. package/dist/runtime/roster.d.ts +6 -5
  407. package/dist/runtime/roster.d.ts.map +1 -1
  408. package/dist/runtime/roster.js +0 -21
  409. package/dist/runtime/roster.js.map +1 -1
  410. package/dist/runtime/runner/container-preflight.d.ts +3 -2
  411. package/dist/runtime/runner/container-preflight.d.ts.map +1 -1
  412. package/dist/runtime/runner/container-preflight.js +5 -5
  413. package/dist/runtime/runner/container-preflight.js.map +1 -1
  414. package/dist/runtime/runner/container-runner.d.ts +0 -22
  415. package/dist/runtime/runner/container-runner.d.ts.map +1 -1
  416. package/dist/runtime/runner/container-runner.js +0 -112
  417. package/dist/runtime/runner/container-runner.js.map +1 -1
  418. package/dist/runtime/runner/docker-cli.d.ts +1 -0
  419. package/dist/runtime/runner/docker-cli.d.ts.map +1 -1
  420. package/dist/runtime/runner/docker-cli.js +19 -0
  421. package/dist/runtime/runner/docker-cli.js.map +1 -1
  422. package/dist/runtime/runner/helm-cli.d.ts +1 -0
  423. package/dist/runtime/runner/helm-cli.d.ts.map +1 -1
  424. package/dist/runtime/runner/helm-cli.js +5 -1
  425. package/dist/runtime/runner/helm-cli.js.map +1 -1
  426. package/dist/runtime/runner/helm-pre-install.d.ts +3 -2
  427. package/dist/runtime/runner/helm-pre-install.d.ts.map +1 -1
  428. package/dist/runtime/runner/helm-pre-install.js +3 -3
  429. package/dist/runtime/runner/helm-pre-install.js.map +1 -1
  430. package/dist/runtime/runner/helm-runner.d.ts +29 -4
  431. package/dist/runtime/runner/helm-runner.d.ts.map +1 -1
  432. package/dist/runtime/runner/helm-runner.js +44 -14
  433. package/dist/runtime/runner/helm-runner.js.map +1 -1
  434. package/dist/runtime/runner/kube-cli.d.ts +1 -0
  435. package/dist/runtime/runner/kube-cli.d.ts.map +1 -1
  436. package/dist/runtime/runner/kube-cli.js +24 -2
  437. package/dist/runtime/runner/kube-cli.js.map +1 -1
  438. package/dist/runtime/secrets/managed-local-key-provider.d.ts +2 -0
  439. package/dist/runtime/secrets/managed-local-key-provider.d.ts.map +1 -1
  440. package/dist/runtime/secrets/managed-local-key-provider.js +17 -8
  441. package/dist/runtime/secrets/managed-local-key-provider.js.map +1 -1
  442. package/dist/runtime/seed/closure-container.d.ts +8 -0
  443. package/dist/runtime/seed/closure-container.d.ts.map +1 -0
  444. package/dist/runtime/seed/closure-container.js +23 -0
  445. package/dist/runtime/seed/closure-container.js.map +1 -0
  446. package/dist/runtime/seed/closure-helm.d.ts +9 -0
  447. package/dist/runtime/seed/closure-helm.d.ts.map +1 -0
  448. package/dist/runtime/seed/closure-helm.js +16 -0
  449. package/dist/runtime/seed/closure-helm.js.map +1 -0
  450. package/dist/runtime/seed/closure-names.d.ts +4 -0
  451. package/dist/runtime/seed/closure-names.d.ts.map +1 -0
  452. package/dist/runtime/seed/closure-names.js +29 -0
  453. package/dist/runtime/seed/closure-names.js.map +1 -0
  454. package/dist/runtime/seed/closure-native.d.ts +3 -0
  455. package/dist/runtime/seed/closure-native.d.ts.map +1 -0
  456. package/dist/runtime/seed/closure-native.js +18 -0
  457. package/dist/runtime/seed/closure-native.js.map +1 -0
  458. package/dist/runtime/seed/installation-tar.d.ts +5 -0
  459. package/dist/runtime/seed/installation-tar.d.ts.map +1 -0
  460. package/dist/runtime/seed/installation-tar.js +30 -0
  461. package/dist/runtime/seed/installation-tar.js.map +1 -0
  462. package/dist/runtime/seed/launch-env.d.ts +42 -0
  463. package/dist/runtime/seed/launch-env.d.ts.map +1 -0
  464. package/dist/runtime/seed/launch-env.js +150 -0
  465. package/dist/runtime/seed/launch-env.js.map +1 -0
  466. package/dist/runtime/seed/seed-container.d.ts +13 -0
  467. package/dist/runtime/seed/seed-container.d.ts.map +1 -0
  468. package/dist/runtime/seed/seed-container.js +175 -0
  469. package/dist/runtime/seed/seed-container.js.map +1 -0
  470. package/dist/runtime/seed/seed-delivery-env.d.ts +39 -0
  471. package/dist/runtime/seed/seed-delivery-env.d.ts.map +1 -0
  472. package/dist/runtime/seed/seed-delivery-env.js +47 -0
  473. package/dist/runtime/seed/seed-delivery-env.js.map +1 -0
  474. package/dist/runtime/seed/seed-down.d.ts +2 -0
  475. package/dist/runtime/seed/seed-down.d.ts.map +1 -0
  476. package/dist/runtime/seed/seed-down.js +52 -0
  477. package/dist/runtime/seed/seed-down.js.map +1 -0
  478. package/dist/runtime/seed/seed-env-file.d.ts +3 -0
  479. package/dist/runtime/seed/seed-env-file.d.ts.map +1 -0
  480. package/dist/runtime/seed/seed-env-file.js +24 -0
  481. package/dist/runtime/seed/seed-env-file.js.map +1 -0
  482. package/dist/runtime/seed/seed-env-secret.d.ts +18 -0
  483. package/dist/runtime/seed/seed-env-secret.d.ts.map +1 -0
  484. package/dist/runtime/seed/seed-env-secret.js +62 -0
  485. package/dist/runtime/seed/seed-env-secret.js.map +1 -0
  486. package/dist/runtime/seed/seed-environment.d.ts +12 -0
  487. package/dist/runtime/seed/seed-environment.d.ts.map +1 -0
  488. package/dist/runtime/seed/seed-environment.js +66 -0
  489. package/dist/runtime/seed/seed-environment.js.map +1 -0
  490. package/dist/runtime/seed/seed-facts.d.ts +22 -0
  491. package/dist/runtime/seed/seed-facts.d.ts.map +1 -0
  492. package/dist/runtime/seed/seed-facts.js +40 -0
  493. package/dist/runtime/seed/seed-facts.js.map +1 -0
  494. package/dist/runtime/seed/seed-helm.d.ts +10 -0
  495. package/dist/runtime/seed/seed-helm.d.ts.map +1 -0
  496. package/dist/runtime/seed/seed-helm.js +74 -0
  497. package/dist/runtime/seed/seed-helm.js.map +1 -0
  498. package/dist/runtime/seed/seed-image-user.d.ts +6 -0
  499. package/dist/runtime/seed/seed-image-user.d.ts.map +1 -0
  500. package/dist/runtime/seed/seed-image-user.js +14 -0
  501. package/dist/runtime/seed/seed-image-user.js.map +1 -0
  502. package/dist/runtime/seed/seed-installation-files.d.ts +23 -0
  503. package/dist/runtime/seed/seed-installation-files.d.ts.map +1 -0
  504. package/dist/runtime/seed/seed-installation-files.js +51 -0
  505. package/dist/runtime/seed/seed-installation-files.js.map +1 -0
  506. package/dist/runtime/seed/seed-installation.d.ts +20 -0
  507. package/dist/runtime/seed/seed-installation.d.ts.map +1 -0
  508. package/dist/runtime/seed/seed-installation.js +36 -0
  509. package/dist/runtime/seed/seed-installation.js.map +1 -0
  510. package/dist/runtime/seed/seed-launcher.d.ts +14 -0
  511. package/dist/runtime/seed/seed-launcher.d.ts.map +1 -0
  512. package/dist/runtime/seed/seed-launcher.js +155 -0
  513. package/dist/runtime/seed/seed-launcher.js.map +1 -0
  514. package/dist/runtime/seed/seed-options.d.ts +22 -0
  515. package/dist/runtime/seed/seed-options.d.ts.map +1 -0
  516. package/dist/runtime/seed/seed-options.js +57 -0
  517. package/dist/runtime/seed/seed-options.js.map +1 -0
  518. package/dist/runtime/seed/seed-platform-endpoints.d.ts +8 -0
  519. package/dist/runtime/seed/seed-platform-endpoints.d.ts.map +1 -0
  520. package/dist/runtime/seed/seed-platform-endpoints.js +55 -0
  521. package/dist/runtime/seed/seed-platform-endpoints.js.map +1 -0
  522. package/dist/runtime/seed/seed-process.d.ts +22 -0
  523. package/dist/runtime/seed/seed-process.d.ts.map +1 -0
  524. package/dist/runtime/seed/seed-process.js +79 -0
  525. package/dist/runtime/seed/seed-process.js.map +1 -0
  526. package/dist/runtime/seed/seed-record.d.ts +101 -0
  527. package/dist/runtime/seed/seed-record.d.ts.map +1 -0
  528. package/dist/runtime/seed/seed-record.js +141 -0
  529. package/dist/runtime/seed/seed-record.js.map +1 -0
  530. package/dist/runtime/seed/seed-resolved-deployment.d.ts +14 -0
  531. package/dist/runtime/seed/seed-resolved-deployment.d.ts.map +1 -0
  532. package/dist/runtime/seed/seed-resolved-deployment.js +52 -0
  533. package/dist/runtime/seed/seed-resolved-deployment.js.map +1 -0
  534. package/dist/runtime/seed/substrate-facts.d.ts +52 -0
  535. package/dist/runtime/seed/substrate-facts.d.ts.map +1 -0
  536. package/dist/runtime/seed/substrate-facts.js +92 -0
  537. package/dist/runtime/seed/substrate-facts.js.map +1 -0
  538. package/dist/runtime/seed/supervisor-contract.d.ts +9 -0
  539. package/dist/runtime/seed/supervisor-contract.d.ts.map +1 -0
  540. package/dist/runtime/seed/supervisor-contract.js +68 -0
  541. package/dist/runtime/seed/supervisor-contract.js.map +1 -0
  542. package/dist/runtime/seed/workload-identity-facts.d.ts +17 -0
  543. package/dist/runtime/seed/workload-identity-facts.d.ts.map +1 -0
  544. package/dist/runtime/seed/workload-identity-facts.js +53 -0
  545. package/dist/runtime/seed/workload-identity-facts.js.map +1 -0
  546. package/dist/runtime/sources/schema.d.ts +2 -0
  547. package/dist/runtime/sources/schema.d.ts.map +1 -1
  548. package/dist/runtime/sources/schema.js +10 -9
  549. package/dist/runtime/sources/schema.js.map +1 -1
  550. package/dist/runtime/store-client.d.ts +0 -10
  551. package/dist/runtime/store-client.d.ts.map +1 -1
  552. package/dist/runtime/store-client.js +0 -5
  553. package/dist/runtime/store-client.js.map +1 -1
  554. package/dist/runtime/tenancy/identity-installer.d.ts +11 -0
  555. package/dist/runtime/tenancy/identity-installer.d.ts.map +1 -0
  556. package/dist/runtime/tenancy/identity-installer.js +39 -0
  557. package/dist/runtime/tenancy/identity-installer.js.map +1 -0
  558. package/dist/runtime/tenancy/import-cache.d.ts +5 -0
  559. package/dist/runtime/tenancy/import-cache.d.ts.map +1 -0
  560. package/dist/runtime/tenancy/import-cache.js +27 -0
  561. package/dist/runtime/tenancy/import-cache.js.map +1 -0
  562. package/dist/runtime/tenancy/openfga.d.ts +4 -0
  563. package/dist/runtime/tenancy/openfga.d.ts.map +1 -0
  564. package/dist/runtime/tenancy/openfga.js +29 -0
  565. package/dist/runtime/tenancy/openfga.js.map +1 -0
  566. package/dist/runtime/tenancy/servers.d.ts +18 -0
  567. package/dist/runtime/tenancy/servers.d.ts.map +1 -0
  568. package/dist/runtime/tenancy/servers.js +102 -0
  569. package/dist/runtime/tenancy/servers.js.map +1 -0
  570. package/dist/runtime/tenancy/session.d.ts +19 -0
  571. package/dist/runtime/tenancy/session.d.ts.map +1 -0
  572. package/dist/runtime/tenancy/session.js +79 -0
  573. package/dist/runtime/tenancy/session.js.map +1 -0
  574. package/dist/runtime/tenancy/specs.d.ts +27 -0
  575. package/dist/runtime/tenancy/specs.d.ts.map +1 -0
  576. package/dist/runtime/tenancy/specs.js +129 -0
  577. package/dist/runtime/tenancy/specs.js.map +1 -0
  578. package/examples/01-local-native.yaml +1 -3
  579. package/examples/02-local-container-full.yaml +0 -2
  580. package/examples/03-byo-infra.yaml +1 -5
  581. package/examples/06-biome-sources.yaml +1 -3
  582. package/package.json +32 -37
  583. package/xema.config.example.yaml +1 -10
  584. package/dist/assets/keycloak/realm-xema.json +0 -397
  585. package/dist/commands/dev.d.ts.map +0 -1
  586. package/dist/commands/dev.js +0 -196
  587. package/dist/commands/dev.js.map +0 -1
  588. package/dist/commands/edition.d.ts +0 -3
  589. package/dist/commands/edition.d.ts.map +0 -1
  590. package/dist/commands/edition.js +0 -54
  591. package/dist/commands/edition.js.map +0 -1
  592. package/dist/commands/serve.d.ts +0 -3
  593. package/dist/commands/serve.d.ts.map +0 -1
  594. package/dist/commands/serve.js +0 -114
  595. package/dist/commands/serve.js.map +0 -1
  596. package/dist/dev/carved-installs.d.ts +0 -3
  597. package/dist/dev/carved-installs.d.ts.map +0 -1
  598. package/dist/dev/carved-installs.js +0 -63
  599. package/dist/dev/carved-installs.js.map +0 -1
  600. package/dist/dev/env-defaults.d.ts +0 -15
  601. package/dist/dev/env-defaults.d.ts.map +0 -1
  602. package/dist/dev/env-defaults.js +0 -178
  603. package/dist/dev/env-defaults.js.map +0 -1
  604. package/dist/dev/forked-worker-bootstrap-protocol.d.ts +0 -17
  605. package/dist/dev/forked-worker-bootstrap-protocol.d.ts.map +0 -1
  606. package/dist/dev/forked-worker-bootstrap-protocol.js +0 -35
  607. package/dist/dev/forked-worker-bootstrap-protocol.js.map +0 -1
  608. package/dist/dev/forked-worker-bootstrap.d.ts +0 -18
  609. package/dist/dev/forked-worker-bootstrap.d.ts.map +0 -1
  610. package/dist/dev/forked-worker-bootstrap.js +0 -84
  611. package/dist/dev/forked-worker-bootstrap.js.map +0 -1
  612. package/dist/dev/forked-worker.d.ts +0 -43
  613. package/dist/dev/forked-worker.d.ts.map +0 -1
  614. package/dist/dev/forked-worker.js +0 -358
  615. package/dist/dev/forked-worker.js.map +0 -1
  616. package/dist/edition/verify-image-evidence.bundle.mjs +0 -70456
  617. package/dist/edition/verify-image-evidence.bundle.provenance.json +0 -3957
  618. package/dist/runtime/backing-registration.d.ts +0 -11
  619. package/dist/runtime/backing-registration.d.ts.map +0 -1
  620. package/dist/runtime/backing-registration.js +0 -94
  621. package/dist/runtime/backing-registration.js.map +0 -1
  622. package/dist/runtime/edition/run-entry.d.ts +0 -9
  623. package/dist/runtime/edition/run-entry.d.ts.map +0 -1
  624. package/dist/runtime/edition/run-entry.js +0 -36
  625. package/dist/runtime/edition/run-entry.js.map +0 -1
  626. package/dist/runtime/edition/verb-map.d.ts +0 -70
  627. package/dist/runtime/edition/verb-map.d.ts.map +0 -1
  628. package/dist/runtime/edition/verb-map.js +0 -166
  629. package/dist/runtime/edition/verb-map.js.map +0 -1
  630. package/dist/runtime/env-seeder.d.ts +0 -26
  631. package/dist/runtime/env-seeder.d.ts.map +0 -1
  632. package/dist/runtime/env-seeder.js +0 -340
  633. package/dist/runtime/env-seeder.js.map +0 -1
  634. package/dist/runtime/port-map.d.ts +0 -3
  635. package/dist/runtime/port-map.d.ts.map +0 -1
  636. package/dist/runtime/port-map.js +0 -25
  637. package/dist/runtime/port-map.js.map +0 -1
  638. package/dist/runtime/run-manifest.d.ts +0 -52
  639. package/dist/runtime/run-manifest.d.ts.map +0 -1
  640. package/dist/runtime/run-manifest.js +0 -585
  641. package/dist/runtime/run-manifest.js.map +0 -1
  642. package/dist/runtime/runner/native-runner.d.ts +0 -13
  643. package/dist/runtime/runner/native-runner.d.ts.map +0 -1
  644. package/dist/runtime/runner/native-runner.js +0 -94
  645. package/dist/runtime/runner/native-runner.js.map +0 -1
  646. package/dist/runtime/runner/service-runner.d.ts +0 -28
  647. package/dist/runtime/runner/service-runner.d.ts.map +0 -1
  648. package/dist/runtime/runner/service-runner.js +0 -10
  649. package/dist/runtime/runner/service-runner.js.map +0 -1
  650. package/dist/runtime/secrets/generated-platform-secrets.d.ts +0 -16
  651. package/dist/runtime/secrets/generated-platform-secrets.d.ts.map +0 -1
  652. package/dist/runtime/secrets/generated-platform-secrets.js +0 -115
  653. package/dist/runtime/secrets/generated-platform-secrets.js.map +0 -1
  654. package/dist/runtime/secrets/resolver.d.ts +0 -23
  655. package/dist/runtime/secrets/resolver.d.ts.map +0 -1
  656. package/dist/runtime/secrets/resolver.js +0 -266
  657. package/dist/runtime/secrets/resolver.js.map +0 -1
  658. package/dist/runtime/supervisor.d.ts +0 -67
  659. package/dist/runtime/supervisor.d.ts.map +0 -1
  660. package/dist/runtime/supervisor.js +0 -227
  661. package/dist/runtime/supervisor.js.map +0 -1
  662. package/edition/README.md +0 -293
  663. package/edition/adapter-bundled-versions.mjs +0 -108
  664. package/edition/adapter-host-versions.mjs +0 -41
  665. package/edition/assemble-producer-input.mjs +0 -1423
  666. package/edition/assemble-third-party-input.mjs +0 -336
  667. package/edition/authored-source-check.mjs +0 -135
  668. package/edition/authorization-base.mjs +0 -357
  669. package/edition/biome-content.mjs +0 -327
  670. package/edition/build-biome-index.mjs +0 -180
  671. package/edition/build-ledger-completeness.mjs +0 -67
  672. package/edition/build-ledger.mjs +0 -107
  673. package/edition/build-platform-service-index.mjs +0 -292
  674. package/edition/build-runtime-image-source-index.mjs +0 -1187
  675. package/edition/built-verifier.mjs +0 -55
  676. package/edition/candidate-edition.mjs +0 -697
  677. package/edition/canonical-evidence-json.mjs +0 -82
  678. package/edition/canonical-repository-url.mjs +0 -47
  679. package/edition/catalogue-edition.mjs +0 -49
  680. package/edition/catalogue-evidence.mjs +0 -228
  681. package/edition/catalogue-fetch.mjs +0 -124
  682. package/edition/catalogue-lock-field.mjs +0 -41
  683. package/edition/catalogue-pin.mjs +0 -71
  684. package/edition/catalogue.mjs +0 -223
  685. package/edition/chart-set-source-commit.mjs +0 -97
  686. package/edition/check-committed-image-evidence.mjs +0 -412
  687. package/edition/checkout-indexed-source-repositories.mjs +0 -283
  688. package/edition/collected-refusals.mjs +0 -59
  689. package/edition/comment-blanker.mjs +0 -75
  690. package/edition/connector-source-authority.mjs +0 -60
  691. package/edition/contract-authority.mjs +0 -122
  692. package/edition/cosign-certificate-constraints.mjs +0 -50
  693. package/edition/cross-repo-build-inputs.mjs +0 -158
  694. package/edition/customer-definition.mjs +0 -174
  695. package/edition/customer-edition-verbs.mjs +0 -617
  696. package/edition/customer-flags.mjs +0 -15
  697. package/edition/develop-catalogue-free-resolve.mjs +0 -280
  698. package/edition/develop-chart-roster.mjs +0 -96
  699. package/edition/develop-chart-set.mjs +0 -147
  700. package/edition/develop-coverage-readers.mjs +0 -217
  701. package/edition/develop-coverage-run.mjs +0 -50
  702. package/edition/develop-coverage-verdict.mjs +0 -153
  703. package/edition/develop-coverage.mjs +0 -131
  704. package/edition/develop-current-resolution.mjs +0 -29
  705. package/edition/develop-edition-invariants.mjs +0 -142
  706. package/edition/develop-edition-resolve.mjs +0 -211
  707. package/edition/develop-edition.mjs +0 -379
  708. package/edition/develop-engine-image.mjs +0 -95
  709. package/edition/develop-follow.mjs +0 -491
  710. package/edition/develop-freeze.mjs +0 -289
  711. package/edition/develop-git-bundles.mjs +0 -255
  712. package/edition/develop-graph.mjs +0 -28
  713. package/edition/develop-image-coordinate.mjs +0 -54
  714. package/edition/develop-image-probe.mjs +0 -120
  715. package/edition/develop-image-record.mjs +0 -194
  716. package/edition/develop-record-ancestry.mjs +0 -144
  717. package/edition/develop-record-verify.mjs +0 -216
  718. package/edition/develop-resolve-report.mjs +0 -159
  719. package/edition/develop-select-records.mjs +0 -172
  720. package/edition/develop-selection-line.mjs +0 -30
  721. package/edition/develop-selection-pins.mjs +0 -36
  722. package/edition/develop-snapshot-inputs.mjs +0 -93
  723. package/edition/develop-verify-image-record.mjs +0 -109
  724. package/edition/dispatched-runtime-components.mjs +0 -172
  725. package/edition/dist-check.mjs +0 -1137
  726. package/edition/distribution-evidence-set.mjs +0 -1064
  727. package/edition/distribution-paths.mjs +0 -191
  728. package/edition/edition-artifact.mjs +0 -529
  729. package/edition/edition-biome-manifests.mjs +0 -85
  730. package/edition/edition-ceiling.mjs +0 -180
  731. package/edition/edition-channel.mjs +0 -20
  732. package/edition/edition-chart-set.mjs +0 -104
  733. package/edition/edition-config.mjs +0 -374
  734. package/edition/edition-constants.mjs +0 -110
  735. package/edition/edition-contract-parse.mjs +0 -179
  736. package/edition/edition-contract.json +0 -100
  737. package/edition/edition-image-seal.mjs +0 -110
  738. package/edition/edition-kind.mjs +0 -10
  739. package/edition/edition-list.mjs +0 -35
  740. package/edition/edition-locks.mjs +0 -79
  741. package/edition/edition-pin-verbs.mjs +0 -183
  742. package/edition/edition-pin.mjs +0 -17
  743. package/edition/edition-pinned-inputs.mjs +0 -116
  744. package/edition/edition-protocol.mjs +0 -277
  745. package/edition/edition-publisher.mjs +0 -21
  746. package/edition/edition-seal.mjs +0 -257
  747. package/edition/edition-source-pins.mjs +0 -211
  748. package/edition/edition-unpin.mjs +0 -16
  749. package/edition/edition-workspace.mjs +0 -204
  750. package/edition/evidence-checkout.mjs +0 -439
  751. package/edition/evidence-grammars.mjs +0 -18
  752. package/edition/evidence-input-mode.mjs +0 -136
  753. package/edition/evidence-trust-pin.mjs +0 -380
  754. package/edition/evidence-trust-policy.mjs +0 -374
  755. package/edition/external-source-walk.mjs +0 -485
  756. package/edition/first-party-source-ids.mjs +0 -62
  757. package/edition/fleet-coordinate-finality.mjs +0 -363
  758. package/edition/fulcio-certificate-extensions.mjs +0 -231
  759. package/edition/git-json.mjs +0 -54
  760. package/edition/git-source-auth.mjs +0 -131
  761. package/edition/image-delivery-entitlement-descriptor.mjs +0 -106
  762. package/edition/image-evidence-replay-state.mjs +0 -242
  763. package/edition/image-evidence.mjs +0 -1404
  764. package/edition/image-lock-service-rows.mjs +0 -26
  765. package/edition/image-subject-identity.mjs +0 -24
  766. package/edition/images-from-record.mjs +0 -298
  767. package/edition/indexes-at-pins.mjs +0 -13
  768. package/edition/kernel-capability-domain.mjs +0 -30
  769. package/edition/kernel-contract-authority.mjs +0 -517
  770. package/edition/kernel-contract-source-path-set.mjs +0 -94
  771. package/edition/kernel-package.mjs +0 -206
  772. package/edition/kernel-protocol-choice.mjs +0 -239
  773. package/edition/kernel-signer-kind.mjs +0 -23
  774. package/edition/lib.mjs +0 -3303
  775. package/edition/locked-bundle-signer.mjs +0 -297
  776. package/edition/map-with-concurrency.mjs +0 -19
  777. package/edition/no-follow-file.mjs +0 -94
  778. package/edition/oci-evidence-verbs.mjs +0 -419
  779. package/edition/oci-image-source-evidence.mjs +0 -364
  780. package/edition/operation-grant-admission.mjs +0 -285
  781. package/edition/operation-requirements.mjs +0 -282
  782. package/edition/oras-process.mjs +0 -35
  783. package/edition/oras.mjs +0 -742
  784. package/edition/pin-source.mjs +0 -242
  785. package/edition/pinned-cosign.mjs +0 -70
  786. package/edition/plan-image-evidence-refresh.mjs +0 -427
  787. package/edition/platform-lock-readability.mjs +0 -901
  788. package/edition/platform-service-class.mjs +0 -85
  789. package/edition/platform-service-ownership.mjs +0 -88
  790. package/edition/platform-service-source-authority.mjs +0 -105
  791. package/edition/positive-closure.mjs +0 -162
  792. package/edition/previous-seal-registry.mjs +0 -149
  793. package/edition/produce-distribution-completeness-evidence.mjs +0 -318
  794. package/edition/produce-edition-catalogue-evidence.mjs +0 -252
  795. package/edition/produce-image-delivery-entitlement-evidence.mjs +0 -304
  796. package/edition/produce-image-source-evidence.mjs +0 -788
  797. package/edition/producer-evidence-bundle.mjs +0 -201
  798. package/edition/producer-evidence-index-file.mjs +0 -4
  799. package/edition/record-refused.mjs +0 -12
  800. package/edition/registry-credentials.mjs +0 -225
  801. package/edition/release-catalogue.mjs +0 -47
  802. package/edition/release-channel-guard.mjs +0 -108
  803. package/edition/release-edition-artifact.mjs +0 -152
  804. package/edition/release-edition.mjs +0 -54
  805. package/edition/remedy-command.mjs +0 -89
  806. package/edition/repin-evidence-trust.mjs +0 -109
  807. package/edition/required-resource-provider.mjs +0 -58
  808. package/edition/resolve-chart-set.mjs +0 -376
  809. package/edition/resolve-customer-edition.mjs +0 -374
  810. package/edition/resolve-distribution.mjs +0 -2639
  811. package/edition/resolve-edition.mjs +0 -192
  812. package/edition/resolve-images.mjs +0 -2351
  813. package/edition/seal-image-digests.mjs +0 -954
  814. package/edition/sealed-distribution-lock.mjs +0 -22
  815. package/edition/sealed-evidence-accept.mjs +0 -82
  816. package/edition/shallow-checkout.mjs +0 -18
  817. package/edition/sigstore-bundle-media-type.mjs +0 -4
  818. package/edition/source-authority.mjs +0 -713
  819. package/edition/source-closure.mjs +0 -115
  820. package/edition/store-publisher-trust.mjs +0 -40
  821. package/edition/strict-json.mjs +0 -121
  822. package/edition/string-order.mjs +0 -5
  823. package/edition/third-party-admission.mjs +0 -91
  824. package/edition/third-party-bundle-registry.mjs +0 -242
  825. package/edition/third-party-certificate-extensions.mjs +0 -21
  826. package/edition/third-party-image-pins.mjs +0 -41
  827. package/edition/third-party-pins-trusted.mjs +0 -24
  828. package/edition/third-party-producer-evidence.mjs +0 -76
  829. package/edition/third-party-source-check.mjs +0 -28
  830. package/edition/third-party-source-context.mjs +0 -41
  831. package/edition/third-party-source-evidence.mjs +0 -287
  832. package/edition/third-party-source-flags.mjs +0 -134
  833. package/edition/third-party-source-pins.mjs +0 -259
  834. package/edition/third-party-source-uniqueness.mjs +0 -54
  835. package/edition/third-party-source-walk.mjs +0 -115
  836. package/edition/third-party-source-writer.mjs +0 -213
  837. package/edition/third-party-subjects.mjs +0 -128
  838. package/edition/trust-policy-arming-verb.mjs +0 -60
  839. package/edition/trust-policy-arming.mjs +0 -144
  840. package/edition/trust-policy-image-ownership.mjs +0 -85
  841. package/edition/trusted-executable.mjs +0 -166
  842. package/edition/verifier-binding.mjs +0 -45
  843. package/edition/verifier-files.mjs +0 -8
  844. package/edition/verifier-kernel-schemas.mjs +0 -22
  845. package/edition/verifier-provenance.mjs +0 -64
  846. package/edition/verify-catalogue-evidence.mjs +0 -247
  847. package/edition/verify-image-evidence.mjs +0 -475
  848. package/edition/verify-image-platforms.mjs +0 -523
  849. package/edition/why.mjs +0 -56
  850. package/edition/workspace-sections.mjs +0 -276
@@ -1,529 +0,0 @@
1
- // edition-artifact — the files of an edition and where they may go.
2
- //
3
- // ONE layout for develop and release: an OCI artifact at
4
- // `<registry root>/<channel segment>/xema-edition-<id>` (release: `editions`, develop: `develop-editions`,
5
- // from edition-contract.json), addressed by digest, whose titled layers are
6
- // `xema-edition.json` (the descriptor) plus the lock files. It is written to a
7
- // scratch directory; the workflow pushes it with oras and signs the digest.
8
- // Tags are for humans only (an edition resolved from a snapshot: the hash of every input, snapshotEditionTag; vendor release: the
9
- // coordinate). Admission rests on the signature of the manifest digest, never on
10
- // a channel label: no reader branches on `provenance.channel`.
11
- //
12
- // The artifact is never written to git, so the writer REFUSES a target inside
13
- // either the data tree or the editions root.
14
-
15
- import { existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from 'node:fs';
16
- import { basename, dirname, join, relative, resolve, sep, isAbsolute } from 'node:path';
17
-
18
- import { assertCanonicalDistributionId } from './distribution-paths.mjs';
19
- import { EDITION_CHART_SET_FILE, assertRosteredChartSetLock } from './edition-chart-set.mjs';
20
- import {
21
- CATALOGUE_PIN_KEY,
22
- CustomerPinForm,
23
- DEFINITION_PIN_KEY,
24
- DIGEST_PIN_KEYS,
25
- EDITION_DESCRIPTOR_FILE,
26
- EDITION_DESCRIPTOR_SCHEMA,
27
- EDITION_LOCKS,
28
- EDITION_REPOSITORY_PREFIX,
29
- EDITION_REPOSITORY_SEGMENTS,
30
- EditionChannel,
31
- EditionKind,
32
- EditionLockFile,
33
- SEALED_EDITION_CHANNEL,
34
- SEAL_OF_PATTERN,
35
- VENDOR_MEMBER_PIN_PATTERN,
36
- admittedEvidenceTrustStates,
37
- customerPinFormAdmitted,
38
- } from './edition-constants.mjs';
39
- import { dataRoot, editionsRoot } from './edition-workspace.mjs';
40
- import { serializeJson, sha256Hex } from './lib.mjs';
41
- import { isSourcePinKey, sortedSnapshotPins } from './pin-source.mjs';
42
- import { readStrictJsonFile } from './strict-json.mjs';
43
-
44
- /** Which GitHub Actions run produced the artifact; recorded in its descriptor. */
45
- export function workflowFromEnv(env) {
46
- const repository = env.GITHUB_REPOSITORY;
47
- const runId = env.GITHUB_RUN_ID;
48
- if (!repository || !runId) {
49
- throw new Error(
50
- 'an edition records the workflow run that produced it: GITHUB_REPOSITORY and GITHUB_RUN_ID are required ' +
51
- '(pass --local to write outside GitHub Actions)',
52
- );
53
- }
54
- return { repository, runId };
55
- }
56
-
57
- /** The workflow stamp of a write that is explicitly not from CI. */
58
- export const LOCAL_WORKFLOW = Object.freeze({ repository: 'local', runId: 'local' });
59
-
60
- const ENGINE_IMAGE_PATTERN = /^[a-z0-9.-]+(:[0-9]+)?(\/[a-z0-9._-]+)+@sha256:[a-f0-9]{64}$/;
61
-
62
- /** The deploy engine image, by digest only: `<repository>@sha256:<64 hex>`. No tag form, no default. */
63
- export function assertEngineImage(image) {
64
- if (typeof image !== 'string' || !ENGINE_IMAGE_PATTERN.test(image)) {
65
- throw new Error(
66
- `--engine-image ${JSON.stringify(image)} is not <repository>@sha256:<64 hex>: the deploy engine is pinned by digest, never by tag`,
67
- );
68
- }
69
- return image;
70
- }
71
-
72
- /**
73
- * The descriptor (xema.edition/v2): what this artifact is (its `kind`, and for a sealed edition the
74
- * resolved edition it seals, `sealOf`), which locks it carries, where it came from, whether the data
75
- * root's editions are evidence-gated, and the deploy engine image that consumes it. Every writer of a
76
- * descriptor passes here, and the strict parse it ends in holds the contract's rule: no route writes
77
- * an edition whose evidence trust state its kind and channel do not admit, whatever its caller computed.
78
- */
79
- export function editionDescriptor({ kind, sealOf, distributionId, channel, pins, workflow, evidenceTrustPolicy, engineImage }) {
80
- assertCanonicalDistributionId(distributionId);
81
- return parseEditionDescriptor({
82
- schema: EDITION_DESCRIPTOR_SCHEMA,
83
- kind,
84
- ...(kind === EditionKind.Sealed ? { sealOf } : {}),
85
- distributionId,
86
- locks: [...EDITION_LOCKS],
87
- provenance: {
88
- channel,
89
- pins: sortedSnapshotPins(pins),
90
- workflow: { repository: workflow?.repository, runId: workflow?.runId },
91
- },
92
- evidenceTrustPolicy,
93
- engine: { image: engineImage },
94
- });
95
- }
96
-
97
- const COMMIT_PATTERN = /^[0-9a-f]{40}$/;
98
- const DIGEST_PIN_PATTERN = /^sha256:[0-9a-f]{64}$/;
99
- const DESCRIPTOR_KEYS = Object.freeze(['schema', 'kind', 'distributionId', 'locks', 'provenance', 'evidenceTrustPolicy', 'engine']);
100
-
101
- /**
102
- * The one parser of a sealed edition's `sealOf`, the digest-pinned ref of the resolved edition it seals: its form is the
103
- * contract's `sealOf.pattern` (`<registry>/<path>@sha256:<64 hex>`), and its repository is an edition repository
104
- * (`<registry root>/<channel segment>/xema-edition-<id>`). Returns `{ repository, digest, registryRoot, channel, distributionId }`.
105
- */
106
- export function parseSealOf(sealOf) {
107
- if (typeof sealOf !== 'string' || !SEAL_OF_PATTERN.test(sealOf)) {
108
- throw new Error(
109
- `sealOf ${JSON.stringify(sealOf)} does not match the contract's sealOf.pattern ${SEAL_OF_PATTERN.source}: a seal names the resolved edition ` +
110
- `<registry root>/<channel segment>/${EDITION_REPOSITORY_PREFIX}<id> by digest`,
111
- );
112
- }
113
- const at = sealOf.lastIndexOf('@');
114
- const digest = sealOf.slice(at + 1);
115
- const repository = sealOf.slice(0, at);
116
- return { repository, digest, ...parseEditionRepository(repository) };
117
- }
118
-
119
- const exactKeys = (value, keys, where) => {
120
- if (value === null || typeof value !== 'object' || Array.isArray(value) || Object.keys(value).sort().join() !== [...keys].sort().join()) {
121
- throw new Error(`${where} must be exactly {${keys.join(', ')}}`);
122
- }
123
- };
124
-
125
- /**
126
- * The closed customer pin rule (edition-contract.json provenancePins.customerForms). A descriptor whose pins carry the
127
- * definition pin is a customer edition, and it carries exactly one form: the CATALOGUE form (the catalogue pin, the
128
- * definition pin and sources/<name> commits, nothing else), or the CATALOGUE-FREE form (no catalogue pin, at least one
129
- * vendor member pin), each only on the kinds and channels the contract admits it on. A descriptor without the definition
130
- * pin is not a customer edition and the rule does not apply to it.
131
- */
132
- export function assertCustomerPinForm(kind, channel, pins, distributionId) {
133
- if (!(DEFINITION_PIN_KEY in pins)) {
134
- // only a customer edition records a vendor side: every other edition carries neither form's marker
135
- if (CATALOGUE_PIN_KEY in pins) {
136
- throw new Error(`${EDITION_DESCRIPTOR_FILE}: the ${kind} ${channel} edition "${distributionId}" carries the catalogue pin without the definition pin: only a customer edition (the definition pin) records the catalogue it was resolved against`);
137
- }
138
- return;
139
- }
140
- const where = `${EDITION_DESCRIPTOR_FILE}: the customer ${kind} ${channel} edition "${distributionId}"`;
141
- if (CATALOGUE_PIN_KEY in pins) {
142
- if (!customerPinFormAdmitted(CustomerPinForm.Catalogue, kind, channel)) {
143
- throw new Error(`${where} carries the catalogue pin, but the contract admits the catalogue form on no ${kind} ${channel} edition`);
144
- }
145
- const stray = Object.keys(pins).filter((key) => key !== CATALOGUE_PIN_KEY && key !== DEFINITION_PIN_KEY && !isSourcePinKey(key));
146
- if (stray.length > 0) {
147
- throw new Error(`${where} carries the catalogue pin and also ${stray.map((key) => JSON.stringify(key)).join(', ')}: the catalogue form pins only the catalogue, the definition and sources/<name>`);
148
- }
149
- return;
150
- }
151
- if (!customerPinFormAdmitted(CustomerPinForm.CatalogueFree, kind, channel)) {
152
- throw new Error(`${where} carries no catalogue pin: only a ${catalogueFreeAdmissions()} customer edition may be resolved catalogue-free`);
153
- }
154
- if (!Object.keys(pins).some((key) => VENDOR_MEMBER_PIN_PATTERN.test(key))) {
155
- throw new Error(`${where} carries neither the catalogue pin nor a vendor member pin: a catalogue-free edition records the vendor member pins it was resolved from`);
156
- }
157
- }
158
-
159
- const catalogueFreeAdmissions = () =>
160
- Object.values(EditionKind)
161
- .flatMap((kind) => Object.values(EditionChannel).filter((channel) => customerPinFormAdmitted(CustomerPinForm.CatalogueFree, kind, channel)).map((channel) => `${kind} ${channel}`))
162
- .join(' or ');
163
-
164
- /**
165
- * The strict parse of a descriptor: exact keys, the closed kind enum (no default, never inferred), `sealOf` exactly on a
166
- * sealed edition, closed vocabularies, the evidence trust state the contract admits for the kind on the channel, an engine
167
- * image by digest. Returns it unchanged.
168
- */
169
- export function parseEditionDescriptor(value) {
170
- if (value === null || typeof value !== 'object' || Array.isArray(value)) {
171
- throw new Error(`${EDITION_DESCRIPTOR_FILE} must be a JSON object`);
172
- }
173
- if (value.schema !== EDITION_DESCRIPTOR_SCHEMA) {
174
- throw new Error(`${EDITION_DESCRIPTOR_FILE}: schema is ${JSON.stringify(value.schema)}, expected ${JSON.stringify(EDITION_DESCRIPTOR_SCHEMA)}`);
175
- }
176
- if (!Object.values(EditionKind).includes(value.kind)) {
177
- throw new Error(
178
- `${EDITION_DESCRIPTOR_FILE}: kind is ${JSON.stringify(value.kind)}, expected exactly ${Object.values(EditionKind).join(' | ')}; there is no default kind and none is inferred`,
179
- );
180
- }
181
- const sealed = value.kind === EditionKind.Sealed;
182
- if (!sealed && 'sealOf' in value) {
183
- throw new Error(`${EDITION_DESCRIPTOR_FILE}: kind ${value.kind} carries sealOf; only a sealed edition names the resolved edition it seals`);
184
- }
185
- exactKeys(value, sealed ? [...DESCRIPTOR_KEYS, 'sealOf'] : DESCRIPTOR_KEYS, EDITION_DESCRIPTOR_FILE);
186
- assertCanonicalDistributionId(value.distributionId);
187
- if (!Array.isArray(value.locks) || value.locks.length === 0 || value.locks.some((file) => typeof file !== 'string' || file === '')) {
188
- throw new Error(`${EDITION_DESCRIPTOR_FILE}: locks must be a non-empty array of file names`);
189
- }
190
- exactKeys(value.provenance, ['channel', 'pins', 'workflow'], `${EDITION_DESCRIPTOR_FILE} provenance`);
191
- if (!Object.values(EditionChannel).includes(value.provenance.channel)) {
192
- throw new Error(`${EDITION_DESCRIPTOR_FILE}: provenance.channel must be one of ${Object.values(EditionChannel).join(' | ')}`);
193
- }
194
- const { pins, workflow } = value.provenance;
195
- if (pins === null || typeof pins !== 'object' || Array.isArray(pins)) {
196
- throw new Error(`${EDITION_DESCRIPTOR_FILE}: provenance.pins must map pin keys to 40-hex commits (the ${DIGEST_PIN_KEYS.map((key) => `"${key}"`).join(' and ')} pins to sha256 digests)`);
197
- }
198
- for (const [key, pin] of Object.entries(pins)) {
199
- const digestPin = DIGEST_PIN_KEYS.includes(key);
200
- const pattern = digestPin ? DIGEST_PIN_PATTERN : COMMIT_PATTERN;
201
- if (typeof pin !== 'string' || !pattern.test(pin)) {
202
- throw new Error(
203
- digestPin
204
- ? `${EDITION_DESCRIPTOR_FILE}: provenance.pins["${key}"] must be a sha256:<64 hex> digest`
205
- : `${EDITION_DESCRIPTOR_FILE}: provenance.pins must map pin keys to 40-hex commits (${JSON.stringify(key)} is not)`,
206
- );
207
- }
208
- }
209
- assertCustomerPinForm(value.kind, value.provenance.channel, pins, value.distributionId);
210
- exactKeys(workflow, ['repository', 'runId'], `${EDITION_DESCRIPTOR_FILE} provenance.workflow`);
211
- if (!workflow.repository || !workflow.runId || typeof workflow.repository !== 'string' || typeof workflow.runId !== 'string') {
212
- throw new Error(`${EDITION_DESCRIPTOR_FILE}: provenance.workflow is {repository, runId}, both non-empty strings`);
213
- }
214
- if (sealed && value.provenance.channel !== SEALED_EDITION_CHANNEL) {
215
- throw new Error(
216
- `${EDITION_DESCRIPTOR_FILE}: a sealed edition records provenance.channel ${SEALED_EDITION_CHANNEL} (a seal is ${SEALED_EDITION_CHANNEL}-only); "${value.distributionId}" records ${JSON.stringify(value.provenance.channel)}`,
217
- );
218
- }
219
- // The reader holds the writer's rule (contract evidenceTrust.statesByKind): `not-armed` only on a resolved develop edition.
220
- const admitted = admittedEvidenceTrustStates(value.kind, value.provenance.channel);
221
- if (!admitted.includes(value.evidenceTrustPolicy)) {
222
- throw new Error(
223
- `${EDITION_DESCRIPTOR_FILE}: a ${value.kind} ${value.provenance.channel} edition records evidenceTrustPolicy ${admitted.join(' | ')}; ` +
224
- `"${value.distributionId}" records ${JSON.stringify(value.evidenceTrustPolicy)}`,
225
- );
226
- }
227
- if (sealed) {
228
- const sealOf = parseSealOf(value.sealOf);
229
- if (sealOf.distributionId !== value.distributionId) {
230
- throw new Error(`${EDITION_DESCRIPTOR_FILE}: sealOf ${value.sealOf} is an edition of "${sealOf.distributionId}", not of "${value.distributionId}"`);
231
- }
232
- if (sealOf.channel !== value.provenance.channel) {
233
- throw new Error(
234
- `${EDITION_DESCRIPTOR_FILE}: sealOf ${value.sealOf} is a ${sealOf.channel} edition, but the seal records provenance.channel ${value.provenance.channel}; a seal keeps the channel of the edition it seals`,
235
- );
236
- }
237
- }
238
- exactKeys(value.engine, ['image'], `${EDITION_DESCRIPTOR_FILE} engine`);
239
- assertEngineImage(value.engine.image);
240
- return value;
241
- }
242
-
243
- const REGISTRY_PATTERN = /^[a-z0-9.-]+(:[0-9]+)?(\/[a-z0-9._-]+)+$/;
244
- /** `.` and `..` match the segment grammar and name no namespace: a registry resolves them away. */
245
- const isDotSegment = (segment) => segment === '.' || segment === '..';
246
- const TAG_PATTERN = /^[A-Za-z0-9_][A-Za-z0-9._-]{0,127}$/;
247
-
248
- /**
249
- * The registry ROOT is the caller's `<host>[:port]/<namespace>[/...]`; the CLI appends the channel's
250
- * namespace segment AND `xema-edition-<id>` itself, so a root already ending in either is refused.
251
- */
252
- export function assertRegistry(registryRoot) {
253
- if (typeof registryRoot !== 'string' || !REGISTRY_PATTERN.test(registryRoot) || registryRoot.split('/').slice(1).some(isDotSegment)) {
254
- throw new Error(
255
- `--registry ${JSON.stringify(registryRoot)} is not <registry-host>[:port]/<namespace>[/...] (lowercase, e.g. registry.example.com/acme)`,
256
- );
257
- }
258
- const last = registryRoot.split('/').pop();
259
- if (Object.values(EDITION_REPOSITORY_SEGMENTS).includes(last) || last.startsWith(EDITION_REPOSITORY_PREFIX)) {
260
- throw new Error(
261
- `--registry ${registryRoot} ends in "${last}", which the CLI appends itself: pass the registry root; ` +
262
- `the CLI appends <${Object.values(EDITION_REPOSITORY_SEGMENTS).join('|')}>/${EDITION_REPOSITORY_PREFIX}<id>`,
263
- );
264
- }
265
- }
266
-
267
- function assertChannel(channel) {
268
- if (!Object.values(EditionChannel).includes(channel)) {
269
- throw new Error(`edition channel ${JSON.stringify(channel)} must be one of ${Object.values(EditionChannel).join(' | ')}`);
270
- }
271
- }
272
-
273
- /** `<registry root>/<channel segment>/xema-edition-<id>`: the repository of an edition produced for `channel`. */
274
- export function editionRepository(distributionId, registryRoot, channel) {
275
- assertCanonicalDistributionId(distributionId);
276
- assertRegistry(registryRoot);
277
- assertChannel(channel);
278
- return `${registryRoot}/${EDITION_REPOSITORY_SEGMENTS[channel]}/${EDITION_REPOSITORY_PREFIX}${distributionId}`;
279
- }
280
-
281
- /**
282
- * The one parser of an edition repository `<root>/<segment>/xema-edition-<id>`, returning
283
- * `{ registryRoot, channel, distributionId }`. The penultimate segment must be one of the contract's
284
- * channel segments and the last must carry the repository prefix.
285
- */
286
- export function parseEditionRepository(repository) {
287
- const segments = typeof repository === 'string' ? repository.split('/') : [];
288
- const last = segments.at(-1) ?? '';
289
- const segment = segments.at(-2);
290
- const channel = Object.values(EditionChannel).find((candidate) => EDITION_REPOSITORY_SEGMENTS[candidate] === segment);
291
- if (channel === undefined) {
292
- throw new Error(
293
- `edition repository ${JSON.stringify(repository)}: its namespace segment ${JSON.stringify(segment)} is not one of ` +
294
- Object.values(EDITION_REPOSITORY_SEGMENTS).map((name) => `"${name}"`).join(', '),
295
- );
296
- }
297
- if (!last.startsWith(EDITION_REPOSITORY_PREFIX)) {
298
- throw new Error(`edition repository ${JSON.stringify(repository)}: its name ${JSON.stringify(last)} lacks the "${EDITION_REPOSITORY_PREFIX}" prefix`);
299
- }
300
- const distributionId = last.slice(EDITION_REPOSITORY_PREFIX.length);
301
- assertCanonicalDistributionId(distributionId);
302
- const registryRoot = segments.slice(0, -2).join('/');
303
- assertRegistry(registryRoot);
304
- return { registryRoot, channel, distributionId };
305
- }
306
-
307
- /** `<repository>:<tag>`; the tag is for humans, the artifact is addressed by its digest. */
308
- export function editionTarget(distributionId, registryRoot, channel, tag) {
309
- if (typeof tag !== 'string' || !TAG_PATTERN.test(tag)) {
310
- throw new Error(`tag ${JSON.stringify(tag)} is not an OCI tag`);
311
- }
312
- return `${editionRepository(distributionId, registryRoot, channel)}:${tag}`;
313
- }
314
-
315
- /** The version of this CLI, the writer of every descriptor and lock: read lazily, so a bundle that never tags does not need it. */
316
- let cliVersionMemo;
317
- export function cliVersion() {
318
- if (cliVersionMemo === undefined) {
319
- const { version } = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
320
- if (typeof version !== 'string' || version.length === 0) {throw new Error('@xemahq/xema: no "version" in its package.json');}
321
- cliVersionMemo = version;
322
- }
323
- return cliVersionMemo;
324
- }
325
-
326
- /** `{ <source>: "<registry>/<prefix>" }` sorted by source: the canonical form of a parsed --source-image map. */
327
- export function canonicalSourceImages(sourceImages = new Map()) {
328
- return Object.fromEntries(
329
- [...sourceImages.entries()]
330
- .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
331
- .map(([name, { imageRegistry, imageNamePrefix }]) => [name, `${imageRegistry}/${imageNamePrefix}`]),
332
- );
333
- }
334
-
335
- /**
336
- * The tag of an edition resolved from a snapshot (a develop edition, a customer release edition): sha256 of the canonical `{ cli, engine, pins, sourceImages }`, plus `imageBuildRecord` (the record's digest) for a develop resolve --images-from. Every input of
337
- * the bytes the artifact records is inside it. The pins fix the locks and the descriptor's pins: a vendor edition's
338
- * commits fix its definitions; a customer edition's pins carry its sources' commits, the catalogue digest and the
339
- * digest of its canonical definition (`definition`: vendor selection, image registry mirror, Store publisher anchors); the
340
- * descriptor's `engine.image` is not a pin; a customer's `--source-image` map composes its own image rows
341
- * (`<registry>/<prefix><subject>`) and is not a pin either; and the CLI version is the writer of every
342
- * byte. A tag over the pins alone named two artifacts that differ in any of the others, and a re-run could
343
- * only refuse the existing one (`check-existing`) or reuse a stale one. `provenance.workflow` (the run that
344
- * wrote the bytes) is the one recorded field outside it: a fact about the artifact, not an input to it.
345
- */
346
- export function snapshotEditionTag({ pins, engineImage, sourceImages = new Map(), imageBuildRecordDigest, version = cliVersion() }) {
347
- return sha256Hex(
348
- serializeJson({
349
- cli: version,
350
- engine: assertEngineImage(engineImage),
351
- pins: sortedSnapshotPins(pins),
352
- sourceImages: canonicalSourceImages(sourceImages),
353
- // A develop resolve from an image build record (--images-from): the record fixes the image rows, and a satellite
354
- // digest changes independently of the pins. Absent on the probe path, whose tag inputs are unchanged.
355
- ...(imageBuildRecordDigest === undefined ? {} : { imageBuildRecord: assertImageBuildRecordDigest(imageBuildRecordDigest) }),
356
- }),
357
- );
358
- }
359
-
360
- function assertImageBuildRecordDigest(digest) {
361
- if (typeof digest !== 'string' || !/^[0-9a-f]{64}$/.test(digest)) {
362
- throw new Error(`an image build record digest must be 64 lowercase hex; got ${JSON.stringify(digest)}`);
363
- }
364
- return digest;
365
- }
366
-
367
- /** The target of an edition resolved from a snapshot of pins, on either channel: the tag is `snapshotEditionTag`. */
368
- export function snapshotEditionTarget(channel, distributionId, pins, { registry, engineImage, sourceImages, imageBuildRecordDigest }) {
369
- return editionTarget(distributionId, registry, channel, snapshotEditionTag({ pins, engineImage, sourceImages, imageBuildRecordDigest }));
370
- }
371
-
372
- /** A develop edition's target: the tag is `snapshotEditionTag` of the pins, the engine, the source images and any image build record. */
373
- export function developEditionTarget(distributionId, pins, { registry, engineImage, sourceImages, imageBuildRecordDigest }) {
374
- return snapshotEditionTarget(EditionChannel.Develop, distributionId, pins, { registry, engineImage, sourceImages, imageBuildRecordDigest });
375
- }
376
-
377
- function realpathOfPlanned(path) {
378
- const absolute = resolve(path);
379
- let existing = absolute;
380
- const rest = [];
381
- while (!existsSync(existing)) {
382
- rest.unshift(basename(existing));
383
- existing = dirname(existing);
384
- }
385
- return join(realpathSync(existing), ...rest);
386
- }
387
-
388
- function isWithin(path, directory) {
389
- const inside = relative(realpathOfPlanned(directory), path);
390
- return !(inside === '..' || inside.startsWith(`..${sep}`) || isAbsolute(inside));
391
- }
392
-
393
- function assertOutsideCommittedTrees(outDir) {
394
- const planned = realpathOfPlanned(outDir);
395
- for (const [label, tree] of [
396
- ['the data tree', dataRoot()],
397
- ['the editions root', editionsRoot()],
398
- ]) {
399
- if (isWithin(planned, tree)) {
400
- throw new Error(`refusing to write an edition artifact to ${outDir}: it lies inside ${label} (${tree}), which is committed content`);
401
- }
402
- }
403
- }
404
-
405
- /** Write the descriptor and the locks of a RESOLVED edition of `channel` to `outDir`; returns the descriptor. */
406
- export function writeEditionArtifact({
407
- outDir,
408
- channel,
409
- distributionId,
410
- pins,
411
- workflow,
412
- evidenceTrustPolicy,
413
- engineImage,
414
- distributionLock,
415
- imageLock,
416
- authorizationLock,
417
- chartSetLock,
418
- }) {
419
- assertOutsideCommittedTrees(outDir);
420
- const byFile = [
421
- [EditionLockFile.Distribution, distributionLock],
422
- [EditionLockFile.Images, imageLock],
423
- [EditionLockFile.Authorization, authorizationLock],
424
- [EditionLockFile.ChartSet, chartSetLock],
425
- ];
426
- for (const [file, lock] of byFile) {
427
- if (lock === null || lock === undefined) {
428
- throw new Error(`edition "${distributionId}" has no ${file}: an edition carries all four locks`);
429
- }
430
- }
431
- assertRosteredChartSetLock(chartSetLock, EDITION_CHART_SET_FILE);
432
- const descriptor = editionDescriptor({ kind: EditionKind.Resolved, distributionId, channel, pins, workflow, evidenceTrustPolicy, engineImage });
433
- mkdirSync(outDir, { recursive: true });
434
- for (const [file, value] of [[EDITION_DESCRIPTOR_FILE, descriptor], ...byFile]) {
435
- writeFileSync(join(outDir, file), serializeJson(value));
436
- }
437
- return descriptor;
438
- }
439
-
440
- /**
441
- * An existing develop tag is reused only if it IS this snapshot: the tag
442
- * is a hash of its inputs, but a tag is mutable registry state, so the pulled
443
- * descriptor must say the same edition, the same channel, exactly the same pins,
444
- * the same engine image, the same evidence trust state and the same lock set. A customer artifact (`catalogueDigest` and
445
- * `definitionDigest` given) must also record those digests as its catalogue and definition provenance pins. Throws naming
446
- * the first difference.
447
- */
448
- export function assertExistingArtifactMatches({ artifactDir, distributionId, channel, pins, engineImage, evidenceTrustPolicy, catalogueDigest, definitionDigest }) {
449
- const descriptorPath = join(artifactDir, EDITION_DESCRIPTOR_FILE);
450
- if (!existsSync(descriptorPath)) {
451
- throw new Error(`the existing artifact holds no ${EDITION_DESCRIPTOR_FILE}; refusing to reuse a tag that is not an edition`);
452
- }
453
- const existing = parseEditionDescriptor(readStrictJsonFile(descriptorPath));
454
- if (existing.kind !== EditionKind.Resolved) {
455
- throw new Error(`the existing artifact is a ${existing.kind} edition; only a resolved edition is reused for a snapshot, refusing to reuse it`);
456
- }
457
- assertCanonicalDistributionId(distributionId);
458
- if (existing.distributionId !== distributionId) {
459
- throw new Error(`the existing artifact's distributionId is ${JSON.stringify(existing.distributionId)}, expected ${JSON.stringify(distributionId)}; refusing to reuse it`);
460
- }
461
- if (existing.provenance.channel !== channel) {
462
- throw new Error(`the existing artifact was produced on channel ${JSON.stringify(existing.provenance.channel)}, expected ${JSON.stringify(channel)}; refusing to reuse it`);
463
- }
464
- if (existing.evidenceTrustPolicy !== evidenceTrustPolicy) {
465
- throw new Error(`the existing artifact records evidenceTrustPolicy ${JSON.stringify(existing.evidenceTrustPolicy)}, this data root's is ${JSON.stringify(evidenceTrustPolicy)}; refusing to reuse it`);
466
- }
467
- if (catalogueDigest !== undefined && existing.provenance.pins[CATALOGUE_PIN_KEY] !== catalogueDigest) {
468
- throw new Error(
469
- `the existing artifact's catalogue provenance pin is ${JSON.stringify(existing.provenance.pins[CATALOGUE_PIN_KEY])}, ` +
470
- `the pinned catalogue is ${catalogueDigest}; refusing to reuse it`,
471
- );
472
- }
473
- if (definitionDigest !== undefined && existing.provenance.pins[DEFINITION_PIN_KEY] !== definitionDigest) {
474
- throw new Error(
475
- `the existing artifact was resolved from customer definition ${JSON.stringify(existing.provenance.pins[DEFINITION_PIN_KEY])}, ` +
476
- `this definition is ${definitionDigest} (its selection, mirror or Store publisher anchors differ); refusing to reuse it`,
477
- );
478
- }
479
- if (serializeJson(existing.provenance.pins) !== serializeJson(sortedSnapshotPins(pins))) {
480
- throw new Error('the existing artifact was resolved from different pins than this snapshot (tag and content disagree); refusing to reuse it');
481
- }
482
- if (existing.engine.image !== assertEngineImage(engineImage)) {
483
- throw new Error(`the existing artifact names engine ${existing.engine.image}, not ${engineImage}; refusing to reuse it`);
484
- }
485
- if (serializeJson(existing.locks) !== serializeJson(EDITION_LOCKS)) {
486
- throw new Error('the existing artifact lists a different lock set than an edition carries; refusing to reuse it');
487
- }
488
- for (const file of existing.locks) {
489
- if (!existsSync(join(artifactDir, file))) {
490
- throw new Error(`the existing artifact lacks ${file}, which its descriptor lists; refusing to reuse it`);
491
- }
492
- }
493
- }
494
-
495
- /**
496
- * Write the SEALED edition of one exact resolved edition to `outDir`: every layer of the resolved artifact other than
497
- * its descriptor, byte for byte (`layers`: title -> bytes, already proven to be the layers of `sealOf`), plus a sealed
498
- * descriptor. The seal keeps the resolved edition's distribution, locks, channel, pins and engine image; it records
499
- * `sealOf`, the run that sealed it, and an evidence trust state its kind admits (contract: armed). Returns the descriptor.
500
- */
501
- export function writeSealedEditionArtifact({ outDir, resolved, sealOf, layers, workflow, evidenceTrustPolicy }) {
502
- assertOutsideCommittedTrees(outDir);
503
- if (resolved.kind !== EditionKind.Resolved) {
504
- throw new Error(`${sealOf} is a ${resolved.kind} edition; a seal seals exactly one resolved edition`);
505
- }
506
- if (layers.has(EDITION_DESCRIPTOR_FILE)) {
507
- throw new Error(`the layers of a seal exclude the resolved ${EDITION_DESCRIPTOR_FILE}; the seal writes its own`);
508
- }
509
- const missing = resolved.locks.filter((file) => !layers.has(file));
510
- if (missing.length > 0) {
511
- throw new Error(`${sealOf} lacks ${missing.join(', ')}, which its descriptor lists`);
512
- }
513
- const descriptor = editionDescriptor({
514
- kind: EditionKind.Sealed,
515
- sealOf,
516
- distributionId: resolved.distributionId,
517
- channel: resolved.provenance.channel,
518
- pins: resolved.provenance.pins,
519
- workflow,
520
- evidenceTrustPolicy,
521
- engineImage: resolved.engine.image,
522
- });
523
- mkdirSync(outDir, { recursive: true });
524
- writeFileSync(join(outDir, EDITION_DESCRIPTOR_FILE), serializeJson(descriptor));
525
- for (const [file, bytes] of layers) {
526
- writeFileSync(join(outDir, file), bytes);
527
- }
528
- return descriptor;
529
- }
@@ -1,85 +0,0 @@
1
- #!/usr/bin/env node
2
- // `xema edition biome-manifests <id> --json`: the PINNED xema-biome.json of every
3
- // biome of one edition, as JSON.
4
- //
5
- // usage: xema edition biome-manifests <id> --json --data-root <dir> --editions-root <dir>
6
- // --sources-root <dir> --kernel <dir>
7
- //
8
- // For every biome of the edition's resolved lock this reads the manifest AT the
9
- // commit the lock pins (the way the seal and `xema edition check` read it) and
10
- // prints one document on stdout:
11
- // {"schema":"xema.edition-biome-manifests/v1","distributionId","biomes":[{"id","repo","sourceCommit","manifest"}]}
12
- // sorted by biome id. A consumer (the store catalogue) reads this instead of
13
- // reading the sources itself. Read-only. When the lock is absent or a pinned
14
- // manifest cannot be read it prints NOTHING on stdout, a message on stderr, and exits non-zero.
15
-
16
- import { readFileSync } from 'node:fs';
17
- import { join } from 'node:path';
18
-
19
- import { pinnedBiomeManifests } from './biome-content.mjs';
20
- import { assertCanonicalDistributionId } from './distribution-paths.mjs';
21
- import { editionPinnedInputs } from './edition-pinned-inputs.mjs';
22
- import {
23
- WorkspaceRoot,
24
- configureEditionWorkspaceFromArgv,
25
- editionsRoot,
26
- isEntryModule,
27
- } from './edition-workspace.mjs';
28
- import { loadKernelDistributionSchemas, serializeJson } from './lib.mjs';
29
- import { externalSourceTrees, sourceTreeLocator } from './resolve-images.mjs';
30
- import { createPinnedSourceAuthority } from './source-authority.mjs';
31
-
32
- export const EDITION_BIOME_MANIFESTS_SCHEMA = 'xema.edition-biome-manifests/v1';
33
-
34
- const USAGE =
35
- 'usage: xema edition biome-manifests <id> --json --data-root <dir> --editions-root <dir> --sources-root <dir> --kernel <dir>';
36
-
37
- function readLock(distributionId, file) {
38
- try {
39
- return JSON.parse(readFileSync(join(editionsRoot(), distributionId, file), 'utf8'));
40
- } catch (error) {
41
- throw new Error(`edition "${distributionId}" has no readable ${file} under ${editionsRoot()}: ${error.message}`);
42
- }
43
- }
44
-
45
- export async function editionBiomeManifests({ distributionId, schemas }) {
46
- assertCanonicalDistributionId(distributionId);
47
- const lock = schemas.parseDistributionLock(readLock(distributionId, 'distribution.lock.json'));
48
- const imageLock = schemas.parseImageLock(readLock(distributionId, 'images.lock.json'));
49
- const authority = createPinnedSourceAuthority({ pins: (await editionPinnedInputs(distributionId, { schemas })).repositoryPins });
50
- return {
51
- schema: EDITION_BIOME_MANIFESTS_SCHEMA,
52
- distributionId,
53
- biomes: await pinnedBiomeManifests({
54
- schemas,
55
- lock,
56
- imageLock,
57
- locate: sourceTreeLocator(externalSourceTrees(lock)),
58
- vendoredCommit: (repo) => authority.vendoredSourceCommitForRepository(repo),
59
- }),
60
- };
61
- }
62
-
63
- async function main() {
64
- const rest = configureEditionWorkspaceFromArgv(process.argv.slice(2), [
65
- WorkspaceRoot.Data,
66
- WorkspaceRoot.Editions,
67
- WorkspaceRoot.Sources,
68
- WorkspaceRoot.Kernel,
69
- ]);
70
- const operands = rest.filter((arg) => arg !== '--json');
71
- if (operands.length !== 1 || rest.length - operands.length !== 1) {
72
- throw new Error(USAGE);
73
- }
74
- const schemas = await loadKernelDistributionSchemas();
75
- // Built whole before anything is written, so a refusal leaves stdout empty.
76
- const document = await editionBiomeManifests({ distributionId: operands[0], schemas });
77
- process.stdout.write(serializeJson(document));
78
- }
79
-
80
- if (isEntryModule(import.meta.url)) {
81
- main().catch((error) => {
82
- console.error(`[edition-biome-manifests] ${error.message}`);
83
- process.exitCode = 1;
84
- });
85
- }