faf-mcp 1.3.1 โ 2.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 +32 -0
- package/CLAUDE.md +5 -5
- package/README.md +70 -14
- package/assets/thumbnail.png +0 -0
- package/dist/src/faf-core/commands/agents.d.ts +29 -0
- package/dist/src/faf-core/commands/agents.js +140 -0
- package/dist/src/faf-core/commands/agents.js.map +1 -0
- package/dist/src/faf-core/commands/bi-sync.d.ts +9 -5
- package/dist/src/faf-core/commands/bi-sync.js +89 -85
- package/dist/src/faf-core/commands/bi-sync.js.map +1 -1
- package/dist/src/faf-core/commands/conductor.d.ts +25 -0
- package/dist/src/faf-core/commands/conductor.js +157 -0
- package/dist/src/faf-core/commands/conductor.js.map +1 -0
- package/dist/src/faf-core/commands/cursor.d.ts +29 -0
- package/dist/src/faf-core/commands/cursor.js +134 -0
- package/dist/src/faf-core/commands/cursor.js.map +1 -0
- package/dist/src/faf-core/commands/gemini.d.ts +29 -0
- package/dist/src/faf-core/commands/gemini.js +133 -0
- package/dist/src/faf-core/commands/gemini.js.map +1 -0
- package/dist/src/faf-core/commands/git-context.d.ts +23 -0
- package/dist/src/faf-core/commands/git-context.js +66 -0
- package/dist/src/faf-core/commands/git-context.js.map +1 -0
- package/dist/src/faf-core/commands/human.d.ts +27 -0
- package/dist/src/faf-core/commands/human.js +183 -0
- package/dist/src/faf-core/commands/human.js.map +1 -0
- package/dist/src/faf-core/commands/readme.d.ts +47 -0
- package/dist/src/faf-core/commands/readme.js +361 -0
- package/dist/src/faf-core/commands/readme.js.map +1 -0
- package/dist/src/faf-core/engines/fab-formats-processor.js +3 -3
- package/dist/src/faf-core/engines/fab-formats-processor.js.map +1 -1
- package/dist/src/faf-core/engines/faf-dna.d.ts +1 -1
- package/dist/src/faf-core/engines/faf-dna.js +4 -3
- package/dist/src/faf-core/engines/faf-dna.js.map +1 -1
- package/dist/src/faf-core/generators/faf-generator-championship.js +9 -8
- package/dist/src/faf-core/generators/faf-generator-championship.js.map +1 -1
- package/dist/src/faf-core/parsers/agents-parser.d.ts +59 -0
- package/dist/src/faf-core/parsers/agents-parser.js +324 -0
- package/dist/src/faf-core/parsers/agents-parser.js.map +1 -0
- package/dist/src/faf-core/parsers/conductor-parser.d.ts +85 -0
- package/dist/src/faf-core/parsers/conductor-parser.js +293 -0
- package/dist/src/faf-core/parsers/conductor-parser.js.map +1 -0
- package/dist/src/faf-core/parsers/cursorrules-parser.d.ts +57 -0
- package/dist/src/faf-core/parsers/cursorrules-parser.js +317 -0
- package/dist/src/faf-core/parsers/cursorrules-parser.js.map +1 -0
- package/dist/src/faf-core/parsers/faf-git-generator.d.ts +53 -0
- package/dist/src/faf-core/parsers/faf-git-generator.js +512 -0
- package/dist/src/faf-core/parsers/faf-git-generator.js.map +1 -0
- package/dist/src/faf-core/parsers/gemini-parser.d.ts +57 -0
- package/dist/src/faf-core/parsers/gemini-parser.js +263 -0
- package/dist/src/faf-core/parsers/gemini-parser.js.map +1 -0
- package/dist/src/faf-core/parsers/github-extractor.d.ts +61 -0
- package/dist/src/faf-core/parsers/github-extractor.js +374 -0
- package/dist/src/faf-core/parsers/github-extractor.js.map +1 -0
- package/dist/src/faf-core/parsers/index.d.ts +12 -0
- package/dist/src/{compiler โ faf-core/parsers}/index.js +10 -5
- package/dist/src/faf-core/parsers/index.js.map +1 -0
- package/dist/src/faf-core/parsers/slot-counter.d.ts +55 -0
- package/dist/src/faf-core/parsers/slot-counter.js +100 -0
- package/dist/src/faf-core/parsers/slot-counter.js.map +1 -0
- package/dist/src/faf-core/utils/balance-visualizer.js +3 -3
- package/dist/src/faf-core/utils/balance-visualizer.js.map +1 -1
- package/dist/src/handlers/championship-tools.d.ts +10 -5
- package/dist/src/handlers/championship-tools.js +259 -232
- package/dist/src/handlers/championship-tools.js.map +1 -1
- package/dist/src/handlers/engine-adapter.js +238 -5
- package/dist/src/handlers/engine-adapter.js.map +1 -1
- package/dist/src/handlers/tools.d.ts +61 -0
- package/dist/src/handlers/tools.js +2103 -102
- package/dist/src/handlers/tools.js.map +1 -1
- package/dist/src/index.js +0 -0
- package/dist/src/types/tool-visibility.js +51 -10
- package/dist/src/types/tool-visibility.js.map +1 -1
- package/dist/src/utils/championship-format.js +11 -9
- package/dist/src/utils/championship-format.js.map +1 -1
- package/dist/src/utils/path-resolver.js +56 -2
- package/dist/src/utils/path-resolver.js.map +1 -1
- package/dist/src/utils/visual-style.js +7 -5
- package/dist/src/utils/visual-style.js.map +1 -1
- package/dist/src/version.js +24 -11
- package/dist/src/version.js.map +1 -1
- package/package.json +5 -3
- package/project.faf +14 -18
- package/dist/index.json +0 -1
- package/dist/src/compiler/index.d.ts +0 -7
- package/dist/src/compiler/index.js.map +0 -1
- package/dist/src/compiler/scorer.d.ts +0 -53
- package/dist/src/compiler/scorer.js +0 -189
- package/dist/src/compiler/scorer.js.map +0 -1
- package/dist/src/compiler/slot-validator.d.ts +0 -32
- package/dist/src/compiler/slot-validator.js +0 -293
- package/dist/src/compiler/slot-validator.js.map +0 -1
- package/dist/src/compiler/type-detector.d.ts +0 -62
- package/dist/src/compiler/type-detector.js +0 -388
- package/dist/src/compiler/type-detector.js.map +0 -1
- package/dist/src/types/project-types.d.ts +0 -22
- package/dist/src/types/project-types.js +0 -85
- package/dist/src/types/project-types.js.map +0 -1
- package/dist/src/types/slots.d.ts +0 -39
- package/dist/src/types/slots.js +0 -162
- package/dist/src/types/slots.js.map +0 -1
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Repository Metadata Extractor
|
|
4
|
+
*
|
|
5
|
+
* Fetches rich metadata from GitHub repos without cloning.
|
|
6
|
+
* Uses GitHub API v3 (no auth needed for public repos, 60 req/hr limit).
|
|
7
|
+
*
|
|
8
|
+
* Ported from faf-cli for claude-faf-mcp v4.5.0
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.parseGitHubUrl = parseGitHubUrl;
|
|
12
|
+
exports.fetchGitHubMetadata = fetchGitHubMetadata;
|
|
13
|
+
exports.fetchGitHubFileTree = fetchGitHubFileTree;
|
|
14
|
+
exports.fetchGitHubFileContent = fetchGitHubFileContent;
|
|
15
|
+
exports.detectStackFromMetadata = detectStackFromMetadata;
|
|
16
|
+
exports.calculateRepoQualityScore = calculateRepoQualityScore;
|
|
17
|
+
/**
|
|
18
|
+
* Build GitHub API headers, with auth token if available
|
|
19
|
+
*/
|
|
20
|
+
function githubHeaders() {
|
|
21
|
+
const headers = {
|
|
22
|
+
'Accept': 'application/vnd.github.v3+json',
|
|
23
|
+
'User-Agent': 'claude-faf-mcp',
|
|
24
|
+
};
|
|
25
|
+
const token = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;
|
|
26
|
+
if (token) {
|
|
27
|
+
headers['Authorization'] = `token ${token}`;
|
|
28
|
+
}
|
|
29
|
+
return headers;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse GitHub URL to extract owner and repo
|
|
33
|
+
*/
|
|
34
|
+
function parseGitHubUrl(url) {
|
|
35
|
+
try {
|
|
36
|
+
// Handle different URL formats:
|
|
37
|
+
// https://github.com/owner/repo
|
|
38
|
+
// github.com/owner/repo
|
|
39
|
+
// owner/repo
|
|
40
|
+
// Strip query parameters and hash fragments first
|
|
41
|
+
const cleanedUrl = url.split('?')[0].split('#')[0];
|
|
42
|
+
// First, check if it's actually a GitHub URL (if it contains a domain)
|
|
43
|
+
if (cleanedUrl.includes('://') || cleanedUrl.includes('.com')) {
|
|
44
|
+
// Extract domain to validate it's GitHub
|
|
45
|
+
const domainMatch = cleanedUrl.match(/^(?:https?:\/\/)?(?:www\.)?([^/]+)/);
|
|
46
|
+
if (domainMatch && domainMatch[1] !== 'github.com') {
|
|
47
|
+
return null; // Not a GitHub URL
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Clean the URL: remove protocol and GitHub domain (with or without www)
|
|
51
|
+
const cleanUrl = cleanedUrl
|
|
52
|
+
.replace(/^https?:\/\//, '')
|
|
53
|
+
.replace(/^www\./, '')
|
|
54
|
+
.replace(/^github\.com\//, '');
|
|
55
|
+
const parts = cleanUrl.split('/').filter(Boolean);
|
|
56
|
+
if (parts.length >= 2) {
|
|
57
|
+
const owner = parts[0];
|
|
58
|
+
let repo = parts[1];
|
|
59
|
+
// Strip .git extension if present
|
|
60
|
+
repo = repo.replace(/\.git$/, '');
|
|
61
|
+
return { owner, repo };
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Fetch repository metadata from GitHub API
|
|
71
|
+
* (No auth required for public repos, 60 requests/hour limit)
|
|
72
|
+
*/
|
|
73
|
+
async function fetchGitHubMetadata(owner, repo, includeFiles = false) {
|
|
74
|
+
const apiUrl = `https://api.github.com/repos/${owner}/${repo}`;
|
|
75
|
+
try {
|
|
76
|
+
const response = await fetch(apiUrl, {
|
|
77
|
+
headers: githubHeaders()
|
|
78
|
+
});
|
|
79
|
+
if (!response.ok) {
|
|
80
|
+
if (response.status === 404) {
|
|
81
|
+
throw new Error(`Repository ${owner}/${repo} not found`);
|
|
82
|
+
}
|
|
83
|
+
if (response.status === 403) {
|
|
84
|
+
throw new Error('GitHub API rate limit exceeded. Try again later or set GITHUB_TOKEN.');
|
|
85
|
+
}
|
|
86
|
+
throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
|
|
87
|
+
}
|
|
88
|
+
const data = await response.json();
|
|
89
|
+
// Extract metadata
|
|
90
|
+
const metadata = {
|
|
91
|
+
owner,
|
|
92
|
+
repo,
|
|
93
|
+
url: `https://github.com/${owner}/${repo}`,
|
|
94
|
+
description: data.description || undefined,
|
|
95
|
+
topics: data.topics || undefined,
|
|
96
|
+
stars: formatNumber(data.stargazers_count),
|
|
97
|
+
forks: formatNumber(data.forks_count),
|
|
98
|
+
license: data.license?.spdx_id || data.license?.name || undefined,
|
|
99
|
+
lastUpdated: data.updated_at || data.pushed_at || undefined,
|
|
100
|
+
defaultBranch: data.default_branch || 'main',
|
|
101
|
+
openIssues: data.open_issues_count || 0,
|
|
102
|
+
watchers: data.watchers_count || 0,
|
|
103
|
+
};
|
|
104
|
+
// Fetch language breakdown
|
|
105
|
+
if (data.languages_url) {
|
|
106
|
+
const langResponse = await fetch(data.languages_url, {
|
|
107
|
+
headers: githubHeaders()
|
|
108
|
+
});
|
|
109
|
+
if (langResponse.ok) {
|
|
110
|
+
const languages = await langResponse.json();
|
|
111
|
+
const total = Object.values(languages).reduce((sum, bytes) => sum + bytes, 0);
|
|
112
|
+
metadata.languages = Object.entries(languages)
|
|
113
|
+
.map(([lang, bytes]) => {
|
|
114
|
+
const percentage = ((bytes / total) * 100).toFixed(1);
|
|
115
|
+
return `${lang} (${percentage}%)`;
|
|
116
|
+
})
|
|
117
|
+
.sort((a, b) => {
|
|
118
|
+
const aPercent = parseFloat(a.match(/\((.+)%\)/)?.[1] || '0');
|
|
119
|
+
const bPercent = parseFloat(b.match(/\((.+)%\)/)?.[1] || '0');
|
|
120
|
+
return bPercent - aPercent;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Check for common files (if requested)
|
|
125
|
+
if (includeFiles) {
|
|
126
|
+
const fileChecks = await Promise.allSettled([
|
|
127
|
+
checkFileExists(owner, repo, 'README.md', metadata.defaultBranch),
|
|
128
|
+
checkFileExists(owner, repo, 'package.json', metadata.defaultBranch),
|
|
129
|
+
checkFileExists(owner, repo, 'tsconfig.json', metadata.defaultBranch),
|
|
130
|
+
checkFileExists(owner, repo, 'Dockerfile', metadata.defaultBranch),
|
|
131
|
+
]);
|
|
132
|
+
metadata.readme = fileChecks[0].status === 'fulfilled' && fileChecks[0].value;
|
|
133
|
+
metadata.hasPackageJson = fileChecks[1].status === 'fulfilled' && fileChecks[1].value;
|
|
134
|
+
metadata.hasTsConfig = fileChecks[2].status === 'fulfilled' && fileChecks[2].value;
|
|
135
|
+
metadata.hasDockerfile = fileChecks[3].status === 'fulfilled' && fileChecks[3].value;
|
|
136
|
+
}
|
|
137
|
+
return metadata;
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
if (error instanceof Error) {
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
throw new Error(`Failed to fetch GitHub metadata: ${String(error)}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if a file exists in the repository
|
|
148
|
+
*/
|
|
149
|
+
async function checkFileExists(owner, repo, filePath, branch = 'main') {
|
|
150
|
+
const url = `https://api.github.com/repos/${owner}/${repo}/contents/${filePath}?ref=${branch}`;
|
|
151
|
+
try {
|
|
152
|
+
const response = await fetch(url, {
|
|
153
|
+
headers: githubHeaders()
|
|
154
|
+
});
|
|
155
|
+
return response.ok;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Fetch repository file tree
|
|
163
|
+
*/
|
|
164
|
+
async function fetchGitHubFileTree(owner, repo, branch = 'main', treePath = '') {
|
|
165
|
+
const url = `https://api.github.com/repos/${owner}/${repo}/contents/${treePath}?ref=${branch}`;
|
|
166
|
+
try {
|
|
167
|
+
const response = await fetch(url, {
|
|
168
|
+
headers: githubHeaders()
|
|
169
|
+
});
|
|
170
|
+
if (!response.ok) {
|
|
171
|
+
throw new Error(`Failed to fetch file tree: ${response.status}`);
|
|
172
|
+
}
|
|
173
|
+
const data = await response.json();
|
|
174
|
+
// API returns an array for directories, object for files
|
|
175
|
+
const items = Array.isArray(data) ? data : [data];
|
|
176
|
+
return items.map((item) => ({
|
|
177
|
+
path: item.path,
|
|
178
|
+
type: item.type === 'dir' ? 'dir' : 'file',
|
|
179
|
+
size: item.size,
|
|
180
|
+
url: item.html_url,
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Format large numbers with K/M suffix
|
|
189
|
+
*/
|
|
190
|
+
function formatNumber(num) {
|
|
191
|
+
if (num >= 1_000_000) {
|
|
192
|
+
return `${(num / 1_000_000).toFixed(1)}M`;
|
|
193
|
+
}
|
|
194
|
+
if (num >= 1_000) {
|
|
195
|
+
return `${(num / 1_000).toFixed(1)}K`;
|
|
196
|
+
}
|
|
197
|
+
return num.toString();
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Fetch file content from GitHub repository
|
|
201
|
+
*/
|
|
202
|
+
async function fetchGitHubFileContent(owner, repo, filePath, branch = 'main') {
|
|
203
|
+
const url = `https://api.github.com/repos/${owner}/${repo}/contents/${filePath}?ref=${branch}`;
|
|
204
|
+
try {
|
|
205
|
+
const response = await fetch(url, {
|
|
206
|
+
headers: githubHeaders()
|
|
207
|
+
});
|
|
208
|
+
if (!response.ok) {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
const data = await response.json();
|
|
212
|
+
// GitHub API returns base64-encoded content
|
|
213
|
+
if (data.content && data.encoding === 'base64') {
|
|
214
|
+
return Buffer.from(data.content, 'base64').toString('utf-8');
|
|
215
|
+
}
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Detect framework/stack from repository metadata
|
|
224
|
+
*/
|
|
225
|
+
function detectStackFromMetadata(metadata) {
|
|
226
|
+
const stacks = [];
|
|
227
|
+
// From topics
|
|
228
|
+
if (metadata.topics) {
|
|
229
|
+
const topicMap = {
|
|
230
|
+
'react': 'React',
|
|
231
|
+
'nextjs': 'Next.js',
|
|
232
|
+
'vue': 'Vue',
|
|
233
|
+
'svelte': 'Svelte',
|
|
234
|
+
'angular': 'Angular',
|
|
235
|
+
'typescript': 'TypeScript',
|
|
236
|
+
'javascript': 'JavaScript',
|
|
237
|
+
'nodejs': 'Node.js',
|
|
238
|
+
'docker': 'Docker',
|
|
239
|
+
'kubernetes': 'Kubernetes',
|
|
240
|
+
};
|
|
241
|
+
for (const topic of metadata.topics) {
|
|
242
|
+
const normalized = topic.toLowerCase();
|
|
243
|
+
if (topicMap[normalized]) {
|
|
244
|
+
stacks.push(topicMap[normalized]);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// From languages
|
|
249
|
+
if (metadata.languages) {
|
|
250
|
+
for (const lang of metadata.languages) {
|
|
251
|
+
const language = lang.split(' ')[0]; // Extract "TypeScript" from "TypeScript (85.3%)"
|
|
252
|
+
if (!stacks.includes(language)) {
|
|
253
|
+
stacks.push(language);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// From file presence
|
|
258
|
+
if (metadata.hasPackageJson) {
|
|
259
|
+
if (!stacks.includes('Node.js')) {
|
|
260
|
+
stacks.push('Node.js');
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (metadata.hasTsConfig) {
|
|
264
|
+
if (!stacks.includes('TypeScript')) {
|
|
265
|
+
stacks.push('TypeScript');
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
if (metadata.hasDockerfile) {
|
|
269
|
+
if (!stacks.includes('Docker')) {
|
|
270
|
+
stacks.push('Docker');
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return stacks;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Generate quality score based on metadata
|
|
277
|
+
*/
|
|
278
|
+
function calculateRepoQualityScore(metadata) {
|
|
279
|
+
let score = 0;
|
|
280
|
+
// Stars (max 30 points)
|
|
281
|
+
const stars = parseStars(metadata.stars);
|
|
282
|
+
if (stars >= 10000) {
|
|
283
|
+
score += 30;
|
|
284
|
+
}
|
|
285
|
+
else if (stars >= 5000) {
|
|
286
|
+
score += 25;
|
|
287
|
+
}
|
|
288
|
+
else if (stars >= 1000) {
|
|
289
|
+
score += 20;
|
|
290
|
+
}
|
|
291
|
+
else if (stars >= 500) {
|
|
292
|
+
score += 15;
|
|
293
|
+
}
|
|
294
|
+
else if (stars >= 100) {
|
|
295
|
+
score += 10;
|
|
296
|
+
}
|
|
297
|
+
else if (stars >= 10) {
|
|
298
|
+
score += 5;
|
|
299
|
+
}
|
|
300
|
+
// Has description (10 points)
|
|
301
|
+
if (metadata.description && metadata.description.length > 10) {
|
|
302
|
+
score += 10;
|
|
303
|
+
}
|
|
304
|
+
// Has topics (10 points)
|
|
305
|
+
if (metadata.topics && metadata.topics.length > 0) {
|
|
306
|
+
score += 10;
|
|
307
|
+
}
|
|
308
|
+
// Has license (10 points)
|
|
309
|
+
if (metadata.license) {
|
|
310
|
+
score += 10;
|
|
311
|
+
}
|
|
312
|
+
// Has README (10 points)
|
|
313
|
+
if (metadata.readme) {
|
|
314
|
+
score += 10;
|
|
315
|
+
}
|
|
316
|
+
// Recent activity (10 points)
|
|
317
|
+
if (metadata.lastUpdated) {
|
|
318
|
+
const lastUpdate = new Date(metadata.lastUpdated);
|
|
319
|
+
const now = new Date();
|
|
320
|
+
const daysSinceUpdate = (now.getTime() - lastUpdate.getTime()) / (1000 * 60 * 60 * 24);
|
|
321
|
+
if (daysSinceUpdate < 30) {
|
|
322
|
+
score += 10;
|
|
323
|
+
}
|
|
324
|
+
else if (daysSinceUpdate < 90) {
|
|
325
|
+
score += 7;
|
|
326
|
+
}
|
|
327
|
+
else if (daysSinceUpdate < 180) {
|
|
328
|
+
score += 5;
|
|
329
|
+
}
|
|
330
|
+
else if (daysSinceUpdate < 365) {
|
|
331
|
+
score += 3;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// Has package.json (5 points)
|
|
335
|
+
if (metadata.hasPackageJson) {
|
|
336
|
+
score += 5;
|
|
337
|
+
}
|
|
338
|
+
// Has TypeScript (5 points)
|
|
339
|
+
if (metadata.hasTsConfig) {
|
|
340
|
+
score += 5;
|
|
341
|
+
}
|
|
342
|
+
// Language diversity (10 points)
|
|
343
|
+
if (metadata.languages) {
|
|
344
|
+
if (metadata.languages.length >= 3) {
|
|
345
|
+
score += 10;
|
|
346
|
+
}
|
|
347
|
+
else if (metadata.languages.length >= 2) {
|
|
348
|
+
score += 5;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
return Math.min(100, score);
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Parse star count string to number
|
|
355
|
+
*/
|
|
356
|
+
function parseStars(stars) {
|
|
357
|
+
if (!stars) {
|
|
358
|
+
return 0;
|
|
359
|
+
}
|
|
360
|
+
const match = stars.match(/^([\d.]+)([KM]?)$/);
|
|
361
|
+
if (!match) {
|
|
362
|
+
return 0;
|
|
363
|
+
}
|
|
364
|
+
const num = parseFloat(match[1]);
|
|
365
|
+
const suffix = match[2];
|
|
366
|
+
if (suffix === 'K') {
|
|
367
|
+
return num * 1000;
|
|
368
|
+
}
|
|
369
|
+
if (suffix === 'M') {
|
|
370
|
+
return num * 1_000_000;
|
|
371
|
+
}
|
|
372
|
+
return num;
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=github-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-extractor.js","sourceRoot":"","sources":["../../../../src/faf-core/parsers/github-extractor.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AA+CH,wCAyCC;AAMD,kDAqFC;AA2BD,kDA+BC;AAkBD,wDA4BC;AAKD,0DAgDC;AAKD,8DAiDC;AAzWD;;GAEG;AACH,SAAS,aAAa;IACpB,MAAM,OAAO,GAA2B;QACtC,QAAQ,EAAE,gCAAgC;QAC1C,YAAY,EAAE,gBAAgB;KAC/B,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/D,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,KAAK,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,gCAAgC;QAChC,gCAAgC;QAChC,wBAAwB;QACxB,aAAa;QAEb,kDAAkD;QAClD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,uEAAuE;QACvE,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,yCAAyC;YACzC,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YAC3E,IAAI,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC,CAAC,mBAAmB;YAClC,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,MAAM,QAAQ,GAAG,UAAU;aACxB,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;aAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAEjC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEpB,kCAAkC;YAClC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAElC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CACvC,KAAa,EACb,IAAY,EACZ,eAAwB,KAAK;IAE7B,MAAM,MAAM,GAAG,gCAAgC,KAAK,IAAI,IAAI,EAAE,CAAC;IAE/D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YACnC,OAAO,EAAE,aAAa,EAAE;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,YAAY,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;YAC1F,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAExC,mBAAmB;QACnB,MAAM,QAAQ,GAAmB;YAC/B,KAAK;YACL,IAAI;YACJ,GAAG,EAAE,sBAAsB,KAAK,IAAI,IAAI,EAAE;YAC1C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS;YAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;YAChC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAC1C,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;YACrC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,SAAS;YACjE,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS;YAC3D,aAAa,EAAE,IAAI,CAAC,cAAc,IAAI,MAAM;YAC5C,UAAU,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC;YACvC,QAAQ,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC;SACnC,CAAC;QAEF,2BAA2B;QAC3B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE;gBACnD,OAAO,EAAE,aAAa,EAAE;aACzB,CAAC,CAAC;YAEH,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAQ,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;gBAE3F,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;qBAC3C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;oBACrB,MAAM,UAAU,GAAG,CAAC,CAAC,KAAe,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAChE,OAAO,GAAG,IAAI,KAAK,UAAU,IAAI,CAAC;gBACpC,CAAC,CAAC;qBACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACb,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC9D,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC9D,OAAO,QAAQ,GAAG,QAAQ,CAAC;gBAC7B,CAAC,CAAC,CAAC;YACP,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;gBAC1C,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC;gBACjE,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,CAAC,aAAa,CAAC;gBACpE,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,CAAC,aAAa,CAAC;gBACrE,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,aAAa,CAAC;aACnE,CAAC,CAAC;YAEH,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC9E,QAAQ,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACtF,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACnF,QAAQ,CAAC,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvF,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,KAAa,EACb,IAAY,EACZ,QAAgB,EAChB,SAAiB,MAAM;IAEvB,MAAM,GAAG,GAAG,gCAAgC,KAAK,IAAI,IAAI,aAAa,QAAQ,QAAQ,MAAM,EAAE,CAAC;IAE/F,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE,aAAa,EAAE;SACzB,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,mBAAmB,CACvC,KAAa,EACb,IAAY,EACZ,SAAiB,MAAM,EACvB,WAAmB,EAAE;IAErB,MAAM,GAAG,GAAG,gCAAgC,KAAK,IAAI,IAAI,aAAa,QAAQ,QAAQ,MAAM,EAAE,CAAC;IAE/F,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE,aAAa,EAAE;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAExC,yDAAyD;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;YAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,QAAQ;SACnB,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5C,CAAC;IACD,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,sBAAsB,CAC1C,KAAa,EACb,IAAY,EACZ,QAAgB,EAChB,SAAiB,MAAM;IAEvB,MAAM,GAAG,GAAG,gCAAgC,KAAK,IAAI,IAAI,aAAa,QAAQ,QAAQ,MAAM,EAAE,CAAC;IAE/F,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE,aAAa,EAAE;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAExC,4CAA4C;QAC5C,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,QAAwB;IAC9D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,cAAc;IACd,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,QAAQ,GAA2B;YACvC,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,SAAS;YACpB,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,YAAY;YAC1B,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,YAAY;SAC3B,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iDAAiD;YACtF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAAA,CAAC;IAC5D,CAAC;IACD,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAAA,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAAA,CAAC;IAClE,CAAC;IACD,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAAA,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,QAAwB;IAChE,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,wBAAwB;IACxB,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QAAA,KAAK,IAAI,EAAE,CAAC;IAAA,CAAC;SAC7B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAAA,KAAK,IAAI,EAAE,CAAC;IAAA,CAAC;SACjC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAAA,KAAK,IAAI,EAAE,CAAC;IAAA,CAAC;SACjC,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QAAA,KAAK,IAAI,EAAE,CAAC;IAAA,CAAC;SAChC,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QAAA,KAAK,IAAI,EAAE,CAAC;IAAA,CAAC;SAChC,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAAA,KAAK,IAAI,CAAC,CAAC;IAAA,CAAC;IAEnC,8BAA8B;IAC9B,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAAA,KAAK,IAAI,EAAE,CAAC;IAAA,CAAC;IAE5E,yBAAyB;IACzB,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAAA,KAAK,IAAI,EAAE,CAAC;IAAA,CAAC;IAEjE,0BAA0B;IAC1B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAAA,KAAK,IAAI,EAAE,CAAC;IAAA,CAAC;IAEpC,yBAAyB;IACzB,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAAA,KAAK,IAAI,EAAE,CAAC;IAAA,CAAC;IAEnC,8BAA8B;IAC9B,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAEvF,IAAI,eAAe,GAAG,EAAE,EAAE,CAAC;YAAA,KAAK,IAAI,EAAE,CAAC;QAAA,CAAC;aACnC,IAAI,eAAe,GAAG,EAAE,EAAE,CAAC;YAAA,KAAK,IAAI,CAAC,CAAC;QAAA,CAAC;aACvC,IAAI,eAAe,GAAG,GAAG,EAAE,CAAC;YAAA,KAAK,IAAI,CAAC,CAAC;QAAA,CAAC;aACxC,IAAI,eAAe,GAAG,GAAG,EAAE,CAAC;YAAA,KAAK,IAAI,CAAC,CAAC;QAAA,CAAC;IAC/C,CAAC;IAED,8BAA8B;IAC9B,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAAA,KAAK,IAAI,CAAC,CAAC;IAAA,CAAC;IAE1C,4BAA4B;IAC5B,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QAAA,KAAK,IAAI,CAAC,CAAC;IAAA,CAAC;IAEvC,iCAAiC;IACjC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAAA,KAAK,IAAI,EAAE,CAAC;QAAA,CAAC;aAC7C,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAAA,KAAK,IAAI,CAAC,CAAC;QAAA,CAAC;IACxD,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;IAAA,CAAC;IAEvB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;IAAA,CAAC;IAEvB,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QAAA,OAAO,GAAG,GAAG,IAAI,CAAC;IAAA,CAAC;IACxC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QAAA,OAAO,GAAG,GAAG,SAAS,CAAC;IAAA,CAAC;IAC7C,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parsers Index - v4.5.0 Interop Edition
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all parser modules for convenient access.
|
|
5
|
+
*/
|
|
6
|
+
export * from './agents-parser.js';
|
|
7
|
+
export * from './cursorrules-parser.js';
|
|
8
|
+
export * from './gemini-parser.js';
|
|
9
|
+
export * from './conductor-parser.js';
|
|
10
|
+
export * from './slot-counter.js';
|
|
11
|
+
export * from './github-extractor.js';
|
|
12
|
+
export * from './faf-git-generator.js';
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Parsers Index - v4.5.0 Interop Edition
|
|
4
|
+
*
|
|
5
|
+
* Re-exports all parser modules for convenient access.
|
|
5
6
|
*/
|
|
6
7
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
8
|
if (k2 === undefined) k2 = k;
|
|
@@ -18,7 +19,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
18
19
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
20
|
};
|
|
20
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
__exportStar(require("./
|
|
22
|
-
__exportStar(require("./
|
|
23
|
-
__exportStar(require("./
|
|
22
|
+
__exportStar(require("./agents-parser.js"), exports);
|
|
23
|
+
__exportStar(require("./cursorrules-parser.js"), exports);
|
|
24
|
+
__exportStar(require("./gemini-parser.js"), exports);
|
|
25
|
+
__exportStar(require("./conductor-parser.js"), exports);
|
|
26
|
+
__exportStar(require("./slot-counter.js"), exports);
|
|
27
|
+
__exportStar(require("./github-extractor.js"), exports);
|
|
28
|
+
__exportStar(require("./faf-git-generator.js"), exports);
|
|
24
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/faf-core/parsers/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,qDAAmC;AACnC,0DAAwC;AACxC,qDAAmC;AACnC,wDAAsC;AACtC,oDAAkC;AAClC,wDAAsC;AACtC,yDAAuC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slot-Based Scoring
|
|
3
|
+
*
|
|
4
|
+
* Implements the advertised formula: (Filled + Ignored) / 21 * 100
|
|
5
|
+
*
|
|
6
|
+
* Ported from faf-cli for claude-faf-mcp v4.5.0
|
|
7
|
+
*/
|
|
8
|
+
export interface SlotCount {
|
|
9
|
+
filled: number;
|
|
10
|
+
ignored: number;
|
|
11
|
+
missing: number;
|
|
12
|
+
score: number;
|
|
13
|
+
filledSlots: string[];
|
|
14
|
+
ignoredSlots: string[];
|
|
15
|
+
missingSlots: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Check if a slot value should be counted as "ignored"
|
|
19
|
+
*/
|
|
20
|
+
export declare function isIgnored(value: any): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a slot value should be counted as "filled"
|
|
23
|
+
*/
|
|
24
|
+
export declare function isFilled(value: any): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Count actual slots and calculate REAL score
|
|
27
|
+
*
|
|
28
|
+
* Pass in the actual values being used in the FAF file
|
|
29
|
+
*
|
|
30
|
+
* @param slots - Object with all 21 slot values
|
|
31
|
+
* @returns Slot count and score
|
|
32
|
+
*/
|
|
33
|
+
export declare function countSlots(slots: {
|
|
34
|
+
projectName?: any;
|
|
35
|
+
projectGoal?: any;
|
|
36
|
+
mainLanguage?: any;
|
|
37
|
+
projectType?: any;
|
|
38
|
+
who?: any;
|
|
39
|
+
what?: any;
|
|
40
|
+
why?: any;
|
|
41
|
+
where?: any;
|
|
42
|
+
when?: any;
|
|
43
|
+
how?: any;
|
|
44
|
+
frontend?: any;
|
|
45
|
+
uiLibrary?: any;
|
|
46
|
+
backend?: any;
|
|
47
|
+
runtime?: any;
|
|
48
|
+
database?: any;
|
|
49
|
+
build?: any;
|
|
50
|
+
packageManager?: any;
|
|
51
|
+
apiType?: any;
|
|
52
|
+
hosting?: any;
|
|
53
|
+
cicd?: any;
|
|
54
|
+
cssFramework?: any;
|
|
55
|
+
}): SlotCount;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Slot-Based Scoring
|
|
4
|
+
*
|
|
5
|
+
* Implements the advertised formula: (Filled + Ignored) / 21 * 100
|
|
6
|
+
*
|
|
7
|
+
* Ported from faf-cli for claude-faf-mcp v4.5.0
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.isIgnored = isIgnored;
|
|
11
|
+
exports.isFilled = isFilled;
|
|
12
|
+
exports.countSlots = countSlots;
|
|
13
|
+
/**
|
|
14
|
+
* Check if a slot value should be counted as "ignored"
|
|
15
|
+
*/
|
|
16
|
+
function isIgnored(value) {
|
|
17
|
+
if (value === null || value === undefined) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const normalized = String(value).toLowerCase().trim();
|
|
21
|
+
return normalized === 'slotignored' ||
|
|
22
|
+
normalized === 'none' ||
|
|
23
|
+
normalized === 'unknown' ||
|
|
24
|
+
normalized === 'not specified' ||
|
|
25
|
+
normalized === 'n/a';
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if a slot value should be counted as "filled"
|
|
29
|
+
*/
|
|
30
|
+
function isFilled(value) {
|
|
31
|
+
if (value === null || value === undefined || value === '') {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
// Not ignored and has a value = filled
|
|
35
|
+
return !isIgnored(value);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Count actual slots and calculate REAL score
|
|
39
|
+
*
|
|
40
|
+
* Pass in the actual values being used in the FAF file
|
|
41
|
+
*
|
|
42
|
+
* @param slots - Object with all 21 slot values
|
|
43
|
+
* @returns Slot count and score
|
|
44
|
+
*/
|
|
45
|
+
function countSlots(slots) {
|
|
46
|
+
const filled = [];
|
|
47
|
+
const ignored = [];
|
|
48
|
+
const missing = [];
|
|
49
|
+
// Map to slot names
|
|
50
|
+
const slotMap = [
|
|
51
|
+
// Project (4)
|
|
52
|
+
['project.name', slots.projectName],
|
|
53
|
+
['project.goal', slots.projectGoal],
|
|
54
|
+
['project.main_language', slots.mainLanguage],
|
|
55
|
+
['project.type', slots.projectType],
|
|
56
|
+
// Human context (6)
|
|
57
|
+
['human_context.who', slots.who],
|
|
58
|
+
['human_context.what', slots.what],
|
|
59
|
+
['human_context.why', slots.why],
|
|
60
|
+
['human_context.where', slots.where],
|
|
61
|
+
['human_context.when', slots.when],
|
|
62
|
+
['human_context.how', slots.how],
|
|
63
|
+
// Stack (11)
|
|
64
|
+
['stack.frontend', slots.frontend],
|
|
65
|
+
['stack.ui_library', slots.uiLibrary],
|
|
66
|
+
['stack.backend', slots.backend],
|
|
67
|
+
['stack.runtime', slots.runtime],
|
|
68
|
+
['stack.database', slots.database],
|
|
69
|
+
['stack.build', slots.build],
|
|
70
|
+
['stack.package_manager', slots.packageManager],
|
|
71
|
+
['stack.api_type', slots.apiType],
|
|
72
|
+
['stack.hosting', slots.hosting],
|
|
73
|
+
['stack.cicd', slots.cicd],
|
|
74
|
+
['stack.css_framework', slots.cssFramework],
|
|
75
|
+
];
|
|
76
|
+
// Count each slot
|
|
77
|
+
for (const [slotName, value] of slotMap) {
|
|
78
|
+
if (isIgnored(value)) {
|
|
79
|
+
ignored.push(slotName);
|
|
80
|
+
}
|
|
81
|
+
else if (isFilled(value)) {
|
|
82
|
+
filled.push(slotName);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
missing.push(slotName);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Calculate REAL score: (Filled + Ignored) / 21 * 100
|
|
89
|
+
const score = Math.round(((filled.length + ignored.length) / 21) * 100);
|
|
90
|
+
return {
|
|
91
|
+
filled: filled.length,
|
|
92
|
+
ignored: ignored.length,
|
|
93
|
+
missing: missing.length,
|
|
94
|
+
score,
|
|
95
|
+
filledSlots: filled,
|
|
96
|
+
ignoredSlots: ignored,
|
|
97
|
+
missingSlots: missing
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=slot-counter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-counter.js","sourceRoot":"","sources":["../../../../src/faf-core/parsers/slot-counter.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,14 +88,14 @@ class BalanceVisualizer {
|
|
|
88
88
|
// Calculate proportional split (matching fafdev.tools logic)
|
|
89
89
|
const totalContext = aiPercentage + humanPercentage;
|
|
90
90
|
let aiProportion;
|
|
91
|
-
let
|
|
91
|
+
let _humanProportion;
|
|
92
92
|
if (totalContext === 0) {
|
|
93
93
|
aiProportion = 50;
|
|
94
|
-
|
|
94
|
+
_humanProportion = 50;
|
|
95
95
|
}
|
|
96
96
|
else {
|
|
97
97
|
aiProportion = Math.round((aiPercentage / totalContext) * 100);
|
|
98
|
-
|
|
98
|
+
_humanProportion = 100 - aiProportion;
|
|
99
99
|
}
|
|
100
100
|
// Build the visual bar
|
|
101
101
|
const lines = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance-visualizer.js","sourceRoot":"","sources":["../../../../src/faf-core/utils/balance-visualizer.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,+
|
|
1
|
+
{"version":3,"file":"balance-visualizer.js","sourceRoot":"","sources":["../../../../src/faf-core/utils/balance-visualizer.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,+CAAkD;AAQlD,MAAa,iBAAiB;IACpB,MAAM,CAAU,SAAS,GAAG,EAAE,CAAC;IAC/B,MAAM,CAAU,IAAI,GAAG,SAAS,CAAC;IACjC,MAAM,CAAU,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,CAAU,KAAK,GAAG,SAAS,CAAC;IAE1C;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAY;QAClC,uDAAuD;QACvD,MAAM,QAAQ,GAAG;YACf,gBAAgB;YAChB,eAAe;YACf,gBAAgB;YAChB,eAAe;YACf,aAAa;YACb,uBAAuB;YACvB,uBAAuB;YACvB,mBAAmB;YACnB,iBAAiB;YACjB,yBAAyB;YACzB,eAAe;YACf,aAAa;SACd,CAAC;QAEF,uDAAuD;QACvD,MAAM,WAAW,GAAG;YAClB,mBAAmB;YACnB,oBAAoB;YACpB,mBAAmB;YACnB,qBAAqB;YACrB,oBAAoB;YACpB,mBAAmB;YACnB,cAAc;YACd,iBAAiB;YACjB,aAAa;YACb,sBAAsB;YACtB,gBAAgB;YAChB,2BAA2B;SAC5B,CAAC;QAEF,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,kBAAkB;QAClB,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YACzE,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBAC3E,aAAa,EAAE,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YACzE,IAAI,KAAK,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBACvD,gBAAgB,EAAE,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,wDAAwD;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;QACzE,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;QAElF,kEAAkE;QAClE,MAAM,UAAU,GACd,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE;YAC9C,YAAY,IAAI,EAAE;YAClB,eAAe,IAAI,EAAE,CAAC;QAExB,OAAO;YACL,YAAY;YACZ,eAAe;YACf,UAAU;SACX,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAoB;QAC5C,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAE9D,6DAA6D;QAC7D,MAAM,YAAY,GAAG,YAAY,GAAG,eAAe,CAAC;QACpD,IAAI,YAAoB,CAAC;QACzB,IAAI,gBAAwB,CAAC;QAE7B,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,YAAY,GAAG,EAAE,CAAC;YAClB,gBAAgB,GAAG,EAAE,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;YAC/D,gBAAgB,GAAG,GAAG,GAAG,YAAY,CAAC;QACxC,CAAC;QAED,uBAAuB;QACvB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,qCAAqC;QACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,OAAO,CAAC,eAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,MAAM,CAAC,eAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,+BAA+B;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;QAElD,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,6CAA6C;QAC7C,IAAI,UAAU,EAAE,CAAC;YACf,6CAA6C;YAC7C,OAAO,IAAI,aAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,IAAI,UAAU,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;gBACxC,OAAO,IAAI,aAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjC,OAAO,IAAI,aAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACxC,CAAC;iBAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,aAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,aAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpB,gBAAgB;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,iBAAiB;QACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACxF,CAAC;aAAM,IAAI,YAAY,GAAG,eAAe,GAAG,EAAE,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,CAAC;YAClF,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAC/E,CAAC;aAAM,IAAI,eAAe,GAAG,YAAY,GAAG,EAAE,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,CAAC;YACrF,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAChF,CAAC;aAAM,IAAI,YAAY,GAAG,EAAE,IAAI,eAAe,GAAG,EAAE,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACrE,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,eAAM,CAAC,KAAK,CAAC,aAAa,YAAY,cAAc,eAAe,GAAG,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,OAAoB;QAChD,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAC7C,MAAM,eAAe,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC,wBAAwB;QAEpE,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,eAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,OAAO,GAAG,eAAM,CAAC,OAAO,CAAC;QAC/B,MAAM,UAAU,GAAG,eAAM,CAAC,SAAS,CAAC;QAEpC,OAAO,GAAG,OAAO,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,UAAU,CAAC,SAAS,eAAe,GAAG,CAAC,EAAE,CAAC;IAC1F,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,OAAoB;QAC/C,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;QAE9D,IAAI,UAAU,IAAI,YAAY,IAAI,EAAE,IAAI,eAAe,IAAI,EAAE,EAAE,CAAC;YAC9D,OAAO,eAAM,CAAC,OAAO,CAAC,eAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC3F,CAAC;aAAM,IAAI,UAAU,EAAE,CAAC;YACtB,OAAO,eAAM,CAAC,OAAO,CAAC,kEAAkE,CAAC,CAAC;QAC5F,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,OAAO,eAAM,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC;QACrF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;;AAxMH,8CAyMC"}
|
|
@@ -59,6 +59,16 @@ export declare class ChampionshipToolHandler {
|
|
|
59
59
|
private handleTodo;
|
|
60
60
|
private handleChat;
|
|
61
61
|
private handleQuick;
|
|
62
|
+
/**
|
|
63
|
+
* ๐งก Handle human_context add/merge
|
|
64
|
+
* For 6Ws Builder workflow: user fills faf.one/6ws, pastes YAML here
|
|
65
|
+
*/
|
|
66
|
+
private handleHumanAdd;
|
|
67
|
+
/**
|
|
68
|
+
* ๐ Handle README context extraction
|
|
69
|
+
* Extract 6 Ws from existing README.md and optionally merge into project.faf
|
|
70
|
+
*/
|
|
71
|
+
private handleReadme;
|
|
62
72
|
private handleShare;
|
|
63
73
|
private handleEnhance;
|
|
64
74
|
private handleAnalyze;
|
|
@@ -110,9 +120,4 @@ export declare class ChampionshipToolHandler {
|
|
|
110
120
|
* Calculate current AI-Readiness score quietly
|
|
111
121
|
*/
|
|
112
122
|
private calculateScore;
|
|
113
|
-
private handleCloudPublish;
|
|
114
|
-
private handleCloudFetch;
|
|
115
|
-
private handleCloudList;
|
|
116
|
-
private handleCloudSearch;
|
|
117
|
-
private handleCloudShare;
|
|
118
123
|
}
|