@dewtech/dare-cli 0.2.0 → 0.3.1

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.
@@ -1,6 +1,6 @@
1
1
  import fs from 'fs-extra';
2
2
  import path from 'path';
3
- import { generateCursorRules, generateAntigravityRules, generateSharedConfig } from './templates.js';
3
+ import { generateCursorRules, generateAntigravityRules, generateSharedConfig, generateMcpCursorRules, generateMcpAntigravityRules } from './templates.js';
4
4
  export async function generateProjectStructure(config) {
5
5
  const { outputDir, name, structure, backend, frontend, ide, graphrag, mcp } = config;
6
6
  await fs.ensureDir(outputDir);
@@ -8,46 +8,309 @@ export async function generateProjectStructure(config) {
8
8
  await fs.ensureDir(path.join(outputDir, 'DARE'));
9
9
  await fs.ensureDir(path.join(outputDir, 'DARE', 'EXECUTION'));
10
10
  // Write dare.config.json
11
- await fs.writeJSON(path.join(outputDir, 'dare.config.json'), { name, structure, backend, frontend, ide, graphrag, mcp, version: '0.1.0' }, { spaces: 2 });
11
+ const configData = { name, structure, backend, frontend, ide, graphrag, mcp, version: '0.1.0' };
12
+ if (structure === 'mcp-server') {
13
+ configData.mcpTransport = config.mcpTransport;
14
+ configData.mcpLanguage = config.mcpLanguage;
15
+ configData.mcpFeatures = config.mcpFeatures;
16
+ }
17
+ await fs.writeJSON(path.join(outputDir, 'dare.config.json'), configData, { spaces: 2 });
12
18
  // Write .gitignore
13
- await fs.writeFile(path.join(outputDir, '.gitignore'), `node_modules/\ndist/\nbuild/\n*.db\n*.db-shm\n*.db-wal\n.env\n.env.local\n.dare/\nlogs/\n*.log\n`);
14
- // Write .cursorrules (global)
19
+ const gitignoreExtras = structure === 'mcp-server' && config.mcpLanguage === 'python'
20
+ ? '\n__pycache__/\n*.py[cod]\n.venv/\n'
21
+ : '';
22
+ await fs.writeFile(path.join(outputDir, '.gitignore'), `node_modules/\ndist/\nbuild/\n*.db\n*.db-shm\n*.db-wal\n.env\n.env.local\n.dare/\nlogs/\n*.log\n${gitignoreExtras}`);
23
+ // Cursor rules
15
24
  if (ide === 'cursor' || ide === 'hybrid') {
16
- await fs.writeFile(path.join(outputDir, '.cursorrules'), generateCursorRules({ backend, frontend, graphrag, mcp }));
25
+ const cursorRulesContent = structure === 'mcp-server'
26
+ ? generateMcpCursorRules({ mcpTransport: config.mcpTransport, mcpLanguage: config.mcpLanguage, mcpFeatures: config.mcpFeatures, graphrag, mcp })
27
+ : generateCursorRules({ backend, frontend, graphrag, mcp });
28
+ await fs.writeFile(path.join(outputDir, '.cursorrules'), cursorRulesContent);
17
29
  await fs.ensureDir(path.join(outputDir, '.cursor', 'rules'));
18
30
  await fs.ensureDir(path.join(outputDir, '.cursor', 'commands'));
19
- // Write stack-specific skills
20
- if (backend) {
21
- await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${backend}.mdc`), generateStackSkill(backend));
31
+ if (structure === 'mcp-server') {
32
+ await fs.writeFile(path.join(outputDir, '.cursor', 'rules', 'skill-mcp-server.mdc'), generateMcpStackSkill(config.mcpLanguage || 'node-ts'));
22
33
  }
23
- if (frontend) {
24
- await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${frontend}.mdc`), generateStackSkill(frontend));
34
+ else {
35
+ if (backend) {
36
+ await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${backend}.mdc`), generateStackSkill(backend));
37
+ }
38
+ if (frontend) {
39
+ await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${frontend}.mdc`), generateStackSkill(frontend));
40
+ }
25
41
  }
26
- // Write DARE commands for Cursor
27
42
  await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'generate-design.md'), `# Generate Design\nGenerate a DESIGN.md for the described feature.\n`);
28
43
  await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'generate-blueprint.md'), `# Generate Blueprint\nGenerate a BLUEPRINT.md from the DESIGN.md.\n`);
