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

会话删除 LilJoeIJOYU/dsh-session-delete

DeepSeek Harness
LilJoeIJOYU36 天前有提交已提供中文文档扫描:未发现敏感能力

从侧边栏彻底删除对话及其日志与缓存

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add LilJoeIJOYU/dsh-session-delete
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/01·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 36 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

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

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 侧边栏删除会话
  • 清除存储日志
  • 清除投影缓存

真正删除 DeepSeek Harness 会话:会话侧边栏加个操作,删掉存储日志、投影缓存和子代理日志。

README

由 DeepSeek 最新模型翻译生成
dsh-session-delete 添加了 Harness 本身不具备的操作:删除对话。 为什么存在 DSH 可以归档一个 Session,但永远无法删除它。这是一个产品决策,而不是缺少一个按钮: - dsh-client-ui-workspace 记录了这一限制——“没有 Session 删除——session 可以被归档但永远无法删除……Workspace 注册删除不会删除 Session。” - dsh-session-persistence-jsonl 在存储接缝处记录了同样的内容——“没有任何东西会删除 session 文件——日志会在 root 下不断累积,直到被外部移除;该接缝没有删除 API。” 归档只是将 Session id 追加到 $DSH_HOME/storages/workspace.json 中的 archivedSessionIds;日志、投影检查点和附件都仍然留在磁盘上。这个 bundle 提供了文档所说的唯一方式——外部移除,并将其置于一个普通的侧边栏操作之后。
展开完整文档(README 剩余 1 节)
dsh-session-delete

添加了 Harness 本身不具备的操作:删除对话。

为什么存在

DSH 可以归档一个 Session,但永远无法删除它。这是一个产品决策,而不是缺少一个按钮:

- dsh-client-ui-workspace 记录了这一限制——“没有 Session 删除——session 可以被归档但永远无法删除……Workspace 注册删除不会删除 Session。”
- dsh-session-persistence-jsonl 在存储接缝处记录了同样的内容——“没有任何东西会删除 session 文件——日志会在 root 下不断累积,直到被外部移除;该接缝没有删除 API。”

归档只是将 Session id 追加到 $DSH_HOME/storages/workspace.json 中的 archivedSessionIds;日志、投影检查点和附件都仍然留在磁盘上。这个 bundle 提供了文档所说的唯一方式——外部移除,并将其置于一个普通的侧边栏操作之后。

它添加了什么

- Session“...”菜单中的一行——sidebar.workspaces.session.menu.item,位于 order: 500,在自带的 Rename / Fork / Pin / Archive 行之后,上方有一条分组分隔线,并使用宿主机的破坏性行颜色。
- 一个确认对话框,位于 shell.overlay 中,因为该行会随其菜单一起卸载。
- 一个 Host Remote,sessionJanitor/deleteSession,这是删除规则唯一存在的地方。行菜单是它的调用者,而不是第二套实现。

一次删除会移除什么

对于该 Session,以及默认情况下其下的每个 subagent Session:

| 路径 | 它是什么 |
| $DSH_HOME/sessions/// | 存储的日志(session.v4.jsonl.zstd) |
| $DSH_HOME/sessions//.jsonl[.zstd] | 一个预发布版的扁平同级文件 |
| $DSH_HOME/sessions/.jsonl[.zstd] | 预发布版的扁平根布局 |
| $DSH_HOME/storages/session_projcache/sessions/.json | 投影检查点 |

然后该 id 会从归档和固定集合中移除,并发出 api-session/removed,以便每个已连接的 Client 立即移除该行。

有意保留不动的内容:

- $DSH_HOME/attachments 和 $DSH_HOME/cache/attachments 下的内容寻址附件——它们按哈希在 Session 之间共享,因此删除一个 Session 的附件可能会破坏另一个 Session 的附件。
- Session 搜索索引——它在每次读取时都会根据 sessionPersistence.list() 进行对账,因此被移除的日志会自行从中消失。
- workspaces[].sessionIds 成员关系——注册表没有暴露移除 API,而侧边栏从 Session 摘要派生行,因此过期的 id 不会渲染出任何内容。

拒绝

deleteSession 返回一个结果对象而不是抛出异常,并且每个预期失败都带有一个 reason:

| reason | 含义 |
| invalid-id | 该值不是 Session id(没有分隔符,因此它永远无法逃出 sessions/) |
| active | 该 Session 已加载到内存中;其日志会在移除后立即被重写。请将其归档,或切换离开并在其关闭后删除 |
| unknown | 没有存储的 Session,也没有任何 artifact 携带该 id |
| partial | 部分路径幸存(锁或权限问题);failed 会列出它们 |

布局

| 文件 | 作用 |
| index.js | Host 插件:sessionJanitor 服务、其 Typert 贡献以及删除策略 |
| purge.js | 纯 Node 库:session-id 校验、artifact 发现、测量、移除 |
| remote.js | Host 通信契约:zod schema、调用描述符、Client 挂载贡献 |
| typert.host.js | index.js 向 ctx.typert 注册的反射清单 |
| client.js | 浏览器插件:菜单行、确认对话框、从 ui-primitives 复制的样式 |
| test/ | 针对移除规则和 Host 策略的 node --test 覆盖 |

