DeepSeek Harness 技能选择器:在输入框旁点选技能,自动插入官方 /技能名 手势,随消息一起发送
49/100
综合分
38
GitHub 星标
1,196
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-skill-pickernpm 源 · dsh-skill-picker 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-skill-picker @ 0.5.29
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 11:46:04
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 85 处,展示前 55 条)
- 读取本地文件lib/index.js:13
return (await stat(path.join(dir, entry.name))).isDirectory(); - 读取本地文件lib/index.js:87
await access(candidate); - 读取本地文件lib/index.js:103
const manifest = JSON.parse(await readFile(path2.join(profileDir, "package.json"), "utf8")); - 读取本地文件lib/index.js:116
for (const entry of await readdir(profilesDir, { withFileTypes: true })) { - 读取本地文件lib/index.js:132
profiles = await readdir(profilesDir, { withFileTypes: true }); - 读取本地文件lib/index.js:140
await access(candidate); - 写入本地文件lib/index.js:188
await copyFile(file, backup); - 写入本地文件lib/index.js:191
await writeFile(tmp, next, "utf8"); - 写入本地文件lib/index.js:192
await rename(tmp, file); - 写入本地文件lib/index.js:216
await writeFile(tmp, original, "utf8"); - 写入本地文件lib/index.js:217
await rename(tmp, file); - 写入本地文件lib/index.js:296
await rename2(plain, off); - 执行外部命令固定命令lib/index.js:374
spawn("explorer.exe", [`/select,${show}`], { detached: true, stdio: "ignore" }).unref(); - 执行外部命令固定命令lib/index.js:378
spawn("open", ["-R", show], { detached: true, stdio: "ignore" }).unref(); - 执行外部命令固定命令lib/index.js:381
spawn("xdg-open", [path3.dirname(show)], { detached: true, stdio: "ignore" }).unref(); - 发起网络请求lib/client.js:25831
const response = await fetch(`${ENDPOINT}${migrate ? "?migrate=1" : ""}`, { - 发起网络请求lib/client.js:25847
const response = await fetch(ENDPOINT, { headers: { accept: "application/json" } }); - 发起网络请求lib/client.js:26158
const response = await fetch(`/dsh-skill-picker/skill${cwd}`, { - 发起网络请求lib/client.js:26540
const res = await fetch(`/dsh-skill-picker/skills${cwd}`, { headers: { accept: "application/json" } }); - 发起网络请求lib/client.js:26553
const res = await fetch(`/dsh-skill-picker/skills${cwd}`, { headers: { accept: "application/json" } }); - 发起网络请求src/client/shared-state.js:108
const response = await fetch(`${ENDPOINT}${migrate ? '?migrate=1' : ''}`, { - 发起网络请求src/client/shared-state.js:136
const response = await fetch(ENDPOINT, { headers: { accept: 'application/json' } }) - 读取本地文件src/dir-entry.js:34
return (await stat(path.join(dir, entry.name))).isDirectory() - 读取本地文件src/index.js:167
entries = await readdir(dir, { withFileTypes: true }) - 读取本地文件src/index.js:180
content = await readFile(path.join(skillDir, ENTRY), 'utf8') - 读取本地文件src/index.js:186
content = await readFile(path.join(skillDir, DISABLED_ENTRY), 'utf8') - 读取本地文件src/index.js:317
return normalizeSharedState(JSON.parse(await readFile(sharedStateFile(), 'utf8'))) - 写入本地文件src/index.js:327
await mkdir(path.dirname(file), { recursive: true }) - 写入本地文件src/index.js:329
await writeFile(tmp, `${JSON.stringify(normal, null, 2)}\n`, 'utf8') - 写入本地文件src/index.js:330
await rename(tmp, file) - 读取本地文件src/patch-ui-skill.js:116
await access(candidate) - 读取本地文件src/patch-ui-skill.js:159
const manifest = JSON.parse(await readFile(path.join(profileDir, 'package.json'), 'utf8')) - 读取本地文件src/patch-ui-skill.js:182
for (const entry of await readdir(profilesDir, { withFileTypes: true })) { - 读取本地文件src/patch-ui-skill.js:224
profiles = await readdir(profilesDir, { withFileTypes: true }) - 读取本地文件src/patch-ui-skill.js:236
await access(candidate) - 读取本地文件src/patch-ui-skill.js:237
const real = await realpath(candidate) - 写入本地文件src/patch-ui-skill.js:309
await copyFile(file, backup) - 写入本地文件src/patch-ui-skill.js:318
await writeFile(tmp, next, 'utf8') - 写入本地文件src/patch-ui-skill.js:319
await rename(tmp, file) - 写入本地文件src/patch-ui-skill.js:366
await writeFile(tmp, original, 'utf8') - 写入本地文件src/patch-ui-skill.js:367
await rename(tmp, file) - 读取本地文件src/skill-ops.js:80
return (await stat(target)).isDirectory() ? 'dir' : 'file' - 读取本地文件src/skill-ops.js:89
await stat(candidate) - 写入本地文件src/skill-ops.js:117
await rename(plain, off) - 写入本地文件src/skill-ops.js:124
await rename(off, plain) - 写入本地文件src/skill-ops.js:142
await mkdir(backupPath, { recursive: true }) - 写入本地文件src/skill-ops.js:143
await rename(target, path.join(backupPath, name)) - 写入本地文件src/skill-ops.js:144
await writeFile(path.join(backupPath, 'manifest.json'), `${JSON.stringify({ - 读取本地文件src/skill-ops.js:157
entries = await readdir(skillBackupDir(), { withFileTypes: true }) - 读取本地文件src/skill-ops.js:166
const manifest = JSON.parse(await readFile(path.join(dir, 'manifest.json'), 'utf8')) - 读取本地文件src/skill-ops.js:195
manifest = JSON.parse(await readFile(path.join(dir, 'manifest.json'), 'utf8')) - 写入本地文件src/skill-ops.js:204
await rename(path.join(dir, path.basename(original)), original) - 执行外部命令固定命令src/skill-ops.js:221
spawn('explorer.exe', [`/select,${show}`], { detached: true, stdio: 'ignore' }).unref() - 执行外部命令固定命令src/skill-ops.js:225
spawn('open', ['-R', show], { detached: true, stdio: 'ignore' }).unref() - 执行外部命令固定命令src/skill-ops.js:228
spawn('xdg-open', [path.dirname(show)], { detached: true, stdio: 'ignore' }).unref()
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-skill@deepseek-ai/dsh-system-prompt给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
1 张 · 点击查看大图功能亮点
- 点选技能插入输入框
- 自动插入/技能名手势
- 随消息发送加载技能
最近更新
在 GitHub 查看全部 →v0.5.292026-10-27
在 DSH 的「设置 → 内置插件」和「插件」页里,这个插件不再显示 dsh-skill-picker 加一段英文,而是显示 「技能选择器」 和一句中文说明,并且能用中文搜到。
· 为什么要改
DSH 的插件列表默认拿包名当标题、拿 package.json 的 description 当说明。装得多了以后一屏全是 dsh- 开头的英文串,只能靠记。官方早就留了本地化入口(readPluginMeta() 读包里的 locale/*.json,取 meta.title / meta.description),只是多数插件没写。
· 改了什么
1. 新增 locale/en.json 与 locale/zh.json,各写 meta.title / meta.description
2. package.json 的 exports 增加 "./locale/*": "./locale/*" —— 官方解析走 Node ESM,不放行就取不到
3. package.json 的 files 增加 locale,否则发布后的 tarball 里没有这两个文件
4. en.json 不能省:官方拿它当目录锚点,只放 zh.json 会整份被忽略
· 验证
· node --test → 88 tests / 87 pass / 1 skipped / 0 fail
· npm pack --dry-run → tarball 内含 locale/en.json、locale/zh.json
· import.meta.resolve('dsh-skill-picker/locale/zh.json') → 能解析到本地文件(证明 exports 生效)
· 实机:重装并重启后,插件页显示「技能选择器」,说明为一句中文,搜「技能」能命中
安装:dsh plugin --profile web add dsh-skill-picker@0.5.29
v0.5.282026-10-02
· 一句话
新置顶的技能现在排到「置顶」分组的第一行,和微信 / Notion 的置顶行为一致。
· 为什么要改
后置顶的技能排在了「置顶」分组的最后一行 —— 主流应用(微信 / Notion)都是「刚置顶的进最前」,所以这是 bug:写入侧 togglePin() 用的是 [...pinned, name](追加到末尾),而渲染侧直接按数组顺序输出「置顶」分组。
· 改了什么
1. 写入侧从「追加到末尾」改成「插到最前」:[name, ...pinned]
2. 渲染侧不动 —— 它本来就是按数组顺序渲染,所以一行修复就够了
· 怎么验证
· npm test → 88 tests / 87 pass / 1 skipped / 0 fail
· 实机:取消一个已置顶的技能 → 重新置顶它 → 出现在「置顶」分组第一行
· 备注:已在置顶列表里的旧顺序不会自动重排(存的是老的追加顺序),想调整顺序就「取消 → 重新置顶」
· 安装:dsh plugin --profile web add dsh-skill-picker@0.5.28
v0.5.272026-10-02
· 一句话
手机上选完技能,光标照常回到输入框 —— 与 dsh-pocket 的「切会话不抢焦点」补丁配套。
· 为什么要改
dsh-pocket 新补丁把「程序自己抢的焦点」一律退回,而本插件的 focusComposer() 本身就是有意为之的主动聚焦(选完技能就该把光标放回输入框)→ 于是「插完技能光标不回来」在手机上复发。
· 改了什么
1. focusComposer() 在聚焦前写一个时间戳:window.__dshSkillPickerFocusing = Date.now()
2. 拦截器看到 1.2 秒内的这个时间戳就放行
3. 用时间戳而不是布尔值:紧随其后还有一次 60ms 的守卫重定位,一次设值同时覆盖两次聚焦,也不需要清理、不会漏复位
· 怎么验证
· npm test → 88 tests / 87 pass / 0 fail
· ⚠️ 两个补丁是一对:只装本插件 → 手机上「切会话仍会抢焦点」;只装 pocket 侧 → 「插完技能光标不回来」;两边都装才两个都对
· 安装:dsh plugin --profile web add dsh-skill-picker@0.5.27,装完重启 DSH
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-skill-picker
给 DSH 的输入框加一个 ⚡ 按钮:点开是你装过的全部技能(带说明),搜一下、点一下,/技能名 就进了发送框,DSH 自己把技能加载起来执行。
English — A skill picker for the DSH Web GUI. A ⚡ button in the composer lists every installed skill with its description; picking one inserts the official /skill-name gesture into your draft, so DSH loads that skill with your message.
| 当前版本 | v0.5.29 |
| 许可 | MIT |
| 平台 | DSH 网页端 / 桌面端(Electron)/ 手机浏览器 |
| 内核 | DSH 0.1.x 与 0.2.x(见 4.4) |
1、为什么要做
DSH 本来就会认 /技能名 这个手势 —— 你在消息里写 /ji-zhang 午饭 12 块,它自动加载「记账」技能来执行。
展开完整文档(README 剩余 1 节)
dsh-skill-picker
给 DSH 的输入框加一个 ⚡ 按钮:点开是你装过的全部技能(带说明),搜一下、点一下,/技能名 就进了发送框,DSH 自己把技能加载起来执行。
English — A skill picker for the DSH Web GUI. A ⚡ button in the composer lists every installed skill with its description; picking one inserts the official /skill-name gesture into your draft, so DSH loads that skill with your message.
| 当前版本 | v0.5.29 |
| 许可 | MIT |
| 平台 | DSH 网页端 / 桌面端(Electron)/ 手机浏览器 |
| 内核 | DSH 0.1.x 与 0.2.x(见 4.4) |
1、为什么要做
DSH 本来就会认 /技能名 这个手势 —— 你在消息里写 /ji-zhang 午饭 12 块,它自动加载「记账」技能来执行。官方只配了一个 / 补全,而它靠两样东西:
1. 前缀匹配 —— 你得打对技能名的开头几个字母
2. 你的记忆 —— 装了五六十个技能,谁记得住每个叫什么
于是最常见的场面是:明明装了「备份记忆」,却想不起来它叫 backup-memory,翻不到就放弃了。
2、它做什么
dsh-skill-picker 技能面板:搜索框、置顶与最近使用分组、右键管理菜单
1. 看得见 —— 输入框旁边一个 ⚡,点开是全部技能 + 完整描述
2. 搜得到 —— 中文、拼音(jiyi / ji yi / jy)、英文都行,技能名和描述一起搜
3. 选得快 —— 最近使用靠前、可手动置顶、↑↓ + Enter 全程键盘
4. 管得了 —— 右键(手机长按):置顶 / 关闭 / 在文件管理器中定位 / 卸载(移入备份,可撤回)
5. 到处一致 —— 置顶和最近使用在桌面端、网页端、手机之间共用同一份
它和官方 / 补全不冲突,可以同时用:记得住名字用官方,记不住用它。
3、怎么用
1. 看输入框右下角(模型选择器旁边),点 ⚡
2. 敲关键字(中文 / 拼音 / 英文),列表实时过滤;也可以直接 ↑↓ 翻
3. 点中技能(或按 Enter)—— 发送框里出现 /技能名 ,光标停在末尾
4. 接着把话说完,回车发送 —— DSH 自动加载这个技能
例子:点 ⚡ → 搜 jiyi → 点 /ji-zhang → 打上「今天午饭 12 块」→ 发送。
| 操作 | 效果 |
| 点 ⚡ | 打开技能面板 |
| ↑ ↓ / Enter / Esc | 选择 / 插入 / 关闭 |
| 右键技能行(手机长按 500ms) | 管理菜单:置顶 / 关闭 / 定位 / 卸载 |
| 面板右下角「已关闭 N」 | 查看并恢复被关闭的技能 |
| 输入框直接打 / | 官方斜杠菜单(本插件同样增强了它的匹配与排序) |
4、安装
4.1 三条路,按需要选一条
1. 要最新版 —— GitHub 直装(git 依赖直接拉最新 commit,不受 npm 24 小时门禁影响)
dsh plugin --profile web add "git+ssh://git@github.com:a735624258/dsh-skill-picker.git"
2. 要 npm 正式版 —— 先查版本号,再按版本号装(别用裸名)
npm view dsh-skill-picker version # 例如 0.5.28
dsh plugin --profile web add dsh-skill-picker@0.5.28
3. 要改代码 —— clone 下来用 link 模式装
git clone https://github.com/a735624258/dsh-skill-picker.git
dsh plugin --profile web add link:/path/to/dsh-skill-picker
⚠️ 裸名安装(add dsh-skill-picker)在新版本发布后 24 小时内会被 pnpm 的 minimumReleaseAge 门禁拦下、自动落回旧版。照上面三条走就不会装错。
4.2 装完必须重启
host 路由是进程启动时加载的,只开个新标签页不生效:
| 你用的是 | 怎么重启 |
| 网页端 | 重启 dsh web 进程,必要时 Ctrl+F5 硬刷 |
| 桌面端 | 重启 DeepSeek Harness.exe 进程 |
4.3 网络与卸载
1. HTTPS 慢或不通 → 改用 SSH:git clone git@github.com:a735624258/dsh-skill-picker.git
2. 想让 pnpm 一律走 SSH:git config --global url."git@github.com:".insteadOf "https://github.com/"
3. dsh 被 PowerShell 执行策略挡下 → powershell -ExecutionPolicy Bypass -Command "dsh plugin --profile web add link:C:\path\to\dsh-skill-picker"
4. 卸载:dsh plugin --profile web remove dsh-skill-picker
4.4 兼容性与注意事项
| 内核版本 | 状态 |
| 0.1.0-rc.6 ~ 0.1.x | 支持 |
| 0.2.0-rc.1 / rc.2 及 0.2.x | 支持(当前主用、实测) |
| 1.0.0 及以上 | 需要重新确认 |
1. peer 范围写得宽是故意的 —— ^0.1.0-rc.6 || >=0.2.0-rc.1 <1.0.0-0。内核包与内核锁步同版本,钉死一个小版本线会让插件在内核升级时被误拒(日志一句 skipping profile bundle,表现是 ⚡ 按钮凭空消失)
2. 技能读哪些目录 —— 项目级 <工作区>/.dsh/skills、<工作区>/.agents/skills;用户级 ~/.dsh/skills、~/.agents/skills($DSH_AGENTS_HOME 可覆盖);同名时项目级优先
3. 符号链接 / Junction 型技能会被跟随读取;user-invocable: false 的技能不列出(列出来点了也会被官方静默跳过)
4. 桌面端无需任何手工处理(v0.5.15 起):官方技能 UI 在 app.asar 里还是普通目录都不影响
5. 手机端需配套 —— dsh-pocket 的「切会话不抢焦点」补丁与本插件的 window.__dshSkillPickerFocusing 豁免牌是一对,只装一边会出现「切会话抢焦点」或「插完技能光标不回」
6. 暂不支持自定义技能目录(官方 customSkillDirs)—— 欢迎 PR
5、它是怎么做到的
[客户端] 输入框旁的 ⚡ 按钮 ↓ 取技能列表(先官方 skills API,失败回退宿主扫描) [宿主] 技能目录 → 名字 + 描述 ↓ 你点选 [客户端] 把 "/技能名 " 追加进发送框 ↓ 发送 [DSH] agent/pre-step 认出 /技能名 手势 → 加载技能 → 执行
本插件只补 UI 这一层,加载与执行走 DSH 官方既有机制(dsh-tool-skill 扫描用户消息里的 /kebab-case-name),不碰 agent、不改官方代码。
1. 列表两条路 —— 优先走官方宿主 skills API(remote.skills.list,与官方 / 补全同源、自动含用户级 + 项目级),不可用时回退到宿主扫描路由
2. / 菜单的模糊 + 拼音(v0.5.15 起)—— 运行时接管官方触发源,一个文件都不动。原因:官方不允许注册同名 / 源(重名直接抛错),而改官方文件在 app.asar / pnpm 硬链接 / 悬空软链下会静默失效
3. 技能管理路由有三道闸 —— 必须带 x-dsh-skill-picker: 1 自定义头;客户端只报技能名、路径由宿主自己查;路径必须恰好落在已知技能根的一层之下。「卸载」从不删除,只移进 $DSH_HOME/skill-backups/
4. 出错不拖垮 —— 插槽缺失时静默跳过,扫描失败返回空列表,状态同步失败退化成纯本地
6、开发
npm install # 装依赖
npm run build # src/ → lib/(client bundle 必须打成 __ModuleLoader__ 握手)
dsh plugin --profile web add link:$PWD # link 模式装进 web profile,改源码即生效
node --test # 测试
⚠️ 改完源码必须 npm run build:lib/client.js 是构建产物,ESM 源码不能直接当 client bundle 加载(DSH web shell 要求 window.__ModuleLoader__.load({ id, factory }) 握手格式),否则启动报 loaded without registering "dsh-skill-picker"。
dsh-skill-picker/
├── package.json # dsh.bundle.patch + dsh.client 声明 + 兼容性表 ├── cordis.patch.yml # bundle patch:把插件行插进 web profile ├── build.mjs # esbuild 构建:host ESM + client CJS ├── locale/ # 官方插件页显示的名字与说明(en 为锚点,zh 为中文) ├── src/ │ ├── index.js # host:技能目录路由 + agent 引导段 │ ├── skill-ops.js # host:关闭 / 开启 / 定位 / 卸载 / 撤回 │ ├── patch-ui-skill.js # host:旧文件补丁(默认关闭)+ 自动还原 │ ├── dir-entry.js # 目录项读取(跟随符号链接 / Junction) │ └── client/ │ ├── index.jsx # client:⚡ 面板(搜索 / 分组 / 排序 / 右键菜单) │ ├── slash-source.js # client:/ 菜单的运行时接管 │ ├── shared-state.js # client:跨端共享的置顶 / 最近使用 │ └── session-view.js # client:会话身份与工作区 cwd ├── lib/ # 构建产物(勿手改) ├── test/ # node --test 用例(8 个文件) └── docs/ # 截图
测试最近一次结果:88 用例 / 87 通过 / 1 跳过 / 0 失败(跳过那条需要 Windows 建符号链接的权限)。
locale/ 是给官方看的:插件页和「设置 → 内置插件」用 meta.title / meta.description 显示名字与一行说明,搜索框也认这两个字段。官方拿 en.json 当目录锚点,所以两个文件都得有 —— 只放 zh.json 会被整份忽略;exports 里也要放行 ./locale/*,否则解析器取不到。
更新日志
最近 3 个版本:
- v0.5.29 —— 官方插件页显示「技能选择器」+ 中文说明,可用中文搜到
- v0.5.28 —— 新置顶的技能排到「置顶」分组的最前面
- v0.5.27 —— 手机端「插完技能光标不回」的配套豁免牌
各版本说明(版本速览 + 13 个版本的详细说明)见 CHANGELOG.md。
MIT License · LICENSE预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
a735624258/dsh-skill-picker
DeepSeek Harness 技能选择器:在输入框旁点选技能,自动插入官方 /技能名 手势,随消息一起发送
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,173已汉化DeepSeek 客户端
74.4
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,197已汉化DSH
71.7
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,308已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,897已汉化DSH
71.2