faf-cli 2.5.4 → 3.0.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.
Files changed (114) hide show
  1. package/README.md +506 -246
  2. package/assets/AI-Context /342/232/241/357/270/217 FASF AF.png +0 -0
  3. package/assets/Orange-Smiley copy.png +0 -0
  4. package/assets/Project-DNA-for-ANY-AI-1200x630.png +0 -0
  5. package/assets/ai-human-balance-50-50.png +0 -0
  6. package/assets/prd-balance-perfect-green.png +0 -0
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +14 -4
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/ai-analyze.js +2 -35
  11. package/dist/commands/ai-analyze.js.map +1 -1
  12. package/dist/commands/ai-enhance.d.ts.map +1 -1
  13. package/dist/commands/ai-enhance.js +5 -40
  14. package/dist/commands/ai-enhance.js.map +1 -1
  15. package/dist/commands/audit.js +2 -35
  16. package/dist/commands/audit.js.map +1 -1
  17. package/dist/commands/bi-sync.d.ts +1 -1
  18. package/dist/commands/bi-sync.js +5 -5
  19. package/dist/commands/bi-sync.js.map +1 -1
  20. package/dist/commands/chat.d.ts.map +1 -1
  21. package/dist/commands/chat.js +11 -2
  22. package/dist/commands/chat.js.map +1 -1
  23. package/dist/commands/create.d.ts +13 -0
  24. package/dist/commands/create.d.ts.map +1 -0
  25. package/dist/commands/create.js +78 -0
  26. package/dist/commands/create.js.map +1 -0
  27. package/dist/commands/doctor.js +2 -2
  28. package/dist/commands/doctor.js.map +1 -1
  29. package/dist/commands/edit.js +6 -6
  30. package/dist/commands/edit.js.map +1 -1
  31. package/dist/commands/enhance-real.js +13 -3
  32. package/dist/commands/enhance-real.js.map +1 -1
  33. package/dist/commands/faf-recover.js +3 -3
  34. package/dist/commands/faf-recover.js.map +1 -1
  35. package/dist/commands/init.js +3 -36
  36. package/dist/commands/init.js.map +1 -1
  37. package/dist/commands/lint.js +4 -37
  38. package/dist/commands/lint.js.map +1 -1
  39. package/dist/commands/search.js +2 -2
  40. package/dist/commands/search.js.map +1 -1
  41. package/dist/commands/share.js +3 -3
  42. package/dist/commands/share.js.map +1 -1
  43. package/dist/commands/show.d.ts.map +1 -1
  44. package/dist/commands/show.js +3 -39
  45. package/dist/commands/show.js.map +1 -1
  46. package/dist/commands/sync.js +4 -37
  47. package/dist/commands/sync.js.map +1 -1
  48. package/dist/commands/todo.js +2 -2
  49. package/dist/commands/todo.js.map +1 -1
  50. package/dist/commands/trust.d.ts +1 -1
  51. package/dist/commands/trust.js +3 -3
  52. package/dist/commands/trust.js.map +1 -1
  53. package/dist/commands/validate.js +2 -35
  54. package/dist/commands/validate.js.map +1 -1
  55. package/dist/commands/verify.js +2 -2
  56. package/dist/commands/verify.js.map +1 -1
  57. package/dist/compiler/faf-compiler.js +2 -2
  58. package/dist/compiler/faf-compiler.js.map +1 -1
  59. package/dist/converters/faf-converters.js +3 -3
  60. package/dist/converters/faf-converters.js.map +1 -1
  61. package/dist/engines/c-mirror/core/claude-to-faf.js +2 -35
  62. package/dist/engines/c-mirror/core/claude-to-faf.js.map +1 -1
  63. package/dist/engines/c-mirror/core/faf-to-claude.js +2 -35
  64. package/dist/engines/c-mirror/core/faf-to-claude.js.map +1 -1
  65. package/dist/engines/c-mirror/core/mirror-engine.js +3 -3
  66. package/dist/engines/c-mirror/core/mirror-engine.js.map +1 -1
  67. package/dist/engines/c-mirror/strategies/atomic-write.d.ts +3 -3
  68. package/dist/engines/c-mirror/strategies/atomic-write.js +4 -4
  69. package/dist/engines/c-mirror/strategies/atomic-write.js.map +1 -1
  70. package/dist/enrichment/auto-corrector.d.ts +28 -0
  71. package/dist/enrichment/auto-corrector.d.ts.map +1 -0
  72. package/dist/enrichment/auto-corrector.js +106 -0
  73. package/dist/enrichment/auto-corrector.js.map +1 -0
  74. package/dist/enrichment/n8n-analyzer.d.ts +259 -0
  75. package/dist/enrichment/n8n-analyzer.d.ts.map +1 -0
  76. package/dist/enrichment/n8n-analyzer.js +346 -0
  77. package/dist/enrichment/n8n-analyzer.js.map +1 -0
  78. package/dist/enrichment/n8n-faf-generator.d.ts +68 -0
  79. package/dist/enrichment/n8n-faf-generator.d.ts.map +1 -0
  80. package/dist/enrichment/n8n-faf-generator.js +354 -0
  81. package/dist/enrichment/n8n-faf-generator.js.map +1 -0
  82. package/dist/enrichment/question-asker.d.ts +22 -0
  83. package/dist/enrichment/question-asker.d.ts.map +1 -0
  84. package/dist/enrichment/question-asker.js +113 -0
  85. package/dist/enrichment/question-asker.js.map +1 -0
  86. package/dist/enrichment/slot-filler.d.ts +73 -0
  87. package/dist/enrichment/slot-filler.d.ts.map +1 -0
  88. package/dist/enrichment/slot-filler.js +253 -0
  89. package/dist/enrichment/slot-filler.js.map +1 -0
  90. package/dist/fix-once/yaml.d.ts +39 -36
  91. package/dist/fix-once/yaml.d.ts.map +1 -1
  92. package/dist/fix-once/yaml.js +117 -39
  93. package/dist/fix-once/yaml.js.map +1 -1
  94. package/dist/generators/faf-generator-championship.d.ts.map +1 -1
  95. package/dist/generators/faf-generator-championship.js +73 -3
  96. package/dist/generators/faf-generator-championship.js.map +1 -1
  97. package/dist/utils/announcements.d.ts.map +1 -1
  98. package/dist/utils/announcements.js +0 -5
  99. package/dist/utils/announcements.js.map +1 -1
  100. package/dist/utils/championship-style.js +1 -1
  101. package/dist/utils/championship-style.js.map +1 -1
  102. package/dist/utils/chrome-extension-confirmer.d.ts.map +1 -1
  103. package/dist/utils/chrome-extension-confirmer.js +15 -0
  104. package/dist/utils/chrome-extension-confirmer.js.map +1 -1
  105. package/dist/utils/email-opt-in.d.ts.map +1 -1
  106. package/dist/utils/email-opt-in.js +4 -2
  107. package/dist/utils/email-opt-in.js.map +1 -1
  108. package/dist/utils/file-utils.d.ts.map +1 -1
  109. package/dist/utils/file-utils.js +12 -0
  110. package/dist/utils/file-utils.js.map +1 -1
  111. package/dist/utils/vibe-sync.d.ts.map +1 -1
  112. package/dist/utils/vibe-sync.js +2 -1
  113. package/dist/utils/vibe-sync.js.map +1 -1
  114. package/package.json +13 -14
