在侧栏内编辑代码、管理 Git 并开终端,与聊天同屏协作
30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add LiangshouX/dsh-ide-workbench该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · search
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 66 处,展示前 51 条)
- 读取本地文件src/index.js:316
collect(JSON.parse(readFileSync(settingsFile(), 'utf8'))) - 读取本地文件src/index.js:402
const info = await stat(candidate) - 读取本地文件src/index.js:462
const info = await stat(absolute) - 删除本地文件src/index.js:632
await unlink(resolveInside(env.workspaceRoot, path)).catch(() => {}) - 执行外部命令来自配置/变量src/host/git.js:69
child = spawn(executable, argv, { - 读取本地文件src/host/settings-store.js:320
const text = await readFile(settingsFile(), 'utf8') - 写入本地文件src/host/settings-store.js:324
await copyFile(settingsFile(), `${settingsFile()}.v${parsed.version ?? 1}.bak.json`).catch(() => {}) - 写入本地文件src/host/settings-store.js:401
await mkdir(dirname(file), { recursive: true }) - 写入本地文件src/host/settings-store.js:403
await writeFile(temp, `${JSON.stringify(snapshot, null, 2)}\n`, 'utf8') - 写入本地文件src/host/settings-store.js:404
await rename(temp, file) - 读取本地文件src/host/idea.js:89
try { file = await realpath(requested) } catch { - 读取本地文件src/host/idea.js:94
try { info = await stat(file) } catch { - 读取本地文件src/host/workspace.js:40
real = await realpath(input) - 读取本地文件src/host/workspace.js:44
const info = await stat(real) - 读取本地文件src/host/workspace.js:123
isRepo: existsSync(join(absolute, '.git')), - 读取本地文件src/host/workspace.js:129
entries = await readdir(absolute, { withFileTypes: true }) - 读取本地文件src/host/workspace.js:141
isRepo: existsSync(join(child, '.git')), - 读取本地文件src/host/workspace.js:290
info = await stat(absolute) - 写入本地文件src/host/workspace.js:408
await writeFile(temp, buffer) - 写入本地文件src/host/workspace.js:409
await rename(temp, absolute) - 删除本地文件src/host/workspace.js:411
await unlink(temp).catch(() => {}) - 执行外部命令来自配置/变量src/host/workspace.js:436
const child = spawn(command, args, { - 执行外部命令来自配置/变量src/host/workspace.js:513
child = spawn(command, { - 读取本地文件src/host/fileops.js:42
return await lstat(path) - 读取本地文件src/host/fileops.js:75
const info = await lstat(source) - 写入本地文件src/host/fileops.js:98
await mkdir(dest) - 写入本地文件src/host/fileops.js:102
await writeFile(dest, content, { encoding: 'utf8', flag: 'wx' }) - 写入本地文件src/host/fileops.js:123
await rename(source, dest) - 删除本地文件递归src/host/fileops.js:180
else if (conflict === 'overwrite') await rm(dest, { recursive: true, force: true }) - 写入本地文件src/host/fileops.js:187
await rename(source, dest) - 删除本地文件递归src/host/fileops.js:192
await rm(source, { recursive: true, force: true }) - 执行外部命令固定命令src/host/fileops.js:218
child = spawn('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', script], { windowsHide: true }) - 删除本地文件递归src/host/fileops.js:254
if (!trashed) await rm(source, { recursive: true, force: false }) - 读取本地文件src/host/fileops.js:296
existing = await readFile(file, 'utf8') - 写入本地文件src/host/fileops.js:303
await appendFile(file, `${prefix}${line}\n`, 'utf8') - 读取本地文件src/host/search.js:57
entries = await readdir(dir, { withFileTypes: true }) - 读取本地文件src/host/search.js:279
buffer = await readFile(absolute) - 读取本地文件src/host/search.js:359
buffer = await readFile(absolute) - 读取本地文件src/host/lsp.js:707
if (existsSync(join(dir, 'package.json'))) return dir - 读取本地文件src/host/lsp.js:724
const manifest = JSON.parse(readFileSync(join(packageDir, 'package.json'), 'utf8')) - 读取本地文件src/host/lsp.js:745
if (!existsSync(binPath) && scriptPath === null) return null - 读取本地文件src/host/lsp.js:746
return { binPath: existsSync(binPath) ? binPath : scriptPath, scriptPath } - 读取本地文件src/host/lsp.js:768
if (existsSync(candidate)) return candidate - 读取本地文件src/host/lsp.js:770
accessSync(candidate, constants.X_OK) - 读取本地文件src/host/java-runtime.js:121
return statSync(path) - 读取本地文件src/host/java-runtime.js:126
return readdirSync(path, { withFileTypes: true }) - 读取本地文件src/host/java-runtime.js:131
return readFileSync(path, 'utf8') - 删除本地文件递归src/host/java-runtime.js:136
rmSync(path, { recursive: true, force: true }) - 写入本地文件src/host/java-runtime.js:141
writeFileSync(path, text, 'utf8') - 写入本地文件src/host/java-runtime.js:146
mkdirSync(path, options) - 写入本地文件src/host/java-runtime.js:151
renameSync(from, to)
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成IDE Workbench
IDE Workbench
把 JetBrains 式 IDE 工作区搬进 DeepSeek Harness 的右侧栏。
Project / Commit / Git / Terminal 四个工具窗围绕插件自带的编辑器,与聊天同屏协作——文件、代码行、提交和终端都留在对话旁边,不用来回切换窗口。
npm 包 · MIT 许可证 · DSH ≥ 0.1.7 · Windows / macOS / Linux
简体中文 · English
IDE Workbench 概览:Commit 面板、编辑器中的 Diff 与 Git 日志同屏
为什么是 IDE Workbench?
DSH 的对话很适合「边聊边改」,但真正改代码时还是要在聊天、终端、文件管理器和 IDE 之间来回跳。IDE Workbench 把一整套 JetBrains 风格的工作区放进 DSH 的右侧栏,并且始终和当前会话在一起:
- 与聊天同屏:聊天里的文件链接直接在工作台打开并定位到行;反过来,在项目树或编辑器里右键 发送到聊天框,就会在聊天输入框里插入 @路径 引用——选中代码时连同行号和代码一起带上。
展开完整文档(README 剩余 1 节)
IDE Workbench IDE Workbench 把 JetBrains 式 IDE 工作区搬进 DeepSeek Harness 的右侧栏。 Project / Commit / Git / Terminal 四个工具窗围绕插件自带的编辑器,与聊天同屏协作——文件、代码行、提交和终端都留在对话旁边,不用来回切换窗口。 npm 包 · MIT 许可证 · DSH ≥ 0.1.7 · Windows / macOS / Linux 简体中文 · English IDE Workbench 概览:Commit 面板、编辑器中的 Diff 与 Git 日志同屏 为什么是 IDE Workbench? DSH 的对话很适合「边聊边改」,但真正改代码时还是要在聊天、终端、文件管理器和 IDE 之间来回跳。IDE Workbench 把一整套 JetBrains 风格的工作区放进 DSH 的右侧栏,并且始终和当前会话在一起: - 与聊天同屏:聊天里的文件链接直接在工作台打开并定位到行;反过来,在项目树或编辑器里右键 发送到聊天框,就会在聊天输入框里插入 @路径 引用——选中代码时连同行号和代码一起带上。 - IDEA 手感:Alt+1 / Alt+0 / Alt+9 / Alt+F12 切换工具窗;单击预览、双击固定标签;Alt+Insert 新建、F2 重命名、Ctrl+K 聚焦提交、Ctrl+Shift+K 推送。 - 真实仓库与终端:Git 全部走系统 CLI(凭证管理器、hooks、git config 原样生效);终端是真实 PTY;文件读写经过路径围栏,保存保留原编码与换行符。 - 跟随 DSH:只用宿主的主题令牌,明暗/皮肤自动跟随;右侧栏原生 tab、会话连续性、设置页;DSH Desktop 与 Web profile 都能安装。 功能一览 | 界面 | 功能 | | Project 工具窗 | Project 工具窗。 惰性加载的文件树,JetBrains 状态色(红 = 未跟踪、绿 = 新增、蓝 = 已修改,目录递归染色)。单击选中、双击打开或展开;Ctrl/Shift 多选、拖拽移动(Ctrl = 复制)。新建文件/目录、F2 重命名、Delete 删除(优先进回收站)、F5 复制、F6 移动、Ctrl+X/C/V。收藏夹、树内过滤与全项目文件名快速定位;右键菜单直接 发送到聊天框。 | | CodeMirror 编辑器 | 内置编辑器。 CodeMirror 6,语法高亮;自动 / 始终可编辑 / 始终只读三档打开模式,自动档下 1 MiB 以内的文本可直接编辑(Markdown 默认进渲染预览)。Ctrl+S 原子保存并保留 UTF-8 / BOM / UTF-16 与 CRLF,脏点与「未保存」提示清晰。外部程序改动触发冲突条,可「从磁盘重新加载」或「覆盖磁盘」;同一文件被自己保存后不再误报。编辑器内查找/替换、光标行列与编码状态栏。 | | Markdown 预览与大纲 | Markdown 预览。 用宿主 MarkdownText 渲染,表格、任务列表、代码卡与 DSH 聊天排版一致。默认直接进入渲染预览,「预览 / 源码 / 编辑」一键切换;文档大纲可跳转并跟随滚动高亮。打开文档不再先落到源码编辑器里。 | | 全项目查找 | 全项目查找与快速打开。 Ctrl+Shift+F 全项目搜索(被外层占用时用 Ctrl+Alt+F),Aa / 全词 / 正则三个开关全部可用。结果按文件分组并显示命中数、耗时;点击命中直接在编辑器中定位到行。Ctrl+P / Ctrl+Shift+N 按文件名快速打开全项目文件。 | | Commit 工具窗 | Commit 工具窗。 Changes / Unversioned 两组,勾选即纳入本次提交且列表不跳动;变更列表(Changelist)、按目录分组。Change View(工作区 / 上次修订 / 最新提交)+ 跳转到源码 + 回滚;Diff 工具栏支持行/块级暂存。提交、提交并推送、Amend、最近提交消息、可选 pre-commit 命令(测试 / 优化导入 / 清理)。 | | 统一 Diff | Diff。 并排 / 统一两种布局,单词级高亮,未变更块可折叠。与工作区、上次修订、任意提交或两个提交(Ctrl+点击)比较;可直接暂存/丢弃单个 hunk。HTML/二进制文件走 DSH 侧栏或系统默认程序预览。 | | Git 历史与详情抽屉 | Git 历史。 分页提交表 + 泳道式 commit graph;按分支 / 作者 / 消息 / 路径过滤。单击选中、双击(或 Enter)打开右侧详情抽屉:元信息、完整消息、变更文件,点文件看逐文件 Diff。复制 SHA、检出、回退、两提交 Compare;从项目树可对指定路径定向查看历史。 | | 终端 | Terminal。 真实 PTY(WebSocket + xterm.js),支持多会话、重命名、关闭;shell profiles(PowerShell / Git Bash / cmd / …)。停靠 ↔ 全屏、面板缩放后自动按新宽度重排,并向 PTY 发送 resize。选中即复制、Ctrl+Shift+V 粘贴;工作目录跟随项目根或当前文件。 | | 编辑器右键发送到聊天框 | 与聊天协作。 聊天里的文件链接默认在工作台打开并定位 #L24;工作区外自动降级到 DSH 自带侧栏。项目树 / 编辑器右键 发送到聊天框:文件或文件夹插入 @路径 引用;选中代码时追加行号与代码块。HTML 可在 DSH 侧栏或系统浏览器预览;不抢走聊天输入的焦点。 | | IDE 工作台设置 | 设置与快捷键。 工具窗/命令快捷键、默认 shell、终端字号、打开模式、Markdown 预览、隐藏/忽略文件、聊天链接行为、外部 IDE 路径、git 路径与提交命令。修改后约 300 ms 自动落盘并显示“已保存”;关闭面板前不会丢失最后一次改动。设置页固定头部与关闭按钮,长表单滚动时不迷路。 | 安装 前置:DSH ≥ 0.1.7(DSH Desktop 0.2.x 或 Web profile 均可)。插件已发布到 npm:dsh-ide-workbench。 方式一:DSH Desktop(推荐) 1. 打开 设置 → 插件。 2. 点 添加插件,在包名输入框填入 dsh-ide-workbench(可带版本号,如 dsh-ide-workbench@0.4.0)。 3. 安装完成后,在会话头部点 IDE 工作台按钮(或侧栏底部的常驻入口)打开。 Desktop 的 profile 由 Electron 应用独占管理,dsh plugin --profile desktop ... 会被拒绝——桌面端请走插件页安装。 方式二:CLI / npm 安装到指定 profile(例如 web) dsh plugin --profile web add dsh-ide-workbench 只装指定版本 dsh plugin --profile web add dsh-ide-workbench@0.4.0 安装后重启该 profile;如果 bundle 尚未启用,在 设置 → 插件 里打开 IDE Workbench。 方式三:Git 仓库或本地目录 直接从 GitHub 安装(仓库自带构建好的 dist/client.js) dsh plugin --profile web add git+https://github.com/LiangshouX/dsh-ide-workbench.git 或克隆后从本地目录安装 git clone https://github.com/LiangshouX/dsh-ide-workbench.git dsh plugin --profile web add ./dsh-ide-workbench 安装后 - 入口有三处:会话头部按钮、新建会话行、左侧栏底部动作。 - 工作台是右侧栏的原生 tab,可以和聊天并排;在 F11 全屏与停靠之间切换。 - 第一次打开会自动选择当前 DSH 工作区;项目面板头部可切换 IDE 项目根(工作区根或一级子目录)。 快速上手 1. 打开工作台:点会话头部的 IDE 图标,或按 Alt+1 直接聚焦 Project。 2. 选项目:项目面板头部的下拉选择工作区根或某个一级子目录(含 .git 的子目录带 Git 徽标)。 3. 开始工作:双击文件打开;Ctrl+Shift+F 搜代码、Alt+0 提交、Alt+F12 开终端、Ctrl+K 写提交信息。 常用快捷键 | 动作 | 快捷键 | | 切换工具窗 | Alt+1 Project · Alt+0 Commit · Alt+9 Git · Alt+F12 Terminal | | 聚焦提交消息 / 推送 | Ctrl+K / Ctrl+Shift+K | | 全项目查找 / 备用键 | Ctrl+Shift+F / Ctrl+Alt+F | | 快速打开文件 | Ctrl+P 或 Ctrl+Shift+N | | 全屏 / 停靠 | F11 | | 隐藏全部工具窗 | Ctrl+Shift+F12 | | 编辑器内查找 | Ctrl+F、F3 | | 保存 / 关闭标签 | Ctrl+S / Ctrl+W | | 文件操作 | Alt+Insert 新建 · F2 重命名 · F5 复制 · F6 移动 · Delete 删除 · Ctrl+Alt+Shift+C 复制路径 | | 提交详情 | Ctrl+Alt+D | 工具窗、提交、推送、查找与快速打开快捷键可在 设置 → IDE 工作台 中重绑;F2 / F5 / F6 / Delete、Ctrl+Alt+D 与 Ctrl+Shift+F12 使用默认值(也可在设置文档中手动修改)。 工作区 vs IDE 项目根 DSH 工作区常常是容器:根本身不是 Git 仓库,一级子目录才是。项目面板头部的项目名下拉可以选择 工作区根 或任一一级子目录;选择会按工作区持久化(projectRoots),切换后 Project 树、Git/Commit 数据、新终端会话的 cwd 与保存的标签状态一并切换。当前目录不是仓库时,四个窗口都会给出「选择 Git 子项目」引导。 与 DSH 的集成 - 入口:会话头部按钮、新建会话行、侧栏底部常驻动作三处均可打开,使用原生 sidebar.right.pane.tab 与聊天并排;皮肤隐藏头部工具时底部入口仍可用。 - 会话连续性:同一 DSH 工作区的会话共享一份工作台状态——切换会话(含新建)保持文件树、打开的标签与 Git 上下文;工作台在被离开的会话中可见时,进入新会话会自动重新打开。切换对话不销毁终端;切换 Session 时终端进程与编辑器撤销栈会重建。 - 聊天文件链接:用户 @ 引用与助手 Markdown 链接默认在工作台打开,展开文件树并定位到 #L24 这样的行号;工作区外的文件自动降级到 DSH 自带侧栏;在工作区内但不在当前 IDE 项目内时,先询问是否把 IDE 项目拓宽到工作区根。设置 → IDE 工作台 → 聊天文件链接可切回始终使用 DSH 侧栏。 - 发送到聊天框:在项目树或编辑器里右键,把一个或多个文件/文件夹、或选中的代码行送进聊天输入框。文件/文件夹以 @路径 形式成为引用;代码行会附带 (L起-L止) 与代码块。 - 预览降级:右键文件或标签 → 在侧栏标签中打开,用 DSH 自带预览查看;HTML 文件右上角提供「在 DSH 侧栏预览」和「用默认浏览器打开」两个浮动动作。 - 主题:仅使用 --dsw-alias- 令牌,明暗与皮肤完全跟随宿主。 安全与数据 - Git 全部走系统 CLI(argv 数组,绝无 shell 字符串),凭证管理器、hooks 与 git config 原样生效;路径从 status --porcelain=v2 -z、diff --numstat -z 与 log 记录流解析。 - 文件读写经过路径围栏(越界 403),保存原子化并保留原编码与换行符。 - 每个 HTTP / WebSocket 路由都经过与 /api 相同的 Connection 准入围栏。 - 设置持久化在 $DSH_HOME/ide-workbench/settings.json(~/.dsh;宿主导出 DSH_PROFILE_DIR 时使用 profile 目录),含快捷键、Shell、git 路径、打开模式、UI 几何、每工作区展开目录与打开标签。 已知限制 - 项目选择器只扫描工作区一级子目录,不递归发现仓库。 - DSH 重启不恢复终端会话(PTY 随进程结束)。 - 宿主侧条图标不支持数字徽标(徽标绘制在插件自绘的 stripe 上)。 - Markdown 预览暂不把相对图片 / 链接重写为本地路径(http(s) 外链可用)。 - 不做:交互式 rebase、merge 冲突三方编辑、stash、blame、fetch/pull、分屏终端。 - Ctrl+Shift+F 可能被 DSH / 浏览器外层截获 → 提供备用键 Ctrl+Alt+F。 - 发送到聊天框依赖宿主向会话槽位发布的聊天输入动作;宿主未提供时会提示「暂时无法写入聊天输入框」,不会静默丢弃。代码行引用以 @文件 (Lx-Ly) + 代码块表达(@ 语法本身没有行号后缀)。 - 编辑器右键菜单只在有选中内容时接管系统菜单(提供「发送到聊天框 / 复制」),空选区保留原生菜单。 开发 npm install npm run build # 将 src/client 打包为 dist/client.js(React 外置,xterm 内联) npm test # 宿主 git/diff/graph + 组件 SSR + 客户端回归测试 源码结构: src/index.js 宿主半边:围栏 HTTP API + 终端 WebSocket src/host/git.js git CLI 适配器,status/log/numstat 解析 src/host/workspace.js 路径围栏、目录树、文件预览、shell src/host/fileops.js 新建/重命名/复制/移动/删除(回收站) src/host/settings-store.js JSON 设置持久化 src/client/index.jsx 客户端入口:侧栏 tab、快捷键、聊天输入桥 src/client/store.js 工作台状态机(项目、标签、搜索、Git、设置) src/client/.jsx 工具窗与编辑器 UI src/client/chat-bridge.js 发送到聊天框:@ 引用与代码块 提交前请重新构建 dist/client.js 并跑完 npm test(当前 180 条测试)。 README 的截图与徽标条存放在 docs/readme/,通过 main 分支的 raw URL 引用——DSH 与 npm 的 Markdown 渲染都不解析相对图片路径,raw URL 同时兼容 GitHub、IDEA 与 Typora。顶部的 badges.svg 把 npm / 许可证 / DSH / 平台合成一张图,因为 DSH 会把独立图片渲染成块级元素,四个单独的徽章会各占一行。截图源文件在 qa-screenshots/(工作区仓库),修改后按 720px 宽导出并更新 docs/readme/。 反馈与许可 - 问题 / 建议:GitHub Issues - 发布记录:GitHub Releases · npm versions - 许可证:MIT。xterm.js 与 ws 遵循各自的 MIT 许可。 截图来自 DSH Desktop 0.2.1(Windows 11,亮色主题);界面语言跟随 DSH 设置。示例项目为测试用 Git 沙箱。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
LiangshouX/dsh-ide-workbench
在侧栏内编辑代码、管理 Git 并开终端,与聊天同屏协作
相关插件 · 搜索 / 抓取
LLM 知识平台Tencent/WeKnora
概览 ·快速开始 ·新特性 ·功能 ·客户端 ·文档 ·开发
★ 36,161已汉化DSH
72.1
智能体记忆系统MemTensor/MemOS
MemOS 2.0 Stardust星尘
★ 12,195已汉化DSH
71.2
跨代理记忆库zilliztech/memsearch
跨平台语义记忆,专为 AI 编程智能体打造。
★ 2,799已汉化DSH
70.9
技能语料库EverMind-AI/SkillCorpus
SkillCorpus 能给你什么
★ 694已汉化DSH
69.7
代码图谱记忆syncable-dev/memtrace-public
你的智能体值得拥有结构化记忆。
★ 509已汉化MCP
67.9
AnySearch 搜索插件anysearch-team/anysearch-dsh
AnySearch 网页搜索服务商,为 DeepSeek Harness(DSH)提供高级搜索工具
★ 457已汉化DSH
66.6