前言¶
在 DeepSeek Harness(DSH)里跑智能体会留下两类东西:侧栏里的会话记录,以及工作区里脚本、报告和生成文件。关掉对话或删掉会话行,往往只带走记录本身;DSH 默认并不维护「这个会话创建了哪些文件」的索引,手工翻目录既慢又容易误删。
社区插件 dsh-session-artifacts(维护者 ShirohaChan,分类 admin-security)从持久化的会话日志反推产物清单,在删除前展示完整列表和总大小,由你勾选后再执行。下面介绍它的定位、能力与安装用法。
这是什么¶
dsh-session-artifacts 是 DSH 的 npm 插件包(当前版本 0.7.2,MIT 许可),核心价值是:可选地删除会话记录,并可选地删除该会话在工作区留下的产物;默认不假设你要删产物,全程预览、逐项复核。
它与 dsh-chat-manager 的 /plugins/dsh-session-delete 路由无关,自行处理会话存储删除,因此在 chat-manager 未安装或被禁用时仍可工作。
- 目录页:skillhub.cn/plugins/ShirohaChan/dsh-session-artifacts
- 源码:github.com/ShirohaChan/dsh-session-artifacts
核心功能¶
对话框里的三种组合¶
会话 ⋯ 菜单提供 删除会话与产物…。对话框用两个复选框组合出实际行为:
- 只删产物、保留对话 —— 清理遗留文件,会话与日志不动。
- 删除会话记录 —— 可勾选是否同时删除已预览的产物。
- 默认:删产物项不勾选,避免误操作。
确认后,若勾选删除记录,会先移除会话存储,再删除预览过的文件。若有文件删除失败,可用 重试未删除的文件,仅重试失败路径,不会对整个预览重新执行。
只删产物时,Host 用一次性 nonce 保存预览列表(约 10 分钟有效),无需动会话日志。
产物如何从日志归因¶
归因以会话 JSONL 日志为唯一权威来源,规则摘要如下:
| 证据 | 可删 |
|---|---|
write 且 meta.operation: "create" |
是 |
| shell 命令时间窗 + 文件创建时间(须唯一) | 是(列表标为命令行 / shell) |
present、 update、edit |
否(仅报告或忽略) |
present 表示交付而非创作,默认不纳入可删列表;配置 includeDelivered: true 可改为更激进的行为。Shell 产出无 meta 记录时,插件用命令起止时间窗与文件 birthtime 推断;窗口须紧、并发会话下须唯一,无法枚举兄弟会话时 fail closed 并在对话框说明。
删除会话记录时的安全拆除¶
持久化层不提供删除 API,插件按固定布局自行删除:
<sessionRoot>/<project>/<sessionId>/session[.vN].jsonl[.zstd]
路径经 resolveCurrentLog 解析,校验三段结构、禁止符号链接与越界后,采用「改名到临时目录 → 再校验 → 删除」的两步隔离;失败会还原。
若会话仍在宿主注册表中,须先取消运行中的轮次、通过自维护的 AgentHandle 追踪器 dispose Agent,待注册表排空后再删存储。插件加载前已存在的 Agent 无句柄则拒绝删记录,并提示重启 DSH;删产物仍可用。
安全围栏(节选)¶
- 仅提议会话记录的工作目录内文件;
~/.dsh下路径永不作为产物。 - 默认保护 DSH 包目录(含
SKILL.md、cordis.yml等),protectPackages: false可关闭。 - 客户端不直接提交路径,删除集合由 Host 的 nonce 绑定;重试会钉住 device + inode,防止路径被替换。
安装与启用¶
将 <profile> 换成你使用的 DSH profile 名称。安装命令来自项目中文 README:
dsh plugin --profile <profile> add dsh-session-artifacts
从本地目录安装:
dsh plugin --profile <profile> add <path-to-this-directory>
安装后重启 DSH,以便 Host 与客户端完成组合加载。
卸载:
dsh plugin --profile <profile> remove dsh-session-artifacts
卸载只移除插件本身,不会自动删任何会话或文件。
依赖要点:按会话的 JSONL 持久化(sessionPersistence)、@deepseek-ai/dsh-agent 提供的 agents 注册表(须在 Agent 创建前装好句柄追踪器)、DSH 核心 0.2.x 的会话菜单与浮层插槽。sessions 服务存在时用于停止运行中的轮次。
典型用法¶
- 在侧栏打开目标会话的 ⋯ 菜单,选择 删除会话与产物…。
- 查看文件列表与总大小;仅交付、仅更新类的条目会按规则区分显示。
- 勾选「删除产物」和/或「删除会话记录」,至少勾一项。
- 确认执行;需要时对失败项使用 重试未删除的文件。
可选配置(均在插件配置中,字段均可选):
| 字段 | 默认值 | 含义 |
|---|---|---|
deleteSession |
true |
为 false 时隐藏删记录,仅产物流程 |
includeShell |
true |
是否运行 shell 时间窗归因 |
shellSlackMs |
5000 |
命令窗口两侧时钟余量(毫秒) |
protectPackages |
true |
保护工作区内的 DSH 包目录 |
includeDelivered |
false |
是否将仅 present 的文件纳入可删 |
lifecycleTimeoutMs |
20000 |
等待会话离开活动注册表的超时 |
适用场景与注意¶
适合需要定期清理试验性会话遗留脚本、报告,或连同会话日志一并归档删除的场景。Shell 归因依赖文件系统 birthtime;不记录真实创建时间的文件系统上,shell 这一路可能为空。删除父会话不会自动清理子代理会话的产物;预览是快照,确认后新创建的文件不在列表中。
插件以当前 DSH 进程权限读写工作区与会话存储,删除为普通 unlink,不涉及安全擦除或云备份。安装前建议阅读源码与 MIT 许可证,确认围栏策略符合你的环境。社区目录 SkillHub 由生态维护,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-session-artifacts 用会话日志重建产物清单,在勾选与预览之后才删除,并自包含地处理会话记录拆除。需要进一步了解版本变更与测试说明,可查看仓库 README 与 CHANGELOG。