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.
Files changed (105) hide show
  1. package/README.md +275 -25
  2. package/dist/big-orange/compare.d.ts.map +1 -1
  3. package/dist/big-orange/compare.js +14 -16
  4. package/dist/big-orange/compare.js.map +1 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +137 -1
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/auto.d.ts.map +1 -1
  9. package/dist/commands/auto.js +69 -12
  10. package/dist/commands/auto.js.map +1 -1
  11. package/dist/commands/bi-sync.d.ts.map +1 -1
  12. package/dist/commands/bi-sync.js +10 -3
  13. package/dist/commands/bi-sync.js.map +1 -1
  14. package/dist/commands/drift.d.ts +16 -0
  15. package/dist/commands/drift.d.ts.map +1 -0
  16. package/dist/commands/drift.js +517 -0
  17. package/dist/commands/drift.js.map +1 -0
  18. package/dist/commands/git.d.ts +25 -0
  19. package/dist/commands/git.d.ts.map +1 -0
  20. package/dist/commands/git.js +355 -0
  21. package/dist/commands/git.js.map +1 -0
  22. package/dist/commands/init.d.ts.map +1 -1
  23. package/dist/commands/init.js +5 -4
  24. package/dist/commands/init.js.map +1 -1
  25. package/dist/commands/migrate.d.ts +11 -0
  26. package/dist/commands/migrate.d.ts.map +1 -0
  27. package/dist/commands/migrate.js +85 -0
  28. package/dist/commands/migrate.js.map +1 -0
  29. package/dist/commands/rename.d.ts +18 -0
  30. package/dist/commands/rename.d.ts.map +1 -0
  31. package/dist/commands/rename.js +211 -0
  32. package/dist/commands/rename.js.map +1 -0
  33. package/dist/commands/taf-init.d.ts +14 -0
  34. package/dist/commands/taf-init.d.ts.map +1 -0
  35. package/dist/commands/taf-init.js +138 -0
  36. package/dist/commands/taf-init.js.map +1 -0
  37. package/dist/commands/taf-log.d.ts +30 -0
  38. package/dist/commands/taf-log.d.ts.map +1 -0
  39. package/dist/commands/taf-log.js +303 -0
  40. package/dist/commands/taf-log.js.map +1 -0
  41. package/dist/commands/taf-stats.d.ts +8 -0
  42. package/dist/commands/taf-stats.d.ts.map +1 -0
  43. package/dist/commands/taf-stats.js +133 -0
  44. package/dist/commands/taf-stats.js.map +1 -0
  45. package/dist/commands/taf-validate.d.ts +8 -0
  46. package/dist/commands/taf-validate.d.ts.map +1 -0
  47. package/dist/commands/taf-validate.js +108 -0
  48. package/dist/commands/taf-validate.js.map +1 -0
  49. package/dist/commands/taf.d.ts +13 -0
  50. package/dist/commands/taf.d.ts.map +1 -0
  51. package/dist/commands/taf.js +97 -0
  52. package/dist/commands/taf.js.map +1 -0
  53. package/dist/compiler/faf-compiler.d.ts.map +1 -1
  54. package/dist/compiler/faf-compiler.js +18 -0
  55. package/dist/compiler/faf-compiler.js.map +1 -1
  56. package/dist/generators/faf-generator-championship.d.ts.map +1 -1
  57. package/dist/generators/faf-generator-championship.js +1 -0
  58. package/dist/generators/faf-generator-championship.js.map +1 -1
  59. package/dist/github/github-extractor.d.ts +56 -0
  60. package/dist/github/github-extractor.d.ts.map +1 -0
  61. package/dist/github/github-extractor.js +328 -0
  62. package/dist/github/github-extractor.js.map +1 -0
  63. package/dist/github/popular-repos.d.ts +43 -0
  64. package/dist/github/popular-repos.d.ts.map +1 -0
  65. package/dist/github/popular-repos.js +205 -0
  66. package/dist/github/popular-repos.js.map +1 -0
  67. package/dist/github/repo-selector.d.ts +48 -0
  68. package/dist/github/repo-selector.d.ts.map +1 -0
  69. package/dist/github/repo-selector.js +277 -0
  70. package/dist/github/repo-selector.js.map +1 -0
  71. package/dist/taf/index.d.ts +17 -0
  72. package/dist/taf/index.d.ts.map +1 -0
  73. package/dist/taf/index.js +57 -0
  74. package/dist/taf/index.js.map +1 -0
  75. package/dist/taf/logger.d.ts +88 -0
  76. package/dist/taf/logger.d.ts.map +1 -0
  77. package/dist/taf/logger.js +137 -0
  78. package/dist/taf/logger.js.map +1 -0
  79. package/dist/taf/parser.d.ts +32 -0
  80. package/dist/taf/parser.d.ts.map +1 -0
  81. package/dist/taf/parser.js +161 -0
  82. package/dist/taf/parser.js.map +1 -0
  83. package/dist/taf/stats.d.ts +31 -0
  84. package/dist/taf/stats.d.ts.map +1 -0
  85. package/dist/taf/stats.js +182 -0
  86. package/dist/taf/stats.js.map +1 -0
  87. package/dist/taf/types.d.ts +77 -0
  88. package/dist/taf/types.d.ts.map +1 -0
  89. package/dist/taf/types.js +9 -0
  90. package/dist/taf/types.js.map +1 -0
  91. package/dist/taf/validator.d.ts +18 -0
  92. package/dist/taf/validator.d.ts.map +1 -0
  93. package/dist/taf/validator.js +148 -0
  94. package/dist/taf/validator.js.map +1 -0
  95. package/dist/utils/file-utils.d.ts +10 -0
  96. package/dist/utils/file-utils.d.ts.map +1 -1
  97. package/dist/utils/file-utils.js +196 -33
  98. package/dist/utils/file-utils.js.map +1 -1
  99. package/dist/utils/native-file-finder.js +1 -1
  100. package/dist/utils/native-file-finder.js.map +1 -1
  101. package/dist/utils/yaml-generator.d.ts +1 -0
  102. package/dist/utils/yaml-generator.d.ts.map +1 -1
  103. package/dist/utils/yaml-generator.js +1 -0
  104. package/dist/utils/yaml-generator.js.map +1 -1
  105. 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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"}