dsh-open-any

DSH PLUGIN会话与消息

仓库 xl0223/dsh-open-any

会话与消息 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

对话内文件右键「打开方式」——含系统 OpenAs 对话框,可打开未注册文件关联的应用

一句话选型结论

按资料字段整理

dsh-open-any 是会话与消息类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类会话与消息 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-19 创建于 2026-10-19
README 10.7 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:xl0223/dsh-open-any
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

会话与消息
字段来自项目仓库与公开索引,中文说明由本站标注

适用场景

文件读写

上游标签

context-menucordisdeepseek-harnessdshdsh-pluginopen-with

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在会话与消息场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-open-any当前 L5 · 运行验证通过 低风险 0 未标注 有
dsh-desktop L3 · 安装规范通过 低风险 3.0 万 未标注 无
openpets L4 · 沙盒安装通过 低风险 1,274 未标注 有
deeptide L4 · 沙盒安装通过 低风险 1,104 0.1.1-rc.2 有
jingyun-dsh L3 · 安装规范通过 低风险 1,004 未标注 有
study-mate 未做沙盒验证 未标注 856 未标注 无

仓库档案

会话与消息
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方xl0223仓库 dsh-open-any · 默认分支 main
分类会话与消息desktop
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-19 · 2026-10-19最后推送 2026-10-19
本站收录2026-10-30首次进入本站目录的时间

README 全文

10.7 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-open-any

给 DeepSeek Harness(DSH)的对话界面加「文件右键 → 打开方式」:对话里出现的文件,右键就能用本机任意应用打开。

┌──────────────────────────────┐
右键 a.ts  │ a.ts                         │
──────▶ │ 用 VS Code 打开              │
│ 在文件资源管理器中打开        │  ← 一级菜单,不用展开
│ 打开方式              ▸      │──▶ VS Code / Cursor / Windows Terminal
│ ─────────────────────────    │
│ 其他应用…(系统对话框)      │  ← 本插件独有:可选出未注册关联的应用
│ ─────────────────────────    │
│ 复制路径                     │
└──────────────────────────────┘

它能做什么

菜单项 行为
用 <默认应用> 打开 用系统默认关联程序打开文件
在文件资源管理器中打开 一级菜单项;在文件管理器中定位该文件(Windows 用此措辞,macOS 为「在访达中显示」)
打开方式 ▸ 列出本机为该文件类型注册过关联的编辑器 / 终端(带真实图标与「(默认)」标记)
其他应用…(系统对话框) 唤起 Windows 原生「打开方式」对话框,可选未注册文件关联的应用(例如 Visual Studio)
复制路径 复制绝对路径

识别范围:

元素 DOM 特征 路径来源
Markdown 文件链接 button.fileLink title 属性
输入框 / 消息里的 @文件 引用 [data-ref-chip=&quot;file&quot;] title(@路径)
路径标签(PathLabel) [data-path-label] title
其它带 title 的元素(兜底) 任意祖先的 title title,仅当它「看着就是路径」时命中

相对路径会按当前正在查看的会话的工作目录补全成绝对路径(Host 侧只用进程 cwd 解析相对路径,所以必须在浏览器侧补全)。非文件位置右键仍弹浏览器原生菜单。

与同类插件的区别(诚实说明)

DSH 插件市场里已有几个同类插件(dsh-file-link-menu、dsh-right-click-menu、dsh-file-menu 等),本插件不是能力最全的那个。它只主张两件事:

  1. 「其他应用…(系统对话框)」:走 rundll32 shell32.dll,OpenAs_RunDLL,能选没有注册文件类型关联的应用。只列 workspacePathApplications 的插件永远够不到这类程序(例如 Visual Studio 不在 DSH 的应用目录里时)。
  2. 不拖垮启动的工程约束:client 插件在 apply 阶段绝不抛异常、绝不等待服务就绪,factory 外层还有一个永不抛错的兜底 apply。DSH 的 web boot 把任何非 active 的条目当致命错误(web boot: N entry did not activate),实测会让整个 GUI 打不开——本插件为此付出的是「服务全部延迟到事件发生时惰性解析」的设计。

