@dewtech/dare-cli 2.16.0 → 3.0.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/README.md +196 -3
- package/dist/__tests__/confidence.test.d.ts +2 -0
- package/dist/__tests__/confidence.test.d.ts.map +1 -0
- package/dist/__tests__/confidence.test.js +73 -0
- package/dist/__tests__/confidence.test.js.map +1 -0
- package/dist/__tests__/datamodel.test.d.ts +2 -0
- package/dist/__tests__/datamodel.test.d.ts.map +1 -0
- package/dist/__tests__/datamodel.test.js +131 -0
- package/dist/__tests__/datamodel.test.js.map +1 -0
- package/dist/__tests__/dna-detector.test.d.ts +2 -0
- package/dist/__tests__/dna-detector.test.d.ts.map +1 -0
- package/dist/__tests__/dna-detector.test.js +97 -0
- package/dist/__tests__/dna-detector.test.js.map +1 -0
- package/dist/__tests__/dna-facts.test.d.ts +2 -0
- package/dist/__tests__/dna-facts.test.d.ts.map +1 -0
- package/dist/__tests__/dna-facts.test.js +44 -0
- package/dist/__tests__/dna-facts.test.js.map +1 -0
- package/dist/__tests__/graph-renderer.test.d.ts +2 -0
- package/dist/__tests__/graph-renderer.test.d.ts.map +1 -0
- package/dist/__tests__/graph-renderer.test.js +85 -0
- package/dist/__tests__/graph-renderer.test.js.map +1 -0
- package/dist/__tests__/migration.test.d.ts +2 -0
- package/dist/__tests__/migration.test.d.ts.map +1 -0
- package/dist/__tests__/migration.test.js +77 -0
- package/dist/__tests__/migration.test.js.map +1 -0
- package/dist/__tests__/module-detector.test.d.ts +2 -0
- package/dist/__tests__/module-detector.test.d.ts.map +1 -0
- package/dist/__tests__/module-detector.test.js +83 -0
- package/dist/__tests__/module-detector.test.js.map +1 -0
- package/dist/__tests__/refine.test.d.ts +2 -0
- package/dist/__tests__/refine.test.d.ts.map +1 -0
- package/dist/__tests__/refine.test.js +186 -0
- package/dist/__tests__/refine.test.js.map +1 -0
- package/dist/__tests__/reverse-facts.test.d.ts +2 -0
- package/dist/__tests__/reverse-facts.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-facts.test.js +78 -0
- package/dist/__tests__/reverse-facts.test.js.map +1 -0
- package/dist/__tests__/review.test.d.ts +2 -0
- package/dist/__tests__/review.test.d.ts.map +1 -0
- package/dist/__tests__/review.test.js +242 -0
- package/dist/__tests__/review.test.js.map +1 -0
- package/dist/__tests__/update.test.d.ts +2 -0
- package/dist/__tests__/update.test.d.ts.map +1 -0
- package/dist/__tests__/update.test.js +150 -0
- package/dist/__tests__/update.test.js.map +1 -0
- package/dist/__tests__/validate.test.js +65 -65
- package/dist/bin/dare.js +38 -3
- package/dist/bin/dare.js.map +1 -1
- package/dist/commands/blueprint.js +122 -122
- package/dist/commands/dag.d.ts.map +1 -1
- package/dist/commands/dag.js +43 -79
- package/dist/commands/dag.js.map +1 -1
- package/dist/commands/dna.d.ts +3 -0
- package/dist/commands/dna.d.ts.map +1 -0
- package/dist/commands/dna.js +69 -0
- package/dist/commands/dna.js.map +1 -0
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +76 -0
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +101 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/new.d.ts +16 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +103 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/refine.d.ts +16 -0
- package/dist/commands/refine.d.ts.map +1 -0
- package/dist/commands/refine.js +167 -0
- package/dist/commands/refine.js.map +1 -0
- package/dist/commands/reverse.d.ts +3 -0
- package/dist/commands/reverse.d.ts.map +1 -0
- package/dist/commands/reverse.js +201 -0
- package/dist/commands/reverse.js.map +1 -0
- package/dist/commands/review.d.ts +16 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +106 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +149 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/welcome.d.ts +14 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +29 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/skills/commands/add.d.ts +23 -0
- package/dist/skills/commands/add.d.ts.map +1 -0
- package/dist/skills/commands/add.js +206 -0
- package/dist/skills/commands/add.js.map +1 -0
- package/dist/skills/commands/info.d.ts +14 -0
- package/dist/skills/commands/info.d.ts.map +1 -0
- package/dist/skills/commands/info.js +99 -0
- package/dist/skills/commands/info.js.map +1 -0
- package/dist/skills/commands/list.d.ts +19 -0
- package/dist/skills/commands/list.d.ts.map +1 -0
- package/dist/skills/commands/list.js +163 -0
- package/dist/skills/commands/list.js.map +1 -0
- package/dist/skills/commands/publish.d.ts +56 -0
- package/dist/skills/commands/publish.d.ts.map +1 -0
- package/dist/skills/commands/publish.js +272 -0
- package/dist/skills/commands/publish.js.map +1 -0
- package/dist/skills/commands/remove.d.ts +19 -0
- package/dist/skills/commands/remove.d.ts.map +1 -0
- package/dist/skills/commands/remove.js +96 -0
- package/dist/skills/commands/remove.js.map +1 -0
- package/dist/skills/commands/update.d.ts +31 -0
- package/dist/skills/commands/update.d.ts.map +1 -0
- package/dist/skills/commands/update.js +132 -0
- package/dist/skills/commands/update.js.map +1 -0
- package/dist/skills/index.d.ts +22 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +33 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/manifest.d.ts +54 -0
- package/dist/skills/manifest.d.ts.map +1 -0
- package/dist/skills/manifest.js +162 -0
- package/dist/skills/manifest.js.map +1 -0
- package/dist/skills/registry-local.d.ts +67 -0
- package/dist/skills/registry-local.d.ts.map +1 -0
- package/dist/skills/registry-local.js +130 -0
- package/dist/skills/registry-local.js.map +1 -0
- package/dist/skills/registry-mock.json +109 -0
- package/dist/skills/registry-remote.d.ts +110 -0
- package/dist/skills/registry-remote.d.ts.map +1 -0
- package/dist/skills/registry-remote.js +246 -0
- package/dist/skills/registry-remote.js.map +1 -0
- package/dist/skills/registry.d.ts +49 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +94 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/skills/tests/manifest.spec.d.ts +8 -0
- package/dist/skills/tests/manifest.spec.d.ts.map +1 -0
- package/dist/skills/tests/manifest.spec.js +176 -0
- package/dist/skills/tests/manifest.spec.js.map +1 -0
- package/dist/skills/tests/publish.spec.d.ts +12 -0
- package/dist/skills/tests/publish.spec.d.ts.map +1 -0
- package/dist/skills/tests/publish.spec.js +276 -0
- package/dist/skills/tests/publish.spec.js.map +1 -0
- package/dist/skills/tests/registry-local.spec.d.ts +8 -0
- package/dist/skills/tests/registry-local.spec.d.ts.map +1 -0
- package/dist/skills/tests/registry-local.spec.js +231 -0
- package/dist/skills/tests/registry-local.spec.js.map +1 -0
- package/dist/skills/tests/registry.spec.d.ts +7 -0
- package/dist/skills/tests/registry.spec.d.ts.map +1 -0
- package/dist/skills/tests/registry.spec.js +58 -0
- package/dist/skills/tests/registry.spec.js.map +1 -0
- package/dist/skills/tests/remote-registry.spec.d.ts +9 -0
- package/dist/skills/tests/remote-registry.spec.d.ts.map +1 -0
- package/dist/skills/tests/remote-registry.spec.js +357 -0
- package/dist/skills/tests/remote-registry.spec.js.map +1 -0
- package/dist/skills/tests/update.spec.d.ts +9 -0
- package/dist/skills/tests/update.spec.d.ts.map +1 -0
- package/dist/skills/tests/update.spec.js +166 -0
- package/dist/skills/tests/update.spec.js.map +1 -0
- package/dist/types/Refine.types.d.ts +96 -0
- package/dist/types/Refine.types.d.ts.map +1 -0
- package/dist/types/Refine.types.js +19 -0
- package/dist/types/Refine.types.js.map +1 -0
- package/dist/types/Review.types.d.ts +86 -0
- package/dist/types/Review.types.d.ts.map +1 -0
- package/dist/types/Review.types.js +15 -0
- package/dist/types/Review.types.js.map +1 -0
- package/dist/types/UpdateManifest.types.d.ts +91 -0
- package/dist/types/UpdateManifest.types.d.ts.map +1 -0
- package/dist/types/UpdateManifest.types.js +13 -0
- package/dist/types/UpdateManifest.types.js.map +1 -0
- package/dist/utils/ReviewRunner.d.ts +42 -0
- package/dist/utils/ReviewRunner.d.ts.map +1 -0
- package/dist/utils/ReviewRunner.js +175 -0
- package/dist/utils/ReviewRunner.js.map +1 -0
- package/dist/utils/UpdateApplier.d.ts +42 -0
- package/dist/utils/UpdateApplier.d.ts.map +1 -0
- package/dist/utils/UpdateApplier.js +207 -0
- package/dist/utils/UpdateApplier.js.map +1 -0
- package/dist/utils/UpdateDetector.d.ts +56 -0
- package/dist/utils/UpdateDetector.d.ts.map +1 -0
- package/dist/utils/UpdateDetector.js +164 -0
- package/dist/utils/UpdateDetector.js.map +1 -0
- package/dist/utils/banner.d.ts +28 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +77 -0
- package/dist/utils/banner.js.map +1 -0
- package/dist/utils/banner.spec.d.ts +5 -0
- package/dist/utils/banner.spec.d.ts.map +1 -0
- package/dist/utils/banner.spec.js +253 -0
- package/dist/utils/banner.spec.js.map +1 -0
- package/dist/utils/complexity-analyzer.d.ts +60 -0
- package/dist/utils/complexity-analyzer.d.ts.map +1 -0
- package/dist/utils/complexity-analyzer.js +292 -0
- package/dist/utils/complexity-analyzer.js.map +1 -0
- package/dist/utils/confidence.d.ts +41 -0
- package/dist/utils/confidence.d.ts.map +1 -0
- package/dist/utils/confidence.js +101 -0
- package/dist/utils/confidence.js.map +1 -0
- package/dist/utils/datamodel.d.ts +41 -0
- package/dist/utils/datamodel.d.ts.map +1 -0
- package/dist/utils/datamodel.js +535 -0
- package/dist/utils/datamodel.js.map +1 -0
- package/dist/utils/dna-detector.d.ts +61 -0
- package/dist/utils/dna-detector.d.ts.map +1 -0
- package/dist/utils/dna-detector.js +354 -0
- package/dist/utils/dna-detector.js.map +1 -0
- package/dist/utils/dna-facts.d.ts +13 -0
- package/dist/utils/dna-facts.d.ts.map +1 -0
- package/dist/utils/dna-facts.js +109 -0
- package/dist/utils/dna-facts.js.map +1 -0
- package/dist/utils/excalidraw-renderer.d.ts +11 -71
- package/dist/utils/excalidraw-renderer.d.ts.map +1 -1
- package/dist/utils/excalidraw-renderer.js +29 -162
- package/dist/utils/excalidraw-renderer.js.map +1 -1
- package/dist/utils/graph-renderer.d.ts +115 -0
- package/dist/utils/graph-renderer.d.ts.map +1 -0
- package/dist/utils/graph-renderer.js +216 -0
- package/dist/utils/graph-renderer.js.map +1 -0
- package/dist/utils/migration.d.ts +64 -0
- package/dist/utils/migration.d.ts.map +1 -0
- package/dist/utils/migration.js +183 -0
- package/dist/utils/migration.js.map +1 -0
- package/dist/utils/module-detector.d.ts +46 -0
- package/dist/utils/module-detector.d.ts.map +1 -0
- package/dist/utils/module-detector.js +348 -0
- package/dist/utils/module-detector.js.map +1 -0
- package/dist/utils/project-generator.d.ts.map +1 -1
- package/dist/utils/project-generator.js +273 -254
- package/dist/utils/project-generator.js.map +1 -1
- package/dist/utils/reverse-facts.d.ts +50 -0
- package/dist/utils/reverse-facts.d.ts.map +1 -0
- package/dist/utils/reverse-facts.js +291 -0
- package/dist/utils/reverse-facts.js.map +1 -0
- package/dist/utils/stack-bootstrap.js +371 -371
- package/dist/utils/static-analyzer.d.ts +29 -0
- package/dist/utils/static-analyzer.d.ts.map +1 -0
- package/dist/utils/static-analyzer.js +390 -0
- package/dist/utils/static-analyzer.js.map +1 -0
- package/dist/utils/version-compare.d.ts +27 -0
- package/dist/utils/version-compare.d.ts.map +1 -0
- package/dist/utils/version-compare.js +47 -0
- package/dist/utils/version-compare.js.map +1 -0
- package/package.json +8 -3
- package/templates/DARE-dag-example.yaml +280 -280
- package/templates/UPDATE-MANIFEST.json +48 -0
- 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 -0
- package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +180 -36
- package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -0
- package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -0
- package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
- package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -0
- package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -0
- package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -0
- package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -0
- package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -0
- package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -0
- package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -0
- package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -0
- package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -0
- package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -0
- package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -0
- package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -0
- package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -0
- package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
- package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -0
- package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -224
- package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -0
- package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -0
- package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -0
- package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -0
- package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -0
- package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -0
- 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 -100
- package/templates/ide/claude/.claude/commands/dare-ax.md +131 -0
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -78
- package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -0
- package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -110
- package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
- package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -0
- package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
- package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
- package/templates/ide/claude/.claude/commands/dare-dna.md +75 -0
- package/templates/ide/claude/.claude/commands/dare-docker.md +207 -0
- package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
- package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -0
- package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -0
- package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -0
- package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -0
- package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -0
- package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -0
- package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -0
- package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -0
- package/templates/ide/claude/.claude/commands/dare-refine.md +145 -0
- package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -0
- package/templates/ide/claude/.claude/commands/dare-review.md +113 -0
- 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-tasks.md +70 -70
- package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -0
- package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -0
- package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -0
- package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -0
- package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -0
- package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -0
- 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 -100
- package/templates/ide/cursor/.cursor/commands/dag-viz.md +139 -0
- package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +86 -41
- package/templates/ide/cursor/.cursor/commands/generate-design.md +35 -35
- package/templates/ide/cursor/.cursor/commands/generate-tasks.md +184 -142
- package/templates/ide/cursor/.cursor/commands/refine-task.md +107 -0
- package/templates/ide/cursor/.cursor/commands/review-task.md +91 -0
- package/templates/ide/cursor/.cursor/commands/run-dag.md +110 -110
- package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -0
- package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -0
- package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -0
- package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
- package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -0
- package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -0
- package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -0
- package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -0
- package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -0
- package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -0
- package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -0
- package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -0
- package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -0
- package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -0
- package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -0
- package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -0
- package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -0
- package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -0
- 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/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 -100
- package/templates/shared/docker-compose.yml +41 -41
- package/dist/__tests__/dag-runner/adapters.test.d.ts +0 -2
- package/dist/__tests__/dag-runner/adapters.test.d.ts.map +0 -1
- package/dist/__tests__/dag-runner/adapters.test.js +0 -134
- package/dist/__tests__/dag-runner/adapters.test.js.map +0 -1
- package/dist/dag-runner/adapters/antigravity.d.ts +0 -6
- package/dist/dag-runner/adapters/antigravity.d.ts.map +0 -1
- package/dist/dag-runner/adapters/antigravity.js +0 -54
- package/dist/dag-runner/adapters/antigravity.js.map +0 -1
- package/dist/dag-runner/adapters/claude.d.ts +0 -6
- package/dist/dag-runner/adapters/claude.d.ts.map +0 -1
- package/dist/dag-runner/adapters/claude.js +0 -48
- package/dist/dag-runner/adapters/claude.js.map +0 -1
- package/dist/dag-runner/adapters/cursor.d.ts +0 -6
- package/dist/dag-runner/adapters/cursor.d.ts.map +0 -1
- package/dist/dag-runner/adapters/cursor.js +0 -58
- package/dist/dag-runner/adapters/cursor.js.map +0 -1
- package/dist/dag-runner/adapters/index.d.ts +0 -46
- package/dist/dag-runner/adapters/index.d.ts.map +0 -1
- package/dist/dag-runner/adapters/index.js +0 -55
- package/dist/dag-runner/adapters/index.js.map +0 -1
- package/dist/dag-runner/utils/timeout.d.ts +0 -27
- package/dist/dag-runner/utils/timeout.d.ts.map +0 -1
- package/dist/dag-runner/utils/timeout.js +0 -55
- package/dist/dag-runner/utils/timeout.js.map +0 -1
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
# Comando: /run-dag
|
|
2
|
-
|
|
3
|
-
## Descrição
|
|
4
|
-
|
|
5
|
-
Executa o grafo de tasks definido em `DARE/dare-dag.yaml` usando o **Cursor
|
|
6
|
-
como executor** e o CLI `dare` como orquestrador. O canvas ao vivo fica em
|
|
7
|
-
`DARE/.canvas.md`.
|
|
8
|
-
|
|
9
|
-
> **Sem API keys.** Você (Cursor) usa o plano da IDE em que o usuário já está
|
|
10
|
-
> logado. O CLI apenas coordena estado, monta prompts e atualiza canvas.
|
|
11
|
-
|
|
12
|
-
## Pré-requisitos
|
|
13
|
-
|
|
14
|
-
- `DARE/dare-dag.yaml` existe e foi aprovado pelo usuário
|
|
15
|
-
- Specs em `DARE/EXECUTION/task-<id>.md` geradas
|
|
16
|
-
- `dare` disponível no PATH (`npm i -g @dewtech/dare-cli`)
|
|
17
|
-
|
|
18
|
-
## Instruções para o Cursor Composer
|
|
19
|
-
|
|
20
|
-
### 1. Validar pré-condições
|
|
21
|
-
|
|
22
|
-
- Confirme que `DARE/dare-dag.yaml` existe. Se não, oriente o usuário a rodar
|
|
23
|
-
`/generate-tasks` primeiro
|
|
24
|
-
- Leia o YAML e verifique:
|
|
25
|
-
- Sem ciclos
|
|
26
|
-
- Pelo menos 2 tasks no rank 0 (paralelismo lógico)
|
|
27
|
-
- Cada task tem `id` único, `complexity`, `subtask_prompt`
|
|
28
|
-
|
|
29
|
-
### 2. Pegar próximas tasks
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
dare execute --next
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
O CLI imprime as tasks ready do rank atual com o prompt completo (já com
|
|
36
|
-
snippets dos outputs dos pais costurados). Use exatamente esses prompts.
|
|
37
|
-
|
|
38
|
-
### 3. Sugerir abrir o canvas
|
|
39
|
-
|
|
40
|
-
Antes de começar, peça ao usuário abrir `DARE/.canvas.md` em uma aba para
|
|
41
|
-
acompanhar o progresso ao vivo.
|
|
42
|
-
|
|
43
|
-
### 4. Executar cada task
|
|
44
|
-
|
|
45
|
-
Para cada task ready:
|
|
46
|
-
|
|
47
|
-
1. Leia `spec_file` se houver
|
|
48
|
-
2. Implemente conforme o prompt
|
|
49
|
-
3. Rode Ralph Loop: build → test → lint
|
|
50
|
-
4. Registre o resultado:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
# Sucesso
|
|
54
|
-
dare execute --complete task-001 --output "Resumo + arquivos criados/modificados (paths)"
|
|
55
|
-
|
|
56
|
-
# Falha
|
|
57
|
-
dare execute --fail task-002 --reason "Mensagem clara da falha"
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### 5. Avançar de rank
|
|
61
|
-
|
|
62
|
-
Após registrar todos os `--complete`/`--fail` do rank atual:
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
dare execute --next
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
Se aparece `✅ All tasks resolved`, todas as tasks terminaram. Caso contrário,
|
|
69
|
-
continue executando o próximo rank.
|
|
70
|
-
|
|
71
|
-
### 6. Pós-execução
|
|
72
|
-
|
|
73
|
-
Ao terminar:
|
|
74
|
-
|
|
75
|
-
- Rode `dare execute --status` para ver o sumário final
|
|
76
|
-
- Se houver FAILED: leia `DARE/EXECUTION/task-<id>.md` da que falhou,
|
|
77
|
-
corrija a spec ou o prompt, depois:
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
dare execute --reset task-002 # volta para PENDING
|
|
81
|
-
dare execute --next # tente novamente
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Comandos disponíveis
|
|
85
|
-
|
|
86
|
-
| Comando | Função |
|
|
87
|
-
|---------|--------|
|
|
88
|
-
| `dare execute --next` | Imprime tasks ready do rank atual com prompts |
|
|
89
|
-
| `dare execute --complete <id> --output "…"` | Marca DONE |
|
|
90
|
-
| `dare execute --fail <id> --reason "…"` | Marca FAILED + cascade-skip |
|
|
91
|
-
| `dare execute --reset <id>` | Volta para PENDING (retry) |
|
|
92
|
-
| `dare execute --status` | Snapshot do canvas + sumário |
|
|
93
|
-
|
|
94
|
-
## Erros comuns
|
|
95
|
-
|
|
96
|
-
| Sintoma | Causa | Correção |
|
|
97
|
-
|---------|-------|----------|
|
|
98
|
-
| `dare-dag.yaml not found` | Não foi gerado | Rode `/generate-tasks` |
|
|
99
|
-
| Cascata de SKIPPED | Pai falhou | Corrija pai → `--reset` → `--next` |
|
|
100
|
-
| Output truncado em 4000 chars | Cap normal | Faça a task escrever em arquivo, retorne resumo |
|
|
101
|
-
| Tudo no rank 0 disputa o mesmo arquivo | Ausência de deps reais | Edite `dare-dag.yaml` adicionando `depends_on` |
|
|
102
|
-
|
|
103
|
-
## Referências
|
|
104
|
-
|
|
105
|
-
- Skill: `.cursor/rules/skill-dag-runner.mdc`
|
|
106
|
-
- Schema: `DARE/dare-dag.yaml`
|
|
107
|
-
- Canvas: `DARE/.canvas.md`
|
|
108
|
-
- Specs: `DARE/EXECUTION/task-*.md`
|
|
109
|
-
|
|
110
|
-
$ARGUMENTS
|
|
1
|
+
# Comando: /run-dag
|
|
2
|
+
|
|
3
|
+
## Descrição
|
|
4
|
+
|
|
5
|
+
Executa o grafo de tasks definido em `DARE/dare-dag.yaml` usando o **Cursor
|
|
6
|
+
como executor** e o CLI `dare` como orquestrador. O canvas ao vivo fica em
|
|
7
|
+
`DARE/.canvas.md`.
|
|
8
|
+
|
|
9
|
+
> **Sem API keys.** Você (Cursor) usa o plano da IDE em que o usuário já está
|
|
10
|
+
> logado. O CLI apenas coordena estado, monta prompts e atualiza canvas.
|
|
11
|
+
|
|
12
|
+
## Pré-requisitos
|
|
13
|
+
|
|
14
|
+
- `DARE/dare-dag.yaml` existe e foi aprovado pelo usuário
|
|
15
|
+
- Specs em `DARE/EXECUTION/task-<id>.md` geradas
|
|
16
|
+
- `dare` disponível no PATH (`npm i -g @dewtech/dare-cli`)
|
|
17
|
+
|
|
18
|
+
## Instruções para o Cursor Composer
|
|
19
|
+
|
|
20
|
+
### 1. Validar pré-condições
|
|
21
|
+
|
|
22
|
+
- Confirme que `DARE/dare-dag.yaml` existe. Se não, oriente o usuário a rodar
|
|
23
|
+
`/generate-tasks` primeiro
|
|
24
|
+
- Leia o YAML e verifique:
|
|
25
|
+
- Sem ciclos
|
|
26
|
+
- Pelo menos 2 tasks no rank 0 (paralelismo lógico)
|
|
27
|
+
- Cada task tem `id` único, `complexity`, `subtask_prompt`
|
|
28
|
+
|
|
29
|
+
### 2. Pegar próximas tasks
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
dare execute --next
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
O CLI imprime as tasks ready do rank atual com o prompt completo (já com
|
|
36
|
+
snippets dos outputs dos pais costurados). Use exatamente esses prompts.
|
|
37
|
+
|
|
38
|
+
### 3. Sugerir abrir o canvas
|
|
39
|
+
|
|
40
|
+
Antes de começar, peça ao usuário abrir `DARE/.canvas.md` em uma aba para
|
|
41
|
+
acompanhar o progresso ao vivo.
|
|
42
|
+
|
|
43
|
+
### 4. Executar cada task
|
|
44
|
+
|
|
45
|
+
Para cada task ready:
|
|
46
|
+
|
|
47
|
+
1. Leia `spec_file` se houver
|
|
48
|
+
2. Implemente conforme o prompt
|
|
49
|
+
3. Rode Ralph Loop: build → test → lint
|
|
50
|
+
4. Registre o resultado:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Sucesso
|
|
54
|
+
dare execute --complete task-001 --output "Resumo + arquivos criados/modificados (paths)"
|
|
55
|
+
|
|
56
|
+
# Falha
|
|
57
|
+
dare execute --fail task-002 --reason "Mensagem clara da falha"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 5. Avançar de rank
|
|
61
|
+
|
|
62
|
+
Após registrar todos os `--complete`/`--fail` do rank atual:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
dare execute --next
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Se aparece `✅ All tasks resolved`, todas as tasks terminaram. Caso contrário,
|
|
69
|
+
continue executando o próximo rank.
|
|
70
|
+
|
|
71
|
+
### 6. Pós-execução
|
|
72
|
+
|
|
73
|
+
Ao terminar:
|
|
74
|
+
|
|
75
|
+
- Rode `dare execute --status` para ver o sumário final
|
|
76
|
+
- Se houver FAILED: leia `DARE/EXECUTION/task-<id>.md` da que falhou,
|
|
77
|
+
corrija a spec ou o prompt, depois:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
dare execute --reset task-002 # volta para PENDING
|
|
81
|
+
dare execute --next # tente novamente
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Comandos disponíveis
|
|
85
|
+
|
|
86
|
+
| Comando | Função |
|
|
87
|
+
|---------|--------|
|
|
88
|
+
| `dare execute --next` | Imprime tasks ready do rank atual com prompts |
|
|
89
|
+
| `dare execute --complete <id> --output "…"` | Marca DONE |
|
|
90
|
+
| `dare execute --fail <id> --reason "…"` | Marca FAILED + cascade-skip |
|
|
91
|
+
| `dare execute --reset <id>` | Volta para PENDING (retry) |
|
|
92
|
+
| `dare execute --status` | Snapshot do canvas + sumário |
|
|
93
|
+
|
|
94
|
+
## Erros comuns
|
|
95
|
+
|
|
96
|
+
| Sintoma | Causa | Correção |
|
|
97
|
+
|---------|-------|----------|
|
|
98
|
+
| `dare-dag.yaml not found` | Não foi gerado | Rode `/generate-tasks` |
|
|
99
|
+
| Cascata de SKIPPED | Pai falhou | Corrija pai → `--reset` → `--next` |
|
|
100
|
+
| Output truncado em 4000 chars | Cap normal | Faça a task escrever em arquivo, retorne resumo |
|
|
101
|
+
| Tudo no rank 0 disputa o mesmo arquivo | Ausência de deps reais | Edite `dare-dag.yaml` adicionando `depends_on` |
|
|
102
|
+
|
|
103
|
+
## Referências
|
|
104
|
+
|
|
105
|
+
- Skill: `.cursor/rules/skill-dag-runner.mdc`
|
|
106
|
+
- Schema: `DARE/dare-dag.yaml`
|
|
107
|
+
- Canvas: `DARE/.canvas.md`
|
|
108
|
+
- Specs: `DARE/EXECUTION/task-*.md`
|
|
109
|
+
|
|
110
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Agent Experience (AX) — codifica padrões para desenvolvimento assistido por IA em três planos (Discovery, Usage, Defense). Garante que todo projeto DARE exponha sinais estruturados (llms.txt, OpenAPI, --json, rate limit) que agentes de código precisam.
|
|
3
|
+
globs: llms.txt,openapi.json,public/openapi.json,README.md,.env.example,DARE/DESIGN.md
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Agent Experience (AX) DARE
|
|
8
|
+
|
|
9
|
+
Você é um especialista em integração entre projetos e agentes de código (Claude Code, Cursor, Antigravity, MCP servers). Esta skill define o **padrão AX DARE** que todo projeto novo deve seguir e contra o qual todo projeto existente deve ser auditado.
|
|
10
|
+
|
|
11
|
+
## Por que AX é design-first
|
|
12
|
+
|
|
13
|
+
Projetos podem ter código correto e arquitetura limpa mas **carecer de sinais estruturados** para agentes:
|
|
14
|
+
- Sem `llms.txt`, o agente precisa adivinhar a estrutura
|
|
15
|
+
- Sem OpenAPI, o agente faz parsing regex de docs HTML
|
|
16
|
+
- Sem `--json` no CLI, o agente lida com tabelas ASCII coloridas
|
|
17
|
+
- Sem rate limit, um prompt mal feito vira DDoS
|
|
18
|
+
|
|
19
|
+
A skill `dare-ax` codifica três planos:
|
|
20
|
+
|
|
21
|
+
| Plano | Pergunta que responde |
|
|
22
|
+
|---|---|
|
|
23
|
+
| **Discovery** | "Como o agente acha o que precisa?" |
|
|
24
|
+
| **Usage** | "Como o agente opera sem refactor desnecessário?" |
|
|
25
|
+
| **Defense** | "Como o projeto resiste a prompts ruins?" |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Plano 1 — Discovery
|
|
30
|
+
|
|
31
|
+
### `llms.txt` na raiz (obrigatório)
|
|
32
|
+
|
|
33
|
+
Arquivo público com a "ficha técnica" do projeto. Formato livre mas seções fixas:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
# <nome-do-projeto>
|
|
37
|
+
|
|
38
|
+
> <descrição em 1-2 frases — o que é, qual problema resolve>
|
|
39
|
+
|
|
40
|
+
## Stack
|
|
41
|
+
- <linguagem + framework>
|
|
42
|
+
- <banco>
|
|
43
|
+
- <cache, fila, etc.>
|
|
44
|
+
|
|
45
|
+
## Bootstrap
|
|
46
|
+
- `make setup` — instala deps + sobe Postgres/Redis local
|
|
47
|
+
- `make dev` — sobe aplicação
|
|
48
|
+
- `make test` — roda suite
|
|
49
|
+
|
|
50
|
+
## Endpoints
|
|
51
|
+
- `GET /healthz` — liveness
|
|
52
|
+
- `GET /openapi.json` — spec completa
|
|
53
|
+
- `POST /api/login` — autenticação
|
|
54
|
+
...
|
|
55
|
+
|
|
56
|
+
## CLI (se aplicável)
|
|
57
|
+
- `<bin> users create --email <e> --json`
|
|
58
|
+
- `<bin> migrate run --json`
|
|
59
|
+
|
|
60
|
+
## Docs internas
|
|
61
|
+
- DARE/DESIGN.md — requisitos
|
|
62
|
+
- DARE/BLUEPRINT.md — arquitetura
|
|
63
|
+
- docs/RUNBOOK.md — operações
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Critério objetivo:** o arquivo deve ser navegável em < 2 minutos por um agente.
|
|
67
|
+
|
|
68
|
+
### Estrutura previsível
|
|
69
|
+
|
|
70
|
+
| Pasta | Conteúdo |
|
|
71
|
+
|---|---|
|
|
72
|
+
| `src/` ou `crates/<projeto>-*/` | código de produção |
|
|
73
|
+
| `tests/` | testes (mirror de `src/` quando possível) |
|
|
74
|
+
| `docs/` | documentação humana extensa |
|
|
75
|
+
| `DARE/` | DESIGN.md, BLUEPRINT.md, EXECUTION/, dare-dag.yaml |
|
|
76
|
+
| `infra/` ou `deploy/` | Dockerfile, compose, k8s manifests |
|
|
77
|
+
|
|
78
|
+
Nomes esotéricos (`thing/`, `stuff/`, `misc/`) — proibidos.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Plano 2 — Usage
|
|
83
|
+
|
|
84
|
+
### `openapi.json` (HTTP)
|
|
85
|
+
|
|
86
|
+
Toda API HTTP deve expor spec OpenAPI 3.x em `/openapi.json` ou `public/openapi.json`.
|
|
87
|
+
|
|
88
|
+
| Stack | Como gerar |
|
|
89
|
+
|---|---|
|
|
90
|
+
| FastAPI | Automático (Pydantic models) |
|
|
91
|
+
| NestJS | `@nestjs/swagger` decorators |
|
|
92
|
+
| Laravel | `darkaonline/l5-swagger` |
|
|
93
|
+
| Rails | `grape-swagger` ou `rswag` |
|
|
94
|
+
| Rust/Axum | `utoipa` + `utoipa-swagger-ui` |
|
|
95
|
+
| Go/Gin | `swaggo/swag` |
|
|
96
|
+
|
|
97
|
+
**Antipattern:** escrever OpenAPI à mão em YAML — desatualiza no primeiro PR.
|
|
98
|
+
|
|
99
|
+
### CLI com `--json`
|
|
100
|
+
|
|
101
|
+
Todo comando de CLI exposto a humanos deve ter alternativa machine-readable:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Para humanos
|
|
105
|
+
$ dare metrics
|
|
106
|
+
┌──────┬──────────┐
|
|
107
|
+
│ ID │ Status │
|
|
108
|
+
├──────┼──────────┤
|
|
109
|
+
│ M-01 │ PASS │
|
|
110
|
+
└──────┴──────────┘
|
|
111
|
+
|
|
112
|
+
# Para agentes
|
|
113
|
+
$ dare metrics --json
|
|
114
|
+
{"metrics":[{"id":"M-01","status":"PASS","value":1.0}]}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Regras:
|
|
118
|
+
- JSON puro em stdout, sem cores ANSI, sem prompt
|
|
119
|
+
- Exit code 0 em sucesso, ≠ 0 em erro
|
|
120
|
+
- Schema documentado em `llms.txt`
|
|
121
|
+
|
|
122
|
+
### `.env.example` versionado
|
|
123
|
+
|
|
124
|
+
Sempre commitado, com **chaves e tipos**, sem valores reais:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
DATABASE_URL=postgres://user:password@localhost:5432/dbname
|
|
128
|
+
REDIS_URL=redis://localhost:6379/0
|
|
129
|
+
JWT_SECRET=replace-with-256-bit-random-string
|
|
130
|
+
STRIPE_SECRET_KEY=sk_test_xxx
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
`.env` real fica no `.gitignore`.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Plano 3 — Defense
|
|
138
|
+
|
|
139
|
+
### Rate limit
|
|
140
|
+
|
|
141
|
+
Endpoint público sem rate limit = vulnerável. Use o middleware da stack:
|
|
142
|
+
|
|
143
|
+
| Stack | Middleware típico |
|
|
144
|
+
|---|---|
|
|
145
|
+
| Rails | `rack-attack` |
|
|
146
|
+
| Node/Express | `express-rate-limit` |
|
|
147
|
+
| NestJS | `@nestjs/throttler` |
|
|
148
|
+
| FastAPI | `slowapi` |
|
|
149
|
+
| Rust/Axum | `tower-governor` |
|
|
150
|
+
| Go/Gin | `gin-contrib/limit` ou middleware custom |
|
|
151
|
+
| Laravel | `ThrottleRequests` middleware (nativo) |
|
|
152
|
+
|
|
153
|
+
**Padrão recomendado:**
|
|
154
|
+
- Login: 5 req / 15 min por IP + por usuário
|
|
155
|
+
- API autenticada geral: 100 req / min por usuário
|
|
156
|
+
- API pública: 30 req / min por IP
|
|
157
|
+
|
|
158
|
+
### Validação de input
|
|
159
|
+
|
|
160
|
+
Sempre no servidor, mesmo que o frontend valide:
|
|
161
|
+
|
|
162
|
+
| Stack | Tooling |
|
|
163
|
+
|---|---|
|
|
164
|
+
| Laravel | FormRequest classes |
|
|
165
|
+
| FastAPI | Pydantic models |
|
|
166
|
+
| Node | Zod, class-validator |
|
|
167
|
+
| Rust/Axum | `serde` + `validator` crate |
|
|
168
|
+
| Rails | strong params + ActiveModel validations |
|
|
169
|
+
| Go | `go-playground/validator` |
|
|
170
|
+
|
|
171
|
+
### Secrets só via env
|
|
172
|
+
|
|
173
|
+
Nada de `password = "..."` no código. Configure scanner no CI:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
pip install detect-secrets
|
|
177
|
+
detect-secrets scan > .secrets.baseline
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### `llms.txt` sem secrets
|
|
181
|
+
|
|
182
|
+
`llms.txt` é público — o scanner do CI deve bloquear commits onde apareçam:
|
|
183
|
+
- `api_key=`, `password=`, `DATABASE_URL=postgres://user:pwd@`
|
|
184
|
+
- `Bearer ...`, `Authorization: ...`
|
|
185
|
+
- Chaves PEM, AWS access keys, GCP service account JSON inline
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Métricas obrigatórias (CI)
|
|
190
|
+
|
|
191
|
+
| ID | Métrica | Comando de validação |
|
|
192
|
+
|---|---|---|
|
|
193
|
+
| M-01 | `llms.txt` existe e é válido (sem secrets, seções obrigatórias) | `dare ax validate --llms` |
|
|
194
|
+
| M-02 | `openapi.json` ou `public/openapi.json` existe | `test -f public/openapi.json \|\| test -f openapi.json` |
|
|
195
|
+
| M-03 | CLI suporta `--json` | `cli --help \| grep -- '--json'` |
|
|
196
|
+
| M-04 | Rate limit configurado | grep pelo middleware da stack |
|
|
197
|
+
|
|
198
|
+
Falha M-01 ou M-04 em produção = release bloqueado.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Antipatterns
|
|
203
|
+
|
|
204
|
+
| AP | Antipattern | Por que evitar |
|
|
205
|
+
|---|---|---|
|
|
206
|
+
| AP-01 | Docs fora do código | Divergem rapidamente |
|
|
207
|
+
| AP-02 | OpenAPI escrito à mão | Desatualiza no primeiro PR |
|
|
208
|
+
| AP-03 | CLI sem `--json` | Agentes fazem regex no output, frágil |
|
|
209
|
+
| AP-04 | Rate limit em dev, faltando em prod | Endpoint vira target de abuse |
|
|
210
|
+
| AP-05 | `llms.txt` com secrets | Credenciais em repositório público |
|
|
211
|
+
| AP-06 | CORS `*` em produção | Origem qualquer permitida |
|
|
212
|
+
| AP-07 | Validação só em API, esquecida em CLI | Agentes usam ambos |
|
|
213
|
+
| AP-08 | Configs opcionais sem default | Agentes precisam de defaults previsíveis |
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Aplicação por fase DARE
|
|
218
|
+
|
|
219
|
+
### Design (`/generate-design`)
|
|
220
|
+
|
|
221
|
+
DESIGN.md deve ter seção **## Agent Experience (AX)** com:
|
|
222
|
+
- Como o projeto será descoberto por agentes
|
|
223
|
+
- Quais CLIs/endpoints expostos terão `--json`/OpenAPI
|
|
224
|
+
- Estratégia de rate limit para endpoints públicos
|
|
225
|
+
|
|
226
|
+
### Blueprint (`/generate-blueprint`)
|
|
227
|
+
|
|
228
|
+
BLUEPRINT.md deve listar:
|
|
229
|
+
- Geração automática de OpenAPI (qual tooling)
|
|
230
|
+
- Middleware de rate limit por endpoint
|
|
231
|
+
- Estratégia de logging estruturado (JSON)
|
|
232
|
+
|
|
233
|
+
### Tasks (`/generate-tasks`)
|
|
234
|
+
|
|
235
|
+
Crie tasks dedicadas:
|
|
236
|
+
- "Gerar `llms.txt`"
|
|
237
|
+
- "Expor OpenAPI em /openapi.json"
|
|
238
|
+
- "Adicionar `--json` ao CLI"
|
|
239
|
+
- "Configurar rate limit em endpoints públicos"
|
|
240
|
+
|
|
241
|
+
### Execute (`/execute-task`)
|
|
242
|
+
|
|
243
|
+
Em qualquer task que mexa em endpoint HTTP ou comando CLI, valide:
|
|
244
|
+
- OpenAPI atualizado?
|
|
245
|
+
- `--json` disponível?
|
|
246
|
+
- Rate limit aplicado?
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Checklist final
|
|
251
|
+
|
|
252
|
+
- [ ] `llms.txt` na raiz com seções obrigatórias
|
|
253
|
+
- [ ] OpenAPI 3.x gerado a partir do código
|
|
254
|
+
- [ ] Todos os CLIs aceitam `--json`
|
|
255
|
+
- [ ] Rate limit em todos os endpoints públicos
|
|
256
|
+
- [ ] `.env.example` versionado sem valores reais
|
|
257
|
+
- [ ] Scanner de secrets no CI
|
|
258
|
+
- [ ] Seção AX em DESIGN.md
|
|
259
|
+
- [ ] Métricas M-01 a M-04 verificáveis em CI
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
Skill licenciada MIT — parte do DARE Method v3.
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Regenera APENAS o DARE/dare-dag.yaml a partir do BLUEPRINT.md já existente — sem refazer o blueprint nem as specs. Use quando o BLUEPRINT mudou pouco mas o grafo precisa refletir o novo estado, ou para experimentar uma decomposição diferente.
|
|
3
|
+
globs: DARE/BLUEPRINT.md,DARE/dare-dag.yaml,DARE/EXECUTION/**
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: DAG Build — Regerar o grafo
|
|
8
|
+
|
|
9
|
+
Esta skill regenera **apenas** o `DARE/dare-dag.yaml` a partir do BLUEPRINT
|
|
10
|
+
existente. Não refaz o blueprint, não refaz specs, não executa nada.
|
|
11
|
+
|
|
12
|
+
> Para **executar** o grafo, use a skill `skill-dag-runner` (rule) ou o
|
|
13
|
+
> comando `/run-dag`.
|
|
14
|
+
> Para **visualizar** o grafo, use o comando `/dag-viz`.
|
|
15
|
+
> Para **build + run num único passo**, use `skill-dag-runner` que cobre
|
|
16
|
+
> ambos.
|
|
17
|
+
|
|
18
|
+
## Quando usar
|
|
19
|
+
|
|
20
|
+
- O BLUEPRINT foi ajustado e o grafo precisa refletir
|
|
21
|
+
- Você quer experimentar uma decomposição diferente sem refazer o blueprint
|
|
22
|
+
- O `dare-dag.yaml` ficou inconsistente com `EXECUTION/task-*.md`
|
|
23
|
+
- Precisa adicionar/remover/reordenar tasks no grafo
|
|
24
|
+
- A complexidade ou as dependências de tasks mudaram
|
|
25
|
+
|
|
26
|
+
## Pré-requisitos
|
|
27
|
+
|
|
28
|
+
- `DARE/BLUEPRINT.md` existe e está aprovado
|
|
29
|
+
- (Opcional) `DARE/EXECUTION/task-*.md` específicas serão preservadas se não
|
|
30
|
+
forem mencionadas
|
|
31
|
+
|
|
32
|
+
## Procedimento
|
|
33
|
+
|
|
34
|
+
### 1. Ler `DARE/BLUEPRINT.md`
|
|
35
|
+
|
|
36
|
+
Obrigatório. Se faltar, peça ao usuário rodar `/generate-blueprint` antes.
|
|
37
|
+
|
|
38
|
+
### 2. Ler `DARE/dare-dag.yaml` atual (se existir)
|
|
39
|
+
|
|
40
|
+
Para preservar `id`s já em uso e não confundir o usuário com renomeações
|
|
41
|
+
desnecessárias.
|
|
42
|
+
|
|
43
|
+
### 3. Gerar o novo `dare-dag.yaml`
|
|
44
|
+
|
|
45
|
+
Schema canônico:
|
|
46
|
+
|
|
47
|
+
```yaml
|
|
48
|
+
title: "<Nome do Projeto> - Development Tasks"
|
|
49
|
+
version: "1.0.0"
|
|
50
|
+
|
|
51
|
+
limits:
|
|
52
|
+
parent_context_chars: 2000
|
|
53
|
+
task_output_chars: 4000
|
|
54
|
+
timeout_seconds: 600
|
|
55
|
+
|
|
56
|
+
models:
|
|
57
|
+
cursor: { HIGH: gpt-5.3-codex, MED: composer-2, LOW: auto-low }
|
|
58
|
+
claude: { HIGH: claude-sonnet-4-5, MED: claude-haiku-4, LOW: claude-haiku-4 }
|
|
59
|
+
antigravity: { HIGH: gemini-2.5-pro, MED: gemini-2.5-flash, LOW: gemini-2.5-flash }
|
|
60
|
+
|
|
61
|
+
tasks:
|
|
62
|
+
- id: task-001
|
|
63
|
+
title: "..."
|
|
64
|
+
depends_on: []
|
|
65
|
+
complexity: LOW
|
|
66
|
+
spec_file: EXECUTION/task-001.md
|
|
67
|
+
subtask_prompt: |
|
|
68
|
+
<self-contained>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Regras inegociáveis:**
|
|
72
|
+
|
|
73
|
+
- `id` em kebab-case e único
|
|
74
|
+
- `depends_on` mínimo — só quando filha *literalmente* precisa do output do pai
|
|
75
|
+
- `subtask_prompt` self-contained
|
|
76
|
+
- Pelo menos **2 tasks no rank 0** (paralelismo desde o início)
|
|
77
|
+
- Cadeia linear é antipattern — quebre dependências sempre que possível
|
|
78
|
+
- `complexity` honesta — não inflar nem deflar
|
|
79
|
+
|
|
80
|
+
### 4. ANTI-STUB CONTRACT (inegociável)
|
|
81
|
+
|
|
82
|
+
Tasks geradas com `subtask_prompt` ou spec genéricos forçam o agente a
|
|
83
|
+
inventar — e ele vai produzir mock, stub ou esqueleto. O comando
|
|
84
|
+
`/review-task` (ou `dare review <id>`) detecta isso e marca a task como
|
|
85
|
+
FAILED.
|
|
86
|
+
|
|
87
|
+
Cada `subtask_prompt` e `EXECUTION/task-<id>.md` deve atender este contrato:
|
|
88
|
+
|
|
89
|
+
**O `subtask_prompt` precisa ser auto-suficiente.** O subagente recebe
|
|
90
|
+
**apenas** o `subtask_prompt` + snippets de 2000 chars dos pais. Inclua:
|
|
91
|
+
|
|
92
|
+
- Caminho exato dos arquivos a criar/modificar
|
|
93
|
+
- Assinaturas exatas das funções/endpoints
|
|
94
|
+
- Schema de request/response com tipos
|
|
95
|
+
- Validações específicas (não "validar input" — `email: regex /^.../`)
|
|
96
|
+
- Edge cases enumerados
|
|
97
|
+
- Lista de testes esperados com nome + comportamento
|
|
98
|
+
|
|
99
|
+
**A `spec_file` precisa ter Definition of Done anti-stub:**
|
|
100
|
+
|
|
101
|
+
```markdown
|
|
102
|
+
## Definition of Done (ANTI-STUB)
|
|
103
|
+
|
|
104
|
+
- [ ] Nenhum TODO, FIXME, XXX ou HACK em arquivos modificados
|
|
105
|
+
- [ ] Nenhuma função vazia
|
|
106
|
+
- [ ] Nenhum `throw new Error('not implemented')`, `unimplemented!()`, `todo!()`, `NotImplementedError`
|
|
107
|
+
- [ ] Nenhum return null/undefined/{} como única statement de função pública
|
|
108
|
+
- [ ] Mocks SOMENTE em *.test.*, *.spec.*, __tests__/, tests/, spec/
|
|
109
|
+
- [ ] Todos os endpoints retornam dados reais (não hardcoded)
|
|
110
|
+
- [ ] Cada validação produz erro real com status code correto (testado)
|
|
111
|
+
- [ ] Cada edge case tem teste demonstrando comportamento
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Sinais de spec rasa (auto-validar antes de salvar):**
|
|
115
|
+
|
|
116
|
+
- ❌ "Implementar X" — sem assinatura, sem retorno, sem validações
|
|
117
|
+
- ❌ "Tratar erros adequadamente" — quais erros? como? que código?
|
|
118
|
+
- ❌ "Adicionar validações" — quais regras?
|
|
119
|
+
- ✅ "Implementar `POST /auth/login` retornando `{ token, refresh }` com 200 se válido, 401 se inválido, 429 se rate limit"
|
|
120
|
+
|
|
121
|
+
### 5. Validar consistência com `EXECUTION/task-*.md`
|
|
122
|
+
|
|
123
|
+
Se uma spec existe em `DARE/EXECUTION/task-<id>.md`:
|
|
124
|
+
- Mantenha o mesmo `id` no YAML
|
|
125
|
+
- Aponte `spec_file: EXECUTION/task-<id>.md`
|
|
126
|
+
- Se a `complexity` ou `depends_on` mudou, atualize **também** a spec e o `TASKS.md`
|
|
127
|
+
|
|
128
|
+
Se uma task nova entrou no YAML mas não tem spec:
|
|
129
|
+
- Crie a spec correspondente em `EXECUTION/task-<id>.md`
|
|
130
|
+
|
|
131
|
+
Se uma task saiu do YAML mas a spec ficou:
|
|
132
|
+
- Pergunte ao usuário: arquivar (mover para `EXECUTION/_archived/`) ou apagar?
|
|
133
|
+
|
|
134
|
+
### 6. Validar grafo
|
|
135
|
+
|
|
136
|
+
- Sem ciclos
|
|
137
|
+
- Todos os `depends_on` apontam para `id`s existentes
|
|
138
|
+
- `id`s únicos
|
|
139
|
+
- Pelo menos 2 tasks no rank 0
|
|
140
|
+
|
|
141
|
+
### 7. Atualizar `DARE/TASKS.md`
|
|
142
|
+
|
|
143
|
+
Reflita o novo grafo na tabela master.
|
|
144
|
+
|
|
145
|
+
### 8. Mensagem ao usuário
|
|
146
|
+
|
|
147
|
+
> `dare-dag.yaml` regenerado:
|
|
148
|
+
> - Total de tasks: N
|
|
149
|
+
> - Ranks paralelos: N
|
|
150
|
+
> - Adicionadas: [...]
|
|
151
|
+
> - Removidas: [...]
|
|
152
|
+
> - Modificadas: [...]
|
|
153
|
+
>
|
|
154
|
+
> Revise e aprove. Para executar: `/run-dag`.
|
|
155
|
+
|
|
156
|
+
## Quando NÃO usar
|
|
157
|
+
|
|
158
|
+
- Se você nunca rodou `/generate-blueprint` antes — use ele primeiro
|
|
159
|
+
- Se o BLUEPRINT está desatualizado — atualize o BLUEPRINT primeiro
|
|
160
|
+
- Se você só quer executar o grafo já aprovado — use `skill-dag-runner` ou `/run-dag`
|
|
161
|
+
- Se você quer build + run num único passo — `skill-dag-runner` cobre
|
|
162
|
+
|
|
163
|
+
## Referências
|
|
164
|
+
|
|
165
|
+
- Schema: `DARE/dare-dag.yaml`
|
|
166
|
+
- Specs: `DARE/EXECUTION/task-*.md`
|
|
167
|
+
- Status: `DARE/TASKS.md`
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Licença
|
|
172
|
+
|
|
173
|
+
Esta skill é parte do DARE Method e está sob licença MIT (D-001).
|