faf-cli 4.2.2 → 4.3.1

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 (81) hide show
  1. package/README.md +266 -90
  2. package/assets/project-faf-screenshot.png +0 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +40 -22
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/git.d.ts.map +1 -1
  7. package/dist/commands/git.js +9 -7
  8. package/dist/commands/git.js.map +1 -1
  9. package/dist/commands/readme.d.ts +11 -6
  10. package/dist/commands/readme.d.ts.map +1 -1
  11. package/dist/commands/readme.js +167 -120
  12. package/dist/commands/readme.js.map +1 -1
  13. package/dist/commands/show.d.ts.map +1 -1
  14. package/dist/commands/show.js +22 -7
  15. package/dist/commands/show.js.map +1 -1
  16. package/dist/commands/sixws.d.ts +6 -0
  17. package/dist/commands/sixws.d.ts.map +1 -0
  18. package/dist/commands/sixws.js +154 -0
  19. package/dist/commands/sixws.js.map +1 -0
  20. package/dist/github/current-score-calculator.d.ts +15 -0
  21. package/dist/github/current-score-calculator.d.ts.map +1 -0
  22. package/dist/github/current-score-calculator.js +125 -0
  23. package/dist/github/current-score-calculator.js.map +1 -0
  24. package/dist/github/faf-git-generator.d.ts +58 -0
  25. package/dist/github/faf-git-generator.d.ts.map +1 -0
  26. package/dist/github/faf-git-generator.js +557 -0
  27. package/dist/github/faf-git-generator.js.map +1 -0
  28. package/dist/github/github-extractor.d.ts +4 -0
  29. package/dist/github/github-extractor.d.ts.map +1 -1
  30. package/dist/github/github-extractor.js +27 -0
  31. package/dist/github/github-extractor.js.map +1 -1
  32. package/dist/github/repo-selector.d.ts +2 -2
  33. package/dist/github/repo-selector.d.ts.map +1 -1
  34. package/dist/github/repo-selector.js +30 -23
  35. package/dist/github/repo-selector.js.map +1 -1
  36. package/dist/utils/file-utils.d.ts.map +1 -1
  37. package/dist/utils/file-utils.js +1 -4
  38. package/dist/utils/file-utils.js.map +1 -1
  39. package/dist/utils/slot-counter.d.ts +56 -0
  40. package/dist/utils/slot-counter.d.ts.map +1 -0
  41. package/dist/utils/slot-counter.js +100 -0
  42. package/dist/utils/slot-counter.js.map +1 -0
  43. package/dist/utils/yaml-generator.d.ts.map +1 -1
  44. package/dist/utils/yaml-generator.js +3 -7
  45. package/dist/utils/yaml-generator.js.map +1 -1
  46. package/package.json +7 -2
  47. package/project.faf +5 -9
  48. package/scripts/ANTHROPIC-DEMO.sh +203 -0
  49. package/scripts/boris-ready.sh +169 -0
  50. package/scripts/bundle-yaml.js +87 -0
  51. package/scripts/check-version.js +88 -0
  52. package/scripts/clean-build.js +34 -0
  53. package/scripts/cleanup-unused.sh +54 -0
  54. package/scripts/debug-django.txt +9 -0
  55. package/scripts/debug-mongo.txt +9 -0
  56. package/scripts/debug-react.txt +9 -0
  57. package/scripts/debug-rust.txt +9 -0
  58. package/scripts/debug-whisper.cpp.txt +9 -0
  59. package/scripts/evaluate-family-member.ts +300 -0
  60. package/scripts/generate-docs.ts +358 -0
  61. package/scripts/generate-drift-reports.sh +111 -0
  62. package/scripts/industry-showcase.json +122 -0
  63. package/scripts/mcp-ecosystem-research.sh +58 -0
  64. package/scripts/migrate-yaml-imports.sh +55 -0
  65. package/scripts/migrate-yaml.ts +132 -0
  66. package/scripts/performance-validation.ts +460 -0
  67. package/scripts/postinstall.js +30 -0
  68. package/scripts/prepare-release.ts +421 -0
  69. package/scripts/run-industry-showcase.ts +237 -0
  70. package/scripts/run-test-showcase.ts +244 -0
  71. package/scripts/setup-github-watch.sh +43 -0
  72. package/scripts/sync-version.js +35 -0
  73. package/scripts/test-integration-detection.ts +93 -0
  74. package/scripts/test-integration-simple.js +93 -0
  75. package/scripts/test-medal-progression.sh +143 -0
  76. package/scripts/test-showcase-results.json +109 -0
  77. package/scripts/test-showcase.json +32 -0
  78. package/scripts/update-version.js +148 -0
  79. package/scripts/verify-build.js +343 -0
  80. package/scripts/version-check.js +78 -0
  81. package/scripts/watch-discussions.sh +86 -0
