container-superposition 0.1.7 → 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 (122) 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/doctor.d.ts.map +1 -1
  13. package/dist/tool/commands/doctor.js +141 -6
  14. package/dist/tool/commands/doctor.js.map +1 -1
  15. package/dist/tool/commands/explain.d.ts.map +1 -1
  16. package/dist/tool/commands/explain.js +9 -0
  17. package/dist/tool/commands/explain.js.map +1 -1
  18. package/dist/tool/commands/migrate.d.ts +7 -0
  19. package/dist/tool/commands/migrate.d.ts.map +1 -0
  20. package/dist/tool/commands/migrate.js +52 -0
  21. package/dist/tool/commands/migrate.js.map +1 -0
  22. package/dist/tool/questionnaire/answers.d.ts +16 -0
  23. package/dist/tool/questionnaire/answers.d.ts.map +1 -0
  24. package/dist/tool/questionnaire/answers.js +102 -0
  25. package/dist/tool/questionnaire/answers.js.map +1 -0
  26. package/dist/tool/questionnaire/composer.d.ts +3 -3
  27. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  28. package/dist/tool/questionnaire/composer.js +691 -27
  29. package/dist/tool/questionnaire/composer.js.map +1 -1
  30. package/dist/tool/questionnaire/presets.d.ts +60 -0
  31. package/dist/tool/questionnaire/presets.d.ts.map +1 -0
  32. package/dist/tool/questionnaire/presets.js +164 -0
  33. package/dist/tool/questionnaire/presets.js.map +1 -0
  34. package/dist/tool/questionnaire/questionnaire.d.ts +10 -0
  35. package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -0
  36. package/dist/tool/questionnaire/questionnaire.js +580 -0
  37. package/dist/tool/questionnaire/questionnaire.js.map +1 -0
  38. package/dist/tool/schema/manifest-migrations.d.ts +5 -0
  39. package/dist/tool/schema/manifest-migrations.d.ts.map +1 -1
  40. package/dist/tool/schema/manifest-migrations.js +45 -0
  41. package/dist/tool/schema/manifest-migrations.js.map +1 -1
  42. package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
  43. package/dist/tool/schema/overlay-loader.js +24 -0
  44. package/dist/tool/schema/overlay-loader.js.map +1 -1
  45. package/dist/tool/schema/project-config.d.ts +13 -1
  46. package/dist/tool/schema/project-config.d.ts.map +1 -1
  47. package/dist/tool/schema/project-config.js +183 -9
  48. package/dist/tool/schema/project-config.js.map +1 -1
  49. package/dist/tool/schema/target-rules.d.ts +78 -0
  50. package/dist/tool/schema/target-rules.d.ts.map +1 -0
  51. package/dist/tool/schema/target-rules.js +367 -0
  52. package/dist/tool/schema/target-rules.js.map +1 -0
  53. package/dist/tool/schema/types.d.ts +38 -1
  54. package/dist/tool/schema/types.d.ts.map +1 -1
  55. package/dist/tool/utils/parameters.d.ts +76 -0
  56. package/dist/tool/utils/parameters.d.ts.map +1 -0
  57. package/dist/tool/utils/parameters.js +125 -0
  58. package/dist/tool/utils/parameters.js.map +1 -0
  59. package/dist/tool/utils/paths.d.ts +2 -0
  60. package/dist/tool/utils/paths.d.ts.map +1 -0
  61. package/dist/tool/utils/paths.js +31 -0
  62. package/dist/tool/utils/paths.js.map +1 -0
  63. package/docs/deployment-targets.md +88 -56
  64. package/docs/examples.md +20 -17
  65. package/docs/filesystem-contract.md +5 -0
  66. package/docs/minimal-and-editor.md +65 -5
  67. package/docs/overlay-imports.md +92 -14
  68. package/docs/overlays.md +113 -28
  69. package/docs/specs/007-init-project-file/spec.md +66 -0
  70. package/docs/specs/007-target-aware-generation/spec.md +126 -0
  71. package/docs/specs/008-project-file-canonical/spec.md +83 -0
  72. package/docs/specs/009-project-env/spec.md +147 -0
  73. package/docs/specs/010-compose-env-materialization/spec.md +130 -0
  74. package/docs/specs/011-overlay-parameters/spec.md +235 -0
  75. package/overlays/.shared/README.md +27 -2
  76. package/overlays/.shared/compose/nvidia-gpu-devcontainer.yml +22 -0
  77. package/overlays/comfyui/.env.example +34 -0
  78. package/overlays/comfyui/README.md +342 -0
  79. package/overlays/comfyui/devcontainer.patch.json +15 -0
  80. package/overlays/comfyui/docker-compose.yml +39 -0
  81. package/overlays/comfyui/overlay.yml +20 -0
  82. package/overlays/comfyui/setup.sh +36 -0
  83. package/overlays/comfyui/verify.sh +103 -0
  84. package/overlays/k3d/README.md +201 -0
  85. package/overlays/k3d/devcontainer.patch.json +9 -0
  86. package/overlays/k3d/overlay.yml +19 -0
  87. package/overlays/k3d/setup.sh +34 -0
  88. package/overlays/k3d/verify.sh +38 -0
  89. package/overlays/ollama/.env.example +14 -0
  90. package/overlays/ollama/README.md +325 -0
  91. package/overlays/ollama/devcontainer.patch.json +14 -0
  92. package/overlays/ollama/docker-compose.yml +24 -0
  93. package/overlays/ollama/overlay.yml +22 -0
  94. package/overlays/ollama/setup.sh +106 -0
  95. package/overlays/ollama/verify.sh +99 -0
  96. package/overlays/open-webui/.env.example +5 -0
  97. package/overlays/open-webui/README.md +162 -0
  98. package/overlays/open-webui/devcontainer.patch.json +14 -0
  99. package/overlays/open-webui/docker-compose.yml +23 -0
  100. package/overlays/open-webui/overlay.yml +38 -0
  101. package/overlays/pgvector/.env.example +6 -0
  102. package/overlays/pgvector/README.md +215 -0
  103. package/overlays/pgvector/devcontainer.patch.json +23 -0
  104. package/overlays/pgvector/docker-compose.yml +32 -0
  105. package/overlays/pgvector/overlay.yml +44 -0
  106. package/overlays/postgres/.env.example +5 -5
  107. package/overlays/postgres/devcontainer.patch.json +4 -4
  108. package/overlays/postgres/docker-compose.yml +10 -6
  109. package/overlays/postgres/overlay.yml +19 -1
  110. package/overlays/qdrant/.env.example +4 -0
  111. package/overlays/qdrant/README.md +216 -0
  112. package/overlays/qdrant/devcontainer.patch.json +20 -0
  113. package/overlays/qdrant/docker-compose.yml +25 -0
  114. package/overlays/qdrant/overlay.yml +40 -0
  115. package/overlays/skaffold/README.md +256 -0
  116. package/overlays/skaffold/devcontainer.patch.json +9 -0
  117. package/overlays/skaffold/overlay.yml +20 -0
  118. package/overlays/skaffold/setup.sh +33 -0
  119. package/overlays/skaffold/verify.sh +24 -0
  120. package/package.json +3 -2
  121. package/tool/schema/config.schema.json +31 -1
  122. package/tool/schema/overlay-manifest.schema.json +33 -0
@@ -0,0 +1,40 @@
1
+ id: qdrant
2
+ name: Qdrant
3
+ description: High-performance vector database for similarity search and embeddings
4
+ category: database
5
+ supports:
6
+ - compose
7
+ requires: []
8
+ suggests:
9
+ - ollama
10
+ - python
11
+ - nodejs
12
+ conflicts: []
13
+ tags:
14
+ - database
15
+ - vector
16
+ - embeddings
17
+ - search
18
+ - qdrant
19
+ ports:
20
+ - port: 6333
21
+ service: qdrant
22
+ protocol: http
23
+ description: Qdrant REST API
24
+ onAutoForward: notify
25
+ connectionStringTemplate: 'http://{host}:{port}'
26
+ - port: 6334
27
+ service: qdrant
28
+ protocol: grpc
29
+ description: Qdrant gRPC API
30
+ onAutoForward: ignore
31
+ parameters:
32
+ QDRANT_VERSION:
33
+ description: Qdrant Docker image tag
34
+ default: latest
35
+ QDRANT_PORT:
36
+ description: Host port mapped to Qdrant REST API (6333 inside container)
37
+ default: '6333'
38
+ QDRANT_GRPC_PORT:
39
+ description: Host port mapped to Qdrant gRPC API (6334 inside container)
40
+ default: '6334'
@@ -0,0 +1,256 @@
1
+ # Skaffold Overlay
2
+
3
+ Installs [Skaffold](https://skaffold.dev), Google's command-line tool for continuous development on Kubernetes — handling the build, push, and deploy lifecycle automatically as source files change.
4
+
5
+ > **Note:** This overlay conflicts with `tilt` because both tools serve the same "continuous Kubernetes development" role. Choose `skaffold` for a configuration-file-driven, CI-friendly pipeline, or `tilt` for a more interactive, UI-driven workflow.
6
+
7
+ ## Features
8
+
9
+ - **`skaffold dev`** — Watch source files and automatically rebuild, push, and redeploy on changes
10
+ - **`skaffold run`** — One-shot build and deploy pipeline for CI/CD integration
11
+ - **Declarative config** — `skaffold.yaml` defines the entire build-test-deploy pipeline as code
12
+ - **Multiple builders** — Docker, Buildpacks, Bazel, Jib (Maven/Gradle), and more
13
+ - **Multiple deployers** — `kubectl`, Helm, Kustomize, and Cloud Run
14
+ - **Test integration** — Container Structure Tests and custom test steps built in
15
+ - **Profile support** — Swap out configs per environment (dev, staging, prod)
16
+
17
+ ## How It Works
18
+
19
+ Skaffold is installed as a static binary in the devcontainer during `setup.sh`. It orchestrates the build-push-deploy cycle against whichever Kubernetes cluster is active in your `kubeconfig` (e.g. a k3d or kind cluster).
20
+
21
+ **Suggested overlays:**
22
+
23
+ - `kubectl-helm` — Kubernetes CLI and Helm used as Skaffold deployers
24
+ - `kind` — Full-conformance local Kubernetes cluster
25
+ - `k3d` — Lightweight local Kubernetes cluster
26
+
27
+ ## Installation
28
+
29
+ Skaffold is installed automatically during devcontainer creation via `setup.sh`:
30
+
31
+ - Downloads the Skaffold binary for your architecture (amd64/arm64)
32
+ - Installs to `/usr/local/bin/skaffold`
33
+ - Verifies the installation
34
+
35
+ ## Common Commands
36
+
37
+ ### Development Workflow
38
+
39
+ ```bash
40
+ # Continuous development — rebuild and redeploy on file changes
41
+ skaffold dev
42
+
43
+ # One-shot build + deploy
44
+ skaffold run
45
+
46
+ # Delete all resources deployed by Skaffold
47
+ skaffold delete
48
+
49
+ # Preview what Skaffold would deploy (dry run)
50
+ skaffold render
51
+ ```
52
+
53
+ ### Build and Test
54
+
55
+ ```bash
56
+ # Build images only (no deploy)
57
+ skaffold build
58
+
59
+ # Run tests only
60
+ skaffold test
61
+
62
+ # Build and push to a registry
63
+ skaffold build --push
64
+ ```
65
+
66
+ ### Profiles
67
+
68
+ ```bash
69
+ # Use a specific profile
70
+ skaffold dev --profile staging
71
+
72
+ # Combine multiple profiles
73
+ skaffold run --profile prod --profile feature-flag
74
+ ```
75
+
76
+ ### Debugging
77
+
78
+ ```bash
79
+ # Enable port-forwarding for services
80
+ skaffold dev --port-forward
81
+
82
+ # Verbose output
83
+ skaffold dev -v debug
84
+
85
+ # Show rendered manifests
86
+ skaffold render --output manifests.yaml
87
+ ```
88
+
89
+ ## Configuration
90
+
91
+ ### skaffold.yaml
92
+
93
+ Create a `skaffold.yaml` in your project root:
94
+
95
+ ```yaml
96
+ apiVersion: skaffold/v4beta11
97
+ kind: Config
98
+ metadata:
99
+ name: my-app
100
+ build:
101
+ artifacts:
102
+ - image: my-app
103
+ docker:
104
+ dockerfile: Dockerfile
105
+ deploy:
106
+ kubectl:
107
+ manifests:
108
+ - k8s/*.yaml
109
+ test:
110
+ - image: my-app
111
+ structureTests:
112
+ - ./structure-test.yaml
113
+ profiles:
114
+ - name: prod
115
+ deploy:
116
+ helm:
117
+ releases:
118
+ - name: my-app
119
+ chartPath: helm/my-app
120
+ ```
121
+
122
+ ### Common Builders
123
+
124
+ ```yaml
125
+ # Docker (default)
126
+ build:
127
+ artifacts:
128
+ - image: my-app
129
+ docker:
130
+ dockerfile: Dockerfile
131
+
132
+ # Buildpacks (no Dockerfile needed)
133
+ build:
134
+ artifacts:
135
+ - image: my-app
136
+ buildpacks:
137
+ builder: gcr.io/buildpacks/builder:v1
138
+
139
+ # Jib (Java/Maven)
140
+ build:
141
+ artifacts:
142
+ - image: my-app
143
+ jib:
144
+ project: my-module
145
+ ```
146
+
147
+ ### Common Deployers
148
+
149
+ ```yaml
150
+ # kubectl (plain manifests)
151
+ deploy:
152
+ kubectl:
153
+ manifests:
154
+ - k8s/**/*.yaml
155
+
156
+ # Helm
157
+ deploy:
158
+ helm:
159
+ releases:
160
+ - name: my-app
161
+ chartPath: helm/my-app
162
+ valuesFiles:
163
+ - helm/values.yaml
164
+
165
+ # Kustomize
166
+ deploy:
167
+ kustomize:
168
+ paths:
169
+ - k8s/overlays/dev
170
+ ```
171
+
172
+ ## Benefits vs Tilt
173
+
174
+ | Feature | Skaffold (this overlay) | Tilt |
175
+ | --------------------- | --------------------------------- | -------------------------------- |
176
+ | **Primary interface** | ✅ CLI + skaffold.yaml config | Interactive UI (port 10350) |
177
+ | **CI/CD suitability** | ✅ First-class CI support | ⚠️ UI-oriented, less CI-friendly |
178
+ | **Config format** | ✅ Declarative YAML | Starlark/Python (Tiltfile) |
179
+ | **Build systems** | ✅ Docker, Buildpacks, Jib, Bazel | Docker, Buildpacks |
180
+ | **Deploy targets** | ✅ kubectl, Helm, Kustomize, Run | kubectl, Helm |
181
+ | **Learning curve** | Lower (declarative YAML) | Programmable (more flexible) |
182
+ | **Debugging support** | ✅ Built-in debug mode | ✅ Built-in live updates |
183
+
184
+ **Choose Skaffold when:**
185
+
186
+ - You want a declarative, portable, config-file-driven pipeline
187
+ - CI/CD integration is a priority
188
+ - You need support for multiple build systems (Jib, Buildpacks, Bazel)
189
+
190
+ **Choose Tilt when:**
191
+
192
+ - You prefer an interactive browser UI for development
193
+ - You want fine-grained control over the update pipeline via a Tiltfile
194
+
195
+ ## Use Cases
196
+
197
+ - **Inner loop acceleration** — Rebuild and redeploy Kubernetes workloads on save, without manual `docker build && kubectl apply`
198
+ - **Multi-service applications** — Manage build and deploy of multiple microservices from a single `skaffold.yaml`
199
+ - **CI/CD integration** — Use `skaffold run` in pipelines for consistent build-test-deploy flows
200
+ - **Helm chart development** — Iterate on Helm charts with live cluster feedback
201
+ - **GitOps preview environments** — Render manifests for inspection or PR previews
202
+
203
+ **Integrates well with:**
204
+
205
+ - `kubectl-helm` — Used by Skaffold's deploy pipeline
206
+ - `k3d` — Lightweight local cluster for development
207
+ - `kind` — Full-conformance local cluster for testing
208
+
209
+ ## Troubleshooting
210
+
211
+ ### No kubeconfig Found
212
+
213
+ ```bash
214
+ # Ensure kubectl is configured (kubectl-helm overlay must be selected)
215
+ kubectl cluster-info
216
+
217
+ # If using k3d, merge cluster config
218
+ k3d kubeconfig merge dev --kubeconfig-merge-default
219
+
220
+ # If using kind, kubeconfig is set automatically on cluster creation
221
+ kind create cluster --name dev
222
+ ```
223
+
224
+ ### Build Failures
225
+
226
+ ```bash
227
+ # Check Docker is accessible
228
+ docker info
229
+
230
+ # Run with verbose logging
231
+ skaffold dev -v debug
232
+ ```
233
+
234
+ ### Deploy Failures
235
+
236
+ ```bash
237
+ # View Kubernetes events
238
+ kubectl get events --sort-by='.lastTimestamp'
239
+
240
+ # Tail pod logs
241
+ kubectl logs -f deployment/my-app
242
+ ```
243
+
244
+ ## References
245
+
246
+ - [Skaffold Documentation](https://skaffold.dev/docs/)
247
+ - [Skaffold GitHub](https://github.com/GoogleContainerTools/skaffold)
248
+ - [skaffold.yaml Reference](https://skaffold.dev/docs/references/yaml/)
249
+ - [Kubernetes Documentation](https://kubernetes.io/docs/)
250
+
251
+ **Related Overlays:**
252
+
253
+ - [`kubectl-helm`](../kubectl-helm/README.md) — Kubernetes CLI and Helm (recommended with Skaffold)
254
+ - [`kind`](../kind/README.md) — Full-conformance local Kubernetes cluster
255
+ - [`k3d`](../k3d/README.md) — Lightweight local Kubernetes cluster
256
+ - [`tilt`](../tilt/README.md) — Alternative interactive Kubernetes development tool (conflicts)
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "features": {
4
+ "./features/cross-distro-packages": {
5
+ "apt": "curl",
6
+ "apk": "curl"
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,20 @@
1
+ id: skaffold
2
+ name: Skaffold
3
+ description: Continuous development and deployment pipeline for Kubernetes applications
4
+ category: dev
5
+ supports: []
6
+ requires: []
7
+ suggests:
8
+ - kubectl-helm
9
+ - kind
10
+ - k3d
11
+ conflicts:
12
+ - tilt
13
+ tags:
14
+ - dev
15
+ - kubernetes
16
+ - k8s
17
+ - cicd
18
+ - deployment
19
+ - skaffold
20
+ ports: []
@@ -0,0 +1,33 @@
1
+ #!/bin/bash
2
+ # Setup script for Skaffold
3
+
4
+ set -e
5
+
6
+ echo "🔧 Setting up Skaffold..."
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
+ SKAFFOLD_VERSION="${SKAFFOLD_VERSION:-v2.13.2}"
15
+ echo "📦 Installing Skaffold ${SKAFFOLD_VERSION}..."
16
+
17
+ install_binary \
18
+ "https://storage.googleapis.com/skaffold/releases/${SKAFFOLD_VERSION}/skaffold-linux-${CS_ARCH}" \
19
+ "skaffold"
20
+
21
+ # Verify installation
22
+ if command -v skaffold &>/dev/null; then
23
+ echo "✅ Skaffold installed successfully"
24
+ skaffold version
25
+ else
26
+ echo "❌ Skaffold installation failed"
27
+ exit 1
28
+ fi
29
+
30
+ echo "✅ Skaffold setup complete"
31
+ echo ""
32
+ echo "ℹ️ To start continuous development, run:"
33
+ echo " skaffold dev"
@@ -0,0 +1,24 @@
1
+ #!/bin/bash
2
+ # Verification script for Skaffold overlay
3
+ # Confirms Skaffold is installed
4
+
5
+ set -e
6
+
7
+ echo "🔍 Verifying Skaffold overlay..."
8
+ echo ""
9
+
10
+ # Check Skaffold is installed
11
+ echo "1️⃣ Checking Skaffold installation..."
12
+ if command -v skaffold &>/dev/null; then
13
+ skaffold version
14
+ echo " ✅ Skaffold is installed"
15
+ else
16
+ echo " ❌ Skaffold is not installed"
17
+ exit 1
18
+ fi
19
+
20
+ echo ""
21
+ echo "✅ Skaffold overlay verification complete"
22
+ echo ""
23
+ echo "ℹ️ To start continuous development, run:"
24
+ echo " skaffold dev"
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "container-superposition",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Solution-ready devcontainer templates and features with guided initialization",
5
5
  "type": "module",
6
6
  "main": "dist/scripts/init.js",
7
7
  "bin": {
8
- "container-superposition": "./dist/scripts/init.js"
8
+ "container-superposition": "./dist/scripts/init.js",
9
+ "cs": "./dist/scripts/init.js"
9
10
  },
10
11
  "scripts": {
11
12
  "build": "tsc",
@@ -249,6 +249,29 @@
249
249
  "enum": ["vscode", "jetbrains", "none"],
250
250
  "description": "Editor customization profile"
251
251
  },
252
+ "env": {
253
+ "type": "object",
254
+ "description": "Project-level environment variables routed to remoteEnv or docker-compose based on stack/target",
255
+ "additionalProperties": {
256
+ "oneOf": [
257
+ {
258
+ "type": "string"
259
+ },
260
+ {
261
+ "type": "object",
262
+ "properties": {
263
+ "value": { "type": "string" },
264
+ "target": {
265
+ "type": "string",
266
+ "enum": ["auto", "remoteEnv", "composeEnv"]
267
+ }
268
+ },
269
+ "required": ["value"],
270
+ "additionalProperties": false
271
+ }
272
+ ]
273
+ }
274
+ },
252
275
  "customizations": {
253
276
  "type": "object",
254
277
  "properties": {
@@ -260,12 +283,19 @@
260
283
  "type": "object",
261
284
  "description": "Additional docker-compose content merged during generation"
262
285
  },
286
+ "envTemplate": {
287
+ "type": "object",
288
+ "additionalProperties": {
289
+ "type": "string"
290
+ },
291
+ "description": "Variables written to .env.example; use env for runtime container environment"
292
+ },
263
293
  "environment": {
264
294
  "type": "object",
265
295
  "additionalProperties": {
266
296
  "type": "string"
267
297
  },
268
- "description": "Environment variables written to custom/environment.env"
298
+ "description": "Deprecated alias for envTemplate; variables written to .env.example"
269
299
  },
270
300
  "scripts": {
271
301
  "type": "object",
@@ -136,6 +136,14 @@
136
136
  },
137
137
  "default": []
138
138
  },
139
+ "compose_imports": {
140
+ "type": "array",
141
+ "description": "Shared docker-compose fragments to import from overlays/.shared/compose/ (merged before the overlay's own docker-compose.yml)",
142
+ "items": {
143
+ "type": "string"
144
+ },
145
+ "default": []
146
+ },
139
147
  "minimal": {
140
148
  "type": "boolean",
141
149
  "description": "Whether this overlay is excluded in minimal mode (true = extra/optional)",
@@ -145,6 +153,31 @@
145
153
  "type": "boolean",
146
154
  "description": "Whether this overlay is hidden from the interactive questionnaire (code-only use)",
147
155
  "default": false
156
+ },
157
+ "parameters": {
158
+ "type": "object",
159
+ "description": "Configurable parameters declared by this overlay. Users supply values in superposition.yml or via CLI. Substituted at generation time using {{cs.PARAM_NAME}} syntax.",
160
+ "additionalProperties": {
161
+ "type": "object",
162
+ "description": "Definition of a single overlay parameter",
163
+ "required": ["description"],
164
+ "properties": {
165
+ "description": {
166
+ "type": "string",
167
+ "description": "Human-readable explanation of the parameter, shown in interactive prompts"
168
+ },
169
+ "default": {
170
+ "type": "string",
171
+ "description": "Default value used when no value is supplied. Absence makes the parameter required."
172
+ },
173
+ "sensitive": {
174
+ "type": "boolean",
175
+ "description": "When true, the parameter value is treated as a secret — masked in interactive prompts and redacted in plan output",
176
+ "default": false
177
+ }
178
+ },
179
+ "additionalProperties": false
180
+ }
148
181
  }
149
182
  },
150
183
  "additionalProperties": false