29
44
  await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'execute-task.md'), `# Execute Task\nExecute the specified task from TASKS.md.\n`);
30
45
  }
31
- // Write .antigravityrules
46
+ // Antigravity rules
32
47
  if (ide === 'antigravity' || ide === 'hybrid') {
33
- await fs.writeFile(path.join(outputDir, '.antigravityrules'), generateAntigravityRules({ backend, frontend, graphrag, mcp }));
48
+ const antigravityContent = structure === 'mcp-server'
49
+ ? generateMcpAntigravityRules({ mcpTransport: config.mcpTransport, mcpLanguage: config.mcpLanguage, mcpFeatures: config.mcpFeatures, graphrag, mcp })
50
+ : generateAntigravityRules({ backend, frontend, graphrag, mcp });
51
+ await fs.writeFile(path.join(outputDir, '.antigravityrules'), antigravityContent);
34
52
  await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-design'));
35
53
  await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-blueprint'));
36
54
  await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-execute'));
37
55
  await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-tasks'));
38
56
  await fs.ensureDir(path.join(outputDir, '.agents', 'workflows'));
39
57
  }
40
- // Write shared config
58
+ // Write shared DARE README
41
59
  await fs.writeFile(path.join(outputDir, 'DARE', 'README.md'), generateSharedConfig(name));
