anypick 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +589 -0
  3. package/dist/adapters.d.ts +4 -0
  4. package/dist/adapters.d.ts.map +1 -0
  5. package/dist/adapters.js +2 -0
  6. package/dist/catalog/model-fetch.d.ts +34 -0
  7. package/dist/catalog/model-fetch.d.ts.map +1 -0
  8. package/dist/catalog/model-fetch.js +99 -0
  9. package/dist/catalog/model-fetch.js.map +1 -0
  10. package/dist/catalog/providers.d.ts +42 -0
  11. package/dist/catalog/providers.d.ts.map +1 -0
  12. package/dist/catalog/providers.js +424 -0
  13. package/dist/catalog/providers.js.map +1 -0
  14. package/dist/cli/bootstrap.d.ts +3 -0
  15. package/dist/cli/bootstrap.d.ts.map +1 -0
  16. package/dist/cli/bootstrap.js +78 -0
  17. package/dist/cli/bootstrap.js.map +1 -0
  18. package/dist/cli/commands.d.ts +29 -0
  19. package/dist/cli/commands.d.ts.map +1 -0
  20. package/dist/cli/commands.js +1043 -0
  21. package/dist/cli/commands.js.map +1 -0
  22. package/dist/cli/completion.d.ts +6 -0
  23. package/dist/cli/completion.d.ts.map +1 -0
  24. package/dist/cli/completion.js +202 -0
  25. package/dist/cli/completion.js.map +1 -0
  26. package/dist/cli/errors.d.ts +20 -0
  27. package/dist/cli/errors.d.ts.map +1 -0
  28. package/dist/cli/errors.js +47 -0
  29. package/dist/cli/errors.js.map +1 -0
  30. package/dist/cli/format.d.ts +6 -0
  31. package/dist/cli/format.d.ts.map +1 -0
  32. package/dist/cli/format.js +75 -0
  33. package/dist/cli/format.js.map +1 -0
  34. package/dist/cli/help.d.ts +6 -0
  35. package/dist/cli/help.d.ts.map +1 -0
  36. package/dist/cli/help.js +66 -0
  37. package/dist/cli/help.js.map +1 -0
  38. package/dist/cli/interactive-accounts.d.ts +3 -0
  39. package/dist/cli/interactive-accounts.d.ts.map +1 -0
  40. package/dist/cli/interactive-accounts.js +86 -0
  41. package/dist/cli/interactive-accounts.js.map +1 -0
  42. package/dist/cli/interactive-maintenance.d.ts +4 -0
  43. package/dist/cli/interactive-maintenance.d.ts.map +1 -0
  44. package/dist/cli/interactive-maintenance.js +30 -0
  45. package/dist/cli/interactive-maintenance.js.map +1 -0
  46. package/dist/cli/interactive.d.ts +14 -0
  47. package/dist/cli/interactive.d.ts.map +1 -0
  48. package/dist/cli/interactive.js +242 -0
  49. package/dist/cli/interactive.js.map +1 -0
  50. package/dist/cli/launch-client.d.ts +18 -0
  51. package/dist/cli/launch-client.d.ts.map +1 -0
  52. package/dist/cli/launch-client.js +117 -0
  53. package/dist/cli/launch-client.js.map +1 -0
  54. package/dist/cli/launcher-model.d.ts +64 -0
  55. package/dist/cli/launcher-model.d.ts.map +1 -0
  56. package/dist/cli/launcher-model.js +200 -0
  57. package/dist/cli/launcher-model.js.map +1 -0
  58. package/dist/cli/launcher-render.d.ts +22 -0
  59. package/dist/cli/launcher-render.d.ts.map +1 -0
  60. package/dist/cli/launcher-render.js +113 -0
  61. package/dist/cli/launcher-render.js.map +1 -0
  62. package/dist/cli/launcher.d.ts +27 -0
  63. package/dist/cli/launcher.d.ts.map +1 -0
  64. package/dist/cli/launcher.js +93 -0
  65. package/dist/cli/launcher.js.map +1 -0
  66. package/dist/cli/local-health.d.ts +17 -0
  67. package/dist/cli/local-health.d.ts.map +1 -0
  68. package/dist/cli/local-health.js +31 -0
  69. package/dist/cli/local-health.js.map +1 -0
  70. package/dist/cli/plugin-commands.d.ts +4 -0
  71. package/dist/cli/plugin-commands.d.ts.map +1 -0
  72. package/dist/cli/plugin-commands.js +160 -0
  73. package/dist/cli/plugin-commands.js.map +1 -0
  74. package/dist/cli/primary.d.ts +18 -0
  75. package/dist/cli/primary.d.ts.map +1 -0
  76. package/dist/cli/primary.js +593 -0
  77. package/dist/cli/primary.js.map +1 -0
  78. package/dist/cli/render-util.d.ts +24 -0
  79. package/dist/cli/render-util.d.ts.map +1 -0
  80. package/dist/cli/render-util.js +58 -0
  81. package/dist/cli/render-util.js.map +1 -0
  82. package/dist/cli/ux.d.ts +43 -0
  83. package/dist/cli/ux.d.ts.map +1 -0
  84. package/dist/cli/ux.js +114 -0
  85. package/dist/cli/ux.js.map +1 -0
  86. package/dist/cli.d.ts +3 -0
  87. package/dist/cli.d.ts.map +1 -0
  88. package/dist/cli.js +35 -0
  89. package/dist/cli.js.map +1 -0
  90. package/dist/clients/claude-client-apply.d.ts +8 -0
  91. package/dist/clients/claude-client-apply.d.ts.map +1 -0
  92. package/dist/clients/claude-client-apply.js +108 -0
  93. package/dist/clients/claude-client-apply.js.map +1 -0
  94. package/dist/clients/claude-code.d.ts +5 -0
  95. package/dist/clients/claude-code.d.ts.map +1 -0
  96. package/dist/clients/claude-code.js +189 -0
  97. package/dist/clients/claude-code.js.map +1 -0
  98. package/dist/clients/claude-settings-guard.d.ts +18 -0
  99. package/dist/clients/claude-settings-guard.d.ts.map +1 -0
  100. package/dist/clients/codex-desktop-catalog.d.ts +67 -0
  101. package/dist/clients/codex-desktop-catalog.d.ts.map +1 -0
  102. package/dist/clients/codex-desktop-catalog.js +212 -0
  103. package/dist/clients/codex-desktop-catalog.js.map +1 -0
  104. package/dist/clients/codex.d.ts +181 -0
  105. package/dist/clients/codex.d.ts.map +1 -0
  106. package/dist/clients/codex.js +783 -0
  107. package/dist/clients/codex.js.map +1 -0
  108. package/dist/clients/env-files.d.ts +14 -0
  109. package/dist/clients/env-files.d.ts.map +1 -0
  110. package/dist/clients/env-files.js +50 -0
  111. package/dist/clients/env-files.js.map +1 -0
  112. package/dist/clients/gemini-client-utils.d.ts +4 -0
  113. package/dist/clients/gemini-client-utils.d.ts.map +1 -0
  114. package/dist/clients/gemini-client-utils.js +33 -0
  115. package/dist/clients/gemini-client-utils.js.map +1 -0
  116. package/dist/clients/gemini.d.ts +16 -0
  117. package/dist/clients/gemini.d.ts.map +1 -0
  118. package/dist/clients/gemini.js +233 -0
  119. package/dist/clients/gemini.js.map +1 -0
  120. package/dist/clients/index.d.ts +14 -0
  121. package/dist/clients/index.d.ts.map +1 -0
  122. package/dist/clients/index.js +18 -0
  123. package/dist/clients/index.js.map +1 -0
  124. package/dist/clients/isolation.d.ts +28 -0
  125. package/dist/clients/isolation.d.ts.map +1 -0
  126. package/dist/clients/isolation.js +131 -0
  127. package/dist/clients/isolation.js.map +1 -0
  128. package/dist/clients/kiro.d.ts +10 -0
  129. package/dist/clients/kiro.d.ts.map +1 -0
  130. package/dist/clients/kiro.js +168 -0
  131. package/dist/clients/kiro.js.map +1 -0
  132. package/dist/clients/model-roles.d.ts +58 -0
  133. package/dist/clients/model-roles.d.ts.map +1 -0
  134. package/dist/clients/model-roles.js +139 -0
  135. package/dist/clients/model-roles.js.map +1 -0
  136. package/dist/clients/registry.d.ts +7 -0
  137. package/dist/clients/registry.d.ts.map +1 -0
  138. package/dist/clients/registry.js +16 -0
  139. package/dist/clients/registry.js.map +1 -0
  140. package/dist/clients/resolve.d.ts +27 -0
  141. package/dist/clients/resolve.d.ts.map +1 -0
  142. package/dist/clients/resolve.js +49 -0
  143. package/dist/clients/resolve.js.map +1 -0
  144. package/dist/core/account-codec.d.ts +32 -0
  145. package/dist/core/account-codec.d.ts.map +1 -0
  146. package/dist/core/account-codec.js +134 -0
  147. package/dist/core/account-codec.js.map +1 -0
  148. package/dist/core/account-transfer.d.ts +20 -0
  149. package/dist/core/account-transfer.d.ts.map +1 -0
  150. package/dist/core/account-transfer.js +136 -0
  151. package/dist/core/account-transfer.js.map +1 -0
  152. package/dist/core/activation-executor.d.ts +72 -0
  153. package/dist/core/activation-executor.d.ts.map +1 -0
  154. package/dist/core/activation-executor.js +690 -0
  155. package/dist/core/activation-executor.js.map +1 -0
  156. package/dist/core/activation-models.d.ts +6 -0
  157. package/dist/core/activation-models.d.ts.map +1 -0
  158. package/dist/core/activation-models.js +33 -0
  159. package/dist/core/activation-models.js.map +1 -0
  160. package/dist/core/activation-planner.d.ts +38 -0
  161. package/dist/core/activation-planner.d.ts.map +1 -0
  162. package/dist/core/activation-planner.js +248 -0
  163. package/dist/core/activation-planner.js.map +1 -0
  164. package/dist/core/activation-protocol.d.ts +3 -0
  165. package/dist/core/activation-protocol.d.ts.map +1 -0
  166. package/dist/core/activation-protocol.js +9 -0
  167. package/dist/core/activation-protocol.js.map +1 -0
  168. package/dist/core/activation-transport.d.ts +15 -0
  169. package/dist/core/activation-transport.d.ts.map +1 -0
  170. package/dist/core/activation-transport.js +23 -0
  171. package/dist/core/activation-transport.js.map +1 -0
  172. package/dist/core/app.d.ts +149 -0
  173. package/dist/core/app.d.ts.map +1 -0
  174. package/dist/core/app.js +372 -0
  175. package/dist/core/app.js.map +1 -0
  176. package/dist/core/binding-service.d.ts +93 -0
  177. package/dist/core/binding-service.d.ts.map +1 -0
  178. package/dist/core/binding-service.js +281 -0
  179. package/dist/core/binding-service.js.map +1 -0
  180. package/dist/core/binding-store.d.ts +23 -0
  181. package/dist/core/binding-store.d.ts.map +1 -0
  182. package/dist/core/binding-store.js +154 -0
  183. package/dist/core/binding-store.js.map +1 -0
  184. package/dist/core/brand.d.ts +18 -0
  185. package/dist/core/brand.d.ts.map +1 -0
  186. package/dist/core/brand.js +22 -0
  187. package/dist/core/brand.js.map +1 -0
  188. package/dist/core/capabilities.d.ts +30 -0
  189. package/dist/core/capabilities.d.ts.map +1 -0
  190. package/dist/core/capabilities.js +27 -0
  191. package/dist/core/capabilities.js.map +1 -0
  192. package/dist/core/client-state-store.d.ts +17 -0
  193. package/dist/core/client-state-store.d.ts.map +1 -0
  194. package/dist/core/client-state-store.js +47 -0
  195. package/dist/core/client-state-store.js.map +1 -0
  196. package/dist/core/codec/account.d.ts +52 -0
  197. package/dist/core/codec/account.d.ts.map +1 -0
  198. package/dist/core/codec/account.js +69 -0
  199. package/dist/core/codec/account.js.map +1 -0
  200. package/dist/core/codec/bindings.d.ts +38 -0
  201. package/dist/core/codec/bindings.d.ts.map +1 -0
  202. package/dist/core/codec/bindings.js +79 -0
  203. package/dist/core/codec/bindings.js.map +1 -0
  204. package/dist/core/codec/operations.d.ts +36 -0
  205. package/dist/core/codec/operations.d.ts.map +1 -0
  206. package/dist/core/codec/operations.js +82 -0
  207. package/dist/core/codec/operations.js.map +1 -0
  208. package/dist/core/codec/primitives.d.ts +59 -0
  209. package/dist/core/codec/primitives.d.ts.map +1 -0
  210. package/dist/core/codec/primitives.js +123 -0
  211. package/dist/core/codec/primitives.js.map +1 -0
  212. package/dist/core/codec/proxy-hub.d.ts +43 -0
  213. package/dist/core/codec/proxy-hub.d.ts.map +1 -0
  214. package/dist/core/codec/proxy-hub.js +69 -0
  215. package/dist/core/codec/proxy-hub.js.map +1 -0
  216. package/dist/core/codec/runtime.d.ts +41 -0
  217. package/dist/core/codec/runtime.d.ts.map +1 -0
  218. package/dist/core/codec/runtime.js +66 -0
  219. package/dist/core/codec/runtime.js.map +1 -0
  220. package/dist/core/codec.d.ts +43 -0
  221. package/dist/core/codec.d.ts.map +1 -0
  222. package/dist/core/codec.js +69 -0
  223. package/dist/core/codec.js.map +1 -0
  224. package/dist/core/codex-live-config.d.ts +92 -0
  225. package/dist/core/codex-live-config.d.ts.map +1 -0
  226. package/dist/core/codex-live-config.js +263 -0
  227. package/dist/core/codex-live-config.js.map +1 -0
  228. package/dist/core/config-service.d.ts +35 -0
  229. package/dist/core/config-service.d.ts.map +1 -0
  230. package/dist/core/config-service.js +87 -0
  231. package/dist/core/config-service.js.map +1 -0
  232. package/dist/core/config.d.ts +14 -0
  233. package/dist/core/config.d.ts.map +1 -0
  234. package/dist/core/config.js +45 -0
  235. package/dist/core/config.js.map +1 -0
  236. package/dist/core/db-schema.d.ts +30 -0
  237. package/dist/core/db-schema.d.ts.map +1 -0
  238. package/dist/core/db-schema.js +278 -0
  239. package/dist/core/db-schema.js.map +1 -0
  240. package/dist/core/db.d.ts +72 -0
  241. package/dist/core/db.d.ts.map +1 -0
  242. package/dist/core/db.js +192 -0
  243. package/dist/core/db.js.map +1 -0
  244. package/dist/core/doctor-fixes.d.ts +3 -0
  245. package/dist/core/doctor-fixes.d.ts.map +1 -0
  246. package/dist/core/doctor-fixes.js +102 -0
  247. package/dist/core/doctor-fixes.js.map +1 -0
  248. package/dist/core/doctor-format.d.ts +10 -0
  249. package/dist/core/doctor-format.d.ts.map +1 -0
  250. package/dist/core/doctor-format.js +45 -0
  251. package/dist/core/doctor-format.js.map +1 -0
  252. package/dist/core/doctor-report.d.ts +3 -0
  253. package/dist/core/doctor-report.d.ts.map +1 -0
  254. package/dist/core/doctor-report.js +174 -0
  255. package/dist/core/doctor-report.js.map +1 -0
  256. package/dist/core/doctor-scan.d.ts +7 -0
  257. package/dist/core/doctor-scan.d.ts.map +1 -0
  258. package/dist/core/doctor-scan.js +139 -0
  259. package/dist/core/doctor-scan.js.map +1 -0
  260. package/dist/core/doctor-types.d.ts +89 -0
  261. package/dist/core/doctor-types.d.ts.map +1 -0
  262. package/dist/core/doctor-types.js +14 -0
  263. package/dist/core/doctor-types.js.map +1 -0
  264. package/dist/core/doctor-utils.d.ts +3 -0
  265. package/dist/core/doctor-utils.d.ts.map +1 -0
  266. package/dist/core/doctor-utils.js +36 -0
  267. package/dist/core/doctor-utils.js.map +1 -0
  268. package/dist/core/doctor.d.ts +14 -0
  269. package/dist/core/doctor.d.ts.map +1 -0
  270. package/dist/core/doctor.js +127 -0
  271. package/dist/core/doctor.js.map +1 -0
  272. package/dist/core/events.d.ts +58 -0
  273. package/dist/core/events.d.ts.map +1 -0
  274. package/dist/core/events.js +88 -0
  275. package/dist/core/events.js.map +1 -0
  276. package/dist/core/journal.d.ts +23 -0
  277. package/dist/core/journal.d.ts.map +1 -0
  278. package/dist/core/journal.js +93 -0
  279. package/dist/core/journal.js.map +1 -0
  280. package/dist/core/lease-store.d.ts +22 -0
  281. package/dist/core/lease-store.d.ts.map +1 -0
  282. package/dist/core/lease-store.js +81 -0
  283. package/dist/core/lease-store.js.map +1 -0
  284. package/dist/core/migrate-bindings.d.ts +10 -0
  285. package/dist/core/migrate-bindings.d.ts.map +1 -0
  286. package/dist/core/migrate-bindings.js +98 -0
  287. package/dist/core/migrate-bindings.js.map +1 -0
  288. package/dist/core/migrate-fs.d.ts +11 -0
  289. package/dist/core/migrate-fs.d.ts.map +1 -0
  290. package/dist/core/migrate-fs.js +184 -0
  291. package/dist/core/migrate-fs.js.map +1 -0
  292. package/dist/core/model-cache-store.d.ts +27 -0
  293. package/dist/core/model-cache-store.d.ts.map +1 -0
  294. package/dist/core/model-cache-store.js +50 -0
  295. package/dist/core/model-cache-store.js.map +1 -0
  296. package/dist/core/model-discovery.d.ts +66 -0
  297. package/dist/core/model-discovery.d.ts.map +1 -0
  298. package/dist/core/model-discovery.js +127 -0
  299. package/dist/core/model-discovery.js.map +1 -0
  300. package/dist/core/model-policy.d.ts +40 -0
  301. package/dist/core/model-policy.d.ts.map +1 -0
  302. package/dist/core/model-policy.js +77 -0
  303. package/dist/core/model-policy.js.map +1 -0
  304. package/dist/core/model-roles.d.ts +9 -0
  305. package/dist/core/model-roles.d.ts.map +1 -0
  306. package/dist/core/model-roles.js +20 -0
  307. package/dist/core/model-roles.js.map +1 -0
  308. package/dist/core/mutation-lock.d.ts +31 -0
  309. package/dist/core/mutation-lock.d.ts.map +1 -0
  310. package/dist/core/mutation-lock.js +69 -0
  311. package/dist/core/mutation-lock.js.map +1 -0
  312. package/dist/core/paths.d.ts +49 -0
  313. package/dist/core/paths.d.ts.map +1 -0
  314. package/dist/core/paths.js +110 -0
  315. package/dist/core/paths.js.map +1 -0
  316. package/dist/core/plugin-loader.d.ts +40 -0
  317. package/dist/core/plugin-loader.d.ts.map +1 -0
  318. package/dist/core/plugin-loader.js +184 -0
  319. package/dist/core/plugin-loader.js.map +1 -0
  320. package/dist/core/plugin-service.d.ts +32 -0
  321. package/dist/core/plugin-service.d.ts.map +1 -0
  322. package/dist/core/plugin-service.js +110 -0
  323. package/dist/core/plugin-service.js.map +1 -0
  324. package/dist/core/plugin-store.d.ts +18 -0
  325. package/dist/core/plugin-store.d.ts.map +1 -0
  326. package/dist/core/plugin-store.js +50 -0
  327. package/dist/core/plugin-store.js.map +1 -0
  328. package/dist/core/pool-store.d.ts +44 -0
  329. package/dist/core/pool-store.d.ts.map +1 -0
  330. package/dist/core/pool-store.js +198 -0
  331. package/dist/core/pool-store.js.map +1 -0
  332. package/dist/core/preset-store.d.ts +29 -0
  333. package/dist/core/preset-store.d.ts.map +1 -0
  334. package/dist/core/preset-store.js +105 -0
  335. package/dist/core/preset-store.js.map +1 -0
  336. package/dist/core/profile-service.d.ts +50 -0
  337. package/dist/core/profile-service.d.ts.map +1 -0
  338. package/dist/core/profile-service.js +149 -0
  339. package/dist/core/profile-service.js.map +1 -0
  340. package/dist/core/profile-store.d.ts +20 -0
  341. package/dist/core/profile-store.d.ts.map +1 -0
  342. package/dist/core/profile-store.js +92 -0
  343. package/dist/core/profile-store.js.map +1 -0
  344. package/dist/core/profile-synth.d.ts +24 -0
  345. package/dist/core/profile-synth.d.ts.map +1 -0
  346. package/dist/core/profile-synth.js +30 -0
  347. package/dist/core/profile-synth.js.map +1 -0
  348. package/dist/core/project-root.d.ts +7 -0
  349. package/dist/core/project-root.d.ts.map +1 -0
  350. package/dist/core/project-root.js +23 -0
  351. package/dist/core/project-root.js.map +1 -0
  352. package/dist/core/proxy-hub-cli.d.ts +3 -0
  353. package/dist/core/proxy-hub-cli.d.ts.map +1 -0
  354. package/dist/core/proxy-hub-cli.js +80 -0
  355. package/dist/core/proxy-hub-cli.js.map +1 -0
  356. package/dist/core/proxy-hub-routes.d.ts +22 -0
  357. package/dist/core/proxy-hub-routes.d.ts.map +1 -0
  358. package/dist/core/proxy-hub-routes.js +92 -0
  359. package/dist/core/proxy-hub-routes.js.map +1 -0
  360. package/dist/core/proxy-hub-server.d.ts +59 -0
  361. package/dist/core/proxy-hub-server.d.ts.map +1 -0
  362. package/dist/core/proxy-hub-server.js +409 -0
  363. package/dist/core/proxy-hub-server.js.map +1 -0
  364. package/dist/core/proxy-hub-service.d.ts +97 -0
  365. package/dist/core/proxy-hub-service.d.ts.map +1 -0
  366. package/dist/core/proxy-hub-service.js +553 -0
  367. package/dist/core/proxy-hub-service.js.map +1 -0
  368. package/dist/core/proxy-hub-store.d.ts +28 -0
  369. package/dist/core/proxy-hub-store.d.ts.map +1 -0
  370. package/dist/core/proxy-hub-store.js +152 -0
  371. package/dist/core/proxy-hub-store.js.map +1 -0
  372. package/dist/core/proxy-lifecycle.d.ts +26 -0
  373. package/dist/core/proxy-lifecycle.d.ts.map +1 -0
  374. package/dist/core/proxy-lifecycle.js +33 -0
  375. package/dist/core/proxy-lifecycle.js.map +1 -0
  376. package/dist/core/proxy-ports.d.ts +50 -0
  377. package/dist/core/proxy-ports.d.ts.map +1 -0
  378. package/dist/core/proxy-ports.js +86 -0
  379. package/dist/core/proxy-ports.js.map +1 -0
  380. package/dist/core/proxy-service.d.ts +184 -0
  381. package/dist/core/proxy-service.d.ts.map +1 -0
  382. package/dist/core/proxy-service.js +860 -0
  383. package/dist/core/proxy-service.js.map +1 -0
  384. package/dist/core/quota-guard-policy.d.ts +8 -0
  385. package/dist/core/quota-guard-policy.d.ts.map +1 -0
  386. package/dist/core/quota-guard-policy.js +21 -0
  387. package/dist/core/quota-guard-policy.js.map +1 -0
  388. package/dist/core/realign-proxy-clients.d.ts +19 -0
  389. package/dist/core/realign-proxy-clients.d.ts.map +1 -0
  390. package/dist/core/realign-proxy-clients.js +40 -0
  391. package/dist/core/realign-proxy-clients.js.map +1 -0
  392. package/dist/core/refs.d.ts +84 -0
  393. package/dist/core/refs.d.ts.map +1 -0
  394. package/dist/core/refs.js +250 -0
  395. package/dist/core/refs.js.map +1 -0
  396. package/dist/core/registry.d.ts +46 -0
  397. package/dist/core/registry.d.ts.map +1 -0
  398. package/dist/core/registry.js +70 -0
  399. package/dist/core/registry.js.map +1 -0
  400. package/dist/core/resolve-source.d.ts +54 -0
  401. package/dist/core/resolve-source.d.ts.map +1 -0
  402. package/dist/core/resolve-source.js +148 -0
  403. package/dist/core/resolve-source.js.map +1 -0
  404. package/dist/core/runtime-service.d.ts +158 -0
  405. package/dist/core/runtime-service.d.ts.map +1 -0
  406. package/dist/core/runtime-service.js +422 -0
  407. package/dist/core/runtime-service.js.map +1 -0
  408. package/dist/core/service.d.ts +200 -0
  409. package/dist/core/service.d.ts.map +1 -0
  410. package/dist/core/service.js +643 -0
  411. package/dist/core/service.js.map +1 -0
  412. package/dist/core/store-snapshot.d.ts +10 -0
  413. package/dist/core/store-snapshot.d.ts.map +1 -0
  414. package/dist/core/store-snapshot.js +79 -0
  415. package/dist/core/store-snapshot.js.map +1 -0
  416. package/dist/core/store.d.ts +68 -0
  417. package/dist/core/store.d.ts.map +1 -0
  418. package/dist/core/store.js +159 -0
  419. package/dist/core/store.js.map +1 -0
  420. package/dist/core/tray-runtime.d.ts +15 -0
  421. package/dist/core/tray-runtime.d.ts.map +1 -0
  422. package/dist/core/tray-runtime.js +33 -0
  423. package/dist/core/tray-runtime.js.map +1 -0
  424. package/dist/core/tray-settings-service.d.ts +7 -0
  425. package/dist/core/tray-settings-service.d.ts.map +1 -0
  426. package/dist/core/tray-settings-service.js +24 -0
  427. package/dist/core/tray-settings-service.js.map +1 -0
  428. package/dist/core/update.d.ts +26 -0
  429. package/dist/core/update.d.ts.map +1 -0
  430. package/dist/core/update.js +128 -0
  431. package/dist/core/update.js.map +1 -0
  432. package/dist/index.d.ts +12 -0
  433. package/dist/index.d.ts.map +1 -0
  434. package/dist/index.js +7 -0
  435. package/dist/network/egress/allowlist.d.ts +2 -0
  436. package/dist/network/egress/allowlist.d.ts.map +1 -0
  437. package/dist/network/egress/allowlist.js +14 -0
  438. package/dist/network/egress/allowlist.js.map +1 -0
  439. package/dist/network/egress/direct.d.ts +17 -0
  440. package/dist/network/egress/direct.d.ts.map +1 -0
  441. package/dist/network/egress/direct.js +28 -0
  442. package/dist/network/egress/direct.js.map +1 -0
  443. package/dist/network/egress/errors.d.ts +4 -0
  444. package/dist/network/egress/errors.d.ts.map +1 -0
  445. package/dist/network/egress/errors.js +8 -0
  446. package/dist/network/egress/errors.js.map +1 -0
  447. package/dist/network/egress/index.d.ts +6 -0
  448. package/dist/network/egress/index.d.ts.map +1 -0
  449. package/dist/network/egress/index.js +11 -0
  450. package/dist/network/egress/index.js.map +1 -0
  451. package/dist/network/egress/types.d.ts +16 -0
  452. package/dist/network/egress/types.d.ts.map +1 -0
  453. package/dist/presentation/client-name.d.ts +14 -0
  454. package/dist/presentation/client-name.d.ts.map +1 -0
  455. package/dist/presentation/client-name.js +22 -0
  456. package/dist/presentation/client-name.js.map +1 -0
  457. package/dist/presentation/layout.d.ts +7 -0
  458. package/dist/presentation/layout.d.ts.map +1 -0
  459. package/dist/presentation/layout.js +10 -0
  460. package/dist/presentation/layout.js.map +1 -0
  461. package/dist/providers/auth-fingerprint.d.ts +56 -0
  462. package/dist/providers/auth-fingerprint.d.ts.map +1 -0
  463. package/dist/providers/auth-fingerprint.js +163 -0
  464. package/dist/providers/auth-fingerprint.js.map +1 -0
  465. package/dist/providers/claude.d.ts +43 -0
  466. package/dist/providers/claude.d.ts.map +1 -0
  467. package/dist/providers/claude.js +191 -0
  468. package/dist/providers/claude.js.map +1 -0
  469. package/dist/providers/codex-identity.d.ts +13 -0
  470. package/dist/providers/codex-identity.d.ts.map +1 -0
  471. package/dist/providers/codex-identity.js +69 -0
  472. package/dist/providers/codex-identity.js.map +1 -0
  473. package/dist/providers/codex-refresh.d.ts +30 -0
  474. package/dist/providers/codex-refresh.d.ts.map +1 -0
  475. package/dist/providers/codex-refresh.js +64 -0
  476. package/dist/providers/codex-refresh.js.map +1 -0
  477. package/dist/providers/codex-usage.d.ts +3 -0
  478. package/dist/providers/codex-usage.d.ts.map +1 -0
  479. package/dist/providers/codex-usage.js +42 -0
  480. package/dist/providers/codex-usage.js.map +1 -0
  481. package/dist/providers/codex.d.ts +61 -0
  482. package/dist/providers/codex.d.ts.map +1 -0
  483. package/dist/providers/codex.js +212 -0
  484. package/dist/providers/codex.js.map +1 -0
  485. package/dist/providers/gemini-antigravity-oauth.d.ts +83 -0
  486. package/dist/providers/gemini-antigravity-oauth.d.ts.map +1 -0
  487. package/dist/providers/gemini-antigravity-oauth.js +343 -0
  488. package/dist/providers/gemini-antigravity-oauth.js.map +1 -0
  489. package/dist/providers/gemini-antigravity-state.d.ts +35 -0
  490. package/dist/providers/gemini-antigravity-state.d.ts.map +1 -0
  491. package/dist/providers/gemini-antigravity-state.js +433 -0
  492. package/dist/providers/gemini-antigravity-state.js.map +1 -0
  493. package/dist/providers/gemini-env.d.ts +8 -0
  494. package/dist/providers/gemini-env.d.ts.map +1 -0
  495. package/dist/providers/gemini-env.js +78 -0
  496. package/dist/providers/gemini-env.js.map +1 -0
  497. package/dist/providers/gemini-identity.d.ts +2 -0
  498. package/dist/providers/gemini-identity.d.ts.map +1 -0
  499. package/dist/providers/gemini-identity.js +14 -0
  500. package/dist/providers/gemini-identity.js.map +1 -0
  501. package/dist/providers/gemini-proxy/main.d.ts +3 -0
  502. package/dist/providers/gemini-proxy/main.d.ts.map +1 -0
  503. package/dist/providers/gemini-proxy/main.js +176 -0
  504. package/dist/providers/gemini-proxy/main.js.map +1 -0
  505. package/dist/providers/gemini-proxy/server.d.ts +57 -0
  506. package/dist/providers/gemini-proxy/server.d.ts.map +1 -0
  507. package/dist/providers/gemini-proxy/server.js +1240 -0
  508. package/dist/providers/gemini-proxy/server.js.map +1 -0
  509. package/dist/providers/gemini-proxy-entry.d.ts +2 -0
  510. package/dist/providers/gemini-proxy-entry.d.ts.map +1 -0
  511. package/dist/providers/gemini-proxy-entry.js +16 -0
  512. package/dist/providers/gemini-proxy-entry.js.map +1 -0
  513. package/dist/providers/gemini-proxy-lifecycle.d.ts +11 -0
  514. package/dist/providers/gemini-proxy-lifecycle.d.ts.map +1 -0
  515. package/dist/providers/gemini-proxy-lifecycle.js +131 -0
  516. package/dist/providers/gemini-proxy-lifecycle.js.map +1 -0
  517. package/dist/providers/gemini.d.ts +137 -0
  518. package/dist/providers/gemini.d.ts.map +1 -0
  519. package/dist/providers/gemini.js +471 -0
  520. package/dist/providers/gemini.js.map +1 -0
  521. package/dist/providers/grok-proxy/auth.d.ts +27 -0
  522. package/dist/providers/grok-proxy/auth.d.ts.map +1 -0
  523. package/dist/providers/grok-proxy/auth.js +123 -0
  524. package/dist/providers/grok-proxy/auth.js.map +1 -0
  525. package/dist/providers/grok-proxy/main.d.ts +3 -0
  526. package/dist/providers/grok-proxy/main.d.ts.map +1 -0
  527. package/dist/providers/grok-proxy/main.js +111 -0
  528. package/dist/providers/grok-proxy/main.js.map +1 -0
  529. package/dist/providers/grok-proxy/server.d.ts +46 -0
  530. package/dist/providers/grok-proxy/server.d.ts.map +1 -0
  531. package/dist/providers/grok-proxy/server.js +595 -0
  532. package/dist/providers/grok-proxy/server.js.map +1 -0
  533. package/dist/providers/grok.d.ts +38 -0
  534. package/dist/providers/grok.d.ts.map +1 -0
  535. package/dist/providers/grok.js +250 -0
  536. package/dist/providers/grok.js.map +1 -0
  537. package/dist/providers/index.d.ts +14 -0
  538. package/dist/providers/index.d.ts.map +1 -0
  539. package/dist/providers/index.js +23 -0
  540. package/dist/providers/index.js.map +1 -0
  541. package/dist/providers/kiro-secret-store.d.ts +39 -0
  542. package/dist/providers/kiro-secret-store.d.ts.map +1 -0
  543. package/dist/providers/kiro-secret-store.js +168 -0
  544. package/dist/providers/kiro-secret-store.js.map +1 -0
  545. package/dist/providers/kiro.d.ts +50 -0
  546. package/dist/providers/kiro.d.ts.map +1 -0
  547. package/dist/providers/kiro.js +373 -0
  548. package/dist/providers/kiro.js.map +1 -0
  549. package/dist/providers/model-policy.d.ts +15 -0
  550. package/dist/providers/model-policy.d.ts.map +1 -0
  551. package/dist/providers/model-policy.js +26 -0
  552. package/dist/providers/model-policy.js.map +1 -0
  553. package/dist/providers/opencode-auth.d.ts +67 -0
  554. package/dist/providers/opencode-auth.d.ts.map +1 -0
  555. package/dist/providers/opencode-auth.js +146 -0
  556. package/dist/providers/opencode-auth.js.map +1 -0
  557. package/dist/providers/opencode-cli-entry.d.ts +36 -0
  558. package/dist/providers/opencode-cli-entry.d.ts.map +1 -0
  559. package/dist/providers/opencode-cli-entry.js +90 -0
  560. package/dist/providers/opencode-cli-entry.js.map +1 -0
  561. package/dist/providers/opencode-proxy/abort.d.ts +8 -0
  562. package/dist/providers/opencode-proxy/abort.d.ts.map +1 -0
  563. package/dist/providers/opencode-proxy/abort.js +42 -0
  564. package/dist/providers/opencode-proxy/abort.js.map +1 -0
  565. package/dist/providers/opencode-proxy/anthropic-handler.d.ts +4 -0
  566. package/dist/providers/opencode-proxy/anthropic-handler.d.ts.map +1 -0
  567. package/dist/providers/opencode-proxy/anthropic-handler.js +108 -0
  568. package/dist/providers/opencode-proxy/anthropic-handler.js.map +1 -0
  569. package/dist/providers/opencode-proxy/auth.d.ts +38 -0
  570. package/dist/providers/opencode-proxy/auth.d.ts.map +1 -0
  571. package/dist/providers/opencode-proxy/auth.js +128 -0
  572. package/dist/providers/opencode-proxy/auth.js.map +1 -0
  573. package/dist/providers/opencode-proxy/body.d.ts +9 -0
  574. package/dist/providers/opencode-proxy/body.d.ts.map +1 -0
  575. package/dist/providers/opencode-proxy/body.js +69 -0
  576. package/dist/providers/opencode-proxy/body.js.map +1 -0
  577. package/dist/providers/opencode-proxy/catalog-handlers.d.ts +7 -0
  578. package/dist/providers/opencode-proxy/catalog-handlers.d.ts.map +1 -0
  579. package/dist/providers/opencode-proxy/catalog-handlers.js +132 -0
  580. package/dist/providers/opencode-proxy/catalog-handlers.js.map +1 -0
  581. package/dist/providers/opencode-proxy/catalog.d.ts +41 -0
  582. package/dist/providers/opencode-proxy/catalog.d.ts.map +1 -0
  583. package/dist/providers/opencode-proxy/catalog.js +146 -0
  584. package/dist/providers/opencode-proxy/catalog.js.map +1 -0
  585. package/dist/providers/opencode-proxy/cli.d.ts +2 -0
  586. package/dist/providers/opencode-proxy/cli.d.ts.map +1 -0
  587. package/dist/providers/opencode-proxy/cli.js +162 -0
  588. package/dist/providers/opencode-proxy/cli.js.map +1 -0
  589. package/dist/providers/opencode-proxy/constants.d.ts +13 -0
  590. package/dist/providers/opencode-proxy/constants.d.ts.map +1 -0
  591. package/dist/providers/opencode-proxy/constants.js +15 -0
  592. package/dist/providers/opencode-proxy/constants.js.map +1 -0
  593. package/dist/providers/opencode-proxy/context-budget.d.ts +31 -0
  594. package/dist/providers/opencode-proxy/context-budget.d.ts.map +1 -0
  595. package/dist/providers/opencode-proxy/context-budget.js +165 -0
  596. package/dist/providers/opencode-proxy/context-budget.js.map +1 -0
  597. package/dist/providers/opencode-proxy/errors.d.ts +5 -0
  598. package/dist/providers/opencode-proxy/errors.d.ts.map +1 -0
  599. package/dist/providers/opencode-proxy/errors.js +45 -0
  600. package/dist/providers/opencode-proxy/errors.js.map +1 -0
  601. package/dist/providers/opencode-proxy/forwarders.d.ts +7 -0
  602. package/dist/providers/opencode-proxy/forwarders.d.ts.map +1 -0
  603. package/dist/providers/opencode-proxy/forwarders.js +214 -0
  604. package/dist/providers/opencode-proxy/forwarders.js.map +1 -0
  605. package/dist/providers/opencode-proxy/http.d.ts +11 -0
  606. package/dist/providers/opencode-proxy/http.d.ts.map +1 -0
  607. package/dist/providers/opencode-proxy/http.js +97 -0
  608. package/dist/providers/opencode-proxy/http.js.map +1 -0
  609. package/dist/providers/opencode-proxy/models.d.ts +42 -0
  610. package/dist/providers/opencode-proxy/models.d.ts.map +1 -0
  611. package/dist/providers/opencode-proxy/models.js +148 -0
  612. package/dist/providers/opencode-proxy/models.js.map +1 -0
  613. package/dist/providers/opencode-proxy/openai-handler.d.ts +5 -0
  614. package/dist/providers/opencode-proxy/openai-handler.d.ts.map +1 -0
  615. package/dist/providers/opencode-proxy/openai-handler.js +115 -0
  616. package/dist/providers/opencode-proxy/openai-handler.js.map +1 -0
  617. package/dist/providers/opencode-proxy/router.d.ts +4 -0
  618. package/dist/providers/opencode-proxy/router.d.ts.map +1 -0
  619. package/dist/providers/opencode-proxy/router.js +65 -0
  620. package/dist/providers/opencode-proxy/router.js.map +1 -0
  621. package/dist/providers/opencode-proxy/runtime.d.ts +23 -0
  622. package/dist/providers/opencode-proxy/runtime.d.ts.map +1 -0
  623. package/dist/providers/opencode-proxy/runtime.js +158 -0
  624. package/dist/providers/opencode-proxy/runtime.js.map +1 -0
  625. package/dist/providers/opencode-proxy/server.d.ts +13 -0
  626. package/dist/providers/opencode-proxy/server.d.ts.map +1 -0
  627. package/dist/providers/opencode-proxy/server.js +52 -0
  628. package/dist/providers/opencode-proxy/server.js.map +1 -0
  629. package/dist/providers/opencode-proxy/stream.d.ts +4 -0
  630. package/dist/providers/opencode-proxy/stream.d.ts.map +1 -0
  631. package/dist/providers/opencode-proxy/stream.js +71 -0
  632. package/dist/providers/opencode-proxy/stream.js.map +1 -0
  633. package/dist/providers/opencode-proxy/translate-stream.d.ts +3 -0
  634. package/dist/providers/opencode-proxy/translate-stream.d.ts.map +1 -0
  635. package/dist/providers/opencode-proxy/translate-stream.js +205 -0
  636. package/dist/providers/opencode-proxy/translate-stream.js.map +1 -0
  637. package/dist/providers/opencode-proxy/translate.d.ts +11 -0
  638. package/dist/providers/opencode-proxy/translate.d.ts.map +1 -0
  639. package/dist/providers/opencode-proxy/translate.js +250 -0
  640. package/dist/providers/opencode-proxy/translate.js.map +1 -0
  641. package/dist/providers/opencode-proxy/types.d.ts +110 -0
  642. package/dist/providers/opencode-proxy/types.d.ts.map +1 -0
  643. package/dist/providers/opencode-proxy/types.js +38 -0
  644. package/dist/providers/opencode-proxy/types.js.map +1 -0
  645. package/dist/providers/opencode-proxy-lifecycle.d.ts +11 -0
  646. package/dist/providers/opencode-proxy-lifecycle.d.ts.map +1 -0
  647. package/dist/providers/opencode-proxy-lifecycle.js +144 -0
  648. package/dist/providers/opencode-proxy-lifecycle.js.map +1 -0
  649. package/dist/providers/opencode.d.ts +40 -0
  650. package/dist/providers/opencode.d.ts.map +1 -0
  651. package/dist/providers/opencode.js +190 -0
  652. package/dist/providers/opencode.js.map +1 -0
  653. package/dist/providers/protocol/anthropic-convert.d.ts +12 -0
  654. package/dist/providers/protocol/anthropic-convert.d.ts.map +1 -0
  655. package/dist/providers/protocol/anthropic-convert.js +113 -0
  656. package/dist/providers/protocol/anthropic-convert.js.map +1 -0
  657. package/dist/providers/protocol/anthropic-helpers.d.ts +13 -0
  658. package/dist/providers/protocol/anthropic-helpers.d.ts.map +1 -0
  659. package/dist/providers/protocol/anthropic-helpers.js +179 -0
  660. package/dist/providers/protocol/anthropic-helpers.js.map +1 -0
  661. package/dist/providers/protocol/anthropic-stream-reader.d.ts +13 -0
  662. package/dist/providers/protocol/anthropic-stream-reader.d.ts.map +1 -0
  663. package/dist/providers/protocol/anthropic-stream-reader.js +46 -0
  664. package/dist/providers/protocol/anthropic-stream-reader.js.map +1 -0
  665. package/dist/providers/protocol/anthropic-stream.d.ts +7 -0
  666. package/dist/providers/protocol/anthropic-stream.d.ts.map +1 -0
  667. package/dist/providers/protocol/anthropic-stream.js +318 -0
  668. package/dist/providers/protocol/anthropic-stream.js.map +1 -0
  669. package/dist/providers/protocol/anthropic-types.d.ts +240 -0
  670. package/dist/providers/protocol/anthropic-types.d.ts.map +1 -0
  671. package/dist/providers/protocol/anthropic.d.ts +20 -0
  672. package/dist/providers/protocol/anthropic.d.ts.map +1 -0
  673. package/dist/providers/protocol/gemini/translate-anthropic.d.ts +15 -0
  674. package/dist/providers/protocol/gemini/translate-anthropic.d.ts.map +1 -0
  675. package/dist/providers/protocol/gemini/translate-anthropic.js +84 -0
  676. package/dist/providers/protocol/gemini/translate-anthropic.js.map +1 -0
  677. package/dist/providers/protocol/gemini/translate-chat.d.ts +5 -0
  678. package/dist/providers/protocol/gemini/translate-chat.d.ts.map +1 -0
  679. package/dist/providers/protocol/gemini/translate-chat.js +142 -0
  680. package/dist/providers/protocol/gemini/translate-chat.js.map +1 -0
  681. package/dist/providers/protocol/gemini/translate-models.d.ts +40 -0
  682. package/dist/providers/protocol/gemini/translate-models.d.ts.map +1 -0
  683. package/dist/providers/protocol/gemini/translate-models.js +186 -0
  684. package/dist/providers/protocol/gemini/translate-models.js.map +1 -0
  685. package/dist/providers/protocol/gemini/translate-responses.d.ts +6 -0
  686. package/dist/providers/protocol/gemini/translate-responses.d.ts.map +1 -0
  687. package/dist/providers/protocol/gemini/translate-responses.js +187 -0
  688. package/dist/providers/protocol/gemini/translate-responses.js.map +1 -0
  689. package/dist/providers/protocol/gemini/translate-schema.d.ts +9 -0
  690. package/dist/providers/protocol/gemini/translate-schema.d.ts.map +1 -0
  691. package/dist/providers/protocol/gemini/translate-schema.js +48 -0
  692. package/dist/providers/protocol/gemini/translate-schema.js.map +1 -0
  693. package/dist/providers/protocol/gemini/translate-shared.d.ts +8 -0
  694. package/dist/providers/protocol/gemini/translate-shared.d.ts.map +1 -0
  695. package/dist/providers/protocol/gemini/translate-shared.js +47 -0
  696. package/dist/providers/protocol/gemini/translate-shared.js.map +1 -0
  697. package/dist/providers/protocol/gemini/translate-thinking.d.ts +7 -0
  698. package/dist/providers/protocol/gemini/translate-thinking.d.ts.map +1 -0
  699. package/dist/providers/protocol/gemini/translate-thinking.js +65 -0
  700. package/dist/providers/protocol/gemini/translate-thinking.js.map +1 -0
  701. package/dist/providers/protocol/gemini/translate-types.d.ts +133 -0
  702. package/dist/providers/protocol/gemini/translate-types.d.ts.map +1 -0
  703. package/dist/providers/protocol/gemini/translate.d.ts +7 -0
  704. package/dist/providers/protocol/gemini/translate.d.ts.map +1 -0
  705. package/dist/providers/protocol/json-schema.d.ts +52 -0
  706. package/dist/providers/protocol/json-schema.d.ts.map +1 -0
  707. package/dist/providers/protocol/json-schema.js +189 -0
  708. package/dist/providers/protocol/json-schema.js.map +1 -0
  709. package/dist/providers/protocol/token-estimate.d.ts +15 -0
  710. package/dist/providers/protocol/token-estimate.d.ts.map +1 -0
  711. package/dist/providers/protocol/token-estimate.js +34 -0
  712. package/dist/providers/protocol/token-estimate.js.map +1 -0
  713. package/dist/providers/proxy-hub-backend.d.ts +4 -0
  714. package/dist/providers/proxy-hub-backend.d.ts.map +1 -0
  715. package/dist/providers/proxy-hub-backend.js +11 -0
  716. package/dist/providers/proxy-hub-backend.js.map +1 -0
  717. package/dist/providers/proxy-process.d.ts +35 -0
  718. package/dist/providers/proxy-process.d.ts.map +1 -0
  719. package/dist/providers/proxy-process.js +119 -0
  720. package/dist/providers/proxy-process.js.map +1 -0
  721. package/dist/providers/proxy-shared.d.ts +43 -0
  722. package/dist/providers/proxy-shared.d.ts.map +1 -0
  723. package/dist/providers/proxy-shared.js +128 -0
  724. package/dist/providers/proxy-shared.js.map +1 -0
  725. package/dist/providers/quota-guard.d.ts +49 -0
  726. package/dist/providers/quota-guard.d.ts.map +1 -0
  727. package/dist/providers/quota-guard.js +107 -0
  728. package/dist/providers/quota-guard.js.map +1 -0
  729. package/dist/providers/reasoning.d.ts +27 -0
  730. package/dist/providers/reasoning.d.ts.map +1 -0
  731. package/dist/providers/reasoning.js +61 -0
  732. package/dist/providers/reasoning.js.map +1 -0
  733. package/dist/providers/upstream-policy.d.ts +33 -0
  734. package/dist/providers/upstream-policy.d.ts.map +1 -0
  735. package/dist/providers/upstream-policy.js +97 -0
  736. package/dist/providers/upstream-policy.js.map +1 -0
  737. package/dist/public-types.d.ts +3 -0
  738. package/dist/public-types.d.ts.map +1 -0
  739. package/dist/public.d.ts +19 -0
  740. package/dist/public.d.ts.map +1 -0
  741. package/dist/public.js +16 -0
  742. package/dist/public.js.map +1 -0
  743. package/dist/sources/account-adapters.d.ts +64 -0
  744. package/dist/sources/account-adapters.d.ts.map +1 -0
  745. package/dist/sources/account-adapters.js +205 -0
  746. package/dist/sources/account-adapters.js.map +1 -0
  747. package/dist/sources/gateway-adapters.d.ts +26 -0
  748. package/dist/sources/gateway-adapters.d.ts.map +1 -0
  749. package/dist/sources/gateway-adapters.js +43 -0
  750. package/dist/sources/gateway-adapters.js.map +1 -0
  751. package/dist/sources/kiro-proxy-bin.d.ts +41 -0
  752. package/dist/sources/kiro-proxy-bin.d.ts.map +1 -0
  753. package/dist/sources/kiro-proxy-bin.js +140 -0
  754. package/dist/sources/kiro-proxy-bin.js.map +1 -0
  755. package/dist/sources/proxy-hub-adapters.d.ts +7 -0
  756. package/dist/sources/proxy-hub-adapters.d.ts.map +1 -0
  757. package/dist/sources/proxy-hub-adapters.js +26 -0
  758. package/dist/sources/proxy-hub-adapters.js.map +1 -0
  759. package/dist/testing.d.ts +9 -0
  760. package/dist/testing.d.ts.map +1 -0
  761. package/dist/testing.js +6 -0
  762. package/dist/tray/AnyPickTray.swift +3 -0
  763. package/dist/tray/activity.d.ts +18 -0
  764. package/dist/tray/activity.d.ts.map +1 -0
  765. package/dist/tray/activity.js +51 -0
  766. package/dist/tray/activity.js.map +1 -0
  767. package/dist/tray/app-icons/icon-1024.png +0 -0
  768. package/dist/tray/app-icons/icon-128.png +0 -0
  769. package/dist/tray/app-icons/icon-16.png +0 -0
  770. package/dist/tray/app-icons/icon-256.png +0 -0
  771. package/dist/tray/app-icons/icon-32.png +0 -0
  772. package/dist/tray/app-icons/icon-512.png +0 -0
  773. package/dist/tray/app-icons/icon-64.png +0 -0
  774. package/dist/tray/icons/claude.svg +1 -0
  775. package/dist/tray/icons/googlegemini.svg +1 -0
  776. package/dist/tray/icons/grok.svg +1 -0
  777. package/dist/tray/icons/kiro.svg +1 -0
  778. package/dist/tray/icons/openai.svg +1 -0
  779. package/dist/tray/icons/opencode.svg +1 -0
  780. package/dist/tray/icons/openrouter.svg +1 -0
  781. package/dist/tray/model-role-actions.d.ts +15 -0
  782. package/dist/tray/model-role-actions.d.ts.map +1 -0
  783. package/dist/tray/model-role-actions.js +41 -0
  784. package/dist/tray/model-role-actions.js.map +1 -0
  785. package/dist/tray/native/AccountsPanel.swift +434 -0
  786. package/dist/tray/native/AppEntry.swift +229 -0
  787. package/dist/tray/native/MainWindow.swift +300 -0
  788. package/dist/tray/native/ManageFormChrome.swift +332 -0
  789. package/dist/tray/native/ManageForms.swift +472 -0
  790. package/dist/tray/native/ManagePanel.swift +356 -0
  791. package/dist/tray/native/Models.swift +259 -0
  792. package/dist/tray/native/ModelsEditor.swift +390 -0
  793. package/dist/tray/native/ModelsOverview.swift +76 -0
  794. package/dist/tray/native/ModelsPickers.swift +273 -0
  795. package/dist/tray/native/ModelsRoutePickers.swift +718 -0
  796. package/dist/tray/native/MonitorPanel.swift +375 -0
  797. package/dist/tray/native/ProxyPanel.swift +326 -0
  798. package/dist/tray/native/QuickActivityRow.swift +40 -0
  799. package/dist/tray/native/QuickNav.swift +62 -0
  800. package/dist/tray/native/QuickPanel.swift +447 -0
  801. package/dist/tray/native/QuickRouteRow.swift +189 -0
  802. package/dist/tray/native/QuickServiceRows.swift +292 -0
  803. package/dist/tray/native/RoutingIssues.swift +293 -0
  804. package/dist/tray/native/SettingsPanel.swift +225 -0
  805. package/dist/tray/native/SharedUI.swift +681 -0
  806. package/dist/tray/native/Store.swift +540 -0
  807. package/dist/tray/native/Theme.swift +139 -0
  808. package/dist/tray/native/TrayChrome.swift +657 -0
  809. package/dist/tray/native/TrayControls.swift +475 -0
  810. package/dist/tray/native/TrayPreferences.swift +46 -0
  811. package/dist/tray/native/sources.txt +26 -0
  812. package/dist/tray/native-sources.d.ts +8 -0
  813. package/dist/tray/native-sources.d.ts.map +1 -0
  814. package/dist/tray/native-sources.js +19 -0
  815. package/dist/tray/native-sources.js.map +1 -0
  816. package/dist/tray/protocol.d.ts +79 -0
  817. package/dist/tray/protocol.d.ts.map +1 -0
  818. package/dist/tray/protocol.js +145 -0
  819. package/dist/tray/protocol.js.map +1 -0
  820. package/dist/tray/settings.d.ts +15 -0
  821. package/dist/tray/settings.d.ts.map +1 -0
  822. package/dist/tray/settings.js +72 -0
  823. package/dist/tray/settings.js.map +1 -0
  824. package/dist/tray/snapshot-client-routes.d.ts +11 -0
  825. package/dist/tray/snapshot-client-routes.d.ts.map +1 -0
  826. package/dist/tray/snapshot-client-routes.js +305 -0
  827. package/dist/tray/snapshot-client-routes.js.map +1 -0
  828. package/dist/tray/snapshot-helpers.d.ts +20 -0
  829. package/dist/tray/snapshot-helpers.d.ts.map +1 -0
  830. package/dist/tray/snapshot-helpers.js +74 -0
  831. package/dist/tray/snapshot-helpers.js.map +1 -0
  832. package/dist/tray/snapshot-hub.d.ts +7 -0
  833. package/dist/tray/snapshot-hub.d.ts.map +1 -0
  834. package/dist/tray/snapshot-hub.js +93 -0
  835. package/dist/tray/snapshot-hub.js.map +1 -0
  836. package/dist/tray/snapshot-resources.d.ts +19 -0
  837. package/dist/tray/snapshot-resources.d.ts.map +1 -0
  838. package/dist/tray/snapshot-resources.js +216 -0
  839. package/dist/tray/snapshot-resources.js.map +1 -0
  840. package/dist/tray/snapshot-types.d.ts +229 -0
  841. package/dist/tray/snapshot-types.d.ts.map +1 -0
  842. package/dist/tray/snapshot-usage.d.ts +9 -0
  843. package/dist/tray/snapshot-usage.d.ts.map +1 -0
  844. package/dist/tray/snapshot-usage.js +35 -0
  845. package/dist/tray/snapshot-usage.js.map +1 -0
  846. package/dist/tray/snapshot.d.ts +7 -0
  847. package/dist/tray/snapshot.d.ts.map +1 -0
  848. package/dist/tray/snapshot.js +48 -0
  849. package/dist/tray/snapshot.js.map +1 -0
  850. package/dist/tray/supervisor-actions.d.ts +19 -0
  851. package/dist/tray/supervisor-actions.d.ts.map +1 -0
  852. package/dist/tray/supervisor-actions.js +224 -0
  853. package/dist/tray/supervisor-actions.js.map +1 -0
  854. package/dist/tray/supervisor-activity.d.ts +5 -0
  855. package/dist/tray/supervisor-activity.d.ts.map +1 -0
  856. package/dist/tray/supervisor-activity.js +19 -0
  857. package/dist/tray/supervisor-activity.js.map +1 -0
  858. package/dist/tray/supervisor-errors.d.ts +9 -0
  859. package/dist/tray/supervisor-errors.d.ts.map +1 -0
  860. package/dist/tray/supervisor-errors.js +91 -0
  861. package/dist/tray/supervisor-errors.js.map +1 -0
  862. package/dist/tray/supervisor-logs.d.ts +6 -0
  863. package/dist/tray/supervisor-logs.d.ts.map +1 -0
  864. package/dist/tray/supervisor-logs.js +52 -0
  865. package/dist/tray/supervisor-logs.js.map +1 -0
  866. package/dist/tray/supervisor-mutations.d.ts +14 -0
  867. package/dist/tray/supervisor-mutations.d.ts.map +1 -0
  868. package/dist/tray/supervisor-mutations.js +218 -0
  869. package/dist/tray/supervisor-mutations.js.map +1 -0
  870. package/dist/tray/supervisor-native.d.ts +22 -0
  871. package/dist/tray/supervisor-native.d.ts.map +1 -0
  872. package/dist/tray/supervisor-native.js +227 -0
  873. package/dist/tray/supervisor-native.js.map +1 -0
  874. package/dist/tray/supervisor-proxies.d.ts +6 -0
  875. package/dist/tray/supervisor-proxies.d.ts.map +1 -0
  876. package/dist/tray/supervisor-proxies.js +37 -0
  877. package/dist/tray/supervisor-proxies.js.map +1 -0
  878. package/dist/tray/supervisor-tauri.d.ts +13 -0
  879. package/dist/tray/supervisor-tauri.d.ts.map +1 -0
  880. package/dist/tray/supervisor-tauri.js +36 -0
  881. package/dist/tray/supervisor-tauri.js.map +1 -0
  882. package/dist/tray/supervisor.d.ts +17 -0
  883. package/dist/tray/supervisor.d.ts.map +1 -0
  884. package/dist/tray/supervisor.js +372 -0
  885. package/dist/tray/supervisor.js.map +1 -0
  886. package/dist/tray/terminal-launcher.d.ts +12 -0
  887. package/dist/tray/terminal-launcher.d.ts.map +1 -0
  888. package/dist/tray/terminal-launcher.js +130 -0
  889. package/dist/tray/terminal-launcher.js.map +1 -0
  890. package/dist/tui/actions/ensure-proxy-up.d.ts +15 -0
  891. package/dist/tui/actions/ensure-proxy-up.d.ts.map +1 -0
  892. package/dist/tui/actions/ensure-proxy-up.js +41 -0
  893. package/dist/tui/actions/ensure-proxy-up.js.map +1 -0
  894. package/dist/tui/actions/use-account-actions.d.ts +35 -0
  895. package/dist/tui/actions/use-account-actions.d.ts.map +1 -0
  896. package/dist/tui/actions/use-account-actions.js +527 -0
  897. package/dist/tui/actions/use-account-actions.js.map +1 -0
  898. package/dist/tui/actions/use-app-bindings.d.ts +83 -0
  899. package/dist/tui/actions/use-app-bindings.d.ts.map +1 -0
  900. package/dist/tui/actions/use-app-bindings.js +472 -0
  901. package/dist/tui/actions/use-app-bindings.js.map +1 -0
  902. package/dist/tui/actions/use-gateway-actions.d.ts +45 -0
  903. package/dist/tui/actions/use-gateway-actions.d.ts.map +1 -0
  904. package/dist/tui/actions/use-gateway-actions.js +370 -0
  905. package/dist/tui/actions/use-gateway-actions.js.map +1 -0
  906. package/dist/tui/actions/use-home-filter.d.ts +24 -0
  907. package/dist/tui/actions/use-home-filter.d.ts.map +1 -0
  908. package/dist/tui/actions/use-home-filter.js +48 -0
  909. package/dist/tui/actions/use-home-filter.js.map +1 -0
  910. package/dist/tui/actions/use-model-role-editor.d.ts +44 -0
  911. package/dist/tui/actions/use-model-role-editor.d.ts.map +1 -0
  912. package/dist/tui/actions/use-model-role-editor.js +68 -0
  913. package/dist/tui/actions/use-model-role-editor.js.map +1 -0
  914. package/dist/tui/actions/use-provider-filter.d.ts +10 -0
  915. package/dist/tui/actions/use-provider-filter.d.ts.map +1 -0
  916. package/dist/tui/actions/use-provider-filter.js +22 -0
  917. package/dist/tui/actions/use-provider-filter.js.map +1 -0
  918. package/dist/tui/actions/use-proxy-actions.d.ts +31 -0
  919. package/dist/tui/actions/use-proxy-actions.d.ts.map +1 -0
  920. package/dist/tui/actions/use-proxy-actions.js +474 -0
  921. package/dist/tui/actions/use-proxy-actions.js.map +1 -0
  922. package/dist/tui/actions/use-text-input-submit.d.ts +16 -0
  923. package/dist/tui/actions/use-text-input-submit.d.ts.map +1 -0
  924. package/dist/tui/actions/use-text-input-submit.js +96 -0
  925. package/dist/tui/actions/use-text-input-submit.js.map +1 -0
  926. package/dist/tui/actions/use-tray-runtime-actions.d.ts +18 -0
  927. package/dist/tui/actions/use-tray-runtime-actions.d.ts.map +1 -0
  928. package/dist/tui/actions/use-tray-runtime-actions.js +78 -0
  929. package/dist/tui/actions/use-tray-runtime-actions.js.map +1 -0
  930. package/dist/tui/app-ui-helpers.d.ts +14 -0
  931. package/dist/tui/app-ui-helpers.d.ts.map +1 -0
  932. package/dist/tui/app-ui-helpers.js +48 -0
  933. package/dist/tui/app-ui-helpers.js.map +1 -0
  934. package/dist/tui/app-ui.d.ts +19 -0
  935. package/dist/tui/app-ui.d.ts.map +1 -0
  936. package/dist/tui/app-ui.js +98 -0
  937. package/dist/tui/app-ui.js.map +1 -0
  938. package/dist/tui/components/chrome/header.d.ts +39 -0
  939. package/dist/tui/components/chrome/header.d.ts.map +1 -0
  940. package/dist/tui/components/chrome/header.js +161 -0
  941. package/dist/tui/components/chrome/header.js.map +1 -0
  942. package/dist/tui/components/chrome/inputs.d.ts +34 -0
  943. package/dist/tui/components/chrome/inputs.d.ts.map +1 -0
  944. package/dist/tui/components/chrome/inputs.js +82 -0
  945. package/dist/tui/components/chrome/inputs.js.map +1 -0
  946. package/dist/tui/components/chrome/layout.d.ts +61 -0
  947. package/dist/tui/components/chrome/layout.d.ts.map +1 -0
  948. package/dist/tui/components/chrome/layout.js +119 -0
  949. package/dist/tui/components/chrome/layout.js.map +1 -0
  950. package/dist/tui/components/chrome/legacy.d.ts +84 -0
  951. package/dist/tui/components/chrome/legacy.d.ts.map +1 -0
  952. package/dist/tui/components/chrome/legacy.js +6 -0
  953. package/dist/tui/components/chrome/rows.d.ts +89 -0
  954. package/dist/tui/components/chrome/rows.d.ts.map +1 -0
  955. package/dist/tui/components/chrome/rows.js +151 -0
  956. package/dist/tui/components/chrome/rows.js.map +1 -0
  957. package/dist/tui/components/chrome/status.d.ts +50 -0
  958. package/dist/tui/components/chrome/status.d.ts.map +1 -0
  959. package/dist/tui/components/chrome/status.js +157 -0
  960. package/dist/tui/components/chrome/status.js.map +1 -0
  961. package/dist/tui/components/chrome.d.ts +7 -0
  962. package/dist/tui/components/chrome.d.ts.map +1 -0
  963. package/dist/tui/components/chrome.js +7 -0
  964. package/dist/tui/components.d.ts +26 -0
  965. package/dist/tui/components.d.ts.map +1 -0
  966. package/dist/tui/components.js +182 -0
  967. package/dist/tui/components.js.map +1 -0
  968. package/dist/tui/model/anypick.d.ts +106 -0
  969. package/dist/tui/model/anypick.d.ts.map +1 -0
  970. package/dist/tui/model/anypick.js +116 -0
  971. package/dist/tui/model/anypick.js.map +1 -0
  972. package/dist/tui/model/bindings.d.ts +39 -0
  973. package/dist/tui/model/bindings.d.ts.map +1 -0
  974. package/dist/tui/model/bindings.js +102 -0
  975. package/dist/tui/model/bindings.js.map +1 -0
  976. package/dist/tui/model/detail.d.ts +6 -0
  977. package/dist/tui/model/detail.d.ts.map +1 -0
  978. package/dist/tui/model/detail.js +85 -0
  979. package/dist/tui/model/detail.js.map +1 -0
  980. package/dist/tui/model/gateway.d.ts +46 -0
  981. package/dist/tui/model/gateway.d.ts.map +1 -0
  982. package/dist/tui/model/gateway.js +134 -0
  983. package/dist/tui/model/gateway.js.map +1 -0
  984. package/dist/tui/model/home-format.d.ts +52 -0
  985. package/dist/tui/model/home-format.d.ts.map +1 -0
  986. package/dist/tui/model/home-format.js +64 -0
  987. package/dist/tui/model/home-format.js.map +1 -0
  988. package/dist/tui/model/home-load.d.ts +8 -0
  989. package/dist/tui/model/home-load.d.ts.map +1 -0
  990. package/dist/tui/model/home-load.js +244 -0
  991. package/dist/tui/model/home-load.js.map +1 -0
  992. package/dist/tui/model/identity.d.ts +53 -0
  993. package/dist/tui/model/identity.d.ts.map +1 -0
  994. package/dist/tui/model/identity.js +176 -0
  995. package/dist/tui/model/identity.js.map +1 -0
  996. package/dist/tui/model/line-editor.d.ts +99 -0
  997. package/dist/tui/model/line-editor.d.ts.map +1 -0
  998. package/dist/tui/model/line-editor.js +186 -0
  999. package/dist/tui/model/line-editor.js.map +1 -0
  1000. package/dist/tui/model/names.d.ts +28 -0
  1001. package/dist/tui/model/names.d.ts.map +1 -0
  1002. package/dist/tui/model/names.js +42 -0
  1003. package/dist/tui/model/names.js.map +1 -0
  1004. package/dist/tui/model/pool.d.ts +11 -0
  1005. package/dist/tui/model/pool.d.ts.map +1 -0
  1006. package/dist/tui/model/pool.js +115 -0
  1007. package/dist/tui/model/pool.js.map +1 -0
  1008. package/dist/tui/model/provider-filter.d.ts +14 -0
  1009. package/dist/tui/model/provider-filter.d.ts.map +1 -0
  1010. package/dist/tui/model/provider-filter.js +46 -0
  1011. package/dist/tui/model/provider-filter.js.map +1 -0
  1012. package/dist/tui/model/proxy-hub.d.ts +23 -0
  1013. package/dist/tui/model/proxy-hub.d.ts.map +1 -0
  1014. package/dist/tui/model/proxy-hub.js +69 -0
  1015. package/dist/tui/model/proxy-hub.js.map +1 -0
  1016. package/dist/tui/model/proxy-labels.d.ts +5 -0
  1017. package/dist/tui/model/proxy-labels.d.ts.map +1 -0
  1018. package/dist/tui/model/proxy-labels.js +18 -0
  1019. package/dist/tui/model/proxy-labels.js.map +1 -0
  1020. package/dist/tui/model/proxy.d.ts +15 -0
  1021. package/dist/tui/model/proxy.d.ts.map +1 -0
  1022. package/dist/tui/model/proxy.js +214 -0
  1023. package/dist/tui/model/proxy.js.map +1 -0
  1024. package/dist/tui/model/root.d.ts +20 -0
  1025. package/dist/tui/model/root.d.ts.map +1 -0
  1026. package/dist/tui/model/root.js +126 -0
  1027. package/dist/tui/model/root.js.map +1 -0
  1028. package/dist/tui/model/route-builder.d.ts +25 -0
  1029. package/dist/tui/model/route-builder.d.ts.map +1 -0
  1030. package/dist/tui/model/route-builder.js +199 -0
  1031. package/dist/tui/model/route-builder.js.map +1 -0
  1032. package/dist/tui/model/screen.d.ts +260 -0
  1033. package/dist/tui/model/screen.d.ts.map +1 -0
  1034. package/dist/tui/model/types.d.ts +179 -0
  1035. package/dist/tui/model/types.d.ts.map +1 -0
  1036. package/dist/tui/model.d.ts +18 -0
  1037. package/dist/tui/model.d.ts.map +1 -0
  1038. package/dist/tui/model.js +17 -0
  1039. package/dist/tui/proxy-models-fetch.d.ts +34 -0
  1040. package/dist/tui/proxy-models-fetch.d.ts.map +1 -0
  1041. package/dist/tui/proxy-models-fetch.js +87 -0
  1042. package/dist/tui/proxy-models-fetch.js.map +1 -0
  1043. package/dist/tui/routes/account.d.ts +4 -0
  1044. package/dist/tui/routes/account.d.ts.map +1 -0
  1045. package/dist/tui/routes/account.js +327 -0
  1046. package/dist/tui/routes/account.js.map +1 -0
  1047. package/dist/tui/routes/apps.d.ts +3 -0
  1048. package/dist/tui/routes/apps.d.ts.map +1 -0
  1049. package/dist/tui/routes/apps.js +296 -0
  1050. package/dist/tui/routes/apps.js.map +1 -0
  1051. package/dist/tui/routes/common.d.ts +4 -0
  1052. package/dist/tui/routes/common.d.ts.map +1 -0
  1053. package/dist/tui/routes/common.js +117 -0
  1054. package/dist/tui/routes/common.js.map +1 -0
  1055. package/dist/tui/routes/context.d.ts +43 -0
  1056. package/dist/tui/routes/context.d.ts.map +1 -0
  1057. package/dist/tui/routes/gateway.d.ts +3 -0
  1058. package/dist/tui/routes/gateway.d.ts.map +1 -0
  1059. package/dist/tui/routes/gateway.js +199 -0
  1060. package/dist/tui/routes/gateway.js.map +1 -0
  1061. package/dist/tui/routes/proxy.d.ts +3 -0
  1062. package/dist/tui/routes/proxy.d.ts.map +1 -0
  1063. package/dist/tui/routes/proxy.js +234 -0
  1064. package/dist/tui/routes/proxy.js.map +1 -0
  1065. package/dist/tui/screens/account-detail.d.ts +14 -0
  1066. package/dist/tui/screens/account-detail.d.ts.map +1 -0
  1067. package/dist/tui/screens/account-detail.js +98 -0
  1068. package/dist/tui/screens/account-detail.js.map +1 -0
  1069. package/dist/tui/screens/accounts-home.d.ts +42 -0
  1070. package/dist/tui/screens/accounts-home.d.ts.map +1 -0
  1071. package/dist/tui/screens/accounts-home.js +321 -0
  1072. package/dist/tui/screens/accounts-home.js.map +1 -0
  1073. package/dist/tui/screens/add-account.d.ts +70 -0
  1074. package/dist/tui/screens/add-account.d.ts.map +1 -0
  1075. package/dist/tui/screens/add-account.js +323 -0
  1076. package/dist/tui/screens/add-account.js.map +1 -0
  1077. package/dist/tui/screens/anypick-home.d.ts +39 -0
  1078. package/dist/tui/screens/anypick-home.d.ts.map +1 -0
  1079. package/dist/tui/screens/anypick-home.js +253 -0
  1080. package/dist/tui/screens/anypick-home.js.map +1 -0
  1081. package/dist/tui/screens/anypick-preview.d.ts +13 -0
  1082. package/dist/tui/screens/anypick-preview.d.ts.map +1 -0
  1083. package/dist/tui/screens/anypick-preview.js +49 -0
  1084. package/dist/tui/screens/anypick-preview.js.map +1 -0
  1085. package/dist/tui/screens/app-route-preview.d.ts +14 -0
  1086. package/dist/tui/screens/app-route-preview.d.ts.map +1 -0
  1087. package/dist/tui/screens/app-route-preview.js +35 -0
  1088. package/dist/tui/screens/app-route-preview.js.map +1 -0
  1089. package/dist/tui/screens/app-route-source.d.ts +15 -0
  1090. package/dist/tui/screens/app-route-source.d.ts.map +1 -0
  1091. package/dist/tui/screens/app-route-source.js +97 -0
  1092. package/dist/tui/screens/app-route-source.js.map +1 -0
  1093. package/dist/tui/screens/apps-home.d.ts +22 -0
  1094. package/dist/tui/screens/apps-home.d.ts.map +1 -0
  1095. package/dist/tui/screens/apps-home.js +111 -0
  1096. package/dist/tui/screens/apps-home.js.map +1 -0
  1097. package/dist/tui/screens/confirm.d.ts +19 -0
  1098. package/dist/tui/screens/confirm.d.ts.map +1 -0
  1099. package/dist/tui/screens/confirm.js +42 -0
  1100. package/dist/tui/screens/confirm.js.map +1 -0
  1101. package/dist/tui/screens/credential-form.d.ts +30 -0
  1102. package/dist/tui/screens/credential-form.d.ts.map +1 -0
  1103. package/dist/tui/screens/credential-form.js +241 -0
  1104. package/dist/tui/screens/credential-form.js.map +1 -0
  1105. package/dist/tui/screens/gateway-connection-form.d.ts +16 -0
  1106. package/dist/tui/screens/gateway-connection-form.d.ts.map +1 -0
  1107. package/dist/tui/screens/gateway-connection-form.js +127 -0
  1108. package/dist/tui/screens/gateway-connection-form.js.map +1 -0
  1109. package/dist/tui/screens/gateway-pick-provider.d.ts +19 -0
  1110. package/dist/tui/screens/gateway-pick-provider.d.ts.map +1 -0
  1111. package/dist/tui/screens/gateway-pick-provider.js +62 -0
  1112. package/dist/tui/screens/gateway-pick-provider.js.map +1 -0
  1113. package/dist/tui/screens/gateways-home.d.ts +38 -0
  1114. package/dist/tui/screens/gateways-home.d.ts.map +1 -0
  1115. package/dist/tui/screens/gateways-home.js +247 -0
  1116. package/dist/tui/screens/gateways-home.js.map +1 -0
  1117. package/dist/tui/screens/health.d.ts +16 -0
  1118. package/dist/tui/screens/health.d.ts.map +1 -0
  1119. package/dist/tui/screens/health.js +109 -0
  1120. package/dist/tui/screens/health.js.map +1 -0
  1121. package/dist/tui/screens/help.d.ts +10 -0
  1122. package/dist/tui/screens/help.d.ts.map +1 -0
  1123. package/dist/tui/screens/help.js +213 -0
  1124. package/dist/tui/screens/help.js.map +1 -0
  1125. package/dist/tui/screens/manage-apps.d.ts +29 -0
  1126. package/dist/tui/screens/manage-apps.d.ts.map +1 -0
  1127. package/dist/tui/screens/manage-apps.js +165 -0
  1128. package/dist/tui/screens/manage-apps.js.map +1 -0
  1129. package/dist/tui/screens/proxy-board-helpers.d.ts +9 -0
  1130. package/dist/tui/screens/proxy-board-helpers.d.ts.map +1 -0
  1131. package/dist/tui/screens/proxy-board-helpers.js +70 -0
  1132. package/dist/tui/screens/proxy-board-helpers.js.map +1 -0
  1133. package/dist/tui/screens/proxy-board.d.ts +43 -0
  1134. package/dist/tui/screens/proxy-board.d.ts.map +1 -0
  1135. package/dist/tui/screens/proxy-board.js +351 -0
  1136. package/dist/tui/screens/proxy-board.js.map +1 -0
  1137. package/dist/tui/screens/proxy-hub.d.ts +21 -0
  1138. package/dist/tui/screens/proxy-hub.d.ts.map +1 -0
  1139. package/dist/tui/screens/proxy-hub.js +150 -0
  1140. package/dist/tui/screens/proxy-hub.js.map +1 -0
  1141. package/dist/tui/screens/proxy-models-utils.d.ts +13 -0
  1142. package/dist/tui/screens/proxy-models-utils.d.ts.map +1 -0
  1143. package/dist/tui/screens/proxy-models-utils.js +53 -0
  1144. package/dist/tui/screens/proxy-models-utils.js.map +1 -0
  1145. package/dist/tui/screens/proxy-models.d.ts +65 -0
  1146. package/dist/tui/screens/proxy-models.d.ts.map +1 -0
  1147. package/dist/tui/screens/proxy-models.js +252 -0
  1148. package/dist/tui/screens/proxy-models.js.map +1 -0
  1149. package/dist/tui/screens/proxy.d.ts +26 -0
  1150. package/dist/tui/screens/proxy.d.ts.map +1 -0
  1151. package/dist/tui/screens/text-input.d.ts +18 -0
  1152. package/dist/tui/screens/text-input.d.ts.map +1 -0
  1153. package/dist/tui/screens/text-input.js +67 -0
  1154. package/dist/tui/screens/text-input.js.map +1 -0
  1155. package/dist/tui/screens/tray-runtime.d.ts +19 -0
  1156. package/dist/tui/screens/tray-runtime.d.ts.map +1 -0
  1157. package/dist/tui/screens/tray-runtime.js +108 -0
  1158. package/dist/tui/screens/tray-runtime.js.map +1 -0
  1159. package/dist/tui/use-tui-nav.d.ts +40 -0
  1160. package/dist/tui/use-tui-nav.d.ts.map +1 -0
  1161. package/dist/tui/use-tui-nav.js +256 -0
  1162. package/dist/tui/use-tui-nav.js.map +1 -0
  1163. package/dist/tui/use-tui-shell.d.ts +46 -0
  1164. package/dist/tui/use-tui-shell.d.ts.map +1 -0
  1165. package/dist/tui/use-tui-shell.js +95 -0
  1166. package/dist/tui/use-tui-shell.js.map +1 -0
  1167. package/dist/types/account.d.ts +410 -0
  1168. package/dist/types/account.d.ts.map +1 -0
  1169. package/dist/types/account.js +7 -0
  1170. package/dist/types/account.js.map +1 -0
  1171. package/dist/types/bindings.d.ts +300 -0
  1172. package/dist/types/bindings.d.ts.map +1 -0
  1173. package/dist/types/catalog.d.ts +165 -0
  1174. package/dist/types/catalog.d.ts.map +1 -0
  1175. package/dist/types/clients.d.ts +174 -0
  1176. package/dist/types/clients.d.ts.map +1 -0
  1177. package/dist/types/clients.js +11 -0
  1178. package/dist/types/clients.js.map +1 -0
  1179. package/dist/types/plugins.d.ts +89 -0
  1180. package/dist/types/plugins.d.ts.map +1 -0
  1181. package/dist/types/plugins.js +14 -0
  1182. package/dist/types/plugins.js.map +1 -0
  1183. package/dist/types/proxy-hub.d.ts +109 -0
  1184. package/dist/types/proxy-hub.d.ts.map +1 -0
  1185. package/dist/types.d.ts +7 -0
  1186. package/dist/types.d.ts.map +1 -0
  1187. package/dist/types.js +1 -0
  1188. package/dist/utils/errors.d.ts +61 -0
  1189. package/dist/utils/errors.d.ts.map +1 -0
  1190. package/dist/utils/errors.js +119 -0
  1191. package/dist/utils/errors.js.map +1 -0
  1192. package/dist/utils/fs.d.ts +39 -0
  1193. package/dist/utils/fs.d.ts.map +1 -0
  1194. package/dist/utils/fs.js +126 -0
  1195. package/dist/utils/fs.js.map +1 -0
  1196. package/dist/utils/lock.d.ts +33 -0
  1197. package/dist/utils/lock.d.ts.map +1 -0
  1198. package/dist/utils/lock.js +95 -0
  1199. package/dist/utils/lock.js.map +1 -0
  1200. package/dist/utils/log.d.ts +10 -0
  1201. package/dist/utils/log.d.ts.map +1 -0
  1202. package/dist/utils/log.js +21 -0
  1203. package/dist/utils/log.js.map +1 -0
  1204. package/dist/utils/network.d.ts +3 -0
  1205. package/dist/utils/network.d.ts.map +1 -0
  1206. package/dist/utils/network.js +13 -0
  1207. package/dist/utils/network.js.map +1 -0
  1208. package/dist/utils/process/binary.d.ts +14 -0
  1209. package/dist/utils/process/binary.d.ts.map +1 -0
  1210. package/dist/utils/process/binary.js +29 -0
  1211. package/dist/utils/process/binary.js.map +1 -0
  1212. package/dist/utils/process/follow.d.ts +2 -0
  1213. package/dist/utils/process/follow.d.ts.map +1 -0
  1214. package/dist/utils/process/follow.js +90 -0
  1215. package/dist/utils/process/follow.js.map +1 -0
  1216. package/dist/utils/process/health.d.ts +43 -0
  1217. package/dist/utils/process/health.d.ts.map +1 -0
  1218. package/dist/utils/process/health.js +132 -0
  1219. package/dist/utils/process/health.js.map +1 -0
  1220. package/dist/utils/process/pid.d.ts +95 -0
  1221. package/dist/utils/process/pid.d.ts.map +1 -0
  1222. package/dist/utils/process/pid.js +243 -0
  1223. package/dist/utils/process/pid.js.map +1 -0
  1224. package/dist/utils/process.d.ts +5 -0
  1225. package/dist/utils/process.d.ts.map +1 -0
  1226. package/dist/utils/process.js +5 -0
  1227. package/dist/utils/slug.d.ts +18 -0
  1228. package/dist/utils/slug.d.ts.map +1 -0
  1229. package/dist/utils/slug.js +42 -0
  1230. package/dist/utils/slug.js.map +1 -0
  1231. package/package.json +121 -0
