jarvis-ai-assistant 0.7.16__py3-none-any.whl → 1.0.2__py3-none-any.whl

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 (279) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +567 -222
  3. jarvis/jarvis_agent/agent_manager.py +19 -12
  4. jarvis/jarvis_agent/builtin_input_handler.py +79 -11
  5. jarvis/jarvis_agent/config_editor.py +7 -2
  6. jarvis/jarvis_agent/event_bus.py +24 -13
  7. jarvis/jarvis_agent/events.py +19 -1
  8. jarvis/jarvis_agent/file_context_handler.py +67 -64
  9. jarvis/jarvis_agent/file_methodology_manager.py +38 -24
  10. jarvis/jarvis_agent/jarvis.py +186 -114
  11. jarvis/jarvis_agent/language_extractors/__init__.py +8 -1
  12. jarvis/jarvis_agent/language_extractors/c_extractor.py +7 -4
  13. jarvis/jarvis_agent/language_extractors/cpp_extractor.py +9 -4
  14. jarvis/jarvis_agent/language_extractors/go_extractor.py +7 -4
  15. jarvis/jarvis_agent/language_extractors/java_extractor.py +27 -20
  16. jarvis/jarvis_agent/language_extractors/javascript_extractor.py +22 -17
  17. jarvis/jarvis_agent/language_extractors/python_extractor.py +7 -4
  18. jarvis/jarvis_agent/language_extractors/rust_extractor.py +7 -4
  19. jarvis/jarvis_agent/language_extractors/typescript_extractor.py +22 -17
  20. jarvis/jarvis_agent/language_support_info.py +250 -219
  21. jarvis/jarvis_agent/main.py +19 -23
  22. jarvis/jarvis_agent/memory_manager.py +9 -6
  23. jarvis/jarvis_agent/methodology_share_manager.py +21 -15
  24. jarvis/jarvis_agent/output_handler.py +4 -2
  25. jarvis/jarvis_agent/prompt_builder.py +7 -6
  26. jarvis/jarvis_agent/prompt_manager.py +113 -8
  27. jarvis/jarvis_agent/prompts.py +317 -85
  28. jarvis/jarvis_agent/protocols.py +5 -2
  29. jarvis/jarvis_agent/run_loop.py +192 -32
  30. jarvis/jarvis_agent/session_manager.py +7 -3
  31. jarvis/jarvis_agent/share_manager.py +23 -13
  32. jarvis/jarvis_agent/shell_input_handler.py +12 -8
  33. jarvis/jarvis_agent/stdio_redirect.py +25 -26
  34. jarvis/jarvis_agent/task_analyzer.py +29 -23
  35. jarvis/jarvis_agent/task_list.py +869 -0
  36. jarvis/jarvis_agent/task_manager.py +26 -23
  37. jarvis/jarvis_agent/tool_executor.py +6 -5
  38. jarvis/jarvis_agent/tool_share_manager.py +24 -14
  39. jarvis/jarvis_agent/user_interaction.py +3 -3
  40. jarvis/jarvis_agent/utils.py +9 -1
  41. jarvis/jarvis_agent/web_bridge.py +37 -17
  42. jarvis/jarvis_agent/web_output_sink.py +5 -2
  43. jarvis/jarvis_agent/web_server.py +165 -36
  44. jarvis/jarvis_c2rust/__init__.py +1 -1
  45. jarvis/jarvis_c2rust/cli.py +260 -141
  46. jarvis/jarvis_c2rust/collector.py +37 -18
  47. jarvis/jarvis_c2rust/constants.py +60 -0
  48. jarvis/jarvis_c2rust/library_replacer.py +242 -1010
  49. jarvis/jarvis_c2rust/library_replacer_checkpoint.py +133 -0
  50. jarvis/jarvis_c2rust/library_replacer_llm.py +287 -0
  51. jarvis/jarvis_c2rust/library_replacer_loader.py +191 -0
  52. jarvis/jarvis_c2rust/library_replacer_output.py +134 -0
  53. jarvis/jarvis_c2rust/library_replacer_prompts.py +124 -0
  54. jarvis/jarvis_c2rust/library_replacer_utils.py +188 -0
  55. jarvis/jarvis_c2rust/llm_module_agent.py +98 -1044
  56. jarvis/jarvis_c2rust/llm_module_agent_apply.py +170 -0
  57. jarvis/jarvis_c2rust/llm_module_agent_executor.py +288 -0
  58. jarvis/jarvis_c2rust/llm_module_agent_loader.py +170 -0
  59. jarvis/jarvis_c2rust/llm_module_agent_prompts.py +268 -0
  60. jarvis/jarvis_c2rust/llm_module_agent_types.py +57 -0
  61. jarvis/jarvis_c2rust/llm_module_agent_utils.py +150 -0
  62. jarvis/jarvis_c2rust/llm_module_agent_validator.py +119 -0
  63. jarvis/jarvis_c2rust/loaders.py +28 -10
  64. jarvis/jarvis_c2rust/models.py +5 -2
  65. jarvis/jarvis_c2rust/optimizer.py +192 -1974
  66. jarvis/jarvis_c2rust/optimizer_build_fix.py +286 -0
  67. jarvis/jarvis_c2rust/optimizer_clippy.py +766 -0
  68. jarvis/jarvis_c2rust/optimizer_config.py +49 -0
  69. jarvis/jarvis_c2rust/optimizer_docs.py +183 -0
  70. jarvis/jarvis_c2rust/optimizer_options.py +48 -0
  71. jarvis/jarvis_c2rust/optimizer_progress.py +469 -0
  72. jarvis/jarvis_c2rust/optimizer_report.py +52 -0
  73. jarvis/jarvis_c2rust/optimizer_unsafe.py +309 -0
  74. jarvis/jarvis_c2rust/optimizer_utils.py +469 -0
  75. jarvis/jarvis_c2rust/optimizer_visibility.py +185 -0
  76. jarvis/jarvis_c2rust/scanner.py +229 -166
  77. jarvis/jarvis_c2rust/transpiler.py +531 -2732
  78. jarvis/jarvis_c2rust/transpiler_agents.py +503 -0
  79. jarvis/jarvis_c2rust/transpiler_build.py +1294 -0
  80. jarvis/jarvis_c2rust/transpiler_codegen.py +204 -0
  81. jarvis/jarvis_c2rust/transpiler_compile.py +146 -0
  82. jarvis/jarvis_c2rust/transpiler_config.py +178 -0
  83. jarvis/jarvis_c2rust/transpiler_context.py +122 -0
  84. jarvis/jarvis_c2rust/transpiler_executor.py +516 -0
  85. jarvis/jarvis_c2rust/transpiler_generation.py +278 -0
  86. jarvis/jarvis_c2rust/transpiler_git.py +163 -0
  87. jarvis/jarvis_c2rust/transpiler_mod_utils.py +225 -0
  88. jarvis/jarvis_c2rust/transpiler_modules.py +336 -0
  89. jarvis/jarvis_c2rust/transpiler_planning.py +394 -0
  90. jarvis/jarvis_c2rust/transpiler_review.py +1196 -0
  91. jarvis/jarvis_c2rust/transpiler_symbols.py +176 -0
  92. jarvis/jarvis_c2rust/utils.py +269 -79
  93. jarvis/jarvis_code_agent/after_change.py +233 -0
  94. jarvis/jarvis_code_agent/build_validation_config.py +37 -30
  95. jarvis/jarvis_code_agent/builtin_rules.py +68 -0
  96. jarvis/jarvis_code_agent/code_agent.py +976 -1517
  97. jarvis/jarvis_code_agent/code_agent_build.py +227 -0
  98. jarvis/jarvis_code_agent/code_agent_diff.py +246 -0
  99. jarvis/jarvis_code_agent/code_agent_git.py +525 -0
  100. jarvis/jarvis_code_agent/code_agent_impact.py +177 -0
  101. jarvis/jarvis_code_agent/code_agent_lint.py +283 -0
  102. jarvis/jarvis_code_agent/code_agent_llm.py +159 -0
  103. jarvis/jarvis_code_agent/code_agent_postprocess.py +105 -0
  104. jarvis/jarvis_code_agent/code_agent_prompts.py +46 -0
  105. jarvis/jarvis_code_agent/code_agent_rules.py +305 -0
  106. jarvis/jarvis_code_agent/code_analyzer/__init__.py +52 -48
  107. jarvis/jarvis_code_agent/code_analyzer/base_language.py +12 -10
  108. jarvis/jarvis_code_agent/code_analyzer/build_validator/__init__.py +12 -11
  109. jarvis/jarvis_code_agent/code_analyzer/build_validator/base.py +16 -12
  110. jarvis/jarvis_code_agent/code_analyzer/build_validator/cmake.py +26 -17
  111. jarvis/jarvis_code_agent/code_analyzer/build_validator/detector.py +558 -104
  112. jarvis/jarvis_code_agent/code_analyzer/build_validator/fallback.py +27 -16
  113. jarvis/jarvis_code_agent/code_analyzer/build_validator/go.py +22 -18
  114. jarvis/jarvis_code_agent/code_analyzer/build_validator/java_gradle.py +21 -16
  115. jarvis/jarvis_code_agent/code_analyzer/build_validator/java_maven.py +20 -16
  116. jarvis/jarvis_code_agent/code_analyzer/build_validator/makefile.py +27 -16
  117. jarvis/jarvis_code_agent/code_analyzer/build_validator/nodejs.py +47 -23
  118. jarvis/jarvis_code_agent/code_analyzer/build_validator/python.py +71 -37
  119. jarvis/jarvis_code_agent/code_analyzer/build_validator/rust.py +162 -35
  120. jarvis/jarvis_code_agent/code_analyzer/build_validator/validator.py +111 -57
  121. jarvis/jarvis_code_agent/code_analyzer/build_validator.py +18 -12
  122. jarvis/jarvis_code_agent/code_analyzer/context_manager.py +185 -183
  123. jarvis/jarvis_code_agent/code_analyzer/context_recommender.py +2 -1
  124. jarvis/jarvis_code_agent/code_analyzer/dependency_analyzer.py +24 -15
  125. jarvis/jarvis_code_agent/code_analyzer/file_ignore.py +227 -141
  126. jarvis/jarvis_code_agent/code_analyzer/impact_analyzer.py +321 -247
  127. jarvis/jarvis_code_agent/code_analyzer/language_registry.py +37 -29
  128. jarvis/jarvis_code_agent/code_analyzer/language_support.py +21 -13
  129. jarvis/jarvis_code_agent/code_analyzer/languages/__init__.py +15 -9
  130. jarvis/jarvis_code_agent/code_analyzer/languages/c_cpp_language.py +75 -45
  131. jarvis/jarvis_code_agent/code_analyzer/languages/go_language.py +87 -52
  132. jarvis/jarvis_code_agent/code_analyzer/languages/java_language.py +84 -51
  133. jarvis/jarvis_code_agent/code_analyzer/languages/javascript_language.py +94 -64
  134. jarvis/jarvis_code_agent/code_analyzer/languages/python_language.py +109 -71
  135. jarvis/jarvis_code_agent/code_analyzer/languages/rust_language.py +97 -63
  136. jarvis/jarvis_code_agent/code_analyzer/languages/typescript_language.py +103 -69
  137. jarvis/jarvis_code_agent/code_analyzer/llm_context_recommender.py +271 -268
  138. jarvis/jarvis_code_agent/code_analyzer/symbol_extractor.py +76 -64
  139. jarvis/jarvis_code_agent/code_analyzer/tree_sitter_extractor.py +92 -19
  140. jarvis/jarvis_code_agent/diff_visualizer.py +998 -0
  141. jarvis/jarvis_code_agent/lint.py +223 -524
  142. jarvis/jarvis_code_agent/rule_share_manager.py +158 -0
  143. jarvis/jarvis_code_agent/rules/clean_code.md +144 -0
  144. jarvis/jarvis_code_agent/rules/code_review.md +115 -0
  145. jarvis/jarvis_code_agent/rules/documentation.md +165 -0
  146. jarvis/jarvis_code_agent/rules/generate_rules.md +52 -0
  147. jarvis/jarvis_code_agent/rules/performance.md +158 -0
  148. jarvis/jarvis_code_agent/rules/refactoring.md +139 -0
  149. jarvis/jarvis_code_agent/rules/security.md +160 -0
  150. jarvis/jarvis_code_agent/rules/tdd.md +78 -0
  151. jarvis/jarvis_code_agent/test_rules/cpp_test.md +118 -0
  152. jarvis/jarvis_code_agent/test_rules/go_test.md +98 -0
  153. jarvis/jarvis_code_agent/test_rules/java_test.md +99 -0
  154. jarvis/jarvis_code_agent/test_rules/javascript_test.md +113 -0
  155. jarvis/jarvis_code_agent/test_rules/php_test.md +117 -0
  156. jarvis/jarvis_code_agent/test_rules/python_test.md +91 -0
  157. jarvis/jarvis_code_agent/test_rules/ruby_test.md +102 -0
  158. jarvis/jarvis_code_agent/test_rules/rust_test.md +86 -0
  159. jarvis/jarvis_code_agent/utils.py +36 -26
  160. jarvis/jarvis_code_analysis/checklists/loader.py +21 -21
  161. jarvis/jarvis_code_analysis/code_review.py +64 -33
  162. jarvis/jarvis_data/config_schema.json +285 -192
  163. jarvis/jarvis_git_squash/main.py +8 -6
  164. jarvis/jarvis_git_utils/git_commiter.py +53 -76
  165. jarvis/jarvis_mcp/__init__.py +5 -2
  166. jarvis/jarvis_mcp/sse_mcp_client.py +40 -30
  167. jarvis/jarvis_mcp/stdio_mcp_client.py +27 -19
  168. jarvis/jarvis_mcp/streamable_mcp_client.py +35 -26
  169. jarvis/jarvis_memory_organizer/memory_organizer.py +78 -55
  170. jarvis/jarvis_methodology/main.py +48 -39
  171. jarvis/jarvis_multi_agent/__init__.py +56 -23
  172. jarvis/jarvis_multi_agent/main.py +15 -18
  173. jarvis/jarvis_platform/base.py +179 -111
  174. jarvis/jarvis_platform/human.py +27 -16
  175. jarvis/jarvis_platform/kimi.py +52 -45
  176. jarvis/jarvis_platform/openai.py +101 -40
  177. jarvis/jarvis_platform/registry.py +51 -33
  178. jarvis/jarvis_platform/tongyi.py +68 -38
  179. jarvis/jarvis_platform/yuanbao.py +59 -43
  180. jarvis/jarvis_platform_manager/main.py +68 -76
  181. jarvis/jarvis_platform_manager/service.py +24 -14
  182. jarvis/jarvis_rag/README_CONFIG.md +314 -0
  183. jarvis/jarvis_rag/README_DYNAMIC_LOADING.md +311 -0
  184. jarvis/jarvis_rag/README_ONLINE_MODELS.md +230 -0
  185. jarvis/jarvis_rag/__init__.py +57 -4
  186. jarvis/jarvis_rag/cache.py +3 -1
  187. jarvis/jarvis_rag/cli.py +48 -68
  188. jarvis/jarvis_rag/embedding_interface.py +39 -0
  189. jarvis/jarvis_rag/embedding_manager.py +7 -230
  190. jarvis/jarvis_rag/embeddings/__init__.py +41 -0
  191. jarvis/jarvis_rag/embeddings/base.py +114 -0
  192. jarvis/jarvis_rag/embeddings/cohere.py +66 -0
  193. jarvis/jarvis_rag/embeddings/edgefn.py +117 -0
  194. jarvis/jarvis_rag/embeddings/local.py +260 -0
  195. jarvis/jarvis_rag/embeddings/openai.py +62 -0
  196. jarvis/jarvis_rag/embeddings/registry.py +293 -0
  197. jarvis/jarvis_rag/llm_interface.py +8 -6
  198. jarvis/jarvis_rag/query_rewriter.py +8 -9
  199. jarvis/jarvis_rag/rag_pipeline.py +61 -52
  200. jarvis/jarvis_rag/reranker.py +7 -75
  201. jarvis/jarvis_rag/reranker_interface.py +32 -0
  202. jarvis/jarvis_rag/rerankers/__init__.py +41 -0
  203. jarvis/jarvis_rag/rerankers/base.py +109 -0
  204. jarvis/jarvis_rag/rerankers/cohere.py +67 -0
  205. jarvis/jarvis_rag/rerankers/edgefn.py +140 -0
  206. jarvis/jarvis_rag/rerankers/jina.py +79 -0
  207. jarvis/jarvis_rag/rerankers/local.py +89 -0
  208. jarvis/jarvis_rag/rerankers/registry.py +293 -0
  209. jarvis/jarvis_rag/retriever.py +58 -43
  210. jarvis/jarvis_sec/__init__.py +66 -141
  211. jarvis/jarvis_sec/agents.py +21 -17
  212. jarvis/jarvis_sec/analysis.py +80 -33
  213. jarvis/jarvis_sec/checkers/__init__.py +7 -13
  214. jarvis/jarvis_sec/checkers/c_checker.py +356 -164
  215. jarvis/jarvis_sec/checkers/rust_checker.py +47 -29
  216. jarvis/jarvis_sec/cli.py +43 -21
  217. jarvis/jarvis_sec/clustering.py +430 -272
  218. jarvis/jarvis_sec/file_manager.py +99 -55
  219. jarvis/jarvis_sec/parsers.py +9 -6
  220. jarvis/jarvis_sec/prompts.py +4 -3
  221. jarvis/jarvis_sec/report.py +44 -22
  222. jarvis/jarvis_sec/review.py +180 -107
  223. jarvis/jarvis_sec/status.py +50 -41
  224. jarvis/jarvis_sec/types.py +3 -0
  225. jarvis/jarvis_sec/utils.py +160 -83
  226. jarvis/jarvis_sec/verification.py +411 -181
  227. jarvis/jarvis_sec/workflow.py +132 -21
  228. jarvis/jarvis_smart_shell/main.py +28 -41
  229. jarvis/jarvis_stats/cli.py +14 -12
  230. jarvis/jarvis_stats/stats.py +28 -19
  231. jarvis/jarvis_stats/storage.py +14 -8
  232. jarvis/jarvis_stats/visualizer.py +12 -7
  233. jarvis/jarvis_tools/base.py +5 -2
  234. jarvis/jarvis_tools/clear_memory.py +13 -9
  235. jarvis/jarvis_tools/cli/main.py +23 -18
  236. jarvis/jarvis_tools/edit_file.py +572 -873
  237. jarvis/jarvis_tools/execute_script.py +10 -7
  238. jarvis/jarvis_tools/file_analyzer.py +7 -8
  239. jarvis/jarvis_tools/meta_agent.py +287 -0
  240. jarvis/jarvis_tools/methodology.py +5 -3
  241. jarvis/jarvis_tools/read_code.py +305 -1438
  242. jarvis/jarvis_tools/read_symbols.py +50 -17
  243. jarvis/jarvis_tools/read_webpage.py +19 -18
  244. jarvis/jarvis_tools/registry.py +435 -156
  245. jarvis/jarvis_tools/retrieve_memory.py +16 -11
  246. jarvis/jarvis_tools/save_memory.py +8 -6
  247. jarvis/jarvis_tools/search_web.py +31 -31
  248. jarvis/jarvis_tools/sub_agent.py +32 -28
  249. jarvis/jarvis_tools/sub_code_agent.py +44 -60
  250. jarvis/jarvis_tools/task_list_manager.py +1811 -0
  251. jarvis/jarvis_tools/virtual_tty.py +29 -19
  252. jarvis/jarvis_utils/__init__.py +4 -0
  253. jarvis/jarvis_utils/builtin_replace_map.py +2 -1
  254. jarvis/jarvis_utils/clipboard.py +9 -8
  255. jarvis/jarvis_utils/collections.py +331 -0
  256. jarvis/jarvis_utils/config.py +699 -194
  257. jarvis/jarvis_utils/dialogue_recorder.py +294 -0
  258. jarvis/jarvis_utils/embedding.py +6 -3
  259. jarvis/jarvis_utils/file_processors.py +7 -1
  260. jarvis/jarvis_utils/fzf.py +9 -3
  261. jarvis/jarvis_utils/git_utils.py +71 -42
  262. jarvis/jarvis_utils/globals.py +116 -32
  263. jarvis/jarvis_utils/http.py +6 -2
  264. jarvis/jarvis_utils/input.py +318 -83
  265. jarvis/jarvis_utils/jsonnet_compat.py +119 -104
  266. jarvis/jarvis_utils/methodology.py +37 -28
  267. jarvis/jarvis_utils/output.py +201 -44
  268. jarvis/jarvis_utils/utils.py +986 -628
  269. {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/METADATA +49 -33
  270. jarvis_ai_assistant-1.0.2.dist-info/RECORD +304 -0
  271. jarvis/jarvis_code_agent/code_analyzer/structured_code.py +0 -556
  272. jarvis/jarvis_tools/generate_new_tool.py +0 -205
  273. jarvis/jarvis_tools/lsp_client.py +0 -1552
  274. jarvis/jarvis_tools/rewrite_file.py +0 -105
  275. jarvis_ai_assistant-0.7.16.dist-info/RECORD +0 -218
  276. {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/WHEEL +0 -0
  277. {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/entry_points.txt +0 -0
  278. {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/licenses/LICENSE +0 -0
  279. {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/top_level.txt +0 -0
@@ -1,40 +1,48 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
1
  """
5
2
  构建验证器主模块
6
3
 
7
4
  提供构建验证器的主类,负责协调各个语言的验证器。
8
5
  """
9
6
 
10
- from typing import Dict, List, Optional
7
+ from typing import Dict
8
+ from typing import List
9
+ from typing import Optional
10
+ from jarvis.jarvis_utils.output import PrettyOutput
11
+
12
+ #!/usr/bin/env python3
13
+ # -*- coding: utf-8 -*-
11
14
 
12
15
 
13
- from .base import BuildSystem, BuildValidatorBase, BuildResult
16
+ from .base import BuildResult
17
+ from .base import BuildSystem
18
+ from .base import BuildValidatorBase
19
+ from .cmake import CMakeBuildValidator
14
20
  from .detector import BuildSystemDetector
15
- from .rust import RustBuildValidator
16
- from .python import PythonBuildValidator
17
- from .nodejs import NodeJSBuildValidator
18
- from .java_maven import JavaMavenBuildValidator
19
- from .java_gradle import JavaGradleBuildValidator
21
+ from .fallback import FallbackBuildValidator
20
22
  from .go import GoBuildValidator
21
- from .cmake import CMakeBuildValidator
23
+ from .java_gradle import JavaGradleBuildValidator
24
+ from .java_maven import JavaMavenBuildValidator
22
25
  from .makefile import MakefileBuildValidator
23
- from .fallback import FallbackBuildValidator
26
+ from .nodejs import NodeJSBuildValidator
27
+ from .python import PythonBuildValidator
28
+ from .rust import RustBuildValidator
24
29
 
25
30
 
26
31
  class BuildValidator:
27
32
  """构建验证器主类"""
28
-
33
+
29
34
  def __init__(self, project_root: str, timeout: int = 30):
30
35
  self.project_root = project_root
31
36
  self.timeout = timeout
32
37
  self.detector = BuildSystemDetector(project_root)
33
-
38
+
34
39
  # 导入配置管理器
35
- from jarvis.jarvis_code_agent.build_validation_config import BuildValidationConfig
40
+ from jarvis.jarvis_code_agent.build_validation_config import (
41
+ BuildValidationConfig,
42
+ )
43
+
36
44
  self.config = BuildValidationConfig(project_root)
37
-
45
+
38
46
  # 注册构建系统验证器
39
47
  self._validators: Dict[BuildSystem, BuildValidatorBase] = {
40
48
  BuildSystem.RUST: RustBuildValidator(project_root, timeout),
@@ -47,107 +55,153 @@ class BuildValidator:
47
55
  BuildSystem.C_MAKEFILE: MakefileBuildValidator(project_root, timeout),
48
56
  BuildSystem.C_MAKEFILE_CMAKE: CMakeBuildValidator(project_root, timeout),
49
57
  }
50
-
58
+
51
59
  # 兜底验证器
52
60
  self._fallback_validator = FallbackBuildValidator(project_root, timeout)
53
-
54
- def _select_build_system(self, detected_systems: List[BuildSystem]) -> Optional[BuildSystem]:
61
+
62
+ def _select_build_system(
63
+ self, detected_systems: List[BuildSystem]
64
+ ) -> Optional[BuildSystem]:
55
65
  """让用户选择构建系统
56
-
66
+
57
67
  Args:
58
68
  detected_systems: 检测到的所有构建系统列表
59
-
69
+
60
70
  Returns:
61
71
  用户选择的构建系统,如果用户取消则返回None
62
72
  """
63
73
  if not detected_systems:
64
74
  return None
65
-
75
+
66
76
  if len(detected_systems) == 1:
67
77
  # 只有一个构建系统,直接返回
68
78
  return detected_systems[0]
69
-
79
+
70
80
  # 检查配置文件中是否已有选择
71
81
  saved_system = self.config.get_selected_build_system()
72
82
  if saved_system:
73
83
  try:
74
84
  saved_enum = BuildSystem(saved_system)
75
85
  if saved_enum in detected_systems:
76
- print(f"ℹ️ 使用配置文件中保存的构建系统: {saved_system}")
86
+ PrettyOutput.auto_print(
87
+ f"ℹ️ 使用配置文件中保存的构建系统: {saved_system}"
88
+ )
77
89
  return saved_enum
78
90
  except ValueError:
79
91
  # 配置文件中保存的构建系统无效,忽略
80
92
  pass
81
-
93
+
82
94
  # 多个构建系统,需要用户选择
83
- print("\n检测到多个构建系统,请选择要使用的构建系统:")
95
+ PrettyOutput.auto_print("\n检测到多个构建系统,请选择要使用的构建系统:")
84
96
  for idx, system in enumerate(detected_systems, start=1):
85
- print(f" {idx}. {system.value}")
86
- print(f" {len(detected_systems) + 1}. 取消(使用兜底验证器)")
87
-
97
+ PrettyOutput.auto_print(f" {idx}. {system.value}")
98
+ PrettyOutput.auto_print(
99
+ f" {len(detected_systems) + 1}. 取消(使用兜底验证器)"
100
+ )
101
+
88
102
  while True:
89
103
  try:
90
104
  choice = input(f"\n请选择 (1-{len(detected_systems) + 1}): ").strip()
91
105
  choice_num = int(choice)
92
-
106
+
93
107
  if 1 <= choice_num <= len(detected_systems):
94
108
  selected = detected_systems[choice_num - 1]
95
109
  # 保存用户选择
96
110
  self.config.set_selected_build_system(selected.value)
97
- print(f"ℹ️ 用户选择构建系统: {selected.value}")
111
+ PrettyOutput.auto_print(f"ℹ️ 用户选择构建系统: {selected.value}")
98
112
  return selected
99
113
  elif choice_num == len(detected_systems) + 1:
100
- print("ℹ️ 用户取消选择,使用兜底验证器")
114
+ PrettyOutput.auto_print("ℹ️ 用户取消选择,使用兜底验证器")
101
115
  return None
102
116
  else:
103
- print(f"无效选择,请输入 1-{len(detected_systems) + 1}")
117
+ PrettyOutput.auto_print(
118
+ f"无效选择,请输入 1-{len(detected_systems) + 1}"
119
+ )
104
120
  except ValueError:
105
- print("请输入有效的数字")
121
+ PrettyOutput.auto_print("请输入有效的数字")
106
122
  except (KeyboardInterrupt, EOFError):
107
- print("\n用户取消,使用兜底验证器")
123
+ PrettyOutput.auto_print("\n用户取消,使用兜底验证器")
108
124
  return None
109
-
125
+
110
126
  def validate(self, modified_files: Optional[List[str]] = None) -> BuildResult:
111
127
  """验证构建
112
-
128
+
113
129
  Args:
114
130
  modified_files: 修改的文件列表(可选,用于增量验证)
115
-
131
+
116
132
  Returns:
117
133
  BuildResult: 验证结果
118
134
  """
119
- # 检测所有可能的构建系统
120
- detected_systems = self.detector.detect_all()
121
-
135
+ # 优先检查配置文件中是否已有保存的构建系统
136
+ saved_system = self.config.get_selected_build_system()
137
+ if saved_system:
138
+ try:
139
+ saved_enum = BuildSystem(saved_system)
140
+ if saved_enum in self._validators:
141
+ validator = self._validators[saved_enum]
142
+ PrettyOutput.auto_print(
143
+ f"ℹ️ 使用配置文件中保存的构建系统: {saved_system}"
144
+ )
145
+ try:
146
+ return validator.validate(modified_files)
147
+ except Exception as e:
148
+ PrettyOutput.auto_print(
149
+ f"⚠️ 验证器 {validator.__class__.__name__} 执行失败: {e}, 使用兜底验证器"
150
+ )
151
+ return self._fallback_validator.validate(modified_files)
152
+ elif saved_enum == BuildSystem.UNKNOWN:
153
+ PrettyOutput.auto_print(
154
+ "ℹ️ 使用配置文件中保存的构建系统: unknown,使用兜底验证器"
155
+ )
156
+ return self._fallback_validator.validate(modified_files)
157
+ except ValueError:
158
+ # 配置文件中保存的构建系统无效,继续检测
159
+ pass
160
+
161
+ # 使用LLM检测构建系统(基于文件统计和文件列表)
162
+ detected_systems = self.detector.detect_with_llm_and_confirm()
163
+
122
164
  if not detected_systems:
123
- # 未检测到构建系统,使用兜底验证器
124
- print("ℹ️ 未检测到构建系统,使用兜底验证器")
165
+ # 用户取消或未检测到构建系统,使用兜底验证器
166
+ PrettyOutput.auto_print("ℹ️ 未检测到构建系统或用户取消,使用兜底验证器")
167
+ return self._fallback_validator.validate(modified_files)
168
+
169
+ # 使用检测到的第一个构建系统(用户已确认)
170
+ build_system = detected_systems[0]
171
+
172
+ if build_system == BuildSystem.UNKNOWN:
173
+ # 未知构建系统,使用兜底验证器
174
+ PrettyOutput.auto_print("ℹ️ 构建系统为unknown,使用兜底验证器")
125
175
  return self._fallback_validator.validate(modified_files)
126
-
127
- # 让用户选择构建系统(如果多个)
128
- build_system = self._select_build_system(detected_systems)
129
-
130
- if build_system and build_system in self._validators:
176
+
177
+ if build_system in self._validators:
131
178
  validator = self._validators[build_system]
132
- print(f"ℹ️ 使用构建系统: {build_system.value}, 验证器: {validator.__class__.__name__}")
179
+ PrettyOutput.auto_print(
180
+ f"ℹ️ 使用构建系统: {build_system.value}, 验证器: {validator.__class__.__name__}"
181
+ )
133
182
  try:
134
183
  return validator.validate(modified_files)
135
184
  except Exception as e:
136
- print(f"⚠️ 验证器 {validator.__class__.__name__} 执行失败: {e}, 使用兜底验证器")
185
+ PrettyOutput.auto_print(
186
+ f"⚠️ 验证器 {validator.__class__.__name__} 执行失败: {e}, 使用兜底验证器"
187
+ )
137
188
  # 验证器执行失败时,使用兜底验证器
138
189
  return self._fallback_validator.validate(modified_files)
139
190
  else:
140
- # 用户取消或未选择,使用兜底验证器
141
- print("ℹ️ 使用兜底验证器")
191
+ # 未找到对应的验证器,使用兜底验证器
192
+ PrettyOutput.auto_print("ℹ️ 未找到对应的验证器,使用兜底验证器")
142
193
  return self._fallback_validator.validate(modified_files)
143
-
144
- def register_validator(self, build_system: BuildSystem, validator: BuildValidatorBase):
194
+
195
+ def register_validator(
196
+ self, build_system: BuildSystem, validator: BuildValidatorBase
197
+ ):
145
198
  """注册自定义验证器(扩展点)
146
-
199
+
147
200
  Args:
148
201
  build_system: 构建系统类型
149
202
  validator: 验证器实例
150
203
  """
151
204
  self._validators[build_system] = validator
152
- print(f"ℹ️ 注册自定义验证器: {build_system.value} -> {validator.__class__.__name__}")
153
-
205
+ PrettyOutput.auto_print(
206
+ f"ℹ️ 注册自定义验证器: {build_system.value} -> {validator.__class__.__name__}"
207
+ )
@@ -8,22 +8,28 @@
8
8
  """
9
9
 
10
10
  # 从新模块导入所有内容,保持向后兼容
11
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import BuildResult
12
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import BuildSystem
13
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import BuildSystemDetector
14
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import BuildValidator
15
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import BuildValidatorBase
16
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import CMakeBuildValidator
17
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import (
18
+ FallbackBuildValidator,
19
+ )
20
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import GoBuildValidator
11
21
  from jarvis.jarvis_code_agent.code_analyzer.build_validator import (
12
- BuildSystem,
13
- BuildResult,
14
- BuildValidatorBase,
15
- BuildSystemDetector,
16
- BuildValidator,
17
- RustBuildValidator,
18
- PythonBuildValidator,
19
- NodeJSBuildValidator,
20
- JavaMavenBuildValidator,
21
22
  JavaGradleBuildValidator,
22
- GoBuildValidator,
23
- CMakeBuildValidator,
23
+ )
24
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import (
25
+ JavaMavenBuildValidator,
26
+ )
27
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import (
24
28
  MakefileBuildValidator,
25
- FallbackBuildValidator,
26
29
  )
30
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import NodeJSBuildValidator
31
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import PythonBuildValidator
32
+ from jarvis.jarvis_code_agent.code_analyzer.build_validator import RustBuildValidator
27
33
 
28
34
  __all__ = [
29
35
  "BuildSystem",