faf-cli 3.0.6 → 3.1.1
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 +275 -25
- package/dist/big-orange/compare.d.ts.map +1 -1
- package/dist/big-orange/compare.js +14 -16
- package/dist/big-orange/compare.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +137 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto.d.ts.map +1 -1
- package/dist/commands/auto.js +69 -12
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/bi-sync.d.ts.map +1 -1
- package/dist/commands/bi-sync.js +10 -3
- package/dist/commands/bi-sync.js.map +1 -1
- package/dist/commands/drift.d.ts +16 -0
- package/dist/commands/drift.d.ts.map +1 -0
- package/dist/commands/drift.js +517 -0
- package/dist/commands/drift.js.map +1 -0
- package/dist/commands/git.d.ts +25 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +355 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +85 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/rename.d.ts +18 -0
- package/dist/commands/rename.d.ts.map +1 -0
- package/dist/commands/rename.js +211 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/taf-init.d.ts +14 -0
- package/dist/commands/taf-init.d.ts.map +1 -0
- package/dist/commands/taf-init.js +138 -0
- package/dist/commands/taf-init.js.map +1 -0
- package/dist/commands/taf-log.d.ts +30 -0
- package/dist/commands/taf-log.d.ts.map +1 -0
- package/dist/commands/taf-log.js +303 -0
- package/dist/commands/taf-log.js.map +1 -0
- package/dist/commands/taf-stats.d.ts +8 -0
- package/dist/commands/taf-stats.d.ts.map +1 -0
- package/dist/commands/taf-stats.js +133 -0
- package/dist/commands/taf-stats.js.map +1 -0
- package/dist/commands/taf-validate.d.ts +8 -0
- package/dist/commands/taf-validate.d.ts.map +1 -0
- package/dist/commands/taf-validate.js +108 -0
- package/dist/commands/taf-validate.js.map +1 -0
- package/dist/commands/taf.d.ts +13 -0
- package/dist/commands/taf.d.ts.map +1 -0
- package/dist/commands/taf.js +97 -0
- package/dist/commands/taf.js.map +1 -0
- package/dist/compiler/faf-compiler.d.ts.map +1 -1
- package/dist/compiler/faf-compiler.js +18 -0
- package/dist/compiler/faf-compiler.js.map +1 -1
- package/dist/generators/faf-generator-championship.d.ts.map +1 -1
- package/dist/generators/faf-generator-championship.js +1 -0
- package/dist/generators/faf-generator-championship.js.map +1 -1
- package/dist/github/github-extractor.d.ts +56 -0
- package/dist/github/github-extractor.d.ts.map +1 -0
- package/dist/github/github-extractor.js +328 -0
- package/dist/github/github-extractor.js.map +1 -0
- package/dist/github/popular-repos.d.ts +43 -0
- package/dist/github/popular-repos.d.ts.map +1 -0
- package/dist/github/popular-repos.js +205 -0
- package/dist/github/popular-repos.js.map +1 -0
- package/dist/github/repo-selector.d.ts +48 -0
- package/dist/github/repo-selector.d.ts.map +1 -0
- package/dist/github/repo-selector.js +277 -0
- package/dist/github/repo-selector.js.map +1 -0
- package/dist/taf/index.d.ts +17 -0
- package/dist/taf/index.d.ts.map +1 -0
- package/dist/taf/index.js +57 -0
- package/dist/taf/index.js.map +1 -0
- package/dist/taf/logger.d.ts +88 -0
- package/dist/taf/logger.d.ts.map +1 -0
- package/dist/taf/logger.js +137 -0
- package/dist/taf/logger.js.map +1 -0
- package/dist/taf/parser.d.ts +32 -0
- package/dist/taf/parser.d.ts.map +1 -0
- package/dist/taf/parser.js +161 -0
- package/dist/taf/parser.js.map +1 -0
- package/dist/taf/stats.d.ts +31 -0
- package/dist/taf/stats.d.ts.map +1 -0
- package/dist/taf/stats.js +182 -0
- package/dist/taf/stats.js.map +1 -0
- package/dist/taf/types.d.ts +77 -0
- package/dist/taf/types.d.ts.map +1 -0
- package/dist/taf/types.js +9 -0
- package/dist/taf/types.js.map +1 -0
- package/dist/taf/validator.d.ts +18 -0
- package/dist/taf/validator.d.ts.map +1 -0
- package/dist/taf/validator.js +148 -0
- package/dist/taf/validator.js.map +1 -0
- package/dist/utils/file-utils.d.ts +10 -0
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +196 -33
- package/dist/utils/file-utils.js.map +1 -1
- package/dist/utils/native-file-finder.js +1 -1
- package/dist/utils/native-file-finder.js.map +1 -1
- package/dist/utils/yaml-generator.d.ts +1 -0
- package/dist/utils/yaml-generator.d.ts.map +1 -1
- package/dist/utils/yaml-generator.js +1 -0
- package/dist/utils/yaml-generator.js.map +1 -1
- package/package.json +9 -4
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🏆 Interactive Repository Selector
|
|
3
|
+
*
|
|
4
|
+
* Handles ambiguous queries with smart selection UI
|
|
5
|
+
*/
|
|
6
|
+
import type { RepoMapping } from './popular-repos';
|
|
7
|
+
import type { GitHubMetadata } from './github-extractor';
|
|
8
|
+
export interface SelectionResult {
|
|
9
|
+
selected: RepoMapping[];
|
|
10
|
+
cancelled: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Show interactive list when multiple repos match
|
|
14
|
+
*/
|
|
15
|
+
export declare function selectFromMultiple(query: string, repos: RepoMapping[], metadata?: Map<string, GitHubMetadata>): Promise<SelectionResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Show confirmation for typo correction
|
|
18
|
+
*/
|
|
19
|
+
export declare function confirmTypoCorrection(query: string, suggestedRepo: RepoMapping): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Show error when no repos found
|
|
22
|
+
*/
|
|
23
|
+
export declare function showNoReposFound(query: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Show rate limit warning
|
|
26
|
+
*/
|
|
27
|
+
export declare function showRateLimitWarning(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Show list of popular repositories
|
|
30
|
+
*/
|
|
31
|
+
export declare function showPopularRepos(repos: RepoMapping[], category?: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Show extraction progress
|
|
34
|
+
*/
|
|
35
|
+
export declare function showExtractionProgress(owner: string, repo: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Show extraction success
|
|
38
|
+
*/
|
|
39
|
+
export declare function showExtractionSuccess(owner: string, repo: string, outputPath: string, score: number): void;
|
|
40
|
+
/**
|
|
41
|
+
* Show batch extraction summary
|
|
42
|
+
*/
|
|
43
|
+
export declare function showBatchSummary(results: Array<{
|
|
44
|
+
repo: string;
|
|
45
|
+
success: boolean;
|
|
46
|
+
outputPath?: string;
|
|
47
|
+
}>): void;
|
|
48
|
+
//# sourceMappingURL=repo-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-selector.d.ts","sourceRoot":"","sources":["../../src/github/repo-selector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,WAAW,EAAE,EACpB,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GACrC,OAAO,CAAC,eAAe,CAAC,CAyF1B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,WAAW,GACzB,OAAO,CAAC,OAAO,CAAC,CAqBlB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAUpD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAU3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CA2C9E;AAeD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGxE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,IAAI,CAoBN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CA8B9G"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 🏆 Interactive Repository Selector
|
|
4
|
+
*
|
|
5
|
+
* Handles ambiguous queries with smart selection UI
|
|
6
|
+
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.selectFromMultiple = selectFromMultiple;
|
|
12
|
+
exports.confirmTypoCorrection = confirmTypoCorrection;
|
|
13
|
+
exports.showNoReposFound = showNoReposFound;
|
|
14
|
+
exports.showRateLimitWarning = showRateLimitWarning;
|
|
15
|
+
exports.showPopularRepos = showPopularRepos;
|
|
16
|
+
exports.showExtractionProgress = showExtractionProgress;
|
|
17
|
+
exports.showExtractionSuccess = showExtractionSuccess;
|
|
18
|
+
exports.showBatchSummary = showBatchSummary;
|
|
19
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
20
|
+
const colors_1 = require("../fix-once/colors");
|
|
21
|
+
const championship_style_1 = require("../utils/championship-style");
|
|
22
|
+
/**
|
|
23
|
+
* Show interactive list when multiple repos match
|
|
24
|
+
*/
|
|
25
|
+
async function selectFromMultiple(query, repos, metadata) {
|
|
26
|
+
console.log();
|
|
27
|
+
console.log(championship_style_1.FAF_COLORS.fafOrange(`Multiple repositories found for '${query}':`));
|
|
28
|
+
console.log();
|
|
29
|
+
// Build choices with rich information
|
|
30
|
+
const choices = repos.map((repo, index) => {
|
|
31
|
+
const meta = metadata?.get(`${repo.owner}/${repo.repo}`);
|
|
32
|
+
let displayName = `[${index + 1}] ${repo.owner}/${repo.repo}`;
|
|
33
|
+
let description = '';
|
|
34
|
+
if (meta) {
|
|
35
|
+
// Add description
|
|
36
|
+
if (meta.description) {
|
|
37
|
+
description += colors_1.chalk.gray(meta.description.substring(0, 60));
|
|
38
|
+
if (meta.description.length > 60)
|
|
39
|
+
description += colors_1.chalk.gray('...');
|
|
40
|
+
}
|
|
41
|
+
// Add stats
|
|
42
|
+
const stats = [];
|
|
43
|
+
if (meta.stars)
|
|
44
|
+
stats.push(`⭐ ${meta.stars}`);
|
|
45
|
+
if (meta.license)
|
|
46
|
+
stats.push(`📄 ${meta.license}`);
|
|
47
|
+
if (meta.languages && meta.languages.length > 0) {
|
|
48
|
+
const mainLang = meta.languages[0].split(' ')[0];
|
|
49
|
+
stats.push(`🔧 ${mainLang}`);
|
|
50
|
+
}
|
|
51
|
+
if (stats.length > 0) {
|
|
52
|
+
description += '\n ' + colors_1.chalk.gray(stats.join(' '));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Fallback to registry data
|
|
57
|
+
if (repo.category) {
|
|
58
|
+
description += colors_1.chalk.gray(`${repo.category}`);
|
|
59
|
+
}
|
|
60
|
+
if (repo.weeklyDownloads) {
|
|
61
|
+
const downloads = formatDownloads(repo.weeklyDownloads);
|
|
62
|
+
description += colors_1.chalk.gray(` • ${downloads}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
name: description ? `${displayName}\n ${description}` : displayName,
|
|
67
|
+
value: repo,
|
|
68
|
+
short: `${repo.owner}/${repo.repo}`
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
// Add "All" option for comparison
|
|
72
|
+
choices.push({
|
|
73
|
+
name: colors_1.chalk.cyan('[all] Generate .faf for all repositories (comparison mode)'),
|
|
74
|
+
value: 'all',
|
|
75
|
+
short: 'all'
|
|
76
|
+
});
|
|
77
|
+
// Add separator
|
|
78
|
+
choices.push(new inquirer_1.default.Separator());
|
|
79
|
+
try {
|
|
80
|
+
const answer = await inquirer_1.default.prompt([
|
|
81
|
+
{
|
|
82
|
+
type: 'list',
|
|
83
|
+
name: 'selection',
|
|
84
|
+
message: 'Select repository:',
|
|
85
|
+
choices,
|
|
86
|
+
pageSize: 15,
|
|
87
|
+
loop: false,
|
|
88
|
+
}
|
|
89
|
+
]);
|
|
90
|
+
if (answer.selection === 'all') {
|
|
91
|
+
return {
|
|
92
|
+
selected: repos,
|
|
93
|
+
cancelled: false
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
selected: [answer.selection],
|
|
98
|
+
cancelled: false
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
// User cancelled (Ctrl+C)
|
|
103
|
+
return {
|
|
104
|
+
selected: [],
|
|
105
|
+
cancelled: true
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Show confirmation for typo correction
|
|
111
|
+
*/
|
|
112
|
+
async function confirmTypoCorrection(query, suggestedRepo) {
|
|
113
|
+
console.log();
|
|
114
|
+
console.log(colors_1.chalk.yellow(`⚠️ Did you mean '${suggestedRepo.shorthand}' (${suggestedRepo.owner}/${suggestedRepo.repo})?`));
|
|
115
|
+
try {
|
|
116
|
+
const answer = await inquirer_1.default.prompt([
|
|
117
|
+
{
|
|
118
|
+
type: 'confirm',
|
|
119
|
+
name: 'confirmed',
|
|
120
|
+
message: 'Use this repository?',
|
|
121
|
+
default: true
|
|
122
|
+
}
|
|
123
|
+
]);
|
|
124
|
+
return answer.confirmed;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
// User cancelled
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Show error when no repos found
|
|
133
|
+
*/
|
|
134
|
+
function showNoReposFound(query) {
|
|
135
|
+
console.log();
|
|
136
|
+
console.log(colors_1.chalk.red(`❌ No repositories found for '${query}'`));
|
|
137
|
+
console.log();
|
|
138
|
+
console.log(colors_1.chalk.gray('Suggestions:'));
|
|
139
|
+
console.log(colors_1.chalk.gray(' • Check spelling'));
|
|
140
|
+
console.log(colors_1.chalk.gray(` • Use full URL: faf git https://github.com/owner/repo`));
|
|
141
|
+
console.log(colors_1.chalk.gray(` • Use owner/repo: faf git owner/repo`));
|
|
142
|
+
console.log(colors_1.chalk.gray(` • Browse popular repos: faf git --list`));
|
|
143
|
+
console.log();
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Show rate limit warning
|
|
147
|
+
*/
|
|
148
|
+
function showRateLimitWarning() {
|
|
149
|
+
console.log();
|
|
150
|
+
console.log(colors_1.chalk.yellow('⚠️ GitHub API rate limit exceeded'));
|
|
151
|
+
console.log();
|
|
152
|
+
console.log(colors_1.chalk.gray('Options:'));
|
|
153
|
+
console.log(colors_1.chalk.gray(' 1. Wait ~1 hour for rate limit reset'));
|
|
154
|
+
console.log(colors_1.chalk.gray(' 2. Set GITHUB_TOKEN environment variable:'));
|
|
155
|
+
console.log(colors_1.chalk.gray(' export GITHUB_TOKEN=your_github_token'));
|
|
156
|
+
console.log(colors_1.chalk.gray(' (Increases limit from 60 to 5000 requests/hour)'));
|
|
157
|
+
console.log();
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Show list of popular repositories
|
|
161
|
+
*/
|
|
162
|
+
function showPopularRepos(repos, category) {
|
|
163
|
+
console.log();
|
|
164
|
+
if (category) {
|
|
165
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan(`🏆 Popular ${category} Repositories`));
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan('🏆 Popular Repositories'));
|
|
169
|
+
}
|
|
170
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan('═'.repeat(50)));
|
|
171
|
+
console.log();
|
|
172
|
+
// Group by category
|
|
173
|
+
const grouped = new Map();
|
|
174
|
+
for (const repo of repos) {
|
|
175
|
+
if (!grouped.has(repo.category)) {
|
|
176
|
+
grouped.set(repo.category, []);
|
|
177
|
+
}
|
|
178
|
+
grouped.get(repo.category).push(repo);
|
|
179
|
+
}
|
|
180
|
+
// Sort categories
|
|
181
|
+
const sortedCategories = Array.from(grouped.keys()).sort();
|
|
182
|
+
for (const cat of sortedCategories) {
|
|
183
|
+
const catRepos = grouped.get(cat);
|
|
184
|
+
console.log(championship_style_1.FAF_COLORS.fafOrange(`${cat.toUpperCase()}:`));
|
|
185
|
+
for (const repo of catRepos.slice(0, 10)) { // Limit to top 10 per category
|
|
186
|
+
const shorthand = colors_1.chalk.cyan(repo.shorthand.padEnd(15));
|
|
187
|
+
const fullName = colors_1.chalk.gray(`${repo.owner}/${repo.repo}`);
|
|
188
|
+
const downloads = repo.weeklyDownloads
|
|
189
|
+
? colors_1.chalk.gray(`(${formatDownloads(repo.weeklyDownloads)})`)
|
|
190
|
+
: '';
|
|
191
|
+
console.log(` ${shorthand} ${fullName} ${downloads}`);
|
|
192
|
+
}
|
|
193
|
+
console.log();
|
|
194
|
+
}
|
|
195
|
+
console.log(colors_1.chalk.gray('Usage: faf git <shorthand>'));
|
|
196
|
+
console.log(colors_1.chalk.gray('Example: faf git react'));
|
|
197
|
+
console.log();
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Format downloads for display
|
|
201
|
+
*/
|
|
202
|
+
function formatDownloads(downloads) {
|
|
203
|
+
if (downloads >= 1_000_000) {
|
|
204
|
+
return `${(downloads / 1_000_000).toFixed(1)}M/week`;
|
|
205
|
+
}
|
|
206
|
+
if (downloads >= 1_000) {
|
|
207
|
+
return `${(downloads / 1_000).toFixed(0)}K/week`;
|
|
208
|
+
}
|
|
209
|
+
return `${downloads}/week`;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Show extraction progress
|
|
213
|
+
*/
|
|
214
|
+
function showExtractionProgress(owner, repo) {
|
|
215
|
+
console.log();
|
|
216
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan(`⚡ Extracting context for ${owner}/${repo}...`));
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Show extraction success
|
|
220
|
+
*/
|
|
221
|
+
function showExtractionSuccess(owner, repo, outputPath, score) {
|
|
222
|
+
console.log();
|
|
223
|
+
console.log(championship_style_1.FAF_COLORS.fafGreen(`☑️ Generated ${outputPath}`));
|
|
224
|
+
// Show score with podium emoji
|
|
225
|
+
let emoji = '🤍';
|
|
226
|
+
if (score >= 85)
|
|
227
|
+
emoji = '🏆';
|
|
228
|
+
else if (score >= 70)
|
|
229
|
+
emoji = '🥇';
|
|
230
|
+
else if (score >= 55)
|
|
231
|
+
emoji = '🥈';
|
|
232
|
+
else if (score >= 40)
|
|
233
|
+
emoji = '🥉';
|
|
234
|
+
else if (score >= 35)
|
|
235
|
+
emoji = '🟢';
|
|
236
|
+
else if (score >= 20)
|
|
237
|
+
emoji = '🟡';
|
|
238
|
+
else if (score >= 10)
|
|
239
|
+
emoji = '🔴';
|
|
240
|
+
console.log(championship_style_1.FAF_COLORS.fafOrange(`${emoji} Quality Score: ${score}%`));
|
|
241
|
+
console.log();
|
|
242
|
+
console.log(colors_1.chalk.gray('Next steps:'));
|
|
243
|
+
console.log(colors_1.chalk.gray(` • Attach to AI: Share ${outputPath} with Claude/Gemini/Codex`));
|
|
244
|
+
console.log(colors_1.chalk.gray(` • View details: faf show ${outputPath}`));
|
|
245
|
+
console.log();
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Show batch extraction summary
|
|
249
|
+
*/
|
|
250
|
+
function showBatchSummary(results) {
|
|
251
|
+
console.log();
|
|
252
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan('🏁 Batch Extraction Complete'));
|
|
253
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan('═'.repeat(50)));
|
|
254
|
+
console.log();
|
|
255
|
+
const successful = results.filter(r => r.success);
|
|
256
|
+
const failed = results.filter(r => !r.success);
|
|
257
|
+
console.log(championship_style_1.FAF_COLORS.fafGreen(`☑️ Successful: ${successful.length}`));
|
|
258
|
+
if (failed.length > 0) {
|
|
259
|
+
console.log(colors_1.chalk.red(`❌ Failed: ${failed.length}`));
|
|
260
|
+
}
|
|
261
|
+
console.log();
|
|
262
|
+
if (successful.length > 0) {
|
|
263
|
+
console.log(colors_1.chalk.gray('Generated files:'));
|
|
264
|
+
for (const result of successful) {
|
|
265
|
+
console.log(colors_1.chalk.gray(` • ${result.outputPath}`));
|
|
266
|
+
}
|
|
267
|
+
console.log();
|
|
268
|
+
}
|
|
269
|
+
if (failed.length > 0) {
|
|
270
|
+
console.log(colors_1.chalk.red('Failed repositories:'));
|
|
271
|
+
for (const result of failed) {
|
|
272
|
+
console.log(colors_1.chalk.red(` • ${result.repo}`));
|
|
273
|
+
}
|
|
274
|
+
console.log();
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=repo-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-selector.js","sourceRoot":"","sources":["../../src/github/repo-selector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TAF Core Library - MCP-Portable Functions
|
|
3
|
+
*
|
|
4
|
+
* This module contains ALL pure, MCP-portable functions for .taf
|
|
5
|
+
* Can be extracted directly to claude-faf-mcp or claude-taf-mcp
|
|
6
|
+
*
|
|
7
|
+
* Zero CLI dependencies - only uses:
|
|
8
|
+
* - yaml (for parsing)
|
|
9
|
+
* - TypeScript types
|
|
10
|
+
* - Pure functions
|
|
11
|
+
*/
|
|
12
|
+
export * from './types';
|
|
13
|
+
export { parseTAF, serializeTAF, createTAF, formatTAF, } from './parser';
|
|
14
|
+
export { validateTAF, isTAFValid, } from './validator';
|
|
15
|
+
export { calculateStats, calculateScoreContribution, getPassRateTrend, getFailurePatterns, } from './stats';
|
|
16
|
+
export { appendTestRun, createMinimalRun, createDetailedRun, detectResult, calculateRecovery, getRecentRuns, getRunsInRange, updateFAFIntegration, } from './logger';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/taf/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,SAAS,GACV,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,oBAAoB,GACrB,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TAF Core Library - MCP-Portable Functions
|
|
4
|
+
*
|
|
5
|
+
* This module contains ALL pure, MCP-portable functions for .taf
|
|
6
|
+
* Can be extracted directly to claude-faf-mcp or claude-taf-mcp
|
|
7
|
+
*
|
|
8
|
+
* Zero CLI dependencies - only uses:
|
|
9
|
+
* - yaml (for parsing)
|
|
10
|
+
* - TypeScript types
|
|
11
|
+
* - Pure functions
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
25
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
26
|
+
};
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.updateFAFIntegration = exports.getRunsInRange = exports.getRecentRuns = exports.calculateRecovery = exports.detectResult = exports.createDetailedRun = exports.createMinimalRun = exports.appendTestRun = exports.getFailurePatterns = exports.getPassRateTrend = exports.calculateScoreContribution = exports.calculateStats = exports.isTAFValid = exports.validateTAF = exports.formatTAF = exports.createTAF = exports.serializeTAF = exports.parseTAF = void 0;
|
|
29
|
+
// Types
|
|
30
|
+
__exportStar(require("./types"), exports);
|
|
31
|
+
// Parser functions
|
|
32
|
+
var parser_1 = require("./parser");
|
|
33
|
+
Object.defineProperty(exports, "parseTAF", { enumerable: true, get: function () { return parser_1.parseTAF; } });
|
|
34
|
+
Object.defineProperty(exports, "serializeTAF", { enumerable: true, get: function () { return parser_1.serializeTAF; } });
|
|
35
|
+
Object.defineProperty(exports, "createTAF", { enumerable: true, get: function () { return parser_1.createTAF; } });
|
|
36
|
+
Object.defineProperty(exports, "formatTAF", { enumerable: true, get: function () { return parser_1.formatTAF; } });
|
|
37
|
+
// Validation functions
|
|
38
|
+
var validator_1 = require("./validator");
|
|
39
|
+
Object.defineProperty(exports, "validateTAF", { enumerable: true, get: function () { return validator_1.validateTAF; } });
|
|
40
|
+
Object.defineProperty(exports, "isTAFValid", { enumerable: true, get: function () { return validator_1.isTAFValid; } });
|
|
41
|
+
// Statistics functions
|
|
42
|
+
var stats_1 = require("./stats");
|
|
43
|
+
Object.defineProperty(exports, "calculateStats", { enumerable: true, get: function () { return stats_1.calculateStats; } });
|
|
44
|
+
Object.defineProperty(exports, "calculateScoreContribution", { enumerable: true, get: function () { return stats_1.calculateScoreContribution; } });
|
|
45
|
+
Object.defineProperty(exports, "getPassRateTrend", { enumerable: true, get: function () { return stats_1.getPassRateTrend; } });
|
|
46
|
+
Object.defineProperty(exports, "getFailurePatterns", { enumerable: true, get: function () { return stats_1.getFailurePatterns; } });
|
|
47
|
+
// Logger functions
|
|
48
|
+
var logger_1 = require("./logger");
|
|
49
|
+
Object.defineProperty(exports, "appendTestRun", { enumerable: true, get: function () { return logger_1.appendTestRun; } });
|
|
50
|
+
Object.defineProperty(exports, "createMinimalRun", { enumerable: true, get: function () { return logger_1.createMinimalRun; } });
|
|
51
|
+
Object.defineProperty(exports, "createDetailedRun", { enumerable: true, get: function () { return logger_1.createDetailedRun; } });
|
|
52
|
+
Object.defineProperty(exports, "detectResult", { enumerable: true, get: function () { return logger_1.detectResult; } });
|
|
53
|
+
Object.defineProperty(exports, "calculateRecovery", { enumerable: true, get: function () { return logger_1.calculateRecovery; } });
|
|
54
|
+
Object.defineProperty(exports, "getRecentRuns", { enumerable: true, get: function () { return logger_1.getRecentRuns; } });
|
|
55
|
+
Object.defineProperty(exports, "getRunsInRange", { enumerable: true, get: function () { return logger_1.getRunsInRange; } });
|
|
56
|
+
Object.defineProperty(exports, "updateFAFIntegration", { enumerable: true, get: function () { return logger_1.updateFAFIntegration; } });
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/taf/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,mBAAmB;AACnB,mCAKkB;AAJhB,kGAAA,QAAQ,OAAA;AACR,sGAAA,YAAY,OAAA;AACZ,mGAAA,SAAS,OAAA;AACT,mGAAA,SAAS,OAAA;AAGX,uBAAuB;AACvB,yCAGqB;AAFnB,wGAAA,WAAW,OAAA;AACX,uGAAA,UAAU,OAAA;AAGZ,uBAAuB;AACvB,iCAKiB;AAJf,uGAAA,cAAc,OAAA;AACd,mHAAA,0BAA0B,OAAA;AAC1B,yGAAA,gBAAgB,OAAA;AAChB,2GAAA,kBAAkB,OAAA;AAGpB,mBAAmB;AACnB,mCASkB;AARhB,uGAAA,aAAa,OAAA;AACb,0GAAA,gBAAgB,OAAA;AAChB,2GAAA,iBAAiB,OAAA;AACjB,sGAAA,YAAY,OAAA;AACZ,2GAAA,iBAAiB,OAAA;AACjB,uGAAA,aAAa,OAAA;AACb,wGAAA,cAAc,OAAA;AACd,8GAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TAF Logger - MCP-portable test run logging
|
|
3
|
+
*
|
|
4
|
+
* Pure functions for appending test runs
|
|
5
|
+
* Ready for MCP extraction
|
|
6
|
+
*/
|
|
7
|
+
import { TAFFile, TestRun, TestResult, EnvironmentInfo } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Append a test run to TAF history
|
|
10
|
+
* MCP-portable: pure function (immutable)
|
|
11
|
+
*/
|
|
12
|
+
export declare function appendTestRun(taf: TAFFile, run: TestRun): TAFFile;
|
|
13
|
+
/**
|
|
14
|
+
* Create a minimal test run entry (Phase 1 Minimal Mode)
|
|
15
|
+
* MCP-portable: pure function
|
|
16
|
+
*/
|
|
17
|
+
export declare function createMinimalRun(options: {
|
|
18
|
+
result: TestResult;
|
|
19
|
+
total: number;
|
|
20
|
+
passed: number;
|
|
21
|
+
failed: number;
|
|
22
|
+
skipped?: number;
|
|
23
|
+
environment?: EnvironmentInfo;
|
|
24
|
+
}): TestRun;
|
|
25
|
+
/**
|
|
26
|
+
* Create a detailed test run entry (Phase 1 Detailed Mode)
|
|
27
|
+
* MCP-portable: pure function
|
|
28
|
+
*/
|
|
29
|
+
export declare function createDetailedRun(options: {
|
|
30
|
+
run_id?: string;
|
|
31
|
+
command?: string;
|
|
32
|
+
trigger?: string;
|
|
33
|
+
result: TestResult;
|
|
34
|
+
suites?: {
|
|
35
|
+
total: number;
|
|
36
|
+
passed: number;
|
|
37
|
+
failed: number;
|
|
38
|
+
};
|
|
39
|
+
tests: {
|
|
40
|
+
total: number;
|
|
41
|
+
passed: number;
|
|
42
|
+
failed: number;
|
|
43
|
+
skipped?: number;
|
|
44
|
+
};
|
|
45
|
+
duration_ms?: number;
|
|
46
|
+
exit_code?: number;
|
|
47
|
+
issues?: string[];
|
|
48
|
+
root_cause?: string;
|
|
49
|
+
resolution?: string;
|
|
50
|
+
changes_since_last?: string[];
|
|
51
|
+
environment?: EnvironmentInfo;
|
|
52
|
+
}): TestRun;
|
|
53
|
+
/**
|
|
54
|
+
* Detect test result from test counts
|
|
55
|
+
* MCP-portable: pure function
|
|
56
|
+
*/
|
|
57
|
+
export declare function detectResult(current: {
|
|
58
|
+
passed: number;
|
|
59
|
+
total: number;
|
|
60
|
+
}, previous?: {
|
|
61
|
+
passed: number;
|
|
62
|
+
total: number;
|
|
63
|
+
}): TestResult;
|
|
64
|
+
/**
|
|
65
|
+
* Calculate recovery info from previous run
|
|
66
|
+
* MCP-portable: pure function
|
|
67
|
+
*/
|
|
68
|
+
export declare function calculateRecovery(currentRun: TestRun, previousRun?: TestRun): TestRun;
|
|
69
|
+
/**
|
|
70
|
+
* Get last N test runs
|
|
71
|
+
* MCP-portable: pure function
|
|
72
|
+
*/
|
|
73
|
+
export declare function getRecentRuns(taf: TAFFile, count: number): TestRun[];
|
|
74
|
+
/**
|
|
75
|
+
* Get test runs within time range
|
|
76
|
+
* MCP-portable: pure function
|
|
77
|
+
*/
|
|
78
|
+
export declare function getRunsInRange(taf: TAFFile, startDate: Date, endDate: Date): TestRun[];
|
|
79
|
+
/**
|
|
80
|
+
* Update FAF integration fields
|
|
81
|
+
* MCP-portable: pure function
|
|
82
|
+
*/
|
|
83
|
+
export declare function updateFAFIntegration(taf: TAFFile, options: {
|
|
84
|
+
faf_associated: boolean;
|
|
85
|
+
faf_location?: string;
|
|
86
|
+
faf_score?: number;
|
|
87
|
+
}): TAFFile;
|
|
88
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/taf/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAExE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAMjE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B,GAAG,OAAO,CAYV;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B,GAAG,OAAO,CAiBV;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAC1C,QAAQ,CAAC,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3C,UAAU,CAkBZ;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,OAAO,EACnB,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAkBT;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAEpE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,GACZ,OAAO,EAAE,CAKX;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE;IACP,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,OAAO,CAQT"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TAF Logger - MCP-portable test run logging
|
|
4
|
+
*
|
|
5
|
+
* Pure functions for appending test runs
|
|
6
|
+
* Ready for MCP extraction
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.appendTestRun = appendTestRun;
|
|
10
|
+
exports.createMinimalRun = createMinimalRun;
|
|
11
|
+
exports.createDetailedRun = createDetailedRun;
|
|
12
|
+
exports.detectResult = detectResult;
|
|
13
|
+
exports.calculateRecovery = calculateRecovery;
|
|
14
|
+
exports.getRecentRuns = getRecentRuns;
|
|
15
|
+
exports.getRunsInRange = getRunsInRange;
|
|
16
|
+
exports.updateFAFIntegration = updateFAFIntegration;
|
|
17
|
+
/**
|
|
18
|
+
* Append a test run to TAF history
|
|
19
|
+
* MCP-portable: pure function (immutable)
|
|
20
|
+
*/
|
|
21
|
+
function appendTestRun(taf, run) {
|
|
22
|
+
return {
|
|
23
|
+
...taf,
|
|
24
|
+
last_updated: new Date().toISOString(),
|
|
25
|
+
test_history: [...taf.test_history, run],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create a minimal test run entry (Phase 1 Minimal Mode)
|
|
30
|
+
* MCP-portable: pure function
|
|
31
|
+
*/
|
|
32
|
+
function createMinimalRun(options) {
|
|
33
|
+
return {
|
|
34
|
+
timestamp: new Date().toISOString(),
|
|
35
|
+
result: options.result,
|
|
36
|
+
tests: {
|
|
37
|
+
total: options.total,
|
|
38
|
+
passed: options.passed,
|
|
39
|
+
failed: options.failed,
|
|
40
|
+
skipped: options.skipped,
|
|
41
|
+
},
|
|
42
|
+
environment: options.environment,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a detailed test run entry (Phase 1 Detailed Mode)
|
|
47
|
+
* MCP-portable: pure function
|
|
48
|
+
*/
|
|
49
|
+
function createDetailedRun(options) {
|
|
50
|
+
return {
|
|
51
|
+
timestamp: new Date().toISOString(),
|
|
52
|
+
run_id: options.run_id,
|
|
53
|
+
command: options.command,
|
|
54
|
+
trigger: options.trigger,
|
|
55
|
+
result: options.result,
|
|
56
|
+
suites: options.suites,
|
|
57
|
+
tests: options.tests,
|
|
58
|
+
duration_ms: options.duration_ms,
|
|
59
|
+
exit_code: options.exit_code,
|
|
60
|
+
issues: options.issues,
|
|
61
|
+
root_cause: options.root_cause,
|
|
62
|
+
resolution: options.resolution,
|
|
63
|
+
changes_since_last: options.changes_since_last,
|
|
64
|
+
environment: options.environment,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Detect test result from test counts
|
|
69
|
+
* MCP-portable: pure function
|
|
70
|
+
*/
|
|
71
|
+
function detectResult(current, previous) {
|
|
72
|
+
if (current.passed === current.total) {
|
|
73
|
+
return 'PASSED';
|
|
74
|
+
}
|
|
75
|
+
if (!previous) {
|
|
76
|
+
return current.passed > 0 ? 'FAILED' : 'FAILED';
|
|
77
|
+
}
|
|
78
|
+
if (current.passed > previous.passed) {
|
|
79
|
+
return 'IMPROVED';
|
|
80
|
+
}
|
|
81
|
+
if (current.passed < previous.passed) {
|
|
82
|
+
return 'DEGRADED';
|
|
83
|
+
}
|
|
84
|
+
return 'FAILED';
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Calculate recovery info from previous run
|
|
88
|
+
* MCP-portable: pure function
|
|
89
|
+
*/
|
|
90
|
+
function calculateRecovery(currentRun, previousRun) {
|
|
91
|
+
if (!previousRun || previousRun.result === 'PASSED') {
|
|
92
|
+
return currentRun;
|
|
93
|
+
}
|
|
94
|
+
// Calculate time to fix
|
|
95
|
+
const currentTime = new Date(currentRun.timestamp).getTime();
|
|
96
|
+
const previousTime = new Date(previousRun.timestamp).getTime();
|
|
97
|
+
const time_to_fix_minutes = Math.round((currentTime - previousTime) / 1000 / 60);
|
|
98
|
+
return {
|
|
99
|
+
...currentRun,
|
|
100
|
+
recovery: {
|
|
101
|
+
previous_result: previousRun.result,
|
|
102
|
+
time_to_fix_minutes,
|
|
103
|
+
fix_summary: currentRun.resolution,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get last N test runs
|
|
109
|
+
* MCP-portable: pure function
|
|
110
|
+
*/
|
|
111
|
+
function getRecentRuns(taf, count) {
|
|
112
|
+
return taf.test_history.slice(-count);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get test runs within time range
|
|
116
|
+
* MCP-portable: pure function
|
|
117
|
+
*/
|
|
118
|
+
function getRunsInRange(taf, startDate, endDate) {
|
|
119
|
+
return taf.test_history.filter(run => {
|
|
120
|
+
const runDate = new Date(run.timestamp);
|
|
121
|
+
return runDate >= startDate && runDate <= endDate;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Update FAF integration fields
|
|
126
|
+
* MCP-portable: pure function
|
|
127
|
+
*/
|
|
128
|
+
function updateFAFIntegration(taf, options) {
|
|
129
|
+
return {
|
|
130
|
+
...taf,
|
|
131
|
+
last_updated: new Date().toISOString(),
|
|
132
|
+
faf_associated: options.faf_associated,
|
|
133
|
+
faf_location: options.faf_location,
|
|
134
|
+
faf_score: options.faf_score,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/taf/logger.ts"],"names":[],"mappings":"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"}
|