把 code.phanthy.com 的模型接进 magpie —— 登录、模型目录、额度、签到、 推理直连全在插件里,不需要装官方桌面端。
provider phanthycode(模型名 phanthycode/<id>)
- 官方 OAuth 登录 —— 授权码 + PKCE S256,本机 loopback 回调,
state校验与失败页齐备。 点加号时默认开一份一次性的干净浏览器(临时user-data-dir,关掉就删):不读、不复用 你日常浏览器的 Cookie / LocalStorage / 扩展,所以不会「点加号却直接进了旧账号」。 没装 Chromium 内核浏览器 / 启动失败 / 被单实例浏览器(360、QQ、搜狗…)接管时, 自动退回用你的默认浏览器打开授权页,这条登录方式不会因此消失。 - 续期不丢号 —— 一次性
refresh_token同账号串行,多账号并发刷新不会互相顶掉。 - 登录一次就有稳定设备身份 —— 拿到账号作用域后纯本地分配/复用本机设备密钥(零请求),
身份写进登录态的
metadata:同一个号换 token 不换设备,不同账号(不同 uuid)各自独立。 - 模型目录跟随账号 —— 登录后拉
/api/phanthy_code/models,校验schema_version;接口抖动退回上次快照,不返回空列表。 价格未知的模型不列(缺价格 /null/ 空对象 / 非法值 / 负数一律不猜),只有服务端显式写 0 才标免费。 - 额度上卡片 —— 套餐名 + 积分余额,临期积分挂在同一条可路由窗口上(智能路由的「到期前用完」才有输入)。
- 每日签到 —— 自动领取 + 幂等键(同一 installationId + 同一天只发一条);卡片显示「今日已签到 +N · 连续 M 天」。 设备身份还没注册时,你点一下签到它自己会准备好(账号档案 → 设备注册 → 领取),不需要先发一次模型请求; 准备失败就如实报失败(带状态码与原因),不会假报成功、也不会在失败后继续去领奖。
- 设备身份自己生成 —— 插件自造 ed25519 密钥并落
~/.cache/magpie,不读取、不依赖官方桌面端。 - 两种登录方式 —— 浏览器 OAuth(默认,隔离浏览器),或「从本机导入」官方客户端已经刷好的短效 access token。
- 出站只认一个原点 —— 所有请求必须
https且 host 严格是code.phanthy.com;带账号密码的地址、//host/x这类协议相对写法、反斜杠路径一律拒绝,数据面与推理转发共用同一个闸门。 - 错误不误杀账号 —— 非登录语义的 401/403 带
X-Magpie-Sign-In: kept;超时一律 504;模型级错误 404。
DeepSeek / GLM(智谱)/ Kimi(月之暗面)/ Phana / Phano / Phanthy 自有档位, 登录后跟随账号目录上下架。
| 发行商 | 代表模型 |
|---|---|
| Phanthy 自有 | Phanthy-fast(免费)· Phanthy-pro · Phanthy-ultra |
| DeepSeek | deepseek-v4.1-flash-1017 |
| GLM(智谱) | glm-5.2 · glm-5.3 · glm-5.3-flash |
| Kimi(月之暗面) | kimi-k2.7-code · kimi-k3 |
| Phana / Phano | Phana-5.2f · Phana-5.5o · Phana-5.5s · Phano-6.1s · Phano-6a |
上下文窗口、倍率、思考档位一律由云端目录下发(README 不抄,抄了就过期);装好以后
magpie plugin list 拿到的才是这个账号真实的全部。
倍率 = input_credits_per_million_tokens / 3000,与官方客户端逐条一致(0.04x ~ 1.67x)。
计费按 token(小请求会抹零:画一张 1247 token 的图实测 0 积分),无条件免费的只有 Phanthy-fast。
服务端把两类完全不同的拒绝都放在 402 / 403 里,插件按正文把它们分开, 不会把「套餐不含这个模型」误报成「账号没额度」:
| 上游原文(正文里出现即可) | 插件回给 magpie | 含义 | 你要做的 |
|---|---|---|---|
model_not_allowed / model_not_entitled / not allowed for this plan |
404 model_not_found |
这个模型不在当前账号的套餐内,积分再多也不能用 | 换一个模型,或升级套餐;账号不会被停用 |
model_not_found / 模型不存在 |
404 model_not_found |
上游不认识这个 id | 重新拉一次模型列表 |
plan_required / missing_or_expired_plan / no active plan |
403 plan_required |
套餐到期 / 未订阅 | 续费;账号不会被停用 |
insufficient_credits |
402 quota_exhausted |
积分真的用尽 | 充值或等重置 |
device_binding_conflict(409) |
409 device_binding_conflict |
该 installation id 已绑定官方桌面端公钥,服务端不接受第二台设备 | 换号或换设备;数据面(目录 / 额度 / 签到只读)仍可用 |
「积分到账」不等于「模型能用」:积分只决定付不付得起;某个模型能不能调,由套餐决定。 视频里说的 6,300 分(注册 3,000 + 邀请 3,000 + 签到 300/天)是活动积分口径,以后端钱包为准 —— 它不会把一个套餐外的模型变成可用。
如果所有模型都不可用,按顺序看三层:
- 登录:卡片上账号名还在不在;不在就重登。
- 设备身份:错误里出现
device_binding_conflict说明这个号已绑在官方桌面端; 出现PHANTHY_ALLOW_DEVICE_REGISTER说明你显式关掉了注册。首次对话会自动注册(约 1 秒,零额外配置)。 - 套餐:出现
model_not_found(正文带model_not_allowed)或plan_required都是套餐范围问题, 不是插件配置问题。
- 只发官方端点:提示词、补全、模型目录、额度、签到全部直连
https://code.phanthy.com; 插件不中转、不经第三方、不把对话写进日志或缓存。云端如何留存 / 使用数据由官方服务条款决定 (运营方:范式万神殿(北京)控股有限公司,见 NOTICE.md),插件无法代它承诺。 - 本地落盘只有这几类(都不含对话):
- OAuth
access/refresh:magpie 自己的~/.config/magpie/plugin-auth.json,插件不另存; - 设备身份:
~/.cache/magpie/phanthycode-device-<账号>.json,三把 ed25519 私钥,权限0600; - 目录 / 额度快照:
~/.cache/magpie/phanthycode-catalog-*等,只含模型元数据与额度窗口; - 邀请缓存:
~/.cache/magpie/phanthycode-invite*.json,只有邀请码、referral_state与账号索引。
- OAuth
- 没有遥测:插件不收集、不上报任何使用统计;除
code.phanthy.com外没有出站请求 (邀请码采集也只打同一个官方 origin)。 - 「从本机导入」是只读的:只读官方桌面端已经刷好的短效 access token,不复制
refresh_token、推理令牌或设备私钥,也不会把桌面端顶下线。
每天一次,daily-login 领取走 v1 签名 + idempotency-key(同一 installationId + 同一天只发一条)。
默认就会领取,不需要任何环境变量;已经领过时自动转成「今日已签到」并带上金额与连续天数。
设备身份没就绪也能点:未注册设备时,插件会按 账号档案 → 设备注册 → 活动列表 → 领取
的顺序自己把身份准备好再签到 —— 不需要先发一次模型请求。设备注册是写操作,只在
真正需要它的时候发生(你点签到,或第一次发推理);登录只分配本机身份,
不做云端设备注册或自动领奖。
准备失败(409 / 403 / 网络 / 账号档案拿不到)时如实返回失败并带上状态码与原因,
不假报「已领取」,也不会在失败后继续去领奖。
失败只影响签到,不影响模型与额度。
在 magpie 的 设置 → 用量 里可以打开或关掉「自动签到」。
给别人发邀请、让对方注册新账号时用。它是一个 provider 级开关(不是一种登录方式), 决定「这次注册挂到谁的邀请链接上」:
| 开关 | 邀请源 | 没有可用源时 |
|---|---|---|
| 关(默认) | 最新注册账号:自动用它的邀请链接;最新还没码(或已被判死)→ 回退上一个有码且合格的账号 | 用你预留的邀请码;再没有就不带邀请、照常登录 |
| 开 | magpie 首选账号:只用账号页上点了「Make first」的那个账号的码 | 只回退你预留的邀请码,绝不静默换别的账号 |
- 怎么设首选:magpie 的账号页里,在目标账号行上点「Make first」(它本身就在账号 下方、Routing 上方)。插件没有账号下拉框 —— magpie 0.1.3371 的插件控件只支持布尔开关, 账号选择是 magpie 自己的原生交互,插件只读它的结果。
- 「最新」怎么算:本机第一次见到这个账号的时刻(
firstSeenAt只写一次), 不是「最后登录时间」—— 否则重登一个旧号会把下一次注册挂到旧号名下,而且界面看不出任何异常。 - 预留码怎么填:登录时会先问一次邀请码 —— 留空就走自动源(最新 / 首选),
填一个非
0/1的码则覆盖自动源(0/1与留空等价,都是走自动源)。 预留值存在~/.cache/magpie/phanthycode-invite.json,不会被自动派生覆盖 —— 它是「所有自动源都没有时」的最后兜底。 - 账号自己的码从哪来:插件在该账号自己的
usage/checkin里采集 —— 每账号 24 小时至多一次;先查资格、再取码;设备没注册就跳过(绝不 force 注册)。 采集失败只降级,不影响额度,也不影响签到。 - 失败会怎样:邀请码为空 / 不合法、分享页超时 / 非 2xx / 要求跳转 / 页面里没有
rs1.…→ 一律回退成普通登录(裸授权 URL),登录照常完成;登录说明只给固定分类文案, 不含邀请码、share_url或referral_state原值。 - 顶部位置需要 magpie ≥ 0.1.2985:低版本忽略摆放字段,开关出现在最下面的「插件选项」里, 功能照常、不报错。
- 只对新注册账号有效:邀请关系在注册那一刻建立;已经有的账号不能事后补绑 (服务端明确回 409),插件不会重试。登录路径不会自动 bind,也不伪造邀请奖励。
是否真的计入邀请、奖励是否到账由服务端判定,插件不校验、也不承诺; 离线测试覆盖的只是「源选择 / URL 构造 / 回退 / 采集边界 / 零 bind」这些可验证的契约。
在 magpie 的 插件 → 发现 搜 PhanthyCode,点安装。
# 从 GitHub
magpie plugin add baijiu666/magpie-PhanthyCode
# 本地开发
magpie plugin add D:/path/to/magpie-PhanthyCode装完在插件设置里选登录方式:
| 方式 | 说明 |
|---|---|
| 浏览器 OAuth(推荐) | 自己换票,access + refresh 都归插件,能自动续期。默认用一次性隔离浏览器:临时 user-data-dir,关窗即删,不读你日常 profile。找不到可用浏览器时退回默认浏览器(提示语会写明) |
| 从本机导入 | 只导入云端短效 access token;需要官方桌面端已经登录过。明确拒绝 refresh_token,不会顶掉桌面端登录(是显式备选,插件不会自动替你切过去) |
只有一个,而且是关闭用的 —— 默认一切都会自动跑:
| 变量 | 作用 |
|---|---|
PHANTHY_ALLOW_DEVICE_REGISTER=0 |
显式禁止向云端注册本机设备身份(推理面会不可用)。不设 = 允许 |
早期版本有三个
=1才生效的闸门(本机导入 / 设备注册 / 签到)。它们全删了 —— magpie 是独立进程,用户在 shell 里设的环境变量它看不到,那道门只会让功能对所有人都是死的。
- 计费按 token(小请求会抹零:画一张 1247 token 的图实测 0 积分),除
Phanthy-fast外没有免费模型。 价格未知的模型不列(不猜、也不冒充免费),所以「有权限但目录没给价格」的模型这里看不到。 reservedPoints只涨不回落(上游账目,插件无法控制)。- 「从本机导入」吃的是短效 access token(服务端给 30 分钟):过期后插件不会用
refresh_token去续 —— 而是提示你改用浏览器 OAuth。生产代码里这条路明确拒绝refresh_token,所以它既不会续写~/.phanthy-code/.credentials.json,也不会把桌面端顶下线。 (旧版 README 写的「插件刷新后会把新值写回桌面端凭据」是错的,已删除。) - 设备注册是写操作:第一次发推理或第一次点签到会在服务端绑定一台设备。服务端回
409 desktop_installation_conflict表示这个账号已绑在别处(终态),插件报device_binding_conflict并不再重试(24 小时内零注册请求);换号或换设备前请先确认。
# 签到探针:默认只预演,零网络
node scripts/probe-checkin-live.mjs
# 真实跑一次签到(先读今日状态,必要时领取)
node scripts/probe-checkin-live.mjs --yes| 行为 | 说明 |
|---|---|
| 默认(无参数) | 不发送任何请求,只打印「将会做什么」;适合先确认影响面 |
--yes |
真实执行:设备未就绪时先注册(如需要),再读今日状态、必要时领取 |
| 不做什么 | 不调用 loader、不发任何推理请求、不改 magpie 配置 |
| 输出 | 只有 outcome / credit / streak / message;手机号 / 邮箱 / token 形状已脱敏,不打印 access / refresh / installationId / 私钥 |
| 登录态 | 只读 magpie plugin-auth.json 里 phanthycode 这一项;缺失或形状有歧义就清晰报错,不回退到别的 provider |
| 文件 | 管什么 |
|---|---|
| PROTOCOL-INFERENCE.md | 完整协议取证(12 段 canonical、三把密钥、令牌寿命) |
| HOOKS.md | magpie 插件契约(字段级) |
| AGENTS.md | 给 AI 执行者的入口与「会静默出错」的坑表 |
| CHANGELOG.md | 更新记录 |