社区维护的 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-toollerynpm 源 · @jkl-agents/dsh-toollery 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 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🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
最近更新
在 GitHub 查看全部 →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。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
JKL-agents/toollery-dsh
社区维护的 Toollery 集成,接入 DeepSeek Harness,无需训练即可大规模检索技能和工具。
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9