@@ -0,0 +1,358 @@
1
+ #!/usr/bin/env ts-node
2
+
3
+ /**
4
+ * 📚 Documentation Generator - F1-Inspired Championship Docs
5
+ * Auto-generates command reference from FAF_INDEX
6
+ */
7
+
8
+ import * as fs from 'fs/promises';
9
+ import * as path from 'path';
10
+ import { FAF_INDEX } from '../src/commands/index';
11
+ import { FAF_COLORS, FAF_ICONS } from '../src/utils/championship-style';
12
+
13
+ const DOCS_DIR = path.join(__dirname, '..', 'docs-site');
14
+
15
+ interface GenerationStats {
16
+ commandPages: number;
17
+ conceptPages: number;
18
+ totalPages: number;
19
+ errors: string[];
20
+ }
21
+
22
+ /**
23
+ * Main documentation generation function
24
+ */
25
+ async function generateDocs(): Promise<void> {
26
+ console.log(`${FAF_COLORS.fafCyan('🏗️ Generating FAF CLI Documentation...')}`);
27
+
28
+ const stats: GenerationStats = {
29
+ commandPages: 0,
30
+ conceptPages: 0,
31
+ totalPages: 0,
32
+ errors: []
33
+ };
34
+
35
+ try {
36
+ // Ensure docs directory exists
37
+ await ensureDocsDirectory();
38
+
39
+ // Generate command reference pages
40
+ await generateCommandPages(stats);
41
+
42
+ // Generate concept pages
43
+ await generateConceptPages(stats);
44
+
45
+ // Generate index pages
46
+ await generateIndexPages(stats);
47
+
48
+ // Generate navigation config
49
+ await generateNavigation();
50
+
51
+ // Show results
52
+ console.log();
53
+ console.log(`${FAF_COLORS.fafGreen('✅ Documentation Generation Complete!')}`);
54
+ console.log(`${FAF_COLORS.fafCyan('├─')} Command pages: ${stats.commandPages}`);
55
+ console.log(`${FAF_COLORS.fafCyan('├─')} Concept pages: ${stats.conceptPages}`);
56
+ console.log(`${FAF_COLORS.fafCyan('├─')} Total pages: ${stats.totalPages}`);
57
+
58
+ if (stats.errors.length > 0) {
59
+ console.log(`${FAF_COLORS.fafOrange('└─')} Errors: ${stats.errors.length}`);
60
+ stats.errors.forEach(error => {
61
+ console.log(` ${FAF_COLORS.fafOrange('⚠️')} ${error}`);
62
+ });
63
+ } else {
64
+ console.log(`${FAF_COLORS.fafGreen('└─')} No errors! 🏆`);
65
+ }
66
+
67
+ } catch (error) {
68
+ console.error(`${FAF_COLORS.fafOrange('❌ Generation failed:')} ${error}`);
69
+ process.exit(1);
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Ensure docs directory structure exists
75
+ */
76
+ async function ensureDocsDirectory(): Promise<void> {
77
+ const dirs = [
78
+ path.join(DOCS_DIR, 'pages'),
79
+ path.join(DOCS_DIR, 'pages', 'commands'),
80
+ path.join(DOCS_DIR, 'pages', 'concepts'),
81
+ path.join(DOCS_DIR, 'pages', 'examples'),
82
+ path.join(DOCS_DIR, 'components'),
83
+ path.join(DOCS_DIR, 'public', 'screenshots'),
84
+ path.join(DOCS_DIR, 'public', 'examples')
85
+ ];
86
+
87
+ for (const dir of dirs) {
88
+ await fs.mkdir(dir, { recursive: true });
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Generate command reference pages
94
+ */
95
+ async function generateCommandPages(stats: GenerationStats): Promise<void> {
96
+ const commands = Object.entries(FAF_INDEX).filter(([_, entry]) => entry.type === 'command');
97
+
98
+ for (const [key, entry] of commands) {
99
+ try {
100
+ const content = generateCommandPageContent(key, entry);
101
+ const filePath = path.join(DOCS_DIR, 'pages', 'commands', `${key}.mdx`);
102
+ await fs.writeFile(filePath, content);
103
+ stats.commandPages++;
104
+ stats.totalPages++;
105
+ } catch (error) {
106
+ stats.errors.push(`Command ${key}: ${error}`);
107
+ }
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Generate concept pages
113
+ */
114
+ async function generateConceptPages(stats: GenerationStats): Promise<void> {
115
+ const concepts = Object.entries(FAF_INDEX).filter(([_, entry]) => entry.type === 'concept');
116
+
117
+ for (const [key, entry] of concepts) {
118
+ try {
119
+ const content = generateConceptPageContent(key, entry);
120
+ const filePath = path.join(DOCS_DIR, 'pages', 'concepts', `${key}.mdx`);
121
+ await fs.writeFile(filePath, content);
122
+ stats.conceptPages++;
123
+ stats.totalPages++;
124
+ } catch (error) {
125
+ stats.errors.push(`Concept ${key}: ${error}`);
126
+ }
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Generate index pages
132
+ */
133
+ async function generateIndexPages(stats: GenerationStats): Promise<void> {
134
+ // Commands index
135
+ const commandsIndex = generateCommandsIndexContent();
136
+ await fs.writeFile(
137
+ path.join(DOCS_DIR, 'pages', 'commands', 'index.mdx'),
138
+ commandsIndex
139
+ );
140
+
141
+ // Concepts index
142
+ const conceptsIndex = generateConceptsIndexContent();
143
+ await fs.writeFile(
144
+ path.join(DOCS_DIR, 'pages', 'concepts', 'index.mdx'),
145
+ conceptsIndex
146
+ );
147
+
148
+ // Main index
149
+ const mainIndex = generateMainIndexContent();
150
+ await fs.writeFile(
151
+ path.join(DOCS_DIR, 'pages', 'index.mdx'),
152
+ mainIndex
153
+ );
154
+
155
+ stats.totalPages += 3;
156
+ }
157
+
158
+ /**
159
+ * Generate command page content
160
+ */
161
+ function generateCommandPageContent(key: string, entry: any): string {
162
+ return `# ${key}
163
+
164
+ ${entry.description}
165
+
166
+ ## Usage
167
+
168
+ \`\`\`bash
169
+ ${entry.usage || `faf ${key}`}
170
+ \`\`\`
171
+
172
+ ${entry.examples ? `
173
+ ## Examples
174
+
175
+ ${entry.examples.map((example: string) => `\`\`\`bash
176
+ ${example}
177
+ \`\`\`\n`).join('')}
178
+ ` : ''}
179
+
180
+ ${entry.related ? `
181
+ ## Related Commands
182
+
183
+ ${entry.related.map((rel: string) => `- [${rel}](./${rel})`).join('\n')}
184
+ ` : ''}
185
+
186
+ ## Category
187
+
188
+ **${entry.category}** - ${getCategoryDescription(entry.category)}
189
+ `;
190
+ }
191
+
192
+ /**
193
+ * Generate concept page content
194
+ */
195
+ function generateConceptPageContent(key: string, entry: any): string {
196
+ return `# ${key}
197
+
198
+ ${entry.description}
199
+
200
+ ${entry.related ? `
201
+ ## Related
202
+
203
+ ${entry.related.map((rel: string) => `- [${rel}](../${getRelatedType(rel)}/${rel})`).join('\n')}
204
+ ` : ''}
205
+
206
+ ## Category
207
+
208
+ **${entry.category}** - ${getCategoryDescription(entry.category)}
209
+ `;
210
+ }
211
+
212
+ /**
213
+ * Generate commands index content
214
+ */
215
+ function generateCommandsIndexContent(): string {
216
+ const commands = Object.entries(FAF_INDEX).filter(([_, entry]) => entry.type === 'command');
217
+
218
+ return `# Commands Reference
219
+
220
+ Complete reference for all FAF CLI commands.
221
+
222
+ ## Core Commands
223
+
224
+ ${commands.filter(([_, entry]) => entry.category === 'core').map(([key, entry]) =>
225
+ `### [${key}](./${key})
226
+ ${entry.description}
227
+ \`\`\`bash
228
+ ${entry.usage || `faf ${key}`}
229
+ \`\`\`
230
+ `).join('\n')}
231
+
232
+ ## All Commands
233
+
234
+ ${commands.map(([key, entry]) => `- **[${key}](./${key})** - ${entry.description}`).join('\n')}
235
+ `;
236
+ }
237
+
238
+ /**
239
+ * Generate concepts index content
240
+ */
241
+ function generateConceptsIndexContent(): string {
242
+ const concepts = Object.entries(FAF_INDEX).filter(([_, entry]) => entry.type === 'concept');
243
+
244
+ return `# Core Concepts
245
+
246
+ Understanding the fundamentals of FAF CLI and AI context management.
247
+
248
+ ${concepts.map(([key, entry]) => `## [${key}](./${key})
249
+
250
+ ${entry.description}
251
+ `).join('\n')}
252
+ `;
253
+ }
254
+
255
+ /**
256
+ * Generate main index content
257
+ */
258
+ function generateMainIndexContent(): string {
259
+ return `---
260
+ title: FAF CLI Documentation
261
+ ---
262
+
263
+ # 🏎️ FAF CLI Documentation
264
+
265
+ Welcome to the **Championship-grade AI context management** documentation!
266
+
267
+ ## Quick Start
268
+
269
+ \`\`\`bash
270
+ # Install FAF CLI
271
+ npm install -g @faf/cli
272
+
273
+ # Initialize your project
274
+ faf init
275
+
276
+ # Check your AI context score
277
+ faf score
278
+
279
+ # Build trust with AI
280
+ faf trust
281
+ \`\`\`
282
+
283
+ ## What is FAF?
284
+
285
+ FAF (Foundational AI-Context Format) transforms developer psychology from **hope-driven** to **trust-driven** AI development. In 30 seconds, FAF replaces 20 minutes of questions.
286
+
287
+ ## Core Features
288
+
289
+ - 🚀 **Universal AI Context** - Works with Claude, ChatGPT, Gemini
290
+ - ⚡ **F1-Inspired Performance** - Championship speed (<40ms status)
291
+ - 🎯 **Trust-Driven Development** - Eliminate AI anxiety
292
+ - 💎 **Technical Credit System** - Psychology revolution vs debt
293
+
294
+ ## Documentation Sections
295
+
296
+ - **[Commands](/commands)** - Complete CLI reference
297
+ - **[Concepts](/concepts)** - Core concepts and principles
298
+ - **[Examples](/examples)** - Real-world usage patterns
299
+
300
+ ---
301
+
302
+ **🏁 Making AI development better for everyone!**
303
+ `;
304
+ }
305
+
306
+ /**
307
+ * Generate navigation configuration
308
+ */
309
+ async function generateNavigation(): Promise<void> {
310
+ const navConfig = `export default {
311
+ logo: <span>🏎️ FAF CLI</span>,
312
+ project: {
313
+ link: 'https://github.com/faf-org/cli'
314
+ },
315
+ docsRepositoryBase: 'https://github.com/faf-org/cli/tree/main/docs',
316
+ sidebar: {
317
+ defaultMenuCollapseLevel: 1
318
+ },
319
+ footer: {
320
+ text: '🏁 Making AI development better for everyone!'
321
+ }
322
+ }`;
323
+
324
+ await fs.writeFile(
325
+ path.join(DOCS_DIR, 'theme.config.tsx'),
326
+ navConfig
327
+ );
328
+ }
329
+
330
+ /**
331
+ * Helper functions
332
+ */
333
+ function getCategoryDescription(category: string): string {
334
+ const descriptions: Record<string, string> = {
335
+ core: 'Essential FAF functionality',
336
+ ai: 'AI integration and compatibility',
337
+ trust: 'Trust and confidence management',
338
+ utilities: 'Helper tools and utilities',
339
+ improvement: 'Context improvement tools',
340
+ psychology: 'Developer psychology enhancement',
341
+ concepts: 'Fundamental concepts',
342
+ discovery: 'Technology discovery and analysis'
343
+ };
344
+ return descriptions[category] || 'FAF functionality';
345
+ }
346
+
347
+ function getRelatedType(key: string): string {
348
+ const entry = FAF_INDEX[key as keyof typeof FAF_INDEX];
349
+ if (!entry) return 'commands';
350
+ return entry.type === 'command' ? 'commands' : 'concepts';
351
+ }
352
+
353
+ // Run the generator
354
+ if (require.main === module) {
355
+ generateDocs().catch(console.error);
356
+ }
357
+
358
+ export { generateDocs };
@@ -0,0 +1,111 @@
1
+ #!/bin/bash
2
+ # 📊 Generate Real Drift Reports for Social Media
3
+ # Championship-grade proof of context-drift impact
4
+
5
+ set -e
6
+
7
+ echo "🍊 FAF DRIFT REPORT GENERATOR"
8
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
9
+ echo ""
10
+
11
+ # Output directory for reports
12
+ REPORT_DIR="/tmp/faf-drift-reports"
13
+ mkdir -p "$REPORT_DIR"
14
+
15
+ echo "📁 Reports will be saved to: $REPORT_DIR"
16
+ echo ""
17
+
18
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
19
+ # Report 1: FAF CLI itself
20
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
21
+
22
+ echo "🏎️ REPORT 1: FAF CLI (Self-Analysis)"
23
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
24
+ echo ""
25
+
26
+ cd "$(dirname "$0")/.."
27
+ node dist/cli.js drift --export "$REPORT_DIR/faf-cli-drift.json" | tee "$REPORT_DIR/faf-cli-drift.txt"
28
+
29
+ echo ""
30
+ echo "✅ Report saved:"
31
+ echo " - JSON: $REPORT_DIR/faf-cli-drift.json"
32
+ echo " - Text: $REPORT_DIR/faf-cli-drift.txt"
33
+ echo ""
34
+
35
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
36
+ # Report 2: Other FAF projects (if available)
37
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
38
+
39
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
40
+ echo "🔍 Scanning for other FAF projects..."
41
+ echo ""
42
+
43
+ # Check if faf-dev-tools exists
44
+ if [ -d "/Users/wolfejam/FAF/faf-dev-tools" ]; then
45
+ echo "🌐 REPORT 2: faf-dev-tools"
46
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
47
+ echo ""
48
+
49
+ cd /Users/wolfejam/FAF/faf-dev-tools
50
+ node /Users/wolfejam/FAF/cli/dist/cli.js drift --export "$REPORT_DIR/faf-dev-tools-drift.json" | tee "$REPORT_DIR/faf-dev-tools-drift.txt"
51
+
52
+ echo ""
53
+ echo "✅ Report saved:"
54
+ echo " - JSON: $REPORT_DIR/faf-dev-tools-drift.json"
55
+ echo " - Text: $REPORT_DIR/faf-dev-tools-drift.txt"
56
+ echo ""
57
+ fi
58
+
59
+ # Check if claude-faf-mcp exists
60
+ if [ -d "/Users/wolfejam/FAF/claude-faf-mcp" ]; then
61
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
62
+ echo "🔌 REPORT 3: claude-faf-mcp"
63
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
64
+ echo ""
65
+
66
+ cd /Users/wolfejam/FAF/claude-faf-mcp
67
+ node /Users/wolfejam/FAF/cli/dist/cli.js drift --export "$REPORT_DIR/claude-faf-mcp-drift.json" | tee "$REPORT_DIR/claude-faf-mcp-drift.txt"
68
+
69
+ echo ""
70
+ echo "✅ Report saved:"
71
+ echo " - JSON: $REPORT_DIR/claude-faf-mcp-drift.json"
72
+ echo " - Text: $REPORT_DIR/claude-faf-mcp-drift.txt"
73
+ echo ""
74
+ fi
75
+
76
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
77
+ # Generate Summary
78
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
79
+
80
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
81
+ echo "📊 SUMMARY"
82
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
83
+ echo ""
84
+ echo "All reports saved to: $REPORT_DIR"
85
+ echo ""
86
+ echo "Reports generated:"
87
+ ls -lh "$REPORT_DIR"
88
+ echo ""
89
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
90
+ echo "🎯 READY FOR SOCIAL MEDIA"
91
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
92
+ echo ""
93
+ echo "Text reports (ready to copy/paste):"
94
+ for file in "$REPORT_DIR"/*.txt; do
95
+ if [ -f "$file" ]; then
96
+ echo " 📄 $(basename "$file")"
97
+ fi
98
+ done
99
+ echo ""
100
+ echo "JSON reports (for web visualization):"
101
+ for file in "$REPORT_DIR"/*.json; do
102
+ if [ -f "$file" ]; then
103
+ echo " 📊 $(basename "$file")"
104
+ fi
105
+ done
106
+ echo ""
107
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
108
+ echo "Context-drift makes you pay."
109
+ echo ".faf keeps you drift-free."
110
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
111
+ echo ""
@@ -0,0 +1,122 @@
1
+ {
2
+ "title": "FAF Industry Showcase",
3
+ "description": "Proof that FAF works across every language, framework, and project type",
4
+ "updated": "2026-02-08",
5
+ "categories": [
6
+ {
7
+ "name": "JavaScript/TypeScript",
8
+ "repos": [
9
+ "facebook/react",
10
+ "vuejs/core",
11
+ "angular/angular",
12
+ "sveltejs/svelte",
13
+ "vercel/next.js",
14
+ "nuxt/nuxt",
15
+ "microsoft/TypeScript",
16
+ "nodejs/node",
17
+ "denoland/deno",
18
+ "oven-sh/bun",
19
+ "expressjs/express",
20
+ "nestjs/nest"
21
+ ]
22
+ },
23
+ {
24
+ "name": "Python",
25
+ "repos": [
26
+ "python/cpython",
27
+ "django/django",
28
+ "pallets/flask",
29
+ "tiangolo/fastapi",
30
+ "huggingface/transformers",
31
+ "openai/whisper",
32
+ "pytorch/pytorch",
33
+ "tensorflow/tensorflow",
34
+ "scikit-learn/scikit-learn",
35
+ "jupyter/notebook"
36
+ ]
37
+ },
38
+ {
39
+ "name": "Systems/Low-level",
40
+ "repos": [
41
+ "ggml-org/whisper.cpp",
42
+ "rust-lang/rust",
43
+ "golang/go",
44
+ "ziglang/zig",
45
+ "redis/redis",
46
+ "nginx/nginx",
47
+ "curl/curl",
48
+ "git/git"
49
+ ]
50
+ },
51
+ {
52
+ "name": "Mobile",
53
+ "repos": [
54
+ "facebook/react-native",
55
+ "flutter/flutter",
56
+ "ionic-team/ionic-framework",
57
+ "expo/expo",
58
+ "realm/realm-swift",
59
+ "square/okhttp"
60
+ ]
61
+ },
62
+ {
63
+ "name": "Databases",
64
+ "repos": [
65
+ "postgres/postgres",
66
+ "mongodb/mongo",
67
+ "elastic/elasticsearch",
68
+ "clickhouse/clickhouse",
69
+ "cockroachdb/cockroach",
70
+ "supabase/supabase"
71
+ ]
72
+ },
73
+ {
74
+ "name": "DevOps/Cloud",
75
+ "repos": [
76
+ "kubernetes/kubernetes",
77
+ "docker/cli",
78
+ "hashicorp/terraform",
79
+ "ansible/ansible",
80
+ "prometheus/prometheus",
81
+ "grafana/grafana",
82
+ "vercel/vercel",
83
+ "netlify/cli"
84
+ ]
85
+ },
86
+ {
87
+ "name": "Web Frameworks",
88
+ "repos": [
89
+ "rails/rails",
90
+ "laravel/laravel",
91
+ "spring-projects/spring-boot",
92
+ "phoenixframework/phoenix",
93
+ "gin-gonic/gin",
94
+ "actix/actix-web"
95
+ ]
96
+ },
97
+ {
98
+ "name": "Developer Tools",
99
+ "repos": [
100
+ "neovim/neovim",
101
+ "prettier/prettier",
102
+ "eslint/eslint",
103
+ "webpack/webpack",
104
+ "vitejs/vite",
105
+ "vercel/turborepo",
106
+ "changesets/changesets",
107
+ "jestjs/jest"
108
+ ]
109
+ },
110
+ {
111
+ "name": "AI/ML Infrastructure",
112
+ "repos": [
113
+ "openai/openai-python",
114
+ "anthropics/anthropic-sdk-python",
115
+ "langchain-ai/langchain",
116
+ "run-llama/llama_index",
117
+ "chroma-core/chroma",
118
+ "pinecone-io/pinecone-python-client"
119
+ ]
120
+ }
121
+ ]
122
+ }
@@ -0,0 +1,58 @@
1
+ #!/bin/bash
2
+ # MCP Ecosystem Research - Get stats for all major MCP servers
3
+
4
+ echo "🔍 MCP ECOSYSTEM RESEARCH"
5
+ echo "========================="
6
+ echo ""
7
+
8
+ packages=(
9
+ "@modelcontextprotocol/sdk"
10
+ "@playwright/mcp"
11
+ "chrome-devtools-mcp"
12
+ "@mastra/mcp"
13
+ "n8n-mcp"
14
+ "mcp-proxy"
15
+ "@langchain/mcp-adapters"
16
+ "mcp-handler"
17
+ "tavily-mcp"
18
+ "n8n-nodes-mcp"
19
+ "@supabase/mcp-utils"
20
+ "@upstash/context7-mcp"
21
+ "mcp-framework"
22
+ "@hono/mcp"
23
+ "gemini-mcp-tool"
24
+ "@expo/mcp-tunnel"
25
+ "@browsermcp/mcp"
26
+ "@agent-infra/mcp-server-browser"
27
+ "@mobilenext/mobile-mcp"
28
+ "mcp-hello-world"
29
+ "@mzxrai/mcp-webresearch"
30
+ )
31
+
32
+ for pkg in "${packages[@]}"; do
33
+ echo "📦 $pkg"
34
+
35
+ # Get package info
36
+ info=$(npm view "$pkg" version description 2>/dev/null)
37
+ if [ $? -eq 0 ]; then
38
+ echo " $info" | sed 's/^/ /'
39
+
40
+ # Get download stats
41
+ downloads=$(curl -s "https://api.npmjs.org/downloads/point/last-week/$pkg" 2>/dev/null)
42
+ if [ $? -eq 0 ]; then
43
+ dl_count=$(echo "$downloads" | grep -o '"downloads":[0-9]*' | cut -d: -f2)
44
+ if [ -n "$dl_count" ]; then
45
+ # Format with commas
46
+ formatted=$(printf "%'d" $dl_count 2>/dev/null || echo $dl_count)
47
+ echo " 📊 Weekly downloads: $formatted"
48
+ fi
49
+ fi
50
+ else
51
+ echo " ⚠️ Package not found"
52
+ fi
53
+
54
+ echo ""
55
+ sleep 0.2 # Rate limit
56
+ done
57
+
58
+ echo "✅ Research complete!"
@@ -0,0 +1,55 @@
1
+ #!/bin/bash
2
+ # 🔥 ROCK SOLID YAML FIX - Migrate all files to use fix-once/yaml
3
+ # FIX ONCE, DONE FOREVER
4
+
5
+ set -e
6
+
7
+ echo "🔧 Migrating all YAML imports to fix-once/yaml..."
8
+ echo ""
9
+
10
+ # Find all TypeScript files with yaml imports
11
+ FILES=$(grep -r "import.*yaml" src/ --include="*.ts" -l || true)
12
+
13
+ COUNT=0
14
+ for file in $FILES; do
15
+ # Skip the fix-once/yaml.ts file itself
16
+ if [[ "$file" == *"fix-once/yaml.ts"* ]]; then
17
+ continue
18
+ fi
19
+
20
+ echo "📝 Processing: $file"
21
+
22
+ # Pattern 1: import * as YAML from 'yaml'
23
+ sed -i '' "s|import \* as YAML from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../fix-once/yaml'|g" "$file"
24
+ sed -i '' "s|import \* as YAML from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../../fix-once/yaml'|g" "$file"
25
+ sed -i '' "s|import \* as YAML from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../../../fix-once/yaml'|g" "$file"
26
+
27
+ # Pattern 2: import * as yaml from 'yaml'
28
+ sed -i '' "s|import \* as yaml from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../fix-once/yaml'|g" "$file"
29
+ sed -i '' "s|import \* as yaml from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../../fix-once/yaml'|g" "$file"
30
+ sed -i '' "s|import \* as yaml from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../../../fix-once/yaml'|g" "$file"
31
+
32
+ # Pattern 3: import yaml from 'yaml'
33
+ sed -i '' "s|import yaml from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../fix-once/yaml'|g" "$file"
34
+ sed -i '' "s|import yaml from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../../fix-once/yaml'|g" "$file"
35
+ sed -i '' "s|import yaml from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../../../fix-once/yaml'|g" "$file"
36
+
37
+ # Pattern 4: import { parse, stringify } from 'yaml'
38
+ sed -i '' "s|import { parse, stringify } from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../fix-once/yaml'|g" "$file"
39
+ sed -i '' "s|import { parse, stringify } from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../../fix-once/yaml'|g" "$file"
40
+ sed -i '' "s|import { parse, stringify } from ['\"]yaml['\"]|import { parse as parseYAML, stringify as stringifyYAML } from '../../../fix-once/yaml'|g" "$file"
41
+
42
+ COUNT=$((COUNT + 1))
43
+ done
44
+
45
+ echo ""
46
+ echo "✅ Migrated $COUNT files to use fix-once/yaml"
47
+ echo ""
48
+ echo "⚠️ MANUAL STEP REQUIRED:"
49
+ echo " Replace all instances of:"
50
+ echo " - YAML.parse(x) → parseYAML(x, { filepath: path })"
51
+ echo " - yaml.parse(x) → parseYAML(x, { filepath: path })"
52
+ echo " - YAML.stringify(x) → stringifyYAML(x)"
53
+ echo " - yaml.stringify(x) → stringifyYAML(x)"
54
+ echo ""
55
+ echo "🏎️ YAML is now ROCK SOLID - FIX ONCE, DONE FOREVER"