自动续期失效凭据并重发请求,用户无感
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/11 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add YSwo-fei/dsh-api-heal该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 21 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 13 处,展示前 13 条)
- 读取本地文件lib/heal.js:53
text = readFileSync(file, "utf8"); - 发起网络请求lib/heal.js:86
const response = await fetch(url, { method, headers, body, signal: controller.signal }); - 读取本地文件loadtest.mjs:25
if (!existsSync(join(realMods, "node_modules", "@deepseek-ai", "dsh-tools"))) { - 删除本地文件递归loadtest.mjs:31
rmSync(stage, { recursive: true, force: true }); - 写入本地文件loadtest.mjs:32
mkdirSync(stage, { recursive: true }); - 删除本地文件递归loadtest.mjs:250
rmSync(stage, { recursive: true, force: true }); - 读取本地文件smoke.mjs:11
const index = readFileSync(new URL("./lib/index.js", import.meta.url), "utf8"); - 读取本地文件smoke.mjs:31
check("probeKey 先读 status 再点 probe", /probeKey/u.test(readFileSync(new URL("./lib/heal.js", import.meta.url), "utf8"))); - 读取本地文件smoke.mjs:33
const pkg = JSON.parse(readFileSync(new URL("./package.json", import.meta.url), "utf8")); - 读取本地文件smoke.mjs:38
const patch = readFileSync(new URL("./cordis.patch.yml", import.meta.url), "utf8"); - 读取本地文件stage_deps.mjs:16
const fd = readFileSync(ASAR); - 写入本地文件stage_deps.mjs:64
mkdirSync(dirname(destPath), { recursive: true }); - 写入本地文件stage_deps.mjs:65
writeFileSync(destPath, bytes);
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 自动续期失效凭据
- 定位失效凭据链
- 重发请求
展开完整介绍(145 字)↓
DeepSeek Harness 插件:界面报「API 密钥无效」时,自动定位并续期真正失效的那条凭据链(qoder / workbuddy-ai / our-free-model),然后重发请求。Self-healing credentials for DeepSeek Harness.
README
由 DeepSeek 最新模型翻译生成dsh-api-heal —— 「API 密钥无效」自修复插件
它解决什么
DSH 把上游任何 401 / 403 都归类成错误码 AUTH,然后 UI 用 i18n 键 message.failure.auth 把它替换成一句固定的中文 「API 密钥无效」 (见 dsh-llm-pi-ai/lib/index.js 的 classifyPiAiError)。
于是真正的原因(token 过期 / 会话失效 / 需要重新探测目录)全部被吞掉。
这个插件做两件事:
1. 自动自愈:监听 agent/request-error,只要失败看着像认证问题,就就地去对应的 provider 重新续期 / 重取凭据,然后返回 { kind: "retry" } 让 agent loop 原地重发同一个请求 —— 用户看不到报错。
2. 手动工具 heal_api:模型(也就是我)可以主动调用它来修,参数可选 provider(qoder / workbuddy-ai / our-free-model),不给就三家全修。
另外开一条只读状态路由 GET /plugins/dsh-api-heal/status。
展开完整文档(README 剩余 1 节)
dsh-api-heal —— 「API 密钥无效」自修复插件
它解决什么
DSH 把上游任何 401 / 403 都归类成错误码 AUTH,然后 UI 用 i18n 键 message.failure.auth 把它替换成一句固定的中文 「API 密钥无效」 (见 dsh-llm-pi-ai/lib/index.js 的 classifyPiAiError)。
于是真正的原因(token 过期 / 会话失效 / 需要重新探测目录)全部被吞掉。
这个插件做两件事:
1. 自动自愈:监听 agent/request-error,只要失败看着像认证问题,就就地去对应的 provider 重新续期 / 重取凭据,然后返回 { kind: "retry" } 让 agent loop 原地重发同一个请求 —— 用户看不到报错。
2. 手动工具 heal_api:模型(也就是我)可以主动调用它来修,参数可选 provider(qoder / workbuddy-ai / our-free-model),不给就三家全修。
另外开一条只读状态路由 GET /plugins/dsh-api-heal/status。
它怎么修三家
| provider | 自愈动作 |
| qoder | GET /plugins/dsh-qoder-connect/status 拿 probeKey → POST /plugins/dsh-qoder-connect/probe {"action":"refresh"}(触发 store.resolve({force:true}),走 https://openapi.qoder.com.cn/api/v1/deviceToken/refresh 续期并刷新模型目录) |
| workbuddy-ai | GET /plugins/dsh-workbuddy-connect/ai/status 拿 probeKey → POST .../ai/probe {"action":"refresh"}(重新解密桌面凭据 + 重拉 catalog)。CN 变体若 signed-out 直接跳过,不算失败 |
| our-free-model | POST /api/our-free-model/refresh,必须带 connection 认证 cookie |
最后一条是关键:/api/our-free-model/* 挂在 connection 的准入围栏后,裸 POST 一律 401。插件用 .credentials.yaml 里 client-connection/browser-session 的签名密钥,按 dsh-client-connection 同样的算法(HMAC-SHA256 + base64url, payload {version:1, authority, issuedAt, expiresAt})自铸一枚会话 cookie,所以不需要浏览器、不需要已登录的 Web 会话。
目录
dsh-api-heal/
├─ lib/
│ ├─ heal.js 纯 Node 自愈内核(零 @deepseek-ai 依赖,可独立测试) │ └─ index.js 插件入口:Config / apply / 监听器 / heal_api 工具 / 状态路由 ├─ cordis.patch.yml ├─ package.json ├─ selftest.mjs 17 项检查,含真实打通三家上游 ├─ smoke.mjs 18 项源码形状检查 ├─ loadtest.mjs 52 项端到端检查(假 ctx + 真实 dsh-tools / schemastery) ├─ probe.mjs 独立探针:不装插件也能验证三家入口可达 ├─ stage_deps.mjs 从 app.asar 抽真实依赖给 loadtest 用 ├─ install.ps1 安装脚本(复制 + 改 profile + pnpm install) └─ install.cmd 双击入口(带 -ExecutionPolicy Bypass)
安装
本机是 PowerShell 5.1、执行策略 RemoteSigned,所以不能直接 pwsh -File install.ps1(未签名会被拒)。用 install.cmd:
E:\DSH CODE\dsh-api-heal\install.cmd
脚本会:备份 profile 的 package.json → 复制插件到 E:\dsh-data\.dsh\plugins\dsh-api-heal → 把 dsh-api-heal 加进 dependencies(file: 形式)和 dsh.profile.bundles → 跑 pnpm install → 装后自检。
装完重启 DSH(托盘也要退干净)。验证:
GET http://127.0.0.1:19387/plugins/dsh-api-heal/status
重启前访问会 404(路由只在进程启动时注册)。或者直接让我调一次 heal_api。
回滚:
E:\DSH CODE\dsh-api-heal\install.cmd -Uninstall
测试
最快的一次性验证(不需要装插件,直接打三家入口):
cd /d "E:\DSH CODE\dsh-api-heal"
set DSH_HOME=E:\dsh-data\.dsh
set NODE=D:\DSH\resources\runtime\primary-runtime\dependencies\node\bin\node.exe
%NODE% probe.mjs
输出形如:
[OK ] qoder 600ms qoder 续期成功(signed-in → {"state":"refreshed"}) [OK ] workbuddy-ai 288ms workbuddy-ai 刷新成功({"state":"refreshed","reason":"26 models"}) [OK ] our-free-model 12765ms our-free-model 目录刷新成功(12 个模型)
完整三套:
%NODE% selftest.mjs
%NODE% smoke.mjs
%NODE% loadtest.mjs
loadtest.mjs 需要真实依赖,先抽一次(只需一次):
%NODE% "E:\DSH CODE\stage_deps.mjs" "E:\DSH CODE\_realmods" ^
@deepseek-ai/dsh-tools @deepseek-ai/schemastery @deepseek-ai/cordis ^
@deepseek-ai/dsh-scope @deepseek-ai/dsh-llm @deepseek-ai/dsh-sandbox
配置(profile cordis.patch.yml 里可覆盖)
| 键 | 默认 | 说明 |
| enabled | true | 总开关 |
| autoHeal | true | 关掉就只剩手动 heal_api |
| cooldownMs | 60000 | 两次自动自愈之间的最短间隔,防抖 |
| requestTimeoutMs | 30000 | 单次上游调用超时 |
| webBaseUrl | "" | 留空则依次用 webServer.port/host → $DSH_WEB_URL → http://127.0.0.1:19387 |
| registerRoutes | true | 是否开状态路由 |
例如在 profile 的 cordis.patch.yml 末尾加:
- id: api-heal
name: dsh-api-heal
config:
cooldownMs: 15000
autoHeal: true
边界(说实话的部分)
- 只能救「流已建立之后才失败」的请求。 agent/request-error 这个 waterfall 只在 live.finish.kind === "error" | "aborted" 时触发;如果连接阶段就抛错(started === false),agent loop 直接 throw,监听器根本没机会跑。这种情况要靠 heal_api 手动修,或者重发消息。
- 不改 DSH 本体。 那句「API 密钥无效」的文案仍在,只是现在多数情况下你再也看不到它了 —— 插件在它冒出来之前就把凭据修好了。
- probeKey 每次进程重启都会变(randomBytes),所以插件每次都重新 GET .../status 现取,不硬编码。
- 自动自愈有 60 秒冷却:同一个错误短时间内反复出现不会疯狂打上游。
- our-free-model 那枚 cookie 是用你自己的密钥签的(读 .credentials.yaml 里 client-connection/browser-session 的 secret),不落盘、不外发,只在 127.0.0.1 上用。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
YSwo-fei/dsh-api-heal
自动续期失效凭据并重发请求,用户无感
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1