container-superposition 0.1.6 → 0.1.8

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 (238) hide show
  1. package/README.md +24 -15
  2. package/dist/scripts/init.js +1 -1534
  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.d.ts.map +1 -1
  13. package/dist/tool/commands/adopt.js +1 -27
  14. package/dist/tool/commands/adopt.js.map +1 -1
  15. package/dist/tool/commands/doctor.d.ts +3 -0
  16. package/dist/tool/commands/doctor.d.ts.map +1 -1
  17. package/dist/tool/commands/doctor.js +1068 -70
  18. package/dist/tool/commands/doctor.js.map +1 -1
  19. package/dist/tool/commands/explain.d.ts.map +1 -1
  20. package/dist/tool/commands/explain.js +18 -0
  21. package/dist/tool/commands/explain.js.map +1 -1
  22. package/dist/tool/commands/migrate.d.ts +7 -0
  23. package/dist/tool/commands/migrate.d.ts.map +1 -0
  24. package/dist/tool/commands/migrate.js +52 -0
  25. package/dist/tool/commands/migrate.js.map +1 -0
  26. package/dist/tool/questionnaire/answers.d.ts +16 -0
  27. package/dist/tool/questionnaire/answers.d.ts.map +1 -0
  28. package/dist/tool/questionnaire/answers.js +102 -0
  29. package/dist/tool/questionnaire/answers.js.map +1 -0
  30. package/dist/tool/questionnaire/composer.d.ts +3 -3
  31. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  32. package/dist/tool/questionnaire/composer.js +902 -37
  33. package/dist/tool/questionnaire/composer.js.map +1 -1
  34. package/dist/tool/questionnaire/presets.d.ts +60 -0
  35. package/dist/tool/questionnaire/presets.d.ts.map +1 -0
  36. package/dist/tool/questionnaire/presets.js +164 -0
  37. package/dist/tool/questionnaire/presets.js.map +1 -0
  38. package/dist/tool/questionnaire/questionnaire.d.ts +10 -0
  39. package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -0
  40. package/dist/tool/questionnaire/questionnaire.js +580 -0
  41. package/dist/tool/questionnaire/questionnaire.js.map +1 -0
  42. package/dist/tool/schema/manifest-migrations.d.ts +5 -0
  43. package/dist/tool/schema/manifest-migrations.d.ts.map +1 -1
  44. package/dist/tool/schema/manifest-migrations.js +45 -0
  45. package/dist/tool/schema/manifest-migrations.js.map +1 -1
  46. package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
  47. package/dist/tool/schema/overlay-loader.js +25 -0
  48. package/dist/tool/schema/overlay-loader.js.map +1 -1
  49. package/dist/tool/schema/project-config.d.ts +14 -2
  50. package/dist/tool/schema/project-config.d.ts.map +1 -1
  51. package/dist/tool/schema/project-config.js +277 -34
  52. package/dist/tool/schema/project-config.js.map +1 -1
  53. package/dist/tool/schema/target-rules.d.ts +78 -0
  54. package/dist/tool/schema/target-rules.d.ts.map +1 -0
  55. package/dist/tool/schema/target-rules.js +367 -0
  56. package/dist/tool/schema/target-rules.js.map +1 -0
  57. package/dist/tool/schema/types.d.ts +123 -12
  58. package/dist/tool/schema/types.d.ts.map +1 -1
  59. package/dist/tool/utils/merge.d.ts.map +1 -1
  60. package/dist/tool/utils/merge.js +9 -0
  61. package/dist/tool/utils/merge.js.map +1 -1
  62. package/dist/tool/utils/parameters.d.ts +76 -0
  63. package/dist/tool/utils/parameters.d.ts.map +1 -0
  64. package/dist/tool/utils/parameters.js +125 -0
  65. package/dist/tool/utils/parameters.js.map +1 -0
  66. package/dist/tool/utils/paths.d.ts +2 -0
  67. package/dist/tool/utils/paths.d.ts.map +1 -0
  68. package/dist/tool/utils/paths.js +31 -0
  69. package/dist/tool/utils/paths.js.map +1 -0
  70. package/docs/creating-overlays.md +151 -2
  71. package/docs/deployment-targets.md +88 -56
  72. package/docs/examples.md +20 -17
  73. package/docs/filesystem-contract.md +5 -0
  74. package/docs/minimal-and-editor.md +65 -5
  75. package/docs/overlay-imports.md +202 -101
  76. package/docs/overlays.md +162 -34
  77. package/docs/quick-reference.md +99 -0
  78. package/docs/specs/003-mkdocs2-overlay/spec.md +114 -0
  79. package/docs/specs/004-doctor-fix/spec.md +70 -0
  80. package/docs/specs/005-cuda-overlay/spec.md +101 -0
  81. package/docs/specs/006-rocm-overlay/spec.md +109 -0
  82. package/docs/specs/007-init-project-file/spec.md +66 -0
  83. package/docs/specs/007-target-aware-generation/spec.md +126 -0
  84. package/docs/specs/008-project-file-canonical/spec.md +83 -0
  85. package/docs/specs/009-project-env/spec.md +147 -0
  86. package/docs/specs/010-compose-env-materialization/spec.md +130 -0
  87. package/docs/specs/011-overlay-parameters/spec.md +235 -0
  88. package/overlays/.shared/README.md +105 -21
  89. package/overlays/.shared/compose/common-healthchecks.md +60 -0
  90. package/overlays/.shared/compose/nvidia-gpu-devcontainer.yml +22 -0
  91. package/overlays/.shared/vscode/recommended-extensions.json +15 -11
  92. package/overlays/alertmanager/setup.sh +4 -19
  93. package/overlays/alertmanager/verify.sh +8 -9
  94. package/overlays/all/README.md +43 -0
  95. package/overlays/all/devcontainer.patch.json +6 -0
  96. package/overlays/all/overlay.yml +14 -0
  97. package/overlays/amp/setup.sh +5 -0
  98. package/overlays/bun/setup.sh +10 -1
  99. package/overlays/bun/verify.sh +6 -1
  100. package/overlays/claude-code/setup.sh +5 -0
  101. package/overlays/cloudflared/setup.sh +9 -12
  102. package/overlays/codex/README.md +9 -6
  103. package/overlays/codex/devcontainer.patch.json +7 -1
  104. package/overlays/codex/setup.sh +5 -0
  105. package/overlays/codex/verify.sh +8 -0
  106. package/overlays/comfyui/.env.example +34 -0
  107. package/overlays/comfyui/README.md +342 -0
  108. package/overlays/comfyui/devcontainer.patch.json +15 -0
  109. package/overlays/comfyui/docker-compose.yml +39 -0
  110. package/overlays/comfyui/overlay.yml +20 -0
  111. package/overlays/comfyui/setup.sh +36 -0
  112. package/overlays/comfyui/verify.sh +103 -0
  113. package/overlays/commitlint/setup.sh +5 -0
  114. package/overlays/cuda/README.md +179 -0
  115. package/overlays/cuda/devcontainer.patch.json +7 -0
  116. package/overlays/cuda/overlay.yml +17 -0
  117. package/overlays/cuda/setup.sh +32 -0
  118. package/overlays/cuda/verify.sh +38 -0
  119. package/overlays/devcontainer-cli/README.md +50 -0
  120. package/overlays/devcontainer-cli/devcontainer.patch.json +13 -0
  121. package/overlays/devcontainer-cli/overlay.yml +16 -0
  122. package/overlays/devcontainer-cli/setup.sh +14 -0
  123. package/overlays/direnv/devcontainer.patch.json +6 -0
  124. package/overlays/direnv/setup.sh +7 -6
  125. package/overlays/dotnet/setup.sh +14 -7
  126. package/overlays/duckdb/devcontainer.patch.json +1 -2
  127. package/overlays/gcloud/devcontainer.patch.json +0 -6
  128. package/overlays/gcloud/setup.sh +51 -0
  129. package/overlays/gemini-cli/setup.sh +5 -0
  130. package/overlays/git-helpers/devcontainer.patch.json +2 -1
  131. package/overlays/go/setup.sh +15 -14
  132. package/overlays/jaeger/overlay.yml +2 -0
  133. package/overlays/just/setup.sh +5 -17
  134. package/overlays/k3d/README.md +201 -0
  135. package/overlays/k3d/devcontainer.patch.json +9 -0
  136. package/overlays/k3d/overlay.yml +19 -0
  137. package/overlays/k3d/setup.sh +34 -0
  138. package/overlays/k3d/verify.sh +38 -0
  139. package/overlays/keycloak/docker-compose.yml +6 -4
  140. package/overlays/keycloak/verify.sh +4 -3
  141. package/overlays/kind/devcontainer.patch.json +1 -2
  142. package/overlays/kind/setup.sh +8 -17
  143. package/overlays/minio/setup.sh +10 -18
  144. package/overlays/mkdocs/overlay.yml +2 -1
  145. package/overlays/mkdocs2/README.md +135 -0
  146. package/overlays/mkdocs2/devcontainer.patch.json +19 -0
  147. package/overlays/mkdocs2/overlay.yml +17 -0
  148. package/overlays/mkdocs2/setup.sh +67 -0
  149. package/overlays/mkdocs2/verify.sh +35 -0
  150. package/overlays/modern-cli-tools/devcontainer.patch.json +7 -1
  151. package/overlays/modern-cli-tools/setup.sh +21 -71
  152. package/overlays/mongodb/devcontainer.patch.json +0 -6
  153. package/overlays/mongodb/setup.sh +59 -0
  154. package/overlays/mysql/verify.sh +4 -3
  155. package/overlays/nats/.env.example +1 -1
  156. package/overlays/nats/README.md +1 -1
  157. package/overlays/nats/docker-compose.yml +1 -1
  158. package/overlays/ngrok/setup.sh +9 -6
  159. package/overlays/nodejs/setup.sh +5 -0
  160. package/overlays/ollama/.env.example +14 -0
  161. package/overlays/ollama/README.md +325 -0
  162. package/overlays/ollama/devcontainer.patch.json +14 -0
  163. package/overlays/ollama/docker-compose.yml +24 -0
  164. package/overlays/ollama/overlay.yml +22 -0
  165. package/overlays/ollama/setup.sh +106 -0
  166. package/overlays/ollama/verify.sh +99 -0
  167. package/overlays/open-webui/.env.example +5 -0
  168. package/overlays/open-webui/README.md +162 -0
  169. package/overlays/open-webui/devcontainer.patch.json +14 -0
  170. package/overlays/open-webui/docker-compose.yml +23 -0
  171. package/overlays/open-webui/overlay.yml +38 -0
  172. package/overlays/openapi-tools/devcontainer.patch.json +1 -2
  173. package/overlays/openapi-tools/setup.sh +9 -8
  174. package/overlays/opencode/setup.sh +5 -0
  175. package/overlays/otel-collector/overlay.yml +2 -0
  176. package/overlays/otel-collector/setup.sh +3 -16
  177. package/overlays/otel-demo-nodejs/verify.sh +8 -9
  178. package/overlays/otel-demo-python/verify.sh +16 -10
  179. package/overlays/pandoc/README.md +22 -15
  180. package/overlays/pandoc/devcontainer.patch.json +6 -2
  181. package/overlays/pandoc/setup.sh +217 -18
  182. package/overlays/pandoc/verify.sh +16 -4
  183. package/overlays/pgvector/.env.example +6 -0
  184. package/overlays/pgvector/README.md +215 -0
  185. package/overlays/pgvector/devcontainer.patch.json +23 -0
  186. package/overlays/pgvector/docker-compose.yml +32 -0
  187. package/overlays/pgvector/overlay.yml +44 -0
  188. package/overlays/playwright/devcontainer.patch.json +3 -1
  189. package/overlays/playwright/setup.sh +37 -0
  190. package/overlays/postgres/.env.example +5 -5
  191. package/overlays/postgres/devcontainer.patch.json +4 -4
  192. package/overlays/postgres/docker-compose.yml +15 -5
  193. package/overlays/postgres/overlay.yml +19 -1
  194. package/overlays/powershell/setup.sh +49 -13
  195. package/overlays/pre-commit/setup.sh +12 -3
  196. package/overlays/prometheus/overlay.yml +2 -0
  197. package/overlays/promtail/verify.sh +16 -10
  198. package/overlays/pulumi/devcontainer.patch.json +1 -1
  199. package/overlays/python/setup.sh +28 -9
  200. package/overlays/python/verify.sh +4 -2
  201. package/overlays/qdrant/.env.example +4 -0
  202. package/overlays/qdrant/README.md +216 -0
  203. package/overlays/qdrant/devcontainer.patch.json +20 -0
  204. package/overlays/qdrant/docker-compose.yml +25 -0
  205. package/overlays/qdrant/overlay.yml +40 -0
  206. package/overlays/redpanda/docker-compose.yml +3 -5
  207. package/overlays/rocm/README.md +227 -0
  208. package/overlays/rocm/devcontainer.patch.json +4 -0
  209. package/overlays/rocm/overlay.yml +17 -0
  210. package/overlays/rocm/setup.sh +45 -0
  211. package/overlays/rocm/verify.sh +47 -0
  212. package/overlays/rust/setup.sh +11 -18
  213. package/overlays/skaffold/README.md +256 -0
  214. package/overlays/skaffold/devcontainer.patch.json +9 -0
  215. package/overlays/skaffold/overlay.yml +20 -0
  216. package/overlays/skaffold/setup.sh +33 -0
  217. package/overlays/skaffold/verify.sh +24 -0
  218. package/overlays/spec-kit/setup.sh +7 -3
  219. package/overlays/sqlite/setup.sh +14 -14
  220. package/overlays/sqlserver/docker-compose.yml +3 -3
  221. package/overlays/sqlserver/verify.sh +22 -5
  222. package/overlays/tempo/verify.sh +16 -10
  223. package/overlays/tilt/devcontainer.patch.json +1 -2
  224. package/overlays/tilt/setup.sh +14 -4
  225. package/overlays/windsurf-cli/setup.sh +27 -4
  226. package/overlays/windsurf-cli/verify.sh +13 -3
  227. package/package.json +4 -2
  228. package/templates/scripts/setup-utils.sh +228 -0
  229. package/tool/schema/config.schema.json +141 -9
  230. package/tool/schema/overlay-manifest.schema.json +38 -0
  231. package/overlays/.shared/compose/common-healthchecks.yml +0 -38
  232. /package/overlays/otel-demo-nodejs/{Dockerfile-otel-demo-nodejs → Dockerfile} +0 -0
  233. /package/overlays/otel-demo-nodejs/{package-otel-demo-nodejs.json → package.json} +0 -0
  234. /package/overlays/otel-demo-nodejs/{server-otel-demo-nodejs.js → server.js} +0 -0
  235. /package/overlays/otel-demo-nodejs/{tracing-otel-demo-nodejs.js → tracing.js} +0 -0
  236. /package/overlays/otel-demo-python/{Dockerfile-otel-demo-python → Dockerfile} +0 -0
  237. /package/overlays/otel-demo-python/{app-otel-demo-python.py → app.py} +0 -0
  238. /package/overlays/otel-demo-python/{requirements-otel-demo-python.txt → requirements.txt} +0 -0
