jarvis-ai-assistant 0.1.179__tar.gz → 0.1.181__tar.gz

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.

Files changed (106) hide show
  1. {jarvis_ai_assistant-0.1.179/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.181}/PKG-INFO +45 -51
  2. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/README.md +43 -50
  3. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/pyproject.toml +2 -3
  4. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/setup.py +6 -4
  5. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/__init__.py +1 -1
  6. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_agent/code_agent.py +34 -106
  7. jarvis_ai_assistant-0.1.181/src/jarvis/jarvis_data/config_schema.json +230 -0
  8. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_dev/main.py +66 -112
  9. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_git_utils/git_commiter.py +1 -1
  10. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_platform/base.py +4 -2
  11. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_platform/kimi.py +0 -22
  12. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_platform/openai.py +0 -15
  13. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_platform/yuanbao.py +0 -24
  14. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_smart_shell/main.py +6 -3
  15. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/code_plan.py +1 -3
  16. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/edit_file.py +1 -1
  17. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/execute_script.py +31 -8
  18. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/registry.py +41 -35
  19. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/builtin_replace_map.py +0 -48
  20. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/config.py +61 -20
  21. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/git_utils.py +89 -16
  22. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/utils.py +131 -62
  23. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181/src/jarvis_ai_assistant.egg-info}/PKG-INFO +45 -51
  24. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +1 -2
  25. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -2
  26. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis_ai_assistant.egg-info/requires.txt +1 -0
  27. jarvis_ai_assistant-0.1.179/src/jarvis/jarvis_tools/ask_codebase.py +0 -294
  28. jarvis_ai_assistant-0.1.179/src/jarvis/jarvis_tools/find_methodology.py +0 -73
  29. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/LICENSE +0 -0
  30. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/MANIFEST.in +0 -0
  31. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/setup.cfg +0 -0
  32. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_agent/__init__.py +0 -0
  33. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
  34. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_agent/jarvis.py +0 -0
  35. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_agent/main.py +0 -0
  36. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_agent/output_handler.py +0 -0
  37. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
  38. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
  39. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_agent/lint.py +0 -0
  40. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
  41. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
  42. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
  43. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
  44. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
  45. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
  46. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
  47. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
  48. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
  49. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
  50. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
  51. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
  52. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
  53. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
  54. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
  55. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
  56. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
  57. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
  58. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
  59. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
  60. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_code_analysis/code_review.py +0 -0
  61. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_data/huggingface.tar.gz +0 -0
  62. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_event/__init__.py +0 -0
  63. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_git_details/__init__.py +0 -0
  64. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_git_details/main.py +0 -0
  65. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
  66. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_git_squash/main.py +0 -0
  67. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_mcp/__init__.py +0 -0
  68. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_mcp/sse_mcp_client.py +0 -0
  69. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_mcp/stdio_mcp_client.py +0 -0
  70. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_mcp/streamable_mcp_client.py +0 -0
  71. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_methodology/main.py +0 -0
  72. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
  73. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_multi_agent/main.py +0 -0
  74. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_platform/__init__.py +0 -0
  75. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_platform/human.py +0 -0
  76. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_platform/registry.py +0 -0
  77. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
  78. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_platform_manager/main.py +0 -0
  79. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
  80. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/__init__.py +0 -0
  81. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/ask_user.py +0 -0
  82. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/base.py +0 -0
  83. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/chdir.py +0 -0
  84. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/cli/__init__.py +0 -0
  85. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/cli/main.py +0 -0
  86. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/create_code_agent.py +0 -0
  87. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/create_sub_agent.py +0 -0
  88. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/file_analyzer.py +0 -0
  89. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/file_operation.py +0 -0
  90. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/generate_new_tool.py +0 -0
  91. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/methodology.py +0 -0
  92. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/read_code.py +0 -0
  93. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
  94. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/rewrite_file.py +0 -0
  95. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/search_web.py +0 -0
  96. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
  97. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/__init__.py +0 -0
  98. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/embedding.py +0 -0
  99. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/file_processors.py +0 -0
  100. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/globals.py +0 -0
  101. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/input.py +0 -0
  102. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/methodology.py +0 -0
  103. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/output.py +0 -0
  104. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis/jarvis_utils/tag.py +0 -0
  105. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
  106. {jarvis_ai_assistant-0.1.179 → jarvis_ai_assistant-0.1.181}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.179
3
+ Version: 0.1.181
4
4
  Summary: Jarvis: An AI assistant that uses tools to interact with the system
5
5
  Home-page: https://github.com/skyfireitdiy/Jarvis
6
6
  Author: skyfire
@@ -55,6 +55,7 @@ Requires-Dist: python-Levenshtein==0.25.1
55
55
  Requires-Dist: pillow==10.2.0
56
56
  Requires-Dist: openai==1.78.1
57
57
  Requires-Dist: tabulate==0.9.0
58
+ Requires-Dist: pyte==0.8.2
58
59
  Provides-Extra: dev
59
60
  Requires-Dist: pytest; extra == "dev"
60
61
  Requires-Dist: black; extra == "dev"
@@ -114,7 +115,7 @@ pip3 install jarvis-ai-assistant
114
115
 
115
116
  ### 最小化配置
116
117
 
117
- 将以下配置写入到`~/.jarvis/env`文件中。
118
+ 将以下配置写入到`~/.jarvis/config.yaml`文件中。
118
119
 
119
120
  #### 腾讯元宝
120
121
  ```yaml
@@ -122,9 +123,9 @@ JARVIS_PLATFORM: yuanbao
122
123
  JARVIS_MODEL: deep_seek_v3
123
124
  JARVIS_THINKING_PLATFORM: yuanbao
124
125
  JARVIS_THINKING_MODEL: deep_seek
125
-
126
- YUANBAO_COOKIES: <元宝cookies>
127
- YUANBAO_AGENT_ID: <元宝AgentID>
126
+ ENV:
127
+ YUANBAO_COOKIES: <元宝cookies>
128
+ YUANBAO_AGENT_ID: <元宝AgentID>
128
129
  ```
129
130
 
130
131
  元宝cookies以及AgentID获取方式:
@@ -141,7 +142,8 @@ JARVIS_MODEL: kimi
141
142
  JARVIS_THINKING_PLATFORM: kimi
142
143
  JARVIS_THINKING_MODEL: k1
143
144
 
144
- KIMI_API_KEY: <Kimi API KEY>
145
+ ENV:
146
+ KIMI_API_KEY: <Kimi API KEY>
145
147
  ```
146
148
 
147
149
  Kimi API Key获取方式:
@@ -166,7 +168,7 @@ OPENAI_API_BASE: https://api.openai.com/v1 # 可选,默认为官方API地址
166
168
  1. `OPENAI_API_KEY`: 必填。
167
169
  2. `OPENAI_API_BASE`: 可选,用于自定义API端点
168
170
 
169
- 以上配置编写到`~/.jarvis/env`文件中。
171
+ 以上配置编写到`~/.jarvis/config.yaml`文件中。
170
172
 
171
173
  支持的模型可通过`jarvis-platform-manager --list-models`查看完整列表。
172
174
 
@@ -191,27 +193,10 @@ OPENAI_API_BASE: https://api.openai.com/v1 # 可选,默认为官方API地址
191
193
  ---
192
194
 
193
195
  ## ⚙️ 配置说明 <a id="configuration"></a>
194
- ### 配置文件格式
195
- 配置文件支持两种格式:
196
- 1. **YAML格式(推荐)**:
197
- ```yaml
198
- JARVIS_PLATFORM: yuanbao
199
- JARVIS_MODEL: deep_seek_v3
200
- YUANBAO_COOKIES: "your_cookies_here"
201
- ```
202
-
203
- 2. **传统键值对格式**:
204
- ```
205
- JARVIS_PLATFORM=yuanbao
206
- JARVIS_MODEL=deep_seek_v3
207
- YUANBAO_COOKIES=your_cookies_here
208
- ```
209
-
210
- 系统会自动检测格式并处理。当检测到传统格式时,会自动转换为YAML格式并备份原文件。
211
-
212
- ### 环境变量配置
196
+ ### 配置项
213
197
  | 变量名称 | 默认值 | 说明 |
214
198
  |----------|--------|------|
199
+ | `ENV` | {} | 环境变量配置,用于设置系统环境变量 |
215
200
  | `JARVIS_MAX_TOKEN_COUNT` | 960000 | 上下文窗口的最大token数量 |
216
201
  | `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 |
217
202
  | `JARVIS_AUTO_COMPLETE` | false | 是否启用自动完成功能(任务判定完成的时候会自动终止) |
@@ -228,16 +213,26 @@ OPENAI_API_BASE: https://api.openai.com/v1 # 可选,默认为官方API地址
228
213
  | `JARVIS_PRETTY_OUTPUT` | false | 是否启用PrettyOutput |
229
214
  | `JARVIS_GIT_COMMIT_PROMPT` | "" | 自定义git提交信息生成提示模板 |
230
215
  | `JARVIS_PRINT_PROMPT` | false | 是否打印提示 |
216
+ | `JARVIS_USE_METHODOLOGY` | true | 是否启用方法论功能 |
217
+ | `JARVIS_USE_ANALYSIS` | true | 是否启用任务分析功能 |
218
+ | `JARVIS_DATA_PATH` | ~/.jarvis | Jarvis数据存储目录路径 |
231
219
 
232
- 所有配置编写到`~/.jarvis/env`文件中即可生效。
220
+ 所有配置编写到`~/.jarvis/config.yaml`文件中即可生效。
233
221
 
222
+ ### 配置文件格式
223
+ 配置文件仅支持YAML格式:
224
+ ```yaml
225
+ JARVIS_PLATFORM: yuanbao
226
+ JARVIS_MODEL: deep_seek_v3
227
+ ENV:
228
+ YUANBAO_COOKIES: "your_cookies_here"
229
+ ```
234
230
 
235
231
  ---
236
232
  ## 🛠️ 工具说明 <a id="tools"></a>
237
233
  ### 内置工具
238
234
  | 工具名称 | 描述 |
239
235
  |----------|------|
240
- | ask_codebase | 智能代码库查询和分析,用于定位功能所在文件和理解单点实现,适合查询特定功能位置和实现原理 |
241
236
  | ask_user | 交互式用户输入收集 |
242
237
  | chdir | 更改当前工作目录 |
243
238
  | rewrite_file | 文件重写工具,用于完全重写或创建文件,提供完整的文件内容替换 |
@@ -248,7 +243,6 @@ OPENAI_API_BASE: https://api.openai.com/v1 # 可选,默认为官方API地址
248
243
  | execute_script | 执行脚本并返回结果,支持任意解释器。 |
249
244
  | file_analyzer | 分析文件内容并提取关键信息。支持的文件:文本文件、word文档、pdf文件、图片 |
250
245
  | file_operation | 文件批量操作工具,可批量读写多个文件,支持文本文件,适用于需要同时处理多个文件的场景(读取配置文件、保存生成内容等) |
251
- | find_methodology | 方法论查找工具,用于在执行过程中查看历史方法论辅助决策 |
252
246
  | methodology | 方法论管理工具,支持添加、更新和删除操作 |
253
247
  | read_code | 代码阅读与分析工具,用于读取源代码文件并添加行号,针对代码文件优化,提供更好的格式化输出和行号显示,适用于代码分析、审查和理解代码实现的场景 |
254
248
  | read_webpage | 读取网页内容并分析 |
@@ -274,15 +268,20 @@ Jarvis支持使用特殊标记`'<tag>'`来触发命令替换功能,其中`tag`
274
268
  | `'Fix'` | 修复问题 |
275
269
 
276
270
  #### 自定义替换
277
- 可以通过在`~/.jarvis/replace_map.yaml`文件中添加自定义替换规则:
271
+ 可以通过以下方式配置自定义替换规则:
272
+
273
+ **配置文件**:
274
+ 在`~/.jarvis/config.yaml`中添加`JARVIS_REPLACE_MAP`配置项:
278
275
  ```yaml
279
- tag_name:
280
- template: "替换后的内容"
281
- description: "标记描述"
282
- append: false # 可选,true表示追加到输入末尾,false表示直接替换
276
+ JARVIS_REPLACE_MAP:
277
+ tag_name:
278
+ template: "替换后的内容"
279
+ description: "标记描述"
280
+ append: false # 可选,true表示追加到输入末尾,false表示直接替换
283
281
  ```
284
282
 
285
283
 
284
+
286
285
  #### 文件路径补全
287
286
  在交互式输入中,输入`@`可以触发文件路径补全功能,支持模糊匹配。
288
287
 
@@ -342,27 +341,22 @@ class CustomTool:
342
341
 
343
342
 
344
343
  ### 添加MCP
345
- MCP(模型上下文协议)。在`~/.jarvis/tools/mcp/`中创建YAML配置文件:
344
+ MCP(模型上下文协议)支持以下配置方式:
346
345
 
347
- #### 本地MCP配置(`stdio`模式)
346
+ #### 配置文件
347
+ 在`~/.jarvis/config.yaml`中添加`JARVIS_MCP`配置项:
348
348
  ```yaml
349
- type: stdio
350
- name: MCP名称
351
- command: 可执行命令
352
- args: [参数列表] # 可选
353
- env: # 可选环境变量
354
- KEY: VALUE
349
+ JARVIS_MCP:
350
+ - type: stdio # 或 sse/streamable
351
+ name: MCP名称
352
+ command: 可执行命令 # stdio模式必填
353
+ base_url: http://example.com/api # sse/streamable模式必填
354
+ args: [参数列表] # 可选
355
+ env: # 可选环境变量
356
+ KEY: VALUE
357
+ enable: true # 可选,默认为true
355
358
  ```
356
359
 
357
- #### 远程MCP配置(`sse`模式)
358
- ```yaml
359
- type: sse
360
- name: MCP名称
361
- base_url: http://example.com/api
362
- auth_token: 认证令牌 # 可选
363
- headers: # 可选HTTP头
364
- X-Custom-Header: value
365
- ```
366
360
 
367
361
 
368
362
  ### 添加新大模型平台
@@ -45,7 +45,7 @@ pip3 install jarvis-ai-assistant
45
45
 
46
46
  ### 最小化配置
47
47
 
48
- 将以下配置写入到`~/.jarvis/env`文件中。
48
+ 将以下配置写入到`~/.jarvis/config.yaml`文件中。
49
49
 
50
50
  #### 腾讯元宝
51
51
  ```yaml
@@ -53,9 +53,9 @@ JARVIS_PLATFORM: yuanbao
53
53
  JARVIS_MODEL: deep_seek_v3
54
54
  JARVIS_THINKING_PLATFORM: yuanbao
55
55
  JARVIS_THINKING_MODEL: deep_seek
56
-
57
- YUANBAO_COOKIES: <元宝cookies>
58
- YUANBAO_AGENT_ID: <元宝AgentID>
56
+ ENV:
57
+ YUANBAO_COOKIES: <元宝cookies>
58
+ YUANBAO_AGENT_ID: <元宝AgentID>
59
59
  ```
60
60
 
61
61
  元宝cookies以及AgentID获取方式:
@@ -72,7 +72,8 @@ JARVIS_MODEL: kimi
72
72
  JARVIS_THINKING_PLATFORM: kimi
73
73
  JARVIS_THINKING_MODEL: k1
74
74
 
75
- KIMI_API_KEY: <Kimi API KEY>
75
+ ENV:
76
+ KIMI_API_KEY: <Kimi API KEY>
76
77
  ```
77
78
 
78
79
  Kimi API Key获取方式:
@@ -97,7 +98,7 @@ OPENAI_API_BASE: https://api.openai.com/v1 # 可选,默认为官方API地址
97
98
  1. `OPENAI_API_KEY`: 必填。
98
99
  2. `OPENAI_API_BASE`: 可选,用于自定义API端点
99
100
 
100
- 以上配置编写到`~/.jarvis/env`文件中。
101
+ 以上配置编写到`~/.jarvis/config.yaml`文件中。
101
102
 
102
103
  支持的模型可通过`jarvis-platform-manager --list-models`查看完整列表。
103
104
 
@@ -122,27 +123,10 @@ OPENAI_API_BASE: https://api.openai.com/v1 # 可选,默认为官方API地址
122
123
  ---
123
124
 
124
125
  ## ⚙️ 配置说明 <a id="configuration"></a>
125
- ### 配置文件格式
126
- 配置文件支持两种格式:
127
- 1. **YAML格式(推荐)**:
128
- ```yaml
129
- JARVIS_PLATFORM: yuanbao
130
- JARVIS_MODEL: deep_seek_v3
131
- YUANBAO_COOKIES: "your_cookies_here"
132
- ```
133
-
134
- 2. **传统键值对格式**:
135
- ```
136
- JARVIS_PLATFORM=yuanbao
137
- JARVIS_MODEL=deep_seek_v3
138
- YUANBAO_COOKIES=your_cookies_here
139
- ```
140
-
141
- 系统会自动检测格式并处理。当检测到传统格式时,会自动转换为YAML格式并备份原文件。
142
-
143
- ### 环境变量配置
126
+ ### 配置项
144
127
  | 变量名称 | 默认值 | 说明 |
145
128
  |----------|--------|------|
129
+ | `ENV` | {} | 环境变量配置,用于设置系统环境变量 |
146
130
  | `JARVIS_MAX_TOKEN_COUNT` | 960000 | 上下文窗口的最大token数量 |
147
131
  | `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 |
148
132
  | `JARVIS_AUTO_COMPLETE` | false | 是否启用自动完成功能(任务判定完成的时候会自动终止) |
@@ -159,16 +143,26 @@ OPENAI_API_BASE: https://api.openai.com/v1 # 可选,默认为官方API地址
159
143
  | `JARVIS_PRETTY_OUTPUT` | false | 是否启用PrettyOutput |
160
144
  | `JARVIS_GIT_COMMIT_PROMPT` | "" | 自定义git提交信息生成提示模板 |
161
145
  | `JARVIS_PRINT_PROMPT` | false | 是否打印提示 |
146
+ | `JARVIS_USE_METHODOLOGY` | true | 是否启用方法论功能 |
147
+ | `JARVIS_USE_ANALYSIS` | true | 是否启用任务分析功能 |
148
+ | `JARVIS_DATA_PATH` | ~/.jarvis | Jarvis数据存储目录路径 |
162
149
 
163
- 所有配置编写到`~/.jarvis/env`文件中即可生效。
150
+ 所有配置编写到`~/.jarvis/config.yaml`文件中即可生效。
164
151
 
152
+ ### 配置文件格式
153
+ 配置文件仅支持YAML格式:
154
+ ```yaml
155
+ JARVIS_PLATFORM: yuanbao
156
+ JARVIS_MODEL: deep_seek_v3
157
+ ENV:
158
+ YUANBAO_COOKIES: "your_cookies_here"
159
+ ```
165
160
 
166
161
  ---
167
162
  ## 🛠️ 工具说明 <a id="tools"></a>
168
163
  ### 内置工具
169
164
  | 工具名称 | 描述 |
170
165
  |----------|------|
171
- | ask_codebase | 智能代码库查询和分析,用于定位功能所在文件和理解单点实现,适合查询特定功能位置和实现原理 |
172
166
  | ask_user | 交互式用户输入收集 |
173
167
  | chdir | 更改当前工作目录 |
174
168
  | rewrite_file | 文件重写工具,用于完全重写或创建文件,提供完整的文件内容替换 |
@@ -179,7 +173,6 @@ OPENAI_API_BASE: https://api.openai.com/v1 # 可选,默认为官方API地址
179
173
  | execute_script | 执行脚本并返回结果,支持任意解释器。 |
180
174
  | file_analyzer | 分析文件内容并提取关键信息。支持的文件:文本文件、word文档、pdf文件、图片 |
181
175
  | file_operation | 文件批量操作工具,可批量读写多个文件,支持文本文件,适用于需要同时处理多个文件的场景(读取配置文件、保存生成内容等) |
182
- | find_methodology | 方法论查找工具,用于在执行过程中查看历史方法论辅助决策 |
183
176
  | methodology | 方法论管理工具,支持添加、更新和删除操作 |
184
177
  | read_code | 代码阅读与分析工具,用于读取源代码文件并添加行号,针对代码文件优化,提供更好的格式化输出和行号显示,适用于代码分析、审查和理解代码实现的场景 |
185
178
  | read_webpage | 读取网页内容并分析 |
@@ -205,15 +198,20 @@ Jarvis支持使用特殊标记`'<tag>'`来触发命令替换功能,其中`tag`
205
198
  | `'Fix'` | 修复问题 |
206
199
 
207
200
  #### 自定义替换
208
- 可以通过在`~/.jarvis/replace_map.yaml`文件中添加自定义替换规则:
201
+ 可以通过以下方式配置自定义替换规则:
202
+
203
+ **配置文件**:
204
+ 在`~/.jarvis/config.yaml`中添加`JARVIS_REPLACE_MAP`配置项:
209
205
  ```yaml
210
- tag_name:
211
- template: "替换后的内容"
212
- description: "标记描述"
213
- append: false # 可选,true表示追加到输入末尾,false表示直接替换
206
+ JARVIS_REPLACE_MAP:
207
+ tag_name:
208
+ template: "替换后的内容"
209
+ description: "标记描述"
210
+ append: false # 可选,true表示追加到输入末尾,false表示直接替换
214
211
  ```
215
212
 
216
213
 
214
+
217
215
  #### 文件路径补全
218
216
  在交互式输入中,输入`@`可以触发文件路径补全功能,支持模糊匹配。
219
217
 
@@ -273,27 +271,22 @@ class CustomTool:
273
271
 
274
272
 
275
273
  ### 添加MCP
276
- MCP(模型上下文协议)。在`~/.jarvis/tools/mcp/`中创建YAML配置文件:
274
+ MCP(模型上下文协议)支持以下配置方式:
277
275
 
278
- #### 本地MCP配置(`stdio`模式)
276
+ #### 配置文件
277
+ 在`~/.jarvis/config.yaml`中添加`JARVIS_MCP`配置项:
279
278
  ```yaml
280
- type: stdio
281
- name: MCP名称
282
- command: 可执行命令
283
- args: [参数列表] # 可选
284
- env: # 可选环境变量
285
- KEY: VALUE
279
+ JARVIS_MCP:
280
+ - type: stdio # 或 sse/streamable
281
+ name: MCP名称
282
+ command: 可执行命令 # stdio模式必填
283
+ base_url: http://example.com/api # sse/streamable模式必填
284
+ args: [参数列表] # 可选
285
+ env: # 可选环境变量
286
+ KEY: VALUE
287
+ enable: true # 可选,默认为true
286
288
  ```
287
289
 
288
- #### 远程MCP配置(`sse`模式)
289
- ```yaml
290
- type: sse
291
- name: MCP名称
292
- base_url: http://example.com/api
293
- auth_token: 认证令牌 # 可选
294
- headers: # 可选HTTP头
295
- X-Custom-Header: value
296
- ```
297
290
 
298
291
 
299
292
  ### 添加新大模型平台
@@ -8,7 +8,7 @@ default = true
8
8
 
9
9
  [project]
10
10
  name = "jarvis-ai-assistant"
11
- version = "0.1.179"
11
+ version = "0.1.181"
12
12
  description = "Jarvis: An AI assistant that uses tools to interact with the system"
13
13
  readme = "README.md"
14
14
  authors = [{ name = "skyfire", email = "skyfireitdiy@hotmail.com" }]
@@ -41,6 +41,7 @@ dependencies = [
41
41
  "pillow==10.2.0",
42
42
  "openai==1.78.1",
43
43
  "tabulate==0.9.0",
44
+ "pyte==0.8.2",
44
45
  ]
45
46
  requires-python = ">=3.8"
46
47
 
@@ -65,7 +66,5 @@ jarvis-git-squash = "jarvis.jarvis_git_squash.main:main"
65
66
  jarvis-multi-agent = "jarvis.jarvis_multi_agent.main:main"
66
67
  jarvis-agent = "jarvis.jarvis_agent.main:main"
67
68
  jarvis-tool = "jarvis.jarvis_tools.cli.main:main"
68
- jarvis-ask-codebase = "jarvis.jarvis_tools.ask_codebase:main"
69
- jac = "jarvis.jarvis_tools.ask_codebase:main"
70
69
  jarvis-git-details = "jarvis.jarvis_git_details.main:main"
71
70
  jarvis-methodology = "jarvis.jarvis_methodology.main:main"
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
3
3
 