如果你需要超链接右键、另存为、复制文件内容、文件树右键等能力,请直接用上表里更全的插件,不要重复造这个轮子。

安装

从 GitHub 安装(推荐)

在 DSH 的「设置 → 插件」或插件管理器的添加框里填:

github:xl0223/dsh-open-any

或用 DSH 自带 CLI(把 ` 换成你的 profile 名,例如desktop`):

dsh plugin --profile  add github:xl0223/dsh-open-any

装完重启 DSH:client bundle 按文件 mtime 生成 rev 并版本化缓存,不重启不会重载。

本地源码调试

dsh plugin --profile  add link:C:\path\to\dsh-open-any

改完 src/ 必须重新 node scripts/build.mjs(DSH 加载的是 lib/);改 lib/client.js 刷新页面即可,改 host 半侧要重启。

卸载

dsh plugin --profile  remove dsh-open-any

或手工从 profile 的 package.json 里删掉 dsh.profile.bundles 与 dependencies 中的 dsh-open-any,重启。

兼容性

项 状态
DSH 版本 0.2.0-rc.2 上完成真机验证(菜单、应用列表、打开、文案)
DSH 0.2.1-rc.2 已静态确认:外壳冻结的模块基座表里仍有 @deepseek-ai/dsh-client-ui-primitives(它被打包进外壳,不再有独立包目录);未做真机重验
平台 Host 侧用 rundll32 / explorer / open / xdg-open,三平台都有实现,但只在 Windows 11 上实测过
Node 构建需要 Node ≥ 20;运行时只用 DSH 自带能力

开发

node scripts/build.mjs                                                  # 语法 + 契约校验 → lib/
node --test scripts/verify-client.test.mjs scripts/verify-host.test.mjs  # 离线单测
node tools/check-host-contract.mjs                                      # 与真实 app.asar 的模块/路由契约
node tools/probe-open-in-app.mjs                                        # 真机探测:本机会列出哪些应用

一条命令跑全部:npm run check。

验证报告(真实执行)

平台:Windows 11;DSH D:\Ai_Agent\DeepSeek Harness(0.2.0-rc.2 真机 / 0.2.1-rc.2 静态)。
以下命令与数字均为实际执行结果。

1. 构建

$ node scripts/build.mjs
built ...\lib\client.js  34339 bytes  sha256=f94b6dc6edee8545…
built ...\lib\index.js   15049 bytes  sha256=131c5ddbfd27fb3f…

2. 离线单测:30 / 30 通过

覆盖:路径识别与清理、会话 cwd 补全、菜单模型(加载中 / 有应用 / 失败)、平台措辞、Session Remote 请求体、host 路由回退、词典命中/未命中、host 路由的栅栏与方法/媒体类型边界、假 DOM 端到端(右键 → 菜单 → 选「用 Cursor 打开」→ 断言请求体)、以及一组崩溃回归测试(apply 在六种恶劣上下文下必须不抛错且完成挂载)。

ℹ tests 30  ℹ pass 30  ℹ fail 0

3. 宿主契约(对真实 app.asar)

$ node tools/check-host-contract.mjs
基座模块: react/jsx-runtime, react-dom, react-dom/client, @deepseek-ai/cordis,
@tanstack/react-virtual, @deepseek-ai/dsh-client-store,
@deepseek-ai/dsh-client-ui-slots, @deepseek-ai/dsh-client-ui-primitives,
@deepseek-ai/dsh-client-ui-dockkit, react, zod
契约检查通过:所有 require 与导出名都存在。

4. 真机验证(0.2.0-rc.2)

右键对话里的文件链接 → 菜单弹出 → 应用列表来自本机 → 选应用后文件被打开;「其他应用…(系统对话框)」唤起 Windows 原生选择器(用 rundll32 实测进程出现)。

已知限制

  • 0.2.1-rc.2 未真机重验:只确认了模块基座表,没有实际重启安装测试。
  • 「其他应用…」仅 Windows 实现(OpenAs_RunDLL);macOS / Linux 会返回 501。
  • 图片类 Markdown 链接(有缩略图浮层、无 title)不命中。
  • 只复制绝对路径,没有相对路径 / 文件名 / 文件内容 / 另存为。
  • 不处理超链接、不处理文件树(侧边栏)内的右键。
  • 未做 canOpenWorkspacePath 预检:文件不在工作区时,菜单仍会弹出、操作会失败并提示。

