把会话按项目分组管理,支持独立工作目录与拖拽迁移
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add aobakaolengmian/dsh-projects该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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 半边先热重载,就看不到它们:扫描会被跳过,清理退化为归档空白会话,并提示你重启应用一次。重启后,侧边栏会自动隐藏遗留的空聊天,同一个菜单项会把它们从磁盘删除。当前应用运行期间创建的空会话总是先归档,下次启动时可以清除。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
aobakaolengmian/dsh-projects
把会话按项目分组管理,支持独立工作目录与拖拽迁移
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目