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

服务农场 MarchLiu/dsh-farm

DeepSeek Harnessv0.2.0
MarchLiu53 天前有提交已提供中文文档扫描:含敏感能力

注册并启停项目常驻服务,实时查看日志

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-farm
npm 源 · dsh-farm 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 53 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-farm @ 0.2.0
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 23:06:04

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

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 17 处,展示前 17 条)
  • 写入本地文件
    index.js:107
    mkdirSync(logDir, { recursive: true })
  • 读取本地文件
    index.js:117
    if (existsSync(registryPath)) {
  • 读取本地文件
    index.js:118
    const saved = JSON.parse(readFileSync(registryPath, 'utf8'))
  • 写入本地文件
    index.js:132
    writeFileSync(registryPath, JSON.stringify([...dynamic.values()], null, 2))
  • 写入本地文件
    index.js:154
    try { appendFileSync(logPath(rec.id), `${new Date(entry.at).toISOString()} [${stream}] ${line}\n`) } catch {}
  • 执行外部命令固定命令
    index.js:184
    child = spawn('/bin/sh', ['-c', rec.command], {
  • 读取本地文件
    index.js:275
    if (!existsSync(yamlPath)) return {}
  • 读取本地文件
    index.js:277
    return parseFarmYaml(readFileSync(yamlPath, 'utf8'), workspace)
  • 删除本地文件
    index.js:357
    try { unlinkSync(logPath(id)) } catch {}
  • 读取本地文件
    index.js:377
    if (!existsSync(p)) return []
  • 读取本地文件
    index.js:378
    const stat = statSync(p)
  • 发起网络请求
    client.js:51
    const res = await fetch('/farm/services')
  • 发起网络请求
    client.js:66
    await fetch(`/farm/services/${svc.id}/${action}`, { method: 'POST' })
  • 发起网络请求
    client.js:90
    await asJson(await fetch(`/farm/services/${svc.id}`, { method: 'DELETE' }))
  • 发起网络请求
    client.js:108
    const body = await asJson(await fetch('/farm/services/batch-delete', {
  • 发起网络请求
    client.js:248
    const res = await fetch(`/farm/services/${lv.id}/logs?tail=2000&search=${encodeURIComponent(q)}`)
  • 发起网络请求
    client.js:276
    const res = await fetch(`/farm/services/${lv.id}/logs?export=1`)
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 注册项目常驻服务
  • 启停与重启服务
  • 实时查看服务日志

DSH 服务农场:注册、启动、停止、重启并监视长期运行的项目服务——智能体工具 + 概览抽屉 UI,支持 farm.yaml

README

由 DeepSeek 最新模型翻译生成
dsh-farm 🚜 DSH 服务农场插件:注册、启动、停止、重启并监视长期运行的项目服务——智能体可以通过工具完成这些操作,你也可以通过 Web UI 完成。 安装 dsh plugin --profile add /path/to/dsh-farm 之后重启 DSH Web 界面。 你将获得 - UI:侧边栏底部有一个 🚜 按钮,带有运行中服务数量的徽标;点击它会打开概览抽屉——服务按工作区分组显示,带有状态圆点、启动/停止/重启按钮,以及一个支持实时跟随(SSE)、子串搜索和下载/导出的日志视图。如果安装了 DSH-better-sidebar,同一个面板会改为该侧边栏中的 Farm 标签页——参见 UI 所在位置。 - 删除:某一行上的 🗑 会删除该服务。☑ select 会将抽屉切换为多选模式——勾选行(或 全选),然后 删除 (n) 会打开一个确认对话框,列出目标;在你确认之前不会删除任何内容。farm.yaml 中的服务在两种路径中都会置灰:该文件拥有它们,因此你需要通过编辑文件来移除它们。
展开完整文档(README 剩余 1 节)
dsh-farm 🚜

DSH 服务农场插件:注册、启动、停止、重启并监视长期运行的项目服务——智能体可以通过工具完成这些操作,你也可以通过 Web UI 完成。

安装

dsh plugin --profile add /path/to/dsh-farm

之后重启 DSH Web 界面。

你将获得

- UI:侧边栏底部有一个 🚜 按钮,带有运行中服务数量的徽标;点击它会打开概览抽屉——服务按工作区分组显示,带有状态圆点、启动/停止/重启按钮,以及一个支持实时跟随(SSE)、子串搜索和下载/导出的日志视图。如果安装了 DSH-better-sidebar,同一个面板会改为该侧边栏中的 Farm 标签页——参见 UI 所在位置。
- 删除:某一行上的 🗑 会删除该服务。☑ select 会将抽屉切换为多选模式——勾选行(或 全选),然后 删除 (n) 会打开一个确认对话框,列出目标;在你确认之前不会删除任何内容。farm.yaml 中的服务在两种路径中都会置灰:该文件拥有它们,因此你需要通过编辑文件来移除它们。
- 智能体工具:farm_status / farm_start / farm_stop / farm_restart / farm_logs(service, tail, search) /
farm_register(name, workspace, command, ...) /
farm_unregister(service | services)。在会话中说“帮我把 dev server
注册到 farm 并启动”,智能体就会完成其余工作。
- farm.yaml(可选,按工作区,便于提交到版本库):

services:
dev-server:
command: pnpm dev
cwd: sub/dir # optional, resolved against the workspace
autoRestart: true
env:
PORT: 5173

声明的服务会自动出现在 UI 和 farm_status 中(source: yaml);该文件始终是唯一事实来源。

UI 所在位置

dsh-farm 会在运行时决定,将面板渲染到任何可用的宿主中:

| DSH-better-sidebar | 面板出现的位置 |
| 已安装 | better-sidebar 中的一个 🚜 Farm 标签页(单实例,带有运行数量徽标);dsh-farm 自己的底部按钮和抽屉会退让 |
| 未安装 | dsh-farm 自己的 🚜 底部按钮 + 右侧抽屉 |

无需配置,并且 better-sidebar 不是依赖项——dsh-farm 会在运行时按名称查找该服务,并在其不存在时继续工作。它还会在 DSH 运行期间双向跟随 better-sidebar 的启用或禁用。

给任何扩展此插件的人的实现说明:betterSidebar 有意不放在客户端半部分的 inject 中。在 DSH 的 cordis 中,声明但缺失的服务会使整个插件停摆,这也会连带使回退 UI 下线——插件会完全消失,而不是回退。运行时的可选查找钩子是 ctx.get('betterSidebar') (不存在时为 undefined),而 ctx.on('internal/service', …) 会捕获 better-sidebar 稍后到达或离开的情况。该事件可能会触发多次对于同一次到达,因此注册是幂等的。

行为说明

- 服务作为 DSH 进程的子进程(/bin/sh -c)启动,因此当 DSH 退出时它们会被回收。动态注册在重启后会保留在 $DSH_HOME/storages/dsh-farm/services.json 中(状态不会保留)。
- 停止 = SIGTERM,然后在 3 秒宽限期后 SIGKILL。
- autoRestart 会以指数退避(1 秒 → 16 秒)重试异常退出,最多 5 次。
- 日志:每个服务有 5000 行的内存环形缓冲区,外加 $DSH_HOME/storages/dsh-farm/logs/.log 下的仅追加文件。
- 删除服务会先停止它,然后删除其注册表行、其实时日志流及其日志文件。Id 由 workspace + name 派生,因此这可以防止之后重新注册同名服务时继承过期的日志。项目文件绝不会被改动。

HTTP API(仅限 localhost,前缀 /farm)

| 路由 | 含义 |
| GET /farm/services?workspace= | 列出(合并 farm.yaml 条目) |
| POST /farm/services | 注册/更新一个动态服务 |
| GET /farm/services/:id | 获取一个服务 |
| DELETE /farm/services/:id | 注销一个(先停止它;对 farm.yaml 服务返回 400) |
| POST /farm/services/batch-delete | 批量注销 — { ids: [] } → { ok, deleted, failed } |
| POST /farm/services/:id/start\|stop\|restart | 生命周期 |
| GET /farm/services/:id/logs?tail=&search=&export=1 | 日志,export=1 下载 |
| GET /farm/services/:id/logs/stream | SSE 实时跟踪 |

配置(在 profile 补丁中覆盖)

- id: farm
config:
dataDir: /abs/path # default $DSH_HOME/storages/dsh-farm
ringLines: 5000
stopGraceMs: 3000
预览分享卡片长什么样 ↓MarchLiu/dsh-farm
分享 · DeepSeek Harness Hub
MarchLiu/dsh-farm

注册并启停项目常驻服务,实时查看日志

回到顶部