Overview Version History Q & A Rating & Review
DSH Launcher(启动 + 内嵌面板)
DeepSeek Harness 的 VS Code 集成:侧边栏一键下载、检查更新并启动 DSH,把完整 Web GUI 内嵌进 VS Code ,支持文件双向联动。提供完整性检查与自动修复 、保留会话记录的安全卸载 与彻底卸载(连数据一起删) 。不修改 DSH 的 profile(package.json / cordis.patch.yml),卸载即无痕。
功能
🚀 启动器面板(活动栏 ▶ 图标)
显示 DSH 最新版本 / 本地缓存版本 / 运行状态
▶ 启动 DSH(当前版本) :只用本地缓存的版本启动,不联网、不检查、不下载 (秒开);完全没有缓存(首次安装)时自动回退到 npx 现下载并启动 ,等待时间自动延长到 10 分钟
⬇️ 下载 / 🔄 检查更新 :智能两段式逻辑——本地没有 DSH 时自动下载安装(首次安装);本地已有 DSH 时检查 npm 最新版,有新版才下载,已是最新则提示。下载后不会自动重启 ,提示"先 ⏹ 终止,再 ▶ 启动"才生效
🩺 检查完整性 :检查每个缓存版本的结构 (package.json、包自己声明的入口、lib 目录、node_modules/.bin/dsh 链接)、依赖完整性 (对照 package.json 的 dependencies 逐一核对)与入口可运行性 (真实执行 dsh --version)。发现问题时询问是否自动修复 :删除损坏的缓存并重新下载同版本(会话记录不受影响)
🗑 卸载 DSH(保留会话记录) :删除 npx 缓存中的 DSH 程序文件(运行中会先终止服务),完整保留 ~/.dsh 下的全部会话记录、配置与凭据 (sessions / profiles / storages / settings.yaml / .credentials.yaml),重新安装后一键恢复
🔥 彻底卸载(删全部数据) :在卸载弹窗中选择「彻底卸载」并二次确认,除程序文件外连 ~/.dsh 全部数据(会话/配置/凭据)一起删除,不可恢复 ,适合完全清除 DSH 痕迹
点击 ⏹ 终止 DSH 服务 :按端口(默认 3080)精确 定位并终止该实例,不会误杀其它端口上的 dsh(带确认弹窗;已持久化的会话重启后可恢复)
端口守卫:配置的端口已有实例时不重复启动
后台进程独立运行(nohup),关闭 VS Code 不影响 DSH
🖥 内嵌 DSH 面板(完整 Web GUI)
在编辑器标签页打开 (像打开文件一样),不是侧边栏
iframe 嵌入真实 dsh web 前端:聊天、会话、设置、模型、agent preset、全部 DSH 插件原样可用
与浏览器 WebUI 共享同一个运行中的实例 (默认 127.0.0.1:3080)
未运行时打开面板会自动启动(可关)
自动完成 DSH 0.1.5+ 的浏览器会话认证 :新版 Web GUI 的 / 与 /api/** 需要 dsh-auth-* 会话 cookie(由 dsh web 启动时打印的 ?token= 换取)。插件在本地反向代理 的上游请求上注入该 cookie,webview 侧完全无感,不会再看到 dsh web authentication required 的 401 页面。认证材料有两路:① 读本机 ~/.dsh 里的持久签名密钥离线签发 (重启/换实例都有效);② 从启动日志取本次进程的 ?token= 交给代理换取(官方路径)。前者被拒绝时自动改用后者
启动统一使用 dsh web --no-open --port <port>:不再抢占系统浏览器 ,端口显式指定,启动输出留在日志里供插件取令牌
通过本地反向代理加载:代理在 HTML 中注入桥接脚本,实现文件联动(见下)
面板底部显示当前宿主平台、代理端口与认证来源,便于排查
状态栏显示 DSH:3080,点击直接在编辑器打开面板
认证/连接异常时面板给出可操作按钮:↻ 重试 / ⟳ 重启 DSH 并重试 (让插件接管启动以取得令牌)/ 🔗 直连模式
📂 文件双向联动
行为
说明
点击交付文件 chip / 工具文件链接
直接在 VS Code 编辑器打开(Windows 宿主自动经 wslpath 转换路径)
agent 新建文件
按策略自动在编辑器打开(autoOpenCreated)
agent 修改文件
已打开且无未保存修改 的文档自动同步;有未保存修改的绝不覆盖 (syncChangedOpen)
agent 删除文件
自动关闭对应标签,有未保存修改的保留(closeOnDeleted)
监听目录
可配置(watchDirs,默认跟随 workspace 设置),自动忽略 node_modules/.git/.dsh/.npm
安装
命令面板(Ctrl+Shift+P)→ Extensions: Install from VSIX...
选择 dsh-launcher-1.2.0.vsix
活动栏出现 ▶ DSH 图标(DSH 启动器视图);内嵌面板通过状态栏或启动器里的按钮打开
使用
下载 / 更新 :DSH 启动器 → "⬇️ 下载 / 🔄 检查更新"(首次会自动下载安装)
启动 :DSH 启动器 → "▶ 启动 DSH(当前版本)"
完整性检查 :DSH 启动器 → "🩺 检查完整性";发现问题时确认后自动修复
卸载 :DSH 启动器 → "🗑 卸载 DSH(保留会话记录)"→ 弹窗选「卸载(保留会话)」或「彻底卸载(删全部数据)」(后者需二次确认,点右上角 × 取消)
内嵌 :状态栏 DSH:3080 或启动器里"🖥 打开内嵌 DSH 面板"→ 在编辑器标签页 打开完整 Web GUI
浏览器 :启动器面板 → "🌐 在浏览器打开"(0.1.5+ 会带上本次启动的 ?token=,因此不会出现 401 页面;若 DSH 不是插件启动的,会提示先重启 DSH 以取得令牌)
日志:WSL 内 /tmp/dsh-launcher.log(含 dsh web: http://127.0.0.1:3080/?token=…,插件据此登录)
配置(设置 → 搜索 dshLauncher)
设置
默认值
说明
dshLauncher.port
3080
DSH Web GUI 端口
dshLauncher.workspace
/home/young1839/test
启动时工作目录(新会话默认工作区)
dshLauncher.wslDistro
Ubuntu
WSL 发行版(仅 Windows 扩展宿主)
dshLauncher.autoStartOnOpen
true
打开面板时自动启动
dshLauncher.watchDirs
[]
文件联动监听目录(留空=workspace)
dshLauncher.autoOpenCreated
true
新建文件自动打开
dshLauncher.syncChangedOpen
true
无未保存修改的文档自动同步
dshLauncher.closeOnDeleted
true
删除文件关闭标签
工作原理
启动 (v1.2.0 起):优先 npx 缓存 dsh → 其次 npm 全局安装的 dsh(真实部署)→ 最后才 npx --yes @deepseek-ai/dsh@latest web 兜底下载;统一追加 --no-open --port <port>(0.1.5+ 默认会打开系统浏览器,插件改为自己决定何时打开)。工作目录不存在时不再 cd 短路;端口守卫 + nohup;启动成功或已在运行都会自动打开内嵌面板
下载/更新 (v1.1.4 起识别全局安装):存在 npm 全局安装 → npm install -g @deepseek-ai/dsh@latest 更新真正在跑的那份;无全局安装 → 本地无缓存时 npx 直接下载,有缓存时先查 npm 最新版、有新版才下载(多版本并存,启动始终取最新);全程有进度心跳提示
完整性检查 (v1.2.0 起版本无关):逐个检查 npx 缓存版本——① 结构:package.json / 入口(取包自己声明的 bin)/ lib 目录 / .bin/dsh 链接;② 依赖:对照 dependencies 逐一核对平铺 node_modules;③ 运行:真实执行 dsh --version。修复 :删除损坏的 npx 缓存根并重新下载同版本
卸载 :删除 ~/.npm/_npx/* 中含 DSH 的缓存目录(先按端口精确终止运行中的服务);~/.dsh(会话/配置/凭据)原样保留 ,重装后立即可恢复历史会话;彻底卸载 则额外删除 ~/.dsh 全部数据(不可恢复)
内嵌 (v1.2.0 起自动登录):本地反向代理(动态端口)转发到 DSH 实例,HTML 响应注入桥接脚本;代理把 Host/Origin 改写成上游 authority 以通过 DSH 的信任栅栏,并注入 dsh-auth-* 会话 cookie(同时剥掉浏览器里的同名旧 cookie,避免抢先命中 401);HTTP 与 WebSocket 升级(/api/events.mux、/api/events.host 实时事件通道)均透明转发 ;chip 点击 → postMessage → VS Code 打开文件
认证材料 :① ~/.dsh/.credentials.yaml 的 client-connection/browser-session.secret → 本地按 v1.<payload>.<hmac> 离线签发会话 cookie(30 天有效,重启不变);② 日志里的 ?token= → 代理向上游 GET /?token=… 换取 Set-Cookie。两条都用不上时(例如换过凭据目录),面板会引导「⟳ 重启 DSH 并重试」
文件联动 :监听 DSH 工作区目录的创建/修改/删除事件
扩展宿主在 Windows 时经 wsl.exe 进入 WSL 操作;在 Remote-WSL 时直接执行
数据安全
数据
位置
卸载(保留会话)
彻底卸载
会话记录
~/.dsh/sessions/
✅ 保留
🗑 删除
配置(settings.yaml)
~/.dsh/
✅ 保留
🗑 删除
凭据(.credentials.yaml)
~/.dsh/
✅ 保留
🗑 删除
存储(storages/)
~/.dsh/
✅ 保留
🗑 删除
程序文件(可再生的缓存)
~/.npm/_npx/*/
🗑 删除
🗑 删除
默认卸载 只动 npx 缓存(程序文件),~/.dsh 数据完整保留;只有「彻底卸载」才会删除 ~/.dsh (有二次确认,且不可恢复)。完整性修复也只动缓存,任何情况下不删数据。
环境要求
VS Code >= 1.90
WSL Ubuntu 内 Node.js >= 20 与 npm
Windows 宿主需要 WSL(wsl.exe)
已知限制
聊天正文里以纯文本形式出现的文件路径(非 chip)暂不自动联动
内嵌 iframe 需要 DSH 实例允许被框住(当前版本不发送 X-Frame-Options,已实测可用)
DSH 0.1.5+ 的会话认证是进程级随机的:若 DSH 不是由插件启动、且 ~/.dsh/.credentials.yaml 也不可读/已更换,需要点面板里的「⟳ 重启 DSH 并重试」让插件接管一次
完整性修复需要能访问 npm 仓库(重新下载同版本)
离线自测
仓库内附带两个不需要打开 VS Code 的验收脚本(已从 vsix 中排除):
node test-proxy-auth.js # 纯代理:验证认证注入 / Bridge 脚本 / 资源与 /api 转发
node test-extension-auth.js # 验证扩展侧认证解析(密钥签名 + 日志令牌)
node test-start-flow.js 3099 # 端到端:start() → 取令牌 → 代理 → 打开首页(用备用端口,不动 3080)
前提:DSH 正在运行。test-start-flow.js 会在指定端口启停一个临时实例,并备份/还原 /tmp/dsh-launcher.log。
卸载扩展(插件本身)
扩展管理 → DSH Launcher → 卸载。已启动的 DSH 实例与 profile 均不受影响。
变更记录
v1.2.0
🐛 修复「内嵌面板打不开」 :DSH 0.1.5+ 的 Web GUI 新增浏览器会话认证(/ 与 /api/** 需要 dsh-auth-* cookie,未认证返回 401 dsh web authentication required),旧版插件直接把 iframe 指向 http://127.0.0.1:3080,于是面板里只剩一行 401 文本。现在由本地代理在上游请求上注入会话 cookie,webview 侧无感登录
🔐 两条认证路径 + 自动降级 :① 读 ~/.dsh/.credentials.yaml 的持久签名密钥离线签发 cookie(重启/换实例都有效);② 从启动日志取本次进程的 ?token= 交给代理换取 Set-Cookie(官方路径)。前者被拒绝时自动改用后者;都不可用时面板给出「⟳ 重启 DSH 并重试」引导
🚀 启动参数适配 0.1.5+ :统一 dsh web --no-open --port <port>——不再发生 DSH 自己弹出系统浏览器;端口显式指定;?token= 落到日志供插件取用
🧹 代理健壮性 :Host/Origin 改写成上游 authority 以通过新的信任栅栏;剥掉浏览器自带的同名旧 cookie(避免抢先命中 401);HTTP 与 WebSocket 升级都注入认证
🔧 完整性检查版本无关化 :入口改为读包自己声明的 bin(不再硬编码 config/agent-presets,该目录在 0.1.5+ 已不存在,会误报"缺少文件")
🔧 终止更安全 :ss → lsof → fuser → pgrep --port 逐级按端口定位,不再无差别 pgrep -f "dsh web"(多实例并存时不误杀)
🌐 「在浏览器打开」带令牌 :不再是必然 401 的裸地址;DSH 非插件启动时会提示先重启以取得令牌
🧩 文件 chip 桥接兼容新版标记 :同时识别新版 P4kPIW_file 与旧版 fileLink
🧪 新增 3 个离线验收脚本(test-proxy-auth.js / test-extension-auth.js / test-start-flow.js)
v1.1.3
🔧 原生对话框兼容修复 :VS Code webview 沙箱不带 allow-modals,内嵌面板里 window.confirm / alert / prompt 会被浏览器静默忽略(confirm 恒返回 false,表现为按钮"点了无效"——如设置 → 对话管理 → 删除对话)。代理桥接脚本现以 <dialog>.showModal() 实现同语义的同步对话框兜底(页面内 DOM 渲染,不受沙箱 modals 限制),任何插件里的 confirm/alert/prompt 在内嵌面板都能正常工作
🧹 清理桥接脚本冗余代码
v1.1.2
🎨 更换活动栏按钮图标与市场图标为定制角色图(深/浅主题自适应)
v1.1.1
🆕 卸载弹窗新增彻底卸载(删全部数据) :连 ~/.dsh 会话/配置/凭据一起删除(二次确认,不可恢复);弹窗右上角 × 为取消
🎨 内嵌面板底部代理信息栏改为右下角悬浮标签 ,不再占整行
🔧 内嵌 iframe 权限增强(modals / popups / downloads)+ 新窗口桥接:插件设置确认弹窗、插件市场、外部链接可正常打开
v1.1.0
➕ 新增完整性检查 :结构 / 依赖 / 入口运行三层检查,发现问题可一键自动修复(删损坏缓存 + 重下同版本)
➕ 新增安全卸载 :删除 DSH 程序文件但保留全部会话记录与配置 (~/.dsh)
🔄 改进下载/更新 :本地无 DSH 时自动下载安装;已有缓存时才检查更新,已是最新则提示
v1.0.1
首个发布版本:启动 / 停止 / 更新 / 内嵌面板 / 文件双向联动