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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myagent-ai",
3
- "version": "1.13.2",
3
+ "version": "1.13.3",
4
4
  "description": "本地桌面端执行型AI助手 - Open Interpreter 风格 | Local Desktop Execution-Oriented AI Assistant",
5
5
  "main": "main.py",
6
6
  "bin": {
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. **任务列表(强制)**:每次回复【必须】包含一个 ```tasklist``` 代码块,内含 JSON 数组格式的任务进度。\n"
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
- " - 首次收到任务时,拆分为多个步骤,全部标记为 pending\n"
1042
+ " - 首次收到复杂任务时,拆分为多个步骤,全部标记为 pending\n"
1041
1043
  " - 每次执行完一个步骤后,更新对应步骤状态为 done,下一个为 running\n"
1042
1044
  "2. **单步执行(强制)**:每次回复【只能执行一个操作】(一个工具调用、一个代码块或一个技能调用)。\n"
1043
1045
  " - 执行完一个操作后停下来,等待结果反馈后再决定下一步\n"
1044
1046
  " - 不要一次性执行多个操作\n"
1045
- "3. **回复格式**:先写纯文本分析/总结 → 再写 ```tasklist``` 更新进度 → 最后写 ```action``` 执行操作(如有)\n"
1046
- "4. **任务完成**:当所有步骤都标记为 done 时,用 ```action``` 输出 {\"type\": \"final_answer\", \"content\": \"...\"} 结束任务。\n"
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暂无任务计划。请先分析用户需求,拆分为具体步骤,然后用 ```tasklist``` 输出计划。"
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"]
@@ -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 (collapsed by default)
348
+ // Load task plan if in exec mode (panel stays hidden until tasks exist)
349
349
  if (state.chatMode === 'exec') {
350
- document.getElementById('taskPanel').classList.remove('hidden');
351
- // Ensure task body starts collapsed
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
- taskPanel.classList.remove('hidden');
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
- // Auto-show task panel header if tasks exist (don't auto-expand body)
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 = [];