magicrew-auth
v0.3.70
Published
超级麦吉 / MagiCrew for magpie and OpenCode — one package, two providers: letsmagic.cn (国内) and magicrew.ai (international). Password or web-JWT sign-in, the account's own live model list, points balance, newcomer rewards, invite codes.
Maintainers
Readme
超级麦吉 Magicrew for magpie
一个包,两个供应商:国内的 GLM / DeepSeek / Qwen / Kimi,国际再加 Claude / GPT / Gemini —— 原样走它的 OpenAI 兼容网关。
超级麦吉(letsmagic.cn,官网英文名 Super Magic)和 MagiCrew(magicrew.ai)是同一产品的两套云。这个插件把它们各接成一个独立供应商 —— 在 magpie 的供应商列表、用量概览、模型目录里各占一行,不聚合、不互相覆盖登录态。
显示名按「中文 + English」,英文照抄官网:插件卡片是 超级麦吉 Magicrew (写在
package.json的magpie.name,name只做 ASCII 依赖键 —— 见下), 两个供应商分别是 超级麦吉 Super Magic 与 麦吉 MagiCrew(Super Magic是两个词; MagiCrew 官网没有中文名,「麦吉」取自官网正文里对自家产品的简称)。⚠ 装过 0.3.69 的话要重装一次:那一版的包名带中文,
magpie plugin update会报unrecognised dependency format。magpie plugin rm github:MYCF711/magpie-magicrew-auth再plugin add同一个地址即可(登录态不丢)。
国内 超级麦吉 Super Magic www.letsmagic.cn GLM / DeepSeek / Qwen / Kimi / MiniMax / MiMo / 豆包
国际 麦吉 MagiCrew www.magicrew.ai 上面全部,再加 Claude / GPT / Gemini
协议 OpenAI Chat Completions —— 原生,不是翻译出来的
计费 积分(预充值,不是月度配额)
凭证 登录一次 30 天全自动:api_key 两小时自续,refresh_token 自滚模型清单是 2026-10-27 从两站
GET /api/v1/flows/models拉下来核对的。清单会随订阅档位和平台上下架变 —— 所以插件里没有一张写死的模型清单,账户能选什么就显示什么。
改代码 / 发版本之前:先看 AGENTS.md —— 按「你在哪一步」给阅读顺序, 外加本仓库那些会静默出错的坑(症状 → 判据 → 出处)。交付与发版逐条走 CHECKLIST.md 的两张表。发布是七步,
git push只是第 4 步。
功能
- 两个供应商分得开 —— 国内、国际各一行,图标、名字、模型、积分、登录态全部独立
- 登录全程不开浏览器 —— 国际站有邮箱验证码和手机号验证码两条纯 HTTP 路;国内站有手机号验证码。另外两条(浏览器登录 / 手填登录态)谁都能用
- 已有的账号加进来,只填两次就完事 —— 填邮箱(或手机号)→ 填验证码。那张「拖动滑块使图片角度为正」的旋转图根本不会出现:服务端对已注册的账号直接放行,插件用的就是这条通道
- 本机浏览器登过就直接认 —— 你平时那个 Edge / Chrome / Brave 里登过 magicrew,点「浏览器登录」时插件读它的 localStorage 接上:不开窗口、不用重登
- 模型跟着账号走 —— 每次登录后按
/api/v1/flows/models实时拉,账户当前能选什么就展示什么,生图和 embedding 不会混进来 - 积分算得准 —— 余额读的是
/api/v1/quota/points/total;空号就显示空,不会被优先派活 - 积分耗尽自动换号 —— 上游用 HTTP 400 报「可用积分已不足」时,插件把它改写为语义正确的 402 Payment Required,magpie 会 rest 这个账号并继续问同 provider 的下一个账号 / 路由组的下一个成员
- 登录一次管 30 天 —— 网页 JWT 顶 30 天,
mgw_api_key 每 2 小时自续,refresh_token 每次续期时自滚 - 新手奖励 8 项全自动 —— 国内站 8 项 500 积分全部拿得到;第 8 项(完成第一次 AI 工作)由插件替你发一条消息,花掉约 2 积分
- 默认开启自动签到 —— 安装后自动把本 provider 的插件签到设为开(
pluginCheckins缺省时补 true;你手动关掉的不会被改回) - 自动更新 —— 复用 magpie 的插件更新机制:发现自己的新版本后调
magpie plugin update,并在成功后写「已自动更新」记录;网络源(git / npm)更新由 magpie 热加载,更新完直接生效,不需要重启 magpie - 邀请码自动滚 —— 第一次注册带作者的码;之后每注册成功一个新号,就把它自己的码记成下一次要用的(自动模式跟的是「最后一个注册的新号」,不是「最后一个登录的号」)
- 邀请码挂谁:一个开关 —— 供应商编辑器 →「插件选项」→ 「邀请码挂到首选账号」:关(默认)= 自动(跟随最后注册成功的新号的码);开 = 首选(挂 magpie 账号页「首选」那个账号自己的码)。拨完立刻生效,不用重启 magpie。⚠ 只能二选一:magpie 的插件选项只存布尔值,列账号让人挑做不到(见「邀请码」一节);但点登录时登录框会写明这次挂在哪个账号名下(账号名打码)
- 邀请额度看得见 —— 额度窗口多一行「邀请额度
20 人 · 4,000 / 10,000 分」(封顶时显示「已封顶」)。上限只认积分封顶(国际 10,000 / 国内 60,000)——人数不是上限(实测 54 人仍在结算) - 满了自动换上级 —— 上面那个开关开着时,首选账号的邀请积分封顶了,插件自动把上级换成「真实邮箱 + 没封顶 + 剩余额度最多」的账号,继续吃邀请,不用手工切
登录
国际站四条路,国内站三条。 带「验证码」的那几条是纯 HTTP、全程不开浏览器。
| # | 方式 | 你要做什么 | 国际站 | 国内站 | |---|---|---|---|---| | ① | 邮箱验证码 | 填邮箱 → 填 6 位验证码 | 第 1 条 | —(国内站登录页没有邮箱入口) | | ② | 手机号验证码 | 填手机号 → 填 6 位验证码 | 第 2 条 | 第 1 条 | | ③ | 浏览器登录 | 点一下,在弹出的官方页面里用任何方式登 | 第 3 条 | 第 2 条 | | ④ | 登录态(JWT + 组织码) | 从 DevTools 粘两个字段 | 第 4 条 | 第 3 条 |
国际站把邮箱排第一,因为那边邮箱注册的账号更多。
0.3.64 起没有「邀请码」那条登录方式了 —— 邀请码挂谁改成供应商编辑器里的一个开关,见下面「邀请码」一节。
为什么国内站没有邮箱那条? 因为国内站的官方登录页压根没有邮箱入口(只有微信 / 苹果 / 密码 / 手机 / 私有部署),也就没有邮箱注册的账号;而且同一个发信请求在国内站的服务端会回「服务异常,请联系管理员」。摆出来只会让你填完邮箱撞一个看不懂的错。
邮箱/手机验证码两条路是同一套逻辑(插件里就是同一份代码,只是问的字段和调的两个端点不同),不会出现「手机那条修好了、邮箱那条没跟上」。
关于那张旋转验证图
官方登录页上只有一处需要「看图」:一张圆形照片被随机旋转过,要你拖滑块把它转正。它只在一种情况下出现:这个手机号 / 邮箱在平台上还从没注册过。
| 你要加的号 | 会出现旋转图吗 | 你需要做什么 | |---|---|---| | 平台上已有的账号(哪怕第一次加进 magpie) | 不会 —— 服务端直接放行 | 填号码/邮箱 + 填验证码 | | 平台上从没注册过的新号(首次注册) | 会 | 配了识图模型就全自动;没配就自己转一下 |
原理:POST /captcha/generate 对已注册的账号直接回一个 business_token,连图都不给(实测:已注册邮箱 → 免图;换一个没注册过的邮箱 → 给 token + image)。插件用的就是这条通道,所以绝大多数情况下识图模型根本用不上。
真碰上要过图时(新号注册),插件这么办:
- 配了识图模型(magpie 设置 → 识图模型)→ 用它判断「主体自己的上方向指向钟面几点」,换算成拖动角度,自动过掉
- 没配 → 回退到浏览器,打开官方登录页,你自己把图片转正,剩下的插件接住
为什么不瞎猜角度:服务端容差 ±10°,瞎猜命中率只有约 5.6%(20/360),平均要试十几次,而它有「验证提交过于频繁」和「验证次数已超限」两道风控 —— 等不到猜中,先被限流。
为什么不问模型「转了多少度」:实测直接问角度 6 次错 5 次,问「指向钟面几点」3 轮中 2。而且同一张图要问两遍比分歧 —— 有一次两个判官给出 1.7 和 7.5 钟点(相差 174°),那是有人把方向看反了,只能换图重来。
手机号与邮箱的协议差异(给改代码的人)
| | 手机号 | 邮箱 |
|---|---|---|
| 取图 | POST /captcha/generate {account_type:"mobile", mobile, state_code} | 同端点 {account_type:"email", email}(无 state_code) |
| 过验证 | POST /captcha/verify {token, angle, account_type, mobile, state_code} | 同端点,换成 email |
| 发验证码 | POST /v4/user/send-sms {type:"account_login", phone, state_code} | POST /v4/user/send-email {email, type:"account_login"} |
| 换登录态 | POST /v4/user/login,type:"phone_captcha",验证码字段叫 code | POST /v4/user/login-email,验证码字段叫 captcha |
两个 type 都是 "account_login"(填错会回「服务异常,请联系管理员」—— 后端内部炸了,从报错完全看不出是它)。邮箱那条必须走 login-email:往 /v4/user/login 发任何 type 都回「phone 字段是必须的」。
浏览器登录
点第三条第 ③ 个方式时,它先看你平时用的那个浏览器:
① 那边已经登录过 magicrew → 插件直接读它的 localStorage 接上,不开窗口、不用再登一次。
凭据就明文躺在 Local Storage/leveldb 里(Edge / Chrome / Chromium / Brave / 360 / QQ / 搜狗 都行)。
② 没登录过,或者这个账号已经加过 → 插件自己拉起一个窗口:
- 浏览器窗口弹出,停在官方登录页
- 用你平时的方式登进去(手机号 / 密码 / Google / 邮箱验证码 / 飞书 / 钉钉都行)
- 登录完成那一刻它自己就接上了 —— 不用回来点任何按钮,不用开 DevTools
原理:插件不是调用系统浏览器,而是自己起一个 Chromium 内核的浏览器(独立 profile + --remote-debugging-port=0),所以登录成功后能用 CDP 在页面上下文里把它自己的 localStorage 读走,拿到 JWT 和组织码,签完密钥就关窗。
用哪个浏览器? 按「谁更干净」排,不是按名气:
① Chrome / Chromium 自己装的,无企业策略、无强制登录 ← 首选
② 国产 Chromium 系 360 / QQ / 搜狗 / 2345 / 猎豹 / UC / 夸克
③ Edge 垫底(策略最多、最容易被拦住调试端口)前一个起不来(策略禁用调试端口、启动就退出)会自动换下一个,第一个真正打开调试通道的才算数。窗口标题/提示里会写明这次用的是哪个。
每次登录都是一个新的 profile,用完就删。 这是必须的:共用一个 profile 的话,添加第二个账号时窗口一打开,页面里已经躺着上一个账号的凭据 —— 插件会以为登录完成、立刻关窗,而 magpie 拿到的还是旧账号。
为什么零浏览器那两条要自己写协议? magicrew 没有 OAuth 回调通道 —— 登录类型只有十几种、全是「拿凭据换 token」,没有设备码、没有插件授权、没有一次性 ticket。凭据只可能落在三个地方:用户中心的 HTTP 接口(插件走的就是这条)、你自己浏览器的 localStorage、或者插件自己起的那个窗口。
登录态(JWT + 组织码)
不想走上面任何一条的话,手填两个字段:
DevTools → Application → Local Storage → https://www.magicrew.ai
MAGIC:user:authorization → JSON,取 value = JWT
MAGIC:user:organizationCode → JSON,取 value = 组织码(12 位小写字母数字)组织码不能从 JWT 推。JWT 里只有
cus.tenant_id(18 位数字),组织码是另一套短串。缺了它/api/v1/*回2182 用户所在组织不存在,给错了回3035 登录失败。
模型
国内的 GLM、DeepSeek、Qwen、Kimi、MiniMax、MiMo、豆包;国际站再加 Claude、GPT、Gemini 三家。
登录后按账号实时拉 /api/v1/flows/models,账户能选什么就显示什么 —— 下表只列各家最新和热门的那几款:
| 发行商 | 最新 / 热门 | 上下文 | 国内 | 国际 |
|---|---|---|---|---|
| GLM(智谱) | glm-5.3 · glm-5.3-flash | 1M · 256K | ✓ | ✓ |
| DeepSeek | deepseek-v4.1-flash | 1M | ✓ | ✓ |
| DeepSeek | deepseek-v4-pro | 128K | — | ✓ |
| Qwen(阿里) | qwen3.8-max · qwen3.7-plus | 1M | ✓ | ✓ |
| Kimi(月之暗面) | kimi-k3.1-pro | 1M | ✓ | ✓ |
| MiniMax | minimax-m3 · minimax-m3.1-flash | 1M | ✓ | ✓ |
| MiMo(小米) | mimo-v2.6-pro · mimo-v2.6-flash | 1M | ✓ | ✓ |
| 豆包 Seed(字节) | doubao-seed-2.0-pro · doubao-seed-2.0-code | 256K | ✓ | ✓ |
| Claude(Anthropic) | claude-haiku-5.5 | 1M | — | ✓ |
| GPT(OpenAI) | gpt-6-luna · gpt-5.4-mini | 1.05M · 400K | — | ✓ |
| Gemini(Google) | gemini-3.7-flash | 1M | — | ✓ |
全量(含生图、向量、各家历史版本)不进 README —— 装好以后模型选择器里看到的才是账号真实的全部。
用的是 /api/v1/flows/models(网页模型选择器里眼睛能点到的那些),不是 /v1/models —— 后者混着 VIP 锁定、生图、embedding,塞进来用户会选到根本调不动的模型。
上下文按三档取:magpie GUI 里手选 > 模型库(~/.cache/magpie/models.json)> 兜底 1M。这两个接口都不返回 context_length;早先一律填 256K,把 deepseek-v4.1-flash 真实 1M 的窗口砍成四分之一,agent 反而更早拒绝 —— 根因与取舍见 docs/internals.md 第十六节。
推理模型会吃 max_tokens:glm-5.3-flash 给 64 个 token 时 reasoning_content 就吃满、content 是空串。插件把低于 512 的 max_tokens 抬到 512。
两站不是简单叠加:国际站多出 Claude / GPT / Gemini 三家,另有豆包 Seed 1.8 / 2.0-mini / seed-code、Kimi K2.6 / K2.7-code / K3、GLM 5.2、Qwen3.7-max 这些国内没有的档位。
新手奖励
8 项,合计 500 积分,全自动 —— 登录后和每天签到各跑一次,幂等。
| 项 | 分数 | 插件怎么拿 | |---|---|---| | 完成第一次 AI 工作 | 100 | 替你在话题里发一条消息(花掉约 2 积分)—— 服务端只认这个 | | 了解工作台 | 50 | PUT 即到账 | | 了解如何使用 AI PPT | 50 | PUT 即到账 | | AI 录音 | 50 | PUT 即到账 | | 雇佣数字员工 | 50 | PUT 即到账 | | 添加 / 管理技能 | 50 | PUT 即到账 | | 微应用 | 50 | PUT 即到账 | | Magiclaw | 50 | PUT 即到账 |
第 8 项是唯一 PUT 不掉的:PUT /onboarding/tasks/first_ai_work/completion 服务端回 9303「该新人引导任务不支持手动完成」—— 它认死产品内真的跑完过一次对话。所以插件替它发一条消息(走话题的 socket 协议,不开浏览器),这也是邀请奖励的触发条件 —— 被邀请人发过一条消息,邀请人才拿到那笔分。
这道「发消息」有闸门:每个账号一辈子一次(isAutoChatSettled),发出去就落永久标记。所以重复登录、换天签到、重启 magpie 都不会再发第二条、不会再白烧积分。
失败方向是「宁可晚一轮」:查不到判据(比如话题接口抖了一下)时这次不发、不落标记、不计数 —— 消息发出去是花钱且不可撤的。真失败才计数,3 次之后放弃,免得一个永远失败的号每次签到撞一遍。
国际站
/api/v1/onboarding/tasks恒返回空列表 —— 那是「这个账号没被登记进引导计划」,不是「已经领完了」。 但邀请奖励的判据是一样的:官方文案写「被邀请人完成首个任务或对话后,即可获得积分奖励」,所以国际站这条就等于发过一条消息。插件用「有没有话题」判断(不是有没有项目 —— 项目打开工作台就会自动建),没话题就补一条。
邀请码
挂到谁名下,由一个开关决定:供应商编辑器 →「插件选项」→ 「邀请码挂到首选账号」。
| 开关 | 模式 | 新号注册挂到谁 | |---|---|---| | 关(默认) | 自动 | 最后一个注册成功的新号自己的码 —— 每注册一个号,下一个号就挂它,一路滚下去 | | 开 | 首选 | magpie 账号页「首选」那个账号自己的码;它封顶了就自动换一个真实邮箱号 |
拨完立刻生效,不用重启 magpie、不用重新登录。
⚠ 为什么不能像下拉框那样「把账号列出来让你选」:magpie 的插件选项只存布尔值 ——
settings.PluginOptions是map[string]map[string]bool,设置接口POST /api/settings/plugin-option的入参也只有{provider, key, on}。插件的auth.options只能声明一排 Off/On 开关, 装不下「从 N 个账号里挑一个」。想按账号选,只能等 magpie 本体给 options 加枚举类型; 现在能选的两种模式就是上面这两行。
但「挂到谁名下」是看得见的:点登录时,登录框下面那一行会写明这次挂在哪个账号, 比如(真实输出,账号名一律打码):
本次邀请上级:189****051(最后注册的新号)。
本次邀请上级:my****@foxmail.com(最后一次登录 / 签到的号)。
本次邀请上级:作者的码(还没有可用的自有账号)。
本次邀请上级:181****632(magpie 账号页的「首选」)。
本次邀请上级:177****0000(首选已满,自动换的)。这一行是每次点登录现算的(放在 authorize() 的 instructions 里,不是登录方式的名字 ——
名字会被 magpie 在插件加载时缓存住,见 AGENTS 坑 31),所以拨开关、换首选、刚注册完新号,
都会立刻反映出来。
自动模式的具体规则(开关关着时):
① 有「最后注册成功的新号」记录 → 用它的码(那个号被删了才往下走)
② 没有 / 已失效 → 用滚动码(最后一次登录 / 签到刷到的那个)
③ 也没有 → 用作者的码「最后一个注册的新号」只在注册成功那一刻写(验证码登录那条路以「服务端有没有 跳过旋转验证」为准;浏览器 / JWT 那条以「magpie 里第一次见这个 org」为准)。 普通重登、每天签到只会更新滚动码,覆盖不了这个记录 —— 否则重登一下旧号,后面注册的新号就挂到旧号名下了。
两个固定位置:
~/.cache/magpie/magicrew-invite-registered-<站点 id>.json {"code":"…","org":"…","at":"…"} ← 注册成功才写
~/.cache/magpie/magicrew-invite-<站点 id>.json {"code":"…","at":"…"} ← 滚动码,只做兜底⚠ 注册本身不发分。被邀请人完成首个任务 / 对话之后,双方才各拿一笔 (国际 200 / 200,国内 1,000 / 1,000),而且是按天批次结算 —— 奖励记录里的
scheduled_at是日期(2026-10-30 00:00:00),不是发放时刻, 当天注册的号通常要等当天稍晚或次日那一批。所以「今天注册、今天没到账」是正常的, 别据此判断有没有送分。
③ 不是每次都能成。
/api/v1/invitations/info只认带device_id的 JWT —— 同一个账号同一时刻签的两把,差别就在这一个字段:桌面客户端 438 字符(device_id= 64 位 hex)能拿到码,网页版 350 字符(device_id空)回2155 用户不存在。 密码登录走 API、带 device 指纹,滚得动;浏览器登录和验证码登录拿到的是网页那把,滚不动 —— 那就保留旧值,不报错、不挡登录。
奖励口径(上游前端常量,2026-10-27):
| | 每次注册 | 每次订阅 | 邀请注册封顶 | 总额封顶 | |---|---|---|---|---| | 国内 | 1,000 | 3,000 | 60,000 | 300,000 | | 国际 | 200 | 500 | 10,000 | 30,000 |
安装
在 magpie 的 插件 → 发现 搜 magicrew,点安装(npm 上的包名是 magicrew-auth)。
装完选站点,然后挑一条登录路:
- 最省事(推荐) → 点**「浏览器登录」**:它先看你本机浏览器有没有登过,没有就自己拉一个窗口起来,你在里面用任何方式登(连验证码都不用填)
- 国际站全自动登录 → 点**「邮箱验证码」**(排第一):填邮箱 → 填验证码。已有账号的话,中间那张旋转图不会出现
- 国内站全自动登录 → 点**「手机号验证码」**(排第一):同理
命令行
# npm(推荐:magpie 按 version 检测更新,有新版本会提示)
magpie plugin add magicrew-auth
# 从仓库源码(拿最新提交,不走 npm;更新按 commit,要手动 update)
magpie plugin add github:MYCF711/magpie-magicrew-auth两条路的卡片标题不一样:npm 装 → 卡片标题就是包名
magicrew-auth;git 装 → 取package.json的name,也就是Magicrew。功能一样,只是标题。 从旧包名magpie-magicrew-auth过来的,先magpie plugin rm magpie-magicrew-auth再装。
装完确认:
magpie plugin list
# magicrew-auth on
# magicrew (超级麦吉, 27 models) signed in as ...
# magicrew-intl (MagiCrew, 49 models) signed in as ...两个供应商各一行 —— 这就是「不聚合」的样子。
常见问题
两个站要装两次吗? 不用。一个包导出两个插件,装一次两个供应商都在,各自登录。
邮箱验证码能注册新号吗? 能 —— 但只有国际站有这条方法。这条链和手机号那条一样带 auto_register,第一次用的邮箱会自动建号,而且注册请求里带着邀请码。新号注册那一次会要求过旋转图(服务端的规定)—— 配了识图模型就全自动,没配就自己转一下。
新号登录成功后如果 Magic 侧还没有组织(
auth/status回3102 用户尚未创建账号),插件会自动建第一个组织:POST /v4/user/organizations({name:"个人组织", industry_type:"其他", register_code:<邀请码>, logo:{}}),再用Organization-Code绑定一次。邀请码就是这一步消费的 —— 没有这一步,界面会停在「登录成功但拿不到组织码」。
为什么国内站没有「邮箱验证码」? 因为国内站的官方登录页就没有邮箱入口(只有微信 / 苹果 / 密码 / 手机 / 私有部署),也就没有邮箱注册的账号;而且同一个发信请求在国内站服务端回「服务异常,请联系管理员」。所以国内站只给三条路:手机号验证码 / 浏览器登录 / 手填登录态。
旋转验证图能不能不出现? 加已有的账号时它本来就不出现(服务端直接放行)。只有注册全新账号才需要过它。
看图那一步为什么有点慢? 因为识图模型是推理模型的话,它的「思考」也算 token —— 实测这个模型的思考链能写到三千多字。插件已经做了两件事:让它跑最低思考档(reasoning_effort: low,实测耗时 −59%、token −57%),以及两个判官并行问(耗时等于较慢的那一次)。想更快,就在 magpie 设置里换一个非推理的视觉模型 —— 那是唯一能真正「不思考」的办法,参数关不掉。
我在自己浏览器里登了 magicrew,插件能自动认出来吗? 能。点「浏览器登录」时插件先去本机 Edge / Chrome / Chromium / Brave / 360 / QQ / 搜狗 等浏览器的 localStorage 里找这个站点的登录态,找到就直接接上,不弹窗口。读不到、或者这个账号已经加过,才会开窗口让你登新的。
点了「浏览器登录」,网页上明明登好并跳到 agent 界面了,magpie 里却一直转圈等? 0.3.12 及更早会这样:插件拉起浏览器的判断依赖一个写死的文件名 msedge.exe,而有些机器上微软落盘的名字是 Microsoft Edge.exe(带空格、带大写;落盘名随安装方式和版本变),于是每次都判定「本机没装浏览器」,永远走「让你去 Console 粘一行」的降级路径 —— 而你不知道有这一步。0.3.15 起:两种落盘名都认、把 360 / QQ / 搜狗 等国产 Chromium 也纳入候选、并且逐个试启动(第一个真能开调试通道的才用)。判据在 ~/.cache/magpie/magicrew-login-<站点>.log,出问题先看它最后一行。
添加第二个账号时,网页闪一下就关了、magpie 里也没多出账号? 0.3.5 及更早会这样:登录浏览器复用同一个 profile,第二个窗口一打开就读到上一个账号的凭据,于是立刻「登录成功」并关窗 —— 加到的是已有账号。0.3.6 起每次登录用一个一次性 profile(关窗即删),不会再串号。
npm 上叫 magicrew-auth,为什么卡片显示 Magicrew? 卡片标题取包内 package.json 的 name(Magicrew),而 npm 拒绝含大写字母的新包名。发布时用 publish-npm.mjs 临时换成 magicrew-auth、发完还原 —— 所以 npm 页面是小写包名,git 源装出来是 Magicrew。功能完全一样。
验证码登录报「验证码已发送」但没收到? 先看是不是发到别的账号上了(同一个手机号/邮箱在两个站点是两套账号)。再确认这个号是不是还没注册 —— 那种情况要先过旋转图,图没过,短信 / 邮件根本不会发出去,界面会直接报「旋转验证连试 4 张图都没过」。
一个账号积分用完了,会换到另一个还有积分的账号吗? 会。0.3.26 起插件把上游的 400「可用积分已不足」改写成 402 Payment Required —— magpie 对 402 一律视为可重试:先 rest 这个账号 30 分钟,再问同 provider 的下一个账号;如果整个组都没有额度,才会把错误交给客户端。
为什么模型列表会变? 因为清单是从 /api/v1/flows/models 实时拉的。订阅档位变了、平台方上下架变了,清单就跟着变 —— 插件里没有需要维护的模型表。
国际站 /v1/chat/completions 报 500,22 字节的纯文本? 那是缺 organization-code 请求头。国内站不需要,国际站强制。插件按站点自动带。
glm-5.3-flash 回复是空的? 推理 token 吃满了 max_tokens。插件已经把低于 512 的抬到 512;还是空就把 max_tokens 再调大。
Android / macOS 也支持吗? 插件只调 HTTP 接口,跟客户端无关。设备上能登录,这里就能用。
参考源
| 来源 | 用在哪 |
|---|---|
| dtyq/magic(Apache 2.0 + 附加限制) | 接口契约:types/login.ts 的 invite_code、LoginService.ts 关于「邀请码在创建组织时消费」的注释、constants/api.ts 的错误码 |
| @magpie-community/opencode-workbuddy-auth(MIT) | 「一个包导出多个 XxxAuthPlugin」的写法:每个站点一个具名导出,各成一个供应商 |
| @magpie-community/opencode-qoder-auth(MIT) | 同上,四站点四导出的对照例 |
| magpie-plugin-template(MIT) | README / CHANGELOG / NOTICE 的骨架与硬规则 |
本插件不复制上游代码,只调它的公开 HTTP 接口。完整版权声明见 NOTICE.md。
更新记录:
CHANGELOG.md
许可
MIT。
邀请名额与自动切换
额度窗口里那一行「邀请额度」写的是「已邀几个人 · 已经发出多少分」。上游不给上限 ——
/api/v1/invitations/info 只回已邀请人数(invite_count),17 条候选路径(/limit、
/config、/statistics …)全 404。所以额度按官方奖励口径换算:
| 站点 | 每次邀请奖励 | 邀请积分封顶 | 折算人数(仅供参考) | |---|---|---|---| | 国内 | 1,000 | 60,000 | 60 | | 国际 | 200 | 10,000 | 50 |
判满只认「积分封顶」,人数不是上限(2026-10-30 实测修正)。官方文案讲的是
「邀请获得积分上限 +10,000」,不是「最多邀请 50 人」;50 只是 10,000 ÷ 200 的折算值。
反例:国际 [email protected] 已邀 54 人(超过折算的 50),10-29 批次仍照常结算奖励。
⇒ 默认 满 = 已赚积分 ≥ 封顶;想按人数判(保守)就在
~/.cache/magpie/magicrew-invite-quota-config-<站点>.json 配 {"countLimit":50}。
⚠ 注册不发分。被邀请人完成首个任务 / 对话之后才发 —— 所以「邀请 54 人、只结算 10 笔」 是常态,不是「有人在白送」。
开关开着(首选模式)时满了会自动换人:
- 供应商编辑器里「邀请码挂到首选账号」那个开关开着(关着时这一步一个请求都不打), 且当前上级的邀请积分已经封顶;
- 插件在本站点账号里挑「真实邮箱 + 没封顶 + 剩余额度最多」的;
- 把邀请上级改成它,写一行日志到
~/.cache/magpie/magicrew-invite-switch-<站点>.log。
触发点是插件加载 20 秒后、签到(每天一次)、每次登录成功,带 10 分钟节流 —— 不会把上游打疼。
「真实邮箱」只看后缀白名单(qq.com / 163.com / gmail.com / 189.cn …),不看黑名单:
temp-mail.io 的域名是动态的,黑名单永远追不上。自建域名邮箱用配置追加:
~/.cache/magpie/magicrew-invite-quota-config-<站点>.json的{"realMailDomains":["yourcorp.com"]}。
⚠ 国内站不会自动切:那边没有邮箱登录,账号全是打码手机号(
189****051),
按邮箱白名单永远判假。要国内站也切,显式打开同文件的
{"allowPhoneAccounts":true}(默认关)。
切换不动 magpie 账号页的「首选」(
logins.json的first)—— 插件对 magpie 目录只有读的份,
写文件未必被重新读进内存,还会顺手改变模型调用的路由账号。「首选模式」在这个包里本来
就是指邀请策略的
fixed,换它的指向就够了。
