🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

项目侧边栏 aobakaolengmian/dsh-projects

DeepSeek Harness
aobakaolengmian16 天前有提交已提供中文文档扫描:含敏感能力

把会话按项目分组管理,支持独立工作目录与拖拽迁移

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add aobakaolengmian/dsh-projects
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · browser
装得上吗
本站尚未做安装检查
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 16 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 12 处,展示前 12 条)
  • 读取本地文件
    index.js:468
    entries = readdirSync(sessionDirectory)
  • 读取本地文件
    index.js:484
    buffer = readFileSync(file)
  • 删除本地文件递归
    index.js:634
    rmSync(directory, { recursive: true, force: true })
  • 读取本地文件
    index.js:655
    if (!existsSync(sessionsRoot)) return found
  • 读取本地文件
    index.js:661
    entries = readdirSync(directory, { withFileTypes: true })
  • 写入本地文件
    index.js:694
    mkdirSync(dirname(file), { recursive: true })
  • 写入本地文件
    index.js:704
    renameSync(temporary, file)
  • 删除本地文件
    index.js:714
    rmSync(temporary, { force: true })
  • 读取本地文件
    index.js:725
    raw = readFileSync(file, 'utf8')
  • 读取本地文件
    index.js:913
    fileExists = existsSync(store.file())
  • 发起网络请求
    client.js:261
    const response = await fetch(path, {
  • 写入剪贴板
    client.js:3586
    await navigator.clipboard.writeText(sessionId);
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-projects 给 DSH Desktop 用的 Claude-Desktop 风格 Projects(只作用于 desktop 这个 DSH 配置档——Web 和无头配置档不受影响)。 DSH 自带的侧边栏按 Workspace(目录)给会话分组。这个插件把侧边栏那块区域换成一个以项目为先的浏览器: - 创建项目(名称、颜色、一个或多个工作目录); - 每个会话都归属某个项目; - 每个会话可以用不同的目录,在创建时选(之后也能通过 Change working directory 切换),底层走 Host 真实的 workingDirectory 服务——和 working_directory 工具是同一套持久、模型可见的机制; - 不属于任何项目的会话仍然显示在 Other conversations 下,还是按 Workspace 分组,什么都不会丢; - 空会话会隐藏,而且能真正删掉:每次点「New Session」,Host 都会留下可复用的空白 Session(blank: true);只有当前打开的那个空 Session 会显示。Host 还会扫描一类历史 Session:目录行没标 blank,但日志里完全没有会话事件(只检查很小的 header/metadata 日志),所以以前那种「Badstuff」式的空聊天也会被隐藏。
展开完整文档(README 剩余 1 节)
dsh-projects

给 DSH Desktop 用的 Claude-Desktop 风格 Projects(只作用于 desktop 这个 DSH 配置档——Web 和无头配置档不受影响)。

DSH 自带的侧边栏按 Workspace(目录)给会话分组。这个插件把侧边栏那块区域换成一个以项目为先的浏览器:

- 创建项目(名称、颜色、一个或多个工作目录);
- 每个会话都归属某个项目;
- 每个会话可以用不同的目录,在创建时选(之后也能通过 Change working directory 切换),底层走 Host 真实的 workingDirectory 服务——和 working_directory 工具是同一套持久、模型可见的机制;
- 不属于任何项目的会话仍然显示在 Other conversations 下,还是按 Workspace 分组,什么都不会丢;
- 空会话会隐藏,而且能真正删掉:每次点「New Session」,Host 都会留下可复用的空白 Session(blank: true);只有当前打开的那个空 Session 会显示。Host 还会扫描一类历史 Session:目录行没标 blank,但日志里完全没有会话事件(只检查很小的 header/metadata 日志),所以以前那种「Badstuff」式的空聊天也会被隐藏。View options → Delete empty conversations (N) 会通过一条带校验的 Host 路由,把这两种都从磁盘上永久删除(绝不碰有内容的会话;当前应用运行期间还活着的会话会先归档,下次启动后可以清理);
- 项目保留工作区层级:项目内部,会话仍按工作区分组(文件夹 + 标题 + 数量),所以把工作区移进项目不会把聊天压平,工作区的身份还在;工作区标题有自己的 +(直接在那个目录里新建会话——归到所在项目,或者不分组放到 Other conversations 下)和 ⋯ 菜单(新建会话、移到别的项目、重命名、从项目移除、删除工作区);
- 置顶会话、相对时间、运行中/等待中/未读状态点、归档/取消归档、重命名、fork、置顶、复制 ID,都能在新的行上直接用。

安装(desktop 配置档)

插件以普通 DSH bundle 的形式发布,npm 包名是 @wxysskd/dsh-projects。
装进 desktop 配置档(~/.dsh/profiles/desktop)有三种等价方式:

1. from npm (registry install; also works from Plugins -> Add plugin)
plugin_manager install_bundle target=@wxysskd/dsh-projects@1.0.0
or: desktop-cli plugin --profile desktop add @wxysskd/dsh-projects@1.0.0

2. from the self-contained release tarball
npm run pack # -> dist/wxysskd-dsh-projects-1.0.0.tgz
plugin_manager install_bundle target=/abs/path/dist/wxysskd-dsh-projects-1.0.0.tgz

3. source link for development (client.js edits hot-reload)

desktop-cli plugin --profile desktop add link:"$PWD"

npm 包里只有运行时文件(index.js、client.js、cordis.patch.yml、locale/.json、icon.svg、package.json、README.md、LICENSE),外加 dist/ 里的 SHA-256 和 manifest。安装方式、市场索引、激活与校验、回滚细节见 docs/INSTALL.md。

插件市场(发现标签页)

DSH 没有官方内置市场;发现标签页读取的是用户自己添加的索引源。本仓库发布一份 format-1 索引,安装目标锁定到某个 commit 的 Git 地址:

https://aobakaolengmian.github.io/dsh-projects/market/index.json

在 插件 → 发现 里把这个 URL 添加为索引源,再从卡片上安装 Projects;plugin_market 工具和任何其他 DSH Desktop 用户都能读取同一份索引:

发现标签页里的 Projects

市场条目安装的是已发布的 npm 包(@wxysskd/dsh-projects@<version>),和 tarball 是同一个产物。格式说明和重新生成方法(npm run market)见 market/README.md。从市场安装后,Host 那一行仍需重启一次应用才会出现。

数据

项目元数据归 Host 所有,持久保存,与会话日志相互独立:

- $DSH_HOME/storages/dsh-projects.json —— 项目、会话到项目的归属、每个会话最后记录的工作目录;
- 会话本身仍归 Session Controller 所有(本插件不会往会话日志里写入任何内容)。

HTTP 路由由现有的 DSH web 服务器提供(与 GUI 同源):

| 方法 | 路径 | 用途 |
| GET | /dsh-projects/state | 完整的项目状态 |
| GET | /dsh-projects/health | 存活检查 + 计数 |
| POST | /dsh-projects/mutate | project.create、project.update、project.delete、session.assign |
| POST | /dsh-projects/cwd | 修改某个会话的工作目录 |
| POST | /dsh-projects/purge | 永久删除校验通过的空会话(有内容则拒绝) |
| GET | /dsh-projects/empty-sessions | 列出不含任何会话内容的会话 |

POST 路由要求 content-type: application/json 和 x-dsh-projects: 1,请求体上限 64 KiB。

构建

npm install # dev-only: esbuild, react, react-dom, playwright
node scripts/build.mjs # src/client/ -> client.js (committed artifact)
npm run pack # build + dist/<name>-<version>.tgz + SHA-256 + manifest
node harness/build.mjs # mock harness bundle
node harness/shoot.mjs # screenshots -> harness/shots/
npm test # host/model tests (node --test)

设计说明

- 浏览器入口注册到随包发布的 sidebar.workspaces 单槽位 priority: -1,覆盖 ui-workspace 的浏览器。内置入口仍注册在下面:如果我们的组件崩溃,它的入口会被让出,原来的侧边栏就会回来。
- 客户端 bundle 只从 shell 的共享模块表导入 react / react-dom / react/jsx-runtime,其余一切用 ctx 服务(sessions、workspaces、uiWorkspace、locale、slots)。
- 样式使用 --dsw- 主题 token;字面量只用于项目强调色图案。所有类名都加前缀 pj-。

在项目之间移动工作区和会话

一切都能迁移,不用删除或重建会话,只改项目元数据(会话日志从不触碰):

- 拖动会话行到任意项目分区 → 该会话被分配到那个项目(拖到 其他会话* 上则从它所属项目中移除)。
- 拖动工作区分组标题(在 其他会话 下)到任意项目分区 → 该目录移入那个项目(从其他项目的目录列表中移除,绝不重复),该目录下的每个会话都分配到它。拖动时,每个项目都显示虚线放置轮廓,悬停的目标会高亮。
- 菜单路径(不拖动也能得到同样结果):
- 工作区分组 ⋯ → 将工作区移动到项目 → 选择目标;
- 项目 ⋯ → 将工作目录移动到另一个项目… → 选择目录 → 选择目标项目(或 从项目中移除(回到其他会话));
- 会话 ⋯ → 移动到项目 → 选择目标(或 无项目)。

在项目之间移动目录,还会让之后在该目录中创建的会话(包括内置的 Cmd+N 流程)落到目标项目里,项目会保留工作区标题作为嵌套文件夹分组。

工作区标题(项目内和 其他会话 下都有)各自带菜单:重命名工作区…、将工作区移动到项目、从项目中移除 和 删除工作区。删除工作区只移除它的注册,把它的会话放回 其他会话 下,绝不删除会话。

与其他侧边栏插件的兼容性

已审计安装的、会触碰侧边栏的插件,浏览器保持它们的集成面不变:

| 插件 | 集成面 | 在 Projects 下的状态 |
| dsh-timeline | 把它的星标文件夹分区 DOM 注入到 [data-slot="sidebar.workspaces"] 之前;把会话行解析为 div[role="treeitem"][aria-selected];把「Star Chat to Folder」注入到以 body > [role="menu"] 找到的宿主菜单中 | 可用:slot 锚点保留(它的文件夹分区渲染在 Projects 上方),每一行都遵循内置的 treeitem/title DOM 约定,菜单/模态框都 portal 到 document.body,所以它注入的菜单项会出现并打开它自己的对话框 |
| dsh-cost-meter | 注册 sidebar.footer.action 条目,并自行设置页脚堆叠样式 | 无需改动即可工作:页脚操作位于被替换区域之外 |
| dsh-notification、dsh-plugin(hub)、dsh-thoughtdag、dsh-dafeiyu、dsh-plugin-whale-pet | 不使用 sidebar.workspaces DOM,也不使用行插槽(已审计客户端 bundle) | 无交互 |
| 内置 ui-workspace 浏览器 | 以优先级 0 注册插槽;其子级行扩展插槽(例如日程标记)只由它自己的组件渲染 | 我们的条目以优先级 -1 遮蔽它;如果我们的组件崩溃,它会退出,内置浏览器重新接管。Projects 激活期间不渲染子插槽扩展(非崩溃式降级) |

在真实 DSH 宿主中同时挂载 dsh-timeline、dsh-cost-meter 和 Projects 做实测:侧边栏把 57/57 个会话渲染成 timeline 兼容的 treeitem,timeline 的星标文件夹区块出现在 Projects 上方,timeline 的「Star Chat to Folder」条目注入到我们的会话菜单并能打开它的对话框,cost-meter 的页脚卡片正常渲染,我们的菜单和搜索保持可用,浏览器控制台没有报错。

已知限制(v1)

- 内置 ui-workspace 浏览器的子扩展插槽(sidebar.workspaces.session.menu.item、sidebar.session.row.leading 等)不由我们的浏览器渲染,所以注册到这些插槽的内置或第三方行装饰(例如日程标记)在它激活期间不会出现。内置的会话操作已在项目菜单中直接重新实现,dsh-timeline 基于 DOM 的装饰可以正常工作(见上文)。
- ui-workspace 拥有的全局快捷键(Cmd+N / Cmd+K)保持内置行为;我们的搜索框通过标题栏图标打开。
- 折叠的区块、归档过滤器和上次查看状态存在浏览器的 localStorage 里;项目数据存放在 Host 侧。
- 空会话扫描和永久删除走 Host 半边,所以如果客户端 bundle 比 Host 半边先热重载,就看不到它们:扫描会被跳过,清理退化为归档空白会话,并提示你重启应用一次。重启后,侧边栏会自动隐藏遗留的空聊天,同一个菜单项会把它们从磁盘删除。当前应用运行期间创建的空会话总是先归档,下次启动时可以清除。
预览分享卡片长什么样 ↓aobakaolengmian/dsh-projects
分享 · DeepSeek Harness Hub
aobakaolengmian/dsh-projects

把会话按项目分组管理,支持独立工作目录与拖拽迁移

这是你的仓库?认领条目

回到顶部