dsh-infinite-gen-3
Minglink/dsh-infinite-gen-3DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投影在输入框上方显示实时破甲状态徽标。
让 DSH(DeepSeek Harness)通过 ChatGPT 订阅使用 Gpt 系列模型的插件。
插件注册 codex-chatgpt Provider(显示名 “Codex(ChatGPT 订阅)”),以当前 Host 用户的 ChatGPT OAuth 登录态访问模型,并在设置页展示账号信息、连接状态与订阅额度。支持 Windows 与 Linux。
本插件同时接入 11 条订阅线路,每条各自独立注册 Provider、独立登录、独立额度卡片。
Provider ID · 订阅 · 协议 · 登录方式 · 模型目录来源 codex-chatgpt · ChatGPT(Plus / Pro / Business…) · Responses · 浏览器 OAuth(localhost:1455 回调),或导入本机 Codex CLI 登录 · 实时 /backend-api/codex/models kimi-code · Kimi 会员 · OpenAI 兼容 Chat Completions(可选 Anthropic Messages) · 设备码(RFC 8628) · 实时 /v1/models + 本地兜底 command-code · Command Code · Anthropic / OpenAI 双轨 · 浏览器 OAuth 或粘贴 API Key · 实时 /provider/v1/models claude-subscription · Claude Pro / Max · Anthropic Messages · 手动粘贴 / loopback 回调 · 实时 /v1/models + 本地兜底 minimax-code · MiniMax Code 编程订阅 · Anthropic Messages · 复用桌面端登录态 或设备码 · 硬编码(见下) antigravity · Google Antigravity · Gemini · Google OAuth · 内置表 glm-coding-plan · GLM Coding Plan(ZCode 账号,国区 BigModel / 国际区 Z.ai) · Anthropic Messages + OpenAI Chat Completions(按模型声明) · ZCode 账号 OAuth(浏览器中转轮询)+ 可选导入本机 ZCode 登录态 · 随包目录(源自官方 zcode-builtin.json) step-code · StepFun Step Plan 订阅(国区 api.stepfun.com / 国际区 api.stepfun.ai)或开放平台 API Key · OpenAI Chat Completions · 云端轮询浏览器授权(不开本地回调端口)/ 手工粘贴 Platform API Key / 只读导入本机 ~/.stepcode/auth.json · 实时运行时发现(随包表刻意为空) cline-pass · Cline Pass · OpenAI Chat Completions · 浏览器设备码 OAuth(WorkOS,账号入池、自动续期);API Key 仅作兼容回退 · 随包表兜底 + 官方 recommended-models / models.dev / 上游网关目录补全 qoder · Qoder 订阅(全球区 qoder.com / 中国站 qoder.com.cn) · Qoder 自有(COSY 签名 + 信封 SSE) · 浏览器设备流(仅全球区)/ 手工粘贴 PAT(两区)/ 只读导入本机 ~/.qoder/.auth/user · 实时运行时发现(COSY 签名 GET)+ 随包能力兜底表 opendesign · OpenDesign 订阅(Go / Plus / Pro / Max) · OpenAI Chat Completions · 浏览器设备授权(AMR 设备流,签发控制 Key + 运行时 Key);粘贴 Cloud 控制台的 API Key 作回退 · 随包表兜底(源自官方公开价目)+ 实时 GET /v1/models
只有 minimax-code 是硬编码目录,而且是有意的:该端点的GET /v1/models未对订阅流量开放(返回 503direct_route_not_configured),任何「实时目录」都只会是一个必然失败的请求。其取值转录自本机官方客户端的config.yaml。
线路之间互不影响:某条线路的登录失败、额度耗尽或上游故障都不会波及其它线路;它们共用同一套号池内核与账号卡片,但不是同一个池。
⚠️ 合规提示:claude-subscription使用的订阅凭据转发方式与 Anthropic 现行条款存在冲突(详见该章节开头的「风险须知」),且插件未获官方授权;antigravity线路的用户亦有账号被限制的公开报告。请自行评估风险。
0600 文件存储;明文不发送给 Client;GET /backend-api/codex/models):GET /backend-api/codex/models,与官方随包的 codex-rs/models-manager/models.json 同源):default_reasoning_summary: none,官方以此为准。此前本插件在未配置时发 summary: auto,而摘要属于计费生成,等于每一轮都多花一块官方从不花的额度;现在默认省略该字段,用户显式选择 auto / concise / detailed 时照旧发送,选「无」也改为省略字段而不是发 summary: none(后者是让后端先生成再丢弃)。default_verbosity(当前全部为 low)。此前本插件在未配置时整个不发 text 字段,于是服务端套用隐含的 medium——一个从未打开过该设置的用户,会拿到比官方客户端更啰嗦、也更贵的回答。现在未配置时按目录发 low,显式选择仍以用户为准。supportsOutputVerbosity 的模型发送 text,避免把一个模型可能拒收的字段强加给它;prompt_cache_key,让后端复用提示前缀;x-codex-turn-state,让它续接该轮;400 Unsupported parameter: max_output_tokens 拒收该字段(#29,实测 gpt-6-sol / gpt-6.1-sol),官方 CLI 的请求结构里也没有这个字段;输出长度由服务端默认值决定,撞上限仍以 max-tokens 结束原因上报(详见「模型目录」);{ type: 'image', attachment } 块,而工具读取的本地图片是 `` 链接、由映射器在构造时才取回并内联。只扫消息块的方案看不到第二种;request() 把任何失败都报成同一句 Codex could not be reached.,而 DSH 只持久化 {message, code},于是 NGHTTP2_ENHANCE_YOUR_CALM、ECONNRESET、UND_ERR_SOCKET 在界面和日志里长得一模一样——上面那条体积问题正是因此无法自助定位。现在与流中段断流(streamFailure)一致,把 cause 链拼进 message;{ type: 'image', attachment } 下发的粘贴图片会经附件服务读出字节并按 Gemini inlineData 发出,读不出的图片降级为一条可见的说明文本而不是被静默丢弃。单次请求的图片 base64 负载超过 12 MiB 时,最旧的图片按上游同款占位文案替换为文本,避免整条请求被体积上限拒绝;pwsh / powershell、bash、sh 与 shell,并按 PowerShell、Bash 或 POSIX sh 注入对应说明;AbortSignal;Retry-After;codex_image_generate 工具,生成图片后通过 DSH 附件系统保存并在会话中渲染;codex-chatgpt 模型显示最紧张窗口的剩余额度。command-code Provider,使用 Command Code 的 Provider API 与账户 API;模型 id 决定线路:claude-* 走 Anthropic Messages(/provider/v1/messages),其余模型走 OpenAI Chat Completions(/provider/v1/chat/completions),因为该 API 会拒绝把模型发到格式不符的端点;127.0.0.1:5959 起顺延,/callback 接受 Studio 页面的跨域 POST),也可在设置页手动粘贴 API Key;两条路径都先用 /alpha/whoami 验证再加密保存;/provider/v1/models,每个模型的 context_length 作为默认上下文窗口,可逐模型覆盖;src/host/command-code/model-catalog.ts,转录自官方 CLI 的模型注册表):是否接受图片输入、支持哪些思考档位由该表决定,未知模型回落纯文本;deepseek/deepseek-v4.1-flash 与 deepseek/deepseek-v4-flash-vision-exp 支持图片,而 deepseek/deepseek-v4-flash、deepseek/deepseek-v4-pro 不支持;z-ai/glm-5.3-flash 支持而 zai-org/GLM-5.3 不支持;command-code 路由显式声明 normal 策略(最多 3 次,1.5s 起指数退避、15s 上限、0.2 抖动),覆盖 RATE_LIMIT、SERVER、TIMEOUT、TRANSPORT;"{\"error\":{\"type\":\"server_error\"}}")被归类为 SERVER 并自动重试;Retry-After 让退避按对方的节奏走;401/403 与 ABORTED 明确不重试;kimi-code Provider,接入 Moonshot 的 Kimi Code 订阅(https://www.kimi.com/code)。它与 Moonshot 开放平台(pay-as-you-go)是两套互不通用的系统:订阅的模型接口是 https://api.kimi.com/coding/v1,凭据只来自订阅 OAuth;把开放平台的 key 或 base URL 用在这里会被判为 401 Invalid Authentication;auth.kimi.com):设置页点「设备码登录」后直接展示用户码与一次性链接(浏览器会自动打开),装好后无需回调端口、无浏览器环境也能手工完成;slow_down 会按 RFC 调宽轮询间隔,设备码过期会自动重新申请而不是直接失败;max(300s, expires_in×0.5) 自动续期,同进程并发调用共用一次刷新;被拒的 refresh token 进入冷却并提示重新登录;src/host/kimi-code/adapter.ts)。会重试(有界退避,最多 3 次,1.5s 起步、15s 上限、0.2 抖动,并遵守上游 Retry-After):"{\"error\":{\"message\":\"Upstream model provider is temporarily unavailable. Please try again in a moment.\",\"type\":\"server_error\"}}");too many requests / engine is currently overloaded)、连接失败与流停滞;k3(1M 上下文,需 Allegretto+;Moderato 上限 256K,故默认按 256K 计算,可用上下文覆盖升到 1M)、k3-256k、kimi-for-coding(K2.8 Preview)、kimi-for-coding-highspeed(约 6× 速度、3× 额度)、k3.1-pro(K3.1 Pro,默认 256K、可覆盖到 1M,需 Moderato 及以上,1M 需 Allegretto 及以上)与 k3.1-pro-highspeed(K3.1 Pro Highspeed,1M 上下文、约 2 倍配额,需 Pro / Allegretto 及以上),运行时以 GET /v1/models 为准;low / high / max(其余写法收敛映射,未知档位不发送);关闭思考发 thinking:{type:"disabled"},开启时发 thinking:{type,effort,keep:"all"};temperature(采样参数按模型固定,显式值会报错);stop 按上限裁剪为最多 5 条、每条 ≤32 字节,超长整条丢弃(截断的停止串会在错误位置终止生成);none)会被服务端以 400 拒绝,所以它的档位只有 low / high / max、默认 max;「默认思考档位」下拉只列出勾选模型真正声明的档位,任一勾选模型允许关闭思考时它才出现,被拒时卡片上直接写明原因;type = "kimi" 一致):K3.1 Pro 系列与其它模型同一协议、同一端点(/v1/chat/completions),Anthropic Messages 只在实时目录为某个 id 声明时启用;视频输入按官方型号表声明走,K3.1 Pro 系列可用;reasoning_content 计入输出,固定 32K 会把 max 档的长推理中途截断并返回 length;调用方已知 prompt 规模时上限会被下调到放得下,未知时不做猜测;total message size N exceeds limit 2097152,但 2,097,152 来自官方文档的通用错误示例,从未针对 1M 上下文档位实测——1M 档的真实会话(中文正文 3–4 MB)会被本地守卫提前拦下,而宿主压缩也救不回来(压缩请求自己同样超限);官方 kimi-cli 全仓库没有字节守卫,说明这个上限至少不是客户端必需的。现在按模型档位:k3 / k3.1-pro / k3.1-pro-highspeed / kimi-for-coding = 8 MiB(8,388,608,待实测的上界),k3-256k / kimi-for-coding-highspeed = 2 MiB(保持原值,窗口与上限本就对齐)。8 MiB 的依据是「1M 窗口的正文大小」:一个 1M token 的请求体按英文约 4 MB、按密集中文约 4.5 MB,8 MiB 留出近一倍余量,所以字节上限不会成为 1M 会话的实际瓶颈;真正先到的是模型自身的 token 窗口——服务端回 Your request exceeded model token limit,该措辞已被 common/context-overflow.ts 归一到 CONTEXT_WINDOW_EXCEEDED,压缩与重试照旧生效。拦截仍按真实序列化体积,并按「循环实际做了什么」给出处方(有图可丢但丢了也补不上缺口 / 图已丢完仍超限 / 本来无图,三种情况文案不同,不再声称发生了没发生的省略);DSH_KIMI_CODE_MAX_BODY_BYTES 仍是全局强制覆盖、优先级最高,确有实测上限的部署(前置代理/网关)用它指定该档上限,取值非正整数时回落到该模型的默认值而不是关闭守卫;带视频的请求走 64 MiB 档,不受该变量影响;超限时报的是可恢复的溢出码(CONTEXT_WINDOW_EXCEEDED):DSH 会对该码强制压缩本轮历史并重试同一步,所以长会话的表现是「压缩一次后继续」,而不是整轮失败——官方 kimi-cli 从不特殊处理 2097152,它靠 85% 提前压缩避开,详见下文「上下文窗口」那条;prompt_cache_key 与 Anthropic cache_control 标记均被忽略(设与不设、同 key 与异 key 命中的是同一缓存),设备 id 与协议切换也不影响;/messages 与 /chat/completions 共享同一缓存;system 或工具列表一旦变化会使整个前缀缓存失效(实测归零)。因此应保持工具集合稳定、把新增内容追加在末尾;prompt_cache_options(OpenAI 兼容线路)或顶层 cache_control(Anthropic 兼容线路)控制缓存写入时长,与上面的「无法干预」不矛盾——那一条说的是缓存身份(由内容前缀哈希决定),TTL 管的是另一回事;k3、kimi-for-coding、k3.1-pro):text/image,但它是可合并扩展的接口,本插件用 TypeScript 模块增强把它扩到 video(未改动 DSH 任何代码),因此视频走 DSH 真实的能力通道,而不是只能显示在提示里;{type:'video_url',video_url:{url:'data:…'}}。视频与图片各有独立预算(图片 1.5 MB、视频 48 MiB base64,最旧优先省略),请求体校验只在确实带视频时才放宽到 64 MiB;DSH_KIMI_CODE_MAX_IMAGE_BYTES 覆盖(取值非正整数时回落到默认值)。视频预算没有环境变量出口,与 MiniMax 线路一致;k3-256k 只接受图片、文档白名单外的容器、以及未文档化视频内容块的 Anthropic 线路;messages[].tools),可在会话中途用「无 content 字段的 system 消息」注入完整工具定义。官方把「保持顶层 tools 字节稳定」列为该特性的目的之一——中途修改/删除已发出的声明会使缓存从该点起失效,而在末尾追加不影响已缓存前缀,所以这是提升缓存命中的正道。声明按请求重发(服务端不保留),且仅在模型声明该能力时发送;minimax-code Provider,接入 MiniMax Code 编程订阅。它与 MiniMax 开放平台(按量计费的 API Key)是两套互不通用的系统:https://agent.minimax.cn/mavis/api/v1/llm/v1/messages);x-api-key 一律返回 401 "{\"code\":401,\"message\":\"token is required\"}",因此本线路没有 x-api-key 回退分支(回退只会在每次请求上白花一个往返);~/.minimax/auth///mcode-public/auth.json。rename),失败或中断都让原文件保持逐字节不变;auth.lock(那是桌面端自己的刷新锁,第二方碰它就可能打断官方客户端的刷新);auth.json 归桌面端所有,本插件只读;若本机没有它,才在设置页用 RFC 8628 设备码流程(PKCE S256)登录,凭据存到本插件自己的 $DSH_HOME/storages/minimax-code-credentials.json;cn 用 account.minimax.cn / agent.minimax.cn,global 用对应 .io 域名。两个区域的目录都会被探测,因此国际区账号不会因为没有国区文件而「未登录」;读回凭据时以记录里存的区域为准,而不是拿默认区域覆盖它;src/host/minimax-code/model-catalog.ts):GET /v1/models 未对订阅流量开放(503 "{\"errorCode\":50115,\"errorReason\":\"direct_route_not_configured\"}"),所以任何「实时目录」都只会是一个必然失败的请求;~/.minimax/config.yaml 的模型表;M3.1 Flash 是 2026-10-19 换上的正式版 id(MiniMax-M3.1-Flash,去掉了 -Preview 后缀),取自 MiniMax 自己的 Model Invocation 页 Supported Models 表并在该订阅端点上实测(正式 id、output_config.effort 的 low/max、内联图片)。无论哪一条,都不从不存在的接口推断;output_config.effort: 'none');M3.1 Flash 强制开启并可指定档位(output_config.effort 取 low/medium/high/xhigh/max,省略即 max)。未知或越档的取值一律回落到该模型目录声明的默认档,不会把模型没有声明的档位发出去;inputModalities 都是 ['text', 'image', 'video'](model-catalog.ts),线上形状取自实测——{ type: 'video', source: { type: 'base64', … } } 被该端点接受并解码(同一段实测也否掉了 data-URL 字符串那种封装,它会在 : 处按裸 base64 解码失败)。能不能读到字节是宿主注入的接缝:AttachmentVideoReader(adapter.ts:372,类型在 src/host/common/video-request.ts)由宿主提供,DSH 自己的附件服务只存图片,所以视频只能来自本部署里某个真实的生产者;宿主不提供读取器、或某一条读不出来时,resolveRequestVideos 把它解析成 unavailable,映射器(mapper.ts:416)才退化成一段说明文本——modalities.ts 的 videoOmissionText 按 4 种 reason 给出各自不同的措辞(unsupported-model / unsupported-container / unreadable / unsupported-wire),让模型知道「有这段视频、为什么没带上」,而不是对着空白回答。降级发生在单个片段上,不发生在声明上:声明的依据是接缝存在且线上形状实测可用,不是「任何情况下都一定能读到」;classifyMinimaxFailure,adapter.ts:388-470;读的是原始正文而不是 summarizeFailureBody 抽出的那一个字段,因为同一个判词在两种信封里放的位置不同):isHttpContextOverflow 先判,CONTEXT_OVERFLOW_CODE,终局、不归账号;isSpentWindow403(adapter.ts:355)管 403,429 分支(adapter.ts:425-431)用同一个谓词问同一个问题,两条都返回同一个 quotaExhaustedFailure(adapter.ts:368:PROVIDER_ERROR / retryable: false / accountScoped: true)。判据本身是两个臂(先问上游用量限额的数字码、再问措辞表兜底;这个先后只是求值顺序,不代表这条路由上真正会开火的是前者):namesUsageLimitStatusCode(adapter.ts:311)读两种信封里的上游码(平台信封 base_resp.status_code、客户端信封 errorCode,并额外往流内错误体 { error: … } 里多读一层),命中 USAGE_LIMIT_UPSTREAM_STATUS_CODES = {2056, 2067} 即算;非 JSON 或没有该字段的正文回落到措辞表 QUOTA_EXHAUSTED_PATTERNS。两个臂汇进同一个判决 namesSpentWindow = namesUsageLimitStatusCode || 措辞表(adapter.ts:334)——它们不是两套规则,而是同一个问题的两种承载方式:一句中文没有码,一个裸码没有句子。但要把定位说准:数字码臂在这条 Messages 路由上目前不会开火,它是跨信封的前向兼容臂(哪天服务真的在 Messages 路由上带出 2056/2067/errorCode,它就会生效),不是这条路由当前的主要判据。2026-10-20 的活体探针(scripts/probe-minimax-capabilities.probe.ts,原始证据 docs/minimax-code-probe-capabilities.md)把这条路由的错误信封量了个遍:端点上只有两种信封,没有一种带 `base_resp`——① 请求被拒 400 是 {"type":"error","error":{"type":"invalid_request_error","message":"…"}}(参数类错误上多一个 request_id),没有任何数字字段;② 认证被拒 401 是 {"code":401,"message":"auth failed"},顶层 `code` 是这条路由唯一的数字字段。base_resp.status_code 那个信封属于这条线路的别的路由(配额 coding_plan/remains、Files API、reset-card),不属于 Messages。连探针抓到的 2013 也不是字段:它只以文本形式嵌在 error.message 的括号里(… does not support max tokens > 524288 (2013)),而且是通用「参数非法」码——超限的 max_tokens、空 body、畸形 JSON 全都归它;本仓库在 reset-card 与 Files API 上另有语义,绝不拿它当额度判决。所以在 Messages 路由上当前真正 operative 的那一条是措辞表:数字码臂留在这里,是为了不让一个将来可能带上数字码的信封被当成措辞去猜,而不是因为这条路由现在会给码。它必须排在下面的凭据分支之前,因为 401/403 的正文在这条线上是同一句 token is required,光看状态码分不出「窗口用尽」与「凭据被拒」。号池据此冷却到窗口重置(未命中周窗口词冷却 5 小时,命中 WEEKLY_QUOTA_WINDOW_PATTERN 冷却 7 天,见 adapter.ts:172-184),且刻意不采信 Retry-After——等 N 秒不会让一个用尽的窗口重新可用;401/403 里不属于上面的,INVALID_CREDENTIAL,终局且归账号,但走 markAuthFailed 而不是 markCooldown;这条线的 401 正文在「没发凭据」和「凭据被拒」两种情况下是同一句 token is required,所以提示直接指向重新登录;RATE_LIMIT,可重试且不归账号(同一套餐后面的每个账号都会被同样拒绝,冷却它只会把号池抽干);SERVER,可重试、不归账号;PROVIDER_ERROR,终局:请求本身不被接受,重发一次也不会被接受;PROVIDER_ERROR,终局,正文为空时提示「无响应」;RATE_LIMIT / SERVER / TIMEOUT / TRANSPORT)走 DSH retry policy 的有界退避:最多 3 次,1.5s 起步、15s 上限、0.2 抖动;终局类不重试——重试只会推迟用户真正需要看到的那句提示;invalid_grant,而这条终局判定会被记成「该账号需要重新登录」并写进号池(重启也在);PRE_EXPIRY_REFRESH_MS 为 5 分钟,轮换发生在服务端还没有拒收之前;② 同一份凭证的轮换按身份(`recordKey` / `loginEpoch`)单飞,后到的调用者要么加入在途轮换、要么采纳结果,绝不二次花费同一枚令牌;onRelogin 此前未接线);⑥ 响应未返回新 refresh token 时沿用旧值,不再当作失败;MAX_MESSAGE_BODY_BYTES(2,097,152),理由写着「两条线路上游都是同一族端点」。2,097,152 与 `total message size N exceeds limit 2097152` 是 Kimi Code 自己文档里的网关上限(见其错误参考),MiniMax 没有任何文档这样规定;DEFAULT_MAX_MESSAGE_BODY_BYTES(64 MB,MiniMax 对带媒体请求自己公布的请求体量级),普通会话永远不会被本地拒绝,守卫只拦真正的失控请求(如每轮追加数 MB 工具结果的死循环),且仍在花掉连接之前拦下并给出同样的可操作提示;DSH_MINIMAX_CODE_MAX_BODY_BYTES 指定;取值非正整数时回落到默认值而不是关闭守卫;offloadOldestRequestImages,其预算是 Kimi 的 1,500,000——那是为塞进 Kimi 自己的 2 MB 请求体上限而定的数字。MiniMax 的模型表允许单图 10 MB 原始字节(base64 约 13.3 MB),超出近 9 倍,于是一张普通截图就被换成占位文本;DEFAULT_MAX_REQUEST_IMAGE_BYTES(16 MB,装得下模型 10 MB 单图上限并留出余量,且远在 64 MB 请求体上限之内),可用 DSH_MINIMAX_CODE_MAX_IMAGE_BYTES 覆盖;offloadOldestRequestImages(options, maxBytes) 现把预算变成参数,缺省仍是 Kimi 的值,其余线路行为逐字节不变;/v1/token_plan/remains(api.minimax.cn / api.minimaxi.com / api.minimax.io)只接受平台 API 密钥:mcode-public 登录态在四种认证写法(Bearer / 原始 / x-api-key / 两者都带)下全部被拒,且是 HTTP 200 + `base_resp.status_code: 1004`——不是 401,很容易被误读为成功;mmx CLI 能用该端点,是因为它的 OAuth 是平台登录,与本线路的 mcode 登录是两套身份;packages/tui/src/account/matrix-account-client.ts):GET https://agent.minimaxi.com/v1/api/openplatform/coding_plan/remains(国际 agent.minimax.io),路径与平台端点完全不同。本插件用的就是这条(本线路的 agent.minimax.cn 优先、官方主机兜底);types.ts 已明确决定不伪造官方客户端身份(伪造既失信,也可能是封号理由),因此默认不发,宁可拿到一个拒绝让卡片如实说明;DSH_MINIMAX_CODE_QUOTA_ATTRIBUTION=1 显式选择该取舍;mmx quota show。返回的每个 model_remains 行带两个窗口(5 小时滚动 + 每周),卡片因此有两根条,各自显示重置时刻与「已用/总量」;*_usage_count 的语义是模糊的(老响应是「剩余」、新响应是「已用」),官方用显式百分比消歧——照抄,否则进度条会反过来**;weekly_boost_permille,可超过 100%);status: 3 通常表示「不限量」,但两个总量都为 0 时它表示「当前套餐不含该模型」——渲染成不限量会凭空许诺额度;base_resp 非 0 视为凭据被拒,只试一台就停并记住 30 分钟;② 其它失败按 unreachable 区分、记住 10 分钟;③ /status 只读缓存、绝不在轮询里发网络请求;1M / 512K / 200000),「恢复默认」以 null 语义在 host 侧删除该键而不是写入 0;src/host/common/account-pool.ts)与同一张共享账号卡片,具备顺序耗尽 / 轮询 / 粘性调度、429 冷却换号、设为主账号与备注。身份键不是令牌:桌面端凭据用它自己的 recordKey(同一个记录槽每次轮换都是同一账号,因此在池里原地更新),插件自持凭据用 loginEpoch(每次设备码登录就是一次独立会话)——用刷新令牌做键在每次轮换后都会把同一账号看成新账号;POST /accounts {action:'adopt'}):只读取、只新增一行,不改动官方客户端的任何文件;重复导入按记录槽身份原地更新,不会产生重复账号。在设置页新发起的设备码登录会自动加入号池(pollWebLogin 的 onSave 钩子)——没有这个钩子,新登录只会写进镜像文件而号池看不见,这正是「多账号登录没配好」的根因;该钩子的失败不会让登录失败,因为凭据此时已经落盘。claude-subscription Provider,以 Claude Pro / Max 订阅的 OAuth 登录态访问 Claude 模型(Anthropic Messages 接口),不使用 API Key、也不按量计费;Authorization: Bearer 且 `x-api-key` 必须缺省;user-agent: claude-cli/、x-app: cli;anthropic-beta 至少含 oauth-2025-04-20 与 claude-code-20250219;system 的首个块必须是 Claude Code 身份声明;state(state: verifier),那会把本应保密的 verifier 写进授权 URL、地址栏、浏览器历史乃至剪贴板。本线路是两次独立随机抽样,并有测试断言授权 URL 中不出现原始 verifier;#;也容错接受整条重定向 URL)。可选 loopback 回调,绑定 127.0.0.1 并顺序探测可用端口(Windows 的保留端口段会让固定端口绑定失败)。端口探测失败降级为手动而不是报错。切换模式等于作废当前流程并重新发起——授权码与签发它的那次请求的 redirect_uri 绑定,这是该流程最常见的失败;state 只拒绝那一个请求,不会终止正在进行的合法登录。回调服务器只绑 loopback、只应答 /callback、只接受本机来源;