dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
dsh-connect-minimaxcode)把本机已登录的 MiniMax Code 桌面 App(国内版) 的模型接入 DeepSeek Harness(DSH),装好即用,无需配置 API Key。
English | 简体中文
本插件的思路来自 corrinehu/dsh-workbuddy-connect(作者 Corrine Hu)。
它最早证明了这样一件事:桌面 App 已经登录的模型,可以零配置地搬进 DSH——不去碰账号密码,不引入新的鉴权体系,只是把本机已有的登录态接上一个 provider,并复用 DSH 自带的 provider 适配器。本插件把同一套做法用在了 MiniMax Code 上:
· dsh-workbuddy-connect · 本插件 数据来源 · WorkBuddy 桌面 App 的本地登录态 · MiniMax Code 桌面 App 的本地登录态 接入方式 · 注册 DSH provider,暴露已登录模型 · 同左 目录来源 · 上游实时模型列表 · 同左
同方向的另一实现是 dingminhua/dsh-connect-workbuddy,本插件在插件结构与 provider 注册的组织方式上参考了同一作者的 dsh-connect-trae(该项目的连接内核本身也参照了 corrinehu 的实现,见其 README 致谢)。
两者的价值可以这样区分:corrinehu 是最早的开创者,「复用本机登录态」的路线由它确立;dingminhua 的实现更贴近 DSH 插件结构的既有约定,本插件的目录布局与 cordis.patch.yml 写法沿用了后者。二者都已列入文末致谢。image 输入模态的模型(M3、M3.1-Flash)可以直接发图;图片由宿主的附件服务读成请求字节,插件只负责把持久化的附件引用接上去二选一:
account.minimax.cn)另外需要 DSH 桌面版(内置内核 >=0.2.1-rc.2 <0.3.0,见 package.json 的 engines.dsh;实测 0.2.1-rc.2)或 Web profile。
发图需要宿主提供附件服务:图片不是插件自己读的,而是由宿主的持久化附件服务读成请求字节,插件只负责把附件引用接上去。宿主没有附件服务时,插件照常加载、文本照常对话,只是发图会被拒绝(pi-ai image input requires the durable attachment service)。方式一:从 Git 仓库安装(推荐,拿到最新代码)
dsh plugin --profile desktop add github:JeffTsuiCUG/dsh-connect-minimaxcode方式二:npm 安装(发布后可用)
dsh plugin --profile desktop add dsh-connect-minimaxcode想立刻用上积分余额与到期提示,请锁版本安装 —— pnpm 11 默认 minimumReleaseAge 为 1440 分钟,新版本发布后 24 小时内不带版本号的安装会解析到较早的版本(当前会落到 0.2.x,而积分功能是 0.3.0 才有的):```bash
dsh plugin --profile desktop add dsh-connect-minimaxcode@0.4.2
`Web profile 把 --profile desktop 换成 --profile web。
桌面版的 profile 由 Electron 应用独占,若dsh命令不在 PATH 中,请使用 DSH 应用自带的载体 CLI(路径随安装位置而变,例如\resources\runtime\cli\bin\dsh.cmd)。
安装后插件会热加载,模型随后出现在模型选择器的 MiniMax Code 分组中。
积分胶囊与插件页面卡片属于浏览器侧插件,首次安装、或升级到 0.3.0 及之后的版本后,需要重启一次 DSH 才会出现(模型通路本身不需要重启)。
allowBuilds 拦截本仓库把构建产物 lib/ 一并提交,因此正常情况下安装不会触发构建。若你看到:
[ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED] Failed to prepare git-hosted package说明你使用的是某个早于 `0.2.1` 的提交(那些版本尚未提交 lib/)。解决办法二选一:
github:JeffTsuiCUG/dsh-connect-minimaxcode#v0.2.1pnpm-workspace.yaml 中加入 pnpm 提示的 allowBuilds 条目后重试打开 MiniMax Code 桌面 App,确认处于已登录状态。插件读取的是 App 写入的本地登录态。
打开 DSH 的模型选择器,在 MiniMax Code 分组下选择模型。可用模型来自上游实时目录,例如 M3、M3.1-Flash。
直接使用即可。工具调用由 DSH 本地工具执行,插件只负责提供模型通路。
MiniMax Code 有两份互不通用的登录态,本插件各用其一:
凭证 · 位置 · 有效期 · 用途 JWT · ~/.minimax/local-runtime.auth.json · 约 15 天 · 调模型网关(/mavis/api/v1/llm/v1/messages) OAuth(mmoat_) · ~/.minimax/auth/prod//mcode-public/auth.json · 约 1 小时 · 读账户与积分(/matrix/api/v1/commerce/get_membership_info)
两份凭证互不通用:拿 JWT 打账户接口一律 401,拿 OAuth 令牌打模型网关同样不通。模型对话用 JWT,积分显示用 OAuth。
现象 · 含义 · 处理方式 正常使用 · 两份凭证都有效 · — 模型报鉴权错误 · JWT 已失效 · 在 MiniMax Code 中重新登录,然后重启 DSH 积分胶囊显示「登录态已过期」 · OAuth 令牌过期 · 插件会用 App 自己的 refresh token 续期并写回;若续期失败,请打开一次 MiniMax Code 桌面 App 让它自行续期
OAuth 令牌过期不会影响模型对话:JWT 仍然有效,模型照常可用,只是积分胶囊暂时拿不到余额。
续期会轮换 refresh token。插件因此把新的一对令牌按客户端原格式原子写回同一个文件,并保持 generation 不变——客户端靠它判断「这份凭据是否仍属于本次登录」,擅自抬高会让桌面 App 误判为异地登录。MiniMax 的这些模型强制要求先推理再输出,思考无法关闭。因此:
thinking 块实时返回,可以在界面中看到模型"在想什么"若更看重流式体感的即时反馈,建议同时保留 DSH 官方模型或其他 provider 作为备选。
~/.minimax/local-runtime.auth.json(MiniMax Code 写入的明文登录信息),仅在内存中解析其 JWTGET /mavis/api/v1/models 获取实时模型目录(含上下文长度、多模态、工具调用等能力声明)minimaxcode provider,指向 POST /mavis/api/v1/llm/v1/messages(标准 Anthropic Messages 协议)~/.minimax/auth/prod//mcode-public/auth.json 的 OAuth 令牌,按需续期POST /matrix/api/v1/commerce/get_membership_info 获取积分余额,通过插件自己的状态接口 /plugins/dsh-connect-minimaxcode/status 交给界面胶囊这些是实测中必须处理的差异,也是本插件与"直接改个 URL 就能用"的主要差异所在:
# · 现象 · 处理 1 · 网关只认 Authorization: Bearer,而 pi-ai 默认发 x-api-key,后者单独出现会返回 401 token is required · 在模型描述符上附带 Authorization 头(网关同时接受两个头) 2 · Anthropic SDK 会自己在 baseUrl 后追加 /v1/messages;若 baseUrl 已以 /v1 结尾,请求路径会变成 /v1/v1/messages,网关返回 503 direct_route_not_configured · baseUrl 收到版本段之前,由 SDK 补齐 3 · 所有模型强制要求推理,而"关闭推理"会让 pi-ai 发出 thinking: {type: "disabled"},网关返回 400 ... requires adaptive thinking · 将"关闭"级别标记为不支持,使该字段被省略(网关接受)
插件不包含任何硬编码的 Token、账号或接口密钥。
插件可以自己完成登录,用的是 MiniMax Code 桌面端同一套 OAuth 2.0 设备码流(RFC 8628):
account.minimax.cn/oauth2/device/code 申请一个设备码,拿到一个 8 位用户码和授权页地址oauth2/token,拿到 mmoat_ 令牌与 refresh token要点:
mmoat_ 令牌既能调模型网关(agent.minimax.cn/mavis/api/v1/llm),也能调账户接口(积分、签到),所以登录一次就够~/.dsh/.minimaxcode-auth.json(权限 0600,原子写)。桌面 App 的两个文件带 generation 计数器且必须同步递增,写进去会被它当成「在别处登录过」而要求重登MiniMax Code 的免费积分是每天签到送的,不是登录就送。客户端有个「每日签到」卡片,但不会自动领 —— 卡片弹出来,得你自己点。
上游的接口是:
GET /minimax-cloud/api/v1/signin/status?timezone_id=Asia/Shanghai # 七天一轮的进度
POST /minimax-cloud/api/v1/signin/claim?timezone_id=Asia/Shanghai # 领取当天额度几点实测结论:
Asia/Shanghai)。传偏移量或干脆不传,服务端会回 invalid timezone_idexpire_at_ms 正好是领取日 + 30 天的北京时间零点)claim_result: 2(今日已领),不会重复发放插件页面里能看到当天是第几天、值多少积分、一轮还剩哪些天,并提供两个动作:
自动签到刻意做得很克制:只在上游明确说当天可领时才发请求、当天至多一次、不并发重试、不绕过任何验证,出错就把原因显示出来而不是静默重试。请自行确认这样做符合 MiniMax 的服务条款。
输入框工具行(模型选择器旁)的胶囊会显示 MiniMax Code 的剩余积分;点开还能看到赠送/购买拆分、两次读取之间的消耗,以及本机累计的 token 与等效金额。胶囊只在选中 `minimaxcode` 模型时出现。
MiniMax Code 桌面 App 自己每天在调一个「会员信息」接口,响应里就带着客户端设置页显示的那三个数字:
POST https://agent.minimax.cn/matrix/api/v1/commerce/get_membership_info
Authorization: Bearer <桌面 App 的 mmoat_ OAuth 令牌>
Content-Type: application/json
{}"op_credit_summary": {
"total_remaining_amount": "11459.454", // 总剩余积分
"purchased_remaining_amount": "0", // 其中购买的
"free_remaining_amount": "11459.454" // 其中赠送的
}