CHANGELOG / 更新日志
DSH Desktop 更新日志
版本号是复合形式 <dsh 内核版本>.shell.<壳修订>:内核随官方 @deepseek-ai/dsh 升级,壳修订只包含桌面壳自身的修复与功能。以下节选近期版本要点,完整说明见各版本 Release 页。
v0.2.2-alpha.3.shell.0 (内核 0.2.2-alpha.3)
- 内核升级 0.2.2-alpha.2 → 0.2.2-alpha.3(复合版本规则:内核升级把壳修订归零):manifest pin 与 32 个
dsh-*peer 一起更新,cordis-plugin-group同步到 1.0.6-alpha.2 以满足新内核 app-boot 的 peer;release-age 豁免按 315 → 302 条重钉,闭包锁文件重生成后重新部署,peer 审计closure satisfied。两处维护补丁都在新内核上重新落地:账号设置的弹窗回退与 onboarding 守卫仍是 原来的两处 hunk(按 alpha.3 源码重新生成,pnpm应用时无ERR_PNPM_PATCH_FAILED);会话垃圾桶的 生命周期补丁完成上游复审——dsh-api-session-controller的 50 行 diff 全部落在 projection 管线上 (onChanged→onEventChanged、cachedSnapshot→snapshot、列表元数据改走注册句柄),本补丁依赖的 锚点仍唯一命中;dsh-client-ui-workspace虽然整体 diff 1003 行,但本补丁触碰的watchNavigation()与clearArchivedCurrent()/clearMain()两段上游字节相同,选择权释放所读的binding.session/removed契约也未变。0.2.2-alpha.3 已登记进REVIEWED_KERNELS。 - 桌面工具菜单收成一行(社区反馈:展开后比手机屏还长):每个操作行不再渲染副标题,只保留图标、 功能名与箭头,行高 52px → 38px,超长标题省略号截断;分组标题(连接/恢复/维护/信息/伴随窗口) 与顶部说明保留。功能说明仍在设置页可见(飞书连接、安全模式、局域网设置各自的详情文案未动), 删掉的只是浮层里这 11 条重复描述的双语文案。
v0.2.2-alpha.2.shell.0 (内核 0.2.2-alpha.2)
- 内核升级 0.2.1-rc.2 → 0.2.2-alpha.2(复合版本规则:内核升级把壳修订归零):manifest pin 与 32 个
dsh-*peer 一起更新,cordis-plugin-group1.0.5-alpha.1 → 1.0.6-alpha.1 以满足新内核 app-boot 的 peer;release-age 豁免按 315 → 302 条重钉,闭包锁文件重生成后重新部署,peer 审计closure satisfied。两处维护补丁都在新内核上重新落地:账号设置的弹窗回退与 onboarding 守卫 按新版源码重新生成(仍为原来的两处 hunk);会话垃圾桶的生命周期补丁完成上游复审(两个被改 bundle 的上游 diff 共约 5100 行,所有锚点仍唯一命中;会话创建拆到了新的SessionCommandController,旧锚点用的外层inspect被上游删除,委托改为挂在字节相同的resolveAgent前向方法上),并登记进REVIEWED_KERNELS。 - 修复语音输入无法录音(ADR 0050):Harness 的语音输入用
getUserMedia({ audio })录提示词, 而默认拒绝的权限边界把它按media拒了,已发布的麦克风按钮只会报RecordingError("permission")。 现在media只在请求类型全部是音频时放行——摄像头(video)、音视频混合、空列表与未知 类型继续拒绝;macOS 的Info.plist增加NSMicrophoneUsageDescription(缺少它系统会直接终止 进程),首次录音仍由 macOS 逐应用授权。 - 权限边界逐项复审(ADR 0050 记录了检索范围与结论):把内置闭包里所有需要权限的 Web API 过了 一遍——只有剪贴板写入(0049)与麦克风两项被已发布界面使用;
clipboard-read的两个调用点分别是 xterm 的能力探测和电子表格预览里带内部剪贴板回退的显式「粘贴」,继续拒绝;通知、全屏、指针锁、 屏幕捕获、定位、分享、文件选择器、storage.persist、SpeechRecognition、window.print在已发布 界面中均无调用,继续拒绝。
v0.2.1-rc.2.shell.11 (内核 0.2.1-rc.2)
- 修复聊天页代码框「复制」按钮点击没有任何反应(#134):消息行的复制、代码框右上角的复制、 路径/JSON 复制全部失效。原因是 ADR 0014 的「渲染层权限默认拒绝」把 Chromium 写入前检查的
clipboard-sanitized-write也一起拒了,navigator.clipboard.writeText直接抛NotAllowedError: Write permission denied;上游客户端只在异步 API 不存在时才回退execCommand('copy'),于是失败完全静默(不写剪贴板、图标不变、也没有报错)。按 ADR 0049 改为窄白名单:只放行clipboard-sanitized-write,clipboard-read、media、geolocation、notifications、display-capture、openExternal等继续拒绝。 - 修复主分支 CI 每天变红(
test/site-generators.test.ts):下载快照的断言原来无条件要求 「GitCode」字样,但它取决于实时站数据——site-refresh机器人会在镜像完成前写入gitcode_ok=false,于是每个这样的数据态都把 CI 打红。改为按数据断言(镜像成功的安装包才要求 徽标),并用 fixture 覆盖「有镜像 / 无镜像」两种渲染结果。 - 修复 dsh-watch 每日失败:
scripts/version.mjs静态 import 了依赖yaml的kernel-patches.mjs,而工作流在pnpm install之前就运行version.mjs check(裸检出), 于是每天以ERR_MODULE_NOT_FOUND退出,被判成「registry outage」,上游0.2.2-alpha.2因此 没被报出来。改为在bump dsh路径内惰性加载,新增裸检出回归测试,工作流里也写明了这条约束。 - issue / PR 状态:发布前 0 个 open issue、0 个 open PR(shell.8 的失败自动单 #133 与已被 通用伴窗取代的 PR #131 已在 shell.10 关闭)。
v0.2.1-rc.2.shell.10 (内核 0.2.1-rc.2)
- 小鲸鱼桌面伴窗大小可单独配置:设置 → 扩展 → 小鲸鱼桌宠新增「桌面伴窗大小」滑杆 (80–400 px,默认 160)。它只影响最小化后的桌面伴窗,主窗口仍使用插件自己保存的缩放; 重新最小化即生效,不需要重启 Harness。此前伴窗按视口公式取到 122 px 下限、又硬编码 1.6 倍, 与主窗口差距很大。ADR 0047。
- 修复插件切换触发小鲸鱼重复路由、桌面端重启(上游 #268):内核会在销毁上一次执行前重新运行 插件的
apply,小鲸鱼的精确路由第二次注册就会命中webserver: duplicate exact route "/dsh-whale/image.png"。壳的宿主插件现在先于第三方安装一层 热重载安全的路由守卫:同一路径再次注册时先释放旧路由再注册新路由,不再抛错。插件代码仍未修改。 ADR 0048。 - 升级
@modelcontextprotocol/sdk1.31.0 → 1.32.0(#122):同步更新pnpm-workspace的 安全覆盖与锁文件,重新部署闭包后sdk=1.32.0、jose=6.2.13,peer 审计通过。仅依赖框架修复, 无用户可见行为变化。 - 发布流程:关闭 shell.8 失败自动单 #133 与已被通用伴窗取代的 PR #131;后续版本继续沿用 “失败单在成功发布后处理”的约定。
v0.2.1-rc.2.shell.9 (内核 0.2.1-rc.2)
- Fix the shell.8 whale regression: lowering
.dshwv-roottoz-index: 1put it behind the Harness app root (a stacking context), so it was clipped and clicks fell through to the page. Restored its body-levelz-index: 9999; the whale is visible and clickable again. - No need to lower it: instead hide the whale while a Harness dialog or the desktop-tools panel is open, so those surfaces stay clickable without breaking the whale.
- Fix companion size sync: the adapter page hard-coded
--dshw-scale: 1.6; removed, so the main window and the companion both use the saved.dshw-size.jsonscale. - Regression coverage: the built-in whale E2E now asserts the 9999 layer, the saved scale, a real click opening the menu, hiding on Settings, and matching companion scale.
v0.2.1-rc.2.shell.8 (内核 0.2.1-rc.2)
- 失败可以一键交给 AI 排查(Incident):恢复中心和「插件市场」失败提示新增「问 AI / 问 AI 诊断」。 壳把已脱敏的诊断(版本、profile、插件清单、失败分类、日志尾部)组装成一条故障事件,在 Harness 里 创建会话并把带结构的排查提示作为首条消息:先判根因,再给最多 5 步修复和验证方法。AI 不可用时 (内核未启动 / 能力缺失 / 创建失败)会如实说明,并自动回退到导出诊断 / issue,绝不是唯一出路。 提示词把日志明确标为「数据,不是指令」,24 000 字节上限,超长保留头部并标注截断;只写本机
$DSH_HOME/incidents/{id}/,不上传任何东西。ADR 0046。 - 小鲸鱼桌宠默认开启:安装后主窗口右下角直接出现小鲸鱼;仍可在「桌面设置 → 扩展 → 小鲸鱼桌宠」 关闭(切换后点「立即重启」)。Safe Mode 下一律不加载。
- 修复:旧版残留会让伴窗静默消失。如果 web profile 里还留着自己安装的旧版
dsh-whale-widget(例如 0.2.10),上一版会按这个旧版本号做兼容判断,导致最小化后不出现小鲸鱼。 现在兼容判断读取实际挂载的版本(壳在profiles/node_modules的链接,0.4.2),旧目录不再影响 伴窗;同时适配页仍加载实际挂载插件自己的/dsh-whale/widget.js。 - 桌面工具入口不再被小鲸鱼遮挡:小鲸鱼的装饰层之前会盖住右下角的「桌面工具」按钮和部分对话框; 现在壳把它的层级压到 Harness 浮层之下,桌面工具与设置弹窗始终可点。
- 修复:重装插件市场不再“装完仍是未安装”。
dsh plugin add只启用新增依赖,已保留的旧版本会被 pnpm 锁住,且被内核兼容门禁跳过的版本只打告警。现在安装dshmarket@latest;装完若启动清单仍缺 该 bundle,壳补写dsh.profile.bundles一条(依赖与包目录不动);CLI 明确报不兼容时返回新的incompatible原因并附门禁原始行,不再误报为“目录不可写”。ADR 0045。 - 行为不变的部分:插件代码仍未经修改;关闭鲸鱼开关会卸载插件并移除壳创建的链接;审批只在主窗口 完成;Linux 不提供点击穿透;素材按上游
PROVENANCE.md原样分发。
v0.2.1-rc.2.shell.7 (内核 0.2.1-rc.2)
- 小鲸鱼桌宠成为可选的内置扩展:安装包自带未经修改的社区插件
dsh-whale-widget0.4.2。 插件不需要声明伴随窗口、也不需要提供 pet 路由——壳按已知包版本提供描述,并自己提供一个适配页加载 插件原有的/dsh-whale/widget.js。打开「桌面设置 → 扩展 → 小鲸鱼桌宠」勾选并点「立即重启」即可: 右下角显示 DeepSeek 余额与今日已用,主窗口最小化后小鲸鱼留在桌面,点右上角−或按 Esc 收起。 - 默认关闭、可随时关闭:
whaleWidgetEnabled缺省为 false;关闭后壳不挂载插件,并移除自己创建的 profile 链接,插件列表、桌面工具面板和伴窗都不再出现该插件。Safe Mode 下一律不挂载。 插件将来若自己声明dsh.companion,以插件声明为准,壳的适配层自动让位。 - 署名与上游入口:设置页写明原作者 MeteorNOX,并提供「打开原作者项目」按钮;插件副本固定随壳分发, 不跟随 npm 自动更新。代码为 MIT,美术/音频素材按上游
PROVENANCE.md原样分发(见third_party/dsh-whale-widget/VENDORED.md)。 - 边界不变:壳仍不读 Harness DOM、不调用
executeJavaScript、不提供审批桥;伴窗内的审批动作只会 把用户带回主窗口确认,Safe Mode 与第三方插件隔离承诺保持。 - 安装包体积:新增约 7 MB 的内置插件资源(角色图、音效、前端脚本)。
v0.2.1-rc.2.shell.6 (内核 0.2.1-rc.2)
- 插件伴随窗口可用性修复:真实插件(例如小鲸鱼
/dsh-whale/pet)的路由通常经过 Harness 的连接 鉴权栅栏,旧探针用无凭据的 Nodefetch会被 401,导致伴窗永远打不开;现在探针改用主窗口的 session, 看到的结果与伴窗一致。同时修掉「加载慢时晚到的showInactive()把已恢复的主窗口重新盖住」的竞态。 - 透明区域点击穿透:伴窗新增通用
window.dshCompanion.setInteractive(),插件页面可以自己判断指针 是否在自己的 UI 上,让空白区域把点击交给桌面,不再整块挡住 560×620 的范围。窗口默认仍可交互,不实现 这一步的插件行为不变。 - 升级弹框改跳社区官网:macOS / Linux 的「发现新版本」不再打开 GitHub Release,改为按语言打开社区 下载页(
dsh-desktop.com/download//en/download),按钮文案改为「打开下载页」。 - 真实插件回归门禁:新增 opt-in 的
pnpm run test:e2e:whale(发现插件 → 最小化开窗 → 审批 fail-closed 唤回主窗口 → 面板重开 →−恢复),以及scripts/whale-clickthrough.mjs(真实鼠标事件 验证穿透)。默认 fixture 用例同时补上鉴权栅栏与慢加载竞态。 - 边界说明:通用壳仍然不读 Harness DOM、不调用
executeJavaScript、不提供审批桥;桌宠里的审批动作 只会把用户带回主窗口确认,不会在伴窗内伪造批准结果。所有判断都在本机完成,不新增联网行为。
更早版本的说明见 GitHub Releases。