# DSH Recap 设计 ## 定位与边界 帮助恢复当前会话的工作上下文:正在做什么、已有进展、当前停在哪里,以及有依据的下一步。 回顾显示为聊天区域内的 `›recap ·` 文字;默认目标约 160 字符,预览最多三行,支持展开全文。 - 只处理已加载的主会话,不扫描冷会话,不做跨会话记忆。 - 默认不修改主模型上下文,不注册模型工具,不执行摘要中的操作。 - 历史错误只表示曾发生;计划不能当成已完成工作,未记录的下一步不编造。 - 自动任务不阻塞主 Agent;辅助模型请求仍共享服务商额度与限流。 ## 模块与数据流 ```text 已提交事件 → 有界投影 → 事实 ↓ 手动命令 / 可见会话闲置 → 调度与取消 ↓ 模型摘要 / 失败提示 ↓ 内存缓存 → 单一聊天文字展示 ``` | 层 | 职责 | | ------------ | ----------------------------------------------------- | | `src/core` | 无 Harness 依赖的事实整理、配置、文本处理、任务与缓存 | | `src/host` | 原生命令、会话投影、模型调用、认证 HTTP 和设置接入 | | `src/client` | 回顾文字、设置页、页面状态上报和可取消请求 | 通过 `sessionProjections` 派生有界的近期可见文本、错误、轮次和文件事件,不扫描完整日志计算界面数据。目标、待办、标题来自对应原生服务,缺失时留空。不再额外收集文件变更列表;客户端仅接收摘要与必要状态,不展示原始消息、统计或详情面板。 ## 生成与生命周期 只有两个入口:主动 `/recap`,以及当前可见会话闲置,默认阈值 3 分钟。新建、打开、切换、离开、压缩和每轮结束不触发生成。设置定义与范围见[配置说明](配置说明.md)。 自动触发要求至少 3 个有内容的完成轮次、主 Agent 空闲且当前会话仍可见。主 Agent 完成本轮后重新计时;键盘、点击和滚动重置计时,普通心跳不重置。 - 同会话合并请求,跨会话限制并发;手动任务优先,合并到尚未执行的自动任务时提升其队列优先级,不重启正在生成的任务。等待队列有上限,同优先级保持请求顺序。 - 手动命令只等待调度受理,不等待模型生成;原生命令成功返回后由 Harness 清空输入。生成由插件生命周期管理,通过状态接口更新回顾,不操作输入框。受理成功与生成完成分别表达。 - 多标签页按独立标识、递增序号和 Host 时间合并,失联租约到期视为不可见。最后一个可见页面离开时取消自动任务,但已生成回顾不因失焦或租约过期而隐藏;刷新或关闭只隐藏该页面的旧展示;开始新一轮清除会话展示。页面身份与展示水位分离,超过心跳租约的后台页面也不被另一个页面关闭清除。 - 新轮次、内容配置或语言变化、暂停、会话销毁和卸载使旧任务失效;迟到结果不能覆盖新状态。 - 模型生成一两句短文,聚焦任务、进展和有依据的下一步。超时、空输出、不完整流或失败时保留旧摘要,显示安全的失败原因及重试入口;没有旧摘要时不拼接原始消息。旧 deterministic 配置仅提取结构化目标/待办,设置中明确显示兼容模式并提供切换按钮。 - 缓存有会话数和轮次边界,默认轮次窗口为 0,资料变化后在下一次符合条件的闲置期间重新生成。资料相同不重复生成;手动 refresh 跳过缓存。打开时不重现旧回顾,刷新后的页面再次闲置也不重现同一份旧缓存;手动请求或新材料生成可重新展示。可选轮次窗口复用较早回顾时,保留原始资料轮次及过期标记,只更新展示轮次并标记「较早回顾」;过期资料不会注入主模型。 - `/recap hide` 暂停当前会话实例的自动回顾,手动请求恢复;暂停状态不因缓存淘汰而丢失。 ## 展示与 Harness 接入 目标版本为 **0.2.0-rc.2**。Client 通过 ModuleLoader 使用宿主 React,注册四个官方插槽: - `conversation.chat.commandview` 的 `recap` 键:当前轮次之后的最新回顾命令展示摘要,在 Compact 后执行即排在它下方;帮助、设置、暂停及错误提示仅展示最新一次命令。 - `conversation.chat.turnTail`:没有当前轮次之后的回顾命令时承载自动回顾,避免重复展示。SDK 尚未提供整个聊天记录的底部插槽,自动回顾仍在轮次尾部;不为位置新增 session event。 - 图标、字号变量和行距对齐原生 Compact。关闭命令时注销注册,最多一秒同步到命令发现服务;重新开启只注册一次。 - `settings.section`:原生设置页。 - `conversation.input.dock`:仅为空白会话显示最新命令反馈及设置弹窗;正常会话返回空,不承担摘要展示。 重复请求合并进行中的任务或复用相同资料的结果,强制刷新替换当前摘要。命令历史只记录确认与状态,不保留摘要正文副本。输入框区域不展示回顾摘要;后台加载或连接错误不显示占位提示。展开只展示同一份摘要全文,没有额外元数据。 设置保存队列由插件持有,关闭面板后继续提交,重开保留草稿与失败提示。设置修改后自动保存,连续输入合并为一次请求,标题右侧显示保存状态。请求期间可以继续修改,后续修改使用最新 revision 串行保存。无效数值不提交;revision 冲突时保留本地草稿并停止自动保存,重新读取后保留草稿,由用户确认重试保存。恢复默认设置也自动保存。语言切换不重新注册设置页,保留草稿和正在进行的保存。 设置页不展示生成方式和手填服务商路由。回顾模型默认跟随会话,也可从 Harness 已配置的模型中选择独立模型。默认输出预算 512 tokens、最近 12 条消息、输入素材 6000 字符、回顾 160 字符。 命令使用 `commands.register`;轮次生命周期通过 `session/event` 接入。HTTP 使用 `connection.fetch.register` 的认证与 Host/Origin 校验。设置通过 volatile 配置保存,携带 revision 防止并发覆盖;唯一字段定义同时驱动验证、表单和配置说明。旧版已移除的触发字段兼容读取并忽略。 ## 隐私与模型 路由按显式 provider/model、会话待生效的模型选择、会话最近请求配置、Agent 配置的顺序选择。素材排除思考过程、图片、工具参数和成功工具的大段输出;输入和输出做基础凭据模式脱敏,无法保证删除全部私人信息。 纯事实模式不调用模型。缓存仅在内存中,Harness 原生命令历史与投影检查点仍可能持久化。可选注入使用合法 notice,记录摘要标识避免重复注入或再次收集,默认关闭。 验证方法和当前边界见[验证说明](验证说明.md)。 调度设置修改不清除已显示摘要或缓存。内容/路由设置修改取消旧任务、保留摘要并标记较早回顾,下次请求重新生成。`status` 只查询状态,`hide` 隐藏并暂停,手动请求恢复。 `/recap settings` 直接打开原生 HTML dialog,复用同一 Settings 组件和保存队列;历史记录加载时不自动弹出。SDK 没有打开指定原生设置分区的公共服务,也没有整个聊天末尾/Compact 之后的公共插槽,不能承诺统一底部位置。 「包含文件路径」设置已移除,旧布尔字段兼容忽略;不再读取或发送独立文件列表。近期消息可能含路径/敏感信息,设置页明确说明。高级参数默认折叠。目标长度作为提示词约束,不按 160 字符硬截断模型回答;超过三行显示展开按钮,超过 8000 字符安全上限报错而非发布残句。