dsh-oncall

DSH PLUGIN模型与账号接入

仓库 Imzl-zl/dsh-oncall · npm dsh-oncall

模型与账号接入 L4 · 沙盒安装通过 安全审查:低风险 可信度:银 可安装插件
安装这个插件

为 DeepSeek Harness 提供跨提供商故障转移路由:按会话绑定降级链,模型失败时自动切到下一候选并报告原因。

一句话选型结论

按资料字段整理

dsh-oncall 是模型与账号接入类的 DSH 可安装插件,验证等级 L4 · 沙盒安装通过,安全审查为低风险,列出 5 项功能,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类模型与账号接入 收录类型可安装插件 验证等级L4 · 沙盒安装通过 安全审查低风险
验证等级 L4 L4 · 沙盒安装通过
GitHub 星标 1 复刻 0 · 未关闭 issue 未标注
最近更新 2026-11-12 创建于 2026-10-13
README 13.5 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:Imzl-zl/dsh-oncall#v0.5.0
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名dsh-oncall可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-oncall:为 DeepSeek Harness 提供跨供应商故障转移的 DSH plugin

  • 按会话绑定命名降级链
  • 失败码触发自动切换
  • 每路由重试次数覆盖
  • 渠道健康与熔断工作台
  • GitHub issue 值班入口

适用场景

智能体编排

上游标签

cordisdeepseek-harnessdsh-pluginfailoverllm-routingtypescript

验证等级与安全审查

L4 · 沙盒安装通过
自动化流程结论,不是人工审核
验证等级L4 · 沙盒安装通过安装命令在隔离沙盒内真实执行成功,无依赖错误
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度银综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-10-18): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
L5 · 运行已测 ? 未知
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 方式:Web 启动
  • L5.3_HTTP_SERVED HTTP 服务响应 方式:HTTP 请求
  • L5.4_PLUGIN_INVENTORY_ACTIVE 插件清单中已激活 方式:插件清单查询

风险详情

  • 结论说明 静态扫描 低;动态审计无结论(以下以静态为准)→ 总评级 低。
  • 风险计数 严重 0 / 高 0

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L4:在沙盒里真实装过,依赖能装上,不是纸面声明。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。
  • 列出了 5 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在模型与账号接入场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-oncall当前 L4 · 沙盒安装通过 低风险 1 未标注 有
archify L4 · 沙盒安装通过 低风险 8.0 万 未标注 有
DeepSeek-Reasonix L4 · 沙盒安装通过 低风险 3.6 万 未标注 有
nocobase L3 · 安装规范通过 低风险 2.5 万 0.1.1-rc.2 无
voyager L3 · 安装规范通过 低风险 2.1 万 未标注 无
learn-harness-engineering L4 · 沙盒安装通过 低风险 2.0 万 未标注 有

仓库档案

模型与账号接入
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方Imzl-zl仓库 dsh-oncall · 默认分支 未标注
分类模型与账号接入ai
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言TypeScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue1 / 0 / 未标注收录时的数值,非实时
创建 / 更新2026-10-13 · 2026-11-12最后推送 未标注
本站收录2026-11-11首次进入本站目录的时间

README 全文

13.5 KB
作者原文,中文版优先;只做安全转义,不改内容

简体中文 | English


在 DSH 里照常选模型。它失败时,请求会沿着这个会话所绑定的链切到下一个物理渠道;对话里会说明失败码、最终应答的候选,以及这次切换为什么被允许。

功能

  • 按会话选命名链 —— 多条降级链,各自有候选、失败切换规则和预算;直接在 composer 的 chip 里选,不另设会话管理页。
  • 每路由重试次数覆盖 —— 会话可以覆盖某条路由的重试次数:0 = 这条路由不重试,空 = 跟随链。
  • 重试由插件执行 —— switchOn 勾选的失败码,填几次就是几次(不受 provider 重试策略封顶);没勾的仍交给 DSH 的 llm-retry。
  • 立即切换白名单 —— 密钥失效、额度用尽、请求被拒这类"重试注定一样"的失败,不占重试次数、直接切下一条候选;其余失败仍按次数重试。默认名单就是这三个,可在「重试与轮次」里增删。
  • 发起前预校验 —— 每个候选在真实调用前走 ctx.llm.resolveCallConfig(),不能服务的候选直接跳过,不白烧一次调用。
  • 条件路由 —— 按候选的 images / minContextTokens 条件,以及按失败码的 switchOn。
  • 渠道健康工作台 —— 零 Token 的被动延迟与吞吐、按需的 1-token 探测、按路由/按渠道的熔断,以及从 durable 会话日志折叠出的转移历史。
  • 中英双语界面 —— 带未保存修改提示条。
  • 入口(值班) —— 盯一个 GitHub 仓库的 issue,把被授权的要求变成 Case,交给一个 worker 会话去干,干完把结果回在 issue 里;同一个 issue 的追问进同一个会话,重启后接着上一刀继续。令牌走环境变量 GITHUB_TOKEN,不落配置。默认关。

截图

链与每路由重试次数,在 composer 的 chip 里改。
第一跳死掉后切到下一个候选,对话里会报告。
命名链,各自有候选、失败切换规则和预算。
更新到新版本后,工作台弹一次这一版改了什么。

截图来自隔离实例 + 真实网关;死路由是故意配的。

安装

需要 DSH 0.2.1-rc.3。

dsh plugin add dsh-oncall

从源码安装(包名是 dsh-oncall):

git clone https://github.com/Imzl-zl/dsh-oncall.git
cd dsh-oncall
npm install
npm run bundle --prefix packages/dsh-oncall
dsh plugin --profile web add packages/dsh-oncall

打开侧栏面板列表里的 值班台 配置链。

更新

更新由 DSH 的插件市场(dshmarket)原生处理:在「插件」页打开已安装列表,它会按 npm 上的版本检查并提供 一键更新;有更新时每行还带 更新了什么,内容来自本仓库 GitHub Release 的 notes(即 CHANGELOG.md 的对应小节)。插件不自己启动包管理器,也不复制安装算法。

  • 更新后:新版本第一次打开工作台会弹一次该版本的更新日志;之后点页头的「检查更新」再看(已是最新版时会显示当前版本的说明,离线也能看)。
  • 手动更新(CLI):dsh plugin --profile remove dsh-oncall,再 dsh plugin --profile add dsh-oncall@latest。
  • 桌面版:在应用自己的「设置 → 插件」里更新,不要直接改它管理的 profile。
  • 版本记录:CHANGELOG.md。

配置

policyVersion: 2                 # 失败策略版本;插件自己维护,别手改
enabled: true
defaultChainId: default          # 没有单独选链的会话走这条
chains:
- id: default                  # 稳定 id:会话按它绑定
name: ""                     # 留空 = 界面显示「默认链」
candidates:                  # 降级候选;用户当前选中的模型是隐式第一跳
- { provider: deepseek-official, model: deepseek-v4-flash, maxRetries: 1, needs: { images: false } }
- { provider: pi-ai-gpt, model: gpt-5, maxRetries: 0, needs: { images: true } }
switchOn: { rateLimit: true, server: true, timeout: true, transport: true, emptyResponse: true, invalidRequest: true, auth: true, quota: true, other: true }
immediateSwitch: [auth, quota, invalidRequest]   # 这些码不重试、直接切(键名同上)
firstHopMaxRetries: 0        # 第一跳首发之后还能重试几次(0 = 失败即降级)
stickyTurns: 0               # 带图轮之后,继续按识图路由的无图轮数
strategy: order
- id: coding
name: 写代码
candidates: [...]

policyVersion 缺失的配置会被当成旧版本读一次:emptyResponse/invalidRequest 的 false 与重试次数的 0 是当时的默认值而不是你的选择,会按新默认改写;保存后带标记落盘,之后你的选择(包括刻意填的 0)不再被覆盖。一条降级候选都没有时插件整个不接管——第一跳的重试次数也不生效,由 DSH 自己的重试策略决定。

第一跳永远是你在 DSH 里选中的模型,不在配置里——链只回答「失败之后去哪」。旧的单 chain 配置(以及 2026-10-19 那版的 per-model profiles)在读取时迁成一条命名链,第一次保存写新形状。

入口(值班)

默认关。开启后,插件按 pollSeconds 轮询一个仓库,把被授权的消息变成 Case:

ingress:
enabled: true
repository: owner/name          # 只盯一个仓库
agentLogin: my-bot              # agent 自己的 GitHub 登录名
allowed: [alice, bob]          # 可以派活的人(GitHub 登录名)
bots: [ci-bot]                 # 可以产生候选的机器人
acceptMode: observe             # off / observe / auto;auto 才真干
pollSeconds: 60
baseUrl: ''                     # 空 = api.github.com;企业版或测试填别的根地址
workdir: ''                     # 空 = DSH 进程自己的工作目录;agent 在哪份代码上干活

令牌只从环境变量读:GITHUB_TOKEN,不存配置——配置会落进 profile 的 cordis.patch.yml,也会出现在每次打印配置的日志里。

判定规则:人在 issue 里 @ agentLogin、或 issue 指派给 agentLogin,才算候选;陌生人的不点名消息直接拒;observe 只记下本来会做什么。游标回看一分钟,靠 case: 幂等,同一事件重读不会开第二个 Case。

auto 下事情是这样走的:

  1. 开 Case,起一个 worker 会话(会话 id 由 Case 推导,所以重启后还是那一个会话),把 issue 原文投进去。
  2. 同一 issue 的追问进同一个会话,不再开第二个 Case;被停掉的 Case 不复活,新人 @ 一次就是新的 Case。
  3. worker 用 oncall_report 说话:ready 收工并回一条评论、blocked 问一个问题、failed 说做不到、progress 只更新进度、dropped 放弃。没调用它就结束回合,算"还没做完",不冒充完成。
  4. 评论只发一次:一条回执一个 caseId#seq,写进账本再发;重启只补没发出去的,issue 被删(404/410)就不再试。
  5. 翻车分两层:一次请求内换渠道由路由层负责(见上);整条链都没接住且是瞬态失败时,入口层隔 30/60 秒再派一次,最多两次,然后回一条"卡住了"。auth/quota 这类重试注定同一个答案的失败不排队。
  6. 重启知道断在哪:上一刀没交报告的派工会被顶掉,新派工带一句"宿主重启过,先看现状、别重复已完成的外部动作"。

工作原理

插件接管 Agent 循环的两个缝:

  • agent/request(prepend: true)为每次尝试选物理路由。它在 installModelSelection 之外运行,所以用户选的模型永远先试,没有失败就不会切换。
  • agent/request-error(prepend: true,最外层)先看到每次失败:switchOn 里的码,插件自己等一会儿重试,再往前推进;其它码交给 DSH,llm-retry 保留自己的次数与上限。

每次切换都从 durable 会话日志折叠进 oncall/failover-history 投影,在转移历史抽屉里展示。

项目结构

路径 是什么
packages/dsh-oncall/src/ 插件:Host 半包(index.ts、router.ts、bindings.ts、chain.ts…)与浏览器半包(src/client/)。
packages/dsh-oncall/tests/ 13 套:layers(分层守卫)、ingress、github-issue、pass、github-http、ingress-loop(账本与循环)、executor(派工生命周期,假 TurnHost)、unit、client-controller、remote(进程内生产组合)、handoff-relay(真实 web 组合的接力)、oncall-loop(真实 web 组合的入口闭环,本地假 GitHub)、run(真 headless Loader 组合,逐场景)。
docs/design/ 当前设计:路由提案、源码地图、能力边界、按会话选链、发布说明策略。
.agents/notes/ 决策笔记(为什么、否掉了什么、代价是什么)。状态就是目录。
spike/ Phase 1 实证产物,原样保留;不属于包。

开发

npm install                                                  # 根目录:DSH CLI 与 peer
npm ci --prefix packages/dsh-oncall --legacy-peer-deps # 包内:tsc、tsdown、typert 生成器
npm run bundle --prefix packages/dsh-oncall           # 构建 lib/(host + client + typert)
npm test                                                     # 四套件

单独跑某一套(组合套可带场景名):

node packages/dsh-oncall/tests/unit.mjs
node packages/dsh-oncall/tests/client-controller.mjs
node packages/dsh-oncall/tests/remote.mjs
node packages/dsh-oncall/tests/run.mjs [scenario]

lib/ 不进 git(在 files 里,npm 会发);改源码后必须先 npm run bundle,浏览器与 Loader 才看得到,组合测试故意加载构建产物。

发布

npm version minor --prefix packages/dsh-oncall   # 0.2.0 → 0.3.0,先不打 tag
# 把 CHANGELOG 的 Unreleased 内容挪到新版本标题下
git add -A && git commit -m "chore(release): 0.3.0"
git tag -a v0.3.0 -m "dsh-oncall 0.3.0" && git push origin master v0.3.0

推 tag 就是发布:

  • .github/workflows/release.yml 校验 tag 与包版本一致、构建 lib/、带 provenance(--provenance,public access)发 npm,并按 CHANGELOG 对应小节建 GitHub Release(scripts/release-notes.mjs)。
  • 认证是 npm trusted publishing(OIDC):npm 包设置里绑定了这个仓库与 workflow,CI 用短期 OIDC token 换发布权限并签名。没有 secret、没有 token 可轮换;npm 账号的 publishing access 设为「必须 2FA、禁止 bypass token」。
  • .github/workflows/ci.yml 在每次 push master 与 PR 跑:构建、host 类型检查、四套件。

版本策略按 CHANGELOG:1.0.0 之前 minor 位是交付里程碑,插件对 DSH 的 peer 范围随之移动。

包名是 dsh-oncall:npm 上的 dsh-oncall 属于别人,所以安装命令、徽章、bundle patch 都用复数名。

限制

  • 只管 Agent 主请求。 压缩与会话标题调用仍走 DSH 自己的配置,不路由。
  • 工具能力不预检。 DSH 没有机器可读的「支持 function calling」元数据;不兼容的候选会在运行时失败,由 switchOn.invalidRequest 处理。
  • 通知是轨迹优先。 切换通知走 durable 日志进「轨迹」;当前 DSH 版本不会在对话里单独渲染上下文行(对话里看到的是模型转述)。
  • fork 不继承会话绑定。 新会话是新 sessionId,绑定按 sessionId 键控,所以 fork 出来回到默认链。
  • 多个 DSH 进程同写一个 home 时,绑定是整文件重写(后写覆盖先写);单进程多会话不受影响。

友情链接

LINUX DO

文档

设计理由、源码核实的能力边界与决策记录在 docs/design/;发布历史见 CHANGELOG.md。

许可证

MIT

常见问题

7 问
答案由本站依据条目字段整理,不引用上游原文
dsh-oncall 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:Imzl-zl/dsh-oncall#v0.5.0` 即可。对应的 npm 包名是 `dsh-oncall`。

dsh-oncall 的验证等级是什么意思?

L4 · 沙盒安装通过。安装命令在隔离沙盒内真实执行成功,无依赖错误

dsh-oncall 安全吗?

低风险。静态扫描 低;动态审计无结论(以下以静态为准)→ 总评级 低。

dsh-oncall 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-oncall 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-oncall 有哪些功能?

按会话绑定命名降级链、失败码触发自动切换、每路由重试次数覆盖、渠道健康与熔断工作台、GitHub issue 值班入口。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

模型与账号接入
按星标排序,可作替代方案

archify

archify

从仓库或系统描述生成经过校验的自包含交互式架构图、流程图、时序图、数据流图和生命周期图。

L4 · 沙盒安装通过 8.0 万 星

nocobase

nocobase

L3 · 安装规范通过 2.5 万 星

voyager

voyager

Enhancement suite for Gemini, AI Studio, Claude, ChatGPT & DeepSeek —

L3 · 安装规范通过 2.1 万 星

dsh-our-free-model

dsh-our-free-model

为 DeepSeek Harness 挂载免登录、免 API Key 的免费前沿模型通道,装完即用,并附用量看板与 OpenAI 兼容本地转

未标注验证等级 8,064 星

Imzl-zl 的其它插件

5 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-10-18。