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

会话归档管理 imrascal/dsh-archive

DeepSeek 客户端
imrascal38 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

在设置面板恢复或彻底清理归档会话与回收站

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

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

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/imrascal/dsh-archive.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 38 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包@imrascal/dsh-archive(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/17 15:07:02

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 12 处,展示前 12 条)
  • 写入本地文件
    dsh/index.js:179
    await mkdir(root, { recursive: true })
  • 写入本地文件
    dsh/index.js:181
    await rename(dir, target)
  • 读取本地文件
    dsh/index.js:197
    entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    dsh/index.js:229
    entries = await readdir(trashRoot(), { withFileTypes: true })
  • 读取本地文件
    dsh/index.js:258
    entries = await readdir(root, { withFileTypes: true })
  • 读取本地文件
    dsh/index.js:278
    movedAt: Number.isFinite(movedAt) && movedAt > 0 ? movedAt : (await stat(dir)).mtimeMs,
  • 写入本地文件
    dsh/index.js:291
    await mkdir(dirname(target), { recursive: true })
  • 写入本地文件
    dsh/index.js:292
    await rename(dir, target)
  • 删除本地文件递归
    dsh/index.js:298
    await rm(dir, { recursive: true, force: true })
  • 读取本地文件
    dsh/index.js:304
    entries = await readdir(root, { withFileTypes: true })
  • 删除本地文件递归
    dsh/index.js:312
    await rm(join(root, entry.name), { recursive: true, force: true })
  • 发起网络请求
    dsh/client.js:206
    return fetch('/dsh-archive/session', {
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 恢复归档会话
  • 彻底清理回收站

DeepSeek Harness归档会话管理插件

README

由 DeepSeek 最新模型翻译生成
@imrascal/dsh-archive DeepSeek Harness(DSH)归档会话管理插件:在设置面板中管理归档会话与回收站。 - 存档会话(Archived Sessions):查看已归档的会话(从侧边栏隐藏但记录保留),单个或全部恢复,或移入回收站。 - 回收站(Trash):查看已删除的会话,恢复、彻底删除(purge)单条,或清空全部。 删除是可逆的:删除会话 = 移入回收站(~/.dsh/trash),只有 purge / 清空才是永久删除。 运行中的(live)会话拒绝删除,UI 会给出明确提示。 安装 dsh plugin --profile web add github:imrascal/dsh-archive 或从本地目录安装: dsh plugin --profile web add file:C:/path/to/dsh-archive 安装后重启应用(宿主插件随启动加载),再刷新页面即可在 设置 → 存档会话 看到本插件。 需要 pnpm 在 PATH 中(dsh plugin 是 pnpm 转发器)。
展开完整文档(README 剩余 1 节)
@imrascal/dsh-archive

DeepSeek Harness(DSH)归档会话管理插件:在设置面板中管理归档会话与回收站。

- 存档会话(Archived Sessions):查看已归档的会话(从侧边栏隐藏但记录保留),单个或全部恢复,或移入回收站。
- 回收站(Trash):查看已删除的会话,恢复、彻底删除(purge)单条,或清空全部。

删除是可逆的:删除会话 = 移入回收站(~/.dsh/trash),只有 purge / 清空才是永久删除。
运行中的(live)会话拒绝删除,UI 会给出明确提示。

安装

dsh plugin --profile web add github:imrascal/dsh-archive

或从本地目录安装:

dsh plugin --profile web add file:C:/path/to/dsh-archive

安装后重启应用(宿主插件随启动加载),再刷新页面即可在 设置 → 存档会话 看到本插件。

需要 pnpm 在 PATH 中(dsh plugin 是 pnpm 转发器)。

工作原理

本插件把一个原本以「内置包补丁」形式存在的功能(dsh-workspace / dsh-session-persistence-jsonl / dsh-host-apiproxy / dsh-client-runtime / dsh-client-ui-workspace 等 12 个文件的本地改动,见 patches/ 参考补丁)重写为独立插件,并做了双路径设计:

| 路径 | 触发条件 | 行为 |
| 原生(native) | 宿主/客户端已带归档 API(如本仓库改过的安装) | 客户端直接调用 ctx.workspaces.unarchiveSession / trashList / ...,走宿主 RPC 与 store 帧同步,与内置实现完全一致 |
| 降级(fallback) | 升级后宿主或客户端回到原版(stock) | 宿主半在启动时自动补齐 sessionPersistence 的回收站层与 workspaceRegistry 的归档 API;客户端走插件自带的 /dsh-archive/session HTTP 接口 |

因此应用升级后功能不丢:回收站数据在 ~/.dsh/trash(与应用代码无关,升级天然保留);归档集合在 workspace registry 的持久化状态中;无论升级后代码变成什么样,插件都会在运行时 feature-detect 并补上缺失的部分。

文件结构

dsh/index.js 宿主半:sessionPersistence 回收站层 + workspaceRegistry API + /dsh-archive/session 路由 dsh/client.js 浏览器半:设置面板「存档会话」区块(settings.section 插槽),零构建、仅依赖 react cordis.patch.yml bundle 挂载声明 patches/ 内置补丁的参考 diff(宿主侧 6 个文件;客户端侧由插件直接取代) scripts/ eval-check.mjs(客户端 factory 求值校验)与 host-logic-test.mjs(宿主半逻辑测试)

从「内置补丁」迁移到插件(可选)

如果你的 DSH 安装之前打过本地的存档管理补丁(本仓库的开发环境即是如此),插件与内置补丁会重复注册同一个 archived-sessions 设置区块。迁移步骤:

1. 恢复 node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/client.js 为官方原版(删除内置的 ArchivedSessionsSection 注册;宿主侧补丁可保留,插件会自动识别并 no-op)。
2. 安装并重启本插件。
3. 插件检测到同名区块已存在时会自动让位(stand down),避免重复;移除内置补丁后插件接管。

如果你希望宿主侧也回到官方原版(让插件全权接管),可先备份 ~/.dsh 数据目录,再按 patches/ 的逆向来恢复宿主包,最后用本插件的宿主半自动补齐。回收站数据(~/.dsh/trash)与归档集合不受影响。

数据安全

- 删除会话 → 移到 ~/.dsh/trash/-/,可随时恢复。
- 彻底删除 / 清空回收站 为永久操作,UI 有二次确认弹窗。
- 附件为内容寻址共享存储,删除会话不会删除附件。
- 运行中的会话(live)不可删除,宿主返回 session-live,UI 提示先切换或重启。

兼容性

- 目标 DSH:0.1.0-rc.5 起,同时兼容原生 Web UI(dsh web 浏览器访问)与桌面版 GUI (Electron 窗口)——两者共用同一套宿主服务与客户端 bundle,一份实现双端生效。
- 原版宿主(rc.5 未打补丁 / rc.6):宿主半运行时补齐回收站层与 registry API;客户端走 /dsh-archive/session 降级接口。
- 自带该功能的宿主——rc.5 打了内置补丁的,以及上游已原生合并同一套后端的宿主:所有步骤自动检测并 no-op;客户端直连原生 ctx.workspaces API。原生能力每次调用实时判定,服务晚到(registry 放在 inject 门后)也会自动切回原生,不会永远卡在降级路径。
- 原生 API 只带一半(0.2.4 修复):上游是逐个方法补齐 registry API 的——DSH 0.1.7-rc.1 原生有 archiveSession/unarchiveSession,但没有 deleteSession,persistence 也完全没有回收站层。插件现在逐方法特征检测:只补缺失的那几个(这里是 deleteSession + trashList/trashRestore/trashPurge/trashEmpty 与 persistence 回收站层),原生方法一律不覆盖。
0.2.3 及更早把「有 unarchiveSession」当成「整套 API 都在」,直接跳过补丁 → 每次删除都报 workspace registry backend is not available yet。
- deleteSession 采用 fail-closed:persistence 不具备回收站能力时拒绝删除(不删任何东西),插件永远不会驱动官方硬删除后端。
- 宿主半对每个补丁都有形状守卫,遇到不认识的形态安全跳过并打日志,不会拖垮应用。
- Cordis 4 严格注入(0.2.1 修复):DSH Desktop 新版携带 @deepseek-ai/cordis 4.x,从 ctx 直接读服务属性(ctx.sessionPersistence)仅在当前 fiber 的 inject 声明了该服务时才允许,否则抛 cannot get property "X" without inject。宿主半改用 ctx.get(...) 与补丁方法的接收者 this.ctx(Cordis 会 shadow 回注册表自身 fiber)解析服务——绝不通过 registry.ctx 读追踪包装器(其 ctx 属性解析为调用方的 ctx)。旧版 Cordis 3.x 宿主两种写法都行;0.2.1 的写法在 Cordis 4 上是必须的。
- 客户端双 store 重同步(0.2.2 修复):降级路径删除后,客户端现在同时刷新 workspaces 与 sessions 两个 store。0.2.0/0.2.1 只刷新了工作区视图——已删会话残留在旧 sessions 列表、又不在任何工作区的 sessionIds 里 → 侧边栏把它渲染进未分组桶(直到下次整体刷新才消失)。
- 存储形态容错(0.2.3 修复):宿主半不再假设日志的查找返回形态。旧宿主 findLog 返回路径
字符串,新宿主返回世代记录({ sourcePath, sourceVersion, currentPath })——按字符串使用会
让每次删除都失败在 The "path" argument must be of type string. Received an instance of Object,且在移动任何文件之前就中止。会话目录内的日志同样改为列目录取最高世代,不再硬编码
session.jsonl[.zstd]:格式 v0 用该名字,之后每一代是 session.vN.jsonl[.zstd](迁移过会话
格式的宿主存的是 session.v3.jsonl.zstd),同一目录可能两者并存。不改这一点,按世代命名的回收站条目在「回收站列表 / 恢复」里会看不见。
- 平台:Windows / macOS / Linux(回收站为纯 Node fs 实现,无平台假设)。

开发

npm install # 拉取 @deepseek-ai/cordis devDependency
node scripts/host-logic-test.mjs # 宿主半全链路:删除→回收站→恢复→purge→清空→live 拒绝;覆盖世代记录版 findLog 与两种日志命名(0.2.3)
node scripts/host-robustness-test.mjs # 晚到服务注入 + fail-closed 删除 + 路由按需补丁
node scripts/cordis4-strict-test.mjs # 真实 Cordis 4 严格注入回归测试(0.2.1 "without inject" 修复)
node scripts/eval-check.mjs # 客户端 bundle 求值 + apply + 插槽注册 + 晚到服务实时判定 + 双 store 重同步(0.2.2)

License

MIT
预览分享卡片长什么样 ↓imrascal/dsh-archive
分享 · DeepSeek Harness Hub
imrascal/dsh-archive

在设置面板恢复或彻底清理归档会话与回收站

这是你的仓库?认领条目

回到顶部