package/docs/overlays.md CHANGED
@@ -69,12 +69,13 @@ Jupyter notebook server for interactive computing and data science
69
69
 
70
70
  Material for MkDocs - professional documentation generator
71
71
 
72
- | Property | Value |
73
- | ------------ | ----------------------------------- |
74
- | **Category** | language |
75
- | **Requires** | `python` |
76
- | **Tags** | `documentation`, `mkdocs`, `python` |
77
- | **Ports** | 8000 |
72
+ | Property | Value |
73
+ | ------------- | ----------------------------------- |
74
+ | **Category** | language |
75
+ | **Requires** | `python` |
76
+ | **Conflicts** | `mkdocs2` |
77
+ | **Tags** | `documentation`, `mkdocs`, `python` |
78
+ | **Ports** | 8000 |
78
79
 
79
80
  ### Node.js (`nodejs`)
80
81
 
@@ -145,18 +146,18 @@ MongoDB 8 with Mongo Express web UI
145
146
  | **Category** | database |
146
147
  | **Supports** | compose |
147
148
  | **Tags** | `database`, `nosql`, `mongodb`, `document` |
148
- | **Ports** | [object Object], [object Object] |
149
+ | **Ports** | 27017/tcp, 8081/http |
149
150
 
150
151
  ### MySQL (`mysql`)
