# 桌面宠物 PRD ## 文档信息 | 项目 | 内容 | | --- | --- | | 状态 | 设计中 | | 版本 | 0.1 | | 日期 | 2026-09-03 | | 适用产品 | GoodBuddy Desktop | | 关联文档 | [功能逻辑](./logic-design.md)、[UI 设计](./ui-design.md)、[技术设计](./technical-design.md) | ## 1. 背景 GoodBuddy 当前只能通过主窗口发起提问、查看任务和管理执行空间。用户想要快速提问、丢一个 文件进去,或者只是看一眼任务有没有跑完时,仍必须先唤出并聚焦整个主窗口。这在多任务、多 显示器场景下打断当前工作流。 桌面宠物提供一个常驻、体积小、不抢焦点的悬浮入口,承担三类高频、轻量的动作:快速起草 一个问题、拖放文件或文字暂存、以及查看当前任务状态。它不是新的执行通道,只是现有 Conversation、Task 和 Runtime 能力上的一层轻量触发面和状态镜面。 ## 2. 产品目标 1. 用户无需先打开或聚焦主窗口即可起草一条消息或暂存一个文件。 2. 用户可以在不打开 Task Center 的情况下,一眼看到当前是否有任务在跑、等待处理或失败。 3. 桌面宠物默认不产生新的干扰:不主动弹窗抢焦点,不重复现有原生通知。 4. 桌面宠物的开关、位置、外观和提示强度完全由用户控制,且可随时完全关闭并恢复到没有该 功能之前的界面状态。 5. 桌面宠物不新增或绕过 Ask/Execute 授权边界,也不建立第二条消息发送或任务执行路径。 ## 3. 功能范围 ### 3.1 包含 - 设置中的“桌面宠物”一级分类,包含总开关、外观、位置和提示设置。 - 常驻悬浮窗口:可拖动、跨显示器记忆位置、贴边、置顶开关。 - 点击宠物打开的“快速起草”弹出框:输入文字、附加至多一个本机文件,提交后转入主窗口 对应会话的输入区草稿,不自动发送。 - 拖放文字或文件到宠物窗口,效果与快速起草的附件路径一致。 - 状态镜面:显示当前活跃任务的汇总状态,点击后打开 Task Center 中对应任务。 - 完成/失败气泡提示,及独立于原生通知的安静模式开关。 - 从有限的内置角色/外观中选择,调整尺寸、透明度和动画强度。 - 全局显示/隐藏开关,托盘菜单入口,键盘可达的等效操作路径。 ### 3.2 不包含 - 在宠物窗口内直接展示模型回复、执行工具调用或建立第二条 Ask/Execute 通道。 - 未经用户确认自动发送消息或自动执行任务。 - 持续读取屏幕内容、剪贴板或系统级选中文本。 - 用户上传任意自定义头像图片、养成机制、货币或每日签到。 - 多个宠物实例、宠物之间互动或联网社交功能。 - 管理员远程强制启用、配置或监控用户的桌面宠物。 - 替代 Task Center、助手工作栏或现有通知系统的权威数据来源。 ## 4. 功能需求 ### FR-1 总开关与默认状态 - 设置新增“桌面宠物”一级分类,包含“启用桌面宠物”总开关。 - 全新安装和现有用户升级后默认关闭,不在未经用户操作时出现在桌面上。 - 关闭总开关立即隐藏宠物窗口,保留用户此前的位置、外观和提示设置以便重新开启。 ### FR-2 常驻悬浮窗口 - 启用后创建一个无边框、默认置顶、不出现在任务栏的小型窗口。 - 用户可拖动到任意位置;位置按显示器分别记忆,显示器断开重连后回退到最近的可用显示器。 - 提供“贴边”选项,拖动到屏幕边缘附近时自动吸附。 - 提供独立的“始终置顶”开关;关闭后宠物仍可见,但可被其他窗口遮挡。 - 宠物窗口不接受系统级最大化、最小化或调整大小操作。 ### FR-3 快速起草 - 点击宠物打开一个紧邻宠物的小型弹出框,包含文本输入和“附加文件”按钮。 - 文本输入支持多行、粘贴图片;附加文件复用现有附件类型、数量和大小限制。 - 弹出框显示将要进入的目标:当前活跃会话,或“新建对话”。用户可在弹出框内切换目标, 但不能在弹出框内选择模型、Runtime 或 Ask/Execute 模式。 - 提交后主窗口被显示或聚焦,目标会话被激活,文字和附件作为草稿填入该会话的输入区, 输入焦点落在该输入区。提交动作本身不发送消息、不创建任务。 - 取消或关闭弹出框放弃当前草稿,不影响主窗口任何已有草稿。 ### FR-4 拖放暂存 - 用户可以把本机文件或选中文字拖到宠物窗口上。 - 拖入时宠物给出可放置的视觉反馈;释放后遵循与快速起草提交相同的行为:显示主窗口、 激活目标会话、把内容放入该会话输入区草稿。 - 拖放文件的类型、数量、大小限制与现有聊天附件限制一致;超出限制时明确提示被拒绝的 文件,其余合法文件仍正常暂存。 - 拖放不支持文件夹;文件夹被拖入时提示不支持,不递归展开。 ### FR-5 状态镜面 - 宠物在空闲、执行中、等待处理、已完成、失败之间切换外观,反映当前所有活跃 Task 的 汇总状态;多个状态并存时按“等待处理 > 失败 > 执行中 > 已完成 > 空闲”的优先级显示。 - 点击状态镜面打开或聚焦主窗口的 Task Center,并定位到触发当前状态的任务。 - Runtime 或网络不可用导致任务状态无法确认时,状态镜面显示“状态不可用”而不是回退成 “空闲”。 ### FR-6 完成与失败提示 - 任务从执行中或等待处理转为已完成或失败,且主窗口不可见或未聚焦时,宠物旁显示一条 气泡,说明任务标题和结果。 - 气泡在用户不操作时于一段时间后自动消失;失败气泡保持可见直到用户查看或手动关闭。 - 点击气泡等价于点击状态镜面,打开对应任务详情。 - 同一事件只能触发桌面宠物气泡或现有原生系统通知中的一种,不同时出现两条提示;具体 归并规则由[功能逻辑](./logic-design.md)定义。 ### FR-7 安静模式 - 独立于总开关的“安静模式”开关,开启后不再显示完成/失败气泡。 - 安静模式不影响状态镜面本身的外观切换,也不影响原生系统通知的现有行为。 ### FR-8 外观与个性化 - 提供数量有限的内置角色供选择,不支持上传自定义图片。 - 提供尺寸、透明度和动画强度调整;调整立即生效并持久化。 - 提供“恢复默认外观”操作。 ### FR-9 显示、隐藏与退出 - 提供独立于总开关的“暂时隐藏”动作:隐藏宠物窗口但保留启用状态,可通过托盘菜单或 设置重新显示。 - 托盘菜单新增“显示/隐藏桌面宠物”入口,随当前可见性变化文案。 - 应用退出时宠物窗口一并关闭,不残留独立进程。 ### FR-10 键盘可达性 - 宠物窗口本身可通过系统级窗口切换(如 Alt+Tab)取得焦点,取得焦点后可用键盘打开快速 起草弹出框、在状态镜面和提示之间移动,并可用 Escape 关闭弹出框。 - 所有交互提供可访问名称和状态说明,不仅依赖动画或颜色表达状态。 ### FR-11 与现有能力的边界 - 快速起草和拖放暂存最终使用主窗口现有的会话、附件、模型和 Ask/Execute 选择逻辑,不 新增第二套发送或授权路径。 - 状态镜面和气泡的任务状态数据来自现有 Task 与 Conversation 记录,不建立独立存储、不 与 Task Center 的状态定义产生分歧。 - 桌面宠物不改变现有全局快捷键、托盘菜单既有条目或主窗口默认行为。 ## 5. 产品验收 - 全新安装和已升级用户默认看不到桌面宠物;显式启用后立即出现在预期位置。 - 关闭总开关后桌面上不再有任何宠物窗口或残留提示,重新开启后恢复此前的位置和外观。 - 通过快速起草或拖放提交的内容,在主窗口对应会话的输入区中可见为未发送草稿,用户需要 自行确认发送;关闭 GoodBuddy 或取消草稿不会产生任何任务或消息记录。 - 状态镜面呈现的状态与 Task Center 中对应任务的状态一致;两者出现分歧即视为缺陷。 - 同一任务完成或失败事件不会同时产生宠物气泡和原生系统通知。 - 安静模式开启时不出现气泡,但状态镜面外观仍随任务状态变化。 - 键盘用户无需鼠标即可打开快速起草、查看状态并关闭弹出框。 - 中英文文案、深浅主题、多显示器和 DPI 缩放下宠物窗口位置和内容均正确显示。 ## 6. 明确限制 - 桌面宠物不提供在其自身窗口内完成整段对话或查看历史消息的能力;查看完整回复必须进入 主窗口。 - 桌面宠物不支持多实例、多角色同屏或角色之间的模拟互动。 - 透明背景效果依赖操作系统合成器;在不支持透明合成的 Linux 桌面环境下,宠物窗口可能 退化为不透明的小型窗口,具体行为见[技术设计](./technical-design.md)。