dshtruedelete

DSH PLUGIN工具与能力

仓库 YIYuNCU/DSHTrueDelete

工具与能力 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

为 DSH 补上归档会话真正删除的能力:侧边栏菜单新增「删除本地文件」,确认后清除转录、投影缓存与子代理会话,并同步清理注册表与活动会话状态。

一句话选型结论

按资料字段整理

dshtruedelete 是工具与能力类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,列出 5 项功能,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类工具与能力 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-09-30 创建于 2026-09-30
README 13.9 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add dsh-true-delete@0.2.0
  1. 1
    确认版本与运行环境

    兼容的 DSH 版本为 0.2.0-rc.2;版本不匹配时安装会报错。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本0.2.0-rc.2版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

DSHTrueDelete:DeepSeek Harness 里真正删掉归档会话的 DSH plugin

  • 归档会话菜单新增删除入口
  • 删除前列出路径与占用大小
  • 清理转录与投影缓存
  • 连带删除子代理会话
  • 同步清理注册表与活动会话

适用场景

文件读写存储

上游标签

deepseek-harnessdshdsh-plugin

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-10-01): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
  • L4.4_RESOLVED_ARTIFACT 安装版本已解析 方式:沙盒安装执行
L5 · 运行已测 ✓ 通过
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 方式:Web 启动
  • L5.3_HTTP_SERVED HTTP 服务响应 方式:HTTP 请求
  • L5.4_PLUGIN_INVENTORY_ACTIVE 插件清单中已激活 方式:插件清单查询

风险详情

  • 审查结论 通过
  • 结论说明 vet 静态分析未发现可疑行为,判定为干净(clean)。
  • 风险计数 严重 0 / 高 0 / 中 0
  • 风险详情 未发现严重或警告级问题。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。
  • 标注了兼容的 DSH 版本(0.2.0-rc.2),按版本装不容易报错。
  • 列出了 5 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在工具与能力场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dshtruedelete当前 L5 · 运行验证通过 低风险 0 0.2.0-rc.2 有
loopx 未做沙盒验证 未标注 6,233 未标注 无
dsh-startup-screen 未做沙盒验证 未标注 633 未标注 有
minara-skills L4 · 沙盒安装通过 中风险 360 未标注 有
dsh-blender-plugin 未做沙盒验证 未标注 211 未标注 无
tokenledger L5 · 运行验证通过 低风险 204 0.2.0-rc.2 等 11 个 有

仓库档案

工具与能力
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方YIYuNCU仓库 DSHTrueDelete · 默认分支 main
分类工具与能力tools
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言JavaScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-09-30 · 2026-09-30最后推送 2026-09-30
本站收录2026-10-02首次进入本站目录的时间

README 全文

13.9 KB
作者原文,中文版优先;只做安全转义,不改内容

description: "A DSH plugin that really deletes an archived session: the sidebar's … menu gains a Delete local files… action that lists exactly what will be removed, asks once, and then deletes the transcript, projection cache, and subagent sessions — clearing the registry and live-session state so the row leaves the sidebar too."

dsh-true-delete

English | 中文

DSH can archive a session, rename it, and restore it — but nothing ever removes it. Archived sessions keep their files on disk indefinitely. This plugin adds the missing action and finishes the whole job, so a deleted session does not come back as a ghost row.

Table of Contents

  • What it does
  • Install
  • Use it
  • What gets deleted
  • Safety
  • Troubleshooting
  • Uninstall
  • For maintainers
  • License

What it does

The … menu of an archived session gains one row: Delete local files…, below Rename, Fork, and Unarchive. It opens a dialog listing exactly what would be removed from this computer — real paths, real sizes — and deletes nothing until you confirm:

  • the session's transcript directory, covering every stored session[.vN].jsonl.zstd generation and any crash leftovers;
  • its projection-cache record (the derived title, statistics, todos, and plan) including .bak siblings from a damaged record;
  • every subagent session the parent owns — those never appear in the sidebar, so the parent is their only way back.

