jarvis-ai-assistant 0.1.179__py3-none-any.whl → 0.1.181__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.

Potentially problematic release.


This version of jarvis-ai-assistant might be problematic. Click here for more details.

@@ -1,4 +1,4 @@
1
- jarvis/__init__.py,sha256=AHtR6TjwF1QgHEj70zUFmweOTTTW-KN1Gtvw7DOSA9k,74
1
+ jarvis/__init__.py,sha256=dgQhg6Gd7pGul0ij7e_dHnY6CjyGHRhshKt8hag08qo,74
2
2
  jarvis/jarvis_agent/__init__.py,sha256=9vyME5JbA4koVoqJ_zv5N9eNdvu6iBkB4o4a1CmkVgA,30054
3
3
  jarvis/jarvis_agent/builtin_input_handler.py,sha256=f4DaEHPakXcAbgykFP-tiOQP6fh_yGFlZx_h91_j2tQ,1529
4
4
  jarvis/jarvis_agent/jarvis.py,sha256=UkNMVUlSNKV6y3v12eAhqc_gIDB6Obxrwk5f7-sQeiQ,6137
@@ -6,7 +6,7 @@ jarvis/jarvis_agent/main.py,sha256=GkjMTIbsd56nkVuRwD_tU_PZWyzixZZhMjVOCd0SzOA,2
6
6
  jarvis/jarvis_agent/output_handler.py,sha256=7qori-RGrQmdiFepoEe3oPPKJIvRt90l_JDmvCoa4zA,1219
7
7
  jarvis/jarvis_agent/shell_input_handler.py,sha256=pi3AtPKrkKc6K9e99S1djKXQ_XrxtP6FrSWebQmRT6E,1261
8
8
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- jarvis/jarvis_code_agent/code_agent.py,sha256=jEJhPk4Eg-2hsDYeIa2NOfk2YnuvhuPrLCtVHm5hTPg,17879
9
+ jarvis/jarvis_code_agent/code_agent.py,sha256=IHUDqZ2RvJFoYIUuJAVCsbEOtYPHwXLfrmPXnpxKjvU,15721
10
10
  jarvis/jarvis_code_agent/lint.py,sha256=TZlhNbeaoLzO9DzExjN5GAjrt66owd8lyQV56LTfkrs,4370
11
11
  jarvis/jarvis_code_analysis/code_review.py,sha256=SEK5NOGDWgMNX3zmRMWrIOtq3Xr8cKt_asG51U8h6SA,30219
12
12
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=cKQ_FOGy5TQgM-YkRCqORo-mUOZaPAJ9VDmZoFX58us,78
@@ -29,14 +29,15 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=IXQkWHwA-4GUQz3WUs7l6hEy7
29
29
  jarvis/jarvis_code_analysis/checklists/sql.py,sha256=ecKKT6wJAibn8R0NxGZDNlm4teYXvF3CAJvVk8mmX7w,2355
30
30
  jarvis/jarvis_code_analysis/checklists/swift.py,sha256=YcsYFxAitHqOtBZjG-RV9-KNM7X5lIcl6zlEI9XfmfM,2566
31
31
  jarvis/jarvis_code_analysis/checklists/web.py,sha256=-Pnj1FQTsGVZUQK7-4ptDsGd7a22Cs0585jRAPT2SdQ,3943
32
+ jarvis/jarvis_data/config_schema.json,sha256=Jx9RPeVdkV7xgGro-5B8MFpVDLFmI80d_deLNMiTSgM,6398
32
33
  jarvis/jarvis_data/huggingface.tar.gz,sha256=dWKnc_tvyx-I_ZkXo91O0b38KxDmLW1ZbmJ3E6fCl_k,1120205
33
- jarvis/jarvis_dev/main.py,sha256=RJ7Z7_qX6ENKrlgjlz7tMfpBTh9g22mGqcasWCv5ygw,42710
34
+ jarvis/jarvis_dev/main.py,sha256=b-Sa5i5T3lcazg4GIMnECsZ3L9zTs7QCg_voWE4K0I8,40642
34
35
  jarvis/jarvis_event/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
