资源管理器右键开工作区 tsingshitao-nuke/dsh-set-workspace
DeepSeek Harness给 Windows 文件管理器加一个右键菜单:右键文件夹,选 "在此处打开 DSH 工作区",即可把它注册为 DSH…
31.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add tsingshitao-nuke/dsh-set-workspace该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 35 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-set-workspace(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 07:35:05
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 50 处,展示前 42 条)
- 读取本地文件lib/index.js:145
names = readdirSync(root); - 读取本地文件lib/index.js:246
return existsSync(join(dir, 'resources', 'app.asar')); - 读取本地文件lib/index.js:250
if (!pathLike || !existsSync(pathLike)) - 读取本地文件lib/index.js:261
for (const name of readdirSync(dir)) { - 执行外部命令固定命令lib/index.js:295
const r = spawnSync('reg.exe', ['query', root, '/s', '/f', 'DeepSeek Harness', '/d'], { - 读取本地文件lib/index.js:332
if (!root || !existsSync(root)) - 读取本地文件lib/index.js:336
names = readdirSync(root); - 写入本地文件lib/index.js:463
mkdirSync(RUNTIME_DIR, { recursive: true }); - 写入本地文件lib/index.js:464
writeFileSync(RUNTIME_FILE, JSON.stringify({ - 写入本地文件lib/index.js:485
copyFileSync(join(pkg, 'bin', 'set-workspace.cjs'), join(RUNTIME_DIR, 'set-workspace.cjs')); - 执行外部命令固定命令bin/install-context-menu.cjs:49
const r = spawnSync('reg.exe', args, { stdio: 'ignore', windowsHide: true }) - 写入本地文件bin/install-context-menu.cjs:65
mkdirSync(DEST, { recursive: true }) - 写入本地文件bin/install-context-menu.cjs:66
copyFileSync(join(SRC, 'set-workspace.cjs'), join(DEST, 'set-workspace.cjs')) - 删除本地文件bin/install-context-menu.cjs:68
rmSync(join(DEST, 'focus-dsh.ps1'), { force: true }) - 写入本地文件bin/install-context-menu.cjs:71
writeFileSync(join(DEST, 'config.json'), JSON.stringify({ ui: 'browser' }, null, 2) + '\n', 'utf8') - 写入本地文件bin/install-context-menu.cjs:75
if (existsSync(icoSrc)) copyFileSync(icoSrc, join(DEST, 'dsh-whale.ico')) - 读取本地文件bin/install-context-menu.cjs:75
if (existsSync(icoSrc)) copyFileSync(icoSrc, join(DEST, 'dsh-whale.ico')) - 写入本地文件bin/install-context-menu.cjs:80
writeFileSync( - 读取本地文件bin/install-context-menu.cjs:102
if (existsSync(ico)) reg(['add', key, '/v', 'Icon', '/t', 'REG_SZ', '/d', ico, '/f']) - 读取本地文件bin/set-workspace.cjs:79
const text = readFileSync(CREDENTIALS_FILE, 'utf8') - 读取本地文件bin/set-workspace.cjs:148
return { ...fallback, ...JSON.parse(readFileSync(file, 'utf8')) } - 执行外部命令固定命令bin/set-workspace.cjs:185
const child = spawn( - 执行外部命令来自配置/变量bin/set-workspace.cjs:200
const child = spawn(command, args, { detached: true, stdio: 'ignore', cwd }) - 执行外部命令固定命令bin/set-workspace.cjs:212
const child = spawn( - 读取本地文件bin/set-workspace.cjs:235
return Boolean(file) && existsSync(file) - 读取本地文件bin/set-workspace.cjs:250
if (existsSync(join(dir, 'resources', 'app.asar'))) return dir - 读取本地文件bin/set-workspace.cjs:262
names = readdirSync(root) - 执行外部命令固定命令bin/set-workspace.cjs:291
const r = spawnSync('reg.exe', ['query', root, '/s', '/f', 'DeepSeek Harness', '/d'], { - 读取本地文件bin/set-workspace.cjs:333
if (!root || !existsSync(root)) continue - 执行外部命令固定命令bin/set-workspace.cjs:376
const r = spawnSync('tasklist.exe', ['/FO', 'CSV', '/NH'], { encoding: 'utf8', windowsHide: true, maxBuffer: 8 * 1024 * 1024 }) - 执行外部命令固定命令bin/set-workspace.cjs:386
const q = spawnSync( - 发起网络请求bin/set-workspace.cjs:530
const res = await fetch(url, { method: 'POST', headers, body: JSON.stringify(body) }) - 读取本地文件src/index.ts:148
names = readdirSync(root) - 读取本地文件src/index.ts:245
return existsSync(join(dir, 'resources', 'app.asar')) - 读取本地文件src/index.ts:250
if (!pathLike || !existsSync(pathLike)) return null - 读取本地文件src/index.ts:259
for (const name of readdirSync(dir)) { - 执行外部命令固定命令src/index.ts:290
const r = spawnSync('reg.exe', ['query', root, '/s', '/f', 'DeepSeek Harness', '/d'], { - 读取本地文件src/index.ts:325
if (!root || !existsSync(root)) return '' - 读取本地文件src/index.ts:328
names = readdirSync(root) - 写入本地文件src/index.ts:480
mkdirSync(RUNTIME_DIR, { recursive: true }) - 写入本地文件src/index.ts:481
writeFileSync( - 写入本地文件src/index.ts:510
copyFileSync(join(pkg, 'bin', 'set-workspace.cjs'), join(RUNTIME_DIR, 'set-workspace.cjs'))
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-runtime给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 右键文件夹注册工作区
- 启动并切换页面
在 Windows 资源管理器里右键文件夹,就能把它作为 DeepSeek Harness(DSH)工作区打开:注册、启动 DSH,再把页面切过去。资源管理器右键「在此处打开 DSH 工作区」。
README
由 DeepSeek 最新模型翻译生成dsh-set-workspace
给 Windows 文件管理器加一个右键菜单:右键文件夹,选 "在此处打开 DSH 工作区",即可把它注册为 DSH 工作区、在其中开启会话,并把 DSH 页面切换到该工作区。
非官方社区项目,与 DeepSeek 无关联、未获其背书。
功能
- 在文件管理器里右键文件夹,选择"在此处打开 DSH 工作区"。
- 若 DSH 未运行,桥接脚本会拉起它——官方 DeepSeek Harness 桌面版、旧版 Tauri DSH Desktop,或官方 CLI;若已在运行(即使最小化或缩进托盘),窗口会被恢复并置前。
- 文件夹被注册为工作区(幂等),并在其中开启一个会话。
- DSH 页面自动切到新工作区(客户端半部分监听该会话并打开它,无需刷新页面)。
- 若你是在普通浏览器里看 DSH(而非桌面窗口),用 --browser 安装,桥接脚本会改为聚焦浏览器页面。
- 菜单与弹窗文案跟随系统 UI 语言(中文 / 英文)。
- 动作经 wscript 隐藏窗口启动器运行,不闪黑框。
- 菜单项使用 DSH 鲸鱼图标。
- 不新增存储、schema 或工具——复用核心工作区注册表与既有 /api RPC。
展开完整文档(README 剩余 1 节)
dsh-set-workspace
给 Windows 文件管理器加一个右键菜单:右键文件夹,选 "在此处打开 DSH 工作区",即可把它注册为 DSH 工作区、在其中开启会话,并把 DSH 页面切换到该工作区。
非官方社区项目,与 DeepSeek 无关联、未获其背书。
功能
- 在文件管理器里右键文件夹,选择"在此处打开 DSH 工作区"。
- 若 DSH 未运行,桥接脚本会拉起它——官方 DeepSeek Harness 桌面版、旧版 Tauri DSH Desktop,或官方 CLI;若已在运行(即使最小化或缩进托盘),窗口会被恢复并置前。
- 文件夹被注册为工作区(幂等),并在其中开启一个会话。
- DSH 页面自动切到新工作区(客户端半部分监听该会话并打开它,无需刷新页面)。
- 若你是在普通浏览器里看 DSH(而非桌面窗口),用 --browser 安装,桥接脚本会改为聚焦浏览器页面。
- 菜单与弹窗文案跟随系统 UI 语言(中文 / 英文)。
- 动作经 wscript 隐藏窗口启动器运行,不闪黑框。
- 菜单项使用 DSH 鲸鱼图标。
- 不新增存储、schema 或工具——复用核心工作区注册表与既有 /api RPC。
安装
环境要求:Windows、PATH 里有 Node.js >= 20、以及一个 DSH 安装——官方 DeepSeek Harness 桌面版、旧版 Tauri DSH Desktop,或官方 CLI(npm i -g @deepseek-ai/dsh)。DSH 未运行时桥接脚本会自动拉起;其启动路径来自 DSH 写出的运行时文件,因此首次使用前需先运行一次 DSH。
一键安装(PowerShell 5.1+ / pwsh):
irm https://raw.githubusercontent.com/tsingshitao-nuke/dsh-set-workspace/main/scripts/install.ps1 | iex
Git Bash / WSL:
curl -fsSL https://raw.githubusercontent.com/tsingshitao-nuke/dsh-set-workspace/main/scripts/install.sh | bash
安装脚本会把 bundle 装进它能找到的每一个 DSH profile:官方桌面版跑的是 desktop profile(~/.dsh/profiles/desktop),dsh web 跑的是 web。两者可能同时存在,右键菜单对正在运行的那一个都有效。
手动安装(官方桌面版):
1. 把 bundle 装进 desktop profile
dsh plugin --profile desktop add github:tsingshitao-nuke/dsh-set-workspace
2. 注册文件管理器右键菜单,然后重启 DSH,让 host 半部分发布端口
node ~/.dsh/profiles/desktop/node_modules/dsh-set-workspace/bin/install-context-menu.cjs
手动安装(dsh web profile):把上面的 --profile desktop 与路径换成 web 即可。
移除菜单(保留 bundle):
node ~/.dsh/profiles/desktop/node_modules/dsh-set-workspace/bin/install-context-menu.cjs --uninstall
工作原理
文件管理器右键 └─ wscript launch-hidden.vbs "%1" (隐藏窗口) └─ node set-workspace.cjs "" ├─ 读 ~/.dsh/dsh-set-workspace/runtime.json (端口 + 启动命令) ├─ 启动 DSH 桌面版——未运行则启动;已运行则由应用自带的 │ 单实例 second-instance 处理器恢复、显示并聚焦其窗口 │ (与 VS Code「通过 Code 打开」同款机制) ├─ 逐个探测回环端口(记录端口、其它 profile、实际在听的 DSH │ 进程、19387/3080),选择能应答的那一个 ├─ POST /api/workspace/create { request: { path } } (幂等) ├─ POST /api/session/create { workspaceId, sessionId: "dsw-open-…" } └─ MessageBox 确认
DSH 客户端半部分监听会话列表,打开该 "dsw-open-…" 会话,页面即切到该工作区。
本 bundle 是标准的 host/client 双半结构 DSH 包。host 半部分(src/index.ts)把当前 webserver 端口与桌面启动命令写到 ~/.dsh/dsh-set-workspace/runtime.json;客户端半部分(src/client/index.ts)负责切换。桥接脚本、鲸鱼图标与启动器复制到 ~/.dsh/dsh-set-workspace/(无空格、重装后仍稳定的目录);注册表项位于 HKCU\Software\Classes\Directory\shell(无需管理员权限)。
兼容性
- 官方 DeepSeek Harness 桌面版(Electron,deepseek-ai/deepseek-harness → apps/desktop):应用把运行时打进 resources/app.asar,并以子进程方式启动它(…/app.asar/dsh/node_modules/@deepseek-ai/dsh-desktop-host/lib/index.js)。host 半部分先按内核自身的启动参数识别该布局,再回退到当前可执行文件,最后回退到 Windows 安装注册信息(DisplayIcon/InstallLocation/UninstallString),记录 \DeepSeek Harness.exe。DSH 未运行时再次启动该 exe 即可拉起;已运行时由应用自身的 requestSingleInstanceLock + second-instance 处理器(Electron 标准行为,与 VS Code 同款)恢复、显示并聚焦窗口。桌面版默认端口 19387。
- 旧版 DSH Desktop(Tauri):/dsh-desktop/... + /dsh-tauri-app.exe 依旧能被识别并以同样方式启动。
- 官方 CLI / npm 安装(npm i -g @deepseek-ai/dsh,DSH 在浏览器里访问):host 记录 dsh web 启动命令(即当前内核所用的同一个 node + lib/bin.js,带 --no-open --host 127.0.0.1 --port );桥接脚本在 DSH 未运行时用它自举启动,并通过浏览器页面聚焦——无需桌面窗口。
- 陈旧的 runtime 文件会自愈:升级或迁移安装(例如从已删除的 Tauri 目录换到官方 Electron 版)后,记录的端口与启动程序都会失效。此时桥接脚本会重新发现实际在听的端口,并重新寻找当前安装——config.json 覆盖({"launch":{"exe":"…"}})、在运行的桌面进程、记录的安装位置、Windows 注册信息、或旧启动程序所在目录的兄弟目录。
- 启动方式在 host 每次启动时重新探测,同一插件可自适应你升级到的任意安装形态。
构建
npm install
npm run build # host(tsc)+ client(tsdown -> lib/client.js)
npm run typecheck
npm test # 启动方式探测 + README 测试(Node 22+,使用 --experimental-strip-types)
npm run test:bridge # 可选:对正在运行的 DSH 做一次端到端桥接测试
已知限制
- Windows 11 下,第三方 Directory\shell 项可能出现在"显示更多选项"(Shift+F10)而非顶级菜单。要放到顶级需 COM IContextMenu 处理器,本插件未提供。
- 桥接脚本经回环地址访问 host。host 未运行时会自动拉起;但若 DSH 从未运行过(没有记录启动路径),则回退为提示你先手动启动 DSH。
- 桌面版关闭窗口是隐藏而非退出;右键菜单复用应用自身的单实例聚焦机制,dsh://open 仍是应用自带的唤起窗口方式。
- 浏览器模式会聚焦浏览器并打开 DSH 页面;Windows 没有跨浏览器「激活某个已存在标签页」的 API,因此可能新开一个标签页而不是切到已有的那个。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
tsingshitao-nuke/dsh-set-workspace
给 Windows 文件管理器加一个右键菜单:右键文件夹,选 "在此处打开 DSH 工作区",即可把它注册为 DSH…
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目