151
152
 
152
153
  MySQL 8 with phpMyAdmin web UI
153
154
 
154
- | Property | Value |
155
- | ------------ | -------------------------------- |
156
- | **Category** | database |
157
- | **Supports** | compose |
158
- | **Tags** | `database`, `sql`, `mysql` |
159
- | **Ports** | [object Object], [object Object] |
155
+ | Property | Value |
156
+ | ------------ | -------------------------- |
157
+ | **Category** | database |
158
+ | **Supports** | compose |
159
+ | **Tags** | `database`, `sql`, `mysql` |
160
+ | **Ports** | 3306/tcp, 8080/http |
160
161
 
161
162
  ### NATS (`nats`)
162
163
 
@@ -167,18 +168,44 @@ Lightweight pub/sub messaging with JetStream
167
168
  | **Category** | database |
168
169
  | **Supports** | compose |
169
170
  | **Tags** | `database`, `messaging`, `pubsub`, `nats`, `jetstream` |
170
- | **Ports** | [object Object], [object Object] |
171
+ | **Ports** | 4222/tcp, 8222/http |
172
+
173
+ ### pgvector (PostgreSQL + vector) (`pgvector`)
174
+
175
+ PostgreSQL 16 with the pgvector extension for vector similarity search
176
+
177
+ | Property | Value |
178
+ | ------------- | ----------------------------------------------------------------- |
179
+ | **Category** | database |
180
+ | **Supports** | compose |
181
+ | **Suggests** | `ollama`, `python`, `nodejs` |
182
+ | **Conflicts** | `postgres` |
183
+ | **Tags** | `database`, `sql`, `vector`, `embeddings`, `postgres`, `pgvector` |
184
+ | **Ports** | 5432/tcp |
171
185
 