Removing files is only half of it. DSH builds the session list from stored logs and from live in-memory sessions, so deleting files alone leaves a row you cannot open and cannot get rid of. The plugin also clears the id from the workspace registry (archive set, pin set, and workspace membership), releases the live session object, and asks the page to re-pull the list — the row disappears.

Install

Two things must both happen: the package has to land in the profile's node_modules, and its name has to be selected in dsh.profile.bundles. Settings → Plugins does both; the command line does only the first, so it needs the second command as well. After installing, restart DSH once — a plugin's Host half is loaded at startup.

By package name — the ordinary path, available once the package is on the registry:

"%ProgramFiles%\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add dsh-true-delete
node "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-true-delete\scripts\enable-bundle.mjs" desktop

From the git repository — works before a release, and needs no registry:

"%ProgramFiles%\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add github:YIYuNCU/DSHTrueDelete
node "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-true-delete\scripts\enable-bundle.mjs" desktop

From a folder on this machine — for a checkout or an offline install:

"%ProgramFiles%\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add link:G:\Code\DSH\DSH-True-Delete
node G:\Code\DSH\DSH-True-Delete\scripts\enable-bundle.mjs desktop

The helper reads $DSH_HOME (default %USERPROFILE%\.dsh), clears the pre-rename entry if one is left over, and writes only the bundle list.

Use it

  1. Archive the session — or pick one that is already archived. The action only appears on archived rows; an ordinary session never offers to delete anything.
  2. Open its … menu and choose Delete local files….
  3. Read the dialog. It lists every path with its size and says how many subagent sessions are included. Nothing has been touched yet.
  4. Press Delete permanently. The files go, the registry is cleaned, and a toast reports how many files and how much data were removed.
  5. The row leaves the sidebar as the page re-pulls the list.

Cancel at any point and nothing happens — the dialog is read-only until you confirm.

What gets deleted

Target Path Notes
Session transcript /sessions/// The whole directory: every session[.vN].jsonl.zstd generation plus *.tmp crash leftovers
Projection cache /storages/session_projcache/sessions/.json Derived title, statistics, todos, and plan; a damaged record's .bak.* siblings go too
Subagent sessions Both rows above, for each childId in the parent's subagentCatalog Subagent sessions have no sidebar entry of their own

` is%USERPROFILE%.dshunless theDSH_HOME` environment variable says otherwise.

After the files are gone the plugin finishes four cleanup steps: it clears the id from the workspace registry, releases the live session object, drops the projection-cache record, and waits a quarter second to re-check the same paths once — so a shutdown flush or a cache write-behind cannot quietly recreate a log directory behind the deletion.

Safety

  • Archived sessions only. An unarchived id is refused, and so is a session that is still running work: the dialog names the activity it saw and asks you to stop it first. Archiving already stops a session's work, so an archived row is normally inactive.
  • Nothing shared is ever touched. Attachments are content-addressed and deduplicated across sessions, the request-image cache is shared, and other sessions are none of this plugin's business — including the legacy session_projcache.json, which belongs to an older layout.
  • Deletes are scoped and exact. Every path is resolved and verified to sit inside $DSH_HOME, ids are matched exactly rather than fuzzily, and the plugin refuses a malformed id outright.
  • Only your own machine can call it. The Host routes refuse cross-site requests, require a matching origin, and accept writes only from a loopback origin; they delegate to DSH's own browser-authentication fence as well.
  • Repeating it is harmless. Deleting an already-deleted session reports “no local files belong to this session” and still clears any leftover registry references.

Troubleshooting

“declares no dsh.bundle” while installing by name. The registry currently resolves the name to a placeholder instead of the real package — this happens while a release waits in npm's staged area, where the name points at a 364-byte stub with no dsh field. Install from the git repository or a local folder instead; to clear the entry, release it with npx npm@11 stage list plus npx npm@11 stage approve, or drop it with stage reject and publish again. Note that a failed install by name also removes whatever installation was already there, so reinstall afterwards. Staging only affects a release published with a 2FA-bypassing token — the workflow now publishes through Trusted Publishing and goes straight to the registry.

