beswarm 0.2.25__py3-none-any.whl → 0.2.27__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 +1 -1
- beswarm/aient/src/aient/core/request.py +0 -4
- beswarm/aient/src/aient/core/response.py +7 -1
- beswarm/aient/src/aient/plugins/websearch.py +2 -1
- beswarm/tools/__init__.py +5 -1
- beswarm/tools/search_web.py +1 -0
- beswarm/tools/taskmanager.py +143 -4
- beswarm/tools/worker.py +5 -39
- {beswarm-0.2.25.dist-info → beswarm-0.2.27.dist-info}/METADATA +1 -1
- {beswarm-0.2.25.dist-info → beswarm-0.2.27.dist-info}/RECORD +12 -12
- {beswarm-0.2.25.dist-info → beswarm-0.2.27.dist-info}/WHEEL +0 -0
- {beswarm-0.2.25.dist-info → beswarm-0.2.27.dist-info}/top_level.txt +0 -0
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.
|
7
|
+
version="1.1.47",
|
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",
|
@@ -256,8 +256,6 @@ async def get_gemini_payload(request, engine, provider, api_key=None):
|
|
256
256
|
elif val > 24576:
|
257
257
|
val = 24576
|
258
258
|
payload["generationConfig"]["thinkingConfig"]["thinkingBudget"] = val
|
259
|
-
if val == 0:
|
260
|
-
payload["generationConfig"].pop("thinkingConfig", None)
|
261
259
|
except ValueError:
|
262
260
|
# 如果转换为整数失败,忽略思考预算设置
|
263
261
|
pass
|
@@ -554,8 +552,6 @@ async def get_vertex_gemini_payload(request, engine, provider, api_key=None):
|
|
554
552
|
elif val > 24576:
|
555
553
|
val = 24576
|
556
554
|
payload["generationConfig"]["thinkingConfig"]["thinkingBudget"] = val
|
557
|
-
if val == 0:
|
558
|
-
payload["generationConfig"].pop("thinkingConfig", None)
|
559
555
|
except ValueError:
|
560
556
|
# 如果转换为整数失败,忽略思考预算设置
|
561
557
|
pass
|
@@ -141,7 +141,13 @@ async def fetch_gemini_response_stream(client, url, headers, payload, model):
|
|
141
141
|
sse_string = await generate_sse_response(timestamp, model, content=None, tools_id="chatcmpl-9inWv0yEtgn873CxMBzHeCeiHctTV", function_call_name=None, function_call_content=function_full_response)
|
142
142
|
yield sse_string
|
143
143
|
|
144
|
-
|
144
|
+
cache_buffer_json = {}
|
145
|
+
try:
|
146
|
+
cache_buffer_json = json.loads(cache_buffer)
|
147
|
+
except json.JSONDecodeError:
|
148
|
+
cache_buffer_json = {}
|
149
|
+
|
150
|
+
if cache_buffer == "[]" or safe_get(cache_buffer_json, 0, "promptFeedback", "blockReason") == "PROHIBITED_CONTENT":
|
145
151
|
sse_string = await generate_sse_response(timestamp, model, stop="PROHIBITED_CONTENT")
|
146
152
|
yield sse_string
|
147
153
|
else:
|
@@ -83,7 +83,7 @@ def jina_ai_Web_crawler(url: str, isSearch=False) -> str:
|
|
83
83
|
from bs4 import BeautifulSoup
|
84
84
|
requests.packages.urllib3.disable_warnings()
|
85
85
|
url = "https://r.jina.ai/" + url
|
86
|
-
response = requests.get(url, headers=headers, verify=False, timeout=
|
86
|
+
response = requests.get(url, headers=headers, verify=False, timeout=20, stream=True)
|
87
87
|
if response.status_code == 404:
|
88
88
|
print("Page not found:", url)
|
89
89
|
return "抱歉,网页不存在,目前无法访问该网页。@Trash@"
|
@@ -133,6 +133,7 @@ def get_url_content(url: str) -> str:
|
|
133
133
|
# print(markdown_content)
|
134
134
|
# print('-----------------------------')
|
135
135
|
jina_content = jina_ai_Web_crawler(url)
|
136
|
+
# print(jina_content)
|
136
137
|
# print('-----------------------------')
|
137
138
|
|
138
139
|
# 定义评分函数
|
beswarm/tools/__init__.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
from .edit_file import edit_file
|
2
|
-
from .worker import worker, worker_gen
|
2
|
+
from .worker import worker, worker_gen
|
3
3
|
from .screenshot import save_screenshot_to_file
|
4
4
|
from .request_input import request_admin_input
|
5
5
|
|
@@ -7,6 +7,8 @@ from .search_arxiv import search_arxiv
|
|
7
7
|
from .repomap import get_code_repo_map
|
8
8
|
from .click import find_and_click_element, scroll_screen
|
9
9
|
from .search_web import search_web
|
10
|
+
from .taskmanager import create_task, resume_task, get_all_tasks_status, get_task_result
|
11
|
+
|
10
12
|
#显式导入 aient.plugins 中的所需内容
|
11
13
|
from ..aient.src.aient.plugins import (
|
12
14
|
excute_command,
|
@@ -50,5 +52,7 @@ __all__ = [
|
|
50
52
|
"set_readonly_path",
|
51
53
|
"request_admin_input",
|
52
54
|
"create_task",
|
55
|
+
"resume_task",
|
56
|
+
"get_all_tasks_status",
|
53
57
|
"get_task_result",
|
54
58
|
]
|
beswarm/tools/search_web.py
CHANGED
beswarm/tools/taskmanager.py
CHANGED
@@ -1,9 +1,12 @@
|
|
1
|
-
import
|
1
|
+
import ast
|
2
|
+
import json
|
2
3
|
import uuid
|
3
4
|
import asyncio
|
4
5
|
from enum import Enum
|
5
6
|
from pathlib import Path
|
6
7
|
|
8
|
+
from ..aient.src.aient.plugins import register_tool, registry
|
9
|
+
|
7
10
|
class TaskStatus(Enum):
|
8
11
|
"""任务状态枚举"""
|
9
12
|
PENDING = "PENDING"
|
@@ -19,7 +22,49 @@ class TaskManager:
|
|
19
22
|
def __init__(self):
|
20
23
|
self.tasks = {} # 使用字典来存储任务,key是task_id, value是task对象
|
21
24
|
self.results_queue = asyncio.Queue()
|
22
|
-
self.root_path =
|
25
|
+
self.root_path = None
|
26
|
+
self.tasks_cache = {}
|
27
|
+
|
28
|
+
def set_root_path(self, root_path):
|
29
|
+
if self.root_path:
|
30
|
+
return
|
31
|
+
self.root_path = Path(root_path)
|
32
|
+
self.cache_dir = self.root_path / ".beswarm"
|
33
|
+
self.task_cache_file = self.cache_dir / "tasks.json"
|
34
|
+
self.task_cache_file.touch(exist_ok=True)
|
35
|
+
self.read_tasks_cache()
|
36
|
+
self.set_task_cache("root_path", str(self.root_path))
|
37
|
+
|
38
|
+
def set_task_cache(self, *keys_and_value):
|
39
|
+
"""
|
40
|
+
设置可嵌套的任务缓存。
|
41
|
+
接受无限个键和一个值,例如 set_task_cache('a', 'b', 'c', value)
|
42
|
+
会转换为 tasks_cache['a']['b']['c'] = value
|
43
|
+
"""
|
44
|
+
if len(keys_and_value) < 2:
|
45
|
+
return # 至少需要一个键和一个值
|
46
|
+
|
47
|
+
keys = keys_and_value[:-1]
|
48
|
+
value = keys_and_value[-1]
|
49
|
+
|
50
|
+
d = self.tasks_cache
|
51
|
+
# 遍历到倒数第二个键,确保路径存在
|
52
|
+
for key in keys[:-1]:
|
53
|
+
d = d.setdefault(key, {})
|
54
|
+
|
55
|
+
# 在最后一个键上设置值
|
56
|
+
d[keys[-1]] = value
|
57
|
+
self.save_tasks_cache()
|
58
|
+
|
59
|
+
def save_tasks_cache(self):
|
60
|
+
self.task_cache_file.write_text(json.dumps(self.tasks_cache, ensure_ascii=False, indent=4), encoding="utf-8")
|
61
|
+
|
62
|
+
def read_tasks_cache(self):
|
63
|
+
content = self.task_cache_file.read_text(encoding="utf-8")
|
64
|
+
try:
|
65
|
+
self.tasks_cache = json.loads(content) if content else {}
|
66
|
+
except json.JSONDecodeError:
|
67
|
+
raise ValueError("任务缓存文件格式错误")
|
23
68
|
|
24
69
|
def create_tasks(self, task_coro, tasks_params):
|
25
70
|
"""
|
@@ -37,8 +82,27 @@ class TaskManager:
|
|
37
82
|
coro = task_coro(**args)
|
38
83
|
task_id = self.create_task(coro)
|
39
84
|
task_ids.append(task_id)
|
85
|
+
self.set_task_cache(task_id, "args", args)
|
86
|
+
self.set_task_cache(task_id, "status", TaskStatus.RUNNING.value)
|
40
87
|
return task_ids
|
41
88
|
|
89
|
+
def resume_task(self, task_id, task_coro, args):
|
90
|
+
"""
|
91
|
+
恢复一个任务。
|
92
|
+
"""
|
93
|
+
task = self.tasks_cache.get(task_id)
|
94
|
+
if not task:
|
95
|
+
return TaskStatus.NOT_FOUND
|
96
|
+
|
97
|
+
coro = task_coro(**args)
|
98
|
+
task_id = self.create_task(coro)
|
99
|
+
self.set_task_cache(task_id, "args", args)
|
100
|
+
self.set_task_cache(task_id, "status", TaskStatus.RUNNING.value)
|
101
|
+
print(f"任务已恢复: ID={task_id}, Name={task_id}")
|
102
|
+
print(f"args: {args}")
|
103
|
+
print(f"self.tasks_cache: {json.dumps(self.tasks_cache, ensure_ascii=False, indent=4)}")
|
104
|
+
return task_id
|
105
|
+
|
42
106
|
def create_task(self, coro):
|
43
107
|
"""
|
44
108
|
创建并注册一个新任务。
|
@@ -108,14 +172,19 @@ class TaskManager:
|
|
108
172
|
self.results_queue.put_nowait(
|
109
173
|
(task_id, TaskStatus.DONE, task.result())
|
110
174
|
)
|
175
|
+
self.set_task_cache(task_id, "status", TaskStatus.DONE.value)
|
176
|
+
self.set_task_cache(task_id, "result", task.result())
|
111
177
|
except asyncio.CancelledError:
|
112
178
|
self.results_queue.put_nowait(
|
113
179
|
(task_id, TaskStatus.CANCELLED, None)
|
114
180
|
)
|
181
|
+
self.set_task_cache(task_id, "status", TaskStatus.CANCELLED.value)
|
115
182
|
except Exception as e:
|
116
183
|
self.results_queue.put_nowait(
|
117
184
|
(task_id, TaskStatus.ERROR, e)
|
118
185
|
)
|
186
|
+
self.set_task_cache(task_id, "status", TaskStatus.ERROR.value)
|
187
|
+
self.set_task_cache(task_id, "result", str(e))
|
119
188
|
|
120
189
|
async def get_next_result(self):
|
121
190
|
"""
|
@@ -146,8 +215,78 @@ class TaskManager:
|
|
146
215
|
# 如果任务ID不存在,则返回-1
|
147
216
|
return -1
|
148
217
|
|
149
|
-
|
150
|
-
|
218
|
+
|
219
|
+
task_manager = TaskManager()
|
220
|
+
|
221
|
+
worker_fun = registry.tools["worker"]
|
222
|
+
|
223
|
+
@register_tool()
|
224
|
+
def create_task(goal, tools, work_dir):
|
225
|
+
"""
|
226
|
+
启动一个子任务来自动完成指定的任务目标 (`goal`)。
|
227
|
+
|
228
|
+
这个子任务接收一个清晰的任务描述、一组可供调用的工具 (`tools`),以及一个工作目录 (`work_dir`)。
|
229
|
+
它会结合可用的工具,自主规划并逐步执行必要的操作,直到最终完成指定的任务目标。
|
230
|
+
核心功能是根据输入的目标,驱动整个任务执行流程。
|
231
|
+
子任务下上文为空,因此需要细致的背景信息。
|
232
|
+
|
233
|
+
Args:
|
234
|
+
goal (str): 需要完成的具体任务目标描述。子任务将围绕此目标进行工作。必须清晰、具体。必须包含背景信息,完成指标等。写清楚什么时候算任务完成,同时交代清楚任务的背景信息,这个背景信息可以是需要读取的文件等一切有助于完成任务的信息。
|
235
|
+
tools (list[str]): 一个包含可用工具函数对象的列表。子任务在执行任务时可能会调用这些工具来与环境交互(例如读写文件、执行命令等)。
|
236
|
+
work_dir (str): 工作目录的绝对路径。子任务将在此目录上下文中执行操作。子任务的工作目录位置在主任务的工作目录的子目录。
|
237
|
+
|
238
|
+
Returns:
|
239
|
+
str: 当任务成功完成时,返回字符串 "任务已完成"。
|
240
|
+
"""
|
241
|
+
tasks_params = [
|
242
|
+
{"goal": goal, "tools": ast.literal_eval(tools), "work_dir": work_dir, "cache_messages": True}
|
243
|
+
]
|
244
|
+
task_ids = task_manager.create_tasks(worker_fun, tasks_params)
|
245
|
+
return task_ids
|
246
|
+
|
247
|
+
@register_tool()
|
248
|
+
def resume_task(task_id, goal):
|
249
|
+
"""
|
250
|
+
恢复一个子任务。
|
251
|
+
"""
|
252
|
+
if task_id not in task_manager.tasks_cache:
|
253
|
+
return f"任务 {task_id} 不存在"
|
254
|
+
tasks_params = task_manager.tasks_cache[task_id]["args"]
|
255
|
+
tasks_params["goal"] = goal
|
256
|
+
tasks_params["cache_messages"] = True
|
257
|
+
task_id = task_manager.resume_task(task_id, worker_fun, tasks_params)
|
258
|
+
return f"任务 {task_id} 已恢复"
|
259
|
+
|
260
|
+
@register_tool()
|
261
|
+
def get_all_tasks_status():
|
262
|
+
"""
|
263
|
+
获取所有任务的状态。
|
264
|
+
子任务状态会持久化到磁盘,因此即使历史记录为空,之前的子任务仍然存在。
|
265
|
+
|
266
|
+
Returns:
|
267
|
+
str: 所有任务的状态。每个任务的id,状态,结果。
|
268
|
+
"""
|
269
|
+
return task_manager.tasks_cache
|
270
|
+
|
271
|
+
@register_tool()
|
272
|
+
async def get_task_result():
|
273
|
+
"""
|
274
|
+
等待并获取子任务的执行结果。如果需要等待子任务完成,请使用这个工具。一旦有任务完成,会自动获取结果。如果调用时没有任务完成,会等待直到有任务完成。
|
275
|
+
|
276
|
+
Returns:
|
277
|
+
str: 子任务的执行结果。
|
278
|
+
"""
|
279
|
+
task_id, status, result = await task_manager.get_next_result()
|
280
|
+
|
281
|
+
unfinished_tasks = [task_id for task_id, task in task_manager.tasks_cache.items() if task_id != "root_path" and task.get("status") != "DONE"]
|
282
|
+
text = "".join([
|
283
|
+
f"Task ID: {task_id}\n",
|
284
|
+
f"Status: {status.value}\n",
|
285
|
+
f"Result: {result}\n\n",
|
286
|
+
f"There are {len(unfinished_tasks)} unfinished tasks, unfinished task ids: {unfinished_tasks}" if unfinished_tasks else "All tasks are finished.",
|
287
|
+
])
|
288
|
+
|
289
|
+
return text
|
151
290
|
|
152
291
|
async def main():
|
153
292
|
manager = TaskManager()
|
beswarm/tools/worker.py
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
import os
|
2
2
|
import re
|
3
3
|
import sys
|
4
|
-
import ast
|
5
4
|
import copy
|
6
5
|
import json
|
7
6
|
import difflib
|
@@ -27,50 +26,14 @@ from ..aient.src.aient.plugins import register_tool, get_function_call_list, reg
|
|
27
26
|
from ..prompt import worker_system_prompt, instruction_system_prompt
|
28
27
|
from ..utils import extract_xml_content, get_current_screen_image_message, replace_xml_content, register_mcp_tools
|
29
28
|
from ..bemcp.bemcp import MCPClient, convert_tool_format, MCPManager
|
30
|
-
from .taskmanager import TaskManager
|
31
29
|
|
32
30
|
manager = MCPManager()
|
33
|
-
task_manager = TaskManager()
|
34
|
-
|
35
|
-
@register_tool()
|
36
|
-
def create_task(goal, tools, work_dir):
|
37
|
-
"""
|
38
|
-
启动一个子任务来自动完成指定的任务目标 (`goal`)。
|
39
|
-
|
40
|
-
这个子任务接收一个清晰的任务描述、一组可供调用的工具 (`tools`),以及一个工作目录 (`work_dir`)。
|
41
|
-
它会结合可用的工具,自主规划并逐步执行必要的操作,直到最终完成指定的任务目标。
|
42
|
-
核心功能是根据输入的目标,驱动整个任务执行流程。
|
43
|
-
子任务下上文为空,因此需要细致的背景信息。
|
44
|
-
|
45
|
-
Args:
|
46
|
-
goal (str): 需要完成的具体任务目标描述。子任务将围绕此目标进行工作。必须清晰、具体。必须包含背景信息,完成指标等。写清楚什么时候算任务完成,同时交代清楚任务的背景信息,这个背景信息可以是需要读取的文件等一切有助于完成任务的信息。
|
47
|
-
tools (list[str]): 一个包含可用工具函数对象的列表。子任务在执行任务时可能会调用这些工具来与环境交互(例如读写文件、执行命令等)。
|
48
|
-
work_dir (str): 工作目录的绝对路径。子任务将在此目录上下文中执行操作。子任务的工作目录位置在主任务的工作目录的子目录。
|
49
|
-
|
50
|
-
Returns:
|
51
|
-
str: 当任务成功完成时,返回字符串 "任务已完成"。
|
52
|
-
"""
|
53
|
-
tasks_params = [
|
54
|
-
{"goal": goal, "tools": ast.literal_eval(tools), "work_dir": work_dir, "cache_messages": True}
|
55
|
-
]
|
56
|
-
task_ids = task_manager.create_tasks(worker, tasks_params)
|
57
|
-
return task_ids
|
58
|
-
|
59
|
-
@register_tool()
|
60
|
-
async def get_task_result():
|
61
|
-
"""
|
62
|
-
等待并获取子任务的执行结果。
|
63
|
-
|
64
|
-
Returns:
|
65
|
-
str: 子任务的执行结果。
|
66
|
-
"""
|
67
|
-
task_id, status, result = await task_manager.get_next_result()
|
68
|
-
return result
|
69
31
|
|
70
32
|
@register_tool()
|
71
33
|
async def worker(goal, tools, work_dir, cache_messages=None):
|
72
34
|
cache_dir = Path(work_dir) / ".beswarm"
|
73
35
|
cache_dir.mkdir(parents=True, exist_ok=True)
|
36
|
+
task_manager.set_root_path(work_dir)
|
74
37
|
cache_file = cache_dir / "work_agent_conversation_history.json"
|
75
38
|
if not cache_file.exists():
|
76
39
|
cache_file.write_text("[]", encoding="utf-8")
|
@@ -271,6 +234,7 @@ async def worker(goal, tools, work_dir, cache_messages=None):
|
|
271
234
|
async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
272
235
|
cache_dir = Path(work_dir) / ".beswarm"
|
273
236
|
cache_dir.mkdir(parents=True, exist_ok=True)
|
237
|
+
task_manager.set_root_path(work_dir)
|
274
238
|
cache_file = cache_dir / "work_agent_conversation_history.json"
|
275
239
|
if not cache_file.exists():
|
276
240
|
cache_file.write_text("[]", encoding="utf-8")
|
@@ -468,4 +432,6 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
468
432
|
print(f"\n任务开始时间: {start_time.strftime('%Y-%m-%d %H:%M:%S')}")
|
469
433
|
print(f"任务结束时间: {end_time.strftime('%Y-%m-%d %H:%M:%S')}")
|
470
434
|
print(f"总用时: {total_time}")
|
471
|
-
await manager.cleanup()
|
435
|
+
await manager.cleanup()
|
436
|
+
|
437
|
+
from .taskmanager import task_manager
|
@@ -2,13 +2,13 @@ beswarm/__init__.py,sha256=HZjUOJtZR5QhMuDbq-wukQQn1VrBusNWai_ysGo-VVI,20
|
|
2
2
|
beswarm/prompt.py,sha256=5JMfOuXWHscsaeDzwBn223mj9N85eAQdOHXQZk7zeWE,32238
|
3
3
|
beswarm/utils.py,sha256=xxbNifOPlfcVkKmF_qFzuEnZgF3MQg3mnOfz1EF0Qss,6697
|
4
4
|
beswarm/aient/main.py,sha256=SiYAIgQlLJqYusnTVEJOx1WNkSJKMImhgn5aWjfroxg,3814
|
5
|
-
beswarm/aient/setup.py,sha256=
|
5
|
+
beswarm/aient/setup.py,sha256=mDFzdO4betWxiHRtK2bR9z4ahWthoYip79BFKMMGvFo,487
|
6
6
|
beswarm/aient/src/aient/__init__.py,sha256=SRfF7oDVlOOAi6nGKiJIUK6B_arqYLO9iSMp-2IZZps,21
|
7
7
|
beswarm/aient/src/aient/core/__init__.py,sha256=NxjebTlku35S4Dzr16rdSqSTWUvvwEeACe8KvHJnjPg,34
|
8
8
|
beswarm/aient/src/aient/core/log_config.py,sha256=kz2_yJv1p-o3lUQOwA3qh-LSc3wMHv13iCQclw44W9c,274
|
9
9
|
beswarm/aient/src/aient/core/models.py,sha256=d4MISNezTSe0ls0-fjuToI2SoT-sk5fWqAJuKVinIlo,7502
|
10
|
-
beswarm/aient/src/aient/core/request.py,sha256=
|
11
|
-
beswarm/aient/src/aient/core/response.py,sha256=
|
10
|
+
beswarm/aient/src/aient/core/request.py,sha256=8HlSFaBhWMs5thhL4C5qj-hvuDZWUXCYWwVShFR99QU,72263
|
11
|
+
beswarm/aient/src/aient/core/response.py,sha256=xSOmc4aBFeoT-Cx42B6GrRvsxalx-dOiGdjN1WByyXs,35673
|
12
12
|
beswarm/aient/src/aient/core/utils.py,sha256=NcXdb8zBN0GE01OGaUzg8U34RaraoFf2MaLDDGFvvC4,27492
|
13
13
|
beswarm/aient/src/aient/core/test/test_base_api.py,sha256=pWnycRJbuPSXKKU9AQjWrMAX1wiLC_014Qc9hh5C2Pw,524
|
14
14
|
beswarm/aient/src/aient/core/test/test_geminimask.py,sha256=HFX8jDbNg_FjjgPNxfYaR-0-roUrOO-ND-FVsuxSoiw,13254
|
@@ -35,7 +35,7 @@ beswarm/aient/src/aient/plugins/read_image.py,sha256=4FbIiMNVFUQpNyiH5ApGSRvOD9u
|
|
35
35
|
beswarm/aient/src/aient/plugins/readonly.py,sha256=qK5-kBM3NDH1b-otFxFHpAjV5BXEY_e7cTWBcpP7G5k,710
|
36
36
|
beswarm/aient/src/aient/plugins/registry.py,sha256=YknzhieU_8nQ3oKlUSSWDB4X7t2Jx0JnqT2Jd9Xsvfk,3574
|
37
37
|
beswarm/aient/src/aient/plugins/run_python.py,sha256=MohvdtZUTDLrHBDtJ9L2_Qu1pWAGrkbzsGmmn5tMN20,4614
|
38
|
-
beswarm/aient/src/aient/plugins/websearch.py,sha256=
|
38
|
+
beswarm/aient/src/aient/plugins/websearch.py,sha256=LPS5NmHrY-Rc0FCPlhHrUWE90XJmXF_AvShLHTV_Zqc,15285
|
39
39
|
beswarm/aient/src/aient/plugins/write_file.py,sha256=hExFLuoNPtjYxJI3pVbofZRpokvUabpXdEkd3mZJPPc,3778
|
40
40
|
beswarm/aient/src/aient/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
41
41
|
beswarm/aient/src/aient/utils/prompt.py,sha256=UcSzKkFE4-h_1b6NofI6xgk3GoleqALRKY8VBaXLjmI,11311
|
@@ -125,7 +125,7 @@ beswarm/queries/tree-sitter-languages/ruby-tags.scm,sha256=vIidsCeE2A0vdFN18yXKq
|
|
125
125
|
beswarm/queries/tree-sitter-languages/rust-tags.scm,sha256=9ljM1nzhfPs_ZTRw7cr2P9ToOyhGcKkCoN4_HPXSWi4,1451
|
126
126
|
beswarm/queries/tree-sitter-languages/scala-tags.scm,sha256=UxQjz80JIrrJ7Pm56uUnQyThfmQNvwk7aQzPNypB-Ao,1761
|
127
127
|
beswarm/queries/tree-sitter-languages/typescript-tags.scm,sha256=OMdCeedPiA24ky82DpgTMKXK_l2ySTuF2zrQ2fJAi9E,1253
|
128
|
-
beswarm/tools/__init__.py,sha256=
|
128
|
+
beswarm/tools/__init__.py,sha256=HCONX8-OBX-FdBEkcSGSolUIHE7UAlhkH8HA1_inBFQ,1413
|
129
129
|
beswarm/tools/click.py,sha256=I62GF-bzcoNzhfu3DeWdiA88Sd_6gMFihrQSwFj4nks,20795
|
130
130
|
beswarm/tools/edit_file.py,sha256=iwWl7a8sTVq4vj0e1ny3H6UGcHfYnxALRGcLuk5hZS8,9155
|
131
131
|
beswarm/tools/planner.py,sha256=lguBCS6kpwNPoXQvqH-WySabVubT82iyWOkJnjt6dXw,1265
|
@@ -133,10 +133,10 @@ beswarm/tools/repomap.py,sha256=YsTPq5MXfn_Ds5begcvHDnY_Xp2d4jH-xmWqNMHnNHY,4523
|
|
133
133
|
beswarm/tools/request_input.py,sha256=gXNAJPOJektMqxJVyzNTFOeMQ7xUkO-wWMYH-r2Rdwk,942
|
134
134
|
beswarm/tools/screenshot.py,sha256=u6t8FCgW5YHJ_Oc4coo8e0F3wTusWE_-H8dFh1rBq9Q,1011
|
135
135
|
beswarm/tools/search_arxiv.py,sha256=caVIUOzMhFu-r_gVgJZrH2EO9xI5iV_qLAg0b3Ie9Xg,8095
|
136
|
-
beswarm/tools/search_web.py,sha256=
|
137
|
-
beswarm/tools/taskmanager.py,sha256=
|
138
|
-
beswarm/tools/worker.py,sha256=
|
139
|
-
beswarm-0.2.
|
140
|
-
beswarm-0.2.
|
141
|
-
beswarm-0.2.
|
142
|
-
beswarm-0.2.
|
136
|
+
beswarm/tools/search_web.py,sha256=XkKb2_Snm4-bIOrkMhsyxao0-VPsYmfM2CKQbJ5TGFI,16101
|
137
|
+
beswarm/tools/taskmanager.py,sha256=rVLB0xwteT-5y9svmJ68K65U3JuX9BJGvqNzyxPvjaI,12178
|
138
|
+
beswarm/tools/worker.py,sha256=2Qf8pQn2FQCLW5hd0mBaJ9zMU1Ft-hWXGdkNj4nX1yI,22274
|
139
|
+
beswarm-0.2.27.dist-info/METADATA,sha256=7UHHfWdWSWPT--MEIxRsjTXizA_xlQxg_e3mthXuGb0,3847
|
140
|
+
beswarm-0.2.27.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
141
|
+
beswarm-0.2.27.dist-info/top_level.txt,sha256=pJw4O87wvt5882smuSO6DfByJz7FJ8SxxT8h9fHCmpo,8
|
142
|
+
beswarm-0.2.27.dist-info/RECORD,,
|
File without changes
|
File without changes
|