@su-record/vibe 3.2.19 → 3.2.20
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/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +13 -1
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/tools/dispatch/deterministicSignals.d.ts.map +1 -1
- package/dist/tools/dispatch/deterministicSignals.js +15 -10
- package/dist/tools/dispatch/deterministicSignals.js.map +1 -1
- package/dist/tools/dispatch/vibePaths.d.ts +7 -0
- package/dist/tools/dispatch/vibePaths.d.ts.map +1 -0
- package/dist/tools/dispatch/vibePaths.js +35 -0
- package/dist/tools/dispatch/vibePaths.js.map +1 -0
- package/hooks/scripts/code-check.js +90 -16
- package/hooks/scripts/lib/anchor.js +15 -4
- package/hooks/scripts/lib/inbox.js +10 -2
- package/package.json +1 -1
- package/dist/infra/lib/DeepInit.d.ts +0 -60
- package/dist/infra/lib/DeepInit.d.ts.map +0 -1
- package/dist/infra/lib/DeepInit.js +0 -245
- package/dist/infra/lib/DeepInit.js.map +0 -1
- package/dist/infra/lib/FrameworkDetector.d.ts +0 -56
- package/dist/infra/lib/FrameworkDetector.d.ts.map +0 -1
- package/dist/infra/lib/FrameworkDetector.js +0 -287
- package/dist/infra/lib/FrameworkDetector.js.map +0 -1
- package/dist/infra/lib/ModelRouter.d.ts +0 -48
- package/dist/infra/lib/ModelRouter.d.ts.map +0 -1
- package/dist/infra/lib/ModelRouter.js +0 -216
- package/dist/infra/lib/ModelRouter.js.map +0 -1
- package/dist/infra/lib/ReviewRace.d.ts +0 -86
- package/dist/infra/lib/ReviewRace.d.ts.map +0 -1
- package/dist/infra/lib/ReviewRace.js +0 -454
- package/dist/infra/lib/ReviewRace.js.map +0 -1
- package/dist/infra/lib/RuleBuildSystem.d.ts +0 -157
- package/dist/infra/lib/RuleBuildSystem.d.ts.map +0 -1
- package/dist/infra/lib/RuleBuildSystem.js +0 -550
- package/dist/infra/lib/RuleBuildSystem.js.map +0 -1
- package/dist/infra/lib/SkillQualityGate.d.ts +0 -42
- package/dist/infra/lib/SkillQualityGate.d.ts.map +0 -1
- package/dist/infra/lib/SkillQualityGate.js +0 -220
- package/dist/infra/lib/SkillQualityGate.js.map +0 -1
- package/dist/infra/lib/SkillRepository.d.ts +0 -134
- package/dist/infra/lib/SkillRepository.d.ts.map +0 -1
- package/dist/infra/lib/SkillRepository.js +0 -500
- package/dist/infra/lib/SkillRepository.js.map +0 -1
- package/dist/infra/lib/UltraQA.d.ts +0 -89
- package/dist/infra/lib/UltraQA.d.ts.map +0 -1
- package/dist/infra/lib/UltraQA.js +0 -301
- package/dist/infra/lib/UltraQA.js.map +0 -1
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DeepInit - Hierarchical AGENTS.md Generation
|
|
3
|
-
* Creates AI-readable documentation hierarchy with parent references
|
|
4
|
-
*/
|
|
5
|
-
import path from 'path';
|
|
6
|
-
// Common directory purposes
|
|
7
|
-
const DIRECTORY_PURPOSES = {
|
|
8
|
-
src: 'Source code directory',
|
|
9
|
-
lib: 'Library/utility code',
|
|
10
|
-
utils: 'Utility functions',
|
|
11
|
-
helpers: 'Helper functions',
|
|
12
|
-
components: 'UI components',
|
|
13
|
-
pages: 'Page components/routes',
|
|
14
|
-
hooks: 'React/custom hooks',
|
|
15
|
-
services: 'Business logic services',
|
|
16
|
-
api: 'API endpoints/clients',
|
|
17
|
-
models: 'Data models/schemas',
|
|
18
|
-
types: 'TypeScript type definitions',
|
|
19
|
-
interfaces: 'Interface definitions',
|
|
20
|
-
controllers: 'Request controllers',
|
|
21
|
-
routes: 'Route definitions',
|
|
22
|
-
middleware: 'Middleware functions',
|
|
23
|
-
config: 'Configuration files',
|
|
24
|
-
constants: 'Constant values',
|
|
25
|
-
assets: 'Static assets',
|
|
26
|
-
styles: 'CSS/styling files',
|
|
27
|
-
tests: 'Test files',
|
|
28
|
-
__tests__: 'Jest test directory',
|
|
29
|
-
spec: 'Test specifications',
|
|
30
|
-
fixtures: 'Test fixtures/data',
|
|
31
|
-
mocks: 'Mock implementations',
|
|
32
|
-
scripts: 'Build/utility scripts',
|
|
33
|
-
tools: 'Development tools',
|
|
34
|
-
docs: 'Documentation',
|
|
35
|
-
dist: 'Build output',
|
|
36
|
-
build: 'Build output',
|
|
37
|
-
node_modules: 'Dependencies (skip)',
|
|
38
|
-
'.git': 'Git directory (skip)',
|
|
39
|
-
};
|
|
40
|
-
// File patterns to identify entry points
|
|
41
|
-
const ENTRY_PATTERNS = [
|
|
42
|
-
/^index\.(ts|js|tsx|jsx)$/,
|
|
43
|
-
/^main\.(ts|js|tsx|jsx)$/,
|
|
44
|
-
/^app\.(ts|js|tsx|jsx)$/,
|
|
45
|
-
/^server\.(ts|js|tsx|jsx)$/,
|
|
46
|
-
];
|
|
47
|
-
/**
|
|
48
|
-
* Detect directory purpose from name
|
|
49
|
-
*/
|
|
50
|
-
export function detectDirectoryPurpose(dirName) {
|
|
51
|
-
const lower = dirName.toLowerCase();
|
|
52
|
-
return DIRECTORY_PURPOSES[lower] || DIRECTORY_PURPOSES[dirName] || 'Project directory';
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Check if file is an entry point
|
|
56
|
-
*/
|
|
57
|
-
export function isEntryPoint(fileName) {
|
|
58
|
-
return ENTRY_PATTERNS.some(pattern => pattern.test(fileName));
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Generate AGENTS.md content for a directory
|
|
62
|
-
*/
|
|
63
|
-
export function generateAgentsMd(dir) {
|
|
64
|
-
const header = `# AGENTS.md - ${dir.name}`;
|
|
65
|
-
// Parent reference
|
|
66
|
-
const parentRef = dir.parent
|
|
67
|
-
? `<!-- Parent: ${path.relative(dir.path, dir.parent)}/AGENTS.md -->`
|
|
68
|
-
: undefined;
|
|
69
|
-
// Purpose
|
|
70
|
-
const purpose = `## Purpose\n\n${dir.purpose || detectDirectoryPurpose(dir.name)}`;
|
|
71
|
-
// Structure
|
|
72
|
-
const structureLines = ['## Structure\n', '```'];
|
|
73
|
-
structureLines.push(`${dir.name}/`);
|
|
74
|
-
for (const child of dir.children) {
|
|
75
|
-
structureLines.push(`├── ${child}/`);
|
|
76
|
-
}
|
|
77
|
-
for (const file of dir.files) {
|
|
78
|
-
const marker = isEntryPoint(file.name) ? ' ← entry' : '';
|
|
79
|
-
structureLines.push(`├── ${file.name}${marker}`);
|
|
80
|
-
}
|
|
81
|
-
structureLines.push('```');
|
|
82
|
-
const structure = structureLines.join('\n');
|
|
83
|
-
// Key files
|
|
84
|
-
const keyFilesLines = ['## Key Files\n'];
|
|
85
|
-
const entryFiles = dir.files.filter(f => isEntryPoint(f.name));
|
|
86
|
-
if (entryFiles.length > 0) {
|
|
87
|
-
keyFilesLines.push('### Entry Points');
|
|
88
|
-
for (const file of entryFiles) {
|
|
89
|
-
keyFilesLines.push(`- \`${file.name}\`: ${file.description || 'Main entry point'}`);
|
|
90
|
-
}
|
|
91
|
-
keyFilesLines.push('');
|
|
92
|
-
}
|
|
93
|
-
// Group by extension
|
|
94
|
-
const byExtension = new Map();
|
|
95
|
-
for (const file of dir.files) {
|
|
96
|
-
const ext = file.extension || 'other';
|
|
97
|
-
if (!byExtension.has(ext))
|
|
98
|
-
byExtension.set(ext, []);
|
|
99
|
-
byExtension.get(ext).push(file);
|
|
100
|
-
}
|
|
101
|
-
for (const [ext, files] of byExtension) {
|
|
102
|
-
if (files.length > 5) {
|
|
103
|
-
keyFilesLines.push(`- \`*.${ext}\`: ${files.length} files`);
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
for (const file of files) {
|
|
107
|
-
if (!isEntryPoint(file.name)) {
|
|
108
|
-
keyFilesLines.push(`- \`${file.name}\``);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
const keyFiles = keyFilesLines.join('\n');
|
|
114
|
-
// Conventions (auto-detected)
|
|
115
|
-
const conventions = generateConventions(dir);
|
|
116
|
-
// Dependencies (child directories)
|
|
117
|
-
const dependenciesLines = ['## Dependencies\n'];
|
|
118
|
-
if (dir.children.length > 0) {
|
|
119
|
-
dependenciesLines.push('### Child Modules');
|
|
120
|
-
for (const child of dir.children) {
|
|
121
|
-
dependenciesLines.push(`- [\`${child}/\`](./${child}/AGENTS.md)`);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
dependenciesLines.push('No child modules.');
|
|
126
|
-
}
|
|
127
|
-
const dependencies = dependenciesLines.join('\n');
|
|
128
|
-
// Notes placeholder
|
|
129
|
-
const notes = '## Notes\n\n<!-- Add manual notes here. They will be preserved on regeneration. -->';
|
|
130
|
-
return {
|
|
131
|
-
header,
|
|
132
|
-
parentRef,
|
|
133
|
-
purpose,
|
|
134
|
-
structure,
|
|
135
|
-
keyFiles,
|
|
136
|
-
conventions,
|
|
137
|
-
dependencies,
|
|
138
|
-
notes,
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Generate conventions based on file patterns
|
|
143
|
-
*/
|
|
144
|
-
function generateConventions(dir) {
|
|
145
|
-
const lines = ['## Conventions\n'];
|
|
146
|
-
// Detect naming conventions
|
|
147
|
-
const hasKebab = dir.files.some(f => f.name.includes('-'));
|
|
148
|
-
const hasCamel = dir.files.some(f => /[a-z][A-Z]/.test(f.name));
|
|
149
|
-
const hasPascal = dir.files.some(f => /^[A-Z]/.test(f.name));
|
|
150
|
-
if (hasPascal)
|
|
151
|
-
lines.push('- **Naming**: PascalCase for components/classes');
|
|
152
|
-
if (hasCamel)
|
|
153
|
-
lines.push('- **Naming**: camelCase for utilities/functions');
|
|
154
|
-
if (hasKebab)
|
|
155
|
-
lines.push('- **Naming**: kebab-case for files');
|
|
156
|
-
// Detect test patterns
|
|
157
|
-
const hasTestFiles = dir.files.some(f => f.name.includes('.test.') || f.name.includes('.spec.'));
|
|
158
|
-
if (hasTestFiles) {
|
|
159
|
-
lines.push('- **Testing**: Co-located test files (*.test.ts, *.spec.ts)');
|
|
160
|
-
}
|
|
161
|
-
// Detect TypeScript
|
|
162
|
-
const hasTs = dir.files.some(f => f.extension === 'ts' || f.extension === 'tsx');
|
|
163
|
-
if (hasTs) {
|
|
164
|
-
lines.push('- **Language**: TypeScript');
|
|
165
|
-
}
|
|
166
|
-
if (lines.length === 1) {
|
|
167
|
-
lines.push('No specific conventions detected.');
|
|
168
|
-
}
|
|
169
|
-
return lines.join('\n');
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Format full AGENTS.md content
|
|
173
|
-
*/
|
|
174
|
-
export function formatAgentsMd(content) {
|
|
175
|
-
const sections = [content.header];
|
|
176
|
-
if (content.parentRef) {
|
|
177
|
-
sections.push('', content.parentRef);
|
|
178
|
-
}
|
|
179
|
-
sections.push('', content.purpose);
|
|
180
|
-
sections.push('', content.structure);
|
|
181
|
-
sections.push('', content.keyFiles);
|
|
182
|
-
sections.push('', content.conventions);
|
|
183
|
-
sections.push('', content.dependencies);
|
|
184
|
-
sections.push('', content.notes);
|
|
185
|
-
return sections.join('\n');
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Preserve manual notes from existing AGENTS.md
|
|
189
|
-
*/
|
|
190
|
-
export function preserveManualNotes(existing, newContent) {
|
|
191
|
-
// Extract notes section from existing
|
|
192
|
-
const notesMatch = existing.match(/## Notes\n\n([\s\S]*?)(?=\n## |$)/);
|
|
193
|
-
if (!notesMatch || notesMatch[1].trim() === '<!-- Add manual notes here. They will be preserved on regeneration. -->') {
|
|
194
|
-
return newContent;
|
|
195
|
-
}
|
|
196
|
-
// Replace notes section in new content
|
|
197
|
-
const preservedNotes = notesMatch[1].trim();
|
|
198
|
-
return newContent.replace(/## Notes\n\n<!-- Add manual notes here\. They will be preserved on regeneration\. -->/, `## Notes\n\n${preservedNotes}`);
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Generate navigation header
|
|
202
|
-
*/
|
|
203
|
-
export function generateNavigationHeader(dir, rootPath) {
|
|
204
|
-
const parts = dir.path.replace(rootPath, '').split(path.sep).filter(Boolean);
|
|
205
|
-
const breadcrumbs = parts.map((part, i) => {
|
|
206
|
-
const depth = parts.length - i;
|
|
207
|
-
const prefix = '../'.repeat(depth);
|
|
208
|
-
return `[${part}](${prefix}AGENTS.md)`;
|
|
209
|
-
});
|
|
210
|
-
if (breadcrumbs.length === 0) {
|
|
211
|
-
return '📍 Root';
|
|
212
|
-
}
|
|
213
|
-
return `📍 ${breadcrumbs.join(' / ')}`;
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Describe DeepInit workflow
|
|
217
|
-
*/
|
|
218
|
-
export function describeDeepInitWorkflow() {
|
|
219
|
-
return `
|
|
220
|
-
## DeepInit Workflow
|
|
221
|
-
|
|
222
|
-
Hierarchical AI-readable documentation generation:
|
|
223
|
-
|
|
224
|
-
\`\`\`
|
|
225
|
-
project/
|
|
226
|
-
├── AGENTS.md ← Root documentation
|
|
227
|
-
├── src/
|
|
228
|
-
│ ├── AGENTS.md ← <!-- Parent: ../AGENTS.md -->
|
|
229
|
-
│ ├── components/
|
|
230
|
-
│ │ └── AGENTS.md ← <!-- Parent: ../AGENTS.md -->
|
|
231
|
-
│ └── services/
|
|
232
|
-
│ └── AGENTS.md ← <!-- Parent: ../AGENTS.md -->
|
|
233
|
-
└── tests/
|
|
234
|
-
└── AGENTS.md ← <!-- Parent: ../AGENTS.md -->
|
|
235
|
-
\`\`\`
|
|
236
|
-
|
|
237
|
-
Features:
|
|
238
|
-
- Parent references for navigation
|
|
239
|
-
- Auto-detected purpose and conventions
|
|
240
|
-
- Preserved manual notes on regeneration
|
|
241
|
-
- Entry point identification
|
|
242
|
-
- Child module linking
|
|
243
|
-
`.trim();
|
|
244
|
-
}
|
|
245
|
-
//# sourceMappingURL=DeepInit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DeepInit.js","sourceRoot":"","sources":["../../../src/infra/lib/DeepInit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Framework Detector - Automatically detect project framework from package.json
|
|
3
|
-
* Inspired by Vercel's deploy script
|
|
4
|
-
*/
|
|
5
|
-
export interface FrameworkInfo {
|
|
6
|
-
id: string;
|
|
7
|
-
name: string;
|
|
8
|
-
category: 'frontend' | 'backend' | 'fullstack' | 'static' | 'docs';
|
|
9
|
-
runtime?: 'node' | 'bun' | 'deno' | 'browser';
|
|
10
|
-
features?: string[];
|
|
11
|
-
}
|
|
12
|
-
export declare const FRAMEWORKS: Record<string, FrameworkInfo>;
|
|
13
|
-
export interface PackageJson {
|
|
14
|
-
name?: string;
|
|
15
|
-
version?: string;
|
|
16
|
-
dependencies?: Record<string, string>;
|
|
17
|
-
devDependencies?: Record<string, string>;
|
|
18
|
-
scripts?: Record<string, string>;
|
|
19
|
-
}
|
|
20
|
-
export interface DetectionResult {
|
|
21
|
-
framework: FrameworkInfo | null;
|
|
22
|
-
confidence: 'high' | 'medium' | 'low';
|
|
23
|
-
matchedDep?: string;
|
|
24
|
-
allDetected: string[];
|
|
25
|
-
packageJson?: PackageJson;
|
|
26
|
-
projectType: 'monorepo' | 'single' | 'static' | 'unknown';
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Detect framework from package.json
|
|
30
|
-
*/
|
|
31
|
-
export declare function detectFramework(projectPath: string): Promise<DetectionResult>;
|
|
32
|
-
/**
|
|
33
|
-
* Detect framework from string content (for analysis without file access)
|
|
34
|
-
*/
|
|
35
|
-
export declare function detectFrameworkFromContent(content: string): DetectionResult;
|
|
36
|
-
/**
|
|
37
|
-
* Get recommended rules/agents based on framework
|
|
38
|
-
*/
|
|
39
|
-
export declare function getFrameworkRecommendations(framework: FrameworkInfo): {
|
|
40
|
-
reviewers: string[];
|
|
41
|
-
rules: string[];
|
|
42
|
-
features: string[];
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Format detection result for display
|
|
46
|
-
*/
|
|
47
|
-
export declare function formatDetectionResult(result: DetectionResult): string;
|
|
48
|
-
/**
|
|
49
|
-
* Quick check if project uses a specific framework
|
|
50
|
-
*/
|
|
51
|
-
export declare function isFramework(projectPath: string, frameworkId: string): Promise<boolean>;
|
|
52
|
-
/**
|
|
53
|
-
* Get all supported frameworks grouped by category
|
|
54
|
-
*/
|
|
55
|
-
export declare function getSupportedFrameworks(): Record<string, FrameworkInfo[]>;
|
|
56
|
-
//# sourceMappingURL=FrameworkDetector.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FrameworkDetector.d.ts","sourceRoot":"","sources":["../../../src/infra/lib/FrameworkDetector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAGD,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAoDpD,CAAC;AA6DF,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,aAAa,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC3D;AAoDD;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAmCnF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAmB3E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,aAAa,GAAG;IACrE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAoCA;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAyBrE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG5F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAcxE"}
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Framework Detector - Automatically detect project framework from package.json
|
|
3
|
-
* Inspired by Vercel's deploy script
|
|
4
|
-
*/
|
|
5
|
-
import { readFile } from 'fs/promises';
|
|
6
|
-
import { join } from 'path';
|
|
7
|
-
import { existsSync } from 'fs';
|
|
8
|
-
// Framework definitions with metadata
|
|
9
|
-
export const FRAMEWORKS = {
|
|
10
|
-
// Fullstack frameworks (check first - more specific)
|
|
11
|
-
'blitzjs': { id: 'blitzjs', name: 'Blitz.js', category: 'fullstack', runtime: 'node', features: ['ssr', 'api'] },
|
|
12
|
-
'nextjs': { id: 'nextjs', name: 'Next.js', category: 'fullstack', runtime: 'node', features: ['ssr', 'ssg', 'api', 'rsc'] },
|
|
13
|
-
'remix': { id: 'remix', name: 'Remix', category: 'fullstack', runtime: 'node', features: ['ssr', 'nested-routes'] },
|
|
14
|
-
'nuxtjs': { id: 'nuxtjs', name: 'Nuxt', category: 'fullstack', runtime: 'node', features: ['ssr', 'ssg'] },
|
|
15
|
-
'sveltekit-1': { id: 'sveltekit-1', name: 'SvelteKit', category: 'fullstack', runtime: 'node', features: ['ssr', 'ssg'] },
|
|
16
|
-
'solidstart-1': { id: 'solidstart-1', name: 'SolidStart', category: 'fullstack', runtime: 'node', features: ['ssr'] },
|
|
17
|
-
'tanstack-start': { id: 'tanstack-start', name: 'TanStack Start', category: 'fullstack', runtime: 'node', features: ['ssr'] },
|
|
18
|
-
'redwoodjs': { id: 'redwoodjs', name: 'RedwoodJS', category: 'fullstack', runtime: 'node', features: ['api', 'graphql'] },
|
|
19
|
-
'hydrogen': { id: 'hydrogen', name: 'Hydrogen', category: 'fullstack', runtime: 'node', features: ['shopify', 'ssr'] },
|
|
20
|
-
// Frontend frameworks
|
|
21
|
-
'gatsby': { id: 'gatsby', name: 'Gatsby', category: 'frontend', runtime: 'node', features: ['ssg', 'graphql'] },
|
|
22
|
-
'react-router': { id: 'react-router', name: 'React Router', category: 'frontend', runtime: 'node', features: ['spa', 'nested-routes'] },
|
|
23
|
-
'astro': { id: 'astro', name: 'Astro', category: 'frontend', runtime: 'node', features: ['ssg', 'islands'] },
|
|
24
|
-
'svelte': { id: 'svelte', name: 'Svelte', category: 'frontend', runtime: 'browser', features: ['reactive'] },
|
|
25
|
-
'angular': { id: 'angular', name: 'Angular', category: 'frontend', runtime: 'browser', features: ['spa', 'di'] },
|
|
26
|
-
'create-react-app': { id: 'create-react-app', name: 'Create React App', category: 'frontend', runtime: 'browser', features: ['spa'] },
|
|
27
|
-
'vite': { id: 'vite', name: 'Vite', category: 'frontend', runtime: 'browser', features: ['hmr', 'esm'] },
|
|
28
|
-
'preact': { id: 'preact', name: 'Preact', category: 'frontend', runtime: 'browser', features: ['lightweight'] },
|
|
29
|
-
'ember': { id: 'ember', name: 'Ember.js', category: 'frontend', runtime: 'browser', features: ['spa', 'convention'] },
|
|
30
|
-
// Backend frameworks
|
|
31
|
-
'nestjs': { id: 'nestjs', name: 'NestJS', category: 'backend', runtime: 'node', features: ['di', 'decorators'] },
|
|
32
|
-
'express': { id: 'express', name: 'Express', category: 'backend', runtime: 'node', features: ['minimal'] },
|
|
33
|
-
'fastify': { id: 'fastify', name: 'Fastify', category: 'backend', runtime: 'node', features: ['fast', 'schema'] },
|
|
34
|
-
'hono': { id: 'hono', name: 'Hono', category: 'backend', runtime: 'node', features: ['edge', 'lightweight'] },
|
|
35
|
-
'elysia': { id: 'elysia', name: 'Elysia', category: 'backend', runtime: 'bun', features: ['bun', 'fast'] },
|
|
36
|
-
'h3': { id: 'h3', name: 'h3', category: 'backend', runtime: 'node', features: ['minimal', 'edge'] },
|
|
37
|
-
'nitro': { id: 'nitro', name: 'Nitro', category: 'backend', runtime: 'node', features: ['universal'] },
|
|
38
|
-
// Documentation frameworks
|
|
39
|
-
'docusaurus-2': { id: 'docusaurus-2', name: 'Docusaurus', category: 'docs', runtime: 'node', features: ['docs', 'mdx'] },
|
|
40
|
-
'vitepress': { id: 'vitepress', name: 'VitePress', category: 'docs', runtime: 'node', features: ['docs', 'vue'] },
|
|
41
|
-
'vuepress': { id: 'vuepress', name: 'VuePress', category: 'docs', runtime: 'node', features: ['docs', 'vue'] },
|
|
42
|
-
'hexo': { id: 'hexo', name: 'Hexo', category: 'docs', runtime: 'node', features: ['blog'] },
|
|
43
|
-
'eleventy': { id: 'eleventy', name: 'Eleventy', category: 'static', runtime: 'node', features: ['ssg', 'simple'] },
|
|
44
|
-
'gridsome': { id: 'gridsome', name: 'Gridsome', category: 'static', runtime: 'node', features: ['vue', 'graphql'] },
|
|
45
|
-
// Other
|
|
46
|
-
'storybook': { id: 'storybook', name: 'Storybook', category: 'frontend', runtime: 'node', features: ['components', 'docs'] },
|
|
47
|
-
'sanity-v3': { id: 'sanity-v3', name: 'Sanity', category: 'backend', runtime: 'node', features: ['cms'] },
|
|
48
|
-
'ionic-angular': { id: 'ionic-angular', name: 'Ionic Angular', category: 'frontend', runtime: 'browser', features: ['mobile', 'hybrid'] },
|
|
49
|
-
'ionic-react': { id: 'ionic-react', name: 'Ionic React', category: 'frontend', runtime: 'browser', features: ['mobile', 'hybrid'] },
|
|
50
|
-
'stencil': { id: 'stencil', name: 'Stencil', category: 'frontend', runtime: 'browser', features: ['web-components'] },
|
|
51
|
-
'umijs': { id: 'umijs', name: 'UmiJS', category: 'frontend', runtime: 'node', features: ['enterprise', 'plugins'] },
|
|
52
|
-
'parcel': { id: 'parcel', name: 'Parcel', category: 'frontend', runtime: 'browser', features: ['zero-config'] },
|
|
53
|
-
'dojo': { id: 'dojo', name: 'Dojo', category: 'frontend', runtime: 'browser', features: ['widgets'] },
|
|
54
|
-
'polymer': { id: 'polymer', name: 'Polymer', category: 'frontend', runtime: 'browser', features: ['web-components'] },
|
|
55
|
-
'sapper': { id: 'sapper', name: 'Sapper', category: 'frontend', runtime: 'node', features: ['legacy-svelte'] },
|
|
56
|
-
'saber': { id: 'saber', name: 'Saber', category: 'static', runtime: 'node', features: ['vue'] },
|
|
57
|
-
};
|
|
58
|
-
// Detection order (more specific first)
|
|
59
|
-
const DETECTION_ORDER = [
|
|
60
|
-
// Fullstack (most specific first)
|
|
61
|
-
{ dep: 'blitz', framework: 'blitzjs' },
|
|
62
|
-
{ dep: 'next', framework: 'nextjs' },
|
|
63
|
-
{ dep: '@remix-run/', framework: 'remix' },
|
|
64
|
-
{ dep: '@react-router/', framework: 'react-router' },
|
|
65
|
-
{ dep: '@tanstack/start', framework: 'tanstack-start' },
|
|
66
|
-
{ dep: '@shopify/hydrogen', framework: 'hydrogen' },
|
|
67
|
-
{ dep: '@redwoodjs/', framework: 'redwoodjs' },
|
|
68
|
-
{ dep: '@sveltejs/kit', framework: 'sveltekit-1' },
|
|
69
|
-
{ dep: '@solidjs/start', framework: 'solidstart-1' },
|
|
70
|
-
{ dep: 'nuxt', framework: 'nuxtjs' },
|
|
71
|
-
{ dep: 'astro', framework: 'astro' },
|
|
72
|
-
{ dep: 'gatsby', framework: 'gatsby' },
|
|
73
|
-
// Frontend
|
|
74
|
-
{ dep: 'svelte', framework: 'svelte' },
|
|
75
|
-
{ dep: '@ionic/angular', framework: 'ionic-angular' },
|
|
76
|
-
{ dep: '@angular/core', framework: 'angular' },
|
|
77
|
-
{ dep: '@ionic/react', framework: 'ionic-react' },
|
|
78
|
-
{ dep: 'react-scripts', framework: 'create-react-app' },
|
|
79
|
-
{ dep: 'preact', framework: 'preact' },
|
|
80
|
-
{ dep: 'ember-cli', framework: 'ember' },
|
|
81
|
-
{ dep: 'ember-source', framework: 'ember' },
|
|
82
|
-
{ dep: '@dojo/framework', framework: 'dojo' },
|
|
83
|
-
{ dep: '@polymer/', framework: 'polymer' },
|
|
84
|
-
{ dep: '@stencil/core', framework: 'stencil' },
|
|
85
|
-
{ dep: 'umi', framework: 'umijs' },
|
|
86
|
-
{ dep: 'sapper', framework: 'sapper' },
|
|
87
|
-
// Documentation
|
|
88
|
-
{ dep: '@docusaurus/core', framework: 'docusaurus-2' },
|
|
89
|
-
{ dep: 'vitepress', framework: 'vitepress' },
|
|
90
|
-
{ dep: 'vuepress', framework: 'vuepress' },
|
|
91
|
-
{ dep: '@11ty/eleventy', framework: 'eleventy' },
|
|
92
|
-
{ dep: 'hexo', framework: 'hexo' },
|
|
93
|
-
{ dep: 'gridsome', framework: 'gridsome' },
|
|
94
|
-
{ dep: 'saber', framework: 'saber' },
|
|
95
|
-
// Backend
|
|
96
|
-
{ dep: '@nestjs/core', framework: 'nestjs' },
|
|
97
|
-
{ dep: 'elysia', framework: 'elysia' },
|
|
98
|
-
{ dep: 'hono', framework: 'hono' },
|
|
99
|
-
{ dep: 'fastify', framework: 'fastify' },
|
|
100
|
-
{ dep: 'h3', framework: 'h3' },
|
|
101
|
-
{ dep: 'nitropack', framework: 'nitro' },
|
|
102
|
-
{ dep: 'express', framework: 'express' },
|
|
103
|
-
// CMS / Tools
|
|
104
|
-
{ dep: 'sanity', framework: 'sanity-v3' },
|
|
105
|
-
{ dep: '@sanity/', framework: 'sanity-v3' },
|
|
106
|
-
{ dep: '@storybook/', framework: 'storybook' },
|
|
107
|
-
// Generic (check last)
|
|
108
|
-
{ dep: 'vite', framework: 'vite' },
|
|
109
|
-
{ dep: 'parcel', framework: 'parcel' },
|
|
110
|
-
];
|
|
111
|
-
/**
|
|
112
|
-
* Read and parse package.json
|
|
113
|
-
*/
|
|
114
|
-
async function readPackageJson(projectPath) {
|
|
115
|
-
const pkgPath = join(projectPath, 'package.json');
|
|
116
|
-
try {
|
|
117
|
-
const content = await readFile(pkgPath, 'utf-8');
|
|
118
|
-
return JSON.parse(content);
|
|
119
|
-
}
|
|
120
|
-
catch {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Check if a dependency exists in package.json
|
|
126
|
-
*/
|
|
127
|
-
function hasDependency(pkg, dep) {
|
|
128
|
-
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
129
|
-
// Check for exact match or prefix match (e.g., "@remix-run/")
|
|
130
|
-
return Object.keys(allDeps).some(key => key === dep || key.startsWith(dep));
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Detect project type (monorepo, single, static)
|
|
134
|
-
*/
|
|
135
|
-
async function detectProjectType(projectPath, pkg) {
|
|
136
|
-
// Check for monorepo indicators
|
|
137
|
-
const monorepoFiles = ['pnpm-workspace.yaml', 'lerna.json', 'nx.json', 'turbo.json'];
|
|
138
|
-
for (const file of monorepoFiles) {
|
|
139
|
-
if (existsSync(join(projectPath, file))) {
|
|
140
|
-
return 'monorepo';
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
// Check for workspaces in package.json
|
|
144
|
-
if (pkg && pkg.workspaces) {
|
|
145
|
-
return 'monorepo';
|
|
146
|
-
}
|
|
147
|
-
// No package.json = likely static
|
|
148
|
-
if (!pkg) {
|
|
149
|
-
const hasHtml = existsSync(join(projectPath, 'index.html'));
|
|
150
|
-
return hasHtml ? 'static' : 'unknown';
|
|
151
|
-
}
|
|
152
|
-
return 'single';
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Detect framework from package.json
|
|
156
|
-
*/
|
|
157
|
-
export async function detectFramework(projectPath) {
|
|
158
|
-
const pkg = await readPackageJson(projectPath);
|
|
159
|
-
const projectType = await detectProjectType(projectPath, pkg);
|
|
160
|
-
const allDetected = [];
|
|
161
|
-
if (!pkg) {
|
|
162
|
-
// Check for static HTML project
|
|
163
|
-
const hasHtml = existsSync(join(projectPath, 'index.html'));
|
|
164
|
-
return {
|
|
165
|
-
framework: hasHtml ? { id: 'static', name: 'Static HTML', category: 'static' } : null,
|
|
166
|
-
confidence: hasHtml ? 'medium' : 'low',
|
|
167
|
-
allDetected: hasHtml ? ['static'] : [],
|
|
168
|
-
projectType,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
// Detect all matching frameworks
|
|
172
|
-
for (const { dep, framework } of DETECTION_ORDER) {
|
|
173
|
-
if (hasDependency(pkg, dep)) {
|
|
174
|
-
allDetected.push(framework);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// Primary framework is the first detected (most specific due to order)
|
|
178
|
-
const primaryFramework = allDetected[0];
|
|
179
|
-
const frameworkInfo = primaryFramework ? FRAMEWORKS[primaryFramework] : null;
|
|
180
|
-
return {
|
|
181
|
-
framework: frameworkInfo,
|
|
182
|
-
confidence: frameworkInfo ? 'high' : 'low',
|
|
183
|
-
matchedDep: primaryFramework,
|
|
184
|
-
allDetected,
|
|
185
|
-
packageJson: pkg,
|
|
186
|
-
projectType,
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Detect framework from string content (for analysis without file access)
|
|
191
|
-
*/
|
|
192
|
-
export function detectFrameworkFromContent(content) {
|
|
193
|
-
const allDetected = [];
|
|
194
|
-
for (const { dep, framework } of DETECTION_ORDER) {
|
|
195
|
-
if (content.includes(`"${dep}"`) || content.includes(`"${dep}/`)) {
|
|
196
|
-
allDetected.push(framework);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
const primaryFramework = allDetected[0];
|
|
200
|
-
const frameworkInfo = primaryFramework ? FRAMEWORKS[primaryFramework] : null;
|
|
201
|
-
return {
|
|
202
|
-
framework: frameworkInfo,
|
|
203
|
-
confidence: frameworkInfo ? 'high' : 'low',
|
|
204
|
-
matchedDep: primaryFramework,
|
|
205
|
-
allDetected,
|
|
206
|
-
projectType: 'unknown',
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Get recommended rules/agents based on framework
|
|
211
|
-
*/
|
|
212
|
-
export function getFrameworkRecommendations(framework) {
|
|
213
|
-
const reviewers = [];
|
|
214
|
-
const rules = [];
|
|
215
|
-
const features = framework.features || [];
|
|
216
|
-
// Add language/framework-specific review focuses (code-reviewer with focus parameter)
|
|
217
|
-
if (['nextjs', 'gatsby', 'remix', 'create-react-app', 'astro'].includes(framework.id)) {
|
|
218
|
-
reviewers.push('code-reviewer (focus: idioms)');
|
|
219
|
-
rules.push('react-*', 'async-*', 'bundle-*');
|
|
220
|
-
}
|
|
221
|
-
if (['nuxtjs', 'vitepress', 'vuepress', 'gridsome'].includes(framework.id)) {
|
|
222
|
-
rules.push('vue-*');
|
|
223
|
-
}
|
|
224
|
-
if (['sveltekit-1', 'svelte'].includes(framework.id)) {
|
|
225
|
-
rules.push('svelte-*');
|
|
226
|
-
}
|
|
227
|
-
if (['angular', 'ionic-angular'].includes(framework.id)) {
|
|
228
|
-
rules.push('angular-*');
|
|
229
|
-
}
|
|
230
|
-
if (['nestjs', 'express', 'fastify', 'hono'].includes(framework.id)) {
|
|
231
|
-
reviewers.push('code-reviewer (focus: idioms)');
|
|
232
|
-
rules.push('server-*', 'security-*');
|
|
233
|
-
}
|
|
234
|
-
if (['elysia'].includes(framework.id)) {
|
|
235
|
-
rules.push('bun-*');
|
|
236
|
-
}
|
|
237
|
-
// Always include common reviewers
|
|
238
|
-
reviewers.push('security-reviewer', 'code-reviewer (focus: performance)');
|
|
239
|
-
return { reviewers, rules, features };
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Format detection result for display
|
|
243
|
-
*/
|
|
244
|
-
export function formatDetectionResult(result) {
|
|
245
|
-
if (!result.framework) {
|
|
246
|
-
return 'No framework detected';
|
|
247
|
-
}
|
|
248
|
-
const lines = [];
|
|
249
|
-
lines.push(`Framework: ${result.framework.name} (${result.framework.id})`);
|
|
250
|
-
lines.push(`Category: ${result.framework.category}`);
|
|
251
|
-
lines.push(`Confidence: ${result.confidence}`);
|
|
252
|
-
if (result.framework.runtime) {
|
|
253
|
-
lines.push(`Runtime: ${result.framework.runtime}`);
|
|
254
|
-
}
|
|
255
|
-
if (result.framework.features && result.framework.features.length > 0) {
|
|
256
|
-
lines.push(`Features: ${result.framework.features.join(', ')}`);
|
|
257
|
-
}
|
|
258
|
-
if (result.allDetected.length > 1) {
|
|
259
|
-
lines.push(`Also detected: ${result.allDetected.slice(1).join(', ')}`);
|
|
260
|
-
}
|
|
261
|
-
lines.push(`Project type: ${result.projectType}`);
|
|
262
|
-
return lines.join('\n');
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Quick check if project uses a specific framework
|
|
266
|
-
*/
|
|
267
|
-
export async function isFramework(projectPath, frameworkId) {
|
|
268
|
-
const result = await detectFramework(projectPath);
|
|
269
|
-
return result.allDetected.includes(frameworkId);
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Get all supported frameworks grouped by category
|
|
273
|
-
*/
|
|
274
|
-
export function getSupportedFrameworks() {
|
|
275
|
-
const grouped = {
|
|
276
|
-
fullstack: [],
|
|
277
|
-
frontend: [],
|
|
278
|
-
backend: [],
|
|
279
|
-
docs: [],
|
|
280
|
-
static: [],
|
|
281
|
-
};
|
|
282
|
-
Object.values(FRAMEWORKS).forEach(fw => {
|
|
283
|
-
grouped[fw.category].push(fw);
|
|
284
|
-
});
|
|
285
|
-
return grouped;
|
|
286
|
-
}
|
|
287
|
-
//# sourceMappingURL=FrameworkDetector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FrameworkDetector.js","sourceRoot":"","sources":["../../../src/infra/lib/FrameworkDetector.ts"],"names":[],"mappings":"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"}
|