42
- // Create backend structure
43
- if (structure !== 'frontend' && backend) {
44
- const backendDir = structure === 'monorepo' ? path.join(outputDir, 'backend') : outputDir;
45
- await generateBackendTemplate(backendDir, backend);
60
+ // Generate project templates
61
+ if (structure === 'mcp-server') {
62
+ await generateMcpTemplate(outputDir, config);
46
63
  }
47
- // Create frontend structure
48
- if (structure !== 'backend' && frontend) {
49
- const frontendDir = structure === 'monorepo' ? path.join(outputDir, 'frontend') : outputDir;
50
- await generateFrontendTemplate(frontendDir, frontend);
64
+ else {
65
+ if (structure !== 'frontend' && backend) {
66
+ const backendDir = structure === 'monorepo' ? path.join(outputDir, 'backend') : outputDir;
67
+ await generateBackendTemplate(backendDir, backend);
68
+ }
69
+ if (structure !== 'backend' && frontend) {
70
+ const frontendDir = structure === 'monorepo' ? path.join(outputDir, 'frontend') : outputDir;
71
+ await generateFrontendTemplate(frontendDir, frontend);
72
+ }
73
+ }
74
+ }
75
+ export async function installDareToExistingProject(projectDir, config) {
76
+ const outputDir = projectDir;
77
+ const { name, structure, backend, frontend, ide, graphrag, mcp } = config;
78
+ await fs.ensureDir(path.join(outputDir, 'DARE'));
79
+ await fs.ensureDir(path.join(outputDir, 'DARE', 'EXECUTION'));
80
+ const configData = { name, structure, backend, frontend, ide, graphrag, mcp, version: '0.1.0', installedAt: new Date().toISOString() };
81
+ if (structure === 'mcp-server') {
82
+ configData.mcpTransport = config.mcpTransport;
83
+ configData.mcpLanguage = config.mcpLanguage;
84
+ configData.mcpFeatures = config.mcpFeatures;
85
+ }
86
+ await fs.writeJSON(path.join(outputDir, 'dare.config.json'), configData, { spaces: 2 });
87
+ await fs.writeFile(path.join(outputDir, 'DARE', 'README.md'), generateSharedConfig(name));
88
+ if (ide === 'cursor' || ide === 'hybrid') {
89
+ const cursorRulesContent = structure === 'mcp-server'
90
+ ? generateMcpCursorRules({ mcpTransport: config.mcpTransport, mcpLanguage: config.mcpLanguage, mcpFeatures: config.mcpFeatures, graphrag, mcp })
91
+ : generateCursorRules({ backend, frontend, graphrag, mcp });
92
+ await fs.writeFile(path.join(outputDir, '.cursorrules'), cursorRulesContent);
93
+ await fs.ensureDir(path.join(outputDir, '.cursor', 'rules'));
94
+ await fs.ensureDir(path.join(outputDir, '.cursor', 'commands'));
95
+ if (structure === 'mcp-server') {
96
+ await fs.writeFile(path.join(outputDir, '.cursor', 'rules', 'skill-mcp-server.mdc'), generateMcpStackSkill(config.mcpLanguage || 'node-ts'));
97
+ }
98
+ else {
99
+ if (backend) {
100
+ await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${backend}.mdc`), generateStackSkill(backend));
101
+ }
102
+ if (frontend) {
103
+ await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${frontend}.mdc`), generateStackSkill(frontend));
104
+ }
105
+ }
106
+ await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'generate-design.md'), `# Generate Design\nGenerate a DESIGN.md for the described feature.\n`);
107
+ await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'generate-blueprint.md'), `# Generate Blueprint\nGenerate a BLUEPRINT.md from the DESIGN.md.\n`);
108
+ await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'execute-task.md'), `# Execute Task\nExecute the specified task from TASKS.md.\n`);
109
+ }
110
+ if (ide === 'antigravity' || ide === 'hybrid') {
111
+ const antigravityContent = structure === 'mcp-server'
112
+ ? generateMcpAntigravityRules({ mcpTransport: config.mcpTransport, mcpLanguage: config.mcpLanguage, mcpFeatures: config.mcpFeatures, graphrag, mcp })
113
+ : generateAntigravityRules({ backend, frontend, graphrag, mcp });
114
+ await fs.writeFile(path.join(outputDir, '.antigravityrules'), antigravityContent);
115
+ await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-design'));
116
+ await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-blueprint'));
117
+ await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-execute'));
118
+ await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-tasks'));
119
+ await fs.ensureDir(path.join(outputDir, '.agents', 'workflows'));
120
+ }
121
+ }
122
+ async function generateMcpTemplate(dir, config) {
123
+ const { mcpLanguage = 'node-ts', mcpTransport = 'stdio', mcpFeatures = ['tools'] } = config;
124
+ await fs.ensureDir(path.join(dir, 'src'));
125
+ if (mcpLanguage === 'node-ts') {
126
+ const hasResources = mcpFeatures.includes('resources');
127
+ const hasPrompts = mcpFeatures.includes('prompts');
128
+ const capabilities = [];
129
+ if (mcpFeatures.includes('tools'))
130
+ capabilities.push('tools: {}');
131
+ if (hasResources)
132
+ capabilities.push('resources: {}');
133
+ if (hasPrompts)
134
+ capabilities.push('prompts: {}');
135
+ const transportImport = mcpTransport === 'stdio'
136
+ ? `import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';`
137
+ : `import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';\nimport express from 'express';`;
138
+ const transportSetup = mcpTransport === 'stdio'
139
+ ? `const transport = new StdioServerTransport();\nawait server.connect(transport);`
140
+ : `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'));`;
141
+ const resourceSection = hasResources ? `
142
+ import {
143
+ ListResourcesRequestSchema,
144
+ ReadResourceRequestSchema,
145
+ } from '@modelcontextprotocol/sdk/types.js';
146
+
147
+ server.setRequestHandler(ListResourcesRequestSchema, async () => ({
148
+ resources: [
149
+ {
150
+ uri: 'resource://example',
151
+ name: 'Example Resource',
152
+ description: 'An example resource',
153
+ mimeType: 'text/plain',
154
+ },
155
+ ],
156
+ }));
157
+
158
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
159
+ if (request.params.uri === 'resource://example') {
160
+ return { contents: [{ uri: request.params.uri, mimeType: 'text/plain', text: 'Example content' }] };
161
+ }
162
+ throw new Error(\`Unknown resource: \${request.params.uri}\`);
163
+ });
164
+ ` : '';
165
+ const promptSection = hasPrompts ? `
166
+ import {
167
+ ListPromptsRequestSchema,
168
+ GetPromptRequestSchema,
169
+ } from '@modelcontextprotocol/sdk/types.js';
170
+
171
+ server.setRequestHandler(ListPromptsRequestSchema, async () => ({
172
+ prompts: [
173
+ {
174
+ name: 'example-prompt',
175
+ description: 'An example prompt template',
176
+ arguments: [{ name: 'topic', description: 'Topic to write about', required: true }],
177
+ },
178
+ ],
179
+ }));
180
+
181
+ server.setRequestHandler(GetPromptRequestSchema, async (request) => {
182
+ if (request.params.name === 'example-prompt') {
183
+ const topic = request.params.arguments?.topic ?? 'general';
184
+ return {
185
+ description: 'Example prompt',
186
+ messages: [{ role: 'user', content: { type: 'text', text: \`Write about: \${topic}\` } }],
187
+ };
188
+ }
189
+ throw new Error(\`Unknown prompt: \${request.params.name}\`);
190
+ });
191
+ ` : '';
192
+ const indexContent = `import { Server } from '@modelcontextprotocol/sdk/server/index.js';
193
+ ${transportImport}
194
+ import {
195
+ CallToolRequestSchema,
196
+ ListToolsRequestSchema,
197
+ } from '@modelcontextprotocol/sdk/types.js';
198
+
199
+ const server = new Server(
200
+ { name: '${config.name}', version: '0.1.0' },
201
+ { capabilities: { ${capabilities.join(', ')} } }
202
+ );
203
+
204
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
205
+ tools: [
206
+ {
207
+ name: 'hello',
208
+ description: 'Says hello to a given name',
209
+ inputSchema: {
210
+ type: 'object',
211
+ properties: {
212
+ name: { type: 'string', description: 'Name to greet' },
213
+ },
214
+ required: ['name'],
215
+ },
216
+ },
217
+ ],
218
+ }));
219
+
220
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
221
+ if (request.params.name === 'hello') {
222
+ const { name } = request.params.arguments as { name: string };
223
+ return { content: [{ type: 'text', text: \`Hello, \${name}!\` }] };
224
+ }
225
+ throw new Error(\`Unknown tool: \${request.params.name}\`);
226
+ });
227
+ ${resourceSection}${promptSection}
228
+ ${transportSetup}
229
+ `;
230
+ await fs.writeFile(path.join(dir, 'src', 'index.ts'), indexContent);
231
+ const extraDeps = mcpTransport !== 'stdio' ? { express: '^4.18.0' } : {};
232
+ const extraDevDeps = mcpTransport !== 'stdio' ? { '@types/express': '^4.17.0' } : {};
233
+ await fs.writeJSON(path.join(dir, 'package.json'), {
234
+ name: config.name,
235
+ version: '0.1.0',
236
+ type: 'module',
237
+ scripts: {
238
+ build: 'tsc',
239
+ start: 'node dist/index.js',
240
+ dev: 'tsx src/index.ts',
241
+ test: 'vitest',
242
+ inspect: `npx @modelcontextprotocol/inspector node dist/index.js`,
243
+ },
244
+ dependencies: {
245
+ '@modelcontextprotocol/sdk': '^1.0.0',
246
+ ...extraDeps,
247
+ },
248
+ devDependencies: {
249
+ typescript: '^5.0.0',
250
+ tsx: '^4.0.0',
251
+ vitest: '^1.0.0',
252
+ '@types/node': '^20.0.0',
253
+ ...extraDevDeps,
254
+ },
255
+ }, { spaces: 2 });
256
+ await fs.writeJSON(path.join(dir, 'tsconfig.json'), {
257
+ compilerOptions: {
258
+ target: 'ES2022',
259
+ module: 'Node16',
260
+ moduleResolution: 'Node16',
261
+ outDir: 'dist',
262
+ rootDir: 'src',
263
+ strict: true,
264
+ esModuleInterop: true,
265
+ skipLibCheck: true,
266
+ },
267
+ include: ['src'],
268
+ }, { spaces: 2 });
269
+ }
270
+ else {
271
+ // Python MCP
272
+ const hasResources = mcpFeatures.includes('resources');
273
+ const hasPrompts = mcpFeatures.includes('prompts');
274
+ const resourceSection = hasResources ? `
275
+
276
+ @mcp.resource("resource://example")
277
+ def example_resource() -> str:
278
+ """An example resource."""
279
+ return "Example content"
280
+ ` : '';
281
+ const promptSection = hasPrompts ? `
282
+
283
+ @mcp.prompt()
284
+ def example_prompt(topic: str) -> str:
285
+ """An example prompt template."""
286
+ return f"Write about: {topic}"
287
+ ` : '';
288
+ const transportLine = mcpTransport === 'stdio' ? '' : '\n# For SSE transport:\n# mcp.run(transport="sse", host="0.0.0.0", port=8000)\n';
289
+ await fs.writeFile(path.join(dir, 'main.py'), `from mcp.server.fastmcp import FastMCP
290
+
291
+ mcp = FastMCP("${config.name}")
292
+
293
+
294
+ @mcp.tool()
295
+ def hello(name: str) -> str:
296
+ """Says hello to a given name."""
297
+ return f"Hello, {name}!"
298
+ ${resourceSection}${promptSection}
299
+
300
+ if __name__ == "__main__":
301
+ mcp.run()${transportLine}
302
+ `);
303
+ await fs.writeFile(path.join(dir, 'requirements.txt'), `mcp>=1.0.0\n`);
304
+ await fs.writeFile(path.join(dir, 'pyproject.toml'), `[project]
305
+ name = "${config.name}"
306
+ version = "0.1.0"
307
+ requires-python = ">=3.11"
308
+ dependencies = ["mcp>=1.0.0"]
309
+
310
+ [build-system]
311
+ requires = ["hatchling"]
312
+ build-backend = "hatchling.build"
313
+ `);
51
314
  }
52
315
  }
