# 产品需求 状态:已确认、已冻结 版本:0.3.0 上一确认版本:0.2.0 确认人:用户 确认时间:2026-08-11 本次变更:项目首版增加重命名和删除;增加 Agent 请求用户选择、确认和填写意见的交互组件能力。 ## 项目身份 - 项目名称:Great Agent 2 - 一句话说明:一个供个人使用、界面尽量一比一还原 Claude Desktop、以本地文件和可复用 Agent Core 为基础的自托管 Web Agent。 - 目标用户:项目所有者本人。 - 交付形态:本地或服务器运行的单用户 Web 应用;访问保护由部署环境中的外部反向代理承担;架构预留未来 CLI 入口。 - 核心依赖方向:`local file -> agent core -> web serve -> web`。 - 后续扩展方向:`local file -> agent core -> cli`。 ## 采用的默认值 - 默认视觉基准为当前 macOS Claude Desktop 的浅色桌面布局,主要验收视口为 `1440 × 900`。 - 当前版本只实现 Web 使用链路,不实现完整 CLI 命令;但 Agent Core 的公开边界不得依赖 Web 类型、HTTP 请求或浏览器状态。 - 当前版本只面向单人、单实例使用,不设计注册、用户表、多租户、角色系统、共享会话或分布式并发。 - 同一实例同一时间只支持一个正在生成的 Agent 任务;不处理多个用户或多个任务并发执行。 - 业务数据、项目、会话记录和文件索引保存在本地;具体文件格式在实施方案阶段确定。 - 普通聊天使用应用配置的默认工作区;项目聊天使用所属项目绑定的工作区目录。 - 本地文件能力只允许访问当前聊天对应的工作区目录,禁止通过路径穿越访问工作区之外的路径。 - 应用默认运行在可信上游之后,不实现登录页面、身份校验中间件、用户会话或访问凭据配置。 - 外部反向代理的配置、凭据和访问策略不属于本项目开发范围。 - Claude Desktop 中当前版本不支持的小组件直接隐藏,不显示不可用按钮或假入口。 ## 当前版本范围 1. Claude Desktop 风格的桌面 Web 外壳。 2. 普通会话的新建、列表、切换、重命名和删除。 3. 项目的创建、列表、选择、重命名和删除;每个项目绑定一个本地工作区目录并可包含多个独立会话。 4. 项目会话的新建、列表、切换和持续聊天。 5. 用户消息、助手消息、工具过程和错误消息的展示。 6. Agent 回复的流式输出、停止生成、失败提示和重新发送。 7. 本地项目、会话和消息持久化,服务重启后可恢复。 8. 在当前聊天对应工作区内读取、搜索、创建和修改本地文件。 9. 文件附件的选择、提交、显示和 Agent 读取。 10. Agent Core 对模型调用、消息上下文、工具调用、运行状态和取消操作的统一编排。 11. Web Serve 对 Web 静态资源、业务接口和流式事件的统一提供。 12. 简单的个人配置界面,显示默认工作区、模型和运行信息;敏感配置不回显完整值。 13. 清晰的分层和模块拆分,避免页面、协议、业务逻辑和文件操作堆积在大文件中。 14. 为未来 CLI 暴露与 Web 无关的 Agent Core 调用能力,但当前版本不交付完整 CLI 产品体验。 15. Agent 可以在回复过程中请求用户做单选、多选、确认或填写意见,用户提交后继续同一次 Agent 任务。 ## 用户角色与权限 ### 项目所有者 - 使用全部会话、Agent 和配置能力。 - 访问普通聊天的默认工作区以及项目聊天所属项目的工作区。 应用内部不区分用户身份。系统不包含登录、注册、找回密码、邀请成员、用户管理、角色管理或权限分组。 ## 核心用户流程 ### 首次进入 1. 用户打开 Web 地址。 2. 应用直接进入 Claude Desktop 风格的主界面。 3. 左侧“最近”列表为空,左侧“项目”列表为空并显示创建项目入口。 4. 当前不自动创建或选中任何会话。 5. 右侧显示对话引导组件和可用输入区。 ### 普通对话 1. 用户点击左侧“新任务”,进入未持久化的普通新对话状态。 2. 在用户发送第一条有效消息前,不创建空会话记录。 3. 用户在输入框中输入消息,可选择附加默认工作区内的本地文件。 4. 第一条消息提交成功时创建普通会话,此后显示在左侧“最近”列表。 5. 系统立即显示用户消息并创建 Agent 运行。 6. Agent Core 组织上下文、调用模型并按需调用默认工作区文件工具。 7. Web 界面流式显示助手内容和工具执行状态。 8. 运行结束后保存完整消息和运行结果,用户可以在同一会话继续聊天。 ### 创建项目与项目对话 1. 用户点击左侧“项目”区域的创建入口。 2. 系统显示项目创建界面,要求填写项目名称并选择一个可访问的本地工作区目录。 3. 校验通过后创建并持久化项目;项目出现在左侧“项目”列表。 4. 用户进入项目后,可以开始该项目下的新对话或选择该项目已有会话。 5. 项目新对话同样在第一条有效消息提交时才持久化。 6. 项目会话的文件附件和 Agent 文件工具只访问该项目绑定的工作区。 7. 一个项目可以包含多个相互独立、分别保存历史记录的会话。 8. 用户可在项目会话中持续发送消息,助手回复和工具过程正常追加。 ### 管理项目 1. 用户从项目菜单发起重命名,输入非空新名称后立即持久化。 2. 用户从项目菜单发起删除,系统显示项目名称和所含会话数量并要求明确确认。 3. 项目中有正在运行的任务时禁止删除,用户需要先停止任务。 4. 确认删除后,项目及其全部项目会话、消息、附件元数据和运行记录不再出现在应用中。 5. 删除项目不得删除、移动或修改项目绑定的真实工作区及其中任何文件。 ### 本地文件操作 1. 用户在消息中提出与文件有关的任务,或主动附加文件。 2. Agent Core 根据任务调用工作区文件工具。 3. 工具校验目标路径位于允许的工作区内。 4. 系统读取、搜索、创建或修改文件。 5. 界面展示简洁的工具状态和操作结果。 6. 文件操作结果进入当前会话上下文。 ### 回答 Agent 的交互请求 1. Agent 在需要用户决定或补充信息时发起交互请求,而不是用普通文本假装按钮。 2. 支持四种首版交互:单选、多选、确认、自由文本意见。 3. 系统暂停当前 Agent 任务并保存交互请求,状态显示为“等待用户”。 4. 右侧消息时间线在对应助手回复位置显示交互卡片。 5. 用户填写并提交答案;系统校验成功后保存答案,并恢复同一次 Agent 任务。 6. Agent 收到结构化答案后继续回复或继续调用工具。 7. 页面刷新或重新打开会话时,尚未回答的交互卡片仍可继续操作;已经回答的卡片显示已提交结果,不可重复修改。 ### 恢复历史会话 1. 用户刷新页面或重新启动服务。 2. 系统从本地存储读取普通会话、项目以及项目下的会话。 3. 当前没有选中项时,右侧显示对话引导组件,不自动进入任意历史会话。 4. 用户选择普通会话后,恢复其消息、附件和已完成的工具记录,并使用默认工作区继续聊天。 5. 用户选择项目会话后,恢复相同历史内容,并使用所属项目工作区继续聊天。 ## 页面流转 ```text 进入系统 ├── 加载最近普通聊天 ├── 加载项目及其聊天摘要 └── 当前不自动选择会话 └── 右侧显示对话引导组件 点击“新任务” └── 普通新对话(未持久化) └── 第一条有效消息 ├── 创建普通会话 ├── 加入“最近” └── 持续聊天 点击“创建项目” └── 输入名称并选择本地目录 └── 创建项目 └── 项目新对话(未持久化) └── 第一条有效消息 ├── 创建项目会话 └── 持续聊天 选择普通历史会话 └── 还原历史记录并继续聊天 选择项目历史会话 └── 还原历史记录、恢复项目工作区并继续聊天 ``` ## 页面或接口 ### 主应用外壳 - 整体布局、留白、颜色、圆角、阴影、字体层级和控件尺寸尽量贴近 Claude Desktop。 - 主要区域由左侧会话栏、顶部当前会话区域、中央消息区和底部输入区组成。 - 桌面视口下不得出现明显错位、溢出或与参考界面风格冲突的组件。 ### 左侧会话栏 - 顶部提供“新任务”入口。 - “最近”区域按最近更新时间展示普通会话;为空时显示明确空状态,不创建占位会话。 - “项目”区域展示项目列表和创建项目入口;为空时显示创建引导。 - 项目项可展开或进入,以展示并选择该项目下的会话。 - 项目菜单提供重命名和删除;删除必须二次确认。 - 展示当前选中状态。 - 支持重命名和删除。 - 支持折叠或展开,行为尽量贴近 Claude Desktop。 ### 右侧主区域 - 未选择会话时显示对话引导组件和输入区。 - 普通新对话与项目新对话在首条消息前都属于临时 UI 状态。 - 选择已有普通会话或项目会话时,完整还原历史消息、附件和工具记录。 - 恢复完成后沿用原会话上下文继续聊天,不创建替代会话。 ### 项目创建与管理界面 - 必填项目名称和本地工作区目录。 - 工作区必须是存在、可访问的目录;校验失败时不得创建项目。 - 创建成功后进入项目,并提供开始项目新对话的入口。 - 重命名要求非空名称,成功后立即更新左侧列表和本地数据。 - 删除确认必须显示项目名称和会话数量,并明确说明不会删除工作区文件。 - 当前版本不提供项目成员、共享、云同步、远程知识库或 Claude 账号能力。 ### 消息区 - 区分用户、助手和工具过程。 - 支持 Markdown、列表、链接、引用、表格和代码块。 - 代码块支持语言标识和复制。 - 支持流式内容逐步出现。 - 长内容可滚动,新增内容默认跟随到底部;用户主动上滚后不得强制抢回滚动位置。 - 错误和取消状态有明确但不过度突出的视觉提示。 - 在消息时间线中显示单选、多选、确认和意见输入卡片,卡片属于触发它的 Agent 运行。 - 交互卡片提交后保留问题和答案的只读历史展示。 ### 输入区 - 支持多行输入、发送、停止生成和附加文件。 - 空输入不能发送。 - 生成过程中发送按钮切换为停止操作。 - 输入内容在发送失败时不得无提示丢失。 - 不支持的 Claude 小组件直接隐藏。 - 当前任务等待交互卡片回答时,普通消息输入保持禁用,用户可以回答卡片或停止任务。 ### 设置界面 - 显示当前工作区路径、模型配置摘要和版本信息。 - 允许修改非敏感个人配置。 - 模型密钥等敏感值不以明文回显。 ### Web Serve 接口 - 为项目、会话、消息、Agent 运行、用户交互回答、取消、文件和配置提供内部接口。 - 为 Agent 流式输出和工具状态提供流式通道。 - Web 层只负责协议转换和传输,不承载 Agent 核心业务规则。 - Web Serve 不包含登录、身份校验、用户会话或访问控制逻辑;这些职责由部署环境中的外部反向代理承担。 ### Agent Core 接口 - 接受与传输协议无关的运行请求。 - 提供项目与会话操作、消息提交、用户交互请求与回答、流式事件、取消操作和文件工具能力。 - 返回领域对象或领域事件,不返回绑定具体 Web 框架的响应对象。 - 可被未来 CLI 在不启动 Web Server 的情况下调用。 ## 功能需求 ### FR-001 会话管理 - 新建会话时生成稳定标识和默认标题。 - 会话通过可空 `projectId` 区分普通会话和项目会话;创建后不得在普通与项目类型之间移动。 - 点击“新任务”或项目内“新对话”只创建临时 UI 状态,第一条有效消息提交时才持久化会话。 - 首次有效消息后可生成或更新标题。 - 重命名后立即持久化。 - 删除会话前需要明确确认,删除后不再出现在列表中。 - 切换会话不得混淆消息或正在展示的状态。 ### FR-010 项目管理与项目聊天 - 创建项目时生成稳定标识,保存名称、工作区目录、创建时间和更新时间。 - 项目名称不能为空;工作区必须是存在且可访问的本地目录。 - 左侧项目列表可展示并选择项目,项目下可包含多个独立会话。 - 项目可以重命名;新名称不能为空,修改后立即持久化。 - 删除项目必须明确确认,并同时删除应用内的项目实体及其全部项目会话数据。 - 删除项目不得删除、移动或修改项目绑定的真实工作区或其中的文件。 - 项目中有正在运行的任务时拒绝删除,并说明需要先停止任务。 - 项目会话必须持有所属 `projectId`,并使用项目绑定的工作区执行附件和文件工具操作。 - 普通会话不属于任何项目,使用应用默认工作区。 - 项目或其工作区暂时不可用时,历史会话仍可打开;文件相关能力明确禁用并显示原因。 - 当前版本不提供项目共享、项目成员、云同步、跨项目统一知识库或项目级模型密钥。 ### FR-002 消息与流式回复 - 用户消息提交后立即进入当前会话。 - 助手回复以流式方式展示。 - 支持文本、Markdown、代码块、工具状态和错误块。 - 用户可以停止当前生成。 - 完成、失败和取消都必须形成明确的终态。 ### FR-003 Agent Core - 统一管理系统提示、会话上下文、模型调用和工具调用。 - 模型提供方通过适配边界接入,不把具体 SDK 类型泄漏到领域层。 - Web 和未来 CLI 使用同一套 Agent Core 能力。 - Agent Core 不直接依赖 DOM、浏览器 API、HTTP 请求对象或 Web 路由。 ### FR-011 用户交互请求 - Agent Core 提供内置的用户交互能力,模型可以请求单选、多选、确认或自由文本意见。 - 交互请求包含稳定标识、所属 Run、问题、类型、选项、是否必填和创建时间。 - 单选和多选必须提供 2 至 10 个非空选项;多选可限制最少和最多选择数。 - 自由文本意见最大 8 KiB;所有模型提供的标题、说明和选项按纯文本显示,不解释为 HTML。 - 有效交互请求使当前 Run 进入“等待用户”,不结束 Run,也不创建新的 Run。 - 前端根据交互类型显示对应卡片;用户回答通过明确接口提交,不通过普通聊天消息猜测匹配。 - 提交答案时校验交互仍在等待、答案类型正确并满足选择数量限制。 - 答案保存成功后转换为该内置交互工具的结果,再恢复同一次模型调用流程。 - 同一个交互只能成功回答一次;重复提交相同答案返回当前结果,提交不同答案返回冲突错误。 - 用户停止等待中的 Run 时,交互变为“已取消”,卡片不可继续提交。 - 刷新和重启服务后,等待中的交互、已回答结果和所属消息位置都能恢复。 - 普通 `tool.*` 用于展示文件等工具调用;用户交互使用独立语义,不混入普通工具完成状态。 ### FR-004 本地文件 - 根据当前会话解析唯一有效工作区:普通会话使用默认工作区,项目会话使用项目工作区。 - 列出当前工作区目录和文件。 - 按文件名或文本内容搜索当前工作区文件。 - 读取文本文件,并对不支持的二进制文件给出明确提示。 - 创建新文件和修改已有文件。 - 所有路径在执行前规范化并校验工作区边界。 - 文件不存在、权限不足、编码错误或写入失败时返回可理解错误。 - 当前版本不要求 Agent 删除、移动或批量覆盖文件。 ### FR-005 文件附件 - 用户只能从当前会话对应的工作区选择文件附加到消息。 - 消息中显示附件名称、类型和可用状态。 - Agent 能读取附件内容或获得不支持原因。 - 文件在发送后被移动或删除时,历史记录仍保留附件元数据并显示文件不可用。 ### FR-006 本地持久化 - 保存项目、会话及其所属关系、消息、附件元数据、Agent 运行终态和非敏感配置。 - 数据写入失败时不得伪装为成功。 - 服务重启后恢复已完成数据。 - 写入过程不得因进程中断而轻易留下无法解析的半成品文件。 - 不引入面向多用户的用户表、租户字段或共享权限模型。 ### FR-007 Claude Desktop 风格还原 - 对齐主布局、侧栏、欢迎状态、消息排版、输入框、按钮、菜单和常见交互状态。 - 优先保证整体比例、间距、层级、颜色、字体、圆角和交互反馈一致。 - 不支持的入口、小组件和菜单项直接隐藏。 - 不使用“即将推出”占位填充参考界面。 - 实施阶段建立参考截图和对应视口的视觉对比基线。 ### FR-008 模块拆分 - 本地文件层、Agent Core、Web Serve、Web UI 分别拥有明确目录和公开边界。 - 领域规则不得散落到路由处理器或页面组件。 - 页面组件不得直接读写本地业务数据文件。 - 单个文件只承担一种主要职责;超出合理阅读和维护范围时按职责拆分。 - 禁止创建同时包含大量 UI、网络协议、Agent 编排和文件操作的“总控文件”。 ### FR-009 CLI 扩展准备 - Agent Core 可在没有 Web Server 的进程中初始化。 - 核心输入、输出、事件和取消机制不绑定 Web 协议。 - 文件存储和模型适配通过可替换边界提供。 - 当前版本不要求交付交互式 CLI、命令补全、终端 UI 或 CLI 安装包。 ## 业务规则 - BR-001:整个实例只有一个逻辑用户,不创建产品级用户身份。 - BR-002:同一时间最多存在一个正在运行的 Agent 任务;新任务到来时应拒绝并提示,或由用户先停止当前任务。 - BR-003:所有会话数据归项目所有者本地持有。 - BR-004:工作区之外的路径一律不可访问,即使请求来自模型工具调用。 - BR-005:模型生成内容和工具结果都属于同一次 Agent 运行,并具有可追踪的运行标识。 - BR-006:失败或取消的运行不得显示为成功完成。 - BR-007:不支持的 Claude Desktop 功能必须隐藏,而不是展示不可点击入口。 - BR-008:Web 层不得成为核心业务能力的唯一入口。 - BR-009:模型密钥等敏感配置不得出现在客户端资源、接口响应、日志正文或本地业务数据中。 - BR-010:应用内不得实现访问身份逻辑,外部反向代理配置不得进入 Agent Core、Web Serve 或 Web UI。 - BR-011:普通会话只能使用应用默认工作区;项目会话只能使用所属项目绑定的工作区。 - BR-012:没有首条有效消息的临时新对话不进入本地持久化和“最近”列表。 - BR-013:项目是会话容器和工作区边界,一个项目可以包含多个会话;会话最多属于一个项目。 - BR-014:打开应用时不自动选择历史会话,也不自动创建新会话。 - BR-015:删除项目时一并删除应用内的项目聊天数据,但绝不删除真实工作区及其中的文件。 - BR-016:项目中有正在运行的任务时不得删除项目;当前版本不支持修改项目绑定的工作区,项目名称重命名不影响运行中的任务。 - BR-017:等待用户回答的任务仍属于正在运行的全局任务,回答或停止前不得启动第二个任务。 - BR-018:用户交互请求和答案必须归属于同一个 Run;提交答案只恢复原 Run,不新建会话或 Run。 - BR-019:前端组件名称不进入领域协议;协议表达交互类型和数据,Web UI 自行选择对应组件。 ## 数据与状态 ### 项目 - 稳定标识 - 名称 - 绑定的本地工作区目录 - 创建时间 - 更新时间 - 所含会话摘要 ### 会话 - 稳定标识 - 可空项目标识:为空表示普通会话,非空表示项目会话 - 标题 - 创建时间 - 更新时间 - 消息顺序 ### 消息 - 稳定标识 - 所属会话 - 角色:用户、助手、工具、系统内部记录 - 内容块 - 附件元数据 - 创建时间 - 对应 Agent 运行标识 ### Agent 运行 - 稳定标识 - 所属会话 - 状态:等待、运行中、调用工具、等待用户、已完成、失败、已取消 - 开始与结束时间 - 错误摘要 - 工具过程摘要 ### 用户交互 - 稳定标识 - 所属 Run 和消息位置 - 类型:单选、多选、确认、自由文本 - 问题、说明和选项 - 必填与选择数量限制 - 状态:等待回答、已回答、已取消 - 用户答案 - 创建时间和回答时间 ### 文件引用 - 显示名称 - 工作区内相对路径 - 文件类型 - 可用状态 - 最近确认时间 ### 配置 - 普通聊天默认工作区路径 - 模型配置摘要 - 非敏感界面偏好 - 应用版本 ## 正常、异常和边界流程 ### 正常流程 - 打开应用后新建会话并完成一次流式对话。 - 创建绑定本地目录的项目,在项目内创建多个对话并分别持续聊天。 - 重命名项目并在重启后看到新名称。 - 确认删除项目后,项目和项目聊天从应用中消失,绑定工作区文件保持原样。 - Agent 发起单选、多选、确认或意见输入,用户提交后同一次任务继续运行。 - 从左侧选择普通聊天或项目聊天,恢复历史后继续发送消息。 - 在历史会话中继续发送消息。 - 附加工作区文件并让 Agent 读取。 - Agent 搜索、创建或修改工作区文件。 - 停止正在生成的回复。 - 重启服务后恢复历史会话。 ### 异常流程 - 模型配置缺失时界面提示不可运行,不产生伪造回复。 - 模型请求失败或超时时,运行进入失败状态并可重新发送。 - 流式连接中断时保留已经确认写入的内容,并将运行标记为中断或失败。 - 文件不存在、超出工作区、权限不足、编码不支持或写入失败时,工具返回明确错误。 - 本地持久化失败时向用户提示,并避免把未保存结果显示为已经可靠保存。 - 生成过程中再次发送消息时阻止提交,并说明当前已有运行。 - 历史附件消失时显示不可用状态,不导致整个会话无法打开。 - 创建项目时名称为空、目录不存在、目录不可访问或不是目录,创建失败并指出具体字段。 - 项目工作区在创建后被移动、删除或变得不可访问时,项目历史会话仍可查看,但附件选择和文件工具被禁用。 - 删除项目前项目聊天仍有任务运行时,删除被拒绝并提示先停止任务。 - 项目数据删除失败时保持项目可见并提示失败,不展示部分删除成功的状态。 - 交互请求格式无效时不显示损坏卡片,Agent 收到可理解的交互请求错误。 - 回答已经取消、已经回答或不属于当前 Run 的交互时,提交被拒绝并保持原状态。 ### 边界流程 - 空消息不发送。 - 仅有附件的消息允许发送。 - 超长消息和超大文件必须在实施方案中定义上限并在界面提示。 - 空会话、超长会话标题、超长代码块和大量历史会话不能破坏布局。 - 刷新页面不得创建重复的 Agent 运行。 - 反复点击“新任务”但未发送消息,不得产生空会话记录。 - 一个项目没有会话时仍可正常打开并显示项目对话引导。 - 同名项目允许存在,但必须通过稳定标识和工作区摘要区分。 - 删除包含大量历史会话的项目时仍只执行一次确认后的删除操作;重复提交删除请求返回稳定终态,不触碰工作区。 - 刷新页面后等待回答的卡片仍可提交,已回答卡片不能再次编辑。 - 多选答案少于最少数量、超过最多数量或包含未知选项时不得提交。 ## 本版本不做 - 多用户、注册、用户邀请、角色和权限管理。 - 多租户、团队空间、会话分享和跨设备同步服务。 - 应用层登录、身份校验、用户会话或访问凭据管理。 - 外部反向代理的配置和访问策略。 - 多实例协调、任务队列和分布式并发。 - 完整 CLI 产品、终端 UI、CLI 安装包和命令补全。 - Claude 账号体系、Artifacts、远程连接器、语音、浏览器控制等未明确支持的 Claude Desktop 功能。 - 项目成员、共享、云同步、远程知识库和跨项目统一上下文。 - 移动端一比一还原;移动端只要求不出现完全不可操作的页面。 - Agent 对本地文件的删除、移动和批量覆盖。 - 插件市场、第三方技能商店和多人共享工具配置。 - 任意动态表单、文件上传式交互、日期选择、富文本编辑器和自定义脚本组件;首版只支持四种固定交互类型。 ## 验收标准 - AC-001:在 `1440 × 900` 视口下,主布局、侧栏、消息区和输入区与确认后的 Claude Desktop 参考截图没有明显结构差异。 - AC-002:所有未实现的参考界面小组件均被隐藏,不存在无效按钮或“即将推出”占位。 - AC-003:用户能够新建、切换、重命名和删除会话。 - AC-004:用户发送消息后能够看到助手内容流式出现,并在完成后持久化。 - AC-005:用户能够停止正在运行的回复,界面和存储状态均显示“已取消”而不是“已完成”。 - AC-006:服务重启后,会话列表、消息、附件元数据和已完成运行仍可恢复。 - AC-007:用户能够附加允许工作区内的文件,Agent 能读取其内容或给出明确的不支持原因。 - AC-008:Agent 能在允许工作区内搜索、读取、创建和修改文本文件。 - AC-009:任何指向工作区之外的文件访问都被拒绝,包括包含 `..`、绝对路径和符号链接逃逸的情况。 - AC-010:模型失败、超时和流式连接中断都会产生清晰错误状态,不会无限加载或伪装成功。 - AC-011:同一时间已有 Agent 任务运行时,第二次发送被阻止且用户得到明确提示。 - AC-012:Markdown、表格、引用和带语言标识的代码块能够正确展示,代码块可复制。 - AC-013:用户主动上滚阅读历史内容时,新流式内容不会强制把滚动位置拉到底部。 - AC-014:Agent Core 的自动化测试可以在不启动 Web Server 和浏览器的情况下运行。 - AC-015:Web 路由或页面组件中不存在直接实现模型编排或本地文件读写的代码路径。 - AC-016:通过 Agent Core 的公开接口可以构造一次不依赖 HTTP 的测试运行,证明未来 CLI 可以复用。 - AC-017:应用源码中不存在登录页面、身份校验中间件、用户会话或访问凭据配置。 - AC-018:仓库和客户端构建产物中不存在模型密钥或其他真实敏感配置。 - AC-019:格式检查、类型检查、自动化测试和生产构建全部通过。 - AC-020:核心页面没有同时承担 UI、协议、Agent 编排和文件操作职责的大型总控文件。 - AC-021:仅有附件而无文本的消息可以成功提交;空文本且无附件的消息被阻止。 - AC-022:历史附件被移动或删除后,会话仍可打开并明确显示该附件不可用。 - AC-023:本地数据写入失败时,系统显示保存失败,不将结果标记为可靠持久化。 - AC-024:首次进入且没有数据时,左侧“最近”和“项目”均显示空状态,右侧显示对话引导组件,系统不自动创建或选中会话。 - AC-025:点击“新任务”后,在发送第一条有效消息前本地没有新增会话;首条消息提交后会话出现在“最近”并可持续聊天。 - AC-026:用户能够以名称和有效本地目录创建项目;无效名称或目录会被拒绝并显示明确原因。 - AC-027:一个项目可以包含至少两个独立会话,切换时各自历史和后续上下文互不混淆。 - AC-028:普通会话的附件和文件工具只使用默认工作区,项目会话只使用所属项目工作区,越界访问均被拒绝。 - AC-029:刷新或重启服务后,普通会话、项目、项目会话及其所属关系均可恢复;选择任一历史会话都能还原消息并继续聊天。 - AC-030:项目工作区不可用时,其历史会话仍能打开,文件相关入口和工具明确报告工作区不可用,不会回退到默认工作区。 - AC-031:项目重命名后左侧立即显示新名称,刷新和重启服务后新名称仍然保留。 - AC-032:删除确认显示项目名称、会话数量和“不删除工作区文件”的说明;确认后项目及项目聊天从应用消失,而工作区文件保持不变。 - AC-033:项目中有任务正在运行时删除被拒绝;项目数据删除失败时不会显示成已删除或留下部分可见状态。 - AC-034:Agent 发起单选、多选、确认和自由文本请求时,前端分别显示可操作卡片,而不是只显示普通文本或普通工具完成记录。 - AC-035:用户提交有效答案后,原 Run 从“等待用户”恢复并继续生成;不会创建新的 Run 或重复用户消息。 - AC-036:刷新或重启服务后,未回答交互仍可继续回答,已回答交互显示只读问题和答案。 - AC-037:重复回答、非法选项、超出多选限制和过长文本均被稳定拒绝,不会让 Run 进入错误的完成状态。 - AC-038:停止正在等待用户的 Run 后,交互卡片显示已取消且无法再提交,同时可以开始新的 Agent 任务。 ## 后续版本想法 - 基于同一 Agent Core 提供 CLI。 - 增加更丰富的本地工具和可配置系统提示。 - 增加深色主题。 - 在需要时再评估是否由应用承担访问身份能力。