faf-cli 3.0.1 → 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.
Files changed (67) hide show
  1. package/README.md +177 -31
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +46 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/auto.d.ts.map +1 -1
  6. package/dist/commands/auto.js +102 -0
  7. package/dist/commands/auto.js.map +1 -1
  8. package/dist/commands/fam.d.ts +15 -0
  9. package/dist/commands/fam.d.ts.map +1 -0
  10. package/dist/commands/fam.js +247 -0
  11. package/dist/commands/fam.js.map +1 -0
  12. package/dist/compiler/faf-compiler.d.ts.map +1 -1
  13. package/dist/compiler/faf-compiler.js +76 -4
  14. package/dist/compiler/faf-compiler.js.map +1 -1
  15. package/dist/core/platform-adapters.d.ts +76 -0
  16. package/dist/core/platform-adapters.d.ts.map +1 -0
  17. package/dist/core/platform-adapters.js +407 -0
  18. package/dist/core/platform-adapters.js.map +1 -0
  19. package/dist/core/universal-intelligence-generator.d.ts +156 -0
  20. package/dist/core/universal-intelligence-generator.d.ts.map +1 -0
  21. package/dist/core/universal-intelligence-generator.js +352 -0
  22. package/dist/core/universal-intelligence-generator.js.map +1 -0
  23. package/dist/family/detectors/n8n.d.ts +10 -0
  24. package/dist/family/detectors/n8n.d.ts.map +1 -0
  25. package/dist/family/detectors/n8n.js +95 -0
  26. package/dist/family/detectors/n8n.js.map +1 -0
  27. package/dist/family/detectors/next.d.ts +8 -0
  28. package/dist/family/detectors/next.d.ts.map +1 -0
  29. package/dist/family/detectors/next.js +86 -0
  30. package/dist/family/detectors/next.js.map +1 -0
  31. package/dist/family/detectors/react.d.ts +8 -0
  32. package/dist/family/detectors/react.d.ts.map +1 -0
  33. package/dist/family/detectors/react.js +73 -0
  34. package/dist/family/detectors/react.js.map +1 -0
  35. package/dist/family/detectors/svelte.d.ts +8 -0
  36. package/dist/family/detectors/svelte.d.ts.map +1 -0
  37. package/dist/family/detectors/svelte.js +90 -0
  38. package/dist/family/detectors/svelte.js.map +1 -0
  39. package/dist/family/detectors/typescript.d.ts +8 -0
  40. package/dist/family/detectors/typescript.d.ts.map +1 -0
  41. package/dist/family/detectors/typescript.js +102 -0
  42. package/dist/family/detectors/typescript.js.map +1 -0
  43. package/dist/family/detectors/vite.d.ts +8 -0
  44. package/dist/family/detectors/vite.d.ts.map +1 -0
  45. package/dist/family/detectors/vite.js +89 -0
  46. package/dist/family/detectors/vite.js.map +1 -0
  47. package/dist/family/index.d.ts +21 -0
  48. package/dist/family/index.d.ts.map +1 -0
  49. package/dist/family/index.js +73 -0
  50. package/dist/family/index.js.map +1 -0
  51. package/dist/family/registry.d.ts +57 -0
  52. package/dist/family/registry.d.ts.map +1 -0
  53. package/dist/family/registry.js +154 -0
  54. package/dist/family/registry.js.map +1 -0
  55. package/dist/family/types.d.ts +94 -0
  56. package/dist/family/types.d.ts.map +1 -0
  57. package/dist/family/types.js +8 -0
  58. package/dist/family/types.js.map +1 -0
  59. package/dist/tests/manual-validation.d.ts +8 -0
  60. package/dist/tests/manual-validation.d.ts.map +1 -0
  61. package/dist/tests/manual-validation.js +114 -0
  62. package/dist/tests/manual-validation.js.map +1 -0
  63. package/dist/utils/file-utils.d.ts +38 -0
  64. package/dist/utils/file-utils.d.ts.map +1 -1
  65. package/dist/utils/file-utils.js +148 -0
  66. package/dist/utils/file-utils.js.map +1 -1
  67. package/package.json +21 -4
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ /**
3
+ * FAF Integration Registry
4
+ *
5
+ * Central registry for all approved FAF integrations
6
+ * Orchestrates detection and context generation
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.n8nDetector = exports.viteDetector = exports.typescriptDetector = exports.svelteDetector = exports.nextDetector = exports.reactDetector = exports.integrationRegistry = exports.FafIntegrationRegistry = void 0;
10
+ const react_js_1 = require("./detectors/react.js");
11
+ Object.defineProperty(exports, "reactDetector", { enumerable: true, get: function () { return react_js_1.reactDetector; } });
12
+ const next_js_1 = require("./detectors/next.js");
13
+ Object.defineProperty(exports, "nextDetector", { enumerable: true, get: function () { return next_js_1.nextDetector; } });
14
+ const svelte_js_1 = require("./detectors/svelte.js");
15
+ Object.defineProperty(exports, "svelteDetector", { enumerable: true, get: function () { return svelte_js_1.svelteDetector; } });
16
+ const typescript_js_1 = require("./detectors/typescript.js");
17
+ Object.defineProperty(exports, "typescriptDetector", { enumerable: true, get: function () { return typescript_js_1.typescriptDetector; } });
18
+ const vite_js_1 = require("./detectors/vite.js");
19
+ Object.defineProperty(exports, "viteDetector", { enumerable: true, get: function () { return vite_js_1.viteDetector; } });
20
+ const n8n_js_1 = require("./detectors/n8n.js");
21
+ Object.defineProperty(exports, "n8nDetector", { enumerable: true, get: function () { return n8n_js_1.n8nDetector; } });
22
+ /**
23
+ * FAF Integration Registry
24
+ *
25
+ * Championship standard: Only integrations with 85+ quality score
26
+ */
27
+ class FafIntegrationRegistry {
28
+ integrations;
29
+ constructor() {
30
+ this.integrations = new Map();
31
+ // Phase 1: Core integrations (85+ quality score)
32
+ this.register(react_js_1.reactDetector);
33
+ this.register(next_js_1.nextDetector);
34
+ this.register(svelte_js_1.svelteDetector);
35
+ this.register(typescript_js_1.typescriptDetector);
36
+ this.register(vite_js_1.viteDetector);
37
+ this.register(n8n_js_1.n8nDetector);
38
+ }
39
+ /**
40
+ * Register a new integration
41
+ */
42
+ register(detector) {
43
+ this.integrations.set(detector.name, detector);
44
+ }
45
+ /**
46
+ * Get integration by name
47
+ */
48
+ get(name) {
49
+ return this.integrations.get(name);
50
+ }
51
+ /**
52
+ * Detect all integrations present in a project
53
+ */
54
+ async detectAll(projectPath) {
55
+ const detected = [];
56
+ for (const detector of this.integrations.values()) {
57
+ try {
58
+ const isPresent = await detector.detect(projectPath);
59
+ if (isPresent) {
60
+ detected.push(detector);
61
+ }
62
+ }
63
+ catch (error) {
64
+ console.error(`Error detecting ${detector.name}:`, error);
65
+ }
66
+ }
67
+ return detected;
68
+ }
69
+ /**
70
+ * Generate combined .faf context from all detected integrations
71
+ */
72
+ async generateContext(projectPath) {
73
+ const detected = await this.detectAll(projectPath);
74
+ // Merge contexts from all detected integrations
75
+ let combinedContext = {
76
+ stack: {},
77
+ project: {},
78
+ integration: {
79
+ detected_frameworks: [],
80
+ mcp_servers: [],
81
+ recommended_tools: [],
82
+ },
83
+ };
84
+ for (const detector of detected) {
85
+ try {
86
+ const context = await detector.generateContext(projectPath);
87
+ // Merge stack information
88
+ if (context.stack) {
89
+ combinedContext.stack = {
90
+ ...combinedContext.stack,
91
+ ...context.stack,
92
+ };
93
+ }
94
+ // Merge project information
95
+ if (context.project) {
96
+ combinedContext.project = {
97
+ ...combinedContext.project,
98
+ ...context.project,
99
+ };
100
+ }
101
+ // Accumulate integration information
102
+ if (context.integration) {
103
+ combinedContext.integration.detected_frameworks.push(detector.name);
104
+ combinedContext.integration.mcp_servers.push(...(context.integration.mcp_servers || []));
105
+ combinedContext.integration.recommended_tools.push(...(context.integration.recommended_tools || []));
106
+ }
107
+ }
108
+ catch (error) {
109
+ console.error(`Error generating context for ${detector.name}:`, error);
110
+ }
111
+ }
112
+ // Add integration summary
113
+ combinedContext.integration.summary = this.generateSummary(detected);
114
+ return combinedContext;
115
+ }
116
+ /**
117
+ * Generate human-readable summary of detected integrations
118
+ */
119
+ generateSummary(detected) {
120
+ if (detected.length === 0) {
121
+ return 'No FAF integrations detected';
122
+ }
123
+ const tiers = detected.map((d) => `${d.displayName} (${d.tier})`);
124
+ const frameworks = detected.map((d) => d.displayName).join(', ');
125
+ return `Fully integrated with: ${frameworks} | ${detected.length} championship-grade integration${detected.length > 1 ? 's' : ''}`;
126
+ }
127
+ /**
128
+ * Get all integration names
129
+ */
130
+ list() {
131
+ return Array.from(this.integrations.keys());
132
+ }
133
+ /**
134
+ * Get integration statistics
135
+ */
136
+ getStats() {
137
+ const stats = {
138
+ total: this.integrations.size,
139
+ byTier: {},
140
+ totalWeeklyAdoption: 0,
141
+ };
142
+ for (const detector of this.integrations.values()) {
143
+ // Count by tier
144
+ stats.byTier[detector.tier] = (stats.byTier[detector.tier] || 0) + 1;
145
+ // Sum weekly adoption
146
+ stats.totalWeeklyAdoption += detector.weeklyAdoption;
147
+ }
148
+ return stats;
149
+ }
150
+ }
151
+ exports.FafIntegrationRegistry = FafIntegrationRegistry;
152
+ // Export singleton instance
153
+ exports.integrationRegistry = new FafIntegrationRegistry();
154
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/family/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * FAF Integration System - Type Definitions
3
+ *
4
+ * Defines the integration quality model for smart stack detection
5
+ */
6
+ export interface FafFile {
7
+ project?: {
8
+ name?: string;
9
+ goal?: string;
10
+ main_language?: string;
11
+ architecture?: string;
12
+ typescript_config?: {
13
+ strict?: boolean;
14
+ target?: string;
15
+ module_resolution?: string;
16
+ };
17
+ build_config?: {
18
+ tool?: string;
19
+ plugins?: string[];
20
+ hmr?: string;
21
+ optimization?: string;
22
+ };
23
+ automation?: {
24
+ platform?: string;
25
+ custom_nodes?: number;
26
+ node_packages?: string[];
27
+ has_config?: boolean;
28
+ };
29
+ [key: string]: any;
30
+ };
31
+ stack?: {
32
+ frontend?: string;
33
+ backend?: string;
34
+ runtime?: string;
35
+ build?: string;
36
+ package_manager?: string;
37
+ api_type?: string;
38
+ main_language?: string;
39
+ ui_library?: string;
40
+ state_management?: string;
41
+ hosting?: string;
42
+ type_system?: string;
43
+ automation_platform?: string;
44
+ workflow_engine?: string;
45
+ integration_layer?: string;
46
+ api_orchestration?: string;
47
+ [key: string]: any;
48
+ };
49
+ integration?: {
50
+ framework?: string;
51
+ detected_frameworks?: string[];
52
+ mcp_servers?: string[];
53
+ recommended_tools?: string[];
54
+ summary?: string;
55
+ [key: string]: any;
56
+ };
57
+ scores?: {
58
+ foundation?: number;
59
+ architecture?: number;
60
+ deployment?: number;
61
+ };
62
+ [key: string]: any;
63
+ }
64
+ export interface IntegrationDetector {
65
+ /** Integration name (e.g., 'react', 'next', 'svelte') */
66
+ name: string;
67
+ /** Display name for user messaging */
68
+ displayName: string;
69
+ /** Quality tier (based on evaluation) */
70
+ tier: 'trophy' | 'gold' | 'silver' | 'bronze';
71
+ /** Quality score (0-100) */
72
+ qualityScore: number;
73
+ /** Weekly adoption (npm downloads) */
74
+ weeklyAdoption: number;
75
+ /** Available MCP servers for this integration */
76
+ mcpServers: string[];
77
+ /** Detect if this integration is used in a project */
78
+ detect: (projectPath: string) => boolean | Promise<boolean>;
79
+ /** Generate .faf context from detected integration */
80
+ generateContext: (projectPath: string) => Partial<FafFile> | Promise<Partial<FafFile>>;
81
+ /** Context slots filled by this integration */
82
+ contextContribution: string[];
83
+ }
84
+ export interface IntegrationRegistry {
85
+ /** All approved integrations */
86
+ integrations: Map<string, IntegrationDetector>;
87
+ /** Get integration by name */
88
+ get(name: string): IntegrationDetector | undefined;
89
+ /** Detect all integrations in a project */
90
+ detectAll(projectPath: string): Promise<IntegrationDetector[]>;
91
+ /** Generate combined .faf context from all detected integrations */
92
+ generateContext(projectPath: string): Promise<Partial<FafFile>>;
93
+ }
94
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/family/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * FAF Integration System - Type Definitions
4
+ *
5
+ * Defines the integration quality model for smart stack detection
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/family/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 🏆 MANUAL VALIDATION SCRIPT
3
+ *
4
+ * Quick test to validate the universal pattern works with real data
5
+ * Run this to see the pattern in action!
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=manual-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual-validation.d.ts","sourceRoot":"","sources":["../../src/tests/manual-validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ /**
3
+ * 🏆 MANUAL VALIDATION SCRIPT
4
+ *
5
+ * Quick test to validate the universal pattern works with real data
6
+ * Run this to see the pattern in action!
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ const universal_intelligence_generator_1 = require("../core/universal-intelligence-generator");
43
+ const path = __importStar(require("path"));
44
+ const fs = __importStar(require("fs/promises"));
45
+ async function main() {
46
+ console.log('🏎️ FAF Universal Intelligence Pattern - Manual Validation\n');
47
+ console.log('FOUNDATIONAL FIRST, UNIVERSAL BY DEFAULT\n');
48
+ console.log('═'.repeat(60));
49
+ const testDataDir = path.join(__dirname, 'test-data');
50
+ // Test 1: n8n RAG Workflow
51
+ console.log('\n📋 Test 1: n8n RAG Support Bot Workflow');
52
+ console.log('─'.repeat(60));
53
+ try {
54
+ const n8nFile = path.join(testDataDir, 'sample-n8n-rag-workflow.json');
55
+ const start1 = Date.now();
56
+ const faf1 = await (0, universal_intelligence_generator_1.generateFafFromAny)(n8nFile);
57
+ const duration1 = Date.now() - start1;
58
+ console.log('✅ SUCCESS');
59
+ console.log(`⚡ Generated in ${duration1}ms`);
60
+ console.log('\n.faf Output (first 500 chars):');
61
+ console.log(faf1.substring(0, 500) + '...\n');
62
+ // Save output
63
+ await fs.writeFile(path.join(testDataDir, 'output-n8n.faf'), faf1);
64
+ console.log('📝 Saved to: output-n8n.faf');
65
+ }
66
+ catch (error) {
67
+ console.log('❌ FAILED:', error.message);
68
+ }
69
+ // Test 2: OpenAI Assistant
70
+ console.log('\n📋 Test 2: OpenAI Customer Support Assistant');
71
+ console.log('─'.repeat(60));
72
+ try {
73
+ const openaiFile = path.join(testDataDir, 'sample-openai-assistant.json');
74
+ const start2 = Date.now();
75
+ const faf2 = await (0, universal_intelligence_generator_1.generateFafFromAny)(openaiFile);
76
+ const duration2 = Date.now() - start2;
77
+ console.log('✅ SUCCESS');
78
+ console.log(`⚡ Generated in ${duration2}ms`);
79
+ console.log('\n.faf Output (first 500 chars):');
80
+ console.log(faf2.substring(0, 500) + '...\n');
81
+ // Save output
82
+ await fs.writeFile(path.join(testDataDir, 'output-openai.faf'), faf2);
83
+ console.log('📝 Saved to: output-openai.faf');
84
+ }
85
+ catch (error) {
86
+ console.log('❌ FAILED:', error.message);
87
+ }
88
+ // Test 3: Unknown format (should fail gracefully)
89
+ console.log('\n📋 Test 3: Unknown Format (Expected Failure)');
90
+ console.log('─'.repeat(60));
91
+ try {
92
+ const unknownFile = path.join(testDataDir, 'unknown-format.json');
93
+ // Create unknown format file
94
+ await fs.writeFile(unknownFile, JSON.stringify({
95
+ unknown: 'format',
96
+ random: 'data'
97
+ }));
98
+ await (0, universal_intelligence_generator_1.generateFafFromAny)(unknownFile);
99
+ console.log('❌ UNEXPECTED: Should have thrown error');
100
+ }
101
+ catch (error) {
102
+ console.log('✅ CORRECTLY REJECTED');
103
+ console.log(` Error: ${error.message}`);
104
+ }
105
+ console.log('\n' + '═'.repeat(60));
106
+ console.log('🏁 Manual Validation Complete\n');
107
+ console.log('Next steps:');
108
+ console.log(' 1. Check output-n8n.faf and output-openai.faf files');
109
+ console.log(' 2. Verify .faf structure is consistent');
110
+ console.log(' 3. Validate scores are 70%+');
111
+ console.log(' 4. Confirm championship quality\n');
112
+ }
113
+ main().catch(console.error);
114
+ //# sourceMappingURL=manual-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual-validation.js","sourceRoot":"","sources":["../../src/tests/manual-validation.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,44 @@ export interface TypeScriptContext {
46
46
  excludes: string[];
47
47
  engineeringQuality: "standard" | "professional" | "f1_inspired";
48
48
  }
49
+ /**
50
+ * Detect n8n workflow files in directory
51
+ */
52
+ export declare function findN8nWorkflows(projectDir?: string): Promise<string[]>;
53
+ /**
54
+ * Find Make.com scenario files in a project directory
55
+ *
56
+ * Detects Make.com blueprint JSON files by checking for:
57
+ * - name string (scenario name)
58
+ * - flow array (modules/steps)
59
+ * - metadata object (scenario metadata)
60
+ *
61
+ * @param projectDir - Directory to search (defaults to cwd)
62
+ * @returns Array of Make.com scenario file names
63
+ */
64
+ export declare function findMakeScenarios(projectDir?: string): Promise<string[]>;
65
+ /**
66
+ * Find Google Opal mini-app files in a project directory
67
+ *
68
+ * Detects Opal mini-app JSON files by checking for:
69
+ * - steps array (mini-app steps)
70
+ * - model string (AI model used)
71
+ *
72
+ * @param projectDir - Directory to search (defaults to cwd)
73
+ * @returns Array of Opal mini-app file names
74
+ */
75
+ export declare function findOpalMiniApps(projectDir?: string): Promise<string[]>;
76
+ /**
77
+ * Find OpenAI Assistant files in a project directory
78
+ *
79
+ * Detects OpenAI Assistant JSON files (OpenAPI 3.x schemas) by checking for:
80
+ * - openapi string (OpenAPI version)
81
+ * - paths object (API endpoints/actions)
82
+ *
83
+ * @param projectDir - Directory to search (defaults to cwd)
84
+ * @returns Array of OpenAI Assistant file names
85
+ */
86
+ export declare function findOpenAIAssistants(projectDir?: string): Promise<string[]>;
49
87
  /**
50
88
  * Detect project type from files and structure
51
89
  */
