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
@@ -0,0 +1,215 @@
1
+ # pgvector Overlay
2
+
3
+ Adds a PostgreSQL 16 database pre-loaded with the [pgvector](https://github.com/pgvector/pgvector) extension, enabling vector similarity search directly within a familiar SQL environment.
4
+
5
+ > **Note:** This overlay conflicts with the `postgres` overlay because both provide a PostgreSQL service on port 5432. Choose `pgvector` when you need vector search, or `postgres` for a plain database.
6
+
7
+ ## Features
8
+
9
+ - **pgvector extension** — `CREATE EXTENSION vector;` is available immediately; no manual installation required
10
+ - **Full PostgreSQL 16** — All standard SQL features alongside vector operations
11
+ - **`psql` client in devcontainer** — `postgresql-client` package installed for interactive SQL sessions
12
+ - **Pre-configured environment** — `PGHOST`, `PGPORT`, `PGDATABASE`, and `PGUSER` set automatically
13
+ - **Persistent storage** — Named Docker volume preserves data across container rebuilds
14
+ - **Health check** — Compose readiness check using `pg_isready` before dependent services start
15
+
16
+ ## How It Works
17
+
18
+ pgvector runs as a Docker Compose service (`pgvector`) alongside your devcontainer, using the official `pgvector/pgvector:pg16` image, which bundles PostgreSQL 16 with the pgvector extension pre-compiled and ready to use.
19
+
20
+ **Service configuration:**
21
+
22
+ - Image: `pgvector/pgvector:pg16`
23
+ - Network: `devnet` (shared with the dev container)
24
+ - Port: `5432` (customisable via `PGVECTOR_PORT`)
25
+ - Volume: `pgvector-data` for persistent data
26
+
27
+ The following environment variables are pre-set in the devcontainer for seamless `psql` usage:
28
+
29
+ | Variable | Value |
30
+ | ------------ | ---------- |
31
+ | `PGHOST` | `pgvector` |
32
+ | `PGPORT` | `5432` |
33
+ | `PGDATABASE` | `devdb` |
34
+ | `PGUSER` | `postgres` |
35
+
36
+ ## Getting Started
37
+
38
+ ```bash
39
+ # Connect to the database
40
+ psql -h pgvector -U postgres -d devdb
41
+
42
+ # Enable the vector extension (run once per database)
43
+ psql -h pgvector -U postgres -d devdb -c "CREATE EXTENSION IF NOT EXISTS vector;"
44
+
45
+ # Verify the extension is installed
46
+ psql -h pgvector -U postgres -d devdb -c "SELECT * FROM pg_extension WHERE extname = 'vector';"
47
+ ```
48
+
49
+ ## Common Commands
50
+
51
+ ### Vector Operations in SQL
52
+
53
+ ```sql
54
+ -- Enable the extension in your database
55
+ CREATE EXTENSION IF NOT EXISTS vector;
56
+
57
+ -- Create a table with a vector column (1536 dimensions for OpenAI embeddings)
58
+ CREATE TABLE documents (
59
+ id SERIAL PRIMARY KEY,
60
+ content TEXT,
61
+ embedding vector(1536)
62
+ );
63
+
64
+ -- Insert a record with an embedding
65
+ INSERT INTO documents (content, embedding)
66
+ VALUES ('Hello, world!', '[0.1, 0.2, 0.3, ...]');
67
+
68
+ -- Cosine similarity search (find closest neighbours)
69
+ SELECT id, content, 1 - (embedding <=> '[0.1, 0.2, 0.3, ...]') AS similarity
70
+ FROM documents
71
+ ORDER BY embedding <=> '[0.1, 0.2, 0.3, ...]'
72
+ LIMIT 5;
73
+
74
+ -- Create an HNSW index for faster approximate search
75
+ CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);
76
+
77
+ -- Create an IVFFlat index for large datasets
78
+ CREATE INDEX ON documents USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
79
+ ```
80
+
81
+ ### Database Management
82
+
83
+ ```bash
84
+ # Connect interactively
85
+ psql
86
+
87
+ # Run a SQL file
88
+ psql -f schema.sql
89
+
90
+ # Dump the database
91
+ pg_dump -h pgvector -U postgres devdb > backup.sql
92
+
93
+ # Restore from dump
94
+ psql -h pgvector -U postgres devdb < backup.sql
95
+ ```
96
+
97
+ ### Python Integration
98
+
99
+ ```bash
100
+ pip install psycopg2-binary pgvector
101
+
102
+ python - <<'EOF'
103
+ import psycopg2
104
+ from pgvector.psycopg2 import register_vector
105
+ import numpy as np
106
+
107
+ conn = psycopg2.connect(
108
+ host="pgvector", port=5432,
109
+ dbname="devdb", user="postgres", password="postgres"
110
+ )
111
+ register_vector(conn)
112
+ cur = conn.cursor()
113
+
114
+ cur.execute("CREATE EXTENSION IF NOT EXISTS vector")
115
+ cur.execute("CREATE TABLE IF NOT EXISTS items (id serial PRIMARY KEY, embedding vector(3))")
116
+ cur.execute("INSERT INTO items (embedding) VALUES (%s)", (np.array([1, 2, 3]),))
117
+ conn.commit()
118
+
119
+ cur.execute("SELECT * FROM items ORDER BY embedding <-> %s LIMIT 5", (np.array([1, 2, 4]),))
120
+ print(cur.fetchall())
121
+ conn.close()
122
+ EOF
123
+ ```
124
+
125
+ ## Configuration
126
+
127
+ ### Environment Variables
128
+
129
+ | Variable | Default | Description |
130
+ | ------------------- | ---------- | ------------------------------------------ |
131
+ | `PGVECTOR_VERSION` | `pg16` | pgvector image tag (e.g. `pg16`, `pg17`) |
132
+ | `PGVECTOR_DB` | `devdb` | Name of the database to create |
133
+ | `PGVECTOR_USER` | `postgres` | PostgreSQL superuser name |
134
+ | `PGVECTOR_PASSWORD` | `postgres` | PostgreSQL superuser password |
135
+ | `PGVECTOR_PORT` | `5432` | Host port mapped to the PostgreSQL service |
136
+
137
+ Copy `.devcontainer/.env.example` to `.devcontainer/.env` and customize.
138
+
139
+ ## pgvector vs Qdrant
140
+
141
+ | Feature | pgvector (this overlay) | Qdrant |
142
+ | -------------------- | ------------------------------- | ------------------------ |
143
+ | **Storage model** | ✅ Relational + vector | Vector-only |
144
+ | **SQL support** | ✅ Full PostgreSQL SQL | ❌ REST/gRPC API only |
145
+ | **Familiar tooling** | ✅ psql, ORMs, existing schema | New client SDKs required |
146
+ | **Query language** | ✅ SQL with `<->`, `<=>`, `<#>` | ⚠️ JSON query DSL |
147
+ | **Filtering** | ✅ SQL WHERE clause | ✅ Payload-based filters |
148
+ | **Scale** | ⚠️ Vertical scaling preferred | ✅ Distributed by design |
149
+ | **Index types** | IVFFlat, HNSW | HNSW |
150
+
151
+ **Choose pgvector when:**
152
+
153
+ - You already use PostgreSQL and want to add vectors to existing tables
154
+ - You need to join vector results with relational data
155
+ - Your team is comfortable with SQL
156
+
157
+ **Choose Qdrant when:**
158
+
159
+ - Vectors are your primary data model
160
+ - You need purpose-built vector search performance at scale
161
+ - You want advanced filtering and payload storage
162
+
163
+ ## Use Cases
164
+
165
+ - **RAG pipelines** — Store document embeddings alongside metadata; retrieve context with SQL joins
166
+ - **Semantic search** — Add vector search to an existing PostgreSQL application without a second database
167
+ - **Hybrid search** — Combine full-text search (`tsvector`) with vector similarity in a single query
168
+ - **Recommendation systems** — Store and query user or item embeddings with familiar SQL tooling
169
+
170
+ **Integrates well with:**
171
+
172
+ - `ollama` — Generate embeddings locally with `nomic-embed-text` or similar models
173
+ - `python` — `psycopg2` + `pgvector` Python package for seamless integration
174
+ - `nodejs` — `pg` driver with raw SQL for vector operations
175
+
176
+ ## Troubleshooting
177
+
178
+ ### Extension Not Found
179
+
180
+ If `CREATE EXTENSION vector` fails:
181
+
182
+ ```bash
183
+ # Confirm pgvector image (not plain postgres) is in use
184
+ docker compose ps pgvector
185
+
186
+ # Check available extensions
187
+ psql -h pgvector -U postgres -c "SELECT name FROM pg_available_extensions WHERE name = 'vector';"
188
+ ```
189
+
190
+ ### Port Conflict with postgres Overlay
191
+
192
+ The `pgvector` and `postgres` overlays both bind port 5432 and conflict with each other. Select only one.
193
+
194
+ ### Connection Refused
195
+
196
+ ```bash
197
+ # Check service health
198
+ docker compose ps pgvector
199
+ docker compose logs pgvector
200
+ ```
201
+
202
+ ## References
203
+
204
+ - [pgvector GitHub](https://github.com/pgvector/pgvector)
205
+ - [pgvector Docker Image](https://hub.docker.com/r/pgvector/pgvector)
206
+ - [PostgreSQL Documentation](https://www.postgresql.org/docs/16/)
207
+ - [pgvector Python package](https://github.com/pgvector/pgvector-python)
208
+ - [pgvector Node.js package](https://github.com/pgvector/pgvector-node)
209
+
210
+ **Related Overlays:**
211
+
212
+ - [`postgres`](../postgres/README.md) — Plain PostgreSQL without pgvector (conflicts)
213
+ - [`qdrant`](../qdrant/README.md) — Purpose-built vector database (alternative)
214
+ - [`ollama`](../ollama/README.md) — Local embedding generation
215
+ - [`python`](../python/README.md) — Python development environment
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "runServices": ["pgvector"],
4
+ "forwardPorts": [5432],
5
+ "portsAttributes": {
6
+ "5432": {
7
+ "label": "pgvector database",
8
+ "onAutoForward": "notify"
9
+ }
10
+ },
11
+ "features": {
12
+ "./features/cross-distro-packages": {
13
+ "apt": "postgresql-client",
14
+ "apk": "postgresql-client"
15
+ }
16
+ },
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}}"
28
+ }
29
+ }
@@ -0,0 +1,33 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ pgvector:
5
+ image: pgvector/pgvector:${PGVECTOR_VERSION:-{{cs.PGVECTOR_VERSION}}}
6
+ restart: unless-stopped
7
+ volumes:
8
+ - pgvector-data:/var/lib/postgresql/data
9
+ environment:
10
+ POSTGRES_DB: ${PGVECTOR_DB:-{{cs.PGVECTOR_DB}}}
11
+ POSTGRES_USER: ${PGVECTOR_USER:-{{cs.PGVECTOR_USER}}}
12
+ POSTGRES_PASSWORD: ${PGVECTOR_PASSWORD:-{{cs.PGVECTOR_PASSWORD}}}
13
+ ports:
14
+ - '${PGVECTOR_PORT:-{{cs.PGVECTOR_PORT}}}:5432'
15
+ networks:
16
+ - devnet
17
+ healthcheck:
18
+ test:
19
+ [
20
+ 'CMD-SHELL',
21
+ 'pg_isready -U ${PGVECTOR_USER:-{{cs.PGVECTOR_USER}}} -d ${PGVECTOR_DB:-{{cs.PGVECTOR_DB}}}',
22
+ ]
23
+ interval: 10s
24
+ timeout: 5s
25
+ retries: 5
26
+ start_period: 10s
27
+
28
+ volumes:
29
+ pgvector-data:
30
+
31
+ networks:
32
+ devnet:
33
+ name: devnet
@@ -0,0 +1,47 @@
1
+ id: pgvector
2
+ name: pgvector (PostgreSQL + vector)
3
+ description: PostgreSQL 16 with the pgvector extension for vector similarity search
4
+ category: database
5
+ supports:
6
+ - compose
7
+ requires: []
8
+ suggests:
9
+ - ollama
10
+ - python
11
+ - nodejs
12
+ - prometheus
13
+ - grafana
14
+ conflicts:
15
+ - postgres
16
+ serviceOrder: 0
17
+ tags:
18
+ - database
19
+ - sql
20
+ - vector
21
+ - embeddings
22
+ - postgres
23
+ - pgvector
24
+ ports:
25
+ - port: 5432
26
+ service: pgvector
27
+ protocol: tcp
28
+ description: pgvector database connection
29
+ onAutoForward: notify
30
+ connectionStringTemplate: 'postgresql://{pgvector_user}:{pgvector_password}@{host}:{port}/{pgvector_db}'
31
+ parameters:
32
+ PGVECTOR_DB:
33
+ description: Name of the database to create
34
+ default: devdb
35
+ PGVECTOR_USER:
36
+ description: PostgreSQL superuser name
37
+ default: postgres
38
+ PGVECTOR_PASSWORD:
39
+ description: PostgreSQL superuser password
40
+ default: postgres
41
+ sensitive: true
42
+ PGVECTOR_PORT:
43
+ description: Host port mapped to pgvector (5432 inside container)
44
+ default: '5432'
45
+ PGVECTOR_VERSION:
46
+ description: pgvector/pgvector image tag (e.g. pg16, pg17)
47
+ default: pg16
@@ -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:
@@ -1,6 +1,6 @@
1
1
  # PostgreSQL Configuration
2
- POSTGRES_VERSION=16
3
- POSTGRES_DB=devdb
4
- POSTGRES_USER=postgres
5
- POSTGRES_PASSWORD=postgres
6
- POSTGRES_PORT=5432
2
+ POSTGRES_VERSION={{cs.POSTGRES_VERSION}}
3
+ POSTGRES_DB={{cs.POSTGRES_DB}}
4
+ POSTGRES_USER={{cs.POSTGRES_USER}}
5
+ POSTGRES_PASSWORD={{cs.POSTGRES_PASSWORD}}
6
+ POSTGRES_PORT={{cs.POSTGRES_PORT}}
@@ -13,9 +13,9 @@
13
13
  },
14
14
  "remoteEnv": {
15
15
  "POSTGRES_HOST": "postgres",
16
- "POSTGRES_PORT": "5432",
17
- "POSTGRES_DB": "devdb",
18
- "POSTGRES_USER": "postgres",
19
- "POSTGRES_PASSWORD": "postgres"
16
+ "POSTGRES_PORT": "{{cs.POSTGRES_PORT}}",
17
+ "POSTGRES_DB": "{{cs.POSTGRES_DB}}",
18
+ "POSTGRES_USER": "{{cs.POSTGRES_USER}}",
19
+ "POSTGRES_PASSWORD": "{{cs.POSTGRES_PASSWORD}}"
20
20
  }
21
21
  }
