归档恢复会话、物理删除并跨工作区拖拽迁移
29.8/100
综合分
1
GitHub 星标
86
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-session-enhancenpm 源 · dsh-session-enhance 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 58 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-session-enhance @ 0.3.0
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/21 23:48:04
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)
查看扫描证据(共 45 处,展示前 43 条)
- 写入剪贴板lib/client.js:3506
Promise.resolve(_deepseek_ai_dsh_client_ui_primitives4.writeClipboard(sessionId)).then((ok) => { - 读取本地文件lib/settings.js:43
raw = await readFile(path, "utf8"); - 写入本地文件lib/settings.js:65
await mkdir(dirname(path), { recursive: true }); - 写入本地文件lib/settings.js:66
await writeFile(tmp, serialized, "utf8"); - 写入本地文件lib/settings.js:67
await rename(tmp, path); - 删除本地文件lib/settings.js:69
await rm(tmp, { force: true }).catch(() => {}); - 读取本地文件lib/domains/preview.js:58
const bytes = await readFile(file); - 读取本地文件lib/domains/move.js:48
const canonical = await realpath(targetRecord.path); - 读取本地文件lib/domains/delete.js:64
const transcriptExists = transcriptDir !== void 0 && transcriptDir !== null && existsSync(transcriptDir); - 删除本地文件递归lib/domains/delete.js:100
await rm(transcriptDir, { recursive: true, force: true }); - 删除本地文件递归lib/domains/delete.js:159
await rm(sessionDir(root, sessionId), { recursive: true, force: true }); - 读取本地文件lib/domains/sync.js:48
canonicalBySession.set(header.id, await realpath(header.cwd)); - 读取本地文件lib/domains/sync.js:111
const entries = await readdir(dir, { withFileTypes: true }); - 删除本地文件lib/domains/sync.js:114
await rm(join(dir, entry.name), { force: true }); - 读取本地文件lib/domains/tree.js:43
const text = await readFile(sidecarPath(persistence, header), "utf8"); - 写入本地文件lib/domains/tree.js:55
await writeFile(tmp, JSON.stringify(sidecar, null, 2), "utf8"); - 写入本地文件lib/domains/tree.js:56
await rename(tmp, file); - 删除本地文件lib/domains/tree.js:58
await rm(tmp, { force: true }).catch(() => {}); - 写入本地文件lib/domains/tree.js:112
await writeFile(tmp, encoded); - 写入本地文件lib/domains/tree.js:113
await rename(tmp, file); - 删除本地文件lib/domains/tree.js:115
await rm(tmp, { force: true }).catch(() => {}); - 写入本地文件lib/session-move.js:101
await rename(from, to); - 删除本地文件递归lib/session-move.js:105
await rm(from, { recursive: true, force: true }); - 写入本地文件lib/session-move.js:110
await mkdir(to, { recursive: true }); - 读取本地文件lib/session-move.js:111
for (const entry of await readdir(from, { withFileTypes: true })) { - 写入本地文件lib/session-move.js:115
else await copyFile(source, target); - 读取本地文件lib/session-move.js:136
for (const entry of await readdir(dir, { withFileTypes: true })) { - 删除本地文件lib/session-move.js:139
await rm(path, { force: true }); - 写入本地文件lib/session-move.js:184
await writeFile(tmp, encoded); - 写入本地文件lib/session-move.js:185
await rename(tmp, file); - 删除本地文件lib/session-move.js:187
await rm(tmp, { force: true }).catch(() => {}); - 写入本地文件lib/session-move.js:198
await writeFile(tmp, encoded); - 读取本地文件lib/session-move.js:226
if (!existsSync(oldDir)) return { moved: false, reason: "missing-transcript" }; - 读取本地文件lib/storage-sweep.js:80
raw = await readFile(file, "utf8"); - 写入本地文件lib/storage-sweep.js:99
await writeFile(tmp, serialized, "utf8"); - 写入本地文件lib/storage-sweep.js:100
await rename(tmp, file); - 删除本地文件lib/storage-sweep.js:104
await rm(tmp, { force: true }).catch(() => {}); - 读取本地文件lib/storage-sweep.js:121
entries = await readdir(root, { withFileTypes: true }); - 读取本地文件lib/storage-sweep.js:142
const unit = JSON.parse(await readFile(file, "utf8")); - 读取本地文件lib/storage-sweep.js:157
entries = await readdir(root, { withFileTypes: true }); - 读取本地文件lib/workspace-sweep.js:16
return (await readdir(dir)).length === 0; - 读取本地文件lib/workspace-sweep.js:31
entries = await readdir(root, { withFileTypes: true }); - 删除本地文件lib/workspace-sweep.js:62
await rmdir(path);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-home-paths@deepseek-ai/dsh-session-projection-cache@deepseek-ai/dsh-spill-local@deepseek-ai/dsh-typert-protocol@deepseek-ai/dsh-workspace@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 归档恢复会话
- 物理删除会话
- 跨工作区拖拽迁移
为 DeepSeek Harness Web 增强对话——归档管理会话、物理删除有保障、会话可跨工作区拖拽、对话通知,还有可分支的对话树。
最近更新
在 GitHub 查看全部 →v0.2.92026-09-07
· v0.2.9
· 🌳 对话树(Conversation Tree):会话不再是一条线,而是一棵树——每一轮提问是一个节点
- 在任意已完成回答处点击「重新生成」,或把历史提问改为新表述后「修改并重新生成」,都会在同一会话内长出新的分支;旧回答被完整保留,随时可以切回
- 会话视图左侧的树形概览:节点按分支着色、对应每一轮提问,悬浮查看该轮内容、点击跳转
- 在分叉点用 ‹ n/m › 控件在不同分支的续写之间自由切换
- 回答仍在生成时发起的分支操作会自动排队,生成结束后自动重放
- 安全保护:会改写既有子分支的危险操作一律拒绝,绝不产生悬空或丢失内容
· 对话树持久化模型:sidecar session.tree.json 保存分支元数据与非活动分支的事件段,主干日志始终是当前活动分支的合法线性记录;分支切换/重生成在同一会话内原地完成,不触发会话销毁与重开
· 截图与文档:新增对话树截图;刷新会话菜单 / 基础设置 / 归档管理 / 对话预览截图;README 双语重写,同步更新仓库说明
安装:dsh plugin --profile web add dsh-session-enhance(npm dsh-session-enhance@0.2.9)
仓库:
v0.2.82026-09-04
· v0.2.8
· 新增 preview 域:Markdown 预览(lib/domains/preview.js)
· 设置页增强:客户端设置界面重构与扩展(src/client/settings.js)
· 客户端与契约层更新:client.js、shared/contracts(invocations / schemas)
· 工作区逻辑增强(lib/workspace.js)
· 测试同步更新
安装:dsh plugin --profile web add dsh-session-enhance(npm dsh-session-enhance@0.2.8)
仓库:
v0.2.62026-08-31
· v0.2.6
· 修复:允许 esbuild 构建脚本在 pnpm 11 上运行(解决安装/构建时的 ERR_PNPM_IGNORED_BUILDS)。
· 重构:把客户端 bundle 拆成 src/client 下的 ESM 模块;把工作区注册表拆成按领域划分的模块;新增上游防腐层(会话/智能体/spill 闸门);抽出共享契约层(schemas/typert/constants)。
安装:
dsh plugin --profile web add dsh-session-enhance
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成⚡ DSH Session Enhance
面向 DeepSeek Harness Web 的对话增强插件。 让会话管理真正像工具而非一摞 JSON 文件:归档与恢复对话、保证物理删除、跨工作区拖拽会话、把任意对话变成可自由切换分支的树,以及后台对话需要你时第一时间通知你。
License DSH Node Type
这是什么
dsh-session-enhance 是针对 DeepSeek Harness(DSH)Web 的对话增强插件,致力于让每一次对话都更易于查找、整理、清理与回访——少花时间折腾会话列表,多花时间对话。
它的核心思路是把会话列表当成磁盘文件之上的一个视图,而不是独立的权威:下面每一项操作都是真实、经过校验的文件系统变更——失败自动回滚——侧栏与转录文件从此不会再悄悄对不上账。删除对话会真正抹掉它的文件;把对话拖到另一个工作区会真的搬移它的转录;在同一个对话里切换分支时,任何一条旧回复都不会丢失。
功能特性
🗂️ 归档与恢复在会话菜单里一键归档任意对话;归档行带有清晰标记、不再打扰你,需要时一键恢复。归档状态与工作区归属正交,因此已归档的对话会保留原来的位置。
- 会话菜单逐条 归档 / 恢复。
展开完整文档(README 剩余 1 节)
⚡ DSH Session Enhance 面向 DeepSeek Harness Web 的对话增强插件。 让会话管理真正像工具而非一摞 JSON 文件:归档与恢复对话、保证物理删除、跨工作区拖拽会话、把任意对话变成可自由切换分支的树,以及后台对话需要你时第一时间通知你。 License DSH Node Type 这是什么 dsh-session-enhance 是针对 DeepSeek Harness(DSH)Web 的对话增强插件,致力于让每一次对话都更易于查找、整理、清理与回访——少花时间折腾会话列表,多花时间对话。 它的核心思路是把会话列表当成磁盘文件之上的一个视图,而不是独立的权威:下面每一项操作都是真实、经过校验的文件系统变更——失败自动回滚——侧栏与转录文件从此不会再悄悄对不上账。删除对话会真正抹掉它的文件;把对话拖到另一个工作区会真的搬移它的转录;在同一个对话里切换分支时,任何一条旧回复都不会丢失。 功能特性 🗂️ 归档与恢复在会话菜单里一键归档任意对话;归档行带有清晰标记、不再打扰你,需要时一键恢复。归档状态与工作区归属正交,因此已归档的对话会保留原来的位置。 - 会话菜单逐条 归档 / 恢复。 - 归档管理(设置 → 对话增强 → 归档管理):搜索、按最近更新 / 创建时间 / 名称排序、按项目筛选、单条恢复、批量恢复(全部 / 按项目 / 未分组)。 - 预览对话 —— 只读打开任意已归档对话:按回合呈现用户 / 助手 / 系统消息,工具调用与结果、Markdown、内联图片都正常显示。 🗑️ 保证物理删除 “删除”就是真的删除。插件会移除一切,然后再证明给你看: - 先 flush + detach 正在运行的会话,释放仍持有它的 agent。 - 删除转录目录(带重试以应对 Windows 句柄延迟释放),并级联删除其子代理会话。 - 把该会话的痕迹从 ~/storages/.json、投影缓存、归档集合与各工作区记录里逐一清扫。 - 删除后校验磁盘上无任何残留;若有残留会明确告诉你。 - 为已删除 id 打墓碑,杜绝 stale 会话列表把幽灵复活;同 id 的全新对话仍能被正确识别。 删除确认弹窗会写清楚将失去什么(对话内容、子代理含正在运行的、各类缓存)。可删除单条,也可批量删除全部已归档对话——全部、某个项目或未分组集合。 📦 跨工作区移动 —— 直接拖拽把会话行拖到另一个工作区分组,它的转录会物理搬移到该项目的文件夹。会话文件内的 cwd 头部会被改写(zstd 感知:头部独占第一帧、布局经过校验、失败自动回滚),投影缓存 rehome 以保住标题,陈旧 agent 被释放。拖走的若正是当前打开的对话,它会自动重开并立即可用。拖到“未分组”则只是解除归属。在同一工作区内拖动会话行还可以调整顺序。 🔔 对话通知发起一个对话然后切走——当它在后台结束或需要你操作(等待审批、计划待审、等待回答)时,只要页面未聚焦就会弹出系统提示。可在基础设置里开关。 📋 复制会话 ID 会话菜单一键复制,已归档会话同样适用。 🌳 对话树每一段对话都是一棵树,而不是一条线。你的每一轮提问是一个节点;任何时候重生成或修改回答,都会长出新分支——旧回复被完整保留而非丢弃,随时可以切回去。 - 对话视图左侧绘制一棵树的概览:按分支着色的圆点(每个点对应一轮提问)与连线;悬浮圆点可查看该轮内容,点击可跳转到该轮。 - 重新生成 —— 在任意已完成回答下方的“重新生成”按钮,从那一轮回退并重新生成。 - 修改并重新生成 —— 打开你之前任意一条消息、改写后让 DSH 从新表述继续。 - 切换分支 —— 在分叉点用 ‹ n/m › 控件在同一对话的不同续写间来回切换。 - 安全设计:若某个更深的分支会被危险改写,插件会拒绝执行(并隐藏按钮),绝不产生悬空或丢失内容;回答仍在流式生成时发出的分支操作会排队,结束后自动重放。 🔁 记录同步与自愈会话索引可能因手动改文件或另一个 DSH 实例写盘而漂移: - 同步记录 以真实转录为权威对账记账:清理幽灵记录、把记错项目的会话移回真实项目、补录遗漏会话、清理投影缓存幽灵行并 rehome 身份。 - 启动时自动把被移动会话的缓存身份与物理头部对齐,标题不会在重启后退化成工作区名。 🧹 工作区与磁盘卫生 - 在侧栏管理工作区:选择已存在文件夹创建工作区、重命名、删除(其会话回落到“未分组”,文件保留),以及在工作区内新建会话。 - 在归档管理中删除某个项目,会一并删除该项目全部已归档对话,项目文件夹清空后也会被移除。 - 磁盘上残留的空工作区目录会被列出并可删除。 ⚙️ 设置设置 → 对话增强 有两个页签: - 基础设置 —— .dsh 家目录(插件据此定位 storages / sessions / attachments,默认 ~/.dsh,可手动选目录或恢复默认)与 对话通知 开关。 - 归档管理 —— 即上文归档相关的全部能力。 效果截图 设置 设置 → 对话增强 → 基础设置。 归档管理 在 设置 → 对话增强 → 归档管理 管理已归档对话:搜索、排序、按项目筛选、同步记录、恢复与删除。 对话预览 在 设置 → 对话增强 → 归档管理 中预览已归档的对话。 侧栏会话菜单 工作区侧栏里的会话操作(归档、复制 ID、删除等)。 对话树 有分支会话的对话树:左侧轨道上每一轮提问是一个按分支着色的节点;已完成的回答可“重新生成”,历史提问可“修改并重新生成”;在分叉点用 ‹ n/m › 在同一对话的不同续写间切换。 对话结束通知 后台对话结束时的系统提示。 需要操作通知 后台对话需要你操作时的系统提示。 安装 需要可用的 DeepSeek Harness Web 环境(dsh 在 PATH、web profile 已初始化)以及 Node.js ^22.19.0 || >=24.0.0。 从 GitHub(最新提交) dsh plugin --profile web add github:Tinger-X/dsh-session-enhance 从 npm(稳定版本) dsh plugin --profile web add dsh-session-enhance 从源码(开发) git clone https://github.com/Tinger-X/dsh-session-enhance.git cd dsh-session-enhance; pnpm install dsh plugin --profile web add . dsh --profile web --dump-config 重启 DSH Web 并强制刷新(Ctrl+F5)。设置中会出现「对话增强」入口。 对话树功能跟随开发分支推进。如果你安装的是 npm 稳定版却看不到对话树,请用上方的最新提交方式更新。 快速上手 - 浏览 —— 搜索、按工作区(或单列)分组、按最近 / 手动排序,行上直接看会话状态。 - 归档 —— 会话菜单 → Archive;稍后在 设置 → 对话增强 → 归档管理 里打理。 - 预览 —— 已归档聊天行上的眼睛图标。 - 删除 —— 会话菜单 → Delete session(一律确认)。批量:归档管理 → 分组的 Delete all。 - 移动 —— 把会话行拖到另一个工作区;在工作区内拖动可调整顺序。 - 复制 ID —— 会话菜单 → Copy ID*。 - 通知 —— 发起对话后切到别处。 - 分支 —— 打开对话:用回答下的“重新生成”或你消息上的编辑按钮来长出分支,在分叉点用 ‹ › 切换分支。 路线图 规划中 / 开发中的想法,不分先后: - 打开工作区目录。 - 定时归档 —— 自动归档长期不活跃的对话。 - 在工作区会话列表中直接批量归档、批量删除。 - 对话星标 —— 将对话标星、排在工作区最前,且不参与自动归档。 - 对话分享 —— 导出 / 导入整棵对话树(.dshse-share),导入后可继续对话。 - 删除单个对话节点 / 分支。 - 对话树控制的深化、性能与稳定性。 - 对话内容回退(回退到对话中途,并一并回退当时改动的文件)。 - 其它让对话更顺手的相关功能。 License Apache-2.0。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Tinger-X/dsh-session-enhance
归档恢复会话、物理删除并跨工作区拖拽迁移
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,489已汉化DSH
73.1
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,918已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,453已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
Download DS Bot for Windows 10/11 64-bit / 下载 Windows…
★ 5,293已汉化DSH
71.2
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,797已汉化DSH
71.1
这是你的仓库?认领条目