container-superposition 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/README.md +24 -15
  2. package/dist/scripts/init.js +1 -1537
  3. package/dist/scripts/init.js.map +1 -1
  4. package/dist/tool/cli/args.d.ts +20 -0
  5. package/dist/tool/cli/args.d.ts.map +1 -0
  6. package/dist/tool/cli/args.js +325 -0
  7. package/dist/tool/cli/args.js.map +1 -0
  8. package/dist/tool/cli/run.d.ts +2 -0
  9. package/dist/tool/cli/run.d.ts.map +1 -0
  10. package/dist/tool/cli/run.js +318 -0
  11. package/dist/tool/cli/run.js.map +1 -0
  12. package/dist/tool/commands/adopt.js +1 -1
  13. package/dist/tool/commands/adopt.js.map +1 -1
  14. package/dist/tool/commands/doctor.d.ts +1 -0
  15. package/dist/tool/commands/doctor.d.ts.map +1 -1
  16. package/dist/tool/commands/doctor.js +1510 -78
  17. package/dist/tool/commands/doctor.js.map +1 -1
  18. package/dist/tool/commands/explain.d.ts.map +1 -1
  19. package/dist/tool/commands/explain.js +9 -0
  20. package/dist/tool/commands/explain.js.map +1 -1
  21. package/dist/tool/commands/migrate.d.ts +7 -0
  22. package/dist/tool/commands/migrate.d.ts.map +1 -0
  23. package/dist/tool/commands/migrate.js +52 -0
  24. package/dist/tool/commands/migrate.js.map +1 -0
  25. package/dist/tool/questionnaire/answers.d.ts +16 -0
  26. package/dist/tool/questionnaire/answers.d.ts.map +1 -0
  27. package/dist/tool/questionnaire/answers.js +102 -0
  28. package/dist/tool/questionnaire/answers.js.map +1 -0
  29. package/dist/tool/questionnaire/composer.d.ts +6 -4
  30. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  31. package/dist/tool/questionnaire/composer.js +778 -45
  32. package/dist/tool/questionnaire/composer.js.map +1 -1
  33. package/dist/tool/questionnaire/presets.d.ts +60 -0
  34. package/dist/tool/questionnaire/presets.d.ts.map +1 -0
  35. package/dist/tool/questionnaire/presets.js +165 -0
  36. package/dist/tool/questionnaire/presets.js.map +1 -0
  37. package/dist/tool/questionnaire/questionnaire.d.ts +10 -0
  38. package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -0
  39. package/dist/tool/questionnaire/questionnaire.js +582 -0
  40. package/dist/tool/questionnaire/questionnaire.js.map +1 -0
  41. package/dist/tool/schema/manifest-migrations.d.ts +5 -0
  42. package/dist/tool/schema/manifest-migrations.d.ts.map +1 -1
  43. package/dist/tool/schema/manifest-migrations.js +45 -0
  44. package/dist/tool/schema/manifest-migrations.js.map +1 -1
  45. package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
  46. package/dist/tool/schema/overlay-loader.js +24 -0
  47. package/dist/tool/schema/overlay-loader.js.map +1 -1
  48. package/dist/tool/schema/project-config.d.ts +13 -1
  49. package/dist/tool/schema/project-config.d.ts.map +1 -1
  50. package/dist/tool/schema/project-config.js +188 -10
  51. package/dist/tool/schema/project-config.js.map +1 -1
  52. package/dist/tool/schema/target-rules.d.ts +78 -0
  53. package/dist/tool/schema/target-rules.d.ts.map +1 -0
  54. package/dist/tool/schema/target-rules.js +367 -0
  55. package/dist/tool/schema/target-rules.js.map +1 -0
  56. package/dist/tool/schema/types.d.ts +42 -3
  57. package/dist/tool/schema/types.d.ts.map +1 -1
  58. package/dist/tool/utils/parameters.d.ts +76 -0
  59. package/dist/tool/utils/parameters.d.ts.map +1 -0
  60. package/dist/tool/utils/parameters.js +125 -0
  61. package/dist/tool/utils/parameters.js.map +1 -0
  62. package/dist/tool/utils/paths.d.ts +2 -0
  63. package/dist/tool/utils/paths.d.ts.map +1 -0
  64. package/dist/tool/utils/paths.js +31 -0
  65. package/dist/tool/utils/paths.js.map +1 -0
  66. package/docs/deployment-targets.md +88 -56
  67. package/docs/examples.md +20 -17
  68. package/docs/filesystem-contract.md +5 -0
  69. package/docs/minimal-and-editor.md +65 -5
  70. package/docs/overlay-imports.md +92 -14
  71. package/docs/overlays.md +231 -135
  72. package/docs/specs/001-verbose-plan-graph/spec.md +5 -12
  73. package/docs/specs/002-superposition-config-file/spec.md +5 -12
  74. package/docs/specs/003-mkdocs2-overlay/spec.md +2 -9
  75. package/docs/specs/004-doctor-fix/spec.md +1 -8
  76. package/docs/specs/005-cuda-overlay/spec.md +2 -9
  77. package/docs/specs/006-rocm-overlay/spec.md +3 -10
  78. package/docs/specs/007-target-aware-generation/spec.md +119 -0
  79. package/docs/specs/008-project-file-canonical/spec.md +82 -0
  80. package/docs/specs/009-project-env/spec.md +140 -0
  81. package/docs/specs/010-compose-env-materialization/spec.md +123 -0
  82. package/docs/specs/011-overlay-parameters/spec.md +228 -0
  83. package/docs/specs/012-ollama-cli-overlay/spec.md +47 -0
  84. package/docs/specs/013-doctor-dependency-check/spec.md +250 -0
  85. package/docs/specs/014-doctor-compose-port-cross-validation/spec.md +276 -0
  86. package/docs/specs/015-doctor-env-example-drift/spec.md +248 -0
  87. package/docs/specs/016-doctor-reproducibility-check/spec.md +276 -0
  88. package/docs/specs/017-doctor-dry-run/spec.md +276 -0
  89. package/docs/specs/018-init-project-file/spec.md +59 -0
  90. package/docs/specs/taxonomy.md +186 -0
  91. package/overlays/.presets/full-observability.yml +113 -0
  92. package/overlays/.presets/k8s-dev.yml +174 -0
  93. package/overlays/.presets/local-llm.yml +105 -0
  94. package/overlays/.presets/vector-ai.yml +150 -0
  95. package/overlays/.shared/README.md +27 -2
  96. package/overlays/.shared/compose/nvidia-gpu-devcontainer.yml +22 -0
  97. package/overlays/.shared/vscode/js-ts-settings.json +19 -0
  98. package/overlays/.shared/vscode/markdown-extensions.json +8 -0
  99. package/overlays/alertmanager/devcontainer.patch.json +0 -1
  100. package/overlays/alertmanager/docker-compose.yml +8 -0
  101. package/overlays/alertmanager/overlay.yml +1 -0
  102. package/overlays/amp/devcontainer.patch.json +4 -1
  103. package/overlays/bun/devcontainer.patch.json +1 -10
  104. package/overlays/bun/overlay.yml +8 -1
  105. package/overlays/claude-code/devcontainer.patch.json +6 -1
  106. package/overlays/codex/devcontainer.patch.json +5 -0
  107. package/overlays/comfyui/.env.example +34 -0
  108. package/overlays/comfyui/README.md +342 -0
  109. package/overlays/comfyui/devcontainer.patch.json +15 -0
  110. package/overlays/comfyui/docker-compose.yml +40 -0
  111. package/overlays/comfyui/overlay.yml +24 -0
  112. package/overlays/comfyui/setup.sh +36 -0
  113. package/overlays/comfyui/verify.sh +103 -0
  114. package/overlays/commitlint/devcontainer.patch.json +1 -6
  115. package/overlays/docker-sock/overlay.yml +1 -0
  116. package/overlays/dotnet/overlay.yml +4 -1
  117. package/overlays/fuseki/.env.example +5 -0
  118. package/overlays/fuseki/README.md +173 -0
  119. package/overlays/fuseki/devcontainer.patch.json +18 -0
  120. package/overlays/fuseki/docker-compose.yml +29 -0
  121. package/overlays/fuseki/overlay.yml +42 -0
  122. package/overlays/fuseki/verify.sh +58 -0
  123. package/overlays/gemini-cli/devcontainer.patch.json +4 -1
  124. package/overlays/go/overlay.yml +6 -1
  125. package/overlays/grafana/devcontainer.patch.json +0 -1
  126. package/overlays/grafana/docker-compose.yml +8 -2
  127. package/overlays/grafana/overlay.yml +6 -1
  128. package/overlays/jaeger/.env.example +11 -0
  129. package/overlays/jaeger/README.md +33 -4
  130. package/overlays/jaeger/devcontainer.patch.json +9 -1
  131. package/overlays/jaeger/docker-compose.yml +17 -0
  132. package/overlays/jaeger/overlay.yml +1 -12
  133. package/overlays/java/overlay.yml +6 -1
  134. package/overlays/jupyter/docker-compose.yml +1 -0
  135. package/overlays/jupyter/overlay.yml +1 -0
  136. package/overlays/k3d/README.md +201 -0
  137. package/overlays/k3d/devcontainer.patch.json +9 -0
  138. package/overlays/k3d/overlay.yml +19 -0
  139. package/overlays/k3d/setup.sh +34 -0
  140. package/overlays/k3d/verify.sh +38 -0
  141. package/overlays/keycloak/devcontainer.patch.json +0 -1
  142. package/overlays/keycloak/docker-compose.yml +1 -0
  143. package/overlays/keycloak/overlay.yml +15 -0
  144. package/overlays/localstack/docker-compose.yml +1 -0
  145. package/overlays/localstack/overlay.yml +19 -1
  146. package/overlays/loki/devcontainer.patch.json +0 -1
  147. package/overlays/loki/docker-compose.yml +8 -0
  148. package/overlays/loki/overlay.yml +1 -0
  149. package/overlays/mailpit/docker-compose.yml +1 -0
  150. package/overlays/mailpit/overlay.yml +1 -0
  151. package/overlays/minio/devcontainer.patch.json +1 -1
  152. package/overlays/minio/docker-compose.yml +1 -0
  153. package/overlays/minio/overlay.yml +23 -2
  154. package/overlays/mkdocs/devcontainer.patch.json +1 -5
  155. package/overlays/mkdocs/overlay.yml +3 -1
  156. package/overlays/mkdocs2/devcontainer.patch.json +1 -5
  157. package/overlays/mkdocs2/overlay.yml +2 -0
  158. package/overlays/mongodb/docker-compose.yml +2 -0
  159. package/overlays/mongodb/overlay.yml +26 -2
  160. package/overlays/mysql/docker-compose.yml +2 -0
  161. package/overlays/mysql/overlay.yml +36 -2
  162. package/overlays/nats/docker-compose.yml +1 -0
  163. package/overlays/nats/overlay.yml +18 -2
  164. package/overlays/nodejs/devcontainer.patch.json +1 -12
  165. package/overlays/nodejs/overlay.yml +8 -1
  166. package/overlays/ollama/.env.example +14 -0
  167. package/overlays/ollama/README.md +326 -0
  168. package/overlays/ollama/devcontainer.patch.json +14 -0
  169. package/overlays/ollama/docker-compose.yml +25 -0
  170. package/overlays/ollama/overlay.yml +27 -0
  171. package/overlays/ollama/verify.sh +76 -0
  172. package/overlays/ollama-cli/README.md +90 -0
  173. package/overlays/ollama-cli/devcontainer.patch.json +3 -0
  174. package/overlays/ollama-cli/overlay.yml +19 -0
  175. package/overlays/ollama-cli/setup.sh +103 -0
  176. package/overlays/ollama-cli/verify.sh +49 -0
  177. package/overlays/open-webui/.env.example +5 -0
  178. package/overlays/open-webui/README.md +162 -0
  179. package/overlays/open-webui/devcontainer.patch.json +14 -0
  180. package/overlays/open-webui/docker-compose.yml +24 -0
  181. package/overlays/open-webui/overlay.yml +45 -0
  182. package/overlays/opencode/devcontainer.patch.json +4 -1
  183. package/overlays/otel-collector/README.md +4 -0
  184. package/overlays/otel-collector/devcontainer.patch.json +4 -1
  185. package/overlays/otel-collector/docker-compose.yml +8 -4
  186. package/overlays/otel-collector/overlay.yml +1 -0
  187. package/overlays/otel-demo-nodejs/devcontainer.patch.json +0 -1
  188. package/overlays/otel-demo-nodejs/docker-compose.yml +1 -0
  189. package/overlays/otel-demo-nodejs/overlay.yml +9 -1
  190. package/overlays/otel-demo-python/devcontainer.patch.json +0 -1
  191. package/overlays/otel-demo-python/docker-compose.yml +1 -0
  192. package/overlays/otel-demo-python/overlay.yml +6 -1
  193. package/overlays/pandoc/README.md +10 -0
  194. package/overlays/pandoc/devcontainer.patch.json +0 -5
  195. package/overlays/pandoc/overlay.yml +2 -0
  196. package/overlays/pandoc/setup.sh +10 -0
  197. package/overlays/pgvector/.env.example +6 -0
  198. package/overlays/pgvector/README.md +215 -0
  199. package/overlays/pgvector/devcontainer.patch.json +29 -0
  200. package/overlays/pgvector/docker-compose.yml +33 -0
  201. package/overlays/pgvector/overlay.yml +47 -0
  202. package/overlays/playwright/devcontainer.patch.json +0 -5
  203. package/overlays/playwright/overlay.yml +2 -1
  204. package/overlays/postgres/.env.example +5 -5
  205. package/overlays/postgres/devcontainer.patch.json +4 -4
  206. package/overlays/postgres/docker-compose.yml +11 -6
  207. package/overlays/postgres/overlay.yml +23 -2
  208. package/overlays/pre-commit/devcontainer.patch.json +1 -7
  209. package/overlays/prometheus/devcontainer.patch.json +0 -1
  210. package/overlays/prometheus/docker-compose.yml +8 -0
  211. package/overlays/prometheus/overlay.yml +1 -0
  212. package/overlays/promtail/devcontainer.patch.json +1 -2
  213. package/overlays/promtail/docker-compose.yml +8 -0
  214. package/overlays/promtail/overlay.yml +1 -0
  215. package/overlays/qdrant/.env.example +4 -0
  216. package/overlays/qdrant/README.md +216 -0
  217. package/overlays/qdrant/devcontainer.patch.json +20 -0
  218. package/overlays/qdrant/docker-compose.yml +26 -0
  219. package/overlays/qdrant/overlay.yml +44 -0
  220. package/overlays/rabbitmq/docker-compose.yml +1 -0
  221. package/overlays/rabbitmq/overlay.yml +25 -2
  222. package/overlays/redis/docker-compose.yml +7 -0
  223. package/overlays/redis/overlay.yml +15 -1
  224. package/overlays/redpanda/docker-compose.yml +1 -0
  225. package/overlays/redpanda/overlay.yml +15 -3
  226. package/overlays/rocm/overlay.yml +2 -1
  227. package/overlays/rust/overlay.yml +3 -1
  228. package/overlays/skaffold/README.md +256 -0
  229. package/overlays/skaffold/devcontainer.patch.json +9 -0
  230. package/overlays/skaffold/overlay.yml +20 -0
  231. package/overlays/skaffold/setup.sh +33 -0
  232. package/overlays/skaffold/verify.sh +24 -0
  233. package/overlays/sqlserver/docker-compose.yml +1 -0
  234. package/overlays/sqlserver/overlay.yml +17 -0
  235. package/overlays/tempo/devcontainer.patch.json +0 -1
  236. package/overlays/tempo/docker-compose.yml +8 -0
  237. package/overlays/tempo/overlay.yml +1 -0
  238. package/overlays/windsurf-cli/devcontainer.patch.json +4 -1
  239. package/package.json +3 -2
  240. package/tool/schema/config.schema.json +31 -1
  241. package/tool/schema/overlay-manifest.schema.json +33 -0
  242. package/overlays/.shared/otel/otel-base-config.yaml +0 -30
