container-superposition 0.1.8 → 0.1.10

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 (184) hide show
  1. package/README.md +3 -0
  2. package/dist/tool/cli/args.d.ts.map +1 -1
  3. package/dist/tool/cli/args.js +1 -1
  4. package/dist/tool/cli/args.js.map +1 -1
  5. package/dist/tool/commands/adopt.d.ts.map +1 -1
  6. package/dist/tool/commands/adopt.js +15 -21
  7. package/dist/tool/commands/adopt.js.map +1 -1
  8. package/dist/tool/commands/doctor.d.ts +1 -0
  9. package/dist/tool/commands/doctor.d.ts.map +1 -1
  10. package/dist/tool/commands/doctor.js +1370 -73
  11. package/dist/tool/commands/doctor.js.map +1 -1
  12. package/dist/tool/questionnaire/composer.d.ts +3 -1
  13. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  14. package/dist/tool/questionnaire/composer.js +273 -20
  15. package/dist/tool/questionnaire/composer.js.map +1 -1
  16. package/dist/tool/questionnaire/presets.d.ts.map +1 -1
  17. package/dist/tool/questionnaire/presets.js +1 -0
  18. package/dist/tool/questionnaire/presets.js.map +1 -1
  19. package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -1
  20. package/dist/tool/questionnaire/questionnaire.js +3 -1
  21. package/dist/tool/questionnaire/questionnaire.js.map +1 -1
  22. package/dist/tool/schema/project-config.d.ts.map +1 -1
  23. package/dist/tool/schema/project-config.js +174 -1
  24. package/dist/tool/schema/project-config.js.map +1 -1
  25. package/dist/tool/schema/types.d.ts +53 -2
  26. package/dist/tool/schema/types.d.ts.map +1 -1
  27. package/docs/README.md +1 -0
  28. package/docs/overlays.md +188 -147
  29. package/docs/specs/001-verbose-plan-graph/spec.md +5 -12
  30. package/docs/specs/002-superposition-config-file/spec.md +5 -12
  31. package/docs/specs/003-mkdocs2-overlay/spec.md +2 -9
  32. package/docs/specs/004-doctor-fix/spec.md +1 -8
  33. package/docs/specs/005-cuda-overlay/spec.md +2 -9
  34. package/docs/specs/006-rocm-overlay/spec.md +3 -10
  35. package/docs/specs/007-target-aware-generation/spec.md +4 -11
  36. package/docs/specs/008-project-file-canonical/spec.md +7 -8
  37. package/docs/specs/009-project-env/spec.md +3 -10
  38. package/docs/specs/010-compose-env-materialization/spec.md +3 -10
  39. package/docs/specs/011-overlay-parameters/spec.md +2 -9
  40. package/docs/specs/012-ollama-cli-overlay/spec.md +47 -0
  41. package/docs/specs/013-doctor-dependency-check/spec.md +250 -0
  42. package/docs/specs/014-doctor-compose-port-cross-validation/spec.md +276 -0
  43. package/docs/specs/015-doctor-env-example-drift/spec.md +248 -0
  44. package/docs/specs/016-doctor-reproducibility-check/spec.md +276 -0
  45. package/docs/specs/017-doctor-dry-run/spec.md +276 -0
  46. package/docs/specs/{007-init-project-file → 018-init-project-file}/spec.md +2 -9
  47. package/docs/specs/019-project-mounts/spec.md +176 -0
  48. package/docs/specs/taxonomy.md +186 -0
  49. package/docs/superposition-yml.md +467 -0
  50. package/overlays/.presets/full-observability.yml +113 -0
  51. package/overlays/.presets/k8s-dev.yml +174 -0
  52. package/overlays/.presets/local-llm.yml +105 -0
  53. package/overlays/.presets/vector-ai.yml +150 -0
  54. package/overlays/.shared/vscode/js-ts-settings.json +19 -0
  55. package/overlays/.shared/vscode/markdown-extensions.json +8 -0
  56. package/overlays/alertmanager/devcontainer.patch.json +0 -1
  57. package/overlays/alertmanager/docker-compose.yml +8 -0
  58. package/overlays/alertmanager/overlay.yml +1 -0
  59. package/overlays/amp/devcontainer.patch.json +4 -1
  60. package/overlays/ansible/README.md +163 -0
  61. package/overlays/ansible/devcontainer.patch.json +14 -0
  62. package/overlays/ansible/overlay.yml +18 -0
  63. package/overlays/argocd/README.md +158 -0
  64. package/overlays/argocd/devcontainer.patch.json +9 -0
  65. package/overlays/argocd/overlay.yml +17 -0
  66. package/overlays/argocd/setup.sh +29 -0
  67. package/overlays/argocd/verify.sh +14 -0
  68. package/overlays/bun/devcontainer.patch.json +1 -10
  69. package/overlays/bun/overlay.yml +8 -1
  70. package/overlays/claude-code/devcontainer.patch.json +6 -1
  71. package/overlays/codex/devcontainer.patch.json +5 -0
  72. package/overlays/comfyui/docker-compose.yml +1 -0
  73. package/overlays/comfyui/overlay.yml +4 -0
  74. package/overlays/commitlint/devcontainer.patch.json +1 -6
  75. package/overlays/docker-sock/overlay.yml +1 -0
  76. package/overlays/dotnet/overlay.yml +4 -1
  77. package/overlays/fuseki/.env.example +5 -0
  78. package/overlays/fuseki/README.md +173 -0
  79. package/overlays/fuseki/devcontainer.patch.json +18 -0
  80. package/overlays/fuseki/docker-compose.yml +29 -0
  81. package/overlays/fuseki/overlay.yml +42 -0
  82. package/overlays/fuseki/verify.sh +58 -0
  83. package/overlays/gemini-cli/devcontainer.patch.json +4 -1
  84. package/overlays/go/overlay.yml +6 -1
  85. package/overlays/grafana/devcontainer.patch.json +0 -1
  86. package/overlays/grafana/docker-compose.yml +8 -2
  87. package/overlays/grafana/overlay.yml +6 -1
  88. package/overlays/jaeger/.env.example +11 -0
  89. package/overlays/jaeger/README.md +33 -4
  90. package/overlays/jaeger/devcontainer.patch.json +9 -1
  91. package/overlays/jaeger/docker-compose.yml +17 -0
  92. package/overlays/jaeger/overlay.yml +1 -12
  93. package/overlays/java/overlay.yml +6 -1
  94. package/overlays/jupyter/docker-compose.yml +1 -0
  95. package/overlays/jupyter/overlay.yml +1 -0
  96. package/overlays/keycloak/devcontainer.patch.json +0 -1
  97. package/overlays/keycloak/docker-compose.yml +1 -0
  98. package/overlays/keycloak/overlay.yml +15 -0
  99. package/overlays/localstack/docker-compose.yml +1 -0
  100. package/overlays/localstack/overlay.yml +19 -1
  101. package/overlays/loki/devcontainer.patch.json +0 -1
  102. package/overlays/loki/docker-compose.yml +8 -0
  103. package/overlays/loki/overlay.yml +1 -0
  104. package/overlays/mailpit/docker-compose.yml +1 -0
  105. package/overlays/mailpit/overlay.yml +1 -0
  106. package/overlays/minio/devcontainer.patch.json +1 -1
  107. package/overlays/minio/docker-compose.yml +1 -0
  108. package/overlays/minio/overlay.yml +23 -2
  109. package/overlays/mkdocs/devcontainer.patch.json +1 -5
  110. package/overlays/mkdocs/overlay.yml +3 -1
  111. package/overlays/mkdocs2/devcontainer.patch.json +1 -5
  112. package/overlays/mkdocs2/overlay.yml +2 -0
  113. package/overlays/mongodb/docker-compose.yml +2 -0
  114. package/overlays/mongodb/overlay.yml +26 -2
  115. package/overlays/mysql/docker-compose.yml +2 -0
  116. package/overlays/mysql/overlay.yml +36 -2
  117. package/overlays/nats/docker-compose.yml +1 -0
  118. package/overlays/nats/overlay.yml +18 -2
  119. package/overlays/nodejs/devcontainer.patch.json +1 -12
  120. package/overlays/nodejs/overlay.yml +8 -1
  121. package/overlays/ollama/README.md +4 -3
  122. package/overlays/ollama/docker-compose.yml +1 -0
  123. package/overlays/ollama/overlay.yml +6 -1
  124. package/overlays/ollama/verify.sh +5 -28
  125. package/overlays/ollama-cli/README.md +90 -0
  126. package/overlays/ollama-cli/devcontainer.patch.json +3 -0
  127. package/overlays/ollama-cli/overlay.yml +19 -0
  128. package/overlays/{ollama → ollama-cli}/setup.sh +7 -10
  129. package/overlays/ollama-cli/verify.sh +49 -0
  130. package/overlays/open-webui/docker-compose.yml +1 -0
  131. package/overlays/open-webui/overlay.yml +8 -1
  132. package/overlays/opencode/devcontainer.patch.json +4 -1
  133. package/overlays/otel-collector/README.md +4 -0
  134. package/overlays/otel-collector/devcontainer.patch.json +4 -1
  135. package/overlays/otel-collector/docker-compose.yml +8 -4
  136. package/overlays/otel-collector/overlay.yml +1 -0
  137. package/overlays/otel-demo-nodejs/devcontainer.patch.json +0 -1
  138. package/overlays/otel-demo-nodejs/docker-compose.yml +1 -0
  139. package/overlays/otel-demo-nodejs/overlay.yml +9 -1
  140. package/overlays/otel-demo-python/devcontainer.patch.json +0 -1
  141. package/overlays/otel-demo-python/docker-compose.yml +1 -0
  142. package/overlays/otel-demo-python/overlay.yml +6 -1
  143. package/overlays/pandoc/README.md +10 -0
  144. package/overlays/pandoc/devcontainer.patch.json +0 -5
  145. package/overlays/pandoc/overlay.yml +2 -0
  146. package/overlays/pandoc/setup.sh +10 -0
  147. package/overlays/pgvector/devcontainer.patch.json +11 -5
  148. package/overlays/pgvector/docker-compose.yml +1 -0
  149. package/overlays/pgvector/overlay.yml +3 -0
  150. package/overlays/playwright/devcontainer.patch.json +0 -5
  151. package/overlays/playwright/overlay.yml +2 -1
  152. package/overlays/postgres/docker-compose.yml +1 -0
  153. package/overlays/postgres/overlay.yml +4 -1
  154. package/overlays/pre-commit/devcontainer.patch.json +1 -7
  155. package/overlays/prometheus/devcontainer.patch.json +0 -1
  156. package/overlays/prometheus/docker-compose.yml +8 -0
  157. package/overlays/prometheus/overlay.yml +1 -0
  158. package/overlays/promtail/devcontainer.patch.json +1 -2
  159. package/overlays/promtail/docker-compose.yml +8 -0
  160. package/overlays/promtail/overlay.yml +1 -0
  161. package/overlays/qdrant/docker-compose.yml +1 -0
  162. package/overlays/qdrant/overlay.yml +5 -1
  163. package/overlays/rabbitmq/docker-compose.yml +1 -0
  164. package/overlays/rabbitmq/overlay.yml +25 -2
  165. package/overlays/redis/docker-compose.yml +7 -0
  166. package/overlays/redis/overlay.yml +15 -1
  167. package/overlays/redpanda/docker-compose.yml +1 -0
  168. package/overlays/redpanda/overlay.yml +15 -3
  169. package/overlays/rocm/overlay.yml +2 -1
  170. package/overlays/rust/overlay.yml +3 -1
  171. package/overlays/sqlserver/docker-compose.yml +1 -0
  172. package/overlays/sqlserver/overlay.yml +17 -0
  173. package/overlays/task/README.md +47 -0
  174. package/overlays/task/devcontainer.patch.json +9 -0
  175. package/overlays/task/overlay.yml +16 -0
  176. package/overlays/task/setup.sh +29 -0
  177. package/overlays/task/verify.sh +14 -0
  178. package/overlays/tempo/devcontainer.patch.json +0 -1
  179. package/overlays/tempo/docker-compose.yml +8 -0
  180. package/overlays/tempo/overlay.yml +1 -0
  181. package/overlays/windsurf-cli/devcontainer.patch.json +4 -1
  182. package/package.json +1 -1
  183. package/tool/schema/config.schema.json +74 -1
  184. package/overlays/.shared/otel/otel-base-config.yaml +0 -30
@@ -14,10 +14,16 @@
14
14
  "apk": "postgresql-client"
15
15
  }
16
16
  },
17
- "containerEnv": {
18
- "PGHOST": "pgvector",
19
- "PGPORT": "5432",
20
- "PGDATABASE": "devdb",
21
- "PGUSER": "postgres"
17
+ "remoteEnv": {
18
+ "PGVECTOR_HOST": "pgvector",
19
+ "PGVECTOR_PORT": "5432",
20
+ "PGVECTOR_DB": "{{cs.PGVECTOR_DB}}",
21
+ "PGVECTOR_USER": "{{cs.PGVECTOR_USER}}",
22
+ "PGVECTOR_PASSWORD": "{{cs.PGVECTOR_PASSWORD}}",
23
+ "POSTGRES_HOST": "pgvector",
24
+ "POSTGRES_PORT": "5432",
25
+ "POSTGRES_DB": "{{cs.PGVECTOR_DB}}",
26
+ "POSTGRES_USER": "{{cs.PGVECTOR_USER}}",
27
+ "POSTGRES_PASSWORD": "{{cs.PGVECTOR_PASSWORD}}"
22
28
  }
23
29
  }
@@ -30,3 +30,4 @@ volumes:
30
30
 
31
31
  networks:
32
32
  devnet:
33
+ name: devnet
@@ -9,8 +9,11 @@ suggests:
9
9
  - ollama
10
10
  - python
11
11
  - nodejs
12
+ - prometheus
13
+ - grafana
12
14
  conflicts:
13
15
  - postgres
16
+ serviceOrder: 0
14
17
  tags:
15
18
  - database
16
19
  - sql
@@ -1,10 +1,5 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
- "features": {
4
- "ghcr.io/devcontainers/features/node:1": {
5
- "version": "lts"
6
- }
7
- },
8
3
  "postCreateCommand": {
9
4
  "setup-playwright": "bash .devcontainer/scripts/setup-playwright.sh"
10
5
  }
@@ -3,7 +3,8 @@ name: Playwright
3
3
  description: Browser automation and testing framework
4
4
  category: dev
5
5
  supports: []
6
- requires: []
6
+ requires:
7
+ - nodejs
7
8
  suggests: []
8
9
  conflicts: []
9
10
  tags:
@@ -30,3 +30,4 @@ volumes:
30
30
 
31
31
  networks:
32
32
  devnet:
33
+ name: devnet
@@ -5,9 +5,12 @@ category: database
5
5
  supports:
6
6
  - compose
7
7
  requires: []
8
- suggests: []
8
+ suggests:
9
+ - prometheus
10
+ - grafana
9
11
  conflicts:
10
12
  - pgvector
13
+ serviceOrder: 0
11
14
  tags:
12
15
  - database
13
16
  - sql
@@ -1,9 +1,3 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
- "features": {
4
- "ghcr.io/devcontainers/features/python:1": {
5
- "version": "3.12",
6
- "installTools": true
7
- }
8
- }
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json"
9
3
  }
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
3
  "runServices": ["prometheus"],
4
- "_serviceOrder": 1,
5
4
  "forwardPorts": [9090],
6
5
  "portsAttributes": {
7
6
  "9090": {
@@ -2,6 +2,7 @@ version: '3.8'
2
2
  services:
3
3
  prometheus:
4
4
  image: prom/prometheus:${PROMETHEUS_VERSION:-latest}
5
+ restart: unless-stopped
5
6
  command:
6
7
  - '--config.file=/etc/prometheus/prometheus.yml'
7
8
  - '--storage.tsdb.path=/prometheus'
@@ -14,9 +15,16 @@ services:
14
15
  - '${PROMETHEUS_PORT:-9090}:9090'
15
16
  networks:
16
17
  - devnet
18
+ healthcheck:
19
+ test: ['CMD', 'wget', '-qO-', 'http://localhost:9090/-/ready']
20
+ interval: 10s
21
+ timeout: 5s
22
+ retries: 5
23
+ start_period: 15s
17
24
 
18
25
  volumes:
19
26
  prometheus_data:
20
27
 
21
28
  networks:
22
29
  devnet:
30
+ name: devnet
@@ -20,5 +20,6 @@ ports:
20
20
  path: /
21
21
  onAutoForward: openBrowser
22
22
  order: 1
23
+ serviceOrder: 1
23
24
  imports:
24
25
  - .shared/otel/instrumentation.env
@@ -1,5 +1,4 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
- "runServices": ["promtail"],
4
- "_serviceOrder": 2
3
+ "runServices": ["promtail"]
5
4
  }
@@ -2,6 +2,7 @@ version: '3.8'
2
2
  services:
3
3
  promtail:
4
4
  image: grafana/promtail:${PROMTAIL_VERSION:-latest}
5
+ restart: unless-stopped
5
6
  command: -config.file=/etc/promtail/promtail-config.yaml
6
7
  volumes:
7
8
  - ./promtail-config-promtail.yaml:/etc/promtail/promtail-config.yaml
@@ -11,6 +12,13 @@ services:
11
12
  - loki
12
13
  networks:
13
14
  - devnet
15
+ healthcheck:
16
+ test: ['CMD', 'wget', '-qO-', 'http://localhost:9080/ready']
17
+ interval: 10s
18
+ timeout: 5s
19
+ retries: 5
20
+ start_period: 10s
14
21
 
15
22
  networks:
16
23
  devnet:
24
+ name: devnet
@@ -15,3 +15,4 @@ tags:
15
15
  - loki
16
16
  ports: []
17
17
  order: 2
18
+ serviceOrder: 2
@@ -23,3 +23,4 @@ volumes:
23
23
 
24
24
  networks:
25
25
  devnet:
26
+ name: devnet
@@ -9,7 +9,11 @@ suggests:
9
9
  - ollama
10
10
  - python
11
11
  - nodejs
12
+ - prometheus
13
+ - grafana
14
+ - otel-collector
12
15
  conflicts: []
16
+ serviceOrder: 0
13
17
  tags:
14
18
  - database
15
19
  - vector
@@ -31,7 +35,7 @@ ports:
31
35
  parameters:
32
36
  QDRANT_VERSION:
33
37
  description: Qdrant Docker image tag
34
- default: latest
38
+ default: v1.9.0
35
39
  QDRANT_PORT:
36
40
  description: Host port mapped to Qdrant REST API (6333 inside container)
37
41
  default: '6333'
@@ -28,3 +28,4 @@ volumes:
28
28
 
29
29
  networks:
30
30
  devnet:
31
+ name: devnet
@@ -1,12 +1,35 @@
1
1
  id: rabbitmq
2
2
  name: RabbitMQ
3
3
  description: Message broker with AMQP protocol and management UI
4
- category: database
4
+ category: messaging
5
5
  supports:
6
6
  - compose
7
7
  requires: []
8
- suggests: []
8
+ suggests:
9
+ - prometheus
10
+ - grafana
9
11
  conflicts: []
12
+ serviceOrder: 0
13
+ parameters:
14
+ RABBITMQ_VERSION:
15
+ description: RabbitMQ image version tag (management variant used)
16
+ default: 3-management
17
+ RABBITMQ_PORT:
18
+ description: Host port mapped to AMQP (5672 inside container)
19
+ default: '5672'
20
+ RABBITMQ_MANAGEMENT_PORT:
21
+ description: Host port mapped to management UI (15672 inside container)
22
+ default: '15672'
23
+ RABBITMQ_USER:
24
+ description: RabbitMQ default username
25
+ default: guest
26
+ RABBITMQ_PASSWORD:
27
+ description: RabbitMQ default password
28
+ default: guest
29
+ sensitive: true
30
+ RABBITMQ_VHOST:
31
+ description: RabbitMQ default virtual host
32
+ default: /
10
33
  tags:
11
34
  - database
12
35
  - messaging
@@ -13,9 +13,16 @@ services:
13
13
  REDIS_PASSWORD: ${REDIS_PASSWORD:-}
14
14
  networks:
15
15
  - devnet
16
+ healthcheck:
17
+ test: ['CMD', 'redis-cli', 'ping']
18
+ interval: 10s
19
+ timeout: 5s
20
+ retries: 5
21
+ start_period: 10s
16
22
 
17
23
  volumes:
18
24
  redis-data:
19
25
 
20
26
  networks:
21
27
  devnet:
28
+ name: devnet
@@ -5,8 +5,22 @@ category: database
5
5
  supports:
6
6
  - compose
7
7
  requires: []
8
- suggests: []
8
+ suggests:
9
+ - prometheus
10
+ - grafana
9
11
  conflicts: []
12
+ serviceOrder: 0
13
+ parameters:
14
+ REDIS_VERSION:
15
+ description: Redis image version tag
16
+ default: '7'
17
+ REDIS_PORT:
18
+ description: Host port mapped to Redis (6379 inside container)
19
+ default: '6379'
20
+ REDIS_PASSWORD:
21
+ description: Redis password (leave empty to disable authentication)
22
+ default: ''
23
+ sensitive: true
10
24
  tags:
11
25
  - database
12
26
  - cache
@@ -63,3 +63,4 @@ volumes:
63
63
 
64
64
  networks:
65
65
  devnet:
66
+ name: devnet
@@ -1,12 +1,24 @@
1
1
  id: redpanda
2
2
  name: Redpanda
3
3
  description: Kafka-compatible event streaming with web console
4
- category: database
4
+ category: messaging
5
5
  supports:
6
6
  - compose
7
7
  requires: []
8
- suggests: []
9
- conflicts: []
8
+ suggests:
9
+ - prometheus
10
+ - grafana
11
+ conflicts:
12
+ - mysql
13
+ - mongodb
14
+ - nodejs
15
+ - bun
16
+ - go
17
+ - java
18
+ - dotnet
19
+ - otel-demo-nodejs
20
+ - otel-demo-python
21
+ serviceOrder: 0
10
22
  tags:
11
23
  - database
12
24
  - messaging
@@ -4,7 +4,8 @@ description: AMD ROCm libraries and GPU passthrough for containerized ML/inferen
4
4
  category: dev
5
5
  supports: []
6
6
  requires: []
7
- suggests: []
7
+ suggests:
8
+ - comfyui
8
9
  conflicts:
9
10
  - cuda
10
11
  tags:
@@ -5,7 +5,9 @@ category: language
5
5
  supports: []
6
6
  requires: []
7
7
  suggests: []
8
- conflicts: []
8
+ conflicts:
9
+ - grafana
10
+ - open-webui
9
11
  tags:
10
12
  - language
11
13
  - rust
@@ -30,3 +30,4 @@ volumes:
30
30
 
31
31
  networks:
32
32
  devnet:
33
+ name: devnet
@@ -7,7 +7,24 @@ supports:
7
7
  requires: []
8
8
  suggests:
9
9
  - dotnet
10
+ - prometheus
11
+ - grafana
10
12
  conflicts: []
13
+ serviceOrder: 0
14
+ parameters:
15
+ MSSQL_VERSION:
16
+ description: SQL Server image version tag
17
+ default: 2022-latest
18
+ MSSQL_PORT:
19
+ description: Host port mapped to SQL Server (1433 inside container)
20
+ default: '1433'
21
+ MSSQL_SA_PASSWORD:
22
+ description: SQL Server SA (system administrator) password
23
+ default: YourStrong@Passw0rd
24
+ sensitive: true
25
+ MSSQL_PID:
26
+ description: SQL Server product ID / edition (Developer, Express, Standard, Enterprise)
27
+ default: Developer
11
28
  tags:
12
29
  - database
13
30
  - sql
@@ -0,0 +1,47 @@
1
+ # Taskfile (task) Overlay
2
+
3
+ Adds [Task](https://taskfile.dev/) (`task`) to run project automation via `Taskfile.yml`.
4
+
5
+ ## Features
6
+
7
+ - **Task CLI** — fast, modern task runner (`task`)
8
+ - **Taskfile workflows** — declarative task definitions with dependencies and variables
9
+ - **Architecture-aware install** — installs amd64 or arm64 binary automatically
10
+
11
+ ## Quick Start
12
+
13
+ ```bash
14
+ task --version
15
+ task --list
16
+ ```
17
+
18
+ Create a basic `Taskfile.yml`:
19
+
20
+ ```yaml
21
+ version: '3'
22
+
23
+ tasks:
24
+ default:
25
+ cmds:
26
+ - task --list
27
+
28
+ lint:
29
+ cmds:
30
+ - npm run lint
31
+
32
+ test:
33
+ cmds:
34
+ - npm test
35
+ ```
36
+
37
+ Run tasks:
38
+
39
+ ```bash
40
+ task lint
41
+ task test
42
+ ```
43
+
44
+ ## Suggested Pairings
45
+
46
+ - `modern-cli-tools` — useful companion CLIs for day-to-day development
47
+ - `kubectl-helm` — pair task automation with Kubernetes workflows
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "postCreateCommand": {
4
+ "setup-task": "bash .devcontainer/scripts/setup-task.sh"
5
+ },
6
+ "postStartCommand": {
7
+ "verify-task": "bash .devcontainer/scripts/verify-task.sh"
8
+ }
9
+ }
@@ -0,0 +1,16 @@
1
+ id: task
2
+ name: Taskfile (task)
3
+ description: Modern task runner and build tool using Taskfiles
4
+ category: dev
5
+ supports: []
6
+ requires: []
7
+ suggests:
8
+ - modern-cli-tools
9
+ - kubectl-helm
10
+ conflicts: []
11
+ tags:
12
+ - dev
13
+ - automation
14
+ - taskfile
15
+ - build
16
+ ports: []
@@ -0,0 +1,29 @@
1
+ #!/bin/bash
2
+ # Setup script for Taskfile (task)
3
+
4
+ set -e
5
+
6
+ echo "🔧 Setting up Taskfile (task)..."
7
+
8
+ # Source shared setup utilities
9
+ # shellcheck source=setup-utils.sh
10
+ source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
11
+
12
+ detect_arch
13
+
14
+ TASK_VERSION="${TASK_VERSION:-v3.45.4}"
15
+ echo "📦 Installing task ${TASK_VERSION}..."
16
+
17
+ install_binary_from_tar \
18
+ "https://github.com/go-task/task/releases/download/${TASK_VERSION}/task_linux_${CS_ARCH}.tar.gz" \
19
+ "task"
20
+
21
+ if command -v task >/dev/null 2>&1; then
22
+ echo "✅ task installed successfully"
23
+ task --version
24
+ else
25
+ echo "❌ task installation failed"
26
+ exit 1
27
+ fi
28
+
29
+ echo "✅ Taskfile setup complete"
@@ -0,0 +1,14 @@
1
+ #!/bin/bash
2
+ # Verification script for Taskfile (task) overlay
3
+
4
+ set -e
5
+
6
+ echo "🔍 Verifying Taskfile overlay..."
7
+
8
+ if command -v task >/dev/null 2>&1; then
9
+ task --version
10
+ echo "✅ task is installed"
11
+ else
12
+ echo "❌ task is not installed"
13
+ exit 1
14
+ fi
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
3
  "runServices": ["tempo"],
4
- "_serviceOrder": 1,
5
4
  "forwardPorts": [3200],
6
5
  "portsAttributes": {
7
6
  "3200": {
@@ -2,6 +2,7 @@ version: '3.8'
2
2
  services:
3
3
  tempo:
4
4
  image: grafana/tempo:${TEMPO_VERSION:-latest}
5
+ restart: unless-stopped
5
6
  command: ['-config.file=/etc/tempo/tempo-config.yaml']
6
7
  volumes:
7
8
  - ./tempo-config-tempo.yaml:/etc/tempo/tempo-config.yaml
@@ -12,9 +13,16 @@ services:
12
13
  # Apps should send traces to otel-collector, which forwards to Tempo
13
14
  networks:
14
15
  - devnet
16
+ healthcheck:
17
+ test: ['CMD', 'wget', '-qO-', 'http://localhost:3200/ready']
18
+ interval: 10s
19
+ timeout: 5s
20
+ retries: 5
21
+ start_period: 15s
15
22
 
16
23
  volumes:
17
24
  tempo_data:
18
25
 
19
26
  networks:
20
27
  devnet:
28
+ name: devnet
@@ -18,3 +18,4 @@ tags:
18
18
  ports:
19
19
  - 3200
20
20
  order: 1
21
+ serviceOrder: 1
@@ -1,3 +1,6 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json"
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "postCreateCommand": {
4
+ "setup-windsurf-cli": "bash .devcontainer/scripts/setup-windsurf-cli.sh"
5
+ }
3
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "container-superposition",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "Solution-ready devcontainer templates and features with guided initialization",
5
5
  "type": "module",
6
6
  "main": "dist/scripts/init.js",
@@ -272,6 +272,41 @@
272
272
  ]
273
273
  }
274
274
  },
