Codex 风格的 DSH 工作台:桌面与 Web 共用,文件、Git、技能、MCP 和费用管理集中在一个客户端。
DSH App 是面向 Windows 的社区插件,提供自有客户端布局和 Electron 桌面壳。安装到现有 `web` profile 后,桌面和浏览器连接同一个后端,继续使用已有对话、模型和兼容插件。本项目不是 DeepSeek 官方客户端,也不依赖 Codex UI 插件。 [功能](#功能) · [内化与冲突插件](#内化与冲突插件) · [演示](#演示) · [安装](#安装) · [使用](#使用) · [更新与卸载](#更新与卸载) · [常见问题](#常见问题) ## 功能 - **统一工作台**:导航轨、项目与会话侧栏、融合顶栏、主区域设置、深浅模式和统一字体;桌面与 Web 使用同一布局。 - **文件与 Git 内置**:完整接管 Better Sidebar 的工作台引擎,保留编辑器、预览、差异、任务、侧边对话和扩展贡献接口。 - **一个插件中心**:浏览页合并市场与已安装管理,技能和 MCP 作为一级子页;安装、更新和卸载通过可取消待办及重启流程执行。 - **余额与用量合并**:侧栏显示 DeepSeek 官方 API 余额,详情统一展示费用、Token、预算和当前对话上下文,并保留历史账本。 - **启动与恢复可见**:窗口内显示后端启动日志,前端异常时提供独立诊断页、重试与有效备份支持的恢复入口。 | 日常操作 | DSH App 提供的体验 | | --- | --- | | 桌面与 Web 共用 | 同一后端、同一 `web` profile、同一份对话和插件 | | 打开与关闭 | 原生窗口、鲸鱼托盘、单实例;关闭窗口驻留托盘 | | 桌面顶栏 | 融合侧栏的标题栏,搜索、前进后退、快捷菜单和窗口控制 | | 自有客户端布局 | 独立图标导航轨、项目与会话侧栏、全局内容搜索、圆角对话面板与输入框;桌面和 Web 使用同一界面 | | 冷启动与故障 | 跟随已保存的深浅外观设置,实时显示后端日志、耗时;前端加载失败时切回安全页,可重试、打开诊断,并按有效备份恢复 | | 核心与插件更新 | 检测到 DSH 新版才显示更新按钮;安装、重启、配置备份与失败恢复 | | 诊断与恢复 | 查看插件状态和启动失败日志,单独停用或重试;恢复插件更新或切回有备份的上一个 DSH 版本 | | 模型来源 | 保留模型原始 ID,识别 ASS 提供商标记,记录观察到的配置变化 | | 费用与余额 | 查询 DeepSeek 官方 API 账户余额,本地记录 Token、模型费用与预算,并保留旧 `dsh-cost-meter` 账本历史 | | 上下文洞察 | 当前对话的上下文占用与组成、请求趋势、工具耗时、压缩与最近活动,整合在费用与用量中 | | 内置插件市场 | 搜索、分类与来源安装,检查已装插件更新;持久保存安装、更新和卸载待办,由客户端重启后应用 | | 内置技能管理 | 在“插件 → 技能”统一浏览、创建、编辑、启停、导入与恢复删除的技能,连接本机与项目技能库 | | 内置 MCP | 在“插件 → MCP”管理连接、目录、OAuth、自定义服务、工具发现、调用策略、项目范围和备份恢复,保留原目录的图片与 Emoji 标识 | | 内置侧栏工作台 | 文件树、搜索、上传与 ZIP、CodeMirror、Markdown/Mermaid/HTML 预览、Git 暂存/提交/历史/工作树、AI 改动、子代理与任务、Side Chat、可分栏工作台及扩展查看器;继续使用官方右侧栏和终端 | 插件提供自身的客户端布局、桌面窗口和维护功能,不依赖 Codex UI。项目、会话、归档、模型和发送控件继续使用 DSH 的官方服务与组件;左栏提供聊天、自动化任务、插件和设置入口,“插件”包含浏览、技能和 MCP 三个子页;浏览页将市场与已安装管理合并,通过全部、已安装、可更新和可安装筛选切换。技能与 MCP 不重复出现在设置或左栏,搜索按钮继续提供会话搜索。 齿轮按钮在主区域打开官方设置栏目。MCP 使用本项目的 React 页面,直接读取 DSH 的主题与字体,无嵌入旧网页。界面统一使用本机 Segoe UI 与微软雅黑字体,代码和日志保留等宽字体。原生窗口三键高度为 30 DIP,为下方圆角面板留出间距。 当前验证基线为 DSH `0.2.0-rc.2`,这是发布候选版。其他核心版本需要重新验证客户端接口,不能仅凭安装成功认定兼容。 全文搜索在首次查询时按需建立本地内存索引,不请求外部服务,也不增加冷启动的索引加载工作;首次查询可能比之后的查询慢。profile 中的显式搜索配置仍优先于插件默认值。 ## 内化与冲突插件 > **安装前先处理重复插件。** 以下功能已经由 DSH App 提供,应从同一个 profile 卸载或停用对应旧插件的完整 bundle。只隐藏按钮仍可能留下重复路由、存储拥有者、模型工具或客户端模块。内置市场会排除这些包并拒绝重新安装;直接使用 CLI 安装仍需自行避免冲突。DSH App 不会自动卸载你的插件。 | 原插件包名 | 本项目的替代位置 | 同时启用的冲突 | | --- | --- | --- | | `dsh-better-sidebar` | 内置文件、Git、任务、Side Chat 与分栏工作台 | `/sidebar` 路由、工作台注册与公共模块名称重复 | | `dsh-mcp-connector` | **插件 → MCP** | MCP 存储、授权与连接服务重复 | | `@michengai/dsh-codex-ui` | 自有布局、导航轨、会话侧栏与顶栏 | 侧栏和主界面组件重复接管 | | `dshmarket` | **插件 → 浏览** | 安装队列、更新与重启流程重复 | | `dsh-cost-meter` | **费用与用量** | 同一调用重复监听与统计 | | `dsh-context` | **费用与用量 → 当前会话** | 上下文展示与事件统计重复 | | `@linxin666/dsh-client-ui-skill-explorer` | **插件 → 技能** | 技能浏览和配置入口重复 | | `@michengai/dsh-skills-manager` | **插件 → 技能** 与官方技能提供者 | 技能来源、启停策略与注册重复 | “内化”有两种实现:MCP Host 保留 MIT 许可的 `dsh-mcp-connector@0.2.63` 引擎,Better Sidebar 保留 MIT 许可的 `dsh-better-sidebar@0.24.1` Host、客户端和懒加载运行时代码;布局、技能、费用、上下文与插件市场由本项目重写。前两者的许可证、固定版本、原始文件哈希和本地修改见 [NOTICE.md](NOTICE.md)、[MCP 来源](lib/mcp/upstream/provenance.json) 与 [侧栏来源](lib/sidebar/upstream/PROVENANCE.md)。它们随 DSH App 更新,不再独立更新旧插件。 迁移时先备份 profile 和数据,再核对以下项目;**不要删除 DSH 数据目录**: 1. Better Sidebar:将原有效配置复制到 DSH App 的 `sidebar` 配置字段,再移除原包。每个会话的标签、布局和编辑状态保留相同存储名称;`ctx.betterSidebar`、tab/viewer/图标/角标/设置注册以及公开模块别名继续供扩展使用。功能与接口说明见 [内置侧栏工作台](lib/sidebar/README.md)。 2. MCP:保留原 `mcp_connector` 存储和授权日志,内置引擎继续使用连接、策略、范围及备份数据。旧 MCP 仍启用时,内置 Host 暂不接管该存储;移除原包后重启完成接管。 3. 技能:保留技能文件与旧管理器状态文件,内置功能读取已有来源和策略;模型调用与命令调用分别显示。旧 Skills Manager 仍启用时,内置提供者暂不重复注册。 4. 费用:首次读取导入旧账本,原文件不修改;确认历史已显示后移除原费用插件。未计价调用保留 Token 与次数,填写价格仅影响之后的调用。 5. 市场:先取消旧 `dshmarket` 未完成的变更,再卸载旧市场,避免两套队列处理同一 profile。 官方自动化任务、自动审查、Agent Team、语音输入,以及兼容的 GitGraph 等扩展可以继续使用。这张表不是其他社区插件的全面兼容性保证。卸载 DSH App 会移除上述内置功能并恢复官方侧栏,不会自动重新安装这些旧插件。 ## 演示 以下为旧版桌面壳演示,**不代表当前 0.3.6 工作台布局**。 **桌面窗口与顶栏**  **诊断与功能检查**  演示使用独立配置下的真实 DSH `0.1.7-rc.2` 和原生 Web 界面,不包含个人会话。GIF 由同一次运行的操作关键帧组成,功能检查不发送模型消息;播放节奏用于展示操作,不代表性能测量。 ## 安装 ### 准备 - Windows,Node.js **24 或以上**,pnpm **11**。 - 已安装 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness),终端中可运行 `dsh`。 - DSH App **0.3.6** 的客户端接口基线是 DSH **0.2.0-rc.2**,包内版本声明会阻止在更旧核心上启用。Electron 使用 **44**;其他核心版本请先运行功能检查。 - 已按上方冲突表移除或停用重复 bundle,并保留需要迁移的配置与数据。 ### 1. 添加插件 在 PowerShell 中执行: ```powershell dsh plugin --profile web add 'git+https://github.com/CaT-Hode/DSH-app.git' ``` 这是 GitHub 安装源;本项目目前没有 npm 发布包。也可将 Releases 中的 `.tgz` 文件路径传给同一条 `dsh plugin --profile web add` 命令。 ### 2. 首次激活 ```powershell dsh --profile web --no-open ``` 等待 Web 服务就绪。插件会记住当前 DSH 的启动入口;之后按 `Ctrl+C` 停止这次前台服务。 ### 3. 打开客户端 ```powershell $dshHome = if ($env:DSH_HOME) { $env:DSH_HOME } else { Join-Path $HOME '.dsh' } & (Join-Path $dshHome 'profiles\web\node_modules\.bin\dsh-app.cmd') ``` 以后使用第三步即可冷启动客户端。Electron 在独立窗口中运行,后端控制台隐藏;启动日志显示在窗口内。启动页和故障安全页优先读取当前 profile 的外观设置,浅色使用白底、深色使用黑底;选择“跟随系统”或未保存设置时跟随系统外观,无需等待后端加载。