beswarm 0.2.27__tar.gz → 0.2.28__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.
Potentially problematic release.
This version of beswarm might be problematic. Click here for more details.
- {beswarm-0.2.27 → beswarm-0.2.28}/PKG-INFO +1 -1
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/tools/__init__.py +2 -0
- beswarm-0.2.28/beswarm/tools/completion.py +17 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/tools/worker.py +27 -11
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm.egg-info/PKG-INFO +1 -1
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm.egg-info/SOURCES.txt +1 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/pyproject.toml +1 -1
- {beswarm-0.2.27 → beswarm-0.2.28}/MANIFEST.in +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/README.md +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/__init__.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/main.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/setup.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/__init__.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/core/__init__.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/core/log_config.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/core/models.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/core/request.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/core/response.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/core/test/test_base_api.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/core/test/test_geminimask.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/core/test/test_image.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/core/test/test_payload.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/core/utils.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/models/__init__.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/models/audio.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/models/base.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/models/chatgpt.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/models/claude.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/models/duckduckgo.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/models/gemini.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/models/groq.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/models/vertex.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/__init__.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/arXiv.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/config.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/excute_command.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/get_time.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/image.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/list_directory.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/read_file.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/read_image.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/readonly.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/registry.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/run_python.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/websearch.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/plugins/write_file.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/utils/__init__.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/utils/prompt.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/src/aient/utils/scripts.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/chatgpt.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/claude.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_API.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_Deepbricks.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_Web_crawler.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_aiwaves.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_aiwaves_arxiv.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_ask_gemini.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_class.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_claude.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_claude_zh_char.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_ddg_search.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_download_pdf.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_gemini.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_get_token_dict.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_google_search.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_jieba.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_json.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_logging.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_ollama.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_plugin.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_py_run.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_requests.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_search.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_tikitoken.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_token.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_url.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_whisper.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_wildcard.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/aient/test/test_yjh.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/bemcp/bemcp/__init__.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/bemcp/bemcp/decorator.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/bemcp/bemcp/main.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/bemcp/bemcp/utils.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/bemcp/test/client.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/bemcp/test/server.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/prompt.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/README.md +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/c-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/d-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/go-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/java-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/python-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/r-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/README.md +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/c-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/cpp-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/dart-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/elisp-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/elixir-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/elm-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/go-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/hcl-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/java-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/javascript-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/php-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/python-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/ql-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/ruby-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/rust-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/scala-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-languages/typescript-tags.scm +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/tools/click.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/tools/edit_file.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/tools/planner.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/tools/repomap.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/tools/request_input.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/tools/screenshot.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/tools/search_arxiv.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/tools/search_web.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/tools/taskmanager.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm/utils.py +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm.egg-info/dependency_links.txt +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm.egg-info/requires.txt +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/beswarm.egg-info/top_level.txt +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/setup.cfg +0 -0
- {beswarm-0.2.27 → beswarm-0.2.28}/test/test_TaskManager.py +0 -0
|
@@ -8,6 +8,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
10
|
from .taskmanager import create_task, resume_task, get_all_tasks_status, get_task_result
|
|
11
|
+
from .completion import task_complete
|
|
11
12
|
|
|
12
13
|
#显式导入 aient.plugins 中的所需内容
|
|
13
14
|
from ..aient.src.aient.plugins import (
|
|
@@ -55,4 +56,5 @@ __all__ = [
|
|
|
55
56
|
"resume_task",
|
|
56
57
|
"get_all_tasks_status",
|
|
57
58
|
"get_task_result",
|
|
59
|
+
"task_complete",
|
|
58
60
|
]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from ..aient.src.aient.plugins import register_tool
|
|
2
|
+
|
|
3
|
+
@register_tool()
|
|
4
|
+
def task_complete(message: str) -> str:
|
|
5
|
+
"""
|
|
6
|
+
当任务完成时,调用此工具以返回最终结果。
|
|
7
|
+
|
|
8
|
+
这个工具接收一个表示任务完成信息的字符串,并将其直接返回。
|
|
9
|
+
它标志着一个任务的成功结束,并将最终的输出传递给用户或调用者。
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
message (str): 任务完成的信息或最终结果。
|
|
13
|
+
|
|
14
|
+
Returns:
|
|
15
|
+
str: 传入的任务完成信息。
|
|
16
|
+
"""
|
|
17
|
+
return "<task_complete_message>" + message + "</task_complete_message>"
|
|
@@ -64,6 +64,8 @@ async def worker(goal, tools, work_dir, cache_messages=None):
|
|
|
64
64
|
tools += mcp_tools_name
|
|
65
65
|
|
|
66
66
|
tools = [item for item in tools if not isinstance(item, dict)]
|
|
67
|
+
if "task_complete" not in tools:
|
|
68
|
+
tools.append("task_complete")
|
|
67
69
|
|
|
68
70
|
tools_json = [value for _, value in get_function_call_list(tools).items()]
|
|
69
71
|
work_agent_system_prompt = worker_system_prompt.format(
|
|
@@ -120,7 +122,7 @@ async def worker(goal, tools, work_dir, cache_messages=None):
|
|
|
120
122
|
f"任务目标: {goal}\n\n",
|
|
121
123
|
f"任务目标新变化:\n{goal_diff}\n\n" if goal_diff else "",
|
|
122
124
|
"在 tag <work_agent_conversation_start>...</work_agent_conversation_end> 之前的对话历史都是工作智能体的对话历史。\n\n",
|
|
123
|
-
"
|
|
125
|
+
"根据以上对话历史和目标,请生成下一步指令。如果任务已完成,指示工作智能体调用task_complete工具。\n\n",
|
|
124
126
|
])
|
|
125
127
|
if last_instruction and 'fetch_gpt_response_stream HTTP Error' not in last_instruction:
|
|
126
128
|
instruction_prompt = (
|
|
@@ -131,6 +133,11 @@ async def worker(goal, tools, work_dir, cache_messages=None):
|
|
|
131
133
|
# 让指令agent分析对话历史并生成新指令
|
|
132
134
|
instruction_agent = chatgpt(**instruction_agent_config)
|
|
133
135
|
conversation_history = copy.deepcopy(work_agent.conversation["default"])
|
|
136
|
+
if len(conversation_history) > 1 and conversation_history[-2]["role"] == "user" \
|
|
137
|
+
and "<task_complete_message>" in conversation_history[-2]["content"]:
|
|
138
|
+
task_complete_message = extract_xml_content(conversation_history[-2]["content"], "task_complete_message")
|
|
139
|
+
# del work_agent.conversation["default"][-4:]
|
|
140
|
+
return "<task_complete_message>" + task_complete_message + "</task_complete_message>"
|
|
134
141
|
|
|
135
142
|
cache_file.write_text(json.dumps(conversation_history, ensure_ascii=False, indent=4), encoding="utf-8")
|
|
136
143
|
|
|
@@ -169,8 +176,7 @@ async def worker(goal, tools, work_dir, cache_messages=None):
|
|
|
169
176
|
print(f"任务结束时间: {end_time.strftime('%Y-%m-%d %H:%M:%S')}")
|
|
170
177
|
print(f"总用时: {total_time}")
|
|
171
178
|
raise Exception(f"The request body is too long, please try again.")
|
|
172
|
-
|
|
173
|
-
break
|
|
179
|
+
|
|
174
180
|
last_instruction = next_instruction
|
|
175
181
|
next_instruction = extract_xml_content(next_instruction, "instructions")
|
|
176
182
|
if not next_instruction:
|
|
@@ -198,18 +204,19 @@ async def worker(goal, tools, work_dir, cache_messages=None):
|
|
|
198
204
|
return next_instruction
|
|
199
205
|
|
|
200
206
|
need_instruction = True
|
|
207
|
+
result = None
|
|
201
208
|
while True:
|
|
202
209
|
next_instruction = ''
|
|
203
210
|
if need_instruction:
|
|
204
211
|
next_instruction = await instruction_agent_task()
|
|
205
212
|
|
|
206
213
|
# 检查任务是否完成
|
|
207
|
-
if "
|
|
214
|
+
if "<task_complete_message>" in next_instruction:
|
|
208
215
|
if finish_flag == 0:
|
|
209
216
|
finish_flag = 1
|
|
210
217
|
continue
|
|
211
218
|
elif finish_flag == 1:
|
|
212
|
-
|
|
219
|
+
result = extract_xml_content(next_instruction, "task_complete_message")
|
|
213
220
|
break
|
|
214
221
|
else:
|
|
215
222
|
finish_flag = 0
|
|
@@ -225,11 +232,12 @@ async def worker(goal, tools, work_dir, cache_messages=None):
|
|
|
225
232
|
|
|
226
233
|
end_time = datetime.now()
|
|
227
234
|
total_time = end_time - start_time
|
|
235
|
+
print("\n✅ 任务已完成:", result)
|
|
228
236
|
print(f"\n任务开始时间: {start_time.strftime('%Y-%m-%d %H:%M:%S')}")
|
|
229
237
|
print(f"任务结束时间: {end_time.strftime('%Y-%m-%d %H:%M:%S')}")
|
|
230
238
|
print(f"总用时: {total_time}")
|
|
231
239
|
await manager.cleanup()
|
|
232
|
-
return
|
|
240
|
+
return result
|
|
233
241
|
|
|
234
242
|
async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
235
243
|
cache_dir = Path(work_dir) / ".beswarm"
|
|
@@ -265,6 +273,8 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
|
265
273
|
tools += mcp_tools_name
|
|
266
274
|
|
|
267
275
|
tools = [item for item in tools if not isinstance(item, dict)]
|
|
276
|
+
if "task_complete" not in tools:
|
|
277
|
+
tools.append("task_complete")
|
|
268
278
|
|
|
269
279
|
tools_json = [value for _, value in get_function_call_list(tools).items()]
|
|
270
280
|
work_agent_system_prompt = worker_system_prompt.format(
|
|
@@ -321,7 +331,7 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
|
321
331
|
f"任务目标: {goal}\n\n",
|
|
322
332
|
f"任务目标新变化:\n{goal_diff}\n\n" if goal_diff else "",
|
|
323
333
|
"在 tag <work_agent_conversation_start>...</work_agent_conversation_end> 之前的对话历史都是工作智能体的对话历史。\n\n",
|
|
324
|
-
"
|
|
334
|
+
"根据以上对话历史和目标,请生成下一步指令。如果任务已完成,指示工作智能体调用task_complete工具。\n\n",
|
|
325
335
|
])
|
|
326
336
|
if last_instruction and 'fetch_gpt_response_stream HTTP Error' not in last_instruction:
|
|
327
337
|
instruction_prompt = (
|
|
@@ -332,6 +342,11 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
|
332
342
|
# 让指令agent分析对话历史并生成新指令
|
|
333
343
|
instruction_agent = chatgpt(**instruction_agent_config)
|
|
334
344
|
conversation_history = copy.deepcopy(work_agent.conversation["default"])
|
|
345
|
+
if len(conversation_history) > 1 and conversation_history[-2]["role"] == "user" \
|
|
346
|
+
and "<task_complete_message>" in conversation_history[-2]["content"]:
|
|
347
|
+
task_complete_message = extract_xml_content(conversation_history[-2]["content"], "task_complete_message")
|
|
348
|
+
# del work_agent.conversation["default"][-4:]
|
|
349
|
+
return "<task_complete_message>" + task_complete_message + "</task_complete_message>"
|
|
335
350
|
|
|
336
351
|
cache_file.write_text(json.dumps(conversation_history, ensure_ascii=False, indent=4), encoding="utf-8")
|
|
337
352
|
|
|
@@ -370,8 +385,7 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
|
370
385
|
print(f"任务结束时间: {end_time.strftime('%Y-%m-%d %H:%M:%S')}")
|
|
371
386
|
print(f"总用时: {total_time}")
|
|
372
387
|
raise Exception(f"The request body is too long, please try again.")
|
|
373
|
-
|
|
374
|
-
break
|
|
388
|
+
|
|
375
389
|
last_instruction = next_instruction
|
|
376
390
|
next_instruction = extract_xml_content(next_instruction, "instructions")
|
|
377
391
|
if not next_instruction:
|
|
@@ -399,6 +413,7 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
|
399
413
|
return next_instruction
|
|
400
414
|
|
|
401
415
|
need_instruction = True
|
|
416
|
+
result = None
|
|
402
417
|
while True:
|
|
403
418
|
next_instruction = ''
|
|
404
419
|
if need_instruction:
|
|
@@ -407,12 +422,12 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
|
407
422
|
yield {"user": next_instruction}
|
|
408
423
|
|
|
409
424
|
# 检查任务是否完成
|
|
410
|
-
if "
|
|
425
|
+
if "<task_complete_message>" in next_instruction:
|
|
411
426
|
if finish_flag == 0:
|
|
412
427
|
finish_flag = 1
|
|
413
428
|
continue
|
|
414
429
|
elif finish_flag == 1:
|
|
415
|
-
|
|
430
|
+
result = extract_xml_content(next_instruction, "task_complete_message")
|
|
416
431
|
break
|
|
417
432
|
else:
|
|
418
433
|
finish_flag = 0
|
|
@@ -429,6 +444,7 @@ async def worker_gen(goal, tools, work_dir, cache_messages=None):
|
|
|
429
444
|
|
|
430
445
|
end_time = datetime.now()
|
|
431
446
|
total_time = end_time - start_time
|
|
447
|
+
print("\n✅ 任务已完成:", result)
|
|
432
448
|
print(f"\n任务开始时间: {start_time.strftime('%Y-%m-%d %H:%M:%S')}")
|
|
433
449
|
print(f"任务结束时间: {end_time.strftime('%Y-%m-%d %H:%M:%S')}")
|
|
434
450
|
print(f"总用时: {total_time}")
|
|
@@ -135,6 +135,7 @@ beswarm/queries/tree-sitter-languages/scala-tags.scm
|
|
|
135
135
|
beswarm/queries/tree-sitter-languages/typescript-tags.scm
|
|
136
136
|
beswarm/tools/__init__.py
|
|
137
137
|
beswarm/tools/click.py
|
|
138
|
+
beswarm/tools/completion.py
|
|
138
139
|
beswarm/tools/edit_file.py
|
|
139
140
|
beswarm/tools/planner.py
|
|
140
141
|
beswarm/tools/repomap.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/arduino-tags.scm
RENAMED
|
File without changes
|
|
File without changes
|
{beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/chatito-tags.scm
RENAMED
|
File without changes
|
{beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/commonlisp-tags.scm
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/javascript-tags.scm
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/properties-tags.scm
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{beswarm-0.2.27 → beswarm-0.2.28}/beswarm/queries/tree-sitter-language-pack/solidity-tags.scm
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|