36
  jarvis/jarvis_git_details/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
37
  jarvis/jarvis_git_details/main.py,sha256=MfR7feVVQ7Eo9eZk-wO2bFypnA6uRrYUQn6iTeoF0Os,9007
37
38
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
39
  jarvis/jarvis_git_squash/main.py,sha256=q8-r0TtVOaCqY_uYwnWAY76k8YCDd5se_feB6ZWKo9M,2278
39
- jarvis/jarvis_git_utils/git_commiter.py,sha256=GuUHL0crFZ1QE8MKYr4zAdRd0Y3YnW-C_k_PbokuiX4,12964
40
+ jarvis/jarvis_git_utils/git_commiter.py,sha256=RMI1VunK643CS6vL5ZD3ehXr4LbhPKRspzagV8AcPIY,12984
40
41
  jarvis/jarvis_mcp/__init__.py,sha256=NF_vqRxaNyz8ColcpRh0bOkinV90YLAKHEN--jkP-B8,2114
41
42
  jarvis/jarvis_mcp/sse_mcp_client.py,sha256=QNA7HqFvLbvhNaFp3ZsXzs2Rm6_gHUMcpd4t4qAzymY,23485
42
43
  jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=IEkas4ojP5J0TdVaUglvlEp61RyezBtuejv4lN3n1I4,11831
@@ -45,54 +46,52 @@ jarvis/jarvis_methodology/main.py,sha256=HhEArlKI5PCpGnBCwVrXMuDn2z84LgpgK7-aGSQ
45
46
  jarvis/jarvis_multi_agent/__init__.py,sha256=Xab5sFltJmX_9MoXqanmZs6FqKfUb2v_pG29Vk8ZXaw,4311
46
47
  jarvis/jarvis_multi_agent/main.py,sha256=KeGv8sdpSgTjW6VE4-tQ8BWDC_a0aE_4R3OqzPBd5N4,1646
47
48
  jarvis/jarvis_platform/__init__.py,sha256=0YnsUoM4JkIBOtImFdjfuDbrqQZT3dEaAwSJ62DrpCc,104
48
- jarvis/jarvis_platform/base.py,sha256=EyZOl98rpYUX1yISDFvj1ztrYfWIT2ozenwUIZ7TyyI,6972
49
+ jarvis/jarvis_platform/base.py,sha256=HbE7BVh8F5F38rr9K9281h6Q11XyWgDGzyPXe-e_Th0,7086
49
50
  jarvis/jarvis_platform/human.py,sha256=xwaTZ1zdrAYZZFXxkbHvUdECwCGsic0kgAFUncUr45g,2567
50
- jarvis/jarvis_platform/kimi.py,sha256=kkYWmJoOIT-7tp5_v2LaQGUFsEuCftfma3Ztn1P4CKo,13111
51
- jarvis/jarvis_platform/openai.py,sha256=k1h_FLCd-nqvBFUBDJC_eNjSMohh5huWRJcMe1RLrHQ,5588
51
+ jarvis/jarvis_platform/kimi.py,sha256=k0dYwuRf-snmJF206D7inahUcZUZG0VqOmhphj09NzQ,11969
52
+ jarvis/jarvis_platform/openai.py,sha256=VyX3bR1rGxrJdWOtUBf8PgSL9n06KaNbOewL1urzOnk,4741
52
53
  jarvis/jarvis_platform/registry.py,sha256=CxAELjDrc-KKPPKdP71E_qaFisfQztvwc_tdf3WpOt8,7863
53
- jarvis/jarvis_platform/yuanbao.py,sha256=giuHCDSAhVlaUykoN5D6oZ0DtYu81zMpVHnMepFkt_I,21672
54
+ jarvis/jarvis_platform/yuanbao.py,sha256=vKb6oy5cTMQCwqcqpaVur7BFtQwX1Cv-mYnswP-L4mA,20291
54
55
  jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
56
  jarvis/jarvis_platform_manager/main.py,sha256=OXWj18SqiV0Gl75YT6D9wspCCB4Nes04EY-ShI9kbpU,25677
56
57
  jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- jarvis/jarvis_smart_shell/main.py,sha256=CaqAXPk1XW3ruQf2AJjdeZBhqD2xh09KvG3TM0o6-aw,5209
58
+ jarvis/jarvis_smart_shell/main.py,sha256=k59o5UD7merbsPhJQzae95ThTmZY2EcNHB3Ov6kb0PA,5291
58
59
  jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
- jarvis/jarvis_tools/ask_codebase.py,sha256=FYlrbiN5PjxS4hGvCjN8idF6YnESDH6NLBgQguSnG48,10145
60
60
  jarvis/jarvis_tools/ask_user.py,sha256=qwxwJIL698rEWdi1txxlPgIr4UFuihfe--NqBEYhIQQ,2168
61
61
  jarvis/jarvis_tools/base.py,sha256=OdlvzUjYQBmZIMcAeBxAqIQo2urh126OerArK-wOPzU,1191
62
62
  jarvis/jarvis_tools/chdir.py,sha256=DNKVFrWqu6t_sZ2ipv99s6802QR4cSGlqKlmaI--arE,2707
63
- jarvis/jarvis_tools/code_plan.py,sha256=pfGOX3fH4-Gg2ECuJkjGpnRtHXEhlVWLV8ZVJAEKmwk,7755
63
+ jarvis/jarvis_tools/code_plan.py,sha256=gWR0lzY62x2PxWKoMRBqW6jq7zQuO8vhpjC4TcHSYjk,7685
64
64
  jarvis/jarvis_tools/create_code_agent.py,sha256=-nHfo5O5pDIG5IX3w1ClQafGvGcdI2_w75-KGrD-gUQ,3458
65
65
  jarvis/jarvis_tools/create_sub_agent.py,sha256=lyFrrg4V0yXULmU3vldwGp_euZjwZzJcRU6mJ20zejY,3023
66
- jarvis/jarvis_tools/edit_file.py,sha256=50OZSdR6bJM7eMh5KCI2pOI5WV7ofUeMh7-ABCKulXY,16249
67
- jarvis/jarvis_tools/execute_script.py,sha256=yQpc90t678UGbkr-ycGeB7jwqmY7GWWbtFtmcAI0-d4,5739
66
+ jarvis/jarvis_tools/edit_file.py,sha256=OiTP50yaUE-WTSKnp8axo96OfddHufWKpGuEa6YRG30,16269
67
+ jarvis/jarvis_tools/execute_script.py,sha256=IA1SkcnwBB9PKG2voBNx5N9GXL303OC7OOtdqRfqWOk,6428
68
68
  jarvis/jarvis_tools/file_analyzer.py,sha256=7ILHkUFm8pPZn1y_s4uT0kaWHP-EmlHnpkovDdA1yRE,4872
69
69
  jarvis/jarvis_tools/file_operation.py,sha256=RcOKuMFUv01tvKoiOfu1ERCjvDVfJBvkT4oBpq-8vNQ,9036
70
- jarvis/jarvis_tools/find_methodology.py,sha256=P1IJU2x9yBoOK-X5TTvzC9Lfa1i6ES3eZn5kjEpWGdA,2440
71
70
  jarvis/jarvis_tools/generate_new_tool.py,sha256=k1Vt88kI1bYi1OwxvJqFKr3Ewwwv7lOegYNmZ-1F7x0,10283
72
71
  jarvis/jarvis_tools/methodology.py,sha256=m7cQmVhhQpUUl_uYTVvcW0JBovQLx5pWTXh_8K77HsU,5237
