🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

工作区快捷打开 open-dsh-plugins/dsh-open-in-app

DeepSeek Harnessv0.1.2
open-dsh-plugins69 天前有提交已提供中文文档扫描:含敏感能力

用本机已装应用一键打开当前会话的工作区文件夹

29.3/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:npm 同名包「dsh-open-in-app」归属 trewvip-arch/dsh-open-in-app,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add open-dsh-plugins/dsh-open-in-app
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 69 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查⚠ 装前注意

npm 同名包「dsh-open-in-app」归属 trewvip-arch/dsh-open-in-app,装到的可能不是本插件

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-open-in-app @ 0.1.2
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 21:38:20

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 15 处,展示前 15 条)
  • 执行外部命令来自配置/变量
    lib/apps.js:153
    child = spawn(command, args, {
  • 读取本地文件
    lib/apps.js:215
    entries = await readdir(root, { withFileTypes: true });
  • 读取本地文件
    lib/apps.js:246
    entries = await readdir(root, { withFileTypes: true });
  • 读取本地文件
    lib/apps.js:265
    const text = await readFile(path, "utf8");
  • 读取本地文件
    lib/apps.js:283
    entries = await readdir(root);
  • 读取本地文件
    lib/icons.js:86
    const buffer = await readFile(path).catch(() => null);
  • 读取本地文件
    lib/icons.js:103
    const entries = await readdir(resources).catch(() => null);
  • 删除本地文件
    lib/icons.js:127
    await unlink(out).catch(() => { });
  • 删除本地文件
    lib/icons.js:130
    await unlink(out).catch(() => { });
  • 写入本地文件
    lib/icons.js:138
    await mkdir(shotDir).catch(() => null);
  • 读取本地文件
    lib/icons.js:141
    const shots = await readdir(shotDir).catch(() => []);
  • 删除本地文件
    lib/icons.js:173
    await unlink(out).catch(() => { });
  • 读取本地文件
    lib/icons.js:184
    const text = await readFile(path, "utf8").catch(() => null);
  • 读取本地文件
    lib/icons.js:225
    const found = await stat(path).then(() => true).catch(() => false);
  • 读取本地文件
    lib/icons.js:276
    const info = await stat(app.source).catch(() => null);
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 用本机应用打开工作区
  • 支持多种已装应用

dsh web-UI 插件:用已安装的应用(Finder、Terminal、VS Code、Ghostty、Zed……)打开当前会话的工作区文件夹,还带图标

README

由 DeepSeek 最新模型翻译生成
dsh-open-in-app Listed on dsh-plugin.org 面向 DeepSeek Harness(dsh)Web UI 的一个插件:在聊天窗口右上角提供一个按钮,用已安装的应用打开当前会话的工作区文件夹。菜单按终端模拟器和流行 IDE/编辑器白名单整理,分组为“终端应用”和“编辑器与 IDE”。 仓库:github.com/open-dsh-plugins/dsh-open-in-app 截图 open-in-app 控件位于会话头部工具行(聊天窗口右上角),“Session log”按钮旁边。文件夹按钮一键打开工作区——使用你上次为该工作区选择的应用;下拉箭头打开选择菜单,显示最近使用的应用、系统默认文件夹处理器,以及主机上白名单内的终端和编辑器——每一项都带有应用图标: open-in-app 选择菜单:最近使用、系统默认、终端应用与编辑器与 IDE 功能 - 在会话头部工具行(聊天窗口右上角)新增一个 Codex 风格的拆分控件,样式与“Session log”头部按钮一致的胶囊(32px 高、1px 边框、18px 圆角、悬停填充),两段之间用细线分隔:
展开完整文档(README 剩余 1 节)
dsh-open-in-app

Listed on dsh-plugin.org

面向 DeepSeek Harness(dsh)Web UI 的一个插件:在聊天窗口右上角提供一个按钮,用已安装的应用打开当前会话的工作区文件夹。菜单按终端模拟器和流行 IDE/编辑器白名单整理,分组为“终端应用”和“编辑器与 IDE”。

仓库:github.com/open-dsh-plugins/dsh-open-in-app

截图

open-in-app 控件位于会话头部工具行(聊天窗口右上角),“Session log”按钮旁边。文件夹按钮一键打开工作区——使用你上次为该工作区选择的应用;下拉箭头打开选择菜单,显示最近使用的应用、系统默认文件夹处理器,以及主机上白名单内的终端和编辑器——每一项都带有应用图标:

open-in-app 选择菜单:最近使用、系统默认、终端应用与编辑器与 IDE

功能

- 在会话头部工具行(聊天窗口右上角)新增一个 Codex 风格的拆分控件,样式与“Session log”头部按钮一致的胶囊(32px 高、1px 边框、18px 圆角、悬停填充),两段之间用细线分隔:
- 文件夹按钮一键打开工作区——使用你上次为该工作区选择的应用(按 cwd 记录在 localStorage 中,按钮上显示其图标),否则回退到默认编辑器(优先级最高的已安装编辑器——VS Code → Cursor → Windsurf → Zed → IntelliJ IDEA → …——然后是系统默认);
- 下拉箭头打开菜单,包含置顶的“最近使用”条目、一个“系统默认应用”条目(内置 host.openPath 行为;macOS 上是 Finder),以及主机上已安装的白名单终端和编辑器,每一项都带有应用图标(从应用包中以 32px 读取,以 data: URL 传递;无法解析图标的仅显示名称)。“系统默认应用”行显示默认文件夹处理器的真实图标(macOS 是 Finder,Windows 是资源管理器,Linux 是 xdg-mime 默认文件管理器),无法解析时回退为文件夹图标。
- 从菜单选择应用即可用该应用打开当前工作区文件夹:

| 平台 | 应用发现 | 打开命令 | 图标 |
| macOS | /Applications、/System/Applications(+ Utilities)、~/Applications | open -a "" | 通过 sips 将 bundle .icns → 32px PNG;无 icns 的 bundle 用 qlmanage 回退 |
| Windows | %ProgramFiles%、%ProgramFiles(x86)%、%LOCALAPPDATA%\Programs(顶层 .exe) | cmd /c start "" | 通过 PowerShell [System.Drawing.Icon]::ExtractAssociatedIcon 提取内嵌 exe 图标 |
| Linux | /usr/share/applications、/usr/local/share/applications、~/.local/share/applications(.desktop) | gtk-launch (回退到 xdg-open) | freedesktop Icon= 值:绝对路径、hicolor 主题(128→16)、可缩放 svg、pixmaps |

白名单

匹配对应用名(macOS 的 .app 基名、Windows 的 .exe 基名、Linux 的 desktop Name)不区分大小写。只有已安装且匹配的应用会出现在菜单中。

终端应用 — Terminal、iTerm2、Ghostty、Warp、Alacritty、kitty、WezTerm、Hyper、Tabby、Rio、Contour、Foot、Tilix、Terminator、Konsole、GNOME Terminal、xterm、mintty、Windows Terminal、PowerShell、Cmder、ConEmu。

编辑器与 IDE — Visual Studio Code、Cursor、Windsurf、Zed、Xcode、Android Studio、IntelliJ IDEA、PyCharm、WebStorm、GoLand、CLion、PhpStorm、RubyMine、Rider、DataGrip、DataSpell、RustRover、Fleet、Aqua、Visual Studio、Eclipse、NetBeans、Sublime Text、Nova、BBEdit、TextMate、CodeRunner、MacVim、Neovide、Emacs、Lite XL、HBuilderX。

要增删条目,编辑 lib/apps.js 中的 WHITELIST 数组——每个条目为 { id, category, match, exact? },其中 id 是规范显示名(也是原生打开命令必须能找到的名称),match 别名做子串匹配,exact 别名做全名匹配(用于诸如 code 这类会误匹配 CodeRunner 的短名称)。Windows JetBrains 启动器(idea64、pycharm64 等)与 Code.exe 已通过别名覆盖。

架构

- 宿主端(lib/index.js):一个 Cordis 插件,注册一个 Typert Remote 服务 openInApp(通过 Typert Gateway 的 source-mode 回退发现——无需生成 TYPERT manifest):
- openInApp/listApps → { apps, defaultIcon? }:白名单内已安装应用(含展示图标)以及默认文件夹处理器的图标
- openInApp/openWith(path, appId) → 用指定应用打开文件夹
- openInApp/openDefault(path) → 用系统默认方式打开文件夹
- openInApp/openDefaultEditor(path) → 用默认编辑器打开文件夹(见 lib/apps.js 中的 EDITOR_PRIORITY)
- 图标(lib/icons.js):为每个应用以及系统默认文件夹处理器(Finder / Explorer / xdg-mime 默认)解析一个 data:image/* 图标,按平台尽力而为(见上表),按源路径 + mtime 缓存,使重复打开菜单开销很低;失败时缓存为“无”,绝不报错。在 macOS 上,与应用同名的 icns 优先于文件类型 icns(Zed.app 中的 Zed.icns 优先于 Document.icns)。枚举的 source 路径作为不可枚举属性(lib/apps.js)携带,因此 JSON 传输永远不会看到它。
- 客户端(lib/client.js):一个 dsh.client web 模块,通过 ctx.remote.$mount(...) 挂载 Remote 端点,并注册 conversation.session.header.utilities 条目 open-in-app。挂载运行在声明了 remote 的嵌套插件 fiber 中:api-gateway 将每个命名空间注册为点分隔的 cordis 服务(remote.openInApp),一个既挂载又注入自身命名空间的 fiber 会导致加载器死锁。因此消费方通过文档化的非严格 store 访问(ctx.reflect.get("remote.openInApp", false))读取该命名空间。
- Bundle(cordis.patch.yml):一行加载器记录激活宿主端;profile 工具将其作为 profile bundle 引入。

安装

安装已发布到 npm 的包(需该包已发布到 npm registry):

dsh plugin --profile web add dsh-open-in-app

或在包含本仓库本地克隆的目录下执行:

git clone https://github.com/open-dsh-plugins/dsh-open-in-app.git
cd dsh-open-in-app
dsh plugin --profile web add .

然后重启 web 应用(dsh web)——加载器与客户端模块图在启动时组合,新增插件没有热重载。重启后,文件夹按钮会出现在会话标题旁,菜单会显示已安装的应用。

安全说明

- Remote 端点不在特权方法列表中,因此它们与其余 /api 面处于同一浏览器信任边界之后(仅限 loopback / 已配置的可信主机)。
- 打开路径会在宿主机上派生原生进程。文件夹路径来自会话自身的 cwd,即该 agent 正在操作的目录。
- 图标解析仅读取枚举的应用路径(标准应用根目录)以及 freedesktop 图标主题目录;缓冲区上限为 256 KB,原生转换(sips、qlmanage、PowerShell)带有可选的 abort 信号。
- 命令失败(open 退出码、应用缺失)会以菜单中的错误行呈现,而不是抛异常。

开发

- lib/apps.js 与 lib/icons.js 是纯 Node(无 dsh 导入)——可独立测试(node -e 'import("./lib/icons.js").then(m => m.listAppsWithIcons()).then(console.log)')。
- 客户端 bundle 必须保持自包含:它只依赖平台种子词(react、react/jsx-runtime、@deepseek-ai/dsh-client-ui-primitives)。
- 无需重建:没有构建步骤——lib/ 原样发布。
预览分享卡片长什么样 ↓open-dsh-plugins/dsh-open-in-app
分享 · DeepSeek Harness Hub
open-dsh-plugins/dsh-open-in-app

用本机已装应用一键打开当前会话的工作区文件夹

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部