jarvis-ai-assistant 0.1.150__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.
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/MANIFEST.in +2 -1
- {jarvis_ai_assistant-0.1.150/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.151}/PKG-INFO +31 -2
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/README.md +24 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/pyproject.toml +2 -1
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/setup.py +2 -1
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/__init__.py +1 -1
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_git_utils/git_commiter.py +7 -0
- jarvis_ai_assistant-0.1.151/src/jarvis/jarvis_mcp/__init__.py +65 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_mcp/local_mcp_client.py +85 -0
- jarvis_ai_assistant-0.1.151/src/jarvis/jarvis_mcp/remote_mcp_client.py +590 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/ask_codebase.py +3 -10
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/registry.py +125 -83
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/config.py +1 -1
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/methodology.py +2 -2
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151/src/jarvis_ai_assistant.egg-info}/PKG-INFO +31 -2
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis_ai_assistant.egg-info/requires.txt +1 -0
- jarvis_ai_assistant-0.1.150/src/jarvis/jarvis_mcp/__init__.py +0 -36
- jarvis_ai_assistant-0.1.150/src/jarvis/jarvis_mcp/remote_mcp_client.py +0 -230
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/setup.cfg +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/file_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/jarvis.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/main.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/output_handler.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/patch.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_agent/code_agent.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_code_analysis/code_review.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_dev/main.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_git_details/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_git_details/main.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_git_squash/main.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/base.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/cpp.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/go.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/python.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/registry.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_lsp/rust.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_methodology/main.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_multi_agent/main.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform/base.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform/kimi.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform/registry.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform/yuanbao.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_platform_manager/main.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_smart_shell/main.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/ask_user.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/base.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/chdir.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/code_plan.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/create_code_agent.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/create_sub_agent.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/execute_script.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/file_analyzer.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/file_operation.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/find_methodology.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/lsp_get_diagnostics.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/methodology.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/read_code.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/search_web.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/embedding.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/file_processors.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/git_utils.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/globals.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/input.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/output.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis/jarvis_utils/utils.py +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.1.150 → jarvis_ai_assistant-0.1.151}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: jarvis-ai-assistant
|
|
3
|
-
Version: 0.1.
|
|
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
|
|
@@ -54,11 +54,16 @@ Requires-Dist: transformers==4.46.3
|
|
|
54
54
|
Requires-Dist: torch==2.4.1
|
|
55
55
|
Requires-Dist: python-Levenshtein==0.25.1
|
|
56
56
|
Requires-Dist: sseclient==0.0.27
|
|
57
|
+
Requires-Dist: pillow==10.2.1
|
|
57
58
|
Provides-Extra: dev
|
|
58
59
|
Requires-Dist: pytest; extra == "dev"
|
|
59
60
|
Requires-Dist: black; extra == "dev"
|
|
60
61
|
Requires-Dist: isort; extra == "dev"
|
|
61
62
|
Requires-Dist: mypy; extra == "dev"
|
|
63
|
+
Dynamic: author
|
|
64
|
+
Dynamic: home-page
|
|
65
|
+
Dynamic: license-file
|
|
66
|
+
Dynamic: requires-python
|
|
62
67
|
|
|
63
68
|
# 🤖 Jarvis AI 助手
|
|
64
69
|
<p align="center">
|
|
@@ -276,6 +281,30 @@ class CustomTool:
|
|
|
276
281
|
```
|
|
277
282
|
|
|
278
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
|
+
|
|
279
308
|
### 添加新大模型平台
|
|
280
309
|
在 `~/.jarvis/platforms/` 中创建新的 Python 文件:
|
|
281
310
|
```python
|
|
@@ -214,6 +214,30 @@ class CustomTool:
|
|
|
214
214
|
```
|
|
215
215
|
|
|
216
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
|
+
|
|
217
241
|
### 添加新大模型平台
|
|
218
242
|
在 `~/.jarvis/platforms/` 中创建新的 Python 文件:
|
|
219
243
|
```python
|
|
@@ -8,7 +8,7 @@ default = true
|
|
|
8
8
|
|
|
9
9
|
[project]
|
|
10
10
|
name = "jarvis-ai-assistant"
|
|
11
|
-
version = "0.1.
|
|
11
|
+
version = "0.1.151"
|
|
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" }]
|
|
@@ -40,6 +40,7 @@ dependencies = [
|
|
|
40
40
|
"torch==2.4.1",
|
|
41
41
|
"python-Levenshtein==0.25.1",
|
|
42
42
|
"sseclient==0.0.27",
|
|
43
|
+
"pillow==10.2.1",
|
|
43
44
|
]
|
|
44
45
|
requires-python = ">=3.8"
|
|
45
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.
|
|
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",
|
|
@@ -27,6 +27,7 @@ setup(
|
|
|
27
27
|
"torch==2.4.1",
|
|
28
28
|
"python-Levenshtein==0.25.1",
|
|
29
29
|
"sseclient==0.0.27",
|
|
30
|
+
"pillow==10.2.1",
|
|
30
31
|
],
|
|
31
32
|
entry_points={
|
|
32
33
|
"console_scripts": [
|
|
@@ -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
|
# 执行提交
|
|
@@ -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
|
+
|
|
@@ -228,6 +228,91 @@ class LocalMcpClient(McpClient):
|
|
|
228
228
|
'stderr': str(e)
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
+
def get_resource_list(self) -> List[Dict[str, Any]]:
|
|
232
|
+
"""获取资源列表
|
|
233
|
+
|
|
234
|
+
返回:
|
|
235
|
+
List[Dict[str, Any]]: 资源列表,每个资源包含以下字段:
|
|
236
|
+
- uri: str - 资源的唯一标识符
|
|
237
|
+
- name: str - 资源的名称
|
|
238
|
+
- description: str - 资源的描述(可选)
|
|
239
|
+
- mimeType: str - 资源的MIME类型(可选)
|
|
240
|
+
"""
|
|
241
|
+
try:
|
|
242
|
+
response = self._send_request('resources/list', {})
|
|
243
|
+
if 'result' in response and 'resources' in response['result']:
|
|
244
|
+
return response['result']['resources']
|
|
245
|
+
else:
|
|
246
|
+
error_msg = "获取资源列表失败"
|
|
247
|
+
if 'error' in response:
|
|
248
|
+
error_msg += f": {response['error']}"
|
|
249
|
+
else:
|
|
250
|
+
error_msg += ": 未知错误"
|
|
251
|
+
PrettyOutput.print(error_msg, OutputType.ERROR)
|
|
252
|
+
return []
|
|
253
|
+
except Exception as e:
|
|
254
|
+
PrettyOutput.print(f"获取资源列表失败: {str(e)}", OutputType.ERROR)
|
|
255
|
+
return []
|
|
256
|
+
|
|
257
|
+
def get_resource(self, uri: str) -> Dict[str, Any]:
|
|
258
|
+
"""获取指定资源的内容
|
|
259
|
+
|
|
260
|
+
参数:
|
|
261
|
+
uri: str - 资源的URI标识符
|
|
262
|
+
|
|
263
|
+
返回:
|
|
264
|
+
Dict[str, Any]: 执行结果,包含以下字段:
|
|
265
|
+
- success: bool - 是否执行成功
|
|
266
|
+
- stdout: str - 资源内容(文本或base64编码的二进制内容)
|
|
267
|
+
- stderr: str - 错误信息
|
|
268
|
+
"""
|
|
269
|
+
try:
|
|
270
|
+
response = self._send_request('resources/read', {
|
|
271
|
+
'uri': uri
|
|
272
|
+
})
|
|
273
|
+
if 'result' in response and 'contents' in response['result']:
|
|
274
|
+
contents = response['result']['contents']
|
|
275
|
+
if contents:
|
|
276
|
+
content = contents[0] # 获取第一个资源内容
|
|
277
|
+
# 根据资源类型返回内容
|
|
278
|
+
if 'text' in content:
|
|
279
|
+
return {
|
|
280
|
+
'success': True,
|
|
281
|
+
'stdout': content['text'],
|
|
282
|
+
'stderr': ''
|
|
283
|
+
}
|
|
284
|
+
elif 'blob' in content:
|
|
285
|
+
return {
|
|
286
|
+
'success': True,
|
|
287
|
+
'stdout': content['blob'],
|
|
288
|
+
'stderr': ''
|
|
289
|
+
}
|
|
290
|
+
return {
|
|
291
|
+
'success': False,
|
|
292
|
+
'stdout': '',
|
|
293
|
+
'stderr': '资源内容为空'
|
|
294
|
+
}
|
|
295
|
+
else:
|
|
296
|
+
error_msg = "获取资源内容失败"
|
|
297
|
+
if 'error' in response:
|
|
298
|
+
error_msg += f": {response['error']}"
|
|
299
|
+
else:
|
|
300
|
+
error_msg += ": 未知错误"
|
|
301
|
+
PrettyOutput.print(error_msg, OutputType.ERROR)
|
|
302
|
+
return {
|
|
303
|
+
'success': False,
|
|
304
|
+
'stdout': '',
|
|
305
|
+
'stderr': error_msg
|
|
306
|
+
}
|
|
307
|
+
except Exception as e:
|
|
308
|
+
error_msg = f"获取资源内容失败: {str(e)}"
|
|
309
|
+
PrettyOutput.print(error_msg, OutputType.ERROR)
|
|
310
|
+
return {
|
|
311
|
+
'success': False,
|
|
312
|
+
'stdout': '',
|
|
313
|
+
'stderr': error_msg
|
|
314
|
+
}
|
|
315
|
+
|
|
231
316
|
def __del__(self):
|
|
232
317
|
"""清理资源"""
|
|
233
318
|
if self.process:
|