xworkmate-app/docs/architecture/assistant-thread-information-architecture.md
2026-03-23 20:06:26 +08:00

209 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Assistant 任务线程信息架构
本文分为两部分:
- 当前已实现的线程信息架构基线
- 尚未落地、只应视为未来扩展方向的 IA 目标
这份文档不再把未来目标写成“当前 UI 已实现”。
## 目标
`XWorkmate` 的 Assistant 已经采用“任务即线程”的基本模型,目标是让以下状态尽量按线程隔离:
- 会话历史
- 执行模式
- skills
- 模型
- 顶部连接状态
- 线程标题 / 归档状态
同时需要明确哪些能力当前还没有做成线程级持久化。
## 当前已实现基线
### 核心原则
1. 一个任务对应一个 `AssistantThreadRecord`
2. `executionTarget`、`selectedSkillKeys`、`assistantModelId`、`messageViewMode` 跟线程走
3. 右上角 connection chip 只反映当前线程的解析结果,不直接沿用别的线程状态
4. 全局设置只提供默认值,不直接覆盖已有线程
### 当前页面结构
```mermaid
flowchart LR
A["左侧任务线程栏"] --> B["中间会话区"]
C["会话头部"] --> B
D["底部 composer 工具栏"] --> B
A1["分组:单机智能体 / 本地 / 远程"]
A2["新对话"]
A3["任务卡片"]
A4["归档动作"]
C1["标题"]
C2["任务状态"]
C3["owner / surface / session key"]
C4["message view mode"]
C5["connection chip"]
D1["执行模式切换"]
D2["多 Agent toggle"]
D3["skills"]
D4["permission"]
D5["model"]
D6["thinking"]
D7["附件选择"]
D8["发送 / 重连 / 打开设置"]
```
当前没有独立落地的右侧“线程上下文抽屉”。
## 当前 UI 真实分布
### 1. 左侧:任务线程栏
当前已实现:
- 任务按 `AssistantExecutionTarget` 分组显示
- 支持新建线程
- 支持切换线程
- 支持归档线程
- 任务卡片显示标题、状态、更新时间
当前未实现:
- 线程导出
- 线程模板
- 线程级自动化入口
### 2. 会话头部
当前头部显示的是:
- 当前线程标题
- 当前任务状态 pill
- owner
- surface
- session key
- message view mode
- connection chip
当前没有把以下信息集中放到头部:
- 单独的 skills 数
- 单独的模型标签
- 独立的模式标签字段
这些能力目前主要在底部 composer 工具栏里呈现;模式语义则通过 connection chip 和执行模式按钮共同体现。
### 3. 中间:会话内容区
当前已实现:
- 渲染当前线程的消息历史
- 渲染本地任务卡片 / tool call / assistant message
- 流式结果回到当前线程
- 切线程后按当前线程重新解析内容来源
### 4. 底部:输入与执行区
当前已实现:
- 执行模式切换
- skills 选择
- 模型选择
- 权限等级
- reasoning 选择
- 附件选择
- 提交 / 停止 / 重连 / 打开设置
也就是说当前“模型”和“skills”不是头部状态栏字段而是 composer toolbar 字段。
### 5. 右侧上下文抽屉
当前状态:
- 独立的“线程上下文抽屉”没有落地为已交付能力
- 文档里提到的 `线程配置 / 已选技能 / 附件 / 运行历史 / 导出` 目前不应视为已实现 UI
## 当前线程隔离矩阵
| 维度 | 当前状态 | 说明 |
| --- | --- | --- |
| 消息历史 | 是 | 每个线程独立保存 / 解析历史 |
| 执行模式 | 是 | `Single Agent / Local / Remote` 跟线程绑定 |
| Skills | 是 | 当前线程可用 / 已选 skills 跟线程绑定 |
| 模型 | 是 | `assistantModelId` 跟线程绑定,没设时回退到默认模型 |
| 顶部连接状态 | 是 | 只显示当前线程解析出的连接状态 |
| message view mode | 是 | 跟线程绑定 |
| 自定义标题 | 是 | 通过 settings 持久化 |
| 归档状态 | 是 | 通过 settings 持久化 |
| 草稿输入 | 否 | 当前只有页面级 `_inputController` |
| 发送前附件草稿 | 否 | 当前只有页面级 `_attachments` |
| 导出 | 否 | 未实现 |
## 当前交互规则
### 新建线程
当前实现:
- 新线程继承当前线程的 `executionTarget`
- 新线程继承当前线程的 `messageViewMode`
- 不继承上一线程的消息历史
当前未实现:
- 创建时可选继承当前线程已选 skills
- 线程级输入草稿继承
### 切换线程
当前会同步切换:
- 当前模式
- 当前 skills
- 当前模型
- 当前顶部连接状态
- 当前消息内容解析路径
当前不会恢复线程级输入草稿,因为这项能力还没有实现。
### 切模式
当前实现:
- 模式切换默认只影响当前线程
- 同时允许更新 `settings.assistantExecutionTarget` 作为默认新线程模式
- 切换后会按线程目标重连 / 断连 runtime并刷新 skills / connection state
## 当前实现与未来目标的边界
下面这些描述只应视为未来扩展方向,不能再当成“当前 UI 已实现”:
- 右侧线程上下文抽屉
- 线程级输入草稿持久化
- 发送前附件的线程级草稿隔离
- 新线程可选继承当前线程已选 skills
- 线程导出
- 线程模板
- 线程级自动化
## 为什么仍然坚持线程优先
虽然当前 UI 还没把所有线程信息都集中到一个面板里,但线程优先原则已经成立:
- 当前线程决定执行模式
- 当前线程决定模型
- 当前线程决定 available / selected skills
- 当前线程决定 connection chip 显示
这也是后续继续扩展任务工作台能力的基础。
## 相关文档
- [模式切换与线程连续追问](/Users/shenlan/workspaces/cloud-neutral-toolkit/XWorkmate.svc.plus/docs/cases/thread_mode_switch_followup.md)
- [XWorkmate 集成架构](/Users/shenlan/workspaces/cloud-neutral-toolkit/XWorkmate.svc.plus/docs/architecture/xworkmate-integrations.md)