Skip to content
dsh.fish
Bundle

dsh-tool-adapt

EN: Compatibility and safety adaptation layer for non-DeepSeek models in DeepSeek Harness Web. ZH: 面向 DeepSeek Harness Web 非 DeepSeek 模型的兼容与安全适配层。

Source
YrracOwl
License
MIT
Updated
Updated 2 days ago

Readme

# dsh-tool-adapt

## English

**Current release: 0.2.3** — Remote settings are capability-detected and optional, so older DSH RC hosts continue to start the plugin.

A compatibility and safety adaptation layer for non-DeepSeek model families in DeepSeek Harness Web. It guards dead escalation states, injects model-family conventions, fuses repeated failures, and provides a lifecycle-safe Settings card and optional composer pill. Its DSH 0.1.2+ `remote.settings` path falls back to the legacy connection API on older RC hosts.

## 中文

面向 DeepSeek Harness Web 非 DeepSeek 模型族的兼容与安全适配层:处理不可升级权限状态、注入模型族惯例、熔断连续失败,并提供生命周期安全的设置卡片与可选输入框胶囊。DSH 0.1.2+ 使用 `remote.settings`,旧版 RC 自动回退到 connection API。

Adaptation layer for foreign models in DSH web — official bundle form
(host pipeline wiring + `__ModuleLoader__` client, no tapIndex injection).

ONE RULE: in a "dead" session (sandbox already `danger-full-access`, or
approval policy `never`) the model-facing tool schemas no longer offer
`sandbox_permissions` / `justification` (remove), and calls that still carry
them run with the fields stripped (strip) — no error, no loop.

- **guard** — remove + strip, derived from one `escalationDeadState(session)`
  predicate.
- **L2** — DSH tool-call conventions section, gated by model family (default
  excludes `deepseek-*`).
- **L0** — consecutive-failure loop fuse: remind after N failures, optional
  veto.

Config is hot. When Host `ctx.settings` is available the plugin registers the
`tool-adapt` namespace and an official-style expandable Settings Card
(`settings.plugin.item` / key `tool-adapt`, same disclosure chrome as
Shell / Agent loop) becomes the writable source of truth. A legacy `plugins/tool-adapt.config.json` is migrated once if the
settings user layer is empty; the old file is kept for rollback. The
`GET/POST /api/tool-adapt/status|set` routes remain as a compatibility
surface (loopback + same-origin fenced, 8 KiB body cap). The pill snaps to
one of the chat input's four corners (drag to switch); the anchor is
remembered in `localStorage` (`dsh.toolAdapt.anchor`). The pill mounts inside
the composer seat (same stacking level as the input box) at a normal
`z-index`, so DSH web popups (modal / menu / toast) can cover it. The pill
itself is status-only — edit the full form under Settings → Plugins. The
pill is hidden by DEFAULT: the「显示状态胶囊」switch (`ui.pill`, default
`false`) at the top of the ADAPT card owns its visibility, and the pill
follows the hot `/status` config within one poll (or instantly after a save
in the same tab).

## Install

Add to the profile's `package.json` dependencies (`link:` for local dev) and
to `dsh.profile.bundles`, then `pnpm install` and restart `dsh web`.

## Config

The mounting row (in this package's `cordis.patch.yml`) passes
`config.configFile` — the JSON config path, resolved against the profile
working directory (default `<cwd>/plugins/tool-adapt.config.json`, keeping the
legacy location so existing configs migrate unchanged).

Install

dsh plugin --profile web add github:YrracOwl/dsh-tool-adapt#e00f2475fc7e01410a23275f48d03937e162a182

Profile: web

Source