@@ -0,0 +1,471 @@
1
+ import { AnyPickError } from "../utils/errors.js";
2
+ import { copyFileSafe, ensureDir, pathExists, readJsonFile, writeJsonFile, writeTextFile } from "../utils/fs.js";
3
+ import { geminiAccountAdapter, poolAdapterFor } from "../sources/account-adapters.js";
4
+ import { readGeminiApiKeyFromEnvFile, stripEnvAuthKeys, upsertEnvFile } from "./gemini-env.js";
5
+ import { readIdentityFromDir } from "./gemini-identity.js";
6
+ import { antigravityApplicationRunning, assertAntigravityStateSafeToMutate, readAntigravityStateOAuthPayload } from "./gemini-antigravity-state.js";
7
+ import { antigravityCredentialExists, antigravityKeychainSupported, deleteAntigravityOAuthCredential, hydrateAntigravityOAuthPayload, loadAntigravityOAuthCredentials, readAntigravityOAuthPayload, saveAntigravityOAuthCredential } from "./gemini-antigravity-oauth.js";
8
+ import { rolesFromLiveDiscovery } from "./model-policy.js";
9
+ import { geminiProxyStatus, readGeminiProxyLogs, startGeminiProxy, stopGeminiProxy } from "./gemini-proxy-lifecycle.js";
10
+ import { listenGeminiProxy } from "./gemini-proxy/server.js";
11
+ import { closeProxyHubBackend } from "./proxy-hub-backend.js";
12
+ import { join } from "node:path";
13
+ import { readFile, rm } from "node:fs/promises";
14
+ import { homedir } from "node:os";
15
+ import { createHash } from "node:crypto";
16
+ //#region src/providers/gemini.ts
17
+ /**
18
+ * Google Gemini CLI
19
+ *
20
+ * Live auth under ~/.gemini/:
21
+ * .env — GEMINI_API_KEY / GOOGLE_CLOUD_* (API key + Vertex)
22
+ * oauth_creds.json — Login with Google OAuth tokens (when on disk)
23
+ * google_accounts.json — active email + history
24
+ * settings.json — security.auth.selectedType (merged, not fully replaced)
25
+ *
26
+ * Built-in dual-protocol proxy (API key accounts):
27
+ * OpenAI (/v1/responses) → Codex
28
+ * Anthropic (/v1/messages) → Claude Code
29
+ * Translates to Google Generative Language API (generateContent).
30
+ *
31
+ * Notes:
32
+ * - Personal OAuth may also live in the OS keychain; we snapshot file-based
33
+ * material only. API-key accounts via .env drive the proxy most reliably.
34
+ */
35
+ var SNAPSHOT_FILES = [
36
+ ".env",
37
+ "oauth_creds.json",
38
+ "google_accounts.json"
39
+ ];
40
+ var ANTIGRAVITY_SNAPSHOT_FILE = "antigravity_oauth.json";
41
+ var DEFAULT_PORT = 4130;
42
+ /**
43
+ * Identify a Gemini CLI login by its long-lived credential material.
44
+ *
45
+ * The refresh token, not the access token: the access token rotates hourly and
46
+ * both the CLI and the proxy rewrite the file in place.
47
+ */
48
+ async function geminiAuthFingerprint(dir) {
49
+ const parts = [];
50
+ const oauthPath = join(dir, "oauth_creds.json");
51
+ if (await pathExists(oauthPath)) try {
52
+ const creds = await readJsonFile(oauthPath);
53
+ if (typeof creds.refresh_token === "string" && creds.refresh_token.trim()) parts.push(`rt:${createHash("sha256").update(creds.refresh_token.trim()).digest("hex")}`);
54
+ } catch {}
55
+ const key = await readGeminiApiKeyFromEnvFile(join(dir, ".env")).catch(() => void 0);
56
+ if (key) parts.push(`key:${createHash("sha256").update(key).digest("hex")}`);
57
+ return parts.length > 0 ? parts.sort().join("|") : null;
58
+ }
59
+ /**
60
+ * Antigravity exposes no email, so identify a login by its durable grant.
61
+ * Keep the refresh token itself out of account metadata and UI output.
62
+ */
63
+ function antigravityIdentity(payload) {
64
+ const refreshToken = payload?.token?.refresh_token?.trim();
65
+ return refreshToken ? `antigravity:${createHash("sha256").update(refreshToken).digest("hex").slice(0, 12)}` : void 0;
66
+ }
67
+ var GeminiProvider = class {
68
+ home;
69
+ saveAntigravityCredential;
70
+ hydrateAntigravityCredential;
71
+ deleteAntigravityCredential;
72
+ readAntigravityStateCredential;
73
+ id = "gemini";
74
+ name = "Gemini CLI";
75
+ shortName = "Gemini";
76
+ /** Gemini CLI vs Antigravity — TUI offers a source picker before mode. */
77
+ requiresAccountSourcePick = true;
78
+ description = "Manages ~/.gemini auth + OpenAI/Anthropic→Gemini proxy (Codex + Claude)";
79
+ defaultProxyPort = DEFAULT_PORT;
80
+ proxyCompatibility = "OpenAI + Anthropic → Gemini API";
81
+ /** The Gemini proxy cannot be driven from an OAuth-only snapshot. */
82
+ proxyRequiresApiKey = true;
83
+ async proxyApiKeyStatus(snapshotDir) {
84
+ try {
85
+ if (await readGeminiApiKeyFromEnvFile(join(snapshotDir, ".env"))) return { present: true };
86
+ return {
87
+ present: false,
88
+ hint: "Needs GEMINI_API_KEY in .env — OAuth-only cannot run this proxy"
89
+ };
90
+ } catch {
91
+ return {
92
+ present: false,
93
+ hint: "Could not read Gemini API key for this login"
94
+ };
95
+ }
96
+ }
97
+ roleDefaults() {
98
+ return rolesFromLiveDiscovery();
99
+ }
100
+ /** Gemini names cheap models "flash"/"lite" and strong models "pro". */
101
+ roleModelHints() {
102
+ return {
103
+ default: ["pro"],
104
+ opus: ["pro"],
105
+ sonnet: ["flash", "lite"],
106
+ haiku: ["flash", "lite"]
107
+ };
108
+ }
109
+ constructor(home = homedir(), saveAntigravityCredential = saveAntigravityOAuthCredential, hydrateAntigravityCredential = hydrateAntigravityOAuthPayload, deleteAntigravityCredential = deleteAntigravityOAuthCredential, readAntigravityStateCredential = readAntigravityStateOAuthPayload) {
110
+ this.home = home;
111
+ this.saveAntigravityCredential = saveAntigravityCredential;
112
+ this.hydrateAntigravityCredential = hydrateAntigravityCredential;
113
+ this.deleteAntigravityCredential = deleteAntigravityCredential;
114
+ this.readAntigravityStateCredential = readAntigravityStateCredential;
115
+ }
116
+ sourceAdapter(account) {
117
+ return geminiAccountAdapter(account);
118
+ }
119
+ poolSourceAdapter() {
120
+ return poolAdapterFor(this.id, this);
121
+ }
122
+ async createProxyHubBackend(ctx) {
123
+ const [primary, ...rest] = ctx.accounts;
124
+ if (!primary) throw new Error("Gemini Hub backend requires at least one account");
125
+ const options = primary.proxy.options ?? {};
126
+ const oauthSource = options.oauthSource === "gemini-cli" || options.oauthSource === "antigravity" || options.oauthSource === "auto" ? options.oauthSource : "auto";
127
+ const { server, endpoint } = await listenGeminiProxy({
128
+ host: "127.0.0.1",
129
+ port: 0,
130
+ authDir: primary.snapshotDir,
131
+ authDirs: rest.map((account) => account.snapshotDir),
132
+ authAccountNames: ctx.accounts.map((account) => account.name),
133
+ oauthSource,
134
+ antigravityOAuthFile: typeof options.antigravityOAuthFile === "string" ? options.antigravityOAuthFile : void 0,
135
+ upstream: typeof options.upstream === "string" ? options.upstream : void 0,
136
+ codeAssistUpstream: typeof options.codeAssistUpstream === "string" ? options.codeAssistUpstream : void 0,
137
+ token: ctx.token,
138
+ log: ctx.log
139
+ });
140
+ return {
141
+ endpoint,
142
+ close: () => closeProxyHubBackend(server)
143
+ };
144
+ }
145
+ get geminiDir() {
146
+ return process.env.GEMINI_CONFIG_DIR ?? join(this.home, ".gemini");
147
+ }
148
+ livePath(name) {
149
+ return join(this.geminiDir, name);
150
+ }
151
+ /** True when ~/.gemini holds credential material the CLI backup can snapshot. */
152
+ async hasGeminiCliAuth() {
153
+ return await this.hasApiKeyMaterial() || await pathExists(this.livePath("oauth_creds.json"));
154
+ }
155
+ /**
156
+ * Which source a source-less operation acts on.
157
+ *
158
+ * Gemini CLI files win whenever they exist, so restoring a CLI account always
159
+ * takes precedence over a lingering Antigravity keychain entry. Antigravity
160
+ * only surfaces when there is no CLI login at all — otherwise a user signed in
161
+ * through Antigravity alone would look signed out everywhere.
162
+ */
163
+ async resolveAutoSource() {
164
+ if (await this.hasGeminiCliAuth()) return "gemini-cli";
165
+ return await antigravityCredentialExists() ? "antigravity" : null;
166
+ }
167
+ async detectLive() {
168
+ const cli = await this.detectGeminiCliLive();
169
+ if (cli.present) return cli;
170
+ if (!await antigravityCredentialExists()) return { present: false };
171
+ return {
172
+ present: true,
173
+ identity: antigravityIdentity(await this.readAntigravityStateCredential().catch(() => null)),
174
+ details: "antigravity oauth"
175
+ };
176
+ }
177
+ async detectGeminiCliLive() {
178
+ const hasEnv = await this.hasApiKeyMaterial();
179
+ const hasOauth = await pathExists(this.livePath("oauth_creds.json"));
180
+ if (!hasEnv && !hasOauth) return { present: false };
181
+ const identity = await this.readIdentity();
182
+ const details = [];
183
+ if (hasOauth) details.push("oauth");
184
+ if (hasEnv) details.push("api-key");
185
+ const authType = await this.readSelectedAuthType();
186
+ if (authType) details.push(authType);
187
+ return {
188
+ present: true,
189
+ identity,
190
+ details: details.join(", ")
191
+ };
192
+ }
193
+ /**
194
+ * Explicit Antigravity liveness check. Reads the macOS Keychain (or a portable
195
+ * file), so it MUST NOT be folded into detectLive() — that runs on every home
196
+ * refresh and would trigger repeated Keychain permission prompts. Only call it
197
+ * when the user explicitly chose the Antigravity source.
198
+ */
199
+ async detectAntigravityLive(credentialFile) {
200
+ if (!credentialFile && !antigravityKeychainSupported()) throw new AnyPickError(`Antigravity accounts are not supported on ${process.platform} yet.`, "NO_LIVE_AUTH");
201
+ try {
202
+ const creds = await loadAntigravityOAuthCredentials(credentialFile);
203
+ if (!creds) return { present: false };
204
+ return {
205
+ present: true,
206
+ identity: creds.refresh_token ? antigravityIdentity({ token: { refresh_token: creds.refresh_token } }) : void 0,
207
+ details: "antigravity oauth"
208
+ };
209
+ } catch {
210
+ return { present: false };
211
+ }
212
+ }
213
+ /**
214
+ * Snapshot the Antigravity credential into the account dir.
215
+ *
216
+ * The whole credential-store payload is written, not the reduced
217
+ * {refresh_token, token_type} the proxy needs: restoring this account has to
218
+ * put the credential back into the store, and a token stripped of its access
219
+ * token and expiry is not the one that was saved. The proxy is unaffected —
220
+ * parseAntigravityOAuthCredential accepts this nested shape too.
221
+ */
222
+ async backupAntigravity(destDir, credentialFile) {
223
+ if (!credentialFile && !antigravityKeychainSupported()) throw new AnyPickError(`Antigravity accounts are not supported on ${process.platform} yet.`, "NO_LIVE_AUTH");
224
+ const payload = await readAntigravityOAuthPayload(credentialFile);
225
+ if (!payload) throw new AnyPickError("No Antigravity OAuth credential found. Sign in with Antigravity first.", "NO_LIVE_AUTH");
226
+ await ensureDir(destDir);
227
+ await writeJsonFile(join(destDir, ANTIGRAVITY_SNAPSHOT_FILE), payload, 384);
228
+ return {
229
+ identity: antigravityIdentity(payload),
230
+ notes: "Antigravity login"
231
+ };
232
+ }
233
+ async detectLiveSource(source) {
234
+ return source === "antigravity" ? this.detectAntigravityLive() : this.detectGeminiCliLive();
235
+ }
236
+ async backupSource(source, destDir) {
237
+ return source === "antigravity" ? this.backupAntigravity(destDir) : this.backup(destDir);
238
+ }
239
+ async clearLiveSource(source) {
240
+ return source === "antigravity" ? this.clearAntigravityLive() : this.clearLive();
241
+ }
242
+ /**
243
+ * Drop the Antigravity credential from the OS credential store so Antigravity
244
+ * asks for a new sign-in. The ~/.gemini CLI files belong to the other source
245
+ * and are deliberately left alone.
246
+ */
247
+ async clearAntigravityLive() {
248
+ if (!antigravityKeychainSupported()) throw new AnyPickError(`Antigravity accounts are not supported on ${process.platform} yet.`, "NO_LIVE_AUTH");
249
+ await deleteAntigravityOAuthCredential();
250
+ }
251
+ async backup(destDir) {
252
+ if (await this.resolveAutoSource() === "antigravity") return this.backupAntigravity(destDir);
253
+ await ensureDir(destDir);
254
+ let copied = 0;
255
+ for (const file of SNAPSHOT_FILES) if (await copyFileSafe(this.livePath(file), join(destDir, file))) copied += 1;
256
+ const authSettings = await this.readAuthSettingsSlice();
257
+ if (authSettings) {
258
+ await writeJsonFile(join(destDir, "auth-settings.json"), authSettings, 384);
259
+ copied += 1;
260
+ }
261
+ if (copied === 0) throw new AnyPickError("No Gemini CLI auth found under ~/.gemini (.env, oauth_creds.json, or google_accounts.json).", "NO_LIVE_AUTH");
262
+ const hasCred = await pathExists(join(destDir, ".env")) || await pathExists(join(destDir, "oauth_creds.json"));
263
+ if (!hasCred) throw new AnyPickError("Gemini google_accounts.json alone is not enough — need .env (API key) or oauth_creds.json.", "NO_LIVE_AUTH");
264
+ return {
265
+ identity: await readIdentityFromDir(destDir) ?? await this.readIdentity(),
266
+ notes: hasCred ? void 0 : "Partial Gemini snapshot"
267
+ };
268
+ }
269
+ async restore(srcDir) {
270
+ await ensureDir(this.geminiDir);
271
+ let restored = 0;
272
+ for (const file of SNAPSHOT_FILES) {
273
+ const src = join(srcDir, file);
274
+ if (await pathExists(src)) {
275
+ await copyFileSafe(src, this.livePath(file));
276
+ restored += 1;
277
+ } else await rm(this.livePath(file), { force: true }).catch(() => {});
278
+ }
279
+ const authSlicePath = join(srcDir, "auth-settings.json");
280
+ if (await pathExists(authSlicePath)) try {
281
+ const slice = await readJsonFile(authSlicePath);
282
+ await this.mergeAuthSettings(slice);
283
+ restored += 1;
284
+ } catch {}
285
+ const antigravitySnapshot = join(srcDir, ANTIGRAVITY_SNAPSHOT_FILE);
286
+ if (await pathExists(antigravitySnapshot)) {
287
+ await this.restoreAntigravity(antigravitySnapshot);
288
+ restored += 1;
289
+ } else if (antigravityKeychainSupported()) await this.deleteAntigravityCredential().catch(() => {});
290
+ if (restored === 0) throw new AnyPickError(`No Gemini auth files in snapshot: ${srcDir}`, "SNAPSHOT_INVALID");
291
+ }
292
+ /**
293
+ * Refuse an Antigravity switch before AccountService checkpoints or mutates
294
+ * anything. Without this early guard, the late SQLite rejection caused core
295
+ * to attempt a rollback that the same running app also rejected.
296
+ */
297
+ async preflightRestore(srcDir) {
298
+ const snapshotFile = join(srcDir, ANTIGRAVITY_SNAPSHOT_FILE);
299
+ if (!await pathExists(snapshotFile)) return;
300
+ const payload = await readAntigravityOAuthPayload(snapshotFile);
301
+ if (!payload) throw new AnyPickError("Saved Antigravity credential has no refresh token and cannot be restored.", "ANTIGRAVITY_RESTORE_FAILED");
302
+ try {
303
+ await assertAntigravityStateSafeToMutate({ expectedPayload: payload });
304
+ } catch (err) {
305
+ if (err instanceof Error && /Antigravity is running/i.test(err.message)) throw new AnyPickError("Antigravity is still open.", {
306
+ code: "RESTORE_OWNER_RUNNING",
307
+ suggestions: ["Quit Antigravity completely, return to AnyPick, then press Enter again."]
308
+ });
309
+ throw err;
310
+ }
311
+ }
312
+ async restoreOwnerStatus(srcDir) {
313
+ if (!await pathExists(join(srcDir, ANTIGRAVITY_SNAPSHOT_FILE))) return null;
314
+ return {
315
+ name: "Antigravity",
316
+ running: await antigravityApplicationRunning()
317
+ };
318
+ }
319
+ async accountSource(srcDir) {
320
+ return await pathExists(join(srcDir, ANTIGRAVITY_SNAPSHOT_FILE)) ? {
321
+ id: "antigravity",
322
+ name: "Antigravity"
323
+ } : {
324
+ id: "gemini-cli",
325
+ name: "Gemini CLI"
326
+ };
327
+ }
328
+ async liveAccountSource(live) {
329
+ return live.details?.toLowerCase().includes("antigravity") ? {
330
+ id: "antigravity",
331
+ name: "Antigravity"
332
+ } : {
333
+ id: "gemini-cli",
334
+ name: "Gemini CLI"
335
+ };
336
+ }
337
+ /** Push a snapshotted Antigravity credential back into the OS credential store. */
338
+ async restoreAntigravity(snapshotFile) {
339
+ if (!antigravityKeychainSupported()) throw new AnyPickError(`Writing the Antigravity OAuth credential is not supported on ${process.platform}.`, "ANTIGRAVITY_RESTORE_FAILED");
340
+ const payload = await readAntigravityOAuthPayload(snapshotFile);
341
+ if (!payload) throw new AnyPickError("Saved Antigravity credential has no refresh token and cannot be restored.", "ANTIGRAVITY_RESTORE_FAILED");
342
+ await this.saveAntigravityCredential(await this.hydrateAntigravityCredential(payload));
343
+ }
344
+ /**
345
+ * Clear local Gemini CLI auth files so the user can sign in as someone else.
346
+ * Does not revoke OAuth server-side or remove OS keychain entries.
347
+ */
348
+ async clearLive() {
349
+ if (await this.resolveAutoSource() === "antigravity") {
350
+ await this.clearAntigravityLive();
351
+ return;
352
+ }
353
+ for (const file of ["oauth_creds.json", "google_accounts.json"]) await rm(this.livePath(file), { force: true }).catch(() => {});
354
+ const envPath = this.livePath(".env");
355
+ if (await pathExists(envPath)) {
356
+ const next = await stripEnvAuthKeys(envPath);
357
+ if (next.trim()) await writeTextFile(envPath, next.endsWith("\n") ? next : `${next}\n`, 384);
358
+ else await rm(envPath, { force: true }).catch(() => {});
359
+ }
360
+ try {
361
+ const settingsPath = this.livePath("settings.json");
362
+ if (await pathExists(settingsPath)) {
363
+ const doc = await readJsonFile(settingsPath);
364
+ const security = doc.security && typeof doc.security === "object" ? { ...doc.security } : {};
365
+ if (security.auth && typeof security.auth === "object") {
366
+ const auth = { ...security.auth };
367
+ delete auth.selectedType;
368
+ if (Object.keys(auth).length === 0) delete security.auth;
369
+ else security.auth = auth;
370
+ }
371
+ if (Object.keys(security).length === 0) delete doc.security;
372
+ else doc.security = security;
373
+ await writeJsonFile(settingsPath, doc, 384);
374
+ }
375
+ } catch {}
376
+ }
377
+ async startProxy(ctx) {
378
+ return startGeminiProxy(ctx, {
379
+ liveDir: this.geminiDir,
380
+ compatibility: this.proxyCompatibility,
381
+ defaultPort: DEFAULT_PORT
382
+ });
383
+ }
384
+ async stopProxy(ctx) {
385
+ await stopGeminiProxy(ctx);
386
+ }
387
+ async proxyStatus(ctx) {
388
+ return geminiProxyStatus(ctx, this.proxyCompatibility, DEFAULT_PORT);
389
+ }
390
+ async readProxyLogs(ctx, lines = 50) {
391
+ return readGeminiProxyLogs(ctx, lines);
392
+ }
393
+ /**
394
+ * Gemini keeps no `auth.json`, so the shared default could never find a live
395
+ * file to compare and reported every saved account as not-live.
396
+ *
397
+ * Only credential material is compared, and only its durable part: the CLI
398
+ * rewrites `oauth_creds.json` on every access-token refresh, so hashing the
399
+ * whole file would mark the live account "changed" within the hour.
400
+ */
401
+ async snapshotMatchesLive(snapshotDir) {
402
+ if (await pathExists(join(snapshotDir, ANTIGRAVITY_SNAPSHOT_FILE))) {
403
+ const snapshot = await readAntigravityOAuthPayload(join(snapshotDir, ANTIGRAVITY_SNAPSHOT_FILE));
404
+ const live = await this.readAntigravityStateCredential().catch(() => null);
405
+ const snapshotIdentity = antigravityIdentity(snapshot);
406
+ const liveIdentity = antigravityIdentity(live);
407
+ if (!snapshotIdentity || !liveIdentity) throw new AnyPickError("The current Antigravity login cannot be fingerprinted from unified state.", "NOT_DETERMINABLE");
408
+ return snapshotIdentity === liveIdentity;
409
+ }
410
+ const snap = await geminiAuthFingerprint(snapshotDir);
411
+ if (!snap) return false;
412
+ return snap === await geminiAuthFingerprint(this.geminiDir);
413
+ }
414
+ async hasApiKeyMaterial() {
415
+ if (process.env.GEMINI_API_KEY?.trim() || process.env.GOOGLE_API_KEY?.trim()) {}
416
+ const envPath = this.livePath(".env");
417
+ if (!await pathExists(envPath)) return Boolean(process.env.GEMINI_API_KEY?.trim() || process.env.GOOGLE_API_KEY?.trim());
418
+ try {
419
+ const raw = await readFile(envPath, "utf8");
420
+ return /^(?:export\s+)?(?:GEMINI_API_KEY|GOOGLE_API_KEY|GOOGLE_APPLICATION_CREDENTIALS)=/m.test(raw);
421
+ } catch {
422
+ return false;
423
+ }
424
+ }
425
+ async readIdentity() {
426
+ return readIdentityFromDir(this.geminiDir);
427
+ }
428
+ async readSelectedAuthType() {
429
+ try {
430
+ const settingsPath = this.livePath("settings.json");
431
+ if (!await pathExists(settingsPath)) return;
432
+ const auth = (await readJsonFile(settingsPath)).security?.auth;
433
+ return typeof auth?.selectedType === "string" ? auth.selectedType : void 0;
434
+ } catch {
435
+ return;
436
+ }
437
+ }
438
+ async readAuthSettingsSlice() {
439
+ try {
440
+ const settingsPath = this.livePath("settings.json");
441
+ if (!await pathExists(settingsPath)) return null;
442
+ const security = (await readJsonFile(settingsPath)).security;
443
+ if (!security || typeof security !== "object") return null;
444
+ return { security: { ...security } };
445
+ } catch {
446
+ return null;
447
+ }
448
+ }
449
+ async mergeAuthSettings(slice) {
450
+ const settingsPath = this.livePath("settings.json");
451
+ let doc = {};
452
+ if (await pathExists(settingsPath)) try {
453
+ doc = await readJsonFile(settingsPath);
454
+ } catch {
455
+ doc = {};
456
+ }
457
+ if (slice.security && typeof slice.security === "object") {
458
+ const existing = doc.security && typeof doc.security === "object" ? doc.security : {};
459
+ doc.security = {
460
+ ...existing,
461
+ ...slice.security
462
+ };
463
+ }
464
+ await writeJsonFile(settingsPath, doc, 384);
465
+ }
466
+ };
467
+ var geminiProvider = new GeminiProvider();
468
+ //#endregion
469
+ export { GeminiProvider, geminiProvider, readGeminiApiKeyFromEnvFile, upsertEnvFile };
470
+
471
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","names":[],"sources":["../../src/providers/gemini.ts"],"sourcesContent":["/**\n * Google Gemini CLI\n *\n * Live auth under ~/.gemini/:\n * .env — GEMINI_API_KEY / GOOGLE_CLOUD_* (API key + Vertex)\n * oauth_creds.json — Login with Google OAuth tokens (when on disk)\n * google_accounts.json — active email + history\n * settings.json — security.auth.selectedType (merged, not fully replaced)\n *\n * Built-in dual-protocol proxy (API key accounts):\n * OpenAI (/v1/responses) → Codex\n * Anthropic (/v1/messages) → Claude Code\n * Translates to Google Generative Language API (generateContent).\n *\n * Notes:\n * - Personal OAuth may also live in the OS keychain; we snapshot file-based\n * material only. API-key accounts via .env drive the proxy most reliably.\n */\n\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { readFile, rm } from 'node:fs/promises';\nimport { createHash } from 'node:crypto';\nimport type {\n Account,\n AccountMeta,\n LiveAuthStatus,\n Provider,\n ProxyContext,\n ProxyHubBackendContext,\n ProxyHubBackendHandle,\n ProxyHandle,\n ProxyStatus,\n SourceAdapter,\n} from '../types';\nimport { geminiAccountAdapter, poolAdapterFor } from '../sources/account-adapters';\nimport {\n copyFileSafe,\n ensureDir,\n pathExists,\n readJsonFile,\n writeJsonFile,\n writeTextFile,\n} from '../utils/fs';\nimport { AnyPickError } from '../utils/errors';\nimport { readGeminiApiKeyFromEnvFile, stripEnvAuthKeys } from './gemini-env';\nimport { readIdentityFromDir } from './gemini-identity';\nimport {\n loadAntigravityOAuthCredentials,\n readAntigravityOAuthPayload,\n hydrateAntigravityOAuthPayload,\n saveAntigravityOAuthCredential,\n deleteAntigravityOAuthCredential,\n antigravityCredentialExists,\n antigravityKeychainSupported,\n type AntigravityKeyringPayload,\n} from './gemini-antigravity-oauth';\nimport {\n antigravityApplicationRunning,\n assertAntigravityStateSafeToMutate,\n readAntigravityStateOAuthPayload,\n} from './gemini-antigravity-state';\nimport { rolesFromLiveDiscovery } from './model-policy';\nimport {\n startGeminiProxy,\n stopGeminiProxy,\n geminiProxyStatus,\n readGeminiProxyLogs,\n} from './gemini-proxy-lifecycle';\nimport { listenGeminiProxy } from './gemini-proxy/server';\nimport { closeProxyHubBackend } from './proxy-hub-backend';\n\nconst SNAPSHOT_FILES = ['.env', 'oauth_creds.json', 'google_accounts.json'] as const;\nconst ANTIGRAVITY_SNAPSHOT_FILE = 'antigravity_oauth.json';\nconst DEFAULT_PORT = 4130;\n\n/**\n * Identify a Gemini CLI login by its long-lived credential material.\n *\n * The refresh token, not the access token: the access token rotates hourly and\n * both the CLI and the proxy rewrite the file in place.\n */\nasync function geminiAuthFingerprint(dir: string): Promise<string | null> {\n const parts: string[] = [];\n\n const oauthPath = join(dir, 'oauth_creds.json');\n if (await pathExists(oauthPath)) {\n try {\n const creds = await readJsonFile<{ refresh_token?: unknown }>(oauthPath);\n if (typeof creds.refresh_token === 'string' && creds.refresh_token.trim()) {\n parts.push(`rt:${createHash('sha256').update(creds.refresh_token.trim()).digest('hex')}`);\n }\n } catch {\n // Unreadable credential is no credential.\n }\n }\n\n const key = await readGeminiApiKeyFromEnvFile(join(dir, '.env')).catch(() => undefined);\n if (key) {\n parts.push(`key:${createHash('sha256').update(key).digest('hex')}`);\n }\n\n return parts.length > 0 ? parts.sort().join('|') : null;\n}\n\n/**\n * Antigravity exposes no email, so identify a login by its durable grant.\n * Keep the refresh token itself out of account metadata and UI output.\n */\nfunction antigravityIdentity(payload: AntigravityKeyringPayload | null): string | undefined {\n const refreshToken = payload?.token?.refresh_token?.trim();\n return refreshToken\n ? `antigravity:${createHash('sha256').update(refreshToken).digest('hex').slice(0, 12)}`\n : undefined;\n}\n\nexport class GeminiProvider implements Provider {\n readonly id = 'gemini';\n readonly name = 'Gemini CLI';\n readonly shortName = 'Gemini';\n /** Gemini CLI vs Antigravity — TUI offers a source picker before mode. */\n readonly requiresAccountSourcePick = true;\n readonly description = 'Manages ~/.gemini auth + OpenAI/Anthropic→Gemini proxy (Codex + Claude)';\n readonly defaultProxyPort = DEFAULT_PORT;\n readonly proxyCompatibility = 'OpenAI + Anthropic → Gemini API';\n /** The Gemini proxy cannot be driven from an OAuth-only snapshot. */\n readonly proxyRequiresApiKey = true;\n\n async proxyApiKeyStatus(snapshotDir: string): Promise<{ present: boolean; hint?: string }> {\n try {\n const key = await readGeminiApiKeyFromEnvFile(join(snapshotDir, '.env'));\n if (key) {\n return { present: true };\n }\n return {\n present: false,\n hint: 'Needs GEMINI_API_KEY in .env — OAuth-only cannot run this proxy',\n };\n } catch {\n return { present: false, hint: 'Could not read Gemini API key for this login' };\n }\n }\n\n // Model rollout differs between API-key and Code Assist OAuth accounts, so\n // roles are resolved from the proxy's live model list.\n roleDefaults(): Record<string, string> {\n return rolesFromLiveDiscovery();\n }\n\n /** Gemini names cheap models \"flash\"/\"lite\" and strong models \"pro\". */\n roleModelHints(): Record<string, readonly string[]> {\n return {\n default: ['pro'],\n opus: ['pro'],\n sonnet: ['flash', 'lite'],\n haiku: ['flash', 'lite'],\n };\n }\n\n constructor(\n private readonly home = homedir(),\n private readonly saveAntigravityCredential: (\n payload: AntigravityKeyringPayload,\n ) => Promise<void> = saveAntigravityOAuthCredential,\n private readonly hydrateAntigravityCredential: (\n payload: AntigravityKeyringPayload,\n ) => Promise<AntigravityKeyringPayload> = hydrateAntigravityOAuthPayload,\n private readonly deleteAntigravityCredential: () => Promise<boolean> = deleteAntigravityOAuthCredential,\n private readonly readAntigravityStateCredential: () => Promise<AntigravityKeyringPayload | null> = readAntigravityStateOAuthPayload,\n ) {}\n\n sourceAdapter(account: Account): SourceAdapter {\n return geminiAccountAdapter(account);\n }\n\n poolSourceAdapter(): SourceAdapter {\n return poolAdapterFor(this.id, this);\n }\n\n async createProxyHubBackend(ctx: ProxyHubBackendContext): Promise<ProxyHubBackendHandle> {\n const [primary, ...rest] = ctx.accounts;\n if (!primary) {\n throw new Error('Gemini Hub backend requires at least one account');\n }\n const options = primary.proxy.options ?? {};\n const oauthSource =\n options.oauthSource === 'gemini-cli' ||\n options.oauthSource === 'antigravity' ||\n options.oauthSource === 'auto'\n ? options.oauthSource\n : 'auto';\n const { server, endpoint } = await listenGeminiProxy({\n host: '127.0.0.1',\n port: 0,\n authDir: primary.snapshotDir,\n authDirs: rest.map((account) => account.snapshotDir),\n authAccountNames: ctx.accounts.map((account) => account.name),\n oauthSource,\n antigravityOAuthFile:\n typeof options.antigravityOAuthFile === 'string' ? options.antigravityOAuthFile : undefined,\n upstream: typeof options.upstream === 'string' ? options.upstream : undefined,\n codeAssistUpstream:\n typeof options.codeAssistUpstream === 'string' ? options.codeAssistUpstream : undefined,\n token: ctx.token,\n log: ctx.log,\n });\n return { endpoint, close: () => closeProxyHubBackend(server) };\n }\n\n private get geminiDir(): string {\n return process.env.GEMINI_CONFIG_DIR ?? join(this.home, '.gemini');\n }\n\n private livePath(name: string): string {\n return join(this.geminiDir, name);\n }\n\n /** True when ~/.gemini holds credential material the CLI backup can snapshot. */\n private async hasGeminiCliAuth(): Promise<boolean> {\n return (\n (await this.hasApiKeyMaterial()) || (await pathExists(this.livePath('oauth_creds.json')))\n );\n }\n\n /**\n * Which source a source-less operation acts on.\n *\n * Gemini CLI files win whenever they exist, so restoring a CLI account always\n * takes precedence over a lingering Antigravity keychain entry. Antigravity\n * only surfaces when there is no CLI login at all — otherwise a user signed in\n * through Antigravity alone would look signed out everywhere.\n */\n private async resolveAutoSource(): Promise<'gemini-cli' | 'antigravity' | null> {\n if (await this.hasGeminiCliAuth()) {\n return 'gemini-cli';\n }\n return (await antigravityCredentialExists()) ? 'antigravity' : null;\n }\n\n async detectLive(): Promise<LiveAuthStatus> {\n const cli = await this.detectGeminiCliLive();\n if (cli.present) {\n return cli;\n }\n // Existence-only probe: reads no secret, so no Keychain prompt.\n if (!(await antigravityCredentialExists())) {\n return { present: false };\n }\n // Unified state is a local SQLite database, so it is safe to fingerprint\n // during routine detection. Never fall back to reading the Keychain here.\n const payload = await this.readAntigravityStateCredential().catch(() => null);\n return {\n present: true,\n identity: antigravityIdentity(payload),\n details: 'antigravity oauth',\n };\n }\n\n private async detectGeminiCliLive(): Promise<LiveAuthStatus> {\n const hasEnv = await this.hasApiKeyMaterial();\n const hasOauth = await pathExists(this.livePath('oauth_creds.json'));\n if (!hasEnv && !hasOauth) {\n return { present: false };\n }\n\n const identity = await this.readIdentity();\n const details: string[] = [];\n if (hasOauth) {\n details.push('oauth');\n }\n if (hasEnv) {\n details.push('api-key');\n }\n const authType = await this.readSelectedAuthType();\n if (authType) {\n details.push(authType);\n }\n\n return {\n present: true,\n identity,\n details: details.join(', '),\n };\n }\n\n /**\n * Explicit Antigravity liveness check. Reads the macOS Keychain (or a portable\n * file), so it MUST NOT be folded into detectLive() — that runs on every home\n * refresh and would trigger repeated Keychain permission prompts. Only call it\n * when the user explicitly chose the Antigravity source.\n */\n async detectAntigravityLive(credentialFile?: string): Promise<LiveAuthStatus> {\n if (!credentialFile && !antigravityKeychainSupported()) {\n throw new AnyPickError(\n `Antigravity accounts are not supported on ${process.platform} yet.`,\n 'NO_LIVE_AUTH',\n );\n }\n try {\n const creds = await loadAntigravityOAuthCredentials(credentialFile);\n if (!creds) {\n return { present: false };\n }\n const identity = creds.refresh_token\n ? antigravityIdentity({ token: { refresh_token: creds.refresh_token } })\n : undefined;\n return { present: true, identity, details: 'antigravity oauth' };\n } catch {\n return { present: false };\n }\n }\n\n /**\n * Snapshot the Antigravity credential into the account dir.\n *\n * The whole credential-store payload is written, not the reduced\n * {refresh_token, token_type} the proxy needs: restoring this account has to\n * put the credential back into the store, and a token stripped of its access\n * token and expiry is not the one that was saved. The proxy is unaffected —\n * parseAntigravityOAuthCredential accepts this nested shape too.\n */\n async backupAntigravity(\n destDir: string,\n credentialFile?: string,\n ): Promise<Partial<Pick<AccountMeta, 'identity' | 'label' | 'notes'>>> {\n if (!credentialFile && !antigravityKeychainSupported()) {\n throw new AnyPickError(\n `Antigravity accounts are not supported on ${process.platform} yet.`,\n 'NO_LIVE_AUTH',\n );\n }\n const payload = await readAntigravityOAuthPayload(credentialFile);\n if (!payload) {\n throw new AnyPickError(\n 'No Antigravity OAuth credential found. Sign in with Antigravity first.',\n 'NO_LIVE_AUTH',\n );\n }\n await ensureDir(destDir);\n await writeJsonFile(join(destDir, ANTIGRAVITY_SNAPSHOT_FILE), payload, 0o600);\n return { identity: antigravityIdentity(payload), notes: 'Antigravity login' };\n }\n\n async detectLiveSource(source: string): Promise<LiveAuthStatus> {\n // Pinned to one source: `gemini-cli` must not fall through to Antigravity,\n // or the source picker would report a login the chosen source cannot use.\n return source === 'antigravity' ? this.detectAntigravityLive() : this.detectGeminiCliLive();\n }\n\n async backupSource(\n source: string,\n destDir: string,\n ): Promise<Partial<Pick<AccountMeta, 'identity' | 'label' | 'notes'>>> {\n return source === 'antigravity' ? this.backupAntigravity(destDir) : this.backup(destDir);\n }\n\n async clearLiveSource(source: string): Promise<void> {\n return source === 'antigravity' ? this.clearAntigravityLive() : this.clearLive();\n }\n\n /**\n * Drop the Antigravity credential from the OS credential store so Antigravity\n * asks for a new sign-in. The ~/.gemini CLI files belong to the other source\n * and are deliberately left alone.\n */\n async clearAntigravityLive(): Promise<void> {\n if (!antigravityKeychainSupported()) {\n throw new AnyPickError(\n `Antigravity accounts are not supported on ${process.platform} yet.`,\n 'NO_LIVE_AUTH',\n );\n }\n await deleteAntigravityOAuthCredential();\n }\n\n async backup(\n destDir: string,\n ): Promise<Partial<Pick<AccountMeta, 'identity' | 'label' | 'notes'>>> {\n // Must agree with detectLive(): callers that snapshot whatever it reported\n // live (checkpointLiveAuth, save, stash) would otherwise fail outright for\n // an Antigravity-only login.\n if ((await this.resolveAutoSource()) === 'antigravity') {\n return this.backupAntigravity(destDir);\n }\n await ensureDir(destDir);\n let copied = 0;\n\n for (const file of SNAPSHOT_FILES) {\n const ok = await copyFileSafe(this.livePath(file), join(destDir, file));\n if (ok) {\n copied += 1;\n }\n }\n\n // Auth-related settings slice only (do not clobber MCP/hooks on restore)\n const authSettings = await this.readAuthSettingsSlice();\n if (authSettings) {\n await writeJsonFile(join(destDir, 'auth-settings.json'), authSettings, 0o600);\n copied += 1;\n }\n\n if (copied === 0) {\n throw new AnyPickError(\n 'No Gemini CLI auth found under ~/.gemini (.env, oauth_creds.json, or google_accounts.json).',\n 'NO_LIVE_AUTH',\n );\n }\n\n // Require at least one credential-bearing file\n const hasCred =\n (await pathExists(join(destDir, '.env'))) ||\n (await pathExists(join(destDir, 'oauth_creds.json')));\n if (!hasCred) {\n throw new AnyPickError(\n 'Gemini google_accounts.json alone is not enough — need .env (API key) or oauth_creds.json.',\n 'NO_LIVE_AUTH',\n );\n }\n\n const identity = (await readIdentityFromDir(destDir)) ?? (await this.readIdentity());\n return {\n identity,\n notes: hasCred ? undefined : 'Partial Gemini snapshot',\n };\n }\n\n async restore(srcDir: string): Promise<void> {\n await ensureDir(this.geminiDir);\n let restored = 0;\n\n for (const file of SNAPSHOT_FILES) {\n const src = join(srcDir, file);\n if (await pathExists(src)) {\n await copyFileSafe(src, this.livePath(file));\n restored += 1;\n } else {\n // Clear every credential file not present in the snapshot so accounts\n // do not mix. Previously only .env and oauth_creds.json were removed;\n // google_accounts.json had the same stale-state risk when restoring an\n // Antigravity-only snapshot — the ghost identity confused\n // snapshotMatchesLive into fingerprint-matching the wrong account.\n await rm(this.livePath(file), { force: true }).catch(() => {});\n }\n }\n\n const authSlicePath = join(srcDir, 'auth-settings.json');\n if (await pathExists(authSlicePath)) {\n try {\n const slice = await readJsonFile<Record<string, unknown>>(authSlicePath);\n await this.mergeAuthSettings(slice);\n restored += 1;\n } catch {\n // ignore corrupt slice\n }\n }\n\n // An Antigravity credential has no home under ~/.gemini: it lives in the OS\n // credential store. AnyPick's own proxy reads it straight from the snapshot\n // dir, but Antigravity itself only ever reads the store — so without this\n // write a switch changes nothing the user can see.\n const antigravitySnapshot = join(srcDir, ANTIGRAVITY_SNAPSHOT_FILE);\n if (await pathExists(antigravitySnapshot)) {\n await this.restoreAntigravity(antigravitySnapshot);\n restored += 1;\n } else if (antigravityKeychainSupported()) {\n // Restoring a Gemini CLI account: clear the Antigravity credential so\n // Antigravity itself follows the switch rather than retaining a stale\n // login from the previous account. Best-effort — a missing or\n // inaccessible entry is the desired end state either way (ADR 0004).\n await this.deleteAntigravityCredential().catch(() => {});\n }\n\n if (restored === 0) {\n throw new AnyPickError(`No Gemini auth files in snapshot: ${srcDir}`, 'SNAPSHOT_INVALID');\n }\n }\n\n /**\n * Refuse an Antigravity switch before AccountService checkpoints or mutates\n * anything. Without this early guard, the late SQLite rejection caused core\n * to attempt a rollback that the same running app also rejected.\n */\n async preflightRestore(srcDir: string): Promise<void> {\n const snapshotFile = join(srcDir, ANTIGRAVITY_SNAPSHOT_FILE);\n if (!(await pathExists(snapshotFile))) {\n return;\n }\n const payload = await readAntigravityOAuthPayload(snapshotFile);\n if (!payload) {\n throw new AnyPickError(\n 'Saved Antigravity credential has no refresh token and cannot be restored.',\n 'ANTIGRAVITY_RESTORE_FAILED',\n );\n }\n try {\n await assertAntigravityStateSafeToMutate({ expectedPayload: payload });\n } catch (err) {\n if (err instanceof Error && /Antigravity is running/i.test(err.message)) {\n throw new AnyPickError('Antigravity is still open.', {\n code: 'RESTORE_OWNER_RUNNING',\n suggestions: ['Quit Antigravity completely, return to AnyPick, then press Enter again.'],\n });\n }\n throw err;\n }\n }\n\n async restoreOwnerStatus(srcDir: string): Promise<{ name: string; running: boolean } | null> {\n if (!(await pathExists(join(srcDir, ANTIGRAVITY_SNAPSHOT_FILE)))) {\n return null;\n }\n return {\n name: 'Antigravity',\n running: await antigravityApplicationRunning(),\n };\n }\n\n async accountSource(srcDir: string): Promise<{ id: string; name: string }> {\n return (await pathExists(join(srcDir, ANTIGRAVITY_SNAPSHOT_FILE)))\n ? { id: 'antigravity', name: 'Antigravity' }\n : { id: 'gemini-cli', name: 'Gemini CLI' };\n }\n\n async liveAccountSource(live: LiveAuthStatus): Promise<{ id: string; name: string }> {\n return live.details?.toLowerCase().includes('antigravity')\n ? { id: 'antigravity', name: 'Antigravity' }\n : { id: 'gemini-cli', name: 'Gemini CLI' };\n }\n\n /** Push a snapshotted Antigravity credential back into the OS credential store. */\n private async restoreAntigravity(snapshotFile: string): Promise<void> {\n if (!antigravityKeychainSupported()) {\n throw new AnyPickError(\n `Writing the Antigravity OAuth credential is not supported on ${process.platform}.`,\n 'ANTIGRAVITY_RESTORE_FAILED',\n );\n }\n const payload = await readAntigravityOAuthPayload(snapshotFile);\n if (!payload) {\n throw new AnyPickError(\n 'Saved Antigravity credential has no refresh token and cannot be restored.',\n 'ANTIGRAVITY_RESTORE_FAILED',\n );\n }\n // Do not hide this error. AccountService rolls the live checkpoint and\n // active pointer back when restore rejects; pretending success leaves the\n // UI pointing at an account Antigravity never received.\n await this.saveAntigravityCredential(await this.hydrateAntigravityCredential(payload));\n }\n\n /**\n * Clear local Gemini CLI auth files so the user can sign in as someone else.\n * Does not revoke OAuth server-side or remove OS keychain entries.\n */\n async clearLive(): Promise<void> {\n if ((await this.resolveAutoSource()) === 'antigravity') {\n await this.clearAntigravityLive();\n return;\n }\n for (const file of ['oauth_creds.json', 'google_accounts.json'] as const) {\n await rm(this.livePath(file), { force: true }).catch(() => {});\n }\n\n // Strip known auth keys from .env; remove file if empty\n const envPath = this.livePath('.env');\n if (await pathExists(envPath)) {\n const next = await stripEnvAuthKeys(envPath);\n if (next.trim()) {\n await writeTextFile(envPath, next.endsWith('\\n') ? next : `${next}\\n`, 0o600);\n } else {\n await rm(envPath, { force: true }).catch(() => {});\n }\n }\n\n // Clear selected auth type in settings (keep the rest of user config)\n try {\n const settingsPath = this.livePath('settings.json');\n if (await pathExists(settingsPath)) {\n const doc = await readJsonFile<Record<string, unknown>>(settingsPath);\n const security =\n doc.security && typeof doc.security === 'object'\n ? { ...(doc.security as Record<string, unknown>) }\n : {};\n if (security.auth && typeof security.auth === 'object') {\n const auth = { ...(security.auth as Record<string, unknown>) };\n delete auth.selectedType;\n if (Object.keys(auth).length === 0) {\n delete security.auth;\n } else {\n security.auth = auth;\n }\n }\n if (Object.keys(security).length === 0) {\n delete doc.security;\n } else {\n doc.security = security;\n }\n await writeJsonFile(settingsPath, doc, 0o600);\n }\n } catch {\n // best-effort\n }\n }\n\n // ── Built-in proxy (API key → Codex + Claude) ───────────────────\n\n async startProxy(ctx: ProxyContext): Promise<ProxyHandle> {\n return startGeminiProxy(ctx, {\n liveDir: this.geminiDir,\n compatibility: this.proxyCompatibility,\n defaultPort: DEFAULT_PORT,\n });\n }\n\n async stopProxy(ctx: ProxyContext): Promise<void> {\n await stopGeminiProxy(ctx);\n }\n\n async proxyStatus(ctx: ProxyContext): Promise<ProxyStatus> {\n return geminiProxyStatus(ctx, this.proxyCompatibility, DEFAULT_PORT);\n }\n\n async readProxyLogs(ctx: ProxyContext, lines = 50): Promise<string> {\n return readGeminiProxyLogs(ctx, lines);\n }\n\n /**\n * Gemini keeps no `auth.json`, so the shared default could never find a live\n * file to compare and reported every saved account as not-live.\n *\n * Only credential material is compared, and only its durable part: the CLI\n * rewrites `oauth_creds.json` on every access-token refresh, so hashing the\n * whole file would mark the live account \"changed\" within the hour.\n */\n async snapshotMatchesLive(snapshotDir: string): Promise<boolean> {\n if (await pathExists(join(snapshotDir, ANTIGRAVITY_SNAPSHOT_FILE))) {\n // Compare against the local unified-state token rather than Keychain.\n // This avoids permission prompts on every list refresh while still\n // preventing an identity-less active pointer from choosing a snapshot.\n const snapshot = await readAntigravityOAuthPayload(\n join(snapshotDir, ANTIGRAVITY_SNAPSHOT_FILE),\n );\n const live = await this.readAntigravityStateCredential().catch(() => null);\n const snapshotIdentity = antigravityIdentity(snapshot);\n const liveIdentity = antigravityIdentity(live);\n if (!snapshotIdentity || !liveIdentity) {\n throw new AnyPickError(\n 'The current Antigravity login cannot be fingerprinted from unified state.',\n 'NOT_DETERMINABLE',\n );\n }\n return snapshotIdentity === liveIdentity;\n }\n const snap = await geminiAuthFingerprint(snapshotDir);\n if (!snap) {\n return false;\n }\n return snap === (await geminiAuthFingerprint(this.geminiDir));\n }\n\n private async hasApiKeyMaterial(): Promise<boolean> {\n if (process.env.GEMINI_API_KEY?.trim() || process.env.GOOGLE_API_KEY?.trim()) {\n // Env may be set outside ~/.gemini — still counts as live for detect\n // but backup prefers on-disk .env\n }\n const envPath = this.livePath('.env');\n if (!(await pathExists(envPath))) {\n return Boolean(process.env.GEMINI_API_KEY?.trim() || process.env.GOOGLE_API_KEY?.trim());\n }\n try {\n const raw = await readFile(envPath, 'utf8');\n return /^(?:export\\s+)?(?:GEMINI_API_KEY|GOOGLE_API_KEY|GOOGLE_APPLICATION_CREDENTIALS)=/m.test(\n raw,\n );\n } catch {\n return false;\n }\n }\n\n private async readIdentity(): Promise<string | undefined> {\n return readIdentityFromDir(this.geminiDir);\n }\n\n private async readSelectedAuthType(): Promise<string | undefined> {\n try {\n const settingsPath = this.livePath('settings.json');\n if (!(await pathExists(settingsPath))) {\n return undefined;\n }\n const doc = await readJsonFile<Record<string, unknown>>(settingsPath);\n const security = doc.security as Record<string, unknown> | undefined;\n const auth = security?.auth as Record<string, unknown> | undefined;\n return typeof auth?.selectedType === 'string' ? auth.selectedType : undefined;\n } catch {\n return undefined;\n }\n }\n\n private async readAuthSettingsSlice(): Promise<Record<string, unknown> | null> {\n try {\n const settingsPath = this.livePath('settings.json');\n if (!(await pathExists(settingsPath))) {\n return null;\n }\n const doc = await readJsonFile<Record<string, unknown>>(settingsPath);\n const security = doc.security as Record<string, unknown> | undefined;\n if (!security || typeof security !== 'object') {\n return null;\n }\n return { security: { ...security } };\n } catch {\n return null;\n }\n }\n\n private async mergeAuthSettings(slice: Record<string, unknown>): Promise<void> {\n const settingsPath = this.livePath('settings.json');\n let doc: Record<string, unknown> = {};\n if (await pathExists(settingsPath)) {\n try {\n doc = await readJsonFile<Record<string, unknown>>(settingsPath);\n } catch {\n doc = {};\n }\n }\n if (slice.security && typeof slice.security === 'object') {\n const existing =\n doc.security && typeof doc.security === 'object'\n ? (doc.security as Record<string, unknown>)\n : {};\n doc.security = {\n ...existing,\n ...(slice.security as Record<string, unknown>),\n };\n }\n await writeJsonFile(settingsPath, doc, 0o600);\n }\n}\n\nexport { readGeminiApiKeyFromEnvFile, upsertEnvFile } from './gemini-env';\n\nexport const geminiProvider = new GeminiProvider();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwEA,IAAM,iBAAiB;CAAC;CAAQ;CAAoB;AAAsB;AAC1E,IAAM,4BAA4B;AAClC,IAAM,eAAe;;;;;;;AAQrB,eAAe,sBAAsB,KAAqC;CACxE,MAAM,QAAkB,CAAC;CAEzB,MAAM,YAAY,KAAK,KAAK,kBAAkB;CAC9C,IAAI,MAAM,WAAW,SAAS,GAC5B,IAAI;EACF,MAAM,QAAQ,MAAM,aAA0C,SAAS;EACvE,IAAI,OAAO,MAAM,kBAAkB,YAAY,MAAM,cAAc,KAAK,GACtE,MAAM,KAAK,MAAM,WAAW,QAAQ,CAAC,CAAC,OAAO,MAAM,cAAc,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG;CAE5F,QAAQ,CAER;CAGF,MAAM,MAAM,MAAM,4BAA4B,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;CACtF,IAAI,KACF,MAAM,KAAK,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,GAAG;CAGpE,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI;AACrD;;;;;AAMA,SAAS,oBAAoB,SAA+D;CAC1F,MAAM,eAAe,SAAS,OAAO,eAAe,KAAK;CACzD,OAAO,eACH,eAAe,WAAW,QAAQ,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE,MAClF,KAAA;AACN;AAEA,IAAa,iBAAb,MAAgD;CA4C3B;CACA;CAGA;CAGA;CACA;CAnDnB,KAAc;CACd,OAAgB;CAChB,YAAqB;;CAErB,4BAAqC;CACrC,cAAuB;CACvB,mBAA4B;CAC5B,qBAA8B;;CAE9B,sBAA+B;CAE/B,MAAM,kBAAkB,aAAmE;EACzF,IAAI;GAEF,IAAI,MADc,4BAA4B,KAAK,aAAa,MAAM,CAAC,GAErE,OAAO,EAAE,SAAS,KAAK;GAEzB,OAAO;IACL,SAAS;IACT,MAAM;GACR;EACF,QAAQ;GACN,OAAO;IAAE,SAAS;IAAO,MAAM;GAA+C;EAChF;CACF;CAIA,eAAuC;EACrC,OAAO,uBAAuB;CAChC;;CAGA,iBAAoD;EAClD,OAAO;GACL,SAAS,CAAC,KAAK;GACf,MAAM,CAAC,KAAK;GACZ,QAAQ,CAAC,SAAS,MAAM;GACxB,OAAO,CAAC,SAAS,MAAM;EACzB;CACF;CAEA,YACE,OAAwB,QAAQ,GAChC,4BAEqB,gCACrB,+BAE0C,gCAC1C,8BAAuE,kCACvE,iCAAmG,kCACnG;EATiB,KAAA,OAAA;EACA,KAAA,4BAAA;EAGA,KAAA,+BAAA;EAGA,KAAA,8BAAA;EACA,KAAA,iCAAA;CAChB;CAEH,cAAc,SAAiC;EAC7C,OAAO,qBAAqB,OAAO;CACrC;CAEA,oBAAmC;EACjC,OAAO,eAAe,KAAK,IAAI,IAAI;CACrC;CAEA,MAAM,sBAAsB,KAA6D;EACvF,MAAM,CAAC,SAAS,GAAG,QAAQ,IAAI;EAC/B,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,kDAAkD;EAEpE,MAAM,UAAU,QAAQ,MAAM,WAAW,CAAC;EAC1C,MAAM,cACJ,QAAQ,gBAAgB,gBACxB,QAAQ,gBAAgB,iBACxB,QAAQ,gBAAgB,SACpB,QAAQ,cACR;EACN,MAAM,EAAE,QAAQ,aAAa,MAAM,kBAAkB;GACnD,MAAM;GACN,MAAM;GACN,SAAS,QAAQ;GACjB,UAAU,KAAK,KAAK,YAAY,QAAQ,WAAW;GACnD,kBAAkB,IAAI,SAAS,KAAK,YAAY,QAAQ,IAAI;GAC5D;GACA,sBACE,OAAO,QAAQ,yBAAyB,WAAW,QAAQ,uBAAuB,KAAA;GACpF,UAAU,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW,KAAA;GACpE,oBACE,OAAO,QAAQ,uBAAuB,WAAW,QAAQ,qBAAqB,KAAA;GAChF,OAAO,IAAI;GACX,KAAK,IAAI;EACX,CAAC;EACD,OAAO;GAAE;GAAU,aAAa,qBAAqB,MAAM;EAAE;CAC/D;CAEA,IAAY,YAAoB;EAC9B,OAAO,QAAQ,IAAI,qBAAqB,KAAK,KAAK,MAAM,SAAS;CACnE;CAEA,SAAiB,MAAsB;EACrC,OAAO,KAAK,KAAK,WAAW,IAAI;CAClC;;CAGA,MAAc,mBAAqC;EACjD,OACG,MAAM,KAAK,kBAAkB,KAAO,MAAM,WAAW,KAAK,SAAS,kBAAkB,CAAC;CAE3F;;;;;;;;;CAUA,MAAc,oBAAkE;EAC9E,IAAI,MAAM,KAAK,iBAAiB,GAC9B,OAAO;EAET,OAAQ,MAAM,4BAA4B,IAAK,gBAAgB;CACjE;CAEA,MAAM,aAAsC;EAC1C,MAAM,MAAM,MAAM,KAAK,oBAAoB;EAC3C,IAAI,IAAI,SACN,OAAO;EAGT,IAAI,CAAE,MAAM,4BAA4B,GACtC,OAAO,EAAE,SAAS,MAAM;EAK1B,OAAO;GACL,SAAS;GACT,UAAU,oBAAoB,MAHV,KAAK,+BAA+B,CAAC,CAAC,YAAY,IAAI,CAGrC;GACrC,SAAS;EACX;CACF;CAEA,MAAc,sBAA+C;EAC3D,MAAM,SAAS,MAAM,KAAK,kBAAkB;EAC5C,MAAM,WAAW,MAAM,WAAW,KAAK,SAAS,kBAAkB,CAAC;EACnE,IAAI,CAAC,UAAU,CAAC,UACd,OAAO,EAAE,SAAS,MAAM;EAG1B,MAAM,WAAW,MAAM,KAAK,aAAa;EACzC,MAAM,UAAoB,CAAC;EAC3B,IAAI,UACF,QAAQ,KAAK,OAAO;EAEtB,IAAI,QACF,QAAQ,KAAK,SAAS;EAExB,MAAM,WAAW,MAAM,KAAK,qBAAqB;EACjD,IAAI,UACF,QAAQ,KAAK,QAAQ;EAGvB,OAAO;GACL,SAAS;GACT;GACA,SAAS,QAAQ,KAAK,IAAI;EAC5B;CACF;;;;;;;CAQA,MAAM,sBAAsB,gBAAkD;EAC5E,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,GACnD,MAAM,IAAI,aACR,6CAA6C,QAAQ,SAAS,QAC9D,cACF;EAEF,IAAI;GACF,MAAM,QAAQ,MAAM,gCAAgC,cAAc;GAClE,IAAI,CAAC,OACH,OAAO,EAAE,SAAS,MAAM;GAK1B,OAAO;IAAE,SAAS;IAAM,UAHP,MAAM,gBACnB,oBAAoB,EAAE,OAAO,EAAE,eAAe,MAAM,cAAc,EAAE,CAAC,IACrE,KAAA;IAC8B,SAAS;GAAoB;EACjE,QAAQ;GACN,OAAO,EAAE,SAAS,MAAM;EAC1B;CACF;;;;;;;;;;CAWA,MAAM,kBACJ,SACA,gBACqE;EACrE,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,GACnD,MAAM,IAAI,aACR,6CAA6C,QAAQ,SAAS,QAC9D,cACF;EAEF,MAAM,UAAU,MAAM,4BAA4B,cAAc;EAChE,IAAI,CAAC,SACH,MAAM,IAAI,aACR,0EACA,cACF;EAEF,MAAM,UAAU,OAAO;EACvB,MAAM,cAAc,KAAK,SAAS,yBAAyB,GAAG,SAAS,GAAK;EAC5E,OAAO;GAAE,UAAU,oBAAoB,OAAO;GAAG,OAAO;EAAoB;CAC9E;CAEA,MAAM,iBAAiB,QAAyC;EAG9D,OAAO,WAAW,gBAAgB,KAAK,sBAAsB,IAAI,KAAK,oBAAoB;CAC5F;CAEA,MAAM,aACJ,QACA,SACqE;EACrE,OAAO,WAAW,gBAAgB,KAAK,kBAAkB,OAAO,IAAI,KAAK,OAAO,OAAO;CACzF;CAEA,MAAM,gBAAgB,QAA+B;EACnD,OAAO,WAAW,gBAAgB,KAAK,qBAAqB,IAAI,KAAK,UAAU;CACjF;;;;;;CAOA,MAAM,uBAAsC;EAC1C,IAAI,CAAC,6BAA6B,GAChC,MAAM,IAAI,aACR,6CAA6C,QAAQ,SAAS,QAC9D,cACF;EAEF,MAAM,iCAAiC;CACzC;CAEA,MAAM,OACJ,SACqE;EAIrE,IAAK,MAAM,KAAK,kBAAkB,MAAO,eACvC,OAAO,KAAK,kBAAkB,OAAO;EAEvC,MAAM,UAAU,OAAO;EACvB,IAAI,SAAS;EAEb,KAAK,MAAM,QAAQ,gBAEjB,IAAI,MADa,aAAa,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,GAEpE,UAAU;EAKd,MAAM,eAAe,MAAM,KAAK,sBAAsB;EACtD,IAAI,cAAc;GAChB,MAAM,cAAc,KAAK,SAAS,oBAAoB,GAAG,cAAc,GAAK;GAC5E,UAAU;EACZ;EAEA,IAAI,WAAW,GACb,MAAM,IAAI,aACR,+FACA,cACF;EAIF,MAAM,UACH,MAAM,WAAW,KAAK,SAAS,MAAM,CAAC,KACtC,MAAM,WAAW,KAAK,SAAS,kBAAkB,CAAC;EACrD,IAAI,CAAC,SACH,MAAM,IAAI,aACR,8FACA,cACF;EAIF,OAAO;GACL,UAFgB,MAAM,oBAAoB,OAAO,KAAO,MAAM,KAAK,aAAa;GAGhF,OAAO,UAAU,KAAA,IAAY;EAC/B;CACF;CAEA,MAAM,QAAQ,QAA+B;EAC3C,MAAM,UAAU,KAAK,SAAS;EAC9B,IAAI,WAAW;EAEf,KAAK,MAAM,QAAQ,gBAAgB;GACjC,MAAM,MAAM,KAAK,QAAQ,IAAI;GAC7B,IAAI,MAAM,WAAW,GAAG,GAAG;IACzB,MAAM,aAAa,KAAK,KAAK,SAAS,IAAI,CAAC;IAC3C,YAAY;GACd,OAME,MAAM,GAAG,KAAK,SAAS,IAAI,GAAG,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;EAEjE;EAEA,MAAM,gBAAgB,KAAK,QAAQ,oBAAoB;EACvD,IAAI,MAAM,WAAW,aAAa,GAChC,IAAI;GACF,MAAM,QAAQ,MAAM,aAAsC,aAAa;GACvE,MAAM,KAAK,kBAAkB,KAAK;GAClC,YAAY;EACd,QAAQ,CAER;EAOF,MAAM,sBAAsB,KAAK,QAAQ,yBAAyB;EAClE,IAAI,MAAM,WAAW,mBAAmB,GAAG;GACzC,MAAM,KAAK,mBAAmB,mBAAmB;GACjD,YAAY;EACd,OAAO,IAAI,6BAA6B,GAKtC,MAAM,KAAK,4BAA4B,CAAC,CAAC,YAAY,CAAC,CAAC;EAGzD,IAAI,aAAa,GACf,MAAM,IAAI,aAAa,qCAAqC,UAAU,kBAAkB;CAE5F;;;;;;CAOA,MAAM,iBAAiB,QAA+B;EACpD,MAAM,eAAe,KAAK,QAAQ,yBAAyB;EAC3D,IAAI,CAAE,MAAM,WAAW,YAAY,GACjC;EAEF,MAAM,UAAU,MAAM,4BAA4B,YAAY;EAC9D,IAAI,CAAC,SACH,MAAM,IAAI,aACR,6EACA,4BACF;EAEF,IAAI;GACF,MAAM,mCAAmC,EAAE,iBAAiB,QAAQ,CAAC;EACvE,SAAS,KAAK;GACZ,IAAI,eAAe,SAAS,0BAA0B,KAAK,IAAI,OAAO,GACpE,MAAM,IAAI,aAAa,8BAA8B;IACnD,MAAM;IACN,aAAa,CAAC,yEAAyE;GACzF,CAAC;GAEH,MAAM;EACR;CACF;CAEA,MAAM,mBAAmB,QAAoE;EAC3F,IAAI,CAAE,MAAM,WAAW,KAAK,QAAQ,yBAAyB,CAAC,GAC5D,OAAO;EAET,OAAO;GACL,MAAM;GACN,SAAS,MAAM,8BAA8B;EAC/C;CACF;CAEA,MAAM,cAAc,QAAuD;EACzE,OAAQ,MAAM,WAAW,KAAK,QAAQ,yBAAyB,CAAC,IAC5D;GAAE,IAAI;GAAe,MAAM;EAAc,IACzC;GAAE,IAAI;GAAc,MAAM;EAAa;CAC7C;CAEA,MAAM,kBAAkB,MAA6D;EACnF,OAAO,KAAK,SAAS,YAAY,CAAC,CAAC,SAAS,aAAa,IACrD;GAAE,IAAI;GAAe,MAAM;EAAc,IACzC;GAAE,IAAI;GAAc,MAAM;EAAa;CAC7C;;CAGA,MAAc,mBAAmB,cAAqC;EACpE,IAAI,CAAC,6BAA6B,GAChC,MAAM,IAAI,aACR,gEAAgE,QAAQ,SAAS,IACjF,4BACF;EAEF,MAAM,UAAU,MAAM,4BAA4B,YAAY;EAC9D,IAAI,CAAC,SACH,MAAM,IAAI,aACR,6EACA,4BACF;EAKF,MAAM,KAAK,0BAA0B,MAAM,KAAK,6BAA6B,OAAO,CAAC;CACvF;;;;;CAMA,MAAM,YAA2B;EAC/B,IAAK,MAAM,KAAK,kBAAkB,MAAO,eAAe;GACtD,MAAM,KAAK,qBAAqB;GAChC;EACF;EACA,KAAK,MAAM,QAAQ,CAAC,oBAAoB,sBAAsB,GAC5D,MAAM,GAAG,KAAK,SAAS,IAAI,GAAG,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;EAI/D,MAAM,UAAU,KAAK,SAAS,MAAM;EACpC,IAAI,MAAM,WAAW,OAAO,GAAG;GAC7B,MAAM,OAAO,MAAM,iBAAiB,OAAO;GAC3C,IAAI,KAAK,KAAK,GACZ,MAAM,cAAc,SAAS,KAAK,SAAS,IAAI,IAAI,OAAO,GAAG,KAAK,KAAK,GAAK;QAE5E,MAAM,GAAG,SAAS,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;EAErD;EAGA,IAAI;GACF,MAAM,eAAe,KAAK,SAAS,eAAe;GAClD,IAAI,MAAM,WAAW,YAAY,GAAG;IAClC,MAAM,MAAM,MAAM,aAAsC,YAAY;IACpE,MAAM,WACJ,IAAI,YAAY,OAAO,IAAI,aAAa,WACpC,EAAE,GAAI,IAAI,SAAqC,IAC/C,CAAC;IACP,IAAI,SAAS,QAAQ,OAAO,SAAS,SAAS,UAAU;KACtD,MAAM,OAAO,EAAE,GAAI,SAAS,KAAiC;KAC7D,OAAO,KAAK;KACZ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,WAAW,GAC/B,OAAO,SAAS;UAEhB,SAAS,OAAO;IAEpB;IACA,IAAI,OAAO,KAAK,QAAQ,CAAC,CAAC,WAAW,GACnC,OAAO,IAAI;SAEX,IAAI,WAAW;IAEjB,MAAM,cAAc,cAAc,KAAK,GAAK;GAC9C;EACF,QAAQ,CAER;CACF;CAIA,MAAM,WAAW,KAAyC;EACxD,OAAO,iBAAiB,KAAK;GAC3B,SAAS,KAAK;GACd,eAAe,KAAK;GACpB,aAAa;EACf,CAAC;CACH;CAEA,MAAM,UAAU,KAAkC;EAChD,MAAM,gBAAgB,GAAG;CAC3B;CAEA,MAAM,YAAY,KAAyC;EACzD,OAAO,kBAAkB,KAAK,KAAK,oBAAoB,YAAY;CACrE;CAEA,MAAM,cAAc,KAAmB,QAAQ,IAAqB;EAClE,OAAO,oBAAoB,KAAK,KAAK;CACvC;;;;;;;;;CAUA,MAAM,oBAAoB,aAAuC;EAC/D,IAAI,MAAM,WAAW,KAAK,aAAa,yBAAyB,CAAC,GAAG;GAIlE,MAAM,WAAW,MAAM,4BACrB,KAAK,aAAa,yBAAyB,CAC7C;GACA,MAAM,OAAO,MAAM,KAAK,+BAA+B,CAAC,CAAC,YAAY,IAAI;GACzE,MAAM,mBAAmB,oBAAoB,QAAQ;GACrD,MAAM,eAAe,oBAAoB,IAAI;GAC7C,IAAI,CAAC,oBAAoB,CAAC,cACxB,MAAM,IAAI,aACR,6EACA,kBACF;GAEF,OAAO,qBAAqB;EAC9B;EACA,MAAM,OAAO,MAAM,sBAAsB,WAAW;EACpD,IAAI,CAAC,MACH,OAAO;EAET,OAAO,SAAU,MAAM,sBAAsB,KAAK,SAAS;CAC7D;CAEA,MAAc,oBAAsC;EAClD,IAAI,QAAQ,IAAI,gBAAgB,KAAK,KAAK,QAAQ,IAAI,gBAAgB,KAAK,GAAG,CAG9E;EACA,MAAM,UAAU,KAAK,SAAS,MAAM;EACpC,IAAI,CAAE,MAAM,WAAW,OAAO,GAC5B,OAAO,QAAQ,QAAQ,IAAI,gBAAgB,KAAK,KAAK,QAAQ,IAAI,gBAAgB,KAAK,CAAC;EAEzF,IAAI;GACF,MAAM,MAAM,MAAM,SAAS,SAAS,MAAM;GAC1C,OAAO,oFAAoF,KACzF,GACF;EACF,QAAQ;GACN,OAAO;EACT;CACF;CAEA,MAAc,eAA4C;EACxD,OAAO,oBAAoB,KAAK,SAAS;CAC3C;CAEA,MAAc,uBAAoD;EAChE,IAAI;GACF,MAAM,eAAe,KAAK,SAAS,eAAe;GAClD,IAAI,CAAE,MAAM,WAAW,YAAY,GACjC;GAIF,MAAM,QADW,MADC,aAAsC,YAAY,EAAA,CAC/C,UACE;GACvB,OAAO,OAAO,MAAM,iBAAiB,WAAW,KAAK,eAAe,KAAA;EACtE,QAAQ;GACN;EACF;CACF;CAEA,MAAc,wBAAiE;EAC7E,IAAI;GACF,MAAM,eAAe,KAAK,SAAS,eAAe;GAClD,IAAI,CAAE,MAAM,WAAW,YAAY,GACjC,OAAO;GAGT,MAAM,YAAW,MADC,aAAsC,YAAY,EAAA,CAC/C;GACrB,IAAI,CAAC,YAAY,OAAO,aAAa,UACnC,OAAO;GAET,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE;EACrC,QAAQ;GACN,OAAO;EACT;CACF;CAEA,MAAc,kBAAkB,OAA+C;EAC7E,MAAM,eAAe,KAAK,SAAS,eAAe;EAClD,IAAI,MAA+B,CAAC;EACpC,IAAI,MAAM,WAAW,YAAY,GAC/B,IAAI;GACF,MAAM,MAAM,aAAsC,YAAY;EAChE,QAAQ;GACN,MAAM,CAAC;EACT;EAEF,IAAI,MAAM,YAAY,OAAO,MAAM,aAAa,UAAU;GACxD,MAAM,WACJ,IAAI,YAAY,OAAO,IAAI,aAAa,WACnC,IAAI,WACL,CAAC;GACP,IAAI,WAAW;IACb,GAAG;IACH,GAAI,MAAM;GACZ;EACF;EACA,MAAM,cAAc,cAAc,KAAK,GAAK;CAC9C;AACF;AAIA,IAAa,iBAAiB,IAAI,eAAe"}
@@ -0,0 +1,27 @@
1
+ export interface GrokSession {
2
+ /** Access token (JWT) sent as Bearer to cli-chat-proxy. */
3
+ accessToken: string;
4
+ refreshToken: string;
5
+ expiresAt?: string;
6
+ email?: string;
7
+ oidcIssuer: string;
8
+ oidcClientId: string;
9
+ /** Map key in auth.json (issuer::clientId). */
10
+ storageKey: string;
11
+ raw: Record<string, unknown>;
12
+ }
13
+ export interface GrokAuthFile {
14
+ [key: string]: Record<string, unknown>;
15
+ }
16
+ export declare function loadGrokSession(authPath: string): Promise<GrokSession>;
17
+ export declare function isExpired(session: GrokSession, now?: number): boolean;
18
+ /**
19
+ * Ensure a valid access token, refreshing via OIDC if needed.
20
+ * Writes refreshed tokens back to authPath so Grok CLI stays in sync.
21
+ */
22
+ export declare function ensureAccessToken(authPath: string, session?: GrokSession): Promise<{
23
+ token: string;
24
+ session: GrokSession;
25
+ }>;
26
+ export declare function refreshSession(authPath: string, session: GrokSession): Promise<GrokSession>;
27
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/providers/grok-proxy/auth.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAID,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAuC5E;AAeD,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,SAAa,GAAG,OAAO,CASzE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC,CAUlD;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBjG"}