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.
Files changed (49) hide show
  1. package/README.md +56 -21
  2. package/assets/Orange-Smiley-1280.png +0 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +46 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/fam.d.ts +15 -0
  7. package/dist/commands/fam.d.ts.map +1 -0
  8. package/dist/commands/fam.js +336 -0
  9. package/dist/commands/fam.js.map +1 -0
  10. package/dist/commands/todo.js +9 -8
  11. package/dist/commands/todo.js.map +1 -1
  12. package/dist/family/detectors/n8n.d.ts +10 -0
  13. package/dist/family/detectors/n8n.d.ts.map +1 -0
  14. package/dist/family/detectors/n8n.js +102 -0
  15. package/dist/family/detectors/n8n.js.map +1 -0
  16. package/dist/family/detectors/next.d.ts +8 -0
  17. package/dist/family/detectors/next.d.ts.map +1 -0
  18. package/dist/family/detectors/next.js +106 -0
  19. package/dist/family/detectors/next.js.map +1 -0
  20. package/dist/family/detectors/react.d.ts +8 -0
  21. package/dist/family/detectors/react.d.ts.map +1 -0
  22. package/dist/family/detectors/react.js +85 -0
  23. package/dist/family/detectors/react.js.map +1 -0
  24. package/dist/family/detectors/svelte.d.ts +8 -0
  25. package/dist/family/detectors/svelte.d.ts.map +1 -0
  26. package/dist/family/detectors/svelte.js +102 -0
  27. package/dist/family/detectors/svelte.js.map +1 -0
  28. package/dist/family/detectors/typescript.d.ts +8 -0
  29. package/dist/family/detectors/typescript.d.ts.map +1 -0
  30. package/dist/family/detectors/typescript.js +112 -0
  31. package/dist/family/detectors/typescript.js.map +1 -0
  32. package/dist/family/detectors/vite.d.ts +8 -0
  33. package/dist/family/detectors/vite.d.ts.map +1 -0
  34. package/dist/family/detectors/vite.js +97 -0
  35. package/dist/family/detectors/vite.js.map +1 -0
  36. package/dist/family/index.d.ts +21 -0
  37. package/dist/family/index.d.ts.map +1 -0
  38. package/dist/family/index.js +73 -0
  39. package/dist/family/index.js.map +1 -0
  40. package/dist/family/registry.d.ts +57 -0
  41. package/dist/family/registry.d.ts.map +1 -0
  42. package/dist/family/registry.js +154 -0
  43. package/dist/family/registry.js.map +1 -0
  44. package/dist/family/types.d.ts +94 -0
  45. package/dist/family/types.d.ts.map +1 -0
  46. package/dist/family/types.js +8 -0
  47. package/dist/family/types.js.map +1 -0
  48. package/package.json +20 -3
  49. /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,8 @@
1
+ /**
2
+ * React Integration Detector
3
+ *
4
+ * Detects React usage and generates React-optimized .faf context
5
+ */
6
+ import { IntegrationDetector } from '../types.js';
7
+ export declare const reactDetector: IntegrationDetector;
8
+ //# sourceMappingURL=react.d.ts.map
@@ -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,8 @@
1
+ /**
2
+ * Vite Integration Detector
3
+ *
4
+ * Detects Vite usage and generates Vite-optimized .faf context
5
+ */
6
+ import { IntegrationDetector } from '../types.js';
7
+ export declare const viteDetector: IntegrationDetector;
8
+ //# sourceMappingURL=vite.d.ts.map
@@ -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"}