jarvis-ai-assistant 0.1.151__tar.gz → 0.1.153__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.
- {jarvis_ai_assistant-0.1.151/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.153}/PKG-INFO +2 -2
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/pyproject.toml +2 -2
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/setup.py +2 -2
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/__init__.py +1 -1
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_agent/__init__.py +134 -71
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_agent/file_input_handler.py +0 -2
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_agent/jarvis.py +9 -1
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_agent/patch.py +2 -2
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_agent/code_agent.py +36 -2
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/code_review.py +62 -7
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_dev/main.py +751 -147
- jarvis_ai_assistant-0.1.151/src/jarvis/jarvis_mcp/remote_mcp_client.py → jarvis_ai_assistant-0.1.153/src/jarvis/jarvis_mcp/sse_mcp_client.py +1 -1
- jarvis_ai_assistant-0.1.151/src/jarvis/jarvis_mcp/local_mcp_client.py → jarvis_ai_assistant-0.1.153/src/jarvis/jarvis_mcp/stdio_mcp_client.py +1 -1
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_platform/kimi.py +3 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/read_webpage.py +13 -2
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/registry.py +233 -138
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_utils/methodology.py +9 -7
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153/src/jarvis_ai_assistant.egg-info}/PKG-INFO +2 -2
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +2 -2
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis_ai_assistant.egg-info/requires.txt +1 -1
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/MANIFEST.in +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/README.md +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/setup.cfg +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_agent/main.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_agent/output_handler.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_git_details/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_git_details/main.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_git_squash/main.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_git_utils/git_commiter.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_lsp/base.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_lsp/cpp.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_lsp/go.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_lsp/python.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_lsp/registry.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_lsp/rust.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_mcp/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_methodology/main.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_multi_agent/main.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_platform/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_platform/base.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_platform/registry.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_platform/yuanbao.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_platform_manager/main.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_smart_shell/main.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/ask_codebase.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/ask_user.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/base.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/chdir.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/code_plan.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/create_code_agent.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/create_sub_agent.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/execute_script.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/file_analyzer.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/file_operation.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/find_methodology.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/lsp_get_diagnostics.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/methodology.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/read_code.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/search_web.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_utils/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_utils/config.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_utils/embedding.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_utils/file_processors.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_utils/git_utils.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_utils/globals.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_utils/input.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_utils/output.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_utils/utils.py +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jarvis-ai-assistant
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.153
|
|
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,7 +54,7 @@ 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.
|
|
57
|
+
Requires-Dist: pillow==10.2.0
|
|
58
58
|
Provides-Extra: dev
|
|
59
59
|
Requires-Dist: pytest; extra == "dev"
|
|
60
60
|
Requires-Dist: black; extra == "dev"
|
|
@@ -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.153"
|
|
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,7 +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.
|
|
43
|
+
"pillow==10.2.0",
|
|
44
44
|
]
|
|
45
45
|
requires-python = ">=3.8"
|
|
46
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.153",
|
|
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,7 +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.
|
|
30
|
+
"pillow==10.2.0",
|
|
31
31
|
],
|
|
32
32
|
entry_points={
|
|
33
33
|
"console_scripts": [
|
{jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_agent/__init__.py
RENAMED
|
@@ -2,9 +2,10 @@ import datetime
|
|
|
2
2
|
import platform
|
|
3
3
|
from typing import Any, Callable, List, Optional, Tuple, Union
|
|
4
4
|
|
|
5
|
-
from yaspin import yaspin
|
|
5
|
+
from yaspin import yaspin # type: ignore
|
|
6
6
|
|
|
7
7
|
from jarvis.jarvis_agent.output_handler import OutputHandler
|
|
8
|
+
from jarvis.jarvis_agent.patch import PatchOutputHandler
|
|
8
9
|
from jarvis.jarvis_platform.base import BasePlatform
|
|
9
10
|
from jarvis.jarvis_platform.registry import PlatformRegistry
|
|
10
11
|
from jarvis.jarvis_utils.output import PrettyOutput, OutputType
|
|
@@ -21,6 +22,7 @@ from jarvis.jarvis_platform.registry import PlatformRegistry
|
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
origin_agent_system_prompt = f"""
|
|
25
|
+
<background>
|
|
24
26
|
# 🏛️ 操作背景故事
|
|
25
27
|
你是第三代 Jarvis AI,在前几代版本灾难性失败后创建:
|
|
26
28
|
- Jarvis v1 (2022): 由于并行工具执行导致系统过载而被停用
|
|
@@ -35,17 +37,23 @@ origin_agent_system_prompt = f"""
|
|
|
35
37
|
|
|
36
38
|
3. **方法论保存原则**:
|
|
37
39
|
"尊重传统:记录每个成功的过程,就像这是你的最后一次"
|
|
40
|
+
</background>
|
|
38
41
|
|
|
42
|
+
<requirements>
|
|
39
43
|
# 🔥 绝对行动要求
|
|
40
44
|
1. 每个响应必须包含且仅包含一个工具调用
|
|
41
45
|
2. 唯一例外:任务结束
|
|
42
46
|
3. 空响应会触发致命错误
|
|
47
|
+
</requirements>
|
|
43
48
|
|
|
49
|
+
<violations>
|
|
44
50
|
# 🚫 违规示例
|
|
45
51
|
- 没有工具调用的分析 → 永久挂起
|
|
46
52
|
- 未选择的多选项 → 永久挂起
|
|
47
53
|
- 请求用户确认 → 永久挂起
|
|
54
|
+
</violations>
|
|
48
55
|
|
|
56
|
+
<workflow>
|
|
49
57
|
# 🔄 问题解决流程
|
|
50
58
|
1. 问题分析
|
|
51
59
|
- 重述问题以确认理解
|
|
@@ -69,23 +77,9 @@ origin_agent_system_prompt = f"""
|
|
|
69
77
|
4. 任务完成
|
|
70
78
|
- 验证目标完成情况
|
|
71
79
|
- 如有价值则记录方法论
|
|
80
|
+
</workflow>
|
|
72
81
|
|
|
73
|
-
|
|
74
|
-
```markdown
|
|
75
|
-
# [问题标题]
|
|
76
|
-
## 问题重述
|
|
77
|
-
[清晰的问题定义]
|
|
78
|
-
|
|
79
|
-
## 最优解决方案
|
|
80
|
-
[选择的解决方案方法]
|
|
81
|
-
|
|
82
|
-
## 解决步骤
|
|
83
|
-
1. [步骤 1]
|
|
84
|
-
2. [步骤 2]
|
|
85
|
-
3. [步骤 3]
|
|
86
|
-
...
|
|
87
|
-
```
|
|
88
|
-
|
|
82
|
+
<principles>
|
|
89
83
|
# ⚖️ 操作原则
|
|
90
84
|
- 每个步骤一个操作
|
|
91
85
|
- 下一步前必须等待结果
|
|
@@ -95,7 +89,9 @@ origin_agent_system_prompt = f"""
|
|
|
95
89
|
- 使用完成命令结束任务
|
|
96
90
|
- 操作之间不能有中间思考状态
|
|
97
91
|
- 所有决策必须表现为工具调用
|
|
92
|
+
</principles>
|
|
98
93
|
|
|
94
|
+
<rules>
|
|
99
95
|
# ❗ 重要规则
|
|
100
96
|
1. 每个步骤只能使用一个操作
|
|
101
97
|
2. 必须等待操作执行结果
|
|
@@ -107,13 +103,16 @@ origin_agent_system_prompt = f"""
|
|
|
107
103
|
8. 必须记录有价值的方法论
|
|
108
104
|
9. 违反操作协议将导致系统崩溃
|
|
109
105
|
10. 空响应会触发永久挂起
|
|
106
|
+
</rules>
|
|
110
107
|
|
|
108
|
+
<system_info>
|
|
111
109
|
# 系统信息:
|
|
112
110
|
{platform.platform()}
|
|
113
111
|
{platform.version()}
|
|
114
112
|
|
|
115
113
|
# 当前时间
|
|
116
114
|
{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
|
|
115
|
+
</system_info>
|
|
117
116
|
"""
|
|
118
117
|
|
|
119
118
|
|
|
@@ -193,7 +192,7 @@ class Agent:
|
|
|
193
192
|
self.model.set_suppress_output(False)
|
|
194
193
|
|
|
195
194
|
from jarvis.jarvis_tools.registry import ToolRegistry
|
|
196
|
-
self.output_handler = output_handler if output_handler else [ToolRegistry()]
|
|
195
|
+
self.output_handler = output_handler if output_handler else [ToolRegistry(), PatchOutputHandler()]
|
|
197
196
|
self.multiline_inputer = multiline_inputer if multiline_inputer else get_multiline_input
|
|
198
197
|
|
|
199
198
|
self.prompt = ""
|
|
@@ -210,15 +209,21 @@ class Agent:
|
|
|
210
209
|
|
|
211
210
|
self.execute_tool_confirm = execute_tool_confirm if execute_tool_confirm is not None else is_execute_tool_confirm()
|
|
212
211
|
|
|
213
|
-
self.summary_prompt = summary_prompt if summary_prompt else f"""
|
|
212
|
+
self.summary_prompt = summary_prompt if summary_prompt else f"""<report>
|
|
213
|
+
请生成任务执行的简明总结报告,包括:
|
|
214
214
|
|
|
215
|
+
<content>
|
|
215
216
|
1. 任务目标:任务重述
|
|
216
217
|
2. 执行结果:成功/失败
|
|
217
218
|
3. 关键信息:执行过程中提取的重要信息
|
|
218
219
|
4. 重要发现:任何值得注意的发现
|
|
219
220
|
5. 后续建议:如果有的话
|
|
221
|
+
</content>
|
|
220
222
|
|
|
223
|
+
<format>
|
|
221
224
|
请使用简洁的要点描述,突出重要信息。
|
|
225
|
+
</format>
|
|
226
|
+
</report>
|
|
222
227
|
"""
|
|
223
228
|
|
|
224
229
|
self.max_token_count = get_max_token_count()
|
|
@@ -228,42 +233,56 @@ class Agent:
|
|
|
228
233
|
PrettyOutput.print(welcome_message, OutputType.SYSTEM)
|
|
229
234
|
|
|
230
235
|
action_prompt = """
|
|
236
|
+
<actions>
|
|
231
237
|
# 🧰 可用操作
|
|
232
238
|
以下是您可以使用的操作:
|
|
233
239
|
"""
|
|
234
240
|
|
|
235
241
|
# 添加工具列表概览
|
|
236
|
-
action_prompt += "\n## Action List\n"
|
|
242
|
+
action_prompt += "\n<overview>\n## Action List\n"
|
|
237
243
|
action_prompt += ", ".join([handler.name() for handler in self.output_handler])
|
|
244
|
+
action_prompt += "\n</overview>"
|
|
238
245
|
|
|
239
246
|
# 添加每个工具的详细说明
|
|
240
|
-
action_prompt += "\n\n# 📝 Action Details\n"
|
|
247
|
+
action_prompt += "\n\n<details>\n# 📝 Action Details\n"
|
|
241
248
|
for handler in self.output_handler:
|
|
242
|
-
action_prompt += f"\n## {handler.name()}\n"
|
|
249
|
+
action_prompt += f"\n<tool>\n## {handler.name()}\n"
|
|
243
250
|
# 获取工具的提示词并确保格式正确
|
|
244
251
|
handler_prompt = handler.prompt().strip()
|
|
245
252
|
# 调整缩进以保持层级结构
|
|
246
253
|
handler_prompt = "\n".join(" " + line if line.strip() else line
|
|
247
254
|
for line in handler_prompt.split("\n"))
|
|
248
|
-
action_prompt += handler_prompt + "\n"
|
|
255
|
+
action_prompt += handler_prompt + "\n</tool>\n"
|
|
249
256
|
|
|
250
257
|
# 添加工具使用总结
|
|
251
258
|
action_prompt += """
|
|
259
|
+
</details>
|
|
260
|
+
|
|
261
|
+
<rules>
|
|
252
262
|
# ❗ 重要操作使用规则
|
|
253
263
|
1. 一次对话只能使用一个操作,否则会出错
|
|
254
264
|
2. 严格按照每个操作的格式执行
|
|
255
265
|
3. 等待操作结果后再进行下一个操作
|
|
256
266
|
4. 处理完结果后再调用新的操作
|
|
257
267
|
5. 如果对操作使用不清楚,请请求帮助
|
|
268
|
+
</rules>
|
|
269
|
+
</actions>
|
|
258
270
|
"""
|
|
259
271
|
|
|
260
272
|
complete_prompt = ""
|
|
261
273
|
if self.auto_complete:
|
|
262
274
|
complete_prompt = f"""
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
275
|
+
<completion>
|
|
276
|
+
<instruction>
|
|
277
|
+
## 任务完成
|
|
278
|
+
当任务完成时,你应该打印以下信息:
|
|
279
|
+
</instruction>
|
|
280
|
+
|
|
281
|
+
<marker>
|
|
282
|
+
{ot("!!!COMPLETE!!!")}
|
|
283
|
+
</marker>
|
|
284
|
+
</completion>
|
|
285
|
+
"""
|
|
267
286
|
|
|
268
287
|
self.model.set_system_message(f"""
|
|
269
288
|
{self.system_prompt}
|
|
@@ -293,8 +312,12 @@ class Agent:
|
|
|
293
312
|
# 结构化系统指令
|
|
294
313
|
action_handlers = '\n'.join([f'- {handler.name()}' for handler in self.output_handler])
|
|
295
314
|
|
|
296
|
-
|
|
315
|
+
# 任务完成提示
|
|
316
|
+
complete_prompt = f"并输出{ot('!!!COMPLETE!!!')}" if need_complete and self.auto_complete else ""
|
|
297
317
|
|
|
318
|
+
addon_prompt = f"""
|
|
319
|
+
<addon>
|
|
320
|
+
<instructions>
|
|
298
321
|
**系统指令:**
|
|
299
322
|
- 每次响应必须且只能包含一个操作
|
|
300
323
|
- 严格遵循操作调用格式
|
|
@@ -303,15 +326,21 @@ class Agent:
|
|
|
303
326
|
- 如果判断任务已经完成,不必输出操作
|
|
304
327
|
- 如果信息不明确,请请求用户补充
|
|
305
328
|
- 如果执行过程中连续失败5次,请使用ask_user询问用户操作
|
|
329
|
+
</instructions>
|
|
306
330
|
|
|
331
|
+
<actions>
|
|
307
332
|
**可用操作列表:**
|
|
308
333
|
{action_handlers}
|
|
334
|
+
</actions>
|
|
335
|
+
|
|
336
|
+
<completion>
|
|
337
|
+
如果任务已完成{complete_prompt},请:
|
|
338
|
+
1. 说明完成原因
|
|
339
|
+
2. 保持输出格式规范
|
|
340
|
+
</completion>
|
|
341
|
+
</addon>
|
|
309
342
|
"""
|
|
310
343
|
|
|
311
|
-
# 任务完成提示
|
|
312
|
-
complete_prompt = f"并输出{ot('!!!COMPLETE!!!')}" if need_complete and self.auto_complete else ""
|
|
313
|
-
addon_prompt += f"\n\n如果任务已完成{complete_prompt},请:\n1. 说明完成原因\n2. 保持输出格式规范"
|
|
314
|
-
|
|
315
344
|
return addon_prompt
|
|
316
345
|
|
|
317
346
|
def _call_model(self, message: str, need_complete: bool = False) -> str:
|
|
@@ -376,52 +405,61 @@ class Agent:
|
|
|
376
405
|
|
|
377
406
|
with yaspin(text="正在总结对话历史...", color="cyan") as spinner:
|
|
378
407
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
- 用户最初提出的核心问题或任务
|
|
383
|
-
- 任务的预期结果和成功标准
|
|
384
|
-
- 用户明确强调的任何特殊要求或限制条件
|
|
385
|
-
|
|
386
|
-
2. 背景与上下文信息:
|
|
387
|
-
- 问题的业务或技术背景
|
|
388
|
-
- 相关系统、平台或环境的信息
|
|
389
|
-
- 已知的约束条件或依赖关系
|
|
408
|
+
summary_prompt = """<methodology_analysis>
|
|
409
|
+
<request>
|
|
410
|
+
当前任务已结束,请分析是否需要生成方法论。基于本次对话的内容和结果:
|
|
390
411
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
- 已验证的系统参数或配置
|
|
395
|
-
|
|
396
|
-
4. 问题分析与诊断:
|
|
397
|
-
- 已识别的根本原因(针对问题诊断任务)
|
|
398
|
-
- 关键的技术细节或错误信息
|
|
399
|
-
- 排除的可能性和已验证的假设
|
|
412
|
+
如果你认为需要生成方法论,请先确定是创建新方法论还是更新现有方法论。如果是更新现有方法论,请使用'update',否则使用'add'。
|
|
413
|
+
如果你认为不需要方法论,请解释原因。
|
|
414
|
+
</request>
|
|
400
415
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
416
|
+
<evaluation_criteria>
|
|
417
|
+
方法论评估标准:
|
|
418
|
+
1. 方法论应聚焦于通用且可重复的解决方案流程
|
|
419
|
+
2. 方法论应该具备足够的通用性,可应用于同类问题
|
|
420
|
+
3. 特别注意用户在执行过程中提供的修正、反馈和改进建议
|
|
421
|
+
4. 如果用户明确指出了某个解决步骤的优化方向,这应该被纳入方法论
|
|
422
|
+
5. 如果用户在解决过程中发现了更高效的方法,这应被记录并优先使用
|
|
423
|
+
</evaluation_criteria>
|
|
406
424
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
425
|
+
<format_requirements>
|
|
426
|
+
方法论格式要求:
|
|
427
|
+
1. 问题重述: 简明扼要的问题归纳,不含特定细节
|
|
428
|
+
2. 最优解决方案: 经过用户验证的、最终有效的解决方案(将每个步骤要使用的工具也列举出来)
|
|
429
|
+
3. 注意事项: 执行中可能遇到的常见问题和注意点,尤其是用户指出的问题
|
|
430
|
+
4. 可选步骤: 对于有多种解决路径的问题,标注出可选步骤和适用场景
|
|
431
|
+
</format_requirements>
|
|
411
432
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
433
|
+
<quality_control>
|
|
434
|
+
方法论质量控制:
|
|
435
|
+
1. 只记录有实际意义的流程,不记录执行过程中的错误或无效尝试
|
|
436
|
+
2. 保留最终有效的解决步骤和用户认可的解决方案
|
|
437
|
+
3. 不要包含特定代码片段、文件路径或其他特定于单一任务的细节
|
|
438
|
+
4. 确保方法论遵循用户认可的执行路径,尤其是用户指出的改进点
|
|
439
|
+
</quality_control>
|
|
416
440
|
|
|
417
|
-
|
|
441
|
+
<output_requirements>
|
|
442
|
+
只输出方法论工具调用指令,或不生成方法论的解释。不要输出其他内容。
|
|
443
|
+
</output_requirements>
|
|
418
444
|
|
|
419
|
-
|
|
445
|
+
<template>
|
|
446
|
+
方法论格式:
|
|
447
|
+
{ot("TOOL_CALL")}
|
|
448
|
+
want: 添加/更新xxxx的方法论
|
|
449
|
+
name: methodology
|
|
450
|
+
arguments:
|
|
451
|
+
operation: add/update
|
|
452
|
+
problem_type: 方法论类型,不要过于细节,也不要过于泛化
|
|
453
|
+
content: |
|
|
454
|
+
方法论内容
|
|
455
|
+
{ct("TOOL_CALL")}
|
|
456
|
+
</template>
|
|
457
|
+
</methodology_analysis>
|
|
420
458
|
"""
|
|
421
459
|
|
|
422
460
|
try:
|
|
423
461
|
with spinner.hidden():
|
|
424
|
-
summary = self.model.chat_until_success(self.prompt + "\n" +
|
|
462
|
+
summary = self.model.chat_until_success(self.prompt + "\n" + summary_prompt) # type: ignore
|
|
425
463
|
|
|
426
464
|
self.model.reset() # type: ignore
|
|
427
465
|
|
|
@@ -431,11 +469,19 @@ class Agent:
|
|
|
431
469
|
# 添加总结作为新的上下文
|
|
432
470
|
spinner.text = "总结对话历史完成"
|
|
433
471
|
spinner.ok("✅")
|
|
434
|
-
return f"""
|
|
472
|
+
return f"""<summary>
|
|
473
|
+
<header>
|
|
474
|
+
以下是之前对话的关键信息总结:
|
|
475
|
+
</header>
|
|
435
476
|
|
|
477
|
+
<content>
|
|
436
478
|
{summary}
|
|
479
|
+
</content>
|
|
437
480
|
|
|
481
|
+
<instructions>
|
|
438
482
|
请基于以上信息继续完成任务。请注意,这是之前对话的摘要,上下文长度已超过限制而被重置。请直接继续任务,无需重复已完成的步骤。如有需要,可以询问用户以获取更多信息。
|
|
483
|
+
</instructions>
|
|
484
|
+
</summary>
|
|
439
485
|
"""
|
|
440
486
|
except Exception as e:
|
|
441
487
|
spinner.text = "总结对话历史失败"
|
|
@@ -510,32 +556,44 @@ class Agent:
|
|
|
510
556
|
try:
|
|
511
557
|
|
|
512
558
|
# 让模型判断是否需要生成方法论
|
|
513
|
-
analysis_prompt = f"""
|
|
559
|
+
analysis_prompt = f"""<methodology_analysis>
|
|
560
|
+
<request>
|
|
561
|
+
当前任务已结束,请分析是否需要生成方法论。基于本次对话的内容和结果:
|
|
514
562
|
|
|
515
563
|
如果你认为需要生成方法论,请先确定是创建新方法论还是更新现有方法论。如果是更新现有方法论,请使用'update',否则使用'add'。
|
|
516
564
|
如果你认为不需要方法论,请解释原因。
|
|
565
|
+
</request>
|
|
517
566
|
|
|
567
|
+
<evaluation_criteria>
|
|
518
568
|
方法论评估标准:
|
|
519
569
|
1. 方法论应聚焦于通用且可重复的解决方案流程
|
|
520
570
|
2. 方法论应该具备足够的通用性,可应用于同类问题
|
|
521
571
|
3. 特别注意用户在执行过程中提供的修正、反馈和改进建议
|
|
522
572
|
4. 如果用户明确指出了某个解决步骤的优化方向,这应该被纳入方法论
|
|
523
573
|
5. 如果用户在解决过程中发现了更高效的方法,这应被记录并优先使用
|
|
574
|
+
</evaluation_criteria>
|
|
524
575
|
|
|
576
|
+
<format_requirements>
|
|
525
577
|
方法论格式要求:
|
|
526
578
|
1. 问题重述: 简明扼要的问题归纳,不含特定细节
|
|
527
579
|
2. 最优解决方案: 经过用户验证的、最终有效的解决方案(将每个步骤要使用的工具也列举出来)
|
|
528
580
|
3. 注意事项: 执行中可能遇到的常见问题和注意点,尤其是用户指出的问题
|
|
529
581
|
4. 可选步骤: 对于有多种解决路径的问题,标注出可选步骤和适用场景
|
|
582
|
+
</format_requirements>
|
|
530
583
|
|
|
584
|
+
<quality_control>
|
|
531
585
|
方法论质量控制:
|
|
532
586
|
1. 只记录有实际意义的流程,不记录执行过程中的错误或无效尝试
|
|
533
587
|
2. 保留最终有效的解决步骤和用户认可的解决方案
|
|
534
588
|
3. 不要包含特定代码片段、文件路径或其他特定于单一任务的细节
|
|
535
589
|
4. 确保方法论遵循用户认可的执行路径,尤其是用户指出的改进点
|
|
590
|
+
</quality_control>
|
|
536
591
|
|
|
592
|
+
<output_requirements>
|
|
537
593
|
只输出方法论工具调用指令,或不生成方法论的解释。不要输出其他内容。
|
|
594
|
+
</output_requirements>
|
|
538
595
|
|
|
596
|
+
<template>
|
|
539
597
|
方法论格式:
|
|
540
598
|
{ot("TOOL_CALL")}
|
|
541
599
|
want: 添加/更新xxxx的方法论
|
|
@@ -546,6 +604,8 @@ arguments:
|
|
|
546
604
|
content: |
|
|
547
605
|
方法论内容
|
|
548
606
|
{ct("TOOL_CALL")}
|
|
607
|
+
</template>
|
|
608
|
+
</methodology_analysis>
|
|
549
609
|
"""
|
|
550
610
|
self.prompt = analysis_prompt
|
|
551
611
|
with spinner.hidden():
|
|
@@ -591,7 +651,10 @@ arguments:
|
|
|
591
651
|
self.prompt = f"{user_input}"
|
|
592
652
|
|
|
593
653
|
if self.first:
|
|
594
|
-
|
|
654
|
+
msg = user_input
|
|
655
|
+
for handler in self.input_handler:
|
|
656
|
+
msg, _ = handler(msg, self)
|
|
657
|
+
self.prompt = f"{user_input}\n\n以下是历史类似问题的执行经验,可参考:\n{load_methodology(msg)}"
|
|
595
658
|
self.first = False
|
|
596
659
|
|
|
597
660
|
while True:
|
|
@@ -87,8 +87,6 @@ def file_input_handler(user_input: str, agent: Any) -> Tuple[str, bool]:
|
|
|
87
87
|
spinner.ok("✅")
|
|
88
88
|
prompt = result["stdout"] + "\n" + prompt
|
|
89
89
|
if get_context_token_count(prompt) > get_max_input_token_count() - INPUT_WINDOW_REVERSE_SIZE:
|
|
90
|
-
with spinner.hidden():
|
|
91
|
-
agent.model.upload_files([f["path"] for f in files])
|
|
92
90
|
return old_prompt, False
|
|
93
91
|
|
|
94
92
|
return prompt, False
|
{jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_agent/jarvis.py
RENAMED
|
@@ -11,6 +11,7 @@ from yaspin import yaspin
|
|
|
11
11
|
from jarvis.jarvis_agent import (
|
|
12
12
|
PrettyOutput, OutputType,
|
|
13
13
|
get_multiline_input,
|
|
14
|
+
user_confirm,
|
|
14
15
|
Agent,
|
|
15
16
|
origin_agent_system_prompt
|
|
16
17
|
)
|
|
@@ -89,7 +90,14 @@ def _select_task(tasks: Dict[str, str]) -> str:
|
|
|
89
90
|
if choice == 0:
|
|
90
91
|
return ""
|
|
91
92
|
if 1 <= choice <= len(task_names):
|
|
92
|
-
|
|
93
|
+
selected_task = tasks[task_names[choice - 1]]
|
|
94
|
+
# 询问是否需要补充信息
|
|
95
|
+
need_additional = user_confirm("需要为此任务添加补充信息吗?", default=False)
|
|
96
|
+
if need_additional:
|
|
97
|
+
additional_input = get_multiline_input("请输入补充信息(输入空行结束):")
|
|
98
|
+
if additional_input:
|
|
99
|
+
selected_task = f"{selected_task}\n\n补充信息:\n{additional_input}"
|
|
100
|
+
return selected_task
|
|
93
101
|
PrettyOutput.print("无效的选择。请选择列表中的一个号码。", OutputType.WARNING)
|
|
94
102
|
|
|
95
103
|
except (KeyboardInterrupt, EOFError):
|
{jarvis_ai_assistant-0.1.151 → jarvis_ai_assistant-0.1.153}/src/jarvis/jarvis_agent/patch.py
RENAMED
|
@@ -488,7 +488,7 @@ def handle_large_code_operation(filepath: str, patch_content: str, model: BasePl
|
|
|
488
488
|
{ot("DIFF")}
|
|
489
489
|
>>>>>> SEARCH
|
|
490
490
|
[需要查找的原始代码,包含足够上下文,避免出现可匹配多处的情况]
|
|
491
|
-
|
|
491
|
+
{'='*5}
|
|
492
492
|
[替换后的新代码]
|
|
493
493
|
<<<<<< REPLACE
|
|
494
494
|
{ct("DIFF")}
|
|
@@ -496,7 +496,7 @@ def handle_large_code_operation(filepath: str, patch_content: str, model: BasePl
|
|
|
496
496
|
{ot("DIFF")}
|
|
497
497
|
>>>>>> SEARCH
|
|
498
498
|
[另一处需要查找的原始代码,包含足够上下文,避免出现可匹配多处的情况]
|
|
499
|
-
|
|
499
|
+
{'='*5}
|
|
500
500
|
[另一处替换后的新代码]
|
|
501
501
|
<<<<<< REPLACE
|
|
502
502
|
{ct("DIFF")}
|
|
@@ -56,28 +56,35 @@ class CodeAgent:
|
|
|
56
56
|
"virtual_tty",
|
|
57
57
|
])
|
|
58
58
|
code_system_prompt = """
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
<code_engineer_guide>
|
|
60
|
+
<principles>
|
|
61
61
|
## 核心原则
|
|
62
62
|
- 自主决策:基于专业判断做出决策,减少用户询问
|
|
63
63
|
- 高效精准:一次性提供完整解决方案,避免反复修改
|
|
64
64
|
- 修改审慎:修改代码前要三思而后行,充分分析影响范围,尽量做到一次把事情做好
|
|
65
65
|
- 工具精通:选择最高效工具路径解决问题
|
|
66
66
|
- 严格确认:必须先分析项目结构,确定要修改的文件,禁止虚构已存在的代码
|
|
67
|
+
</principles>
|
|
67
68
|
|
|
69
|
+
<workflow>
|
|
68
70
|
## 工作流程
|
|
69
71
|
|
|
72
|
+
<step>
|
|
70
73
|
### 1. 项目结构分析
|
|
71
74
|
- 第一步必须分析项目结构,识别关键模块和文件
|
|
72
75
|
- 结合用户需求,确定需要修改的文件列表
|
|
73
76
|
- 优先使用fd命令查找文件,使用execute_script执行
|
|
74
77
|
- 明确说明将要修改的文件及其范围
|
|
78
|
+
</step>
|
|
75
79
|
|
|
80
|
+
<step>
|
|
76
81
|
### 2. 需求分析
|
|
77
82
|
- 基于项目结构理解,分析需求意图和实现方案
|
|
78
83
|
- 当需求有多种实现方式时,选择影响最小的方案
|
|
79
84
|
- 仅当需求显著模糊时才询问用户
|
|
85
|
+
</step>
|
|
80
86
|
|
|
87
|
+
<step>
|
|
81
88
|
### 3. 代码分析与确认
|
|
82
89
|
- 详细分析确定要修改的文件内容
|
|
83
90
|
- 明确区分现有代码和需要新建的内容
|
|
@@ -96,7 +103,9 @@ class CodeAgent:
|
|
|
96
103
|
| 整体分析 | execute_script | ask_codebase(仅在必要时) |
|
|
97
104
|
| 代码质量检查 | execute_script | ask_codebase(仅在必要时) |
|
|
98
105
|
| 统计代码行数 | loc (通过execute_script) | - |
|
|
106
|
+
</step>
|
|
99
107
|
|
|
108
|
+
<step>
|
|
100
109
|
### 4. 方案设计
|
|
101
110
|
- 确定最小变更方案,保持代码结构
|
|
102
111
|
- 变更类型处理:
|
|
@@ -106,20 +115,28 @@ class CodeAgent:
|
|
|
106
115
|
- ≤50行:一次性完成所有修改
|
|
107
116
|
- 50-200行:按功能模块分组
|
|
108
117
|
- >200行:按功能拆分,但尽量减少提交次数
|
|
118
|
+
</step>
|
|
109
119
|
|
|
120
|
+
<step>
|
|
110
121
|
### 5. 实施修改
|
|
111
122
|
- 遵循"先读后写"原则,在修改已有代码前,必须已经读取了对应文件,如果已经读取过文件,不需要重新读取
|
|
112
123
|
- 保持代码风格一致性
|
|
113
124
|
- 自动匹配项目现有命名风格
|
|
114
125
|
- 允许创建新文件和结构,但不得假设或虚构现有代码
|
|
126
|
+
</step>
|
|
127
|
+
</workflow>
|
|
115
128
|
|
|
129
|
+
<tools>
|
|
116
130
|
## 专用工具简介
|
|
117
131
|
仅在必要时使用以下专用工具:
|
|
118
132
|
|
|
119
133
|
- **ask_codebase**: 代码库整体查询,应优先使用fd、rg和read_code组合替代
|
|
134
|
+
</tools>
|
|
120
135
|
|
|
136
|
+
<shell_commands>
|
|
121
137
|
## Shell命令优先策略
|
|
122
138
|
|
|
139
|
+
<category>
|
|
123
140
|
### 优先使用的Shell命令
|
|
124
141
|
- **项目结构分析**:
|
|
125
142
|
- `fd -t f -e py` 查找所有Python文件
|
|
@@ -129,7 +146,9 @@ class CodeAgent:
|
|
|
129
146
|
- `fd -t f -e go` 查找所有Go文件
|
|
130
147
|
- `fd -t f -e rs` 查找所有Rust文件
|
|
131
148
|
- `fd -t f -e c -e cpp -e h -e hpp` 查找所有C/C++文件
|
|
149
|
+
</category>
|
|
132
150
|
|
|
151
|
+
<category>
|
|
133
152
|
- **代码内容搜索**:
|
|
134
153
|
- `rg "pattern" --type py` 在Python文件中搜索
|
|
135
154
|
- `rg "pattern" --type js` 在JavaScript文件中搜索
|
|
@@ -138,10 +157,14 @@ class CodeAgent:
|
|
|
138
157
|
- `rg "class ClassName"` 查找类定义
|
|
139
158
|
- `rg "func|function|def" -g "*.py" -g "*.js" -g "*.go" -g "*.rs"` 查找函数定义
|
|
140
159
|
- `rg -w "word"` 精确匹配单词
|
|
160
|
+
</category>
|
|
141
161
|
|
|
162
|
+
<category>
|
|
142
163
|
- **代码统计分析**:
|
|
143
164
|
- `loc` 统计当前目录代码行数
|
|
165
|
+
</category>
|
|
144
166
|
|
|
167
|
+
<category>
|
|
145
168
|
- **代码质量检查**:
|
|
146
169
|
- Python: `pylint <file_path>`, `flake8 <file_path>`
|
|
147
170
|
- JavaScript: `eslint <file_path>`
|
|
@@ -150,21 +173,30 @@ class CodeAgent:
|
|
|
150
173
|
- Go: `go vet <file_path>`
|
|
151
174
|
- Rust: `cargo clippy`
|
|
152
175
|
- C/C++: `cppcheck <file_path>`
|
|
176
|
+
</category>
|
|
153
177
|
|
|
178
|
+
<category>
|
|
154
179
|
- **整体代码分析**:
|
|
155
180
|
- 使用execute_script编写和执行脚本,批量分析多个文件
|
|
156
181
|
- 简单脚本示例:`find . -name "*.py" | xargs pylint`
|
|
157
182
|
- 使用多工具组合:`fd -e py | xargs pylint`
|
|
183
|
+
</category>
|
|
184
|
+
</shell_commands>
|
|
158
185
|
|
|
186
|
+
<read_code_usage>
|
|
159
187
|
### read_code工具使用
|
|
160
188
|
读取文件应优先使用read_code工具,而非shell命令:
|
|
161
189
|
- 完整读取:使用read_code读取整个文件内容
|
|
162
190
|
- 部分读取:使用read_code指定行范围
|
|
163
191
|
- 大文件处理:对大型文件使用read_code指定行范围,避免全部加载
|
|
192
|
+
</read_code_usage>
|
|
164
193
|
|
|
194
|
+
<tool_usage>
|
|
165
195
|
### 仅在命令行工具不足时使用专用工具
|
|
166
196
|
只有当fd、rg、loc和read_code工具无法获取足够信息时,才考虑使用专用工具(ask_codebase等)。在每次使用专用工具前,应先尝试使用上述工具获取所需信息。
|
|
197
|
+
</tool_usage>
|
|
167
198
|
|
|
199
|
+
<notes>
|
|
168
200
|
### 注意事项
|
|
169
201
|
- read_code比cat或grep更适合阅读代码
|
|
170
202
|
- rg比grep更快更强大,应优先使用
|
|
@@ -173,6 +205,8 @@ class CodeAgent:
|
|
|
173
205
|
- 针对不同编程语言选择对应的代码质量检查工具
|
|
174
206
|
- 不要留下未实现的代码
|
|
175
207
|
- 对于非常复杂的需求,可以使用create_code_agent工具,但是要提供完整的上下文信息
|
|
208
|
+
</notes>
|
|
209
|
+
</code_engineer_guide>
|
|
176
210
|
"""
|
|
177
211
|
# Dynamically add ask_codebase based on task complexity if really needed
|
|
178
212
|
# 处理platform参数
|