Skip to content

Releases: sperictao/dsh-pro-max

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 01 Sep 15:55

v0.6.0

插件市场结构性升级:Plugins 页拆分「发现 / 已安装」二级导航(发现为默认页),已安装页与发现页同一卡片观感,并支持插件更新检测、单插件更新与一键全部更新。同版交付企业治理增强(市场目录镜像、内置插件 tarball 装机完整性复核)与主页一键重启。

Changes

  • 市场二级导航:点击 Plugins 后在顶部导航下方显示「发现 / 已安装」二级导航,发现(目录浏览)为默认页;已装列表从发现页内联区块收敛为独立整页,两页共用同一卡片骨架,目录能匹配上的已装插件透传描述/分类/星标/链接
  • 插件更新检测:npm 形态安装的非受管插件自动比对 npm registry latest——进入市场页即检测,已安装页可手动重跑;spec 能解析出具体版本(pkg@1.2.3npm:pkg@1.0.0、裸版本)才参与,范围 spec(^ ~)与 github:/file: 等协议形态如实不可检;部分包查询失败不放大为整体失败,全部可检包都失败才报错
  • 插件更新:有新版本的插件显示「更新」按钮与 v当前 → v最新;更新 = 以 name@latest 重装,与一键安装同一 dsh 闸门、插件策略白名单、审计台账与构建脚本审批流;「全部更新(N)」顺序执行(共享同一 profile,pnpm 并发会争锁),结束汇总,中途撞上审批挂起即停
  • 市场目录镜像(企业):设置页新增「插件目录源」,可指向返回同一 plugins.json 契约的内网镜像;留空 = 内置官方源;非空必须显式带 https:///http://
  • 内置插件完整性复核(企业):构建链为两个内置授权插件 tarball 产出 sha256 摘要并随安装包分发;装机后每次使用前复核,校验和文件缺失或摘要不符一律拒绝启用(fail closed,无绕过出口)
  • 一键重启 dsh web:主页新增重启按钮(服务运行中可用);先关后启并沿用当前访问模式,关闭失败即中止重启,不在未知状态上强行拉起
  • README 勘误:目录源名称对齐 awesome-dsh-plugin.com curated 目录(2700+ 插件)
  • e2e smoke 修复:补齐 market_snapshot 未 mock 导致 plugins 步骤中断的既有断裂,断言对齐二级导航后的页面结构

验证

  • cargo test:77 项全部通过(含 spec 版本解析、registry 响应解析、策略合并、校验和复核等新增测试)
  • cargo clippy --all-targets:无告警
  • vitest:41 项全部通过(含二级导航、更新检测、单更新与全部更新用例)
  • pnpm run test:e2e:9 步全部通过
  • pnpm run check:release -- --tag v0.6.0:版本三处一致、release notes 存在、bundle resources 路径有效

升级说明

  • 无破坏性变更与配置迁移:market_catalog_url 默认为空即官方源,行为与上一版一致
  • 已装插件中 github:/file: 形态的条目不出更新按钮(来源不是 npm registry),列表管理与移除照常可用
  • 首次从旧版升级后,内置授权插件在首次修复/安装时即走校验和复核;正常分发的安装包不受影响

v0.5.6

Choose a tag to compare

@github-actions github-actions released this 01 Sep 05:50

v0.5.6

修复插件市场一键安装在 pnpm 12 预发布环境下必然 404 的问题。市场目录给出的安装标识是 npm:包名 形态(如 npm:dsh-context),此前原样传给 dsh plugin add 裸转发给 pnpm;pnpm 12(next 线)新增的 package-manager add 特性把裸 npm: 前缀的 spec 走"记录包管理器"分支,将 npm:dsh-context 整体当包名查询 registry(registry.npmjs.org/npm%3Adsh-context),报 ERR_PNPM_PACKAGE_MANAGER_ADD_RESOLVE_LATEST 404。版本矩阵实测:pnpm 9.15–11.25 全部正常,12.2.1 复现。

Changes

  • 安装 specifier 投影层规范化:目录解析时剥掉 npm registry spec 开头的 npm: 前缀(npm:dsh-contextdsh-contextnpm:@scope/pkg@1.0@scope/pkg@1.0),与目录自身展示的 command 文本一致;pnpm 9–12 全版本等价
  • 非 npm 协议不受影响github:owner/repo#reffile: tarball 原样保留;只剥开头前缀,alias 形态(name@npm:other)不动
  • 新增投影规范化测试:无版本、带版本、scope 包、github:、裸名五种形态

验证

  • cargo test:61 项全部通过(含新增规范化测试)
  • cargo clippy --all-targets:无告警
  • vitest:25 项全部通过
  • pnpm run check:release -- --tag v0.5.6:版本三处一致、release notes 存在、bundle resources 路径有效

