jarvis-ai-assistant 0.3.30__py3-none-any.whl → 0.7.6__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 +458 -152
- jarvis/jarvis_agent/agent_manager.py +17 -13
- jarvis/jarvis_agent/builtin_input_handler.py +2 -6
- jarvis/jarvis_agent/config_editor.py +2 -7
- jarvis/jarvis_agent/event_bus.py +82 -12
- jarvis/jarvis_agent/file_context_handler.py +329 -0
- jarvis/jarvis_agent/file_methodology_manager.py +3 -4
- jarvis/jarvis_agent/jarvis.py +628 -55
- jarvis/jarvis_agent/language_extractors/__init__.py +57 -0
- jarvis/jarvis_agent/language_extractors/c_extractor.py +21 -0
- jarvis/jarvis_agent/language_extractors/cpp_extractor.py +21 -0
- jarvis/jarvis_agent/language_extractors/go_extractor.py +21 -0
- jarvis/jarvis_agent/language_extractors/java_extractor.py +84 -0
- jarvis/jarvis_agent/language_extractors/javascript_extractor.py +79 -0
- jarvis/jarvis_agent/language_extractors/python_extractor.py +21 -0
- jarvis/jarvis_agent/language_extractors/rust_extractor.py +21 -0
- jarvis/jarvis_agent/language_extractors/typescript_extractor.py +84 -0
- jarvis/jarvis_agent/language_support_info.py +486 -0
- jarvis/jarvis_agent/main.py +34 -10
- jarvis/jarvis_agent/memory_manager.py +7 -16
- jarvis/jarvis_agent/methodology_share_manager.py +10 -16
- jarvis/jarvis_agent/prompt_manager.py +1 -1
- jarvis/jarvis_agent/prompts.py +193 -171
- jarvis/jarvis_agent/protocols.py +8 -12
- jarvis/jarvis_agent/run_loop.py +105 -9
- jarvis/jarvis_agent/session_manager.py +2 -3
- jarvis/jarvis_agent/share_manager.py +20 -22
- jarvis/jarvis_agent/shell_input_handler.py +1 -2
- jarvis/jarvis_agent/stdio_redirect.py +295 -0
- jarvis/jarvis_agent/task_analyzer.py +31 -6
- jarvis/jarvis_agent/task_manager.py +11 -27
- jarvis/jarvis_agent/tool_executor.py +2 -3
- jarvis/jarvis_agent/tool_share_manager.py +12 -24
- jarvis/jarvis_agent/utils.py +5 -1
- jarvis/jarvis_agent/web_bridge.py +189 -0
- jarvis/jarvis_agent/web_output_sink.py +53 -0
- jarvis/jarvis_agent/web_server.py +786 -0
- jarvis/jarvis_c2rust/__init__.py +26 -0
- jarvis/jarvis_c2rust/cli.py +575 -0
- jarvis/jarvis_c2rust/collector.py +250 -0
- jarvis/jarvis_c2rust/constants.py +26 -0
- jarvis/jarvis_c2rust/library_replacer.py +1254 -0
- jarvis/jarvis_c2rust/llm_module_agent.py +1272 -0
- jarvis/jarvis_c2rust/loaders.py +207 -0
- jarvis/jarvis_c2rust/models.py +28 -0
- jarvis/jarvis_c2rust/optimizer.py +2157 -0
- jarvis/jarvis_c2rust/scanner.py +1681 -0
- jarvis/jarvis_c2rust/transpiler.py +2983 -0
- jarvis/jarvis_c2rust/utils.py +385 -0
- jarvis/jarvis_code_agent/build_validation_config.py +132 -0
- jarvis/jarvis_code_agent/code_agent.py +1371 -220
- jarvis/jarvis_code_agent/code_analyzer/__init__.py +65 -0
- jarvis/jarvis_code_agent/code_analyzer/base_language.py +74 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/__init__.py +44 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/base.py +106 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/cmake.py +74 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/detector.py +125 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/fallback.py +72 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/go.py +70 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/java_gradle.py +53 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/java_maven.py +47 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/makefile.py +61 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/nodejs.py +110 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/python.py +154 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/rust.py +110 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator/validator.py +153 -0
- jarvis/jarvis_code_agent/code_analyzer/build_validator.py +43 -0
- jarvis/jarvis_code_agent/code_analyzer/context_manager.py +648 -0
- jarvis/jarvis_code_agent/code_analyzer/context_recommender.py +18 -0
- jarvis/jarvis_code_agent/code_analyzer/dependency_analyzer.py +132 -0
- jarvis/jarvis_code_agent/code_analyzer/file_ignore.py +330 -0
- jarvis/jarvis_code_agent/code_analyzer/impact_analyzer.py +781 -0
- jarvis/jarvis_code_agent/code_analyzer/language_registry.py +185 -0
- jarvis/jarvis_code_agent/code_analyzer/language_support.py +110 -0
- jarvis/jarvis_code_agent/code_analyzer/languages/__init__.py +49 -0
- jarvis/jarvis_code_agent/code_analyzer/languages/c_cpp_language.py +299 -0
- jarvis/jarvis_code_agent/code_analyzer/languages/go_language.py +215 -0
- jarvis/jarvis_code_agent/code_analyzer/languages/java_language.py +212 -0
- jarvis/jarvis_code_agent/code_analyzer/languages/javascript_language.py +254 -0
- jarvis/jarvis_code_agent/code_analyzer/languages/python_language.py +269 -0
- jarvis/jarvis_code_agent/code_analyzer/languages/rust_language.py +281 -0
- jarvis/jarvis_code_agent/code_analyzer/languages/typescript_language.py +280 -0
- jarvis/jarvis_code_agent/code_analyzer/llm_context_recommender.py +605 -0
- jarvis/jarvis_code_agent/code_analyzer/structured_code.py +556 -0
- jarvis/jarvis_code_agent/code_analyzer/symbol_extractor.py +252 -0
- jarvis/jarvis_code_agent/code_analyzer/tree_sitter_extractor.py +58 -0
- jarvis/jarvis_code_agent/lint.py +501 -8
- jarvis/jarvis_code_agent/utils.py +141 -0
- jarvis/jarvis_code_analysis/code_review.py +493 -584
- jarvis/jarvis_data/config_schema.json +128 -12
- jarvis/jarvis_git_squash/main.py +4 -5
- jarvis/jarvis_git_utils/git_commiter.py +82 -75
- jarvis/jarvis_mcp/sse_mcp_client.py +22 -29
- jarvis/jarvis_mcp/stdio_mcp_client.py +12 -13
- jarvis/jarvis_mcp/streamable_mcp_client.py +15 -14
- jarvis/jarvis_memory_organizer/memory_organizer.py +55 -74
- jarvis/jarvis_methodology/main.py +32 -48
- jarvis/jarvis_multi_agent/__init__.py +287 -55
- jarvis/jarvis_multi_agent/main.py +36 -4
- jarvis/jarvis_platform/base.py +524 -202
- jarvis/jarvis_platform/human.py +7 -8
- jarvis/jarvis_platform/kimi.py +30 -36
- jarvis/jarvis_platform/openai.py +88 -25
- jarvis/jarvis_platform/registry.py +26 -10
- jarvis/jarvis_platform/tongyi.py +24 -25
- jarvis/jarvis_platform/yuanbao.py +32 -43
- jarvis/jarvis_platform_manager/main.py +66 -77
- jarvis/jarvis_platform_manager/service.py +8 -13
- jarvis/jarvis_rag/cli.py +53 -55
- jarvis/jarvis_rag/embedding_manager.py +13 -18
- jarvis/jarvis_rag/llm_interface.py +8 -9
- jarvis/jarvis_rag/query_rewriter.py +10 -21
- jarvis/jarvis_rag/rag_pipeline.py +24 -27
- jarvis/jarvis_rag/reranker.py +4 -5
- jarvis/jarvis_rag/retriever.py +28 -30
- jarvis/jarvis_sec/__init__.py +305 -0
- jarvis/jarvis_sec/agents.py +143 -0
- jarvis/jarvis_sec/analysis.py +276 -0
- jarvis/jarvis_sec/checkers/__init__.py +32 -0
- jarvis/jarvis_sec/checkers/c_checker.py +2680 -0
- jarvis/jarvis_sec/checkers/rust_checker.py +1108 -0
- jarvis/jarvis_sec/cli.py +139 -0
- jarvis/jarvis_sec/clustering.py +1439 -0
- jarvis/jarvis_sec/file_manager.py +427 -0
- jarvis/jarvis_sec/parsers.py +73 -0
- jarvis/jarvis_sec/prompts.py +268 -0
- jarvis/jarvis_sec/report.py +336 -0
- jarvis/jarvis_sec/review.py +453 -0
- jarvis/jarvis_sec/status.py +264 -0
- jarvis/jarvis_sec/types.py +20 -0
- jarvis/jarvis_sec/utils.py +499 -0
- jarvis/jarvis_sec/verification.py +848 -0
- jarvis/jarvis_sec/workflow.py +226 -0
- jarvis/jarvis_smart_shell/main.py +38 -87
- jarvis/jarvis_stats/cli.py +2 -2
- jarvis/jarvis_stats/stats.py +8 -8
- jarvis/jarvis_stats/storage.py +15 -21
- jarvis/jarvis_stats/visualizer.py +1 -1
- jarvis/jarvis_tools/clear_memory.py +3 -20
- jarvis/jarvis_tools/cli/main.py +21 -23
- jarvis/jarvis_tools/edit_file.py +1019 -132
- jarvis/jarvis_tools/execute_script.py +83 -25
- jarvis/jarvis_tools/file_analyzer.py +6 -9
- jarvis/jarvis_tools/generate_new_tool.py +14 -21
- jarvis/jarvis_tools/lsp_client.py +1552 -0
- jarvis/jarvis_tools/methodology.py +2 -3
- jarvis/jarvis_tools/read_code.py +1736 -35
- jarvis/jarvis_tools/read_symbols.py +140 -0
- jarvis/jarvis_tools/read_webpage.py +12 -13
- jarvis/jarvis_tools/registry.py +427 -200
- jarvis/jarvis_tools/retrieve_memory.py +20 -19
- jarvis/jarvis_tools/rewrite_file.py +72 -158
- jarvis/jarvis_tools/save_memory.py +3 -15
- jarvis/jarvis_tools/search_web.py +18 -18
- jarvis/jarvis_tools/sub_agent.py +36 -43
- jarvis/jarvis_tools/sub_code_agent.py +25 -26
- jarvis/jarvis_tools/virtual_tty.py +55 -33
- jarvis/jarvis_utils/clipboard.py +7 -10
- jarvis/jarvis_utils/config.py +232 -45
- jarvis/jarvis_utils/embedding.py +8 -5
- jarvis/jarvis_utils/fzf.py +8 -8
- jarvis/jarvis_utils/git_utils.py +225 -36
- jarvis/jarvis_utils/globals.py +3 -3
- jarvis/jarvis_utils/http.py +1 -1
- jarvis/jarvis_utils/input.py +99 -48
- jarvis/jarvis_utils/jsonnet_compat.py +465 -0
- jarvis/jarvis_utils/methodology.py +52 -48
- jarvis/jarvis_utils/utils.py +819 -491
- jarvis_ai_assistant-0.7.6.dist-info/METADATA +600 -0
- jarvis_ai_assistant-0.7.6.dist-info/RECORD +218 -0
- {jarvis_ai_assistant-0.3.30.dist-info → jarvis_ai_assistant-0.7.6.dist-info}/entry_points.txt +4 -0
- jarvis/jarvis_agent/config.py +0 -92
- jarvis/jarvis_agent/edit_file_handler.py +0 -296
- jarvis/jarvis_platform/ai8.py +0 -332
- jarvis/jarvis_tools/ask_user.py +0 -54
- jarvis_ai_assistant-0.3.30.dist-info/METADATA +0 -381
- jarvis_ai_assistant-0.3.30.dist-info/RECORD +0 -137
- {jarvis_ai_assistant-0.3.30.dist-info → jarvis_ai_assistant-0.7.6.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.3.30.dist-info → jarvis_ai_assistant-0.7.6.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.3.30.dist-info → jarvis_ai_assistant-0.7.6.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
jarvis/__init__.py,sha256=S1NtBw43o-3g9_StQDCxJhjmd8tor4scNNAG0eUh2lo,73
|
|
2
|
+
jarvis/jarvis_agent/__init__.py,sha256=TjozGtQWYj-9SJlzIWz23hfxOLzOSo5lOWC_wF6YKDM,62110
|
|
3
|
+
jarvis/jarvis_agent/agent_manager.py,sha256=yCU0D_LWmjW1qaDAQRNElvbg69NKLh_SjuMIjS8f9jA,3473
|
|
4
|
+
jarvis/jarvis_agent/builtin_input_handler.py,sha256=0l7usDO-r1rdynpTH3l75ZtyhK1gi2Nz8IS1_CoTW8E,2699
|
|
5
|
+
jarvis/jarvis_agent/config_editor.py,sha256=C3lpjbDag8JUTmAZ-BEp40UPh4cyXp2Lsajvv02xLa0,1768
|
|
6
|
+
jarvis/jarvis_agent/event_bus.py,sha256=Yvn4HImfj-bDMBlZh0FIHiceSQ8RzNSkAGl0fLyQjhE,4507
|
|
7
|
+
jarvis/jarvis_agent/events.py,sha256=rmFQ37PasImCh7OCdCzNBvubk-kHwcUiYLgzmL0t0_4,3689
|
|
8
|
+
jarvis/jarvis_agent/file_context_handler.py,sha256=8YXgjXK5Tz4K_J5QSKigXBDEu07iTFHzsJ6J4wATZB0,11555
|
|
9
|
+
jarvis/jarvis_agent/file_methodology_manager.py,sha256=lPQKKRIgvzqmpeW07cTdGxsnzfJ09KqRr6OxCJkGR8Y,4286
|
|
10
|
+
jarvis/jarvis_agent/jarvis.py,sha256=oMVzxWJ78VQ0w6BqSIF84B6oy55hHoRcBVfXJWrGBUA,50713
|
|
11
|
+
jarvis/jarvis_agent/language_support_info.py,sha256=H8_40_razShe86kXN6VBKHza3nw5DeBIvPVRAkxcd3g,22138
|
|
12
|
+
jarvis/jarvis_agent/main.py,sha256=WoUoSP6lT_GQmPN3DW-Ow3ONDiDTkBVva-5rf38S3MQ,4285
|
|
13
|
+
jarvis/jarvis_agent/memory_manager.py,sha256=je-sx279LfYCIKGoyMTYnSo_i3B6eGPrAOHtRtTHdpo,7449
|
|
14
|
+
jarvis/jarvis_agent/methodology_share_manager.py,sha256=5bP8ibaV1yKNX_JXkea4iBksh9wL50ywOC9ouBbT0lE,6616
|
|
15
|
+
jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
|
|
16
|
+
jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh2lC__p40,1705
|
|
17
|
+
jarvis/jarvis_agent/prompt_manager.py,sha256=NlycrzV7umrwYK9295kN2T_N_drLgnddgGupQ0_5XpQ,2706
|
|
18
|
+
jarvis/jarvis_agent/prompts.py,sha256=ELIXlB1CqzAYNEBX4J1cnmuXGU0WUVOuHJpRyf4XvAg,12554
|
|
19
|
+
jarvis/jarvis_agent/protocols.py,sha256=X1GQggfVPkJKRUjE2lLV1xpCi4pi4oXNlByhxFoxpTw,799
|
|
20
|
+
jarvis/jarvis_agent/run_loop.py,sha256=Fsq__zu-gOQtzEvhqUYfy94DiBWa1ZOtFO3Ry19l6J0,10121
|
|
21
|
+
jarvis/jarvis_agent/session_manager.py,sha256=JFfQ0vRAi9EC3vn1wOefORM7pmGCrR8aqOiD6mHZlOA,2904
|
|
22
|
+
jarvis/jarvis_agent/share_manager.py,sha256=DUX1AinI3DCjYNyq2I2Ijedq63ddh5ufEHR5zrn5VDo,8683
|
|
23
|
+
jarvis/jarvis_agent/shell_input_handler.py,sha256=98PqY2FTvXDYdSRvHB3KUiZkLey0icZet-GSP6I58-8,1911
|
|
24
|
+
jarvis/jarvis_agent/stdio_redirect.py,sha256=cG3z54rShhE9ATFlcVFgKXNk8ShqwSVfDCtaIVilTes,9923
|
|
25
|
+
jarvis/jarvis_agent/task_analyzer.py,sha256=oLQPvTLXac1BbG4aJcOb77_YG_fv-mpHtgE0816fDFQ,8903
|
|
26
|
+
jarvis/jarvis_agent/task_manager.py,sha256=-UQq6gJON_yHQB4kAAFWVv5S4ceh3F-jbvP3h7hA5Ok,5924
|
|
27
|
+
jarvis/jarvis_agent/tool_executor.py,sha256=HZMEMXso_IIU30b6hDJn84GRhV_425mZapQ7jPTm32s,1784
|
|
28
|
+
jarvis/jarvis_agent/tool_share_manager.py,sha256=PMU2iyTKiYGrYeobCYYIhMKmz6zcVw3rXeZeev6d9Yc,4751
|
|
29
|
+
jarvis/jarvis_agent/user_interaction.py,sha256=tifFN49GkO_Q80sqOTVmhxwbNWTazF3K0cr8AnnvzdU,1453
|
|
30
|
+
jarvis/jarvis_agent/utils.py,sha256=WJmKys_ceDALL73GdMCOgmjGHBzeRSPj7rmc8Pkrvzc,1784
|
|
31
|
+
jarvis/jarvis_agent/web_bridge.py,sha256=h15PXuPWWfZynWt8bPW4BDeCpIVoIOlRXfO0je6HDx4,6673
|
|
32
|
+
jarvis/jarvis_agent/web_output_sink.py,sha256=sZ6WbLZnuCdT5dS9d8msHY_g-pnj-dvML-I6uJ7-sbc,1733
|
|
33
|
+
jarvis/jarvis_agent/web_server.py,sha256=t9Li9BGOb4W6RVA83U9-91kaA_ZhCwf6rwqLVHUkF2M,30222
|
|
34
|
+
jarvis/jarvis_agent/language_extractors/__init__.py,sha256=gpbDs_iZINRDn5Mgh_0yoqtHzkY-Q1WK3m3X0RRy-BA,1307
|
|
35
|
+
jarvis/jarvis_agent/language_extractors/c_extractor.py,sha256=6Fz1DyeAieyK1x-upKCmTbwKnvpeQLnkbBqJM21ptdU,647
|
|
36
|
+
jarvis/jarvis_agent/language_extractors/cpp_extractor.py,sha256=Jl3ymVaE4609jJXLmmmWNWtKD_e-qT5F788wqXjKeMc,708
|
|
37
|
+
jarvis/jarvis_agent/language_extractors/go_extractor.py,sha256=SNRWqEiz2lkk_fEx7WAKvtKgmD10lG0xb_7moQNDiYs,639
|
|
38
|
+
jarvis/jarvis_agent/language_extractors/java_extractor.py,sha256=7XxWIRuieFBcKjxmyWt7EfdhjRFe3DC8C0e4rBVTIbE,3536
|
|
39
|
+
jarvis/jarvis_agent/language_extractors/javascript_extractor.py,sha256=I9O-xBFOCiagAlFBlWpV7F2yUYcHuIaYOJbL2-WjjkI,3072
|
|
40
|
+
jarvis/jarvis_agent/language_extractors/python_extractor.py,sha256=BgAbbvOIEiD7y_-96c1iAhI05-ICrk19u3HGU6Ocj9M,672
|
|
41
|
+
jarvis/jarvis_agent/language_extractors/rust_extractor.py,sha256=3z_I4eIV04Vx47_C076Jm_MjCE0RitAJ-e7rr2g64-U,657
|
|
42
|
+
jarvis/jarvis_agent/language_extractors/typescript_extractor.py,sha256=mn79GGNw5r0hIK-hEf26pQMCpTc9QMCgA5wHYmeogP4,3319
|
|
43
|
+
jarvis/jarvis_c2rust/__init__.py,sha256=Y_cYTusArFRWaVV-oFuECbIsp4bA2I2amQGBDcrcOOU,1299
|
|
44
|
+
jarvis/jarvis_c2rust/cli.py,sha256=7KPusq7js4Vg5UWQxkayhuLJiIKyhnnbuzmTRb6SREs,26048
|
|
45
|
+
jarvis/jarvis_c2rust/collector.py,sha256=Ox2E3NO97pt9iX6w0dRsqFuoEFJuTvDeP7_W9NaJ0C4,8188
|
|
46
|
+
jarvis/jarvis_c2rust/constants.py,sha256=mQS5vNJkvfpQ0hQTAkXLqLmqQaD1V-SmqhqqDpk6bZE,1050
|
|
47
|
+
jarvis/jarvis_c2rust/library_replacer.py,sha256=4g62YeMTbAabwZuSxHKK6qSfdN1FTKta6MacZsxq0wI,53464
|
|
48
|
+
jarvis/jarvis_c2rust/llm_module_agent.py,sha256=SR3FJMn7LhOSQG08Y3ICh2u2QY02jdyhfIrRvxDEWns,57971
|
|
49
|
+
jarvis/jarvis_c2rust/loaders.py,sha256=fGDiB-bcZQM0b97sDEeRDg4898XKVaGBC0TZuuP5PKc,7808
|
|
50
|
+
jarvis/jarvis_c2rust/models.py,sha256=RkAe2vPxj06qz6441Mo2D48CRNkdWRRGCpm4_nhzCHY,671
|
|
51
|
+
jarvis/jarvis_c2rust/optimizer.py,sha256=ZVtc1dCm9TCtytCuqfSq5NA6e4G_LxQVyvtPM0dv_n0,114011
|
|
52
|
+
jarvis/jarvis_c2rust/scanner.py,sha256=4kuRCCZYZXH1WBhS30CzSojFaj5kzX7a1m_C5J05e5U,62871
|
|
53
|
+
jarvis/jarvis_c2rust/transpiler.py,sha256=1izSwPUHDgC_BB6v1VDXAnXYqg_qknD5MaIEcRtmqW0,182263
|
|
54
|
+
jarvis/jarvis_c2rust/utils.py,sha256=j0oIz3cAN2-Cz5NFbgW2n-z9Pne2i2qKI875znOVUqA,15665
|
|
55
|
+
jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
56
|
+
jarvis/jarvis_code_agent/build_validation_config.py,sha256=bLDHrKXf2RAzK_qLCp2kH0mcg-3YOHhQROIRz4FjP3Y,4371
|
|
57
|
+
jarvis/jarvis_code_agent/code_agent.py,sha256=ctvYj49RM1rrecWzEPuEcRzNZDmM4zhK8KareWzzFXk,86578
|
|
58
|
+
jarvis/jarvis_code_agent/lint.py,sha256=TlkKDMxxZtUspSgQ3tPZpTi7nY7Cp_XuJO7Smu1vmFM,19482
|
|
59
|
+
jarvis/jarvis_code_agent/utils.py,sha256=omcNzidIUA6C0OQUyGdHk9MHd7DHiu2PDnj6Trz5hbA,4818
|
|
60
|
+
jarvis/jarvis_code_agent/code_analyzer/__init__.py,sha256=BbiJUBC5YkZ-8Ty6KDyXbP7A3ksedVWg066Xk0AWj38,1742
|
|
61
|
+
jarvis/jarvis_code_agent/code_analyzer/base_language.py,sha256=4TH9Mlgnj4X3n9uOJgJTTWHSMrJYHpojcLGzXlBen_E,2132
|
|
62
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator.py,sha256=XVBwHJgaBnwYaQ-bSXw3mts5aLW2SjgzsXu4s77GV4A,1032
|
|
63
|
+
jarvis/jarvis_code_agent/code_analyzer/context_manager.py,sha256=2EzEOO9PFlT5EB8KywwIblwHy3-u1PvQ75LJEaD1LRA,26943
|
|
64
|
+
jarvis/jarvis_code_agent/code_analyzer/context_recommender.py,sha256=xAYMHI2Gb7uSDaNdBuaJMLPGwwXeW34bByj_JT06wWM,433
|
|
65
|
+
jarvis/jarvis_code_agent/code_analyzer/dependency_analyzer.py,sha256=K_9-govIzeobGeoPvmgW-r4pTJAHxxnonklvl5rSpOg,5078
|
|
66
|
+
jarvis/jarvis_code_agent/code_analyzer/file_ignore.py,sha256=HU5769KTNv-gYoIi2drrMgzn6l8kfgzvs3RwEFHDOp8,9818
|
|
67
|
+
jarvis/jarvis_code_agent/code_analyzer/impact_analyzer.py,sha256=JqfneA1Z0ermmlZfYDQmTfxCbqibWbnMpwHBlHzpLTQ,29643
|
|
68
|
+
jarvis/jarvis_code_agent/code_analyzer/language_registry.py,sha256=k6Tg7l3UMEUIoUONyGQ-vMm62EBl4o200_clsXl6NEA,5597
|
|
69
|
+
jarvis/jarvis_code_agent/code_analyzer/language_support.py,sha256=4n7za48QoD_uyPHanvEI9qBmvhiKI0KIbXCwxe1x2To,3380
|
|
70
|
+
jarvis/jarvis_code_agent/code_analyzer/llm_context_recommender.py,sha256=5Ps_Is2zEf89JDWTaB5mzX26Tf-RY5vA3bFBA3BQ3C0,26182
|
|
71
|
+
jarvis/jarvis_code_agent/code_analyzer/structured_code.py,sha256=kIr7DPi_oI8tx1P9Wu8ZpWk87wvhODOvFst3AYnLBgM,23039
|
|
72
|
+
jarvis/jarvis_code_agent/code_analyzer/symbol_extractor.py,sha256=CA5ZUFOE3dVfV7YaZrkLZeTbhK4NhuDwO9TDZkDSry8,10358
|
|
73
|
+
jarvis/jarvis_code_agent/code_analyzer/tree_sitter_extractor.py,sha256=W6MQK6BlX7j9YDTyO70gtUZ3WCMml3_uED4j2-3tBig,2392
|
|
74
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/__init__.py,sha256=FJda17qW9n4ICGmrhH_CAwN68iZ4kVdo0yF9dj5__oo,1202
|
|
75
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/base.py,sha256=4RnS1e1KaRkw9FK1Ln23my-fFnxQM49Xg1ox0mqJ-Os,2981
|
|
76
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/cmake.py,sha256=uYR38UJad9uhEfDbDPKNHQDpYftaxxQne1Itah8mgEw,2671
|
|
77
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/detector.py,sha256=rLFWUhieg9-RbKTTrlnA-N2Nr2xSOyHoO5yFa-QaJA4,4247
|
|
78
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/fallback.py,sha256=uU0QhZIsp8vL4YQy2oyvSvv9tBEncPibC1w3dSzd5Zw,2665
|
|
79
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/go.py,sha256=Jp2WBwKeOmd9mwzLr48TOCho0OjOTD53XdldinvEhlI,2400
|
|
80
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/java_gradle.py,sha256=Y7bPYoDy8HtEz9kDc6TfHq2Yo-stky-EwrXEHqfb2Hw,1617
|
|
81
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/java_maven.py,sha256=GG9p5TEA7mfT-OOTzK5ej8_XUSI22HhwnFGKxymIy6k,1375
|
|
82
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/makefile.py,sha256=nUV3X524VtpoOCvMbHdBYUFMPRJcFBLjRwSadX0Tm7g,1989
|
|
83
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/nodejs.py,sha256=agAjoSyuwbqVS_8-osZyN0kIjjjkyfQq6Bhro6R-7vM,4653
|
|
84
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/python.py,sha256=MBWoOlYk4zpDva2rJfUbgZs6RngpyRcd6g7no9HTkSI,6574
|
|
85
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/rust.py,sha256=EH2TQykwGUXRSlrCLW0IQfpSvOgiV-jAKg-_neEe0cI,3898
|
|
86
|
+
jarvis/jarvis_code_agent/code_analyzer/build_validator/validator.py,sha256=KMt7i-SYzglpn3BIdwpZHaaD0OHin50gT1__FytR7qk,6537
|
|
87
|
+
jarvis/jarvis_code_agent/code_analyzer/languages/__init__.py,sha256=s3Gh0-pbCqFo119LVy1otZbZOv01P5GjvH2qm60jXVU,1361
|
|
88
|
+
jarvis/jarvis_code_agent/code_analyzer/languages/c_cpp_language.py,sha256=a9vBNu5Iqy4tVlj8msP6ogcR6_LwizxFkuNUo4LkKl0,9507
|
|
89
|
+
jarvis/jarvis_code_agent/code_analyzer/languages/go_language.py,sha256=X8nUrcVfhhgCMVeCFkz2puONH3fUmxKdIcBYrrzqTz4,7289
|
|
90
|
+
jarvis/jarvis_code_agent/code_analyzer/languages/java_language.py,sha256=TGhPFlQGoMiDvBZLA_MoNOWsRt6Ahod4bNHHbHglntM,7568
|
|
91
|
+
jarvis/jarvis_code_agent/code_analyzer/languages/javascript_language.py,sha256=u8uxLP8gY-zaqCLHIIx_HZHQXTRfnFltZjjYPIbNLZs,9362
|
|
92
|
+
jarvis/jarvis_code_agent/code_analyzer/languages/python_language.py,sha256=RGFtWfsNWlikLFG2-CIzXXQNR3oGcN6v_PQyPWQtAGA,11175
|
|
93
|
+
jarvis/jarvis_code_agent/code_analyzer/languages/rust_language.py,sha256=lZLwoNprQpjTo6mZ4JOsM2uWsQtjZcHpvHXeFd5qgLE,9759
|
|
94
|
+
jarvis/jarvis_code_agent/code_analyzer/languages/typescript_language.py,sha256=70jDzOWfd4l7CJuU9morv_TgQ5Gup3qxfmoKDxVbhlA,10278
|
|
95
|
+
jarvis/jarvis_code_analysis/code_review.py,sha256=EsUdl5Uq2xuWaZP8cVNUbCHoEjilGTVDzbRJK_FFpW8,29634
|
|
96
|
+
jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
|
|
97
|
+
jarvis/jarvis_code_analysis/checklists/c_cpp.py,sha256=9t62bMqs6qTkFSio4SKkj88qyb5ZubWrw3MxJBQ4X1A,1317
|
|
98
|
+
jarvis/jarvis_code_analysis/checklists/csharp.py,sha256=ShPXrl2_UPAnGaCHAG2wLl90COG3HK2XCSr1UK2dxN4,2420
|
|
99
|
+
jarvis/jarvis_code_analysis/checklists/data_format.py,sha256=urCb9qiJBDGev6C-PXv30NKFoQeGdbtlOl1VSPbjCSA,3005
|
|
100
|
+
jarvis/jarvis_code_analysis/checklists/devops.py,sha256=tlKD75mbFx6HHk8H8eHL_I_WTusHvWA8Zfb5P6c_1w4,3542
|
|
101
|
+
jarvis/jarvis_code_analysis/checklists/docs.py,sha256=gxhxuw-w0puen2Hgwe9MsgO_kijtCJC6THXSoz3YgiA,3341
|
|
102
|
+
jarvis/jarvis_code_analysis/checklists/go.py,sha256=NDBFA0qPrjr1HOZYy5DYU0iIcKWCaevJRLw4fbHZwwQ,1388
|
|
103
|
+
jarvis/jarvis_code_analysis/checklists/infrastructure.py,sha256=7z5MZnOUT3FpMrTQw2QcxkkTHKdMblc_Rf2NjxSI39A,3765
|
|
104
|
+
jarvis/jarvis_code_analysis/checklists/java.py,sha256=gWRVhXfsNhRFdthjIiQTkviqLwisuKCrr6gjxP0S9Z4,2085
|
|
105
|
+
jarvis/jarvis_code_analysis/checklists/javascript.py,sha256=SQkw2I09DaaLxD_WTZjuHn4leUKil68IEPB03BoSYuo,2340
|
|
106
|
+
jarvis/jarvis_code_analysis/checklists/kotlin.py,sha256=dNSHM1u3R7lxe8BU8ADtDyKJxmj3NUh9ZQuC7HHWHGY,4436
|
|
107
|
+
jarvis/jarvis_code_analysis/checklists/loader.py,sha256=bjE4On6WMLt41bfkCZsHnBpfXF61VPthFPsgNcbH90c,1903
|
|
108
|
+
jarvis/jarvis_code_analysis/checklists/php.py,sha256=qW34sF9AqLuSVuOVP5yJUHnB9V3-YRQjNPuB3lFI5UY,2481
|
|
109
|
+
jarvis/jarvis_code_analysis/checklists/python.py,sha256=gjyJ0QPY1CAwqhbDnIyLYruvFduZU5hiKyehAXMHu-I,1452
|
|
110
|
+
jarvis/jarvis_code_analysis/checklists/ruby.py,sha256=kzwd7Wl6gKrkAANq7_MvA5X5du5r1MeE-EY2Xb43n7U,4274
|
|
111
|
+
jarvis/jarvis_code_analysis/checklists/rust.py,sha256=kzt6ARBzUaC2UCviIt5ybfhJjyCkK_V9Kd4e97Dbtd4,1646
|
|
112
|
+
jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUAHPtZeciTg4aDcwvRZE,2619
|
|
113
|
+
jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
|
|
114
|
+
jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
|
|
115
|
+
jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
|
|
116
|
+
jarvis/jarvis_data/config_schema.json,sha256=JTdlxgS3ZOCHHiZ2jDqC_SuFtxDPCMjlINyM2WZMgUs,17800
|
|
117
|
+
jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
|
|
118
|
+
jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
|
+
jarvis/jarvis_git_squash/main.py,sha256=C6qszc494HrMz1Cgn473Yq59PTYp6V7LUhbEnsDT6_s,2259
|
|
120
|
+
jarvis/jarvis_git_utils/git_commiter.py,sha256=iX4bPM3gkPgH7CLDtTCmVP2sfZdVNp4yrnUfQAuVejI,17064
|
|
121
|
+
jarvis/jarvis_mcp/__init__.py,sha256=OPMtjD-uq9xAaKCRIDyKIosaFfBe1GBPu1az-mQ0rVM,2048
|
|
122
|
+
jarvis/jarvis_mcp/sse_mcp_client.py,sha256=Gj6NgWnjqEUHhfEcH_2YQc6FUlm-R7Upgr6XZGBLBLQ,22161
|
|
123
|
+
jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=FghUfjZo3z3HcA6up8gs1SC4oBXNNV5blX0OMsV59YM,10946
|
|
124
|
+
jarvis/jarvis_mcp/streamable_mcp_client.py,sha256=BUTQGuc2W72YxftisBOeJHJOhTDIwc7Far14jNU7y-0,15239
|
|
125
|
+
jarvis/jarvis_memory_organizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
|
+
jarvis/jarvis_memory_organizer/memory_organizer.py,sha256=drwsCF1iOhTKDaDG3RJEovA5vafaSnfNIysLmjeHUqM,25450
|
|
127
|
+
jarvis/jarvis_methodology/main.py,sha256=xGtV28yMquglAKKWC2d3s3AQOTeY1prhKsfuGGsmYZA,10350
|
|
128
|
+
jarvis/jarvis_multi_agent/__init__.py,sha256=-TKg9_XiLKU6CChsMThb5ox2BidP1K1K8iWkcUI4cZ0,17358
|
|
129
|
+
jarvis/jarvis_multi_agent/main.py,sha256=lKV7lcmPUISXY8gPDIqyOoZSxpkyhyUK2USb8h9PICg,3121
|
|
130
|
+
jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
|
|
131
|
+
jarvis/jarvis_platform/base.py,sha256=0vPqVxrrhamgthFCFe1PFEQVTYbEUadXD1_c18pHS_E,25633
|
|
132
|
+
jarvis/jarvis_platform/human.py,sha256=vhYarENpQUetqzqNCdi_cw26F0m9uAaJXRM1HHB0y5w,4652
|
|
133
|
+
jarvis/jarvis_platform/kimi.py,sha256=oFuyOCLglBu9pmvITh1UisJLc7N01JOHFpZPuuAmecY,15096
|
|
134
|
+
jarvis/jarvis_platform/openai.py,sha256=eW51SxjpsJhyvQ1m88u0_ggU-pnkj4lImFtvME0pEqQ,11373
|
|
135
|
+
jarvis/jarvis_platform/registry.py,sha256=KbQhQL1mUfar_F_f_42x2U8OWTW97i0Ob4OjqMART58,8674
|
|
136
|
+
jarvis/jarvis_platform/tongyi.py,sha256=5vzggKHN9EjgcnSXCNH7roQ_nswAupBztBKZoMmz75E,23180
|
|
137
|
+
jarvis/jarvis_platform/yuanbao.py,sha256=EIl5iubv5AWPI_V4La_WpCdTX0aposmNC0WUYPxnMqg,23054
|
|
138
|
+
jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
139
|
+
jarvis/jarvis_platform_manager/main.py,sha256=9841kIeA0q0Ns5Ya2t7X3DqnPoMHe4ehfggPEvhbrio,18677
|
|
140
|
+
jarvis/jarvis_platform_manager/service.py,sha256=3fm_rHhhGvkc4LWI9IB7W7B19fLKIjr3jFTiHIuzvmk,14623
|
|
141
|
+
jarvis/jarvis_rag/__init__.py,sha256=HRTXgnQxDuaE9x-e3r6SYqhJ5d4DSI_rrIxy2IGY6qk,320
|
|
142
|
+
jarvis/jarvis_rag/cache.py,sha256=Tqx_Oe-AhuWlMXHGHUaIuG6OEHoHBVZq7mL3kldtFFU,2723
|
|
143
|
+
jarvis/jarvis_rag/cli.py,sha256=K5NBPaR0mDSx1UMl1RDTHRTKjFbrt1wTr8SGRPKDUOw,16754
|
|
144
|
+
jarvis/jarvis_rag/embedding_manager.py,sha256=rJml-7oINFKaF5rv5nJjQbdi-4I08MDUZwKHzmipuqQ,10035
|
|
145
|
+
jarvis/jarvis_rag/llm_interface.py,sha256=Q8pXnHyoynL2J_zGGZ3HC6wy45GWcncpIQZu0u0lbRk,4417
|
|
146
|
+
jarvis/jarvis_rag/query_rewriter.py,sha256=gdYqqoYltKCpLLeSXauWLlfUdmAVMal4GRvKip0O5v8,3564
|
|
147
|
+
jarvis/jarvis_rag/rag_pipeline.py,sha256=JLuYlw6Ck_jsRFjIJ2PRUPWysSIqZf3WQb4dgGPQymE,13509
|
|
148
|
+
jarvis/jarvis_rag/reranker.py,sha256=MWUHPklYp_jOK_EiAPhZ0jUQGf82IToUWdrunRhjsRk,2498
|
|
149
|
+
jarvis/jarvis_rag/retriever.py,sha256=pvzI-sE9TV3zUwc6L8q3ycZSjc2d-RoXT7BLsbuOvEk,17924
|
|
150
|
+
jarvis/jarvis_sec/__init__.py,sha256=htTaCsAHAAjbyp5NGZKViurzcvNbh9oxvOJ7RglN_L8,12683
|
|
151
|
+
jarvis/jarvis_sec/agents.py,sha256=Bpn-hXMWYQFeGbeJmzfB0sZyZuRT2GpTLBrWmhQErlI,6916
|
|
152
|
+
jarvis/jarvis_sec/analysis.py,sha256=SvDAFzMbIg88FGK9-heYFnkp4lQotxQBC7q43NwzBJM,11761
|
|
153
|
+
jarvis/jarvis_sec/cli.py,sha256=M2wXAGZ_OJJBV0DfWQRnvSQazO7DIltlY1SXA7eoiJA,5109
|
|
154
|
+
jarvis/jarvis_sec/clustering.py,sha256=fk0l-0_OVyYYm1zqFfzCOCanMptYRR7xXzUDL5qTI7Q,58742
|
|
155
|
+
jarvis/jarvis_sec/file_manager.py,sha256=6-plNlAdu0Mo1wtS63XLXBB1GlFpFkW7h8F8GqXwUzE,15682
|
|
156
|
+
jarvis/jarvis_sec/parsers.py,sha256=5OCbArzPa6f_gJcATQL7wP-CMh-m73yc2pyBrkAnW6I,3069
|
|
157
|
+
jarvis/jarvis_sec/prompts.py,sha256=PgnGIU7DMSLNWUExSBAzT84dVCzBMfjcExfOKs3h71Y,16992
|
|
158
|
+
jarvis/jarvis_sec/report.py,sha256=pd0D2BiXKiMZCZbhI-TuZfAgL3OfcMiobdxzgLyMbn8,10569
|
|
159
|
+
jarvis/jarvis_sec/review.py,sha256=mc4hYWtwEKygX3-O_5lVTnMMYFibW_STwyzOOwZ4rZc,19029
|
|
160
|
+
jarvis/jarvis_sec/status.py,sha256=BtshMe7fkLMjyMmrG7Saezfd_xX1nmt0AL0axrmW1-k,8534
|
|
161
|
+
jarvis/jarvis_sec/types.py,sha256=_C3IHwnni3kApryP3c_UTYdvFdmlJSVXQLLefX94zl0,365
|
|
162
|
+
jarvis/jarvis_sec/utils.py,sha256=xwUFgJLDzD_U7rqUbND01pMOroHZokpwwxUyIcVk9Bg,19641
|
|
163
|
+
jarvis/jarvis_sec/verification.py,sha256=TA5T-q27FEoC66BQ0dNRg7Kr_7svmLTgvpFOF90lKLw,40586
|
|
164
|
+
jarvis/jarvis_sec/workflow.py,sha256=V9ubXFnmDOQjoQEOiRmB4cdOTkSOz4sJ4wemzUCI5c8,9971
|
|
165
|
+
jarvis/jarvis_sec/checkers/__init__.py,sha256=bkyIFSImBNFsH7RvwXwN6nETefRjtbS62gZRpQFH01I,706
|
|
166
|
+
jarvis/jarvis_sec/checkers/c_checker.py,sha256=-w_ij6BNGl6520mVL6nk9LtsLDQzwXSrskyc-CU_K9c,115465
|
|
167
|
+
jarvis/jarvis_sec/checkers/rust_checker.py,sha256=12sqoI5Phh_KpSjW-OwzRVfPx4MofTGUrmgPkpBdwes,40479
|
|
168
|
+
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
169
|
+
jarvis/jarvis_smart_shell/main.py,sha256=UFXQdMS3D-iM5yBhXNyZcFzm7y12hiDQnPR5qj2iARk,13064
|
|
170
|
+
jarvis/jarvis_stats/__init__.py,sha256=jJzgP43nxzLbNGs8Do4Jfta1PNCJMf1Oq9YTPd6EnFM,342
|
|
171
|
+
jarvis/jarvis_stats/cli.py,sha256=zSDuCIabe78mDA3NLQDILbjLaju4m-0oNYSPE15ikPU,11409
|
|
172
|
+
jarvis/jarvis_stats/stats.py,sha256=HTjlYgyQUT5S0OrJ1ofnZj8vh4Ws9bTzvQ33wJhXxg8,25371
|
|
173
|
+
jarvis/jarvis_stats/storage.py,sha256=9gZC5Kpst34F0kWzmjmn_74fbZG2Fj9OPNFQ4M7FSL8,21890
|
|
174
|
+
jarvis/jarvis_stats/visualizer.py,sha256=0Gc1O1cANq73GKrVVXr0rgP4tUBLQ9ZT2Q6oiLUJwS0,8539
|
|
175
|
+
jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
176
|
+
jarvis/jarvis_tools/base.py,sha256=tFZkRlbV_a-pbjM-ci9AYmXVJm__FXuzVWKbQEyz4Ao,1639
|
|
177
|
+
jarvis/jarvis_tools/clear_memory.py,sha256=NbtcBuJYUzYDqHNv3i7G24oJNmLt-Z7VqTzIHKUF7CI,7794
|
|
178
|
+
jarvis/jarvis_tools/edit_file.py,sha256=IvYGrzgSKgfGoQrewIdr7ffwGYWPghB1qjNDR6r98eo,45849
|
|
179
|
+
jarvis/jarvis_tools/execute_script.py,sha256=UDsmEhg9r5AYm9bACcljLTORLExlaFm7Rdx9C_QLgWg,8867
|
|
180
|
+
jarvis/jarvis_tools/file_analyzer.py,sha256=a8izTqGLwW43dIOICyLbGzzedxecOfOScs1uHqb3seI,3999
|
|
181
|
+
jarvis/jarvis_tools/generate_new_tool.py,sha256=RfEwAQUICk31903m0fIr9bR9BLMm0Qmiic9SvGvNCzs,7987
|
|
182
|
+
jarvis/jarvis_tools/lsp_client.py,sha256=GbH2LWkCVaAHTaFg9O_JUodJ1SKUP26BataJ3nsDXTc,58782
|
|
183
|
+
jarvis/jarvis_tools/methodology.py,sha256=MehFkKzb0Ub3yE4jkV70R1gmhnMaeRqgApJLUBm7rBc,5119
|
|
184
|
+
jarvis/jarvis_tools/read_code.py,sha256=oi1_4AtnCA683DCOYVpRE6-rtzGAvIXKzClevB5mf58,77438
|
|
185
|
+
jarvis/jarvis_tools/read_symbols.py,sha256=7ERIICy2gQT-9Op5Q4J2EGLYlsJJE2Kyda8QyyVQ3dc,5538
|
|
186
|
+
jarvis/jarvis_tools/read_webpage.py,sha256=U2Yp71NyjSG9URO09lEzCB7swGumq4-ouqPy5QhavHI,5350
|
|
187
|
+
jarvis/jarvis_tools/registry.py,sha256=EXrdD7a07T1i-3sQkD5l1u_np5-gyiEp_I5_FTs9LiY,45349
|
|
188
|
+
jarvis/jarvis_tools/retrieve_memory.py,sha256=N5_yt6VhZ--gtGJpor3_B8RXdriLiN3n9DQ7uaTNOLQ,8751
|
|
189
|
+
jarvis/jarvis_tools/rewrite_file.py,sha256=zcNYPxlX6FzXIV6fl2NOXMX8JF_rzonOJQ-xEfX2jsg,3946
|
|
190
|
+
jarvis/jarvis_tools/save_memory.py,sha256=uhR9w_rC7G3i9_44HZ3dv2TfBQ_YRKZLd9TLMoXil_w,6488
|
|
191
|
+
jarvis/jarvis_tools/search_web.py,sha256=c-YWRSlDn7ObRSUlABs1Uacr81fBZfXn83m_CgVNxTA,6170
|
|
192
|
+
jarvis/jarvis_tools/sub_agent.py,sha256=ki8eeajWz7j7NAu0wlydLH3IuM5ZbdvJ0qjMwGhMTUg,8914
|
|
193
|
+
jarvis/jarvis_tools/sub_code_agent.py,sha256=Ib0nB-w8VE5MhTDysQ4loLCJkf962aQZkUeSnoFhyiE,9599
|
|
194
|
+
jarvis/jarvis_tools/virtual_tty.py,sha256=gNQuM6s0sjqNuYZubDixOG9tv5NXuKPEZroi4ywLG0A,26023
|
|
195
|
+
jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
196
|
+
jarvis/jarvis_tools/cli/main.py,sha256=IuMciri72nj7v_ghs8HVt60ncI4lxju2iKedERH5VQM,8784
|
|
197
|
+
jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
|
|
198
|
+
jarvis/jarvis_utils/builtin_replace_map.py,sha256=z8iAqsbZUiGFaozxG1xSu128op8udqHOeEw-GxNt4bU,1708
|
|
199
|
+
jarvis/jarvis_utils/clipboard.py,sha256=unlmtjPNVCAP9gjLQu6D1kTVRvLXNRP2_wp2a-AyLUU,2697
|
|
200
|
+
jarvis/jarvis_utils/config.py,sha256=QnEouV4VQ0uicO6Q-P6GVxhlKaRTAgx_QmYo9lEeGkk,26342
|
|
201
|
+
jarvis/jarvis_utils/embedding.py,sha256=n6MSA8IjaO2nSCznhxEWfdlvG8HTE5E6xMSJoDzHblA,2816
|
|
202
|
+
jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
|
|
203
|
+
jarvis/jarvis_utils/fzf.py,sha256=Jxs8ebFf94EQtWfbKq9HliRZXo9Dq0F9dwUGN4XfMCs,1690
|
|
204
|
+
jarvis/jarvis_utils/git_utils.py,sha256=3xZF6hvPdOzETcmCW8SPXEdzooy0TIQPloOl4uzEhI8,30631
|
|
205
|
+
jarvis/jarvis_utils/globals.py,sha256=a7j4X1IBcJ8XJmxVhSOsOfXnniVf4p6JIRzRQvZ8fFk,8907
|
|
206
|
+
jarvis/jarvis_utils/http.py,sha256=KLTBqti8m9B2TPKOLAsNuxSd8mFPN0whQhuXYnRDNW0,4424
|
|
207
|
+
jarvis/jarvis_utils/input.py,sha256=0LrE0D66IlRNPdlz3OsXAqPjv6D91yj9AQ2odpv9erg,39244
|
|
208
|
+
jarvis/jarvis_utils/jsonnet_compat.py,sha256=qne1IFUyg9z6Rr_gUJsB6q6EHm4FRSHPVv5bGlrfBs0,19209
|
|
209
|
+
jarvis/jarvis_utils/methodology.py,sha256=YuCkYvriaVviT0YQ3uNyQ4gvpfGG3jldpJXcKw9YJr0,13034
|
|
210
|
+
jarvis/jarvis_utils/output.py,sha256=y2fVcao_2ZowFl0IxUrJZCi8T6ZM0z-iPzpk8T8eLxc,13623
|
|
211
|
+
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
|
212
|
+
jarvis/jarvis_utils/utils.py,sha256=Tkvg4z3pxwaWf6dCPQ1bzFE6EzDJ9BG4OBEFY0GT5B0,84131
|
|
213
|
+
jarvis_ai_assistant-0.7.6.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
|
214
|
+
jarvis_ai_assistant-0.7.6.dist-info/METADATA,sha256=v48HStGlNVXpwNYGrlClhIdHZMVXzrCz7A27RRANKok,26820
|
|
215
|
+
jarvis_ai_assistant-0.7.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
216
|
+
jarvis_ai_assistant-0.7.6.dist-info/entry_points.txt,sha256=Uxk2_VeucH_m7EwH2mw0SlEYHIUmbzXkjTb15z_lcko,1552
|
|
217
|
+
jarvis_ai_assistant-0.7.6.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
|
218
|
+
jarvis_ai_assistant-0.7.6.dist-info/RECORD,,
|
{jarvis_ai_assistant-0.3.30.dist-info → jarvis_ai_assistant-0.7.6.dist-info}/entry_points.txt
RENAMED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
ja = jarvis.jarvis_agent.main:main
|
|
3
3
|
jarvis = jarvis.jarvis_agent.jarvis:main
|
|
4
4
|
jarvis-agent = jarvis.jarvis_agent.main:main
|
|
5
|
+
jarvis-c2rust = jarvis.jarvis_c2rust.cli:main
|
|
5
6
|
jarvis-code-agent = jarvis.jarvis_code_agent.code_agent:main
|
|
6
7
|
jarvis-code-review = jarvis.jarvis_code_analysis.code_review:main
|
|
7
8
|
jarvis-git-commit = jarvis.jarvis_git_utils.git_commiter:main
|
|
@@ -11,9 +12,11 @@ jarvis-methodology = jarvis.jarvis_methodology.main:main
|
|
|
11
12
|
jarvis-multi-agent = jarvis.jarvis_multi_agent.main:main
|
|
12
13
|
jarvis-platform-manager = jarvis.jarvis_platform_manager.main:main
|
|
13
14
|
jarvis-rag = jarvis.jarvis_rag.cli:main
|
|
15
|
+
jarvis-sec = jarvis.jarvis_sec.cli:main
|
|
14
16
|
jarvis-smart-shell = jarvis.jarvis_smart_shell.main:main
|
|
15
17
|
jarvis-stats = jarvis.jarvis_stats.cli:main
|
|
16
18
|
jarvis-tool = jarvis.jarvis_tools.cli.main:main
|
|
19
|
+
jc2r = jarvis.jarvis_c2rust.cli:main
|
|
17
20
|
jca = jarvis.jarvis_code_agent.code_agent:main
|
|
18
21
|
jcr = jarvis.jarvis_code_analysis.code_review:main
|
|
19
22
|
jgc = jarvis.jarvis_git_utils.git_commiter:main
|
|
@@ -23,6 +26,7 @@ jma = jarvis.jarvis_multi_agent.main:main
|
|
|
23
26
|
jmo = jarvis.jarvis_memory_organizer.memory_organizer:main
|
|
24
27
|
jpm = jarvis.jarvis_platform_manager.main:main
|
|
25
28
|
jrg = jarvis.jarvis_rag.cli:main
|
|
29
|
+
jsec = jarvis.jarvis_sec.cli:main
|
|
26
30
|
jss = jarvis.jarvis_smart_shell.main:main
|
|
27
31
|
jst = jarvis.jarvis_stats.cli:main
|
|
28
32
|
jt = jarvis.jarvis_tools.cli.main:main
|
jarvis/jarvis_agent/config.py
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
"""
|
|
3
|
-
AgentConfig: 聚合 Agent 的初始化配置并提供默认值解析。
|
|
4
|
-
|
|
5
|
-
目标(阶段一,最小变更):
|
|
6
|
-
- 提供独立的配置承载类,封装 __init__ 中的配置项
|
|
7
|
-
- 支持从全局配置与上下文推导默认值
|
|
8
|
-
- 暂不强制替换 Agent 的现有参数与流程,后续逐步接入
|
|
9
|
-
"""
|
|
10
|
-
from dataclasses import dataclass, field
|
|
11
|
-
from typing import List, Optional
|
|
12
|
-
|
|
13
|
-
from jarvis.jarvis_agent.prompts import DEFAULT_SUMMARY_PROMPT
|
|
14
|
-
from jarvis.jarvis_utils.config import (
|
|
15
|
-
get_max_token_count,
|
|
16
|
-
is_execute_tool_confirm,
|
|
17
|
-
is_force_save_memory,
|
|
18
|
-
is_use_analysis,
|
|
19
|
-
is_use_methodology,
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
@dataclass
|
|
24
|
-
class AgentConfig:
|
|
25
|
-
# 核心身份与系统参数
|
|
26
|
-
system_prompt: str
|
|
27
|
-
name: str = "Jarvis"
|
|
28
|
-
description: str = ""
|
|
29
|
-
model_group: Optional[str] = None
|
|
30
|
-
|
|
31
|
-
# 运行行为
|
|
32
|
-
auto_complete: bool = False
|
|
33
|
-
need_summary: bool = True
|
|
34
|
-
|
|
35
|
-
# 可选配置(None 表示使用默认策略解析)
|
|
36
|
-
summary_prompt: Optional[str] = None
|
|
37
|
-
execute_tool_confirm: Optional[bool] = None
|
|
38
|
-
use_methodology: Optional[bool] = None
|
|
39
|
-
use_analysis: Optional[bool] = None
|
|
40
|
-
force_save_memory: Optional[bool] = None
|
|
41
|
-
files: Optional[List[str]] = field(default_factory=list)
|
|
42
|
-
max_token_count: Optional[int] = None
|
|
43
|
-
|
|
44
|
-
def resolve_defaults(self) -> "AgentConfig":
|
|
45
|
-
"""
|
|
46
|
-
解析并填充默认值,返回新的 AgentConfig 实例,不修改原对象。
|
|
47
|
-
策略与 Agent._init_config 中的逻辑保持一致,确保兼容。
|
|
48
|
-
"""
|
|
49
|
-
# 复制当前实例的浅拷贝数据
|
|
50
|
-
cfg = AgentConfig(
|
|
51
|
-
system_prompt=self.system_prompt,
|
|
52
|
-
name=self.name,
|
|
53
|
-
description=self.description,
|
|
54
|
-
model_group=self.model_group,
|
|
55
|
-
auto_complete=self.auto_complete,
|
|
56
|
-
need_summary=self.need_summary,
|
|
57
|
-
summary_prompt=self.summary_prompt,
|
|
58
|
-
execute_tool_confirm=self.execute_tool_confirm,
|
|
59
|
-
use_methodology=self.use_methodology,
|
|
60
|
-
use_analysis=self.use_analysis,
|
|
61
|
-
force_save_memory=self.force_save_memory,
|
|
62
|
-
files=list(self.files or []),
|
|
63
|
-
max_token_count=self.max_token_count,
|
|
64
|
-
)
|
|
65
|
-
|
|
66
|
-
# use_methodology: 若存在上传文件则禁用;否则按照外部传入或全局默认
|
|
67
|
-
if cfg.files:
|
|
68
|
-
cfg.use_methodology = False
|
|
69
|
-
elif cfg.use_methodology is None:
|
|
70
|
-
cfg.use_methodology = is_use_methodology()
|
|
71
|
-
|
|
72
|
-
# use_analysis
|
|
73
|
-
if cfg.use_analysis is None:
|
|
74
|
-
cfg.use_analysis = is_use_analysis()
|
|
75
|
-
|
|
76
|
-
# execute_tool_confirm
|
|
77
|
-
if cfg.execute_tool_confirm is None:
|
|
78
|
-
cfg.execute_tool_confirm = is_execute_tool_confirm()
|
|
79
|
-
|
|
80
|
-
# summary_prompt
|
|
81
|
-
if cfg.summary_prompt is None:
|
|
82
|
-
cfg.summary_prompt = DEFAULT_SUMMARY_PROMPT
|
|
83
|
-
|
|
84
|
-
# max_token_count
|
|
85
|
-
if cfg.max_token_count is None:
|
|
86
|
-
cfg.max_token_count = get_max_token_count(cfg.model_group)
|
|
87
|
-
|
|
88
|
-
# force_save_memory
|
|
89
|
-
if cfg.force_save_memory is None:
|
|
90
|
-
cfg.force_save_memory = is_force_save_memory()
|
|
91
|
-
|
|
92
|
-
return cfg
|
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import re
|
|
3
|
-
from typing import Any, Dict, List, Tuple
|
|
4
|
-
|
|
5
|
-
from jarvis.jarvis_agent.output_handler import OutputHandler
|
|
6
|
-
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
|
7
|
-
from jarvis.jarvis_utils.tag import ct, ot
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class EditFileHandler(OutputHandler):
|
|
11
|
-
def __init__(self):
|
|
12
|
-
self.patch_pattern = re.compile(
|
|
13
|
-
ot("PATCH file=(?:'([^']+)'|\"([^\"]+)\"|([^>]+))") + r"\s*"
|
|
14
|
-
r"(?:"
|
|
15
|
-
+ ot("DIFF")
|
|
16
|
-
+ r"\s*"
|
|
17
|
-
+ ot("SEARCH")
|
|
18
|
-
+ r"(.*?)"
|
|
19
|
-
+ ct("SEARCH")
|
|
20
|
-
+ r"\s*"
|
|
21
|
-
+ ot("REPLACE")
|
|
22
|
-
+ r"(.*?)"
|
|
23
|
-
+ ct("REPLACE")
|
|
24
|
-
+ r"\s*"
|
|
25
|
-
+ ct("DIFF")
|
|
26
|
-
+ r"\s*)+"
|
|
27
|
-
+ ct("PATCH"),
|
|
28
|
-
re.DOTALL,
|
|
29
|
-
)
|
|
30
|
-
self.diff_pattern = re.compile(
|
|
31
|
-
ot("DIFF")
|
|
32
|
-
+ r"\s*"
|
|
33
|
-
+ ot("SEARCH")
|
|
34
|
-
+ r"(.*?)"
|
|
35
|
-
+ ct("SEARCH")
|
|
36
|
-
+ r"\s*"
|
|
37
|
-
+ ot("REPLACE")
|
|
38
|
-
+ r"(.*?)"
|
|
39
|
-
+ ct("REPLACE")
|
|
40
|
-
+ r"\s*"
|
|
41
|
-
+ ct("DIFF"),
|
|
42
|
-
re.DOTALL,
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
def handle(self, response: str, agent: Any) -> Tuple[bool, str]:
|
|
46
|
-
"""处理文件编辑响应
|
|
47
|
-
|
|
48
|
-
Args:
|
|
49
|
-
response: 包含文件编辑指令的响应字符串
|
|
50
|
-
agent: 执行处理的agent实例
|
|
51
|
-
|
|
52
|
-
Returns:
|
|
53
|
-
Tuple[bool, str]: 返回处理结果元组,第一个元素表示是否处理成功,第二个元素为处理结果汇总字符串
|
|
54
|
-
"""
|
|
55
|
-
patches = self._parse_patches(response)
|
|
56
|
-
if not patches:
|
|
57
|
-
return False, "未找到有效的文件编辑指令"
|
|
58
|
-
|
|
59
|
-
# 记录 edit_file 工具调用统计
|
|
60
|
-
from jarvis.jarvis_stats.stats import StatsManager
|
|
61
|
-
|
|
62
|
-
StatsManager.increment("edit_file", group="tool")
|
|
63
|
-
|
|
64
|
-
results = []
|
|
65
|
-
|
|
66
|
-
for file_path, diffs in patches.items():
|
|
67
|
-
file_path = os.path.abspath(file_path)
|
|
68
|
-
file_patches = [
|
|
69
|
-
{"SEARCH": diff["SEARCH"], "REPLACE": diff["REPLACE"]} for diff in diffs
|
|
70
|
-
]
|
|
71
|
-
|
|
72
|
-
success, result = self._fast_edit(file_path, file_patches)
|
|
73
|
-
|
|
74
|
-
if success:
|
|
75
|
-
results.append(f"✅ 文件 {file_path} 修改成功")
|
|
76
|
-
else:
|
|
77
|
-
results.append(f"❌ 文件 {file_path} 修改失败: {result}")
|
|
78
|
-
|
|
79
|
-
summary = "\n".join(results)
|
|
80
|
-
return False, summary
|
|
81
|
-
|
|
82
|
-
def can_handle(self, response: str) -> bool:
|
|
83
|
-
"""判断是否能处理给定的响应
|
|
84
|
-
|
|
85
|
-
Args:
|
|
86
|
-
response: 需要判断的响应字符串
|
|
87
|
-
|
|
88
|
-
Returns:
|
|
89
|
-
bool: 返回是否能处理该响应
|
|
90
|
-
"""
|
|
91
|
-
return bool(self.patch_pattern.search(response))
|
|
92
|
-
|
|
93
|
-
def prompt(self) -> str:
|
|
94
|
-
"""获取处理器的提示信息
|
|
95
|
-
|
|
96
|
-
Returns:
|
|
97
|
-
str: 返回处理器的提示字符串
|
|
98
|
-
"""
|
|
99
|
-
return f"""文件编辑指令格式:
|
|
100
|
-
{ot("PATCH file=文件路径")}
|
|
101
|
-
{ot("DIFF")}
|
|
102
|
-
{ot("SEARCH")}原始代码{ct("SEARCH")}
|
|
103
|
-
{ot("REPLACE")}新代码{ct("REPLACE")}
|
|
104
|
-
{ct("DIFF")}
|
|
105
|
-
{ct("PATCH")}
|
|
106
|
-
|
|
107
|
-
可以返回多个PATCH块用于同时修改多个文件
|
|
108
|
-
每个PATCH块可以包含多个DIFF块,每个DIFF块包含一组搜索和替换内容。
|
|
109
|
-
搜索文本必须能在文件中唯一匹配,否则编辑将失败。"""
|
|
110
|
-
|
|
111
|
-
def name(self) -> str:
|
|
112
|
-
"""获取处理器的名称
|
|
113
|
-
|
|
114
|
-
Returns:
|
|
115
|
-
str: 返回处理器的名称字符串
|
|
116
|
-
"""
|
|
117
|
-
return "PATCH"
|
|
118
|
-
|
|
119
|
-
def _parse_patches(self, response: str) -> Dict[str, List[Dict[str, str]]]:
|
|
120
|
-
"""解析响应中的补丁信息
|
|
121
|
-
|
|
122
|
-
该方法使用正则表达式从响应文本中提取文件编辑指令(PATCH块),
|
|
123
|
-
每个PATCH块可以包含多个DIFF块,每个DIFF块包含一组搜索和替换内容。
|
|
124
|
-
解析后会返回一个字典,键是文件路径,值是该文件对应的补丁列表。
|
|
125
|
-
如果同一个文件路径出现多次,会将所有DIFF块合并到一起。
|
|
126
|
-
|
|
127
|
-
Args:
|
|
128
|
-
response: 包含补丁信息的响应字符串,格式应符合PATCH指令规范
|
|
129
|
-
|
|
130
|
-
Returns:
|
|
131
|
-
Dict[str, List[Dict[str, str]]]:
|
|
132
|
-
返回解析后的补丁信息字典,结构为:
|
|
133
|
-
{
|
|
134
|
-
"文件路径1": [
|
|
135
|
-
{"SEARCH": "搜索文本1", "REPLACE": "替换文本1"},
|
|
136
|
-
{"SEARCH": "搜索文本2", "REPLACE": "替换文本2"}
|
|
137
|
-
],
|
|
138
|
-
"文件路径2": [...]
|
|
139
|
-
}
|
|
140
|
-
"""
|
|
141
|
-
patches: Dict[str, List[Dict[str, str]]] = {}
|
|
142
|
-
for match in self.patch_pattern.finditer(response):
|
|
143
|
-
# Get the file path from the appropriate capture group
|
|
144
|
-
file_path = match.group(1) or match.group(2) or match.group(3)
|
|
145
|
-
diffs = []
|
|
146
|
-
for diff_match in self.diff_pattern.finditer(match.group(0)):
|
|
147
|
-
# 完全保留原始格式(包括所有空白和换行)
|
|
148
|
-
diffs.append(
|
|
149
|
-
{
|
|
150
|
-
"SEARCH": diff_match.group(1), # 原始SEARCH内容
|
|
151
|
-
"REPLACE": diff_match.group(2), # 原始REPLACE内容
|
|
152
|
-
}
|
|
153
|
-
)
|
|
154
|
-
if diffs:
|
|
155
|
-
if file_path in patches:
|
|
156
|
-
patches[file_path].extend(diffs)
|
|
157
|
-
else:
|
|
158
|
-
patches[file_path] = diffs
|
|
159
|
-
return patches
|
|
160
|
-
|
|
161
|
-
@staticmethod
|
|
162
|
-
def _fast_edit(file_path: str, patches: List[Dict[str, str]]) -> Tuple[bool, str]:
|
|
163
|
-
"""快速应用补丁到文件
|
|
164
|
-
|
|
165
|
-
该方法直接尝试将补丁应用到目标文件,适用于简单、明确的修改场景。
|
|
166
|
-
特点:
|
|
167
|
-
1. 直接进行字符串替换,效率高
|
|
168
|
-
2. 会自动处理缩进问题,尝试匹配不同缩进级别的代码
|
|
169
|
-
3. 确保搜索文本在文件中唯一匹配
|
|
170
|
-
4. 如果部分补丁失败,会继续应用剩余补丁,并报告失败信息
|
|
171
|
-
|
|
172
|
-
Args:
|
|
173
|
-
file_path: 要修改的文件路径,支持绝对路径和相对路径
|
|
174
|
-
patches: 补丁列表,每个补丁包含search(搜索文本)和replace(替换文本)
|
|
175
|
-
|
|
176
|
-
Returns:
|
|
177
|
-
Tuple[bool, str]:
|
|
178
|
-
返回处理结果元组,第一个元素表示是否所有补丁都成功应用,
|
|
179
|
-
第二个元素为结果信息,全部成功时为修改后的文件内容,部分或全部失败时为错误信息
|
|
180
|
-
"""
|
|
181
|
-
try:
|
|
182
|
-
# 确保目录存在
|
|
183
|
-
os.makedirs(os.path.dirname(file_path), exist_ok=True)
|
|
184
|
-
|
|
185
|
-
# 读取原始文件内容
|
|
186
|
-
file_content = ""
|
|
187
|
-
if os.path.exists(file_path):
|
|
188
|
-
with open(file_path, "r", encoding="utf-8") as f:
|
|
189
|
-
file_content = f.read()
|
|
190
|
-
|
|
191
|
-
# 应用所有补丁
|
|
192
|
-
modified_content = file_content
|
|
193
|
-
patch_count = 0
|
|
194
|
-
failed_patches: List[Dict[str, Any]] = []
|
|
195
|
-
successful_patches = 0
|
|
196
|
-
|
|
197
|
-
for patch in patches:
|
|
198
|
-
patch_count += 1
|
|
199
|
-
search_text = patch["SEARCH"]
|
|
200
|
-
replace_text = patch["REPLACE"]
|
|
201
|
-
|
|
202
|
-
# 精确匹配搜索文本(保留原始换行和空格)
|
|
203
|
-
exact_search = search_text
|
|
204
|
-
found = False
|
|
205
|
-
|
|
206
|
-
if exact_search in modified_content:
|
|
207
|
-
# 直接执行替换(保留所有原始格式),只替换第一个匹配
|
|
208
|
-
modified_content = modified_content.replace(
|
|
209
|
-
exact_search, replace_text, 1
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
found = True
|
|
213
|
-
else:
|
|
214
|
-
# 如果匹配不到,并且search与replace块的首尾都是换行,尝试去掉第一个和最后一个换行
|
|
215
|
-
if (
|
|
216
|
-
search_text.startswith("\n")
|
|
217
|
-
and search_text.endswith("\n")
|
|
218
|
-
and replace_text.startswith("\n")
|
|
219
|
-
and replace_text.endswith("\n")
|
|
220
|
-
):
|
|
221
|
-
stripped_search = search_text[1:-1]
|
|
222
|
-
stripped_replace = replace_text[1:-1]
|
|
223
|
-
if stripped_search in modified_content:
|
|
224
|
-
modified_content = modified_content.replace(
|
|
225
|
-
stripped_search, stripped_replace, 1
|
|
226
|
-
)
|
|
227
|
-
|
|
228
|
-
found = True
|
|
229
|
-
|
|
230
|
-
if not found:
|
|
231
|
-
# 尝试增加缩进重试
|
|
232
|
-
current_search = search_text
|
|
233
|
-
current_replace = replace_text
|
|
234
|
-
if (
|
|
235
|
-
current_search.startswith("\n")
|
|
236
|
-
and current_search.endswith("\n")
|
|
237
|
-
and current_replace.startswith("\n")
|
|
238
|
-
and current_replace.endswith("\n")
|
|
239
|
-
):
|
|
240
|
-
current_search = current_search[1:-1]
|
|
241
|
-
current_replace = current_replace[1:-1]
|
|
242
|
-
|
|
243
|
-
for space_count in range(1, 17):
|
|
244
|
-
indented_search = "\n".join(
|
|
245
|
-
" " * space_count + line if line.strip() else line
|
|
246
|
-
for line in current_search.split("\n")
|
|
247
|
-
)
|
|
248
|
-
indented_replace = "\n".join(
|
|
249
|
-
" " * space_count + line if line.strip() else line
|
|
250
|
-
for line in current_replace.split("\n")
|
|
251
|
-
)
|
|
252
|
-
if indented_search in modified_content:
|
|
253
|
-
modified_content = modified_content.replace(
|
|
254
|
-
indented_search, indented_replace, 1
|
|
255
|
-
)
|
|
256
|
-
|
|
257
|
-
found = True
|
|
258
|
-
break
|
|
259
|
-
|
|
260
|
-
if found:
|
|
261
|
-
successful_patches += 1
|
|
262
|
-
else:
|
|
263
|
-
error_msg = "搜索文本在文件中不存在"
|
|
264
|
-
|
|
265
|
-
failed_patches.append({"patch": patch, "error": error_msg})
|
|
266
|
-
|
|
267
|
-
# 写入修改后的内容
|
|
268
|
-
with open(file_path, "w", encoding="utf-8") as f:
|
|
269
|
-
f.write(modified_content)
|
|
270
|
-
|
|
271
|
-
if failed_patches:
|
|
272
|
-
error_details = [
|
|
273
|
-
f" - 失败的补丁: \n{p['patch']['SEARCH']}\n 错误: {p['error']}"
|
|
274
|
-
for p in failed_patches
|
|
275
|
-
]
|
|
276
|
-
if successful_patches == 0:
|
|
277
|
-
summary = (
|
|
278
|
-
f"文件 {file_path} 修改失败(全部失败)。\n"
|
|
279
|
-
f"失败: {len(failed_patches)}/{patch_count}.\n"
|
|
280
|
-
f"失败详情:\n" + "\n".join(error_details)
|
|
281
|
-
)
|
|
282
|
-
else:
|
|
283
|
-
summary = (
|
|
284
|
-
f"文件 {file_path} 修改部分成功。\n"
|
|
285
|
-
f"成功: {successful_patches}/{patch_count}, "
|
|
286
|
-
f"失败: {len(failed_patches)}/{patch_count}.\n"
|
|
287
|
-
f"失败详情:\n" + "\n".join(error_details)
|
|
288
|
-
)
|
|
289
|
-
PrettyOutput.print(summary, OutputType.ERROR)
|
|
290
|
-
return False, summary
|
|
291
|
-
|
|
292
|
-
return True, modified_content
|
|
293
|
-
|
|
294
|
-
except Exception as e:
|
|
295
|
-
PrettyOutput.print(f"文件修改失败: {str(e)}", OutputType.ERROR)
|
|
296
|
-
return False, f"文件修改失败: {str(e)}"
|