@@ -2,20 +2,24 @@ version: '3.8'
2
2
 
3
3
  services:
4
4
  postgres:
5
- image: postgres:${POSTGRES_VERSION:-16}-alpine
5
+ image: postgres:${POSTGRES_VERSION:-{{cs.POSTGRES_VERSION}}}-alpine
6
6
  restart: unless-stopped
7
7
  volumes:
8
8
  - postgres-data:/var/lib/postgresql/data
9
9
  environment:
10
- POSTGRES_DB: ${POSTGRES_DB:-devdb}
11
- POSTGRES_USER: ${POSTGRES_USER:-postgres}
12
- POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
10
+ POSTGRES_DB: ${POSTGRES_DB:-{{cs.POSTGRES_DB}}}
11
+ POSTGRES_USER: ${POSTGRES_USER:-{{cs.POSTGRES_USER}}}
12
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-{{cs.POSTGRES_PASSWORD}}}
13
13
  ports:
14
- - '${POSTGRES_PORT:-5432}:5432'
14
+ - '${POSTGRES_PORT:-{{cs.POSTGRES_PORT}}}:5432'
15
15
  networks:
16
16
  - devnet
17
17
  healthcheck:
18
- test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-devdb}']
18
+ test:
19
+ [
20
+ 'CMD-SHELL',
21
+ 'pg_isready -U ${POSTGRES_USER:-{{cs.POSTGRES_USER}}} -d ${POSTGRES_DB:-{{cs.POSTGRES_DB}}}',
22
+ ]
19
23
  interval: 10s
20
24
  timeout: 5s
21
25
  retries: 5
@@ -26,3 +30,4 @@ volumes:
26
30
 
27
31
  networks:
28
32
  devnet:
33
+ name: devnet
@@ -5,8 +5,12 @@ category: database
5
5
  supports:
6
6
  - compose
7
7
  requires: []
8
- suggests: []
9
- conflicts: []
8
+ suggests:
9
+ - prometheus
10
+ - grafana
11
+ conflicts:
12
+ - pgvector
13
+ serviceOrder: 0
10
14
  tags:
11
15
  - database
12
16
  - sql
@@ -18,3 +22,20 @@ ports:
18
22
  description: PostgreSQL database connection
19
23
  onAutoForward: notify
20
24
  connectionStringTemplate: 'postgresql://{postgres_user}:{postgres_password}@{host}:{port}/{postgres_db}'
25
+ parameters:
26
+ POSTGRES_DB:
27
+ description: Name of the database to create
28
+ default: devdb
29
+ POSTGRES_USER:
30
+ description: PostgreSQL superuser name
31
+ default: postgres
32
+ POSTGRES_PASSWORD:
33
+ description: PostgreSQL superuser password
34
+ default: postgres
35
+ sensitive: true
36
+ POSTGRES_PORT:
37
+ description: Host port mapped to PostgreSQL (5432 inside container)
38
+ default: '5432'
39
+ POSTGRES_VERSION:
40
+ description: PostgreSQL major version
41
+ default: '16'
@@ -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
@@ -0,0 +1,4 @@
1
+ # Qdrant Configuration
2
+ QDRANT_VERSION={{cs.QDRANT_VERSION}}
3
+ QDRANT_PORT={{cs.QDRANT_PORT}}
4
+ QDRANT_GRPC_PORT={{cs.QDRANT_GRPC_PORT}}