定位与首批场景(P0 方向)¶
2026-10-07 定向记录:把 公司打包工具 + AI 套餐额度 确立为 Beacon 的两个第一类场景, Provider 体系划分为 Status / Usage / Machine 三类,并以 Generic HTTP Provider 作为通用接入能力。 本文固化方向与优先级,不改动已排期的 M5 验收(B-803/B-804 收口后再并入 mvp-issues)。
1. 定位¶
Beacon = 个人开发者的本地「状态与额度」雷达——Status & Action Center,不是 DevOps Dashboard。
它不替代 GitHub、Jenkins、公司打包系统、Claude、Codex,只负责把这些系统里 「我现在需要知道什么 / 我现在需要做什么」 统一带到 Windows 桌面上:
- Signal:状态、额度、生命周期的统一抽象(现有
WidgetState/Severity/LifecycleState已承载) - Action:失败后的下一步(查看日志 / 重跑 / 取消)直达桌面
2. 首批三类真实场景¶
Beacon
│
├── 🏗 Build / CI 公司打包工具(首位)、GitHub Actions、Jenkins、GitLab CI
├── 🤖 AI Usage Claude、OpenAI/Codex、Gemini、其他 AI 服务
└── 🖥 Developer Environment 服务器、Docker、Agent、开发机(第二阶段)
- 公司打包工具排在 GitHub 之前:每天真实提交、排队、打包、上传的流程,
Beacon 只把它抽象成
BuildProvider(Build #18231 · 🟡 Building · Game-A · develop · a82f91c · 18m), 不需要理解整套内部系统。 - 失败即 Action 场景:
🔴 Build Failed → [查看日志] [重新打包]。
3. Provider 分类(三类 + 通用接入)¶
Provider
├── Status Provider GitHub Actions、公司打包、Jenkins、GitLab、Docker …
├── Usage Provider Claude、OpenAI/Codex、Gemini …
└── Machine Provider 服务器、PC、Agent
原则:
- 不为公司内部系统写死接口——公司打包工具实现 Status Provider 适配自己的 API, 转换成统一模型后进 Core,系统换了 Core 不动。
- Generic HTTP Provider(杀手级能力):不为每个内部系统写 C# 插件,配置化接入任意 HTTP API。
已落地形态:组件类型
http.status(状态灯:状态词表→级别映射)与http.quota(额度数值卡: total/used/remaining/reset 字段映射,见 §8)——widgets.json 内 JSON 配置(连接 endpoint + 凭据 + 点路径):
{
"type": "http.status",
"connectionId": "ci-local",
"config": {
"label": "company-build",
"status_path": "$.status", // $.a.b[0] 点路径提取
"summary_path": "$.message",
"url_path": "$.html_url",
"success_values": "success,ok,passed,healthy",
"warning_values": "running,building,pending,queued",
"error_values": "failed,failure,error,critical"
}
}
已落地(批3-补42,2026-10-12):YAML provider DSL 已实现——连接 Settings 配 dsl_path 指向声明文件即启用,不配置即零变化(既有 widget.Config 路径逐字节等价)。口径:声明层只供数据提取缺省值(status/summary/url 路径、状态词表、额度路径与单位),widget.Config 实例值仍优先(声明层不夺实例覆盖权);label/icon/阈值 属组件实例,不进 DSL;actions 走既有 Action 执行器链路(open.url/http/webhook),retry(max_attempts 1–10、backoff_seconds 0–300)落到 Runner 重试参数(默认 1 次=不重试,重试共享同一总超时预算,用户取消/超时不重试)。零第三方依赖:内置极小 YAML 子集解析器(缩进映射 / - 列表 / 引号 / 行内注释),支持外的语法(flow、块标量、Tab、多文档)fail-loud 带行号,坏文件落 Degraded 卡面、动作加载失败记警告跳过。示例:
# 连接 Settings: dsl_path: C:\Beacon\packer.yaml
provider: company-packager
mapping:
status_path: $.job.state
success_values: green,passed
actions:
- id: restart
type: http
name: 重启打包任务
url: https://packer.local/api/jobs/42/restart
method: POST
confirm: true # http/webhook 默认 true;open.url 默认 false
retry:
max_attempts: 3 # 1–10,默认 1(不重试)
backoff_seconds: 5 # 0–300,默认 5
- id: dashboard
type: open.url
url: https://packer.local/dashboard
不管内部是自研、老旧还是「垃圾」系统,只要有 HTTP API 就能接入 Beacon。 凭据一律
credentialRef+ DPAPI(严禁明文 token,与连接密钥同一条安全约束)。
- GitHub Provider 是参考实现:GitHub Actions REST API(workflow runs 的状态/重跑/取消/日志)
直接落成
GitHubProvider;公司打包系统落成HttpProvider——两者共同验证抽象是否通用。
4. AI Usage 一级概念:UsageMetric¶
状态:概念设计,未落地独立类型——当前用量组件直接以
WidgetState(payload + 阈值严重度)承载,不引入UsageMetric结构;下列模型为后续抽象的方向记录。
CI 与 AI 额度的本质区别:
CI: 失败 → 处理
AI: 额度 → 持续消耗 → 接近上限 → 预测耗尽 → 提醒 → 切换模型 / 等待恢复
因此 AI Usage 单列 Usage Provider,且不做统一百分比字段——不同服务限制口径完全不同 (Claude API 有 RPM、输入/输出 tokens/分钟等组织级限制;订阅制的消费窗口又是另一套):
UsageMetric
├── name / current / limit / unit
├── window (1h / 5h / weekly / monthly)
├── resetAt?
├── percentage?
└── status
同模型可表达:
| 来源 | 表达 |
|---|---|
| Claude | Input tokens 82M / 100M,window = 1h |
| Codex | Usage 72%,window = weekly |
| OpenAI API | Cost $18.42 / $50,window = monthly |
进阶方向(预测型 Signal,Beacon 真正有意思的点):
Claude 82% used 预计 47 min 后达到限制
Codex 71% used weekly 8h 后重置
主动提醒:⚠ Claude 5h quota 82% used / ⚠ Codex weekly 91% / ✓ quota recovered。
5. P0(方向确认的首批清单)¶
- Company Build Provider(Status Provider 适配公司打包 API)
- GitHub Actions Provider
- Generic HTTP Provider(YAML mapping + actions)
- Usage Provider 抽象(
UsageMetric) - Claude Usage
- OpenAI/Codex Usage
- Notification(复用现有通知链路)
- L0 / L1 / L2(复用现有链路)
完成即:Beacon 成为自己每天真正会用的工具。
6. 与现有架构的对应¶
| 方向 | 现状(RFC-001 / 代码) |
|---|---|
| Status Provider | IConnectionProvider + IWidgetProvider 已在(GitHub 连接 = 参考实现) |
| 统一 Signal | WidgetState(id / title / severity / lifecycle / updatedAt / …)+ StatusAggregator |
| 机密 | credentialRef + ISecretStore(DPAPI,严禁明文 token) |
| 刷新 | RefreshScheduler 分层调度(状态与额度的窗口粒度可复用) |
| 通知 | NotificationEngine + Toast(B-5xx 已接) |
| Actions | IActionExecutor + ActionRunner(重跑/取消类动作落点已有) |
| Usage Provider、Generic HTTP | 已落地:http.status / http.quota / bigmodel.usage / claude.usage / kimi.coding / deepseek.balance / ark.usage / mimo.usage / codex.usage / copilot.usage / opencode.usage / qwen.usage / moonshot.balance / sensenova.tokenplan(§8,详细进度) |
| Jenkins / 公司打包槽位 | 已落地(2026-10-11):jenkins.build——开源标准 JSON API(批3-补31,批3-补27 挂起项关闭) |
| Machine Provider | 部分落地(2026-10-11 批3-补32/33/36):machine.net 本机网络(IP/↑↓速率/累计流量)+ machine.git 本机 Git 仓库(↑↓·改·stash,每仓库一张卡)+ machine.local 本机资源(CPU/内存/磁盘+阈值),均零凭据零网络;远程机器/服务器管理(§5 三类之一)按冻结记录不做 |
7. 排期约定¶
- 先收口 M5:B-803 真机走查、B-804 干净 Win11 VM,不打断验收;
- 收口后把 §5 P0 作为增补分组并入
mvp-issues.md,按 P0 重排后续阶段优先级; - 现有 43 条 issue 内容不变,只做优先级调整与增补。
8. 已落地(P0 进度)¶
- Generic HTTP Provider(P0 #3):组件类型
http.status——点路径提取$.a.b[0].c,状态词→级别映射可配; - 通用额度数值卡(验收反馈):组件类型
http.quota——任意配额 JSON 字段映射上板:total_path必配,used_path/remaining_path二选一(后者自动推导已用),reset_path支持 epoch 秒/毫秒/ISO 自动识别,unit/warn_percent(默认 60)/error_percent(默认 90)可配;WidgetState.Progress渲染为 tile 底部 进度条(额度占比同色填充),payload 存裸数值(% 属显示层);设置页 bigmodel 模块附「一键添加 GLM 额度组件(示例)」, 连接测试通过后提示经组件向导上板——绑定流:连接测试 → 选组件类型 → 选连接 → 配字段 → 钉选显示(带 source 标注)。 - 智谱 GLM 套餐额度(P0 #5 提前):组件类型
bigmodel.usage——GET https://open.bigmodel.cn/api/monitor/usage/quota/limit, 裸 Key 认证(Authorization 头不带 Bearer),data.limits[]归一化为 5 小时/周/月三窗口,阈值告警; 摘要与 payload 带最近重置时间(监控接口原生nextResetTimeepoch ms,5h 窗优先,本地时区 MM-dd HH:mm); Z.AI 国际站把连接 Endpoint 换成https://api.z.ai/api/monitor/usage/quota/limit即用; - Claude Code 本机用量(P0 #5):组件类型
claude.usage——读本机~/.claude/projects/**\/*.jsonl(ccusage 同源数据, ccusage.com 口径),按窗口聚合 token 与 costUSD;零凭据零网络,daily_cost_limit可选阈值告警(无上限恒 Success); - Kimi For Coding 套餐余量(P0 #5):组件类型
kimi.coding——默认GET https://api.kimi.com/coding/v1/usagesBearer 认证(sk-kimi-* Key,与 Moonshot 开放平台两套体系);控制台真实口(2026-10-11 用户实抓)为 POSTwww.kimi.com/apiv2/kimi.gateway.billing.v1.BillingService/GetUsages(Cookie 认证,Settings 加http_method=POST/auth_header=Cookie/http_body切换)。响应usages[](scope=FEATURE_CODING)条目 detail=周期窗、limits[]=5h 窗,totalQuota进 payload,数值为字符串(解析容忍);旧形状(顶层 usage+limits[]+membership.level)兼容兜底。窗口归一化 5h/周,按剩余百分比阈值告警(warn 30 / error 10); 卡面/进度条为已用口径(2026-10-13 用户令:已用=100−剩余反推,与 bigmodel/ark 的 Progress 语义一致)。 凭据模型:Cookie 由用户从浏览器 F12 复制粘贴进设置凭据框(DPAPI 存储、请求时回放),Beacon 不做扫码/登录流;会话过期后重录一次(与 MiMo 控制台 Cookie 同口径); - DeepSeek 开放平台余额(P0 #5):组件类型
deepseek.balance——GET https://api.deepseek.com/user/balance, Bearer 认证,balance_infos[]字符串金额,is_available=false直接 Error,余额击穿下限告警(warn 20 / error 5,按余额币种) (2026-10-09 实测真数据:CNY 余额、is_available=true,形状逐字段吻合); - 火山方舟 Coding Plan Pro 额度(P0 #6):组件类型
ark.usage——火山控制面 OpenAPIGetCodingPlanUsage(open.volcengineapi.com,V4 签名火山变体;凭据为控制台 AK/SK 一次粘贴AccessKey:SecretKey只进 DPAPI—— 推理 ARK_API_KEY 实测被管控面 400 拒绝,不能互推),Result.QuotaUsage[]归一化 5h/周/月三窗口已用百分比 (接口只给百分比,绝对数不经此口);空数组=未订阅/已回收,渲染「无套餐」Info 卡非错误; - 小米 MiMo 用量卡(AI Usage 九家之一):组件类型
mimo.usage——三档降级:①控制台套餐用量(端点 2026-10-10 前端 bundle 实证、响应真身 2026-10-11 用户实抓:GET platform.xiaomimimo.com/api/v1/tokenPlan/usage, Cookieapi-platform_ph认证 + plan-manage referer;响应data.monthUsage/usage块 +items[],percent字段是 0-1 比例非 0-100,used/limit 自算精确百分比;早前「/usage 等 7 端点全 404」系 推理域 API 实测,控制台域例外)②本机计数(Settingsusage_endpoint,防御解析 total_calls/window_calls/window_minutes →「本机累计 N 次 · 近M分 K 次」)③皆无 → 额度位「无额度口」+ plan-manage 指引、模型数降 Summary 次行(用户令:模型数是目录不是额度,不得占额度位)。 Cookie 凭据模型同 Kimi:浏览器复制粘贴 + DPAPI 回放,不做扫码登录,过期重录; - OpenAI Codex 本机统计(AI Usage 九家之一):组件类型
codex.usage——读本机~/.codex/sessions/**/rollout-*.jsonl的 token_count 事件(total_token_usage 为会话内累计值,每文件取末条求和), 零凭据零网络,卡面如实标注「本地统计」(ChatGPT OAuth 官方用量口与「连接+凭据」模型不同构,暂不接); - GitHub Copilot 套餐配额(AI Usage 第八家):组件类型
copilot.usage——官方编辑器扩展同款配额端点GET api.github.com/copilot_internal/user(PAT 需 copilot scope;Editor-Version / Copilot-Integration-Id 两头实测必带,api.githubcopilot.com 域同样两头才通),quota_snapshots三槽——高级请求(Pro 实测 1500/月 含额)按已用百分比过阈值(默认 80/95 可配),聊天/补全 unlimited 显 ∞;Pro 月付标官方价 $10/月,quota_reset_date为额度重置日(订阅续费日本接口不返回,不编造);401/403/404→Degraded、5xx→Offline; - OpenCode Go 用量(AI Usage 第九家):组件类型
opencode.usage——官方 Console Budgets API 直连 (文档面正式接口,v2 docs/console/api/budgets):GET opencode.ai/console/api/v2/budgets/members(oc_sk Key Bearer,读 Budgets 需 All 权限;v1 已迁 v2,官方公告 v1 过渡期后下线)。 金额为 micro-cents 十进制字符串(1 美元=1 亿,官方防精度口径),limit_micro_centsnull=无上限;多成员聚合(消费求和/任一 null 即无上限/任一 exceeded 即超); v2 成员对象新增additional_budget_rules(共享/模型专项预算规则数组)——provider 只取主预算四字段 (limit/spent/exceeded/resets_at),未知字段解析自然容忍(JsonDocument+TryGetProperty 不 strict); 官方exceeded一票 Error;resets_at按 UTC 自然月;卡面「Go $10/月」为展示层套餐标注(用户订阅口径), payload 只存 API 真数字;401/403/404→Degraded、5xx→Offline; 卡面/进度条(2026-10-13 用户令):有限额时 payload 带 percent(限额换算已用%)且 Progress=已用占比 0-1 (与 ark/bigmodel 同语义);exceeded 进度条满格(对齐 ark「已尽=满格」);无上限沿用$spent · 无上限不编百分比; - 阿里千问 百炼 Token Plan(AI Usage 第十家,2026-10-09):组件类型
qwen.usage——Token Plan (Coding Plan 专属 Keysk-sp-前缀,Base URLtoken-plan.cn-beijing.maas.aliyuncs.com,OpenAI 兼容口/compatible-mode/v1)。官方额度查询 REST 口未开放(FAQ 只有控制台 「我的订阅」页;社区实证 cc-switch#7484——专属 Key 只授权模型调用,/models 实测 200、控制台查询口不授权), 四档探测后如实降级:默认显示/models模型目录真数据 + 「额度口径官方未开放」;连接 Settings/表单「用量端点」 填自定义口(GET + Bearer),响应按防御键名解析(percent/used_percent、remaining_percent 反推、 remaining/total_credits、reset_at/reset/period_end ISO 或秒级 epoch)即出额度卡(已用% 进度条 + 阈值告警 - 重置时间)。窗口口径:个人版 7 天固定窗口、团队版月度(官方 FAQ),重置以端点数据为准;
- Moonshot 开放平台余额(AI Usage 第十一家,2026-10-10):组件类型
moonshot.balance——开放平台余额监控 (与 Kimi For Coding 套餐是两套账号体系),GET api.moonshot.cn/v1/users/me/balanceBearer 认证, 响应{code:0, data:{available_balance}};余额 ≤warn_below(默认 20)→ Warning、≤error_below(默认 5)→ Error, 响应不含余额数据按 Degraded 处理(连接测试同口径,代理回错误体不算连通); -
商汤 SenseNova Token Plan 积分池(AI Usage 第十二家,2026-10-13 用户令):组件类型
sensenova.tokenplan—— 控制台池级额度GET platform.sensenova.cn/lite/console/v1/tokenplan/pool-usage,Bearer 控制台 JWT (会话令牌不是 API Key,带exp会过期);响应 plan + pools[],每池 window_5h/window_7d(limit/used/remaining/reset_at) 与赠额(grant_balance/nearest_grant_expiry);最差池的最差窗优先(已用最高,并列按池序 → 5h → 7d)驱动主数值/ 进度条/级别,摘要多池齐显,tile 数值位「池名 窗名 已用%」;赠额到期预警(7 天内或剩余占比 ≤10%)不低于 Warning; JWT 过期 401 → Degraded 明示重取指引不静默空数据;多账号 = 多连接; -
Jenkins 构建状态(开源 CI,master-plan §13 公司打包工具槽位):组件类型
jenkins.build——开源 Jenkins 标准 JSON API(任意实例通用,非厂商专属):连接 Endpoint=实例基址,凭据可空(匿名读)或user:apiTokenBasic 认证;组件job_path逐段job/<name>转义(Folder 嵌套支持)。一次请求/job/.../api/json?tree=…按color判级(blue→Success、yellow→Warning 不稳定、red/dark_red→Error、aborted→Cancelled、gray/notbuilt →Info 未构建、disabled→已禁用;_anime后缀=构建中 → Running)——job 级lastBuild不含 result (weekly.ci.jenkins.io 真实夹具实证),不追打第二击。连接测试取根视图/api/json,2xx 且是 JSON 才算 连通(反向代理回 200 HTML 壳按 Degraded,代理假阳性不算连通); - 本机网络(2026-10-11 批3-补32):组件类型
machine.net——只读本机NetworkInterface(零凭据零网络): IP + 实时 ↓↑ 速率(相邻两次采样计数差÷时间差,machine 档 15s,首刷无基线只出 IP 与累计值)+ 累计流量 (自开机,进 payload 走 L3 详情);自动选卡=Up+非回环+有 IPv4、有网关者优先,点名网卡不存在按 Degraded; 不触及冻结的远程 Machines 管理; - 本机 Git 仓库(2026-10-11 批3-补33,用户拍板「git 都搞」):组件类型
machine.git——每仓库一张卡beacon ↑2↓5 · 改 7 · stash 1:git CLI 三连只读(status --porcelain -b / rev-list @{u}...HEAD / stash list, 零网络零凭据,无上游不追打第二击);behind>0 或分叉 → Warning(要动手才亮黄,仅待推 ahead 是 Info); 变更文件前 5 条预览(重命名取 -> 右侧)进 payload 走 L3 详情,32 DIP 装不下也不分页; - 本机资源(批3-补32 拍板回执「本机的cpu 内存 磁盘空间」,批3-补36 落地):组件类型
machine.local—— CPU/内存/磁盘一行三个百分比(零凭据零网络):CPU=相邻两次累计 tick 差分(首刷无基线不出 CPU,回退重记基线); Linux 读 /proc(stat 首行 + meminfo MemAvailable,老内核 MemFree 兜底)、Windows 走 GetSystemTimes + GlobalMemoryStatusEx,磁盘统一 DriveInfo(空=系统盘/根分区,点名不存在/未就绪 Degraded fail-loud); 三项阈值默认 90%(超线亮黄,Signal 不分级),按四舍五入后的显示值比线(所见即所警); - Herald 接入(2026-10-11 批3-补35/37,用户拍板 incidents+feed 先行,deliveries 续批补齐):连接类型
herald—— Endpoint=基址,凭据可空(未开 auth 匿名可用)或 API Key 走 X-API-Key 头,测试打恒公开口/api/v1/status(2xx+JSON 才算连通);herald.incidents事件台账(open 未决>0 亮黄、含 critical 亮红,回看口径恒 Info)+herald.feed订阅源(公开类目 RSS 或私密 token feed——token 即凭据走 DPAPI 不落配置;未读=上次刷新以来 新增 guid,首刷只记基线)+herald.deliveries投递失败(/api/v1/logs?status=failed,failed>0 亮黄 = 送信没送达要人管;日志态词表 pending/success/failed/shadow 写死四态,重试耗尽 dead 在日志层也写 failed 不区分,shadow 被 status 过滤天然排除)。Herald 是用户自有项目(cuihairu/herald,统一订阅与投递中枢); - 全局检查频率(设置 → 常规):
AppConfig.PollIntervalSeconds(0=按各组件刷新档策略表,默认)—— 组件级「检测间隔」优先,未设组件级的按全局走;五档(按档位/15s/30s/1m/5m);改动经变化检测重建调度注册 (未变不动,避免设置页随手一改全量重拉),立即生效并落日志; - 组件类型短名(tile 标签/L2 chip 统一口径):
WidgetTypeNames(Core,纯函数可单测)——此前 PinTile 标签兜底取类型尾段(ark.usage→ tile 名显示「usage」,字段名冒充显示名,2026-10-09 用户实测), 现按类型前缀映射连接类型短名(火山方舟/智谱/小米 MiMo/阿里千问/…),QuickPanel 分组 chip 的 GLM/ARK 硬编码并入同表;未知前缀仍退类型尾段(不抛); - 方舟 5h 窗口主口径(bug 批3,2026-10-13 用户令修订):
ark.usagetile 主数值/级别/进度条原按 Coding Plan 5 小时窗口语义取 session 档为主口径;现统一为最差窗口优先——级别/进度条/主数值取 已用最高窗(5h/周/月)并标窗名,任一窗 ≥100% 走已尽分支恒定 Error;Summary 带「最差窗 x% · 其余窗 · 重置」, 周/月降为 payload 明细供 L3;智谱/千问等各窗口口径不受影响; - PowerToys 形态配置中心:设置页左侧模块目录(每模块独立 icon + 启停开关),开启才见对应配置页;
启停落
connections.json的enabled,宿主跳过刷新,面板残留状态即时清理。 - L0 独立悬浮框形态(B-701 扩展):设置「悬浮形态」二选一——宿主面板(默认,单窗多 tile)/ 独立悬浮框
(每钉选组件一窗,桌面任意拖放,位置按组件各记
PinLayout.FloatingX/Y物理像素,未拖过按序级联); 两形态同享置顶哨兵、点击下钻 L2、停用模块即时消失;切换重启生效。 产品拍板(数值类悬浮:可配置;默认开,2026-10-11 用户令):独立悬浮窗对信息密集组件(趋势图/状态灯组, descriptorFloatingSupported)恒生效;数值/额度类(descriptorFloatingOptIn)由设置「数量悬浮窗」总开关控制—— 默认开(numericFloatingEnabled默认 true;2026-10-08 曾拍默认关,用户令推翻), 关闭即刻收回落盘恢复宿主面板承载。当前组件库暂无 FloatingSupported 类型(状态类恒面板承载),开关只挡数值类独立悬浮窗一条路。
调研结论(暂缓接入)¶
- 阿里云百炼(DashScope/千问):~~无独立的余额/用量查询接口……接入成本高、信息增益低,暂缓~~
已被 2026-10-09 Token Plan(Coding Plan)打破——按量计费口径的结论不再适用:Token Plan 专属 Key
只授权模型调用、官方额度查询 REST 口仍未开放,已按「目录真数据 + 自定义用量端点」落
qwen.usage(见 §8 AI Usage 第十家);按量计费用户的账户余额仍走阿里云 BSS OpenAPIQueryAccountBalance(暂缓不变)。 - 小米 MiMo:API 开放平台(platform.xiaomimimo.com)已开放、模型权重 MIT 开源,但未见公开的余额/用量查询接口
(2026-10-10 复核:/usage /quota /balance 等 7 端点全 404,响应无限流头)——
mimo.usage已按「无额度口 + 本机计数」落(见 §8);官方日后开放即按 bigmodel/kimi 同构升级。另注:小米 key 本机(litellm/relay)无调用方, litellm 的 mimo-v2.6-flash-free 走 DeepSeek serverless 中转非小米直连。 - Moonshot 开放平台余额:~~端点已确认,后续按 deepseek 同构接入~~
已于 2026-10-10 落
moonshot.balance(见 §8 AI Usage 第十一家,按 deepseek 同构)。 - OpenAI Codex 用量:社区走 ChatGPT OAuth(
chatgpt.com/backend-api/wham/usage,5h/周/月限额+Credits), 需要本机 OAuth 凭据封装,与当前"连接+凭据"模型不同构——已按第三档落本机会话 JSONL 统计(codex.usage,见 §8), OAuth 口单独排期。
配置示例(config 目录 %APPDATA%/Beacon/)¶
连接 connections.json(凭据只存 credentialRef,Key 本体在 DPAPI,设置页录入):
[
{
"id": "ci-local",
"type": "http",
"endpoint": "http://192.168.1.10:8080/api/status",
"credentialRef": "conn:ci-local",
"enabled": true,
"settings": { "auth_header": "X-Token", "auth_prefix": "" }
},
{
"id": "zhipu",
"type": "bigmodel",
"endpoint": null,
"credentialRef": "conn:zhipu",
"enabled": true
},
{
"id": "claude-local",
"type": "claude",
"endpoint": null,
"enabled": true
},
{
"id": "kimi",
"type": "kimi",
"endpoint": null,
"credentialRef": "conn:kimi",
"enabled": true
},
{
"id": "deepseek",
"type": "deepseek",
"endpoint": null,
"credentialRef": "conn:deepseek",
"enabled": true
},
{
"id": "ark",
"type": "ark",
"endpoint": null,
"credentialRef": "conn:ark",
"enabled": true
},
{
"id": "mimo",
"type": "mimo",
"endpoint": null,
"credentialRef": "conn:mimo",
"enabled": true,
"settings": { "usage_endpoint": "" }
},
{
"id": "codex-local",
"type": "codex",
"endpoint": null,
"enabled": true
},
{
"id": "copilot",
"type": "copilot",
"endpoint": null,
"credentialRef": "conn:copilot",
"enabled": true
},
{
"id": "opencode",
"type": "opencode",
"endpoint": null,
"credentialRef": "conn:opencode",
"enabled": true
}
]
http 连接 settings:auth_header(默认 Authorization)、auth_prefix(默认 "Bearer ",可置空);
bigmodel 连接 endpoint 可空(自动用官方监控接口),认证默认裸 Key(不带前缀);
claude 连接零凭据零网络(endpoint 可填自定义会话目录);kimi/deepseek endpoint 可空走官方接口,Bearer 认证;
ark 凭据为控制台 AK/SK(AccessKey:SecretKey 一次粘贴,只进 DPAPI);mimo endpoint 可空走官方推理域,
usage_endpoint 填自定义用量口(计数/百分比形状出数,认不出的形状显式 Degraded——2026-10-13 用户令不透传远端原文上卡面);codex 零凭据零网络(endpoint 可填自定义会话目录);
copilot 凭据为 GitHub PAT(需 copilot scope),endpoint 可空走官方配额端点(官方扩展同款两头自动带);
opencode 凭据为 OpenCode Key(oc_sk,读 Budgets 需 All 权限),endpoint 可空走官方 Console Budgets 接口。
组件 widgets.json:
[
{
"id": "http.status:pack-a",
"type": "http.status",
"connectionId": "ci-local",
"refreshTier": "ci",
"pinned": true,
"config": {
"label": "打包机A",
"status_path": "$.status",
"summary_path": "$.message",
"url_path": "$.html_url",
"success_values": "success,ok,done,passed,healthy,finished",
"warning_values": "running,building,pending,queued,in_progress,deploying,starting",
"error_values": "failed,failure,error,critical,broken"
}
},
{
"id": "http.quota:custom",
"type": "http.quota",
"connectionId": "ci-local",
"refreshTier": "ci",
"config": {
"label": "自定义额度",
"total_path": "$.data.total",
"used_path": "$.data.used",
"reset_path": "$.data.reset_at",
"unit": "tokens",
"warn_percent": "60",
"error_percent": "90"
}
},
{
"id": "bigmodel.usage:GLM",
"type": "bigmodel.usage",
"connectionId": "zhipu",
"refreshTier": "ci",
"config": { "label": "GLM", "warn_percent": "60", "error_percent": "90" }
},
{
"id": "claude.usage:claude",
"type": "claude.usage",
"connectionId": "claude-local",
"refreshTier": "static",
"config": { "label": "Claude", "days": "1", "daily_cost_limit": "35" }
},
{
"id": "kimi.coding:kimi",
"type": "kimi.coding",
"connectionId": "kimi",
"refreshTier": "ci",
"config": { "label": "Kimi", "warn_percent": "30", "error_percent": "10" }
},
{
"id": "deepseek.balance:deepseek",
"type": "deepseek.balance",
"connectionId": "deepseek",
"refreshTier": "default",
"config": { "label": "DeepSeek", "warn_below": "20", "error_below": "5" }
},
{
"id": "ark.usage:ark",
"type": "ark.usage",
"connectionId": "ark",
"refreshTier": "ci",
"config": { "label": "方舟", "warn_percent": "60", "error_percent": "90" }
},
{
"id": "mimo.usage:mimo",
"type": "mimo.usage",
"connectionId": "mimo",
"refreshTier": "ci",
"config": { "label": "MiMo" }
},
{
"id": "codex.usage:codex",
"type": "codex.usage",
"connectionId": "codex-local",
"refreshTier": "static",
"config": { "label": "Codex", "days": "1" }
},
{
"id": "copilot.usage:copilot",
"type": "copilot.usage",
"connectionId": "copilot",
"refreshTier": "default",
"config": { "label": "Copilot", "warn_percent": "80", "error_percent": "95" }
},
{
"id": "opencode.usage:opencode",
"type": "opencode.usage",
"connectionId": "opencode",
"refreshTier": "default",
"config": { "label": "OpenCode Go $10/月", "warn_percent": "80", "error_percent": "95" }
}
]
http.status 状态词表可整体省略(用上例默认值);未知状态词按 Warning 兜底(宁报勿漏)。
bigmodel.usage 摘要形如 GLM Coding Pro · 5h 窗口已用 42.5% · 周 8% · 月 3%;最差窗口优先(2026-10-13 用户令):级别/进度条/主数值一律取已用最高的窗口并标窗名,warn/error 阈值仍作用在最差窗已用 % 上(语义不变)。
claude.usage 摘要形如 Claude · 今日 · $1.00 · 2.5K tok · 12 条(costUSD 缺失时只报 token,不自行估价)。
kimi.coding 摘要形如 Pro · 周 已用95% · 5h 已用5%(社区口带套餐等级;控制台口无等级,head 落 label 或「Kimi」);卡面/多窗口/进度条为已用口径(2026-10-13 用户令,与 bigmodel/ark 统一,已用=剩余反推),最差窗口优先:级别/进度条/主数值取剩余最低(=已用最高)窗并标窗名,阈值 warn 30 / error 10 仍按剩余百分比判定(越低越差,语义不变)。
deepseek.balance 摘要形如 DeepSeek · ¥110.00(含赠 ¥10.00),币种 CNY/USD 自适应。
ark.usage 摘要形如 方舟 · 月 92% · 5h 42.5% · 周 8% · 待重置(接口只给百分比;最差窗口优先 2026-10-13 用户令:级别/进度条/主数值取已用最高窗并标窗名,其余窗随后,重置跟最差窗;任一窗 ≥100% → 已尽分支恒定 Error + 满格);mimo.usage
摘要形如 MiMo · 本机累计 128 次 · 近60分 6 次 · 官方无额度接口(本机计数)(配计数源)或
MiMo · 官方无额度接口 · 8 模型可用(模型数次行,额度位「无额度口」);codex.usage 摘要形如 Codex · 今日 · 8 会话 · 12.3K tok · 本地统计
(days 默认 7,days=1 显示「今日」);copilot.usage 摘要形如 Copilot · Pro $10/月 · 高级 1/1500 · 聊天 ∞ · 补全 ∞ · 11-01 重置
(级别取高级请求已用百分比过阈值);opencode.usage 摘要形如 OpenCode Go $10/月 · $0.00 · 无上限 · 11-01 重置
(有上限时 已用 / 上限 同段展示)。