DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Laya Tool Router — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
L

@local/laya-tool-router

Laya Tool Router

延迟工具发现:从预填充中隐藏所有工具模式,并按需通过 Laya Choice 显示其中一个。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:residenthiago2011/DSH-Laya-Tool-Router#a273e6a974ff487f06eb4b1e06c00b1d53f94bff
README兼容性版本

兼容性与来源证明

Laya Tool Router 以 @local/laya-tool-router 发布,当前版本为 1.0.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/10/8

版本

1.0.0stable
2026/10/8

相关插件

正在加载相关插件…

最新版
1.0.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 1
周下载
0
最近提交
2026/10/8
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Client Ui Git Graph@linxin666/dsh-client-ui-git-graph外部 dsh Web GUI 插件:空会话 Git 分支选择器和 Git 图,包含实际的主机端 Git 操作与防护,作为 dsh 配置文件包Ssh@linxin666/dsh-sshdsh Web GUI 的远程 SSH 操作:主机配置存储(~/.dsh/dsh-ssh.json,可从 ~/.ssh/config 导入)、支持跳板主机的持久化 ssh2 连接池、exec / PTY Web 终端 / SFTP 传输 / 本地端口转发隧道 / 集群执行Update@linxin666/dsh-update用于 dsh Web GUI 的自更新插件:探测 npm 上是否有更新的系列版本,并在原地运行所属配置的 pnpm 更新;可通过设置图标旁侧边栏中的触发器启动,并显示发布说明面板Tui@deepseek-harness-tui/dsh-tui用于 DeepSeek Harness 智能体、会话和工具的交互式终端界面。

README

Laya Tool Router

Lazy tool discovery for DSH: hides every tool schema from the model's prefill and reveals exactly one tool on demand through the Laya decision endpoint.

  • Prefill cost: one small find_tool schema instead of every mounted tool (26 schemas on a default Standard profile — see Why?).
  • Stage 0 — lexical rank picks ≤ 8 candidates (stopword-filtered).
  • Stage 1 — one POST /v1/systemone to Laya: a bestTool choice plus a usable noul question (~150 tokens).
  • Stage 2 — accept iff confidence >= 0.30 and p(noul) <= 0.30: return the winner's JSON Schema and reveal exactly that one tool; otherwise return a shortlist. Exact tool-name requests skip Laya and reveal instantly.

Why?

Fresh session, first message, server-reported usage.prompt_tokens — the DSH Standard preset (the platform default) versus this plugin's no-prefill preset:

Cost before the first wordStandardno-prefill
Prefill tokens6,559283
System prompt5,816 chars372 chars
Tool schemas shipped up front26 schemas (21,417 B)1 schema (697 B)

Standard makes the model ingest a 5.8k-character system prompt plus every mounted tool schema — 6,559 tokens — before it emits a single word, and pays it again on every subsequent turn. no-prefill ingests 283 tokens (23× less, 96% smaller prefill): a slim persona plus the single find_tool schema. On the measured backend that difference was ~40 s versus ~14 min of prompt evaluation for the first reply.

What that buys you:

  • Latency — time-to-first-word scales with the whole tool shelf today. Reveal-on-demand makes it scale with the tool you actually call.
  • Context budget — 6.5k tokens of standing preamble is 6.5k tokens you don't have for code, conversation, and results. On a 32k window that's ~20% of the model's world spent before work starts.
  • Reliability on small models — a model reading 26 schemas behaves like a model reading 26 instructions it must never violate. One schema at a time is one schema to follow; the rest of the shelf doesn't exist for it.
  • Pay for what you use — a turn that calls no tool costs 283 tokens instead of 6,559. A turn that calls one tool reveals that one schema once; the other 25 are never sent.

If a session ends up using most tools anyway, the gap narrows — but the unused half of the shelf is exactly what a default profile charges for from word one.

What the bundle patch declares

cordis.patch.yml (applied when the bundle is selected):

  1. preset-no-prefill — an agent preset whose composition is only persona + laya-tool-router. The persona tells the model: no tools are declared; call find_tool first.
  2. Host tool rows enabled — tool-bash, tool-fs, tool-fs-search, tool-todo, tool-web flipped to disabled: false, plus a present row inserted. Discovery needs the tools to exist somewhere; preset-scoped registrations shadow host ones, so other presets keep their own behavior. The slim preset keeps the Agent Presets page showing only find_tool.

Prerequisites

  • DSH 0.2.0-rc.2 (bundles mechanism with dsh.bundle.patch).
  • A running Laya endpoint at http://127.0.0.1:8081/v1/systemone (edit LAYA_BASE in index.js to change; default port 8081).
  • pnpm on PATH of the host running DSH (the plugin manager installs through pnpm; the CLI forwards pnpm arguments).

Install

From GitHub (recommended): Plugins → install → spec

git+https://github.com/residenthiago2011/DSH-Laya-Tool-Router.git

or via the CLI:

dsh plugin --profile <profile> add git+https://github.com/residenthiago2011/DSH-Laya-Tool-Router.git

From a prebuilt tarball: download laya-tool-router.tgz from Releases, then install from the local path (also accepted: absolute path, git URL, or an npm registry name after publishing):

dsh plugin --profile <profile> add /path/to/laya-tool-router.tgz

Then select the bundle on the Plugins page (installation enables it by default) and restart DSH if the profile runs without HMR.

Uninstall

Deselect/remove the bundle on the Plugins page. The preset row and the host tool flips vanish with the bundle patch; other presets are untouched.

Files

FilePurpose
index.jsThe router plugin: registers find_tool, masks every other tool per agent, runs the 3-stage decision.
cordis.patch.ymlThe bundle patch: preset declaration + host tool enablement.
tool-registry.jsonStage-0 labels (25 tools, including bash) and Stage-1 short criteria.

Tests

node router-import-test.mjs   # module shape (no dependencies)
node rank-sim.mjs             # Stage-0 ranking on sample queries (needs tool-registry.json)
node router-e2e-test.mjs      # full flow: arm/deny-set/live reveal — requires Laya at 127.0.0.1:8081

router-e2e-test.mjs uses a stub DSH context that emits tools/change synchronously (the worst case that once caused a ~970x feedback loop), then drives the real find_tool against a live Laya endpoint: armed-once, deny-set dedup, late registration, reveal re-arm, empty-request catalog hint, and the exact-name fast path. ALL_PASS is expected.

Notes

  • find_tool registers with a standard JSON Schema (type/properties/required/additionalProperties). A raw register with author-style parameters reaches the LLM unconstrained — the model then calls with {}. Always compile.
  • The empty-request catalog hint and the exact-name fast path exist for small models; see execute() in index.js.