jarvis-ai-assistant 0.1.197__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 CHANGED
@@ -1,4 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """Jarvis AI Assistant"""
3
3
 
4
- __version__ = "0.1.197"
4
+ __version__ = "0.1.199"
@@ -868,7 +868,7 @@ arguments:
868
868
  import tempfile
869
869
  timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
870
870
  history_md = str(Path(tempfile.gettempdir())/f"{self.name}_history_{timestamp}.md")
871
- self.history.export_history_to_markdown(tempfile.gettempdir(), history_md, max_files=self.history_count)
871
+ self.history.export_history_to_markdown(self.history_dir, history_md, max_files=self.history_count)
872
872
  self.files.append(history_md)
873
873
 
874
874
  # 如果有上传文件,先上传文件
@@ -882,9 +882,16 @@ arguments:
882
882
  for handler in self.input_handler:
883
883
  msg, _ = handler(msg, self)
884
884
  self.prompt = f"{self.prompt}\n\n以下是历史类似问题的执行经验,可参考:\n{load_methodology(msg, self.get_tool_registry())}"
885
+ else:
886
+ if self.files:
887
+ self.prompt = f"{self.prompt}\n\n上传的文件包含历史对话信息和方法论文件,可以从中获取一些经验信息。"
888
+ else:
889
+ self.prompt = f"{self.prompt}\n\n上传的文件包含历史对话信息,可以从中获取一些经验信息。"
885
890
  elif self.files:
886
891
  if not self.model.upload_files(self.files):
887
892
  PrettyOutput.print("文件上传失败,将忽略文件列表", OutputType.WARNING)
893
+ else:
894
+ self.prompt = f"{self.prompt}\n\n上传的文件包含历史对话信息,可以从中获取一些经验信息。"
888
895
  else:
889
896
  if self.files:
890
897
  PrettyOutput.print("不支持上传文件,将忽略文件列表", OutputType.WARNING)
@@ -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(file_path, "r", encoding="utf-8") as f:
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(os.path.abspath(file_path)), exist_ok=True)
106
+ os.makedirs(os.path.dirname(abs_path), exist_ok=True)
105
107
 
106
108
  # 写入新内容
107
- with open(file_path, "w", encoding="utf-8") as f:
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"文件 {file_path} {action}"
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(file_path):
133
- os.remove(file_path)
134
- rollback_file_message = f"已删除新创建的文件: {file_path}"
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(file_path, "w", encoding="utf-8") as f:
139
+ with open(abs_path, "w", encoding="utf-8") as f:
138
140
  f.write(original_content)
139
- rollback_file_message = f"已回滚文件: {file_path}"
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),
@@ -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
- 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"
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.197
3
+ Version: 0.1.199
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
@@ -1,5 +1,5 @@
1
- jarvis/__init__.py,sha256=yN1aJh6gZYIZoCWOibxj7NWyO48_EH7fOLOVXD_Dl4w,75
2
- jarvis/jarvis_agent/__init__.py,sha256=qcer73IfiAd_IaHznBXAg-nzHZdkoCYhRloDFyJRcTM,33346
1
+ jarvis/__init__.py,sha256=tXkivau40d78Z7nHzkRcchadVpBr5PZG5ETLDQcLXio,75
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
5
5
  jarvis/jarvis_agent/main.py,sha256=c6bQe-8LXvW2-NBn9Rn_yPYdrwnkJ8KQaSFY2cPvkxw,2775
@@ -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=cIaxWEW5ES1fiNp6Hm5f2MUXHLPzpeeKITukQaMRsKg,18717
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=w-NY9UfDopCLtaUmdOFHHzSQAvTOIYRuM1RbyV0k2Yg,6755
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=55kIbFXPFEd6770mdy2fZDh96XH0rIFJw2w3rYhE2Cc,11895
93
- jarvis_ai_assistant-0.1.197.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
94
- jarvis_ai_assistant-0.1.197.dist-info/METADATA,sha256=WXBVY2pO7UC4ZppWf6rfgtm61tfqUA3hA0WigWBRs_g,20215
95
- jarvis_ai_assistant-0.1.197.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
96
- jarvis_ai_assistant-0.1.197.dist-info/entry_points.txt,sha256=Gy3DOP1PYLMK0GCj4rrP_9lkOyBQ39EK_lKGUSwn41E,869
97
- jarvis_ai_assistant-0.1.197.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
98
- jarvis_ai_assistant-0.1.197.dist-info/RECORD,,
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,,