@@ -1 +1 @@
1
- {"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../src/utils/file-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+DxB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAO3E;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAiCnC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,aAAa,CAAC;IACrE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kBAAkB,EAAE,UAAU,GAAG,cAAc,GAAG,aAAa,CAAC;CACjE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,MAAM,CAAC,CA0GjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAejB;AA+CD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,MAAM,CAAC,CAwDjB"}
1
+ {"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../src/utils/file-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+DxB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAO3E;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAiCnC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,aAAa,CAAC;IACrE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kBAAkB,EAAE,UAAU,GAAG,cAAc,GAAG,aAAa,CAAC;CACjE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,MAAM,EAAE,CAAC,CA6BnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,MAAM,EAAE,CAAC,CA6BnB;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BnB;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BnB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,MAAM,CAAC,CA0GjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAejB;AA+CD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,MAAM,CAAC,CAwDjB"}
@@ -15,6 +15,10 @@ exports.findPyprojectToml = findPyprojectToml;
15
15
  exports.findRequirementsTxt = findRequirementsTxt;
16
16
  exports.findTsConfig = findTsConfig;
17
17
  exports.analyzeTsConfig = analyzeTsConfig;
18
+ exports.findN8nWorkflows = findN8nWorkflows;
19
+ exports.findMakeScenarios = findMakeScenarios;
20
+ exports.findOpalMiniApps = findOpalMiniApps;
21
+ exports.findOpenAIAssistants = findOpenAIAssistants;
18
22
  exports.detectProjectType = detectProjectType;