275
+ "mounts": {
276
+ "description": "Project-level mount specs routed to devcontainer.json mounts or docker-compose volumes based on stack/target",
277
+ "oneOf": [
278
+ {
279
+ "type": "array",
280
+ "items": {
281
+ "$ref": "#/$defs/projectMountEntry"
282
+ }
283
+ },
284
+ {
285
+ "type": "object",
286
+ "description": "Named mount map form",
287
+ "additionalProperties": {
288
+ "$ref": "#/$defs/projectMountObject"
289
+ }
290
+ }
291
+ ]
292
+ },
293
+ "shell": {
294
+ "type": "object",
295
+ "description": "Shell profile customizations written via a managed shell-init hook",
296
+ "properties": {
297
+ "aliases": {
298
+ "type": "object",
299
+ "additionalProperties": { "type": "string" },
300
+ "description": "Alias name -> command map (e.g. k: kubectl)"
301
+ },
302
+ "snippets": {
303
+ "type": "array",
304
+ "items": { "type": "string" },
305
+ "description": "Raw shell snippets appended to generated shell-init"
306
+ }
307
+ },
308
+ "additionalProperties": false
309
+ },
275
310
  "customizations": {
276
311
  "type": "object",
277
312
  "properties": {
@@ -328,5 +363,43 @@
328
363
  }
329
364
  },
