faf-cli 4.3.2 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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":";AAAA;;;GAGG;;;;;AAmBH,8CA8HC;AAKD,0CA8CC;AAKD,oDAOC;AA9MD,2BAAoC;AACpC,gDAAwB;AACxB,6CAA0C;AAY1C;;GAEG;AACI,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,MAAM,MAAM,GAAoB;QAC9B,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,IAAI,CAAC;QACH,+DAA+D;QAC/D,MAAM,cAAc,GAAG,MAAM,IAAA,uBAAU,EAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACpF,MAAM,SAAS,GAAG,MAAM,IAAA,uBAAU,EAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAU,EAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAEvE,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;YAC5B,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;YACnC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;YACvB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAE3C,kDAAkD;YAClD,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC,CAAC;YAEvF,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtF,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;gBACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC9C,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,YAAY,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;gBACtF,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC1E,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC;oBACrC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;oBACzB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC;gBACrC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,mFAAmF;QACnF,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,MAAM,IAAA,uBAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,aAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAEhE,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC/E,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC5B,MAAM,CAAC,WAAW,GAAG,mBAAmB,CAAC;gBACzC,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC;gBACvC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;gBACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;gBAE3D,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,MAAM,CAAC,OAAO,GAAG,sBAAsB,CAAC;oBACxC,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;YAEtF,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAClF,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC5B,MAAM,CAAC,WAAW,GAAG,mBAAmB,CAAC;gBACzC,MAAM,CAAC,OAAO,GAAG,uBAAuB,CAAC;gBACzC,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC;gBACvC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;gBACzB,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;gBACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,IAAI,CAAC,cAAc,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAEnF,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrE,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC5B,MAAM,CAAC,WAAW,GAAG,mBAAmB,CAAC;gBACzC,MAAM,CAAC,OAAO,GAAG,iBAAiB,CAAC;gBACnC,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC;gBACvC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACxB,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;gBACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,YAAY,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;YAEtF,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClE,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC5B,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC;gBACrC,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC;gBAC7B,MAAM,CAAC,SAAS,GAAG,cAAc,CAAC;gBAClC,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC;gBAC9B,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;gBACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB,EAAE,cAAc,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,qEAAqE;QACrE,MAAM,KAAK,GAAG,MAAM,aAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAE1D,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC1B,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC5B,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC;gBACrC,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;gBACnC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;YACzB,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC7C,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yBAAyB;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAEvD,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAwB;QACpC,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,YAAY,EAAE,SAAS,CAAC,WAAW;KACpC,CAAC;IAEF,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IACvC,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvB,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IACzC,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IACzC,CAAC;IAED,8CAA8C;IAC9C,IAAI,SAAS,CAAC,WAAW,KAAK,eAAe,EAAE,CAAC;QAC9C,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC;QAChC,QAAQ,CAAC,aAAa,GAAG,cAAc,CAAC;QACxC,QAAQ,CAAC,OAAO,GAAG,wDAAwD,CAAC;IAC9E,CAAC;IAED,IAAI,SAAS,CAAC,WAAW,KAAK,mBAAmB,EAAE,CAAC;QAClD,QAAQ,CAAC,QAAQ,GAAG,qBAAqB,CAAC;QAC1C,QAAQ,CAAC,SAAS,GAAG,WAAW,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,iBAAiB,CAAC;QACxC,QAAQ,CAAC,OAAO,GAAG,4DAA4D,CAAC;IAClF,CAAC;IAED,IAAI,SAAS,CAAC,WAAW,KAAK,eAAe,EAAE,CAAC;QAC9C,QAAQ,CAAC,MAAM,GAAG,wBAAwB,CAAC;QAC3C,QAAQ,CAAC,OAAO,GAAG,iCAAiC,CAAC;QACrD,QAAQ,CAAC,OAAO,GAAG,4CAA4C,CAAC;IAClE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,WAAmB;IACtD,OAAO;QACL,eAAe;QACf,mBAAmB;QACnB,eAAe;QACf,eAAe;KAChB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC1B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "faf-cli",
3
- "version": "4.3.2",
3
+ "version": "4.4.0",
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",
@@ -123,9 +123,9 @@
123
123
  "url": "https://github.com/Wolfe-Jam/faf-cli/issues"
124
124
  },
125
125
  "dependencies": {
126
- "@anthropic-ai/sdk": "^0.71.2",
126
+ "@anthropic-ai/sdk": "^0.74.0",
127
127
  "commander": "^14.0.1",
128
- "inquirer": "^12.9.4",
128
+ "inquirer": "8.2.5",
129
129
  "open": "^10.2.0",
130
130
  "prompts": "^2.4.2",
131
131
  "yaml": "^2.4.1"
@@ -134,7 +134,7 @@
134
134
  "@types/inquirer": "^9.0.9",
135
135
  "@types/jest": "^29.5.14",
136
136
  "@types/js-yaml": "^4.0.9",
137
- "@types/node": "^20.11.17",
137
+ "@types/node": "^25.2.3",
138
138
  "@types/prompts": "^2.4.9",
139
139
  "@typescript-eslint/eslint-plugin": "^8.41.0",
140
140
  "@typescript-eslint/parser": "^8.41.0",
package/project.faf CHANGED
@@ -1,5 +1,5 @@
1
1
  faf_version: 2.5.0
2
- generated: 2026-02-10T22:17:05.650Z
2
+ generated: 2026-02-15T03:46:49.524Z
3
3
  ai_scoring_system: 2025-09-20
4
4
  ai_score: 83%
5
5
  ai_confidence: HIGH
@@ -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.4.0
71
71
  focus: production_deployment
72
72
  status: green_flag
73
73
  next_milestone: npm_publication
@@ -132,6 +132,6 @@ gemini:
132
132
  notes: Native Gemini CLI integration via FAF
133
133
  faf_dna:
134
134
  birth_dna: 86
135
- birth_certificate: FAF-2026-CLIX-F4TL
136
- birth_date: 2026-02-10T22:17:05.802Z
135
+ birth_certificate: FAF-2026-CLIX-FLZ9
136
+ birth_date: 2026-02-15T03:46:49.685Z
137
137
  current_score: 86