前言¶
在 DeepSeek Harness(DSH)Desktop 里,默认侧栏按 Workspace(工作目录) 分组会话。当你同时推进多个产品、实验或客户任务时,同一目录下会堆很多对话,跨目录的上下文又散落在不同分组里,很难像 Claude Desktop 那样用「项目」把一批会话和目录绑在一起管理。
dsh-projects 是社区维护的客户端插件,只在 desktop 配置档生效(Web 与 headless 配置档不受影响)。它替换侧栏中原本由 Workspace 主导的区域,改成「项目优先」的浏览方式,同时保留 Host 原有的工作目录机制与会话数据归属。
这是什么¶
- 仓库: aobakaolengmian/dsh-projects
- npm 包名:
@wxysskd/dsh-projects(当前资料中的版本为 1.0.0) - 许可证: MIT
- 分类:客户端(侧栏 UI)
- 目录页: SkillHub 插件条目
插件在侧栏 sidebar.workspaces 单槽位以 priority: -1 注册,遮蔽内置的 ui-workspace 浏览器;若插件 UI 崩溃会放弃占位,内置侧栏仍可回退显示。
核心功能¶
下面介绍 README 中已说明、且与 Host 行为对齐的能力。
项目与会话归属¶
- 可创建 项目(名称、颜色、一个或多个工作目录)。
- 每个会话必须落在某个项目内(未归属的会话仍在 Other conversations 下按 Workspace 分组,不会消失)。
- 单个会话可使用独立工作目录:创建时选择,或通过 Change working directory 切换;底层走 Host 的
workingDirectory服务,与working_directory工具同一套持久、模型可见的机制。
保留 Workspace 层级¶
项目内部仍按 workspace(文件夹 + 标题 + 数量)嵌套展示会话。把某个 workspace 移入项目时,分组身份保留,不会把对话压平成一行列表。Workspace 标题行提供 +(在该目录直接新建会话)和 ⋯ 菜单(新建、移到其他项目、重命名、从项目移除、删除 workspace 等)。
空会话处理¶
Host 在每次「New Session」会保留可复用的空白 Session(blank: true);插件侧栏只显示当前打开的那一个空白会话,其余空白会话隐藏。对历史遗留、目录行未标 blank 但日志里没有任何会话事件的空聊天,也会按同样规则隐藏。通过 View options → Delete empty conversations (N) 可经 Host 校验路由永久从磁盘删除空会话(有内容的不会被删;当前运行中仍存在的会先归档,下次启动后可再清理)。
在项目之间迁移¶
无需删会话或改 session 日志,只改项目元数据即可:
- 将会话行拖到目标项目(拖到 Other conversations 即取消项目归属)。
- 将 Other conversations 下的 workspace 组标题拖到目标项目:该目录进入项目目录列表(不重复),目录下所有会话一并归属该项目。
- 等价菜单路径:workspace
⋯→ Move workspace to project;项目⋯→ Move working directory to another project…;会话⋯→ Move to project。
目录在项目间移动后,在该目录下新建会话(含系统 Cmd+N 流程)会进入目标项目。
与内置侧栏一致的操作¶
置顶、相对时间、运行/等待/未读状态点、归档/取消归档、重命名、分叉、置顶、复制 ID 等,在新列表行上仍可用。
数据与 HTTP 接口¶
项目元数据由 Host 持久化,不写进 session 日志:
$DSH_HOME/storages/dsh-projects.json:项目定义、会话→项目映射、各会话上次记录的工作目录。
同源 HTTP 路由(POST 需 content-type: application/json、x-dsh-projects: 1,body 上限 64 KiB):
| Method | Path | 用途 |
|---|---|---|
| GET | /dsh-projects/state |
完整项目状态 |
| GET | /dsh-projects/health |
存活与计数 |
| POST | /dsh-projects/mutate |
project.create / update / delete、session.assign |
| POST | /dsh-projects/cwd |
修改单会话工作目录 |
| POST | /dsh-projects/purge |
永久删除已校验的空会话 |
| GET | /dsh-projects/empty-sessions |
列出无对话内容的会话 |
安装与启用¶
插件以普通 DSH bundle 发布,目标配置档为 ~/.dsh/profiles/desktop。README 给出三种等价方式,任选其一:
# 1. 从 npm 安装(也可在 Plugins -> Add plugin 中操作)
plugin_manager install_bundle target=@wxysskd/dsh-projects@1.0.0
# 或:
desktop-cli plugin --profile desktop add @wxysskd/dsh-projects@1.0.0
# 2. 从本地打包的 release tarball(需先在源码树执行 npm run pack)
plugin_manager install_bundle target=/abs/path/dist/wxysskd-dsh-projects-1.0.0.tgz
# 3. 开发:源码 link(client.js 可热更新)
desktop-cli plugin --profile desktop add link:"$PWD"
DSH 没有内置官方应用市场;可在 Plugins → Discover 中添加本插件发布的索引源,从卡片安装(与 npm 包为同一制品):
https://aobakaolengmian.github.io/dsh-projects/market/index.json
从 Discover 安装后,资料说明仍需重启应用一次后 Host 侧插件行才会生效。更细的验证、回滚见仓库 docs/INSTALL.md。
典型用法¶
经过上面的安装并重启 Desktop 后,侧栏会变为项目列表结构。可按下面顺序熟悉日常流程。
- 新建项目:设置名称、颜色,并绑定一个或多个工作目录。
- 在项目下开聊:在某一 workspace 分组点
+,或从菜单新建会话;需要时为该会话单独指定目录(与项目默认目录列表可以不同)。 - 整理历史会话:把仍散落在 Other conversations 的 workspace 或单条会话拖入对应项目。
- 清理空白会话:打开 View options,使用 Delete empty conversations,在确认数量后执行永久删除(仅空会话)。
若你通过自动化或脚本集成,可对 /dsh-projects/state 读状态,经 /dsh-projects/mutate 与 /dsh-projects/cwd 改归属与目录;删除空会话走 /dsh-projects/purge(须符合 Host 校验)。
适用场景与注意¶
适合谁:长期在 DSH Desktop 上做多线并行开发、希望侧栏按「项目」而不是仅按文件夹分组,且需要会话级工作目录的开发者。
务必知晓:
- 插件只在 desktop profile 加载;不要在 Web/headless 环境期待同样 UI。
- DSH 生态是「一切皆插件」;SkillHub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系。
- 插件以当前 DSH 进程权限运行,安装前请自行审阅源码与 MIT 许可证,确认 npm 包与索引来源可信。
- GitHub 仓库当前公开星标为 0(以目录页线索为准),不代表功能缺失,但社区反馈样本可能较少,问题可走 Issues。
结尾¶
dsh-projects 把 Claude Desktop 式的 Projects 侧栏带到 DSH Desktop:项目维度组织会话、按会话切换工作目录、拖拽迁移 workspace/会话,并配合 Host 做可验证的空会话清理。若你已在 desktop 配置档使用 DSH,可从 npm 或 Discover 索引安装 @wxysskd/dsh-projects@1.0.0,重启后即在侧栏使用。