beswarm 0.1.76__py3-none-any.whl → 0.1.78__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.
beswarm/aient/setup.py CHANGED
@@ -4,7 +4,7 @@ from setuptools import setup, find_packages
4
4
 
5
5
  setup(
6
6
  name="aient",
7
- version="1.1.26",
7
+ version="1.1.28",
8
8
  description="Aient: The Awakening of Agent.",
9
9
  long_description=Path.open(Path("README.md"), encoding="utf-8").read(),
10
10
  long_description_content_type="text/markdown",
@@ -462,6 +462,10 @@ class chatgpt(BaseLLM):
462
462
  print("full_response", full_response)
463
463
  if function_parameter:
464
464
  need_function_call = True
465
+ if isinstance(self.conversation[convo_id][-1]["content"], str) and \
466
+ "<tool_error>" in self.conversation[convo_id][-1]["content"]:
467
+ need_function_call = False
468
+ full_response = "接下来我需要做什么?"
465
469
  else:
466
470
  need_function_call = False
467
471
  if self.print_log:
@@ -1,10 +1,9 @@
1
1
  import subprocess
2
2
  from .registry import register_tool
3
- from ..utils.scripts import sandbox
3
+ from ..utils.scripts import sandbox, unescape_html
4
4
 
5
5
  import re
6
6
  import os
7
- import html
8
7
  import select
9
8
 
10
9
  # 检查是否在 Unix-like 系统上 (pty 模块主要用于 Unix)
@@ -39,18 +38,6 @@ def compare_line(line: str) -> bool:
39
38
  # print(f"similarity: {similarity}")
40
39
  return similarity > 0.89
41
40
 
42
- def unescape_html(input_string: str) -> str:
43
- """
44
- 将字符串中的 HTML 实体(例如 &amp;)转换回其原始字符(例如 &)。
45
-
46
- Args:
47
- input_string: 包含 HTML 实体的输入字符串。
48
-
49
- Returns:
50
- 转换后的字符串。
51
- """
52
- return html.unescape(input_string)
53
-
54
41
  def get_python_executable(command: str) -> str:
55
42
  """
56
43
  获取 Python 可执行文件的路径。
@@ -191,18 +178,21 @@ def excute_command(command):
191
178
  # print(f"output_lines: {len(new_output_lines)}")
192
179
 
193
180
  if process.returncode == 0:
194
- return f"执行命令成功:\n{final_output_log}"
181
+ if final_output_log.strip() == "":
182
+ return f"执行命令成功"
183
+ else:
184
+ return f"执行命令成功:\n{final_output_log.strip()}"
195
185
  else:
196
186
  # 如果是 PTY 模式,stderr 已经包含在 final_output_log 中
197
187
  if IS_UNIX:
198
- return f"执行命令失败 (退出码 {process.returncode}):\n输出/错误:\n{final_output_log}"
188
+ return f"<tool_error>执行命令失败 (退出码 {process.returncode}):\n输出/错误:\n{final_output_log}</tool_error>"
199
189
  else:
200
- return f"执行命令失败 (退出码 {process.returncode}):\n错误: {stderr_output}\n输出: {final_output_log}"
190
+ return f"<tool_error>执行命令失败 (退出码 {process.returncode}):\n错误: {stderr_output}\n输出: {final_output_log}</tool_error>"
201
191
 
202
192
  except FileNotFoundError:
203
- return f"执行命令失败: 命令或程序未找到 ({command})"
193
+ return f"<tool_error>执行命令失败: 命令或程序未找到 ({command})</tool_error>"
204
194
  except Exception as e:
205
- return f"执行命令时发生异常: {e}"
195
+ return f"<tool_error>执行命令时发生异常: {e}</tool_error>"
206
196
 
207
197
  if __name__ == "__main__":
208
198
  # print(excute_command("ls -l && echo 'Hello, World!'"))
@@ -43,8 +43,8 @@ def list_directory(path="."):
43
43
  return result
44
44
 
45
45
  except FileNotFoundError:
46
- return f"错误: 路径 '{path}' 不存在"
46
+ return f"<tool_error>路径 '{path}' 不存在</tool_error>"
47
47
  except PermissionError:
48
- return f"错误: 没有权限访问路径 '{path}'"
48
+ return f"<tool_error>没有权限访问路径 '{path}'</tool_error>"
49
49
  except Exception as e:
50
- return f"列出目录时发生错误: {e}"
50
+ return f"<tool_error>列出目录时发生错误: {e}</tool_error>"
@@ -129,7 +129,7 @@ if _result is not None:
129
129
 
130
130
  except Exception as e:
131
131
  logging.error(f"Error executing code: {str(e)}")
132
- return f"Error: {str(e)}"
132
+ return f"<tool_error>Error: {str(e)}</tool_error>"
133
133
 
134
134
  finally:
135
135
  try:
@@ -1,19 +1,7 @@
1
1
  from .registry import register_tool
2
+ from ..utils.scripts import unescape_html
2
3
 
3
4
  import os
4
- import html
5
-
6
- def unescape_html(input_string: str) -> str:
7
- """
8
- 将字符串中的 HTML 实体(例如 &amp;)转换回其原始字符(例如 &)。
9
-
10
- Args:
11
- input_string: 包含 HTML 实体的输入字符串。
12
-
13
- Returns:
14
- 转换后的字符串。
15
- """
16
- return html.unescape(input_string)
17
5
 
18
6
  @register_tool()
19
7
  def write_to_file(path, content, mode='w'):
@@ -65,7 +53,7 @@ Example: Requesting to write to frontend-config.json
65
53
  with open(path, mode, encoding='utf-8') as file:
66
54
  file.write(unescape_html(content))
67
55
  except PermissionError as e:
68
- return f"写入文件失败: {e}"
56
+ return f"<tool_error>写入文件失败: {e}</tool_error>"
69
57
 
70
58
  return f"已成功写入文件:{path}"
71
59
 
@@ -202,6 +202,19 @@ def parse_tools_from_cursor_prompt(text):
202
202
  print(f"解析 JSON 时出错: {e}")
203
203
  return []
204
204
 
205
+ import html
206
+ def unescape_html(input_string: str) -> str:
207
+ """
208
+ 将字符串中的 HTML 实体(例如 &amp;)转换回其原始字符(例如 &)。
209
+
210
+ Args:
211
+ input_string: 包含 HTML 实体的输入字符串。
212
+
213
+ Returns:
214
+ 转换后的字符串。
215
+ """
216
+ return html.unescape(input_string)
217
+
205
218
  import sys
206
219
  import shlex
207
220
  import builtins
@@ -2,6 +2,7 @@ import os
2
2
  import re
3
3
  import difflib
4
4
  from ..aient.src.aient.plugins import register_tool
5
+ from ..aient.src.aient.utils.scripts import unescape_html
5
6
 
6
7
  @register_tool()
7
8
  def edit_file(file_path, diff_content, match_precision=0.9):
@@ -31,18 +32,18 @@ def edit_file(file_path, diff_content, match_precision=0.9):
31
32
  try:
32
33
  # 检查文件是否存在
33
34
  if not os.path.exists(file_path):
34
- return f"错误: 文件 '{file_path}' 不存在"
35
+ return f"<tool_error>文件 '{file_path}' 不存在</tool_error>"
35
36
 
36
37
  # 检查是否为文件
37
38
  if not os.path.isfile(file_path):
38
- return f"错误: '{file_path}' 不是一个文件"
39
+ return f"<tool_error>文件 '{file_path}' 不是一个文件</tool_error>"
39
40
 
40
41
  # 尝试读取文件的前几个字节来检测是否为二进制文件
41
42
  with open(file_path, 'rb') as file:
42
43
  data = file.read(1024)
43
44
  # 快速检查是否可能是二进制文件
44
45
  if b'\x00' in data:
45
- return f"错误: 文件 '{file_path}' 可能是二进制文件,编码无法解析"
46
+ return f"<tool_error>文件 '{file_path}' 可能是二进制文件,编码无法解析</tool_error>"
46
47
 
47
48
  # 读取原文件内容
48
49
  with open(file_path, 'r', encoding='utf-8') as file:
@@ -52,9 +53,9 @@ def edit_file(file_path, diff_content, match_precision=0.9):
52
53
  diff_blocks = re.findall(r'<<<<<<< SEARCH\n(.*?)\n=======\n(.*?)\n>>>>>>> REPLACE', diff_content, re.DOTALL)
53
54
 
54
55
  if not diff_blocks:
55
- return f"错误: 无效的diff格式,未找到搜索和替换块"
56
+ return f"<tool_error>无效的diff格式,未找到搜索和替换块</tool_error>"
56
57
  if len(diff_blocks) > 1:
57
- return f"错误: 只支持单次修改,`diff_content`参数中**必须只包含一个** `<<<<<<< SEARCH ... >>>>>>> REPLACE` 块,但找到了 {len(diff_blocks)} 个修改块"
58
+ return f"<tool_error>只支持单次修改,`diff_content`参数中**必须只包含一个** `<<<<<<< SEARCH ... >>>>>>> REPLACE` 块,但找到了 {len(diff_blocks)} 个修改块</tool_error>"
58
59
 
59
60
  # 记录修改次数和行数变化
60
61
  edits_count = 0
@@ -64,9 +65,11 @@ def edit_file(file_path, diff_content, match_precision=0.9):
64
65
  # 应用每个diff块
65
66
  new_content = content
66
67
  for search_block, replace_block in diff_blocks:
68
+ search_block = unescape_html(search_block)
69
+ replace_block = unescape_html(replace_block)
67
70
  # 检查搜索块是否为空
68
71
  if not search_block.strip():
69
- return f"错误: 搜索块不能为空"
72
+ return f"<tool_error>搜索块不能为空</tool_error>"
70
73
 
71
74
  if search_block in new_content:
72
75
  # 直接替换完全匹配的块
@@ -85,7 +88,7 @@ def edit_file(file_path, diff_content, match_precision=0.9):
85
88
 
86
89
  # 避免空搜索块
87
90
  if len(search_lines) == 0:
88
- return f"错误: 搜索块不能为空"
91
+ return f"<tool_error>搜索块不能为空</tool_error>"
89
92
 
90
93
  # 尝试找到最佳匹配位置
91
94
  best_match_index = -1
@@ -139,11 +142,18 @@ def edit_file(file_path, diff_content, match_precision=0.9):
139
142
  total_original_lines += original_lines
140
143
  total_new_lines += new_lines
141
144
  else:
142
- return f"错误: 在文件中未找到足够匹配的代码块,最佳匹配分数为 {best_match_score:.2f},但要求为 {match_precision:.2f}"
145
+ error_message = f"<tool_error>在文件中未找到足够匹配的代码块,最佳匹配分数为 {best_match_score:.2f},但要求为 {match_precision:.2f}。</tool_error>"
146
+ if best_match_index != -1:
147
+ start_index = max(0, best_match_index - len(search_lines))
148
+ end_index = min(len(content_lines), best_match_index + 2 * len(search_lines))
149
+ context_lines = content_lines[start_index:end_index]
150
+ context_block = '\n'.join(context_lines)
151
+ error_message += f"\n\nSEARCH块在原文件最佳匹配范围内的原文如下 (上下文已扩展),放在在 <real_file_content>...</real_file_content> 之间,请根据原文内容修正 diff_content 参数:\n<real_file_content>\n{context_block}\n</real_file_content>"
152
+ return error_message
143
153
 
144
154
  # 如果没有进行任何编辑,返回错误
145
155
  if edits_count == 0:
146
- return f"错误: 未能应用任何diff编辑"
156
+ return f"<tool_error>未能应用任何diff编辑</tool_error>"
147
157
 
148
158
  # 写入修改后的内容
149
159
  with open(file_path, 'w', encoding='utf-8') as file:
@@ -152,16 +162,16 @@ def edit_file(file_path, diff_content, match_precision=0.9):
152
162
  return f"成功: 文件 '{file_path}' 已更新。应用了 {edits_count} 处编辑,替换了 {total_original_lines} 行代码为 {total_new_lines} 行。"
153
163
 
154
164
  except PermissionError:
155
- return f"错误: 没有权限修改文件 '{file_path}'"
165
+ return f"<tool_error>没有权限修改文件 '{file_path}'</tool_error>"
156
166
  except UnicodeDecodeError:
157
- return f"错误: 文件 '{file_path}' 不是文本文件或编码不是UTF-8,无法进行编码解析"
167
+ return f"<tool_error>文件 '{file_path}' 不是文本文件或编码不是UTF-8,无法进行编码解析</tool_error>"
158
168
  except Exception as e:
159
169
  print(f"content: {content}")
160
170
  print(f"file_path: {file_path}")
161
171
  print(f"diff_content: {diff_content}")
162
172
  import traceback
163
173
  traceback.print_exc()
164
- return f"编辑文件时发生错误: {e}"
174
+ return f"<tool_error>编辑文件时发生错误: {e}</tool_error>"
165
175
 
166
176
  if __name__ == "__main__":
167
177
  edit_str = """
@@ -78,7 +78,7 @@ NoProp: Training Neural Networks without Back-propagation or Forward-propagation
78
78
  response = requests.get(base_url, params=params)
79
79
 
80
80
  if response.status_code != 200:
81
- return f"错误: API请求失败,状态码 {response.status_code}"
81
+ return f"<tool_error>API请求失败,状态码 {response.status_code}</tool_error>"
82
82
 
83
83
  # 解析结果(arXiv API返回的是Atom XML格式)
84
84
  # 这里使用简化的解析方式,在实际使用中可能需要更复杂的XML解析
@@ -155,12 +155,12 @@ NoProp: Training Neural Networks without Back-propagation or Forward-propagation
155
155
  results.append(paper_info)
156
156
 
157
157
  if not results:
158
- return f"未找到与查询'{query}'匹配的论文"
158
+ return f"<tool_error>未找到与查询'{query}'匹配的论文</tool_error>"
159
159
 
160
160
  return results
161
161
 
162
162
  except Exception as e:
163
- return f"搜索arXiv论文时发生错误: {str(e)}"
163
+ return f"<tool_error>搜索arXiv论文时发生错误: {str(e)}</tool_error>"
164
164
 
165
165
  if __name__ == '__main__':
166
166
  # 简单的测试用例
beswarm/tools/worker.py CHANGED
@@ -115,6 +115,8 @@ async def worker(goal, tools, work_dir, cache_messages=None):
115
115
  raise Exception(f"The request body is too long, please try again.")
116
116
  if "任务已完成" == next_instruction.strip():
117
117
  break
118
+ if "<instructions>" in next_instruction and "</instructions>" not in next_instruction:
119
+ next_instruction = next_instruction + "</instructions>"
118
120
  next_instruction = extract_xml_content(next_instruction, "instructions")
119
121
  if not next_instruction:
120
122
  print("\n❌ 指令智能体生成的指令不符合要求,请重新生成。")
@@ -241,6 +243,8 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
241
243
  raise Exception(f"The request body is too long, please try again.")
242
244
  if "任务已完成" == next_instruction.strip():
243
245
  break
246
+ if "<instructions>" in next_instruction and "</instructions>" not in next_instruction:
247
+ next_instruction = next_instruction + "</instructions>"
244
248
  next_instruction = extract_xml_content(next_instruction, "instructions")
245
249
  if not next_instruction:
246
250
  print("\n❌ 指令智能体生成的指令不符合要求,请重新生成。")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: beswarm
3
- Version: 0.1.76
3
+ Version: 0.1.78
4
4
  Summary: MAS
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -1,7 +1,7 @@
1
1
  beswarm/__init__.py,sha256=HZjUOJtZR5QhMuDbq-wukQQn1VrBusNWai_ysGo-VVI,20
2
2
  beswarm/utils.py,sha256=Z2Kuus2BLp9EHUC2ZNL9iUsb6NWnPj-MTA7SYzGyg24,1755
3
3
  beswarm/aient/main.py,sha256=SiYAIgQlLJqYusnTVEJOx1WNkSJKMImhgn5aWjfroxg,3814
4
- beswarm/aient/setup.py,sha256=hG7eswVWMMNc-xD67iN6hCTvU9HSIiqwkbkncpEpctA,487
4
+ beswarm/aient/setup.py,sha256=Gq_GJudeaB2dhYFR6-KUFW40TKhARnt1_h4JlOBJ6eQ,487
5
5
  beswarm/aient/src/aient/__init__.py,sha256=SRfF7oDVlOOAi6nGKiJIUK6B_arqYLO9iSMp-2IZZps,21
6
6
  beswarm/aient/src/aient/core/__init__.py,sha256=NxjebTlku35S4Dzr16rdSqSTWUvvwEeACe8KvHJnjPg,34
7
7
  beswarm/aient/src/aient/core/log_config.py,sha256=kz2_yJv1p-o3lUQOwA3qh-LSc3wMHv13iCQclw44W9c,274
@@ -16,7 +16,7 @@ beswarm/aient/src/aient/core/test/test_payload.py,sha256=8jBiJY1uidm1jzL-EiK0s6U
16
16
  beswarm/aient/src/aient/models/__init__.py,sha256=ouNDNvoBBpIFrLsk09Q_sq23HR0GbLAKfGLIFmfEuXE,219
17
17
  beswarm/aient/src/aient/models/audio.py,sha256=kRd-8-WXzv4vwvsTGwnstK-WR8--vr9CdfCZzu8y9LA,1934
18
18
  beswarm/aient/src/aient/models/base.py,sha256=z-Z0pJfTN2x0cuwfvu0BdMRY9O-RmLwHEnBIJN1x4Fg,6719
19
- beswarm/aient/src/aient/models/chatgpt.py,sha256=sfXqmYAiTTAa_dH2h49BZnVvjebEl99LJdQGepD2sCQ,46244
19
+ beswarm/aient/src/aient/models/chatgpt.py,sha256=9l6_7QCF4VuOWPGZiroTT-0dg1h_qze5RUQwauDw_A4,46539
20
20
  beswarm/aient/src/aient/models/claude.py,sha256=JezghW7y0brl4Y5qiSHvnYR5prQCFywX4RViHt39pGI,26037
21
21
  beswarm/aient/src/aient/models/duckduckgo.py,sha256=1l7vYCs9SG5SWPCbcl7q6pCcB5AUF_r-a4l9frz3Ogo,8115
22
22
  beswarm/aient/src/aient/models/gemini.py,sha256=chGLc-8G_DAOxr10HPoOhvVFW1RvMgHd6mt--VyAW98,14730
@@ -25,22 +25,22 @@ beswarm/aient/src/aient/models/vertex.py,sha256=qVD5l1Q538xXUPulxG4nmDjXE1VoV4yu
25
25
  beswarm/aient/src/aient/plugins/__init__.py,sha256=p3KO6Aa3Lupos4i2SjzLQw1hzQTigOAfEHngsldrsyk,986
26
26
  beswarm/aient/src/aient/plugins/arXiv.py,sha256=yHjb6PS3GUWazpOYRMKMzghKJlxnZ5TX8z9F6UtUVow,1461
27
27
  beswarm/aient/src/aient/plugins/config.py,sha256=QGyI9LlNaU36GUpY531o7UbTFBB39u7LfS6rrx_RTWw,7103
28
- beswarm/aient/src/aient/plugins/excute_command.py,sha256=-Meu3CcC8U8Oc2lYf4OpaVQQ3YrIjBmpPEJVgONDkyI,10313
28
+ beswarm/aient/src/aient/plugins/excute_command.py,sha256=XEGg1AX8U8iUBaHBqoCmZHLCpI_wQiDSmHDFvqG6ONE,10243
29
29
  beswarm/aient/src/aient/plugins/get_time.py,sha256=Ih5XIW5SDAIhrZ9W4Qe5Hs1k4ieKPUc_LAd6ySNyqZk,654
30
30
  beswarm/aient/src/aient/plugins/image.py,sha256=ZElCIaZznE06TN9xW3DrSukS7U3A5_cjk1Jge4NzPxw,2072
31
- beswarm/aient/src/aient/plugins/list_directory.py,sha256=JZVuImecMSfEv6jLqii-0uQJ1UCsrpMNmYlwW3PEDg4,1374
31
+ beswarm/aient/src/aient/plugins/list_directory.py,sha256=V_uKkLx_fQDL5z__bSDC-PqAP-o32KmQW6Pdhx0Fx0s,1433
32
32
  beswarm/aient/src/aient/plugins/read_file.py,sha256=Lv03AW-gWGzM2esos2vLTXHcceczdTqEO7_vqFT4yoY,8302
33
33
  beswarm/aient/src/aient/plugins/read_image.py,sha256=4FbIiMNVFUQpNyiH5ApGSRvOD9ujcXGyuqlGTJMd7ac,4017
34
34
  beswarm/aient/src/aient/plugins/readonly.py,sha256=qK5-kBM3NDH1b-otFxFHpAjV5BXEY_e7cTWBcpP7G5k,710
35
35
  beswarm/aient/src/aient/plugins/registry.py,sha256=YknzhieU_8nQ3oKlUSSWDB4X7t2Jx0JnqT2Jd9Xsvfk,3574
36
- beswarm/aient/src/aient/plugins/run_python.py,sha256=dgcUwBunMuDkaSKR5bToudVzSdrXVewktDDFUz_iIOQ,4589
36
+ beswarm/aient/src/aient/plugins/run_python.py,sha256=MohvdtZUTDLrHBDtJ9L2_Qu1pWAGrkbzsGmmn5tMN20,4614
37
37
  beswarm/aient/src/aient/plugins/websearch.py,sha256=llxy1U0vJiNMiKvamMr4p7IruLb3nnDR4YErz8TYimc,15215
38
- beswarm/aient/src/aient/plugins/write_file.py,sha256=ndMsQhfMuobvgbFuesxb17zIk9cQIYTd9Gdr6yiiZec,3896
38
+ beswarm/aient/src/aient/plugins/write_file.py,sha256=7spYxloI_aUbeANEQK-oXrGPoBqSfsD7sdfMAWlNxhU,3656
39
39
  beswarm/aient/src/aient/prompt/__init__.py,sha256=GBtn6-JDT8KHFCcuPpfSNE_aGddg5p4FEyMCy4BfwGs,20
40
40
  beswarm/aient/src/aient/prompt/agent.py,sha256=ebHYebxbgL-WEAKUs1NPNwxlUMucF3GNNoy3eNZrtIo,29737
41
41
  beswarm/aient/src/aient/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  beswarm/aient/src/aient/utils/prompt.py,sha256=UcSzKkFE4-h_1b6NofI6xgk3GoleqALRKY8VBaXLjmI,11311
43
- beswarm/aient/src/aient/utils/scripts.py,sha256=l8_NrwIRYxvzxPFg-vSJz120swdnxxGfgBcQRogJ4nI,36154
43
+ beswarm/aient/src/aient/utils/scripts.py,sha256=JVR6oNxYc9NnfQL0PGsL8QuhG43dwg0-rPS8NR_pyBM,36461
44
44
  beswarm/aient/test/chatgpt.py,sha256=Hvl7FuDt1c74N5TVBmhErOPvJbJJzA7FNp5VoZM4u30,4957
45
45
  beswarm/aient/test/claude.py,sha256=IyB4qI1eJLwlSfDNSnt2FhbQWYyBighHUjJxEXc3osQ,1095
46
46
  beswarm/aient/test/test.py,sha256=rldnoLQdtRR8IKFSIzTti7eIK2MpPMoi9gL5qD8_K44,29
@@ -122,15 +122,15 @@ beswarm/queries/tree-sitter-languages/scala-tags.scm,sha256=UxQjz80JIrrJ7Pm56uUn
122
122
  beswarm/queries/tree-sitter-languages/typescript-tags.scm,sha256=OMdCeedPiA24ky82DpgTMKXK_l2ySTuF2zrQ2fJAi9E,1253
123
123
  beswarm/tools/__init__.py,sha256=YXP65SJFE1dBNRlffapdd7zsB6M6tHZ6QaQykGq7KDU,1198
124
124
  beswarm/tools/click.py,sha256=TygaekCXTmU3fIu6Uom7ZcyzEgYMlCC_GX-5SmWHuLI,20762
125
- beswarm/tools/edit_file.py,sha256=B1rAKxgd9ZksRpZysF4SOglTIp-_k0hnFK5fZ5BBvGk,8039
125
+ beswarm/tools/edit_file.py,sha256=iwWl7a8sTVq4vj0e1ny3H6UGcHfYnxALRGcLuk5hZS8,9155
126
126
  beswarm/tools/planner.py,sha256=lguBCS6kpwNPoXQvqH-WySabVubT82iyWOkJnjt6dXw,1265
127
127
  beswarm/tools/repomap.py,sha256=N09K0UgwjCN7Zjg_5TYlVsulp3n2fztYlS8twalChU8,45003
128
128
  beswarm/tools/screenshot.py,sha256=u6t8FCgW5YHJ_Oc4coo8e0F3wTusWE_-H8dFh1rBq9Q,1011
129
- beswarm/tools/search_arxiv.py,sha256=9slwBemXjEqrd7-YgVmyMijPXlkhZCybEDRVhWVQ9B0,7937
129
+ beswarm/tools/search_arxiv.py,sha256=GpuIOYX8T0iRC-X-hmuR9AUJVn15WWZq864DaoC7BUc,8004
130
130
  beswarm/tools/search_web.py,sha256=B24amOnGHnmdV_6S8bw8O2PdhZRRIDtJjg-wXcfP7dQ,11859
131
131
  beswarm/tools/think.py,sha256=WLw-7jNIsnS6n8MMSYUin_f-BGLENFmnKM2LISEp0co,1760
132
- beswarm/tools/worker.py,sha256=DLYzMgKzpf4UYGNKKJix__DHw6LHtX_T9CLVaexDQMg,12909
133
- beswarm-0.1.76.dist-info/METADATA,sha256=REGvO25NvgVgRw3qBdQf_172ht7ZgBIDfCBYNWnR6Uk,3553
134
- beswarm-0.1.76.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
135
- beswarm-0.1.76.dist-info/top_level.txt,sha256=pJw4O87wvt5882smuSO6DfByJz7FJ8SxxT8h9fHCmpo,8
136
- beswarm-0.1.76.dist-info/RECORD,,
132
+ beswarm/tools/worker.py,sha256=Gx_xMuqFApBLBjfyuHcpMvK76k94f89CYMRyQaPw2UU,13251
133
+ beswarm-0.1.78.dist-info/METADATA,sha256=wQJj1Fcb63MZ-fEaUb6lSRb8LxMQIs7qRKFWCWY3Xmw,3553
134
+ beswarm-0.1.78.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
135
+ beswarm-0.1.78.dist-info/top_level.txt,sha256=pJw4O87wvt5882smuSO6DfByJz7FJ8SxxT8h9fHCmpo,8
136
+ beswarm-0.1.78.dist-info/RECORD,,