container-superposition 0.1.5 → 0.1.7

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 (155) hide show
  1. package/README.md +3 -1
  2. package/dist/scripts/init.js +24 -4
  3. package/dist/scripts/init.js.map +1 -1
  4. package/dist/tool/commands/adopt.d.ts +3 -2
  5. package/dist/tool/commands/adopt.d.ts.map +1 -1
  6. package/dist/tool/commands/adopt.js +378 -67
  7. package/dist/tool/commands/adopt.js.map +1 -1
  8. package/dist/tool/commands/doctor.d.ts +3 -0
  9. package/dist/tool/commands/doctor.d.ts.map +1 -1
  10. package/dist/tool/commands/doctor.js +932 -69
  11. package/dist/tool/commands/doctor.js.map +1 -1
  12. package/dist/tool/commands/explain.d.ts.map +1 -1
  13. package/dist/tool/commands/explain.js +9 -0
  14. package/dist/tool/commands/explain.js.map +1 -1
  15. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  16. package/dist/tool/questionnaire/composer.js +212 -11
  17. package/dist/tool/questionnaire/composer.js.map +1 -1
  18. package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
  19. package/dist/tool/schema/overlay-loader.js +1 -0
  20. package/dist/tool/schema/overlay-loader.js.map +1 -1
  21. package/dist/tool/schema/project-config.d.ts +3 -1
  22. package/dist/tool/schema/project-config.d.ts.map +1 -1
  23. package/dist/tool/schema/project-config.js +164 -13
  24. package/dist/tool/schema/project-config.js.map +1 -1
  25. package/dist/tool/schema/types.d.ts +85 -11
  26. package/dist/tool/schema/types.d.ts.map +1 -1
  27. package/dist/tool/utils/merge.d.ts.map +1 -1
  28. package/dist/tool/utils/merge.js +9 -0
  29. package/dist/tool/utils/merge.js.map +1 -1
  30. package/docs/adopt.md +20 -14
  31. package/docs/creating-overlays.md +151 -2
  32. package/docs/overlay-imports.md +125 -102
  33. package/docs/overlays.md +59 -6
  34. package/docs/quick-reference.md +99 -0
  35. package/docs/specs/002-superposition-config-file/plan.md +6 -1
  36. package/docs/specs/002-superposition-config-file/spec.md +6 -0
  37. package/docs/specs/002-superposition-config-file/tasks.md +2 -0
  38. package/docs/specs/003-mkdocs2-overlay/spec.md +114 -0
  39. package/docs/specs/004-doctor-fix/spec.md +70 -0
  40. package/docs/specs/005-cuda-overlay/spec.md +101 -0
  41. package/docs/specs/006-rocm-overlay/spec.md +109 -0
  42. package/docs/team-workflow.md +7 -1
  43. package/docs/workflows.md +3 -0
  44. package/features/cross-distro-packages/README.md +18 -0
  45. package/features/cross-distro-packages/devcontainer-feature.json +3 -3
  46. package/features/cross-distro-packages/install.sh +49 -7
  47. package/overlays/.shared/README.md +80 -21
  48. package/overlays/.shared/compose/common-healthchecks.md +60 -0
  49. package/overlays/.shared/vscode/recommended-extensions.json +15 -11
  50. package/overlays/alertmanager/setup.sh +4 -19
  51. package/overlays/alertmanager/verify.sh +8 -9
  52. package/overlays/all/README.md +43 -0
  53. package/overlays/all/devcontainer.patch.json +6 -0
  54. package/overlays/all/overlay.yml +14 -0
  55. package/overlays/amp/setup.sh +5 -0
  56. package/overlays/bun/setup.sh +10 -1
  57. package/overlays/bun/verify.sh +6 -1
  58. package/overlays/claude-code/setup.sh +5 -0
  59. package/overlays/cloudflared/setup.sh +9 -12
  60. package/overlays/codex/README.md +9 -6
  61. package/overlays/codex/devcontainer.patch.json +7 -1
  62. package/overlays/codex/setup.sh +5 -0
  63. package/overlays/codex/verify.sh +8 -0
  64. package/overlays/commitlint/setup.sh +5 -0
  65. package/overlays/cuda/README.md +179 -0
  66. package/overlays/cuda/devcontainer.patch.json +7 -0
  67. package/overlays/cuda/overlay.yml +17 -0
  68. package/overlays/cuda/setup.sh +32 -0
  69. package/overlays/cuda/verify.sh +38 -0
  70. package/overlays/devcontainer-cli/README.md +50 -0
  71. package/overlays/devcontainer-cli/devcontainer.patch.json +13 -0
  72. package/overlays/devcontainer-cli/overlay.yml +16 -0
  73. package/overlays/devcontainer-cli/setup.sh +14 -0
  74. package/overlays/direnv/devcontainer.patch.json +6 -0
  75. package/overlays/direnv/setup.sh +7 -6
  76. package/overlays/dotnet/setup.sh +14 -7
  77. package/overlays/duckdb/devcontainer.patch.json +1 -2
  78. package/overlays/gcloud/devcontainer.patch.json +0 -6
  79. package/overlays/gcloud/setup.sh +51 -0
  80. package/overlays/gemini-cli/setup.sh +5 -0
  81. package/overlays/git-helpers/devcontainer.patch.json +2 -1
  82. package/overlays/go/setup.sh +15 -14
  83. package/overlays/jaeger/overlay.yml +2 -0
  84. package/overlays/just/setup.sh +5 -17
  85. package/overlays/keycloak/docker-compose.yml +6 -4
  86. package/overlays/keycloak/verify.sh +4 -3
  87. package/overlays/kind/devcontainer.patch.json +1 -2
  88. package/overlays/kind/setup.sh +8 -17
  89. package/overlays/minio/setup.sh +10 -18
  90. package/overlays/mkdocs/overlay.yml +2 -1
  91. package/overlays/mkdocs2/README.md +135 -0
  92. package/overlays/mkdocs2/devcontainer.patch.json +19 -0
  93. package/overlays/mkdocs2/overlay.yml +17 -0
  94. package/overlays/mkdocs2/setup.sh +67 -0
  95. package/overlays/mkdocs2/verify.sh +35 -0
  96. package/overlays/modern-cli-tools/devcontainer.patch.json +7 -1
  97. package/overlays/modern-cli-tools/setup.sh +21 -71
  98. package/overlays/mongodb/devcontainer.patch.json +0 -6
  99. package/overlays/mongodb/setup.sh +59 -0
  100. package/overlays/mysql/verify.sh +4 -3
  101. package/overlays/nats/.env.example +1 -1
  102. package/overlays/nats/README.md +1 -1
  103. package/overlays/nats/docker-compose.yml +1 -1
  104. package/overlays/ngrok/setup.sh +9 -6
  105. package/overlays/nodejs/setup.sh +5 -0
  106. package/overlays/openapi-tools/devcontainer.patch.json +1 -2
  107. package/overlays/openapi-tools/setup.sh +9 -8
  108. package/overlays/opencode/setup.sh +5 -0
  109. package/overlays/otel-collector/overlay.yml +2 -0
  110. package/overlays/otel-collector/setup.sh +3 -16
  111. package/overlays/otel-demo-nodejs/verify.sh +8 -9
  112. package/overlays/otel-demo-python/verify.sh +16 -10
  113. package/overlays/pandoc/README.md +286 -0
  114. package/overlays/pandoc/devcontainer.patch.json +18 -0
  115. package/overlays/pandoc/overlay.yml +19 -0
  116. package/overlays/pandoc/setup.sh +293 -0
  117. package/overlays/pandoc/verify.sh +25 -0
  118. package/overlays/playwright/devcontainer.patch.json +3 -1
  119. package/overlays/playwright/setup.sh +37 -0
  120. package/overlays/postgres/docker-compose.yml +6 -0
  121. package/overlays/powershell/setup.sh +49 -13
  122. package/overlays/pre-commit/setup.sh +12 -3
  123. package/overlays/prometheus/overlay.yml +2 -0
  124. package/overlays/promtail/verify.sh +16 -10
  125. package/overlays/pulumi/devcontainer.patch.json +1 -1
  126. package/overlays/python/setup.sh +28 -9
  127. package/overlays/python/verify.sh +4 -2
  128. package/overlays/redpanda/docker-compose.yml +3 -5
  129. package/overlays/rocm/README.md +227 -0
  130. package/overlays/rocm/devcontainer.patch.json +4 -0
  131. package/overlays/rocm/overlay.yml +17 -0
  132. package/overlays/rocm/setup.sh +45 -0
  133. package/overlays/rocm/verify.sh +47 -0
  134. package/overlays/rust/setup.sh +11 -18
  135. package/overlays/spec-kit/setup.sh +7 -3
  136. package/overlays/sqlite/setup.sh +14 -14
  137. package/overlays/sqlserver/docker-compose.yml +3 -3
  138. package/overlays/sqlserver/verify.sh +22 -5
  139. package/overlays/tempo/verify.sh +16 -10
  140. package/overlays/tilt/devcontainer.patch.json +1 -2
  141. package/overlays/tilt/setup.sh +14 -4
  142. package/overlays/windsurf-cli/setup.sh +27 -4
  143. package/overlays/windsurf-cli/verify.sh +13 -3
  144. package/package.json +2 -1
  145. package/templates/scripts/setup-utils.sh +228 -0
  146. package/tool/schema/config.schema.json +110 -8
  147. package/tool/schema/overlay-manifest.schema.json +5 -0
  148. package/overlays/.shared/compose/common-healthchecks.yml +0 -38
  149. /package/overlays/otel-demo-nodejs/{Dockerfile-otel-demo-nodejs → Dockerfile} +0 -0
  150. /package/overlays/otel-demo-nodejs/{package-otel-demo-nodejs.json → package.json} +0 -0
  151. /package/overlays/otel-demo-nodejs/{server-otel-demo-nodejs.js → server.js} +0 -0
  152. /package/overlays/otel-demo-nodejs/{tracing-otel-demo-nodejs.js → tracing.js} +0 -0
  153. /package/overlays/otel-demo-python/{Dockerfile-otel-demo-python → Dockerfile} +0 -0
  154. /package/overlays/otel-demo-python/{app-otel-demo-python.py → app.py} +0 -0
  155. /package/overlays/otel-demo-python/{requirements-otel-demo-python.txt → requirements.txt} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "container-superposition",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Solution-ready devcontainer templates and features with guided initialization",
