DeepSHPlugins
dsh-plugin-subagent-delete 项目预览
GITHUB / COMMUNITY PROJECT

dsh-plugin-subagent-delete

会话与消息JavaScriptMIT

带归属校验的工具与 HTTP 路由,用于列出、释放和永久删除子代理会话,删除后自动刷新 web UI。

2 Starsheiheiha798 更新时间 2026-08-21
访问 GitHub 仓库
dsh-plugin-subagent-delete 项目预览

项目介绍

中文

带归属校验的工具与 HTTP 路由,用于列出、释放和永久删除子代理会话,删除后自动刷新 web UI。

English

Ownership-checked tools and HTTP routes to list, release and permanently delete subagent sessions, with automatic web UI refresh after deletion.

项目信息与收录信号

快照 2026-09-11
作者 / 组织
heiheiha798
仓库
heiheiha798/dsh-plugin-subagent-delete
GitHub Stars
2
Forks
0
开发语言
JavaScript
许可证
MIT
最近推送
2026-08-21
Manifest
数据中检测到声明

公开仓库不自动等于可商用;许可证与当前兼容性以原项目文档为准。Manifest 和数据评分不构成安装安全认证。

数据评分

54/ 100
维护活跃
86
文档与实用信息
85
生态关注度
14
安装便捷信号
75
项目声明信号
100

近 21 天仍在更新;README 含完整安装与使用说明;关注度尚低(2)。

评分来自已有数据快照的五维模型,仅作浏览参考,不是实际使用评测或安全检测结论。

安装与使用

所有项目资料与许可均以对应 GitHub 仓库为准。

dsh plugin --profile web add "https://github.com/heiheiha798/dsh-plugin-subagent-delete/releases/latest/download/dsh-plugin-subagent-delete-0.2.0.tgz"

复制命令不会自动执行。请先阅读仓库文档,确认环境要求与许可证。

项目截图

仓库 README

GitHub 原文

已保存的仓库文档快照;文档抓取时间未记录,可能与上方目录介绍处于不同版本。安装前请核对当前仓库说明。

dsh-plugin-subagent-delete

DeepSeek Harness (DSH) plugin that adds the missing subagent lifecycle interface:

  • delete_subagent — permanently delete a subagent session and take it out of the web UI list
  • release_subagent — stop / release a subagent without deleting its transcript
  • list_subagents — list the calling session's descendant subagents (including finished one-shot subagents)

Compatible with DSH 0.1.0-rc.8.

Why

DSH's built-in subagent control surface only provides send_message, interrupt_agent and list_agents. There is no delete/release endpoint, so finished one-shot and stale continuable subagents keep accumulating in the web UI list. This plugin fills that gap with an ownership-checked, model-callable tool plus optional HTTP routes.

Install

dsh plugin --profile web add github:heiheiha798/dsh-plugin-subagent-delete
# or pin to the published release
dsh plugin --profile web add github:heiheiha798/dsh-plugin-subagent-delete#v0.2.0
# or from a local checkout
dsh plugin --profile web add /path/to/dsh-plugin-subagent-delete

Restart the profile, then start a new session. The session gains three tools.

Tools

list_subagents

list_subagents({})                      // all descendants
list_subagents({ activity: "running" }) // running only
list_subagents({ mode: "one-shot" })    // one-shot only

Returns the caller's descendant subagent tree: id, label, mode (one-shot | continuable), activity (running | inactive), depth, parentId and hasChildren.

delete_subagent

delete_subagent({ subagent_id: "0fcfbdd6-5d21-46a4-bd95-2ca6edac1261" })
delete_subagent({ subagent_id: "<id>", recursive: true })

Permanently removes the subagent:

  1. verifies the target is a descendant of the calling agent's session

(descendant discovery uses the official ctx.subagents.listDescendants);

  1. stops the live agent / drains a resident continuable Activation;
  2. flushes and detaches the live session from ctx.sessions;
  3. removes the on-disk session log directory (both uuid spellings);
  4. removes the session_projcache row;
  5. removes the id from workspace accounting and the archive set.

Without recursive: true a target that still has descendants is refused with has-descendants. Deletion is child-first and permanent.

release_subagent

release_subagent({ subagent_id: "<id>" })
release_subagent({ subagent_id: "<id>", recursive: true })

Stops the current turn and releases a resident continuable Activation via ctx.subagents.drainContinuableChildren, but keeps the durable transcript. The subagent remains resumable with send_message.

Web UI auto-refresh

DSH has an official refresh path for subagent creation (session/created → host/session-added) but no symmetric contract for deletion: for a durable subagent, host/session-removed is treated by the client as a status change (running: false) only, so the sidebar list and subagent catalog are not refreshed.

This plugin works around that gap without patching DSH: after every permanent delete the host publishes a short-lived marker session through the official prepare → enter → announce → detach lifecycle seam, and the bundled web client component (lib/client.js) watches the public sessions.list snapshot. When the marker child is removed it debounces (350ms) and calls sessions.refresh() plus sessions.refreshSubagents(parentId) for the affected parents. Open web clients therefore update the subagent count immediately — no manual page reload required. The marker's _no-cwd artifact is swept after detach, so the refresh glue leaves no residue.

HTTP routes (web profiles)

For client integration and local debugging the host plugin registers:

  • GET /dsh-plugin-subagent-delete/list?parentSessionId=<id>[&activity=…][&mode=…]
  • POST /dsh-plugin-subagent-delete/delete { "parentSessionId": "<id>", "subagentId": "<id>", "recursive": false }
  • POST /dsh-plugin-subagent-delete/release { "parentSessionId": "<id>", "subagentId": "<id>", "recursive": false }

HTTP callers must name the same parentSessionId the target descends from; the same ownership check runs on every mutation.

Safety

  • A subagent can only be deleted by its own session-tree ancestor. Foreign or

unknown ids return not-your-subagent / not-found.

  • Running subagents are cancelled and awaited (15s quiescence bound) before

their files are removed.

  • File removal is confirmed before workspace accounting is stripped, so a

failed delete cannot produce a half-removed row.

Development

npm test        # node --test
npm run check   # syntax check + tests
npm run pack:dry

The test suite includes unit tests and an integration fixture created from ten real one-shot test subagents (see test/fixtures/test-subagents.json).

License

MIT

使用前核对

安装步骤、兼容版本与授权范围以原项目当前文档为准。Stars 和评分是快照中的导航信号。

安装与排错 · 项目问题反馈

同类项目