DSH WorkBuddy Connect
corrinehu/dsh-workbuddy-connect将 WorkBuddy 桌面 App 包含的模型自动接入 DeepSeek Harness,在 DSH 对话窗口里零配置使用。
English | 中文
Reasoning-effort and input-modality editing for third-party models in DeepSeek Harness, edited right inside the official Models page card — plus a quick reasoning-effort slider inside the official composer model menu (adapted from HanaAyane's dsh-reasoning-effort, see Acknowledgements).
The llm-pi-ai adapter natively supports per-model reasoningEfforts and input declarations, but the official Models page editor deliberately keeps both fields out of reach. As a result, third-party models get no thinking-level picker in the composer, only the official DeepSeek API can set reasoning effort, hand-declared models are treated as text-only, and configuring any of this meant hand-writing settings.yaml blocks. This plugin brings both configuration surfaces back into the UI: edit inside the official model editor card, plus one-click auto-adapt.
/models listing, every suggestion labeled by confidence; reference capacities show as read-only hints you copy yourself.autofill: false / modalityAutofill: false); unknown models stay unchanged until the user explicitly accepts Auto-adapt.off = disable reasoning; levels armed = write the declaration.modelOverrides keep their installed catalog; only the edited model override is written.headers field (masked, path-merged, Save-gated), and the plugin performs the user-agent override at the fetch layer per origin, because the official adapter reserves that name; same-origin /models probes are covered, conflicts are reported rather than guessed.The auto-adapt knowledge base carries 65 curated entries across 15 vendors (DeepSeek, OpenAI, Anthropic Claude, Gemini, Grok, Qwen, GLM, Kimi, Mistral, MiniMax, MiMo, Doubao, Hunyuan, Step, ERNIE — re-verified against official docs 2026-08/09, including vision-capable variants and no-effort-control families). The full table — match patterns, level → wire-spelling ladders, defaults, modalities, reference capacities — lives in docs/supported-models.md (generated from src/knowledge.ts, the authoritative source). Unlisted models are left unchanged by automatic fill; the user can still review a low-confidence Auto-adapt suggestion.
Requires DeepSeek Harness `0.1.5-alpha.1` or later (per-line peer ranges; the 0.1.2-rc / 0.1.3-alpha lines are no longer supported — use plugin 0.3.7 there). Compiled and gated against 0.2.0-rc.2 and the 0.2.1-alpha line. The per-kernel seam re-checks behind this live in docs/compatibility-notes.md.
From npm, under the dsh web profile:
dsh plugin --profile web add dsh-better-reasoning-effortDSH bundles pnpm 11.7.0, whose default minimum-release-age is 24 hours: an install started within a day of a release resolves to the newest version old enough and installs that one, while the plugin manager may still display the newer release. Name the version to install it without waiting — pnpm accepts a named version and records it as an exemption:
dsh plugin --profile web add dsh-better-reasoning-effort@0.5.2The release page also carries the packed tarball, which skips both the registry and the release-age wait. It is prebuilt, so pnpm executes nothing and asks for no build approval. The URL names one version, so an update replaces it:
dsh plugin --profile web add \
https://github.com/HaoyueQin/dsh-better-reasoning-effort/releases/download/v<version>/dsh-better-reasoning-effort-<version>.tgzFrom GitHub source, for development and review rather than normal installs. pnpm runs the prepare hook to build lib/, and allows that only once an allowBuilds entry exists. The installer prints the exact key, which names the resolved commit: add it to the profile's pnpm-workspace.yaml and repeat the add. A new commit changes that key, so every release needs re-approval, and the commit-free key form needs a newer pnpm than the bundled 11.7.0:
dsh plugin --profile web add github:HaoyueQin/dsh-better-reasoning-effortOr link a local checkout for development:
npm install && npm run build
dsh plugin --profile web add link:D:/Project/dsh-better-reasoning-effortRestart dsh web and hard-refresh the browser.
high the spelling ultra, and the gateway receives ultra when you pick High in the composer);openai-completions, max_output_tokens handling on openai-responses.off checked + Save = disable reasoning (false); *Clear declaration* + Save = back to inheriting the provider default.Declared models are immediately selectable for reasoning effort in the composer, and image-declared models accept attachments end to end.
Optional on the plugin's profile row (values shown are the defaults):
- insert:
- id: dsh-better-reasoning-effort
name: dsh-better-reasoning-effort
config:
autofill: true # auto-fill undeclared models at boot
modalityAutofill: true # whether the boot fill also covers modalities
probeTimeoutMs: 15000 # /models probe fetch timeout
bootRetryDelaysMs: [1000, 2000, 4000, 8000, 16000, 30000]
defaultGuard: true # map effort-less calls on forced-thinking
# ladders to the vendor defaultBrowser (lib/client.js) Host (lib/index.js)
├─ DOM injector └─ Auto-fill
│ MutationObserver on the models page settings/document-updated →
│ → mounts EffortEditor in each invalidates the host cache;
│ model row's disclosure browser idle pass fills models
├─ Composer injection
│ MutationObserver on the document
│ → ComposerSlider (root pane)
├─ EffortEditor (React component) (knowledge base + inference)
│ level checkboxes / wire values /
│ input-modality toggle /
│ auto-adapt (zoned suggestions) / committed with the card's Save
│ └─ writes settings.mutate (llm-pi-ai)suggestEfforts() in src/knowledge.ts is the knowledge base + inference engine — a pure function shared by host and browser.reconcile() in src/client/injection/models-page-editor.ts locates model rows and mounts the editor; src/client/index.ts assembles the browser half, one module per seam in src/client/injection/.createEditorApi() in src/client/ops.ts writes the declarations via settings.mutate, preserving every other row field and retrying once on a revision conflict.npm run typecheck # tsc strict check on src
npm test # vitest: knowledge / inference / autofill / DOM injection / writing
npm run build # lib/*.js + lib/client.js (module-loader bundle)Compiled and gated against the 0.2.0-rc.2 and 0.2.1-alpha.2 official packages; see docs/compatibility-notes.md for the per-kernel records.
/api Host-allowlist discipline without trustedHosts), and never follows redirects — a gateway listing its models only behind a 30x simply yields no endpoint evidence; Auto-adapt falls back to the knowledge base and protocol inference.reasoningEfforts declarations are suggestions — what an endpoint actually accepts is up to its docs; tweak in the UI. The knowledge base is not exhaustive; families without an effort ladder carry no entry at all.text / image today); wider gateway support (PDF, audio, video) is recorded per family until the core vocabulary grows.supportsDeveloperRole: false on routes no official host claims (some upstreams reject the developer role); explicit values are never overwritten.off, e.g. GLM-5.3): effort-less calls map to the vendor default instead of sending thinking: disabled — set defaultGuard: false to restore raw behavior. A route-level reasoning default covers the same calls without the guard: the adapter resolves options.reasoningEffort ?? profile.reasoning, so a route that names one never reaches the off-equivalent (and the guard steps aside for it).N effort-less calls rewritten, and the model of the most recent one), so an installed-but-idle fallback is distinguishable from one that is working; the same report is served at /dsh-better-reasoning-effort/headers-config.The composer slider is adapted from dsh-reasoning-effort by HanaAyane (MIT) — thank you for the original work and the codex-style effort control idea. This integration keeps the upstream session-selection contract and slider interaction, with deliberate changes: a white round thumb only (no chibi-runner knob), the official model seat never replaced, and placement on the 0.1.5-alpha+ line as a reduced re-implementation over the harness wire contract. If you used the upstream plugin, remove it to avoid two effort controls on the same seat:
dsh plugin --profile web remove dsh-reasoning-effortMIT