# dsh-sidecar 产品规格 ## 一句话定义 从 DeepSeek Harness 正在生成或已完成的回答打开一个持久化侧边追问抽屉,不跳离、不改写、不打断主对话。 ## 目标用户 - 阅读长回答时需要解释术语、验证细节或要求举例的用户。 - 希望探索旁支问题,又不想让旁支内容污染主对话上下文的用户。 - 需要稍后回到追问结果,同时保留主线阅读位置的用户。 ## 核心任务流 1. 用户在正在生成的回答旁点击“追问当前输出”,或在已完成回答旁点击“侧边追问”。 2. 对未完成回答,插件立即冻结点击时可见的用户/助手文字;主对话后续内容不再同步到该快照。 3. 浮动追问窗口打开;仅打开不创建 Session,主对话仍保持原来的内容和滚动位置。窗口可以拖动、八向缩放并记住位置,用户可把它移开正在阅读的原文。 4. 首次发送时,已完成回答从轮次边界 fork;未完成回答创建同工作区独立空白 Session,并把冻结快照与追问作为首条提示提交。child 随即从普通对话列表隐藏。该问题的单行摘要、选中片段及其字符偏移写入锚点。 5. 选中文字固定显示在窗口顶部但不预填输入框;用户发送后立即看到生成状态和近实时增量回答。 6. 用户在窗口中继续追问;每轮由 Harness 正常持久化到该隐藏 child。 7. 回答尾部的追问入口按摘要列出该回答的全部追问(首选项显示最新摘要),选中项高亮标记当前追问;用户可据此恢复任一追问。 8. 由选区创建的追问在原文处保留黄色高亮,并作为该追问的段内入口:点击或聚焦后按 `Enter`/`Space` 即重新打开;同一段文字被多次追问时按记录偏移分别高亮,跨段落选区不注入高亮。 9. 用户关闭窗口;关闭不删除 Session。 10. 用户可新建、恢复、重命名或归档独立追问;任何内容都不会自动注入主对话。 ## MVP 范围 ### 必须有 - 已完成 Assistant 回答显示原生分叉入口与追问摘要列表;正在生成且已有可见文字的回答显示快照追问入口。 - 单个浮动追问窗口,可拖动、可八向缩放、可一键复位,位置与大小在浏览器本地持久化。 - 段落内高亮入口:选段发起的追问在原文标黄并可点击恢复,重复文字按记录偏移命中。 - 每次新追问使用独立 child Session,不在同一个窗口中共享分支。 - 创建、打开、关闭、重命名和归档追问。 - 恢复主对话滚动位置和输入草稿。 - 中文与英文界面。 - 键盘操作、焦点管理和屏幕阅读器标签。 - 明确提示对话隔离不等于工具副作用隔离。 - 持久锚点(摘要、片段、偏移)的存储、RPC 与独立恢复测试。 ### 明确不做 - 编辑或重写历史消息。 - 自动把分支合并回主对话。 - 文件系统回退、Git 合并或 worktree 管理。 - 通用 Session 版本树。 - 同时打开多个抽屉。 - 移动端专属布局。 ## 行为不变量 - 创建分支不会修改父 Session 的事件日志。 - 抽屉关闭不会删除或截断子 Session;列表隐藏发生在 child 创建阶段。 - sidecar 中的提示词只发送给 sidecar Session。 - 主对话输入草稿不得被 sidecar 输入覆盖。 - 原生分叉锚点必须落在已完成轮次边界;流式快照锚点记录源 turn,并在该 turn 完成后关联回原回答。 - 流式快照创建后与主对话完全独立,不再同步后续输出。 - 段内高亮只包装既有文本节点,不新增、不删除、不改写回答文本;跨段落选区不注入高亮;宿主重渲染或插件卸载后必须还原原文 DOM。 - 追问窗口只影响插件自身的浮层,不改变主对话的布局与滚动位置;几何越界时收敛到视口内。 - 追问摘要取自该追问的首个问题;同一追问后续问题不覆盖摘要。 - 任何失败都不得静默创建重复分支。 - 卸载插件后,已创建的 child Session 日志仍由 Harness 持久保存,可从归档数据中读取。 ## 工具副作用边界 当前 Harness `0.1.0-rc.6` 没有向插件公开逐 Session 的 preset/filter 接口,因此本 Beta 只保证对话记录隔离,不承诺工具副作用隔离。README 必须持续明确这一边界;如果后续官方公开逐 Session 能力过滤,再单独设计默认只读模式。 ## 成功指标 - 从点击入口到抽屉可输入的中位时间小于 500ms(不含首次模型响应)。 - 关闭再打开后,分支内容恢复成功率 100%。 - 创建或使用 sidecar 后,父 Session 事件数量保持不变。 - 单元与轻量集成测试覆盖持久恢复、失败重试、多分支和归档边界。 - 发布前在资源可控的隔离环境完成刷新、重启与浏览器端到端验收。 - 安装后无需手工编辑 `cordis.yml`。