@claudexor/cli 3.19.0 → 3.22.0

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.
Files changed (169) hide show
  1. package/dist/account-catalog.d.ts +5 -6
  2. package/dist/account-catalog.d.ts.map +1 -1
  3. package/dist/account-catalog.js +24 -9
  4. package/dist/account-catalog.js.map +1 -1
  5. package/dist/account-observations.d.ts +31 -0
  6. package/dist/account-observations.d.ts.map +1 -0
  7. package/dist/account-observations.js +135 -0
  8. package/dist/account-observations.js.map +1 -0
  9. package/dist/accounts-projection.d.ts +5 -9
  10. package/dist/accounts-projection.d.ts.map +1 -1
  11. package/dist/accounts-projection.js +22 -41
  12. package/dist/accounts-projection.js.map +1 -1
  13. package/dist/accounts-services.d.ts +10 -1
  14. package/dist/accounts-services.d.ts.map +1 -1
  15. package/dist/accounts-services.js +50 -34
  16. package/dist/accounts-services.js.map +1 -1
  17. package/dist/acp-surface-runner.d.ts.map +1 -1
  18. package/dist/acp-surface-runner.js +2 -0
  19. package/dist/acp-surface-runner.js.map +1 -1
  20. package/dist/agy-quota-source.d.ts.map +1 -1
  21. package/dist/agy-quota-source.js +19 -33
  22. package/dist/agy-quota-source.js.map +1 -1
  23. package/dist/claude-oauth-credential.d.ts +16 -0
  24. package/dist/claude-oauth-credential.d.ts.map +1 -0
  25. package/dist/claude-oauth-credential.js +82 -0
  26. package/dist/claude-oauth-credential.js.map +1 -0
  27. package/dist/claude-oauth-fetch.d.ts +9 -0
  28. package/dist/claude-oauth-fetch.d.ts.map +1 -0
  29. package/dist/claude-oauth-fetch.js +67 -0
  30. package/dist/claude-oauth-fetch.js.map +1 -0
  31. package/dist/claude-oauth-usage.d.ts +7 -38
  32. package/dist/claude-oauth-usage.d.ts.map +1 -1
  33. package/dist/claude-oauth-usage.js +166 -180
  34. package/dist/claude-oauth-usage.js.map +1 -1
  35. package/dist/claudexord.d.ts.map +1 -1
  36. package/dist/claudexord.js +2 -2
  37. package/dist/claudexord.js.map +1 -1
  38. package/dist/cli-io.d.ts +2 -0
  39. package/dist/cli-io.d.ts.map +1 -1
  40. package/dist/cli-io.js +6 -5
  41. package/dist/cli-io.js.map +1 -1
  42. package/dist/codex-quota-source.d.ts +6 -2
  43. package/dist/codex-quota-source.d.ts.map +1 -1
  44. package/dist/codex-quota-source.js +62 -95
  45. package/dist/codex-quota-source.js.map +1 -1
  46. package/dist/continue-from-run.d.ts +27 -0
  47. package/dist/continue-from-run.d.ts.map +1 -0
  48. package/dist/continue-from-run.js +77 -0
  49. package/dist/continue-from-run.js.map +1 -0
  50. package/dist/control-services.d.ts +36 -3
  51. package/dist/control-services.d.ts.map +1 -1
  52. package/dist/control-services.js +15 -20
  53. package/dist/control-services.js.map +1 -1
  54. package/dist/credential-commands.d.ts.map +1 -1
  55. package/dist/credential-commands.js +12 -6
  56. package/dist/credential-commands.js.map +1 -1
  57. package/dist/daemon-agent-runner.d.ts.map +1 -1
  58. package/dist/daemon-agent-runner.js +4 -6
  59. package/dist/daemon-agent-runner.js.map +1 -1
  60. package/dist/gc-receipt-notes.d.ts +14 -0
  61. package/dist/gc-receipt-notes.d.ts.map +1 -0
  62. package/dist/gc-receipt-notes.js +28 -0
  63. package/dist/gc-receipt-notes.js.map +1 -0
  64. package/dist/harness-command-specs.d.ts +1 -1
  65. package/dist/harness-command-specs.d.ts.map +1 -1
  66. package/dist/harness-command-specs.js +8 -1
  67. package/dist/harness-command-specs.js.map +1 -1
  68. package/dist/harness-install-proof.d.ts.map +1 -1
  69. package/dist/harness-install-proof.js +14 -18
  70. package/dist/harness-install-proof.js.map +1 -1
  71. package/dist/harness-install-recipes.d.ts +2 -1
  72. package/dist/harness-install-recipes.d.ts.map +1 -1
  73. package/dist/harness-install-recipes.js +12 -9
  74. package/dist/harness-install-recipes.js.map +1 -1
  75. package/dist/harness-installer.d.ts +1 -1
  76. package/dist/harness-installer.d.ts.map +1 -1
  77. package/dist/harness-installer.js +8 -9
  78. package/dist/harness-installer.js.map +1 -1
  79. package/dist/live.d.ts.map +1 -1
  80. package/dist/live.js +8 -7
  81. package/dist/live.js.map +1 -1
  82. package/dist/mcp-catalog-query.js +3 -3
  83. package/dist/mcp-catalog-query.js.map +1 -1
  84. package/dist/mcp-run-projections.d.ts +17 -1
  85. package/dist/mcp-run-projections.d.ts.map +1 -1
  86. package/dist/mcp-run-projections.js +27 -1
  87. package/dist/mcp-run-projections.js.map +1 -1
  88. package/dist/model-account-evidence.d.ts +18 -0
  89. package/dist/model-account-evidence.d.ts.map +1 -0
  90. package/dist/model-account-evidence.js +71 -0
  91. package/dist/model-account-evidence.js.map +1 -0
  92. package/dist/model-services.d.ts.map +1 -1
  93. package/dist/model-services.js +78 -83
  94. package/dist/model-services.js.map +1 -1
  95. package/dist/native-login.d.ts +5 -0
  96. package/dist/native-login.d.ts.map +1 -1
  97. package/dist/native-login.js +18 -2
  98. package/dist/native-login.js.map +1 -1
  99. package/dist/ops-commands.d.ts.map +1 -1
  100. package/dist/ops-commands.js +22 -25
  101. package/dist/ops-commands.js.map +1 -1
  102. package/dist/orphan-sweeper.d.ts.map +1 -1
  103. package/dist/orphan-sweeper.js +11 -1
  104. package/dist/orphan-sweeper.js.map +1 -1
  105. package/dist/plugins.js +1 -1
  106. package/dist/plugins.js.map +1 -1
  107. package/dist/quota-command.js +3 -4
  108. package/dist/quota-command.js.map +1 -1
  109. package/dist/quota-refresh-diagnostics.d.ts +33 -0
  110. package/dist/quota-refresh-diagnostics.d.ts.map +1 -0
  111. package/dist/quota-refresh-diagnostics.js +9 -0
  112. package/dist/quota-refresh-diagnostics.js.map +1 -0
  113. package/dist/quota-refreshers.d.ts +5 -4
  114. package/dist/quota-refreshers.d.ts.map +1 -1
  115. package/dist/quota-refreshers.js +11 -4
  116. package/dist/quota-refreshers.js.map +1 -1
  117. package/dist/quota-services.d.ts +20 -2
  118. package/dist/quota-services.d.ts.map +1 -1
  119. package/dist/registry.d.ts +1 -1
  120. package/dist/registry.d.ts.map +1 -1
  121. package/dist/registry.js +6 -2
  122. package/dist/registry.js.map +1 -1
  123. package/dist/retention-service.d.ts +7 -1
  124. package/dist/retention-service.d.ts.map +1 -1
  125. package/dist/retention-service.js +84 -5
  126. package/dist/retention-service.js.map +1 -1
  127. package/dist/run-orchestrator.d.ts +0 -6
  128. package/dist/run-orchestrator.d.ts.map +1 -1
  129. package/dist/run-orchestrator.js +41 -10
  130. package/dist/run-orchestrator.js.map +1 -1
  131. package/dist/settings-service.d.ts +14 -6
  132. package/dist/settings-service.d.ts.map +1 -1
  133. package/dist/settings-service.js +11 -5
  134. package/dist/settings-service.js.map +1 -1
  135. package/dist/setup-jobs.js +6 -6
  136. package/dist/setup-jobs.js.map +1 -1
  137. package/dist/setup-login-capability.d.ts.map +1 -1
  138. package/dist/setup-login-capability.js +6 -2
  139. package/dist/setup-login-capability.js.map +1 -1
  140. package/dist/setup-login-child-lifecycle.d.ts.map +1 -1
  141. package/dist/setup-login-child-lifecycle.js +16 -4
  142. package/dist/setup-login-child-lifecycle.js.map +1 -1
  143. package/dist/setup-login-fallback.d.ts +54 -0
  144. package/dist/setup-login-fallback.d.ts.map +1 -0
  145. package/dist/setup-login-fallback.js +95 -0
  146. package/dist/setup-login-fallback.js.map +1 -0
  147. package/dist/setup-login-inline.d.ts +8 -46
  148. package/dist/setup-login-inline.d.ts.map +1 -1
  149. package/dist/setup-login-inline.js +79 -104
  150. package/dist/setup-login-inline.js.map +1 -1
  151. package/dist/setup-login-input-prompt.d.ts +7 -0
  152. package/dist/setup-login-input-prompt.d.ts.map +1 -0
  153. package/dist/setup-login-input-prompt.js +27 -0
  154. package/dist/setup-login-input-prompt.js.map +1 -0
  155. package/dist/setup-login-runner.d.ts.map +1 -1
  156. package/dist/setup-login-runner.js +15 -11
  157. package/dist/setup-login-runner.js.map +1 -1
  158. package/dist/status-projection-cache.d.ts +3 -0
  159. package/dist/status-projection-cache.d.ts.map +1 -1
  160. package/dist/status-projection-cache.js +4 -1
  161. package/dist/status-projection-cache.js.map +1 -1
  162. package/dist/thread-delivery.d.ts.map +1 -1
  163. package/dist/thread-delivery.js +14 -13
  164. package/dist/thread-delivery.js.map +1 -1
  165. package/dist/thread-purge.d.ts +52 -0
  166. package/dist/thread-purge.d.ts.map +1 -0
  167. package/dist/thread-purge.js +27 -0
  168. package/dist/thread-purge.js.map +1 -0
  169. package/package.json +25 -24
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-oauth-fetch.js","sourceRoot":"","sources":["../src/claude-oauth-fetch.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG,2CAA2C,CAAC;AAC9D,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAC7C,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC;;;;uDAIuD;AACvD,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;AAEvD;;;;;0BAK0B;AAC1B,MAAM,UAAU,uBAAuB,CACrC,MAAqB,EACrB,KAAK,GAAW,IAAI,CAAC,GAAG,EAAE;IAE1B,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACnC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI;QACxB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK;YAC7B,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,yBAAyB,CAAC;IAChE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB,EACnB,MAA+B;IAE/B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;QACjC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,WAAW,EAAE;YACtC,gBAAgB,EAAE,iBAAiB;YACnC,MAAM,EAAE,kBAAkB;SAC3B;QACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;KAC9C,CAAC,CAAC;IACH,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,sEAAsE;IACtE,uEAAuE;IACvE,4EAA4E;IAC5E,oDAAoD;IACpD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;YACpE,kBAAkB,EAAE,cAAwC;SAC7D,CAAC,CAAC;IACL,CAAC;IACD,4EAA4E;IAC5E,2EAA2E;IAC3E,yEAAyE;IACzE,gEAAgE;IAChE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,EAAE;YAC1D,kBAAkB,EAAE,cAAwC;YAC5D,YAAY,EAAE,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;SACtE,CAAC,CAAC;IACL,CAAC;IACD,yEAAyE;IACzE,2EAA2E;IAC3E,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC"}
@@ -1,39 +1,13 @@
1
+ import { readClaudeOauthCredential, type ClaudeOauthCredential } from "./claude-oauth-credential.js";
1
2
  import type { QuotaRefreshCycle, QuotaRefreshResult } from "@claudexor/daemon";
