jarvis-ai-assistant 0.1.198__tar.gz → 0.1.200__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.
Files changed (105) hide show
  1. {jarvis_ai_assistant-0.1.198/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.200}/PKG-INFO +1 -1
  2. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/pyproject.toml +1 -1
  3. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/setup.py +1 -1
  4. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/__init__.py +1 -1
  5. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_agent/__init__.py +5 -0
  6. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_agent/builtin_input_handler.py +1 -0
  7. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_platform/yuanbao.py +4 -4
  8. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/edit_file.py +3 -3
  9. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/rewrite_file.py +22 -9
  10. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/builtin_replace_map.py +0 -88
  11. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/utils.py +12 -4
  12. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200/src/jarvis_ai_assistant.egg-info}/PKG-INFO +1 -1
  13. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/LICENSE +0 -0
  14. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/MANIFEST.in +0 -0
  15. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/README.md +0 -0
  16. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/setup.cfg +0 -0
  17. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_agent/jarvis.py +0 -0
  18. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_agent/main.py +0 -0
  19. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_agent/output_handler.py +0 -0
  20. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
  21. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
  22. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_agent/code_agent.py +0 -0
  23. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_agent/lint.py +0 -0
  24. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
  25. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
  26. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
  27. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
  28. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
  29. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
  30. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
  31. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
  32. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
  33. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
  34. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
  35. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
  36. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
  37. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
  38. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
  39. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
  40. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
  41. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
  42. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
  43. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
  44. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_code_analysis/code_review.py +0 -0
  45. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_data/config_schema.json +0 -0
  46. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_data/huggingface.tar.gz +0 -0
  47. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_dev/main.py +0 -0
  48. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_git_details/__init__.py +0 -0
  49. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_git_details/main.py +0 -0
  50. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
  51. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_git_squash/main.py +0 -0
  52. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_git_utils/git_commiter.py +0 -0
  53. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_mcp/__init__.py +0 -0
  54. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_mcp/sse_mcp_client.py +0 -0
  55. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_mcp/stdio_mcp_client.py +0 -0
  56. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_mcp/streamable_mcp_client.py +0 -0
  57. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_methodology/main.py +0 -0
  58. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
  59. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_multi_agent/main.py +0 -0
  60. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_platform/__init__.py +0 -0
  61. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_platform/base.py +0 -0
  62. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_platform/human.py +0 -0
  63. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_platform/kimi.py +0 -0
  64. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_platform/openai.py +0 -0
  65. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_platform/registry.py +0 -0
  66. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_platform/tongyi.py +0 -0
  67. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
  68. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_platform_manager/main.py +0 -0
  69. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
  70. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_smart_shell/main.py +0 -0
  71. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/__init__.py +0 -0
  72. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/ask_user.py +0 -0
  73. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/base.py +0 -0
  74. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/chdir.py +0 -0
  75. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/cli/__init__.py +0 -0
  76. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/cli/main.py +0 -0
  77. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/code_plan.py +0 -0
  78. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/create_code_agent.py +0 -0
  79. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/create_sub_agent.py +0 -0
  80. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/execute_script.py +0 -0
  81. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/file_analyzer.py +0 -0
  82. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/file_operation.py +0 -0
  83. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/generate_new_tool.py +0 -0
  84. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/methodology.py +0 -0
  85. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/read_code.py +0 -0
  86. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
  87. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/registry.py +0 -0
  88. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/search_web.py +0 -0
  89. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
  90. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/__init__.py +0 -0
  91. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/config.py +0 -0
  92. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/embedding.py +0 -0
  93. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/file_processors.py +0 -0
  94. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/git_utils.py +0 -0
  95. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/globals.py +0 -0
  96. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/input.py +0 -0
  97. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/jarvis_history.py +0 -0
  98. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/methodology.py +0 -0
  99. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/output.py +0 -0
  100. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis/jarvis_utils/tag.py +0 -0
  101. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +0 -0
  102. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
  103. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -0
  104. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/src/jarvis_ai_assistant.egg-info/requires.txt +0 -0
  105. {jarvis_ai_assistant-0.1.198 → jarvis_ai_assistant-0.1.200}/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.198
