container-superposition 0.1.7 → 0.1.9

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 (242) hide show
  1. package/README.md +24 -15
  2. package/dist/scripts/init.js +1 -1537
  3. package/dist/scripts/init.js.map +1 -1
  4. package/dist/tool/cli/args.d.ts +20 -0
  5. package/dist/tool/cli/args.d.ts.map +1 -0
  6. package/dist/tool/cli/args.js +325 -0
  7. package/dist/tool/cli/args.js.map +1 -0
  8. package/dist/tool/cli/run.d.ts +2 -0
  9. package/dist/tool/cli/run.d.ts.map +1 -0
  10. package/dist/tool/cli/run.js +318 -0
  11. package/dist/tool/cli/run.js.map +1 -0
  12. package/dist/tool/commands/adopt.js +1 -1
  13. package/dist/tool/commands/adopt.js.map +1 -1
  14. package/dist/tool/commands/doctor.d.ts +1 -0
  15. package/dist/tool/commands/doctor.d.ts.map +1 -1
  16. package/dist/tool/commands/doctor.js +1510 -78
  17. package/dist/tool/commands/doctor.js.map +1 -1
  18. package/dist/tool/commands/explain.d.ts.map +1 -1
  19. package/dist/tool/commands/explain.js +9 -0
  20. package/dist/tool/commands/explain.js.map +1 -1
  21. package/dist/tool/commands/migrate.d.ts +7 -0
  22. package/dist/tool/commands/migrate.d.ts.map +1 -0
  23. package/dist/tool/commands/migrate.js +52 -0
  24. package/dist/tool/commands/migrate.js.map +1 -0
  25. package/dist/tool/questionnaire/answers.d.ts +16 -0
  26. package/dist/tool/questionnaire/answers.d.ts.map +1 -0
  27. package/dist/tool/questionnaire/answers.js +102 -0
  28. package/dist/tool/questionnaire/answers.js.map +1 -0
  29. package/dist/tool/questionnaire/composer.d.ts +6 -4
  30. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  31. package/dist/tool/questionnaire/composer.js +778 -45
  32. package/dist/tool/questionnaire/composer.js.map +1 -1
  33. package/dist/tool/questionnaire/presets.d.ts +60 -0
  34. package/dist/tool/questionnaire/presets.d.ts.map +1 -0
  35. package/dist/tool/questionnaire/presets.js +165 -0
  36. package/dist/tool/questionnaire/presets.js.map +1 -0
  37. package/dist/tool/questionnaire/questionnaire.d.ts +10 -0
  38. package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -0
  39. package/dist/tool/questionnaire/questionnaire.js +582 -0
  40. package/dist/tool/questionnaire/questionnaire.js.map +1 -0
  41. package/dist/tool/schema/manifest-migrations.d.ts +5 -0
  42. package/dist/tool/schema/manifest-migrations.d.ts.map +1 -1
  43. package/dist/tool/schema/manifest-migrations.js +45 -0
  44. package/dist/tool/schema/manifest-migrations.js.map +1 -1
  45. package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
  46. package/dist/tool/schema/overlay-loader.js +24 -0
  47. package/dist/tool/schema/overlay-loader.js.map +1 -1
  48. package/dist/tool/schema/project-config.d.ts +13 -1
  49. package/dist/tool/schema/project-config.d.ts.map +1 -1
  50. package/dist/tool/schema/project-config.js +188 -10
  51. package/dist/tool/schema/project-config.js.map +1 -1
  52. package/dist/tool/schema/target-rules.d.ts +78 -0
  53. package/dist/tool/schema/target-rules.d.ts.map +1 -0
  54. package/dist/tool/schema/target-rules.js +367 -0
  55. package/dist/tool/schema/target-rules.js.map +1 -0
  56. package/dist/tool/schema/types.d.ts +42 -3
  57. package/dist/tool/schema/types.d.ts.map +1 -1
  58. package/dist/tool/utils/parameters.d.ts +76 -0
  59. package/dist/tool/utils/parameters.d.ts.map +1 -0
  60. package/dist/tool/utils/parameters.js +125 -0
  61. package/dist/tool/utils/parameters.js.map +1 -0
  62. package/dist/tool/utils/paths.d.ts +2 -0
  63. package/dist/tool/utils/paths.d.ts.map +1 -0
  64. package/dist/tool/utils/paths.js +31 -0
  65. package/dist/tool/utils/paths.js.map +1 -0
  66. package/docs/deployment-targets.md +88 -56
  67. package/docs/examples.md +20 -17
  68. package/docs/filesystem-contract.md +5 -0
  69. package/docs/minimal-and-editor.md +65 -5
  70. package/docs/overlay-imports.md +92 -14
  71. package/docs/overlays.md +231 -135
  72. package/docs/specs/001-verbose-plan-graph/spec.md +5 -12
  73. package/docs/specs/002-superposition-config-file/spec.md +5 -12
  74. package/docs/specs/003-mkdocs2-overlay/spec.md +2 -9
  75. package/docs/specs/004-doctor-fix/spec.md +1 -8
  76. package/docs/specs/005-cuda-overlay/spec.md +2 -9
  77. package/docs/specs/006-rocm-overlay/spec.md +3 -10
  78. package/docs/specs/007-target-aware-generation/spec.md +119 -0
  79. package/docs/specs/008-project-file-canonical/spec.md +82 -0
  80. package/docs/specs/009-project-env/spec.md +140 -0
  81. package/docs/specs/010-compose-env-materialization/spec.md +123 -0
  82. package/docs/specs/011-overlay-parameters/spec.md +228 -0
  83. package/docs/specs/012-ollama-cli-overlay/spec.md +47 -0
  84. package/docs/specs/013-doctor-dependency-check/spec.md +250 -0
  85. package/docs/specs/014-doctor-compose-port-cross-validation/spec.md +276 -0
  86. package/docs/specs/015-doctor-env-example-drift/spec.md +248 -0
  87. package/docs/specs/016-doctor-reproducibility-check/spec.md +276 -0
  88. package/docs/specs/017-doctor-dry-run/spec.md +276 -0
  89. package/docs/specs/018-init-project-file/spec.md +59 -0
  90. package/docs/specs/taxonomy.md +186 -0
  91. package/overlays/.presets/full-observability.yml +113 -0
  92. package/overlays/.presets/k8s-dev.yml +174 -0
  93. package/overlays/.presets/local-llm.yml +105 -0
  94. package/overlays/.presets/vector-ai.yml +150 -0
  95. package/overlays/.shared/README.md +27 -2
  96. package/overlays/.shared/compose/nvidia-gpu-devcontainer.yml +22 -0
  97. package/overlays/.shared/vscode/js-ts-settings.json +19 -0
  98. package/overlays/.shared/vscode/markdown-extensions.json +8 -0
  99. package/overlays/alertmanager/devcontainer.patch.json +0 -1
  100. package/overlays/alertmanager/docker-compose.yml +8 -0
  101. package/overlays/alertmanager/overlay.yml +1 -0
  102. package/overlays/amp/devcontainer.patch.json +4 -1
  103. package/overlays/bun/devcontainer.patch.json +1 -10
  104. package/overlays/bun/overlay.yml +8 -1
  105. package/overlays/claude-code/devcontainer.patch.json +6 -1
  106. package/overlays/codex/devcontainer.patch.json +5 -0
  107. package/overlays/comfyui/.env.example +34 -0
  108. package/overlays/comfyui/README.md +342 -0
  109. package/overlays/comfyui/devcontainer.patch.json +15 -0
  110. package/overlays/comfyui/docker-compose.yml +40 -0
  111. package/overlays/comfyui/overlay.yml +24 -0
  112. package/overlays/comfyui/setup.sh +36 -0
  113. package/overlays/comfyui/verify.sh +103 -0
  114. package/overlays/commitlint/devcontainer.patch.json +1 -6
  115. package/overlays/docker-sock/overlay.yml +1 -0
  116. package/overlays/dotnet/overlay.yml +4 -1
  117. package/overlays/fuseki/.env.example +5 -0
  118. package/overlays/fuseki/README.md +173 -0
  119. package/overlays/fuseki/devcontainer.patch.json +18 -0
  120. package/overlays/fuseki/docker-compose.yml +29 -0
  121. package/overlays/fuseki/overlay.yml +42 -0
  122. package/overlays/fuseki/verify.sh +58 -0
  123. package/overlays/gemini-cli/devcontainer.patch.json +4 -1
  124. package/overlays/go/overlay.yml +6 -1
  125. package/overlays/grafana/devcontainer.patch.json +0 -1
  126. package/overlays/grafana/docker-compose.yml +8 -2
  127. package/overlays/grafana/overlay.yml +6 -1
  128. package/overlays/jaeger/.env.example +11 -0
  129. package/overlays/jaeger/README.md +33 -4
  130. package/overlays/jaeger/devcontainer.patch.json +9 -1
  131. package/overlays/jaeger/docker-compose.yml +17 -0
  132. package/overlays/jaeger/overlay.yml +1 -12
  133. package/overlays/java/overlay.yml +6 -1
  134. package/overlays/jupyter/docker-compose.yml +1 -0
  135. package/overlays/jupyter/overlay.yml +1 -0
  136. package/overlays/k3d/README.md +201 -0
  137. package/overlays/k3d/devcontainer.patch.json +9 -0
  138. package/overlays/k3d/overlay.yml +19 -0
  139. package/overlays/k3d/setup.sh +34 -0
  140. package/overlays/k3d/verify.sh +38 -0
  141. package/overlays/keycloak/devcontainer.patch.json +0 -1
  142. package/overlays/keycloak/docker-compose.yml +1 -0
  143. package/overlays/keycloak/overlay.yml +15 -0
  144. package/overlays/localstack/docker-compose.yml +1 -0
  145. package/overlays/localstack/overlay.yml +19 -1
  146. package/overlays/loki/devcontainer.patch.json +0 -1
  147. package/overlays/loki/docker-compose.yml +8 -0
  148. package/overlays/loki/overlay.yml +1 -0
  149. package/overlays/mailpit/docker-compose.yml +1 -0
  150. package/overlays/mailpit/overlay.yml +1 -0
  151. package/overlays/minio/devcontainer.patch.json +1 -1
  152. package/overlays/minio/docker-compose.yml +1 -0
  153. package/overlays/minio/overlay.yml +23 -2
  154. package/overlays/mkdocs/devcontainer.patch.json +1 -5
  155. package/overlays/mkdocs/overlay.yml +3 -1
  156. package/overlays/mkdocs2/devcontainer.patch.json +1 -5
  157. package/overlays/mkdocs2/overlay.yml +2 -0
  158. package/overlays/mongodb/docker-compose.yml +2 -0
  159. package/overlays/mongodb/overlay.yml +26 -2
  160. package/overlays/mysql/docker-compose.yml +2 -0
  161. package/overlays/mysql/overlay.yml +36 -2
  162. package/overlays/nats/docker-compose.yml +1 -0
  163. package/overlays/nats/overlay.yml +18 -2
  164. package/overlays/nodejs/devcontainer.patch.json +1 -12
  165. package/overlays/nodejs/overlay.yml +8 -1
  166. package/overlays/ollama/.env.example +14 -0
  167. package/overlays/ollama/README.md +326 -0
  168. package/overlays/ollama/devcontainer.patch.json +14 -0
  169. package/overlays/ollama/docker-compose.yml +25 -0
  170. package/overlays/ollama/overlay.yml +27 -0
  171. package/overlays/ollama/verify.sh +76 -0
  172. package/overlays/ollama-cli/README.md +90 -0
  173. package/overlays/ollama-cli/devcontainer.patch.json +3 -0
  174. package/overlays/ollama-cli/overlay.yml +19 -0
  175. package/overlays/ollama-cli/setup.sh +103 -0
  176. package/overlays/ollama-cli/verify.sh +49 -0
  177. package/overlays/open-webui/.env.example +5 -0
  178. package/overlays/open-webui/README.md +162 -0
  179. package/overlays/open-webui/devcontainer.patch.json +14 -0
  180. package/overlays/open-webui/docker-compose.yml +24 -0
  181. package/overlays/open-webui/overlay.yml +45 -0
  182. package/overlays/opencode/devcontainer.patch.json +4 -1
  183. package/overlays/otel-collector/README.md +4 -0
  184. package/overlays/otel-collector/devcontainer.patch.json +4 -1
  185. package/overlays/otel-collector/docker-compose.yml +8 -4
  186. package/overlays/otel-collector/overlay.yml +1 -0
  187. package/overlays/otel-demo-nodejs/devcontainer.patch.json +0 -1
  188. package/overlays/otel-demo-nodejs/docker-compose.yml +1 -0
  189. package/overlays/otel-demo-nodejs/overlay.yml +9 -1
  190. package/overlays/otel-demo-python/devcontainer.patch.json +0 -1
  191. package/overlays/otel-demo-python/docker-compose.yml +1 -0
  192. package/overlays/otel-demo-python/overlay.yml +6 -1
  193. package/overlays/pandoc/README.md +10 -0
  194. package/overlays/pandoc/devcontainer.patch.json +0 -5
  195. package/overlays/pandoc/overlay.yml +2 -0
  196. package/overlays/pandoc/setup.sh +10 -0
  197. package/overlays/pgvector/.env.example +6 -0
  198. package/overlays/pgvector/README.md +215 -0
  199. package/overlays/pgvector/devcontainer.patch.json +29 -0
  200. package/overlays/pgvector/docker-compose.yml +33 -0
  201. package/overlays/pgvector/overlay.yml +47 -0
  202. package/overlays/playwright/devcontainer.patch.json +0 -5
  203. package/overlays/playwright/overlay.yml +2 -1
  204. package/overlays/postgres/.env.example +5 -5
  205. package/overlays/postgres/devcontainer.patch.json +4 -4
  206. package/overlays/postgres/docker-compose.yml +11 -6
  207. package/overlays/postgres/overlay.yml +23 -2
  208. package/overlays/pre-commit/devcontainer.patch.json +1 -7
  209. package/overlays/prometheus/devcontainer.patch.json +0 -1
  210. package/overlays/prometheus/docker-compose.yml +8 -0
  211. package/overlays/prometheus/overlay.yml +1 -0
  212. package/overlays/promtail/devcontainer.patch.json +1 -2
  213. package/overlays/promtail/docker-compose.yml +8 -0
  214. package/overlays/promtail/overlay.yml +1 -0
  215. package/overlays/qdrant/.env.example +4 -0
  216. package/overlays/qdrant/README.md +216 -0
  217. package/overlays/qdrant/devcontainer.patch.json +20 -0
  218. package/overlays/qdrant/docker-compose.yml +26 -0
  219. package/overlays/qdrant/overlay.yml +44 -0
  220. package/overlays/rabbitmq/docker-compose.yml +1 -0
  221. package/overlays/rabbitmq/overlay.yml +25 -2
  222. package/overlays/redis/docker-compose.yml +7 -0
  223. package/overlays/redis/overlay.yml +15 -1
  224. package/overlays/redpanda/docker-compose.yml +1 -0
  225. package/overlays/redpanda/overlay.yml +15 -3
  226. package/overlays/rocm/overlay.yml +2 -1
  227. package/overlays/rust/overlay.yml +3 -1
  228. package/overlays/skaffold/README.md +256 -0
  229. package/overlays/skaffold/devcontainer.patch.json +9 -0
  230. package/overlays/skaffold/overlay.yml +20 -0
  231. package/overlays/skaffold/setup.sh +33 -0
  232. package/overlays/skaffold/verify.sh +24 -0
  233. package/overlays/sqlserver/docker-compose.yml +1 -0
  234. package/overlays/sqlserver/overlay.yml +17 -0
  235. package/overlays/tempo/devcontainer.patch.json +0 -1
  236. package/overlays/tempo/docker-compose.yml +8 -0
  237. package/overlays/tempo/overlay.yml +1 -0
  238. package/overlays/windsurf-cli/devcontainer.patch.json +4 -1
  239. package/package.json +3 -2
  240. package/tool/schema/config.schema.json +31 -1
  241. package/tool/schema/overlay-manifest.schema.json +33 -0
  242. package/overlays/.shared/otel/otel-base-config.yaml +0 -30
