magicrew-auth 0.3.35 → 0.3.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +3 -3
- package/CHANGELOG.md +26 -0
- package/README.md +307 -307
- package/index.mjs +4 -32
- package/package.json +2 -10
- package/src/hooks/methods.mjs +674 -658
- package/src/hooks/usage.mjs +152 -164
- package/src/store.mjs +1 -106
- package/page/app.js +0 -252
- package/page/index.html +0 -53
package/README.md
CHANGED
|
@@ -1,307 +1,307 @@
|
|
|
1
|
-
# 超级麦吉 / MagiCrew for magpie
|
|
2
|
-
|
|
3
|
-
**一个包,两个供应商:国内的 GLM / DeepSeek / Qwen / Kimi,国际再加 Claude / GPT / Gemini —— 原样走它的 OpenAI 兼容网关。**
|
|
4
|
-
|
|
5
|
-
超级麦吉(`letsmagic.cn`)和 MagiCrew(`magicrew.ai`)是同一产品的两套云。这个插件把它们各接成一个独立供应商 —— 在 magpie 的供应商列表、用量概览、模型目录里各占一行,不聚合、不互相覆盖登录态。
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
国内 超级麦吉 www.letsmagic.cn GLM / DeepSeek / Qwen / Kimi / MiniMax / MiMo / 豆包
|
|
9
|
-
国际 MagiCrew www.magicrew.ai 上面全部,再加 Claude / GPT / Gemini
|
|
10
|
-
协议 OpenAI Chat Completions —— 原生,不是翻译出来的
|
|
11
|
-
计费 积分(预充值,不是月度配额)
|
|
12
|
-
凭证 登录一次 30 天全自动:api_key 两小时自续,refresh_token 自滚
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
> 模型清单是 2026-10-27 从两站 `GET /api/v1/flows/models` 拉下来核对的。清单会随订阅档位和平台上下架变 —— 所以插件里**没有一张写死的模型清单**,账户能选什么就显示什么。
|
|
16
|
-
|
|
17
|
-
> **改代码 / 发版本之前**:先看 [AGENTS.md](./AGENTS.md) —— 按「你在哪一步」给阅读顺序,
|
|
18
|
-
> 外加本仓库那些**会静默出错**的坑(症状 → 判据 → 出处)。交付与发版逐条走
|
|
19
|
-
> [CHECKLIST.md](./CHECKLIST.md) 的两张表。发布是**七步**,`git push` 只是第 4 步。
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## 功能
|
|
24
|
-
|
|
25
|
-
- **两个供应商分得开** —— 国内、国际各一行,图标、名字、模型、积分、登录态全部独立
|
|
26
|
-
- **登录全程不开浏览器** —— 国际站有**邮箱验证码**和**手机号验证码**两条纯 HTTP 路;国内站有手机号验证码。另外两条(浏览器登录 / 手填登录态)谁都能用
|
|
27
|
-
- **已有的账号加进来,只填两次就完事** —— 填邮箱(或手机号)→ 填验证码。**那张「拖动滑块使图片角度为正」的旋转图根本不会出现**:服务端对已注册的账号直接放行,插件用的就是这条通道
|
|
28
|
-
- **本机浏览器登过就直接认** —— 你平时那个 Edge / Chrome / Brave 里登过 magicrew,点「浏览器登录」时插件读它的 localStorage 接上:不开窗口、不用重登
|
|
29
|
-
- **模型跟着账号走** —— 每次登录后按 `/api/v1/flows/models` 实时拉,账户当前能选什么就展示什么,生图和 embedding 不会混进来
|
|
30
|
-
- **积分算得准** —— 余额读的是 `/api/v1/quota/points/total`;空号就显示空,不会被优先派活
|
|
31
|
-
- **积分耗尽自动换号** —— 上游用 HTTP 400 报「可用积分已不足」时,插件把它改写为语义正确的 **402 Payment Required**,magpie 会 rest 这个账号并继续问同 provider 的下一个账号 / 路由组的下一个成员
|
|
32
|
-
- **登录一次管 30 天** —— 网页 JWT 顶 30 天,`mgw_` api_key 每 2 小时自续,refresh_token 每次续期时自滚
|
|
33
|
-
- **新手奖励 8 项全自动** —— 国内站 8 项 500 积分全部拿得到;第 8 项(完成第一次 AI 工作)由插件替你发一条消息,花掉约 2 积分
|
|
34
|
-
- **默认开启自动签到** —— 安装后自动把本 provider 的插件签到设为开(`pluginCheckins` 缺省时补 true;你手动关掉的不会被改回)
|
|
35
|
-
- **自动更新** —— 复用 magpie 的插件更新机制:发现自己的新版本后调 `magpie plugin update`,并在成功后写「已自动更新」记录;更新完要重启一次 magpie 才会加载新代码
|
|
36
|
-
- **邀请码自动滚** —— 第一次注册带作者的码,之后每次登录都记住「上一个登录账号」的码,拿到新的就覆盖旧的
|
|
37
|
-
- **邀请上级可固定** ——
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## 登录
|
|
42
|
-
|
|
43
|
-
**国际站四条路,国内站三条。** 带「验证码」的那两条是**纯 HTTP、全程不开浏览器** —— 你填一个邮箱或手机号,剩下的插件自己走完。
|
|
44
|
-
|
|
45
|
-
| # | 方式 | 你要做什么 | 国际站 | 国内站 |
|
|
46
|
-
|---|---|---|---|---|
|
|
47
|
-
| ① | **邮箱验证码** | 填邮箱 → 填 6 位验证码 | 第 1 条 | —(国内站登录页没有邮箱入口) |
|
|
48
|
-
| ② | **手机号验证码** | 填手机号 → 填 6 位验证码 | 第 2 条 | 第 1 条 |
|
|
49
|
-
| ③ | **浏览器登录** | 点一下,在弹出的官方页面里用任何方式登 | 第 3 条 | 第 2 条 |
|
|
50
|
-
| ④ | **登录态(JWT + 组织码)** | 从 DevTools 粘两个字段 | 第 4 条 | 第 3 条 |
|
|
51
|
-
|
|
52
|
-
**国际站把邮箱排第一**,因为那边邮箱注册的账号更多。
|
|
53
|
-
|
|
54
|
-
**为什么国内站没有邮箱那条?** 因为国内站的官方登录页压根没有邮箱入口(只有微信 / 苹果 / 密码 / 手机 / 私有部署),也就没有邮箱注册的账号;而且同一个发信请求在国内站的服务端会回「服务异常,请联系管理员」。摆出来只会让你填完邮箱撞一个看不懂的错。
|
|
55
|
-
|
|
56
|
-
两条验证码路是同一套逻辑(插件里就是同一份代码,只是问的字段和调的两个端点不同),不会出现「手机那条修好了、邮箱那条没跟上」。
|
|
57
|
-
|
|
58
|
-
### 关于那张旋转验证图
|
|
59
|
-
|
|
60
|
-
官方登录页上只有一处需要「看图」:一张圆形照片被随机旋转过,要你拖滑块把它转正。**它只在一种情况下出现:这个手机号 / 邮箱在平台上还从没注册过。**
|
|
61
|
-
|
|
62
|
-
| 你要加的号 | 会出现旋转图吗 | 你需要做什么 |
|
|
63
|
-
|---|---|---|
|
|
64
|
-
| 平台上**已有**的账号(哪怕第一次加进 magpie) | **不会** —— 服务端直接放行 | 填号码/邮箱 + 填验证码 |
|
|
65
|
-
| 平台上**从没注册过**的新号(首次注册) | 会 | 配了识图模型就全自动;没配就自己转一下 |
|
|
66
|
-
|
|
67
|
-
原理:`POST /captcha/generate` 对已注册的账号**直接回一个 `business_token`**,连图都不给(实测:已注册邮箱 → 免图;换一个没注册过的邮箱 → 给 token + image)。插件用的就是这条通道,所以**绝大多数情况下识图模型根本用不上**。
|
|
68
|
-
|
|
69
|
-
真碰上要过图时(新号注册),插件这么办:
|
|
70
|
-
|
|
71
|
-
1. **配了识图模型**(magpie 设置 → 识图模型)→ 用它判断「主体自己的上方向指向钟面几点」,换算成拖动角度,自动过掉
|
|
72
|
-
2. **没配** → 回退到浏览器,打开官方登录页,你自己把图片转正,剩下的插件接住
|
|
73
|
-
|
|
74
|
-
> 为什么不瞎猜角度:服务端容差 ±10°,瞎猜命中率只有约 5.6%(20/360),平均要试十几次,而它有「验证提交过于频繁」和「验证次数已超限」两道风控 —— 等不到猜中,先被限流。
|
|
75
|
-
>
|
|
76
|
-
> 为什么不问模型「转了多少度」:实测直接问角度 6 次错 5 次,问「指向钟面几点」3 轮中 2。而且同一张图要问两遍比分歧 —— 有一次两个判官给出 1.7 和 7.5 钟点(相差 174°),那是有人把方向看反了,只能换图重来。
|
|
77
|
-
|
|
78
|
-
### 手机号与邮箱的协议差异(给改代码的人)
|
|
79
|
-
|
|
80
|
-
| | 手机号 | 邮箱 |
|
|
81
|
-
|---|---|---|
|
|
82
|
-
| 取图 | `POST /captcha/generate` `{account_type:"mobile", mobile, state_code}` | 同端点 `{account_type:"email", email}`(**无** `state_code`) |
|
|
83
|
-
| 过验证 | `POST /captcha/verify` `{token, angle, account_type, mobile, state_code}` | 同端点,换成 `email` |
|
|
84
|
-
| 发验证码 | `POST /v4/user/send-sms` `{type:"account_login", phone, state_code}` | `POST /v4/user/send-email` `{email, type:"account_login"}` |
|
|
85
|
-
| 换登录态 | `POST /v4/user/login`,`type:"phone_captcha"`,验证码字段叫 **`code`** | `POST /v4/user/login-email`,验证码字段叫 **`captcha`** |
|
|
86
|
-
|
|
87
|
-
两个 `type` 都是 `"account_login"`(填错会回「服务异常,请联系管理员」—— 后端内部炸了,从报错完全看不出是它)。邮箱那条**必须**走 `login-email`:往 `/v4/user/login` 发任何 type 都回「phone 字段是必须的」。
|
|
88
|
-
|
|
89
|
-
### 浏览器登录
|
|
90
|
-
|
|
91
|
-
点第三条第 ③ 个方式时,它先看你平时用的那个浏览器:
|
|
92
|
-
|
|
93
|
-
**① 那边已经登录过 magicrew** → 插件直接读它的 localStorage 接上,**不开窗口、不用再登一次**。
|
|
94
|
-
凭据就明文躺在 `Local Storage/leveldb` 里(Edge / Chrome / Chromium / Brave / 360 / QQ / 搜狗 都行)。
|
|
95
|
-
|
|
96
|
-
**② 没登录过,或者这个账号已经加过** → 插件自己拉起一个窗口:
|
|
97
|
-
|
|
98
|
-
1. 浏览器窗口弹出,停在官方登录页
|
|
99
|
-
2. 用你平时的方式登进去(手机号 / 密码 / Google / 邮箱验证码 / 飞书 / 钉钉都行)
|
|
100
|
-
3. **登录完成那一刻它自己就接上了** —— 不用回来点任何按钮,不用开 DevTools
|
|
101
|
-
|
|
102
|
-
原理:插件不是调用系统浏览器,而是自己起一个 Chromium 内核的浏览器(独立 profile + `--remote-debugging-port=0`),所以登录成功后能用 CDP 在页面上下文里把它自己的 localStorage 读走,拿到 JWT 和组织码,签完密钥就关窗。
|
|
103
|
-
|
|
104
|
-
**用哪个浏览器?** 按「谁更干净」排,不是按名气:
|
|
105
|
-
|
|
106
|
-
```
|
|
107
|
-
① Chrome / Chromium 自己装的,无企业策略、无强制登录 ← 首选
|
|
108
|
-
② 国产 Chromium 系 360 / QQ / 搜狗 / 2345 / 猎豹 / UC / 夸克
|
|
109
|
-
③ Edge 垫底(策略最多、最容易被拦住调试端口)
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
前一个起不来(策略禁用调试端口、启动就退出)会自动换下一个,**第一个真正打开调试通道的才算数**。窗口标题/提示里会写明这次用的是哪个。
|
|
113
|
-
|
|
114
|
-
**每次登录都是一个新的 profile,用完就删。** 这是必须的:共用一个 profile 的话,添加第二个账号时窗口一打开,页面里已经躺着上一个账号的凭据 —— 插件会以为登录完成、立刻关窗,而 magpie 拿到的还是旧账号。
|
|
115
|
-
|
|
116
|
-
> **为什么零浏览器那两条要自己写协议?** magicrew 没有 OAuth 回调通道 —— 登录类型只有十几种、全是「拿凭据换 token」,没有设备码、没有插件授权、没有一次性 ticket。凭据只可能落在三个地方:用户中心的 HTTP 接口(插件走的就是这条)、你自己浏览器的 localStorage、或者插件自己起的那个窗口。
|
|
117
|
-
|
|
118
|
-
### 登录态(JWT + 组织码)
|
|
119
|
-
|
|
120
|
-
不想走上面任何一条的话,手填两个字段:
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
DevTools → Application → Local Storage → https://www.magicrew.ai
|
|
124
|
-
MAGIC:user:authorization → JSON,取 value = JWT
|
|
125
|
-
MAGIC:user:organizationCode → JSON,取 value = 组织码(12 位小写字母数字)
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
> 组织码**不能从 JWT 推**。JWT 里只有 `cus.tenant_id`(18 位数字),组织码是另一套短串。缺了它 `/api/v1/*` 回 `2182 用户所在组织不存在`,给错了回 `3035 登录失败`。
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
## 模型
|
|
133
|
-
|
|
134
|
-
**国内的 GLM、DeepSeek、Qwen、Kimi、MiniMax、MiMo、豆包;国际站再加 Claude、GPT、Gemini 三家。**
|
|
135
|
-
|
|
136
|
-
登录后按账号实时拉 `/api/v1/flows/models`,账户能选什么就显示什么 —— 下表只列各家**最新**和**热门**的那几款:
|
|
137
|
-
|
|
138
|
-
| 发行商 | 最新 / 热门 | 上下文 | 国内 | 国际 |
|
|
139
|
-
|---|---|---|---|---|
|
|
140
|
-
| GLM(智谱) | `glm-5.3` · `glm-5.3-flash` | 1M · 256K | ✓ | ✓ |
|
|
141
|
-
| DeepSeek | `deepseek-v4.1-flash` | 1M | ✓ | ✓ |
|
|
142
|
-
| DeepSeek | `deepseek-v4-pro` | 128K | — | ✓ |
|
|
143
|
-
| Qwen(阿里) | `qwen3.8-max` · `qwen3.7-plus` | 1M | ✓ | ✓ |
|
|
144
|
-
| Kimi(月之暗面) | `kimi-k3.1-pro` | 1M | ✓ | ✓ |
|
|
145
|
-
| MiniMax | `minimax-m3` · `minimax-m3.1-flash` | 1M | ✓ | ✓ |
|
|
146
|
-
| MiMo(小米) | `mimo-v2.6-pro` · `mimo-v2.6-flash` | 1M | ✓ | ✓ |
|
|
147
|
-
| 豆包 Seed(字节) | `doubao-seed-2.0-pro` · `doubao-seed-2.0-code` | 256K | ✓ | ✓ |
|
|
148
|
-
| Claude(Anthropic) | `claude-haiku-5.5` | 1M | — | ✓ |
|
|
149
|
-
| GPT(OpenAI) | `gpt-6-luna` · `gpt-5.4-mini` | 1.05M · 400K | — | ✓ |
|
|
150
|
-
| Gemini(Google) | `gemini-3.7-flash` | 1M | — | ✓ |
|
|
151
|
-
|
|
152
|
-
全量(含生图、向量、各家历史版本)不进 README —— 装好以后模型选择器里看到的才是账号真实的全部。
|
|
153
|
-
|
|
154
|
-
用的是 `/api/v1/flows/models`(网页模型选择器里眼睛能点到的那些),不是 `/v1/models` —— 后者混着 VIP 锁定、生图、embedding,塞进来用户会选到根本调不动的模型。
|
|
155
|
-
|
|
156
|
-
上下文按三档取:magpie GUI 里手选 > 模型库(`~/.cache/magpie/models.json`)> 兜底 1M。这两个接口都不返回 `context_length`;早先一律填 256K,把 `deepseek-v4.1-flash` 真实 1M 的窗口砍成四分之一,agent 反而更早拒绝 —— 根因与取舍见 `docs/internals.md` 第十六节。
|
|
157
|
-
|
|
158
|
-
推理模型会吃 `max_tokens`:`glm-5.3-flash` 给 64 个 token 时 `reasoning_content` 就吃满、`content` 是空串。插件把低于 512 的 `max_tokens` 抬到 512。
|
|
159
|
-
|
|
160
|
-
两站不是简单叠加:国际站多出 Claude / GPT / Gemini 三家,另有豆包 Seed 1.8 / 2.0-mini / seed-code、Kimi K2.6 / K2.7-code / K3、GLM 5.2、Qwen3.7-max 这些国内没有的档位。
|
|
161
|
-
|
|
162
|
-
---
|
|
163
|
-
|
|
164
|
-
## 新手奖励
|
|
165
|
-
|
|
166
|
-
**8 项,合计 500 积分,全自动 —— 登录后和每天签到各跑一次,幂等。**
|
|
167
|
-
|
|
168
|
-
| 项 | 分数 | 插件怎么拿 |
|
|
169
|
-
|---|---|---|
|
|
170
|
-
| 完成第一次 AI 工作 | 100 | **替你在话题里发一条消息**(花掉约 2 积分)—— 服务端只认这个 |
|
|
171
|
-
| 了解工作台 | 50 | PUT 即到账 |
|
|
172
|
-
| 了解如何使用 AI PPT | 50 | PUT 即到账 |
|
|
173
|
-
| AI 录音 | 50 | PUT 即到账 |
|
|
174
|
-
| 雇佣数字员工 | 50 | PUT 即到账 |
|
|
175
|
-
| 添加 / 管理技能 | 50 | PUT 即到账 |
|
|
176
|
-
| 微应用 | 50 | PUT 即到账 |
|
|
177
|
-
| Magiclaw | 50 | PUT 即到账 |
|
|
178
|
-
|
|
179
|
-
第 8 项是唯一 PUT 不掉的:`PUT /onboarding/tasks/first_ai_work/completion` 服务端回 `9303「该新人引导任务不支持手动完成」`—— 它认死产品内真的跑完过一次对话。所以插件替它**发一条消息**(走话题的 socket 协议,不开浏览器),这也是**邀请奖励的触发条件** —— 被邀请人发过一条消息,邀请人才拿到那笔分。
|
|
180
|
-
|
|
181
|
-
这道「发消息」有闸门:**每个账号一辈子一次**(`isAutoChatSettled`),发出去就落永久标记。所以重复登录、换天签到、重启 magpie 都不会再发第二条、不会再白烧积分。
|
|
182
|
-
|
|
183
|
-
失败方向是「宁可晚一轮」:查不到判据(比如话题接口抖了一下)时这次不发、不落标记、不计数 —— 消息发出去是花钱且不可撤的。真失败才计数,3 次之后放弃,免得一个永远失败的号每次签到撞一遍。
|
|
184
|
-
|
|
185
|
-
> 国际站 `/api/v1/onboarding/tasks` 恒返回空列表 —— 那是「这个账号没被登记进引导计划」,不是「已经领完了」。
|
|
186
|
-
> 但邀请奖励的判据是一样的:官方文案写「被邀请人完成首个任务或对话后,即可获得积分奖励」,所以国际站这条就等于**发过一条消息**。插件用「有没有话题」判断(不是有没有项目 —— 项目打开工作台就会自动建),没话题就补一条。
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## 邀请码
|
|
191
|
-
|
|
192
|
-
只一条规则,不需要你选任何东西:
|
|
193
|
-
|
|
194
|
-
```
|
|
195
|
-
① 固定位置有记录 → 用记录里那个
|
|
196
|
-
② 没有记录 → 用作者的码
|
|
197
|
-
③ 登录成功后 → 查这个账号自己的码 → 覆盖写回
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
效果:第一次注册带作者的码,之后每次都用「上一个登录成功的账号」的码,一路滚下去。
|
|
201
|
-
|
|
202
|
-
固定位置:
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
~/.cache/magpie/magicrew-invite-<站点 id>.json {"code":"...","at":"..."}
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
> ③ 不是每次都能成。`/api/v1/invitations/info` 只认带 `device_id` 的 JWT —— 同一个账号同一时刻签的两把,差别就在这一个字段:桌面客户端 438 字符(`device_id` = 64 位 hex)能拿到码,网页版 350 字符(`device_id` 空)回 `2155 用户不存在`。
|
|
209
|
-
> 密码登录走 API、带 device 指纹,滚得动;浏览器登录和验证码登录拿到的是网页那把,滚不动 —— 那就保留旧值,不报错、不挡登录。
|
|
210
|
-
|
|
211
|
-
奖励口径(上游前端常量,2026-10-27):
|
|
212
|
-
|
|
213
|
-
| | 每次注册 | 每次订阅 | 邀请注册封顶 | 总额封顶 |
|
|
214
|
-
|---|---|---|---|---|
|
|
215
|
-
| 国内 | 1,000 | 3,000 | 60,000 | 300,000 |
|
|
216
|
-
| 国际 | 200 | 500 | 10,000 | 30,000 |
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## 安装
|
|
221
|
-
|
|
222
|
-
在 magpie 的 **插件 → 发现** 搜 `magicrew`,点**安装**(npm 上的包名是 `magicrew-auth`)。
|
|
223
|
-
|
|
224
|
-
装完选站点,然后挑一条登录路:
|
|
225
|
-
|
|
226
|
-
- **最省事(推荐)** → 点**「浏览器登录」**:它先看你本机浏览器有没有登过,没有就自己拉一个窗口起来,你在里面用任何方式登(连验证码都不用填)
|
|
227
|
-
- **国际站全自动登录** → 点**「邮箱验证码」**(排第一):填邮箱 → 填验证码。已有账号的话,中间那张旋转图不会出现
|
|
228
|
-
- **国内站全自动登录** → 点**「手机号验证码」**(排第一):同理
|
|
229
|
-
|
|
230
|
-
### 命令行
|
|
231
|
-
|
|
232
|
-
```bash
|
|
233
|
-
# npm(推荐:magpie 按 version 检测更新,有新版本会提示)
|
|
234
|
-
magpie plugin add magicrew-auth
|
|
235
|
-
|
|
236
|
-
# 从仓库源码(拿最新提交,不走 npm;更新按 commit,要手动 update)
|
|
237
|
-
magpie plugin add github:MYCF711/magpie-magicrew-auth
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
> **两条路的卡片标题不一样**:npm 装 → 卡片标题就是包名 `magicrew-auth`;git 装 → 取 `package.json` 的 `name`,也就是 **`Magicrew`**。功能一样,只是标题。
|
|
241
|
-
> 从旧包名 `magpie-magicrew-auth` 过来的,先 `magpie plugin rm magpie-magicrew-auth` 再装。
|
|
242
|
-
|
|
243
|
-
装完确认:
|
|
244
|
-
|
|
245
|
-
```bash
|
|
246
|
-
magpie plugin list
|
|
247
|
-
# magicrew-auth on
|
|
248
|
-
# magicrew (超级麦吉, 27 models) signed in as ...
|
|
249
|
-
# magicrew-intl (MagiCrew, 49 models) signed in as ...
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
两个供应商各一行 —— 这就是「不聚合」的样子。
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
## 常见问题
|
|
257
|
-
|
|
258
|
-
**两个站要装两次吗?** 不用。一个包导出两个插件,装一次两个供应商都在,各自登录。
|
|
259
|
-
|
|
260
|
-
**邮箱验证码能注册新号吗?** 能 —— 但**只有国际站有这条方法**。这条链和手机号那条一样带 `auto_register`,第一次用的邮箱会自动建号,而且注册请求里带着邀请码。新号注册那一次会要求过旋转图(服务端的规定)—— 配了识图模型就全自动,没配就自己转一下。
|
|
261
|
-
|
|
262
|
-
**为什么国内站没有「邮箱验证码」?** 因为国内站的官方登录页就没有邮箱入口(只有微信 / 苹果 / 密码 / 手机 / 私有部署),也就没有邮箱注册的账号;而且同一个发信请求在国内站服务端回「服务异常,请联系管理员」。所以国内站只给三条路:手机号验证码 / 浏览器登录 / 手填登录态。
|
|
263
|
-
|
|
264
|
-
**旋转验证图能不能不出现?** 加**已有**的账号时它本来就不出现(服务端直接放行)。只有注册全新账号才需要过它。
|
|
265
|
-
|
|
266
|
-
**看图那一步为什么有点慢?** 因为识图模型是**推理模型**的话,它的「思考」也算 token —— 实测这个模型的思考链能写到三千多字。插件已经做了两件事:让它跑最低思考档(`reasoning_effort: low`,实测耗时 −59%、token −57%),以及**两个判官并行**问(耗时等于较慢的那一次)。想更快,就在 magpie 设置里换一个**非推理**的视觉模型 —— 那是唯一能真正「不思考」的办法,参数关不掉。
|
|
267
|
-
|
|
268
|
-
**我在自己浏览器里登了 magicrew,插件能自动认出来吗?** 能。点「浏览器登录」时插件先去本机 Edge / Chrome / Chromium / Brave / 360 / QQ / 搜狗 等浏览器的 localStorage 里找**这个站点**的登录态,找到就直接接上,不弹窗口。读不到、或者这个账号已经加过,才会开窗口让你登新的。
|
|
269
|
-
|
|
270
|
-
**点了「浏览器登录」,网页上明明登好并跳到 agent 界面了,magpie 里却一直转圈等?** 0.3.12 及更早会这样:插件拉起浏览器的判断依赖一个写死的文件名 `msedge.exe`,而有些机器上微软落盘的名字是 **`Microsoft Edge.exe`**(带空格、带大写;落盘名随安装方式和版本变),于是每次都判定「本机没装浏览器」,永远走「让你去 Console 粘一行」的降级路径 —— 而你不知道有这一步。0.3.15 起:两种落盘名都认、把 360 / QQ / 搜狗 等国产 Chromium 也纳入候选、并且逐个试启动(第一个真能开调试通道的才用)。判据在 `~/.cache/magpie/magicrew-login-<站点>.log`,出问题先看它最后一行。
|
|
271
|
-
|
|
272
|
-
**添加第二个账号时,网页闪一下就关了、magpie 里也没多出账号?** 0.3.5 及更早会这样:登录浏览器复用同一个 profile,第二个窗口一打开就读到上一个账号的凭据,于是立刻「登录成功」并关窗 —— 加到的是已有账号。0.3.6 起每次登录用一个一次性 profile(关窗即删),不会再串号。
|
|
273
|
-
|
|
274
|
-
**npm 上叫 `magicrew-auth`,为什么卡片显示 `Magicrew`?** 卡片标题取包内 `package.json` 的 `name`(`Magicrew`),而 npm 拒绝含大写字母的新包名。发布时用 `publish-npm.mjs` 临时换成 `magicrew-auth`、发完还原 —— 所以 npm 页面是小写包名,git 源装出来是 `Magicrew`。功能完全一样。
|
|
275
|
-
|
|
276
|
-
**验证码登录报「验证码已发送」但没收到?** 先看是不是发到别的账号上了(同一个手机号/邮箱在两个站点是两套账号)。再确认这个号是不是**还没注册** —— 那种情况要先过旋转图,图没过,短信 / 邮件根本不会发出去,界面会直接报「旋转验证连试 4 张图都没过」。
|
|
277
|
-
|
|
278
|
-
**一个账号积分用完了,会换到另一个还有积分的账号吗?** 会。0.3.26 起插件把上游的 400「可用积分已不足」改写成 402 Payment Required —— magpie 对 402 一律视为可重试:先 rest 这个账号 30 分钟,再问同 provider 的下一个账号;如果整个组都没有额度,才会把错误交给客户端。
|
|
279
|
-
|
|
280
|
-
**为什么模型列表会变?** 因为清单是从 `/api/v1/flows/models` 实时拉的。订阅档位变了、平台方上下架变了,清单就跟着变 —— 插件里没有需要维护的模型表。
|
|
281
|
-
|
|
282
|
-
**国际站 `/v1/chat/completions` 报 500,22 字节的纯文本?** 那是缺 `organization-code` 请求头。国内站不需要,国际站强制。插件按站点自动带。
|
|
283
|
-
|
|
284
|
-
**`glm-5.3-flash` 回复是空的?** 推理 token 吃满了 `max_tokens`。插件已经把低于 512 的抬到 512;还是空就把 `max_tokens` 再调大。
|
|
285
|
-
|
|
286
|
-
**Android / macOS 也支持吗?** 插件只调 HTTP 接口,跟客户端无关。设备上能登录,这里就能用。
|
|
287
|
-
|
|
288
|
-
---
|
|
289
|
-
|
|
290
|
-
## 参考源
|
|
291
|
-
|
|
292
|
-
| 来源 | 用在哪 |
|
|
293
|
-
|---|---|
|
|
294
|
-
| [dtyq/magic](https://github.com/dtyq/magic)(Apache 2.0 + 附加限制) | 接口契约:`types/login.ts` 的 `invite_code`、`LoginService.ts` 关于「邀请码在创建组织时消费」的注释、`constants/api.ts` 的错误码 |
|
|
295
|
-
| [@magpie-community/opencode-workbuddy-auth](https://github.com/magpie-community/plugins/tree/main/packages/workbuddy)(MIT) | 「一个包导出多个 `XxxAuthPlugin`」的写法:每个站点一个具名导出,各成一个供应商 |
|
|
296
|
-
| [@magpie-community/opencode-qoder-auth](https://github.com/magpie-community/plugins/tree/main/packages/qoder)(MIT) | 同上,四站点四导出的对照例 |
|
|
297
|
-
| [magpie-plugin-template](https://github.com/MYCF711/magpie-plugin-template)(MIT) | README / CHANGELOG / NOTICE 的骨架与硬规则 |
|
|
298
|
-
|
|
299
|
-
本插件不复制上游代码,只调它的公开 HTTP 接口。完整版权声明见 [`NOTICE.md`](./NOTICE.md)。
|
|
300
|
-
|
|
301
|
-
---
|
|
302
|
-
|
|
303
|
-
> 更新记录:[`CHANGELOG.md`](./CHANGELOG.md)
|
|
304
|
-
|
|
305
|
-
## 许可
|
|
306
|
-
|
|
307
|
-
MIT。
|
|
1
|
+
# 超级麦吉 / MagiCrew for magpie
|
|
2
|
+
|
|
3
|
+
**一个包,两个供应商:国内的 GLM / DeepSeek / Qwen / Kimi,国际再加 Claude / GPT / Gemini —— 原样走它的 OpenAI 兼容网关。**
|
|
4
|
+
|
|
5
|
+
超级麦吉(`letsmagic.cn`)和 MagiCrew(`magicrew.ai`)是同一产品的两套云。这个插件把它们各接成一个独立供应商 —— 在 magpie 的供应商列表、用量概览、模型目录里各占一行,不聚合、不互相覆盖登录态。
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
国内 超级麦吉 www.letsmagic.cn GLM / DeepSeek / Qwen / Kimi / MiniMax / MiMo / 豆包
|
|
9
|
+
国际 MagiCrew www.magicrew.ai 上面全部,再加 Claude / GPT / Gemini
|
|
10
|
+
协议 OpenAI Chat Completions —— 原生,不是翻译出来的
|
|
11
|
+
计费 积分(预充值,不是月度配额)
|
|
12
|
+
凭证 登录一次 30 天全自动:api_key 两小时自续,refresh_token 自滚
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
> 模型清单是 2026-10-27 从两站 `GET /api/v1/flows/models` 拉下来核对的。清单会随订阅档位和平台上下架变 —— 所以插件里**没有一张写死的模型清单**,账户能选什么就显示什么。
|
|
16
|
+
|
|
17
|
+
> **改代码 / 发版本之前**:先看 [AGENTS.md](./AGENTS.md) —— 按「你在哪一步」给阅读顺序,
|
|
18
|
+
> 外加本仓库那些**会静默出错**的坑(症状 → 判据 → 出处)。交付与发版逐条走
|
|
19
|
+
> [CHECKLIST.md](./CHECKLIST.md) 的两张表。发布是**七步**,`git push` 只是第 4 步。
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 功能
|
|
24
|
+
|
|
25
|
+
- **两个供应商分得开** —— 国内、国际各一行,图标、名字、模型、积分、登录态全部独立
|
|
26
|
+
- **登录全程不开浏览器** —— 国际站有**邮箱验证码**和**手机号验证码**两条纯 HTTP 路;国内站有手机号验证码。另外两条(浏览器登录 / 手填登录态)谁都能用
|
|
27
|
+
- **已有的账号加进来,只填两次就完事** —— 填邮箱(或手机号)→ 填验证码。**那张「拖动滑块使图片角度为正」的旋转图根本不会出现**:服务端对已注册的账号直接放行,插件用的就是这条通道
|
|
28
|
+
- **本机浏览器登过就直接认** —— 你平时那个 Edge / Chrome / Brave 里登过 magicrew,点「浏览器登录」时插件读它的 localStorage 接上:不开窗口、不用重登
|
|
29
|
+
- **模型跟着账号走** —— 每次登录后按 `/api/v1/flows/models` 实时拉,账户当前能选什么就展示什么,生图和 embedding 不会混进来
|
|
30
|
+
- **积分算得准** —— 余额读的是 `/api/v1/quota/points/total`;空号就显示空,不会被优先派活
|
|
31
|
+
- **积分耗尽自动换号** —— 上游用 HTTP 400 报「可用积分已不足」时,插件把它改写为语义正确的 **402 Payment Required**,magpie 会 rest 这个账号并继续问同 provider 的下一个账号 / 路由组的下一个成员
|
|
32
|
+
- **登录一次管 30 天** —— 网页 JWT 顶 30 天,`mgw_` api_key 每 2 小时自续,refresh_token 每次续期时自滚
|
|
33
|
+
- **新手奖励 8 项全自动** —— 国内站 8 项 500 积分全部拿得到;第 8 项(完成第一次 AI 工作)由插件替你发一条消息,花掉约 2 积分
|
|
34
|
+
- **默认开启自动签到** —— 安装后自动把本 provider 的插件签到设为开(`pluginCheckins` 缺省时补 true;你手动关掉的不会被改回)
|
|
35
|
+
- **自动更新** —— 复用 magpie 的插件更新机制:发现自己的新版本后调 `magpie plugin update`,并在成功后写「已自动更新」记录;更新完要重启一次 magpie 才会加载新代码
|
|
36
|
+
- **邀请码自动滚** —— 第一次注册带作者的码,之后每次登录都记住「上一个登录账号」的码,拿到新的就覆盖旧的
|
|
37
|
+
- **邀请上级可固定** —— 登录页多一个按钮「邀请上级」:填数字,0=我的(作者 MYCF711),1..N=已登录账号(按账号名排序),-1=自动(跟随滚动);留空 / 不存在的数字回退 0。对照表在提示里,保存后回一条说明
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 登录
|
|
42
|
+
|
|
43
|
+
**国际站四条路,国内站三条。** 带「验证码」的那两条是**纯 HTTP、全程不开浏览器** —— 你填一个邮箱或手机号,剩下的插件自己走完。
|
|
44
|
+
|
|
45
|
+
| # | 方式 | 你要做什么 | 国际站 | 国内站 |
|
|
46
|
+
|---|---|---|---|---|
|
|
47
|
+
| ① | **邮箱验证码** | 填邮箱 → 填 6 位验证码 | 第 1 条 | —(国内站登录页没有邮箱入口) |
|
|
48
|
+
| ② | **手机号验证码** | 填手机号 → 填 6 位验证码 | 第 2 条 | 第 1 条 |
|
|
49
|
+
| ③ | **浏览器登录** | 点一下,在弹出的官方页面里用任何方式登 | 第 3 条 | 第 2 条 |
|
|
50
|
+
| ④ | **登录态(JWT + 组织码)** | 从 DevTools 粘两个字段 | 第 4 条 | 第 3 条 |
|
|
51
|
+
|
|
52
|
+
**国际站把邮箱排第一**,因为那边邮箱注册的账号更多。
|
|
53
|
+
|
|
54
|
+
**为什么国内站没有邮箱那条?** 因为国内站的官方登录页压根没有邮箱入口(只有微信 / 苹果 / 密码 / 手机 / 私有部署),也就没有邮箱注册的账号;而且同一个发信请求在国内站的服务端会回「服务异常,请联系管理员」。摆出来只会让你填完邮箱撞一个看不懂的错。
|
|
55
|
+
|
|
56
|
+
两条验证码路是同一套逻辑(插件里就是同一份代码,只是问的字段和调的两个端点不同),不会出现「手机那条修好了、邮箱那条没跟上」。
|
|
57
|
+
|
|
58
|
+
### 关于那张旋转验证图
|
|
59
|
+
|
|
60
|
+
官方登录页上只有一处需要「看图」:一张圆形照片被随机旋转过,要你拖滑块把它转正。**它只在一种情况下出现:这个手机号 / 邮箱在平台上还从没注册过。**
|
|
61
|
+
|
|
62
|
+
| 你要加的号 | 会出现旋转图吗 | 你需要做什么 |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| 平台上**已有**的账号(哪怕第一次加进 magpie) | **不会** —— 服务端直接放行 | 填号码/邮箱 + 填验证码 |
|
|
65
|
+
| 平台上**从没注册过**的新号(首次注册) | 会 | 配了识图模型就全自动;没配就自己转一下 |
|
|
66
|
+
|
|
67
|
+
原理:`POST /captcha/generate` 对已注册的账号**直接回一个 `business_token`**,连图都不给(实测:已注册邮箱 → 免图;换一个没注册过的邮箱 → 给 token + image)。插件用的就是这条通道,所以**绝大多数情况下识图模型根本用不上**。
|
|
68
|
+
|
|
69
|
+
真碰上要过图时(新号注册),插件这么办:
|
|
70
|
+
|
|
71
|
+
1. **配了识图模型**(magpie 设置 → 识图模型)→ 用它判断「主体自己的上方向指向钟面几点」,换算成拖动角度,自动过掉
|
|
72
|
+
2. **没配** → 回退到浏览器,打开官方登录页,你自己把图片转正,剩下的插件接住
|
|
73
|
+
|
|
74
|
+
> 为什么不瞎猜角度:服务端容差 ±10°,瞎猜命中率只有约 5.6%(20/360),平均要试十几次,而它有「验证提交过于频繁」和「验证次数已超限」两道风控 —— 等不到猜中,先被限流。
|
|
75
|
+
>
|
|
76
|
+
> 为什么不问模型「转了多少度」:实测直接问角度 6 次错 5 次,问「指向钟面几点」3 轮中 2。而且同一张图要问两遍比分歧 —— 有一次两个判官给出 1.7 和 7.5 钟点(相差 174°),那是有人把方向看反了,只能换图重来。
|
|
77
|
+
|
|
78
|
+
### 手机号与邮箱的协议差异(给改代码的人)
|
|
79
|
+
|
|
80
|
+
| | 手机号 | 邮箱 |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| 取图 | `POST /captcha/generate` `{account_type:"mobile", mobile, state_code}` | 同端点 `{account_type:"email", email}`(**无** `state_code`) |
|
|
83
|
+
| 过验证 | `POST /captcha/verify` `{token, angle, account_type, mobile, state_code}` | 同端点,换成 `email` |
|
|
84
|
+
| 发验证码 | `POST /v4/user/send-sms` `{type:"account_login", phone, state_code}` | `POST /v4/user/send-email` `{email, type:"account_login"}` |
|
|
85
|
+
| 换登录态 | `POST /v4/user/login`,`type:"phone_captcha"`,验证码字段叫 **`code`** | `POST /v4/user/login-email`,验证码字段叫 **`captcha`** |
|
|
86
|
+
|
|
87
|
+
两个 `type` 都是 `"account_login"`(填错会回「服务异常,请联系管理员」—— 后端内部炸了,从报错完全看不出是它)。邮箱那条**必须**走 `login-email`:往 `/v4/user/login` 发任何 type 都回「phone 字段是必须的」。
|
|
88
|
+
|
|
89
|
+
### 浏览器登录
|
|
90
|
+
|
|
91
|
+
点第三条第 ③ 个方式时,它先看你平时用的那个浏览器:
|
|
92
|
+
|
|
93
|
+
**① 那边已经登录过 magicrew** → 插件直接读它的 localStorage 接上,**不开窗口、不用再登一次**。
|
|
94
|
+
凭据就明文躺在 `Local Storage/leveldb` 里(Edge / Chrome / Chromium / Brave / 360 / QQ / 搜狗 都行)。
|
|
95
|
+
|
|
96
|
+
**② 没登录过,或者这个账号已经加过** → 插件自己拉起一个窗口:
|
|
97
|
+
|
|
98
|
+
1. 浏览器窗口弹出,停在官方登录页
|
|
99
|
+
2. 用你平时的方式登进去(手机号 / 密码 / Google / 邮箱验证码 / 飞书 / 钉钉都行)
|
|
100
|
+
3. **登录完成那一刻它自己就接上了** —— 不用回来点任何按钮,不用开 DevTools
|
|
101
|
+
|
|
102
|
+
原理:插件不是调用系统浏览器,而是自己起一个 Chromium 内核的浏览器(独立 profile + `--remote-debugging-port=0`),所以登录成功后能用 CDP 在页面上下文里把它自己的 localStorage 读走,拿到 JWT 和组织码,签完密钥就关窗。
|
|
103
|
+
|
|
104
|
+
**用哪个浏览器?** 按「谁更干净」排,不是按名气:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
① Chrome / Chromium 自己装的,无企业策略、无强制登录 ← 首选
|
|
108
|
+
② 国产 Chromium 系 360 / QQ / 搜狗 / 2345 / 猎豹 / UC / 夸克
|
|
109
|
+
③ Edge 垫底(策略最多、最容易被拦住调试端口)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
前一个起不来(策略禁用调试端口、启动就退出)会自动换下一个,**第一个真正打开调试通道的才算数**。窗口标题/提示里会写明这次用的是哪个。
|
|
113
|
+
|
|
114
|
+
**每次登录都是一个新的 profile,用完就删。** 这是必须的:共用一个 profile 的话,添加第二个账号时窗口一打开,页面里已经躺着上一个账号的凭据 —— 插件会以为登录完成、立刻关窗,而 magpie 拿到的还是旧账号。
|
|
115
|
+
|
|
116
|
+
> **为什么零浏览器那两条要自己写协议?** magicrew 没有 OAuth 回调通道 —— 登录类型只有十几种、全是「拿凭据换 token」,没有设备码、没有插件授权、没有一次性 ticket。凭据只可能落在三个地方:用户中心的 HTTP 接口(插件走的就是这条)、你自己浏览器的 localStorage、或者插件自己起的那个窗口。
|
|
117
|
+
|
|
118
|
+
### 登录态(JWT + 组织码)
|
|
119
|
+
|
|
120
|
+
不想走上面任何一条的话,手填两个字段:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
DevTools → Application → Local Storage → https://www.magicrew.ai
|
|
124
|
+
MAGIC:user:authorization → JSON,取 value = JWT
|
|
125
|
+
MAGIC:user:organizationCode → JSON,取 value = 组织码(12 位小写字母数字)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
> 组织码**不能从 JWT 推**。JWT 里只有 `cus.tenant_id`(18 位数字),组织码是另一套短串。缺了它 `/api/v1/*` 回 `2182 用户所在组织不存在`,给错了回 `3035 登录失败`。
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 模型
|
|
133
|
+
|
|
134
|
+
**国内的 GLM、DeepSeek、Qwen、Kimi、MiniMax、MiMo、豆包;国际站再加 Claude、GPT、Gemini 三家。**
|
|
135
|
+
|
|
136
|
+
登录后按账号实时拉 `/api/v1/flows/models`,账户能选什么就显示什么 —— 下表只列各家**最新**和**热门**的那几款:
|
|
137
|
+
|
|
138
|
+
| 发行商 | 最新 / 热门 | 上下文 | 国内 | 国际 |
|
|
139
|
+
|---|---|---|---|---|
|
|
140
|
+
| GLM(智谱) | `glm-5.3` · `glm-5.3-flash` | 1M · 256K | ✓ | ✓ |
|
|
141
|
+
| DeepSeek | `deepseek-v4.1-flash` | 1M | ✓ | ✓ |
|
|
142
|
+
| DeepSeek | `deepseek-v4-pro` | 128K | — | ✓ |
|
|
143
|
+
| Qwen(阿里) | `qwen3.8-max` · `qwen3.7-plus` | 1M | ✓ | ✓ |
|
|
144
|
+
| Kimi(月之暗面) | `kimi-k3.1-pro` | 1M | ✓ | ✓ |
|
|
145
|
+
| MiniMax | `minimax-m3` · `minimax-m3.1-flash` | 1M | ✓ | ✓ |
|
|
146
|
+
| MiMo(小米) | `mimo-v2.6-pro` · `mimo-v2.6-flash` | 1M | ✓ | ✓ |
|
|
147
|
+
| 豆包 Seed(字节) | `doubao-seed-2.0-pro` · `doubao-seed-2.0-code` | 256K | ✓ | ✓ |
|
|
148
|
+
| Claude(Anthropic) | `claude-haiku-5.5` | 1M | — | ✓ |
|
|
149
|
+
| GPT(OpenAI) | `gpt-6-luna` · `gpt-5.4-mini` | 1.05M · 400K | — | ✓ |
|
|
150
|
+
| Gemini(Google) | `gemini-3.7-flash` | 1M | — | ✓ |
|
|
151
|
+
|
|
152
|
+
全量(含生图、向量、各家历史版本)不进 README —— 装好以后模型选择器里看到的才是账号真实的全部。
|
|
153
|
+
|
|
154
|
+
用的是 `/api/v1/flows/models`(网页模型选择器里眼睛能点到的那些),不是 `/v1/models` —— 后者混着 VIP 锁定、生图、embedding,塞进来用户会选到根本调不动的模型。
|
|
155
|
+
|
|
156
|
+
上下文按三档取:magpie GUI 里手选 > 模型库(`~/.cache/magpie/models.json`)> 兜底 1M。这两个接口都不返回 `context_length`;早先一律填 256K,把 `deepseek-v4.1-flash` 真实 1M 的窗口砍成四分之一,agent 反而更早拒绝 —— 根因与取舍见 `docs/internals.md` 第十六节。
|
|
157
|
+
|
|
158
|
+
推理模型会吃 `max_tokens`:`glm-5.3-flash` 给 64 个 token 时 `reasoning_content` 就吃满、`content` 是空串。插件把低于 512 的 `max_tokens` 抬到 512。
|
|
159
|
+
|
|
160
|
+
两站不是简单叠加:国际站多出 Claude / GPT / Gemini 三家,另有豆包 Seed 1.8 / 2.0-mini / seed-code、Kimi K2.6 / K2.7-code / K3、GLM 5.2、Qwen3.7-max 这些国内没有的档位。
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 新手奖励
|
|
165
|
+
|
|
166
|
+
**8 项,合计 500 积分,全自动 —— 登录后和每天签到各跑一次,幂等。**
|
|
167
|
+
|
|
168
|
+
| 项 | 分数 | 插件怎么拿 |
|
|
169
|
+
|---|---|---|
|
|
170
|
+
| 完成第一次 AI 工作 | 100 | **替你在话题里发一条消息**(花掉约 2 积分)—— 服务端只认这个 |
|
|
171
|
+
| 了解工作台 | 50 | PUT 即到账 |
|
|
172
|
+
| 了解如何使用 AI PPT | 50 | PUT 即到账 |
|
|
173
|
+
| AI 录音 | 50 | PUT 即到账 |
|
|
174
|
+
| 雇佣数字员工 | 50 | PUT 即到账 |
|
|
175
|
+
| 添加 / 管理技能 | 50 | PUT 即到账 |
|
|
176
|
+
| 微应用 | 50 | PUT 即到账 |
|
|
177
|
+
| Magiclaw | 50 | PUT 即到账 |
|
|
178
|
+
|
|
179
|
+
第 8 项是唯一 PUT 不掉的:`PUT /onboarding/tasks/first_ai_work/completion` 服务端回 `9303「该新人引导任务不支持手动完成」`—— 它认死产品内真的跑完过一次对话。所以插件替它**发一条消息**(走话题的 socket 协议,不开浏览器),这也是**邀请奖励的触发条件** —— 被邀请人发过一条消息,邀请人才拿到那笔分。
|
|
180
|
+
|
|
181
|
+
这道「发消息」有闸门:**每个账号一辈子一次**(`isAutoChatSettled`),发出去就落永久标记。所以重复登录、换天签到、重启 magpie 都不会再发第二条、不会再白烧积分。
|
|
182
|
+
|
|
183
|
+
失败方向是「宁可晚一轮」:查不到判据(比如话题接口抖了一下)时这次不发、不落标记、不计数 —— 消息发出去是花钱且不可撤的。真失败才计数,3 次之后放弃,免得一个永远失败的号每次签到撞一遍。
|
|
184
|
+
|
|
185
|
+
> 国际站 `/api/v1/onboarding/tasks` 恒返回空列表 —— 那是「这个账号没被登记进引导计划」,不是「已经领完了」。
|
|
186
|
+
> 但邀请奖励的判据是一样的:官方文案写「被邀请人完成首个任务或对话后,即可获得积分奖励」,所以国际站这条就等于**发过一条消息**。插件用「有没有话题」判断(不是有没有项目 —— 项目打开工作台就会自动建),没话题就补一条。
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 邀请码
|
|
191
|
+
|
|
192
|
+
只一条规则,不需要你选任何东西:
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
① 固定位置有记录 → 用记录里那个
|
|
196
|
+
② 没有记录 → 用作者的码
|
|
197
|
+
③ 登录成功后 → 查这个账号自己的码 → 覆盖写回
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
效果:第一次注册带作者的码,之后每次都用「上一个登录成功的账号」的码,一路滚下去。
|
|
201
|
+
|
|
202
|
+
固定位置:
|
|
203
|
+
|
|
204
|
+
```
|
|
205
|
+
~/.cache/magpie/magicrew-invite-<站点 id>.json {"code":"...","at":"..."}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
> ③ 不是每次都能成。`/api/v1/invitations/info` 只认带 `device_id` 的 JWT —— 同一个账号同一时刻签的两把,差别就在这一个字段:桌面客户端 438 字符(`device_id` = 64 位 hex)能拿到码,网页版 350 字符(`device_id` 空)回 `2155 用户不存在`。
|
|
209
|
+
> 密码登录走 API、带 device 指纹,滚得动;浏览器登录和验证码登录拿到的是网页那把,滚不动 —— 那就保留旧值,不报错、不挡登录。
|
|
210
|
+
|
|
211
|
+
奖励口径(上游前端常量,2026-10-27):
|
|
212
|
+
|
|
213
|
+
| | 每次注册 | 每次订阅 | 邀请注册封顶 | 总额封顶 |
|
|
214
|
+
|---|---|---|---|---|
|
|
215
|
+
| 国内 | 1,000 | 3,000 | 60,000 | 300,000 |
|
|
216
|
+
| 国际 | 200 | 500 | 10,000 | 30,000 |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 安装
|
|
221
|
+
|
|
222
|
+
在 magpie 的 **插件 → 发现** 搜 `magicrew`,点**安装**(npm 上的包名是 `magicrew-auth`)。
|
|
223
|
+
|
|
224
|
+
装完选站点,然后挑一条登录路:
|
|
225
|
+
|
|
226
|
+
- **最省事(推荐)** → 点**「浏览器登录」**:它先看你本机浏览器有没有登过,没有就自己拉一个窗口起来,你在里面用任何方式登(连验证码都不用填)
|
|
227
|
+
- **国际站全自动登录** → 点**「邮箱验证码」**(排第一):填邮箱 → 填验证码。已有账号的话,中间那张旋转图不会出现
|
|
228
|
+
- **国内站全自动登录** → 点**「手机号验证码」**(排第一):同理
|
|
229
|
+
|
|
230
|
+
### 命令行
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
# npm(推荐:magpie 按 version 检测更新,有新版本会提示)
|
|
234
|
+
magpie plugin add magicrew-auth
|
|
235
|
+
|
|
236
|
+
# 从仓库源码(拿最新提交,不走 npm;更新按 commit,要手动 update)
|
|
237
|
+
magpie plugin add github:MYCF711/magpie-magicrew-auth
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
> **两条路的卡片标题不一样**:npm 装 → 卡片标题就是包名 `magicrew-auth`;git 装 → 取 `package.json` 的 `name`,也就是 **`Magicrew`**。功能一样,只是标题。
|
|
241
|
+
> 从旧包名 `magpie-magicrew-auth` 过来的,先 `magpie plugin rm magpie-magicrew-auth` 再装。
|
|
242
|
+
|
|
243
|
+
装完确认:
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
magpie plugin list
|
|
247
|
+
# magicrew-auth on
|
|
248
|
+
# magicrew (超级麦吉, 27 models) signed in as ...
|
|
249
|
+
# magicrew-intl (MagiCrew, 49 models) signed in as ...
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
两个供应商各一行 —— 这就是「不聚合」的样子。
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 常见问题
|
|
257
|
+
|
|
258
|
+
**两个站要装两次吗?** 不用。一个包导出两个插件,装一次两个供应商都在,各自登录。
|
|
259
|
+
|
|
260
|
+
**邮箱验证码能注册新号吗?** 能 —— 但**只有国际站有这条方法**。这条链和手机号那条一样带 `auto_register`,第一次用的邮箱会自动建号,而且注册请求里带着邀请码。新号注册那一次会要求过旋转图(服务端的规定)—— 配了识图模型就全自动,没配就自己转一下。
|
|
261
|
+
|
|
262
|
+
**为什么国内站没有「邮箱验证码」?** 因为国内站的官方登录页就没有邮箱入口(只有微信 / 苹果 / 密码 / 手机 / 私有部署),也就没有邮箱注册的账号;而且同一个发信请求在国内站服务端回「服务异常,请联系管理员」。所以国内站只给三条路:手机号验证码 / 浏览器登录 / 手填登录态。
|
|
263
|
+
|
|
264
|
+
**旋转验证图能不能不出现?** 加**已有**的账号时它本来就不出现(服务端直接放行)。只有注册全新账号才需要过它。
|
|
265
|
+
|
|
266
|
+
**看图那一步为什么有点慢?** 因为识图模型是**推理模型**的话,它的「思考」也算 token —— 实测这个模型的思考链能写到三千多字。插件已经做了两件事:让它跑最低思考档(`reasoning_effort: low`,实测耗时 −59%、token −57%),以及**两个判官并行**问(耗时等于较慢的那一次)。想更快,就在 magpie 设置里换一个**非推理**的视觉模型 —— 那是唯一能真正「不思考」的办法,参数关不掉。
|
|
267
|
+
|
|
268
|
+
**我在自己浏览器里登了 magicrew,插件能自动认出来吗?** 能。点「浏览器登录」时插件先去本机 Edge / Chrome / Chromium / Brave / 360 / QQ / 搜狗 等浏览器的 localStorage 里找**这个站点**的登录态,找到就直接接上,不弹窗口。读不到、或者这个账号已经加过,才会开窗口让你登新的。
|
|
269
|
+
|
|
270
|
+
**点了「浏览器登录」,网页上明明登好并跳到 agent 界面了,magpie 里却一直转圈等?** 0.3.12 及更早会这样:插件拉起浏览器的判断依赖一个写死的文件名 `msedge.exe`,而有些机器上微软落盘的名字是 **`Microsoft Edge.exe`**(带空格、带大写;落盘名随安装方式和版本变),于是每次都判定「本机没装浏览器」,永远走「让你去 Console 粘一行」的降级路径 —— 而你不知道有这一步。0.3.15 起:两种落盘名都认、把 360 / QQ / 搜狗 等国产 Chromium 也纳入候选、并且逐个试启动(第一个真能开调试通道的才用)。判据在 `~/.cache/magpie/magicrew-login-<站点>.log`,出问题先看它最后一行。
|
|
271
|
+
|
|
272
|
+
**添加第二个账号时,网页闪一下就关了、magpie 里也没多出账号?** 0.3.5 及更早会这样:登录浏览器复用同一个 profile,第二个窗口一打开就读到上一个账号的凭据,于是立刻「登录成功」并关窗 —— 加到的是已有账号。0.3.6 起每次登录用一个一次性 profile(关窗即删),不会再串号。
|
|
273
|
+
|
|
274
|
+
**npm 上叫 `magicrew-auth`,为什么卡片显示 `Magicrew`?** 卡片标题取包内 `package.json` 的 `name`(`Magicrew`),而 npm 拒绝含大写字母的新包名。发布时用 `publish-npm.mjs` 临时换成 `magicrew-auth`、发完还原 —— 所以 npm 页面是小写包名,git 源装出来是 `Magicrew`。功能完全一样。
|
|
275
|
+
|
|
276
|
+
**验证码登录报「验证码已发送」但没收到?** 先看是不是发到别的账号上了(同一个手机号/邮箱在两个站点是两套账号)。再确认这个号是不是**还没注册** —— 那种情况要先过旋转图,图没过,短信 / 邮件根本不会发出去,界面会直接报「旋转验证连试 4 张图都没过」。
|
|
277
|
+
|
|
278
|
+
**一个账号积分用完了,会换到另一个还有积分的账号吗?** 会。0.3.26 起插件把上游的 400「可用积分已不足」改写成 402 Payment Required —— magpie 对 402 一律视为可重试:先 rest 这个账号 30 分钟,再问同 provider 的下一个账号;如果整个组都没有额度,才会把错误交给客户端。
|
|
279
|
+
|
|
280
|
+
**为什么模型列表会变?** 因为清单是从 `/api/v1/flows/models` 实时拉的。订阅档位变了、平台方上下架变了,清单就跟着变 —— 插件里没有需要维护的模型表。
|
|
281
|
+
|
|
282
|
+
**国际站 `/v1/chat/completions` 报 500,22 字节的纯文本?** 那是缺 `organization-code` 请求头。国内站不需要,国际站强制。插件按站点自动带。
|
|
283
|
+
|
|
284
|
+
**`glm-5.3-flash` 回复是空的?** 推理 token 吃满了 `max_tokens`。插件已经把低于 512 的抬到 512;还是空就把 `max_tokens` 再调大。
|
|
285
|
+
|
|
286
|
+
**Android / macOS 也支持吗?** 插件只调 HTTP 接口,跟客户端无关。设备上能登录,这里就能用。
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## 参考源
|
|
291
|
+
|
|
292
|
+
| 来源 | 用在哪 |
|
|
293
|
+
|---|---|
|
|
294
|
+
| [dtyq/magic](https://github.com/dtyq/magic)(Apache 2.0 + 附加限制) | 接口契约:`types/login.ts` 的 `invite_code`、`LoginService.ts` 关于「邀请码在创建组织时消费」的注释、`constants/api.ts` 的错误码 |
|
|
295
|
+
| [@magpie-community/opencode-workbuddy-auth](https://github.com/magpie-community/plugins/tree/main/packages/workbuddy)(MIT) | 「一个包导出多个 `XxxAuthPlugin`」的写法:每个站点一个具名导出,各成一个供应商 |
|
|
296
|
+
| [@magpie-community/opencode-qoder-auth](https://github.com/magpie-community/plugins/tree/main/packages/qoder)(MIT) | 同上,四站点四导出的对照例 |
|
|
297
|
+
| [magpie-plugin-template](https://github.com/MYCF711/magpie-plugin-template)(MIT) | README / CHANGELOG / NOTICE 的骨架与硬规则 |
|
|
298
|
+
|
|
299
|
+
本插件不复制上游代码,只调它的公开 HTTP 接口。完整版权声明见 [`NOTICE.md`](./NOTICE.md)。
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
> 更新记录:[`CHANGELOG.md`](./CHANGELOG.md)
|
|
304
|
+
|
|
305
|
+
## 许可
|
|
306
|
+
|
|
307
|
+
MIT。
|