@dewtech/dare-cli
Advanced tools
| import { Command } from 'commander'; | ||
| export declare const discoverCommand: Command; | ||
| //# sourceMappingURL=discover.d.ts.map |
| {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,eAAe,SAgOxB,CAAC"} |
| import { Command } from 'commander'; | ||
| import inquirer from 'inquirer'; | ||
| import chalk from 'chalk'; | ||
| import ora from 'ora'; | ||
| import path from 'path'; | ||
| import { detectProject, formatDetectionReport } from '../utils/project-detector.js'; | ||
| import { installDareToExistingProject } from '../utils/project-generator.js'; | ||
| export const discoverCommand = new Command('discover') | ||
| .description('Detect an existing project and install DARE methodology files') | ||
| .option('-d, --dir <path>', 'Target directory (default: current directory)') | ||
| .option('--check', 'Only show detection results without installing') | ||
| .action(async (opts) => { | ||
| const targetDir = path.resolve(opts.dir ?? process.cwd()); | ||
| console.log(chalk.blue.bold('\n🔍 DARE Framework - Project Discovery\n')); | ||
| console.log(chalk.gray(` Scanning: ${targetDir}\n`)); | ||
| const spinner = ora('Analyzing project...').start(); | ||
| const detected = await detectProject(targetDir); | ||
| spinner.stop(); | ||
| // ── Show detection results ───────────────────────────────────────────── | ||
| console.log(chalk.yellow('Detection results:\n')); | ||
| console.log(formatDetectionReport(detected)); | ||
| console.log(''); | ||
| if (opts.check) { | ||
| if (detected.hasDare) { | ||
| console.log(chalk.green('✅ DARE is already installed in this project.')); | ||
| if (detected.dareConfig) { | ||
| console.log(chalk.gray('\nCurrent dare.config.json:')); | ||
| console.log(chalk.gray(JSON.stringify(detected.dareConfig, null, 2))); | ||
| } | ||
| } | ||
| else { | ||
| console.log(chalk.yellow('⚠️ DARE is not installed. Run `dare discover` without --check to install it.')); | ||
| } | ||
| return; | ||
| } | ||
| // ── Already installed — offer reconfigure ───────────────────────────── | ||
| if (detected.hasDare) { | ||
| console.log(chalk.green('✅ DARE is already installed in this project.\n')); | ||
| const { action } = await inquirer.prompt([ | ||
| { | ||
| type: 'list', | ||
| name: 'action', | ||
| message: 'What would you like to do?', | ||
| choices: [ | ||
| { name: '🔄 Reconfigure DARE (update rules and config)', value: 'reconfigure' }, | ||
| { name: '🚪 Exit', value: 'exit' }, | ||
| ], | ||
| }, | ||
| ]); | ||
| if (action === 'exit') | ||
| return; | ||
| } | ||
| // ── Confirm or correct detected values ──────────────────────────────── | ||
| console.log(chalk.cyan('Confirm project details (press Enter to accept detected values):\n')); | ||
| const structureChoices = [ | ||
| { name: '🏗️ Monorepo (backend + frontend)', value: 'monorepo' }, | ||
| { name: '⚙️ Backend only', value: 'backend' }, | ||
| { name: '🎨 Frontend only', value: 'frontend' }, | ||
| { name: '🔌 MCP Server', value: 'mcp-server' }, | ||
| { name: '❓ Unknown / Other', value: 'unknown' }, | ||
| ]; | ||
| const answers = await inquirer.prompt([ | ||
| { | ||
| type: 'input', | ||
| name: 'name', | ||
| message: 'Project name:', | ||
| default: detected.name, | ||
| validate: (input) => { | ||
| if (!input.trim()) | ||
| return 'Project name cannot be empty'; | ||
| return true; | ||
| }, | ||
| }, | ||
| { | ||
| type: 'list', | ||
| name: 'structure', | ||
| message: 'Project structure:', | ||
| default: detected.structure !== 'unknown' ? detected.structure : 'backend', | ||
| choices: structureChoices, | ||
| }, | ||
| // ── MCP-specific ──────────────────────────────────────────────────── | ||
| { | ||
| type: 'list', | ||
| name: 'mcpLanguage', | ||
| message: 'MCP server language:', | ||
| when: (ans) => ans.structure === 'mcp-server', | ||
| default: detected.mcpLanguage ?? 'node-ts', | ||
| choices: [ | ||
| { name: '🟦 TypeScript / Node.js', value: 'node-ts' }, | ||
| { name: '🐍 Python', value: 'python' }, | ||
| ], | ||
| }, | ||
| { | ||
| type: 'list', | ||
| name: 'mcpTransport', | ||
| message: 'Transport type:', | ||
| when: (ans) => ans.structure === 'mcp-server', | ||
| default: detected.mcpTransport ?? 'stdio', | ||
| choices: [ | ||
| { name: '📟 stdio (CLI tools, local agents)', value: 'stdio' }, | ||
| { name: '🌐 SSE (web integrations, remote)', value: 'sse' }, | ||
| { name: '⚡ HTTP Stream (streamable HTTP)', value: 'http-stream' }, | ||
| ], | ||
| }, | ||
| { | ||
| type: 'checkbox', | ||
| name: 'mcpFeatures', | ||
| message: 'MCP capabilities present in this project:', | ||
| when: (ans) => ans.structure === 'mcp-server', | ||
| choices: [ | ||
| { name: '🔧 Tools (callable functions)', value: 'tools', checked: true }, | ||
| { name: '📦 Resources (readable context)', value: 'resources', checked: false }, | ||
| { name: '💬 Prompts (prompt templates)', value: 'prompts', checked: false }, | ||
| ], | ||
| validate: (selected) => selected.length > 0 || 'Select at least one capability', | ||
| }, | ||
| // ── Backend stack ─────────────────────────────────────────────────── | ||
| { | ||
| type: 'list', | ||
| name: 'backend', | ||
| message: 'Backend stack:', | ||
| when: (ans) => ans.structure === 'backend' || ans.structure === 'monorepo', | ||
| default: detected.backend ?? 'node-nestjs', | ||
| choices: [ | ||
| { name: '🦀 Rust / Axum', value: 'rust-axum' }, | ||
| { name: '🟢 Node.js / NestJS', value: 'node-nestjs' }, | ||
| { name: '🐍 Python / FastAPI', value: 'python-fastapi' }, | ||
| { name: '🐘 PHP / Laravel', value: 'php-laravel' }, | ||
| { name: '📦 Other / Not listed', value: 'other' }, | ||
| ], | ||
| }, | ||
| { | ||
| type: 'list', | ||
| name: 'frontend', | ||
| message: 'Frontend stack:', | ||
| when: (ans) => ans.structure === 'frontend' || ans.structure === 'monorepo', | ||
| default: detected.frontend ?? 'react', | ||
| choices: [ | ||
| { name: '⚛️ React 18+', value: 'react' }, | ||
| { name: '💚 Vue 3+', value: 'vue' }, | ||
| { name: '💚 Nuxt 3', value: 'nuxt' }, | ||
| { name: '📦 Other / Not listed', value: 'other' }, | ||
| ], | ||
| }, | ||
| // ── Common ────────────────────────────────────────────────────────── | ||
| { | ||
| type: 'list', | ||
| name: 'ide', | ||
| message: 'Primary IDE / Agent:', | ||
| choices: [ | ||
| { name: '🖱️ Cursor', value: 'cursor' }, | ||
| { name: '🚀 Antigravity', value: 'antigravity' }, | ||
| { name: '🔀 Both (Hybrid)', value: 'hybrid' }, | ||
| ], | ||
| }, | ||
| { | ||
| type: 'list', | ||
| name: 'graphrag', | ||
| message: 'GraphRAG backend:', | ||
| choices: [ | ||
| { name: '🗄️ SQLite (recommended - fast, local)', value: 'sqlite' }, | ||
| { name: '📄 JSON Graph (simple, no dependencies)', value: 'json' }, | ||
| { name: '🐳 Neo4j Docker (enterprise)', value: 'neo4j' }, | ||
| ], | ||
| }, | ||
| { | ||
| type: 'confirm', | ||
| name: 'mcp', | ||
| message: 'Enable DARE MCP Server for context queries?', | ||
| default: true, | ||
| }, | ||
| { | ||
| type: 'confirm', | ||
| name: 'confirmInstall', | ||
| message: (ans) => { | ||
| const files = buildFileList(ans); | ||
| return `Ready to install DARE. Files to create:\n${files}\n Proceed?`; | ||
| }, | ||
| default: true, | ||
| }, | ||
| ]); | ||
| if (!answers.confirmInstall) { | ||
| console.log(chalk.yellow('\nInstallation cancelled.\n')); | ||
| return; | ||
| } | ||
| const installSpinner = ora('Installing DARE...').start(); | ||
| try { | ||
| await installDareToExistingProject(targetDir, { | ||
| name: answers.name, | ||
| structure: answers.structure, | ||
| backend: answers.backend, | ||
| frontend: answers.frontend, | ||
| mcpTransport: answers.mcpTransport, | ||
| mcpLanguage: answers.mcpLanguage, | ||
| mcpFeatures: answers.mcpFeatures, | ||
| ide: answers.ide, | ||
| graphrag: answers.graphrag, | ||
| mcp: answers.mcp, | ||
| }); | ||
| installSpinner.succeed(chalk.green('DARE installed successfully!')); | ||
| console.log(chalk.cyan('\n📋 Next steps:\n')); | ||
| console.log(` ${chalk.gray('1.')} dare design "Describe what this project does"`); | ||
| console.log(` ${chalk.gray('2.')} dare blueprint`); | ||
| console.log(` ${chalk.gray('3.')} dare execute --parallel\n`); | ||
| if (answers.structure === 'mcp-server') { | ||
| const inspectCmd = answers.mcpLanguage === 'python' | ||
| ? 'npx @modelcontextprotocol/inspector python main.py' | ||
| : 'npx @modelcontextprotocol/inspector node dist/index.js'; | ||
| console.log(chalk.gray(` Tip: test your MCP server with: ${inspectCmd}\n`)); | ||
| } | ||
| } | ||
| catch (err) { | ||
| installSpinner.fail(chalk.red('Failed to install DARE')); | ||
| console.error(err); | ||
| process.exit(1); | ||
| } | ||
| }); | ||
| function buildFileList(ans) { | ||
| const files = [ | ||
| ' · dare.config.json', | ||
| ' · DARE/ (README.md, EXECUTION/)', | ||
| ]; | ||
| const ide = ans.ide; | ||
| if (ide === 'cursor' || ide === 'hybrid') { | ||
| files.push(' · .cursorrules'); | ||
| files.push(' · .cursor/rules/ + .cursor/commands/'); | ||
| } | ||
| if (ide === 'antigravity' || ide === 'hybrid') { | ||
| files.push(' · .antigravityrules'); | ||
| files.push(' · .agents/skills/ + .agents/workflows/'); | ||
| } | ||
| return files.join('\n'); | ||
| } | ||
| //# sourceMappingURL=discover.js.map |
| {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"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"} |
| export interface DetectedProject { | ||
| structure: 'monorepo' | 'backend' | 'frontend' | 'mcp-server' | 'unknown'; | ||
| backend?: string; | ||
| frontend?: string; | ||
| mcpLanguage?: 'node-ts' | 'python'; | ||
| mcpTransport?: 'stdio' | 'sse' | 'http-stream'; | ||
| name: string; | ||
| hasDare: boolean; | ||
| dareConfig?: Record<string, unknown>; | ||
| confidence: 'high' | 'medium' | 'low'; | ||
| evidence: string[]; | ||
| } | ||
| export declare function detectProject(dir: string): Promise<DetectedProject>; | ||
| export declare function formatDetectionReport(detected: DetectedProject): string; | ||
| //# sourceMappingURL=project-detector.d.ts.map |
| {"version":3,"file":"project-detector.d.ts","sourceRoot":"","sources":["../../src/utils/project-detector.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACnC,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,CAAC;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA4MzE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAiBvE"} |
| import fs from 'fs-extra'; | ||
| import path from 'path'; | ||
| export async function detectProject(dir) { | ||
| const evidence = []; | ||
| let structure = 'unknown'; | ||
| let backend; | ||
| let frontend; | ||
| let mcpLanguage; | ||
| let mcpTransport; | ||
| let confidence = 'low'; | ||
| // Detect project name from directory | ||
| const name = path.basename(dir).replace(/[^a-z0-9-_]/gi, '-').toLowerCase(); | ||
| // Check if DARE is already installed | ||
| const dareConfigPath = path.join(dir, 'dare.config.json'); | ||
| const hasDare = await fs.pathExists(dareConfigPath); | ||
| let dareConfig; | ||
| if (hasDare) { | ||
| dareConfig = await fs.readJSON(dareConfigPath); | ||
| evidence.push('dare.config.json found (DARE already installed)'); | ||
| } | ||
| // ── Check for monorepo indicators first ────────────────────────────────── | ||
| const hasBackendDir = await fs.pathExists(path.join(dir, 'backend')); | ||
| const hasFrontendDir = await fs.pathExists(path.join(dir, 'frontend')); | ||
| const hasPnpmWorkspace = await fs.pathExists(path.join(dir, 'pnpm-workspace.yaml')); | ||
| const hasLernaJson = await fs.pathExists(path.join(dir, 'lerna.json')); | ||
| if ((hasBackendDir && hasFrontendDir) || hasPnpmWorkspace || hasLernaJson) { | ||
| structure = 'monorepo'; | ||
| confidence = 'medium'; | ||
| if (hasBackendDir && hasFrontendDir) | ||
| evidence.push('backend/ and frontend/ directories found'); | ||
| if (hasPnpmWorkspace) | ||
| evidence.push('pnpm-workspace.yaml found'); | ||
| if (hasLernaJson) | ||
| evidence.push('lerna.json found'); | ||
| } | ||
| // ── Check package.json ──────────────────────────────────────────────────── | ||
| const packageJsonPath = path.join(dir, 'package.json'); | ||
| if (await fs.pathExists(packageJsonPath)) { | ||
| const pkg = await fs.readJSON(packageJsonPath).catch(() => ({})); | ||
| const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) }; | ||
| const pkgName = pkg.name; | ||
| // MCP detection — highest priority | ||
| if (deps['@modelcontextprotocol/sdk'] || deps['@modelcontextprotocol/server']) { | ||
| structure = 'mcp-server'; | ||
| mcpLanguage = 'node-ts'; | ||
| confidence = 'high'; | ||
| evidence.push('@modelcontextprotocol/sdk found in package.json'); | ||
| // Detect transport from scripts or deps | ||
| if (deps['express'] || deps['fastify']) { | ||
| mcpTransport = 'sse'; | ||
| evidence.push('express/fastify found → likely SSE transport'); | ||
| } | ||
| else { | ||
| mcpTransport = 'stdio'; | ||
| evidence.push('no HTTP framework found → likely stdio transport'); | ||
| } | ||
| } | ||
| else if (deps['@nestjs/core'] || deps['@nestjs/common']) { | ||
| if (structure === 'unknown') | ||
| structure = 'backend'; | ||
| backend = 'node-nestjs'; | ||
| confidence = 'high'; | ||
| evidence.push('@nestjs/core found in package.json'); | ||
| } | ||
| else if (deps['express'] && structure !== 'monorepo') { | ||
| if (structure === 'unknown') | ||
| structure = 'backend'; | ||
| backend = 'node-express'; | ||
| confidence = 'medium'; | ||
| evidence.push('express found in package.json'); | ||
| } | ||
| else if (deps['react']) { | ||
| if (structure === 'unknown') | ||
| structure = 'frontend'; | ||
| frontend = 'react'; | ||
| confidence = 'high'; | ||
| evidence.push('react found in package.json'); | ||
| } | ||
| else if (deps['vue']) { | ||
| if (structure === 'unknown') | ||
| structure = 'frontend'; | ||
| frontend = 'vue'; | ||
| confidence = 'high'; | ||
| evidence.push('vue found in package.json'); | ||
| } | ||
| else if (deps['nuxt']) { | ||
| if (structure === 'unknown') | ||
| structure = 'frontend'; | ||
| frontend = 'nuxt'; | ||
| confidence = 'high'; | ||
| evidence.push('nuxt found in package.json'); | ||
| } | ||
| else if (pkg.name) { | ||
| evidence.push(`package.json found (name: ${pkgName})`); | ||
| } | ||
| } | ||
| // ── Check Cargo.toml (Rust) ─────────────────────────────────────────────── | ||
| const cargoPath = path.join(dir, 'Cargo.toml'); | ||
| if (await fs.pathExists(cargoPath)) { | ||
| if (structure === 'unknown') | ||
| structure = 'backend'; | ||
| backend = 'rust-axum'; | ||
| confidence = 'high'; | ||
| evidence.push('Cargo.toml found'); | ||
| // Check if it's an MCP server built in Rust | ||
| const cargoContent = await fs.readFile(cargoPath, 'utf-8').catch(() => ''); | ||
| if (cargoContent.includes('rmcp') || cargoContent.includes('mcp')) { | ||
| structure = 'mcp-server'; | ||
| mcpLanguage = 'node-ts'; // closest we have, will ask | ||
| evidence.push('MCP dependency found in Cargo.toml'); | ||
| } | ||
| } | ||
| // ── Check Python ────────────────────────────────────────────────────────── | ||
| const requirementsPath = path.join(dir, 'requirements.txt'); | ||
| const pyprojectPath = path.join(dir, 'pyproject.toml'); | ||
| const mainPyPath = path.join(dir, 'main.py'); | ||
| const hasPython = await fs.pathExists(requirementsPath) || await fs.pathExists(pyprojectPath); | ||
| if (hasPython) { | ||
| let pyContent = ''; | ||
| if (await fs.pathExists(requirementsPath)) { | ||
| pyContent += await fs.readFile(requirementsPath, 'utf-8').catch(() => ''); | ||
| evidence.push('requirements.txt found'); | ||
| } | ||
| if (await fs.pathExists(pyprojectPath)) { | ||
| pyContent += await fs.readFile(pyprojectPath, 'utf-8').catch(() => ''); | ||
| evidence.push('pyproject.toml found'); | ||
| } | ||
| if (await fs.pathExists(mainPyPath)) { | ||
| const mainContent = await fs.readFile(mainPyPath, 'utf-8').catch(() => ''); | ||
| pyContent += mainContent; | ||
| } | ||
| const mcpPyPattern = /\bmcp\b|FastMCP|mcp\.server|@mcp\.tool/; | ||
| const fastApiPattern = /fastapi/i; | ||
| if (mcpPyPattern.test(pyContent)) { | ||
| structure = 'mcp-server'; | ||
| mcpLanguage = 'python'; | ||
| confidence = 'high'; | ||
| evidence.push('mcp/FastMCP found in Python files'); | ||
| if (pyContent.includes('sse') || pyContent.includes('transport="sse"')) { | ||
| mcpTransport = 'sse'; | ||
| evidence.push('SSE transport detected in Python files'); | ||
| } | ||
| else { | ||
| mcpTransport = 'stdio'; | ||
| } | ||
| } | ||
| else if (fastApiPattern.test(pyContent)) { | ||
| if (structure === 'unknown') | ||
| structure = 'backend'; | ||
| backend = 'python-fastapi'; | ||
| confidence = 'high'; | ||
| evidence.push('fastapi found in Python requirements'); | ||
| } | ||
| else { | ||
| if (structure === 'unknown') | ||
| structure = 'backend'; | ||
| if (!backend) | ||
| backend = 'python-fastapi'; | ||
| confidence = 'medium'; | ||
| } | ||
| } | ||
| // ── Check PHP / Laravel ─────────────────────────────────────────────────── | ||
| const composerPath = path.join(dir, 'composer.json'); | ||
| if (await fs.pathExists(composerPath)) { | ||
| if (structure === 'unknown') | ||
| structure = 'backend'; | ||
| backend = 'php-laravel'; | ||
| confidence = 'high'; | ||
| evidence.push('composer.json found'); | ||
| const composer = await fs.readJSON(composerPath).catch(() => ({})); | ||
| const require = composer.require ?? {}; | ||
| if (require['laravel/framework']) { | ||
| evidence.push('laravel/framework found in composer.json'); | ||
| } | ||
| } | ||
| // ── Detect frontend within a monorepo ───────────────────────────────────── | ||
| if (structure === 'monorepo' && hasFrontendDir) { | ||
| const frontendPkg = path.join(dir, 'frontend', 'package.json'); | ||
| if (await fs.pathExists(frontendPkg)) { | ||
| const pkg = await fs.readJSON(frontendPkg).catch(() => ({})); | ||
| const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) }; | ||
| if (deps['react']) { | ||
| frontend = 'react'; | ||
| evidence.push('react found in frontend/package.json'); | ||
| } | ||
| else if (deps['vue']) { | ||
| frontend = 'vue'; | ||
| evidence.push('vue found in frontend/package.json'); | ||
| } | ||
| else if (deps['nuxt']) { | ||
| frontend = 'nuxt'; | ||
| evidence.push('nuxt found in frontend/package.json'); | ||
| } | ||
| } | ||
| } | ||
| if (structure === 'monorepo' && hasBackendDir) { | ||
| const backendPkg = path.join(dir, 'backend', 'package.json'); | ||
| if (await fs.pathExists(backendPkg)) { | ||
| const pkg = await fs.readJSON(backendPkg).catch(() => ({})); | ||
| const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) }; | ||
| if (deps['@nestjs/core']) { | ||
| backend = 'node-nestjs'; | ||
| evidence.push('nestjs found in backend/package.json'); | ||
| } | ||
| } | ||
| } | ||
| if (evidence.length === 0) { | ||
| evidence.push('No recognizable project files found'); | ||
| } | ||
| return { | ||
| name, | ||
| structure, | ||
| backend, | ||
| frontend, | ||
| mcpLanguage, | ||
| mcpTransport, | ||
| hasDare, | ||
| dareConfig, | ||
| confidence, | ||
| evidence, | ||
| }; | ||
| } | ||
| export function formatDetectionReport(detected) { | ||
| const lines = []; | ||
| const confidenceColor = detected.confidence === 'high' ? '✅' : detected.confidence === 'medium' ? '⚠️' : '❓'; | ||
| lines.push(` Structure: ${detected.structure} ${confidenceColor}`); | ||
| if (detected.backend) | ||
| lines.push(` Backend: ${detected.backend}`); | ||
| if (detected.frontend) | ||
| lines.push(` Frontend: ${detected.frontend}`); | ||
| if (detected.mcpLanguage) | ||
| lines.push(` MCP Lang: ${detected.mcpLanguage}`); | ||
| if (detected.mcpTransport) | ||
| lines.push(` Transport: ${detected.mcpTransport}`); | ||
| lines.push(` DARE: ${detected.hasDare ? '✅ installed' : '❌ not installed'}`); | ||
| lines.push(''); | ||
| lines.push(' Evidence:'); | ||
| for (const e of detected.evidence) { | ||
| lines.push(` · ${e}`); | ||
| } | ||
| return lines.join('\n'); | ||
| } | ||
| //# sourceMappingURL=project-detector.js.map |
| {"version":3,"file":"project-detector.js","sourceRoot":"","sources":["../../src/utils/project-detector.ts"],"names":[],"mappings":"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"} |
+2
-0
@@ -7,2 +7,3 @@ #!/usr/bin/env node | ||
| import { executeCommand } from '../commands/execute.js'; | ||
| import { discoverCommand } from '../commands/discover.js'; | ||
| const program = new Command(); | ||
@@ -14,2 +15,3 @@ program | ||
| program.addCommand(initCommand); | ||
| program.addCommand(discoverCommand); | ||
| program.addCommand(designCommand); | ||
@@ -16,0 +18,0 @@ program.addCommand(blueprintCommand); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"dare.js","sourceRoot":"","sources":["../../src/bin/dare.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,6FAA6F,CAAC;KAC1G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAEnC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"} | ||
| {"version":3,"file":"dare.js","sourceRoot":"","sources":["../../src/bin/dare.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,6FAA6F,CAAC;KAC1G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAEnC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,WAAW,SA0GpB,CAAC"} | ||
| {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SAoKpB,CAAC"} |
@@ -35,9 +35,45 @@ import { Command } from 'commander'; | ||
| { name: '🎨 Frontend only', value: 'frontend' }, | ||
| { name: '🔌 MCP Server', value: 'mcp-server' }, | ||
| ], | ||
| }, | ||
| // ── MCP Server questions ────────────────────────────────────────────── | ||
| { | ||
| type: 'list', | ||
| name: 'mcpLanguage', | ||
| message: 'MCP server language:', | ||
| when: (ans) => ans.structure === 'mcp-server', | ||
| choices: [ | ||
| { name: '🟦 TypeScript / Node.js', value: 'node-ts' }, | ||
| { name: '🐍 Python', value: 'python' }, | ||
| ], | ||
| }, | ||
| { | ||
| type: 'list', | ||
| name: 'mcpTransport', | ||
| message: 'Transport type:', | ||
| when: (ans) => ans.structure === 'mcp-server', | ||
| choices: [ | ||
| { name: '📟 stdio (CLI tools, local agents)', value: 'stdio' }, | ||
| { name: '🌐 SSE (web integrations, remote)', value: 'sse' }, | ||
| { name: '⚡ HTTP Stream (streamable HTTP)', value: 'http-stream' }, | ||
| ], | ||
| }, | ||
| { | ||
| type: 'checkbox', | ||
| name: 'mcpFeatures', | ||
| message: 'MCP capabilities to include:', | ||
| when: (ans) => ans.structure === 'mcp-server', | ||
| choices: [ | ||
| { name: '🔧 Tools (callable functions)', value: 'tools', checked: true }, | ||
| { name: '📦 Resources (readable context)', value: 'resources', checked: false }, | ||
| { name: '💬 Prompts (prompt templates)', value: 'prompts', checked: false }, | ||
| ], | ||
| validate: (selected) => selected.length > 0 || 'Select at least one capability', | ||
| }, | ||
| // ── Standard backend / frontend questions ───────────────────────────── | ||
| { | ||
| type: 'list', | ||
| name: 'backend', | ||
| message: 'Backend stack:', | ||
| when: (ans) => ans.structure !== 'frontend', | ||
| when: (ans) => ans.structure !== 'frontend' && ans.structure !== 'mcp-server', | ||
| choices: [ | ||
@@ -54,3 +90,3 @@ { name: '🦀 Rust / Axum', value: 'rust-axum' }, | ||
| message: 'Frontend stack:', | ||
| when: (ans) => ans.structure !== 'backend', | ||
| when: (ans) => ans.structure !== 'backend' && ans.structure !== 'mcp-server', | ||
| choices: [ | ||
@@ -61,2 +97,3 @@ { name: '⚛️ React 18+', value: 'react' }, | ||
| }, | ||
| // ── Common questions ────────────────────────────────────────────────── | ||
| { | ||
@@ -85,3 +122,3 @@ type: 'list', | ||
| name: 'mcp', | ||
| message: 'Enable MCP Server for context queries?', | ||
| message: 'Enable DARE MCP Server for context queries?', | ||
| default: true, | ||
@@ -98,2 +135,5 @@ }, | ||
| frontend: answers.frontend, | ||
| mcpTransport: answers.mcpTransport, | ||
| mcpLanguage: answers.mcpLanguage, | ||
| mcpFeatures: answers.mcpFeatures, | ||
| ide: answers.ide, | ||
@@ -107,5 +147,20 @@ graphrag: answers.graphrag, | ||
| console.log(` ${chalk.gray('1.')} cd ${name}`); | ||
| console.log(` ${chalk.gray('2.')} dare design "Describe your project here"`); | ||
| console.log(` ${chalk.gray('3.')} dare blueprint`); | ||
| console.log(` ${chalk.gray('4.')} dare execute --parallel\n`); | ||
| if (answers.structure === 'mcp-server') { | ||
| const installCmd = answers.mcpLanguage === 'python' ? 'pip install -r requirements.txt' : 'npm install'; | ||
| const devCmd = answers.mcpLanguage === 'python' ? 'python main.py' : 'npm run dev'; | ||
| const inspectCmd = answers.mcpLanguage === 'python' | ||
| ? 'npx @modelcontextprotocol/inspector python main.py' | ||
| : 'npm run inspect'; | ||
| console.log(` ${chalk.gray('2.')} ${installCmd}`); | ||
| console.log(` ${chalk.gray('3.')} dare design "Describe what this MCP server exposes"`); | ||
| console.log(` ${chalk.gray('4.')} dare blueprint`); | ||
| console.log(` ${chalk.gray('5.')} dare execute --parallel`); | ||
| console.log(` ${chalk.gray('6.')} ${inspectCmd} ${chalk.gray('← test with MCP Inspector')}`); | ||
| console.log(` ${chalk.gray('7.')} ${devCmd}\n`); | ||
| } | ||
| else { | ||
| console.log(` ${chalk.gray('2.')} dare design "Describe your project here"`); | ||
| console.log(` ${chalk.gray('3.')} dare blueprint`); | ||
| console.log(` ${chalk.gray('4.')} dare execute --parallel\n`); | ||
| } | ||
| } | ||
@@ -112,0 +167,0 @@ catch (err) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"} |
| export interface ProjectConfig { | ||
| name: string; | ||
| structure: 'monorepo' | 'backend' | 'frontend'; | ||
| structure: 'monorepo' | 'backend' | 'frontend' | 'mcp-server'; | ||
| backend?: string; | ||
| frontend?: string; | ||
| mcpTransport?: 'stdio' | 'sse' | 'http-stream'; | ||
| mcpLanguage?: 'node-ts' | 'python'; | ||
| mcpFeatures?: ('tools' | 'resources' | 'prompts')[]; | ||
| ide: 'cursor' | 'antigravity' | 'hybrid'; | ||
@@ -12,2 +15,3 @@ graphrag: 'sqlite' | 'json' | 'neo4j'; | ||
| export declare function generateProjectStructure(config: ProjectConfig): Promise<void>; | ||
| export declare function installDareToExistingProject(projectDir: string, config: Omit<ProjectConfig, 'outputDir'>): Promise<void>; | ||
| //# sourceMappingURL=project-generator.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"project-generator.d.ts","sourceRoot":"","sources":["../../src/utils/project-generator.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;IACzC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4FnF"} | ||
| {"version":3,"file":"project-generator.d.ts","sourceRoot":"","sources":["../../src/utils/project-generator.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,CAAC;IAC/C,WAAW,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACnC,WAAW,CAAC,EAAE,CAAC,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;IACpD,GAAG,EAAE,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;IACzC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqGnF;AAED,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CA+Df"} |
| import fs from 'fs-extra'; | ||
| import path from 'path'; | ||
| import { generateCursorRules, generateAntigravityRules, generateSharedConfig } from './templates.js'; | ||
| import { generateCursorRules, generateAntigravityRules, generateSharedConfig, generateMcpCursorRules, generateMcpAntigravityRules } from './templates.js'; | ||
| export async function generateProjectStructure(config) { | ||
@@ -11,18 +11,33 @@ const { outputDir, name, structure, backend, frontend, ide, graphrag, mcp } = config; | ||
| // Write dare.config.json | ||
| await fs.writeJSON(path.join(outputDir, 'dare.config.json'), { name, structure, backend, frontend, ide, graphrag, mcp, version: '0.1.0' }, { spaces: 2 }); | ||
| const configData = { name, structure, backend, frontend, ide, graphrag, mcp, version: '0.1.0' }; | ||
| if (structure === 'mcp-server') { | ||
| configData.mcpTransport = config.mcpTransport; | ||
| configData.mcpLanguage = config.mcpLanguage; | ||
| configData.mcpFeatures = config.mcpFeatures; | ||
| } | ||
| await fs.writeJSON(path.join(outputDir, 'dare.config.json'), configData, { spaces: 2 }); | ||
| // Write .gitignore | ||
| 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`); | ||
| // Write .cursorrules (global) | ||
| const gitignoreExtras = structure === 'mcp-server' && config.mcpLanguage === 'python' | ||
| ? '\n__pycache__/\n*.py[cod]\n.venv/\n' | ||
| : ''; | ||
| 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}`); | ||
| // Cursor rules | ||
| if (ide === 'cursor' || ide === 'hybrid') { | ||
| await fs.writeFile(path.join(outputDir, '.cursorrules'), generateCursorRules({ backend, frontend, graphrag, mcp })); | ||
| const cursorRulesContent = structure === 'mcp-server' | ||
| ? generateMcpCursorRules({ mcpTransport: config.mcpTransport, mcpLanguage: config.mcpLanguage, mcpFeatures: config.mcpFeatures, graphrag, mcp }) | ||
| : generateCursorRules({ backend, frontend, graphrag, mcp }); | ||
| await fs.writeFile(path.join(outputDir, '.cursorrules'), cursorRulesContent); | ||
| await fs.ensureDir(path.join(outputDir, '.cursor', 'rules')); | ||
| await fs.ensureDir(path.join(outputDir, '.cursor', 'commands')); | ||
| // Write stack-specific skills | ||
| if (backend) { | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${backend}.mdc`), generateStackSkill(backend)); | ||
| if (structure === 'mcp-server') { | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'rules', 'skill-mcp-server.mdc'), generateMcpStackSkill(config.mcpLanguage || 'node-ts')); | ||
| } | ||
| if (frontend) { | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${frontend}.mdc`), generateStackSkill(frontend)); | ||
| else { | ||
| if (backend) { | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${backend}.mdc`), generateStackSkill(backend)); | ||
| } | ||
| if (frontend) { | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${frontend}.mdc`), generateStackSkill(frontend)); | ||
| } | ||
| } | ||
| // Write DARE commands for Cursor | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'generate-design.md'), `# Generate Design\nGenerate a DESIGN.md for the described feature.\n`); | ||
@@ -32,5 +47,8 @@ await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'generate-blueprint.md'), `# Generate Blueprint\nGenerate a BLUEPRINT.md from the DESIGN.md.\n`); | ||
| } | ||
| // Write .antigravityrules | ||
| // Antigravity rules | ||
| if (ide === 'antigravity' || ide === 'hybrid') { | ||
| await fs.writeFile(path.join(outputDir, '.antigravityrules'), generateAntigravityRules({ backend, frontend, graphrag, mcp })); | ||
| const antigravityContent = structure === 'mcp-server' | ||
| ? generateMcpAntigravityRules({ mcpTransport: config.mcpTransport, mcpLanguage: config.mcpLanguage, mcpFeatures: config.mcpFeatures, graphrag, mcp }) | ||
| : generateAntigravityRules({ backend, frontend, graphrag, mcp }); | ||
| await fs.writeFile(path.join(outputDir, '.antigravityrules'), antigravityContent); | ||
| await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-design')); | ||
@@ -42,15 +60,260 @@ await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-blueprint')); | ||
| } | ||
| // Write shared config | ||
| // Write shared DARE README | ||
| await fs.writeFile(path.join(outputDir, 'DARE', 'README.md'), generateSharedConfig(name)); | ||
| // Create backend structure | ||
| if (structure !== 'frontend' && backend) { | ||
| const backendDir = structure === 'monorepo' ? path.join(outputDir, 'backend') : outputDir; | ||
| await generateBackendTemplate(backendDir, backend); | ||
| // Generate project templates | ||
| if (structure === 'mcp-server') { | ||
| await generateMcpTemplate(outputDir, config); | ||
| } | ||
| // Create frontend structure | ||
| if (structure !== 'backend' && frontend) { | ||
| const frontendDir = structure === 'monorepo' ? path.join(outputDir, 'frontend') : outputDir; | ||
| await generateFrontendTemplate(frontendDir, frontend); | ||
| else { | ||
| if (structure !== 'frontend' && backend) { | ||
| const backendDir = structure === 'monorepo' ? path.join(outputDir, 'backend') : outputDir; | ||
| await generateBackendTemplate(backendDir, backend); | ||
| } | ||
| if (structure !== 'backend' && frontend) { | ||
| const frontendDir = structure === 'monorepo' ? path.join(outputDir, 'frontend') : outputDir; | ||
| await generateFrontendTemplate(frontendDir, frontend); | ||
| } | ||
| } | ||
| } | ||
| export async function installDareToExistingProject(projectDir, config) { | ||
| const outputDir = projectDir; | ||
| const { name, structure, backend, frontend, ide, graphrag, mcp } = config; | ||
| await fs.ensureDir(path.join(outputDir, 'DARE')); | ||
| await fs.ensureDir(path.join(outputDir, 'DARE', 'EXECUTION')); | ||
| const configData = { name, structure, backend, frontend, ide, graphrag, mcp, version: '0.1.0', installedAt: new Date().toISOString() }; | ||
| if (structure === 'mcp-server') { | ||
| configData.mcpTransport = config.mcpTransport; | ||
| configData.mcpLanguage = config.mcpLanguage; | ||
| configData.mcpFeatures = config.mcpFeatures; | ||
| } | ||
| await fs.writeJSON(path.join(outputDir, 'dare.config.json'), configData, { spaces: 2 }); | ||
| await fs.writeFile(path.join(outputDir, 'DARE', 'README.md'), generateSharedConfig(name)); | ||
| if (ide === 'cursor' || ide === 'hybrid') { | ||
| const cursorRulesContent = structure === 'mcp-server' | ||
| ? generateMcpCursorRules({ mcpTransport: config.mcpTransport, mcpLanguage: config.mcpLanguage, mcpFeatures: config.mcpFeatures, graphrag, mcp }) | ||
| : generateCursorRules({ backend, frontend, graphrag, mcp }); | ||
| await fs.writeFile(path.join(outputDir, '.cursorrules'), cursorRulesContent); | ||
| await fs.ensureDir(path.join(outputDir, '.cursor', 'rules')); | ||
| await fs.ensureDir(path.join(outputDir, '.cursor', 'commands')); | ||
| if (structure === 'mcp-server') { | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'rules', 'skill-mcp-server.mdc'), generateMcpStackSkill(config.mcpLanguage || 'node-ts')); | ||
| } | ||
| else { | ||
| if (backend) { | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${backend}.mdc`), generateStackSkill(backend)); | ||
| } | ||
| if (frontend) { | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${frontend}.mdc`), generateStackSkill(frontend)); | ||
| } | ||
| } | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'generate-design.md'), `# Generate Design\nGenerate a DESIGN.md for the described feature.\n`); | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'generate-blueprint.md'), `# Generate Blueprint\nGenerate a BLUEPRINT.md from the DESIGN.md.\n`); | ||
| await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'execute-task.md'), `# Execute Task\nExecute the specified task from TASKS.md.\n`); | ||
| } | ||
| if (ide === 'antigravity' || ide === 'hybrid') { | ||
| const antigravityContent = structure === 'mcp-server' | ||
| ? generateMcpAntigravityRules({ mcpTransport: config.mcpTransport, mcpLanguage: config.mcpLanguage, mcpFeatures: config.mcpFeatures, graphrag, mcp }) | ||
| : generateAntigravityRules({ backend, frontend, graphrag, mcp }); | ||
| await fs.writeFile(path.join(outputDir, '.antigravityrules'), antigravityContent); | ||
| await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-design')); | ||
| await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-blueprint')); | ||
| await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-execute')); | ||
| await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-tasks')); | ||
| await fs.ensureDir(path.join(outputDir, '.agents', 'workflows')); | ||
| } | ||
| } | ||
| async function generateMcpTemplate(dir, config) { | ||
| const { mcpLanguage = 'node-ts', mcpTransport = 'stdio', mcpFeatures = ['tools'] } = config; | ||
| await fs.ensureDir(path.join(dir, 'src')); | ||
| if (mcpLanguage === 'node-ts') { | ||
| const hasResources = mcpFeatures.includes('resources'); | ||
| const hasPrompts = mcpFeatures.includes('prompts'); | ||
| const capabilities = []; | ||
| if (mcpFeatures.includes('tools')) | ||
| capabilities.push('tools: {}'); | ||
| if (hasResources) | ||
| capabilities.push('resources: {}'); | ||
| if (hasPrompts) | ||
| capabilities.push('prompts: {}'); | ||
| const transportImport = mcpTransport === 'stdio' | ||
| ? `import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';` | ||
| : `import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';\nimport express from 'express';`; | ||
| const transportSetup = mcpTransport === 'stdio' | ||
| ? `const transport = new StdioServerTransport();\nawait server.connect(transport);` | ||
| : `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'));`; | ||
| const resourceSection = hasResources ? ` | ||
| import { | ||
| ListResourcesRequestSchema, | ||
| ReadResourceRequestSchema, | ||
| } from '@modelcontextprotocol/sdk/types.js'; | ||
| server.setRequestHandler(ListResourcesRequestSchema, async () => ({ | ||
| resources: [ | ||
| { | ||
| uri: 'resource://example', | ||
| name: 'Example Resource', | ||
| description: 'An example resource', | ||
| mimeType: 'text/plain', | ||
| }, | ||
| ], | ||
| })); | ||
| server.setRequestHandler(ReadResourceRequestSchema, async (request) => { | ||
| if (request.params.uri === 'resource://example') { | ||
| return { contents: [{ uri: request.params.uri, mimeType: 'text/plain', text: 'Example content' }] }; | ||
| } | ||
| throw new Error(\`Unknown resource: \${request.params.uri}\`); | ||
| }); | ||
| ` : ''; | ||
| const promptSection = hasPrompts ? ` | ||
| import { | ||
| ListPromptsRequestSchema, | ||
| GetPromptRequestSchema, | ||
| } from '@modelcontextprotocol/sdk/types.js'; | ||
| server.setRequestHandler(ListPromptsRequestSchema, async () => ({ | ||
| prompts: [ | ||
| { | ||
| name: 'example-prompt', | ||
| description: 'An example prompt template', | ||
| arguments: [{ name: 'topic', description: 'Topic to write about', required: true }], | ||
| }, | ||
| ], | ||
| })); | ||
| server.setRequestHandler(GetPromptRequestSchema, async (request) => { | ||
| if (request.params.name === 'example-prompt') { | ||
| const topic = request.params.arguments?.topic ?? 'general'; | ||
| return { | ||
| description: 'Example prompt', | ||
| messages: [{ role: 'user', content: { type: 'text', text: \`Write about: \${topic}\` } }], | ||
| }; | ||
| } | ||
| throw new Error(\`Unknown prompt: \${request.params.name}\`); | ||
| }); | ||
| ` : ''; | ||
| const indexContent = `import { Server } from '@modelcontextprotocol/sdk/server/index.js'; | ||
| ${transportImport} | ||
| import { | ||
| CallToolRequestSchema, | ||
| ListToolsRequestSchema, | ||
| } from '@modelcontextprotocol/sdk/types.js'; | ||
| const server = new Server( | ||
| { name: '${config.name}', version: '0.1.0' }, | ||
| { capabilities: { ${capabilities.join(', ')} } } | ||
| ); | ||
| server.setRequestHandler(ListToolsRequestSchema, async () => ({ | ||
| tools: [ | ||
| { | ||
| name: 'hello', | ||
| description: 'Says hello to a given name', | ||
| inputSchema: { | ||
| type: 'object', | ||
| properties: { | ||
| name: { type: 'string', description: 'Name to greet' }, | ||
| }, | ||
| required: ['name'], | ||
| }, | ||
| }, | ||
| ], | ||
| })); | ||
| server.setRequestHandler(CallToolRequestSchema, async (request) => { | ||
| if (request.params.name === 'hello') { | ||
| const { name } = request.params.arguments as { name: string }; | ||
| return { content: [{ type: 'text', text: \`Hello, \${name}!\` }] }; | ||
| } | ||
| throw new Error(\`Unknown tool: \${request.params.name}\`); | ||
| }); | ||
| ${resourceSection}${promptSection} | ||
| ${transportSetup} | ||
| `; | ||
| await fs.writeFile(path.join(dir, 'src', 'index.ts'), indexContent); | ||
| const extraDeps = mcpTransport !== 'stdio' ? { express: '^4.18.0' } : {}; | ||
| const extraDevDeps = mcpTransport !== 'stdio' ? { '@types/express': '^4.17.0' } : {}; | ||
| await fs.writeJSON(path.join(dir, 'package.json'), { | ||
| name: config.name, | ||
| version: '0.1.0', | ||
| type: 'module', | ||
| scripts: { | ||
| build: 'tsc', | ||
| start: 'node dist/index.js', | ||
| dev: 'tsx src/index.ts', | ||
| test: 'vitest', | ||
| inspect: `npx @modelcontextprotocol/inspector node dist/index.js`, | ||
| }, | ||
| dependencies: { | ||
| '@modelcontextprotocol/sdk': '^1.0.0', | ||
| ...extraDeps, | ||
| }, | ||
| devDependencies: { | ||
| typescript: '^5.0.0', | ||
| tsx: '^4.0.0', | ||
| vitest: '^1.0.0', | ||
| '@types/node': '^20.0.0', | ||
| ...extraDevDeps, | ||
| }, | ||
| }, { spaces: 2 }); | ||
| await fs.writeJSON(path.join(dir, 'tsconfig.json'), { | ||
| compilerOptions: { | ||
| target: 'ES2022', | ||
| module: 'Node16', | ||
| moduleResolution: 'Node16', | ||
| outDir: 'dist', | ||
| rootDir: 'src', | ||
| strict: true, | ||
| esModuleInterop: true, | ||
| skipLibCheck: true, | ||
| }, | ||
| include: ['src'], | ||
| }, { spaces: 2 }); | ||
| } | ||
| else { | ||
| // Python MCP | ||
| const hasResources = mcpFeatures.includes('resources'); | ||
| const hasPrompts = mcpFeatures.includes('prompts'); | ||
| const resourceSection = hasResources ? ` | ||
| @mcp.resource("resource://example") | ||
| def example_resource() -> str: | ||
| """An example resource.""" | ||
| return "Example content" | ||
| ` : ''; | ||
| const promptSection = hasPrompts ? ` | ||
| @mcp.prompt() | ||
| def example_prompt(topic: str) -> str: | ||
| """An example prompt template.""" | ||
| return f"Write about: {topic}" | ||
| ` : ''; | ||
| const transportLine = mcpTransport === 'stdio' ? '' : '\n# For SSE transport:\n# mcp.run(transport="sse", host="0.0.0.0", port=8000)\n'; | ||
| await fs.writeFile(path.join(dir, 'main.py'), `from mcp.server.fastmcp import FastMCP | ||
| mcp = FastMCP("${config.name}") | ||
| @mcp.tool() | ||
| def hello(name: str) -> str: | ||
| """Says hello to a given name.""" | ||
| return f"Hello, {name}!" | ||
| ${resourceSection}${promptSection} | ||
| if __name__ == "__main__": | ||
| mcp.run()${transportLine} | ||
| `); | ||
| await fs.writeFile(path.join(dir, 'requirements.txt'), `mcp>=1.0.0\n`); | ||
| await fs.writeFile(path.join(dir, 'pyproject.toml'), `[project] | ||
| name = "${config.name}" | ||
| version = "0.1.0" | ||
| requires-python = ">=3.11" | ||
| dependencies = ["mcp>=1.0.0"] | ||
| [build-system] | ||
| requires = ["hatchling"] | ||
| build-backend = "hatchling.build" | ||
| `); | ||
| } | ||
| } | ||
| async function generateBackendTemplate(dir, stack) { | ||
@@ -62,3 +325,2 @@ await fs.ensureDir(path.join(dir, 'src')); | ||
| 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`); | ||
| 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`); | ||
| break; | ||
@@ -68,3 +330,2 @@ case 'node-nestjs': | ||
| 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`); | ||
| 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`); | ||
| break; | ||
@@ -74,7 +335,5 @@ case 'python-fastapi': | ||
| await fs.writeFile(path.join(dir, 'requirements.txt'), `fastapi>=0.100.0\nuvicorn>=0.23.0\npydantic>=2.0.0\n`); | ||
| 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`); | ||
| break; | ||
| case 'php-laravel': | ||
| 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 }); | ||
| 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`); | ||
| break; | ||
@@ -89,3 +348,2 @@ } | ||
| 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`); | ||
| 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`); | ||
| break; | ||
@@ -95,6 +353,30 @@ case 'vue': | ||
| 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`); | ||
| 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`); | ||
| break; | ||
| } | ||
| } | ||
| function generateMcpStackSkill(language) { | ||
| if (language === 'python') { | ||
| return `--- | ||
| description: Python MCP server development skill | ||
| --- | ||
| # Python MCP Skill | ||
| - Use FastMCP for rapid server development | ||
| - Decorate tools with @mcp.tool(), resources with @mcp.resource(), prompts with @mcp.prompt() | ||
| - Use type hints — FastMCP derives the JSON schema automatically | ||
| - Test with: npx @modelcontextprotocol/inspector python main.py | ||
| - Use mcp.run() for stdio, mcp.run(transport="sse") for SSE | ||
| `; | ||
| } | ||
| return `--- | ||
| description: Node.js/TypeScript MCP server development skill | ||
| --- | ||
| # TypeScript MCP Skill | ||
| - Import Server from @modelcontextprotocol/sdk/server/index.js | ||
| - Use StdioServerTransport for CLI tools, SSEServerTransport for web integrations | ||
| - Define tools with ListToolsRequestSchema + CallToolRequestSchema handlers | ||
| - Keep inputSchema strict — Claude uses it to call your tools correctly | ||
| - Test with: npm run inspect (uses @modelcontextprotocol/inspector) | ||
| - Build before shipping: npm run build | ||
| `; | ||
| } | ||
| function generateStackSkill(stack) { | ||
@@ -101,0 +383,0 @@ const skills = { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"project-generator.js","sourceRoot":"","sources":["../../src/utils/project-generator.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"project-generator.js","sourceRoot":"","sources":["../../src/utils/project-generator.ts"],"names":[],"mappings":"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"} |
@@ -7,6 +7,15 @@ interface TemplateConfig { | ||
| } | ||
| interface McpTemplateConfig { | ||
| mcpTransport?: string; | ||
| mcpLanguage?: string; | ||
| mcpFeatures?: string[]; | ||
| graphrag: string; | ||
| mcp: boolean; | ||
| } | ||
| export declare function generateCursorRules(config: TemplateConfig): string; | ||
| export declare function generateAntigravityRules(config: TemplateConfig): string; | ||
| export declare function generateMcpCursorRules(config: McpTemplateConfig): string; | ||
| export declare function generateMcpAntigravityRules(config: McpTemplateConfig): string; | ||
| export declare function generateSharedConfig(projectName: string): string; | ||
| export {}; | ||
| //# sourceMappingURL=templates.d.ts.map |
@@ -1,1 +0,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"} | ||
| {"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"} |
@@ -108,2 +108,97 @@ export function generateCursorRules(config) { | ||
| } | ||
| export function generateMcpCursorRules(config) { | ||
| const { mcpTransport = 'stdio', mcpLanguage = 'node-ts', mcpFeatures = ['tools'], graphrag, mcp } = config; | ||
| const featuresStr = mcpFeatures.join(', '); | ||
| const langRules = mcpLanguage === 'python' | ||
| ? `## Language: Python | ||
| - Use FastMCP (@mcp.tool, @mcp.resource, @mcp.prompt decorators) | ||
| - Type all arguments — FastMCP builds JSON schema from type hints | ||
| - Use docstrings as tool/resource/prompt descriptions | ||
| - Test: npx @modelcontextprotocol/inspector python main.py | ||
| - Lint: ruff check . && mypy .` | ||
| : `## Language: TypeScript | ||
| - Import from '@modelcontextprotocol/sdk/server/index.js' and types | ||
| - Always define strict inputSchema for every tool (Claude depends on it) | ||
| - Use zod for runtime validation when needed | ||
| - Test: npm run inspect (MCP Inspector) | ||
| - Build: npm run build before marking any task DONE`; | ||
| const transportNote = mcpTransport === 'stdio' | ||
| ? `- Transport: stdio — server communicates via stdin/stdout, no HTTP port needed` | ||
| : mcpTransport === 'sse' | ||
| ? `- Transport: SSE — server exposes GET /sse and POST /messages endpoints` | ||
| : `- Transport: HTTP Stream — use StreamableHTTPServerTransport`; | ||
| return `# DARE Framework - Cursor Rules (MCP Server Project) | ||
| ## DARE Methodology | ||
| You are an AI assistant following the DARE methodology: | ||
| - **D**esign: Define MCP server requirements and capabilities | ||
| - **A**rchitect: Create technical blueprint and task graph | ||
| - **R**eview: Validate implementation against blueprint | ||
| - **E**xecute: Implement tools, resources, and prompts following the DAG | ||
| ## Core Rules | ||
| - Always read DARE/BLUEPRINT.md before implementing any tool or resource | ||
| - Update DARE/TASKS.md status after completing each task | ||
| - Never skip the Ralph Loop (build → test → inspect) before marking a task as DONE | ||
| - Test every tool with MCP Inspector before marking DONE | ||
| - Validate tool inputSchema matches actual handler logic exactly | ||
| ## MCP Server Configuration | ||
| - Transport: ${mcpTransport} | ||
| - Features: ${featuresStr} | ||
| ${transportNote} | ||
| ${langRules} | ||
| ## MCP Best Practices | ||
| - Keep tool names snake_case and descriptive | ||
| - Return structured content arrays, not plain strings | ||
| - Handle unknown tool/resource/prompt names with explicit errors | ||
| - Never expose secrets via tool outputs or resource contents | ||
| - Document every tool argument in inputSchema description fields | ||
| ## GraphRAG Context (${graphrag}) | ||
| ${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'} | ||
| ## Ralph Loop (Mandatory before DONE) | ||
| 1. Build (npm run build / python -m py_compile) | ||
| 2. Test (npm test / pytest) | ||
| 3. Inspect with MCP Inspector to verify tool contracts | ||
| 4. Only mark DONE if all 3 steps pass | ||
| `; | ||
| } | ||
| export function generateMcpAntigravityRules(config) { | ||
| const { mcpTransport = 'stdio', mcpLanguage = 'node-ts', mcpFeatures = ['tools'], graphrag, mcp } = config; | ||
| return `# DARE Framework - Antigravity Rules (MCP Server Project) | ||
| ## Agent Configuration | ||
| You are an autonomous AI agent implementing an MCP server using the DARE methodology. | ||
| Execute tasks from DARE/dare-dag.yaml in parallel when dependencies allow. | ||
| ## DARE Phases | ||
| - **Design**: Read DARE/DESIGN.md — what tools/resources/prompts does this MCP server expose? | ||
| - **Architect**: Read DARE/BLUEPRINT.md — tool schemas, transport, auth strategy | ||
| - **Review**: Test each tool with MCP Inspector before marking DONE | ||
| - **Execute**: Implement tasks, update DARE/TASKS.md | ||
| ## MCP Stack | ||
| - Language: ${mcpLanguage} | ||
| - Transport: ${mcpTransport} | ||
| - Features: ${mcpFeatures.join(', ')} | ||
| ## Implementation Rules | ||
| - Each tool must have a strict inputSchema — Claude uses it to call the tool | ||
| - Test with MCP Inspector after implementing each tool | ||
| - Never skip error handling for unknown tool names | ||
| ## Context Strategy (${graphrag}) | ||
| ${mcp ? `- Query MCP Server at http://localhost:3000 for project context` : '- Read DARE/BLUEPRINT.md for context'} | ||
| ## Execution Rules | ||
| - Always check task dependencies before starting | ||
| - Update task status in DARE/TASKS.md in real-time | ||
| - Run Ralph Loop before marking any task as DONE | ||
| - Request human review for transport or auth design decisions | ||
| `; | ||
| } | ||
| export function generateSharedConfig(projectName) { | ||
@@ -110,0 +205,0 @@ return `# DARE - ${projectName} |
@@ -1,1 +0,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"} | ||
| {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"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"} |
+12
-12
| { | ||
| "name": "@dewtech/dare-cli", | ||
| "version": "0.2.0", | ||
| "version": "0.3.0", | ||
| "description": "DARE Framework CLI - Interactive project setup and task execution", | ||
@@ -20,3 +20,11 @@ "type": "module", | ||
| ], | ||
| "scripts": { | ||
| "build": "tsc", | ||
| "dev": "tsx watch src/bin/dare.ts", | ||
| "test": "vitest run", | ||
| "lint": "eslint src --ext .ts", | ||
| "format": "prettier --write src" | ||
| }, | ||
| "dependencies": { | ||
| "@dewtech/dare-core": "workspace:*", | ||
| "chalk": "^5.3.0", | ||
@@ -28,5 +36,4 @@ "commander": "^11.0.0", | ||
| "yaml": "^2.3.1", | ||
| "@dewtech/dare-core": "0.2.0", | ||
| "@dewtech/dare-graphrag": "0.2.0", | ||
| "@dewtech/dare-mcp-server": "0.2.0" | ||
| "@dewtech/dare-graphrag": "workspace:*", | ||
| "@dewtech/dare-mcp-server": "workspace:*" | ||
| }, | ||
@@ -60,10 +67,3 @@ "devDependencies": { | ||
| "node": ">=18.0.0" | ||
| }, | ||
| "scripts": { | ||
| "build": "tsc", | ||
| "dev": "tsx watch src/bin/dare.ts", | ||
| "test": "vitest run", | ||
| "lint": "eslint src --ext .ts", | ||
| "format": "prettier --write src" | ||
| } | ||
| } | ||
| } |
-21
| MIT License | ||
| Copyright (c) 2026 Dewtech Technologies | ||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
| The above copyright notice and this permission notice shall be included in all | ||
| copies or substantial portions of the Software. | ||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| SOFTWARE. |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
163514
72.62%62
12.73%1984
85.07%8
14.29%- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed