jarvis-ai-assistant 0.1.149__tar.gz → 0.1.151__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.
Files changed (102) hide show
  1. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/MANIFEST.in +2 -1
  2. {jarvis_ai_assistant-0.1.149/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.151}/PKG-INFO +42 -17
  3. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/README.md +34 -11
  4. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/pyproject.toml +7 -5
  5. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/setup.py +3 -5
  6. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/__init__.py +1 -1
  7. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/jarvis.py +7 -5
  8. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_git_utils/git_commiter.py +7 -0
  9. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/registry.py +2 -1
  10. jarvis_ai_assistant-0.1.151/src/jarvis/jarvis_mcp/__init__.py +65 -0
  11. jarvis_ai_assistant-0.1.151/src/jarvis/jarvis_mcp/local_mcp_client.py +326 -0
  12. jarvis_ai_assistant-0.1.151/src/jarvis/jarvis_mcp/remote_mcp_client.py +590 -0
  13. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform/kimi.py +3 -2
  14. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform/registry.py +2 -4
  15. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform/yuanbao.py +4 -4
  16. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/ask_codebase.py +3 -10
  17. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/file_operation.py +7 -26
  18. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/methodology.py +2 -1
  19. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/registry.py +168 -21
  20. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/config.py +15 -9
  21. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/embedding.py +2 -2
  22. jarvis_ai_assistant-0.1.151/src/jarvis/jarvis_utils/file_processors.py +81 -0
  23. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/input.py +7 -1
  24. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/methodology.py +4 -4
  25. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/utils.py +5 -5
  26. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151/src/jarvis_ai_assistant.egg-info}/PKG-INFO +42 -17
  27. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +3 -0
  28. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis_ai_assistant.egg-info/requires.txt +2 -4
  29. jarvis_ai_assistant-0.1.149/src/jarvis/jarvis_utils/file_processors.py +0 -343
  30. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/LICENSE +0 -0
  31. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/setup.cfg +0 -0
  32. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/__init__.py +0 -0
  33. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
  34. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/file_input_handler.py +0 -0
  35. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/main.py +0 -0
  36. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/output_handler.py +0 -0
  37. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/patch.py +0 -0
  38. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
  39. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
  40. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_agent/code_agent.py +0 -0
  41. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
  42. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
  43. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
  44. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
  45. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
  46. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
  47. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
  48. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
  49. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
  50. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
  51. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
  52. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
  53. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
  54. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
  55. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
  56. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
  57. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
  58. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
  59. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
  60. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
  61. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/code_review.py +0 -0
  62. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_dev/main.py +0 -0
  63. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_git_details/__init__.py +0 -0
  64. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_git_details/main.py +0 -0
  65. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
  66. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_git_squash/main.py +0 -0
  67. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/base.py +0 -0
  68. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/cpp.py +0 -0
  69. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/go.py +0 -0
  70. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/python.py +0 -0
  71. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/rust.py +0 -0
  72. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_methodology/main.py +0 -0
  73. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
  74. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_multi_agent/main.py +0 -0
  75. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform/__init__.py +0 -0
  76. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform/base.py +0 -0
  77. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
  78. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform_manager/main.py +0 -0
  79. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
  80. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_smart_shell/main.py +0 -0
  81. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/__init__.py +0 -0
  82. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/ask_user.py +0 -0
  83. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/base.py +0 -0
  84. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/chdir.py +0 -0
  85. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/code_plan.py +0 -0
  86. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/create_code_agent.py +0 -0
  87. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/create_sub_agent.py +0 -0
  88. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/execute_script.py +0 -0
  89. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/file_analyzer.py +0 -0
  90. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/find_methodology.py +0 -0
  91. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/lsp_get_diagnostics.py +0 -0
  92. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/read_code.py +0 -0
  93. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
  94. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/search_web.py +0 -0
  95. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
  96. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/__init__.py +0 -0
  97. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/git_utils.py +0 -0
  98. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/globals.py +0 -0
  99. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/output.py +0 -0
  100. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
  101. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -0
  102. {jarvis_ai_assistant-0.1.149 → jarvis_ai_assistant-0.1.151}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
@@ -2,4 +2,5 @@ include README.md
2
2
  include LICENSE
3
3
  include pyproject.toml
4
4
  recursive-include src/jarvis *
5
- exclude __pycache__
5
+ exclude __pycache__
6
+ exclude .venv
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.149
3
+ Version: 0.1.151
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
@@ -43,25 +43,27 @@ License-File: LICENSE
43
43
  Requires-Dist: requests==2.32.3
44
44
  Requires-Dist: colorama==0.4.6
45
45
  Requires-Dist: prompt_toolkit==3.0.50
46
- Requires-Dist: PyMuPDF==1.24.11
47
46
  Requires-Dist: yaspin==2.4.0
48
47
  Requires-Dist: pygments==2.19.1
49
48
  Requires-Dist: fuzzywuzzy==0.18.0
50
49
  Requires-Dist: jedi==0.19.2
51
50
  Requires-Dist: fastapi==0.115.12
52
51
  Requires-Dist: uvicorn==0.33.0
53
- Requires-Dist: pandas==2.0.3
54
52
  Requires-Dist: rich==14.0.0
55
53
  Requires-Dist: transformers==4.46.3
56
- Requires-Dist: python-docx==1.1.2
57
- Requires-Dist: python-pptx==1.0.2
58
54
  Requires-Dist: torch==2.4.1
59
55
  Requires-Dist: python-Levenshtein==0.25.1
56
+ Requires-Dist: sseclient==0.0.27
57
+ Requires-Dist: pillow==10.2.1
60
58
  Provides-Extra: dev
61
59
  Requires-Dist: pytest; extra == "dev"
62
60
  Requires-Dist: black; extra == "dev"
63
61
  Requires-Dist: isort; extra == "dev"
64
62
  Requires-Dist: mypy; extra == "dev"
63
+ Dynamic: author
64
+ Dynamic: home-page
65
+ Dynamic: license-file
66
+ Dynamic: requires-python
65
67
 
66
68
  # 🤖 Jarvis AI 助手
67
69
  <p align="center">
@@ -191,13 +193,12 @@ jarvis-methodology --help
191
193
  |------|----------|--------|------|
192
194
  | 核心配置 | `JARVIS_MAX_TOKEN_COUNT` | 102400000 | 上下文窗口的最大token数量 |
193
195
  | 核心配置 | `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 |
194
- | 核心配置 | `JARVIS_THREAD_COUNT` | 1 | 并行处理的线程数量 |
195
- | 核心配置 | `JARVIS_AUTO_COMPLETE` | false | 是否启用自动补全功能
196
+ | 核心配置 | `JARVIS_AUTO_COMPLETE` | false | 是否启用自动完成功能(任务判定完成的时候会自动终止) |
196
197
  | 核心配置 | `JARVIS_SHELL_NAME` | bash | 系统shell名称 |
197
198
  | 核心配置 | `JARVIS_PLATFORM` | yuanbao | 默认AI平台 |
198
199
  | 核心配置 | `JARVIS_MODEL` | deep_seek_v3 | 默认模型 |
199
- | 核心配置 | `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 思考任务使用的平台 |
200
- | 核心配置 | `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 思考任务使用的模型 |
200
+ | 核心配置 | `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 推理任务使用的平台 |
201
+ | 核心配置 | `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 |
201
202
  | 核心配置 | `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
202
203
  | 核心配置 | `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | true | 应用补丁前是否需要确认 |
203
204
  | 核心配置 | `JARVIS_MAX_TOOL_CALL_COUNT` | 20 | 最大连续工具调用次数 |
@@ -212,17 +213,17 @@ jarvis-methodology --help
212
213
  | ask_user | 交互式用户输入收集 |
213
214
  | chdir | 更改当前工作目录 |
214
215
  | code_plan | 理解需求并制定详细的代码修改计划,在修改前获取用户确认 |
215
- | create_code_agent | 代码开发工具,当需要修改代码时使用,如果只是简单文件修改,使用文件操作或者脚本即可 |
216
+ | create_code_agent | 代码开发工具,当需要修改代码时使用 |
216
217
  | create_sub_agent | 创建子代理以处理特定任务,子代理将生成任务总结报告 |
217
218
  | execute_script | 执行脚本并返回结果,支持任意解释器。 |
218
219
  | file_analyzer | 分析文件内容并提取关键信息。支持的文件:文本文件、word文档、pdf文件、图片 |
219
- | file_operation | 文件批量操作工具,可批量读写多个文件,支持文本、PDF、Word、Excel、PPT等格式,适用于需要同时处理多个文件的场景(读取配置文件、保存生成内容等) |
220
+ | file_operation | 文件批量操作工具,可批量读写多个文件,支持文本文件,适用于需要同时处理多个文件的场景(读取配置文件、保存生成内容等) |
220
221
  | find_methodology | 方法论查找工具,用于在执行过程中查看历史方法论辅助决策 |
221
222
  | lsp_get_diagnostics | 获取代码诊断信息(错误、警告) |
222
- | methodology | 经验管理工具,支持添加、更新和删除操作 |
223
+ | methodology | 方法论管理工具,支持添加、更新和删除操作 |
223
224
  | read_code | 代码阅读与分析工具,用于读取源代码文件并添加行号,针对代码文件优化,提供更好的格式化输出和行号显示,适用于代码分析、审查和理解代码实现的场景 |
224
- | read_webpage | 读取网页内容,提取标题、文本和超链接 |
225
- | search_web | 使用bing进行网络搜索 |
225
+ | read_webpage | 读取网页内容并分析 |
226
+ | search_web | 使用互联网搜索 |
226
227
  | virtual_tty | 控制虚拟终端执行各种操作,如启动终端、输入命令、获取输出等。 |
227
228
 
228
229
 
@@ -232,7 +233,7 @@ jarvis-methodology --help
232
233
  ---
233
234
  ## 🛠️ 扩展开发 <a id="extensions"></a>
234
235
  ### 添加新工具
235
- 在 `~/.jarvis/tools/》 中创建新的 Python 文件:
236
+ 在 `~/.jarvis/tools/` 中创建新的 Python 文件:
236
237
  ```python
237
238
  from typing import Dict, Any
238
239
  from jarvis.utils import OutputType, PrettyOutput
@@ -280,8 +281,32 @@ class CustomTool:
280
281
  ```
281
282
 
282
283
 
284
+ ### 添加MCP
285
+ MCP(模型上下文协议)。在`~/.jarvis/tools/mcp/`中创建YAML配置文件:
286
+
287
+ #### 本地MCP配置(`stdio`模式)
288
+ ```yaml
289
+ type: local
290
+ name: MCP名称
291
+ command: 可执行命令
292
+ args: [参数列表] # 可选
293
+ env: # 可选环境变量
294
+ KEY: VALUE
295
+ ```
296
+
297
+ #### 远程MCP配置(`sse`模式)
298
+ ```yaml
299
+ type: remote
300
+ name: MCP名称
301
+ base_url: http://example.com/api
302
+ auth_token: 认证令牌 # 可选
303
+ headers: # 可选HTTP头
304
+ X-Custom-Header: value
305
+ ```
306
+
307
+
283
308
  ### 添加新大模型平台
284
- 在 `~/.jarvis/platforms/》 中创建新的 Python 文件:
309
+ 在 `~/.jarvis/platforms/` 中创建新的 Python 文件:
285
310
  ```python
286
311
  from jarvis.jarvis_platform.base import BasePlatform
287
312
  class CustomPlatform(BasePlatform):
@@ -126,13 +126,12 @@ jarvis-methodology --help
126
126
  |------|----------|--------|------|
127
127
  | 核心配置 | `JARVIS_MAX_TOKEN_COUNT` | 102400000 | 上下文窗口的最大token数量 |
128
128
  | 核心配置 | `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 |
129
- | 核心配置 | `JARVIS_THREAD_COUNT` | 1 | 并行处理的线程数量 |
130
- | 核心配置 | `JARVIS_AUTO_COMPLETE` | false | 是否启用自动补全功能
129
+ | 核心配置 | `JARVIS_AUTO_COMPLETE` | false | 是否启用自动完成功能(任务判定完成的时候会自动终止) |
131
130
  | 核心配置 | `JARVIS_SHELL_NAME` | bash | 系统shell名称 |
132
131
  | 核心配置 | `JARVIS_PLATFORM` | yuanbao | 默认AI平台 |
133
132
  | 核心配置 | `JARVIS_MODEL` | deep_seek_v3 | 默认模型 |
134
- | 核心配置 | `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 思考任务使用的平台 |
135
- | 核心配置 | `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 思考任务使用的模型 |
133
+ | 核心配置 | `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 推理任务使用的平台 |
134
+ | 核心配置 | `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 |
136
135
  | 核心配置 | `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
137
136
  | 核心配置 | `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | true | 应用补丁前是否需要确认 |
138
137
  | 核心配置 | `JARVIS_MAX_TOOL_CALL_COUNT` | 20 | 最大连续工具调用次数 |
@@ -147,17 +146,17 @@ jarvis-methodology --help
147
146
  | ask_user | 交互式用户输入收集 |
148
147
  | chdir | 更改当前工作目录 |
149
148
  | code_plan | 理解需求并制定详细的代码修改计划,在修改前获取用户确认 |
150
- | create_code_agent | 代码开发工具,当需要修改代码时使用,如果只是简单文件修改,使用文件操作或者脚本即可 |
149
+ | create_code_agent | 代码开发工具,当需要修改代码时使用 |
151
150
  | create_sub_agent | 创建子代理以处理特定任务,子代理将生成任务总结报告 |
152
151
  | execute_script | 执行脚本并返回结果,支持任意解释器。 |
153
152
  | file_analyzer | 分析文件内容并提取关键信息。支持的文件:文本文件、word文档、pdf文件、图片 |
154
- | file_operation | 文件批量操作工具,可批量读写多个文件,支持文本、PDF、Word、Excel、PPT等格式,适用于需要同时处理多个文件的场景(读取配置文件、保存生成内容等) |
153
+ | file_operation | 文件批量操作工具,可批量读写多个文件,支持文本文件,适用于需要同时处理多个文件的场景(读取配置文件、保存生成内容等) |
155
154
  | find_methodology | 方法论查找工具,用于在执行过程中查看历史方法论辅助决策 |
156
155
  | lsp_get_diagnostics | 获取代码诊断信息(错误、警告) |
157
- | methodology | 经验管理工具,支持添加、更新和删除操作 |
156
+ | methodology | 方法论管理工具,支持添加、更新和删除操作 |
158
157
  | read_code | 代码阅读与分析工具,用于读取源代码文件并添加行号,针对代码文件优化,提供更好的格式化输出和行号显示,适用于代码分析、审查和理解代码实现的场景 |
159
- | read_webpage | 读取网页内容,提取标题、文本和超链接 |
160
- | search_web | 使用bing进行网络搜索 |
158
+ | read_webpage | 读取网页内容并分析 |
159
+ | search_web | 使用互联网搜索 |
161
160
  | virtual_tty | 控制虚拟终端执行各种操作,如启动终端、输入命令、获取输出等。 |
162
161
 
163
162
 
@@ -167,7 +166,7 @@ jarvis-methodology --help
167
166
  ---
168
167
  ## 🛠️ 扩展开发 <a id="extensions"></a>
169
168
  ### 添加新工具
170
- 在 `~/.jarvis/tools/》 中创建新的 Python 文件:
169
+ 在 `~/.jarvis/tools/` 中创建新的 Python 文件:
171
170
  ```python
172
171
  from typing import Dict, Any
173
172
  from jarvis.utils import OutputType, PrettyOutput
@@ -215,8 +214,32 @@ class CustomTool:
215
214
  ```
216
215
 
217
216
 
217
+ ### 添加MCP
218
+ MCP(模型上下文协议)。在`~/.jarvis/tools/mcp/`中创建YAML配置文件:
219
+
220
+ #### 本地MCP配置(`stdio`模式)
221
+ ```yaml
222
+ type: local
223
+ name: MCP名称
224
+ command: 可执行命令
225
+ args: [参数列表] # 可选
226
+ env: # 可选环境变量
227
+ KEY: VALUE
228
+ ```
229
+
230
+ #### 远程MCP配置(`sse`模式)
231
+ ```yaml
232
+ type: remote
233
+ name: MCP名称
234
+ base_url: http://example.com/api
235
+ auth_token: 认证令牌 # 可选
236
+ headers: # 可选HTTP头
237
+ X-Custom-Header: value
238
+ ```
239
+
240
+
218
241
  ### 添加新大模型平台
219
- 在 `~/.jarvis/platforms/》 中创建新的 Python 文件:
242
+ 在 `~/.jarvis/platforms/` 中创建新的 Python 文件:
220
243
  ```python
221
244
  from jarvis.jarvis_platform.base import BasePlatform
222
245
  class CustomPlatform(BasePlatform):
@@ -2,9 +2,13 @@
2
2
  requires = ["setuptools>=45", "wheel"]
3
3
  build-backend = "setuptools.build_meta"
4
4
 
5
+ [[tool.uv.index]]
6
+ url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
7
+ default = true
8
+
5
9
  [project]
6
10
  name = "jarvis-ai-assistant"
7
- version = "0.1.149"
11
+ version = "0.1.151"
8
12
  description = "Jarvis: An AI assistant that uses tools to interact with the system"
9
13
  readme = "README.md"
10
14
  authors = [{ name = "skyfire", email = "skyfireitdiy@hotmail.com" }]
@@ -25,20 +29,18 @@ dependencies = [
25
29
  "requests==2.32.3",
26
30
  "colorama==0.4.6",
27
31
  "prompt_toolkit==3.0.50",
28
- "PyMuPDF==1.24.11",
29
32
  "yaspin==2.4.0",
30
33
  "pygments==2.19.1",
31
34
  "fuzzywuzzy==0.18.0",
32
35
  "jedi==0.19.2",
33
36
  "fastapi==0.115.12",
34
37
  "uvicorn==0.33.0",
35
- "pandas==2.0.3",
36
38
  "rich==14.0.0",
37
39
  "transformers==4.46.3",
38
- "python-docx==1.1.2",
39
- "python-pptx==1.0.2",
40
40
  "torch==2.4.1",
41
41
  "python-Levenshtein==0.25.1",
42
+ "sseclient==0.0.27",
43
+ "pillow==10.2.1",
42
44
  ]
43
45
  requires-python = ">=3.8"
44
46
 
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="jarvis-ai-assistant",
5
- version="0.1.149",
5
+ version="0.1.151",
6
6
  author="skyfire",
7
7
  author_email="skyfireitdiy@hotmail.com",
8
8
  description="An AI assistant that uses various tools to interact with the system",
@@ -16,20 +16,18 @@ setup(
16
16
  "requests==2.32.3",
17
17
  "colorama==0.4.6",
18
18
  "prompt_toolkit==3.0.50",
19
- "PyMuPDF==1.24.11",
20
19
  "yaspin==2.4.0",
21
20
  "pygments==2.19.1",
22
21
  "fuzzywuzzy==0.18.0",
23
22
  "jedi==0.19.2",
24
23
  "fastapi==0.115.12",
25
24
  "uvicorn==0.33.0",
26
- "pandas==2.0.3",
27
25
  "rich==14.0.0",
28
26
  "transformers==4.46.3",
29
- "python-docx==1.1.2",
30
- "python-pptx==1.0.2",
31
27
  "torch==2.4.1",
32
28
  "python-Levenshtein==0.25.1",
29
+ "sseclient==0.0.27",
30
+ "pillow==10.2.1",
33
31
  ],
