按对话挑选工具套装,减少模型误选工具
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add JungleYXu/dsh-loadout该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · chat
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 16 处,展示前 13 条)
- 读取本地文件index.js:220
if (!existsSync(path)) continue - 读取本地文件index.js:221
const store = normalizeStore(JSON.parse(readFileSync(path, 'utf8'))) - 写入本地文件index.js:231
mkdirSync(dirname(STORE_PATH), { recursive: true }) - 写入本地文件index.js:236
writeFileSync(temporary, `${JSON.stringify(next, null, 2)}\n`, 'utf8') - 写入本地文件index.js:237
renameSync(temporary, STORE_PATH) - 读取本地文件index.js:370
for (const workspace of readdirSync(root, { withFileTypes: true })) { - 读取本地文件index.js:373
for (const entry of readdirSync(dir, { withFileTypes: true })) { - 读取本地文件index.js:401
if (loaded?.path !== undefined && existsSync(loaded.path)) { - 写入本地文件index.js:402
copyFileSync(loaded.path, `${loaded.path}.v1.bak-${Date.now()}`) - 读取本地文件index.js:1303
if (existsSync(home)) { - 发起网络请求client.js:103
const response = await fetch(ENDPOINT, { - 发起网络请求client.js:122
const response = await fetch(url, { method: 'GET' }) - 写入剪贴板client.js:1159
await navigator.clipboard.writeText(command)
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 的按会话工具包(Loadout / 装备栏):只把对话需要的工具交给模型。
README
由 DeepSeek 最新模型翻译生成装备栏(dsh-loadout)
English · 更新日志 · MIT
「装备栏」是这个插件本身;「套装」是栏里那几套配好的工具。一个对话选一套装备,只带用得上的工具。
同名项目说明:npm 上的 dsh-loadout 是本插件唯一的发行包。GitHub 上另有两个同名的独立项目(YongjianWan/dsh-loadout、JYDW-1/dsh-loadout),作者、功能都与本插件不同。用 dsh plugin add dsh-loadout 装到的一定是本插件;从 GitHub 安装时请认准 JungleYXu/dsh-loadout。
DeepSeek Harness 的工具全局可见:插件装得越多,每个对话要背的工具清单越长,模型也越容易挑错工具。装备栏把工具编成套装,每个对话只留当前套装里的工具。
它做什么
| 能力 | 说明 |
| 三档底座 | 全部(不裁剪,默认)/ 仅内置(只留 DSH 自带工具)/ 我的套装 |
| 我的套装 | 「新建套装」里勾选内置工具与插件,存成一套带名字的装备。
展开完整文档(README 剩余 1 节)
装备栏(dsh-loadout)
English · 更新日志 · MIT
「装备栏」是这个插件本身;「套装」是栏里那几套配好的工具。一个对话选一套装备,只带用得上的工具。
同名项目说明:npm 上的 dsh-loadout 是本插件唯一的发行包。GitHub 上另有两个同名的独立项目(YongjianWan/dsh-loadout、JYDW-1/dsh-loadout),作者、功能都与本插件不同。用 dsh plugin add dsh-loadout 装到的一定是本插件;从 GitHub 安装时请认准 JungleYXu/dsh-loadout。
DeepSeek Harness 的工具全局可见:插件装得越多,每个对话要背的工具清单越长,模型也越容易挑错工具。装备栏把工具编成套装,每个对话只留当前套装里的工具。
它做什么
| 能力 | 说明 |
| 三档底座 | 全部(不裁剪,默认)/ 仅内置(只留 DSH 自带工具)/ 我的套装 |
| 我的套装 | 「新建套装」里勾选内置工具与插件,存成一套带名字的装备。卡片上可以设为默认、复制切换命令、编辑(改完覆盖保存,或另存成新的一套)、备注、删除 |
| 预置套装 | 只读五套:仅聊天 / 编程用 / 查找资料 / 项目梳理 / 写作;套用即可,改动会另存为你的套装 |
| 加挂 | 在底座之上临时加挂插件,不必为一次性组合新建套装 |
| 备注 | 每个套装可加 20 字备注,菜单里显示成 测试1(用于视频制作) |
| token 账本 | 菜单状态行 省 ~1.9k tokens,设置页给出「保留 N 个工具 · 约 X tokens · 省多少」的完整账目 |
| 刷新 | 菜单右上 ⟳ 重拉工具目录并重套用当前选择 |
| 每对话独立 | 每个对话把自己的选择存下来(loadout.json 的 assignments),重启后照旧;改默认只影响之后新建的对话 |
安装
三种来源,装的是一个东西:
1) npm(已发布,最短)
dsh plugin --profile desktop add dsh-loadout
2) GitHub(npm 不可达时用同一个包)
dsh plugin --profile desktop add github:JungleYXu/dsh-loadout
3) 本地目录(开发用,链接安装,不拷贝)
dsh plugin --profile desktop add link:<本目录绝对路径>
让 Harness 自己装也可以(等价于第 3 种):
plugin_manager action=install_bundle target=<本目录绝对路径>
没有 dsh CLI 的机器上,可以用 scripts/install.ps1:它建 junction 链接并写 profile manifest,等价于 install_bundle;-Copy 会退回拷贝安装,除非你清楚后果,否则别用。
装完重启应用:宿主插件没有热重载,界面至少刷新一次。
为什么不能复制文件
0.4.0 的启动崩溃就是这么来的:install.ps1 把文件拷进 profile,源码修好后 profile 里还是旧拷贝,启动时跑的是旧 bundle。链接安装没有这个问题。
自检:
node scripts/preflight.mjs # 校验 id/包名一致、补丁行、以及安装副本是否漂移
node scripts/selftest.mjs # 宿主逻辑:底座/加挂/保存/存储往返/遮罩
node scripts/client-smoke.mjs # 浏览器 bundle:菜单与设置页渲染
使用
- 标题栏「装备栏」按钮:切底座、加挂插件、新建套装。
- 设置 → 装备栏:管理套装、改备注、选新对话默认套装。
- /kit <名字>:在对话里直接切换。
设置页没有自己的对话,所以它只管「新对话从哪套开始」,不切换当前对话——当前对话请在标题栏里切。默认列表里「全部 / 仅内置」和套装是同一种卡片:都能「复制切换命令」或「设为默认」;「我的套装」默认折叠,只显示当前默认的那一个(这一行下面始终留着「+ 新建套装」),点开才列出全部。已经保存的套装可以在卡片上「编辑」:改动就在那张卡片下面展开,「覆盖保存」(正在用它的对话立刻按新工具集走)或「另存为新套装」。
预置套装(五套,只读)
五套都是只读的,改动会另存为你的套装。它们只列内置工具,插件工具要靠「加挂」或另存时勾选。
| 套装 | 子命令 id | 内置工具 |
| 仅聊天 | chat | ask_user_question weather web_search web_fetch read + 协作五件套 |
| 编程用 | coding | pwsh read write edit glob grep todo_write + 协作五件套 |
| 查找资料 | research | web_search web_fetch advanced_search research platform_search read write glob grep + 协作五件套 |
| 项目梳理 | plan | ask_user_question web_search web_fetch read write edit glob grep todo_write + 协作五件套 |
| 写作 | writing | read write edit glob grep + 协作五件套 |
「协作五件套」= send_message list_agents interrupt_agent subagent subagent_fork。每套都带着它们,否则子代理切到这套之后连回话都发不出来。
给模型用的工具
kit_list(列出套装、当前绑定,以及每套被多少对话使用)、kit_apply(把当前对话切到某套)、kit_assign(把指定对话钉到某套)、kit_rename(只改显示名)、kit_create / kit_set_tools / kit_set_default / kit_delete(增删改,kit_delete 支持 dryRun)。这些工具在任何套装里都保留,不会把自己锁死。
对话的绑定
每个对话有一条持久绑定,写在 ~/.dsh/loadout.json 的 assignments 里:
{ "assignments": { "session-abc": "coding", "session-def": null } }
null 就是「全部」。规则:
- 对话第一次出现时写入一次:有新默认就记默认,从别的对话分叉出来就继承父对话,升级前就存在的旧对话记 null(保持当时的实际状态)。
- 以后只有显式切换(标题栏、/kit、kit_apply、kit_assign)才改它。
- 改「新对话默认套装」只影响之后新建的对话,已有对话各自保留。
- 子代理不记录绑定:它的父对话已经决定了它能看见什么。
升级
- 0.5.x → 0.12.x:包名没变(dsh-loadout),直接 plugin_manager install_bundle 覆盖即可;套装数据在 ~/.dsh/loadout.json,第一次启动会迁移到 schema: 2(旧文件备份为 .v1.bak-<时间戳>)。
- 0.4.x → 0.12.x:包名从 dsh-plugin-kits 改成 dsh-loadout,先卸旧的再装新的:
plugin_manager action=remove_bundle target=dsh-plugin-kits
plugin_manager action=install_bundle target=<本目录绝对路径>
旧数据 ~/.dsh/plugin-kits.json 会被读一次并迁移到 ~/.dsh/loadout.json。
- 任何版本升级后都重启应用:宿主代码没有热重载,只刷新界面不够。
token 账本
菜单的状态行会说 当前:编程 · 省 ~1.9k tokens,设置页顶部给出完整账目:
当前对话保留 18 个工具 · 约 1.1k tokens · 「全部」约 3.0k tokens · 本套装省约 1.9k tokens
每个套装卡片也标着自己的估价(≈1.1k tokens)。算法是估算:把每个工具的定义(名字、说明、参数 schema)序列化后除以 3.5 字符/token,只算工具清单这一段——不含对话历史、系统提示或模型缓存的影响。界面上都写了「估算」,不要拿它当账单。「当前对话保留」这一侧直接量的是运行时真正投给模型的 schema,「全部」那一侧来自工具层的定义表。
文件
- 套装与绑定:~/.dsh/loadout.json(schema: 2;kits 是你的套装,assignments 是每个对话的绑定,defaultKit 是新对话默认值)。
- 从 0.11.x 升到 0.12.0 时自动迁移一次,旧文件备份为 loadout.json.v1.bak-<时间戳>。
- 旧版 ~/.dsh/plugin-kits.json 只读一次,随后迁移。
- 卸载:plugin_manager action=remove_bundle target=dsh-loadout。
已知边界
- 本插件只控制「对话看得到哪些工具」。已启用的插件仍在后台运行;界面插件(侧边栏、主题等)不受影响。
- 看不到「已下载但未启动」插件的工具:工具只在插件 apply() 后存在。
- 遮罩是「减法」:内置工具用工具层的 deny 规则隐藏,插件工具用 tools.restrict({ deny })。
- 新装(或删掉 ~/.dsh/loadout.json 后)默认是「全部」;覆盖安装会保留你已选的默认套装。
排查
应用起不来,弹窗写 web boot: … entry did not activate / dsh-loadout: import failed
这是客户端 bundle 没注册成工厂导致的,启动审计对任何没激活的条目都是致命的。按顺序看:
1. node scripts/preflight.mjs —— 它会直接告诉你 bundle 的工厂 id 和包名是否一致。不一致就是这一类问题。
2. 确认安装的是链接不是拷贝:preflight 会打印 as a link (no copy to drift);如果是拷贝,删掉 node_modules/dsh-loadout 重新 install_bundle。
3. 仍不行就 remove_bundle 后重装并重启,别在 profile 里手工改 package.json / cordis.patch.yml。
怀疑装到了同名插件
- 看 profile 的 package.json:dsh-loadout 的值是 link: / file:,还是 registry 版本。
- 打开 node_modules/dsh-loadout/package.json,repository.url 应当是 github.com/JungleYXu/dsh-loadout。不是,就说明装的是另一个同名项目。
- 两个同名包不能共存——都占 dsh-loadout 这一个 key,后装的会覆盖先装的。先 plugin_manager action=remove_bundle target=dsh-loadout,再按本文顶部的三种方式重装。
装了但界面没有按钮 / 工具没生效
- 宿主代码要重启应用才加载;浏览器 bundle 至少刷新一次。
- GET /dsh-loadout/state 能返回 JSON 说明宿主在跑;404 说明宿主没加载成功。
- 菜单里点 ⟳ 可以重拉工具目录,不用重启(只对已加载的宿主有效)。
切换套装后工具全没了
0.7/0.8 的 allow 名单缺陷已修,现在只做 deny 遮罩。若仍遇到,点「全部」即可恢复,并把 /dsh-loadout/debug 的输出留一份。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
JungleYXu/dsh-loadout
按对话挑选工具套装,减少模型误选工具
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,489已汉化DSH
73.1
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,918已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,453已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
Download DS Bot for Windows 10/11 64-bit / 下载 Windows…
★ 5,293已汉化DSH
71.2
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,797已汉化DSH
71.1
这是你的仓库?认领条目