faf-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/CLAUDE.md +73 -0
  3. package/LICENSE +22 -0
  4. package/README.md +165 -0
  5. package/assets/Project-faf-pckg-json-README.png +0 -0
  6. package/assets/icons/faf-icon-128.png +0 -0
  7. package/assets/icons/faf-icon-256.png +0 -0
  8. package/assets/icons/faf-icon-48.png +0 -0
  9. package/assets/icons/faf-icon-512.png +0 -0
  10. package/assets/icons/orange-smiley.svg +6 -0
  11. package/dist/src/compiler/index.d.ts +7 -0
  12. package/dist/src/compiler/index.js +24 -0
  13. package/dist/src/compiler/index.js.map +1 -0
  14. package/dist/src/compiler/scorer.d.ts +53 -0
  15. package/dist/src/compiler/scorer.js +189 -0
  16. package/dist/src/compiler/scorer.js.map +1 -0
  17. package/dist/src/compiler/slot-validator.d.ts +32 -0
  18. package/dist/src/compiler/slot-validator.js +293 -0
  19. package/dist/src/compiler/slot-validator.js.map +1 -0
  20. package/dist/src/compiler/type-detector.d.ts +62 -0
  21. package/dist/src/compiler/type-detector.js +388 -0
  22. package/dist/src/compiler/type-detector.js.map +1 -0
  23. package/dist/src/config/visibility.d.ts +41 -0
  24. package/dist/src/config/visibility.js +158 -0
  25. package/dist/src/config/visibility.js.map +1 -0
  26. package/dist/src/faf-core/commands/audit.d.ts +21 -0
  27. package/dist/src/faf-core/commands/audit.js +83 -0
  28. package/dist/src/faf-core/commands/audit.js.map +1 -0
  29. package/dist/src/faf-core/commands/auto.d.ts +25 -0
  30. package/dist/src/faf-core/commands/auto.js +74 -0
  31. package/dist/src/faf-core/commands/auto.js.map +1 -0
  32. package/dist/src/faf-core/commands/bi-sync.d.ts +26 -0
  33. package/dist/src/faf-core/commands/bi-sync.js +157 -0
  34. package/dist/src/faf-core/commands/bi-sync.js.map +1 -0
  35. package/dist/src/faf-core/commands/doctor.d.ts +17 -0
  36. package/dist/src/faf-core/commands/doctor.js +198 -0
  37. package/dist/src/faf-core/commands/doctor.js.map +1 -0
  38. package/dist/src/faf-core/commands/enhance.d.ts +46 -0
  39. package/dist/src/faf-core/commands/enhance.js +360 -0
  40. package/dist/src/faf-core/commands/enhance.js.map +1 -0
  41. package/dist/src/faf-core/commands/formats.d.ts +22 -0
  42. package/dist/src/faf-core/commands/formats.js +117 -0
  43. package/dist/src/faf-core/commands/formats.js.map +1 -0
  44. package/dist/src/faf-core/commands/init.d.ts +26 -0
  45. package/dist/src/faf-core/commands/init.js +114 -0
  46. package/dist/src/faf-core/commands/init.js.map +1 -0
  47. package/dist/src/faf-core/commands/innit.d.ts +7 -0
  48. package/dist/src/faf-core/commands/innit.js +13 -0
  49. package/dist/src/faf-core/commands/innit.js.map +1 -0
  50. package/dist/src/faf-core/commands/migrate.d.ts +15 -0
  51. package/dist/src/faf-core/commands/migrate.js +86 -0
  52. package/dist/src/faf-core/commands/migrate.js.map +1 -0
  53. package/dist/src/faf-core/commands/quick.d.ts +16 -0
  54. package/dist/src/faf-core/commands/quick.js +184 -0
  55. package/dist/src/faf-core/commands/quick.js.map +1 -0
  56. package/dist/src/faf-core/commands/score.d.ts +47 -0
  57. package/dist/src/faf-core/commands/score.js +49 -0
  58. package/dist/src/faf-core/commands/score.js.map +1 -0
  59. package/dist/src/faf-core/commands/sync.d.ts +16 -0
  60. package/dist/src/faf-core/commands/sync.js +210 -0
  61. package/dist/src/faf-core/commands/sync.js.map +1 -0
  62. package/dist/src/faf-core/commands/update.d.ts +12 -0
  63. package/dist/src/faf-core/commands/update.js +46 -0
  64. package/dist/src/faf-core/commands/update.js.map +1 -0
  65. package/dist/src/faf-core/commands/validate.d.ts +21 -0
  66. package/dist/src/faf-core/commands/validate.js +81 -0
  67. package/dist/src/faf-core/commands/validate.js.map +1 -0
  68. package/dist/src/faf-core/compiler/faf-compiler.d.ts +138 -0
  69. package/dist/src/faf-core/compiler/faf-compiler.js +794 -0
  70. package/dist/src/faf-core/compiler/faf-compiler.js.map +1 -0
  71. package/dist/src/faf-core/engines/dependency-tsa.d.ts +88 -0
  72. package/dist/src/faf-core/engines/dependency-tsa.js +361 -0
  73. package/dist/src/faf-core/engines/dependency-tsa.js.map +1 -0
  74. package/dist/src/faf-core/engines/fab-formats-processor.d.ts +166 -0
  75. package/dist/src/faf-core/engines/fab-formats-processor.js +1274 -0
  76. package/dist/src/faf-core/engines/fab-formats-processor.js.map +1 -0
  77. package/dist/src/faf-core/engines/faf-dna.d.ts +159 -0
  78. package/dist/src/faf-core/engines/faf-dna.js +554 -0
  79. package/dist/src/faf-core/engines/faf-dna.js.map +1 -0
  80. package/dist/src/faf-core/engines/relentless-context-extractor.d.ts +100 -0
  81. package/dist/src/faf-core/engines/relentless-context-extractor.js +625 -0
  82. package/dist/src/faf-core/engines/relentless-context-extractor.js.map +1 -0
  83. package/dist/src/faf-core/fix-once/colors.d.ts +104 -0
  84. package/dist/src/faf-core/fix-once/colors.js +236 -0
  85. package/dist/src/faf-core/fix-once/colors.js.map +1 -0
  86. package/dist/src/faf-core/fix-once/types.d.ts +257 -0
  87. package/dist/src/faf-core/fix-once/types.js +26 -0
  88. package/dist/src/faf-core/fix-once/types.js.map +1 -0
  89. package/dist/src/faf-core/fix-once/yaml.d.ts +57 -0
  90. package/dist/src/faf-core/fix-once/yaml.js +172 -0
  91. package/dist/src/faf-core/fix-once/yaml.js.map +1 -0
  92. package/dist/src/faf-core/generators/faf-generator-championship.d.ts +16 -0
  93. package/dist/src/faf-core/generators/faf-generator-championship.js +462 -0
  94. package/dist/src/faf-core/generators/faf-generator-championship.js.map +1 -0
  95. package/dist/src/faf-core/utils/balance-visualizer.d.ts +37 -0
  96. package/dist/src/faf-core/utils/balance-visualizer.js +197 -0
  97. package/dist/src/faf-core/utils/balance-visualizer.js.map +1 -0
  98. package/dist/src/faf-core/utils/championship-style.d.ts +109 -0
  99. package/dist/src/faf-core/utils/championship-style.js +219 -0
  100. package/dist/src/faf-core/utils/championship-style.js.map +1 -0
  101. package/dist/src/faf-core/utils/chrome-extension-detector.d.ts +73 -0
  102. package/dist/src/faf-core/utils/chrome-extension-detector.js +268 -0
  103. package/dist/src/faf-core/utils/chrome-extension-detector.js.map +1 -0
  104. package/dist/src/faf-core/utils/fafignore-parser.d.ts +20 -0
  105. package/dist/src/faf-core/utils/fafignore-parser.js +178 -0
  106. package/dist/src/faf-core/utils/fafignore-parser.js.map +1 -0
  107. package/dist/src/faf-core/utils/file-utils.d.ts +112 -0
  108. package/dist/src/faf-core/utils/file-utils.js +846 -0
  109. package/dist/src/faf-core/utils/file-utils.js.map +1 -0
  110. package/dist/src/faf-core/utils/native-file-finder.d.ts +115 -0
  111. package/dist/src/faf-core/utils/native-file-finder.js +211 -0
  112. package/dist/src/faf-core/utils/native-file-finder.js.map +1 -0
  113. package/dist/src/faf-core/utils/platform-detector.d.ts +30 -0
  114. package/dist/src/faf-core/utils/platform-detector.js +218 -0
  115. package/dist/src/faf-core/utils/platform-detector.js.map +1 -0
  116. package/dist/src/faf-core/utils/technical-credit.d.ts +35 -0
  117. package/dist/src/faf-core/utils/technical-credit.js +286 -0
  118. package/dist/src/faf-core/utils/technical-credit.js.map +1 -0
  119. package/dist/src/faf-core/utils/yaml-generator.d.ts +41 -0
  120. package/dist/src/faf-core/utils/yaml-generator.js +360 -0
  121. package/dist/src/faf-core/utils/yaml-generator.js.map +1 -0
  122. package/dist/src/handlers/behavioral-instruction.d.ts +16 -0
  123. package/dist/src/handlers/behavioral-instruction.js +43 -0
  124. package/dist/src/handlers/behavioral-instruction.js.map +1 -0
  125. package/dist/src/handlers/championship-tools.d.ts +113 -0
  126. package/dist/src/handlers/championship-tools.js +2602 -0
  127. package/dist/src/handlers/championship-tools.js.map +1 -0
  128. package/dist/src/handlers/engine-adapter.d.ts +28 -0
  129. package/dist/src/handlers/engine-adapter.js +603 -0
  130. package/dist/src/handlers/engine-adapter.js.map +1 -0
  131. package/dist/src/handlers/fileHandler.d.ts +36 -0
  132. package/dist/src/handlers/fileHandler.js +246 -0
  133. package/dist/src/handlers/fileHandler.js.map +1 -0
  134. package/dist/src/handlers/resources.d.ts +18 -0
  135. package/dist/src/handlers/resources.js +78 -0
  136. package/dist/src/handlers/resources.js.map +1 -0
  137. package/dist/src/handlers/tool-registry.d.ts +23 -0
  138. package/dist/src/handlers/tool-registry.js +68 -0
  139. package/dist/src/handlers/tool-registry.js.map +1 -0
  140. package/dist/src/handlers/tool-types.d.ts +167 -0
  141. package/dist/src/handlers/tool-types.js +7 -0
  142. package/dist/src/handlers/tool-types.js.map +1 -0
  143. package/dist/src/handlers/tools.d.ts +25 -0
  144. package/dist/src/handlers/tools.js +1168 -0
  145. package/dist/src/handlers/tools.js.map +1 -0
  146. package/dist/src/index.d.ts +2 -0
  147. package/dist/src/index.js +17 -0
  148. package/dist/src/index.js.map +1 -0
  149. package/dist/src/server.d.ts +28 -0
  150. package/dist/src/server.js +179 -0
  151. package/dist/src/server.js.map +1 -0
  152. package/dist/src/test-all-functions.d.ts +15 -0
  153. package/dist/src/test-all-functions.js +163 -0
  154. package/dist/src/test-all-functions.js.map +1 -0
  155. package/dist/src/types/mcp-tools.d.ts +53 -0
  156. package/dist/src/types/mcp-tools.js +77 -0
  157. package/dist/src/types/mcp-tools.js.map +1 -0
  158. package/dist/src/types/project-types.d.ts +22 -0
  159. package/dist/src/types/project-types.js +85 -0
  160. package/dist/src/types/project-types.js.map +1 -0
  161. package/dist/src/types/slots.d.ts +39 -0
  162. package/dist/src/types/slots.js +162 -0
  163. package/dist/src/types/slots.js.map +1 -0
  164. package/dist/src/types/tool-visibility.d.ts +36 -0
  165. package/dist/src/types/tool-visibility.js +510 -0
  166. package/dist/src/types/tool-visibility.js.map +1 -0
  167. package/dist/src/utils/auto-path-detection.d.ts +26 -0
  168. package/dist/src/utils/auto-path-detection.js +198 -0
  169. package/dist/src/utils/auto-path-detection.js.map +1 -0
  170. package/dist/src/utils/championship-format.d.ts +30 -0
  171. package/dist/src/utils/championship-format.js +79 -0
  172. package/dist/src/utils/championship-format.js.map +1 -0
  173. package/dist/src/utils/cli-detector.d.ts +20 -0
  174. package/dist/src/utils/cli-detector.js +230 -0
  175. package/dist/src/utils/cli-detector.js.map +1 -0
  176. package/dist/src/utils/display-protocol.d.ts +57 -0
  177. package/dist/src/utils/display-protocol.js +131 -0
  178. package/dist/src/utils/display-protocol.js.map +1 -0
  179. package/dist/src/utils/faf-file-finder.d.ts +59 -0
  180. package/dist/src/utils/faf-file-finder.js +139 -0
  181. package/dist/src/utils/faf-file-finder.js.map +1 -0
  182. package/dist/src/utils/fuzzy-detector.d.ts +56 -0
  183. package/dist/src/utils/fuzzy-detector.js +221 -0
  184. package/dist/src/utils/fuzzy-detector.js.map +1 -0
  185. package/dist/src/utils/path-resolver.d.ts +51 -0
  186. package/dist/src/utils/path-resolver.js +214 -0
  187. package/dist/src/utils/path-resolver.js.map +1 -0
  188. package/dist/src/utils/type-guards.d.ts +9 -0
  189. package/dist/src/utils/type-guards.js +27 -0
  190. package/dist/src/utils/type-guards.js.map +1 -0
  191. package/dist/src/utils/username-detector.d.ts +27 -0
  192. package/dist/src/utils/username-detector.js +90 -0
  193. package/dist/src/utils/username-detector.js.map +1 -0
  194. package/dist/src/utils/visual-style.d.ts +62 -0
  195. package/dist/src/utils/visual-style.js +164 -0
  196. package/dist/src/utils/visual-style.js.map +1 -0
  197. package/dist/src/version.d.ts +9 -0
  198. package/dist/src/version.js +37 -0
  199. package/dist/src/version.js.map +1 -0
  200. package/package.json +114 -0
  201. package/scripts/discord-sync-curated.js +233 -0
  202. package/scripts/discord-sync-final.js +218 -0
  203. package/scripts/discord-sync-simple.js +175 -0
  204. package/scripts/discord-sync-working.js +187 -0
  205. package/scripts/discord-sync.js +181 -0
  206. package/scripts/postinstall.js +46 -0
  207. package/skill/SKILL.md +385 -0
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 💎 Technical Credit System - Revolutionary credit generation instead of debt
3
+ * Transform developer psychology from anxiety to confidence
4
+ */
5
+ export interface TechnicalCredit {
6
+ current: number;
7
+ earned: CreditSource[];
8
+ impact: string[];
9
+ trending: 'up' | 'down' | 'stable';
10
+ lastUpdated: Date;
11
+ }
12
+ export interface CreditSource {
13
+ action: string;
14
+ points: number;
15
+ timestamp: Date;
16
+ impact: string;
17
+ category: CreditCategory;
18
+ }
19
+ export type CreditCategory = 'context_improvement' | 'ai_compatibility' | 'performance' | 'completeness' | 'sync_harmony' | 'stack_discovery' | 'trust_building';
20
+ /**
21
+ * Load current technical credit status
22
+ */
23
+ export declare function loadTechnicalCredit(fafPath?: string): Promise<TechnicalCredit>;
24
+ /**
25
+ * Award technical credit for specific actions
26
+ */
27
+ export declare function awardCredit(action: string, category: CreditCategory, impact: string, fafPath?: string): Promise<number>;
28
+ /**
29
+ * Display technical credit dashboard
30
+ */
31
+ export declare function displayCreditDashboard(fafPath?: string): Promise<void>;
32
+ /**
33
+ * Auto-award credit for common actions
34
+ */
35
+ export declare function autoAwardCredit(trigger: 'init_success' | 'score_improved' | 'sync_success' | 'validation_passed' | 'ai_happy', fafPath?: string): Promise<void>;
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ /**
3
+ * 💎 Technical Credit System - Revolutionary credit generation instead of debt
4
+ * Transform developer psychology from anxiety to confidence
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.loadTechnicalCredit = loadTechnicalCredit;
11
+ exports.awardCredit = awardCredit;
12
+ exports.displayCreditDashboard = displayCreditDashboard;
13
+ exports.autoAwardCredit = autoAwardCredit;
14
+ const fs_1 = require("fs");
15
+ const path_1 = __importDefault(require("path"));
16
+ const os_1 = __importDefault(require("os"));
17
+ const championship_style_1 = require("./championship-style");
18
+ // Credit scoring system
19
+ const CREDIT_VALUES = {
20
+ context_improvement: 5,
21
+ ai_compatibility: 8,
22
+ performance: 3,
23
+ completeness: 6,
24
+ sync_harmony: 4,
25
+ stack_discovery: 7,
26
+ trust_building: 10
27
+ };
28
+ /**
29
+ * Get technical credit cache file path
30
+ */
31
+ function getCreditCachePath() {
32
+ const cacheDir = path_1.default.join(os_1.default.homedir(), '.faf-cli-cache');
33
+ return path_1.default.join(cacheDir, 'technical-credit.json');
34
+ }
35
+ /**
36
+ * Ensure cache directory exists
37
+ */
38
+ async function ensureCacheDir() {
39
+ const cacheDir = path_1.default.dirname(getCreditCachePath());
40
+ try {
41
+ await fs_1.promises.mkdir(cacheDir, { recursive: true });
42
+ }
43
+ catch {
44
+ // Directory already exists, ignore
45
+ }
46
+ }
47
+ /**
48
+ * Load current technical credit status
49
+ */
50
+ async function loadTechnicalCredit(fafPath) {
51
+ try {
52
+ const cachePath = getCreditCachePath();
53
+ const cacheData = await fs_1.promises.readFile(cachePath, 'utf-8');
54
+ const allCredits = JSON.parse(cacheData);
55
+ // Get credit for specific project or global
56
+ const projectKey = fafPath ? path_1.default.resolve(fafPath) : 'global';
57
+ const credit = allCredits[projectKey];
58
+ if (!credit) {
59
+ return createInitialCredit();
60
+ }
61
+ // Convert timestamps back to Date objects
62
+ credit.lastUpdated = new Date(credit.lastUpdated);
63
+ credit.earned = credit.earned.map((source) => ({
64
+ ...source,
65
+ timestamp: new Date(source.timestamp)
66
+ }));
67
+ return credit;
68
+ }
69
+ catch {
70
+ return createInitialCredit();
71
+ }
72
+ }
73
+ /**
74
+ * Create initial credit state
75
+ */
76
+ function createInitialCredit() {
77
+ return {
78
+ current: 0,
79
+ earned: [],
80
+ impact: [],
81
+ trending: 'stable',
82
+ lastUpdated: new Date()
83
+ };
84
+ }
85
+ /**
86
+ * Award technical credit for specific actions
87
+ */
88
+ async function awardCredit(action, category, impact, fafPath) {
89
+ try {
90
+ await ensureCacheDir();
91
+ // Load current credit
92
+ const credit = await loadTechnicalCredit(fafPath);
93
+ // Calculate points
94
+ const points = CREDIT_VALUES[category];
95
+ // Add new credit source
96
+ const newSource = {
97
+ action,
98
+ points,
99
+ timestamp: new Date(),
100
+ impact,
101
+ category
102
+ };
103
+ credit.earned.push(newSource);
104
+ credit.current += points;
105
+ credit.impact.push(impact);
106
+ credit.lastUpdated = new Date();
107
+ // Calculate trending
108
+ const recentEarnings = credit.earned
109
+ .filter(s => Date.now() - s.timestamp.getTime() < 7 * 24 * 60 * 60 * 1000) // Last 7 days
110
+ .reduce((sum, s) => sum + s.points, 0);
111
+ if (recentEarnings > 20) {
112
+ credit.trending = 'up';
113
+ }
114
+ else if (recentEarnings < 5) {
115
+ credit.trending = 'down';
116
+ }
117
+ else {
118
+ credit.trending = 'stable';
119
+ }
120
+ // Save updated credit (will silently fail if no permissions)
121
+ await saveTechnicalCredit(credit, fafPath);
122
+ // Check if we can actually write to cache before showing message
123
+ const cacheDir = path_1.default.join(require('os').homedir(), '.faf-cli-cache');
124
+ try {
125
+ await fs_1.promises.access(cacheDir, fs_1.promises.constants.W_OK);
126
+ // Only show achievement message if we have write access
127
+ console.log(championship_style_1.FAF_COLORS.fafGreen(`${championship_style_1.FAF_ICONS.gem} ${championship_style_1.BRAND_MESSAGES.achievement} +${points} points`));
128
+ console.log(championship_style_1.FAF_COLORS.fafCyan(`└─ ${impact}`));
129
+ }
130
+ catch {
131
+ // No write access - skip the message
132
+ }
133
+ return points;
134
+ }
135
+ catch (error) {
136
+ // Silently fail - technical credit is optional
137
+ return 0;
138
+ }
139
+ }
140
+ /**
141
+ * Save technical credit to cache
142
+ */
143
+ async function saveTechnicalCredit(credit, fafPath) {
144
+ try {
145
+ const cachePath = getCreditCachePath();
146
+ // Load existing cache
147
+ let allCredits = {};
148
+ try {
149
+ const existing = await fs_1.promises.readFile(cachePath, 'utf-8');
150
+ allCredits = JSON.parse(existing);
151
+ }
152
+ catch {
153
+ // Cache doesn't exist yet, start fresh
154
+ }
155
+ // Update credit for specific project or global
156
+ const projectKey = fafPath ? path_1.default.resolve(fafPath) : 'global';
157
+ allCredits[projectKey] = credit;
158
+ // Save updated cache
159
+ await fs_1.promises.writeFile(cachePath, JSON.stringify(allCredits, null, 2));
160
+ }
161
+ catch (error) {
162
+ // Silently fail - technical credit is optional and shouldn't scare newbies
163
+ // The error is usually just permission issues in sandboxed environments
164
+ }
165
+ }
166
+ /**
167
+ * Display technical credit dashboard
168
+ */
169
+ async function displayCreditDashboard(fafPath) {
170
+ const credit = await loadTechnicalCredit(fafPath);
171
+ console.log(championship_style_1.FAF_COLORS.fafCyan(`${championship_style_1.FAF_ICONS.gem} Technical Credit Dashboard`));
172
+ console.log(championship_style_1.FAF_COLORS.fafCyan('├─────────────────────────────────'));
173
+ // Current balance with trending indicator
174
+ const trendingEmoji = credit.trending === 'up' ? '📈' :
175
+ credit.trending === 'down' ? '📉' : '➡️';
176
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan('├─ ')}Balance: ${championship_style_1.FAF_COLORS.fafGreen(`${credit.current} credits`)} ${trendingEmoji}`);
177
+ // Credit level
178
+ const level = getCreditLevel(credit.current);
179
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan('├─ ')}Level: ${level.name} ${level.emoji}`);
180
+ // Recent earnings
181
+ const recentEarnings = credit.earned
182
+ .filter(s => Date.now() - s.timestamp.getTime() < 7 * 24 * 60 * 60 * 1000)
183
+ .length;
184
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan('├─ ')}Recent Activity: ${recentEarnings} actions (7 days)`);
185
+ // Top credit sources
186
+ if (credit.earned.length > 0) {
187
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan('├─ ')}Top Sources:`);
188
+ const topSources = credit.earned
189
+ .slice(-3)
190
+ .reverse();
191
+ topSources.forEach(source => {
192
+ const timeAgo = getTimeAgo(source.timestamp);
193
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan('│ ')}+${source.points} ${source.impact} (${timeAgo})`);
194
+ });
195
+ }
196
+ console.log(championship_style_1.FAF_COLORS.fafCyan('└─────────────────────────────────'));
197
+ // Championship message
198
+ if (credit.current >= 100) {
199
+ console.log();
200
+ console.log(championship_style_1.FAF_COLORS.fafGreen(`${championship_style_1.FAF_ICONS.trophy} ${championship_style_1.BRAND_MESSAGES.podium_celebration}`));
201
+ }
202
+ else if (credit.trending === 'up') {
203
+ console.log();
204
+ console.log(championship_style_1.FAF_COLORS.fafOrange(`${championship_style_1.FAF_ICONS.chart_up} Keep building credit! Next milestone: ${getNextMilestone(credit.current)} credits`));
205
+ }
206
+ }
207
+ /**
208
+ * Get credit level based on points
209
+ */
210
+ function getCreditLevel(points) {
211
+ if (points >= 200) {
212
+ return { name: 'Championship', emoji: '🏆' };
213
+ }
214
+ if (points >= 100) {
215
+ return { name: 'Professional', emoji: '💎' };
216
+ }
217
+ if (points >= 50) {
218
+ return { name: 'Advanced', emoji: '⚡️' };
219
+ }
220
+ if (points >= 20) {
221
+ return { name: 'Developing', emoji: '🚀' };
222
+ }
223
+ if (points >= 5) {
224
+ return { name: 'Started', emoji: '🌱' };
225
+ }
226
+ return { name: 'Beginner', emoji: '🏁' };
227
+ }
228
+ /**
229
+ * Get next milestone
230
+ */
231
+ function getNextMilestone(current) {
232
+ const milestones = [5, 20, 50, 100, 200];
233
+ return milestones.find(m => m > current) || current + 100;
234
+ }
235
+ /**
236
+ * Get human readable time ago
237
+ */
238
+ function getTimeAgo(date) {
239
+ const now = new Date();
240
+ const diffMs = now.getTime() - date.getTime();
241
+ const diffMins = Math.floor(diffMs / (1000 * 60));
242
+ const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
243
+ const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
244
+ if (diffMins < 60) {
245
+ return `${diffMins}m ago`;
246
+ }
247
+ if (diffHours < 24) {
248
+ return `${diffHours}h ago`;
249
+ }
250
+ return `${diffDays}d ago`;
251
+ }
252
+ /**
253
+ * Auto-award credit for common actions
254
+ */
255
+ async function autoAwardCredit(trigger, fafPath) {
256
+ const actions = {
257
+ init_success: {
258
+ action: 'Created .faf file',
259
+ category: 'context_improvement',
260
+ impact: 'Perfect AI context established'
261
+ },
262
+ score_improved: {
263
+ action: 'Improved context score',
264
+ category: 'completeness',
265
+ impact: 'Better AI understanding achieved'
266
+ },
267
+ sync_success: {
268
+ action: 'Synchronized files',
269
+ category: 'sync_harmony',
270
+ impact: 'Bi-sync harmony maintained'
271
+ },
272
+ validation_passed: {
273
+ action: 'Validation successful',
274
+ category: 'context_improvement',
275
+ impact: 'Context quality verified'
276
+ },
277
+ ai_happy: {
278
+ action: 'AI happiness improved',
279
+ category: 'ai_compatibility',
280
+ impact: 'AI trust and confidence boosted'
281
+ }
282
+ };
283
+ const config = actions[trigger];
284
+ await awardCredit(config.action, config.category, config.impact, fafPath);
285
+ }
286
+ //# sourceMappingURL=technical-credit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"technical-credit.js","sourceRoot":"","sources":["../../../../src/faf-core/utils/technical-credit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * AI-Optimized YAML Generator v2.5.0
3
+ * Generates .faf files with instant AI onboarding structure
4
+ */
5
+ export declare function unescapeFromYaml(value: string): string;
6
+ export declare function escapeForYaml(value: string | undefined): string;
7
+ export declare function generateFafContent(projectData: {
8
+ projectName: string;
9
+ projectGoal?: string | undefined;
10
+ mainLanguage: string;
11
+ framework: string;
12
+ cssFramework?: string;
13
+ uiLibrary?: string;
14
+ stateManagement?: string;
15
+ backend: string;
16
+ apiType: string;
17
+ server: string;
18
+ database: string;
19
+ connection: string;
20
+ hosting: string;
21
+ buildTool: string;
22
+ packageManager?: string;
23
+ cicd: string;
24
+ fafScore: number;
25
+ slotBasedPercentage: number;
26
+ projectType?: string;
27
+ targetUser?: string;
28
+ coreProblem?: string;
29
+ missionPurpose?: string;
30
+ deploymentMarket?: string;
31
+ timeline?: string;
32
+ approach?: string;
33
+ additionalWho?: string[];
34
+ additionalWhat?: string[];
35
+ additionalWhy?: string[];
36
+ additionalWhere?: string[];
37
+ additionalWhen?: string[];
38
+ additionalHow?: string[];
39
+ projectDetailsScore?: number;
40
+ projectSuccessRate?: number;
41
+ }): string;