@foxden-app/foxclaw 0.5.22 → 0.5.23
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/CHANGELOG.md +10 -0
- package/dist/controller/controller.js +15 -6
- package/dist/i18n.d.ts +2 -0
- package/dist/i18n.js +2 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
All notable FoxClaw changes are listed here. Each release note is bilingual so GitHub Releases and the npm package are useful to both Chinese and English readers.
|
|
4
4
|
|
|
5
|
+
## 0.5.23 - 2026-06-09
|
|
6
|
+
|
|
7
|
+
### 中文
|
|
8
|
+
- 补齐切换后验证路径:如果目标候选在验证 rate-limit usage 时返回 usage/rate/quota/billing/credits limit,FoxClaw 会恢复到原 auth,但不会把目标候选标记为 `?`,也不会触发自动剔除。
|
|
9
|
+
- 这让额度耗尽在自动轮换、手动切换和验证失败提示里都保持同一语义:它只是暂时没额度,不是凭据失效。
|
|
10
|
+
|
|
11
|
+
### English
|
|
12
|
+
- Completed the post-switch validation path: if the selected candidate returns a usage/rate/quota/billing/credits limit while validating rate-limit usage, FoxClaw restores the previous auth but does not mark the selected candidate `?` or auto-delete it.
|
|
13
|
+
- Quota exhaustion now has the same meaning across automatic rotation, manual switching, and validation failure messages: temporarily out of quota, not an invalid credential.
|
|
14
|
+
|
|
5
15
|
## 0.5.22 - 2026-06-09
|
|
6
16
|
|
|
7
17
|
### 中文
|
|
@@ -5693,13 +5693,19 @@ export class BridgeSessionCore {
|
|
|
5693
5693
|
error: toErrorMeta(error),
|
|
5694
5694
|
});
|
|
5695
5695
|
}
|
|
5696
|
-
const
|
|
5696
|
+
const validationFailureKind = isCodexQuotaLimitError(validation.error)
|
|
5697
|
+
? 'quota_limited'
|
|
5698
|
+
: 'auth_invalid';
|
|
5699
|
+
const repairDisposition = validationFailureKind === 'auth_invalid'
|
|
5700
|
+
? await this.markCodexAuthCandidateNeedsRepair(candidate.name)
|
|
5701
|
+
: { deleted: false, restarted: false };
|
|
5697
5702
|
const outcome = {
|
|
5698
5703
|
...result,
|
|
5699
5704
|
ok: false,
|
|
5700
5705
|
candidateName: candidate.name,
|
|
5701
5706
|
recovered,
|
|
5702
5707
|
error: validation.error,
|
|
5708
|
+
validationFailureKind,
|
|
5703
5709
|
restoredPrevious,
|
|
5704
5710
|
autoDeleted: repairDisposition.deleted,
|
|
5705
5711
|
deleteRestarted: repairDisposition.restarted,
|
|
@@ -5718,6 +5724,7 @@ export class BridgeSessionCore {
|
|
|
5718
5724
|
candidateName: candidate.name,
|
|
5719
5725
|
recovered,
|
|
5720
5726
|
error: null,
|
|
5727
|
+
validationFailureKind: null,
|
|
5721
5728
|
restoredPrevious: false,
|
|
5722
5729
|
autoDeleted: false,
|
|
5723
5730
|
deleteRestarted: false,
|
|
@@ -5778,11 +5785,13 @@ export class BridgeSessionCore {
|
|
|
5778
5785
|
if (outcome.ok) {
|
|
5779
5786
|
return [];
|
|
5780
5787
|
}
|
|
5781
|
-
const validationKey = outcome.
|
|
5782
|
-
? '
|
|
5783
|
-
: outcome.autoDeleted
|
|
5784
|
-
? '
|
|
5785
|
-
:
|
|
5788
|
+
const validationKey = outcome.validationFailureKind === 'quota_limited'
|
|
5789
|
+
? 'auth_switch_validation_quota_limited'
|
|
5790
|
+
: outcome.autoDeleted && this.config.authAutoDeleteNeedsRepair
|
|
5791
|
+
? 'auth_switch_validation_auto_deleted_quiet'
|
|
5792
|
+
: outcome.autoDeleted
|
|
5793
|
+
? 'auth_switch_validation_auto_deleted'
|
|
5794
|
+
: 'auth_switch_validation_failed';
|
|
5786
5795
|
return [
|
|
5787
5796
|
t(locale, validationKey, {
|
|
5788
5797
|
value: outcome.candidateName,
|
package/dist/i18n.d.ts
CHANGED
|
@@ -199,6 +199,7 @@ declare const MESSAGES: {
|
|
|
199
199
|
readonly auth_switch_validation_failed: "Selected auth failed validation: {error}. Marked {value} for login repair.";
|
|
200
200
|
readonly auth_switch_validation_auto_deleted: "Selected auth failed validation: {error}. Auto-deleted {value}.";
|
|
201
201
|
readonly auth_switch_validation_auto_deleted_quiet: "Selected auth failed validation and was auto-deleted.";
|
|
202
|
+
readonly auth_switch_validation_quota_limited: "Selected auth hit a Codex usage limit: {error}. It was not marked invalid.";
|
|
202
203
|
readonly auth_switch_validation_reverted: "Restored the previous auth after the failed switch.";
|
|
203
204
|
readonly auth_recovered_newer_candidate: "Recovered a newer same-account credential for {value} from another Codex home before reload.";
|
|
204
205
|
readonly auth_refresh_all_confirm_short: "Review refresh all risk first.";
|
|
@@ -892,6 +893,7 @@ declare const MESSAGES: {
|
|
|
892
893
|
readonly auth_switch_validation_failed: "选中的 auth 验证失败:{error}。已将 {value} 标记为需要登录修复。";
|
|
893
894
|
readonly auth_switch_validation_auto_deleted: "选中的 auth 验证失败:{error}。已自动剔除 {value}。";
|
|
894
895
|
readonly auth_switch_validation_auto_deleted_quiet: "选中的 auth 验证失败,已自动剔除。";
|
|
896
|
+
readonly auth_switch_validation_quota_limited: "选中的 auth 已触发 Codex 额度限制:{error}。没有把它标记为失效。";
|
|
895
897
|
readonly auth_switch_validation_reverted: "已在切换失败后恢复到之前的 auth。";
|
|
896
898
|
readonly auth_recovered_newer_candidate: "重载前已从其他 Codex home 恢复 {value} 的同账号较新凭据。";
|
|
897
899
|
readonly auth_refresh_all_confirm_short: "请先确认刷新全部风险。";
|
package/dist/i18n.js
CHANGED
|
@@ -197,6 +197,7 @@ const MESSAGES = {
|
|
|
197
197
|
auth_switch_validation_failed: 'Selected auth failed validation: {error}. Marked {value} for login repair.',
|
|
198
198
|
auth_switch_validation_auto_deleted: 'Selected auth failed validation: {error}. Auto-deleted {value}.',
|
|
199
199
|
auth_switch_validation_auto_deleted_quiet: 'Selected auth failed validation and was auto-deleted.',
|
|
200
|
+
auth_switch_validation_quota_limited: 'Selected auth hit a Codex usage limit: {error}. It was not marked invalid.',
|
|
200
201
|
auth_switch_validation_reverted: 'Restored the previous auth after the failed switch.',
|
|
201
202
|
auth_recovered_newer_candidate: 'Recovered a newer same-account credential for {value} from another Codex home before reload.',
|
|
202
203
|
auth_refresh_all_confirm_short: 'Review refresh all risk first.',
|
|
@@ -890,6 +891,7 @@ const MESSAGES = {
|
|
|
890
891
|
auth_switch_validation_failed: '选中的 auth 验证失败:{error}。已将 {value} 标记为需要登录修复。',
|
|
891
892
|
auth_switch_validation_auto_deleted: '选中的 auth 验证失败:{error}。已自动剔除 {value}。',
|
|
892
893
|
auth_switch_validation_auto_deleted_quiet: '选中的 auth 验证失败,已自动剔除。',
|
|
894
|
+
auth_switch_validation_quota_limited: '选中的 auth 已触发 Codex 额度限制:{error}。没有把它标记为失效。',
|
|
893
895
|
auth_switch_validation_reverted: '已在切换失败后恢复到之前的 auth。',
|
|
894
896
|
auth_recovered_newer_candidate: '重载前已从其他 Codex home 恢复 {value} 的同账号较新凭据。',
|
|
895
897
|
auth_refresh_all_confirm_short: '请先确认刷新全部风险。',
|