DSH Archive Manager — 在 DeepSeek Harness 中安全查看、恢复和管理已归档会话 · 在 DSH 中安全查看、恢复和管理已归档会话
64.9/100
综合分
278
GitHub 星标
118,535
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @michengai/dsh-archive-managernpm 源 · @michengai/dsh-archive-manager 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包@michengai/dsh-archive-manager @ 1.1.19
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 09:02:40
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 55 处,展示前 54 条)
- 读取本地文件lib/workspace.js:49
await lstat(path); - 读取本地文件lib/workspace.js:58
const s = await lstat(path); - 读取本地文件lib/workspace.js:61
const entries = await readdir(path, { withFileTypes: true }); - 读取本地文件lib/workspace.js:66
const fileStat = await lstat(join(path, entry.name)); - 读取本地文件lib/workspace.js:547
const projects = await readdir(root); - 读取本地文件lib/workspace.js:905
stat = await lstat(path); - 删除本地文件递归lib/workspace.js:921
await rm(target.path, { recursive: true, force: true }); - 删除本地文件lib/workspace.js:1006
await rm(sessionDir(spill.root, sessionId), { - 读取本地文件lib/plugin-settings.js:26
if (!existsSync(dir)) { - 写入本地文件lib/plugin-settings.js:27
mkdirSync(dir, { recursive: true }); - 写入本地文件lib/plugin-settings.js:32
await writeFile(tmp, next, "utf8"); - 写入本地文件lib/plugin-settings.js:34
await rename(tmp, file); - 删除本地文件lib/plugin-settings.js:39
await unlink(tmp).catch(() => { - 删除本地文件lib/plugin-settings.js:44
await unlink(backup).catch(() => { - 写入本地文件lib/plugin-settings.js:46
await rename(file, backup); - 写入本地文件lib/plugin-settings.js:48
await rename(tmp, file); - 写入本地文件lib/plugin-settings.js:50
await rename(backup, file).catch(() => { - 删除本地文件lib/plugin-settings.js:52
await unlink(tmp).catch(() => { - 删除本地文件lib/plugin-settings.js:56
await unlink(backup).catch(() => { - 读取本地文件lib/plugin-settings.js:61
if (!existsSync(path)) { - 读取本地文件lib/plugin-settings.js:65
const raw = await readFile(path, "utf8"); - 读取本地文件lib/plugin-updater.js:68
if (isDshCliEntry(entry, JSON.parse(readFileSync(manifestPath, "utf8")), directory)) return entry; - 请求外部主机registry.npmjs.orglib/plugin-updater.js:209
const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest`, { signal: AbortSignal.timeout(8e3) }); - 发起网络请求lib/plugin-updater.js:209
const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest`, { signal: AbortSignal.timeout(8e3) }); - 读取本地文件lib/plugin-updater.js:220
const value = record(JSON.parse(await readFile(manifestUrl, "utf8"))); - 执行外部命令来自配置/变量lib/plugin-updater.js:241
const child = spawn(process.execPath, [entry, "plugin", "--profile", target.profileName, "add", "--config.minimumReleaseAge=0", packageSpec, "--regist - 执行外部命令来自配置/变量lib/plugin-updater.js:273
const child = spawn(manager.command, [...manager.args, "add", "--config.minimumReleaseAge=0", packageSpec, "--registry=https://registry.npmjs.org/"], - 执行外部命令来自配置/变量lib/native-explorer.js:17
return spawn(file, args, { detached: true, stdio: "ignore" }); - 写入剪贴板lib/archive-discovery.js:53
await clipboard.writeText(text); - 读取本地文件lib/session-move.js:213
await stat(targetLogPath); - 写入本地文件lib/session-move.js:222
await mkdir(backupRoot, { recursive: true }); - 读取本地文件lib/session-move.js:226
const sourceBytes = await readFile(sourceLogPath); - 写入本地文件lib/session-move.js:240
await rename(sourceSessionDir, backupDir); - 写入本地文件lib/session-move.js:242
await mkdir(targetSessionDir, { recursive: true }); - 写入本地文件lib/session-move.js:244
await writeFile(stageFile, newBytes); - 写入本地文件lib/session-move.js:245
await rename(stageFile, targetLogPath); - 读取本地文件lib/session-move.js:247
const readbackBytes = await readFile(targetLogPath); - 删除本地文件lib/session-move.js:309
if (stageFile) await rm(stageFile, { force: true }).catch(() => { - 删除本地文件递归lib/session-move.js:311
await rm(targetSessionDir, { recursive: true, force: true }).catch(() => { - 写入本地文件lib/session-move.js:315
await mkdir(dirname(sourceSessionDir), { recursive: true }); - 删除本地文件递归lib/session-move.js:331
await rm(backupDir, { recursive: true, force: true }).catch(() => { - 读取本地文件lib/release-age.js:121
const current = existsSync(file) ? await readFile(file, "utf8") : "packages:\n - .\n"; - 读取本地文件lib/release-age.js:121
const current = existsSync(file) ? await readFile(file, "utf8") : "packages:\n - .\n"; - 写入本地文件lib/release-age.js:127
await writeFile(tmp, next, "utf8"); - 写入本地文件lib/release-age.js:129
await rename(tmp, file); - 删除本地文件lib/release-age.js:134
await unlink(tmp).catch(() => { - 删除本地文件lib/release-age.js:139
await unlink(backup).catch(() => { - 写入本地文件lib/release-age.js:141
await rename(file, backup); - 写入本地文件lib/release-age.js:143
await rename(tmp, file); - 写入本地文件lib/release-age.js:145
await rename(backup, file).catch(() => { - 删除本地文件lib/release-age.js:147
await unlink(tmp).catch(() => { - 删除本地文件lib/release-age.js:151
await unlink(backup).catch(() => { - 读取本地文件lib/release-age.js:156
const current = existsSync(file) ? await readFile(file, "utf8") : "packages:\n - .\n"; - 读取本地文件lib/release-age.js:156
const current = existsSync(file) ? await readFile(file, "utf8") : "packages:\n - .\n";
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:registry.npmjs.org
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-api-gateway@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-client-ui-workspace@deepseek-ai/dsh-host-webserver给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
2 张 · 点击查看大图功能亮点
- 查看已归档会话
- 恢复已归档会话
- 管理已归档会话
最近更新
在 GitHub 查看全部 →v1.1.222026-10-30
· 中文说明
· 在「移动到工作区」子菜单的工作区名称旁增加文件夹图标,方便识别目标工作区。
---
· English
· Add folder icons beside workspace names in the “Move to workspace” submenu, making destination workspaces easier to recognize.
v1.1.212026-10-30
· 中文说明
· 修复运行失败或转录损坏的活跃会话无法删除的缺陷(#101):
- 当会话因模型缺少 toolCallId 等原因抛出 SessionFormatError 导致本轮运行失败时,从侧栏右键菜单直接删除该会话不再被宿主 flush 屏障再次报错阻断;
- 预先捕获内存中活跃会话的头部索引,将删除前落盘操作改造为容错机制,确保无论日志是否损坏均能强制分离写句柄并彻底销毁物理转录目录及工作区成员绑定。
---
· English
· Fix failure deleting active sessions with corrupt transcripts or missing tool call IDs (#101):
- Resolves an issue where sessions failed mid-turn due to missing toolCallId or format errors (such as SessionFormatError: format v4 tool/result requires toolCallId matching its tool source) could not be deleted from the sidebar context menu because the host's flush barrier re-threw the corruption error.
- Caches live session headers prior to deletion and degrades flush barriers into fail-soft operations, ensuring write handles are detached and transcript directories/workspace memberships are cleanly purged even when transcripts are damaged.
v1.1.202026-10-30
· 中文说明
· 清理已废弃的历史工作区浏览器死代码与未消费文案(#100):
- 彻底清理了早期剥离侧栏浏览器组件时遗留的 store 工厂、偏好迁移逻辑(WorkspaceView)、废弃分组/搜索纯函数(deriveGroups / deriveFlat / deriveSearchResults 等)及相关单测;
- 彻底摘除了零消费的 @deepseek-ai/dsh-client-store 依赖与 peerDependencies 硬门槛,使插件对宿主环境的契约更加轻量;
- 同步清理了三语字典中 67 个完全未被调用的历史遗留文案 key 以及孤儿样式规则,进一步精简包体积与维护复杂度。
---
· English
· Remove dead legacy workspace browser code and unconsumed locales (#100):
- Cleans up legacy store factory, migration helpers (WorkspaceView), obsolete derivation functions (deriveGroups, deriveFlat, deriveSearchResults, etc.), and outdated test fixtures left behind from the historical workspace browser removal.
- Decouples from @deepseek-ai/dsh-client-store by removing its unreferenced client require and stripping it from peerDependencies, making host environment requirements strictly minimal.
- Prunes 67 unconsumed i18n keys and orphaned CSS rules across Chinese, English, and Russian dictionaries to reduce bundle size and maintenance overhead.
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成DSH Archive Manager
在 DeepSeek Harness 中安全管理已归档会话
English · Русский · 更新日志 · Apache-2.0
DSH Archive Manager 是社区维护的 DeepSeek Harness(DSH)插件,并非 DeepSeek AI 官方产品。
本文描述 1.1.17。已发布变更见更新日志。
功能概览
把暂时不用的会话收起来,需要时再找回,让日常任务列表更清爽。
- 多视图与侧栏直达:支持开启主侧边栏直接导航入口,在主工作区以 960px 居中版心 展开「已归档」与「未归档」完整大面板,告别狭窄弹窗。
- 全生命周期管理:支持单条会话归档、全工作区一键归档、跨项目批量归档、单条/批量恢复并打开会话。
- 侧栏全行右键操作:支持直接右键点击侧栏工作区行或会话行空白处唤起专属操作菜单;未分组工作区行与空白未落盘会话行优雅放行系统原生右键菜单,杜绝误触新建或星标。
- 侧栏星标对齐与状态点共存(#90, #92):收藏星标对齐 16×16px 宿主标准尺寸,通过绝对定位精确复用前导插槽位置,消除侧栏会话标题左右微小抖动;当会话处于运行中或等待交互时,原生状态指示点保持 100% 可见,星标自适应转为右下角 10px 金色角标,实现状态与收藏完美共存,保护原生选择器与第三方皮肤插件兼容性。
展开完整文档(README 剩余 1 节)
DSH Archive Manager
在 DeepSeek Harness 中安全管理已归档会话
English · Русский · 更新日志 · Apache-2.0
DSH Archive Manager 是社区维护的 DeepSeek Harness(DSH)插件,并非 DeepSeek AI 官方产品。
本文描述 1.1.17。已发布变更见更新日志。
功能概览
把暂时不用的会话收起来,需要时再找回,让日常任务列表更清爽。
- 多视图与侧栏直达:支持开启主侧边栏直接导航入口,在主工作区以 960px 居中版心 展开「已归档」与「未归档」完整大面板,告别狭窄弹窗。
- 全生命周期管理:支持单条会话归档、全工作区一键归档、跨项目批量归档、单条/批量恢复并打开会话。
- 侧栏全行右键操作:支持直接右键点击侧栏工作区行或会话行空白处唤起专属操作菜单;未分组工作区行与空白未落盘会话行优雅放行系统原生右键菜单,杜绝误触新建或星标。
- 侧栏星标对齐与状态点共存(#90, #92):收藏星标对齐 16×16px 宿主标准尺寸,通过绝对定位精确复用前导插槽位置,消除侧栏会话标题左右微小抖动;当会话处于运行中或等待交互时,原生状态指示点保持 100% 可见,星标自适应转为右下角 10px 金色角标,实现状态与收藏完美共存,保护原生选择器与第三方皮肤插件兼容性。
- 工作区快捷操作菜单:侧栏工作区提供快速「复制目录」、「打开目录」(在系统文件管理器 Windows Explorer / macOS Finder 中直接打开)及一键「归档会话」。
- 会话跨工作区移动:会话操作菜单支持级联悬停子菜单直接跨工作区迁移会话,采用进程锁静默停靠与原子级改写校验,投影缓存即时预热彻底消除临时“未命名”,安全兼容含冒号的 IM 会话。
- 一体化抽屉与 40px 超紧凑列表:工作区分组采用与技能管理同款的一体化卡片抽屉设计,折叠顶栏(高 38px)与下方列表融为一体;会话列表项行高超紧凑化至 40px,信息密度显著提升。
- 暗黑模式原生复选框规范:复选框严格回归宿主原生原语 Checkbox 规范,使用原生 accent-color 完美适配深色模式(深暗底色与品牌蓝选中态),根除白底白勾刺眼方块 bug。
- 模态弹窗防穿透与本地化无障碍:宽版预览弹窗直挂 body 根节点消除局部包含块限制,配合实色底与毛玻璃高斯模糊彻底杜绝文字穿透重叠;全量弹窗右上角 X 关闭按钮完整支持三语本地化无障碍标签(common.close)。
- 纯净自适应单行工具栏:采用宿主原生 Input 原语,内置官方放大镜图标与绿色呼吸聚焦边框,自适应弹性撑满;控件按「输入框、查询条件、所有项目、时间选择」极简单行排列,锁死盒模型杜绝溢出重叠。
- 全文联合检索与 Codex 复合菜单:默认自动联合搜索标题与正文历史(用户与助手消息);将会话筛选(全部/只看收藏)与排序收归为 Codex 风格两段式复合菜单,完全采用宿主原生对勾原语。
- 轻量单字段日期胶囊与日历浮层:彻底告别原生日期选择器的暗黑模式反白与失焦缺陷(#74),单行展示时间范围;浮层支持快捷预设、中英俄三语原生排版,以及完备的 WAI-ARIA 键盘无障碍漫游(上下左右键、Home/End、PageUp/Down 及月末夹紧)与高亮区间实时拉伸预览。
- 智能闲置会话整理:自定义闲置天数,自动分析并排除正在运行、等待交互及已收藏的关键会话,支持预览候选后确认归档,并提供误操作撤回机制。
- 永久彻底清理:确认后永久删除不再需要的会话,彻底清除物理日志、索引与缓存,支持错误项独立重试。
- 无主孤儿子代理检测与物理清理:自动探测母会话已被外部物理删除的残留子代理,在会话整理中直观展示空间占用并支持一键物理释放。
- 设置页 ID 规范与第三方插件共存(#91):设置页注册 ID 调整为团队统一规范的 archive-manager 并带 fail-soft 运行时保护,支持与社区第三方归档插件和平共存。
- 可控在线更新与反向代理适配:提供独立在线更新开关与企业级宿主配置硬锁定;原生适配反代子路径前缀部署。
手动重建列表缓存(#88)
打开归档管理后,仅从头部及官方缓存轻量检测登记工作区、未分组及归档中的普通冷会话(前置排除 IM 渠道特殊会话)。官方缓存缺失、生命周期或格式不兼容、或标题投影不可用时,整理区域显示「重建列表缓存」卡片;没有候选就不显示。
点击后逐条只读完整日志,调用官方 coldSnapshot 重建全部已注册投影,并保存至官方 session_projcache。不扫描旧插件域、不搬运 JSON、不激活会话/Agent、不调用模型,也不改变归档和定时任务。活动会话跳过,失败项可单独重试;操作反馈提供「完成」按钮并支持自动收起;完成后刷新官方列表并重新检测。保存确认超时表示结果未知,不代表已取消;删除操作仍与迟到写入安全排队。关闭页面只停止后续请求,已发送的那一条会在服务端完成。
孤儿子代理清理
当母会话在外部或通过系统被物理删除后,其衍生生成的子代理可能残留于磁盘中。归档管理器在「会话整理」面板中会自动检测是否存在此类无主残留,精准识别并展示占用空间,支持一键安全释放磁盘。
检索与预览
- 已归档与未归档统一支持标题/正文搜索、日期、项目、收藏及创建时间排序;两边均可通过星标收藏和取消收藏。未归档的正文命中点击打开完整会话。
- 快速预览默认以 Markdown 排版展示,支持表格、引用与代码块,区分用户和助手;可切换为原文与关键词高亮。
- 搜索框默认直接联合搜索当前页签会话中的标题与正文历史(包含用户和助手文本),无需手动切换范围。
- 搜索框右侧「日期」可选择或清除更新时间范围;项目、收藏和更新时间范围可组合使用;结束日期包含本地当天。已归档和未归档页均支持正文搜索与这些筛选条件。
- 正文命中显示片段和关键词高亮;已归档页点击片段或「更多 → 快速预览」查看上下文,不恢复会话;未归档页点击片段打开完整会话。没有关键词时预览最近八条消息,有关键词时定位首个命中附近。
- 检索逐批读取,每批最多 20 条会话,批内逐条读取;关键词最多 200 字符。预览每条最多 2000 个 UTF-16 码元,截断保留完整 Unicode 字符,较长内容请打开完整会话。
- 搜索与预览不包含工具输出、附件、推理、系统或插件注入消息;读取失败会显示详情并支持重试。检索的是持久化原始文本,不等同于模型当前上下文。
- 未建立持久化全文索引,大量或超长会话可能需要较久,建议先缩小项目、日期或收藏范围;尚无可承诺的会话数量上限或响应时延;更改条件会停止后续批次,正在读取的单批仍会完成,但旧结果不会覆盖新筛选。
界面预览
1. 归档设置管理面板(一体化抽屉与暗黑模式适配)
在「设置 → 归档会话 → 已归档」体验一体化抽屉卡片、40px 超紧凑行高、原生暗黑 Checkbox 及统一检索筛选:
已归档会话:统一检索筛选、收藏与超紧凑列表
切换到「未归档」,智能分析并预选闲置会话,支持一键安全归档与项目批量操作:
未归档会话:智能闲置整理与项目批量归档
2. 主工作区大面板(侧边栏直达)
开启侧边栏入口后,点击左侧主导航即可在主工作区以 960px 居中版心展开完整大面板:
主工作区大面板:侧边栏独立入口展开 960px 居中视图
3. 原生侧边栏全行右键与级联菜单
在侧边栏任意工作区行或会话行上直接右键,即可唤起快捷操作菜单与跨工作区移动级联子菜单:
| 工作区快捷菜单(复制/打开目录) | 会话跨工作区移动(悬停级联) |
截图展示核心功能面板、主工作区大视图与侧边栏原生右键增强,采用高保真无损 WebP 格式。
安装
需要已安装并能正常运行 DeepSeek Harness。以下命令使用 web profile,请按实际环境替换。
插件安装支持 npm registry、本地构建的 .tgz 包和 GitHub。GitHub 与 npm 都包含可直接运行的 lib。改动源码后,提交前请先运行构建。
让 Agent 帮你安装
把这段话发给能够操作本机终端的 Agent:
请把 @michengai/dsh-archive-manager 最新版安装到我的 DSH web profile,使用官方 npm 源,安装后确认生效并告诉我如何重新加载。
手动安装
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
dsh plugin --profile web add @michengai/dsh-archive-manager@latest --registry=https://registry.npmjs.org/
安装后重启 DSH Web,并刷新页面(或按 Ctrl+Shift+R 硬刷新浏览器),打开「设置 → 归档会话」即可使用。更新时可点击「检查更新」,或重新执行安装命令。
- 宿主支持范围:DeepSeek Harness 0.2.x 全系列(>=0.2.0-rc.1 <0.3.0-0),已验证兼容 0.2.0-rc.1、0.2.0-rc.2、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.3,并自动支持后续日常小版本升级与频繁的 alpha/rc。
- 不再支持 0.2.0-rc.1 之前的早期宿主,遇到 0.3.0 代际破坏性更新时将被版本门安全拦截。仍在使用 0.1.x 的用户请安装插件 1.0.20。
- 反向代理部署:支持将 DSH 部署在带路径前缀的反向代理后面(如 /app/dsh/),插件 API 与更新检查端点统一自动按页面基址(document.baseURI)相对解析,避免丢失代理路径前缀导致 404。
插件配置与可选开关
插件遵循 DSH 官方扩展配置规范,配置项位于:主界面侧边栏「插件」→ 点击 Archive Manager 详情页(对应宿主 plugins.bundle.config 槽位)。
此处提供两个原生扁平行开关:
1. 侧边栏入口 (sidebarEntry)
- 默认状态:关闭(false)
- 功能说明:在宿主左侧主导航栏的「插件」下方增加常驻的 「归档」 图标入口。
- 生效效果:
- 开启后,在侧边栏点击即可直达归档中心,并在主工作区以 960px 居中版心(对齐官方插件管理与市场规范)展开完整大面板,彻底告别在设置弹窗狭窄视口内滚动的局限;
- 关闭后安全注销侧栏槽位(若当前正停留在归档大面板,会自动安全切回默认视图,防止悬空和白屏);
- 无论是否开启侧栏入口,DSH 原有的「设置 → 归档会话」入口始终保留,两处界面数据与操作 100% 实时同步。
2. 在线更新 (onlineUpdate / updater)
- 默认状态:开启(true)
- 功能说明:控制是否允许在线检查并安装归档管理器的新版本。
- 生效效果:
- 界面联动:关闭开关后,归档管理面板标题旁的「检查更新」按钮与版本提示徽标将即时隐藏,无需刷新页面;开启后自动恢复展示;
- 接口安全拦截:关闭后,服务端的更新路由对任何版本检查和安装请求均返回 HTTP 403 禁用状态,彻底杜绝在插件内安装未审核版本;
- 宿主/平台级锁定:面向精选插件索引(如 VibeDev)或企业安全合规环境,支持直接在 Cordis 配置文件(bundle patch)中声明,无需进入界面手动配置: updater: false # 或 onlineUpdate: false
配置生效后,更新器在启动时即被完全禁用,更新入口隐藏,详情页在线更新开关置灰。宿主锁定优先于本地配置中的用户选择,界面不能解除锁定;宿主移除锁定后,重新按已保存的用户选择生效。
使用指南
| 核心操作 | 操作方式 |
| 归档一条会话 | 打开侧栏会话菜单,选择「归档会话」 |
| 归档整个工作区 | 打开工作区菜单,选择归档该工作区的会话(弹出就地确认卡片) |
| 检索与筛选 | 打开「设置 → 归档会话」或点击侧边栏「归档」,搜索框自动联合检索标题与正文;使用 Codex 风格视图菜单切换「全部会话 / 只看收藏」与排序;按「所有项目」下拉过滤特定项目;使用单字段日期胶囊选择时间范围 |
| 自研日历与键盘漫游 | 点击日期胶囊展开轻量日历浮层,提供全部时间与常用预设;支持完整键盘无障碍漫游(上下左右键移动、Home/End 周首周末跳转、PageUp/Down 跨月切换、Enter/Space 选定),并提供区间高亮实时拉伸预览 |
| 快速预览 | 点击命中片段或「更多 → 快速预览」,无需恢复即可查看上下文与原文高亮 |
| 调整排序 | 统一在视图菜单中按最近归档、更新时间、创建时间、按字母顺序排序 |
| 恢复会话 | 点击会话右侧恢复图标;「更多」菜单可「恢复打开」直接进入原会话继续对话 |
| 项目整体归档 | 在「未归档」页点击分组右侧“…”菜单,确认归档该组全部聊天(不受搜索影响) |
| 收藏会话 | 点击行右侧星标,使用视图菜单「只看收藏」快速过滤重要会话 |
| 整理闲置会话 | 在未归档页设置闲置天数,自动排除运行中、等待交互与收藏的会话,预览并确认归档 |
| 撤回归档 | 批量归档后可在关闭页面前点击「撤回本次归档」,安全恢复误归档会话 |
| 永久彻底删除 | 勾选单条或多条会话后点击「删除」,二次确认后彻底清除日志与缓存,支持错误项重试 |
| 清理孤儿子代理 | 在「会话整理」面板中检测外部删除残留的无主子代理并一键物理释放 |
| 复制会话标识 | 在更多菜单选择「复制会话 ID」快捷复制 |
页面默认打开「已归档」,右侧「未归档」用于批量归档。切换 TAB 会清空选择;切换搜索或项目筛选会保留已选会话。批量操作前留意隐藏的已选数量,或先清空选择。
收藏与闲置整理
会话使用紧凑分组列表,点击项目标题可以折叠;右侧提供星标和恢复/归档图标,已归档会话的「更多」菜单提供恢复打开和删除。折叠只影响展示,「全选当前筛选结果」仍包含折叠组内符合筛选的会话。
- 在已归档或未归档会话行右侧点击星标,通过收藏下拉菜单中的「只看收藏」找回重要会话。收藏保存在宿主数据中,归档、恢复或更换浏览器不会清除;其他页面修改的收藏可在重新打开管理页后读取。
- 在「未归档」设置 1~36500 的整数闲置天数,结合当前项目、搜索、日期和收藏筛选,点击「预览闲置归档」。确认清单允许逐条取消,默认排除收藏、当前打开、正在执行(含子代理)以及等待交互的会话;缺少有效最后活动时间的会话不参与。
- 归档前再次检查收藏和活动状态。批量归档、恢复、删除显示进度与成功、跳过、失败数量;某一条失败后继续处理后续,只重试失败项。删除重试仍需确认。
- 「撤回本次归档」只恢复最近一批实际归档成功的会话,包括该批重试成功的部分。仅在本次打开管理页期间有效,关闭页面或刷新会清除记录;不会撤回原有归档,也不能恢复永久删除的会话。
- 收藏会话仍可手动归档;收藏保护只针对闲置整理。没有定时自动归档,不会在后台自行整理。
「全选当前筛选结果」只选择符合当前条件的会话。项目菜单的整体操作仍作用于该项目全部会话,不受搜索筛选影响。未归档页排除子代理和空白占位会话。
设置页与侧栏的批量归档、批量恢复均串行调用官方单条接口 ctx.workspaces.archiveSession 和 ctx.workspaces.unarchiveSession。
查看并继续归档对话
原生会话导航自 0.1.40 起提供,1.0.0 的操作入口如下:
- 点击会话标题:打开 DSH 原生会话页,查看消息、附件和工具详情;可直接继续聊天,保持归档状态。
- 更多菜单 → 恢复打开:取消归档后进入原会话,继续工作。
检索接口兼容约定(集成开发者)
正式入口为 workspaceRegistry.searchSessionContent({ sessionIds, query }),支持已归档与未归档会话。输入为 1~20 个会话 ID 和 1~200 字符非空关键词,ID 去重后处理。成功返回 { items: [{ sessionId, seq, snippet }], failures: [{ sessionId, message }] };单条读取失败进入 failures,参数不合法则拒绝整个调用。
searchArchivedContent 是旧客户端兼容入口,仅接受归档范围,保持原有语义。两者通过宿主 Typert 的既有连接与权限边界调用,无新增 HTTP 端点或鉴权配置。当前受支持版本范围内保留旧描述符,不在补丁版本移除;只有未来明确收窄兼容范围、完成客户端迁移并发布弃用说明后才删除。新客户端优先使用正式入口,旧入口仅用于旧版本回退;不应向两个入口重复发送同一检索。
更新
在归档管理页标题处点击「检查更新」。支持自动更新的 DSH CLI 或 Desktop 环境可直接更新;其他环境会提供适用于当前 profile 的手动命令。也可重新执行上面的安装命令。
常见问题
安装后找不到入口?
先重启 DSH Web 并硬刷新浏览器,确认安装到了当前使用的 profile。仍未显示时,执行:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
dsh --profile web --dump-config
配置中应包含 ui-workspace-archive-manager,且不应再禁用官方 workspace 或 session-projection-cache。若还留着 archive-manager-host 的禁用覆盖,可以删掉。当前 DSH 宿主已无官方 ui-settings-unarchive-sessions 入口,本插件不再对其 disable(否则 dump-config 会告警条目不存在)。若 profile 的 cordis.patch.yml 仍禁用 workspace、session-projection-cache 或 ui-workspace,请移除这些覆盖,再重启。
从旧版升级后,历史缓存如何处理?
插件不再接管官方投影缓存表,也不再扫描、核验或迁移旧插件缓存;打开归档列表不会为了补缓存而读取完整日志或写回官方投影。会话日志仍由宿主保存,标题等投影由官方按需重建;启用或停用插件不会切换缓存表,也不需要为导入旧缓存而额外启用一次。
官方缓存缺失的冷会话,列表可能暂时不显示已有标题;仅刷新列表不保证重建。 官方读取日志可恢复标题,恢复为活动会话后由原生写入路径持久化缓存。旧插件缓存文件保留原样,不自动读取或删除。完整变更见更新日志。
归档和删除有什么区别?
归档只是收起会话,可以恢复。永久删除无法撤销,并可能一并清理该会话的附件;不会删除你的项目工作目录。删除前会要求确认。
可以和 Codex UI 一起使用吗?
可以。保留 Codex UI 的侧栏样式和交互,归档管理仍在「设置 → 归档会话」中。
与其他归档插件共存说明
本插件设置页入口注册 ID 为 archive-manager。若当前环境同时安装了其他归档管理插件(例如 @linxin666/dsh-session-archive),设置侧边栏中会出现两个各自独立的「已归档会话」入口,均可在设置中正常访问,这属于正常预期表现。
遇到其他问题,请提交 Issue,附上 DSH 与插件版本、复现步骤和错误信息。
从源码安装
开发或测试未发布改动时展开
在你选择的源码目录中执行以下命令。未推送的本地改动需使用已有工作副本。
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
git clone https://github.com/MichengAI/dsh-archive-manager.git
Set-Location .\dsh-archive-manager
pnpm install --frozen-lockfile
pnpm build
dsh plugin --profile web add .
完成后重启 DSH Web 并硬刷新浏览器。业务源码统一在 src 中使用 TypeScript 严格模式;共享协议在 contracts.ts,宿主版本适配在 host-compat.ts、client-compat.ts,客户端组件与状态类型在 client-types.ts。GitHub 与 npm 都包含可直接运行的 lib。改了源码后,提交前运行 pnpm build,否则源码安装仍是旧的运行文件。pnpm typecheck 检查业务源码和类型负例,pnpm test 先检查类型、构建再执行回归,pnpm verify 还执行兼容矩阵和打包检查。测试与构建脚本继续使用 .mjs;对外发布仍为 JavaScript,不要求宿主加载 TypeScript。
DSH 产品生态
想使用桌面工作台,可下载 DSH Codex Desktop;已有 DeepSeek Harness 环境,可按各项目 README 按需安装。以下列出 11 个自研插件;桌面端实际随附范围以对应版本的发行说明和内置清单为准。
| 插件 | 你可以用它做什么 |
| Codex UI | 整理项目与会话、搜索任务、跳转对话轮次 |
| Agency Agents | 按任务选择并召唤专业角色 |
| Skills Manager | 统一查找、启停、创建和导入本机技能 |
| Archive Manager | 搜索、恢复或清理已归档会话 |
| IM Connect | 从消息平台下任务、收回复 |
| Automation | 按计划执行任务,查看每次运行的结果 |
| BTW | 在当前上下文中临时旁问,不打断主任务 |
| Simplify | 用 /simplify 整理 Git 改动范围内的代码 |
| PUA | 引导 Agent 在失败时换方法、查原因,并在完成前验证结果 |
| Code Review | 用 /review 发起独立 Agent 代码审查,在当前会话接收报告 |
| Codex Pet | 通过桌面宠物查看会话提醒、处理工具审批和问题回答 |
许可证
本项目采用 Apache License 2.0。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
MichengAI/dsh-archive-manager
DSH Archive Manager — 在 DeepSeek Harness 中安全查看、恢复和管理已归档会话 · 在 DSH 中安全查看、恢复和管理已归档会话
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,025未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,358已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13938 个插件含 PR 收录与…
★ 350已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7