🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

工具库检索 JKL-agents/toollery-dsh

DeepSeek Harnessv0.3.1
JKL-agents6 天前有提交已提供中文文档扫描:含敏感能力

社区维护的 Toollery 集成,接入 DeepSeek Harness,无需训练即可大规模检索技能和工具。

36.2/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @jkl-agents/dsh-toollery
npm 源 · @jkl-agents/dsh-toollery 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · dev
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/24) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过

安装清单取自 plugin/package.json

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@jkl-agents/dsh-toollery @ 0.3.1
✓Node 引擎要求 ^22.19.0 || >=24 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 10:22:55

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 41 处,展示前 38 条)
  • 发起网络请求
    ui/client.js:26
    const response = await fetch('/toollery/ui', {
  • 读取本地文件
    service.mjs:36
    if (!existsSync(file)) return
  • 读取本地文件
    service.mjs:38
    try { ({ python: executable, version, wheel_sha256 } = JSON.parse(readFileSync(file, 'utf8'))) } catch { }
  • 执行外部命令来自配置/变量
    service.mjs:57
    const child = spawn(executable, ['-I', '-u', '-m', 'toollery_dsh.worker', '--directory', this.directory], {
  • 读取本地文件
    service.mjs:169
    localOff: existsSync(this.offFile(id)), phase: 'needs_preparation', pool_revision: 0,
  • 发起网络请求
    service.mjs:195
    const response = await fetch(this.transport.url + path, {
  • 写入本地文件
    service.mjs:291
    mkdirSync(join(this.directory, 'overrides'), { recursive: true })
  • 写入本地文件
    service.mjs:292
    writeFileSync(this.offFile(id), '')
  • 删除本地文件
    service.mjs:305
    rmSync(this.offFile(id), { force: true })
  • 读取密钥环境变量
    shared/toollery.mjs:40
    const token = process.env.TOOLLERY_BRIDGE_TOKEN
  • 发起网络请求
    shared/toollery.mjs:55
    const response = await fetch(endpoint + path, {
  • 发起网络请求
    ui/index.js:44
    const response = await fetch(process.env.TOOLLERY_BRIDGE_URL + path, {
  • 读取密钥环境变量
    ui/index.js:45
    method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ' + process.env.TOOLLERY_BRIDGE_TOKEN },
  • 读取本地文件
    sample-skill-provider.mjs:14
    const candidates = readFile(manifestPath, 'utf8').then(text => JSON.parse(text).map(item => ({
  • 读取本地文件
    sample-skill-provider.mjs:31
    const source = await readFile(candidate.locator, { encoding: 'utf8', signal: options.signal })
  • 读取本地文件
    setup-worker.mjs:9
    export const workerVersion = JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf8')).version
  • 读取本地文件
    setup-worker.mjs:13
    const wheels = readdirSync(wheelDir).filter(name => /^toollery_dsh-.*-py3-none-any\.whl$/.test(name))
  • 读取本地文件
    setup-worker.mjs:16
    return { path, sha256: createHash('sha256').update(readFileSync(path)).digest('hex') }
  • 写入本地文件
    setup-worker.mjs:20
    mkdirSync(sitePackages, { recursive: true })
  • 读取本地文件
    setup-worker.mjs:21
    for (const name of readdirSync(sitePackages)) {
  • 删除本地文件递归
    setup-worker.mjs:24
    rmSync(join(sitePackages, name), { recursive: true, force: true })
  • 读取本地文件
    setup-worker.mjs:28
    if (!existsSync(scripts)) return
  • 读取本地文件
    setup-worker.mjs:29
    for (const name of readdirSync(scripts)) {
  • 删除本地文件
    setup-worker.mjs:30
    if (/^toollery-dsh(?: exe|-script py)$/i.test(name)) rmSync(join(scripts, name), { force: true })
  • 删除本地文件递归
    setup-worker.mjs:32
    if (readdirSync(scripts).length === 0) rmSync(scripts, { recursive: true, force: true })
  • 执行外部命令来自配置/变量
    setup-worker.mjs:52
    const child = spawn(command, args, { windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'], ...spawnOptions })
  • 写入本地文件
    setup-worker.mjs:67
    mkdirSync(home, { recursive: true })
  • 写入本地文件
    setup-worker.mjs:69
    try { mkdirSync(lock) } catch { throw new Error('Worker setup is already running. If an earlier setup was interrupted, remove setup.lock and retry.')
  • 写入本地文件
    setup-worker.mjs:126
    writeFileSync(pending, JSON.stringify({ python: executable, version: workerVersion, wheel_sha256: wheel.sha256 }, null, 2) + '\n')
  • 写入本地文件
    setup-worker.mjs:127
    renameSync(pending, join(home, 'worker.json'))
  • 删除本地文件递归
    setup-worker.mjs:129
    } finally { rmSync(lock, { recursive: true }) }
  • 写入本地文件
    managed-python.mjs:14
    mkdirSync(tools, { recursive: true })
  • 读取本地文件
    managed-python.mjs:16
    if (!existsSync(uv)) {
  • 读取本地文件
    managed-python.mjs:29
    if (statSync(archive).size > 32 * 1024 * 1024) throw new Error('Runtime download exceeded its size limit.')
  • 读取本地文件
    managed-python.mjs:30
    if (createHash('sha256').update(readFileSync(archive)).digest('hex') !== UV_SHA256) throw new Error('Runtime download checksum mismatch. Retry setup.'
  • 写入本地文件
    managed-python.mjs:35
    renameSync(join(extracted, 'uv.exe'), uv)
  • 删除本地文件递归
    managed-python.mjs:36
    } finally { rmSync(archive, { force: true }); rmSync(extracted, { recursive: true, force: true }) }
  • 读取本地文件
    managed-python.mjs:42
    if (!existsSync(join(venv, 'Scripts', 'python.exe'))) {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
v0.3.12026-10-25
· DeepSeek Harness v0.3.1 的工具集 v0.3.1 完成首个原生技能手册工作流,并细化目标感知控件,同时不改变 DSH 对注册、权限或执行的所有权。 · 原生技能手册 · 仅在准备手册时,通过 DSH 的作用域原生加载器加载符合条件的技能正文。 · 生成有界的、由正文派生的意图查询,存入配置档本地的 skill-cache,身份与来源关联。 · 支持 spec、manual 和 spec_manual 三种技能表示。spec 仍只含元数据;manual 模式复用有效条目,并在正文、目录元数据或生成器身份变化时使其失效。 · 完整技能正文和生成的手册不进入模型可见的目录历史。DSH 的原生技能服务商仍负责加载和执行选中的正文。 · 提交前授权 · 发送提示词前检查当前作用域技能目录和本地缓存。 · 仅在技能手册缺失时请求明确批准。缓存检查本身不调用模型。 · 生成运行时保留输入框草稿并阻止提交;准备完成后解锁。/toollery prepare-skills 仍可用于主动预生成。 · 报告准备进度和大致预计完成时间,依据已完成的未缓存手册工作。 · UI 与边界 · 保留不提供原生技能服务的独立 SDK 预设。 · 在目标感知面板中使用 Tool rep 和 Skill rep 标签;skills 只显示 Skill rep,both 显示两者。 · 移除多余的 Indexed tool pool 行。 · 保持 tool k 和 skill k 独立;在 both 下,一次 Update k 操作同时应用两个显示值。/toollery k N 仍是命令行兼容形式。 · 更新 OFF 提示,说明 Toollery 检索被绕过,而 DSH 的宿主可用工具和原生技能目录仍在宿主限制下可用。 · 开启时,Toollery 尚未让每个原生 DSH 工具永久驻留。原生技能声明保留,完整的宿主可用工具可见性由 OFF 和 skills 目标保持。 · 验证 验证通过:83 个 Python 测试(80 通过,3 个可选 ToolTalk 跳过)、29 个 Node CI/UI/服务测试、5 个打包插件测试,以及真实原生 DSH 夹具中的 12 项检查(paid_api_calls: 0)。总数包含 22 个专项 Python 技能手册测试和 6 个 Node UI/路由测试。wheel 和源码归档通过 twine check;npm tarball 内嵌匹配的 worker wheel。详细范围和历史 v0.3.0 检查见验证摘要。 安装匹配的 @jkl-agents/dsh-toollery npm 版本,或从 GitHub release 获取 v0.3.1 .tgz 资产。
v0.3.02026-10-25
· DeepSeek Harness 工具集 v0.3.0 v0.3.0 在 Toollery 现有工具检索之外,新增原生 DSH 技能适配。 · 原生技能检索 · 检索目标可设为 tools、skills 或 both。 · 在 skills 模式下,Toollery 根据宿主当前的技能名称、描述和可选元数据,在本地构建 BM25 索引。显式点名的可用技能优先,结果去重,并按 k 截断。 · 技能声明、完整技能正文加载、权限和执行仍由 DSH 负责。Toollery 不读取也不复制技能正文,不把技能排序变成执行授权。 · 技能检索保留宿主可用的完整工具池。both 会分别运行工具路径和技能路径。 · 设置和选择在用户回合内保持冻结,包括后续的模型步骤。宿主限制依然生效。 包内附带 95 个防冲突的 sample-* 提示词技能,用来试用元数据路由和原生正文加载。它们不引入运行时包,不过个别指令可能引用项目文件或可选服务。归属说明和限制见 plugin/sample-skills/README.md。 · 工具与 worker 更新 · 技能感知卡片显示目标、技能候选数、已应用/最新 k 和元数据检索耗时。所选目标用不到工具表示控件时,这些控件会被禁用。 · Top-k 填充现在能处理显式名称匹配,不产生重复条目;只要正匹配足够,就不会出现 k-1 填充不足。 · 启动时,如果 DSH 自带或已有 Python 可用,会离线安全安装内嵌 worker。不会自动发起模型调用或运行时下载;设置控件仍可用于重试和显式同意私有运行时。 · 现有工具检索、基于缓存的手动生成、服务商自有的发现排序和独立演示仍可使用。 · 兼容性与限制 测试兼容目标是 Windows 上的 DSH Desktop 0.12.1 和 DSH runtime 0.2.1-rc.2。覆盖原生根会话;PTC 和子代理检索不在本版本范围内。 本版本的技能检索仅限元数据;不包含生成的技能手册、历史感知改写、依赖展开和恢复搜索。没有原生技能目录的宿主保持原有行为。工具检索仍使用最新用户文本,需要广泛后续访问的任务请调大 k 或切到 OFF。 在 DSH Desktop 中用包名 @jkl-agents/dsh-toollery 安装,或使用 GitHub release 中对应的 .tgz 资源。npm 包和 GitHub 包内含同一版本的 worker 和 UI。
v0.2.32026-10-24
· 亮点 · 修复已有 Desktop pip-free 配置档环境的升级问题:安装内置 worker 前,只清理过期的 Toollery 文件和元数据。 · worker 安装或校验失败时,报告所处的安装阶段。 · 补充文档,说明插件重装时遇到本地 npm 元数据或缓存 blob 错误如何恢复。 npm 包已发布为 @jkl-agents/dsh-toollery@0.2.3。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
面向 DeepSeek Harness 的 Toollery 一个 DSH 插件,实现 Toollery,同时覆盖已注册工具和 DSH 原生技能目录。对工具,它为每个工具生成并缓存三条代理查询,然后用本地 BM25 检索为每轮用户输入挑选工具。对技能,它可以从 DSH 作用域原生加载器获取的技能正文生成并缓存意图查询,再检索 spec、manual 或 spec_manual 三种表示。DSH 原生 skill 加载器仍然负责完整正文的加载与执行;正文和手册不会进入模型可见的历史。 由 Jikun Liu 独立开发。与 DeepSeek 或 Toollery 原作者无隶属关系,也未获其背书。基于 XiangxiTian/toollery;见致谢。 安装并试用 在你现有的 DSH Desktop 中 打开 Plugins → Add plugin → Install a third-party plugin,输入: @jkl-agents/dsh-toollery 1. 安装并启用插件;如果 DSH 要求重启,就重启。它复用你现有的聊天模型和工具——无需再装一个 DSH。 2. 启动时,只要 DSH 自带的 Python 或已有的 Python 3.12+ 可用,Toollery 会自动检查并安装配置档本地的 worker。这一步不调用模型,也不下载 Python。
展开完整文档(README 剩余 1 节)
面向 DeepSeek Harness 的 Toollery

一个 DSH 插件,实现 Toollery,同时覆盖已注册工具和 DSH 原生技能目录。对工具,它为每个工具生成并缓存三条代理查询,然后用本地 BM25 检索为每轮用户输入挑选工具。对技能,它可以从 DSH 作用域原生加载器获取的技能正文生成并缓存意图查询,再检索 spec、manual 或 spec_manual 三种表示。DSH 原生 skill 加载器仍然负责完整正文的加载与执行;正文和手册不会进入模型可见的历史。

由 Jikun Liu 独立开发。与 DeepSeek 或 Toollery 原作者无隶属关系,也未获其背书。基于 XiangxiTian/toollery;见致谢。

安装并试用

在你现有的 DSH Desktop 中

打开 Plugins → Add plugin → Install a third-party plugin,输入:

@jkl-agents/dsh-toollery

1. 安装并启用插件;如果 DSH 要求重启,就重启。它复用你现有的聊天模型和工具——无需再装一个 DSH。
2. 启动时,只要 DSH 自带的 Python 或已有的 Python 3.12+ 可用,Toollery 会自动检查并安装配置档本地的 worker。这一步不调用模型,也不下载 Python。如果没有可用的 Python,打开 Toollery 的插件详情,选择 Set up local worker;Windows x64 用户可以显式允许下载私有 Python。技能 spec 模式不需要生成器;基于手册的技能模式只在缓存条目缺失、且你批准生成时,才使用配置好的生成器。
3. 任何使用手册的工具或技能表示(manual 或 spec_manual):保存手册生成模型、兼容 OpenAI Chat Completions 的 API base URL 和 key。这些可以和你的 DSH 聊天凭据不同,保存在本地。spec 模式不需要生成凭据。
4. 工具检索或 both: 新建一个原生会话(Standard 预设),查看工具数量和可能的 API 费用,然后选择 Generate missing manuals (uses API)。技能则把 Target 设为 skills,再选技能表示。在基于手册的技能模式下,Toollery 提交前会检查本地缓存,只在需要时通过 DSH 原生加载器获取符合条件的正文。如果条目缺失,输入框会提供 Generate missing skill manuals (uses API);草稿留在输入框里,准备完成后即可发送。有效的缓存手册会复用。
5. 请求某个已注册工具或相关原生技能。查看选中/调用的卡片,调整 k,或切换到 OFF。

不需要终端,也不用编辑 .env。插件不附带演示工具。工具池很大时,首次准备可能耗时;界面会显示进度和大致剩余时间。
如果 DSH 在安装或重装插件时报 npm 元数据/缓存 blob 缺失,即使已发布的包本身有效,这也可能是本地包管理器缓存不一致。如果报错信息里出现 npm,先关闭 DSH,在 PowerShell 里运行 npm cache clean --force,重启 DSH 后重试。这一步清的是 npm 的缓存,不会动 Toollery 的配置档数据或 API 设置。如果 DSH 仍报缓存错误,就从 latest GitHub release 下载 .tgz 安装,并在反馈时附上完整报错;参见 troubleshooting。

维护者和另一位同事已在另一台电脑上成功完成桌面端安装。本地兼容目标是 DSH Desktop 0.12.1 / DSH runtime 0.2.1-rc.2;适用范围见 verification summary。

命令行安装、固定版本的 .tgz 发布包、升级与卸载,参见 plugin guide。npm 会解析当前已发布的包;可下载的打包文件在 latest GitHub release。

没有现成 DSH?试试 Windows 演示

从 latest release 下载 Source code (zip),解压后双击 Start-Toollery.cmd。私有依赖安装期间,请保持终端窗口打开。

在设置页选择 12 utility tools 和 Scripted preview,然后点 Start demo。不需要 API key,也不会产生付费请求。试试 Use add_numbers to add 19 and 23.,结果应为 42。Scripted preview 只支持示例提示词,不支持任意聊天。

这是独立的演示环境,不是插件安装。真实模型、文件系统工具、启动进度和停止演示,参见 launcher guide;终端/Web 命令参见 manual setup guide。

日常使用

- 准备完成后的默认值: ON / spec_manual / top-k / 工具 k=3、技能 k=3。可选 spec、manual 或 spec_manual;用 all 保留宿主允许的全部工具。
- ON/OFF: OFF 会让下一轮跳过 Toollery 检索,同时保留 DSH 中宿主允许的工具和原生技能目录;宿主限制仍然生效。设置对下一轮用户消息生效;一轮对话的选取在其各模型步骤中保持不变。
- 缓存更新: 已注册工具发生变化时,会在后续某一轮自动对齐,无需重启。默认自动生成最多 15 个缺失的工具手册;工具批次更大时需审批并重新发送消息。缺失的技能手册走单独的本地预检,并在发送提示词前由你在输入框显式批准。参见 generation policy。
- 紧凑面板: 收起控件和回合卡片,变成一个小号 ON/OFF 按钮,之后还能恢复,检索设置不变,草稿输入也不会丢。
- 技能适配: 把 Target 设为 skills,即可对当前原生技能目录排序,同时保留所有宿主可用的工具。选 spec 只按元数据路由;选 manual / spec_manual 则用正文推导出的意图查询来路由。工具检索用 tools,两条路径都要就用 both。技能正文通过 DSH 的受限原生加载器加载,调用和执行仍归 DSH 所有。
- 独立的 top-k: tools 显示 Tool rep 和工具 k;skills 显示 Skill rep 和技能 k;both 显示两个 rep,各自保留独立的 k 值,共用一个 Update k 操作。

在 DSH 中体验 Toollery

第一个演示展示如何在 DSH Desktop 中安装并启用 Toollery。第二个演示聊天窗口里 tools、skills、both 三种模式的控制项,包括各自的表示方式和 top-k 设置。

在 DSH Desktop 中安装并启用 Toollery

在聊天窗口里切换 Toollery 的 tools、skills、both 模式

结果与边界

在 ToolRet 开发子集(10,656 个工具 / 5,679 条查询)上,与只用 spec 检索相比,spec+manual 把 Recall@3 从 32.52% 提升到 37.23%,Recall@10 从 42.00% 提升到 48.48%。这些是实现层面的实验,不是对论文的复现。

检索只用最新的用户文本,不做历史改写,也不做恢复式搜索。top-k 设得太紧,可能漏掉后续追问或依赖类工具:ToolTalk 补充让 token 变少了,但严格适配后的回合成功率也从 67/79 OFF 降到 51/79 ON。需要更宽的访问范围时,调大 k 或切到 OFF。省 token 不代表延迟或质量一定变好。

支持原生根会话;PTC 和子代理检索不在本版本范围内。Toollery 只观察 DSH 提供的工具,不会自主发现或安装工具。可选的候选批量发现示例演示了由服务商负责的发现与排序,不注册也不执行候选。

宿主发布原生技能目录时,Toollery 可以用元数据(spec)或缓存的正文推导意图查询(manual / spec_manual)来路由。手动模式下,Toollery 只通过 DSH 的受限原生加载器读取正文,生成本地检索证据;它不会把正文投射进模型历史,也不改动技能服务商的权限。加载和执行选中的正文仍由 DSH 原生 skill 工具负责。没有原生目录的宿主保持原有行为。
插件包自带 95 个 sample-* 提示词技能,用来试用技能路由和 DSH 原生的按需加载器。这些技能不引入任何运行时包,但部分指令会引用项目文件或可选的外部服务。比如,让 DSH 用 sample-meeting-minutes 把一段简短转录整理成决策和行动项。源码和许可细节见 plugin/sample-skills/README.md。

只测技能时,把 Toollery 的检索目标设为 skills(界面上的 Target 控件,或 /toollery target skills)。这样会保留完整的宿主可用工具池,只收窄技能目录。常规工具检索用 tools,想同时评估两条路径就用 both。

文档

| 指南 | 内容 |
| 插件指南 | 桌面端/命令行安装、生成策略、兼容性、升级与卸载 |
| 配置 | 模型、凭据和缓存标识 |
| 独立演示 · 手动安装 | Windows 启动器、真实模型和终端/Web 演示 |
| 工具来源 · 故障排查 | MCP/Cordis 来源与诊断 |
| 验证 · 实验 | 安装检查、检索质量、token、延迟和限制 |
| 开发 · 发布 | 仓库结构、构建/测试命令和发布工作流 |
| 更新日志 | 已发布和未发布的变更 |

许可

原始代码采用 MIT 许可,版权归 Jikun Liu 所有,2026 年。第三方材料沿用各自条款;见 LICENSE 和 ACKNOWLEDGEMENTS.md。
预览分享卡片长什么样 ↓JKL-agents/toollery-dsh
分享 · DeepSeek Harness Hub
JKL-agents/toollery-dsh

社区维护的 Toollery 集成,接入 DeepSeek Harness,无需训练即可大规模检索技能和工具。

回到顶部