luis1232023 / dsh-workspace-enhance

Listed

增强dsh左侧工作区区侧栏——每个工作区文件夹下提供 任务/文件/Git 子 Tab,含文件树与右侧预览、Git 的 Changes/Graph 双视图、搜索、视图切换与添加工作区,界面样式对齐默认插件。

mainOther View source

Installation

npx -y @deepseek-ai/dsh plugin --profile web add github:luis1232023/dsh-workspace-enhance

This installation command is an unverified starting point generated from the GitHub repository address.

README

Maintainer-authored documentation snapshot.

View on GitHub ↗
Commit dd03875Synced Aug 17, 2026

dsh-workspace-enhance(dsh工作区加强)

License: MIT Node CI

DSH(DeepSeek Harness)Web 界面的侧栏工作区增强插件:以默认工作区浏览器为基础,把左侧栏改造成工作区文件夹列表——每个文件夹展开后有 任务 / 文件 / Git 三个子 Tab,另加右侧文件预览面板。

源码位置与结构

插件根目录:D:\luisdesk\other\dsh-workspace-enhance

dsh-workspace-enhance/
├── package.json            # 插件清单:dsh.client 清单 + dsh.bundle.patch(安装入口)
├── cordis.patch.yml        # bundle patch:向 profile 注入一行插件配置
├── build.mjs               # 构建脚本(esbuild 原生二进制,产出 web2 ModuleLoader 格式 bundle)
├── tsconfig.json           # 类型检查配置(paths 指向 profile 内的 @deepseek-ai 类型)
├── CONTRIBUTING.md         # 贡献规范(贡献前检查清单 / 提交流程,请先阅读)
├── LICENSE / CODE_OF_CONDUCT.md / SECURITY.md / CHANGELOG.md
├── .github/                # PR / Issue 模板与 CI(.github/workflows/ci.yml)
├── lib/
│   ├── index.js            # node 半边(宿主进程运行):RPC 通道 + fs/git/会话删除
│   └── client.js           # client 半边(浏览器运行):由 src/ 构建,勿手改
├── src/                    # client 半边源码(TypeScript/TSX)
│   ├── client.tsx          # 入口:注册 sidebar.workspaces(priority -1) + shell.overlay
│   ├── store.ts            # 共享 store(预览、删除墓碑、每文件夹子 Tab、视图模式)
│   ├── rpc.ts / contract.ts# RPC 调用封装与类型契约
│   ├── rows.tsx            # 对齐内置样式的文件夹行/会话行
│   ├── highlight.ts        # highlight.js 语法高亮(内联打包)
│   ├── styles.ts           # 全部样式(对齐默认工作区的 --dsw-* 变量)
│   ├── tabs/               # WorkspaceRegion / WorkspaceFolderTabs / Sessions / File / Git
│   └── preview/            # 右侧文件预览面板(shell.overlay 槽位)
└── scripts/                # 测试与校验(node 半边集成测试、渲染测试、真实 store 测试)

架构:node 半边在宿主进程注册通用 RPC 通道 /dsh-workspace-enhancectx.connection.rpc.handle,loopback 信任),endpoints:fs/rootfs/listfs/readgit/log(含 --graph、支持按分支过滤)、git/showgit/statusgit/branchessession/deletedebug/reportclient 半边注册两个槽位: sidebar.workspacespriority: -1 遮蔽内置浏览器)渲染文件夹/子 Tab 区域;shell.overlay(additive 列表槽)渲染 右侧文件预览面板。

功能

模块说明
任务每个工作区文件夹下的任务(会话):打开 / 重命名 / 归档 / 彻底删除(host 删日志,二次确认);文件夹行:新建任务 / 重命名 / 删除工作区;顶部 +新任务
文件以该文件夹为根的文件树(懒加载、dot 按钮切换显示隐藏文件);彩色图标:文件夹为 Windows 资源管理器风格的黄色文件夹(开/合两种状态),文件按扩展名区分类型(JS/TS/JSON/Markdown/图片/文本/配置/代码/通用);点击文件在右侧预览:代码按语言语法高亮、图片、二进制占位;Markdown 默认渲染 HTML 预览(GFM:标题/表格/代码块高亮),顶部「预览 / 源码」Tab 可切换
Git顶部 Changes / Graph 双视图:Changes=工作区改动列表(点击文件可预览)、Graph=带 ASCII 分支图的提交记录(顶部左侧分支选择列表,默认当前分支,切换后重拉该分支提交图;点击查看单次提交元信息/变更文件/diff);仅当目录是 git 仓库才显示该 Tab
区头右侧:搜索(展开式输入 + 内容搜索)、添加工作区(系统目录选择器)、视图选项(按工作区/平铺、最近更新/手动)
对齐默认文件夹行 34px、会话行 32px、hover 行为、运行中会话的 8 格矩阵动画点、激活下划线 -1px 的子 Tab、空闲会话灰色状态点

安装(DSH 插件安装说明)

前置:本机已安装 DSH(dsh 命令可用),且已存在 web profile(C:\Users\yicheng\.dsh\profiles\web)。

1. 添加插件到 profile

在插件目录的上级目录(即 D:\luisdesk\other)执行:

dsh plugin --profile web add file:./dsh-workspace-enhance

该命令会:

  • dsh-workspace-enhance 追加到 profile 的 dsh.profile.bundles
  • 因插件声明了 dsh.bundle.patch,自动把一行插件配置注入配置树;
  • 在 profile 的 node_modules 里安装插件(pnpm file: 依赖是打包拷贝,只含 files 字段列出的 lib/cordis.patch.yml,见下方「开发」注意事项)。

2. 重启使生效

# 先停止当前 web 实例,再:
dsh web

重启后左侧栏即为插件界面。验证:

# bundle 可访问(含最新 rev):
Invoke-WebRequest http://127.0.0.1:3080/plugins/dsh-workspace-enhance/client.js
# 合成配置树确认:
dsh --profile web --dump-config

3. 禁用 / 重新启用

编辑 C:\Users\yicheng\.dsh\profiles\web\cordis.patch.yml(顶层必须是 YAML 数组):

# 禁用(恢复默认工作区浏览器):
- id: dsh-workspace-enhance
  disabled: true

删掉这两行(或把 disabled 改为 false)即重新启用。每次改动后重启 dsh web

4. 卸载

从 profile 的 package.jsondependenciesdsh.profile.bundles)移除 dsh-workspace-enhance,删除 cordis.patch.yml 中对应行,重跑 pnpm installdsh --profile web --dump-config 确认,再重启。插件目录本身可整个删除。

开发

cd D:\luisdesk\other\dsh-workspace-enhance

# 首次:安装构建期依赖(esbuild + highlight.js;会被打进 client bundle,无需进 profile)
npm install --ignore-scripts --legacy-peer-deps

# 构建 / 监听(client 半边改动)
npm run build          # 或 npm run watch(HMR 免刷新热加载浏览器半边)

# 类型检查(tsc strict;依赖本机 profile 内的 @deepseek-ai 类型)
npm run typecheck

# 测试
npm test               # 聚合:node 半边集成测试 + client 干跑 + 真实 store 测试(需 profile)
node scripts/test-node.mjs        # node 半边集成测试(需本机 git)
node scripts/dry-run-client.mjs   # client bundle 干跑(ModuleLoader 格式校验)
node scripts/test-real-store.mjs  # 真实 store 引擎 + persist 测试(需本机 profile)
# 渲染测试:esbuild 打包 scripts/render-tabs-test.tsx 后运行(见该文件头部注释)

注意(重要):web profile 用 pnpm 安装的 file: 依赖是打包拷贝,不是 符号链接——npm run build 会把 lib/* 同步进 C:\Users\yicheng\.dsh\profiles\web\node_modules\dsh-workspace-enhance\lib(在受限 沙箱/权限环境下无法写入时需手动复制,或在普通终端执行构建)。client 半边改动靠 HMR 热加载(无需重启);node 半边(lib/index.js)改动必须重启 dsh web

npm run typechecknpm test(其中的真实 store 测试)依赖本机 DSH profile 的绝对路径(tsconfig.json 的 paths、scripts/test-real-store.mjscreateRequire),CI 中只跑不依赖 profile 的部分(见 .github/workflows/ci.yml)。

贡献

欢迎贡献!请先阅读 CONTRIBUTING.md(贡献前检查清单、 什么算好的贡献、质量与数据完整性、提交流程),并遵守 CODE_OF_CONDUCT.md

  • Bug / 功能 / 文档问题:按 Issue 模板 提交
  • 代码改动:按 PR 模板 发起,勾选检查清单
  • 安全漏洞:见 SECURITY.md(请勿公开披露)

保持关注

  • Watch 本仓库,关注 Releases 与 CHANGELOG.md
  • 功能讨论与使用问题:GitHub Issues / Discussions。
  • 已知边界以本文档「已知限制」为准。

常见问题(FAQ)

Q:为什么 Git Tab 不显示? A:仅当当前工作区文件夹是 git 仓库(git rev-parse 成功)时才显示。

Q:改动 client 半边后界面没变化? A:client 半边走 HMR 免刷新热加载;若没生效,确认 npm run watch 在运行,或手动 npm run build 后刷新页面。node 半边改动则必须重启 dsh web

Q:「彻底删除」能恢复吗? A:不能。它由 host 直接删除任务(会话)目录,不可恢复,界面有二次确认。

Q:远程/容器部署时「添加工作区」不可用? A:原生目录选择器在远程/进程内部署可能不可用,此时会回退到手动输入路径。

Q:CI 为什么没跑 typecheck? A:tsc 的 paths 与真实 store 测试都指向本机 profile 的绝对路径,CI 沙箱没有 profile;它们是本地质量门禁(见 CONTRIBUTING.md 检查清单)。

已知限制

  • 任务「彻底删除」由 host 直接删除 $DSH_HOME/sessions/<scope>/<sessionId>/ 目录,不可恢复;工作区记账可能残留该 id,由本插件渲染层过滤。
  • Git 为只读(log/show/status),无写操作;Changes 视图点击文件是在右侧预览, 不是编辑。
  • 原生目录选择器在远程/进程内部署可能不可用,此时添加工作区会回退到手动输入路径。

许可

MIT © 2025 luis

Project files and signals

Shown items are public repository signals detected in the directory snapshot.

Security policyDetected
Contributing guideDetected

Repository information

Language
JavaScript
License
MIT
Last updated
Aug 17, 2026, 6:34 AM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.