@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 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 repairDisposition = await this.markCodexAuthCandidateNeedsRepair(candidate.name);
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.autoDeleted && this.config.authAutoDeleteNeedsRepair
5782
- ? 'auth_switch_validation_auto_deleted_quiet'
5783
- : outcome.autoDeleted
5784
- ? 'auth_switch_validation_auto_deleted'
5785
- : 'auth_switch_validation_failed';
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: '请先确认刷新全部风险。',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foxden-app/foxclaw",
3
- "version": "0.5.22",
3
+ "version": "0.5.23",
4
4
  "description": "Foxden local execution claw for controlling Codex from trusted chat interfaces.",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",