@@ -0,0 +1,346 @@
1
+ "use strict";
2
+ /**
3
+ * 🏎️ n8n Workflow Analyzer - THE Standard
4
+ *
5
+ * CHAMPIONSHIP: We're defining THE canonical .faf schema for n8n workflows
6
+ *
7
+ * What makes this AMAZING:
8
+ * 1. First official .faf schema for n8n (they don't have one!)
9
+ * 2. AI-Agent ready (autonomous agents can read our format)
10
+ * 3. Self-healing ready (captures error handling, retries)
11
+ * 4. Multi-agent ready (documents decision points, tools)
12
+ * 5. FAB-FORMATS compatible (plugs in later with zero work)
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.N8nWorkflowAnalyzer = void 0;
16
+ const fs_1 = require("fs");
17
+ // ============================================================================
18
+ // ANALYZER - Championship Intelligence
19
+ // ============================================================================
20
+ class N8nWorkflowAnalyzer {
21
+ /**
22
+ * Detect if file is n8n workflow JSON
23
+ */
24
+ static async detect(filePath) {
25
+ try {
26
+ const content = await fs_1.promises.readFile(filePath, 'utf-8');
27
+ const data = JSON.parse(content);
28
+ // n8n workflows have specific structure
29
+ return !!(data.nodes && data.connections && Array.isArray(data.nodes));
30
+ }
31
+ catch {
32
+ return false;
33
+ }
34
+ }
35
+ /**
36
+ * Parse n8n workflow JSON
37
+ */
38
+ static async parse(filePath) {
39
+ const content = await fs_1.promises.readFile(filePath, 'utf-8');
40
+ return JSON.parse(content);
41
+ }
42
+ /**
43
+ * Detect workflow pattern (AMAZING: AI-agent ready)
44
+ */
45
+ static detectPattern(workflow) {
46
+ const nodeTypes = workflow.nodes.map(n => n.type.toLowerCase());
47
+ // Check for RAG pattern
48
+ const hasVectorStore = nodeTypes.some(t => t.includes('pinecone') ||
49
+ t.includes('weaviate') ||
50
+ t.includes('qdrant') ||
51
+ t.includes('vectorstore'));
52
+ const hasAIAgent = nodeTypes.some(t => t.includes('agent') ||
53
+ t.includes('lmchat') ||
54
+ t.includes('anthropic') ||
55
+ t.includes('openai'));
56
+ if (hasVectorStore && hasAIAgent) {
57
+ return 'RAG';
58
+ }
59
+ // Check for Multi-Agent (multiple AI nodes)
60
+ const aiNodeCount = workflow.nodes.filter(n => n.type.toLowerCase().includes('agent') ||
61
+ n.type.toLowerCase().includes('lmchat')).length;
62
+ if (aiNodeCount > 1) {
63
+ return 'Multi-Agent';
64
+ }
65
+ // Check for ETL (has data transformation nodes)
66
+ const hasETL = nodeTypes.some(t => t.includes('code') ||
67
+ t.includes('function') ||
68
+ t.includes('set') ||
69
+ t.includes('split'));
70
+ const hasDatabase = nodeTypes.some(t => t.includes('postgres') ||
71
+ t.includes('mysql') ||
72
+ t.includes('mongodb'));
73
+ if (hasETL && hasDatabase) {
74
+ return 'ETL';
75
+ }
76
+ // Check for triggers
77
+ const triggerTypes = workflow.nodes
78
+ .filter(n => n.type.toLowerCase().includes('trigger'))
79
+ .map(n => n.type.toLowerCase());
80
+ if (triggerTypes.some(t => t.includes('webhook'))) {
81
+ return 'Webhook';
82
+ }
83
+ if (triggerTypes.some(t => t.includes('schedule') || t.includes('cron'))) {
84
+ return 'Scheduled';
85
+ }
86
+ if (triggerTypes.some(t => t.includes('form'))) {
87
+ return 'Form';
88
+ }
89
+ // Check for API orchestration
90
+ const httpNodes = workflow.nodes.filter(n => n.type.toLowerCase().includes('httprequest'));
91
+ if (httpNodes.length > 2) {
92
+ return 'API';
93
+ }
94
+ return 'Unknown';
95
+ }
96
+ /**
97
+ * Extract AI models used
98
+ */
99
+ static extractAIModels(workflow) {
100
+ const models = [];
101
+ for (const node of workflow.nodes) {
102
+ const type = node.type.toLowerCase();
103
+ const params = node.parameters || {};
104
+ // Claude
105
+ if (type.includes('anthropic')) {
106
+ const model = params.model || 'claude-sonnet-4-20250514';
107
+ models.push(model);
108
+ }
109
+ // OpenAI
110
+ if (type.includes('openai')) {
111
+ const model = params.model || 'gpt-4';
112
+ models.push(model);
113
+ }
114
+ // Embeddings
115
+ if (type.includes('embedding')) {
116
+ if (params.model) {
117
+ models.push(params.model);
118
+ }
119
+ }
120
+ // Reranker
121
+ if (type.includes('rerank')) {
122
+ models.push('cohere reranker');
123
+ }
124
+ }
125
+ return [...new Set(models)]; // Dedupe
126
+ }
127
+ /**
128
+ * Extract databases/infrastructure
129
+ */
130
+ static extractInfrastructure(workflow) {
131
+ const infra = [];
132
+ for (const node of workflow.nodes) {
133
+ const type = node.type.toLowerCase();
134
+ if (type.includes('pinecone'))
135
+ infra.push('Pinecone vector database');
136
+ if (type.includes('weaviate'))
137
+ infra.push('Weaviate vector database');
138
+ if (type.includes('qdrant'))
139
+ infra.push('Qdrant vector database');
140
+ if (type.includes('postgres'))
141
+ infra.push('PostgreSQL');
142
+ if (type.includes('mysql'))
143
+ infra.push('MySQL');
144
+ if (type.includes('mongodb'))
145
+ infra.push('MongoDB');
146
+ if (type.includes('redis'))
147
+ infra.push('Redis');
148
+ if (type.includes('webhook'))
149
+ infra.push('n8n webhook endpoints');
150
+ }
151
+ return [...new Set(infra)];
152
+ }
153
+ /**
154
+ * Extract triggers
155
+ */
156
+ static extractTriggers(workflow) {
157
+ const triggers = [];
158
+ for (const node of workflow.nodes) {
159
+ const type = node.type.toLowerCase();
160
+ if (type.includes('trigger')) {
161
+ const trigger = {
162
+ type: node.type,
163
+ id: node.id,
164
+ purpose: node.notes || `${node.name} trigger`
165
+ };
166
+ // Webhook details
167
+ if (type.includes('webhook')) {
168
+ trigger.path = node.parameters?.path || node.id;
169
+ trigger.method = node.parameters?.method || 'POST';
170
+ }
171
+ // Form details
172
+ if (type.includes('form')) {
173
+ const webhookId = node.parameters?.options?.webhookId;
174
+ if (webhookId) {
175
+ trigger.webhook_id = webhookId;
176
+ }
177
+ const formFields = node.parameters?.formFields?.values;
178
+ if (formFields && Array.isArray(formFields)) {
179
+ trigger.fields = formFields.map((f) => ({
180
+ name: f.fieldLabel || f.fieldId,
181
+ type: f.fieldType
182
+ }));
183
+ }
184
+ }
185
+ triggers.push(trigger);
186
+ }
187
+ }
188
+ return triggers;
189
+ }
190
+ /**
191
+ * Group nodes by category
192
+ */
193
+ static groupNodes(workflow) {
194
+ const groups = {
195
+ core_agent: [],
196
+ knowledge_ingestion: [],
197
+ retrieval: [],
198
+ organization: [],
199
+ transformation: [],
200
+ integration: []
201
+ };
202
+ for (const node of workflow.nodes) {
203
+ const type = node.type.toLowerCase();
204
+ const name = node.name;
205
+ // Core AI agent
206
+ if (type.includes('agent') || type.includes('lmchat') || type.includes('anthropic') || type.includes('openai')) {
207
+ groups.core_agent.push(name);
208
+ }
209
+ // Knowledge ingestion
210
+ else if (type.includes('loader') || type.includes('splitter') || type.includes('embedding') || (type.includes('vectorstore') && type.includes('insert'))) {
211
+ groups.knowledge_ingestion.push(name);
212
+ }
213
+ // Retrieval
214
+ else if (type.includes('vectorstore') || type.includes('rerank')) {
215
+ groups.retrieval.push(name);
216
+ }
217
+ // Organization
218
+ else if (type.includes('sticky')) {
219
+ groups.organization.push(name);
220
+ }
221
+ // Transformation
222
+ else if (type.includes('code') || type.includes('set') || type.includes('function')) {
223
+ groups.transformation.push(name);
224
+ }
225
+ // Integration
226
+ else {
227
+ groups.integration.push(name);
228
+ }
229
+ }
230
+ // Remove empty groups
231
+ return Object.fromEntries(Object.entries(groups).filter(([_, nodes]) => nodes.length > 0));
232
+ }
233
+ /**
234
+ * Generate flow description (AMAZING: Makes it readable for AI agents)
235
+ */
236
+ static generateFlowDescription(workflow, pattern) {
237
+ // We'll generate this based on pattern + node analysis
238
+ // For now, placeholder
239
+ return `Workflow pattern: ${pattern}. Detailed flow analysis coming soon.`;
240
+ }
241
+ /**
242
+ * AMAZING: Extract tool capabilities for AI agents
243
+ */
244
+ static extractToolCapabilities(workflow) {
245
+ const tools = [];
246
+ for (const node of workflow.nodes) {
247
+ const type = node.type;
248
+ // Vector search tools
249
+ if (type.toLowerCase().includes('vectorstore')) {
250
+ tools.push({
251
+ toolName: node.name,
252
+ nodeType: type,
253
+ purpose: 'Search vector database for relevant context',
254
+ parameters: ['query', 'topK', 'filter']
255
+ });
256
+ }
257
+ // HTTP request tools
258
+ if (type.toLowerCase().includes('httprequest')) {
259
+ tools.push({
260
+ toolName: node.name,
261
+ nodeType: type,
262
+ purpose: 'Make HTTP API requests',
263
+ parameters: ['url', 'method', 'body', 'headers']
264
+ });
265
+ }
266
+ // Code execution tools
267
+ if (type.toLowerCase().includes('code')) {
268
+ tools.push({
269
+ toolName: node.name,
270
+ nodeType: type,
271
+ purpose: 'Execute custom logic',
272
+ parameters: ['code', 'items']
273
+ });
274
+ }
275
+ }
276
+ return tools;
277
+ }
278
+ /**
279
+ * AMAZING: Extract decision points for autonomous agents
280
+ */
281
+ static extractDecisionPoints(workflow) {
282
+ const decisions = [];
283
+ for (const node of workflow.nodes) {
284
+ const type = node.type.toLowerCase();
285
+ if (type.includes('if')) {
286
+ const connections = workflow.connections[node.name];
287
+ const branches = connections ? Object.keys(connections) : [];
288
+ decisions.push({
289
+ nodeId: node.id,
290
+ nodeName: node.name,
291
+ type: 'IF',
292
+ condition: JSON.stringify(node.parameters?.conditions || {}),
293
+ branches
294
+ });
295
+ }
296
+ if (type.includes('switch')) {
297
+ const connections = workflow.connections[node.name];
298
+ const branches = connections ? Object.keys(connections) : [];
299
+ decisions.push({
300
+ nodeId: node.id,
301
+ nodeName: node.name,
302
+ type: 'Switch',
303
+ condition: JSON.stringify(node.parameters?.rules || {}),
304
+ branches
305
+ });
306
+ }
307
+ }
308
+ return decisions;
309
+ }
310
+ /**
311
+ * AMAZING: Extract memory requirements
312
+ */
313
+ static extractMemoryRequirements(workflow) {
314
+ const memory = [];
315
+ for (const node of workflow.nodes) {
316
+ const type = node.type.toLowerCase();
317
+ if (type.includes('pinecone') || type.includes('weaviate') || type.includes('qdrant')) {
318
+ memory.push({
319
+ nodeId: node.id,
320
+ nodeName: node.name,
321
+ type: 'vector-store',
322
+ purpose: 'Store and retrieve embeddings for RAG'
323
+ });
324
+ }
325
+ if (type.includes('redis')) {
326
+ memory.push({
327
+ nodeId: node.id,
328
+ nodeName: node.name,
329
+ type: 'cache',
330
+ purpose: 'Cache frequently accessed data'
331
+ });
332
+ }
333
+ if (type.includes('postgres') || type.includes('mysql') || type.includes('mongodb')) {
334
+ memory.push({
335
+ nodeId: node.id,
336
+ nodeName: node.name,
337
+ type: 'database',
338
+ purpose: 'Persistent data storage'
339
+ });
340
+ }
341
+ }
342
+ return memory;
343
+ }
344
+ }
345
+ exports.N8nWorkflowAnalyzer = N8nWorkflowAnalyzer;
346
+ //# sourceMappingURL=n8n-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n8n-analyzer.js","sourceRoot":"","sources":["../../src/enrichment/n8n-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * 🏎️ n8n .faf Generator - THE Orchestrator
3
+ *
4
+ * Brings everything together:
5
+ * 1. Analyzes n8n workflow (structure, pattern, tech stack)
6
+ * 2. Asks 3 questions (minimal friction)
7
+ * 3. Auto-corrects typos (helpful, non-invasive)
8
+ * 4. Fills 6 W's (POOR → RICH transformation)
9
+ * 5. Generates championship .faf (85%+ score)
10
+ *
11
+ * This is where the magic happens.
12
+ */
13
+ export interface GenerateOptions {
14
+ workflowFile: string;
15
+ outputFile?: string;
16
+ quiet?: boolean;
17
+ }
18
+ export declare class N8nFafGenerator {
19
+ private asker;
20
+ private corrector;
21
+ private filler;
22
+ constructor();
23
+ /**
24
+ * Generate RICH .faf from n8n workflow JSON
25
+ */
26
+ generate(options: GenerateOptions): Promise<string>;
27
+ /**
28
+ * Generate the complete .faf document
29
+ */
30
+ private generateFafDocument;
31
+ /**
32
+ * Generate architecture components list
33
+ */
34
+ private generateComponents;
35
+ /**
36
+ * Extract credentials from workflow
37
+ */
38
+ private extractCredentials;
39
+ /**
40
+ * Generate flow description
41
+ */
42
+ private generateFlowDescription;
43
+ /**
44
+ * Build AI models map
45
+ */
46
+ private buildAIModelsMap;
47
+ /**
48
+ * Build infrastructure map
49
+ */
50
+ private buildInfrastructureMap;
51
+ /**
52
+ * Extract integrations (unique service types)
53
+ */
54
+ private extractIntegrations;
55
+ /**
56
+ * Generate known issues from Q2
57
+ */
58
+ private generateKnownIssues;
59
+ /**
60
+ * Generate AI instructions
61
+ */
62
+ private generateAIInstructions;
63
+ /**
64
+ * Calculate FAF scores
65
+ */
66
+ private calculateScores;
67
+ }
68
+ //# sourceMappingURL=n8n-faf-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n8n-faf-generator.d.ts","sourceRoot":"","sources":["../../src/enrichment/n8n-faf-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,MAAM,CAAa;;IAQ3B;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IA8FzD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8F3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,eAAe;CA0BxB"}