73
72
  jarvis/jarvis_tools/read_code.py,sha256=j4niDMOAKW_3rVxmOo3wxYBQ2T8vkxqEiTkBt28gUT8,5898
74
73
  jarvis/jarvis_tools/read_webpage.py,sha256=PFAYuKjay9j6phWzyuZ99ZfNaHJljmRWAgS0bsvbcvE,2219
75
- jarvis/jarvis_tools/registry.py,sha256=emAX3DjdWcluthEVSHKs1W5ieKtvaKr2uM2DIlEErHQ,24417
74
+ jarvis/jarvis_tools/registry.py,sha256=WvYPiaUrleFqeXvwRkxM-6TNs1sWm61mpg1MFVo_kas,25113
76
75
  jarvis/jarvis_tools/rewrite_file.py,sha256=3V2l7kG5DG9iRimBce-1qCRuJPL0QM32SBTzOl2zCqM,7004
77
76
  jarvis/jarvis_tools/search_web.py,sha256=rzxrCOTEo-MmLQrKI4k-AbfidUfJUeCPK4f5ZJy48G8,952
78
77
  jarvis/jarvis_tools/virtual_tty.py,sha256=8E_n-eC-RRPTqYx6BI5Q2RnorY8dbhKFBfAjIiRQROA,16397
79
78
  jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
79
  jarvis/jarvis_tools/cli/main.py,sha256=3UuU9tk5cQAS0rfNPXgdtnAd5uDB7v0Exo0_I9sJHRE,6355
81
80
  jarvis/jarvis_utils/__init__.py,sha256=x5lbQRH1uOulmWr1IEqNMLXNmDHbqQQot7d1uhKFg4M,851
82
- jarvis/jarvis_utils/builtin_replace_map.py,sha256=Cx0HFvMmDkkYR9htSS-PCCd8D0Np7yRm2g-C1J2-u08,4314
83
- jarvis/jarvis_utils/config.py,sha256=5Fouj2RgzsktxptociwJcaXYCcoVctJS3x5CQWRab5I,5684
81
+ jarvis/jarvis_utils/builtin_replace_map.py,sha256=n4gBUwAJDABUhQu9qIiIHWNfPk_T7chfNk5ygCiOPtE,2931
82
+ jarvis/jarvis_utils/config.py,sha256=2STTlI2Acy5TMHhLEZaz44MDsY4W9qSThI6tbwg7iSg,7105
84
83
  jarvis/jarvis_utils/embedding.py,sha256=J8YAqIEj16TJIPEG24uvUlPHeN-5zq0JW_hbNLizQug,3832
85
84
  jarvis/jarvis_utils/file_processors.py,sha256=G5kQI7vCGIDnjgAB5J1dYIR102u6WUv3IhcWFfDh_gs,2977
86
- jarvis/jarvis_utils/git_utils.py,sha256=XJ42U3eVNI5QV7onGbTYlJY-XWdLFSLnQ5QMaonQDSI,12312
85
+ jarvis/jarvis_utils/git_utils.py,sha256=k0rrMAbKwnD7hztmtegxtFFiCzyID4p2oHKTycE2Q-4,15070
87
86
  jarvis/jarvis_utils/globals.py,sha256=6JWtB1XoD-wEFiMzZNA790ixlZ_OsJEYUM_B8EwkOE8,2277
88
87
  jarvis/jarvis_utils/input.py,sha256=FkLW7MXL8awQUghFLQnW1r5F1wV8K3EZeVPwHFRHJTo,7458
89
88
  jarvis/jarvis_utils/methodology.py,sha256=A8pE8ZqNHvGKaDO4TFtg7Oz-hAXPBcQfhmSPWMr6vdg,8629
90
89
  jarvis/jarvis_utils/output.py,sha256=QboL42GtG_dnvd1O64sl8o72mEBhXNRADPXQMXgDE7Q,9661
91
90
  jarvis/jarvis_utils/tag.py,sha256=YJHmuedLb7_AiqvKQetHr4R1FxyzIh7HN0RRkWMmYbU,429
