在原生会话中切换模型与执行内核
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/14 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/AlyceStocking/dsh-harness-switch.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 20 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 42 处,展示前 40 条)
- 读取本地文件src/settings.js:39
try { return validateSettings(JSON.parse(await readFile(this.file, 'utf8')), this.harnessIds?.()); } - 写入本地文件src/settings.js:45
await mkdir(dirname(this.file), { recursive: true }); - 写入本地文件src/settings.js:47
await writeFile(temp, JSON.stringify(next, null, 2) + '\n', { flag: 'wx', mode: 0o600 }); - 写入本地文件src/settings.js:48
await rename(temp, this.file); - 读取本地文件src/settings.js:58
const document = parse(await readFile(join(absolutePath(kimiHome, 'Kimi home'), 'config.toml'), 'utf8')); - 读取本地文件src/native.js:11
const sourcePrompt = readFileSync(new URL('../vendor/kimi-system.md', import.meta.url), 'utf8'); - 读取本地文件src/native.js:26
const config = parse(await readFile(join(settings.kimiHome, 'config.toml'), 'utf8')); - 读取本地文件src/engine.js:15
async function readJson(path) { try { return JSON.parse(await readFile(path, 'utf8')); } catch (e) { if (e.code === 'ENOENT') return undefined; throw - 写入本地文件src/engine.js:18
await writeFile(tmp, JSON.stringify(data) + '\n', { mode: 0o600, flag: 'wx' }); - 写入本地文件src/engine.js:19
await rename(tmp, path); - 发起网络请求src/engine.js:69
const result = await this.ctx.approval.request({ agent: exec.agent, callId: exec.callId, - 写入本地文件src/engine.js:130
await mkdir(this.directory, { recursive: true, mode: 0o700 }); - 读取本地文件vendor/kimi-provider.mjs:816
if (!fs.existsSync(input)) { - 写入本地文件vendor/kimi-oauth.mjs:97
mkdirSync(this.dir, { recursive: true, mode: 448 }); - 写入本地文件vendor/kimi-oauth.mjs:99
chmodSync(this.dir, 448); - 读取本地文件vendor/kimi-oauth.mjs:114
raw = readFileSync(file, "utf-8"); - 写入本地文件vendor/kimi-oauth.mjs:144
chmodSync(tmp, 384); - 写入本地文件vendor/kimi-oauth.mjs:145
renameSync(tmp, target); - 删除本地文件vendor/kimi-oauth.mjs:148
unlinkSync(tmp); - 删除本地文件vendor/kimi-oauth.mjs:156
unlinkSync(this.pathFor(name)); - 读取本地文件vendor/kimi-oauth.mjs:166
entries = readdirSync(this.dir); - 发起网络请求vendor/kimi-oauth.mjs:263
response = await fetch(url, { - 写入本地文件vendor/kimi-oauth.mjs:537
await mkdir(dirname(target), { recursive: true }); - 写入本地文件vendor/kimi-oauth.mjs:538
await writeFile(target, "", { flag: "a" }); - 读取本地文件vendor/kimi-oauth.mjs:739
if (!existsSync(deviceIdPath)) return null; - 读取本地文件vendor/kimi-oauth.mjs:741
const text = readFileSync2(deviceIdPath, "utf-8").trim(); - 读取本地文件vendor/kimi-oauth.mjs:828
const plist = readFileSync2(MACOS_SYSTEM_VERSION_PLIST, "utf-8"); - 发起网络请求vendor/kimi-oauth.mjs:1035
const res = await fetch(url, { - 读取本地文件vendor/kimi-oauth.mjs:1590
raw = readFileSync3(join3(homeDir, KIMI_REGION_MARKER_FILENAME), "utf-8"); - 发起网络请求vendor/kimi-oauth.mjs:1734
const res = await fetch(url, { - 发起网络请求vendor/kimi-oauth.mjs:1784
const res = await fetch(url, { - 发起网络请求vendor/kimi-oauth.mjs:1838
const res = await fetch(url, { - 发起网络请求vendor/kimi-oauth.mjs:1915
const res = await fetch(url, { - 读取本地文件src/kimi.js:10
const document = parse(await readFile(join(settings.kimiHome, 'config.toml'), 'utf8')); - 读取本地文件src/kimi.js:81
if (!(await stat(this.cwd)).isDirectory()) throw new Error('Working directory is not a directory'); - 发起网络请求src/kimi.js:99
const info = await this.request(methods.agent.initialize, { protocolVersion: PROTOCOL_VERSION, clientCapabilities: {} }); - 发起网络请求src/kimi.js:105
const loaded = await this.request(methods.agent.session.load, { ...parameters, sessionId: resumeId }); - 发起网络请求src/kimi.js:109
const created = await this.request(methods.agent.session.new, parameters); - 发起网络请求src/kimi.js:121
return await Promise.race([this.agent.request(method, params), new Promise((_, reject) => { - 发起网络请求src/kimi.js:136
this.active = this.agent.request(methods.agent.session.prompt, { sessionId: this.sessionId, prompt: [{ type: 'text', text }] })
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成DSH Harness Switch
在 DSH 原生会话中选择模型与 harness。v0.3 把开源 Kimi Code 的实际执行核心嵌入插件:提示词、工具定义与执行、Skills、权限规则、MCP 和上下文压缩都由 Kimi 核心提供,不启动 Kimi CLI 聊天子进程。
当前版本与 npm 分发
0.3.3 已以 npm 包名 dsh-harness-switch 公开发布,包含 0.3.2 的 profile 内不可变安装包修复,以及 DSH 0.2 RPC / tool-result 兼容修复。原本机包名是 @local/dsh-harness-switch。
从 npm 安装
dsh plugin --profile desktop add dsh-harness-switch@0.3.3
从旧 @local/dsh-harness-switch 迁移时,请先备份 profile,完全退出 DSH,并移除旧包后再安装新包,避免两个包重复注册相同功能。不要删除 $DSH_HOME/storages/harness-switch 或 Kimi home;设置和会话仍使用原存储位置。这个包名迁移本身尚未进行真实桌面端到端验证,既有本机安装不需要立即迁移。
展开完整文档(README 剩余 1 节)
DSH Harness Switch 在 DSH 原生会话中选择模型与 harness。v0.3 把开源 Kimi Code 的实际执行核心嵌入插件:提示词、工具定义与执行、Skills、权限规则、MCP 和上下文压缩都由 Kimi 核心提供,不启动 Kimi CLI 聊天子进程。 当前版本与 npm 分发 0.3.3 已以 npm 包名 dsh-harness-switch 公开发布,包含 0.3.2 的 profile 内不可变安装包修复,以及 DSH 0.2 RPC / tool-result 兼容修复。原本机包名是 @local/dsh-harness-switch。 从 npm 安装 dsh plugin --profile desktop add dsh-harness-switch@0.3.3 从旧 @local/dsh-harness-switch 迁移时,请先备份 profile,完全退出 DSH,并移除旧包后再安装新包,避免两个包重复注册相同功能。不要删除 $DSH_HOME/storages/harness-switch 或 Kimi home;设置和会话仍使用原存储位置。这个包名迁移本身尚未进行真实桌面端到端验证,既有本机安装不需要立即迁移。 公开仓库添加 dsh-plugin topic 后可由 dshfind 收录;私有仓库无法被公开目录检索。npm 包和 GitHub 仓库分别发布。 使用 已验证 Windows、DSH Desktop 0.2.0-rc.2;最低 Node 24.15。桌面安装使用应用自带的 CLI 和 pnpm。 gh repo clone AlyceStocking/dsh-harness-switch cd dsh-harness-switch npm ci 查看将要修改的桌面 profile;此命令不执行安装。 npm run install:desktop 完全退出 Desktop 后安装或升级。 npm run install:desktop -- --apply v0.3.2 的安装脚本把 npm pack --ignore-scripts 的产物保存在当前 profile 的 packages/,文件名包含完整 SHA256。先完整写入临时文件,再通过原子硬链接发布最终文件并校验副本;文件系统须支持硬链接(Windows 默认 NTFS 支持)。它通过桌面自带 DSH CLI 安装 dsh-harness-switch@file:./packages/<文件名>.tgz,由 pnpm 更新依赖和锁文件;不直接改写锁文件。旧包和修改前配置保留在 profile 内,升级不覆盖旧包,不依赖源码目录链接或临时目录。不要删除被 package.json 或锁文件引用的包。通过市场安装其他插件也可能重新读取这些文件。 默认使用 %USERPROFILE%\.dsh(或 DSH_HOME)。自定义位置可运行 node scripts/install-profile.mjs --home <DSH_HOME> --desktop-dir <桌面安装目录> --profile desktop --apply。脚本保留现有构建策略;若 pnpm 要求审批依赖构建脚本,先核对具体依赖再配置,不要全局放开。 已有外部 file: 安装可用同一命令迁移,无需卸载插件。Windows 外部绝对路径曾出现文件存在但 pnpm 报 ENOENT;隔离安装并未稳定复现,不能断言绝对路径语法有错。profile 内的不可变包用于保证安装来源的生命周期,不代表已证明修复 pnpm 的底层文件读取问题。 重启 DSH,进入设置 →「模型 Harness」: 1. 确认 Kimi 配置目录,点击「读取已配置模型」。复用 config.toml 的端点、模型与 API key / 环境变量 / 文件 OAuth;凭据不复制进插件配置或前端。 2. 为 kimi-code/k3 等模型别名选择 Kimi Code · embedded core,保存。 3. 在原生模型选择器的 Kimi · Harness Switch 中选择该绑定,选择工作区后正常聊天。旧版配置不会被静默迁移,需要手动改选 embedded core。 4. 当前生成结束或停止后,可以在同一原生 session 选择已有 DeepSeek 模型,恢复其 DSH 提示词与工具。再切回 Kimi 时,新增的其他模型历史会作为参考历史导入 Kimi。 每个模型绑定可选择: | Harness | 行为 | | Kimi Code · embedded core | 完整嵌入式 Kimi 执行核心,默认选项 | | Kimi prompt · legacy | v0.2 的适配提示词,工具、Skills、压缩使用 DSH | | DSH native | Kimi API + DSH 原生提示词、工具与执行循环 | 比较相同模型的不同 harness 时,添加两个绑定并选择相同模型别名即可。尚未实现其他厂商 harness。 原生会话与权限 DSH session 列表、输入框和最终回答保持原生。一次 Kimi 执行显示为 kimi_harness_turn 工具卡片,卡片内部展示 Kimi 工具调用/结果、思考、Skill 与压缩事件。真实工具只在 Kimi 内执行一次。DSH 的外层模型适配器仅编排这个本地入口,不再调用模型执行第二遍。 Kimi 核心采用 manual 权限模式。需要审批的动作、工作区信任和提问映射到 DSH 原生审批/问题界面;拒绝、取消或不可用均不自动放行。DSH 需要配置可用的审批 UI 与允许询问的策略(policy: ask);never 策略会拒绝需要审批的动作。本插件不修改全局审批设置。Kimi 判断无需审批的读取等动作保持上游行为,DSH 的逐工具 allowlist 不会另外检查 Kimi 内部工具。 可直接在输入框发送: - /kimi-skill <名称> [任务]:通过上游 SDK 显式激活 Skill。普通消息也能由模型使用 Skill 工具。 - /kimi-compact [保留内容要求]:调用 Kimi 自身压缩。自动压缩也由 Kimi 核心管理。DSH 外层传输模型不声明上下文预算,避免对它进行第二次模型上下文压缩。 项目 Skills 的发现根目录与上游一致,通常是 Git 项目根目录;用户 Skills 沿用 Kimi home。这里的命令是插件桥接命令,不代表实现了 Kimi CLI 的所有交互命令。 一致性与边界 固定复用 Kimi Code 源码 的 Node SDK、agent core、kosong provider、工具、Skills、MCP、权限与压缩模块。构建产物、来源和 MIT 许可保留在 vendor/。唯一功能性源码补丁将 query-index 缓存隔离到 Kimi home 下 cache/dsh-harness-switch,避免与 CLI 的独占数据库锁冲突。构建解析器另外处理工作区模块、原始提示词资源与 ESM 导入。 同一核心版本和配置能最大程度保持调用行为一致,但不承诺两端请求逐字节相同:宿主身份、工作区/时间、会话状态、UI 能力和跨模型导入的历史会不同。完整系统提示词由上游核心生成;不再用 legacy 模板代替。 当前限制: - v0.3.1 的 embedded core 支持文字、单图和多图混合输入:读取 DSH 已验证的附件,通过 Kimi SDK 原生 image_url 内容块提交。模型配置须包含 capabilities = ["image_in", "thinking"](可保留其他能力);插件据此在 DSH 声明图片输入。DSH 上传阶段仍有自身的图片格式、尺寸和字节限制,不能承诺与 CLI 输入字节完全相同。legacy 和 DSH native 适配路径仍仅支持文字。 - 切回 Kimi 时,尚未见过的其他模型会话图片会连同参考历史作为视觉内容导入;不会把 base64 当普通文字。视频、Kimi CLI 专属面板、终端快捷键、所有 slash 命令没有移植。内部工具保持上游定义,但仍受宿主平台、依赖和 UI capability 限制。 - 原始 Kimi 日志、上下文、压缩和执行状态留在 Kimi home;DSH 存储可显示的执行投影和最终回答,不能将 DSH 工具事件无损转换成另一 harness 的内部状态。跨模型历史作为参考导入,并移除其他模型的思考字段。 - 插件映射与卡片快照位于设置文件旁的 engine/。同时保留 DSH 存储、该目录和 Kimi home 才能完整恢复。中断且结果未落盘的请求不会自动重跑;请发送新消息继续。 - 更改同一 session 的 Kimi home、工作区或固定核心版本会拒绝复用旧状态,需新建 session。不要同时用 CLI 操作插件正在使用的同一个 Kimi session。多个 DSH 进程共享同一 Kimi home 的嵌入缓存尚不支持。 - Kimi 原生 token 用量/预算尚未映射到 DSH 外层统计;原始记录在 Kimi 会话中。后台任务生命周期、MCP 服务和全部平台工具尚未逐项端到端验证。 - 这是插件执行桥接,不是操作系统沙箱。嵌入模式使用 Kimi 的策略;DSH 全局系统提示词扩展不自动注入 Kimi 核心。 设置文件默认位于 $DSH_HOME/storages/harness-switch/<DSH_PROFILE 或 default>.json。多 profile 时可在插件配置中指定独立绝对路径 settingsFile。 独立 API 配置 无需安装 CLI,但需要有效 Kimi 配置及授权。例如: [providers.kimi] type = "kimi" base_url = "https://api.kimi.com/coding/v1" api_key_env = "KIMI_API_KEY" [models."kimi-code/k3"] provider = "kimi" model = "k3" max_context_size = 262144 capabilities = ["image_in", "thinking"] 模型 ID、端点和上下文上限以账户权限及 Kimi 配置文档 为准。启动 DSH 的进程须能读取环境变量。 验证与构建 npm ci npm test npm run check 以下是显式运行的真实 API 测试,会消耗账户额度。 $env:DSH_MODULES = '你的 DSH 安装目录/node_modules' node tests/engine-smoke.mjs 生成测试色块图片,验证图片输入、后续追问和跨模型图片导入 node tests/image-smoke.mjs legacy 提示词与 DSH 原生工具路径 node tests/native-smoke.mjs 自动测试覆盖图片字节/顺序转换、附件读取失败、图片能力声明、视觉历史导入,以及审批拒绝、停止/卸载无事件死等、去重、恢复、外部工具历史导入、异常不泄露认证数据、Skill/压缩 API 路由和设置/工具卡片渲染。 真实 API 集成测试已验证 K3 的 Kimi Read、经过 DSH 审批的 Bash、项目 Skill 激活、压缩,以及在同一 DSH agent/session 中切换回原生适配器再返回 Kimi。测试中的原生模型是本地替身,未调用真实 DeepSeek API。v0.3 设置界面已在隔离 DSH Web 配置中验证保存 embedded core;v0.3 新工具卡片已做 React/jsdom 测试。0.3.2 的 Windows Desktop 设置界面、模型选择器以及安装、重启、升级后的市场安装链已有验证;后台任务、MCP 与全部平台工具仍未逐项端到端验收。 源码重新打包需使用上述固定 commit: node scripts/vendor-kimi.mjs ../kimi-code node scripts/vendor-engine.mjs ../kimi-code SDK 尚未作为稳定公共 npm 包提供,因此提交固定构建产物。更新版本需重新核对工具/状态兼容性;不要只替换提示词。旧 ACP 原型保留在 src/acp-prototype.js,正式插件不启动它。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
AlyceStocking/dsh-harness-switch
在原生会话中切换模型与执行内核
相关插件 · 工具 / 效率
破甲管控台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,349已汉化DSH
71.6
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
这是你的仓库?认领条目