DSH WorkBuddy Connect
corrinehu/dsh-workbuddy-connect将 WorkBuddy 桌面 App 包含的模型自动接入 DeepSeek Harness,在 DSH 对话窗口里零配置使用。
在设置 → 模型页底部增加连接测试面板:读取部署的模型目录,对每个已配置模型经宿主 LLM 服务发送一次最小对话请求(“ping”,小输出上限),以真实请求验证连通性。每行报告成功/失败、宿主失败码(NO_ADAPTER、MISSING_CREDENTIAL、AUTH、RATE_LIMIT、TIMEOUT 等)及首字/总耗时,支持单模型测试与全部测试(并发 3)。凭据只在宿主进程内解析,浏览器不可见;每模型一次独立请求,测试路由带同源围栏与请求体上限。纯 JS 免构建,MIT。
中文 | English
A DeepSeek Harness plugin that adds a connection test to Settings → Models: one minimal chat round-trip per configured model, with a success/failure verdict, the harness failure code, and first-token / total latency.
DeepSeek Harness configures model providers and their catalogs in Settings → Models, but nothing in that page tells you whether a configured model actually answers. This plugin fills that gap with a real end-to-end probe — the same call path the agent itself uses.
From the plugin market (dsh-market): after this repository is listed in awesome-dsh-plugin, search for Model Connection Test / 模型连接测试 and install it. No restart is needed in most cases.
From the CLI (any host):
dsh plugin --profile <your-profile> add https://github.com/Willmylife/dsh-model-connection-testFrom DeepSeek Harness Desktop: open the app's own Settings → Plugins and install from the market or a Git URL. The Desktop profile is owned by the app's plugin manager while the app runs.
Requires DSH ≥ 0.2.0 (engines.dsh). The plugin is plain JavaScript — no build step, no dependency install, no build scripts to approve.
session.modelCatalog), marking the default pair.✓ Connected 1.2s (hover for first-token vs. total) or ✗ Failed , where ` is the harness LLM failure taxonomy — NO_ADAPTER, MISSING_CREDENTIAL, AUTH, RATE_LIMIT, INVALID_CREDENTIAL, TIMEOUT`, … — plus the failure message on hover.Browser (client.js) Host (index.js)
───────────────────── ────────────────────────────────
settings.models.footer slot POST /model-connection-test/api/test
└─ ctx.remote.session.modelCatalog() same-origin fence + 4 KiB body cap
└─ fetch POST { provider, model } ──────► ctx.llm.stream({
provider, model,
messages: [{ user, "ping" }],
maxTokens ≤ 256, signal
})
one terminal finish chunk ──────►
✓/✗ + failure code + firstMs/totalMs ◄── { ok, code, message, totalMs, firstMs }ctx.llm.stream, the only supported path into the provider adapters. Stored credentials resolve there and never reach the browser, the wire, or any log of this plugin.type: 'finish' and its reason.kind / reason.failure), so changes in the chunk vocabulary upstream cannot break it.GET /model-connection-test/api/health returns { ok: true, providers: } for quick diagnosis.Host must be loopback or a deployment-declared authority, cross-site sec-fetch-site is refused, Origin must match when present, the host's own request gate is honored when published, and bodies are capped at 4 KiB."ping" with a small output cap (default 16, hard max 256 tokens), so a full-catalog sweep costs a handful of tokens.This repository is the installable bundle itself (repo root = package root; plain JS, no build). To make it appear in dsh-market:
awesome-dsh-plugin.com, dshmarket.com, the npm index) rebuild daily; the market picks the entry up automatically, usually within a day.Optional but recommended: also npm publish the package (dsh plugin … add dsh-model-connection-test then installs from npm, which is the fastest and most verified channel).
index.js Host half: webServer routes + probe via ctx.llm
client.js Client half: settings.models.footer slot + panel
cordis.patch.yml bundle patch (one insert row)
locale/zh|en.json display metadata (meta.title/description) + UI copy
icon.svg panel/market iconExtension points and services used (verified against DSH 0.2.1-rc.2):
settings.models.footer (list seat) declared by @deepseek-ai/dsh-client-ui-settings-models.slots, locale, remote, remote.session; catalog via ctx.remote.session.modelCatalog() (returns RemoteResult, unwrap .ok/.value).webServer + llm; routes via webServer.register({ kind: 'exact', path, handler }) (handler returns a disposer).ctx.llm.stream({ provider, model, messages, signal, maxTokens }); terminal chunk { type: 'finish', reason: { kind: 'finish' | 'error' | 'aborted', failure? } }.To hack locally: edit the files, then reinstall the bundle (a directory install links the checkout; a Git install re-downloads). Client bundle changes may need a page refresh; Host changes survive HMR or a restart depending on the change.
MIT — see LICENSE.