oc-codex-multi-auth 6.21.0 → 6.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 (174) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +729 -571
  3. package/assets/icon.svg +7 -7
  4. package/assets/opencode-logo-ornate-dark.svg +18 -18
  5. package/assets/readme-hero.svg +31 -31
  6. package/config/README.md +177 -177
  7. package/config/minimal-opencode.json +14 -14
  8. package/config/opencode-legacy.json +1496 -1496
  9. package/config/opencode-modern.json +555 -555
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +291 -53
  12. package/dist/index.js.map +1 -1
  13. package/dist/lib/account-display.d.ts +46 -0
  14. package/dist/lib/account-display.d.ts.map +1 -1
  15. package/dist/lib/account-display.js +260 -0
  16. package/dist/lib/account-display.js.map +1 -1
  17. package/dist/lib/accounts.d.ts +4 -0
  18. package/dist/lib/accounts.d.ts.map +1 -1
  19. package/dist/lib/accounts.js +20 -15
  20. package/dist/lib/accounts.js.map +1 -1
  21. package/dist/lib/auth/login-runner.d.ts.map +1 -1
  22. package/dist/lib/auth/login-runner.js +79 -2
  23. package/dist/lib/auth/login-runner.js.map +1 -1
  24. package/dist/lib/auto-update-checker.d.ts +17 -1
  25. package/dist/lib/auto-update-checker.d.ts.map +1 -1
  26. package/dist/lib/auto-update-checker.js +49 -3
  27. package/dist/lib/auto-update-checker.js.map +1 -1
  28. package/dist/lib/cli.d.ts +1 -0
  29. package/dist/lib/cli.d.ts.map +1 -1
  30. package/dist/lib/cli.js +9 -3
  31. package/dist/lib/cli.js.map +1 -1
  32. package/dist/lib/codex-usage.d.ts +4 -3
  33. package/dist/lib/codex-usage.d.ts.map +1 -1
  34. package/dist/lib/codex-usage.js +13 -11
  35. package/dist/lib/codex-usage.js.map +1 -1
  36. package/dist/lib/config.d.ts +75 -0
  37. package/dist/lib/config.d.ts.map +1 -1
  38. package/dist/lib/config.js +152 -1
  39. package/dist/lib/config.js.map +1 -1
  40. package/dist/lib/context-overflow.js +10 -10
  41. package/dist/lib/desktop-notifications.js +6 -6
  42. package/dist/lib/oauth-success.js +202 -202
  43. package/dist/lib/plan-allotment.d.ts +72 -0
  44. package/dist/lib/plan-allotment.d.ts.map +1 -0
  45. package/dist/lib/plan-allotment.js +142 -0
  46. package/dist/lib/plan-allotment.js.map +1 -0
  47. package/dist/lib/plugin-origin.d.ts +77 -0
  48. package/dist/lib/plugin-origin.d.ts.map +1 -0
  49. package/dist/lib/plugin-origin.js +301 -0
  50. package/dist/lib/plugin-origin.js.map +1 -0
  51. package/dist/lib/prompts/codex-opencode-bridge.js +67 -67
  52. package/dist/lib/prompts/codex.js +75 -75
  53. package/dist/lib/quota-display.d.ts +40 -0
  54. package/dist/lib/quota-display.d.ts.map +1 -0
  55. package/dist/lib/quota-display.js +45 -0
  56. package/dist/lib/quota-display.js.map +1 -0
  57. package/dist/lib/quota-notifications.d.ts +2 -1
  58. package/dist/lib/quota-notifications.d.ts.map +1 -1
  59. package/dist/lib/quota-notifications.js +34 -14
  60. package/dist/lib/quota-notifications.js.map +1 -1
  61. package/dist/lib/quota-overview.d.ts +253 -0
  62. package/dist/lib/quota-overview.d.ts.map +1 -0
  63. package/dist/lib/quota-overview.js +707 -0
  64. package/dist/lib/quota-overview.js.map +1 -0
  65. package/dist/lib/request/retry-budget.d.ts +26 -0
  66. package/dist/lib/request/retry-budget.d.ts.map +1 -1
  67. package/dist/lib/request/retry-budget.js +43 -0
  68. package/dist/lib/request/retry-budget.js.map +1 -1
  69. package/dist/lib/schemas.d.ts +67 -0
  70. package/dist/lib/schemas.d.ts.map +1 -1
  71. package/dist/lib/schemas.js +53 -0
  72. package/dist/lib/schemas.js.map +1 -1
  73. package/dist/lib/storage/backup.d.ts +33 -0
  74. package/dist/lib/storage/backup.d.ts.map +1 -1
  75. package/dist/lib/storage/backup.js +43 -7
  76. package/dist/lib/storage/backup.js.map +1 -1
  77. package/dist/lib/storage/credential-snapshots.d.ts +78 -0
  78. package/dist/lib/storage/credential-snapshots.d.ts.map +1 -0
  79. package/dist/lib/storage/credential-snapshots.js +302 -0
  80. package/dist/lib/storage/credential-snapshots.js.map +1 -0
  81. package/dist/lib/storage/export-import.d.ts.map +1 -1
  82. package/dist/lib/storage/export-import.js +7 -0
  83. package/dist/lib/storage/export-import.js.map +1 -1
  84. package/dist/lib/storage/flagged.d.ts.map +1 -1
  85. package/dist/lib/storage/flagged.js +23 -1
  86. package/dist/lib/storage/flagged.js.map +1 -1
  87. package/dist/lib/storage/load-save.d.ts +4 -0
  88. package/dist/lib/storage/load-save.d.ts.map +1 -1
  89. package/dist/lib/storage/load-save.js +50 -0
  90. package/dist/lib/storage/load-save.js.map +1 -1
  91. package/dist/lib/storage/paths.d.ts +1 -0
  92. package/dist/lib/storage/paths.d.ts.map +1 -1
  93. package/dist/lib/storage/paths.js +1 -1
  94. package/dist/lib/storage/paths.js.map +1 -1
  95. package/dist/lib/storage/test-home-guard.d.ts +35 -0
  96. package/dist/lib/storage/test-home-guard.d.ts.map +1 -0
  97. package/dist/lib/storage/test-home-guard.js +59 -0
  98. package/dist/lib/storage/test-home-guard.js.map +1 -0
  99. package/dist/lib/tools/codex-dashboard.d.ts.map +1 -1
  100. package/dist/lib/tools/codex-dashboard.js +3 -2
  101. package/dist/lib/tools/codex-dashboard.js.map +1 -1
  102. package/dist/lib/tools/codex-doctor.d.ts.map +1 -1
  103. package/dist/lib/tools/codex-doctor.js +16 -0
  104. package/dist/lib/tools/codex-doctor.js.map +1 -1
  105. package/dist/lib/tools/codex-health.d.ts.map +1 -1
  106. package/dist/lib/tools/codex-health.js +10 -2
  107. package/dist/lib/tools/codex-health.js.map +1 -1
  108. package/dist/lib/tools/codex-label.d.ts.map +1 -1
  109. package/dist/lib/tools/codex-label.js +1 -0
  110. package/dist/lib/tools/codex-label.js.map +1 -1
  111. package/dist/lib/tools/codex-limits.d.ts.map +1 -1
  112. package/dist/lib/tools/codex-limits.js +13 -9
  113. package/dist/lib/tools/codex-limits.js.map +1 -1
  114. package/dist/lib/tools/codex-list.d.ts.map +1 -1
  115. package/dist/lib/tools/codex-list.js +28 -3
  116. package/dist/lib/tools/codex-list.js.map +1 -1
  117. package/dist/lib/tools/codex-note.d.ts.map +1 -1
  118. package/dist/lib/tools/codex-note.js +4 -1
  119. package/dist/lib/tools/codex-note.js.map +1 -1
  120. package/dist/lib/tools/codex-pool.d.ts.map +1 -1
  121. package/dist/lib/tools/codex-pool.js +6 -2
  122. package/dist/lib/tools/codex-pool.js.map +1 -1
  123. package/dist/lib/tools/codex-refresh.d.ts.map +1 -1
  124. package/dist/lib/tools/codex-refresh.js +4 -1
  125. package/dist/lib/tools/codex-refresh.js.map +1 -1
  126. package/dist/lib/tools/codex-remove.d.ts.map +1 -1
  127. package/dist/lib/tools/codex-remove.js +1 -0
  128. package/dist/lib/tools/codex-remove.js.map +1 -1
  129. package/dist/lib/tools/codex-reset.d.ts.map +1 -1
  130. package/dist/lib/tools/codex-reset.js +13 -7
  131. package/dist/lib/tools/codex-reset.js.map +1 -1
  132. package/dist/lib/tools/codex-status.d.ts.map +1 -1
  133. package/dist/lib/tools/codex-status.js +25 -2
  134. package/dist/lib/tools/codex-status.js.map +1 -1
  135. package/dist/lib/tools/codex-switch.d.ts.map +1 -1
  136. package/dist/lib/tools/codex-switch.js +1 -0
  137. package/dist/lib/tools/codex-switch.js.map +1 -1
  138. package/dist/lib/tools/codex-tag.d.ts.map +1 -1
  139. package/dist/lib/tools/codex-tag.js +4 -1
  140. package/dist/lib/tools/codex-tag.js.map +1 -1
  141. package/dist/lib/tools/codex-warm.d.ts.map +1 -1
  142. package/dist/lib/tools/codex-warm.js +1 -0
  143. package/dist/lib/tools/codex-warm.js.map +1 -1
  144. package/dist/lib/tools/index.d.ts +9 -0
  145. package/dist/lib/tools/index.d.ts.map +1 -1
  146. package/dist/lib/tools/index.js.map +1 -1
  147. package/dist/lib/tui-quota-cache.d.ts +35 -0
  148. package/dist/lib/tui-quota-cache.d.ts.map +1 -1
  149. package/dist/lib/tui-quota-cache.js +76 -11
  150. package/dist/lib/tui-quota-cache.js.map +1 -1
  151. package/dist/lib/tui-quota-overview.d.ts +55 -0
  152. package/dist/lib/tui-quota-overview.d.ts.map +1 -0
  153. package/dist/lib/tui-quota-overview.js +209 -0
  154. package/dist/lib/tui-quota-overview.js.map +1 -0
  155. package/dist/lib/tui-status.d.ts +55 -0
  156. package/dist/lib/tui-status.d.ts.map +1 -1
  157. package/dist/lib/tui-status.js +155 -14
  158. package/dist/lib/tui-status.js.map +1 -1
  159. package/dist/lib/ui/auth-menu.d.ts +2 -0
  160. package/dist/lib/ui/auth-menu.d.ts.map +1 -1
  161. package/dist/lib/ui/auth-menu.js +10 -6
  162. package/dist/lib/ui/auth-menu.js.map +1 -1
  163. package/dist/tui.d.ts +55 -0
  164. package/dist/tui.d.ts.map +1 -1
  165. package/dist/tui.js +511 -29
  166. package/dist/tui.js.map +1 -1
  167. package/package.json +155 -155
  168. package/scripts/audit-dev-allowlist.js +114 -114
  169. package/scripts/clean-dist.js +27 -27
  170. package/scripts/copy-oauth-success.js +47 -47
  171. package/scripts/install-oc-codex-multi-auth-core.js +2003 -1499
  172. package/scripts/install-oc-codex-multi-auth.js +37 -37
  173. package/scripts/test-all-models.sh +260 -260
  174. package/scripts/validate-model-map.sh +97 -97
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Pre-write snapshots of the credential stores.
3
+ *
4
+ * The stores are the JSON files holding live refresh tokens: the V3 account
5
+ * store and the flagged-accounts file beside it, which retains quarantined
6
+ * records' refresh tokens so they can be restored later. Anything that
7
+ * replaces either wholesale — a bad merge, a test run that escaped
8
+ * its sandbox, a partial restore — takes the tokens with it, and a backup old
9
+ * enough to predate the last few refreshes restores accounts whose refresh
10
+ * tokens have since been rotated and are therefore dead. This module keeps a
11
+ * bounded ring of recent snapshots so there is always a *live-token* copy to
12
+ * restore from.
13
+ *
14
+ * Two decisions carry the design:
15
+ *
16
+ * 1. The snapshot captures the document already on disk, taken before the
17
+ * new one replaces it. Snapshotting the incoming document would be
18
+ * useless for the case this exists for: a clobber would simply be
19
+ * snapshotted as a clobber. What is worth keeping is the last good state.
20
+ *
21
+ * 2. Significance is a denylist, not an allowlist. Everything counts as a
22
+ * significant change unless it is explicitly ignored below. A field added
23
+ * to the schema later therefore cannot silently switch snapshots off; the
24
+ * worst it can do is cost one extra snapshot, which is recoverable, where
25
+ * a missing snapshot is not.
26
+ */
27
+ import type { AccountStorageV3 } from "./migrations.js";
28
+ import type { FlaggedAccountStorageV1 } from "./flagged.js";
29
+ /**
30
+ * The documents this module diffs: the V3 account store and the V1
31
+ * flagged-account store. Both are `{ version, accounts }` JSON documents, and
32
+ * the significance projection below reads them generically, so the union is a
33
+ * name for the contract rather than a shape the code depends on. The import
34
+ * is type-only on purpose — `flagged.ts` calls back into this module at
35
+ * runtime.
36
+ */
37
+ export type CredentialStoreDocument = AccountStorageV3 | FlaggedAccountStorageV1;
38
+ /**
39
+ * Filename prefix owned exclusively by this module.
40
+ *
41
+ * `backups/` is shared with `codex-pre-import-backup-*`, `codex-backup-*`,
42
+ * `*.migrated-to-keychain.*` and `pre-global-migration-*`. Retention deletes
43
+ * strictly by this prefix, because deleting one of those would be a
44
+ * data-loss bug inside a feature whose only purpose is preventing data loss.
45
+ */
46
+ export declare const CREDENTIAL_SNAPSHOT_PREFIX = "codex-credential-snapshot";
47
+ export declare function isCredentialSnapshotFileName(name: string): boolean;
48
+ export declare function isSignificantStorageChange(previousContent: string, next: CredentialStoreDocument): boolean;
49
+ /**
50
+ * Delete all but the newest `maxCount` snapshots.
51
+ *
52
+ * `maxCount <= 0` keeps every snapshot; turning the feature off is the
53
+ * boolean setting's job, not a magic zero.
54
+ */
55
+ export declare function pruneCredentialSnapshots(backupDirectory: string, maxCount: number): Promise<void>;
56
+ /**
57
+ * Preserve the document currently at `storagePath` before it is replaced.
58
+ *
59
+ * `next` is the document about to be written, or `null` when the store is
60
+ * about to be deleted outright — deletion is unconditionally significant.
61
+ *
62
+ * Callers must already hold the storage lock, so the snapshot is consistent
63
+ * with the write it precedes.
64
+ */
65
+ export declare function snapshotCredentialStoreBeforeWrite(storagePath: string, next: CredentialStoreDocument | null): Promise<void>;
66
+ /**
67
+ * {@link snapshotCredentialStoreBeforeWrite}, with every failure downgraded to
68
+ * a warning.
69
+ *
70
+ * A snapshot is a safety net, never a precondition. Letting a transient disk
71
+ * error fail the write it precedes would break a token refresh, and therefore
72
+ * the user's live sessions, to protect a copy of the file — strictly worse
73
+ * than having no snapshot. The one exception is the test-home guard: that
74
+ * exists to stop a test run writing over real credentials, so swallowing it
75
+ * would disarm it.
76
+ */
77
+ export declare function trySnapshotCredentialStoreBeforeWrite(storagePath: string, next: CredentialStoreDocument | null): Promise<void>;
78
+ //# sourceMappingURL=credential-snapshots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-snapshots.d.ts","sourceRoot":"","sources":["../../../lib/storage/credential-snapshots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAiBH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAI5D;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,GAAG,uBAAuB,CAAC;AAEjF;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AAoCtE,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElE;AAiED,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAWT;AAmBD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiDf;AAED;;;;;;;;GAQG;AACH,wBAAsB,kCAAkC,CACtD,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,uBAAuB,GAAG,IAAI,GACnC,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qCAAqC,CACzD,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,uBAAuB,GAAG,IAAI,GACnC,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -0,0 +1,302 @@
1
+ /**
2
+ * Pre-write snapshots of the credential stores.
3
+ *
4
+ * The stores are the JSON files holding live refresh tokens: the V3 account
5
+ * store and the flagged-accounts file beside it, which retains quarantined
6
+ * records' refresh tokens so they can be restored later. Anything that
7
+ * replaces either wholesale — a bad merge, a test run that escaped
8
+ * its sandbox, a partial restore — takes the tokens with it, and a backup old
9
+ * enough to predate the last few refreshes restores accounts whose refresh
10
+ * tokens have since been rotated and are therefore dead. This module keeps a
11
+ * bounded ring of recent snapshots so there is always a *live-token* copy to
12
+ * restore from.
13
+ *
14
+ * Two decisions carry the design:
15
+ *
16
+ * 1. The snapshot captures the document already on disk, taken before the
17
+ * new one replaces it. Snapshotting the incoming document would be
18
+ * useless for the case this exists for: a clobber would simply be
19
+ * snapshotted as a clobber. What is worth keeping is the last good state.
20
+ *
21
+ * 2. Significance is a denylist, not an allowlist. Everything counts as a
22
+ * significant change unless it is explicitly ignored below. A field added
23
+ * to the schema later therefore cannot silently switch snapshots off; the
24
+ * worst it can do is cost one extra snapshot, which is recoverable, where
25
+ * a missing snapshot is not.
26
+ */
27
+ import { promises as fs } from "node:fs";
28
+ import { join } from "node:path";
29
+ import { loadPluginConfig, getCredentialSnapshots, getCredentialSnapshotsMaxCount } from "../config.js";
30
+ import { createLogger } from "../logger.js";
31
+ import { createTimestampedBackupPathFor, getBackupDirectory, writeBackupFileContent, } from "./backup.js";
32
+ import { StorageError } from "./errors.js";
33
+ import { isKeychainOptInEnabled } from "./keychain.js";
34
+ import { assertTestRunNeverTouchesRealHome, TEST_HOME_ESCAPE_CODE, } from "./test-home-guard.js";
35
+ const log = createLogger("credential-snapshots");
36
+ /**
37
+ * Filename prefix owned exclusively by this module.
38
+ *
39
+ * `backups/` is shared with `codex-pre-import-backup-*`, `codex-backup-*`,
40
+ * `*.migrated-to-keychain.*` and `pre-global-migration-*`. Retention deletes
41
+ * strictly by this prefix, because deleting one of those would be a
42
+ * data-loss bug inside a feature whose only purpose is preventing data loss.
43
+ */
44
+ export const CREDENTIAL_SNAPSHOT_PREFIX = "codex-credential-snapshot";
45
+ /**
46
+ * Document-level fields that never, on their own, justify a snapshot.
47
+ *
48
+ * The rotation cursor moves on essentially every request under the default
49
+ * hybrid strategy. Snapshotting on it would churn the whole ring away within
50
+ * minutes and leave nothing but cursor movements to restore from.
51
+ */
52
+ const IGNORED_ROOT_FIELDS = new Set([
53
+ "activeIndex",
54
+ "activeIndexByFamily",
55
+ ]);
56
+ /**
57
+ * Per-account fields that never, on their own, justify a snapshot.
58
+ *
59
+ * All of it is scheduling churn: it changes constantly, it is re-derived from
60
+ * upstream on the next request, and none of it is recoverable state. Note what
61
+ * is deliberately absent — `refreshToken`, `accessToken`, `expiresAt`,
62
+ * `tokenRotatedAt` — so every token refresh produces a snapshot. That is the
63
+ * case that matters most: a snapshot whose tokens are stale restores accounts
64
+ * that cannot authenticate.
65
+ */
66
+ const IGNORED_ACCOUNT_FIELDS = new Set([
67
+ "lastUsed",
68
+ "lastSwitchReason",
69
+ "rateLimitResetTimes",
70
+ "rateLimitResetTime",
71
+ "coolingDownUntil",
72
+ "cooldownReason",
73
+ "quotaExhaustedUntil",
74
+ "quotaExhaustedStampAt",
75
+ "quotaExhaustedClearedAt",
76
+ ]);
77
+ export function isCredentialSnapshotFileName(name) {
78
+ return name.startsWith(`${CREDENTIAL_SNAPSHOT_PREFIX}-`) && name.endsWith(".json");
79
+ }
80
+ /**
81
+ * Sort keys and drop `undefined`-valued ones so two documents with identical
82
+ * content compare equal as strings.
83
+ *
84
+ * This is load-bearing rather than tidiness: the previous document comes from
85
+ * `JSON.parse`, so its key order is the file's, while the incoming one is
86
+ * built in code. Comparing their raw serializations would report a difference
87
+ * on every single write. Dropping `undefined` matches `JSON.stringify`, which
88
+ * omits those keys when the document is written, so an in-memory
89
+ * `{ email: undefined }` and an on-disk absent `email` are the same state.
90
+ */
91
+ function canonicalize(value) {
92
+ if (Array.isArray(value))
93
+ return value.map(canonicalize);
94
+ if (value === null || typeof value !== "object")
95
+ return value;
96
+ const source = value;
97
+ const result = {};
98
+ for (const key of Object.keys(source).sort()) {
99
+ const entry = source[key];
100
+ if (entry === undefined)
101
+ continue;
102
+ result[key] = canonicalize(entry);
103
+ }
104
+ return result;
105
+ }
106
+ function projectAccount(account) {
107
+ if (account === null || typeof account !== "object" || Array.isArray(account)) {
108
+ return account;
109
+ }
110
+ const source = account;
111
+ const result = {};
112
+ for (const key of Object.keys(source)) {
113
+ if (IGNORED_ACCOUNT_FIELDS.has(key))
114
+ continue;
115
+ result[key] = source[key];
116
+ }
117
+ return result;
118
+ }
119
+ /**
120
+ * The document reduced to the parts a snapshot exists to preserve.
121
+ *
122
+ * Accounts are compared position-wise, so a reorder reads as significant. That
123
+ * is the intended bias: an extra snapshot costs one file, a missed one costs
124
+ * the credentials.
125
+ */
126
+ function significantProjection(document) {
127
+ if (document === null || typeof document !== "object" || Array.isArray(document)) {
128
+ return JSON.stringify(canonicalize(document)) ?? "null";
129
+ }
130
+ const source = document;
131
+ const projected = {};
132
+ for (const key of Object.keys(source)) {
133
+ if (IGNORED_ROOT_FIELDS.has(key) || key === "accounts")
134
+ continue;
135
+ projected[key] = source[key];
136
+ }
137
+ const accounts = source.accounts;
138
+ projected.accounts = Array.isArray(accounts) ? accounts.map(projectAccount) : accounts;
139
+ return JSON.stringify(canonicalize(projected)) ?? "null";
140
+ }
141
+ export function isSignificantStorageChange(previousContent, next) {
142
+ let previous;
143
+ try {
144
+ previous = JSON.parse(previousContent);
145
+ }
146
+ catch {
147
+ // A file that no longer parses is precisely the state worth preserving:
148
+ // the write about to happen replaces it, and whatever it held is then gone
149
+ // for good. Treat it as changed so it is captured before that happens.
150
+ return true;
151
+ }
152
+ return significantProjection(previous) !== significantProjection(next);
153
+ }
154
+ /**
155
+ * POSIX-only hardening. Windows has no POSIX mode bits for `fs.chmod` to set,
156
+ * so the restriction is skipped there outright rather than reported as
157
+ * applied — snapshots on Windows rely on the profile directory's ACLs.
158
+ */
159
+ async function restrictDirectoryMode(directory) {
160
+ if (process.platform === "win32")
161
+ return;
162
+ try {
163
+ await fs.chmod(directory, 0o700);
164
+ }
165
+ catch (error) {
166
+ log.warn("Failed to restrict credential snapshot directory to 0700", {
167
+ path: directory,
168
+ error: String(error),
169
+ });
170
+ }
171
+ }
172
+ /**
173
+ * Delete all but the newest `maxCount` snapshots.
174
+ *
175
+ * `maxCount <= 0` keeps every snapshot; turning the feature off is the
176
+ * boolean setting's job, not a magic zero.
177
+ */
178
+ export async function pruneCredentialSnapshots(backupDirectory, maxCount) {
179
+ if (!Number.isFinite(maxCount) || maxCount <= 0)
180
+ return;
181
+ let entries;
182
+ try {
183
+ entries = await fs.readdir(backupDirectory);
184
+ }
185
+ catch {
186
+ return;
187
+ }
188
+ const candidates = entries.filter(isCredentialSnapshotFileName);
189
+ if (candidates.length <= maxCount)
190
+ return;
191
+ const dated = await Promise.all(candidates.map(async (name) => {
192
+ const full = join(backupDirectory, name);
193
+ let mtimeMs = Number.NEGATIVE_INFINITY;
194
+ let isFile = false;
195
+ try {
196
+ const stats = await fs.stat(full);
197
+ mtimeMs = stats.mtimeMs;
198
+ isFile = stats.isFile();
199
+ }
200
+ catch {
201
+ // Vanished between readdir and stat: leave it out rather than racing
202
+ // another process for the unlink.
203
+ }
204
+ return { full, name, mtimeMs, isFile };
205
+ }));
206
+ // Newest first. The embedded timestamp breaks mtime ties, which happens when
207
+ // several snapshots land inside one filesystem timestamp granule.
208
+ const ordered = dated
209
+ .filter((entry) => entry.isFile)
210
+ .sort((a, b) => {
211
+ if (b.mtimeMs !== a.mtimeMs)
212
+ return b.mtimeMs - a.mtimeMs;
213
+ return a.name < b.name ? 1 : a.name > b.name ? -1 : 0;
214
+ });
215
+ for (const stale of ordered.slice(maxCount)) {
216
+ try {
217
+ await fs.unlink(stale.full);
218
+ }
219
+ catch (error) {
220
+ log.warn("Failed to prune credential snapshot", {
221
+ path: stale.full,
222
+ error: String(error),
223
+ });
224
+ }
225
+ }
226
+ }
227
+ /**
228
+ * Preserve the document currently at `storagePath` before it is replaced.
229
+ *
230
+ * `next` is the document about to be written, or `null` when the store is
231
+ * about to be deleted outright — deletion is unconditionally significant.
232
+ *
233
+ * Callers must already hold the storage lock, so the snapshot is consistent
234
+ * with the write it precedes.
235
+ */
236
+ export async function snapshotCredentialStoreBeforeWrite(storagePath, next) {
237
+ const config = loadPluginConfig();
238
+ if (!getCredentialSnapshots(config))
239
+ return;
240
+ // Scoped to the JSON backend, enforced here rather than at each call site.
241
+ // Under the keychain opt-in the authoritative pool lives in the OS keychain,
242
+ // and whatever JSON remains at `storagePath` is a pre-migration or
243
+ // write-fallback artefact. Copying it into `backups/` would put the whole
244
+ // token set in a plaintext file that a user who opted into the keychain
245
+ // asked us not to create, and it would archive a document that is already
246
+ // stale. Every write path - ordinary save, the JSON fallback after a failed
247
+ // keychain write, and `clearAccounts` - goes through here, so one check
248
+ // covers all of them.
249
+ if (isKeychainOptInEnabled())
250
+ return;
251
+ const backupDirectory = getBackupDirectory(storagePath);
252
+ assertTestRunNeverTouchesRealHome(backupDirectory);
253
+ let previousContent;
254
+ try {
255
+ previousContent = await fs.readFile(storagePath, "utf-8");
256
+ }
257
+ catch (error) {
258
+ const code = error.code;
259
+ if (code !== "ENOENT") {
260
+ log.warn("Skipping credential snapshot: existing store is unreadable", {
261
+ path: storagePath,
262
+ error: String(error),
263
+ });
264
+ }
265
+ // No file yet is the ordinary first-write case: there is no previous state
266
+ // to preserve, which is not an error.
267
+ return;
268
+ }
269
+ if (next !== null && !isSignificantStorageChange(previousContent, next))
270
+ return;
271
+ const snapshotPath = createTimestampedBackupPathFor(storagePath, CREDENTIAL_SNAPSHOT_PREFIX);
272
+ await fs.mkdir(backupDirectory, { recursive: true, mode: 0o700 });
273
+ await restrictDirectoryMode(backupDirectory);
274
+ await writeBackupFileContent(snapshotPath, previousContent);
275
+ log.info("Captured credential store snapshot", { path: snapshotPath });
276
+ await pruneCredentialSnapshots(backupDirectory, getCredentialSnapshotsMaxCount(config));
277
+ }
278
+ /**
279
+ * {@link snapshotCredentialStoreBeforeWrite}, with every failure downgraded to
280
+ * a warning.
281
+ *
282
+ * A snapshot is a safety net, never a precondition. Letting a transient disk
283
+ * error fail the write it precedes would break a token refresh, and therefore
284
+ * the user's live sessions, to protect a copy of the file — strictly worse
285
+ * than having no snapshot. The one exception is the test-home guard: that
286
+ * exists to stop a test run writing over real credentials, so swallowing it
287
+ * would disarm it.
288
+ */
289
+ export async function trySnapshotCredentialStoreBeforeWrite(storagePath, next) {
290
+ try {
291
+ await snapshotCredentialStoreBeforeWrite(storagePath, next);
292
+ }
293
+ catch (error) {
294
+ if (error instanceof StorageError && error.code === TEST_HOME_ESCAPE_CODE)
295
+ throw error;
296
+ log.warn("Credential snapshot failed; continuing with the write", {
297
+ path: storagePath,
298
+ error: String(error),
299
+ });
300
+ }
301
+ }
302
+ //# sourceMappingURL=credential-snapshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-snapshots.js","sourceRoot":"","sources":["../../../lib/storage/credential-snapshots.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"export-import.d.ts","sourceRoot":"","sources":["../../../lib/storage/export-import.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsBH;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnF,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,kBAAkB,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAoDD;;;;;;GAMG;AAEH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,CAAC,CAY9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBnF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CA2H/B"}
1
+ {"version":3,"file":"export-import.d.ts","sourceRoot":"","sources":["../../../lib/storage/export-import.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuBH;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnF,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,kBAAkB,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAoDD;;;;;;GAMG;AAEH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,CAAC,CAY9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBnF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAsI/B"}
@@ -12,6 +12,7 @@ import { ACCOUNT_LIMITS } from "../constants.js";
12
12
  import { createLogger } from "../logger.js";
13
13
  import { MODEL_FAMILIES } from "../prompts/codex.js";
14
14
  import { createTimestampedBackupPath, writePreImportBackupFile } from "./backup.js";
15
+ import { isCredentialSnapshotFileName } from "./credential-snapshots.js";
15
16
  import { StorageError } from "./errors.js";
16
17
  import { clampIndex, deduplicateAccountsForStorage, extractActiveKeys, findAccountIndexByIdentityKeys, } from "./identity.js";
17
18
  import { withAccountStorageTransaction } from "./load-save.js";
@@ -121,6 +122,12 @@ export async function importAccounts(filePath, options = {}) {
121
122
  const { resolvedPath, normalized } = await readAndNormalizeImportFile(filePath);
122
123
  const backupMode = options.backupMode ?? "timestamped";
123
124
  const backupPrefix = options.preImportBackupPrefix ?? "codex-pre-import-backup";
125
+ // The credential-snapshot namespace is reserved: a pre-import backup named
126
+ // under it would be silently deleted by snapshot retention.
127
+ if (backupMode !== "none" &&
128
+ isCredentialSnapshotFileName(basename(createTimestampedBackupPath(backupPrefix)))) {
129
+ throw new Error(`Refusing preImportBackupPrefix "${backupPrefix}": it collides with the reserved credential-snapshot namespace`);
130
+ }
124
131
  const { imported: importedCount, total, skipped: skippedCount, backupStatus, backupPath, backupError, } = await withAccountStorageTransaction(async (existing, persist) => {
125
132
  const existingStorage = existing ??
126
133
  {
@@ -1 +1 @@
1
- {"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../../lib/storage/export-import.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../../lib/storage/export-import.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"flagged.d.ts","sourceRoot":"","sources":["../../../lib/storage/flagged.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKzD,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,wBAAwB,EAAE,CAAC;CACtC;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AA2PD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAE5E;AAED;;;GAGG;AACH,wBAAsB,oCAAoC,CAAC,CAAC,EAC1D,OAAO,EAAE,CACP,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,KACzD,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzF;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAW1D"}
1
+ {"version":3,"file":"flagged.d.ts","sourceRoot":"","sources":["../../../lib/storage/flagged.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAyBH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKzD,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,wBAAwB,EAAE,CAAC;CACtC;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAmQD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAE5E;AAED;;;GAGG;AACH,wBAAsB,oCAAoC,CAAC,CAAC,EAC1D,OAAO,EAAE,CACP,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,KACzD,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzF;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsB1D"}
@@ -13,8 +13,11 @@ import { FLAGGED_ACCOUNTS_FILE_NAME, LEGACY_BLOCKED_ACCOUNTS_FILE_NAME, LEGACY_F
13
13
  import { createLogger } from "../logger.js";
14
14
  import { extractAccountUserId } from "../auth/token-utils.js";
15
15
  import { renameWithWindowsRetry } from "./atomic-write.js";
16
+ import { trySnapshotCredentialStoreBeforeWrite } from "./credential-snapshots.js";
17
+ import { StorageError } from "./errors.js";
16
18
  import { getWorkspaceIdentityKey, isRecord } from "./identity.js";
17
19
  import { getStoragePath, getCurrentProjectStorageKey, withStorageLock } from "./state.js";
20
+ import { assertTestRunNeverTouchesRealHome, TEST_HOME_ESCAPE_CODE, } from "./test-home-guard.js";
18
21
  import { isKeychainOptInEnabled, readFlaggedFromKeychain, writeFlaggedToKeychain, } from "./keychain.js";
19
22
  import { withStorageTransaction } from "./transaction-lock.js";
20
23
  const log = createLogger("storage");
@@ -199,6 +202,7 @@ async function loadFlaggedAccountsUnlocked(saveUnlocked) {
199
202
  }
200
203
  async function saveFlaggedAccountsUnlocked(storage) {
201
204
  const path = getFlaggedAccountsPath();
205
+ assertTestRunNeverTouchesRealHome(path);
202
206
  const normalized = normalizeFlaggedStorage(storage);
203
207
  const content = JSON.stringify(normalized, null, 2);
204
208
  // When keychain opt-in is enabled, store flagged credentials in the OS
@@ -226,6 +230,13 @@ async function saveFlaggedAccountsUnlocked(storage) {
226
230
  const tempPath = `${path}.${uniqueSuffix}.tmp`;
227
231
  try {
228
232
  await fs.mkdir(dirname(path), { recursive: true });
233
+ // This file retains live refresh tokens for quarantined accounts, so it
234
+ // gets the same pre-write snapshot as the main account store — under the
235
+ // same significance, retention, and test-home rules — before the rename
236
+ // replaces what is on disk. Compared against the normalized payload for
237
+ // the same reason `writeAccountsToPathUnlocked` does: a difference
238
+ // normalization erases never costs a snapshot.
239
+ await trySnapshotCredentialStoreBeforeWrite(path, normalized);
229
240
  await fs.writeFile(tempPath, content, { encoding: "utf-8", mode: 0o600 });
230
241
  await renameWithWindowsRetry(tempPath, path);
231
242
  }
@@ -262,10 +273,21 @@ export async function saveFlaggedAccounts(storage) {
262
273
  }
263
274
  export async function clearFlaggedAccounts() {
264
275
  return withStorageLock(async () => {
276
+ const path = getFlaggedAccountsPath();
265
277
  try {
266
- await fs.unlink(getFlaggedAccountsPath());
278
+ assertTestRunNeverTouchesRealHome(path);
279
+ // Deleting the store outright is unconditionally significant - `null`
280
+ // says there is no successor document to compare against.
281
+ await trySnapshotCredentialStoreBeforeWrite(path, null);
282
+ await fs.unlink(path);
267
283
  }
268
284
  catch (error) {
285
+ // Same fail-loud rule as `clearAccounts`: the test-home guard exists to
286
+ // fail a run that escaped its sandbox, so absorbing it here would
287
+ // report a clear that deliberately did not happen.
288
+ if (error instanceof StorageError && error.code === TEST_HOME_ESCAPE_CODE) {
289
+ throw error;
290
+ }
269
291
  const code = error.code;
270
292
  if (code !== "ENOENT") {
271
293
  log.error("Failed to clear flagged account storage", { error: String(error) });
@@ -1 +1 @@
1
- {"version":3,"file":"flagged.js","sourceRoot":"","sources":["../../../lib/storage/flagged.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flagged.js","sourceRoot":"","sources":["../../../lib/storage/flagged.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,10 @@ export declare function saveAccounts(storage: AccountStorageV3): Promise<void>;
58
58
  * keychain delete and log at `error`. Both copies remain in sync so the
59
59
  * caller can retry safely. The operation is still best-effort (never
60
60
  * throws) to preserve the existing contract above the storage layer.
61
+ *
62
+ * @throws StorageError (code `TEST_HOME_ESCAPE`) - the single exception to
63
+ * best-effort, and inert outside vitest. The guard refuses the deletion, so
64
+ * absorbing it would return success for a clear that never happened.
61
65
  */
62
66
  export declare function clearAccounts(): Promise<void>;
63
67
  //# sourceMappingURL=load-save.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"load-save.d.ts","sourceRoot":"","sources":["../../../lib/storage/load-save.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAoBH,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAczB,wBAAgB,gCAAgC,CAAC,IAAI,SAAmB,GAAG,MAAM,GAAG,SAAS,CAK5F;AAKD,wBAAgB,uCAAuC,IAAI,IAAI,CAE9D;AAonBD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAErE;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CAAC,CAAC,EACnD,OAAO,EAAE,CACP,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,KAClD,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCnD"}
1
+ {"version":3,"file":"load-save.d.ts","sourceRoot":"","sources":["../../../lib/storage/load-save.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAyBH,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAczB,wBAAgB,gCAAgC,CAAC,IAAI,SAAmB,GAAG,MAAM,GAAG,SAAS,CAK5F;AAKD,wBAAgB,uCAAuC,IAAI,IAAI,CAE9D;AAgpBD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAErE;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CAAC,CAAC,EACnD,OAAO,EAAE,CACP,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,KAClD,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAgDnD"}