@cortexkit/antigravity-auth-core 2.2.1 → 3.0.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 (230) hide show
  1. package/README.md +24 -2
  2. package/dist/abort-forwarding.d.ts +3 -0
  3. package/dist/abort-forwarding.d.ts.map +1 -0
  4. package/dist/abort-forwarding.js +19 -0
  5. package/dist/abort-forwarding.js.map +1 -0
  6. package/dist/account-identity.d.ts +52 -0
  7. package/dist/account-identity.d.ts.map +1 -0
  8. package/dist/account-identity.js +66 -0
  9. package/dist/account-identity.js.map +1 -0
  10. package/dist/account-manager.d.ts +228 -43
  11. package/dist/account-manager.d.ts.map +1 -1
  12. package/dist/account-manager.js +942 -903
  13. package/dist/account-manager.js.map +1 -1
  14. package/dist/account-migration.d.ts +309 -0
  15. package/dist/account-migration.d.ts.map +1 -0
  16. package/dist/account-migration.js +2282 -0
  17. package/dist/account-migration.js.map +1 -0
  18. package/dist/account-repository-codecs.d.ts +82 -0
  19. package/dist/account-repository-codecs.d.ts.map +1 -0
  20. package/dist/account-repository-codecs.js +609 -0
  21. package/dist/account-repository-codecs.js.map +1 -0
  22. package/dist/account-repository-types.d.ts +831 -0
  23. package/dist/account-repository-types.d.ts.map +1 -0
  24. package/dist/account-repository-types.js +137 -0
  25. package/dist/account-repository-types.js.map +1 -0
  26. package/dist/account-repository.d.ts +442 -0
  27. package/dist/account-repository.d.ts.map +1 -0
  28. package/dist/account-repository.js +2253 -0
  29. package/dist/account-repository.js.map +1 -0
  30. package/dist/account-selector.d.ts +470 -0
  31. package/dist/account-selector.d.ts.map +1 -0
  32. package/dist/account-selector.js +1383 -0
  33. package/dist/account-selector.js.map +1 -0
  34. package/dist/account-storage.d.ts.map +1 -1
  35. package/dist/account-storage.js +5 -0
  36. package/dist/account-storage.js.map +1 -1
  37. package/dist/agy-transport.d.ts.map +1 -1
  38. package/dist/agy-transport.js +21 -35
  39. package/dist/agy-transport.js.map +1 -1
  40. package/dist/antigravity-command-menu.d.ts +171 -0
  41. package/dist/antigravity-command-menu.d.ts.map +1 -0
  42. package/dist/antigravity-command-menu.js +523 -0
  43. package/dist/antigravity-command-menu.js.map +1 -0
  44. package/dist/atomic-write.d.ts +18 -1
  45. package/dist/atomic-write.d.ts.map +1 -1
  46. package/dist/atomic-write.js +15 -3
  47. package/dist/atomic-write.js.map +1 -1
  48. package/dist/common-auth-embedded/NOTICE.txt +21 -0
  49. package/dist/common-auth-embedded/auth-menu/accounts.d.ts +97 -0
  50. package/dist/common-auth-embedded/auth-menu/accounts.js +387 -0
  51. package/dist/common-auth-embedded/auth-menu/ansi.d.ts +26 -0
  52. package/dist/common-auth-embedded/auth-menu/ansi.js +98 -0
  53. package/dist/common-auth-embedded/auth-menu/confirm.d.ts +7 -0
  54. package/dist/common-auth-embedded/auth-menu/confirm.js +21 -0
  55. package/dist/common-auth-embedded/auth-menu/doctor.d.ts +52 -0
  56. package/dist/common-auth-embedded/auth-menu/doctor.js +81 -0
  57. package/dist/common-auth-embedded/auth-menu/index.d.ts +17 -0
  58. package/dist/common-auth-embedded/auth-menu/index.js +12 -0
  59. package/dist/common-auth-embedded/auth-menu/login.d.ts +55 -0
  60. package/dist/common-auth-embedded/auth-menu/login.js +83 -0
  61. package/dist/common-auth-embedded/auth-menu/menu.d.ts +59 -0
  62. package/dist/common-auth-embedded/auth-menu/menu.js +73 -0
  63. package/dist/common-auth-embedded/auth-menu/opencode-v1.d.ts +49 -0
  64. package/dist/common-auth-embedded/auth-menu/opencode-v1.js +47 -0
  65. package/dist/common-auth-embedded/auth-menu/select.d.ts +21 -0
  66. package/dist/common-auth-embedded/auth-menu/select.js +159 -0
  67. package/dist/common-auth-embedded/auth-menu/terminal.d.ts +43 -0
  68. package/dist/common-auth-embedded/auth-menu/terminal.js +19 -0
  69. package/dist/common-auth-embedded/claustrum/consumer.d.ts +102 -0
  70. package/dist/common-auth-embedded/claustrum/consumer.js +298 -0
  71. package/dist/common-auth-embedded/claustrum/custody.d.ts +175 -0
  72. package/dist/common-auth-embedded/claustrum/custody.js +354 -0
  73. package/dist/common-auth-embedded/claustrum/enrollment.d.ts +158 -0
  74. package/dist/common-auth-embedded/claustrum/enrollment.js +759 -0
  75. package/dist/common-auth-embedded/claustrum/errors.d.ts +16 -0
  76. package/dist/common-auth-embedded/claustrum/errors.js +8 -0
  77. package/dist/common-auth-embedded/claustrum/host-slot.d.ts +39 -0
  78. package/dist/common-auth-embedded/claustrum/host-slot.js +72 -0
  79. package/dist/common-auth-embedded/claustrum/index.d.ts +18 -0
  80. package/dist/common-auth-embedded/claustrum/index.js +22 -0
  81. package/dist/common-auth-embedded/claustrum/interlock.d.ts +27 -0
  82. package/dist/common-auth-embedded/claustrum/interlock.js +29 -0
  83. package/dist/common-auth-embedded/claustrum/roster.d.ts +208 -0
  84. package/dist/common-auth-embedded/claustrum/roster.js +536 -0
  85. package/dist/common-auth-embedded/commands/builtins.d.ts +71 -0
  86. package/dist/common-auth-embedded/commands/builtins.js +534 -0
  87. package/dist/common-auth-embedded/commands/index.d.ts +10 -0
  88. package/dist/common-auth-embedded/commands/index.js +5 -0
  89. package/dist/common-auth-embedded/commands/menu.d.ts +61 -0
  90. package/dist/common-auth-embedded/commands/menu.js +300 -0
  91. package/dist/common-auth-embedded/commands/model.d.ts +238 -0
  92. package/dist/common-auth-embedded/commands/model.js +16 -0
  93. package/dist/common-auth-embedded/commands/pi.d.ts +23 -0
  94. package/dist/common-auth-embedded/commands/pi.js +206 -0
  95. package/dist/common-auth-embedded/commands/seam.d.ts +72 -0
  96. package/dist/common-auth-embedded/commands/seam.js +301 -0
  97. package/dist/common-auth-embedded/fs/atomic-write.d.ts +20 -0
  98. package/dist/common-auth-embedded/fs/atomic-write.js +80 -0
  99. package/dist/common-auth-embedded/fs/index.d.ts +7 -0
  100. package/dist/common-auth-embedded/fs/index.js +6 -0
  101. package/dist/common-auth-embedded/fs/lock-constants.d.ts +14 -0
  102. package/dist/common-auth-embedded/fs/lock-constants.js +14 -0
  103. package/dist/common-auth-embedded/fs/refresh-file-lock.d.ts +33 -0
  104. package/dist/common-auth-embedded/fs/refresh-file-lock.js +501 -0
  105. package/dist/common-auth-embedded/fs/with-lock.d.ts +33 -0
  106. package/dist/common-auth-embedded/fs/with-lock.js +48 -0
  107. package/dist/common-auth-embedded/logger/capture-sink.d.ts +14 -0
  108. package/dist/common-auth-embedded/logger/capture-sink.js +13 -0
  109. package/dist/common-auth-embedded/logger/engine.d.ts +100 -0
  110. package/dist/common-auth-embedded/logger/engine.js +246 -0
  111. package/dist/common-auth-embedded/logger/index.d.ts +6 -0
  112. package/dist/common-auth-embedded/logger/index.js +3 -0
  113. package/dist/common-auth-embedded/logger/redact.d.ts +11 -0
  114. package/dist/common-auth-embedded/logger/redact.js +83 -0
  115. package/dist/common-auth-embedded/pi-slot/index.d.ts +3 -0
  116. package/dist/common-auth-embedded/pi-slot/index.js +2 -0
  117. package/dist/common-auth-embedded/pi-slot/lock.js +212 -0
  118. package/dist/common-auth-embedded/pi-slot/slot.d.ts +49 -0
  119. package/dist/common-auth-embedded/pi-slot/slot.js +383 -0
  120. package/dist/common-auth-embedded/quota/codec.d.ts +11 -0
  121. package/dist/common-auth-embedded/quota/codec.js +12 -0
  122. package/dist/common-auth-embedded/quota/format.d.ts +46 -0
  123. package/dist/common-auth-embedded/quota/format.js +138 -0
  124. package/dist/common-auth-embedded/quota/index.d.ts +10 -0
  125. package/dist/common-auth-embedded/quota/index.js +5 -0
  126. package/dist/common-auth-embedded/quota/map.d.ts +63 -0
  127. package/dist/common-auth-embedded/quota/map.js +105 -0
  128. package/dist/common-auth-embedded/quota/merge.d.ts +48 -0
  129. package/dist/common-auth-embedded/quota/merge.js +162 -0
  130. package/dist/common-auth-embedded/quota/projection.d.ts +64 -0
  131. package/dist/common-auth-embedded/quota/projection.js +134 -0
  132. package/dist/common-auth-embedded/routing/admission.d.ts +93 -0
  133. package/dist/common-auth-embedded/routing/admission.js +142 -0
  134. package/dist/common-auth-embedded/routing/index.d.ts +8 -0
  135. package/dist/common-auth-embedded/routing/index.js +4 -0
  136. package/dist/common-auth-embedded/routing/ordered.d.ts +47 -0
  137. package/dist/common-auth-embedded/routing/ordered.js +58 -0
  138. package/dist/common-auth-embedded/routing/pins.d.ts +22 -0
  139. package/dist/common-auth-embedded/routing/pins.js +34 -0
  140. package/dist/common-auth-embedded/routing/sticky.d.ts +158 -0
  141. package/dist/common-auth-embedded/routing/sticky.js +339 -0
  142. package/dist/common-auth-embedded/source-output.json +1090 -0
  143. package/dist/common-auth-embedded/store/attribution.d.ts +28 -0
  144. package/dist/common-auth-embedded/store/attribution.js +60 -0
  145. package/dist/common-auth-embedded/store/errors.d.ts +55 -0
  146. package/dist/common-auth-embedded/store/errors.js +38 -0
  147. package/dist/common-auth-embedded/store/hooks.d.ts +12 -0
  148. package/dist/common-auth-embedded/store/hooks.js +34 -0
  149. package/dist/common-auth-embedded/store/identity.d.ts +39 -0
  150. package/dist/common-auth-embedded/store/identity.js +79 -0
  151. package/dist/common-auth-embedded/store/index.d.ts +21 -0
  152. package/dist/common-auth-embedded/store/index.js +7 -0
  153. package/dist/common-auth-embedded/store/mutate.d.ts +189 -0
  154. package/dist/common-auth-embedded/store/mutate.js +500 -0
  155. package/dist/common-auth-embedded/store/pool.d.ts +196 -0
  156. package/dist/common-auth-embedded/store/pool.js +120 -0
  157. package/dist/common-auth-embedded/store/provider-state.d.ts +131 -0
  158. package/dist/common-auth-embedded/store/provider-state.js +226 -0
  159. package/dist/common-auth-embedded/store/publication.d.ts +47 -0
  160. package/dist/common-auth-embedded/store/publication.js +304 -0
  161. package/dist/common-auth-embedded/store/pull.d.ts +36 -0
  162. package/dist/common-auth-embedded/store/pull.js +143 -0
  163. package/dist/common-auth-embedded/store/refresh-lock.d.ts +63 -0
  164. package/dist/common-auth-embedded/store/refresh-lock.js +136 -0
  165. package/dist/common-auth-embedded/store/refresh.d.ts +72 -0
  166. package/dist/common-auth-embedded/store/refresh.js +225 -0
  167. package/dist/common-auth-embedded/store/reserved.js +13 -0
  168. package/dist/common-auth-embedded/store/rows.d.ts +313 -0
  169. package/dist/common-auth-embedded/store/rows.js +1258 -0
  170. package/dist/common-auth-embedded/store/runtime.d.ts +36 -0
  171. package/dist/common-auth-embedded/store/runtime.js +68 -0
  172. package/dist/common-auth-embedded/store/schema.d.ts +443 -0
  173. package/dist/common-auth-embedded/store/schema.js +754 -0
  174. package/dist/common-auth-embedded/store/settings.d.ts +63 -0
  175. package/dist/common-auth-embedded/store/settings.js +120 -0
  176. package/dist/common-auth-embedded/store/torn.d.ts +78 -0
  177. package/dist/common-auth-embedded/store/torn.js +294 -0
  178. package/dist/common-auth-embedded/util/any-signal.js +42 -0
  179. package/dist/common-auth-runtime.d.ts +73 -0
  180. package/dist/common-auth-runtime.d.ts.map +1 -0
  181. package/dist/common-auth-runtime.js +65 -0
  182. package/dist/common-auth-runtime.js.map +1 -0
  183. package/dist/credential-redaction.d.ts +13 -0
  184. package/dist/credential-redaction.d.ts.map +1 -0
  185. package/dist/credential-redaction.js +230 -0
  186. package/dist/credential-redaction.js.map +1 -0
  187. package/dist/fetch-timeout.d.ts +4 -2
  188. package/dist/fetch-timeout.d.ts.map +1 -1
  189. package/dist/fetch-timeout.js +121 -14
  190. package/dist/fetch-timeout.js.map +1 -1
  191. package/dist/index.d.ts +16 -1
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js +15 -0
  194. package/dist/index.js.map +1 -1
  195. package/dist/quota-manager.d.ts.map +1 -1
  196. package/dist/quota-manager.js +35 -10
  197. package/dist/quota-manager.js.map +1 -1
  198. package/dist/quota-presentation.d.ts +10 -0
  199. package/dist/quota-presentation.d.ts.map +1 -0
  200. package/dist/quota-presentation.js +60 -0
  201. package/dist/quota-presentation.js.map +1 -0
  202. package/dist/quota-types.d.ts +2 -0
  203. package/dist/quota-types.d.ts.map +1 -1
  204. package/dist/rotation.d.ts +8 -0
  205. package/dist/rotation.d.ts.map +1 -1
  206. package/dist/rotation.js +24 -0
  207. package/dist/rotation.js.map +1 -1
  208. package/dist/transform/claude.d.ts +7 -3
  209. package/dist/transform/claude.d.ts.map +1 -1
  210. package/dist/transform/claude.js +6 -2
  211. package/dist/transform/claude.js.map +1 -1
  212. package/dist/transform/types.d.ts +1 -1
  213. package/dist/transform/types.d.ts.map +1 -1
  214. package/dist/vault-account-source.d.ts +183 -0
  215. package/dist/vault-account-source.d.ts.map +1 -0
  216. package/dist/vault-account-source.js +296 -0
  217. package/dist/vault-account-source.js.map +1 -0
  218. package/dist/vault-enrollment-authority.d.ts +16 -0
  219. package/dist/vault-enrollment-authority.d.ts.map +1 -0
  220. package/dist/vault-enrollment-authority.js +19 -0
  221. package/dist/vault-enrollment-authority.js.map +1 -0
  222. package/dist/vault-family.d.ts +11 -0
  223. package/dist/vault-family.d.ts.map +1 -0
  224. package/dist/vault-family.js +24 -0
  225. package/dist/vault-family.js.map +1 -0
  226. package/dist/vault-provider-state.d.ts +162 -0
  227. package/dist/vault-provider-state.d.ts.map +1 -0
  228. package/dist/vault-provider-state.js +422 -0
  229. package/dist/vault-provider-state.js.map +1 -0
  230. package/package.json +39 -2
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # @cortexkit/antigravity-auth-core
2
2
 
