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.
- package/LICENSE +21 -0
- package/README.md +256 -0
- package/bin/fuck-u-code-mcp.js +2 -0
- package/bin/fuck-u-code.js +2 -0
- package/bin/postinstall.js +53 -0
- package/dist/ai/index.d.ts +34 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +227 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/prompts/code-review.d.ts +9 -0
- package/dist/ai/prompts/code-review.d.ts.map +1 -0
- package/dist/ai/prompts/code-review.js +61 -0
- package/dist/ai/prompts/code-review.js.map +1 -0
- package/dist/ai/providers/anthropic.d.ts +11 -0
- package/dist/ai/providers/anthropic.d.ts.map +1 -0
- package/dist/ai/providers/anthropic.js +60 -0
- package/dist/ai/providers/anthropic.js.map +1 -0
- package/dist/ai/providers/fetch.d.ts +10 -0
- package/dist/ai/providers/fetch.d.ts.map +1 -0
- package/dist/ai/providers/fetch.js +50 -0
- package/dist/ai/providers/fetch.js.map +1 -0
- package/dist/ai/providers/gemini.d.ts +12 -0
- package/dist/ai/providers/gemini.d.ts.map +1 -0
- package/dist/ai/providers/gemini.js +66 -0
- package/dist/ai/providers/gemini.js.map +1 -0
- package/dist/ai/providers/ollama.d.ts +11 -0
- package/dist/ai/providers/ollama.d.ts.map +1 -0
- package/dist/ai/providers/ollama.js +54 -0
- package/dist/ai/providers/ollama.js.map +1 -0
- package/dist/ai/providers/openai.d.ts +11 -0
- package/dist/ai/providers/openai.d.ts.map +1 -0
- package/dist/ai/providers/openai.js +52 -0
- package/dist/ai/providers/openai.js.map +1 -0
- package/dist/ai/selector.d.ts +19 -0
- package/dist/ai/selector.d.ts.map +1 -0
- package/dist/ai/selector.js +145 -0
- package/dist/ai/selector.js.map +1 -0
- package/dist/ai/types.d.ts +120 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +6 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/analyzer/concurrent-analyzer.d.ts +11 -0
- package/dist/analyzer/concurrent-analyzer.d.ts.map +1 -0
- package/dist/analyzer/concurrent-analyzer.js +67 -0
- package/dist/analyzer/concurrent-analyzer.js.map +1 -0
- package/dist/analyzer/file-discovery.d.ts +23 -0
- package/dist/analyzer/file-discovery.d.ts.map +1 -0
- package/dist/analyzer/file-discovery.js +64 -0
- package/dist/analyzer/file-discovery.js.map +1 -0
- package/dist/analyzer/index.d.ts +27 -0
- package/dist/analyzer/index.d.ts.map +1 -0
- package/dist/analyzer/index.js +64 -0
- package/dist/analyzer/index.js.map +1 -0
- package/dist/cli/commands/ai-review.d.ts +6 -0
- package/dist/cli/commands/ai-review.d.ts.map +1 -0
- package/dist/cli/commands/ai-review.js +213 -0
- package/dist/cli/commands/ai-review.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +6 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +145 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/config.d.ts +6 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +147 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/mcp-install.d.ts +9 -0
- package/dist/cli/commands/mcp-install.d.ts.map +1 -0
- package/dist/cli/commands/mcp-install.js +102 -0
- package/dist/cli/commands/mcp-install.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +69 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output/ai-review-output.d.ts +20 -0
- package/dist/cli/output/ai-review-output.d.ts.map +1 -0
- package/dist/cli/output/ai-review-output.js +324 -0
- package/dist/cli/output/ai-review-output.js.map +1 -0
- package/dist/cli/output/console.d.ts +31 -0
- package/dist/cli/output/console.d.ts.map +1 -0
- package/dist/cli/output/console.js +571 -0
- package/dist/cli/output/console.js.map +1 -0
- package/dist/cli/output/html.d.ts +20 -0
- package/dist/cli/output/html.d.ts.map +1 -0
- package/dist/cli/output/html.js +339 -0
- package/dist/cli/output/html.js.map +1 -0
- package/dist/cli/output/json.d.ts +8 -0
- package/dist/cli/output/json.d.ts.map +1 -0
- package/dist/cli/output/json.js +46 -0
- package/dist/cli/output/json.js.map +1 -0
- package/dist/cli/output/markdown.d.ts +17 -0
- package/dist/cli/output/markdown.d.ts.map +1 -0
- package/dist/cli/output/markdown.js +323 -0
- package/dist/cli/output/markdown.js.map +1 -0
- package/dist/cli/output/stats.d.ts +35 -0
- package/dist/cli/output/stats.d.ts.map +1 -0
- package/dist/cli/output/stats.js +63 -0
- package/dist/cli/output/stats.js.map +1 -0
- package/dist/cli/output/terminal-markdown.d.ts +23 -0
- package/dist/cli/output/terminal-markdown.d.ts.map +1 -0
- package/dist/cli/output/terminal-markdown.js +159 -0
- package/dist/cli/output/terminal-markdown.js.map +1 -0
- package/dist/config/index.d.ts +27 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +266 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +179 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +85 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/gitignore/index.d.ts +5 -0
- package/dist/gitignore/index.d.ts.map +1 -0
- package/dist/gitignore/index.js +5 -0
- package/dist/gitignore/index.js.map +1 -0
- package/dist/gitignore/parser.d.ts +32 -0
- package/dist/gitignore/parser.d.ts.map +1 -0
- package/dist/gitignore/parser.js +110 -0
- package/dist/gitignore/parser.js.map +1 -0
- package/dist/gitignore/parser.test.d.ts +2 -0
- package/dist/gitignore/parser.test.d.ts.map +1 -0
- package/dist/gitignore/parser.test.js +217 -0
- package/dist/gitignore/parser.test.js.map +1 -0
- package/dist/i18n/index.d.ts +19 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +43 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en.json +320 -0
- package/dist/i18n/locales/ru.json +320 -0
- package/dist/i18n/locales/zh.json +320 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +156 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/metrics/complexity/cognitive.d.ts +25 -0
- package/dist/metrics/complexity/cognitive.d.ts.map +1 -0
- package/dist/metrics/complexity/cognitive.js +109 -0
- package/dist/metrics/complexity/cognitive.js.map +1 -0
- package/dist/metrics/complexity/cyclomatic.d.ts +21 -0
- package/dist/metrics/complexity/cyclomatic.d.ts.map +1 -0
- package/dist/metrics/complexity/cyclomatic.js +111 -0
- package/dist/metrics/complexity/cyclomatic.js.map +1 -0
- package/dist/metrics/complexity/nesting-depth.d.ts +19 -0
- package/dist/metrics/complexity/nesting-depth.d.ts.map +1 -0
- package/dist/metrics/complexity/nesting-depth.js +97 -0
- package/dist/metrics/complexity/nesting-depth.js.map +1 -0
- package/dist/metrics/documentation/comment-ratio.d.ts +21 -0
- package/dist/metrics/documentation/comment-ratio.d.ts.map +1 -0
- package/dist/metrics/documentation/comment-ratio.js +91 -0
- package/dist/metrics/documentation/comment-ratio.js.map +1 -0
- package/dist/metrics/duplication/code-duplication.d.ts +24 -0
- package/dist/metrics/duplication/code-duplication.d.ts.map +1 -0
- package/dist/metrics/duplication/code-duplication.js +167 -0
- package/dist/metrics/duplication/code-duplication.js.map +1 -0
- package/dist/metrics/duplication/code-duplication.test.d.ts +2 -0
- package/dist/metrics/duplication/code-duplication.test.d.ts.map +1 -0
- package/dist/metrics/duplication/code-duplication.test.js +612 -0
- package/dist/metrics/duplication/code-duplication.test.js.map +1 -0
- package/dist/metrics/error/error-handling.d.ts +23 -0
- package/dist/metrics/error/error-handling.d.ts.map +1 -0
- package/dist/metrics/error/error-handling.js +164 -0
- package/dist/metrics/error/error-handling.js.map +1 -0
- package/dist/metrics/error/error-handling.test.d.ts +2 -0
- package/dist/metrics/error/error-handling.test.d.ts.map +1 -0
- package/dist/metrics/error/error-handling.test.js +349 -0
- package/dist/metrics/error/error-handling.test.js.map +1 -0
- package/dist/metrics/index.d.ts +21 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +50 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/naming/convention.d.ts +22 -0
- package/dist/metrics/naming/convention.d.ts.map +1 -0
- package/dist/metrics/naming/convention.js +117 -0
- package/dist/metrics/naming/convention.js.map +1 -0
- package/dist/metrics/size/file-length.d.ts +19 -0
- package/dist/metrics/size/file-length.d.ts.map +1 -0
- package/dist/metrics/size/file-length.js +68 -0
- package/dist/metrics/size/file-length.js.map +1 -0
- package/dist/metrics/size/function-length.d.ts +20 -0
- package/dist/metrics/size/function-length.d.ts.map +1 -0
- package/dist/metrics/size/function-length.js +101 -0
- package/dist/metrics/size/function-length.js.map +1 -0
- package/dist/metrics/size/parameter-count.d.ts +19 -0
- package/dist/metrics/size/parameter-count.d.ts.map +1 -0
- package/dist/metrics/size/parameter-count.js +97 -0
- package/dist/metrics/size/parameter-count.js.map +1 -0
- package/dist/metrics/structure/structure-analysis.d.ts +24 -0
- package/dist/metrics/structure/structure-analysis.d.ts.map +1 -0
- package/dist/metrics/structure/structure-analysis.js +223 -0
- package/dist/metrics/structure/structure-analysis.js.map +1 -0
- package/dist/metrics/structure/structure-analysis.test.d.ts +2 -0
- package/dist/metrics/structure/structure-analysis.test.d.ts.map +1 -0
- package/dist/metrics/structure/structure-analysis.test.js +342 -0
- package/dist/metrics/structure/structure-analysis.test.js.map +1 -0
- package/dist/metrics/types.d.ts +71 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +5 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/parser/generic-parser.d.ts +28 -0
- package/dist/parser/generic-parser.d.ts.map +1 -0
- package/dist/parser/generic-parser.js +218 -0
- package/dist/parser/generic-parser.js.map +1 -0
- package/dist/parser/index.d.ts +19 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +52 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/regex-parser.d.ts +46 -0
- package/dist/parser/regex-parser.d.ts.map +1 -0
- package/dist/parser/regex-parser.js +560 -0
- package/dist/parser/regex-parser.js.map +1 -0
- package/dist/parser/tree-sitter-parser.d.ts +50 -0
- package/dist/parser/tree-sitter-parser.d.ts.map +1 -0
- package/dist/parser/tree-sitter-parser.js +707 -0
- package/dist/parser/tree-sitter-parser.js.map +1 -0
- package/dist/parser/types.d.ts +52 -0
- package/dist/parser/types.d.ts.map +1 -0
- package/dist/parser/types.js +49 -0
- package/dist/parser/types.js.map +1 -0
- package/dist/scoring/index.d.ts +14 -0
- package/dist/scoring/index.d.ts.map +1 -0
- package/dist/scoring/index.js +80 -0
- package/dist/scoring/index.js.map +1 -0
- package/dist/utils/fs.d.ts +24 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +61 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +43 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/markdown.d.ts +16 -0
- package/dist/utils/markdown.d.ts.map +1 -0
- package/dist/utils/markdown.js +303 -0
- package/dist/utils/markdown.js.map +1 -0
- package/dist/utils/progress.d.ts +24 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +79 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/terminal.d.ts +62 -0
- package/dist/utils/terminal.d.ts.map +1 -0
- package/dist/utils/terminal.js +207 -0
- package/dist/utils/terminal.js.map +1 -0
- 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":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,MAAM,UAAU,qBAAqB;IACnC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAEzC,OAAO;SACJ,WAAW,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;SAC3C,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,EAAE,GAAG,CAAC;SACjD,MAAM,CAAC,2BAA2B,EAAE,0DAA0D,CAAC;SAC/F,MAAM,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;SACxD,MAAM,CAAC,sBAAsB,EAAE,kDAAkD,CAAC;SAClF,MAAM,CAAC,qBAAqB,EAAE,8CAA8C,CAAC;SAC7E,MAAM,CAAC,oBAAoB,EAAE,8CAA8C,EAAE,QAAQ,CAAC;SACtF,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,uBAAuB,EAAE,sBAAsB,CAAC;SACvD,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,2BAA2B,CAAC,CAAC;SAC/D,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,WAAW,CACV,OAAO,EACP;EACJ,CAAC,CAAC,cAAc,CAAC;;;;;;;;EAQjB,CAAC,CAAC,0BAA0B,CAAC;;;;;;;;CAQ9B,CACI;SACA,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAwB,EAAE,EAAE;QACvD,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,OAAwB;IACtE,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1C,gBAAgB;IAChB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAEtD,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAElF,IAAI,CAAC,MAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,kEAAkE;QAClE,QAAQ,GAAG;YACT,SAAS,EAAE;gBACT,CAAC,QAAQ,CAAC,EAAE;oBACV,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE;wBACT;4BACE,IAAI,EAAE,KAAK;4BACX,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,iBAAiB,CAAC,QAAQ,CAAC;4BACvD,MAAM,EAAE,MAAM,IAAI,EAAE;4BACpB,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;4BACvB,SAAS,EAAE,IAAI;4BACf,WAAW,EAAE,GAAG;4BAChB,IAAI,EAAE,CAAC;4BACP,OAAO,EAAE,EAAE;4BACX,UAAU,EAAE,CAAC;yBACd;qBACF;iBACF;aACF;YACD,eAAe,EAAE,QAAQ;SAC1B,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,oFAAoF,CACrF,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE;YAC9D,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,EAAE,EAAE;gBACF,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB;SACF,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEhD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW;aAC1C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEtB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAChG,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK;gBACvB,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;QAElC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;gBACjD,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBACvD,MAAM,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;gBACxD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClD,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBACvD,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;oBAC3C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;gBACxD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;oBAC1D,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBAChC,CAAC;gBACD,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,SAAS,oBAAoB,CAAC,OAAuB;IACnD,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,CAAC,CAAC;IACvB,MAAM,YAAY,GAAG,SAAS,GAAG,YAAY,CAAC;IAC9C,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAE9D,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACjE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,0CAA0C;AAC1C,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,IAAI,GAA2B;QACnC,MAAM,EAAE,2BAA2B;QACnC,SAAS,EAAE,2BAA2B;QACtC,QAAQ,EAAE,6BAA6B;QACvC,MAAM,EAAE,2CAA2C;QACnD,MAAM,EAAE,wBAAwB;KACjC,CAAC;IACF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,eAAe,QAAQ,SAAS,CAAC;AAC5D,CAAC"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|