@hivehub/rulebook 5.5.2 → 5.7.0

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 (325) hide show
  1. package/.claude/commands/rulebook-learn-capture.md +41 -48
  2. package/.claude/commands/rulebook-learn-list.md +13 -13
  3. package/README.md +332 -394
  4. package/dist/cli/commands/context-intelligence.d.ts +0 -1
  5. package/dist/cli/commands/context-intelligence.d.ts.map +1 -1
  6. package/dist/cli/commands/context-intelligence.js +12 -33
  7. package/dist/cli/commands/context-intelligence.js.map +1 -1
  8. package/dist/cli/commands/index.d.ts +4 -7
  9. package/dist/cli/commands/index.d.ts.map +1 -1
  10. package/dist/cli/commands/index.js +4 -7
  11. package/dist/cli/commands/index.js.map +1 -1
  12. package/dist/cli/commands/init.d.ts.map +1 -1
  13. package/dist/cli/commands/init.js +40 -81
  14. package/dist/cli/commands/init.js.map +1 -1
  15. package/dist/cli/commands/mcp.d.ts +0 -1
  16. package/dist/cli/commands/mcp.d.ts.map +1 -1
  17. package/dist/cli/commands/mcp.js +1 -7
  18. package/dist/cli/commands/mcp.js.map +1 -1
  19. package/dist/cli/commands/memory.d.ts +7 -1
  20. package/dist/cli/commands/memory.d.ts.map +1 -1
  21. package/dist/cli/commands/memory.js +51 -57
  22. package/dist/cli/commands/memory.js.map +1 -1
  23. package/dist/cli/commands/misc.d.ts +1 -15
  24. package/dist/cli/commands/misc.d.ts.map +1 -1
  25. package/dist/cli/commands/misc.js +36 -215
  26. package/dist/cli/commands/misc.js.map +1 -1
  27. package/dist/cli/commands/plans.d.ts +0 -6
  28. package/dist/cli/commands/plans.d.ts.map +1 -1
  29. package/dist/cli/commands/plans.js +9 -77
  30. package/dist/cli/commands/plans.js.map +1 -1
  31. package/dist/cli/commands/skills.js +6 -6
  32. package/dist/cli/commands/skills.js.map +1 -1
  33. package/dist/cli/commands/task.js +4 -4
  34. package/dist/cli/commands/task.js.map +1 -1
  35. package/dist/cli/commands/update.d.ts.map +1 -1
  36. package/dist/cli/commands/update.js +122 -52
  37. package/dist/cli/commands/update.js.map +1 -1
  38. package/dist/cli/prompts.d.ts.map +1 -1
  39. package/dist/cli/prompts.js +1 -78
  40. package/dist/cli/prompts.js.map +1 -1
  41. package/dist/core/claude/claude-mcp.d.ts +59 -0
  42. package/dist/core/claude/claude-mcp.d.ts.map +1 -0
  43. package/dist/core/claude/claude-mcp.js +220 -0
  44. package/dist/core/claude/claude-mcp.js.map +1 -0
  45. package/dist/core/claude/claude-md-generator.d.ts +52 -0
  46. package/dist/core/claude/claude-md-generator.d.ts.map +1 -0
  47. package/dist/core/claude/claude-md-generator.js +104 -0
  48. package/dist/core/claude/claude-md-generator.js.map +1 -0
  49. package/dist/core/claude/claude-settings-manager.d.ts +44 -0
  50. package/dist/core/claude/claude-settings-manager.d.ts.map +1 -0
  51. package/dist/core/claude/claude-settings-manager.js +194 -0
  52. package/dist/core/claude/claude-settings-manager.js.map +1 -0
  53. package/dist/core/console/cli-bridge.d.ts +113 -0
  54. package/dist/core/console/cli-bridge.d.ts.map +1 -0
  55. package/dist/core/console/cli-bridge.js +1094 -0
  56. package/dist/core/console/cli-bridge.js.map +1 -0
  57. package/dist/core/detect/detector.d.ts +35 -0
  58. package/dist/core/detect/detector.d.ts.map +1 -0
  59. package/dist/core/detect/detector.js +541 -0
  60. package/dist/core/detect/detector.js.map +1 -0
  61. package/dist/core/docs/docs-generator.d.ts +9 -0
  62. package/dist/core/docs/docs-generator.d.ts.map +1 -0
  63. package/dist/core/docs/docs-generator.js +531 -0
  64. package/dist/core/docs/docs-generator.js.map +1 -0
  65. package/dist/core/docs/mcp-reference-generator.d.ts +13 -0
  66. package/dist/core/docs/mcp-reference-generator.d.ts.map +1 -0
  67. package/dist/core/docs/mcp-reference-generator.js +66 -0
  68. package/dist/core/docs/mcp-reference-generator.js.map +1 -0
  69. package/dist/core/generators/generator.d.ts +54 -0
  70. package/dist/core/generators/generator.d.ts.map +1 -0
  71. package/dist/core/generators/generator.js +1041 -0
  72. package/dist/core/generators/generator.js.map +1 -0
  73. package/dist/core/generators/gitignore-generator.d.ts +13 -0
  74. package/dist/core/generators/gitignore-generator.d.ts.map +1 -0
  75. package/dist/core/generators/gitignore-generator.js +307 -0
  76. package/dist/core/generators/gitignore-generator.js.map +1 -0
  77. package/dist/core/generators/minimal-scaffolder.d.ts +8 -0
  78. package/dist/core/generators/minimal-scaffolder.d.ts.map +1 -0
  79. package/dist/core/generators/minimal-scaffolder.js +51 -0
  80. package/dist/core/generators/minimal-scaffolder.js.map +1 -0
  81. package/dist/core/generators/rules-generator.d.ts +73 -0
  82. package/dist/core/generators/rules-generator.d.ts.map +1 -0
  83. package/dist/core/generators/rules-generator.js +202 -0
  84. package/dist/core/generators/rules-generator.js.map +1 -0
  85. package/dist/core/generators/workflow-generator.d.ts +15 -0
  86. package/dist/core/generators/workflow-generator.d.ts.map +1 -0
  87. package/dist/core/generators/workflow-generator.js +390 -0
  88. package/dist/core/generators/workflow-generator.js.map +1 -0
  89. package/dist/core/ide/multi-tool-generator.d.ts +59 -0
  90. package/dist/core/ide/multi-tool-generator.d.ts.map +1 -0
  91. package/dist/core/ide/multi-tool-generator.js +157 -0
  92. package/dist/core/ide/multi-tool-generator.js.map +1 -0
  93. package/dist/core/ide/opencode-generator.d.ts +72 -0
  94. package/dist/core/ide/opencode-generator.d.ts.map +1 -0
  95. package/dist/core/ide/opencode-generator.js +450 -0
  96. package/dist/core/ide/opencode-generator.js.map +1 -0
  97. package/dist/core/merger.d.ts +1 -1
  98. package/dist/core/merger.d.ts.map +1 -1
  99. package/dist/core/merger.js +5 -5
  100. package/dist/core/merger.js.map +1 -1
  101. package/dist/core/migrator.d.ts +0 -1
  102. package/dist/core/migrator.d.ts.map +1 -1
  103. package/dist/core/migrator.js +4 -29
  104. package/dist/core/migrator.js.map +1 -1
  105. package/dist/core/quality/coverage-checker.d.ts +14 -0
  106. package/dist/core/quality/coverage-checker.d.ts.map +1 -0
  107. package/dist/core/quality/coverage-checker.js +176 -0
  108. package/dist/core/quality/coverage-checker.js.map +1 -0
  109. package/dist/core/quality/dependency-checker.d.ts +21 -0
  110. package/dist/core/quality/dependency-checker.d.ts.map +1 -0
  111. package/dist/core/quality/dependency-checker.js +247 -0
  112. package/dist/core/quality/dependency-checker.js.map +1 -0
  113. package/dist/core/quality/doctor.d.ts +19 -0
  114. package/dist/core/quality/doctor.d.ts.map +1 -0
  115. package/dist/core/quality/doctor.js +163 -0
  116. package/dist/core/quality/doctor.js.map +1 -0
  117. package/dist/core/quality/validator.d.ts +21 -0
  118. package/dist/core/quality/validator.d.ts.map +1 -0
  119. package/dist/core/quality/validator.js +177 -0
  120. package/dist/core/quality/validator.js.map +1 -0
  121. package/dist/core/skills/skills-manager.d.ts +126 -0
  122. package/dist/core/skills/skills-manager.d.ts.map +1 -0
  123. package/dist/core/skills/skills-manager.js +630 -0
  124. package/dist/core/skills/skills-manager.js.map +1 -0
  125. package/dist/core/state/config-manager.d.ts +86 -0
  126. package/dist/core/state/config-manager.d.ts.map +1 -0
  127. package/dist/core/state/config-manager.js +562 -0
  128. package/dist/core/state/config-manager.js.map +1 -0
  129. package/dist/core/state/override-manager.d.ts +23 -0
  130. package/dist/core/state/override-manager.d.ts.map +1 -0
  131. package/dist/core/state/override-manager.js +82 -0
  132. package/dist/core/state/override-manager.js.map +1 -0
  133. package/dist/core/state/state-writer.d.ts +34 -0
  134. package/dist/core/state/state-writer.d.ts.map +1 -0
  135. package/dist/core/state/state-writer.js +78 -0
  136. package/dist/core/state/state-writer.js.map +1 -0
  137. package/dist/core/state/version-bumper.d.ts +19 -0
  138. package/dist/core/state/version-bumper.d.ts.map +1 -0
  139. package/dist/core/state/version-bumper.js +180 -0
  140. package/dist/core/state/version-bumper.js.map +1 -0
  141. package/dist/core/tasks/decision-manager.d.ts +25 -0
  142. package/dist/core/tasks/decision-manager.d.ts.map +1 -0
  143. package/dist/core/tasks/decision-manager.js +183 -0
  144. package/dist/core/tasks/decision-manager.js.map +1 -0
  145. package/dist/core/tasks/knowledge-manager.d.ts +24 -0
  146. package/dist/core/tasks/knowledge-manager.d.ts.map +1 -0
  147. package/dist/core/tasks/knowledge-manager.js +173 -0
  148. package/dist/core/tasks/knowledge-manager.js.map +1 -0
  149. package/dist/core/tasks/learn-manager.d.ts +27 -0
  150. package/dist/core/tasks/learn-manager.d.ts.map +1 -0
  151. package/dist/core/tasks/learn-manager.js +121 -0
  152. package/dist/core/tasks/learn-manager.js.map +1 -0
  153. package/dist/core/tasks/plans-manager.d.ts +46 -0
  154. package/dist/core/tasks/plans-manager.d.ts.map +1 -0
  155. package/dist/core/tasks/plans-manager.js +158 -0
  156. package/dist/core/tasks/plans-manager.js.map +1 -0
  157. package/dist/core/tasks/task-manager.d.ts +127 -0
  158. package/dist/core/tasks/task-manager.d.ts.map +1 -0
  159. package/dist/core/tasks/task-manager.js +607 -0
  160. package/dist/core/tasks/task-manager.js.map +1 -0
  161. package/dist/core/workspace/project-worker.d.ts +6 -6
  162. package/dist/core/workspace/project-worker.d.ts.map +1 -1
  163. package/dist/core/workspace/project-worker.js +6 -6
  164. package/dist/core/workspace/project-worker.js.map +1 -1
  165. package/dist/index.d.ts +1 -1
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js +19 -176
  168. package/dist/index.js.map +1 -1
  169. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  170. package/dist/mcp/rulebook-server.js +16 -960
  171. package/dist/mcp/rulebook-server.js.map +1 -1
  172. package/dist/memory/file-search.d.ts +43 -0
  173. package/dist/memory/file-search.d.ts.map +1 -0
  174. package/dist/memory/file-search.js +228 -0
  175. package/dist/memory/file-search.js.map +1 -0
  176. package/dist/memory/file-store.d.ts +99 -0
  177. package/dist/memory/file-store.d.ts.map +1 -0
  178. package/dist/memory/file-store.js +615 -0
  179. package/dist/memory/file-store.js.map +1 -0
  180. package/dist/memory/legacy-migrator.d.ts +27 -0
  181. package/dist/memory/legacy-migrator.d.ts.map +1 -0
  182. package/dist/memory/legacy-migrator.js +185 -0
  183. package/dist/memory/legacy-migrator.js.map +1 -0
  184. package/dist/memory/memory-manager.d.ts +25 -24
  185. package/dist/memory/memory-manager.d.ts.map +1 -1
  186. package/dist/memory/memory-manager.js +97 -140
  187. package/dist/memory/memory-manager.js.map +1 -1
  188. package/dist/memory/memory-types.d.ts +1 -1
  189. package/dist/memory/memory-types.d.ts.map +1 -1
  190. package/dist/types.d.ts +8 -119
  191. package/dist/types.d.ts.map +1 -1
  192. package/package.json +1 -6
  193. package/templates/agents/context-intelligence.md +50 -52
  194. package/templates/cli/OPENCODE.md +85 -18
  195. package/templates/commands/rulebook-learn-capture.md +41 -48
  196. package/templates/commands/rulebook-learn-list.md +13 -13
  197. package/templates/core/AGENTS_LEAN.md +0 -14
  198. package/templates/hooks/check-context-and-handoff.sh +8 -10
  199. package/templates/hooks/enforce-pre-tool.sh +70 -0
  200. package/templates/hooks/terse-mode-tracker.sh +146 -143
  201. package/templates/ides/OPENCODE.md +63 -0
  202. package/templates/skills/cli/opencode/SKILL.md +82 -28
  203. package/.claude/commands/ralph-config.md +0 -112
  204. package/.claude/commands/ralph-history.md +0 -110
  205. package/.claude/commands/ralph-init.md +0 -72
  206. package/.claude/commands/ralph-pause-resume.md +0 -105
  207. package/.claude/commands/ralph-run.md +0 -101
  208. package/.claude/commands/ralph-status.md +0 -76
  209. package/templates/core/RALPH.md +0 -471
  210. package/templates/frameworks/ANGULAR.md +0 -36
  211. package/templates/frameworks/DJANGO.md +0 -83
  212. package/templates/frameworks/ELECTRON.md +0 -147
  213. package/templates/frameworks/FLASK.md +0 -38
  214. package/templates/frameworks/FLUTTER.md +0 -55
  215. package/templates/frameworks/JQUERY.md +0 -32
  216. package/templates/frameworks/LARAVEL.md +0 -38
  217. package/templates/frameworks/NESTJS.md +0 -43
  218. package/templates/frameworks/NEXTJS.md +0 -127
  219. package/templates/frameworks/NUXT.md +0 -40
  220. package/templates/frameworks/RAILS.md +0 -66
  221. package/templates/frameworks/REACT.md +0 -38
  222. package/templates/frameworks/REACT_NATIVE.md +0 -47
  223. package/templates/frameworks/SPRING.md +0 -39
  224. package/templates/frameworks/SYMFONY.md +0 -36
  225. package/templates/frameworks/VUE.md +0 -36
  226. package/templates/frameworks/ZEND.md +0 -35
  227. package/templates/hooks/enforce-mcp-for-tasks.sh +0 -31
  228. package/templates/hooks/enforce-no-deferred.sh +0 -21
  229. package/templates/hooks/enforce-no-shortcuts.sh +0 -31
  230. package/templates/ides/COPILOT.md +0 -37
  231. package/templates/ides/CURSOR.md +0 -43
  232. package/templates/ides/JETBRAINS_AI.md +0 -35
  233. package/templates/ides/REPLIT.md +0 -36
  234. package/templates/ides/TABNINE.md +0 -29
  235. package/templates/ides/VSCODE.md +0 -40
  236. package/templates/ides/WINDSURF.md +0 -36
  237. package/templates/ides/ZED.md +0 -32
  238. package/templates/ides/cursor-mdc/go.mdc +0 -24
  239. package/templates/ides/cursor-mdc/python.mdc +0 -24
  240. package/templates/ides/cursor-mdc/quality.mdc +0 -25
  241. package/templates/ides/cursor-mdc/ralph.mdc +0 -39
  242. package/templates/ides/cursor-mdc/rulebook.mdc +0 -38
  243. package/templates/ides/cursor-mdc/rust.mdc +0 -24
  244. package/templates/ides/cursor-mdc/typescript.mdc +0 -25
  245. package/templates/ralph/ralph-history.bat +0 -4
  246. package/templates/ralph/ralph-history.sh +0 -5
  247. package/templates/ralph/ralph-init.bat +0 -5
  248. package/templates/ralph/ralph-init.sh +0 -5
  249. package/templates/ralph/ralph-pause.bat +0 -5
  250. package/templates/ralph/ralph-pause.sh +0 -5
  251. package/templates/ralph/ralph-run.bat +0 -5
  252. package/templates/ralph/ralph-run.sh +0 -5
  253. package/templates/ralph/ralph-status.bat +0 -4
  254. package/templates/ralph/ralph-status.sh +0 -5
  255. package/templates/services/AZURE_BLOB.md +0 -184
  256. package/templates/services/CASSANDRA.md +0 -239
  257. package/templates/services/DATADOG.md +0 -26
  258. package/templates/services/DOCKER.md +0 -124
  259. package/templates/services/DOCKER_COMPOSE.md +0 -168
  260. package/templates/services/DYNAMODB.md +0 -308
  261. package/templates/services/ELASTICSEARCH.md +0 -347
  262. package/templates/services/GCS.md +0 -178
  263. package/templates/services/HELM.md +0 -194
  264. package/templates/services/INFLUXDB.md +0 -265
  265. package/templates/services/KAFKA.md +0 -341
  266. package/templates/services/KUBERNETES.md +0 -208
  267. package/templates/services/MARIADB.md +0 -183
  268. package/templates/services/MEMCACHED.md +0 -242
  269. package/templates/services/MINIO.md +0 -201
  270. package/templates/services/MONGODB.md +0 -268
  271. package/templates/services/MYSQL.md +0 -358
  272. package/templates/services/NEO4J.md +0 -247
  273. package/templates/services/OPENTELEMETRY.md +0 -25
  274. package/templates/services/ORACLE.md +0 -290
  275. package/templates/services/PINO.md +0 -24
  276. package/templates/services/POSTGRESQL.md +0 -326
  277. package/templates/services/PROMETHEUS.md +0 -33
  278. package/templates/services/RABBITMQ.md +0 -286
  279. package/templates/services/REDIS.md +0 -292
  280. package/templates/services/S3.md +0 -298
  281. package/templates/services/SENTRY.md +0 -23
  282. package/templates/services/SQLITE.md +0 -294
  283. package/templates/services/SQLSERVER.md +0 -294
  284. package/templates/services/WINSTON.md +0 -30
  285. package/templates/skills/frameworks/angular/SKILL.md +0 -46
  286. package/templates/skills/frameworks/django/SKILL.md +0 -93
  287. package/templates/skills/frameworks/electron/SKILL.md +0 -157
  288. package/templates/skills/frameworks/flask/SKILL.md +0 -48
  289. package/templates/skills/frameworks/flutter/SKILL.md +0 -65
  290. package/templates/skills/frameworks/jquery/SKILL.md +0 -42
  291. package/templates/skills/frameworks/laravel/SKILL.md +0 -48
  292. package/templates/skills/frameworks/nestjs/SKILL.md +0 -53
  293. package/templates/skills/frameworks/nextjs/SKILL.md +0 -137
  294. package/templates/skills/frameworks/nuxt/SKILL.md +0 -50
  295. package/templates/skills/frameworks/rails/SKILL.md +0 -76
  296. package/templates/skills/frameworks/react/SKILL.md +0 -48
  297. package/templates/skills/frameworks/react-native/SKILL.md +0 -57
  298. package/templates/skills/frameworks/spring/SKILL.md +0 -49
  299. package/templates/skills/frameworks/symfony/SKILL.md +0 -46
  300. package/templates/skills/frameworks/vue/SKILL.md +0 -46
  301. package/templates/skills/frameworks/zend/SKILL.md +0 -45
  302. package/templates/skills/services/azure-blob/SKILL.md +0 -194
  303. package/templates/skills/services/cassandra/SKILL.md +0 -249
  304. package/templates/skills/services/dynamodb/SKILL.md +0 -318
  305. package/templates/skills/services/elasticsearch/SKILL.md +0 -357
  306. package/templates/skills/services/gcs/SKILL.md +0 -188
  307. package/templates/skills/services/influxdb/SKILL.md +0 -275
  308. package/templates/skills/services/kafka/SKILL.md +0 -351
  309. package/templates/skills/services/mariadb/SKILL.md +0 -193
  310. package/templates/skills/services/memcached/SKILL.md +0 -252
  311. package/templates/skills/services/minio/SKILL.md +0 -211
  312. package/templates/skills/services/mongodb/SKILL.md +0 -278
  313. package/templates/skills/services/mysql/SKILL.md +0 -368
  314. package/templates/skills/services/neo4j/SKILL.md +0 -257
  315. package/templates/skills/services/oracle/SKILL.md +0 -300
  316. package/templates/skills/services/postgresql/SKILL.md +0 -336
  317. package/templates/skills/services/rabbitmq/SKILL.md +0 -296
  318. package/templates/skills/services/redis/SKILL.md +0 -302
  319. package/templates/skills/services/s3/SKILL.md +0 -308
  320. package/templates/skills/services/sqlite/SKILL.md +0 -304
  321. package/templates/skills/services/sqlserver/SKILL.md +0 -304
  322. package/templates/skills/workflows/ralph/SETUP.md +0 -228
  323. package/templates/skills/workflows/ralph/SKILL.md +0 -309
  324. package/templates/skills/workflows/ralph/install.sh +0 -87
  325. package/templates/skills/workflows/ralph/manifest.json +0 -158