5
5
  "type": "module",
6
6
  "main": "dist/scripts/init.js",
@@ -13,6 +13,7 @@
13
13
  "init:build": "npm run build && node dist/scripts/init.js",
14
14
  "test": "vitest run",
15
15
  "test:watch": "vitest",
16
+ "test:integration": "INTEGRATION=true vitest run tool/__tests__/overlay-features-integration.test.ts",
16
17
  "test:smoke": "bash scripts/test.sh",
17
18
  "docs:generate": "tsx docs/generate-docs.ts && prettier --write docs/overlays.md",
18
19
  "lint": "tsc --noEmit && npm run format:check",
@@ -0,0 +1,228 @@
1
+ #!/bin/bash
2
+ # Shared setup utilities for container-superposition overlay scripts.
3
+ # Sourced automatically: source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
4
+ #
5
+ # All setup scripts for selected overlays run in PARALLEL via postCreateCommand.
6
+ # Use the locking helpers below for any apt/dpkg operations.
7
+
8
+ # Suppress terminal-capability probes (OSC queries, colour-detection) and npm
9
+ # update notices that show up as garbage or noise in devcontainer build logs.
10
+ export NO_COLOR=1
11
+ export NPM_CONFIG_UPDATE_NOTIFIER=false
12
+ # TERM=dumb prevents most tools from querying cursor position or emitting ANSI
13
+ # escape sequences in non-interactive build logs.
14
+ export TERM=dumb
15
+
16
+ # ---------------------------------------------------------------------------
17
+ # Spinner helper
18
+ # ---------------------------------------------------------------------------
19
+
20
+ # Run a command silently while showing a spinner and a label.
21
+ # Stdout/stderr of the command are suppressed; only pass/fail is reported.
22
+ # Usage: run_spinner "Installing foo..." <command> [args...]
23
+ # Exit code: the exit code of <command>.
24
+ run_spinner() {
25
+ local label="$1"; shift
26
+ local rc
27
+
28
+ if [ -t 1 ]; then
29
+ # Interactive TTY: animated spinner with carriage-return overwriting.
30
+ local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
31
+ local i=0
32
+ "$@" &>/dev/null &
33
+ local pid=$!
34
+ while kill -0 "$pid" 2>/dev/null; do
35
+ printf "\r %s %s" "${spin:$((i % ${#spin})):1}" "$label"
36
+ sleep 0.1
37
+ (( i++ )) || true
38
+ done
39
+ wait "$pid"; rc=$?
40
+ if [ "$rc" -eq 0 ]; then
41
+ printf "\r ✓ %s\n" "$label"
42
+ else
43
+ printf "\r ✗ %s (exit %d)\n" "$label" "$rc"
44
+ fi
45
+ else
46
+ # Non-TTY (devcontainer build log, CI): emit a start line immediately
47
+ # so the log shows progress, then a done line when the command finishes.
48
+ # No carriage-return tricks — plain newlines so each line is visible.
49
+ printf " ⋯ %s\n" "$label"
50
+ "$@" &>/dev/null; rc=$?
51
+ if [ "$rc" -eq 0 ]; then
52
+ printf " ✓ %s\n" "$label"
53
+ else
54
+ printf " ✗ %s (exit %d)\n" "$label" "$rc"
55
+ fi
56
+ fi
57
+ return $rc
58
+ }
59
+
60
+ # ---------------------------------------------------------------------------
61
+ # Node.js / npm helpers
62
+ # ---------------------------------------------------------------------------
63
+
64
+ # Ensure npm (and node) are on PATH by loading nvm if needed.
65
+ # The devcontainer node feature installs via nvm; postCreateCommand scripts
66
+ # run in a non-interactive shell that may not have nvm on PATH.
67
+ # Safe to call multiple times (idempotent).
68
+ # Usage: load_nvm
69
+ load_nvm() {
70
+ if command -v npm &>/dev/null; then
71
+ return 0 # already on PATH
72
+ fi
73
+ local nvm_dir="${NVM_DIR:-/usr/local/share/nvm}"
74
+ # shellcheck disable=SC1091
75
+ if [ -s "$nvm_dir/nvm.sh" ]; then
76
+ TERM=dumb \. "$nvm_dir/nvm.sh" --no-use 2>/dev/null || true
77
+ fi
78
+ # Fallback: add the nvm current symlink bin directory to PATH
79
+ if ! command -v npm &>/dev/null && [ -d "$nvm_dir/current/bin" ]; then
80
+ export PATH="$nvm_dir/current/bin:$PATH"
81
+ fi
82
+ }
83
+
84
+ # ---------------------------------------------------------------------------
85
+ # APT / DPKG helpers
86
+ # ---------------------------------------------------------------------------
87
+
88
+ # Advisory lock file shared across all parallel postCreateCommand scripts.
89
+ _CS_APT_LOCK=/tmp/.cs-apt.lock
90
+
91
+ # Acquire an exclusive flock-based lock for apt/dpkg operations.
92
+ # Blocks until the lock is available or 300 s elapses (hard failure).
93
+ # The kernel releases the lock automatically on process exit for any reason.
94
+ acquire_apt_lock() {
95
+ exec 9>"$_CS_APT_LOCK"
96
+ echo "⏳ Acquiring apt lock..."
97
+ flock -w 300 9 || {
98
+ echo "❌ Timed out waiting for apt lock after 300s"
99
+ return 1
100
+ }
101
+ }
102
+
103
+ # Release the lock acquired by acquire_apt_lock.
104
+ release_apt_lock() {
105
+ flock -u 9 2>/dev/null || true
106
+ exec 9>&- 2>/dev/null || true
107
+ }
108
+
109
+ # Run a command inside an apt lock, releasing it even on failure.
110
+ # Usage: with_apt_lock <command> [args...]
111
+ # Example: with_apt_lock sudo apt-get install -y ripgrep
112
+ with_apt_lock() {
113
+ acquire_apt_lock || return 1
114
+ "$@"
115
+ local rc=$?
116
+ release_apt_lock
117
+ return $rc
118
+ }
119
+
120
+ # Run apt-get update + apt-get install under a single held lock.
121
+ # Usage: apt_install <package> [packages...]
122
+ apt_install() {
123
+ acquire_apt_lock || return 1
124
+ # Pass DEBIAN_FRONTEND and TERM explicitly: sudo strips environment by default.
125
+ sudo DEBIAN_FRONTEND=noninteractive TERM=dumb apt-get update -qq
126
+ sudo DEBIAN_FRONTEND=noninteractive TERM=dumb apt-get install -y -qq "$@"
127
+ local rc=$?
128
+ release_apt_lock
129
+ return $rc
130
+ }
131
+
132
+ # @deprecated — kept for backward compat; delegates to acquire_apt_lock.
133
+ wait_for_apt_lock() {
134
+ acquire_apt_lock
135
+ }
136
+
137
+ # Add a third-party apt repository with a GPG key.
138
+ # Does NOT require the apt lock — only writes key/sources files.
139
+ # Caller is responsible for calling apt-get update afterward (inside a lock).
140
+ # Usage: add_apt_repo <key-url> <keyring-path> <repo-line> <sources-file>
141
+ add_apt_repo() {
142
+ local key_url="$1"
143
+ local keyring_path="$2"
144
+ local repo_line="$3"
145
+ local sources_file="$4"
146
+
147
+ sudo mkdir -p "$(dirname "$keyring_path")" "$(dirname "$sources_file")"
148
+ curl -fsSL "$key_url" | sudo gpg --dearmor -o "$keyring_path"
149
+ echo "$repo_line" | sudo tee "$sources_file" >/dev/null
150
+ }
151
+
152
+ # ---------------------------------------------------------------------------
153
+ # Idempotency helpers
154
+ # ---------------------------------------------------------------------------
155
+
156
+ # Returns 0 if the command exists on PATH.
157
+ command_exists() {
158
+ command -v "$1" >/dev/null 2>&1
159
+ }
160
+
161
+ # Returns 0 if an apt package is installed.
162
+ apt_package_installed() {
163
+ dpkg -s "$1" >/dev/null 2>&1
164
+ }
165
+
166
+ # ---------------------------------------------------------------------------
167
+ # Architecture detection
168
+ # ---------------------------------------------------------------------------
169
+
170
+ # Sets CS_ARCH to "amd64" or "arm64" based on uname -m.
171
+ # Usage:
172
+ # detect_arch # returns 1 on unknown arch
173
+ # detect_arch amd64 # falls back to amd64 on unknown arch
174
+ detect_arch() {
175
+ local fallback="${1:-}"
176
+ local raw
177
+ raw=$(uname -m)
178
+ case "$raw" in
179
+ x86_64) CS_ARCH="amd64" ;;
180
+ aarch64|arm64) CS_ARCH="arm64" ;;
181
+ *)
182
+ if [ -n "$fallback" ]; then
183
+ echo "⚠️ Unsupported architecture: $raw, falling back to $fallback"
184
+ CS_ARCH="$fallback"
185
+ else
186
+ echo "❌ Unsupported architecture: $raw"
187
+ return 1
188
+ fi
189
+ ;;
190
+ esac
191
+ export CS_ARCH
192
+ }
193
+
194
+ # ---------------------------------------------------------------------------
195
+ # Binary installation helpers
196
+ # ---------------------------------------------------------------------------
197
+
198
+ # Download a single binary, install it to /usr/local/bin, clean up on failure.
199
+ # Usage: install_binary <url> <name> [mode]
200
+ install_binary() {
201
+ local url="$1"
202
+ local name="$2"
203
+ local mode="${3:-0755}"
204
+ local tmp
205
+ tmp=$(mktemp) || return 1
206
+ curl -fsSL "$url" -o "$tmp" || { rm -f "$tmp"; return 1; }
207
+ sudo install -m "$mode" "$tmp" "/usr/local/bin/$name"
208
+ local rc=$?
209
+ rm -f "$tmp"
210
+ return $rc
211
+ }
212
+
213
+ # Download a .tar.gz, extract a named binary, install to /usr/local/bin.
214
+ # Usage: install_binary_from_tar <url> <bin-in-archive> [dest-name] [mode]
215
+ install_binary_from_tar() {
216
+ local url="$1"
217
+ local bin_in_archive="$2"
218
+ local dest_name="${3:-$bin_in_archive}"
219
+ local mode="${4:-0755}"
220
+ local tmpdir
221
+ tmpdir=$(mktemp -d) || return 1
222
+ curl -fsSL "$url" -o "${tmpdir}/archive.tar.gz" || { rm -rf "$tmpdir"; return 1; }
223
+ tar -xzf "${tmpdir}/archive.tar.gz" -C "$tmpdir" "$bin_in_archive" || { rm -rf "$tmpdir"; return 1; }
224
+ sudo install -m "$mode" "${tmpdir}/${bin_in_archive}" "/usr/local/bin/${dest_name}"
225
+ local rc=$?
226
+ rm -rf "$tmpdir"
227
+ return $rc
228
+ }
@@ -34,6 +34,79 @@
34
34
  },
35
35
  "description": "Preset parameter choices keyed by parameter name"
36
36
  },
37
+ "overlays": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "string",
41
+ "enum": [
42
+ "alertmanager",
43
+ "amp",
44
+ "aws-cli",
45
+ "azure-cli",
46
+ "bun",
47
+ "claude-code",
48
+ "cloudflared",
49
+ "codex",
50
+ "commitlint",
51
+ "direnv",
52
+ "docker-in-docker",
53
+ "docker-sock",
54
+ "dotnet",
55
+ "duckdb",
56
+ "gcloud",
57
+ "gemini-cli",
58
+ "git-helpers",
59
+ "go",
60
+ "grafana",
61
+ "grpc-tools",
62
+ "jaeger",
63
+ "java",
64
+ "jupyter",
65
+ "just",
66
+ "keycloak",
67
+ "kind",
68
+ "kubectl-helm",
69
+ "localstack",
70
+ "loki",
71
+ "mailpit",
72
+ "minio",
73
+ "mkdocs",
74
+ "modern-cli-tools",
75
+ "mongodb",
76
+ "mysql",
77
+ "nats",
78
+ "ngrok",
79
+ "nodejs",
80
+ "openapi-tools",
81
+ "opencode",
82
+ "otel-collector",
83
+ "otel-demo-nodejs",
84
+ "otel-demo-python",
85
+ "pandoc",
86
+ "playwright",
87
+ "postgres",
88
+ "powershell",
89
+ "pre-commit",
90
+ "prometheus",
91
+ "promtail",
92
+ "pulumi",
93
+ "python",
94
+ "rabbitmq",
95
+ "redis",
96
+ "redpanda",
97
+ "rust",
98
+ "spec-kit",
99
+ "sqlite",
100
+ "sqlserver",
101
+ "tempo",
102
+ "terraform",
103
+ "tilt",
104
+ "windsurf-cli"
105
+ ]
106
+ },
107
+ "default": [],
108
+ "description": "Flat list of overlay IDs to include (preferred). Accepts any overlay regardless of category."
109
+ },
37
110
  "language": {
38
111
  "type": "array",
39
112
  "items": {
@@ -47,11 +120,12 @@
47
120
  "go",
48
121
  "rust",
49
122
  "bun",
123
+ "jupyter",
50
124
  "powershell"
51
125
  ]
52
126
  },
