faf-mcp 1.0.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.
- package/CHANGELOG.md +34 -0
- package/CLAUDE.md +73 -0
- package/LICENSE +22 -0
- package/README.md +165 -0
- package/assets/Project-faf-pckg-json-README.png +0 -0
- package/assets/icons/faf-icon-128.png +0 -0
- package/assets/icons/faf-icon-256.png +0 -0
- package/assets/icons/faf-icon-48.png +0 -0
- package/assets/icons/faf-icon-512.png +0 -0
- package/assets/icons/orange-smiley.svg +6 -0
- package/dist/src/compiler/index.d.ts +7 -0
- package/dist/src/compiler/index.js +24 -0
- package/dist/src/compiler/index.js.map +1 -0
- package/dist/src/compiler/scorer.d.ts +53 -0
- package/dist/src/compiler/scorer.js +189 -0
- package/dist/src/compiler/scorer.js.map +1 -0
- package/dist/src/compiler/slot-validator.d.ts +32 -0
- package/dist/src/compiler/slot-validator.js +293 -0
- package/dist/src/compiler/slot-validator.js.map +1 -0
- package/dist/src/compiler/type-detector.d.ts +62 -0
- package/dist/src/compiler/type-detector.js +388 -0
- package/dist/src/compiler/type-detector.js.map +1 -0
- package/dist/src/config/visibility.d.ts +41 -0
- package/dist/src/config/visibility.js +158 -0
- package/dist/src/config/visibility.js.map +1 -0
- package/dist/src/faf-core/commands/audit.d.ts +21 -0
- package/dist/src/faf-core/commands/audit.js +83 -0
- package/dist/src/faf-core/commands/audit.js.map +1 -0
- package/dist/src/faf-core/commands/auto.d.ts +25 -0
- package/dist/src/faf-core/commands/auto.js +74 -0
- package/dist/src/faf-core/commands/auto.js.map +1 -0
- package/dist/src/faf-core/commands/bi-sync.d.ts +26 -0
- package/dist/src/faf-core/commands/bi-sync.js +157 -0
- package/dist/src/faf-core/commands/bi-sync.js.map +1 -0
- package/dist/src/faf-core/commands/doctor.d.ts +17 -0
- package/dist/src/faf-core/commands/doctor.js +198 -0
- package/dist/src/faf-core/commands/doctor.js.map +1 -0
- package/dist/src/faf-core/commands/enhance.d.ts +46 -0
- package/dist/src/faf-core/commands/enhance.js +360 -0
- package/dist/src/faf-core/commands/enhance.js.map +1 -0
- package/dist/src/faf-core/commands/formats.d.ts +22 -0
- package/dist/src/faf-core/commands/formats.js +117 -0
- package/dist/src/faf-core/commands/formats.js.map +1 -0
- package/dist/src/faf-core/commands/init.d.ts +26 -0
- package/dist/src/faf-core/commands/init.js +114 -0
- package/dist/src/faf-core/commands/init.js.map +1 -0
- package/dist/src/faf-core/commands/innit.d.ts +7 -0
- package/dist/src/faf-core/commands/innit.js +13 -0
- package/dist/src/faf-core/commands/innit.js.map +1 -0
- package/dist/src/faf-core/commands/migrate.d.ts +15 -0
- package/dist/src/faf-core/commands/migrate.js +86 -0
- package/dist/src/faf-core/commands/migrate.js.map +1 -0
- package/dist/src/faf-core/commands/quick.d.ts +16 -0
- package/dist/src/faf-core/commands/quick.js +184 -0
- package/dist/src/faf-core/commands/quick.js.map +1 -0
- package/dist/src/faf-core/commands/score.d.ts +47 -0
- package/dist/src/faf-core/commands/score.js +49 -0
- package/dist/src/faf-core/commands/score.js.map +1 -0
- package/dist/src/faf-core/commands/sync.d.ts +16 -0
- package/dist/src/faf-core/commands/sync.js +210 -0
- package/dist/src/faf-core/commands/sync.js.map +1 -0
- package/dist/src/faf-core/commands/update.d.ts +12 -0
- package/dist/src/faf-core/commands/update.js +46 -0
- package/dist/src/faf-core/commands/update.js.map +1 -0
- package/dist/src/faf-core/commands/validate.d.ts +21 -0
- package/dist/src/faf-core/commands/validate.js +81 -0
- package/dist/src/faf-core/commands/validate.js.map +1 -0
- package/dist/src/faf-core/compiler/faf-compiler.d.ts +138 -0
- package/dist/src/faf-core/compiler/faf-compiler.js +794 -0
- package/dist/src/faf-core/compiler/faf-compiler.js.map +1 -0
- package/dist/src/faf-core/engines/dependency-tsa.d.ts +88 -0
- package/dist/src/faf-core/engines/dependency-tsa.js +361 -0
- package/dist/src/faf-core/engines/dependency-tsa.js.map +1 -0
- package/dist/src/faf-core/engines/fab-formats-processor.d.ts +166 -0
- package/dist/src/faf-core/engines/fab-formats-processor.js +1274 -0
- package/dist/src/faf-core/engines/fab-formats-processor.js.map +1 -0
- package/dist/src/faf-core/engines/faf-dna.d.ts +159 -0
- package/dist/src/faf-core/engines/faf-dna.js +554 -0
- package/dist/src/faf-core/engines/faf-dna.js.map +1 -0
- package/dist/src/faf-core/engines/relentless-context-extractor.d.ts +100 -0
- package/dist/src/faf-core/engines/relentless-context-extractor.js +625 -0
- package/dist/src/faf-core/engines/relentless-context-extractor.js.map +1 -0
- package/dist/src/faf-core/fix-once/colors.d.ts +104 -0
- package/dist/src/faf-core/fix-once/colors.js +236 -0
- package/dist/src/faf-core/fix-once/colors.js.map +1 -0
- package/dist/src/faf-core/fix-once/types.d.ts +257 -0
- package/dist/src/faf-core/fix-once/types.js +26 -0
- package/dist/src/faf-core/fix-once/types.js.map +1 -0
- package/dist/src/faf-core/fix-once/yaml.d.ts +57 -0
- package/dist/src/faf-core/fix-once/yaml.js +172 -0
- package/dist/src/faf-core/fix-once/yaml.js.map +1 -0
- package/dist/src/faf-core/generators/faf-generator-championship.d.ts +16 -0
- package/dist/src/faf-core/generators/faf-generator-championship.js +462 -0
- package/dist/src/faf-core/generators/faf-generator-championship.js.map +1 -0
- package/dist/src/faf-core/utils/balance-visualizer.d.ts +37 -0
- package/dist/src/faf-core/utils/balance-visualizer.js +197 -0
- package/dist/src/faf-core/utils/balance-visualizer.js.map +1 -0
- package/dist/src/faf-core/utils/championship-style.d.ts +109 -0
- package/dist/src/faf-core/utils/championship-style.js +219 -0
- package/dist/src/faf-core/utils/championship-style.js.map +1 -0
- package/dist/src/faf-core/utils/chrome-extension-detector.d.ts +73 -0
- package/dist/src/faf-core/utils/chrome-extension-detector.js +268 -0
- package/dist/src/faf-core/utils/chrome-extension-detector.js.map +1 -0
- package/dist/src/faf-core/utils/fafignore-parser.d.ts +20 -0
- package/dist/src/faf-core/utils/fafignore-parser.js +178 -0
- package/dist/src/faf-core/utils/fafignore-parser.js.map +1 -0
- package/dist/src/faf-core/utils/file-utils.d.ts +112 -0
- package/dist/src/faf-core/utils/file-utils.js +846 -0
- package/dist/src/faf-core/utils/file-utils.js.map +1 -0
- package/dist/src/faf-core/utils/native-file-finder.d.ts +115 -0
- package/dist/src/faf-core/utils/native-file-finder.js +211 -0
- package/dist/src/faf-core/utils/native-file-finder.js.map +1 -0
- package/dist/src/faf-core/utils/platform-detector.d.ts +30 -0
- package/dist/src/faf-core/utils/platform-detector.js +218 -0
- package/dist/src/faf-core/utils/platform-detector.js.map +1 -0
- package/dist/src/faf-core/utils/technical-credit.d.ts +35 -0
- package/dist/src/faf-core/utils/technical-credit.js +286 -0
- package/dist/src/faf-core/utils/technical-credit.js.map +1 -0
- package/dist/src/faf-core/utils/yaml-generator.d.ts +41 -0
- package/dist/src/faf-core/utils/yaml-generator.js +360 -0
- package/dist/src/faf-core/utils/yaml-generator.js.map +1 -0
- package/dist/src/handlers/behavioral-instruction.d.ts +16 -0
- package/dist/src/handlers/behavioral-instruction.js +43 -0
- package/dist/src/handlers/behavioral-instruction.js.map +1 -0
- package/dist/src/handlers/championship-tools.d.ts +113 -0
- package/dist/src/handlers/championship-tools.js +2602 -0
- package/dist/src/handlers/championship-tools.js.map +1 -0
- package/dist/src/handlers/engine-adapter.d.ts +28 -0
- package/dist/src/handlers/engine-adapter.js +603 -0
- package/dist/src/handlers/engine-adapter.js.map +1 -0
- package/dist/src/handlers/fileHandler.d.ts +36 -0
- package/dist/src/handlers/fileHandler.js +246 -0
- package/dist/src/handlers/fileHandler.js.map +1 -0
- package/dist/src/handlers/resources.d.ts +18 -0
- package/dist/src/handlers/resources.js +78 -0
- package/dist/src/handlers/resources.js.map +1 -0
- package/dist/src/handlers/tool-registry.d.ts +23 -0
- package/dist/src/handlers/tool-registry.js +68 -0
- package/dist/src/handlers/tool-registry.js.map +1 -0
- package/dist/src/handlers/tool-types.d.ts +167 -0
- package/dist/src/handlers/tool-types.js +7 -0
- package/dist/src/handlers/tool-types.js.map +1 -0
- package/dist/src/handlers/tools.d.ts +25 -0
- package/dist/src/handlers/tools.js +1168 -0
- package/dist/src/handlers/tools.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +17 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/server.d.ts +28 -0
- package/dist/src/server.js +179 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/test-all-functions.d.ts +15 -0
- package/dist/src/test-all-functions.js +163 -0
- package/dist/src/test-all-functions.js.map +1 -0
- package/dist/src/types/mcp-tools.d.ts +53 -0
- package/dist/src/types/mcp-tools.js +77 -0
- package/dist/src/types/mcp-tools.js.map +1 -0
- package/dist/src/types/project-types.d.ts +22 -0
- package/dist/src/types/project-types.js +85 -0
- package/dist/src/types/project-types.js.map +1 -0
- package/dist/src/types/slots.d.ts +39 -0
- package/dist/src/types/slots.js +162 -0
- package/dist/src/types/slots.js.map +1 -0
- package/dist/src/types/tool-visibility.d.ts +36 -0
- package/dist/src/types/tool-visibility.js +510 -0
- package/dist/src/types/tool-visibility.js.map +1 -0
- package/dist/src/utils/auto-path-detection.d.ts +26 -0
- package/dist/src/utils/auto-path-detection.js +198 -0
- package/dist/src/utils/auto-path-detection.js.map +1 -0
- package/dist/src/utils/championship-format.d.ts +30 -0
- package/dist/src/utils/championship-format.js +79 -0
- package/dist/src/utils/championship-format.js.map +1 -0
- package/dist/src/utils/cli-detector.d.ts +20 -0
- package/dist/src/utils/cli-detector.js +230 -0
- package/dist/src/utils/cli-detector.js.map +1 -0
- package/dist/src/utils/display-protocol.d.ts +57 -0
- package/dist/src/utils/display-protocol.js +131 -0
- package/dist/src/utils/display-protocol.js.map +1 -0
- package/dist/src/utils/faf-file-finder.d.ts +59 -0
- package/dist/src/utils/faf-file-finder.js +139 -0
- package/dist/src/utils/faf-file-finder.js.map +1 -0
- package/dist/src/utils/fuzzy-detector.d.ts +56 -0
- package/dist/src/utils/fuzzy-detector.js +221 -0
- package/dist/src/utils/fuzzy-detector.js.map +1 -0
- package/dist/src/utils/path-resolver.d.ts +51 -0
- package/dist/src/utils/path-resolver.js +214 -0
- package/dist/src/utils/path-resolver.js.map +1 -0
- package/dist/src/utils/type-guards.d.ts +9 -0
- package/dist/src/utils/type-guards.js +27 -0
- package/dist/src/utils/type-guards.js.map +1 -0
- package/dist/src/utils/username-detector.d.ts +27 -0
- package/dist/src/utils/username-detector.js +90 -0
- package/dist/src/utils/username-detector.js.map +1 -0
- package/dist/src/utils/visual-style.d.ts +62 -0
- package/dist/src/utils/visual-style.js +164 -0
- package/dist/src/utils/visual-style.js.map +1 -0
- package/dist/src/version.d.ts +9 -0
- package/dist/src/version.js +37 -0
- package/dist/src/version.js.map +1 -0
- package/package.json +114 -0
- package/scripts/discord-sync-curated.js +233 -0
- package/scripts/discord-sync-final.js +218 -0
- package/scripts/discord-sync-simple.js +175 -0
- package/scripts/discord-sync-working.js +187 -0
- package/scripts/discord-sync.js +181 -0
- package/scripts/postinstall.js +46 -0
- package/skill/SKILL.md +385 -0
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* FAF DNA - The Lifecycle of AI Context
|
|
4
|
+
*
|
|
5
|
+
* Revolutionary Context Authentication & Versioning System
|
|
6
|
+
* Every .faf has:
|
|
7
|
+
* - Birth Certificate (Authentication)
|
|
8
|
+
* - Birth DNA (Initial score from CLAUDE.md)
|
|
9
|
+
* - Growth Record (Version history)
|
|
10
|
+
* - Life Events (Log of all changes)
|
|
11
|
+
* - Immortality (Disaster recovery through bi-sync)
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.FafDNAManager = void 0;
|
|
48
|
+
exports.displayScoreWithBirthDNA = displayScoreWithBirthDNA;
|
|
49
|
+
const fs_1 = require("fs");
|
|
50
|
+
const path = __importStar(require("path"));
|
|
51
|
+
const crypto = __importStar(require("crypto"));
|
|
52
|
+
const colors_1 = require("../fix-once/colors");
|
|
53
|
+
// ==================== DNA MANAGER ====================
|
|
54
|
+
class FafDNAManager {
|
|
55
|
+
dnaPath;
|
|
56
|
+
projectPath;
|
|
57
|
+
dna = null;
|
|
58
|
+
constructor(projectPath) {
|
|
59
|
+
this.projectPath = projectPath;
|
|
60
|
+
this.dnaPath = path.join(projectPath, '.faf-dna');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Initialize DNA (Birth)
|
|
64
|
+
*/
|
|
65
|
+
async birth(birthDNA, fromClaudeMD = true) {
|
|
66
|
+
// Generate birth certificate
|
|
67
|
+
const birthCertificate = {
|
|
68
|
+
born: new Date(),
|
|
69
|
+
birthDNA,
|
|
70
|
+
birthDNASource: fromClaudeMD ? 'CLAUDE.md' : 'legacy',
|
|
71
|
+
projectDNA: await this.generateProjectDNA(),
|
|
72
|
+
authenticated: false,
|
|
73
|
+
certificate: this.generateCertificate()
|
|
74
|
+
};
|
|
75
|
+
// Create initial version
|
|
76
|
+
const initialVersion = {
|
|
77
|
+
version: 'v1.0.0',
|
|
78
|
+
timestamp: new Date(),
|
|
79
|
+
score: birthDNA,
|
|
80
|
+
changes: ['Initial context from CLAUDE.md'],
|
|
81
|
+
approved: false,
|
|
82
|
+
growth: 0,
|
|
83
|
+
growthRate: 0
|
|
84
|
+
};
|
|
85
|
+
// Initialize DNA structure
|
|
86
|
+
this.dna = {
|
|
87
|
+
birthCertificate,
|
|
88
|
+
versions: [initialVersion],
|
|
89
|
+
current: {
|
|
90
|
+
version: 'v1.0.0',
|
|
91
|
+
score: birthDNA,
|
|
92
|
+
approved: false,
|
|
93
|
+
lastSync: new Date()
|
|
94
|
+
},
|
|
95
|
+
recovery: {
|
|
96
|
+
claudeMD: path.join(this.projectPath, 'CLAUDE.md'),
|
|
97
|
+
lastBackup: new Date(),
|
|
98
|
+
syncStatus: 'active',
|
|
99
|
+
autoRecover: true
|
|
100
|
+
},
|
|
101
|
+
growth: {
|
|
102
|
+
totalGrowth: 0,
|
|
103
|
+
daysActive: 0,
|
|
104
|
+
averageDailyGrowth: 0,
|
|
105
|
+
bestDay: { date: new Date(), growth: 0 },
|
|
106
|
+
bestWeek: { start: new Date(), growth: 0 },
|
|
107
|
+
milestones: [
|
|
108
|
+
{
|
|
109
|
+
type: 'birth',
|
|
110
|
+
score: birthDNA,
|
|
111
|
+
date: new Date(),
|
|
112
|
+
version: 'v1.0.0',
|
|
113
|
+
label: 'Birth',
|
|
114
|
+
emoji: '🐣'
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
lastModified: new Date(),
|
|
119
|
+
format: 'faf-dna-v1'
|
|
120
|
+
};
|
|
121
|
+
await this.save();
|
|
122
|
+
return this.dna;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Authenticate the DNA (Birth Certificate)
|
|
126
|
+
*/
|
|
127
|
+
async authenticate() {
|
|
128
|
+
if (!this.dna)
|
|
129
|
+
throw new Error('DNA not initialized');
|
|
130
|
+
this.dna.birthCertificate.authenticated = true;
|
|
131
|
+
this.dna.birthCertificate.authDate = new Date();
|
|
132
|
+
await this.save();
|
|
133
|
+
return this.dna.birthCertificate.certificate;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Record growth (Auto Evolution)
|
|
137
|
+
*/
|
|
138
|
+
async recordGrowth(newScore, changes) {
|
|
139
|
+
if (!this.dna)
|
|
140
|
+
throw new Error('DNA not initialized');
|
|
141
|
+
// Calculate growth metrics
|
|
142
|
+
const growth = newScore - this.dna.birthCertificate.birthDNA;
|
|
143
|
+
const daysSinceBirth = this.getDaysSince(this.dna.birthCertificate.born);
|
|
144
|
+
const growthRate = daysSinceBirth > 0 ? growth / daysSinceBirth : growth;
|
|
145
|
+
// Generate new version number
|
|
146
|
+
const lastVersion = this.dna.versions[this.dna.versions.length - 1];
|
|
147
|
+
const newVersion = this.incrementVersion(lastVersion.version, 'patch');
|
|
148
|
+
// Create version entry
|
|
149
|
+
const versionEntry = {
|
|
150
|
+
version: newVersion,
|
|
151
|
+
timestamp: new Date(),
|
|
152
|
+
score: newScore,
|
|
153
|
+
changes,
|
|
154
|
+
approved: false,
|
|
155
|
+
growth,
|
|
156
|
+
growthRate
|
|
157
|
+
};
|
|
158
|
+
// Add to versions
|
|
159
|
+
this.dna.versions.push(versionEntry);
|
|
160
|
+
// Update current state
|
|
161
|
+
this.dna.current = {
|
|
162
|
+
version: newVersion,
|
|
163
|
+
score: newScore,
|
|
164
|
+
approved: false,
|
|
165
|
+
lastApproved: this.dna.current.lastApproved,
|
|
166
|
+
lastSync: new Date()
|
|
167
|
+
};
|
|
168
|
+
// Update milestones
|
|
169
|
+
this.updateMilestones(newScore, newVersion);
|
|
170
|
+
// Update analytics
|
|
171
|
+
this.updateAnalytics(newScore);
|
|
172
|
+
await this.save();
|
|
173
|
+
return versionEntry;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Approve current version (User satisfaction)
|
|
177
|
+
*/
|
|
178
|
+
async approve() {
|
|
179
|
+
if (!this.dna)
|
|
180
|
+
throw new Error('DNA not initialized');
|
|
181
|
+
const currentVersion = this.dna.versions.find(v => v.version === this.dna.current.version);
|
|
182
|
+
if (currentVersion) {
|
|
183
|
+
currentVersion.approved = true;
|
|
184
|
+
// Increment minor version for approval
|
|
185
|
+
const newVersion = this.incrementVersion(this.dna.current.version, 'minor');
|
|
186
|
+
// Create approval version
|
|
187
|
+
const approvalEntry = {
|
|
188
|
+
version: newVersion,
|
|
189
|
+
timestamp: new Date(),
|
|
190
|
+
score: this.dna.current.score,
|
|
191
|
+
changes: ['User approved'],
|
|
192
|
+
approved: true,
|
|
193
|
+
growth: this.dna.current.score - this.dna.birthCertificate.birthDNA,
|
|
194
|
+
growthRate: this.calculateGrowthRate()
|
|
195
|
+
};
|
|
196
|
+
this.dna.versions.push(approvalEntry);
|
|
197
|
+
this.dna.current.version = newVersion;
|
|
198
|
+
this.dna.current.approved = true;
|
|
199
|
+
this.dna.current.lastApproved = newVersion;
|
|
200
|
+
// Mark as first save if it's the first approval
|
|
201
|
+
if (!this.dna.growth.milestones.find(m => m.type === 'first_save')) {
|
|
202
|
+
this.dna.growth.milestones.push({
|
|
203
|
+
type: 'first_save',
|
|
204
|
+
score: this.dna.current.score,
|
|
205
|
+
date: new Date(),
|
|
206
|
+
version: newVersion,
|
|
207
|
+
label: 'First Save',
|
|
208
|
+
emoji: '💾'
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
await this.save();
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get journey display (for UI)
|
|
216
|
+
*/
|
|
217
|
+
getJourney(format = 'compact') {
|
|
218
|
+
if (!this.dna)
|
|
219
|
+
return format === 'compact' ? '' : [];
|
|
220
|
+
const milestones = this.dna.growth.milestones;
|
|
221
|
+
if (format === 'compact') {
|
|
222
|
+
// Build compact journey: 22% → 85% → 99% ← 92%
|
|
223
|
+
const birth = milestones.find(m => m.type === 'birth');
|
|
224
|
+
const firstSave = milestones.find(m => m.type === 'first_save');
|
|
225
|
+
const peak = milestones.find(m => m.type === 'peak');
|
|
226
|
+
const current = this.dna.current.score;
|
|
227
|
+
let journey = `${birth?.score || 0}%`;
|
|
228
|
+
if (firstSave && firstSave.score !== birth?.score) {
|
|
229
|
+
journey += ` → ${firstSave.score}%`;
|
|
230
|
+
}
|
|
231
|
+
if (peak) {
|
|
232
|
+
journey += ` → ${peak.score}%`;
|
|
233
|
+
// Add back arrow if current is less than peak
|
|
234
|
+
if (current < peak.score) {
|
|
235
|
+
journey += ` ← ${current}%`;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else if (current !== (firstSave?.score || birth?.score)) {
|
|
239
|
+
journey += ` → ${current}%`;
|
|
240
|
+
}
|
|
241
|
+
return journey;
|
|
242
|
+
}
|
|
243
|
+
return milestones;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get Birth DNA display (always show origin)
|
|
247
|
+
*/
|
|
248
|
+
getBirthDNADisplay() {
|
|
249
|
+
if (!this.dna) {
|
|
250
|
+
return { current: 0, birthDNA: 0, growth: 0, birthDate: new Date() };
|
|
251
|
+
}
|
|
252
|
+
return {
|
|
253
|
+
current: this.dna.current.score,
|
|
254
|
+
birthDNA: this.dna.birthCertificate.birthDNA,
|
|
255
|
+
growth: this.dna.current.score - this.dna.birthCertificate.birthDNA,
|
|
256
|
+
birthDate: this.dna.birthCertificate.born
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get version log (Complete history)
|
|
261
|
+
*/
|
|
262
|
+
getLog() {
|
|
263
|
+
if (!this.dna)
|
|
264
|
+
return [];
|
|
265
|
+
return this.dna.versions.map(v => {
|
|
266
|
+
const growth = v.growth || 0;
|
|
267
|
+
const emoji = v.approved ? '✅' : growth > 50 ? '🚀' : growth > 20 ? '📈' : '📊';
|
|
268
|
+
return `${v.version} - ${v.score}% ${emoji} (${this.formatDate(v.timestamp)}) ${v.changes.join(', ')}`;
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Load existing DNA
|
|
273
|
+
*/
|
|
274
|
+
async load() {
|
|
275
|
+
try {
|
|
276
|
+
const content = await fs_1.promises.readFile(this.dnaPath, 'utf-8');
|
|
277
|
+
this.dna = JSON.parse(content);
|
|
278
|
+
// Convert date strings back to Date objects
|
|
279
|
+
if (this.dna) {
|
|
280
|
+
this.dna.birthCertificate.born = new Date(this.dna.birthCertificate.born);
|
|
281
|
+
if (this.dna.birthCertificate.authDate) {
|
|
282
|
+
this.dna.birthCertificate.authDate = new Date(this.dna.birthCertificate.authDate);
|
|
283
|
+
}
|
|
284
|
+
this.dna.versions = this.dna.versions.map(v => ({
|
|
285
|
+
...v,
|
|
286
|
+
timestamp: new Date(v.timestamp)
|
|
287
|
+
}));
|
|
288
|
+
this.dna.current.lastSync = new Date(this.dna.current.lastSync);
|
|
289
|
+
this.dna.recovery.lastBackup = new Date(this.dna.recovery.lastBackup);
|
|
290
|
+
this.dna.growth.bestDay.date = new Date(this.dna.growth.bestDay.date);
|
|
291
|
+
this.dna.growth.bestWeek.start = new Date(this.dna.growth.bestWeek.start);
|
|
292
|
+
this.dna.growth.milestones = this.dna.growth.milestones.map(m => ({
|
|
293
|
+
...m,
|
|
294
|
+
date: new Date(m.date)
|
|
295
|
+
}));
|
|
296
|
+
this.dna.lastModified = new Date(this.dna.lastModified);
|
|
297
|
+
}
|
|
298
|
+
return this.dna;
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Save DNA to disk
|
|
306
|
+
*/
|
|
307
|
+
async save() {
|
|
308
|
+
if (!this.dna)
|
|
309
|
+
return;
|
|
310
|
+
this.dna.lastModified = new Date();
|
|
311
|
+
await fs_1.promises.writeFile(this.dnaPath, JSON.stringify(this.dna, null, 2), 'utf-8');
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Generate unique project DNA hash
|
|
315
|
+
*/
|
|
316
|
+
async generateProjectDNA() {
|
|
317
|
+
const projectInfo = [
|
|
318
|
+
this.projectPath,
|
|
319
|
+
Date.now().toString(),
|
|
320
|
+
Math.random().toString(36)
|
|
321
|
+
].join(':');
|
|
322
|
+
return crypto
|
|
323
|
+
.createHash('sha256')
|
|
324
|
+
.update(projectInfo)
|
|
325
|
+
.digest('hex')
|
|
326
|
+
.substring(0, 16);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Generate certificate number
|
|
330
|
+
*/
|
|
331
|
+
generateCertificate() {
|
|
332
|
+
const year = new Date().getFullYear();
|
|
333
|
+
const random = Math.random().toString(36).substring(2, 6).toUpperCase();
|
|
334
|
+
const projectName = path.basename(this.projectPath)
|
|
335
|
+
.replace(/[^A-Z0-9]/gi, '') // Remove special characters
|
|
336
|
+
.toUpperCase()
|
|
337
|
+
.substring(0, 8)
|
|
338
|
+
.padEnd(4, 'X'); // Ensure minimum length
|
|
339
|
+
return `FAF-${year}-${projectName}-${random}`;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Increment version number
|
|
343
|
+
*/
|
|
344
|
+
incrementVersion(version, type) {
|
|
345
|
+
const parts = version.replace('v', '').split('.').map(Number);
|
|
346
|
+
switch (type) {
|
|
347
|
+
case 'major':
|
|
348
|
+
return `v${parts[0] + 1}.0.0`;
|
|
349
|
+
case 'minor':
|
|
350
|
+
return `v${parts[0]}.${parts[1] + 1}.0`;
|
|
351
|
+
case 'patch':
|
|
352
|
+
return `v${parts[0]}.${parts[1]}.${parts[2] + 1}`;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Update milestones based on score
|
|
357
|
+
*/
|
|
358
|
+
updateMilestones(score, version) {
|
|
359
|
+
if (!this.dna)
|
|
360
|
+
return;
|
|
361
|
+
const milestones = this.dna.growth.milestones;
|
|
362
|
+
const birthDNA = this.dna.birthCertificate.birthDNA;
|
|
363
|
+
// Check for doubled score
|
|
364
|
+
if (score >= birthDNA * 2 && !milestones.find(m => m.type === 'doubled')) {
|
|
365
|
+
milestones.push({
|
|
366
|
+
type: 'doubled',
|
|
367
|
+
score,
|
|
368
|
+
date: new Date(),
|
|
369
|
+
version,
|
|
370
|
+
label: 'Doubled',
|
|
371
|
+
emoji: '2️⃣'
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
// Check for championship (70%)
|
|
375
|
+
if (score >= 70 && !milestones.find(m => m.type === 'championship')) {
|
|
376
|
+
milestones.push({
|
|
377
|
+
type: 'championship',
|
|
378
|
+
score,
|
|
379
|
+
date: new Date(),
|
|
380
|
+
version,
|
|
381
|
+
label: 'Championship',
|
|
382
|
+
emoji: '🏆'
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
// Check for elite (85%)
|
|
386
|
+
if (score >= 85 && !milestones.find(m => m.type === 'elite')) {
|
|
387
|
+
milestones.push({
|
|
388
|
+
type: 'elite',
|
|
389
|
+
score,
|
|
390
|
+
date: new Date(),
|
|
391
|
+
version,
|
|
392
|
+
label: 'Elite',
|
|
393
|
+
emoji: '⭐'
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
// Check for perfect (100%)
|
|
397
|
+
if (score >= 100 && !milestones.find(m => m.type === 'perfect')) {
|
|
398
|
+
milestones.push({
|
|
399
|
+
type: 'perfect',
|
|
400
|
+
score,
|
|
401
|
+
date: new Date(),
|
|
402
|
+
version,
|
|
403
|
+
label: 'Perfect',
|
|
404
|
+
emoji: '💎'
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
// Update peak if necessary
|
|
408
|
+
const peakMilestone = milestones.find(m => m.type === 'peak');
|
|
409
|
+
if (!peakMilestone || score > peakMilestone.score) {
|
|
410
|
+
// Remove old peak
|
|
411
|
+
if (peakMilestone) {
|
|
412
|
+
const index = milestones.indexOf(peakMilestone);
|
|
413
|
+
milestones.splice(index, 1);
|
|
414
|
+
}
|
|
415
|
+
// Add new peak
|
|
416
|
+
milestones.push({
|
|
417
|
+
type: 'peak',
|
|
418
|
+
score,
|
|
419
|
+
date: new Date(),
|
|
420
|
+
version,
|
|
421
|
+
label: 'Peak',
|
|
422
|
+
emoji: '🏔️'
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
// Always update current
|
|
426
|
+
const currentIndex = milestones.findIndex(m => m.type === 'current');
|
|
427
|
+
if (currentIndex >= 0) {
|
|
428
|
+
milestones.splice(currentIndex, 1);
|
|
429
|
+
}
|
|
430
|
+
milestones.push({
|
|
431
|
+
type: 'current',
|
|
432
|
+
score,
|
|
433
|
+
date: new Date(),
|
|
434
|
+
version,
|
|
435
|
+
label: 'Current',
|
|
436
|
+
emoji: '📍'
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Update growth analytics
|
|
441
|
+
*/
|
|
442
|
+
updateAnalytics(score) {
|
|
443
|
+
if (!this.dna)
|
|
444
|
+
return;
|
|
445
|
+
const growth = score - this.dna.birthCertificate.birthDNA;
|
|
446
|
+
const daysSinceBirth = this.getDaysSince(this.dna.birthCertificate.born);
|
|
447
|
+
this.dna.growth.totalGrowth = growth;
|
|
448
|
+
this.dna.growth.daysActive = daysSinceBirth;
|
|
449
|
+
this.dna.growth.averageDailyGrowth = daysSinceBirth > 0 ? growth / daysSinceBirth : growth;
|
|
450
|
+
// Check for best day
|
|
451
|
+
const todayGrowth = score - (this.dna.versions[this.dna.versions.length - 2]?.score || this.dna.birthCertificate.birthDNA);
|
|
452
|
+
if (todayGrowth > this.dna.growth.bestDay.growth) {
|
|
453
|
+
this.dna.growth.bestDay = {
|
|
454
|
+
date: new Date(),
|
|
455
|
+
growth: todayGrowth
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
// TODO: Calculate best week
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Calculate days since date
|
|
462
|
+
*/
|
|
463
|
+
getDaysSince(date) {
|
|
464
|
+
const diff = Date.now() - date.getTime();
|
|
465
|
+
return Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Calculate growth rate
|
|
469
|
+
*/
|
|
470
|
+
calculateGrowthRate() {
|
|
471
|
+
if (!this.dna)
|
|
472
|
+
return 0;
|
|
473
|
+
const growth = this.dna.current.score - this.dna.birthCertificate.birthDNA;
|
|
474
|
+
const days = this.getDaysSince(this.dna.birthCertificate.born);
|
|
475
|
+
return days > 0 ? growth / days : growth;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Format date for display
|
|
479
|
+
*/
|
|
480
|
+
formatDate(date) {
|
|
481
|
+
return date.toISOString().split('T')[0];
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
exports.FafDNAManager = FafDNAManager;
|
|
485
|
+
/**
|
|
486
|
+
* Display helper for Birth DNA in all score outputs
|
|
487
|
+
*/
|
|
488
|
+
function displayScoreWithBirthDNA(current, birthDNA, birthDate, options = {}) {
|
|
489
|
+
// Import championship medal system
|
|
490
|
+
const { getScoreMedal, getTierInfo } = require('../utils/championship-core');
|
|
491
|
+
// Get medal for current score
|
|
492
|
+
const { medal, status } = getScoreMedal(current);
|
|
493
|
+
const tierInfo = getTierInfo(current);
|
|
494
|
+
const growth = current - birthDNA;
|
|
495
|
+
// OPTIMIZED FIRST TWO LINES - Match MCP's championship scorecard format
|
|
496
|
+
// Line 1: Score with medal (STRONG WHITE BOLD - default)
|
|
497
|
+
console.log(colors_1.colors.bold(`${medal} Score: ${current}/100`));
|
|
498
|
+
// Line 2: Progress bar (STRONG WHITE - default)
|
|
499
|
+
const barWidth = 24;
|
|
500
|
+
const filled = Math.floor((current / 100) * barWidth);
|
|
501
|
+
const empty = barWidth - filled;
|
|
502
|
+
const progressBar = '█'.repeat(filled) + '░'.repeat(empty);
|
|
503
|
+
console.log(colors_1.colors.bold(`${progressBar} ${current}%`));
|
|
504
|
+
// Line 3: Status (STRONG WHITE - default)
|
|
505
|
+
console.log(colors_1.colors.bold(`Status: ${status}`));
|
|
506
|
+
// Line 4: Next milestone (STRONG WHITE - default)
|
|
507
|
+
if (tierInfo.next && tierInfo.nextTarget && tierInfo.nextMedal) {
|
|
508
|
+
const pointsToGo = tierInfo.nextTarget - current;
|
|
509
|
+
console.log('');
|
|
510
|
+
console.log(colors_1.colors.bold(`Next milestone: ${tierInfo.nextTarget}% ${tierInfo.nextMedal} ${tierInfo.next} (${pointsToGo} points to go!)`));
|
|
511
|
+
}
|
|
512
|
+
// Detailed breakdown (collapsed in Claude Code, visible in terminal)
|
|
513
|
+
console.log('');
|
|
514
|
+
console.log(colors_1.colors.bold('🏎️ FAF Championship Status'));
|
|
515
|
+
console.log('━'.repeat(40));
|
|
516
|
+
console.log(`Birth DNA: ${birthDNA}% (born ${birthDate.toISOString().split('T')[0]})`);
|
|
517
|
+
const timeMs = Date.now() - new Date(birthDate).getTime();
|
|
518
|
+
const daysOld = Math.floor(timeMs / (1000 * 60 * 60 * 24));
|
|
519
|
+
const hoursOld = Math.floor(timeMs / (1000 * 60 * 60));
|
|
520
|
+
let timeDisplay = '';
|
|
521
|
+
if (daysOld > 0) {
|
|
522
|
+
timeDisplay = `${daysOld} day${daysOld === 1 ? '' : 's'}`;
|
|
523
|
+
}
|
|
524
|
+
else if (hoursOld > 0) {
|
|
525
|
+
timeDisplay = `${hoursOld} hour${hoursOld === 1 ? '' : 's'}`;
|
|
526
|
+
}
|
|
527
|
+
else {
|
|
528
|
+
const minutesOld = Math.floor(timeMs / (1000 * 60));
|
|
529
|
+
timeDisplay = `${minutesOld} minute${minutesOld === 1 ? '' : 's'}`;
|
|
530
|
+
}
|
|
531
|
+
console.log(`Growth: +${growth}% over ${timeDisplay}`);
|
|
532
|
+
if (tierInfo.next && tierInfo.nextTarget && tierInfo.nextMedal) {
|
|
533
|
+
const pointsToGo = tierInfo.nextTarget - current;
|
|
534
|
+
console.log(colors_1.colors.bold(`Next Milestone: ${tierInfo.nextTarget}% ${tierInfo.nextMedal} ${tierInfo.next} (${pointsToGo}% to go!)`));
|
|
535
|
+
}
|
|
536
|
+
console.log('');
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Get emoji for score
|
|
540
|
+
*/
|
|
541
|
+
function getScoreEmoji(score) {
|
|
542
|
+
if (score >= 100)
|
|
543
|
+
return '💎';
|
|
544
|
+
if (score >= 90)
|
|
545
|
+
return '🏆';
|
|
546
|
+
if (score >= 85)
|
|
547
|
+
return '⭐';
|
|
548
|
+
if (score >= 70)
|
|
549
|
+
return '🎯';
|
|
550
|
+
if (score >= 50)
|
|
551
|
+
return '📈';
|
|
552
|
+
return '🌱';
|
|
553
|
+
}
|
|
554
|
+
//# sourceMappingURL=faf-dna.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faf-dna.js","sourceRoot":"","sources":["../../../../src/faf-core/engines/faf-dna.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🏎️ RelentlessContextExtractor - F1-Inspired Context Hunting System
|
|
3
|
+
* NEVER gives up on finding context. Fights for every bit of information.
|
|
4
|
+
* Three-tier confidence system: CERTAIN | PROBABLE | INFERRED
|
|
5
|
+
*
|
|
6
|
+
* This is the AERO PACKAGE - Makes the Power Unit sing!
|
|
7
|
+
*/
|
|
8
|
+
export type ConfidenceLevel = 'CERTAIN' | 'PROBABLE' | 'INFERRED' | 'DEFAULT' | 'MISSING';
|
|
9
|
+
export type Priority = 'CRITICAL' | 'IMPORTANT' | 'Key' | 'Important' | 'CRUCIAL';
|
|
10
|
+
export interface ExtractedContext {
|
|
11
|
+
value: string;
|
|
12
|
+
confidence: ConfidenceLevel;
|
|
13
|
+
source?: string;
|
|
14
|
+
needsUserInput: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface ContextTodo {
|
|
17
|
+
field: string;
|
|
18
|
+
priority: Priority;
|
|
19
|
+
currentValue: string;
|
|
20
|
+
confidence: ConfidenceLevel;
|
|
21
|
+
prompt: string;
|
|
22
|
+
examples: string[];
|
|
23
|
+
scoreboost: number;
|
|
24
|
+
}
|
|
25
|
+
export interface HumanContext {
|
|
26
|
+
who: ExtractedContext;
|
|
27
|
+
what: ExtractedContext;
|
|
28
|
+
why: ExtractedContext;
|
|
29
|
+
where: ExtractedContext;
|
|
30
|
+
when: ExtractedContext;
|
|
31
|
+
how: ExtractedContext;
|
|
32
|
+
todos: ContextTodo[];
|
|
33
|
+
}
|
|
34
|
+
export declare class RelentlessContextExtractor {
|
|
35
|
+
private techStack;
|
|
36
|
+
private fileContent;
|
|
37
|
+
private packageJson;
|
|
38
|
+
private readmeContent;
|
|
39
|
+
private projectPath;
|
|
40
|
+
/**
|
|
41
|
+
* 🏁 Main extraction entry point - RELENTLESS pursuit of context!
|
|
42
|
+
*/
|
|
43
|
+
extractFromProject(projectPath: string): Promise<HumanContext>;
|
|
44
|
+
/**
|
|
45
|
+
* Load all project files for context extraction
|
|
46
|
+
*/
|
|
47
|
+
private loadProjectFiles;
|
|
48
|
+
/**
|
|
49
|
+
* 🎯 RELENTLESS WHO EXTRACTION - Fight for user context!
|
|
50
|
+
*/
|
|
51
|
+
private extractWHO;
|
|
52
|
+
/**
|
|
53
|
+
* 🎯 RELENTLESS WHAT EXTRACTION - Core problem/purpose
|
|
54
|
+
*/
|
|
55
|
+
private extractWHAT;
|
|
56
|
+
/**
|
|
57
|
+
* 🎯 RELENTLESS WHY EXTRACTION - Mission/purpose
|
|
58
|
+
*/
|
|
59
|
+
private extractWHY;
|
|
60
|
+
/**
|
|
61
|
+
* 🎯 RELENTLESS WHERE EXTRACTION - Deployment/market
|
|
62
|
+
*/
|
|
63
|
+
private extractWHERE;
|
|
64
|
+
/**
|
|
65
|
+
* 🎯 RELENTLESS WHEN EXTRACTION - Timeline/schedule
|
|
66
|
+
*/
|
|
67
|
+
private extractWHEN;
|
|
68
|
+
/**
|
|
69
|
+
* 🎯 RELENTLESS HOW EXTRACTION - Approach/methodology
|
|
70
|
+
*/
|
|
71
|
+
private extractHOW;
|
|
72
|
+
/**
|
|
73
|
+
* Generate TODOs for missing or low-confidence context
|
|
74
|
+
*/
|
|
75
|
+
private generateContextTodos;
|
|
76
|
+
/**
|
|
77
|
+
* Helper: Infer audience from tech stack
|
|
78
|
+
*/
|
|
79
|
+
private inferAudienceFromTech;
|
|
80
|
+
/**
|
|
81
|
+
* Helper: Infer purpose from project name
|
|
82
|
+
*/
|
|
83
|
+
private inferPurposeFromName;
|
|
84
|
+
/**
|
|
85
|
+
* Helper: Infer approach from tech stack
|
|
86
|
+
*/
|
|
87
|
+
private inferApproachFromTech;
|
|
88
|
+
/**
|
|
89
|
+
* Helper: Clean extracted text
|
|
90
|
+
*/
|
|
91
|
+
private cleanExtractedText;
|
|
92
|
+
/**
|
|
93
|
+
* Helper: Create context object
|
|
94
|
+
*/
|
|
95
|
+
private createContext;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Export singleton instance
|
|
99
|
+
*/
|
|
100
|
+
export declare const relentlessExtractor: RelentlessContextExtractor;
|