升级说明

  • 已装插件不受影响:profile 依赖里旧时代留下的 npm: 形态值按原样展示与工作;仅新安装路径使用规范化后的裸名
  • 遇到本问题的环境无需降级 pnpm:升级 Launcher 到本版即可;临时规避也可 npm i -g pnpm@latest 降到 11 稳定线

v0.5.5

Choose a tag to compare

@github-actions github-actions released this 01 Sep 05:16

v0.5.5

修复本地一键启动在重启场景下必然 401 的死 token 问题。dsh-web.log 只追加不轮转,旧实例的 token 行会一直留在文件里,而 dsh web 每次重启都换 launch token;原实现对全量日志取最后一条 ?token= 行、找到即返回,点击时 web 已在跑(走重启路径)就会把上一实例的死 token 交给浏览器,新实例数秒后才打印自己的 token 行——401 必现。Windows 等无授权插件的原生 token 鉴权环境直接暴露,macOS 开发机因 web profile 装有授权插件、鉴权被整个旁路而死 token 也放行,问题被掩盖。

Changes

  • token 解析绑定本次启动dsh_start_web 在 spawn/restart 动作前记录日志字节锚点,解析只看锚点之后追加的区域(fresh_log_region)——重启后只认本次实例自己打印的 token 行,旧实例的死行永远进不了候选
  • 兜底回退保持不变:新区域始终无 token 行(如 web 由外部手工启动、token 只落在终端)仍回退裸地址;锚点越界(日志被清空/轮转)按空区域处理,不再交出来历不明的旧行
  • 重试窗口 10→20×500ms:打印与端口就绪先后无保证,加长窗口减少无谓的裸地址回退;拿到 token 行立即返回,正常路径无额外等待
  • 新增区域绑定单元测试:新区域无 token 行时返回空、本次打印后只认新 token、锚点越界与多字节字符中间两个安全兜底

验证

  • cargo test:60 项全部通过(含新增区域绑定测试)
  • cargo clippy --all-targets:无告警
  • vitest:25 项全部通过
  • pnpm run check:release -- --tag v0.5.5:版本三处一致、release notes 存在、bundle resources 路径有效

已知边界

  • dsh 检测的 local_url(集成卡 Open/复制按钮)无启动锚点,web 被外部手段重启后仍可能给出死 token,后续以探测裁决或 dsh 侧查询端点解决
  • 连续多次点击一键启动无并发互斥,互相顶掉刚拉起的实例(日志中 EADDRINUSE 假失败),后续单独处理

v0.5.4

Choose a tag to compare

@github-actions github-actions released this 01 Sep 02:15

v0.5.4

本地访问模式改走 dsh 原生 token 访问。实测 dsh 0.1.2 线上,无授权插件的 web 以原生 launch token 鉴权(裸请求 401),启动时把带 token 的地址打印进 dsh-web.log;一键启动改为解析该地址交给浏览器打开——换取 30 天持久 cookie 后即进入 dsh 原生会话。本地模式从此不依赖授权插件,"卸载授权插件"回归纯本地可用形态。

Changes

  • 本地一键启动原生 token 访问dsh_start_web 启动成功后从日志解析最后一次打印的 ?token= 地址返回,前端直接打开;解析不到(web 由外部手工启动、日志被清)回退裸地址,由 dsh 自身的 401 页提示。新增日志解析单元测试(多轮启动取最后一条、无 token 行不匹配)
  • 本机地址与插件栈解耦:dsh 检测的 local_url 在 web 运行中即可用(优先 token 地址),不再以授权插件安装为前置;集成卡地址行 Open/复制即用
  • 纯本地形态回归一等公民:卸载授权插件后本地访问照常工作(走原生 token),远程授权链路如实停在「插件未安装」
  • AGENTS.md 设计理念补充裁决规则:需求中的明确约束(如"本地模式无需安装授权插件")是硬边界,与上游行为冲突时在约束内寻找原生机制,不得擅自放宽

验证

  • cargo test:59 项全部通过(含新增 token 日志解析测试)
  • vitest:25 项全部通过
  • 端到端实测:无插件启动 → 日志解析 token URL → 303 换取持久 cookie → 带 cookie 200、裸请求 401
  • pnpm run check:release -- --tag v0.5.4:版本三处一致、release notes 存在、bundle resources 路径有效

v0.5.3

Choose a tag to compare

@github-actions github-actions released this 31 Aug 22:23

v0.5.3

修复 v0.5.2 跟线 dsh 0.1.2-alpha.2 后的探测与验证路径:上游 0.1.2 改了 RPC 方法命名与 WebSocket 端点,旧路径会导致一键启动验证全部失败。vendored 授权插件同步跟线适配。

