faf-cli 4.3.1 → 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.
- package/dist/commands/compile.d.ts +19 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +114 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/decompile.d.ts +13 -0
- package/dist/commands/decompile.d.ts.map +1 -0
- package/dist/commands/decompile.js +77 -0
- package/dist/commands/decompile.js.map +1 -0
- package/dist/utils/fafb-compiler.d.ts +61 -0
- package/dist/utils/fafb-compiler.d.ts.map +1 -0
- package/dist/utils/fafb-compiler.js +260 -0
- package/dist/utils/fafb-compiler.js.map +1 -0
- package/dist/utils/fafb-detector.d.ts +26 -0
- package/dist/utils/fafb-detector.d.ts.map +1 -0
- package/dist/utils/fafb-detector.js +180 -0
- package/dist/utils/fafb-detector.js.map +1 -0
- package/package.json +2 -1
- package/project.faf +1 -1
|
@@ -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":"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"}
|
|
@@ -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.
|
|
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",
|
|
@@ -127,6 +127,7 @@
|
|
|
127
127
|
"commander": "^14.0.1",
|
|
128
128
|
"inquirer": "^12.9.4",
|
|
129
129
|
"open": "^10.2.0",
|
|
130
|
+
"prompts": "^2.4.2",
|
|
130
131
|
"yaml": "^2.4.1"
|
|
131
132
|
},
|
|
132
133
|
"devDependencies": {
|