@hivehub/rulebook 5.5.1 → 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.
- package/.claude/commands/rulebook-learn-capture.md +41 -48
- package/.claude/commands/rulebook-learn-list.md +13 -13
- package/README.md +332 -394
- package/dist/cli/commands/context-intelligence.d.ts +0 -1
- package/dist/cli/commands/context-intelligence.d.ts.map +1 -1
- package/dist/cli/commands/context-intelligence.js +12 -33
- package/dist/cli/commands/context-intelligence.js.map +1 -1
- package/dist/cli/commands/index.d.ts +4 -7
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +4 -7
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +40 -81
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +0 -1
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +1 -7
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/memory.d.ts +7 -1
- package/dist/cli/commands/memory.d.ts.map +1 -1
- package/dist/cli/commands/memory.js +51 -57
- package/dist/cli/commands/memory.js.map +1 -1
- package/dist/cli/commands/misc.d.ts +1 -15
- package/dist/cli/commands/misc.d.ts.map +1 -1
- package/dist/cli/commands/misc.js +36 -215
- package/dist/cli/commands/misc.js.map +1 -1
- package/dist/cli/commands/plans.d.ts +0 -6
- package/dist/cli/commands/plans.d.ts.map +1 -1
- package/dist/cli/commands/plans.js +9 -77
- package/dist/cli/commands/plans.js.map +1 -1
- package/dist/cli/commands/skills.js +6 -6
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/task.js +4 -4
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +122 -52
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/prompts.d.ts.map +1 -1
- package/dist/cli/prompts.js +1 -78
- package/dist/cli/prompts.js.map +1 -1
- package/dist/core/claude/claude-mcp.d.ts +59 -0
- package/dist/core/claude/claude-mcp.d.ts.map +1 -0
- package/dist/core/claude/claude-mcp.js +220 -0
- package/dist/core/claude/claude-mcp.js.map +1 -0
- package/dist/core/claude/claude-md-generator.d.ts +52 -0
- package/dist/core/claude/claude-md-generator.d.ts.map +1 -0
- package/dist/core/claude/claude-md-generator.js +104 -0
- package/dist/core/claude/claude-md-generator.js.map +1 -0
- package/dist/core/claude/claude-settings-manager.d.ts +44 -0
- package/dist/core/claude/claude-settings-manager.d.ts.map +1 -0
- package/dist/core/claude/claude-settings-manager.js +194 -0
- package/dist/core/claude/claude-settings-manager.js.map +1 -0
- package/dist/core/claude-settings-manager.d.ts.map +1 -1
- package/dist/core/claude-settings-manager.js +9 -3
- package/dist/core/claude-settings-manager.js.map +1 -1
- package/dist/core/console/cli-bridge.d.ts +113 -0
- package/dist/core/console/cli-bridge.d.ts.map +1 -0
- package/dist/core/console/cli-bridge.js +1094 -0
- package/dist/core/console/cli-bridge.js.map +1 -0
- package/dist/core/detect/detector.d.ts +35 -0
- package/dist/core/detect/detector.d.ts.map +1 -0
- package/dist/core/detect/detector.js +541 -0
- package/dist/core/detect/detector.js.map +1 -0
- package/dist/core/docs/docs-generator.d.ts +9 -0
- package/dist/core/docs/docs-generator.d.ts.map +1 -0
- package/dist/core/docs/docs-generator.js +531 -0
- package/dist/core/docs/docs-generator.js.map +1 -0
- package/dist/core/docs/mcp-reference-generator.d.ts +13 -0
- package/dist/core/docs/mcp-reference-generator.d.ts.map +1 -0
- package/dist/core/docs/mcp-reference-generator.js +66 -0
- package/dist/core/docs/mcp-reference-generator.js.map +1 -0
- package/dist/core/generators/generator.d.ts +54 -0
- package/dist/core/generators/generator.d.ts.map +1 -0
- package/dist/core/generators/generator.js +1041 -0
- package/dist/core/generators/generator.js.map +1 -0
- package/dist/core/generators/gitignore-generator.d.ts +13 -0
- package/dist/core/generators/gitignore-generator.d.ts.map +1 -0
- package/dist/core/generators/gitignore-generator.js +307 -0
- package/dist/core/generators/gitignore-generator.js.map +1 -0
- package/dist/core/generators/minimal-scaffolder.d.ts +8 -0
- package/dist/core/generators/minimal-scaffolder.d.ts.map +1 -0
- package/dist/core/generators/minimal-scaffolder.js +51 -0
- package/dist/core/generators/minimal-scaffolder.js.map +1 -0
- package/dist/core/generators/rules-generator.d.ts +73 -0
- package/dist/core/generators/rules-generator.d.ts.map +1 -0
- package/dist/core/generators/rules-generator.js +202 -0
- package/dist/core/generators/rules-generator.js.map +1 -0
- package/dist/core/generators/workflow-generator.d.ts +15 -0
- package/dist/core/generators/workflow-generator.d.ts.map +1 -0
- package/dist/core/generators/workflow-generator.js +390 -0
- package/dist/core/generators/workflow-generator.js.map +1 -0
- package/dist/core/ide/multi-tool-generator.d.ts +59 -0
- package/dist/core/ide/multi-tool-generator.d.ts.map +1 -0
- package/dist/core/ide/multi-tool-generator.js +157 -0
- package/dist/core/ide/multi-tool-generator.js.map +1 -0
- package/dist/core/ide/opencode-generator.d.ts +72 -0
- package/dist/core/ide/opencode-generator.d.ts.map +1 -0
- package/dist/core/ide/opencode-generator.js +450 -0
- package/dist/core/ide/opencode-generator.js.map +1 -0
- package/dist/core/merger.d.ts +1 -1
- package/dist/core/merger.d.ts.map +1 -1
- package/dist/core/merger.js +5 -5
- package/dist/core/merger.js.map +1 -1
- package/dist/core/migrator.d.ts +0 -1
- package/dist/core/migrator.d.ts.map +1 -1
- package/dist/core/migrator.js +4 -29
- package/dist/core/migrator.js.map +1 -1
- package/dist/core/quality/coverage-checker.d.ts +14 -0
- package/dist/core/quality/coverage-checker.d.ts.map +1 -0
- package/dist/core/quality/coverage-checker.js +176 -0
- package/dist/core/quality/coverage-checker.js.map +1 -0
- package/dist/core/quality/dependency-checker.d.ts +21 -0
- package/dist/core/quality/dependency-checker.d.ts.map +1 -0
- package/dist/core/quality/dependency-checker.js +247 -0
- package/dist/core/quality/dependency-checker.js.map +1 -0
- package/dist/core/quality/doctor.d.ts +19 -0
- package/dist/core/quality/doctor.d.ts.map +1 -0
- package/dist/core/quality/doctor.js +163 -0
- package/dist/core/quality/doctor.js.map +1 -0
- package/dist/core/quality/validator.d.ts +21 -0
- package/dist/core/quality/validator.d.ts.map +1 -0
- package/dist/core/quality/validator.js +177 -0
- package/dist/core/quality/validator.js.map +1 -0
- package/dist/core/ralph-scripts.d.ts.map +1 -1
- package/dist/core/ralph-scripts.js +7 -6
- package/dist/core/ralph-scripts.js.map +1 -1
- package/dist/core/skills/skills-manager.d.ts +126 -0
- package/dist/core/skills/skills-manager.d.ts.map +1 -0
- package/dist/core/skills/skills-manager.js +630 -0
- package/dist/core/skills/skills-manager.js.map +1 -0
- package/dist/core/state/config-manager.d.ts +86 -0
- package/dist/core/state/config-manager.d.ts.map +1 -0
- package/dist/core/state/config-manager.js +562 -0
- package/dist/core/state/config-manager.js.map +1 -0
- package/dist/core/state/override-manager.d.ts +23 -0
- package/dist/core/state/override-manager.d.ts.map +1 -0
- package/dist/core/state/override-manager.js +82 -0
- package/dist/core/state/override-manager.js.map +1 -0
- package/dist/core/state/state-writer.d.ts +34 -0
- package/dist/core/state/state-writer.d.ts.map +1 -0
- package/dist/core/state/state-writer.js +78 -0
- package/dist/core/state/state-writer.js.map +1 -0
- package/dist/core/state/version-bumper.d.ts +19 -0
- package/dist/core/state/version-bumper.d.ts.map +1 -0
- package/dist/core/state/version-bumper.js +180 -0
- package/dist/core/state/version-bumper.js.map +1 -0
- package/dist/core/tasks/decision-manager.d.ts +25 -0
- package/dist/core/tasks/decision-manager.d.ts.map +1 -0
- package/dist/core/tasks/decision-manager.js +183 -0
- package/dist/core/tasks/decision-manager.js.map +1 -0
- package/dist/core/tasks/knowledge-manager.d.ts +24 -0
- package/dist/core/tasks/knowledge-manager.d.ts.map +1 -0
- package/dist/core/tasks/knowledge-manager.js +173 -0
- package/dist/core/tasks/knowledge-manager.js.map +1 -0
- package/dist/core/tasks/learn-manager.d.ts +27 -0
- package/dist/core/tasks/learn-manager.d.ts.map +1 -0
- package/dist/core/tasks/learn-manager.js +121 -0
- package/dist/core/tasks/learn-manager.js.map +1 -0
- package/dist/core/tasks/plans-manager.d.ts +46 -0
- package/dist/core/tasks/plans-manager.d.ts.map +1 -0
- package/dist/core/tasks/plans-manager.js +158 -0
- package/dist/core/tasks/plans-manager.js.map +1 -0
- package/dist/core/tasks/task-manager.d.ts +127 -0
- package/dist/core/tasks/task-manager.d.ts.map +1 -0
- package/dist/core/tasks/task-manager.js +607 -0
- package/dist/core/tasks/task-manager.js.map +1 -0
- package/dist/core/workspace/project-worker.d.ts +6 -6
- package/dist/core/workspace/project-worker.d.ts.map +1 -1
- package/dist/core/workspace/project-worker.js +6 -6
- package/dist/core/workspace/project-worker.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -176
- package/dist/index.js.map +1 -1
- package/dist/mcp/rulebook-server.d.ts.map +1 -1
- package/dist/mcp/rulebook-server.js +16 -960
- package/dist/mcp/rulebook-server.js.map +1 -1
- package/dist/memory/file-search.d.ts +43 -0
- package/dist/memory/file-search.d.ts.map +1 -0
- package/dist/memory/file-search.js +228 -0
- package/dist/memory/file-search.js.map +1 -0
- package/dist/memory/file-store.d.ts +99 -0
- package/dist/memory/file-store.d.ts.map +1 -0
- package/dist/memory/file-store.js +615 -0
- package/dist/memory/file-store.js.map +1 -0
- package/dist/memory/legacy-migrator.d.ts +27 -0
- package/dist/memory/legacy-migrator.d.ts.map +1 -0
- package/dist/memory/legacy-migrator.js +185 -0
- package/dist/memory/legacy-migrator.js.map +1 -0
- package/dist/memory/memory-manager.d.ts +25 -24
- package/dist/memory/memory-manager.d.ts.map +1 -1
- package/dist/memory/memory-manager.js +97 -140
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/memory-types.d.ts +1 -1
- package/dist/memory/memory-types.d.ts.map +1 -1
- package/dist/types.d.ts +8 -119
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/file-system.d.ts +22 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +31 -0
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/git-hooks.d.ts.map +1 -1
- package/dist/utils/git-hooks.js +3 -2
- package/dist/utils/git-hooks.js.map +1 -1
- package/package.json +2 -6
- package/templates/agents/context-intelligence.md +50 -52
- package/templates/cli/OPENCODE.md +85 -18
- package/templates/commands/rulebook-learn-capture.md +41 -48
- package/templates/commands/rulebook-learn-list.md +13 -13
- package/templates/core/AGENTS_LEAN.md +0 -14
- package/templates/hooks/check-context-and-handoff.sh +74 -76
- package/templates/hooks/enforce-pre-tool.sh +70 -0
- package/templates/hooks/enforce-team-for-background-agents.sh +55 -55
- package/templates/hooks/on-compact-reinject.sh +34 -34
- package/templates/hooks/resume-from-handoff.sh +61 -61
- package/templates/hooks/terse-activate.sh +197 -197
- package/templates/hooks/terse-mode-tracker.sh +190 -187
- package/templates/ides/OPENCODE.md +63 -0
- package/templates/skills/cli/opencode/SKILL.md +82 -28
- package/.claude/commands/ralph-config.md +0 -112
- package/.claude/commands/ralph-history.md +0 -110
- package/.claude/commands/ralph-init.md +0 -72
- package/.claude/commands/ralph-pause-resume.md +0 -105
- package/.claude/commands/ralph-run.md +0 -101
- package/.claude/commands/ralph-status.md +0 -76
- package/templates/core/RALPH.md +0 -471
- package/templates/frameworks/ANGULAR.md +0 -36
- package/templates/frameworks/DJANGO.md +0 -83
- package/templates/frameworks/ELECTRON.md +0 -147
- package/templates/frameworks/FLASK.md +0 -38
- package/templates/frameworks/FLUTTER.md +0 -55
- package/templates/frameworks/JQUERY.md +0 -32
- package/templates/frameworks/LARAVEL.md +0 -38
- package/templates/frameworks/NESTJS.md +0 -43
- package/templates/frameworks/NEXTJS.md +0 -127
- package/templates/frameworks/NUXT.md +0 -40
- package/templates/frameworks/RAILS.md +0 -66
- package/templates/frameworks/REACT.md +0 -38
- package/templates/frameworks/REACT_NATIVE.md +0 -47
- package/templates/frameworks/SPRING.md +0 -39
- package/templates/frameworks/SYMFONY.md +0 -36
- package/templates/frameworks/VUE.md +0 -36
- package/templates/frameworks/ZEND.md +0 -35
- package/templates/hooks/enforce-mcp-for-tasks.sh +0 -31
- package/templates/hooks/enforce-no-deferred.sh +0 -21
- package/templates/hooks/enforce-no-shortcuts.sh +0 -31
- package/templates/ides/COPILOT.md +0 -37
- package/templates/ides/CURSOR.md +0 -43
- package/templates/ides/JETBRAINS_AI.md +0 -35
- package/templates/ides/REPLIT.md +0 -36
- package/templates/ides/TABNINE.md +0 -29
- package/templates/ides/VSCODE.md +0 -40
- package/templates/ides/WINDSURF.md +0 -36
- package/templates/ides/ZED.md +0 -32
- package/templates/ides/cursor-mdc/go.mdc +0 -24
- package/templates/ides/cursor-mdc/python.mdc +0 -24
- package/templates/ides/cursor-mdc/quality.mdc +0 -25
- package/templates/ides/cursor-mdc/ralph.mdc +0 -39
- package/templates/ides/cursor-mdc/rulebook.mdc +0 -38
- package/templates/ides/cursor-mdc/rust.mdc +0 -24
- package/templates/ides/cursor-mdc/typescript.mdc +0 -25
- package/templates/ralph/ralph-history.bat +0 -4
- package/templates/ralph/ralph-history.sh +0 -5
- package/templates/ralph/ralph-init.bat +0 -5
- package/templates/ralph/ralph-init.sh +0 -5
- package/templates/ralph/ralph-pause.bat +0 -5
- package/templates/ralph/ralph-pause.sh +0 -5
- package/templates/ralph/ralph-run.bat +0 -5
- package/templates/ralph/ralph-run.sh +0 -5
- package/templates/ralph/ralph-status.bat +0 -4
- package/templates/ralph/ralph-status.sh +0 -5
- package/templates/services/AZURE_BLOB.md +0 -184
- package/templates/services/CASSANDRA.md +0 -239
- package/templates/services/DATADOG.md +0 -26
- package/templates/services/DOCKER.md +0 -124
- package/templates/services/DOCKER_COMPOSE.md +0 -168
- package/templates/services/DYNAMODB.md +0 -308
- package/templates/services/ELASTICSEARCH.md +0 -347
- package/templates/services/GCS.md +0 -178
- package/templates/services/HELM.md +0 -194
- package/templates/services/INFLUXDB.md +0 -265
- package/templates/services/KAFKA.md +0 -341
- package/templates/services/KUBERNETES.md +0 -208
- package/templates/services/MARIADB.md +0 -183
- package/templates/services/MEMCACHED.md +0 -242
- package/templates/services/MINIO.md +0 -201
- package/templates/services/MONGODB.md +0 -268
- package/templates/services/MYSQL.md +0 -358
- package/templates/services/NEO4J.md +0 -247
- package/templates/services/OPENTELEMETRY.md +0 -25
- package/templates/services/ORACLE.md +0 -290
- package/templates/services/PINO.md +0 -24
- package/templates/services/POSTGRESQL.md +0 -326
- package/templates/services/PROMETHEUS.md +0 -33
- package/templates/services/RABBITMQ.md +0 -286
- package/templates/services/REDIS.md +0 -292
- package/templates/services/S3.md +0 -298
- package/templates/services/SENTRY.md +0 -23
- package/templates/services/SQLITE.md +0 -294
- package/templates/services/SQLSERVER.md +0 -294
- package/templates/services/WINSTON.md +0 -30
- package/templates/skills/frameworks/angular/SKILL.md +0 -46
- package/templates/skills/frameworks/django/SKILL.md +0 -93
- package/templates/skills/frameworks/electron/SKILL.md +0 -157
- package/templates/skills/frameworks/flask/SKILL.md +0 -48
- package/templates/skills/frameworks/flutter/SKILL.md +0 -65
- package/templates/skills/frameworks/jquery/SKILL.md +0 -42
- package/templates/skills/frameworks/laravel/SKILL.md +0 -48
- package/templates/skills/frameworks/nestjs/SKILL.md +0 -53
- package/templates/skills/frameworks/nextjs/SKILL.md +0 -137
- package/templates/skills/frameworks/nuxt/SKILL.md +0 -50
- package/templates/skills/frameworks/rails/SKILL.md +0 -76
- package/templates/skills/frameworks/react/SKILL.md +0 -48
- package/templates/skills/frameworks/react-native/SKILL.md +0 -57
- package/templates/skills/frameworks/spring/SKILL.md +0 -49
- package/templates/skills/frameworks/symfony/SKILL.md +0 -46
- package/templates/skills/frameworks/vue/SKILL.md +0 -46
- package/templates/skills/frameworks/zend/SKILL.md +0 -45
- package/templates/skills/services/azure-blob/SKILL.md +0 -194
- package/templates/skills/services/cassandra/SKILL.md +0 -249
- package/templates/skills/services/dynamodb/SKILL.md +0 -318
- package/templates/skills/services/elasticsearch/SKILL.md +0 -357
- package/templates/skills/services/gcs/SKILL.md +0 -188
- package/templates/skills/services/influxdb/SKILL.md +0 -275
- package/templates/skills/services/kafka/SKILL.md +0 -351
- package/templates/skills/services/mariadb/SKILL.md +0 -193
- package/templates/skills/services/memcached/SKILL.md +0 -252
- package/templates/skills/services/minio/SKILL.md +0 -211
- package/templates/skills/services/mongodb/SKILL.md +0 -278
- package/templates/skills/services/mysql/SKILL.md +0 -368
- package/templates/skills/services/neo4j/SKILL.md +0 -257
- package/templates/skills/services/oracle/SKILL.md +0 -300
- package/templates/skills/services/postgresql/SKILL.md +0 -336
- package/templates/skills/services/rabbitmq/SKILL.md +0 -296
- package/templates/skills/services/redis/SKILL.md +0 -302
- package/templates/skills/services/s3/SKILL.md +0 -308
- package/templates/skills/services/sqlite/SKILL.md +0 -304
- package/templates/skills/services/sqlserver/SKILL.md +0 -304
- package/templates/skills/workflows/ralph/SETUP.md +0 -228
- package/templates/skills/workflows/ralph/SKILL.md +0 -309
- package/templates/skills/workflows/ralph/install.sh +0 -87
- 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
|
-
|