34
32
  entry_points={
35
33
  "console_scripts": [
@@ -1,3 +1,3 @@
1
1
  """Jarvis AI Assistant"""
2
2
 
3
- __version__ = "0.1.149"
3
+ __version__ = "0.1.151"
@@ -4,6 +4,7 @@ import sys
4
4
 
5
5
  from typing import Dict # 仅保留实际使用的类型导入
6
6
 
7
+ from jarvis.jarvis_utils.config import get_data_dir
7
8
  from prompt_toolkit import prompt
8
9
  import yaml
9
10
  from yaspin import yaspin
@@ -25,13 +26,14 @@ def _load_tasks() -> Dict[str, str]:
25
26
  """Load tasks from .jarvis files in user home and current directory."""
26
27
  tasks: Dict[str, str] = {}
27
28
 
28
- # Check .jarvis/pre-command in user directory
29
- user_jarvis = os.path.expanduser("~/.jarvis/pre-command")
30
- if os.path.exists(user_jarvis):
31
- spinner_text = f"从{user_jarvis}加载预定义任务..."
29
+ # Check pre-command in data directory
30
+ data_dir = get_data_dir()
31
+ pre_command_path = os.path.join(data_dir, "pre-command")
32
+ if os.path.exists(pre_command_path):
33
+ spinner_text = f"从{pre_command_path}加载预定义任务..."
32
34
  with yaspin(text=spinner_text, color="cyan") as spinner:
33
35
  try:
34
- with open(user_jarvis, "r", encoding="utf-8", errors="ignore") as f:
36
+ with open(pre_command_path, "r", encoding="utf-8", errors="ignore") as f:
35
37
  user_tasks = yaml.safe_load(f)
36
38
  if isinstance(user_tasks, dict):
37
39
  for name, desc in user_tasks.items():
@@ -177,6 +177,13 @@ class GitCommitTool:
177
177
  # 如果成功提取,就跳出循环
178
178
  if commit_message:
179
179
  break
180
+ prompt = f"""格式错误,请按照以下格式重新生成提交信息:
181
+ {ot("COMMIT_MESSAGE")}
182
+ <类型>(<范围>): <主题>
183
+
184
+ [可选] 详细描述变更内容和原因
185
+ {ct("COMMIT_MESSAGE")}
186
+ """
180
187
  spinner.write("✅ 生成提交消息")
181
188
 
182
189
  # 执行提交
@@ -6,6 +6,7 @@ import sys
6
6
  from typing import Dict, Type, Optional, List
7
7
  from jarvis.jarvis_lsp.base import BaseLSP
8
8
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
9
+ from jarvis.jarvis_utils.config import get_data_dir
9
10
 
10
11
  REQUIRED_METHODS = [
11
12
  ('initialize', ['workspace_path']),
@@ -21,7 +22,7 @@ class LSPRegistry:
21
22
  @staticmethod
22
23
  def get_lsp_dir() -> str:
23
24
  """Get LSP implementation directory."""
24
- user_lsp_dir = os.path.expanduser("~/.jarvis/lsp")
25
+ user_lsp_dir = os.path.join(get_data_dir(), "lsp")
25
26
  if not os.path.exists(user_lsp_dir):
26
27
  try:
27
28
  os.makedirs(user_lsp_dir)
@@ -0,0 +1,65 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any, Dict, List
3
+
4
+
5
+ class McpClient(ABC):
6
+ """MCP客户端抽象基类"""
7
+
8
+ @abstractmethod
9
+ def get_tool_list(self) -> List[Dict[str, Any]]:
10
+ """获取工具列表
11
+
12
+ 返回:
13
+ List[Dict[str, Any]]: 工具列表,每个工具包含以下字段:
14
+ - name: str - 工具名称
15
+ - description: str - 工具描述
16
+ - parameters: Dict - 工具参数
17
+ """
18
+ pass
19
+
20
+ @abstractmethod
21
+ def execute(self, tool_name: str, arguments: Dict[str, Any]) -> Dict[str, Any]:
22
+ """执行工具
23
+
24
+ 参数:
25
+ tool_name: 工具名称
26
+ arguments: 参数字典,包含工具执行所需的参数
27
+
28
+ 返回:
29
+ Dict[str, Any]: 执行结果,包含以下字段:
30
+ - success: bool - 是否执行成功
31
+ - stdout: str - 标准输出
32
+ - stderr: str - 标准错误
33
+ """
34
+ pass
35
+
36
+ @abstractmethod
37
+ def get_resource_list(self) -> List[Dict[str, Any]]:
38
+ """获取资源列表
39
+
40
+ 返回:
41
+ List[Dict[str, Any]]: 资源列表,每个资源包含以下字段:
42
+ - uri: str - 资源的唯一标识符
43
+ - name: str - 资源的名称
44
+ - description: str - 资源的描述(可选)
45
+ - mimeType: str - 资源的MIME类型(可选)
46
+ """
47
+ pass
48
+
49
+ @abstractmethod
50
+ def get_resource(self, uri: str) -> Dict[str, Any]:
51
+ """获取指定资源的内容
52
+
53
+ 参数:
54
+ uri: str - 资源的URI标识符
55
+
56
+ 返回:
57
+ Dict[str, Any]: 资源内容,包含以下字段:
58
+ - uri: str - 资源的URI
59
+ - mimeType: str - 资源的MIME类型(可选)
60
+ - text: str - 文本内容(如果是文本资源)
61
+ - blob: str - 二进制内容(如果是二进制资源,base64编码)
62
+ """
63
+ pass
64
+
65
+