Files
makelore/.project-docs/10-decisions/proposals/20260912-agent-draft-design-9d82c9b4__desktop-workspace.md
T

110 lines
12 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.
# MakeLore 云智能体桌面编辑工作区
状态:交互规格提案;桌面工作区方向已获用户确认,具体行为以本提案继续讨论。尚未修改产品代码或声明正式交付。
## 目标与边界
让个人创作者在同一个桌面窗口内反复完成“修改配置 → 用明确版本试用 → 查看结果 → 发布”。复用 MakeLore 现有浅色视觉、原生窗口控制、应用导航和 Main Host API;不另造网页外壳或多窗口应用。云智能体属于账号,不显示当前 Code 项目作为它的归属。
自用、试用、分享、API、主动及定时任务均保留;创建者付款、调用者内容隔离、不可变发布版本和原生云执行契约不变。关闭客户端不等于取消已接受的云任务。
本次只交付规格与本地交互草图。草图中的回答、保存、发布、资源与费用均为示意,不连接服务、不计费、不上传、不改变真实配置;不能用它证明实际 Electron 行为。
## 已核实的当前实现
基线:`70fa916edf74bf44308b279f90ccd945f8269f48`。用户截图是现场视觉证据,下面是基线源码事实,不推断已安装客户端与当前源码完全一致。
- `src/components/layout/MainLayout.tsx` 的普通内容为 `overflow-auto` 和页面 padding。Code/Canvas 有全高工作区分支,Agents 未接入。
- `src/pages/CloudAgents/index.tsx` 的 DraftEditor 为居中 `max-w-6xl` 页面;返回、标题、页签和大间距依次占据垂直空间。
- DraftEditor 明确调用 save 并携带 `expected_revision`,成功后更新已保存快照。不存在已证实的自动保存或未保存配置的本机持久化。保存失败会读取云端草稿并保留用户输入。
- 试用通过 `CloudChat key={saved.draft_revision}` 渲染。保存新修订会重新挂载;未发送或未确认子操作由统一 pending 状态阻止保存/离开。
- `CloudChat.tsx` 已有消息区内部滚动,但以 `max-h-[55vh]` 布局,叠加外层页面滚动;附件区和输入框仍参与页面高度。预览会话按修订过滤,已接受请求带冻结身份。
- `ConfigurationFields.tsx` 把模型、全部资源目录、资源管理、知识管理、审批和运行限制纵向铺开。
- `CloudCosts.tsx` 的费用上限走独立预算接口,当前位于发布与访问页。它是当前服务端政策,保存后影响后续模型调用,不是等待草稿发布才生效的配置。
- `TitleBar.tsx` 已提供 `pageTitle` seam,也读取 Code 的 activeProject;应通过模块上下文提供 Agents 标题,而非改写 Code 项目状态。
## 桌面布局
| 当前形态 | 目标形态 |
|---|---|
| 居中长页面与整页滚动 | 填满标题栏以下剩余窗口;仅配置内容、聊天记录或当前管理页面内部滚动 |
| 返回、标题、四页签分层占高 | 约 56–64 px 工具栏:智能体名称、草稿状态、编辑/对话/自动任务、发布与访问 |
| 固定大侧栏与重复“我的智能体”返回 | 复用全局侧栏与既有折叠偏好;保留一处明确返回列表入口,不强行改变全局偏好 |
| 左右固定比例 | 初始约 46% / 54%,分隔线可拖动及键盘调整;保存比例,限制两侧最小可读宽度 |
| 内容撑出窗口 | 两栏 `min-height: 0` 与剩余高度约束;聊天记录伸缩,输入区停留在聊天面板底部 |
| 窄窗纵向堆叠长页面 | 依据可用工作区宽度转为“编辑配置 / 试用”切换,保留两面状态;不切换成移动网页导航 |
两栏可用宽度约 760 px 以上时并排;配置约 340 px、试用约 380 px 为初步下限,最终以实际中文控件测量调整。编辑与试用均可独立展开到工作区,Esc 返回分栏;不是系统全屏或额外 BrowserWindow。窗口缩放和系统显示缩放按实际 CSS 可用空间重排。
标题栏继续保留 Windows 拖拽/最小化/最大化/关闭与 macOS 原生控制,不在内容页仿制。草图的窗口符号仅说明空间层级。
## 配置区的四个分类
| 分类 | 内容与交互 |
|---|---|
| 指令 | 名称在工具栏编辑,一句话简介占一行;角色与指令占主要空间,使用原生文本输入、撤销和上下文菜单 |
| 能力 | 模型摘要与可用性、已添加工具/技能/MCP/子智能体;“添加能力”打开选择面板,支持搜索、分类、详情与明确添加/移除 |
| 知识 | 已关联知识库/资料、处理状态、选择已有资源和文件导入;加载、索引、失败、替换分别可见 |
| 限制 | 费用上限与工具审批、执行步数、输出量、时限;高级运行参数按需展开 |
分类切换不改变 Agent 身份,不保存、不发起模型调用,也不清空另一栏。目录名称与模型价格来自服务端,保留不可用的已选资源及其状态,不能因刷新静默移除。知识处理可能计费,应在执行入口保留现有说明。
费用上限虽移动到“限制”,仍使用独立的“保存费用上限”动作与独立状态。文案明确“保存后对后续模型调用生效,已获准调用继续结算”;覆盖自用、分享、API、预览、定时和知识调用,空值不限、0 阻止新增收费调用,沿用北京时间划日。不得被主草稿的“已保存”或“发布”状态掩盖。
## 保存、试用与版本
必须分别持有编辑缓冲、最近云端确认的草稿、正在查看的试用上下文。三个状态的区分服务用户判断,不直接把内部标识铺到主界面。
1. 编辑期间保留当前回答、滚动位置、未发送输入和活动请求。保存成功只更新云端草稿状态,不通过修订 key 自动拆掉当前试用面板。
2. 旧试用显示“本轮 · 修订 N”;草稿变更后显示“配置已更新”与“用最新草稿试用”。该动作创建/选择当前修订的独立试用,保留历史结果,不把原请求或重试悄悄改成新配置。
3. 本地修改未保存时,新配置试用的入口为“保存并开始新试用”。保存失败则停留、保留输入,不发起模型调用。点击保存本身不发送消息、不发布、不启用日程。
4. 正在执行或结果未确认的请求仍绑定旧配置;保存或切换视图不取消、不自动重放。错误恢复继续沿用原幂等身份,不能以“重试”创建新的付费请求。
5. 历史入口按时间和配置修订组织,支持查看旧修订。是否允许在过期草稿会话里继续发送,实施时以 Yuxi 当前契约为准;本提案的默认交互引导使用最新修订的新试用,不假设旧会话可套用新配置。
6. 未发送文本、附件选择和未确认审批不能因配置分类/编辑模式切换丢失。离开智能体或切账号前按真实持久化能力保护,恢复记录必须以账号与智能体隔离。
首个可验证版本保留明确保存并增加 Ctrl/Cmd+S,确保上面三个状态先正确解耦。自动保存是该方向的后续增强,不直接在现有 save 上挂定时器:应串行保存稳定快照、保留保存期间新增编辑、暂停处理冲突/未知结果,并避免保存触发会话重建。未实现本机持久化前,不能显示“已保存在本机”;暂不把完整离线编辑/同步系统纳入界面重排。
| 状态 | 可见反馈与下一步 |
|---|---|
| 编辑有变化 | “未保存”;可保存或保存并新建试用,旧回答仍可读 |
| 保存中 | 轻量状态;同一保存不重复提交,后续编辑不得被旧响应覆盖 |
| 云端确认 | “云端已保存”;保存状态不代表发布或运行成功 |
| 保存失败/结果未知 | 保留编辑与原操作信息,提供读取状态/明确重试;不用无限加载或静默重放 |
| 云端版本冲突 | 比较本地和云端差异,用户选择后再提交,不用最后写入覆盖 |
| 资源不可用 | 定位到能力项并说明;不清空原选择 |
| 消息已接受、连接中断 | 显示正在恢复云端状态;不能引导用户重复发送同一业务意图 |
## 试用、发布与桌面操作
聊天区默认显示可读的深色正文;用户消息与助手回答层级明确。运行阶段、工具活动、产物、实际用量与审批附着于对应运行,完成后详情可折叠;可见费用以服务端结果为准,未结算显示待结算。原始错误、凭据、内部路径和模型内部推理不作为调试详情展示。
输入框固定于面板底部;附件以按钮和已选文件摘要进入,文件列表按需展开。支持 Enter 发送、Shift+Enter 换行及输入法组合保护,复用桌面原生复制/粘贴/撤销;不得覆盖输入控件既有快捷键。加载与恢复只影响相关动作,不能把整个窗口锁死。
“发布与访问”是一个完整管理入口,不能把已存在的分享撤销、应用凭据管理、停用、版本历史、归档和费用历史藏丢。按钮打开该管理视图并聚焦发布动作;发布明确基于已保存配置,采用现有版本与访问授权流程。普通对话使用已发布版本,自动任务保留独立导航,新任务保存后仍默认停用。
## 实施顺序与验收
先做全高布局、紧凑工具栏、可调分栏、固定输入框、配置分类及窗口标题上下文;随后解耦保存与试用状态、恢复编辑位置和输入、补快捷键与错误处理。自动保存和本机耐久草稿在其真实行为明确后实现,不能用视觉上的“已保存”代替。
以下为产品验收目标;后续本任务已实施首版,实际完成的检查与平台边界见本人任务记录:
- 1366×768、1440×900、窄窗口及系统 125%/150% 显示缩放下,长指令/长回答不会把输入框推离工作区;无非预期整页或横向滚动。
- 拖动分隔线、键盘调整、展开/还原和窗口缩放后,两栏内容、输入与滚动位置保持;偏好正确恢复。
- 输入未发送内容后切配置分类、修改并保存草稿,输入和当前试用结果不消失;新试用明确使用最新云端确认修订。
- 保存期间继续输入、保存失败、修订冲突、请求结果未知时,编辑不丢失,状态不误报,没有重复运行或收费。
- 知识处理/附件/审批保留原授权与确认语义;能力目录失败不抹去已有选择。
- 费用上限独立保存且文案说明即时政策;草稿保存、发布、日程启用互不冒充。
- 从 Code 切到 Agents 后标题表达账号级智能体,再返回 Code 时原项目上下文未改变;账号切换不会显示上一账号的草稿或试用数据。
## 交互草图与验证边界
本地草图:`C:\Users\7brot\.codex\visualizations\2026\09\10\01a0890f-f36d-7f43-b7a0-d3d2232e3ca3\agent-draft-desktop.html`。
支持配置分类、导航折叠、可调分栏、展开还原、长回复示例、试用输入、保存/旧试用保留及保存失败/冲突示意。费用政策独立保存。自动保存、本机耐久草稿、真实服务调用、生产资源选择和正式发布不在演示实现中。
内置浏览器因 URL 安全策略拒绝打开 file:// 页面;未绕过该限制,没有取得浏览器视觉或交互回读证据。草图不是已验收的产品界面。产品规格以本文件为准。
## Promotion Candidate
Target:已接受个人云平台 UX 与客户端架构记忆。Proposal:在实际实现和验收后记录账号级桌面全高编辑工作区、保存/试用状态分离、费用政策独立保存。Evidence:用户批准桌面工作区方向、上述基线源码与后续正式验证。Future impact:避免草稿保存重建对话、混淆费用政策与发布版本。Semantic conflicts:根 AGENTS/部分共享记忆仍只描述三个模块,个人云平台已接受决定拥有本模块边界;本提案不改写它们。Human confirmation:总体方向已确认,尚未把本设计提案冒充为产品已实现事实;canonical promotion 留待 Integration Gate。