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.
- jarvis/__init__.py +1 -1
- jarvis/jarvis_agent/__init__.py +567 -222
- jarvis/jarvis_agent/agent_manager.py +19 -12
- jarvis/jarvis_agent/builtin_input_handler.py +79 -11
- jarvis/jarvis_agent/config_editor.py +7 -2
- jarvis/jarvis_agent/event_bus.py +24 -13
- jarvis/jarvis_agent/events.py +19 -1
- jarvis/jarvis_agent/file_context_handler.py +67 -64
- jarvis/jarvis_agent/file_methodology_manager.py +38 -24
- jarvis/jarvis_agent/jarvis.py +186 -114
- jarvis/jarvis_agent/language_extractors/__init__.py +8 -1
- jarvis/jarvis_agent/language_extractors/c_extractor.py +7 -4
- jarvis/jarvis_agent/language_extractors/cpp_extractor.py +9 -4
- jarvis/jarvis_agent/language_extractors/go_extractor.py +7 -4
- jarvis/jarvis_agent/language_extractors/java_extractor.py +27 -20
- jarvis/jarvis_agent/language_extractors/javascript_extractor.py +22 -17
- jarvis/jarvis_agent/language_extractors/python_extractor.py +7 -4
- jarvis/jarvis_agent/language_extractors/rust_extractor.py +7 -4
- jarvis/jarvis_agent/language_extractors/typescript_extractor.py +22 -17
- jarvis/jarvis_agent/language_support_info.py +250 -219
- jarvis/jarvis_agent/main.py +19 -23
- jarvis/jarvis_agent/memory_manager.py +9 -6
- jarvis/jarvis_agent/methodology_share_manager.py +21 -15
- jarvis/jarvis_agent/output_handler.py +4 -2
- jarvis/jarvis_agent/prompt_builder.py +7 -6
- jarvis/jarvis_agent/prompt_manager.py +113 -8
- jarvis/jarvis_agent/prompts.py +317 -85
- jarvis/jarvis_agent/protocols.py +5 -2
- jarvis/jarvis_agent/run_loop.py +192 -32
- jarvis/jarvis_agent/session_manager.py +7 -3
- jarvis/jarvis_agent/share_manager.py +23 -13
- jarvis/jarvis_agent/shell_input_handler.py +12 -8
- jarvis/jarvis_agent/stdio_redirect.py +25 -26
- jarvis/jarvis_agent/task_analyzer.py +29 -23
- jarvis/jarvis_agent/task_list.py +869 -0
- jarvis/jarvis_agent/task_manager.py +26 -23
- jarvis/jarvis_agent/tool_executor.py +6 -5
- jarvis/jarvis_agent/tool_share_manager.py +24 -14
- jarvis/jarvis_agent/user_interaction.py +3 -3
- jarvis/jarvis_agent/utils.py +9 -1
- jarvis/jarvis_agent/web_bridge.py +37 -17
- jarvis/jarvis_agent/web_output_sink.py +5 -2
- jarvis/jarvis_agent/web_server.py +165 -36
- jarvis/jarvis_c2rust/__init__.py +1 -1
- jarvis/jarvis_c2rust/cli.py +260 -141
- jarvis/jarvis_c2rust/collector.py +37 -18
- jarvis/jarvis_c2rust/constants.py +60 -0
- jarvis/jarvis_c2rust/library_replacer.py +242 -1010
- jarvis/jarvis_c2rust/library_replacer_checkpoint.py +133 -0
- jarvis/jarvis_c2rust/library_replacer_llm.py +287 -0
- jarvis/jarvis_c2rust/library_replacer_loader.py +191 -0
- jarvis/jarvis_c2rust/library_replacer_output.py +134 -0
- jarvis/jarvis_c2rust/library_replacer_prompts.py +124 -0
- jarvis/jarvis_c2rust/library_replacer_utils.py +188 -0
- jarvis/jarvis_c2rust/llm_module_agent.py +98 -1044
- jarvis/jarvis_c2rust/llm_module_agent_apply.py +170 -0
- jarvis/jarvis_c2rust/llm_module_agent_executor.py +288 -0
- jarvis/jarvis_c2rust/llm_module_agent_loader.py +170 -0
- jarvis/jarvis_c2rust/llm_module_agent_prompts.py +268 -0
- jarvis/jarvis_c2rust/llm_module_agent_types.py +57 -0
- jarvis/jarvis_c2rust/llm_module_agent_utils.py +150 -0
- jarvis/jarvis_c2rust/llm_module_agent_validator.py +119 -0
- jarvis/jarvis_c2rust/loaders.py +28 -10
- jarvis/jarvis_c2rust/models.py +5 -2
- jarvis/jarvis_c2rust/optimizer.py +192 -1974
- jarvis/jarvis_c2rust/optimizer_build_fix.py +286 -0
- jarvis/jarvis_c2rust/optimizer_clippy.py +766 -0
- jarvis/jarvis_c2rust/optimizer_config.py +49 -0
- jarvis/jarvis_c2rust/optimizer_docs.py +183 -0
- jarvis/jarvis_c2rust/optimizer_options.py +48 -0
- jarvis/jarvis_c2rust/optimizer_progress.py +469 -0
- jarvis/jarvis_c2rust/optimizer_report.py +52 -0
- jarvis/jarvis_c2rust/optimizer_unsafe.py +309 -0
- jarvis/jarvis_c2rust/optimizer_utils.py +469 -0
- jarvis/jarvis_c2rust/optimizer_visibility.py +185 -0
- jarvis/jarvis_c2rust/scanner.py +229 -166
- jarvis/jarvis_c2rust/transpiler.py +531 -2732
- jarvis/jarvis_c2rust/transpiler_agents.py +503 -0
- jarvis/jarvis_c2rust/transpiler_build.py +1294 -0
- jarvis/jarvis_c2rust/transpiler_codegen.py +204 -0
- jarvis/jarvis_c2rust/transpiler_compile.py +146 -0
- jarvis/jarvis_c2rust/transpiler_config.py +178 -0
- jarvis/jarvis_c2rust/transpiler_context.py +122 -0
- jarvis/jarvis_c2rust/transpiler_executor.py +516 -0
- jarvis/jarvis_c2rust/transpiler_generation.py +278 -0
- jarvis/jarvis_c2rust/transpiler_git.py +163 -0
- jarvis/jarvis_c2rust/transpiler_mod_utils.py +225 -0
- jarvis/jarvis_c2rust/transpiler_modules.py +336 -0
- jarvis/jarvis_c2rust/transpiler_planning.py +394 -0
- jarvis/jarvis_c2rust/transpiler_review.py +1196 -0
- jarvis/jarvis_c2rust/transpiler_symbols.py +176 -0
- jarvis/jarvis_c2rust/utils.py +269 -79
- jarvis/jarvis_code_agent/after_change.py +233 -0
- jarvis/jarvis_code_agent/build_validation_config.py +37 -30
- jarvis/jarvis_code_agent/builtin_rules.py +68 -0
- jarvis/jarvis_code_agent/code_agent.py +976 -1517
- jarvis/jarvis_code_agent/code_agent_build.py +227 -0
- jarvis/jarvis_code_agent/code_agent_diff.py +246 -0
- jarvis/jarvis_code_agent/code_agent_git.py +525 -0
- jarvis/jarvis_code_agent/code_agent_impact.py +177 -0
- jarvis/jarvis_code_agent/code_agent_lint.py +283 -0
- jarvis/jarvis_code_agent/code_agent_llm.py +159 -0
- jarvis/jarvis_code_agent/code_agent_postprocess.py +105 -0
- jarvis/jarvis_code_agent/code_agent_prompts.py +46 -0
- jarvis/jarvis_code_agent/code_agent_rules.py +305 -0
- jarvis/jarvis_code_agent/code_analyzer/__init__.py +52 -48
- jarvis/jarvis_code_agent/code_analyzer/base_language.py +12 -10
- jarvis/jarvis_code_agent/code_analyzer/build_validator/__init__.py +12 -11
- jarvis/jarvis_code_agent/code_analyzer/build_validator/base.py +16 -12
- jarvis/jarvis_code_agent/code_analyzer/build_validator/cmake.py +26 -17
- jarvis/jarvis_code_agent/code_analyzer/build_validator/detector.py +558 -104
- jarvis/jarvis_code_agent/code_analyzer/build_validator/fallback.py +27 -16
- jarvis/jarvis_code_agent/code_analyzer/build_validator/go.py +22 -18
- jarvis/jarvis_code_agent/code_analyzer/build_validator/java_gradle.py +21 -16
- jarvis/jarvis_code_agent/code_analyzer/build_validator/java_maven.py +20 -16
- jarvis/jarvis_code_agent/code_analyzer/build_validator/makefile.py +27 -16
- jarvis/jarvis_code_agent/code_analyzer/build_validator/nodejs.py +47 -23
- jarvis/jarvis_code_agent/code_analyzer/build_validator/python.py +71 -37
- jarvis/jarvis_code_agent/code_analyzer/build_validator/rust.py +162 -35
- jarvis/jarvis_code_agent/code_analyzer/build_validator/validator.py +111 -57
- jarvis/jarvis_code_agent/code_analyzer/build_validator.py +18 -12
- jarvis/jarvis_code_agent/code_analyzer/context_manager.py +185 -183
- jarvis/jarvis_code_agent/code_analyzer/context_recommender.py +2 -1
- jarvis/jarvis_code_agent/code_analyzer/dependency_analyzer.py +24 -15
- jarvis/jarvis_code_agent/code_analyzer/file_ignore.py +227 -141
- jarvis/jarvis_code_agent/code_analyzer/impact_analyzer.py +321 -247
- jarvis/jarvis_code_agent/code_analyzer/language_registry.py +37 -29
- jarvis/jarvis_code_agent/code_analyzer/language_support.py +21 -13
- jarvis/jarvis_code_agent/code_analyzer/languages/__init__.py +15 -9
- jarvis/jarvis_code_agent/code_analyzer/languages/c_cpp_language.py +75 -45
- jarvis/jarvis_code_agent/code_analyzer/languages/go_language.py +87 -52
- jarvis/jarvis_code_agent/code_analyzer/languages/java_language.py +84 -51
- jarvis/jarvis_code_agent/code_analyzer/languages/javascript_language.py +94 -64
- jarvis/jarvis_code_agent/code_analyzer/languages/python_language.py +109 -71
- jarvis/jarvis_code_agent/code_analyzer/languages/rust_language.py +97 -63
- jarvis/jarvis_code_agent/code_analyzer/languages/typescript_language.py +103 -69
- jarvis/jarvis_code_agent/code_analyzer/llm_context_recommender.py +271 -268
- jarvis/jarvis_code_agent/code_analyzer/symbol_extractor.py +76 -64
- jarvis/jarvis_code_agent/code_analyzer/tree_sitter_extractor.py +92 -19
- jarvis/jarvis_code_agent/diff_visualizer.py +998 -0
- jarvis/jarvis_code_agent/lint.py +223 -524
- jarvis/jarvis_code_agent/rule_share_manager.py +158 -0
- jarvis/jarvis_code_agent/rules/clean_code.md +144 -0
- jarvis/jarvis_code_agent/rules/code_review.md +115 -0
- jarvis/jarvis_code_agent/rules/documentation.md +165 -0
- jarvis/jarvis_code_agent/rules/generate_rules.md +52 -0
- jarvis/jarvis_code_agent/rules/performance.md +158 -0
- jarvis/jarvis_code_agent/rules/refactoring.md +139 -0
- jarvis/jarvis_code_agent/rules/security.md +160 -0
- jarvis/jarvis_code_agent/rules/tdd.md +78 -0
- jarvis/jarvis_code_agent/test_rules/cpp_test.md +118 -0
- jarvis/jarvis_code_agent/test_rules/go_test.md +98 -0
- jarvis/jarvis_code_agent/test_rules/java_test.md +99 -0
- jarvis/jarvis_code_agent/test_rules/javascript_test.md +113 -0
- jarvis/jarvis_code_agent/test_rules/php_test.md +117 -0
- jarvis/jarvis_code_agent/test_rules/python_test.md +91 -0
- jarvis/jarvis_code_agent/test_rules/ruby_test.md +102 -0
- jarvis/jarvis_code_agent/test_rules/rust_test.md +86 -0
- jarvis/jarvis_code_agent/utils.py +36 -26
- jarvis/jarvis_code_analysis/checklists/loader.py +21 -21
- jarvis/jarvis_code_analysis/code_review.py +64 -33
- jarvis/jarvis_data/config_schema.json +285 -192
- jarvis/jarvis_git_squash/main.py +8 -6
- jarvis/jarvis_git_utils/git_commiter.py +53 -76
- jarvis/jarvis_mcp/__init__.py +5 -2
- jarvis/jarvis_mcp/sse_mcp_client.py +40 -30
- jarvis/jarvis_mcp/stdio_mcp_client.py +27 -19
- jarvis/jarvis_mcp/streamable_mcp_client.py +35 -26
- jarvis/jarvis_memory_organizer/memory_organizer.py +78 -55
- jarvis/jarvis_methodology/main.py +48 -39
- jarvis/jarvis_multi_agent/__init__.py +56 -23
- jarvis/jarvis_multi_agent/main.py +15 -18
- jarvis/jarvis_platform/base.py +179 -111
- jarvis/jarvis_platform/human.py +27 -16
- jarvis/jarvis_platform/kimi.py +52 -45
- jarvis/jarvis_platform/openai.py +101 -40
- jarvis/jarvis_platform/registry.py +51 -33
- jarvis/jarvis_platform/tongyi.py +68 -38
- jarvis/jarvis_platform/yuanbao.py +59 -43
- jarvis/jarvis_platform_manager/main.py +68 -76
- jarvis/jarvis_platform_manager/service.py +24 -14
- jarvis/jarvis_rag/README_CONFIG.md +314 -0
- jarvis/jarvis_rag/README_DYNAMIC_LOADING.md +311 -0
- jarvis/jarvis_rag/README_ONLINE_MODELS.md +230 -0
- jarvis/jarvis_rag/__init__.py +57 -4
- jarvis/jarvis_rag/cache.py +3 -1
- jarvis/jarvis_rag/cli.py +48 -68
- jarvis/jarvis_rag/embedding_interface.py +39 -0
- jarvis/jarvis_rag/embedding_manager.py +7 -230
- jarvis/jarvis_rag/embeddings/__init__.py +41 -0
- jarvis/jarvis_rag/embeddings/base.py +114 -0
- jarvis/jarvis_rag/embeddings/cohere.py +66 -0
- jarvis/jarvis_rag/embeddings/edgefn.py +117 -0
- jarvis/jarvis_rag/embeddings/local.py +260 -0
- jarvis/jarvis_rag/embeddings/openai.py +62 -0
- jarvis/jarvis_rag/embeddings/registry.py +293 -0
- jarvis/jarvis_rag/llm_interface.py +8 -6
- jarvis/jarvis_rag/query_rewriter.py +8 -9
- jarvis/jarvis_rag/rag_pipeline.py +61 -52
- jarvis/jarvis_rag/reranker.py +7 -75
- jarvis/jarvis_rag/reranker_interface.py +32 -0
- jarvis/jarvis_rag/rerankers/__init__.py +41 -0
- jarvis/jarvis_rag/rerankers/base.py +109 -0
- jarvis/jarvis_rag/rerankers/cohere.py +67 -0
- jarvis/jarvis_rag/rerankers/edgefn.py +140 -0
- jarvis/jarvis_rag/rerankers/jina.py +79 -0
- jarvis/jarvis_rag/rerankers/local.py +89 -0
- jarvis/jarvis_rag/rerankers/registry.py +293 -0
- jarvis/jarvis_rag/retriever.py +58 -43
- jarvis/jarvis_sec/__init__.py +66 -141
- jarvis/jarvis_sec/agents.py +21 -17
- jarvis/jarvis_sec/analysis.py +80 -33
- jarvis/jarvis_sec/checkers/__init__.py +7 -13
- jarvis/jarvis_sec/checkers/c_checker.py +356 -164
- jarvis/jarvis_sec/checkers/rust_checker.py +47 -29
- jarvis/jarvis_sec/cli.py +43 -21
- jarvis/jarvis_sec/clustering.py +430 -272
- jarvis/jarvis_sec/file_manager.py +99 -55
- jarvis/jarvis_sec/parsers.py +9 -6
- jarvis/jarvis_sec/prompts.py +4 -3
- jarvis/jarvis_sec/report.py +44 -22
- jarvis/jarvis_sec/review.py +180 -107
- jarvis/jarvis_sec/status.py +50 -41
- jarvis/jarvis_sec/types.py +3 -0
- jarvis/jarvis_sec/utils.py +160 -83
- jarvis/jarvis_sec/verification.py +411 -181
- jarvis/jarvis_sec/workflow.py +132 -21
- jarvis/jarvis_smart_shell/main.py +28 -41
- jarvis/jarvis_stats/cli.py +14 -12
- jarvis/jarvis_stats/stats.py +28 -19
- jarvis/jarvis_stats/storage.py +14 -8
- jarvis/jarvis_stats/visualizer.py +12 -7
- jarvis/jarvis_tools/base.py +5 -2
- jarvis/jarvis_tools/clear_memory.py +13 -9
- jarvis/jarvis_tools/cli/main.py +23 -18
- jarvis/jarvis_tools/edit_file.py +572 -873
- jarvis/jarvis_tools/execute_script.py +10 -7
- jarvis/jarvis_tools/file_analyzer.py +7 -8
- jarvis/jarvis_tools/meta_agent.py +287 -0
- jarvis/jarvis_tools/methodology.py +5 -3
- jarvis/jarvis_tools/read_code.py +305 -1438
- jarvis/jarvis_tools/read_symbols.py +50 -17
- jarvis/jarvis_tools/read_webpage.py +19 -18
- jarvis/jarvis_tools/registry.py +435 -156
- jarvis/jarvis_tools/retrieve_memory.py +16 -11
- jarvis/jarvis_tools/save_memory.py +8 -6
- jarvis/jarvis_tools/search_web.py +31 -31
- jarvis/jarvis_tools/sub_agent.py +32 -28
- jarvis/jarvis_tools/sub_code_agent.py +44 -60
- jarvis/jarvis_tools/task_list_manager.py +1811 -0
- jarvis/jarvis_tools/virtual_tty.py +29 -19
- jarvis/jarvis_utils/__init__.py +4 -0
- jarvis/jarvis_utils/builtin_replace_map.py +2 -1
- jarvis/jarvis_utils/clipboard.py +9 -8
- jarvis/jarvis_utils/collections.py +331 -0
- jarvis/jarvis_utils/config.py +699 -194
- jarvis/jarvis_utils/dialogue_recorder.py +294 -0
- jarvis/jarvis_utils/embedding.py +6 -3
- jarvis/jarvis_utils/file_processors.py +7 -1
- jarvis/jarvis_utils/fzf.py +9 -3
- jarvis/jarvis_utils/git_utils.py +71 -42
- jarvis/jarvis_utils/globals.py +116 -32
- jarvis/jarvis_utils/http.py +6 -2
- jarvis/jarvis_utils/input.py +318 -83
- jarvis/jarvis_utils/jsonnet_compat.py +119 -104
- jarvis/jarvis_utils/methodology.py +37 -28
- jarvis/jarvis_utils/output.py +201 -44
- jarvis/jarvis_utils/utils.py +986 -628
- {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/METADATA +49 -33
- jarvis_ai_assistant-1.0.2.dist-info/RECORD +304 -0
- jarvis/jarvis_code_agent/code_analyzer/structured_code.py +0 -556
- jarvis/jarvis_tools/generate_new_tool.py +0 -205
- jarvis/jarvis_tools/lsp_client.py +0 -1552
- jarvis/jarvis_tools/rewrite_file.py +0 -105
- jarvis_ai_assistant-0.7.16.dist-info/RECORD +0 -218
- {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.7.16.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/licenses/LICENSE +0 -0
- {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
|
|
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
|
|
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 .
|
|
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 .
|
|
23
|
+
from .java_gradle import JavaGradleBuildValidator
|
|
24
|
+
from .java_maven import JavaMavenBuildValidator
|
|
22
25
|
from .makefile import MakefileBuildValidator
|
|
23
|
-
from .
|
|
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
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
95
|
+
PrettyOutput.auto_print("\n检测到多个构建系统,请选择要使用的构建系统:")
|
|
84
96
|
for idx, system in enumerate(detected_systems, start=1):
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
111
|
+
PrettyOutput.auto_print(f"ℹ️ 用户选择构建系统: {selected.value}")
|
|
98
112
|
return selected
|
|
99
113
|
elif choice_num == len(detected_systems) + 1:
|
|
100
|
-
|
|
114
|
+
PrettyOutput.auto_print("ℹ️ 用户取消选择,使用兜底验证器")
|
|
101
115
|
return None
|
|
102
116
|
else:
|
|
103
|
-
|
|
117
|
+
PrettyOutput.auto_print(
|
|
118
|
+
f"无效选择,请输入 1-{len(detected_systems) + 1}"
|
|
119
|
+
)
|
|
104
120
|
except ValueError:
|
|
105
|
-
|
|
121
|
+
PrettyOutput.auto_print("请输入有效的数字")
|
|
106
122
|
except (KeyboardInterrupt, EOFError):
|
|
107
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
191
|
+
# 未找到对应的验证器,使用兜底验证器
|
|
192
|
+
PrettyOutput.auto_print("ℹ️ 未找到对应的验证器,使用兜底验证器")
|
|
142
193
|
return self._fallback_validator.validate(modified_files)
|
|
143
|
-
|
|
144
|
-
def register_validator(
|
|
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
|
-
|
|
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
|
-
|
|
23
|
-
|
|
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",
|