53
127
  "default": [],
54
- "description": "Language/framework overlays"
128
+ "description": "Deprecated: use 'overlays' instead. Language/framework overlays (kept for backward compatibility)."
55
129
  },
56
130
  "database": {
57
131
  "type": "array",
@@ -64,6 +138,7 @@
64
138
  "mysql",
65
139
  "sqlserver",
66
140
  "sqlite",
141
+ "duckdb",
67
142
  "minio",
68
143
  "rabbitmq",
69
144
  "redpanda",
@@ -71,21 +146,31 @@
71
146
  ]
72
147
  },
73
148
  "default": [],
74
- "description": "Database overlays"
149
+ "description": "Deprecated: use 'overlays' instead. Database overlays (kept for backward compatibility)."
75
150
  },
76
151
  "playwright": {
77
152
  "type": "boolean",
78
153
  "default": false,
79
- "description": "Include Playwright for browser automation"
154
+ "description": "Deprecated: use 'overlays: [playwright]' instead. Include Playwright for browser automation (kept for backward compatibility)."
80
155
  },
81
156
  "cloudTools": {
82
157
  "type": "array",
83
158
  "items": {
84
159
  "type": "string",
85
- "enum": ["azure-cli", "aws-cli", "gcloud", "kubectl-helm", "terraform", "pulumi"]
160
+ "enum": [
161
+ "azure-cli",
162
+ "aws-cli",
163
+ "gcloud",
164
+ "cloudflared",
165
+ "kubectl-helm",
166
+ "kind",
167
+ "localstack",
168
+ "terraform",
169
+ "pulumi"
170
+ ]
86
171
  },
87
172
  "default": [],
88
- "description": "Cloud/orchestration tools to include"
173
+ "description": "Deprecated: use 'overlays' instead. Cloud/orchestration tools (kept for backward compatibility)."
89
174
  },
