@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.
- package/README.md +178 -104
- 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
package/dist/commands/init.js
CHANGED
|
@@ -32,13 +32,49 @@ export const initCommand = new Command('init')
|
|
|
32
32
|
{ name: '๐๏ธ Monorepo (backend + frontend)', value: 'monorepo' },
|
|
33
33
|
{ name: 'โ๏ธ Backend only', value: 'backend' },
|
|
34
34
|
{ name: '๐จ Frontend only', value: 'frontend' },
|
|
35
|
+
{ name: '๐ MCP Server', value: 'mcp-server' },
|
|
35
36
|
],
|
|
36
37
|
},
|
|
38
|
+
// โโ MCP Server questions โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
39
|
+
{
|
|
40
|
+
type: 'list',
|
|
41
|
+
name: 'mcpLanguage',
|
|
42
|
+
message: 'MCP server language:',
|
|
43
|
+
when: (ans) => ans.structure === 'mcp-server',
|
|
44
|
+
choices: [
|
|
45
|
+
{ name: '๐ฆ TypeScript / Node.js', value: 'node-ts' },
|
|
46
|
+
{ name: '๐ Python', value: 'python' },
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
type: 'list',
|
|
51
|
+
name: 'mcpTransport',
|
|
52
|
+
message: 'Transport type:',
|
|
53
|
+
when: (ans) => ans.structure === 'mcp-server',
|
|
54
|
+
choices: [
|
|
55
|
+
{ name: '๐ stdio (CLI tools, local agents)', value: 'stdio' },
|
|
56
|
+
{ name: '๐ SSE (web integrations, remote)', value: 'sse' },
|
|
57
|
+
{ name: 'โก HTTP Stream (streamable HTTP)', value: 'http-stream' },
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
type: 'checkbox',
|
|
62
|
+
name: 'mcpFeatures',
|
|
63
|
+
message: 'MCP capabilities to include:',
|
|
64
|
+
when: (ans) => ans.structure === 'mcp-server',
|
|
65
|
+
choices: [
|
|
66
|
+
{ name: '๐ง Tools (callable functions)', value: 'tools', checked: true },
|
|
67
|
+
{ name: '๐ฆ Resources (readable context)', value: 'resources', checked: false },
|
|
68
|
+
{ name: '๐ฌ Prompts (prompt templates)', value: 'prompts', checked: false },
|
|
69
|
+
],
|
|
70
|
+
validate: (selected) => selected.length > 0 || 'Select at least one capability',
|
|
71
|
+
},
|
|
72
|
+
// โโ Standard backend / frontend questions โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
37
73
|
{
|
|
38
74
|
type: 'list',
|
|
39
75
|
name: 'backend',
|
|
40
76
|
message: 'Backend stack:',
|
|
41
|
-
when: (ans) => ans.structure !== 'frontend',
|
|
77
|
+
when: (ans) => ans.structure !== 'frontend' && ans.structure !== 'mcp-server',
|
|
42
78
|
choices: [
|
|
43
79
|
{ name: '๐ฆ Rust / Axum', value: 'rust-axum' },
|
|
44
80
|
{ name: '๐ข Node.js / NestJS', value: 'node-nestjs' },
|
|
@@ -50,12 +86,13 @@ export const initCommand = new Command('init')
|
|
|
50
86
|
type: 'list',
|
|
51
87
|
name: 'frontend',
|
|
52
88
|
message: 'Frontend stack:',
|
|
53
|
-
when: (ans) => ans.structure !== 'backend',
|
|
89
|
+
when: (ans) => ans.structure !== 'backend' && ans.structure !== 'mcp-server',
|
|
54
90
|
choices: [
|
|
55
91
|
{ name: 'โ๏ธ React 18+', value: 'react' },
|
|
56
92
|
{ name: '๐ Vue 3+', value: 'vue' },
|
|
57
93
|
],
|
|
58
94
|
},
|
|
95
|
+
// โโ Common questions โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
59
96
|
{
|
|
60
97
|
type: 'list',
|
|
61
98
|
name: 'ide',
|
|
@@ -79,7 +116,7 @@ export const initCommand = new Command('init')
|
|
|
79
116
|
{
|
|
80
117
|
type: 'confirm',
|
|
81
118
|
name: 'mcp',
|
|
82
|
-
message: 'Enable MCP Server for context queries?',
|
|
119
|
+
message: 'Enable DARE MCP Server for context queries?',
|
|
83
120
|
default: true,
|
|
84
121
|
},
|
|
85
122
|
]);
|
|
@@ -91,6 +128,9 @@ export const initCommand = new Command('init')
|
|
|
91
128
|
structure: answers.structure,
|
|
92
129
|
backend: answers.backend,
|
|
93
130
|
frontend: answers.frontend,
|
|
131
|
+
mcpTransport: answers.mcpTransport,
|
|
132
|
+
mcpLanguage: answers.mcpLanguage,
|
|
133
|
+
mcpFeatures: answers.mcpFeatures,
|
|
94
134
|
ide: answers.ide,
|
|
95
135
|
graphrag: answers.graphrag,
|
|
96
136
|
mcp: answers.mcp,
|
|
@@ -99,9 +139,24 @@ export const initCommand = new Command('init')
|
|
|
99
139
|
spinner.succeed(chalk.green(`Project ${chalk.bold(name)} created successfully!`));
|
|
100
140
|
console.log(chalk.cyan('\n๐ Next steps:\n'));
|
|
101
141
|
console.log(` ${chalk.gray('1.')} cd ${name}`);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
142
|
+
if (answers.structure === 'mcp-server') {
|
|
143
|
+
const installCmd = answers.mcpLanguage === 'python' ? 'pip install -r requirements.txt' : 'npm install';
|
|
144
|
+
const devCmd = answers.mcpLanguage === 'python' ? 'python main.py' : 'npm run dev';
|
|
145
|
+
const inspectCmd = answers.mcpLanguage === 'python'
|
|
146
|
+
? 'npx @modelcontextprotocol/inspector python main.py'
|
|
147
|
+
: 'npm run inspect';
|
|
148
|
+
console.log(` ${chalk.gray('2.')} ${installCmd}`);
|
|
149
|
+
console.log(` ${chalk.gray('3.')} dare design "Describe what this MCP server exposes"`);
|
|
150
|
+
console.log(` ${chalk.gray('4.')} dare blueprint`);
|
|
151
|
+
console.log(` ${chalk.gray('5.')} dare execute --parallel`);
|
|
152
|
+
console.log(` ${chalk.gray('6.')} ${inspectCmd} ${chalk.gray('โ test with MCP Inspector')}`);
|
|
153
|
+
console.log(` ${chalk.gray('7.')} ${devCmd}\n`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.log(` ${chalk.gray('2.')} dare design "Describe your project here"`);
|
|
157
|
+
console.log(` ${chalk.gray('3.')} dare blueprint`);
|
|
158
|
+
console.log(` ${chalk.gray('4.')} dare execute --parallel\n`);
|
|
159
|
+
}
|
|
105
160
|
}
|
|
106
161
|
catch (err) {
|
|
107
162
|
spinner.fail(chalk.red('Failed to create project'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface DetectedProject {
|
|
2
|
+
structure: 'monorepo' | 'backend' | 'frontend' | 'mcp-server' | 'unknown';
|
|
3
|
+
backend?: string;
|
|
4
|
+
frontend?: string;
|
|
5
|
+
mcpLanguage?: 'node-ts' | 'python';
|
|
6
|
+
mcpTransport?: 'stdio' | 'sse' | 'http-stream';
|
|
7
|
+
name: string;
|
|
8
|
+
hasDare: boolean;
|
|
9
|
+
dareConfig?: Record<string, unknown>;
|
|
10
|
+
confidence: 'high' | 'medium' | 'low';
|
|
11
|
+
evidence: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function detectProject(dir: string): Promise<DetectedProject>;
|
|
14
|
+
export declare function formatDetectionReport(detected: DetectedProject): string;
|
|
15
|
+
//# sourceMappingURL=project-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"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"}
|
|
@@ -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"}
|