dsh-tool-pocket:按需放行重型工具组,减少每轮 token 占用

前言

在 DeepSeek Harness(DSH)里挂上浏览器自动化一类插件,模型侧往往会同时带上几十条工具定义。README 中给出的量级是 30+ 个工具、约 29 KB JSON schema,折合大约 8k token,且会出现在每一轮请求里,即使用户本轮只做代码审阅、写文档,并不碰网页。

另一种做法是按需安装、用完卸载。这会拖慢节奏:pnpm、审批、半安装状态都不适合对话中频繁切换。dsh-tool-pocket 的思路是:相关工具包保持已安装,默认从模型可见的工具表里藏起来,只暴露一个很小的元工具;当这一轮确实需要浏览器能力时再一次性放开,回合结束(除非开启保持模式)再锁回去。

下面按「是什么 → 能做什么 → 怎么装 → 怎么用 → 注意点」说明该插件,事实以维护者仓库 README 与 package.json(版本 0.8.0)为准。

这是什么

dsh-tool-pocket 是 DSH 社区插件,维护者为 112113-fookky,分类属工作流。一句话:把一组吃 token 的工具常驻安装,但默认锁在「口袋」里,需要时再解锁给当前回合(或跨回合保持)使用。

它针对的是「重型工具组占满上下文、却并非每轮都用」的场景,而不是替代浏览器插件本身——被隐藏的是已安装插件注册的那组全局工具(默认按名称前缀匹配,见配置)。

核心功能

发现、隐藏与元工具

在每个 agent 上,插件会:

  1. 扫描全局工具,名称匹配配置里 prefixes(默认 ego_)的归为一组。
  2. 注册一个小型元工具(默认名 browser_tools)。
  3. 通过 per-agent 的 scope 限制,把整组从模型面向的工具 schema 里藏起来。

平时模型只看到元工具;整组浏览器类工具的定义不会占满每轮 token。

关键词自动放行

开启 autoOpen: true(默认)时,用户消息在本回合工具集解析之前就会参与路由。消息里出现与浏览器任务相关的中文词(默认含「网页」「浏览器」「截图」「表单」「登录后」「抓接口」等,见 openWords)时,对应工具组会在该回合开始时放开,第一步模型调用即可使用浏览器工具。

关键词路由是配置表匹配,不是语义理解:提到页面就可能误开一组并消耗 token;任务描述避开关键词时也可能不会自动打开。词表可在配置中修改。

回合结束收回与保持模式

默认 turnEnd: true:回合结束后工具组重新锁住。若元工具调用传入 hold: true,则跨回合保持打开,直到调用 lock: true,或用户在右下角面板点「收起来」,或配置/关闭词触发收起(closeWords)。

元工具参数(README 原文):

  • names?: string[] — 指定要放行的工具名;省略则放开整组。
  • hold?: boolean — 跨回合保持打开,直至 lock: true。
  • lock?: true — 立即锁住并退出保持模式。

右下角状态面板

通过 shell.overlay 在右下角显示当前会话状态:锁住多少、打开多少、是否保持模式、限制是否生效。面板文案目前仅中文。状态接口为同源设计,依赖连接信任边界,不面向公网暴露。

失败策略

注册元工具、挂载限制、或依赖的内部 API 异常时,插件选择失败即放行(fail open):工具组保持可见,能力不丢,但 token 节省失效。面板可报告 degraded。这与「失败即锁死」相反,维护者在 README 中明确写了取舍。

安装与启用

可从 DSH 插件市场安装(上架后),或直接使用文档中的命令:

dsh plugin add github:112113-fookky/dsh-tool-pocket

无需单独构建:包为 ESM,并附带手写 client bundle。安装行由 cordis.patch.yml 注入;若从源码安装,可编辑该文件,或通过 profile patch 覆盖。

配置示例(与 README 一致,可按需改前缀与词表):

- id: tool-pocket
  config:
    prefixes: [ego_]
    metaTool: browser_tools
    hint: 浏览器:打开网页、点击、填表、截图、读页面、抓接口、登录后页面、下载。
    turnEnd: true
    hold: false
    autoOpen: true
    openWords: [网页, 浏览器, 截图, 表单, 登录后, 抓接口, 抓包, 下载文件, 页面]
    closeWords: [收起工具, 收起来, 关掉工具, 锁上工具, 收起口袋, 关掉口袋]

典型用法

  1. 安装插件,并确保目标浏览器类插件已安装且工具名符合 prefixes。
  2. 正常对话时,模型工具表里应主要看见 browser_tools 等小入口,而非整组 ego_* 工具。
  3. 发送带 openWords 中关键词的任务(例如要求「打开网页并截图」),本回合解析工具前即会放开整组;模型第一步即可调用具体浏览器工具。
  4. 需要连续多轮浏览器操作时,通过元工具 hold: true 保持打开;结束后 lock: true 或面板「收起来」。
  5. 仅需部分工具时,元工具传入 names: ["具体工具名", ...] 做精确放行。

维护者提供的离线测试:

node plugin-tests/pocket-test.mjs

覆盖隐藏/释放、hold/lock、关键词自动打开、会话状态、ETag/304、信任边界、关闭路由与 degraded 路径等逻辑。

适用场景与注意

适合谁

  • 长期在 DSH 中启用浏览器自动化(或同类前缀工具组),但大量对话与网页无关的开发者。
  • 希望避免反复 plugin add/remove,又愿意用关键词或元工具显式控制「何时把 schema 交给模型」的工作流。

兼容与限制(README 原文要点)

  • 开发与测试针对 DSH 0.2.2-rc.1;依赖 tools.view、tools.restrict、agent/inbox/inserted、agent/pre-step、agent/turn-stopping 等实现面,非公开稳定 API。DSH 升级后可能失效,面板显示 degraded。
  • 0.8.0 之前元工具曾在各 agent scope 内注册,热重载可能残留 stale 工具与限制;从旧状态升级后建议重启 DSH 一次。
  • 许可证:MIT。

安全与权限

插件与 DSH 进程同权运行。安装前请阅读仓库源码与 LICENSE,确认 prefixes 所指向的工具组来源可信;勿将依赖同源状态接口的部署暴露到不可信网络。

社区目录 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态本身是「一切皆插件」,该插件属于在工作流层做工具 schema 节流的一类实践。

结尾

dsh-tool-pocket 把「常驻安装」和「按需出现在模型工具表里」拆开:默认只留元工具,需要时解锁整组,回合结束或手动锁住后再省 token。若你的 agent 长期挂着浏览器插件却经常不用,可以在装浏览器能力的同时装上口袋,用配置词表和 hold/lock 平衡体验与成本。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye