myagent-ai 1.13.2 → 1.13.3
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 +7 -5
- package/web/ui/chat/chat_main.js +11 -10
package/package.json
CHANGED
package/web/api_server.py
CHANGED
|
@@ -1034,23 +1034,25 @@ class ApiServer:
|
|
|
1034
1034
|
base_instruction = (
|
|
1035
1035
|
"你当前处于【执行模式】(Execution Mode)。\n\n"
|
|
1036
1036
|
"## 核心规则\n"
|
|
1037
|
-
"1.
|
|
1037
|
+
"1. **任务列表(按复杂度决定)**:\n"
|
|
1038
|
+
" - 如果用户的需求是简单任务(预计操作步骤不超过5步,如:单次查询、简单计算、问答题、格式转换、文件读取等),【不要】使用 ```tasklist```,直接用纯文本回复并执行即可。\n"
|
|
1039
|
+
" - 只有当任务较复杂(预计需要超过5步操作,如:多文件修改、需要调研+实现+测试、涉及多个模块联动等),才使用 ```tasklist``` 代码块来跟踪进度。\n"
|
|
1038
1040
|
" - 格式:```tasklist\\n[{\"text\": \"步骤描述\", \"status\": \"pending\"}]\\n```\n"
|
|
1039
1041
|
" - status 可选值:pending(待执行)、running(进行中)、done(已完成)、blocked(受阻)\n"
|
|
1040
|
-
" -
|
|
1042
|
+
" - 首次收到复杂任务时,拆分为多个步骤,全部标记为 pending\n"
|
|
1041
1043
|
" - 每次执行完一个步骤后,更新对应步骤状态为 done,下一个为 running\n"
|
|
1042
1044
|
"2. **单步执行(强制)**:每次回复【只能执行一个操作】(一个工具调用、一个代码块或一个技能调用)。\n"
|
|
1043
1045
|
" - 执行完一个操作后停下来,等待结果反馈后再决定下一步\n"
|
|
1044
1046
|
" - 不要一次性执行多个操作\n"
|
|
1045
|
-
"3. **回复格式**:先写纯文本分析/总结 →
|
|
1046
|
-
"4.
|
|
1047
|
+
"3. **回复格式**:先写纯文本分析/总结 → 如有任务列表则用 ```tasklist``` 更新进度 → 最后用 ```action``` 执行操作(如有)\n"
|
|
1048
|
+
"4. **任务完成**:当使用任务列表且所有步骤都标记为 done 时,用 ```action``` 输出 {\"type\": \"final_answer\", \"content\": \"...\"} 结束任务。简单任务直接回复即可。\n"
|
|
1047
1049
|
)
|
|
1048
1050
|
|
|
1049
1051
|
# 从内存读取当前任务列表(按 session 隔离)
|
|
1050
1052
|
store_key = session_id or agent_path
|
|
1051
1053
|
tasks = self._task_list_store.get(store_key, [])
|
|
1052
1054
|
if not tasks:
|
|
1053
|
-
return base_instruction + "\n## 当前状态\n
|
|
1055
|
+
return base_instruction + "\n## 当前状态\n暂无任务计划。如果是简单任务(不超过5步),直接执行即可,无需创建任务列表。如果是复杂任务(超过5步),请先分析用户需求,拆分为具体步骤,然后用 ```tasklist``` 输出计划。"
|
|
1054
1056
|
|
|
1055
1057
|
pending = [f" - ⏳ {t['text']}" for t in tasks if t.get("status") in ("pending", "running", "blocked")]
|
|
1056
1058
|
done = [f" - ✅ {t['text']}" for t in tasks if t.get("status") == "done"]
|
package/web/ui/chat/chat_main.js
CHANGED
|
@@ -345,15 +345,10 @@ function initChat() {
|
|
|
345
345
|
document.getElementById('sendBtn').disabled = !this.value.trim();
|
|
346
346
|
saveDraft();
|
|
347
347
|
});
|
|
348
|
-
// Load task plan if in exec mode (
|
|
348
|
+
// Load task plan if in exec mode (panel stays hidden until tasks exist)
|
|
349
349
|
if (state.chatMode === 'exec') {
|
|
350
|
-
|
|
351
|
-
//
|
|
352
|
-
var taskBody = document.getElementById('taskBody');
|
|
353
|
-
var taskToggle = document.getElementById('taskToggle');
|
|
354
|
-
if (taskBody) taskBody.classList.remove('expanded');
|
|
355
|
-
if (taskToggle) taskToggle.classList.remove('expanded');
|
|
356
|
-
state.taskPanelExpanded = false;
|
|
350
|
+
// Don't show task panel by default - it will appear when the LLM creates a task list
|
|
351
|
+
// document.getElementById('taskPanel').classList.remove('hidden');
|
|
357
352
|
loadTaskPlan();
|
|
358
353
|
}
|
|
359
354
|
|
|
@@ -536,7 +531,10 @@ function setMode(mode) {
|
|
|
536
531
|
} else {
|
|
537
532
|
chatBtn.className = 'mode-btn';
|
|
538
533
|
execBtn.className = 'mode-btn active-exec';
|
|
539
|
-
|
|
534
|
+
// Only show task panel if tasks already exist (don't show empty panel)
|
|
535
|
+
if (state.taskItems.length > 0) {
|
|
536
|
+
taskPanel.classList.remove('hidden');
|
|
537
|
+
}
|
|
540
538
|
// Default collapsed when switching to exec mode
|
|
541
539
|
var tb = document.getElementById('taskBody');
|
|
542
540
|
var tt = document.getElementById('taskToggle');
|
|
@@ -642,7 +640,7 @@ async function loadTaskPlan() {
|
|
|
642
640
|
var data = await api(url);
|
|
643
641
|
state.taskItems = data.tasks || [];
|
|
644
642
|
renderTaskList();
|
|
645
|
-
//
|
|
643
|
+
// Show/hide task panel based on whether tasks exist
|
|
646
644
|
const panel = document.getElementById('taskPanel');
|
|
647
645
|
if (panel && state.taskItems.length > 0) {
|
|
648
646
|
panel.classList.remove('hidden');
|
|
@@ -651,6 +649,9 @@ async function loadTaskPlan() {
|
|
|
651
649
|
triggerTaskAutoFade();
|
|
652
650
|
}
|
|
653
651
|
// Don't auto-expand the body - user can click to expand manually
|
|
652
|
+
} else if (panel) {
|
|
653
|
+
// Hide panel when no tasks exist
|
|
654
|
+
panel.classList.add('hidden');
|
|
654
655
|
}
|
|
655
656
|
} catch (e) {
|
|
656
657
|
state.taskItems = [];
|