# dsh-hub 功能清单(FUNCTIONS) > 当前版本:`0.1.6`(dev-v2,Tauri 2.x 壳 + dsh web 插件层,dsh 0.1.2-rc.1 适配 + composer 模型 seat 修复)。基线对照:官方 dsh(deepseek-harness)。更新:2026-09-06(composer 模型 seat 与 inline 思考强度声明修复)。 > 本清单收录 **dsh-hub 相对官方 dsh 新增/改变的全部功能**,分门别类,每项带【来源】(PR 号 / 版本)与【测试状态】。 > 测试状态标记:✅ = 真机或隔离环境实测通过 · 🔶 = 代码就绪、未系统真机验证 · ⚠️ = 部分/待收口 · ➖ = 历史(dev-v1 WebView2 时代,Tauri 后不适用)。 > 更新:2026-09-06 · 依据全量 PR 清点(#1–#51)+ 源码盘点。 --- ## A. 壳层与窗口 | # | 功能 | 描述 | 来源 | 测试 | |---|------|------|------|------| | A1 | 原生窗口承载 dsh SPA | 无边框 Tauri 窗口;webserver ACTIVE 即开窗(占位页先显示),READY 验证后再导航到 dsh web,不弹浏览器 | rc.1+ | ✅ | | A2 | 品牌化 Splash | 启动覆盖层(鲸鱼 logo + spinner + 主题色),盖住 SPA 首绘,load 或 3s 后淡出,无白/黑闪 | — | ✅ | | A3 | 窗口状态记忆 | 最大化状态持久化;退出最大化恢复保存尺寸或 3/4 屏;最小 480×360;**0.1.6 修复**:boot applySize 不再无条件退最大化(allowUnmaximize 语义分流,最大化优先于配置尺寸) | 0.1.6 | ✅ | | A4 | **分辨率与多屏策略** | 无保存尺寸时按**光标所在显示器**取 3/4 屏(multi-monitor aware);窗口尺寸钳制到所在屏;`window-size scaling`(DPI 缩放适配,PR #6 一并落地) | PR #6 | 🔶 单屏实测、多屏组合未系统测 | | A5 | 关闭/最小化到托盘 | closeToTray 关窗保进程;minimizeToTray 最小化即隐藏;实时读配置 | — | ✅ | | A6 | 标题栏主题跟随/强制 | `system` 监听页面深浅切换(DWM immersive dark + webview 背景 + 窗口图标翻转,MutationObserver);可强制浅/深(按当前皮肤色板解析) | — | ✅ | | A7 | 设置实时应用 | 主题/尺寸保存后 DSH_CMD 上行即时应用;0.1.6 起尺寸语义分流:boot 同步(allowUnmaximize=false)最大化优先跳过;手动保存(默认 true)保持 unmaximize-first | 0.1.6 | ✅ | | A8 | 壳内 HTML5 拖放恢复 | `disable_drag_drop_handler` 撤掉 wry 文件专用 IDropTarget 覆盖——页内 HTML5 拖拽(工作区/会话行排序、标签排序)在壳内恢复浏览器同款行为 | rc.17 | ✅ 工作区行实测;会话行/标签排序 🔶 | | A9 | Files 拖放兜底 | document capture 阶段对 Files 拖放 preventDefault:拖文件到输入区 = 官方附件上传;其他区域/空窗期安全忽略(杜绝 file:// 导航) | rc.17 | 🔶 行为变化未真机全面回归 | | A10 | 拖拽状态守卫 | watchdog 合成 dragend 自愈官方拖拽状态卡死 + 拖拽中收缩置顶区 + 拖拽中挂起置顶刷新 | rc.17 | ✅ 合成链实测 | ## B. 标题栏与会话标签 | # | 功能 | 描述 | 来源 | 测试 | |---|------|------|------|------| | B1 | 自绘标题栏 | 42px 标题栏(皮肤 token 配色 + 深浅跟随)+ 可拖窗口区 + 最小化/最大化/关闭 | — | ✅ | | B2 | 会话标签栏 | 标题栏内多页会话切换:状态点(等待琥珀/后台完成绿/运行蓝+脉冲)、右键菜单(复用会话菜单)、拖拽排序、内联重命名、自动滚动、归档自动移除;localStorage 持久化;F1-F8 边角(空快照不剪枝/blank 占位/blur 兜底/IME 不误提交) | PR #39/#40/#41 | ✅ 切换/重命名/状态点;拖拽排序 🔶(修复前 DnD 全灭,未真机复测) | ## C. 左侧栏增强 | # | 功能 | 描述 | 来源 | 测试 | |---|------|------|------|------| | C1 | 置顶会话 | hover 注入 pin 按钮;内容匹配行→会话 id(同名取最近 updatedAt);置顶区为树兄弟节点(40vh 滚动块);搜索态隐藏 | PR #4 | ✅ | | C2 | 置顶持久化 | `pins.json` 原子写 + localStorage 兜底;ready 门控/boot 合并/连缺 2 次剪枝/MAX 200 | PR #4 | ✅ | | C3 | 会话右键菜单(11 动作) | 打开会话、置顶/取消、重命名(内嵌表单)、分叉 fork、归档、在资源管理器打开、复制工作区路径/日志路径/会话 ID、打开配置文件 | PR #27 | ✅ | | C4 | 工作区右键菜单 | 工作区行右键 = 新建任务 / 在资源管理器打开(替代原生刷新菜单) | — | ✅ | | C5 | 拖拽排序守卫 | 工作区行拖拽排序的 watchdog 兜底 + 拖拽中置顶区收缩(见 A10) | rc.17 | ✅ | ## D. 对话与输入 | # | 功能 | 描述 | 来源 | 测试 | |---|------|------|------|------| | D1 | 对话定位条(rail) | 对话列左侧 20px 悬浮条:每轮对话一根可点击刻度,点击滚动定位到该轮;hover 显示该轮开场文本预览(时间窗真实 kind:user/steering/context/assistant/command/compaction) | PR #27/#35 | 🔶 点击跳转实测;hover 预览未系统回归 | | D2 | rail 自适应配色 | 刻度条配色按当前皮肤/背景图自动推导(per-skin/background 调色板,非两套固定色);皮肤/背景切换自动重读 | PR #30 | 🔶 抽查个别皮肤 | | D3 | 模型嵌套菜单 | composer 模型 seat 替换为 provider→model 两级菜单(官方 slot `conversation.input.model` priority -1 阴影;**0.1.6 起**采用 scoped `ctx.inject` 等待 `modelDirectories` 服务就绪后注册,服务缺失仍降级内置 seat,不 PENDING 整个插件) | PR #33 | ✅ 注册链 0.1.2-rc.1 验证 | | D4 | 权限策略 chip | 会话左下角(官方权限 chip 旁)快捷切换 dsh-permission-guard 档位,带档位色点(蓝=跟随/橙=严格/绿=只读) | rc.14 | 🔶 | | D5 | 右键菜单语义 | WebView2 原生右键禁用,DOM 全量接管,四层优先级:对象行→专属菜单;对话文本选中→复制菜单(复制/添加到任务/辅助对话);链接→链接菜单(浏览器打开/复制地址);输入框→编辑菜单(撤销/重做/剪切/复制/粘贴/删除/全选);空白→刷新菜单。链接左键→默认浏览器打开(`open_url` Tauri 命令);全量 zh/en i18n | v0.2.0 | ✅ | ## E. 外观系统 | # | 功能 | 描述 | 来源 | 测试 | |---|------|------|------|------| | E1 | 皮肤系统(15 套) | 内置 5 自绘(午夜蓝/旧纸张/终端绿/ZCode/极光紫)+ Reasonix 官方主题直移 8(rx-*)+ opencode 配方 2(oc-*);全部覆盖 `--dsw-alias-*`+`--dsw-specific-*`,浅深双色板跟随主题;150ms 切换过渡;每套文档 docs/skins/ | PR #3 | ✅ 切换链实测;15×浅深全矩阵 🔶 | | E2 | 背景图 | 内置 3 张(远航/八犬/DS-vs-GPT);frame 层双层蒙版+图,三栏半透明透出;none 清空;防路径穿越白名单 | PR #6 | ✅(与皮肤组合的透明误伤 #96 已修) | | E3 | 桌面图标六面同步 | 设置卡选 5 鲸鱼娘/默认;窗口大图标/任务栏/托盘/开始菜单 lnk/桌面 lnk/自绘标题栏六面统一编排(幂等 + 快速切换合并);深浅翻转 | PR #25 | ✅ | | E4 | 主题浅/深强制 | 见 A6(外观侧:按皮肤色板解析 chrome 色) | — | ✅ | | E5 | 分辨率/DPI 适配 | 见 A4(窗口尺寸缩放、多屏 3/4 策略、DPI 修复) | PR #6 | 🔶 | ## F. 设置中心 | # | 功能 | 描述 | 来源 | 测试 | |---|------|------|------|------| | F1 | DSH HUB 设置页(一级) | 0.1.2 起迁移为官方设置对话框的一等页面(`settings.section` id=`dsh-hub` order=25,位于 Agent 预设与用量统计之间);0.1.3 改为官方插件页风格三张独立下拉卡片(分辨率/常规设置/外观设置,默认折叠)——窗口尺寸/主题/托盘/通知/声音/多实例/皮肤画廊/背景图/桌面图标;权限策略单列;仅提交变更字段 + saveSeq 防旧响应覆盖 | 0.1.2/0.1.3 | ✅ | | F2 | 权限策略档位(设置页) | 「权限策略」区三档 Menu:follow(跟随会话官方预设)/strict(始终白名单)/read-only(只读放行);即时保存到插件路由 | rc.14 | 🔶 切换实测、真实拦截效果未会话内验证 | ## G. 托盘与通知声音 | # | 功能 | 描述 | 来源 | 测试 | |---|------|------|------|------| | G1 | 常驻托盘 | 菜单:显示/隐藏主界面(动态标签)/打开工作区/新建会话/退出;左键单击显示 | — | ✅ | | G2 | 托盘打开工作区 | 打开当前聚焦会话所在工作区目录 | — | ✅ | | G3 | 托盘新建会话 | 派发官方 `workspaces.startSession()`(SPA 未就绪 300ms×20 重试不丢命令) | — | ✅ | | G4 | 托盘退出 | 写 quit.marker 正常退出,不误判崩溃重启 | — | ✅ | | G5 | 任务完成 Toast | depth-0 会话完成/出错弹原生通知(30s 冷却、聚焦抑制);**点击回窗口并跳到对应会话** | PR #1 | ✅ 弹窗;点击跳转 🔶 | | G6 | 四段事件提示音 | 提问/完成/需批准/出错独立开关;原创合成 WAV;隐藏到托盘仍可闻 | PR #1 | 🔶 真机听感未系统回归 | ## H. 交互终端 | # | 功能 | 描述 | 来源 | 测试 | |---|------|------|------|------| | H1 | 交互终端 dock | Ctrl+J 开关底部 dock;每 tab 一个真实 node-pty 会话;多 tab;指针捕获拖拽调高;composer 列压缩 | PR #39/#40 | ✅ | | H2 | 自定义 Shell | bash / cmd / PowerShell 5.1 / pwsh 可选,先探测可用性、未安装不列出;默认 shell 持久化 | PR #40 | ✅ | | H3 | 终端安全 | SSE JSON 信封 + Bearer/`?token=` 常量时间比较 + Host/Origin 白名单;危险命令 UX 护栏 | rc.8 | ✅ | ## I. 独立插件与 composer 扩展 | # | 插件 | 描述 | 来源 | 测试 | |---|------|------|------|------| | I1 | dsh-usage-stats | 全会话 token 用量统计:扫描全部会话日志按 provider/model/天聚合,设置页可视化(汇总/各模型卡片/按天表格/趋势图/单价与费用估算/汇率),HTTP API(overview/prices,后台预热 + stale-while-revalidate) | PR #34 | ✅(#95/#96 修复后全链实测) | | I2 | dsh-permission-guard | 逐命令权限白名单 + 四级拦截(auto/give-command/confirm/never)+ **policy 档位**(follow 联动会话官方预设:Full Access 只留 never 红线;read-only;strict)+ HTTP 路由 + systemPrompt 指南 | PR #37 | 🔶 决策矩阵模拟验证;真机会话拦截 🔶 | | I3 | dsh-project-memory | 每项目持久记忆(FACT.md + JOURNAL.jsonl 自动注入 systemPrompt.context)+ `memory_read`/`memory_log`/`memory_fact` 工具 | PR #36 | 🔶 | | I4 | dsh-findings-ledger | baseline 快照 + 变更对账 + 覆盖度报告(turn/end 自动出报告) | PR #38 | 🔶 | | I5 | composer inline 思考强度声明 | 自定义模型无 Host reasoning 元数据时,在默认 composer 模型选择 seat 的「思考强度」面板内声明标准档位;写入官方 `llm-pi-ai` settings namespace 后由 Host catalog 返回正式 efforts,仍通过共享 `modelDirectories.select` 提交;不新增设置页、不单独分发插件 | 0.1.6 | 🔶 门禁通过;真机 composer 交互待验证 | ## J. 工作区与会话数据 | # | 功能 | 描述 | 来源 | 测试 | |---|------|------|------|------| | J1 | 活动 cwd 追踪 | session/event + agent/created 维护 activeCwd 兜底 | — | ✅ | | J2 | 工作区 API | `/workspace/list`(目录列表)+ `/git`(分支/变更)+ `/workspace/open`(OS 默认打开,explorer.exe) | rc.4+ | ✅ | | J3 | 会话预热 | 启动 8s 后台预热最近 3 会话到 LRU(长会话冷开 2057ms→225ms,约 9×);关闭会话重预热 | PR #51 | ✅ 日志验证 | ## K. 启动·安装·安全 | # | 功能 | 描述 | 来源 | 测试 | |---|------|------|------|------| | K1 | 启动门控 | 仅壳启动(DSH_HUB_LAUNCHED=1)装配插件;裸 `dsh web` 完全干净 | — | ✅ | | K2 | 单实例 | tauri-plugin-single-instance:二次启动聚焦已有窗口 | — | ✅ | | K3 | 多实例防护 | 检测运行中 dsh 实例,默认拒绝;勾选多实例后仍需确认;dev+隔离 home 豁免 | — | ✅ | | K4 | 崩溃自动重启 | 非 0 退出且无 quit.marker:≤3 次重启(1.2s 间隔)+ READY 后 re-navigate | — | 🔶 接线确认,未真机演练 | | K5 | 装配自愈 | scoped bundle 注册/junction 校验重指/bare 遗留清理;dsh 缺失走 npm 安装路径,运行期缺失回退临时页 | — | ⚠️ | | K6 | NSIS 安装器 | 安装完成页可选桌面快捷方式(仅安装时创建);卸载快速通道 + sidecar 强杀;Job Object 随壳清理 | — | ✅ | | K7 | S0 安全 | Host 白名单(loopback)+ Origin 校验(POST/PUT)+ per-process token | — | ✅ | | K8 | AppUserModelID | 注册表 + 快捷方式 AUMID,任务栏归属/Toast 正常 | — | ✅ | ## 自动更新(M5) **未实现**——唯一剩余的大项(NSIS/卸载/防残留已闭环)。更新器需要 updater 插件 + 签名密钥 + 更新服务器,待立项。 --- ## 附:PR 清点对照(@dustinmoon78 的 17 个 PR,#26 除外) | PR | 功能 | 落地情况 | FUNCTIONS | |----|------|----------|-----------| | #1 | 会话完成原生通知 + 构建修复 | ✅ 已落地(后经 rc.1+ 增强:点击跳会话) | G5 | | #2 | 任务栏身份/OS 主题图标/独立 WebView2 数据目录 | ✅ dev-v1 落地;Tauri 后原生身份 | K8(数据目录 ➖ 历史) | | #3 | 皮肤系统(自写色板) | ✅ 已落地并扩展到 15 套 | E1 | | #4 | 置顶会话 | ✅ 已落地(rc.10 重构 + 持久化状态机) | C1/C2 | | #6 | 背景图 + 窗口尺寸缩放 | ✅ 已落地(dev-v1 时代,Tauri 后重新实现) | E2/A4 | | #24 | cmd.exe 僵尸锁回退 + 排障文档 | ✅ 已修复并沉淀(踩坑史) | 覆盖缺口·已修复 | | #25 | 桌面图标鲸鱼娘预设 | ✅ 已落地(扩展为六面同步系统) | E3 | | #27 | 对话定位条 + 置顶内联重命名 | ✅ 已落地 | D1/C3 | | #33 | composer 模型嵌套菜单 | ✅ 已落地 | D3 | | #34 | dsh-usage-stats 插件 | ✅ 已落地 | I1 | | #35 | rail hover 开场文本预览 | ✅ 已落地(M1 数据源修复) | D1 | | #36 | dsh-project-memory 插件 | ✅ 已落地 | I3 | | #37 | dsh-permission-guard 插件 | ✅ 已落地 | I2 | | #38 | dsh-findings-ledger 插件 | ✅ 已落地 | I4 | | #39 | ZCode 式交互终端 + 会话标签条 + 工作区选择 | ✅ 已落地 | H1/B2 | | #40 | 终端/标签条/工作区/定位条/外观中心 | ✅ 已落地(外观中心即 #26 的前置,以设置卡实现) | H1/D1/F1 | | #41 | 顶部会话标签栏完整版 | ✅ 已落地 | B2 | | #26 | 设置卡统一外观中心(**OPEN,本次排除**) | 未合并;其能力已由 F1 设置卡分节实现 | —(按指示排除) | > 结论:**@dustinmoon78 提交的全部功能均已落地并收录本清单**——无遗漏项;此前 FUNCTIONS.md 缺「对话定位条(rail)本体」独立条目(只有 hover 预览与数据源修复),本次已补为 D1/D2。 --- ## 未测试功能清单(🔶/⚠️ 汇总,建议按序真机验证) 1. **会话行拖拽排序**(C 区内的会话行)——rc.17 修复后只实测了工作区行 2. **标题栏标签拖拽排序**(B2)——DnD 修复前不可能工作过,未真机复测 3. **拖文件到输入区 = 附件上传**(A9)——rc.17 新行为,未真机回归;含拖到侧栏/设置页的安全忽略 4. **权限策略三档真实拦截**(F2/I2)——rc.14 仅模拟了 guard 决策矩阵,未在真实会话验证 follow/strict/read-only 的实际放行/拦截 5. **project-memory 记忆注入**(I3)——FACT/JOURNAL 是否按预期注入 systemPrompt.context 未验证 6. **findings-ledger 会话报告**(I4)——真实多轮会话的 baseline/对账/覆盖度报告未验证 7. **rail 自适应配色全矩阵**(D2)——15 皮肤 × 浅深 × 背景图组合仅抽查 8. **多显示器/分辨率策略**(A4/E5)——3/4 屏、光标所在屏、DPI 缩放未系统测 9. **四段提示音真机回归**(G6)——含隐藏到托盘后可闻性 10. **通知点击跳会话**(G5)——真机点击链未复测 11. **崩溃自动重启演练**(K4)——强杀 sidecar 后 ≤3 次重启未真机演练 12. **标签栏拖拽排序中断恢复**(B2 F5)——拖拽中 alt-tab 后 blur 兜底未复测