faf-cli 3.0.5 → 3.1.0
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 +238 -24
- package/assets/screenshots/package-json+project-faf.png +0 -0
- package/dist/big-orange/bigo-push.d.ts +18 -0
- package/dist/big-orange/bigo-push.d.ts.map +1 -0
- package/dist/big-orange/bigo-push.js +88 -0
- package/dist/big-orange/bigo-push.js.map +1 -0
- package/dist/big-orange/compare.d.ts +11 -0
- package/dist/big-orange/compare.d.ts.map +1 -0
- package/dist/big-orange/compare.js +172 -0
- package/dist/big-orange/compare.js.map +1 -0
- package/dist/big-orange/faf-generator.d.ts +22 -0
- package/dist/big-orange/faf-generator.d.ts.map +1 -0
- package/dist/big-orange/faf-generator.js +215 -0
- package/dist/big-orange/faf-generator.js.map +1 -0
- package/dist/big-orange/index.d.ts +7 -0
- package/dist/big-orange/index.d.ts.map +1 -0
- package/dist/big-orange/index.js +96 -0
- package/dist/big-orange/index.js.map +1 -0
- package/dist/big-orange/types.d.ts +62 -0
- package/dist/big-orange/types.d.ts.map +1 -0
- package/dist/big-orange/types.js +7 -0
- package/dist/big-orange/types.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +137 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto.d.ts.map +1 -1
- package/dist/commands/auto.js +69 -12
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/bi-sync.d.ts.map +1 -1
- package/dist/commands/bi-sync.js +10 -3
- package/dist/commands/bi-sync.js.map +1 -1
- package/dist/commands/drift.d.ts +16 -0
- package/dist/commands/drift.d.ts.map +1 -0
- package/dist/commands/drift.js +517 -0
- package/dist/commands/drift.js.map +1 -0
- package/dist/commands/git.d.ts +25 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +355 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +85 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/rename.d.ts +18 -0
- package/dist/commands/rename.d.ts.map +1 -0
- package/dist/commands/rename.js +211 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/taf-init.d.ts +14 -0
- package/dist/commands/taf-init.d.ts.map +1 -0
- package/dist/commands/taf-init.js +138 -0
- package/dist/commands/taf-init.js.map +1 -0
- package/dist/commands/taf-log.d.ts +27 -0
- package/dist/commands/taf-log.d.ts.map +1 -0
- package/dist/commands/taf-log.js +241 -0
- package/dist/commands/taf-log.js.map +1 -0
- package/dist/commands/taf-stats.d.ts +8 -0
- package/dist/commands/taf-stats.d.ts.map +1 -0
- package/dist/commands/taf-stats.js +133 -0
- package/dist/commands/taf-stats.js.map +1 -0
- package/dist/commands/taf-validate.d.ts +8 -0
- package/dist/commands/taf-validate.d.ts.map +1 -0
- package/dist/commands/taf-validate.js +108 -0
- package/dist/commands/taf-validate.js.map +1 -0
- package/dist/commands/taf.d.ts +13 -0
- package/dist/commands/taf.d.ts.map +1 -0
- package/dist/commands/taf.js +85 -0
- package/dist/commands/taf.js.map +1 -0
- package/dist/compiler/faf-compiler.d.ts.map +1 -1
- package/dist/compiler/faf-compiler.js +18 -0
- package/dist/compiler/faf-compiler.js.map +1 -1
- package/dist/generators/faf-generator-championship.d.ts.map +1 -1
- package/dist/generators/faf-generator-championship.js +1 -0
- package/dist/generators/faf-generator-championship.js.map +1 -1
- package/dist/github/github-extractor.d.ts +56 -0
- package/dist/github/github-extractor.d.ts.map +1 -0
- package/dist/github/github-extractor.js +328 -0
- package/dist/github/github-extractor.js.map +1 -0
- package/dist/github/popular-repos.d.ts +43 -0
- package/dist/github/popular-repos.d.ts.map +1 -0
- package/dist/github/popular-repos.js +205 -0
- package/dist/github/popular-repos.js.map +1 -0
- package/dist/github/repo-selector.d.ts +48 -0
- package/dist/github/repo-selector.d.ts.map +1 -0
- package/dist/github/repo-selector.js +277 -0
- package/dist/github/repo-selector.js.map +1 -0
- package/dist/taf/index.d.ts +17 -0
- package/dist/taf/index.d.ts.map +1 -0
- package/dist/taf/index.js +57 -0
- package/dist/taf/index.js.map +1 -0
- package/dist/taf/logger.d.ts +86 -0
- package/dist/taf/logger.d.ts.map +1 -0
- package/dist/taf/logger.js +135 -0
- package/dist/taf/logger.js.map +1 -0
- package/dist/taf/parser.d.ts +32 -0
- package/dist/taf/parser.d.ts.map +1 -0
- package/dist/taf/parser.js +161 -0
- package/dist/taf/parser.js.map +1 -0
- package/dist/taf/stats.d.ts +31 -0
- package/dist/taf/stats.d.ts.map +1 -0
- package/dist/taf/stats.js +182 -0
- package/dist/taf/stats.js.map +1 -0
- package/dist/taf/types.d.ts +66 -0
- package/dist/taf/types.d.ts.map +1 -0
- package/dist/taf/types.js +9 -0
- package/dist/taf/types.js.map +1 -0
- package/dist/taf/validator.d.ts +18 -0
- package/dist/taf/validator.d.ts.map +1 -0
- package/dist/taf/validator.js +148 -0
- package/dist/taf/validator.js.map +1 -0
- package/dist/utils/file-utils.d.ts +10 -0
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +196 -33
- package/dist/utils/file-utils.js.map +1 -1
- package/dist/utils/native-file-finder.js +1 -1
- package/dist/utils/native-file-finder.js.map +1 -1
- package/dist/utils/yaml-generator.d.ts +1 -0
- package/dist/utils/yaml-generator.d.ts.map +1 -1
- package/dist/utils/yaml-generator.js +1 -0
- package/dist/utils/yaml-generator.js.map +1 -1
- package/package.json +12 -4
- package/dist/commands/create.d.ts +0 -13
- package/dist/commands/create.d.ts.map +0 -1
- package/dist/commands/create.js +0 -78
- package/dist/commands/create.js.map +0 -1
- package/dist/core/platform-adapters.d.ts +0 -76
- package/dist/core/platform-adapters.d.ts.map +0 -1
- package/dist/core/platform-adapters.js +0 -407
- package/dist/core/platform-adapters.js.map +0 -1
- package/dist/core/universal-intelligence-generator.d.ts +0 -156
- package/dist/core/universal-intelligence-generator.d.ts.map +0 -1
- package/dist/core/universal-intelligence-generator.js +0 -352
- package/dist/core/universal-intelligence-generator.js.map +0 -1
- package/dist/enrichment/auto-corrector.d.ts +0 -28
- package/dist/enrichment/auto-corrector.d.ts.map +0 -1
- package/dist/enrichment/auto-corrector.js +0 -106
- package/dist/enrichment/auto-corrector.js.map +0 -1
- package/dist/enrichment/n8n-analyzer.d.ts +0 -259
- package/dist/enrichment/n8n-analyzer.d.ts.map +0 -1
- package/dist/enrichment/n8n-analyzer.js +0 -346
- package/dist/enrichment/n8n-analyzer.js.map +0 -1
- package/dist/enrichment/n8n-faf-generator.d.ts +0 -68
- package/dist/enrichment/n8n-faf-generator.d.ts.map +0 -1
- package/dist/enrichment/n8n-faf-generator.js +0 -354
- package/dist/enrichment/n8n-faf-generator.js.map +0 -1
- package/dist/enrichment/question-asker.d.ts +0 -22
- package/dist/enrichment/question-asker.d.ts.map +0 -1
- package/dist/enrichment/question-asker.js +0 -113
- package/dist/enrichment/question-asker.js.map +0 -1
- package/dist/enrichment/slot-filler.d.ts +0 -73
- package/dist/enrichment/slot-filler.d.ts.map +0 -1
- package/dist/enrichment/slot-filler.js +0 -253
- package/dist/enrichment/slot-filler.js.map +0 -1
- package/dist/scoring/championship-scorer.d.ts +0 -114
- package/dist/scoring/championship-scorer.d.ts.map +0 -1
- package/dist/scoring/championship-scorer.js +0 -380
- package/dist/scoring/championship-scorer.js.map +0 -1
- package/dist/scoring/score-calculator.d.ts +0 -29
- package/dist/scoring/score-calculator.d.ts.map +0 -1
- package/dist/scoring/score-calculator.js +0 -520
- package/dist/scoring/score-calculator.js.map +0 -1
- package/dist/tests/manual-validation.d.ts +0 -8
- package/dist/tests/manual-validation.d.ts.map +0 -1
- package/dist/tests/manual-validation.js +0 -114
- package/dist/tests/manual-validation.js.map +0 -1
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 🏆 UNIVERSAL INTELLIGENCE GENERATOR
|
|
3
|
-
*
|
|
4
|
-
* THE foundational pattern that applies to EVERYTHING:
|
|
5
|
-
* - Code projects (package.json, tsconfig, etc.)
|
|
6
|
-
* - Automation workflows (n8n, Make, Opal, OpenAI)
|
|
7
|
-
* - Documentation centers (markdown, wikis)
|
|
8
|
-
* - API specifications (OpenAPI, GraphQL)
|
|
9
|
-
* - ANY project that needs AI context
|
|
10
|
-
*
|
|
11
|
-
* Pattern: interrogation → extraction → filtering → generation
|
|
12
|
-
* Output: ALWAYS .faf (universal container for structured intelligence)
|
|
13
|
-
*
|
|
14
|
-
* FOUNDATIONAL FIRST, UNIVERSAL BY DEFAULT
|
|
15
|
-
*/
|
|
16
|
-
export interface IntelligenceSource {
|
|
17
|
-
type: SourceType;
|
|
18
|
-
filePath: string;
|
|
19
|
-
metadata?: Record<string, any>;
|
|
20
|
-
}
|
|
21
|
-
export type SourceType = 'code-project' | 'n8n-workflow' | 'make-scenario' | 'opal-miniapp' | 'openai-assistant' | 'documentation' | 'api-spec' | 'custom';
|
|
22
|
-
export interface RawIntelligence {
|
|
23
|
-
data: any;
|
|
24
|
-
confidence: number;
|
|
25
|
-
metadata: {
|
|
26
|
-
source_type: SourceType;
|
|
27
|
-
source_file: string;
|
|
28
|
-
extracted_at: string;
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
export interface StructuredIntelligence {
|
|
32
|
-
project: {
|
|
33
|
-
name: string;
|
|
34
|
-
type: string;
|
|
35
|
-
goal: string;
|
|
36
|
-
main_language?: string;
|
|
37
|
-
};
|
|
38
|
-
architecture?: {
|
|
39
|
-
pattern: string;
|
|
40
|
-
components: string[];
|
|
41
|
-
};
|
|
42
|
-
tech_stack?: Record<string, string>;
|
|
43
|
-
human_context: {
|
|
44
|
-
who: string;
|
|
45
|
-
what: string;
|
|
46
|
-
why: string;
|
|
47
|
-
where: string;
|
|
48
|
-
when: string;
|
|
49
|
-
how: string;
|
|
50
|
-
};
|
|
51
|
-
source_data?: any;
|
|
52
|
-
scores: {
|
|
53
|
-
faf_score: number;
|
|
54
|
-
ai_compatibility_score: number;
|
|
55
|
-
completeness_score: number;
|
|
56
|
-
};
|
|
57
|
-
generated: string;
|
|
58
|
-
faf_version: string;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Base class implementing the universal pattern
|
|
62
|
-
*
|
|
63
|
-
* All input adapters (n8n, Make, Opal, etc.) extend this
|
|
64
|
-
*/
|
|
65
|
-
export declare abstract class UniversalIntelligenceGenerator {
|
|
66
|
-
/**
|
|
67
|
-
* PHASE 1: INTERROGATION
|
|
68
|
-
*
|
|
69
|
-
* "What is this? What type of intelligence source?"
|
|
70
|
-
*
|
|
71
|
-
* Detects the input type and determines if we can process it
|
|
72
|
-
*/
|
|
73
|
-
abstract detect(filePath: string): Promise<boolean>;
|
|
74
|
-
/**
|
|
75
|
-
* PHASE 2: EXTRACTION
|
|
76
|
-
*
|
|
77
|
-
* "Pull the raw intelligence from the source"
|
|
78
|
-
*
|
|
79
|
-
* Platform-specific parsing happens here
|
|
80
|
-
* Output is raw, unstructured data
|
|
81
|
-
*/
|
|
82
|
-
abstract extract(filePath: string): Promise<RawIntelligence>;
|
|
83
|
-
/**
|
|
84
|
-
* PHASE 3: FILTERING
|
|
85
|
-
*
|
|
86
|
-
* "Transform raw data → structured intelligence"
|
|
87
|
-
* "Validate, score, enrich"
|
|
88
|
-
*
|
|
89
|
-
* This is where POOR → RICH transformation happens:
|
|
90
|
-
* - Auto-correct typos
|
|
91
|
-
* - Fill missing context (6 W's)
|
|
92
|
-
* - Ask clarifying questions (minimal friction)
|
|
93
|
-
* - Calculate quality scores
|
|
94
|
-
*/
|
|
95
|
-
abstract filter(raw: RawIntelligence): Promise<StructuredIntelligence>;
|
|
96
|
-
/**
|
|
97
|
-
* PHASE 4: GENERATION
|
|
98
|
-
*
|
|
99
|
-
* "Output championship .faf"
|
|
100
|
-
*
|
|
101
|
-
* Converts structured intelligence → YAML .faf file
|
|
102
|
-
* Target: 85%+ score (🥉 Bronze or better)
|
|
103
|
-
*/
|
|
104
|
-
generate(intelligence: StructuredIntelligence): string;
|
|
105
|
-
/**
|
|
106
|
-
* THE COMPLETE FLOW
|
|
107
|
-
*
|
|
108
|
-
* Orchestrates all 4 phases
|
|
109
|
-
*/
|
|
110
|
-
process(filePath: string): Promise<string>;
|
|
111
|
-
/**
|
|
112
|
-
* Helper: Convert structured intelligence → YAML
|
|
113
|
-
*/
|
|
114
|
-
protected toYAML(intelligence: StructuredIntelligence): string;
|
|
115
|
-
/**
|
|
116
|
-
* Helper: Calculate quality scores
|
|
117
|
-
*
|
|
118
|
-
* Used in FILTERING phase
|
|
119
|
-
*/
|
|
120
|
-
protected calculateScores(data: Partial<StructuredIntelligence>): {
|
|
121
|
-
faf_score: number;
|
|
122
|
-
ai_compatibility_score: number;
|
|
123
|
-
completeness_score: number;
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Example: n8n Workflow Intelligence Generator
|
|
128
|
-
*
|
|
129
|
-
* Extends the universal pattern for n8n-specific processing
|
|
130
|
-
*/
|
|
131
|
-
export declare class N8nIntelligenceGenerator extends UniversalIntelligenceGenerator {
|
|
132
|
-
detect(filePath: string): Promise<boolean>;
|
|
133
|
-
extract(filePath: string): Promise<RawIntelligence>;
|
|
134
|
-
filter(raw: RawIntelligence): Promise<StructuredIntelligence>;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Example: OpenAI Assistant Intelligence Generator
|
|
138
|
-
*
|
|
139
|
-
* Same universal pattern, different input adapter
|
|
140
|
-
*/
|
|
141
|
-
export declare class OpenAIAssistantGenerator extends UniversalIntelligenceGenerator {
|
|
142
|
-
detect(filePath: string): Promise<boolean>;
|
|
143
|
-
extract(filePath: string): Promise<RawIntelligence>;
|
|
144
|
-
filter(raw: RawIntelligence): Promise<StructuredIntelligence>;
|
|
145
|
-
private extractActions;
|
|
146
|
-
private extractTools;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Factory: Auto-detect and return appropriate generator
|
|
150
|
-
*/
|
|
151
|
-
export declare function createGenerator(filePath: string): Promise<UniversalIntelligenceGenerator | null>;
|
|
152
|
-
/**
|
|
153
|
-
* Main entry point: Process any file → .faf
|
|
154
|
-
*/
|
|
155
|
-
export declare function generateFafFromAny(filePath: string): Promise<string>;
|
|
156
|
-
//# sourceMappingURL=universal-intelligence-generator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"universal-intelligence-generator.d.ts","sourceRoot":"","sources":["../../src/core/universal-intelligence-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,cAAc,GACd,eAAe,GACf,cAAc,GACd,kBAAkB,GAClB,eAAe,GACf,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,WAAW,eAAe;IAE9B,IAAI,EAAE,GAAG,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QACR,WAAW,EAAE,UAAU,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IAErC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IAEF,YAAY,CAAC,EAAE;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IAEF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEpC,aAAa,EAAE;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IAGF,WAAW,CAAC,EAAE,GAAG,CAAC;IAElB,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IAEF,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,8BAAsB,8BAA8B;IAElD;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEnD;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAE5D;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAEtE;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,EAAE,sBAAsB,GAAG,MAAM;IAKtD;;;;OAIG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBhD;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,sBAAsB,GAAG,MAAM;IAK9D;;;;OAIG;IACH,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG;QAChE,SAAS,EAAE,MAAM,CAAC;QAClB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,kBAAkB,EAAE,MAAM,CAAC;KAC5B;CAyCF;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,8BAA8B;IAEpE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY1C,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA2BnD,MAAM,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAyBpE;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,8BAA8B;IAEpE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY1C,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAqBnD,MAAM,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAiDnE,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,YAAY;CAIrB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,GAAG,IAAI,CAAC,CA4BtG;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ1E"}
|
|
@@ -1,352 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* 🏆 UNIVERSAL INTELLIGENCE GENERATOR
|
|
4
|
-
*
|
|
5
|
-
* THE foundational pattern that applies to EVERYTHING:
|
|
6
|
-
* - Code projects (package.json, tsconfig, etc.)
|
|
7
|
-
* - Automation workflows (n8n, Make, Opal, OpenAI)
|
|
8
|
-
* - Documentation centers (markdown, wikis)
|
|
9
|
-
* - API specifications (OpenAPI, GraphQL)
|
|
10
|
-
* - ANY project that needs AI context
|
|
11
|
-
*
|
|
12
|
-
* Pattern: interrogation → extraction → filtering → generation
|
|
13
|
-
* Output: ALWAYS .faf (universal container for structured intelligence)
|
|
14
|
-
*
|
|
15
|
-
* FOUNDATIONAL FIRST, UNIVERSAL BY DEFAULT
|
|
16
|
-
*/
|
|
17
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
-
if (k2 === undefined) k2 = k;
|
|
19
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
-
}
|
|
23
|
-
Object.defineProperty(o, k2, desc);
|
|
24
|
-
}) : (function(o, m, k, k2) {
|
|
25
|
-
if (k2 === undefined) k2 = k;
|
|
26
|
-
o[k2] = m[k];
|
|
27
|
-
}));
|
|
28
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
-
}) : function(o, v) {
|
|
31
|
-
o["default"] = v;
|
|
32
|
-
});
|
|
33
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
-
var ownKeys = function(o) {
|
|
35
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
-
var ar = [];
|
|
37
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
-
return ar;
|
|
39
|
-
};
|
|
40
|
-
return ownKeys(o);
|
|
41
|
-
};
|
|
42
|
-
return function (mod) {
|
|
43
|
-
if (mod && mod.__esModule) return mod;
|
|
44
|
-
var result = {};
|
|
45
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
-
__setModuleDefault(result, mod);
|
|
47
|
-
return result;
|
|
48
|
-
};
|
|
49
|
-
})();
|
|
50
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
-
exports.OpenAIAssistantGenerator = exports.N8nIntelligenceGenerator = exports.UniversalIntelligenceGenerator = void 0;
|
|
52
|
-
exports.createGenerator = createGenerator;
|
|
53
|
-
exports.generateFafFromAny = generateFafFromAny;
|
|
54
|
-
/**
|
|
55
|
-
* Base class implementing the universal pattern
|
|
56
|
-
*
|
|
57
|
-
* All input adapters (n8n, Make, Opal, etc.) extend this
|
|
58
|
-
*/
|
|
59
|
-
class UniversalIntelligenceGenerator {
|
|
60
|
-
/**
|
|
61
|
-
* PHASE 4: GENERATION
|
|
62
|
-
*
|
|
63
|
-
* "Output championship .faf"
|
|
64
|
-
*
|
|
65
|
-
* Converts structured intelligence → YAML .faf file
|
|
66
|
-
* Target: 85%+ score (🥉 Bronze or better)
|
|
67
|
-
*/
|
|
68
|
-
generate(intelligence) {
|
|
69
|
-
// Universal YAML generation
|
|
70
|
-
return this.toYAML(intelligence);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* THE COMPLETE FLOW
|
|
74
|
-
*
|
|
75
|
-
* Orchestrates all 4 phases
|
|
76
|
-
*/
|
|
77
|
-
async process(filePath) {
|
|
78
|
-
// 1. INTERROGATION
|
|
79
|
-
const canProcess = await this.detect(filePath);
|
|
80
|
-
if (!canProcess) {
|
|
81
|
-
throw new Error(`Cannot process file: ${filePath}`);
|
|
82
|
-
}
|
|
83
|
-
// 2. EXTRACTION
|
|
84
|
-
const raw = await this.extract(filePath);
|
|
85
|
-
// 3. FILTERING
|
|
86
|
-
const structured = await this.filter(raw);
|
|
87
|
-
// 4. GENERATION
|
|
88
|
-
const fafContent = this.generate(structured);
|
|
89
|
-
return fafContent;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Helper: Convert structured intelligence → YAML
|
|
93
|
-
*/
|
|
94
|
-
toYAML(intelligence) {
|
|
95
|
-
const yaml = require('yaml');
|
|
96
|
-
return yaml.stringify(intelligence);
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Helper: Calculate quality scores
|
|
100
|
-
*
|
|
101
|
-
* Used in FILTERING phase
|
|
102
|
-
*/
|
|
103
|
-
calculateScores(data) {
|
|
104
|
-
// Count filled fields
|
|
105
|
-
let totalSlots = 0;
|
|
106
|
-
let filledSlots = 0;
|
|
107
|
-
// Project slots (required)
|
|
108
|
-
totalSlots += 3; // name, type, goal
|
|
109
|
-
if (data.project?.name)
|
|
110
|
-
filledSlots++;
|
|
111
|
-
if (data.project?.type)
|
|
112
|
-
filledSlots++;
|
|
113
|
-
if (data.project?.goal)
|
|
114
|
-
filledSlots++;
|
|
115
|
-
// Human context slots (6 W's - critical)
|
|
116
|
-
totalSlots += 6;
|
|
117
|
-
if (data.human_context?.who)
|
|
118
|
-
filledSlots++;
|
|
119
|
-
if (data.human_context?.what)
|
|
120
|
-
filledSlots++;
|
|
121
|
-
if (data.human_context?.why)
|
|
122
|
-
filledSlots++;
|
|
123
|
-
if (data.human_context?.where)
|
|
124
|
-
filledSlots++;
|
|
125
|
-
if (data.human_context?.when)
|
|
126
|
-
filledSlots++;
|
|
127
|
-
if (data.human_context?.how)
|
|
128
|
-
filledSlots++;
|
|
129
|
-
// Architecture slots (if applicable)
|
|
130
|
-
if (data.architecture) {
|
|
131
|
-
totalSlots += 2;
|
|
132
|
-
if (data.architecture.pattern)
|
|
133
|
-
filledSlots++;
|
|
134
|
-
if (data.architecture.components?.length)
|
|
135
|
-
filledSlots++;
|
|
136
|
-
}
|
|
137
|
-
// Tech stack slots (if applicable)
|
|
138
|
-
if (data.tech_stack && Object.keys(data.tech_stack).length > 0) {
|
|
139
|
-
totalSlots += Object.keys(data.tech_stack).length;
|
|
140
|
-
filledSlots += Object.values(data.tech_stack).filter(v => v).length;
|
|
141
|
-
}
|
|
142
|
-
const faf_score = Math.round((filledSlots / totalSlots) * 100);
|
|
143
|
-
return {
|
|
144
|
-
faf_score,
|
|
145
|
-
ai_compatibility_score: faf_score, // Aligned for now
|
|
146
|
-
completeness_score: faf_score, // Aligned for now
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
exports.UniversalIntelligenceGenerator = UniversalIntelligenceGenerator;
|
|
151
|
-
/**
|
|
152
|
-
* Example: n8n Workflow Intelligence Generator
|
|
153
|
-
*
|
|
154
|
-
* Extends the universal pattern for n8n-specific processing
|
|
155
|
-
*/
|
|
156
|
-
class N8nIntelligenceGenerator extends UniversalIntelligenceGenerator {
|
|
157
|
-
async detect(filePath) {
|
|
158
|
-
// Check if file is n8n workflow JSON
|
|
159
|
-
const fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
|
|
160
|
-
try {
|
|
161
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
162
|
-
const json = JSON.parse(content);
|
|
163
|
-
return !!(json.nodes && json.connections);
|
|
164
|
-
}
|
|
165
|
-
catch {
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
async extract(filePath) {
|
|
170
|
-
// Use existing n8n analyzer (compiled in dist)
|
|
171
|
-
const { N8nWorkflowAnalyzer } = await Promise.resolve().then(() => __importStar(require('../../dist/enrichment/n8n-analyzer')));
|
|
172
|
-
const workflow = await N8nWorkflowAnalyzer.parse(filePath);
|
|
173
|
-
const pattern = N8nWorkflowAnalyzer.detectPattern(workflow);
|
|
174
|
-
return {
|
|
175
|
-
data: {
|
|
176
|
-
workflow,
|
|
177
|
-
pattern,
|
|
178
|
-
aiModels: N8nWorkflowAnalyzer.extractAIModels(workflow),
|
|
179
|
-
infrastructure: N8nWorkflowAnalyzer.extractInfrastructure(workflow),
|
|
180
|
-
triggers: N8nWorkflowAnalyzer.extractTriggers(workflow),
|
|
181
|
-
nodes: N8nWorkflowAnalyzer.groupNodes(workflow),
|
|
182
|
-
tools: N8nWorkflowAnalyzer.extractToolCapabilities(workflow),
|
|
183
|
-
decisionPoints: N8nWorkflowAnalyzer.extractDecisionPoints(workflow),
|
|
184
|
-
memory: N8nWorkflowAnalyzer.extractMemoryRequirements(workflow),
|
|
185
|
-
},
|
|
186
|
-
confidence: 95,
|
|
187
|
-
metadata: {
|
|
188
|
-
source_type: 'n8n-workflow',
|
|
189
|
-
source_file: filePath,
|
|
190
|
-
extracted_at: new Date().toISOString(),
|
|
191
|
-
},
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
async filter(raw) {
|
|
195
|
-
const { workflow, pattern, aiModels, infrastructure } = raw.data;
|
|
196
|
-
// Use existing n8n-faf-generator for RICH transformation
|
|
197
|
-
// This already does: questions → auto-correct → 6 W's filling
|
|
198
|
-
const { N8nFafGenerator } = await Promise.resolve().then(() => __importStar(require('../../dist/enrichment/n8n-faf-generator')));
|
|
199
|
-
const generator = new N8nFafGenerator();
|
|
200
|
-
// Generate full .faf (includes human context enrichment)
|
|
201
|
-
// NOTE: N8nFafGenerator.generate() returns FILE PATH, not content
|
|
202
|
-
const outputPath = await generator.generate({
|
|
203
|
-
workflowFile: raw.metadata.source_file,
|
|
204
|
-
quiet: true, // Quiet mode for tests
|
|
205
|
-
});
|
|
206
|
-
// Read the generated file
|
|
207
|
-
const fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
|
|
208
|
-
const fafYAML = await fs.readFile(outputPath, 'utf-8');
|
|
209
|
-
// Parse back to structured format
|
|
210
|
-
const yaml = require('yaml');
|
|
211
|
-
const structured = yaml.parse(fafYAML);
|
|
212
|
-
return structured;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
exports.N8nIntelligenceGenerator = N8nIntelligenceGenerator;
|
|
216
|
-
/**
|
|
217
|
-
* Example: OpenAI Assistant Intelligence Generator
|
|
218
|
-
*
|
|
219
|
-
* Same universal pattern, different input adapter
|
|
220
|
-
*/
|
|
221
|
-
class OpenAIAssistantGenerator extends UniversalIntelligenceGenerator {
|
|
222
|
-
async detect(filePath) {
|
|
223
|
-
// Detect OpenAI Assistant config (OpenAPI 3.1.0 schema)
|
|
224
|
-
const fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
|
|
225
|
-
try {
|
|
226
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
227
|
-
const json = JSON.parse(content);
|
|
228
|
-
return !!(json.openapi && json.paths);
|
|
229
|
-
}
|
|
230
|
-
catch {
|
|
231
|
-
return false;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
async extract(filePath) {
|
|
235
|
-
// Parse OpenAPI schema
|
|
236
|
-
const fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
|
|
237
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
238
|
-
const schema = JSON.parse(content);
|
|
239
|
-
return {
|
|
240
|
-
data: {
|
|
241
|
-
schema,
|
|
242
|
-
actions: this.extractActions(schema),
|
|
243
|
-
tools: this.extractTools(schema),
|
|
244
|
-
},
|
|
245
|
-
confidence: 90,
|
|
246
|
-
metadata: {
|
|
247
|
-
source_type: 'openai-assistant',
|
|
248
|
-
source_file: filePath,
|
|
249
|
-
extracted_at: new Date().toISOString(),
|
|
250
|
-
},
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
async filter(raw) {
|
|
254
|
-
const { schema, actions, tools } = raw.data;
|
|
255
|
-
// Transform to universal .faf structure
|
|
256
|
-
const structured = {
|
|
257
|
-
project: {
|
|
258
|
-
name: schema.info?.title || 'OpenAI Assistant',
|
|
259
|
-
type: 'openai-assistant',
|
|
260
|
-
goal: schema.info?.description || 'AI assistant with custom actions',
|
|
261
|
-
},
|
|
262
|
-
architecture: {
|
|
263
|
-
pattern: 'AI Assistant',
|
|
264
|
-
components: actions.map((a) => a.name),
|
|
265
|
-
},
|
|
266
|
-
tech_stack: {
|
|
267
|
-
platform: 'OpenAI Assistants API',
|
|
268
|
-
schema_version: schema.openapi,
|
|
269
|
-
},
|
|
270
|
-
human_context: {
|
|
271
|
-
who: 'AI Assistant Developer',
|
|
272
|
-
what: schema.info?.title || 'OpenAI Assistant',
|
|
273
|
-
why: schema.info?.description || 'Custom AI assistant functionality',
|
|
274
|
-
where: 'OpenAI Platform',
|
|
275
|
-
when: 'Production',
|
|
276
|
-
how: `OpenAPI schema with ${actions.length} custom actions`,
|
|
277
|
-
},
|
|
278
|
-
source_data: raw.data,
|
|
279
|
-
scores: this.calculateScores({
|
|
280
|
-
project: {
|
|
281
|
-
name: schema.info?.title,
|
|
282
|
-
type: 'openai-assistant',
|
|
283
|
-
goal: schema.info?.description,
|
|
284
|
-
},
|
|
285
|
-
human_context: {
|
|
286
|
-
who: 'AI Assistant Developer',
|
|
287
|
-
what: schema.info?.title,
|
|
288
|
-
why: schema.info?.description,
|
|
289
|
-
where: 'OpenAI Platform',
|
|
290
|
-
when: 'Production',
|
|
291
|
-
how: `OpenAPI schema with ${actions.length} custom actions`,
|
|
292
|
-
},
|
|
293
|
-
}),
|
|
294
|
-
generated: new Date().toISOString(),
|
|
295
|
-
faf_version: '3.0.1',
|
|
296
|
-
};
|
|
297
|
-
return structured;
|
|
298
|
-
}
|
|
299
|
-
extractActions(schema) {
|
|
300
|
-
const actions = [];
|
|
301
|
-
for (const [path, methods] of Object.entries(schema.paths || {})) {
|
|
302
|
-
for (const [method, details] of Object.entries(methods)) {
|
|
303
|
-
actions.push({
|
|
304
|
-
name: details.operationId || `${method.toUpperCase()} ${path}`,
|
|
305
|
-
path,
|
|
306
|
-
method,
|
|
307
|
-
description: details.description,
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
return actions;
|
|
312
|
-
}
|
|
313
|
-
extractTools(schema) {
|
|
314
|
-
// Extract tool names from action IDs
|
|
315
|
-
return this.extractActions(schema).map(a => a.name);
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
exports.OpenAIAssistantGenerator = OpenAIAssistantGenerator;
|
|
319
|
-
/**
|
|
320
|
-
* Factory: Auto-detect and return appropriate generator
|
|
321
|
-
*/
|
|
322
|
-
async function createGenerator(filePath) {
|
|
323
|
-
// Import all platform adapters
|
|
324
|
-
const { OpalMiniAppGenerator, MakeScenarioGenerator, CodeProjectGenerator, } = await Promise.resolve().then(() => __importStar(require('./platform-adapters')));
|
|
325
|
-
const generators = [
|
|
326
|
-
// Automation platforms
|
|
327
|
-
new N8nIntelligenceGenerator(),
|
|
328
|
-
new OpalMiniAppGenerator(),
|
|
329
|
-
new MakeScenarioGenerator(),
|
|
330
|
-
// AI assistants
|
|
331
|
-
new OpenAIAssistantGenerator(),
|
|
332
|
-
// Code projects (fallback)
|
|
333
|
-
new CodeProjectGenerator(),
|
|
334
|
-
];
|
|
335
|
-
for (const generator of generators) {
|
|
336
|
-
if (await generator.detect(filePath)) {
|
|
337
|
-
return generator;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
return null;
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Main entry point: Process any file → .faf
|
|
344
|
-
*/
|
|
345
|
-
async function generateFafFromAny(filePath) {
|
|
346
|
-
const generator = await createGenerator(filePath);
|
|
347
|
-
if (!generator) {
|
|
348
|
-
throw new Error(`No generator found for file: ${filePath}`);
|
|
349
|
-
}
|
|
350
|
-
return generator.process(filePath);
|
|
351
|
-
}
|
|
352
|
-
//# sourceMappingURL=universal-intelligence-generator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"universal-intelligence-generator.js","sourceRoot":"","sources":["../../src/core/universal-intelligence-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 🏎️ Auto-Corrector - Google-Style Typo Fixing
|
|
3
|
-
*
|
|
4
|
-
* Fixes common typos automatically (non-invasive, helpful)
|
|
5
|
-
* Focuses on proper nouns and technical terms
|
|
6
|
-
*/
|
|
7
|
-
import { ThreeQuestions } from './question-asker';
|
|
8
|
-
export declare class AutoCorrector {
|
|
9
|
-
private commonFixes;
|
|
10
|
-
constructor();
|
|
11
|
-
/**
|
|
12
|
-
* Fix typos in all 3 answers
|
|
13
|
-
*/
|
|
14
|
-
fix(answers: ThreeQuestions): ThreeQuestions;
|
|
15
|
-
/**
|
|
16
|
-
* Fix typos in a single string
|
|
17
|
-
*/
|
|
18
|
-
private fixString;
|
|
19
|
-
/**
|
|
20
|
-
* Escape special regex characters
|
|
21
|
-
*/
|
|
22
|
-
private escapeRegex;
|
|
23
|
-
/**
|
|
24
|
-
* Get list of corrections made (for debugging)
|
|
25
|
-
*/
|
|
26
|
-
getCorrections(original: string, fixed: string): string[];
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=auto-corrector.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto-corrector.d.ts","sourceRoot":"","sources":["../../src/enrichment/auto-corrector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAsB;;IAiDzC;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc;IAQ5C;;OAEG;IACH,OAAO,CAAC,SAAS;IAwBjB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAY1D"}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* 🏎️ Auto-Corrector - Google-Style Typo Fixing
|
|
4
|
-
*
|
|
5
|
-
* Fixes common typos automatically (non-invasive, helpful)
|
|
6
|
-
* Focuses on proper nouns and technical terms
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.AutoCorrector = void 0;
|
|
10
|
-
class AutoCorrector {
|
|
11
|
-
commonFixes;
|
|
12
|
-
constructor() {
|
|
13
|
-
// Common typos/variations in automation/AI space
|
|
14
|
-
this.commonFixes = new Map([
|
|
15
|
-
// AI/ML Companies & Products
|
|
16
|
-
['hermozis', 'Hormozi'],
|
|
17
|
-
['hermozi', 'Hormozi'],
|
|
18
|
-
['alexhormozi', 'Alex Hormozi'],
|
|
19
|
-
['anthropic', 'Anthropic'],
|
|
20
|
-
['openai', 'OpenAI'],
|
|
21
|
-
['chatgpt', 'ChatGPT'],
|
|
22
|
-
// Vector DBs
|
|
23
|
-
['pinecone', 'Pinecone'],
|
|
24
|
-
['weaviate', 'Weaviate'],
|
|
25
|
-
['qdrant', 'Qdrant'],
|
|
26
|
-
['milvus', 'Milvus'],
|
|
27
|
-
// Models
|
|
28
|
-
['claude', 'Claude'],
|
|
29
|
-
['sonnet', 'Sonnet'],
|
|
30
|
-
['gpt4', 'GPT-4'],
|
|
31
|
-
['gpt-4', 'GPT-4'],
|
|
32
|
-
['gemini', 'Gemini'],
|
|
33
|
-
// Tools
|
|
34
|
-
['n8n', 'n8n'], // preserve lowercase!
|
|
35
|
-
['zapier', 'Zapier'],
|
|
36
|
-
['makecom', 'Make.com'],
|
|
37
|
-
['make.com', 'Make.com'],
|
|
38
|
-
// Concepts
|
|
39
|
-
['rag', 'RAG'],
|
|
40
|
-
['etl', 'ETL'],
|
|
41
|
-
['api', 'API'],
|
|
42
|
-
['llm', 'LLM'],
|
|
43
|
-
['ai', 'AI'],
|
|
44
|
-
// Common words
|
|
45
|
-
['webhook', 'webhook'],
|
|
46
|
-
['webhooks', 'webhooks'],
|
|
47
|
-
['postgres', 'PostgreSQL'],
|
|
48
|
-
['postgresql', 'PostgreSQL'],
|
|
49
|
-
['mongodb', 'MongoDB'],
|
|
50
|
-
['mysql', 'MySQL']
|
|
51
|
-
]);
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Fix typos in all 3 answers
|
|
55
|
-
*/
|
|
56
|
-
fix(answers) {
|
|
57
|
-
return {
|
|
58
|
-
useCase: this.fixString(answers.useCase),
|
|
59
|
-
issues: this.fixString(answers.issues),
|
|
60
|
-
other: this.fixString(answers.other)
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Fix typos in a single string
|
|
65
|
-
*/
|
|
66
|
-
fixString(text) {
|
|
67
|
-
if (!text || text.trim().length === 0) {
|
|
68
|
-
return text;
|
|
69
|
-
}
|
|
70
|
-
let fixed = text;
|
|
71
|
-
// Case-insensitive replacement
|
|
72
|
-
this.commonFixes.forEach((correct, typo) => {
|
|
73
|
-
// Word boundary matching to avoid partial replacements
|
|
74
|
-
const regex = new RegExp(`\\b${this.escapeRegex(typo)}\\b`, 'gi');
|
|
75
|
-
fixed = fixed.replace(regex, (match) => {
|
|
76
|
-
// Preserve case if user typed it correctly
|
|
77
|
-
if (match === correct) {
|
|
78
|
-
return match;
|
|
79
|
-
}
|
|
80
|
-
return correct;
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
return fixed;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Escape special regex characters
|
|
87
|
-
*/
|
|
88
|
-
escapeRegex(str) {
|
|
89
|
-
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Get list of corrections made (for debugging)
|
|
93
|
-
*/
|
|
94
|
-
getCorrections(original, fixed) {
|
|
95
|
-
const corrections = [];
|
|
96
|
-
this.commonFixes.forEach((correct, typo) => {
|
|
97
|
-
const regex = new RegExp(`\\b${this.escapeRegex(typo)}\\b`, 'gi');
|
|
98
|
-
if (regex.test(original) && original !== fixed) {
|
|
99
|
-
corrections.push(`"${typo}" → "${correct}"`);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
return corrections;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
exports.AutoCorrector = AutoCorrector;
|
|
106
|
-
//# sourceMappingURL=auto-corrector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto-corrector.js","sourceRoot":"","sources":["../../src/enrichment/auto-corrector.ts"],"names":[],"mappings":"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"}
|