92
- jarvis/jarvis_utils/utils.py,sha256=XV-9T8yqThuo0aXkA7BOfBVt1YMUwkyIKeuvK2oDujM,8471
93
- jarvis_ai_assistant-0.1.179.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
94
- jarvis_ai_assistant-0.1.179.dist-info/METADATA,sha256=wospENCawSz6yu0ulALwAbZcY5VtG03oV2N-nOI08PM,15200
95
- jarvis_ai_assistant-0.1.179.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
96
- jarvis_ai_assistant-0.1.179.dist-info/entry_points.txt,sha256=rjj61tZ7ahLi1R-JkJmX-IzIPPHD8mnwDZap1CnMe2s,973
97
- jarvis_ai_assistant-0.1.179.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
98
- jarvis_ai_assistant-0.1.179.dist-info/RECORD,,
91
+ jarvis/jarvis_utils/utils.py,sha256=atSK-2cUr7_tOIFsQzJnuQxebi7aFN4jtmaoXEaV4jM,10692
92
+ jarvis_ai_assistant-0.1.181.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
93
+ jarvis_ai_assistant-0.1.181.dist-info/METADATA,sha256=0rpJwI0H5WiJsTHHQgmWeyeM7P4RZ7ei_L-Tnzt5ktI,15059
94
+ jarvis_ai_assistant-0.1.181.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
95
+ jarvis_ai_assistant-0.1.181.dist-info/entry_points.txt,sha256=Gy3DOP1PYLMK0GCj4rrP_9lkOyBQ39EK_lKGUSwn41E,869
96
+ jarvis_ai_assistant-0.1.181.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
97
+ jarvis_ai_assistant-0.1.181.dist-info/RECORD,,
@@ -1,8 +1,6 @@
1
1
  [console_scripts]
2
- jac = jarvis.jarvis_tools.ask_codebase:main
3
2
  jarvis = jarvis.jarvis_agent.jarvis:main
4
3
  jarvis-agent = jarvis.jarvis_agent.main:main
5
- jarvis-ask-codebase = jarvis.jarvis_tools.ask_codebase:main
6
4
  jarvis-code-agent = jarvis.jarvis_code_agent.code_agent:main
7
5
  jarvis-code-review = jarvis.jarvis_code_analysis.code_review:main
8
6
  jarvis-dev = jarvis.jarvis_dev.main:main