The menu row is missing. Check that dsh-true-delete is listed in dsh.profile.bundles (run the enable-bundle.mjs command again), then restart DSH. The row only appears on archived rows.

The row is still there after deleting. You are running a version older than 0.2.0, which cleaned files but not the live session object. Restart DSH and the row disappears, or delete once more.

“still has running work”. Something is genuinely running for that session — a turn, a subagent, a job, or a schedule. Wait for it to finish, or use DSH's own stop button, then delete.

“incompatible with dsh …”. The package declares which DSH versions it supports. On a different runtime the profile refuses to load it rather than letting it fail at runtime; to accept the risk explicitly, run dsh plugin --profile desktop allow-version dsh-true-delete@ --dsh-version --accept-risk.

Changed the plugin and nothing changed. Editing the browser half is picked up on reload; editing the Host half (lib/index.js) needs a DSH restart, because Host-side code is not hot-reloaded.

Uninstall

Remove dsh-true-delete from dependencies and from dsh.profile.bundles in %USERPROFILE%\.dsh\profiles\desktop\package.json, delete its folder (or symlink) under that profile's node_modules, and restart DSH. Deleting sessions leaves nothing else behind: no settings, no background process, no database.


For maintainers

Implementation, tests, and publishing — click to expand

Layout

lib/index.js     Host half: three loopback routes, file planning and deletion, cleanup
lib/client.js    Browser half: the menu row and the confirmation dialog (hand-written bundle)
cordis.patch.yml Bundle mount declaration (mounts the Host entry)
scripts/         enable-bundle.mjs (select the bundle in a profile)
locale/          Card title and description for the plugin manager
test/            Offline suites for both halves
tools/           asar reader for inspecting a DSH installation, doc/manifest checker

package.json declares both halves the Harness way: dsh.bundle.patch mounts the Host entry, dsh.client.platform: 'web' makes exports['./client'] a browser module the module system serves and loads like any shipped plugin, locale/*.json plus icon supply the plugin-manager card, and peerDependencies['@deepseek-ai/dsh'] is the range DSH's compatibility check reads. The browser module id must equal the package name, because the loader normalizes /client back to the bare id.

Host routes and the trust fence

Route Purpose
GET /dsh-true-delete/version Self-report: which generation of the Host file, and which capabilities, the running process loaded
GET /dsh-true-delete/status?sessionId=… Read-only plan: targets, sizes, archive state, activity
POST /dsh-true-delete/delete The deletion and every cleanup step

Each route passes one fence before its handler: a well-formed loopback Host, no Sec-Fetch-Site: cross-site, an Origin matching the authority when present, and loopback-only writes — plus delegation to the deployment's own connection.requestRejection. It fails closed. Paths additionally pass underHome() and a session-id allow-list.

Why the row would otherwise survive

dsh-session-query's listSessions returns persisted records unioned with ctx.sessions.list(), and a session archived while open stays in that store. Removal is exposed only to the owner of enter()'s disposer, so the plugin reads the public liveEntryFor entry and calls detachEntered — the same teardown a normal close takes, including its session/disposed emission. The registry exposes list(), not a workspaces accessor; detaching from a workspace that does not contain the id is an idempotent no-op, so the cleanup walks every workspace.

Tests

Both halves are verified offline; neither suite needs DSH running.

npm test                          :: docs + host + client, all offline
node tools/check-docs.mjs         :: bilingual anchors, Chinese headings, manifest, icon, card metadata
node test\host.test.mjs           :: KEEP=1 keeps the temporary DSH_HOME for inspection
node test\client.test.mjs         :: reads the real primitives build out of app.asar

The Host suite drives lib/index.js in a fake cordis context over a fake $DSH_HOME: the fence, the plan (two levels of subagents, a bad childId, a .bak sibling, another session, shared attachments), refusal for unarchived and active sessions, the deletion, registry cleanup, live-session release, the sweep catching a simulated write-behind, an idempotent re-read, and the version route. The Client suite evaluates the browser bundle against a fake window.__ModuleLoader__, asserts every require is a platform seed and every primitives.X exists in the installed build, then renders both registrations and checks the request URL keeps its query string.

Publishing

Releases use npm's Trusted Publishing (OIDC): there is no token and no repository secret anywhere in the pipeline. npm publish runs the three suites first through prepublishOnly, and the release itself runs from .github/workflows/publish.yml on a v* tag or by manual dispatch.

One-time setup on npmjs.com: open dsh-true-delete → Settings → Trusted Publisher, choose GitHub Actions, and fill in the repository owner (YIYuNCU), the repository (DSHTrueDelete), and the workflow filename (publish.yml), leaving the environment empty. Afterwards delete any NPM_TOKEN secret — nothing reads it any more.

The workflow asks for an OIDC token (id-token: write) and upgrades the runner's npm to 11.5.1 or newer, because older npm cannot do trusted publishing and fails with a confusing E404/E401. npm then exchanges that token for short-lived credentials and attaches provenance. Tokens that bypass 2FA are being restricted for direct publishing; a release published that way only stages, producing the stub described under Troubleshooting.

Documentation conventions

README.md is English and README.zh.md is Chinese, with Chinese headings in the Chinese file; both share one set of ` anchors so the two versions stay parallel.tools/check-docs.mjsenforces that, together with the manifest'sfiles/exports/iconentries and the card metadata inlocale/. The pair intentionally ships noREADME.i18n.yaml: that record is generated by the monorepo'spnpm run verify-translation-pairing --write` and is meaningless outside it.

Runtime invariant: the plugin deletes only paths that resolve inside $DSH_HOME and match a session-scoped name derived from the requested id; it never removes shared stores, never edits the workspace registry through the file, and reports a degraded step in the response rather than failing the whole deletion.

License

MIT — see LICENSE.

常见问题

8 问
答案由本站依据条目字段整理,不引用上游原文
dshtruedelete 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add dsh-true-delete@0.2.0` 即可。

dshtruedelete 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dshtruedelete 安全吗?

低风险。vet 静态分析未发现可疑行为,判定为干净(clean)。

dshtruedelete 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dshtruedelete 支持哪些 DSH 版本?

上游记录的兼容版本包括 0.2.0-rc.2。

dshtruedelete 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dshtruedelete 有哪些功能?

归档会话菜单新增删除入口、删除前列出路径与占用大小、清理转录与投影缓存、连带删除子代理会话、同步清理注册表与活动会话。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

工具与能力
按星标排序,可作替代方案

loopx

loopx

LoopX 是面向长周期 Agent 的本地优先控制平面,作为 DSH plugin 为 DeepSeek Harness 提供持久目标、证

未标注验证等级 6,233 星

dsh-startup-screen

dsh-startup-screen

DeepSeek Harness 的启动界面与启动动画插件。

未标注验证等级 633 星

dsh-blender-plugin

dsh-blender-plugin

让 AI 模型通过直连 TCP 通道实时驱动 Blender 的 DSH plugin:15 个工具覆盖视口取帧、任意角度渲染、内循环搜索、

未标注验证等级 211 星

tokenledger

TokenLedger

TokenLedger 为 DeepSeek Harness 提供零配置的 Token 用量记账,自动归属到实际服务请求的中转站,无需凭据即

L5 · 运行验证通过 204 星

deepseek-harness-jev

deepseek-harness-jev

把 TypeSafe Jev 接入 DeepSeek Harness 作为 System One 决策层,为技能与文件选择、任务监督、纠偏和

未标注验证等级 203 星

YIYuNCU 的其它插件

2 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-10-01。