@@ -13,21 +13,10 @@
13
13
  },
14
14
  "customizations": {
15
15
  "vscode": {
16
- "extensions": [
17
- "dbaeumer.vscode-eslint",
18
- "esbenp.prettier-vscode",
19
- "christian-kohler.npm-intellisense"
20
- ],
16
+ "extensions": ["christian-kohler.npm-intellisense"],
21
17
  "settings": {
22
- "editor.defaultFormatter": "esbenp.prettier-vscode",
23
18
  "editor.codeActionsOnSave": {
24
19
  "source.fixAll.eslint": "explicit"
25
- },
26
- "[typescript]": {
27
- "editor.defaultFormatter": "esbenp.prettier-vscode"
28
- },
29
- "[javascript]": {
30
- "editor.defaultFormatter": "esbenp.prettier-vscode"
31
20
  }
32
21
  }
33
22
  }
@@ -5,10 +5,17 @@ category: language
5
5
  supports: []
6
6
  requires: []
7
7
  suggests: []
8
- conflicts: []
8
+ conflicts:
9
+ - grafana
10
+ - open-webui
11
+ - mysql
12
+ - redpanda
13
+ - otel-demo-nodejs
9
14
  tags:
10
15
  - language
11
16
  - nodejs
12
17
  - javascript
13
18
  - typescript
14
19
  ports: []
20
+ imports:
21
+ - .shared/vscode/js-ts-settings.json
@@ -0,0 +1,14 @@
1
+ # Ollama Configuration
2
+
3
+ # Path to the Ollama data directory on the host machine.
4
+ # Defaults to ~/.ollama — models downloaded there are available without re-pull.
5
+ # Override to use a different directory, e.g. an external drive:
6
+ # OLLAMA_MODELS_PATH=/Volumes/BigDrive/ollama
7
+ # Windows users: set this explicitly, e.g. OLLAMA_MODELS_PATH=C:/Users/you/.ollama
8
+ OLLAMA_MODELS_PATH=~/.ollama
9
+
10
+ # Ollama image version (defaults to latest)
11
+ OLLAMA_VERSION=latest
12
+
13
+ # Host port for the Ollama API (defaults to 11434)
14
+ OLLAMA_PORT=11434
@@ -0,0 +1,326 @@
1
+ # Ollama Overlay
2
+
3
+ Runs [Ollama](https://ollama.com) as a Docker Compose service inside the devcontainer, enabling local LLM inference without leaving the dev environment. This overlay automatically requires `ollama-cli`, so the Ollama CLI is also available in the devcontainer terminal.
4
+
5
+ ## Features
6
+
7
+ - **Ollama inference server** — Run large language models locally with a simple REST API
8
+ - **Ollama CLI in devcontainer** — Manage models and run inference with `ollama pull / run / list / rm` from the terminal without SSH-ing into the sidecar
9
+ - **OpenAI-compatible endpoint** — Drop-in replacement for many OpenAI API integrations
10
+ - **Pre-configured `OLLAMA_HOST`** — Points automatically at the sidecar; no manual setup required
11
+ - **Host model reuse** — Mounts your host's `~/.ollama` directory so models are shared without re-downloading
12
+ - **GPU passthrough** — Both the `ollama` sidecar and the devcontainer itself get access to all NVIDIA GPUs via the `deploy.resources.reservations.devices` block
13
+ - **Port 11434** — Standard Ollama API port, accessible from the devcontainer as `http://ollama:11434`
14
+
15
+ ## How It Works
16
+
17
+ Ollama runs as a long-lived Docker Compose service (`ollama`) alongside your devcontainer. The devcontainer connects to it using the hostname `ollama` on port `11434`.
18
+
19
+ **Service configuration:**
20
+
21
+ - Image: `ollama/ollama:latest`
22
+ - Network: `devnet` (shared with the dev container)
23
+ - Port: `11434` (REST API)
24
+ - Volume: `${OLLAMA_MODELS_PATH:-~/.ollama}:/root/.ollama` — mounts the host Ollama data directory
25
+
26
+ The `OLLAMA_HOST` environment variable is set to `http://ollama:11434` in the devcontainer, so the Ollama CLI and any tools that respect this variable will connect to the sidecar automatically.
27
+
28
+ The Ollama CLI installation is provided by the required [`ollama-cli`](../ollama-cli/README.md) overlay. This keeps service responsibilities (`ollama`) and CLI responsibilities (`ollama-cli`) separated while preserving the same day-to-day user experience.
29
+
30
+ ## Mapping Host Models into the Container
31
+
32
+ This is the most important feature for day-to-day use. Models downloaded via `ollama pull` on the **host machine** are stored in `~/.ollama/models` (macOS/Linux) or `%USERPROFILE%\.ollama\models` (Windows). Re-downloading multi-gigabyte models inside the container on every rebuild is wasteful.
33
+
34
+ ### Default Behaviour
35
+
36
+ The compose volume `${OLLAMA_MODELS_PATH:-~/.ollama}:/root/.ollama` automatically mounts the host's default Ollama data directory. Any model already pulled on the host is immediately available inside the container — no re-download required.
37
+
38
+ ### Override Path
39
+
40
+ Set `OLLAMA_MODELS_PATH` in `.devcontainer/.env` to point at a different directory, for example an external drive with large models:
41
+
42
+ ```bash
43
+ # .devcontainer/.env
44
+ OLLAMA_MODELS_PATH=/Volumes/BigDrive/ollama
45
+ ```
46
+
47
+ ### Windows Note
48
+
49
+ On Windows, `~` expansion may not work as expected. Set `OLLAMA_MODELS_PATH` explicitly:
50
+
51
+ ```bash
52
+ OLLAMA_MODELS_PATH=C:/Users/you/.ollama
53
+ ```
54
+
55
+ ### Read-Write Mount
56
+
57
+ The mount is read-write by default, so `ollama pull` inside the container also saves models to the host directory. This means models downloaded inside the devcontainer are available on the host and in future container rebuilds.
58
+
59
+ ## Using the Ollama CLI
60
+
61
+ The Ollama CLI is installed via the required `ollama-cli` overlay. The `OLLAMA_HOST` environment variable is pre-configured to `http://ollama:11434`, so all commands automatically target the sidecar — no manual configuration required.
62
+
63
+ ```bash
64
+ # From the main devcontainer terminal — talks to the sidecar
65
+
66
+ # Pull a model and list available models
67
+ ollama pull llama3.2
68
+ ollama list
69
+
70
+ # Run a different model for inference
71
+ ollama run mistral "explain this function"
72
+ ```
73
+
74
+ > **Note:** Do **not** run `ollama serve` inside the devcontainer. The sidecar IS the server. Running `ollama serve` would start a second daemon that conflicts with the sidecar.
75
+
76
+ > **Note:** `ollama pull` inside the devcontainer writes models to the host-mounted `OLLAMA_MODELS_PATH` directory (default `~/.ollama`). Models are persisted across container rebuilds.
77
+
78
+ ### Model Management
79
+
80
+ ```bash
81
+ # Pull a model (saved to the host-mounted ~/.ollama directory)
82
+ ollama pull llama3.2
83
+
84
+ # List available models
85
+ ollama list
86
+
87
+ # Show detailed model information
88
+ ollama show llama3.2
89
+
90
+ # Remove a model
91
+ ollama rm llama3.2
92
+
93
+ # Copy a model under a new name
94
+ ollama cp llama3.2 my-custom-llama
95
+ ```
96
+
97
+ ### Running Models
98
+
99
+ ```bash
100
+ # Interactive chat session
101
+ ollama run llama3.2
102
+
103
+ # One-shot inference
104
+ ollama run llama3.2 "explain this function"
105
+
106
+ # Run a coding-focused model
107
+ ollama run qwen2.5-coder "review this code"
108
+ ```
109
+
110
+ ## Common Commands
111
+
112
+ ### Pull and Run Models
113
+
114
+ ```bash
115
+ # Pull a model (saved to host's ~/.ollama)
116
+ ollama pull llama3.2
117
+
118
+ # Run a model interactively
119
+ ollama run llama3.2
120
+
121
+ # Run a smaller model for faster responses
122
+ ollama pull phi3.5
123
+ ollama run phi3.5
124
+
125
+ # Run a coding-focused model
126
+ ollama pull qwen2.5-coder
127
+ ollama run qwen2.5-coder
128
+ ```
129
+
130
+ ### Model Management
131
+
132
+ ```bash
133
+ # List downloaded models
134
+ ollama list
135
+
136
+ # Show model information
137
+ ollama show llama3.2
138
+
139
+ # Remove a model
140
+ ollama rm llama3.2
141
+
142
+ # Copy a model
143
+ ollama cp llama3.2 my-custom-llama
144
+ ```
145
+
146
+ ### REST API
147
+
148
+ ```bash
149
+ # Health check — list available models
150
+ curl http://ollama:11434/api/tags
151
+
152
+ # Generate a completion
153
+ curl http://ollama:11434/api/generate \
154
+ -d '{
155
+ "model": "llama3.2",
156
+ "prompt": "Why is the sky blue?",
157
+ "stream": false
158
+ }'
159
+
160
+ # OpenAI-compatible chat endpoint
161
+ curl http://ollama:11434/v1/chat/completions \
162
+ -H "Content-Type: application/json" \
163
+ -d '{
164
+ "model": "llama3.2",
165
+ "messages": [{"role": "user", "content": "Hello!"}]
166
+ }'
167
+
168
+ # From the host machine (via forwarded port)
169
+ curl http://localhost:11434/api/tags
170
+ ```
171
+
172
+ ## GPU Acceleration
173
+
174
+ GPU passthrough is enabled out of the box. Both the `ollama` sidecar and the `devcontainer` service receive `gpus: all` via the `deploy.resources.reservations.devices` block in the overlay's `docker-compose.yml`:
175
+
176
+ ```yaml
177
+ deploy:
178
+ resources:
179
+ reservations:
180
+ devices:
181
+ - driver: nvidia
182
+ count: all
183
+ capabilities: [gpu]
184
+ ```
185
+
186
+ This means:
187
+
188
+ - The `ollama` sidecar uses the GPU for fast inference
189
+ - The `devcontainer` has direct GPU access for GPU-accelerated tooling such as `torch`, `tensorflow`, and CUDA CLI tools
190
+
191
+ ### Prerequisites
192
+
193
+ GPU passthrough requires the [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) installed and configured on the host:
194
+
195
+ ```bash
196
+ # Verify NVIDIA driver is installed on the host
197
+ nvidia-smi
198
+
199
+ # Verify NVIDIA Container Toolkit
200
+ docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi
201
+ ```
202
+
203
+ > **Note:** On machines without an NVIDIA GPU or without the NVIDIA Container Toolkit, Docker Compose may warn about unresolvable device requests. Install the toolkit or remove the `deploy` block via a custom compose override if GPU support is not needed.
204
+
205
+ ### Verify GPU Access
206
+
207
+ ```bash
208
+ # Check NVIDIA GPU is detected inside the devcontainer
209
+ nvidia-smi
210
+
211
+ # Confirm Ollama is using GPU
212
+ ollama run llama3.2 "hello"
213
+ # GPU usage should appear in nvidia-smi output
214
+ ```
215
+
216
+ **See also:** The [`cuda`](../cuda/README.md) overlay for additional CUDA development tooling (CUDA libraries, `nvcc`, etc.) in the devcontainer.
217
+
218
+ ## Use Cases
219
+
220
+ - **Offline AI coding** — Use local models with tools like `codex`, `claude-code`, or `amp` as a privacy-preserving backend
221
+ - **Privacy-preserving LLM APIs** — Process sensitive code or documents without sending data to cloud providers
222
+ - **Testing and prototyping** — Experiment with different models without API costs
223
+ - **CI/CD pipelines** — Run LLM-based tests or validations in an isolated environment
224
+ - **Custom fine-tuned models** — Load and serve models you have trained or customized
225
+
226
+ **Integrates well with:**
227
+
228
+ - `codex` — Point OpenAI Codex CLI at the local Ollama endpoint
229
+ - `claude-code` — Use with a local proxy that speaks the Anthropic API format
230
+ - `amp` — Configure Amp to use the local OpenAI-compatible endpoint
231
+
232
+ ## Configuration
233
+
234
+ ### Environment Variables
235
+
236
+ Copy `.devcontainer/.env.example` to `.devcontainer/.env` and customize:
237
+
238
+ ```bash
239
+ cd .devcontainer
240
+ cp .env.example .env
241
+ ```
242
+
243
+ | Variable | Default | Description |
244
+ | -------------------- | ----------- | ------------------------------------------------------ |
245
+ | `OLLAMA_MODELS_PATH` | `~/.ollama` | Host path to Ollama data directory (models are shared) |
246
+ | `OLLAMA_VERSION` | `latest` | Ollama Docker image version |
247
+ | `OLLAMA_PORT` | `11434` | Host port for the Ollama API |
248
+
249
+ ### Container Env in Devcontainer
250
+
251
+ The following environment variable is set in the container environment (available to all processes, including setup scripts and terminals):
252
+
253
+ | Variable | Value | Description |
254
+ | ------------- | --------------------- | --------------------------------------------- |
255
+ | `OLLAMA_HOST` | `http://ollama:11434` | URL for the Ollama API (used by CLI and SDKs) |
256
+
257
+ ## Troubleshooting
258
+
259
+ ### Models Not Found
260
+
261
+ If `ollama list` shows no models, the host model directory may not be mounted correctly:
262
+
263
+ ```bash
264
+ # Check the mount inside the container
265
+ ls /root/.ollama/models
266
+
267
+ # Verify OLLAMA_MODELS_PATH points to the right directory
268
+ echo $OLLAMA_MODELS_PATH
269
+
270
+ # Pull a model manually
271
+ ollama pull llama3.2
272
+ ```
273
+
274
+ ### Port Conflicts
275
+
276
+ If port `11434` is already in use on your host:
277
+
278
+ ```bash
279
+ # .devcontainer/.env
280
+ OLLAMA_PORT=11435
281
+ ```
282
+
283
+ Then update `forwardPorts` in your devcontainer configuration accordingly, or use the `--port-offset` flag when generating.
284
+
285
+ ### GPU Not Detected
286
+
287
+ ```bash
288
+ # Check if NVIDIA driver is installed on host
289
+ nvidia-smi
290
+
291
+ # Check NVIDIA Container Toolkit
292
+ docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi
293
+
294
+ # If toolkit is missing, install it:
295
+ # https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html
296
+ ```
297
+
298
+ ### Service Not Starting
299
+
300
+ ```bash
301
+ # Check compose service status
302
+ docker compose ps
303
+
304
+ # View Ollama logs
305
+ docker compose logs ollama
306
+
307
+ # Restart the service
308
+ docker compose restart ollama
309
+ ```
310
+
311
+ ## References
312
+
313
+ - [Ollama Official Website](https://ollama.com)
314
+ - [Ollama Docker Image](https://hub.docker.com/r/ollama/ollama)
315
+ - [Ollama Model Library](https://ollama.com/library)
316
+ - [Ollama REST API Documentation](https://github.com/ollama/ollama/blob/main/docs/api.md)
317
+ - [OpenAI Compatibility](https://github.com/ollama/ollama/blob/main/docs/openai.md)
318
+
319
+ **Related Overlays:**
320
+
321
+ - [`cuda`](../cuda/README.md) — NVIDIA GPU passthrough for faster inference
322
+ - [`rocm`](../rocm/README.md) — AMD GPU passthrough for faster inference
323
+ - [`ollama-cli`](../ollama-cli/README.md) — Ollama CLI-only overlay (works in plain stacks and is auto-required here)
324
+ - [`codex`](../codex/README.md) — OpenAI Codex CLI (can use local endpoint)
325
+ - [`claude-code`](../claude-code/README.md) — Anthropic Claude CLI
326
+ - [`amp`](../amp/README.md) — Sourcegraph Amp CLI
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "runServices": ["ollama"],
4
+ "forwardPorts": [11434],
5
+ "portsAttributes": {
6
+ "11434": {
7
+ "label": "Ollama API",
8
+ "onAutoForward": "ignore"
9
+ }
10
+ },
11
+ "containerEnv": {
12
+ "OLLAMA_HOST": "http://ollama:11434"
13
+ }
14
+ }
@@ -0,0 +1,25 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ ollama:
5
+ image: ollama/ollama:${OLLAMA_VERSION:-latest}
6
+ restart: unless-stopped
7
+ volumes:
8
+ - ${OLLAMA_MODELS_PATH:-~/.ollama}:/root/.ollama
9
+ environment:
10
+ - OLLAMA_HOST=0.0.0.0
11
+ ports:
12
+ - '${OLLAMA_PORT:-11434}:11434'
13
+ deploy:
14
+ resources:
15
+ reservations:
16
+ devices:
17
+ - driver: nvidia
18
+ count: all
19
+ capabilities: [gpu]
20
+ networks:
21
+ - devnet
22
+
23
+ networks:
24
+ devnet:
25
+ name: devnet
@@ -0,0 +1,27 @@
1
+ id: ollama
2
+ name: Ollama
3
+ description: Local LLM inference server with OpenAI-compatible API
4
+ category: dev
5
+ supports:
6
+ - compose
7
+ requires:
8
+ - ollama-cli
9
+ suggests:
10
+ - codex
11
+ - claude-code
12
+ - amp
13
+ - prometheus
14
+ - grafana
15
+ - otel-collector
16
+ conflicts: []
17
+ serviceOrder: 3
18
+ tags:
19
+ - dev
20
+ - ai
21
+ - llm
22
+ - inference
23
+ - ollama
24
+ ports:
25
+ - 11434
26
+ compose_imports:
27
+ - .shared/compose/nvidia-gpu-devcontainer.yml
@@ -0,0 +1,76 @@
1
+ #!/bin/bash
2
+ # Verification script for Ollama overlay
3
+ # Confirms Ollama sidecar service is running and accessible
4
+
5
+ set -e
6
+
7
+ echo "🔍 Verifying Ollama overlay..."
8
+ echo ""
9
+
10
+ # Check OLLAMA_HOST is set
11
+ echo ""
12
+ echo "1️⃣ Checking OLLAMA_HOST..."
13
+ if [[ -z "${OLLAMA_HOST:-}" ]]; then
14
+ echo " ⚠️ OLLAMA_HOST is not set — CLI will target localhost instead of the sidecar"
15
+ else
16
+ echo " ✅ OLLAMA_HOST=${OLLAMA_HOST}"
17
+ fi
18
+
19
+ # Check if curl is available
20
+ echo ""
21
+ echo "2️⃣ Checking curl availability..."
22
+ if ! command -v curl &> /dev/null; then
23
+ echo " ❌ curl not found"
24
+ echo ""
25
+ echo "❌ Ollama overlay verification failed (curl is required but not installed)"
26
+ exit 1
27
+ fi
28
+ echo " ✅ curl found"
29
+
30
+ # Check Ollama API
31
+ echo ""
32
+ echo "3️⃣ Checking Ollama service..."
33
+ OLLAMA_HOST="${OLLAMA_HOST:-http://ollama:11434}"
34
+ OLLAMA_READY=false
35
+
36
+ set +e
37
+ for i in {1..20}; do
38
+ if curl -sf "${OLLAMA_HOST}/api/tags" &> /dev/null; then
39
+ echo " ✅ Ollama service is ready"
40
+ OLLAMA_READY=true
41
+ break
42
+ fi
43
+ sleep 2
44
+ done
45
+ set -e
46
+
47
+ if [ "$OLLAMA_READY" = false ]; then
48
+ echo " ❌ Ollama service not ready after 40 seconds"
49
+ echo ""
50
+ echo "❌ Ollama overlay verification failed"
51
+ exit 1
52
+ fi
53
+
54
+ # Show available models via REST API
55
+ echo ""
56
+ echo "4️⃣ Listing available models via API..."
57
+ TAGS_JSON=$(curl -sf "${OLLAMA_HOST}/api/tags")
58
+ CURL_STATUS=$?
59
+ if [ $CURL_STATUS -ne 0 ]; then
60
+ echo " ⚠️ Skipping model listing: failed to query /api/tags (curl exit code $CURL_STATUS)"
61
+ else
62
+ MODELS=$(printf '%s\n' "$TAGS_JSON" | grep -o '"name":"[^"]*"' | sed 's/"name":"//;s/"//')
63
+ if [ -n "$MODELS" ]; then
64
+ echo " ✅ Models available:"
65
+ echo "$MODELS" | while read -r model; do
66
+ echo " - $model"
67
+ done
68
+ else
69
+ echo " ℹ️ No models pulled yet. Use 'ollama pull <model>' to download a model."
70
+ fi
71
+ fi
72
+
73
+ echo ""
74
+ echo "✅ Ollama overlay verification complete"
75
+ echo " API endpoint: ${OLLAMA_HOST}"
76
+ echo " Docs: https://ollama.com/library"
@@ -0,0 +1,90 @@
1
+ # Ollama CLI Overlay
2
+
3
+ Installs the [Ollama](https://ollama.com) command-line client in your devcontainer so you can use Ollama models from terminal tools without running an Ollama sidecar in the same compose stack.
4
+
5
+ ## Features
6
+
7
+ - **Ollama CLI in devcontainer** — Run `ollama pull / run / list / rm` from the main container
8
+ - **Works in plain and compose stacks** — Can be used without a local Ollama service overlay
9
+ - **Remote-server friendly** — Supports connecting to host or external Ollama endpoints via `OLLAMA_HOST`
10
+ - **Fast install path** — Prefers extracting `/usr/bin/ollama` from local `ollama/ollama` Docker image when available
11
+ - **Archive fallback** — Falls back to official Linux release archives (`.tar.zst`, then legacy `.tgz`)
12
+
13
+ ## How It Works
14
+
15
+ This overlay installs only the Ollama CLI binary in the devcontainer. It does **not** run `ollama serve` or create a compose service.
16
+
17
+ By default, the CLI targets `http://localhost:11434` unless `OLLAMA_HOST` is set. Set `OLLAMA_HOST` to point at your reachable Ollama server (host machine, sidecar, or remote endpoint).
18
+
19
+ ## Configuration
20
+
21
+ Set `OLLAMA_HOST` in your devcontainer environment when needed:
22
+
23
+ ```bash
24
+ # Example: host Ollama server
25
+ export OLLAMA_HOST=http://host.docker.internal:11434
26
+
27
+ # Example: remote Ollama server
28
+ export OLLAMA_HOST=http://10.0.0.50:11434
29
+ ```
30
+
31
+ You can also set this in `devcontainer.json` (`containerEnv`/`remoteEnv`) or your shell profile.
32
+
33
+ ## Common Commands
34
+
35
+ ```bash
36
+ # Show CLI version
37
+ ollama --version
38
+
39
+ # Point to a specific server for one command
40
+ OLLAMA_HOST=http://host.docker.internal:11434 ollama list
41
+
42
+ # Pull and run models
43
+ ollama pull llama3.2
44
+ ollama run llama3.2 "explain this function"
45
+
46
+ # Model management
47
+ ollama list
48
+ ollama show llama3.2
49
+ ollama rm llama3.2
50
+ ```
51
+
52
+ ## Use Cases
53
+
54
+ - **Use host Ollama from containerized tooling** — Keep Ollama running on host, use CLI in devcontainer
55
+ - **Agent tooling integration** — Pair with `codex`, `claude-code`, or `amp` overlays while pointing at existing Ollama infrastructure
56
+ - **Remote inference endpoints** — Work against Ollama servers running on another machine or VM
57
+
58
+ **Integrates well with:**
59
+
60
+ - `ollama` — Compose sidecar server (this overlay is auto-required there)
61
+ - `codex` — OpenAI Codex CLI
62
+ - `claude-code` — Anthropic Claude Code CLI
63
+ - `amp` — Sourcegraph Amp CLI
64
+
65
+ ## Troubleshooting
66
+
67
+ ### `ollama` command not found
68
+
69
+ ```bash
70
+ which ollama
71
+ ollama --version
72
+ ```
73
+
74
+ If missing, rebuild the container so `setup.sh` runs again.
75
+
76
+ ### Cannot reach Ollama endpoint
77
+
78
+ ```bash
79
+ echo "$OLLAMA_HOST"
80
+ curl -v "$OLLAMA_HOST/api/tags"
81
+ ```
82
+
83
+ Verify network reachability from inside the devcontainer and ensure the Ollama server is running.
84
+
85
+ ## References
86
+
87
+ - [Ollama Official Website](https://ollama.com)
88
+ - [Ollama Model Library](https://ollama.com/library)
89
+ - [Ollama REST API Documentation](https://github.com/ollama/ollama/blob/main/docs/api.md)
90
+ - [Ollama OpenAI Compatibility](https://github.com/ollama/ollama/blob/main/docs/openai.md)
@@ -0,0 +1,3 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json"
3
+ }
@@ -0,0 +1,19 @@
1
+ id: ollama-cli
2
+ name: Ollama CLI
3
+ description: Ollama command-line client for local or remote Ollama servers
4
+ category: dev
5
+ supports: []
6
+ requires: []
7
+ suggests:
8
+ - ollama
9
+ - codex
10
+ - claude-code
11
+ - amp
12
+ conflicts: []
13
+ tags:
14
+ - dev
15
+ - ai
16
+ - llm
17
+ - ollama
18
+ - cli
19
+ ports: []