172
186
  ### PostgreSQL (`postgres`)
173
187
 
174
188
  PostgreSQL 16 database
175
189
 
176
- | Property | Value |
177
- | ------------ | ----------------------------- |
178
- | **Category** | database |
179
- | **Supports** | compose |
180
- | **Tags** | `database`, `sql`, `postgres` |
181
- | **Ports** | [object Object] |
190
+ | Property | Value |
191
+ | ------------- | ----------------------------- |
192
+ | **Category** | database |
193
+ | **Supports** | compose |
194
+ | **Conflicts** | `pgvector` |
195
+ | **Tags** | `database`, `sql`, `postgres` |
196
+ | **Ports** | 5432/tcp |
197
+
198
+ ### Qdrant (`qdrant`)
199
+
200
+ High-performance vector database for similarity search and embeddings
201
+
202
+ | Property | Value |
203
+ | ------------ | ------------------------------------------------------ |
204
+ | **Category** | database |
205
+ | **Supports** | compose |
206
+ | **Suggests** | `ollama`, `python`, `nodejs` |
207
+ | **Tags** | `database`, `vector`, `embeddings`, `search`, `qdrant` |
208
+ | **Ports** | 6333/http, 6334/grpc |
182
209
 
183
210
  ### RabbitMQ (`rabbitmq`)
184
211
 
@@ -189,7 +216,7 @@ Message broker with AMQP protocol and management UI
189
216
  | **Category** | database |
190
217
  | **Supports** | compose |
191
218
  | **Tags** | `database`, `messaging`, `queue`, `rabbitmq`, `amqp` |
192
- | **Ports** | [object Object], [object Object] |
219
+ | **Ports** | 5672/tcp, 15672/http |
193
220
 
194
221
  ### Redis (`redis`)
195
222
 
@@ -200,7 +227,7 @@ Redis 7 cache
200
227
  | **Category** | database |
201
228
  | **Supports** | compose |
202
229
  | **Tags** | `database`, `cache`, `redis` |
203
- | **Ports** | [object Object] |
230
+ | **Ports** | 6379/tcp |
204
231
 
205
232
  ### Redpanda (`redpanda`)
206
233
 
@@ -241,13 +268,13 @@ SQLite with litecli and VS Code extensions
241
268
 
242
269
  Distributed tracing backend
243
270
 
244
- | Property | Value |
245
- | ------------- | ------------------------------------------------- |
246
- | **Category** | observability |
247
- | **Supports** | compose |
248
- | **Conflicts** | `tempo` |
249
- | **Tags** | `observability`, `tracing`, `jaeger` |
250
- | **Ports** | [object Object], [object Object], [object Object] |
271
+ | Property | Value |
272
+ | ------------- | ------------------------------------ |
273
+ | **Category** | observability |
274
+ | **Supports** | compose |
275
+ | **Conflicts** | `tempo` |
276
+ | **Tags** | `observability`, `tracing`, `jaeger` |
277
+ | **Ports** | 16686/http, 14250/grpc, 14268/http |
251
278
 
252
279
  ### Loki (`loki`)
253
280
 
@@ -259,7 +286,7 @@ Log aggregation system
259
286
  | **Supports** | compose |
260
287
  | **Suggests** | `promtail` |
261
288
  | **Tags** | `observability`, `logs`, `loki` |
262
- | **Ports** | [object Object] |
289
+ | **Ports** | 3100/http |
263
290
 
264
291
  ### Prometheus (`prometheus`)
265
292
 
@@ -271,7 +298,7 @@ Metrics collection and monitoring
271
298
  | **Supports** | compose |
272
299
  | **Suggests** | `alertmanager` |
273
300
  | **Tags** | `observability`, `metrics`, `prometheus` |
274
- | **Ports** | [object Object] |
301
+ | **Ports** | 9090/http |
275
302
 
