eff-u-code 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +256 -0
  3. package/bin/fuck-u-code-mcp.js +2 -0
  4. package/bin/fuck-u-code.js +2 -0
  5. package/bin/postinstall.js +53 -0
  6. package/dist/ai/index.d.ts +34 -0
  7. package/dist/ai/index.d.ts.map +1 -0
  8. package/dist/ai/index.js +227 -0
  9. package/dist/ai/index.js.map +1 -0
  10. package/dist/ai/prompts/code-review.d.ts +9 -0
  11. package/dist/ai/prompts/code-review.d.ts.map +1 -0
  12. package/dist/ai/prompts/code-review.js +61 -0
  13. package/dist/ai/prompts/code-review.js.map +1 -0
  14. package/dist/ai/providers/anthropic.d.ts +11 -0
  15. package/dist/ai/providers/anthropic.d.ts.map +1 -0
  16. package/dist/ai/providers/anthropic.js +60 -0
  17. package/dist/ai/providers/anthropic.js.map +1 -0
  18. package/dist/ai/providers/fetch.d.ts +10 -0
  19. package/dist/ai/providers/fetch.d.ts.map +1 -0
  20. package/dist/ai/providers/fetch.js +50 -0
  21. package/dist/ai/providers/fetch.js.map +1 -0
  22. package/dist/ai/providers/gemini.d.ts +12 -0
  23. package/dist/ai/providers/gemini.d.ts.map +1 -0
  24. package/dist/ai/providers/gemini.js +66 -0
  25. package/dist/ai/providers/gemini.js.map +1 -0
  26. package/dist/ai/providers/ollama.d.ts +11 -0
  27. package/dist/ai/providers/ollama.d.ts.map +1 -0
  28. package/dist/ai/providers/ollama.js +54 -0
  29. package/dist/ai/providers/ollama.js.map +1 -0
  30. package/dist/ai/providers/openai.d.ts +11 -0
  31. package/dist/ai/providers/openai.d.ts.map +1 -0
  32. package/dist/ai/providers/openai.js +52 -0
  33. package/dist/ai/providers/openai.js.map +1 -0
  34. package/dist/ai/selector.d.ts +19 -0
  35. package/dist/ai/selector.d.ts.map +1 -0
  36. package/dist/ai/selector.js +145 -0
  37. package/dist/ai/selector.js.map +1 -0
  38. package/dist/ai/types.d.ts +120 -0
  39. package/dist/ai/types.d.ts.map +1 -0
  40. package/dist/ai/types.js +6 -0
  41. package/dist/ai/types.js.map +1 -0
  42. package/dist/analyzer/concurrent-analyzer.d.ts +11 -0
  43. package/dist/analyzer/concurrent-analyzer.d.ts.map +1 -0
  44. package/dist/analyzer/concurrent-analyzer.js +67 -0
  45. package/dist/analyzer/concurrent-analyzer.js.map +1 -0
  46. package/dist/analyzer/file-discovery.d.ts +23 -0
  47. package/dist/analyzer/file-discovery.d.ts.map +1 -0
  48. package/dist/analyzer/file-discovery.js +64 -0
  49. package/dist/analyzer/file-discovery.js.map +1 -0
  50. package/dist/analyzer/index.d.ts +27 -0
  51. package/dist/analyzer/index.d.ts.map +1 -0
  52. package/dist/analyzer/index.js +64 -0
  53. package/dist/analyzer/index.js.map +1 -0
  54. package/dist/cli/commands/ai-review.d.ts +6 -0
  55. package/dist/cli/commands/ai-review.d.ts.map +1 -0
  56. package/dist/cli/commands/ai-review.js +213 -0
  57. package/dist/cli/commands/ai-review.js.map +1 -0
  58. package/dist/cli/commands/analyze.d.ts +6 -0
  59. package/dist/cli/commands/analyze.d.ts.map +1 -0
  60. package/dist/cli/commands/analyze.js +145 -0
  61. package/dist/cli/commands/analyze.js.map +1 -0
  62. package/dist/cli/commands/config.d.ts +6 -0
  63. package/dist/cli/commands/config.d.ts.map +1 -0
  64. package/dist/cli/commands/config.js +147 -0
  65. package/dist/cli/commands/config.js.map +1 -0
  66. package/dist/cli/commands/mcp-install.d.ts +9 -0
  67. package/dist/cli/commands/mcp-install.d.ts.map +1 -0
  68. package/dist/cli/commands/mcp-install.js +102 -0
  69. package/dist/cli/commands/mcp-install.js.map +1 -0
  70. package/dist/cli/index.d.ts +7 -0
  71. package/dist/cli/index.d.ts.map +1 -0
  72. package/dist/cli/index.js +69 -0
  73. package/dist/cli/index.js.map +1 -0
  74. package/dist/cli/output/ai-review-output.d.ts +20 -0
  75. package/dist/cli/output/ai-review-output.d.ts.map +1 -0
  76. package/dist/cli/output/ai-review-output.js +324 -0
  77. package/dist/cli/output/ai-review-output.js.map +1 -0
  78. package/dist/cli/output/console.d.ts +31 -0
  79. package/dist/cli/output/console.d.ts.map +1 -0
  80. package/dist/cli/output/console.js +571 -0
  81. package/dist/cli/output/console.js.map +1 -0
  82. package/dist/cli/output/html.d.ts +20 -0
  83. package/dist/cli/output/html.d.ts.map +1 -0
  84. package/dist/cli/output/html.js +339 -0
  85. package/dist/cli/output/html.js.map +1 -0
  86. package/dist/cli/output/json.d.ts +8 -0
  87. package/dist/cli/output/json.d.ts.map +1 -0
  88. package/dist/cli/output/json.js +46 -0
  89. package/dist/cli/output/json.js.map +1 -0
  90. package/dist/cli/output/markdown.d.ts +17 -0
  91. package/dist/cli/output/markdown.d.ts.map +1 -0
  92. package/dist/cli/output/markdown.js +323 -0
  93. package/dist/cli/output/markdown.js.map +1 -0
  94. package/dist/cli/output/stats.d.ts +35 -0
  95. package/dist/cli/output/stats.d.ts.map +1 -0
  96. package/dist/cli/output/stats.js +63 -0
  97. package/dist/cli/output/stats.js.map +1 -0
  98. package/dist/cli/output/terminal-markdown.d.ts +23 -0
  99. package/dist/cli/output/terminal-markdown.d.ts.map +1 -0
  100. package/dist/cli/output/terminal-markdown.js +159 -0
  101. package/dist/cli/output/terminal-markdown.js.map +1 -0
  102. package/dist/config/index.d.ts +27 -0
  103. package/dist/config/index.d.ts.map +1 -0
  104. package/dist/config/index.js +266 -0
  105. package/dist/config/index.js.map +1 -0
  106. package/dist/config/schema.d.ts +179 -0
  107. package/dist/config/schema.d.ts.map +1 -0
  108. package/dist/config/schema.js +85 -0
  109. package/dist/config/schema.js.map +1 -0
  110. package/dist/gitignore/index.d.ts +5 -0
  111. package/dist/gitignore/index.d.ts.map +1 -0
  112. package/dist/gitignore/index.js +5 -0
  113. package/dist/gitignore/index.js.map +1 -0
  114. package/dist/gitignore/parser.d.ts +32 -0
  115. package/dist/gitignore/parser.d.ts.map +1 -0
  116. package/dist/gitignore/parser.js +110 -0
  117. package/dist/gitignore/parser.js.map +1 -0
  118. package/dist/gitignore/parser.test.d.ts +2 -0
  119. package/dist/gitignore/parser.test.d.ts.map +1 -0
  120. package/dist/gitignore/parser.test.js +217 -0
  121. package/dist/gitignore/parser.test.js.map +1 -0
  122. package/dist/i18n/index.d.ts +19 -0
  123. package/dist/i18n/index.d.ts.map +1 -0
  124. package/dist/i18n/index.js +43 -0
  125. package/dist/i18n/index.js.map +1 -0
  126. package/dist/i18n/locales/en.json +320 -0
  127. package/dist/i18n/locales/ru.json +320 -0
  128. package/dist/i18n/locales/zh.json +320 -0
  129. package/dist/index.d.ts +5 -0
  130. package/dist/index.d.ts.map +1 -0
  131. package/dist/index.js +10 -0
  132. package/dist/index.js.map +1 -0
  133. package/dist/mcp/server.d.ts +9 -0
  134. package/dist/mcp/server.d.ts.map +1 -0
  135. package/dist/mcp/server.js +156 -0
  136. package/dist/mcp/server.js.map +1 -0
  137. package/dist/metrics/complexity/cognitive.d.ts +25 -0
  138. package/dist/metrics/complexity/cognitive.d.ts.map +1 -0
  139. package/dist/metrics/complexity/cognitive.js +109 -0
  140. package/dist/metrics/complexity/cognitive.js.map +1 -0
  141. package/dist/metrics/complexity/cyclomatic.d.ts +21 -0
  142. package/dist/metrics/complexity/cyclomatic.d.ts.map +1 -0
  143. package/dist/metrics/complexity/cyclomatic.js +111 -0
  144. package/dist/metrics/complexity/cyclomatic.js.map +1 -0
  145. package/dist/metrics/complexity/nesting-depth.d.ts +19 -0
  146. package/dist/metrics/complexity/nesting-depth.d.ts.map +1 -0
  147. package/dist/metrics/complexity/nesting-depth.js +97 -0
  148. package/dist/metrics/complexity/nesting-depth.js.map +1 -0
  149. package/dist/metrics/documentation/comment-ratio.d.ts +21 -0
  150. package/dist/metrics/documentation/comment-ratio.d.ts.map +1 -0
  151. package/dist/metrics/documentation/comment-ratio.js +91 -0
  152. package/dist/metrics/documentation/comment-ratio.js.map +1 -0
  153. package/dist/metrics/duplication/code-duplication.d.ts +24 -0
  154. package/dist/metrics/duplication/code-duplication.d.ts.map +1 -0
  155. package/dist/metrics/duplication/code-duplication.js +167 -0
  156. package/dist/metrics/duplication/code-duplication.js.map +1 -0
  157. package/dist/metrics/duplication/code-duplication.test.d.ts +2 -0
  158. package/dist/metrics/duplication/code-duplication.test.d.ts.map +1 -0
  159. package/dist/metrics/duplication/code-duplication.test.js +612 -0
  160. package/dist/metrics/duplication/code-duplication.test.js.map +1 -0
  161. package/dist/metrics/error/error-handling.d.ts +23 -0
  162. package/dist/metrics/error/error-handling.d.ts.map +1 -0
  163. package/dist/metrics/error/error-handling.js +164 -0
  164. package/dist/metrics/error/error-handling.js.map +1 -0
  165. package/dist/metrics/error/error-handling.test.d.ts +2 -0
  166. package/dist/metrics/error/error-handling.test.d.ts.map +1 -0
  167. package/dist/metrics/error/error-handling.test.js +349 -0
  168. package/dist/metrics/error/error-handling.test.js.map +1 -0
  169. package/dist/metrics/index.d.ts +21 -0
  170. package/dist/metrics/index.d.ts.map +1 -0
  171. package/dist/metrics/index.js +50 -0
  172. package/dist/metrics/index.js.map +1 -0
  173. package/dist/metrics/naming/convention.d.ts +22 -0
  174. package/dist/metrics/naming/convention.d.ts.map +1 -0
  175. package/dist/metrics/naming/convention.js +117 -0
  176. package/dist/metrics/naming/convention.js.map +1 -0
  177. package/dist/metrics/size/file-length.d.ts +19 -0
  178. package/dist/metrics/size/file-length.d.ts.map +1 -0
  179. package/dist/metrics/size/file-length.js +68 -0
  180. package/dist/metrics/size/file-length.js.map +1 -0
  181. package/dist/metrics/size/function-length.d.ts +20 -0
  182. package/dist/metrics/size/function-length.d.ts.map +1 -0
  183. package/dist/metrics/size/function-length.js +101 -0
  184. package/dist/metrics/size/function-length.js.map +1 -0
  185. package/dist/metrics/size/parameter-count.d.ts +19 -0
  186. package/dist/metrics/size/parameter-count.d.ts.map +1 -0
  187. package/dist/metrics/size/parameter-count.js +97 -0
  188. package/dist/metrics/size/parameter-count.js.map +1 -0
  189. package/dist/metrics/structure/structure-analysis.d.ts +24 -0
  190. package/dist/metrics/structure/structure-analysis.d.ts.map +1 -0
  191. package/dist/metrics/structure/structure-analysis.js +223 -0
  192. package/dist/metrics/structure/structure-analysis.js.map +1 -0
  193. package/dist/metrics/structure/structure-analysis.test.d.ts +2 -0
  194. package/dist/metrics/structure/structure-analysis.test.d.ts.map +1 -0
  195. package/dist/metrics/structure/structure-analysis.test.js +342 -0
  196. package/dist/metrics/structure/structure-analysis.test.js.map +1 -0
  197. package/dist/metrics/types.d.ts +71 -0
  198. package/dist/metrics/types.d.ts.map +1 -0
  199. package/dist/metrics/types.js +5 -0
  200. package/dist/metrics/types.js.map +1 -0
  201. package/dist/parser/generic-parser.d.ts +28 -0
  202. package/dist/parser/generic-parser.d.ts.map +1 -0
  203. package/dist/parser/generic-parser.js +218 -0
  204. package/dist/parser/generic-parser.js.map +1 -0
  205. package/dist/parser/index.d.ts +19 -0
  206. package/dist/parser/index.d.ts.map +1 -0
  207. package/dist/parser/index.js +52 -0
  208. package/dist/parser/index.js.map +1 -0
  209. package/dist/parser/regex-parser.d.ts +46 -0
  210. package/dist/parser/regex-parser.d.ts.map +1 -0
  211. package/dist/parser/regex-parser.js +560 -0
  212. package/dist/parser/regex-parser.js.map +1 -0
  213. package/dist/parser/tree-sitter-parser.d.ts +50 -0
  214. package/dist/parser/tree-sitter-parser.d.ts.map +1 -0
  215. package/dist/parser/tree-sitter-parser.js +707 -0
  216. package/dist/parser/tree-sitter-parser.js.map +1 -0
  217. package/dist/parser/types.d.ts +52 -0
  218. package/dist/parser/types.d.ts.map +1 -0
  219. package/dist/parser/types.js +49 -0
  220. package/dist/parser/types.js.map +1 -0
  221. package/dist/scoring/index.d.ts +14 -0
  222. package/dist/scoring/index.d.ts.map +1 -0
  223. package/dist/scoring/index.js +80 -0
  224. package/dist/scoring/index.js.map +1 -0
  225. package/dist/utils/fs.d.ts +24 -0
  226. package/dist/utils/fs.d.ts.map +1 -0
  227. package/dist/utils/fs.js +61 -0
  228. package/dist/utils/fs.js.map +1 -0
  229. package/dist/utils/logger.d.ts +13 -0
  230. package/dist/utils/logger.d.ts.map +1 -0
  231. package/dist/utils/logger.js +43 -0
  232. package/dist/utils/logger.js.map +1 -0
  233. package/dist/utils/markdown.d.ts +16 -0
  234. package/dist/utils/markdown.d.ts.map +1 -0
  235. package/dist/utils/markdown.js +303 -0
  236. package/dist/utils/markdown.js.map +1 -0
  237. package/dist/utils/progress.d.ts +24 -0
  238. package/dist/utils/progress.d.ts.map +1 -0
  239. package/dist/utils/progress.js +79 -0
  240. package/dist/utils/progress.js.map +1 -0
  241. package/dist/utils/terminal.d.ts +62 -0
  242. package/dist/utils/terminal.d.ts.map +1 -0
  243. package/dist/utils/terminal.js +207 -0
  244. package/dist/utils/terminal.js.map +1 -0
  245. package/package.json +77 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-review.js","sourceRoot":"","sources":["../../../src/cli/commands/ai-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Analyze command implementation
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function createAnalyzeCommand(): Command;
6
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,oBAAoB,IAAI,OAAO,CAkC9C"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Analyze command implementation
3
+ */
4
+ import { Command } from 'commander';
5
+ import { resolve } from 'node:path';
6
+ import { loadConfig, createRuntimeConfig } from '../../config/index.js';
7
+ import { createAnalyzer } from '../../analyzer/index.js';
8
+ import { ConsoleOutput } from '../output/console.js';
9
+ import { MarkdownOutput } from '../output/markdown.js';
10
+ import { JsonOutput } from '../output/json.js';
11
+ import { HtmlOutput } from '../output/html.js';
12
+ import { createSpinner, ProgressBar } from '../../utils/progress.js';
13
+ import { exists, isDirectory } from '../../utils/fs.js';
14
+ import { t } from '../../i18n/index.js';
15
+ import { renderMarkdownToTerminal } from '../../utils/markdown.js';
16
+ import chalk from 'chalk';
17
+ export function createAnalyzeCommand() {
18
+ const command = new Command('analyze');
19
+ command
20
+ .description(t('cmd_analyze_description'))
21
+ .argument('[path]', 'Project path to analyze', '.')
22
+ .option('-v, --verbose', 'Show verbose output')
23
+ .option('-t, --top <number>', 'Show top N worst files (default: 10)', parseInt)
24
+ .option('-f, --format <format>', 'Output format: console, markdown, json, html (default: console)')
25
+ .option('-o, --output <file>', 'Write output to file instead of stdout')
26
+ .option('-e, --exclude <patterns...>', 'Additional glob patterns to exclude')
27
+ .option('-c, --concurrency <number>', 'Number of concurrent workers (default: 8)', parseInt)
28
+ .option('-l, --locale <locale>', 'Language: en, zh, ru (default: en)')
29
+ .addHelpText('after', `
30
+ ${t('cli_examples')}
31
+ $ fuck-u-code analyze # ${t('cmd_analyze_example_cwd')}
32
+ $ fuck-u-code analyze ./src # ${t('cmd_analyze_example_dir')}
33
+ $ fuck-u-code analyze . --top 5 # ${t('cmd_analyze_example_top')}
34
+ $ fuck-u-code analyze . -f markdown -o report.md # ${t('cmd_analyze_example_markdown')}
35
+ $ fuck-u-code analyze . -f html -o report.html # ${t('cmd_analyze_example_html')}
36
+ $ fuck-u-code analyze . --exclude "**/*.test.ts" # ${t('cmd_analyze_example_exclude')}
37
+ $ fuck-u-code analyze . --locale zh # ${t('cmd_analyze_example_locale')}
38
+ `)
39
+ .action(async (path, options) => {
40
+ await runAnalyze(path, options);
41
+ });
42
+ return command;
43
+ }
44
+ async function runAnalyze(projectPath, options) {
45
+ const resolvedPath = resolve(projectPath);
46
+ // Validate path
47
+ if (!(await exists(resolvedPath))) {
48
+ console.error(chalk.red(t('error_path_not_found', { path: resolvedPath })));
49
+ process.exit(1);
50
+ }
51
+ if (!(await isDirectory(resolvedPath))) {
52
+ console.error(chalk.red(t('error_not_a_directory', { path: resolvedPath })));
53
+ process.exit(1);
54
+ }
55
+ const discoverySpinner = createSpinner(t('progress_discovering'));
56
+ const state = { progressBar: null };
57
+ try {
58
+ const config = await loadConfig(resolvedPath);
59
+ const runtimeConfig = createRuntimeConfig(resolvedPath, config, {
60
+ verbose: options.verbose,
61
+ concurrency: options.concurrency,
62
+ exclude: options.exclude,
63
+ output: {
64
+ format: options.format ?? 'console',
65
+ file: options.output,
66
+ top: options.top ?? 10,
67
+ maxIssues: 5,
68
+ showDetails: true,
69
+ },
70
+ });
71
+ const analyzer = createAnalyzer(runtimeConfig, {
72
+ onDiscoveryStart: () => {
73
+ discoverySpinner.start();
74
+ },
75
+ onDiscoveryComplete: (fileCount) => {
76
+ discoverySpinner.succeed(t('progress_discovered', { count: fileCount }));
77
+ if (fileCount > 0) {
78
+ state.progressBar = new ProgressBar(fileCount, t('progress_analyzing'));
79
+ state.progressBar.start();
80
+ }
81
+ },
82
+ onAnalysisProgress: (current) => {
83
+ state.progressBar?.update(current);
84
+ },
85
+ });
86
+ const result = await analyzer.analyze();
87
+ state.progressBar?.succeed(t('analysisComplete'));
88
+ const outputFormat = runtimeConfig.output.format;
89
+ const outputFile = runtimeConfig.output.file;
90
+ switch (outputFormat) {
91
+ case 'markdown': {
92
+ const mdOutput = new MarkdownOutput(runtimeConfig);
93
+ const markdown = mdOutput.render(result);
94
+ if (outputFile) {
95
+ const { writeFile } = await import('node:fs/promises');
96
+ await writeFile(outputFile, markdown, 'utf-8');
97
+ console.log(t('outputWritten', { file: outputFile }));
98
+ }
99
+ else {
100
+ console.log(renderMarkdownToTerminal(markdown));
101
+ }
102
+ break;
103
+ }
104
+ case 'json': {
105
+ const jsonOutput = new JsonOutput();
106
+ const json = jsonOutput.render(result);
107
+ if (outputFile) {
108
+ const { writeFile } = await import('node:fs/promises');
109
+ await writeFile(outputFile, json, 'utf-8');
110
+ console.log(t('outputWritten', { file: outputFile }));
111
+ }
112
+ else {
113
+ console.log(json);
114
+ }
115
+ break;
116
+ }
117
+ case 'html': {
118
+ const htmlOutput = new HtmlOutput(runtimeConfig);
119
+ const html = htmlOutput.render(result);
120
+ if (outputFile) {
121
+ const { writeFile } = await import('node:fs/promises');
122
+ await writeFile(outputFile, html, 'utf-8');
123
+ console.log(t('outputWritten', { file: outputFile }));
124
+ }
125
+ else {
126
+ console.log(chalk.yellow(t('output_html_requires_file')));
127
+ const consoleOutputFallback = new ConsoleOutput(runtimeConfig);
128
+ consoleOutputFallback.render(result);
129
+ }
130
+ break;
131
+ }
132
+ default: {
133
+ const consoleOutput = new ConsoleOutput(runtimeConfig);
134
+ consoleOutput.render(result);
135
+ }
136
+ }
137
+ }
138
+ catch (error) {
139
+ discoverySpinner.fail(t('analysisFailed'));
140
+ state.progressBar?.fail(t('analysisFailed'));
141
+ console.error(error instanceof Error ? error.message : String(error));
142
+ process.exit(1);
143
+ }
144
+ }
145
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Config command
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function createConfigCommand(): Command;
6
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiDpC,wBAAgB,mBAAmB,IAAI,OAAO,CAsD7C"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Config command
3
+ */
4
+ import { Command } from 'commander';
5
+ import { resolve, join } from 'node:path';
6
+ import { homedir } from 'node:os';
7
+ import { readFile, writeFile } from 'node:fs/promises';
8
+ import { loadConfig, DEFAULT_CONFIG } from '../../config/index.js';
9
+ import { exists } from '../../utils/fs.js';
10
+ import { t } from '../../i18n/index.js';
11
+ import chalk from 'chalk';
12
+ /** Supported dot-notation keys for `config set` */
13
+ const SETTABLE_KEYS = {
14
+ 'i18n.locale': (config, value) => {
15
+ if (!['en', 'zh', 'ru'].includes(value)) {
16
+ throw new Error(`Invalid locale: ${value}. Must be one of: en, zh, ru`);
17
+ }
18
+ ensureObject(config, 'i18n');
19
+ config.i18n.locale = value;
20
+ },
21
+ 'ai.provider': (config, value) => {
22
+ const valid = ['openai', 'anthropic', 'deepseek', 'gemini', 'ollama'];
23
+ if (!valid.includes(value)) {
24
+ throw new Error(`Invalid provider: ${value}. Must be one of: ${valid.join(', ')}`);
25
+ }
26
+ ensureObject(config, 'ai');
27
+ config.ai.provider = value;
28
+ config.ai.enabled = true;
29
+ },
30
+ 'ai.model': (config, value) => {
31
+ ensureObject(config, 'ai');
32
+ config.ai.model = value;
33
+ config.ai.enabled = true;
34
+ },
35
+ 'ai.apiKey': (config, value) => {
36
+ ensureObject(config, 'ai');
37
+ config.ai.apiKey = value;
38
+ config.ai.enabled = true;
39
+ },
40
+ 'ai.baseUrl': (config, value) => {
41
+ ensureObject(config, 'ai');
42
+ config.ai.baseUrl = value;
43
+ },
44
+ };
45
+ function ensureObject(obj, key) {
46
+ if (!obj[key] || typeof obj[key] !== 'object') {
47
+ obj[key] = {};
48
+ }
49
+ }
50
+ export function createConfigCommand() {
51
+ const command = new Command('config');
52
+ command
53
+ .description(t('cmd_config_description'))
54
+ .argument('[action]', 'Action: show, init, set', 'show')
55
+ .argument('[args...]', 'Arguments for the action')
56
+ .addHelpText('after', `
57
+ ${t('cli_examples')}
58
+ $ fuck-u-code config show # ${t('cmd_config_example_show')}
59
+ $ fuck-u-code config init # ${t('cmd_config_example_init')}
60
+ $ fuck-u-code config show ./my-project # ${t('cmd_config_example_show_project')}
61
+ $ fuck-u-code config set i18n.locale zh # ${t('cmd_config_example_set_locale')}
62
+ $ fuck-u-code config set ai.apiKey sk-xxx # ${t('cmd_config_example_set_api_key')}
63
+ $ fuck-u-code config set ai.baseUrl https://... # ${t('cmd_config_example_set_base_url')}
64
+ $ fuck-u-code config set ai.model gpt-4o # ${t('cmd_config_example_set_model')}
65
+ $ fuck-u-code config set ai.provider openai # ${t('cmd_config_example_set_provider')}
66
+ `)
67
+ .action(async (action, args) => {
68
+ switch (action) {
69
+ case 'show': {
70
+ const projectPath = resolve(args[0] ?? '.');
71
+ await showConfig(projectPath);
72
+ break;
73
+ }
74
+ case 'init': {
75
+ const projectPath = resolve(args[0] ?? '.');
76
+ await initConfig(projectPath);
77
+ break;
78
+ }
79
+ case 'set': {
80
+ const key = args[0];
81
+ const value = args[1];
82
+ if (!key) {
83
+ console.error(chalk.red(t('config_set_key_required')));
84
+ process.exit(1);
85
+ }
86
+ if (value === undefined) {
87
+ console.error(chalk.red(t('config_set_value_required')));
88
+ process.exit(1);
89
+ }
90
+ await setConfig(key, value);
91
+ break;
92
+ }
93
+ default:
94
+ console.error(chalk.red(t('config_unknown_action', { action })));
95
+ process.exit(1);
96
+ }
97
+ });
98
+ return command;
99
+ }
100
+ async function showConfig(projectPath) {
101
+ const config = await loadConfig(projectPath);
102
+ console.log(chalk.bold.cyan(`\n${t('config_current')}\n`));
103
+ console.log(chalk.gray(JSON.stringify(config, null, 2)));
104
+ }
105
+ async function initConfig(projectPath) {
106
+ const configPath = join(projectPath, '.fuckucoderc.json');
107
+ if (await exists(configPath)) {
108
+ console.log(chalk.yellow(t('config_already_exists', { path: configPath })));
109
+ return;
110
+ }
111
+ await writeFile(configPath, JSON.stringify(DEFAULT_CONFIG, null, 2) + '\n', 'utf-8');
112
+ console.log(chalk.green(t('config_created', { path: configPath })));
113
+ }
114
+ /**
115
+ * Set a config value in the global config file (~/.fuckucoderc.json).
116
+ * Creates the file if it doesn't exist.
117
+ */
118
+ async function setConfig(key, value) {
119
+ const setter = SETTABLE_KEYS[key];
120
+ if (!setter) {
121
+ console.error(chalk.red(t('config_set_invalid_key', { key })));
122
+ console.error(chalk.gray(`Valid keys: ${Object.keys(SETTABLE_KEYS).join(', ')}`));
123
+ process.exit(1);
124
+ }
125
+ const configPath = join(homedir(), '.fuckucoderc.json');
126
+ let config = {};
127
+ if (await exists(configPath)) {
128
+ try {
129
+ const content = await readFile(configPath, 'utf-8');
130
+ config = JSON.parse(content);
131
+ }
132
+ catch (error) {
133
+ console.error(chalk.red(t('warn_config_load_failed', { error: String(error) })));
134
+ process.exit(1);
135
+ }
136
+ }
137
+ try {
138
+ setter(config, value);
139
+ }
140
+ catch (error) {
141
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
142
+ process.exit(1);
143
+ }
144
+ await writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
145
+ console.log(chalk.green(t('config_set_success', { key, value })));
146
+ }
147
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP install command
3
+ *
4
+ * Automatically configures fuck-u-code MCP Server
5
+ * into Claude Code or Cursor configuration files.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare function createMcpInstallCommand(): Command;
9
+ //# sourceMappingURL=mcp-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp-install.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgFpC,wBAAgB,uBAAuB,IAAI,OAAO,CAuCjD"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * MCP install command
3
+ *
4
+ * Automatically configures fuck-u-code MCP Server
5
+ * into Claude Code or Cursor configuration files.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { join } from 'node:path';
9
+ import { homedir } from 'node:os';
10
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
11
+ import { exists } from '../../utils/fs.js';
12
+ import { t } from '../../i18n/index.js';
13
+ import chalk from 'chalk';
14
+ import inquirer from 'inquirer';
15
+ const MCP_SERVER_ENTRY = {
16
+ command: 'fuck-u-code-mcp',
17
+ };
18
+ function getTargetConfig(target) {
19
+ switch (target) {
20
+ case 'claude':
21
+ return {
22
+ configPath: join(homedir(), '.claude.json'),
23
+ displayName: 'Claude Code',
24
+ };
25
+ case 'cursor':
26
+ return {
27
+ configPath: join(process.cwd(), '.cursor', 'mcp.json'),
28
+ displayName: 'Cursor',
29
+ };
30
+ default:
31
+ throw new Error(t('mcp_unknown_target', { target }));
32
+ }
33
+ }
34
+ async function readJsonFile(filePath) {
35
+ if (!(await exists(filePath))) {
36
+ return {};
37
+ }
38
+ const content = await readFile(filePath, 'utf-8');
39
+ return JSON.parse(content);
40
+ }
41
+ async function installMcpConfig(target) {
42
+ const { configPath, displayName } = getTargetConfig(target);
43
+ const config = await readJsonFile(configPath);
44
+ if (!config.mcpServers) {
45
+ config.mcpServers = {};
46
+ }
47
+ const servers = config.mcpServers;
48
+ const alreadyExists = !!servers['fuck-u-code'];
49
+ servers['fuck-u-code'] = MCP_SERVER_ENTRY;
50
+ await ensureParentDir(configPath);
51
+ await writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
52
+ if (alreadyExists) {
53
+ console.log(chalk.yellow(t('mcp_config_exists', { path: configPath })));
54
+ console.log(chalk.green(t('mcp_config_updated', { path: configPath })));
55
+ }
56
+ else {
57
+ console.log(chalk.green(t('mcp_installed', { target: displayName })));
58
+ console.log(chalk.gray(t('mcp_config_written', { path: configPath })));
59
+ }
60
+ }
61
+ async function ensureParentDir(filePath) {
62
+ const dir = join(filePath, '..');
63
+ if (!(await exists(dir))) {
64
+ await mkdir(dir, { recursive: true });
65
+ }
66
+ }
67
+ export function createMcpInstallCommand() {
68
+ const command = new Command('mcp-install');
69
+ command
70
+ .description(t('cmd_mcp_install_description'))
71
+ .argument('[target]', 'Target AI tool: claude, cursor')
72
+ .addHelpText('after', `
73
+ ${t('cli_examples')}
74
+ $ fuck-u-code mcp-install claude # ${t('mcp_install_example_claude')}
75
+ $ fuck-u-code mcp-install cursor # ${t('mcp_install_example_cursor')}
76
+ `)
77
+ .action(async (target) => {
78
+ try {
79
+ if (!target) {
80
+ const answer = await inquirer.prompt([
81
+ {
82
+ type: 'list',
83
+ name: 'target',
84
+ message: t('mcp_install_target_prompt'),
85
+ choices: [
86
+ { name: 'Claude Code', value: 'claude' },
87
+ { name: 'Cursor', value: 'cursor' },
88
+ ],
89
+ },
90
+ ]);
91
+ target = answer.target;
92
+ }
93
+ await installMcpConfig(target);
94
+ }
95
+ catch (error) {
96
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
97
+ process.exit(1);
98
+ }
99
+ });
100
+ return command;
101
+ }
102
+ //# sourceMappingURL=mcp-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-install.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * CLI main entry point
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function createCLI(): Command;
6
+ export declare function runCLI(args?: string[]): Promise<void>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,SAAS,IAAI,OAAO,CA6BnC;AAED,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCzE"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * CLI main entry point
3
+ */
4
+ import { Command } from 'commander';
5
+ import { createAnalyzeCommand } from './commands/analyze.js';
6
+ import { createAIReviewCommand } from './commands/ai-review.js';
7
+ import { createConfigCommand } from './commands/config.js';
8
+ import { createMcpInstallCommand } from './commands/mcp-install.js';
9
+ import { t, setLocale } from '../i18n/index.js';
10
+ import { loadLocaleFromConfig } from '../config/index.js';
11
+ import { getSupportedLanguageNames } from '../parser/index.js';
12
+ const VERSION = '2.0.0';
13
+ const VALID_LOCALES = ['en', 'zh', 'ru'];
14
+ export function createCLI() {
15
+ const program = new Command();
16
+ program
17
+ .name('fuck-u-code')
18
+ .description(t('cli_description'))
19
+ .version(VERSION)
20
+ .addHelpText('after', `
21
+ ${t('cli_examples')}
22
+ $ fuck-u-code analyze . # ${t('cli_example_analyze_cwd')}
23
+ $ fuck-u-code analyze ./src --top 10 # ${t('cli_example_analyze_top')}
24
+ $ fuck-u-code analyze . --format markdown # ${t('cli_example_analyze_markdown')}
25
+ $ fuck-u-code analyze . --locale zh # ${t('cli_example_analyze_locale')}
26
+ $ fuck-u-code ai-review . --model gpt-4o # ${t('cli_example_ai_review')}
27
+ $ fuck-u-code mcp-install claude # ${t('cli_example_mcp_install')}
28
+
29
+ ${t('cli_supported_languages')}
30
+ ${getSupportedLanguageNames()}
31
+ `);
32
+ program.addCommand(createAnalyzeCommand());
33
+ program.addCommand(createAIReviewCommand());
34
+ program.addCommand(createConfigCommand());
35
+ program.addCommand(createMcpInstallCommand());
36
+ return program;
37
+ }
38
+ export async function runCLI(args = process.argv) {
39
+ // Priority: --locale (argv) > config i18n.locale > default 'en'
40
+ let locale;
41
+ for (let i = 0; i < args.length; i++) {
42
+ const arg = args[i];
43
+ if (!arg)
44
+ continue;
45
+ if (arg.startsWith('--locale=')) {
46
+ const value = arg.slice('--locale='.length);
47
+ if (VALID_LOCALES.includes(value)) {
48
+ locale = value;
49
+ break;
50
+ }
51
+ }
52
+ if (arg === '--locale' || arg === '-l') {
53
+ const next = args[i + 1];
54
+ if (next && VALID_LOCALES.includes(next)) {
55
+ locale = next;
56
+ break;
57
+ }
58
+ }
59
+ }
60
+ if (!locale) {
61
+ locale = await loadLocaleFromConfig();
62
+ }
63
+ if (locale) {
64
+ setLocale(locale);
65
+ }
66
+ const program = createCLI();
67
+ await program.parseAsync(args);
68
+ }
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * AI review output formatters for Markdown and HTML export.
3
+ */
4
+ /** Data structure for a single file's AI review result */
5
+ export interface AIReviewData {
6
+ filePath: string;
7
+ score: number;
8
+ review: string;
9
+ }
10
+ /**
11
+ * Generate a Markdown document from AI review results.
12
+ * Each file gets its own section with score and the raw review content.
13
+ */
14
+ export declare function renderAIReviewMarkdown(reviews: AIReviewData[]): string;
15
+ /**
16
+ * Generate an HTML document from AI review results.
17
+ * Uses the same dark theme as the main HTML report (html.ts).
18
+ */
19
+ export declare function renderAIReviewHtml(reviews: AIReviewData[]): string;
20
+ //# sourceMappingURL=ai-review-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-review-output.d.ts","sourceRoot":"","sources":["../../../src/cli/output/ai-review-output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAkCtE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CA4DlE"}