@cortexkit/opencode-antigravity-auth 2.2.1 → 3.0.1

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 (957) hide show
  1. package/README.md +100 -92
  2. package/dist/cli.js +18476 -812
  3. package/dist/cli.js.map +4 -4
  4. package/dist/cli.meta.json +4100 -0
  5. package/dist/index.js +40602 -15857
  6. package/dist/index.js.map +4 -4
  7. package/dist/index.meta.json +6978 -0
  8. package/dist/server.js +51220 -0
  9. package/dist/server.js.map +7 -0
  10. package/dist/server.meta.json +7313 -0
  11. package/dist/src/cli.d.ts +46 -1
  12. package/dist/src/cli.d.ts.map +1 -1
  13. package/dist/src/cli.js +207 -2
  14. package/dist/src/cli.js.map +1 -1
  15. package/dist/src/common-auth-embedded/NOTICE.txt +21 -0
  16. package/dist/src/common-auth-embedded/auth-menu/accounts.d.ts +97 -0
  17. package/dist/src/common-auth-embedded/auth-menu/accounts.js +387 -0
  18. package/dist/src/common-auth-embedded/auth-menu/ansi.d.ts +26 -0
  19. package/dist/src/common-auth-embedded/auth-menu/ansi.js +98 -0
  20. package/dist/src/common-auth-embedded/auth-menu/confirm.d.ts +7 -0
  21. package/dist/src/common-auth-embedded/auth-menu/confirm.js +21 -0
  22. package/dist/src/common-auth-embedded/auth-menu/doctor.d.ts +52 -0
  23. package/dist/src/common-auth-embedded/auth-menu/doctor.js +81 -0
  24. package/dist/src/common-auth-embedded/auth-menu/index.d.ts +17 -0
  25. package/dist/src/common-auth-embedded/auth-menu/index.js +12 -0
  26. package/dist/src/common-auth-embedded/auth-menu/login.d.ts +55 -0
  27. package/dist/src/common-auth-embedded/auth-menu/login.js +83 -0
  28. package/dist/src/common-auth-embedded/auth-menu/menu.d.ts +59 -0
  29. package/dist/src/common-auth-embedded/auth-menu/menu.js +73 -0
  30. package/dist/src/common-auth-embedded/auth-menu/opencode-v1.d.ts +49 -0
  31. package/dist/src/common-auth-embedded/auth-menu/opencode-v1.js +47 -0
  32. package/dist/src/common-auth-embedded/auth-menu/select.d.ts +21 -0
  33. package/dist/src/common-auth-embedded/auth-menu/select.js +159 -0
  34. package/dist/src/common-auth-embedded/auth-menu/terminal.d.ts +43 -0
  35. package/dist/src/common-auth-embedded/auth-menu/terminal.js +19 -0
  36. package/dist/src/common-auth-embedded/claustrum/consumer.d.ts +102 -0
  37. package/dist/src/common-auth-embedded/claustrum/consumer.js +298 -0
  38. package/dist/src/common-auth-embedded/claustrum/custody.d.ts +175 -0
  39. package/dist/src/common-auth-embedded/claustrum/custody.js +354 -0
  40. package/dist/src/common-auth-embedded/claustrum/enrollment.d.ts +158 -0
  41. package/dist/src/common-auth-embedded/claustrum/enrollment.js +759 -0
  42. package/dist/src/common-auth-embedded/claustrum/errors.d.ts +16 -0
  43. package/dist/src/common-auth-embedded/claustrum/errors.js +8 -0
  44. package/dist/src/common-auth-embedded/claustrum/host-slot.d.ts +39 -0
  45. package/dist/src/common-auth-embedded/claustrum/host-slot.js +72 -0
  46. package/dist/src/common-auth-embedded/claustrum/index.d.ts +18 -0
  47. package/dist/src/common-auth-embedded/claustrum/index.js +22 -0
  48. package/dist/src/common-auth-embedded/claustrum/interlock.d.ts +27 -0
  49. package/dist/src/common-auth-embedded/claustrum/interlock.js +29 -0
  50. package/dist/src/common-auth-embedded/claustrum/roster.d.ts +208 -0
  51. package/dist/src/common-auth-embedded/claustrum/roster.js +536 -0
  52. package/dist/src/common-auth-embedded/commands/builtins.d.ts +71 -0
  53. package/dist/src/common-auth-embedded/commands/builtins.js +534 -0
  54. package/dist/src/common-auth-embedded/commands/index.d.ts +10 -0
  55. package/dist/src/common-auth-embedded/commands/index.js +5 -0
  56. package/dist/src/common-auth-embedded/commands/menu.d.ts +61 -0
  57. package/dist/src/common-auth-embedded/commands/menu.js +300 -0
  58. package/dist/src/common-auth-embedded/commands/model.d.ts +238 -0
  59. package/dist/src/common-auth-embedded/commands/model.js +16 -0
  60. package/dist/src/common-auth-embedded/commands/pi.d.ts +23 -0
  61. package/dist/src/common-auth-embedded/commands/pi.js +206 -0
  62. package/dist/src/common-auth-embedded/commands/seam.d.ts +72 -0
  63. package/dist/src/common-auth-embedded/commands/seam.js +301 -0
  64. package/dist/src/common-auth-embedded/fs/atomic-write.d.ts +20 -0
  65. package/dist/src/common-auth-embedded/fs/atomic-write.js +80 -0
  66. package/dist/src/common-auth-embedded/fs/index.d.ts +7 -0
  67. package/dist/src/common-auth-embedded/fs/index.js +6 -0
  68. package/dist/src/common-auth-embedded/fs/lock-constants.d.ts +14 -0
  69. package/dist/src/common-auth-embedded/fs/lock-constants.js +14 -0
  70. package/dist/src/common-auth-embedded/fs/refresh-file-lock.d.ts +33 -0
  71. package/dist/src/common-auth-embedded/fs/refresh-file-lock.js +501 -0
  72. package/dist/src/common-auth-embedded/fs/with-lock.d.ts +33 -0
  73. package/dist/src/common-auth-embedded/fs/with-lock.js +48 -0
  74. package/dist/src/common-auth-embedded/logger/capture-sink.d.ts +14 -0
  75. package/dist/src/common-auth-embedded/logger/capture-sink.js +13 -0
  76. package/dist/src/common-auth-embedded/logger/engine.d.ts +100 -0
  77. package/dist/src/common-auth-embedded/logger/engine.js +246 -0
  78. package/dist/src/common-auth-embedded/logger/index.d.ts +6 -0
  79. package/dist/src/common-auth-embedded/logger/index.js +3 -0
  80. package/dist/src/common-auth-embedded/logger/redact.d.ts +11 -0
  81. package/dist/src/common-auth-embedded/logger/redact.js +83 -0
  82. package/dist/src/common-auth-embedded/opencode2/errors.d.ts +25 -0
  83. package/dist/src/common-auth-embedded/opencode2/errors.js +15 -0
  84. package/dist/src/common-auth-embedded/opencode2/index.d.ts +8 -0
  85. package/dist/src/common-auth-embedded/opencode2/index.js +4 -0
  86. package/dist/src/common-auth-embedded/opencode2/install.d.ts +55 -0
  87. package/dist/src/common-auth-embedded/opencode2/install.js +886 -0
  88. package/dist/src/common-auth-embedded/opencode2/integration.d.ts +112 -0
  89. package/dist/src/common-auth-embedded/opencode2/integration.js +143 -0
  90. package/dist/src/common-auth-embedded/opencode2/sse.d.ts +12 -0
  91. package/dist/src/common-auth-embedded/opencode2/sse.js +60 -0
  92. package/dist/src/common-auth-embedded/opencode2/types.d.ts +413 -0
  93. package/dist/src/common-auth-embedded/pi-slot/index.d.ts +3 -0
  94. package/dist/src/common-auth-embedded/pi-slot/index.js +2 -0
  95. package/dist/src/common-auth-embedded/pi-slot/lock.js +212 -0
  96. package/dist/src/common-auth-embedded/pi-slot/slot.d.ts +49 -0
  97. package/dist/src/common-auth-embedded/pi-slot/slot.js +383 -0
  98. package/dist/src/common-auth-embedded/quota/codec.d.ts +11 -0
  99. package/dist/src/common-auth-embedded/quota/codec.js +12 -0
  100. package/dist/src/common-auth-embedded/quota/format.d.ts +46 -0
  101. package/dist/src/common-auth-embedded/quota/format.js +138 -0
  102. package/dist/src/common-auth-embedded/quota/index.d.ts +10 -0
  103. package/dist/src/common-auth-embedded/quota/index.js +5 -0
  104. package/dist/src/common-auth-embedded/quota/map.d.ts +63 -0
  105. package/dist/src/common-auth-embedded/quota/map.js +105 -0
  106. package/dist/src/common-auth-embedded/quota/merge.d.ts +48 -0
  107. package/dist/src/common-auth-embedded/quota/merge.js +162 -0
  108. package/dist/src/common-auth-embedded/quota/projection.d.ts +64 -0
  109. package/dist/src/common-auth-embedded/quota/projection.js +134 -0
  110. package/dist/src/common-auth-embedded/routing/admission.d.ts +93 -0
  111. package/dist/src/common-auth-embedded/routing/admission.js +142 -0
  112. package/dist/src/common-auth-embedded/routing/index.d.ts +8 -0
  113. package/dist/src/common-auth-embedded/routing/index.js +4 -0
  114. package/dist/src/common-auth-embedded/routing/ordered.d.ts +47 -0
  115. package/dist/src/common-auth-embedded/routing/ordered.js +58 -0
  116. package/dist/src/common-auth-embedded/routing/pins.d.ts +22 -0
  117. package/dist/src/common-auth-embedded/routing/pins.js +34 -0
  118. package/dist/src/common-auth-embedded/routing/sticky.d.ts +158 -0
  119. package/dist/src/common-auth-embedded/routing/sticky.js +339 -0
  120. package/dist/src/common-auth-embedded/rpc/client.d.ts +3 -0
  121. package/dist/src/common-auth-embedded/rpc/client.js +2 -0
  122. package/dist/src/common-auth-embedded/rpc/index.d.ts +10 -0
  123. package/dist/src/common-auth-embedded/rpc/index.js +5 -0
  124. package/dist/src/common-auth-embedded/rpc/notifications.d.ts +73 -0
  125. package/dist/src/common-auth-embedded/rpc/notifications.js +100 -0
  126. package/dist/src/common-auth-embedded/rpc/port-file.d.ts +33 -0
  127. package/dist/src/common-auth-embedded/rpc/port-file.js +217 -0
  128. package/dist/src/common-auth-embedded/rpc/rpc-client.d.ts +30 -0
  129. package/dist/src/common-auth-embedded/rpc/rpc-client.js +253 -0
  130. package/dist/src/common-auth-embedded/rpc/rpc-server.d.ts +58 -0
  131. package/dist/src/common-auth-embedded/rpc/rpc-server.js +311 -0
  132. package/dist/src/common-auth-embedded/rpc/server-registry.d.ts +11 -0
  133. package/dist/src/common-auth-embedded/rpc/server-registry.js +47 -0
  134. package/dist/src/common-auth-embedded/source-output.json +1326 -0
  135. package/dist/src/common-auth-embedded/store/attribution.d.ts +28 -0
  136. package/dist/src/common-auth-embedded/store/attribution.js +60 -0
  137. package/dist/src/common-auth-embedded/store/errors.d.ts +55 -0
  138. package/dist/src/common-auth-embedded/store/errors.js +38 -0
  139. package/dist/src/common-auth-embedded/store/hooks.d.ts +12 -0
  140. package/dist/src/common-auth-embedded/store/hooks.js +34 -0
  141. package/dist/src/common-auth-embedded/store/identity.d.ts +39 -0
  142. package/dist/src/common-auth-embedded/store/identity.js +79 -0
  143. package/dist/src/common-auth-embedded/store/index.d.ts +21 -0
  144. package/dist/src/common-auth-embedded/store/index.js +7 -0
  145. package/dist/src/common-auth-embedded/store/mutate.d.ts +189 -0
  146. package/dist/src/common-auth-embedded/store/mutate.js +500 -0
  147. package/dist/src/common-auth-embedded/store/pool.d.ts +196 -0
  148. package/dist/src/common-auth-embedded/store/pool.js +120 -0
  149. package/dist/src/common-auth-embedded/store/provider-state.d.ts +131 -0
  150. package/dist/src/common-auth-embedded/store/provider-state.js +226 -0
  151. package/dist/src/common-auth-embedded/store/publication.d.ts +47 -0
  152. package/dist/src/common-auth-embedded/store/publication.js +304 -0
  153. package/dist/src/common-auth-embedded/store/pull.d.ts +36 -0
  154. package/dist/src/common-auth-embedded/store/pull.js +143 -0
  155. package/dist/src/common-auth-embedded/store/refresh-lock.d.ts +63 -0
  156. package/dist/src/common-auth-embedded/store/refresh-lock.js +136 -0
  157. package/dist/src/common-auth-embedded/store/refresh.d.ts +72 -0
  158. package/dist/src/common-auth-embedded/store/refresh.js +225 -0
  159. package/dist/src/common-auth-embedded/store/reserved.js +13 -0
  160. package/dist/src/common-auth-embedded/store/rows.d.ts +313 -0
  161. package/dist/src/common-auth-embedded/store/rows.js +1258 -0
  162. package/dist/src/common-auth-embedded/store/runtime.d.ts +36 -0
  163. package/dist/src/common-auth-embedded/store/runtime.js +68 -0
  164. package/dist/src/common-auth-embedded/store/schema.d.ts +443 -0
  165. package/dist/src/common-auth-embedded/store/schema.js +754 -0
  166. package/dist/src/common-auth-embedded/store/settings.d.ts +63 -0
  167. package/dist/src/common-auth-embedded/store/settings.js +120 -0
  168. package/dist/src/common-auth-embedded/store/torn.d.ts +78 -0
  169. package/dist/src/common-auth-embedded/store/torn.js +294 -0
  170. package/dist/src/common-auth-embedded/tui/index.d.ts +8 -0
  171. package/dist/src/common-auth-embedded/tui/index.js +21 -0
  172. package/dist/src/common-auth-embedded/util/any-signal.js +42 -0
  173. package/dist/src/constants.d.ts +1 -0
  174. package/dist/src/constants.d.ts.map +1 -1
  175. package/dist/src/constants.js +4 -0
  176. package/dist/src/constants.js.map +1 -1
  177. package/dist/src/ga/proxy-guard.d.ts +120 -0
  178. package/dist/src/ga/proxy-guard.d.ts.map +1 -0
  179. package/dist/src/ga/proxy-guard.js +269 -0
  180. package/dist/src/ga/proxy-guard.js.map +1 -0
  181. package/dist/src/ga/rpc/protocol.d.ts +504 -0
  182. package/dist/src/ga/rpc/protocol.d.ts.map +1 -0
  183. package/dist/src/ga/rpc/protocol.js +1278 -0
  184. package/dist/src/ga/rpc/protocol.js.map +1 -0
  185. package/dist/src/ga/server/auth.d.ts +9 -0
  186. package/dist/src/ga/server/auth.d.ts.map +1 -0
  187. package/dist/src/ga/server/auth.js +37 -0
  188. package/dist/src/ga/server/auth.js.map +1 -0
  189. package/dist/src/ga/server/index.d.ts +576 -0
  190. package/dist/src/ga/server/index.d.ts.map +1 -0
  191. package/dist/src/ga/server/index.js +1012 -0
  192. package/dist/src/ga/server/index.js.map +1 -0
  193. package/dist/src/ga/tui/host-ga.d.ts +350 -0
  194. package/dist/src/ga/tui/host-ga.d.ts.map +1 -0
  195. package/dist/src/ga/tui/host-ga.js +1242 -0
  196. package/dist/src/ga/tui/host-ga.js.map +1 -0
  197. package/dist/src/logging/provider-key-policy.d.ts +9 -0
  198. package/dist/src/logging/provider-key-policy.d.ts.map +1 -0
  199. package/dist/src/logging/provider-key-policy.js +11 -0
  200. package/dist/src/logging/provider-key-policy.js.map +1 -0
  201. package/dist/src/plugin/account-access.d.ts +130 -15
  202. package/dist/src/plugin/account-access.d.ts.map +1 -1
  203. package/dist/src/plugin/account-access.js +331 -129
  204. package/dist/src/plugin/account-access.js.map +1 -1
  205. package/dist/src/plugin/account-blocks.d.ts +102 -0
  206. package/dist/src/plugin/account-blocks.d.ts.map +1 -0
  207. package/dist/src/plugin/account-blocks.js +196 -0
  208. package/dist/src/plugin/account-blocks.js.map +1 -0
  209. package/dist/src/plugin/accounts.d.ts +85 -1
  210. package/dist/src/plugin/accounts.d.ts.map +1 -1
  211. package/dist/src/plugin/accounts.js +127 -3
  212. package/dist/src/plugin/accounts.js.map +1 -1
  213. package/dist/src/plugin/auth-loader.d.ts +69 -5
  214. package/dist/src/plugin/auth-loader.d.ts.map +1 -1
  215. package/dist/src/plugin/auth-loader.js +355 -52
  216. package/dist/src/plugin/auth-loader.js.map +1 -1
  217. package/dist/src/plugin/background-quota-refresh.d.ts +54 -8
  218. package/dist/src/plugin/background-quota-refresh.d.ts.map +1 -1
  219. package/dist/src/plugin/background-quota-refresh.js +81 -24
  220. package/dist/src/plugin/background-quota-refresh.js.map +1 -1
  221. package/dist/src/plugin/cache/index.d.ts +1 -1
  222. package/dist/src/plugin/cache/index.d.ts.map +1 -1
  223. package/dist/src/plugin/cache/index.js +1 -1
  224. package/dist/src/plugin/cache/index.js.map +1 -1
  225. package/dist/src/plugin/cache/signature-cache.d.ts +55 -10
  226. package/dist/src/plugin/cache/signature-cache.d.ts.map +1 -1
  227. package/dist/src/plugin/cache/signature-cache.js +100 -41
  228. package/dist/src/plugin/cache/signature-cache.js.map +1 -1
  229. package/dist/src/plugin/cache.d.ts +80 -16
  230. package/dist/src/plugin/cache.d.ts.map +1 -1
  231. package/dist/src/plugin/cache.js +339 -200
  232. package/dist/src/plugin/cache.js.map +1 -1
  233. package/dist/src/plugin/catalog.d.ts +4 -18
  234. package/dist/src/plugin/catalog.d.ts.map +1 -1
  235. package/dist/src/plugin/catalog.js +11 -41
  236. package/dist/src/plugin/catalog.js.map +1 -1
  237. package/dist/src/plugin/command-apply.d.ts +58 -0
  238. package/dist/src/plugin/command-apply.d.ts.map +1 -0
  239. package/dist/src/plugin/command-apply.js +168 -0
  240. package/dist/src/plugin/command-apply.js.map +1 -0
  241. package/dist/src/plugin/command-data.d.ts +1 -0
  242. package/dist/src/plugin/command-data.d.ts.map +1 -1
  243. package/dist/src/plugin/command-data.js +2 -0
  244. package/dist/src/plugin/command-data.js.map +1 -1
  245. package/dist/src/plugin/commands.d.ts +142 -132
  246. package/dist/src/plugin/commands.d.ts.map +1 -1
  247. package/dist/src/plugin/commands.js +214 -686
  248. package/dist/src/plugin/commands.js.map +1 -1
  249. package/dist/src/plugin/config/index.d.ts +1 -1
  250. package/dist/src/plugin/config/index.d.ts.map +1 -1
  251. package/dist/src/plugin/config/index.js +1 -1
  252. package/dist/src/plugin/config/index.js.map +1 -1
  253. package/dist/src/plugin/config/loader.d.ts +37 -1
  254. package/dist/src/plugin/config/loader.d.ts.map +1 -1
  255. package/dist/src/plugin/config/loader.js +64 -9
  256. package/dist/src/plugin/config/loader.js.map +1 -1
  257. package/dist/src/plugin/config/operator-settings-schema.d.ts +2 -2
  258. package/dist/src/plugin/config/schema.d.ts +2 -2
  259. package/dist/src/plugin/config/writer.d.ts +7 -0
  260. package/dist/src/plugin/config/writer.d.ts.map +1 -1
  261. package/dist/src/plugin/config/writer.js +10 -1
  262. package/dist/src/plugin/config/writer.js.map +1 -1
  263. package/dist/src/plugin/debug.d.ts +72 -29
  264. package/dist/src/plugin/debug.d.ts.map +1 -1
  265. package/dist/src/plugin/debug.js +353 -239
  266. package/dist/src/plugin/debug.js.map +1 -1
  267. package/dist/src/plugin/fetch/retry-state.d.ts +1 -1
  268. package/dist/src/plugin/fetch/retry-state.d.ts.map +1 -1
  269. package/dist/src/plugin/fetch/retry-state.js.map +1 -1
  270. package/dist/src/plugin/fetch-interceptor.d.ts +66 -11
  271. package/dist/src/plugin/fetch-interceptor.d.ts.map +1 -1
  272. package/dist/src/plugin/fetch-interceptor.js +228 -1352
  273. package/dist/src/plugin/fetch-interceptor.js.map +1 -1
  274. package/dist/src/plugin/fetch-routing.d.ts +7 -2
  275. package/dist/src/plugin/fetch-routing.d.ts.map +1 -1
  276. package/dist/src/plugin/fetch-routing.js +7 -4
  277. package/dist/src/plugin/fetch-routing.js.map +1 -1
  278. package/dist/src/plugin/ga-location-services.d.ts +389 -0
  279. package/dist/src/plugin/ga-location-services.d.ts.map +1 -0
  280. package/dist/src/plugin/ga-location-services.js +1838 -0
  281. package/dist/src/plugin/ga-location-services.js.map +1 -0
  282. package/dist/src/plugin/gemini-dump.d.ts +37 -12
  283. package/dist/src/plugin/gemini-dump.d.ts.map +1 -1
  284. package/dist/src/plugin/gemini-dump.js +42 -21
  285. package/dist/src/plugin/gemini-dump.js.map +1 -1
  286. package/dist/src/plugin/google-search-tool.d.ts +2 -1
  287. package/dist/src/plugin/google-search-tool.d.ts.map +1 -1
  288. package/dist/src/plugin/google-search-tool.js +4 -1
  289. package/dist/src/plugin/google-search-tool.js.map +1 -1
  290. package/dist/src/plugin/index.d.ts.map +1 -1
  291. package/dist/src/plugin/index.js +505 -141
  292. package/dist/src/plugin/index.js.map +1 -1
  293. package/dist/src/plugin/killswitch.d.ts +1 -2
  294. package/dist/src/plugin/killswitch.d.ts.map +1 -1
  295. package/dist/src/plugin/lifecycle.d.ts +24 -1
  296. package/dist/src/plugin/lifecycle.d.ts.map +1 -1
  297. package/dist/src/plugin/lifecycle.js +95 -8
  298. package/dist/src/plugin/lifecycle.js.map +1 -1
  299. package/dist/src/plugin/logger.d.ts +61 -10
  300. package/dist/src/plugin/logger.d.ts.map +1 -1
  301. package/dist/src/plugin/logger.js +134 -63
  302. package/dist/src/plugin/logger.js.map +1 -1
  303. package/dist/src/plugin/neutral-types.d.ts +42 -0
  304. package/dist/src/plugin/neutral-types.d.ts.map +1 -0
  305. package/dist/src/plugin/neutral-types.js +12 -0
  306. package/dist/src/plugin/neutral-types.js.map +1 -0
  307. package/dist/src/plugin/oauth-methods.d.ts +2 -1
  308. package/dist/src/plugin/oauth-methods.d.ts.map +1 -1
  309. package/dist/src/plugin/oauth-methods.js +173 -88
  310. package/dist/src/plugin/oauth-methods.js.map +1 -1
  311. package/dist/src/plugin/operator-settings.d.ts +34 -0
  312. package/dist/src/plugin/operator-settings.d.ts.map +1 -1
  313. package/dist/src/plugin/operator-settings.js +105 -2
  314. package/dist/src/plugin/operator-settings.js.map +1 -1
  315. package/dist/src/plugin/persist-account-pool.d.ts +63 -2
  316. package/dist/src/plugin/persist-account-pool.d.ts.map +1 -1
  317. package/dist/src/plugin/persist-account-pool.js +125 -2
  318. package/dist/src/plugin/persist-account-pool.js.map +1 -1
  319. package/dist/src/plugin/quota.d.ts +335 -35
  320. package/dist/src/plugin/quota.d.ts.map +1 -1
  321. package/dist/src/plugin/quota.js +825 -95
  322. package/dist/src/plugin/quota.js.map +1 -1
  323. package/dist/src/plugin/refresh-queue.d.ts +35 -5
  324. package/dist/src/plugin/refresh-queue.d.ts.map +1 -1
  325. package/dist/src/plugin/refresh-queue.js +50 -16
  326. package/dist/src/plugin/refresh-queue.js.map +1 -1
  327. package/dist/src/plugin/request-helpers.d.ts +30 -5
  328. package/dist/src/plugin/request-helpers.d.ts.map +1 -1
  329. package/dist/src/plugin/request-helpers.js +82 -17
  330. package/dist/src/plugin/request-helpers.js.map +1 -1
  331. package/dist/src/plugin/request.d.ts +63 -15
  332. package/dist/src/plugin/request.d.ts.map +1 -1
  333. package/dist/src/plugin/request.js +229 -65
  334. package/dist/src/plugin/request.js.map +1 -1
  335. package/dist/src/plugin/session-context.d.ts.map +1 -1
  336. package/dist/src/plugin/session-context.js +5 -2
  337. package/dist/src/plugin/session-context.js.map +1 -1
  338. package/dist/src/plugin/shared/local-grant.d.ts +26 -0
  339. package/dist/src/plugin/shared/local-grant.d.ts.map +1 -0
  340. package/dist/src/plugin/shared/local-grant.js +19 -0
  341. package/dist/src/plugin/shared/local-grant.js.map +1 -0
  342. package/dist/src/plugin/shared/request-cancellation.d.ts +12 -0
  343. package/dist/src/plugin/shared/request-cancellation.d.ts.map +1 -0
  344. package/dist/src/plugin/shared/request-cancellation.js +118 -0
  345. package/dist/src/plugin/shared/request-cancellation.js.map +1 -0
  346. package/dist/src/plugin/shared/request-services.d.ts +375 -0
  347. package/dist/src/plugin/shared/request-services.d.ts.map +1 -0
  348. package/dist/src/plugin/shared/request-services.js +1752 -0
  349. package/dist/src/plugin/shared/request-services.js.map +1 -0
  350. package/dist/src/plugin/shared/runtime.d.ts +217 -0
  351. package/dist/src/plugin/shared/runtime.d.ts.map +1 -0
  352. package/dist/src/plugin/shared/runtime.js +345 -0
  353. package/dist/src/plugin/shared/runtime.js.map +1 -0
  354. package/dist/src/plugin/shared/source-sidebar.d.ts +15 -0
  355. package/dist/src/plugin/shared/source-sidebar.d.ts.map +1 -0
  356. package/dist/src/plugin/shared/source-sidebar.js +41 -0
  357. package/dist/src/plugin/shared/source-sidebar.js.map +1 -0
  358. package/dist/src/plugin/shared/vault-menu.d.ts +5 -0
  359. package/dist/src/plugin/shared/vault-menu.d.ts.map +1 -0
  360. package/dist/src/plugin/shared/vault-menu.js +49 -0
  361. package/dist/src/plugin/shared/vault-menu.js.map +1 -0
  362. package/dist/src/plugin/shared/vault-request-credentials.d.ts +168 -0
  363. package/dist/src/plugin/shared/vault-request-credentials.d.ts.map +1 -0
  364. package/dist/src/plugin/shared/vault-request-credentials.js +485 -0
  365. package/dist/src/plugin/shared/vault-request-credentials.js.map +1 -0
  366. package/dist/src/plugin/storage.d.ts +127 -1
  367. package/dist/src/plugin/storage.d.ts.map +1 -1
  368. package/dist/src/plugin/storage.js +188 -3
  369. package/dist/src/plugin/storage.js.map +1 -1
  370. package/dist/src/plugin/token.d.ts +23 -1
  371. package/dist/src/plugin/token.d.ts.map +1 -1
  372. package/dist/src/plugin/token.js +117 -58
  373. package/dist/src/plugin/token.js.map +1 -1
  374. package/dist/src/plugin/ui/quota-status.d.ts +1 -10
  375. package/dist/src/plugin/ui/quota-status.d.ts.map +1 -1
  376. package/dist/src/plugin/ui/quota-status.js +6 -42
  377. package/dist/src/plugin/ui/quota-status.js.map +1 -1
  378. package/dist/src/plugin/vault-activation.d.ts +11 -0
  379. package/dist/src/plugin/vault-activation.d.ts.map +1 -0
  380. package/dist/src/plugin/vault-activation.js +53 -0
  381. package/dist/src/plugin/vault-activation.js.map +1 -0
  382. package/dist/src/plugin/vault-custody.d.ts +131 -0
  383. package/dist/src/plugin/vault-custody.d.ts.map +1 -0
  384. package/dist/src/plugin/vault-custody.js +381 -0
  385. package/dist/src/plugin/vault-custody.js.map +1 -0
  386. package/dist/src/quota-presentation.d.ts +18 -0
  387. package/dist/src/quota-presentation.d.ts.map +1 -0
  388. package/dist/src/quota-presentation.js +58 -0
  389. package/dist/src/quota-presentation.js.map +1 -0
  390. package/dist/src/rpc/notifications.d.ts +2 -2
  391. package/dist/src/rpc/notifications.d.ts.map +1 -1
  392. package/dist/src/rpc/notifications.js +1 -1
  393. package/dist/src/rpc/notifications.js.map +1 -1
  394. package/dist/src/rpc/port-file.d.ts +2 -12
  395. package/dist/src/rpc/port-file.d.ts.map +1 -1
  396. package/dist/src/rpc/port-file.js +5 -107
  397. package/dist/src/rpc/port-file.js.map +1 -1
  398. package/dist/src/rpc/protocol.d.ts +47 -16
  399. package/dist/src/rpc/protocol.d.ts.map +1 -1
  400. package/dist/src/rpc/rpc-client.d.ts +27 -3
  401. package/dist/src/rpc/rpc-client.d.ts.map +1 -1
  402. package/dist/src/rpc/rpc-client.js +55 -45
  403. package/dist/src/rpc/rpc-client.js.map +1 -1
  404. package/dist/src/rpc/rpc-server.d.ts +13 -2
  405. package/dist/src/rpc/rpc-server.d.ts.map +1 -1
  406. package/dist/src/rpc/rpc-server.js +38 -212
  407. package/dist/src/rpc/rpc-server.js.map +1 -1
  408. package/dist/src/server.d.ts +30 -0
  409. package/dist/src/server.d.ts.map +1 -0
  410. package/dist/src/server.js +29 -0
  411. package/dist/src/server.js.map +1 -0
  412. package/dist/src/sidebar-projection.d.ts +102 -0
  413. package/dist/src/sidebar-projection.d.ts.map +1 -0
  414. package/dist/src/sidebar-projection.js +146 -0
  415. package/dist/src/sidebar-projection.js.map +1 -0
  416. package/dist/src/sidebar-state.d.ts +13 -5
  417. package/dist/src/sidebar-state.d.ts.map +1 -1
  418. package/dist/src/sidebar-state.js +49 -16
  419. package/dist/src/sidebar-state.js.map +1 -1
  420. package/dist/src/tui/command-dialogs.d.ts +58 -52
  421. package/dist/src/tui/command-dialogs.d.ts.map +1 -1
  422. package/dist/src/tui/command-dialogs.js +379 -571
  423. package/dist/src/tui/command-dialogs.js.map +1 -1
  424. package/dist/src/tui/file-logger.d.ts +2 -3
  425. package/dist/src/tui/file-logger.d.ts.map +1 -1
  426. package/dist/src/tui/file-logger.js +21 -7
  427. package/dist/src/tui/file-logger.js.map +1 -1
  428. package/dist/src/tui/host-api.d.ts +196 -0
  429. package/dist/src/tui/host-api.d.ts.map +1 -0
  430. package/dist/src/tui/host-api.js +357 -0
  431. package/dist/src/tui/host-api.js.map +1 -0
  432. package/dist/src/tui/host-v1.d.ts +60 -0
  433. package/dist/src/tui/host-v1.d.ts.map +1 -0
  434. package/dist/src/tui/host-v1.js +147 -0
  435. package/dist/src/tui/host-v1.js.map +1 -0
  436. package/dist/src/tui/vault-setup.d.ts +98 -0
  437. package/dist/src/tui/vault-setup.d.ts.map +1 -0
  438. package/dist/src/tui/vault-setup.js +198 -0
  439. package/dist/src/tui/vault-setup.js.map +1 -0
  440. package/dist/src/tui.d.ts +4 -11
  441. package/dist/src/tui.d.ts.map +1 -1
  442. package/dist/src/tui.js +33 -75
  443. package/dist/src/tui.js.map +1 -1
  444. package/dist/tui-build-map.json +380 -0
  445. package/dist/tui-ga-build-map.json +187 -0
  446. package/dist/types/src/antigravity/oauth.d.ts +2 -0
  447. package/dist/types/src/antigravity/oauth.d.ts.map +1 -0
  448. package/dist/types/src/cli.d.ts +66 -0
  449. package/dist/types/src/cli.d.ts.map +1 -0
  450. package/dist/types/src/common-auth-embedded/commands/builtins.d.ts +71 -0
  451. package/dist/types/src/common-auth-embedded/commands/index.d.ts +10 -0
  452. package/dist/types/src/common-auth-embedded/commands/menu.d.ts +61 -0
  453. package/dist/types/src/common-auth-embedded/commands/model.d.ts +238 -0
  454. package/dist/types/src/common-auth-embedded/commands/pi.d.ts +23 -0
  455. package/dist/types/src/common-auth-embedded/commands/seam.d.ts +72 -0
  456. package/dist/types/src/common-auth-embedded/fs/refresh-file-lock.d.ts +33 -0
  457. package/dist/types/src/common-auth-embedded/logger/capture-sink.d.ts +14 -0
  458. package/dist/types/src/common-auth-embedded/logger/engine.d.ts +100 -0
  459. package/dist/types/src/common-auth-embedded/logger/index.d.ts +6 -0
  460. package/dist/types/src/common-auth-embedded/logger/redact.d.ts +11 -0
  461. package/dist/types/src/common-auth-embedded/quota/codec.d.ts +11 -0
  462. package/dist/types/src/common-auth-embedded/quota/format.d.ts +46 -0
  463. package/dist/types/src/common-auth-embedded/quota/index.d.ts +10 -0
  464. package/dist/types/src/common-auth-embedded/quota/map.d.ts +63 -0
  465. package/dist/types/src/common-auth-embedded/quota/merge.d.ts +48 -0
  466. package/dist/types/src/common-auth-embedded/quota/projection.d.ts +64 -0
  467. package/dist/types/src/common-auth-embedded/store/attribution.d.ts +28 -0
  468. package/dist/types/src/common-auth-embedded/store/errors.d.ts +55 -0
  469. package/dist/types/src/common-auth-embedded/store/hooks.d.ts +12 -0
  470. package/dist/types/src/common-auth-embedded/store/identity.d.ts +39 -0
  471. package/dist/types/src/common-auth-embedded/store/index.d.ts +21 -0
  472. package/dist/types/src/common-auth-embedded/store/mutate.d.ts +189 -0
  473. package/dist/types/src/common-auth-embedded/store/pool.d.ts +196 -0
  474. package/dist/types/src/common-auth-embedded/store/provider-state.d.ts +131 -0
  475. package/dist/types/src/common-auth-embedded/store/publication.d.ts +47 -0
  476. package/dist/types/src/common-auth-embedded/store/pull.d.ts +36 -0
  477. package/dist/types/src/common-auth-embedded/store/refresh-lock.d.ts +63 -0
  478. package/dist/types/src/common-auth-embedded/store/refresh.d.ts +72 -0
  479. package/dist/types/src/common-auth-embedded/store/rows.d.ts +313 -0
  480. package/dist/types/src/common-auth-embedded/store/runtime.d.ts +36 -0
  481. package/dist/types/src/common-auth-embedded/store/schema.d.ts +443 -0
  482. package/dist/types/src/common-auth-embedded/store/settings.d.ts +63 -0
  483. package/dist/types/src/common-auth-embedded/store/torn.d.ts +78 -0
  484. package/dist/types/src/constants.d.ts +3 -0
  485. package/dist/types/src/constants.d.ts.map +1 -0
  486. package/dist/types/src/ga/proxy-guard.d.ts +120 -0
  487. package/dist/types/src/ga/proxy-guard.d.ts.map +1 -0
  488. package/dist/types/src/ga/rpc/protocol.d.ts +504 -0
  489. package/dist/types/src/ga/rpc/protocol.d.ts.map +1 -0
  490. package/dist/types/src/ga/server/auth.d.ts +9 -0
  491. package/dist/types/src/ga/server/auth.d.ts.map +1 -0
  492. package/dist/types/src/ga/server/index.d.ts +576 -0
  493. package/dist/types/src/ga/server/index.d.ts.map +1 -0
  494. package/dist/types/src/hooks/auto-update-checker/cache.d.ts +3 -0
  495. package/dist/types/src/hooks/auto-update-checker/cache.d.ts.map +1 -0
  496. package/dist/types/src/hooks/auto-update-checker/checker.d.ts +16 -0
  497. package/dist/types/src/hooks/auto-update-checker/checker.d.ts.map +1 -0
  498. package/dist/types/src/hooks/auto-update-checker/constants.d.ts +9 -0
  499. package/dist/types/src/hooks/auto-update-checker/constants.d.ts.map +1 -0
  500. package/dist/types/src/hooks/auto-update-checker/index.d.ts +34 -0
  501. package/dist/types/src/hooks/auto-update-checker/index.d.ts.map +1 -0
  502. package/dist/types/src/hooks/auto-update-checker/logging.d.ts +3 -0
  503. package/dist/types/src/hooks/auto-update-checker/logging.d.ts.map +1 -0
  504. package/dist/types/src/hooks/auto-update-checker/types.d.ts +25 -0
  505. package/dist/types/src/hooks/auto-update-checker/types.d.ts.map +1 -0
  506. package/dist/types/src/logging/provider-key-policy.d.ts +9 -0
  507. package/dist/types/src/logging/provider-key-policy.d.ts.map +1 -0
  508. package/dist/types/src/plugin/account-access.d.ts +214 -0
  509. package/dist/types/src/plugin/account-access.d.ts.map +1 -0
  510. package/dist/types/src/plugin/account-blocks.d.ts +102 -0
  511. package/dist/types/src/plugin/account-blocks.d.ts.map +1 -0
  512. package/dist/types/src/plugin/account-command-oauth.d.ts +34 -0
  513. package/dist/types/src/plugin/account-command-oauth.d.ts.map +1 -0
  514. package/dist/types/src/plugin/accounts.d.ts +94 -0
  515. package/dist/types/src/plugin/accounts.d.ts.map +1 -0
  516. package/dist/types/src/plugin/agy-request-metadata.d.ts +2 -0
  517. package/dist/types/src/plugin/agy-request-metadata.d.ts.map +1 -0
  518. package/dist/types/src/plugin/agy-transport.d.ts +2 -0
  519. package/dist/types/src/plugin/agy-transport.d.ts.map +1 -0
  520. package/dist/types/src/plugin/auth-doctor.d.ts +30 -0
  521. package/dist/types/src/plugin/auth-doctor.d.ts.map +1 -0
  522. package/dist/types/src/plugin/auth-drift.d.ts +13 -0
  523. package/dist/types/src/plugin/auth-drift.d.ts.map +1 -0
  524. package/dist/types/src/plugin/auth-loader.d.ts +114 -0
  525. package/dist/types/src/plugin/auth-loader.d.ts.map +1 -0
  526. package/dist/types/src/plugin/auth.d.ts +2 -0
  527. package/dist/types/src/plugin/auth.d.ts.map +1 -0
  528. package/dist/types/src/plugin/background-quota-refresh.d.ts +192 -0
  529. package/dist/types/src/plugin/background-quota-refresh.d.ts.map +1 -0
  530. package/dist/types/src/plugin/cache/signature-cache.d.ts +156 -0
  531. package/dist/types/src/plugin/cache/signature-cache.d.ts.map +1 -0
  532. package/dist/types/src/plugin/cache.d.ts +109 -0
  533. package/dist/types/src/plugin/cache.d.ts.map +1 -0
  534. package/dist/types/src/plugin/catalog.d.ts +9 -0
  535. package/dist/types/src/plugin/catalog.d.ts.map +1 -0
  536. package/dist/types/src/plugin/cli.d.ts +44 -0
  537. package/dist/types/src/plugin/cli.d.ts.map +1 -0
  538. package/dist/types/src/plugin/command-apply.d.ts +58 -0
  539. package/dist/types/src/plugin/command-apply.d.ts.map +1 -0
  540. package/dist/types/src/plugin/command-data.d.ts +330 -0
  541. package/dist/types/src/plugin/command-data.d.ts.map +1 -0
  542. package/dist/types/src/plugin/commands.d.ts +164 -0
  543. package/dist/types/src/plugin/commands.d.ts.map +1 -0
  544. package/dist/types/src/plugin/config/index.d.ts +16 -0
  545. package/dist/types/src/plugin/config/index.d.ts.map +1 -0
  546. package/dist/types/src/plugin/config/loader.d.ts +72 -0
  547. package/dist/types/src/plugin/config/loader.d.ts.map +1 -0
  548. package/dist/types/src/plugin/config/models.d.ts +3 -0
  549. package/dist/types/src/plugin/config/models.d.ts.map +1 -0
  550. package/dist/types/src/plugin/config/operator-settings-schema.d.ts +29 -0
  551. package/dist/types/src/plugin/config/operator-settings-schema.d.ts.map +1 -0
  552. package/dist/types/src/plugin/config/schema.d.ts +162 -0
  553. package/dist/types/src/plugin/config/schema.d.ts.map +1 -0
  554. package/dist/types/src/plugin/config/updater.d.ts +55 -0
  555. package/dist/types/src/plugin/config/updater.d.ts.map +1 -0
  556. package/dist/types/src/plugin/config/writer.d.ts +41 -0
  557. package/dist/types/src/plugin/config/writer.d.ts.map +1 -0
  558. package/dist/types/src/plugin/core/streaming/index.d.ts +3 -0
  559. package/dist/types/src/plugin/core/streaming/index.d.ts.map +1 -0
  560. package/dist/types/src/plugin/core/streaming/transformer.d.ts +12 -0
  561. package/dist/types/src/plugin/core/streaming/transformer.d.ts.map +1 -0
  562. package/dist/types/src/plugin/core/streaming/types.d.ts +34 -0
  563. package/dist/types/src/plugin/core/streaming/types.d.ts.map +1 -0
  564. package/dist/types/src/plugin/debug.d.ts +144 -0
  565. package/dist/types/src/plugin/debug.d.ts.map +1 -0
  566. package/dist/types/src/plugin/dependencies.d.ts +129 -0
  567. package/dist/types/src/plugin/dependencies.d.ts.map +1 -0
  568. package/dist/types/src/plugin/errors.d.ts +55 -0
  569. package/dist/types/src/plugin/errors.d.ts.map +1 -0
  570. package/dist/types/src/plugin/event-handler.d.ts +53 -0
  571. package/dist/types/src/plugin/event-handler.d.ts.map +1 -0
  572. package/dist/types/src/plugin/fetch/retry-state.d.ts +61 -0
  573. package/dist/types/src/plugin/fetch/retry-state.d.ts.map +1 -0
  574. package/dist/types/src/plugin/fetch/warmup.d.ts +30 -0
  575. package/dist/types/src/plugin/fetch/warmup.d.ts.map +1 -0
  576. package/dist/types/src/plugin/fetch-interceptor.d.ts +114 -0
  577. package/dist/types/src/plugin/fetch-interceptor.d.ts.map +1 -0
  578. package/dist/types/src/plugin/fetch-routing.d.ts +31 -0
  579. package/dist/types/src/plugin/fetch-routing.d.ts.map +1 -0
  580. package/dist/types/src/plugin/fingerprint.d.ts +2 -0
  581. package/dist/types/src/plugin/fingerprint.d.ts.map +1 -0
  582. package/dist/types/src/plugin/ga-location-services.d.ts +389 -0
  583. package/dist/types/src/plugin/ga-location-services.d.ts.map +1 -0
  584. package/dist/types/src/plugin/gemini-dump.d.ts +72 -0
  585. package/dist/types/src/plugin/gemini-dump.d.ts.map +1 -0
  586. package/dist/types/src/plugin/google-search-tool.d.ts +10 -0
  587. package/dist/types/src/plugin/google-search-tool.d.ts.map +1 -0
  588. package/dist/types/src/plugin/image-saver.d.ts +6 -0
  589. package/dist/types/src/plugin/image-saver.d.ts.map +1 -0
  590. package/dist/types/src/plugin/index.d.ts +30 -0
  591. package/dist/types/src/plugin/index.d.ts.map +1 -0
  592. package/dist/types/src/plugin/killswitch.d.ts +93 -0
  593. package/dist/types/src/plugin/killswitch.d.ts.map +1 -0
  594. package/dist/types/src/plugin/lifecycle.d.ts +63 -0
  595. package/dist/types/src/plugin/lifecycle.d.ts.map +1 -0
  596. package/dist/types/src/plugin/logger.d.ts +83 -0
  597. package/dist/types/src/plugin/logger.d.ts.map +1 -0
  598. package/dist/types/src/plugin/logging-utils.d.ts +57 -0
  599. package/dist/types/src/plugin/logging-utils.d.ts.map +1 -0
  600. package/dist/types/src/plugin/model-registry.d.ts +2 -0
  601. package/dist/types/src/plugin/model-registry.d.ts.map +1 -0
  602. package/dist/types/src/plugin/neutral-types.d.ts +42 -0
  603. package/dist/types/src/plugin/neutral-types.d.ts.map +1 -0
  604. package/dist/types/src/plugin/oauth-login.d.ts +22 -0
  605. package/dist/types/src/plugin/oauth-login.d.ts.map +1 -0
  606. package/dist/types/src/plugin/oauth-methods.d.ts +43 -0
  607. package/dist/types/src/plugin/oauth-methods.d.ts.map +1 -0
  608. package/dist/types/src/plugin/operator-settings.d.ts +74 -0
  609. package/dist/types/src/plugin/operator-settings.d.ts.map +1 -0
  610. package/dist/types/src/plugin/persist-account-pool.d.ts +98 -0
  611. package/dist/types/src/plugin/persist-account-pool.d.ts.map +1 -0
  612. package/dist/types/src/plugin/project.d.ts +2 -0
  613. package/dist/types/src/plugin/project.d.ts.map +1 -0
  614. package/dist/types/src/plugin/prompt-context.d.ts +18 -0
  615. package/dist/types/src/plugin/prompt-context.d.ts.map +1 -0
  616. package/dist/types/src/plugin/quota.d.ts +441 -0
  617. package/dist/types/src/plugin/quota.d.ts.map +1 -0
  618. package/dist/types/src/plugin/recovery/constants.d.ts +22 -0
  619. package/dist/types/src/plugin/recovery/constants.d.ts.map +1 -0
  620. package/dist/types/src/plugin/recovery/storage.d.ts +24 -0
  621. package/dist/types/src/plugin/recovery/storage.d.ts.map +1 -0
  622. package/dist/types/src/plugin/recovery/types.d.ts +116 -0
  623. package/dist/types/src/plugin/recovery/types.d.ts.map +1 -0
  624. package/dist/types/src/plugin/recovery.d.ts +61 -0
  625. package/dist/types/src/plugin/recovery.d.ts.map +1 -0
  626. package/dist/types/src/plugin/refresh-queue.d.ts +133 -0
  627. package/dist/types/src/plugin/refresh-queue.d.ts.map +1 -0
  628. package/dist/types/src/plugin/request-helpers.d.ts +304 -0
  629. package/dist/types/src/plugin/request-helpers.d.ts.map +1 -0
  630. package/dist/types/src/plugin/request.d.ts +161 -0
  631. package/dist/types/src/plugin/request.d.ts.map +1 -0
  632. package/dist/types/src/plugin/rotation.d.ts +2 -0
  633. package/dist/types/src/plugin/rotation.d.ts.map +1 -0
  634. package/dist/types/src/plugin/search.d.ts +25 -0
  635. package/dist/types/src/plugin/search.d.ts.map +1 -0
  636. package/dist/types/src/plugin/server.d.ts +23 -0
  637. package/dist/types/src/plugin/server.d.ts.map +1 -0
  638. package/dist/types/src/plugin/session-context.d.ts +22 -0
  639. package/dist/types/src/plugin/session-context.d.ts.map +1 -0
  640. package/dist/types/src/plugin/shared/local-grant.d.ts +26 -0
  641. package/dist/types/src/plugin/shared/local-grant.d.ts.map +1 -0
  642. package/dist/types/src/plugin/shared/request-cancellation.d.ts +12 -0
  643. package/dist/types/src/plugin/shared/request-cancellation.d.ts.map +1 -0
  644. package/dist/types/src/plugin/shared/request-services.d.ts +375 -0
  645. package/dist/types/src/plugin/shared/request-services.d.ts.map +1 -0
  646. package/dist/types/src/plugin/shared/runtime.d.ts +217 -0
  647. package/dist/types/src/plugin/shared/runtime.d.ts.map +1 -0
  648. package/dist/types/src/plugin/shared/source-sidebar.d.ts +15 -0
  649. package/dist/types/src/plugin/shared/source-sidebar.d.ts.map +1 -0
  650. package/dist/types/src/plugin/shared/vault-menu.d.ts +5 -0
  651. package/dist/types/src/plugin/shared/vault-menu.d.ts.map +1 -0
  652. package/dist/types/src/plugin/shared/vault-request-credentials.d.ts +168 -0
  653. package/dist/types/src/plugin/shared/vault-request-credentials.d.ts.map +1 -0
  654. package/dist/types/src/plugin/storage.d.ts +221 -0
  655. package/dist/types/src/plugin/storage.d.ts.map +1 -0
  656. package/dist/types/src/plugin/stores/signature-store.d.ts +5 -0
  657. package/dist/types/src/plugin/stores/signature-store.d.ts.map +1 -0
  658. package/dist/types/src/plugin/thinking-recovery.d.ts +90 -0
  659. package/dist/types/src/plugin/thinking-recovery.d.ts.map +1 -0
  660. package/dist/types/src/plugin/token.d.ts +41 -0
  661. package/dist/types/src/plugin/token.d.ts.map +1 -0
  662. package/dist/types/src/plugin/transform/cross-model-sanitizer.d.ts +2 -0
  663. package/dist/types/src/plugin/transform/cross-model-sanitizer.d.ts.map +1 -0
  664. package/dist/types/src/plugin/transform/index.d.ts +2 -0
  665. package/dist/types/src/plugin/transform/index.d.ts.map +1 -0
  666. package/dist/types/src/plugin/transform/model-resolver.d.ts +2 -0
  667. package/dist/types/src/plugin/transform/model-resolver.d.ts.map +1 -0
  668. package/dist/types/src/plugin/transform/types.d.ts +2 -0
  669. package/dist/types/src/plugin/transform/types.d.ts.map +1 -0
  670. package/dist/types/src/plugin/types.d.ts +36 -0
  671. package/dist/types/src/plugin/types.d.ts.map +1 -0
  672. package/dist/types/src/plugin/ui/ansi.d.ts +32 -0
  673. package/dist/types/src/plugin/ui/ansi.d.ts.map +1 -0
  674. package/dist/types/src/plugin/ui/auth-menu.d.ts +59 -0
  675. package/dist/types/src/plugin/ui/auth-menu.d.ts.map +1 -0
  676. package/dist/types/src/plugin/ui/confirm.d.ts +2 -0
  677. package/dist/types/src/plugin/ui/confirm.d.ts.map +1 -0
  678. package/dist/types/src/plugin/ui/quota-status.d.ts +73 -0
  679. package/dist/types/src/plugin/ui/quota-status.d.ts.map +1 -0
  680. package/dist/types/src/plugin/ui/select.d.ts +23 -0
  681. package/dist/types/src/plugin/ui/select.d.ts.map +1 -0
  682. package/dist/types/src/plugin/vault-activation.d.ts +11 -0
  683. package/dist/types/src/plugin/vault-activation.d.ts.map +1 -0
  684. package/dist/types/src/plugin/vault-custody.d.ts +131 -0
  685. package/dist/types/src/plugin/vault-custody.d.ts.map +1 -0
  686. package/dist/types/src/plugin/version.d.ts +2 -0
  687. package/dist/types/src/plugin/version.d.ts.map +1 -0
  688. package/dist/types/src/quota-presentation.d.ts +18 -0
  689. package/dist/types/src/quota-presentation.d.ts.map +1 -0
  690. package/dist/types/src/rpc/notifications.d.ts +6 -0
  691. package/dist/types/src/rpc/notifications.d.ts.map +1 -0
  692. package/dist/types/src/rpc/protocol.d.ts +53 -0
  693. package/dist/types/src/rpc/protocol.d.ts.map +1 -0
  694. package/dist/types/src/rpc/rpc-dir.d.ts +4 -0
  695. package/dist/types/src/rpc/rpc-dir.d.ts.map +1 -0
  696. package/dist/types/src/rpc/rpc-server.d.ts +24 -0
  697. package/dist/types/src/rpc/rpc-server.d.ts.map +1 -0
  698. package/dist/types/src/server.d.ts +30 -0
  699. package/dist/types/src/server.d.ts.map +1 -0
  700. package/dist/types/src/sidebar-state.d.ts +365 -0
  701. package/dist/types/src/sidebar-state.d.ts.map +1 -0
  702. package/dist/types/src/tui/host-api.d.ts +196 -0
  703. package/dist/types/src/tui/host-api.d.ts.map +1 -0
  704. package/package.json +46 -19
  705. package/server.js +6 -0
  706. package/src/common-auth-embedded/NOTICE.txt +21 -0
  707. package/src/common-auth-embedded/auth-menu/accounts.d.ts +97 -0
  708. package/src/common-auth-embedded/auth-menu/accounts.js +387 -0
  709. package/src/common-auth-embedded/auth-menu/ansi.d.ts +26 -0
  710. package/src/common-auth-embedded/auth-menu/ansi.js +98 -0
  711. package/src/common-auth-embedded/auth-menu/confirm.d.ts +7 -0
  712. package/src/common-auth-embedded/auth-menu/confirm.js +21 -0
  713. package/src/common-auth-embedded/auth-menu/doctor.d.ts +52 -0
  714. package/src/common-auth-embedded/auth-menu/doctor.js +81 -0
  715. package/src/common-auth-embedded/auth-menu/index.d.ts +17 -0
  716. package/src/common-auth-embedded/auth-menu/index.js +12 -0
  717. package/src/common-auth-embedded/auth-menu/login.d.ts +55 -0
  718. package/src/common-auth-embedded/auth-menu/login.js +83 -0
  719. package/src/common-auth-embedded/auth-menu/menu.d.ts +59 -0
  720. package/src/common-auth-embedded/auth-menu/menu.js +73 -0
  721. package/src/common-auth-embedded/auth-menu/opencode-v1.d.ts +49 -0
  722. package/src/common-auth-embedded/auth-menu/opencode-v1.js +47 -0
  723. package/src/common-auth-embedded/auth-menu/select.d.ts +21 -0
  724. package/src/common-auth-embedded/auth-menu/select.js +159 -0
  725. package/src/common-auth-embedded/auth-menu/terminal.d.ts +43 -0
  726. package/src/common-auth-embedded/auth-menu/terminal.js +19 -0
  727. package/src/common-auth-embedded/claustrum/consumer.d.ts +102 -0
  728. package/src/common-auth-embedded/claustrum/consumer.js +298 -0
  729. package/src/common-auth-embedded/claustrum/custody.d.ts +175 -0
  730. package/src/common-auth-embedded/claustrum/custody.js +354 -0
  731. package/src/common-auth-embedded/claustrum/enrollment.d.ts +158 -0
  732. package/src/common-auth-embedded/claustrum/enrollment.js +759 -0
  733. package/src/common-auth-embedded/claustrum/errors.d.ts +16 -0
  734. package/src/common-auth-embedded/claustrum/errors.js +8 -0
  735. package/src/common-auth-embedded/claustrum/host-slot.d.ts +39 -0
  736. package/src/common-auth-embedded/claustrum/host-slot.js +72 -0
  737. package/src/common-auth-embedded/claustrum/index.d.ts +18 -0
  738. package/src/common-auth-embedded/claustrum/index.js +22 -0
  739. package/src/common-auth-embedded/claustrum/interlock.d.ts +27 -0
  740. package/src/common-auth-embedded/claustrum/interlock.js +29 -0
  741. package/src/common-auth-embedded/claustrum/roster.d.ts +208 -0
  742. package/src/common-auth-embedded/claustrum/roster.js +536 -0
  743. package/src/common-auth-embedded/commands/builtins.d.ts +71 -0
  744. package/src/common-auth-embedded/commands/builtins.js +534 -0
  745. package/src/common-auth-embedded/commands/index.d.ts +10 -0
  746. package/src/common-auth-embedded/commands/index.js +5 -0
  747. package/src/common-auth-embedded/commands/menu.d.ts +61 -0
  748. package/src/common-auth-embedded/commands/menu.js +300 -0
  749. package/src/common-auth-embedded/commands/model.d.ts +238 -0
  750. package/src/common-auth-embedded/commands/model.js +16 -0
  751. package/src/common-auth-embedded/commands/pi.d.ts +23 -0
  752. package/src/common-auth-embedded/commands/pi.js +206 -0
  753. package/src/common-auth-embedded/commands/seam.d.ts +72 -0
  754. package/src/common-auth-embedded/commands/seam.js +301 -0
  755. package/src/common-auth-embedded/fs/atomic-write.d.ts +20 -0
  756. package/src/common-auth-embedded/fs/atomic-write.js +80 -0
  757. package/src/common-auth-embedded/fs/index.d.ts +7 -0
  758. package/src/common-auth-embedded/fs/index.js +6 -0
  759. package/src/common-auth-embedded/fs/lock-constants.d.ts +14 -0
  760. package/src/common-auth-embedded/fs/lock-constants.js +14 -0
  761. package/src/common-auth-embedded/fs/refresh-file-lock.d.ts +33 -0
  762. package/src/common-auth-embedded/fs/refresh-file-lock.js +501 -0
  763. package/src/common-auth-embedded/fs/with-lock.d.ts +33 -0
  764. package/src/common-auth-embedded/fs/with-lock.js +48 -0
  765. package/src/common-auth-embedded/logger/capture-sink.d.ts +14 -0
  766. package/src/common-auth-embedded/logger/capture-sink.js +13 -0
  767. package/src/common-auth-embedded/logger/engine.d.ts +100 -0
  768. package/src/common-auth-embedded/logger/engine.js +246 -0
  769. package/src/common-auth-embedded/logger/index.d.ts +6 -0
  770. package/src/common-auth-embedded/logger/index.js +3 -0
  771. package/src/common-auth-embedded/logger/redact.d.ts +11 -0
  772. package/src/common-auth-embedded/logger/redact.js +83 -0
  773. package/src/common-auth-embedded/opencode2/errors.d.ts +25 -0
  774. package/src/common-auth-embedded/opencode2/errors.js +15 -0
  775. package/src/common-auth-embedded/opencode2/index.d.ts +8 -0
  776. package/src/common-auth-embedded/opencode2/index.js +4 -0
  777. package/src/common-auth-embedded/opencode2/install.d.ts +55 -0
  778. package/src/common-auth-embedded/opencode2/install.js +886 -0
  779. package/src/common-auth-embedded/opencode2/integration.d.ts +112 -0
  780. package/src/common-auth-embedded/opencode2/integration.js +143 -0
  781. package/src/common-auth-embedded/opencode2/sse.d.ts +12 -0
  782. package/src/common-auth-embedded/opencode2/sse.js +60 -0
  783. package/src/common-auth-embedded/opencode2/types.d.ts +413 -0
  784. package/src/common-auth-embedded/pi-slot/index.d.ts +3 -0
  785. package/src/common-auth-embedded/pi-slot/index.js +2 -0
  786. package/src/common-auth-embedded/pi-slot/lock.js +212 -0
  787. package/src/common-auth-embedded/pi-slot/slot.d.ts +49 -0
  788. package/src/common-auth-embedded/pi-slot/slot.js +383 -0
  789. package/src/common-auth-embedded/quota/codec.d.ts +11 -0
  790. package/src/common-auth-embedded/quota/codec.js +12 -0
  791. package/src/common-auth-embedded/quota/format.d.ts +46 -0
  792. package/src/common-auth-embedded/quota/format.js +138 -0
  793. package/src/common-auth-embedded/quota/index.d.ts +10 -0
  794. package/src/common-auth-embedded/quota/index.js +5 -0
  795. package/src/common-auth-embedded/quota/map.d.ts +63 -0
  796. package/src/common-auth-embedded/quota/map.js +105 -0
  797. package/src/common-auth-embedded/quota/merge.d.ts +48 -0
  798. package/src/common-auth-embedded/quota/merge.js +162 -0
  799. package/src/common-auth-embedded/quota/projection.d.ts +64 -0
  800. package/src/common-auth-embedded/quota/projection.js +134 -0
  801. package/src/common-auth-embedded/routing/admission.d.ts +93 -0
  802. package/src/common-auth-embedded/routing/admission.js +142 -0
  803. package/src/common-auth-embedded/routing/index.d.ts +8 -0
  804. package/src/common-auth-embedded/routing/index.js +4 -0
  805. package/src/common-auth-embedded/routing/ordered.d.ts +47 -0
  806. package/src/common-auth-embedded/routing/ordered.js +58 -0
  807. package/src/common-auth-embedded/routing/pins.d.ts +22 -0
  808. package/src/common-auth-embedded/routing/pins.js +34 -0
  809. package/src/common-auth-embedded/routing/sticky.d.ts +158 -0
  810. package/src/common-auth-embedded/routing/sticky.js +339 -0
  811. package/src/common-auth-embedded/rpc/client.d.ts +3 -0
  812. package/src/common-auth-embedded/rpc/client.js +2 -0
  813. package/src/common-auth-embedded/rpc/index.d.ts +10 -0
  814. package/src/common-auth-embedded/rpc/index.js +5 -0
  815. package/src/common-auth-embedded/rpc/notifications.d.ts +73 -0
  816. package/src/common-auth-embedded/rpc/notifications.js +100 -0
  817. package/src/common-auth-embedded/rpc/port-file.d.ts +33 -0
  818. package/src/common-auth-embedded/rpc/port-file.js +217 -0
  819. package/src/common-auth-embedded/rpc/rpc-client.d.ts +30 -0
  820. package/src/common-auth-embedded/rpc/rpc-client.js +253 -0
  821. package/src/common-auth-embedded/rpc/rpc-server.d.ts +58 -0
  822. package/src/common-auth-embedded/rpc/rpc-server.js +311 -0
  823. package/src/common-auth-embedded/rpc/server-registry.d.ts +11 -0
  824. package/src/common-auth-embedded/rpc/server-registry.js +47 -0
  825. package/src/common-auth-embedded/source-output.json +1326 -0
  826. package/src/common-auth-embedded/store/attribution.d.ts +28 -0
  827. package/src/common-auth-embedded/store/attribution.js +60 -0
  828. package/src/common-auth-embedded/store/errors.d.ts +55 -0
  829. package/src/common-auth-embedded/store/errors.js +38 -0
  830. package/src/common-auth-embedded/store/hooks.d.ts +12 -0
  831. package/src/common-auth-embedded/store/hooks.js +34 -0
  832. package/src/common-auth-embedded/store/identity.d.ts +39 -0
  833. package/src/common-auth-embedded/store/identity.js +79 -0
  834. package/src/common-auth-embedded/store/index.d.ts +21 -0
  835. package/src/common-auth-embedded/store/index.js +7 -0
  836. package/src/common-auth-embedded/store/mutate.d.ts +189 -0
  837. package/src/common-auth-embedded/store/mutate.js +500 -0
  838. package/src/common-auth-embedded/store/pool.d.ts +196 -0
  839. package/src/common-auth-embedded/store/pool.js +120 -0
  840. package/src/common-auth-embedded/store/provider-state.d.ts +131 -0
  841. package/src/common-auth-embedded/store/provider-state.js +226 -0
  842. package/src/common-auth-embedded/store/publication.d.ts +47 -0
  843. package/src/common-auth-embedded/store/publication.js +304 -0
  844. package/src/common-auth-embedded/store/pull.d.ts +36 -0
  845. package/src/common-auth-embedded/store/pull.js +143 -0
  846. package/src/common-auth-embedded/store/refresh-lock.d.ts +63 -0
  847. package/src/common-auth-embedded/store/refresh-lock.js +136 -0
  848. package/src/common-auth-embedded/store/refresh.d.ts +72 -0
  849. package/src/common-auth-embedded/store/refresh.js +225 -0
  850. package/src/common-auth-embedded/store/reserved.js +13 -0
  851. package/src/common-auth-embedded/store/rows.d.ts +313 -0
  852. package/src/common-auth-embedded/store/rows.js +1258 -0
  853. package/src/common-auth-embedded/store/runtime.d.ts +36 -0
  854. package/src/common-auth-embedded/store/runtime.js +68 -0
  855. package/src/common-auth-embedded/store/schema.d.ts +443 -0
  856. package/src/common-auth-embedded/store/schema.js +754 -0
  857. package/src/common-auth-embedded/store/settings.d.ts +63 -0
  858. package/src/common-auth-embedded/store/settings.js +120 -0
  859. package/src/common-auth-embedded/store/torn.d.ts +78 -0
  860. package/src/common-auth-embedded/store/torn.js +294 -0
  861. package/src/common-auth-embedded/tui/index.d.ts +8 -0
  862. package/src/common-auth-embedded/tui/index.js +21 -0
  863. package/src/common-auth-embedded/util/any-signal.js +42 -0
  864. package/src/plugin/command-data.ts +3 -0
  865. package/src/rpc/port-file.ts +6 -140
  866. package/src/rpc/protocol.ts +59 -24
  867. package/src/rpc/rpc-client.ts +101 -71
  868. package/src/sidebar-state.ts +82 -24
  869. package/src/tui/command-dialogs.tsx +412 -776
  870. package/src/tui/entry.d.mts +17 -0
  871. package/src/tui/entry.mjs +34 -66
  872. package/src/tui/file-logger.ts +22 -7
  873. package/src/tui-compiled/common-auth-embedded/logger/capture-sink.js +13 -0
  874. package/src/tui-compiled/common-auth-embedded/logger/engine.js +246 -0
  875. package/src/tui-compiled/common-auth-embedded/logger/index.js +3 -0
  876. package/src/tui-compiled/common-auth-embedded/logger/redact.js +83 -0
  877. package/src/tui-compiled/common-auth-embedded/quota/codec.js +12 -0
  878. package/src/tui-compiled/common-auth-embedded/quota/format.js +138 -0
  879. package/src/tui-compiled/common-auth-embedded/quota/index.js +5 -0
  880. package/src/tui-compiled/common-auth-embedded/quota/map.js +105 -0
  881. package/src/tui-compiled/common-auth-embedded/quota/merge.js +162 -0
  882. package/src/tui-compiled/common-auth-embedded/quota/projection.js +134 -0
  883. package/src/tui-compiled/common-auth-embedded/rpc/client.js +2 -0
  884. package/src/tui-compiled/common-auth-embedded/rpc/port-file.js +217 -0
  885. package/src/tui-compiled/common-auth-embedded/rpc/rpc-client.js +253 -0
  886. package/src/tui-compiled/logging/provider-key-policy.js +3 -0
  887. package/src/tui-compiled/quota-presentation.js +42 -0
  888. package/src/tui-compiled/rpc/rpc-client.js +35 -0
  889. package/src/tui-compiled/rpc/rpc-dir.js +13 -0
  890. package/src/tui-compiled/selector.js +21 -0
  891. package/src/tui-compiled/sidebar-state.js +401 -0
  892. package/src/tui-compiled/tui/command-dialogs.js +424 -0
  893. package/src/tui-compiled/tui/file-logger.js +73 -0
  894. package/src/tui-compiled/tui/host-api.js +269 -0
  895. package/src/tui-compiled/tui/host-v1.js +228 -0
  896. package/src/tui-compiled/tui-preferences.js +230 -0
  897. package/src/tui-compiled/{tui.tsx → tui.js} +140 -231
  898. package/src/tui-ga-compiled/host-ga.js +1304 -0
  899. package/src/tui-ga-compiled/selector.js +21 -0
  900. package/src/tui-ga-compiled/shared/07365a7d2ccade4c-host-api.js +269 -0
  901. package/src/tui-ga-compiled/shared/0e19a88ff3535906-command-dialogs.js +424 -0
  902. package/src/tui-ga-compiled/shared/1ff34afa7c42d196-projection.js +134 -0
  903. package/src/tui-ga-compiled/shared/77138df80c7ae006-map.js +105 -0
  904. package/src/tui-ga-compiled/shared/8ae1927e5910ea81-sidebar-projection.js +112 -0
  905. package/src/tui-ga-compiled/shared/98cc0c186c46c42d-quota-presentation.js +42 -0
  906. package/src/tui-ga-compiled/shared/aef2402f8fc342f0-format.js +138 -0
  907. package/src/tui-ga-compiled/shared/bf17cbee28e58197-index.js +5 -0
  908. package/src/tui-ga-compiled/shared/ca21dc417b36dc5d-codec.js +12 -0
  909. package/src/tui-ga-compiled/shared/ecc214300932dfb6-merge.js +162 -0
  910. package/src/tui-ga-raw/host-ga.tsx +1740 -0
  911. package/src/tui-ga-raw/selector.js +21 -0
  912. package/src/tui-ga-raw/shared/07365a7d2ccade4c-host-api.js +269 -0
  913. package/src/tui-ga-raw/shared/0e19a88ff3535906-command-dialogs.tsx +468 -0
  914. package/src/tui-ga-raw/shared/1ff34afa7c42d196-projection.js +134 -0
  915. package/src/tui-ga-raw/shared/77138df80c7ae006-map.js +105 -0
  916. package/src/tui-ga-raw/shared/8ae1927e5910ea81-sidebar-projection.js +112 -0
  917. package/src/tui-ga-raw/shared/98cc0c186c46c42d-quota-presentation.js +42 -0
  918. package/src/tui-ga-raw/shared/aef2402f8fc342f0-format.js +138 -0
  919. package/src/tui-ga-raw/shared/bf17cbee28e58197-index.js +5 -0
  920. package/src/tui-ga-raw/shared/ca21dc417b36dc5d-codec.js +12 -0
  921. package/src/tui-ga-raw/shared/ecc214300932dfb6-merge.js +162 -0
  922. package/src/tui-raw/common-auth-embedded/logger/capture-sink.js +13 -0
  923. package/src/tui-raw/common-auth-embedded/logger/engine.js +246 -0
  924. package/src/tui-raw/common-auth-embedded/logger/index.js +3 -0
  925. package/src/tui-raw/common-auth-embedded/logger/redact.js +83 -0
  926. package/src/tui-raw/common-auth-embedded/quota/codec.js +12 -0
  927. package/src/tui-raw/common-auth-embedded/quota/format.js +138 -0
  928. package/src/tui-raw/common-auth-embedded/quota/index.js +5 -0
  929. package/src/tui-raw/common-auth-embedded/quota/map.js +105 -0
  930. package/src/tui-raw/common-auth-embedded/quota/merge.js +162 -0
  931. package/src/tui-raw/common-auth-embedded/quota/projection.js +134 -0
  932. package/src/tui-raw/common-auth-embedded/rpc/client.js +2 -0
  933. package/src/tui-raw/common-auth-embedded/rpc/port-file.js +217 -0
  934. package/src/tui-raw/common-auth-embedded/rpc/rpc-client.js +253 -0
  935. package/src/tui-raw/logging/provider-key-policy.js +3 -0
  936. package/src/tui-raw/quota-presentation.js +42 -0
  937. package/src/tui-raw/rpc/rpc-client.js +35 -0
  938. package/src/tui-raw/rpc/rpc-dir.js +13 -0
  939. package/src/tui-raw/selector.js +21 -0
  940. package/src/tui-raw/sidebar-state.js +401 -0
  941. package/src/tui-raw/tui/command-dialogs.tsx +468 -0
  942. package/src/tui-raw/tui/file-logger.js +73 -0
  943. package/src/tui-raw/tui/host-api.js +269 -0
  944. package/src/tui-raw/tui/host-v1.tsx +249 -0
  945. package/src/tui-raw/tui-preferences.js +230 -0
  946. package/src/tui-raw/tui.tsx +1088 -0
  947. package/src/tui.tsx +58 -141
  948. package/tui.js +6 -0
  949. package/src/tui-compiled/plugin/command-data.ts +0 -931
  950. package/src/tui-compiled/rpc/port-file.ts +0 -143
  951. package/src/tui-compiled/rpc/protocol.ts +0 -31
  952. package/src/tui-compiled/rpc/rpc-client.ts +0 -102
  953. package/src/tui-compiled/rpc/rpc-dir.ts +0 -24
  954. package/src/tui-compiled/sidebar-state.ts +0 -991
  955. package/src/tui-compiled/tui/command-dialogs.tsx +0 -779
  956. package/src/tui-compiled/tui/file-logger.ts +0 -145
  957. package/src/tui-compiled/tui-preferences.ts +0 -416