276
303
  ### Tempo (`tempo`)
277
304
 
@@ -332,7 +359,7 @@ Observability visualization dashboard with auto-provisioning
332
359
  | **Requires** | `prometheus` |
333
360
  | **Suggests** | `loki`, `jaeger`, `tempo`, `promtail` |
334
361
  | **Tags** | `observability`, `ui`, `visualization` |
335
- | **Ports** | [object Object] |
362
+ | **Ports** | 3000/http |
336
363
 
337
364
  ### OTel Demo (Node.js) (`otel-demo-nodejs`)
338
365
 
@@ -389,6 +416,18 @@ Google Cloud Platform command-line tools (gcloud, gsutil, bq)
389
416
  | **Category** | cloud |
390
417
  | **Tags** | `cloud`, `gcp`, `google`, `cli` |
391
418
 
419
+ ### k3d (`k3d`)
420
+
421
+ Lightweight local Kubernetes clusters using k3s in Docker
422
+
423
+ | Property | Value |
424
+ | ------------- | ----------------------------------------------------- |
425
+ | **Category** | cloud |
426
+ | **Requires** | `docker-in-docker` |
427
+ | **Suggests** | `kubectl-helm` |
428
+ | **Conflicts** | `kind` |
429
+ | **Tags** | `cloud`, `kubernetes`, `k8s`, `k3d`, `k3s`, `testing` |
430
+
392
431
  ### kind (Kubernetes in Docker) (`kind`)
393
432
 
394
433
  Local Kubernetes cluster for development and testing
@@ -502,6 +541,18 @@ OpenAI Codex CLI for AI-powered code generation and assistance
502
541
  | **Requires** | `nodejs` |
503
542
  | **Tags** | `dev`, `ai`, `code-generation` |
504
543
 
544
+ ### ComfyUI (`comfyui`)
545
+
546
+ Node-based image/video generation UI for Stable Diffusion and generative AI workflows
547
+
548
+ | Property | Value |
549
+ | ------------ | -------------------------------------------------------------- |
550
+ | **Category** | dev |
551
+ | **Supports** | compose |
552
+ | **Suggests** | `cuda`, `python`, `ollama` |
553
+ | **Tags** | `dev`, `ai`, `image-generation`, `stable-diffusion`, `comfyui` |
554
+ | **Ports** | 8188 |
555
+
505
556
  ### Commitlint (`commitlint`)
506
557
 
507
558
  Conventional commits validation for automated releases
@@ -513,6 +564,26 @@ Conventional commits validation for automated releases
513
564
  | **Suggests** | `pre-commit` |
514
565
  | **Tags** | `dev`, `git`, `commits`, `semantic-release` |
515
566
 
567
+ ### CUDA (NVIDIA GPU) (`cuda`)
568
+
569
+ NVIDIA CUDA libraries and GPU passthrough for containerized ML/inference workloads
570
+
571
+ | Property | Value |
572
+ | ------------- | ------------------------------------------------- |
573
+ | **Category** | dev |
574
+ | **Conflicts** | `rocm` |
575
+ | **Tags** | `dev`, `gpu`, `cuda`, `nvidia`, `ml`, `inference` |
576
+
577
+ ### Dev Container CLI (`devcontainer-cli`)
578
+
579
+ Official devcontainer CLI for building and testing devcontainer configurations
580
+
581
+ | Property | Value |
582
+ | ------------ | --------------------------------------- |
583
+ | **Category** | dev |
584
+ | **Suggests** | `docker-sock`, `docker-in-docker` |
585
+ | **Tags** | `dev`, `devcontainer`, `cli`, `testing` |
586
+
516
587
  ### direnv (`direnv`)
517
588
 
518
589
  Per-directory environment variable management
@@ -589,7 +660,7 @@ Open-source identity and access management (OIDC/OAuth2)
589
660
  | **Supports** | compose |
590
661
  | **Requires** | `postgres` |
591
662
  | **Tags** | `dev`, `auth`, `oidc`, `oauth2`, `identity` |
592
- | **Ports** | [object Object] |
663
+ | **Ports** | 8180/http |
593
664
 
594
665
  ### Mailpit (`mailpit`)
595
666
 
@@ -600,7 +671,19 @@ Email testing tool with web UI and SMTP server
600
671
  | **Category** | dev |
601
672
  | **Supports** | compose |
602
673
  | **Tags** | `dev`, `email`, `smtp`, `testing` |
603
- | **Ports** | [object Object], [object Object] |
674
+ | **Ports** | 8025/http, 1025/tcp |
675
+
676
+ ### MkDocs 2 (`mkdocs2`)
677
+
678
+ MkDocs 2.0 pre-release (encode/mkdocs) — smart, simple website design tool
679
+
680
+ | Property | Value |
681
+ | ------------- | ------------------------------------------ |
682
+ | **Category** | dev |
683
+ | **Requires** | `python` |
684
+ | **Conflicts** | `mkdocs` |
685
+ | **Tags** | `dev`, `documentation`, `mkdocs`, `python` |
686
+ | **Ports** | 8000 |
604
687
 
605
688
  ### Modern CLI Tools (`modern-cli-tools`)
606
689
 
@@ -622,6 +705,30 @@ Secure tunneling for webhook testing and external access
622
705
  | **Tags** | `dev`, `tunneling`, `webhooks` |
623
706
  | **Ports** | 4040 |
624
707
 
