faf-cli 4.3.2 → 4.3.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.
@@ -0,0 +1,19 @@
1
+ /**
2
+ * faf compile - Compile .faf to .fafb binary format
3
+ *
4
+ * Usage:
5
+ * faf compile # Compile project.faf → project.fafb
6
+ * faf compile input.faf # Compile specific file
7
+ * faf compile -o output.fafb # Custom output path
8
+ * faf compile --watch # Watch and auto-recompile
9
+ * faf compile --benchmark # Compare parse speeds
10
+ */
11
+ interface CommandOptions {
12
+ output?: string;
13
+ watch?: boolean;
14
+ benchmark?: boolean;
15
+ verbose?: boolean;
16
+ }
17
+ export declare function compileCommand(input?: string, options?: CommandOptions): Promise<void>;
18
+ export {};
19
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GhG"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ /**
3
+ * faf compile - Compile .faf to .fafb binary format
4
+ *
5
+ * Usage:
6
+ * faf compile # Compile project.faf → project.fafb
7
+ * faf compile input.faf # Compile specific file
8
+ * faf compile -o output.fafb # Custom output path
9
+ * faf compile --watch # Watch and auto-recompile
10
+ * faf compile --benchmark # Compare parse speeds
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.compileCommand = compileCommand;
14
+ const colors_1 = require("../fix-once/colors");
15
+ const fafb_compiler_1 = require("../utils/fafb-compiler");
16
+ const file_utils_1 = require("../utils/file-utils");
17
+ async function compileCommand(input, options = {}) {
18
+ console.log();
19
+ // Check if compiler is available
20
+ const compilerCheck = await (0, fafb_compiler_1.checkCompilerAvailable)();
21
+ if (!compilerCheck.available) {
22
+ console.log(colors_1.chalk.red('❌ xai-faf-rust compiler not found'));
23
+ console.log();
24
+ console.log(colors_1.chalk.yellow('Installation options:'));
25
+ console.log(colors_1.chalk.gray(' 1. Install from cargo: cargo install xai-faf'));
26
+ console.log(colors_1.chalk.gray(' 2. Download from: https://github.com/Wolfe-Jam/xai-faf-rust'));
27
+ console.log(colors_1.chalk.gray(' 3. Build from source: cd ~/FAF/xai-faf-rust && cargo build --release'));
28
+ console.log();
29
+ process.exit(1);
30
+ }
31
+ const inputPath = input || 'project.faf';
32
+ // Check if input exists
33
+ if (!(await (0, file_utils_1.fileExists)(inputPath))) {
34
+ console.log(colors_1.chalk.red(`❌ Input file not found: ${inputPath}`));
35
+ console.log();
36
+ process.exit(1);
37
+ }
38
+ // Watch mode
39
+ if (options.watch) {
40
+ await (0, fafb_compiler_1.watchAndCompile)(inputPath, options.output);
41
+ return;
42
+ }
43
+ // Benchmark mode
44
+ if (options.benchmark) {
45
+ const fafbPath = options.output || inputPath.replace(/\.faf$/, '.fafb');
46
+ // Compile first if .fafb doesn't exist
47
+ if (!(await (0, file_utils_1.fileExists)(fafbPath))) {
48
+ console.log(colors_1.chalk.cyan('📦 Compiling before benchmark...'));
49
+ const result = await (0, fafb_compiler_1.compileFAF)({ input: inputPath, output: fafbPath, verbose: true });
50
+ if (!result.success) {
51
+ console.log(colors_1.chalk.red(`❌ Compilation failed: ${result.error}`));
52
+ process.exit(1);
53
+ }
54
+ console.log();
55
+ }
56
+ console.log(colors_1.chalk.cyan('🏁 Running benchmark...'));
57
+ console.log();
58
+ try {
59
+ const benchmark = await (0, fafb_compiler_1.benchmarkParsing)(inputPath, fafbPath);
60
+ console.log(colors_1.chalk.bold('Results:'));
61
+ console.log(colors_1.chalk.gray('─────────────────────────────────────'));
62
+ console.log(colors_1.chalk.white(` .faf parse time: ${benchmark.fafParseTime.toFixed(2)}ms`));
63
+ console.log(colors_1.chalk.white(` .fafb parse time: ${benchmark.fafbParseTime.toFixed(2)}ms`));
64
+ console.log();
65
+ console.log(colors_1.chalk.green(` ⚡️ Speedup: ${benchmark.speedup.toFixed(2)}x faster`));
66
+ console.log();
67
+ console.log(colors_1.chalk.white(` .faf size: ${benchmark.fafSize} bytes`));
68
+ console.log(colors_1.chalk.white(` .fafb size: ${benchmark.fafbSize} bytes`));
69
+ console.log(colors_1.chalk.green(` 📦 Compression: ${benchmark.compressionRatio.toFixed(1)}% smaller`));
70
+ console.log(colors_1.chalk.gray('─────────────────────────────────────'));
71
+ console.log();
72
+ }
73
+ catch (error) {
74
+ console.log(colors_1.chalk.red(`❌ Benchmark failed: ${error.message}`));
75
+ process.exit(1);
76
+ }
77
+ return;
78
+ }
79
+ // Normal compile mode
80
+ const outputPath = options.output || inputPath.replace(/\.faf$/, '.fafb');
81
+ console.log(colors_1.chalk.cyan('📦 Compiling to binary format...'));
82
+ console.log(colors_1.chalk.gray(` Input: ${inputPath}`));
83
+ console.log(colors_1.chalk.gray(` Output: ${outputPath}`));
84
+ console.log();
85
+ const result = await (0, fafb_compiler_1.compileFAF)({
86
+ input: inputPath,
87
+ output: outputPath,
88
+ verbose: options.verbose
89
+ });
90
+ if (result.success) {
91
+ console.log(colors_1.chalk.green('✅ Compilation successful!'));
92
+ console.log();
93
+ console.log(colors_1.chalk.bold('Results:'));
94
+ console.log(colors_1.chalk.gray('─────────────────────────────────────'));
95
+ console.log(colors_1.chalk.white(` Output: ${result.output}`));
96
+ console.log(colors_1.chalk.white(` Size: ${result.size} bytes`));
97
+ console.log(colors_1.chalk.green(` Compression: ${result.compressionRatio.toFixed(1)}% smaller`));
98
+ console.log(colors_1.chalk.white(` Time: ${result.time}ms`));
99
+ console.log(colors_1.chalk.gray('─────────────────────────────────────'));
100
+ console.log();
101
+ console.log(colors_1.chalk.gray('💡 Use with MCP servers:'));
102
+ console.log(colors_1.chalk.gray(' - claude-faf-mcp reads .fafb automatically'));
103
+ console.log(colors_1.chalk.gray(' - Faster parsing (O(1) section lookup)'));
104
+ console.log(colors_1.chalk.gray(' - Smaller size (priority truncation)'));
105
+ console.log();
106
+ }
107
+ else {
108
+ console.log(colors_1.chalk.red('❌ Compilation failed!'));
109
+ console.log(colors_1.chalk.red(` Error: ${result.error}`));
110
+ console.log();
111
+ process.exit(1);
112
+ }
113
+ }
114
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * faf decompile - Decompile .fafb binary back to .faf YAML
3
+ *
4
+ * Usage:
5
+ * faf decompile project.fafb # Decompile to project.faf
6
+ * faf decompile input.fafb -o out.faf # Custom output
7
+ */
8
+ interface DecompileOptions {
9
+ output?: string;
10
+ }
11
+ export declare function decompileCommand(input?: string, options?: DecompileOptions): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=decompile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decompile.d.ts","sourceRoot":"","sources":["../../src/commands/decompile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEpG"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /**
3
+ * faf decompile - Decompile .fafb binary back to .faf YAML
4
+ *
5
+ * Usage:
6
+ * faf decompile project.fafb # Decompile to project.faf
7
+ * faf decompile input.fafb -o out.faf # Custom output
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.decompileCommand = decompileCommand;
11
+ const colors_1 = require("../fix-once/colors");
12
+ const fafb_compiler_1 = require("../utils/fafb-compiler");
13
+ const file_utils_1 = require("../utils/file-utils");
14
+ async function decompileCommand(input, options = {}) {
15
+ console.log();
16
+ // Check if compiler is available
17
+ const compilerCheck = await (0, fafb_compiler_1.checkCompilerAvailable)();
18
+ if (!compilerCheck.available) {
19
+ console.log(colors_1.chalk.red('❌ xai-faf-rust compiler not found'));
20
+ console.log();
21
+ console.log(colors_1.chalk.yellow('Installation options:'));
22
+ console.log(colors_1.chalk.gray(' 1. Install from cargo: cargo install xai-faf'));
23
+ console.log(colors_1.chalk.gray(' 2. Download from: https://github.com/Wolfe-Jam/xai-faf-rust'));
24
+ console.log(colors_1.chalk.gray(' 3. Build from source: cd ~/FAF/xai-faf-rust && cargo build --release'));
25
+ console.log();
26
+ process.exit(1);
27
+ }
28
+ const inputPath = input || 'project.fafb';
29
+ // Check if input exists
30
+ if (!(await (0, file_utils_1.fileExists)(inputPath))) {
31
+ console.log(colors_1.chalk.red(`❌ Input file not found: ${inputPath}`));
32
+ console.log();
33
+ console.log(colors_1.chalk.gray('💡 Tip: Use "faf compile" to create .fafb files first'));
34
+ console.log();
35
+ process.exit(1);
36
+ }
37
+ const outputPath = options.output || inputPath.replace(/\.fafb$/, '.faf');
38
+ console.log(colors_1.chalk.cyan('📤 Decompiling binary to YAML...'));
39
+ console.log(colors_1.chalk.gray(` Input: ${inputPath}`));
40
+ console.log(colors_1.chalk.gray(` Output: ${outputPath}`));
41
+ console.log();
42
+ const result = await (0, fafb_compiler_1.decompileFAFb)(inputPath, outputPath);
43
+ if (result.success) {
44
+ console.log(colors_1.chalk.green('✅ Decompilation successful!'));
45
+ console.log();
46
+ console.log(colors_1.chalk.bold('Results:'));
47
+ console.log(colors_1.chalk.gray('─────────────────────────────────────'));
48
+ console.log(colors_1.chalk.white(` Output: ${result.output}`));
49
+ console.log(colors_1.chalk.white(` Size: ${result.size} bytes`));
50
+ console.log(colors_1.chalk.white(` Time: ${result.time}ms`));
51
+ console.log(colors_1.chalk.gray('─────────────────────────────────────'));
52
+ console.log();
53
+ console.log(colors_1.chalk.gray('💡 Use for debugging:'));
54
+ console.log(colors_1.chalk.gray(' - Verify binary format correctness'));
55
+ console.log(colors_1.chalk.gray(' - Compare with original .faf'));
56
+ console.log(colors_1.chalk.gray(' - Troubleshoot compilation issues'));
57
+ console.log();
58
+ }
59
+ else {
60
+ if (result.error?.includes('not yet implemented')) {
61
+ console.log(colors_1.chalk.yellow('⚠️ Decompile command coming soon!'));
62
+ console.log();
63
+ console.log(colors_1.chalk.gray('Currently implementing in xai-faf-rust.'));
64
+ console.log(colors_1.chalk.gray('For now, use the original .faf file as source of truth.'));
65
+ console.log();
66
+ console.log(colors_1.chalk.gray('Track progress: https://github.com/Wolfe-Jam/xai-faf-rust'));
67
+ console.log();
68
+ }
69
+ else {
70
+ console.log(colors_1.chalk.red('❌ Decompilation failed!'));
71
+ console.log(colors_1.chalk.red(` Error: ${result.error}`));
72
+ console.log();
73
+ process.exit(1);
74
+ }
75
+ }
76
+ }
77
+ //# sourceMappingURL=decompile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decompile.js","sourceRoot":"","sources":["../../src/commands/decompile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * 🏎️ FAFb Compiler Wrapper
3
+ * Wraps xai-faf-rust compiler for .faf → .fafb compilation
4
+ */
5
+ export interface CompileOptions {
6
+ input?: string;
7
+ output?: string;
8
+ verbose?: boolean;
9
+ watch?: boolean;
10
+ }
11
+ export interface CompileResult {
12
+ success: boolean;
13
+ input: string;
14
+ output: string;
15
+ size: number;
16
+ compressionRatio: number;
17
+ time: number;
18
+ error?: string;
19
+ }
20
+ export interface BenchmarkResult {
21
+ fafParseTime: number;
22
+ fafbParseTime: number;
23
+ speedup: number;
24
+ fafSize: number;
25
+ fafbSize: number;
26
+ compressionRatio: number;
27
+ }
28
+ /**
29
+ * Check if xai-faf-rust compiler is available
30
+ */
31
+ export declare function checkCompilerAvailable(): Promise<{
32
+ available: boolean;
33
+ path?: string;
34
+ error?: string;
35
+ }>;
36
+ /**
37
+ * Compile .faf to .fafb
38
+ */
39
+ export declare function compileFAF(options?: CompileOptions): Promise<CompileResult>;
40
+ /**
41
+ * Decompile .fafb to .faf (for debugging)
42
+ */
43
+ export declare function decompileFAFb(input: string, output?: string): Promise<CompileResult>;
44
+ /**
45
+ * Benchmark .faf vs .fafb parsing speed
46
+ */
47
+ export declare function benchmarkParsing(fafPath?: string, fafbPath?: string): Promise<BenchmarkResult>;
48
+ /**
49
+ * Watch .faf file and auto-recompile on changes
50
+ */
51
+ export declare function watchAndCompile(input: string, output?: string): Promise<void>;
52
+ /**
53
+ * Auto-compile after .faf generation
54
+ * Used by init, auto, go, sync commands
55
+ */
56
+ export declare function autoCompile(fafPath: string, quiet?: boolean): Promise<boolean>;
57
+ /**
58
+ * Detect if file is .faf or .fafb
59
+ */
60
+ export declare function detectFormat(filePath: string): Promise<'faf' | 'fafb' | 'unknown'>;
61
+ //# sourceMappingURL=fafb-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fafb-compiler.d.ts","sourceRoot":"","sources":["../../src/utils/fafb-compiler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB7G;AAaD;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAqDrF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAiD1F;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAyBpG;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BnF;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAwB3F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC,CAuBxF"}
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ /**
3
+ * 🏎️ FAFb Compiler Wrapper
4
+ * Wraps xai-faf-rust compiler for .faf → .fafb compilation
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.checkCompilerAvailable = checkCompilerAvailable;
11
+ exports.compileFAF = compileFAF;
12
+ exports.decompileFAFb = decompileFAFb;
13
+ exports.benchmarkParsing = benchmarkParsing;
14
+ exports.watchAndCompile = watchAndCompile;
15
+ exports.autoCompile = autoCompile;
16
+ exports.detectFormat = detectFormat;
17
+ const child_process_1 = require("child_process");
18
+ const fs_1 = require("fs");
19
+ const path_1 = __importDefault(require("path"));
20
+ const colors_1 = require("../fix-once/colors");
21
+ /**
22
+ * Check if xai-faf-rust compiler is available
23
+ */
24
+ async function checkCompilerAvailable() {
25
+ // Try multiple locations
26
+ const possiblePaths = [
27
+ '/usr/local/bin/xai-faf',
28
+ path_1.default.join(process.env.HOME || '~', '.cargo/bin/xai-faf'),
29
+ path_1.default.join(process.env.HOME || '~', 'FAF/xai-faf-rust/target/release/xai-faf'),
30
+ 'xai-faf', // In PATH
31
+ ];
32
+ for (const compilerPath of possiblePaths) {
33
+ try {
34
+ const expandedPath = compilerPath.replace('~', process.env.HOME || '~');
35
+ (0, child_process_1.execSync)(`"${expandedPath}" --version`, { stdio: 'pipe' });
36
+ return { available: true, path: expandedPath };
37
+ }
38
+ catch {
39
+ // Try next path
40
+ }
41
+ }
42
+ return {
43
+ available: false,
44
+ error: 'xai-faf-rust compiler not found. Install from: https://github.com/Wolfe-Jam/xai-faf-rust'
45
+ };
46
+ }
47
+ /**
48
+ * Get compiler path or throw error
49
+ */
50
+ async function getCompilerPath() {
51
+ const check = await checkCompilerAvailable();
52
+ if (!check.available) {
53
+ throw new Error(check.error);
54
+ }
55
+ return check.path;
56
+ }
57
+ /**
58
+ * Compile .faf to .fafb
59
+ */
60
+ async function compileFAF(options = {}) {
61
+ const startTime = Date.now();
62
+ // Default input/output
63
+ const input = options.input || 'project.faf';
64
+ const output = options.output || input.replace(/\.faf$/, '.fafb');
65
+ try {
66
+ // Check if input exists
67
+ await fs_1.promises.access(input);
68
+ // Get input size
69
+ const inputStats = await fs_1.promises.stat(input);
70
+ const inputSize = inputStats.size;
71
+ // Get compiler
72
+ const compilerPath = await getCompilerPath();
73
+ // Run compilation
74
+ if (options.verbose) {
75
+ console.log(colors_1.chalk.gray(` Compiling: ${input} → ${output}`));
76
+ }
77
+ (0, child_process_1.execSync)(`"${compilerPath}" compile --input "${input}" --output "${output}"`, {
78
+ stdio: options.verbose ? 'inherit' : 'pipe'
79
+ });
80
+ // Get output size
81
+ const outputStats = await fs_1.promises.stat(output);
82
+ const outputSize = outputStats.size;
83
+ const compressionRatio = ((inputSize - outputSize) / inputSize) * 100;
84
+ const time = Date.now() - startTime;
85
+ return {
86
+ success: true,
87
+ input,
88
+ output,
89
+ size: outputSize,
90
+ compressionRatio,
91
+ time
92
+ };
93
+ }
94
+ catch (error) {
95
+ return {
96
+ success: false,
97
+ input,
98
+ output,
99
+ size: 0,
100
+ compressionRatio: 0,
101
+ time: Date.now() - startTime,
102
+ error: error.message
103
+ };
104
+ }
105
+ }
106
+ /**
107
+ * Decompile .fafb to .faf (for debugging)
108
+ */
109
+ async function decompileFAFb(input, output) {
110
+ const startTime = Date.now();
111
+ const outputPath = output || input.replace(/\.fafb$/, '.faf');
112
+ try {
113
+ // Check if input exists
114
+ await fs_1.promises.access(input);
115
+ const compilerPath = await getCompilerPath();
116
+ // Run decompilation (will add this command to xai-faf-rust)
117
+ (0, child_process_1.execSync)(`"${compilerPath}" decompile --input "${input}" --output "${outputPath}"`, {
118
+ stdio: 'pipe'
119
+ });
120
+ const outputStats = await fs_1.promises.stat(outputPath);
121
+ return {
122
+ success: true,
123
+ input,
124
+ output: outputPath,
125
+ size: outputStats.size,
126
+ compressionRatio: 0,
127
+ time: Date.now() - startTime
128
+ };
129
+ }
130
+ catch (error) {
131
+ // If decompile command doesn't exist yet, read binary manually
132
+ if (error.message.includes('decompile')) {
133
+ return {
134
+ success: false,
135
+ input,
136
+ output: outputPath,
137
+ size: 0,
138
+ compressionRatio: 0,
139
+ time: Date.now() - startTime,
140
+ error: 'Decompile command not yet implemented in xai-faf-rust. Coming soon!'
141
+ };
142
+ }
143
+ return {
144
+ success: false,
145
+ input,
146
+ output: outputPath,
147
+ size: 0,
148
+ compressionRatio: 0,
149
+ time: Date.now() - startTime,
150
+ error: error.message
151
+ };
152
+ }
153
+ }
154
+ /**
155
+ * Benchmark .faf vs .fafb parsing speed
156
+ */
157
+ async function benchmarkParsing(fafPath, fafbPath) {
158
+ const faf = fafPath || 'project.faf';
159
+ const fafb = fafbPath || 'project.fafb';
160
+ try {
161
+ const compilerPath = await getCompilerPath();
162
+ const output = (0, child_process_1.execSync)(`"${compilerPath}" bench --faf "${faf}" --fafb "${fafb}"`, {
163
+ encoding: 'utf-8'
164
+ });
165
+ // Parse output (xai-faf bench returns JSON)
166
+ const result = JSON.parse(output);
167
+ return {
168
+ fafParseTime: result.faf_parse_time_ms,
169
+ fafbParseTime: result.fafb_parse_time_ms,
170
+ speedup: result.speedup,
171
+ fafSize: result.faf_size,
172
+ fafbSize: result.fafb_size,
173
+ compressionRatio: result.compression_ratio
174
+ };
175
+ }
176
+ catch (error) {
177
+ throw new Error(`Benchmark failed: ${error.message}`);
178
+ }
179
+ }
180
+ /**
181
+ * Watch .faf file and auto-recompile on changes
182
+ */
183
+ async function watchAndCompile(input, output) {
184
+ const outputPath = output || input.replace(/\.faf$/, '.fafb');
185
+ console.log(colors_1.chalk.cyan(`👁️ Watching: ${input}`));
186
+ console.log(colors_1.chalk.gray(` Will compile to: ${outputPath}`));
187
+ console.log(colors_1.chalk.gray(` Press Ctrl+C to stop\n`));
188
+ // Initial compile
189
+ const initialResult = await compileFAF({ input, output: outputPath, verbose: true });
190
+ if (initialResult.success) {
191
+ console.log(colors_1.chalk.green(`✅ Initial compilation successful (${initialResult.time}ms)\n`));
192
+ }
193
+ // Watch for changes
194
+ const watcher = await fs_1.promises.watch(input);
195
+ for await (const event of watcher) {
196
+ if (event.eventType === 'change') {
197
+ console.log(colors_1.chalk.yellow(`🔄 Change detected, recompiling...`));
198
+ const result = await compileFAF({ input, output: outputPath });
199
+ if (result.success) {
200
+ console.log(colors_1.chalk.green(`✅ Recompiled successfully (${result.time}ms, ${result.compressionRatio.toFixed(1)}% smaller)\n`));
201
+ }
202
+ else {
203
+ console.log(colors_1.chalk.red(`❌ Compilation failed: ${result.error}\n`));
204
+ }
205
+ }
206
+ }
207
+ }
208
+ /**
209
+ * Auto-compile after .faf generation
210
+ * Used by init, auto, go, sync commands
211
+ */
212
+ async function autoCompile(fafPath, quiet = false) {
213
+ const fafbPath = fafPath.replace(/\.faf$/, '.fafb');
214
+ if (!quiet) {
215
+ console.log(colors_1.chalk.gray(` Compiling to binary format...`));
216
+ }
217
+ const result = await compileFAF({
218
+ input: fafPath,
219
+ output: fafbPath,
220
+ verbose: false
221
+ });
222
+ if (result.success) {
223
+ if (!quiet) {
224
+ console.log(colors_1.chalk.green(` ☑️ Created ${fafbPath} (${result.size} bytes, ${result.compressionRatio.toFixed(1)}% smaller)`));
225
+ }
226
+ return true;
227
+ }
228
+ else {
229
+ if (!quiet) {
230
+ console.log(colors_1.chalk.yellow(` ⚠️ Binary compilation skipped (compiler not found)`));
231
+ }
232
+ return false;
233
+ }
234
+ }
235
+ /**
236
+ * Detect if file is .faf or .fafb
237
+ */
238
+ async function detectFormat(filePath) {
239
+ try {
240
+ const buffer = await fs_1.promises.readFile(filePath);
241
+ // Check for FAFb magic bytes: "FAFB"
242
+ if (buffer.length >= 4 &&
243
+ buffer[0] === 0x46 && // F
244
+ buffer[1] === 0x41 && // A
245
+ buffer[2] === 0x46 && // F
246
+ buffer[3] === 0x42) { // B
247
+ return 'fafb';
248
+ }
249
+ // Check if it's YAML (starts with valid YAML)
250
+ const text = buffer.toString('utf-8', 0, Math.min(100, buffer.length));
251
+ if (text.includes('faf_version:') || text.includes('project:')) {
252
+ return 'faf';
253
+ }
254
+ return 'unknown';
255
+ }
256
+ catch {
257
+ return 'unknown';
258
+ }
259
+ }
260
+ //# sourceMappingURL=fafb-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fafb-compiler.js","sourceRoot":"","sources":["../../src/utils/fafb-compiler.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAoCH,wDAuBC;AAgBD,gCAqDC;AAKD,sCAiDC;AAKD,4CAyBC;AAKD,0CA4BC;AAMD,kCAwBC;AAKD,oCAuBC;AA7SD,iDAAgD;AAChD,2BAAoC;AACpC,gDAAwB;AACxB,+CAA2C;AA4B3C;;GAEG;AACI,KAAK,UAAU,sBAAsB;IAC1C,yBAAyB;IACzB,MAAM,aAAa,GAAG;QACpB,wBAAwB;QACxB,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,oBAAoB,CAAC;QACxD,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,yCAAyC,CAAC;QAC7E,SAAS,EAAE,UAAU;KACtB,CAAC;IAEF,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;YACxE,IAAA,wBAAQ,EAAC,IAAI,YAAY,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,0FAA0F;KAClG,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe;IAC5B,MAAM,KAAK,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAC7C,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC,IAAK,CAAC;AACrB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,UAA0B,EAAE;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,uBAAuB;IACvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAElE,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,aAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvB,iBAAiB;QACjB,MAAM,UAAU,GAAG,MAAM,aAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC;QAElC,eAAe;QACf,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;QAE7C,kBAAkB;QAClB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,IAAA,wBAAQ,EAAC,IAAI,YAAY,sBAAsB,KAAK,eAAe,MAAM,GAAG,EAAE;YAC5E,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;SAC5C,CAAC,CAAC;QAEH,kBAAkB;QAClB,MAAM,WAAW,GAAG,MAAM,aAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC;QAEpC,MAAM,gBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEpC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK;YACL,MAAM;YACN,IAAI,EAAE,UAAU;YAChB,gBAAgB;YAChB,IAAI;SACL,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK;YACL,MAAM;YACN,IAAI,EAAE,CAAC;YACP,gBAAgB,EAAE,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAC5B,KAAK,EAAE,KAAK,CAAC,OAAO;SACrB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,MAAe;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE9D,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,aAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvB,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;QAE7C,4DAA4D;QAC5D,IAAA,wBAAQ,EAAC,IAAI,YAAY,wBAAwB,KAAK,eAAe,UAAU,GAAG,EAAE;YAClF,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,aAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE9C,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK;YACL,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,gBAAgB,EAAE,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SAC7B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,+DAA+D;QAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACxC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK;gBACL,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,CAAC;gBACP,gBAAgB,EAAE,CAAC;gBACnB,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBAC5B,KAAK,EAAE,qEAAqE;aAC7E,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK;YACL,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,CAAC;YACP,gBAAgB,EAAE,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAC5B,KAAK,EAAE,KAAK,CAAC,OAAO;SACrB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,OAAgB,EAAE,QAAiB;IACxE,MAAM,GAAG,GAAG,OAAO,IAAI,aAAa,CAAC;IACrC,MAAM,IAAI,GAAG,QAAQ,IAAI,cAAc,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;QAE7C,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,IAAI,YAAY,kBAAkB,GAAG,aAAa,IAAI,GAAG,EAAE;YACjF,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAElC,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,iBAAiB;YACtC,aAAa,EAAE,MAAM,CAAC,kBAAkB;YACxC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,QAAQ;YACxB,QAAQ,EAAE,MAAM,CAAC,SAAS;YAC1B,gBAAgB,EAAE,MAAM,CAAC,iBAAiB;SAC3C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,KAAa,EAAE,MAAe;IAClE,MAAM,UAAU,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAErD,kBAAkB;IAClB,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACrF,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,CAAC,qCAAqC,aAAa,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,oBAAoB;IACpB,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YAE/D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,CAAC,8BAA8B,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;YAC7H,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,QAAiB,KAAK;IACvE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEpD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;QAC9B,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,CAAC,iBAAiB,QAAQ,KAAK,MAAM,CAAC,IAAI,WAAW,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAC/H,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE3C,qCAAqC;QACrC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;YAClB,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI;YAC1B,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI;YAC1B,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI;YAC1B,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI;YAC5B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,8CAA8C;QAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 🏎️ FAFb Ecosystem Detector
3
+ * Detects FAFb binary format projects and Radio Protocol implementations
4
+ */
5
+ export interface FAFbProjectInfo {
6
+ isFAFbProject: boolean;
7
+ projectType: string;
8
+ subtype?: string;
9
+ ecosystem: string;
10
+ confidence: number;
11
+ features: string[];
12
+ language?: string;
13
+ }
14
+ /**
15
+ * Detect if project is part of FAFb ecosystem
16
+ */
17
+ export declare function detectFAFbProject(projectRoot: string): Promise<FAFbProjectInfo>;
18
+ /**
19
+ * Get FAFb-specific project metadata for .faf generation
20
+ */
21
+ export declare function getFAFbMetadata(projectRoot: string): Promise<Record<string, any>>;
22
+ /**
23
+ * Check if project should use FAFb-aware scoring
24
+ */
25
+ export declare function shouldUseFAFbScoring(projectType: string): boolean;
26
+ //# sourceMappingURL=fafb-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fafb-detector.d.ts","sourceRoot":"","sources":["../../src/utils/fafb-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA8HrF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CA8CvF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAOjE"}
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ /**
3
+ * 🏎️ FAFb Ecosystem Detector
4
+ * Detects FAFb binary format projects and Radio Protocol implementations
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.detectFAFbProject = detectFAFbProject;
11
+ exports.getFAFbMetadata = getFAFbMetadata;
12
+ exports.shouldUseFAFbScoring = shouldUseFAFbScoring;
13
+ const fs_1 = require("fs");
14
+ const path_1 = __importDefault(require("path"));
15
+ const file_utils_1 = require("./file-utils");
16
+ /**
17
+ * Detect if project is part of FAFb ecosystem
18
+ */
19
+ async function detectFAFbProject(projectRoot) {
20
+ const result = {
21
+ isFAFbProject: false,
22
+ projectType: 'unknown',
23
+ ecosystem: 'unknown',
24
+ confidence: 0,
25
+ features: []
26
+ };
27
+ try {
28
+ // Check for FAFb compiler projects (xai-faf-rust, xai-faf-zig)
29
+ const binaryFormatMd = await (0, file_utils_1.fileExists)(path_1.default.join(projectRoot, 'BINARY-FORMAT.md'));
30
+ const cargoToml = await (0, file_utils_1.fileExists)(path_1.default.join(projectRoot, 'Cargo.toml'));
31
+ const buildZig = await (0, file_utils_1.fileExists)(path_1.default.join(projectRoot, 'build.zig'));
32
+ if (binaryFormatMd) {
33
+ result.isFAFbProject = true;
34
+ result.ecosystem = 'fafb-compiler';
35
+ result.confidence = 95;
36
+ result.features.push('binary-format-spec');
37
+ // Read BINARY-FORMAT.md to determine project type
38
+ const content = await fs_1.promises.readFile(path_1.default.join(projectRoot, 'BINARY-FORMAT.md'), 'utf-8');
39
+ if (content.includes('FAFb') || content.includes('FAFB') || content.includes('.fafb')) {
40
+ result.confidence = 100;
41
+ result.features.push('fafb-binary-support');
42
+ }
43
+ if (cargoToml) {
44
+ const cargoContent = await fs_1.promises.readFile(path_1.default.join(projectRoot, 'Cargo.toml'), 'utf-8');
45
+ if (cargoContent.includes('xai-faf') || cargoContent.includes('faf-rust')) {
46
+ result.projectType = 'fafb_compiler';
47
+ result.language = 'Rust';
48
+ result.features.push('rust-compiler');
49
+ }
50
+ }
51
+ if (buildZig) {
52
+ result.projectType = 'fafb_compiler';
53
+ result.language = 'Zig';
54
+ result.features.push('zig-compiler');
55
+ }
56
+ }
57
+ // Check for Radio Protocol projects (faf-radio-bun, faf-radio-rust, faf-radio-zig)
58
+ const packageJson = path_1.default.join(projectRoot, 'package.json');
59
+ if (await (0, file_utils_1.fileExists)(packageJson)) {
60
+ const pkg = JSON.parse(await fs_1.promises.readFile(packageJson, 'utf-8'));
61
+ if (pkg.name?.includes('radio') || pkg.description?.includes('Radio Protocol')) {
62
+ result.isFAFbProject = true;
63
+ result.projectType = 'fafb_radio_client';
64
+ result.ecosystem = 'fafb-broadcasting';
65
+ result.confidence = 100;
66
+ result.features.push('radio-protocol', 'websocket-client');
67
+ if (pkg.name?.includes('bun')) {
68
+ result.subtype = 'bun_websocket_client';
69
+ result.language = 'TypeScript/Bun';
70
+ }
71
+ }
72
+ }
73
+ if (cargoToml && !binaryFormatMd) {
74
+ const cargoContent = await fs_1.promises.readFile(path_1.default.join(projectRoot, 'Cargo.toml'), 'utf-8');
75
+ if (cargoContent.includes('faf-radio') || cargoContent.includes('Radio Protocol')) {
76
+ result.isFAFbProject = true;
77
+ result.projectType = 'fafb_radio_client';
78
+ result.subtype = 'rust_websocket_client';
79
+ result.ecosystem = 'fafb-broadcasting';
80
+ result.language = 'Rust';
81
+ result.confidence = 100;
82
+ result.features.push('radio-protocol', 'websocket-client', 'tokio');
83
+ }
84
+ }
85
+ if (buildZig && !binaryFormatMd) {
86
+ const zigContent = await fs_1.promises.readFile(path_1.default.join(projectRoot, 'build.zig'), 'utf-8');
87
+ if (zigContent.includes('radio') || zigContent.includes('faf_radio')) {
88
+ result.isFAFbProject = true;
89
+ result.projectType = 'fafb_radio_client';
90
+ result.subtype = 'zig_wasm_client';
91
+ result.ecosystem = 'fafb-broadcasting';
92
+ result.language = 'Zig';
93
+ result.confidence = 100;
94
+ result.features.push('radio-protocol', 'wasm', 'ghost-binary');
95
+ }
96
+ }
97
+ // Check for WASM SDK projects (faf-wasm-sdk)
98
+ if (cargoToml) {
99
+ const cargoContent = await fs_1.promises.readFile(path_1.default.join(projectRoot, 'Cargo.toml'), 'utf-8');
100
+ if (cargoContent.includes('wasm') && cargoContent.includes('faf')) {
101
+ result.isFAFbProject = true;
102
+ result.projectType = 'fafb_wasm_sdk';
103
+ result.subtype = 'rust_wasm';
104
+ result.ecosystem = 'fafb-runtime';
105
+ result.language = 'Rust→WASM';
106
+ result.confidence = 100;
107
+ result.features.push('wasm-target', 'browser-runtime', 'edge-runtime');
108
+ }
109
+ }
110
+ // Check for .fafb files in project (any project using binary format)
111
+ const files = await fs_1.promises.readdir(projectRoot);
112
+ const hasFafbFiles = files.some(f => f.endsWith('.fafb'));
113
+ if (hasFafbFiles) {
114
+ if (!result.isFAFbProject) {
115
+ result.isFAFbProject = true;
116
+ result.projectType = 'fafb_consumer';
117
+ result.ecosystem = 'fafb-consumer';
118
+ result.confidence = 80;
119
+ }
120
+ result.features.push('fafb-files-present');
121
+ }
122
+ }
123
+ catch (error) {
124
+ // Silently handle errors
125
+ }
126
+ return result;
127
+ }
128
+ /**
129
+ * Get FAFb-specific project metadata for .faf generation
130
+ */
131
+ async function getFAFbMetadata(projectRoot) {
132
+ const detection = await detectFAFbProject(projectRoot);
133
+ if (!detection.isFAFbProject) {
134
+ return {};
135
+ }
136
+ const metadata = {
137
+ fafb_support: true,
138
+ ecosystem: detection.ecosystem,
139
+ project_type: detection.projectType,
140
+ };
141
+ if (detection.subtype) {
142
+ metadata.subtype = detection.subtype;
143
+ }
144
+ if (detection.language) {
145
+ metadata.language = detection.language;
146
+ }
147
+ if (detection.features.length > 0) {
148
+ metadata.features = detection.features;
149
+ }
150
+ // Add specific metadata based on project type
151
+ if (detection.projectType === 'fafb_compiler') {
152
+ metadata.compiler_type = 'fafb';
153
+ metadata.output_format = '.fafb binary';
154
+ metadata.purpose = 'Compiles .faf (YAML) to .fafb (binary) for O(1) lookup';
155
+ }
156
+ if (detection.projectType === 'fafb_radio_client') {
157
+ metadata.protocol = 'Radio Protocol v1.0';
158
+ metadata.transport = 'WebSocket';
159
+ metadata.broadcasts = 'binary_and_yaml';
160
+ metadata.purpose = '99% cost reduction via broadcast-once context distribution';
161
+ }
162
+ if (detection.projectType === 'fafb_wasm_sdk') {
163
+ metadata.target = 'wasm32-unknown-unknown';
164
+ metadata.runtime = 'Browser/Edge/Cloudflare Workers';
165
+ metadata.purpose = 'FAFb runtime for web and edge environments';
166
+ }
167
+ return metadata;
168
+ }
169
+ /**
170
+ * Check if project should use FAFb-aware scoring
171
+ */
172
+ function shouldUseFAFbScoring(projectType) {
173
+ return [
174
+ 'fafb_compiler',
175
+ 'fafb_radio_client',
176
+ 'fafb_wasm_sdk',
177
+ 'fafb_consumer'
178
+ ].includes(projectType);
179
+ }
180
+ //# sourceMappingURL=fafb-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fafb-detector.js","sourceRoot":"","sources":["../../src/utils/fafb-detector.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "faf-cli",
3
- "version": "4.3.2",
3
+ "version": "4.3.3",
4
4
  "description": "The Persistent AI Context Standard • Foundation Layer for AI • IANA-Registered • Anthropic-Approved • project.faf = AI's foundation",
5
5
  "icon": "https://faf.one/orange-smiley.svg",
6
6
  "logo": "https://faf.one/orange-smiley.svg",
package/project.faf CHANGED
@@ -67,7 +67,7 @@ preferences:
67
67
  documentation: as_needed
68
68
  state:
69
69
  phase: development
70
- version: 4.3.1
70
+ version: 4.3.3
71
71
  focus: production_deployment
72
72
  status: green_flag
73
73
  next_milestone: npm_publication