Changes

  • 适配 dsh 0.1.2 Connection 合约dsh-client-connection-authz bump 至 1192947(上游提交 "fix: 适配 dsh 0.1.2 Connection 合约");submodule 指针、构建脚本 pin 校验、tauri.conf.json bundle resources 三处同步
  • RPC 探测路径更新settings.describesettings/describellm.providersllm/listProviders;RPC body 补 payload.args 空对象以符合新合约
  • WebSocket 探测端点更新/api/events.host/api/remote.mux(本地与经代理两条探测路径同步;路径提取为 REMOTE_WS_PATH 单一来源)
  • 修复 WS_PROBE_JS 语法错误:脚本模板中误混入的 pub(crate) 前缀已清理,并新增「脚本必须可被 Node 解析」的测试防止回归
  • 验证失败列表逐行展示:一键启动失败原因改为按行分隔,不再把 URL 与下一项拼接成不可读文本;时间线样式同步支持换行
  • 升级 dsh 后同步 compat 注释:重写 web profile cordis.patch.yml 时,"Launcher managed: installed dsh CLI is ..." 注释中的版本号随实际安装版本更新

验证

  • cargo test:全部通过(含新增的 WS 脚本可解析性测试与验证列表分隔测试)
  • pnpm run check:release -- --tag v0.5.3:版本三处一致、release notes 存在、bundle resources 路径有效

v0.5.2

Choose a tag to compare

@github-actions github-actions released this 31 Aug 10:54

v0.5.2

dsh 跟线升级到 0.1.2-alpha.2,内置授权插件栈同步跟线;修复导致 v0.5.1 全平台构建失败的 Cargo.lock 幻影版本。

Changes

  • dsh 锁定线升级 0.1.1-rc.2 → 0.1.2-alpha.2:版本闸门同线判定随 SUPPORTED_DSH_VERSION 常量收敛,0.1.2 线(alpha/rc/稳定版)现在可安装;旧线 0.1.1 及以下按跨线规则拒绝(跨线会重排 credentials 格式与插件运行时)
  • vendored 授权插件栈跟线dsh-client-connection-authz 升级到 0.1.2-alpha.2-authz.1(上游 client.js 的 isLoopback 初始化新增 transport.ownsHost 析取支,构建期替换锚点同步;插件 typecheck/41 测试/构建全绿),dsh-auth-tailscale 升级到 0.1.2-alpha.2-auth.1(22 测试通过);submodule 指针、构建脚本 pin 校验、bundle resources 三处已同步
  • 修复 v0.5.1 构建失败根因:Cargo.lock 中 heck/auto-launch 等 8 个包被标成 crates.io 从未发布的 0.5.1(checksum 实为 0.5.0),全部构建 job 在依赖解析阶段失败;已修正回 0.5.0 并对全部 556 个依赖逐包校验 index checksum 确认无其他异常

验证

  • 插件栈:dsh-client-connection-authzdsh-auth-tailscale 各自 pnpm run check(typecheck + 测试 + 构建)全绿
  • 主仓:cargo test 57 通过;pnpm run check:release -- --tag v0.5.2 通过
  • v0.5.1 重打 tag 后 build-release 全 job(validate/四平台构建/release)成功,确认幻影版本修复有效

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 31 Aug 10:38

v0.5.1

修复 macOS 浅色/深色外观切换(含系统自动切换的过渡段)时主窗口持续闪烁的问题。

Changes

  • 主题同步去抖:macOS 在亮暗过渡期间会连发多个 prefers-color-scheme change 事件,每次都同步重写 <html data-theme> 会反复触发整窗样式重算,表现为窗口闪烁。系统主题监听抽为 useSystemThemeSync hook,事件静默 250ms 后只按最终外观应用一次
  • 同值不写 DOMapplyDataTheme 记录已落 DOM 的 data-theme,解析结果与当前值相同时直接跳过属性写入,消除过渡期间的冗余重绘

验证

  • tsc --noEmit 无报错;vitest 通过
  • 实机验证:macOS 自动外观切换过渡段窗口不再闪烁,手动切换亮暗主题即时生效
  • pnpm run check:release -- --tag v0.5.1 通过

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 30 Aug 22:02

v0.5.0

新增两个功能域:插件市场与模型配置。导航从 Home / Settings 扩展为 Home / Plugins / Models / Settings。

