From 96d97b0e0ee4167a0fcd6f0589603af39761a742 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sun, 11 Oct 2026 19:29:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(channels):=20MiniMax=20=E6=B8=A0=E9=81=93?= =?UTF-8?q?=20=E2=80=94=E2=80=94=20PKCE=20=E8=AE=BE=E5=A4=87=E7=A0=81?= =?UTF-8?q?=E6=B5=81=EF=BC=88RFC=208628=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 第二个真实厂商,采用纯 HTTP 的设备码授权(无需本地服务器): - 申请: POST account.minimax.cn/oauth2/device/code body: client_id=mcode-public&scope=agent.default&audience=agent-backend &code_challenge={S256(verifier)}&code_challenge_method=S256 - 轮询: POST account.minimax.cn/oauth2/token body: grant_type=device_code&device_code=..&client_id=mcode-public &code_verifier=.. - 签到: POST agent.minimax.cn/minimax-cloud/api/v1/signin/claim body {} - 模型 fallback: MiniMax-M3.1-Flash-Preview / M3 / M2.7-highspeed (对齐参考仓库 minimax-product.ts) device-poll 流程的三步状态机在 start_login/poll_login 中实现: begin 时生成 PKCE verifier/challenge 并申请设备码,把 verifier 存进 会话(只在换 token 时用一次,不回显),页面轮询 token 端点直到 authorization_pending 结束。 --- internal/lua/plugins/channels.lua | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/internal/lua/plugins/channels.lua b/internal/lua/plugins/channels.lua index 7e06b07..3af4c3d 100644 --- a/internal/lua/plugins/channels.lua +++ b/internal/lua/plugins/channels.lua @@ -119,6 +119,36 @@ local PLATFORMS = { }, }, + -- MiniMax —— PKCE 设备码流(RFC 8628)。三步:申请码 → 用户授权 → 轮询换 + -- token。全程纯 HTTP,无需本地服务器;user_code 显示给用户输到授权页。 + { + id = "minimax", + name = "MiniMax", + vendor = "minimax", + flow = "device-poll", + device = { + -- 申请设备码:PKCE S256 + code_url = "https://account.minimax.cn/oauth2/device/code", + code_body = "client_id=mcode-public&scope=agent.default&audience=agent-backend" + .. "&code_challenge={challenge}&code_challenge_method=S256", + -- 轮询换 token + token_url = "https://account.minimax.cn/oauth2/token", + token_body = "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code" + .. "&device_code={device_code}&client_id=mcode-public&code_verifier={verifier}", + interval = 5, -- 轮询间隔秒 + slow_down_guard = true, -- 响应 authorization_pending / slow_down 按标准处理 + }, + hosts = { "account.minimax.cn", "agent.minimax.cn" }, + base_url = "https://agent.minimax.cn", + adapter = "openai", + models = { "MiniMax-M3.1-Flash-Preview", "MiniMax-M3", "MiniMax-M2.7-highspeed" }, + -- 每日签到(两步:状态预检 + 领取;幂等靠服务端状态) + checkin = { + url = "https://agent.minimax.cn/minimax-cloud/api/v1/signin/claim", + method = "POST", body = "{}", + }, + }, + -- 服务端浏览器兜底示范(回环重定向类)。真实厂商若需要可改 flow="vnc"。 { id = "loopbackish",