708
+ ### Ollama (`ollama`)
709
+
710
+ Local LLM inference server with OpenAI-compatible API
711
+
712
+ | Property | Value |
713
+ | ------------ | ----------------------------------------- |
714
+ | **Category** | dev |
715
+ | **Supports** | compose |
716
+ | **Suggests** | `codex`, `claude-code`, `amp` |
717
+ | **Tags** | `dev`, `ai`, `llm`, `inference`, `ollama` |
718
+ | **Ports** | 11434 |
719
+
720
+ ### Open WebUI (`open-webui`)
721
+
722
+ Browser-based chat UI for Ollama and OpenAI-compatible LLM backends
723
+
724
+ | Property | Value |
725
+ | ------------ | --------------------------------------------- |
726
+ | **Category** | dev |
727
+ | **Supports** | compose |
728
+ | **Suggests** | `ollama` |
729
+ | **Tags** | `dev`, `ai`, `llm`, `ui`, `chat`, `openwebui` |
730
+ | **Ports** | 3000/http |
731
+
625
732
  ### OpenAPI Tools (`openapi-tools`)
626
733
 
627
734
  OpenAPI/Swagger tooling for API development and documentation
@@ -662,6 +769,27 @@ Automated code quality gates with pre-commit hooks
662
769
  | **Suggests** | `commitlint` |
663
770
  | **Tags** | `dev`, `git`, `quality`, `hooks` |
664
771
 
772
+ ### ROCm (AMD GPU) (`rocm`)
773
+
774
+ AMD ROCm libraries and GPU passthrough for containerized ML/inference workloads
775
+
776
+ | Property | Value |
777
+ | ------------- | ---------------------------------------------- |
778
+ | **Category** | dev |
779
+ | **Conflicts** | `cuda` |
780
+ | **Tags** | `dev`, `gpu`, `rocm`, `amd`, `ml`, `inference` |
781
+
782
+ ### Skaffold (`skaffold`)
783
+
784
+ Continuous development and deployment pipeline for Kubernetes applications
785
+
786
+ | Property | Value |
787
+ | ------------- | ------------------------------------------------------------ |
788
+ | **Category** | dev |
789
+ | **Suggests** | `kubectl-helm`, `kind`, `k3d` |
790
+ | **Conflicts** | `tilt` |
791
+ | **Tags** | `dev`, `kubernetes`, `k8s`, `cicd`, `deployment`, `skaffold` |
792
+
665
793
  ### Tilt (`tilt`)
666
794
 
667
795
  Live update and orchestration for Kubernetes development
@@ -162,6 +162,105 @@ npm run init -- \
162
162
  --cloud-tools aws-cli,azure-cli,kubectl-helm
