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
jarvis/jarvis_sec/status.py
CHANGED
|
@@ -9,16 +9,19 @@
|
|
|
9
9
|
import json
|
|
10
10
|
from datetime import datetime
|
|
11
11
|
from pathlib import Path
|
|
12
|
-
from typing import
|
|
12
|
+
from typing import Any
|
|
13
|
+
from typing import Dict
|
|
14
|
+
from typing import Optional
|
|
15
|
+
from typing import cast
|
|
13
16
|
|
|
14
17
|
|
|
15
18
|
class StatusManager:
|
|
16
19
|
"""进度状态管理器"""
|
|
17
|
-
|
|
20
|
+
|
|
18
21
|
def __init__(self, entry_path: str):
|
|
19
22
|
"""
|
|
20
23
|
初始化状态管理器
|
|
21
|
-
|
|
24
|
+
|
|
22
25
|
Args:
|
|
23
26
|
entry_path: 待分析的根目录路径(可以是项目根目录或 .jarvis/sec 目录)
|
|
24
27
|
"""
|
|
@@ -30,21 +33,21 @@ class StatusManager:
|
|
|
30
33
|
sec_dir = self.entry_path / ".jarvis" / "sec"
|
|
31
34
|
self.status_path = sec_dir / "status.json"
|
|
32
35
|
self._ensure_dir()
|
|
33
|
-
|
|
36
|
+
|
|
34
37
|
def _ensure_dir(self):
|
|
35
38
|
"""确保状态文件目录存在"""
|
|
36
39
|
self.status_path.parent.mkdir(parents=True, exist_ok=True)
|
|
37
|
-
|
|
40
|
+
|
|
38
41
|
def _read_status(self) -> Dict[str, Any]:
|
|
39
42
|
"""读取当前状态"""
|
|
40
43
|
if not self.status_path.exists():
|
|
41
44
|
return {}
|
|
42
45
|
try:
|
|
43
46
|
with self.status_path.open("r", encoding="utf-8") as f:
|
|
44
|
-
return json.load(f)
|
|
47
|
+
return cast(Dict[str, Any], json.load(f))
|
|
45
48
|
except Exception:
|
|
46
49
|
return {}
|
|
47
|
-
|
|
50
|
+
|
|
48
51
|
def _write_status(self, status: Dict[str, Any]):
|
|
49
52
|
"""写入状态文件"""
|
|
50
53
|
try:
|
|
@@ -54,7 +57,7 @@ class StatusManager:
|
|
|
54
57
|
except Exception:
|
|
55
58
|
# 状态文件写入失败不影响主流程
|
|
56
59
|
pass
|
|
57
|
-
|
|
60
|
+
|
|
58
61
|
def update_stage(
|
|
59
62
|
self,
|
|
60
63
|
stage: str,
|
|
@@ -66,7 +69,7 @@ class StatusManager:
|
|
|
66
69
|
):
|
|
67
70
|
"""
|
|
68
71
|
更新当前阶段和进度
|
|
69
|
-
|
|
72
|
+
|
|
70
73
|
Args:
|
|
71
74
|
stage: 阶段名称(pre_scan, clustering, verification, completed, error)
|
|
72
75
|
progress: 进度百分比(0-100),如果为None则根据current/total计算
|
|
@@ -76,11 +79,11 @@ class StatusManager:
|
|
|
76
79
|
details: 额外的详细信息
|
|
77
80
|
"""
|
|
78
81
|
status = self._read_status()
|
|
79
|
-
|
|
82
|
+
|
|
80
83
|
# 计算进度百分比
|
|
81
84
|
if progress is None and current is not None and total is not None and total > 0:
|
|
82
85
|
progress = (current / total) * 100
|
|
83
|
-
|
|
86
|
+
|
|
84
87
|
# 更新状态
|
|
85
88
|
status["stage"] = stage
|
|
86
89
|
if progress is not None:
|
|
@@ -93,21 +96,20 @@ class StatusManager:
|
|
|
93
96
|
status["message"] = message
|
|
94
97
|
if details:
|
|
95
98
|
status["details"] = details
|
|
96
|
-
|
|
99
|
+
|
|
97
100
|
# 设置阶段开始时间(如果是新阶段)
|
|
98
101
|
if "stage_history" not in status:
|
|
99
102
|
status["stage_history"] = []
|
|
100
|
-
|
|
103
|
+
|
|
101
104
|
# 检查是否是阶段切换
|
|
102
105
|
last_stage = status.get("stage")
|
|
103
106
|
if last_stage != stage:
|
|
104
|
-
status["stage_history"].append(
|
|
105
|
-
"stage": stage,
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
status["stage_history"].append(
|
|
108
|
+
{"stage": stage, "started_at": datetime.utcnow().isoformat() + "Z"}
|
|
109
|
+
)
|
|
110
|
+
|
|
109
111
|
self._write_status(status)
|
|
110
|
-
|
|
112
|
+
|
|
111
113
|
def update_pre_scan(
|
|
112
114
|
self,
|
|
113
115
|
current_files: Optional[int] = None,
|
|
@@ -119,11 +121,11 @@ class StatusManager:
|
|
|
119
121
|
details = {}
|
|
120
122
|
if issues_found is not None:
|
|
121
123
|
details["issues_found"] = issues_found
|
|
122
|
-
|
|
124
|
+
|
|
123
125
|
progress = None
|
|
124
126
|
if current_files is not None and total_files is not None and total_files > 0:
|
|
125
127
|
progress = (current_files / total_files) * 100
|
|
126
|
-
|
|
128
|
+
|
|
127
129
|
self.update_stage(
|
|
128
130
|
stage="pre_scan",
|
|
129
131
|
progress=progress,
|
|
@@ -132,7 +134,7 @@ class StatusManager:
|
|
|
132
134
|
message=message or "正在进行启发式扫描...",
|
|
133
135
|
details=details,
|
|
134
136
|
)
|
|
135
|
-
|
|
137
|
+
|
|
136
138
|
def update_clustering(
|
|
137
139
|
self,
|
|
138
140
|
current_file: Optional[int] = None,
|
|
@@ -143,19 +145,19 @@ class StatusManager:
|
|
|
143
145
|
message: Optional[str] = None,
|
|
144
146
|
):
|
|
145
147
|
"""更新聚类阶段状态"""
|
|
146
|
-
details = {}
|
|
148
|
+
details: Dict[str, Any] = {}
|
|
147
149
|
if file_name:
|
|
148
150
|
details["current_file"] = file_name
|
|
149
151
|
if current_batch is not None:
|
|
150
152
|
details["current_batch"] = current_batch
|
|
151
153
|
if total_batches is not None:
|
|
152
154
|
details["total_batches"] = total_batches
|
|
153
|
-
|
|
155
|
+
|
|
154
156
|
# 计算总体进度(文件级别)
|
|
155
157
|
progress = None
|
|
156
158
|
if current_file is not None and total_files is not None and total_files > 0:
|
|
157
159
|
progress = (current_file / total_files) * 100
|
|
158
|
-
|
|
160
|
+
|
|
159
161
|
self.update_stage(
|
|
160
162
|
stage="clustering",
|
|
161
163
|
progress=progress,
|
|
@@ -164,7 +166,7 @@ class StatusManager:
|
|
|
164
166
|
message=message or "正在进行聚类分析...",
|
|
165
167
|
details=details,
|
|
166
168
|
)
|
|
167
|
-
|
|
169
|
+
|
|
168
170
|
def update_review(
|
|
169
171
|
self,
|
|
170
172
|
current_review: Optional[int] = None,
|
|
@@ -172,13 +174,17 @@ class StatusManager:
|
|
|
172
174
|
message: Optional[str] = None,
|
|
173
175
|
):
|
|
174
176
|
"""更新复核阶段状态"""
|
|
175
|
-
details = {}
|
|
176
|
-
|
|
177
|
+
details: Dict[str, Any] = {}
|
|
178
|
+
|
|
177
179
|
# 计算总体进度
|
|
178
180
|
progress = None
|
|
179
|
-
if
|
|
181
|
+
if (
|
|
182
|
+
current_review is not None
|
|
183
|
+
and total_reviews is not None
|
|
184
|
+
and total_reviews > 0
|
|
185
|
+
):
|
|
180
186
|
progress = (current_review / total_reviews) * 100
|
|
181
|
-
|
|
187
|
+
|
|
182
188
|
self.update_stage(
|
|
183
189
|
stage="review",
|
|
184
190
|
progress=progress,
|
|
@@ -187,7 +193,7 @@ class StatusManager:
|
|
|
187
193
|
message=message or "正在进行无效聚类复核...",
|
|
188
194
|
details=details,
|
|
189
195
|
)
|
|
190
|
-
|
|
196
|
+
|
|
191
197
|
def update_verification(
|
|
192
198
|
self,
|
|
193
199
|
current_batch: Optional[int] = None,
|
|
@@ -200,19 +206,23 @@ class StatusManager:
|
|
|
200
206
|
message: Optional[str] = None,
|
|
201
207
|
):
|
|
202
208
|
"""更新验证阶段状态"""
|
|
203
|
-
details = {}
|
|
209
|
+
details: Dict[str, Any] = {}
|
|
204
210
|
if batch_id:
|
|
205
211
|
details["batch_id"] = batch_id
|
|
206
212
|
if file_name:
|
|
207
213
|
details["file"] = file_name
|
|
208
214
|
if issues_found is not None:
|
|
209
215
|
details["issues_found"] = issues_found
|
|
210
|
-
|
|
216
|
+
|
|
211
217
|
# 计算总体进度(批次级别)
|
|
212
218
|
progress = None
|
|
213
|
-
if
|
|
219
|
+
if (
|
|
220
|
+
current_batch is not None
|
|
221
|
+
and total_batches is not None
|
|
222
|
+
and total_batches > 0
|
|
223
|
+
):
|
|
214
224
|
progress = (current_batch / total_batches) * 100
|
|
215
|
-
|
|
225
|
+
|
|
216
226
|
self.update_stage(
|
|
217
227
|
stage="verification",
|
|
218
228
|
progress=progress,
|
|
@@ -221,7 +231,7 @@ class StatusManager:
|
|
|
221
231
|
message=message or "正在进行安全验证...",
|
|
222
232
|
details=details,
|
|
223
233
|
)
|
|
224
|
-
|
|
234
|
+
|
|
225
235
|
def mark_completed(
|
|
226
236
|
self,
|
|
227
237
|
total_issues: Optional[int] = None,
|
|
@@ -231,14 +241,14 @@ class StatusManager:
|
|
|
231
241
|
details = {}
|
|
232
242
|
if total_issues is not None:
|
|
233
243
|
details["total_issues"] = total_issues
|
|
234
|
-
|
|
244
|
+
|
|
235
245
|
self.update_stage(
|
|
236
246
|
stage="completed",
|
|
237
247
|
progress=100.0,
|
|
238
248
|
message=message or "安全分析已完成",
|
|
239
249
|
details=details,
|
|
240
250
|
)
|
|
241
|
-
|
|
251
|
+
|
|
242
252
|
def mark_error(
|
|
243
253
|
self,
|
|
244
254
|
error_message: str,
|
|
@@ -248,17 +258,16 @@ class StatusManager:
|
|
|
248
258
|
details = {"error_message": error_message}
|
|
249
259
|
if error_type:
|
|
250
260
|
details["error_type"] = error_type
|
|
251
|
-
|
|
261
|
+
|
|
252
262
|
self.update_stage(
|
|
253
263
|
stage="error",
|
|
254
264
|
message=f"发生错误: {error_message}",
|
|
255
265
|
details=details,
|
|
256
266
|
)
|
|
257
|
-
|
|
267
|
+
|
|
258
268
|
def get_status(self) -> Dict[str, Any]:
|
|
259
269
|
"""获取当前状态"""
|
|
260
270
|
return self._read_status()
|
|
261
271
|
|
|
262
272
|
|
|
263
273
|
__all__ = ["StatusManager"]
|
|
264
|
-
|
jarvis/jarvis_sec/types.py
CHANGED
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
"""
|
|
3
3
|
Shared types for jarvis.jarvis_sec to avoid circular imports.
|
|
4
4
|
"""
|
|
5
|
+
|
|
5
6
|
from dataclasses import dataclass
|
|
6
7
|
|
|
8
|
+
|
|
7
9
|
@dataclass
|
|
8
10
|
class Issue:
|
|
9
11
|
language: str
|
|
@@ -17,4 +19,5 @@ class Issue:
|
|
|
17
19
|
confidence: float
|
|
18
20
|
severity: str = "medium"
|
|
19
21
|
|
|
22
|
+
|
|
20
23
|
__all__ = ["Issue"]
|