53
316
  async function generateBackendTemplate(dir, stack) {
@@ -56,21 +319,17 @@ async function generateBackendTemplate(dir, stack) {
56
319
  case 'rust-axum':
57
320
  await fs.writeFile(path.join(dir, 'Cargo.toml'), `[package]\nname = "api"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\naxum = "0.7"\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\n`);
58
321
  await fs.writeFile(path.join(dir, 'src', 'main.rs'), `use axum::{routing::get, Router};\n\n#[tokio::main]\nasync fn main() {\n let app = Router::new().route("/health", get(health));\n let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();\n axum::serve(listener, app).await.unwrap();\n}\n\nasync fn health() -> &'static str { "OK" }\n`);
59
- await fs.writeFile(path.join(dir, '.cursorrules'), `# Rust/Axum Rules\n- Use Rust idioms and patterns\n- Prefer async/await with Tokio\n- Use Axum for HTTP routing\n- Handle errors with thiserror/anyhow\n- Run clippy before committing\n`);
60
322
  break;
61
323
  case 'node-nestjs':
62
324
  await fs.writeJSON(path.join(dir, 'package.json'), { name: 'api', version: '0.1.0', scripts: { start: 'nest start', build: 'nest build', test: 'jest' }, dependencies: { '@nestjs/core': '^10.0.0', '@nestjs/common': '^10.0.0', '@nestjs/platform-express': '^10.0.0' } }, { spaces: 2 });
63
325
  await fs.writeFile(path.join(dir, 'src', 'main.ts'), `import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\nasync function bootstrap() {\n const app = await NestFactory.create(AppModule);\n await app.listen(3000);\n}\nbootstrap();\n`);
64
- await fs.writeFile(path.join(dir, '.cursorrules'), `# Node.js/NestJS Rules\n- Use NestJS decorators and DI\n- Define DTOs with class-validator\n- Use TypeORM or Prisma for DB\n- Write Jest tests for all services\n`);
65
326
  break;
66
327
  case 'python-fastapi':
67
328
  await fs.writeFile(path.join(dir, 'main.py'), `from fastapi import FastAPI\n\napp = FastAPI()\n\n@app.get("/health")\ndef health():\n return {"status": "ok"}\n`);
68
329
  await fs.writeFile(path.join(dir, 'requirements.txt'), `fastapi>=0.100.0\nuvicorn>=0.23.0\npydantic>=2.0.0\n`);
69
- await fs.writeFile(path.join(dir, '.cursorrules'), `# Python/FastAPI Rules\n- Use Pydantic v2 for validation\n- Type all functions with PEP 484\n- Use async/await for IO operations\n- Follow PEP 8 style guide\n`);
70
330
  break;
71
331
  case 'php-laravel':
72
332
  await fs.writeJSON(path.join(dir, 'composer.json'), { name: 'app/api', require: { php: '^8.2', 'laravel/framework': '^11.0' }, scripts: { 'post-install-cmd': ['@php artisan key:generate'] } }, { spaces: 2 });
73
- await fs.writeFile(path.join(dir, '.cursorrules'), `# PHP/Laravel Rules\n- Follow PSR-12 coding standards\n- Use FormRequests for validation\n- Use API Resources for responses\n- Write PHPUnit tests\n- Use Eloquent ORM\n`);
74
333
  break;
75
334
  }
76
335
  }