90
175
  "devTools": {
91
176
  "type": "array",
@@ -97,13 +182,19 @@
97
182
  "codex",
98
183
  "playwright",
99
184
  "git-helpers",
185
+ "grpc-tools",
186
+ "keycloak",
187
+ "mailpit",
100
188
  "pre-commit",
101
189
  "commitlint",
102
190
  "just",
103
191
  "direnv",
104
192
  "modern-cli-tools",
105
193
  "ngrok",
194
+ "openapi-tools",
195
+ "pandoc",
106
196
  "spec-kit",
197
+ "tilt",
107
198
  "claude-code",
108
199
  "gemini-cli",
109
200
  "amp",
@@ -112,16 +203,27 @@
112
203
  ]
113
204
  },
114
205
  "default": [],
115
- "description": "Developer tooling overlays"
206
+ "description": "Deprecated: use 'overlays' instead. Developer tooling overlays (kept for backward compatibility)."
116
207
  },
117
208
  "observability": {
118
209
  "type": "array",
119
210
  "items": {
120
211
  "type": "string",
121
- "enum": ["otel-collector", "jaeger", "prometheus", "grafana", "loki"]
212
+ "enum": [
213
+ "alertmanager",
214
+ "otel-collector",
215
+ "otel-demo-nodejs",
216
+ "otel-demo-python",
217
+ "jaeger",
218
+ "prometheus",
219
+ "promtail",
220
+ "grafana",
221
+ "loki",
222
+ "tempo"
223
+ ]
122
224
  },
123
225
  "default": [],
124
- "description": "Observability tools to include"
226
+ "description": "Deprecated: use 'overlays' instead. Observability tools (kept for backward compatibility)."
125
227
  },
