前言¶
做智能體或本地工具聯調時,常常需要同時開着 Next、API 網關、中間服務等進程。手工開終端、cd、記端口,再在 DSH 裏切窗口,既分散注意力,也容易漏關進程。DSH 左側已有「自動化任務」等入口,但「需要隨開發節奏一鍵啓停、看日誌、看端口與 PID」這一類本地服務,仍缺少專門面板。
下面介紹社區插件 dsh-quick-tasks(維護者 Theembers,分類:工作流):在 DSH 左側欄提供「後臺任務」面板,管理需要後臺運行的本地服務,支持啓動、停止、重啓與狀態查看;退出 DSH 時,默認模式下被託管的服務會一併停止。
這是什麼¶
dsh-quick-tasks 是 DeepSeek Harness 的 Cordis 插件(inject: ["webServer"])加瀏覽器側欄/主面板組合。宿主側暴露 REST API,客戶端在 sidebar.panellist(order 20,位於「自動化任務」之後)註冊入口,主面板 slot key 爲 dsh-quick-tasks。
任務定義寫在機器本地 ~/.dsh/dsh-quick-tasks/tasks.json(也可用 profile / 插件 cordis.patch.yml 的 config.tasks);插件包內 cordis.patch.yml 默認 tasks: [],不攜帶機器專屬配置。當前 package 版本 0.1.0,許可證 MIT,依賴 DSH >=0.2.0-rc.1 <0.3.0-0,Node ^22.19.0 || >=24.0.0。
核心功能¶
側欄與狀態¶
側欄圖標右下角有 6px 狀態點:綠=運行中、藍=啓動中、紅=異常/端口衝突、灰=未運行。
主面板¶
任務卡片展示狀態徽標、端口、PID、運行時長、AI Key 配置狀態(可由健康檢查 JSON 展示);操作包括啓動、停止、重啓、打開頁面、查看日誌、複製日誌路徑、刪除。
刪除採用兩步確認:第一次點擊變爲「確認刪除?」,8 秒內再點一次才執行;會停進程、從任務清單刪除項並清理 state.json 中的 PID,改清單前備份到 ~/.dsh/dsh-quick-tasks/backups/。若任務來自 config.tasks,則回退編輯對應 cordis.patch.yml(同樣帶時間戳備份)。
進程託管(attached 模式)¶
通過 spawn 獨立進程組啓動;停止時 SIGTERM 等待,SIGKILL 兜底。宿主 process.on("exit") 會在退出 DSH 時同步清理進程樹,因此 退出 DSH 會同時停止 attached 服務。崩潰或被 SIGKILL 時 PID 寫入 ~/.dsh/dsh-quick-tasks/state.json,下次啓動通過 #adopt 校驗 PID、命令行與端口後接管,避免重複起服務。
日誌¶
默認路徑 ~/.dsh/dsh-quick-tasks/logs/<任務id>.log,單文件 64MB 輪轉;面板內嵌日誌視圖約 3 秒刷新。
HTTP API¶
| 方法 | 路徑 | 說明 |
|---|---|---|
| GET | /api/dsh-quick-tasks/state |
狀態快照 |
| GET | /api/dsh-quick-tasks/logs?taskId=<id>&tail=200 |
日誌尾部 |
| POST | /api/dsh-quick-tasks/start\|stop\|restart\|delete |
JSON { "taskId": "..." } |
寫操作需自定義頭 x-dsh-quick-tasks: 1,且請求須來自迴環地址並滿足 Host/Origin 等校驗;JSON body 上限 64KB。
通過對話添加服務¶
面板頭部「通過對話添加服務」會調用 ctx.uiWorkspace.startSession,預填需求佔位與《維護說明》,用戶補全需求後發送,由新會話中的 agent 按說明寫入 tasks.json 並完成驗證。依賴客戶端注入 @deepseek-ai/dsh-client-ui-workspace。
安裝與啓用¶
須 完全退出 DeepSeek Harness 後安裝。README 給出的桌面 profile 安裝方式爲:
DSH="/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh"
"$DSH" plugin --profile desktop add github:Theembers/dsh-quick-tasks
安裝後在插件列表中啓用對應 bundle。桌面 profile 需使用應用自帶 CLI;普通 npm 版 dsh 會拒絕 --profile desktop。
改 lib/client.js 後刷新頁面即可(dsh-client-hmr);改宿主側 lib/index.js 等通常需重啓 DSH,或通過調整 profile 的 cordis.patch.yml 觸發熱重載(不殺掉已託管進程,重啓後按 state.json 接管)。
配置任務¶
在本地創建或編輯:
~/.dsh/dsh-quick-tasks/tasks.json
內容爲 JSON 數組,示例如下(字段以 README 爲準):
[
{
"id": "my-service",
"label": "我的服務",
"description": "一句話說明",
"mode": "attached",
"cwd": "/absolute/path/to/service",
"node": "/opt/homebrew/bin/node",
"argv": ["node_modules/.bin/next", "dev", "--port", "3200"],
"port": 3200,
"url": "http://127.0.0.1:3200",
"healthPath": "/health",
"readyTimeoutMs": 120000,
"stopTimeoutMs": 5000
}
]
mode 可爲 attached(隨 DSH 退出)或 detached(退出時保留)。argv 必填;port 必填;healthPath 爲 GET 健康檢查,2xx 視爲就緒。插件每 4 秒重讀清單,保存即可生效,無需重啓 DSH。清單路徑可用環境變量 DSH_QUICK_TASKS_TASKS_FILE 覆蓋(測試用)。本地清單與 config.tasks 同 id 時,以本地清單爲準。
典型用法:裝好後用接口驗證¶
將 <DSH 端口> 與 <任務id> 換成實際值:
BASE=http://127.0.0.1:<DSH 端口>
curl -s $BASE/api/dsh-quick-tasks/state
curl -s -X POST $BASE/api/dsh-quick-tasks/start \
-H 'content-type: application/json' \
-H 'x-dsh-quick-tasks: 1' \
-d '{"taskId":"<任務id>"}'
curl -s "$BASE/api/dsh-quick-tasks/logs?taskId=<任務id>&tail=200"
curl -s -X POST $BASE/api/dsh-quick-tasks/stop \
-H 'content-type: application/json' \
-H 'x-dsh-quick-tasks: 1' \
-d '{"taskId":"<任務id>"}'
不帶合法頭或非迴環訪問時,寫操作返回 403。面板內亦可完成同等操作並查看實時日誌。
適用場景與注意¶
適合在 DSH 內長期聯調本地 Web/API 服務、需要集中看端口 PID 與日誌、希望關 DSH 時默認一併收掉開發服務的開發者。
插件以當前 DSH 進程權限運行子進程,安裝前宜自行查閱 GitHub 倉庫 源碼與 MIT 許可證。README 標明:多任務列表 UI 已實現但多任務場景未做完整實測;刪除若兩處配置都找不到任務會報 patch-edit-failed;宿主被 SIGKILL 且未重啓時服務可能短期成爲孤兒進程,下次啓動 DSH 會嘗試接管。側欄 pin 狀態在插件重載後會重置。
社區目錄 SkillHub 插件頁 與 GitHub 爲獨立信息源,與 DeepSeek / 幻方無官方應用商店從屬關係。
結尾¶
dsh-quick-tasks 把「本地後臺服務」收進 DSH 左側「後臺任務」:清單本地化、面板一鍵運維、退出宿主時默認可同步停服,並可通過對話模板讓 agent 協助接入新服務。進一步瞭解可訪問 SkillHub 目錄 與 GitHub:Theembers/dsh-quick-tasks。