Releases: realguan/dsh-dock
Releases · realguan/dsh-dock
Release list
v1.3.1
[v1.3.1] - 2026-09-21
🌟 核心亮点 (Highlights)
- Linux 上不再「启动即崩」:托盘依赖缺失的发行版此前会在启动时直接退出,现在照常启动——只是没有托盘图标,日志里会给出补齐命令。
- 关掉工作台窗口后,想回来就能回来:关窗改为「隐藏」而不是退出——工作台继续在后台跑,托盘 / 菜单栏 / Dock 图标都能一键唤回。
🐛 缺陷修复 (Bug Fixes)
- Linux 缺托盘依赖库时启动即崩:该依赖此前只在运行时才暴露,缺库直接终止进程、界面上什么都看不到。现在建托盘前先探测:缺库就跳过托盘、应用正常启动,并在日志里给出对应发行版的安装命令;
.deb/.rpm也把该库声明为推荐依赖(apt/dnf默认会装上,仓库里没有也不阻断安装)。 - 关窗后「返回工作台」毫无响应:主窗口被关闭(销毁)后,控制台的「返回工作台」、托盘左键、二次启动唤起全部静默落空,旧实现连日志都不留。现在关窗 = 隐藏(窗口与工作台进程都保留),并在 macOS 菜单栏与托盘右键各加一项「显示工作台」;macOS 点 Dock 图标同样唤回。真正退出请用托盘 / 菜单栏的「退出」。
- 窗口唤起不可靠:即便窗口仍在,原先「显示 → 取消最小化 → 聚焦」的顺序在 macOS 上会因系统守卫判定而整体失效(窗口停在 Dock 或别的桌面,看起来像没反应)。现改为「先取消最小化 → 再显示 → 再聚焦」,并补一次延迟聚焦。
- 运行日志取错来源 / 读不出内容:「运行日志」里的 dsh 日志此前指向一个从未被写入的文件(永远显示"暂未生成");在 WSL 模式下还会读到宿主机的日志。现在按运行模式正确取源,并支持 UTF-16LE 编码的日志(此前会整段读取失败)。
- 凭据权限说明与实际不符(Windows):「已安全保存(权限 0600)」此前对所有平台都这么写,而该权限收紧只在 Unix 生效。现在文案与文档如实区分:Unix 为 0600,Windows 依赖用户配置目录的默认权限。
💅 交互与文案 (Improvements)
- 「全局快捷键」更正为应用内快捷键(窗口需在前台才生效),与实际行为一致。
- README 补充 Windows 首次打开的 SmartScreen 提示,并说明自动更新使用本项目自己的签名校验、不受影响。
⚠️ 已知限制
- 沉浸式窗口仍是 macOS 专属:Windows / Linux 保持系统原生标题栏。
- WSL 客体模式下,安全模式、MCP 能力探测、官方插件挂载行的增删、实验能力目录暂不可用(均明确报错并给出替代路径,不会悄悄按本地处理)。
- Windows 安装包未做代码签名,首次运行可能提示「未知发布者」。
- Linux 托盘图标需要
libayatana-appindicator3(.deb/.rpm已声明为推荐依赖)。 - Windows ARM64 经系统仿真运行,其余架构可参照 CONTRIBUTING 从源码构建。
- 插件启动失败时的标题与建议在英文界面下仍是中文;插件名的中文辅助名只覆盖官方与高频插件。
v1.3.0
[v1.3.0] - 2026-09-21
🌟 核心亮点 (Highlights)
- 插件模块整轮重做:插件列表 / 实验能力 / 插件中心三处的信息层级与命名规则统一收敛——「实验能力」是实验性插件的唯一操作入口(插件列表只如实列出装了哪些包),名字一律「插件原本的名字 + 中文为辅」,解释性长句收进 ⓘ。
- 沉浸式标题栏(macOS):主窗口与官方 dsh 桌面客户端对齐——红绿灯浮在内容左上角并与侧边栏控件同一水平线、侧边栏毛玻璃材质,不再是"原生标题栏 + 网页"两层皮。
✨ 新增功能 (Features)
- 沉浸式标题栏与红绿灯落位(ADR-0029,macOS):主窗口改用隐藏标题栏 + Sidebar 材质 vibrancy;红绿灯按官方 Electron 客户端的同款几何落位(52px 容器内垂直居中,与侧边栏收起按钮同一水平线),窗口缩放/切焦后自动重放落位不弹回。补打平台标记(
data-platform/ Windows 标题栏高度变量)并映射app-region计算样式,让页面自己的顶栏兼任拖拽区。Windows / Linux 保持原有原生装饰标题栏。 - MCP 服务器「生效范围」两层(ADR-0027):一条 MCP 配置写在 profile 层(只对这个 Profile 生效)还是
$DSH_HOME全局层(所有 Profile 都加载)由界面明确说出并可就地切换;跨层重名(两条都会插入、后加载的那条会实例化失败)与同层重名分别如实标注加载序,不再留下"看起来配好了其实起不来"的坑。密钥类值默认打码,!!js表达式行只允许启用/停用(结构化保存会把它展平成字面量,等于悄悄销毁密钥引用)。 - YAML 编辑面(CodeMirror 6):Patch YAML 页从"只读 pre"升级为带行号 / 折叠 / 高亮 / ⌘F 查找的编辑器,查看与编辑同一套。
- 添加插件:一个入口三条路径:工具栏只剩「添加插件」——弹窗里是市场选购 / 从其他导入 / 自定义 npm spec 三条路径(旧版四个按钮里三个通同一个面板,是入口冲突)。
- 插件市场数据缓存:市场 registry 收成单例(带并发去重与失效),在「插件中心 → 市场」与「添加插件」弹窗之间来回切换不再每次重新拉取。
- 实验能力:dsh 已经自带的,dsh-dock 不再代管(配合 dsh 0.1.6 把 Agent Teams 作为随安装包下发的官方实验功能):这类能力在面板里不出现(官方插件页托管),启用后其层按内置层如实列在插件列表(没有开关、不安装、不卸载)。
- 实验能力模块(控制中心 → Profile 详情 → 实验能力):一能力一张卡片、单栏手风琴(收起态一屏看全四项,展开看后端对照与前置;同一时刻只展开一张)。每张卡给"扫一眼就要知道"的:能力名、状态、当前由哪个插件提供、开关;展开后按后端列出各档(该档独有的包在前,多档共用的基座包与共同前置只写一次),就地换档(与开关同一条启用链,该确认的确认)。关 = 行级
disabled(不卸载、秒级可逆),含 profile 层的变体因带副作用改走「移除」。 - 插件安装源策略(偏好设置 → 插件安装源):三态
auto / 官方 / 跟随本机配置。auto先按上次成功的源安装,失败后换另一个源重试一次,成功才记忆;两个源都失败时两侧错误都报。 - 启动失败的兜底与错误卡改版:启动失败先分清"能救"与"救不了"——给可执行动作与它会带来什么影响,细节默认收起(首屏只有一个修复类按钮);插件行导致的失败可一键进安全模式。
- MCP 服务器能力探测:对某台服务器点「探测」,行内出折叠卡——成功给出 Tools / Resources / Templates 计数与清单(含工具描述、资源 URI),失败恒展开并原样显示原因;
stdio与streamable-http两种传输各自支持,兼容单条 JSON / 批量数组 / NDJSON / SSE 四种响应形态。 - 已归档会话「取消归档」:走 Host RPC 取消归档(不再需要手工改文件);无活跃 Host 时如实报错,不碰磁盘。
🛠️ 体验与交互优化 (Improvements)
- 插件列表:先看"我装的":进页面默认落在社区档;三类筛选(社区 / 内置 / 实验性)与行内标记同名同源,撤掉冗余的「全部」芯片(再点一次已选芯片即回到全部);空列表一定给出路(「显示全部 N 个插件」)。
- 不再"闪一下全部插件":类别判定同时依赖行表 / 行态 / 层栈 / 能力目录四条取数链,旧版只等第一条就开始渲染,于是先把实验包与内置层降级成社区铺了一屏再收敛。现在四条链都落定(成功或失败)才渲染行。
- 插件名:原本的名字打头,中文为辅:主标题是插件自己的包名(实验性那一族去掉
dsh-experimental-这类共有噪音段),中文名以小字跟在后面(查不到就不给——不用机器音译冒充);完整包名始终留在悬停里。 - 已经按类筛过,就不再逐行复述类名:社区档里不写「社区」、内置档里不写「内置」、实验性档里不写「实验性」;"全部"视图下标记照旧全给(那时它是区分依据)。
- 实验性行只读平铺 + 唯一入口:实验性插件在插件列表里与社区行同构(一个包一行)、零控制面,列表顶部一行提示 + 一个「前往实验能力」按钮指向唯一操作入口——不再有"同一能力两个开关"的第二套控制面。
- 描述性信息收进 ⓘ:模块说明、能力简介与"开启后会怎样"、每个后端的一句话说明,都从正文收成一颗小图标;展开体只剩"要动手才需要"的东西(后端对照、前置、恢复/移除)。
- 拿走两块占位内容:底座区的标题栏与折叠("内置"已由筛选档说明,行内零控制面本身就说明不可变更)、内置层的「内置核心(随 DSH)」版本徽标(没有独立版本可读,纯占位)——底座行现在只有包名、中文名与一句说明。
- 图标说它本来的意思:表示"实验性"的图标由 ✨ 换成烧瓶(✨ 的语义是"魔法/新奇")。
- 「实现细节(排障用)」整节退役:逐包安装状态 / 激活方式 / 包自带简介 / 未钉版本提示不再单列一节——排障现场已有更准的两处(进度导轨与失败块)。
- 插件中心与已安装总览:已安装卡片的插件名格式与市场卡片统一(去 scope,同一个插件在两个子页里是同一个名字);分类筛选项与市场页的分类矩阵同源同序(同一个函数产出本地化标签 + 计数)。
- profile 未物化时如实说:还没建目录的内置模板名(web / headless)不再弹出原始系统错误,而是「这个 Profile 尚未物化」+ 唯一出路「启动」。
- 插件行状态说清「谁在说话」:配置侧徽标「已禁用」与运行侧徽标彻底分开——运行时是
运行中 / 加载中 / 失败 / 未加载(配置启用但本次会话没有实例)/ 未生效(会话里这行仍是禁用),每种都带一句悬停解释;"没到位"的状态不再被画成绿色。 - 开关后自动追平:拨动开关后该行先显示「生效中」,随后自己变成实际状态,不再需要切标签页;Toast 按观测结果说话(
已生效/重启该 Profile 后生效/ 观测不到时只说配置已写入)。 - 安全模式横幅:只在"确实以安全模式进入过"时出现,说明"停用了多少个"并指路「插件」页,右侧一个 X 可关闭;关掉后同一轮不再打扰,下次再以安全模式进入会重新提示。
- 解释性文案统一收进悬浮:长说明不再平铺(MCP 表单曾一次弹出 7 段说明),结论留在表面、原因挂悬浮,且悬浮触发器是键盘可达的按钮。
- 字号与版面收口(审美批次):建立字号阶梯与字重规范、动作用色统一、导航层级靠"整宽等分"而非"更大更亮"区分;
@themetoken 与硬编码色值都有闸门。 - 官方目录安装 / 卸载接入「下载管理」:安装与卸载都进队列、可等待结果,不再各自维护一套进度。
🐛 缺陷修复 (Bug Fixes)
- 装了实验插件后 dsh 再也起不来(三个真因一并修):浏览器族 MCP 的
config.mode必填却漏写 → 整棵插件树拒绝加载;cua-driver-mcp缺外部可执行文件 → 同类失败;壳的停滞判定在 dsh 开口前就杀进程 → 日志 0 字节、诊断台无从下手。现在行载荷单源生成、坏行可就地补齐、缺前置时前后端各自拒绝写行,并把停滞宽限放宽(进程自退即判退出)。 - 回环调用静默失效(401):dsh 0.1.6 的
/api在 Host 栅栏之外还有一道会话鉴权,缺签名 Cookie 一律 401——此前运行态徽标、MCP 探测、取消归档都在静默哑火。现于启动期兑换 Cookie 并在壳内回环附头。 - 进插件列表先闪一屏"全部插件":见上"不再闪"一条。
- 未物化的 profile 把原始系统错误铺给用户:见上"如实说"一条。
- 弹窗一开就自动弹出解释悬浮:Radix 的
TooltipTrigger.onFocus无:focus-visible闸门,弹窗挂载时的程序化焦点也会打开说明;现在只放键盘焦点进来。 - 安全模式
error: unknown option '--patch':启动器只认自己那几个 flag,参数位置错了就会被当成"该版本不支持"。 - 错误卡动作在冷启动失败后拿不到工作台(会话槽为空)与**「展开详情 → 其它出路」整块不可达**(动作字段被事件白名单丢掉),两条次级出路曾完全点不到。
- 插件开关的 Toast 说反话(独立复核实测抓到):写的是
disabled口径、文案与判据吃enabled口径,"关掉"会报「已启用」。现已把两种口径在类型上分开并加门禁。 - 验收抓到的三处:
failed to import未被识别成插件行问题、两处 UI 假象(状态与配置不一致)、以及启动等待宽限过短。 - 实验能力页的三处显示错误(都是把页面渲染出来逐版复查才看到的):个别档在面板说「已停用」时后端行仍写「已启用」;面板与说明里混进的 markdown 标记(反引号 /
**)被原样显示成符号;"宿主前置缺失"被误判到全部四项上(判断写成"字段不等于null",而该字段缺省时是undefined→ 四行齐亮红灯、开关全灰,实际四行都正常)。 - 「底座组合」把每一层都说成同一个东西:除系统核心外的每一层都被描述成「Web 界面与交互控制台渲染器」——包括随 dsh 自带的 Agent Teams 两层。现在只有确实认识的那两层才具体描述,其余如实说明。
🔒 架构、安全与稳定性 (Security & Stability)
- 安全模式的边界是明确的:只做"在该 Profile 配置里停用第三方插件"这一件事,覆写前留
.bak-<时间戳>;不提供整份"一键恢复"(恢复只会把坏配置原样搬回来)。够不到的行(例如 home 层的 patch 行)在界面上如实标注,不假装已停用。 - 回环鉴权:会话 Cookie 仅存内存、不落盘、不打日志;
/api的两道栅栏(Host 信任 + 会话鉴权)都已按上游实现对齐。 - IPC 契约面全部机器化:命令登记册独立成册,四处同步(命令清单 → handler → 权限
allow-*→ 前端封装)与响应形状都有闸门兜底,漏一处即测试红。 - 网络面继续收口:MCP 探测按传输分支登记(
stdio走受管子进程、streamable-http为条目级豁免),整轮只有一个 15s 期限、只读、一次性快照。 - "同一件事只有一个来源"成了可执行的门禁:插件名的去 scope / 去噪规则、中文辅助名、市场分类的标签与排序、市场 registry 的缓存,各自只有一个实现(
lib/pluginDisplay/lib/market/lib/marketRegistry),消费方若再写第二份即测试红。 - 沉浸式标题栏的注入面受控:页面标记注入与
app-region映射都在壳自有模块里(ADR-0029),不修改 dsh 源码。
⚠️ 已知限制
- 沉浸式标题栏为 macOS 专属:Windows / Linux 保持原生装饰标题栏(官方 Electron 客户端的 Windows 形态依赖其页面侧配合,本壳不做等价仿制)。
- 安全模式不适用于 WSL 客体档(显式报错,不偷偷回落到本地);只覆盖该 Profile 配置能表达的行。
- MCP 能力探测同样只在本地档可用(客体档下需在客体里 spawn 服务器命令,宿主侧执行语义不等价,故不回落)。
- 插件行失败在 en-US 下仍显示中文标题与建议(本地化需要先把行信息收进结构化字段,独立意图)。
- 插件名的中文辅助名只覆盖官方与高频包(策展表);其余包只显示其原本的名字——这是有意的:宁可不给辅名,也不拿机器音译冒充。
v1.2.7
[v1.2.7] - 2026-09-12
🐛 缺陷修复 (Bug Fixes)
- Windows 本地模式私有 Node 注入 PATH,修复启动意外弹出浏览器:Windows 本地模式下私有引擎环境(未将 Node 加入系统全局 PATH)启动探测
--no-open时静默失败,导致错误降级并跳出外部浏览器。现已将私有node_bin路径注入探测子进程PATH,且仅在显式成功时缓存能力支持状态,彻底杜绝外部浏览器启动弹窗。 - WSL 模式 DSH 引擎升级链路打通:修复了在 WSL 运行模式下点击“升级”时误调用宿主升级逻辑、未在 WSL guest 内部执行升级脚本的缺陷。现已正确感知运行环境,在 WSL 子系统内调度 guest 升级并在完成后自动失效版本探测缓存。
- 运行模式切换(Local / WSL)后健康诊断大屏实时刷新:修复了在偏好设置中切换运行模式后,诊断大屏因前端 60 秒内存缓存且缺少失效通知而持续展示旧模式状态的问题。现后端在
switch_mode时主动广播变更事件,前端监听并即时清空缓存重新拉取最新环境诊断。
🛠️ 体验与交互优化 (Improvements)
- 关于页更新按钮文案统一:将 DSH 核心引擎区域的“检查”文案与桌面客户端统一为“检查更新”(英文对齐为 "Check for Updates"),消除界面文案不一致。
v1.2.6
[v1.2.6] - 2026-09-12
🌟 核心亮点 (Highlights)
- Windows 首次启动运行模式选择与默认设置前置:修复了 Windows 首启未设默认模式时直接静默走本地启动并探测下载的流程割裂问题。现在 Windows 首启将在启动执行器和进入工作台之前,明确引导用户在「本地模式(Native Windows)」与「WSL 模式(WSL2 Linux)」之间进行选择并设置默认模式;若已设默认,后续启动零弹窗静默秒启。
- 非 Windows 平台纯粹原生极速体验:macOS 与 Linux 平台严格隔离 WSL 逻辑,零 WSL 感知、零模式选择中断,直接进入本地工作台启动流程。
- 工作台启动中心(Launchpad)交互重塑:优化多工作台选择与设为默认逻辑。工作台卡片新增快捷一键「设为默认」触点(
<Star />),底部偏好栏升级为现代高可见度 Switch 选项卡,区分「进入默认工作台」与普通工作台入口,状态与操作反馈更清晰。
🛠️ 体验与交互优化 (Improvements)
- 直接 IPC 契约调用与加载态防护:
BootMode运行环境选择页重构为直接调用api.chooseMode(picked, setDefault)并具备加载中动画与错误反馈,彻底移除脆弱的 URL query 参数中转与缓存比对逻辑。 - 多语言完整性与零裸中文字面量:
BootMode与BootSelector视觉标签(如「推荐 · 原生极速」、「Linux 隔离环境」、「设为默认」、「当前默认」)全面纳管至zh-CN与en-US国际化字典,并配备自动化门禁守卫(bootModeCopy.test.ts)。
v1.2.5
[v1.2.5] - 2026-09-12
🌟 核心亮点 (Highlights)
- Windows 本地模式 Web 工作台可正常载入全部插件:修复了在模块代理模式下启动后,浏览器打开 Web 工作台白屏并报错
Failed to load plugins: client-modules: HTML did not preload @deepseek-ai/dsh-client-modules/client.js的问题。现在 Windows 本地模式不仅能启动,更可完整加载 52+ 前端插件与客户端模块。 - 插件市场 NPM 镜像链加速与体积扩容:对齐 dsh-market 分发策略,优先通过国内 NPM 镜像链(npmmirror → npmjs)拉取官方 catalog 压缩包,海量插件(3400+)秒级载入;CDN 回退上限从 3MB 扩容至 16MB。
🐛 缺陷修复 (Bug Fixes)
- Windows 模块代理模式缺失浏览器端 client bundle 与 client 声明(ADR-0019):dsh 内部的
ensureModuleProxy在生成模块代理清单时,只保留了 Node ESM 解析所需的targets,丢弃了源包原本声明的dsh.client与exports["./client"]。本版在 bootstrap 启动流程中引入dsh-client-proxies.mjs,在调用runCli()前完成预热与增量补齐,将浏览器端 bundle(dsh-client-bundle.js)与元数据还原到代理目录,彻底解决前端插件预加载失败问题。 - 严格维护 dsh 代理幂等性契约:补齐逻辑逐字节保留
targets与version,不改动entry-N.js,避免触发上游强制清空与重建代理目录。新旧安装与就绪启动路径均能自动落位与幂等刷新。 - 插件市场目录突破 3MB 上限导致加载失败:插件数量增长至 3400+ 后体积达 3.11MB,此前硬编码的 3MB 限制导致解析失败,且回退的 Pages 产物恒为 404。已切换为官方 NPM catalog 镜像链分发并扩容至 16MB。
🔒 架构、安全与稳定性 (Security & Stability)
- 架构决策文档见 ADR-0019(
docs/adr/0019-dsh-client-module-proxies-on-windows.md)。 - 绝不修改 dsh 上游源码(恪守 AGENTS 红线 1)。
- 真实 dsh 启动实测(
real_dsh_boots_in_proxy_mode):验证 0 符号链接、1184 个代理条目、55 个客户端 bundle 自动生成,进程正常存活。 - 全套测试(Rust 418 passed、前端 365 passed、Python 17 OK)与代码检查(clippy / fmt / oxlint / tsc)全部通过。
v1.2.4
[v1.2.4] - 2026-09-12
🌟 核心亮点 (Highlights)
- 已安装过的用户升级后即可修复:上一版(v1.2.3)的 Windows 启动修复只对全新安装生效——如果引擎此前已经装好(即所有从旧版本升级上来的用户),它不会被应用,本地模式仍会在启动时报同样的错。本版补上了这条升级路径:每次启动都会把启动方式校正到当前形态,无需卸载重装、无需清理任何目录。
🐛 缺陷修复 (Bug Fixes)
- Windows 本地模式「装好了却起不来」在升级场景下未生效:v1.2.3 引入的零软链启动方式只在「引擎首次安装」时写入;引擎已就绪时会走一条跳过引导的快速路径,因此该修复从未被应用。现把校正收口到两条启动路径的公共入口,并确认它发生在启动方式被选定之前(含一项会真正执行启动器的能力探测,顺序错了就会用旧形态去探测)。
- 保护已有安装不被弄坏:校正带护栏——仅当检测到新版安装布局时才动启动器;使用旧版全局安装布局的用户,其启动器逐字保持不变,不会因为这次改动而指向不存在的文件。
🔒 架构、安全与稳定性 (Security & Stability)
- 本轮暴露出同一形状的问题两次:修复没有落在"真正会走的那条路径"上。已据此形成检查项:校正类逻辑必须既挂在创建点、也挂在每次使用点;只挂创建点等于修复对存量无效。相关决策与证据见 ADR-0018 与其两份独立验证报告。
- 回归测试覆盖:走真实启动路径(而非仅走引导)验证启动方式被刷新、顺序被单独钉住、护栏方向正确、幂等零写入;本轮新增 4 条用例、零删除。
⚠️ 已知限制
- 本版修复经三平台 CI 全绿验证;Windows 真机行为仍以你的实测为准。判断方法很简单:若仍失败,错误卡里应出现新的、可行动的原因说明,而不是原始的
EPERM。 - 仍依赖 dsh 的一个内部实现约定(见 v1.2.3 说明与 ADR-0018),已配「失效即响亮报错」的绊线并备有上游缺陷报告。
v1.2.3
[v1.2.3] - 2026-09-12
🌟 核心亮点 (Highlights)
- Windows 「本地模式」现在真的能进工作台了:v1.2.2 解决了「引擎装不上」,本版解决紧接着暴露的「装上了却起不来」——dsh 启动时仍会尝试创建符号链接,普通账户权限不足而退出。现在启动过程完全不创建符号链接,无需管理员、无需开发者模式。
🐛 缺陷修复 (Bug Fixes)
- Windows 本地模式启动即退出(根因修复):v1.2.2 之后引擎已能安装,但 dsh 启动时会在用户目录的
profiles/node_modules下创建约 481 个符号链接用于模块解析;Windows 普通账户没有创建符号链接的权限,于是启动即报EPERM退出。本版改为以 dsh 自带的「模块目录代理」方式启动——用真实目录代替符号链接,全程零软链。 - 该改动对已有安装安全:从旧方式切换到新方式时,dsh 会自行替换既有链接,不会报错,也不会要求你重装。
🛠️ 体验与交互优化 (Improvements)
- 启动失败的提示更可行动:若将来 dsh 的内部实现发生变化、导致上述方式失效,错误信息会明确指出原因与对应决策记录,而不是抛出一条难以理解的
EPERM。
🔒 架构、安全与稳定性 (Security & Stability)
- 决策记录见 ADR-0018;与 v1.2.2 的 ADR-0017 是同一根因的前后两段(先是「装不上」,后是「起不来」)。
- 仍拒绝自动提权:本版同样未采用「请求管理员权限」的绕行,理由与 ADR-0017 一致——主窗口承载 dsh 工作台并会加载第三方插件脚本,提权会把信任面放大到整个应用。
⚠️ 已知限制
- 本版修复经三平台 CI 全绿验证,其中 Windows / macOS 的机制差异已如实标注:Windows 真机行为仍以你的实测为准。若本地模式仍有失败,请把错误卡内容反馈;
scripts/probe-windows-dsh-install-full.ps1可做零安装定点排查。 - 本版依赖 dsh 的一个内部实现约定(判断自身是否被打包),已在 ADR-0018 中登记为技术债并配有「失效即响亮报错」的绊线;同时已向上游准备缺陷报告。
v1.2.2
[v1.2.2] - 2026-09-12
🌟 核心亮点 (Highlights)
- Windows 「本地模式」可以从普通账户正常启动了:此前本地模式在未开启开发者模式、非管理员的 Windows 上必然启动失败(引擎装不上)。根因是 pnpm 12 的全局安装需要创建符号链接,而该权限普通账户没有。本版改为不需要任何特权的安装方式,首启即可自补齐引擎。
🐛 缺陷修复 (Bug Fixes)
- Windows 本地模式引擎引导失败(根因修复):dsh 此前经「全局安装」装入,而 pnpm 12 的全局安装会创建一个符号链接(global package hash link);Windows 创建符号链接需要管理员权限或开发者模式,普通账户直接报
os error 5 拒绝访问。v1.2.1 已让错误提示说清这一点并给出出路,本版则从根上移除该依赖:dsh 改为装入应用自管的独立目录,并以应用自写的启动器调用——全程不创建任何符号链接。无需管理员、无需开发者模式、无需改用 WSL。 - 旧安装不受影响:已装好引擎的用户继续可用,不会被强制重装;旧目录也不会被删除。
🔒 架构、安全与稳定性 (Security & Stability)
- 明确拒绝「自动提权」方案:社区有建议让安装过程自动请求管理员权限,本版未采纳。原因:主窗口承载 dsh 工作台并会加载用户安装的第三方插件脚本,一旦提权,这些内容与 dsh 及其子进程都会以管理员身份运行——把「装一个包」的信任面放大到「整个应用 + 所有插件」;而引擎安装只在首次启动时需要该能力,代价显著不成比例(决策记录见 ADR-0017)。
- 安装方式改为应用自管:dsh 装入应用数据目录下的独立运行时目录,启动器由应用自己生成(普通文本文件,非符号链接),安装过程仍只经应用内置的包管理链,不修改用户的全局配置。
⚠️ 已知限制
- 本版修复经三平台 CI 全绿验证;其中 Windows / WSL 的真机行为仍待复验(尤其 dsh 依赖的原生模块在 Windows 上的首次构建)。若你在 Windows 本地模式下仍遇到启动失败,请把错误卡内容反馈——
scripts/probe-windows-dsh-install-full.ps1可做零安装的定点排查。
v1.2.1
[v1.2.1] - 2026-09-11
🌟 核心亮点 (Highlights)
- Windows 启动失败不再「说错原因」:本地模式因系统权限装不上引擎时,过去一律报「registry 均不可达」把用户引向重试网络;现在如实告知是权限不足,并直接给出「改用 WSL 模式打开」的可用出路。
- 启动与更新体验的三处卡顿修复:启动页「查看启动详情」能收起了;客户端更新点「下载」后立即有反馈且进度条实时推进;切换运行环境后不再残留上一次的错误卡片。
✨ 新增功能 (Features)
- 「下次默认打开方式」有了窗口内入口:此前只能在启动页通过隐藏参数、或在 Windows 托盘菜单里设置,应用界面内无处可改。现可在「系统控制台 → 偏好与守护」中选择本机默认以本地还是 WSL 模式启动。
🛠️ 体验与交互优化 (Improvements)
- 启动页「查看启动详情」可收起:点开详情后页面上此前没有任何收起入口(Windows 本地模式与 WSL 模式都会遇到),只能重启应用;现在用户自己展开的就能自己收起,错误信息仍独立显示、不会被藏起。
- 客户端更新反馈即时化:点「下载」后不再有一段无反馈的等待期,立即进入可见状态;下载进度条按实际进度实时推进(此前只显示首个采样点后即冻结)。
- 切换运行环境后清理过期错误:从本地模式切到 WSL(或反向)后,迁移成功画面不再挂着上一轮的失败原因——错误描述的必须是当前这个世界的状态。
🐛 缺陷修复 (Bug Fixes)
- Windows 本地模式引擎引导失败(权限类):根因是 pnpm 12 的全局安装需要创建符号链接,而普通账户(未开启开发者模式、非管理员)没有该权限。修复拆开了「网络不可达」与「权限不足」两类失败,权限类判据优先,并给出可行动建议。
- 关于页与健康大盘版本结论矛盾:WSL 模式下健康大盘显示 dsh 已就绪,关于页却显示「未检出」。现版本探测按当前运行环境择源(WSL 模式下读客体内的实际版本),两个入口结论一致。
- 点「检查更新」会把关于页刷回「未检出」:同一矛盾的第二条路径,已一并修复。
- 错误卡「改用 WSL 打开」是空按钮:该按钮此前未接入实际动作,点了没有反应;现已接通并补上文案。
- 更新进度事件被整条丢弃:Rust 侧新增的「准备中」状态未被前端状态表接受,导致下载进度从第一条起被全部丢弃、界面停在「检查中」。已补齐并新增跨层契约机器闸门,两侧任一方单独改动都会构建失败。
🔒 架构、安全与稳定性 (Security & Stability)
- 启动轮次状态收口:把「开启新一轮启动」与「撤销上一轮可见状态」合并为同一个动作。此前两者分开、靠 7 处调用点各自记得配对而实际只有 3 处做到,导致崩溃自动拉起与 profile 选择器路径会把上一轮的错误留在缓存里,并随任意页面重载重新显示。
- 跨层契约闸门(新纪律):「事件生产方与消费方的测试各自通过」不等于契约成立。本轮更新链路出现两次「两侧单测全绿、跨界即断」,现以机器闸门强制校验「Rust 发射序 × 前端消费表」,并立为团队纪律 M12。
- 测试夹具密封化:一处依赖宿主
PATH的测试夹具在 CI 上被 runner 自带工具顶替而失败(本机因巧合为绿,属结构性覆盖盲区)。现将夹具改为密封位置并加自证断言;该根因在 2026-08-26 已出现过一次,已登记 roadmap §4.17 防复发。
⚠️ 已知限制
- Windows 普通账户下的「本地模式」仍无法安装引擎(属 pnpm 12 上游缺陷,需符号链接特权)。本次修复的是诊断准确性与出路引导,未改变安装能力。可选出路:改用 WSL 模式启动(推荐),或以管理员身份、或开启 Windows 开发者模式后重试。
- 本批修复经三平台 CI 全绿验证;其中涉及 Windows / WSL 运行时的行为为机制级修复 + 单元与契约级验证,真机复验待排期。
v1.2.0
[v1.2.0] - 2026-09-11
🌟 核心亮点 (Highlights)
- WSL 模式下控制中心真正管到「客体世界」:以前在 WSL 模式打开控制中心,操作的是宿主环境而 dsh 与引擎都在 Linux 客体里,于是插件装卸、profile 创建必然失败且重试无效。现在插件、Profile、会话、凭据、诊断全部按当前运行模式自动择源,在 WSL 模式下也能正常用了。
- 新增 macOS Intel (x86_64) 原生安装包:此前只提供 Apple Silicon 版,Intel Mac 需自行编译;现在两种架构都有官方
.dmg,各自内置对应架构的引擎、原生性能不打折。
✨ 新增功能 (Features)
- WSL 客体管理面(ADR-0016):控制中心在 WSL 模式下的读侧与写侧全面下沉到客体——插件行表与开关、插件更新检查、插件配置复制、Profile 的创建/复制/重命名/删除、会话扫描与维护、凭据读写、系统诊断,均在客体内完成;并新增客体侧构建策略写入,解决客体里
pnpm add带构建脚本插件必失败的问题。 - 世界择源与同源护栏:启动时记录本次实际选中的 WSL 发行版,管理面与运行中会话始终保持同一个世界;WSL 模式下通过
\\wsl$UNC 路径可直接打开客体工作区与会话目录。
🛠️ 体验与交互优化 (Improvements)
- 跨窗口语言设置即时生效:修复切换界面语言后部分窗口仍显示旧语言/残留中文的问题,首帧即按偏好渲染。
- 文案收口(中英对称):市场、启动页、错误卡片、PreferencesPane、Profile 详情等多处硬编码中文与漏译修正;英文界面下不再出现中文。
- 不再出现「数字对不上」的文案:清掉写死的插件数量(
2700+)与「240+ 预置服务」等会随版本漂移的表述,改为与真实数据一致或不依赖具体数字。
🐛 缺陷修复 (Bug Fixes)
- 崩溃修复(两类,release 下直接闪退):凭据列表在值含中文/emoji 等非 ASCII 字符时崩溃;会话目录名含中文时崩溃(目录名可由用户手工创建/改名)。两处均改为按字符处理,并补齐回归测试。
- 磁盘临时文件泄漏:会话修复链路有 4 条提前退出路径未清理临时脚本(约 90KB/次),改为作用域结束自动清理,并回收存量残留(约 6.9MB)。
- 插件/MCP 配置写入会丢掉用户手写注释:写入
cordis.patch.yml时会整表重序列化,导致人工注释丢失且不可逆;现统一为保真写入——未改动的条目逐字节原样保留,写入前自动备份、写入走原子替换。宿主与 WSL 客体两条路径现已共用同一套实现,行为一致。 - WSL 模式停止/就绪信号静默失效:宿主与客体两处路径靠注释维系一致,改一处即导致停止操作无效且测试仍绿;现改为单一来源并由测试钉住。
- 会话扫描兼容性:修复在 BSD
stat(macOS)与 Windows 路径反斜杠下的脚本兼容问题,三平台 CI 单测恢复全绿。
🔒 架构、安全与稳定性 (Security & Stability)
- 「唯一网络面」从纪律升级为机器闸门:新增源码扫描闸门,
updates.rs之外出现网络原语即构建失败,需显式登记豁免;本轮同时补登了两处此前漏登记的网络用途(工作台 Token 环回兑换、客户端自更新)。 - 子进程生命周期收口加强:新增依赖纪律与 spawn 收敛闸门,禁止裸
Command::spawn,确保退出/崩溃/强制结束都不留孤儿进程;taskkill参数收敛为单一来源。 - 发布矩阵扩展:CI 新增 macOS Intel 构建通道(交叉构建),更新清单新增
darwin-x86_64目标,Intel 用户可获取原生包与自动更新。