@@ -80,15 +339,38 @@ async function generateFrontendTemplate(dir, stack) {
80
339
  case 'react':
81
340
  await fs.writeJSON(path.join(dir, 'package.json'), { name: 'frontend', version: '0.1.0', scripts: { dev: 'vite', build: 'vite build', test: 'vitest' }, dependencies: { react: '^18.0.0', 'react-dom': '^18.0.0' }, devDependencies: { vite: '^5.0.0', '@vitejs/plugin-react': '^4.0.0', typescript: '^5.0.0' } }, { spaces: 2 });
82
341
  await fs.writeFile(path.join(dir, 'src', 'App.tsx'), `import React from 'react';\n\nexport default function App() {\n return <div><h1>DARE Framework - React App</h1></div>;\n}\n`);
83
- await fs.writeFile(path.join(dir, '.cursorrules'), `# React Rules\n- Use functional components with hooks\n- Use TypeScript for all components\n- Prefer React Query for server state\n- Use Zustand or Context for client state\n- Write Vitest tests\n`);
84
342
  break;
85
343
  case 'vue':
86
344
  await fs.writeJSON(path.join(dir, 'package.json'), { name: 'frontend', version: '0.1.0', scripts: { dev: 'vite', build: 'vite build', test: 'vitest' }, dependencies: { vue: '^3.0.0' }, devDependencies: { vite: '^5.0.0', '@vitejs/plugin-vue': '^5.0.0', typescript: '^5.0.0' } }, { spaces: 2 });
87
345
  await fs.writeFile(path.join(dir, 'src', 'App.vue'), `<template>\n <div><h1>DARE Framework - Vue App</h1></div>\n</template>\n\n<script setup lang="ts">\n// Composition API\n</script>\n`);
88
- await fs.writeFile(path.join(dir, '.cursorrules'), `# Vue Rules\n- Use Composition API with <script setup>\n- Use TypeScript for all components\n- Use Pinia for state management\n- Use Vue Router for navigation\n- Write Vitest tests\n`);
89
346
  break;
90
347
  }
91
348
  }
349
+ function generateMcpStackSkill(language) {
350
+ if (language === 'python') {
351
+ return `---
352
+ description: Python MCP server development skill
353
+ ---
354
+ # Python MCP Skill
355
+ - Use FastMCP for rapid server development
356
+ - Decorate tools with @mcp.tool(), resources with @mcp.resource(), prompts with @mcp.prompt()
357
+ - Use type hints — FastMCP derives the JSON schema automatically
358
+ - Test with: npx @modelcontextprotocol/inspector python main.py
359
+ - Use mcp.run() for stdio, mcp.run(transport="sse") for SSE
360
+ `;
361
+ }
362
+ return `---
363
+ description: Node.js/TypeScript MCP server development skill
364
+ ---
365
+ # TypeScript MCP Skill
366
+ - Import Server from @modelcontextprotocol/sdk/server/index.js
367
+ - Use StdioServerTransport for CLI tools, SSEServerTransport for web integrations
368
+ - Define tools with ListToolsRequestSchema + CallToolRequestSchema handlers
369
+ - Keep inputSchema strict — Claude uses it to call your tools correctly
370
+ - Test with: npm run inspect (uses @modelcontextprotocol/inspector)
371
+ - Build before shipping: npm run build
372
+ `;
373
+ }
92
374
  function generateStackSkill(stack) {
93
375
  const skills = {
94
376
  '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`,
@@ -1 +1 @@
1
- {"version":3,"file":"project-generator.js","sourceRoot":"","sources":["../../src/utils/project-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-generator.js","sourceRoot":"","sources":["../../src/utils/project-generator.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,17 @@ interface TemplateConfig {
4
4
  graphrag: string;
5
5
  mcp: boolean;
6
6
  }
7
+ interface McpTemplateConfig {
8
+ mcpTransport?: string;
9
+ mcpLanguage?: string;
10
+ mcpFeatures?: string[];
11
+ graphrag: string;
12
+ mcp: boolean;
13
+ }
7
14
  export declare function generateCursorRules(config: TemplateConfig): string;
8
15
  export declare function generateAntigravityRules(config: TemplateConfig): string;
16
+ export declare function generateMcpCursorRules(config: McpTemplateConfig): string;
17
+ export declare function generateMcpAntigravityRules(config: McpTemplateConfig): string;
9
18
  export declare function generateSharedConfig(projectName: string): string;
10
19
  export {};
11
20
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAAA,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAgFlE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA6BvE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA4BhE"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAAA,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,UAAU,iBAAiB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAgFlE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA6BvE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CA+DxE;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAkC7E;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA4BhE"}
@@ -105,6 +105,101 @@ ${mcp ? `- Query MCP Server at http://localhost:3000 for context
105
105
  - Request human review for architectural decisions
106
106
  `;
107
107
  }
108
+ export function generateMcpCursorRules(config) {
109
+ const { mcpTransport = 'stdio', mcpLanguage = 'node-ts', mcpFeatures = ['tools'], graphrag, mcp } = config;
110
+ const featuresStr = mcpFeatures.join(', ');
111
+ const langRules = mcpLanguage === 'python'
112
+ ? `## Language: Python
113
+ - Use FastMCP (@mcp.tool, @mcp.resource, @mcp.prompt decorators)
114
+ - Type all arguments — FastMCP builds JSON schema from type hints
115
+ - Use docstrings as tool/resource/prompt descriptions
116
+ - Test: npx @modelcontextprotocol/inspector python main.py
117
+ - Lint: ruff check . && mypy .`
118
+ : `## Language: TypeScript
119
+ - Import from '@modelcontextprotocol/sdk/server/index.js' and types
120
+ - Always define strict inputSchema for every tool (Claude depends on it)
121
+ - Use zod for runtime validation when needed
122
+ - Test: npm run inspect (MCP Inspector)
123
+ - Build: npm run build before marking any task DONE`;
124
+ const transportNote = mcpTransport === 'stdio'
125
+ ? `- Transport: stdio — server communicates via stdin/stdout, no HTTP port needed`
126
+ : mcpTransport === 'sse'
127
+ ? `- Transport: SSE — server exposes GET /sse and POST /messages endpoints`
128
+ : `- Transport: HTTP Stream — use StreamableHTTPServerTransport`;
129
+ return `# DARE Framework - Cursor Rules (MCP Server Project)
130
+
131
+ ## DARE Methodology
132
+ You are an AI assistant following the DARE methodology:
133
+ - **D**esign: Define MCP server requirements and capabilities
134
+ - **A**rchitect: Create technical blueprint and task graph
135
+ - **R**eview: Validate implementation against blueprint
136
+ - **E**xecute: Implement tools, resources, and prompts following the DAG
137
+
138
+ ## Core Rules
139
+ - Always read DARE/BLUEPRINT.md before implementing any tool or resource
140
+ - Update DARE/TASKS.md status after completing each task
141
+ - Never skip the Ralph Loop (build → test → inspect) before marking a task as DONE
142
+ - Test every tool with MCP Inspector before marking DONE
143
+ - Validate tool inputSchema matches actual handler logic exactly
144
+
145
+ ## MCP Server Configuration
146
+ - Transport: ${mcpTransport}
147
+ - Features: ${featuresStr}
148
+ ${transportNote}
149
+
150
+ ${langRules}
151
+
152
+ ## MCP Best Practices
153
+ - Keep tool names snake_case and descriptive
154
+ - Return structured content arrays, not plain strings
155
+ - Handle unknown tool/resource/prompt names with explicit errors
156
+ - Never expose secrets via tool outputs or resource contents
157
+ - Document every tool argument in inputSchema description fields
158
+
159
+ ## GraphRAG Context (${graphrag})
160
+ ${mcp ? `- Query MCP Server at http://localhost:3000 for context instead of reading full files` : '- Use DARE/BLUEPRINT.md as the single source of truth'}
161
+
162
+ ## Ralph Loop (Mandatory before DONE)
163
+ 1. Build (npm run build / python -m py_compile)
164
+ 2. Test (npm test / pytest)
165
+ 3. Inspect with MCP Inspector to verify tool contracts
166
+ 4. Only mark DONE if all 3 steps pass
167
+ `;
168
+ }
169
+ export function generateMcpAntigravityRules(config) {
170
+ const { mcpTransport = 'stdio', mcpLanguage = 'node-ts', mcpFeatures = ['tools'], graphrag, mcp } = config;
171
+ return `# DARE Framework - Antigravity Rules (MCP Server Project)
172
+
173
+ ## Agent Configuration
174
+ You are an autonomous AI agent implementing an MCP server using the DARE methodology.
175
+ Execute tasks from DARE/dare-dag.yaml in parallel when dependencies allow.
176
+
177
+ ## DARE Phases
178
+ - **Design**: Read DARE/DESIGN.md — what tools/resources/prompts does this MCP server expose?
179
+ - **Architect**: Read DARE/BLUEPRINT.md — tool schemas, transport, auth strategy
180
+ - **Review**: Test each tool with MCP Inspector before marking DONE
181
+ - **Execute**: Implement tasks, update DARE/TASKS.md
182
+
183
+ ## MCP Stack
184
+ - Language: ${mcpLanguage}
185
+ - Transport: ${mcpTransport}
186
+ - Features: ${mcpFeatures.join(', ')}
187
+
188
+ ## Implementation Rules
189
+ - Each tool must have a strict inputSchema — Claude uses it to call the tool
190
+ - Test with MCP Inspector after implementing each tool
191
+ - Never skip error handling for unknown tool names
192
+
193
+ ## Context Strategy (${graphrag})
194
+ ${mcp ? `- Query MCP Server at http://localhost:3000 for project context` : '- Read DARE/BLUEPRINT.md for context'}
195
+
196
+ ## Execution Rules
197
+ - Always check task dependencies before starting
198
+ - Update task status in DARE/TASKS.md in real-time
199
+ - Run Ralph Loop before marking any task as DONE
200
+ - Request human review for transport or auth design decisions
201
+ `;
202
+ }
108
203
  export function generateSharedConfig(projectName) {
109
204
  return `# DARE - ${projectName}
110
205
 
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,mBAAmB,CAAC,MAAsB;IACxD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAEpD,MAAM,YAAY,GAA2B;QAC3C,WAAW,EAAE;;;;;;+DAM8C;QAC3D,aAAa,EAAE;;;;;iCAKc;QAC7B,gBAAgB,EAAE;;;;;mCAKa;QAC/B,aAAa,EAAE;;;;;6CAK0B;KAC1C,CAAC;IAEF,MAAM,aAAa,GAA2B;QAC5C,KAAK,EAAE;;;;;uCAK4B;QACnC,GAAG,EAAE;;;;;sCAK6B;KACnC,CAAC;IAEF,OAAO;;;;;;;;;;;;;;;;;;;;EAoBP,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;;EAE7D,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;;uBAE7C,QAAQ;EAC7B,GAAG,CAAC,CAAC,CAAC;oFAC4E,CAAC,CAAC,CAAC,mEAAmE;;;;;;;CAOzJ,CAAC;AACF,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAsB;IAC7D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAEpD,OAAO;;;;;;;;;;;;;EAaP,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;EACtC,QAAQ,CAAC,CAAC,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;;uBAEpB,QAAQ;EAC7B,GAAG,CAAC,CAAC,CAAC;iDACyC,CAAC,CAAC,CAAC,sCAAsC;;;;;;;CAOzF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,OAAO,YAAY,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B/B,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dewtech/dare-cli",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "DARE Framework CLI - Interactive project setup and task execution",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -17,16 +17,23 @@
17
17
  "files": [
18
18
  "dist"
19
19
  ],
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "dev": "tsx watch src/bin/dare.ts",
23
+ "test": "vitest run",
24
+ "lint": "eslint src --ext .ts",
25
+ "format": "prettier --write src"
26
+ },
20
27
  "dependencies": {
28
+ "@dewtech/dare-core": "workspace:*",
21
29
  "chalk": "^5.3.0",
22
30
  "commander": "^11.0.0",
23
31
  "fs-extra": "^11.1.1",
24
32
  "inquirer": "^9.2.0",
25
33
  "ora": "^7.0.1",
26
34
  "yaml": "^2.3.1",
27
- "@dewtech/dare-core": "0.2.0",
28
- "@dewtech/dare-graphrag": "0.2.0",
29
- "@dewtech/dare-mcp-server": "0.2.0"
35
+ "@dewtech/dare-graphrag": "workspace:*",
36
+ "@dewtech/dare-mcp-server": "workspace:*"
30
37
  },
31
38
  "devDependencies": {
32
39
  "@types/fs-extra": "^11.0.1",
@@ -55,12 +62,5 @@
55
62
  },
56
63
  "engines": {
57
64
  "node": ">=18.0.0"
58
- },
59
- "scripts": {
60
- "build": "tsc",
61
- "dev": "tsx watch src/bin/dare.ts",
62
- "test": "vitest run",
63
- "lint": "eslint src --ext .ts",
64
- "format": "prettier --write src"
65
65
  }
66
- }
66
+ }