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

会话增强管理 Tinger-X/dsh-session-enhance

DeepSeek Harnessv0.3.0
Tinger-X58 天前有提交已提供中文文档扫描:含敏感能力

归档恢复会话、物理删除并跨工作区拖拽迁移

29.8/100
综合分
1
GitHub 星标
86
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-session-enhance
npm 源 · dsh-session-enhance 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · chat
装得上吗
静态安装检查通过
未做真实安装
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件写入剪贴板(不计风险)
查看扫描证据(共 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 增强对话——归档管理会话、物理删除有保障、会话可跨工作区拖拽、对话通知,还有可分支的对话树。

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。
预览分享卡片长什么样 ↓Tinger-X/dsh-session-enhance
分享 · DeepSeek Harness Hub
Tinger-X/dsh-session-enhance

归档恢复会话、物理删除并跨工作区拖拽迁移

这是你的仓库?认领条目

回到顶部