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
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-tool-adapt from the hub