anypick 1.0.0 → 1.1.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/README.md +16 -582
  2. package/bin/anypick.js +249 -0
  3. package/package.json +14 -106
  4. package/dist/adapters.d.ts +0 -4
  5. package/dist/adapters.d.ts.map +0 -1
  6. package/dist/adapters.js +0 -2
  7. package/dist/catalog/model-fetch.d.ts +0 -34
  8. package/dist/catalog/model-fetch.d.ts.map +0 -1
  9. package/dist/catalog/model-fetch.js +0 -99
  10. package/dist/catalog/model-fetch.js.map +0 -1
  11. package/dist/catalog/providers.d.ts +0 -42
  12. package/dist/catalog/providers.d.ts.map +0 -1
  13. package/dist/catalog/providers.js +0 -424
  14. package/dist/catalog/providers.js.map +0 -1
  15. package/dist/cli/bootstrap.d.ts +0 -3
  16. package/dist/cli/bootstrap.d.ts.map +0 -1
  17. package/dist/cli/bootstrap.js +0 -78
  18. package/dist/cli/bootstrap.js.map +0 -1
  19. package/dist/cli/commands.d.ts +0 -29
  20. package/dist/cli/commands.d.ts.map +0 -1
  21. package/dist/cli/commands.js +0 -1043
  22. package/dist/cli/commands.js.map +0 -1
  23. package/dist/cli/completion.d.ts +0 -6
  24. package/dist/cli/completion.d.ts.map +0 -1
  25. package/dist/cli/completion.js +0 -202
  26. package/dist/cli/completion.js.map +0 -1
  27. package/dist/cli/errors.d.ts +0 -20
  28. package/dist/cli/errors.d.ts.map +0 -1
  29. package/dist/cli/errors.js +0 -47
  30. package/dist/cli/errors.js.map +0 -1
  31. package/dist/cli/format.d.ts +0 -6
  32. package/dist/cli/format.d.ts.map +0 -1
  33. package/dist/cli/format.js +0 -75
  34. package/dist/cli/format.js.map +0 -1
  35. package/dist/cli/help.d.ts +0 -6
  36. package/dist/cli/help.d.ts.map +0 -1
  37. package/dist/cli/help.js +0 -66
  38. package/dist/cli/help.js.map +0 -1
  39. package/dist/cli/interactive-accounts.d.ts +0 -3
  40. package/dist/cli/interactive-accounts.d.ts.map +0 -1
  41. package/dist/cli/interactive-accounts.js +0 -86
  42. package/dist/cli/interactive-accounts.js.map +0 -1
  43. package/dist/cli/interactive-maintenance.d.ts +0 -4
  44. package/dist/cli/interactive-maintenance.d.ts.map +0 -1
  45. package/dist/cli/interactive-maintenance.js +0 -30
  46. package/dist/cli/interactive-maintenance.js.map +0 -1
  47. package/dist/cli/interactive.d.ts +0 -14
  48. package/dist/cli/interactive.d.ts.map +0 -1
  49. package/dist/cli/interactive.js +0 -242
  50. package/dist/cli/interactive.js.map +0 -1
  51. package/dist/cli/launch-client.d.ts +0 -18
  52. package/dist/cli/launch-client.d.ts.map +0 -1
  53. package/dist/cli/launch-client.js +0 -117
  54. package/dist/cli/launch-client.js.map +0 -1
  55. package/dist/cli/launcher-model.d.ts +0 -64
  56. package/dist/cli/launcher-model.d.ts.map +0 -1
  57. package/dist/cli/launcher-model.js +0 -200
  58. package/dist/cli/launcher-model.js.map +0 -1
  59. package/dist/cli/launcher-render.d.ts +0 -22
  60. package/dist/cli/launcher-render.d.ts.map +0 -1
  61. package/dist/cli/launcher-render.js +0 -113
  62. package/dist/cli/launcher-render.js.map +0 -1
  63. package/dist/cli/launcher.d.ts +0 -27
  64. package/dist/cli/launcher.d.ts.map +0 -1
  65. package/dist/cli/launcher.js +0 -93
  66. package/dist/cli/launcher.js.map +0 -1
  67. package/dist/cli/local-health.d.ts +0 -17
  68. package/dist/cli/local-health.d.ts.map +0 -1
  69. package/dist/cli/local-health.js +0 -31
  70. package/dist/cli/local-health.js.map +0 -1
  71. package/dist/cli/plugin-commands.d.ts +0 -4
  72. package/dist/cli/plugin-commands.d.ts.map +0 -1
  73. package/dist/cli/plugin-commands.js +0 -160
  74. package/dist/cli/plugin-commands.js.map +0 -1
  75. package/dist/cli/primary.d.ts +0 -18
  76. package/dist/cli/primary.d.ts.map +0 -1
  77. package/dist/cli/primary.js +0 -593
  78. package/dist/cli/primary.js.map +0 -1
  79. package/dist/cli/render-util.d.ts +0 -24
  80. package/dist/cli/render-util.d.ts.map +0 -1
  81. package/dist/cli/render-util.js +0 -58
  82. package/dist/cli/render-util.js.map +0 -1
  83. package/dist/cli/ux.d.ts +0 -43
  84. package/dist/cli/ux.d.ts.map +0 -1
  85. package/dist/cli/ux.js +0 -114
  86. package/dist/cli/ux.js.map +0 -1
  87. package/dist/cli.d.ts +0 -3
  88. package/dist/cli.d.ts.map +0 -1
  89. package/dist/cli.js +0 -35
  90. package/dist/cli.js.map +0 -1
  91. package/dist/clients/claude-client-apply.d.ts +0 -8
  92. package/dist/clients/claude-client-apply.d.ts.map +0 -1
  93. package/dist/clients/claude-client-apply.js +0 -108
  94. package/dist/clients/claude-client-apply.js.map +0 -1
  95. package/dist/clients/claude-code.d.ts +0 -5
  96. package/dist/clients/claude-code.d.ts.map +0 -1
  97. package/dist/clients/claude-code.js +0 -189
  98. package/dist/clients/claude-code.js.map +0 -1
  99. package/dist/clients/claude-settings-guard.d.ts +0 -18
  100. package/dist/clients/claude-settings-guard.d.ts.map +0 -1
  101. package/dist/clients/codex-desktop-catalog.d.ts +0 -67
  102. package/dist/clients/codex-desktop-catalog.d.ts.map +0 -1
  103. package/dist/clients/codex-desktop-catalog.js +0 -212
  104. package/dist/clients/codex-desktop-catalog.js.map +0 -1
  105. package/dist/clients/codex.d.ts +0 -181
  106. package/dist/clients/codex.d.ts.map +0 -1
  107. package/dist/clients/codex.js +0 -783
  108. package/dist/clients/codex.js.map +0 -1
  109. package/dist/clients/env-files.d.ts +0 -14
  110. package/dist/clients/env-files.d.ts.map +0 -1
  111. package/dist/clients/env-files.js +0 -50
  112. package/dist/clients/env-files.js.map +0 -1
  113. package/dist/clients/gemini-client-utils.d.ts +0 -4
  114. package/dist/clients/gemini-client-utils.d.ts.map +0 -1
  115. package/dist/clients/gemini-client-utils.js +0 -33
  116. package/dist/clients/gemini-client-utils.js.map +0 -1
  117. package/dist/clients/gemini.d.ts +0 -16
  118. package/dist/clients/gemini.d.ts.map +0 -1
  119. package/dist/clients/gemini.js +0 -233
  120. package/dist/clients/gemini.js.map +0 -1
  121. package/dist/clients/index.d.ts +0 -14
  122. package/dist/clients/index.d.ts.map +0 -1
  123. package/dist/clients/index.js +0 -18
  124. package/dist/clients/index.js.map +0 -1
  125. package/dist/clients/isolation.d.ts +0 -28
  126. package/dist/clients/isolation.d.ts.map +0 -1
  127. package/dist/clients/isolation.js +0 -131
  128. package/dist/clients/isolation.js.map +0 -1
  129. package/dist/clients/kiro.d.ts +0 -10
  130. package/dist/clients/kiro.d.ts.map +0 -1
  131. package/dist/clients/kiro.js +0 -168
  132. package/dist/clients/kiro.js.map +0 -1
  133. package/dist/clients/model-roles.d.ts +0 -58
  134. package/dist/clients/model-roles.d.ts.map +0 -1
  135. package/dist/clients/model-roles.js +0 -139
  136. package/dist/clients/model-roles.js.map +0 -1
  137. package/dist/clients/registry.d.ts +0 -7
  138. package/dist/clients/registry.d.ts.map +0 -1
  139. package/dist/clients/registry.js +0 -16
  140. package/dist/clients/registry.js.map +0 -1
  141. package/dist/clients/resolve.d.ts +0 -27
  142. package/dist/clients/resolve.d.ts.map +0 -1
  143. package/dist/clients/resolve.js +0 -49
  144. package/dist/clients/resolve.js.map +0 -1
  145. package/dist/core/account-codec.d.ts +0 -32
  146. package/dist/core/account-codec.d.ts.map +0 -1
  147. package/dist/core/account-codec.js +0 -134
  148. package/dist/core/account-codec.js.map +0 -1
  149. package/dist/core/account-transfer.d.ts +0 -20
  150. package/dist/core/account-transfer.d.ts.map +0 -1
  151. package/dist/core/account-transfer.js +0 -136
  152. package/dist/core/account-transfer.js.map +0 -1
  153. package/dist/core/activation-executor.d.ts +0 -72
  154. package/dist/core/activation-executor.d.ts.map +0 -1
  155. package/dist/core/activation-executor.js +0 -690
  156. package/dist/core/activation-executor.js.map +0 -1
  157. package/dist/core/activation-models.d.ts +0 -6
  158. package/dist/core/activation-models.d.ts.map +0 -1
  159. package/dist/core/activation-models.js +0 -33
  160. package/dist/core/activation-models.js.map +0 -1
  161. package/dist/core/activation-planner.d.ts +0 -38
  162. package/dist/core/activation-planner.d.ts.map +0 -1
  163. package/dist/core/activation-planner.js +0 -248
  164. package/dist/core/activation-planner.js.map +0 -1
  165. package/dist/core/activation-protocol.d.ts +0 -3
  166. package/dist/core/activation-protocol.d.ts.map +0 -1
  167. package/dist/core/activation-protocol.js +0 -9
  168. package/dist/core/activation-protocol.js.map +0 -1
  169. package/dist/core/activation-transport.d.ts +0 -15
  170. package/dist/core/activation-transport.d.ts.map +0 -1
  171. package/dist/core/activation-transport.js +0 -23
  172. package/dist/core/activation-transport.js.map +0 -1
  173. package/dist/core/app.d.ts +0 -149
  174. package/dist/core/app.d.ts.map +0 -1
  175. package/dist/core/app.js +0 -372
  176. package/dist/core/app.js.map +0 -1
  177. package/dist/core/binding-service.d.ts +0 -93
  178. package/dist/core/binding-service.d.ts.map +0 -1
  179. package/dist/core/binding-service.js +0 -281
  180. package/dist/core/binding-service.js.map +0 -1
  181. package/dist/core/binding-store.d.ts +0 -23
  182. package/dist/core/binding-store.d.ts.map +0 -1
  183. package/dist/core/binding-store.js +0 -154
  184. package/dist/core/binding-store.js.map +0 -1
  185. package/dist/core/brand.d.ts +0 -18
  186. package/dist/core/brand.d.ts.map +0 -1
  187. package/dist/core/brand.js +0 -22
  188. package/dist/core/brand.js.map +0 -1
  189. package/dist/core/capabilities.d.ts +0 -30
  190. package/dist/core/capabilities.d.ts.map +0 -1
  191. package/dist/core/capabilities.js +0 -27
  192. package/dist/core/capabilities.js.map +0 -1
  193. package/dist/core/client-state-store.d.ts +0 -17
  194. package/dist/core/client-state-store.d.ts.map +0 -1
  195. package/dist/core/client-state-store.js +0 -47
  196. package/dist/core/client-state-store.js.map +0 -1
  197. package/dist/core/codec/account.d.ts +0 -52
  198. package/dist/core/codec/account.d.ts.map +0 -1
  199. package/dist/core/codec/account.js +0 -69
  200. package/dist/core/codec/account.js.map +0 -1
  201. package/dist/core/codec/bindings.d.ts +0 -38
  202. package/dist/core/codec/bindings.d.ts.map +0 -1
  203. package/dist/core/codec/bindings.js +0 -79
  204. package/dist/core/codec/bindings.js.map +0 -1
  205. package/dist/core/codec/operations.d.ts +0 -36
  206. package/dist/core/codec/operations.d.ts.map +0 -1
  207. package/dist/core/codec/operations.js +0 -82
  208. package/dist/core/codec/operations.js.map +0 -1
  209. package/dist/core/codec/primitives.d.ts +0 -59
  210. package/dist/core/codec/primitives.d.ts.map +0 -1
  211. package/dist/core/codec/primitives.js +0 -123
  212. package/dist/core/codec/primitives.js.map +0 -1
  213. package/dist/core/codec/proxy-hub.d.ts +0 -43
  214. package/dist/core/codec/proxy-hub.d.ts.map +0 -1
  215. package/dist/core/codec/proxy-hub.js +0 -69
  216. package/dist/core/codec/proxy-hub.js.map +0 -1
  217. package/dist/core/codec/runtime.d.ts +0 -41
  218. package/dist/core/codec/runtime.d.ts.map +0 -1
  219. package/dist/core/codec/runtime.js +0 -66
  220. package/dist/core/codec/runtime.js.map +0 -1
  221. package/dist/core/codec.d.ts +0 -43
  222. package/dist/core/codec.d.ts.map +0 -1
  223. package/dist/core/codec.js +0 -69
  224. package/dist/core/codec.js.map +0 -1
  225. package/dist/core/codex-live-config.d.ts +0 -92
  226. package/dist/core/codex-live-config.d.ts.map +0 -1
  227. package/dist/core/codex-live-config.js +0 -263
  228. package/dist/core/codex-live-config.js.map +0 -1
  229. package/dist/core/config-service.d.ts +0 -35
  230. package/dist/core/config-service.d.ts.map +0 -1
  231. package/dist/core/config-service.js +0 -87
  232. package/dist/core/config-service.js.map +0 -1
  233. package/dist/core/config.d.ts +0 -14
  234. package/dist/core/config.d.ts.map +0 -1
  235. package/dist/core/config.js +0 -45
  236. package/dist/core/config.js.map +0 -1
  237. package/dist/core/db-schema.d.ts +0 -30
  238. package/dist/core/db-schema.d.ts.map +0 -1
  239. package/dist/core/db-schema.js +0 -278
  240. package/dist/core/db-schema.js.map +0 -1
  241. package/dist/core/db.d.ts +0 -72
  242. package/dist/core/db.d.ts.map +0 -1
  243. package/dist/core/db.js +0 -192
  244. package/dist/core/db.js.map +0 -1
  245. package/dist/core/doctor-fixes.d.ts +0 -3
  246. package/dist/core/doctor-fixes.d.ts.map +0 -1
  247. package/dist/core/doctor-fixes.js +0 -102
  248. package/dist/core/doctor-fixes.js.map +0 -1
  249. package/dist/core/doctor-format.d.ts +0 -10
  250. package/dist/core/doctor-format.d.ts.map +0 -1
  251. package/dist/core/doctor-format.js +0 -45
  252. package/dist/core/doctor-format.js.map +0 -1
  253. package/dist/core/doctor-report.d.ts +0 -3
  254. package/dist/core/doctor-report.d.ts.map +0 -1
  255. package/dist/core/doctor-report.js +0 -174
  256. package/dist/core/doctor-report.js.map +0 -1
  257. package/dist/core/doctor-scan.d.ts +0 -7
  258. package/dist/core/doctor-scan.d.ts.map +0 -1
  259. package/dist/core/doctor-scan.js +0 -139
  260. package/dist/core/doctor-scan.js.map +0 -1
  261. package/dist/core/doctor-types.d.ts +0 -89
  262. package/dist/core/doctor-types.d.ts.map +0 -1
  263. package/dist/core/doctor-types.js +0 -14
  264. package/dist/core/doctor-types.js.map +0 -1
  265. package/dist/core/doctor-utils.d.ts +0 -3
  266. package/dist/core/doctor-utils.d.ts.map +0 -1
  267. package/dist/core/doctor-utils.js +0 -36
  268. package/dist/core/doctor-utils.js.map +0 -1
  269. package/dist/core/doctor.d.ts +0 -14
  270. package/dist/core/doctor.d.ts.map +0 -1
  271. package/dist/core/doctor.js +0 -127
  272. package/dist/core/doctor.js.map +0 -1
  273. package/dist/core/events.d.ts +0 -58
  274. package/dist/core/events.d.ts.map +0 -1
  275. package/dist/core/events.js +0 -88
  276. package/dist/core/events.js.map +0 -1
  277. package/dist/core/journal.d.ts +0 -23
  278. package/dist/core/journal.d.ts.map +0 -1
  279. package/dist/core/journal.js +0 -93
  280. package/dist/core/journal.js.map +0 -1
  281. package/dist/core/lease-store.d.ts +0 -22
  282. package/dist/core/lease-store.d.ts.map +0 -1
  283. package/dist/core/lease-store.js +0 -81
  284. package/dist/core/lease-store.js.map +0 -1
  285. package/dist/core/migrate-bindings.d.ts +0 -10
  286. package/dist/core/migrate-bindings.d.ts.map +0 -1
  287. package/dist/core/migrate-bindings.js +0 -98
  288. package/dist/core/migrate-bindings.js.map +0 -1
  289. package/dist/core/migrate-fs.d.ts +0 -11
  290. package/dist/core/migrate-fs.d.ts.map +0 -1
  291. package/dist/core/migrate-fs.js +0 -184
  292. package/dist/core/migrate-fs.js.map +0 -1
  293. package/dist/core/model-cache-store.d.ts +0 -27
  294. package/dist/core/model-cache-store.d.ts.map +0 -1
  295. package/dist/core/model-cache-store.js +0 -50
  296. package/dist/core/model-cache-store.js.map +0 -1
  297. package/dist/core/model-discovery.d.ts +0 -66
  298. package/dist/core/model-discovery.d.ts.map +0 -1
  299. package/dist/core/model-discovery.js +0 -127
  300. package/dist/core/model-discovery.js.map +0 -1
  301. package/dist/core/model-policy.d.ts +0 -40
  302. package/dist/core/model-policy.d.ts.map +0 -1
  303. package/dist/core/model-policy.js +0 -77
  304. package/dist/core/model-policy.js.map +0 -1
  305. package/dist/core/model-roles.d.ts +0 -9
  306. package/dist/core/model-roles.d.ts.map +0 -1
  307. package/dist/core/model-roles.js +0 -20
  308. package/dist/core/model-roles.js.map +0 -1
  309. package/dist/core/mutation-lock.d.ts +0 -31
  310. package/dist/core/mutation-lock.d.ts.map +0 -1
  311. package/dist/core/mutation-lock.js +0 -69
  312. package/dist/core/mutation-lock.js.map +0 -1
  313. package/dist/core/paths.d.ts +0 -49
  314. package/dist/core/paths.d.ts.map +0 -1
  315. package/dist/core/paths.js +0 -110
  316. package/dist/core/paths.js.map +0 -1
  317. package/dist/core/plugin-loader.d.ts +0 -40
  318. package/dist/core/plugin-loader.d.ts.map +0 -1
  319. package/dist/core/plugin-loader.js +0 -184
  320. package/dist/core/plugin-loader.js.map +0 -1
  321. package/dist/core/plugin-service.d.ts +0 -32
  322. package/dist/core/plugin-service.d.ts.map +0 -1
  323. package/dist/core/plugin-service.js +0 -110
  324. package/dist/core/plugin-service.js.map +0 -1
  325. package/dist/core/plugin-store.d.ts +0 -18
  326. package/dist/core/plugin-store.d.ts.map +0 -1
  327. package/dist/core/plugin-store.js +0 -50
  328. package/dist/core/plugin-store.js.map +0 -1
  329. package/dist/core/pool-store.d.ts +0 -44
  330. package/dist/core/pool-store.d.ts.map +0 -1
  331. package/dist/core/pool-store.js +0 -198
  332. package/dist/core/pool-store.js.map +0 -1
  333. package/dist/core/preset-store.d.ts +0 -29
  334. package/dist/core/preset-store.d.ts.map +0 -1
  335. package/dist/core/preset-store.js +0 -105
  336. package/dist/core/preset-store.js.map +0 -1
  337. package/dist/core/profile-service.d.ts +0 -50
  338. package/dist/core/profile-service.d.ts.map +0 -1
  339. package/dist/core/profile-service.js +0 -149
  340. package/dist/core/profile-service.js.map +0 -1
  341. package/dist/core/profile-store.d.ts +0 -20
  342. package/dist/core/profile-store.d.ts.map +0 -1
  343. package/dist/core/profile-store.js +0 -92
  344. package/dist/core/profile-store.js.map +0 -1
  345. package/dist/core/profile-synth.d.ts +0 -24
  346. package/dist/core/profile-synth.d.ts.map +0 -1
  347. package/dist/core/profile-synth.js +0 -30
  348. package/dist/core/profile-synth.js.map +0 -1
  349. package/dist/core/project-root.d.ts +0 -7
  350. package/dist/core/project-root.d.ts.map +0 -1
  351. package/dist/core/project-root.js +0 -23
  352. package/dist/core/project-root.js.map +0 -1
  353. package/dist/core/proxy-hub-cli.d.ts +0 -3
  354. package/dist/core/proxy-hub-cli.d.ts.map +0 -1
  355. package/dist/core/proxy-hub-cli.js +0 -80
  356. package/dist/core/proxy-hub-cli.js.map +0 -1
  357. package/dist/core/proxy-hub-routes.d.ts +0 -22
  358. package/dist/core/proxy-hub-routes.d.ts.map +0 -1
  359. package/dist/core/proxy-hub-routes.js +0 -92
  360. package/dist/core/proxy-hub-routes.js.map +0 -1
  361. package/dist/core/proxy-hub-server.d.ts +0 -59
  362. package/dist/core/proxy-hub-server.d.ts.map +0 -1
  363. package/dist/core/proxy-hub-server.js +0 -409
  364. package/dist/core/proxy-hub-server.js.map +0 -1
  365. package/dist/core/proxy-hub-service.d.ts +0 -97
  366. package/dist/core/proxy-hub-service.d.ts.map +0 -1
  367. package/dist/core/proxy-hub-service.js +0 -553
  368. package/dist/core/proxy-hub-service.js.map +0 -1
  369. package/dist/core/proxy-hub-store.d.ts +0 -28
  370. package/dist/core/proxy-hub-store.d.ts.map +0 -1
  371. package/dist/core/proxy-hub-store.js +0 -152
  372. package/dist/core/proxy-hub-store.js.map +0 -1
  373. package/dist/core/proxy-lifecycle.d.ts +0 -26
  374. package/dist/core/proxy-lifecycle.d.ts.map +0 -1
  375. package/dist/core/proxy-lifecycle.js +0 -33
  376. package/dist/core/proxy-lifecycle.js.map +0 -1
  377. package/dist/core/proxy-ports.d.ts +0 -50
  378. package/dist/core/proxy-ports.d.ts.map +0 -1
  379. package/dist/core/proxy-ports.js +0 -86
  380. package/dist/core/proxy-ports.js.map +0 -1
  381. package/dist/core/proxy-service.d.ts +0 -184
  382. package/dist/core/proxy-service.d.ts.map +0 -1
  383. package/dist/core/proxy-service.js +0 -860
  384. package/dist/core/proxy-service.js.map +0 -1
  385. package/dist/core/quota-guard-policy.d.ts +0 -8
  386. package/dist/core/quota-guard-policy.d.ts.map +0 -1
  387. package/dist/core/quota-guard-policy.js +0 -21
  388. package/dist/core/quota-guard-policy.js.map +0 -1
  389. package/dist/core/realign-proxy-clients.d.ts +0 -19
  390. package/dist/core/realign-proxy-clients.d.ts.map +0 -1
  391. package/dist/core/realign-proxy-clients.js +0 -40
  392. package/dist/core/realign-proxy-clients.js.map +0 -1
  393. package/dist/core/refs.d.ts +0 -84
  394. package/dist/core/refs.d.ts.map +0 -1
  395. package/dist/core/refs.js +0 -250
  396. package/dist/core/refs.js.map +0 -1
  397. package/dist/core/registry.d.ts +0 -46
  398. package/dist/core/registry.d.ts.map +0 -1
  399. package/dist/core/registry.js +0 -70
  400. package/dist/core/registry.js.map +0 -1
  401. package/dist/core/resolve-source.d.ts +0 -54
  402. package/dist/core/resolve-source.d.ts.map +0 -1
  403. package/dist/core/resolve-source.js +0 -148
  404. package/dist/core/resolve-source.js.map +0 -1
  405. package/dist/core/runtime-service.d.ts +0 -158
  406. package/dist/core/runtime-service.d.ts.map +0 -1
  407. package/dist/core/runtime-service.js +0 -422
  408. package/dist/core/runtime-service.js.map +0 -1
  409. package/dist/core/service.d.ts +0 -200
  410. package/dist/core/service.d.ts.map +0 -1
  411. package/dist/core/service.js +0 -643
  412. package/dist/core/service.js.map +0 -1
  413. package/dist/core/store-snapshot.d.ts +0 -10
  414. package/dist/core/store-snapshot.d.ts.map +0 -1
  415. package/dist/core/store-snapshot.js +0 -79
  416. package/dist/core/store-snapshot.js.map +0 -1
  417. package/dist/core/store.d.ts +0 -68
  418. package/dist/core/store.d.ts.map +0 -1
  419. package/dist/core/store.js +0 -159
  420. package/dist/core/store.js.map +0 -1
  421. package/dist/core/tray-runtime.d.ts +0 -15
  422. package/dist/core/tray-runtime.d.ts.map +0 -1
  423. package/dist/core/tray-runtime.js +0 -33
  424. package/dist/core/tray-runtime.js.map +0 -1
  425. package/dist/core/tray-settings-service.d.ts +0 -7
  426. package/dist/core/tray-settings-service.d.ts.map +0 -1
  427. package/dist/core/tray-settings-service.js +0 -24
  428. package/dist/core/tray-settings-service.js.map +0 -1
  429. package/dist/core/update.d.ts +0 -26
  430. package/dist/core/update.d.ts.map +0 -1
  431. package/dist/core/update.js +0 -128
  432. package/dist/core/update.js.map +0 -1
  433. package/dist/index.d.ts +0 -12
  434. package/dist/index.d.ts.map +0 -1
  435. package/dist/index.js +0 -7
  436. package/dist/network/egress/allowlist.d.ts +0 -2
  437. package/dist/network/egress/allowlist.d.ts.map +0 -1
  438. package/dist/network/egress/allowlist.js +0 -14
  439. package/dist/network/egress/allowlist.js.map +0 -1
  440. package/dist/network/egress/direct.d.ts +0 -17
  441. package/dist/network/egress/direct.d.ts.map +0 -1
  442. package/dist/network/egress/direct.js +0 -28
  443. package/dist/network/egress/direct.js.map +0 -1
  444. package/dist/network/egress/errors.d.ts +0 -4
  445. package/dist/network/egress/errors.d.ts.map +0 -1
  446. package/dist/network/egress/errors.js +0 -8
  447. package/dist/network/egress/errors.js.map +0 -1
  448. package/dist/network/egress/index.d.ts +0 -6
  449. package/dist/network/egress/index.d.ts.map +0 -1
  450. package/dist/network/egress/index.js +0 -11
  451. package/dist/network/egress/index.js.map +0 -1
  452. package/dist/network/egress/types.d.ts +0 -16
  453. package/dist/network/egress/types.d.ts.map +0 -1
  454. package/dist/presentation/client-name.d.ts +0 -14
  455. package/dist/presentation/client-name.d.ts.map +0 -1
  456. package/dist/presentation/client-name.js +0 -22
  457. package/dist/presentation/client-name.js.map +0 -1
  458. package/dist/presentation/layout.d.ts +0 -7
  459. package/dist/presentation/layout.d.ts.map +0 -1
  460. package/dist/presentation/layout.js +0 -10
  461. package/dist/presentation/layout.js.map +0 -1
  462. package/dist/providers/auth-fingerprint.d.ts +0 -56
  463. package/dist/providers/auth-fingerprint.d.ts.map +0 -1
  464. package/dist/providers/auth-fingerprint.js +0 -163
  465. package/dist/providers/auth-fingerprint.js.map +0 -1
  466. package/dist/providers/claude.d.ts +0 -43
  467. package/dist/providers/claude.d.ts.map +0 -1
  468. package/dist/providers/claude.js +0 -191
  469. package/dist/providers/claude.js.map +0 -1
  470. package/dist/providers/codex-identity.d.ts +0 -13
  471. package/dist/providers/codex-identity.d.ts.map +0 -1
  472. package/dist/providers/codex-identity.js +0 -69
  473. package/dist/providers/codex-identity.js.map +0 -1
  474. package/dist/providers/codex-refresh.d.ts +0 -30
  475. package/dist/providers/codex-refresh.d.ts.map +0 -1
  476. package/dist/providers/codex-refresh.js +0 -64
  477. package/dist/providers/codex-refresh.js.map +0 -1
  478. package/dist/providers/codex-usage.d.ts +0 -3
  479. package/dist/providers/codex-usage.d.ts.map +0 -1
  480. package/dist/providers/codex-usage.js +0 -42
  481. package/dist/providers/codex-usage.js.map +0 -1
  482. package/dist/providers/codex.d.ts +0 -61
  483. package/dist/providers/codex.d.ts.map +0 -1
  484. package/dist/providers/codex.js +0 -212
  485. package/dist/providers/codex.js.map +0 -1
  486. package/dist/providers/gemini-antigravity-oauth.d.ts +0 -83
  487. package/dist/providers/gemini-antigravity-oauth.d.ts.map +0 -1
  488. package/dist/providers/gemini-antigravity-oauth.js +0 -343
  489. package/dist/providers/gemini-antigravity-oauth.js.map +0 -1
  490. package/dist/providers/gemini-antigravity-state.d.ts +0 -35
  491. package/dist/providers/gemini-antigravity-state.d.ts.map +0 -1
  492. package/dist/providers/gemini-antigravity-state.js +0 -433
  493. package/dist/providers/gemini-antigravity-state.js.map +0 -1
  494. package/dist/providers/gemini-env.d.ts +0 -8
  495. package/dist/providers/gemini-env.d.ts.map +0 -1
  496. package/dist/providers/gemini-env.js +0 -78
  497. package/dist/providers/gemini-env.js.map +0 -1
  498. package/dist/providers/gemini-identity.d.ts +0 -2
  499. package/dist/providers/gemini-identity.d.ts.map +0 -1
  500. package/dist/providers/gemini-identity.js +0 -14
  501. package/dist/providers/gemini-identity.js.map +0 -1
  502. package/dist/providers/gemini-proxy/main.d.ts +0 -3
  503. package/dist/providers/gemini-proxy/main.d.ts.map +0 -1
  504. package/dist/providers/gemini-proxy/main.js +0 -176
  505. package/dist/providers/gemini-proxy/main.js.map +0 -1
  506. package/dist/providers/gemini-proxy/server.d.ts +0 -57
  507. package/dist/providers/gemini-proxy/server.d.ts.map +0 -1
  508. package/dist/providers/gemini-proxy/server.js +0 -1240
  509. package/dist/providers/gemini-proxy/server.js.map +0 -1
  510. package/dist/providers/gemini-proxy-entry.d.ts +0 -2
  511. package/dist/providers/gemini-proxy-entry.d.ts.map +0 -1
  512. package/dist/providers/gemini-proxy-entry.js +0 -16
  513. package/dist/providers/gemini-proxy-entry.js.map +0 -1
  514. package/dist/providers/gemini-proxy-lifecycle.d.ts +0 -11
  515. package/dist/providers/gemini-proxy-lifecycle.d.ts.map +0 -1
  516. package/dist/providers/gemini-proxy-lifecycle.js +0 -131
  517. package/dist/providers/gemini-proxy-lifecycle.js.map +0 -1
  518. package/dist/providers/gemini.d.ts +0 -137
  519. package/dist/providers/gemini.d.ts.map +0 -1
  520. package/dist/providers/gemini.js +0 -471
  521. package/dist/providers/gemini.js.map +0 -1
  522. package/dist/providers/grok-proxy/auth.d.ts +0 -27
  523. package/dist/providers/grok-proxy/auth.d.ts.map +0 -1
  524. package/dist/providers/grok-proxy/auth.js +0 -123
  525. package/dist/providers/grok-proxy/auth.js.map +0 -1
  526. package/dist/providers/grok-proxy/main.d.ts +0 -3
  527. package/dist/providers/grok-proxy/main.d.ts.map +0 -1
  528. package/dist/providers/grok-proxy/main.js +0 -111
  529. package/dist/providers/grok-proxy/main.js.map +0 -1
  530. package/dist/providers/grok-proxy/server.d.ts +0 -46
  531. package/dist/providers/grok-proxy/server.d.ts.map +0 -1
  532. package/dist/providers/grok-proxy/server.js +0 -595
  533. package/dist/providers/grok-proxy/server.js.map +0 -1
  534. package/dist/providers/grok.d.ts +0 -38
  535. package/dist/providers/grok.d.ts.map +0 -1
  536. package/dist/providers/grok.js +0 -250
  537. package/dist/providers/grok.js.map +0 -1
  538. package/dist/providers/index.d.ts +0 -14
  539. package/dist/providers/index.d.ts.map +0 -1
  540. package/dist/providers/index.js +0 -23
  541. package/dist/providers/index.js.map +0 -1
  542. package/dist/providers/kiro-secret-store.d.ts +0 -39
  543. package/dist/providers/kiro-secret-store.d.ts.map +0 -1
  544. package/dist/providers/kiro-secret-store.js +0 -168
  545. package/dist/providers/kiro-secret-store.js.map +0 -1
  546. package/dist/providers/kiro.d.ts +0 -50
  547. package/dist/providers/kiro.d.ts.map +0 -1
  548. package/dist/providers/kiro.js +0 -373
  549. package/dist/providers/kiro.js.map +0 -1
  550. package/dist/providers/model-policy.d.ts +0 -15
  551. package/dist/providers/model-policy.d.ts.map +0 -1
  552. package/dist/providers/model-policy.js +0 -26
  553. package/dist/providers/model-policy.js.map +0 -1
  554. package/dist/providers/opencode-auth.d.ts +0 -67
  555. package/dist/providers/opencode-auth.d.ts.map +0 -1
  556. package/dist/providers/opencode-auth.js +0 -146
  557. package/dist/providers/opencode-auth.js.map +0 -1
  558. package/dist/providers/opencode-cli-entry.d.ts +0 -36
  559. package/dist/providers/opencode-cli-entry.d.ts.map +0 -1
  560. package/dist/providers/opencode-cli-entry.js +0 -90
  561. package/dist/providers/opencode-cli-entry.js.map +0 -1
  562. package/dist/providers/opencode-proxy/abort.d.ts +0 -8
  563. package/dist/providers/opencode-proxy/abort.d.ts.map +0 -1
  564. package/dist/providers/opencode-proxy/abort.js +0 -42
  565. package/dist/providers/opencode-proxy/abort.js.map +0 -1
  566. package/dist/providers/opencode-proxy/anthropic-handler.d.ts +0 -4
  567. package/dist/providers/opencode-proxy/anthropic-handler.d.ts.map +0 -1
  568. package/dist/providers/opencode-proxy/anthropic-handler.js +0 -108
  569. package/dist/providers/opencode-proxy/anthropic-handler.js.map +0 -1
  570. package/dist/providers/opencode-proxy/auth.d.ts +0 -38
  571. package/dist/providers/opencode-proxy/auth.d.ts.map +0 -1
  572. package/dist/providers/opencode-proxy/auth.js +0 -128
  573. package/dist/providers/opencode-proxy/auth.js.map +0 -1
  574. package/dist/providers/opencode-proxy/body.d.ts +0 -9
  575. package/dist/providers/opencode-proxy/body.d.ts.map +0 -1
  576. package/dist/providers/opencode-proxy/body.js +0 -69
  577. package/dist/providers/opencode-proxy/body.js.map +0 -1
  578. package/dist/providers/opencode-proxy/catalog-handlers.d.ts +0 -7
  579. package/dist/providers/opencode-proxy/catalog-handlers.d.ts.map +0 -1
  580. package/dist/providers/opencode-proxy/catalog-handlers.js +0 -132
  581. package/dist/providers/opencode-proxy/catalog-handlers.js.map +0 -1
  582. package/dist/providers/opencode-proxy/catalog.d.ts +0 -41
  583. package/dist/providers/opencode-proxy/catalog.d.ts.map +0 -1
  584. package/dist/providers/opencode-proxy/catalog.js +0 -146
  585. package/dist/providers/opencode-proxy/catalog.js.map +0 -1
  586. package/dist/providers/opencode-proxy/cli.d.ts +0 -2
  587. package/dist/providers/opencode-proxy/cli.d.ts.map +0 -1
  588. package/dist/providers/opencode-proxy/cli.js +0 -162
  589. package/dist/providers/opencode-proxy/cli.js.map +0 -1
  590. package/dist/providers/opencode-proxy/constants.d.ts +0 -13
  591. package/dist/providers/opencode-proxy/constants.d.ts.map +0 -1
  592. package/dist/providers/opencode-proxy/constants.js +0 -15
  593. package/dist/providers/opencode-proxy/constants.js.map +0 -1
  594. package/dist/providers/opencode-proxy/context-budget.d.ts +0 -31
  595. package/dist/providers/opencode-proxy/context-budget.d.ts.map +0 -1
  596. package/dist/providers/opencode-proxy/context-budget.js +0 -165
  597. package/dist/providers/opencode-proxy/context-budget.js.map +0 -1
  598. package/dist/providers/opencode-proxy/errors.d.ts +0 -5
  599. package/dist/providers/opencode-proxy/errors.d.ts.map +0 -1
  600. package/dist/providers/opencode-proxy/errors.js +0 -45
  601. package/dist/providers/opencode-proxy/errors.js.map +0 -1
  602. package/dist/providers/opencode-proxy/forwarders.d.ts +0 -7
  603. package/dist/providers/opencode-proxy/forwarders.d.ts.map +0 -1
  604. package/dist/providers/opencode-proxy/forwarders.js +0 -214
  605. package/dist/providers/opencode-proxy/forwarders.js.map +0 -1
  606. package/dist/providers/opencode-proxy/http.d.ts +0 -11
  607. package/dist/providers/opencode-proxy/http.d.ts.map +0 -1
  608. package/dist/providers/opencode-proxy/http.js +0 -97
  609. package/dist/providers/opencode-proxy/http.js.map +0 -1
  610. package/dist/providers/opencode-proxy/models.d.ts +0 -42
  611. package/dist/providers/opencode-proxy/models.d.ts.map +0 -1
  612. package/dist/providers/opencode-proxy/models.js +0 -148
  613. package/dist/providers/opencode-proxy/models.js.map +0 -1
  614. package/dist/providers/opencode-proxy/openai-handler.d.ts +0 -5
  615. package/dist/providers/opencode-proxy/openai-handler.d.ts.map +0 -1
  616. package/dist/providers/opencode-proxy/openai-handler.js +0 -115
  617. package/dist/providers/opencode-proxy/openai-handler.js.map +0 -1
  618. package/dist/providers/opencode-proxy/router.d.ts +0 -4
  619. package/dist/providers/opencode-proxy/router.d.ts.map +0 -1
  620. package/dist/providers/opencode-proxy/router.js +0 -65
  621. package/dist/providers/opencode-proxy/router.js.map +0 -1
  622. package/dist/providers/opencode-proxy/runtime.d.ts +0 -23
  623. package/dist/providers/opencode-proxy/runtime.d.ts.map +0 -1
  624. package/dist/providers/opencode-proxy/runtime.js +0 -158
  625. package/dist/providers/opencode-proxy/runtime.js.map +0 -1
  626. package/dist/providers/opencode-proxy/server.d.ts +0 -13
  627. package/dist/providers/opencode-proxy/server.d.ts.map +0 -1
  628. package/dist/providers/opencode-proxy/server.js +0 -52
  629. package/dist/providers/opencode-proxy/server.js.map +0 -1
  630. package/dist/providers/opencode-proxy/stream.d.ts +0 -4
  631. package/dist/providers/opencode-proxy/stream.d.ts.map +0 -1
  632. package/dist/providers/opencode-proxy/stream.js +0 -71
  633. package/dist/providers/opencode-proxy/stream.js.map +0 -1
  634. package/dist/providers/opencode-proxy/translate-stream.d.ts +0 -3
  635. package/dist/providers/opencode-proxy/translate-stream.d.ts.map +0 -1
  636. package/dist/providers/opencode-proxy/translate-stream.js +0 -205
  637. package/dist/providers/opencode-proxy/translate-stream.js.map +0 -1
  638. package/dist/providers/opencode-proxy/translate.d.ts +0 -11
  639. package/dist/providers/opencode-proxy/translate.d.ts.map +0 -1
  640. package/dist/providers/opencode-proxy/translate.js +0 -250
  641. package/dist/providers/opencode-proxy/translate.js.map +0 -1
  642. package/dist/providers/opencode-proxy/types.d.ts +0 -110
  643. package/dist/providers/opencode-proxy/types.d.ts.map +0 -1
  644. package/dist/providers/opencode-proxy/types.js +0 -38
  645. package/dist/providers/opencode-proxy/types.js.map +0 -1
  646. package/dist/providers/opencode-proxy-lifecycle.d.ts +0 -11
  647. package/dist/providers/opencode-proxy-lifecycle.d.ts.map +0 -1
  648. package/dist/providers/opencode-proxy-lifecycle.js +0 -144
  649. package/dist/providers/opencode-proxy-lifecycle.js.map +0 -1
  650. package/dist/providers/opencode.d.ts +0 -40
  651. package/dist/providers/opencode.d.ts.map +0 -1
  652. package/dist/providers/opencode.js +0 -190
  653. package/dist/providers/opencode.js.map +0 -1
  654. package/dist/providers/protocol/anthropic-convert.d.ts +0 -12
  655. package/dist/providers/protocol/anthropic-convert.d.ts.map +0 -1
  656. package/dist/providers/protocol/anthropic-convert.js +0 -113
  657. package/dist/providers/protocol/anthropic-convert.js.map +0 -1
  658. package/dist/providers/protocol/anthropic-helpers.d.ts +0 -13
  659. package/dist/providers/protocol/anthropic-helpers.d.ts.map +0 -1
  660. package/dist/providers/protocol/anthropic-helpers.js +0 -179
  661. package/dist/providers/protocol/anthropic-helpers.js.map +0 -1
  662. package/dist/providers/protocol/anthropic-stream-reader.d.ts +0 -13
  663. package/dist/providers/protocol/anthropic-stream-reader.d.ts.map +0 -1
  664. package/dist/providers/protocol/anthropic-stream-reader.js +0 -46
  665. package/dist/providers/protocol/anthropic-stream-reader.js.map +0 -1
  666. package/dist/providers/protocol/anthropic-stream.d.ts +0 -7
  667. package/dist/providers/protocol/anthropic-stream.d.ts.map +0 -1
  668. package/dist/providers/protocol/anthropic-stream.js +0 -318
  669. package/dist/providers/protocol/anthropic-stream.js.map +0 -1
  670. package/dist/providers/protocol/anthropic-types.d.ts +0 -240
  671. package/dist/providers/protocol/anthropic-types.d.ts.map +0 -1
  672. package/dist/providers/protocol/anthropic.d.ts +0 -20
  673. package/dist/providers/protocol/anthropic.d.ts.map +0 -1
  674. package/dist/providers/protocol/gemini/translate-anthropic.d.ts +0 -15
  675. package/dist/providers/protocol/gemini/translate-anthropic.d.ts.map +0 -1
  676. package/dist/providers/protocol/gemini/translate-anthropic.js +0 -84
  677. package/dist/providers/protocol/gemini/translate-anthropic.js.map +0 -1
  678. package/dist/providers/protocol/gemini/translate-chat.d.ts +0 -5
  679. package/dist/providers/protocol/gemini/translate-chat.d.ts.map +0 -1
  680. package/dist/providers/protocol/gemini/translate-chat.js +0 -142
  681. package/dist/providers/protocol/gemini/translate-chat.js.map +0 -1
  682. package/dist/providers/protocol/gemini/translate-models.d.ts +0 -40
  683. package/dist/providers/protocol/gemini/translate-models.d.ts.map +0 -1
  684. package/dist/providers/protocol/gemini/translate-models.js +0 -186
  685. package/dist/providers/protocol/gemini/translate-models.js.map +0 -1
  686. package/dist/providers/protocol/gemini/translate-responses.d.ts +0 -6
  687. package/dist/providers/protocol/gemini/translate-responses.d.ts.map +0 -1
  688. package/dist/providers/protocol/gemini/translate-responses.js +0 -187
  689. package/dist/providers/protocol/gemini/translate-responses.js.map +0 -1
  690. package/dist/providers/protocol/gemini/translate-schema.d.ts +0 -9
  691. package/dist/providers/protocol/gemini/translate-schema.d.ts.map +0 -1
  692. package/dist/providers/protocol/gemini/translate-schema.js +0 -48
  693. package/dist/providers/protocol/gemini/translate-schema.js.map +0 -1
  694. package/dist/providers/protocol/gemini/translate-shared.d.ts +0 -8
  695. package/dist/providers/protocol/gemini/translate-shared.d.ts.map +0 -1
  696. package/dist/providers/protocol/gemini/translate-shared.js +0 -47
  697. package/dist/providers/protocol/gemini/translate-shared.js.map +0 -1
  698. package/dist/providers/protocol/gemini/translate-thinking.d.ts +0 -7
  699. package/dist/providers/protocol/gemini/translate-thinking.d.ts.map +0 -1
  700. package/dist/providers/protocol/gemini/translate-thinking.js +0 -65
  701. package/dist/providers/protocol/gemini/translate-thinking.js.map +0 -1
  702. package/dist/providers/protocol/gemini/translate-types.d.ts +0 -133
  703. package/dist/providers/protocol/gemini/translate-types.d.ts.map +0 -1
  704. package/dist/providers/protocol/gemini/translate.d.ts +0 -7
  705. package/dist/providers/protocol/gemini/translate.d.ts.map +0 -1
  706. package/dist/providers/protocol/json-schema.d.ts +0 -52
  707. package/dist/providers/protocol/json-schema.d.ts.map +0 -1
  708. package/dist/providers/protocol/json-schema.js +0 -189
  709. package/dist/providers/protocol/json-schema.js.map +0 -1
  710. package/dist/providers/protocol/token-estimate.d.ts +0 -15
  711. package/dist/providers/protocol/token-estimate.d.ts.map +0 -1
  712. package/dist/providers/protocol/token-estimate.js +0 -34
  713. package/dist/providers/protocol/token-estimate.js.map +0 -1
  714. package/dist/providers/proxy-hub-backend.d.ts +0 -4
  715. package/dist/providers/proxy-hub-backend.d.ts.map +0 -1
  716. package/dist/providers/proxy-hub-backend.js +0 -11
  717. package/dist/providers/proxy-hub-backend.js.map +0 -1
  718. package/dist/providers/proxy-process.d.ts +0 -35
  719. package/dist/providers/proxy-process.d.ts.map +0 -1
  720. package/dist/providers/proxy-process.js +0 -119
  721. package/dist/providers/proxy-process.js.map +0 -1
  722. package/dist/providers/proxy-shared.d.ts +0 -43
  723. package/dist/providers/proxy-shared.d.ts.map +0 -1
  724. package/dist/providers/proxy-shared.js +0 -128
  725. package/dist/providers/proxy-shared.js.map +0 -1
  726. package/dist/providers/quota-guard.d.ts +0 -49
  727. package/dist/providers/quota-guard.d.ts.map +0 -1
  728. package/dist/providers/quota-guard.js +0 -107
  729. package/dist/providers/quota-guard.js.map +0 -1
  730. package/dist/providers/reasoning.d.ts +0 -27
  731. package/dist/providers/reasoning.d.ts.map +0 -1
  732. package/dist/providers/reasoning.js +0 -61
  733. package/dist/providers/reasoning.js.map +0 -1
  734. package/dist/providers/upstream-policy.d.ts +0 -33
  735. package/dist/providers/upstream-policy.d.ts.map +0 -1
  736. package/dist/providers/upstream-policy.js +0 -97
  737. package/dist/providers/upstream-policy.js.map +0 -1
  738. package/dist/public-types.d.ts +0 -3
  739. package/dist/public-types.d.ts.map +0 -1
  740. package/dist/public.d.ts +0 -19
  741. package/dist/public.d.ts.map +0 -1
  742. package/dist/public.js +0 -16
  743. package/dist/public.js.map +0 -1
  744. package/dist/sources/account-adapters.d.ts +0 -64
  745. package/dist/sources/account-adapters.d.ts.map +0 -1
  746. package/dist/sources/account-adapters.js +0 -205
  747. package/dist/sources/account-adapters.js.map +0 -1
  748. package/dist/sources/gateway-adapters.d.ts +0 -26
  749. package/dist/sources/gateway-adapters.d.ts.map +0 -1
  750. package/dist/sources/gateway-adapters.js +0 -43
  751. package/dist/sources/gateway-adapters.js.map +0 -1
  752. package/dist/sources/kiro-proxy-bin.d.ts +0 -41
  753. package/dist/sources/kiro-proxy-bin.d.ts.map +0 -1
  754. package/dist/sources/kiro-proxy-bin.js +0 -140
  755. package/dist/sources/kiro-proxy-bin.js.map +0 -1
  756. package/dist/sources/proxy-hub-adapters.d.ts +0 -7
  757. package/dist/sources/proxy-hub-adapters.d.ts.map +0 -1
  758. package/dist/sources/proxy-hub-adapters.js +0 -26
  759. package/dist/sources/proxy-hub-adapters.js.map +0 -1
  760. package/dist/testing.d.ts +0 -9
  761. package/dist/testing.d.ts.map +0 -1
  762. package/dist/testing.js +0 -6
  763. package/dist/tray/AnyPickTray.swift +0 -3
  764. package/dist/tray/activity.d.ts +0 -18
  765. package/dist/tray/activity.d.ts.map +0 -1
  766. package/dist/tray/activity.js +0 -51
  767. package/dist/tray/activity.js.map +0 -1
  768. package/dist/tray/app-icons/icon-1024.png +0 -0
  769. package/dist/tray/app-icons/icon-128.png +0 -0
  770. package/dist/tray/app-icons/icon-16.png +0 -0
  771. package/dist/tray/app-icons/icon-256.png +0 -0
  772. package/dist/tray/app-icons/icon-32.png +0 -0
  773. package/dist/tray/app-icons/icon-512.png +0 -0
  774. package/dist/tray/app-icons/icon-64.png +0 -0
  775. package/dist/tray/icons/claude.svg +0 -1
  776. package/dist/tray/icons/googlegemini.svg +0 -1
  777. package/dist/tray/icons/grok.svg +0 -1
  778. package/dist/tray/icons/kiro.svg +0 -1
  779. package/dist/tray/icons/openai.svg +0 -1
  780. package/dist/tray/icons/opencode.svg +0 -1
  781. package/dist/tray/icons/openrouter.svg +0 -1
  782. package/dist/tray/model-role-actions.d.ts +0 -15
  783. package/dist/tray/model-role-actions.d.ts.map +0 -1
  784. package/dist/tray/model-role-actions.js +0 -41
  785. package/dist/tray/model-role-actions.js.map +0 -1
  786. package/dist/tray/native/AccountsPanel.swift +0 -434
  787. package/dist/tray/native/AppEntry.swift +0 -229
  788. package/dist/tray/native/MainWindow.swift +0 -300
  789. package/dist/tray/native/ManageFormChrome.swift +0 -332
  790. package/dist/tray/native/ManageForms.swift +0 -472
  791. package/dist/tray/native/ManagePanel.swift +0 -356
  792. package/dist/tray/native/Models.swift +0 -259
  793. package/dist/tray/native/ModelsEditor.swift +0 -390
  794. package/dist/tray/native/ModelsOverview.swift +0 -76
  795. package/dist/tray/native/ModelsPickers.swift +0 -273
  796. package/dist/tray/native/ModelsRoutePickers.swift +0 -718
  797. package/dist/tray/native/MonitorPanel.swift +0 -375
  798. package/dist/tray/native/ProxyPanel.swift +0 -326
  799. package/dist/tray/native/QuickActivityRow.swift +0 -40
  800. package/dist/tray/native/QuickNav.swift +0 -62
  801. package/dist/tray/native/QuickPanel.swift +0 -447
  802. package/dist/tray/native/QuickRouteRow.swift +0 -189
  803. package/dist/tray/native/QuickServiceRows.swift +0 -292
  804. package/dist/tray/native/RoutingIssues.swift +0 -293
  805. package/dist/tray/native/SettingsPanel.swift +0 -225
  806. package/dist/tray/native/SharedUI.swift +0 -681
  807. package/dist/tray/native/Store.swift +0 -540
  808. package/dist/tray/native/Theme.swift +0 -139
  809. package/dist/tray/native/TrayChrome.swift +0 -657
  810. package/dist/tray/native/TrayControls.swift +0 -475
  811. package/dist/tray/native/TrayPreferences.swift +0 -46
  812. package/dist/tray/native/sources.txt +0 -26
  813. package/dist/tray/native-sources.d.ts +0 -8
  814. package/dist/tray/native-sources.d.ts.map +0 -1
  815. package/dist/tray/native-sources.js +0 -19
  816. package/dist/tray/native-sources.js.map +0 -1
  817. package/dist/tray/protocol.d.ts +0 -79
  818. package/dist/tray/protocol.d.ts.map +0 -1
  819. package/dist/tray/protocol.js +0 -145
  820. package/dist/tray/protocol.js.map +0 -1
  821. package/dist/tray/settings.d.ts +0 -15
  822. package/dist/tray/settings.d.ts.map +0 -1
  823. package/dist/tray/settings.js +0 -72
  824. package/dist/tray/settings.js.map +0 -1
  825. package/dist/tray/snapshot-client-routes.d.ts +0 -11
  826. package/dist/tray/snapshot-client-routes.d.ts.map +0 -1
  827. package/dist/tray/snapshot-client-routes.js +0 -305
  828. package/dist/tray/snapshot-client-routes.js.map +0 -1
  829. package/dist/tray/snapshot-helpers.d.ts +0 -20
  830. package/dist/tray/snapshot-helpers.d.ts.map +0 -1
  831. package/dist/tray/snapshot-helpers.js +0 -74
  832. package/dist/tray/snapshot-helpers.js.map +0 -1
  833. package/dist/tray/snapshot-hub.d.ts +0 -7
  834. package/dist/tray/snapshot-hub.d.ts.map +0 -1
  835. package/dist/tray/snapshot-hub.js +0 -93
  836. package/dist/tray/snapshot-hub.js.map +0 -1
  837. package/dist/tray/snapshot-resources.d.ts +0 -19
  838. package/dist/tray/snapshot-resources.d.ts.map +0 -1
  839. package/dist/tray/snapshot-resources.js +0 -216
  840. package/dist/tray/snapshot-resources.js.map +0 -1
  841. package/dist/tray/snapshot-types.d.ts +0 -229
  842. package/dist/tray/snapshot-types.d.ts.map +0 -1
  843. package/dist/tray/snapshot-usage.d.ts +0 -9
  844. package/dist/tray/snapshot-usage.d.ts.map +0 -1
  845. package/dist/tray/snapshot-usage.js +0 -35
  846. package/dist/tray/snapshot-usage.js.map +0 -1
  847. package/dist/tray/snapshot.d.ts +0 -7
  848. package/dist/tray/snapshot.d.ts.map +0 -1
  849. package/dist/tray/snapshot.js +0 -48
  850. package/dist/tray/snapshot.js.map +0 -1
  851. package/dist/tray/supervisor-actions.d.ts +0 -19
  852. package/dist/tray/supervisor-actions.d.ts.map +0 -1
  853. package/dist/tray/supervisor-actions.js +0 -224
  854. package/dist/tray/supervisor-actions.js.map +0 -1
  855. package/dist/tray/supervisor-activity.d.ts +0 -5
  856. package/dist/tray/supervisor-activity.d.ts.map +0 -1
  857. package/dist/tray/supervisor-activity.js +0 -19
  858. package/dist/tray/supervisor-activity.js.map +0 -1
  859. package/dist/tray/supervisor-errors.d.ts +0 -9
  860. package/dist/tray/supervisor-errors.d.ts.map +0 -1
  861. package/dist/tray/supervisor-errors.js +0 -91
  862. package/dist/tray/supervisor-errors.js.map +0 -1
  863. package/dist/tray/supervisor-logs.d.ts +0 -6
  864. package/dist/tray/supervisor-logs.d.ts.map +0 -1
  865. package/dist/tray/supervisor-logs.js +0 -52
  866. package/dist/tray/supervisor-logs.js.map +0 -1
  867. package/dist/tray/supervisor-mutations.d.ts +0 -14
  868. package/dist/tray/supervisor-mutations.d.ts.map +0 -1
  869. package/dist/tray/supervisor-mutations.js +0 -218
  870. package/dist/tray/supervisor-mutations.js.map +0 -1
  871. package/dist/tray/supervisor-native.d.ts +0 -22
  872. package/dist/tray/supervisor-native.d.ts.map +0 -1
  873. package/dist/tray/supervisor-native.js +0 -227
  874. package/dist/tray/supervisor-native.js.map +0 -1
  875. package/dist/tray/supervisor-proxies.d.ts +0 -6
  876. package/dist/tray/supervisor-proxies.d.ts.map +0 -1
  877. package/dist/tray/supervisor-proxies.js +0 -37
  878. package/dist/tray/supervisor-proxies.js.map +0 -1
  879. package/dist/tray/supervisor-tauri.d.ts +0 -13
  880. package/dist/tray/supervisor-tauri.d.ts.map +0 -1
  881. package/dist/tray/supervisor-tauri.js +0 -36
  882. package/dist/tray/supervisor-tauri.js.map +0 -1
  883. package/dist/tray/supervisor.d.ts +0 -17
  884. package/dist/tray/supervisor.d.ts.map +0 -1
  885. package/dist/tray/supervisor.js +0 -372
  886. package/dist/tray/supervisor.js.map +0 -1
  887. package/dist/tray/terminal-launcher.d.ts +0 -12
  888. package/dist/tray/terminal-launcher.d.ts.map +0 -1
  889. package/dist/tray/terminal-launcher.js +0 -130
  890. package/dist/tray/terminal-launcher.js.map +0 -1
  891. package/dist/tui/actions/ensure-proxy-up.d.ts +0 -15
  892. package/dist/tui/actions/ensure-proxy-up.d.ts.map +0 -1
  893. package/dist/tui/actions/ensure-proxy-up.js +0 -41
  894. package/dist/tui/actions/ensure-proxy-up.js.map +0 -1
  895. package/dist/tui/actions/use-account-actions.d.ts +0 -35
  896. package/dist/tui/actions/use-account-actions.d.ts.map +0 -1
  897. package/dist/tui/actions/use-account-actions.js +0 -527
  898. package/dist/tui/actions/use-account-actions.js.map +0 -1
  899. package/dist/tui/actions/use-app-bindings.d.ts +0 -83
  900. package/dist/tui/actions/use-app-bindings.d.ts.map +0 -1
  901. package/dist/tui/actions/use-app-bindings.js +0 -472
  902. package/dist/tui/actions/use-app-bindings.js.map +0 -1
  903. package/dist/tui/actions/use-gateway-actions.d.ts +0 -45
  904. package/dist/tui/actions/use-gateway-actions.d.ts.map +0 -1
  905. package/dist/tui/actions/use-gateway-actions.js +0 -370
  906. package/dist/tui/actions/use-gateway-actions.js.map +0 -1
  907. package/dist/tui/actions/use-home-filter.d.ts +0 -24
  908. package/dist/tui/actions/use-home-filter.d.ts.map +0 -1
  909. package/dist/tui/actions/use-home-filter.js +0 -48
  910. package/dist/tui/actions/use-home-filter.js.map +0 -1
  911. package/dist/tui/actions/use-model-role-editor.d.ts +0 -44
  912. package/dist/tui/actions/use-model-role-editor.d.ts.map +0 -1
  913. package/dist/tui/actions/use-model-role-editor.js +0 -68
  914. package/dist/tui/actions/use-model-role-editor.js.map +0 -1
  915. package/dist/tui/actions/use-provider-filter.d.ts +0 -10
  916. package/dist/tui/actions/use-provider-filter.d.ts.map +0 -1
  917. package/dist/tui/actions/use-provider-filter.js +0 -22
  918. package/dist/tui/actions/use-provider-filter.js.map +0 -1
  919. package/dist/tui/actions/use-proxy-actions.d.ts +0 -31
  920. package/dist/tui/actions/use-proxy-actions.d.ts.map +0 -1
  921. package/dist/tui/actions/use-proxy-actions.js +0 -474
  922. package/dist/tui/actions/use-proxy-actions.js.map +0 -1
  923. package/dist/tui/actions/use-text-input-submit.d.ts +0 -16
  924. package/dist/tui/actions/use-text-input-submit.d.ts.map +0 -1
  925. package/dist/tui/actions/use-text-input-submit.js +0 -96
  926. package/dist/tui/actions/use-text-input-submit.js.map +0 -1
  927. package/dist/tui/actions/use-tray-runtime-actions.d.ts +0 -18
  928. package/dist/tui/actions/use-tray-runtime-actions.d.ts.map +0 -1
  929. package/dist/tui/actions/use-tray-runtime-actions.js +0 -78
  930. package/dist/tui/actions/use-tray-runtime-actions.js.map +0 -1
  931. package/dist/tui/app-ui-helpers.d.ts +0 -14
  932. package/dist/tui/app-ui-helpers.d.ts.map +0 -1
  933. package/dist/tui/app-ui-helpers.js +0 -48
  934. package/dist/tui/app-ui-helpers.js.map +0 -1
  935. package/dist/tui/app-ui.d.ts +0 -19
  936. package/dist/tui/app-ui.d.ts.map +0 -1
  937. package/dist/tui/app-ui.js +0 -98
  938. package/dist/tui/app-ui.js.map +0 -1
  939. package/dist/tui/components/chrome/header.d.ts +0 -39
  940. package/dist/tui/components/chrome/header.d.ts.map +0 -1
  941. package/dist/tui/components/chrome/header.js +0 -161
  942. package/dist/tui/components/chrome/header.js.map +0 -1
  943. package/dist/tui/components/chrome/inputs.d.ts +0 -34
  944. package/dist/tui/components/chrome/inputs.d.ts.map +0 -1
  945. package/dist/tui/components/chrome/inputs.js +0 -82
  946. package/dist/tui/components/chrome/inputs.js.map +0 -1
  947. package/dist/tui/components/chrome/layout.d.ts +0 -61
  948. package/dist/tui/components/chrome/layout.d.ts.map +0 -1
  949. package/dist/tui/components/chrome/layout.js +0 -119
  950. package/dist/tui/components/chrome/layout.js.map +0 -1
  951. package/dist/tui/components/chrome/legacy.d.ts +0 -84
  952. package/dist/tui/components/chrome/legacy.d.ts.map +0 -1
  953. package/dist/tui/components/chrome/legacy.js +0 -6
  954. package/dist/tui/components/chrome/rows.d.ts +0 -89
  955. package/dist/tui/components/chrome/rows.d.ts.map +0 -1
  956. package/dist/tui/components/chrome/rows.js +0 -151
  957. package/dist/tui/components/chrome/rows.js.map +0 -1
  958. package/dist/tui/components/chrome/status.d.ts +0 -50
  959. package/dist/tui/components/chrome/status.d.ts.map +0 -1
  960. package/dist/tui/components/chrome/status.js +0 -157
  961. package/dist/tui/components/chrome/status.js.map +0 -1
  962. package/dist/tui/components/chrome.d.ts +0 -7
  963. package/dist/tui/components/chrome.d.ts.map +0 -1
  964. package/dist/tui/components/chrome.js +0 -7
  965. package/dist/tui/components.d.ts +0 -26
  966. package/dist/tui/components.d.ts.map +0 -1
  967. package/dist/tui/components.js +0 -182
  968. package/dist/tui/components.js.map +0 -1
  969. package/dist/tui/model/anypick.d.ts +0 -106
  970. package/dist/tui/model/anypick.d.ts.map +0 -1
  971. package/dist/tui/model/anypick.js +0 -116
  972. package/dist/tui/model/anypick.js.map +0 -1
  973. package/dist/tui/model/bindings.d.ts +0 -39
  974. package/dist/tui/model/bindings.d.ts.map +0 -1
  975. package/dist/tui/model/bindings.js +0 -102
  976. package/dist/tui/model/bindings.js.map +0 -1
  977. package/dist/tui/model/detail.d.ts +0 -6
  978. package/dist/tui/model/detail.d.ts.map +0 -1
  979. package/dist/tui/model/detail.js +0 -85
  980. package/dist/tui/model/detail.js.map +0 -1
  981. package/dist/tui/model/gateway.d.ts +0 -46
  982. package/dist/tui/model/gateway.d.ts.map +0 -1
  983. package/dist/tui/model/gateway.js +0 -134
  984. package/dist/tui/model/gateway.js.map +0 -1
  985. package/dist/tui/model/home-format.d.ts +0 -52
  986. package/dist/tui/model/home-format.d.ts.map +0 -1
  987. package/dist/tui/model/home-format.js +0 -64
  988. package/dist/tui/model/home-format.js.map +0 -1
  989. package/dist/tui/model/home-load.d.ts +0 -8
  990. package/dist/tui/model/home-load.d.ts.map +0 -1
  991. package/dist/tui/model/home-load.js +0 -244
  992. package/dist/tui/model/home-load.js.map +0 -1
  993. package/dist/tui/model/identity.d.ts +0 -53
  994. package/dist/tui/model/identity.d.ts.map +0 -1
  995. package/dist/tui/model/identity.js +0 -176
  996. package/dist/tui/model/identity.js.map +0 -1
  997. package/dist/tui/model/line-editor.d.ts +0 -99
  998. package/dist/tui/model/line-editor.d.ts.map +0 -1
  999. package/dist/tui/model/line-editor.js +0 -186
  1000. package/dist/tui/model/line-editor.js.map +0 -1
  1001. package/dist/tui/model/names.d.ts +0 -28
  1002. package/dist/tui/model/names.d.ts.map +0 -1
  1003. package/dist/tui/model/names.js +0 -42
  1004. package/dist/tui/model/names.js.map +0 -1
  1005. package/dist/tui/model/pool.d.ts +0 -11
  1006. package/dist/tui/model/pool.d.ts.map +0 -1
  1007. package/dist/tui/model/pool.js +0 -115
  1008. package/dist/tui/model/pool.js.map +0 -1
  1009. package/dist/tui/model/provider-filter.d.ts +0 -14
  1010. package/dist/tui/model/provider-filter.d.ts.map +0 -1
  1011. package/dist/tui/model/provider-filter.js +0 -46
  1012. package/dist/tui/model/provider-filter.js.map +0 -1
  1013. package/dist/tui/model/proxy-hub.d.ts +0 -23
  1014. package/dist/tui/model/proxy-hub.d.ts.map +0 -1
  1015. package/dist/tui/model/proxy-hub.js +0 -69
  1016. package/dist/tui/model/proxy-hub.js.map +0 -1
  1017. package/dist/tui/model/proxy-labels.d.ts +0 -5
  1018. package/dist/tui/model/proxy-labels.d.ts.map +0 -1
  1019. package/dist/tui/model/proxy-labels.js +0 -18
  1020. package/dist/tui/model/proxy-labels.js.map +0 -1
  1021. package/dist/tui/model/proxy.d.ts +0 -15
  1022. package/dist/tui/model/proxy.d.ts.map +0 -1
  1023. package/dist/tui/model/proxy.js +0 -214
  1024. package/dist/tui/model/proxy.js.map +0 -1
  1025. package/dist/tui/model/root.d.ts +0 -20
  1026. package/dist/tui/model/root.d.ts.map +0 -1
  1027. package/dist/tui/model/root.js +0 -126
  1028. package/dist/tui/model/root.js.map +0 -1
  1029. package/dist/tui/model/route-builder.d.ts +0 -25
  1030. package/dist/tui/model/route-builder.d.ts.map +0 -1
  1031. package/dist/tui/model/route-builder.js +0 -199
  1032. package/dist/tui/model/route-builder.js.map +0 -1
  1033. package/dist/tui/model/screen.d.ts +0 -260
  1034. package/dist/tui/model/screen.d.ts.map +0 -1
  1035. package/dist/tui/model/types.d.ts +0 -179
  1036. package/dist/tui/model/types.d.ts.map +0 -1
  1037. package/dist/tui/model.d.ts +0 -18
  1038. package/dist/tui/model.d.ts.map +0 -1
  1039. package/dist/tui/model.js +0 -17
  1040. package/dist/tui/proxy-models-fetch.d.ts +0 -34
  1041. package/dist/tui/proxy-models-fetch.d.ts.map +0 -1
  1042. package/dist/tui/proxy-models-fetch.js +0 -87
  1043. package/dist/tui/proxy-models-fetch.js.map +0 -1
  1044. package/dist/tui/routes/account.d.ts +0 -4
  1045. package/dist/tui/routes/account.d.ts.map +0 -1
  1046. package/dist/tui/routes/account.js +0 -327
  1047. package/dist/tui/routes/account.js.map +0 -1
  1048. package/dist/tui/routes/apps.d.ts +0 -3
  1049. package/dist/tui/routes/apps.d.ts.map +0 -1
  1050. package/dist/tui/routes/apps.js +0 -296
  1051. package/dist/tui/routes/apps.js.map +0 -1
  1052. package/dist/tui/routes/common.d.ts +0 -4
  1053. package/dist/tui/routes/common.d.ts.map +0 -1
  1054. package/dist/tui/routes/common.js +0 -117
  1055. package/dist/tui/routes/common.js.map +0 -1
  1056. package/dist/tui/routes/context.d.ts +0 -43
  1057. package/dist/tui/routes/context.d.ts.map +0 -1
  1058. package/dist/tui/routes/gateway.d.ts +0 -3
  1059. package/dist/tui/routes/gateway.d.ts.map +0 -1
  1060. package/dist/tui/routes/gateway.js +0 -199
  1061. package/dist/tui/routes/gateway.js.map +0 -1
  1062. package/dist/tui/routes/proxy.d.ts +0 -3
  1063. package/dist/tui/routes/proxy.d.ts.map +0 -1
  1064. package/dist/tui/routes/proxy.js +0 -234
  1065. package/dist/tui/routes/proxy.js.map +0 -1
  1066. package/dist/tui/screens/account-detail.d.ts +0 -14
  1067. package/dist/tui/screens/account-detail.d.ts.map +0 -1
  1068. package/dist/tui/screens/account-detail.js +0 -98
  1069. package/dist/tui/screens/account-detail.js.map +0 -1
  1070. package/dist/tui/screens/accounts-home.d.ts +0 -42
  1071. package/dist/tui/screens/accounts-home.d.ts.map +0 -1
  1072. package/dist/tui/screens/accounts-home.js +0 -321
  1073. package/dist/tui/screens/accounts-home.js.map +0 -1
  1074. package/dist/tui/screens/add-account.d.ts +0 -70
  1075. package/dist/tui/screens/add-account.d.ts.map +0 -1
  1076. package/dist/tui/screens/add-account.js +0 -323
  1077. package/dist/tui/screens/add-account.js.map +0 -1
  1078. package/dist/tui/screens/anypick-home.d.ts +0 -39
  1079. package/dist/tui/screens/anypick-home.d.ts.map +0 -1
  1080. package/dist/tui/screens/anypick-home.js +0 -253
  1081. package/dist/tui/screens/anypick-home.js.map +0 -1
  1082. package/dist/tui/screens/anypick-preview.d.ts +0 -13
  1083. package/dist/tui/screens/anypick-preview.d.ts.map +0 -1
  1084. package/dist/tui/screens/anypick-preview.js +0 -49
  1085. package/dist/tui/screens/anypick-preview.js.map +0 -1
  1086. package/dist/tui/screens/app-route-preview.d.ts +0 -14
  1087. package/dist/tui/screens/app-route-preview.d.ts.map +0 -1
  1088. package/dist/tui/screens/app-route-preview.js +0 -35
  1089. package/dist/tui/screens/app-route-preview.js.map +0 -1
  1090. package/dist/tui/screens/app-route-source.d.ts +0 -15
  1091. package/dist/tui/screens/app-route-source.d.ts.map +0 -1
  1092. package/dist/tui/screens/app-route-source.js +0 -97
  1093. package/dist/tui/screens/app-route-source.js.map +0 -1
  1094. package/dist/tui/screens/apps-home.d.ts +0 -22
  1095. package/dist/tui/screens/apps-home.d.ts.map +0 -1
  1096. package/dist/tui/screens/apps-home.js +0 -111
  1097. package/dist/tui/screens/apps-home.js.map +0 -1
  1098. package/dist/tui/screens/confirm.d.ts +0 -19
  1099. package/dist/tui/screens/confirm.d.ts.map +0 -1
  1100. package/dist/tui/screens/confirm.js +0 -42
  1101. package/dist/tui/screens/confirm.js.map +0 -1
  1102. package/dist/tui/screens/credential-form.d.ts +0 -30
  1103. package/dist/tui/screens/credential-form.d.ts.map +0 -1
  1104. package/dist/tui/screens/credential-form.js +0 -241
  1105. package/dist/tui/screens/credential-form.js.map +0 -1
  1106. package/dist/tui/screens/gateway-connection-form.d.ts +0 -16
  1107. package/dist/tui/screens/gateway-connection-form.d.ts.map +0 -1
  1108. package/dist/tui/screens/gateway-connection-form.js +0 -127
  1109. package/dist/tui/screens/gateway-connection-form.js.map +0 -1
  1110. package/dist/tui/screens/gateway-pick-provider.d.ts +0 -19
  1111. package/dist/tui/screens/gateway-pick-provider.d.ts.map +0 -1
  1112. package/dist/tui/screens/gateway-pick-provider.js +0 -62
  1113. package/dist/tui/screens/gateway-pick-provider.js.map +0 -1
  1114. package/dist/tui/screens/gateways-home.d.ts +0 -38
  1115. package/dist/tui/screens/gateways-home.d.ts.map +0 -1
  1116. package/dist/tui/screens/gateways-home.js +0 -247
  1117. package/dist/tui/screens/gateways-home.js.map +0 -1
  1118. package/dist/tui/screens/health.d.ts +0 -16
  1119. package/dist/tui/screens/health.d.ts.map +0 -1
  1120. package/dist/tui/screens/health.js +0 -109
  1121. package/dist/tui/screens/health.js.map +0 -1
  1122. package/dist/tui/screens/help.d.ts +0 -10
  1123. package/dist/tui/screens/help.d.ts.map +0 -1
  1124. package/dist/tui/screens/help.js +0 -213
  1125. package/dist/tui/screens/help.js.map +0 -1
  1126. package/dist/tui/screens/manage-apps.d.ts +0 -29
  1127. package/dist/tui/screens/manage-apps.d.ts.map +0 -1
  1128. package/dist/tui/screens/manage-apps.js +0 -165
  1129. package/dist/tui/screens/manage-apps.js.map +0 -1
  1130. package/dist/tui/screens/proxy-board-helpers.d.ts +0 -9
  1131. package/dist/tui/screens/proxy-board-helpers.d.ts.map +0 -1
  1132. package/dist/tui/screens/proxy-board-helpers.js +0 -70
  1133. package/dist/tui/screens/proxy-board-helpers.js.map +0 -1
  1134. package/dist/tui/screens/proxy-board.d.ts +0 -43
  1135. package/dist/tui/screens/proxy-board.d.ts.map +0 -1
  1136. package/dist/tui/screens/proxy-board.js +0 -351
  1137. package/dist/tui/screens/proxy-board.js.map +0 -1
  1138. package/dist/tui/screens/proxy-hub.d.ts +0 -21
  1139. package/dist/tui/screens/proxy-hub.d.ts.map +0 -1
  1140. package/dist/tui/screens/proxy-hub.js +0 -150
  1141. package/dist/tui/screens/proxy-hub.js.map +0 -1
  1142. package/dist/tui/screens/proxy-models-utils.d.ts +0 -13
  1143. package/dist/tui/screens/proxy-models-utils.d.ts.map +0 -1
  1144. package/dist/tui/screens/proxy-models-utils.js +0 -53
  1145. package/dist/tui/screens/proxy-models-utils.js.map +0 -1
  1146. package/dist/tui/screens/proxy-models.d.ts +0 -65
  1147. package/dist/tui/screens/proxy-models.d.ts.map +0 -1
  1148. package/dist/tui/screens/proxy-models.js +0 -252
  1149. package/dist/tui/screens/proxy-models.js.map +0 -1
  1150. package/dist/tui/screens/proxy.d.ts +0 -26
  1151. package/dist/tui/screens/proxy.d.ts.map +0 -1
  1152. package/dist/tui/screens/text-input.d.ts +0 -18
  1153. package/dist/tui/screens/text-input.d.ts.map +0 -1
  1154. package/dist/tui/screens/text-input.js +0 -67
  1155. package/dist/tui/screens/text-input.js.map +0 -1
  1156. package/dist/tui/screens/tray-runtime.d.ts +0 -19
  1157. package/dist/tui/screens/tray-runtime.d.ts.map +0 -1
  1158. package/dist/tui/screens/tray-runtime.js +0 -108
  1159. package/dist/tui/screens/tray-runtime.js.map +0 -1
  1160. package/dist/tui/use-tui-nav.d.ts +0 -40
  1161. package/dist/tui/use-tui-nav.d.ts.map +0 -1
  1162. package/dist/tui/use-tui-nav.js +0 -256
  1163. package/dist/tui/use-tui-nav.js.map +0 -1
  1164. package/dist/tui/use-tui-shell.d.ts +0 -46
  1165. package/dist/tui/use-tui-shell.d.ts.map +0 -1
  1166. package/dist/tui/use-tui-shell.js +0 -95
  1167. package/dist/tui/use-tui-shell.js.map +0 -1
  1168. package/dist/types/account.d.ts +0 -410
  1169. package/dist/types/account.d.ts.map +0 -1
  1170. package/dist/types/account.js +0 -7
  1171. package/dist/types/account.js.map +0 -1
  1172. package/dist/types/bindings.d.ts +0 -300
  1173. package/dist/types/bindings.d.ts.map +0 -1
  1174. package/dist/types/catalog.d.ts +0 -165
  1175. package/dist/types/catalog.d.ts.map +0 -1
  1176. package/dist/types/clients.d.ts +0 -174
  1177. package/dist/types/clients.d.ts.map +0 -1
  1178. package/dist/types/clients.js +0 -11
  1179. package/dist/types/clients.js.map +0 -1
  1180. package/dist/types/plugins.d.ts +0 -89
  1181. package/dist/types/plugins.d.ts.map +0 -1
  1182. package/dist/types/plugins.js +0 -14
  1183. package/dist/types/plugins.js.map +0 -1
  1184. package/dist/types/proxy-hub.d.ts +0 -109
  1185. package/dist/types/proxy-hub.d.ts.map +0 -1
  1186. package/dist/types.d.ts +0 -7
  1187. package/dist/types.d.ts.map +0 -1
  1188. package/dist/types.js +0 -1
  1189. package/dist/utils/errors.d.ts +0 -61
  1190. package/dist/utils/errors.d.ts.map +0 -1
  1191. package/dist/utils/errors.js +0 -119
  1192. package/dist/utils/errors.js.map +0 -1
  1193. package/dist/utils/fs.d.ts +0 -39
  1194. package/dist/utils/fs.d.ts.map +0 -1
  1195. package/dist/utils/fs.js +0 -126
  1196. package/dist/utils/fs.js.map +0 -1
  1197. package/dist/utils/lock.d.ts +0 -33
  1198. package/dist/utils/lock.d.ts.map +0 -1
  1199. package/dist/utils/lock.js +0 -95
  1200. package/dist/utils/lock.js.map +0 -1
  1201. package/dist/utils/log.d.ts +0 -10
  1202. package/dist/utils/log.d.ts.map +0 -1
  1203. package/dist/utils/log.js +0 -21
  1204. package/dist/utils/log.js.map +0 -1
  1205. package/dist/utils/network.d.ts +0 -3
  1206. package/dist/utils/network.d.ts.map +0 -1
  1207. package/dist/utils/network.js +0 -13
  1208. package/dist/utils/network.js.map +0 -1
  1209. package/dist/utils/process/binary.d.ts +0 -14
  1210. package/dist/utils/process/binary.d.ts.map +0 -1
  1211. package/dist/utils/process/binary.js +0 -29
  1212. package/dist/utils/process/binary.js.map +0 -1
  1213. package/dist/utils/process/follow.d.ts +0 -2
  1214. package/dist/utils/process/follow.d.ts.map +0 -1
  1215. package/dist/utils/process/follow.js +0 -90
  1216. package/dist/utils/process/follow.js.map +0 -1
  1217. package/dist/utils/process/health.d.ts +0 -43
  1218. package/dist/utils/process/health.d.ts.map +0 -1
  1219. package/dist/utils/process/health.js +0 -132
  1220. package/dist/utils/process/health.js.map +0 -1
  1221. package/dist/utils/process/pid.d.ts +0 -95
  1222. package/dist/utils/process/pid.d.ts.map +0 -1
  1223. package/dist/utils/process/pid.js +0 -243
  1224. package/dist/utils/process/pid.js.map +0 -1
  1225. package/dist/utils/process.d.ts +0 -5
  1226. package/dist/utils/process.d.ts.map +0 -1
  1227. package/dist/utils/process.js +0 -5
  1228. package/dist/utils/slug.d.ts +0 -18
  1229. package/dist/utils/slug.d.ts.map +0 -1
  1230. package/dist/utils/slug.js +0 -42
  1231. package/dist/utils/slug.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","names":[],"sources":["../../../src/providers/gemini-proxy/server.ts"],"sourcesContent":["/**\n * Dual-protocol reverse proxy: OpenAI + Anthropic → Google Gemini API.\n *\n * Codex OPENAI_BASE_URL → POST /v1/responses (and chat/completions)\n * Claude ANTHROPIC_BASE_URL → POST /v1/messages\n *\n * Auth: GEMINI_API_KEY (or GOOGLE_API_KEY) from snapshot .env / live path.\n * Upstream: generativelanguage.googleapis.com (generateContent).\n */\n\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http';\nimport { join } from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { pathExists, writeJsonFile } from '../../utils/fs';\nimport { withFileLock } from '../../utils/lock';\nimport { readGeminiApiKeyFromEnvFile } from '../gemini';\nimport {\n loadAntigravityOAuthCredentials,\n type GeminiOAuthCredentials,\n} from '../gemini-antigravity-oauth';\nimport type { AnthropicMessageRequest, OpenAIChatRequest } from '../protocol/anthropic';\nimport {\n anthropicToGemini,\n compareGeminiModelIds,\n geminiToAnthropic,\n geminiToOpenAI,\n geminiToOpenAIResponses,\n openAIToGemini,\n openAIResponsesToGemini,\n resolveGeminiModel,\n type GeminiModelCatalog,\n type GeminiModelDescriptor,\n type GeminiModelResolution,\n type GeminiGenerateRequest,\n type GeminiGenerateResponse,\n type OpenAIResponsesRequest,\n type OpenAIResponsesResponse,\n} from '../protocol/gemini/translate';\nimport { normalizeLocalApiUrl, readBody, requireProxyAuth } from '../proxy-shared';\nimport { assertLoopbackHost } from '../../utils/network';\nimport {\n classifyUpstreamFailure,\n CooldownRegistry,\n isCredentialQuotaFailure,\n} from '../upstream-policy';\nimport { QuotaGuard, type QuotaGuardOptions } from '../quota-guard';\nimport {\n reasoningFromAnthropic,\n reasoningFromOpenAI,\n type ReasoningEffort,\n type ReasoningIntent,\n} from '../reasoning';\n\nexport interface GeminiProxyServerOptions {\n host: string;\n port: number;\n /** Path to snapshot or live dir containing .env (and optionally oauth). */\n authDir: string;\n /**\n * Optional multi-account dirs (pool mode). Failover on 401/429.\n * When set, keys are loaded from each dir's .env.\n */\n authDirs?: string[];\n /** Saved pool-account labels in the same order as authDirs. */\n authAccountNames?: string[];\n /** Override API key (tests). Single key — ignores dirs. */\n apiKey?: string;\n /** Optional Code Assist project for OAuth accounts. */\n oauthProject?: string;\n /** OAuth identity to use for Code Assist. Defaults to auto (CLI, then Antigravity). */\n oauthSource?: GeminiOAuthSource;\n /** Read Antigravity OAuth from this file instead of the OS keychain (tests/portable setups). */\n antigravityOAuthFile?: string;\n upstream?: string;\n /** Override the Code Assist base URL (primarily for tests). */\n codeAssistUpstream?: string;\n /** Per-instance high-entropy secret (PROXY-01) required on credentialed routes. */\n token?: string;\n log?: (line: string) => void;\n quiet?: boolean;\n quotaGuard?: QuotaGuardOptions;\n}\n\nconst COMPAT_LABEL = 'OpenAI + Anthropic → Gemini API';\nconst DEFAULT_UPSTREAM = 'https://generativelanguage.googleapis.com';\nconst CODE_ASSIST_UPSTREAM = 'https://cloudcode-pa.googleapis.com';\nconst ANTIGRAVITY_CODE_ASSIST_UPSTREAM = 'https://daily-cloudcode-pa.googleapis.com';\nconst OAUTH_CLIENT_ID = '681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com';\nconst OAUTH_CLIENT_SECRET = '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';\nconst ANTIGRAVITY_OAUTH_CLIENT_ID =\n '1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com';\nconst ANTIGRAVITY_OAUTH_CLIENT_SECRET = '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';\n\nexport type GeminiOAuthSource = 'auto' | 'gemini-cli' | 'antigravity';\ntype GeminiAuthRoute = 'api-key' | Exclude<GeminiOAuthSource, 'auto'>;\ninterface GeminiApiKey {\n key: string;\n accountName?: string;\n}\n\ninterface OAuthProfile {\n clientId: string;\n clientSecret: string;\n ideType: 'GEMINI_CLI' | 'ANTIGRAVITY';\n userAgent?: string;\n}\n\ninterface OAuthRouteState {\n credentials?: GeminiOAuthCredentials | null;\n project?: string;\n}\n\ninterface RoutedModelResolution extends GeminiModelResolution {\n route: GeminiAuthRoute;\n}\n\nconst MODEL_CATALOG_TTL_MS = 10 * 60_000;\nconst MODEL_CATALOG_FAILURE_TTL_MS = 60_000;\n\nfunction isAuthEntitlementRejection(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return /(?:HTTP\\s*)?\\b(?:401|403)\\b|unauthorized|forbidden|permission denied/i.test(message);\n}\n\nfunction reasoningIntentToModelEffort(intent: ReasoningIntent): ReasoningEffort | undefined {\n if (intent.budgetTokens != null) {\n // A manual token budget is already exact; do not silently replace it with\n // a catalog tier selected through a different control surface.\n return undefined;\n }\n if (intent.enabled === false) {\n return 'minimal';\n }\n return intent.effort ?? (intent.enabled === true ? 'medium' : undefined);\n}\n\nexport function createGeminiProxyServer(opts: GeminiProxyServerOptions): Server {\n assertLoopbackHost(opts.host);\n const upstream = (opts.upstream ?? DEFAULT_UPSTREAM).replace(/\\/$/, '');\n const oauthSource = opts.oauthSource ?? 'auto';\n const proxyToken = opts.token ?? process.env.ANYPICK_PROXY_TOKEN ?? '';\n const oauthProfile = (source: Exclude<GeminiOAuthSource, 'auto'>): OAuthProfile =>\n source === 'antigravity'\n ? {\n clientId: process.env.ANTIGRAVITY_OAUTH_CLIENT_ID?.trim() || ANTIGRAVITY_OAUTH_CLIENT_ID,\n clientSecret:\n process.env.ANTIGRAVITY_OAUTH_CLIENT_SECRET?.trim() || ANTIGRAVITY_OAUTH_CLIENT_SECRET,\n ideType: 'ANTIGRAVITY',\n userAgent: 'antigravity/hub/2.3.1 (aidev_client)',\n }\n : {\n clientId: OAUTH_CLIENT_ID,\n clientSecret: OAUTH_CLIENT_SECRET,\n ideType: 'GEMINI_CLI',\n };\n const codeAssistBase = (source: Exclude<GeminiOAuthSource, 'auto'>): string =>\n (\n opts.codeAssistUpstream ??\n (source === 'antigravity' ? ANTIGRAVITY_CODE_ASSIST_UPSTREAM : CODE_ASSIST_UPSTREAM)\n ).replace(/\\/$/, '');\n const log =\n opts.log ?? (opts.quiet ? () => {} : (line: string) => process.stderr.write(`${line}\\n`));\n\n /** Ordered API keys; Quota Guard may promote a healthy pool account. */\n let keyRing: GeminiApiKey[] = [];\n const oauthStates = new Map<Exclude<GeminiOAuthSource, 'auto'>, OAuthRouteState>();\n const oauthRefreshInflight = new Map<Exclude<GeminiOAuthSource, 'auto'>, Promise<string>>();\n const modelCatalogs = new Map<\n GeminiAuthRoute,\n { value: GeminiModelCatalog; fetchedAt: number }\n >();\n const modelCatalogInflight = new Map<GeminiAuthRoute, Promise<GeminiModelCatalog>>();\n const modelCatalogFailures = new Map<GeminiAuthRoute, { error: unknown; fetchedAt: number }>();\n /**\n * Keep a proven auto-auth route sticky for this process. Without this, every\n * model-list poll starts at Gemini CLI again even after its account returned\n * 401/403 and Antigravity served the request successfully.\n */\n let autoActiveRoute: GeminiAuthRoute | undefined;\n const proxySessionId = randomUUID();\n const cooldowns = new CooldownRegistry();\n const quotaGuard = new QuotaGuard(opts.quotaGuard ?? { enabled: false, cooldownMs: 60 * 60_000 });\n\n const server = createServer((req, res) => {\n void handle(req, res);\n });\n\n async function loadKeyRing(): Promise<GeminiApiKey[]> {\n if (opts.apiKey?.trim()) {\n return [{ key: opts.apiKey.trim() }];\n }\n if (keyRing.length) {\n return keyRing;\n }\n const dirs = opts.authDirs && opts.authDirs.length > 0 ? opts.authDirs : [opts.authDir];\n const keys: GeminiApiKey[] = [];\n for (const [index, dir] of dirs.entries()) {\n const envFile = dir.endsWith('.env') ? dir : join(dir, '.env');\n const k = await readGeminiApiKeyFromEnvFile(envFile);\n if (k && !keys.some((candidate) => candidate.key === k)) {\n keys.push({ key: k, accountName: opts.authAccountNames?.[index] });\n }\n }\n if (keys.length === 0) {\n const envKey = process.env.GEMINI_API_KEY?.trim() || process.env.GOOGLE_API_KEY?.trim();\n if (envKey) {\n keys.push({ key: envKey });\n }\n }\n if (keys.length === 0) {\n throw new Error(\n `No GEMINI_API_KEY in auth dir(s). Save an API-key Gemini login, or set GEMINI_API_KEY.`,\n );\n }\n keyRing = keys;\n return keys;\n }\n\n async function currentKey(): Promise<GeminiApiKey> {\n const keys = await loadKeyRing();\n return (await quotaGuard.ordered(keys))[0] ?? keys[0];\n }\n\n function oauthState(source: Exclude<GeminiOAuthSource, 'auto'>): OAuthRouteState {\n const existing = oauthStates.get(source);\n if (existing) {\n return existing;\n }\n const created: OAuthRouteState = { project: opts.oauthProject };\n oauthStates.set(source, created);\n return created;\n }\n\n async function loadOAuthCredentials(\n source: Exclude<GeminiOAuthSource, 'auto'>,\n ): Promise<GeminiOAuthCredentials | null> {\n const state = oauthState(source);\n if (state.credentials !== undefined) {\n return state.credentials;\n }\n if (source === 'antigravity') {\n state.credentials = await loadAntigravityOAuthCredentials(opts.antigravityOAuthFile);\n return state.credentials;\n }\n const file = join(opts.authDir, 'oauth_creds.json');\n try {\n const parsed = JSON.parse(await readFile(file, 'utf8')) as GeminiOAuthCredentials;\n state.credentials = parsed.refresh_token || parsed.access_token ? parsed : null;\n } catch {\n state.credentials = null;\n }\n return state.credentials;\n }\n\n /** Respect the Gemini CLI's selected auth mode; a stale .env must not beat OAuth. */\n async function geminiCliRoute(): Promise<GeminiAuthRoute> {\n const credentials = await loadOAuthCredentials('gemini-cli');\n if (credentials && !opts.apiKey) {\n try {\n const raw = await readFile(join(opts.authDir, 'auth-settings.json'), 'utf8');\n const settings = JSON.parse(raw) as { security?: { auth?: { selectedType?: string } } };\n if (settings.security?.auth?.selectedType === 'oauth-personal') {\n return 'gemini-cli';\n }\n } catch {\n // OAuth credentials without auth-settings are still a complete CLI login.\n return 'gemini-cli';\n }\n }\n try {\n await currentKey();\n return 'api-key';\n } catch {\n if (credentials) {\n return 'gemini-cli';\n }\n throw new Error('No usable Gemini CLI OAuth or API-key credential was found.');\n }\n }\n\n function activateAutoRoute(route: GeminiAuthRoute, reason: string): void {\n if (oauthSource !== 'auto' || autoActiveRoute === route) {\n return;\n }\n autoActiveRoute = route;\n log(` auth auto: active route=${route} (${reason})`);\n }\n\n function resetAutoRoute(route: GeminiAuthRoute, reason: string): void {\n if (oauthSource !== 'auto' || autoActiveRoute !== route) {\n return;\n }\n autoActiveRoute = undefined;\n log(` auth auto: reset route=${route} (${reason})`);\n }\n\n async function authRoutes(includeAntigravity: boolean): Promise<GeminiAuthRoute[]> {\n if (oauthSource === 'gemini-cli') {\n return [await geminiCliRoute()];\n }\n if (oauthSource === 'antigravity') {\n if (!(await loadOAuthCredentials('antigravity'))) {\n throw new Error('No Antigravity OAuth credentials found in the OS keychain.');\n }\n return ['antigravity'];\n }\n if (autoActiveRoute === 'antigravity') {\n try {\n if (await loadOAuthCredentials('antigravity')) {\n return ['antigravity'];\n }\n resetAutoRoute('antigravity', 'credentials unavailable');\n } catch (err) {\n resetAutoRoute(\n 'antigravity',\n err instanceof Error ? err.message : 'credentials unavailable',\n );\n }\n }\n const routes: GeminiAuthRoute[] = [];\n try {\n routes.push(await geminiCliRoute());\n } catch (err) {\n log(\n ` auth auto: Gemini CLI unavailable (${err instanceof Error ? err.message : String(err)})`,\n );\n }\n if (includeAntigravity) {\n // A custom Code Assist endpoint is commonly an isolated test/dev server.\n // Do not leak a real desktop keychain credential into it unless the\n // operator also supplied the matching portable Antigravity credential.\n if (opts.codeAssistUpstream && !opts.antigravityOAuthFile) {\n if (routes.length === 0) {\n throw new Error(\n 'Antigravity auto-discovery is disabled for a custom Code Assist endpoint; provide antigravityOAuthFile.',\n );\n }\n return [...new Set(routes)];\n }\n try {\n if (await loadOAuthCredentials('antigravity')) {\n routes.push('antigravity');\n }\n } catch (err) {\n log(\n ` auth auto: Antigravity unavailable (${err instanceof Error ? err.message : String(err)})`,\n );\n }\n }\n if (routes.length === 0 && !includeAntigravity) {\n return authRoutes(true);\n }\n if (routes.length === 0) {\n throw new Error('No usable Gemini CLI or Antigravity credential was found.');\n }\n return [...new Set(routes)];\n }\n\n async function currentOAuthToken(source: Exclude<GeminiOAuthSource, 'auto'>): Promise<string> {\n const credentials = await loadOAuthCredentials(source);\n if (!credentials) {\n throw new Error(\n source === 'antigravity'\n ? 'No Antigravity OAuth credentials found in the OS keychain.'\n : 'No Gemini OAuth credentials found in oauth_creds.json.',\n );\n }\n const expiresSoon = !credentials.expiry_date || credentials.expiry_date < Date.now() + 60_000;\n if (!expiresSoon && credentials.access_token) {\n return credentials.access_token;\n }\n if (!credentials.refresh_token) {\n throw new Error('Gemini OAuth access token expired and no refresh token is available.');\n }\n const existing = oauthRefreshInflight.get(source);\n if (existing) {\n return existing;\n }\n const refresh = refreshOAuthToken(source, credentials).finally(() => {\n oauthRefreshInflight.delete(source);\n });\n oauthRefreshInflight.set(source, refresh);\n return refresh;\n }\n\n async function refreshOAuthToken(\n source: Exclude<GeminiOAuthSource, 'auto'>,\n initial: GeminiOAuthCredentials,\n ): Promise<string> {\n const refresh = async (credentials: GeminiOAuthCredentials): Promise<string> => {\n if (!credentials.refresh_token) {\n throw new Error('Gemini OAuth access token expired and no refresh token is available.');\n }\n const state = oauthState(source);\n const response = await fetch('https://oauth2.googleapis.com/token', {\n method: 'POST',\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n client_id: oauthProfile(source).clientId,\n client_secret: oauthProfile(source).clientSecret,\n refresh_token: credentials.refresh_token,\n grant_type: 'refresh_token',\n }),\n signal: AbortSignal.timeout(30_000),\n });\n const body = (await response.json().catch(() => ({}))) as {\n access_token?: string;\n expires_in?: number;\n token_type?: string;\n error?: string;\n error_description?: string;\n };\n if (!response.ok || !body.access_token) {\n throw new GeminiUpstreamError(\n response.status || 401,\n response.headers,\n body.error_description || body.error || 'Gemini OAuth refresh failed',\n );\n }\n const refreshed: GeminiOAuthCredentials = {\n ...credentials,\n access_token: body.access_token,\n token_type: body.token_type ?? credentials.token_type ?? 'Bearer',\n expiry_date: Date.now() + (body.expires_in ?? 3600) * 1000,\n };\n state.credentials = refreshed;\n if (source === 'gemini-cli') {\n await writeJsonFile(join(opts.authDir, 'oauth_creds.json'), refreshed, 0o600);\n }\n return refreshed.access_token!;\n };\n\n if (source !== 'gemini-cli') {\n return refresh(initial);\n }\n\n const authPath = join(opts.authDir, 'oauth_creds.json');\n return withFileLock(\n `${authPath}.refresh.lock`,\n async () => {\n // Another process may have rotated the refresh token while this\n // request waited. Reload under the lock and reuse the fresh access\n // token instead of redeeming the old token again.\n const state = oauthState(source);\n state.credentials = undefined;\n const latest = await loadOAuthCredentials(source);\n if (!latest) {\n throw new Error('No Gemini OAuth credentials found in oauth_creds.json.');\n }\n const expiresSoon = !latest.expiry_date || latest.expiry_date < Date.now() + 60_000;\n if (!expiresSoon && latest.access_token) {\n return latest.access_token;\n }\n if (!latest.refresh_token) {\n throw new Error('Gemini OAuth access token expired and no refresh token is available.');\n }\n return refresh(latest);\n },\n { resource: `Gemini OAuth refresh ${authPath}` },\n );\n }\n\n async function resolveOAuthProject(\n source: Exclude<GeminiOAuthSource, 'auto'>,\n token: string,\n ): Promise<string | undefined> {\n const state = oauthState(source);\n const profile = oauthProfile(source);\n if (state.project) {\n return state.project;\n }\n const response = await fetch(`${codeAssistBase(source)}/v1internal:loadCodeAssist`, {\n method: 'POST',\n headers: {\n authorization: `Bearer ${token}`,\n 'content-type': 'application/json',\n ...(profile.userAgent ? { 'user-agent': profile.userAgent } : {}),\n },\n body: JSON.stringify({\n metadata:\n profile.ideType === 'ANTIGRAVITY'\n ? { ideType: profile.ideType }\n : {\n ideType: profile.ideType,\n platform: process.platform === 'darwin' ? 'DARWIN_ARM64' : 'PLATFORM_UNSPECIFIED',\n pluginType: 'GEMINI',\n },\n }),\n signal: AbortSignal.timeout(30_000),\n });\n const body = (await response.json().catch(() => ({}))) as {\n cloudaicompanionProject?: string;\n currentTier?: { id?: string };\n error?: { message?: string };\n };\n if (!response.ok) {\n throw new GeminiUpstreamError(\n response.status,\n response.headers,\n body.error?.message ?? `Code Assist loadCodeAssist HTTP ${response.status}`,\n );\n }\n state.project = body.cloudaicompanionProject || undefined;\n log(\n ` OAuth ${source} tier=${body.currentTier?.id ?? 'unknown'} project=${state.project ?? 'managed'}`,\n );\n return state.project;\n }\n\n async function refreshModelCatalog(route: GeminiAuthRoute): Promise<GeminiModelCatalog> {\n const existing = modelCatalogInflight.get(route);\n if (existing) {\n return existing;\n }\n const inflight = (async () => {\n let catalog: GeminiModelCatalog;\n if (route !== 'api-key') {\n const token = await currentOAuthToken(route);\n const project = await resolveOAuthProject(route, token);\n const profile = oauthProfile(route);\n catalog = await listGeminiModelsFromCodeAssist(\n codeAssistBase(route),\n token,\n project,\n log,\n profile.userAgent,\n );\n } else {\n catalog = {\n models: (await listGeminiModelsFromGoogle(upstream, (await currentKey()).key, log)).map(\n (id) => ({\n id,\n }),\n ),\n };\n }\n catalog = {\n ...catalog,\n models: catalog.models.toSorted((a, b) => compareGeminiModelIds(a.id, b.id)),\n };\n modelCatalogs.set(route, { value: catalog, fetchedAt: Date.now() });\n modelCatalogFailures.delete(route);\n log(` list models ← ${catalog.models.length} auth=${route}`);\n return catalog;\n })()\n .catch((error: unknown) => {\n modelCatalogFailures.set(route, { error, fetchedAt: Date.now() });\n resetAutoRoute(route, 'model catalog unavailable');\n throw error;\n })\n .finally(() => {\n modelCatalogInflight.delete(route);\n });\n modelCatalogInflight.set(route, inflight);\n return inflight;\n }\n\n async function liveModelCatalog(route: GeminiAuthRoute): Promise<GeminiModelCatalog> {\n const cached = modelCatalogs.get(route);\n if (cached && Date.now() - cached.fetchedAt < MODEL_CATALOG_TTL_MS) {\n return cached.value;\n }\n const failed = modelCatalogFailures.get(route);\n if (failed && Date.now() - failed.fetchedAt < MODEL_CATALOG_FAILURE_TTL_MS) {\n throw failed.error;\n }\n return refreshModelCatalog(route);\n }\n\n async function resolveRequestModel(\n requested: string | undefined,\n effort?: ReasoningEffort,\n ): Promise<RoutedModelResolution> {\n const primaryRoutes = await authRoutes(false);\n let passthrough: RoutedModelResolution | undefined;\n let lastError: unknown;\n let primaryEntitlementRejected = false;\n for (const route of primaryRoutes) {\n try {\n const catalog = await liveModelCatalog(route);\n const resolution = resolveGeminiModel(requested, catalog, effort);\n if (isCatalogResolution(resolution, catalog)) {\n return { ...resolution, route };\n }\n passthrough ??= { ...resolution, route };\n } catch (err) {\n lastError = err;\n if (route !== 'antigravity' && isAuthEntitlementRejection(err)) {\n primaryEntitlementRejected = true;\n }\n const resolution = resolveGeminiModel(requested, [], effort);\n if (resolution.id) {\n passthrough ??= { ...resolution, route };\n }\n }\n }\n\n // Only touch the app credential when CLI did not prove model entitlement.\n if (oauthSource === 'auto' && !opts.apiKey) {\n const fallbackRoutes = (await authRoutes(true)).filter(\n (route) => !primaryRoutes.includes(route),\n );\n for (const route of fallbackRoutes) {\n try {\n const catalog = await liveModelCatalog(route);\n const resolution = resolveGeminiModel(requested, catalog, effort);\n if (route === 'antigravity' && primaryEntitlementRejected) {\n activateAutoRoute(route, 'Gemini CLI entitlement rejected');\n }\n if (isCatalogResolution(resolution, catalog)) {\n log(` auth auto: ${requested ?? '(default)'} resolved via ${route}`);\n return { ...resolution, route };\n }\n if (primaryEntitlementRejected && resolution.id) {\n passthrough = { ...resolution, route };\n } else {\n passthrough ??= { ...resolution, route };\n }\n } catch (err) {\n lastError = err;\n }\n }\n }\n if (passthrough?.id) {\n if (lastError) {\n log(\n ` model catalog unavailable; forwarding ${passthrough.id} unchanged (${lastError instanceof Error ? lastError.message : String(lastError)})`,\n );\n }\n return passthrough;\n }\n throw lastError ?? new Error('No model could be discovered for the available credentials.');\n }\n\n async function handle(req: IncomingMessage, res: ServerResponse): Promise<void> {\n const url = normalizeLocalApiUrl(req.url ?? '/');\n const path = url.split('?')[0] ?? '/';\n const method = req.method ?? 'GET';\n\n if (!checkCors(req, res)) {\n return;\n }\n if (method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n if ((method === 'GET' || method === 'HEAD') && (path === '/' || path === '/health')) {\n json(res, 200, {\n ok: true,\n service: 'anypick-gemini-proxy',\n compatibility: COMPAT_LABEL,\n instanceId: process.env.ANYPICK_INSTANCE_ID ?? null,\n // Health is process/config state only; do not read the key here.\n auth: 'ok',\n clients: {\n codex: 'OPENAI_BASE_URL → /v1/responses',\n claude: 'ANTHROPIC_BASE_URL → /v1/messages',\n },\n endpoints: {\n openai: ['/v1/chat/completions', '/v1/responses', '/v1/models'],\n anthropic: ['/v1/messages'],\n },\n oauthSource,\n upstream,\n });\n return;\n }\n\n if (method === 'GET' && path === '/v1/models') {\n if (!requireProxyAuth(req, res, proxyToken)) {\n return;\n }\n await handleListModels(res);\n return;\n }\n\n if (method === 'POST' && path === '/v1/chat/completions') {\n if (!requireProxyAuth(req, res, proxyToken)) {\n return;\n }\n await handleOpenAI(req, res);\n return;\n }\n\n if (method === 'POST' && path === '/v1/responses') {\n if (!requireProxyAuth(req, res, proxyToken)) {\n return;\n }\n await handleResponses(req, res);\n return;\n }\n\n if (method === 'POST' && path === '/v1/messages') {\n if (!requireProxyAuth(req, res, proxyToken)) {\n return;\n }\n await handleAnthropic(req, res);\n return;\n }\n\n json(res, 404, {\n error: {\n message: `Not found: ${path}. Codex: /v1/responses · Claude: /v1/messages`,\n type: 'not_found_error',\n },\n });\n }\n\n /** List only models discovered for the active API-key/OAuth account. */\n async function handleListModels(res: ServerResponse): Promise<void> {\n try {\n const routes = await authRoutes(oauthSource === 'auto' && !opts.apiKey);\n const discovered: Array<{ route: GeminiAuthRoute; catalog: GeminiModelCatalog }> = [];\n let lastError: unknown;\n let primaryEntitlementRejected = false;\n for (const route of routes) {\n try {\n const catalog = await liveModelCatalog(route);\n discovered.push({ route, catalog });\n if (route === 'antigravity' && primaryEntitlementRejected) {\n activateAutoRoute(route, 'Gemini CLI entitlement rejected');\n }\n } catch (err) {\n lastError = err;\n if (route !== 'antigravity' && isAuthEntitlementRejection(err)) {\n primaryEntitlementRejected = true;\n }\n log(` list models auth=${route} failed; trying next source`);\n }\n }\n if (discovered.length === 0) {\n throw lastError ?? new Error('No auth source returned a Gemini model catalog.');\n }\n const models = new Map<\n string,\n { descriptor: GeminiModelDescriptor; route: GeminiAuthRoute }\n >();\n for (const { route, catalog } of discovered) {\n for (const descriptor of catalog.models) {\n if (!models.has(descriptor.id)) {\n models.set(descriptor.id, { descriptor, route });\n }\n }\n }\n json(res, 200, {\n object: 'list',\n data: [...models.values()].map(({ descriptor, route }) => {\n const value: {\n id: string;\n object: 'model';\n owned_by: string;\n display_name?: string;\n } = {\n id: descriptor.id,\n object: 'model',\n owned_by: route === 'api-key' ? 'google' : 'google-code-assist',\n };\n if (descriptor.displayName) {\n value.display_name = descriptor.displayName;\n }\n return value;\n }),\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log(` list models ✗ ${msg}`);\n // Fail honestly — do not invent model ids\n json(res, 502, {\n error: {\n message: `Failed to list Gemini models from Google: ${msg}`,\n type: 'proxy_error',\n },\n });\n }\n }\n\n async function handleOpenAI(req: IncomingMessage, res: ServerResponse): Promise<void> {\n log('POST /v1/chat/completions → Gemini');\n try {\n const raw = await readBody(req);\n let body: OpenAIChatRequest;\n try {\n body = JSON.parse(raw.toString('utf8') || '{}') as OpenAIChatRequest;\n } catch {\n json(res, 400, {\n error: { message: 'Invalid JSON body', type: 'invalid_request_error' },\n });\n return;\n }\n\n const modelEffort = reasoningIntentToModelEffort(reasoningFromOpenAI(body));\n const resolution = await resolveRequestModel(body.model, modelEffort);\n if (!resolution.id) {\n json(res, 400, {\n error: {\n message: 'model is required and no model could be discovered for this account',\n type: 'invalid_request_error',\n },\n });\n return;\n }\n const model = resolution.id;\n if (resolution.remapped) {\n log(\n ` model ${body.model ?? '(empty)'} → ${model} (${resolution.reason ?? 'catalog'}${modelEffort ? `, effort=${modelEffort}` : ''})`,\n );\n }\n const geminiBody = openAIToGemini(body, model);\n if (body.stream) {\n // Non-stream call then fake single SSE chunk for basic clients\n const result = await callGeminiWithAutoFallback(\n body.model,\n resolution,\n geminiBody,\n false,\n modelEffort,\n );\n const responseModel = result.resolution.id;\n const openai = geminiToOpenAI(result.response, responseModel);\n if (openai.error) {\n json(res, 502, openai);\n return;\n }\n res.writeHead(200, {\n 'content-type': 'text/event-stream; charset=utf-8',\n 'cache-control': 'no-cache',\n connection: 'keep-alive',\n });\n const content = openai.choices?.[0]?.message?.content ?? '';\n const reasoning = openai.choices?.[0]?.message?.reasoning_content ?? '';\n if (reasoning) {\n res.write(\n `data: ${JSON.stringify({\n id: openai.id,\n object: 'chat.completion.chunk',\n model: responseModel,\n choices: [\n {\n index: 0,\n delta: { role: 'assistant', reasoning_content: reasoning },\n finish_reason: null,\n },\n ],\n })}\\n\\n`,\n );\n }\n res.write(\n `data: ${JSON.stringify({\n id: openai.id,\n object: 'chat.completion.chunk',\n model: responseModel,\n choices: [{ index: 0, delta: { role: 'assistant', content }, finish_reason: null }],\n })}\\n\\n`,\n );\n res.write(\n `data: ${JSON.stringify({\n id: openai.id,\n object: 'chat.completion.chunk',\n model: responseModel,\n choices: [{ index: 0, delta: {}, finish_reason: 'stop' }],\n })}\\n\\n`,\n );\n res.write('data: [DONE]\\n\\n');\n res.end();\n return;\n }\n\n const result = await callGeminiWithAutoFallback(\n body.model,\n resolution,\n geminiBody,\n false,\n modelEffort,\n );\n const openai = geminiToOpenAI(result.response, result.resolution.id);\n if (openai.error) {\n json(res, 502, openai);\n return;\n }\n json(res, 200, openai);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log(` ✗ ${msg}`);\n writeGeminiError(res, err, msg);\n }\n }\n\n async function handleAnthropic(req: IncomingMessage, res: ServerResponse): Promise<void> {\n log('POST /v1/messages → Gemini');\n try {\n const raw = await readBody(req);\n let body: AnthropicMessageRequest;\n try {\n body = JSON.parse(raw.toString('utf8') || '{}') as AnthropicMessageRequest;\n } catch {\n json(res, 400, {\n type: 'error',\n error: { type: 'invalid_request_error', message: 'Invalid JSON body' },\n });\n return;\n }\n if (!body.model) {\n json(res, 400, {\n type: 'error',\n error: { type: 'invalid_request_error', message: 'model is required' },\n });\n return;\n }\n if (body.max_tokens == null) {\n body.max_tokens = 4096;\n }\n\n const modelEffort = reasoningIntentToModelEffort(reasoningFromAnthropic(body));\n const resolution = await resolveRequestModel(body.model, modelEffort);\n if (!resolution.id) {\n json(res, 400, {\n type: 'error',\n error: {\n type: 'invalid_request_error',\n message: 'No matching Gemini model is available for this account.',\n },\n });\n return;\n }\n if (resolution.remapped) {\n log(\n ` model ${body.model} → ${resolution.id} (${resolution.reason ?? 'catalog'}${modelEffort ? `, effort=${modelEffort}` : ''})`,\n );\n }\n const { gemini } = anthropicToGemini(body, resolution.id);\n const result = await callGeminiWithAutoFallback(\n body.model,\n resolution,\n gemini,\n false,\n modelEffort,\n );\n const responseModel = result.resolution.id;\n const anthropic = geminiToAnthropic(result.response, responseModel);\n if ('type' in anthropic && anthropic.type === 'error') {\n json(res, 502, anthropic);\n return;\n }\n\n if (body.stream) {\n // Minimal Anthropic SSE from non-stream Gemini response\n const msg = anthropic;\n res.writeHead(200, {\n 'content-type': 'text/event-stream; charset=utf-8',\n 'cache-control': 'no-cache',\n connection: 'keep-alive',\n });\n const id = msg.id ?? `msg_${Date.now()}`;\n writeSse(res, 'message_start', {\n type: 'message_start',\n message: {\n id,\n type: 'message',\n role: 'assistant',\n model: responseModel,\n content: [],\n stop_reason: null,\n stop_sequence: null,\n usage: { input_tokens: msg.usage?.input_tokens ?? 0, output_tokens: 0 },\n },\n });\n msg.content.forEach((block, index) => {\n if (block.type === 'thinking') {\n writeSse(res, 'content_block_start', {\n type: 'content_block_start',\n index,\n content_block: {\n type: 'thinking',\n thinking: '',\n signature: '',\n },\n });\n if (block.thinking) {\n writeSse(res, 'content_block_delta', {\n type: 'content_block_delta',\n index,\n delta: { type: 'thinking_delta', thinking: block.thinking },\n });\n }\n if (block.signature) {\n writeSse(res, 'content_block_delta', {\n type: 'content_block_delta',\n index,\n delta: { type: 'signature_delta', signature: block.signature },\n });\n }\n } else if (block.type === 'tool_use') {\n writeSse(res, 'content_block_start', {\n type: 'content_block_start',\n index,\n content_block: {\n type: 'tool_use',\n id: block.id,\n name: block.name,\n input: {},\n ...(block.thought_signature ? { thought_signature: block.thought_signature } : {}),\n },\n });\n writeSse(res, 'content_block_delta', {\n type: 'content_block_delta',\n index,\n delta: { type: 'input_json_delta', partial_json: JSON.stringify(block.input ?? {}) },\n });\n } else if (block.type === 'redacted_thinking') {\n writeSse(res, 'content_block_start', {\n type: 'content_block_start',\n index,\n content_block: block,\n });\n } else {\n writeSse(res, 'content_block_start', {\n type: 'content_block_start',\n index,\n content_block: { type: 'text', text: '' },\n });\n if (block.text) {\n writeSse(res, 'content_block_delta', {\n type: 'content_block_delta',\n index,\n delta: { type: 'text_delta', text: block.text },\n });\n }\n }\n writeSse(res, 'content_block_stop', { type: 'content_block_stop', index });\n });\n writeSse(res, 'message_delta', {\n type: 'message_delta',\n delta: { stop_reason: msg.stop_reason, stop_sequence: msg.stop_sequence },\n usage: { output_tokens: msg.usage?.output_tokens ?? 0 },\n });\n writeSse(res, 'message_stop', { type: 'message_stop' });\n res.end();\n return;\n }\n\n json(res, 200, anthropic);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log(` ✗ ${msg}`);\n writeGeminiError(res, err, msg, true);\n }\n }\n\n async function handleResponses(req: IncomingMessage, res: ServerResponse): Promise<void> {\n log('POST /v1/responses → Gemini');\n try {\n const raw = await readBody(req);\n let body: OpenAIResponsesRequest;\n try {\n body = JSON.parse(raw.toString('utf8') || '{}') as OpenAIResponsesRequest;\n } catch {\n json(res, 400, {\n error: { message: 'Invalid JSON body', type: 'invalid_request_error' },\n });\n return;\n }\n const modelEffort = reasoningIntentToModelEffort(reasoningFromOpenAI(body));\n const resolution = await resolveRequestModel(body.model, modelEffort);\n if (!resolution.id) {\n json(res, 400, {\n error: {\n message: 'model is required and no model could be discovered for this account',\n type: 'invalid_request_error',\n },\n });\n return;\n }\n if (resolution.remapped) {\n log(\n ` model ${body.model ?? '(empty)'} → ${resolution.id} (${resolution.reason ?? 'catalog'}${modelEffort ? `, effort=${modelEffort}` : ''})`,\n );\n }\n const geminiBody = openAIResponsesToGemini(body, resolution.id);\n const result = await callGeminiWithAutoFallback(\n body.model,\n resolution,\n geminiBody,\n false,\n modelEffort,\n );\n const response = geminiToOpenAIResponses(result.response, result.resolution.id);\n if (body.stream) {\n writeOpenAIResponsesStream(res, response);\n return;\n }\n json(res, 200, response);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log(` ✗ ${msg}`);\n writeGeminiError(res, err, msg);\n }\n }\n\n async function callGeminiWithAutoFallback(\n requested: string | undefined,\n resolution: RoutedModelResolution,\n body: GeminiGenerateRequest,\n stream: boolean,\n effort?: ReasoningEffort,\n ): Promise<{ response: GeminiGenerateResponse; resolution: RoutedModelResolution }> {\n try {\n return {\n response: await callGemini(resolution.route, resolution.id, body, stream),\n resolution,\n };\n } catch (err) {\n if (\n resolution.route === 'antigravity' &&\n err instanceof GeminiUpstreamError &&\n [401, 403, 404].includes(err.status)\n ) {\n resetAutoRoute('antigravity', `upstream returned ${err.status}`);\n }\n const canFallback =\n oauthSource === 'auto' &&\n !opts.apiKey &&\n resolution.route !== 'antigravity' &&\n err instanceof GeminiUpstreamError &&\n [401, 403, 404].includes(err.status);\n if (!canFallback) {\n throw err;\n }\n const routes = await authRoutes(true);\n if (!routes.includes('antigravity')) {\n throw err;\n }\n let fallback: RoutedModelResolution;\n try {\n const catalog = await liveModelCatalog('antigravity');\n fallback = {\n ...resolveGeminiModel(requested, catalog, effort),\n route: 'antigravity',\n };\n } catch {\n fallback = {\n ...resolveGeminiModel(requested, [], effort),\n route: 'antigravity',\n };\n }\n if (!fallback.id) {\n throw err;\n }\n log(\n ` auth auto: ${resolution.route} returned ${err.status}; retrying ${requested ?? resolution.id} via antigravity as ${fallback.id}`,\n );\n const response = await callGemini(fallback.route, fallback.id, body, stream);\n if ([401, 403].includes(err.status)) {\n activateAutoRoute('antigravity', `Gemini CLI returned ${err.status}`);\n }\n return {\n response,\n resolution: fallback,\n };\n }\n }\n\n async function callGemini(\n route: GeminiAuthRoute,\n model: string,\n body: GeminiGenerateRequest,\n stream: boolean,\n ): Promise<GeminiGenerateResponse> {\n const action = stream ? 'streamGenerateContent' : 'generateContent';\n const keyMode = route === 'api-key';\n const upstreamModel = model;\n const apiKeyCandidates = keyMode ? await quotaGuard.ordered(await loadKeyRing()) : [];\n const oauthToken = keyMode ? undefined : await currentOAuthToken(route);\n const target = keyMode\n ? `${upstream}/v1beta/models/${encodeURIComponent(upstreamModel)}:${action}`\n : `${codeAssistBase(route)}/v1internal:${action}`;\n const routeKey = `gemini:${route}:${upstreamModel}`;\n const cooling = cooldowns.remainingMs(routeKey);\n if (cooling > 0) {\n throw new GeminiUpstreamError(\n 429,\n new Headers({ 'retry-after': String(Math.ceil(cooling / 1000)) }),\n 'Gemini route is cooling down after a rate limit.',\n );\n }\n const thinking = body.generationConfig?.thinkingConfig;\n const thinkingLog = thinking?.thinkingLevel\n ? ` thinking=${thinking.thinkingLevel.toLowerCase()}`\n : thinking?.thinkingBudget != null\n ? ` thinkingBudget=${thinking.thinkingBudget}`\n : '';\n log(` → Gemini ${upstreamModel} ${action} auth=${route}${thinkingLog}`);\n const requestBody = keyMode\n ? body\n : {\n model: upstreamModel,\n project: await resolveOAuthProject(route, oauthToken!),\n user_prompt_id: randomUUID(),\n request: { ...body, session_id: proxySessionId },\n };\n const candidates: Array<GeminiApiKey | undefined> = keyMode ? apiKeyCandidates : [undefined];\n let lastQuotaError: GeminiUpstreamError | undefined;\n for (const [index, candidate] of candidates.entries()) {\n const token = candidate?.key ?? oauthToken!;\n let upstreamRes: Response;\n try {\n upstreamRes = await fetch(target, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(keyMode\n ? { 'x-goog-api-key': token }\n : {\n authorization: `Bearer ${token}`,\n ...(oauthProfile(route).userAgent\n ? { 'user-agent': oauthProfile(route).userAgent }\n : {}),\n }),\n },\n body: JSON.stringify(requestBody),\n signal: AbortSignal.timeout(600_000),\n redirect: 'manual',\n });\n } catch (err) {\n throw new GeminiUpstreamError(\n 502,\n undefined,\n `Gemini network error: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n const text = await upstreamRes.text();\n log(` ← ${upstreamRes.status}`);\n if (!upstreamRes.ok) {\n const failure = classifyUpstreamFailure(upstreamRes.status, upstreamRes.headers, text);\n const credentialQuota = isCredentialQuotaFailure(\n upstreamRes.status,\n upstreamRes.headers,\n text,\n );\n if (failure.retryAfterMs && !credentialQuota) {\n cooldowns.set(routeKey, failure.retryAfterMs);\n }\n const upstreamError = new GeminiUpstreamError(\n upstreamRes.status,\n upstreamRes.headers,\n extractGeminiErrorMessage(text, upstreamRes.status),\n text,\n );\n const next = candidates[index + 1];\n if (keyMode && quotaGuard.enabled && next && credentialQuota) {\n await quotaGuard.exhausted(\n candidate?.accountName,\n next.accountName,\n failure.retryAfterMs,\n );\n log(\n ` quota guard: ${candidate?.accountName ?? 'current key'} cooling; retrying pool member`,\n );\n lastQuotaError = upstreamError;\n continue;\n }\n if (!keyMode && upstreamRes.status === 404) {\n // Force the next alias/default resolution to re-read account availability.\n modelCatalogs.delete(route);\n modelCatalogFailures.delete(route);\n }\n throw upstreamError;\n }\n await quotaGuard.activate(candidate?.accountName);\n try {\n const parsed = JSON.parse(text) as GeminiGenerateResponse & {\n response?: GeminiGenerateResponse;\n };\n return keyMode ? parsed : (parsed.response ?? parsed);\n } catch {\n throw new GeminiUpstreamError(\n 502,\n upstreamRes.headers,\n `Gemini returned non-JSON response: ${text.slice(0, 300)}`,\n text,\n );\n }\n }\n throw lastQuotaError ?? new GeminiUpstreamError(503, undefined, 'No eligible pool account.');\n }\n\n return server;\n}\n\nexport async function listenGeminiProxy(\n opts: GeminiProxyServerOptions,\n): Promise<{ endpoint: string; server: Server }> {\n const server = createGeminiProxyServer(opts);\n await new Promise<void>((resolve, reject) => {\n server.once('error', reject);\n server.listen(opts.port, opts.host, () => resolve());\n });\n const addr = server.address();\n const port = addr && typeof addr === 'object' ? addr.port : opts.port;\n const endpoint = `http://${opts.host}:${port}`;\n return { endpoint, server };\n}\n\nfunction checkCors(req: IncomingMessage, res: ServerResponse): boolean {\n const origin = req.headers.origin;\n if (origin) {\n try {\n const parsed = new URL(origin);\n const loopback =\n (parsed.hostname === 'localhost' ||\n parsed.hostname === '127.0.0.1' ||\n parsed.hostname === '[::1]') &&\n (parsed.protocol === 'http:' || parsed.protocol === 'https:');\n if (!loopback) {\n json(res, 403, {\n error: {\n type: 'forbidden_origin',\n message: 'Only loopback browser origins are allowed.',\n },\n });\n return false;\n }\n res.setHeader('access-control-allow-origin', origin);\n res.setHeader('vary', 'Origin');\n } catch {\n json(res, 403, {\n error: { type: 'forbidden_origin', message: 'Invalid browser origin.' },\n });\n return false;\n }\n }\n res.setHeader('access-control-allow-methods', 'GET,POST,OPTIONS');\n res.setHeader(\n 'access-control-allow-headers',\n 'content-type,authorization,x-api-key,anthropic-version,anthropic-beta',\n );\n return true;\n}\n\nfunction json(res: ServerResponse, status: number, body: unknown): void {\n const payload = Buffer.from(JSON.stringify(body), 'utf8');\n res.writeHead(status, {\n 'content-type': 'application/json; charset=utf-8',\n 'content-length': payload.byteLength,\n });\n res.end(payload);\n}\n\nfunction writeSse(res: ServerResponse, event: string, data: unknown): void {\n res.write(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`);\n}\n\n/** Emit the minimal complete Responses SSE lifecycle consumed by Codex. */\nfunction writeOpenAIResponsesStream(res: ServerResponse, response: OpenAIResponsesResponse): void {\n res.writeHead(200, {\n 'content-type': 'text/event-stream; charset=utf-8',\n 'cache-control': 'no-cache, no-transform',\n connection: 'keep-alive',\n });\n let sequence = 0;\n const emit = (type: string, payload: Record<string, unknown>) => {\n writeSse(res, type, { type, sequence_number: sequence++, ...payload });\n };\n const inProgressResponse = {\n ...response,\n status: 'in_progress',\n output: [],\n usage: null,\n };\n emit('response.created', { response: inProgressResponse });\n emit('response.in_progress', { response: inProgressResponse });\n\n response.output.forEach((item, outputIndex) => {\n const addedItem: Record<string, unknown> = {\n ...item,\n status: 'in_progress',\n };\n if (item.type === 'reasoning') {\n addedItem.summary = [];\n } else if (item.type === 'message') {\n addedItem.content = [];\n } else if (item.type === 'function_call') {\n addedItem.arguments = '';\n }\n emit('response.output_item.added', {\n output_index: outputIndex,\n item: addedItem,\n });\n\n if (item.type === 'reasoning') {\n (item.summary ?? []).forEach((part, summaryIndex) => {\n emit('response.reasoning_summary_part.added', {\n item_id: item.id,\n output_index: outputIndex,\n summary_index: summaryIndex,\n part: { type: 'summary_text', text: '' },\n });\n if (part.text) {\n emit('response.reasoning_summary_text.delta', {\n item_id: item.id,\n output_index: outputIndex,\n summary_index: summaryIndex,\n delta: part.text,\n });\n }\n emit('response.reasoning_summary_text.done', {\n item_id: item.id,\n output_index: outputIndex,\n summary_index: summaryIndex,\n text: part.text,\n });\n emit('response.reasoning_summary_part.done', {\n item_id: item.id,\n output_index: outputIndex,\n summary_index: summaryIndex,\n part,\n });\n });\n } else if (item.type === 'message') {\n (item.content ?? []).forEach((part, contentIndex) => {\n const emptyPart = { ...part, text: '' };\n emit('response.content_part.added', {\n item_id: item.id,\n output_index: outputIndex,\n content_index: contentIndex,\n part: emptyPart,\n });\n if (part.text) {\n emit('response.output_text.delta', {\n item_id: item.id,\n output_index: outputIndex,\n content_index: contentIndex,\n delta: part.text,\n logprobs: [],\n });\n }\n emit('response.output_text.done', {\n item_id: item.id,\n output_index: outputIndex,\n content_index: contentIndex,\n text: part.text,\n logprobs: [],\n });\n emit('response.content_part.done', {\n item_id: item.id,\n output_index: outputIndex,\n content_index: contentIndex,\n part,\n });\n });\n } else if (item.type === 'function_call') {\n if (item.arguments) {\n emit('response.function_call_arguments.delta', {\n item_id: item.id,\n output_index: outputIndex,\n delta: item.arguments,\n });\n }\n emit('response.function_call_arguments.done', {\n item_id: item.id,\n output_index: outputIndex,\n arguments: item.arguments ?? '',\n });\n }\n emit('response.output_item.done', { output_index: outputIndex, item });\n });\n\n emit('response.completed', { response });\n res.end();\n}\n\nclass GeminiUpstreamError extends Error {\n constructor(\n readonly status: number,\n readonly headers?: Headers,\n message = 'Gemini upstream error',\n readonly body?: string,\n ) {\n super(message);\n this.name = 'GeminiUpstreamError';\n }\n}\n\nfunction extractGeminiErrorMessage(body: string, status: number): string {\n try {\n const parsed = JSON.parse(body) as { error?: { message?: string }; message?: string };\n return parsed.error?.message ?? parsed.message ?? `Gemini upstream returned HTTP ${status}`;\n } catch {\n return body.slice(0, 500) || `Gemini upstream returned HTTP ${status}`;\n }\n}\n\nfunction writeGeminiError(\n res: ServerResponse,\n err: unknown,\n fallback: string,\n anthropic = false,\n): void {\n if (err instanceof GeminiUpstreamError) {\n const retryAfter = err.headers?.get('retry-after');\n const body = anthropic\n ? {\n type: 'error',\n error: {\n type: err.status === 429 ? 'rate_limit_error' : 'api_error',\n message: err.message,\n },\n }\n : {\n error: {\n type: err.status === 429 ? 'rate_limit_error' : 'api_error',\n message: err.message,\n },\n };\n const payload = JSON.stringify(body);\n res.writeHead(err.status, {\n 'content-type': 'application/json; charset=utf-8',\n 'content-length': Buffer.byteLength(payload),\n ...(retryAfter ? { 'retry-after': retryAfter } : {}),\n });\n res.end(payload);\n return;\n }\n json(\n res,\n 502,\n anthropic\n ? { type: 'error', error: { message: fallback, type: 'proxy_error' } }\n : { error: { message: fallback, type: 'proxy_error' } },\n );\n}\n\n/** Resolve API key from auth directory (snapshot or live ~/.gemini). */\nexport async function loadGeminiProxyApiKey(authDir: string): Promise<string | null> {\n const envFile = authDir.endsWith('.env') ? authDir : join(authDir, '.env');\n if (await pathExists(envFile)) {\n return (await readGeminiApiKeyFromEnvFile(envFile)) ?? null;\n }\n return null;\n}\n\n/**\n * Page through Google Generative Language ListModels.\n * Returns bare ids (no `models/` prefix) that support generateContent.\n */\nexport async function listGeminiModelsFromGoogle(\n upstream: string,\n apiKey: string,\n log: (line: string) => void = () => {},\n): Promise<string[]> {\n const base = upstream.replace(/\\/$/, '');\n const ids: string[] = [];\n const seen = new Set<string>();\n let pageToken: string | undefined;\n let pages = 0;\n const maxPages = 20;\n\n do {\n const url = new URL(`${base}/v1beta/models`);\n url.searchParams.set('key', apiKey);\n url.searchParams.set('pageSize', '100');\n if (pageToken) {\n url.searchParams.set('pageToken', pageToken);\n }\n\n const upstreamRes = await fetch(url.toString(), {\n method: 'GET',\n headers: { 'x-goog-api-key': apiKey, accept: 'application/json' },\n signal: AbortSignal.timeout(12_000),\n });\n if (!upstreamRes.ok) {\n const text = await upstreamRes.text().catch(() => '');\n throw new Error(\n `Google ListModels HTTP ${upstreamRes.status}${text ? `: ${text.slice(0, 200)}` : ''}`,\n );\n }\n\n const body = (await upstreamRes.json()) as {\n models?: Array<{ name?: string; supportedGenerationMethods?: string[] }>;\n nextPageToken?: string;\n };\n\n for (const m of body.models ?? []) {\n const name = m.name ?? '';\n const id = name.startsWith('models/') ? name.slice('models/'.length) : name;\n if (!id) {\n continue;\n }\n const methods = m.supportedGenerationMethods ?? [];\n if (methods.length && !methods.includes('generateContent')) {\n continue;\n }\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n ids.push(id);\n }\n\n pageToken = body.nextPageToken?.trim() || undefined;\n pages += 1;\n } while (pageToken && pages < maxPages);\n\n if (pages > 1) {\n log(` list models pages=${pages}`);\n }\n return ids;\n}\n\n/** Discover the account-scoped catalog exposed by Code Assist. */\nexport async function listGeminiModelsFromCodeAssist(\n upstream: string,\n accessToken: string,\n project: string | undefined,\n log: (line: string) => void = () => {},\n userAgent?: string,\n): Promise<GeminiModelCatalog> {\n const base = upstream.replace(/\\/$/, '');\n const headers = {\n authorization: `Bearer ${accessToken}`,\n 'content-type': 'application/json',\n accept: 'application/json',\n ...(userAgent ? { 'user-agent': userAgent } : {}),\n };\n const response = await fetch(`${base}/v1internal:fetchAvailableModels`, {\n method: 'POST',\n headers,\n body: JSON.stringify({ project: project ?? '' }),\n signal: AbortSignal.timeout(30_000),\n });\n const text = await response.text();\n if (response.ok) {\n let body: CodeAssistModelCatalogResponse;\n try {\n body = JSON.parse(text) as CodeAssistModelCatalogResponse;\n } catch {\n throw new Error(`Code Assist returned non-JSON model metadata: ${text.slice(0, 200)}`);\n }\n const catalog = parseCodeAssistModelCatalog(body);\n log(` Code Assist fetchAvailableModels models=${catalog.models.length}`);\n return catalog;\n }\n\n // Older Gemini CLI entitlements can deny fetchAvailableModels. Quota is a\n // partial fallback only: it supplies real ids but never proves that another\n // explicit id is unavailable.\n log(` Code Assist fetchAvailableModels HTTP ${response.status}; using quota metadata`);\n return listGeminiModelsFromCodeAssistQuota(base, project, headers, text);\n}\n\ninterface CodeAssistModelDetails {\n displayName?: unknown;\n recommended?: unknown;\n disabled?: unknown;\n apiProvider?: unknown;\n modelProvider?: unknown;\n}\n\ninterface CodeAssistModelCatalogResponse {\n models?: Record<string, CodeAssistModelDetails>;\n defaultAgentModelId?: unknown;\n agentModelSorts?: Array<{ groups?: Array<{ modelIds?: unknown[] }> }>;\n}\n\nfunction parseCodeAssistModelCatalog(body: CodeAssistModelCatalogResponse): GeminiModelCatalog {\n const models: GeminiModelDescriptor[] = [];\n for (const [rawId, details] of Object.entries(body.models ?? {})) {\n const id = bareModelId(rawId);\n if (!id || details.disabled === true) {\n continue;\n }\n const knownNonGeminiProvider =\n typeof details.apiProvider === 'string' &&\n details.apiProvider !== 'API_PROVIDER_GOOGLE_GEMINI';\n const knownNonGoogleModel =\n typeof details.modelProvider === 'string' &&\n details.modelProvider !== 'MODEL_PROVIDER_GOOGLE';\n if (knownNonGeminiProvider || knownNonGoogleModel) {\n continue;\n }\n models.push({\n id,\n ...(typeof details.displayName === 'string' ? { displayName: details.displayName } : {}),\n ...(details.recommended === true ? { recommended: true } : {}),\n });\n }\n\n const available = new Set(models.map((model) => model.id));\n const preferredModelIds = (body.agentModelSorts ?? [])\n .flatMap((sort) => sort.groups ?? [])\n .flatMap((group) => group.modelIds ?? [])\n .filter((id): id is string => typeof id === 'string')\n .map(bareModelId)\n .filter((id) => available.has(id));\n const defaultModelId =\n typeof body.defaultAgentModelId === 'string'\n ? bareModelId(body.defaultAgentModelId)\n : undefined;\n\n return {\n models,\n ...(defaultModelId && available.has(defaultModelId) ? { defaultModelId } : {}),\n ...(preferredModelIds.length ? { preferredModelIds: [...new Set(preferredModelIds)] } : {}),\n };\n}\n\nasync function listGeminiModelsFromCodeAssistQuota(\n base: string,\n project: string | undefined,\n headers: Record<string, string>,\n catalogError: string,\n): Promise<GeminiModelCatalog> {\n const response = await fetch(`${base}/v1internal:retrieveUserQuota`, {\n method: 'POST',\n headers,\n body: JSON.stringify({ project: project ?? '', userAgent: 'anypick-gemini-proxy' }),\n signal: AbortSignal.timeout(30_000),\n });\n const text = await response.text();\n if (!response.ok) {\n throw new Error(\n `Code Assist model discovery failed: fetchAvailableModels ${catalogError.slice(0, 120)}; ` +\n `retrieveUserQuota HTTP ${response.status}${text ? `: ${text.slice(0, 200)}` : ''}`,\n );\n }\n let body: {\n buckets?: Array<{ modelId?: unknown }>;\n models?: Array<{ id?: unknown; name?: unknown } | string>;\n };\n try {\n body = JSON.parse(text) as typeof body;\n } catch {\n throw new Error(`Code Assist returned non-JSON model metadata: ${text.slice(0, 200)}`);\n }\n const models: GeminiModelDescriptor[] = [];\n const add = (value: unknown) => {\n if (typeof value !== 'string') {\n return;\n }\n const id = bareModelId(value);\n if (id && !models.some((model) => model.id === id)) {\n models.push({ id });\n }\n };\n for (const bucket of body.buckets ?? []) {\n add(bucket.modelId);\n }\n // Accept a future richer response shape without requiring a proxy release.\n for (const model of body.models ?? []) {\n if (typeof model === 'string') {\n add(model);\n } else {\n add(model.id ?? model.name);\n }\n }\n return { models };\n}\n\nfunction bareModelId(value: string): string {\n const trimmed = value.trim();\n return trimmed.startsWith('models/') ? trimmed.slice('models/'.length) : trimmed;\n}\n\nfunction isCatalogResolution(\n resolution: GeminiModelResolution,\n catalog: GeminiModelCatalog,\n): boolean {\n return Boolean(resolution.id && catalog.models.some((model) => model.id === resolution.id));\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function resolveProxyMain(): string;
2
- //# sourceMappingURL=gemini-proxy-entry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-proxy-entry.d.ts","sourceRoot":"","sources":["../../src/providers/gemini-proxy-entry.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,IAAI,MAAM,CAWzC"}
@@ -1,16 +0,0 @@
1
- import { existsSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- //#region src/providers/gemini-proxy-entry.ts
5
- function resolveProxyMain() {
6
- const here = fileURLToPath(new URL(".", import.meta.url));
7
- const primary = join(here, "gemini-proxy", "main.js");
8
- if (existsSync(primary)) return primary;
9
- const fromSrc = join(here, "..", "..", "dist", "providers", "gemini-proxy", "main.js");
10
- if (existsSync(fromSrc)) return fromSrc;
11
- return primary;
12
- }
13
- //#endregion
14
- export { resolveProxyMain };
15
-
16
- //# sourceMappingURL=gemini-proxy-entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-proxy-entry.js","names":[],"sources":["../../src/providers/gemini-proxy-entry.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function resolveProxyMain(): string {\n const here = fileURLToPath(new URL('.', import.meta.url));\n const primary = join(here, 'gemini-proxy', 'main.js');\n if (existsSync(primary)) {\n return primary;\n }\n const fromSrc = join(here, '..', '..', 'dist', 'providers', 'gemini-proxy', 'main.js');\n if (existsSync(fromSrc)) {\n return fromSrc;\n }\n return primary;\n}\n"],"mappings":";;;;AAIA,SAAgB,mBAA2B;CACzC,MAAM,OAAO,cAAc,IAAI,IAAI,KAAK,OAAO,KAAK,GAAG,CAAC;CACxD,MAAM,UAAU,KAAK,MAAM,gBAAgB,SAAS;CACpD,IAAI,WAAW,OAAO,GACpB,OAAO;CAET,MAAM,UAAU,KAAK,MAAM,MAAM,MAAM,QAAQ,aAAa,gBAAgB,SAAS;CACrF,IAAI,WAAW,OAAO,GACpB,OAAO;CAET,OAAO;AACT"}
@@ -1,11 +0,0 @@
1
- import type { ProxyContext, ProxyHandle, ProxyStatus } from '../types.js';
2
- export interface GeminiProxyLifecycleOptions {
3
- liveDir: string;
4
- compatibility: string;
5
- defaultPort: number;
6
- }
7
- export declare function startGeminiProxy(ctx: ProxyContext, opts: GeminiProxyLifecycleOptions): Promise<ProxyHandle>;
8
- export declare function stopGeminiProxy(ctx: ProxyContext): Promise<void>;
9
- export declare function geminiProxyStatus(ctx: ProxyContext, compatibility: string, defaultPort: number): Promise<ProxyStatus>;
10
- export declare function readGeminiProxyLogs(ctx: ProxyContext, lines?: number): Promise<string>;
11
- //# sourceMappingURL=gemini-proxy-lifecycle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-proxy-lifecycle.d.ts","sourceRoot":"","sources":["../../src/providers/gemini-proxy-lifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAcvE,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,WAAW,CAAC,CAmLtB;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,YAAY,EACjB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,CAAC,CAkBtB;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAOxF"}
@@ -1,131 +0,0 @@
1
- import { AnyPickError } from "../utils/errors.js";
2
- import { ensureDir, pathExists } from "../utils/fs.js";
3
- import { waitForHttp } from "../utils/process/health.js";
4
- import { isProcessRunning, readPidFile, spawnDetached, stopPidFile } from "../utils/process/pid.js";
5
- import { assertLoopbackHost } from "../utils/network.js";
6
- import { readGeminiApiKeyFromEnvFile } from "./gemini-env.js";
7
- import { resolveProxyMain } from "./gemini-proxy-entry.js";
8
- import { join } from "node:path";
9
- import { readFile, writeFile } from "node:fs/promises";
10
- //#region src/providers/gemini-proxy-lifecycle.ts
11
- async function startGeminiProxy(ctx, opts) {
12
- const host = ctx.config.host ?? "127.0.0.1";
13
- assertLoopbackHost(host);
14
- const port = ctx.config.port ?? opts.defaultPort;
15
- const mainJs = resolveProxyMain();
16
- if (!await pathExists(mainJs)) throw new AnyPickError(`Gemini proxy entry not found at ${mainJs}. Run: pnpm build`, "PROXY_BINARY_MISSING");
17
- await ensureDir(ctx.runtimeDir);
18
- const logPath = join(ctx.runtimeDir, "proxy.log");
19
- const pidPath = join(ctx.runtimeDir, "proxy.pid");
20
- await writeFile(logPath, "", { mode: 384 });
21
- const snapshotEnv = join(ctx.snapshotDir, ".env");
22
- const liveEnv = join(opts.liveDir, ".env");
23
- let authDir = ctx.snapshotDir;
24
- if (!await pathExists(snapshotEnv) && await pathExists(liveEnv)) authDir = opts.liveDir;
25
- const poolDirs = Array.isArray(ctx.config.options?.authDirs) ? ctx.config.options.authDirs.filter((d) => typeof d === "string" && d.length > 0) : [];
26
- const oauthSource = ctx.config.options?.oauthSource ?? "auto";
27
- if (oauthSource !== "auto" && oauthSource !== "gemini-cli" && oauthSource !== "antigravity") throw new AnyPickError(`Invalid Gemini OAuth source: ${String(oauthSource)}. Use auto, gemini-cli, or antigravity.`, "PROXY_CONFIG_INVALID");
28
- const snapshotAntigravityFile = join(authDir, "antigravity_oauth.json");
29
- const hasSnapshotAntigravity = oauthSource !== "gemini-cli" && await pathExists(snapshotAntigravityFile);
30
- const effectiveOAuthSource = hasSnapshotAntigravity ? "antigravity" : oauthSource;
31
- const hasOAuth = effectiveOAuthSource === "antigravity" || effectiveOAuthSource === "auto" || await pathExists(join(authDir, "oauth_creds.json"));
32
- if (poolDirs.length === 0 && !await pathExists(join(authDir, ".env")) && !hasOAuth) throw new AnyPickError("Gemini proxy needs GEMINI_API_KEY.\n\nPut the key in ~/.gemini/.env, then:\n anypick add account gemini --current --name <name>\n\nOAuth-only logins work for the Gemini CLI, but not for Claude/Codex via this proxy.", "NO_LIVE_AUTH");
33
- const key = process.env.GEMINI_API_KEY?.trim() || process.env.GOOGLE_API_KEY?.trim() || await readGeminiApiKeyFromEnvFile(join(authDir, ".env")) || (poolDirs[0] ? await readGeminiApiKeyFromEnvFile(join(poolDirs[0], ".env")) : void 0);
34
- if (!key && poolDirs.length === 0 && !hasOAuth) throw new AnyPickError("This Gemini login has no usable API key. OAuth subscription accounts use the Code Assist transport automatically; refresh the Gemini login if oauth_creds.json is expired.", "NO_LIVE_AUTH");
35
- const upstream = (typeof ctx.config.options?.upstream === "string" ? ctx.config.options.upstream : void 0) ?? process.env.GEMINI_PROXY_UPSTREAM ?? "https://generativelanguage.googleapis.com";
36
- const args = [
37
- mainJs,
38
- "--port",
39
- String(port),
40
- "--host",
41
- host,
42
- "--auth-dir",
43
- authDir,
44
- "--upstream",
45
- upstream,
46
- "--oauth-source",
47
- effectiveOAuthSource
48
- ];
49
- const codeAssistUpstream = (typeof ctx.config.options?.codeAssistUpstream === "string" ? ctx.config.options.codeAssistUpstream : void 0) ?? process.env.GEMINI_CODE_ASSIST_UPSTREAM;
50
- if (codeAssistUpstream) args.push("--code-assist-upstream", codeAssistUpstream);
51
- if (typeof ctx.config.options?.antigravityOAuthFile === "string") args.push("--antigravity-oauth-file", ctx.config.options.antigravityOAuthFile);
52
- else if (hasSnapshotAntigravity) args.push("--antigravity-oauth-file", snapshotAntigravityFile);
53
- if (poolDirs.length > 0) args.push("--auth-dirs", poolDirs.join(","));
54
- const poolAccountNames = Array.isArray(ctx.config.options?.quotaGuardAccountNames) ? ctx.config.options.quotaGuardAccountNames.filter((name) => typeof name === "string" && name.trim().length > 0) : [];
55
- if (poolAccountNames.length > 0) args.push("--auth-account-names", poolAccountNames.join(","));
56
- const quotaGuard = ctx.config.options?.quotaGuard;
57
- if (quotaGuard && typeof quotaGuard === "object" && !Array.isArray(quotaGuard)) {
58
- const policy = quotaGuard;
59
- if (policy.enabled === true) {
60
- args.push("--quota-guard", "--quota-guard-state", join(ctx.runtimeDir, "quota-guard.json"));
61
- if (typeof policy.cooldownMs === "number" && Number.isFinite(policy.cooldownMs)) args.push("--quota-guard-cooldown-ms", String(Math.max(1e3, Math.floor(policy.cooldownMs))));
62
- }
63
- }
64
- const endpoint = `http://${host}:${port}`;
65
- const { pid, instanceId } = await spawnDetached(process.execPath, args, {
66
- logPath,
67
- pidPath,
68
- endpoint,
69
- provider: "gemini",
70
- account: ctx.accountName,
71
- env: {
72
- ...process.env,
73
- ...key ? { GEMINI_API_KEY: key } : {},
74
- ...ctx.token ? { ANYPICK_PROXY_TOKEN: ctx.token } : {},
75
- ANYPICK_PROXY_LOG: logPath
76
- }
77
- });
78
- if (!await waitForHttp(`${endpoint}/health`, {
79
- timeoutMs: 5e3,
80
- requirePid: pid,
81
- expectInstanceId: instanceId
82
- }) || !isProcessRunning(pid)) {
83
- let tail = "";
84
- try {
85
- tail = (await readFile(logPath, "utf8")).split(/\r?\n/).slice(-20).join("\n");
86
- } catch {}
87
- if (isProcessRunning(pid)) try {
88
- process.kill(pid, "SIGTERM");
89
- } catch {}
90
- throw new AnyPickError(`Gemini proxy failed to bind ${host}:${port}.${tail ? `\n${tail}` : ""}`, "PROXY_START_FAILED");
91
- }
92
- return {
93
- endpoint,
94
- compatibility: opts.compatibility,
95
- pid,
96
- instanceId,
97
- token: ctx.token,
98
- logPath
99
- };
100
- }
101
- async function stopGeminiProxy(ctx) {
102
- await stopPidFile(join(ctx.runtimeDir, "proxy.pid"));
103
- }
104
- async function geminiProxyStatus(ctx, compatibility, defaultPort) {
105
- const pidPath = join(ctx.runtimeDir, "proxy.pid");
106
- const logPath = join(ctx.runtimeDir, "proxy.log");
107
- const pid = await readPidFile(pidPath);
108
- const running = pid != null && isProcessRunning(pid);
109
- const host = ctx.config.host ?? "127.0.0.1";
110
- const port = ctx.config.port ?? defaultPort;
111
- return {
112
- enabled: ctx.config.enabled,
113
- running,
114
- endpoint: running ? `http://${host}:${port}` : void 0,
115
- compatibility,
116
- pid: running ? pid ?? void 0 : void 0,
117
- logPath: await pathExists(logPath) ? logPath : void 0,
118
- detail: running ? void 0 : ctx.config.enabled ? "stopped" : "disabled",
119
- port,
120
- host
121
- };
122
- }
123
- async function readGeminiProxyLogs(ctx, lines = 50) {
124
- const logPath = join(ctx.runtimeDir, "proxy.log");
125
- if (!await pathExists(logPath)) return "(no log file yet)";
126
- return (await readFile(logPath, "utf8")).split(/\r?\n/).slice(-lines).join("\n");
127
- }
128
- //#endregion
129
- export { geminiProxyStatus, readGeminiProxyLogs, startGeminiProxy, stopGeminiProxy };
130
-
131
- //# sourceMappingURL=gemini-proxy-lifecycle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-proxy-lifecycle.js","names":[],"sources":["../../src/providers/gemini-proxy-lifecycle.ts"],"sourcesContent":["import { join } from 'node:path';\nimport { readFile, writeFile } from 'node:fs/promises';\nimport type { ProxyContext, ProxyHandle, ProxyStatus } from '../types';\nimport { ensureDir, pathExists } from '../utils/fs';\nimport { AnyPickError } from '../utils/errors';\nimport { assertLoopbackHost } from '../utils/network';\nimport { readGeminiApiKeyFromEnvFile } from './gemini-env';\nimport {\n isProcessRunning,\n readPidFile,\n spawnDetached,\n stopPidFile,\n waitForHttp,\n} from '../utils/process';\nimport { resolveProxyMain } from './gemini-proxy-entry';\n\nexport interface GeminiProxyLifecycleOptions {\n liveDir: string;\n compatibility: string;\n defaultPort: number;\n}\n\nexport async function startGeminiProxy(\n ctx: ProxyContext,\n opts: GeminiProxyLifecycleOptions,\n): Promise<ProxyHandle> {\n const host = ctx.config.host ?? '127.0.0.1';\n assertLoopbackHost(host);\n const port = ctx.config.port ?? opts.defaultPort;\n const mainJs = resolveProxyMain();\n if (!(await pathExists(mainJs))) {\n throw new AnyPickError(\n `Gemini proxy entry not found at ${mainJs}. Run: pnpm build`,\n 'PROXY_BINARY_MISSING',\n );\n }\n\n await ensureDir(ctx.runtimeDir);\n const logPath = join(ctx.runtimeDir, 'proxy.log');\n const pidPath = join(ctx.runtimeDir, 'proxy.pid');\n await writeFile(logPath, '', { mode: 0o600 });\n\n // Prefer snapshot (account-scoped key); fall back to live ~/.gemini\n const snapshotEnv = join(ctx.snapshotDir, '.env');\n const liveEnv = join(opts.liveDir, '.env');\n let authDir = ctx.snapshotDir;\n if (!(await pathExists(snapshotEnv)) && (await pathExists(liveEnv))) {\n authDir = opts.liveDir;\n }\n\n const poolDirs = Array.isArray(ctx.config.options?.authDirs)\n ? (ctx.config.options.authDirs as unknown[]).filter(\n (d): d is string => typeof d === 'string' && d.length > 0,\n )\n : [];\n\n const oauthSource = ctx.config.options?.oauthSource ?? 'auto';\n if (oauthSource !== 'auto' && oauthSource !== 'gemini-cli' && oauthSource !== 'antigravity') {\n throw new AnyPickError(\n `Invalid Gemini OAuth source: ${String(oauthSource)}. Use auto, gemini-cli, or antigravity.`,\n 'PROXY_CONFIG_INVALID',\n );\n }\n\n // A snapshotted Antigravity account carries its credential in the auth dir.\n // Auto-select the antigravity source and point the proxy at that file so the\n // account \"just works\" when switched to — no absolute path stored in config.\n // An explicit gemini-cli source still wins (operator opted out of Antigravity).\n const snapshotAntigravityFile = join(authDir, 'antigravity_oauth.json');\n const hasSnapshotAntigravity =\n oauthSource !== 'gemini-cli' && (await pathExists(snapshotAntigravityFile));\n const effectiveOAuthSource = hasSnapshotAntigravity ? 'antigravity' : oauthSource;\n\n const hasOAuth =\n effectiveOAuthSource === 'antigravity' ||\n effectiveOAuthSource === 'auto' ||\n (await pathExists(join(authDir, 'oauth_creds.json')));\n if (poolDirs.length === 0 && !(await pathExists(join(authDir, '.env'))) && !hasOAuth) {\n throw new AnyPickError(\n 'Gemini proxy needs GEMINI_API_KEY.\\n\\nPut the key in ~/.gemini/.env, then:\\n anypick add account gemini --current --name <name>\\n\\nOAuth-only logins work for the Gemini CLI, but not for Claude/Codex via this proxy.',\n 'NO_LIVE_AUTH',\n );\n }\n\n // An explicitly supplied process key is the operator's latest credential\n // and must win over a stale account snapshot key. This also makes key\n // rotation possible without rewriting the saved account immediately.\n const key =\n process.env.GEMINI_API_KEY?.trim() ||\n process.env.GOOGLE_API_KEY?.trim() ||\n (await readGeminiApiKeyFromEnvFile(join(authDir, '.env'))) ||\n (poolDirs[0] ? await readGeminiApiKeyFromEnvFile(join(poolDirs[0], '.env')) : undefined);\n if (!key && poolDirs.length === 0 && !hasOAuth) {\n throw new AnyPickError(\n 'This Gemini login has no usable API key. OAuth subscription accounts use the Code Assist transport automatically; refresh the Gemini login if oauth_creds.json is expired.',\n 'NO_LIVE_AUTH',\n );\n }\n\n const upstream =\n (typeof ctx.config.options?.upstream === 'string' ? ctx.config.options.upstream : undefined) ??\n process.env.GEMINI_PROXY_UPSTREAM ??\n 'https://generativelanguage.googleapis.com';\n\n const args = [\n mainJs,\n '--port',\n String(port),\n '--host',\n host,\n '--auth-dir',\n authDir,\n '--upstream',\n upstream,\n '--oauth-source',\n effectiveOAuthSource,\n ];\n const codeAssistUpstream =\n (typeof ctx.config.options?.codeAssistUpstream === 'string'\n ? ctx.config.options.codeAssistUpstream\n : undefined) ?? process.env.GEMINI_CODE_ASSIST_UPSTREAM;\n if (codeAssistUpstream) {\n args.push('--code-assist-upstream', codeAssistUpstream);\n }\n // Explicit config path wins; otherwise fall back to the snapshotted credential.\n if (typeof ctx.config.options?.antigravityOAuthFile === 'string') {\n args.push('--antigravity-oauth-file', ctx.config.options.antigravityOAuthFile);\n } else if (hasSnapshotAntigravity) {\n args.push('--antigravity-oauth-file', snapshotAntigravityFile);\n }\n if (poolDirs.length > 0) {\n args.push('--auth-dirs', poolDirs.join(','));\n }\n const poolAccountNames = Array.isArray(ctx.config.options?.quotaGuardAccountNames)\n ? (ctx.config.options.quotaGuardAccountNames as unknown[]).filter(\n (name): name is string => typeof name === 'string' && name.trim().length > 0,\n )\n : [];\n if (poolAccountNames.length > 0) {\n args.push('--auth-account-names', poolAccountNames.join(','));\n }\n const quotaGuard = ctx.config.options?.quotaGuard;\n if (quotaGuard && typeof quotaGuard === 'object' && !Array.isArray(quotaGuard)) {\n const policy = quotaGuard as Record<string, unknown>;\n if (policy.enabled === true) {\n args.push('--quota-guard', '--quota-guard-state', join(ctx.runtimeDir, 'quota-guard.json'));\n if (typeof policy.cooldownMs === 'number' && Number.isFinite(policy.cooldownMs)) {\n args.push(\n '--quota-guard-cooldown-ms',\n String(Math.max(1_000, Math.floor(policy.cooldownMs))),\n );\n }\n }\n }\n\n const endpoint = `http://${host}:${port}`;\n const { pid, instanceId } = await spawnDetached(process.execPath, args, {\n logPath,\n pidPath,\n endpoint,\n provider: 'gemini',\n account: ctx.accountName,\n env: {\n ...process.env,\n ...(key ? { GEMINI_API_KEY: key } : {}),\n ...(ctx.token ? { ANYPICK_PROXY_TOKEN: ctx.token } : {}),\n ANYPICK_PROXY_LOG: logPath,\n },\n });\n\n const ready = await waitForHttp(`${endpoint}/health`, {\n timeoutMs: 5000,\n requirePid: pid,\n expectInstanceId: instanceId,\n });\n if (!ready || !isProcessRunning(pid)) {\n let tail = '';\n try {\n const raw = await readFile(logPath, 'utf8');\n tail = raw.split(/\\r?\\n/).slice(-20).join('\\n');\n } catch {\n // ignore\n }\n if (isProcessRunning(pid)) {\n try {\n process.kill(pid, 'SIGTERM');\n } catch {\n // ignore\n }\n }\n throw new AnyPickError(\n `Gemini proxy failed to bind ${host}:${port}.${tail ? `\\n${tail}` : ''}`,\n 'PROXY_START_FAILED',\n );\n }\n\n return {\n endpoint,\n compatibility: opts.compatibility,\n pid,\n instanceId,\n token: ctx.token,\n logPath,\n };\n}\n\nexport async function stopGeminiProxy(ctx: ProxyContext): Promise<void> {\n await stopPidFile(join(ctx.runtimeDir, 'proxy.pid'));\n}\n\nexport async function geminiProxyStatus(\n ctx: ProxyContext,\n compatibility: string,\n defaultPort: number,\n): Promise<ProxyStatus> {\n const pidPath = join(ctx.runtimeDir, 'proxy.pid');\n const logPath = join(ctx.runtimeDir, 'proxy.log');\n const pid = await readPidFile(pidPath);\n const running = pid != null && isProcessRunning(pid);\n const host = ctx.config.host ?? '127.0.0.1';\n const port = ctx.config.port ?? defaultPort;\n return {\n enabled: ctx.config.enabled,\n running,\n endpoint: running ? `http://${host}:${port}` : undefined,\n compatibility,\n pid: running ? (pid ?? undefined) : undefined,\n logPath: (await pathExists(logPath)) ? logPath : undefined,\n detail: running ? undefined : ctx.config.enabled ? 'stopped' : 'disabled',\n port,\n host,\n };\n}\n\nexport async function readGeminiProxyLogs(ctx: ProxyContext, lines = 50): Promise<string> {\n const logPath = join(ctx.runtimeDir, 'proxy.log');\n if (!(await pathExists(logPath))) {\n return '(no log file yet)';\n }\n const raw = await readFile(logPath, 'utf8');\n return raw.split(/\\r?\\n/).slice(-lines).join('\\n');\n}\n"],"mappings":"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"}
@@ -1,137 +0,0 @@
1
- /**
2
- * Google Gemini CLI
3
- *
4
- * Live auth under ~/.gemini/:
5
- * .env — GEMINI_API_KEY / GOOGLE_CLOUD_* (API key + Vertex)
6
- * oauth_creds.json — Login with Google OAuth tokens (when on disk)
7
- * google_accounts.json — active email + history
8
- * settings.json — security.auth.selectedType (merged, not fully replaced)
9
- *
10
- * Built-in dual-protocol proxy (API key accounts):
11
- * OpenAI (/v1/responses) → Codex
12
- * Anthropic (/v1/messages) → Claude Code
13
- * Translates to Google Generative Language API (generateContent).
14
- *
15
- * Notes:
16
- * - Personal OAuth may also live in the OS keychain; we snapshot file-based
17
- * material only. API-key accounts via .env drive the proxy most reliably.
18
- */
19
- import type { Account, AccountMeta, LiveAuthStatus, Provider, ProxyContext, ProxyHubBackendContext, ProxyHubBackendHandle, ProxyHandle, ProxyStatus, SourceAdapter } from '../types.js';
20
- import { type AntigravityKeyringPayload } from './gemini-antigravity-oauth.js';
21
- export declare class GeminiProvider implements Provider {
22
- private readonly home;
23
- private readonly saveAntigravityCredential;
24
- private readonly hydrateAntigravityCredential;
25
- private readonly deleteAntigravityCredential;
26
- private readonly readAntigravityStateCredential;
27
- readonly id = "gemini";
28
- readonly name = "Gemini CLI";
29
- readonly shortName = "Gemini";
30
- /** Gemini CLI vs Antigravity — TUI offers a source picker before mode. */
31
- readonly requiresAccountSourcePick = true;
32
- readonly description = "Manages ~/.gemini auth + OpenAI/Anthropic\u2192Gemini proxy (Codex + Claude)";
33
- readonly defaultProxyPort = 4130;
34
- readonly proxyCompatibility = "OpenAI + Anthropic \u2192 Gemini API";
35
- /** The Gemini proxy cannot be driven from an OAuth-only snapshot. */
36
- readonly proxyRequiresApiKey = true;
37
- proxyApiKeyStatus(snapshotDir: string): Promise<{
38
- present: boolean;
39
- hint?: string;
40
- }>;
41
- roleDefaults(): Record<string, string>;
42
- /** Gemini names cheap models "flash"/"lite" and strong models "pro". */
43
- roleModelHints(): Record<string, readonly string[]>;
44
- constructor(home?: string, saveAntigravityCredential?: (payload: AntigravityKeyringPayload) => Promise<void>, hydrateAntigravityCredential?: (payload: AntigravityKeyringPayload) => Promise<AntigravityKeyringPayload>, deleteAntigravityCredential?: () => Promise<boolean>, readAntigravityStateCredential?: () => Promise<AntigravityKeyringPayload | null>);
45
- sourceAdapter(account: Account): SourceAdapter;
46
- poolSourceAdapter(): SourceAdapter;
47
- createProxyHubBackend(ctx: ProxyHubBackendContext): Promise<ProxyHubBackendHandle>;
48
- private get geminiDir();
49
- private livePath;
50
- /** True when ~/.gemini holds credential material the CLI backup can snapshot. */
51
- private hasGeminiCliAuth;
52
- /**
53
- * Which source a source-less operation acts on.
54
- *
55
- * Gemini CLI files win whenever they exist, so restoring a CLI account always
56
- * takes precedence over a lingering Antigravity keychain entry. Antigravity
57
- * only surfaces when there is no CLI login at all — otherwise a user signed in
58
- * through Antigravity alone would look signed out everywhere.
59
- */
60
- private resolveAutoSource;
61
- detectLive(): Promise<LiveAuthStatus>;
62
- private detectGeminiCliLive;
63
- /**
64
- * Explicit Antigravity liveness check. Reads the macOS Keychain (or a portable
65
- * file), so it MUST NOT be folded into detectLive() — that runs on every home
66
- * refresh and would trigger repeated Keychain permission prompts. Only call it
67
- * when the user explicitly chose the Antigravity source.
68
- */
69
- detectAntigravityLive(credentialFile?: string): Promise<LiveAuthStatus>;
70
- /**
71
- * Snapshot the Antigravity credential into the account dir.
72
- *
73
- * The whole credential-store payload is written, not the reduced
74
- * {refresh_token, token_type} the proxy needs: restoring this account has to
75
- * put the credential back into the store, and a token stripped of its access
76
- * token and expiry is not the one that was saved. The proxy is unaffected —
77
- * parseAntigravityOAuthCredential accepts this nested shape too.
78
- */
79
- backupAntigravity(destDir: string, credentialFile?: string): Promise<Partial<Pick<AccountMeta, 'identity' | 'label' | 'notes'>>>;
80
- detectLiveSource(source: string): Promise<LiveAuthStatus>;
81
- backupSource(source: string, destDir: string): Promise<Partial<Pick<AccountMeta, 'identity' | 'label' | 'notes'>>>;
82
- clearLiveSource(source: string): Promise<void>;
83
- /**
84
- * Drop the Antigravity credential from the OS credential store so Antigravity
85
- * asks for a new sign-in. The ~/.gemini CLI files belong to the other source
86
- * and are deliberately left alone.
87
- */
88
- clearAntigravityLive(): Promise<void>;
89
- backup(destDir: string): Promise<Partial<Pick<AccountMeta, 'identity' | 'label' | 'notes'>>>;
90
- restore(srcDir: string): Promise<void>;
91
- /**
92
- * Refuse an Antigravity switch before AccountService checkpoints or mutates
93
- * anything. Without this early guard, the late SQLite rejection caused core
94
- * to attempt a rollback that the same running app also rejected.
95
- */
96
- preflightRestore(srcDir: string): Promise<void>;
97
- restoreOwnerStatus(srcDir: string): Promise<{
98
- name: string;
99
- running: boolean;
100
- } | null>;
101
- accountSource(srcDir: string): Promise<{
102
- id: string;
103
- name: string;
104
- }>;
105
- liveAccountSource(live: LiveAuthStatus): Promise<{
106
- id: string;
107
- name: string;
108
- }>;
109
- /** Push a snapshotted Antigravity credential back into the OS credential store. */
110
- private restoreAntigravity;
111
- /**
112
- * Clear local Gemini CLI auth files so the user can sign in as someone else.
113
- * Does not revoke OAuth server-side or remove OS keychain entries.
114
- */
115
- clearLive(): Promise<void>;
116
- startProxy(ctx: ProxyContext): Promise<ProxyHandle>;
117
- stopProxy(ctx: ProxyContext): Promise<void>;
118
- proxyStatus(ctx: ProxyContext): Promise<ProxyStatus>;
119
- readProxyLogs(ctx: ProxyContext, lines?: number): Promise<string>;
120
- /**
121
- * Gemini keeps no `auth.json`, so the shared default could never find a live
122
- * file to compare and reported every saved account as not-live.
123
- *
124
- * Only credential material is compared, and only its durable part: the CLI
125
- * rewrites `oauth_creds.json` on every access-token refresh, so hashing the
126
- * whole file would mark the live account "changed" within the hour.
127
- */
128
- snapshotMatchesLive(snapshotDir: string): Promise<boolean>;
129
- private hasApiKeyMaterial;
130
- private readIdentity;
131
- private readSelectedAuthType;
132
- private readAuthSettingsSlice;
133
- private mergeAuthSettings;
134
- }
135
- export { readGeminiApiKeyFromEnvFile, upsertEnvFile } from './gemini-env.js';
136
- export declare const geminiProvider: GeminiProvider;
137
- //# sourceMappingURL=gemini.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"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"}