@xemahq/xema 0.12.0 → 0.14.0

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 (335) hide show
  1. package/README.md +68 -20
  2. package/dist/assets/boot-graph.json +57 -15
  3. package/dist/assets/core/distribution.lock.json +668 -297
  4. package/dist/assets/core/images.lock.json +136 -136
  5. package/dist/assets/oss/distribution.lock.json +1532 -444
  6. package/dist/assets/oss/images.lock.json +423 -188
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +36 -1
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/apply.d.ts.map +1 -1
  11. package/dist/commands/apply.js +1 -1
  12. package/dist/commands/apply.js.map +1 -1
  13. package/dist/commands/biome-dev.d.ts +3 -0
  14. package/dist/commands/biome-dev.d.ts.map +1 -0
  15. package/dist/commands/biome-dev.js +176 -0
  16. package/dist/commands/biome-dev.js.map +1 -0
  17. package/dist/commands/biome-validate.d.ts +10 -0
  18. package/dist/commands/biome-validate.d.ts.map +1 -0
  19. package/dist/commands/biome-validate.js +49 -0
  20. package/dist/commands/biome-validate.js.map +1 -0
  21. package/dist/commands/biome.d.ts.map +1 -1
  22. package/dist/commands/biome.js +359 -25
  23. package/dist/commands/biome.js.map +1 -1
  24. package/dist/commands/canopy.d.ts +3 -0
  25. package/dist/commands/canopy.d.ts.map +1 -0
  26. package/dist/commands/canopy.js +214 -0
  27. package/dist/commands/canopy.js.map +1 -0
  28. package/dist/commands/config.d.ts +3 -0
  29. package/dist/commands/config.d.ts.map +1 -0
  30. package/dist/commands/config.js +78 -0
  31. package/dist/commands/config.js.map +1 -0
  32. package/dist/commands/dev.d.ts.map +1 -1
  33. package/dist/commands/dev.js +71 -21
  34. package/dist/commands/dev.js.map +1 -1
  35. package/dist/commands/dist.js +1 -1
  36. package/dist/commands/dist.js.map +1 -1
  37. package/dist/commands/down.d.ts.map +1 -1
  38. package/dist/commands/down.js +40 -6
  39. package/dist/commands/down.js.map +1 -1
  40. package/dist/commands/import.d.ts.map +1 -1
  41. package/dist/commands/import.js +1 -1
  42. package/dist/commands/import.js.map +1 -1
  43. package/dist/commands/installation.d.ts +3 -0
  44. package/dist/commands/installation.d.ts.map +1 -0
  45. package/dist/commands/installation.js +101 -0
  46. package/dist/commands/installation.js.map +1 -0
  47. package/dist/commands/logs.d.ts.map +1 -1
  48. package/dist/commands/logs.js +6 -14
  49. package/dist/commands/logs.js.map +1 -1
  50. package/dist/commands/objects.d.ts.map +1 -1
  51. package/dist/commands/objects.js +85 -6
  52. package/dist/commands/objects.js.map +1 -1
  53. package/dist/commands/plan.d.ts.map +1 -1
  54. package/dist/commands/plan.js +1 -1
  55. package/dist/commands/plan.js.map +1 -1
  56. package/dist/commands/run.d.ts.map +1 -1
  57. package/dist/commands/run.js +61 -9
  58. package/dist/commands/run.js.map +1 -1
  59. package/dist/commands/serve.d.ts.map +1 -1
  60. package/dist/commands/serve.js +33 -13
  61. package/dist/commands/serve.js.map +1 -1
  62. package/dist/commands/shell.d.ts.map +1 -1
  63. package/dist/commands/shell.js +190 -6
  64. package/dist/commands/shell.js.map +1 -1
  65. package/dist/commands/source.d.ts +3 -0
  66. package/dist/commands/source.d.ts.map +1 -0
  67. package/dist/commands/source.js +120 -0
  68. package/dist/commands/source.js.map +1 -0
  69. package/dist/commands/status.d.ts.map +1 -1
  70. package/dist/commands/status.js +29 -3
  71. package/dist/commands/status.js.map +1 -1
  72. package/dist/commands/up.d.ts.map +1 -1
  73. package/dist/commands/up.js +55 -5
  74. package/dist/commands/up.js.map +1 -1
  75. package/dist/dev/env-defaults.d.ts.map +1 -1
  76. package/dist/dev/env-defaults.js +33 -11
  77. package/dist/dev/env-defaults.js.map +1 -1
  78. package/dist/dev/forked-worker.d.ts +15 -0
  79. package/dist/dev/forked-worker.d.ts.map +1 -1
  80. package/dist/dev/forked-worker.js +72 -14
  81. package/dist/dev/forked-worker.js.map +1 -1
  82. package/dist/dev/infra-preflight.d.ts +2 -1
  83. package/dist/dev/infra-preflight.d.ts.map +1 -1
  84. package/dist/dev/infra-preflight.js +10 -0
  85. package/dist/dev/infra-preflight.js.map +1 -1
  86. package/dist/dev/opa-policies.d.ts +3 -0
  87. package/dist/dev/opa-policies.d.ts.map +1 -0
  88. package/dist/dev/opa-policies.js +64 -0
  89. package/dist/dev/opa-policies.js.map +1 -0
  90. package/dist/lib/cli-errors.d.ts +7 -0
  91. package/dist/lib/cli-errors.d.ts.map +1 -0
  92. package/dist/lib/cli-errors.js +30 -0
  93. package/dist/lib/cli-errors.js.map +1 -0
  94. package/dist/lib/control-plane.d.ts.map +1 -1
  95. package/dist/lib/control-plane.js +5 -2
  96. package/dist/lib/control-plane.js.map +1 -1
  97. package/dist/lib/exit-codes.d.ts +3 -4
  98. package/dist/lib/exit-codes.d.ts.map +1 -1
  99. package/dist/lib/exit-codes.js +3 -4
  100. package/dist/lib/exit-codes.js.map +1 -1
  101. package/dist/lib/http-error.d.ts +2 -0
  102. package/dist/lib/http-error.d.ts.map +1 -0
  103. package/dist/lib/http-error.js +51 -0
  104. package/dist/lib/http-error.js.map +1 -0
  105. package/dist/lib/roster-profile.d.ts +10 -0
  106. package/dist/lib/roster-profile.d.ts.map +1 -0
  107. package/dist/lib/roster-profile.js +44 -0
  108. package/dist/lib/roster-profile.js.map +1 -0
  109. package/dist/runtime/biome-dev.d.ts +28 -0
  110. package/dist/runtime/biome-dev.d.ts.map +1 -0
  111. package/dist/runtime/biome-dev.js +131 -0
  112. package/dist/runtime/biome-dev.js.map +1 -0
  113. package/dist/runtime/biome-local-install.d.ts +29 -0
  114. package/dist/runtime/biome-local-install.d.ts.map +1 -0
  115. package/dist/runtime/biome-local-install.js +243 -0
  116. package/dist/runtime/biome-local-install.js.map +1 -0
  117. package/dist/runtime/biome-publish.d.ts +34 -0
  118. package/dist/runtime/biome-publish.d.ts.map +1 -0
  119. package/dist/runtime/biome-publish.js +214 -0
  120. package/dist/runtime/biome-publish.js.map +1 -0
  121. package/dist/runtime/biome-scaffold.d.ts +35 -0
  122. package/dist/runtime/biome-scaffold.d.ts.map +1 -0
  123. package/dist/runtime/biome-scaffold.js +153 -0
  124. package/dist/runtime/biome-scaffold.js.map +1 -0
  125. package/dist/runtime/biome-validate.d.ts +28 -0
  126. package/dist/runtime/biome-validate.d.ts.map +1 -0
  127. package/dist/runtime/biome-validate.js +450 -0
  128. package/dist/runtime/biome-validate.js.map +1 -0
  129. package/dist/runtime/boot-graph-loader.d.ts +1 -0
  130. package/dist/runtime/boot-graph-loader.d.ts.map +1 -1
  131. package/dist/runtime/boot-graph-loader.js +99 -7
  132. package/dist/runtime/boot-graph-loader.js.map +1 -1
  133. package/dist/runtime/canopy-refs.d.ts +8 -0
  134. package/dist/runtime/canopy-refs.d.ts.map +1 -0
  135. package/dist/runtime/canopy-refs.js +51 -0
  136. package/dist/runtime/canopy-refs.js.map +1 -0
  137. package/dist/runtime/canopy-replies.d.ts +14 -0
  138. package/dist/runtime/canopy-replies.d.ts.map +1 -0
  139. package/dist/runtime/canopy-replies.js +39 -0
  140. package/dist/runtime/canopy-replies.js.map +1 -0
  141. package/dist/runtime/capability-invoke.d.ts +35 -0
  142. package/dist/runtime/capability-invoke.d.ts.map +1 -0
  143. package/dist/runtime/capability-invoke.js +119 -0
  144. package/dist/runtime/capability-invoke.js.map +1 -0
  145. package/dist/runtime/config/dev-mode.d.ts +8 -0
  146. package/dist/runtime/config/dev-mode.d.ts.map +1 -0
  147. package/dist/runtime/config/dev-mode.js +84 -0
  148. package/dist/runtime/config/dev-mode.js.map +1 -0
  149. package/dist/runtime/config/init-presets.d.ts +1 -1
  150. package/dist/runtime/config/init-presets.d.ts.map +1 -1
  151. package/dist/runtime/config/init-presets.js +63 -11
  152. package/dist/runtime/config/init-presets.js.map +1 -1
  153. package/dist/runtime/config/loader.d.ts +1 -0
  154. package/dist/runtime/config/loader.d.ts.map +1 -1
  155. package/dist/runtime/config/loader.js +41 -5
  156. package/dist/runtime/config/loader.js.map +1 -1
  157. package/dist/runtime/config/schema.d.ts +27 -12
  158. package/dist/runtime/config/schema.d.ts.map +1 -1
  159. package/dist/runtime/config/schema.js +113 -8
  160. package/dist/runtime/config/schema.js.map +1 -1
  161. package/dist/runtime/config/sources-config.d.ts +14 -0
  162. package/dist/runtime/config/sources-config.d.ts.map +1 -0
  163. package/dist/runtime/config/sources-config.js +79 -0
  164. package/dist/runtime/config/sources-config.js.map +1 -0
  165. package/dist/runtime/distribution/compose.d.ts.map +1 -1
  166. package/dist/runtime/distribution/compose.js +3 -1
  167. package/dist/runtime/distribution/compose.js.map +1 -1
  168. package/dist/runtime/env-seeder.d.ts +5 -0
  169. package/dist/runtime/env-seeder.d.ts.map +1 -1
  170. package/dist/runtime/env-seeder.js +120 -17
  171. package/dist/runtime/env-seeder.js.map +1 -1
  172. package/dist/runtime/foreground.d.ts +4 -0
  173. package/dist/runtime/foreground.d.ts.map +1 -1
  174. package/dist/runtime/foreground.js +11 -0
  175. package/dist/runtime/foreground.js.map +1 -1
  176. package/dist/runtime/infra/infra-catalog.d.ts +1 -0
  177. package/dist/runtime/infra/infra-catalog.d.ts.map +1 -1
  178. package/dist/runtime/infra/infra-catalog.js +2 -1
  179. package/dist/runtime/infra/infra-catalog.js.map +1 -1
  180. package/dist/runtime/infra/infra-runner.d.ts +5 -0
  181. package/dist/runtime/infra/infra-runner.d.ts.map +1 -1
  182. package/dist/runtime/infra/infra-runner.js +82 -13
  183. package/dist/runtime/infra/infra-runner.js.map +1 -1
  184. package/dist/runtime/installation/compiler.d.ts +37 -0
  185. package/dist/runtime/installation/compiler.d.ts.map +1 -0
  186. package/dist/runtime/installation/compiler.js +190 -0
  187. package/dist/runtime/installation/compiler.js.map +1 -0
  188. package/dist/runtime/installation/contract.d.ts +125 -0
  189. package/dist/runtime/installation/contract.d.ts.map +1 -0
  190. package/dist/runtime/installation/contract.js +182 -0
  191. package/dist/runtime/installation/contract.js.map +1 -0
  192. package/dist/runtime/installation/diagnostics.d.ts +16 -0
  193. package/dist/runtime/installation/diagnostics.d.ts.map +1 -0
  194. package/dist/runtime/installation/diagnostics.js +21 -0
  195. package/dist/runtime/installation/diagnostics.js.map +1 -0
  196. package/dist/runtime/installation/diff.d.ts +17 -0
  197. package/dist/runtime/installation/diff.d.ts.map +1 -0
  198. package/dist/runtime/installation/diff.js +99 -0
  199. package/dist/runtime/installation/diff.js.map +1 -0
  200. package/dist/runtime/installation/format.d.ts +3 -0
  201. package/dist/runtime/installation/format.d.ts.map +1 -0
  202. package/dist/runtime/installation/format.js +22 -0
  203. package/dist/runtime/installation/format.js.map +1 -0
  204. package/dist/runtime/installation/from-current-config.d.ts +8 -0
  205. package/dist/runtime/installation/from-current-config.d.ts.map +1 -0
  206. package/dist/runtime/installation/from-current-config.js +75 -0
  207. package/dist/runtime/installation/from-current-config.js.map +1 -0
  208. package/dist/runtime/installation/index.d.ts +13 -0
  209. package/dist/runtime/installation/index.d.ts.map +1 -0
  210. package/dist/runtime/installation/index.js +29 -0
  211. package/dist/runtime/installation/index.js.map +1 -0
  212. package/dist/runtime/installation/lifecycle.d.ts +23 -0
  213. package/dist/runtime/installation/lifecycle.d.ts.map +1 -0
  214. package/dist/runtime/installation/lifecycle.js +70 -0
  215. package/dist/runtime/installation/lifecycle.js.map +1 -0
  216. package/dist/runtime/installation/serialization.d.ts +3 -0
  217. package/dist/runtime/installation/serialization.d.ts.map +1 -0
  218. package/dist/runtime/installation/serialization.js +39 -0
  219. package/dist/runtime/installation/serialization.js.map +1 -0
  220. package/dist/runtime/installation/state-store.d.ts +20 -0
  221. package/dist/runtime/installation/state-store.d.ts.map +1 -0
  222. package/dist/runtime/installation/state-store.js +257 -0
  223. package/dist/runtime/installation/state-store.js.map +1 -0
  224. package/dist/runtime/installation/status.d.ts +30 -0
  225. package/dist/runtime/installation/status.d.ts.map +1 -0
  226. package/dist/runtime/installation/status.js +138 -0
  227. package/dist/runtime/installation/status.js.map +1 -0
  228. package/dist/runtime/installation/support-bundle.d.ts +30 -0
  229. package/dist/runtime/installation/support-bundle.d.ts.map +1 -0
  230. package/dist/runtime/installation/support-bundle.js +130 -0
  231. package/dist/runtime/installation/support-bundle.js.map +1 -0
  232. package/dist/runtime/installation/validation.d.ts +8 -0
  233. package/dist/runtime/installation/validation.d.ts.map +1 -0
  234. package/dist/runtime/installation/validation.js +39 -0
  235. package/dist/runtime/installation/validation.js.map +1 -0
  236. package/dist/runtime/installation/validators/common.d.ts +4 -0
  237. package/dist/runtime/installation/validators/common.d.ts.map +1 -0
  238. package/dist/runtime/installation/validators/common.js +29 -0
  239. package/dist/runtime/installation/validators/common.js.map +1 -0
  240. package/dist/runtime/installation/validators/infrastructure.d.ts +4 -0
  241. package/dist/runtime/installation/validators/infrastructure.d.ts.map +1 -0
  242. package/dist/runtime/installation/validators/infrastructure.js +78 -0
  243. package/dist/runtime/installation/validators/infrastructure.js.map +1 -0
  244. package/dist/runtime/installation/validators/operational.d.ts +4 -0
  245. package/dist/runtime/installation/validators/operational.d.ts.map +1 -0
  246. package/dist/runtime/installation/validators/operational.js +126 -0
  247. package/dist/runtime/installation/validators/operational.js.map +1 -0
  248. package/dist/runtime/installation/validators/profile.d.ts +4 -0
  249. package/dist/runtime/installation/validators/profile.d.ts.map +1 -0
  250. package/dist/runtime/installation/validators/profile.js +78 -0
  251. package/dist/runtime/installation/validators/profile.js.map +1 -0
  252. package/dist/runtime/installation/validators/secrets.d.ts +4 -0
  253. package/dist/runtime/installation/validators/secrets.d.ts.map +1 -0
  254. package/dist/runtime/installation/validators/secrets.js +68 -0
  255. package/dist/runtime/installation/validators/secrets.js.map +1 -0
  256. package/dist/runtime/launch-plan-format.d.ts +3 -0
  257. package/dist/runtime/launch-plan-format.d.ts.map +1 -0
  258. package/dist/runtime/launch-plan-format.js +57 -0
  259. package/dist/runtime/launch-plan-format.js.map +1 -0
  260. package/dist/runtime/launch.d.ts +25 -3
  261. package/dist/runtime/launch.d.ts.map +1 -1
  262. package/dist/runtime/launch.js +264 -24
  263. package/dist/runtime/launch.js.map +1 -1
  264. package/dist/runtime/object-registry-client.d.ts +31 -0
  265. package/dist/runtime/object-registry-client.d.ts.map +1 -0
  266. package/dist/runtime/object-registry-client.js +54 -0
  267. package/dist/runtime/object-registry-client.js.map +1 -0
  268. package/dist/runtime/paths.d.ts +1 -0
  269. package/dist/runtime/paths.d.ts.map +1 -1
  270. package/dist/runtime/paths.js +2 -0
  271. package/dist/runtime/paths.js.map +1 -1
  272. package/dist/runtime/roster.d.ts +11 -4
  273. package/dist/runtime/roster.d.ts.map +1 -1
  274. package/dist/runtime/roster.js +78 -7
  275. package/dist/runtime/roster.js.map +1 -1
  276. package/dist/runtime/run-manifest.d.ts +23 -0
  277. package/dist/runtime/run-manifest.d.ts.map +1 -0
  278. package/dist/runtime/run-manifest.js +273 -0
  279. package/dist/runtime/run-manifest.js.map +1 -0
  280. package/dist/runtime/runner/container-runner.d.ts +6 -0
  281. package/dist/runtime/runner/container-runner.d.ts.map +1 -1
  282. package/dist/runtime/runner/container-runner.js +25 -6
  283. package/dist/runtime/runner/container-runner.js.map +1 -1
  284. package/dist/runtime/runner/docker-cli.d.ts +6 -1
  285. package/dist/runtime/runner/docker-cli.d.ts.map +1 -1
  286. package/dist/runtime/runner/docker-cli.js +47 -6
  287. package/dist/runtime/runner/docker-cli.js.map +1 -1
  288. package/dist/runtime/runner/native-runner.d.ts.map +1 -1
  289. package/dist/runtime/runner/native-runner.js +21 -14
  290. package/dist/runtime/runner/native-runner.js.map +1 -1
  291. package/dist/runtime/secrets/managed-local-store.d.ts +26 -0
  292. package/dist/runtime/secrets/managed-local-store.d.ts.map +1 -0
  293. package/dist/runtime/secrets/managed-local-store.js +202 -0
  294. package/dist/runtime/secrets/managed-local-store.js.map +1 -0
  295. package/dist/runtime/secrets/resolver.d.ts +23 -0
  296. package/dist/runtime/secrets/resolver.d.ts.map +1 -0
  297. package/dist/runtime/secrets/resolver.js +265 -0
  298. package/dist/runtime/secrets/resolver.js.map +1 -0
  299. package/dist/runtime/secrets/url-security.d.ts +3 -0
  300. package/dist/runtime/secrets/url-security.d.ts.map +1 -0
  301. package/dist/runtime/secrets/url-security.js +13 -0
  302. package/dist/runtime/secrets/url-security.js.map +1 -0
  303. package/dist/runtime/sources/credentials.d.ts.map +1 -1
  304. package/dist/runtime/sources/credentials.js +2 -1
  305. package/dist/runtime/sources/credentials.js.map +1 -1
  306. package/dist/runtime/sources/kinds/git.d.ts +6 -3
  307. package/dist/runtime/sources/kinds/git.d.ts.map +1 -1
  308. package/dist/runtime/sources/kinds/git.js +99 -22
  309. package/dist/runtime/sources/kinds/git.js.map +1 -1
  310. package/dist/runtime/sources/resolve-context.d.ts +7 -0
  311. package/dist/runtime/sources/resolve-context.d.ts.map +1 -0
  312. package/dist/runtime/sources/resolve-context.js +3 -0
  313. package/dist/runtime/sources/resolve-context.js.map +1 -0
  314. package/dist/runtime/sources/resolver.d.ts +2 -2
  315. package/dist/runtime/sources/resolver.d.ts.map +1 -1
  316. package/dist/runtime/sources/resolver.js +11 -5
  317. package/dist/runtime/sources/resolver.js.map +1 -1
  318. package/dist/runtime/store-client.d.ts +59 -0
  319. package/dist/runtime/store-client.d.ts.map +1 -0
  320. package/dist/runtime/store-client.js +71 -0
  321. package/dist/runtime/store-client.js.map +1 -0
  322. package/dist/runtime/supervisor.d.ts +6 -0
  323. package/dist/runtime/supervisor.d.ts.map +1 -1
  324. package/dist/runtime/supervisor.js +37 -5
  325. package/dist/runtime/supervisor.js.map +1 -1
  326. package/dist/runtime/waves.d.ts +1 -1
  327. package/dist/runtime/waves.d.ts.map +1 -1
  328. package/dist/runtime/waves.js +86 -19
  329. package/dist/runtime/waves.js.map +1 -1
  330. package/examples/01-local-native.yaml +4 -1
  331. package/examples/03-byo-infra.yaml +17 -7
  332. package/examples/05-appliance-helm.yaml +1 -1
  333. package/examples/06-biome-sources.yaml +4 -1
  334. package/package.json +6 -5
  335. package/xema.config.example.yaml +22 -18
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.bootGraphHardClosure = bootGraphHardClosure;
4
4
  exports.deriveWaves = deriveWaves;
5
5
  exports.findWaveOrderViolations = findWaveOrderViolations;
6
+ const distribution_1 = require("@xemahq/kernel-contracts/distribution");
7
+ const boot_graph_loader_1 = require("./boot-graph-loader");
6
8
  function bootGraphHardClosure(seed, bootGraph, exists) {
7
9
  const out = new Set(seed.filter(exists));
8
10
  const queue = [...out];
@@ -21,25 +23,89 @@ function bootGraphHardClosure(seed, bootGraph, exists) {
21
23
  }
22
24
  return [...out];
23
25
  }
24
- const DEFAULT_TIER_RANK = {
25
- kernel: 0,
26
- system: 1,
27
- base: 2,
28
- platform: 3,
29
- edge: 4,
30
- };
26
+ const CANONICAL_TIER_RANK = distribution_1.PLATFORM_SERVICE_TIER_RANK;
31
27
  function deriveWaves(roster, bootGraph) {
28
+ if (bootGraph === undefined) {
29
+ return deriveTierWaves(roster);
30
+ }
31
+ (0, boot_graph_loader_1.assertBootGraphIntegrity)(bootGraph);
32
+ const entries = new Map();
33
+ for (const entry of roster) {
34
+ if (entries.has(entry.name)) {
35
+ throw new Error(`Cannot compile boot waves: duplicate roster service "${entry.name}".`);
36
+ }
37
+ entries.set(entry.name, entry);
38
+ }
39
+ const prerequisites = new Map();
40
+ const dependents = new Map();
41
+ for (const name of entries.keys()) {
42
+ prerequisites.set(name, new Set());
43
+ dependents.set(name, new Set());
44
+ }
45
+ for (const [name] of entries) {
46
+ const node = bootGraph.services.get(name);
47
+ for (const dependency of node?.startupRequires ?? []) {
48
+ if (bootGraph.infraServices.has(dependency)) {
49
+ continue;
50
+ }
51
+ if (!entries.has(dependency)) {
52
+ throw new Error(`Cannot compile boot waves: service "${name}" hard-requires "${dependency}", ` +
53
+ `but that dependency is absent from the resolved roster.`);
54
+ }
55
+ prerequisites.get(name)?.add(dependency);
56
+ dependents.get(dependency)?.add(name);
57
+ }
58
+ }
59
+ const effectiveTier = (name) => bootGraph.services.get(name)?.tier ?? entries.get(name)?.tier ?? '';
32
60
  const rank = (tier) => {
33
- const fromGraph = bootGraph?.tiers[tier];
61
+ const fromGraph = bootGraph.tiers[tier];
34
62
  if (typeof fromGraph === 'number') {
35
63
  return fromGraph;
36
64
  }
37
- const fromDefault = DEFAULT_TIER_RANK[tier];
38
- if (typeof fromDefault === 'number') {
39
- return fromDefault;
65
+ const fromCanonical = CANONICAL_TIER_RANK[tier];
66
+ if (typeof fromCanonical === 'number') {
67
+ return fromCanonical;
40
68
  }
41
69
  return Number.MAX_SAFE_INTEGER;
42
70
  };
71
+ const remaining = new Set(entries.keys());
72
+ const waves = [];
73
+ while (remaining.size > 0) {
74
+ const ready = [...remaining].filter((name) => (prerequisites.get(name)?.size ?? 0) === 0);
75
+ if (ready.length === 0) {
76
+ throw new Error(`Cannot compile boot waves: no dependency-free service remains among ${[
77
+ ...remaining,
78
+ ]
79
+ .sort()
80
+ .join(', ')}.`);
81
+ }
82
+ const orderedTiers = [...new Set(ready.map(effectiveTier))].sort((left, right) => rank(left) - rank(right) || left.localeCompare(right));
83
+ const tier = orderedTiers[0];
84
+ if (tier === undefined) {
85
+ throw new Error('Cannot compile boot waves: ready service set has no tier.');
86
+ }
87
+ const members = ready
88
+ .filter((name) => effectiveTier(name) === tier)
89
+ .sort()
90
+ .map((name) => entries.get(name))
91
+ .filter((entry) => entry !== undefined);
92
+ waves.push({ index: waves.length, tier, members });
93
+ for (const member of members) {
94
+ remaining.delete(member.name);
95
+ for (const dependent of dependents.get(member.name) ?? []) {
96
+ prerequisites.get(dependent)?.delete(member.name);
97
+ }
98
+ }
99
+ }
100
+ return waves;
101
+ }
102
+ function deriveTierWaves(roster) {
103
+ const rank = (tier) => {
104
+ const fromCanonical = CANONICAL_TIER_RANK[tier];
105
+ return typeof fromCanonical === 'number'
106
+ ? fromCanonical
107
+ : Number.MAX_SAFE_INTEGER;
108
+ };
43
109
  const byTier = new Map();
44
110
  for (const entry of roster) {
45
111
  const bucket = byTier.get(entry.tier);
@@ -54,17 +120,18 @@ function deriveWaves(roster, bootGraph) {
54
120
  return orderedTiers.map((tier, index) => ({
55
121
  index,
56
122
  tier,
57
- members: (byTier.get(tier) ?? []).slice().sort((a, b) => a.name.localeCompare(b.name)),
123
+ members: (byTier.get(tier) ?? [])
124
+ .slice()
125
+ .sort((a, b) => a.name.localeCompare(b.name)),
58
126
  }));
59
127
  }
60
128
  function findWaveOrderViolations(waves, bootGraph) {
61
- const tierOfService = new Map();
129
+ const waveOfService = new Map();
62
130
  for (const wave of waves) {
63
131
  for (const m of wave.members) {
64
- tierOfService.set(m.name, wave.tier);
132
+ waveOfService.set(m.name, { index: wave.index, tier: wave.tier });
65
133
  }
66
134
  }
67
- const rank = (tier) => typeof bootGraph.tiers[tier] === 'number' ? bootGraph.tiers[tier] : Number.MAX_SAFE_INTEGER;
68
135
  const violations = [];
69
136
  for (const wave of waves) {
70
137
  for (const m of wave.members) {
@@ -76,16 +143,16 @@ function findWaveOrderViolations(waves, bootGraph) {
76
143
  if (bootGraph.infraServices.has(req)) {
77
144
  continue;
78
145
  }
79
- const reqTier = tierOfService.get(req);
80
- if (reqTier === undefined) {
146
+ const required = waveOfService.get(req);
147
+ if (required === undefined) {
81
148
  continue;
82
149
  }
83
- if (rank(reqTier) >= rank(wave.tier)) {
150
+ if (required.index >= wave.index) {
84
151
  violations.push({
85
152
  service: m.name,
86
153
  requires: req,
87
154
  serviceTier: wave.tier,
88
- requiresTier: reqTier,
155
+ requiresTier: required.tier,
89
156
  });
90
157
  }
91
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"waves.js","sourceRoot":"","sources":["../../src/runtime/waves.ts"],"names":[],"mappings":";;AA2BA,oDAqBC;AAYD,kCA8BC;AAQD,0DA8CC;AArHD,SAAgB,oBAAoB,CAClC,IAAuB,EACvB,SAAoB,EACpB,MAAiC;IAEjC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,eAAe,IAAI,EAAE,EAAE,CAAC;YAC9C,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC;AAGD,MAAM,iBAAiB,GAAqC;IAC1D,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;CACR,CAAC;AAGF,SAAgB,WAAW,CAAC,MAA8B,EAAE,SAAqB;IAC/E,MAAM,IAAI,GAAG,CAAC,IAAY,EAAU,EAAE;QACpC,MAAM,SAAS,GAAG,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC,gBAAgB,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,KAAK;QACL,IAAI;QACJ,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KACvF,CAAC,CAAC,CAAC;AACN,CAAC;AAQD,SAAgB,uBAAuB,CACrC,KAAsB,EACtB,SAAoB;IAEpB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAU,EAAE,CACpC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;IAE9F,MAAM,UAAU,GAKX,EAAE,CAAC;IACR,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBAEvC,IAAI,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrC,SAAS;gBACX,CAAC;gBACD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,UAAU,CAAC,IAAI,CAAC;wBACd,OAAO,EAAE,CAAC,CAAC,IAAI;wBACf,QAAQ,EAAE,GAAG;wBACb,WAAW,EAAE,IAAI,CAAC,IAAI;wBACtB,YAAY,EAAE,OAAO;qBACtB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"waves.js","sourceRoot":"","sources":["../../src/runtime/waves.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,10 @@ infra:
14
14
  # etcd is REQUIRED — it backs cross-process service discovery.
15
15
  # If you want the launcher to manage infra too, use the container substrate
16
16
  # (see 02-local-container-full.yaml).
17
- postgres: { mode: external, url: postgresql://postgres:postgres@127.0.0.1:5432 }
17
+ postgres:
18
+ { mode: external, url: postgresql://xema@127.0.0.1:5432, secretRef: postgres-password }
18
19
  redis: { mode: external, url: redis://127.0.0.1:6379 }
19
20
  etcd: { mode: external, url: http://127.0.0.1:2379 }
20
21
  keycloak: { mode: external, url: http://127.0.0.1:8180, realm: xema }
22
+ secrets:
23
+ postgres-password: { from: env, env: XEMA_POSTGRES_PASSWORD }
@@ -8,10 +8,20 @@ app:
8
8
  substrate: container
9
9
  include: all
10
10
  infra:
11
- postgres: { mode: external, url: postgresql://app:secret@db.corp.internal:5432 }
12
- keycloak: { mode: external, url: https://sso.corp/realms/xema, realm: xema }
13
- objectStore: { mode: external, url: https://s3.corp.internal, bucketPrefix: xema-, secretRef: corp-s3 }
14
- redis: { mode: managed }
15
- etcd: { mode: managed }
16
- search: { mode: managed }
17
- temporal: { mode: disabled } # this install doesn't use durable workflows
11
+ postgres:
12
+ {
13
+ mode: external,
14
+ url: postgresql://app@db.corp.internal:5432,
15
+ secretRef: corp-postgres-password,
16
+ }
17
+ keycloak: { mode: external, url: https://sso.corp/realms/xema, realm: xema }
18
+ objectStore:
19
+ { mode: external, url: https://s3.corp.internal, bucketPrefix: xema- }
20
+ redis: { mode: managed }
21
+ etcd: { mode: managed }
22
+ search: { mode: managed }
23
+ temporal: { mode: disabled } # this install doesn't use durable workflows
24
+ secrets:
25
+ corp-postgres-password: { from: env, env: XEMA_POSTGRES_PASSWORD }
26
+ S3_ACCESS_KEY_ID: { from: env }
27
+ S3_SECRET_ACCESS_KEY: { from: env }
@@ -2,7 +2,7 @@
2
2
  # `helm upgrade --install` per service; Kubernetes owns lifecycle (rollout,
3
3
  # restart, scaling). Infra (Postgres/etcd/...) is a cluster prerequisite, not
4
4
  # managed by the launcher here. Env: XEMA_CHART_REPO, XEMA_NAMESPACE, KUBECONFIG.
5
- # Equivalent CLI: xema serve --profile appliance
5
+ # Equivalent CLI: xema serve --substrate appliance
6
6
  edition: oss
7
7
  app:
8
8
  substrate: helm
@@ -46,6 +46,9 @@ sources:
46
46
  authTokenEnv: NPM_TOKEN_ACME
47
47
 
48
48
  infra:
49
- postgres: { mode: external, url: postgresql://postgres:postgres@127.0.0.1:5432 }
49
+ postgres:
50
+ { mode: external, url: postgresql://xema@127.0.0.1:5432, secretRef: postgres-password }
50
51
  redis: { mode: external, url: redis://127.0.0.1:6379 }
51
52
  keycloak: { mode: external, url: http://127.0.0.1:8180, realm: xema }
53
+ secrets:
54
+ postgres-password: { from: env, env: XEMA_POSTGRES_PASSWORD }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xemahq/xema",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Xema OS global CLI (plan v4.3 §6 Phase J). Single binary day-0 onboarding: `npm i -g @xemahq/xema && xema dev` boots the whole stack; `xema biome scaffold` / `install` / `publish` / `lint` author and ship biomes; `xema run <capability>` invokes through the local capability-router. Multi-platform: works without pnpm or any monorepo clone.",
6
6
  "type": "commonjs",
@@ -21,10 +21,11 @@
21
21
  "@nestjs/common": "11.1.13",
22
22
  "@nestjs/core": "11.1.13",
23
23
  "@nestjs/platform-express": "11.1.13",
24
- "@xemahq/distribution-resolver": "^0.1.1",
25
- "@xemahq/kernel-contracts": "^0.22.0",
26
- "@xemahq/kernel-state-runtime": "^0.2.0",
27
- "@xemahq/service-registry-nest": "^0.2.0",
24
+ "@xemahq/distribution-resolver": "^0.1.2",
25
+ "@xemahq/dsl": "^0.6.1",
26
+ "@xemahq/kernel-contracts": "^0.59.0",
27
+ "@xemahq/kernel-state-runtime": "^0.2.1",
28
+ "@xemahq/service-registry-nest": "^0.5.0",
28
29
  "commander": "^12.1.0",
29
30
  "reflect-metadata": "0.2.2",
30
31
  "rxjs": "7.8.2",
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # Every value shown is the default; delete what you don't override.
5
5
 
6
- edition: oss # which distribution edition to launch
6
+ edition: oss # which distribution edition to launch
7
7
 
8
8
  # ── backing infrastructure (BYO model) ───────────────────────────────────────
9
9
  # mode ∈ managed | external | disabled
@@ -11,36 +11,40 @@ edition: oss # which distribution edition to launch
11
11
  # external — you already run it; give the URL (launcher health-probes it)
12
12
  # disabled — not run (only allowed for optional components)
13
13
  infra:
14
- postgres: { mode: managed } # mandatory
15
- redis: { mode: managed } # mandatory
16
- etcd: { mode: managed } # mandatory (service discovery)
17
- keycloak: { mode: managed } # mandatory (identity)
18
- objectStore: { mode: managed } # mandatory (blobs/artifacts)
19
- search: { mode: managed } # optional (full-text / vectors)
20
- fga: { mode: managed } # optional (authorization ReBAC)
21
- git: { mode: disabled } # optional (SCM integration)
22
- temporal: { mode: managed } # optional (durable workflows)
14
+ postgres: { mode: managed } # mandatory
15
+ redis: { mode: managed } # mandatory
16
+ etcd: { mode: managed } # mandatory (service discovery)
17
+ keycloak: { mode: managed } # mandatory (identity)
18
+ objectStore: { mode: managed } # mandatory (blobs/artifacts)
19
+ search: { mode: managed } # optional (full-text / vectors)
20
+ fga: { mode: managed } # optional (authorization ReBAC)
21
+ git: { mode: disabled } # optional (SCM integration)
22
+ temporal: { mode: managed } # optional (durable workflows)
23
23
  # Example BYO:
24
+ # postgres: { mode: external, url: postgresql://xema@db.example.com:5432, secretRef: postgres-password }
24
25
  # keycloak: { mode: external, url: https://sso.example.com/realms/xema, realm: xema }
25
- # objectStore: { mode: external, url: https://s3.example.com, secretRef: my-s3 }
26
+ # objectStore: { mode: external, url: https://s3.example.com }
26
27
 
27
28
  # ── application services ─────────────────────────────────────────────────────
28
29
  app:
29
- substrate: container # container | native | helm
30
- processModel: distributed # distributed (microservices, etcd discovery) — the only supported model
31
- include: [ all ] # all | tier names (kernel/system/base/platform) | service names
32
- exclude: [] # service names to drop
33
- features: [] # curated capability bundles (union with include)
30
+ substrate: container # container | native | helm
31
+ processModel: distributed # distributed (microservices, etcd discovery) — the only supported model
32
+ include: default # default (skips distribution-optional biomes) | all | list of tier names (kernel/system/base/platform/edge) and/or service names
33
+ exclude: [] # service names to drop
34
+ features: [] # curated capability bundles (union with include)
34
35
  web:
35
- enabled: false # start the host-shell frontend (or use `xema up --web`)
36
+ enabled: false # start the host-shell frontend (or use `xema up --web`)
36
37
 
37
38
  # ── persistence ──────────────────────────────────────────────────────────────
38
39
  state:
39
40
  workspaces:
40
- driver: docker_local # docker_local (container) | host_path (native)
41
+ driver: docker_local # docker_local (container) | host_path (native)
41
42
 
42
43
  # ── secrets the launcher must obtain (never dev-defaulted in production) ──────
43
44
  secrets:
44
45
  OPENCODE_SERVER_PASSWORD: { from: prompt }
46
+ # postgres-password: { from: env, env: XEMA_POSTGRES_PASSWORD }
47
+ # S3_ACCESS_KEY_ID: { from: env }
48
+ # S3_SECRET_ACCESS_KEY: { from: env }
45
49
  # DELEGATED_SESSION_JWT_PRIVATE_KEY: { from: file, path: ./keys/session.pem }
46
50
  # LLM_PROVIDER_ANTHROPIC_API_KEY: { from: env }