myagent-ai 1.15.16 → 1.15.18
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.
- package/package.json +1 -1
- package/web/api_server.py +37 -49
package/package.json
CHANGED
package/web/api_server.py
CHANGED
|
@@ -1228,57 +1228,35 @@ class ApiServer:
|
|
|
1228
1228
|
return web.json_response({"error": str(e)}, status=500)
|
|
1229
1229
|
|
|
1230
1230
|
def _build_task_plan_context(self, agent_path: str, chat_mode: str, original_message: str, session_id: str = "") -> str:
|
|
1231
|
-
"""构建任务规划上下文(仅 exec 模式,注入到 system_prompt 中)
|
|
1231
|
+
"""构建任务规划上下文(仅 exec 模式,注入到 system_prompt 中)
|
|
1232
|
+
|
|
1233
|
+
[v1.15.17] 统一为 V2 <output> XML 格式,移除旧的 ```tasklist``` / ```action``` 格式指令,
|
|
1234
|
+
避免与 SYSTEM_PROMPT 的 XML 输出要求冲突导致模型输出非 XML 内容。
|
|
1235
|
+
任务进度统一通过 <task_plan> 标签管理,工具调用统一通过 <toolstocal> 标签执行。
|
|
1236
|
+
"""
|
|
1232
1237
|
if chat_mode != "exec":
|
|
1233
1238
|
return ""
|
|
1234
1239
|
|
|
1235
|
-
|
|
1240
|
+
return (
|
|
1236
1241
|
"你当前处于【执行模式】(Execution Mode)。\n\n"
|
|
1237
|
-
"##
|
|
1238
|
-
"1.
|
|
1239
|
-
" -
|
|
1240
|
-
" -
|
|
1241
|
-
"
|
|
1242
|
-
" -
|
|
1243
|
-
" -
|
|
1244
|
-
"
|
|
1245
|
-
"
|
|
1246
|
-
"
|
|
1247
|
-
"
|
|
1248
|
-
"
|
|
1249
|
-
"
|
|
1242
|
+
"## 执行模式核心规则(必须在 <output> XML 中遵循)\n"
|
|
1243
|
+
"1. **单步执行(强制)**:每次回复的 <toolstocal> 中只能包含一个 <tool> 调用。\n"
|
|
1244
|
+
" - 执行完一个操作后停下来,等待工具返回结果后再决定下一步\n"
|
|
1245
|
+
" - 不要一次性调用多个工具,每个 <toolstocal> 只放一个 <tool>\n"
|
|
1246
|
+
"2. **任务进度跟踪**:通过 <output> 中的 <task_plan> 标签管理任务进度。\n"
|
|
1247
|
+
" - 简单任务(不超过3步):<task_plan> 输出为空,直接执行即可\n"
|
|
1248
|
+
" - 复杂任务(超过3步):在 <task_plan> 中创建 Markdown 任务列表,"
|
|
1249
|
+
"用 - [ ] 待办 / - [x] 已完成 跟踪进度\n"
|
|
1250
|
+
" - 每次工具执行完后,必须更新 <task_plan> 中对应步骤的完成状态\n"
|
|
1251
|
+
"3. **继续执行**:任务未完成时,设置 <finish>false</finish>,"
|
|
1252
|
+
"<next_step> 描述下一步具体操作。\n"
|
|
1253
|
+
"4. **任务完成**:所有步骤完成后,设置 <finish>true</finish>,"
|
|
1254
|
+
"<finish_reason> 填写完成总结。\n"
|
|
1255
|
+
"\n注意:所有输出必须严格遵循 <output> XML 格式,"
|
|
1256
|
+
"不要使用 ```tasklist``` 或 ```action``` 等非 XML 格式。\n"
|
|
1257
|
+
"任务进度统一通过 <task_plan> 标签管理,工具调用统一通过 <toolstocal> 标签执行。"
|
|
1250
1258
|
)
|
|
1251
1259
|
|
|
1252
|
-
# 从内存读取当前任务列表(按 session 隔离)
|
|
1253
|
-
store_key = session_id or agent_path
|
|
1254
|
-
tasks = self._task_list_store.get(store_key, [])
|
|
1255
|
-
if not tasks:
|
|
1256
|
-
return base_instruction + "\n## 当前状态\n暂无任务计划。如果是简单任务(不超过3步),直接执行即可,无需创建任务列表。如果是复杂任务(超过3步),请先分析用户需求,拆分为具体步骤,然后用 ```tasklist``` 输出计划。"
|
|
1257
|
-
|
|
1258
|
-
pending = [f" - ⏳ {t['text']}" for t in tasks if t.get("status") in ("pending", "running", "blocked")]
|
|
1259
|
-
done = [f" - ✅ {t['text']}" for t in tasks if t.get("status") == "done"]
|
|
1260
|
-
running = [f" - 🔄 {t['text']}" for t in tasks if t.get("status") == "running"]
|
|
1261
|
-
|
|
1262
|
-
# 如果所有任务都已完成,不再注入任务上下文,让 LLM 自然回复
|
|
1263
|
-
if not pending and not running:
|
|
1264
|
-
return ""
|
|
1265
|
-
|
|
1266
|
-
context = base_instruction + "\n## 当前任务进度\n"
|
|
1267
|
-
if done:
|
|
1268
|
-
context += "已完成:\n" + "\n".join(done) + "\n"
|
|
1269
|
-
if running:
|
|
1270
|
-
context += "进行中:\n" + "\n".join(running) + "\n"
|
|
1271
|
-
if pending:
|
|
1272
|
-
context += "待执行:\n" + "\n".join(pending) + "\n"
|
|
1273
|
-
context += (
|
|
1274
|
-
"\n## 下一步\n"
|
|
1275
|
-
"1. 用纯文本简要分析当前进展\n"
|
|
1276
|
-
"2. 用 ```tasklist``` 更新任务进度(标记已完成的步骤为 done,标记当前步骤为 running)\n"
|
|
1277
|
-
"3. 用 ```action``` 执行下一个待执行步骤(每次只执行一个操作)\n"
|
|
1278
|
-
"4. 如果所有步骤已完成,用 {\"type\": \"final_answer\", \"content\": \"总结\"} 结束\n"
|
|
1279
|
-
)
|
|
1280
|
-
return context
|
|
1281
|
-
|
|
1282
1260
|
async def handle_chat_page(self, request):
|
|
1283
1261
|
"""GET /chat - 重定向到聊天页面"""
|
|
1284
1262
|
raise web.HTTPFound("/ui/chat/chat_container.html")
|
|
@@ -2108,6 +2086,8 @@ class ApiServer:
|
|
|
2108
2086
|
"execution_mode", "enabled", "sandbox_image", "sandbox_network", "sandbox_memory",
|
|
2109
2087
|
"platform", "platform_token", "platform_app_id", "platform_app_secret",
|
|
2110
2088
|
"model_id", "backup_model_ids", "work_dir", "department")
|
|
2089
|
+
# [v1.15.17] 在修改 cfg 之前保存旧部门,修复部门同步 bug
|
|
2090
|
+
old_dept = cfg.get("department", "")
|
|
2111
2091
|
# 更新允许的字段
|
|
2112
2092
|
updated = False
|
|
2113
2093
|
for k in allowed_fields:
|
|
@@ -2123,8 +2103,7 @@ class ApiServer:
|
|
|
2123
2103
|
# 自动更新 updated_at
|
|
2124
2104
|
cfg["updated_at"] = datetime.datetime.now().isoformat()
|
|
2125
2105
|
(ad / "config.json").write_text(json.dumps(cfg, indent=2, ensure_ascii=False), encoding="utf-8")
|
|
2126
|
-
#
|
|
2127
|
-
old_dept = cfg.get("department", "")
|
|
2106
|
+
# 部门变更时同步部门成员列表(old_dept 已在 cfg 修改前保存)
|
|
2128
2107
|
new_dept = data.get("department", old_dept)
|
|
2129
2108
|
if old_dept != new_dept and (old_dept or new_dept):
|
|
2130
2109
|
try:
|
|
@@ -2195,6 +2174,15 @@ class ApiServer:
|
|
|
2195
2174
|
logger.info(f" 已清理 Agent '{path}' 的 {len(rows)} 个会话记忆")
|
|
2196
2175
|
except Exception as e:
|
|
2197
2176
|
logger.warning(f"清理会话记忆失败: {e}")
|
|
2177
|
+
# [v1.15.17] 从部门成员列表中移除已删除的 Agent
|
|
2178
|
+
dept = cfg.get("department", "") if cfg else ""
|
|
2179
|
+
if dept:
|
|
2180
|
+
try:
|
|
2181
|
+
dm = self._get_dept_manager()
|
|
2182
|
+
dm.assign_agent(dept, agents=[path], action="remove")
|
|
2183
|
+
logger.info(f"已从部门 '{dept}' 移除已删除的 Agent '{path}'")
|
|
2184
|
+
except Exception as e:
|
|
2185
|
+
logger.warning(f"从部门移除 Agent '{path}' 失败: {e}")
|
|
2198
2186
|
shutil.rmtree(ad)
|
|
2199
2187
|
logger.info(f"删除 Agent: {path}")
|
|
2200
2188
|
return web.json_response({"ok": True})
|
|
@@ -4178,8 +4166,8 @@ class ApiServer:
|
|
|
4178
4166
|
role="user",
|
|
4179
4167
|
content=(
|
|
4180
4168
|
f"[系统提示] 任务尚未完成,仍有 {pending_count} 个未执行步骤。"
|
|
4181
|
-
"
|
|
4182
|
-
"
|
|
4169
|
+
"你必须继续执行操作:通过 <output> XML 中的 <toolstocal> 输出工具调用指令。"
|
|
4170
|
+
"不要只输出文字总结或反馈,必须输出具体的工具调用命令。"
|
|
4183
4171
|
),
|
|
4184
4172
|
)
|
|
4185
4173
|
)
|