@cortexkit/opencode-antigravity-auth 1.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 (271) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +714 -0
  3. package/dist/index.d.ts +4 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +15175 -0
  6. package/dist/index.js.map +7 -0
  7. package/dist/src/antigravity/oauth.d.ts +2 -0
  8. package/dist/src/antigravity/oauth.d.ts.map +1 -0
  9. package/dist/src/antigravity/oauth.js +3 -0
  10. package/dist/src/antigravity/oauth.js.map +1 -0
  11. package/dist/src/constants.d.ts +2 -0
  12. package/dist/src/constants.d.ts.map +1 -0
  13. package/dist/src/constants.js +3 -0
  14. package/dist/src/constants.js.map +1 -0
  15. package/dist/src/hooks/auto-update-checker/cache.d.ts +3 -0
  16. package/dist/src/hooks/auto-update-checker/cache.d.ts.map +1 -0
  17. package/dist/src/hooks/auto-update-checker/cache.js +71 -0
  18. package/dist/src/hooks/auto-update-checker/cache.js.map +1 -0
  19. package/dist/src/hooks/auto-update-checker/checker.d.ts +16 -0
  20. package/dist/src/hooks/auto-update-checker/checker.d.ts.map +1 -0
  21. package/dist/src/hooks/auto-update-checker/checker.js +234 -0
  22. package/dist/src/hooks/auto-update-checker/checker.js.map +1 -0
  23. package/dist/src/hooks/auto-update-checker/constants.d.ts +9 -0
  24. package/dist/src/hooks/auto-update-checker/constants.d.ts.map +1 -0
  25. package/dist/src/hooks/auto-update-checker/constants.js +23 -0
  26. package/dist/src/hooks/auto-update-checker/constants.js.map +1 -0
  27. package/dist/src/hooks/auto-update-checker/index.d.ts +34 -0
  28. package/dist/src/hooks/auto-update-checker/index.d.ts.map +1 -0
  29. package/dist/src/hooks/auto-update-checker/index.js +122 -0
  30. package/dist/src/hooks/auto-update-checker/index.js.map +1 -0
  31. package/dist/src/hooks/auto-update-checker/logging.d.ts +3 -0
  32. package/dist/src/hooks/auto-update-checker/logging.d.ts.map +1 -0
  33. package/dist/src/hooks/auto-update-checker/logging.js +9 -0
  34. package/dist/src/hooks/auto-update-checker/logging.js.map +1 -0
  35. package/dist/src/hooks/auto-update-checker/types.d.ts +25 -0
  36. package/dist/src/hooks/auto-update-checker/types.d.ts.map +1 -0
  37. package/dist/src/hooks/auto-update-checker/types.js +1 -0
  38. package/dist/src/hooks/auto-update-checker/types.js.map +1 -0
  39. package/dist/src/plugin/accounts.d.ts +232 -0
  40. package/dist/src/plugin/accounts.d.ts.map +1 -0
  41. package/dist/src/plugin/accounts.js +1163 -0
  42. package/dist/src/plugin/accounts.js.map +1 -0
  43. package/dist/src/plugin/agy-transport.d.ts +2 -0
  44. package/dist/src/plugin/agy-transport.d.ts.map +1 -0
  45. package/dist/src/plugin/agy-transport.js +3 -0
  46. package/dist/src/plugin/agy-transport.js.map +1 -0
  47. package/dist/src/plugin/auth-doctor.d.ts +30 -0
  48. package/dist/src/plugin/auth-doctor.d.ts.map +1 -0
  49. package/dist/src/plugin/auth-doctor.js +144 -0
  50. package/dist/src/plugin/auth-doctor.js.map +1 -0
  51. package/dist/src/plugin/auth-drift.d.ts +13 -0
  52. package/dist/src/plugin/auth-drift.d.ts.map +1 -0
  53. package/dist/src/plugin/auth-drift.js +70 -0
  54. package/dist/src/plugin/auth-drift.js.map +1 -0
  55. package/dist/src/plugin/auth.d.ts +2 -0
  56. package/dist/src/plugin/auth.d.ts.map +1 -0
  57. package/dist/src/plugin/auth.js +3 -0
  58. package/dist/src/plugin/auth.js.map +1 -0
  59. package/dist/src/plugin/cache/index.d.ts +5 -0
  60. package/dist/src/plugin/cache/index.d.ts.map +1 -0
  61. package/dist/src/plugin/cache/index.js +5 -0
  62. package/dist/src/plugin/cache/index.js.map +1 -0
  63. package/dist/src/plugin/cache/signature-cache.d.ts +111 -0
  64. package/dist/src/plugin/cache/signature-cache.d.ts.map +1 -0
  65. package/dist/src/plugin/cache/signature-cache.js +375 -0
  66. package/dist/src/plugin/cache/signature-cache.js.map +1 -0
  67. package/dist/src/plugin/cache.d.ts +44 -0
  68. package/dist/src/plugin/cache.d.ts.map +1 -0
  69. package/dist/src/plugin/cache.js +247 -0
  70. package/dist/src/plugin/cache.js.map +1 -0
  71. package/dist/src/plugin/cli.d.ts +44 -0
  72. package/dist/src/plugin/cli.d.ts.map +1 -0
  73. package/dist/src/plugin/cli.js +153 -0
  74. package/dist/src/plugin/cli.js.map +1 -0
  75. package/dist/src/plugin/config/index.d.ts +16 -0
  76. package/dist/src/plugin/config/index.d.ts.map +1 -0
  77. package/dist/src/plugin/config/index.js +16 -0
  78. package/dist/src/plugin/config/index.js.map +1 -0
  79. package/dist/src/plugin/config/loader.d.ts +36 -0
  80. package/dist/src/plugin/config/loader.d.ts.map +1 -0
  81. package/dist/src/plugin/config/loader.js +140 -0
  82. package/dist/src/plugin/config/loader.js.map +1 -0
  83. package/dist/src/plugin/config/models.d.ts +3 -0
  84. package/dist/src/plugin/config/models.d.ts.map +1 -0
  85. package/dist/src/plugin/config/models.js +2 -0
  86. package/dist/src/plugin/config/models.js.map +1 -0
  87. package/dist/src/plugin/config/schema.d.ts +141 -0
  88. package/dist/src/plugin/config/schema.d.ts.map +1 -0
  89. package/dist/src/plugin/config/schema.js +504 -0
  90. package/dist/src/plugin/config/schema.js.map +1 -0
  91. package/dist/src/plugin/config/updater.d.ts +55 -0
  92. package/dist/src/plugin/config/updater.d.ts.map +1 -0
  93. package/dist/src/plugin/config/updater.js +127 -0
  94. package/dist/src/plugin/config/updater.js.map +1 -0
  95. package/dist/src/plugin/core/streaming/index.d.ts +3 -0
  96. package/dist/src/plugin/core/streaming/index.d.ts.map +1 -0
  97. package/dist/src/plugin/core/streaming/index.js +3 -0
  98. package/dist/src/plugin/core/streaming/index.js.map +1 -0
  99. package/dist/src/plugin/core/streaming/transformer.d.ts +12 -0
  100. package/dist/src/plugin/core/streaming/transformer.d.ts.map +1 -0
  101. package/dist/src/plugin/core/streaming/transformer.js +447 -0
  102. package/dist/src/plugin/core/streaming/transformer.js.map +1 -0
  103. package/dist/src/plugin/core/streaming/types.d.ts +34 -0
  104. package/dist/src/plugin/core/streaming/types.d.ts.map +1 -0
  105. package/dist/src/plugin/core/streaming/types.js +1 -0
  106. package/dist/src/plugin/core/streaming/types.js.map +1 -0
  107. package/dist/src/plugin/debug.d.ts +94 -0
  108. package/dist/src/plugin/debug.d.ts.map +1 -0
  109. package/dist/src/plugin/debug.js +383 -0
  110. package/dist/src/plugin/debug.js.map +1 -0
  111. package/dist/src/plugin/errors.d.ts +28 -0
  112. package/dist/src/plugin/errors.d.ts.map +1 -0
  113. package/dist/src/plugin/errors.js +42 -0
  114. package/dist/src/plugin/errors.js.map +1 -0
  115. package/dist/src/plugin/fingerprint.d.ts +2 -0
  116. package/dist/src/plugin/fingerprint.d.ts.map +1 -0
  117. package/dist/src/plugin/fingerprint.js +3 -0
  118. package/dist/src/plugin/fingerprint.js.map +1 -0
  119. package/dist/src/plugin/gemini-dump.d.ts +47 -0
  120. package/dist/src/plugin/gemini-dump.d.ts.map +1 -0
  121. package/dist/src/plugin/gemini-dump.js +238 -0
  122. package/dist/src/plugin/gemini-dump.js.map +1 -0
  123. package/dist/src/plugin/image-saver.d.ts +25 -0
  124. package/dist/src/plugin/image-saver.d.ts.map +1 -0
  125. package/dist/src/plugin/image-saver.js +86 -0
  126. package/dist/src/plugin/image-saver.js.map +1 -0
  127. package/dist/src/plugin/logger.d.ts +23 -0
  128. package/dist/src/plugin/logger.d.ts.map +1 -0
  129. package/dist/src/plugin/logger.js +80 -0
  130. package/dist/src/plugin/logger.js.map +1 -0
  131. package/dist/src/plugin/logging-utils.d.ts +23 -0
  132. package/dist/src/plugin/logging-utils.d.ts.map +1 -0
  133. package/dist/src/plugin/logging-utils.js +92 -0
  134. package/dist/src/plugin/logging-utils.js.map +1 -0
  135. package/dist/src/plugin/model-registry.d.ts +2 -0
  136. package/dist/src/plugin/model-registry.d.ts.map +1 -0
  137. package/dist/src/plugin/model-registry.js +3 -0
  138. package/dist/src/plugin/model-registry.js.map +1 -0
  139. package/dist/src/plugin/project.d.ts +2 -0
  140. package/dist/src/plugin/project.d.ts.map +1 -0
  141. package/dist/src/plugin/project.js +3 -0
  142. package/dist/src/plugin/project.js.map +1 -0
  143. package/dist/src/plugin/prompt-context.d.ts +18 -0
  144. package/dist/src/plugin/prompt-context.d.ts.map +1 -0
  145. package/dist/src/plugin/prompt-context.js +99 -0
  146. package/dist/src/plugin/prompt-context.js.map +1 -0
  147. package/dist/src/plugin/quota.d.ts +44 -0
  148. package/dist/src/plugin/quota.d.ts.map +1 -0
  149. package/dist/src/plugin/quota.js +336 -0
  150. package/dist/src/plugin/quota.js.map +1 -0
  151. package/dist/src/plugin/recovery/constants.d.ts +22 -0
  152. package/dist/src/plugin/recovery/constants.d.ts.map +1 -0
  153. package/dist/src/plugin/recovery/constants.js +43 -0
  154. package/dist/src/plugin/recovery/constants.js.map +1 -0
  155. package/dist/src/plugin/recovery/index.d.ts +12 -0
  156. package/dist/src/plugin/recovery/index.d.ts.map +1 -0
  157. package/dist/src/plugin/recovery/index.js +12 -0
  158. package/dist/src/plugin/recovery/index.js.map +1 -0
  159. package/dist/src/plugin/recovery/storage.d.ts +24 -0
  160. package/dist/src/plugin/recovery/storage.d.ts.map +1 -0
  161. package/dist/src/plugin/recovery/storage.js +354 -0
  162. package/dist/src/plugin/recovery/storage.js.map +1 -0
  163. package/dist/src/plugin/recovery/types.d.ts +116 -0
  164. package/dist/src/plugin/recovery/types.d.ts.map +1 -0
  165. package/dist/src/plugin/recovery/types.js +6 -0
  166. package/dist/src/plugin/recovery/types.js.map +1 -0
  167. package/dist/src/plugin/recovery.d.ts +61 -0
  168. package/dist/src/plugin/recovery.d.ts.map +1 -0
  169. package/dist/src/plugin/recovery.js +381 -0
  170. package/dist/src/plugin/recovery.js.map +1 -0
  171. package/dist/src/plugin/refresh-queue.d.ts +100 -0
  172. package/dist/src/plugin/refresh-queue.d.ts.map +1 -0
  173. package/dist/src/plugin/refresh-queue.js +247 -0
  174. package/dist/src/plugin/refresh-queue.js.map +1 -0
  175. package/dist/src/plugin/request-helpers.d.ts +278 -0
  176. package/dist/src/plugin/request-helpers.d.ts.map +1 -0
  177. package/dist/src/plugin/request-helpers.js +2323 -0
  178. package/dist/src/plugin/request-helpers.js.map +1 -0
  179. package/dist/src/plugin/request.d.ts +102 -0
  180. package/dist/src/plugin/request.d.ts.map +1 -0
  181. package/dist/src/plugin/request.js +1658 -0
  182. package/dist/src/plugin/request.js.map +1 -0
  183. package/dist/src/plugin/rotation.d.ts +169 -0
  184. package/dist/src/plugin/rotation.d.ts.map +1 -0
  185. package/dist/src/plugin/rotation.js +328 -0
  186. package/dist/src/plugin/rotation.js.map +1 -0
  187. package/dist/src/plugin/search.d.ts +25 -0
  188. package/dist/src/plugin/search.d.ts.map +1 -0
  189. package/dist/src/plugin/search.js +200 -0
  190. package/dist/src/plugin/search.js.map +1 -0
  191. package/dist/src/plugin/server.d.ts +23 -0
  192. package/dist/src/plugin/server.d.ts.map +1 -0
  193. package/dist/src/plugin/server.js +324 -0
  194. package/dist/src/plugin/server.js.map +1 -0
  195. package/dist/src/plugin/storage.d.ts +150 -0
  196. package/dist/src/plugin/storage.d.ts.map +1 -0
  197. package/dist/src/plugin/storage.js +628 -0
  198. package/dist/src/plugin/storage.js.map +1 -0
  199. package/dist/src/plugin/stores/signature-store.d.ts +5 -0
  200. package/dist/src/plugin/stores/signature-store.d.ts.map +1 -0
  201. package/dist/src/plugin/stores/signature-store.js +25 -0
  202. package/dist/src/plugin/stores/signature-store.js.map +1 -0
  203. package/dist/src/plugin/thinking-recovery.d.ts +90 -0
  204. package/dist/src/plugin/thinking-recovery.d.ts.map +1 -0
  205. package/dist/src/plugin/thinking-recovery.js +330 -0
  206. package/dist/src/plugin/thinking-recovery.js.map +1 -0
  207. package/dist/src/plugin/token.d.ts +19 -0
  208. package/dist/src/plugin/token.d.ts.map +1 -0
  209. package/dist/src/plugin/token.js +130 -0
  210. package/dist/src/plugin/token.js.map +1 -0
  211. package/dist/src/plugin/transform/claude.d.ts +92 -0
  212. package/dist/src/plugin/transform/claude.d.ts.map +1 -0
  213. package/dist/src/plugin/transform/claude.js +280 -0
  214. package/dist/src/plugin/transform/claude.js.map +1 -0
  215. package/dist/src/plugin/transform/cross-model-sanitizer.d.ts +2 -0
  216. package/dist/src/plugin/transform/cross-model-sanitizer.d.ts.map +1 -0
  217. package/dist/src/plugin/transform/cross-model-sanitizer.js +3 -0
  218. package/dist/src/plugin/transform/cross-model-sanitizer.js.map +1 -0
  219. package/dist/src/plugin/transform/gemini.d.ts +100 -0
  220. package/dist/src/plugin/transform/gemini.d.ts.map +1 -0
  221. package/dist/src/plugin/transform/gemini.js +446 -0
  222. package/dist/src/plugin/transform/gemini.js.map +1 -0
  223. package/dist/src/plugin/transform/index.d.ts +2 -0
  224. package/dist/src/plugin/transform/index.d.ts.map +1 -0
  225. package/dist/src/plugin/transform/index.js +3 -0
  226. package/dist/src/plugin/transform/index.js.map +1 -0
  227. package/dist/src/plugin/transform/model-resolver.d.ts +2 -0
  228. package/dist/src/plugin/transform/model-resolver.d.ts.map +1 -0
  229. package/dist/src/plugin/transform/model-resolver.js +3 -0
  230. package/dist/src/plugin/transform/model-resolver.js.map +1 -0
  231. package/dist/src/plugin/transform/types.d.ts +2 -0
  232. package/dist/src/plugin/transform/types.d.ts.map +1 -0
  233. package/dist/src/plugin/transform/types.js +3 -0
  234. package/dist/src/plugin/transform/types.js.map +1 -0
  235. package/dist/src/plugin/types.d.ts +80 -0
  236. package/dist/src/plugin/types.d.ts.map +1 -0
  237. package/dist/src/plugin/types.js +1 -0
  238. package/dist/src/plugin/types.js.map +1 -0
  239. package/dist/src/plugin/ui/ansi.d.ts +32 -0
  240. package/dist/src/plugin/ui/ansi.d.ts.map +1 -0
  241. package/dist/src/plugin/ui/ansi.js +52 -0
  242. package/dist/src/plugin/ui/ansi.js.map +1 -0
  243. package/dist/src/plugin/ui/auth-menu.d.ts +59 -0
  244. package/dist/src/plugin/ui/auth-menu.d.ts.map +1 -0
  245. package/dist/src/plugin/ui/auth-menu.js +362 -0
  246. package/dist/src/plugin/ui/auth-menu.js.map +1 -0
  247. package/dist/src/plugin/ui/confirm.d.ts +2 -0
  248. package/dist/src/plugin/ui/confirm.d.ts.map +1 -0
  249. package/dist/src/plugin/ui/confirm.js +15 -0
  250. package/dist/src/plugin/ui/confirm.js.map +1 -0
  251. package/dist/src/plugin/ui/model-status.d.ts +28 -0
  252. package/dist/src/plugin/ui/model-status.d.ts.map +1 -0
  253. package/dist/src/plugin/ui/model-status.js +80 -0
  254. package/dist/src/plugin/ui/model-status.js.map +1 -0
  255. package/dist/src/plugin/ui/quota-status.d.ts +82 -0
  256. package/dist/src/plugin/ui/quota-status.d.ts.map +1 -0
  257. package/dist/src/plugin/ui/quota-status.js +251 -0
  258. package/dist/src/plugin/ui/quota-status.js.map +1 -0
  259. package/dist/src/plugin/ui/select.d.ts +23 -0
  260. package/dist/src/plugin/ui/select.d.ts.map +1 -0
  261. package/dist/src/plugin/ui/select.js +254 -0
  262. package/dist/src/plugin/ui/select.js.map +1 -0
  263. package/dist/src/plugin/version.d.ts +2 -0
  264. package/dist/src/plugin/version.d.ts.map +1 -0
  265. package/dist/src/plugin/version.js +3 -0
  266. package/dist/src/plugin/version.js.map +1 -0
  267. package/dist/src/plugin.d.ts +32 -0
  268. package/dist/src/plugin.d.ts.map +1 -0
  269. package/dist/src/plugin.js +3125 -0
  270. package/dist/src/plugin.js.map +1 -0
  271. package/package.json +70 -0