330
365
  "required": [],
331
- "additionalProperties": false
366
+ "additionalProperties": false,
367
+ "$defs": {
368
+ "projectMountTarget": {
369
+ "type": "string",
370
+ "enum": ["auto", "devcontainerMount", "composeVolume"]
371
+ },
372
+ "projectMountObject": {
373
+ "type": "object",
374
+ "properties": {
375
+ "value": {
376
+ "type": "string",
377
+ "description": "Raw mount spec string (escape hatch)"
378
+ },
379
+ "source": { "type": "string", "description": "Mount source path or volume name" },
380
+ "destination": { "type": "string", "description": "Container destination path" },
381
+ "type": { "type": "string", "enum": ["bind", "volume", "tmpfs"] },
382
+ "consistency": { "type": "string", "enum": ["consistent", "cached", "delegated"] },
383
+ "cached": {
384
+ "type": "boolean",
385
+ "description": "Convenience alias for consistency: cached"
386
+ },
387
+ "readOnly": { "type": "boolean" },
388
+ "target": { "$ref": "#/$defs/projectMountTarget" }
389
+ },
390
+ "additionalProperties": false,
391
+ "oneOf": [{ "required": ["value"] }, { "required": ["source", "destination"] }]
392
+ },
393
+ "projectMountEntry": {
394
+ "oneOf": [
395
+ {
396
+ "type": "string",
397
+ "description": "Raw mount spec string"
398
+ },
399
+ {
400
+ "$ref": "#/$defs/projectMountObject"
401
+ }
402
+ ]
403
+ }
404
+ }
332
405
  }