163
163
  ```
164
164
 
165
+ ## Doctor Command
166
+
167
+ The `doctor` command validates the current environment and devcontainer configuration.
168
+
169
+ ### Basic Diagnostics
170
+
171
+ ```bash
172
+ # Run diagnostics against the default .devcontainer/
173
+ container-superposition doctor
174
+
175
+ # Specify a custom path
176
+ container-superposition doctor --output ./my-project/.devcontainer
177
+
178
+ # Point to a manifest file directly (outputPath is derived from the manifest)
179
+ container-superposition doctor --from-manifest ./superposition.json
180
+
181
+ # Load the output path from the repository project file (superposition.yml)
182
+ container-superposition doctor --from-project
183
+
184
+ # Run discovery relative to a different repository root
185
+ container-superposition doctor --project-root /path/to/repo
186
+
187
+ # Machine-readable JSON output
188
+ container-superposition doctor --json
189
+ ```
190
+
191
+ ### Auto-Repair with `--fix`
192
+
193
+ The `--fix` flag runs the full diagnosis and then attempts to automatically repair
194
+ any fixable issues:
195
+
196
+ ```bash
197
+ # Interactive auto-repair (text output)
198
+ container-superposition doctor --fix
199
+
200
+ # Machine-readable repair output (for CI/scripting)
201
+ container-superposition doctor --fix --json
202
+ ```
203
+
204
+ **Fix run output vocabulary:**
205
+
206
+ | Outcome | Meaning |
207
+ | ------------------------ | ---------------------------------------------------- |
208
+ | `fixed` | Tool changed the environment; re-check now passes |
209
+ | `already compliant` | No change needed — check already passed |
210
+ | `skipped` | Not attempted (prerequisite step failed) |
211
+ | `requires manual action` | Automation unsafe/unavailable; manual steps provided |
212
+
213
+ **Fixable issue classes:**
214
+
215
+ | Issue | Auto-fix condition |
216
+ | -------------------------------------------- | ---------------------------------------------------------- |
217
+ | Stale / legacy `superposition.json` manifest | Always — migrate to current schema |
218
+ | Missing or corrupt `devcontainer.json` | When a valid manifest is present — regenerate |
219
+ | Unsupported Node.js runtime | Only when `nvm`, `fnm`, or `volta` is installed |
220
+ | Docker daemon not accessible | Manual only — platform-specific restart instructions shown |
221
+
222
+ **Remediation ordering:** Manifest migration always runs before devcontainer regeneration.
223
+ If migration fails, regeneration is skipped and marked as `skipped`.
224
+
225
+ **Safety:** All file mutations use atomic write (write to `.tmp`, then rename).
226
+ A timestamped backup is created before any manifest is modified.
227
+
228
+ **Exit codes:**
229
+
230
+ - `0` — all findings resolved (success or already-compliant)
231
+ - `0` — some findings require manual action (`repaired-with-warnings`)
232
+ - `1` — unresolved failures remain after fix run
233
+
234
+ ### JSON Fix Run Structure
235
+
236
+ ```json
237
+ {
238
+ "outputPath": "./.devcontainer",
239
+ "requestedJson": true,
240
+ "initialFindings": [...],
241
+ "executions": [
242
+ {
243
+ "findingId": "manifest-version",
244
+ "remediationKey": "manifest-migration",
245
+ "attempted": true,
246
+ "outcome": "fixed",
247
+ "reason": "Manifest migrated to current schema version",
248
+ "changedFiles": [".devcontainer/superposition.json"],
249
+ "backupPath": ".devcontainer/superposition.json.backup-2026-03-19-..."
250
+ }
251
+ ],
252
+ "finalFindings": [...],
253
+ "summary": {
254
+ "fixed": 1,
255
+ "alreadyCompliant": 3,
256
+ "skipped": 0,
257
+ "requiresManualAction": 0,
258
+ "total": 4
259
+ },
260
+ "exitDisposition": "success"
261
+ }
262
+ ```
263
+
165
264
  ## Output Structure
166
265
 
167
266
  ### Minimal (plain + language)
@@ -0,0 +1,114 @@
1
+ # Feature Specification: MkDocs 2.x Overlay
2
+
3
+ **Feature Branch**: `copilot/add-mkdocs2-overlay`
4
+ **Created**: 2026-03-16
5
+ **Status**: Final
6
+ **Input**: Add a new `mkdocs2` overlay that installs MkDocs 2.x with the Material theme via direct `pip` install, keeping the existing `mkdocs` (MkDocs 1.x) overlay untouched for backward compatibility.
7
+
8
+ ## Review & Approval _(mandatory before implementation)_
9
+
10
+ - **Spec Path**: `docs/specs/003-mkdocs2-overlay/spec.md`
11
+ - **Commit Status**: Committed
12
+ - **Review Status**: Approved
13
+ - **Implementation Gate**: No implementation code may begin until this spec is committed and reviewed.
14
+
15
+ ## User Scenarios & Testing _(mandatory)_
16
+
17
+ ### User Story 1 - Use MkDocs 2.x in a devcontainer (Priority: P1)
18
+
19
+ A developer wants to write documentation using MkDocs 2.x with the Material theme inside a devcontainer without manually managing Python packages.
20
+
21
+ **Why this priority**: MkDocs 2.x is the currently maintained release. Users starting new documentation projects need a working overlay that installs the supported version.
22
+
23
+ **Independent Test**: Select the `mkdocs2` overlay (with `python` as a required dependency), rebuild the container, and confirm that `mkdocs --version` reports a 2.x release, `mkdocs new .` succeeds, and `mkdocs serve` starts the dev server on port 8000.
24
+
25
+ **Acceptance Scenarios**:
26
+
27
+ 1. **Given** a user selects the `mkdocs2` overlay, **When** the devcontainer is built, **Then** `mkdocs --version` reports a version matching `2.x`.
28
+ 2. **Given** the container is running, **When** the user runs `mkdocs serve`, **Then** the development server starts on port 8000 and VS Code forwards the port automatically.
29
+ 3. **Given** a `mkdocs.yml` with `theme: {name: material}`, **When** the user runs `mkdocs build`, **Then** the site is generated without errors into the `site/` directory.
30
+
31
+ ---
32
+
33
+ ### User Story 2 - Conflict enforcement between mkdocs and mkdocs2 (Priority: P1)
34
+
35
+ A user selects both `mkdocs` (1.x) and `mkdocs2` (2.x) and expects the tool to report a conflict.
36
+
37
+ **Why this priority**: Both overlays install incompatible versions of the `mkdocs` command into the same environment. Allowing both would produce unpredictable results.
38
+
39
+ **Independent Test**: Attempt to generate a devcontainer with both `mkdocs` and `mkdocs2` selected and confirm the tool surfaces a conflict and blocks generation.
40
+
41
+ **Acceptance Scenarios**:
42
+
43
+ 1. **Given** a user selects `mkdocs` and `mkdocs2` simultaneously, **When** the questionnaire processes the selection, **Then** a conflict is reported and the user is prompted to choose one.
44
+ 2. **Given** `mkdocs` conflicts with `mkdocs2` in `overlays/mkdocs/overlay.yml`, **When** the overlay loader reads both manifests, **Then** the conflict is recognised bidirectionally.
45
+
46
+ ---
47
+
48
+ ### User Story 3 - Backward compatibility for existing mkdocs users (Priority: P2)
49
+
50
+ An existing user who already has the `mkdocs` overlay selected is unaffected by the addition of the new overlay.
51
+
52
+ **Why this priority**: Introducing a new overlay must not break users who rely on the existing one.
53
+
54
+ **Independent Test**: Generate a devcontainer using only the `mkdocs` overlay and confirm the output is identical to what it was before `mkdocs2` was added.
55
+
56
+ **Acceptance Scenarios**:
57
+
58
+ 1. **Given** a user's `superposition.json` references only `mkdocs`, **When** they run `regen`, **Then** the output is identical to before and contains no `mkdocs2`-related changes.
59
+
60
+ ---
61
+
62
+ ## Design
63
+
64
+ ### Installation Method
65
+
66
+ The `mkdocs2` overlay installs packages via `pip` directly into the workspace
67
+ `.venv` virtual environment (created by the `python` overlay, which is a hard
68
+ dependency). The overlay's `setup.sh` creates the `.venv` if it does not exist
69
+ yet, so it is self-contained even when run before the `python` overlay's setup
70
+ script completes.
71
+
72
+ ```bash
73
+ pip install --no-cache-dir \
74
+ "mkdocs>=2.0,<3.0" \
75
+ "mkdocs-material>=9.0" \
76
+ "mkdocs-minify-plugin" \
77
+ "mkdocs-redirects" \
78
+ "pymdown-extensions"
79
+ ```
80
+
81
+ This approach is preferred over the `ghcr.io/devcontainers-extra/features/mkdocs:2`
82
+ devcontainer feature because it gives precise version control and installs into
83
+ the same virtual environment used by the rest of the project.
84
+
85
+ ### Category
86
+
87
+ `dev` — MkDocs is a documentation tool, not a language runtime. This differs
88
+ from the legacy `mkdocs` overlay which uses `language` for historical reasons.
89
+
90
+ ### Conflict Model
91
+
92
+ `mkdocs` ↔ `mkdocs2` conflict is bidirectional:
93
+
94
+ - `overlays/mkdocs/overlay.yml`: `conflicts: [mkdocs2]`
95
+ - `overlays/mkdocs2/overlay.yml`: `conflicts: [mkdocs]`
96
+
97
+ ### TypeScript Type
98
+
99
+ `mkdocs2` is added to the `DevTool` union in `tool/schema/types.ts`, making it
100
+ part of the `OverlayId` union used throughout the type system.
101
+
102
+ ---
103
+
104
+ ## Files
105
+
106
+ | File | Description |
107
+ | ------------------------------------------ | -------------------------------------------------- |
108
+ | `overlays/mkdocs2/overlay.yml` | Overlay manifest |
109
+ | `overlays/mkdocs2/devcontainer.patch.json` | Port 8000 forwarding + VS Code Markdown extensions |
110
+ | `overlays/mkdocs2/setup.sh` | Pip install into `.venv` |
111
+ | `overlays/mkdocs2/verify.sh` | Confirms MkDocs 2.x is installed |
112
+ | `overlays/mkdocs2/README.md` | User documentation |
113
+ | `overlays/mkdocs/overlay.yml` | Updated to add bidirectional conflict |
114
+ | `tool/schema/types.ts` | Adds `mkdocs2` to `DevTool` |
@@ -0,0 +1,70 @@
1
+ # Feature Specification: `doctor --fix` — Interactive Auto-Repair
2
+
3
+ **Feature Branch**: `004-doctor-fix`
4
+ **Created**: 2026-03-19
5
+ **Status**: Final
6
+ **Input**: GitHub issue: Implement `doctor --fix` — interactive auto-repair for environment issues
7
+
8
+ ## Review & Approval _(mandatory before implementation)_
9
+
10
+ - **Spec Path**: `docs/specs/004-doctor-fix/spec.md`
11
+ - **Commit Status**: Committed
12
+ - **Review Status**: APPROVED
13
+ - **Implementation Gate**: No implementation code may begin until this spec is committed and reviewed.
14
+
15
+ ## Summary
16
+
17
+ The `doctor` command validates the environment. The `--fix` path was a placeholder. This spec
18
+ describes the full implementation of an interactive, safe, deterministic auto-repair flow for
19
+ common environment issues.
20
+
21
+ ## Initial Auto-Fix Scope
22
+
23
+ | # | Issue class | Automation condition |
24
+ | --- | ------------------------------------------------------------- | ----------------------------------------------------------------- |
25
+ | 1 | Stale or legacy `superposition.json` metadata | Always supported (manifest migration) |
26
+ | 2 | Derived `.devcontainer/` drift or missing generated artifacts | Supported when a valid manifest is present (regeneration) |
27
+ | 3 | Unsupported Node runtime | Supported only when `nvm`, `fnm`, or `volta` is already available |
28
+ | 4 | Docker / Compose tooling drift | Supported only when a known safe host repair command is available |
29
+
30
+ ## Outcome Vocabulary
31
+
32
+ Every finding evaluated by the fix flow resolves to exactly one of:
33
+
34
+ - **`fixed`** — tool changed the environment and targeted re-check now passes
35
+ - **`already compliant`** — fix path found no change was needed
36
+ - **`skipped`** — not attempted because an earlier failure or prerequisite blocked it
37
+ - **`requires manual action`** — issue remains; automation is unsafe or unavailable
38
+
39
+ ## Data Model
40
+
41
+ ### `DiagnosticFinding`
42
+
43
+ Fields: `id`, `category`, `name`, `status`, `message`, `details?`, `fixEligibility`, `remediationKey?`, `recheckScope`
44
+
45
+ ### `RemediationAction`
46
+
47
+ Fields: `key`, `findingId`, `safetyClass`, `executionKind`, `preconditions`, `plannedChanges`, `manualFallback`
48
+
49
+ ### `FixExecution`
50
+
51
+ Fields: `findingId`, `remediationKey`, `attempted`, `outcome`, `reason`, `commands?`, `changedFiles?`, `backupPath?`, `rechecked`
52
+
53
+ ### `FixRun`
54
+
55
+ Fields: `outputPath`, `requestedJson`, `initialFindings`, `executions`, `finalFindings`, `summary`, `exitDisposition`
56
+
57
+ ## CLI Contract
58
+
59
+ - `doctor` without `--fix` — no change to current diagnostics behavior
60
+ - `doctor --fix` — diagnose → remediate in stable order → re-check → print summary
61
+ - `doctor --fix --json` — same flow, machine-readable JSON output
62
+
63
+ ## Remediation Ordering
64
+
65
+ Prerequisites before dependents:
66
+
67
+ 1. Stale manifest migration (must complete before regeneration)
68
+ 2. Missing artifacts / devcontainer drift (regeneration from manifest)
69
+ 3. Node version fix (only if version manager available)
70
+ 4. Docker tooling fix (only if repair command available)