remote.js 和 client.js 内部的契约镜像是一个描述符的两份副本:浏览器模块表没有 zod,因此浏览器那一半用最小校验器重新表述了这些 schema。请保持它们同步。

为什么 index.js 自己注册反射

故意没有 "./typert" 导出。该导出是 Typert 加载器自己的发现路径,而加载器会将其按包判定的结果缓存整个进程生命周期——安装到正在运行的 Harness 中的 bundle 会一直处于未注册状态,直到下次重启。ctx.typert.register(contribution) 是“任何其他所有者”的文档化路径,其 disposer 会在插件卸载时撤回该贡献,因此移除规则和通信契约会一起挂载和卸载。

安装

将其作为 bundle 安装到当前 profile 中;不要手动编辑 profile 的 package.json,也不要在 profile 目录中运行 pnpm。向 agent 索要该 bundle,或直接调用 plugin_manager:

plugin_manager action=install_bundle target=https://github.com/LilJoeIJOYU/dsh-session-delete

改为从 checkout 工作?安装该目录:

plugin_manager action=install_bundle target=

已经导入的 Host 插件模块无法在正在运行的进程内被替换。 set_plugin 切换、remove_bundle 以及重新安装都会重新导入同一个模块 URL,因此对任何 Host 文件(index.js、purge.js、remote.js、typert.host.js)的更改会在下次 Harness 启动时生效,而不是在此之前。浏览器那一半是独立的:已安装 bundle 的 Client artifact 无需重启即可加载。

测试

node --test "test/*.test.mjs"

这些测试会构建一次性的 Harness home;它们绝不会触碰真实的 Session 数据。

限制

- partial 结果仍会移除该行:即使有文件幸存,该 id 也会被宣告为已移除。对话框会显示幸存的路径。
- Client 当前保持打开的 Session 无法被删除;Harness 没有提供任何方式在不涉及该 Session 的 Agent 的情况下处置它。
- Cascade 通过 ctx.subagents.listDescendants 到达子代理 Session,因此一个损坏的父日志可能会隐藏子会话,而这些子会话随后会被遗留为孤儿。

为什么需要它

DSH 只能归档会话,不能删除会话,这是产品决定而不是漏了按钮:ui-workspace 明确写着「没有 Session 删除」,session-persistence-jsonl 也写着「不删除会话文件——日志在 root 下累积,直到外部移除;seam 无删除接口」。归档只是在 $DSH_HOME/storages/workspace.json 的 archivedSessionIds 里加一个 id,日志、投影缓存和附件都还在磁盘上。本插件把文档所说「唯一可行的外部移除」做成侧栏动作。

增加的东西

- 会话「...」菜单里多一行「删除会话」(order: 500,排在重命名 / 分叉 / 置顶 / 取消归档之后,带分组细线,用 host 的危险色)。
- shell.overlay 里一个确认弹窗(行随菜单卸载,弹窗不能放在行里)。
- 一个 Host Remote sessionJanitor/deleteSession,删除规则只在这里实现一次。

真正删掉的内容

目标会话及其(默认)全部子代理会话的:会话日志目录、预发布期的扁平日志文件、投影缓存 storages/session_projcache/sessions/.json。之后把 id 从归档/置顶集合里摘掉,并发出 api-session/removed,让所有已连接的客户端立刻收掉那一行。

故意不动:内容寻址的附件(多会话按哈希共享)、搜索索引(每次读取都会和
sessionPersistence.list() 对账)、workspaces[].sessionIds 成员关系(注册表没有
移除接口,而侧栏按会话摘要渲染,残留 id 不会渲染出任何东西)。

拒绝的情形

invalid-id(非法 id)、active(会话还在内存里,删了会被立刻重写)、 unknown(没有任何记录带这个 id)、partial(有文件被占用,failed 里列出路径)。

安装

让 agent 装,或直接调 plugin_manager:

plugin_manager action=install_bundle target=https://github.com/LilJoeIJOYU/dsh-session-delete

在本地 checkout 上开发时,指向目录即可(不要手改 profile 的 package.json,也不要在 profile 目录里跑 pnpm):

plugin_manager action=install_bundle target=

已经被导入过的 Host 插件模块无法在运行中的进程里替换。 set_plugin 开关、 remove_bundle、重新安装都会重新导入同一个模块 URL,所以对任何 Host 文件(index.js、purge.js、remote.js、typert.host.js)的修改要在下次启动 Harness 才生效。客户端半边是独立的:装好的 bundle 的浏览器产物不需要重启就能加载。

另外本插件故意不导出 "./typert":Typert loader 会把它对每个包的判定结果缓存一整个进程生命周期,正在运行的 Harness 里新装的 bundle 要等到重启才会被注册。因此 index.js 自己调用 ctx.typert.register(contribution) —— 这是文档给「其他 owner」的路径,返回的 disposer 会在插件卸载时撤销贡献。
预览分享卡片长什么样 ↓LilJoeIJOYU/dsh-session-delete
分享 · DeepSeek Harness Hub
LilJoeIJOYU/dsh-session-delete

从侧边栏彻底删除对话及其日志与缓存

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部