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.
- package/README.md +177 -31
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +46 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto.d.ts.map +1 -1
- package/dist/commands/auto.js +102 -0
- package/dist/commands/auto.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/compiler/faf-compiler.d.ts.map +1 -1
- package/dist/compiler/faf-compiler.js +76 -4
- package/dist/compiler/faf-compiler.js.map +1 -1
- package/dist/core/platform-adapters.d.ts +76 -0
- package/dist/core/platform-adapters.d.ts.map +1 -0
- package/dist/core/platform-adapters.js +407 -0
- package/dist/core/platform-adapters.js.map +1 -0
- package/dist/core/universal-intelligence-generator.d.ts +156 -0
- package/dist/core/universal-intelligence-generator.d.ts.map +1 -0
- package/dist/core/universal-intelligence-generator.js +352 -0
- package/dist/core/universal-intelligence-generator.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/dist/tests/manual-validation.d.ts +8 -0
- package/dist/tests/manual-validation.d.ts.map +1 -0
- package/dist/tests/manual-validation.js +114 -0
- package/dist/tests/manual-validation.js.map +1 -0
- package/dist/utils/file-utils.d.ts +38 -0
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +148 -0
- package/dist/utils/file-utils.js.map +1 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/family/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|
|
@@ -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"}
|
package/dist/utils/file-utils.js
CHANGED
|
@@ -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
|
*/
|