Changes

  • 插件市场(Plugins 视图):浏览 dsh-plugins-store 社区目录(api.dshmk.com,7400+ 插件),支持搜索、分类筛选、星标/名称排序、滚动分页;一键安装/移除 web profile 插件,安装前内联二次确认;已装插件列表集中管理,Launcher 自管的授权插件标记「managed by launcher」且不提供移除入口
  • 市场安全边界:目录在 Rust 侧拉取并投影成精简列表(约 27MB 原文不进 WebView);「已验证」标记只认目录 validation.overall == "verified"(沙箱安装检查,非安全审计);安装 specifier 经字符白名单校验(拒绝相对路径、..、空白与控制字符);安装走 dsh plugin --profile web add,pnpm ≥10 默认拦截第三方生命周期脚本
  • 模型配置(Models 视图):编辑 ~/.dsh/settings.yaml 的模型域——默认模型(provider + model + reasoningEffort 七档思考等级)与自定义提供商路由(显示名 / Base URL / wire 协议 openai-completions|openai-responses|anthropic-messages / API Key 环境变量名 / 模型列表)
  • 模型配置边界:API 密钥只保存环境变量名,永不落盘;提供商高级字段原样透传保留(混入管理键时以 UI 为准);模型域之外的顶层键(llm-deepseek、agent-presets 等)保存时原样保留;保存后提示需重启 dsh web 生效
  • Rust 依赖:新增 serde_yaml 0.9(settings.yaml 读写)与 reqwest 0.12(blocking + rustls-tls + gzip,目录拉取,免系统 openssl)
  • 文档:CONTEXT.md 新增「插件市场」「模型配置」两域术语与语义边界;双语 README 亮点同步
  • 测试补充:市场目录投影与 identifier 白名单、已装列表受管标记、模型配置 round-trip / 外来键保留 / extra 剥离 / 空配置共 9 项 Rust 单测;市场与模型视图 6 项前端测试;E2E 冒烟扩展至 9 步(新增 Plugins/Models 导航)

验证

  • cargo test 57 项通过(另有 1 项 #[ignore] 真实目录拉取冒烟本地通过,3.2s 投影 7000+ 条)
  • 实机闭环:安装市场插件 → dependencies 键名与已装匹配逻辑一致 → 卸载 → 与安装前备份逐字节一致,profile 无残留
  • vitest 25 项通过;tsc --noEmit 无报错;pnpm build 通过
  • pnpm run check:i18n 通过:前端 178 key、Rust 表 136 条,无缺失无死 key
  • E2E 冒烟 9 步全绿
  • pnpm run check:release -- --tag v0.5.0 通过

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 30 Aug 13:44

v0.4.1

商业化整改批次交付:修复一个真实缺陷(应用内帮助死链)、补齐可访问性与键盘快捷键、建立 E2E 冒烟门禁、拆分 dsh 域模块、补全开源仓库门面。dsh 集成行为无变化。

Changes

  • 修复应用内帮助死链:补写 docs/updater/SETUP.md(更新源密钥、环境变量、CI 配置与故障排查),更新源未配置时关于页的「Setup Guide」链接不再必然报错,并附仓库布局回归测试
  • 可访问性补齐:无 href 链接触发器改为键盘可达的链接样式按钮;顶部导航、设置侧栏、选择卡补 :focus-visible 主题焦点环;toast 经 role="status" aria-live="polite" 对屏幕阅读器可感知
  • 新增键盘快捷键Cmd/Ctrl + , 打开设置,按钮 tooltip 双语提示
  • E2E 冒烟门禁:基于 playwright-core 与 mock Tauri IPC 的 7 步冒烟(壳渲染、Home/Settings/About 导航、快捷键、启动链 IPC 面与无错误 toast),接入 quality workflow,未 mock 命令即失败
  • dsh 模块拆分:4,043 行单文件按域拆为 process / components / auth / detect / setup / start / update / probe / autostart 九个模块 + tests,main.rs 注册路径不变,显式跨模块导入,行为无变化
  • 死代码清理:删除零引用 Modal 组件与 22 个遗留 CSS 类、3 个死 keyframes;摘除 4 处私人备注标记
  • 仓库门面:CONTRIBUTING.md(质量门禁、插件 pin 与发布清单)、SECURITY.md(私密漏洞报告与范围边界)、bug/feature issue 表单
  • 测试补充:updater 重试退避、可重试错误分类、错误文案与帮助路径回归测试

验证

  • cargo test 49 项通过;cargo clippy --all-targets -- -D warnings 无警告
  • tsc --noEmit 无报错;pnpm run check:i18n 通过:前端 130 key、Rust 表 120 条,无缺失无死 key
  • E2E 冒烟 7 步本地与 CI 全绿
  • pnpm run check:release -- --tag v0.4.1 通过

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 25 Aug 03:47

v0.4.0

移除主页顶部的“Integrations / 集成”标题,Home 页直接展示 dsh 卡片,避免与顶部导航产生重复的入口感。

Changes

  • 移除 Home 页标题:删除 IntegrationView 中的 h2 标题,主页不再显示“Integrations / 集成”
  • 清理 i18n 死 key:同步删除英文与中文词典中不再使用的 Integrations

验证

  • pnpm run check:i18n 通过:前端 129 key、Rust 表 120 条,无缺失无死 key
  • vitest 19 项通过;tsc --noEmit 无报错
  • pnpm build 通过
  • pnpm run check:release -- --tag v0.4.0 通过