@@ -1,168 +0,0 @@
1
- <!-- DOCKER_COMPOSE:START -->
2
- # Docker Compose Instructions
3
-
4
- **CRITICAL**: Follow these Docker Compose best practices for local development and multi-container orchestration.
5
-
6
- ## Version and Structure
7
-
8
- ### File Organization
9
- - Use `docker-compose.yml` for base configuration
10
- - Use `docker-compose.override.yml` for local development overrides
11
- - Use `docker-compose.prod.yml` for production-specific settings
12
- - Do NOT commit secrets in `docker-compose.yml` — use `.env` files
13
-
14
- ### Compose File
15
- ```yaml
16
- services:
17
- app:
18
- build:
19
- context: .
20
- dockerfile: Dockerfile
21
- target: runtime
22
- env_file: [.env]
23
- ports:
24
- - "3000:3000"
25
- depends_on:
26
- db:
27
- condition: service_healthy
28
- healthcheck:
29
- test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
30
- interval: 30s
31
- timeout: 3s
32
- retries: 3
33
- start_period: 10s
34
- deploy:
35
- resources:
36
- limits:
37
- memory: 512M
38
- cpus: "0.5"
39
- restart: unless-stopped
40
- ```
41
-
42
- ## Required Fields Per Service
43
-
44
- ### Health Checks
45
- ALL services MUST define a healthcheck:
46
- ```yaml
47
- healthcheck:
48
- test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
49
- interval: 30s
50
- timeout: 3s
51
- retries: 3
52
- ```
53
-
54
- ### Resource Limits
55
- ALL services SHOULD define resource limits for production-like environments:
56
- ```yaml
57
- deploy:
58
- resources:
59
- limits:
60
- memory: 512M
61
- cpus: "0.5"
62
- reservations:
63
- memory: 128M
64
- cpus: "0.25"
65
- ```
66
-
67
- ### Restart Policy
68
- ```yaml
69
- restart: unless-stopped
70
- ```
71
-
72
- ### Named Volumes
73
- Use named volumes (not bind mounts) for persistent data:
74
- ```yaml
75
- volumes:
76
- postgres_data:
77
- redis_data:
78
-
79
- services:
80
- db:
81
- volumes:
82
- - postgres_data:/var/lib/postgresql/data
83
- ```
84
-
85
- ## Environment Variables
86
-
87
- ### Configuration
88
- - Use `.env` file: `env_file: [.env]`
89
- - Never hardcode credentials in docker-compose.yml
90
- - Document all required environment variables in README or `.env.example`
91
-
92
- ### .env.example Pattern
93
- ```bash
94
- # Database
95
- DB_HOST=localhost
96
- DB_PORT=5432
97
- DB_NAME=myapp
98
- DB_USER=myuser
99
- DB_PASSWORD=changeme
100
-
101
- # Redis
102
- REDIS_URL=redis://localhost:6379
103
-
104
- # Application
105
- NODE_ENV=development
106
- PORT=3000
107
- ```
108
-
109
- ## Networking
110
-
111
- ### Service Communication
112
- - Services on the same network communicate by service name
113
- - Use explicit networks for isolation:
114
- ```yaml
115
- networks:
116
- frontend:
117
- backend:
118
-
119
- services:
120
- app:
121
- networks: [frontend, backend]
122
- db:
123
- networks: [backend]
124
- ```
125
-
126
- ## Common Patterns
127
-
128
- ### Development Setup
129
- ```yaml
130
- services:
131
- app:
132
- build: .
133
- volumes:
134
- - .:/app
135
- - /app/node_modules
136
- environment:
137
- - NODE_ENV=development
138
- command: npm run dev
139
- ```
140
-
141
- ### Database with Init Scripts
142
- ```yaml
143
- services:
144
- db:
145
- image: postgres:16-alpine
146
- environment:
147
- POSTGRES_DB: myapp
148
- POSTGRES_USER: myuser
149
- POSTGRES_PASSWORD: ${DB_PASSWORD}
150
- volumes:
151
- - postgres_data:/var/lib/postgresql/data
152
- - ./init.sql:/docker-entrypoint-initdb.d/init.sql
153
- healthcheck:
154
- test: ["CMD-SHELL", "pg_isready -U myuser"]
155
- interval: 10s
156
- retries: 5
157
- ```
158
-
159
- ## Best Practices
160
-
161
- - Use `depends_on` with `condition: service_healthy` for startup ordering
162
- - Pin image versions (e.g., `postgres:16-alpine`, not `postgres:latest`)
163
- - Keep compose files DRY with YAML anchors or extension fields (`x-common`)
164
- - Use `docker compose up --build` to rebuild images after code changes
165
- - Run `docker compose down -v` to clean up volumes during development
166
- - Separate concerns: one service per container
167
-
168
- <!-- DOCKER_COMPOSE:END -->
@@ -1,308 +0,0 @@
1
- <!-- DYNAMODB:START -->
2
- # AWS DynamoDB Instructions
3
-
4
- **CRITICAL**: Use DynamoDB for serverless NoSQL database with automatic scaling, high performance, and pay-per-use pricing.
5
-
6
- ## Core Features
7
-
8
- ### Connection
9
- ```typescript
10
- // Using @aws-sdk/client-dynamodb
11
- import { DynamoDBClient } from '@aws-sdk/client-dynamodb'
12
- import { DynamoDBDocumentClient, PutCommand, GetCommand, QueryCommand, ScanCommand } from '@aws-sdk/lib-dynamodb'
13
-
14
- const client = new DynamoDBClient({
15
- region: process.env.AWS_REGION || 'us-east-1',
16
- credentials: {
17
- accessKeyId: process.env.AWS_ACCESS_KEY_ID || '',
18
- secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || '',
19
- },
20
- })
21
-
22
- const docClient = DynamoDBDocumentClient.from(client)
23
-
24
- // Using AWS SDK v2
25
- import AWS from 'aws-sdk'
26
-
27
- const dynamodb = new AWS.DynamoDB.DocumentClient({
28
- region: process.env.AWS_REGION || 'us-east-1',
29
- accessKeyId: process.env.AWS_ACCESS_KEY_ID,
30
- secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
31
- })
32
- ```
33
-
34
- ### Basic Operations
35
- ```typescript
36
- // Put item
37
- await docClient.send(new PutCommand({
38
- TableName: 'Users',
39
- Item: {
40
- id: 'user-1',
41
- email: 'john@example.com',
42
- name: 'John Doe',
43
- createdAt: new Date().toISOString(),
44
- },
45
- }))
46
-
47
- // Get item
48
- const result = await docClient.send(new GetCommand({
49
- TableName: 'Users',
50
- Key: {
51
- id: 'user-1',
52
- },
53
- }))
54
- const user = result.Item
55
-
56
- // Update item
57
- await docClient.send(new UpdateCommand({
58
- TableName: 'Users',
59
- Key: { id: 'user-1' },
60
- UpdateExpression: 'SET #name = :name, updatedAt = :updatedAt',
61
- ExpressionAttributeNames: {
62
- '#name': 'name',
63
- },
64
- ExpressionAttributeValues: {
65
- ':name': 'Jane Doe',
66
- ':updatedAt': new Date().toISOString(),
67
- },
68
- }))
69
-
70
- // Delete item
71
- await docClient.send(new DeleteCommand({
72
- TableName: 'Users',
73
- Key: { id: 'user-1' },
74
- }))
75
- ```
76
-
77
- ### Query Operations
78
- ```typescript
79
- // Query by partition key
80
- const result = await docClient.send(new QueryCommand({
81
- TableName: 'Posts',
82
- KeyConditionExpression: 'userId = :userId',
83
- ExpressionAttributeValues: {
84
- ':userId': 'user-1',
85
- },
86
- ScanIndexForward: false, // Sort descending
87
- Limit: 10,
88
- }))
89
-
90
- // Query with GSI (Global Secondary Index)
91
- const result = await docClient.send(new QueryCommand({
92
- TableName: 'Users',
93
- IndexName: 'EmailIndex',
94
- KeyConditionExpression: 'email = :email',
95
- ExpressionAttributeValues: {
96
- ':email': 'john@example.com',
97
- },
98
- }))
99
-
100
- // Scan (use sparingly)
101
- const result = await docClient.send(new ScanCommand({
102
- TableName: 'Users',
103
- FilterExpression: '#status = :status',
104
- ExpressionAttributeNames: {
105
- '#status': 'status',
106
- },
107
- ExpressionAttributeValues: {
108
- ':status': 'active',
109
- },
110
- Limit: 100,
111
- }))
112
- ```
113
-
114
- ### Advanced Features
115
- ```typescript
116
- // Batch operations
117
- import { BatchWriteCommand } from '@aws-sdk/lib-dynamodb'
118
-
119
- await docClient.send(new BatchWriteCommand({
120
- RequestItems: {
121
- Users: [
122
- {
123
- PutRequest: {
124
- Item: { id: 'user-1', name: 'User 1' },
125
- },
126
- },
127
- {
128
- PutRequest: {
129
- Item: { id: 'user-2', name: 'User 2' },
130
- },
131
- },
132
- ],
133
- },
134
- }))
135
-
136
- // Transactions
137
- import { TransactWriteCommand } from '@aws-sdk/lib-dynamodb'
138
-
139
- await docClient.send(new TransactWriteCommand({
140
- TransactItems: [
141
- {
142
- Put: {
143
- TableName: 'Accounts',
144
- Item: { userId: 'user-1', balance: 1000 },
145
- },
146
- },
147
- {
148
- Put: {
149
- TableName: 'Transactions',
150
- Item: { id: 'tx-1', userId: 'user-1', amount: 1000 },
151
- },
152
- },
153
- ],
154
- }))
155
-
156
- // Conditional writes
157
- await docClient.send(new PutCommand({
158
- TableName: 'Users',
159
- Item: { id: 'user-1', email: 'john@example.com' },
160
- ConditionExpression: 'attribute_not_exists(id)',
161
- }))
162
- ```
163
-
164
- ## Common Patterns
165
-
166
- ### Single Table Design
167
- ```typescript
168
- // Store different entity types in one table
169
- await docClient.send(new PutCommand({
170
- TableName: 'AppData',
171
- Item: {
172
- PK: 'USER#user-1',
173
- SK: 'METADATA',
174
- EntityType: 'User',
175
- email: 'john@example.com',
176
- name: 'John Doe',
177
- },
178
- }))
179
-
180
- await docClient.send(new PutCommand({
181
- TableName: 'AppData',
182
- Item: {
183
- PK: 'USER#user-1',
184
- SK: 'POST#post-1',
185
- EntityType: 'Post',
186
- title: 'My Post',
187
- content: 'Content here',
188
- },
189
- }))
190
-
191
- // Query all posts for a user
192
- const result = await docClient.send(new QueryCommand({
193
- TableName: 'AppData',
194
- KeyConditionExpression: 'PK = :pk AND begins_with(SK, :sk)',
195
- ExpressionAttributeValues: {
196
- ':pk': 'USER#user-1',
197
- ':sk': 'POST#',
198
- },
199
- }))
200
- ```
201
-
202
- ### Time-to-Live (TTL)
203
- ```typescript
204
- // Items automatically deleted after TTL
205
- await docClient.send(new PutCommand({
206
- TableName: 'Sessions',
207
- Item: {
208
- sessionId: 'session-1',
209
- userId: 'user-1',
210
- ttl: Math.floor(Date.now() / 1000) + 3600, // 1 hour from now
211
- },
212
- }))
213
- ```
214
-
215
- ## Best Practices
216
-
217
- ✅ **DO:**
218
- - Design for access patterns
219
- - Use appropriate partition keys
220
- - Create GSIs for alternative access patterns
221
- - Use batch operations when possible
222
- - Implement exponential backoff for throttling
223
- - Use TTL for temporary data
224
- - Monitor provisioned capacity
225
- - Use transactions for atomic operations
226
- - Implement proper error handling
227
- - Use single table design when appropriate
228
-
229
- ❌ **DON'T:**
230
- - Use Scan for frequent queries
231
- - Create too many GSIs (affects write performance)
232
- - Store large items (> 400KB)
233
- - Ignore throttling errors
234
- - Hardcode table names
235
- - Skip error handling
236
- - Use eventually consistent reads when strong consistency needed
237
- - Ignore capacity planning
238
- - Store sensitive data without encryption
239
- - Skip monitoring
240
-
241
- ## Configuration
242
-
243
- ### Environment Variables
244
- ```bash
245
- AWS_REGION=us-east-1
246
- AWS_ACCESS_KEY_ID=your-access-key
247
- AWS_SECRET_ACCESS_KEY=your-secret-key
248
- DYNAMODB_TABLE_PREFIX=myapp_
249
- ```
250
-
251
- ### IAM Policy
252
- ```json
253
- {
254
- "Version": "2012-10-17",
255
- "Statement": [
256
- {
257
- "Effect": "Allow",
258
- "Action": [
259
- "dynamodb:PutItem",
260
- "dynamodb:GetItem",
261
- "dynamodb:UpdateItem",
262
- "dynamodb:DeleteItem",
263
- "dynamodb:Query",
264
- "dynamodb:Scan"
265
- ],
266
- "Resource": "arn:aws:dynamodb:*:*:table/myapp-*"
267
- }
268
- ]
269
- }
270
- ```
271
-
272
- ## Integration with Development
273
-
274
- ### Testing
275
- ```typescript
276
- // Use DynamoDB Local
277
- const localClient = new DynamoDBClient({
278
- endpoint: 'http://localhost:8000',
279
- region: 'local',
280
- credentials: {
281
- accessKeyId: 'local',
282
- secretAccessKey: 'local',
283
- },
284
- })
285
-
286
- // Clean up after tests
287
- afterEach(async () => {
288
- // Delete test items or use separate test table
289
- })
290
- ```
291
-
292
- ### Health Checks
293
- ```typescript
294
- async function checkDynamoDBHealth(): Promise<boolean> {
295
- try {
296
- await docClient.send(new GetCommand({
297
- TableName: 'HealthCheck',
298
- Key: { id: 'health' },
299
- }))
300
- return true
301
- } catch {
302
- return false
303
- }
304
- }
305
- ```
306
-
307
- <!-- DYNAMODB:END -->
308
-