DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Reaper — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
R

dsh-reaper

Reaper

DeepSeek Harness 的孤儿进程和端口清理工具:查找智能体遗留的开发服务器、监视器和后台进程,将其归属到工作区,预览影响范围并回收端口。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:11111353535/dsh-reaper#b0412244e623d54fbf0bded66cba5203de8c85c4
README兼容性版本

兼容性与来源证明

Reaper 以 dsh-reaper 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/10/17

版本

0.1.0stable
2026/10/17

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/17
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 productivity-workflow 分类下经过校验的插件。

Acp App@deepseek-ai/dsh-acp-appdsh ACP 配置文件包:基于 dsh-base 的仅限自动化的 JSON-RPC stdio 和进程生命周期管理Experimental Schedule Bundle@deepseek-ai/dsh-experimental-schedule-bundle为 Web 组合添加 Schedule、其任务页面和时间上下文的可选捆绑包Client Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。Web All@linxin666/dsh-web-allDSH Web UI 全家桶聚合插件:一键安装全部功能插件(task-board / git-graph / pet / remote-web-ui / web-ui-settings / skin-center / community-plugins / compat shim)。compat 桥接层已并入本包(src/client),无需独立 compat npm 包。

README

dsh-reaper

Reclaim the ports your agent forgot to give back.

An agent starts vite, next dev, a watcher, a tunnel. The turn ends. The session ends. The process does not — it keeps holding 5173, and the next run dies with EADDRINUSE while you go hunting through Task Manager for a node.exe you cannot identify.

dsh-reaper inventories every listening endpoint on the machine, attributes each holder to this session, shows you exactly what it would kill, and only then — when you say confirm: true — reclaims the ports.

$ /reap

dsh-reaper · win32 · 2026-10-16T10:57:26.626Z
workspace: E:\work\shop-frontend

51 listening endpoint(s) · 432 process(es) · 3 reclaimable

 5173  tcp  agent-spawned  pid   8899   18m  node.exe
      node E:\work\shop-frontend\node_modules\.bin\vite --host
 3001  tcp  workspace      pid   9120   42m  node.exe
      node E:\work\shop-frontend\server.js
 3306  tcp  system         pid   9168  9h29m  mysqld.exe
      ↳ port 3306 is a well-known service port
19387  tcp  protected      pid  11664   2h9m  DeepSeek Harness.exe
      ↳ holds the harness process tree

Why it is not just "kill by port"

Port tools tell you what holds a port. The hard part is deciding whether you are allowed to kill it, and that answer depends on facts a port number does not carry:

  • Did this process descend from the harness that is running the scan? Killing it takes down the session.
  • Is it the machine's own infrastructure — mysqld on 3306, nginx on 80?
  • Is it a leftover dev server with no session tie at all?
  • Is it something the user explicitly said to leave alone?

dsh-reaper answers that per endpoint and grades the result, so a --all sweep can be safe:

verdictmeaningauto-selected by all: true
agent-spawneddescends from the harness host process✅
workspacecommand line names the current workspace✅
dev-serverlooks like a dev server, watcher or tunnel❌
unattributedlistening, but nothing ties it to this session❌
systemOS process, or holds a well-known service port❌
protectedmatched neverKill / protectPorts, or holds the harness tree❌

Two rules make that table trustworthy:

  1. The harness never kills itself. The scan walks up from its own pid and refuses the whole ancestor chain, plus the process tree it is running inside.
  2. Infrastructure is not "unattributed". A holder of a well-known service port is graded system — the same hands-off grade as an OS process — so all: true never reaches it, and its note says left alone rather than hinting at an override.

Safety properties

Reaping is destructive, so the defaults are conservative and the refusals are absolute:

  • Nothing is signalled without confirm: true. The default call computes the plan and returns it.
  • The plan is the full descendant closure. Killing an npm run dev shim without its child leaves the port held — the exact failure this plugin exists to prevent. Descendants are ordered deepest-first so children die before their parents.
  • Refusals cannot be overridden by naming a pid. The harness process tree, pid 0–4, neverKill matches and protectPorts holders are refused even when passed explicitly, with the reason reported.
  • SIGTERM first, SIGKILL only if you ask. force: true escalates, and even then survivors are reported rather than hidden.
  • The result is verified, not assumed. After signalling, the plugin re-probes each freed port and reports ports confirmed free or ports still held.

Install

dsh plugin add https://github.com/11111353535/dsh-reaper

From a checkout instead of a git host, pass the absolute path:

dsh plugin add /absolute/path/to/dsh-reaper

The package declares no dsh-* peer dependency on purpose: it imports only node:* plus @deepseek-ai/dsh-tools, which the harness resolves from its own installation. Nothing is bundled that could shadow the host's copy.

To tune it per profile, add a config block to the row the installer inserted in ~/.dsh/profiles/<profile>/cordis.patch.yml:

- insert:
    - id: reaper
      name: 'dsh-reaper'
      config:
        neverKill: ['my-precious-daemon']
        protectPorts: [80, 443, 19387]
        includeUdp: false
        graceMs: 3000
        scanTimeoutMs: 20000
keydefaultmeaning
neverKill[]Process-name or command-line substrings that must never be signalled.
protectPorts[]Ports whose holder is refused even when named explicitly. The harness's own web port is added automatically.
includeUdpfalseAlso enumerate UDP endpoints. Off by default: dev servers are TCP.
graceMs3000How long SIGTERM gets before the process is reported as surviving.
scanTimeoutMs20000Wall-clock ceiling for one system enumeration.

Tools

reaper_scan

Read-only inventory. Signals nothing. Grades every listening endpoint and returns the full scan.

argumenttypemeaning
includeUdpbooleanAlso enumerate UDP endpoints.
workspacestringWorkspace root used for attribution. Defaults to the session workspace.

reaper_reap

Compute a plan and, only with confirm: true, execute it.

argumenttypemeaning
pidsinteger[]Explicit root pids. Their descendants are included automatically.
portsinteger[]Reap whatever holds these ports.
allbooleanAlso select every endpoint confidently attributable to this session (agent-spawned and workspace only).
forcebooleanEscalate to SIGKILL for processes that ignore SIGTERM.
confirmbooleanActually signal the plan. Defaults to false.

reaper_free_port

Reclaim one specific port. If the port is already free it says so and does nothing; if the holder cannot be attributed or is protected, it reports why instead of guessing.

argumenttypemeaning
portinteger (required)The TCP port to reclaim.
forcebooleanEscalate to SIGKILL if SIGTERM is ignored.
confirmbooleanActually signal the holder. Defaults to false.

Slash command

/reap                  # inventory
/reap --all            # preview everything confidently attributable to this session
/reap --all --confirm  # and actually do it
/reap 5173             # preview reclaiming one port
/reap 5173 3001 --confirm --force

How the scan works

platformendpointsprocess table
WindowsGet-NetTCPConnection -State Listen (+ Get-NetUDPEndpoint)Get-CimInstance Win32_Process
Windows (fallback)netstat -anotasklist /FO CSV /NH
Linuxss -H -ltnpps -eo pid=,ppid=,comm=,etimes=,args=
macOSlsof -nP -iTCP -sTCP:LISTEN -Fpcnps

Every probe is best-effort: a missing binary or a failed command degrades that one source and is reported in degraded: ... at the end of the scan. A scan that falls back to netstat still works — it just loses command lines, and therefore attribution gets weaker, which the report tells you.

One process listening on both :: and 0.0.0.0 is one problem, not two: dual-stack bindings are collapsed into a single row per protocol/port/pid, with every address kept in addresses.

Development

npm test          # 42 unit tests, no harness needed
npm run test:live # a real read-only scan of this machine
npm run setup:deps

lib/ is plain ESM JavaScript with no build step, and the unit tests cover the parsers against recorded fixtures — Windows and BSD netstat tables, ss, lsof, ps, tasklist, the classifier, the plan builder, and the renderers. test:live covers what fixtures cannot: that the real enumeration works on the host you are on. It signals nothing.

setup:deps links the three host packages lib/ imports (cordis, dsh-tools, schemastery) into a local node_modules so a bare checkout can run the tests. Set DSH_HOST_NODE_MODULES if the harness is not in a standard location.

License

MIT