faf-cli 3.0.2 → 3.0.3
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 +30 -13
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +46 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/fam.d.ts +15 -0
- package/dist/commands/fam.d.ts.map +1 -0
- package/dist/commands/fam.js +247 -0
- package/dist/commands/fam.js.map +1 -0
- package/dist/family/detectors/n8n.d.ts +10 -0
- package/dist/family/detectors/n8n.d.ts.map +1 -0
- package/dist/family/detectors/n8n.js +95 -0
- package/dist/family/detectors/n8n.js.map +1 -0
- package/dist/family/detectors/next.d.ts +8 -0
- package/dist/family/detectors/next.d.ts.map +1 -0
- package/dist/family/detectors/next.js +86 -0
- package/dist/family/detectors/next.js.map +1 -0
- package/dist/family/detectors/react.d.ts +8 -0
- package/dist/family/detectors/react.d.ts.map +1 -0
- package/dist/family/detectors/react.js +73 -0
- package/dist/family/detectors/react.js.map +1 -0
- package/dist/family/detectors/svelte.d.ts +8 -0
- package/dist/family/detectors/svelte.d.ts.map +1 -0
- package/dist/family/detectors/svelte.js +90 -0
- package/dist/family/detectors/svelte.js.map +1 -0
- package/dist/family/detectors/typescript.d.ts +8 -0
- package/dist/family/detectors/typescript.d.ts.map +1 -0
- package/dist/family/detectors/typescript.js +102 -0
- package/dist/family/detectors/typescript.js.map +1 -0
- package/dist/family/detectors/vite.d.ts +8 -0
- package/dist/family/detectors/vite.d.ts.map +1 -0
- package/dist/family/detectors/vite.js +89 -0
- package/dist/family/detectors/vite.js.map +1 -0
- package/dist/family/index.d.ts +21 -0
- package/dist/family/index.d.ts.map +1 -0
- package/dist/family/index.js +73 -0
- package/dist/family/index.js.map +1 -0
- package/dist/family/registry.d.ts +57 -0
- package/dist/family/registry.d.ts.map +1 -0
- package/dist/family/registry.js +154 -0
- package/dist/family/registry.js.map +1 -0
- package/dist/family/types.d.ts +94 -0
- package/dist/family/types.d.ts.map +1 -0
- package/dist/family/types.js +8 -0
- package/dist/family/types.js.map +1 -0
- package/package.json +20 -3
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* n8n Integration Detector
|
|
4
|
+
*
|
|
5
|
+
* Detects n8n workflow automation usage and generates n8n-optimized .faf context
|
|
6
|
+
*
|
|
7
|
+
* n8n-mcp ecosystem: 87k/week + 314k/week (n8n-nodes-mcp) = 401k total reach
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.n8nDetector = void 0;
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
exports.n8nDetector = {
|
|
14
|
+
name: 'n8n',
|
|
15
|
+
displayName: 'n8n',
|
|
16
|
+
tier: 'gold', // Based on evaluation: n8n will score 90+
|
|
17
|
+
qualityScore: 92,
|
|
18
|
+
weeklyAdoption: 401_000, // 87k (n8n-mcp) + 314k (n8n-nodes-mcp)
|
|
19
|
+
mcpServers: ['n8n-mcp', 'n8n-nodes-mcp'],
|
|
20
|
+
contextContribution: ['automation_platform', 'workflow_engine', 'integration_layer', 'api_orchestration'],
|
|
21
|
+
detect(projectPath) {
|
|
22
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
23
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
28
|
+
const allDeps = {
|
|
29
|
+
...packageJson.dependencies,
|
|
30
|
+
...packageJson.devDependencies,
|
|
31
|
+
};
|
|
32
|
+
// Check for n8n core or n8n custom nodes
|
|
33
|
+
return 'n8n' in allDeps ||
|
|
34
|
+
Object.keys(allDeps).some(dep => dep.startsWith('n8n-nodes-'));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
generateContext(projectPath) {
|
|
41
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
42
|
+
let version = 'unknown';
|
|
43
|
+
let customNodes = [];
|
|
44
|
+
let hasTypeScript = false;
|
|
45
|
+
if ((0, fs_1.existsSync)(packageJsonPath)) {
|
|
46
|
+
try {
|
|
47
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
48
|
+
const allDeps = {
|
|
49
|
+
...packageJson.dependencies,
|
|
50
|
+
...packageJson.devDependencies,
|
|
51
|
+
};
|
|
52
|
+
version = allDeps.n8n || 'latest';
|
|
53
|
+
hasTypeScript = 'typescript' in allDeps || '@types/node' in allDeps;
|
|
54
|
+
// Detect custom n8n nodes
|
|
55
|
+
customNodes = Object.keys(allDeps).filter(dep => dep.startsWith('n8n-nodes-'));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Fallback to defaults
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Check for n8n configuration
|
|
62
|
+
const hasN8nConfig = (0, fs_1.existsSync)((0, path_1.join)(projectPath, '.n8n')) ||
|
|
63
|
+
(0, fs_1.existsSync)((0, path_1.join)(projectPath, 'n8n.config.json'));
|
|
64
|
+
return {
|
|
65
|
+
stack: {
|
|
66
|
+
automation_platform: `n8n ${version}`,
|
|
67
|
+
workflow_engine: 'n8n Workflow Automation',
|
|
68
|
+
integration_layer: customNodes.length > 0 ? 'Custom n8n Nodes' : 'Standard n8n Nodes',
|
|
69
|
+
api_orchestration: 'n8n API',
|
|
70
|
+
backend: 'n8n Server',
|
|
71
|
+
main_language: hasTypeScript ? 'TypeScript' : 'JavaScript',
|
|
72
|
+
},
|
|
73
|
+
project: {
|
|
74
|
+
automation: {
|
|
75
|
+
platform: 'n8n',
|
|
76
|
+
custom_nodes: customNodes.length,
|
|
77
|
+
node_packages: customNodes,
|
|
78
|
+
has_config: hasN8nConfig,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
integration: {
|
|
82
|
+
framework: 'n8n',
|
|
83
|
+
mcp_servers: this.mcpServers,
|
|
84
|
+
recommended_tools: [
|
|
85
|
+
'n8n-mcp for MCP workflow integration (87k weekly)',
|
|
86
|
+
'n8n-nodes-mcp for custom node development (314k weekly)',
|
|
87
|
+
'n8n Desktop for workflow management',
|
|
88
|
+
'@supabase/supabase-js for database integration (used by n8n-mcp)',
|
|
89
|
+
'axios for HTTP requests (used by n8n-mcp)',
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=n8n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n8n.js","sourceRoot":"","sources":["../../../src/family/detectors/n8n.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../../src/family/detectors/next.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAW,MAAM,aAAa,CAAC;AAI3D,eAAO,MAAM,YAAY,EAAE,mBAkF1B,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Next.js Integration Detector
|
|
4
|
+
*
|
|
5
|
+
* Detects Next.js usage and generates Next.js-optimized .faf context
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.nextDetector = void 0;
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
exports.nextDetector = {
|
|
12
|
+
name: 'next',
|
|
13
|
+
displayName: 'Next.js',
|
|
14
|
+
tier: 'trophy', // Based on evaluation: Next will score 99+
|
|
15
|
+
qualityScore: 99,
|
|
16
|
+
weeklyAdoption: 5_000_000, // ~5M weekly downloads
|
|
17
|
+
mcpServers: ['@vercel/mcp-server', '@nextjs/mcp-tools'],
|
|
18
|
+
contextContribution: ['frontend', 'backend', 'runtime', 'hosting', 'api_type'],
|
|
19
|
+
detect(projectPath) {
|
|
20
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
21
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
26
|
+
const allDeps = {
|
|
27
|
+
...packageJson.dependencies,
|
|
28
|
+
...packageJson.devDependencies,
|
|
29
|
+
};
|
|
30
|
+
return 'next' in allDeps;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
generateContext(projectPath) {
|
|
37
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
38
|
+
let version = 'unknown';
|
|
39
|
+
let hasAppRouter = false;
|
|
40
|
+
let hasTypeScript = false;
|
|
41
|
+
if ((0, fs_1.existsSync)(packageJsonPath)) {
|
|
42
|
+
try {
|
|
43
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
44
|
+
const allDeps = {
|
|
45
|
+
...packageJson.dependencies,
|
|
46
|
+
...packageJson.devDependencies,
|
|
47
|
+
};
|
|
48
|
+
version = allDeps.next || 'latest';
|
|
49
|
+
hasTypeScript = 'typescript' in allDeps || '@types/node' in allDeps;
|
|
50
|
+
// Check if using App Router (Next 13+)
|
|
51
|
+
const versionNum = parseFloat(version.replace(/[^\d.]/g, ''));
|
|
52
|
+
hasAppRouter = versionNum >= 13;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Fallback to defaults
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Check for app directory
|
|
59
|
+
const appDirExists = (0, fs_1.existsSync)((0, path_1.join)(projectPath, 'app'));
|
|
60
|
+
return {
|
|
61
|
+
stack: {
|
|
62
|
+
frontend: `Next.js ${version}`,
|
|
63
|
+
backend: 'Next.js API Routes',
|
|
64
|
+
runtime: 'Node.js (Vercel Edge Runtime compatible)',
|
|
65
|
+
build: 'Next.js Compiler (Turbopack/Webpack)',
|
|
66
|
+
api_type: 'REST/GraphQL',
|
|
67
|
+
hosting: 'Vercel (optimized)',
|
|
68
|
+
main_language: hasTypeScript ? 'TypeScript' : 'JavaScript',
|
|
69
|
+
},
|
|
70
|
+
project: {
|
|
71
|
+
architecture: appDirExists || hasAppRouter ? 'App Router' : 'Pages Router',
|
|
72
|
+
},
|
|
73
|
+
integration: {
|
|
74
|
+
framework: 'next',
|
|
75
|
+
mcp_servers: this.mcpServers,
|
|
76
|
+
recommended_tools: [
|
|
77
|
+
'@vercel/mcp-server for deployment and analytics',
|
|
78
|
+
'Next.js DevTools',
|
|
79
|
+
'Vercel CLI for local development',
|
|
80
|
+
'React Developer Tools',
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=next.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../../../src/family/detectors/next.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../../src/family/detectors/react.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAW,MAAM,aAAa,CAAC;AAI3D,eAAO,MAAM,aAAa,EAAE,mBAmE3B,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* React Integration Detector
|
|
4
|
+
*
|
|
5
|
+
* Detects React usage and generates React-optimized .faf context
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.reactDetector = void 0;
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
exports.reactDetector = {
|
|
12
|
+
name: 'react',
|
|
13
|
+
displayName: 'React',
|
|
14
|
+
tier: 'trophy', // Based on evaluation: React will score 99+
|
|
15
|
+
qualityScore: 99,
|
|
16
|
+
weeklyAdoption: 20_000_000, // ~20M weekly downloads
|
|
17
|
+
mcpServers: ['@react-mcp/server', 'react-mcp-tools'],
|
|
18
|
+
contextContribution: ['frontend', 'ui_library', 'state_management'],
|
|
19
|
+
detect(projectPath) {
|
|
20
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
21
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
26
|
+
const allDeps = {
|
|
27
|
+
...packageJson.dependencies,
|
|
28
|
+
...packageJson.devDependencies,
|
|
29
|
+
};
|
|
30
|
+
return 'react' in allDeps || 'react-dom' in allDeps;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
generateContext(projectPath) {
|
|
37
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
38
|
+
let version = 'unknown';
|
|
39
|
+
let hasTypeScript = false;
|
|
40
|
+
if ((0, fs_1.existsSync)(packageJsonPath)) {
|
|
41
|
+
try {
|
|
42
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
43
|
+
const allDeps = {
|
|
44
|
+
...packageJson.dependencies,
|
|
45
|
+
...packageJson.devDependencies,
|
|
46
|
+
};
|
|
47
|
+
version = allDeps.react || 'latest';
|
|
48
|
+
hasTypeScript = 'typescript' in allDeps || '@types/react' in allDeps;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Fallback to defaults
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
stack: {
|
|
56
|
+
frontend: `React ${version}`,
|
|
57
|
+
ui_library: 'React Components',
|
|
58
|
+
state_management: 'React Hooks',
|
|
59
|
+
main_language: hasTypeScript ? 'TypeScript' : 'JavaScript',
|
|
60
|
+
},
|
|
61
|
+
integration: {
|
|
62
|
+
framework: 'react',
|
|
63
|
+
mcp_servers: this.mcpServers,
|
|
64
|
+
recommended_tools: [
|
|
65
|
+
'React Developer Tools (browser extension)',
|
|
66
|
+
'@react-mcp/server for Claude Desktop integration',
|
|
67
|
+
'ESLint with react plugin',
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../src/family/detectors/react.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,2BAA8C;AAC9C,+BAA4B;AAEf,QAAA,aAAa,GAAwB;IAChD,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,OAAO;IACpB,IAAI,EAAE,QAAQ,EAAE,4CAA4C;IAC5D,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,UAAU,EAAE,wBAAwB;IACpD,UAAU,EAAE,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;IACpD,mBAAmB,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,kBAAkB,CAAC;IAEnE,MAAM,CAAC,WAAmB;QACxB,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAA,eAAU,EAAC,eAAe,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG;gBACd,GAAG,WAAW,CAAC,YAAY;gBAC3B,GAAG,WAAW,CAAC,eAAe;aAC/B,CAAC;YAEF,OAAO,OAAO,IAAI,OAAO,IAAI,WAAW,IAAI,OAAO,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,eAAe,CAAC,WAAmB;QACjC,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC1D,IAAI,OAAO,GAAG,SAAS,CAAC;QACxB,IAAI,aAAa,GAAG,KAAK,CAAC;QAE1B,IAAI,IAAA,eAAU,EAAC,eAAe,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvE,MAAM,OAAO,GAAG;oBACd,GAAG,WAAW,CAAC,YAAY;oBAC3B,GAAG,WAAW,CAAC,eAAe;iBAC/B,CAAC;gBAEF,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;gBACpC,aAAa,GAAG,YAAY,IAAI,OAAO,IAAI,cAAc,IAAI,OAAO,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;QAED,OAAO;YACL,KAAK,EAAE;gBACL,QAAQ,EAAE,SAAS,OAAO,EAAE;gBAC5B,UAAU,EAAE,kBAAkB;gBAC9B,gBAAgB,EAAE,aAAa;gBAC/B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY;aAC3D;YACD,WAAW,EAAE;gBACX,SAAS,EAAE,OAAO;gBAClB,WAAW,EAAE,IAAI,CAAC,UAAU;gBAC5B,iBAAiB,EAAE;oBACjB,2CAA2C;oBAC3C,kDAAkD;oBAClD,0BAA0B;iBAC3B;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Svelte Integration Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects Svelte/SvelteKit usage and generates Svelte-optimized .faf context
|
|
5
|
+
*/
|
|
6
|
+
import { IntegrationDetector } from '../types.js';
|
|
7
|
+
export declare const svelteDetector: IntegrationDetector;
|
|
8
|
+
//# sourceMappingURL=svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte.d.ts","sourceRoot":"","sources":["../../../src/family/detectors/svelte.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAW,MAAM,aAAa,CAAC;AAI3D,eAAO,MAAM,cAAc,EAAE,mBAuF5B,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Svelte Integration Detector
|
|
4
|
+
*
|
|
5
|
+
* Detects Svelte/SvelteKit usage and generates Svelte-optimized .faf context
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.svelteDetector = void 0;
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
exports.svelteDetector = {
|
|
12
|
+
name: 'svelte',
|
|
13
|
+
displayName: 'Svelte',
|
|
14
|
+
tier: 'gold', // Based on evaluation: Svelte will score 95+
|
|
15
|
+
qualityScore: 96,
|
|
16
|
+
weeklyAdoption: 400_000, // ~400k weekly downloads
|
|
17
|
+
mcpServers: ['@sveltejs/mcp', 'svelte-kit-mcp'],
|
|
18
|
+
contextContribution: ['frontend', 'ui_library', 'state_management'],
|
|
19
|
+
detect(projectPath) {
|
|
20
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
21
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
26
|
+
const allDeps = {
|
|
27
|
+
...packageJson.dependencies,
|
|
28
|
+
...packageJson.devDependencies,
|
|
29
|
+
};
|
|
30
|
+
return 'svelte' in allDeps || '@sveltejs/kit' in allDeps;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
generateContext(projectPath) {
|
|
37
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
38
|
+
let version = 'unknown';
|
|
39
|
+
let isSvelteKit = false;
|
|
40
|
+
let hasTypeScript = false;
|
|
41
|
+
if ((0, fs_1.existsSync)(packageJsonPath)) {
|
|
42
|
+
try {
|
|
43
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
44
|
+
const allDeps = {
|
|
45
|
+
...packageJson.dependencies,
|
|
46
|
+
...packageJson.devDependencies,
|
|
47
|
+
};
|
|
48
|
+
version = allDeps.svelte || allDeps['@sveltejs/kit'] || 'latest';
|
|
49
|
+
isSvelteKit = '@sveltejs/kit' in allDeps;
|
|
50
|
+
hasTypeScript = 'typescript' in allDeps || (0, fs_1.existsSync)((0, path_1.join)(projectPath, 'tsconfig.json'));
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Fallback to defaults
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Check for SvelteKit structure
|
|
57
|
+
const svelteConfigExists = (0, fs_1.existsSync)((0, path_1.join)(projectPath, 'svelte.config.js'));
|
|
58
|
+
const baseContext = {
|
|
59
|
+
stack: {
|
|
60
|
+
frontend: `Svelte ${version}`,
|
|
61
|
+
ui_library: 'Svelte Components',
|
|
62
|
+
state_management: 'Svelte Stores',
|
|
63
|
+
main_language: hasTypeScript ? 'TypeScript' : 'JavaScript',
|
|
64
|
+
},
|
|
65
|
+
integration: {
|
|
66
|
+
framework: 'svelte',
|
|
67
|
+
mcp_servers: this.mcpServers,
|
|
68
|
+
recommended_tools: [
|
|
69
|
+
'Svelte DevTools',
|
|
70
|
+
'@sveltejs/mcp for Claude Desktop integration',
|
|
71
|
+
'Vite for build tooling',
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
// Add SvelteKit-specific context
|
|
76
|
+
if (isSvelteKit) {
|
|
77
|
+
baseContext.stack = {
|
|
78
|
+
...baseContext.stack,
|
|
79
|
+
backend: 'SvelteKit Server Routes',
|
|
80
|
+
build: 'Vite + SvelteKit',
|
|
81
|
+
api_type: 'REST (SvelteKit endpoints)',
|
|
82
|
+
};
|
|
83
|
+
baseContext.project = {
|
|
84
|
+
architecture: 'SvelteKit Full-Stack',
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return baseContext;
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=svelte.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte.js","sourceRoot":"","sources":["../../../src/family/detectors/svelte.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Integration Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects TypeScript usage and generates TypeScript-optimized .faf context
|
|
5
|
+
*/
|
|
6
|
+
import { IntegrationDetector } from '../types.js';
|
|
7
|
+
export declare const typescriptDetector: IntegrationDetector;
|
|
8
|
+
//# sourceMappingURL=typescript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/family/detectors/typescript.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAW,MAAM,aAAa,CAAC;AAI3D,eAAO,MAAM,kBAAkB,EAAE,mBAkGhC,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TypeScript Integration Detector
|
|
4
|
+
*
|
|
5
|
+
* Detects TypeScript usage and generates TypeScript-optimized .faf context
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.typescriptDetector = void 0;
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
exports.typescriptDetector = {
|
|
12
|
+
name: 'typescript',
|
|
13
|
+
displayName: 'TypeScript',
|
|
14
|
+
tier: 'trophy', // Based on evaluation: TypeScript will score 99+
|
|
15
|
+
qualityScore: 99,
|
|
16
|
+
weeklyAdoption: 40_000_000, // ~40M weekly downloads
|
|
17
|
+
mcpServers: ['typescript-language-server', '@typescript/mcp-tools'],
|
|
18
|
+
contextContribution: ['main_language', 'type_system'],
|
|
19
|
+
detect(projectPath) {
|
|
20
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
21
|
+
const tsconfigPath = (0, path_1.join)(projectPath, 'tsconfig.json');
|
|
22
|
+
// Check for tsconfig.json first (strongest signal)
|
|
23
|
+
if ((0, fs_1.existsSync)(tsconfigPath)) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
// Check package.json dependencies
|
|
27
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
32
|
+
const allDeps = {
|
|
33
|
+
...packageJson.dependencies,
|
|
34
|
+
...packageJson.devDependencies,
|
|
35
|
+
};
|
|
36
|
+
return 'typescript' in allDeps;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
generateContext(projectPath) {
|
|
43
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
44
|
+
const tsconfigPath = (0, path_1.join)(projectPath, 'tsconfig.json');
|
|
45
|
+
let version = 'unknown';
|
|
46
|
+
let strictMode = false;
|
|
47
|
+
let target = 'unknown';
|
|
48
|
+
let moduleResolution = 'unknown';
|
|
49
|
+
// Get TypeScript version from package.json
|
|
50
|
+
if ((0, fs_1.existsSync)(packageJsonPath)) {
|
|
51
|
+
try {
|
|
52
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
53
|
+
const allDeps = {
|
|
54
|
+
...packageJson.dependencies,
|
|
55
|
+
...packageJson.devDependencies,
|
|
56
|
+
};
|
|
57
|
+
version = allDeps.typescript || 'latest';
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Fallback
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Get compiler options from tsconfig.json
|
|
64
|
+
if ((0, fs_1.existsSync)(tsconfigPath)) {
|
|
65
|
+
try {
|
|
66
|
+
const tsconfig = JSON.parse((0, fs_1.readFileSync)(tsconfigPath, 'utf-8'));
|
|
67
|
+
const compilerOptions = tsconfig.compilerOptions || {};
|
|
68
|
+
strictMode = compilerOptions.strict === true;
|
|
69
|
+
target = compilerOptions.target || 'ES2015';
|
|
70
|
+
moduleResolution = compilerOptions.moduleResolution || 'node';
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Fallback
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
stack: {
|
|
78
|
+
main_language: `TypeScript ${version}`,
|
|
79
|
+
type_system: strictMode ? 'TypeScript Strict Mode' : 'TypeScript',
|
|
80
|
+
build: 'TypeScript Compiler (tsc)',
|
|
81
|
+
},
|
|
82
|
+
project: {
|
|
83
|
+
typescript_config: {
|
|
84
|
+
strict: strictMode,
|
|
85
|
+
target,
|
|
86
|
+
module_resolution: moduleResolution,
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
integration: {
|
|
90
|
+
framework: 'typescript',
|
|
91
|
+
mcp_servers: this.mcpServers,
|
|
92
|
+
recommended_tools: [
|
|
93
|
+
'typescript-language-server for LSP support',
|
|
94
|
+
'@typescript/mcp-tools for Claude Desktop',
|
|
95
|
+
'ts-node for development',
|
|
96
|
+
'ESLint with @typescript-eslint plugin',
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=typescript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/family/detectors/typescript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../../../src/family/detectors/vite.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAW,MAAM,aAAa,CAAC;AAI3D,eAAO,MAAM,YAAY,EAAE,mBAwF1B,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Vite Integration Detector
|
|
4
|
+
*
|
|
5
|
+
* Detects Vite usage and generates Vite-optimized .faf context
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.viteDetector = void 0;
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
exports.viteDetector = {
|
|
12
|
+
name: 'vite',
|
|
13
|
+
displayName: 'Vite',
|
|
14
|
+
tier: 'gold', // Based on evaluation: Vite will score 95+
|
|
15
|
+
qualityScore: 97,
|
|
16
|
+
weeklyAdoption: 9_000_000, // ~9M weekly downloads
|
|
17
|
+
mcpServers: ['vite-mcp-server'],
|
|
18
|
+
contextContribution: ['build', 'package_manager'],
|
|
19
|
+
detect(projectPath) {
|
|
20
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
21
|
+
const viteConfigExists = (0, fs_1.existsSync)((0, path_1.join)(projectPath, 'vite.config.js')) ||
|
|
22
|
+
(0, fs_1.existsSync)((0, path_1.join)(projectPath, 'vite.config.ts'));
|
|
23
|
+
// vite.config.* is strongest signal
|
|
24
|
+
if (viteConfigExists) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
// Check package.json dependencies
|
|
28
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
33
|
+
const allDeps = {
|
|
34
|
+
...packageJson.dependencies,
|
|
35
|
+
...packageJson.devDependencies,
|
|
36
|
+
};
|
|
37
|
+
return 'vite' in allDeps;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
generateContext(projectPath) {
|
|
44
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
45
|
+
let version = 'unknown';
|
|
46
|
+
let plugins = [];
|
|
47
|
+
// Get Vite version and plugins from package.json
|
|
48
|
+
if ((0, fs_1.existsSync)(packageJsonPath)) {
|
|
49
|
+
try {
|
|
50
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
51
|
+
const allDeps = {
|
|
52
|
+
...packageJson.dependencies,
|
|
53
|
+
...packageJson.devDependencies,
|
|
54
|
+
};
|
|
55
|
+
version = allDeps.vite || 'latest';
|
|
56
|
+
// Detect common Vite plugins
|
|
57
|
+
const vitePlugins = Object.keys(allDeps).filter((dep) => dep.startsWith('@vitejs/plugin-') || dep.startsWith('vite-plugin-'));
|
|
58
|
+
plugins = vitePlugins.map((plugin) => plugin.replace('@vitejs/plugin-', '').replace('vite-plugin-', ''));
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Fallback
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
stack: {
|
|
66
|
+
build: `Vite ${version}`,
|
|
67
|
+
package_manager: 'npm/pnpm/yarn (Vite compatible)',
|
|
68
|
+
},
|
|
69
|
+
project: {
|
|
70
|
+
build_config: {
|
|
71
|
+
tool: 'vite',
|
|
72
|
+
plugins: plugins.length > 0 ? plugins : ['none detected'],
|
|
73
|
+
hmr: 'enabled',
|
|
74
|
+
optimization: 'production builds',
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
integration: {
|
|
78
|
+
framework: 'vite',
|
|
79
|
+
mcp_servers: this.mcpServers,
|
|
80
|
+
recommended_tools: [
|
|
81
|
+
'vite-mcp-server for Claude Desktop integration',
|
|
82
|
+
'Vite DevTools (browser extension)',
|
|
83
|
+
'@vitejs/plugin-react or @vitejs/plugin-vue for framework support',
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=vite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../../../src/family/detectors/vite.ts"],"names":[],"mappings":"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"}
|