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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Done-0
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,256 @@
1
+ # fuck-u-code [![English](https://img.shields.io/badge/Docs-English-red?style=flat-square)](README.md) [![中文](https://img.shields.io/badge/文档-简体中文-blue?style=flat-square)](README_ZH.md) [![Русский](https://img.shields.io/badge/Docs-Русский-blue?style=flat-square)](README_RU.md)
2
+
3
+ > [!Important]
4
+ > 📢 Remember this command: `fuck-u-code` - let bad code have nowhere to hide!
5
+
6
+ A tool designed to **expose shitty code quality** with sharp but humorous feedback, showing you exactly **how terrible your code is**.
7
+
8
+ ## Features
9
+
10
+ * **Multi-language support**: Go, JavaScript, TypeScript, Python, Java, C, C++, Rust, C#, Lua
11
+ * **Overall Score**: 0~100, higher = better code quality
12
+ * **Shit-Gas Index**: Per-file score, higher = worse code
13
+ * **Seven quality checks**: Complexity / Size / Comments / Error handling / Naming / Duplication / Structure
14
+ * **AST parsing**: Accurate syntax analysis powered by tree-sitter
15
+ * **AI code review**: Integrates OpenAI-compatible / Anthropic / DeepSeek / Gemini / Ollama
16
+ * **Multiple output formats**: Colored terminal / Markdown / JSON / HTML
17
+ * **i18n**: English / Chinese / Russian
18
+ * **Flexible config**: `.fuckucoderc.json` and more, project-level and global support
19
+
20
+ > [!Note]
21
+ > Code analysis runs fully offline — your code never leaves your machine.
22
+ > AI review requires an external API or local Ollama.
23
+
24
+ ## Installation
25
+
26
+ ```bash
27
+ npm install -g fuck-u-code
28
+ ```
29
+
30
+ Or build from source:
31
+
32
+ ```bash
33
+ git clone https://github.com/Done-0/fuck-u-code.git
34
+ cd fuck-u-code && npm install && npm run build
35
+ ```
36
+
37
+ ## Usage
38
+
39
+ ### Code Analysis
40
+
41
+ ```bash
42
+ fuck-u-code analyze # Analyze current directory
43
+ fuck-u-code analyze ./src # Analyze specific directory
44
+ fuck-u-code analyze . -v # Verbose (project overview, language stats, function metrics)
45
+ fuck-u-code analyze . -t 20 # Show top 20 worst files
46
+ fuck-u-code analyze . -l zh # Chinese output
47
+ fuck-u-code analyze . -f markdown # Markdown terminal rendering
48
+ fuck-u-code analyze . -f markdown -o report.md # Export Markdown
49
+ fuck-u-code analyze . -f html -o report.html # Export HTML
50
+ fuck-u-code analyze . -f json -o report.json # Export JSON
51
+ fuck-u-code analyze . -e "**/*.test.ts" # Exclude test files
52
+ ```
53
+
54
+ | Option | Short | Description |
55
+ | --- | --- | --- |
56
+ | `--verbose` | `-v` | Verbose output |
57
+ | `--top <n>` | `-t` | Top N worst files (default 10) |
58
+ | `--format <fmt>` | `-f` | Format: console/markdown/json/html |
59
+ | `--output <file>` | `-o` | Write to file |
60
+ | `--exclude <glob>` | `-e` | Additional exclude patterns |
61
+ | `--concurrency <n>` | `-c` | Concurrent workers (default 8) |
62
+ | `--locale <lang>` | `-l` | Language: en/zh/ru |
63
+
64
+ ### AI Code Review
65
+
66
+ Requires AI provider setup (see [AI Configuration](#ai-configuration)).
67
+
68
+ ```bash
69
+ fuck-u-code ai-review . -m gpt-4o # OpenAI-compatible
70
+ fuck-u-code ai-review . -p anthropic -m claude-sonnet-4-5-20250929 # Anthropic
71
+ fuck-u-code ai-review . -p ollama -m codellama # Local Ollama
72
+ fuck-u-code ai-review . -m gpt-4o -t 3 # Review top 3 worst
73
+ fuck-u-code ai-review . -m gpt-4o -f markdown -o review.md # Export Markdown
74
+ fuck-u-code ai-review . -b https://your-api.com/v1 -k sk-xxx -m model # Custom endpoint
75
+ ```
76
+
77
+ | Option | Short | Description |
78
+ | --- | --- | --- |
79
+ | `--model <model>` | `-m` | Model name (required) |
80
+ | `--provider <name>` | `-p` | Provider: openai/anthropic/deepseek/gemini/ollama |
81
+ | `--base-url <url>` | `-b` | Custom API endpoint |
82
+ | `--api-key <key>` | `-k` | API key |
83
+ | `--top <n>` | `-t` | Review top N worst files (default 5) |
84
+ | `--format <fmt>` | `-f` | Format: console/markdown/html |
85
+ | `--output <file>` | `-o` | Write to file |
86
+ | `--verbose` | `-v` | Verbose output |
87
+ | `--locale <lang>` | `-l` | Language: en/zh/ru |
88
+
89
+ ### Config Management
90
+
91
+ ```bash
92
+ fuck-u-code config init # Generate .fuckucoderc.json
93
+ fuck-u-code config show # Show current config
94
+ fuck-u-code config set i18n.locale zh # Set default language
95
+ fuck-u-code config set ai.provider openai # Set AI provider
96
+ fuck-u-code config set ai.model gpt-4o # Set AI model
97
+ fuck-u-code config set ai.apiKey sk-xxx # Set API key
98
+ ```
99
+
100
+ ## Configuration File
101
+
102
+ Auto-discovered from project directory upward, then falls back to global `~/.fuckucoderc.json`.
103
+
104
+ Supported formats: `.fuckucoderc.json` / `.yaml` / `.js` / `fuckucode.config.js` / `"fuckucode"` field in `package.json`.
105
+
106
+ Global config path: macOS/Linux `~/.fuckucoderc.json`, Windows `C:\Users\<username>\.fuckucoderc.json`.
107
+
108
+ Full example (`.fuckucoderc.json`):
109
+
110
+ ```json
111
+ {
112
+ "exclude": ["**/*.test.ts", "docs/**"],
113
+ "include": ["**/*"],
114
+ "concurrency": 8,
115
+ "verbose": false,
116
+ "output": {
117
+ "format": "console",
118
+ "top": 10,
119
+ "maxIssues": 5,
120
+ "showDetails": true
121
+ },
122
+ "metrics": {
123
+ "weights": {
124
+ "complexity": 0.32,
125
+ "duplication": 0.20,
126
+ "size": 0.18,
127
+ "structure": 0.12,
128
+ "error": 0.08,
129
+ "documentation": 0.05,
130
+ "naming": 0.05
131
+ }
132
+ },
133
+ "ai": {
134
+ "enabled": true,
135
+ "provider": "openai",
136
+ "model": "gpt-4o",
137
+ "baseUrl": "https://api.openai.com/v1",
138
+ "apiKey": "sk-your-api-key"
139
+ },
140
+ "i18n": {
141
+ "locale": "en"
142
+ }
143
+ }
144
+ ```
145
+
146
+ ## AI Configuration
147
+
148
+ Supports 5 providers. Priority: CLI flags > environment variables > config file.
149
+
150
+ | Provider | Environment Variables | Example |
151
+ | --- | --- | --- |
152
+ | OpenAI-compatible | `OPENAI_API_KEY` `OPENAI_MODEL` `OPENAI_BASE_URL` | `ai-review . -m gpt-4o` |
153
+ | Anthropic | `ANTHROPIC_API_KEY` | `ai-review . -p anthropic -m claude-sonnet-4-5-20250929` |
154
+ | DeepSeek | `DEEPSEEK_API_KEY` | `ai-review . -p deepseek -m deepseek-chat` |
155
+ | Gemini | `GEMINI_API_KEY` | `ai-review . -p gemini -m gemini-pro` |
156
+ | Ollama | `OLLAMA_HOST` (optional) | `ai-review . -p ollama -m codellama` |
157
+
158
+ ```bash
159
+ # OpenAI-compatible
160
+ export OPENAI_API_KEY="sk-your-key"
161
+ export OPENAI_BASE_URL="https://api.openai.com/v1" # Optional
162
+
163
+ # Or via config file
164
+ fuck-u-code config set ai.provider openai
165
+ fuck-u-code config set ai.model gpt-4o
166
+ fuck-u-code config set ai.apiKey sk-your-key
167
+ fuck-u-code config set ai.baseUrl https://api.openai.com/v1
168
+ ```
169
+
170
+ ## MCP Server
171
+
172
+ fuck-u-code provides an MCP (Model Context Protocol) Server, allowing AI tools like Claude Code, Cursor, Windsurf, etc. to directly invoke code quality analysis and AI code review.
173
+
174
+ ### Setup
175
+
176
+ ```bash
177
+ # Global install
178
+ npm install -g fuck-u-code
179
+
180
+ # Auto-configure (interactive)
181
+ fuck-u-code mcp-install
182
+
183
+ # Or specify target directly
184
+ fuck-u-code mcp-install claude
185
+ fuck-u-code mcp-install cursor
186
+ ```
187
+
188
+ **Claude Code** (`~/.claude.json` or project `.mcp.json`):
189
+
190
+ ```json
191
+ {
192
+ "mcpServers": {
193
+ "fuck-u-code": {
194
+ "command": "fuck-u-code-mcp"
195
+ }
196
+ }
197
+ }
198
+ ```
199
+
200
+ **Cursor** (`.cursor/mcp.json`):
201
+
202
+ ```json
203
+ {
204
+ "mcpServers": {
205
+ "fuck-u-code": {
206
+ "command": "fuck-u-code-mcp"
207
+ }
208
+ }
209
+ }
210
+ ```
211
+
212
+ **Without global install (npx)**:
213
+
214
+ ```json
215
+ {
216
+ "mcpServers": {
217
+ "fuck-u-code": {
218
+ "command": "npx",
219
+ "args": ["-y", "fuck-u-code-mcp"]
220
+ }
221
+ }
222
+ }
223
+ ```
224
+
225
+ ### Available Tools
226
+
227
+ - **analyze** — Analyze code quality and generate a score report
228
+ - **ai-review** — Run AI-powered code review on the worst-scoring files
229
+
230
+ ## File Exclusion
231
+
232
+ The tool reads `.gitignore` files (including nested ones) and follows standard gitignore rules. For additional exclusions, use `--exclude` or the `exclude` config field.
233
+
234
+ ## Feedback
235
+
236
+ > 💬 Share your thoughts
237
+ > Discord: <https://discord.gg/9ThNkAFGnT>
238
+
239
+ ## Contributing
240
+
241
+ PRs welcome — let's improve **fuck-u-code** together 🚀
242
+
243
+ ## License
244
+
245
+ MIT
246
+
247
+ ## Contact
248
+
249
+ - fenderisfine@gmail.com
250
+ - WeChat: l927171598
251
+
252
+ ## More Projects
253
+
254
+ - [FateSpiral](https://fatespiral.com/) — AI-driven multiplayer RPG, infinite worlds, evolving stories
255
+ - [DestinyTeller](https://destinyteller.com/) — AI-powered destiny reading website
256
+ - [Jank](https://github.com/Done-0/Jank) — Open-source blog system in Go
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/mcp/server.js');
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/index.js');
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Postinstall script: generates global config file (~/.fuckucoderc.json) if it doesn't exist.
5
+ * Cross-platform: Mac, Windows, Linux via os.homedir().
6
+ */
7
+
8
+ import { existsSync, writeFileSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ import { homedir } from 'node:os';
11
+
12
+ const CONFIG_FILE = '.fuckucoderc.json';
13
+ const configPath = join(homedir(), CONFIG_FILE);
14
+
15
+ if (!existsSync(configPath)) {
16
+ const defaultConfig = {
17
+ exclude: [],
18
+ include: ['**/*'],
19
+ concurrency: 8,
20
+ verbose: false,
21
+ output: {
22
+ format: 'console',
23
+ top: 10,
24
+ maxIssues: 5,
25
+ showDetails: true,
26
+ },
27
+ metrics: {
28
+ weights: {
29
+ complexity: 0.32,
30
+ duplication: 0.2,
31
+ size: 0.18,
32
+ structure: 0.12,
33
+ error: 0.08,
34
+ documentation: 0.05,
35
+ naming: 0.05,
36
+ },
37
+ },
38
+ ai: {
39
+ enabled: false,
40
+ },
41
+ i18n: {
42
+ locale: 'en',
43
+ },
44
+ };
45
+
46
+ try {
47
+ writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2) + '\n', 'utf-8');
48
+ console.log(`[fuck-u-code] Global config created: ${configPath}`);
49
+ } catch (error) {
50
+ console.warn(`[fuck-u-code] Failed to create global config at ${configPath}: ${error.message}`);
51
+ console.warn('[fuck-u-code] You can create it manually or run: fuck-u-code config init');
52
+ }
53
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * AI module entry point
3
+ */
4
+ import type { AIConfig, ChatRequest, ChatResponse } from './types.js';
5
+ import type { FileAnalysisResult } from '../metrics/types.js';
6
+ /**
7
+ * AI Manager for code review
8
+ */
9
+ export declare class AIManager {
10
+ private config;
11
+ constructor(config: AIConfig);
12
+ /**
13
+ * Review code and provide suggestions
14
+ * Includes local analysis results for more accurate AI feedback
15
+ */
16
+ reviewCode(fileResult: FileAnalysisResult): Promise<string>;
17
+ /**
18
+ * Chat with AI
19
+ */
20
+ chat(request: ChatRequest): Promise<ChatResponse>;
21
+ private createProvider;
22
+ /**
23
+ * Build comprehensive review prompt with local analysis results
24
+ * This provides AI with concrete metrics data for more accurate suggestions
25
+ */
26
+ private buildReviewPrompt;
27
+ private groupMetricsByCategory;
28
+ private buildMetricsSection;
29
+ private severityPriority;
30
+ private getScoreLabel;
31
+ }
32
+ export declare function createAIManager(config: AIConfig): AIManager;
33
+ export type { AIConfig, Provider, ChatRequest, ChatResponse } from './types.js';
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,KAAK,EAAE,QAAQ,EAA6B,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,qBAAqB,CAAC;AAE5E;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAW;gBAEb,MAAM,EAAE,QAAQ;IAI5B;;;OAGG;IACG,UAAU,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4CjE;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAkCvD,OAAO,CAAC,cAAc;IAgBtB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAkFzB,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,aAAa;CAOtB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAE3D;AAED,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * AI module entry point
3
+ */
4
+ import { OpenAIProvider } from './providers/openai.js';
5
+ import { AnthropicProvider } from './providers/anthropic.js';
6
+ import { OllamaProvider } from './providers/ollama.js';
7
+ import { GeminiProvider } from './providers/gemini.js';
8
+ import { getCodeReviewPrompt } from './prompts/code-review.js';
9
+ import { t } from '../i18n/index.js';
10
+ /**
11
+ * AI Manager for code review
12
+ */
13
+ export class AIManager {
14
+ config;
15
+ constructor(config) {
16
+ this.config = config;
17
+ }
18
+ /**
19
+ * Review code and provide suggestions
20
+ * Includes local analysis results for more accurate AI feedback
21
+ */
22
+ async reviewCode(fileResult) {
23
+ const providerName = this.config.defaultProvider;
24
+ if (!providerName) {
25
+ throw new Error(t('ai_no_provider'));
26
+ }
27
+ const providerConfig = this.config.providers[providerName];
28
+ if (!providerConfig?.enabled || !providerConfig.instances.length) {
29
+ throw new Error(t('ai_no_provider'));
30
+ }
31
+ const instance = providerConfig.instances[0];
32
+ if (!instance?.enabled) {
33
+ throw new Error(t('ai_no_provider'));
34
+ }
35
+ const ctx = {
36
+ providerName,
37
+ instanceName: instance.name,
38
+ baseUrl: instance.baseUrl,
39
+ apiKey: instance.apiKey,
40
+ model: instance.models[0] || '',
41
+ maxTokens: instance.maxTokens,
42
+ temperature: instance.temperature,
43
+ topP: instance.topP,
44
+ topK: instance.topK,
45
+ timeout: instance.timeout,
46
+ maxRetries: instance.maxRetries,
47
+ };
48
+ const provider = this.createProvider(ctx);
49
+ const prompt = this.buildReviewPrompt(fileResult);
50
+ const systemPrompt = getCodeReviewPrompt();
51
+ const response = await provider.chat({
52
+ messages: [
53
+ { role: 'system', content: systemPrompt },
54
+ { role: 'user', content: prompt },
55
+ ],
56
+ });
57
+ return response.choices[0]?.message.content ?? '';
58
+ }
59
+ /**
60
+ * Chat with AI
61
+ */
62
+ async chat(request) {
63
+ const providerName = this.config.defaultProvider;
64
+ if (!providerName) {
65
+ throw new Error(t('ai_no_provider'));
66
+ }
67
+ const providerConfig = this.config.providers[providerName];
68
+ if (!providerConfig?.enabled || !providerConfig.instances.length) {
69
+ throw new Error(t('ai_no_provider'));
70
+ }
71
+ const instance = providerConfig.instances[0];
72
+ if (!instance?.enabled) {
73
+ throw new Error(t('ai_no_provider'));
74
+ }
75
+ const ctx = {
76
+ providerName,
77
+ instanceName: instance.name,
78
+ baseUrl: instance.baseUrl,
79
+ apiKey: instance.apiKey,
80
+ model: request.model || instance.models[0] || '',
81
+ maxTokens: instance.maxTokens,
82
+ temperature: instance.temperature,
83
+ topP: instance.topP,
84
+ topK: instance.topK,
85
+ timeout: instance.timeout,
86
+ maxRetries: instance.maxRetries,
87
+ };
88
+ const provider = this.createProvider(ctx);
89
+ return provider.chat(request);
90
+ }
91
+ createProvider(ctx) {
92
+ switch (ctx.providerName) {
93
+ case 'openai':
94
+ case 'deepseek':
95
+ return new OpenAIProvider(ctx);
96
+ case 'anthropic':
97
+ return new AnthropicProvider(ctx);
98
+ case 'gemini':
99
+ return new GeminiProvider(ctx);
100
+ case 'ollama':
101
+ return new OllamaProvider(ctx);
102
+ default:
103
+ return new OpenAIProvider(ctx);
104
+ }
105
+ }
106
+ /**
107
+ * Build comprehensive review prompt with local analysis results
108
+ * This provides AI with concrete metrics data for more accurate suggestions
109
+ */
110
+ buildReviewPrompt(fileResult) {
111
+ const { filePath, score, metrics, parseResult } = fileResult;
112
+ const metricsByCategory = this.groupMetricsByCategory(metrics);
113
+ const metricsSection = this.buildMetricsSection(metricsByCategory);
114
+ const issues = metrics
115
+ .filter((m) => m.severity !== 'info')
116
+ .sort((a, b) => this.severityPriority(b.severity) - this.severityPriority(a.severity));
117
+ const issuesSection = issues.length > 0
118
+ ? issues
119
+ .map((m) => `- [${m.severity.toUpperCase()}] ${m.name}: ${m.details || t('score') + ': ' + m.normalizedScore.toFixed(1)}`)
120
+ .join('\n')
121
+ : t('ai_no_issues_detected');
122
+ const functionsSection = parseResult.functions.length > 0
123
+ ? parseResult.functions
124
+ .sort((a, b) => b.complexity - a.complexity)
125
+ .slice(0, 10)
126
+ .map((f) => {
127
+ const warnings = [];
128
+ if (f.complexity > 10)
129
+ warnings.push(t('ai_high_complexity'));
130
+ if (f.lineCount > 300)
131
+ warnings.push(t('ai_long_function'));
132
+ if (f.nestingDepth > 4)
133
+ warnings.push(t('ai_deep_nesting'));
134
+ if (f.parameterCount > 5)
135
+ warnings.push(t('ai_many_parameters'));
136
+ const warningStr = warnings.length > 0 ? ` [${warnings.join(', ')}]` : '';
137
+ return `- ${f.name}: ${f.lineCount} lines, complexity ${f.complexity}, nesting ${f.nestingDepth}, params ${f.parameterCount}${warningStr}`;
138
+ })
139
+ .join('\n')
140
+ : t('ai_no_functions_detected');
141
+ const commentRatio = parseResult.codeLines > 0
142
+ ? ((parseResult.commentLines / parseResult.codeLines) * 100).toFixed(1)
143
+ : '0';
144
+ const statsSection = `
145
+ - ${t('ai_total_lines')}: ${parseResult.totalLines}
146
+ - ${t('ai_code_lines')}: ${parseResult.codeLines}
147
+ - ${t('ai_comment_lines')}: ${parseResult.commentLines}
148
+ - ${t('ai_blank_lines')}: ${parseResult.blankLines}
149
+ - ${t('ai_comment_ratio')}: ${commentRatio}%
150
+ - ${t('ai_functions')}: ${parseResult.functions.length}
151
+ - ${t('ai_classes')}: ${parseResult.classes.length}`;
152
+ return `
153
+ ## ${t('ai_file_analysis_report')}
154
+
155
+ **${t('file')}:** ${filePath}
156
+ **Language:** ${parseResult.language}
157
+ **${t('overallScore')}:** ${score.toFixed(1)}/100 (${this.getScoreLabel(score)})
158
+
159
+ ### ${t('ai_code_statistics')}
160
+ ${statsSection}
161
+
162
+ ### ${t('ai_metrics_analysis')}
163
+ ${metricsSection}
164
+
165
+ ### ${t('ai_detected_issues')}
166
+ ${issuesSection}
167
+
168
+ ### ${t('ai_function_analysis')}
169
+ ${functionsSection}
170
+
171
+ ---
172
+
173
+ ${t('ai_review_request')}
174
+ 1. ${t('ai_review_request_1')}
175
+ 2. ${t('ai_review_request_2')}
176
+ 3. ${t('ai_review_request_3')}
177
+ 4. ${t('ai_review_request_4')}
178
+
179
+ ${t('ai_review_focus')}
180
+ `;
181
+ }
182
+ groupMetricsByCategory(metrics) {
183
+ const grouped = new Map();
184
+ for (const metric of metrics) {
185
+ const existing = grouped.get(metric.category) || [];
186
+ existing.push(metric);
187
+ grouped.set(metric.category, existing);
188
+ }
189
+ return grouped;
190
+ }
191
+ buildMetricsSection(metricsByCategory) {
192
+ const sections = [];
193
+ for (const [category, metrics] of metricsByCategory) {
194
+ const avgScore = metrics.reduce((sum, m) => sum + m.normalizedScore, 0) / metrics.length;
195
+ const categoryName = t(category) || category.charAt(0).toUpperCase() + category.slice(1);
196
+ const details = metrics
197
+ .map((m) => ` - ${m.name}: ${m.normalizedScore.toFixed(1)}/100`)
198
+ .join('\n');
199
+ sections.push(`**${categoryName}** (avg: ${avgScore.toFixed(1)}/100)\n${details}`);
200
+ }
201
+ return sections.join('\n\n');
202
+ }
203
+ severityPriority(severity) {
204
+ const priorities = {
205
+ critical: 4,
206
+ error: 3,
207
+ warning: 2,
208
+ info: 1,
209
+ };
210
+ return priorities[severity] || 0;
211
+ }
212
+ getScoreLabel(score) {
213
+ if (score >= 90)
214
+ return t('ai_score_excellent');
215
+ if (score >= 75)
216
+ return t('ai_score_good');
217
+ if (score >= 60)
218
+ return t('ai_score_acceptable');
219
+ if (score >= 40)
220
+ return t('ai_score_poor');
221
+ return t('ai_score_critical');
222
+ }
223
+ }
224
+ export function createAIManager(config) {
225
+ return new AIManager(config);
226
+ }
227
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Code review prompt templates
3
+ *
4
+ * Generates system prompts for AI code review. Uses XML-tagged structure
5
+ * for clear section boundaries. Output is pure Markdown.
6
+ */
7
+ /** Get localized code review system prompt */
8
+ export declare function getCodeReviewPrompt(): string;
9
+ //# sourceMappingURL=code-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-review.d.ts","sourceRoot":"","sources":["../../../src/ai/prompts/code-review.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,8CAA8C;AAC9C,wBAAgB,mBAAmB,IAAI,MAAM,CAmD5C"}