faf-cli 3.0.2 → 3.0.4
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 +56 -21
- package/assets/Orange-Smiley-1280.png +0 -0
- 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 +336 -0
- package/dist/commands/fam.js.map +1 -0
- package/dist/commands/todo.js +9 -8
- package/dist/commands/todo.js.map +1 -1
- 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 +102 -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 +106 -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 +85 -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 +102 -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 +112 -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 +97 -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
- /package/assets/{Orange-Smiley copy.png → Orange-Smiley-328.png} +0 -0
|
@@ -0,0 +1,106 @@
|
|
|
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: [
|
|
18
|
+
'@playwright/mcp', // #2: 625k/week - Browser automation & testing
|
|
19
|
+
'@expo/mcp-tunnel', // #3: 543k/week - React Native & Expo mobile development
|
|
20
|
+
'@upstash/context7-mcp', // #5: 236k/week - Edge database & Redis
|
|
21
|
+
'mcp-proxy', // #6: 197k/week - Infrastructure & proxy
|
|
22
|
+
'chrome-devtools-mcp', // #7: 156k/week - Chrome DevTools debugging
|
|
23
|
+
'@mastra/mcp', // #8: 130k/week - AI workflows & automation
|
|
24
|
+
'mcp-handler', // #11: 59k/week - Vercel adapter for Next.js
|
|
25
|
+
'@langchain/mcp-adapters', // #13: 42k/week - LangChain AI integration
|
|
26
|
+
'@mzxrai/mcp-webresearch', // #14: 36k/week - Web research tools
|
|
27
|
+
'@supabase/mcp-utils', // #15: 25k/week - Supabase backend integration
|
|
28
|
+
],
|
|
29
|
+
contextContribution: ['frontend', 'backend', 'runtime', 'hosting', 'api_type'],
|
|
30
|
+
detect(projectPath) {
|
|
31
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
32
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
37
|
+
const allDeps = {
|
|
38
|
+
...packageJson.dependencies,
|
|
39
|
+
...packageJson.devDependencies,
|
|
40
|
+
};
|
|
41
|
+
return 'next' in allDeps;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
generateContext(projectPath) {
|
|
48
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
49
|
+
let version = 'unknown';
|
|
50
|
+
let hasAppRouter = false;
|
|
51
|
+
let hasTypeScript = false;
|
|
52
|
+
if ((0, fs_1.existsSync)(packageJsonPath)) {
|
|
53
|
+
try {
|
|
54
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
55
|
+
const allDeps = {
|
|
56
|
+
...packageJson.dependencies,
|
|
57
|
+
...packageJson.devDependencies,
|
|
58
|
+
};
|
|
59
|
+
version = allDeps.next || 'latest';
|
|
60
|
+
hasTypeScript = 'typescript' in allDeps || '@types/node' in allDeps;
|
|
61
|
+
// Check if using App Router (Next 13+)
|
|
62
|
+
const versionNum = parseFloat(version.replace(/[^\d.]/g, ''));
|
|
63
|
+
hasAppRouter = versionNum >= 13;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Fallback to defaults
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Check for app directory
|
|
70
|
+
const appDirExists = (0, fs_1.existsSync)((0, path_1.join)(projectPath, 'app'));
|
|
71
|
+
return {
|
|
72
|
+
stack: {
|
|
73
|
+
frontend: `Next.js ${version}`,
|
|
74
|
+
backend: 'Next.js API Routes',
|
|
75
|
+
runtime: 'Node.js (Vercel Edge Runtime compatible)',
|
|
76
|
+
build: 'Next.js Compiler (Turbopack/Webpack)',
|
|
77
|
+
api_type: 'REST/GraphQL',
|
|
78
|
+
hosting: 'Vercel (optimized)',
|
|
79
|
+
main_language: hasTypeScript ? 'TypeScript' : 'JavaScript',
|
|
80
|
+
},
|
|
81
|
+
project: {
|
|
82
|
+
architecture: appDirExists || hasAppRouter ? 'App Router' : 'Pages Router',
|
|
83
|
+
},
|
|
84
|
+
integration: {
|
|
85
|
+
framework: 'next',
|
|
86
|
+
mcp_servers: this.mcpServers,
|
|
87
|
+
recommended_tools: [
|
|
88
|
+
'@playwright/mcp - Browser automation & testing (625k weekly)',
|
|
89
|
+
'@expo/mcp-tunnel - React Native & Expo mobile (543k weekly)',
|
|
90
|
+
'@upstash/context7-mcp - Edge database & Redis (236k weekly)',
|
|
91
|
+
'mcp-proxy - Infrastructure & proxy (197k weekly)',
|
|
92
|
+
'chrome-devtools-mcp - Chrome DevTools debugging (156k weekly)',
|
|
93
|
+
'@mastra/mcp - AI workflows & automation (130k weekly)',
|
|
94
|
+
'mcp-handler - Vercel adapter for Next.js (59k weekly)',
|
|
95
|
+
'@langchain/mcp-adapters - LangChain AI integration (42k weekly)',
|
|
96
|
+
'@mzxrai/mcp-webresearch - Web research tools (36k weekly)',
|
|
97
|
+
'@supabase/mcp-utils - Supabase backend integration (25k weekly)',
|
|
98
|
+
'Next.js DevTools',
|
|
99
|
+
'Vercel CLI for local development',
|
|
100
|
+
'React Developer Tools',
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
//# 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,mBA+E3B,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
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: [
|
|
18
|
+
'@playwright/mcp', // #2: 625k/week - Browser automation & testing
|
|
19
|
+
'@expo/mcp-tunnel', // #3: 543k/week - React Native & Expo mobile development
|
|
20
|
+
'chrome-devtools-mcp', // #7: 156k/week - Chrome DevTools debugging
|
|
21
|
+
'@mastra/mcp', // #8: 130k/week - AI workflows & automation
|
|
22
|
+
'@langchain/mcp-adapters', // #13: 42k/week - LangChain AI integration
|
|
23
|
+
'@mzxrai/mcp-webresearch', // #14: 36k/week - Web research tools
|
|
24
|
+
],
|
|
25
|
+
contextContribution: ['frontend', 'ui_library', 'state_management'],
|
|
26
|
+
detect(projectPath) {
|
|
27
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
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 'react' in allDeps || 'react-dom' 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 hasTypeScript = false;
|
|
47
|
+
if ((0, fs_1.existsSync)(packageJsonPath)) {
|
|
48
|
+
try {
|
|
49
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
50
|
+
const allDeps = {
|
|
51
|
+
...packageJson.dependencies,
|
|
52
|
+
...packageJson.devDependencies,
|
|
53
|
+
};
|
|
54
|
+
version = allDeps.react || 'latest';
|
|
55
|
+
hasTypeScript = 'typescript' in allDeps || '@types/react' in allDeps;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Fallback to defaults
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
stack: {
|
|
63
|
+
frontend: `React ${version}`,
|
|
64
|
+
ui_library: 'React Components',
|
|
65
|
+
state_management: 'React Hooks',
|
|
66
|
+
main_language: hasTypeScript ? 'TypeScript' : 'JavaScript',
|
|
67
|
+
},
|
|
68
|
+
integration: {
|
|
69
|
+
framework: 'react',
|
|
70
|
+
mcp_servers: this.mcpServers,
|
|
71
|
+
recommended_tools: [
|
|
72
|
+
'@playwright/mcp - Browser automation & testing (625k weekly)',
|
|
73
|
+
'@expo/mcp-tunnel - React Native & Expo mobile (543k weekly)',
|
|
74
|
+
'chrome-devtools-mcp - Chrome DevTools debugging (156k weekly)',
|
|
75
|
+
'@mastra/mcp - AI workflows & automation (130k weekly)',
|
|
76
|
+
'@langchain/mcp-adapters - LangChain AI integration (42k weekly)',
|
|
77
|
+
'@mzxrai/mcp-webresearch - Web research tools (36k weekly)',
|
|
78
|
+
'React Developer Tools (browser extension)',
|
|
79
|
+
'ESLint with react plugin',
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
//# 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;QACV,iBAAiB,EAAY,+CAA+C;QAC5E,kBAAkB,EAAW,yDAAyD;QACtF,qBAAqB,EAAQ,4CAA4C;QACzE,aAAa,EAAgB,4CAA4C;QACzE,yBAAyB,EAAI,2CAA2C;QACxE,yBAAyB,EAAI,qCAAqC;KACnE;IACD,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,8DAA8D;oBAC9D,6DAA6D;oBAC7D,+DAA+D;oBAC/D,uDAAuD;oBACvD,iEAAiE;oBACjE,2DAA2D;oBAC3D,2CAA2C;oBAC3C,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,mBAmG5B,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
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: [
|
|
18
|
+
'@playwright/mcp', // #2: 625k/week - Browser automation & testing
|
|
19
|
+
'mcp-proxy', // #6: 197k/week - Infrastructure & proxy
|
|
20
|
+
'chrome-devtools-mcp', // #7: 156k/week - Chrome DevTools debugging
|
|
21
|
+
'@mastra/mcp', // #8: 130k/week - AI workflows & automation
|
|
22
|
+
'@langchain/mcp-adapters', // #13: 42k/week - LangChain AI integration
|
|
23
|
+
'@mzxrai/mcp-webresearch', // #14: 36k/week - Web research tools
|
|
24
|
+
],
|
|
25
|
+
contextContribution: ['frontend', 'ui_library', 'state_management'],
|
|
26
|
+
detect(projectPath) {
|
|
27
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
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 'svelte' in allDeps || '@sveltejs/kit' 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 isSvelteKit = false;
|
|
47
|
+
let hasTypeScript = false;
|
|
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.svelte || allDeps['@sveltejs/kit'] || 'latest';
|
|
56
|
+
isSvelteKit = '@sveltejs/kit' in allDeps;
|
|
57
|
+
hasTypeScript = 'typescript' in allDeps || (0, fs_1.existsSync)((0, path_1.join)(projectPath, 'tsconfig.json'));
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Fallback to defaults
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Check for SvelteKit structure
|
|
64
|
+
const svelteConfigExists = (0, fs_1.existsSync)((0, path_1.join)(projectPath, 'svelte.config.js'));
|
|
65
|
+
const baseContext = {
|
|
66
|
+
stack: {
|
|
67
|
+
frontend: `Svelte ${version}`,
|
|
68
|
+
ui_library: 'Svelte Components',
|
|
69
|
+
state_management: 'Svelte Stores',
|
|
70
|
+
main_language: hasTypeScript ? 'TypeScript' : 'JavaScript',
|
|
71
|
+
},
|
|
72
|
+
integration: {
|
|
73
|
+
framework: 'svelte',
|
|
74
|
+
mcp_servers: this.mcpServers,
|
|
75
|
+
recommended_tools: [
|
|
76
|
+
'@playwright/mcp - Browser automation & testing (625k weekly)',
|
|
77
|
+
'mcp-proxy - Infrastructure & proxy (197k weekly)',
|
|
78
|
+
'chrome-devtools-mcp - Chrome DevTools debugging (156k weekly)',
|
|
79
|
+
'@mastra/mcp - AI workflows & automation (130k weekly)',
|
|
80
|
+
'@langchain/mcp-adapters - LangChain AI integration (42k weekly)',
|
|
81
|
+
'@mzxrai/mcp-webresearch - Web research tools (36k weekly)',
|
|
82
|
+
'Svelte DevTools',
|
|
83
|
+
'Vite for build tooling',
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
// Add SvelteKit-specific context
|
|
88
|
+
if (isSvelteKit) {
|
|
89
|
+
baseContext.stack = {
|
|
90
|
+
...baseContext.stack,
|
|
91
|
+
backend: 'SvelteKit Server Routes',
|
|
92
|
+
build: 'Vite + SvelteKit',
|
|
93
|
+
api_type: 'REST (SvelteKit endpoints)',
|
|
94
|
+
};
|
|
95
|
+
baseContext.project = {
|
|
96
|
+
architecture: 'SvelteKit Full-Stack',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return baseContext;
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
//# 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,mBA4GhC,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
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: [
|
|
18
|
+
'mcp-proxy', // #6: 197k/week - Infrastructure & proxy
|
|
19
|
+
'chrome-devtools-mcp', // #7: 156k/week - Chrome DevTools debugging
|
|
20
|
+
'@mastra/mcp', // #8: 130k/week - AI workflows & automation
|
|
21
|
+
'mcp-framework', // #12: 58k/week - Framework for building MCPs
|
|
22
|
+
'@langchain/mcp-adapters', // #13: 42k/week - LangChain AI integration
|
|
23
|
+
],
|
|
24
|
+
contextContribution: ['main_language', 'type_system'],
|
|
25
|
+
detect(projectPath) {
|
|
26
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
27
|
+
const tsconfigPath = (0, path_1.join)(projectPath, 'tsconfig.json');
|
|
28
|
+
// Check for tsconfig.json first (strongest signal)
|
|
29
|
+
if ((0, fs_1.existsSync)(tsconfigPath)) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
// Check package.json dependencies
|
|
33
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
38
|
+
const allDeps = {
|
|
39
|
+
...packageJson.dependencies,
|
|
40
|
+
...packageJson.devDependencies,
|
|
41
|
+
};
|
|
42
|
+
return 'typescript' in allDeps;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
generateContext(projectPath) {
|
|
49
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
50
|
+
const tsconfigPath = (0, path_1.join)(projectPath, 'tsconfig.json');
|
|
51
|
+
let version = 'unknown';
|
|
52
|
+
let strictMode = false;
|
|
53
|
+
let target = 'unknown';
|
|
54
|
+
let moduleResolution = 'unknown';
|
|
55
|
+
// Get TypeScript version from package.json
|
|
56
|
+
if ((0, fs_1.existsSync)(packageJsonPath)) {
|
|
57
|
+
try {
|
|
58
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
59
|
+
const allDeps = {
|
|
60
|
+
...packageJson.dependencies,
|
|
61
|
+
...packageJson.devDependencies,
|
|
62
|
+
};
|
|
63
|
+
version = allDeps.typescript || 'latest';
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Fallback
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Get compiler options from tsconfig.json
|
|
70
|
+
if ((0, fs_1.existsSync)(tsconfigPath)) {
|
|
71
|
+
try {
|
|
72
|
+
const tsconfig = JSON.parse((0, fs_1.readFileSync)(tsconfigPath, 'utf-8'));
|
|
73
|
+
const compilerOptions = tsconfig.compilerOptions || {};
|
|
74
|
+
strictMode = compilerOptions.strict === true;
|
|
75
|
+
target = compilerOptions.target || 'ES2015';
|
|
76
|
+
moduleResolution = compilerOptions.moduleResolution || 'node';
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Fallback
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
stack: {
|
|
84
|
+
main_language: `TypeScript ${version}`,
|
|
85
|
+
type_system: strictMode ? 'TypeScript Strict Mode' : 'TypeScript',
|
|
86
|
+
build: 'TypeScript Compiler (tsc)',
|
|
87
|
+
},
|
|
88
|
+
project: {
|
|
89
|
+
typescript_config: {
|
|
90
|
+
strict: strictMode,
|
|
91
|
+
target,
|
|
92
|
+
module_resolution: moduleResolution,
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
integration: {
|
|
96
|
+
framework: 'typescript',
|
|
97
|
+
mcp_servers: this.mcpServers,
|
|
98
|
+
recommended_tools: [
|
|
99
|
+
'mcp-proxy - Infrastructure & proxy (197k weekly)',
|
|
100
|
+
'chrome-devtools-mcp - Chrome DevTools debugging (156k weekly)',
|
|
101
|
+
'@mastra/mcp - AI workflows & automation (130k weekly)',
|
|
102
|
+
'mcp-framework - Framework for building MCPs (58k weekly)',
|
|
103
|
+
'@langchain/mcp-adapters - LangChain AI integration (42k weekly)',
|
|
104
|
+
'typescript-language-server for LSP support',
|
|
105
|
+
'ts-node for development',
|
|
106
|
+
'ESLint with @typescript-eslint plugin',
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
//# 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,mBAgG1B,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
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: [
|
|
18
|
+
'@playwright/mcp', // #2: 625k/week - Browser automation & testing
|
|
19
|
+
'mcp-proxy', // #6: 197k/week - Infrastructure & proxy
|
|
20
|
+
'chrome-devtools-mcp', // #7: 156k/week - Chrome DevTools debugging
|
|
21
|
+
'@mastra/mcp', // #8: 130k/week - AI workflows & automation
|
|
22
|
+
],
|
|
23
|
+
contextContribution: ['build', 'package_manager'],
|
|
24
|
+
detect(projectPath) {
|
|
25
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
26
|
+
const viteConfigExists = (0, fs_1.existsSync)((0, path_1.join)(projectPath, 'vite.config.js')) ||
|
|
27
|
+
(0, fs_1.existsSync)((0, path_1.join)(projectPath, 'vite.config.ts'));
|
|
28
|
+
// vite.config.* is strongest signal
|
|
29
|
+
if (viteConfigExists) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
// Check package.json dependencies
|
|
33
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
38
|
+
const allDeps = {
|
|
39
|
+
...packageJson.dependencies,
|
|
40
|
+
...packageJson.devDependencies,
|
|
41
|
+
};
|
|
42
|
+
return 'vite' in allDeps;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
generateContext(projectPath) {
|
|
49
|
+
const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
|
|
50
|
+
let version = 'unknown';
|
|
51
|
+
let plugins = [];
|
|
52
|
+
// Get Vite version and plugins from package.json
|
|
53
|
+
if ((0, fs_1.existsSync)(packageJsonPath)) {
|
|
54
|
+
try {
|
|
55
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
56
|
+
const allDeps = {
|
|
57
|
+
...packageJson.dependencies,
|
|
58
|
+
...packageJson.devDependencies,
|
|
59
|
+
};
|
|
60
|
+
version = allDeps.vite || 'latest';
|
|
61
|
+
// Detect common Vite plugins
|
|
62
|
+
const vitePlugins = Object.keys(allDeps).filter((dep) => dep.startsWith('@vitejs/plugin-') || dep.startsWith('vite-plugin-'));
|
|
63
|
+
plugins = vitePlugins.map((plugin) => plugin.replace('@vitejs/plugin-', '').replace('vite-plugin-', ''));
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Fallback
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
stack: {
|
|
71
|
+
build: `Vite ${version}`,
|
|
72
|
+
package_manager: 'npm/pnpm/yarn (Vite compatible)',
|
|
73
|
+
},
|
|
74
|
+
project: {
|
|
75
|
+
build_config: {
|
|
76
|
+
tool: 'vite',
|
|
77
|
+
plugins: plugins.length > 0 ? plugins : ['none detected'],
|
|
78
|
+
hmr: 'enabled',
|
|
79
|
+
optimization: 'production builds',
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
integration: {
|
|
83
|
+
framework: 'vite',
|
|
84
|
+
mcp_servers: this.mcpServers,
|
|
85
|
+
recommended_tools: [
|
|
86
|
+
'@playwright/mcp - Browser automation & testing (625k weekly)',
|
|
87
|
+
'mcp-proxy - Infrastructure & proxy (197k weekly)',
|
|
88
|
+
'chrome-devtools-mcp - Chrome DevTools debugging (156k weekly)',
|
|
89
|
+
'@mastra/mcp - AI workflows & automation (130k weekly)',
|
|
90
|
+
'Vite DevTools (browser extension)',
|
|
91
|
+
'@vitejs/plugin-react or @vitejs/plugin-vue for framework support',
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
//# 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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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FAF Integration System
|
|
3
|
+
*
|
|
4
|
+
* Championship-grade integration detection and context generation
|
|
5
|
+
*
|
|
6
|
+
* Phase 1: Core integrations (React, Next, Svelte, TypeScript, Vite, n8n)
|
|
7
|
+
* Minimum quality: 85% (Bronze tier)
|
|
8
|
+
*/
|
|
9
|
+
export type { FafFile, IntegrationDetector, IntegrationRegistry } from './types.js';
|
|
10
|
+
export { FafIntegrationRegistry, integrationRegistry } from './registry.js';
|
|
11
|
+
export { reactDetector } from './detectors/react.js';
|
|
12
|
+
export { nextDetector } from './detectors/next.js';
|
|
13
|
+
export { svelteDetector } from './detectors/svelte.js';
|
|
14
|
+
export { typescriptDetector } from './detectors/typescript.js';
|
|
15
|
+
export { viteDetector } from './detectors/vite.js';
|
|
16
|
+
export { n8nDetector } from './detectors/n8n.js';
|
|
17
|
+
export declare function detectAndGenerate(projectPath: string): Promise<{
|
|
18
|
+
detected: import("./types.js").IntegrationDetector[];
|
|
19
|
+
context: Partial<import("./types.js").FafFile>;
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/family/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGpF,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAG5E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM;;;GAS1D"}
|