DESKTOP WORKSPACE
桌面工作区
认识项目、会话、Composer、Agent board 与运行时面板,并正确处理不可用、失败和恢复状态。
进入工作区
通过快速开始启动桌面应用后,React/Vite UI 由 Wails host 加载。应用会先建立事件订阅,再读取配置、窗口、Provider 和侧栏快照;只有 bootstrap 完成,依赖后端的 Composer 控件才进入可用状态。
如果 bootstrap 失败,聊天标题栏显示“重新连接后端”。重试期间按钮、Composer 和附件动作保持禁用,系统不会在后台无限重试,也不会用空状态伪装成功。
工作区结构
| 区域 | 用途 | 可观察入口 |
|---|---|---|
| 工作区侧栏 | 切换产品页面,并按项目组织 Thread | 聊天、插件与技能、提示词、自动化、记忆中心、项目树、项目聊天与任务对话 |
| 中央对话区 | 查看消息、执行过程、审批与错误反馈 | 时间线、较早消息、执行状态、Agent 输出 |
| Composer | 输入任务并配置本次发送 | 文本、附件、Slash commands、能力 chips、模型配置、发送或中断 |
| 右侧面板 | 查看协作 Agent 或当前运行时细节 | Agent board、Runtime、diff 与代码预览 |
| 顶部应用栏 | 进入全局辅助入口 | 通知、历史记录、主题、语言和聊天操作 |
当前聊天区不再额外渲染一列独立 Thread rail。宽屏下中央对话区只与可选的右侧 Agent/Runtime 面板分配空间;窄屏时主要导航切换为移动端入口,但项目、Thread 与运行时仍属于同一套工作区流程。
选择项目
项目路径是聊天和代码工具的信任边界。未连接后端或未选择项目时,界面会显示“请先连接后端并选择项目”,发送和中断保持不可用。
项目选择器是恢复入口,因此在后端已经就绪但尚未选择项目时仍应可操作;否则用户会陷入“因为没有项目而不能选择项目”的死锁。选择项目后,Thread、附件、LSP scope 与运行时操作都应围绕该项目路径工作。
新建对话与首次发送
点击“新对话”或“新建对话”先创建空草稿,不会立即持久化 Thread。已提交版本中的空对话提示是:“发送第一条消息时才会创建会话”。
第一次发送采用两段式链路:
sendDraft()
-> thread/start
-> 获得 threadId
-> turn/start
-> 时间线接收事件与响应
这意味着第一条消息失败时,需要区分 Thread 是否已经创建、Turn 是否已经启动以及事件是否已到达,不能只根据界面有没有新卡片推断后端状态。
Composer 与能力
Composer 的输入框标签为“输入给 Agent 的内容”,支持文本、附件、文件拖放、Prompt history 与 Slash commands。Slash command 目录可以组合:
- 聊天内置命令。
- Skills。
- Prompts。
- Automations。
- MCP tools。
发送必须同时满足:bootstrap 已就绪、项目可用、能力目录已验证、没有审批阻塞、没有正在发送,并且输入或附件非空。活动 Turn 可中断时,发送动作切换为中断语义,防止同一 Composer 同时启动第二次执行。
模型与推理强度可以在新对话阶段配置。已开启的 Thread 会锁定其执行配置;需要更改时应新建对话,不能让同一 Thread 的 Provider 身份和模型语义在运行中漂移。
项目树与 Thread 操作
工作区侧栏中的项目树按项目组织 Thread。活动项目默认展开;其他项目可以展开后加载自己的 Thread 列表,切换项目时仍以项目路径作为可信上下文。当前项目树提供:
- 为指定项目新建对话。
- 打开已有 Thread,并保留项目与 Thread 的选择身份。
- 查看名称、最近更新时间和运行中状态。
- 重命名 Thread。
- 删除不再需要的 Thread;删除前要求确认。
加载更早消息属于中央时间线,而不是项目树操作。当前页面只描述已挂载在产品界面中的入口,不根据未挂载组件或残留文案推断额外操作。
聊天操作菜单还提供“复制当前线程”“继承当前对话”“停止”“强制完成”和“进程恢复”。没有活动 Thread 或没有运行中任务时,相应动作保持禁用并说明原因。
“继承当前对话”使用 thread/fork 创建新 Thread,再只发送一次 kickoff Turn;它不是把旧对话总结后重新调用 thread/start。
观察执行
中央时间线展示用户输入、Agent 输出、reasoning/tool 活动、执行过程和需要处理的审批。右侧面板可以在 Agent board 与 Runtime 视图之间切换,并展示当前 Thread 的运行时信息、diff 和代码预览。
页面会同步当前 Thread 的 timeline、active Turn、token usage、活动统计与 diff。切换 Thread 时,这些状态按 Thread identity 读取,不能让前一个 Thread 的运行中状态、审批或 diff 泄漏到新的选择中。
失败、中断与恢复
Super Dolphin 不把失败隐藏在静默 fallback 中:
- Bootstrap 失败显示“重新连接后端”,重试中保持禁用。
- 发送、附件、审批和一般操作失败使用可见反馈。
- 没有可中断任务时,“停止”不可用。
- “强制完成”只在相应生命周期允许时可用。
- “进程恢复”需要活动 Thread,并在请求处理中显示“正在恢复”。
- React 根级错误由错误边界显示“界面发生错误”和“重试界面”。
“停止”“强制完成”和“进程恢复”代表不同生命周期动作。停止请求终止当前执行;强制完成改变可完成的运行状态;进程恢复用于手动处理 Provider 进程连接。不要把它们作为等价的重试按钮。
当前边界
- 当前界面不再使用独立的宽屏 Thread rail,Thread 入口统一放在项目树中。
- 当前桌面 Provider 主流程依赖已认证的 Codex CLI。
- “语音输入”和部分自定义配置入口在界面文案中仍标为待后端接入,不应描述为完整能力。
- UI 显示的完成状态不能代替仓库测试、诊断与门禁证据。
下一步
继续阅读 Threads 与 Turns,把工作区操作映射到持久会话、单轮执行与恢复生命周期;Agent 生成结果后,可在共享文件与最终产物中继续处理。