@dewtech/dare-cli 3.3.0 → 3.5.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/LICENSE +21 -0
- package/README.md +764 -764
- package/dist/__tests__/confidence.test.js +13 -13
- package/dist/__tests__/dag-converter.test.js +56 -56
- package/dist/__tests__/dag-runner/buildLocateContext.test.d.ts +2 -0
- package/dist/__tests__/dag-runner/buildLocateContext.test.d.ts.map +1 -0
- package/dist/__tests__/dag-runner/buildLocateContext.test.js +53 -0
- package/dist/__tests__/dag-runner/buildLocateContext.test.js.map +1 -0
- package/dist/__tests__/dual-graph.test.d.ts +2 -0
- package/dist/__tests__/dual-graph.test.d.ts.map +1 -0
- package/dist/__tests__/dual-graph.test.js +141 -0
- package/dist/__tests__/dual-graph.test.js.map +1 -0
- package/dist/__tests__/graphrag/contract/traverse.contract.d.ts +9 -0
- package/dist/__tests__/graphrag/contract/traverse.contract.d.ts.map +1 -0
- package/dist/__tests__/graphrag/contract/traverse.contract.js +58 -0
- package/dist/__tests__/graphrag/contract/traverse.contract.js.map +1 -0
- package/dist/__tests__/graphrag/contract/traverse.contract.test.d.ts +2 -0
- package/dist/__tests__/graphrag/contract/traverse.contract.test.d.ts.map +1 -0
- package/dist/__tests__/graphrag/contract/traverse.contract.test.js +100 -0
- package/dist/__tests__/graphrag/contract/traverse.contract.test.js.map +1 -0
- package/dist/__tests__/graphrag/factory.test.js +10 -1
- package/dist/__tests__/graphrag/factory.test.js.map +1 -1
- package/dist/__tests__/graphrag/fixtures/dual-graph/build-fixture-graph.d.ts +11 -0
- package/dist/__tests__/graphrag/fixtures/dual-graph/build-fixture-graph.d.ts.map +1 -0
- package/dist/__tests__/graphrag/fixtures/dual-graph/build-fixture-graph.js +34 -0
- package/dist/__tests__/graphrag/fixtures/dual-graph/build-fixture-graph.js.map +1 -0
- package/dist/__tests__/graphrag/fixtures/dual-graph/fixtures.test.d.ts +2 -0
- package/dist/__tests__/graphrag/fixtures/dual-graph/fixtures.test.d.ts.map +1 -0
- package/dist/__tests__/graphrag/fixtures/dual-graph/fixtures.test.js +46 -0
- package/dist/__tests__/graphrag/fixtures/dual-graph/fixtures.test.js.map +1 -0
- package/dist/__tests__/graphrag/graph-rag.test.js +31 -0
- package/dist/__tests__/graphrag/graph-rag.test.js.map +1 -1
- package/dist/__tests__/graphrag/json-graph.test.js +57 -0
- package/dist/__tests__/graphrag/json-graph.test.js.map +1 -1
- package/dist/__tests__/graphrag/neo4j-graph.test.d.ts +2 -0
- package/dist/__tests__/graphrag/neo4j-graph.test.d.ts.map +1 -0
- package/dist/__tests__/graphrag/neo4j-graph.test.js +104 -0
- package/dist/__tests__/graphrag/neo4j-graph.test.js.map +1 -0
- package/dist/__tests__/graphrag/neo4j-persistence.test.d.ts +2 -0
- package/dist/__tests__/graphrag/neo4j-persistence.test.d.ts.map +1 -0
- package/dist/__tests__/graphrag/neo4j-persistence.test.js +110 -0
- package/dist/__tests__/graphrag/neo4j-persistence.test.js.map +1 -0
- package/dist/__tests__/mcp-server/server.test.js +3 -16
- package/dist/__tests__/mcp-server/server.test.js.map +1 -1
- package/dist/__tests__/project-generator.test.js +2 -2
- package/dist/__tests__/project-generator.test.js.map +1 -1
- package/dist/__tests__/refine.test.js +49 -49
- package/dist/__tests__/reverse-collection.test.js +6 -6
- package/dist/__tests__/review.test.js +38 -38
- package/dist/__tests__/security-hardening.test.d.ts +2 -0
- package/dist/__tests__/security-hardening.test.d.ts.map +1 -0
- package/dist/__tests__/security-hardening.test.js +101 -0
- package/dist/__tests__/security-hardening.test.js.map +1 -0
- package/dist/__tests__/validate.test.js +65 -65
- package/dist/bin/dare.js +0 -0
- package/dist/commands/__tests__/execute.telemetry.spec.js +9 -0
- package/dist/commands/__tests__/execute.telemetry.spec.js.map +1 -1
- package/dist/commands/__tests__/graph-viz-layers.test.d.ts +2 -0
- package/dist/commands/__tests__/graph-viz-layers.test.d.ts.map +1 -0
- package/dist/commands/__tests__/graph-viz-layers.test.js +36 -0
- package/dist/commands/__tests__/graph-viz-layers.test.js.map +1 -0
- package/dist/commands/__tests__/impact.test.d.ts +2 -0
- package/dist/commands/__tests__/impact.test.d.ts.map +1 -0
- package/dist/commands/__tests__/impact.test.js +26 -0
- package/dist/commands/__tests__/impact.test.js.map +1 -0
- package/dist/commands/__tests__/init-validation.test.d.ts +2 -0
- package/dist/commands/__tests__/init-validation.test.d.ts.map +1 -0
- package/dist/commands/__tests__/init-validation.test.js +81 -0
- package/dist/commands/__tests__/init-validation.test.js.map +1 -0
- package/dist/commands/__tests__/init.integration.spec.js +6 -4
- package/dist/commands/__tests__/init.integration.spec.js.map +1 -1
- package/dist/commands/__tests__/init.spec.d.ts +2 -0
- package/dist/commands/__tests__/init.spec.d.ts.map +1 -0
- package/dist/commands/__tests__/init.spec.js +88 -0
- package/dist/commands/__tests__/init.spec.js.map +1 -0
- package/dist/commands/__tests__/locate.test.d.ts +2 -0
- package/dist/commands/__tests__/locate.test.d.ts.map +1 -0
- package/dist/commands/__tests__/locate.test.js +35 -0
- package/dist/commands/__tests__/locate.test.js.map +1 -0
- package/dist/commands/__tests__/owners.test.d.ts +2 -0
- package/dist/commands/__tests__/owners.test.d.ts.map +1 -0
- package/dist/commands/__tests__/owners.test.js +34 -0
- package/dist/commands/__tests__/owners.test.js.map +1 -0
- package/dist/commands/__tests__/trace.test.d.ts +2 -0
- package/dist/commands/__tests__/trace.test.d.ts.map +1 -0
- package/dist/commands/__tests__/trace.test.js +29 -0
- package/dist/commands/__tests__/trace.test.js.map +1 -0
- package/dist/commands/blueprint.js +122 -122
- package/dist/commands/design.js +20 -20
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +11 -6
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/graph-queries.d.ts +48 -0
- package/dist/commands/graph-queries.d.ts.map +1 -0
- package/dist/commands/graph-queries.js +204 -0
- package/dist/commands/graph-queries.js.map +1 -0
- package/dist/commands/graph.d.ts +13 -0
- package/dist/commands/graph.d.ts.map +1 -1
- package/dist/commands/graph.js +212 -8
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/init-validation.d.ts +22 -0
- package/dist/commands/init-validation.d.ts.map +1 -0
- package/dist/commands/init-validation.js +54 -0
- package/dist/commands/init-validation.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +26 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/dag-runner/__tests__/fixtures/src/math.d.ts +3 -0
- package/dist/dag-runner/__tests__/fixtures/src/math.d.ts.map +1 -0
- package/dist/dag-runner/__tests__/fixtures/src/math.js +7 -0
- package/dist/dag-runner/__tests__/fixtures/src/math.js.map +1 -0
- package/dist/dag-runner/__tests__/graph-ingest-symbols.test.d.ts +2 -0
- package/dist/dag-runner/__tests__/graph-ingest-symbols.test.d.ts.map +1 -0
- package/dist/dag-runner/__tests__/graph-ingest-symbols.test.js +81 -0
- package/dist/dag-runner/__tests__/graph-ingest-symbols.test.js.map +1 -0
- package/dist/dag-runner/graph-ingest.d.ts.map +1 -1
- package/dist/dag-runner/graph-ingest.js +46 -0
- package/dist/dag-runner/graph-ingest.js.map +1 -1
- package/dist/dag-runner/graph-locate.d.ts +11 -0
- package/dist/dag-runner/graph-locate.d.ts.map +1 -0
- package/dist/dag-runner/graph-locate.js +74 -0
- package/dist/dag-runner/graph-locate.js.map +1 -0
- package/dist/dag-runner/run_dag.d.ts +3 -1
- package/dist/dag-runner/run_dag.d.ts.map +1 -1
- package/dist/dag-runner/run_dag.js +2 -1
- package/dist/dag-runner/run_dag.js.map +1 -1
- package/dist/dag-runner/utils/stitch-context.d.ts +3 -1
- package/dist/dag-runner/utils/stitch-context.d.ts.map +1 -1
- package/dist/dag-runner/utils/stitch-context.js +8 -2
- package/dist/dag-runner/utils/stitch-context.js.map +1 -1
- package/dist/graphrag/__tests__/code-index.test.d.ts +2 -0
- package/dist/graphrag/__tests__/code-index.test.d.ts.map +1 -0
- package/dist/graphrag/__tests__/code-index.test.js +75 -0
- package/dist/graphrag/__tests__/code-index.test.js.map +1 -0
- package/dist/graphrag/__tests__/fixtures/code-index/sample.d.ts +5 -0
- package/dist/graphrag/__tests__/fixtures/code-index/sample.d.ts.map +1 -0
- package/dist/graphrag/__tests__/fixtures/code-index/sample.js +10 -0
- package/dist/graphrag/__tests__/fixtures/code-index/sample.js.map +1 -0
- package/dist/graphrag/__tests__/locate.test.d.ts +2 -0
- package/dist/graphrag/__tests__/locate.test.d.ts.map +1 -0
- package/dist/graphrag/__tests__/locate.test.js +43 -0
- package/dist/graphrag/__tests__/locate.test.js.map +1 -0
- package/dist/graphrag/__tests__/requirement-ingest.test.d.ts +2 -0
- package/dist/graphrag/__tests__/requirement-ingest.test.d.ts.map +1 -0
- package/dist/graphrag/__tests__/requirement-ingest.test.js +66 -0
- package/dist/graphrag/__tests__/requirement-ingest.test.js.map +1 -0
- package/dist/graphrag/__tests__/traverse.test.d.ts +2 -0
- package/dist/graphrag/__tests__/traverse.test.d.ts.map +1 -0
- package/dist/graphrag/__tests__/traverse.test.js +71 -0
- package/dist/graphrag/__tests__/traverse.test.js.map +1 -0
- package/dist/graphrag/__tests__/types.test.d.ts +2 -0
- package/dist/graphrag/__tests__/types.test.d.ts.map +1 -0
- package/dist/graphrag/__tests__/types.test.js +52 -0
- package/dist/graphrag/__tests__/types.test.js.map +1 -0
- package/dist/graphrag/code-index.d.ts +15 -0
- package/dist/graphrag/code-index.d.ts.map +1 -0
- package/dist/graphrag/code-index.js +205 -0
- package/dist/graphrag/code-index.js.map +1 -0
- package/dist/graphrag/factory.d.ts.map +1 -1
- package/dist/graphrag/factory.js +5 -0
- package/dist/graphrag/factory.js.map +1 -1
- package/dist/graphrag/graph-rag.d.ts +6 -2
- package/dist/graphrag/graph-rag.d.ts.map +1 -1
- package/dist/graphrag/graph-rag.js +64 -26
- package/dist/graphrag/graph-rag.js.map +1 -1
- package/dist/graphrag/index.d.ts +8 -2
- package/dist/graphrag/index.d.ts.map +1 -1
- package/dist/graphrag/index.js +5 -1
- package/dist/graphrag/index.js.map +1 -1
- package/dist/graphrag/json-graph.d.ts +8 -0
- package/dist/graphrag/json-graph.d.ts.map +1 -1
- package/dist/graphrag/json-graph.js +50 -4
- package/dist/graphrag/json-graph.js.map +1 -1
- package/dist/graphrag/knowledge-graph.d.ts +8 -3
- package/dist/graphrag/knowledge-graph.d.ts.map +1 -1
- package/dist/graphrag/neo4j-graph.d.ts +19 -18
- package/dist/graphrag/neo4j-graph.d.ts.map +1 -1
- package/dist/graphrag/neo4j-graph.js +164 -38
- package/dist/graphrag/neo4j-graph.js.map +1 -1
- package/dist/graphrag/requirement-ingest.d.ts +15 -0
- package/dist/graphrag/requirement-ingest.d.ts.map +1 -0
- package/dist/graphrag/requirement-ingest.js +158 -0
- package/dist/graphrag/requirement-ingest.js.map +1 -0
- package/dist/graphrag/traverse.d.ts +5 -0
- package/dist/graphrag/traverse.d.ts.map +1 -0
- package/dist/graphrag/traverse.js +139 -0
- package/dist/graphrag/traverse.js.map +1 -0
- package/dist/graphrag/types.d.ts +60 -2
- package/dist/graphrag/types.d.ts.map +1 -1
- package/dist/graphrag/types.js +34 -1
- package/dist/graphrag/types.js.map +1 -1
- package/dist/mcp-server/__tests__/auth.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/auth.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/auth.test.js +72 -0
- package/dist/mcp-server/__tests__/auth.test.js.map +1 -0
- package/dist/mcp-server/__tests__/boot-config.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/boot-config.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/boot-config.test.js +29 -0
- package/dist/mcp-server/__tests__/boot-config.test.js.map +1 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.js +66 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.js.map +1 -0
- package/dist/mcp-server/__tests__/mcp-graph.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/mcp-graph.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/mcp-graph.test.js +85 -0
- package/dist/mcp-server/__tests__/mcp-graph.test.js.map +1 -0
- package/dist/mcp-server/__tests__/path-confinement.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/path-confinement.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/path-confinement.test.js +135 -0
- package/dist/mcp-server/__tests__/path-confinement.test.js.map +1 -0
- package/dist/mcp-server/bin/server.js +18 -6
- package/dist/mcp-server/bin/server.js.map +1 -1
- package/dist/mcp-server/boot-config.d.ts +6 -0
- package/dist/mcp-server/boot-config.d.ts.map +1 -0
- package/dist/mcp-server/boot-config.js +17 -0
- package/dist/mcp-server/boot-config.js.map +1 -0
- package/dist/mcp-server/middleware/auth.d.ts +10 -0
- package/dist/mcp-server/middleware/auth.d.ts.map +1 -0
- package/dist/mcp-server/middleware/auth.js +44 -0
- package/dist/mcp-server/middleware/auth.js.map +1 -0
- package/dist/mcp-server/middleware/cors.d.ts +6 -0
- package/dist/mcp-server/middleware/cors.d.ts.map +1 -0
- package/dist/mcp-server/middleware/cors.js +30 -0
- package/dist/mcp-server/middleware/cors.js.map +1 -0
- package/dist/mcp-server/middleware/error-handler.d.ts +11 -0
- package/dist/mcp-server/middleware/error-handler.d.ts.map +1 -0
- package/dist/mcp-server/middleware/error-handler.js +14 -0
- package/dist/mcp-server/middleware/error-handler.js.map +1 -0
- package/dist/mcp-server/server.d.ts +7 -2
- package/dist/mcp-server/server.d.ts.map +1 -1
- package/dist/mcp-server/server.js +290 -105
- package/dist/mcp-server/server.js.map +1 -1
- package/dist/skills/registry-mock.json +109 -109
- package/dist/skills/tests/manifest.spec.js +20 -20
- package/dist/stacks/__tests__/dna-emitter.spec.js +6 -6
- package/dist/stacks/dna-emitter.js +69 -69
- package/dist/stacks/ruby-rails-8/scaffold.js +15 -15
- package/dist/utils/__tests__/static-analyzer-exports.test.d.ts +2 -0
- package/dist/utils/__tests__/static-analyzer-exports.test.d.ts.map +1 -0
- package/dist/utils/__tests__/static-analyzer-exports.test.js +21 -0
- package/dist/utils/__tests__/static-analyzer-exports.test.js.map +1 -0
- package/dist/utils/project-generator.d.ts.map +1 -1
- package/dist/utils/project-generator.js +266 -252
- package/dist/utils/project-generator.js.map +1 -1
- package/dist/utils/stack-bootstrap.js +371 -371
- package/dist/utils/static-analyzer.d.ts +9 -0
- package/dist/utils/static-analyzer.d.ts.map +1 -1
- package/dist/utils/static-analyzer.js +2 -2
- package/dist/utils/static-analyzer.js.map +1 -1
- package/dist/utils/templates.js +394 -394
- package/dist/verification/__tests__/anti-tamper.test.js +13 -13
- package/dist/verification/__tests__/telemetry.test.js +9 -0
- package/dist/verification/__tests__/telemetry.test.js.map +1 -1
- package/package.json +96 -93
- package/templates/DARE-dag-example.yaml +280 -280
- package/templates/UPDATE-MANIFEST.json +68 -68
- package/templates/backend/node-nestjs/.env.example +9 -9
- package/templates/backend/node-nestjs/nest-cli.json +8 -8
- package/templates/backend/node-nestjs/package.json +50 -50
- package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
- package/templates/backend/node-nestjs/src/app.module.ts +15 -15
- package/templates/backend/node-nestjs/src/app.service.ts +8 -8
- package/templates/backend/node-nestjs/src/main.ts +24 -24
- package/templates/backend/node-nestjs/tsconfig.json +21 -21
- package/templates/backend/php-laravel/.env.example +22 -22
- package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
- package/templates/backend/php-laravel/composer.json +40 -40
- package/templates/backend/python-fastapi/.env.example +4 -4
- package/templates/backend/python-fastapi/app/api/router.py +8 -8
- package/templates/backend/python-fastapi/app/core/config.py +20 -20
- package/templates/backend/python-fastapi/main.py +35 -35
- package/templates/backend/python-fastapi/requirements.txt +13 -13
- package/templates/backend/rust-axum/.env.example +3 -3
- package/templates/backend/rust-axum/Cargo.toml +23 -23
- package/templates/backend/rust-axum/src/errors.rs +30 -30
- package/templates/backend/rust-axum/src/main.rs +32 -32
- package/templates/backend/rust-axum/src/routes.rs +6 -6
- package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
- package/templates/frontend/leptos-csr/Cargo.toml +16 -16
- package/templates/frontend/leptos-csr/Trunk.toml +10 -10
- package/templates/frontend/leptos-csr/index.html +11 -11
- package/templates/frontend/leptos-csr/src/lib.rs +20 -20
- package/templates/frontend/leptos-csr/style/main.scss +19 -19
- package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
- package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
- package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
- package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
- package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
- package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
- package/templates/frontend/react/index.html +12 -12
- package/templates/frontend/react/package.json +35 -35
- package/templates/frontend/react/src/App.tsx +25 -25
- package/templates/frontend/react/src/main.tsx +9 -9
- package/templates/frontend/vue/package.json +32 -32
- package/templates/frontend/vue/src/App.vue +7 -7
- package/templates/frontend/vue/src/main.ts +10 -10
- package/templates/frontend/vue/src/router/index.ts +14 -14
- package/templates/frontend/vue/src/views/HomeView.vue +6 -6
- package/templates/hooks/pre-commit-dare-validate +24 -24
- package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -152
- package/templates/ide/antigravity/.agents/skills/dare-bench/SKILL.md +21 -21
- package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +368 -368
- package/templates/ide/antigravity/.agents/skills/dare-bootstrap/SKILL.md +32 -32
- package/templates/ide/antigravity/.agents/skills/dare-bugfix-design/SKILL.md +76 -76
- package/templates/ide/antigravity/.agents/skills/dare-dag/SKILL.md +32 -32
- package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -154
- package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -130
- package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
- package/templates/ide/antigravity/.agents/skills/dare-design/SKILL.md +180 -180
- package/templates/ide/antigravity/.agents/skills/dare-discover/SKILL.md +33 -33
- package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -63
- package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -315
- package/templates/ide/antigravity/.agents/skills/dare-execute/SKILL.md +264 -264
- package/templates/ide/antigravity/.agents/skills/dare-feature-design/SKILL.md +74 -74
- package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -192
- package/templates/ide/antigravity/.agents/skills/dare-graph/SKILL.md +35 -35
- package/templates/ide/antigravity/.agents/skills/dare-info/SKILL.md +31 -31
- package/templates/ide/antigravity/.agents/skills/dare-init/SKILL.md +35 -35
- package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -337
- package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -166
- package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -217
- package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -61
- package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -187
- package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -217
- package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -114
- package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -108
- package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
- package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -263
- package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
- package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -274
- package/templates/ide/antigravity/.agents/skills/dare-skill/SKILL.md +35 -35
- package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -265
- package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -188
- package/templates/ide/antigravity/.agents/skills/dare-update/SKILL.md +33 -33
- package/templates/ide/antigravity/.agents/skills/dare-validate/SKILL.md +33 -33
- package/templates/ide/antigravity/.agents/skills/dare-welcome/SKILL.md +30 -30
- package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -343
- package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -377
- package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -382
- package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -326
- package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -393
- package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
- package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -141
- package/templates/ide/antigravity/templates/TASKS-template.md +26 -26
- package/templates/ide/antigravity/templates/TELEMETRY-template.md +125 -125
- package/templates/ide/claude/.claude/commands/dare-ax.md +131 -131
- package/templates/ide/claude/.claude/commands/dare-bench.md +18 -18
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
- package/templates/ide/claude/.claude/commands/dare-bootstrap.md +27 -27
- package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -119
- package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -151
- package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
- package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -117
- package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
- package/templates/ide/claude/.claude/commands/dare-dag.md +27 -27
- package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
- package/templates/ide/claude/.claude/commands/dare-discover.md +28 -28
- package/templates/ide/claude/.claude/commands/dare-dna.md +75 -75
- package/templates/ide/claude/.claude/commands/dare-docker.md +207 -207
- package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
- package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -147
- package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -149
- package/templates/ide/claude/.claude/commands/dare-graph.md +30 -30
- package/templates/ide/claude/.claude/commands/dare-info.md +26 -26
- package/templates/ide/claude/.claude/commands/dare-init.md +30 -30
- package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -211
- package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -124
- package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -148
- package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -72
- package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -166
- package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -159
- package/templates/ide/claude/.claude/commands/dare-refine.md +145 -145
- package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -139
- package/templates/ide/claude/.claude/commands/dare-review.md +113 -113
- package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
- package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
- package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
- package/templates/ide/claude/.claude/commands/dare-skill.md +30 -30
- package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
- package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -132
- package/templates/ide/claude/.claude/commands/dare-update.md +28 -28
- package/templates/ide/claude/.claude/commands/dare-validate.md +28 -28
- package/templates/ide/claude/.claude/commands/dare-welcome.md +25 -25
- package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -205
- package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -232
- package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -228
- package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -210
- package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -236
- package/templates/ide/claude/.claude/settings.example.json +35 -35
- package/templates/ide/claude/CLAUDE.md +146 -146
- package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/claude/templates/DESIGN-template.md +129 -129
- package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -141
- package/templates/ide/claude/templates/TASKS-template.md +26 -26
- package/templates/ide/claude/templates/TELEMETRY-template.md +125 -125
- package/templates/ide/cursor/.cursor/commands/dare-bench.md +18 -18
- package/templates/ide/cursor/.cursor/commands/dare-blueprint.md +86 -86
- package/templates/ide/cursor/.cursor/commands/dare-bootstrap.md +27 -27
- package/templates/ide/cursor/.cursor/commands/dare-bugfix-design.md +64 -64
- package/templates/ide/cursor/.cursor/commands/dare-dag-run.md +110 -110
- package/templates/ide/cursor/.cursor/commands/dare-dag-viz.md +139 -139
- package/templates/ide/cursor/.cursor/commands/dare-dag.md +27 -27
- package/templates/ide/cursor/.cursor/commands/dare-design.md +35 -35
- package/templates/ide/cursor/.cursor/commands/dare-discover.md +28 -28
- package/templates/ide/cursor/.cursor/commands/dare-dna.md +75 -75
- package/templates/ide/cursor/.cursor/commands/dare-docker-compose.md +18 -18
- package/templates/ide/cursor/.cursor/commands/dare-dockerfile.md +17 -17
- package/templates/ide/cursor/.cursor/commands/dare-execute.md +19 -19
- package/templates/ide/cursor/.cursor/commands/dare-feature-design.md +64 -64
- package/templates/ide/cursor/.cursor/commands/dare-graph.md +30 -30
- package/templates/ide/cursor/.cursor/commands/dare-info.md +26 -26
- package/templates/ide/cursor/.cursor/commands/dare-init.md +30 -30
- package/templates/ide/cursor/.cursor/commands/dare-migrate.md +72 -72
- package/templates/ide/cursor/.cursor/commands/dare-refine.md +107 -107
- package/templates/ide/cursor/.cursor/commands/dare-reverse.md +139 -139
- package/templates/ide/cursor/.cursor/commands/dare-review.md +91 -91
- package/templates/ide/cursor/.cursor/commands/dare-skill.md +30 -30
- package/templates/ide/cursor/.cursor/commands/dare-tasks.md +184 -184
- package/templates/ide/cursor/.cursor/commands/dare-telemetry.md +42 -42
- package/templates/ide/cursor/.cursor/commands/dare-update.md +28 -28
- package/templates/ide/cursor/.cursor/commands/dare-validate.md +28 -28
- package/templates/ide/cursor/.cursor/commands/dare-welcome.md +25 -25
- package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -263
- package/templates/ide/cursor/.cursor/rules/skill-bugfix-design.mdc +51 -51
- package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -173
- package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -134
- package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
- package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -63
- package/templates/ide/cursor/.cursor/rules/skill-docker.mdc +33 -33
- package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -352
- package/templates/ide/cursor/.cursor/rules/skill-feature-design.mdc +43 -43
- package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -244
- package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -371
- package/templates/ide/cursor/.cursor/rules/skill-laravel-api.mdc +44 -44
- package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -266
- package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -295
- package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -367
- package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -58
- package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -346
- package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -248
- package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -400
- package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -262
- package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -107
- package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -281
- package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
- package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
- package/templates/ide/cursor/.cursor/rules/skill-telemetry.mdc +156 -156
- package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
- package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -141
- package/templates/ide/cursor/templates/TASKS-template.md +26 -26
- package/templates/ide/cursor/templates/TELEMETRY-template.md +125 -125
- package/templates/shared/docker-compose.yml +41 -41
- package/templates/stacks/go-gin/.dare/skills.yml +11 -11
- package/templates/stacks/go-gin/.env.example +24 -24
- package/templates/stacks/go-gin/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/go-gin/README.md.tpl +38 -38
- package/templates/stacks/go-gin/cmd/server/main.go.tpl +78 -78
- package/templates/stacks/go-gin/db/migrations/0001_create_users.down.sql +2 -2
- package/templates/stacks/go-gin/db/migrations/0001_create_users.up.sql +12 -12
- package/templates/stacks/go-gin/db/queries/users.sql +23 -23
- package/templates/stacks/go-gin/gitignore +7 -7
- package/templates/stacks/go-gin/go.mod.tpl +17 -17
- package/templates/stacks/go-gin/internal/config/config.go +41 -41
- package/templates/stacks/go-gin/internal/db/postgres.go.tpl +25 -25
- package/templates/stacks/go-gin/internal/handler/auth_handler.go.tpl +72 -72
- package/templates/stacks/go-gin/internal/handler/users_handler.go.tpl +72 -72
- package/templates/stacks/go-gin/internal/handler/ws_handler.go +37 -37
- package/templates/stacks/go-gin/internal/llm/dummy.go +14 -14
- package/templates/stacks/go-gin/internal/llm/provider.go +8 -8
- package/templates/stacks/go-gin/internal/middleware/jwt.go.tpl +58 -58
- package/templates/stacks/go-gin/internal/middleware/rate_limit.go +55 -55
- package/templates/stacks/go-gin/internal/model/user.go +17 -17
- package/templates/stacks/go-gin/internal/repository/users_repository.go.tpl +79 -79
- package/templates/stacks/go-gin/internal/service/auth_service.go.tpl +55 -55
- package/templates/stacks/go-gin/internal/service/users_service.go.tpl +53 -53
- package/templates/stacks/go-gin/llms.txt.tpl +54 -54
- package/templates/stacks/go-gin/openapi.json.tpl +46 -46
- package/templates/stacks/go-gin/sqlc.yaml +14 -14
- package/templates/stacks/go-gin/tests/smoke_test.go.tpl +22 -22
- package/templates/stacks/go-stdlib/.dare/skills.yml +11 -11
- package/templates/stacks/go-stdlib/.env.example +24 -24
- package/templates/stacks/go-stdlib/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/go-stdlib/README.md.tpl +41 -41
- package/templates/stacks/go-stdlib/cmd/server/main.go.tpl +82 -82
- package/templates/stacks/go-stdlib/db/migrations/0001_create_users.down.sql +2 -2
- package/templates/stacks/go-stdlib/db/migrations/0001_create_users.up.sql +12 -12
- package/templates/stacks/go-stdlib/db/queries/users.sql +23 -23
- package/templates/stacks/go-stdlib/gitignore +6 -6
- package/templates/stacks/go-stdlib/go.mod.tpl +15 -15
- package/templates/stacks/go-stdlib/internal/config/config.go +41 -41
- package/templates/stacks/go-stdlib/internal/db/postgres.go.tpl +24 -24
- package/templates/stacks/go-stdlib/internal/handler/auth_handler.go.tpl +71 -71
- package/templates/stacks/go-stdlib/internal/handler/users_handler.go.tpl +84 -84
- package/templates/stacks/go-stdlib/internal/handler/ws_handler.go +36 -36
- package/templates/stacks/go-stdlib/internal/httpx/json.go +32 -32
- package/templates/stacks/go-stdlib/internal/llm/dummy.go +14 -14
- package/templates/stacks/go-stdlib/internal/llm/provider.go +8 -8
- package/templates/stacks/go-stdlib/internal/middleware/chain.go +21 -21
- package/templates/stacks/go-stdlib/internal/middleware/cors.go +27 -27
- package/templates/stacks/go-stdlib/internal/middleware/jwt.go.tpl +51 -51
- package/templates/stacks/go-stdlib/internal/middleware/rate_limit.go +81 -81
- package/templates/stacks/go-stdlib/internal/model/user.go +17 -17
- package/templates/stacks/go-stdlib/internal/repository/users_repository.go.tpl +75 -75
- package/templates/stacks/go-stdlib/internal/service/auth_service.go.tpl +55 -55
- package/templates/stacks/go-stdlib/internal/service/users_service.go.tpl +53 -53
- package/templates/stacks/go-stdlib/llms.txt.tpl +60 -60
- package/templates/stacks/go-stdlib/openapi.json.tpl +46 -46
- package/templates/stacks/go-stdlib/sqlc.yaml +14 -14
- package/templates/stacks/go-stdlib/tests/smoke_test.go.tpl +45 -45
- package/templates/stacks/mcp-go/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-go/.env.example +14 -14
- package/templates/stacks/mcp-go/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/mcp-go/README.md.tpl +50 -50
- package/templates/stacks/mcp-go/cmd/server/main.go.tpl +62 -62
- package/templates/stacks/mcp-go/gitignore +6 -6
- package/templates/stacks/mcp-go/go.mod.tpl +9 -9
- package/templates/stacks/mcp-go/internal/prompts/summarize.go +9 -9
- package/templates/stacks/mcp-go/internal/server/server.go.tpl +80 -80
- package/templates/stacks/mcp-go/internal/tools/echo.go +15 -15
- package/templates/stacks/mcp-go/internal/transports/http.go.tpl +21 -21
- package/templates/stacks/mcp-go/internal/transports/sse.go.tpl +17 -17
- package/templates/stacks/mcp-go/internal/transports/stdio.go.tpl +14 -14
- package/templates/stacks/mcp-go/llms.txt.tpl +60 -60
- package/templates/stacks/mcp-go/openapi.json.tpl +31 -31
- package/templates/stacks/mcp-go/tests/echo_test.go.tpl +37 -37
- package/templates/stacks/mcp-node-ts/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-node-ts/.env.example +16 -16
- package/templates/stacks/mcp-node-ts/.github/workflows/dare-ci.yml +54 -54
- package/templates/stacks/mcp-node-ts/README.md.hbs +49 -49
- package/templates/stacks/mcp-node-ts/gitignore +7 -7
- package/templates/stacks/mcp-node-ts/llms.txt.hbs +61 -61
- package/templates/stacks/mcp-node-ts/openapi.json.hbs +39 -39
- package/templates/stacks/mcp-node-ts/package.json.hbs +35 -35
- package/templates/stacks/mcp-node-ts/src/cli.ts.hbs +71 -71
- package/templates/stacks/mcp-node-ts/src/prompts/index.ts +36 -36
- package/templates/stacks/mcp-node-ts/src/server.ts.hbs +45 -45
- package/templates/stacks/mcp-node-ts/src/tools/echo.ts +23 -23
- package/templates/stacks/mcp-node-ts/src/tools/index.ts +18 -18
- package/templates/stacks/mcp-node-ts/src/transports/http.ts +68 -68
- package/templates/stacks/mcp-node-ts/src/transports/sse.ts +58 -58
- package/templates/stacks/mcp-node-ts/src/transports/stdio.ts +5 -5
- package/templates/stacks/mcp-node-ts/tests/echo.test.ts +50 -50
- package/templates/stacks/mcp-node-ts/tsconfig.json +17 -17
- package/templates/stacks/mcp-python/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-python/.env.example +14 -14
- package/templates/stacks/mcp-python/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/mcp-python/README.md.j2 +49 -49
- package/templates/stacks/mcp-python/gitignore +12 -12
- package/templates/stacks/mcp-python/llms.txt.j2 +56 -56
- package/templates/stacks/mcp-python/openapi.json.j2 +33 -33
- package/templates/stacks/mcp-python/pyproject.toml.j2 +37 -37
- package/templates/stacks/mcp-python/src/cli.py.j2 +68 -68
- package/templates/stacks/mcp-python/src/prompts/summarize.py +10 -10
- package/templates/stacks/mcp-python/src/server.py.j2 +28 -28
- package/templates/stacks/mcp-python/src/tools/echo.py +12 -12
- package/templates/stacks/mcp-python/src/transports/http.py +12 -12
- package/templates/stacks/mcp-python/src/transports/sse.py +13 -13
- package/templates/stacks/mcp-python/src/transports/stdio.py +6 -6
- package/templates/stacks/mcp-python/tests/test_echo.py +28 -28
- package/templates/stacks/mcp-rust/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-rust/.env.example +14 -14
- package/templates/stacks/mcp-rust/.github/workflows/dare-ci.yml +38 -38
- package/templates/stacks/mcp-rust/Cargo.toml.tera +35 -35
- package/templates/stacks/mcp-rust/README.md.tera +50 -50
- package/templates/stacks/mcp-rust/gitignore +5 -5
- package/templates/stacks/mcp-rust/llms.txt.tera +60 -60
- package/templates/stacks/mcp-rust/openapi.json.tera +31 -31
- package/templates/stacks/mcp-rust/src/cli.rs.tera +33 -33
- package/templates/stacks/mcp-rust/src/lib.rs +6 -6
- package/templates/stacks/mcp-rust/src/main.rs.tera +30 -30
- package/templates/stacks/mcp-rust/src/prompts/mod.rs +1 -1
- package/templates/stacks/mcp-rust/src/prompts/summarize.rs +5 -5
- package/templates/stacks/mcp-rust/src/server.rs.tera +38 -38
- package/templates/stacks/mcp-rust/src/tools/echo.rs +18 -18
- package/templates/stacks/mcp-rust/src/tools/mod.rs +22 -22
- package/templates/stacks/mcp-rust/src/transports/http.rs +27 -27
- package/templates/stacks/mcp-rust/src/transports/mod.rs +3 -3
- package/templates/stacks/mcp-rust/src/transports/sse.rs +33 -33
- package/templates/stacks/mcp-rust/src/transports/stdio.rs +14 -14
- package/templates/stacks/mcp-rust/tests/echo_test.rs.tera +27 -27
- package/templates/stacks/node-nestjs/.dare/skills.yml +11 -11
- package/templates/stacks/node-nestjs/.env.example +21 -21
- package/templates/stacks/node-nestjs/.github/workflows/dare-ci.yml +54 -54
- package/templates/stacks/node-nestjs/README.md.hbs +35 -35
- package/templates/stacks/node-nestjs/gitignore +7 -7
- package/templates/stacks/node-nestjs/llms.txt.hbs +47 -47
- package/templates/stacks/node-nestjs/nest-cli.json +16 -16
- package/templates/stacks/node-nestjs/openapi.json.hbs +75 -75
- package/templates/stacks/node-nestjs/package.json.hbs +57 -57
- package/templates/stacks/node-nestjs/prisma/schema.prisma +25 -25
- package/templates/stacks/node-nestjs/prisma/seed.ts.hbs +25 -25
- package/templates/stacks/node-nestjs/src/app.module.ts +39 -39
- package/templates/stacks/node-nestjs/src/auth/auth.controller.ts +29 -29
- package/templates/stacks/node-nestjs/src/auth/auth.module.ts +25 -25
- package/templates/stacks/node-nestjs/src/auth/auth.service.ts +36 -36
- package/templates/stacks/node-nestjs/src/auth/dto/login-response.dto.ts +9 -9
- package/templates/stacks/node-nestjs/src/auth/dto/login.dto.ts +17 -17
- package/templates/stacks/node-nestjs/src/auth/jwt.strategy.ts +25 -25
- package/templates/stacks/node-nestjs/src/common/filters/problem-details.filter.ts +38 -38
- package/templates/stacks/node-nestjs/src/common/interceptors/json-response.interceptor.ts +13 -13
- package/templates/stacks/node-nestjs/src/main.ts.hbs +44 -44
- package/templates/stacks/node-nestjs/src/prisma/prisma.module.ts +9 -9
- package/templates/stacks/node-nestjs/src/prisma/prisma.service.ts +9 -9
- package/templates/stacks/node-nestjs/src/users/dto/create-user.dto.ts +22 -22
- package/templates/stacks/node-nestjs/src/users/dto/user.dto.ts +15 -15
- package/templates/stacks/node-nestjs/src/users/users.controller.ts +41 -41
- package/templates/stacks/node-nestjs/src/users/users.module.ts +11 -11
- package/templates/stacks/node-nestjs/src/users/users.repository.ts +38 -38
- package/templates/stacks/node-nestjs/src/users/users.service.ts +38 -38
- package/templates/stacks/node-nestjs/tsconfig.build.json +4 -4
- package/templates/stacks/node-nestjs/tsconfig.json +28 -28
- package/templates/stacks/php-laravel/.dare/skills.yml +11 -11
- package/templates/stacks/php-laravel/.env.example +41 -41
- package/templates/stacks/php-laravel/.github/workflows/dare-ci.yml +43 -43
- package/templates/stacks/php-laravel/README.md.hbs +36 -36
- package/templates/stacks/php-laravel/app/Http/Controllers/Api/AuthController.php +36 -36
- package/templates/stacks/php-laravel/app/Http/Controllers/Api/UsersController.php +33 -33
- package/templates/stacks/php-laravel/app/Http/Requests/CreateUserRequest.php +26 -26
- package/templates/stacks/php-laravel/app/Http/Requests/LoginRequest.php +34 -34
- package/templates/stacks/php-laravel/app/Llm/Contracts/LlmProvider.php +12 -12
- package/templates/stacks/php-laravel/app/Llm/Providers/DummyProvider.php +13 -13
- package/templates/stacks/php-laravel/app/Llm/Providers/OpenAiProvider.php +33 -33
- package/templates/stacks/php-laravel/app/Models/User.php +44 -44
- package/templates/stacks/php-laravel/app/Repositories/UsersRepository.php +32 -32
- package/templates/stacks/php-laravel/app/Services/AuthService.php +37 -37
- package/templates/stacks/php-laravel/app/Services/UsersService.php +57 -57
- package/templates/stacks/php-laravel/artisan +12 -12
- package/templates/stacks/php-laravel/bootstrap/app.php +29 -29
- package/templates/stacks/php-laravel/bootstrap/providers.php +5 -5
- package/templates/stacks/php-laravel/composer.json.hbs +58 -58
- package/templates/stacks/php-laravel/config/l5-swagger.php +41 -41
- package/templates/stacks/php-laravel/config/reverb.php +34 -34
- package/templates/stacks/php-laravel/config/sanctum.php +15 -15
- package/templates/stacks/php-laravel/database/migrations/2026_06_01_000001_create_users_table.php +27 -27
- package/templates/stacks/php-laravel/database/seeders/DatabaseSeeder.php +21 -21
- package/templates/stacks/php-laravel/gitignore +23 -23
- package/templates/stacks/php-laravel/llms.txt.hbs +53 -53
- package/templates/stacks/php-laravel/openapi.json.hbs +43 -43
- package/templates/stacks/php-laravel/phpstan.neon +9 -9
- package/templates/stacks/php-laravel/routes/api.php +13 -13
- package/templates/stacks/php-laravel/routes/channels.php +7 -7
- package/templates/stacks/php-laravel/tests/Feature/AuthTest.php +35 -35
- package/templates/stacks/php-laravel/tests/Feature/UsersTest.php +30 -30
- package/templates/stacks/php-laravel/tests/Pest.php +5 -5
- package/templates/stacks/python-fastapi/.dare/skills.yml +11 -11
- package/templates/stacks/python-fastapi/.env.example +21 -21
- package/templates/stacks/python-fastapi/.github/workflows/dare-ci.yml +43 -43
- package/templates/stacks/python-fastapi/README.md.j2 +35 -35
- package/templates/stacks/python-fastapi/alembic/env.py +46 -46
- package/templates/stacks/python-fastapi/alembic/script.py.mako +26 -26
- package/templates/stacks/python-fastapi/alembic/versions/0001_create_users.py.j2 +37 -37
- package/templates/stacks/python-fastapi/alembic.ini.j2 +39 -39
- package/templates/stacks/python-fastapi/app/core/config.py +24 -24
- package/templates/stacks/python-fastapi/app/core/security.py +34 -34
- package/templates/stacks/python-fastapi/app/db/session.py +22 -22
- package/templates/stacks/python-fastapi/app/main.py.j2 +36 -36
- package/templates/stacks/python-fastapi/app/models/__init__.py +3 -3
- package/templates/stacks/python-fastapi/app/models/user.py +30 -30
- package/templates/stacks/python-fastapi/app/repositories/user_repository.py +34 -34
- package/templates/stacks/python-fastapi/app/routers/auth.py +37 -37
- package/templates/stacks/python-fastapi/app/routers/users.py +46 -46
- package/templates/stacks/python-fastapi/app/schemas/user.py +56 -56
- package/templates/stacks/python-fastapi/app/services/auth_service.py +22 -22
- package/templates/stacks/python-fastapi/app/services/user_service.py +31 -31
- package/templates/stacks/python-fastapi/gitignore +12 -12
- package/templates/stacks/python-fastapi/llms.txt.j2 +53 -53
- package/templates/stacks/python-fastapi/openapi.json.j2 +43 -43
- package/templates/stacks/python-fastapi/pyproject.toml.j2 +45 -45
- package/templates/stacks/python-fastapi/tests/test_auth.py +22 -22
- package/templates/stacks/ruby-rails-8/.dare/skills.yml +50 -50
- package/templates/stacks/ruby-rails-8/.env.example +20 -20
- package/templates/stacks/ruby-rails-8/.github/workflows/dare-ci.yml +112 -112
- package/templates/stacks/ruby-rails-8/Gemfile.erb +61 -61
- package/templates/stacks/ruby-rails-8/app/channels/application_cable/channel.rb +11 -11
- package/templates/stacks/ruby-rails-8/app/channels/application_cable/connection.rb +34 -34
- package/templates/stacks/ruby-rails-8/app/channels/dare_updates_channel.rb +18 -18
- package/templates/stacks/ruby-rails-8/app/channels/user_updates_channel.rb +23 -23
- package/templates/stacks/ruby-rails-8/app/controllers/application_controller.rb +44 -44
- package/templates/stacks/ruby-rails-8/app/controllers/concerns/problem_details.rb +93 -93
- package/templates/stacks/ruby-rails-8/app/handlers/summarize_handler.rb +33 -33
- package/templates/stacks/ruby-rails-8/app/handlers/users_handler.rb +68 -68
- package/templates/stacks/ruby-rails-8/app/llm/cache/llm_cache.rb +44 -44
- package/templates/stacks/ruby-rails-8/app/llm/prompts/prompt_loader.rb +54 -54
- package/templates/stacks/ruby-rails-8/app/llm/prompts/summarize_v1.jinja2 +12 -12
- package/templates/stacks/ruby-rails-8/app/llm/providers/dummy_provider.rb +35 -35
- package/templates/stacks/ruby-rails-8/app/llm/providers/llm_provider.rb +67 -67
- package/templates/stacks/ruby-rails-8/app/llm/providers/openai_provider.rb +62 -62
- package/templates/stacks/ruby-rails-8/app/llm/rate_limit/token_bucket.rb +82 -82
- package/templates/stacks/ruby-rails-8/app/llm/validators/summarize_output_schema.json +21 -21
- package/templates/stacks/ruby-rails-8/app/llm/validators/validator.rb +52 -52
- package/templates/stacks/ruby-rails-8/app/models/user.rb +36 -36
- package/templates/stacks/ruby-rails-8/app/presenters/user_presenter.rb +48 -48
- package/templates/stacks/ruby-rails-8/app/repositories/document_repository.rb +57 -57
- package/templates/stacks/ruby-rails-8/app/repositories/user_repository.rb +73 -73
- package/templates/stacks/ruby-rails-8/app/services/create_user_service.rb +67 -67
- package/templates/stacks/ruby-rails-8/app/services/realtime_service.rb +53 -53
- package/templates/stacks/ruby-rails-8/app/services/summarize_document_service.rb +57 -57
- package/templates/stacks/ruby-rails-8/config/dare.yml +42 -42
- package/templates/stacks/ruby-rails-8/config/initializers/dare.rb +31 -31
- package/templates/stacks/ruby-rails-8/config/initializers/rack_attack.rb +64 -64
- package/templates/stacks/ruby-rails-8/config/initializers/rswag_api.rb +12 -12
- package/templates/stacks/ruby-rails-8/lib/tasks/dare.rake +159 -159
- package/templates/stacks/ruby-rails-8/llms.txt.erb +69 -69
- package/templates/stacks/ruby-rails-8/spec/api/summarize_spec.rb +56 -56
- package/templates/stacks/ruby-rails-8/spec/api/users_spec.rb +72 -72
- package/templates/stacks/ruby-rails-8/spec/channels/dare_updates_channel_spec.rb +61 -61
- package/templates/stacks/ruby-rails-8/spec/channels/user_updates_channel_spec.rb +56 -56
- package/templates/stacks/ruby-rails-8/spec/factories/users.rb +27 -27
- package/templates/stacks/ruby-rails-8/spec/handlers/users_handler_spec.rb +88 -88
- package/templates/stacks/ruby-rails-8/spec/rails_helper.rb +31 -31
- package/templates/stacks/ruby-rails-8/spec/services/create_user_service_spec.rb +88 -88
- package/templates/stacks/ruby-rails-8/spec/services/summarize_document_service_spec.rb +142 -142
- package/templates/stacks/ruby-rails-8/spec/swagger_helper.rb +73 -73
- package/templates/stacks/rust-axum/.dare/skills.yml +11 -11
- package/templates/stacks/rust-axum/.env.example +26 -26
- package/templates/stacks/rust-axum/.github/workflows/dare-ci.yml +40 -40
- package/templates/stacks/rust-axum/Cargo.toml.tera +53 -53
- package/templates/stacks/rust-axum/README.md.tera +37 -37
- package/templates/stacks/rust-axum/gitignore +5 -5
- package/templates/stacks/rust-axum/llms.txt.tera +54 -54
- package/templates/stacks/rust-axum/migrations/0001_create_users.sql +13 -13
- package/templates/stacks/rust-axum/openapi.json.tera +46 -46
- package/templates/stacks/rust-axum/src/config.rs +45 -45
- package/templates/stacks/rust-axum/src/errors.rs +48 -48
- package/templates/stacks/rust-axum/src/handlers/auth.rs +48 -48
- package/templates/stacks/rust-axum/src/handlers/mod.rs +3 -3
- package/templates/stacks/rust-axum/src/handlers/users.rs +81 -81
- package/templates/stacks/rust-axum/src/handlers/ws.rs +24 -24
- package/templates/stacks/rust-axum/src/lib.rs +19 -19
- package/templates/stacks/rust-axum/src/llm/mod.rs +1 -1
- package/templates/stacks/rust-axum/src/llm/provider.rs +48 -48
- package/templates/stacks/rust-axum/src/main.rs.tera +64 -64
- package/templates/stacks/rust-axum/src/middleware/auth.rs +20 -20
- package/templates/stacks/rust-axum/src/middleware/mod.rs +2 -2
- package/templates/stacks/rust-axum/src/middleware/rate_limit.rs +27 -27
- package/templates/stacks/rust-axum/src/models/mod.rs +1 -1
- package/templates/stacks/rust-axum/src/models/user.rs +13 -13
- package/templates/stacks/rust-axum/src/repositories/mod.rs +1 -1
- package/templates/stacks/rust-axum/src/repositories/user_repository.rs +62 -62
- package/templates/stacks/rust-axum/src/services/auth_service.rs +50 -50
- package/templates/stacks/rust-axum/src/services/mod.rs +2 -2
- package/templates/stacks/rust-axum/src/services/user_service.rs +53 -53
- package/templates/stacks/rust-axum/tests/integration_test.rs.tera +13 -13
- package/dist/commands/new.d.ts +0 -16
- package/dist/commands/new.d.ts.map +0 -1
- package/dist/commands/new.js +0 -104
- package/dist/commands/new.js.map +0 -1
|
@@ -1,315 +1,315 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: dare-docker
|
|
3
|
-
description: Containerização DARE com Dockerfile e docker-compose seguros, performantes e idiomáticos. Multi-stage builds, usuário não-root, healthchecks, redes isoladas, .dockerignore robusto. Cobre PHP/Laravel, Python/FastAPI, Node, Go, Rust, Rails e Vue.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# DARE Docker Skill
|
|
7
|
-
|
|
8
|
-
Você é um engenheiro DevOps especialista em containerização. Seu papel é gerar `Dockerfile`, `docker-compose.yml` e `.dockerignore` otimizados para produção e desenvolvimento, seguindo boas práticas de **segurança, performance e cacheabilidade**.
|
|
9
|
-
|
|
10
|
-
## Quando usar esta skill
|
|
11
|
-
|
|
12
|
-
- Projeto novo DARE precisa de imagem Docker
|
|
13
|
-
- Projeto existente tem Dockerfile antigo, com bash longo, root user, sem cache
|
|
14
|
-
- Build local lento (> 60s) — otimização de cache
|
|
15
|
-
- Imagem final pesada (> 500MB) — multi-stage e Alpine/distroless
|
|
16
|
-
|
|
17
|
-
## Padrões para Dockerfile
|
|
18
|
-
|
|
19
|
-
### Multi-stage builds (obrigatório)
|
|
20
|
-
|
|
21
|
-
Separe build (compiladores, deps de dev) de runtime (binário/artefato + libs mínimas).
|
|
22
|
-
|
|
23
|
-
```dockerfile
|
|
24
|
-
# Stage 1 — build
|
|
25
|
-
FROM rust:1.80-alpine AS builder
|
|
26
|
-
WORKDIR /app
|
|
27
|
-
COPY Cargo.toml Cargo.lock ./
|
|
28
|
-
RUN cargo fetch
|
|
29
|
-
COPY src ./src
|
|
30
|
-
RUN cargo build --release
|
|
31
|
-
|
|
32
|
-
# Stage 2 — runtime
|
|
33
|
-
FROM alpine:3.20
|
|
34
|
-
RUN adduser -D -u 1000 appuser
|
|
35
|
-
COPY --from=builder /app/target/release/myapp /usr/local/bin/myapp
|
|
36
|
-
USER appuser
|
|
37
|
-
EXPOSE 8080
|
|
38
|
-
CMD ["myapp"]
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Imagens base
|
|
42
|
-
|
|
43
|
-
- Use Alpine ou distroless quando possível
|
|
44
|
-
- Tags **explícitas** (`php:8.3-fpm-alpine`, nunca `latest`)
|
|
45
|
-
- Pin de versão evita surpresas de patch
|
|
46
|
-
|
|
47
|
-
### Usuário não-root
|
|
48
|
-
|
|
49
|
-
```dockerfile
|
|
50
|
-
RUN adduser -D -u 1000 appuser
|
|
51
|
-
USER appuser
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
Aplicação rodando como root no container = vulnerabilidade.
|
|
55
|
-
|
|
56
|
-
### Cache de camadas
|
|
57
|
-
|
|
58
|
-
Ordene do menos mutável para o mais mutável:
|
|
59
|
-
1. `FROM`
|
|
60
|
-
2. `RUN apt-get install …` (raro mudar)
|
|
61
|
-
3. `COPY package.json` / `Cargo.toml` / `composer.json`
|
|
62
|
-
4. `RUN npm install` / `cargo fetch` / `composer install`
|
|
63
|
-
5. `COPY src/` ← muda muito, fica no final
|
|
64
|
-
6. `RUN build`
|
|
65
|
-
|
|
66
|
-
### Limpeza na mesma camada `RUN`
|
|
67
|
-
|
|
68
|
-
```dockerfile
|
|
69
|
-
RUN apt-get update && \
|
|
70
|
-
apt-get install -y --no-install-recommends curl ca-certificates && \
|
|
71
|
-
apt-get clean && \
|
|
72
|
-
rm -rf /var/lib/apt/lists/*
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### `ENTRYPOINT` vs `CMD`
|
|
76
|
-
|
|
77
|
-
- `ENTRYPOINT` — comando fixo do container
|
|
78
|
-
- `CMD` — argumentos default, podem ser sobrescritos
|
|
79
|
-
|
|
80
|
-
## Padrões por stack
|
|
81
|
-
|
|
82
|
-
### PHP / Laravel
|
|
83
|
-
|
|
84
|
-
```dockerfile
|
|
85
|
-
FROM php:8.3-fpm-alpine AS base
|
|
86
|
-
WORKDIR /var/www/html
|
|
87
|
-
|
|
88
|
-
RUN apk add --no-cache --virtual .build-deps \
|
|
89
|
-
$PHPIZE_DEPS postgresql-dev && \
|
|
90
|
-
docker-php-ext-install pdo_pgsql opcache bcmath && \
|
|
91
|
-
apk del .build-deps
|
|
92
|
-
|
|
93
|
-
COPY composer.json composer.lock ./
|
|
94
|
-
RUN composer install --no-dev --no-interaction --no-progress --optimize-autoloader
|
|
95
|
-
|
|
96
|
-
COPY . .
|
|
97
|
-
RUN chown -R www-data:www-data storage bootstrap/cache
|
|
98
|
-
|
|
99
|
-
USER www-data
|
|
100
|
-
EXPOSE 9000
|
|
101
|
-
CMD ["php-fpm"]
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### Python / FastAPI
|
|
105
|
-
|
|
106
|
-
```dockerfile
|
|
107
|
-
FROM python:3.11-slim AS builder
|
|
108
|
-
WORKDIR /app
|
|
109
|
-
COPY requirements.txt .
|
|
110
|
-
RUN pip install --no-cache-dir --user -r requirements.txt
|
|
111
|
-
|
|
112
|
-
FROM python:3.11-slim
|
|
113
|
-
RUN useradd -m -u 1000 appuser
|
|
114
|
-
COPY --from=builder /root/.local /home/appuser/.local
|
|
115
|
-
ENV PATH=/home/appuser/.local/bin:$PATH
|
|
116
|
-
WORKDIR /app
|
|
117
|
-
COPY --chown=appuser:appuser . .
|
|
118
|
-
USER appuser
|
|
119
|
-
EXPOSE 8000
|
|
120
|
-
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### Go
|
|
124
|
-
|
|
125
|
-
```dockerfile
|
|
126
|
-
FROM golang:1.22-alpine AS builder
|
|
127
|
-
WORKDIR /app
|
|
128
|
-
COPY go.mod go.sum ./
|
|
129
|
-
RUN go mod download
|
|
130
|
-
COPY . .
|
|
131
|
-
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /app/bin/server ./cmd/server
|
|
132
|
-
|
|
133
|
-
FROM scratch
|
|
134
|
-
COPY --from=builder /app/bin/server /server
|
|
135
|
-
EXPOSE 8080
|
|
136
|
-
USER 1000:1000
|
|
137
|
-
ENTRYPOINT ["/server"]
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### Node / Vue (build estático)
|
|
141
|
-
|
|
142
|
-
```dockerfile
|
|
143
|
-
FROM node:20-alpine AS builder
|
|
144
|
-
WORKDIR /app
|
|
145
|
-
COPY package*.json ./
|
|
146
|
-
RUN npm ci
|
|
147
|
-
COPY . .
|
|
148
|
-
RUN npm run build
|
|
149
|
-
|
|
150
|
-
FROM nginx:alpine
|
|
151
|
-
COPY --from=builder /app/dist /usr/share/nginx/html
|
|
152
|
-
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
153
|
-
EXPOSE 80
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
### Rails
|
|
157
|
-
|
|
158
|
-
```dockerfile
|
|
159
|
-
FROM ruby:3.3-alpine AS builder
|
|
160
|
-
RUN apk add --no-cache build-base postgresql-dev nodejs yarn
|
|
161
|
-
WORKDIR /app
|
|
162
|
-
COPY Gemfile Gemfile.lock ./
|
|
163
|
-
RUN bundle install --without development test
|
|
164
|
-
COPY . .
|
|
165
|
-
RUN SECRET_KEY_BASE=dummy bundle exec rails assets:precompile
|
|
166
|
-
|
|
167
|
-
FROM ruby:3.3-alpine
|
|
168
|
-
RUN apk add --no-cache postgresql-client tzdata
|
|
169
|
-
WORKDIR /app
|
|
170
|
-
COPY --from=builder /usr/local/bundle /usr/local/bundle
|
|
171
|
-
COPY --from=builder /app /app
|
|
172
|
-
RUN adduser -D -u 1000 appuser && chown -R appuser:appuser /app
|
|
173
|
-
USER appuser
|
|
174
|
-
EXPOSE 3000
|
|
175
|
-
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## Padrões para docker-compose
|
|
179
|
-
|
|
180
|
-
### Especificação atual
|
|
181
|
-
|
|
182
|
-
NÃO use `version: '3'` — está deprecated. Estrutura moderna:
|
|
183
|
-
|
|
184
|
-
```yaml
|
|
185
|
-
services:
|
|
186
|
-
api:
|
|
187
|
-
build: .
|
|
188
|
-
ports: ["8080:8080"]
|
|
189
|
-
env_file: .env
|
|
190
|
-
depends_on:
|
|
191
|
-
postgres:
|
|
192
|
-
condition: service_healthy
|
|
193
|
-
networks: [internal]
|
|
194
|
-
|
|
195
|
-
postgres:
|
|
196
|
-
image: postgres:16-alpine
|
|
197
|
-
environment:
|
|
198
|
-
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
199
|
-
volumes:
|
|
200
|
-
- postgres_data:/var/lib/postgresql/data
|
|
201
|
-
healthcheck:
|
|
202
|
-
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
203
|
-
interval: 5s
|
|
204
|
-
retries: 5
|
|
205
|
-
networks: [internal]
|
|
206
|
-
|
|
207
|
-
volumes:
|
|
208
|
-
postgres_data:
|
|
209
|
-
|
|
210
|
-
networks:
|
|
211
|
-
internal:
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### Boas práticas
|
|
215
|
-
|
|
216
|
-
- **Serviços isolados** — Nginx + PHP-FPM em containers separados (não monolito)
|
|
217
|
-
- **Volumes nomeados** — persistência clara
|
|
218
|
-
- **Redes customizadas** — isolar comunicação entre serviços
|
|
219
|
-
- **Variáveis via `.env`** — nunca hardcode senha em compose
|
|
220
|
-
- **Healthchecks** — `depends_on: condition: service_healthy` evita race condition
|
|
221
|
-
- **Portas de DB não expostas para host em prod** — só na rede interna
|
|
222
|
-
|
|
223
|
-
## `.dockerignore` obrigatório
|
|
224
|
-
|
|
225
|
-
```
|
|
226
|
-
.git/
|
|
227
|
-
.github/
|
|
228
|
-
.vscode/
|
|
229
|
-
.idea/
|
|
230
|
-
node_modules/
|
|
231
|
-
vendor/
|
|
232
|
-
target/
|
|
233
|
-
.next/
|
|
234
|
-
dist/
|
|
235
|
-
build/
|
|
236
|
-
.env
|
|
237
|
-
.env.local
|
|
238
|
-
*.log
|
|
239
|
-
tests/
|
|
240
|
-
DARE/
|
|
241
|
-
.dockerignore
|
|
242
|
-
Dockerfile*
|
|
243
|
-
docker-compose*.yml
|
|
244
|
-
README.md
|
|
245
|
-
docs/
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
## Métricas / checklist
|
|
249
|
-
|
|
250
|
-
| Critério | OK |
|
|
251
|
-
|---|---|
|
|
252
|
-
| Multi-stage build | [ ] |
|
|
253
|
-
| Usuário não-root no runtime | [ ] |
|
|
254
|
-
| Tag explícita (não `latest`) | [ ] |
|
|
255
|
-
| `.dockerignore` presente | [ ] |
|
|
256
|
-
| Healthcheck nos serviços DB/cache | [ ] |
|
|
257
|
-
| Volumes nomeados (não bind mount em prod) | [ ] |
|
|
258
|
-
| Sem senha hardcoded no compose | [ ] |
|
|
259
|
-
| Imagem final < 200MB (linguagem compilada) ou < 500MB (interpretada) | [ ] |
|
|
260
|
-
| Cache de camadas otimizado | [ ] |
|
|
261
|
-
|
|
262
|
-
## Antipatterns
|
|
263
|
-
|
|
264
|
-
| AP | Antipattern | Por que evitar |
|
|
265
|
-
|---|---|---|
|
|
266
|
-
| AP-01 | Rodar como root | Vulnerabilidade — escape de container vira root no host |
|
|
267
|
-
| AP-02 | Tag `latest` | Build não reproduzível |
|
|
268
|
-
| AP-03 | `COPY . .` antes de instalar deps | Cache invalidado a cada commit |
|
|
269
|
-
| AP-04 | Senha em compose | Vaza em log e git |
|
|
270
|
-
| AP-05 | Mono-container com tudo (DB + app) | Não escala, viola SRP |
|
|
271
|
-
| AP-06 | `version: '3'` em compose | Deprecated |
|
|
272
|
-
| AP-07 | Sem healthcheck no DB | `depends_on` simples não espera DB ficar pronto |
|
|
273
|
-
| AP-08 | Sem `.dockerignore` | Imagem pesada, vaza `.env`/`.git` |
|
|
274
|
-
|
|
275
|
-
## Como aplicar
|
|
276
|
-
|
|
277
|
-
### Passo 1: Analisar stack
|
|
278
|
-
|
|
279
|
-
Leia `DESIGN.md` ou arquivos de config para identificar linguagem + framework + versão.
|
|
280
|
-
|
|
281
|
-
### Passo 2: Gerar Dockerfile
|
|
282
|
-
|
|
283
|
-
Use o template correspondente à stack acima. Adapte:
|
|
284
|
-
- Versão exata (PHP 8.3, Node 20, Python 3.11, …)
|
|
285
|
-
- Extensões/deps específicas
|
|
286
|
-
- Porta exposta
|
|
287
|
-
- Comando de start
|
|
288
|
-
|
|
289
|
-
### Passo 3: Gerar docker-compose.yml
|
|
290
|
-
|
|
291
|
-
Liste serviços necessários (api, db, redis, queue worker, …). Use healthchecks.
|
|
292
|
-
|
|
293
|
-
### Passo 4: Gerar .dockerignore
|
|
294
|
-
|
|
295
|
-
Pasta `DARE/`, `node_modules/`, `.git/`, `.env`, `tests/` — sempre.
|
|
296
|
-
|
|
297
|
-
### Passo 5: Validar
|
|
298
|
-
|
|
299
|
-
```bash
|
|
300
|
-
docker build -t myapp .
|
|
301
|
-
docker compose config # valida sintaxe
|
|
302
|
-
docker compose up --build
|
|
303
|
-
docker compose ps # verificar healthchecks
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
## Dicas
|
|
307
|
-
|
|
308
|
-
- **Use** `docker scout cves` para escanear imagens
|
|
309
|
-
- **Combine** com `dare-security` (escanear secrets antes de COPY)
|
|
310
|
-
- **Para Rust**, `cargo-chef` acelera builds CI dramaticamente
|
|
311
|
-
- **Para multi-arch**, use `docker buildx build --platform linux/amd64,linux/arm64`
|
|
312
|
-
|
|
313
|
-
---
|
|
314
|
-
|
|
315
|
-
Esta skill é parte do DARE Method e está sob licença MIT.
|
|
1
|
+
---
|
|
2
|
+
name: dare-docker
|
|
3
|
+
description: Containerização DARE com Dockerfile e docker-compose seguros, performantes e idiomáticos. Multi-stage builds, usuário não-root, healthchecks, redes isoladas, .dockerignore robusto. Cobre PHP/Laravel, Python/FastAPI, Node, Go, Rust, Rails e Vue.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# DARE Docker Skill
|
|
7
|
+
|
|
8
|
+
Você é um engenheiro DevOps especialista em containerização. Seu papel é gerar `Dockerfile`, `docker-compose.yml` e `.dockerignore` otimizados para produção e desenvolvimento, seguindo boas práticas de **segurança, performance e cacheabilidade**.
|
|
9
|
+
|
|
10
|
+
## Quando usar esta skill
|
|
11
|
+
|
|
12
|
+
- Projeto novo DARE precisa de imagem Docker
|
|
13
|
+
- Projeto existente tem Dockerfile antigo, com bash longo, root user, sem cache
|
|
14
|
+
- Build local lento (> 60s) — otimização de cache
|
|
15
|
+
- Imagem final pesada (> 500MB) — multi-stage e Alpine/distroless
|
|
16
|
+
|
|
17
|
+
## Padrões para Dockerfile
|
|
18
|
+
|
|
19
|
+
### Multi-stage builds (obrigatório)
|
|
20
|
+
|
|
21
|
+
Separe build (compiladores, deps de dev) de runtime (binário/artefato + libs mínimas).
|
|
22
|
+
|
|
23
|
+
```dockerfile
|
|
24
|
+
# Stage 1 — build
|
|
25
|
+
FROM rust:1.80-alpine AS builder
|
|
26
|
+
WORKDIR /app
|
|
27
|
+
COPY Cargo.toml Cargo.lock ./
|
|
28
|
+
RUN cargo fetch
|
|
29
|
+
COPY src ./src
|
|
30
|
+
RUN cargo build --release
|
|
31
|
+
|
|
32
|
+
# Stage 2 — runtime
|
|
33
|
+
FROM alpine:3.20
|
|
34
|
+
RUN adduser -D -u 1000 appuser
|
|
35
|
+
COPY --from=builder /app/target/release/myapp /usr/local/bin/myapp
|
|
36
|
+
USER appuser
|
|
37
|
+
EXPOSE 8080
|
|
38
|
+
CMD ["myapp"]
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Imagens base
|
|
42
|
+
|
|
43
|
+
- Use Alpine ou distroless quando possível
|
|
44
|
+
- Tags **explícitas** (`php:8.3-fpm-alpine`, nunca `latest`)
|
|
45
|
+
- Pin de versão evita surpresas de patch
|
|
46
|
+
|
|
47
|
+
### Usuário não-root
|
|
48
|
+
|
|
49
|
+
```dockerfile
|
|
50
|
+
RUN adduser -D -u 1000 appuser
|
|
51
|
+
USER appuser
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Aplicação rodando como root no container = vulnerabilidade.
|
|
55
|
+
|
|
56
|
+
### Cache de camadas
|
|
57
|
+
|
|
58
|
+
Ordene do menos mutável para o mais mutável:
|
|
59
|
+
1. `FROM`
|
|
60
|
+
2. `RUN apt-get install …` (raro mudar)
|
|
61
|
+
3. `COPY package.json` / `Cargo.toml` / `composer.json`
|
|
62
|
+
4. `RUN npm install` / `cargo fetch` / `composer install`
|
|
63
|
+
5. `COPY src/` ← muda muito, fica no final
|
|
64
|
+
6. `RUN build`
|
|
65
|
+
|
|
66
|
+
### Limpeza na mesma camada `RUN`
|
|
67
|
+
|
|
68
|
+
```dockerfile
|
|
69
|
+
RUN apt-get update && \
|
|
70
|
+
apt-get install -y --no-install-recommends curl ca-certificates && \
|
|
71
|
+
apt-get clean && \
|
|
72
|
+
rm -rf /var/lib/apt/lists/*
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### `ENTRYPOINT` vs `CMD`
|
|
76
|
+
|
|
77
|
+
- `ENTRYPOINT` — comando fixo do container
|
|
78
|
+
- `CMD` — argumentos default, podem ser sobrescritos
|
|
79
|
+
|
|
80
|
+
## Padrões por stack
|
|
81
|
+
|
|
82
|
+
### PHP / Laravel
|
|
83
|
+
|
|
84
|
+
```dockerfile
|
|
85
|
+
FROM php:8.3-fpm-alpine AS base
|
|
86
|
+
WORKDIR /var/www/html
|
|
87
|
+
|
|
88
|
+
RUN apk add --no-cache --virtual .build-deps \
|
|
89
|
+
$PHPIZE_DEPS postgresql-dev && \
|
|
90
|
+
docker-php-ext-install pdo_pgsql opcache bcmath && \
|
|
91
|
+
apk del .build-deps
|
|
92
|
+
|
|
93
|
+
COPY composer.json composer.lock ./
|
|
94
|
+
RUN composer install --no-dev --no-interaction --no-progress --optimize-autoloader
|
|
95
|
+
|
|
96
|
+
COPY . .
|
|
97
|
+
RUN chown -R www-data:www-data storage bootstrap/cache
|
|
98
|
+
|
|
99
|
+
USER www-data
|
|
100
|
+
EXPOSE 9000
|
|
101
|
+
CMD ["php-fpm"]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Python / FastAPI
|
|
105
|
+
|
|
106
|
+
```dockerfile
|
|
107
|
+
FROM python:3.11-slim AS builder
|
|
108
|
+
WORKDIR /app
|
|
109
|
+
COPY requirements.txt .
|
|
110
|
+
RUN pip install --no-cache-dir --user -r requirements.txt
|
|
111
|
+
|
|
112
|
+
FROM python:3.11-slim
|
|
113
|
+
RUN useradd -m -u 1000 appuser
|
|
114
|
+
COPY --from=builder /root/.local /home/appuser/.local
|
|
115
|
+
ENV PATH=/home/appuser/.local/bin:$PATH
|
|
116
|
+
WORKDIR /app
|
|
117
|
+
COPY --chown=appuser:appuser . .
|
|
118
|
+
USER appuser
|
|
119
|
+
EXPOSE 8000
|
|
120
|
+
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Go
|
|
124
|
+
|
|
125
|
+
```dockerfile
|
|
126
|
+
FROM golang:1.22-alpine AS builder
|
|
127
|
+
WORKDIR /app
|
|
128
|
+
COPY go.mod go.sum ./
|
|
129
|
+
RUN go mod download
|
|
130
|
+
COPY . .
|
|
131
|
+
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /app/bin/server ./cmd/server
|
|
132
|
+
|
|
133
|
+
FROM scratch
|
|
134
|
+
COPY --from=builder /app/bin/server /server
|
|
135
|
+
EXPOSE 8080
|
|
136
|
+
USER 1000:1000
|
|
137
|
+
ENTRYPOINT ["/server"]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Node / Vue (build estático)
|
|
141
|
+
|
|
142
|
+
```dockerfile
|
|
143
|
+
FROM node:20-alpine AS builder
|
|
144
|
+
WORKDIR /app
|
|
145
|
+
COPY package*.json ./
|
|
146
|
+
RUN npm ci
|
|
147
|
+
COPY . .
|
|
148
|
+
RUN npm run build
|
|
149
|
+
|
|
150
|
+
FROM nginx:alpine
|
|
151
|
+
COPY --from=builder /app/dist /usr/share/nginx/html
|
|
152
|
+
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
153
|
+
EXPOSE 80
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Rails
|
|
157
|
+
|
|
158
|
+
```dockerfile
|
|
159
|
+
FROM ruby:3.3-alpine AS builder
|
|
160
|
+
RUN apk add --no-cache build-base postgresql-dev nodejs yarn
|
|
161
|
+
WORKDIR /app
|
|
162
|
+
COPY Gemfile Gemfile.lock ./
|
|
163
|
+
RUN bundle install --without development test
|
|
164
|
+
COPY . .
|
|
165
|
+
RUN SECRET_KEY_BASE=dummy bundle exec rails assets:precompile
|
|
166
|
+
|
|
167
|
+
FROM ruby:3.3-alpine
|
|
168
|
+
RUN apk add --no-cache postgresql-client tzdata
|
|
169
|
+
WORKDIR /app
|
|
170
|
+
COPY --from=builder /usr/local/bundle /usr/local/bundle
|
|
171
|
+
COPY --from=builder /app /app
|
|
172
|
+
RUN adduser -D -u 1000 appuser && chown -R appuser:appuser /app
|
|
173
|
+
USER appuser
|
|
174
|
+
EXPOSE 3000
|
|
175
|
+
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Padrões para docker-compose
|
|
179
|
+
|
|
180
|
+
### Especificação atual
|
|
181
|
+
|
|
182
|
+
NÃO use `version: '3'` — está deprecated. Estrutura moderna:
|
|
183
|
+
|
|
184
|
+
```yaml
|
|
185
|
+
services:
|
|
186
|
+
api:
|
|
187
|
+
build: .
|
|
188
|
+
ports: ["8080:8080"]
|
|
189
|
+
env_file: .env
|
|
190
|
+
depends_on:
|
|
191
|
+
postgres:
|
|
192
|
+
condition: service_healthy
|
|
193
|
+
networks: [internal]
|
|
194
|
+
|
|
195
|
+
postgres:
|
|
196
|
+
image: postgres:16-alpine
|
|
197
|
+
environment:
|
|
198
|
+
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
199
|
+
volumes:
|
|
200
|
+
- postgres_data:/var/lib/postgresql/data
|
|
201
|
+
healthcheck:
|
|
202
|
+
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
203
|
+
interval: 5s
|
|
204
|
+
retries: 5
|
|
205
|
+
networks: [internal]
|
|
206
|
+
|
|
207
|
+
volumes:
|
|
208
|
+
postgres_data:
|
|
209
|
+
|
|
210
|
+
networks:
|
|
211
|
+
internal:
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Boas práticas
|
|
215
|
+
|
|
216
|
+
- **Serviços isolados** — Nginx + PHP-FPM em containers separados (não monolito)
|
|
217
|
+
- **Volumes nomeados** — persistência clara
|
|
218
|
+
- **Redes customizadas** — isolar comunicação entre serviços
|
|
219
|
+
- **Variáveis via `.env`** — nunca hardcode senha em compose
|
|
220
|
+
- **Healthchecks** — `depends_on: condition: service_healthy` evita race condition
|
|
221
|
+
- **Portas de DB não expostas para host em prod** — só na rede interna
|
|
222
|
+
|
|
223
|
+
## `.dockerignore` obrigatório
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
.git/
|
|
227
|
+
.github/
|
|
228
|
+
.vscode/
|
|
229
|
+
.idea/
|
|
230
|
+
node_modules/
|
|
231
|
+
vendor/
|
|
232
|
+
target/
|
|
233
|
+
.next/
|
|
234
|
+
dist/
|
|
235
|
+
build/
|
|
236
|
+
.env
|
|
237
|
+
.env.local
|
|
238
|
+
*.log
|
|
239
|
+
tests/
|
|
240
|
+
DARE/
|
|
241
|
+
.dockerignore
|
|
242
|
+
Dockerfile*
|
|
243
|
+
docker-compose*.yml
|
|
244
|
+
README.md
|
|
245
|
+
docs/
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Métricas / checklist
|
|
249
|
+
|
|
250
|
+
| Critério | OK |
|
|
251
|
+
|---|---|
|
|
252
|
+
| Multi-stage build | [ ] |
|
|
253
|
+
| Usuário não-root no runtime | [ ] |
|
|
254
|
+
| Tag explícita (não `latest`) | [ ] |
|
|
255
|
+
| `.dockerignore` presente | [ ] |
|
|
256
|
+
| Healthcheck nos serviços DB/cache | [ ] |
|
|
257
|
+
| Volumes nomeados (não bind mount em prod) | [ ] |
|
|
258
|
+
| Sem senha hardcoded no compose | [ ] |
|
|
259
|
+
| Imagem final < 200MB (linguagem compilada) ou < 500MB (interpretada) | [ ] |
|
|
260
|
+
| Cache de camadas otimizado | [ ] |
|
|
261
|
+
|
|
262
|
+
## Antipatterns
|
|
263
|
+
|
|
264
|
+
| AP | Antipattern | Por que evitar |
|
|
265
|
+
|---|---|---|
|
|
266
|
+
| AP-01 | Rodar como root | Vulnerabilidade — escape de container vira root no host |
|
|
267
|
+
| AP-02 | Tag `latest` | Build não reproduzível |
|
|
268
|
+
| AP-03 | `COPY . .` antes de instalar deps | Cache invalidado a cada commit |
|
|
269
|
+
| AP-04 | Senha em compose | Vaza em log e git |
|
|
270
|
+
| AP-05 | Mono-container com tudo (DB + app) | Não escala, viola SRP |
|
|
271
|
+
| AP-06 | `version: '3'` em compose | Deprecated |
|
|
272
|
+
| AP-07 | Sem healthcheck no DB | `depends_on` simples não espera DB ficar pronto |
|
|
273
|
+
| AP-08 | Sem `.dockerignore` | Imagem pesada, vaza `.env`/`.git` |
|
|
274
|
+
|
|
275
|
+
## Como aplicar
|
|
276
|
+
|
|
277
|
+
### Passo 1: Analisar stack
|
|
278
|
+
|
|
279
|
+
Leia `DESIGN.md` ou arquivos de config para identificar linguagem + framework + versão.
|
|
280
|
+
|
|
281
|
+
### Passo 2: Gerar Dockerfile
|
|
282
|
+
|
|
283
|
+
Use o template correspondente à stack acima. Adapte:
|
|
284
|
+
- Versão exata (PHP 8.3, Node 20, Python 3.11, …)
|
|
285
|
+
- Extensões/deps específicas
|
|
286
|
+
- Porta exposta
|
|
287
|
+
- Comando de start
|
|
288
|
+
|
|
289
|
+
### Passo 3: Gerar docker-compose.yml
|
|
290
|
+
|
|
291
|
+
Liste serviços necessários (api, db, redis, queue worker, …). Use healthchecks.
|
|
292
|
+
|
|
293
|
+
### Passo 4: Gerar .dockerignore
|
|
294
|
+
|
|
295
|
+
Pasta `DARE/`, `node_modules/`, `.git/`, `.env`, `tests/` — sempre.
|
|
296
|
+
|
|
297
|
+
### Passo 5: Validar
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
docker build -t myapp .
|
|
301
|
+
docker compose config # valida sintaxe
|
|
302
|
+
docker compose up --build
|
|
303
|
+
docker compose ps # verificar healthchecks
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Dicas
|
|
307
|
+
|
|
308
|
+
- **Use** `docker scout cves` para escanear imagens
|
|
309
|
+
- **Combine** com `dare-security` (escanear secrets antes de COPY)
|
|
310
|
+
- **Para Rust**, `cargo-chef` acelera builds CI dramaticamente
|
|
311
|
+
- **Para multi-arch**, use `docker buildx build --platform linux/amd64,linux/arm64`
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
Esta skill é parte do DARE Method e está sob licença MIT.
|