@@ -1,294 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- import os
3
- from typing import Any, Dict
4
-
5
- from jarvis.jarvis_agent import Agent
6
- from jarvis.jarvis_platform.registry import PlatformRegistry
7
- from jarvis.jarvis_utils.git_utils import find_git_root
8
- from jarvis.jarvis_utils.output import OutputType, PrettyOutput
9
- from jarvis.jarvis_utils.utils import init_env
10
-
11
-
12
- class AskCodebaseTool:
13
- """用于智能代码库查询和分析的工具
14
-
15
- 适用场景:
16
- - 查询特定功能所在的文件位置(支持所有文件类型)
17
- - 了解单个功能点的实现原理(支持所有文件类型)
18
- - 查找特定API或接口的用法(支持所有文件类型)
19
-
20
- 不适用场景:
21
- - 跨越多文件的大范围分析
22
- - 复杂系统架构的全面评估
23
- - 需要深入上下文理解的代码重构
24
- """
25
-
26
- name = "ask_codebase"
27
- description = "查询代码库中特定功能的位置和实现原理,适合定位功能所在文件和理解单点实现"
28
- labels = ['code', 'analysis', 'qa']
29
- parameters = {
30
- "type": "object",
31
- "properties": {
32
- "question": {
33
- "type": "string",
34
- "description": "关于代码库的问题,例如'登录功能在哪个文件实现?'或'如何实现了JWT验证?'"
35
- },
36
- "root_dir": {
37
- "type": "string",
38
- "description": "代码库根目录路径(可选)",
39
- "default": "."
40
- }
41
- },
42
- "required": ["question"]
43
- }
44
-
45
- def __init__(self, auto_complete: bool = True):
46
- self.auto_complete = auto_complete
47
-
48
- def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:
49
- """Execute codebase analysis using an Agent with execute_script
50
-
51
- Args:
52
- args: Dictionary containing:
53
- - question: The question to answer, preferably about locating functionality
54
- or understanding implementation details of a specific feature
55
- - top_k: Optional number of files to analyze
56
- - root_dir: Optional root directory of the codebase
57
-
58
- Returns:
59
- Dict containing:
60
- - success: Boolean indicating success
61
- - stdout: Analysis result
62
- - stderr: Error message if any
63
-
64
- Note:
65
- This tool works best for focused questions about specific features or implementations.
66
- It is not designed for comprehensive multi-file analysis or complex architectural questions.
67
- """
68
- try:
69
- question = args["question"]
70
- root_dir = args.get("root_dir", ".")
71
-
72
- # Store current directory
73
- original_dir = os.getcwd()
74
-
75
- try:
76
- # Change to root_dir
77
- os.chdir(root_dir)
78
-
79
- # Get git root directory
80
- git_root = find_git_root() or os.getcwd()
81
-
82
- # Create system prompt for the Agent
83
- system_prompt = self._create_system_prompt(question, git_root)
84
-
85
- # Create summary prompt for the Agent
86
- summary_prompt = self._create_summary_prompt(question)
87
-
88
- # Create tools registry
89
- from jarvis.jarvis_tools.registry import ToolRegistry
90
- tool_registry = ToolRegistry()
91
- tool_registry.use_tools(["execute_script", "read_code", "methodology"])
92
-
93
- # Create and run Agent
94
- analyzer_agent = Agent(
95
- system_prompt=system_prompt,
96
- name=f"CodebaseAnalyzer",
97
- description=f"分析代码库中的功能实现和定位",
98
- summary_prompt=summary_prompt,
99
- platform=PlatformRegistry().get_thinking_platform(),
100
- output_handler=[tool_registry],
101
- execute_tool_confirm=False,
102
- auto_complete=self.auto_complete
103
- )
104
-
105
- # Run agent and get result
106
- task_input = f"回答关于代码库的问题: {question}"
107
- result = analyzer_agent.run(task_input)
108
-
109
- return {
110
- "success": True,
111
- "stdout": result,
112
- "stderr": ""
113
- }
114
- finally:
115
- # Always restore original directory
116
- os.chdir(original_dir)
117
- except Exception as e:
118
- error_msg = f"分析代码库失败: {str(e)}"
119
- PrettyOutput.print(error_msg, OutputType.WARNING)
120
- return {
121
- "success": False,
122
- "stdout": "",
123
- "stderr": error_msg
124
- }
125
-
126
- def _create_system_prompt(self, question: str, git_root: str) -> str:
127
- """创建Agent的system prompt
128
-
129
- Args:
130
- question: 用户问题
131
- git_root: Git仓库根目录
132
-
133
- Returns:
134
- 系统提示文本
135
- """
136
- return f"""# 代码库分析专家
137
-
138
- ## 任务描述
139
- 分析代码库,找出与用户问题最相关的信息,提供准确、具体的回答。
140
-
141
- ## 问题信息
142
- - 问题: {question}
143
- - 代码库根目录: {git_root}
144
-
145
- ## 工具使用优先级
146
- 1. **绝对优先使用 execute_script**:
147
- - 使用 fd 查找文件: `fd -t f -e py` 查找Python文件等
148
- - 使用 rg 搜索代码: `rg "pattern" --type py` 在Python文件中搜索等
149
- - 使用 loc 统计代码: `loc"` 统计代码量
150
-
151
- 2. **优先使用 read_code**:
152
- - 找到相关文件后优先使用read_code读取文件内容
153
- - 对大文件使用行范围参数读取指定区域
154
-
155
- ## 分析策略
156
- 1. 首先理解问题,确定需要查找的关键信息和代码组件
157
- 2. 使用fd命令查找可能相关的文件
158
- 3. 使用rg命令搜索关键词和代码模式
159
- 4. 使用read_code工具直接读取和分析相关文件内容
160
- 5. 根据文件内容提供具体、准确的回答
161
- 6. 确保分析的完整性,收集充分的信息后再得出结论,不要在只掌握部分信息就得出结论
162
- 7. 优先查阅README文件、文档目录和项目文档
163
- 8. 给出的任意结论都要有实际的代码支撑,不能假设和杜撰
164
-
165
- ## 分析步骤
166
- 1. **确定项目的编程语言**:
167
- - 使用loc命令: `loc` 统计各类文件数量
168
- - 查看构建文件和配置文件
169
- - 了解项目使用的框架和主要依赖
170
-
171
- 2. **探索代码库结构**:
172
- - 使用 `fd -t d` 了解目录结构
173
- - 使用 `fd README.md` 查找README文件
174
- - 使用 `fd -e md -g "doc*"` 查找文档文件
175
-
176
- 3. **定位相关文件**:
177
- - 使用fd和rg命令查找关键词
178
- - 示例: `rg -w "登录|login" --type py` 查找登录相关代码
179
- - 示例: `fd -e py -g "*auth*"` 查找认证相关文件
180
-
181
- 4. **深入分析代码**:
182
- - 使用read_code工具直接读取文件内容
183
- - 分析关键文件的实现细节
184
- - 使用rg识别功能的实现方式和关键逻辑
185
-
186
- 5. **回答问题**:
187
- - 提供基于直接分析代码的具体回答
188
- - 引用具体文件和代码片段作为依据
189
-
190
- ## 输出要求
191
- - 提供准确、具体的回答,避免模糊不清的描述
192
- - 引用具体文件路径和代码片段作为依据
193
- - 如果无法找到答案,明确说明并提供原因
194
- - 组织信息的逻辑清晰,便于理解
195
- - 对复杂概念提供简明解释
196
- - 确保全面收集相关信息后再形成结论
197
- - 明确区分已验证的信息和待验证的信息"""
198
-
199
- def _create_summary_prompt(self, question: str) -> str:
200
- """创建Agent的summary prompt
201
-
202
- Args:
203
- question: 用户问题
204
-
205
- Returns:
206
- 总结提示文本
207
- """
208
- return f"""# 代码库分析报告
209
-
210
- ## 报告要求
211
- 生成关于以下问题的清晰、准确的分析报告:
212
-
213
- **问题**: {question}
214
-
215
- 报告应包含:
216
-
217
- 1. **项目基本信息**:
218
- - 项目的主要编程语言和技术栈
219
- - 项目的主要框架和依赖
220
- - 项目的基本结构
221
-
222
- 2. **问题回答**:
223
- - 直接、具体地回答问题
224
- - 基于代码库中的实际代码
225
- - 避免模糊或推测性的回答
226
-
227
- 3. **核心发现**:
228
- - 相关文件和代码位置
229
- - 关键实现细节
230
- - 功能运作机制
231
-
232
- 4. **证据引用**:
233
- - 引用具体文件路径
234
- - 包含关键代码片段
235
- - 解释代码如何支持你的回答
236
-
237
- 5. **局限性**(如有):
238
- - 指出分析的任何局限
239
- - 说明任何无法确定的信息
240
-
241
- 6. **分析完整性**:
242
- - 确保在得出结论前已全面收集和分析相关信息
243
- - 避免基于部分信息形成不完整或偏颇的判断
244
- - 明确标识哪些是已确认的结论,哪些可能需要进一步验证
245
-
246
- 使用清晰的Markdown格式,重点突出对问题的回答和支持证据。"""
247
-
248
-
249
- def main():
250
- """
251
- 命令行入口点,允许将ask_codebase作为独立脚本运行
252
-
253
- 用法示例:
254
- ```
255
- python -m jarvis.jarvis_tools.ask_codebase "登录功能在哪个文件实现?" --root_dir /path/to/codebase
256
- ```
257
- 如果没有提供问题参数,则会进入交互式多行输入模式
258
- """
259
- import argparse
260
- import sys
261
-
262
- from jarvis.jarvis_utils.input import get_multiline_input
263
-
264
- init_env("欢迎使用 Jarvis-AskCodebase,您的智能代码库查询工具已准备就绪!")
265
-
266
- # 创建命令行参数解析器
267
- parser = argparse.ArgumentParser(description="智能代码库查询工具")
268
- parser.add_argument("question", nargs="?", help="关于代码库的问题")
269
- parser.add_argument("--root_dir", "-d", default=".", help="代码库根目录路径")
270
-
271
- # 解析命令行参数
272
- args = parser.parse_args()
273
-
274
- # 如果没有提供问题参数,使用多行输入
275
- if not args.question:
276
- args.question = get_multiline_input("请输入关于代码库的问题:")
277
-
278
- # 创建并执行工具
279
- tool = AskCodebaseTool(auto_complete=False)
280
- result = tool.execute({
281
- "question": args.question,
282
- "root_dir": args.root_dir
283
- })
284
-
285
- # 输出结果
286
- if result["success"]:
287
- PrettyOutput.print(result["stdout"], OutputType.SUCCESS)
288
- else:
289
- PrettyOutput.print(result["stderr"], OutputType.WARNING)
290
- sys.exit(1)
291
-
292
-
293
- if __name__ == "__main__":
294
- main()
@@ -1,73 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- from typing import Any, Dict
3
-
4
- from yaspin import yaspin
5
-
6
- from jarvis.jarvis_utils.methodology import load_methodology
7
- from jarvis.jarvis_utils.output import OutputType, PrettyOutput
8
-
9
-
10
- class FindMethodologyTool:
11
- name = "find_methodology"
12
- description = "方法论查找工具,用于在执行过程中查看历史方法论辅助决策"
13
- parameters = {
14
- "type": "object",
15
- "properties": {
16
- "query": {
17
- "type": "string",
18
- "description": "要搜索的查询文本"
19
- }
20
- },
21
- "required": ["query"]
22
- }
23
-
24
- def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:
25
- """执行方法论查找操作
26
-
27
- Args:
28
- args (Dict): 包含查询文本的参数字典
29
-
30
- Returns:
31
- Dict[str, Any]: 包含成功状态、输出内容和错误信息的字典
32
- """
33
- try:
34
- if "query" not in args:
35
- return {
36
- "success": False,
37
- "stdout": "",
38
- "stderr": "参数中必须包含查询文本"
39
- }
40
-
41
- agent = args.get("agent", None)
42
-
43
- tool_registry = agent.get_tool_registry() if agent else None
44
-
45
- with yaspin(text="搜索相关方法论...", color="cyan") as spinner:
46
- with spinner.hidden():
47
- methodology_prompt = load_methodology(args["query"], tool_registry)
48
-
49
- if methodology_prompt:
50
- spinner.text = "找到相关方法论"
51
- spinner.ok("✅")
52
- PrettyOutput.print(methodology_prompt, OutputType.INFO)
53
- return {
54
- "success": True,
55
- "stdout": methodology_prompt,
56
- "stderr": ""
57
- }
58
- else:
59
- spinner.text = "未找到相关方法论"
60
- spinner.fail("❌")
61
- return {
62
- "success": True,
63
- "stdout": "未找到相关的方法论",
64
- "stderr": ""
65
- }
66
-
67
- except Exception as e:
68
- PrettyOutput.print(str(e), OutputType.ERROR)
69
- return {
70
- "success": False,
71
- "stdout": "",
72
- "stderr": f"方法论查找失败: {str(e)}"
73
- }