@@ -0,0 +1,82 @@
1
+ import type { QuotaGroupSummary } from "../quota";
2
+ import type { CooldownReason } from "../accounts";
3
+ /**
4
+ * Quota-aware status labels for models and accounts.
5
+ *
6
+ * Labels:
7
+ * [READY] — quota available, no rate limits
8
+ * [WAIT Xm] — rate-limited, resets in X minutes
9
+ * [EXHAUSTED] — quota fully consumed (0%), reset time known
10
+ * [COOLDOWN] — account cooling down (auth failure, network error, etc.)
11
+ * [LOW] — quota below 20% but still available
12
+ */
13
+ export type QuotaLabel = "READY" | "WAIT" | "EXHAUSTED" | "COOLDOWN" | "LOW";
14
+ export interface QuotaStatusInfo {
15
+ label: QuotaLabel;
16
+ waitMs?: number;
17
+ cooldownReason?: CooldownReason;
18
+ }
19
+ /**
20
+ * Format a duration in milliseconds to a compact human-readable string.
21
+ * Used for wait/cooldown labels.
22
+ */
23
+ export declare function formatWaitDuration(ms: number): string;
24
+ /**
25
+ * Classify a quota group's status based on remaining fraction and reset time.
26
+ */
27
+ export declare function classifyGroupStatus(group: QuotaGroupSummary | undefined): QuotaStatusInfo;
28
+ /**
29
+ * Build a cooldown status for an account that is cooling down.
30
+ */
31
+ export declare function buildCooldownStatus(cooldownMs: number, reason?: CooldownReason): QuotaStatusInfo;
32
+ /**
33
+ * Build a rate-limited (WAIT) status with optional wait time.
34
+ */
35
+ export declare function buildWaitStatus(waitMs?: number): QuotaStatusInfo;
36
+ /**
37
+ * Format a QuotaStatusInfo into a colored ANSI badge string.
38
+ *
39
+ * Examples:
40
+ * [READY]
41
+ * [WAIT 3m 20s]
42
+ * [EXHAUSTED resets in 2h 15m]
43
+ * [COOLDOWN auth-failure]
44
+ * [LOW]
45
+ */
46
+ export declare function formatQuotaStatusBadge(status: QuotaStatusInfo): string;
47
+ /**
48
+ * Format a plain-text (no ANSI) quota status label.
49
+ * Suitable for hints and non-colored contexts.
50
+ */
51
+ export declare function formatQuotaStatusPlain(status: QuotaStatusInfo): string;
52
+ /**
53
+ * Classify the overall quota health of an account across all model groups.
54
+ * Returns "exhausted" when ALL groups with data are at 0%, "partial" when
55
+ * some but not all are exhausted, or "available" when none are exhausted.
56
+ */
57
+ export declare function classifyOverallQuotaHealth(cachedQuota: Partial<Record<string, {
58
+ remainingFraction?: number;
59
+ resetTime?: string;
60
+ }>> | undefined): {
61
+ health: "available" | "partial" | "exhausted" | "unknown";
62
+ maxResetMs?: number;
63
+ };
64
+ /**
65
+ * Build a quota summary string with status labels for cached quota data.
66
+ * Used in auth menu account hints.
67
+ *
68
+ * When all groups are exhausted, returns a single condensed "resets in Xh Ym"
69
+ * instead of listing each model separately.
70
+ *
71
+ * Example: "Claude 80%, Gemini Flash LOW 15%"
72
+ */
73
+ export declare function formatCachedQuotaWithStatus(cachedQuota: Partial<Record<string, {
74
+ remainingFraction?: number;
75
+ resetTime?: string;
76
+ }>> | undefined): string | undefined;
77
+ /**
78
+ * Format a per-group quota status badge for the "Check quotas" output.
79
+ * Combines the progress bar with a status label.
80
+ */
81
+ export declare function formatGroupQuotaBadge(remaining?: number, resetTime?: string): string;
82
+ //# sourceMappingURL=quota-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-status.d.ts","sourceRoot":"","sources":["../../../../src/plugin/ui/quota-status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD;;;;;;;;;GASG;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,KAAK,CAAA;AAE5E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,cAAc,CAAA;CAChC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAYrD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,GAAG,SAAS,GACnC,eAAe,CA6BjB;AAcD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,cAAc,GACtB,eAAe,CAMjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAKhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAiCtE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAiCtE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,GAAG,SAAS,GACnG;IAAE,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CA+BpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,GAAG,SAAS,GACnG,MAAM,GAAG,SAAS,CAsCpB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAQR"}
@@ -0,0 +1,251 @@
1
+ import { ANSI } from "./ansi";
2
+ /**
3
+ * Format a duration in milliseconds to a compact human-readable string.
4
+ * Used for wait/cooldown labels.
5
+ */
6
+ export function formatWaitDuration(ms) {
7
+ if (ms < 1000)
8
+ return `${ms}ms`;
9
+ const seconds = Math.ceil(ms / 1000);
10
+ if (seconds < 60)
11
+ return `${seconds}s`;
12
+ const minutes = Math.floor(seconds / 60);
13
+ const remainingSeconds = seconds % 60;
14
+ if (minutes < 60) {
15
+ return remainingSeconds > 0 ? `${minutes}m ${remainingSeconds}s` : `${minutes}m`;
16
+ }
17
+ const hours = Math.floor(minutes / 60);
18
+ const remainingMinutes = minutes % 60;
19
+ return remainingMinutes > 0 ? `${hours}h ${remainingMinutes}m` : `${hours}h`;
20
+ }
21
+ /**
22
+ * Classify a quota group's status based on remaining fraction and reset time.
23
+ */
24
+ export function classifyGroupStatus(group) {
25
+ if (!group) {
26
+ return { label: "READY" };
27
+ }
28
+ const remaining = group.remainingFraction;
29
+ // No remaining fraction data — treat as ready (fail-open)
30
+ if (typeof remaining !== "number" || !Number.isFinite(remaining)) {
31
+ return { label: "READY" };
32
+ }
33
+ // Exhausted: 0% remaining
34
+ if (remaining <= 0) {
35
+ const waitMs = parseResetTimeToMs(group.resetTime);
36
+ if (waitMs !== null && waitMs > 0) {
37
+ return { label: "EXHAUSTED", waitMs };
38
+ }
39
+ // resetTime is missing or in the past — quota likely already reset on Google's side.
40
+ // Treat as READY (fail-open) to avoid stale exhaustion display.
41
+ return { label: "READY" };
42
+ }
43
+ // Low: below 20%
44
+ if (remaining < 0.2) {
45
+ return { label: "LOW" };
46
+ }
47
+ return { label: "READY" };
48
+ }
49
+ /**
50
+ * Parse an ISO reset time string to milliseconds-until-reset.
51
+ * Returns null if the time is invalid or already past.
52
+ */
53
+ function parseResetTimeToMs(resetTime) {
54
+ if (!resetTime)
55
+ return null;
56
+ const timestamp = Date.parse(resetTime);
57
+ if (!Number.isFinite(timestamp))
58
+ return null;
59
+ const ms = timestamp - Date.now();
60
+ return ms > 0 ? ms : null;
61
+ }
62
+ /**
63
+ * Build a cooldown status for an account that is cooling down.
64
+ */
65
+ export function buildCooldownStatus(cooldownMs, reason) {
66
+ return {
67
+ label: "COOLDOWN",
68
+ waitMs: cooldownMs > 0 ? cooldownMs : undefined,
69
+ cooldownReason: reason,
70
+ };
71
+ }
72
+ /**
73
+ * Build a rate-limited (WAIT) status with optional wait time.
74
+ */
75
+ export function buildWaitStatus(waitMs) {
76
+ if (waitMs !== undefined && waitMs > 0) {
77
+ return { label: "WAIT", waitMs };
78
+ }
79
+ return { label: "WAIT" };
80
+ }
81
+ /**
82
+ * Format a QuotaStatusInfo into a colored ANSI badge string.
83
+ *
84
+ * Examples:
85
+ * [READY]
86
+ * [WAIT 3m 20s]
87
+ * [EXHAUSTED resets in 2h 15m]
88
+ * [COOLDOWN auth-failure]
89
+ * [LOW]
90
+ */
91
+ export function formatQuotaStatusBadge(status) {
92
+ switch (status.label) {
93
+ case "READY":
94
+ return `${ANSI.green}[READY]${ANSI.reset}`;
95
+ case "LOW":
96
+ return `${ANSI.yellow}[LOW]${ANSI.reset}`;
97
+ case "WAIT": {
98
+ const suffix = status.waitMs
99
+ ? ` ${formatWaitDuration(status.waitMs)}`
100
+ : "";
101
+ return `${ANSI.yellow}[WAIT${suffix}]${ANSI.reset}`;
102
+ }
103
+ case "EXHAUSTED": {
104
+ const suffix = status.waitMs
105
+ ? ` resets in ${formatWaitDuration(status.waitMs)}`
106
+ : "";
107
+ return `${ANSI.red}[EXHAUSTED${suffix}]${ANSI.reset}`;
108
+ }
109
+ case "COOLDOWN": {
110
+ const parts = ["COOLDOWN"];
111
+ if (status.cooldownReason) {
112
+ parts.push(status.cooldownReason);
113
+ }
114
+ if (status.waitMs) {
115
+ parts.push(formatWaitDuration(status.waitMs));
116
+ }
117
+ return `${ANSI.red}[${parts.join(" ")}]${ANSI.reset}`;
118
+ }
119
+ }
120
+ }
121
+ /**
122
+ * Format a plain-text (no ANSI) quota status label.
123
+ * Suitable for hints and non-colored contexts.
124
+ */
125
+ export function formatQuotaStatusPlain(status) {
126
+ switch (status.label) {
127
+ case "READY":
128
+ return "READY";
129
+ case "LOW":
130
+ return "LOW";
131
+ case "WAIT": {
132
+ const suffix = status.waitMs
133
+ ? ` ${formatWaitDuration(status.waitMs)}`
134
+ : "";
135
+ return `WAIT${suffix}`;
136
+ }
137
+ case "EXHAUSTED": {
138
+ const suffix = status.waitMs
139
+ ? ` resets in ${formatWaitDuration(status.waitMs)}`
140
+ : "";
141
+ return `EXHAUSTED${suffix}`;
142
+ }
143
+ case "COOLDOWN": {
144
+ const parts = ["COOLDOWN"];
145
+ if (status.cooldownReason) {
146
+ parts.push(status.cooldownReason);
147
+ }
148
+ if (status.waitMs) {
149
+ parts.push(formatWaitDuration(status.waitMs));
150
+ }
151
+ return parts.join(" ");
152
+ }
153
+ }
154
+ }
155
+ /**
156
+ * Classify the overall quota health of an account across all model groups.
157
+ * Returns "exhausted" when ALL groups with data are at 0%, "partial" when
158
+ * some but not all are exhausted, or "available" when none are exhausted.
159
+ */
160
+ export function classifyOverallQuotaHealth(cachedQuota) {
161
+ if (!cachedQuota) {
162
+ return { health: "unknown" };
163
+ }
164
+ const QUOTA_KEYS = ["claude", "gemini-pro", "gemini-flash"];
165
+ let groupsWithData = 0;
166
+ let exhaustedCount = 0;
167
+ let maxResetMs;
168
+ for (const key of QUOTA_KEYS) {
169
+ const value = cachedQuota[key]?.remainingFraction;
170
+ if (typeof value !== "number" || !Number.isFinite(value))
171
+ continue;
172
+ groupsWithData++;
173
+ if (value <= 0) {
174
+ // Skip stale exhaustion: if resetTime is missing or in the past,
175
+ // Google has likely already reset the quota — don't count as exhausted
176
+ const resetMs = parseResetTimeToMs(cachedQuota[key]?.resetTime);
177
+ if (resetMs !== null && resetMs > 0) {
178
+ exhaustedCount++;
179
+ if (maxResetMs === undefined || resetMs > maxResetMs) {
180
+ maxResetMs = resetMs;
181
+ }
182
+ }
183
+ }
184
+ }
185
+ if (groupsWithData === 0)
186
+ return { health: "unknown" };
187
+ if (exhaustedCount === groupsWithData)
188
+ return { health: "exhausted", maxResetMs };
189
+ if (exhaustedCount > 0)
190
+ return { health: "partial", maxResetMs };
191
+ return { health: "available" };
192
+ }
193
+ /**
194
+ * Build a quota summary string with status labels for cached quota data.
195
+ * Used in auth menu account hints.
196
+ *
197
+ * When all groups are exhausted, returns a single condensed "resets in Xh Ym"
198
+ * instead of listing each model separately.
199
+ *
200
+ * Example: "Claude 80%, Gemini Flash LOW 15%"
201
+ */
202
+ export function formatCachedQuotaWithStatus(cachedQuota) {
203
+ if (!cachedQuota) {
204
+ return undefined;
205
+ }
206
+ // When all groups are exhausted, don't list each model — the badge handles it
207
+ const overall = classifyOverallQuotaHealth(cachedQuota);
208
+ if (overall.health === "exhausted") {
209
+ return undefined;
210
+ }
211
+ const entries = [
212
+ { key: "claude", label: "Claude" },
213
+ { key: "gemini-pro", label: "Gemini Pro" },
214
+ { key: "gemini-flash", label: "Gemini Flash" },
215
+ ].flatMap(({ key, label }) => {
216
+ const value = cachedQuota[key]?.remainingFraction;
217
+ if (typeof value !== "number" || !Number.isFinite(value)) {
218
+ return [];
219
+ }
220
+ const pct = Math.round(Math.max(0, Math.min(1, value)) * 100);
221
+ const status = classifyGroupStatus(cachedQuota[key]);
222
+ // Hide groups at 100% READY — they're noise
223
+ if (status.label === "READY" && pct >= 100) {
224
+ return [];
225
+ }
226
+ if (status.label === "READY") {
227
+ return [`${label} ${pct}%`];
228
+ }
229
+ // Skip pct% for EXHAUSTED — the status label already conveys 0%
230
+ // Use lowercase labels in hints to match account badge style ([active], [exhausted])
231
+ if (status.label === "EXHAUSTED") {
232
+ return [`${label} ${formatQuotaStatusPlain(status).toLowerCase()}`];
233
+ }
234
+ return [`${label} ${formatQuotaStatusPlain(status).toLowerCase()} ${pct}%`];
235
+ });
236
+ return entries.length > 0 ? entries.join(", ") : undefined;
237
+ }
238
+ /**
239
+ * Format a per-group quota status badge for the "Check quotas" output.
240
+ * Combines the progress bar with a status label.
241
+ */
242
+ export function formatGroupQuotaBadge(remaining, resetTime) {
243
+ const group = {
244
+ remainingFraction: remaining,
245
+ resetTime,
246
+ modelCount: 1,
247
+ };
248
+ const status = classifyGroupStatus(group);
249
+ return formatQuotaStatusBadge(status);
250
+ }
251
+ //# sourceMappingURL=quota-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-status.js","sourceRoot":"","sources":["../../../../src/plugin/ui/quota-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface MenuItem<T = string> {
2
+ label: string;
3
+ value: T;
4
+ hint?: string;
5
+ disabled?: boolean;
6
+ separator?: boolean;
7
+ /** Non-selectable label row (section heading). */
8
+ kind?: 'heading';
9
+ color?: 'red' | 'green' | 'yellow' | 'cyan';
10
+ }
11
+ export interface SelectOptions {
12
+ message: string;
13
+ subtitle?: string;
14
+ /** Override the help line shown at the bottom of the menu. */
15
+ help?: string;
16
+ /**
17
+ * Clear the terminal before each render (opt-in).
18
+ * Useful for nested flows where previous logs make menus feel cluttered.
19
+ */
20
+ clearScreen?: boolean;
21
+ }
22
+ export declare function select<T>(items: MenuItem<T>[], options: SelectOptions): Promise<T | null>;
23
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../../src/plugin/ui/select.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,MAAM;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kDAAkD;IAClD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAyDD,wBAAsB,MAAM,CAAC,CAAC,EAC5B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAwOnB"}
@@ -0,0 +1,254 @@
1
+ import { ANSI, isTTY, parseKey } from './ansi';
2
+ const ESCAPE_TIMEOUT_MS = 50;
3
+ const ANSI_REGEX = new RegExp("\\x1b\\[[0-9;]*m", "g");
4
+ const ANSI_LEADING_REGEX = new RegExp("^\\x1b\\[[0-9;]*m");
5
+ function stripAnsi(input) {
6
+ return input.replace(ANSI_REGEX, '');
7
+ }
8
+ function truncateAnsi(input, maxVisibleChars) {
9
+ if (maxVisibleChars <= 0)
10
+ return '';
11
+ const visible = stripAnsi(input);
12
+ if (visible.length <= maxVisibleChars)
13
+ return input;
14
+ const suffix = maxVisibleChars >= 3 ? '...' : '.'.repeat(maxVisibleChars);
15
+ const keep = Math.max(0, maxVisibleChars - suffix.length);
16
+ let out = '';
17
+ let i = 0;
18
+ let kept = 0;
19
+ while (i < input.length && kept < keep) {
20
+ // Preserve ANSI sequences without counting them.
21
+ if (input[i] === '\x1b') {
22
+ const m = input.slice(i).match(ANSI_LEADING_REGEX);
23
+ if (m) {
24
+ out += m[0];
25
+ i += m[0].length;
26
+ continue;
27
+ }
28
+ }
29
+ out += input[i];
30
+ i += 1;
31
+ kept += 1;
32
+ }
33
+ if (out.includes('\x1b[')) {
34
+ return `${out}${ANSI.reset}${suffix}`;
35
+ }
36
+ return out + suffix;
37
+ }
38
+ function getColorCode(color) {
39
+ switch (color) {
40
+ case 'red': return ANSI.red;
41
+ case 'green': return ANSI.green;
42
+ case 'yellow': return ANSI.yellow;
43
+ case 'cyan': return ANSI.cyan;
44
+ default: return '';
45
+ }
46
+ }
47
+ export async function select(items, options) {
48
+ if (!isTTY()) {
49
+ throw new Error('Interactive select requires a TTY terminal');
50
+ }
51
+ if (items.length === 0) {
52
+ throw new Error('No menu items provided');
53
+ }
54
+ const isSelectable = (i) => !i.disabled && !i.separator && i.kind !== 'heading';
55
+ const enabledItems = items.filter(isSelectable);
56
+ if (enabledItems.length === 0) {
57
+ throw new Error('All items disabled');
58
+ }
59
+ if (enabledItems.length === 1) {
60
+ return enabledItems[0].value;
61
+ }
62
+ const { message, subtitle } = options;
63
+ const { stdin, stdout } = process;
64
+ let cursor = items.findIndex(isSelectable);
65
+ if (cursor === -1)
66
+ cursor = 0; // Fallback, though validation above should prevent this
67
+ let escapeTimeout = null;
68
+ let isCleanedUp = false;
69
+ let renderedLines = 0;
70
+ const render = () => {
71
+ const columns = stdout.columns ?? 80;
72
+ const rows = stdout.rows ?? 24;
73
+ const shouldClearScreen = options.clearScreen === true;
74
+ const previousRenderedLines = renderedLines;
75
+ if (shouldClearScreen) {
76
+ stdout.write(ANSI.clearScreen + ANSI.moveTo(1, 1));
77
+ }
78
+ else if (previousRenderedLines > 0) {
79
+ stdout.write(ANSI.up(previousRenderedLines));
80
+ }
81
+ let linesWritten = 0;
82
+ const writeLine = (line) => {
83
+ stdout.write(`${ANSI.clearLine}${line}\n`);
84
+ linesWritten += 1;
85
+ };
86
+ // Subtitle renders as 3 lines:
87
+ // 1) blank "│" spacer, 2) subtitle line, 3) blank line. Header is counted separately.
88
+ const subtitleLines = subtitle ? 3 : 0;
89
+ const fixedLines = 1 + subtitleLines + 2; // header + subtitle + (help + bottom)
90
+ // Keep a small safety margin so the final newline doesn't scroll the terminal.
91
+ const maxVisibleItems = Math.max(1, Math.min(items.length, rows - fixedLines - 1));
92
+ // If the menu is taller than the viewport, only render a window around the cursor.
93
+ // This prevents terminal scrollback spam (e.g. repeated headers when pressing arrows).
94
+ let windowStart = 0;
95
+ let windowEnd = items.length;
96
+ if (items.length > maxVisibleItems) {
97
+ windowStart = cursor - Math.floor(maxVisibleItems / 2);
98
+ windowStart = Math.max(0, Math.min(windowStart, items.length - maxVisibleItems));
99
+ windowEnd = windowStart + maxVisibleItems;
100
+ }
101
+ const visibleItems = items.slice(windowStart, windowEnd);
102
+ const headerMessage = truncateAnsi(message, Math.max(1, columns - 4));
103
+ writeLine(`${ANSI.dim}┌ ${ANSI.reset}${headerMessage}`);
104
+ if (subtitle) {
105
+ writeLine(`${ANSI.dim}│${ANSI.reset}`);
106
+ const sub = truncateAnsi(subtitle, Math.max(1, columns - 4));
107
+ writeLine(`${ANSI.cyan}◆${ANSI.reset} ${sub}`);
108
+ writeLine("");
109
+ }
110
+ for (let i = 0; i < visibleItems.length; i++) {
111
+ const itemIndex = windowStart + i;
112
+ const item = visibleItems[i];
113
+ if (!item)
114
+ continue;
115
+ if (item.separator) {
116
+ writeLine(`${ANSI.dim}│${ANSI.reset}`);
117
+ continue;
118
+ }
119
+ if (item.kind === 'heading') {
120
+ const heading = truncateAnsi(`${ANSI.dim}${ANSI.bold}${item.label}${ANSI.reset}`, Math.max(1, columns - 6));
121
+ writeLine(`${ANSI.cyan}│${ANSI.reset} ${heading}`);
122
+ continue;
123
+ }
124
+ const isSelected = itemIndex === cursor;
125
+ const colorCode = getColorCode(item.color);
126
+ let labelText;
127
+ if (item.disabled) {
128
+ labelText = `${ANSI.dim}${item.label} (unavailable)${ANSI.reset}`;
129
+ }
130
+ else if (isSelected) {
131
+ labelText = colorCode ? `${colorCode}${item.label}${ANSI.reset}` : item.label;
132
+ if (item.hint)
133
+ labelText += ` ${ANSI.dim}${item.hint}${ANSI.reset}`;
134
+ }
135
+ else {
136
+ labelText = colorCode
137
+ ? `${ANSI.dim}${colorCode}${item.label}${ANSI.reset}`
138
+ : `${ANSI.dim}${item.label}${ANSI.reset}`;
139
+ if (item.hint)
140
+ labelText += ` ${ANSI.dim}${item.hint}${ANSI.reset}`;
141
+ }
142
+ // Prevent wrapping: cursor positioning relies on a fixed line count.
143
+ labelText = truncateAnsi(labelText, Math.max(1, columns - 8));
144
+ if (isSelected) {
145
+ writeLine(`${ANSI.cyan}│${ANSI.reset} ${ANSI.green}●${ANSI.reset} ${labelText}`);
146
+ }
147
+ else {
148
+ writeLine(`${ANSI.cyan}│${ANSI.reset} ${ANSI.dim}○${ANSI.reset} ${labelText}`);
149
+ }
150
+ }
151
+ const windowHint = items.length > visibleItems.length
152
+ ? ` (${windowStart + 1}-${windowEnd}/${items.length})`
153
+ : '';
154
+ const helpText = options.help ?? `Up/Down to select | Enter: confirm | Esc: back${windowHint}`;
155
+ const help = truncateAnsi(helpText, Math.max(1, columns - 6));
156
+ writeLine(`${ANSI.cyan}│${ANSI.reset} ${ANSI.dim}${help}${ANSI.reset}`);
157
+ writeLine(`${ANSI.cyan}└${ANSI.reset}`);
158
+ if (!shouldClearScreen && previousRenderedLines > linesWritten) {
159
+ const extra = previousRenderedLines - linesWritten;
160
+ for (let i = 0; i < extra; i++) {
161
+ writeLine("");
162
+ }
163
+ }
164
+ renderedLines = linesWritten;
165
+ };
166
+ return new Promise((resolve) => {
167
+ const wasRaw = stdin.isRaw ?? false;
168
+ const cleanup = () => {
169
+ if (isCleanedUp)
170
+ return;
171
+ isCleanedUp = true;
172
+ if (escapeTimeout) {
173
+ clearTimeout(escapeTimeout);
174
+ escapeTimeout = null;
175
+ }
176
+ try {
177
+ stdin.removeListener('data', onKey);
178
+ stdin.setRawMode(wasRaw);
179
+ stdin.pause();
180
+ stdout.write(ANSI.show);
181
+ }
182
+ catch {
183
+ // Intentionally ignored - cleanup is best-effort
184
+ }
185
+ process.removeListener('SIGINT', onSignal);
186
+ process.removeListener('SIGTERM', onSignal);
187
+ };
188
+ const onSignal = () => {
189
+ cleanup();
190
+ resolve(null);
191
+ };
192
+ const finishWithValue = (value) => {
193
+ cleanup();
194
+ resolve(value);
195
+ };
196
+ const findNextSelectable = (from, direction) => {
197
+ if (items.length === 0)
198
+ return from;
199
+ let next = from;
200
+ do {
201
+ next = (next + direction + items.length) % items.length;
202
+ } while (items[next]?.disabled || items[next]?.separator || items[next]?.kind === 'heading');
203
+ return next;
204
+ };
205
+ const onKey = (data) => {
206
+ if (escapeTimeout) {
207
+ clearTimeout(escapeTimeout);
208
+ escapeTimeout = null;
209
+ }
210
+ const action = parseKey(data);
211
+ switch (action) {
212
+ case 'up':
213
+ cursor = findNextSelectable(cursor, -1);
214
+ render();
215
+ return;
216
+ case 'down':
217
+ cursor = findNextSelectable(cursor, 1);
218
+ render();
219
+ return;
220
+ case 'enter':
221
+ finishWithValue(items[cursor]?.value ?? null);
222
+ return;
223
+ case 'escape':
224
+ finishWithValue(null);
225
+ return;
226
+ case 'escape-start':
227
+ // Bare escape byte - wait to see if more bytes coming (arrow key sequence)
228
+ escapeTimeout = setTimeout(() => {
229
+ finishWithValue(null);
230
+ }, ESCAPE_TIMEOUT_MS);
231
+ return;
232
+ default:
233
+ // Unknown key - ignore
234
+ return;
235
+ }
236
+ };
237
+ process.once('SIGINT', onSignal);
238
+ process.once('SIGTERM', onSignal);
239
+ try {
240
+ stdin.setRawMode(true);
241
+ }
242
+ catch {
243
+ // Failed to enable raw mode - cleanup and return null
244
+ cleanup();
245
+ resolve(null);
246
+ return;
247
+ }
248
+ stdin.resume();
249
+ stdout.write(ANSI.hide);
250
+ render();
251
+ stdin.on('data', onKey);
252
+ });
253
+ }
254
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../../src/plugin/ui/select.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "@cortexkit/antigravity-auth-core";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/plugin/version.ts"],"names":[],"mappings":"AACA,cAAc,kCAAkC,CAAA"}
@@ -0,0 +1,3 @@
1
+ // Re-export shim: version moved to @cortexkit/antigravity-auth-core.
2
+ export * from "@cortexkit/antigravity-auth-core";
3
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/plugin/version.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,cAAc,kCAAkC,CAAA"}