@@ -0,0 +1,582 @@
1
+ import * as path from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import chalk from 'chalk';
4
+ import boxen from 'boxen';
5
+ import { select, checkbox, input, password } from '@inquirer/prompts';
6
+ import { loadOverlaysConfig } from '../schema/overlay-loader.js';
7
+ import { getIncompatibleOverlays, DEPLOYMENT_TARGETS } from '../schema/deployment-targets.js';
8
+ import { collectOverlayParameters } from '../utils/parameters.js';
9
+ import { resolveRepoPath } from '../utils/paths.js';
10
+ import { expandPreset } from './presets.js';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
13
+ // Anchor two levels up: tool/questionnaire/ → tool/ → repo root (source)
14
+ // or dist/tool/questionnaire/ → dist/tool/ → ... (compiled).
15
+ // resolveRepoPath walks up additional levels so overlays/ is found in both layouts.
16
+ const REPO_ANCHOR = path.join(__dirname, '../..');
17
+ const OVERLAYS_DIR = resolveRepoPath('overlays', REPO_ANCHOR);
18
+ const OVERLAYS_CONFIG_PATH = resolveRepoPath(path.join('overlays', 'index.yml'), REPO_ANCHOR);
19
+ const PRESETS_DIR = resolveRepoPath(path.join('overlays', '.presets'), REPO_ANCHOR);
20
+ export function loadOverlaysConfigWrapper() {
21
+ return loadOverlaysConfig(OVERLAYS_DIR, OVERLAYS_CONFIG_PATH);
22
+ }
23
+ export { OVERLAYS_DIR, PRESETS_DIR };
24
+ /**
25
+ * Build checkbox choices for overlay selection with optional pre-selection
26
+ */
27
+ function buildOverlayChoices(config, stack, categoryList, preselected) {
28
+ const choices = [];
29
+ categoryList.forEach((category) => {
30
+ const filtered = category.overlays.filter((o) => !o.hidden && (!o.supports || o.supports.length === 0 || o.supports.includes(stack)));
31
+ if (filtered.length > 0) {
32
+ choices.push({
33
+ type: 'separator',
34
+ separator: chalk.cyan(`──── ${category.name} ────`),
35
+ });
36
+ filtered.forEach((overlay) => {
37
+ choices.push({
38
+ name: overlay.name,
39
+ value: overlay.id,
40
+ description: overlay.description,
41
+ checked: preselected.includes(overlay.id),
42
+ });
43
+ });
44
+ }
45
+ });
46
+ return choices;
47
+ }
48
+ // ─── Questionnaire section helpers ───────────────────────────────────────────
49
+ async function askPresetSection(config, cliPresetId, manifest, cliPresetChoices) {
50
+ let usePreset = false;
51
+ let selectedPresetId = cliPresetId || manifest?.preset;
52
+ let presetChoices = {
53
+ ...(manifest?.presetChoices || {}),
54
+ ...cliPresetChoices,
55
+ };
56
+ const presetOverlaysFiltered = config.overlays.filter((o) => o.category === 'preset');
57
+ if (presetOverlaysFiltered.length > 0) {
58
+ if (selectedPresetId) {
59
+ usePreset = true;
60
+ console.log(chalk.cyan(`\n📦 Using preset: ${selectedPresetId}\n`));
61
+ }
62
+ else {
63
+ const presetChoice = (await select({
64
+ message: 'Start from a preset or build custom?',
65
+ choices: [
66
+ {
67
+ name: 'Custom (select overlays manually)',
68
+ value: 'custom',
69
+ description: 'Choose individual overlays yourself',
70
+ },
71
+ ...presetOverlaysFiltered.map((p) => ({
72
+ name: p.name,
73
+ value: p.id,
74
+ description: p.description,
75
+ })),
76
+ ],
77
+ default: 'custom',
78
+ }));
79
+ if (presetChoice !== 'custom') {
80
+ usePreset = true;
81
+ selectedPresetId = presetChoice;
82
+ }
83
+ else {
84
+ presetChoices = {};
85
+ selectedPresetId = undefined;
86
+ }
87
+ }
88
+ }
89
+ return { usePreset, selectedPresetId, presetChoices };
90
+ }
91
+ async function askStackSection(config, manifest, defaultAnswers) {
92
+ return (await select({
93
+ message: 'Select base template:',
94
+ choices: config.base_templates.map((t) => ({
95
+ name: t.name,
96
+ value: t.id,
97
+ description: t.description,
98
+ })),
99
+ default: manifest?.baseTemplate || defaultAnswers?.stack,
100
+ }));
101
+ }
102
+ async function expandPresetSection(usePreset, selectedPresetId, stack, presetChoices) {
103
+ if (!usePreset || !selectedPresetId) {
104
+ return {
105
+ usePreset,
106
+ selectedPresetId,
107
+ presetOverlays: [],
108
+ presetChoices,
109
+ presetGlueConfig: undefined,
110
+ };
111
+ }
112
+ console.log(chalk.cyan(`\n📦 Expanding preset: ${selectedPresetId}\n`));
113
+ const interactiveResolver = async (_key, prompt, options, defaultOption) => {
114
+ return (await select({
115
+ message: prompt,
116
+ choices: options.map((opt) => ({ name: opt, value: opt })),
117
+ default: defaultOption,
118
+ }));
119
+ };
120
+ const expansion = await expandPreset(selectedPresetId, stack, PRESETS_DIR, presetChoices, interactiveResolver);
121
+ if (!expansion.overlays || expansion.overlays.length === 0) {
122
+ console.log(chalk.yellow(`\n⚠️ Preset "${selectedPresetId}" could not be applied. Falling back to custom overlay selection.\n`));
123
+ return {
124
+ usePreset: false,
125
+ selectedPresetId: undefined,
126
+ presetOverlays: [],
127
+ presetChoices: {},
128
+ presetGlueConfig: undefined,
129
+ };
130
+ }
131
+ return {
132
+ usePreset: true,
133
+ selectedPresetId,
134
+ presetOverlays: expansion.overlays,
135
+ presetChoices: expansion.choices,
136
+ presetGlueConfig: expansion.glueConfig,
137
+ };
138
+ }
139
+ async function askBaseImageSection(config, manifest, defaultAnswers) {
140
+ const knownBaseImageIds = config.base_images.map((img) => img.id);
141
+ const manifestBaseImageIsKnown = manifest?.baseImage && knownBaseImageIds.includes(manifest.baseImage);
142
+ const manifestDefaultBaseImage = manifestBaseImageIsKnown
143
+ ? manifest.baseImage
144
+ : manifest?.baseImage
145
+ ? 'custom'
146
+ : undefined;
147
+ const defaultBaseImage = manifestDefaultBaseImage ||
148
+ (defaultAnswers?.baseImage === 'custom' && defaultAnswers.customImage
149
+ ? 'custom'
150
+ : defaultAnswers?.baseImage);
151
+ const baseImage = (await select({
152
+ message: 'Select base image:',
153
+ choices: config.base_images.map((img) => ({
154
+ name: img.name,
155
+ value: img.id,
156
+ description: img.description,
157
+ })),
158
+ default: defaultBaseImage,
159
+ }));
160
+ let customImage;
161
+ if (baseImage === 'custom') {
162
+ const manifestCustomImage = !manifestBaseImageIsKnown && manifest?.baseImage ? manifest.baseImage : undefined;
163
+ const defaultCustomImage = manifestCustomImage || defaultAnswers?.customImage;
164
+ customImage = await input({
165
+ message: 'Enter custom Docker image (e.g., ubuntu:22.04):',
166
+ default: defaultCustomImage,
167
+ validate: (value) => {
168
+ if (!value || value.trim() === '')
169
+ return 'Image name is required';
170
+ return true;
171
+ },
172
+ });
173
+ console.log(chalk.yellow('\n⚠️ Warning: Custom images may conflict with overlays.'));
174
+ console.log(chalk.dim(' Test thoroughly and adjust configurations as needed.\n'));
175
+ }
176
+ return { baseImage, customImage };
177
+ }
178
+ async function askOverlaySection(config, stack, manifest, defaultAnswers, usePreset, presetOverlays) {
179
+ const categoryList = [
180
+ { name: 'Language', overlays: config.overlays.filter((o) => o.category === 'language') },
181
+ { name: 'Database', overlays: config.overlays.filter((o) => o.category === 'database') },
182
+ { name: 'Messaging', overlays: config.overlays.filter((o) => o.category === 'messaging') },
183
+ {
184
+ name: 'Observability',
185
+ overlays: config.overlays.filter((o) => o.category === 'observability'),
186
+ },
187
+ { name: 'Cloud', overlays: config.overlays.filter((o) => o.category === 'cloud') },
188
+ { name: 'DevTool', overlays: config.overlays.filter((o) => o.category === 'dev') },
189
+ ];
190
+ const allOverlaysMap = new Map(config.overlays.map((o) => [o.id, o]));
191
+ let userSelection;
192
+ if (usePreset && presetOverlays.length > 0) {
193
+ console.log(chalk.cyan(`\n✓ Preset includes these overlays: ${presetOverlays.join(', ')}\n`));
194
+ const customizePreset = (await select({
195
+ message: 'Do you want to customize the overlay selection?',
196
+ choices: [
197
+ {
198
+ name: 'Use preset as-is',
199
+ value: 'no',
200
+ description: 'Keep the preset overlay selection',
201
+ },
202
+ {
203
+ name: 'Customize selection',
204
+ value: 'yes',
205
+ description: 'Add or remove overlays from the preset',
206
+ },
207
+ ],
208
+ }));
209
+ if (customizePreset === 'yes') {
210
+ console.log(chalk.dim('\n💡 Select overlays: Space to toggle, ↑/↓ to navigate, Enter to confirm'));
211
+ console.log(chalk.dim(' Preset overlays are pre-selected\n'));
212
+ userSelection = await checkbox({
213
+ message: 'Select overlays to include:',
214
+ choices: buildOverlayChoices(config, stack, categoryList, presetOverlays),
215
+ pageSize: 15,
216
+ loop: false,
217
+ });
218
+ }
219
+ else {
220
+ userSelection = presetOverlays;
221
+ }
222
+ }
223
+ else if (manifest) {
224
+ console.log(chalk.cyan(`\n✓ Manifest includes these overlays: ${manifest.overlays.join(', ')}\n`));
225
+ const customizeManifest = (await select({
226
+ message: 'Do you want to customize the overlay selection?',
227
+ choices: [
228
+ {
229
+ name: 'Use manifest as-is',
230
+ value: 'no',
231
+ description: 'Keep the manifest overlay selection',
232
+ },
233
+ {
234
+ name: 'Customize selection',
235
+ value: 'yes',
236
+ description: 'Add or remove overlays from the manifest',
237
+ },
238
+ ],
239
+ }));
240
+ const existingOverlays = manifest.overlays.filter((id) => allOverlaysMap.has(id));
241
+ const missingOverlays = manifest.overlays.filter((id) => !allOverlaysMap.has(id));
242
+ if (customizeManifest === 'yes') {
243
+ if (missingOverlays.length > 0) {
244
+ console.log(chalk.yellow(`⚠️ Warning: Some overlays from manifest no longer exist: ${missingOverlays.join(', ')}\n`));
245
+ }
246
+ console.log(chalk.dim('\n💡 Select overlays: Space to toggle, ↑/↓ to navigate, Enter to confirm'));
247
+ console.log(chalk.dim(' Manifest overlays are pre-selected\n'));
248
+ userSelection = await checkbox({
249
+ message: 'Select overlays to include:',
250
+ choices: buildOverlayChoices(config, stack, categoryList, existingOverlays),
251
+ pageSize: 15,
252
+ loop: false,
253
+ });
254
+ }
255
+ else {
256
+ if (missingOverlays.length > 0) {
257
+ console.log(chalk.yellow(`⚠️ Warning: Some overlays from manifest no longer exist and will be skipped: ${missingOverlays.join(', ')}\n`));
258
+ }
259
+ userSelection = existingOverlays;
260
+ }
261
+ }
262
+ else {
263
+ console.log(chalk.dim('\n💡 Select overlays: Space to toggle, ↑/↓ to navigate, Enter to confirm\n'));
264
+ const preselectedDefaults = [
265
+ ...(defaultAnswers?.language ?? []),
266
+ ...(defaultAnswers?.database ?? []),
267
+ ...(defaultAnswers?.observability ?? []),
268
+ ...(defaultAnswers?.cloudTools ?? []),
269
+ ...(defaultAnswers?.devTools ?? []),
270
+ ...(defaultAnswers?.playwright ? ['playwright'] : []),
271
+ ];
272
+ userSelection = await checkbox({
273
+ message: 'Select overlays to include:',
274
+ choices: buildOverlayChoices(config, stack, categoryList, preselectedDefaults),
275
+ pageSize: 15,
276
+ loop: false,
277
+ });
278
+ }
279
+ // Resolve dependencies
280
+ const withDependencies = new Set(userSelection);
281
+ const toProcess = [...userSelection];
282
+ while (toProcess.length > 0) {
283
+ const current = toProcess.pop();
284
+ const overlay = allOverlaysMap.get(current);
285
+ if (overlay?.requires) {
286
+ overlay.requires.forEach((req) => {
287
+ if (!withDependencies.has(req)) {
288
+ withDependencies.add(req);
289
+ toProcess.push(req);
290
+ }
291
+ });
292
+ }
293
+ }
294
+ let selectedOverlays = Array.from(withDependencies);
295
+ // Resolve conflicts
296
+ let hasConflicts = true;
297
+ while (hasConflicts) {
298
+ const conflicts = new Map();
299
+ selectedOverlays.forEach((selectedId) => {
300
+ const overlay = allOverlaysMap.get(selectedId);
301
+ if (overlay?.conflicts) {
302
+ overlay.conflicts.forEach((conflictId) => {
303
+ if (selectedOverlays.includes(conflictId)) {
304
+ if (!conflicts.has(selectedId))
305
+ conflicts.set(selectedId, []);
306
+ conflicts.get(selectedId).push(conflictId);
307
+ }
308
+ });
309
+ }
310
+ });
311
+ if (conflicts.size === 0) {
312
+ hasConflicts = false;
313
+ }
314
+ else {
315
+ console.log(chalk.yellow('\n⚠️ Conflicts detected in selection:\n'));
316
+ const conflictChoices = [];
317
+ conflicts.forEach((conflictingWith, overlayId) => {
318
+ const overlay = allOverlaysMap.get(overlayId);
319
+ const conflictNames = conflictingWith
320
+ .map((id) => allOverlaysMap.get(id)?.name)
321
+ .join(', ');
322
+ conflictChoices.push({
323
+ name: `Remove ${overlay.name}`,
324
+ value: overlayId,
325
+ description: `Conflicts with: ${conflictNames}`,
326
+ });
327
+ });
328
+ const toRemove = await checkbox({
329
+ message: 'Select overlays to remove to resolve conflicts:',
330
+ choices: conflictChoices,
331
+ pageSize: 15,
332
+ loop: false,
333
+ });
334
+ if (toRemove.length === 0) {
335
+ console.log(chalk.red('\n❌ You must remove at least one conflicting overlay'));
336
+ continue;
337
+ }
338
+ selectedOverlays = selectedOverlays.filter((id) => !toRemove.includes(id));
339
+ }
340
+ }
341
+ return selectedOverlays;
342
+ }
343
+ async function askOutputSection(manifest, manifestDir, defaultAnswers) {
344
+ const containerName = await input({
345
+ message: 'Container/project name (optional):',
346
+ default: manifest?.containerName || defaultAnswers?.containerName || '',
347
+ });
348
+ const defaultOutput = manifestDir || defaultAnswers?.outputPath || './.devcontainer';
349
+ const outputPath = await input({
350
+ message: 'Output path:',
351
+ default: defaultOutput,
352
+ });
353
+ const portOffsetInput = await input({
354
+ message: 'Port offset (leave empty for default ports, e.g., 100 to avoid conflicts):',
355
+ default: manifest?.portOffset !== undefined
356
+ ? String(manifest.portOffset)
357
+ : defaultAnswers?.portOffset !== undefined
358
+ ? String(defaultAnswers.portOffset)
359
+ : '',
360
+ });
361
+ const portOffset = portOffsetInput ? parseInt(portOffsetInput, 10) : undefined;
362
+ return { containerName: containerName || undefined, outputPath, portOffset };
363
+ }
364
+ async function askEditorSection(manifest, defaultAnswers) {
365
+ const defaultEditor = manifest?.editor || defaultAnswers?.editor || 'vscode';
366
+ return (await select({
367
+ message: 'Editor profile:',
368
+ choices: [
369
+ {
370
+ name: 'VS Code (default)',
371
+ value: 'vscode',
372
+ description: 'Include VS Code extensions and settings',
373
+ },
374
+ {
375
+ name: 'JetBrains (IntelliJ IDEA, GoLand, PyCharm, Rider…)',
376
+ value: 'jetbrains',
377
+ description: 'Generate .idea/ project settings and run configurations, skip VS Code customizations',
378
+ },
379
+ {
380
+ name: 'None (editor-agnostic)',
381
+ value: 'none',
382
+ description: 'Remove all editor-specific customizations',
383
+ },
384
+ ],
385
+ default: defaultEditor,
386
+ }));
387
+ }
388
+ async function askDeploymentTargetSection(selectedOverlays, allOverlaysMap) {
389
+ const incompatibleOverlays = getIncompatibleOverlays(selectedOverlays, undefined);
390
+ if (incompatibleOverlays.length === 0)
391
+ return undefined;
392
+ console.log(chalk.yellow('\n⚠️ Deployment Target Compatibility Check:\n'));
393
+ console.log(chalk.gray('Some selected overlays may not work in all environments.'));
394
+ console.log();
395
+ for (const { overlay, alternatives } of incompatibleOverlays) {
396
+ const overlayMeta = allOverlaysMap.get(overlay);
397
+ console.log(chalk.yellow(` • ${overlayMeta?.name || overlay}`));
398
+ console.log(chalk.gray(` Not compatible with: ${DEPLOYMENT_TARGETS.codespaces.name}, ${DEPLOYMENT_TARGETS.gitpod.name}`));
399
+ if (alternatives.length > 0) {
400
+ const altNames = alternatives
401
+ .map((id) => allOverlaysMap.get(id)?.name || id)
402
+ .join(', ');
403
+ console.log(chalk.cyan(` Alternatives: ${altNames}`));
404
+ }
405
+ console.log();
406
+ }
407
+ const target = (await select({
408
+ message: 'Which environment are you targeting?',
409
+ choices: [
410
+ {
411
+ name: '🖥️ Local Development (Docker Desktop)',
412
+ value: 'local',
413
+ description: 'Running on your local machine - supports all overlays',
414
+ },
415
+ {
416
+ name: '☁️ GitHub Codespaces',
417
+ value: 'codespaces',
418
+ description: 'Cloud development - may require docker-in-docker',
419
+ },
420
+ {
421
+ name: '🌐 Gitpod',
422
+ value: 'gitpod',
423
+ description: 'Cloud development - may require docker-in-docker',
424
+ },
425
+ {
426
+ name: '📦 DevPod',
427
+ value: 'devpod',
428
+ description: 'Client-only dev environments',
429
+ },
430
+ ],
431
+ default: 'local',
432
+ }));
433
+ if (target !== 'local') {
434
+ const targetIncompatible = getIncompatibleOverlays(selectedOverlays, target);
435
+ if (targetIncompatible.length > 0) {
436
+ console.log(chalk.yellow(`\n⚠️ Warning: Some overlays won't work in ${DEPLOYMENT_TARGETS[target].name}:\n`));
437
+ for (const { overlay, alternatives } of targetIncompatible) {
438
+ const overlayMeta = allOverlaysMap.get(overlay);
439
+ console.log(chalk.red(` ✗ ${overlayMeta?.name || overlay}`));
440
+ if (alternatives.length > 0) {
441
+ const altNames = alternatives
442
+ .map((id) => allOverlaysMap.get(id)?.name || id)
443
+ .join(', ');
444
+ console.log(chalk.cyan(` → Recommended: ${altNames}`));
445
+ }
446
+ }
447
+ console.log();
448
+ }
449
+ }
450
+ return target;
451
+ }
452
+ async function askOverlayParametersSection(allSelectedOverlays, config, defaultAnswers) {
453
+ const declaredParams = collectOverlayParameters(allSelectedOverlays, config.overlays);
454
+ const overlayParameters = {
455
+ ...(defaultAnswers?.overlayParameters ?? {}),
456
+ };
457
+ if (Object.keys(declaredParams).length === 0)
458
+ return overlayParameters;
459
+ console.log(chalk.cyan('\n⚙️ Configure overlay parameters:\n'));
460
+ for (const [key, def] of Object.entries(declaredParams)) {
461
+ const preFilledValue = overlayParameters[key];
462
+ const defaultValue = preFilledValue ?? def.default ?? '';
463
+ let value;
464
+ if (def.sensitive) {
465
+ value = await password({
466
+ message: `${key} — ${def.description}${defaultValue ? ` (default: hidden)` : ' (required)'}`,
467
+ mask: '*',
468
+ });
469
+ if (!value && def.default !== undefined) {
470
+ value = def.default;
471
+ }
472
+ }
473
+ else {
474
+ value = await input({
475
+ message: `${key} — ${def.description}`,
476
+ default: defaultValue || undefined,
477
+ });
478
+ }
479
+ if (!value && def.default === undefined) {
480
+ delete overlayParameters[key];
481
+ continue;
482
+ }
483
+ overlayParameters[key] = value;
484
+ }
485
+ return overlayParameters;
486
+ }
487
+ // ─────────────────────────────────────────────────────────────────────────────
488
+ /**
489
+ * Interactive questionnaire — thin orchestrator over the section helpers above.
490
+ */
491
+ export async function runQuestionnaire(manifest, manifestDir, cliPresetId, cliPresetChoices, defaultAnswers) {
492
+ const config = loadOverlaysConfigWrapper();
493
+ // Banner
494
+ console.log('\n' +
495
+ boxen(chalk.bold.cyan('Container Superposition') +
496
+ '\n' +
497
+ chalk.gray(manifest ? 'DevContainer Regenerator' : 'DevContainer Initializer'), {
498
+ padding: 1,
499
+ margin: 1,
500
+ borderStyle: 'round',
501
+ borderColor: 'cyan',
502
+ textAlignment: 'center',
503
+ }));
504
+ if (manifest) {
505
+ console.log(chalk.cyan('📋 Loaded from manifest:'));
506
+ console.log(chalk.dim(` Template: ${manifest.baseTemplate}`));
507
+ console.log(chalk.dim(` Overlays: ${manifest.overlays.join(', ')}`));
508
+ if (manifest.preset)
509
+ console.log(chalk.dim(` Preset: ${manifest.preset}`));
510
+ if (manifest.portOffset)
511
+ console.log(chalk.dim(` Port offset: ${manifest.portOffset}`));
512
+ console.log();
513
+ }
514
+ console.log(chalk.dim('Compose your ideal devcontainer from modular overlays.'));
515
+ console.log(chalk.dim('Use ') +
516
+ chalk.cyan('space') +
517
+ chalk.dim(' to select, ') +
518
+ chalk.cyan('enter') +
519
+ chalk.dim(' to confirm.\n'));
520
+ try {
521
+ // 0. Preset selection
522
+ const presetResult = await askPresetSection(config, cliPresetId, manifest, cliPresetChoices ?? {});
523
+ // 1. Stack selection
524
+ const stack = await askStackSection(config, manifest, defaultAnswers);
525
+ // 1a. Expand preset (requires stack to be known first)
526
+ const { usePreset, selectedPresetId, presetOverlays, presetChoices, presetGlueConfig } = await expandPresetSection(presetResult.usePreset, presetResult.selectedPresetId, stack, presetResult.presetChoices);
527
+ // 2. Base image
528
+ const { baseImage, customImage } = await askBaseImageSection(config, manifest, defaultAnswers);
529
+ // 3. Overlay selection, dependency resolution, conflict resolution
530
+ const selectedOverlays = await askOverlaySection(config, stack, manifest, defaultAnswers, usePreset, presetOverlays);
531
+ // 4. Container name, output path, port offset
532
+ const { containerName, outputPath, portOffset } = await askOutputSection(manifest, manifestDir, defaultAnswers);
533
+ // 5. Editor profile
534
+ const editorChoice = await askEditorSection(manifest, defaultAnswers);
535
+ // Categorise selected overlays
536
+ const overlayMap = new Map(config.overlays.map((o) => [o.id, o]));
537
+ const language = selectedOverlays.filter((o) => overlayMap.get(o)?.category === 'language');
538
+ const database = selectedOverlays.filter((o) => overlayMap.get(o)?.category === 'database' ||
539
+ overlayMap.get(o)?.category === 'messaging');
540
+ const observability = selectedOverlays.filter((o) => overlayMap.get(o)?.category === 'observability');
541
+ const cloudTools = selectedOverlays.filter((o) => overlayMap.get(o)?.category === 'cloud');
542
+ const devTools = selectedOverlays.filter((o) => overlayMap.get(o)?.category === 'dev');
543
+ const playwright = selectedOverlays.includes('playwright');
544
+ // 6. Deployment target (only prompted when incompatibilities exist)
545
+ const allOverlaysMap = new Map(config.overlays.map((o) => [o.id, o]));
546
+ const target = await askDeploymentTargetSection(selectedOverlays, allOverlaysMap);
547
+ // 7. Overlay parameters (use the final selectedOverlays as source of truth)
548
+ const allSelectedOverlays = [...selectedOverlays];
549
+ const overlayParameters = await askOverlayParametersSection(allSelectedOverlays, config, defaultAnswers);
550
+ return {
551
+ stack,
552
+ baseImage,
553
+ customImage,
554
+ containerName,
555
+ preset: selectedPresetId,
556
+ presetChoices: Object.keys(presetChoices).length > 0 ? presetChoices : undefined,
557
+ presetGlueConfig,
558
+ language,
559
+ needsDocker: stack === 'compose',
560
+ database,
561
+ playwright,
562
+ cloudTools,
563
+ devTools,
564
+ observability,
565
+ outputPath,
566
+ portOffset,
567
+ target: target ?? defaultAnswers?.target,
568
+ minimal: defaultAnswers?.minimal,
569
+ editor: editorChoice,
570
+ customizations: defaultAnswers?.customizations,
571
+ overlayParameters: Object.keys(overlayParameters).length > 0 ? overlayParameters : undefined,
572
+ };
573
+ }
574
+ catch (error) {
575
+ if (error.name === 'ExitPromptError') {
576
+ console.log('\n' + chalk.yellow('Cancelled by user'));
577
+ process.exit(0);
578
+ }
579
+ throw error;
580
+ }
581
+ }
582
+ //# sourceMappingURL=questionnaire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questionnaire.js","sourceRoot":"","sources":["../../../tool/questionnaire/questionnaire.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,11 @@ export declare function migrateManifest(manifest: any): SuperpositionManifest;
44
44
  * Check if a manifest needs migration
45
45
  */
46
46
  export declare function needsMigration(manifest: any): boolean;
47
+ /**
48
+ * Load and validate a superposition.json manifest file.
49
+ * Returns the (migrated) manifest or null if loading/validation fails.
50
+ */
51
+ export declare function loadManifest(manifestPath: string): SuperpositionManifest | null;
47
52
  /**
48
53
  * Get human-readable migration summary
49
54
  */
@@ -1 +1 @@
1
- {"version":3,"file":"manifest-migrations.d.ts","sourceRoot":"","sources":["../../../tool/schema/manifest-migrations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,2BAA2B,UAAQ,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,CAAC;CACnC;AAqBD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAc3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAyBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,qBAAqB,CAsDpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CASrD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAkBzD"}
1
+ {"version":3,"file":"manifest-migrations.d.ts","sourceRoot":"","sources":["../../../tool/schema/manifest-migrations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,2BAA2B,UAAQ,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,CAAC;CACnC;AAqBD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAc3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAyBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,qBAAqB,CAsDpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CASrD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CA2D/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAkBzD"}