托管本地智能体进程,自动回收端口防冲突
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add janpauldahlke/dsh-agent-processes该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 29 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/3) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 22 处,展示前 22 条)
- 读取本地文件lib/index.js:39
raw = await readFile(path, "utf8"); - 写入本地文件lib/index.js:68
await mkdir(storageRoot, { recursive: true }); - 写入本地文件lib/index.js:73
await writeFile(tmp, body, "utf8"); - 写入本地文件lib/index.js:74
await rename(tmp, path); - 写入本地文件lib/index.js:191
mkdirSync(dirname(log), { recursive: true }); - 执行外部命令来自配置/变量lib/index.js:195
child = spawn(cmd, args.args ?? [], { - 读取本地文件lib/index.js:370
raw = await readFile2(rec.logPath, "utf8"); - 删除本地文件lib/index.js:416
rmSync(logFile(this.storageRoot, id), { force: true }); - 发起网络请求lib/client.js:52
const res = await fetch(ROUTE, { cache: "no-store" }); - 发起网络请求lib/client.js:100
const res = await fetch(ROUTE, { - 读取本地文件lib/service.mjs:36
raw = await readFile(path, "utf8"); - 写入本地文件lib/service.mjs:65
await mkdir(storageRoot, { recursive: true }); - 写入本地文件lib/service.mjs:70
await writeFile(tmp, body, "utf8"); - 写入本地文件lib/service.mjs:71
await rename(tmp, path); - 写入本地文件lib/service.mjs:188
mkdirSync(dirname(log), { recursive: true }); - 执行外部命令来自配置/变量lib/service.mjs:192
child = spawn(cmd, args.args ?? [], { - 读取本地文件lib/service.mjs:367
raw = await readFile2(rec.logPath, "utf8"); - 删除本地文件lib/service.mjs:413
rmSync(logFile(this.storageRoot, id), { force: true }); - 读取本地文件lib/vault.mjs:29
raw = await readFile(path, "utf8"); - 写入本地文件lib/vault.mjs:58
await mkdir(storageRoot, { recursive: true }); - 写入本地文件lib/vault.mjs:63
await writeFile(tmp, body, "utf8"); - 写入本地文件lib/vault.mjs:64
await rename(tmp, path);
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 托管本地智能体进程
- 自动回收端口防冲突
- 进程日志与状态查看
DeepSeek Harness 插件:本地智能体的进程与端口生命周期由宿主接管。start/stop/list/logs/wait-ready,端口回收可追踪,右侧栏「进程」面板 + 底部 dock 小标签。
README
由 DeepSeek 最新模型翻译生成dsh-agent-processes
为 DeepSeek Harness web UI 里的本地编码智能体提供宿主托管的进程与端口生命周期管理。
通过裸 bash 启动的长期本地进程会变成僵尸:智能体忘了 PID,端口一直被占,下次启动撞上 EADDRINUSE,然后智能体绕着一个其实是端口问题的 bug 改代码。这个插件给智能体配上一双好手——start / stop / list / logs / wait-ready,外加持久化 vault——同时给人一个 Processes 右侧栏和 composer 停靠芯片。
相关插件(同样是 web 右侧栏 / 停靠用的双面 dsh.bundle 形态):
| 插件 | 仓库 |
| 长周期任务状态 | dsh-local-long-horizon |
| NVIDIA GPU 利用率 / 显存 / 功耗 | dsh-gpu-monitor-nvml |
| 本地 LLM 端点 / slot 健康 | dsh-slot-health |
本包:dsh-agent-processes。
已在 DeepSeek Harness 0.1.7-rc.2(dsh web)上验证。
环境要求
- DeepSeek Harness web 配置档(dsh web)。
- 构建需要 Node.js ≥ 20。
展开完整文档(README 剩余 1 节)
dsh-agent-processes
为 DeepSeek Harness web UI 里的本地编码智能体提供宿主托管的进程与端口生命周期管理。
通过裸 bash 启动的长期本地进程会变成僵尸:智能体忘了 PID,端口一直被占,下次启动撞上 EADDRINUSE,然后智能体绕着一个其实是端口问题的 bug 改代码。这个插件给智能体配上一双好手——start / stop / list / logs / wait-ready,外加持久化 vault——同时给人一个 Processes 右侧栏和 composer 停靠芯片。
相关插件(同样是 web 右侧栏 / 停靠用的双面 dsh.bundle 形态):
| 插件 | 仓库 |
| 长周期任务状态 | dsh-local-long-horizon |
| NVIDIA GPU 利用率 / 显存 / 功耗 | dsh-gpu-monitor-nvml |
| 本地 LLM 端点 / slot 健康 | dsh-slot-health |
本包:dsh-agent-processes。
已在 DeepSeek Harness 0.1.7-rc.2(dsh web)上验证。
环境要求
- DeepSeek Harness web 配置档(dsh web)。
- 构建需要 Node.js ≥ 20。
截图
浅色主题,与 DSH 默认一致。
| 面板 + 聊天(运行中) | Processes 面板(全屏) |
| Processes pane open | Processes fullscreen |
| 停靠芯片(右侧栏关闭,聊天指标活跃) |
| Composer dock chip |
你会看到什么
- Processes 右侧栏——跟随当前打开的聊天工作区。每条记录一张卡片:状态圆点(绿色运行中 / 琥珀色启动中 / 红色崩溃 / 灰色已停止)、id + 端口、pid + 存活时长、命令、cwd 基名、日志预览,以及 Kill / Restart / Clear。
- 停靠芯片——右侧栏关闭、且被跟随的工作区有东西在运行时,显示在聊天指标条上(Processes · :3000、Processes · 3 running……)。点击打开面板。
- 受管回收——带 port 启动时,先停掉该端口上任何已跟踪的占用者;外来(未跟踪)占用者会被拒绝,绝不杀掉。
安装
git clone https://github.com/janpauldahlke/dsh-agent-processes.git
cd dsh-agent-processes
npm install && npm run build
dsh plugin --profile web add "$(pwd)"
重启(或启动)dsh web,让宿主端 + 客户端两面加载:
env -u DSH_WEB_URL -u DSH_SHELL -u DSH_SESSION_ID dsh web --no-open
卸载:
dsh plugin --profile web remove dsh-agent-processes
restart the web instance that had the plugin
没有 harness 的 file: 依赖——宿主在 dsh 提供的实时 ctx.tools 服务上注册工具。改完要重新构建 lib/;客户端改动热加载,宿主改动需要重启 web shell。
智能体工具
| 工具 | 用途 |
| process_start | 启动 + 跟踪;可选端口等待 / 回收 |
| process_stop | SIGTERM → 3s 宽限 → SIGKILL(进程组) |
| process_list | 所有已跟踪记录(会重新检查存活状态) |
| process_logs | 查看某条记录捕获日志的尾部 |
| process_wait_ready | 轮询直到 127.0.0.1:port 接受连接(或超时) |
| process_ping | 插件存活探测 |
带 port 的 process_start:
1. 回收 —— 停掉该端口所有已跟踪、仍存活的占用者;在 reclaimed[] 中报告 id。
2. 外部占用检查 —— 如果该端口仍能接受连接,用带类型的错误拒绝(不杀进程)。
3. 就绪等待 —— TCP 连接 127.0.0.1:P(默认超时 15s)。超时是一种「形似成功」的结果,带 error: 'port-timeout';进程保持运行。
记录会无损保存 argv,所以 UI / 路由的重启会在同一 id 下重跑同一条命令。
界面入口
| 入口 | 路径 / 名称 |
| Vault | ~/.dsh/storages/dsh-agent-processes/processes.json |
| 日志 | ~/.dsh/storages/dsh-agent-processes/logs/<id>.log |
| HTTP | GET / POST /api/dsh-agent-processes |
| UI | 右侧栏 Processes + 输入框停靠区小标签 |
GET /api/dsh-agent-processes
→ { ok, package, version, storageRoot, count, processes: […] }
POST /api/dsh-agent-processes { "action": "stop" | "restart" | "remove", "id": "…" }
面板每 2s 轮询一次(按引用计数 —— 最后一个查看者卸载后停止)。
推荐的 AGENTS.md 片段
Long-lived processes — use dsh-agent-processes
For anything that stays up (dev servers, watchers, long node servers):
- Start with process_start (include port if it listens). It reclaims tracked
holders of that port, refuses foreign ones, and waits for TCP readiness — do not start long-lived processes with raw bash or backgrounded &.
- Before assuming a port is free, check process_list; after starting, use
process_wait_ready instead of sleep.
- Stop with process_stop. Read process_logs when something looks wrong.
- On crash or port failure: read process_logs, fix, process_start again,
verify with process_wait_ready.
- Never kill untracked PIDs; if a foreign process holds the port, free it
manually or start on another port.
架构
双面包(与其他 web 右侧栏 / 停靠区插件同一标准):
- Host(lib/index.js,ESM)—— vault、工具、HTTP 路由。
- Client(lib/client.js,CJS ModuleLoader 工厂)—— 右侧栏 + 停靠区小标签。
- Glue —— cordis.patch.yml + package.json 里的 dsh.bundle / dsh.client。
dsh-agent-processes/
├── package.json
├── build.mjs
├── cordis.patch.yml
├── media/ # README screenshots
├── scripts/ # shippable lifecycle smoke
├── test/ # node --test (vault + service)
├── src/host/ # vault, service, tools, route
├── src/client/ # pane + dock chip
├── src/shared/ # shared types
└── lib/ # built artifacts (required at runtime)
开发 / 测试
bash
npm test # node --test (vault + service; real child processes)
npm run smoke # shippable lifecycle smoke (start → ready → reclaim → foreign refuse)
限制
- 只杀自己跟踪的进程 —— 绝不向未跟踪的 PID 发信号;占用端口的外部进程会被拒绝,而不是被杀掉。
- 崩溃检测靠存活探测(采样器 + 按需复查),不靠监听信号。
- 没有日志轮转 —— 日志只追加,不清理。
- 没有按会话隔离 —— vault 按 web 配置档划分;UI 的作用域按 cwd 划分。
- 后续规划(不在 v0 中):只读的 top-N 系统进程卡片。
贡献
安装、目录结构、PR 要求见 CONTRIBUTING.md。
许可证
MIT —— 见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
janpauldahlke/dsh-agent-processes
托管本地智能体进程,自动回收端口防冲突
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 21,780未汉化DSH
73.5
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 1,947已汉化MCP
72.7
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,347已汉化DSH
71.9
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13917 个插件含 PR 收录与…
★ 343已汉化DSH
71.6