126
228
  "portOffset": {
127
229
  "type": "number",
@@ -140,6 +140,11 @@
140
140
  "type": "boolean",
141
141
  "description": "Whether this overlay is excluded in minimal mode (true = extra/optional)",
142
142
  "default": false
143
+ },
144
+ "hidden": {
145
+ "type": "boolean",
146
+ "description": "Whether this overlay is hidden from the interactive questionnaire (code-only use)",
147
+ "default": false
143
148
  }
144
149
  },
145
150
  "additionalProperties": false
@@ -1,38 +0,0 @@
1
- # Common Docker Compose Healthcheck Patterns
2
- # These can be referenced by overlays to ensure consistent healthcheck configuration
3
-
4
- healthchecks:
5
- http:
6
- test: ['CMD-SHELL', 'curl -f http://localhost:${PORT}/health || exit 1']
7
- interval: 30s
8
- timeout: 10s
9
- retries: 3
10
- start_period: 40s
11
-
12
- postgres:
13
- test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER:-postgres}']
14
- interval: 10s
15
- timeout: 5s
16
- retries: 5
17
- start_period: 10s
18
-
19
- redis:
20
- test: ['CMD', 'redis-cli', 'ping']
21
- interval: 10s
22
- timeout: 5s
23
- retries: 5
24
- start_period: 10s
25
-
26
- mongodb:
27
- test: ['CMD', 'mongosh', '--eval', "db.adminCommand('ping')"]
28
- interval: 10s
29
- timeout: 5s
30
- retries: 5
31
- start_period: 10s
32
-
33
- mysql:
34
- test: ['CMD', 'mysqladmin', 'ping', '-h', 'localhost']
35
- interval: 10s
36
- timeout: 5s
37
- retries: 5
38
- start_period: 10s