3
- Harness-agnostic core for Google Antigravity OAuth. Shared by the OpenCode
4
- plugin ([`@cortexkit/opencode-antigravity-auth`](../opencode)) and the pi
3
+ Harness-agnostic core for Google Antigravity OAuth. Shared by the unified OpenCode
4
+ 1.x (V1) and 2.x general-availability (GA) server and TUI ([`@cortexkit/opencode-antigravity-auth`](../opencode)) and the Pi
5
5
  extension ([`@cortexkit/pi-antigravity-auth`](../pi)).
6
6
 
7
7
  Provides:
@@ -16,6 +16,28 @@ Provides:
16
16
  - **Model registry & resolver** — Antigravity model catalog plus the
17
17
  model/thinking-budget wire mappings.
18
18
  - **Managed project** — `loadCodeAssist`/`onboardUser` resolution with caching.
19
+ - **Accounts and quota** — shared local account repository, selection, cooldowns,
20
+ quota readings, and the common `/antigravity` menu used by the host adapters.
21
+ - **Store lifecycle** — explicit fresh initialization, offline legacy OpenCode
22
+ pool migration, and current-credential rollback in
23
+ [`src/account-migration.ts`](src/account-migration.ts).
24
+ - **Vault integration** — approved enrollment and request credentials kept
25
+ separate from local account authority; unavailable vault custody does not
26
+ silently fall back to local credentials.
27
+
28
+ OpenCode V1 and GA use the same local store when they resolve the same account
29
+ path. Pi local mode instead uses Pi's native `google` OAuth slot, not the OpenCode
30
+ pool; Pi vault mode selects one account approved by the vault operator at a time.
31
+ Both adapters expose models under the `google` provider.
32
+
33
+ For a major upgrade, stop every OpenCode/Antigravity process and timer before
34
+ `antigravity-auth migrate --offline`. Fresh local pools use `antigravity-auth init`.
35
+ To downgrade a migrated pool, use the **new CLI's** `rollback --offline` and wait
36
+ for success before installing an older build. Rollback exports current credentials
37
+ to legacy V4 JSON, not the original backup. See the
38
+ [upgrade guide](../../README.md#major-upgrades-migration-and-rollback) for refusal
39
+ conditions and the separate host/vault disconnect and re-login requirements.
40
+ Do not apply OpenCode pool migration to Pi's native auth file.
19
41
 
20
42
  This package is an implementation detail of the harness packages and has no
21
43
  stable public API contract of its own.
@@ -0,0 +1,3 @@
1
+ /** Forward one signal's reason without changing it; the owner chooses when to detach. */
2
+ export declare function forwardAbort(source: AbortSignal | null | undefined, target: AbortController): () => void;
3
+ //# sourceMappingURL=abort-forwarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort-forwarding.d.ts","sourceRoot":"","sources":["../src/abort-forwarding.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACtC,MAAM,EAAE,eAAe,GACtB,MAAM,IAAI,CAcZ"}
@@ -0,0 +1,19 @@
1
+ /** Forward one signal's reason without changing it; the owner chooses when to detach. */
2
+ export function forwardAbort(source, target) {
3
+ if (!source || target.signal.aborted)
4
+ return () => { };
5
+ const onAbort = () => target.abort(source.reason);
6
+ if (source.aborted) {
7
+ onAbort();
8
+ return () => { };
9
+ }
10
+ source.addEventListener('abort', onAbort, { once: true });
11
+ let detached = false;
12
+ return () => {
13
+ if (detached)
14
+ return;
15
+ detached = true;
16
+ source.removeEventListener('abort', onAbort);
17
+ };
18
+ }
19
+ //# sourceMappingURL=abort-forwarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort-forwarding.js","sourceRoot":"","sources":["../src/abort-forwarding.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,MAAM,UAAU,YAAY,CAC1B,MAAsC,EACtC,MAAuB;IAEvB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IACrD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACjD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,CAAA;QACT,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ;YAAE,OAAM;QACpB,QAAQ,GAAG,IAAI,CAAA;QACf,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9C,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * How the account repository names one credential of one row.
3
+ *
4
+ * A `RowRef` is the id of a row, the credential epoch the store gave its
5
+ * credential, and the identity recorded for it. Work started for one
6
+ * credential (a refresh, a quota pull, a status verdict) must only land on
7
+ * that credential: never on its replacement, never on a row re-added under
8
+ * the same id, and never on a row that merely shares a position. Comparing
9
+ * refs exactly, with an absent identity matching only an absent identity,
10
+ * is what makes that check meaningful; treating absence as "any identity"
11
+ * would let a lookup about one account land on another.
12
+ */
13
+ import type { RowRef } from './account-repository-types.ts';
14
+ /** What a pool-store row carries about its own credential. */
15
+ export interface RowAttributionSource {
16
+ readonly id: string;
17
+ /** Undefined for a row with no per-row entry yet, which counts as epoch 1. */
18
+ readonly credentialEpoch?: number;
19
+ readonly identity?: string;
20
+ }
21
+ /**
22
+ * The credential fence the store takes for attributed writes. Same shape as
23
+ * `Attribution` in common-auth `dist/store/attribution.d.ts`.
24
+ */
25
+ export interface CredentialFence {
26
+ credentialEpoch: number;
27
+ identity?: string;
28
+ }
29
+ /**
30
+ * The ref of a row as the store loaded it. A row without a per-row entry is
31
+ * at epoch 1, as the store itself counts it.
32
+ */
33
+ export declare function rowRefOf(row: RowAttributionSource): RowRef;
34
+ /** Exact equality: id, epoch, and identity including its absence. */
35
+ export declare function sameRowRef(a: RowRef, b: RowRef): boolean;
36
+ /** Whether a loaded row still holds exactly the credential `ref` names. */
37
+ export declare function rowHoldsRef(row: RowAttributionSource, ref: RowRef): boolean;
38
+ /** The store's attribution argument for the credential in `ref`. */
39
+ export declare function credentialFenceOf(ref: RowRef): CredentialFence;
40
+ /**
41
+ * A string key for in-memory maps (single-flight refreshes, pending writes)
42
+ * that keeps every part of the ref, so two credentials of one row, or a row
43
+ * with and without a recorded identity, never share an entry. JSON keeps the
44
+ * parts apart whatever characters an id or identity holds.
45
+ */
46
+ export declare function rowRefKey(ref: RowRef): string;
47
+ /**
48
+ * Describes why a row no longer matches a ref, without naming the identity
49
+ * itself (identities are account ids and stay out of messages).
50
+ */
51
+ export declare function refMismatchReason(row: RowAttributionSource | undefined, ref: RowRef): string | undefined;
52
+ //# sourceMappingURL=account-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-identity.d.ts","sourceRoot":"","sources":["../src/account-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAE3D,8DAA8D;AAC9D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,CAK1D;AAED,qEAAqE;AACrE,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAMxD;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAI9D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM7C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,oBAAoB,GAAG,SAAS,EACrC,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAUpB"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * How the account repository names one credential of one row.
3
+ *
4
+ * A `RowRef` is the id of a row, the credential epoch the store gave its
5
+ * credential, and the identity recorded for it. Work started for one
6
+ * credential (a refresh, a quota pull, a status verdict) must only land on
7
+ * that credential: never on its replacement, never on a row re-added under
8
+ * the same id, and never on a row that merely shares a position. Comparing
9
+ * refs exactly, with an absent identity matching only an absent identity,
10
+ * is what makes that check meaningful; treating absence as "any identity"
11
+ * would let a lookup about one account land on another.
12
+ */
13
+ /**
14
+ * The ref of a row as the store loaded it. A row without a per-row entry is
15
+ * at epoch 1, as the store itself counts it.
16
+ */
17
+ export function rowRefOf(row) {
18
+ const credentialEpoch = row.credentialEpoch ?? 1;
19
+ return row.identity === undefined
20
+ ? { id: row.id, credentialEpoch }
21
+ : { id: row.id, credentialEpoch, identity: row.identity };
22
+ }
23
+ /** Exact equality: id, epoch, and identity including its absence. */
24
+ export function sameRowRef(a, b) {
25
+ return (a.id === b.id &&
26
+ a.credentialEpoch === b.credentialEpoch &&
27
+ a.identity === b.identity);
28
+ }
29
+ /** Whether a loaded row still holds exactly the credential `ref` names. */
30
+ export function rowHoldsRef(row, ref) {
31
+ return sameRowRef(rowRefOf(row), ref);
32
+ }
33
+ /** The store's attribution argument for the credential in `ref`. */
34
+ export function credentialFenceOf(ref) {
35
+ return ref.identity === undefined
36
+ ? { credentialEpoch: ref.credentialEpoch }
37
+ : { credentialEpoch: ref.credentialEpoch, identity: ref.identity };
38
+ }
39
+ /**
40
+ * A string key for in-memory maps (single-flight refreshes, pending writes)
41
+ * that keeps every part of the ref, so two credentials of one row, or a row
42
+ * with and without a recorded identity, never share an entry. JSON keeps the
43
+ * parts apart whatever characters an id or identity holds.
44
+ */
45
+ export function rowRefKey(ref) {
46
+ return JSON.stringify(ref.identity === undefined
47
+ ? [ref.id, ref.credentialEpoch]
48
+ : [ref.id, ref.credentialEpoch, ref.identity]);
49
+ }
50
+ /**
51
+ * Describes why a row no longer matches a ref, without naming the identity
52
+ * itself (identities are account ids and stay out of messages).
53
+ */
54
+ export function refMismatchReason(row, ref) {
55
+ if (row === undefined)
56
+ return `row ${ref.id} is no longer in the pool`;
57
+ const current = rowRefOf(row);
58
+ if (current.credentialEpoch !== ref.credentialEpoch) {
59
+ return `row ${ref.id} now holds credential epoch ${current.credentialEpoch}, not ${ref.credentialEpoch}`;
60
+ }
61
+ if (current.identity !== ref.identity) {
62
+ return `row ${ref.id} now records a different account identity`;
63
+ }
64
+ return undefined;
65
+ }
66
+ //# sourceMappingURL=account-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-identity.js","sourceRoot":"","sources":["../src/account-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqBH;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAyB;IAChD,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,IAAI,CAAC,CAAA;IAChD,OAAO,GAAG,CAAC,QAAQ,KAAK,SAAS;QAC/B,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE;QACjC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAA;AAC7D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,UAAU,CAAC,CAAS,EAAE,CAAS;IAC7C,OAAO,CACL,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;QACb,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,eAAe;QACvC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAC1B,CAAA;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CAAC,GAAyB,EAAE,GAAW;IAChE,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;AACvC,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,GAAG,CAAC,QAAQ,KAAK,SAAS;QAC/B,CAAC,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE;QAC1C,CAAC,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAA;AACtE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,IAAI,CAAC,SAAS,CACnB,GAAG,CAAC,QAAQ,KAAK,SAAS;QACxB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,eAAe,CAAC;QAC/B,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,QAAQ,CAAC,CAChD,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAqC,EACrC,GAAW;IAEX,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,OAAO,GAAG,CAAC,EAAE,2BAA2B,CAAA;IACtE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,OAAO,CAAC,eAAe,KAAK,GAAG,CAAC,eAAe,EAAE,CAAC;QACpD,OAAO,OAAO,GAAG,CAAC,EAAE,+BAA+B,OAAO,CAAC,eAAe,SAAS,GAAG,CAAC,eAAe,EAAE,CAAA;IAC1G,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;QACtC,OAAO,OAAO,GAAG,CAAC,EAAE,2CAA2C,CAAA;IACjE,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -1,12 +1,34 @@
1
+ import type { AccountFlushReport, AccountRefreshOptions, AccountRefreshOutcome, AccountRepository, AccountRepositoryFailure, AccountRepositoryRead, AccountRow, RowRef } from './account-repository-types.ts';
2
+ import { type AccountSessionIdentity, type SelectableAccount } from './account-selector.ts';
1
3
  import type { AccountStorageStore } from './account-storage.ts';
2
4
  import type { AccountMetadataV3, AccountSelectionStrategy, AccountStorageV4, CooldownReason, HeaderStyle, AccountModelFamily as ModelFamily, RateLimitStateV3 } from './account-types.ts';
3
5
  import type { OAuthAuthDetails, RefreshParts } from './auth-types.ts';
4
6
  import { type Fingerprint, type FingerprintVersion } from './fingerprint.ts';
5
7
  import { type QuotaGroup, type QuotaGroupSummary } from './quota-types.ts';
8
+ import { HealthScoreTracker, TokenBucketTracker } from './rotation.ts';
6
9
  export type { AccountSelectionStrategy, CooldownReason, HeaderStyle, ModelFamily, };
7
10
  export interface AccountManagerOptions {
8
- store: AccountStorageStore;
11
+ /**
12
+ * The pre-store pool file's store. Exactly one of `store` and
13
+ * `repository` is given.
14
+ */
15
+ store?: AccountStorageStore;
9
16
  storagePath?: string;
17
+ /**
18
+ * The account repository. With it, every persisted change becomes an
19
+ * attributed write on the row the account was loaded from (see
20
+ * `AccountManager.fromRepository`); the pool file is never written.
21
+ */
22
+ repository?: AccountRepository;
23
+ /**
24
+ * The health scores and token balances this manager's selection uses,
25
+ * keyed by its account indexes. A repository-backed manager uses the
26
+ * trackers the caller supplies, or new instances with the default
27
+ * configuration. A pool-file manager without supplied trackers uses the
28
+ * process-wide defaults (`getHealthTracker`, `getTokenTracker`).
29
+ */
30
+ healthTracker?: HealthScoreTracker;
31
+ tokenTracker?: TokenBucketTracker;
10
32
  now?: () => number;
11
33
  random?: () => number;
12
34
  pid?: number;
@@ -15,10 +37,22 @@ export interface AccountManagerOptions {
15
37
  export type { RateLimitReason } from './rotation.ts';
16
38
  export { calculateBackoffMs, computeSoftQuotaCacheTtlMs, parseRateLimitReason, } from './rotation.ts';
17
39
  import type { RateLimitReason } from './rotation.ts';
18
- export type BaseQuotaKey = 'claude' | 'gemini-antigravity' | 'gemini-cli';
19
- export type QuotaKey = BaseQuotaKey | `${BaseQuotaKey}:${string}`;
20
- export interface ManagedAccount {
40
+ export type { AccountSessionIdentity, BaseQuotaKey, QuotaKey, } from './account-selector.ts';
41
+ export { resolveQuotaGroup } from './account-selector.ts';
42
+ /**
43
+ * A local pool account: the selection fields of `SelectableAccount` plus the
44
+ * credential and records only this manager reads. The selector holds these
45
+ * objects but never reads their credential fields.
46
+ */
47
+ export interface ManagedAccount extends SelectableAccount {
21
48
  index: number;
49
+ /**
50
+ * The repository row and credential this account was loaded from. Every
51
+ * write about the account is fenced on it, so a write decided for a
52
+ * credential that was since replaced or removed never lands on its
53
+ * successor. Absent for accounts loaded from the pre-store pool file.
54
+ */
55
+ ref?: RowRef;
22
56
  email?: string;
23
57
  label?: string;
24
58
  addedAt: number;
@@ -43,7 +77,7 @@ export interface ManagedAccount {
43
77
  /** Timestamp of last failure for TTL-based reset of consecutiveFailures */
44
78
  lastFailureTime?: number;
45
79
  /** Per-account device fingerprint for rate limit mitigation */
46
- fingerprint?: import('./fingerprint').Fingerprint;
80
+ fingerprint?: Fingerprint;
47
81
  /** History of previous fingerprints for this account */
48
82
  fingerprintHistory?: FingerprintVersion[];
49
83
  /** Cached quota data from last checkAccountsQuota() call */
@@ -78,22 +112,28 @@ export interface ManagedAccount {
78
112
  };
79
113
  }
80
114
  /**
81
- * Resolve the quota group for soft quota checks.
82
- *
83
- * When a model string is available we use the model-registry lookup first,
84
- * then fall back to substring matching. When model is null/undefined we
85
- * fall back based on family:
86
- * - Claude → "non-gemini" quota group
87
- * - Gemini → "gemini" quota group
88
- *
89
- * @param family - The model family ("claude" | "gemini")
90
- * @param model - Optional model string for precise resolution
91
- * @returns The QuotaGroup to use for soft quota checks
115
+ * Thrown by a save, flush or dispose of a repository-backed manager when a
116
+ * write failed. `message` and `failure` are the first failure; `report`
117
+ * holds every failure the repository reported while draining.
92
118
  */
93
- export declare function resolveQuotaGroup(family: ModelFamily, model?: string | null): QuotaGroup;
94
- export interface AccountSessionIdentity {
95
- id: string;
96
- parentId?: string | null;
119
+ export declare class AccountManagerPersistError extends Error {
120
+ readonly failure: AccountRepositoryFailure;
121
+ readonly report: AccountFlushReport;
122
+ constructor(failure: AccountRepositoryFailure, report: AccountFlushReport);
123
+ }
124
+ /**
125
+ * An account handed to a quota check. In memory only: `rowRef` is never
126
+ * written to the pool file, provider metadata, the sidebar or logs.
127
+ */
128
+ export interface AccountQuotaTarget extends AccountMetadataV3 {
129
+ /**
130
+ * The repository row and credential the account was loaded under, as it
131
+ * was when the target was taken. A quota reading for this target is
132
+ * recorded against exactly this ref, so one taken before the credential
133
+ * was replaced or the row removed is refused, not attached to its
134
+ * successor. Absent only for accounts of a pool-file manager.
135
+ */
136
+ readonly rowRef?: RowRef;
97
137
  }
98
138
  /**
99
139
  * In-memory multi-account manager with sticky account selection.
@@ -102,44 +142,175 @@ export interface AccountSessionIdentity {
102
142
  * Rate limits are tracked per-model-family (claude/gemini) so an account
103
143
  * rate-limited for Claude can still be used for Gemini.
104
144
  *
105
- * Source of truth for the pool is `antigravity-accounts.json`.
145
+ * Persists either to the pre-store pool file `antigravity-accounts.json`
146
+ * (whole-pool snapshots through an `AccountStorageStore`) or, when built with
147
+ * `fromRepository`, to the account repository, where every change is an
148
+ * attributed write on the row and credential the account was loaded from.
106
149
  */
107
150
  export declare class AccountManager {
108
- private accounts;
109
- private cursorByFamily;
110
- private currentAccountIndexByFamily;
111
- private sessionOffsetApplied;
112
- private lastToastAccountIndex;
113
- private lastToastTime;
151
+ /**
152
+ * Owns all of this manager's selection state: its accounts, the
153
+ * selection, cursors, session pins, trackers, toast and usage counts.
154
+ * The manager itself handles credentials and persistence.
155
+ */
156
+ private readonly selection;
157
+ /**
158
+ * The selector's accounts in pool order: a view of its array, not a copy
159
+ * and not a second list.
160
+ */
161
+ private get accounts();
114
162
  private savePending;
115
163
  private saveTimeout;
116
164
  private saveInFlight;
117
165
  private disposed;
118
166
  private savePromiseResolvers;
119
- private sessionStartTime;
120
- private sessionRequestCounts;
121
- private sessionUsedAccounts;
122
- private requestSessionStates;
123
167
  private readonly store;
168
+ private readonly repository;
169
+ /** Coalesced absolute-state writes per repository credential. */
170
+ private pendingRowWrites;
171
+ /** Latest selection per routing target, written at the next save. */
172
+ private pendingSelections;
124
173
  private readonly storagePath;
174
+ /** A promise chain that applies reloads in request order. */
175
+ private reloading;
125
176
  private readonly onDiagnostic;
126
177
  private readonly now;
127
- private readonly random;
128
- private readonly pid;
129
178
  constructor(authFallback: OAuthAuthDetails | undefined, stored: AccountStorageV4 | null | undefined, options: AccountManagerOptions);
179
+ /**
180
+ * Where a repository-backed manager's selector reports transitions. Each
181
+ * becomes a write attributed to the exact account it was decided for.
182
+ * Rate limits, cooldowns, switches, `lastUsed` and selections are queued
183
+ * and coalesced until the next save; request counts, enabled flags,
184
+ * access verdicts and fingerprints are written immediately.
185
+ */
186
+ private repositorySink;
187
+ /**
188
+ * A manager over a ready repository read. Rows with missing or unsafe
189
+ * credentials, or absent/dropped provider metadata, are excluded from
190
+ * serving and reported through `onDiagnostic`. Stored row references
191
+ * choose the active account; legacy numeric positions in the account list
192
+ * are used only when no stored reference selects an admitted row.
193
+ */
194
+ static fromRepository(read: AccountRepositoryRead, options: Omit<AccountManagerOptions, 'store' | 'storagePath' | 'repository'> & {
195
+ repository: AccountRepository;
196
+ }): AccountManager;
197
+ /**
198
+ * The account a ready repository row describes, or undefined (reported
199
+ * through `onDiagnostic`) for a row that cannot be routed to. `fingerprint`
200
+ * says whether the stored fingerprint was kept, generated because the row
201
+ * had none, or brought to the current runtime version.
202
+ */
203
+ private accountFromRow;
204
+ /** The stored selection's index for `family` among `accounts`. */
205
+ private routedIndex;
206
+ private loadRepositoryRows;
207
+ /**
208
+ * Brings a repository-backed manager up to date with a newer ready read.
209
+ *
210
+ * Accounts are matched by their exact ref (row id, credential epoch and
211
+ * identity, absence included), never by position. An account whose ref is
212
+ * unchanged stays the same object, with its ref object, its session pins,
213
+ * health, token balance and the other in-memory state; only what the read
214
+ * stores is refreshed, newest evidence winning (see `refreshFromRow`). The
215
+ * ref an account is matched under is the one it holds now, so an account
216
+ * this manager refreshed through `refreshAccount` is matched under its
217
+ * successor ref and keeps its pins. A row whose credential was replaced or
218
+ * re-added by anything else, or that is new, becomes a new account. An
219
+ * account the read no longer holds under its ref leaves the manager: pins
220
+ * and selections on it are dropped, writes still queued for it are
221
+ * discarded, and any later write about the old object is ignored rather
222
+ * than sent. A read that is not ready throws and leaves the manager as it
223
+ * was.
224
+ *
225
+ * This method applies the read it is given and does not flush or read
226
+ * itself. The caller must flush this manager's queued writes before
227
+ * taking the read, and must apply reads in the order they were taken: an
228
+ * older read applied after a newer one would bring back accounts and refs
229
+ * the pool no longer holds (the store's ref fences still refuse their
230
+ * writes). `refreshFromRepository` does all of this.
231
+ */
232
+ reloadFromRepository(read: AccountRepositoryRead): void;
233
+ /**
234
+ * Flushes this manager's queued writes, takes a fresh read of the
235
+ * repository and applies it with `reloadFromRepository`. Calls run one at
236
+ * a time in the order they were made, so a later call always applies a
237
+ * read taken after the earlier one's. A flush failure is thrown before
238
+ * anything is read; a read that is not ready throws and changes nothing.
239
+ */
240
+ refreshFromRepository(): Promise<void>;
241
+ /**
242
+ * Refreshes an unchanged account's stored fields from a newer read,
243
+ * keeping what this manager knows to be newer: the later `lastUsed`,
244
+ * access token and evidence times (quota, tier, access verdicts), the
245
+ * later reset of each rate limit, a cooldown or switch it has queued but
246
+ * not yet written, a rate-limit clear it has queued, and request counts
247
+ * of the later day (the larger count per family on the same day). A
248
+ * fingerprint the read lacks keeps the one this manager generated.
249
+ */
250
+ private refreshFromRow;
251
+ /**
252
+ * Adopt one current row with the selected account's exact row ID,
253
+ * credential epoch and authenticated identity after its bearer changes.
254
+ * General reloads keep the token with the later expiry; here the stored
255
+ * token and expiry always win. Keep selection, request counts, and pending
256
+ * rate-limit/cooldown observations attributed to that unchanged row ref.
257
+ * This writes nothing and cannot restore missing provider metadata.
258
+ */
259
+ adoptCurrentRow(account: ManagedAccount, row: AccountRow): boolean;
260
+ /**
261
+ * Starts one attributed repository write about `account`. Its failure is
262
+ * reported here and kept by the repository for the next flush, which
263
+ * decides whether a save fails.
264
+ */
265
+ private dispatch;
266
+ /**
267
+ * A write about an account that left the manager at a reload (its
268
+ * credential was replaced or its row removed) is not sent: it was decided
269
+ * for a credential the pool no longer holds under this manager.
270
+ */
271
+ private ignoreStale;
272
+ /** Queues an absolute-state change of `account` for the next save. */
273
+ private queueRowWrite;
274
+ /** Merges a write that met lock contention back into the queue. */
275
+ private requeueRowWrite;
276
+ /**
277
+ * Queues the pool-wide selection of `family` for the next save. Claude's
278
+ * selection is also recorded as the `active` target, the single active
279
+ * account the pool file kept before it tracked families separately.
280
+ */
281
+ private queueSelection;
282
+ private persistFingerprint;
283
+ private persistAccessVerdict;
284
+ /** Starts every queued coalesced write. */
285
+ private dispatchQueuedWrites;
286
+ /**
287
+ * Starts the queued writes and waits until the repository has drained
288
+ * every write, including the ones started immediately (usage, access,
289
+ * removal). Throws `AccountManagerPersistError` for the first failure that
290
+ * is not tolerated; every failure is reported through `onDiagnostic`.
291
+ */
292
+ private flushRepositoryWrites;
293
+ /**
294
+ * Refreshes the account's credential through the repository: the only
295
+ * path by which a successor token is stored. A rotation updates the
296
+ * account's bearer and ref (an identity learnt by the refresh is part of
297
+ * it) and reads the committed refresh token back; a contradicted identity
298
+ * disables the account in memory, as the store disabled its row.
299
+ */
300
+ refreshAccount(account: ManagedAccount, options?: AccountRefreshOptions): Promise<AccountRefreshOutcome>;
301
+ /**
302
+ * The health scores this manager selects with, keyed by its current
303
+ * account indexes. Record request outcomes here, not in the process-wide
304
+ * tracker, for a repository-backed manager.
305
+ */
306
+ get healthTracker(): HealthScoreTracker;
307
+ /** The token balances this manager selects with; see `healthTracker`. */
308
+ get tokenTracker(): TokenBucketTracker;
130
309
  getAccountCount(): number;
131
310
  getTotalAccountCount(): number;
132
311
  getEnabledAccounts(): ManagedAccount[];
133
- private getEffectiveSoftQuotaThreshold;
312
+ /** Copies of the accounts, each with its own credential parts and rate limits. */
134
313
  getAccountsSnapshot(): ManagedAccount[];
135
- private getRequestSessionState;
136
- private pruneRequestSessionStates;
137
- private getActiveIndex;
138
- private setActiveIndex;
139
- private getCursor;
140
- private advanceCursor;
141
- private getUsedAccounts;
142
- private preferAccountOutsideParent;
143
314
  deleteSessionState(sessionId: string): void;
144
315
  getCurrentAccountForFamily(family: ModelFamily, identity?: AccountSessionIdentity): ManagedAccount | null;
145
316
  /**
@@ -218,6 +389,7 @@ export declare class AccountManager {
218
389
  getAccounts(): ManagedAccount[];
219
390
  private buildStorageSnapshot;
220
391
  saveToDisk(): Promise<void>;
392
+ private requireStore;
221
393
  /**
222
394
  * Persist via full-file replace (no merge). Required after destructive
223
395
  * operations (account removal) so a deleted account is not resurrected by
@@ -227,6 +399,12 @@ export declare class AccountManager {
227
399
  requestSaveToDisk(): void;
228
400
  flushSaveToDisk(): Promise<void>;
229
401
  dispose(): Promise<void>;
402
+ /**
403
+ * Cancels a scheduled save and drains every repository write now. A
404
+ * failure rejects every waiting flush and is thrown to the caller.
405
+ */
406
+ private drainRepository;
407
+ private settleRepositoryDrain;
230
408
  private executeSave;
231
409
  /**
232
410
  * Regenerate fingerprint for an account, saving the old one to history.
@@ -311,7 +489,14 @@ export declare class AccountManager {
311
489
  }>;
312
490
  };
313
491
  isAccountOverSoftQuota(account: ManagedAccount, family: ModelFamily, thresholdPercent: number, cacheTtlMs: number, model?: string | null): boolean;
314
- getAccountsForQuotaCheck(): AccountMetadataV3[];
492
+ /**
493
+ * The accounts a quota check should cover. For a repository-backed
494
+ * manager each target carries the ref its account is loaded under,
495
+ * captured now, before any quota work starts; an account without a ref
496
+ * has no row to attribute a reading to and is left out rather than
497
+ * matched by position, email or token.
498
+ */
499
+ getAccountsForQuotaCheck(): AccountQuotaTarget[];
315
500
  getOldestQuotaCacheAge(): number | null;
316
501
  areAllAccountsOverSoftQuota(family: ModelFamily, thresholdPercent: number, cacheTtlMs: number, model?: string | null): boolean;
317
502
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"account-manager.d.ts","sourceRoot":"","sources":["../src/account-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account-manager.d.ts","sourceRoot":"","sources":["../src/account-manager.ts"],"names":[],"mappings":"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"}