无项目新会话自动分配独立本地目录
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/8 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/Castor6/dsh-auto-workspace.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 25 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 9 处,展示前 9 条)
- 读取本地文件lib/index.js:118
const parsed = JSON.parse(await readFile(this.file, 'utf8')) - 写入本地文件lib/index.js:161
await mkdir(dirname(file), { recursive: true }) - 写入本地文件lib/index.js:163
await writeFile(temporary, text, 'utf8') - 写入本地文件lib/index.js:164
await rename(temporary, file) - 写入本地文件lib/index.js:183
await mkdir(dateDir, { recursive: true }) - 读取本地文件lib/index.js:187
for (const entry of await readdir(dateDir, { withFileTypes: true })) { - 写入本地文件lib/index.js:198
await mkdir(candidate) - 读取本地文件lib/index.js:212
if ((await readdir(dir)).length === 0) await rmdir(dir) - 删除本地文件lib/index.js:212
if ((await readdir(dir)).length === 0) await rmdir(dir)
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 无项目会话分配本地目录
- 保留原生新建聊天界面
DeepSeek Harness 支持 Codex 风格的无项目聊天:新建聊天不绑定项目时,会分配独立的本地工作目录,同时保留 DSH 原生的新建聊天界面
README
由 DeepSeek 最新模型翻译生成dsh-auto-workspace — 为每个会话自动创建独立工作区
dsh-auto-workspace
DeepSeek Harness 的 Codex 式无项目聊天。
点「新会话」而不选项目,直接就能开始打字。插件会给这个会话一个独立的本地工作目录,Agent 的文件工具和 shell 命令都在里面执行;下次回到这个会话,它仍然在同一个目录里工作。侧栏的项目列表不会因此多出任何东西。
它改了什么
DSH 只在一个地方决定会话的工作目录:
// @deepseek-ai/dsh-api-session-controller
const cwd = workspace?.path ?? request.cwd ?? this.defaultCwd
this.defaultCwd 就是 Host 进程自己的 process.cwd()。GUI 永远会带上 workspaceId,所以这条兜底平时不会触发 —— 但原生根本没有「不选项目」这个选项,而任何其它入口只要不指定项目,就会静默继承 DSH 启动时所在的目录。
这个插件只接管这一条兜底,别的一概不动。
展开完整文档(README 剩余 1 节)
dsh-auto-workspace — 为每个会话自动创建独立工作区 dsh-auto-workspace DeepSeek Harness 的 Codex 式无项目聊天。 点「新会话」而不选项目,直接就能开始打字。插件会给这个会话一个独立的本地工作目录,Agent 的文件工具和 shell 命令都在里面执行;下次回到这个会话,它仍然在同一个目录里工作。侧栏的项目列表不会因此多出任何东西。 它改了什么 DSH 只在一个地方决定会话的工作目录: // @deepseek-ai/dsh-api-session-controller const cwd = workspace?.path ?? request.cwd ?? this.defaultCwd this.defaultCwd 就是 Host 进程自己的 process.cwd()。GUI 永远会带上 workspaceId,所以这条兜底平时不会触发 —— 但原生根本没有「不选项目」这个选项,而任何其它入口只要不指定项目,就会静默继承 DSH 启动时所在的目录。 这个插件只接管这一条兜底,别的一概不动。 | 目录 | ~/Documents/DSH/<YYYY-MM-DD>/chat-NN/(Windows 上是 %USERPROFILE%\Documents\DSH) | | 分组 | 会话不会进入项目列表;DSH 把它们归在自己原生的「未分组」分组下 | | 恢复 | 目录写在会话自己的 cwd header 里,重新打开这个会话就复用原目录,文件全部保留 | | 继承 | 显式指定的项目优先。在项目里点「新会话」仍在那个项目;在无项目会话里点,保持无项目 | | 入口 | 悬浮在新建会话 Hero 的项目 chip 上时,它的文件夹图标会换成一个圆形清除徽标 —— 点它即离开项目。选择器菜单里另有一行「不在工作区中工作」。未选择项目时 chip 显示「选择工作区」,也不出现徽标 | | 新建会话界面 | 无项目会话保留 DSH 原生的「尚未开始」Hero —— 鱼标、标题、chip 行、agent preset 控件 —— 因为有一个仅存在于浏览器端的哨兵工作区为输入框提供标题 | | 清理 | 不删除任何东西。只有会话创建失败、且目录还是空的时候,才会回收那个目录 | 安装 这个包是一个 DSH bundle:package.json 里声明了 dsh.bundle.patch,所以安装它会把该 bundle 追加到 profile 的 dsh.profile.bundles,并激活它的加载行。 Web 端使用以下命令安装: dsh plugin --profile web add github:Castor6/dsh-auto-workspace 桌面端不支持通过命令行安装。请从左侧导航栏进入插件,输入 github:Castor6/dsh-auto-workspace 或仓库地址 https://github.com/Castor6/dsh-auto-workspace 进行安装。 配置 在 profile patch(~/.dsh/profiles/<profile>/cordis.patch.yml)里该插件的加载行上设置: - id: auto-workspace config: root: '/Volumes/Work/DSH' # 默认:<home>/Documents/DSH directoryPrefix: 'chat' # 默认:chat → chat-01, chat-02, ... enabled: true # 默认:true <root>/.dsh-auto-workspace.json 记录「会话 → 目录」的映射。它只是一层缓存:删掉它,插件会从每个会话自己持久化的 header 重建。删掉整个 root 就等于删掉所有无项目聊天的文件。 实现原理 Host 端(lib/index.js,只 import Node 内建模块 —— 用 link: 方式安装的插件是按真实路径加载的,那里没有 node_modules): - 包装 ctx.sessionController.create。带了 workspaceId 或显式 cwd 的请求原样放行;两者都没有的请求,才会从分配器拿到一个目录。用不带 recursive 的 mkdir 作为原子占位,所以并发创建也不会撞名。 - SessionHeader.cwd 一旦写入就不可变,所以目录名只定一次、永不改名 —— 这也是为什么「日期目录 + chat-NN」在创建时就固定下来。 - 恢复以持久化的 header 为准:resumeObserved 读 header.cwd,没有就直接拒绝。所以在创建时把目录注入进去,才是无项目聊天能够持久化的关键。 浏览器端(lib/client.js,手写的 lazy-CJS bundle —— 无需构建;react、react-dom 和 @deepseek-ai/dsh-client-ui-primitives 都是 shell 提供的 seed 模块): - 以 priority: -1 占用 conversation.hero.workspace,把原生选择器从这个 single 座位上影子掉(默认优先级是 0)。项目列表、选中态勾选、文件夹错误弹窗都原样保留。 - 增加清除徽标。项目 chip 是 shell 渲染的、没有对应插槽,所以徽标是在悬浮时替换 chip 的文件夹图标:一个文档级指针监听结构化地找到这个 chip —— 它是本插件自己的插槽锚点紧邻的前一个兄弟节点,而框架把该锚点渲染成带 display: contents 的 div[data-slot="conversation.hero.workspace"] —— 然后把原图标隐藏,并在它实测出来的矩形上 居中叠一个徽标;徽标画得比图标包围盒小,因为实心圆看起来比它替换掉的线性图标更重。这里不依赖任何文案,所以中英切换也不受影响。选择器的 footer 里「添加文件夹」旁边多了一行「不在工作区中工作」。未选择项目时这两个入口都不出现;万一 chip 定位不到,就退化成 chip 左边一个内联徽标。 - 采纳文件夹走的是 ctx.uiWorkspace.pickDirectory() —— 正是原生 …directoryFlow 占用者最终调用的东西。这一步没法委托给那个洞:插槽占用者只能渲染它自己声明过的子插槽,而一个子插槽名只能被声明一次,所以影子占用者永远渲染不了原生注册声明过的洞。 - 用一个哨兵工作区把 Hero 留住。 原生 DSH 只给「属于某个工作区」的会话提供可用输入框: ConversationMainPanel 在 chipTitle === undefined 时禁用它,而 chipTitle 只可能来自工作区标题。把会话挂到一个真工作区上,正是本插件不能创建的侧栏项目,而且还会把聊天从「未分组」里搬走。所以浏览器端的投影追加一个哨兵工作区 —— 只存在于客户端、从不注册到 Host、不承载任何会话 —— 再由 Hero 自己的选择器回调把它选中,chipTitle 就有了值。它只在主会话是无项目时才出现在投影里,所以一旦导航到项目会话它就会消失,面板自己会把过期的选中态清掉。 这个哨兵不可避免地会进入侧栏的分组列表(该列表会为每个工作区渲染一行,空工作区也不例外);那一行用一个监听 DOM 变化的 display: none 藏掉。 - 兜底:改用快照覆盖。 如果哨兵装不上(比如那个 store 不可写),插件会自己发现,转而通过每个会话自己的 shell 快照,把无项目会话报告成「有内容」(blank: false, awaitingFirstTurn: false),于是渲染成普通的活跃会话输入框。聊天依然可用,只是丢掉 Hero。 这条路径只动那一个快照 —— 会话列表里的真实 blank 原样保留,所以侧栏可见性、原生空白会话复用、以及本插件自己的复用都维持原生行为。 - 包装 ctx.uiWorkspace.startSession,让当前是无项目会话时继续无项目,而不是跳到最近活跃的项目。 - 给「未分组」分组标题上那个新建会话按钮搭了个桥。原生 DSH 会把它渲染出来,但处理函数是 if (group.workspaceId !== void 0),而这个分组没有工作区 id,所以它是个死按钮。分组标题 内部没有插槽可占,而替换 sidebar.workspaces 等于把整个侧栏浏览器重写一遍;这里改用捕获阶段的监听,按同一个 locale 服务产出的无障碍名匹配那个按钮。文案改名或标题结构变化时它就不再匹配,原生行为自然回归。 已知限制 - Host 包装和客户端补丁伸进了包的内部实现(sessionController.create、 uiWorkspace.startSession、sessions.binding 的快照 store),而不是公开扩展点。它们都是防御性写法:形状一变,插件打一条 warning 并保持惰性,而不是把应用弄坏。 - Hero 选择器的占用者影子掉了原生 UI。DSH 若重新设计这个选择器,需要重新核验本插件。 - chat-NN 的序号是按天、尽力而为的:删掉某天的目录会让序号可被复用,所以序号在时间上不单调。 - 无项目会话出现在 DSH 原生的「未分组」分组下。它们从不被注册成项目。 - 哨兵工作区是通过「标签文本 + 容器类名后缀 groupSection」从侧栏里藏掉的。如果 DSH 的改版破坏了其中任何一条,侧栏会多出一行标题为「选择工作区」的空项目行 —— 纯粹是外观问题。把 lib/client.js 顶部的 HERO_FOR_PROJECT_LESS 改成 false 就能彻底去掉哨兵、回到快照覆盖方案;客户端 bundle 每次加载页面都会重新读取,刷新一次即生效。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Castor6/dsh-auto-workspace
无项目新会话自动分配独立本地目录
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9