19
23
  exports.daysSinceModified = daysSinceModified;
20
24
  exports.detectPythonProjectType = detectPythonProjectType;
@@ -202,6 +206,150 @@ async function analyzeTsConfig(filePath) {
202
206
  return null;
203
207
  }
204
208
  }
209
+ /**
210
+ * Detect n8n workflow files in directory
211
+ */
212
+ async function findN8nWorkflows(projectDir = process.cwd()) {
213
+ const workflows = [];
214
+ try {
215
+ const files = await fs_1.promises.readdir(projectDir);
216
+ for (const file of files) {
217
+ if (file.endsWith('.json') && !file.includes('package')) {
218
+ try {
219
+ const filePath = path_1.default.join(projectDir, file);
220
+ const content = await fs_1.promises.readFile(filePath, 'utf-8');
221
+ const json = JSON.parse(content);
222
+ // Check if it's an n8n workflow (has nodes, connections, and name)
223
+ if (json.nodes && Array.isArray(json.nodes) &&
224
+ json.connections && typeof json.connections === 'object' &&
225
+ json.name && typeof json.name === 'string') {
226
+ workflows.push(file);
227
+ }
228
+ }
229
+ catch {
230
+ // Not valid JSON or not n8n format, skip
231
+ }
232
+ }
233
+ }
234
+ }
235
+ catch {
236
+ // Directory read error, return empty
237
+ }
238
+ return workflows;
239
+ }
240
+ /**
241
+ * Find Make.com scenario files in a project directory
242
+ *
243
+ * Detects Make.com blueprint JSON files by checking for:
244
+ * - name string (scenario name)
245
+ * - flow array (modules/steps)
246
+ * - metadata object (scenario metadata)
247
+ *
248
+ * @param projectDir - Directory to search (defaults to cwd)
249
+ * @returns Array of Make.com scenario file names
250
+ */
251
+ async function findMakeScenarios(projectDir = process.cwd()) {
252
+ const scenarios = [];
253
+ try {
254
+ const files = await fs_1.promises.readdir(projectDir);
255
+ for (const file of files) {
256
+ if (file.endsWith('.json') && !file.includes('package')) {
257
+ try {
258
+ const filePath = path_1.default.join(projectDir, file);
259
+ const content = await fs_1.promises.readFile(filePath, 'utf-8');
260
+ const json = JSON.parse(content);
261
+ // Check if it's a Make.com blueprint (has name, flow array, and metadata)
262
+ if (json.name && typeof json.name === 'string' &&
263
+ json.flow && Array.isArray(json.flow) &&
264
+ json.metadata && typeof json.metadata === 'object') {
265
+ scenarios.push(file);
266
+ }
267
+ }
268
+ catch {
269
+ // Not valid JSON or not Make format, skip
270
+ }
271
+ }
272
+ }
273
+ }
274
+ catch {
275
+ // Directory read error, return empty
276
+ }
277
+ return scenarios;
278
+ }
279
+ /**
280
+ * Find Google Opal mini-app files in a project directory
281
+ *
282
+ * Detects Opal mini-app JSON files by checking for:
283
+ * - steps array (mini-app steps)
284
+ * - model string (AI model used)
285
+ *
286
+ * @param projectDir - Directory to search (defaults to cwd)
287
+ * @returns Array of Opal mini-app file names
288
+ */
289
+ async function findOpalMiniApps(projectDir = process.cwd()) {
290
+ const miniApps = [];
291
+ try {
292
+ const files = await fs_1.promises.readdir(projectDir);
293
+ for (const file of files) {
294
+ if (file.endsWith('.json') && !file.includes('package')) {
295
+ try {
296
+ const filePath = path_1.default.join(projectDir, file);
297
+ const content = await fs_1.promises.readFile(filePath, 'utf-8');
298
+ const json = JSON.parse(content);
299
+ // Check if it's an Opal mini-app (has steps and model)
300
+ if (json.steps && Array.isArray(json.steps) &&
301
+ json.model && typeof json.model === 'string') {
302
+ miniApps.push(file);
303
+ }
304
+ }
305
+ catch {
306
+ // Not valid JSON or not Opal format, skip
307
+ }
308
+ }
309
+ }
310
+ }
311
+ catch {
312
+ // Directory read error, return empty
313
+ }
314
+ return miniApps;
315
+ }
316
+ /**
317
+ * Find OpenAI Assistant files in a project directory
318
+ *
319
+ * Detects OpenAI Assistant JSON files (OpenAPI 3.x schemas) by checking for:
320
+ * - openapi string (OpenAPI version)
321
+ * - paths object (API endpoints/actions)
322
+ *
323
+ * @param projectDir - Directory to search (defaults to cwd)
324
+ * @returns Array of OpenAI Assistant file names
325
+ */
326
+ async function findOpenAIAssistants(projectDir = process.cwd()) {
327
+ const assistants = [];
328
+ try {
329
+ const files = await fs_1.promises.readdir(projectDir);
330
+ for (const file of files) {
331
+ if (file.endsWith('.json') && !file.includes('package')) {
332
+ try {
333
+ const filePath = path_1.default.join(projectDir, file);
334
+ const content = await fs_1.promises.readFile(filePath, 'utf-8');
335
+ const json = JSON.parse(content);
336
+ // Check if it's an OpenAI Assistant schema (has openapi and paths)
337
+ if (json.openapi && typeof json.openapi === 'string' &&
338
+ json.paths && typeof json.paths === 'object') {
339
+ assistants.push(file);
340
+ }
341
+ }
342
+ catch {
343
+ // Not valid JSON or not OpenAI format, skip
344
+ }
345
+ }
346
+ }
347
+ }
348
+ catch {
349
+ // Directory read error, return empty
350
+ }
351
+ return assistants;
352
+ }
205
353
  /**
206
354
  * Detect project type from files and structure
207
355
  */