jarvis-ai-assistant 0.1.148__tar.gz → 0.1.150__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 (105) hide show
  1. {jarvis_ai_assistant-0.1.148/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.150}/PKG-INFO +31 -38
  2. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/README.md +16 -11
  3. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/pyproject.toml +19 -27
  4. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/setup.py +15 -27
  5. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/__init__.py +1 -1
  6. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_agent/jarvis.py +7 -5
  7. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_agent/main.py +0 -1
  8. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_agent/patch.py +42 -7
  9. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/code_review.py +0 -1
  10. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_git_utils/git_commiter.py +0 -1
  11. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_lsp/base.py +1 -1
  12. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_lsp/cpp.py +1 -1
  13. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_lsp/go.py +1 -1
  14. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_lsp/python.py +1 -1
  15. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_lsp/registry.py +2 -1
  16. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_lsp/rust.py +1 -1
  17. jarvis_ai_assistant-0.1.150/src/jarvis/jarvis_mcp/__init__.py +36 -0
  18. jarvis_ai_assistant-0.1.150/src/jarvis/jarvis_mcp/local_mcp_client.py +241 -0
  19. jarvis_ai_assistant-0.1.150/src/jarvis/jarvis_mcp/remote_mcp_client.py +230 -0
  20. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_platform/base.py +1 -1
  21. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_platform/kimi.py +3 -3
  22. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_platform/registry.py +2 -4
  23. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_platform/yuanbao.py +4 -4
  24. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/code_plan.py +0 -1
  25. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/file_analyzer.py +1 -1
  26. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/file_operation.py +7 -26
  27. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/methodology.py +2 -1
  28. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/read_code.py +0 -1
  29. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/registry.py +108 -3
  30. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/search_web.py +0 -1
  31. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_utils/config.py +14 -8
  32. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_utils/embedding.py +4 -8
  33. jarvis_ai_assistant-0.1.150/src/jarvis/jarvis_utils/file_processors.py +81 -0
  34. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_utils/git_utils.py +19 -8
  35. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_utils/input.py +7 -1
  36. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_utils/methodology.py +2 -2
  37. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_utils/output.py +0 -1
  38. jarvis_ai_assistant-0.1.150/src/jarvis/jarvis_utils/utils.py +154 -0
  39. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150/src/jarvis_ai_assistant.egg-info}/PKG-INFO +31 -38
  40. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +3 -1
  41. jarvis_ai_assistant-0.1.150/src/jarvis_ai_assistant.egg-info/requires.txt +20 -0
  42. jarvis_ai_assistant-0.1.148/src/jarvis/jarvis_platform_manager/openai_test.py +0 -138
  43. jarvis_ai_assistant-0.1.148/src/jarvis/jarvis_utils/file_processors.py +0 -343
  44. jarvis_ai_assistant-0.1.148/src/jarvis/jarvis_utils/utils.py +0 -352
  45. jarvis_ai_assistant-0.1.148/src/jarvis_ai_assistant.egg-info/requires.txt +0 -32
  46. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/LICENSE +0 -0
  47. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/MANIFEST.in +0 -0
  48. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/setup.cfg +0 -0
  49. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_agent/__init__.py +0 -0
  50. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
  51. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_agent/file_input_handler.py +0 -0
  52. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_agent/output_handler.py +0 -0
  53. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
  54. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
  55. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_agent/code_agent.py +0 -0
  56. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
  57. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
  58. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
  59. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
  60. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
  61. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
  62. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
  63. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
  64. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
  65. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
  66. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
  67. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
  68. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
  69. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
  70. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
  71. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
  72. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
  73. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
  74. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
  75. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
  76. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_dev/main.py +0 -0
  77. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_git_details/__init__.py +0 -0
  78. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_git_details/main.py +0 -0
  79. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
  80. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_git_squash/main.py +0 -0
  81. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_methodology/main.py +0 -0
  82. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
  83. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_multi_agent/main.py +0 -0
  84. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_platform/__init__.py +0 -0
  85. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
  86. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_platform_manager/main.py +0 -0
  87. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
  88. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_smart_shell/main.py +0 -0
  89. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/__init__.py +0 -0
  90. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/ask_codebase.py +0 -0
  91. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/ask_user.py +0 -0
  92. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/base.py +0 -0
  93. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/chdir.py +0 -0
  94. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/create_code_agent.py +0 -0
  95. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/create_sub_agent.py +0 -0
  96. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/execute_script.py +0 -0
  97. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/find_methodology.py +0 -0
  98. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/lsp_get_diagnostics.py +0 -0
  99. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
  100. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
  101. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_utils/__init__.py +0 -0
  102. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis/jarvis_utils/globals.py +0 -0
  103. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
  104. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -0
  105. {jarvis_ai_assistant-0.1.148 → jarvis_ai_assistant-0.1.150}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.148
3
+ Version: 0.1.150
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
@@ -40,32 +40,20 @@ Classifier: Programming Language :: Python :: 3.11
40
40
  Requires-Python: >=3.8
41
41
  Description-Content-Type: text/markdown
42
42
  License-File: LICENSE
43
- Requires-Dist: requests>=2.25.1
44
- Requires-Dist: pyyaml>=5.1
45
- Requires-Dist: colorama>=0.4.6
46
- Requires-Dist: prompt_toolkit>=3.0.0
47
- Requires-Dist: openai>=1.20.0
48
- Requires-Dist: numpy>=1.19.5
49
- Requires-Dist: faiss-cpu>=1.8.0
50
- Requires-Dist: sentence-transformers>=2.2.2
51
- Requires-Dist: bs4>=0.0.1
52
- Requires-Dist: PyMuPDF>=1.21.0
53
- Requires-Dist: python-docx>=0.8.11
54
- Requires-Dist: tiktoken>=0.3.0
55
- Requires-Dist: tqdm>=4.65.0
56
- Requires-Dist: docx>=0.2.4
57
- Requires-Dist: yaspin>=2.4.0
58
- Requires-Dist: rich>=13.3.1
59
- Requires-Dist: pygments>=2.15.0
60
- Requires-Dist: fuzzywuzzy>=0.18.0
61
- Requires-Dist: python-Levenshtein>=0.25.0
62
- Requires-Dist: jedi>=0.17.2
63
- Requires-Dist: psutil>=7.0.0
64
- Requires-Dist: fastapi>=0.115.4
65
- Requires-Dist: uvicorn>=0.33.0
66
- Requires-Dist: python-pptx>=1.0.0
67
- Requires-Dist: pandas>=2.0.0
68
- Requires-Dist: html2text>=2024.2.26
43
+ Requires-Dist: requests==2.32.3
44
+ Requires-Dist: colorama==0.4.6
45
+ Requires-Dist: prompt_toolkit==3.0.50
46
+ Requires-Dist: yaspin==2.4.0
47
+ Requires-Dist: pygments==2.19.1
48
+ Requires-Dist: fuzzywuzzy==0.18.0
49
+ Requires-Dist: jedi==0.19.2
50
+ Requires-Dist: fastapi==0.115.12
51
+ Requires-Dist: uvicorn==0.33.0
52
+ Requires-Dist: rich==14.0.0
53
+ Requires-Dist: transformers==4.46.3
54
+ Requires-Dist: torch==2.4.1
55
+ Requires-Dist: python-Levenshtein==0.25.1
56
+ Requires-Dist: sseclient==0.0.27
69
57
  Provides-Extra: dev
70
58
  Requires-Dist: pytest; extra == "dev"
71
59
  Requires-Dist: black; extra == "dev"
@@ -82,6 +70,7 @@ Requires-Dist: mypy; extra == "dev"
82
70
 
83
71
  *您的智能开发和系统交互助手*
84
72
 
73
+ [视频介绍](#video-introduction) •
85
74
  [快速开始](#quick-start) •
86
75
  [配置说明](#configuration) •
87
76
  [工具说明](#tools) •
@@ -92,6 +81,11 @@ Requires-Dist: mypy; extra == "dev"
92
81
 
93
82
  ---
94
83
 
84
+ ## 📺 视频介绍<a id="video-introduction"></a>
85
+
86
+ [![视频介绍](docs/images/intro.png)](https://player.bilibili.com/player.html?isOutside=true&aid=114306578382907&bvid=BV1x2dAYeEpM&cid=29314583629&p=1)
87
+
88
+
95
89
  ## 🚀 快速开始 <a id="quick-start"></a>
96
90
  ### 安装
97
91
  ```bash
@@ -194,13 +188,12 @@ jarvis-methodology --help
194
188
  |------|----------|--------|------|
195
189
  | 核心配置 | `JARVIS_MAX_TOKEN_COUNT` | 102400000 | 上下文窗口的最大token数量 |
196
190
  | 核心配置 | `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 |
197
- | 核心配置 | `JARVIS_THREAD_COUNT` | 1 | 并行处理的线程数量 |
198
- | 核心配置 | `JARVIS_AUTO_COMPLETE` | false | 是否启用自动补全功能
191
+ | 核心配置 | `JARVIS_AUTO_COMPLETE` | false | 是否启用自动完成功能(任务判定完成的时候会自动终止) |
199
192
  | 核心配置 | `JARVIS_SHELL_NAME` | bash | 系统shell名称 |
200
193
  | 核心配置 | `JARVIS_PLATFORM` | yuanbao | 默认AI平台 |
201
194
  | 核心配置 | `JARVIS_MODEL` | deep_seek_v3 | 默认模型 |
202
- | 核心配置 | `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 思考任务使用的平台 |
203
- | 核心配置 | `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 思考任务使用的模型 |
195
+ | 核心配置 | `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 推理任务使用的平台 |
196
+ | 核心配置 | `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 |
204
197
  | 核心配置 | `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
205
198
  | 核心配置 | `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | true | 应用补丁前是否需要确认 |
206
199
  | 核心配置 | `JARVIS_MAX_TOOL_CALL_COUNT` | 20 | 最大连续工具调用次数 |
@@ -215,17 +208,17 @@ jarvis-methodology --help
215
208
  | ask_user | 交互式用户输入收集 |
216
209
  | chdir | 更改当前工作目录 |
217
210
  | code_plan | 理解需求并制定详细的代码修改计划,在修改前获取用户确认 |
218
- | create_code_agent | 代码开发工具,当需要修改代码时使用,如果只是简单文件修改,使用文件操作或者脚本即可 |
211
+ | create_code_agent | 代码开发工具,当需要修改代码时使用 |
219
212
  | create_sub_agent | 创建子代理以处理特定任务,子代理将生成任务总结报告 |
220
213
  | execute_script | 执行脚本并返回结果,支持任意解释器。 |
221
214
  | file_analyzer | 分析文件内容并提取关键信息。支持的文件:文本文件、word文档、pdf文件、图片 |
222
- | file_operation | 文件批量操作工具,可批量读写多个文件,支持文本、PDF、Word、Excel、PPT等格式,适用于需要同时处理多个文件的场景(读取配置文件、保存生成内容等) |
215
+ | file_operation | 文件批量操作工具,可批量读写多个文件,支持文本文件,适用于需要同时处理多个文件的场景(读取配置文件、保存生成内容等) |
223
216
  | find_methodology | 方法论查找工具,用于在执行过程中查看历史方法论辅助决策 |
224
217
  | lsp_get_diagnostics | 获取代码诊断信息(错误、警告) |
225
- | methodology | 经验管理工具,支持添加、更新和删除操作 |
218
+ | methodology | 方法论管理工具,支持添加、更新和删除操作 |
226
219
  | read_code | 代码阅读与分析工具,用于读取源代码文件并添加行号,针对代码文件优化,提供更好的格式化输出和行号显示,适用于代码分析、审查和理解代码实现的场景 |
227
- | read_webpage | 读取网页内容,提取标题、文本和超链接 |
228
- | search_web | 使用bing进行网络搜索 |
220
+ | read_webpage | 读取网页内容并分析 |
221
+ | search_web | 使用互联网搜索 |
229
222
  | virtual_tty | 控制虚拟终端执行各种操作,如启动终端、输入命令、获取输出等。 |
230
223
 
231
224
 
@@ -235,7 +228,7 @@ jarvis-methodology --help
235
228
  ---
236
229
  ## 🛠️ 扩展开发 <a id="extensions"></a>
237
230
  ### 添加新工具
238
- 在 `~/.jarvis/tools/》 中创建新的 Python 文件:
231
+ 在 `~/.jarvis/tools/` 中创建新的 Python 文件:
239
232
  ```python
240
233
  from typing import Dict, Any
241
234
  from jarvis.utils import OutputType, PrettyOutput
@@ -284,7 +277,7 @@ class CustomTool:
284
277
 
285
278
 
286
279
  ### 添加新大模型平台
287
- 在 `~/.jarvis/platforms/》 中创建新的 Python 文件:
280
+ 在 `~/.jarvis/platforms/` 中创建新的 Python 文件:
288
281
  ```python
289
282
  from jarvis.jarvis_platform.base import BasePlatform
290
283
  class CustomPlatform(BasePlatform):
@@ -8,6 +8,7 @@
8
8
 
9
9
  *您的智能开发和系统交互助手*
10
10
 
11
+ [视频介绍](#video-introduction) •
11
12
  [快速开始](#quick-start) •
12
13
  [配置说明](#configuration) •
13
14
  [工具说明](#tools) •
@@ -18,6 +19,11 @@
18
19
 
19
20
  ---
20
21
 
22
+ ## 📺 视频介绍<a id="video-introduction"></a>
23
+
24
+ [![视频介绍](docs/images/intro.png)](https://player.bilibili.com/player.html?isOutside=true&aid=114306578382907&bvid=BV1x2dAYeEpM&cid=29314583629&p=1)
25
+
26
+
21
27
  ## 🚀 快速开始 <a id="quick-start"></a>
22
28
  ### 安装
23
29
  ```bash
@@ -120,13 +126,12 @@ jarvis-methodology --help
120
126
  |------|----------|--------|------|
121
127
  | 核心配置 | `JARVIS_MAX_TOKEN_COUNT` | 102400000 | 上下文窗口的最大token数量 |
122
128
  | 核心配置 | `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 |
123
- | 核心配置 | `JARVIS_THREAD_COUNT` | 1 | 并行处理的线程数量 |
124
- | 核心配置 | `JARVIS_AUTO_COMPLETE` | false | 是否启用自动补全功能
129
+ | 核心配置 | `JARVIS_AUTO_COMPLETE` | false | 是否启用自动完成功能(任务判定完成的时候会自动终止) |
125
130
  | 核心配置 | `JARVIS_SHELL_NAME` | bash | 系统shell名称 |
126
131
  | 核心配置 | `JARVIS_PLATFORM` | yuanbao | 默认AI平台 |
127
132
  | 核心配置 | `JARVIS_MODEL` | deep_seek_v3 | 默认模型 |
128
- | 核心配置 | `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 思考任务使用的平台 |
129
- | 核心配置 | `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 思考任务使用的模型 |
133
+ | 核心配置 | `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 推理任务使用的平台 |
134
+ | 核心配置 | `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 |
130
135
  | 核心配置 | `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
131
136
  | 核心配置 | `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | true | 应用补丁前是否需要确认 |
132
137
  | 核心配置 | `JARVIS_MAX_TOOL_CALL_COUNT` | 20 | 最大连续工具调用次数 |
@@ -141,17 +146,17 @@ jarvis-methodology --help
141
146
  | ask_user | 交互式用户输入收集 |
142
147
  | chdir | 更改当前工作目录 |
143
148
  | code_plan | 理解需求并制定详细的代码修改计划,在修改前获取用户确认 |
144
- | create_code_agent | 代码开发工具,当需要修改代码时使用,如果只是简单文件修改,使用文件操作或者脚本即可 |
149
+ | create_code_agent | 代码开发工具,当需要修改代码时使用 |
145
150
  | create_sub_agent | 创建子代理以处理特定任务,子代理将生成任务总结报告 |
146
151
  | execute_script | 执行脚本并返回结果,支持任意解释器。 |
147
152
  | file_analyzer | 分析文件内容并提取关键信息。支持的文件:文本文件、word文档、pdf文件、图片 |
148
- | file_operation | 文件批量操作工具,可批量读写多个文件,支持文本、PDF、Word、Excel、PPT等格式,适用于需要同时处理多个文件的场景(读取配置文件、保存生成内容等) |
153
+ | file_operation | 文件批量操作工具,可批量读写多个文件,支持文本文件,适用于需要同时处理多个文件的场景(读取配置文件、保存生成内容等) |
149
154
  | find_methodology | 方法论查找工具,用于在执行过程中查看历史方法论辅助决策 |
150
155
  | lsp_get_diagnostics | 获取代码诊断信息(错误、警告) |
151
- | methodology | 经验管理工具,支持添加、更新和删除操作 |
156
+ | methodology | 方法论管理工具,支持添加、更新和删除操作 |
152
157
  | read_code | 代码阅读与分析工具,用于读取源代码文件并添加行号,针对代码文件优化,提供更好的格式化输出和行号显示,适用于代码分析、审查和理解代码实现的场景 |
153
- | read_webpage | 读取网页内容,提取标题、文本和超链接 |
154
- | search_web | 使用bing进行网络搜索 |
158
+ | read_webpage | 读取网页内容并分析 |
159
+ | search_web | 使用互联网搜索 |
155
160
  | virtual_tty | 控制虚拟终端执行各种操作,如启动终端、输入命令、获取输出等。 |
156
161
 
157
162
 
@@ -161,7 +166,7 @@ jarvis-methodology --help
161
166
  ---
162
167
  ## 🛠️ 扩展开发 <a id="extensions"></a>
163
168
  ### 添加新工具
164
- 在 `~/.jarvis/tools/》 中创建新的 Python 文件:
169
+ 在 `~/.jarvis/tools/` 中创建新的 Python 文件:
165
170
  ```python
166
171
  from typing import Dict, Any
167
172
  from jarvis.utils import OutputType, PrettyOutput
@@ -210,7 +215,7 @@ class CustomTool:
210
215
 
211
216
 
212
217
  ### 添加新大模型平台
213
- 在 `~/.jarvis/platforms/》 中创建新的 Python 文件:
218
+ 在 `~/.jarvis/platforms/` 中创建新的 Python 文件:
214
219
  ```python
215
220
  from jarvis.jarvis_platform.base import BasePlatform
216
221
  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.148"
11
+ version = "0.1.150"
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" }]
@@ -22,32 +26,20 @@ classifiers = [
22
26
  ]
23
27
  keywords = ["jarvis", "ai", "assistant", "tools", "automation"]
24
28
  dependencies = [
25
- "requests>=2.25.1",
26
- "pyyaml>=5.1",
27
- "colorama>=0.4.6",
28
- "prompt_toolkit>=3.0.0",
29
- "openai>=1.20.0",
30
- "numpy>=1.19.5",
31
- "faiss-cpu>=1.8.0",
32
- "sentence-transformers>=2.2.2",
33
- "bs4>=0.0.1",
34
- "PyMuPDF>=1.21.0",
35
- "python-docx>=0.8.11",
36
- "tiktoken>=0.3.0",
37
- "tqdm>=4.65.0",
38
- "docx>=0.2.4",
39
- "yaspin>=2.4.0",
40
- "rich>=13.3.1",
41
- "pygments>=2.15.0",
42
- "fuzzywuzzy>=0.18.0",
43
- "python-Levenshtein>=0.25.0",
44
- "jedi>=0.17.2",
45
- "psutil>=7.0.0",
46
- "fastapi>=0.115.4",
47
- "uvicorn>=0.33.0",
48
- "python-pptx>=1.0.0",
49
- "pandas>=2.0.0",
50
- "html2text>=2024.2.26",
29
+ "requests==2.32.3",
30
+ "colorama==0.4.6",
31
+ "prompt_toolkit==3.0.50",
32
+ "yaspin==2.4.0",
33
+ "pygments==2.19.1",
34
+ "fuzzywuzzy==0.18.0",
35
+ "jedi==0.19.2",
36
+ "fastapi==0.115.12",
37
+ "uvicorn==0.33.0",
38
+ "rich==14.0.0",
39
+ "transformers==4.46.3",
40
+ "torch==2.4.1",
41
+ "python-Levenshtein==0.25.1",
42
+ "sseclient==0.0.27",
51
43
  ]
52
44
  requires-python = ">=3.8"
53
45
 
@@ -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.148",
5
+ version="0.1.150",
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",
@@ -13,32 +13,20 @@ setup(
13
13
  package_dir={"": "src"},
14
14
  include_package_data=True,
15
15
  install_requires=[
16
- "requests>=2.25.1",
17
- "pyyaml>=5.1",
18
- "colorama>=0.4.6",
19
- "prompt_toolkit>=3.0.0",
20
- "openai>=1.20.0",
21
- "numpy>=1.19.5",
22
- "faiss-cpu>=1.8.0",
23
- "sentence-transformers>=2.2.2",
24
- "bs4>=0.0.1",
25
- "PyMuPDF>=1.21.0",
26
- "python-docx>=0.8.11",
27
- "tiktoken>=0.3.0",
28
- "tqdm>=4.65.0",
29
- "docx>=0.2.4",
30
- "yaspin>=2.4.0",
31
- "rich>=13.3.1",
32
- "pygments>=2.15.0",
33
- "fuzzywuzzy>=0.18.0",
34
- "python-Levenshtein>=0.25.0",
35
- "jedi>=0.17.2",
36
- "psutil>=7.0.0",
37
- "fastapi>=0.115.4",
38
- "uvicorn>=0.33.0",
39
- "python-pptx>=1.0.0",
40
- "pandas>=2.0.0",
41
- "html2text>=2024.2.26",
16
+ "requests==2.32.3",
17
+ "colorama==0.4.6",
18
+ "prompt_toolkit==3.0.50",
19
+ "yaspin==2.4.0",
20
+ "pygments==2.19.1",
21
+ "fuzzywuzzy==0.18.0",
22
+ "jedi==0.19.2",
23
+ "fastapi==0.115.12",
24
+ "uvicorn==0.33.0",
25
+ "rich==14.0.0",
26
+ "transformers==4.46.3",
27
+ "torch==2.4.1",
28
+ "python-Levenshtein==0.25.1",
29
+ "sseclient==0.0.27",
42
30
  ],
43
31
  entry_points={
44
32
  "console_scripts": [
@@ -1,3 +1,3 @@
1
1
  """Jarvis AI Assistant"""
2
2
 
3
- __version__ = "0.1.148"
3
+ __version__ = "0.1.150"
@@ -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():
@@ -1,7 +1,6 @@
1
1
  import argparse
2
2
  import yaml
3
3
  import os
4
- from typing import Optional, List
5
4
  from jarvis.jarvis_agent import Agent
6
5
  from jarvis.jarvis_utils.input import get_multiline_input
7
6
  from jarvis.jarvis_utils.output import PrettyOutput, OutputType
@@ -238,7 +238,8 @@ def revert_file(filepath: str):
238
238
  # 检查文件是否在版本控制中
239
239
  result = subprocess.run(
240
240
  ['git', 'ls-files', '--error-unmatch', filepath],
241
- stderr=subprocess.PIPE
241
+ stderr=subprocess.PIPE,
242
+ text=False # 禁用自动文本解码
242
243
  )
243
244
  if result.returncode == 0:
244
245
  subprocess.run(['git', 'checkout', 'HEAD',
@@ -248,33 +249,67 @@ def revert_file(filepath: str):
248
249
  os.remove(filepath)
249
250
  subprocess.run(['git', 'clean', '-f', '--', filepath], check=True)
250
251
  except subprocess.CalledProcessError as e:
251
- PrettyOutput.print(f"恢复文件失败: {str(e)}", OutputType.ERROR)
252
+ error_msg = e.stderr.decode('utf-8', errors='replace') if e.stderr else str(e)
253
+ PrettyOutput.print(f"恢复文件失败: {error_msg}", OutputType.ERROR)
252
254
  # 修改后的恢复函数
253
255
 
254
256
 
255
257
  def revert_change():
258
+ """恢复所有未提交的修改到HEAD状态"""
256
259
  import subprocess
257
- subprocess.run(['git', 'reset', '--hard', 'HEAD'], check=True)
258
- subprocess.run(['git', 'clean', '-fd'], check=True)
260
+ try:
261
+ # 检查是否为空仓库
262
+ head_check = subprocess.run(
263
+ ['git', 'rev-parse', '--verify', 'HEAD'],
264
+ stderr=subprocess.PIPE,
265
+ stdout=subprocess.PIPE
266
+ )
267
+ if head_check.returncode == 0:
268
+ subprocess.run(['git', 'reset', '--hard', 'HEAD'], check=True)
269
+ subprocess.run(['git', 'clean', '-fd'], check=True)
270
+ except subprocess.CalledProcessError as e:
271
+ return f"恢复更改失败: {str(e)}"
259
272
  # 修改后的获取差异函数
260
273
 
261
274
 
262
275
  def get_diff() -> str:
263
276
  """使用git获取暂存区差异"""
264
277
  import subprocess
278
+
279
+ # 初始化状态
280
+ need_reset = False
281
+
265
282
  try:
283
+ # 暂存所有修改
266
284
  subprocess.run(['git', 'add', '.'], check=True)
285
+ need_reset = True
286
+
287
+ # 获取差异
267
288
  result = subprocess.run(
268
289
  ['git', 'diff', '--cached'],
269
290
  capture_output=True,
270
- text=True,
291
+ text=False,
271
292
  check=True
272
293
  )
273
- ret = result.stdout
274
- subprocess.run(['git', "reset", "--mixed", "HEAD"], check=True)
294
+
295
+ # 解码输出
296
+ try:
297
+ ret = result.stdout.decode('utf-8')
298
+ except UnicodeDecodeError:
299
+ ret = result.stdout.decode('utf-8', errors='replace')
300
+
301
+ # 重置暂存区
302
+ subprocess.run(['git', "reset", "--mixed"], check=False)
275
303
  return ret
304
+
276
305
  except subprocess.CalledProcessError as e:
306
+ if need_reset:
307
+ subprocess.run(['git', "reset", "--mixed"], check=False)
277
308
  return f"获取差异失败: {str(e)}"
309
+ except Exception as e:
310
+ if need_reset:
311
+ subprocess.run(['git', "reset", "--mixed"], check=False)
312
+ return f"发生意外错误: {str(e)}"
278
313
 
279
314
 
280
315
  def handle_commit_workflow() -> bool:
@@ -4,7 +4,6 @@ import os
4
4
  import re
5
5
  import tempfile
6
6
 
7
- from httpx import get
8
7
  from yaspin import yaspin
9
8
  from jarvis.jarvis_platform.registry import PlatformRegistry
10
9
  from jarvis.jarvis_tools.read_code import ReadCodeTool
@@ -3,7 +3,6 @@ import shlex
3
3
  import subprocess
4
4
  from typing import Dict, Any, Optional
5
5
  import tempfile
6
- from click import Option
7
6
  import yaml
8
7
  from yaspin import yaspin
9
8
  from jarvis.jarvis_platform.registry import PlatformRegistry
@@ -1,5 +1,5 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import List, Dict, Optional, Tuple, Any, Union
2
+ from typing import List, Dict, Any, Union
3
3
 
4
4
  class BaseLSP(ABC):
5
5
  """Base class for Language Server Protocol integration.
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  import shutil
3
3
  import subprocess
4
- from typing import List, Dict, Optional, Tuple, Any
4
+ from typing import List, Dict, Optional, Any
5
5
  import json
6
6
  from jarvis.jarvis_lsp.base import BaseLSP
7
7
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  import shutil
3
3
  import subprocess
4
- from typing import List, Dict, Optional, Tuple, Any
4
+ from typing import List, Dict, Optional, Any
5
5
  import json
6
6
  from jarvis.jarvis_lsp.base import BaseLSP
7
7
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
@@ -1,4 +1,4 @@
1
- from typing import List, Dict, Optional, Tuple, Any
1
+ from typing import List, Dict, Any
2
2
  import jedi
3
3
  from jarvis.jarvis_lsp.base import BaseLSP
4
4
 
@@ -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)
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  import shutil
3
3
  import subprocess
4
- from typing import List, Dict, Optional, Tuple, Any
4
+ from typing import List, Dict, Optional, Any
5
5
  import json
6
6
  from jarvis.jarvis_lsp.base import BaseLSP
7
7
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
@@ -0,0 +1,36 @@
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
+