4
4
  setup(
5
5
  name="jarvis-ai-assistant",
6
- version="0.1.179",
6
+ version="0.1.181",
7
7
  author="skyfire",
8
8
  author_email="skyfireitdiy@hotmail.com",
9
9
  description="An AI assistant that uses various tools to interact with the system",
@@ -14,7 +14,10 @@ setup(
14
14
  package_dir={"": "src"},
15
15
  include_package_data=True,
16
16
  package_data={
17
- "jarvis": ["jarvis_data/huggingface.tar.gz"],
17
+ "jarvis": [
18
+ "jarvis_data/huggingface.tar.gz",
19
+ "jarvis_data/config_schema.json"
20
+ ],
18
21
  },
19
22
  install_requires=[
20
23
  "requests==2.32.3",
@@ -32,6 +35,7 @@ setup(
32
35
  "pillow==10.2.0",
33
36
  "openai==1.78.1",
34
37
  "tabulate==0.9.0",
38
+ "pyte==0.8.2",
35
39
  ],
36
40
  extras_require={
37
41
  "dev": ["pytest", "black", "isort", "mypy", "build", "twine"]
@@ -52,8 +56,6 @@ setup(
52
56
  "jarvis-multi-agent=jarvis.jarvis_multi_agent.main:main",
53
57
  "jarvis-agent=jarvis.jarvis_agent.main:main",
54
58
  "jarvis-tool=jarvis.jarvis_tools.cli.main:main",
55
- "jarvis-ask-codebase=jarvis.jarvis_tools.ask_codebase:main",
56
- "jac=jarvis.jarvis_tools.ask_codebase:main",
57
59
  "jarvis-git-details=jarvis.jarvis_git_details.main:main",
58
60
  "jarvis-methodology=jarvis.jarvis_methodology.main:main",
59
61
  ],
@@ -1,4 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """Jarvis AI Assistant"""
3
3
 
4
- __version__ = "0.1.179"
4
+ __version__ = "0.1.181"
@@ -8,7 +8,7 @@ import argparse
8
8
  import os
9
9
  import subprocess
10
10
  import sys
11
- from typing import Any, Dict, List, Optional, Tuple
11
+ from typing import List, Optional, Tuple
12
12
 
13
13
  from yaspin import yaspin # type: ignore
14
14
 
@@ -24,12 +24,12 @@ from jarvis.jarvis_tools.registry import ToolRegistry
24
24
  from jarvis.jarvis_utils.config import is_confirm_before_apply_patch
25
25
  from jarvis.jarvis_utils.git_utils import (find_git_root, get_commits_between,
26
26
  get_diff, get_diff_file_list,
27
- get_latest_commit_hash,
27
+ get_latest_commit_hash, get_recent_commits_with_files,
28
28
  handle_commit_workflow,
29
29
  has_uncommitted_changes)
30
30
  from jarvis.jarvis_utils.input import get_multiline_input
31
31
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
32
- from jarvis.jarvis_utils.utils import init_env, user_confirm
32
+ from jarvis.jarvis_utils.utils import get_loc_stats, init_env, user_confirm
33
33
 
34
34
 
35
35
  class CodeAgent:
@@ -47,11 +47,9 @@ class CodeAgent:
47
47
  "execute_script",
48
48
  "search_web",
49
49
  "ask_user",
50
- "ask_codebase",
51
50
  "read_code",
52
51
  "methodology",
53
52
  "chdir",
54
- "find_methodology",
55
53
  "edit_file",
56
54
  "rewrite_file"
57
55
  ])
@@ -75,6 +73,12 @@ class CodeAgent:
75
73
  1. **项目分析**:分析项目结构,确定需修改的文件
76
74
  2. **需求分析**:理解需求意图,选择影响最小的实现方案
77
75
  3. **代码分析**:详细分析目标文件,禁止虚构现有代码
76
+ - 结构分析:优先使用 fd 命令或 find 工具快速定位文件和目录结构
77
+ - 内容搜索:优先使用 rg(ripgrep)进行函数、类、变量等内容的全文搜索,避免遗漏
78
+ - 依赖关系:如需分析依赖、调用关系,可结合 grep、ctags、pyan3 等工具辅助
79
+ - 代码阅读:使用 read_code 工具获取目标文件的完整内容或指定范围内容,禁止凭空假设代码
80
+ - 变更影响:如需分析变更影响范围,可结合 git diff、git log 等命令辅助判断
81
+ - 工具优先级:优先使用自动化工具,减少人工推断,确保分析结果准确
78
82
  4. **方案设计**:确定最小变更方案,保持代码结构
79
83
  5. **实施修改**:遵循"先读后写"原则,保持代码风格一致性
80
84
 
@@ -90,7 +94,6 @@ class CodeAgent:
90
94
  - 对于简单的修改,可以使用execute_script工具执行shell命令完成
91
95
  </code_engineer_guide>
92
96
  """
93
- # Dynamically add ask_codebase based on task complexity if really needed
94
97
  # 处理platform参数
95
98
  platform_instance = (PlatformRegistry().create_platform(platform) # type: ignore
96
99
  if platform
@@ -110,14 +113,6 @@ class CodeAgent:
110
113
  ],
111
114
  need_summary=need_summary
112
115
  )
113
- self.agent.set_addon_prompt(
114
- "请使用工具充分理解用户需求,然后根据需求一步步执行代码修改/开发,"
115
- "如果不清楚要修改那些文件,可以使用ask_codebase工具,"
116
- "以:xxxx功能在哪个文件中实现?类似句式提问。"
117
- "所有代码修改任务都应优先使用edit_file工具,而非edit_file工具。"
118
- "edit_file工具通过精确的搜索和替换实现代码编辑,"
119
- "搜索文本需在目标文件中有且仅有一次精确匹配,确保修改的准确性。"
120
- )
121
116
 
122
117
  self.agent.set_after_tool_call_cb(self.after_tool_call_cb)
123
118
 
@@ -129,82 +124,8 @@ class CodeAgent:
129
124
  """
130
125
  return self.root_dir
131
126
 
132
- def get_loc_stats(self) -> str:
133
- """使用loc命令获取当前目录的代码统计信息
134
-
135
- 返回:
136
- str: loc命令输出的原始字符串,失败时返回空字符串
137
- """
138
- try:
139
- result = subprocess.run(
140
- ['loc'],
141
- cwd=self.root_dir,
142
- capture_output=True,
143
- text=True
144
- )
145
- return result.stdout if result.returncode == 0 else ""
146
- except FileNotFoundError:
147
- return ""
148
-
149
- def get_recent_commits_with_files(self) -> List[Dict[str, Any]]:
150
- """获取最近5次提交的commit信息和文件清单
151
-
152
- 返回:
153
- List[Dict[str, Any]]: 包含commit信息和文件清单的字典列表,格式为:
154
- [
155
- {
156
- 'hash': 提交hash,
157
- 'message': 提交信息,
158
- 'author': 作者,
159
- 'date': 提交日期,
160
- 'files': [修改的文件列表] (最多20个文件)
161
- },
162
- ...
163
- ]
164
- 失败时返回空列表
165
- """
166
- try:
167
- # 获取最近5次提交的基本信息
168
- result = subprocess.run(
169
- ['git', 'log', '-5', '--pretty=format:%H%n%s%n%an%n%ad'],
170
- cwd=self.root_dir,
171
- capture_output=True,
172
- text=True
173
- )
174
- if result.returncode != 0:
175
- return []
176
-
177
- # 解析提交信息
178
- commits = []
179
- lines = result.stdout.splitlines()
180
- for i in range(0, len(lines), 4):
181
- if i + 3 >= len(lines):
182
- break
183
- commit = {
184
- 'hash': lines[i],
185
- 'message': lines[i+1],
186
- 'author': lines[i+2],
187
- 'date': lines[i+3],
188
- 'files': []
189
- }
190
- commits.append(commit)
191
-
192
- # 获取每个提交的文件修改清单
193
- for commit in commits:
194
- files_result = subprocess.run(
195
- ['git', 'show', '--name-only', '--pretty=format:', commit['hash']],
196
- cwd=self.root_dir,
197
- capture_output=True,
198
- text=True
199
- )
200
- if files_result.returncode == 0:
201
- files = list(set(filter(None, files_result.stdout.splitlines())))
202
- commit['files'] = files[:20] # 限制最多20个文件
203
127
 
204
- return commits
205
128
 
206
- except subprocess.CalledProcessError:
207
- return []
208
129
 
209
130
  def _init_env(self) -> None:
210
131
  """初始化环境,包括:
@@ -317,8 +238,8 @@ class CodeAgent:
317
238
  start_commit = get_latest_commit_hash()
318
239
 
319
240
  # 获取项目统计信息并附加到用户输入
320
- loc_stats = self.get_loc_stats()
321
- commits_info = self.get_recent_commits_with_files()
241
+ loc_stats = get_loc_stats()
242
+ commits_info = get_recent_commits_with_files()
322
243
 
323
244
  project_info = []
324
245
  if loc_stats:
@@ -331,8 +252,20 @@ class CodeAgent:
331
252
  for i, commit in enumerate(commits_info)
332
253
  )
333
254
  project_info.append(f"最近提交:\n{commits_str}")
334
-
335
- enhanced_input = f"{user_input}\n\n项目概况:\n" + "\n\n".join(project_info) if project_info else user_input
255
+
256
+ first_tip = """请严格遵循以下规范进行代码修改任务:
257
+ 1. 每次响应仅执行一步操作,先分析再修改,避免一步多改。
258
+ 2. 充分利用工具理解用户需求和现有代码,禁止凭空假设。
259
+ 3. 如果不清楚要修改的文件,必须先分析并找出需要修改的文件,明确目标后再进行编辑。
260
+ 4. 代码编辑任务优先使用 edit_file 工具,确保搜索文本在目标文件中有且仅有一次精确匹配,保证修改的准确性和安全性。
261
+ 5. 如需大范围重写,才可使用 rewrite_file 工具。
262
+ 6. 如遇信息不明,优先调用工具补充分析,不要主观臆断。
263
+ """
264
+
265
+ if project_info:
266
+ enhanced_input = f"项目概况:\n" + "\n\n".join(project_info) + "\n\n" + first_tip + "\n\n任务描述:\n" + user_input
267
+ else:
268
+ enhanced_input = first_tip + "\n\n任务描述:\n" + user_input
336
269
 
337
270
  try:
338
271
  self.agent.run(enhanced_input)
@@ -379,21 +312,16 @@ class CodeAgent:
379
312
  for file in modified_files
380
313
  if get_lint_tools(file)
381
314
  )
382
- addon_prompt = """
383
- 1. 请对以下修改的文件进行静态扫描:
384
- """ + "\n".join(f" - {file}" for file in modified_files) + (
385
- f"""
386
- 2. 建议使用以下lint工具进行检查:
387
- {lint_tools_info}""" if lint_tools_info else ""
388
- ) + """
389
- 3. 如果本次修改引入了警告和错误,请根据警告和错误信息修复代码
390
- 4. 在引入的警告和错误都被修复的前提下,如果用户的需求未完成,请继续修改代码,如果已经完成,请终止,不要实现任何超出用户需求外的内容
391
- 5. 如果有任何信息不明确,调用工具获取信息
392
- 6. 每次响应必须且只能包含一个操作
315
+ file_list = "\n".join(f" - {file}" for file in modified_files)
316
+ tool_info = f"建议使用以下lint工具进行检查:\n{lint_tools_info}" if lint_tools_info else ""
317
+ if lint_tools_info:
318
+ addon_prompt = f"""
319
+ 请对以下修改的文件进行静态扫描:
320
+ {file_list}
321
+ {tool_info}
322
+ 如果本次修改引入了警告和错误,请根据警告和错误信息修复代码
393
323
  """
394
-
395
- agent.set_addon_prompt(addon_prompt)
396
-
324
+ agent.set_addon_prompt(addon_prompt)
397
325
  else:
398
326
  final_ret += "✅ 补丁已应用(没有新的提交)"
399
327
  else: