jarvis-ai-assistant 0.2.1__py3-none-any.whl → 0.2.2__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.
Files changed (30) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/jarvis.py +61 -59
  3. jarvis/jarvis_agent/main.py +42 -40
  4. jarvis/jarvis_code_agent/code_agent.py +35 -31
  5. jarvis/jarvis_code_analysis/code_review.py +73 -39
  6. jarvis/jarvis_git_squash/main.py +16 -12
  7. jarvis/jarvis_git_utils/git_commiter.py +25 -20
  8. jarvis/jarvis_methodology/main.py +34 -49
  9. jarvis/jarvis_multi_agent/main.py +28 -23
  10. jarvis/jarvis_platform/ai8.py +31 -22
  11. jarvis/jarvis_platform/kimi.py +31 -61
  12. jarvis/jarvis_platform/tongyi.py +62 -76
  13. jarvis/jarvis_platform/yuanbao.py +44 -50
  14. jarvis/jarvis_platform_manager/main.py +55 -90
  15. jarvis/jarvis_smart_shell/main.py +58 -87
  16. jarvis/jarvis_tools/cli/main.py +120 -153
  17. jarvis/jarvis_tools/registry.py +1 -7
  18. jarvis/jarvis_tools/search_web.py +12 -10
  19. jarvis/jarvis_utils/http.py +58 -79
  20. jarvis/jarvis_utils/output.py +1 -1
  21. jarvis_ai_assistant-0.2.2.dist-info/METADATA +228 -0
  22. {jarvis_ai_assistant-0.2.1.dist-info → jarvis_ai_assistant-0.2.2.dist-info}/RECORD +26 -29
  23. {jarvis_ai_assistant-0.2.1.dist-info → jarvis_ai_assistant-0.2.2.dist-info}/entry_points.txt +0 -2
  24. jarvis/jarvis_git_details/__init__.py +0 -0
  25. jarvis/jarvis_git_details/main.py +0 -265
  26. jarvis/jarvis_platform/oyi.py +0 -357
  27. jarvis_ai_assistant-0.2.1.dist-info/METADATA +0 -845
  28. {jarvis_ai_assistant-0.2.1.dist-info → jarvis_ai_assistant-0.2.2.dist-info}/WHEEL +0 -0
  29. {jarvis_ai_assistant-0.2.1.dist-info → jarvis_ai_assistant-0.2.2.dist-info}/licenses/LICENSE +0 -0
  30. {jarvis_ai_assistant-0.2.1.dist-info → jarvis_ai_assistant-0.2.2.dist-info}/top_level.txt +0 -0
@@ -1,140 +1,120 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- import httpx
4
- from typing import Any, Dict, Optional, Union, AsyncGenerator, Generator
3
+ import requests
4
+ from typing import Any, Dict, Optional, Generator
5
5
 
6
6
 
7
- def get_httpx_client() -> httpx.Client:
7
+ def get_requests_session() -> requests.Session:
8
8
  """
9
- 获取一个配置好的 httpx.Client 对象
9
+ 获取一个配置好的 requests.Session 对象
10
10
 
11
11
  返回:
12
- httpx.Client 对象
12
+ requests.Session 对象
13
13
  """
14
- client = httpx.Client(
15
- timeout=httpx.Timeout(None), # 永不超时
16
- headers={
14
+ session = requests.Session()
15
+ session.headers.update(
16
+ {
17
17
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
18
- },
18
+ }
19
19
  )
20
- return client
20
+ return session
21
21
 
22
22
 
23
- def get_async_httpx_client() -> httpx.AsyncClient:
24
- """
25
- 获取一个配置好的 httpx.AsyncClient 对象
26
-
27
- 返回:
28
- httpx.AsyncClient 对象
29
- """
30
- client = httpx.AsyncClient(
31
- timeout=httpx.Timeout(None), # 永不超时
32
- headers={
33
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
34
- },
35
- )
36
- return client
37
-
38
-
39
- # 增强版本的 HTTP 请求方法(使用 httpx 实现,带重试机制,解决连接中断问题)
23
+ # 增强版本的 HTTP 请求方法(使用 requests 实现)
40
24
  def post(
41
25
  url: str,
42
26
  data: Optional[Any] = None,
43
27
  json: Optional[Dict[str, Any]] = None,
44
28
  **kwargs,
45
- ) -> httpx.Response:
29
+ ) -> requests.Response:
46
30
  """
47
- 发送增强版永不超时的 POST 请求,使用 httpx 实现,包含重试机制
31
+ 发送增强版永不超时的 POST 请求,使用 requests 实现
48
32
 
49
33
  参数:
50
34
  url: 请求的 URL
51
35
  data: (可选) 请求体数据 (表单数据或原始数据)
52
36
  json: (可选) JSON 数据,会自动设置 Content-Type
53
- **kwargs: 其他传递给 httpx.post 的参数
37
+ **kwargs: 其他传递给 requests.post 的参数
54
38
 
55
39
  返回:
56
- httpx.Response 对象
40
+ requests.Response 对象
57
41
 
58
42
  注意:
59
- 此方法使用 httpx 实现,包含自动重试机制,适用于解决"Response ended prematurely"等连接问题
43
+ 此方法使用 requests 实现。要实现重试,请考虑使用 Session 和 HTTPAdapter。
44
+ 永不超时通过 timeout=None 设置。
60
45
  """
61
- client = get_httpx_client()
62
- try:
63
- response = client.post(url=url, data=data, json=json, **kwargs)
46
+ kwargs.setdefault("timeout", None)
47
+ with get_requests_session() as session:
48
+ response = session.post(url=url, data=data, json=json, **kwargs)
64
49
  response.raise_for_status()
65
50
  return response
66
- finally:
67
- client.close()
68
51
 
69
52
 
70
- def get(url: str, **kwargs) -> httpx.Response:
53
+ def get(url: str, **kwargs) -> requests.Response:
71
54
  """
72
- 发送增强版永不超时的 GET 请求,使用 httpx 实现,包含重试机制
55
+ 发送增强版永不超时的 GET 请求,使用 requests 实现
73
56
 
74
57
  参数:
75
58
  url: 请求的 URL
76
- **kwargs: 其他传递给 httpx.get 的参数
59
+ **kwargs: 其他传递给 requests.get 的参数
77
60
 
78
61
  返回:
79
- httpx.Response 对象
62
+ requests.Response 对象
80
63
 
81
64
  注意:
82
- 此方法使用 httpx 实现,包含自动重试机制,适用于解决"Response ended prematurely"等连接问题
65
+ 此方法使用 requests 实现。
66
+ 永不超时通过 timeout=None 设置。
83
67
  """
84
- client = get_httpx_client()
85
- try:
86
- response = client.get(url=url, **kwargs)
68
+ kwargs.setdefault("timeout", None)
69
+ with get_requests_session() as session:
70
+ response = session.get(url=url, **kwargs)
87
71
  response.raise_for_status()
88
72
  return response
89
- finally:
90
- client.close()
91
73
 
92
74
 
93
- def put(url: str, data: Optional[Any] = None, **kwargs) -> httpx.Response:
75
+ def put(url: str, data: Optional[Any] = None, **kwargs) -> requests.Response:
94
76
  """
95
- 发送增强版永不超时的 PUT 请求,使用 httpx 实现,包含重试机制
77
+ 发送增强版永不超时的 PUT 请求,使用 requests 实现
96
78
 
97
79
  参数:
98
80
  url: 请求的 URL
99
81
  data: (可选) 请求体数据 (表单数据或原始数据)
100
- **kwargs: 其他传递给 httpx.put 的参数
82
+ **kwargs: 其他传递给 requests.put 的参数
101
83
 
102
84
  返回:
103
- httpx.Response 对象
85
+ requests.Response 对象
104
86
 
105
87
  注意:
106
- 此方法使用 httpx 实现,包含自动重试机制,适用于解决"Response ended prematurely"等连接问题
88
+ 此方法使用 requests 实现。
89
+ 永不超时通过 timeout=None 设置。
107
90
  """
108
- client = get_httpx_client()
109
- try:
110
- response = client.put(url=url, data=data, **kwargs)
91
+ kwargs.setdefault("timeout", None)
92
+ with get_requests_session() as session:
93
+ response = session.put(url=url, data=data, **kwargs)
111
94
  response.raise_for_status()
112
95
  return response
113
- finally:
114
- client.close()
115
96
 
116
97
 
117
- def delete(url: str, **kwargs) -> httpx.Response:
98
+ def delete(url: str, **kwargs) -> requests.Response:
118
99
  """
119
- 发送增强版永不超时的 DELETE 请求,使用 httpx 实现,包含重试机制
100
+ 发送增强版永不超时的 DELETE 请求,使用 requests 实现
120
101
 
121
102
  参数:
122
103
  url: 请求的 URL
123
- **kwargs: 其他传递给 httpx.delete 的参数
104
+ **kwargs: 其他传递给 requests.delete 的参数
124
105
 
125
106
  返回:
126
- httpx.Response 对象
107
+ requests.Response 对象
127
108
 
128
109
  注意:
129
- 此方法使用 httpx 实现,包含自动重试机制,适用于解决"Response ended prematurely"等连接问题
110
+ 此方法使用 requests 实现。
111
+ 永不超时通过 timeout=None 设置。
130
112
  """
131
- client = get_httpx_client()
132
- try:
133
- response = client.delete(url=url, **kwargs)
113
+ kwargs.setdefault("timeout", None)
114
+ with get_requests_session() as session:
115
+ response = session.delete(url=url, **kwargs)
134
116
  response.raise_for_status()
135
117
  return response
136
- finally:
137
- client.close()
138
118
 
139
119
 
140
120
  # 同步流式POST请求方法
@@ -143,27 +123,26 @@ def stream_post(
143
123
  data: Optional[Any] = None,
144
124
  json: Optional[Dict[str, Any]] = None,
145
125
  **kwargs,
146
- ) -> Generator[bytes, None, None]:
126
+ ) -> Generator[str, None, None]:
147
127
  """
148
- 发送流式 POST 请求,使用 httpx 实现,返回标准 Generator
128
+ 发送流式 POST 请求,使用 requests 实现,返回解码后的字符串行生成器
149
129
 
150
130
  参数:
151
131
  url: 请求的 URL
152
132
  data: (可选) 请求体数据 (表单数据或原始数据)
153
133
  json: (可选) JSON 数据,会自动设置 Content-Type
154
- **kwargs: 其他传递给 httpx.post 的参数
134
+ **kwargs: 其他传递给 requests.post 的参数
155
135
 
156
136
  返回:
157
- Generator[bytes, None, None]: 字节流生成器
137
+ Generator[str, None, None]: 字符串行生成器
158
138
 
159
139
  注意:
160
- 此方法使用 httpx 实现流式请求,适用于处理大文件下载或流式响应
140
+ 此方法使用 requests 实现流式请求,适用于处理大文件下载或流式响应
161
141
  """
162
- client = get_httpx_client()
163
- try:
164
- with client.stream("POST", url, data=data, json=json, **kwargs) as response:
142
+ kwargs.setdefault("timeout", None)
143
+ with get_requests_session() as session:
144
+ with session.post(url, data=data, json=json, stream=True, **kwargs) as response:
165
145
  response.raise_for_status()
166
- for chunk in response.iter_bytes():
167
- yield chunk
168
- finally:
169
- client.close()
146
+ for line in response.iter_lines(chunk_size=1):
147
+ if line:
148
+ yield line.decode("utf-8", errors="ignore")
@@ -131,7 +131,7 @@ class PrettyOutput:
131
131
  """
132
132
  try:
133
133
  lexer = guess_lexer(text)
134
- detected_lang = lexer.name
134
+ detected_lang = lexer.name # type: ignore[attr-defined]
135
135
  return PrettyOutput._lang_map.get(detected_lang, default_lang)
136
136
  except (ClassNotFound, Exception):
137
137
  return default_lang
@@ -0,0 +1,228 @@
1
+ Metadata-Version: 2.4
2
+ Name: jarvis-ai-assistant
3
+ Version: 0.2.2
4
+ Summary: Jarvis: An AI assistant that uses tools to interact with the system
5
+ Home-page: https://github.com/skyfireitdiy/Jarvis
6
+ Author: skyfire
7
+ Author-email: skyfire <skyfireitdiy@hotmail.com>
8
+ License: MIT License
9
+
10
+ Copyright (c) 2025 skyfire
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ Project-URL: Homepage, https://github.com/skyfireitdiy/Jarvis
30
+ Keywords: jarvis,ai,assistant,tools,automation
31
+ Classifier: Development Status :: 3 - Alpha
32
+ Classifier: Intended Audience :: Developers
33
+ Classifier: License :: OSI Approved :: MIT License
34
+ Classifier: Operating System :: POSIX :: Linux
35
+ Classifier: Programming Language :: Python :: 3
36
+ Classifier: Programming Language :: Python :: 3.9
37
+ Classifier: Programming Language :: Python :: 3.10
38
+ Classifier: Programming Language :: Python :: 3.11
39
+ Classifier: Programming Language :: Python :: 3.12
40
+ Requires-Python: >=3.9
41
+ Description-Content-Type: text/markdown
42
+ License-File: LICENSE
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: pygments==2.19.1
47
+ Requires-Dist: fuzzywuzzy==0.18.0
48
+ Requires-Dist: fastapi==0.115.12
49
+ Requires-Dist: uvicorn==0.33.0
50
+ Requires-Dist: rich==14.0.0
51
+ Requires-Dist: python-Levenshtein==0.25.1
52
+ Requires-Dist: tiktoken==0.7.0
53
+ Requires-Dist: pillow==10.2.0
54
+ Requires-Dist: openai==1.78.1
55
+ Requires-Dist: tabulate==0.9.0
56
+ Requires-Dist: pyte==0.8.2
57
+ Requires-Dist: pyyaml>=5.3.1
58
+ Requires-Dist: ddgs==9.0.2
59
+ Requires-Dist: lxml==6.0.0
60
+ Requires-Dist: markdownify>=1.1.0
61
+ Provides-Extra: dev
62
+ Requires-Dist: pytest; extra == "dev"
63
+ Requires-Dist: black; extra == "dev"
64
+ Requires-Dist: isort; extra == "dev"
65
+ Requires-Dist: mypy; extra == "dev"
66
+ Requires-Dist: build; extra == "dev"
67
+ Requires-Dist: twine; extra == "dev"
68
+ Provides-Extra: rag
69
+ Requires-Dist: langchain; extra == "rag"
70
+ Requires-Dist: langchain-community; extra == "rag"
71
+ Requires-Dist: langchain-huggingface; extra == "rag"
72
+ Requires-Dist: chromadb; extra == "rag"
73
+ Requires-Dist: diskcache; extra == "rag"
74
+ Requires-Dist: sentence-transformers==2.7.0; extra == "rag"
75
+ Requires-Dist: torch>=2.6; extra == "rag"
76
+ Requires-Dist: typer; extra == "rag"
77
+ Requires-Dist: unstructured[md]; extra == "rag"
78
+ Requires-Dist: rank-bm25; extra == "rag"
79
+ Dynamic: author
80
+ Dynamic: home-page
81
+ Dynamic: license-file
82
+ Dynamic: requires-python
83
+
84
+ # 🤖 Jarvis AI 助手
85
+ <p align="center">
86
+ <img src="docs/images/jarvis-logo.png" alt="Jarvis Logo" width="200"/>
87
+ </p>
88
+ <div align="center">
89
+
90
+ [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
91
+
92
+ *您的智能开发和系统交互助手*
93
+
94
+ [快速开始](#quick-start) • [核心功能](#core-features) • [配置说明](#configuration) • [Jarvis Book](#jarvis-book) • [技术细节](docs/technical_documentation.md) • [Wiki文档](https://deepwiki.com/skyfireitdiy/Jarvis) • [贡献指南](#contributing) • [许可证](#license)
95
+ </div>
96
+
97
+ ---
98
+
99
+ ## 🚀 快速开始 <a id="quick-start"></a>
100
+
101
+ ### 系统要求
102
+ - **Linux**: 完全支持。
103
+ - **Windows**: 未经充分测试,建议在 [WSL](https://docs.microsoft.com/en-us/windows/wsl/install) 中使用。
104
+
105
+ ### 安装
106
+
107
+ #### 一键安装 (推荐)
108
+ 只需一行命令即可完成所有安装和配置:
109
+ ```bash
110
+ bash -c "$(curl -fsSL https://raw.githubusercontent.com/skyfireitdiy/Jarvis/main/scripts/install.sh)"
111
+ ```
112
+ > 该脚本会自动检测Python环境、克隆项目、安装依赖并设置好路径。
113
+
114
+ #### 手动安装
115
+ ```bash
116
+ git clone https://github.com/skyfireitdiy/Jarvis
117
+ cd Jarvis
118
+ pip3 install -e .
119
+ ```
120
+ 或者从PyPI安装 (可能不是最新版):
121
+ ```bash
122
+ pip3 install jarvis-ai-assistant
123
+ ```
124
+
125
+ ### 基本使用
126
+ Jarvis 包含一系列专注于不同任务的工具。以下是主要命令及其快捷方式:
127
+
128
+ | 命令 | 快捷方式 | 功能描述 |
129
+ |------|----------|----------|
130
+ | `jarvis` | `jvs` | 通用AI代理,适用于多种任务 |
131
+ | `jarvis-code-agent` | `jca` | 专注于代码分析、修改和生成的代码代理 |
132
+ | `jarvis-git-commit` | `jgc` | 自动化分析代码变更并生成规范的Git提交信息 |
133
+ | `jarvis-platform-manager` | `jpm` | 管理和测试不同的大语言模型平台 |
134
+ | `jarvis-rag` | `jrg` | 构建和查询本地化的RAG知识库 |
135
+ | `jarvis-smart-shell` | `jss` | 实验性的智能Shell功能 |
136
+
137
+ 更多详细用法和参数,请查阅我们的 [**Wiki 文档**](https://deepwiki.com/skyfireitdiy/Jarvis)。
138
+
139
+ ---
140
+
141
+ ## 🌟 核心功能 <a id="core-features"></a>
142
+
143
+ - **🆓 零成本接入**: 无缝集成腾讯元宝、Kimi等优质模型,无需支付API费用。
144
+ - **🛠️ 工具驱动**: 内置丰富工具集,涵盖脚本执行、代码开发、网页搜索、终端操作等。
145
+ - **🤖 人机协作**: 支持实时交互,用户可随时介入指导,确保AI行为符合预期。
146
+ - **🔌 高度可扩展**: 支持自定义工具、模型平台和MCP,轻松打造个性化工作流。
147
+ - **🧠 RAG 增强**: 内置RAG功能,可将本地文档作为知识库,实现精准问答。
148
+
149
+ ### 视频演示
150
+ - [使用`jca`为Jarvis快速扩展功能](https://www.bilibili.com/video/BV1TCgLzvE6Q/)
151
+ - [10分钟搭建aarch64容器化Rust开发环境](https://www.bilibili.com/video/BV1K3ghzkEzZ/)
152
+ - [`jarvis-code-agent` 功能演示](https://www.bilibili.com/video/BV1KugbzKE6U/)
153
+
154
+ ---
155
+
156
+ ## ⚙️ 配置说明 <a id="configuration"></a>
157
+
158
+ Jarvis 的主要配置文件位于 `~/.jarvis/config.yaml`。您可以在此文件中配置模型、平台和其他行为。
159
+
160
+ **基本配置示例 (腾讯元宝):**
161
+ ```yaml
162
+ # ~/.jarvis/config.yaml
163
+
164
+ # 使用的模型平台
165
+ JARVIS_PLATFORM: yuanbao
166
+ JARVIS_MODEL: deep_seek_v3
167
+
168
+ # 用于“思考”步骤的模型,通常选择能力更强的模型
169
+ JARVIS_THINKING_PLATFORM: yuanbao
170
+ JARVIS_THINKING_MODEL: deep_seek
171
+
172
+ # 平台所需的环境变量
173
+ ENV:
174
+ YUANBAO_COOKIES: "在此处粘贴您的元宝Cookies"
175
+ ```
176
+
177
+ Jarvis 支持多种平台,包括 **Kimi**, **通义千问**, **OpenAI** 等。详细的配置选项、模型组设置以及所有可用参数,请参阅 [**配置文档**](https://deepwiki.com/skyfireitdiy/Jarvis)。
178
+
179
+ ---
180
+
181
+ ## 🛠️ 扩展开发 <a id="extensions"></a>
182
+
183
+ Jarvis 被设计为高度可扩展的框架。您可以轻松地:
184
+ - **添加新工具**: 在 `~/.jarvis/tools/` 目录下创建新的工具实现。
185
+ - **集成新LLM平台**: 在 `~/.jarvis/platforms/` 目录下添加新的平台适配器。
186
+ - **定义MCP**: 通过配置文件集成外部或自定义的命令协议。
187
+
188
+ 有关扩展开发的详细指南和[**技术细节**](docs/technical_documentation.md),请访问我们的 [**开发者文档**](https://deepwiki.com/skyfireitdiy/Jarvis)。
189
+
190
+ ---
191
+
192
+ ## 📖 Jarvis Book <a id="jarvis-book"></a>
193
+
194
+ 欢迎阅读 Jarvis 的官方文档,这本开源书籍旨在为您提供从入门到精通的全方位指南。
195
+
196
+ - **[第一章:项目介绍](docs/jarvis_book/1.项目介绍.md)**
197
+ - **[第二章:快速开始](docs/jarvis_book/2.快速开始.md)**
198
+ - **[第三章:核心概念与架构](docs/jarvis_book/3.核心概念与架构.md)**
199
+ - **[第四章:使用指南](docs/jarvis_book/4.使用指南.md)**
200
+ - **[第五章:工具开发](docs/jarvis_book/5.工具开发.md)**
201
+ - **[第六章:高级主题](docs/jarvis_book/6.高级主题.md)**
202
+ - **[第七章:参与贡献](docs/jarvis_book/7.参与贡献.md)**
203
+ - **[第八章:常见问题](docs/jarvis_book/8.常见问题.md)**
204
+ - **[第九章:附录](docs/jarvis_book/9.附录.md)**
205
+
206
+ ---
207
+
208
+ ## 🤝 贡献指南 <a id="contributing"></a>
209
+
210
+ 我们欢迎任何形式的贡献!
211
+ 1. Fork 本仓库
212
+ 2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`)
213
+ 3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`)
214
+ 4. 推送到分支 (`git push origin feature/AmazingFeature`)
215
+ 5. 开启一个 Pull Request
216
+
217
+ ---
218
+
219
+ ## 📄 许可证 <a id="license"></a>
220
+
221
+ 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。
222
+
223
+ ---
224
+ <div align="center">
225
+ 由 Jarvis 团队用 ❤️ 制作
226
+ </div>
227
+
228
+ ![Jarvis技术支持群](docs/images/wechat.png)
@@ -1,9 +1,9 @@
1
- jarvis/__init__.py,sha256=7YS_CmhWeXPE4rP8NAcZnRuHXCr7rFpRpDd4pK4v2GQ,73
1
+ jarvis/__init__.py,sha256=rtajFgNEXT7gc8K28B_xDpASjeMEaIwc9yBA9fWhG6E,73
2
2
  jarvis/jarvis_agent/__init__.py,sha256=BmBbMUsCwe_0znrwxSipaKj-MuOgJTZvLbyKzBFfpic,22559
3
3
  jarvis/jarvis_agent/builtin_input_handler.py,sha256=Qs4LAr4xdKLBJpQE81YP4CkucAop86ms0iVoKa1nnso,2468
4
4
  jarvis/jarvis_agent/edit_file_handler.py,sha256=ml1o-BE2Ca1-ybPlKuhstLQYwdJag39o0_-PXTUvFaE,11646
5
- jarvis/jarvis_agent/jarvis.py,sha256=dRJWrMbZnxo5g7_5-x9IPypPYynUhMIYBVlqtlOlOb0,7969
6
- jarvis/jarvis_agent/main.py,sha256=ufMQsv1-9wU2E3UAyu48oITwFSIBVFsUfnlhDZ7dWbU,3293
5
+ jarvis/jarvis_agent/jarvis.py,sha256=PQ2dHPWeCAHL4JCk-_oYa26pP2bIWUdokkO-VW7-6h0,8185
6
+ jarvis/jarvis_agent/main.py,sha256=IM9_AsCmTw4QYLp3AMF97kRGctQC2pEIZls6zxZgUSQ,3319
7
7
  jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
8
8
  jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh2lC__p40,1705
9
9
  jarvis/jarvis_agent/prompts.py,sha256=e8i-3kaGr96mlzL3UUhQUHFDfbJSoE4xiF9TDksNDm4,7720
@@ -12,9 +12,9 @@ jarvis/jarvis_agent/session_manager.py,sha256=DnvI9rWkVmkyO1XfKZyo9lTn4ajg4ccwzE
12
12
  jarvis/jarvis_agent/shell_input_handler.py,sha256=1IboqdxcJuoIqRpmDU10GugR9fWXUHyCEbVF4nIWbyo,1328
13
13
  jarvis/jarvis_agent/tool_executor.py,sha256=nIq-sPNgrtimtM-IHpN09cWmId8jDzWRdCFoRzXnnoo,1721
14
14
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- jarvis/jarvis_code_agent/code_agent.py,sha256=YQYeaFx-dlf5p6_vw7T4mmtwyqQkytlxMUWDhF2V3_Y,18659
15
+ jarvis/jarvis_code_agent/code_agent.py,sha256=n0_sOXuGgzSQKLUj64ap0lWqKR67RZPnO3jpl2YD7MI,18681
16
16
  jarvis/jarvis_code_agent/lint.py,sha256=LZPsfyZPMo7Wm7LN4osZocuNJwZx1ojacO3MlF870x8,4009
17
- jarvis/jarvis_code_analysis/code_review.py,sha256=eyezZ64ffiNC8vIHF-BZ1cF9cTnk1NdpuUXfoa-jWpc,30971
17
+ jarvis/jarvis_code_analysis/code_review.py,sha256=3oRxB4Ks2lbnzQpPWFU6cpwpVz1sWtQ7OAT-kwZOUSI,32150
18
18
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
19
19
  jarvis/jarvis_code_analysis/checklists/c_cpp.py,sha256=9t62bMqs6qTkFSio4SKkj88qyb5ZubWrw3MxJBQ4X1A,1317
20
20
  jarvis/jarvis_code_analysis/checklists/csharp.py,sha256=ShPXrl2_UPAnGaCHAG2wLl90COG3HK2XCSr1UK2dxN4,2420
@@ -37,30 +37,27 @@ jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQ
37
37
  jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
38
38
  jarvis/jarvis_data/config_schema.json,sha256=XpQ7aaHMW-YCuFrnaAEjMWrnv6a8B7MqGjm2XgrvtgQ,8573
39
39
  jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
40
- jarvis/jarvis_git_details/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- jarvis/jarvis_git_details/main.py,sha256=DE1DcX-1lvUsb_K-FExpHs3NBRmo5KZb53PGa8QFBOc,8875
42
40
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
- jarvis/jarvis_git_squash/main.py,sha256=2nwX-Ghphn97Ua0SXPJIxix-rgm_Z9KRkrovjpSklUk,2311
44
- jarvis/jarvis_git_utils/git_commiter.py,sha256=Yir26RyvoToTmkeh1-cFnG3LE3fH7z2njPOK3FIpQDc,12801
41
+ jarvis/jarvis_git_squash/main.py,sha256=8_ADMTGi8Z41mqKCed4zHOd3nZCqEDWfqVLWpnYvCnE,2263
42
+ jarvis/jarvis_git_utils/git_commiter.py,sha256=fJ97nvvDt-0E8E4PbeMvptx_yoJXFAObhaPVb3mjO_g,12676
45
43
  jarvis/jarvis_mcp/__init__.py,sha256=OPMtjD-uq9xAaKCRIDyKIosaFfBe1GBPu1az-mQ0rVM,2048
46
44
  jarvis/jarvis_mcp/sse_mcp_client.py,sha256=AhYLPQb0mE9-6ZQw1JesRNyEy0esJumNEFb5LyzyIn0,22612
47
45
  jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=APYUksYKlMx7AVNODKOLrTkKZPnp4kqTQIYIuNDDKko,11286
48
46
  jarvis/jarvis_mcp/streamable_mcp_client.py,sha256=1OZpsG82U2MLbGuojllJAblFUAMmp1N0i5fsKM4n5Ts,14453
49
- jarvis/jarvis_methodology/main.py,sha256=-PqsWvtpUJkkhiGgV-1JegEnEZBmv8SHnNMNNm_-QQc,11720
47
+ jarvis/jarvis_methodology/main.py,sha256=6QF8hH3vB6rfxim0fPR34uVPf41zVpb4ZLqrFN2qONg,10983
50
48
  jarvis/jarvis_multi_agent/__init__.py,sha256=kCgtAX7VvliyEOQxIj2DvNjRAuh6bpNaOtDn60nzph4,6089
51
- jarvis/jarvis_multi_agent/main.py,sha256=h7VUSwoPrES0XTK8z5kt3XLX1mmcm8UEuFEHQOUWPH4,1696
49
+ jarvis/jarvis_multi_agent/main.py,sha256=EUJCLjiN6ZZkOTmRS13oeTquo3tXD-cdO_QvaEPCK_c,1715
52
50
  jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
53
- jarvis/jarvis_platform/ai8.py,sha256=yi7xG8ld4Yrf7drz-uu_JT_XCGYRB0obhygt-jKik8o,10871
51
+ jarvis/jarvis_platform/ai8.py,sha256=uiL1BkONteUB2aXg6kMGSXLLOhzGDl5_SNQYyQzmFNk,11412
54
52
  jarvis/jarvis_platform/base.py,sha256=cfeYB6ldfQH1tz1rroQpmJTLAw8KByKS74qun0pqE1c,9498
55
53
  jarvis/jarvis_platform/human.py,sha256=cSN8Lqf0ts2_pPfS2_v7PaWxQKqcW_3bSmhRTHey7Qo,4674
56
- jarvis/jarvis_platform/kimi.py,sha256=dn_P4EEZvWWCPS67MDbWStsP7n3MN4-Rrc6R7GhJyEg,15436
54
+ jarvis/jarvis_platform/kimi.py,sha256=HzNcdQ3tO2ndHk02mfD9DeeGP7JVFnQ1pbkAVF21jjA,14222
57
55
  jarvis/jarvis_platform/openai.py,sha256=ccGqsU2cFfd5324P7SH1tSmFABpvto8fytmxQGkr3BA,6412
58
- jarvis/jarvis_platform/oyi.py,sha256=GvVooV8ScRqDb9QxJdINtdZwsx6PUIdo1-bt9k0hmqY,12604
59
56
  jarvis/jarvis_platform/registry.py,sha256=1bMy0YZUa8NLzuZlKfC4CBtpa0iniypTxUZk0Hv6g9Y,8415
60
- jarvis/jarvis_platform/tongyi.py,sha256=vSK1b4NhTeHbNhTgGRj4PANXptwCAwitczwK8VXwWwU,22921
61
- jarvis/jarvis_platform/yuanbao.py,sha256=AIGQ0VOD_IAwWLnU9G19OG0XAbHpcJDzVWX2VazsyAI,23092
57
+ jarvis/jarvis_platform/tongyi.py,sha256=d0l2S9P80CF1OgloCI9qXa1Qnfy6yMYjsmuOVAEW99I,22021
58
+ jarvis/jarvis_platform/yuanbao.py,sha256=FbkpMs_hUL8bGJHbWivQEynnU892-5qPsMe0xASGXkI,22673
62
59
  jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- jarvis/jarvis_platform_manager/main.py,sha256=ysdM-_2vdOorqQiXiJOpZ50ukD5yPmakRHthK-JIl30,18558
60
+ jarvis/jarvis_platform_manager/main.py,sha256=V320cEk2CP-NhmdNr0dED77VOUTJ6ODYL0YXC7wLZzw,17513
64
61
  jarvis/jarvis_platform_manager/service.py,sha256=hQGWQ2qAlzm_C_lNQDuLORQ4rmjR1P1-V3ou7l2Bv0s,13622
65
62
  jarvis/jarvis_rag/__init__.py,sha256=HRTXgnQxDuaE9x-e3r6SYqhJ5d4DSI_rrIxy2IGY6qk,320
66
63
  jarvis/jarvis_rag/cache.py,sha256=Tqx_Oe-AhuWlMXHGHUaIuG6OEHoHBVZq7mL3kldtFFU,2723
@@ -72,7 +69,7 @@ jarvis/jarvis_rag/rag_pipeline.py,sha256=9yeNRv6qOS2zo7o0b0u3gFmiW_XSivesvPKVJ8e
72
69
  jarvis/jarvis_rag/reranker.py,sha256=wYUDIMHQL8_tFcQ7GFn_zYHTE1AbKk4a9TRoN2lKtA8,1767
73
70
  jarvis/jarvis_rag/retriever.py,sha256=B6oq1SAh7QAE9G5o0sXyNtLjFodukd8p-Was2QJZXg0,7637
74
71
  jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- jarvis/jarvis_smart_shell/main.py,sha256=3oAl4LbpkiJWCpxqwXF6-vmydZr5HMFKCvkQR94dzLc,6946
72
+ jarvis/jarvis_smart_shell/main.py,sha256=MXUVaXvT9zOxykbQphCGEXUCRhdOhEthQxHba_D4oiE,6015
76
73
  jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
74
  jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
78
75
  jarvis/jarvis_tools/base.py,sha256=tFVmK6ppsImW2BzHZmrNmMRiOJdW-4aZP6Me3VxdYcA,1194
@@ -83,12 +80,12 @@ jarvis/jarvis_tools/generate_new_tool.py,sha256=ppMRuTYUZ0c02rHo7xi8DCGiDVPZTANV
83
80
  jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAPN35JU,5233
84
81
  jarvis/jarvis_tools/read_code.py,sha256=EnI-R-5HyIQYhMD391nZWXHIuHHBF-OJIRE0QpLcPX4,6417
85
82
  jarvis/jarvis_tools/read_webpage.py,sha256=NmDUboVZd4CGHBPRFK6dp3uqVhuGopW1bOi3TcaLDF4,2092
86
- jarvis/jarvis_tools/registry.py,sha256=FO72qNhDXeBRMnLc9IR87X0SNqAkGkzbHYtbw-7OMgI,28604
83
+ jarvis/jarvis_tools/registry.py,sha256=etJicnDvmfvu3MZwF4LiufKL63sV812FUZOpBBS28DU,28195
87
84
  jarvis/jarvis_tools/rewrite_file.py,sha256=eG_WKg6cVAXmuGwUqlWkcuyay5S8DOzEi8vZCmX3O8w,7255
88
- jarvis/jarvis_tools/search_web.py,sha256=DDAPjYWTFaF85zsnhJ6VNDSc1BcY8EHus5ymKP9nnPs,5703
85
+ jarvis/jarvis_tools/search_web.py,sha256=qh3MomJNDzpw5JTBbJWxzJmIdmuUt2SZNqJNc8LJrO4,5829
89
86
  jarvis/jarvis_tools/virtual_tty.py,sha256=KKr3jpvQWWMPr2o40hlmN6fuXJCN8H4_ma5QU40Citc,16089
90
87
  jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
- jarvis/jarvis_tools/cli/main.py,sha256=Mg6TQDxMdzB1Ua1UrZ2EE-uQWsbaeojWaEGHJp2HimA,6375
88
+ jarvis/jarvis_tools/cli/main.py,sha256=ZOvdC6wEOTdhTJy8ZDF_AKlH0jBmVcbOrU-8JPK2gWM,4703
92
89
  jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
93
90
  jarvis/jarvis_utils/builtin_replace_map.py,sha256=4BurljGuiG_I93EBs7mlFlPm9wYC_4CmdTG5tQWpF6g,1712
94
91
  jarvis/jarvis_utils/config.py,sha256=YcPGjCSJ2_2CKtlY8ecyqaovKVb65XcQ5WNizjwmdVs,10689
@@ -96,15 +93,15 @@ jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3
96
93
  jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
97
94
  jarvis/jarvis_utils/git_utils.py,sha256=_b4-5uWOTVFjAB48QbRJNBR7PTD_jzi7-5V5M_wjXFo,21740
98
95
  jarvis/jarvis_utils/globals.py,sha256=QKeiiWhUlu9HE7SzAn0lKaeaXQF1uhmLXPZTeLKyGPQ,4048
99
- jarvis/jarvis_utils/http.py,sha256=Uqt1kcz0HWnAfXHHi1fNGwLb2lcVUqpbrG2Uk_-kcIU,4882
96
+ jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
100
97
  jarvis/jarvis_utils/input.py,sha256=V2w3xV0MO73c4Y4XY_yy9jVNg7MmN76FmAnpKRiJUog,9160
101
98
  jarvis/jarvis_utils/methodology.py,sha256=V2Y0mbamrWBhhCK-3foAM1hKewOEcIDcXO-Sv_AU-kQ,9106
102
- jarvis/jarvis_utils/output.py,sha256=2QMpzb8ZOysQ6HHsRjRzjgUnNXaFGkIiZ_qElPKLbsA,10858
99
+ jarvis/jarvis_utils/output.py,sha256=E_J_RYXtkOgRiDSHCRE9QPHY8WQmmhIotQtIQru8GZA,10888
103
100
  jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
104
101
  jarvis/jarvis_utils/utils.py,sha256=G6UuiBrPlWLpau1LbSGStrlAHCHG8JufINLD_bwtjTE,20006
105
- jarvis_ai_assistant-0.2.1.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
106
- jarvis_ai_assistant-0.2.1.dist-info/METADATA,sha256=2CaCKJhb4POadlWKBvaXRe1Lf1YVPNI1jCGXbbkQuDo,26021
107
- jarvis_ai_assistant-0.2.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
108
- jarvis_ai_assistant-0.2.1.dist-info/entry_points.txt,sha256=JXK_n-d9HZ_RLz959CvpK5-UPOCwssn5oAH8dAHuebA,1277
109
- jarvis_ai_assistant-0.2.1.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
110
- jarvis_ai_assistant-0.2.1.dist-info/RECORD,,
102
+ jarvis_ai_assistant-0.2.2.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
103
+ jarvis_ai_assistant-0.2.2.dist-info/METADATA,sha256=I2MdBpFwqLwq8kSfG--5ULCddP6OL-ZRHARbmyG6EQ8,9255
104
+ jarvis_ai_assistant-0.2.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
105
+ jarvis_ai_assistant-0.2.2.dist-info/entry_points.txt,sha256=nXgfarEvf9Zelwvl6yGa4Zmqpsa7dDTahlzHRHL8qvM,1178
106
+ jarvis_ai_assistant-0.2.2.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
107
+ jarvis_ai_assistant-0.2.2.dist-info/RECORD,,
@@ -5,7 +5,6 @@ jarvis-agent = jarvis.jarvis_agent.main:main
5
5
  jarvis-code-agent = jarvis.jarvis_code_agent.code_agent:main
6
6
  jarvis-code-review = jarvis.jarvis_code_analysis.code_review:main
7
7
  jarvis-git-commit = jarvis.jarvis_git_utils.git_commiter:main
8
- jarvis-git-details = jarvis.jarvis_git_details.main:main
9
8
  jarvis-git-squash = jarvis.jarvis_git_squash.main:main
10
9
  jarvis-methodology = jarvis.jarvis_methodology.main:main
11
10
  jarvis-multi-agent = jarvis.jarvis_multi_agent.main:main
@@ -16,7 +15,6 @@ jarvis-tool = jarvis.jarvis_tools.cli.main:main
16
15
  jca = jarvis.jarvis_code_agent.code_agent:main
17
16
  jcr = jarvis.jarvis_code_analysis.code_review:main
18
17
  jgc = jarvis.jarvis_git_utils.git_commiter:main
19
- jgd = jarvis.jarvis_git_details.main:main
20
18
  jgs = jarvis.jarvis_git_squash.main:main
21
19
  jm = jarvis.jarvis_methodology.main:main
22
20
  jma = jarvis.jarvis_multi_agent.main:main
File without changes