From 9bca0c690fb85aa4282a90114dbd520fdcfa2312 Mon Sep 17 00:00:00 2001
From: ViperEkura <3081035982@qq.com>
Date: Thu, 30 Apr 2026 15:32:16 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0plan=20=E7=AD=89?=
=?UTF-8?q?=E9=83=A8=E5=88=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
assets/ARCHITECTURE.md | 87 ++++-
dashboard/src/App.vue | 5 +
dashboard/src/components/MessageBubble.vue | 5 +-
dashboard/src/components/room/RoomSidebar.vue | 5 +-
dashboard/src/utils/api.js | 8 +-
dashboard/src/utils/parallelStreamManager.js | 10 +-
dashboard/src/utils/useConversations.js | 8 +-
dashboard/src/views/ConversationView.vue | 81 +++-
luxx/routes/__init__.py | 3 +-
luxx/routes/tasks.py | 351 ++++++++++++++++++
luxx/services/task.py | 317 ++++++++++++++--
luxx/services/task_executor.py | 257 +++++++++++++
12 files changed, 1067 insertions(+), 70 deletions(-)
create mode 100644 luxx/routes/tasks.py
create mode 100644 luxx/services/task_executor.py
diff --git a/assets/ARCHITECTURE.md b/assets/ARCHITECTURE.md
index 34586f3..8889d7d 100644
--- a/assets/ARCHITECTURE.md
+++ b/assets/ARCHITECTURE.md
@@ -598,7 +598,7 @@ LLM API 客户端:
### 7. 任务系统 (`services/task.py`)
-用于自主任务执行和依赖管理:
+用于自主任务执行和计划管理:
```mermaid
classDiagram
@@ -608,19 +608,24 @@ classDiagram
+str goal
+TaskStatus status
+List~Step~ steps
- +List~Task~ subtasks
+ +str metadata
+ +get_step() Step?
+ +is_complete() bool
}
class Step {
+str id
+str name
+ +str goal
+List~str~ depends_on
+StepStatus status
+ +Dict tool_calls
}
class TaskGraph {
+topological_sort() List~Step~
+get_ready_steps() List~Step~
+ +get_parallel_levels() List~List~Step~~
+detect_cycles() List~List~str~~
+validate() tuple
}
@@ -630,20 +635,26 @@ classDiagram
+get_task() Task
+update_task_status() Task
+add_steps() List~Step~
+ +set_steps_from_plan() List~Step~
+build_graph() TaskGraph
}
+ class Planner {
+ +plan() List~Dict~
+ +plan_sync() List~Dict~
+ }
+
Task "1" o-- "*" Step
- Task "1" o-- "*" Task
TaskService ..> TaskGraph
+ Planner ..> TaskService
```
-**任务状态 (TaskStatus):**
-- `PENDING` - 待处理
-- `READY` - 就绪
+**任务状态 (TaskStatus) - 五状态模型:**
+- `PENDING` - 待处理/就绪
- `RUNNING` - 运行中
- `BLOCK` - 阻塞
-- `TERMINATED` - 已终止
+- `TERMINATED` - 终止
+- `COMPLETED` - 完成
**步骤状态 (StepStatus):**
- `PENDING` - 待执行
@@ -652,6 +663,56 @@ classDiagram
- `FAILED` - 失败
- `SKIPPED` - 跳过
+**TaskGraph 功能:**
+- `topological_sort()` - 拓扑排序获取执行顺序
+- `get_ready_steps()` - 获取就绪步骤(依赖已满足)
+- `get_parallel_levels()` - 获取并行执行层级
+- `detect_cycles()` - 检测循环依赖
+- `validate()` - 验证图结构
+
+**Planner 功能:**
+- 调用 LLM 自动分解目标为步骤
+- 支持上下文(可用工具、约束条件)
+- 返回结构化步骤列表
+
+### 8. 任务执行服务 (`services/task_executor.py`)
+
+将 Task/Plan 集成到 Agent 执行流程:
+
+```mermaid
+classDiagram
+ class TaskExecutorService {
+ +llm: LLMClient
+ +generate_plan() List~Dict~
+ +create_task_with_plan() Task
+ +get_execution_plan() Dict
+ }
+
+ class AgentWithPlan {
+ +chat_service
+ +execute_with_plan() AsyncGenerator
+ }
+
+ TaskExecutorService --> TaskService
+ AgentWithPlan --> TaskExecutorService
+ AgentWithPlan --> ChatService
+```
+
+**执行流程:**
+1. 用户输入目标 → AgentWithPlan 接收
+2. TaskExecutorService.generate_plan() 调用 LLM 分解目标
+3. 创建 Task 并设置步骤
+4. 按 TaskGraph 拓扑顺序执行每个步骤
+5. 每个步骤作为独立 Agent 对话执行
+6. 步骤完成后更新状态,继续下一个
+
+**SSE 事件:**
+- `planning` - 计划生成中
+- `plan_created` - 计划已创建
+- `step_start` - 步骤开始
+- `step_complete` - 步骤完成
+- `task_complete` - 任务完成
+
### 7. 认证系统 (`routes/auth.py`)
- JWT Bearer Token
- Bcrypt 密码哈希
@@ -814,6 +875,18 @@ room_started → round_start → (message_start → message_chunk* → message_e
| `/tools` | GET | 可用工具列表 |
| `/tools/{name}` | GET | 工具详情 |
| `/tools/{name}/execute` | POST | 执行工具 |
+| `/tasks` | GET | 任务列表 |
+| `/tasks` | POST | 创建任务 |
+| `/tasks/{id}` | GET | 任务详情 |
+| `/tasks/{id}` | PUT | 更新任务 |
+| `/tasks/{id}` | DELETE | 删除任务 |
+| `/tasks/{id}/steps` | POST | 添加步骤 |
+| `/tasks/{id}/steps/{step_id}` | PUT | 更新步骤 |
+| `/tasks/{id}/graph` | GET | 获取任务图 |
+| `/tasks/{id}/ready-steps` | GET | 获取就绪步骤 |
+| `/tasks/{id}/execute` | POST | 执行任务 |
+| `/tasks/{id}/export` | GET | 导出任务 |
+| `/tasks/import` | POST | 导入任务 |
| `/health` | GET | 健康检查 |
| `/` | GET | 服务信息 |
diff --git a/dashboard/src/App.vue b/dashboard/src/App.vue
index 07033b6..5256da6 100644
--- a/dashboard/src/App.vue
+++ b/dashboard/src/App.vue
@@ -1,8 +1,13 @@
diff --git a/dashboard/src/components/MessageBubble.vue b/dashboard/src/components/MessageBubble.vue
index e85fe1a..8ffb914 100644
--- a/dashboard/src/components/MessageBubble.vue
+++ b/dashboard/src/components/MessageBubble.vue
@@ -157,12 +157,11 @@ const regenerateIcon = `