dsh-web
zhu1090093659
DeepSeek Harness (DSH) Web 插件聚合生态 · 万物皆插件,通过创意工坊分发||DeepSeek Harness (DSH) Web Plugin Aggregation Ecosystem · Everything is a plugin, distributed via the Creative Workshop
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:MarchLiu/dsh-farm
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
DSH service farm plugin: register, start, stop, restart and watch long-running project services — the agent can do it through tools, you can do it through the web UI.
dsh plugin --profile <name> add /path/to/dsh-farm
Restart the DSH web surface afterwards.
UI: a 🚜 button at the sidebar foot with a running-services badge; clicking it opens the overview drawer — services grouped by workspace with status dots, start/stop/restart buttons, and a log view with live follow (SSE), substring search and download/export. With DSH-better-sidebar installed the same panel becomes a Farm tab in that sidebar instead — see Where the UI lives.
Delete: 🗑 on a row removes that one service. ☑ select switches the
drawer into multi-select — tick rows (or select all), then delete (n)
opens a confirmation dialog listing the targets; nothing is deleted until
you confirm it. farm.yaml services are greyed out in both paths: the file
owns them, so you remove them by editing it.
Agent tools: farm_status / farm_start / farm_stop /
farm_restart / farm_logs(service, tail, search) /
farm_register(name, workspace, command, ...) /
farm_unregister(service | services). Say "帮我把 dev server
注册到 farm 并启动" in a session and the agent does the rest.
farm.yaml (optional, per workspace, commit-friendly):
services:
dev-server:
command: pnpm dev
# cwd: sub/dir # optional, resolved against the workspace
autoRestart: true
env:
PORT: 5173
Declared services appear in the UI and farm_status automatically
(source: yaml); the file is always the source of truth.
dsh-farm renders its panel in whichever home is available, decided at runtime:
| DSH-better-sidebar | Where the panel appears |
|---|---|
| installed | a 🚜 Farm tab in better-sidebar (single-instance, with a running-count badge); dsh-farm's own footer button and drawer stand down |
| not installed | dsh-farm's own 🚜 footer button + right-hand drawer |
Nothing to configure, and better-sidebar is not a dependency — dsh-farm looks the service up by name at runtime and keeps working when it is absent. It also follows better-sidebar being enabled or disabled while DSH is running, in both directions.
Implementation note for anyone extending this:
betterSidebaris deliberately not in the client half'sinject. In DSH's cordis a declared-but-missing service parks the whole plugin, which would take the fallback UI down with it — the plugin would vanish entirely rather than fall back. The runtime's optional-lookup hook isctx.get('betterSidebar')(undefined when absent), andctx.on('internal/service', …)catches better-sidebar arriving or leaving later. That event can fire more than once for the same arrival, so registration is idempotent.
/bin/sh -c), so they
are reclaimed when DSH exits. Dynamic registrations persist across restarts
in $DSH_HOME/storages/dsh-farm/services.json (state does not).autoRestart retries an abnormal exit up to 5 times with exponential
backoff (1s → 16s).$DSH_HOME/storages/dsh-farm/logs/<id>.log.workspace + name, so this
keeps a later re-registration of the same name from inheriting stale logs.
Project files are never touched./farm)| Route | Meaning |
|---|---|
GET /farm/services?workspace= |
list (farm.yaml entries merged in) |
POST /farm/services |
register/update a dynamic service |
GET /farm/services/:id |
one service |
DELETE /farm/services/:id |
unregister one (stops it first; 400 for farm.yaml services) |
POST /farm/services/batch-delete |
unregister many — { ids: [] } → { ok, deleted, failed } |
POST /farm/services/:id/start\|stop\|restart |
lifecycle |
GET /farm/services/:id/logs?tail=&search=&export=1 |
logs, export=1 downloads |
GET /farm/services/:id/logs/stream |
SSE live follow |
- id: farm
config:
dataDir: /abs/path # default $DSH_HOME/storages/dsh-farm
ringLines: 5000
stopGraceMs: 3000 CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: dsh-better-sidebar。