creditdaddy 0.9.2 → 0.9.5
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/README.md +228 -204
- package/bin/creditdaddy.js +7 -3
- package/package.json +28 -28
- package/src/checkin.js +2 -1
- package/src/constants.js +4 -2
- package/src/daemon.js +76 -13
- package/src/localDetect.js +2 -2
- package/src/logger.js +4 -1
- package/src/mirasimClient.js +189 -0
- package/src/mirasimLocal.js +307 -0
- package/src/panel.html +589 -70
- package/src/providers.js +25 -1
- package/src/qoderApp.js +6 -4
- package/src/qoderUmid.js +25 -4
- package/src/store.js +10 -0
- package/src/zcodeClient.js +50 -36
- package/src/zcodeLocal.js +103 -1
package/README.md
CHANGED
|
@@ -1,234 +1,258 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="desktop/icon.png" width="96" alt="CreditDaddy">
|
|
4
|
+
|
|
1
5
|
# CreditDaddy
|
|
2
6
|
|
|
3
|
-
|
|
7
|
+
**AI 编程工具多账号本地管理 + 每日积分自动领取(领鸡蛋)助手:Qoder · WorkBuddy · ZCode,集成 10Router 额度总览与用量同步**
|
|
8
|
+
|
|
9
|
+
[](https://github.com/techysy/CreditDaddy/releases/latest)
|
|
10
|
+
[](https://github.com/techysy/CreditDaddy/actions/workflows/ci.yml)
|
|
11
|
+
[](https://github.com/techysy/CreditDaddy/releases)
|
|
12
|
+
[](https://www.npmjs.com/package/creditdaddy)
|
|
13
|
+
[](#下载)
|
|
14
|
+
[](https://nodejs.org/)
|
|
15
|
+
[](LICENSE)
|
|
16
|
+
|
|
17
|
+
[下载](#下载) · [架构](#%EF%B8%8F-架构) · [功能](#功能) · [10Router 集成](#10router-集成) · [产品线说明](#产品线说明) · [快速开始](#快速开始) · [HTTP API](#本地-http-api) · [相关项目](#-相关项目) · [许可证](#-许可证)
|
|
18
|
+
|
|
19
|
+
<img src="docs/screenshot-dashboard.png" width="860" alt="CreditDaddy 仪表盘">
|
|
20
|
+
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
> 项目原名 **QoderDaddy**,v0.3.0 起更名为 CreditDaddy:数据目录自动从 `~/.qoderdaddy` 迁移到 `~/.creditdaddy`(旧目录保留),旧的 `QODERDADDY_HOME` / `QODERDADDY_PASSWORD` 环境变量与 QoderDaddy 导出文件仍可使用。
|
|
24
|
+
> 架构参考 [WorkDaddy](https://github.com/babygoton/WorkDaddy)(本地守护进程 + Web 面板 + 数据全留本机 + 仅监听 127.0.0.1),签到能力移植自 [10router](https://github.com/techysy/10router) 的 qoderCheckin / codebuddyCheckin,并按 Qoder App 0.2.x、WorkBuddy 桌面端的真实协议补全。
|
|
25
|
+
|
|
26
|
+
## 下载
|
|
27
|
+
|
|
28
|
+
从 [**Releases**](https://github.com/techysy/CreditDaddy/releases/latest) 下载对应平台的安装包:
|
|
29
|
+
|
|
30
|
+
| 平台 | 文件 | 说明 |
|
|
31
|
+
| --- | --- | --- |
|
|
32
|
+
| Windows | `CreditDaddy-Setup-<版本>.exe` | 安装版(推荐) |
|
|
33
|
+
| Windows | `CreditDaddy-Portable-<版本>.exe` | 便携版,免安装,双击运行 |
|
|
34
|
+
| macOS(Apple Silicon) | `mac-CreditDaddy-<版本>-arm64.dmg` | M1 及以后的芯片 |
|
|
35
|
+
| macOS(Intel) | `mac-CreditDaddy-<版本>.dmg` | Intel 芯片 |
|
|
36
|
+
| 飞牛 fnOS | `creditdaddy-window-<版本>-x86.fpk` | **推荐**:桌面窗口入口(x86) |
|
|
37
|
+
| 飞牛 fnOS | `creditdaddy-window-<版本>-arm.fpk` | 桌面窗口入口(ARM) |
|
|
38
|
+
| 飞牛 fnOS | `creditdaddy-<版本>-x86.fpk` | 独立全屏 / 兼容入口(x86) |
|
|
39
|
+
| 飞牛 fnOS | `creditdaddy-<版本>-arm.fpk` | 独立全屏 / 兼容入口(ARM) |
|
|
4
40
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
[](LICENSE)
|
|
8
|
-
[](https://github.com/techysy/CreditDaddy/releases)
|
|
9
|
-
[](https://www.npmjs.com/package/creditdaddy)
|
|
41
|
+
> macOS 安装包未做代码签名:首次打开请在「应用程序」里**右键 → 打开**,或在终端执行 `xattr -cr /Applications/CreditDaddy.app`。
|
|
42
|
+
> 飞牛 fnOS 部署自动启用密码保护,首次安装在向导中设置密码,「应用设置」中可重置。
|
|
10
43
|
|
|
11
|
-
|
|
44
|
+
---
|
|
12
45
|
|
|
46
|
+
## 🏗️ 架构
|
|
13
47
|
|
|
14
|
-
>
|
|
15
|
-
> 旧的 `QODERDADDY_HOME` / `QODERDADDY_PASSWORD` 环境变量与 QoderDaddy 导出文件仍可使用。
|
|
48
|
+
<div align="center">
|
|
16
49
|
|
|
17
|
-
|
|
18
|
-
|
|
50
|
+
<picture>
|
|
51
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/architecture.svg">
|
|
52
|
+
<img src="docs/architecture-light.svg" width="860" alt="CreditDaddy 架构">
|
|
53
|
+
</picture>
|
|
54
|
+
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
---
|
|
19
58
|
|
|
20
59
|
## 功能
|
|
21
60
|
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
## WorkBuddy 说明
|
|
37
|
-
|
|
38
|
-
- **账号来源**:WorkBuddy 与 CodeBuddy CLI / 插件共用凭据目录 `%LOCALAPPDATA%\CodeBuddyExtension\Data\Public\auth\`(macOS `~/Library/Application Support/CodeBuddyExtension/…`,Linux `~/.local/share/CodeBuddyExtension/…`),
|
|
39
|
-
`workbuddy-desktop.info` 是当前登录会话,带时间戳的同名文件是历史会话。登录 token 是 Keycloak JWT,按签发方区分:`codebuddy.cn` / `workbuddy.cn` / `copilot.tencent.com` → 国内版,`codebuddy.ai` / `workbuddy.ai` → 国际版
|
|
40
|
-
- **签到**:`POST {域名}/v2/billing/meter/checkin-activity-status` 查今日是否已签(已签不再请求),未签则 `POST …/daily-checkin`;国内版每日签到送积分并累计连签天数
|
|
41
|
-
- **积分**:`POST {域名}/v2/billing/meter/get-user-resource`,循环额度包(体验版月度额度)按本周期计,活动赠送包按剩余量与到期时间计
|
|
42
|
-
- **浏览器登录**:`POST {域名}/v2/plugin/auth/state?platform=WorkBuddy` 取授权地址,用户登录后轮询 `/v2/plugin/auth/token?state=`(11217 = 等待)拿 token,再轮询 `/v2/plugin/login/account?state=`(12151 = 等待)与 `/v2/plugin/accounts` 补齐账号信息,组装成与 `workbuddy-desktop.info` 同结构的会话;国内版走 www.codebuddy.cn,国际版走 www.codebuddy.ai
|
|
43
|
-
- **token 刷新**:只在 token 过期或接口返回 401 时用 refreshToken 刷新(`/v2/plugin/auth/token/refresh`);若该账号正是 WorkBuddy 客户端当前登录的账号,会把新 token 同步写回客户端,避免客户端掉线。refreshToken 也失效时(如在别处登出),需要在 WorkBuddy 重新登录后再「本机导入」同步
|
|
44
|
-
- **切换账号**:写入 `workbuddy-desktop.info` 并清除登出标记,WorkBuddy 监听该文件并自动应用;切换前会先把客户端当前会话的最新 token 保存到 CreditDaddy
|
|
45
|
-
- **国际版「保持活跃」**:国际版没有签到接口,官方规则为「当天有 ≥1 次有效对话请求即视为活跃用户,发放每日赠送积分」。调度器每天为每个国际版账号发一条免费档模型(rateMultiplier 0,~0 消耗)的极短流式请求(`POST {域名}/v2/chat/completions`,system 提示 + typed blocks 是网关必需格式),2xx 即当日活跃达成;额度耗尽时会得到「等官方发放后再试」的明确提示
|
|
46
|
-
|
|
47
|
-
## ZCode 说明
|
|
48
|
-
|
|
49
|
-
- **账号来源**:ZCode 桌面客户端把当前登录存在 `~/.zcode/v2/credentials.json`(值用客户端私有的 `enc:v1:` AES-256-GCM 加密,密钥从机器信息派生),CreditDaddy 本地解密读取,token 不出机器
|
|
50
|
-
- **浏览器登录**:与客户端的 CLI 轮询登录同一协议 —— `POST https://zcode.z.ai/api/v1/oauth/cli/init`(本地随机 poll token)拿授权地址(回调指向 zcode.z.ai 服务端,无需 `zcode://` 协议,任何浏览器都能用),用户登录后轮询 `/api/v1/oauth/cli/poll/{flow_id}`;Z.ai 账号再用 `api.z.ai/api/auth/z/login` 换业务 token。拿到的凭据按 `credentials.json` 格式用本机密钥加密保存,可直接切换到 ZCode 客户端
|
|
51
|
-
- **没有每日签到,活动领取可自动轮询(开关默认关)**:ZCode 积分靠「活动领取」(billing/preview → billing/claim)。标签页打开「自动领取」后,每轮签到结束会轮询可领活动:先试免验证码领取,需要验证码时 —— 桌面版用隐藏窗口跑阿里云验证码 SDK 静默验证(触发风控时弹出窗口让人工完成,2 分钟超时),NAS / 纯 CLI 环境标记「需手动领取」;平时保持关闭即可,活动期前再开。也可点卡片上的领取按钮手动领取。ZCode 卡片不显示任何签到 / 领取徽标,结果只看运行日志与仪表盘最近记录
|
|
52
|
-
- **客户端版本跟随本机**:billing 类接口校验客户端版本(过低直接 3001),请求头里上报的版本取本机已安装 ZCode 的版本(Windows 注册表读取),没有客户端时用兜底值
|
|
53
|
-
- **出口可切换**:ZCode 上游请求默认「直连优先、代理兜底」,标签页提示条里可切「代理优先、直连兜底」。代理地址可在面板配置(`zcode-net.json`,0600,优先),未配置时取 `HTTPS_PROXY` 环境变量;http 代理 + CONNECT 隧道,纯 Node 内置实现;`NO_PROXY` 与 loopback 始终直连
|
|
54
|
-
- **额度展示**:查询 BigModel Coding Plan(quota/limit + subscription/list)与 Z.ai / Start Plan(billing/balance);balances 为空时从生效套餐的权益派生展示额度(未到生效时间的权益显示「xx 生效」);无有效套餐时显示「仅免费额度」
|
|
55
|
-
- **账号切换**:写回 `credentials.json` / `config.json`,并为每个账号写入独立的设备 ID(`telemetry-state.json` 的 deviceMid),避免账号间被风控关联;需先退出 ZCode 客户端(运行中会覆盖回内存里的旧登录)。切换前当前登录会先保存进 CreditDaddy,不会丢号
|
|
56
|
-
- 协议移植自 [zcode-switch](https://github.com/pjpv/zcode-switch)(MIT)
|
|
61
|
+
**多账号管理与切换**
|
|
62
|
+
- **仪表盘 + 分产品标签页**:首页仪表盘汇总账号总数、今日领取进度、剩余总积分、下次自动执行时间、各产品概况、待处理异常账号(token 失效 / 即将过期、领取失败)与最近领取审计;Qoder、WorkBuddy、ZCode 各自独立标签页,卡片式展示,支持国内 / 国际版筛选,直观查看连续天数与额度包到期,自适应亮色 / 暗色主题。右上角「组件开关」可整块收起不使用的产品 / 10Router 标签页与仪表盘卡片(偏好保存在浏览器本地)。
|
|
63
|
+
- **本机导入**:一键安全读取本机已登录的客户端凭据 —— 本地解密 Qoder / Qoder CN 的 `auth.v1.dat`,读取 WorkBuddy 客户端(当前与历史会话),解密 ZCode 凭据。敏感 Token 绝不出机器;同一用户续期时自动覆盖。
|
|
64
|
+
- **客户端一键换号**:一键将桌面客户端切换至指定账号(WorkBuddy 自动热切换;ZCode 退出客户端后写回),切号前自动保存当前在线 Token,各账号拥有独立设备指纹,杜绝风控串号。
|
|
65
|
+
- **内置隐私(无痕)授权**:桌面版提供隔离的一次性会话窗口进行网页登录授权,不污染系统浏览器 Cookie,支持同平台无缝扩增多账号。
|
|
66
|
+
- **全流程浏览器登录**:支持三家产品线在面板内直接完成网页 / 设备码授权并入库 —— Qoder 设备码授权(PKCE + nonce)、WorkBuddy 状态轮询、ZCode CLI 轮询(支持智谱 BigModel 与 Z.ai)。
|
|
67
|
+
|
|
68
|
+
**自动领取与资产保障**
|
|
69
|
+
- **每日智能轮询**:本地守护进程每 ~2 小时自动扫描执行;当日已领成功的账号自动记忆跳过,未开启活动的账号不落记忆,以每日 10:00 (UTC+8) 刷新周期为准自动重试。
|
|
70
|
+
- **Qoder 国际版风控支持**:真实携带客户端生成的设备风控凭据,还原官方客户端「每日 100 Credits」领取链路。
|
|
71
|
+
- **ZCode 活动智能轮询**:支持免验证码活动直领,遇到图形验证码时桌面版自动拉起静默验证(高风险弹出人工窗口处理),NAS / CLI 环境自动标记提示。
|
|
72
|
+
- **凭据导出导入**:支持口令加密备份,格式与 10Router OAuth 迁移标准(`10router-oauth-secure-v1`)无缝互通,实现多端授权轻松迁移。
|
|
73
|
+
- **安全边界**:守护进程仅监听 `127.0.0.1` 本机回环,严格校验 Host 头防止 DNS 重绑定,拦截跨站 Origin 杜绝 CSRF;存储位于 `~/.creditdaddy`(0600 权限 + 原子写 + 串行锁),无遥测、无第三方依赖。
|
|
57
74
|
|
|
58
75
|
## 10Router 集成
|
|
59
76
|
|
|
60
|
-
在面板「10Router
|
|
77
|
+
在面板「10Router」标签页配置 10Router 服务地址与仪表盘创建的 **虚拟 key**(sk-…)。Key 仅存储于本地 `tenrouter.json`(0600 权限),面板只显示脱敏值。
|
|
78
|
+
|
|
79
|
+
- **供应商额度卡片(10Router 1.2.1+)**:通过 `GET /api/usage/quotas` 一键读取 10Router 中其他供应商(CodeBuddy / Qoder / Claude / GLM 等)的额度卡片。CodeBuddy / Qoder / GLM 会自动标明**国内版 / 国际版**,当额度不足 10% 时自动标红并推送到仪表盘「需要处理」。支持 5 分钟连接级缓存与手动强制刷新。
|
|
80
|
+
- **用量自动同步(10Router 1.0.7+)**:内置与 10router-sync 插件一致的同步逻辑,支持一键或每小时自动同步本机 ZCode(`db.sqlite` 官方渠道)、OpenCode(`opencode.db`)、mirasim(`usage-*.ndjson`)、小米 MiMo(`mimocode.db`)的真实用量至 10Router 统计。支持断点续传与 2 天重叠补偿,服务端校验签名去重。
|
|
81
|
+
- *注:读取 SQLite 依赖 Node 22.5+ 内置的 `node:sqlite`(桌面版与 fnOS nodejs_v24 环境原生支持)。*
|
|
82
|
+
|
|
83
|
+
## 产品线说明
|
|
61
84
|
|
|
62
|
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
85
|
+
### WorkBuddy(腾讯 CodeBuddy 系)
|
|
86
|
+
- **账号来源**:共享 CodeBuddy CLI / 插件凭据目录 `%LOCALAPPDATA%\CodeBuddyExtension\Data\Public\auth\`(macOS `~/Library/Application Support/CodeBuddyExtension/…`,Linux `~/.local/share/CodeBuddyExtension/…`)。按 Keycloak JWT 签发域名自动区分:`*.codebuddy.cn` / `*.workbuddy.cn` / `copilot.tencent.com` 识别为国内版,`*.codebuddy.ai` / `*.workbuddy.ai` 识别为国际版。
|
|
87
|
+
- **签到与积分**:国内版调用 `/v2/billing/meter/daily-checkin` 领取积分并累计签到天数;调用 `/v2/billing/meter/get-user-resource` 查询循环额度与活动赠送包剩余量。
|
|
88
|
+
- **国际版保持活跃**:国际版官方无签到接口,规则为「每日有效对话即可获取赠送积分」。调度器每日自动为国际版账号发起一次极简免费档模型流式会话(rateMultiplier 0,几乎零消耗),达成活跃条件。
|
|
89
|
+
- **Token 续期与切号**:过期时自动通过 refreshToken 换发新 Token。若为客户端当前登录账号,会同步写回文件避免客户端掉线;切号时安全写入 `workbuddy-desktop.info` 并触发客户端热切换。
|
|
65
90
|
|
|
66
|
-
|
|
91
|
+
### ZCode(智谱 GLM / Z.ai)
|
|
92
|
+
- **账号来源**:读取 `~/.zcode/v2/credentials.json`,本地通过派生密钥解密 `enc:v1:` AES-256-GCM 凭据,Token 绝不出机。
|
|
93
|
+
- **活动领取**:支持自动轮询可领活动(`billing/preview` → `billing/claim`)。支持免验证码直接领取,需验证码时桌面端通过隐藏窗口调度验证码 SDK。
|
|
94
|
+
- **网络出口与客户端跟随**:接口校验客户端版本(注册表动态读取)。网络层支持配置专属代理(`zcode-net.json` 或 `HTTPS_PROXY`),支持「直连优先 / 代理优先」无缝切换。
|
|
95
|
+
- **账号切换**:写回凭据并自动为各账号分配独立的 `deviceMid` 设备指纹,防止多账号设备关联风控。
|
|
67
96
|
|
|
68
|
-
|
|
97
|
+
### Qoder(国际版 / 国内版)
|
|
98
|
+
- **国际版领取与设备风控**:Qoder 国际版服务端严格校验设备风控身份(`Cosy-MachineToken / Cosy-MachineCode / Cosy-MachineType`)。
|
|
99
|
+
- **设备组件依赖**:风控凭据由本机已安装的 Qoder 客户端组件生成(每 50 分钟刷新)。每台设备每日限领一个国际版账号,列表靠前账号优先领取。
|
|
100
|
+
- **Linux / fnOS 设备组件安装**:无客户端环境下,面板提供一键安装「设备身份组件」(或执行 `creditdaddy umid install`),自动从官方 `@qoder-ai/qodercli` 中提取 Linux x64 / arm64 UMID 核心组件。国内版不受风控限制,全部账号可正常签到。
|
|
69
101
|
|
|
70
|
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
102
|
+
### mirasim(原生 AI 编程开发环境)
|
|
103
|
+
- **账号来源**:读取 `~/.mirasim/setting.json`,本地通过 `secret.key` 派生密钥解密 `mrs1:` AES-256-GCM 凭据,敏感 Token 绝不出机。
|
|
104
|
+
- **额度与套餐**:通过 `auth.mirasim.ai/auth/me` 查询当前套餐(Pro/Plus)及到期时间;通过 `relay.mirasim.ai/v1/limits` 查询「平台额度」(5小时滚动窗口、7天全局上限与分模型 Claude 上限)。支持直连与代理优先切换,防止网络区域限制。
|
|
105
|
+
- **客户端切号**:一键切换当前登录账号并写回 `setting.json`(保留工作区与模型配置不变),切号前自动同步当前在线 Token;桌面版切换成功后自动重新拉起 Mirasim 客户端。
|
|
74
106
|
|
|
75
107
|
## 快速开始
|
|
76
108
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
##
|
|
155
|
-
|
|
156
|
-
|
|
|
109
|
+
### 方式一:桌面安装版 / 便携版(推荐)
|
|
110
|
+
|
|
111
|
+
从 [Releases](https://github.com/techysy/CreditDaddy/releases/latest) 下载 Windows 或 macOS 版本:
|
|
112
|
+
- 桌面托盘常驻,关闭窗口后台持续运行。
|
|
113
|
+
- 托盘图标右键支持一键立即签到、查看各平台账号状态并弹窗通知结果。
|
|
114
|
+
- 开机自启后完全免干预在后台执行。
|
|
115
|
+
|
|
116
|
+
### 方式二:飞牛 fnOS 应用包(fpk)
|
|
117
|
+
|
|
118
|
+
1. 下载对应架构的 fpk 文件(推荐 `creditdaddy-window-<版本>-<架构>.fpk`)。
|
|
119
|
+
2. 在 fnOS 应用中心选择「手动安装」,安装过程中设置访问密码。
|
|
120
|
+
3. 安装完成后通过桌面的窗口图标即可进入管理面板。
|
|
121
|
+
|
|
122
|
+
### 方式三:Node.js CLI / 守护进程
|
|
123
|
+
|
|
124
|
+
要求 **Node.js ≥ 20**(纯标准库实现,零外部 npm 运行时依赖):
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# 全局安装(npm)
|
|
128
|
+
npm i -g creditdaddy
|
|
129
|
+
|
|
130
|
+
# 启动后台守护进程(默认访问 http://127.0.0.1:47860)
|
|
131
|
+
creditdaddy daemon
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**CLI 常用命令**:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
creditdaddy scan # 扫描导入本机 Qoder / WorkBuddy / ZCode 客户端登录的账号
|
|
138
|
+
creditdaddy add <token> # 添加 Qoder 国际版账号
|
|
139
|
+
creditdaddy add <token> --cn # 添加 Qoder 国内版账号
|
|
140
|
+
creditdaddy add <token> --workbuddy # 添加 WorkBuddy 国内版账号(--intl 为国际版)
|
|
141
|
+
creditdaddy add <token> --name 备注 # 添加带别名的账号
|
|
142
|
+
creditdaddy list # 列出当前所有账号状态与积分
|
|
143
|
+
creditdaddy checkin # 立即触发全部账号自动领取
|
|
144
|
+
creditdaddy checkin --cn # 仅签到 Qoder 国内版(--intl 仅国际版)
|
|
145
|
+
creditdaddy checkin --workbuddy # 仅签到 WorkBuddy
|
|
146
|
+
creditdaddy remove <id前缀> # 删除指定账号
|
|
147
|
+
creditdaddy export backup.json --password 密码 # 安全加密导出账号
|
|
148
|
+
creditdaddy import backup.json [--password 密码] # 导入备份数据(兼容 10Router)
|
|
149
|
+
creditdaddy umid install # Linux / fnOS 安装 Qoder 国际版设备身份组件
|
|
150
|
+
creditdaddy help # 查看完整命令行帮助
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 本地 HTTP API
|
|
154
|
+
|
|
155
|
+
守护进程提供丰富的控制端点。若设置了 `CREDITDADDY_PASSWORD` 环境变量(fnOS 默认设置),所有请求须携带 `x-qd-key: <密码>` 头:
|
|
156
|
+
|
|
157
|
+
| 方法 | 路径 | 说明 |
|
|
158
|
+
|---|---|---|
|
|
159
|
+
| `GET` | `/api/accounts` | 获取所有已托管账号的脱敏列表 |
|
|
160
|
+
| `POST` | `/api/accounts` | 添加新账号 `{name, provider, token}` |
|
|
161
|
+
| `PATCH` | `/api/accounts/:id` | 修改账号备注名称 `{name}` |
|
|
162
|
+
| `DELETE` | `/api/accounts/:id` | 删除指定账号 |
|
|
163
|
+
| `POST` | `/api/accounts/:id/checkin` | 单独触发指定账号的领取 |
|
|
164
|
+
| `GET` | `/api/accounts/:id/quota` | 查询指定账号的积分与额度明细 |
|
|
165
|
+
| `POST` | `/api/accounts/:id/switch` | 一键将客户端登录会话切换至该账号 |
|
|
166
|
+
| `GET` | `/api/accounts/:id/zcode/plans` | 查询 ZCode 账号的可用活动列表 |
|
|
167
|
+
| `POST` | `/api/accounts/:id/zcode/claim` | 领取指定的 ZCode 活动 `{planId, captchaParam?, region?}` |
|
|
168
|
+
| `GET` | `/api/zcode/captcha-config` | 获取 ZCode 图形验证码配置参数 |
|
|
169
|
+
| `POST` | `/api/checkin` | 触发全局领取 `{provider?, product?, skipIfCheckedToday?}` |
|
|
170
|
+
| `POST` | `/api/auth/device/start` | 发起浏览器登录授权会话 |
|
|
171
|
+
| `POST` | `/api/auth/device/poll` | 轮询浏览器登录状态与 Token `{sessionId}` |
|
|
172
|
+
| `GET` | `/api/local/detect` | 检测本机客户端与配置目录环境 |
|
|
173
|
+
| `POST` | `/api/local/scan` | 读取本机已登录的全部账号候选 |
|
|
174
|
+
| `POST` | `/api/local/import` | 批量将检测到的候选账号导入入库 |
|
|
175
|
+
| `GET` | `/api/status` | 获取服务运行状态、版本号及风控组件状态 |
|
|
176
|
+
| `GET` / `PUT` | `/api/zcode/net` | ZCode 出口偏好(直连 / 代理优先、代理地址、活动自动领取开关) |
|
|
177
|
+
| `GET` / `PUT` / `DELETE` | `/api/tenrouter` | 查询 / 配置 / 清除 10Router 集成参数 `{endpoint, key?, syncEnabled?, sources?}` |
|
|
178
|
+
| `POST` | `/api/tenrouter/test` | 测试 10Router 连通性与 Key 有效性 |
|
|
179
|
+
| `GET` | `/api/tenrouter/quotas` | 获取 10Router 聚合的外部供应商配额总览 |
|
|
180
|
+
| `GET` | `/api/tenrouter/health` | 检查 10Router 服务端自身健康状态 |
|
|
181
|
+
| `POST` | `/api/tenrouter/sync` | 立即触发本机模型用量向 10Router 同步 |
|
|
182
|
+
| `GET` / `POST` | `/api/qoder/umid` | 获取 / 一键安装 Linux 平台 Qoder 设备身份组件 |
|
|
183
|
+
| `GET` | `/api/logs` | 查看环形内存日志 |
|
|
184
|
+
| `POST` | `/api/export` / `/api/import` | 账号数据安全加密导出与导入 |
|
|
185
|
+
|
|
186
|
+
## 状态与记录说明
|
|
187
|
+
|
|
188
|
+
| 状态 | 含义 | 当日记忆跳过 |
|
|
157
189
|
|---|---|---|
|
|
158
|
-
| checked-in |
|
|
159
|
-
| already |
|
|
160
|
-
| limited |
|
|
161
|
-
| no-activity |
|
|
162
|
-
| failed |
|
|
163
|
-
|
|
164
|
-
> ⚠️
|
|
165
|
-
|
|
166
|
-
##
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
## macOS 桌面版
|
|
211
|
-
|
|
212
|
-
Releases 下载 **mac-CreditDaddy-x.y.z-arm64.dmg**(Apple Silicon)或 **mac-CreditDaddy-x.y.z-x64.dmg**(Intel),另有同名 zip。拖入「应用程序」即可,功能与 Windows 桌面版一致(托盘常驻、内置 daemon、数据存 `~/.creditdaddy`)。未签名:首次打开在「系统设置 → 隐私与安全性」里放行。⚠️ macOS 版由 CI 构建,未在真机验证,问题请提 Issue。
|
|
213
|
-
|
|
214
|
-
## npm 包(Node ≥ 20)
|
|
190
|
+
| `checked-in` | 领取成功(展示增加积分量) | ✓ 是(当日不再重复调用) |
|
|
191
|
+
| `already` | 今日已完成领取 | ✓ 是(当日不再重复调用) |
|
|
192
|
+
| `limited` | 国际版:本机当日额度已被其他账号占用 | ✓ 是(避免频繁受限) |
|
|
193
|
+
| `no-activity` | 当前窗口暂无可领活动 | ✗ 否(下个调度周期重试) |
|
|
194
|
+
| `failed` | 凭据失效或网络超时异常 | ✗ 否(下个调度周期重试) |
|
|
195
|
+
|
|
196
|
+
> ⚠️ **声明**:本项目调用各平台自研及逆向接口,仅供个人多账号本地统筹管理,请严格遵守各平台服务条款,勿滥用于恶意刷取。
|
|
197
|
+
|
|
198
|
+
## 项目结构
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
CreditDaddy/
|
|
202
|
+
├── bin/
|
|
203
|
+
│ └── creditdaddy.js # CLI 执行入口
|
|
204
|
+
├── desktop/ # Electron 桌面壳工程(托盘、无痕授权窗口)
|
|
205
|
+
│ ├── main.js
|
|
206
|
+
│ ├── preload.js
|
|
207
|
+
│ └── package.json
|
|
208
|
+
├── fnos-packaging/ # 飞牛 fnOS fpk 打包配置与声明
|
|
209
|
+
│ ├── cmd/
|
|
210
|
+
│ ├── config/
|
|
211
|
+
│ └── manifest
|
|
212
|
+
├── src/ # 服务核心实现(纯标准库 ESM)
|
|
213
|
+
│ ├── accounts.js # 账号存储与生命周期管理
|
|
214
|
+
│ ├── authDevice.js # 网页 / 设备码授权分发中心
|
|
215
|
+
│ ├── checkin.js # 自动轮询调度器
|
|
216
|
+
│ ├── constants.js # 服务接口与固定头常量
|
|
217
|
+
│ ├── daemon.js # 本地 HTTP API 与前端面板静态服务
|
|
218
|
+
│ ├── localDetect.js # 客户端已安装环境侦测
|
|
219
|
+
│ ├── logger.js # 内存环形日志缓冲
|
|
220
|
+
│ ├── panel.html # Web 管理面板前端
|
|
221
|
+
│ ├── providers.js # 多产品线适配器注册表
|
|
222
|
+
│ ├── qoderApp.js # 本机 Qoder 客户端探测与 safeStorage 解密
|
|
223
|
+
│ ├── qoderClient.js # Qoder 业务接口请求封装
|
|
224
|
+
│ ├── qoderUmid.js # UMID 设备组件提取与运行
|
|
225
|
+
│ ├── store.js # 0600 本机原子化配置存储引擎
|
|
226
|
+
│ ├── tenrouter.js # 10Router 配额查询与调度
|
|
227
|
+
│ ├── transfer.js # 加密备份导入导出
|
|
228
|
+
│ ├── usageSync.js # 本地多模型 SQLite 用量抽取
|
|
229
|
+
│ ├── workbuddyAuth.js # WorkBuddy 授权流程
|
|
230
|
+
│ ├── workbuddyClient.js # WorkBuddy 业务请求
|
|
231
|
+
│ ├── workbuddyLocal.js # 本机 WorkBuddy 会话拦截与切换
|
|
232
|
+
│ ├── zcodeAuth.js # ZCode 登录授权流程
|
|
233
|
+
│ ├── zcodeAutoClaim.js # ZCode 自动领活动与验证码处理
|
|
234
|
+
│ ├── zcodeClient.js # ZCode 权益与配额请求
|
|
235
|
+
│ ├── zcodeLocal.js # 本机 ZCode 会话切号
|
|
236
|
+
│ └── zcrypto.js # ZCode 本地凭据 AES-GCM 加解密
|
|
237
|
+
└── test/ # 自动化单元测试
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## 测试
|
|
215
241
|
|
|
216
242
|
```bash
|
|
217
|
-
npm
|
|
218
|
-
creditdaddy daemon # 启动守护进程 + 面板(127.0.0.1:47860)
|
|
243
|
+
npm test
|
|
219
244
|
```
|
|
220
245
|
|
|
221
|
-
|
|
246
|
+
---
|
|
222
247
|
|
|
223
|
-
##
|
|
248
|
+
## 🔗 相关项目
|
|
224
249
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
250
|
+
- [🚀 10Router](https://github.com/techysy/10router) — 本地智能 AI 路由网关与用量仪表盘(集成 CreditDaddy 额度总览只读接口与用量计价)
|
|
251
|
+
- [🌉 zcode-feishu-bridge](https://github.com/techysy/zcode-feishu-bridge) — ZCode 飞书流式卡片桥接守护进程
|
|
252
|
+
- [🕊️ feige-fry-cards](https://github.com/techysy/feige-fry-cards) — 跨 Agent 战报结果汇总与多渠道路由插件
|
|
228
253
|
|
|
229
|
-
|
|
230
|
-
发版:同步修改 `package.json`、`desktop/package.json`、`fnos-packaging/manifest` 的版本号后打 `v*` tag。
|
|
254
|
+
---
|
|
231
255
|
|
|
232
|
-
##
|
|
256
|
+
## 📄 许可证
|
|
233
257
|
|
|
234
|
-
MIT
|
|
258
|
+
[MIT](LICENSE)
|
package/bin/creditdaddy.js
CHANGED
|
@@ -17,7 +17,7 @@ import { logger } from '../src/logger.js';
|
|
|
17
17
|
const args = process.argv.slice(2);
|
|
18
18
|
const cmd = args[0] || 'daemon';
|
|
19
19
|
|
|
20
|
-
const HELP = `CreditDaddy — Qoder / WorkBuddy / ZCode 多账号管理 + 每日积分自动领取
|
|
20
|
+
const HELP = `CreditDaddy — Qoder / WorkBuddy / ZCode / mirasim 多账号管理 + 每日积分自动领取
|
|
21
21
|
|
|
22
22
|
用法:
|
|
23
23
|
creditdaddy daemon [--port 47860] [--host 127.0.0.1] 启动守护进程 + Web 面板
|
|
@@ -29,7 +29,7 @@ const HELP = `CreditDaddy — Qoder / WorkBuddy / ZCode 多账号管理 + 每日
|
|
|
29
29
|
creditdaddy export [file.json] [--password 口令] [--cn|--intl]
|
|
30
30
|
导出账号;带口令则加密(与 10router 迁移文件互通)
|
|
31
31
|
creditdaddy import <file.json> [--password 口令] 导入 CreditDaddy / 10router 导出文件
|
|
32
|
-
creditdaddy scan 导入本机 Qoder / WorkBuddy / ZCode 客户端已登录的账号
|
|
32
|
+
creditdaddy scan 导入本机 Qoder / WorkBuddy / ZCode / mirasim 客户端已登录的账号
|
|
33
33
|
creditdaddy umid [install|remove] Qoder 设备身份组件(Linux / fnOS 国际版领取用)
|
|
34
34
|
creditdaddy logs 查看领取状态
|
|
35
35
|
creditdaddy help 显示本帮助`;
|
|
@@ -128,10 +128,13 @@ async function main() {
|
|
|
128
128
|
const { readQoderAppAccounts } = await import('../src/qoderApp.js');
|
|
129
129
|
const { readWorkbuddySessions } = await import('../src/workbuddyLocal.js');
|
|
130
130
|
const { liveToAccount: zcodeLive } = await import('../src/zcodeLocal.js');
|
|
131
|
+
const { liveToAccount: mirasimLive } = await import('../src/mirasimLocal.js');
|
|
131
132
|
const { addAccount } = await import('../src/accounts.js');
|
|
132
133
|
const qa = await readQoderAppAccounts();
|
|
133
134
|
const wb = readWorkbuddySessions();
|
|
134
135
|
const zAccount = zcodeLive();
|
|
136
|
+
let miraAccount = null;
|
|
137
|
+
try { miraAccount = await mirasimLive(); } catch {}
|
|
135
138
|
const records = [
|
|
136
139
|
...qa.accounts.map((c) => ({
|
|
137
140
|
label: c.source,
|
|
@@ -141,9 +144,10 @@ async function main() {
|
|
|
141
144
|
label: source, rec: { ...rec, source: current ? 'workbuddy-current' : 'workbuddy-history' },
|
|
142
145
|
})),
|
|
143
146
|
...(zAccount ? [{ label: 'ZCode 当前登录', rec: zAccount }] : []),
|
|
147
|
+
...(miraAccount ? [{ label: 'mirasim 当前登录', rec: miraAccount }] : []),
|
|
144
148
|
];
|
|
145
149
|
for (const e of [...qa.errors, ...wb.errors]) console.log('⚠', e.file, e.error);
|
|
146
|
-
if (!records.length) { console.log('(本机 Qoder / WorkBuddy / ZCode 客户端未登录或未安装)'); break; }
|
|
150
|
+
if (!records.length) { console.log('(本机 Qoder / WorkBuddy / ZCode / mirasim 客户端未登录或未安装)'); break; }
|
|
147
151
|
for (const { label, rec } of records) {
|
|
148
152
|
const r = await addAccount(rec, { trusted: true });
|
|
149
153
|
console.log(r.duplicate ? (r.updated ? '↻ 已更新' : '· 已存在') : '✓ 已导入', r.account.name || r.account.id, `(${label})`);
|
package/package.json
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "creditdaddy",
|
|
3
|
-
"version": "0.9.
|
|
4
|
-
"description": "CreditDaddy — Qoder / WorkBuddy / ZCode 多账号本地管理与每日积分自动签到助手",
|
|
5
|
-
"homepage": "https://github.com/techysy/CreditDaddy",
|
|
6
|
-
"repository": {
|
|
7
|
-
"type": "git",
|
|
8
|
-
"url": "git+https://github.com/techysy/CreditDaddy.git"
|
|
9
|
-
},
|
|
10
|
-
"type": "module",
|
|
11
|
-
"bin": {
|
|
12
|
-
"creditdaddy": "bin/creditdaddy.js"
|
|
13
|
-
},
|
|
14
|
-
"files": [
|
|
15
|
-
"bin",
|
|
16
|
-
"src",
|
|
17
|
-
"README.md",
|
|
18
|
-
"LICENSE"
|
|
19
|
-
],
|
|
20
|
-
"engines": {
|
|
21
|
-
"node": ">=20"
|
|
22
|
-
},
|
|
23
|
-
"scripts": {
|
|
24
|
-
"start": "node bin/creditdaddy.js daemon",
|
|
25
|
-
"test": "node --test"
|
|
26
|
-
},
|
|
27
|
-
"license": "MIT"
|
|
28
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "creditdaddy",
|
|
3
|
+
"version": "0.9.5",
|
|
4
|
+
"description": "CreditDaddy — Qoder / WorkBuddy / ZCode / mirasim 多账号本地管理与每日积分自动签到助手",
|
|
5
|
+
"homepage": "https://github.com/techysy/CreditDaddy",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/techysy/CreditDaddy.git"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"bin": {
|
|
12
|
+
"creditdaddy": "bin/creditdaddy.js"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"bin",
|
|
16
|
+
"src",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=20"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"start": "node bin/creditdaddy.js daemon",
|
|
25
|
+
"test": "node --test"
|
|
26
|
+
},
|
|
27
|
+
"license": "MIT"
|
|
28
|
+
}
|