踩坑记录(给后来者)

  1. client 插件的 apply 绝不能抛异常,也不能等任何服务。
    DSH 的 web boot 把非 active 条目当致命错误。静态 inject 会让 fiber 永远 pending;apply 里同步调 ctx.effect(...) + locale.register(...) 抛错则让 fiber failed —— 两者都会让整个 GUI 打不开(crash-*-web-boot.log: web boot: 1 entry did not activate / &lt;插件&gt;: failed)。正确姿势:factory 先挂一个 no-op exports.apply,真实实现包在 try 里;apply 只做 DOM/React,服务延迟到事件发生时惰性读取。
  2. ctx.inject 要一个一个注。 把 [&quot;slots&quot;,&quot;remote&quot;,&quot;sessions&quot;,&quot;locale&quot;] 一次性交给一个 ctx.inject,只要有一个名字对不上就永远不回调,整条链路静默失效且不报错。改成每个服务一条 ctx.inject([name], cb) 后立刻正常。
  3. locale.bind(ns)(key) 未命中时会原样返回 key。 照单全收就会把 open.default 这种裸 key 显示到菜单里。必须判断 返回值 !== key 再采用,否则回退内置字典。
  4. GUI 页面的 origin 是 dsh-app://app,不是 http://127.0.0.1:。浏览器侧对相对路径的 fetch 不一定到得了 host 路由,排查时以 host 半侧写盘的证据为准。
  5. Host 侧路径必须先是绝对路径(它用 path.resolve 按进程 cwd 解析),相对路径要在浏览器侧按会话 cwd 补全。

文件结构

dsh-open-any/
├── package.json          # bundle 清单:dsh.bundle.patch + dsh.client(platform: web)
├── cordis.patch.yml      # 组合层:插入 open-any 这一行
├── icon.svg              # 插件卡片图标
├── src/
│   ├── client.js         # 浏览器半侧:右键监听 + 菜单 + Session Remote / host 路由调用
│   └── host.js           # host 半侧:4 条带信任围栏的路由
├── lib/                  # 构建产物(DSH 实际加载,随仓库提交)
├── scripts/
│   ├── build.mjs         # 构建:语法 + 契约校验
│   ├── verify-client.test.mjs
│   └── verify-host.test.mjs
├── tools/
│   ├── check-host-contract.mjs   # 对真实 app.asar 校验模块与导出名
│   └── probe-open-in-app.mjs     # 真机探测本机应用目录
├── README.md / PROGRESS.md / AGENTS.md
└── LICENSE (MIT)

Host 侧路由(全部先过 connection.requestRejection 信任栅栏,再校验方法、媒体类型、64 KiB 请求体上限与路径存在性):

路由 用途
POST /dsh-open-any/open-as 唤起系统「打开方式」对话框
POST /dsh-open-any/open-file 用系统默认应用打开(Session Remote 不可用时的后备)
POST /dsh-open-any/reveal 在文件管理器中定位
POST /dsh-open-any/diag 诊断上报落盘(%TEMP%\dsh-open-any-diag.log)

License

MIT

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-open-any 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:xl0223/dsh-open-any` 即可。

dsh-open-any 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-open-any 安全吗?

低风险。

dsh-open-any 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-open-any 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

会话与消息
按星标排序,可作替代方案

dsh-desktop

dsh-desktop

为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。

L3 · 安装规范通过 3.0 万 星

openpets

openpets

L4 · 沙盒安装通过 1,274 星

deeptide

deeptide

L4 · 沙盒安装通过 1,104 星

jingyun-dsh

jingyun-dsh

井云 DSH 客户端插件,为 DeepSeek Harness 注入会员登录、订阅支付、算力管控与应用市场,让智能体和技能快速变成可交易商品

L3 · 安装规范通过 1,004 星

study-mate

study-mate

StudyMate 是 DSH 的「学习模式」预设与技能包,为数学、计算机科目定制学习路线、讲解课件与练习评估,跨科目共享记忆。

未标注验证等级 856 星

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。