switchman 家族,同一作者、同一套调度理念:opencode-switchmanOpenCode 原版·…
33.5/100
综合分
5
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/mrzturn/dsh-switchman.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装engines.node 要求 >=24,不满足 Node 22.19.0
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-switchman @ 1.8.1
✗Node 引擎要求 >=24 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 08:44:00
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 37 处,展示前 37 条)
- 读取本地文件index.js:153
const parsed = parseSkillFile(readFileSync(path, "utf8"), path); - 读取本地文件index.js:171
entries = readdirSync(root, { withFileTypes: true }); - 读取本地文件index.js:201
return { ...summary, content: parseSkillFile(readFileSync(locator, "utf8"), locator).content }; - 发起网络请求client.js:146
const response = await fetch(`${API_BASE}${resource}`, { - 读取本地文件host/lang.js:98
raw = readFileSync(join(cwd, PROJECT_DIR, PROJECT_FILE), "utf8"); - 写入本地文件host/lang.js:122
mkdirSync(directory, { recursive: true }); - 写入本地文件host/lang.js:123
writeFileSync( - 写入本地文件host/context-watch.js:526
mkdirSync(dirname(path), { recursive: true }); - 写入本地文件host/context-watch.js:527
writeFileSync( - 写入本地文件host/context-watch.js:577
appendFileSync( - 写入本地文件host/context-watch.js:821
appendFileSync( - 写入本地文件host/context-trim/index.js:220
mkdirSync(dir, { recursive: true }); - 写入本地文件host/context-trim/index.js:222
if ((statSync(logPath, { throwIfNoEntry: false })?.size ?? 0) > 2_000_000) renameSync(logPath, `${logPath}.1`); - 读取本地文件host/context-trim/index.js:222
if ((statSync(logPath, { throwIfNoEntry: false })?.size ?? 0) > 2_000_000) renameSync(logPath, `${logPath}.1`); - 写入本地文件host/context-trim/index.js:223
appendFileSync(logPath, `${new Date().toISOString()} ${entry}\n`); - 读取本地文件host/context-trim/index.js:240
const mtime = statSync(join(store.stateDir, "fork-links.json"), { throwIfNoEntry: false })?.mtimeMs ?? -1; - 读取本地文件host/vision.js:96
access(path, constants.F_OK) - 删除本地文件host/vision.js:117
const drop = (path) => rm(path, { force: true }).catch(() => {}); - 写入本地文件host/vision.js:143
await mkdir(dir, { recursive: true }); - 写入本地文件host/vision.js:144
await copyFile(src, dst); - 写入本地文件host/vision.js:162
await mkdir(dir, { recursive: true }); - 写入本地文件host/vision.js:187
await copyFile(src, raw); - 发起网络请求host/intent.js:606
const response = await fetch(endpoint, { - 读取本地文件host/lib/rank.js:167
const raw = readFileSync(new URL("../data/capability-default.json", import.meta.url), "utf8"); - 读取本地文件host/subagents.js:60
const parsed = JSON.parse(readFileSync(path, "utf8")); - 读取本地文件host/context-trim/fork.js:82
if (!existsSync(file)) return { version: FORK_LINKS_VERSION, links: {} }; - 读取本地文件host/context-trim/fork.js:83
const parsed = JSON.parse(readFileSync(file, "utf8")); - 写入本地文件host/context-trim/fork.js:119
mkdirSync(dir, { recursive: true }); - 写入本地文件host/context-trim/fork.js:122
writeFileSync(tmp, JSON.stringify({ version: FORK_LINKS_VERSION, links })); - 写入本地文件host/context-trim/fork.js:123
renameSync(tmp, file); - 读取本地文件host/context-trim/state.js:100
if (existsSync(file)) { - 读取本地文件host/context-trim/state.js:101
const parsed = JSON.parse(readFileSync(file, "utf8")); - 写入本地文件host/context-trim/state.js:118
renameSync(file, `${file}.corrupt`); - 写入本地文件host/context-trim/state.js:128
renameSync(file, `${file}.corrupt`); - 写入本地文件host/context-trim/state.js:140
mkdirSync(stateDir, { recursive: true }); - 写入本地文件host/context-trim/state.js:143
writeFileSync(tmp, JSON.stringify(ledger)); - 写入本地文件host/context-trim/state.js:144
renameSync(tmp, file);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-switchman
switchman 家族,同一作者、同一套调度理念:opencode-switchman(OpenCode 原版)· zcode-switchman(ZCode 移植)· dsh-switchman(本仓库,DeepSeek Harness 版)。
dsh-switchman — 上下文水位驱动扳道岔,把任务丢进对的车道
上下文装上水表,任务自己找车道。
为什么需要它
用 DSH 干活久了有两件烦心事:一是会话越聊越重,上下文被历史撑到几十万 token,模型开始忘事、变慢、变贵,手动 /compact 又丢细节;二是主力模型什么都自己干,查个文件、跑个测试、对个数据都是它在啃,大半活其实该交给便宜模型。
dsh-switchman 是一个 DeepSeek Harness(DSH)插件。装上之后,主模型从「亲自干活」变成调度员:量水位、选车道、派任务、盯验收。它不是新模型,是一套挂在 DSH 上的调度规程加一个配置界面,一共做八件事:
1. 上下文水位:长会话不撑爆。 每轮实时统计会话 token,三条水位线逐级加码:80k(soft,可调)提醒「该委派了」;120k(hard)收紧单次读取预算、引导收尾;150k(force)自动交接——fork 一份会话留底、压缩上下文、唤醒续跑,任务不断线。
展开完整文档(README 剩余 1 节)
dsh-switchman switchman 家族,同一作者、同一套调度理念:opencode-switchman(OpenCode 原版)· zcode-switchman(ZCode 移植)· dsh-switchman(本仓库,DeepSeek Harness 版)。 dsh-switchman — 上下文水位驱动扳道岔,把任务丢进对的车道 上下文装上水表,任务自己找车道。 为什么需要它 用 DSH 干活久了有两件烦心事:一是会话越聊越重,上下文被历史撑到几十万 token,模型开始忘事、变慢、变贵,手动 /compact 又丢细节;二是主力模型什么都自己干,查个文件、跑个测试、对个数据都是它在啃,大半活其实该交给便宜模型。 dsh-switchman 是一个 DeepSeek Harness(DSH)插件。装上之后,主模型从「亲自干活」变成调度员:量水位、选车道、派任务、盯验收。它不是新模型,是一套挂在 DSH 上的调度规程加一个配置界面,一共做八件事: 1. 上下文水位:长会话不撑爆。 每轮实时统计会话 token,三条水位线逐级加码:80k(soft,可调)提醒「该委派了」;120k(hard)收紧单次读取预算、引导收尾;150k(force)自动交接——fork 一份会话留底、压缩上下文、唤醒续跑,任务不断线。交接那一刻还在跑的后台子智能体也不会丢:id、任务、报告路径都写进交接文档,续跑的会话知道去哪收报告,不会重复派活。每个子智能体自带独立硬顶,到顶写完 HANDOFF 摘要退场。自动干预不合手时可临时接管:/ctx-pause 停掉全部水位动作(测量照跑、尾部水位行转成 paused,只是不动手),/ctx-resume 随时恢复——重启 DSH 后干预也会自动回来,是临时放手,不是永久关闭;/ctx-handover 不等水位到顶,主动发起同一次交接:fork 备份、压缩上下文、唤醒续跑(会话先被引导到空闲边界,结果可能要等几分钟)。 2. 六个派发池:什么活配什么模型。 轻量池(批量小活)、机械池(模板化改写)、主力池(日常编码)、高难池(高难推理与大规模重构)、多模态池(看图)、复审池(独立验证)。设置页里勾候选、排优先级、标 S/A/B/C 档,还能给每条路线单独钉思考强度——档位下拉来自该模型真实支持的级别,不是通用三档。主模型每轮提示词里都带着一张 [SWITCHMAN:POOLS] 推荐表,照表派活。执行模式三态:关闭 / 建议 / 强制(强制 = 池外模型直接拒绝)。 3. Agent Teams 模式:从单干到带团队。 默认关闭,装完就是轻量的 subagent 派发。设置页两个独立开关: - 智能体团队模式——打开后注入团队规程(默认委派 + 分级验证 + 共享任务板纪律),并自动启用 DSH 的 Agent Teams:主模型可以拉常驻队友(spawn_teammate)、往共享任务板派活(team_task_)、和队友互发消息。什么时候建团队有明确纪律:可并行的独立子任务、量大且自包含、主上下文水位已高、需要角色分离;一次性的单点调查仍走 subagent。再关掉开关,团队条款零残留,也不会撤走正在运行的会话里的团队工具。 - 同步子智能体模型白名单——DSH 有张「允许 Agent 为子智能体选择模型」的授权白名单:池里选了但没授权的路线,点名派发会被拒(团队模式下会标 ⚠)。打开这个开关,六个池的并集整体写入那张白名单——switchman 做唯一事实源,不用两边重复配置。白名单按「新建会话」快照生效,同步只对之后新开的会话起作用。 会话头部有直观反馈:⚡「自主团队」徽标、◇ 当前会话实际模型;自动交接进行时出现「交接进行中 · 备份会话 / 压缩上下文 / 唤醒续接」的实时提示。 4. 语言偏好:问一次,记一辈子。 回复、代码注释、文档三种语言各一个下拉,作用域可选全局或按项目(.switchman/lang.json)。不设也行——首次用到时用你 DSH 界面的语言问一次,记住后每个会话自动遵守。 5. 界面语言:插件自己也说你的话。 设置页顶部的「界面」区里一个「界面语言」下拉(设置键 uiLocale):自动(默认,跟随 DeepSeek Harness 应用语言),或手动选任一内置界面语言——选项一律显示语言原名、不作翻译。它只切换本插件自己的界面(徽标、首页面板、设置页),不动 DSH 应用语言:选中即实时预览、无需重启,保存后记住、下次启动自动恢复,任何失败都回退到应用语言;词典全部内联在插件包里,无需下载。 6. 分级验证:改完必查。 超过 20 行的改动交 tester 验证;超过 300 行、或动了核心 / 安全 / 数据一致性逻辑,再交一个 reviewer 独立复审。复审模型锚定「写出这份 diff 的智能体」所用的模型来选,尽量避开;池里实在避不开时,会在结论里声明 DOWNGRADED。你说一句「不要用团队」,它立刻退回单干。 7. /vision:纯文本模型也能处理图。 主力模型读不了图时,DSH 会在入口直接拒掉带图消息。贴上图、输入 /vision 这张图错在哪,图片会被交给多模态池的模型去读,结论回到当前会话。输入框上方会提前提示「当前模型不支持读图」;直接发图被拒时,自动改写成 /vision 重发一次,不用手动重来;多模态池没配时命令会拒绝并给出配置指引。 8. 意图识别自动选模型:消息进来,模型自动落位。 设置页新增【意图识别】分组:主开关(默认关闭,开启需配置分类器并至少一个候选)、分类器小模型路由(provider + model + 可选 effort,TypeSafe Jev 类决策模型与通用对话模型都支持,输出宽容解析)、分类器类型三选(auto / decision / chat)、独立候选模型列表(每个候选 provider + model + 可选 effort + 一句能力描述)、缓存窗口秒数(默认 300,对齐厂商 prompt cache 约 5 分钟)、切换置信度阈值(默认 80)、分类超时(默认 60000ms)、历史消息条数(默认 6)与字符预算(默认 2400)、可选兜底模型。模型选择器出现「Auto · Switchman」分组下的「Auto」入口(客户端渲染为本地化的「自动(意图识别)」);选中后每条用户消息先由分类器判定最合适的候选,同一轮锁定决策:置信度不足或仍在缓存窗口内时优先沿用当前模型(缓存续用),置信度足够高或当前模型不在候选里才切换;切换在调用层静默完成,不往会话里插「模型已切换」。输入框上方有状态 chip(自动路由时显示当前路由模型与上次决策置信度),候选与阈值随时回设置页查看。 只有一个模型也值得装——水位控制和分级验证与模型数量无关,单模型长会话同样受益。 捆绑技能 - db-query——MySQL / Redis 只读核验:跑 SQL 对数、查缓存键 / TTL、跨库一致性检查,拒绝一切写入。首次使用需初始化(见下)。 - git-commit-message——生成规范的 commit 文案,只出文本,从不替你 git。 - requirement-docs——需求分析 / PRD / 设计文档的统一规范,产出归档到 docs/requirements-and-design/。 快速上手 1. 安装——任意会话里让 agent 执行,或在 Web 插件管理页: plugin_manager: install_bundle target=dsh-switchman 或从本地检出安装(link 方式;更新后需 remove_bundle + install_bundle 重装): plugin_manager: install_bundle target=/path/to/dsh-switchman 或在终端用 dsh 命令——按运行方式选对应的 profile: dsh plugin --profile web add dsh-switchman # Web GUI dsh plugin --profile desktop add dsh-switchman # 桌面应用 2. 重启 DSH——完全退出应用再打开(刷新页面不算),客户端模块表才能识别本 bundle。 3. 配置——设置 → dsh-switchman,或首页侧边栏的「Switchman 调度中心」。配置就一页,长这样,从上往下过一遍就配完了: dsh-switchman 配置页全貌:界面语言、语言偏好、六个派发池、能力排序与执行模式、团队开关、上下文水位与命令 - 界面——插件自己的界面语言。图中「自动」即跟随 DSH 应用语言;选具体语言则当场整页切换,保存后记住,随时切回「自动」。 - 语言——智能体产出物的语言。作用域图中为「全局(本 profile)」(也可按项目,各自读 .switchman/lang.json);回复 / 代码注释 / 文档三个下拉图中都定在简体中文,每项下方有「当前:…」状态行。全不设也行,首次用到问一次、记住即用。 - 派发池——六张卡片两行三列:上排轻量、机械、主力,下排高难、多模态、复审。卡片按供应商分组勾候选模型;勾上「手动序」变成编号优先列表,用 ↑ ↓ × 调顺序;每条路线可钉思考强度(默认「跟随泳道」)。顶部汇总行实时更新,图中即「已配置 4/6 池 · 排名 2 项 · 模式 建议」。 - 能力排序 + 执行模式——六池选中模型的并集按能力排序、最强在前(图中 glm-5.3 锚 S 档、glm-5.3-flash 锚 A 档),可调序、可删减;执行模式建议 / 强制(强制 = 池外模型直接拒绝)。 - 智能体团队——团队模式与白名单同步两个开关,默认全关;图中为开启状态,开关下方有同步状态行。 - 上下文水位——三档阈值(图中 80000 / 120000 / 150000)、单次读取预算(3000)、硬档行为(限流放行 / 拦截)、自动交接开关、子智能体独立上限,都在这区。底部一行命令:/ctx-pause 暂停干预 · /ctx-resume 恢复 · /ctx-handover 立即备份交接(它会把会话引导到空闲边界再压缩,结果可能要等几分钟)。 - 意图识别——主开关、分类器小模型路由、分类器类型(auto / decision / chat)、独立候选列表(每项附一句能力描述)、缓存窗口 / 置信度阈值 / 分类超时 / 历史消息预算、可选兜底模型。开启后模型选择器出现「自动(意图识别)」入口,输入框上方显示当前路由模型与置信度 chip。 4. 验证——会话头部出现 ⚡「自主团队」徽标(旁边 ◇ 显示当前会话模型);或者直接问模型「你系统提示词最后一段标题是什么」,答案应提到 dsh-switchman 规程。 db-query 首次使用初始化(脚本依赖装在技能目录内,不污染项目): bash <安装目录>/skills/db-query/scripts/setup.sh 分类器选型建议:若要本地部署决策模型,推荐用 Ollama 运行 tev1:4b-mxfp8:分类器类型选「决策端点(systemone)」,端点填 http://127.0.0.1:11434/v1/systemone,模型名填 tev1:4b-mxfp8。若走 LLM 目录的 chat 分类器,推荐云端小模型,或不带思考(推理)能力的本地小模型——关闭思考可同时压低延迟与分类超时失败率。 默认配置 以下为新安装后的全部默认值(权威来源:host/config.js 的 zod schema)。 界面与语言:uiLocale = auto(跟随 DSH 应用语言);langScope = global;langConversation/Comments/Docs = 空(首次对话问一次后记住;注释与文档语言跟随对话语言)。 派发池:六条泳道(economy/mechanical/main/hard/vision/review)候选均为空(= 用系统默认模型,不干预);手动排序与 effort 钉选均为关/空;dispatchEnforce = advice(建议不强制)。 上下文水位:soft 80000 / hard 120000 / force 150000 tokens;单次读取预算 3000;超预算行为 cap(截断加警告);wmAutoHandover = 开(force 档自动备份+压缩交接);子会话硬顶 = 开(共享 150k)。 Agent Teams:teamsMode = 关;syncWhitelist = 关(两者相互独立)。 意图识别(默认不可用,需配置分类器 + 至少一个候选 + 打开主开关):intentEnabled = 关(关闭时 Auto 入口隐藏,已选 Auto 的会话走兜底链);分类器路由未设置;分类器类型 chat;候选列表空(预置分类需填模型才参与路由);缓存窗口 300 秒 / 切换置信度 80 / 分类超时 60000 ms;历史 6 条 / 2400 字符;intentContextWindow = 200000。 开箱要点:① 意图识别开箱不可用是有意设计,三步开启(分类器、候选、开关);② Auto 有效窗口开箱即为 200000——护栏保证 0.8×窗口 ≥ force 档(150000),核心压缩线(160000)永远在平滑交接线(150000)之后;③ 开箱最有感的是水位三件套:80k 提醒委派 / 120k 收敛读取 / 150k 自动备份交接,无需任何设置。 工作原理 - Host 半(index.js + host/)注入字节恒定的系统提示词段(语言 / 泳道 / 水位协议 / 团队),实时水位行改走尾部 runtime-context 快照通道(只追加、不改写提示词头部,供应商提示词缓存不受影响)、读预算与 enforce 双闸、四个斜杠命令(ctx 三件套 + /vision)。设置保存后下一轮提示词装配即生效,无需重启。 - Client 半(client.js)渲染设置页、会话头部的 ⚡ 徽标与 ◇ 模型标识、交接进行中的动态提示;配置快照经 Host 路由家族读写。 - 首页侧边栏的「Switchman 调度中心」入口,单击即以中央面板打开同一配置页;原设置入口保留。 - cordis.patch.yml 完整保留出厂预设的插件列表,只在 persona suffix 上做扩展;Agent Teams 工具本体来自出厂 bundle,开启团队模式时自动启用。 维护注意 - DSH 升级后若出厂预设插件列表有变,从新的 presets/.patch.yml 重新同步 cordis.patch.yml(保留 doctrine suffix),然后重装。 - 协议行([SWITCHMAN:LANG|POOLS|WATERMARK|TEAMS])刻意保持英文且字节稳定——不要本地化。 - npm pack --dry-run 应保持审计过的 50 文件 / ~205 kB 形态(docs/ 截图不进包)。 - 零运行时依赖——硬性不变量。 宿主侧包(@deepseek-ai/schemastery、cordis 等)只允许声明为 peerDependencies,由运行中的 DSH 用它自己的副本满足。普通 dependencies 会被物理安装进 profile 工作区(<profile>/node_modules/…),从而对同处 profile 的其他插件遮蔽宿主副本——1.7.0 把 schemastery 声明为普通依赖时,正是这个机制让 dshmarket 插件市场崩溃(一个进程里出现两份 schemastery,市场产生的 schema 与宿主不再同类)。scripts/validate.mjs 会在 dependencies 再次出现时直接失败;因此安装、升级、卸载 dsh-switchman 都不会再影响 dshmarket 或任何其他社区包在运行时解析到的模块。 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
mrzturn/dsh-switchman
switchman 家族,同一作者、同一套调度理念:opencode-switchmanOpenCode 原版·…
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,269已汉化DSH
70.8
这是你的仓库?认领条目