3
+ import { refreshClaudeNativeAuth } from "@claudexor/harness-claude";
2
4
  import { type QuotaSnapshot } from "@claudexor/schema";
3
- /**
4
- * The PRIMARY subscription-quota source (W5.3, live-proven 2026-07-17):
5
- * `GET api.anthropic.com/api/oauth/usage` with a profile's OAuth access token
6
- * returns proactive five_hour/seven_day utilization — the stream's rate-limit
7
- * signals arrive only reactively, AFTER a limit bites.
8
- *
9
- * Security (INV-062 class): the access token is read from the profile's OWN
10
- * vendor store — the keychain item on macOS, the vendor's
11
- * `<configDir>/.credentials.json` (documented 0600 file store) elsewhere —
12
- * held transiently for at most one usage request, and never persisted,
13
- * logged, or included in errors. Before probing a known-expired or near-expiry
14
- * refreshable credential, Claudexor wakes Claude Code's prompt-free MCP server
15
- * and lets the vendor refresh its own store; a known-fresh 401/403 remains the
16
- * vendor's explicit rejection evidence.
17
- */
18
- /** Vendor formula, live-verified: `Claude Code-credentials-<sha256(configDir)[:8]>`. */
19
- export declare function claudeOauthKeychainItem(configDir: string): string;
20
- export interface ClaudeOauthCredential {
21
- accessToken: string;
22
- subscriptionType: string | null;
23
- expiresAtMs: number | null;
24
- hasRefreshToken: boolean;
25
- }
26
- /** Read the profile's OAuth credential from the vendor's own store: the
27
- * profile-keyed keychain item on macOS (`security`), or the vendor's
28
- * `<configDir>/.credentials.json` everywhere else — Linux has no keychain. */
29
- export declare function readClaudeOauthCredential(configDir: string, platform?: NodeJS.Platform): Promise<ClaudeOauthCredential | null>;
30
- /** Accepts both credential shapes seen in the wild: flat and `{claudeAiOauth}`. */
31
- export declare function parseClaudeOauthCredential(raw: string): ClaudeOauthCredential | null;
5
+ import { type QuotaDiagnosticSink } from "./quota-refresh-diagnostics.js";
32
6
  /** Daemon-side credential change (login/logout/profile mutation): every
33
7
  * remembered rejection is re-verified on the next cycle. Fail-open by
34
8
  * contract — over-clearing costs at most one probe. */
