@dewtech/dare-cli 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/dare.js +2 -0
- package/dist/bin/dare.js.map +1 -1
- package/dist/commands/discover.d.ts +3 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +234 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +61 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/utils/project-detector.d.ts +15 -0
- package/dist/utils/project-detector.d.ts.map +1 -0
- package/dist/utils/project-detector.js +243 -0
- package/dist/utils/project-detector.js.map +1 -0
- package/dist/utils/project-generator.d.ts +5 -1
- package/dist/utils/project-generator.d.ts.map +1 -1
- package/dist/utils/project-generator.js +310 -28
- package/dist/utils/project-generator.js.map +1 -1
- package/dist/utils/templates.d.ts +9 -0
- package/dist/utils/templates.d.ts.map +1 -1
- package/dist/utils/templates.js +95 -0
- package/dist/utils/templates.js.map +1 -1
- package/package.json +12 -12
- package/LICENSE +0 -21
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
export async function detectProject(dir) {
|
|
4
|
+
const evidence = [];
|
|
5
|
+
let structure = 'unknown';
|
|
6
|
+
let backend;
|
|
7
|
+
let frontend;
|
|
8
|
+
let mcpLanguage;
|
|
9
|
+
let mcpTransport;
|
|
10
|
+
let confidence = 'low';
|
|
11
|
+
// Detect project name from directory
|
|
12
|
+
const name = path.basename(dir).replace(/[^a-z0-9-_]/gi, '-').toLowerCase();
|
|
13
|
+
// Check if DARE is already installed
|
|
14
|
+
const dareConfigPath = path.join(dir, 'dare.config.json');
|
|
15
|
+
const hasDare = await fs.pathExists(dareConfigPath);
|
|
16
|
+
let dareConfig;
|
|
17
|
+
if (hasDare) {
|
|
18
|
+
dareConfig = await fs.readJSON(dareConfigPath);
|
|
19
|
+
evidence.push('dare.config.json found (DARE already installed)');
|
|
20
|
+
}
|
|
21
|
+
// ── Check for monorepo indicators first ──────────────────────────────────
|
|
22
|
+
const hasBackendDir = await fs.pathExists(path.join(dir, 'backend'));
|
|
23
|
+
const hasFrontendDir = await fs.pathExists(path.join(dir, 'frontend'));
|
|
24
|
+
const hasPnpmWorkspace = await fs.pathExists(path.join(dir, 'pnpm-workspace.yaml'));
|
|
25
|
+
const hasLernaJson = await fs.pathExists(path.join(dir, 'lerna.json'));
|
|
26
|
+
if ((hasBackendDir && hasFrontendDir) || hasPnpmWorkspace || hasLernaJson) {
|
|
27
|
+
structure = 'monorepo';
|
|
28
|
+
confidence = 'medium';
|
|
29
|
+
if (hasBackendDir && hasFrontendDir)
|
|
30
|
+
evidence.push('backend/ and frontend/ directories found');
|
|
31
|
+
if (hasPnpmWorkspace)
|
|
32
|
+
evidence.push('pnpm-workspace.yaml found');
|
|
33
|
+
if (hasLernaJson)
|
|
34
|
+
evidence.push('lerna.json found');
|
|
35
|
+
}
|
|
36
|
+
// ── Check package.json ────────────────────────────────────────────────────
|
|
37
|
+
const packageJsonPath = path.join(dir, 'package.json');
|
|
38
|
+
if (await fs.pathExists(packageJsonPath)) {
|
|
39
|
+
const pkg = await fs.readJSON(packageJsonPath).catch(() => ({}));
|
|
40
|
+
const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
|
|
41
|
+
const pkgName = pkg.name;
|
|
42
|
+
// MCP detection — highest priority
|
|
43
|
+
if (deps['@modelcontextprotocol/sdk'] || deps['@modelcontextprotocol/server']) {
|
|
44
|
+
structure = 'mcp-server';
|
|
45
|
+
mcpLanguage = 'node-ts';
|
|
46
|
+
confidence = 'high';
|
|
47
|
+
evidence.push('@modelcontextprotocol/sdk found in package.json');
|
|
48
|
+
// Detect transport from scripts or deps
|
|
49
|
+
if (deps['express'] || deps['fastify']) {
|
|
50
|
+
mcpTransport = 'sse';
|
|
51
|
+
evidence.push('express/fastify found → likely SSE transport');
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
mcpTransport = 'stdio';
|
|
55
|
+
evidence.push('no HTTP framework found → likely stdio transport');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (deps['@nestjs/core'] || deps['@nestjs/common']) {
|
|
59
|
+
if (structure === 'unknown')
|
|
60
|
+
structure = 'backend';
|
|
61
|
+
backend = 'node-nestjs';
|
|
62
|
+
confidence = 'high';
|
|
63
|
+
evidence.push('@nestjs/core found in package.json');
|
|
64
|
+
}
|
|
65
|
+
else if (deps['express'] && structure !== 'monorepo') {
|
|
66
|
+
if (structure === 'unknown')
|
|
67
|
+
structure = 'backend';
|
|
68
|
+
backend = 'node-express';
|
|
69
|
+
confidence = 'medium';
|
|
70
|
+
evidence.push('express found in package.json');
|
|
71
|
+
}
|
|
72
|
+
else if (deps['react']) {
|
|
73
|
+
if (structure === 'unknown')
|
|
74
|
+
structure = 'frontend';
|
|
75
|
+
frontend = 'react';
|
|
76
|
+
confidence = 'high';
|
|
77
|
+
evidence.push('react found in package.json');
|
|
78
|
+
}
|
|
79
|
+
else if (deps['vue']) {
|
|
80
|
+
if (structure === 'unknown')
|
|
81
|
+
structure = 'frontend';
|
|
82
|
+
frontend = 'vue';
|
|
83
|
+
confidence = 'high';
|
|
84
|
+
evidence.push('vue found in package.json');
|
|
85
|
+
}
|
|
86
|
+
else if (deps['nuxt']) {
|
|
87
|
+
if (structure === 'unknown')
|
|
88
|
+
structure = 'frontend';
|
|
89
|
+
frontend = 'nuxt';
|
|
90
|
+
confidence = 'high';
|
|
91
|
+
evidence.push('nuxt found in package.json');
|
|
92
|
+
}
|
|
93
|
+
else if (pkg.name) {
|
|
94
|
+
evidence.push(`package.json found (name: ${pkgName})`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// ── Check Cargo.toml (Rust) ───────────────────────────────────────────────
|
|
98
|
+
const cargoPath = path.join(dir, 'Cargo.toml');
|
|
99
|
+
if (await fs.pathExists(cargoPath)) {
|
|
100
|
+
if (structure === 'unknown')
|
|
101
|
+
structure = 'backend';
|
|
102
|
+
backend = 'rust-axum';
|
|
103
|
+
confidence = 'high';
|
|
104
|
+
evidence.push('Cargo.toml found');
|
|
105
|
+
// Check if it's an MCP server built in Rust
|
|
106
|
+
const cargoContent = await fs.readFile(cargoPath, 'utf-8').catch(() => '');
|
|
107
|
+
if (cargoContent.includes('rmcp') || cargoContent.includes('mcp')) {
|
|
108
|
+
structure = 'mcp-server';
|
|
109
|
+
mcpLanguage = 'node-ts'; // closest we have, will ask
|
|
110
|
+
evidence.push('MCP dependency found in Cargo.toml');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// ── Check Python ──────────────────────────────────────────────────────────
|
|
114
|
+
const requirementsPath = path.join(dir, 'requirements.txt');
|
|
115
|
+
const pyprojectPath = path.join(dir, 'pyproject.toml');
|
|
116
|
+
const mainPyPath = path.join(dir, 'main.py');
|
|
117
|
+
const hasPython = await fs.pathExists(requirementsPath) || await fs.pathExists(pyprojectPath);
|
|
118
|
+
if (hasPython) {
|
|
119
|
+
let pyContent = '';
|
|
120
|
+
if (await fs.pathExists(requirementsPath)) {
|
|
121
|
+
pyContent += await fs.readFile(requirementsPath, 'utf-8').catch(() => '');
|
|
122
|
+
evidence.push('requirements.txt found');
|
|
123
|
+
}
|
|
124
|
+
if (await fs.pathExists(pyprojectPath)) {
|
|
125
|
+
pyContent += await fs.readFile(pyprojectPath, 'utf-8').catch(() => '');
|
|
126
|
+
evidence.push('pyproject.toml found');
|
|
127
|
+
}
|
|
128
|
+
if (await fs.pathExists(mainPyPath)) {
|
|
129
|
+
const mainContent = await fs.readFile(mainPyPath, 'utf-8').catch(() => '');
|
|
130
|
+
pyContent += mainContent;
|
|
131
|
+
}
|
|
132
|
+
const mcpPyPattern = /\bmcp\b|FastMCP|mcp\.server|@mcp\.tool/;
|
|
133
|
+
const fastApiPattern = /fastapi/i;
|
|
134
|
+
if (mcpPyPattern.test(pyContent)) {
|
|
135
|
+
structure = 'mcp-server';
|
|
136
|
+
mcpLanguage = 'python';
|
|
137
|
+
confidence = 'high';
|
|
138
|
+
evidence.push('mcp/FastMCP found in Python files');
|
|
139
|
+
if (pyContent.includes('sse') || pyContent.includes('transport="sse"')) {
|
|
140
|
+
mcpTransport = 'sse';
|
|
141
|
+
evidence.push('SSE transport detected in Python files');
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
mcpTransport = 'stdio';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else if (fastApiPattern.test(pyContent)) {
|
|
148
|
+
if (structure === 'unknown')
|
|
149
|
+
structure = 'backend';
|
|
150
|
+
backend = 'python-fastapi';
|
|
151
|
+
confidence = 'high';
|
|
152
|
+
evidence.push('fastapi found in Python requirements');
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
if (structure === 'unknown')
|
|
156
|
+
structure = 'backend';
|
|
157
|
+
if (!backend)
|
|
158
|
+
backend = 'python-fastapi';
|
|
159
|
+
confidence = 'medium';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// ── Check PHP / Laravel ───────────────────────────────────────────────────
|
|
163
|
+
const composerPath = path.join(dir, 'composer.json');
|
|
164
|
+
if (await fs.pathExists(composerPath)) {
|
|
165
|
+
if (structure === 'unknown')
|
|
166
|
+
structure = 'backend';
|
|
167
|
+
backend = 'php-laravel';
|
|
168
|
+
confidence = 'high';
|
|
169
|
+
evidence.push('composer.json found');
|
|
170
|
+
const composer = await fs.readJSON(composerPath).catch(() => ({}));
|
|
171
|
+
const require = composer.require ?? {};
|
|
172
|
+
if (require['laravel/framework']) {
|
|
173
|
+
evidence.push('laravel/framework found in composer.json');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// ── Detect frontend within a monorepo ─────────────────────────────────────
|
|
177
|
+
if (structure === 'monorepo' && hasFrontendDir) {
|
|
178
|
+
const frontendPkg = path.join(dir, 'frontend', 'package.json');
|
|
179
|
+
if (await fs.pathExists(frontendPkg)) {
|
|
180
|
+
const pkg = await fs.readJSON(frontendPkg).catch(() => ({}));
|
|
181
|
+
const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
|
|
182
|
+
if (deps['react']) {
|
|
183
|
+
frontend = 'react';
|
|
184
|
+
evidence.push('react found in frontend/package.json');
|
|
185
|
+
}
|
|
186
|
+
else if (deps['vue']) {
|
|
187
|
+
frontend = 'vue';
|
|
188
|
+
evidence.push('vue found in frontend/package.json');
|
|
189
|
+
}
|
|
190
|
+
else if (deps['nuxt']) {
|
|
191
|
+
frontend = 'nuxt';
|
|
192
|
+
evidence.push('nuxt found in frontend/package.json');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (structure === 'monorepo' && hasBackendDir) {
|
|
197
|
+
const backendPkg = path.join(dir, 'backend', 'package.json');
|
|
198
|
+
if (await fs.pathExists(backendPkg)) {
|
|
199
|
+
const pkg = await fs.readJSON(backendPkg).catch(() => ({}));
|
|
200
|
+
const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
|
|
201
|
+
if (deps['@nestjs/core']) {
|
|
202
|
+
backend = 'node-nestjs';
|
|
203
|
+
evidence.push('nestjs found in backend/package.json');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (evidence.length === 0) {
|
|
208
|
+
evidence.push('No recognizable project files found');
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
name,
|
|
212
|
+
structure,
|
|
213
|
+
backend,
|
|
214
|
+
frontend,
|
|
215
|
+
mcpLanguage,
|
|
216
|
+
mcpTransport,
|
|
217
|
+
hasDare,
|
|
218
|
+
dareConfig,
|
|
219
|
+
confidence,
|
|
220
|
+
evidence,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
export function formatDetectionReport(detected) {
|
|
224
|
+
const lines = [];
|
|
225
|
+
const confidenceColor = detected.confidence === 'high' ? '✅' : detected.confidence === 'medium' ? '⚠️' : '❓';
|
|
226
|
+
lines.push(` Structure: ${detected.structure} ${confidenceColor}`);
|
|
227
|
+
if (detected.backend)
|
|
228
|
+
lines.push(` Backend: ${detected.backend}`);
|
|
229
|
+
if (detected.frontend)
|
|
230
|
+
lines.push(` Frontend: ${detected.frontend}`);
|
|
231
|
+
if (detected.mcpLanguage)
|
|
232
|
+
lines.push(` MCP Lang: ${detected.mcpLanguage}`);
|
|
233
|
+
if (detected.mcpTransport)
|
|
234
|
+
lines.push(` Transport: ${detected.mcpTransport}`);
|
|
235
|
+
lines.push(` DARE: ${detected.hasDare ? '✅ installed' : '❌ not installed'}`);
|
|
236
|
+
lines.push('');
|
|
237
|
+
lines.push(' Evidence:');
|
|
238
|
+
for (const e of detected.evidence) {
|
|
239
|
+
lines.push(` · ${e}`);
|
|
240
|
+
}
|
|
241
|
+
return lines.join('\n');
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=project-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-detector.js","sourceRoot":"","sources":["../../src/utils/project-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
export interface ProjectConfig {
|
|
2
2
|
name: string;
|
|
3
|
-
structure: 'monorepo' | 'backend' | 'frontend';
|
|
3
|
+
structure: 'monorepo' | 'backend' | 'frontend' | 'mcp-server';
|
|
4
4
|
backend?: string;
|
|
5
5
|
frontend?: string;
|
|
6
|
+
mcpTransport?: 'stdio' | 'sse' | 'http-stream';
|
|
7
|
+
mcpLanguage?: 'node-ts' | 'python';
|
|
8
|
+
mcpFeatures?: ('tools' | 'resources' | 'prompts')[];
|
|
6
9
|
ide: 'cursor' | 'antigravity' | 'hybrid';
|
|
7
10
|
graphrag: 'sqlite' | 'json' | 'neo4j';
|
|
8
11
|
mcp: boolean;
|
|
9
12
|
outputDir: string;
|
|
10
13
|
}
|
|
11
14
|
export declare function generateProjectStructure(config: ProjectConfig): Promise<void>;
|
|
15
|
+
export declare function installDareToExistingProject(projectDir: string, config: Omit<ProjectConfig, 'outputDir'>): Promise<void>;
|
|
12
16
|
//# sourceMappingURL=project-generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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,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"}
|