3
+ Version: 0.1.200
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
@@ -8,7 +8,7 @@ default = true
8
8
 
9
9
  [project]
10
10
  name = "jarvis-ai-assistant"
11
- version = "0.1.198"
11
+ version = "0.1.200"
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" }]
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
3
3
 
4
4
  setup(
5
5
  name="jarvis-ai-assistant",
6
- version="0.1.198",
6
+ version="0.1.200",
7
7
  author="skyfire",
8
8
  author_email="skyfireitdiy@hotmail.com",
9
9
  description="An AI assistant that uses various tools to interact with the system",
@@ -1,4 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """Jarvis AI Assistant"""
3
3
 
4
- __version__ = "0.1.198"
4
+ __version__ = "0.1.200"
@@ -821,6 +821,11 @@ arguments:
821
821
  f"模型交互期间被中断,请输入用户干预信息:"
822
822
  )
823
823
  if user_input:
824
+ # 如果有工具调用且用户确认继续,则将干预信息和工具执行结果拼接为prompt
825
+ if any(handler.can_handle(current_response) for handler in self.output_handler):
826
+ if user_confirm("检测到有工具调用,是否继续处理工具调用?", True):
827
+ self.prompt = f"{user_input}\n\n{current_response}"
828
+ continue
824
829
  self.prompt += f"{user_input}"
825
830
  continue
826
831
 
@@ -45,6 +45,7 @@ def builtin_input_handler(user_input: str, agent_: Any) -> Tuple[str, bool]:
45
45
  tool_registry_ if tool_registry_ else ToolRegistry()
46
46
  )
47
47
  agent.set_addon_prompt(tool_registry.prompt())
48
+ return "", False
48
49
  elif tag == "ReloadConfig":
49
50
  from jarvis.jarvis_utils.utils import load_config
50
51
 
@@ -98,7 +98,7 @@ class YuanbaoPlatform(BasePlatform):
98
98
 
99
99
  try:
100
100
  response = while_success(
101
- lambda: requests.post(url, headers=headers, data=payload), sleep_time=5
101
+ lambda: requests.post(url, headers=headers, data=payload, timeout=600), sleep_time=5
102
102
  )
103
103
  response_json = response.json()
104
104
 
@@ -264,7 +264,7 @@ class YuanbaoPlatform(BasePlatform):
264
264
 
265
265
  try:
266
266
  response = while_success(
267
- lambda: requests.post(url, headers=headers, json=payload), sleep_time=5
267
+ lambda: requests.post(url, headers=headers, json=payload, timeout=600), sleep_time=5
268
268
  )
269
269
 
270
270
  if response.status_code != 200:
@@ -482,7 +482,7 @@ class YuanbaoPlatform(BasePlatform):
482
482
  try:
483
483
  # 发送消息请求,获取流式响应
484
484
  response = while_success(
485
- lambda: requests.post(url, headers=headers, json=payload, stream=True),
485
+ lambda: requests.post(url, headers=headers, json=payload, stream=True, timeout=600),
486
486
  sleep_time=5,
487
487
  )
488
488
 
@@ -556,7 +556,7 @@ class YuanbaoPlatform(BasePlatform):
556
556
 
557
557
  try:
558
558
  response = while_success(
559
- lambda: requests.post(url, headers=headers, json=payload), sleep_time=5
559
+ lambda: requests.post(url, headers=headers, json=payload, timeout=600), sleep_time=5
560
560
  )
561
561
 
562
562
  if response.status_code == 200:
@@ -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),
@@ -96,92 +96,4 @@ code_plan工具将:
96
96
  """,
97
97
  "description": "执行静态代码检查",
98
98
  },
99
- "ToolHelp": {
100
- "append": False,
101
- "template": """
102
- <tool_system_guide>
103
- <introduction>
104
- # 🛠️ 工具使用系统
105
- 您正在使用一个需要精确格式和严格规则的工具执行系统。
106
- </introduction>
107
-
108
- <format>
109
- # 📋 工具调用格式
110
- {ot("TOOL_CALL")}
111
- want: 想要从执行结果中获取到的信息,如果工具输出内容过长,会根据此字段尝试提取有效信息
112
- name: 工具名称
113
- arguments:
114
- param1: 值1
115
- param2: 值2
116
- {ct("TOOL_CALL")}
117
- </format>
118
-
119
- <rules>
120
- # ❗ 关键规则
121
- <rule>
122
- ### 1. 每次只使用一个工具
123
- - 一次只执行一个工具
124
- - 等待结果后再进行下一步
125
- </rule>
126
-
127
- <rule>
128
- ### 2. 严格遵守格式
129
- - 完全按照上述格式
130
- - 使用正确的YAML格式,2个空格作为缩进
131
- - 包含所有必需参数
132
- </rule>
133
-
134
- <rule>
135
- ### 3. 结果处理
136
- - 等待执行结果
137
- - 不要假设结果
138
- - 不要创建虚假响应
139
- - 不要想象对话
140
- </rule>
141
-
142
- <rule>
143
- ### 4. 信息管理
144
- - 如果信息不足,询问用户
145
- - 跳过不必要的步骤
146
- - 如果卡住,请求指导
147
- - 不要在没有完整信息的情况下继续
148
- </rule>
149
- </rules>
150
-
151
- <string_format>
152
- # 📝 字符串参数格式
153
- 始终使用 |2 语法表示字符串参数,防止多行字符串行首空格引起歧义:
154
-
155
- {ot("TOOL_CALL")}
156
- want: 当前的git状态,期望获取xxx的提交记录
157
- name: execute_script
158
- arguments:
159
- interpreter: bash
160
- script_cotent: |2
161
- git status --porcelain
162
- {ct("TOOL_CALL")}
163
- </string_format>
164
-
165
- <best_practices>
166
- # 💡 最佳实践
167
- - 准备好后立即开始执行
168
- - 无需请求许可即可开始
169
- - 使用正确的字符串格式
170
- - 监控进度并调整
171
- - 遇到困难时请求帮助
172
- </best_practices>
173
-
174
- <common_errors>
175
- # ⚠️ 常见错误
176
- - 同时调用多个工具
177
- - 字符串参数缺少 |2
178
- - 假设工具结果
179
- - 创建虚构对话
180
- - 在没有所需信息的情况下继续
181
- - yaml 格式错误
182
- </common_errors>
183
- </tool_system_guide>
184
- """,
185
- "description": "工具使用系统",
186
- },
187
99
  }
@@ -3,6 +3,7 @@ import hashlib
3
3
  import os
4
4
  import signal
5
5
  import subprocess
6
+ import sys
6
7
  import tarfile
7
8
  import time
8
9
  from pathlib import Path
@@ -90,7 +91,11 @@ def init_env(welcome_str: str, config_file: Optional[str] = None) -> None:
90
91
  # 检查是否是git仓库并更新
91
92
  from jarvis.jarvis_utils.git_utils import check_and_update_git_repo
92
93
 
93
- check_and_update_git_repo(str(script_dir))
94
+ if check_and_update_git_repo(str(script_dir)):
95
+ # 更新成功,用当前命令行参数启动新进程
96
+ os.execv(sys.executable, [sys.executable] + sys.argv)
97
+ # 如果execv失败,退出当前进程
98
+ sys.exit(0)
94
99
 
95
100
 
96
101
  def load_config():
@@ -273,9 +278,12 @@ def user_confirm(tip: str, default: bool = True) -> bool:
273
278
  返回:
274
279
  bool: 用户确认返回True,否则返回False
275
280
  """
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"
281
+ try:
282
+ suffix = "[Y/n]" if default else "[y/N]"
283
+ ret = get_single_line_input(f"{tip} {suffix}: ")
284
+ return default if ret == "" else ret.lower() == "y"
285
+ except KeyboardInterrupt:
286
+ return False
279
287
 
280
288
 
281
289
  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.198
3
+ Version: 0.1.200
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