@dewtech/dare-cli 2.17.0 → 3.1.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 +140 -39
- 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.js +49 -49
- 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.js +38 -38
- package/dist/__tests__/validate.test.js +65 -65
- package/dist/bin/dare.js +30 -3
- package/dist/bin/dare.js.map +1 -1
- package/dist/commands/__tests__/init.integration.spec.d.ts +2 -0
- package/dist/commands/__tests__/init.integration.spec.d.ts.map +1 -0
- package/dist/commands/__tests__/init.integration.spec.js +134 -0
- package/dist/commands/__tests__/init.integration.spec.js.map +1 -0
- 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/init.d.ts.map +1 -1
- package/dist/commands/init.js +84 -1
- package/dist/commands/init.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 +104 -0
- package/dist/commands/new.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/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/mcp-server/bin/server.js +0 -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/stacks/__tests__/dna-emitter.spec.d.ts +2 -0
- package/dist/stacks/__tests__/dna-emitter.spec.d.ts.map +1 -0
- package/dist/stacks/__tests__/dna-emitter.spec.js +207 -0
- package/dist/stacks/__tests__/dna-emitter.spec.js.map +1 -0
- package/dist/stacks/__tests__/dna.spec.d.ts +2 -0
- package/dist/stacks/__tests__/dna.spec.d.ts.map +1 -0
- package/dist/stacks/__tests__/dna.spec.js +211 -0
- package/dist/stacks/__tests__/dna.spec.js.map +1 -0
- package/dist/stacks/__tests__/parity-rails.fixture.json +228 -0
- package/dist/stacks/__tests__/parity-rails.spec.d.ts +2 -0
- package/dist/stacks/__tests__/parity-rails.spec.d.ts.map +1 -0
- package/dist/stacks/__tests__/parity-rails.spec.js +99 -0
- package/dist/stacks/__tests__/parity-rails.spec.js.map +1 -0
- package/dist/stacks/__tests__/registry.spec.d.ts +2 -0
- package/dist/stacks/__tests__/registry.spec.d.ts.map +1 -0
- package/dist/stacks/__tests__/registry.spec.js +101 -0
- package/dist/stacks/__tests__/registry.spec.js.map +1 -0
- package/dist/stacks/__tests__/template-engine.spec.d.ts +2 -0
- package/dist/stacks/__tests__/template-engine.spec.d.ts.map +1 -0
- package/dist/stacks/__tests__/template-engine.spec.js +149 -0
- package/dist/stacks/__tests__/template-engine.spec.js.map +1 -0
- package/dist/stacks/dna-emitter.d.ts +45 -0
- package/dist/stacks/dna-emitter.d.ts.map +1 -0
- package/dist/stacks/dna-emitter.js +267 -0
- package/dist/stacks/dna-emitter.js.map +1 -0
- package/dist/stacks/go-gin/__tests__/scaffold.spec.d.ts +2 -0
- package/dist/stacks/go-gin/__tests__/scaffold.spec.d.ts.map +1 -0
- package/dist/stacks/go-gin/__tests__/scaffold.spec.js +221 -0
- package/dist/stacks/go-gin/__tests__/scaffold.spec.js.map +1 -0
- package/dist/stacks/go-gin/scaffold.d.ts +3 -0
- package/dist/stacks/go-gin/scaffold.d.ts.map +1 -0
- package/dist/stacks/go-gin/scaffold.js +105 -0
- package/dist/stacks/go-gin/scaffold.js.map +1 -0
- package/dist/stacks/go-stdlib/__tests__/scaffold.spec.d.ts +2 -0
- package/dist/stacks/go-stdlib/__tests__/scaffold.spec.d.ts.map +1 -0
- package/dist/stacks/go-stdlib/__tests__/scaffold.spec.js +215 -0
- package/dist/stacks/go-stdlib/__tests__/scaffold.spec.js.map +1 -0
- package/dist/stacks/go-stdlib/scaffold.d.ts +3 -0
- package/dist/stacks/go-stdlib/scaffold.d.ts.map +1 -0
- package/dist/stacks/go-stdlib/scaffold.js +106 -0
- package/dist/stacks/go-stdlib/scaffold.js.map +1 -0
- package/dist/stacks/mcp-go/__tests__/scaffold.spec.d.ts +2 -0
- package/dist/stacks/mcp-go/__tests__/scaffold.spec.d.ts.map +1 -0
- package/dist/stacks/mcp-go/__tests__/scaffold.spec.js +203 -0
- package/dist/stacks/mcp-go/__tests__/scaffold.spec.js.map +1 -0
- package/dist/stacks/mcp-go/scaffold.d.ts +3 -0
- package/dist/stacks/mcp-go/scaffold.d.ts.map +1 -0
- package/dist/stacks/mcp-go/scaffold.js +94 -0
- package/dist/stacks/mcp-go/scaffold.js.map +1 -0
- package/dist/stacks/mcp-node-ts/__tests__/scaffold.spec.d.ts +2 -0
- package/dist/stacks/mcp-node-ts/__tests__/scaffold.spec.d.ts.map +1 -0
- package/dist/stacks/mcp-node-ts/__tests__/scaffold.spec.js +236 -0
- package/dist/stacks/mcp-node-ts/__tests__/scaffold.spec.js.map +1 -0
- package/dist/stacks/mcp-node-ts/scaffold.d.ts +3 -0
- package/dist/stacks/mcp-node-ts/scaffold.d.ts.map +1 -0
- package/dist/stacks/mcp-node-ts/scaffold.js +95 -0
- package/dist/stacks/mcp-node-ts/scaffold.js.map +1 -0
- package/dist/stacks/mcp-python/__tests__/scaffold.spec.d.ts +2 -0
- package/dist/stacks/mcp-python/__tests__/scaffold.spec.d.ts.map +1 -0
- package/dist/stacks/mcp-python/__tests__/scaffold.spec.js +228 -0
- package/dist/stacks/mcp-python/__tests__/scaffold.spec.js.map +1 -0
- package/dist/stacks/mcp-python/scaffold.d.ts +3 -0
- package/dist/stacks/mcp-python/scaffold.d.ts.map +1 -0
- package/dist/stacks/mcp-python/scaffold.js +98 -0
- package/dist/stacks/mcp-python/scaffold.js.map +1 -0
- package/dist/stacks/mcp-rust/__tests__/scaffold.spec.d.ts +2 -0
- package/dist/stacks/mcp-rust/__tests__/scaffold.spec.d.ts.map +1 -0
- package/dist/stacks/mcp-rust/__tests__/scaffold.spec.js +213 -0
- package/dist/stacks/mcp-rust/__tests__/scaffold.spec.js.map +1 -0
- package/dist/stacks/mcp-rust/scaffold.d.ts +3 -0
- package/dist/stacks/mcp-rust/scaffold.d.ts.map +1 -0
- package/dist/stacks/mcp-rust/scaffold.js +98 -0
- package/dist/stacks/mcp-rust/scaffold.js.map +1 -0
- package/dist/stacks/node-nestjs/__tests__/scaffold.spec.d.ts +2 -0
- package/dist/stacks/node-nestjs/__tests__/scaffold.spec.d.ts.map +1 -0
- package/dist/stacks/node-nestjs/__tests__/scaffold.spec.js +172 -0
- package/dist/stacks/node-nestjs/__tests__/scaffold.spec.js.map +1 -0
- package/dist/stacks/node-nestjs/scaffold.d.ts +3 -0
- package/dist/stacks/node-nestjs/scaffold.d.ts.map +1 -0
- package/dist/stacks/node-nestjs/scaffold.js +117 -0
- package/dist/stacks/node-nestjs/scaffold.js.map +1 -0
- package/dist/stacks/php-laravel/__tests__/scaffold.spec.d.ts +2 -0
- package/dist/stacks/php-laravel/__tests__/scaffold.spec.d.ts.map +1 -0
- package/dist/stacks/php-laravel/__tests__/scaffold.spec.js +205 -0
- package/dist/stacks/php-laravel/__tests__/scaffold.spec.js.map +1 -0
- package/dist/stacks/php-laravel/scaffold.d.ts +3 -0
- package/dist/stacks/php-laravel/scaffold.d.ts.map +1 -0
- package/dist/stacks/php-laravel/scaffold.js +109 -0
- package/dist/stacks/php-laravel/scaffold.js.map +1 -0
- package/dist/stacks/python-fastapi/__tests__/scaffold.spec.d.ts +2 -0
- package/dist/stacks/python-fastapi/__tests__/scaffold.spec.d.ts.map +1 -0
- package/dist/stacks/python-fastapi/__tests__/scaffold.spec.js +168 -0
- package/dist/stacks/python-fastapi/__tests__/scaffold.spec.js.map +1 -0
- package/dist/stacks/python-fastapi/scaffold.d.ts +3 -0
- package/dist/stacks/python-fastapi/scaffold.d.ts.map +1 -0
- package/dist/stacks/python-fastapi/scaffold.js +108 -0
- package/dist/stacks/python-fastapi/scaffold.js.map +1 -0
- package/dist/stacks/registry.d.ts +38 -0
- package/dist/stacks/registry.d.ts.map +1 -0
- package/dist/stacks/registry.js +153 -0
- package/dist/stacks/registry.js.map +1 -0
- package/dist/stacks/ruby-rails-8/__tests__/scaffold.spec.d.ts +6 -0
- package/dist/stacks/ruby-rails-8/__tests__/scaffold.spec.d.ts.map +1 -0
- package/dist/stacks/ruby-rails-8/__tests__/scaffold.spec.js +604 -0
- package/dist/stacks/ruby-rails-8/__tests__/scaffold.spec.js.map +1 -0
- package/dist/stacks/ruby-rails-8/scaffold.d.ts +91 -0
- package/dist/stacks/ruby-rails-8/scaffold.d.ts.map +1 -0
- package/dist/stacks/ruby-rails-8/scaffold.js +410 -0
- package/dist/stacks/ruby-rails-8/scaffold.js.map +1 -0
- package/dist/stacks/rust-axum/__tests__/scaffold.spec.d.ts +2 -0
- package/dist/stacks/rust-axum/__tests__/scaffold.spec.d.ts.map +1 -0
- package/dist/stacks/rust-axum/__tests__/scaffold.spec.js +203 -0
- package/dist/stacks/rust-axum/__tests__/scaffold.spec.js.map +1 -0
- package/dist/stacks/rust-axum/scaffold.d.ts +3 -0
- package/dist/stacks/rust-axum/scaffold.d.ts.map +1 -0
- package/dist/stacks/rust-axum/scaffold.js +105 -0
- package/dist/stacks/rust-axum/scaffold.js.map +1 -0
- package/dist/stacks/template-engine.d.ts +38 -0
- package/dist/stacks/template-engine.d.ts.map +1 -0
- package/dist/stacks/template-engine.js +134 -0
- package/dist/stacks/template-engine.js.map +1 -0
- package/dist/stacks/types.d.ts +69 -0
- package/dist/stacks/types.d.ts.map +1 -0
- package/dist/stacks/types.js +29 -0
- package/dist/stacks/types.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/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 +1 -1
- package/dist/utils/project-generator.d.ts.map +1 -1
- package/dist/utils/project-generator.js +268 -259
- 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.d.ts +3 -2
- package/dist/utils/stack-bootstrap.d.ts.map +1 -1
- package/dist/utils/stack-bootstrap.js +417 -387
- package/dist/utils/stack-bootstrap.js.map +1 -1
- package/package.json +91 -82
- package/templates/DARE-dag-example.yaml +280 -280
- package/templates/UPDATE-MANIFEST.json +48 -48
- 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-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 -114
- package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -0
- package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
- 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 -265
- 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 -141
- package/templates/ide/claude/.claude/commands/dare-ax.md +131 -0
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
- package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -0
- 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 -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 -145
- package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -0
- 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-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 -141
- package/templates/ide/cursor/.cursor/commands/dag-viz.md +139 -0
- package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +86 -86
- package/templates/ide/cursor/.cursor/commands/generate-design.md +35 -35
- package/templates/ide/cursor/.cursor/commands/generate-tasks.md +184 -184
- package/templates/ide/cursor/.cursor/commands/refine-task.md +107 -107
- package/templates/ide/cursor/.cursor/commands/review-task.md +91 -91
- 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 -141
- package/templates/shared/docker-compose.yml +41 -41
- package/templates/stacks/go-gin/.dare/skills.yml +11 -0
- package/templates/stacks/go-gin/.env.example +24 -0
- package/templates/stacks/go-gin/.github/workflows/dare-ci.yml +42 -0
- package/templates/stacks/go-gin/README.md.tpl +38 -0
- package/templates/stacks/go-gin/cmd/server/main.go.tpl +78 -0
- package/templates/stacks/go-gin/db/migrations/0001_create_users.down.sql +2 -0
- package/templates/stacks/go-gin/db/migrations/0001_create_users.up.sql +12 -0
- package/templates/stacks/go-gin/db/queries/users.sql +23 -0
- package/templates/stacks/go-gin/gitignore +7 -0
- package/templates/stacks/go-gin/go.mod.tpl +17 -0
- package/templates/stacks/go-gin/internal/config/config.go +41 -0
- package/templates/stacks/go-gin/internal/db/postgres.go.tpl +25 -0
- package/templates/stacks/go-gin/internal/handler/auth_handler.go.tpl +72 -0
- package/templates/stacks/go-gin/internal/handler/users_handler.go.tpl +72 -0
- package/templates/stacks/go-gin/internal/handler/ws_handler.go +37 -0
- package/templates/stacks/go-gin/internal/llm/dummy.go +14 -0
- package/templates/stacks/go-gin/internal/llm/provider.go +8 -0
- package/templates/stacks/go-gin/internal/middleware/jwt.go.tpl +58 -0
- package/templates/stacks/go-gin/internal/middleware/rate_limit.go +55 -0
- package/templates/stacks/go-gin/internal/model/user.go +17 -0
- package/templates/stacks/go-gin/internal/repository/users_repository.go.tpl +79 -0
- package/templates/stacks/go-gin/internal/service/auth_service.go.tpl +55 -0
- package/templates/stacks/go-gin/internal/service/users_service.go.tpl +53 -0
- package/templates/stacks/go-gin/llms.txt.tpl +54 -0
- package/templates/stacks/go-gin/openapi.json.tpl +46 -0
- package/templates/stacks/go-gin/sqlc.yaml +14 -0
- package/templates/stacks/go-gin/tests/smoke_test.go.tpl +22 -0
- package/templates/stacks/go-stdlib/.dare/skills.yml +11 -0
- package/templates/stacks/go-stdlib/.env.example +24 -0
- package/templates/stacks/go-stdlib/.github/workflows/dare-ci.yml +42 -0
- package/templates/stacks/go-stdlib/README.md.tpl +41 -0
- package/templates/stacks/go-stdlib/cmd/server/main.go.tpl +82 -0
- package/templates/stacks/go-stdlib/db/migrations/0001_create_users.down.sql +2 -0
- package/templates/stacks/go-stdlib/db/migrations/0001_create_users.up.sql +12 -0
- package/templates/stacks/go-stdlib/db/queries/users.sql +23 -0
- package/templates/stacks/go-stdlib/gitignore +6 -0
- package/templates/stacks/go-stdlib/go.mod.tpl +15 -0
- package/templates/stacks/go-stdlib/internal/config/config.go +41 -0
- package/templates/stacks/go-stdlib/internal/db/postgres.go.tpl +24 -0
- package/templates/stacks/go-stdlib/internal/handler/auth_handler.go.tpl +71 -0
- package/templates/stacks/go-stdlib/internal/handler/users_handler.go.tpl +84 -0
- package/templates/stacks/go-stdlib/internal/handler/ws_handler.go +36 -0
- package/templates/stacks/go-stdlib/internal/httpx/json.go +32 -0
- package/templates/stacks/go-stdlib/internal/llm/dummy.go +14 -0
- package/templates/stacks/go-stdlib/internal/llm/provider.go +8 -0
- package/templates/stacks/go-stdlib/internal/middleware/chain.go +21 -0
- package/templates/stacks/go-stdlib/internal/middleware/cors.go +27 -0
- package/templates/stacks/go-stdlib/internal/middleware/jwt.go.tpl +51 -0
- package/templates/stacks/go-stdlib/internal/middleware/rate_limit.go +81 -0
- package/templates/stacks/go-stdlib/internal/model/user.go +17 -0
- package/templates/stacks/go-stdlib/internal/repository/users_repository.go.tpl +75 -0
- package/templates/stacks/go-stdlib/internal/service/auth_service.go.tpl +55 -0
- package/templates/stacks/go-stdlib/internal/service/users_service.go.tpl +53 -0
- package/templates/stacks/go-stdlib/llms.txt.tpl +60 -0
- package/templates/stacks/go-stdlib/openapi.json.tpl +46 -0
- package/templates/stacks/go-stdlib/sqlc.yaml +14 -0
- package/templates/stacks/go-stdlib/tests/smoke_test.go.tpl +45 -0
- package/templates/stacks/mcp-go/.dare/skills.yml +8 -0
- package/templates/stacks/mcp-go/.env.example +14 -0
- package/templates/stacks/mcp-go/.github/workflows/dare-ci.yml +42 -0
- package/templates/stacks/mcp-go/README.md.tpl +50 -0
- package/templates/stacks/mcp-go/cmd/server/main.go.tpl +62 -0
- package/templates/stacks/mcp-go/gitignore +6 -0
- package/templates/stacks/mcp-go/go.mod.tpl +9 -0
- package/templates/stacks/mcp-go/internal/prompts/summarize.go +9 -0
- package/templates/stacks/mcp-go/internal/server/server.go.tpl +80 -0
- package/templates/stacks/mcp-go/internal/tools/echo.go +15 -0
- package/templates/stacks/mcp-go/internal/transports/http.go.tpl +21 -0
- package/templates/stacks/mcp-go/internal/transports/sse.go.tpl +17 -0
- package/templates/stacks/mcp-go/internal/transports/stdio.go.tpl +14 -0
- package/templates/stacks/mcp-go/llms.txt.tpl +60 -0
- package/templates/stacks/mcp-go/openapi.json.tpl +31 -0
- package/templates/stacks/mcp-go/tests/echo_test.go.tpl +37 -0
- package/templates/stacks/mcp-node-ts/.dare/skills.yml +8 -0
- package/templates/stacks/mcp-node-ts/.env.example +16 -0
- package/templates/stacks/mcp-node-ts/.github/workflows/dare-ci.yml +54 -0
- package/templates/stacks/mcp-node-ts/README.md.hbs +49 -0
- package/templates/stacks/mcp-node-ts/gitignore +7 -0
- package/templates/stacks/mcp-node-ts/llms.txt.hbs +61 -0
- package/templates/stacks/mcp-node-ts/openapi.json.hbs +39 -0
- package/templates/stacks/mcp-node-ts/package.json.hbs +35 -0
- package/templates/stacks/mcp-node-ts/src/cli.ts.hbs +71 -0
- package/templates/stacks/mcp-node-ts/src/prompts/index.ts +36 -0
- package/templates/stacks/mcp-node-ts/src/server.ts.hbs +45 -0
- package/templates/stacks/mcp-node-ts/src/tools/echo.ts +23 -0
- package/templates/stacks/mcp-node-ts/src/tools/index.ts +18 -0
- package/templates/stacks/mcp-node-ts/src/transports/http.ts +68 -0
- package/templates/stacks/mcp-node-ts/src/transports/sse.ts +58 -0
- package/templates/stacks/mcp-node-ts/src/transports/stdio.ts +5 -0
- package/templates/stacks/mcp-node-ts/tests/echo.test.ts +50 -0
- package/templates/stacks/mcp-node-ts/tsconfig.json +17 -0
- package/templates/stacks/mcp-python/.dare/skills.yml +8 -0
- package/templates/stacks/mcp-python/.env.example +14 -0
- package/templates/stacks/mcp-python/.github/workflows/dare-ci.yml +42 -0
- package/templates/stacks/mcp-python/README.md.j2 +49 -0
- package/templates/stacks/mcp-python/gitignore +12 -0
- package/templates/stacks/mcp-python/llms.txt.j2 +56 -0
- package/templates/stacks/mcp-python/openapi.json.j2 +33 -0
- package/templates/stacks/mcp-python/pyproject.toml.j2 +37 -0
- package/templates/stacks/mcp-python/src/__init__.py +0 -0
- package/templates/stacks/mcp-python/src/cli.py.j2 +68 -0
- package/templates/stacks/mcp-python/src/prompts/__init__.py +0 -0
- package/templates/stacks/mcp-python/src/prompts/summarize.py +10 -0
- package/templates/stacks/mcp-python/src/server.py.j2 +28 -0
- package/templates/stacks/mcp-python/src/tools/__init__.py +0 -0
- package/templates/stacks/mcp-python/src/tools/echo.py +12 -0
- package/templates/stacks/mcp-python/src/transports/__init__.py +0 -0
- package/templates/stacks/mcp-python/src/transports/http.py +12 -0
- package/templates/stacks/mcp-python/src/transports/sse.py +13 -0
- package/templates/stacks/mcp-python/src/transports/stdio.py +6 -0
- package/templates/stacks/mcp-python/tests/__init__.py +0 -0
- package/templates/stacks/mcp-python/tests/test_echo.py +28 -0
- package/templates/stacks/mcp-rust/.dare/skills.yml +8 -0
- package/templates/stacks/mcp-rust/.env.example +14 -0
- package/templates/stacks/mcp-rust/.github/workflows/dare-ci.yml +38 -0
- package/templates/stacks/mcp-rust/Cargo.toml.tera +35 -0
- package/templates/stacks/mcp-rust/README.md.tera +50 -0
- package/templates/stacks/mcp-rust/gitignore +5 -0
- package/templates/stacks/mcp-rust/llms.txt.tera +60 -0
- package/templates/stacks/mcp-rust/openapi.json.tera +31 -0
- package/templates/stacks/mcp-rust/src/cli.rs.tera +33 -0
- package/templates/stacks/mcp-rust/src/lib.rs +6 -0
- package/templates/stacks/mcp-rust/src/main.rs.tera +30 -0
- package/templates/stacks/mcp-rust/src/prompts/mod.rs +1 -0
- package/templates/stacks/mcp-rust/src/prompts/summarize.rs +5 -0
- package/templates/stacks/mcp-rust/src/server.rs.tera +38 -0
- package/templates/stacks/mcp-rust/src/tools/echo.rs +18 -0
- package/templates/stacks/mcp-rust/src/tools/mod.rs +22 -0
- package/templates/stacks/mcp-rust/src/transports/http.rs +27 -0
- package/templates/stacks/mcp-rust/src/transports/mod.rs +3 -0
- package/templates/stacks/mcp-rust/src/transports/sse.rs +33 -0
- package/templates/stacks/mcp-rust/src/transports/stdio.rs +14 -0
- package/templates/stacks/mcp-rust/tests/echo_test.rs.tera +27 -0
- package/templates/stacks/node-nestjs/.dare/skills.yml +11 -0
- package/templates/stacks/node-nestjs/.env.example +21 -0
- package/templates/stacks/node-nestjs/.github/workflows/dare-ci.yml +54 -0
- package/templates/stacks/node-nestjs/README.md.hbs +35 -0
- package/templates/stacks/node-nestjs/gitignore +7 -0
- package/templates/stacks/node-nestjs/llms.txt.hbs +47 -0
- package/templates/stacks/node-nestjs/nest-cli.json +16 -0
- package/templates/stacks/node-nestjs/openapi.json.hbs +75 -0
- package/templates/stacks/node-nestjs/package.json.hbs +57 -0
- package/templates/stacks/node-nestjs/prisma/schema.prisma +25 -0
- package/templates/stacks/node-nestjs/prisma/seed.ts.hbs +25 -0
- package/templates/stacks/node-nestjs/src/app.module.ts +39 -0
- package/templates/stacks/node-nestjs/src/auth/auth.controller.ts +29 -0
- package/templates/stacks/node-nestjs/src/auth/auth.module.ts +25 -0
- package/templates/stacks/node-nestjs/src/auth/auth.service.ts +36 -0
- package/templates/stacks/node-nestjs/src/auth/dto/login-response.dto.ts +9 -0
- package/templates/stacks/node-nestjs/src/auth/dto/login.dto.ts +17 -0
- package/templates/stacks/node-nestjs/src/auth/jwt.strategy.ts +25 -0
- package/templates/stacks/node-nestjs/src/common/filters/problem-details.filter.ts +38 -0
- package/templates/stacks/node-nestjs/src/common/interceptors/json-response.interceptor.ts +13 -0
- package/templates/stacks/node-nestjs/src/main.ts.hbs +44 -0
- package/templates/stacks/node-nestjs/src/prisma/prisma.module.ts +9 -0
- package/templates/stacks/node-nestjs/src/prisma/prisma.service.ts +9 -0
- package/templates/stacks/node-nestjs/src/users/dto/create-user.dto.ts +22 -0
- package/templates/stacks/node-nestjs/src/users/dto/user.dto.ts +15 -0
- package/templates/stacks/node-nestjs/src/users/users.controller.ts +41 -0
- package/templates/stacks/node-nestjs/src/users/users.module.ts +11 -0
- package/templates/stacks/node-nestjs/src/users/users.repository.ts +38 -0
- package/templates/stacks/node-nestjs/src/users/users.service.ts +38 -0
- package/templates/stacks/node-nestjs/tsconfig.build.json +4 -0
- package/templates/stacks/node-nestjs/tsconfig.json +28 -0
- package/templates/stacks/php-laravel/.dare/skills.yml +11 -0
- package/templates/stacks/php-laravel/.env.example +41 -0
- package/templates/stacks/php-laravel/.github/workflows/dare-ci.yml +43 -0
- package/templates/stacks/php-laravel/README.md.hbs +36 -0
- package/templates/stacks/php-laravel/app/Http/Controllers/Api/AuthController.php +36 -0
- package/templates/stacks/php-laravel/app/Http/Controllers/Api/UsersController.php +33 -0
- package/templates/stacks/php-laravel/app/Http/Requests/CreateUserRequest.php +26 -0
- package/templates/stacks/php-laravel/app/Http/Requests/LoginRequest.php +34 -0
- package/templates/stacks/php-laravel/app/Llm/Contracts/LlmProvider.php +12 -0
- package/templates/stacks/php-laravel/app/Llm/Providers/DummyProvider.php +13 -0
- package/templates/stacks/php-laravel/app/Llm/Providers/OpenAiProvider.php +33 -0
- package/templates/stacks/php-laravel/app/Models/User.php +44 -0
- package/templates/stacks/php-laravel/app/Repositories/UsersRepository.php +32 -0
- package/templates/stacks/php-laravel/app/Services/AuthService.php +37 -0
- package/templates/stacks/php-laravel/app/Services/UsersService.php +57 -0
- package/templates/stacks/php-laravel/artisan +12 -0
- package/templates/stacks/php-laravel/bootstrap/app.php +29 -0
- package/templates/stacks/php-laravel/bootstrap/providers.php +5 -0
- package/templates/stacks/php-laravel/composer.json.hbs +58 -0
- package/templates/stacks/php-laravel/config/l5-swagger.php +41 -0
- package/templates/stacks/php-laravel/config/reverb.php +34 -0
- package/templates/stacks/php-laravel/config/sanctum.php +15 -0
- package/templates/stacks/php-laravel/database/migrations/2026_06_01_000001_create_users_table.php +27 -0
- package/templates/stacks/php-laravel/database/seeders/DatabaseSeeder.php +21 -0
- package/templates/stacks/php-laravel/gitignore +23 -0
- package/templates/stacks/php-laravel/llms.txt.hbs +53 -0
- package/templates/stacks/php-laravel/openapi.json.hbs +43 -0
- package/templates/stacks/php-laravel/phpstan.neon +9 -0
- package/templates/stacks/php-laravel/routes/api.php +13 -0
- package/templates/stacks/php-laravel/routes/channels.php +7 -0
- package/templates/stacks/php-laravel/tests/Feature/AuthTest.php +35 -0
- package/templates/stacks/php-laravel/tests/Feature/UsersTest.php +30 -0
- package/templates/stacks/php-laravel/tests/Pest.php +5 -0
- package/templates/stacks/python-fastapi/.dare/skills.yml +11 -0
- package/templates/stacks/python-fastapi/.env.example +21 -0
- package/templates/stacks/python-fastapi/.github/workflows/dare-ci.yml +43 -0
- package/templates/stacks/python-fastapi/README.md.j2 +35 -0
- package/templates/stacks/python-fastapi/alembic/env.py +46 -0
- package/templates/stacks/python-fastapi/alembic/script.py.mako +26 -0
- package/templates/stacks/python-fastapi/alembic/versions/0001_create_users.py.j2 +37 -0
- package/templates/stacks/python-fastapi/alembic.ini.j2 +39 -0
- package/templates/stacks/python-fastapi/app/__init__.py +0 -0
- package/templates/stacks/python-fastapi/app/core/__init__.py +0 -0
- package/templates/stacks/python-fastapi/app/core/config.py +24 -0
- package/templates/stacks/python-fastapi/app/core/security.py +34 -0
- package/templates/stacks/python-fastapi/app/db/__init__.py +0 -0
- package/templates/stacks/python-fastapi/app/db/session.py +22 -0
- package/templates/stacks/python-fastapi/app/main.py.j2 +36 -0
- package/templates/stacks/python-fastapi/app/models/__init__.py +3 -0
- package/templates/stacks/python-fastapi/app/models/user.py +30 -0
- package/templates/stacks/python-fastapi/app/repositories/__init__.py +0 -0
- package/templates/stacks/python-fastapi/app/repositories/user_repository.py +34 -0
- package/templates/stacks/python-fastapi/app/routers/__init__.py +0 -0
- package/templates/stacks/python-fastapi/app/routers/auth.py +37 -0
- package/templates/stacks/python-fastapi/app/routers/users.py +46 -0
- package/templates/stacks/python-fastapi/app/schemas/__init__.py +0 -0
- package/templates/stacks/python-fastapi/app/schemas/user.py +56 -0
- package/templates/stacks/python-fastapi/app/services/__init__.py +0 -0
- package/templates/stacks/python-fastapi/app/services/auth_service.py +22 -0
- package/templates/stacks/python-fastapi/app/services/user_service.py +31 -0
- package/templates/stacks/python-fastapi/gitignore +12 -0
- package/templates/stacks/python-fastapi/llms.txt.j2 +53 -0
- package/templates/stacks/python-fastapi/openapi.json.j2 +43 -0
- package/templates/stacks/python-fastapi/pyproject.toml.j2 +45 -0
- package/templates/stacks/python-fastapi/tests/__init__.py +0 -0
- package/templates/stacks/python-fastapi/tests/test_auth.py +22 -0
- package/templates/stacks/ruby-rails-8/.dare/skills.yml +50 -0
- package/templates/stacks/ruby-rails-8/.env.example +20 -0
- package/templates/stacks/ruby-rails-8/.github/workflows/dare-ci.yml +112 -0
- package/templates/stacks/ruby-rails-8/Gemfile.erb +61 -0
- package/templates/stacks/ruby-rails-8/app/channels/application_cable/channel.rb +11 -0
- package/templates/stacks/ruby-rails-8/app/channels/application_cable/connection.rb +34 -0
- package/templates/stacks/ruby-rails-8/app/channels/dare_updates_channel.rb +18 -0
- package/templates/stacks/ruby-rails-8/app/channels/user_updates_channel.rb +23 -0
- package/templates/stacks/ruby-rails-8/app/controllers/application_controller.rb +44 -0
- package/templates/stacks/ruby-rails-8/app/controllers/concerns/problem_details.rb +93 -0
- package/templates/stacks/ruby-rails-8/app/handlers/summarize_handler.rb +33 -0
- package/templates/stacks/ruby-rails-8/app/handlers/users_handler.rb +68 -0
- package/templates/stacks/ruby-rails-8/app/llm/cache/llm_cache.rb +44 -0
- package/templates/stacks/ruby-rails-8/app/llm/prompts/prompt_loader.rb +54 -0
- package/templates/stacks/ruby-rails-8/app/llm/prompts/summarize_v1.jinja2 +12 -0
- package/templates/stacks/ruby-rails-8/app/llm/providers/dummy_provider.rb +35 -0
- package/templates/stacks/ruby-rails-8/app/llm/providers/llm_provider.rb +67 -0
- package/templates/stacks/ruby-rails-8/app/llm/providers/openai_provider.rb +62 -0
- package/templates/stacks/ruby-rails-8/app/llm/rate_limit/token_bucket.rb +82 -0
- package/templates/stacks/ruby-rails-8/app/llm/validators/summarize_output_schema.json +21 -0
- package/templates/stacks/ruby-rails-8/app/llm/validators/validator.rb +52 -0
- package/templates/stacks/ruby-rails-8/app/models/user.rb +36 -0
- package/templates/stacks/ruby-rails-8/app/presenters/user_presenter.rb +48 -0
- package/templates/stacks/ruby-rails-8/app/repositories/document_repository.rb +57 -0
- package/templates/stacks/ruby-rails-8/app/repositories/user_repository.rb +73 -0
- package/templates/stacks/ruby-rails-8/app/services/create_user_service.rb +67 -0
- package/templates/stacks/ruby-rails-8/app/services/realtime_service.rb +53 -0
- package/templates/stacks/ruby-rails-8/app/services/summarize_document_service.rb +57 -0
- package/templates/stacks/ruby-rails-8/config/dare.yml +42 -0
- package/templates/stacks/ruby-rails-8/config/initializers/dare.rb +31 -0
- package/templates/stacks/ruby-rails-8/config/initializers/rack_attack.rb +64 -0
- package/templates/stacks/ruby-rails-8/config/initializers/rswag_api.rb +12 -0
- package/templates/stacks/ruby-rails-8/lib/tasks/dare.rake +159 -0
- package/templates/stacks/ruby-rails-8/llms.txt.erb +69 -0
- package/templates/stacks/ruby-rails-8/spec/api/summarize_spec.rb +56 -0
- package/templates/stacks/ruby-rails-8/spec/api/users_spec.rb +72 -0
- package/templates/stacks/ruby-rails-8/spec/channels/dare_updates_channel_spec.rb +61 -0
- package/templates/stacks/ruby-rails-8/spec/channels/user_updates_channel_spec.rb +56 -0
- package/templates/stacks/ruby-rails-8/spec/factories/users.rb +27 -0
- package/templates/stacks/ruby-rails-8/spec/handlers/users_handler_spec.rb +88 -0
- package/templates/stacks/ruby-rails-8/spec/rails_helper.rb +31 -0
- package/templates/stacks/ruby-rails-8/spec/services/create_user_service_spec.rb +88 -0
- package/templates/stacks/ruby-rails-8/spec/services/summarize_document_service_spec.rb +142 -0
- package/templates/stacks/ruby-rails-8/spec/swagger_helper.rb +73 -0
- package/templates/stacks/rust-axum/.dare/skills.yml +11 -0
- package/templates/stacks/rust-axum/.env.example +26 -0
- package/templates/stacks/rust-axum/.github/workflows/dare-ci.yml +40 -0
- package/templates/stacks/rust-axum/Cargo.toml.tera +53 -0
- package/templates/stacks/rust-axum/README.md.tera +37 -0
- package/templates/stacks/rust-axum/gitignore +5 -0
- package/templates/stacks/rust-axum/llms.txt.tera +54 -0
- package/templates/stacks/rust-axum/migrations/0001_create_users.sql +13 -0
- package/templates/stacks/rust-axum/openapi.json.tera +46 -0
- package/templates/stacks/rust-axum/src/config.rs +45 -0
- package/templates/stacks/rust-axum/src/errors.rs +48 -0
- package/templates/stacks/rust-axum/src/handlers/auth.rs +48 -0
- package/templates/stacks/rust-axum/src/handlers/mod.rs +3 -0
- package/templates/stacks/rust-axum/src/handlers/users.rs +81 -0
- package/templates/stacks/rust-axum/src/handlers/ws.rs +24 -0
- package/templates/stacks/rust-axum/src/lib.rs +19 -0
- package/templates/stacks/rust-axum/src/llm/mod.rs +1 -0
- package/templates/stacks/rust-axum/src/llm/provider.rs +48 -0
- package/templates/stacks/rust-axum/src/main.rs.tera +64 -0
- package/templates/stacks/rust-axum/src/middleware/auth.rs +20 -0
- package/templates/stacks/rust-axum/src/middleware/mod.rs +2 -0
- package/templates/stacks/rust-axum/src/middleware/rate_limit.rs +27 -0
- package/templates/stacks/rust-axum/src/models/mod.rs +1 -0
- package/templates/stacks/rust-axum/src/models/user.rs +13 -0
- package/templates/stacks/rust-axum/src/repositories/mod.rs +1 -0
- package/templates/stacks/rust-axum/src/repositories/user_repository.rs +62 -0
- package/templates/stacks/rust-axum/src/services/auth_service.rs +50 -0
- package/templates/stacks/rust-axum/src/services/mod.rs +2 -0
- package/templates/stacks/rust-axum/src/services/user_service.rs +53 -0
- package/templates/stacks/rust-axum/tests/integration_test.rs.tera +13 -0
- package/LICENSE +0 -21
- 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
|
@@ -117,6 +117,16 @@ export async function generateProjectStructure(config) {
|
|
|
117
117
|
// in `runStackBootstrap`). The legacy fake templates are only used when
|
|
118
118
|
// bootstrap is explicitly skipped (tests / CI without toolchains) or for
|
|
119
119
|
// the MCP server, which has no widely-adopted scaffold to defer to.
|
|
120
|
+
//
|
|
121
|
+
// v3.1: when bootstrap runs (the normal path), every stack — backend, MCP,
|
|
122
|
+
// and rails — is fully produced by its internalized registry scaffolder in
|
|
123
|
+
// `runStackBootstrap`. We must NOT overlay the legacy inline templates on
|
|
124
|
+
// top (that clobbered the scaffolder's package.json/server.ts in v3.0.x).
|
|
125
|
+
//
|
|
126
|
+
// The legacy generators remain only as the `skipBootstrap` fallback, used by
|
|
127
|
+
// tests/CI that intentionally skip the scaffold step. Frontend stacks still
|
|
128
|
+
// use their own bootstrap (vite/leptos) and the legacy frontend template
|
|
129
|
+
// fallback when skipped.
|
|
120
130
|
if (config.skipBootstrap) {
|
|
121
131
|
if (structure === 'mcp-server') {
|
|
122
132
|
await generateMcpTemplate(outputDir, config);
|
|
@@ -132,12 +142,6 @@ export async function generateProjectStructure(config) {
|
|
|
132
142
|
}
|
|
133
143
|
}
|
|
134
144
|
}
|
|
135
|
-
else if (structure === 'mcp-server') {
|
|
136
|
-
// Even with bootstrap, the MCP server still needs the DARE-flavored
|
|
137
|
-
// starter (server.ts / main.py with the right transport wired up). The
|
|
138
|
-
// bootstrap step only ran `npm init` / `python -m venv`, no source code.
|
|
139
|
-
await generateMcpTemplate(outputDir, config);
|
|
140
|
-
}
|
|
141
145
|
}
|
|
142
146
|
export async function installDareToExistingProject(projectDir, config) {
|
|
143
147
|
const outputDir = projectDir;
|
|
@@ -191,94 +195,94 @@ async function generateMcpTemplate(dir, config) {
|
|
|
191
195
|
const transportSetup = mcpTransport === 'stdio'
|
|
192
196
|
? `const transport = new StdioServerTransport();\nawait server.connect(transport);`
|
|
193
197
|
: `const app = express();\napp.get('/sse', async (req, res) => {\n const transport = new SSEServerTransport('/messages', res);\n await server.connect(transport);\n});\napp.post('/messages', express.json(), (req, res) => { /* message handler */ });\napp.listen(3000, () => console.error('MCP SSE server running on :3000'));`;
|
|
194
|
-
const resourceSection = hasResources ? `
|
|
195
|
-
import {
|
|
196
|
-
ListResourcesRequestSchema,
|
|
197
|
-
ReadResourceRequestSchema,
|
|
198
|
-
} from '@modelcontextprotocol/sdk/types.js';
|
|
199
|
-
|
|
200
|
-
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
201
|
-
resources: [
|
|
202
|
-
{
|
|
203
|
-
uri: 'resource://example',
|
|
204
|
-
name: 'Example Resource',
|
|
205
|
-
description: 'An example resource',
|
|
206
|
-
mimeType: 'text/plain',
|
|
207
|
-
},
|
|
208
|
-
],
|
|
209
|
-
}));
|
|
210
|
-
|
|
211
|
-
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
212
|
-
if (request.params.uri === 'resource://example') {
|
|
213
|
-
return { contents: [{ uri: request.params.uri, mimeType: 'text/plain', text: 'Example content' }] };
|
|
214
|
-
}
|
|
215
|
-
throw new Error(\`Unknown resource: \${request.params.uri}\`);
|
|
216
|
-
});
|
|
198
|
+
const resourceSection = hasResources ? `
|
|
199
|
+
import {
|
|
200
|
+
ListResourcesRequestSchema,
|
|
201
|
+
ReadResourceRequestSchema,
|
|
202
|
+
} from '@modelcontextprotocol/sdk/types.js';
|
|
203
|
+
|
|
204
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
205
|
+
resources: [
|
|
206
|
+
{
|
|
207
|
+
uri: 'resource://example',
|
|
208
|
+
name: 'Example Resource',
|
|
209
|
+
description: 'An example resource',
|
|
210
|
+
mimeType: 'text/plain',
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
}));
|
|
214
|
+
|
|
215
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
216
|
+
if (request.params.uri === 'resource://example') {
|
|
217
|
+
return { contents: [{ uri: request.params.uri, mimeType: 'text/plain', text: 'Example content' }] };
|
|
218
|
+
}
|
|
219
|
+
throw new Error(\`Unknown resource: \${request.params.uri}\`);
|
|
220
|
+
});
|
|
217
221
|
` : '';
|
|
218
|
-
const promptSection = hasPrompts ? `
|
|
219
|
-
import {
|
|
220
|
-
ListPromptsRequestSchema,
|
|
221
|
-
GetPromptRequestSchema,
|
|
222
|
-
} from '@modelcontextprotocol/sdk/types.js';
|
|
223
|
-
|
|
224
|
-
server.setRequestHandler(ListPromptsRequestSchema, async () => ({
|
|
225
|
-
prompts: [
|
|
226
|
-
{
|
|
227
|
-
name: 'example-prompt',
|
|
228
|
-
description: 'An example prompt template',
|
|
229
|
-
arguments: [{ name: 'topic', description: 'Topic to write about', required: true }],
|
|
230
|
-
},
|
|
231
|
-
],
|
|
232
|
-
}));
|
|
233
|
-
|
|
234
|
-
server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
235
|
-
if (request.params.name === 'example-prompt') {
|
|
236
|
-
const topic = request.params.arguments?.topic ?? 'general';
|
|
237
|
-
return {
|
|
238
|
-
description: 'Example prompt',
|
|
239
|
-
messages: [{ role: 'user', content: { type: 'text', text: \`Write about: \${topic}\` } }],
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
throw new Error(\`Unknown prompt: \${request.params.name}\`);
|
|
243
|
-
});
|
|
222
|
+
const promptSection = hasPrompts ? `
|
|
223
|
+
import {
|
|
224
|
+
ListPromptsRequestSchema,
|
|
225
|
+
GetPromptRequestSchema,
|
|
226
|
+
} from '@modelcontextprotocol/sdk/types.js';
|
|
227
|
+
|
|
228
|
+
server.setRequestHandler(ListPromptsRequestSchema, async () => ({
|
|
229
|
+
prompts: [
|
|
230
|
+
{
|
|
231
|
+
name: 'example-prompt',
|
|
232
|
+
description: 'An example prompt template',
|
|
233
|
+
arguments: [{ name: 'topic', description: 'Topic to write about', required: true }],
|
|
234
|
+
},
|
|
235
|
+
],
|
|
236
|
+
}));
|
|
237
|
+
|
|
238
|
+
server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
239
|
+
if (request.params.name === 'example-prompt') {
|
|
240
|
+
const topic = request.params.arguments?.topic ?? 'general';
|
|
241
|
+
return {
|
|
242
|
+
description: 'Example prompt',
|
|
243
|
+
messages: [{ role: 'user', content: { type: 'text', text: \`Write about: \${topic}\` } }],
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
throw new Error(\`Unknown prompt: \${request.params.name}\`);
|
|
247
|
+
});
|
|
244
248
|
` : '';
|
|
245
|
-
const indexContent = `import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
246
|
-
${transportImport}
|
|
247
|
-
import {
|
|
248
|
-
CallToolRequestSchema,
|
|
249
|
-
ListToolsRequestSchema,
|
|
250
|
-
} from '@modelcontextprotocol/sdk/types.js';
|
|
251
|
-
|
|
252
|
-
const server = new Server(
|
|
253
|
-
{ name: '${config.name}', version: '0.1.0' },
|
|
254
|
-
{ capabilities: { ${capabilities.join(', ')} } }
|
|
255
|
-
);
|
|
256
|
-
|
|
257
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
258
|
-
tools: [
|
|
259
|
-
{
|
|
260
|
-
name: 'hello',
|
|
261
|
-
description: 'Says hello to a given name',
|
|
262
|
-
inputSchema: {
|
|
263
|
-
type: 'object',
|
|
264
|
-
properties: {
|
|
265
|
-
name: { type: 'string', description: 'Name to greet' },
|
|
266
|
-
},
|
|
267
|
-
required: ['name'],
|
|
268
|
-
},
|
|
269
|
-
},
|
|
270
|
-
],
|
|
271
|
-
}));
|
|
272
|
-
|
|
273
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
274
|
-
if (request.params.name === 'hello') {
|
|
275
|
-
const { name } = request.params.arguments as { name: string };
|
|
276
|
-
return { content: [{ type: 'text', text: \`Hello, \${name}!\` }] };
|
|
277
|
-
}
|
|
278
|
-
throw new Error(\`Unknown tool: \${request.params.name}\`);
|
|
279
|
-
});
|
|
280
|
-
${resourceSection}${promptSection}
|
|
281
|
-
${transportSetup}
|
|
249
|
+
const indexContent = `import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
250
|
+
${transportImport}
|
|
251
|
+
import {
|
|
252
|
+
CallToolRequestSchema,
|
|
253
|
+
ListToolsRequestSchema,
|
|
254
|
+
} from '@modelcontextprotocol/sdk/types.js';
|
|
255
|
+
|
|
256
|
+
const server = new Server(
|
|
257
|
+
{ name: '${config.name}', version: '0.1.0' },
|
|
258
|
+
{ capabilities: { ${capabilities.join(', ')} } }
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
262
|
+
tools: [
|
|
263
|
+
{
|
|
264
|
+
name: 'hello',
|
|
265
|
+
description: 'Says hello to a given name',
|
|
266
|
+
inputSchema: {
|
|
267
|
+
type: 'object',
|
|
268
|
+
properties: {
|
|
269
|
+
name: { type: 'string', description: 'Name to greet' },
|
|
270
|
+
},
|
|
271
|
+
required: ['name'],
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
],
|
|
275
|
+
}));
|
|
276
|
+
|
|
277
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
278
|
+
if (request.params.name === 'hello') {
|
|
279
|
+
const { name } = request.params.arguments as { name: string };
|
|
280
|
+
return { content: [{ type: 'text', text: \`Hello, \${name}!\` }] };
|
|
281
|
+
}
|
|
282
|
+
throw new Error(\`Unknown tool: \${request.params.name}\`);
|
|
283
|
+
});
|
|
284
|
+
${resourceSection}${promptSection}
|
|
285
|
+
${transportSetup}
|
|
282
286
|
`;
|
|
283
287
|
await fs.writeFile(path.join(dir, 'src', 'index.ts'), indexContent);
|
|
284
288
|
const extraDeps = mcpTransport !== 'stdio' ? { express: '^4.18.0' } : {};
|
|
@@ -324,45 +328,45 @@ ${transportSetup}
|
|
|
324
328
|
// Python MCP
|
|
325
329
|
const hasResources = mcpFeatures.includes('resources');
|
|
326
330
|
const hasPrompts = mcpFeatures.includes('prompts');
|
|
327
|
-
const resourceSection = hasResources ? `
|
|
328
|
-
|
|
329
|
-
@mcp.resource("resource://example")
|
|
330
|
-
def example_resource() -> str:
|
|
331
|
-
"""An example resource."""
|
|
332
|
-
return "Example content"
|
|
331
|
+
const resourceSection = hasResources ? `
|
|
332
|
+
|
|
333
|
+
@mcp.resource("resource://example")
|
|
334
|
+
def example_resource() -> str:
|
|
335
|
+
"""An example resource."""
|
|
336
|
+
return "Example content"
|
|
333
337
|
` : '';
|
|
334
|
-
const promptSection = hasPrompts ? `
|
|
335
|
-
|
|
336
|
-
@mcp.prompt()
|
|
337
|
-
def example_prompt(topic: str) -> str:
|
|
338
|
-
"""An example prompt template."""
|
|
339
|
-
return f"Write about: {topic}"
|
|
338
|
+
const promptSection = hasPrompts ? `
|
|
339
|
+
|
|
340
|
+
@mcp.prompt()
|
|
341
|
+
def example_prompt(topic: str) -> str:
|
|
342
|
+
"""An example prompt template."""
|
|
343
|
+
return f"Write about: {topic}"
|
|
340
344
|
` : '';
|
|
341
345
|
const transportLine = mcpTransport === 'stdio' ? '' : '\n# For SSE transport:\n# mcp.run(transport="sse", host="0.0.0.0", port=8000)\n';
|
|
342
|
-
await fs.writeFile(path.join(dir, 'main.py'), `from mcp.server.fastmcp import FastMCP
|
|
343
|
-
|
|
344
|
-
mcp = FastMCP("${config.name}")
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
@mcp.tool()
|
|
348
|
-
def hello(name: str) -> str:
|
|
349
|
-
"""Says hello to a given name."""
|
|
350
|
-
return f"Hello, {name}!"
|
|
351
|
-
${resourceSection}${promptSection}
|
|
352
|
-
|
|
353
|
-
if __name__ == "__main__":
|
|
354
|
-
mcp.run()${transportLine}
|
|
346
|
+
await fs.writeFile(path.join(dir, 'main.py'), `from mcp.server.fastmcp import FastMCP
|
|
347
|
+
|
|
348
|
+
mcp = FastMCP("${config.name}")
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
@mcp.tool()
|
|
352
|
+
def hello(name: str) -> str:
|
|
353
|
+
"""Says hello to a given name."""
|
|
354
|
+
return f"Hello, {name}!"
|
|
355
|
+
${resourceSection}${promptSection}
|
|
356
|
+
|
|
357
|
+
if __name__ == "__main__":
|
|
358
|
+
mcp.run()${transportLine}
|
|
355
359
|
`);
|
|
356
360
|
await fs.writeFile(path.join(dir, 'requirements.txt'), `mcp>=1.0.0\n`);
|
|
357
|
-
await fs.writeFile(path.join(dir, 'pyproject.toml'), `[project]
|
|
358
|
-
name = "${config.name}"
|
|
359
|
-
version = "0.1.0"
|
|
360
|
-
requires-python = ">=3.11"
|
|
361
|
-
dependencies = ["mcp>=1.0.0"]
|
|
362
|
-
|
|
363
|
-
[build-system]
|
|
364
|
-
requires = ["hatchling"]
|
|
365
|
-
build-backend = "hatchling.build"
|
|
361
|
+
await fs.writeFile(path.join(dir, 'pyproject.toml'), `[project]
|
|
362
|
+
name = "${config.name}"
|
|
363
|
+
version = "0.1.0"
|
|
364
|
+
requires-python = ">=3.11"
|
|
365
|
+
dependencies = ["mcp>=1.0.0"]
|
|
366
|
+
|
|
367
|
+
[build-system]
|
|
368
|
+
requires = ["hatchling"]
|
|
369
|
+
build-backend = "hatchling.build"
|
|
366
370
|
`);
|
|
367
371
|
}
|
|
368
372
|
}
|
|
@@ -432,92 +436,92 @@ async function writeGraphragConfig(dir, config) {
|
|
|
432
436
|
const { graphrag } = config;
|
|
433
437
|
let content;
|
|
434
438
|
if (graphrag === 'sqlite') {
|
|
435
|
-
content = `# DARE Knowledge Graph — SQLite
|
|
436
|
-
backend: sqlite
|
|
437
|
-
|
|
438
|
-
sqlite:
|
|
439
|
-
path: .dare/graph.db
|
|
440
|
-
|
|
441
|
-
# Node types tracked in the graph
|
|
442
|
-
nodes:
|
|
443
|
-
- task
|
|
444
|
-
- file
|
|
445
|
-
- schema
|
|
446
|
-
- endpoint
|
|
447
|
-
- component
|
|
448
|
-
- entity
|
|
449
|
-
- concept
|
|
450
|
-
|
|
451
|
-
# Relationship types
|
|
452
|
-
edges:
|
|
453
|
-
- depends_on
|
|
454
|
-
- implements
|
|
455
|
-
- uses
|
|
456
|
-
- references
|
|
457
|
-
- related_to
|
|
458
|
-
- contains
|
|
459
|
-
- extends
|
|
439
|
+
content = `# DARE Knowledge Graph — SQLite
|
|
440
|
+
backend: sqlite
|
|
441
|
+
|
|
442
|
+
sqlite:
|
|
443
|
+
path: .dare/graph.db
|
|
444
|
+
|
|
445
|
+
# Node types tracked in the graph
|
|
446
|
+
nodes:
|
|
447
|
+
- task
|
|
448
|
+
- file
|
|
449
|
+
- schema
|
|
450
|
+
- endpoint
|
|
451
|
+
- component
|
|
452
|
+
- entity
|
|
453
|
+
- concept
|
|
454
|
+
|
|
455
|
+
# Relationship types
|
|
456
|
+
edges:
|
|
457
|
+
- depends_on
|
|
458
|
+
- implements
|
|
459
|
+
- uses
|
|
460
|
+
- references
|
|
461
|
+
- related_to
|
|
462
|
+
- contains
|
|
463
|
+
- extends
|
|
460
464
|
`;
|
|
461
465
|
}
|
|
462
466
|
else if (graphrag === 'neo4j') {
|
|
463
|
-
content = `# DARE Knowledge Graph — Neo4j
|
|
464
|
-
backend: neo4j
|
|
465
|
-
|
|
466
|
-
neo4j:
|
|
467
|
-
url: http://localhost:7474 # Neo4j HTTP API endpoint (not Bolt)
|
|
468
|
-
database: dare # database name
|
|
469
|
-
username: neo4j
|
|
470
|
-
password: password
|
|
471
|
-
# auth: "Bearer <token>" # alternative to username/password
|
|
472
|
-
|
|
473
|
-
# Node types tracked in the graph
|
|
474
|
-
nodes:
|
|
475
|
-
- task
|
|
476
|
-
- file
|
|
477
|
-
- schema
|
|
478
|
-
- endpoint
|
|
479
|
-
- component
|
|
480
|
-
- entity
|
|
481
|
-
- concept
|
|
482
|
-
|
|
483
|
-
# Relationship types
|
|
484
|
-
edges:
|
|
485
|
-
- depends_on
|
|
486
|
-
- implements
|
|
487
|
-
- uses
|
|
488
|
-
- references
|
|
489
|
-
- related_to
|
|
490
|
-
- contains
|
|
491
|
-
- extends
|
|
467
|
+
content = `# DARE Knowledge Graph — Neo4j
|
|
468
|
+
backend: neo4j
|
|
469
|
+
|
|
470
|
+
neo4j:
|
|
471
|
+
url: http://localhost:7474 # Neo4j HTTP API endpoint (not Bolt)
|
|
472
|
+
database: dare # database name
|
|
473
|
+
username: neo4j
|
|
474
|
+
password: password
|
|
475
|
+
# auth: "Bearer <token>" # alternative to username/password
|
|
476
|
+
|
|
477
|
+
# Node types tracked in the graph
|
|
478
|
+
nodes:
|
|
479
|
+
- task
|
|
480
|
+
- file
|
|
481
|
+
- schema
|
|
482
|
+
- endpoint
|
|
483
|
+
- component
|
|
484
|
+
- entity
|
|
485
|
+
- concept
|
|
486
|
+
|
|
487
|
+
# Relationship types
|
|
488
|
+
edges:
|
|
489
|
+
- depends_on
|
|
490
|
+
- implements
|
|
491
|
+
- uses
|
|
492
|
+
- references
|
|
493
|
+
- related_to
|
|
494
|
+
- contains
|
|
495
|
+
- extends
|
|
492
496
|
`;
|
|
493
497
|
}
|
|
494
498
|
else {
|
|
495
499
|
// json
|
|
496
|
-
content = `# DARE Knowledge Graph — JSON
|
|
497
|
-
backend: json
|
|
498
|
-
|
|
499
|
-
json:
|
|
500
|
-
path: .dare/graph.json
|
|
501
|
-
|
|
502
|
-
# Node types tracked in the graph
|
|
503
|
-
nodes:
|
|
504
|
-
- task
|
|
505
|
-
- file
|
|
506
|
-
- schema
|
|
507
|
-
- endpoint
|
|
508
|
-
- component
|
|
509
|
-
- entity
|
|
510
|
-
- concept
|
|
511
|
-
|
|
512
|
-
# Relationship types
|
|
513
|
-
edges:
|
|
514
|
-
- depends_on
|
|
515
|
-
- implements
|
|
516
|
-
- uses
|
|
517
|
-
- references
|
|
518
|
-
- related_to
|
|
519
|
-
- contains
|
|
520
|
-
- extends
|
|
500
|
+
content = `# DARE Knowledge Graph — JSON
|
|
501
|
+
backend: json
|
|
502
|
+
|
|
503
|
+
json:
|
|
504
|
+
path: .dare/graph.json
|
|
505
|
+
|
|
506
|
+
# Node types tracked in the graph
|
|
507
|
+
nodes:
|
|
508
|
+
- task
|
|
509
|
+
- file
|
|
510
|
+
- schema
|
|
511
|
+
- endpoint
|
|
512
|
+
- component
|
|
513
|
+
- entity
|
|
514
|
+
- concept
|
|
515
|
+
|
|
516
|
+
# Relationship types
|
|
517
|
+
edges:
|
|
518
|
+
- depends_on
|
|
519
|
+
- implements
|
|
520
|
+
- uses
|
|
521
|
+
- references
|
|
522
|
+
- related_to
|
|
523
|
+
- contains
|
|
524
|
+
- extends
|
|
521
525
|
`;
|
|
522
526
|
}
|
|
523
527
|
const destPath = path.join(dir, 'dare-graph.yml');
|
|
@@ -639,33 +643,34 @@ async function generateFrontendTemplate(dir, stack, projectName = 'frontend') {
|
|
|
639
643
|
}
|
|
640
644
|
function generateMcpStackSkill(language) {
|
|
641
645
|
if (language === 'python') {
|
|
642
|
-
return `---
|
|
643
|
-
description: Python MCP server development skill
|
|
644
|
-
---
|
|
645
|
-
# Python MCP Skill
|
|
646
|
-
- Use FastMCP for rapid server development
|
|
647
|
-
- Decorate tools with @mcp.tool(), resources with @mcp.resource(), prompts with @mcp.prompt()
|
|
648
|
-
- Use type hints — FastMCP derives the JSON schema automatically
|
|
649
|
-
- Test with: npx @modelcontextprotocol/inspector python main.py
|
|
650
|
-
- Use mcp.run() for stdio, mcp.run(transport="sse") for SSE
|
|
646
|
+
return `---
|
|
647
|
+
description: Python MCP server development skill
|
|
648
|
+
---
|
|
649
|
+
# Python MCP Skill
|
|
650
|
+
- Use FastMCP for rapid server development
|
|
651
|
+
- Decorate tools with @mcp.tool(), resources with @mcp.resource(), prompts with @mcp.prompt()
|
|
652
|
+
- Use type hints — FastMCP derives the JSON schema automatically
|
|
653
|
+
- Test with: npx @modelcontextprotocol/inspector python main.py
|
|
654
|
+
- Use mcp.run() for stdio, mcp.run(transport="sse") for SSE
|
|
651
655
|
`;
|
|
652
656
|
}
|
|
653
|
-
return `---
|
|
654
|
-
description: Node.js/TypeScript MCP server development skill
|
|
655
|
-
---
|
|
656
|
-
# TypeScript MCP Skill
|
|
657
|
-
- Import Server from @modelcontextprotocol/sdk/server/index.js
|
|
658
|
-
- Use StdioServerTransport for CLI tools, SSEServerTransport for web integrations
|
|
659
|
-
- Define tools with ListToolsRequestSchema + CallToolRequestSchema handlers
|
|
660
|
-
- Keep inputSchema strict — Claude uses it to call your tools correctly
|
|
661
|
-
- Test with: npm run inspect (uses @modelcontextprotocol/inspector)
|
|
662
|
-
- Build before shipping: npm run build
|
|
657
|
+
return `---
|
|
658
|
+
description: Node.js/TypeScript MCP server development skill
|
|
659
|
+
---
|
|
660
|
+
# TypeScript MCP Skill
|
|
661
|
+
- Import Server from @modelcontextprotocol/sdk/server/index.js
|
|
662
|
+
- Use StdioServerTransport for CLI tools, SSEServerTransport for web integrations
|
|
663
|
+
- Define tools with ListToolsRequestSchema + CallToolRequestSchema handlers
|
|
664
|
+
- Keep inputSchema strict — Claude uses it to call your tools correctly
|
|
665
|
+
- Test with: npm run inspect (uses @modelcontextprotocol/inspector)
|
|
666
|
+
- Build before shipping: npm run build
|
|
663
667
|
`;
|
|
664
668
|
}
|
|
665
669
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
666
670
|
// Stack bootstrap orchestration
|
|
667
671
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
668
672
|
const BACKEND_STACKS = new Set([
|
|
673
|
+
'ruby-rails-8',
|
|
669
674
|
'php-laravel',
|
|
670
675
|
'node-nestjs',
|
|
671
676
|
'python-fastapi',
|
|
@@ -722,7 +727,7 @@ function rustMonorepoDir(outputDir, crateType, layout, name, cratePrefix) {
|
|
|
722
727
|
return path.join(outputDir, 'crates', crateType);
|
|
723
728
|
}
|
|
724
729
|
async function runStackBootstrap(config) {
|
|
725
|
-
const { outputDir, name, structure, backend, frontend, mcpLanguage, toolchain, rustWorkspaceLayout, cratePrefix } = config;
|
|
730
|
+
const { outputDir, name, structure, backend, frontend, mcpLanguage, mcpTransport, toolchain, rustWorkspaceLayout, cratePrefix } = config;
|
|
726
731
|
const isRustMonorepo = structure === 'monorepo' &&
|
|
727
732
|
backend === 'rust-axum' &&
|
|
728
733
|
(frontend === 'rust-leptos' || frontend === 'rust-leptos-csr');
|
|
@@ -778,11 +783,15 @@ async function runStackBootstrap(config) {
|
|
|
778
783
|
// MCP Server
|
|
779
784
|
if (structure === 'mcp-server') {
|
|
780
785
|
const lang = (mcpLanguage ?? 'node-ts');
|
|
786
|
+
// ProjectConfig uses 'http-stream' historically; the scaffolder transport
|
|
787
|
+
// enum is 'http'. Normalize here.
|
|
788
|
+
const transport = mcpTransport === 'http-stream' ? 'http' : (mcpTransport ?? 'stdio');
|
|
781
789
|
await bootstrapMcp({
|
|
782
790
|
language: lang,
|
|
783
791
|
dir: outputDir,
|
|
784
792
|
projectName: name,
|
|
785
793
|
toolchain,
|
|
794
|
+
transport: transport,
|
|
786
795
|
});
|
|
787
796
|
}
|
|
788
797
|
// Combo: rust-axum + rust-leptos(csr) in monorepo → unified Cargo workspace
|
|
@@ -838,9 +847,9 @@ async function createRustFullstackWorkspace(outputDir, projectName, layout, fron
|
|
|
838
847
|
].join('\n'));
|
|
839
848
|
// Root .cargo/config.toml guard
|
|
840
849
|
await fs.ensureDir(path.join(outputDir, '.cargo'));
|
|
841
|
-
await fs.writeFile(path.join(outputDir, '.cargo', 'config.toml'), `# DARE: Do NOT add a global [build] target here.
|
|
842
|
-
# This workspace mixes Leptos WASM crates with native Axum crates.
|
|
843
|
-
# A global target breaks one or the other — cargo-leptos manages wasm32 internally.
|
|
850
|
+
await fs.writeFile(path.join(outputDir, '.cargo', 'config.toml'), `# DARE: Do NOT add a global [build] target here.
|
|
851
|
+
# This workspace mixes Leptos WASM crates with native Axum crates.
|
|
852
|
+
# A global target breaks one or the other — cargo-leptos manages wasm32 internally.
|
|
844
853
|
`);
|
|
845
854
|
// Multi-crate: create core and cli scaffold crates
|
|
846
855
|
if (layout === 'multi') {
|
|
@@ -921,38 +930,38 @@ async function createCliCrate(outputDir, slug) {
|
|
|
921
930
|
}
|
|
922
931
|
function generateStackSkill(stack) {
|
|
923
932
|
const skills = {
|
|
924
|
-
'rust-leptos': `---
|
|
925
|
-
description: Leptos fullstack (SSR + WASM) development skill
|
|
926
|
-
---
|
|
927
|
-
# Leptos Fullstack Skill
|
|
928
|
-
- Use \`#[component]\` macro for all components — no class components
|
|
929
|
-
- State: \`signal()\` (RwSignal), \`ReadSignal\`/\`WriteSignal\` — fine-grained reactivity
|
|
930
|
-
- Async data: \`Resource\` for fetching, never \`Effect\` that calls fetch
|
|
931
|
-
- Mutations: \`Action\` for server calls (forms, submits)
|
|
932
|
-
- Loading states: \`Suspense\` and \`Transition\` — never block the render
|
|
933
|
-
- Conditionals: \`Show\`, \`For\` components — not if/for in view!
|
|
934
|
-
- Server functions: \`#[server]\` macro — only available with \`ssr\` feature
|
|
935
|
-
- Shared types (server + WASM): use \`#[cfg_attr(feature = "ssr", derive(sqlx::FromRow))]\`
|
|
936
|
-
- Avoid: \`tokio::spawn\` on client (no async runtime in WASM), \`panic!\` in components, \`wasm_bindgen\` direct
|
|
937
|
-
- Build: \`cargo leptos build\` (not \`cargo build\`)
|
|
938
|
-
- Test: \`cargo test --workspace\` (not \`cargo leptos test\` — that doesn't exist)
|
|
939
|
-
- Lint: \`cargo clippy --all-targets --all-features -- -D warnings && cargo fmt --check\`
|
|
940
|
-
- Dev server: \`cargo leptos watch\` (port 3000 + hot reload on port 3001)
|
|
933
|
+
'rust-leptos': `---
|
|
934
|
+
description: Leptos fullstack (SSR + WASM) development skill
|
|
935
|
+
---
|
|
936
|
+
# Leptos Fullstack Skill
|
|
937
|
+
- Use \`#[component]\` macro for all components — no class components
|
|
938
|
+
- State: \`signal()\` (RwSignal), \`ReadSignal\`/\`WriteSignal\` — fine-grained reactivity
|
|
939
|
+
- Async data: \`Resource\` for fetching, never \`Effect\` that calls fetch
|
|
940
|
+
- Mutations: \`Action\` for server calls (forms, submits)
|
|
941
|
+
- Loading states: \`Suspense\` and \`Transition\` — never block the render
|
|
942
|
+
- Conditionals: \`Show\`, \`For\` components — not if/for in view!
|
|
943
|
+
- Server functions: \`#[server]\` macro — only available with \`ssr\` feature
|
|
944
|
+
- Shared types (server + WASM): use \`#[cfg_attr(feature = "ssr", derive(sqlx::FromRow))]\`
|
|
945
|
+
- Avoid: \`tokio::spawn\` on client (no async runtime in WASM), \`panic!\` in components, \`wasm_bindgen\` direct
|
|
946
|
+
- Build: \`cargo leptos build\` (not \`cargo build\`)
|
|
947
|
+
- Test: \`cargo test --workspace\` (not \`cargo leptos test\` — that doesn't exist)
|
|
948
|
+
- Lint: \`cargo clippy --all-targets --all-features -- -D warnings && cargo fmt --check\`
|
|
949
|
+
- Dev server: \`cargo leptos watch\` (port 3000 + hot reload on port 3001)
|
|
941
950
|
`,
|
|
942
|
-
'rust-leptos-csr': `---
|
|
943
|
-
description: Leptos CSR (WASM + trunk) development skill
|
|
944
|
-
---
|
|
945
|
-
# Leptos CSR Skill
|
|
946
|
-
- Pure client-side WASM — no server rendering, no \`#[server]\` functions
|
|
947
|
-
- Use \`#[component]\` macro for all components
|
|
948
|
-
- State: \`signal()\`, \`create_memo()\` for derived state
|
|
949
|
-
- Async data: \`Resource\` — never \`Effect\` that calls fetch
|
|
950
|
-
- Entry point: \`leptos::mount::mount_to_body(App)\` called from \`main()\`
|
|
951
|
-
- Build tool: \`trunk build\` (NOT \`cargo leptos build\` — wrong tool for CSR)
|
|
952
|
-
- Dev server: \`trunk serve\` (port 3001 by default, configured in Trunk.toml)
|
|
953
|
-
- Test: \`cargo test --workspace\`
|
|
954
|
-
- Lint: \`cargo clippy --all-targets --all-features -- -D warnings && cargo fmt --check\`
|
|
955
|
-
- Deploy: \`trunk build --release\` produces \`dist/\` — static files, deployable to any CDN
|
|
951
|
+
'rust-leptos-csr': `---
|
|
952
|
+
description: Leptos CSR (WASM + trunk) development skill
|
|
953
|
+
---
|
|
954
|
+
# Leptos CSR Skill
|
|
955
|
+
- Pure client-side WASM — no server rendering, no \`#[server]\` functions
|
|
956
|
+
- Use \`#[component]\` macro for all components
|
|
957
|
+
- State: \`signal()\`, \`create_memo()\` for derived state
|
|
958
|
+
- Async data: \`Resource\` — never \`Effect\` that calls fetch
|
|
959
|
+
- Entry point: \`leptos::mount::mount_to_body(App)\` called from \`main()\`
|
|
960
|
+
- Build tool: \`trunk build\` (NOT \`cargo leptos build\` — wrong tool for CSR)
|
|
961
|
+
- Dev server: \`trunk serve\` (port 3001 by default, configured in Trunk.toml)
|
|
962
|
+
- Test: \`cargo test --workspace\`
|
|
963
|
+
- Lint: \`cargo clippy --all-targets --all-features -- -D warnings && cargo fmt --check\`
|
|
964
|
+
- Deploy: \`trunk build --release\` produces \`dist/\` — static files, deployable to any CDN
|
|
956
965
|
`,
|
|
957
966
|
'rust-axum': `---\ndescription: Rust/Axum API development skill\n---\n# Rust/Axum Skill\n- Use Axum for HTTP routing\n- Use Tokio for async runtime\n- Use SQLx for database\n- Run clippy and cargo test\n`,
|
|
958
967
|
'go-gin': `---\ndescription: Go/Gin API development skill\n---\n# Go + Gin Skill\n- Use Gin for HTTP routing (github.com/gin-gonic/gin)\n- Project layout: cmd/api/main.go (entrypoint), internal/handlers, internal/middleware, internal/services, internal/repository\n- Use context.Context propagation in every handler/service\n- Use struct tags for binding/validation (binding:"required" on DTOs)\n- For SQL: prefer database/sql + sqlx, parametrize ALL queries, no string concat\n- Errors: return wrapped errors (fmt.Errorf("...: %w", err)), not panics\n- Tests: use net/http/httptest + table-driven tests; place *_test.go alongside the package\n- Ralph Loop: \`go build ./...\`, \`go test ./...\`, \`go vet ./...\`\n`,
|