creditdaddy 1.6.2 → 1.6.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 +1 -1
- package/bin/creditdaddy.js +22 -0
- package/build.json +3 -3
- package/package.json +2 -2
- package/src/checkin.js +4 -0
- package/src/constants.js +3 -1
- package/src/cookieSites.js +8 -1
- package/src/daemon.js +2251 -2062
- package/src/doubaoClient.js +0 -1
- package/src/i18n/en.json +94 -1
- package/src/i18n/ja.json +94 -1
- package/src/i18n/ko.json +94 -1
- package/src/i18n/zh-TW.json +94 -1
- package/src/loomyAuth.js +230 -0
- package/src/loomyClient.js +306 -0
- package/src/loomyLocal.js +188 -0
- package/src/minimaxGateway.js +61 -11
- package/src/panel.html +350 -59
- package/src/providers.js +9 -0
- package/src/qoderClient.js +15 -6
- package/src/quotaRefresh.js +5 -0
- package/src/store.js +9 -2
- package/src/tenrouter.js +37 -14
- package/src/tenrouterAccounts.js +1 -0
- package/src/traeClient.js +18 -5
- package/src/traeGateway.js +69 -13
- package/src/transfer.js +3 -0
- package/src/usageSync.js +11 -1
- package/src/zcodeAutoClaim.js +15 -2
- package/src/zcodeClient.js +40 -7
- package/src/zcodeGateway.js +32 -2
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# CreditDaddy
|
|
6
6
|
|
|
7
|
-
**AI 编程工具多账号本地管理 + 每日积分自动领取(领鸡蛋)助手:Qoder · WorkBuddy · ZCode · mirasim · 妙手 · Trae · MiniMax · ModelScope
|
|
7
|
+
**AI 编程工具多账号本地管理 + 每日积分自动领取(领鸡蛋)助手:Qoder · WorkBuddy · ZCode · mirasim · 妙手 · Trae · MiniMax · ModelScope · 豆包,集成 10Router 额度总览、用量同步与网页会话额度卡(Token Harbor / 小米 MiMo / River / ModelScope 魔搭 / LongCat)**
|
|
8
8
|
|
|
9
9
|
[](https://github.com/techysy/CreditDaddy/releases/latest)
|
|
10
10
|
[](https://github.com/techysy/CreditDaddy/actions/workflows/ci.yml)
|
package/bin/creditdaddy.js
CHANGED
|
@@ -52,6 +52,23 @@ function panelUrl(host, port) {
|
|
|
52
52
|
return `http://${h}:${port}`;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
/**
|
|
56
|
+
* 改账号/状态的命令(add / import / checkin / remove / scan)在 daemon 活着时必须拒绝:
|
|
57
|
+
* withAccounts 的串行队列只在单进程内有效,CLI 进程基于旧快照整份写回,会把 daemon
|
|
58
|
+
* 刚轮换掉的 refreshToken / 刚写的签到水位冲掉(凭据链当场作废——refreshGuard 事故同款)。
|
|
59
|
+
*/
|
|
60
|
+
async function assertDaemonNotRunning() {
|
|
61
|
+
const { statusRuntime } = await import('../src/bgdaemon.js');
|
|
62
|
+
let s;
|
|
63
|
+
try { s = await statusRuntime(); } catch { return; } // 状态探测不了就不拦(保持旧行为)
|
|
64
|
+
if (s.running) {
|
|
65
|
+
console.error(`✗ 检测到后台 daemon 正在运行(pid ${s.pid},端口 ${s.port})。`);
|
|
66
|
+
console.error(' 两个进程同时写 accounts.json / state.json 会互相覆盖(凭据/签到记录丢失)。');
|
|
67
|
+
console.error(' 请改用面板里的对应操作,或先 creditdaddy stop 再执行本命令。');
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
55
72
|
/** 把运行时长说成人话(status 用) */
|
|
56
73
|
function humanUptime(ms) {
|
|
57
74
|
if (!Number.isFinite(ms) || ms < 0) return '未知';
|
|
@@ -181,6 +198,7 @@ async function main() {
|
|
|
181
198
|
break;
|
|
182
199
|
}
|
|
183
200
|
case 'add': {
|
|
201
|
+
await assertDaemonNotRunning();
|
|
184
202
|
const token = args[1];
|
|
185
203
|
if (!token) { console.error('用法: creditdaddy add <token> [--cn] [--name 名字]'); process.exit(1); }
|
|
186
204
|
const { publicAccount } = await import('../src/store.js');
|
|
@@ -206,6 +224,7 @@ async function main() {
|
|
|
206
224
|
break;
|
|
207
225
|
}
|
|
208
226
|
case 'checkin': {
|
|
227
|
+
await assertDaemonNotRunning();
|
|
209
228
|
const { runCheckinTick } = await import('../src/checkin.js');
|
|
210
229
|
const provider = args.includes('--workbuddy')
|
|
211
230
|
? (args.includes('--intl') ? 'workbuddy-intl' : 'workbuddy')
|
|
@@ -218,6 +237,7 @@ async function main() {
|
|
|
218
237
|
break;
|
|
219
238
|
}
|
|
220
239
|
case 'remove': {
|
|
240
|
+
await assertDaemonNotRunning();
|
|
221
241
|
const id = args[1];
|
|
222
242
|
if (!id) { console.error('用法: creditdaddy remove <id前缀>(id 见 creditdaddy list)'); process.exit(1); }
|
|
223
243
|
const { withAccounts } = await import('../src/store.js');
|
|
@@ -259,6 +279,7 @@ async function main() {
|
|
|
259
279
|
break;
|
|
260
280
|
}
|
|
261
281
|
case 'import': {
|
|
282
|
+
await assertDaemonNotRunning();
|
|
262
283
|
const file = args[1];
|
|
263
284
|
if (!file) { console.error('用法: creditdaddy import <file.json>'); process.exit(1); }
|
|
264
285
|
const { readFileSync } = await import('node:fs');
|
|
@@ -283,6 +304,7 @@ async function main() {
|
|
|
283
304
|
break;
|
|
284
305
|
}
|
|
285
306
|
case 'scan': {
|
|
307
|
+
await assertDaemonNotRunning();
|
|
286
308
|
const { readQoderAppAccounts } = await import('../src/qoderApp.js');
|
|
287
309
|
const { readWorkbuddySessions } = await import('../src/workbuddyLocal.js');
|
|
288
310
|
const { liveToAccount: zcodeLive } = await import('../src/zcodeLocal.js');
|
package/build.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "creditdaddy",
|
|
3
|
-
"version": "1.6.
|
|
4
|
-
"description": "CreditDaddy — Qoder / WorkBuddy / ZCode / mirasim / 妙手 / Trae / MiniMax / ModelScope 多账号本地管理与每日积分自动签到助手,及 10Router 供应商 Cookie 会话捕获与外部配额(Token Harbor / 小米 MiMo / River / ModelScope 魔搭 / LongCat)",
|
|
3
|
+
"version": "1.6.5",
|
|
4
|
+
"description": "CreditDaddy — Qoder / WorkBuddy / ZCode / mirasim / 妙手 / Trae / MiniMax / ModelScope / 豆包 多账号本地管理与每日积分自动签到助手,及 10Router 供应商 Cookie 会话捕获与外部配额(Token Harbor / 小米 MiMo / River / ModelScope 魔搭 / LongCat)",
|
|
5
5
|
"homepage": "https://github.com/techysy/CreditDaddy",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
package/src/checkin.js
CHANGED
|
@@ -190,6 +190,10 @@ function runZcodeTick(accountIds, { force = false } = {}) {
|
|
|
190
190
|
return { results, summary: zcodeLastTick.summary };
|
|
191
191
|
} finally {
|
|
192
192
|
zcodeTicking = false;
|
|
193
|
+
// 手动轮(pollZcodeNow)结束时不会像定时轮那样 .finally 里补排下一个 tick;
|
|
194
|
+
// 若手动轮进行中用户刚开启自动领取,syncZcodeScheduler 又因 zcodeTicking=true
|
|
195
|
+
// 跳过了排程——这里兜底补排(内部先清旧句柄,重复调用无害),否则自动领取静默死掉
|
|
196
|
+
if (autoClaimEnabled()) scheduleZcodeNextTick();
|
|
193
197
|
}
|
|
194
198
|
});
|
|
195
199
|
zcodeQueue = run.catch(() => {});
|
package/src/constants.js
CHANGED
|
@@ -35,7 +35,7 @@ export const WEB_USAGE_PATH = '/api/v2/me/usages/big_model_credits';
|
|
|
35
35
|
export const JOB_TOKEN_EXCHANGE_PATH = '/api/v1/jobToken/exchange';
|
|
36
36
|
|
|
37
37
|
// 账号的 provider = 产品 + 区域。新增产品时在此登记,并在 providers.js 挂上对应实现。
|
|
38
|
-
export const PROVIDERS = ['qoder', 'qoder-cn', 'workbuddy', 'workbuddy-intl', 'zcode', 'mirasim', 'catpaw', 'trae', 'minimax', 'tokenharbor', 'xiaomi-mimo', 'river', 'modelscope', 'longcat', 'doubao'];
|
|
38
|
+
export const PROVIDERS = ['qoder', 'qoder-cn', 'workbuddy', 'workbuddy-intl', 'zcode', 'mirasim', 'catpaw', 'trae', 'minimax', 'tokenharbor', 'xiaomi-mimo', 'river', 'modelscope', 'longcat', 'doubao', 'loomy'];
|
|
39
39
|
export const PROVIDER_LABEL = {
|
|
40
40
|
qoder: 'Qoder 国际版',
|
|
41
41
|
'qoder-cn': 'Qoder 国内版',
|
|
@@ -52,6 +52,7 @@ export const PROVIDER_LABEL = {
|
|
|
52
52
|
modelscope: 'ModelScope 魔搭',
|
|
53
53
|
longcat: 'LongCat',
|
|
54
54
|
doubao: '豆包',
|
|
55
|
+
loomy: '讯飞 Loomy',
|
|
55
56
|
};
|
|
56
57
|
/** provider → 产品线(qoder / workbuddy / zcode / mirasim / catpaw / trae / minimax / tokenharbor / xiaomi-mimo / river) */
|
|
57
58
|
export const productOf = (provider) => {
|
|
@@ -68,6 +69,7 @@ export const productOf = (provider) => {
|
|
|
68
69
|
if (p === 'modelscope') return 'modelscope';
|
|
69
70
|
if (p === 'longcat') return 'longcat';
|
|
70
71
|
if (p === 'doubao') return 'doubao';
|
|
72
|
+
if (p === 'loomy') return 'loomy';
|
|
71
73
|
return 'qoder';
|
|
72
74
|
};
|
|
73
75
|
/** provider 是否国内版 */
|
package/src/cookieSites.js
CHANGED
|
@@ -169,7 +169,14 @@ export const COOKIE_SITES = [
|
|
|
169
169
|
// 只在面板出示快捷按钮。
|
|
170
170
|
entryOnly: true, // 只出「打开豆包」按钮,无会话捕获 / 无探测 / 无账号行
|
|
171
171
|
hint: '在豆包客户端(或网页)登录后捕获会话,CD 只读展示体验额度与每日签到状态(+200/天);签到请在「打开豆包」里手动完成——活动在客户端内,CD 不代签;仅个人账号可参与(飞书企业号被排除),凭据只存本机。'
|
|
172
|
-
}
|
|
172
|
+
},
|
|
173
|
+
// ⚠ 码道 CodeArts(issue #40)已于 2026-10-30 撤下,不再提供:
|
|
174
|
+
// 华为云控制台会话受闲置超时 + WAF 指印(HWWAFSESID / browserCheckResult)绑定,
|
|
175
|
+
// 浏览器里能靠 SPA 持续续期,本机无法续 —— 实测新鲜会话当日内即失效(网关回登录页),
|
|
176
|
+
// 且登录窗关早一拍只能收到残缺会话(35 条 vs 完整 47 条)。
|
|
177
|
+
// 签到要求「每天固定时刻会话有效」,而该会话有效期以小时计 —— 维持它需要用户每天
|
|
178
|
+
// 重登一次浏览器,那就失去自动化意义。叠加新号可能接到推广电话,按「臭鸡蛋标准」撤下。
|
|
179
|
+
// 若日后码道开放长期凭据(AK/SK 或 OAuth refresh),可按既有 cookieSites 结构重新接入。
|
|
173
180
|
];
|
|
174
181
|
|
|
175
182
|
export const getSite = (id) => COOKIE_SITES.find((s) => s.id === id) || null;
|