dsh-archived-conversation
Agent 与工作流Li-canghai/dsh-archived-conversation
管理 DeepSeek Harness 中的已归档对话,支持搜索、按项目浏览、取消归档和删除。
- dsh
- dsh-plugin
验证与兼容性
这里展示目录实际采集到的证据;未声明的信息会明确标为未知。
- 当前版本兼容性
- 已在当前目录版本验证
- 声明的 Harness 范围
- 未声明
- 声明的平台
- 未声明
- 适用 Profile
- web
- 构建授权
- 未检测到需要
- 权限声明
- 未声明
- 外部服务
- 未声明
- 遥测声明
- 未知
这不是安全背书;安装前仍应查看源码、权限和配置。
查看证据与判定范围
验证仅覆盖标出的来源、版本和 Harness 环境,不代表未来版本仍然兼容。
dsh-archived-conversation@0.2.5- 插件已在隔离环境完成加载检查。
README
dsh-archived-conversation
DeepSeek Harness (DSH) 的已归档对话管理器插件。它在 设置 → 已归档 中按项目分组列出所有已归档对话,并支持搜索、取消归档与删除。
DSH 本身已经提供"归档"能力(在左侧会话树右键会话即可归档,归档后从工作区视图消失,记录写入 ~/.dsh/storages/workspace.json 的 archivedSessionIds)。但 DSH 目前没有已归档对话的管理界面,也没有"取消归档 / 删除已归档"的入口——本插件正是填补这一空缺。
功能
- 按项目分组:复用 DSH 的 workspace 信息,把已归档对话归到其所属项目下展示。
- 子代理会话族:主对话存在后代时显示可展开箭头;点击整行可查看完整子代理树。子项只读,取消归档与删除统一由主对话管理。
- 即时搜索:按对话标题、项目名或会话 ID 过滤已归档对话;搜索在浏览器本地完成,不会增加会话日志读取。
- 取消归档:把对话从
archivedSessionIds移除,对话会回到原工作区的原位置。 - 删除:从工作区与会话注册表中移除,并删除磁盘上的会话目录(不可恢复)。
- OpenViking 删除联动(0.2.4+):删除已归档会话时,同步删除 OpenViking 中对应的会话原始记录(
dsh-<会话ID>,含未提炼内容);已提炼的长期记忆不受影响。 - 设置页每 20 秒自动刷新,窗口重新获得焦点时也会立即刷新。
OpenViking 删除联动(0.2.4+)
- 行为:删除确认弹窗会显示"将同时删除 OpenViking 中该会话的记录与未提炼内容";删除成功后,结果区展示 OpenViking 清理状态:
deleted→ 已同步删除 OpenViking 会话记录queued→ 清理暂时失败,已排队,下次 DSH 启动/设置页打开时自动重试skipped→ 未配置 OpenViking,仅删除本地会话
- 失败兜底:有 OpenViking 凭证时,若删除请求失败(网络/服务异常),记录进本地待删队列
~/.dsh/runtime/dsh-archived-conversation/archived-conversation-ov-pending.json,在启动时、20 秒定时、设置页打开时自动补删直到成功(404 视为成功);失败持久保留,不阻塞本地删除。 - 未配置 OpenViking(读不到
OPENVIKING_*环境变量或~/.openviking/ovcli.conf的 api_key)→ 零联动:不删除、不排队、不报错。 - 开关:环境变量
DSH_ARCHIVED_CONVERSATION_OV_LINK(默认true;设为0或false关闭联动与补删)。 - 凭证解析链(与
@openviking/dsh-memory-plugin一致):OPENVIKING_URL/OPENVIKING_API_KEY/OPENVIKING_ACCOUNT/OPENVIKING_USER环境变量 →~/.openviking/ovcli.conf→ 默认端点http://127.0.0.1:1933。 - 边界:目标仅 OpenViking 会话子树(
DELETE /api/v1/sessions/dsh-<id>);memories/下已提炼记忆永不触碰。
实现要点
-
纯 ESM、零运行时依赖(仅用 Node 内置模块),与
dsh-mcp-manager同范式。 -
客户端:通过
settings.section插槽注册"已归档"标签页,用react.createElement渲染(无 JSX、无打包)。 -
宿主端:通过
ctx.webServer.register挂载/archived-conversation/api/*同源 JSON API。 -
性能:每轮列表刷新只对每个已归档主会话及其发现的子会话日志执行一次并行
stat,复用 workspace 索引与文件元数据;标题缓存命中时跳过 header 读取,并发刷新共享同一次列表重建。 -
全程复用 DSH 既有服务,不解析会话文件内部格式:
ctx.workspaceRegistry—— 归档状态与项目归属的权威来源。ctx.sessionPersistence.inspect—— 读取完整逻辑会话日志并折叠最后一条session/title事件(与 DSH 自身的"title"投影单元同逻辑;sessionQuery.readTitleSnapshots对冷会话不可靠)。ctx.webServer—— 挂载管理 API。
-
安全护栏:变更请求要求同源 Origin、JSON Content-Type 和 loopback Host;正在执行任务的会话会延迟删除。空闲但已挂起的会话会释放后立即删除。
-
自0.2.7开始- 仅支持 DSH
0.1.2-alpha.及之后版本, 不再保留更早 alpha 的兼容路径。标题读取先走cachedSnapshot(header),未命中则调用sessionPersistence.inspect(id);不依赖readFrom的事件序号/日志偏移参数,该参数在 alpha.4 中已分型为独立的SessionLogOffset。
安装 / 更新
需要已安装 DeepSeek Harness,且 PATH 上有 pnpm(dsh plugin 会转调它)。
安装:
dsh plugin --profile web add dsh-archived-conversation@latest
若没有全局 dsh:
npx -y --package @deepseek-ai/dsh dsh plugin --profile web add dsh-archived-conversation@latest
更新已安装的插件:
dsh plugin --profile web update dsh-archived-conversation@latest
随后重启 dsh --profile web 并刷新页面。插件通过 dsh.bundle.patch 自动激活,无需手动编辑 cordis.patch.yml。本插件无原生构建脚本,不必 pnpm approve-builds。
若 pnpm 11 提示 minimum release age(版本发布不足 24 小时),改为钉死版本:
dsh plugin --profile web add dsh-archived-conversation@0.2.7
也可从 GitHub Release 安装预构建包(不走 npm):
dsh plugin --profile web add https://github.com/Li-canghai/dsh-archived-conversation/releases/latest/download/dsh-archived-conversation.tgz
使用
- 在左侧会话树右键任意会话 → 归档(由 DSH 原生提供)。
- 打开 设置 → 已归档:按项目查看已归档对话,或在搜索框中输入标题、项目名、会话 ID。
- 对搜索结果中的每个对话可:
- 取消归档 —— 主对话及已归档后代一起回到原工作区原位置。
- 删除 —— 按子级优先彻底移除主对话及完整子代理树(弹窗二次确认,不可恢复)。
子代理对话在本页不提供独立操作;直接对子项调用变更 API 会返回 HTTP 409,要求改由主对话统一管理。
API
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /archived-conversation/api/ping | 探活(不要求 Origin) |
| GET | /archived-conversation/api/list | 按项目分组的已归档对话列表(不要求 Origin) |
| POST | /archived-conversation/api/:id/unarchive | 取消归档(需同源 Origin + JSON Content-Type + loopback Host) |
| DELETE | /archived-conversation/api/:id | 删除(需同源 Origin + JSON Content-Type + loopback Host) |
目录结构
dsh-archived-conversation/
package.json # 声明 dsh.client.inject 与 dsh.bundle.patch
cordis.patch.yml # 插件行(由 bundle.patch 激活)
lib/index.js # 宿主端:API + 归档状态读写
lib/ov-delete.mjs # 宿主端:OpenViking 会话删除联动(凭证解析 + 待删队列补删)
lib/runtime-paths.mjs # 宿主端:运行目录与旧文件迁移
lib/client.js # 客户端:设置页"已归档"界面
README.md / README.zh-CN.md / LICENSE
验证
本插件无需构建步骤。安装到 live web profile 后,在浏览器打开 设置 → 已归档 即可验证;宿主 API 探活:GET /archived-conversation/api/ping。
`。