jarvis-ai-assistant 0.2.1__py3-none-any.whl → 0.2.3__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/jarvis.py +61 -59
- jarvis/jarvis_agent/main.py +42 -40
- jarvis/jarvis_agent/prompts.py +26 -4
- jarvis/jarvis_code_agent/code_agent.py +35 -31
- jarvis/jarvis_code_analysis/code_review.py +73 -39
- jarvis/jarvis_data/config_schema.json +67 -12
- jarvis/jarvis_git_squash/main.py +16 -12
- jarvis/jarvis_git_utils/git_commiter.py +25 -20
- jarvis/jarvis_methodology/main.py +34 -49
- jarvis/jarvis_multi_agent/main.py +28 -23
- jarvis/jarvis_platform/ai8.py +31 -22
- jarvis/jarvis_platform/kimi.py +31 -61
- jarvis/jarvis_platform/tongyi.py +71 -85
- jarvis/jarvis_platform/yuanbao.py +44 -50
- jarvis/jarvis_platform_manager/main.py +55 -90
- jarvis/jarvis_rag/cli.py +79 -23
- jarvis/jarvis_rag/query_rewriter.py +61 -12
- jarvis/jarvis_rag/rag_pipeline.py +143 -34
- jarvis/jarvis_rag/retriever.py +5 -5
- jarvis/jarvis_smart_shell/main.py +58 -87
- jarvis/jarvis_tools/cli/main.py +120 -153
- jarvis/jarvis_tools/generate_new_tool.py +22 -1
- jarvis/jarvis_tools/registry.py +1 -7
- jarvis/jarvis_tools/search_web.py +12 -10
- jarvis/jarvis_utils/config.py +92 -11
- jarvis/jarvis_utils/globals.py +29 -8
- jarvis/jarvis_utils/http.py +58 -79
- jarvis/jarvis_utils/input.py +114 -121
- jarvis/jarvis_utils/output.py +1 -1
- jarvis/jarvis_utils/utils.py +3 -0
- jarvis_ai_assistant-0.2.3.dist-info/METADATA +301 -0
- {jarvis_ai_assistant-0.2.1.dist-info → jarvis_ai_assistant-0.2.3.dist-info}/RECORD +37 -40
- {jarvis_ai_assistant-0.2.1.dist-info → jarvis_ai_assistant-0.2.3.dist-info}/entry_points.txt +0 -2
- jarvis/jarvis_git_details/__init__.py +0 -0
- jarvis/jarvis_git_details/main.py +0 -265
- jarvis/jarvis_platform/oyi.py +0 -357
- jarvis_ai_assistant-0.2.1.dist-info/METADATA +0 -845
- {jarvis_ai_assistant-0.2.1.dist-info → jarvis_ai_assistant-0.2.3.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.2.1.dist-info → jarvis_ai_assistant-0.2.3.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.2.1.dist-info → jarvis_ai_assistant-0.2.3.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,20 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=XEAMgUO6o_M_mBppz2pFtIaTvKb5tTGUJDlGLoURD6g,73
|
2
2
|
jarvis/jarvis_agent/__init__.py,sha256=BmBbMUsCwe_0znrwxSipaKj-MuOgJTZvLbyKzBFfpic,22559
|
3
3
|
jarvis/jarvis_agent/builtin_input_handler.py,sha256=Qs4LAr4xdKLBJpQE81YP4CkucAop86ms0iVoKa1nnso,2468
|
4
4
|
jarvis/jarvis_agent/edit_file_handler.py,sha256=ml1o-BE2Ca1-ybPlKuhstLQYwdJag39o0_-PXTUvFaE,11646
|
5
|
-
jarvis/jarvis_agent/jarvis.py,sha256=
|
6
|
-
jarvis/jarvis_agent/main.py,sha256=
|
5
|
+
jarvis/jarvis_agent/jarvis.py,sha256=PQ2dHPWeCAHL4JCk-_oYa26pP2bIWUdokkO-VW7-6h0,8185
|
6
|
+
jarvis/jarvis_agent/main.py,sha256=IM9_AsCmTw4QYLp3AMF97kRGctQC2pEIZls6zxZgUSQ,3319
|
7
7
|
jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
|
8
8
|
jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh2lC__p40,1705
|
9
|
-
jarvis/jarvis_agent/prompts.py,sha256=
|
9
|
+
jarvis/jarvis_agent/prompts.py,sha256=VLQtz75X5qExQkSwYlJYQzNLpDMdByr4FaY71POVLMI,8713
|
10
10
|
jarvis/jarvis_agent/protocols.py,sha256=JWnJDikFEuwvFUv7uzXu0ggJ4O9K2FkMnfVCwIJ5REw,873
|
11
11
|
jarvis/jarvis_agent/session_manager.py,sha256=DnvI9rWkVmkyO1XfKZyo9lTn4ajg4ccwzEkoRHFPOJM,2925
|
12
12
|
jarvis/jarvis_agent/shell_input_handler.py,sha256=1IboqdxcJuoIqRpmDU10GugR9fWXUHyCEbVF4nIWbyo,1328
|
13
13
|
jarvis/jarvis_agent/tool_executor.py,sha256=nIq-sPNgrtimtM-IHpN09cWmId8jDzWRdCFoRzXnnoo,1721
|
14
14
|
jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
|
-
jarvis/jarvis_code_agent/code_agent.py,sha256=
|
15
|
+
jarvis/jarvis_code_agent/code_agent.py,sha256=n0_sOXuGgzSQKLUj64ap0lWqKR67RZPnO3jpl2YD7MI,18681
|
16
16
|
jarvis/jarvis_code_agent/lint.py,sha256=LZPsfyZPMo7Wm7LN4osZocuNJwZx1ojacO3MlF870x8,4009
|
17
|
-
jarvis/jarvis_code_analysis/code_review.py,sha256=
|
17
|
+
jarvis/jarvis_code_analysis/code_review.py,sha256=3oRxB4Ks2lbnzQpPWFU6cpwpVz1sWtQ7OAT-kwZOUSI,32150
|
18
18
|
jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
|
19
19
|
jarvis/jarvis_code_analysis/checklists/c_cpp.py,sha256=9t62bMqs6qTkFSio4SKkj88qyb5ZubWrw3MxJBQ4X1A,1317
|
20
20
|
jarvis/jarvis_code_analysis/checklists/csharp.py,sha256=ShPXrl2_UPAnGaCHAG2wLl90COG3HK2XCSr1UK2dxN4,2420
|
@@ -35,76 +35,73 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
|
|
35
35
|
jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
|
36
36
|
jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
|
37
37
|
jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
|
38
|
-
jarvis/jarvis_data/config_schema.json,sha256=
|
38
|
+
jarvis/jarvis_data/config_schema.json,sha256=bLzZnGDaQsHfK_o7cSEL-tQzbOgGaeV3Q8scfXkWTf4,10231
|
39
39
|
jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
|
40
|
-
jarvis/jarvis_git_details/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
41
|
-
jarvis/jarvis_git_details/main.py,sha256=DE1DcX-1lvUsb_K-FExpHs3NBRmo5KZb53PGa8QFBOc,8875
|
42
40
|
jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
43
|
-
jarvis/jarvis_git_squash/main.py,sha256=
|
44
|
-
jarvis/jarvis_git_utils/git_commiter.py,sha256=
|
41
|
+
jarvis/jarvis_git_squash/main.py,sha256=8_ADMTGi8Z41mqKCed4zHOd3nZCqEDWfqVLWpnYvCnE,2263
|
42
|
+
jarvis/jarvis_git_utils/git_commiter.py,sha256=fJ97nvvDt-0E8E4PbeMvptx_yoJXFAObhaPVb3mjO_g,12676
|
45
43
|
jarvis/jarvis_mcp/__init__.py,sha256=OPMtjD-uq9xAaKCRIDyKIosaFfBe1GBPu1az-mQ0rVM,2048
|
46
44
|
jarvis/jarvis_mcp/sse_mcp_client.py,sha256=AhYLPQb0mE9-6ZQw1JesRNyEy0esJumNEFb5LyzyIn0,22612
|
47
45
|
jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=APYUksYKlMx7AVNODKOLrTkKZPnp4kqTQIYIuNDDKko,11286
|
48
46
|
jarvis/jarvis_mcp/streamable_mcp_client.py,sha256=1OZpsG82U2MLbGuojllJAblFUAMmp1N0i5fsKM4n5Ts,14453
|
49
|
-
jarvis/jarvis_methodology/main.py,sha256
|
47
|
+
jarvis/jarvis_methodology/main.py,sha256=6QF8hH3vB6rfxim0fPR34uVPf41zVpb4ZLqrFN2qONg,10983
|
50
48
|
jarvis/jarvis_multi_agent/__init__.py,sha256=kCgtAX7VvliyEOQxIj2DvNjRAuh6bpNaOtDn60nzph4,6089
|
51
|
-
jarvis/jarvis_multi_agent/main.py,sha256=
|
49
|
+
jarvis/jarvis_multi_agent/main.py,sha256=EUJCLjiN6ZZkOTmRS13oeTquo3tXD-cdO_QvaEPCK_c,1715
|
52
50
|
jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
|
53
|
-
jarvis/jarvis_platform/ai8.py,sha256=
|
51
|
+
jarvis/jarvis_platform/ai8.py,sha256=uiL1BkONteUB2aXg6kMGSXLLOhzGDl5_SNQYyQzmFNk,11412
|
54
52
|
jarvis/jarvis_platform/base.py,sha256=cfeYB6ldfQH1tz1rroQpmJTLAw8KByKS74qun0pqE1c,9498
|
55
53
|
jarvis/jarvis_platform/human.py,sha256=cSN8Lqf0ts2_pPfS2_v7PaWxQKqcW_3bSmhRTHey7Qo,4674
|
56
|
-
jarvis/jarvis_platform/kimi.py,sha256=
|
54
|
+
jarvis/jarvis_platform/kimi.py,sha256=HzNcdQ3tO2ndHk02mfD9DeeGP7JVFnQ1pbkAVF21jjA,14222
|
57
55
|
jarvis/jarvis_platform/openai.py,sha256=ccGqsU2cFfd5324P7SH1tSmFABpvto8fytmxQGkr3BA,6412
|
58
|
-
jarvis/jarvis_platform/oyi.py,sha256=GvVooV8ScRqDb9QxJdINtdZwsx6PUIdo1-bt9k0hmqY,12604
|
59
56
|
jarvis/jarvis_platform/registry.py,sha256=1bMy0YZUa8NLzuZlKfC4CBtpa0iniypTxUZk0Hv6g9Y,8415
|
60
|
-
jarvis/jarvis_platform/tongyi.py,sha256=
|
61
|
-
jarvis/jarvis_platform/yuanbao.py,sha256=
|
57
|
+
jarvis/jarvis_platform/tongyi.py,sha256=22NPrJDrd4Zag2oWlytZ9--vA3hLJhJ2YJ-kM5RwLQ8,22212
|
58
|
+
jarvis/jarvis_platform/yuanbao.py,sha256=FbkpMs_hUL8bGJHbWivQEynnU892-5qPsMe0xASGXkI,22673
|
62
59
|
jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
63
|
-
jarvis/jarvis_platform_manager/main.py,sha256=
|
60
|
+
jarvis/jarvis_platform_manager/main.py,sha256=V320cEk2CP-NhmdNr0dED77VOUTJ6ODYL0YXC7wLZzw,17513
|
64
61
|
jarvis/jarvis_platform_manager/service.py,sha256=hQGWQ2qAlzm_C_lNQDuLORQ4rmjR1P1-V3ou7l2Bv0s,13622
|
65
62
|
jarvis/jarvis_rag/__init__.py,sha256=HRTXgnQxDuaE9x-e3r6SYqhJ5d4DSI_rrIxy2IGY6qk,320
|
66
63
|
jarvis/jarvis_rag/cache.py,sha256=Tqx_Oe-AhuWlMXHGHUaIuG6OEHoHBVZq7mL3kldtFFU,2723
|
67
|
-
jarvis/jarvis_rag/cli.py,sha256=
|
64
|
+
jarvis/jarvis_rag/cli.py,sha256=bIQKibp8swJDyfFBXaiX5C20LHN_2W2knO2I-MQp58c,15620
|
68
65
|
jarvis/jarvis_rag/embedding_manager.py,sha256=BoV6Vr_3F4zbjBAOQ1FdEBnJXGPwBkv1IEkdRP9CgFw,3338
|
69
66
|
jarvis/jarvis_rag/llm_interface.py,sha256=eZHibNHD5dFK9yolr3hYNNhAEZUsPA-cIf1uHapI2h8,4338
|
70
|
-
jarvis/jarvis_rag/query_rewriter.py,sha256=
|
71
|
-
jarvis/jarvis_rag/rag_pipeline.py,sha256=
|
67
|
+
jarvis/jarvis_rag/query_rewriter.py,sha256=rmXj-j3jjsOR-Dj9Hk5exfCJqZ4uCxMFfvybzurpj5w,4047
|
68
|
+
jarvis/jarvis_rag/rag_pipeline.py,sha256=MSVfTVqDRK1_m0SMeOBcqirAyrd8GsVC27vanMbUCUY,10598
|
72
69
|
jarvis/jarvis_rag/reranker.py,sha256=wYUDIMHQL8_tFcQ7GFn_zYHTE1AbKk4a9TRoN2lKtA8,1767
|
73
|
-
jarvis/jarvis_rag/retriever.py,sha256=
|
70
|
+
jarvis/jarvis_rag/retriever.py,sha256=j-Lyok7N5j1aD5s6X6sOwyBA1oXclzkJ5AnKOh9PKUs,7665
|
74
71
|
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
|
-
jarvis/jarvis_smart_shell/main.py,sha256=
|
72
|
+
jarvis/jarvis_smart_shell/main.py,sha256=MXUVaXvT9zOxykbQphCGEXUCRhdOhEthQxHba_D4oiE,6015
|
76
73
|
jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
77
74
|
jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
|
78
75
|
jarvis/jarvis_tools/base.py,sha256=tFVmK6ppsImW2BzHZmrNmMRiOJdW-4aZP6Me3VxdYcA,1194
|
79
76
|
jarvis/jarvis_tools/edit_file.py,sha256=hM345E9rxS-EkqCZpwwizL6fmPdTadtB798tEO5Ce3g,10417
|
80
77
|
jarvis/jarvis_tools/execute_script.py,sha256=gMarE5yCCSPU6Dp6HlcL2KT-2xCzR-1p-oQNlYOJK58,6157
|
81
78
|
jarvis/jarvis_tools/file_analyzer.py,sha256=aVe1jBSp0YmlypihxrGADJpYrU_7CxDETxGUNySuSlI,4044
|
82
|
-
jarvis/jarvis_tools/generate_new_tool.py,sha256=
|
79
|
+
jarvis/jarvis_tools/generate_new_tool.py,sha256=uaWKlDMGjetvvwKTj0_AVTdmd14IktRbU3cpzKCBiIQ,8728
|
83
80
|
jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
|
84
81
|
jarvis/jarvis_tools/read_code.py,sha256=EnI-R-5HyIQYhMD391nZWXHIuHHBF-OJIRE0QpLcPX4,6417
|
85
82
|
jarvis/jarvis_tools/read_webpage.py,sha256=NmDUboVZd4CGHBPRFK6dp3uqVhuGopW1bOi3TcaLDF4,2092
|
86
|
-
jarvis/jarvis_tools/registry.py,sha256=
|
83
|
+
jarvis/jarvis_tools/registry.py,sha256=etJicnDvmfvu3MZwF4LiufKL63sV812FUZOpBBS28DU,28195
|
87
84
|
jarvis/jarvis_tools/rewrite_file.py,sha256=eG_WKg6cVAXmuGwUqlWkcuyay5S8DOzEi8vZCmX3O8w,7255
|
88
|
-
jarvis/jarvis_tools/search_web.py,sha256=
|
85
|
+
jarvis/jarvis_tools/search_web.py,sha256=qh3MomJNDzpw5JTBbJWxzJmIdmuUt2SZNqJNc8LJrO4,5829
|
89
86
|
jarvis/jarvis_tools/virtual_tty.py,sha256=KKr3jpvQWWMPr2o40hlmN6fuXJCN8H4_ma5QU40Citc,16089
|
90
87
|
jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
91
|
-
jarvis/jarvis_tools/cli/main.py,sha256=
|
88
|
+
jarvis/jarvis_tools/cli/main.py,sha256=ZOvdC6wEOTdhTJy8ZDF_AKlH0jBmVcbOrU-8JPK2gWM,4703
|
92
89
|
jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
|
93
90
|
jarvis/jarvis_utils/builtin_replace_map.py,sha256=4BurljGuiG_I93EBs7mlFlPm9wYC_4CmdTG5tQWpF6g,1712
|
94
|
-
jarvis/jarvis_utils/config.py,sha256=
|
91
|
+
jarvis/jarvis_utils/config.py,sha256=rntrk6eN42-Cx2wc9lnxKFo8yPc1OtEWIR9dMuA05iA,12828
|
95
92
|
jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
|
96
93
|
jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
|
97
94
|
jarvis/jarvis_utils/git_utils.py,sha256=_b4-5uWOTVFjAB48QbRJNBR7PTD_jzi7-5V5M_wjXFo,21740
|
98
|
-
jarvis/jarvis_utils/globals.py,sha256=
|
99
|
-
jarvis/jarvis_utils/http.py,sha256=
|
100
|
-
jarvis/jarvis_utils/input.py,sha256=
|
95
|
+
jarvis/jarvis_utils/globals.py,sha256=INBGXbDkXOQa0AE7L6JhR5gr-TAZMsE5y4yK1sbB98U,4643
|
96
|
+
jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
|
97
|
+
jarvis/jarvis_utils/input.py,sha256=g0Xa1TNZHxLaYduREV_Wc55iqHD6djN73YFJbR83gUg,9488
|
101
98
|
jarvis/jarvis_utils/methodology.py,sha256=V2Y0mbamrWBhhCK-3foAM1hKewOEcIDcXO-Sv_AU-kQ,9106
|
102
|
-
jarvis/jarvis_utils/output.py,sha256=
|
99
|
+
jarvis/jarvis_utils/output.py,sha256=E_J_RYXtkOgRiDSHCRE9QPHY8WQmmhIotQtIQru8GZA,10888
|
103
100
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
104
|
-
jarvis/jarvis_utils/utils.py,sha256=
|
105
|
-
jarvis_ai_assistant-0.2.
|
106
|
-
jarvis_ai_assistant-0.2.
|
107
|
-
jarvis_ai_assistant-0.2.
|
108
|
-
jarvis_ai_assistant-0.2.
|
109
|
-
jarvis_ai_assistant-0.2.
|
110
|
-
jarvis_ai_assistant-0.2.
|
101
|
+
jarvis/jarvis_utils/utils.py,sha256=c3F4vYbCtQ-afw1_ncBVhQCLzzmi8jTRlffq1I4UhZc,20108
|
102
|
+
jarvis_ai_assistant-0.2.3.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
103
|
+
jarvis_ai_assistant-0.2.3.dist-info/METADATA,sha256=HSS2dolspYchoJ4e9KXJ_MyxNyBybBSxnfDHXU672tA,14584
|
104
|
+
jarvis_ai_assistant-0.2.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
105
|
+
jarvis_ai_assistant-0.2.3.dist-info/entry_points.txt,sha256=nXgfarEvf9Zelwvl6yGa4Zmqpsa7dDTahlzHRHL8qvM,1178
|
106
|
+
jarvis_ai_assistant-0.2.3.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
107
|
+
jarvis_ai_assistant-0.2.3.dist-info/RECORD,,
|
{jarvis_ai_assistant-0.2.1.dist-info → jarvis_ai_assistant-0.2.3.dist-info}/entry_points.txt
RENAMED
@@ -5,7 +5,6 @@ jarvis-agent = jarvis.jarvis_agent.main:main
|
|
5
5
|
jarvis-code-agent = jarvis.jarvis_code_agent.code_agent:main
|
6
6
|
jarvis-code-review = jarvis.jarvis_code_analysis.code_review:main
|
7
7
|
jarvis-git-commit = jarvis.jarvis_git_utils.git_commiter:main
|
8
|
-
jarvis-git-details = jarvis.jarvis_git_details.main:main
|
9
8
|
jarvis-git-squash = jarvis.jarvis_git_squash.main:main
|
10
9
|
jarvis-methodology = jarvis.jarvis_methodology.main:main
|
11
10
|
jarvis-multi-agent = jarvis.jarvis_multi_agent.main:main
|
@@ -16,7 +15,6 @@ jarvis-tool = jarvis.jarvis_tools.cli.main:main
|
|
16
15
|
jca = jarvis.jarvis_code_agent.code_agent:main
|
17
16
|
jcr = jarvis.jarvis_code_analysis.code_review:main
|
18
17
|
jgc = jarvis.jarvis_git_utils.git_commiter:main
|
19
|
-
jgd = jarvis.jarvis_git_details.main:main
|
20
18
|
jgs = jarvis.jarvis_git_squash.main:main
|
21
19
|
jm = jarvis.jarvis_methodology.main:main
|
22
20
|
jma = jarvis.jarvis_multi_agent.main:main
|
File without changes
|
@@ -1,265 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
"""Git Commit分析工具模块
|
3
|
-
|
4
|
-
该模块提供了一个GitCommitAnalyzer类,用于获取和分析指定Git commit的详细信息,
|
5
|
-
包括提交信息、修改内容以及详细的功能、原因和逻辑分析。
|
6
|
-
"""
|
7
|
-
|
8
|
-
import os
|
9
|
-
import re
|
10
|
-
import subprocess
|
11
|
-
from typing import Any, Dict
|
12
|
-
|
13
|
-
from jarvis.jarvis_agent import Agent
|
14
|
-
from jarvis.jarvis_platform.registry import PlatformRegistry
|
15
|
-
from jarvis.jarvis_tools.registry import ToolRegistry
|
16
|
-
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
17
|
-
from jarvis.jarvis_utils.tag import ct, ot
|
18
|
-
from jarvis.jarvis_utils.utils import init_env
|
19
|
-
|
20
|
-
|
21
|
-
class GitCommitAnalyzer:
|
22
|
-
"""Git Commit分析器
|
23
|
-
|
24
|
-
该类用于获取和分析指定Git commit的详细信息,包括:
|
25
|
-
- 完整的提交信息
|
26
|
-
- 修改的文件列表和状态
|
27
|
-
- 修改的功能、原因和逻辑分析
|
28
|
-
"""
|
29
|
-
|
30
|
-
def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:
|
31
|
-
"""执行commit分析
|
32
|
-
|
33
|
-
Args:
|
34
|
-
args: 包含commit_sha/commit_range和root_dir的参数字典
|
35
|
-
commit_sha: 单个commit的SHA
|
36
|
-
commit_range: 两个commit的SHA范围,格式为"commit1..commit2"
|
37
|
-
root_dir: 代码库根目录
|
38
|
-
|
39
|
-
Returns:
|
40
|
-
包含分析结果的字典
|
41
|
-
"""
|
42
|
-
try:
|
43
|
-
commit_sha = args.get("commit_sha")
|
44
|
-
commit_range = args.get("commit_range")
|
45
|
-
root_dir = args.get("root_dir", ".")
|
46
|
-
|
47
|
-
if commit_range:
|
48
|
-
return self.analyze_commit_range(commit_range, root_dir)
|
49
|
-
elif commit_sha:
|
50
|
-
return self.analyze_single_commit(commit_sha, root_dir)
|
51
|
-
else:
|
52
|
-
raise ValueError("Either commit_sha or commit_range must be provided")
|
53
|
-
except Exception as e:
|
54
|
-
return {
|
55
|
-
"success": False,
|
56
|
-
"stdout": {},
|
57
|
-
"stderr": f"Failed to analyze commit: {str(e)}",
|
58
|
-
}
|
59
|
-
|
60
|
-
def analyze_single_commit(self, commit_sha: str, root_dir: str) -> Dict[str, Any]:
|
61
|
-
"""分析单个commit
|
62
|
-
|
63
|
-
Args:
|
64
|
-
commit_sha: commit的SHA
|
65
|
-
root_dir: 代码库根目录
|
66
|
-
|
67
|
-
Returns:
|
68
|
-
包含分析结果的字典
|
69
|
-
"""
|
70
|
-
original_dir = os.getcwd()
|
71
|
-
try:
|
72
|
-
os.chdir(root_dir)
|
73
|
-
|
74
|
-
# 获取commit详细信息
|
75
|
-
commit_info = subprocess.check_output(
|
76
|
-
f"git show {commit_sha} --pretty=fuller", shell=True, text=True
|
77
|
-
)
|
78
|
-
|
79
|
-
# 获取commit修改内容
|
80
|
-
diff_content = subprocess.check_output(
|
81
|
-
f"git show {commit_sha} --patch", shell=True, text=True
|
82
|
-
)
|
83
|
-
|
84
|
-
# 分析commit的功能、原因和逻辑
|
85
|
-
analysis_result = self._analyze_diff_content(diff_content)
|
86
|
-
|
87
|
-
return {
|
88
|
-
"success": True,
|
89
|
-
"stdout": {
|
90
|
-
"commit_info": commit_info,
|
91
|
-
"diff_content": diff_content,
|
92
|
-
"analysis_result": analysis_result,
|
93
|
-
},
|
94
|
-
"stderr": "",
|
95
|
-
}
|
96
|
-
except subprocess.CalledProcessError as error:
|
97
|
-
return {
|
98
|
-
"success": False,
|
99
|
-
"stdout": {},
|
100
|
-
"stderr": f"Failed to analyze commit: {str(error)}",
|
101
|
-
}
|
102
|
-
finally:
|
103
|
-
os.chdir(original_dir)
|
104
|
-
|
105
|
-
def analyze_commit_range(self, commit_range: str, root_dir: str) -> Dict[str, Any]:
|
106
|
-
"""分析两个commit之间的代码变更
|
107
|
-
|
108
|
-
Args:
|
109
|
-
commit_range: 两个commit的SHA范围,格式为"commit1..commit2"
|
110
|
-
root_dir: 代码库根目录
|
111
|
-
|
112
|
-
Returns:
|
113
|
-
包含分析结果的字典
|
114
|
-
"""
|
115
|
-
original_dir = os.getcwd()
|
116
|
-
try:
|
117
|
-
os.chdir(root_dir)
|
118
|
-
|
119
|
-
# 获取commit范围差异
|
120
|
-
diff_content = subprocess.check_output(
|
121
|
-
f"git diff {commit_range} --patch", shell=True, text=True
|
122
|
-
)
|
123
|
-
|
124
|
-
# 获取commit范围信息
|
125
|
-
commit_info = subprocess.check_output(
|
126
|
-
f"git log {commit_range} --pretty=fuller", shell=True, text=True
|
127
|
-
)
|
128
|
-
|
129
|
-
# 使用相同的分析方法处理差异内容
|
130
|
-
analysis_result = self._analyze_diff_content(diff_content)
|
131
|
-
|
132
|
-
return {
|
133
|
-
"success": True,
|
134
|
-
"stdout": {
|
135
|
-
"commit_info": commit_info,
|
136
|
-
"diff_content": diff_content,
|
137
|
-
"analysis_result": analysis_result,
|
138
|
-
},
|
139
|
-
"stderr": "",
|
140
|
-
}
|
141
|
-
except subprocess.CalledProcessError as error:
|
142
|
-
return {
|
143
|
-
"success": False,
|
144
|
-
"stdout": {},
|
145
|
-
"stderr": f"Failed to analyze commit range: {str(error)}",
|
146
|
-
}
|
147
|
-
finally:
|
148
|
-
os.chdir(original_dir)
|
149
|
-
|
150
|
-
def _analyze_diff_content(self, diff_content: str) -> str:
|
151
|
-
"""分析diff内容并生成报告
|
152
|
-
|
153
|
-
Args:
|
154
|
-
diff_content: git diff或git show的输出内容
|
155
|
-
|
156
|
-
Returns:
|
157
|
-
分析结果字符串
|
158
|
-
"""
|
159
|
-
system_prompt = """你是一位资深代码分析专家,拥有多年代码审查和重构经验。你需要对Git commit进行深入分析,包括:
|
160
|
-
1. 修改的功能:明确说明本次commit实现或修改了哪些功能
|
161
|
-
2. 修改的原因:分析为什么要进行这些修改(如修复bug、优化性能、添加新功能等)
|
162
|
-
3. 修改的逻辑:详细说明代码修改的具体实现逻辑和思路
|
163
|
-
4. 影响范围:评估本次修改可能影响的其他模块或功能
|
164
|
-
5. 代码质量:分析代码风格、可读性和可维护性
|
165
|
-
6. 测试覆盖:评估是否需要添加或修改测试用例
|
166
|
-
7. 最佳实践:检查代码是否符合行业最佳实践和项目规范
|
167
|
-
|
168
|
-
请确保分析内容:
|
169
|
-
- 准确反映commit的实际修改
|
170
|
-
- 提供足够的技术细节
|
171
|
-
- 保持结构清晰,便于理解
|
172
|
-
- 重点关注关键修改和潜在风险"""
|
173
|
-
|
174
|
-
tool_registry = ToolRegistry()
|
175
|
-
agent = Agent(
|
176
|
-
system_prompt=system_prompt,
|
177
|
-
name="Commit Analysis Agent",
|
178
|
-
summary_prompt=f"""请生成一份详细的commit分析报告,包含以下内容:
|
179
|
-
{ot("REPORT")}
|
180
|
-
# 功能分析
|
181
|
-
[说明本次commit实现或修改了哪些功能]
|
182
|
-
|
183
|
-
# 修改原因
|
184
|
-
[分析进行这些修改的原因,如修复bug、优化性能、添加新功能等]
|
185
|
-
|
186
|
-
# 实现逻辑
|
187
|
-
[详细说明代码修改的具体实现逻辑和思路]
|
188
|
-
|
189
|
-
# 影响范围
|
190
|
-
[评估本次修改可能影响的其他模块或功能]
|
191
|
-
|
192
|
-
# 代码质量
|
193
|
-
[分析代码风格、可读性和可维护性]
|
194
|
-
|
195
|
-
# 测试覆盖
|
196
|
-
[评估是否需要添加或修改测试用例]
|
197
|
-
|
198
|
-
# 最佳实践
|
199
|
-
[检查代码是否符合行业最佳实践和项目规范]
|
200
|
-
{ct("REPORT")}""",
|
201
|
-
output_handler=[tool_registry],
|
202
|
-
llm_type="normal",
|
203
|
-
auto_complete=True,
|
204
|
-
)
|
205
|
-
|
206
|
-
return agent.run(diff_content)
|
207
|
-
|
208
|
-
|
209
|
-
def extract_analysis_report(result: str) -> str:
|
210
|
-
"""从分析结果中提取报告内容
|
211
|
-
|
212
|
-
Args:
|
213
|
-
result: 包含REPORT标签的完整分析结果字符串
|
214
|
-
|
215
|
-
Returns:
|
216
|
-
提取的报告内容,如果未找到REPORT标签则返回空字符串
|
217
|
-
"""
|
218
|
-
search_match = re.search(
|
219
|
-
ot("REPORT") + r"\n(.*?)\n" + ct("REPORT"), result, re.DOTALL
|
220
|
-
)
|
221
|
-
if search_match:
|
222
|
-
return search_match.group(1)
|
223
|
-
return result
|
224
|
-
|
225
|
-
|
226
|
-
def main():
|
227
|
-
"""主函数,用于命令行接口"""
|
228
|
-
import argparse
|
229
|
-
|
230
|
-
init_env("欢迎使用 Jarvis-GitCommitAnalyzer,您的Git Commit分析助手已准备就绪!")
|
231
|
-
|
232
|
-
parser = argparse.ArgumentParser(description="Git Commit Analyzer")
|
233
|
-
group = parser.add_mutually_exclusive_group(required=True)
|
234
|
-
group.add_argument("commit", nargs="?", help="Commit SHA to analyze")
|
235
|
-
group.add_argument(
|
236
|
-
"--range", type=str, help="Commit range to analyze (commit1..commit2)"
|
237
|
-
)
|
238
|
-
parser.add_argument(
|
239
|
-
"--root-dir", type=str, help="Root directory of the codebase", default="."
|
240
|
-
)
|
241
|
-
|
242
|
-
args = parser.parse_args()
|
243
|
-
|
244
|
-
analyzer = GitCommitAnalyzer()
|
245
|
-
if args.range:
|
246
|
-
result = analyzer.execute(
|
247
|
-
{"commit_range": args.range, "root_dir": args.root_dir}
|
248
|
-
)
|
249
|
-
else:
|
250
|
-
result = analyzer.execute(
|
251
|
-
{"commit_sha": args.commit, "root_dir": args.root_dir}
|
252
|
-
)
|
253
|
-
|
254
|
-
if result["success"]:
|
255
|
-
PrettyOutput.section("Commit Information:", OutputType.SUCCESS)
|
256
|
-
PrettyOutput.print(result["stdout"]["commit_info"], OutputType.CODE)
|
257
|
-
PrettyOutput.section("Analysis Report:", OutputType.SUCCESS)
|
258
|
-
report = extract_analysis_report(result["stdout"]["analysis_result"])
|
259
|
-
PrettyOutput.print(report, OutputType.SUCCESS, lang="markdown")
|
260
|
-
else:
|
261
|
-
PrettyOutput.print(result["stderr"], OutputType.WARNING)
|
262
|
-
|
263
|
-
|
264
|
-
if __name__ == "__main__":
|
265
|
-
main()
|