@@ -0,0 +1,1088 @@
1
+ /** @jsxImportSource @opentui/solid */
2
+
3
+ /**
4
+ * Read-only OpenTUI sidebar for the Antigravity plugin.
5
+ *
6
+ * Mirrors the fleet sibling layout (see `anthropic-auth-live` /
7
+ * `openai-auth-live` `packages/opencode/src/tui.tsx`): a single bordered
8
+ * column with a labelled header badge, a Quota section that lists one
9
+ * `AccountBlock` per visible account, a Routing section that surfaces the
10
+ * most recent session route, and a Health section that only appears when
11
+ * something is wrong. The Antigravity data model is richer than the
12
+ * Claude/Codex one (per-account Gemini + Non-Gemini quota pools, a health
13
+ * score, and per-session routing decisions), so the fleet components are
14
+ * adapted rather than copied verbatim:
15
+ *
16
+ * - `QuotaRow` reads `remainingPercent + resetAt` from the Antigravity
17
+ * `SidebarQuotaEntry` shape and colors via `quotaTone` (remaining
18
+ * threshold) instead of `usageTone` (used threshold).
19
+ * - `AccountBlock` derives its status word (`active` / `idle` /
20
+ * `cooling` / `off` / `blocked`) from the Antigravity account state and
21
+ * surfaces health as a muted secondary line rather than a top-level
22
+ * bar — fleet parity for "Quota first, health second".
23
+ * - `Routing` resolves to a single `Route` `StatRow` carrying the most
24
+ * recent `activeRouting` entry, since Antigravity does not maintain a
25
+ * per-session sidebar state alongside the slot-rendered tree.
26
+ *
27
+ * Hard rules for this file:
28
+ *
29
+ * - NO direct writes to the host terminal anywhere in the render path.
30
+ * The host terminal is the frame buffer; one stray byte corrupts every
31
+ * subsequent cell. Errors flow through `createTuiFileLogger()`.
32
+ * - NO imports from `./plugin/storage`, `./plugin/accounts`, OAuth code,
33
+ * or anything that touches tokens.
34
+ * - The component uses Solid's `onCleanup` to release the polling timer
35
+ * on unmount so a route change can never leak an interval.
36
+ */
37
+
38
+ import { readFileSync } from "node:fs"
39
+ import { dirname, join } from "node:path"
40
+ import { fileURLToPath } from "node:url"
41
+ import type {
42
+ TuiPlugin,
43
+ TuiPluginModule,
44
+ TuiThemeCurrent,
45
+ } from "@opencode-ai/plugin/tui"
46
+ import { createSlot } from "@opentui/solid"
47
+ import { createSignal, For, type JSX, onCleanup, onMount, Show } from "solid-js"
48
+ import { formatQuotaReading, quotaReadingParts } from "./quota-presentation.js"
49
+ import { getRpcDir } from "./rpc/rpc-dir.js"
50
+ import {
51
+ readSidebarState,
52
+ type SidebarAccountState,
53
+ type SidebarQuotaEntry,
54
+ type SidebarQuotaKey,
55
+ type SidebarStateV1,
56
+ } from "./sidebar-state.js"
57
+ import { createTuiFileLogger, type TuiLogger } from "./tui/file-logger.js"
58
+ import {
59
+ createV1MenuTransport,
60
+ dispatchV1Notification,
61
+ type V1Notification,
62
+ } from "./tui/host-v1.tsx"
63
+ import {
64
+ type AntigravityAuthTuiPrefs,
65
+ type AppearancePrefs,
66
+ computeEffectiveOrder,
67
+ DEFAULT_PREFS,
68
+ DEFAULT_SLOT_ORDER,
69
+ PLUGIN_KEY,
70
+ queueTuiPreferenceUpdate,
71
+ readTuiPreferencesFile,
72
+ resolveAntigravityAuthPrefs,
73
+ watchTuiPreferences,
74
+ } from "./tui-preferences.js"
75
+
76
+ const ID = 'cortexkit.antigravity-auth'
77
+
78
+ const POLL_INTERVAL_MS = 2000
79
+ const RPC_POLL_MS = 500
80
+
81
+ const SINGLE_BORDER = { type: 'single' } as any
82
+
83
+ // Read package metadata from either the raw src/ entry or its generated
84
+ // src/tui-compiled/ counterpart. Avoid a JSON import because package.json sits
85
+ // outside the declaration build's rootDir.
86
+ const PLUGIN_VERSION: string = (() => {
87
+ const here = dirname(fileURLToPath(import.meta.url))
88
+ for (const packageFile of [
89
+ join(here, '..', 'package.json'),
90
+ join(here, '..', '..', 'package.json'),
91
+ ]) {
92
+ try {
93
+ const raw = readFileSync(packageFile, 'utf8')
94
+ const version = (JSON.parse(raw) as { version?: string }).version
95
+ if (version) return version
96
+ } catch {
97
+ // Try the path for the other TUI entry layout.
98
+ }
99
+ }
100
+ return ''
101
+ })()
102
+ // Module-scoped state — TEST ISOLATION CONTRACT:
103
+ //
104
+ // `rpcPollStarted`, notification cursor/deduplication state, `rpcInFlight`, and the lazy
105
+ // `sidebarController` below persist across tests via the cached ES
106
+ // module Bun loads once per `--isolate` file. Tests must NOT assert
107
+ // fresh-process behaviour from these variables — by the time the first
108
+ // `startRpcNotificationPolling` runs, all four carry stale values from
109
+ // prior tests in the same file. Test isolation comes from:
110
+ // 1. fresh-importing `tui.tsx` via a cache-busted dynamic `import`
111
+ // so the module re-evaluates with fresh module-scoped bindings, and
112
+ // 2. constructing a fresh `SidebarController` via
113
+ // `createSidebarController(prefs)` and passing it through
114
+ // `SidebarPanel.props.controller` — never through
115
+ // `getSidebarController()`, which lazily seeds the module-scoped
116
+ // singleton.
117
+ let rpcPollStarted = false
118
+ const notificationCursorBySession = new Map<string, number>()
119
+ const dispatchedNotificationIds = new Set<number>()
120
+ let rpcInFlight = false
121
+ const GLOBAL_NOTIFICATION_CURSOR = '__global__'
122
+ const MAX_NOTIFICATION_CURSORS = 256
123
+
124
+ const QUOTA_LABELS: Record<SidebarQuotaKey, string> = {
125
+ gemini: 'Gm',
126
+ 'non-gemini': 'NG',
127
+ }
128
+
129
+ const QUOTA_ORDER: readonly SidebarQuotaKey[] = ['gemini', 'non-gemini']
130
+
131
+ const WINDOW_GUTTER: Record<string, string> = {
132
+ weekly: '7d',
133
+ '5h': '5h',
134
+ }
135
+
136
+ // --- Theme tokens ----------------------------------------------------------
137
+ //
138
+ // The sidebar pulls its colors from the live host theme (`api.theme.current`
139
+ // — a Solid-friendly getter that re-emits when the user switches theme).
140
+ // Every render path resolves through `toneColor(theme, tone)` with a
141
+ // sibling-style `??` fallback chain, so the sidebar always tracks the
142
+ // active theme and never hardcodes an ANSI literal.
143
+ //
144
+ // `FALLBACK_THEME` is the safety net for tests and any future host that
145
+ // does not implement the theme surface. The fields the sidebar actually
146
+ // uses are populated; the rest of the TuiThemeCurrent fields are left
147
+ // undefined and the `??` chain in `toneColor` falls through cleanly.
148
+
149
+ type Tone = 'ok' | 'warn' | 'err' | 'muted' | 'accent' | 'text'
150
+ type Theme = TuiThemeCurrent
151
+ type ThemeColor = Theme['text']
152
+
153
+ const FALLBACK_THEME = {
154
+ primary: '#3b82f6',
155
+ secondary: '#a855f7',
156
+ accent: '#7c3aed',
157
+ error: '#ef4444',
158
+ warning: '#eab308',
159
+ success: '#22c55e',
160
+ info: '#0ea5e9',
161
+ text: '#e5e7eb',
162
+ textMuted: '#6b7280',
163
+ selectedListItemText: '#ffffff',
164
+ background: '#0b0d12',
165
+ backgroundPanel: '#11131a',
166
+ backgroundElement: '#1a1d27',
167
+ backgroundMenu: '#1a1d27',
168
+ border: '#2a2d3a',
169
+ borderActive: '#7c3aed',
170
+ borderSubtle: '#2a2d3a',
171
+ diffAdded: '#22c55e',
172
+ diffRemoved: '#ef4444',
173
+ diffContext: '#6b7280',
174
+ diffHunkHeader: '#7c3aed',
175
+ diffHighlightAdded: '#166534',
176
+ diffHighlightRemoved: '#7f1d1d',
177
+ diffAddedBg: '#0a1f12',
178
+ diffRemovedBg: '#1f0a0a',
179
+ diffContextBg: '#0b0d12',
180
+ diffLineNumber: '#4b5563',
181
+ diffAddedLineNumberBg: '#0a1f12',
182
+ diffRemovedLineNumberBg: '#1f0a0a',
183
+ markdownText: '#e5e7eb',
184
+ markdownHeading: '#7c3aed',
185
+ markdownLink: '#3b82f6',
186
+ markdownLinkText: '#60a5fa',
187
+ markdownCode: '#22c55e',
188
+ markdownBlockQuote: '#6b7280',
189
+ markdownEmph: '#eab308',
190
+ markdownStrong: '#7c3aed',
191
+ markdownHorizontalRule: '#2a2d3a',
192
+ markdownListItem: '#7c3aed',
193
+ markdownListEnumeration: '#a855f7',
194
+ markdownImage: '#3b82f6',
195
+ markdownImageText: '#60a5fa',
196
+ markdownCodeBlock: '#11131a',
197
+ syntaxComment: '#6b7280',
198
+ syntaxKeyword: '#a855f7',
199
+ syntaxFunction: '#3b82f6',
200
+ syntaxVariable: '#e5e7eb',
201
+ syntaxString: '#22c55e',
202
+ syntaxNumber: '#eab308',
203
+ syntaxType: '#7c3aed',
204
+ syntaxOperator: '#e5e7eb',
205
+ syntaxPunctuation: '#6b7280',
206
+ thinkingOpacity: 0.6,
207
+ } as unknown as Theme
208
+
209
+ // Mirror the fleet siblings' tone chain: every tone falls through to a
210
+ // sibling token, so a sparse custom theme still renders readably.
211
+ function toneColor(theme: Theme, tone: Tone): ThemeColor {
212
+ switch (tone) {
213
+ case 'ok':
214
+ return theme.success ?? theme.accent
215
+ case 'warn':
216
+ return theme.warning ?? theme.accent
217
+ case 'err':
218
+ return theme.error ?? theme.accent
219
+ case 'muted':
220
+ return theme.textMuted ?? theme.text
221
+ case 'accent':
222
+ return theme.accent ?? theme.text
223
+ default:
224
+ return theme.text
225
+ }
226
+ }
227
+
228
+ function quotaTone(usedPct: number, appearance: AppearancePrefs): Tone {
229
+ if (usedPct < appearance.warnThreshold) return 'ok'
230
+ if (usedPct < appearance.errorThreshold) return 'warn'
231
+ return 'err'
232
+ }
233
+
234
+ interface BarSegment {
235
+ text: string
236
+ tone: Tone
237
+ }
238
+
239
+ function quotaBarSegments(
240
+ remainingPct: number,
241
+ appearance: AppearancePrefs,
242
+ ): BarSegment[] {
243
+ const width = appearance.barWidth
244
+ const usedCells = Math.max(
245
+ 0,
246
+ Math.min(Math.round((remainingPct / 100) * width), width),
247
+ )
248
+ const tone = quotaTone(100 - remainingPct, appearance)
249
+ return [
250
+ { text: appearance.barFilledChar.repeat(usedCells), tone },
251
+ { text: appearance.barEmptyChar.repeat(width - usedCells), tone },
252
+ ].filter((segment) => segment.text.length > 0)
253
+ }
254
+
255
+ export interface SidebarPanelProps {
256
+ /** Override the file the TUI polls. Defaults to `getSidebarStateFile()`. */
257
+ stateFile?: string
258
+ /** Override the polling interval. Defaults to 2000ms. */
259
+ pollIntervalMs?: number
260
+ /** Override the logger; tests inject a logger that captures into memory. */
261
+ logger?: TuiLogger
262
+ /** Optional override for the current epoch in milliseconds (tests). */
263
+ now?: () => number
264
+ /** Optional prefs controller — when present, drives collapse/expand and
265
+ * section toggles. Module-scoped controller is created at plugin init. */
266
+ controller?: SidebarController
267
+ /** Optional live-theme accessor. The host's `api.theme.current` is wired
268
+ * through here in production; tests pass a custom accessor to flip theme
269
+ * and assert re-render. Falls back to FALLBACK_THEME when unset. */
270
+ theme?: () => Theme
271
+ /** The slot session determines which route is relevant to this sidebar. */
272
+ sessionId?: string
273
+ }
274
+
275
+ export interface SidebarController {
276
+ prefs: () => AntigravityAuthTuiPrefs
277
+ collapsed: () => boolean
278
+ toggleCollapsed: () => void
279
+ }
280
+
281
+ interface InternalState {
282
+ loaded: SidebarStateV1
283
+ lastReadAt: number
284
+ lastError: string | null
285
+ }
286
+
287
+ const EMPTY_STATE: SidebarStateV1 = {
288
+ version: 1,
289
+ checkedAt: 0,
290
+ accounts: [],
291
+ activeRouting: {},
292
+ routingAuthoritative: false,
293
+ }
294
+
295
+ function resolveLogger(logger: TuiLogger | undefined): TuiLogger {
296
+ if (logger) return logger
297
+ try {
298
+ return createTuiFileLogger()
299
+ } catch {
300
+ // Fall back to a stub that drops everything — the sidebar must still
301
+ // render even if file logging cannot be initialized.
302
+ return noopLogger()
303
+ }
304
+ }
305
+
306
+ function noopLogger(): TuiLogger {
307
+ const drop = () => undefined
308
+ return {
309
+ debug: drop,
310
+ info: drop,
311
+ warn: drop,
312
+ error: drop,
313
+ getLogPath: () => undefined,
314
+ }
315
+ }
316
+
317
+ // Module-scoped controller singleton, initialized at plugin startup. The
318
+ // watcher is intentionally never disposed — collapse/prefs state survives
319
+ // sidebar remounts (route changes) for the lifetime of the TUI process,
320
+ // mirroring the fleet siblings.
321
+ //
322
+ // TEST ISOLATION: this singleton, like `rpcPollStarted` above, persists
323
+ // across tests via the cached ES module. Tests construct a controller
324
+ // via `createSidebarController(prefs)` and pass it through
325
+ // `SidebarPanel.props.controller` — they MUST NOT rely on this lazy
326
+ // singleton for isolation. See the block above for the full contract.
327
+ let sidebarController: SidebarController | null = null
328
+
329
+ // The TUI may unmount and remount sidebar_content when the user switches
330
+ // views. A remount re-runs the component body, so any signal created inside
331
+ // the component would reset to its seed. The controller lives in the plugin
332
+ // closure (process lifetime) and owns the durable prefs/collapse signals
333
+ // plus the single shared watcher subscription, so collapse and live pref
334
+ // reloads survive the remount.
335
+ //
336
+ // Exported so tests can construct a controller with a controlled initial
337
+ // prefs snapshot without touching the module-scoped singleton.
338
+ export function createSidebarController(
339
+ initialPrefs: AntigravityAuthTuiPrefs,
340
+ ): SidebarController {
341
+ const [prefs, setPrefs] = createSignal<AntigravityAuthTuiPrefs>(initialPrefs)
342
+ const seedCollapsed =
343
+ initialPrefs.rememberCollapsed && initialPrefs.collapsed != null
344
+ ? initialPrefs.collapsed
345
+ : initialPrefs.startCollapsed
346
+ const [collapsed, setCollapsed] = createSignal(seedCollapsed)
347
+ let lastPersistedCollapsed: boolean | null = initialPrefs.collapsed
348
+ let lastApplied = JSON.stringify(initialPrefs)
349
+
350
+ // The watcher lives for the plugin/process lifetime — it is intentionally
351
+ // never disposed. Collapse guard mirrors the race-fix in toggleCollapsed:
352
+ // lastPersistedCollapsed is advanced only once our own write lands, so
353
+ // watcher echoes of the previous persisted value are rejected by the
354
+ // `!==` check and cannot revert a user click.
355
+ watchTuiPreferences(() => {
356
+ void (async () => {
357
+ const next = resolveAntigravityAuthPrefs(await readTuiPreferencesFile())
358
+ const serialized = JSON.stringify(next)
359
+ if (serialized === lastApplied) return
360
+ lastApplied = serialized
361
+ setPrefs(next)
362
+ if (
363
+ next.rememberCollapsed &&
364
+ next.collapsed != null &&
365
+ next.collapsed !== lastPersistedCollapsed
366
+ ) {
367
+ lastPersistedCollapsed = next.collapsed
368
+ setCollapsed(next.collapsed)
369
+ }
370
+ })()
371
+ })
372
+
373
+ function toggleCollapsed() {
374
+ const next = !collapsed()
375
+ setCollapsed(next)
376
+ if (prefs().rememberCollapsed) {
377
+ void queueTuiPreferenceUpdate(PLUGIN_KEY, ['collapsed'], next).then(
378
+ () => {
379
+ lastPersistedCollapsed = next
380
+ },
381
+ )
382
+ }
383
+ }
384
+
385
+ return { prefs, collapsed, toggleCollapsed }
386
+ }
387
+
388
+ // Lazy module-scoped accessor used by the plugin entry. Tests should NOT go
389
+ // through this — they construct their own controller via createSidebarController
390
+ // and pass it via SidebarPanelProps.controller.
391
+ function getSidebarController(): SidebarController {
392
+ if (!sidebarController) {
393
+ sidebarController = createSidebarController(DEFAULT_PREFS)
394
+ }
395
+ return sidebarController
396
+ }
397
+
398
+ // --- Shared helpers (fleet shape, antigravity data) ------------------------
399
+
400
+ function clamp(value: number, min: number, max: number): number {
401
+ if (value < min) return min
402
+ if (value > max) return max
403
+ return value
404
+ }
405
+
406
+ // Render a "reset in Nm/Nh/NdNh" string from an epoch-ms reset time.
407
+ // Empty string when no resetAt is cached. The fleet's `formatResetIn`
408
+ // reads ISO strings; Antigravity persists resetAt as a numeric epoch, so
409
+ // the wrapper adapts to that without changing the shape of the output.
410
+ function formatResetIn(resetAt: number | undefined, now: () => number): string {
411
+ if (!resetAt) return ''
412
+ const ms = resetAt - now()
413
+ if (ms <= 0) return 'now'
414
+ const mins = Math.floor(ms / 60_000)
415
+ if (mins < 60) return `${mins}m`
416
+ const hrs = Math.floor(mins / 60)
417
+ if (hrs < 24) {
418
+ const rm = mins % 60
419
+ return rm > 0 ? `${hrs}h${rm}m` : `${hrs}h`
420
+ }
421
+ const days = Math.floor(hrs / 24)
422
+ const rh = hrs % 24
423
+ return rh > 0 ? `${days}d${rh}h` : `${days}d`
424
+ }
425
+
426
+ function formatError(value: unknown): string {
427
+ if (value instanceof Error) return value.message
428
+ try {
429
+ return JSON.stringify(value)
430
+ } catch {
431
+ return String(value)
432
+ }
433
+ }
434
+
435
+ // --- Fleet components (adapted to antigravity data) ------------------------
436
+
437
+ // Section header — fleet pattern: bold title, themed text color, top margin
438
+ // for vertical breathing room between sections.
439
+ function SectionHeader(props: {
440
+ theme: () => Theme
441
+ title: string
442
+ }): JSX.Element {
443
+ return (
444
+ <box width='100%' marginTop={1}>
445
+ <text fg={toneColor(props.theme(), 'text')}>
446
+ <b>{props.title}</b>
447
+ </text>
448
+ </box>
449
+ )
450
+ }
451
+
452
+ // Fleet StatRow: muted label left, value (optionally tone-tinted, bold)
453
+ // right. Mirrors the layout the Claude/Codex sidebars use for routing
454
+ // rows, plan rows, and "resets N" rows.
455
+ function StatRow(props: {
456
+ theme: () => Theme
457
+ label: string
458
+ value: string
459
+ tone?: Tone
460
+ }): JSX.Element {
461
+ return (
462
+ <box width='100%' flexDirection='row' justifyContent='space-between'>
463
+ <text fg={props.theme().textMuted}>{props.label}</text>
464
+ <text fg={toneColor(props.theme(), props.tone ?? 'text')}>
465
+ <b>{props.value}</b>
466
+ </text>
467
+ </box>
468
+ )
469
+ }
470
+
471
+ // Fleet CollapsedRow: muted label left, caller-supplied value right. Used
472
+ // for the collapsed sidebar view; the Antigravity adapter renders one
473
+ // CollapsedRow per visible account (Claude's sibling collapses to a
474
+ // single primary-quota line, but Antigravity's multi-quota model fits a
475
+ // per-account row better when the sidebar is collapsed).
476
+ function CollapsedRow(props: {
477
+ theme: () => Theme
478
+ label: string
479
+ children: JSX.Element
480
+ }): JSX.Element {
481
+ return (
482
+ <box width='100%' flexDirection='row' justifyContent='space-between'>
483
+ <text fg={props.theme().textMuted}>{props.label}</text>
484
+ {props.children}
485
+ </box>
486
+ )
487
+ }
488
+
489
+ // The bar fills with remaining quota. The shared formatter supplies the
490
+ // figure, reset and reading age; the right column aligns reset and age text.
491
+ function QuotaRow(props: {
492
+ theme: () => Theme
493
+ appearance: AppearancePrefs
494
+ label: string
495
+ entry: SidebarQuotaEntry | undefined
496
+ now: () => number
497
+ }): JSX.Element {
498
+ const parts = () => quotaReadingParts(props.label, props.entry, props.now())
499
+ const remaining = () => parts().remaining
500
+ const reset = () => parts().detail
501
+ return (
502
+ <Show
503
+ when={remaining() != null}
504
+ fallback={
505
+ <box width='100%' flexDirection='row' justifyContent='space-between'>
506
+ <text fg={props.theme().textMuted}>{props.label.padEnd(5)}</text>
507
+ <text fg={props.theme().textMuted}>{parts().figure}</text>
508
+ </box>
509
+ }
510
+ >
511
+ <box width='100%' flexDirection='row' justifyContent='space-between'>
512
+ <box flexDirection='row'>
513
+ <text width={5} flexShrink={0} fg={props.theme().textMuted}>
514
+ {props.label}
515
+ </text>
516
+ <box
517
+ width={props.appearance.barWidth}
518
+ flexShrink={0}
519
+ flexDirection='row'
520
+ >
521
+ <For each={quotaBarSegments(remaining() ?? 0, props.appearance)}>
522
+ {(segment) => (
523
+ <text fg={toneColor(props.theme(), segment.tone)}>
524
+ {segment.text}
525
+ </text>
526
+ )}
527
+ </For>
528
+ </box>
529
+ <text
530
+ fg={toneColor(
531
+ props.theme(),
532
+ quotaTone(100 - (remaining() ?? 0), props.appearance),
533
+ )}
534
+ >
535
+ {` ${parts().figure}`}
536
+ </text>
537
+ </box>
538
+ <Show when={reset()}>
539
+ <text fg={props.theme().textMuted}>{reset()}</text>
540
+ </Show>
541
+ </box>
542
+ </Show>
543
+ )
544
+ }
545
+
546
+ // Fleet AccountBlock, adapted to Antigravity's per-account data. Header
547
+ // row is account label (left) + status word (right). The body renders one
548
+ // QuotaRow per present quota group in the fleet's stable order, then a
549
+ // muted secondary line with the account's health score and, when
550
+ // relevant, a cooldown countdown. Status word priorities (first match
551
+ // wins):
552
+ // - `off` when the account is disabled
553
+ // - `cooling` when cooldownUntil is still in the future
554
+ // - `active` when current === true
555
+ // - `idle` for the fallback (current === false) case
556
+ function AccountBlock(props: {
557
+ theme: () => Theme
558
+ appearance: AppearancePrefs
559
+ account: SidebarAccountState
560
+ now: () => number
561
+ active?: boolean
562
+ marginTop?: number
563
+ }): JSX.Element {
564
+ const active = () => props.active ?? props.account.current
565
+ const statusWord = (): string => {
566
+ if (!props.account.enabled) return 'off'
567
+ const cd = props.account.cooldownUntil
568
+ if (typeof cd === 'number' && cd > props.now()) return 'cooling'
569
+ return active() ? 'active' : 'idle'
570
+ }
571
+ const statusTone = (): Tone => {
572
+ if (!props.account.enabled) return 'muted'
573
+ const cd = props.account.cooldownUntil
574
+ if (typeof cd === 'number' && cd > props.now()) return 'warn'
575
+ return active() ? 'ok' : 'muted'
576
+ }
577
+ const cooldownMs = (): number => {
578
+ const cd = props.account.cooldownUntil
579
+ if (typeof cd !== 'number') return 0
580
+ return Math.max(0, cd - props.now())
581
+ }
582
+ const healthText = () => {
583
+ const base = `health ${Math.round(clamp(props.account.health, 0, 100))}`
584
+ return cooldownMs() > 0
585
+ ? `${base} · cooling ${formatWait(cooldownMs())}`
586
+ : base
587
+ }
588
+ return (
589
+ <box width='100%' flexDirection='column' marginTop={props.marginTop ?? 0}>
590
+ <box width='100%' flexDirection='row' justifyContent='space-between'>
591
+ <text fg={props.theme().text}>
592
+ <b>{props.account.label}</b>
593
+ </text>
594
+ <text fg={toneColor(props.theme(), statusTone())}>
595
+ <b>{statusWord()}</b>
596
+ </text>
597
+ </box>
598
+ <For each={QUOTA_ORDER}>
599
+ {(key) => {
600
+ const poolEntry = props.account.quota[key]
601
+ const windows = poolEntry?.windows
602
+ // Legacy: no windows array — render a single row with the pool label.
603
+ const hasWindows = windows && windows.length > 0
604
+ if (!hasWindows) {
605
+ return (
606
+ <QuotaRow
607
+ theme={props.theme}
608
+ appearance={props.appearance}
609
+ label={QUOTA_LABELS[key]}
610
+ entry={poolEntry}
611
+ now={props.now}
612
+ />
613
+ )
614
+ }
615
+ return (
616
+ <>
617
+ {windows.map((w) => (
618
+ <QuotaRow
619
+ theme={props.theme}
620
+ appearance={props.appearance}
621
+ label={`${QUOTA_LABELS[key]} ${WINDOW_GUTTER[w.window] ?? w.window}`}
622
+ entry={{
623
+ remainingPercent: w.remainingPercent,
624
+ resetAt: w.resetAt,
625
+ checkedAt: w.checkedAt,
626
+ }}
627
+ now={props.now}
628
+ />
629
+ ))}
630
+ </>
631
+ )
632
+ }}
633
+ </For>
634
+ <box width='100%' flexDirection='row'>
635
+ <text fg={props.theme().textMuted}>{` ${healthText()}`}</text>
636
+ </box>
637
+ </box>
638
+ )
639
+ }
640
+
641
+ function formatWait(ms: number): string {
642
+ const seconds = Math.ceil(ms / 1000)
643
+ if (seconds < 60) return `${seconds}s`
644
+ const minutes = Math.floor(seconds / 60)
645
+ const remaining = seconds % 60
646
+ return remaining > 0 ? `${minutes}m ${remaining}s` : `${minutes}m`
647
+ }
648
+
649
+ // --- SidebarPanel ----------------------------------------------------------
650
+
651
+ export function SidebarPanel(props: SidebarPanelProps): JSX.Element {
652
+ const logger = resolveLogger(props.logger)
653
+ const now = props.now ?? (() => Date.now())
654
+ const pollMs = props.pollIntervalMs ?? POLL_INTERVAL_MS
655
+ const controller = props.controller ?? getSidebarController()
656
+ const collapsed = controller.collapsed
657
+ const prefs = controller.prefs
658
+ // Live host theme — falls back to a sensible dark palette when the host
659
+ // does not expose one. Solid tracks `theme()` so a theme switch re-renders
660
+ // every styled span/border without a manual subscription.
661
+ const theme = (): Theme => props.theme?.() ?? FALLBACK_THEME
662
+
663
+ const [state, setState] = createSignal<InternalState>({
664
+ loaded: EMPTY_STATE,
665
+ lastReadAt: 0,
666
+ lastError: null,
667
+ })
668
+
669
+ const refresh = (): void => {
670
+ try {
671
+ const loaded = readSidebarState(props.stateFile)
672
+ setState({
673
+ loaded,
674
+ lastReadAt: now(),
675
+ lastError: null,
676
+ })
677
+ } catch (error) {
678
+ logger.warn('sidebar-poll-failed', { error: formatError(error) })
679
+ setState((prev) => ({
680
+ ...prev,
681
+ lastReadAt: now(),
682
+ lastError: formatError(error),
683
+ }))
684
+ }
685
+ }
686
+
687
+ onMount(() => {
688
+ refresh()
689
+ const interval = setInterval(refresh, pollMs)
690
+ onCleanup(() => clearInterval(interval))
691
+ })
692
+
693
+ const hasData = () => state().loaded.accounts.length > 0
694
+ const backoffActive = () => {
695
+ const until = state().loaded.quotaBackoffUntil
696
+ return typeof until === 'number' && until > now()
697
+ }
698
+ const lastError = () => state().lastError ?? state().loaded.lastError
699
+ const degraded = () => backoffActive() || !!lastError()
700
+ // Honors sections.fallbackAccounts. Both the expanded (AccountBlock list)
701
+ // and the collapsed (CollapsedRow list) paths use the same filter so the
702
+ // user sees the same account set in either mode.
703
+ const visibleAccounts = () => {
704
+ const showFallback = prefs().sections.fallbackAccounts
705
+ if (showFallback) return state().loaded.accounts
706
+ return state().loaded.accounts.filter((account) => account.current)
707
+ }
708
+
709
+ const currentRoute = (): {
710
+ strategy?: 'sticky' | 'round-robin' | 'hybrid'
711
+ family: string
712
+ style: string
713
+ } | null => {
714
+ const routes = state().loaded.activeRouting
715
+ const entry = props.sessionId
716
+ ? routes[props.sessionId]
717
+ : Object.values(routes).sort((a, b) => b.updatedAt - a.updatedAt)[0]
718
+ if (!entry) return null
719
+ return {
720
+ strategy: entry.strategy,
721
+ family: entry.modelFamily,
722
+ style: entry.headerStyle,
723
+ }
724
+ }
725
+
726
+ // Header badge: ▼/▶ {label}. The fleet shows the version string on the
727
+ // right when no degraded state is present; the antigravity adapter keeps
728
+ // that right-alignment and surfaces `degraded` as a "LIMITED" badge
729
+ // instead of the "1/1 ready" count the previous revision rendered.
730
+ const headerLabel = () => {
731
+ const name = prefs().header.label
732
+ return !hasData() ? name : collapsed() ? `\u25b6 ${name}` : `\u25bc ${name}`
733
+ }
734
+
735
+ return (
736
+ <box
737
+ width='100%'
738
+ flexDirection='column'
739
+ border={SINGLE_BORDER}
740
+ borderColor={theme().borderActive}
741
+ paddingTop={1}
742
+ paddingBottom={1}
743
+ paddingLeft={1}
744
+ paddingRight={1}
745
+ >
746
+ {/* biome-ignore lint/a11y/noStaticElementInteractions: opentui renders to a terminal, not the DOM — ARIA roles do not apply */}
747
+ <box
748
+ width='100%'
749
+ flexDirection='row'
750
+ justifyContent='space-between'
751
+ alignItems='center'
752
+ onMouseDown={() => {
753
+ // Mirror the fleet guard: only toggle when there is data to expand
754
+ // into. Without this a click on the empty-awaiting header would just
755
+ // toggle the affordance for nothing.
756
+ if (hasData()) controller.toggleCollapsed()
757
+ }}
758
+ >
759
+ <box paddingLeft={1} paddingRight={1} backgroundColor={theme().accent}>
760
+ <text fg={theme().background}>
761
+ <b>{headerLabel()}</b>
762
+ </text>
763
+ </box>
764
+ <Show
765
+ when={degraded()}
766
+ fallback={
767
+ <Show when={prefs().header.showVersion && PLUGIN_VERSION !== ''}>
768
+ <text fg={theme().textMuted}>{`v${PLUGIN_VERSION}`}</text>
769
+ </Show>
770
+ }
771
+ >
772
+ <box
773
+ paddingLeft={1}
774
+ paddingRight={1}
775
+ backgroundColor={theme().warning}
776
+ >
777
+ <text fg={theme().background}>
778
+ <b>{'LIMITED'}</b>
779
+ </text>
780
+ </box>
781
+ </Show>
782
+ </box>
783
+
784
+ {/* Collapsed: the active account's primary quota and fleet status dot. */}
785
+ <Show when={collapsed() && hasData()}>
786
+ {(() => {
787
+ const account = () =>
788
+ visibleAccounts().find((entry) => entry.current) ??
789
+ visibleAccounts()[0]
790
+ const remaining = () => {
791
+ const q = account()?.quota
792
+ // The lowest remaining percentage among dated readings determines the warning tone.
793
+ const gemini = quotaReadingParts('Gm', q?.gemini, now()).remaining
794
+ const nonGemini = quotaReadingParts(
795
+ 'NG',
796
+ q?.['non-gemini'],
797
+ now(),
798
+ ).remaining
799
+ if (gemini === null && nonGemini === null) return null
800
+ return Math.min(gemini ?? 100, nonGemini ?? 100)
801
+ }
802
+ const poolText = (key: 'gemini' | 'non-gemini') => {
803
+ const entry = account()?.quota[key]
804
+ if (!entry)
805
+ return `${QUOTA_LABELS[key]}: ${formatQuotaReading(QUOTA_LABELS[key], undefined, now())}`
806
+ // Show binding window when available, else just pool label.
807
+ const bindingWindow = entry.windows?.reduce<
808
+ (typeof entry.windows)[0] | null
809
+ >(
810
+ (best, w) =>
811
+ best === null || w.remainingPercent < best.remainingPercent
812
+ ? w
813
+ : best,
814
+ null,
815
+ )
816
+ const gutter = bindingWindow
817
+ ? ` ${WINDOW_GUTTER[bindingWindow.window] ?? bindingWindow.window}`
818
+ : ''
819
+ const text = formatQuotaReading(
820
+ `${QUOTA_LABELS[key]}${gutter}`,
821
+ bindingWindow ?? entry,
822
+ now(),
823
+ )
824
+ return bindingWindow ? `${QUOTA_LABELS[key]} ${text}` : text
825
+ }
826
+ const unavailable = () => {
827
+ const selected = account()
828
+ return (
829
+ selected != null &&
830
+ (!selected.enabled ||
831
+ (selected.cooldownUntil != null &&
832
+ selected.cooldownUntil > now()))
833
+ )
834
+ }
835
+ return (
836
+ <Show when={account()}>
837
+ {(selected) => (
838
+ <CollapsedRow theme={theme} label={selected().label}>
839
+ <box flexDirection='row'>
840
+ <text
841
+ fg={toneColor(
842
+ theme(),
843
+ remaining() == null
844
+ ? 'muted'
845
+ : quotaTone(
846
+ 100 - (remaining() ?? 100),
847
+ prefs().appearance,
848
+ ),
849
+ )}
850
+ >
851
+ <b>
852
+ {account()?.quota.gemini == null &&
853
+ account()?.quota['non-gemini'] == null
854
+ ? '—'
855
+ : `${poolText('gemini')} · ${poolText('non-gemini')}`}
856
+ </b>
857
+ </text>
858
+ <text
859
+ fg={toneColor(
860
+ theme(),
861
+ unavailable()
862
+ ? 'err'
863
+ : remaining() == null
864
+ ? 'muted'
865
+ : quotaTone(
866
+ 100 - (remaining() ?? 100),
867
+ prefs().appearance,
868
+ ),
869
+ )}
870
+ >
871
+ {unavailable() ? ' ⊘' : ' ●'}
872
+ </text>
873
+ </box>
874
+ </CollapsedRow>
875
+ )}
876
+ </Show>
877
+ )
878
+ })()}
879
+ </Show>
880
+
881
+ {/* Expanded: full sections. Also render when there's no data so the
882
+ sidebar can never go blank if data clears while collapsed. */}
883
+ <Show when={!collapsed() || !hasData()}>
884
+ <Show
885
+ when={hasData()}
886
+ fallback={
887
+ <box marginTop={1} width='100%'>
888
+ <text fg={theme().textMuted}>{'Waiting for quota\u2026'}</text>
889
+ </box>
890
+ }
891
+ >
892
+ {/* Quota */}
893
+ <Show when={prefs().sections.quota}>
894
+ <SectionHeader theme={theme} title='Quota' />
895
+ <For each={visibleAccounts()}>
896
+ {(account, index) => (
897
+ <AccountBlock
898
+ theme={theme}
899
+ appearance={prefs().appearance}
900
+ account={account}
901
+ now={now}
902
+ marginTop={index() === 0 ? 0 : 1}
903
+ />
904
+ )}
905
+ </For>
906
+ </Show>
907
+
908
+ {/* Routing */}
909
+ <Show when={prefs().sections.routing}>
910
+ <SectionHeader theme={theme} title='Routing' />
911
+ <Show
912
+ when={currentRoute()}
913
+ fallback={
914
+ <StatRow theme={theme} label='Route' value='—' tone='muted' />
915
+ }
916
+ >
917
+ {(route) => (
918
+ <StatRow
919
+ theme={theme}
920
+ label='Route'
921
+ value={`${route().strategy ? `${route().strategy} · ` : ''}${route().family}: ${route().style}`}
922
+ tone='accent'
923
+ />
924
+ )}
925
+ </Show>
926
+ </Show>
927
+
928
+ {/* Health — only when something is wrong AND sections.health is true */}
929
+ <Show when={degraded() && prefs().sections.health}>
930
+ <SectionHeader theme={theme} title='Health' />
931
+ <Show when={backoffActive()}>
932
+ <StatRow
933
+ theme={theme}
934
+ label='Quota API'
935
+ value={`backoff ${formatResetIn(state().loaded.quotaBackoffUntil, now)}`}
936
+ tone='warn'
937
+ />
938
+ </Show>
939
+ <Show when={lastError()}>
940
+ <StatRow
941
+ theme={theme}
942
+ label='Last error'
943
+ value={lastError() ?? ''}
944
+ tone='err'
945
+ />
946
+ </Show>
947
+ </Show>
948
+ </Show>
949
+ </Show>
950
+ </box>
951
+ )
952
+ }
953
+
954
+ /**
955
+ * Solid slot registry binding exposed for hosts that want to mount the
956
+ * sidebar inside their renderer. Hosts that already own a slot registry can
957
+ * use `createSlot` directly; we re-export for convenience and to keep the
958
+ * contract visible at the module entry point.
959
+ */
960
+ export const sidebar_content = createSlot
961
+
962
+ interface RpcNotificationPollOptions {
963
+ pending: (
964
+ lastReceivedId: number,
965
+ sessionId?: string,
966
+ ) => Promise<readonly V1Notification[]>
967
+ currentSessionId: () => string | undefined
968
+ dispatch: (notification: V1Notification) => void | Promise<void>
969
+ schedule: (poll: () => Promise<void>, intervalMs: number) => void
970
+ /**
971
+ * File logger used to surface poll errors. Must be a file logger — the
972
+ * host terminal is the frame buffer, so writes to stdout/stderr would
973
+ * corrupt the sidebar render. The plugin production path uses
974
+ * `resolveLogger(undefined)` to fall through to the on-disk file
975
+ * logger.
976
+ */
977
+ logger: TuiLogger
978
+ }
979
+
980
+ export function startRpcNotificationPolling(
981
+ options: RpcNotificationPollOptions,
982
+ ): void {
983
+ if (rpcPollStarted) return
984
+ rpcPollStarted = true
985
+ options.schedule(async () => {
986
+ if (rpcInFlight) return
987
+ rpcInFlight = true
988
+ try {
989
+ const sessionId = options.currentSessionId()
990
+ const cursorKey = sessionId ?? GLOBAL_NOTIFICATION_CURSOR
991
+ let cursor = notificationCursorBySession.get(cursorKey) ?? 0
992
+ const notifications = await options.pending(cursor, sessionId)
993
+ for (const notification of [...notifications].sort(
994
+ (a, b) => a.id - b.id,
995
+ )) {
996
+ if (notification.id <= cursor) continue
997
+ cursor = Math.max(cursor, notification.id)
998
+ if (dispatchedNotificationIds.has(notification.id)) continue
999
+ dispatchedNotificationIds.add(notification.id)
1000
+ if (dispatchedNotificationIds.size > 100) {
1001
+ const oldestId = dispatchedNotificationIds.values().next().value
1002
+ if (oldestId !== undefined) dispatchedNotificationIds.delete(oldestId)
1003
+ }
1004
+ await options.dispatch(notification)
1005
+ }
1006
+ if (!notificationCursorBySession.has(cursorKey)) {
1007
+ while (notificationCursorBySession.size >= MAX_NOTIFICATION_CURSORS) {
1008
+ const oldest = notificationCursorBySession.keys().next().value
1009
+ if (oldest === undefined) break
1010
+ notificationCursorBySession.delete(oldest)
1011
+ }
1012
+ }
1013
+ notificationCursorBySession.set(cursorKey, cursor)
1014
+ } catch (error) {
1015
+ // Surface the swallowed error through the file logger rather than
1016
+ // stdout/stderr (the host terminal is the frame buffer — any byte
1017
+ // written here corrupts every subsequent cell). Without this, a
1018
+ // transient RPC outage is invisible to operators. The catch stays
1019
+ // because one failed poll must never break the next — the scheduler
1020
+ // is a setInterval and a thrown error there would crash the
1021
+ // process.
1022
+ options.logger.warn('rpc-poll-failed', {
1023
+ error: error instanceof Error ? error.message : String(error),
1024
+ })
1025
+ } finally {
1026
+ rpcInFlight = false
1027
+ }
1028
+ }, RPC_POLL_MS)
1029
+ }
1030
+
1031
+ const tui: TuiPlugin = async (api) => {
1032
+ const logger = resolveLogger(undefined)
1033
+ const prefsRoot = await readTuiPreferencesFile()
1034
+ if (!sidebarController) {
1035
+ sidebarController = createSidebarController(
1036
+ resolveAntigravityAuthPrefs(prefsRoot),
1037
+ )
1038
+ }
1039
+ // The `/antigravity` drawer: the server pushes the menu as a notification
1040
+ // on this process's private RPC; the drawer applies through the same RPC.
1041
+ const transport = createV1MenuTransport(
1042
+ getRpcDir(api.state.path.directory ?? ''),
1043
+ process.pid,
1044
+ )
1045
+ startRpcNotificationPolling({
1046
+ pending: (lastReceivedId, sessionId) =>
1047
+ transport.pending(lastReceivedId, sessionId),
1048
+ currentSessionId: () => {
1049
+ const current = (api.route as { current?: unknown }).current
1050
+ const resolved =
1051
+ typeof current === 'function' ? (current as () => unknown)() : current
1052
+ return (resolved as { params?: { sessionID?: string } } | undefined)
1053
+ ?.params?.sessionID
1054
+ },
1055
+ dispatch: (notification) => {
1056
+ logger.debug('rpc-notification-received', {
1057
+ id: notification.id,
1058
+ sessionId: notification.sessionId,
1059
+ })
1060
+ dispatchV1Notification(api, transport, notification, logger)
1061
+ },
1062
+ schedule: (poll, intervalMs) => {
1063
+ setInterval(() => void poll(), intervalMs)
1064
+ },
1065
+ logger,
1066
+ })
1067
+
1068
+ // The host supplies the live theme via `api.theme.current` — the slot
1069
+ // callback's closure captures `api` so the accessor always reads the
1070
+ // current theme. A Solid re-render follows whenever the user switches.
1071
+ const liveTheme = (): TuiThemeCurrent => api.theme.current
1072
+
1073
+ api.slots.register({
1074
+ order: computeEffectiveOrder(prefsRoot, PLUGIN_KEY, DEFAULT_SLOT_ORDER),
1075
+ slots: {
1076
+ sidebar_content: (_context, { session_id: sessionId }) => (
1077
+ <SidebarPanel logger={logger} theme={liveTheme} sessionId={sessionId} />
1078
+ ),
1079
+ },
1080
+ })
1081
+ }
1082
+
1083
+ const plugin: TuiPluginModule & { id: string } = {
1084
+ id: ID,
1085
+ tui,
1086
+ }
1087
+
1088
+ export default plugin