faf-cli 3.0.5 → 3.0.6
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/README.md +41 -9
- package/dist/big-orange/bigo-push.d.ts +18 -0
- package/dist/big-orange/bigo-push.d.ts.map +1 -0
- package/dist/big-orange/bigo-push.js +88 -0
- package/dist/big-orange/bigo-push.js.map +1 -0
- package/dist/big-orange/compare.d.ts +11 -0
- package/dist/big-orange/compare.d.ts.map +1 -0
- package/dist/big-orange/compare.js +174 -0
- package/dist/big-orange/compare.js.map +1 -0
- package/dist/big-orange/faf-generator.d.ts +22 -0
- package/dist/big-orange/faf-generator.d.ts.map +1 -0
- package/dist/big-orange/faf-generator.js +215 -0
- package/dist/big-orange/faf-generator.js.map +1 -0
- package/dist/big-orange/index.d.ts +7 -0
- package/dist/big-orange/index.d.ts.map +1 -0
- package/dist/big-orange/index.js +96 -0
- package/dist/big-orange/index.js.map +1 -0
- package/dist/big-orange/types.d.ts +62 -0
- package/dist/big-orange/types.d.ts.map +1 -0
- package/dist/big-orange/types.js +7 -0
- package/dist/big-orange/types.js.map +1 -0
- package/dist/cli.js +0 -0
- package/package.json +4 -1
- package/dist/commands/create.d.ts +0 -13
- package/dist/commands/create.d.ts.map +0 -1
- package/dist/commands/create.js +0 -78
- package/dist/commands/create.js.map +0 -1
- package/dist/core/platform-adapters.d.ts +0 -76
- package/dist/core/platform-adapters.d.ts.map +0 -1
- package/dist/core/platform-adapters.js +0 -407
- package/dist/core/platform-adapters.js.map +0 -1
- package/dist/core/universal-intelligence-generator.d.ts +0 -156
- package/dist/core/universal-intelligence-generator.d.ts.map +0 -1
- package/dist/core/universal-intelligence-generator.js +0 -352
- package/dist/core/universal-intelligence-generator.js.map +0 -1
- package/dist/enrichment/auto-corrector.d.ts +0 -28
- package/dist/enrichment/auto-corrector.d.ts.map +0 -1
- package/dist/enrichment/auto-corrector.js +0 -106
- package/dist/enrichment/auto-corrector.js.map +0 -1
- package/dist/enrichment/n8n-analyzer.d.ts +0 -259
- package/dist/enrichment/n8n-analyzer.d.ts.map +0 -1
- package/dist/enrichment/n8n-analyzer.js +0 -346
- package/dist/enrichment/n8n-analyzer.js.map +0 -1
- package/dist/enrichment/n8n-faf-generator.d.ts +0 -68
- package/dist/enrichment/n8n-faf-generator.d.ts.map +0 -1
- package/dist/enrichment/n8n-faf-generator.js +0 -354
- package/dist/enrichment/n8n-faf-generator.js.map +0 -1
- package/dist/enrichment/question-asker.d.ts +0 -22
- package/dist/enrichment/question-asker.d.ts.map +0 -1
- package/dist/enrichment/question-asker.js +0 -113
- package/dist/enrichment/question-asker.js.map +0 -1
- package/dist/enrichment/slot-filler.d.ts +0 -73
- package/dist/enrichment/slot-filler.d.ts.map +0 -1
- package/dist/enrichment/slot-filler.js +0 -253
- package/dist/enrichment/slot-filler.js.map +0 -1
- package/dist/scoring/championship-scorer.d.ts +0 -114
- package/dist/scoring/championship-scorer.d.ts.map +0 -1
- package/dist/scoring/championship-scorer.js +0 -380
- package/dist/scoring/championship-scorer.js.map +0 -1
- package/dist/scoring/score-calculator.d.ts +0 -29
- package/dist/scoring/score-calculator.d.ts.map +0 -1
- package/dist/scoring/score-calculator.js +0 -520
- package/dist/scoring/score-calculator.js.map +0 -1
- package/dist/tests/manual-validation.d.ts +0 -8
- package/dist/tests/manual-validation.d.ts.map +0 -1
- package/dist/tests/manual-validation.js +0 -114
- package/dist/tests/manual-validation.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,22 +1,54 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# faf-cli
|
|
2
|
+
|
|
3
|
+
## TL;DR
|
|
4
|
+
|
|
5
|
+
**Problem:** AI needs persistent project context to work at its best.
|
|
6
|
+
|
|
7
|
+
**Solution:** The .faf format provides that context. This CLI creates, scores, and improves .faf files from your codebase.
|
|
8
|
+
|
|
9
|
+
**How it works:** Run `faf init` to create your .faf file. Get a score (0-100%) showing context quality. Higher scores = AI more in-tune with your project. Use `faf auto` and other commands to improve your score quickly. Align your .faf file with CLAUDE.md to maintain context persistently with bi-sync.
|
|
10
|
+
|
|
11
|
+
**Install:**
|
|
12
|
+
```bash
|
|
13
|
+
# npm (works everywhere)
|
|
14
|
+
npm install -g faf-cli
|
|
15
|
+
|
|
16
|
+
# Homebrew (macOS/Linux)
|
|
17
|
+
brew install faf-cli
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Quick start:**
|
|
21
|
+
```bash
|
|
22
|
+
cd your-project
|
|
23
|
+
faf init # Creates .faf file
|
|
24
|
+
faf score # Check AI-readiness (0-100%)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**CLI vs MCP clarity**
|
|
28
|
+
- **faf-cli** (this): Command-line tool that creates .faf files from your codebase → attach to any AI
|
|
29
|
+
- **claude-faf-mcp** ([npm](https://www.npmjs.com/package/claude-faf-mcp)): MCP server for Claude Desktop → lets Claude read .faf files natively
|
|
30
|
+
|
|
31
|
+
Most users want both: faf-cli creates .faf files, claude-faf-mcp lets Claude read them automatically.
|
|
32
|
+
|
|
33
|
+
[Website](https://faf.one) | [GitHub](https://github.com/Wolfe-Jam/faf-cli) | [Discussions](https://github.com/Wolfe-Jam/faf-cli/discussions)
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 📚 Complete Documentation
|
|
38
|
+
|
|
39
|
+
**For developers who want the full story**, here's everything about FAF's architecture, testing, and championship engineering standards.
|
|
4
40
|
|
|
5
41
|
<div align="center">
|
|
6
42
|
|
|
7
43
|
<img src="https://cdn.jsdelivr.net/npm/faf-cli@latest/assets/icons/orange-smiley.svg" alt="FAF Logo" width="64" />
|
|
8
44
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
**Project DNA ✨ for Claude Code/ any AI CLI** •
|
|
12
|
-
**Zero Faff Innit™🇬🇧**
|
|
45
|
+
**Free for all devs** 🆓 • **Project DNA ✨ for any AI** • **Zero Faff™🇬🇧**
|
|
13
46
|
|
|
14
47
|
[](https://www.npmjs.com/package/faf-cli)
|
|
15
48
|
[](https://www.npmjs.com/package/faf-cli)
|
|
16
49
|
[](https://opensource.org/licenses/MIT)
|
|
17
|
-
[](https://www.typescriptlang.org/)
|
|
18
50
|
|
|
19
|
-
**[Website](https://faf.one)** • **[GitHub](https://github.com/Wolfe-Jam/faf-cli)** • **[Community](https://github.com/Wolfe-Jam/faf-cli/discussions)**
|
|
51
|
+
**[Website](https://faf.one)** • **[GitHub](https://github.com/Wolfe-Jam/faf-cli)** • **[Community](https://github.com/Wolfe-Jam/faf-cli/discussions)**
|
|
20
52
|
|
|
21
53
|
</div>
|
|
22
54
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BIG ORANGE 🍊 - Output Handler
|
|
3
|
+
* Pushes comparison results to Big🍊 web visualization
|
|
4
|
+
*/
|
|
5
|
+
import type { ComparisonResults } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Push comparison results to Big🍊
|
|
8
|
+
* @param results - Comparison results to store
|
|
9
|
+
* @returns URL to view results
|
|
10
|
+
*/
|
|
11
|
+
export declare function pushToBigO(results: ComparisonResults): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Fetch session results (for Big🍊 web app)
|
|
14
|
+
* @param sessionId - Session ID to fetch
|
|
15
|
+
* @returns Comparison results
|
|
16
|
+
*/
|
|
17
|
+
export declare function fetchSession(sessionId: string): Promise<ComparisonResults | null>;
|
|
18
|
+
//# sourceMappingURL=bigo-push.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigo-push.d.ts","sourceRoot":"","sources":["../../src/big-orange/bigo-push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B5E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAYvF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BIG ORANGE 🍊 - Output Handler
|
|
4
|
+
* Pushes comparison results to Big🍊 web visualization
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.pushToBigO = pushToBigO;
|
|
41
|
+
exports.fetchSession = fetchSession;
|
|
42
|
+
const promises_1 = require("fs/promises");
|
|
43
|
+
const path_1 = require("path");
|
|
44
|
+
/**
|
|
45
|
+
* Push comparison results to Big🍊
|
|
46
|
+
* @param results - Comparison results to store
|
|
47
|
+
* @returns URL to view results
|
|
48
|
+
*/
|
|
49
|
+
async function pushToBigO(results) {
|
|
50
|
+
const sessionId = results.sessionId;
|
|
51
|
+
// For now: Write to file system
|
|
52
|
+
// Later: POST to API endpoint
|
|
53
|
+
const dataDir = process.env.BIGO_DATA_DIR || '/tmp/big-orange-sessions';
|
|
54
|
+
const sessionFile = (0, path_1.join)(dataDir, `${sessionId}.json`);
|
|
55
|
+
try {
|
|
56
|
+
// Ensure directory exists
|
|
57
|
+
await (0, promises_1.mkdir)(dataDir, { recursive: true });
|
|
58
|
+
// Write session data
|
|
59
|
+
await (0, promises_1.writeFile)(sessionFile, JSON.stringify(results, null, 2), 'utf-8');
|
|
60
|
+
console.log(`✓ Session saved: ${sessionFile}`);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error('Failed to save session:', error);
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
// Return URL to Big🍊
|
|
67
|
+
const baseUrl = process.env.BIGO_URL || 'https://fafdev.tools';
|
|
68
|
+
return `${baseUrl}/BigO?session=${sessionId}`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Fetch session results (for Big🍊 web app)
|
|
72
|
+
* @param sessionId - Session ID to fetch
|
|
73
|
+
* @returns Comparison results
|
|
74
|
+
*/
|
|
75
|
+
async function fetchSession(sessionId) {
|
|
76
|
+
const dataDir = process.env.BIGO_DATA_DIR || '/tmp/big-orange-sessions';
|
|
77
|
+
const sessionFile = (0, path_1.join)(dataDir, `${sessionId}.json`);
|
|
78
|
+
try {
|
|
79
|
+
const { readFile } = await Promise.resolve().then(() => __importStar(require('fs/promises')));
|
|
80
|
+
const data = await readFile(sessionFile, 'utf-8');
|
|
81
|
+
return JSON.parse(data);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error(`Session not found: ${sessionId}`);
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=bigo-push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigo-push.js","sourceRoot":"","sources":["../../src/big-orange/bigo-push.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWH,gCA8BC;AAOD,oCAYC;AA1DD,0CAA+C;AAC/C,+BAA4B;AAG5B;;;;GAIG;AACI,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAEpC,gCAAgC;IAChC,8BAA8B;IAE9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,0BAA0B,CAAC;IACxE,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,0BAA0B;QAC1B,MAAM,IAAA,gBAAK,EAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,qBAAqB;QACrB,MAAM,IAAA,oBAAS,EACb,WAAW,EACX,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAChC,OAAO,CACR,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;IAEjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,sBAAsB;IACtB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,sBAAsB,CAAC;IAC/D,OAAO,GAAG,OAAO,iBAAiB,SAAS,EAAE,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,SAAiB;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,0BAA0B,CAAC;IACxE,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,aAAa,GAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BIG ORANGE 🍊 - Core Comparison Logic
|
|
3
|
+
* Compares AI responses with different .faf context levels
|
|
4
|
+
*/
|
|
5
|
+
import type { ComparisonRequest, ComparisonResults } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Compare AI responses at two different .faf scores
|
|
8
|
+
* Calls Claude API twice in parallel with different context levels
|
|
9
|
+
*/
|
|
10
|
+
export declare function compareContexts(request: ComparisonRequest): Promise<ComparisonResults>;
|
|
11
|
+
//# sourceMappingURL=compare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../src/big-orange/compare.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAiB,MAAM,SAAS,CAAC;AAOnF;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,iBAAiB,CAAC,CAmD5B"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BIG ORANGE 🍊 - Core Comparison Logic
|
|
4
|
+
* Compares AI responses with different .faf context levels
|
|
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.compareContexts = compareContexts;
|
|
11
|
+
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
12
|
+
const crypto_1 = require("crypto");
|
|
13
|
+
const faf_generator_1 = require("./faf-generator");
|
|
14
|
+
const faf_compiler_1 = require("../compiler/faf-compiler");
|
|
15
|
+
const fs_1 = require("fs");
|
|
16
|
+
const os_1 = require("os");
|
|
17
|
+
const path_1 = require("path");
|
|
18
|
+
/**
|
|
19
|
+
* Compare AI responses at two different .faf scores
|
|
20
|
+
* Calls Claude API twice in parallel with different context levels
|
|
21
|
+
*/
|
|
22
|
+
async function compareContexts(request) {
|
|
23
|
+
console.log(`\n🍊 Comparing ${request.leftScore}% vs ${request.rightScore}%`);
|
|
24
|
+
console.log(`Prompt: "${request.prompt}"\n`);
|
|
25
|
+
// 1. Generate .faf instances at specified scores
|
|
26
|
+
const [leftFaf, rightFaf] = await Promise.all([
|
|
27
|
+
(0, faf_generator_1.generateFafInstance)(request.leftScore, request.projectPath),
|
|
28
|
+
(0, faf_generator_1.generateFafInstance)(request.rightScore, request.projectPath)
|
|
29
|
+
]);
|
|
30
|
+
console.log(`Generated .faf instances:`);
|
|
31
|
+
console.log(` Left: ${request.leftScore}% (${leftFaf.content.length} chars)`);
|
|
32
|
+
console.log(` Right: ${request.rightScore}% (${rightFaf.content.length} chars)\n`);
|
|
33
|
+
// 2. Call Claude API twice (parallel for speed)
|
|
34
|
+
const anthropic = new sdk_1.default({
|
|
35
|
+
apiKey: process.env.ANTHROPIC_API_KEY
|
|
36
|
+
});
|
|
37
|
+
console.log('Calling Claude API...');
|
|
38
|
+
const [leftResponse, rightResponse] = await Promise.all([
|
|
39
|
+
callClaudeWithContext(anthropic, request.prompt, leftFaf.content, request.leftScore),
|
|
40
|
+
callClaudeWithContext(anthropic, request.prompt, rightFaf.content, request.rightScore)
|
|
41
|
+
]);
|
|
42
|
+
console.log('✓ Both responses received\n');
|
|
43
|
+
// 3. Calculate delta metrics
|
|
44
|
+
const delta = calculateDelta(leftResponse, rightResponse);
|
|
45
|
+
const results = {
|
|
46
|
+
sessionId: (0, crypto_1.randomUUID)(),
|
|
47
|
+
timestamp: new Date(),
|
|
48
|
+
leftWindow: leftResponse,
|
|
49
|
+
rightWindow: rightResponse,
|
|
50
|
+
delta
|
|
51
|
+
};
|
|
52
|
+
return results;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Call Claude API with specific .faf context
|
|
56
|
+
* Uses FafCompiler for real scoring, no fake metrics
|
|
57
|
+
*/
|
|
58
|
+
async function callClaudeWithContext(client, prompt, fafContent, score) {
|
|
59
|
+
const startTime = Date.now();
|
|
60
|
+
// Build system prompt based on .faf score
|
|
61
|
+
const systemPrompt = score > 0
|
|
62
|
+
? `You are a developer with this project context:\n\n${fafContent}\n\nUse this context to inform your response.`
|
|
63
|
+
: 'You are a developer with no project context. Ask clarifying questions as needed.';
|
|
64
|
+
try {
|
|
65
|
+
// Call Claude API
|
|
66
|
+
const response = await client.messages.create({
|
|
67
|
+
model: 'claude-sonnet-4-20250514',
|
|
68
|
+
max_tokens: 4000,
|
|
69
|
+
system: systemPrompt,
|
|
70
|
+
messages: [{
|
|
71
|
+
role: 'user',
|
|
72
|
+
content: prompt
|
|
73
|
+
}]
|
|
74
|
+
});
|
|
75
|
+
const timeToComplete = (Date.now() - startTime) / 1000;
|
|
76
|
+
const aiResponse = response.content[0].type === 'text'
|
|
77
|
+
? response.content[0].text
|
|
78
|
+
: '';
|
|
79
|
+
// Get real FAF score using FafCompiler
|
|
80
|
+
const { emoji, metadata } = await scoreFafContent(fafContent, score);
|
|
81
|
+
return {
|
|
82
|
+
fafScore: score,
|
|
83
|
+
aiResponse,
|
|
84
|
+
timeToComplete,
|
|
85
|
+
emoji,
|
|
86
|
+
fafMetadata: metadata
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error(`Error calling Claude (score ${score}%):`, error);
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Score .faf content using FafCompiler
|
|
96
|
+
* Returns championship emoji and metadata
|
|
97
|
+
*/
|
|
98
|
+
async function scoreFafContent(fafContent, expectedScore) {
|
|
99
|
+
// Write .faf to temp file
|
|
100
|
+
const tempDir = (0, path_1.join)((0, os_1.tmpdir)(), 'big-orange-scoring');
|
|
101
|
+
(0, fs_1.mkdirSync)(tempDir, { recursive: true });
|
|
102
|
+
const tempFafPath = (0, path_1.join)(tempDir, `temp-${Date.now()}.faf`);
|
|
103
|
+
try {
|
|
104
|
+
(0, fs_1.writeFileSync)(tempFafPath, fafContent);
|
|
105
|
+
// Use FafCompiler to score
|
|
106
|
+
const compiler = new faf_compiler_1.FafCompiler();
|
|
107
|
+
const result = await compiler.compile(tempFafPath);
|
|
108
|
+
// Get championship emoji based on score
|
|
109
|
+
const emoji = getChampionshipEmoji(result.score);
|
|
110
|
+
return {
|
|
111
|
+
emoji,
|
|
112
|
+
metadata: {
|
|
113
|
+
filled: result.filled,
|
|
114
|
+
total: result.total,
|
|
115
|
+
checksum: result.checksum
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
console.error('Error scoring .faf:', error);
|
|
121
|
+
// Fallback to expected score
|
|
122
|
+
return {
|
|
123
|
+
emoji: getChampionshipEmoji(expectedScore)
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get championship emoji based on score
|
|
129
|
+
* Uses FAF CLI's standard scoring tiers
|
|
130
|
+
*/
|
|
131
|
+
function getChampionshipEmoji(score) {
|
|
132
|
+
if (score >= 85)
|
|
133
|
+
return '🏆'; // Trophy (championship)
|
|
134
|
+
if (score >= 70)
|
|
135
|
+
return '🥇'; // Gold medal
|
|
136
|
+
if (score >= 55)
|
|
137
|
+
return '🥈'; // Silver medal
|
|
138
|
+
if (score >= 40)
|
|
139
|
+
return '🥉'; // Bronze medal
|
|
140
|
+
if (score >= 35)
|
|
141
|
+
return '🟢'; // Green (good)
|
|
142
|
+
if (score >= 20)
|
|
143
|
+
return '🟡'; // Yellow (warning)
|
|
144
|
+
if (score >= 10)
|
|
145
|
+
return '🔴'; // Red (poor)
|
|
146
|
+
return '🤍'; // White (empty)
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Calculate delta metrics between two responses
|
|
150
|
+
* Simple comparison: time saved and score improvement
|
|
151
|
+
*/
|
|
152
|
+
function calculateDelta(left, right) {
|
|
153
|
+
const timeSaved = left.timeToComplete - right.timeToComplete;
|
|
154
|
+
const scoreImprovement = right.fafScore - left.fafScore;
|
|
155
|
+
// Generate verdict
|
|
156
|
+
let verdict = '';
|
|
157
|
+
if (scoreImprovement > 0) {
|
|
158
|
+
if (timeSaved > 0) {
|
|
159
|
+
verdict = `.faf-${right.fafScore}% completed ${timeSaved.toFixed(1)}s faster with ${scoreImprovement}% better context`;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
verdict = `.faf-${right.fafScore}% had ${scoreImprovement}% better context`;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
verdict = 'Context levels comparison complete';
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
timeSaved,
|
|
170
|
+
scoreImprovement,
|
|
171
|
+
verdict
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/big-orange/compare.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BIG ORANGE 🍊 - REAL .faf Instance Generator
|
|
3
|
+
* Generates .faf files at different completeness levels using ACTUAL .faf format
|
|
4
|
+
* Based on faf-cli.faf structure
|
|
5
|
+
*/
|
|
6
|
+
import type { FafInstance } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Generate a .faf instance at a specific completeness score
|
|
9
|
+
* Uses real .faf YAML format with slot-based scoring
|
|
10
|
+
*
|
|
11
|
+
* @param score - Completeness level (0-100)
|
|
12
|
+
* @param projectPath - Optional project path for analysis
|
|
13
|
+
* @returns FafInstance with generated YAML content
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateFafInstance(score: number, projectPath?: string): Promise<FafInstance>;
|
|
16
|
+
/**
|
|
17
|
+
* Calculate a project's current .faf birth score
|
|
18
|
+
* @param projectPath - Path to project
|
|
19
|
+
* @returns Birth score (0-100)
|
|
20
|
+
*/
|
|
21
|
+
export declare function calculateBirthScore(projectPath: string): Promise<number>;
|
|
22
|
+
//# sourceMappingURL=faf-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faf-generator.d.ts","sourceRoot":"","sources":["../../src/big-orange/faf-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,CAuMtB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU9E"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BIG ORANGE 🍊 - REAL .faf Instance Generator
|
|
4
|
+
* Generates .faf files at different completeness levels using ACTUAL .faf format
|
|
5
|
+
* Based on faf-cli.faf structure
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.generateFafInstance = generateFafInstance;
|
|
9
|
+
exports.calculateBirthScore = calculateBirthScore;
|
|
10
|
+
/**
|
|
11
|
+
* Generate a .faf instance at a specific completeness score
|
|
12
|
+
* Uses real .faf YAML format with slot-based scoring
|
|
13
|
+
*
|
|
14
|
+
* @param score - Completeness level (0-100)
|
|
15
|
+
* @param projectPath - Optional project path for analysis
|
|
16
|
+
* @returns FafInstance with generated YAML content
|
|
17
|
+
*/
|
|
18
|
+
async function generateFafInstance(score, projectPath) {
|
|
19
|
+
if (score === 0) {
|
|
20
|
+
return {
|
|
21
|
+
score: 0,
|
|
22
|
+
content: '',
|
|
23
|
+
metadata: {}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// Calculate slots based on score
|
|
27
|
+
// Real .faf has 21 total slots
|
|
28
|
+
const totalSlots = 21;
|
|
29
|
+
const filledSlots = Math.round((score / 100) * totalSlots);
|
|
30
|
+
const slotPercentage = Math.round((filledSlots / totalSlots) * 100);
|
|
31
|
+
// Build .faf content as YAML
|
|
32
|
+
const sections = [];
|
|
33
|
+
// ALWAYS include (even at low scores)
|
|
34
|
+
sections.push(`faf_version: "2.5.0"`);
|
|
35
|
+
sections.push(`ai_scoring_system: "2025-09-20"`);
|
|
36
|
+
sections.push(`ai_score: "${score}%"`);
|
|
37
|
+
// Score 10%+: Add confidence and value
|
|
38
|
+
if (score >= 10) {
|
|
39
|
+
const confidence = score >= 70 ? 'HIGH' : score >= 40 ? 'MEDIUM' : 'LOW';
|
|
40
|
+
sections.push(`ai_confidence: ${confidence}`);
|
|
41
|
+
sections.push(`ai_value: "${score >= 80 ? '30_seconds_replaces_20_minutes' : 'reduced_questions'}"`);
|
|
42
|
+
}
|
|
43
|
+
// Score 20%+: Add ai_tldr
|
|
44
|
+
if (score >= 20) {
|
|
45
|
+
sections.push(`ai_tldr:`);
|
|
46
|
+
sections.push(` project: "Demo Project - Color Picker Component"`);
|
|
47
|
+
sections.push(` stack: ${score >= 50 ? 'React/TypeScript/Vite/Vercel' : 'React'}`);
|
|
48
|
+
sections.push(` quality_bar: ${score >= 80 ? 'ZERO_ERRORS_F1_STANDARDS' : 'STANDARD'}`);
|
|
49
|
+
sections.push(` current_focus: Component development`);
|
|
50
|
+
sections.push(` your_role: Build features with ${score >= 60 ? 'perfect' : 'available'} context`);
|
|
51
|
+
}
|
|
52
|
+
// Score 30%+: Add instant_context
|
|
53
|
+
if (score >= 30) {
|
|
54
|
+
sections.push(`instant_context:`);
|
|
55
|
+
sections.push(` what_building: "Color picker component"`);
|
|
56
|
+
sections.push(` tech_stack: React${score >= 50 ? '/TypeScript/Vite' : ''}`);
|
|
57
|
+
sections.push(` main_language: ${score >= 40 ? 'TypeScript' : 'JavaScript'}`);
|
|
58
|
+
if (score >= 50) {
|
|
59
|
+
sections.push(` deployment: Vercel`);
|
|
60
|
+
sections.push(` key_files:`);
|
|
61
|
+
sections.push(` - package.json`);
|
|
62
|
+
sections.push(` - tsconfig.json`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Score 40%+: Add context_quality
|
|
66
|
+
if (score >= 40) {
|
|
67
|
+
sections.push(`context_quality:`);
|
|
68
|
+
sections.push(` slots_filled: "${filledSlots}/${totalSlots} (${slotPercentage}%)"`);
|
|
69
|
+
sections.push(` ai_confidence: ${score >= 70 ? 'HIGH' : 'MEDIUM'}`);
|
|
70
|
+
sections.push(` handoff_ready: ${score >= 70 ? 'true' : 'false'}`);
|
|
71
|
+
if (score < 90) {
|
|
72
|
+
sections.push(` missing_context:`);
|
|
73
|
+
sections.push(` - ${score < 60 ? 'Project structure' : 'Performance metrics'}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Score 50%+: Add project section
|
|
77
|
+
if (score >= 50) {
|
|
78
|
+
sections.push(`project:`);
|
|
79
|
+
sections.push(` name: Demo Color Picker`);
|
|
80
|
+
sections.push(` goal: "Build reusable color picker component"`);
|
|
81
|
+
sections.push(` main_language: TypeScript`);
|
|
82
|
+
sections.push(` generated: "${new Date().toISOString()}"`);
|
|
83
|
+
if (score >= 80) {
|
|
84
|
+
sections.push(` mission: "🚀 Make Your AI Happy! 🧡 Trust-Driven 🤖"`);
|
|
85
|
+
sections.push(` revolution: "30 seconds replaces 20 minutes of questions"`);
|
|
86
|
+
sections.push(` brand: "F1-Inspired Software Engineering - Championship AI Context"`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Score 60%+: Add ai_instructions
|
|
90
|
+
if (score >= 60) {
|
|
91
|
+
sections.push(`ai_instructions:`);
|
|
92
|
+
sections.push(` priority_order:`);
|
|
93
|
+
sections.push(` - "1. Read THIS .faf file first"`);
|
|
94
|
+
if (score >= 70) {
|
|
95
|
+
sections.push(` - "2. Check CLAUDE.md for session context"`);
|
|
96
|
+
sections.push(` - "3. Review package.json for dependencies"`);
|
|
97
|
+
}
|
|
98
|
+
sections.push(` working_style:`);
|
|
99
|
+
sections.push(` code_first: true`);
|
|
100
|
+
sections.push(` explanations: minimal`);
|
|
101
|
+
sections.push(` quality_bar: ${score >= 80 ? 'zero_errors' : 'standard'}`);
|
|
102
|
+
sections.push(` testing: ${score >= 70 ? 'required' : 'recommended'}`);
|
|
103
|
+
if (score >= 80) {
|
|
104
|
+
sections.push(` warnings:`);
|
|
105
|
+
sections.push(` - All TypeScript must pass strict mode`);
|
|
106
|
+
sections.push(` - Test coverage required for new features`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Score 70%+: Add stack
|
|
110
|
+
if (score >= 70) {
|
|
111
|
+
sections.push(`stack:`);
|
|
112
|
+
sections.push(` frontend: React`);
|
|
113
|
+
sections.push(` css_framework: Tailwind CSS`);
|
|
114
|
+
sections.push(` ui_library: Headless UI`);
|
|
115
|
+
sections.push(` state_management: React Hooks`);
|
|
116
|
+
sections.push(` backend: None`);
|
|
117
|
+
sections.push(` runtime: "Node.js >=18.0.0"`);
|
|
118
|
+
sections.push(` database: None`);
|
|
119
|
+
sections.push(` build: Vite`);
|
|
120
|
+
sections.push(` package_manager: npm`);
|
|
121
|
+
sections.push(` api_type: Component Library`);
|
|
122
|
+
sections.push(` hosting: Vercel`);
|
|
123
|
+
if (score >= 85) {
|
|
124
|
+
sections.push(` cicd: GitHub Actions`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Score 80%+: Add preferences
|
|
128
|
+
if (score >= 80) {
|
|
129
|
+
sections.push(`preferences:`);
|
|
130
|
+
sections.push(` quality_bar: zero_errors`);
|
|
131
|
+
sections.push(` commit_style: conventional_emoji`);
|
|
132
|
+
sections.push(` response_style: concise_code_first`);
|
|
133
|
+
sections.push(` explanation_level: minimal`);
|
|
134
|
+
sections.push(` communication: direct`);
|
|
135
|
+
sections.push(` testing: required`);
|
|
136
|
+
sections.push(` documentation: as_needed`);
|
|
137
|
+
}
|
|
138
|
+
// Score 85%+: Add state
|
|
139
|
+
if (score >= 85) {
|
|
140
|
+
sections.push(`state:`);
|
|
141
|
+
sections.push(` phase: development`);
|
|
142
|
+
sections.push(` version: "1.0.0"`);
|
|
143
|
+
sections.push(` focus: component_implementation`);
|
|
144
|
+
sections.push(` status: green_flag`);
|
|
145
|
+
sections.push(` next_milestone: production_ready`);
|
|
146
|
+
sections.push(` blockers:`);
|
|
147
|
+
}
|
|
148
|
+
// Score 90%+: Add tags
|
|
149
|
+
if (score >= 90) {
|
|
150
|
+
sections.push(`tags:`);
|
|
151
|
+
sections.push(` auto_generated:`);
|
|
152
|
+
sections.push(` - react`);
|
|
153
|
+
sections.push(` - typescript`);
|
|
154
|
+
sections.push(` - component`);
|
|
155
|
+
sections.push(` - color-picker`);
|
|
156
|
+
sections.push(` smart_defaults:`);
|
|
157
|
+
sections.push(` - .faf`);
|
|
158
|
+
sections.push(` - ai-ready`);
|
|
159
|
+
sections.push(` - "2025"`);
|
|
160
|
+
sections.push(` user_defined:`);
|
|
161
|
+
}
|
|
162
|
+
// Score 95%+: Add human_context
|
|
163
|
+
if (score >= 95) {
|
|
164
|
+
sections.push(`human_context:`);
|
|
165
|
+
sections.push(` who: Development team`);
|
|
166
|
+
sections.push(` what: "Reusable color picker component for design system"`);
|
|
167
|
+
sections.push(` why: Standardize color selection across applications`);
|
|
168
|
+
sections.push(` where: Component library`);
|
|
169
|
+
sections.push(` when: "Active development"`);
|
|
170
|
+
sections.push(` how: "TypeScript React component with accessibility"`);
|
|
171
|
+
sections.push(` context_score: ${slotPercentage}`);
|
|
172
|
+
sections.push(` total_prd_score: ${score}`);
|
|
173
|
+
sections.push(` success_rate: "95%"`);
|
|
174
|
+
}
|
|
175
|
+
// Score 99%+: Add ai_scoring_details (championship level)
|
|
176
|
+
if (score >= 99) {
|
|
177
|
+
sections.push(`ai_scoring_details:`);
|
|
178
|
+
sections.push(` system_date: "2025-09-20"`);
|
|
179
|
+
sections.push(` slot_based_percentage: ${slotPercentage}`);
|
|
180
|
+
sections.push(` ai_score: ${score}`);
|
|
181
|
+
sections.push(` total_slots: ${totalSlots}`);
|
|
182
|
+
sections.push(` filled_slots: ${filledSlots}`);
|
|
183
|
+
sections.push(` scoring_method: "Honest percentage - no fake minimums"`);
|
|
184
|
+
sections.push(` trust_embedded: "COUNT ONCE architecture - trust MY embedded scores"`);
|
|
185
|
+
}
|
|
186
|
+
const content = sections.join('\n');
|
|
187
|
+
return {
|
|
188
|
+
score,
|
|
189
|
+
content,
|
|
190
|
+
metadata: {
|
|
191
|
+
framework: 'React',
|
|
192
|
+
language: 'TypeScript',
|
|
193
|
+
styling: 'Tailwind CSS',
|
|
194
|
+
quality_bar: score >= 80 ? 'ZERO_ERRORS_F1_STANDARDS' : 'STANDARD',
|
|
195
|
+
slots_filled: filledSlots,
|
|
196
|
+
total_slots: totalSlots
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Calculate a project's current .faf birth score
|
|
202
|
+
* @param projectPath - Path to project
|
|
203
|
+
* @returns Birth score (0-100)
|
|
204
|
+
*/
|
|
205
|
+
async function calculateBirthScore(projectPath) {
|
|
206
|
+
// TODO: Implement actual .faf file analysis
|
|
207
|
+
// This would:
|
|
208
|
+
// 1. Check if .faf exists
|
|
209
|
+
// 2. Parse the YAML
|
|
210
|
+
// 3. Count filled slots
|
|
211
|
+
// 4. Calculate score based on slot completeness
|
|
212
|
+
// For now, return placeholder
|
|
213
|
+
return 42;
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=faf-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faf-generator.js","sourceRoot":"","sources":["../../src/big-orange/faf-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/big-orange/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|