jarvis-ai-assistant 0.1.198__py3-none-any.whl → 0.1.199__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.
- jarvis/__init__.py +1 -1
- jarvis/jarvis_tools/edit_file.py +3 -3
- jarvis/jarvis_tools/rewrite_file.py +22 -9
- jarvis/jarvis_utils/utils.py +6 -4
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.199.dist-info}/METADATA +1 -1
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.199.dist-info}/RECORD +10 -10
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.199.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.199.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.199.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.199.dist-info}/top_level.txt +0 -0
jarvis/__init__.py
CHANGED
jarvis/jarvis_tools/edit_file.py
CHANGED
@@ -444,7 +444,7 @@ def fast_edit(
|
|
444
444
|
# 如果有多处,报错
|
445
445
|
if modified_content.count(search_text) > 1:
|
446
446
|
success = False
|
447
|
-
err_msg = f"搜索文本 {search_text} 在文件中存在多处,请检查补丁内容"
|
447
|
+
err_msg = f"搜索文本 ```\n{search_text}\n``` 在文件中存在多处,请检查补丁内容"
|
448
448
|
break
|
449
449
|
# 应用替换
|
450
450
|
modified_content = modified_content.replace(search_text, replace_text)
|
@@ -465,7 +465,7 @@ def fast_edit(
|
|
465
465
|
if indented_search in modified_content:
|
466
466
|
if modified_content.count(indented_search) > 1:
|
467
467
|
success = False
|
468
|
-
err_msg = f"搜索文本 {indented_search} 在文件中存在多处,请检查补丁内容"
|
468
|
+
err_msg = f"搜索文本 ```\n{indented_search}\n``` 在文件中存在多处,请检查补丁内容"
|
469
469
|
break
|
470
470
|
modified_content = modified_content.replace(
|
471
471
|
indented_search, indented_replace
|
@@ -478,7 +478,7 @@ def fast_edit(
|
|
478
478
|
|
479
479
|
if not found:
|
480
480
|
success = False
|
481
|
-
err_msg = f"搜索文本 {search_text} 在文件中不存在,尝试增加1-16个空格缩进后仍未找到匹配"
|
481
|
+
err_msg = f"搜索文本 ```\n{search_text}\n``` 在文件中不存在,尝试增加1-16个空格缩进后仍未找到匹配"
|
482
482
|
break
|
483
483
|
if not success:
|
484
484
|
revert_file(filepath)
|
@@ -86,6 +86,8 @@ class FileRewriteTool:
|
|
86
86
|
|
87
87
|
file_path = args["file"]
|
88
88
|
new_content = args["content"]
|
89
|
+
agent = args.get("agent", None)
|
90
|
+
abs_path = os.path.abspath(file_path)
|
89
91
|
|
90
92
|
# 创建已处理文件变量,用于失败时回滚
|
91
93
|
original_content = None
|
@@ -97,20 +99,20 @@ class FileRewriteTool:
|
|
97
99
|
try:
|
98
100
|
# 如果文件存在,则读取原内容用于回滚
|
99
101
|
if file_exists:
|
100
|
-
with open(
|
102
|
+
with open(abs_path, "r", encoding="utf-8") as f:
|
101
103
|
original_content = f.read()
|
102
104
|
|
103
105
|
# 确保目录存在
|
104
|
-
os.makedirs(os.path.dirname(
|
106
|
+
os.makedirs(os.path.dirname(abs_path), exist_ok=True)
|
105
107
|
|
106
108
|
# 写入新内容
|
107
|
-
with open(
|
109
|
+
with open(abs_path, "w", encoding="utf-8") as f:
|
108
110
|
f.write(new_content)
|
109
111
|
|
110
112
|
processed = True
|
111
113
|
|
112
114
|
action = "创建并写入" if not file_exists else "成功重写"
|
113
|
-
stdout_message = f"文件 {
|
115
|
+
stdout_message = f"文件 {abs_path} {action}"
|
114
116
|
stdout_messages.append(stdout_message)
|
115
117
|
PrettyOutput.print(stdout_message, OutputType.SUCCESS)
|
116
118
|
|
@@ -129,14 +131,14 @@ class FileRewriteTool:
|
|
129
131
|
try:
|
130
132
|
if original_content is None:
|
131
133
|
# 如果是新创建的文件,则删除
|
132
|
-
if os.path.exists(
|
133
|
-
os.remove(
|
134
|
-
rollback_file_message = f"已删除新创建的文件: {
|
134
|
+
if os.path.exists(abs_path):
|
135
|
+
os.remove(abs_path)
|
136
|
+
rollback_file_message = f"已删除新创建的文件: {abs_path}"
|
135
137
|
else:
|
136
138
|
# 如果是修改的文件,则恢复原内容
|
137
|
-
with open(
|
139
|
+
with open(abs_path, "w", encoding="utf-8") as f:
|
138
140
|
f.write(original_content)
|
139
|
-
rollback_file_message = f"已回滚文件: {
|
141
|
+
rollback_file_message = f"已回滚文件: {abs_path}"
|
140
142
|
|
141
143
|
stderr_messages.append(rollback_file_message)
|
142
144
|
PrettyOutput.print(rollback_file_message, OutputType.INFO)
|
@@ -145,6 +147,17 @@ class FileRewriteTool:
|
|
145
147
|
stderr_messages.append(rollback_error)
|
146
148
|
PrettyOutput.print(rollback_error, OutputType.WARNING)
|
147
149
|
|
150
|
+
# 记录成功处理的文件(使用绝对路径)
|
151
|
+
if success and agent:
|
152
|
+
abs_path = os.path.abspath(file_path)
|
153
|
+
files = agent.get_user_data("files")
|
154
|
+
if files:
|
155
|
+
if abs_path not in files:
|
156
|
+
files.append(abs_path)
|
157
|
+
else:
|
158
|
+
files = [abs_path]
|
159
|
+
agent.set_user_data("files", files)
|
160
|
+
|
148
161
|
return {
|
149
162
|
"success": success,
|
150
163
|
"stdout": "\n".join(stdout_messages),
|
jarvis/jarvis_utils/utils.py
CHANGED
@@ -9,7 +9,6 @@ from pathlib import Path
|
|
9
9
|
from typing import Any, Callable, Dict, Optional
|
10
10
|
|
11
11
|
import yaml
|
12
|
-
|
13
12
|
from jarvis import __version__
|
14
13
|
from jarvis.jarvis_utils.config import (get_data_dir, get_max_big_content_size,
|
15
14
|
set_global_env_data)
|
@@ -273,9 +272,12 @@ def user_confirm(tip: str, default: bool = True) -> bool:
|
|
273
272
|
返回:
|
274
273
|
bool: 用户确认返回True,否则返回False
|
275
274
|
"""
|
276
|
-
|
277
|
-
|
278
|
-
|
275
|
+
try:
|
276
|
+
suffix = "[Y/n]" if default else "[y/N]"
|
277
|
+
ret = get_single_line_input(f"{tip} {suffix}: ")
|
278
|
+
return default if ret == "" else ret.lower() == "y"
|
279
|
+
except KeyboardInterrupt:
|
280
|
+
return False
|
279
281
|
|
280
282
|
|
281
283
|
def get_file_line_count(filename: str) -> int:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=tXkivau40d78Z7nHzkRcchadVpBr5PZG5ETLDQcLXio,75
|
2
2
|
jarvis/jarvis_agent/__init__.py,sha256=3CfmmDU9ccEtJmRAtY86cdBm6NUYWatAsbgQFjs0t6M,33880
|
3
3
|
jarvis/jarvis_agent/builtin_input_handler.py,sha256=4CCEtVLRBIpkhDUKd54VcX1JFCIWCvDqDh4B1H-eSn0,2187
|
4
4
|
jarvis/jarvis_agent/jarvis.py,sha256=GH2zi8eXNpW8twiY3LKDEZgGmFC5geB0jlkwFrm7hOQ,6279
|
@@ -63,7 +63,7 @@ jarvis/jarvis_tools/chdir.py,sha256=BlRvggcOeBM7UwHGL8U8hjuNm_WGkH5BdhxmPVJXejw,
|
|
63
63
|
jarvis/jarvis_tools/code_plan.py,sha256=XRXHdkN4O1A4qbShLa4VBHFdRl6YdyMgZxbPPotrqNs,7358
|
64
64
|
jarvis/jarvis_tools/create_code_agent.py,sha256=wls2B2iLrIEeG9kSWnJHv1wQ4TNqdD9T5OPoAyN53N0,3384
|
65
65
|
jarvis/jarvis_tools/create_sub_agent.py,sha256=ilnApbz7ptNz5o3IrhBTTiNMJGtdeUmkpYL2BFqyI6c,2874
|
66
|
-
jarvis/jarvis_tools/edit_file.py,sha256=
|
66
|
+
jarvis/jarvis_tools/edit_file.py,sha256=Awe_2zZxRl_2u81pu4VKb9Rom4xzbYpZV07_s7BEhLM,18747
|
67
67
|
jarvis/jarvis_tools/execute_script.py,sha256=gMarE5yCCSPU6Dp6HlcL2KT-2xCzR-1p-oQNlYOJK58,6157
|
68
68
|
jarvis/jarvis_tools/file_analyzer.py,sha256=SvNLve5AL2d3oQsWSoHouIsAsYanksBnl5RCCsrw2PQ,4604
|
69
69
|
jarvis/jarvis_tools/file_operation.py,sha256=b488jf0_l7aP0RkntaNE9WqZXtbdrQTJdmWawJbfC-A,9529
|
@@ -72,7 +72,7 @@ jarvis/jarvis_tools/methodology.py,sha256=_K4GIDUodGEma3SvNRo7Qs5rliijgNespVLyAP
|
|
72
72
|
jarvis/jarvis_tools/read_code.py,sha256=6mQ3KNGc43FTiLFxMbAN28FTSVhVfkFJ6mob4heXBNM,6663
|
73
73
|
jarvis/jarvis_tools/read_webpage.py,sha256=NmDUboVZd4CGHBPRFK6dp3uqVhuGopW1bOi3TcaLDF4,2092
|
74
74
|
jarvis/jarvis_tools/registry.py,sha256=ZuD6x4znAGwB-Z7-43f-SAlrFPIVaLiHqzpZp6zc5r4,25729
|
75
|
-
jarvis/jarvis_tools/rewrite_file.py,sha256=
|
75
|
+
jarvis/jarvis_tools/rewrite_file.py,sha256=eG_WKg6cVAXmuGwUqlWkcuyay5S8DOzEi8vZCmX3O8w,7255
|
76
76
|
jarvis/jarvis_tools/search_web.py,sha256=C-TuBFy25WOSiwRCe7YiL0hnMx0DuHj6upHO5OtkHTA,925
|
77
77
|
jarvis/jarvis_tools/virtual_tty.py,sha256=KKr3jpvQWWMPr2o40hlmN6fuXJCN8H4_ma5QU40Citc,16089
|
78
78
|
jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -89,10 +89,10 @@ jarvis/jarvis_utils/jarvis_history.py,sha256=Td6cmze9Oc5-Ewz0l9RKYeSg_-fbEu9ZhyE
|
|
89
89
|
jarvis/jarvis_utils/methodology.py,sha256=MhPrMxMqElyAn54BDfpQdUqrRr7IbSlrLvAI39LCgTM,8487
|
90
90
|
jarvis/jarvis_utils/output.py,sha256=PRCgudPOB8gMEP3u-g0FGD2c6tBgJhLXUMqNPglfjV8,10813
|
91
91
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
92
|
-
jarvis/jarvis_utils/utils.py,sha256=
|
93
|
-
jarvis_ai_assistant-0.1.
|
94
|
-
jarvis_ai_assistant-0.1.
|
95
|
-
jarvis_ai_assistant-0.1.
|
96
|
-
jarvis_ai_assistant-0.1.
|
97
|
-
jarvis_ai_assistant-0.1.
|
98
|
-
jarvis_ai_assistant-0.1.
|
92
|
+
jarvis/jarvis_utils/utils.py,sha256=ZtI7UoZxTA2i5koO0GUKZvj8K6RlOmL8dGT4wnm20kE,11966
|
93
|
+
jarvis_ai_assistant-0.1.199.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
94
|
+
jarvis_ai_assistant-0.1.199.dist-info/METADATA,sha256=66SM4uj6AbqzkyeICMhTL-FAJ_4U1ptY_CqN7MwGjNg,20215
|
95
|
+
jarvis_ai_assistant-0.1.199.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
96
|
+
jarvis_ai_assistant-0.1.199.dist-info/entry_points.txt,sha256=Gy3DOP1PYLMK0GCj4rrP_9lkOyBQ39EK_lKGUSwn41E,869
|
97
|
+
jarvis_ai_assistant-0.1.199.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
98
|
+
jarvis_ai_assistant-0.1.199.dist-info/RECORD,,
|
File without changes
|
{jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.199.dist-info}/entry_points.txt
RENAMED
File without changes
|
{jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.199.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
{jarvis_ai_assistant-0.1.198.dist-info → jarvis_ai_assistant-0.1.199.dist-info}/top_level.txt
RENAMED
File without changes
|