35
9
  export declare function forgetClaudeOauthRejections(): void;
36
- export type ClaudeOauthCredentialRefresher = (configDir: string, platform: NodeJS.Platform, readCredential: typeof readClaudeOauthCredential) => Promise<ClaudeOauthCredential | null>;
10
+ export type ClaudeOauthCredentialRefresher = (configDir: string, platform: NodeJS.Platform, readCredential: typeof readClaudeOauthCredential, diagnostic?: NonNullable<Parameters<typeof refreshClaudeNativeAuth>[2]>["diagnostic"]) => Promise<ClaudeOauthCredential | null>;
37
11
  /** Pure mapping of the oauth/usage response onto QuotaSnapshot (testable). */
38
12
  export declare function parseClaudeOauthUsage(value: unknown, subjectId: string | null, planLabel: string | null, observedAt?: Date): QuotaSnapshot | null;
39
13
  export interface ClaudeOauthUsageDeps {
@@ -42,14 +16,8 @@ export interface ClaudeOauthUsageDeps {
42
16
  fetchUsage: (accessToken: string) => Promise<unknown>;
43
17
  now: () => Date;
44
18
  platform: NodeJS.Platform;
19
+ diagnostic: QuotaDiagnosticSink;
45
20
  }
46
- /** RFC 9110 Retry-After → milliseconds from `now`: delta-seconds or an
47
- * HTTP-date, clamped to [0, MAX_RETRY_AFTER_HEADER_MS] (a non-finite or
48
- * oversized value clamps to the ceiling — the vendor DID ask for a long
49
- * pause; the observation is kept, bounded). Null only for a missing or
50
- * unparseable header — the floor is then unknown and pacing falls back to
51
- * exponential backoff. */
52
- export declare function parseRetryAfterHeaderMs(header: string | null, nowMs?: number): number | null;
53
21
  /** One subject per logged-in config dir: the default native dir (subject null)
54
22
  * plus every enabled claude config_dir_login profile (subject = profile_id).
55
23
  * The PRIMARY claude source (release cut V11a) — it owns the claude subject
@@ -61,7 +29,8 @@ export declare function parseRetryAfterHeaderMs(header: string | null, nowMs?: n
61
29
  * automatically refreshed by Claude Code without inference, and a fetch
62
30
  * refusal is refresh_failed unless a known-fresh credential is explicitly rejected.
63
31
  * A remembered rejection is re-stated without re-presenting the token on
64
- * background cycles (see `rejectedTokens`); a foreground cycle always asks.
32
+ * background cycles (see `rejectedTokens`); a foreground cycle re-asks unless
33
+ * its poll floor remains active.
65
34
  * Absence is stated, never inferred. */
66
35
  export declare function refreshClaudeOauthUsageQuota(deps?: Partial<ClaudeOauthUsageDeps>, cycle?: QuotaRefreshCycle): Promise<QuotaRefreshResult>;
67
36
  //# sourceMappingURL=claude-oauth-usage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-oauth-usage.d.ts","sourceRoot":"","sources":["../src/claude-oauth-usage.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAU/E,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAS3B;;;;;;;;;;;;;;GAcG;AAEH,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID;;8EAE8E;AAC9E,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAmBvC;AA8BD,mFAAmF;AACnF,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAuBpF;AA2BD;;uDAEuD;AACvD,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD;AA8BD,MAAM,MAAM,8BAA8B,GAAG,CAC3C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,cAAc,EAAE,OAAO,yBAAyB,KAC7C,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;AAsB3C,8EAA8E;AAC9E,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,UAAU,OAAa,GACtB,aAAa,GAAG,IAAI,CAqBtB;AAgDD,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,OAAO,yBAAyB,CAAC;IACjD,iBAAiB,EAAE,8BAA8B,CAAC;IAClD,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC3B;AASD;;;;;0BAK0B;AAC1B,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,GAAE,MAAmB,GACzB,MAAM,GAAG,IAAI,CAWf;AAuDD;;;;;;;;;;;;wCAYwC;AACxC,wBAAsB,4BAA4B,CAChD,IAAI,GAAE,OAAO,CAAC,oBAAoB,CAAM,EACxC,KAAK,CAAC,EAAE,iBAAiB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CA4L7B"}
1
+ {"version":3,"file":"claude-oauth-usage.d.ts","sourceRoot":"","sources":["../src/claude-oauth-usage.ts"],"names":[],"mappings":"AACA,OAAO,EACL,yBAAyB,EAEzB,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAOL,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,gCAAgC,CAAC;AAkCxC;;uDAEuD;AACvD,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD;AA8BD,MAAM,MAAM,8BAA8B,GAAG,CAC3C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,cAAc,EAAE,OAAO,yBAAyB,EAChD,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAClF,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;AAwB3C,8EAA8E;AAC9E,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,UAAU,OAAa,GACtB,aAAa,GAAG,IAAI,CAqBtB;AAgDD,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,OAAO,yBAAyB,CAAC;IACjD,iBAAiB,EAAE,8BAA8B,CAAC;IAClD,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,UAAU,EAAE,mBAAmB,CAAC;CACjC;AAqBD;;;;;;;;;;;;;wCAawC;AACxC,wBAAsB,4BAA4B,CAChD,IAAI,GAAE,OAAO,CAAC,oBAAoB,CAAM,EACxC,KAAK,CAAC,EAAE,iBAAiB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAyV7B"}
@@ -1,113 +1,23 @@
1
- import { execFile } from "node:child_process";
2
- import { readFile } from "node:fs/promises";
3
- import { userInfo } from "node:os";
4
- import { join } from "node:path";
5
- import { promisify } from "node:util";
1
+ import { randomUUID } from "node:crypto";
2
+ import { readClaudeOauthCredential, taggedRefreshFailure, } from "./claude-oauth-credential.js";
6
3
  import { loadConfig } from "@claudexor/config";
7
4
  import { canonicalProfileConfigDir, CLAUDE_AUTH_REFRESH_TERMINATION_UNCONFIRMED, claudeNativeEnv, claudeOauthAccessTokenIsFresh, claudeQuotaModelAliases, defaultNativeClaudeConfigDir, refreshClaudeNativeAuth, } from "@claudexor/harness-claude";
8
5
  import { QuotaSnapshot as QuotaSnapshotSchema, } from "@claudexor/schema";
9
6
  import { noProjectRepoRoot, sha256 } from "@claudexor/util";
7
+ import { fetchClaudeOauthUsage } from "./claude-oauth-fetch.js";
10
8
  import { readAccountsMigrationFile } from "./accounts-unified-migration.js";
9
+ import { emitQuotaDiagnostic, } from "./quota-refresh-diagnostics.js";
11
10
  const SOURCE = "claude_oauth_usage";
12
- const USAGE_URL = "https://api.anthropic.com/api/oauth/usage";
13
- const OAUTH_BETA_HEADER = "oauth-2025-04-20";
14
- const FETCH_TIMEOUT_MS = 10_000;
15
- /**
16
- * The PRIMARY subscription-quota source (W5.3, live-proven 2026-07-17):
17
- * `GET api.anthropic.com/api/oauth/usage` with a profile's OAuth access token
18
- * returns proactive five_hour/seven_day utilization — the stream's rate-limit
19
- * signals arrive only reactively, AFTER a limit bites.
20
- *
21
- * Security (INV-062 class): the access token is read from the profile's OWN
22
- * vendor store — the keychain item on macOS, the vendor's
23
- * `<configDir>/.credentials.json` (documented 0600 file store) elsewhere —
24
- * held transiently for at most one usage request, and never persisted,
25
- * logged, or included in errors. Before probing a known-expired or near-expiry
26
- * refreshable credential, Claudexor wakes Claude Code's prompt-free MCP server
27
- * and lets the vendor refresh its own store; a known-fresh 401/403 remains the
28
- * vendor's explicit rejection evidence.
29
- */
30
- /** Vendor formula, live-verified: `Claude Code-credentials-<sha256(configDir)[:8]>`. */
31
- export function claudeOauthKeychainItem(configDir) {
32
- return `Claude Code-credentials-${sha256(configDir).replace("sha256:", "").slice(0, 8)}`;
33
- }
34
- const execFileAsync = promisify(execFile);
35
- /** Read the profile's OAuth credential from the vendor's own store: the
36
- * profile-keyed keychain item on macOS (`security`), or the vendor's
37
- * `<configDir>/.credentials.json` everywhere else — Linux has no keychain. */
38
- export async function readClaudeOauthCredential(configDir, platform = process.platform) {
39
- if (platform !== "darwin")
40
- return readClaudeOauthCredentialFile(configDir);
41
- try {
42
- const { stdout } = await execFileAsync("security", [
43
- "find-generic-password",
44
- "-s",
45
- claudeOauthKeychainItem(configDir),
46
- "-a",
47
- userInfo().username,
48
- "-w",
49
- ], { timeout: 5_000, maxBuffer: 1024 * 1024 });
50
- return parseClaudeOauthCredential(stdout);
51
- }
52
- catch {
53
- return null; // no item / locked keychain — honest absence
54
- }
55
- }
56
- /** The non-macOS vendor store (`.credentials.json`, documented mode 0600).
57
- * A missing file is the honest logged-out null; a present-but-unreadable or
58
- * unparseable file throws a reason-tagged error carrying only the error
59
- * class — never file bytes or a token (INV-062). */
60
- async function readClaudeOauthCredentialFile(configDir) {
61
- let raw;
62
- try {
63
- raw = await readFile(join(configDir, ".credentials.json"), "utf8");
64
- }
65
- catch (error) {
66
- const code = error.code;
67
- if (code === "ENOENT" || code === "ENOTDIR")
68
- return null;
69
- throw taggedRefreshFailure(`credential file unreadable (${code ?? "io_error"})`);
70
- }
71
- const credential = parseClaudeOauthCredential(raw);
72
- if (credential === null) {
73
- throw taggedRefreshFailure("credential file did not parse as a vendor credential");
74
- }
75
- return credential;
76
- }
77
- function taggedRefreshFailure(detail) {
78
- return Object.assign(new Error(detail), {
79
- quotaAbsenceReason: "refresh_failed",
80
- });
81
- }
82
- /** Accepts both credential shapes seen in the wild: flat and `{claudeAiOauth}`. */
83
- export function parseClaudeOauthCredential(raw) {
84
- try {
85
- const parsed = JSON.parse(raw.trim());
86
- const body = (parsed["claudeAiOauth"] && typeof parsed["claudeAiOauth"] === "object"
87
- ? parsed["claudeAiOauth"]
88
- : parsed);
89
- const token = body["accessToken"];
90
- if (typeof token !== "string" || token.length === 0)
91
- return null;
92
- return {
93
- accessToken: token,
94
- subscriptionType: typeof body["subscriptionType"] === "string" ? body["subscriptionType"] : null,
95
- expiresAtMs: typeof body["expiresAt"] === "number" && Number.isFinite(body["expiresAt"])
96
- ? body["expiresAt"]
97
- : null,
98
- hasRefreshToken: typeof body["refreshToken"] === "string" && body["refreshToken"].length > 0,
99
- };
100
- }
101
- catch {
102
- return null;
103
- }
104
- }
11
+ /** Full subscription inventory from oauth/usage, independent of passive stream
12
+ * windows. Access material from claude-oauth-credential stays transient for one
13
+ * serial refresh cycle. Claude Code owns renewal and persistence; diagnostics contain only
14
+ * expiry/presence and physical operation receipts, never credentials. */
105
15
  /** A vendor rejection remembered per PRESENTED token (INV-062: the token's
106
16
  * hash, never the token; process memory only; never persisted or logged).
107
- * Re-presenting a credential the vendor has already rejected buys nothing and
108
- * costs a lot: the vendor answers a 401 storm with a one-hour 429, and the
109
- * per-vendor poll floor then blacks out every healthy sibling (live journal:
110
- * healthy profiles fresh 20 % of the day beside one revoked row). So a
17
+ * Re-presenting a proven rejection needlessly uses endpoint capacity. Usage
18
+ * reads have returned one-hour Retry-After pauses, whose vendor-lane floor
19
+ * also delays healthy siblings; that is not a measured global request budget.
20
+ * So a
111
21
  * background cycle re-states the typed `auth_revoked` absence for a
112
22
  * remembered token WITHOUT an HTTP request — the same doctrine as the codex
113
23
  * source's logged-out precheck — until the token bytes change (any re-login,
@@ -160,8 +70,8 @@ function needsVendorRefresh(credential, observedAt) {
160
70
  /** Keep refresh-token custody and store writes inside Claude Code. Claudexor
161
71
  * wakes the vendor's prompt-free MCP server, observes expiry metadata, then
162
72
  * re-reads the access token only after the vendor has published fresh state. */
163
- async function refreshCredentialDefault(configDir, platform, readCredential) {
164
- const refreshed = await refreshClaudeNativeAuth(claudeNativeEnv(undefined, configDir), async () => (await readCredential(configDir, platform))?.expiresAtMs ?? null);
73
+ async function refreshCredentialDefault(configDir, platform, readCredential, diagnostic) {
74
+ const refreshed = await refreshClaudeNativeAuth(claudeNativeEnv(undefined, configDir), async () => (await readCredential(configDir, platform))?.expiresAtMs ?? null, { diagnostic });
165
75
  if (!refreshed)
166
76
  throw taggedRefreshFailure(VENDOR_REFRESH_FAILED_DETAIL);
167
77
  const credential = await readCredential(configDir, platform);
@@ -238,67 +148,6 @@ function scopedConstraints(value) {
238
148
  };
239
149
  });
240
150
  }
241
- /** Ceiling on a vendor-supplied Retry-After (7 days, aligned with the
242
- * pacer's floor ceiling): an absurd or overflowing header must clamp here at
243
- * the PARSER — an unrepresentable number reaching the schema would invalidate
244
- * the whole typed rate_limited observation and drop the batch, so the floor
245
- * would never arm at exactly the moment it matters. */
246
- const MAX_RETRY_AFTER_HEADER_MS = 7 * 24 * 60 * 60_000;
247
- /** RFC 9110 Retry-After → milliseconds from `now`: delta-seconds or an
248
- * HTTP-date, clamped to [0, MAX_RETRY_AFTER_HEADER_MS] (a non-finite or
249
- * oversized value clamps to the ceiling — the vendor DID ask for a long
250
- * pause; the observation is kept, bounded). Null only for a missing or
251
- * unparseable header — the floor is then unknown and pacing falls back to
252
- * exponential backoff. */
253
- export function parseRetryAfterHeaderMs(header, nowMs = Date.now()) {
254
- if (header === null)
255
- return null;
256
- const trimmed = header.trim();
257
- const deltaMs = /^\d+$/.test(trimmed)
258
- ? Number(trimmed) * 1000
259
- : Number.isFinite(Date.parse(trimmed))
260
- ? Date.parse(trimmed) - nowMs
261
- : null;
262
- if (deltaMs === null)
263
- return null;
264
- if (!Number.isFinite(deltaMs))
265
- return MAX_RETRY_AFTER_HEADER_MS;
266
- return Math.min(Math.max(0, Math.round(deltaMs)), MAX_RETRY_AFTER_HEADER_MS);
267
- }
268
- async function fetchUsageDefault(accessToken) {
269
- const res = await fetch(USAGE_URL, {
270
- method: "GET",
271
- headers: {
272
- authorization: `Bearer ${accessToken}`,
273
- "anthropic-beta": OAUTH_BETA_HEADER,
274
- accept: "application/json",
275
- },
276
- signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
277
- });
278
- // A 401/403 is tagged as the vendor rejecting the presented access token.
279
- // The caller owns the credential-expiry context: a token known to have
280
- // expired while refreshable is awaiting Claude Code's vendor-owned refresh,
281
- // not evidence that the account itself was revoked.
282
- if (res.status === 401 || res.status === 403) {
283
- throw Object.assign(new Error(`oauth/usage responded ${res.status}`), {
284
- quotaAbsenceReason: "auth_revoked",
285
- });
286
- }
287
- // A 429 throttles the POLL, not the plan: typed `rate_limited` so the pacer
288
- // can honor the vendor's Retry-After floor (owner decision 7=A: this stays
289
- // pacing evidence and is never journaled as a quota cooldown). Anthropic
290
- // does not always send Retry-After — retryAfterMs is then null.
291
- if (res.status === 429) {
292
- throw Object.assign(new Error("oauth/usage responded 429"), {
293
- quotaAbsenceReason: "rate_limited",
294
- retryAfterMs: parseRetryAfterHeaderMs(res.headers.get("retry-after")),
295
- });
296
- }
297
- // Everything else stays an undiagnosed refresh failure.
298
- if (!res.ok)
299
- throw new Error(`oauth/usage responded ${res.status}`);
300
- return res.json();
301
- }
302
151
  function claudeOauthAbsence(subjectId, reason, detail, observedAt) {
303
152
  return {
304
153
  subject: {
@@ -323,17 +172,32 @@ function claudeOauthAbsence(subjectId, reason, detail, observedAt) {
323
172
  * automatically refreshed by Claude Code without inference, and a fetch
324
173
  * refusal is refresh_failed unless a known-fresh credential is explicitly rejected.
325
174
  * A remembered rejection is re-stated without re-presenting the token on
326
- * background cycles (see `rejectedTokens`); a foreground cycle always asks.
175
+ * background cycles (see `rejectedTokens`); a foreground cycle re-asks unless
176
+ * its poll floor remains active.
327
177
  * Absence is stated, never inferred. */
328
178
  export async function refreshClaudeOauthUsageQuota(deps = {}, cycle) {
329
179
  const readCredential = deps.readCredential ?? readClaudeOauthCredential;
330
180
  const refreshCredential = deps.refreshCredential ?? refreshCredentialDefault;
331
- const fetchUsage = deps.fetchUsage ?? fetchUsageDefault;
332
181
  const now = deps.now ?? (() => new Date());
333
182
  const platform = deps.platform ?? process.platform;
334
183
  // Rejections observed by THIS cycle count only if no credential change
335
184
  // intervened; one expired memory is released for re-verification per cycle.
336
185
  const epoch = rejectionEpoch;
186
+ const operationId = randomUUID();
187
+ const report = (profileId, record) => {
188
+ if (!deps.diagnostic)
189
+ return;
190
+ emitQuotaDiagnostic(deps.diagnostic, {
191
+ ...record,
192
+ operationId,
193
+ source: SOURCE,
194
+ profileId,
195
+ at: now().toISOString(),
196
+ foreground: cycle?.foreground === true,
197
+ credentialEpoch: epoch,
198
+ current: epoch === rejectionEpoch,
199
+ });
200
+ };
337
201
  releaseExpiredRejection(now().getTime());
338
202
  const notLoggedInDetail = platform === "darwin"
339
203
  ? "no OAuth credential in the keychain item (no login, or the keychain tool is unavailable)"
@@ -363,34 +227,131 @@ export async function refreshClaudeOauthUsageQuota(deps = {}, cycle) {
363
227
  }
364
228
  const snapshots = [];
365
229
  const absences = [];
366
- for (let index = 0; index < candidates.length; index += 1) {
367
- const candidate = candidates[index];
230
+ // Read all current identities before the serial HTTP pass so token-identical
231
+ // aliases inherit a saved floor regardless of profile order after restart.
232
+ const prepared = [];
233
+ for (const candidate of candidates) {
368
234
  let credential;
369
235
  try {
370
236
  credential = await readCredential(candidate.configDir, platform);
371
237
  }
372
238
  catch (error) {
373
239
  const tagged = error?.quotaAbsenceReason;
240
+ report(candidate.subjectId, {
241
+ stage: "credential_read",
242
+ outcome: "failed",
243
+ reason: tagged ?? "refresh_failed",
244
+ });
374
245
  absences.push(claudeOauthAbsence(candidate.subjectId, tagged ?? "refresh_failed", error instanceof Error ? error.message : String(error), now()));
375
246
  continue;
376
247
  }
377
248
  if (!credential) {
249
+ report(candidate.subjectId, {
250
+ stage: "credential_read",
251
+ outcome: "skipped",
252
+ reason: "credential_absent_or_unreadable",
253
+ });
378
254
  absences.push(claudeOauthAbsence(candidate.subjectId, "not_logged_in", notLoggedInDetail, now()));
379
255
  continue;
380
256
  }
257
+ prepared.push({ candidate, credential });
258
+ }
259
+ const subjectOf = (subjectId) => ({
260
+ harness: "claude",
261
+ credential_route: "vendor_native",
262
+ subject_id: subjectId,
263
+ plan_label: null,
264
+ });
265
+ const bindCredentials = () => cycle?.pacing?.bindCredentials(prepared.map(({ candidate, credential }) => ({
266
+ subject: subjectOf(candidate.subjectId),
267
+ credentialHash: sha256(credential.accessToken),
268
+ })));
269
+ bindCredentials();
270
+ const throttledTokens = new Set();
271
+ const skipPacedCredential = (subject, credential) => {
272
+ const pacedUntil = cycle?.pacing?.cooldownUntil(subject, now().getTime());
273
+ if (pacedUntil !== null && pacedUntil !== undefined) {
274
+ report(subject.subject_id, {
275
+ stage: "poll",
276
+ outcome: "skipped",
277
+ reason: "subject_rate_limited",
278
+ });
279
+ absences.push(claudeOauthAbsence(subject.subject_id, "poll_paced", `quota poll paused by rate-limit cooldown until ${new Date(pacedUntil).toISOString()}`, now()));
280
+ return true;
281
+ }
282
+ if (throttledTokens.has(sha256(credential.accessToken))) {
283
+ report(subject.subject_id, {
284
+ stage: "poll",
285
+ outcome: "skipped",
286
+ reason: "same_token_rate_limited",
287
+ });
288
+ absences.push(claudeOauthAbsence(subject.subject_id, "probe_skipped_rate_limited", "this token's oauth/usage probe hit the rate limit earlier in this cycle", now()));
289
+ return true;
290
+ }
291
+ return false;
292
+ };
293
+ for (const item of prepared) {
294
+ const { candidate } = item;
295
+ let { credential } = item;
296
+ const subject = subjectOf(candidate.subjectId);
297
+ if (skipPacedCredential(subject, credential))
298
+ continue;
299
+ // Retain the existing snapshot and its observation time when another
300
+ // account's retry caused this background lane cycle. All current aliases
301
+ // were bound above, and poll floors have already been honored.
302
+ if (cycle?.shouldRefresh?.(subject) === false) {
303
+ report(candidate.subjectId, {
304
+ stage: "poll",
305
+ outcome: "skipped",
306
+ reason: "primary_evidence_not_due",
307
+ });
308
+ continue;
309
+ }
381
310
  let beforeRequest = now();
382
311
  if (needsVendorRefresh(credential, beforeRequest)) {
312
+ const previousExpiresAtMs = credential.expiresAtMs;
313
+ let nativeResult;
314
+ report(candidate.subjectId, {
315
+ stage: "native_refresh",
316
+ outcome: "started",
317
+ previousExpiresAtMs,
318
+ hasRefreshToken: credential.hasRefreshToken,
319
+ });
383
320
  const originalCredentialStillValid = credential.expiresAtMs !== null && credential.expiresAtMs > beforeRequest.getTime();
384
321
  try {
385
- const refreshed = await refreshCredential(candidate.configDir, platform, readCredential);
322
+ const refreshed = await refreshCredential(candidate.configDir, platform, readCredential, (native) => {
323
+ nativeResult = native;
324
+ });
386
325
  if (refreshed === null ||
387
326
  !claudeOauthAccessTokenIsFresh(refreshed.expiresAtMs, now().getTime())) {
388
327
  throw taggedRefreshFailure(VENDOR_REFRESH_FAILED_DETAIL);
389
328
  }
390
329
  credential = refreshed;
330
+ item.credential = refreshed;
331
+ bindCredentials();
332
+ report(candidate.subjectId, {
333
+ stage: "native_refresh",
334
+ outcome: "succeeded",
335
+ reason: "fresh_expiry_observed_writer_unknown",
336
+ previousExpiresAtMs,
337
+ expiresAtMs: credential.expiresAtMs,
338
+ native: nativeResult,
339
+ });
391
340
  beforeRequest = now();
341
+ // Refresh may have joined a token alias whose poll floor is already active.
342
+ if (skipPacedCredential(subject, credential))
343
+ continue;
392
344
  }
393
345
  catch (error) {
346
+ report(candidate.subjectId, {
347
+ stage: "native_refresh",
348
+ outcome: "failed",
349
+ reason: error?.code === CLAUDE_AUTH_REFRESH_TERMINATION_UNCONFIRMED
350
+ ? "termination_unconfirmed"
351
+ : "fresh_expiry_not_observed",
352
+ previousExpiresAtMs,
353
+ native: nativeResult,
354
+ });
394
355
  // The five-minute wake is proactive. If Claude Code cannot refresh yet
395
356
  // but the presented access token is still unexpired, use that proven
396
357
  // token for this bounded request rather than hiding an available quota.
@@ -407,16 +368,39 @@ export async function refreshClaudeOauthUsageQuota(deps = {}, cycle) {
407
368
  const tokenKey = sha256(credential.accessToken);
408
369
  const rejectedAt = rejectedTokens.get(tokenKey);
409
370
  if (rejectedAt !== undefined && !cycle?.foreground) {
371
+ report(candidate.subjectId, {
372
+ stage: "poll",
373
+ outcome: "skipped",
374
+ reason: "presented_token_already_rejected",
375
+ });
410
376
  // The SAME observation re-stated: its instant is the vendor's real
411
377
  // rejection time, not this cycle's clock (stable projection signature,
412
378
  // honest "revoked at" for downstream readers).
413
379
  absences.push(claudeOauthAbsence(candidate.subjectId, "auth_revoked", `oauth/usage rejected this token at ${new Date(rejectedAt).toISOString()}; not re-asked until the token changes, a login or profile change, an explicit refresh, or ${REVOKED_TOKEN_REPROBE_MS / 3_600_000} h elapse (then one remembered token is re-verified per cycle)`, new Date(rejectedAt)));
414
380
  continue;
415
381
  }
382
+ let httpStatus;
383
+ const fetchUsage = deps.fetchUsage ??
384
+ ((token) => fetchClaudeOauthUsage(token, (status) => {
385
+ httpStatus = status;
386
+ }));
416
387
  try {
388
+ report(candidate.subjectId, {
389
+ stage: "usage_http",
390
+ outcome: "started",
391
+ expiresAtMs: credential.expiresAtMs,
392
+ hasRefreshToken: credential.hasRefreshToken,
393
+ });
394
+ const requestStartedAt = now();
417
395
  const usage = await fetchUsage(credential.accessToken);
418
396
  rejectedTokens.delete(tokenKey);
419
- const snapshot = parseClaudeOauthUsage(usage, candidate.subjectId, credential.subscriptionType, now());
397
+ const snapshot = parseClaudeOauthUsage(usage, candidate.subjectId, credential.subscriptionType, requestStartedAt);
398
+ report(candidate.subjectId, {
399
+ stage: "usage_http",
400
+ outcome: snapshot ? "succeeded" : "failed",
401
+ httpStatus,
402
+ reason: snapshot ? "windows_observed" : "no_parseable_windows",
403
+ });
420
404
  if (snapshot)
421
405
  snapshots.push(snapshot);
422
406
  else
@@ -435,6 +419,13 @@ export async function refreshClaudeOauthUsageQuota(deps = {}, cycle) {
435
419
  const tagged = error?.quotaAbsenceReason;
436
420
  const retryAfterMs = error?.retryAfterMs;
437
421
  const observedAt = now();
422
+ report(candidate.subjectId, {
423
+ stage: "usage_http",
424
+ outcome: "failed",
425
+ httpStatus,
426
+ reason: tagged ?? "refresh_failed",
427
+ retryAfterMs,
428
+ });
438
429
  const rejectedWithoutFreshnessProof = tagged === "auth_revoked" &&
439
430
  credential.hasRefreshToken &&
440
431
  (credential.expiresAtMs === null || needsVendorRefresh(credential, observedAt));
@@ -453,16 +444,11 @@ export async function refreshClaudeOauthUsageQuota(deps = {}, cycle) {
453
444
  ? { retry_after_ms: Math.round(retryAfterMs) }
454
445
  : {}),
455
446
  });
456
- // Short-circuit on the FIRST 429: every candidate hits the same vendor
457
- // endpoint, so continuing the fan-out hammers the surface that just
458
- // said stop. The unprobed siblings get the HONEST distinct reason —
459
- // their own state is unknown; a sibling's 429 is never fabricated onto
460
- // them as rate_limited (INV-093).
447
+ // A 429 establishes only this credential's poll floor. Continue the
448
+ // existing serial sweep for unrelated accounts; identical tokens share it.
461
449
  if (tagged === "rate_limited") {
462
- for (const skippedCandidate of candidates.slice(index + 1)) {
463
- absences.push(claudeOauthAbsence(skippedCandidate.subjectId, "probe_skipped_rate_limited", "a sibling candidate's oauth/usage probe hit the vendor rate limit this cycle", now()));
464
- }
465
- break;
450
+ throttledTokens.add(tokenKey);
451
+ cycle?.pacing?.noteRateLimited(subject, observedAt.getTime(), retryAfterMs ?? null);
466
452
  }
467
453
  }
468
454
  }
@@ -1 +1 @@
1
- {"version":3,"file":"claude-oauth-usage.js","sourceRoot":"","sources":["../src/claude-oauth-usage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-oauth-usage.js","sourceRoot":"","sources":["../src/claude-oauth-usage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claudexord.d.ts","sourceRoot":"","sources":["../src/claudexord.ts"],"names":[],"mappings":";AAyEA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAqV1C;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
1
+ {"version":3,"file":"claudexord.d.ts","sourceRoot":"","sources":["../src/claudexord.ts"],"names":[],"mappings":";AAyEA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAuV1C;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
@@ -68,8 +68,8 @@ export async function main() {
68
68
  const operatorDecisionStoreSlot = journalManager.registerProjection(operatorDecisionProjection());
69
69
  const runEventStoreSlot = journalManager.registerProjection(runEventProjection());
70
70
  const projectStoreSlot = journalManager.registerProjection(projectProjection());
71
- const quotaStoreSlot = journalManager.registerProjection(quotaProjection(quotaRefreshers(), quotaSubjectUniverseFromConfig, undefined,
72
- // Daemon-private per-vendor rate-limit floors (never in the journal).
71
+ const quotaStoreSlot = journalManager.registerProjection(quotaProjection(quotaRefreshers((record) => logLine(logPath(), `quota.observation ${JSON.stringify(record)}`)), quotaSubjectUniverseFromConfig, undefined,
72
+ // Daemon-private subject and legacy vendor floors (never in the journal).
73
73
  quotaPacerFileStore(daemonDir())));
74
74
  // Sidebar invalidation ping (W12): a GLOBAL-partition emitter every
75
75
  // ThreadStore (global + per-project) writes through, so any thread