anypick 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +589 -0
  3. package/dist/adapters.d.ts +4 -0
  4. package/dist/adapters.d.ts.map +1 -0
  5. package/dist/adapters.js +2 -0
  6. package/dist/catalog/model-fetch.d.ts +34 -0
  7. package/dist/catalog/model-fetch.d.ts.map +1 -0
  8. package/dist/catalog/model-fetch.js +99 -0
  9. package/dist/catalog/model-fetch.js.map +1 -0
  10. package/dist/catalog/providers.d.ts +42 -0
  11. package/dist/catalog/providers.d.ts.map +1 -0
  12. package/dist/catalog/providers.js +424 -0
  13. package/dist/catalog/providers.js.map +1 -0
  14. package/dist/cli/bootstrap.d.ts +3 -0
  15. package/dist/cli/bootstrap.d.ts.map +1 -0
  16. package/dist/cli/bootstrap.js +78 -0
  17. package/dist/cli/bootstrap.js.map +1 -0
  18. package/dist/cli/commands.d.ts +29 -0
  19. package/dist/cli/commands.d.ts.map +1 -0
  20. package/dist/cli/commands.js +1043 -0
  21. package/dist/cli/commands.js.map +1 -0
  22. package/dist/cli/completion.d.ts +6 -0
  23. package/dist/cli/completion.d.ts.map +1 -0
  24. package/dist/cli/completion.js +202 -0
  25. package/dist/cli/completion.js.map +1 -0
  26. package/dist/cli/errors.d.ts +20 -0
  27. package/dist/cli/errors.d.ts.map +1 -0
  28. package/dist/cli/errors.js +47 -0
  29. package/dist/cli/errors.js.map +1 -0
  30. package/dist/cli/format.d.ts +6 -0
  31. package/dist/cli/format.d.ts.map +1 -0
  32. package/dist/cli/format.js +75 -0
  33. package/dist/cli/format.js.map +1 -0
  34. package/dist/cli/help.d.ts +6 -0
  35. package/dist/cli/help.d.ts.map +1 -0
  36. package/dist/cli/help.js +66 -0
  37. package/dist/cli/help.js.map +1 -0
  38. package/dist/cli/interactive-accounts.d.ts +3 -0
  39. package/dist/cli/interactive-accounts.d.ts.map +1 -0
  40. package/dist/cli/interactive-accounts.js +86 -0
  41. package/dist/cli/interactive-accounts.js.map +1 -0
  42. package/dist/cli/interactive-maintenance.d.ts +4 -0
  43. package/dist/cli/interactive-maintenance.d.ts.map +1 -0
  44. package/dist/cli/interactive-maintenance.js +30 -0
  45. package/dist/cli/interactive-maintenance.js.map +1 -0
  46. package/dist/cli/interactive.d.ts +14 -0
  47. package/dist/cli/interactive.d.ts.map +1 -0
  48. package/dist/cli/interactive.js +242 -0
  49. package/dist/cli/interactive.js.map +1 -0
  50. package/dist/cli/launch-client.d.ts +18 -0
  51. package/dist/cli/launch-client.d.ts.map +1 -0
  52. package/dist/cli/launch-client.js +117 -0
  53. package/dist/cli/launch-client.js.map +1 -0
  54. package/dist/cli/launcher-model.d.ts +64 -0
  55. package/dist/cli/launcher-model.d.ts.map +1 -0
  56. package/dist/cli/launcher-model.js +200 -0
  57. package/dist/cli/launcher-model.js.map +1 -0
  58. package/dist/cli/launcher-render.d.ts +22 -0
  59. package/dist/cli/launcher-render.d.ts.map +1 -0
  60. package/dist/cli/launcher-render.js +113 -0
  61. package/dist/cli/launcher-render.js.map +1 -0
  62. package/dist/cli/launcher.d.ts +27 -0
  63. package/dist/cli/launcher.d.ts.map +1 -0
  64. package/dist/cli/launcher.js +93 -0
  65. package/dist/cli/launcher.js.map +1 -0
  66. package/dist/cli/local-health.d.ts +17 -0
  67. package/dist/cli/local-health.d.ts.map +1 -0
  68. package/dist/cli/local-health.js +31 -0
  69. package/dist/cli/local-health.js.map +1 -0
  70. package/dist/cli/plugin-commands.d.ts +4 -0
  71. package/dist/cli/plugin-commands.d.ts.map +1 -0
  72. package/dist/cli/plugin-commands.js +160 -0
  73. package/dist/cli/plugin-commands.js.map +1 -0
  74. package/dist/cli/primary.d.ts +18 -0
  75. package/dist/cli/primary.d.ts.map +1 -0
  76. package/dist/cli/primary.js +593 -0
  77. package/dist/cli/primary.js.map +1 -0
  78. package/dist/cli/render-util.d.ts +24 -0
  79. package/dist/cli/render-util.d.ts.map +1 -0
  80. package/dist/cli/render-util.js +58 -0
  81. package/dist/cli/render-util.js.map +1 -0
  82. package/dist/cli/ux.d.ts +43 -0
  83. package/dist/cli/ux.d.ts.map +1 -0
  84. package/dist/cli/ux.js +114 -0
  85. package/dist/cli/ux.js.map +1 -0
  86. package/dist/cli.d.ts +3 -0
  87. package/dist/cli.d.ts.map +1 -0
  88. package/dist/cli.js +35 -0
  89. package/dist/cli.js.map +1 -0
  90. package/dist/clients/claude-client-apply.d.ts +8 -0
  91. package/dist/clients/claude-client-apply.d.ts.map +1 -0
  92. package/dist/clients/claude-client-apply.js +108 -0
  93. package/dist/clients/claude-client-apply.js.map +1 -0
  94. package/dist/clients/claude-code.d.ts +5 -0
  95. package/dist/clients/claude-code.d.ts.map +1 -0
  96. package/dist/clients/claude-code.js +189 -0
  97. package/dist/clients/claude-code.js.map +1 -0
  98. package/dist/clients/claude-settings-guard.d.ts +18 -0
  99. package/dist/clients/claude-settings-guard.d.ts.map +1 -0
  100. package/dist/clients/codex-desktop-catalog.d.ts +67 -0
  101. package/dist/clients/codex-desktop-catalog.d.ts.map +1 -0
  102. package/dist/clients/codex-desktop-catalog.js +212 -0
  103. package/dist/clients/codex-desktop-catalog.js.map +1 -0
  104. package/dist/clients/codex.d.ts +181 -0
  105. package/dist/clients/codex.d.ts.map +1 -0
  106. package/dist/clients/codex.js +783 -0
  107. package/dist/clients/codex.js.map +1 -0
  108. package/dist/clients/env-files.d.ts +14 -0
  109. package/dist/clients/env-files.d.ts.map +1 -0
  110. package/dist/clients/env-files.js +50 -0
  111. package/dist/clients/env-files.js.map +1 -0
  112. package/dist/clients/gemini-client-utils.d.ts +4 -0
  113. package/dist/clients/gemini-client-utils.d.ts.map +1 -0
  114. package/dist/clients/gemini-client-utils.js +33 -0
  115. package/dist/clients/gemini-client-utils.js.map +1 -0
  116. package/dist/clients/gemini.d.ts +16 -0
  117. package/dist/clients/gemini.d.ts.map +1 -0
  118. package/dist/clients/gemini.js +233 -0
  119. package/dist/clients/gemini.js.map +1 -0
  120. package/dist/clients/index.d.ts +14 -0
  121. package/dist/clients/index.d.ts.map +1 -0
  122. package/dist/clients/index.js +18 -0
  123. package/dist/clients/index.js.map +1 -0
  124. package/dist/clients/isolation.d.ts +28 -0
  125. package/dist/clients/isolation.d.ts.map +1 -0
  126. package/dist/clients/isolation.js +131 -0
  127. package/dist/clients/isolation.js.map +1 -0
  128. package/dist/clients/kiro.d.ts +10 -0
  129. package/dist/clients/kiro.d.ts.map +1 -0
  130. package/dist/clients/kiro.js +168 -0
  131. package/dist/clients/kiro.js.map +1 -0
  132. package/dist/clients/model-roles.d.ts +58 -0
  133. package/dist/clients/model-roles.d.ts.map +1 -0
  134. package/dist/clients/model-roles.js +139 -0
  135. package/dist/clients/model-roles.js.map +1 -0
  136. package/dist/clients/registry.d.ts +7 -0
  137. package/dist/clients/registry.d.ts.map +1 -0
  138. package/dist/clients/registry.js +16 -0
  139. package/dist/clients/registry.js.map +1 -0
  140. package/dist/clients/resolve.d.ts +27 -0
  141. package/dist/clients/resolve.d.ts.map +1 -0
  142. package/dist/clients/resolve.js +49 -0
  143. package/dist/clients/resolve.js.map +1 -0
  144. package/dist/core/account-codec.d.ts +32 -0
  145. package/dist/core/account-codec.d.ts.map +1 -0
  146. package/dist/core/account-codec.js +134 -0
  147. package/dist/core/account-codec.js.map +1 -0
  148. package/dist/core/account-transfer.d.ts +20 -0
  149. package/dist/core/account-transfer.d.ts.map +1 -0
  150. package/dist/core/account-transfer.js +136 -0
  151. package/dist/core/account-transfer.js.map +1 -0
  152. package/dist/core/activation-executor.d.ts +72 -0
  153. package/dist/core/activation-executor.d.ts.map +1 -0
  154. package/dist/core/activation-executor.js +690 -0
  155. package/dist/core/activation-executor.js.map +1 -0
  156. package/dist/core/activation-models.d.ts +6 -0
  157. package/dist/core/activation-models.d.ts.map +1 -0
  158. package/dist/core/activation-models.js +33 -0
  159. package/dist/core/activation-models.js.map +1 -0
  160. package/dist/core/activation-planner.d.ts +38 -0
  161. package/dist/core/activation-planner.d.ts.map +1 -0
  162. package/dist/core/activation-planner.js +248 -0
  163. package/dist/core/activation-planner.js.map +1 -0
  164. package/dist/core/activation-protocol.d.ts +3 -0
  165. package/dist/core/activation-protocol.d.ts.map +1 -0
  166. package/dist/core/activation-protocol.js +9 -0
  167. package/dist/core/activation-protocol.js.map +1 -0
  168. package/dist/core/activation-transport.d.ts +15 -0
  169. package/dist/core/activation-transport.d.ts.map +1 -0
  170. package/dist/core/activation-transport.js +23 -0
  171. package/dist/core/activation-transport.js.map +1 -0
  172. package/dist/core/app.d.ts +149 -0
  173. package/dist/core/app.d.ts.map +1 -0
  174. package/dist/core/app.js +372 -0
  175. package/dist/core/app.js.map +1 -0
  176. package/dist/core/binding-service.d.ts +93 -0
  177. package/dist/core/binding-service.d.ts.map +1 -0
  178. package/dist/core/binding-service.js +281 -0
  179. package/dist/core/binding-service.js.map +1 -0
  180. package/dist/core/binding-store.d.ts +23 -0
  181. package/dist/core/binding-store.d.ts.map +1 -0
  182. package/dist/core/binding-store.js +154 -0
  183. package/dist/core/binding-store.js.map +1 -0
  184. package/dist/core/brand.d.ts +18 -0
  185. package/dist/core/brand.d.ts.map +1 -0
  186. package/dist/core/brand.js +22 -0
  187. package/dist/core/brand.js.map +1 -0
  188. package/dist/core/capabilities.d.ts +30 -0
  189. package/dist/core/capabilities.d.ts.map +1 -0
  190. package/dist/core/capabilities.js +27 -0
  191. package/dist/core/capabilities.js.map +1 -0
  192. package/dist/core/client-state-store.d.ts +17 -0
  193. package/dist/core/client-state-store.d.ts.map +1 -0
  194. package/dist/core/client-state-store.js +47 -0
  195. package/dist/core/client-state-store.js.map +1 -0
  196. package/dist/core/codec/account.d.ts +52 -0
  197. package/dist/core/codec/account.d.ts.map +1 -0
  198. package/dist/core/codec/account.js +69 -0
  199. package/dist/core/codec/account.js.map +1 -0
  200. package/dist/core/codec/bindings.d.ts +38 -0
  201. package/dist/core/codec/bindings.d.ts.map +1 -0
  202. package/dist/core/codec/bindings.js +79 -0
  203. package/dist/core/codec/bindings.js.map +1 -0
  204. package/dist/core/codec/operations.d.ts +36 -0
  205. package/dist/core/codec/operations.d.ts.map +1 -0
  206. package/dist/core/codec/operations.js +82 -0
  207. package/dist/core/codec/operations.js.map +1 -0
  208. package/dist/core/codec/primitives.d.ts +59 -0
  209. package/dist/core/codec/primitives.d.ts.map +1 -0
  210. package/dist/core/codec/primitives.js +123 -0
  211. package/dist/core/codec/primitives.js.map +1 -0
  212. package/dist/core/codec/proxy-hub.d.ts +43 -0
  213. package/dist/core/codec/proxy-hub.d.ts.map +1 -0
  214. package/dist/core/codec/proxy-hub.js +69 -0
  215. package/dist/core/codec/proxy-hub.js.map +1 -0
  216. package/dist/core/codec/runtime.d.ts +41 -0
  217. package/dist/core/codec/runtime.d.ts.map +1 -0
  218. package/dist/core/codec/runtime.js +66 -0
  219. package/dist/core/codec/runtime.js.map +1 -0
  220. package/dist/core/codec.d.ts +43 -0
  221. package/dist/core/codec.d.ts.map +1 -0
  222. package/dist/core/codec.js +69 -0
  223. package/dist/core/codec.js.map +1 -0
  224. package/dist/core/codex-live-config.d.ts +92 -0
  225. package/dist/core/codex-live-config.d.ts.map +1 -0
  226. package/dist/core/codex-live-config.js +263 -0
  227. package/dist/core/codex-live-config.js.map +1 -0
  228. package/dist/core/config-service.d.ts +35 -0
  229. package/dist/core/config-service.d.ts.map +1 -0
  230. package/dist/core/config-service.js +87 -0
  231. package/dist/core/config-service.js.map +1 -0
  232. package/dist/core/config.d.ts +14 -0
  233. package/dist/core/config.d.ts.map +1 -0
  234. package/dist/core/config.js +45 -0
  235. package/dist/core/config.js.map +1 -0
  236. package/dist/core/db-schema.d.ts +30 -0
  237. package/dist/core/db-schema.d.ts.map +1 -0
  238. package/dist/core/db-schema.js +278 -0
  239. package/dist/core/db-schema.js.map +1 -0
  240. package/dist/core/db.d.ts +72 -0
  241. package/dist/core/db.d.ts.map +1 -0
  242. package/dist/core/db.js +192 -0
  243. package/dist/core/db.js.map +1 -0
  244. package/dist/core/doctor-fixes.d.ts +3 -0
  245. package/dist/core/doctor-fixes.d.ts.map +1 -0
  246. package/dist/core/doctor-fixes.js +102 -0
  247. package/dist/core/doctor-fixes.js.map +1 -0
  248. package/dist/core/doctor-format.d.ts +10 -0
  249. package/dist/core/doctor-format.d.ts.map +1 -0
  250. package/dist/core/doctor-format.js +45 -0
  251. package/dist/core/doctor-format.js.map +1 -0
  252. package/dist/core/doctor-report.d.ts +3 -0
  253. package/dist/core/doctor-report.d.ts.map +1 -0
  254. package/dist/core/doctor-report.js +174 -0
  255. package/dist/core/doctor-report.js.map +1 -0
  256. package/dist/core/doctor-scan.d.ts +7 -0
  257. package/dist/core/doctor-scan.d.ts.map +1 -0
  258. package/dist/core/doctor-scan.js +139 -0
  259. package/dist/core/doctor-scan.js.map +1 -0
  260. package/dist/core/doctor-types.d.ts +89 -0
  261. package/dist/core/doctor-types.d.ts.map +1 -0
  262. package/dist/core/doctor-types.js +14 -0
  263. package/dist/core/doctor-types.js.map +1 -0
  264. package/dist/core/doctor-utils.d.ts +3 -0
  265. package/dist/core/doctor-utils.d.ts.map +1 -0
  266. package/dist/core/doctor-utils.js +36 -0
  267. package/dist/core/doctor-utils.js.map +1 -0
  268. package/dist/core/doctor.d.ts +14 -0
  269. package/dist/core/doctor.d.ts.map +1 -0
  270. package/dist/core/doctor.js +127 -0
  271. package/dist/core/doctor.js.map +1 -0
  272. package/dist/core/events.d.ts +58 -0
  273. package/dist/core/events.d.ts.map +1 -0
  274. package/dist/core/events.js +88 -0
  275. package/dist/core/events.js.map +1 -0
  276. package/dist/core/journal.d.ts +23 -0
  277. package/dist/core/journal.d.ts.map +1 -0
  278. package/dist/core/journal.js +93 -0
  279. package/dist/core/journal.js.map +1 -0
  280. package/dist/core/lease-store.d.ts +22 -0
  281. package/dist/core/lease-store.d.ts.map +1 -0
  282. package/dist/core/lease-store.js +81 -0
  283. package/dist/core/lease-store.js.map +1 -0
  284. package/dist/core/migrate-bindings.d.ts +10 -0
  285. package/dist/core/migrate-bindings.d.ts.map +1 -0
  286. package/dist/core/migrate-bindings.js +98 -0
  287. package/dist/core/migrate-bindings.js.map +1 -0
  288. package/dist/core/migrate-fs.d.ts +11 -0
  289. package/dist/core/migrate-fs.d.ts.map +1 -0
  290. package/dist/core/migrate-fs.js +184 -0
  291. package/dist/core/migrate-fs.js.map +1 -0
  292. package/dist/core/model-cache-store.d.ts +27 -0
  293. package/dist/core/model-cache-store.d.ts.map +1 -0
  294. package/dist/core/model-cache-store.js +50 -0
  295. package/dist/core/model-cache-store.js.map +1 -0
  296. package/dist/core/model-discovery.d.ts +66 -0
  297. package/dist/core/model-discovery.d.ts.map +1 -0
  298. package/dist/core/model-discovery.js +127 -0
  299. package/dist/core/model-discovery.js.map +1 -0
  300. package/dist/core/model-policy.d.ts +40 -0
  301. package/dist/core/model-policy.d.ts.map +1 -0
  302. package/dist/core/model-policy.js +77 -0
  303. package/dist/core/model-policy.js.map +1 -0
  304. package/dist/core/model-roles.d.ts +9 -0
  305. package/dist/core/model-roles.d.ts.map +1 -0
  306. package/dist/core/model-roles.js +20 -0
  307. package/dist/core/model-roles.js.map +1 -0
  308. package/dist/core/mutation-lock.d.ts +31 -0
  309. package/dist/core/mutation-lock.d.ts.map +1 -0
  310. package/dist/core/mutation-lock.js +69 -0
  311. package/dist/core/mutation-lock.js.map +1 -0
  312. package/dist/core/paths.d.ts +49 -0
  313. package/dist/core/paths.d.ts.map +1 -0
  314. package/dist/core/paths.js +110 -0
  315. package/dist/core/paths.js.map +1 -0
  316. package/dist/core/plugin-loader.d.ts +40 -0
  317. package/dist/core/plugin-loader.d.ts.map +1 -0
  318. package/dist/core/plugin-loader.js +184 -0
  319. package/dist/core/plugin-loader.js.map +1 -0
  320. package/dist/core/plugin-service.d.ts +32 -0
  321. package/dist/core/plugin-service.d.ts.map +1 -0
  322. package/dist/core/plugin-service.js +110 -0
  323. package/dist/core/plugin-service.js.map +1 -0
  324. package/dist/core/plugin-store.d.ts +18 -0
  325. package/dist/core/plugin-store.d.ts.map +1 -0
  326. package/dist/core/plugin-store.js +50 -0
  327. package/dist/core/plugin-store.js.map +1 -0
  328. package/dist/core/pool-store.d.ts +44 -0
  329. package/dist/core/pool-store.d.ts.map +1 -0
  330. package/dist/core/pool-store.js +198 -0
  331. package/dist/core/pool-store.js.map +1 -0
  332. package/dist/core/preset-store.d.ts +29 -0
  333. package/dist/core/preset-store.d.ts.map +1 -0
  334. package/dist/core/preset-store.js +105 -0
  335. package/dist/core/preset-store.js.map +1 -0
  336. package/dist/core/profile-service.d.ts +50 -0
  337. package/dist/core/profile-service.d.ts.map +1 -0
  338. package/dist/core/profile-service.js +149 -0
  339. package/dist/core/profile-service.js.map +1 -0
  340. package/dist/core/profile-store.d.ts +20 -0
  341. package/dist/core/profile-store.d.ts.map +1 -0
  342. package/dist/core/profile-store.js +92 -0
  343. package/dist/core/profile-store.js.map +1 -0
  344. package/dist/core/profile-synth.d.ts +24 -0
  345. package/dist/core/profile-synth.d.ts.map +1 -0
  346. package/dist/core/profile-synth.js +30 -0
  347. package/dist/core/profile-synth.js.map +1 -0
  348. package/dist/core/project-root.d.ts +7 -0
  349. package/dist/core/project-root.d.ts.map +1 -0
  350. package/dist/core/project-root.js +23 -0
  351. package/dist/core/project-root.js.map +1 -0
  352. package/dist/core/proxy-hub-cli.d.ts +3 -0
  353. package/dist/core/proxy-hub-cli.d.ts.map +1 -0
  354. package/dist/core/proxy-hub-cli.js +80 -0
  355. package/dist/core/proxy-hub-cli.js.map +1 -0
  356. package/dist/core/proxy-hub-routes.d.ts +22 -0
  357. package/dist/core/proxy-hub-routes.d.ts.map +1 -0
  358. package/dist/core/proxy-hub-routes.js +92 -0
  359. package/dist/core/proxy-hub-routes.js.map +1 -0
  360. package/dist/core/proxy-hub-server.d.ts +59 -0
  361. package/dist/core/proxy-hub-server.d.ts.map +1 -0
  362. package/dist/core/proxy-hub-server.js +409 -0
  363. package/dist/core/proxy-hub-server.js.map +1 -0
  364. package/dist/core/proxy-hub-service.d.ts +97 -0
  365. package/dist/core/proxy-hub-service.d.ts.map +1 -0
  366. package/dist/core/proxy-hub-service.js +553 -0
  367. package/dist/core/proxy-hub-service.js.map +1 -0
  368. package/dist/core/proxy-hub-store.d.ts +28 -0
  369. package/dist/core/proxy-hub-store.d.ts.map +1 -0
  370. package/dist/core/proxy-hub-store.js +152 -0
  371. package/dist/core/proxy-hub-store.js.map +1 -0
  372. package/dist/core/proxy-lifecycle.d.ts +26 -0
  373. package/dist/core/proxy-lifecycle.d.ts.map +1 -0
  374. package/dist/core/proxy-lifecycle.js +33 -0
  375. package/dist/core/proxy-lifecycle.js.map +1 -0
  376. package/dist/core/proxy-ports.d.ts +50 -0
  377. package/dist/core/proxy-ports.d.ts.map +1 -0
  378. package/dist/core/proxy-ports.js +86 -0
  379. package/dist/core/proxy-ports.js.map +1 -0
  380. package/dist/core/proxy-service.d.ts +184 -0
  381. package/dist/core/proxy-service.d.ts.map +1 -0
  382. package/dist/core/proxy-service.js +860 -0
  383. package/dist/core/proxy-service.js.map +1 -0
  384. package/dist/core/quota-guard-policy.d.ts +8 -0
  385. package/dist/core/quota-guard-policy.d.ts.map +1 -0
  386. package/dist/core/quota-guard-policy.js +21 -0
  387. package/dist/core/quota-guard-policy.js.map +1 -0
  388. package/dist/core/realign-proxy-clients.d.ts +19 -0
  389. package/dist/core/realign-proxy-clients.d.ts.map +1 -0
  390. package/dist/core/realign-proxy-clients.js +40 -0
  391. package/dist/core/realign-proxy-clients.js.map +1 -0
  392. package/dist/core/refs.d.ts +84 -0
  393. package/dist/core/refs.d.ts.map +1 -0
  394. package/dist/core/refs.js +250 -0
  395. package/dist/core/refs.js.map +1 -0
  396. package/dist/core/registry.d.ts +46 -0
  397. package/dist/core/registry.d.ts.map +1 -0
  398. package/dist/core/registry.js +70 -0
  399. package/dist/core/registry.js.map +1 -0
  400. package/dist/core/resolve-source.d.ts +54 -0
  401. package/dist/core/resolve-source.d.ts.map +1 -0
  402. package/dist/core/resolve-source.js +148 -0
  403. package/dist/core/resolve-source.js.map +1 -0
  404. package/dist/core/runtime-service.d.ts +158 -0
  405. package/dist/core/runtime-service.d.ts.map +1 -0
  406. package/dist/core/runtime-service.js +422 -0
  407. package/dist/core/runtime-service.js.map +1 -0
  408. package/dist/core/service.d.ts +200 -0
  409. package/dist/core/service.d.ts.map +1 -0
  410. package/dist/core/service.js +643 -0
  411. package/dist/core/service.js.map +1 -0
  412. package/dist/core/store-snapshot.d.ts +10 -0
  413. package/dist/core/store-snapshot.d.ts.map +1 -0
  414. package/dist/core/store-snapshot.js +79 -0
  415. package/dist/core/store-snapshot.js.map +1 -0
  416. package/dist/core/store.d.ts +68 -0
  417. package/dist/core/store.d.ts.map +1 -0
  418. package/dist/core/store.js +159 -0
  419. package/dist/core/store.js.map +1 -0
  420. package/dist/core/tray-runtime.d.ts +15 -0
  421. package/dist/core/tray-runtime.d.ts.map +1 -0
  422. package/dist/core/tray-runtime.js +33 -0
  423. package/dist/core/tray-runtime.js.map +1 -0
  424. package/dist/core/tray-settings-service.d.ts +7 -0
  425. package/dist/core/tray-settings-service.d.ts.map +1 -0
  426. package/dist/core/tray-settings-service.js +24 -0
  427. package/dist/core/tray-settings-service.js.map +1 -0
  428. package/dist/core/update.d.ts +26 -0
  429. package/dist/core/update.d.ts.map +1 -0
  430. package/dist/core/update.js +128 -0
  431. package/dist/core/update.js.map +1 -0
  432. package/dist/index.d.ts +12 -0
  433. package/dist/index.d.ts.map +1 -0
  434. package/dist/index.js +7 -0
  435. package/dist/network/egress/allowlist.d.ts +2 -0
  436. package/dist/network/egress/allowlist.d.ts.map +1 -0
  437. package/dist/network/egress/allowlist.js +14 -0
  438. package/dist/network/egress/allowlist.js.map +1 -0
  439. package/dist/network/egress/direct.d.ts +17 -0
  440. package/dist/network/egress/direct.d.ts.map +1 -0
  441. package/dist/network/egress/direct.js +28 -0
  442. package/dist/network/egress/direct.js.map +1 -0
  443. package/dist/network/egress/errors.d.ts +4 -0
  444. package/dist/network/egress/errors.d.ts.map +1 -0
  445. package/dist/network/egress/errors.js +8 -0
  446. package/dist/network/egress/errors.js.map +1 -0
  447. package/dist/network/egress/index.d.ts +6 -0
  448. package/dist/network/egress/index.d.ts.map +1 -0
  449. package/dist/network/egress/index.js +11 -0
  450. package/dist/network/egress/index.js.map +1 -0
  451. package/dist/network/egress/types.d.ts +16 -0
  452. package/dist/network/egress/types.d.ts.map +1 -0
  453. package/dist/presentation/client-name.d.ts +14 -0
  454. package/dist/presentation/client-name.d.ts.map +1 -0
  455. package/dist/presentation/client-name.js +22 -0
  456. package/dist/presentation/client-name.js.map +1 -0
  457. package/dist/presentation/layout.d.ts +7 -0
  458. package/dist/presentation/layout.d.ts.map +1 -0
  459. package/dist/presentation/layout.js +10 -0
  460. package/dist/presentation/layout.js.map +1 -0
  461. package/dist/providers/auth-fingerprint.d.ts +56 -0
  462. package/dist/providers/auth-fingerprint.d.ts.map +1 -0
  463. package/dist/providers/auth-fingerprint.js +163 -0
  464. package/dist/providers/auth-fingerprint.js.map +1 -0
  465. package/dist/providers/claude.d.ts +43 -0
  466. package/dist/providers/claude.d.ts.map +1 -0
  467. package/dist/providers/claude.js +191 -0
  468. package/dist/providers/claude.js.map +1 -0
  469. package/dist/providers/codex-identity.d.ts +13 -0
  470. package/dist/providers/codex-identity.d.ts.map +1 -0
  471. package/dist/providers/codex-identity.js +69 -0
  472. package/dist/providers/codex-identity.js.map +1 -0
  473. package/dist/providers/codex-refresh.d.ts +30 -0
  474. package/dist/providers/codex-refresh.d.ts.map +1 -0
  475. package/dist/providers/codex-refresh.js +64 -0
  476. package/dist/providers/codex-refresh.js.map +1 -0
  477. package/dist/providers/codex-usage.d.ts +3 -0
  478. package/dist/providers/codex-usage.d.ts.map +1 -0
  479. package/dist/providers/codex-usage.js +42 -0
  480. package/dist/providers/codex-usage.js.map +1 -0
  481. package/dist/providers/codex.d.ts +61 -0
  482. package/dist/providers/codex.d.ts.map +1 -0
  483. package/dist/providers/codex.js +212 -0
  484. package/dist/providers/codex.js.map +1 -0
  485. package/dist/providers/gemini-antigravity-oauth.d.ts +83 -0
  486. package/dist/providers/gemini-antigravity-oauth.d.ts.map +1 -0
  487. package/dist/providers/gemini-antigravity-oauth.js +343 -0
  488. package/dist/providers/gemini-antigravity-oauth.js.map +1 -0
  489. package/dist/providers/gemini-antigravity-state.d.ts +35 -0
  490. package/dist/providers/gemini-antigravity-state.d.ts.map +1 -0
  491. package/dist/providers/gemini-antigravity-state.js +433 -0
  492. package/dist/providers/gemini-antigravity-state.js.map +1 -0
  493. package/dist/providers/gemini-env.d.ts +8 -0
  494. package/dist/providers/gemini-env.d.ts.map +1 -0
  495. package/dist/providers/gemini-env.js +78 -0
  496. package/dist/providers/gemini-env.js.map +1 -0
  497. package/dist/providers/gemini-identity.d.ts +2 -0
  498. package/dist/providers/gemini-identity.d.ts.map +1 -0
  499. package/dist/providers/gemini-identity.js +14 -0
  500. package/dist/providers/gemini-identity.js.map +1 -0
  501. package/dist/providers/gemini-proxy/main.d.ts +3 -0
  502. package/dist/providers/gemini-proxy/main.d.ts.map +1 -0
  503. package/dist/providers/gemini-proxy/main.js +176 -0
  504. package/dist/providers/gemini-proxy/main.js.map +1 -0
  505. package/dist/providers/gemini-proxy/server.d.ts +57 -0
  506. package/dist/providers/gemini-proxy/server.d.ts.map +1 -0
  507. package/dist/providers/gemini-proxy/server.js +1240 -0
  508. package/dist/providers/gemini-proxy/server.js.map +1 -0
  509. package/dist/providers/gemini-proxy-entry.d.ts +2 -0
  510. package/dist/providers/gemini-proxy-entry.d.ts.map +1 -0
  511. package/dist/providers/gemini-proxy-entry.js +16 -0
  512. package/dist/providers/gemini-proxy-entry.js.map +1 -0
  513. package/dist/providers/gemini-proxy-lifecycle.d.ts +11 -0
  514. package/dist/providers/gemini-proxy-lifecycle.d.ts.map +1 -0
  515. package/dist/providers/gemini-proxy-lifecycle.js +131 -0
  516. package/dist/providers/gemini-proxy-lifecycle.js.map +1 -0
  517. package/dist/providers/gemini.d.ts +137 -0
  518. package/dist/providers/gemini.d.ts.map +1 -0
  519. package/dist/providers/gemini.js +471 -0
  520. package/dist/providers/gemini.js.map +1 -0
  521. package/dist/providers/grok-proxy/auth.d.ts +27 -0
  522. package/dist/providers/grok-proxy/auth.d.ts.map +1 -0
  523. package/dist/providers/grok-proxy/auth.js +123 -0
  524. package/dist/providers/grok-proxy/auth.js.map +1 -0
  525. package/dist/providers/grok-proxy/main.d.ts +3 -0
  526. package/dist/providers/grok-proxy/main.d.ts.map +1 -0
  527. package/dist/providers/grok-proxy/main.js +111 -0
  528. package/dist/providers/grok-proxy/main.js.map +1 -0
  529. package/dist/providers/grok-proxy/server.d.ts +46 -0
  530. package/dist/providers/grok-proxy/server.d.ts.map +1 -0
  531. package/dist/providers/grok-proxy/server.js +595 -0
  532. package/dist/providers/grok-proxy/server.js.map +1 -0
  533. package/dist/providers/grok.d.ts +38 -0
  534. package/dist/providers/grok.d.ts.map +1 -0
  535. package/dist/providers/grok.js +250 -0
  536. package/dist/providers/grok.js.map +1 -0
  537. package/dist/providers/index.d.ts +14 -0
  538. package/dist/providers/index.d.ts.map +1 -0
  539. package/dist/providers/index.js +23 -0
  540. package/dist/providers/index.js.map +1 -0
  541. package/dist/providers/kiro-secret-store.d.ts +39 -0
  542. package/dist/providers/kiro-secret-store.d.ts.map +1 -0
  543. package/dist/providers/kiro-secret-store.js +168 -0
  544. package/dist/providers/kiro-secret-store.js.map +1 -0
  545. package/dist/providers/kiro.d.ts +50 -0
  546. package/dist/providers/kiro.d.ts.map +1 -0
  547. package/dist/providers/kiro.js +373 -0
  548. package/dist/providers/kiro.js.map +1 -0
  549. package/dist/providers/model-policy.d.ts +15 -0
  550. package/dist/providers/model-policy.d.ts.map +1 -0
  551. package/dist/providers/model-policy.js +26 -0
  552. package/dist/providers/model-policy.js.map +1 -0
  553. package/dist/providers/opencode-auth.d.ts +67 -0
  554. package/dist/providers/opencode-auth.d.ts.map +1 -0
  555. package/dist/providers/opencode-auth.js +146 -0
  556. package/dist/providers/opencode-auth.js.map +1 -0
  557. package/dist/providers/opencode-cli-entry.d.ts +36 -0
  558. package/dist/providers/opencode-cli-entry.d.ts.map +1 -0
  559. package/dist/providers/opencode-cli-entry.js +90 -0
  560. package/dist/providers/opencode-cli-entry.js.map +1 -0
  561. package/dist/providers/opencode-proxy/abort.d.ts +8 -0
  562. package/dist/providers/opencode-proxy/abort.d.ts.map +1 -0
  563. package/dist/providers/opencode-proxy/abort.js +42 -0
  564. package/dist/providers/opencode-proxy/abort.js.map +1 -0
  565. package/dist/providers/opencode-proxy/anthropic-handler.d.ts +4 -0
  566. package/dist/providers/opencode-proxy/anthropic-handler.d.ts.map +1 -0
  567. package/dist/providers/opencode-proxy/anthropic-handler.js +108 -0
  568. package/dist/providers/opencode-proxy/anthropic-handler.js.map +1 -0
  569. package/dist/providers/opencode-proxy/auth.d.ts +38 -0
  570. package/dist/providers/opencode-proxy/auth.d.ts.map +1 -0
  571. package/dist/providers/opencode-proxy/auth.js +128 -0
  572. package/dist/providers/opencode-proxy/auth.js.map +1 -0
  573. package/dist/providers/opencode-proxy/body.d.ts +9 -0
  574. package/dist/providers/opencode-proxy/body.d.ts.map +1 -0
  575. package/dist/providers/opencode-proxy/body.js +69 -0
  576. package/dist/providers/opencode-proxy/body.js.map +1 -0
  577. package/dist/providers/opencode-proxy/catalog-handlers.d.ts +7 -0
  578. package/dist/providers/opencode-proxy/catalog-handlers.d.ts.map +1 -0
  579. package/dist/providers/opencode-proxy/catalog-handlers.js +132 -0
  580. package/dist/providers/opencode-proxy/catalog-handlers.js.map +1 -0
  581. package/dist/providers/opencode-proxy/catalog.d.ts +41 -0
  582. package/dist/providers/opencode-proxy/catalog.d.ts.map +1 -0
  583. package/dist/providers/opencode-proxy/catalog.js +146 -0
  584. package/dist/providers/opencode-proxy/catalog.js.map +1 -0
  585. package/dist/providers/opencode-proxy/cli.d.ts +2 -0
  586. package/dist/providers/opencode-proxy/cli.d.ts.map +1 -0
  587. package/dist/providers/opencode-proxy/cli.js +162 -0
  588. package/dist/providers/opencode-proxy/cli.js.map +1 -0
  589. package/dist/providers/opencode-proxy/constants.d.ts +13 -0
  590. package/dist/providers/opencode-proxy/constants.d.ts.map +1 -0
  591. package/dist/providers/opencode-proxy/constants.js +15 -0
  592. package/dist/providers/opencode-proxy/constants.js.map +1 -0
  593. package/dist/providers/opencode-proxy/context-budget.d.ts +31 -0
  594. package/dist/providers/opencode-proxy/context-budget.d.ts.map +1 -0
  595. package/dist/providers/opencode-proxy/context-budget.js +165 -0
  596. package/dist/providers/opencode-proxy/context-budget.js.map +1 -0
  597. package/dist/providers/opencode-proxy/errors.d.ts +5 -0
  598. package/dist/providers/opencode-proxy/errors.d.ts.map +1 -0
  599. package/dist/providers/opencode-proxy/errors.js +45 -0
  600. package/dist/providers/opencode-proxy/errors.js.map +1 -0
  601. package/dist/providers/opencode-proxy/forwarders.d.ts +7 -0
  602. package/dist/providers/opencode-proxy/forwarders.d.ts.map +1 -0
  603. package/dist/providers/opencode-proxy/forwarders.js +214 -0
  604. package/dist/providers/opencode-proxy/forwarders.js.map +1 -0
  605. package/dist/providers/opencode-proxy/http.d.ts +11 -0
  606. package/dist/providers/opencode-proxy/http.d.ts.map +1 -0
  607. package/dist/providers/opencode-proxy/http.js +97 -0
  608. package/dist/providers/opencode-proxy/http.js.map +1 -0
  609. package/dist/providers/opencode-proxy/models.d.ts +42 -0
  610. package/dist/providers/opencode-proxy/models.d.ts.map +1 -0
  611. package/dist/providers/opencode-proxy/models.js +148 -0
  612. package/dist/providers/opencode-proxy/models.js.map +1 -0
  613. package/dist/providers/opencode-proxy/openai-handler.d.ts +5 -0
  614. package/dist/providers/opencode-proxy/openai-handler.d.ts.map +1 -0
  615. package/dist/providers/opencode-proxy/openai-handler.js +115 -0
  616. package/dist/providers/opencode-proxy/openai-handler.js.map +1 -0
  617. package/dist/providers/opencode-proxy/router.d.ts +4 -0
  618. package/dist/providers/opencode-proxy/router.d.ts.map +1 -0
  619. package/dist/providers/opencode-proxy/router.js +65 -0
  620. package/dist/providers/opencode-proxy/router.js.map +1 -0
  621. package/dist/providers/opencode-proxy/runtime.d.ts +23 -0
  622. package/dist/providers/opencode-proxy/runtime.d.ts.map +1 -0
  623. package/dist/providers/opencode-proxy/runtime.js +158 -0
  624. package/dist/providers/opencode-proxy/runtime.js.map +1 -0
  625. package/dist/providers/opencode-proxy/server.d.ts +13 -0
  626. package/dist/providers/opencode-proxy/server.d.ts.map +1 -0
  627. package/dist/providers/opencode-proxy/server.js +52 -0
  628. package/dist/providers/opencode-proxy/server.js.map +1 -0
  629. package/dist/providers/opencode-proxy/stream.d.ts +4 -0
  630. package/dist/providers/opencode-proxy/stream.d.ts.map +1 -0
  631. package/dist/providers/opencode-proxy/stream.js +71 -0
  632. package/dist/providers/opencode-proxy/stream.js.map +1 -0
  633. package/dist/providers/opencode-proxy/translate-stream.d.ts +3 -0
  634. package/dist/providers/opencode-proxy/translate-stream.d.ts.map +1 -0
  635. package/dist/providers/opencode-proxy/translate-stream.js +205 -0
  636. package/dist/providers/opencode-proxy/translate-stream.js.map +1 -0
  637. package/dist/providers/opencode-proxy/translate.d.ts +11 -0
  638. package/dist/providers/opencode-proxy/translate.d.ts.map +1 -0
  639. package/dist/providers/opencode-proxy/translate.js +250 -0
  640. package/dist/providers/opencode-proxy/translate.js.map +1 -0
  641. package/dist/providers/opencode-proxy/types.d.ts +110 -0
  642. package/dist/providers/opencode-proxy/types.d.ts.map +1 -0
  643. package/dist/providers/opencode-proxy/types.js +38 -0
  644. package/dist/providers/opencode-proxy/types.js.map +1 -0
  645. package/dist/providers/opencode-proxy-lifecycle.d.ts +11 -0
  646. package/dist/providers/opencode-proxy-lifecycle.d.ts.map +1 -0
  647. package/dist/providers/opencode-proxy-lifecycle.js +144 -0
  648. package/dist/providers/opencode-proxy-lifecycle.js.map +1 -0
  649. package/dist/providers/opencode.d.ts +40 -0
  650. package/dist/providers/opencode.d.ts.map +1 -0
  651. package/dist/providers/opencode.js +190 -0
  652. package/dist/providers/opencode.js.map +1 -0
  653. package/dist/providers/protocol/anthropic-convert.d.ts +12 -0
  654. package/dist/providers/protocol/anthropic-convert.d.ts.map +1 -0
  655. package/dist/providers/protocol/anthropic-convert.js +113 -0
  656. package/dist/providers/protocol/anthropic-convert.js.map +1 -0
  657. package/dist/providers/protocol/anthropic-helpers.d.ts +13 -0
  658. package/dist/providers/protocol/anthropic-helpers.d.ts.map +1 -0
  659. package/dist/providers/protocol/anthropic-helpers.js +179 -0
  660. package/dist/providers/protocol/anthropic-helpers.js.map +1 -0
  661. package/dist/providers/protocol/anthropic-stream-reader.d.ts +13 -0
  662. package/dist/providers/protocol/anthropic-stream-reader.d.ts.map +1 -0
  663. package/dist/providers/protocol/anthropic-stream-reader.js +46 -0
  664. package/dist/providers/protocol/anthropic-stream-reader.js.map +1 -0
  665. package/dist/providers/protocol/anthropic-stream.d.ts +7 -0
  666. package/dist/providers/protocol/anthropic-stream.d.ts.map +1 -0
  667. package/dist/providers/protocol/anthropic-stream.js +318 -0
  668. package/dist/providers/protocol/anthropic-stream.js.map +1 -0
  669. package/dist/providers/protocol/anthropic-types.d.ts +240 -0
  670. package/dist/providers/protocol/anthropic-types.d.ts.map +1 -0
  671. package/dist/providers/protocol/anthropic.d.ts +20 -0
  672. package/dist/providers/protocol/anthropic.d.ts.map +1 -0
  673. package/dist/providers/protocol/gemini/translate-anthropic.d.ts +15 -0
  674. package/dist/providers/protocol/gemini/translate-anthropic.d.ts.map +1 -0
  675. package/dist/providers/protocol/gemini/translate-anthropic.js +84 -0
  676. package/dist/providers/protocol/gemini/translate-anthropic.js.map +1 -0
  677. package/dist/providers/protocol/gemini/translate-chat.d.ts +5 -0
  678. package/dist/providers/protocol/gemini/translate-chat.d.ts.map +1 -0
  679. package/dist/providers/protocol/gemini/translate-chat.js +142 -0
  680. package/dist/providers/protocol/gemini/translate-chat.js.map +1 -0
  681. package/dist/providers/protocol/gemini/translate-models.d.ts +40 -0
  682. package/dist/providers/protocol/gemini/translate-models.d.ts.map +1 -0
  683. package/dist/providers/protocol/gemini/translate-models.js +186 -0
  684. package/dist/providers/protocol/gemini/translate-models.js.map +1 -0
  685. package/dist/providers/protocol/gemini/translate-responses.d.ts +6 -0
  686. package/dist/providers/protocol/gemini/translate-responses.d.ts.map +1 -0
  687. package/dist/providers/protocol/gemini/translate-responses.js +187 -0
  688. package/dist/providers/protocol/gemini/translate-responses.js.map +1 -0
  689. package/dist/providers/protocol/gemini/translate-schema.d.ts +9 -0
  690. package/dist/providers/protocol/gemini/translate-schema.d.ts.map +1 -0
  691. package/dist/providers/protocol/gemini/translate-schema.js +48 -0
  692. package/dist/providers/protocol/gemini/translate-schema.js.map +1 -0
  693. package/dist/providers/protocol/gemini/translate-shared.d.ts +8 -0
  694. package/dist/providers/protocol/gemini/translate-shared.d.ts.map +1 -0
  695. package/dist/providers/protocol/gemini/translate-shared.js +47 -0
  696. package/dist/providers/protocol/gemini/translate-shared.js.map +1 -0
  697. package/dist/providers/protocol/gemini/translate-thinking.d.ts +7 -0
  698. package/dist/providers/protocol/gemini/translate-thinking.d.ts.map +1 -0
  699. package/dist/providers/protocol/gemini/translate-thinking.js +65 -0
  700. package/dist/providers/protocol/gemini/translate-thinking.js.map +1 -0
  701. package/dist/providers/protocol/gemini/translate-types.d.ts +133 -0
  702. package/dist/providers/protocol/gemini/translate-types.d.ts.map +1 -0
  703. package/dist/providers/protocol/gemini/translate.d.ts +7 -0
  704. package/dist/providers/protocol/gemini/translate.d.ts.map +1 -0
  705. package/dist/providers/protocol/json-schema.d.ts +52 -0
  706. package/dist/providers/protocol/json-schema.d.ts.map +1 -0
  707. package/dist/providers/protocol/json-schema.js +189 -0
  708. package/dist/providers/protocol/json-schema.js.map +1 -0
  709. package/dist/providers/protocol/token-estimate.d.ts +15 -0
  710. package/dist/providers/protocol/token-estimate.d.ts.map +1 -0
  711. package/dist/providers/protocol/token-estimate.js +34 -0
  712. package/dist/providers/protocol/token-estimate.js.map +1 -0
  713. package/dist/providers/proxy-hub-backend.d.ts +4 -0
  714. package/dist/providers/proxy-hub-backend.d.ts.map +1 -0
  715. package/dist/providers/proxy-hub-backend.js +11 -0
  716. package/dist/providers/proxy-hub-backend.js.map +1 -0
  717. package/dist/providers/proxy-process.d.ts +35 -0
  718. package/dist/providers/proxy-process.d.ts.map +1 -0
  719. package/dist/providers/proxy-process.js +119 -0
  720. package/dist/providers/proxy-process.js.map +1 -0
  721. package/dist/providers/proxy-shared.d.ts +43 -0
  722. package/dist/providers/proxy-shared.d.ts.map +1 -0
  723. package/dist/providers/proxy-shared.js +128 -0
  724. package/dist/providers/proxy-shared.js.map +1 -0
  725. package/dist/providers/quota-guard.d.ts +49 -0
  726. package/dist/providers/quota-guard.d.ts.map +1 -0
  727. package/dist/providers/quota-guard.js +107 -0
  728. package/dist/providers/quota-guard.js.map +1 -0
  729. package/dist/providers/reasoning.d.ts +27 -0
  730. package/dist/providers/reasoning.d.ts.map +1 -0
  731. package/dist/providers/reasoning.js +61 -0
  732. package/dist/providers/reasoning.js.map +1 -0
  733. package/dist/providers/upstream-policy.d.ts +33 -0
  734. package/dist/providers/upstream-policy.d.ts.map +1 -0
  735. package/dist/providers/upstream-policy.js +97 -0
  736. package/dist/providers/upstream-policy.js.map +1 -0
  737. package/dist/public-types.d.ts +3 -0
  738. package/dist/public-types.d.ts.map +1 -0
  739. package/dist/public.d.ts +19 -0
  740. package/dist/public.d.ts.map +1 -0
  741. package/dist/public.js +16 -0
  742. package/dist/public.js.map +1 -0
  743. package/dist/sources/account-adapters.d.ts +64 -0
  744. package/dist/sources/account-adapters.d.ts.map +1 -0
  745. package/dist/sources/account-adapters.js +205 -0
  746. package/dist/sources/account-adapters.js.map +1 -0
  747. package/dist/sources/gateway-adapters.d.ts +26 -0
  748. package/dist/sources/gateway-adapters.d.ts.map +1 -0
  749. package/dist/sources/gateway-adapters.js +43 -0
  750. package/dist/sources/gateway-adapters.js.map +1 -0
  751. package/dist/sources/kiro-proxy-bin.d.ts +41 -0
  752. package/dist/sources/kiro-proxy-bin.d.ts.map +1 -0
  753. package/dist/sources/kiro-proxy-bin.js +140 -0
  754. package/dist/sources/kiro-proxy-bin.js.map +1 -0
  755. package/dist/sources/proxy-hub-adapters.d.ts +7 -0
  756. package/dist/sources/proxy-hub-adapters.d.ts.map +1 -0
  757. package/dist/sources/proxy-hub-adapters.js +26 -0
  758. package/dist/sources/proxy-hub-adapters.js.map +1 -0
  759. package/dist/testing.d.ts +9 -0
  760. package/dist/testing.d.ts.map +1 -0
  761. package/dist/testing.js +6 -0
  762. package/dist/tray/AnyPickTray.swift +3 -0
  763. package/dist/tray/activity.d.ts +18 -0
  764. package/dist/tray/activity.d.ts.map +1 -0
  765. package/dist/tray/activity.js +51 -0
  766. package/dist/tray/activity.js.map +1 -0
  767. package/dist/tray/app-icons/icon-1024.png +0 -0
  768. package/dist/tray/app-icons/icon-128.png +0 -0
  769. package/dist/tray/app-icons/icon-16.png +0 -0
  770. package/dist/tray/app-icons/icon-256.png +0 -0
  771. package/dist/tray/app-icons/icon-32.png +0 -0
  772. package/dist/tray/app-icons/icon-512.png +0 -0
  773. package/dist/tray/app-icons/icon-64.png +0 -0
  774. package/dist/tray/icons/claude.svg +1 -0
  775. package/dist/tray/icons/googlegemini.svg +1 -0
  776. package/dist/tray/icons/grok.svg +1 -0
  777. package/dist/tray/icons/kiro.svg +1 -0
  778. package/dist/tray/icons/openai.svg +1 -0
  779. package/dist/tray/icons/opencode.svg +1 -0
  780. package/dist/tray/icons/openrouter.svg +1 -0
  781. package/dist/tray/model-role-actions.d.ts +15 -0
  782. package/dist/tray/model-role-actions.d.ts.map +1 -0
  783. package/dist/tray/model-role-actions.js +41 -0
  784. package/dist/tray/model-role-actions.js.map +1 -0
  785. package/dist/tray/native/AccountsPanel.swift +434 -0
  786. package/dist/tray/native/AppEntry.swift +229 -0
  787. package/dist/tray/native/MainWindow.swift +300 -0
  788. package/dist/tray/native/ManageFormChrome.swift +332 -0
  789. package/dist/tray/native/ManageForms.swift +472 -0
  790. package/dist/tray/native/ManagePanel.swift +356 -0
  791. package/dist/tray/native/Models.swift +259 -0
  792. package/dist/tray/native/ModelsEditor.swift +390 -0
  793. package/dist/tray/native/ModelsOverview.swift +76 -0
  794. package/dist/tray/native/ModelsPickers.swift +273 -0
  795. package/dist/tray/native/ModelsRoutePickers.swift +718 -0
  796. package/dist/tray/native/MonitorPanel.swift +375 -0
  797. package/dist/tray/native/ProxyPanel.swift +326 -0
  798. package/dist/tray/native/QuickActivityRow.swift +40 -0
  799. package/dist/tray/native/QuickNav.swift +62 -0
  800. package/dist/tray/native/QuickPanel.swift +447 -0
  801. package/dist/tray/native/QuickRouteRow.swift +189 -0
  802. package/dist/tray/native/QuickServiceRows.swift +292 -0
  803. package/dist/tray/native/RoutingIssues.swift +293 -0
  804. package/dist/tray/native/SettingsPanel.swift +225 -0
  805. package/dist/tray/native/SharedUI.swift +681 -0
  806. package/dist/tray/native/Store.swift +540 -0
  807. package/dist/tray/native/Theme.swift +139 -0
  808. package/dist/tray/native/TrayChrome.swift +657 -0
  809. package/dist/tray/native/TrayControls.swift +475 -0
  810. package/dist/tray/native/TrayPreferences.swift +46 -0
  811. package/dist/tray/native/sources.txt +26 -0
  812. package/dist/tray/native-sources.d.ts +8 -0
  813. package/dist/tray/native-sources.d.ts.map +1 -0
  814. package/dist/tray/native-sources.js +19 -0
  815. package/dist/tray/native-sources.js.map +1 -0
  816. package/dist/tray/protocol.d.ts +79 -0
  817. package/dist/tray/protocol.d.ts.map +1 -0
  818. package/dist/tray/protocol.js +145 -0
  819. package/dist/tray/protocol.js.map +1 -0
  820. package/dist/tray/settings.d.ts +15 -0
  821. package/dist/tray/settings.d.ts.map +1 -0
  822. package/dist/tray/settings.js +72 -0
  823. package/dist/tray/settings.js.map +1 -0
  824. package/dist/tray/snapshot-client-routes.d.ts +11 -0
  825. package/dist/tray/snapshot-client-routes.d.ts.map +1 -0
  826. package/dist/tray/snapshot-client-routes.js +305 -0
  827. package/dist/tray/snapshot-client-routes.js.map +1 -0
  828. package/dist/tray/snapshot-helpers.d.ts +20 -0
  829. package/dist/tray/snapshot-helpers.d.ts.map +1 -0
  830. package/dist/tray/snapshot-helpers.js +74 -0
  831. package/dist/tray/snapshot-helpers.js.map +1 -0
  832. package/dist/tray/snapshot-hub.d.ts +7 -0
  833. package/dist/tray/snapshot-hub.d.ts.map +1 -0
  834. package/dist/tray/snapshot-hub.js +93 -0
  835. package/dist/tray/snapshot-hub.js.map +1 -0
  836. package/dist/tray/snapshot-resources.d.ts +19 -0
  837. package/dist/tray/snapshot-resources.d.ts.map +1 -0
  838. package/dist/tray/snapshot-resources.js +216 -0
  839. package/dist/tray/snapshot-resources.js.map +1 -0
  840. package/dist/tray/snapshot-types.d.ts +229 -0
  841. package/dist/tray/snapshot-types.d.ts.map +1 -0
  842. package/dist/tray/snapshot-usage.d.ts +9 -0
  843. package/dist/tray/snapshot-usage.d.ts.map +1 -0
  844. package/dist/tray/snapshot-usage.js +35 -0
  845. package/dist/tray/snapshot-usage.js.map +1 -0
  846. package/dist/tray/snapshot.d.ts +7 -0
  847. package/dist/tray/snapshot.d.ts.map +1 -0
  848. package/dist/tray/snapshot.js +48 -0
  849. package/dist/tray/snapshot.js.map +1 -0
  850. package/dist/tray/supervisor-actions.d.ts +19 -0
  851. package/dist/tray/supervisor-actions.d.ts.map +1 -0
  852. package/dist/tray/supervisor-actions.js +224 -0
  853. package/dist/tray/supervisor-actions.js.map +1 -0
  854. package/dist/tray/supervisor-activity.d.ts +5 -0
  855. package/dist/tray/supervisor-activity.d.ts.map +1 -0
  856. package/dist/tray/supervisor-activity.js +19 -0
  857. package/dist/tray/supervisor-activity.js.map +1 -0
  858. package/dist/tray/supervisor-errors.d.ts +9 -0
  859. package/dist/tray/supervisor-errors.d.ts.map +1 -0
  860. package/dist/tray/supervisor-errors.js +91 -0
  861. package/dist/tray/supervisor-errors.js.map +1 -0
  862. package/dist/tray/supervisor-logs.d.ts +6 -0
  863. package/dist/tray/supervisor-logs.d.ts.map +1 -0
  864. package/dist/tray/supervisor-logs.js +52 -0
  865. package/dist/tray/supervisor-logs.js.map +1 -0
  866. package/dist/tray/supervisor-mutations.d.ts +14 -0
  867. package/dist/tray/supervisor-mutations.d.ts.map +1 -0
  868. package/dist/tray/supervisor-mutations.js +218 -0
  869. package/dist/tray/supervisor-mutations.js.map +1 -0
  870. package/dist/tray/supervisor-native.d.ts +22 -0
  871. package/dist/tray/supervisor-native.d.ts.map +1 -0
  872. package/dist/tray/supervisor-native.js +227 -0
  873. package/dist/tray/supervisor-native.js.map +1 -0
  874. package/dist/tray/supervisor-proxies.d.ts +6 -0
  875. package/dist/tray/supervisor-proxies.d.ts.map +1 -0
  876. package/dist/tray/supervisor-proxies.js +37 -0
  877. package/dist/tray/supervisor-proxies.js.map +1 -0
  878. package/dist/tray/supervisor-tauri.d.ts +13 -0
  879. package/dist/tray/supervisor-tauri.d.ts.map +1 -0
  880. package/dist/tray/supervisor-tauri.js +36 -0
  881. package/dist/tray/supervisor-tauri.js.map +1 -0
  882. package/dist/tray/supervisor.d.ts +17 -0
  883. package/dist/tray/supervisor.d.ts.map +1 -0
  884. package/dist/tray/supervisor.js +372 -0
  885. package/dist/tray/supervisor.js.map +1 -0
  886. package/dist/tray/terminal-launcher.d.ts +12 -0
  887. package/dist/tray/terminal-launcher.d.ts.map +1 -0
  888. package/dist/tray/terminal-launcher.js +130 -0
  889. package/dist/tray/terminal-launcher.js.map +1 -0
  890. package/dist/tui/actions/ensure-proxy-up.d.ts +15 -0
  891. package/dist/tui/actions/ensure-proxy-up.d.ts.map +1 -0
  892. package/dist/tui/actions/ensure-proxy-up.js +41 -0
  893. package/dist/tui/actions/ensure-proxy-up.js.map +1 -0
  894. package/dist/tui/actions/use-account-actions.d.ts +35 -0
  895. package/dist/tui/actions/use-account-actions.d.ts.map +1 -0
  896. package/dist/tui/actions/use-account-actions.js +527 -0
  897. package/dist/tui/actions/use-account-actions.js.map +1 -0
  898. package/dist/tui/actions/use-app-bindings.d.ts +83 -0
  899. package/dist/tui/actions/use-app-bindings.d.ts.map +1 -0
  900. package/dist/tui/actions/use-app-bindings.js +472 -0
  901. package/dist/tui/actions/use-app-bindings.js.map +1 -0
  902. package/dist/tui/actions/use-gateway-actions.d.ts +45 -0
  903. package/dist/tui/actions/use-gateway-actions.d.ts.map +1 -0
  904. package/dist/tui/actions/use-gateway-actions.js +370 -0
  905. package/dist/tui/actions/use-gateway-actions.js.map +1 -0
  906. package/dist/tui/actions/use-home-filter.d.ts +24 -0
  907. package/dist/tui/actions/use-home-filter.d.ts.map +1 -0
  908. package/dist/tui/actions/use-home-filter.js +48 -0
  909. package/dist/tui/actions/use-home-filter.js.map +1 -0
  910. package/dist/tui/actions/use-model-role-editor.d.ts +44 -0
  911. package/dist/tui/actions/use-model-role-editor.d.ts.map +1 -0
  912. package/dist/tui/actions/use-model-role-editor.js +68 -0
  913. package/dist/tui/actions/use-model-role-editor.js.map +1 -0
  914. package/dist/tui/actions/use-provider-filter.d.ts +10 -0
  915. package/dist/tui/actions/use-provider-filter.d.ts.map +1 -0
  916. package/dist/tui/actions/use-provider-filter.js +22 -0
  917. package/dist/tui/actions/use-provider-filter.js.map +1 -0
  918. package/dist/tui/actions/use-proxy-actions.d.ts +31 -0
  919. package/dist/tui/actions/use-proxy-actions.d.ts.map +1 -0
  920. package/dist/tui/actions/use-proxy-actions.js +474 -0
  921. package/dist/tui/actions/use-proxy-actions.js.map +1 -0
  922. package/dist/tui/actions/use-text-input-submit.d.ts +16 -0
  923. package/dist/tui/actions/use-text-input-submit.d.ts.map +1 -0
  924. package/dist/tui/actions/use-text-input-submit.js +96 -0
  925. package/dist/tui/actions/use-text-input-submit.js.map +1 -0
  926. package/dist/tui/actions/use-tray-runtime-actions.d.ts +18 -0
  927. package/dist/tui/actions/use-tray-runtime-actions.d.ts.map +1 -0
  928. package/dist/tui/actions/use-tray-runtime-actions.js +78 -0
  929. package/dist/tui/actions/use-tray-runtime-actions.js.map +1 -0
  930. package/dist/tui/app-ui-helpers.d.ts +14 -0
  931. package/dist/tui/app-ui-helpers.d.ts.map +1 -0
  932. package/dist/tui/app-ui-helpers.js +48 -0
  933. package/dist/tui/app-ui-helpers.js.map +1 -0
  934. package/dist/tui/app-ui.d.ts +19 -0
  935. package/dist/tui/app-ui.d.ts.map +1 -0
  936. package/dist/tui/app-ui.js +98 -0
  937. package/dist/tui/app-ui.js.map +1 -0
  938. package/dist/tui/components/chrome/header.d.ts +39 -0
  939. package/dist/tui/components/chrome/header.d.ts.map +1 -0
  940. package/dist/tui/components/chrome/header.js +161 -0
  941. package/dist/tui/components/chrome/header.js.map +1 -0
  942. package/dist/tui/components/chrome/inputs.d.ts +34 -0
  943. package/dist/tui/components/chrome/inputs.d.ts.map +1 -0
  944. package/dist/tui/components/chrome/inputs.js +82 -0
  945. package/dist/tui/components/chrome/inputs.js.map +1 -0
  946. package/dist/tui/components/chrome/layout.d.ts +61 -0
  947. package/dist/tui/components/chrome/layout.d.ts.map +1 -0
  948. package/dist/tui/components/chrome/layout.js +119 -0
  949. package/dist/tui/components/chrome/layout.js.map +1 -0
  950. package/dist/tui/components/chrome/legacy.d.ts +84 -0
  951. package/dist/tui/components/chrome/legacy.d.ts.map +1 -0
  952. package/dist/tui/components/chrome/legacy.js +6 -0
  953. package/dist/tui/components/chrome/rows.d.ts +89 -0
  954. package/dist/tui/components/chrome/rows.d.ts.map +1 -0
  955. package/dist/tui/components/chrome/rows.js +151 -0
  956. package/dist/tui/components/chrome/rows.js.map +1 -0
  957. package/dist/tui/components/chrome/status.d.ts +50 -0
  958. package/dist/tui/components/chrome/status.d.ts.map +1 -0
  959. package/dist/tui/components/chrome/status.js +157 -0
  960. package/dist/tui/components/chrome/status.js.map +1 -0
  961. package/dist/tui/components/chrome.d.ts +7 -0
  962. package/dist/tui/components/chrome.d.ts.map +1 -0
  963. package/dist/tui/components/chrome.js +7 -0
  964. package/dist/tui/components.d.ts +26 -0
  965. package/dist/tui/components.d.ts.map +1 -0
  966. package/dist/tui/components.js +182 -0
  967. package/dist/tui/components.js.map +1 -0
  968. package/dist/tui/model/anypick.d.ts +106 -0
  969. package/dist/tui/model/anypick.d.ts.map +1 -0
  970. package/dist/tui/model/anypick.js +116 -0
  971. package/dist/tui/model/anypick.js.map +1 -0
  972. package/dist/tui/model/bindings.d.ts +39 -0
  973. package/dist/tui/model/bindings.d.ts.map +1 -0
  974. package/dist/tui/model/bindings.js +102 -0
  975. package/dist/tui/model/bindings.js.map +1 -0
  976. package/dist/tui/model/detail.d.ts +6 -0
  977. package/dist/tui/model/detail.d.ts.map +1 -0
  978. package/dist/tui/model/detail.js +85 -0
  979. package/dist/tui/model/detail.js.map +1 -0
  980. package/dist/tui/model/gateway.d.ts +46 -0
  981. package/dist/tui/model/gateway.d.ts.map +1 -0
  982. package/dist/tui/model/gateway.js +134 -0
  983. package/dist/tui/model/gateway.js.map +1 -0
  984. package/dist/tui/model/home-format.d.ts +52 -0
  985. package/dist/tui/model/home-format.d.ts.map +1 -0
  986. package/dist/tui/model/home-format.js +64 -0
  987. package/dist/tui/model/home-format.js.map +1 -0
  988. package/dist/tui/model/home-load.d.ts +8 -0
  989. package/dist/tui/model/home-load.d.ts.map +1 -0
  990. package/dist/tui/model/home-load.js +244 -0
  991. package/dist/tui/model/home-load.js.map +1 -0
  992. package/dist/tui/model/identity.d.ts +53 -0
  993. package/dist/tui/model/identity.d.ts.map +1 -0
  994. package/dist/tui/model/identity.js +176 -0
  995. package/dist/tui/model/identity.js.map +1 -0
  996. package/dist/tui/model/line-editor.d.ts +99 -0
  997. package/dist/tui/model/line-editor.d.ts.map +1 -0
  998. package/dist/tui/model/line-editor.js +186 -0
  999. package/dist/tui/model/line-editor.js.map +1 -0
  1000. package/dist/tui/model/names.d.ts +28 -0
  1001. package/dist/tui/model/names.d.ts.map +1 -0
  1002. package/dist/tui/model/names.js +42 -0
  1003. package/dist/tui/model/names.js.map +1 -0
  1004. package/dist/tui/model/pool.d.ts +11 -0
  1005. package/dist/tui/model/pool.d.ts.map +1 -0
  1006. package/dist/tui/model/pool.js +115 -0
  1007. package/dist/tui/model/pool.js.map +1 -0
  1008. package/dist/tui/model/provider-filter.d.ts +14 -0
  1009. package/dist/tui/model/provider-filter.d.ts.map +1 -0
  1010. package/dist/tui/model/provider-filter.js +46 -0
  1011. package/dist/tui/model/provider-filter.js.map +1 -0
  1012. package/dist/tui/model/proxy-hub.d.ts +23 -0
  1013. package/dist/tui/model/proxy-hub.d.ts.map +1 -0
  1014. package/dist/tui/model/proxy-hub.js +69 -0
  1015. package/dist/tui/model/proxy-hub.js.map +1 -0
  1016. package/dist/tui/model/proxy-labels.d.ts +5 -0
  1017. package/dist/tui/model/proxy-labels.d.ts.map +1 -0
  1018. package/dist/tui/model/proxy-labels.js +18 -0
  1019. package/dist/tui/model/proxy-labels.js.map +1 -0
  1020. package/dist/tui/model/proxy.d.ts +15 -0
  1021. package/dist/tui/model/proxy.d.ts.map +1 -0
  1022. package/dist/tui/model/proxy.js +214 -0
  1023. package/dist/tui/model/proxy.js.map +1 -0
  1024. package/dist/tui/model/root.d.ts +20 -0
  1025. package/dist/tui/model/root.d.ts.map +1 -0
  1026. package/dist/tui/model/root.js +126 -0
  1027. package/dist/tui/model/root.js.map +1 -0
  1028. package/dist/tui/model/route-builder.d.ts +25 -0
  1029. package/dist/tui/model/route-builder.d.ts.map +1 -0
  1030. package/dist/tui/model/route-builder.js +199 -0
  1031. package/dist/tui/model/route-builder.js.map +1 -0
  1032. package/dist/tui/model/screen.d.ts +260 -0
  1033. package/dist/tui/model/screen.d.ts.map +1 -0
  1034. package/dist/tui/model/types.d.ts +179 -0
  1035. package/dist/tui/model/types.d.ts.map +1 -0
  1036. package/dist/tui/model.d.ts +18 -0
  1037. package/dist/tui/model.d.ts.map +1 -0
  1038. package/dist/tui/model.js +17 -0
  1039. package/dist/tui/proxy-models-fetch.d.ts +34 -0
  1040. package/dist/tui/proxy-models-fetch.d.ts.map +1 -0
  1041. package/dist/tui/proxy-models-fetch.js +87 -0
  1042. package/dist/tui/proxy-models-fetch.js.map +1 -0
  1043. package/dist/tui/routes/account.d.ts +4 -0
  1044. package/dist/tui/routes/account.d.ts.map +1 -0
  1045. package/dist/tui/routes/account.js +327 -0
  1046. package/dist/tui/routes/account.js.map +1 -0
  1047. package/dist/tui/routes/apps.d.ts +3 -0
  1048. package/dist/tui/routes/apps.d.ts.map +1 -0
  1049. package/dist/tui/routes/apps.js +296 -0
  1050. package/dist/tui/routes/apps.js.map +1 -0
  1051. package/dist/tui/routes/common.d.ts +4 -0
  1052. package/dist/tui/routes/common.d.ts.map +1 -0
  1053. package/dist/tui/routes/common.js +117 -0
  1054. package/dist/tui/routes/common.js.map +1 -0
  1055. package/dist/tui/routes/context.d.ts +43 -0
  1056. package/dist/tui/routes/context.d.ts.map +1 -0
  1057. package/dist/tui/routes/gateway.d.ts +3 -0
  1058. package/dist/tui/routes/gateway.d.ts.map +1 -0
  1059. package/dist/tui/routes/gateway.js +199 -0
  1060. package/dist/tui/routes/gateway.js.map +1 -0
  1061. package/dist/tui/routes/proxy.d.ts +3 -0
  1062. package/dist/tui/routes/proxy.d.ts.map +1 -0
  1063. package/dist/tui/routes/proxy.js +234 -0
  1064. package/dist/tui/routes/proxy.js.map +1 -0
  1065. package/dist/tui/screens/account-detail.d.ts +14 -0
  1066. package/dist/tui/screens/account-detail.d.ts.map +1 -0
  1067. package/dist/tui/screens/account-detail.js +98 -0
  1068. package/dist/tui/screens/account-detail.js.map +1 -0
  1069. package/dist/tui/screens/accounts-home.d.ts +42 -0
  1070. package/dist/tui/screens/accounts-home.d.ts.map +1 -0
  1071. package/dist/tui/screens/accounts-home.js +321 -0
  1072. package/dist/tui/screens/accounts-home.js.map +1 -0
  1073. package/dist/tui/screens/add-account.d.ts +70 -0
  1074. package/dist/tui/screens/add-account.d.ts.map +1 -0
  1075. package/dist/tui/screens/add-account.js +323 -0
  1076. package/dist/tui/screens/add-account.js.map +1 -0
  1077. package/dist/tui/screens/anypick-home.d.ts +39 -0
  1078. package/dist/tui/screens/anypick-home.d.ts.map +1 -0
  1079. package/dist/tui/screens/anypick-home.js +253 -0
  1080. package/dist/tui/screens/anypick-home.js.map +1 -0
  1081. package/dist/tui/screens/anypick-preview.d.ts +13 -0
  1082. package/dist/tui/screens/anypick-preview.d.ts.map +1 -0
  1083. package/dist/tui/screens/anypick-preview.js +49 -0
  1084. package/dist/tui/screens/anypick-preview.js.map +1 -0
  1085. package/dist/tui/screens/app-route-preview.d.ts +14 -0
  1086. package/dist/tui/screens/app-route-preview.d.ts.map +1 -0
  1087. package/dist/tui/screens/app-route-preview.js +35 -0
  1088. package/dist/tui/screens/app-route-preview.js.map +1 -0
  1089. package/dist/tui/screens/app-route-source.d.ts +15 -0
  1090. package/dist/tui/screens/app-route-source.d.ts.map +1 -0
  1091. package/dist/tui/screens/app-route-source.js +97 -0
  1092. package/dist/tui/screens/app-route-source.js.map +1 -0
  1093. package/dist/tui/screens/apps-home.d.ts +22 -0
  1094. package/dist/tui/screens/apps-home.d.ts.map +1 -0
  1095. package/dist/tui/screens/apps-home.js +111 -0
  1096. package/dist/tui/screens/apps-home.js.map +1 -0
  1097. package/dist/tui/screens/confirm.d.ts +19 -0
  1098. package/dist/tui/screens/confirm.d.ts.map +1 -0
  1099. package/dist/tui/screens/confirm.js +42 -0
  1100. package/dist/tui/screens/confirm.js.map +1 -0
  1101. package/dist/tui/screens/credential-form.d.ts +30 -0
  1102. package/dist/tui/screens/credential-form.d.ts.map +1 -0
  1103. package/dist/tui/screens/credential-form.js +241 -0
  1104. package/dist/tui/screens/credential-form.js.map +1 -0
  1105. package/dist/tui/screens/gateway-connection-form.d.ts +16 -0
  1106. package/dist/tui/screens/gateway-connection-form.d.ts.map +1 -0
  1107. package/dist/tui/screens/gateway-connection-form.js +127 -0
  1108. package/dist/tui/screens/gateway-connection-form.js.map +1 -0
  1109. package/dist/tui/screens/gateway-pick-provider.d.ts +19 -0
  1110. package/dist/tui/screens/gateway-pick-provider.d.ts.map +1 -0
  1111. package/dist/tui/screens/gateway-pick-provider.js +62 -0
  1112. package/dist/tui/screens/gateway-pick-provider.js.map +1 -0
  1113. package/dist/tui/screens/gateways-home.d.ts +38 -0
  1114. package/dist/tui/screens/gateways-home.d.ts.map +1 -0
  1115. package/dist/tui/screens/gateways-home.js +247 -0
  1116. package/dist/tui/screens/gateways-home.js.map +1 -0
  1117. package/dist/tui/screens/health.d.ts +16 -0
  1118. package/dist/tui/screens/health.d.ts.map +1 -0
  1119. package/dist/tui/screens/health.js +109 -0
  1120. package/dist/tui/screens/health.js.map +1 -0
  1121. package/dist/tui/screens/help.d.ts +10 -0
  1122. package/dist/tui/screens/help.d.ts.map +1 -0
  1123. package/dist/tui/screens/help.js +213 -0
  1124. package/dist/tui/screens/help.js.map +1 -0
  1125. package/dist/tui/screens/manage-apps.d.ts +29 -0
  1126. package/dist/tui/screens/manage-apps.d.ts.map +1 -0
  1127. package/dist/tui/screens/manage-apps.js +165 -0
  1128. package/dist/tui/screens/manage-apps.js.map +1 -0
  1129. package/dist/tui/screens/proxy-board-helpers.d.ts +9 -0
  1130. package/dist/tui/screens/proxy-board-helpers.d.ts.map +1 -0
  1131. package/dist/tui/screens/proxy-board-helpers.js +70 -0
  1132. package/dist/tui/screens/proxy-board-helpers.js.map +1 -0
  1133. package/dist/tui/screens/proxy-board.d.ts +43 -0
  1134. package/dist/tui/screens/proxy-board.d.ts.map +1 -0
  1135. package/dist/tui/screens/proxy-board.js +351 -0
  1136. package/dist/tui/screens/proxy-board.js.map +1 -0
  1137. package/dist/tui/screens/proxy-hub.d.ts +21 -0
  1138. package/dist/tui/screens/proxy-hub.d.ts.map +1 -0
  1139. package/dist/tui/screens/proxy-hub.js +150 -0
  1140. package/dist/tui/screens/proxy-hub.js.map +1 -0
  1141. package/dist/tui/screens/proxy-models-utils.d.ts +13 -0
  1142. package/dist/tui/screens/proxy-models-utils.d.ts.map +1 -0
  1143. package/dist/tui/screens/proxy-models-utils.js +53 -0
  1144. package/dist/tui/screens/proxy-models-utils.js.map +1 -0
  1145. package/dist/tui/screens/proxy-models.d.ts +65 -0
  1146. package/dist/tui/screens/proxy-models.d.ts.map +1 -0
  1147. package/dist/tui/screens/proxy-models.js +252 -0
  1148. package/dist/tui/screens/proxy-models.js.map +1 -0
  1149. package/dist/tui/screens/proxy.d.ts +26 -0
  1150. package/dist/tui/screens/proxy.d.ts.map +1 -0
  1151. package/dist/tui/screens/text-input.d.ts +18 -0
  1152. package/dist/tui/screens/text-input.d.ts.map +1 -0
  1153. package/dist/tui/screens/text-input.js +67 -0
  1154. package/dist/tui/screens/text-input.js.map +1 -0
  1155. package/dist/tui/screens/tray-runtime.d.ts +19 -0
  1156. package/dist/tui/screens/tray-runtime.d.ts.map +1 -0
  1157. package/dist/tui/screens/tray-runtime.js +108 -0
  1158. package/dist/tui/screens/tray-runtime.js.map +1 -0
  1159. package/dist/tui/use-tui-nav.d.ts +40 -0
  1160. package/dist/tui/use-tui-nav.d.ts.map +1 -0
  1161. package/dist/tui/use-tui-nav.js +256 -0
  1162. package/dist/tui/use-tui-nav.js.map +1 -0
  1163. package/dist/tui/use-tui-shell.d.ts +46 -0
  1164. package/dist/tui/use-tui-shell.d.ts.map +1 -0
  1165. package/dist/tui/use-tui-shell.js +95 -0
  1166. package/dist/tui/use-tui-shell.js.map +1 -0
  1167. package/dist/types/account.d.ts +410 -0
  1168. package/dist/types/account.d.ts.map +1 -0
  1169. package/dist/types/account.js +7 -0
  1170. package/dist/types/account.js.map +1 -0
  1171. package/dist/types/bindings.d.ts +300 -0
  1172. package/dist/types/bindings.d.ts.map +1 -0
  1173. package/dist/types/catalog.d.ts +165 -0
  1174. package/dist/types/catalog.d.ts.map +1 -0
  1175. package/dist/types/clients.d.ts +174 -0
  1176. package/dist/types/clients.d.ts.map +1 -0
  1177. package/dist/types/clients.js +11 -0
  1178. package/dist/types/clients.js.map +1 -0
  1179. package/dist/types/plugins.d.ts +89 -0
  1180. package/dist/types/plugins.d.ts.map +1 -0
  1181. package/dist/types/plugins.js +14 -0
  1182. package/dist/types/plugins.js.map +1 -0
  1183. package/dist/types/proxy-hub.d.ts +109 -0
  1184. package/dist/types/proxy-hub.d.ts.map +1 -0
  1185. package/dist/types.d.ts +7 -0
  1186. package/dist/types.d.ts.map +1 -0
  1187. package/dist/types.js +1 -0
  1188. package/dist/utils/errors.d.ts +61 -0
  1189. package/dist/utils/errors.d.ts.map +1 -0
  1190. package/dist/utils/errors.js +119 -0
  1191. package/dist/utils/errors.js.map +1 -0
  1192. package/dist/utils/fs.d.ts +39 -0
  1193. package/dist/utils/fs.d.ts.map +1 -0
  1194. package/dist/utils/fs.js +126 -0
  1195. package/dist/utils/fs.js.map +1 -0
  1196. package/dist/utils/lock.d.ts +33 -0
  1197. package/dist/utils/lock.d.ts.map +1 -0
  1198. package/dist/utils/lock.js +95 -0
  1199. package/dist/utils/lock.js.map +1 -0
  1200. package/dist/utils/log.d.ts +10 -0
  1201. package/dist/utils/log.d.ts.map +1 -0
  1202. package/dist/utils/log.js +21 -0
  1203. package/dist/utils/log.js.map +1 -0
  1204. package/dist/utils/network.d.ts +3 -0
  1205. package/dist/utils/network.d.ts.map +1 -0
  1206. package/dist/utils/network.js +13 -0
  1207. package/dist/utils/network.js.map +1 -0
  1208. package/dist/utils/process/binary.d.ts +14 -0
  1209. package/dist/utils/process/binary.d.ts.map +1 -0
  1210. package/dist/utils/process/binary.js +29 -0
  1211. package/dist/utils/process/binary.js.map +1 -0
  1212. package/dist/utils/process/follow.d.ts +2 -0
  1213. package/dist/utils/process/follow.d.ts.map +1 -0
  1214. package/dist/utils/process/follow.js +90 -0
  1215. package/dist/utils/process/follow.js.map +1 -0
  1216. package/dist/utils/process/health.d.ts +43 -0
  1217. package/dist/utils/process/health.d.ts.map +1 -0
  1218. package/dist/utils/process/health.js +132 -0
  1219. package/dist/utils/process/health.js.map +1 -0
  1220. package/dist/utils/process/pid.d.ts +95 -0
  1221. package/dist/utils/process/pid.d.ts.map +1 -0
  1222. package/dist/utils/process/pid.js +243 -0
  1223. package/dist/utils/process/pid.js.map +1 -0
  1224. package/dist/utils/process.d.ts +5 -0
  1225. package/dist/utils/process.d.ts.map +1 -0
  1226. package/dist/utils/process.js +5 -0
  1227. package/dist/utils/slug.d.ts +18 -0
  1228. package/dist/utils/slug.d.ts.map +1 -0
  1229. package/dist/utils/slug.js +42 -0
  1230. package/dist/utils/slug.js.map +1 -0
  1231. package/package.json +121 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-service.js","names":[],"sources":["../../src/core/proxy-service.ts"],"sourcesContent":["/**\n * Proxy lifecycle ownership (start/stop/status/logs) and multi-account pool\n * management for account-backed proxies.\n *\n * This was extracted from AccountService so that proxy concerns live in their\n * own collaborator: a Provider owns *where* live auth lives and how to\n * snapshot/restore it; this service owns *how a running proxy for that account\n * is orchestrated*. Client-config realignment (writing BASE_URL into bound\n * clients) is injected as RealignProxyClientsDeps rather than imported, so the\n * proxy service stays below the binding/runtime subsystems.\n *\n * Listen-port selection lives in `ProxyPortAllocator` (proxy-ports.ts), and the\n * lease table is a constructor dependency — both were previously inlined here,\n * which made this class impossible to construct in a test without also standing\n * up the whole app graph.\n */\n\nimport type {\n AccountProxyConfig,\n Provider,\n ProviderProxyPool,\n ProxyContext,\n ProxyHandle,\n ProxyStatus,\n} from '../types';\nimport { AnyPickError } from '../utils/errors';\nimport { normalizeAccountName } from '../utils/slug';\nimport { ensureDir, pathExists } from '../utils/fs';\nimport {\n followFile,\n isListenPortFree,\n isProcessRunning,\n readPidFile,\n readPidRecord,\n} from '../utils/process';\nimport type { ProviderRegistry } from './registry';\nimport type { AccountStore } from './store';\nimport type { LeaseStore } from './lease-store';\nimport { accountSnapshotDir } from './paths';\nimport { PoolStore, poolRuntimeDir } from './pool-store';\nimport {\n realignClientsToAccountProxy,\n type RealignProxyClientsDeps,\n} from './realign-proxy-clients';\nimport { providerCanProxy } from './capabilities';\nimport { ProxyPortAllocator, validatePort } from './proxy-ports';\nimport { readFile } from 'node:fs/promises';\nimport { randomBytes } from 'node:crypto';\nimport { assertLoopbackHost } from '../utils/network';\nimport { withMutationLock } from './mutation-lock';\nimport type { QuotaGuardPolicy } from '../types';\nimport { readQuotaGuardState, type QuotaGuardEvent } from '../providers/quota-guard';\n\n/** Best-effort port extraction from an endpoint like http://127.0.0.1:8080. */\nfunction portFromEndpoint(endpoint: string): number {\n const m = /:(\\d+)(?:\\/|$)/.exec(endpoint);\n return m ? Number(m[1]) : 8080;\n}\n\n/**\n * A single-account proxy is never a pool member, so pool options must not reach\n * it. Older versions persisted `authDirs` onto the primary account's config and\n * nothing removed them when the pool went back to single mode; `authDirs` then\n * takes precedence over the account's own snapshot dir, so the proxy serves\n * whichever account happened to be primary. Dropping them on read retires those\n * records without a migration.\n */\nfunction withoutPoolOptions(config: AccountProxyConfig): AccountProxyConfig {\n if (!config.options) {\n return { ...config };\n }\n const { pool: _pool, authDirs: _authDirs, ...options } = config.options;\n return { ...config, options };\n}\n\n/**\n * Owns proxy lifecycle and multi-account pools.\n * Constructed by the app composition root and exposed as `app.proxy`.\n */\nexport class ProxyService {\n readonly pools: PoolStore;\n /**\n * Optional dependency used when a proxy starts: realign bound clients'\n * BASE_URLs to the new endpoint. Injected at construction (composition time)\n * rather than wired afterwards, so the service has no upward dependency on\n * the app graph.\n */\n private readonly realign?: RealignProxyClientsDeps;\n /**\n * Lease table. Every proxy started through this service records a lease keyed\n * to the owning process, so `reapStaleLeases` can stop orphaned proxies on the\n * next startup — not just proxies started by the activation pipeline.\n *\n * Optional so a caller can build a proxy service without lease bookkeeping,\n * but supplied at construction: it used to be wired by `setLeaseStore()` after\n * the fact, which meant the service was observably half-built between the two\n * calls and could not be constructed in a test without replaying that dance.\n */\n private readonly leases?: LeaseStore;\n /** Listen-port allocation (see proxy-ports.ts). */\n private readonly ports: ProxyPortAllocator;\n\n constructor(\n private readonly store: AccountStore,\n private readonly registry: ProviderRegistry,\n pools?: PoolStore,\n realign?: RealignProxyClientsDeps,\n leases?: LeaseStore,\n private readonly quotaGuardPolicy: () => Promise<QuotaGuardPolicy> = async () => ({\n enabled: false,\n cooldownMinutes: 60,\n }),\n ) {\n this.pools = pools ?? new PoolStore(store.root, store.db);\n this.realign = realign;\n this.leases = leases;\n this.ports = new ProxyPortAllocator(registry, store);\n }\n\n /**\n * Optional re-publisher for the live Codex config block, wired in app.ts so this\n * service does not depend on Hub/Codex services it was not constructed with.\n */\n private codexLiveConfigSync?: () => Promise<void>;\n\n setCodexLiveConfigSync(fn: () => Promise<void>): void {\n this.codexLiveConfigSync = fn;\n }\n\n private async syncCodexLiveConfig(): Promise<void> {\n try {\n await this.codexLiveConfigSync?.();\n } catch {\n // Best-effort: a failed live-block refresh must never fail a proxy op.\n }\n }\n\n /**\n * Record a lease for a freshly started proxy owned by this process, replacing\n * any prior lease for the same provider/account. No-op when no lease store is\n * wired. Best-effort: lease bookkeeping must never fail a proxy start.\n */\n private recordLease(\n provider: string,\n account: string | undefined,\n handle: ProxyHandle,\n forcedOwnerPid?: number,\n ): string | undefined {\n if (!this.leases) {\n return undefined;\n }\n try {\n const previous = this.leases.findByProviderAccount(provider, account);\n // Preserve a live supervisor (tray) owner. Legacy leases used the child\n // proxy PID itself; those are deliberately replaced by the real owner.\n const ownerPid =\n forcedOwnerPid ??\n (previous && previous.ownerPid !== handle.pid && isProcessRunning(previous.ownerPid)\n ? previous.ownerPid\n : process.pid);\n this.leases.releaseByProviderAccount(provider, account);\n const lease = this.leases.create({\n provider,\n account,\n port: portFromEndpoint(handle.endpoint),\n endpoint: handle.endpoint,\n ownerPid,\n instanceId: handle.instanceId,\n });\n handle.leaseId = lease.leaseId;\n return lease.leaseId;\n } catch {\n // lease bookkeeping is best-effort\n return undefined;\n }\n }\n\n /** Release the lease for a stopped proxy. No-op without a lease store. */\n private releaseLease(provider: string, account?: string): void {\n if (!this.leases) {\n return;\n }\n try {\n this.leases.releaseByProviderAccount(provider, account);\n } catch {\n // best-effort\n }\n }\n\n provider(id: string): Provider {\n return this.registry.get(id);\n }\n\n listProviders(): Provider[] {\n return this.registry.list();\n }\n\n // ── Multi-account proxy pool (opt-in; default is single) ────────\n\n async getPool(providerId: string): Promise<ProviderProxyPool> {\n this.requireProxyProvider(providerId);\n const accounts = await this.store.listAccounts(providerId);\n return this.pools.syncMembers(\n providerId,\n accounts.map((a) => a.meta.name),\n );\n }\n\n /** Opt-in multi-account pool for a provider. */\n async enablePoolMulti(\n providerId: string,\n opts: { port?: number; host?: string; start?: boolean } = {},\n ): Promise<{ pool: ProviderProxyPool; started?: ProxyHandle }> {\n const provider = this.requireProxyProvider(providerId);\n const accounts = await this.store.listAccounts(providerId);\n if (accounts.length === 0) {\n throw new AnyPickError(`No saved logins for ${providerId}. Save one first.`, 'NO_ACCOUNTS');\n }\n const port = validatePort(opts.port ?? provider.defaultProxyPort ?? 8080);\n assertLoopbackHost(opts.host ?? '127.0.0.1');\n const pool = await this.pools.enableMulti(\n providerId,\n accounts.map((a) => a.meta.name),\n { port, host: opts.host ?? '127.0.0.1' },\n );\n let started: ProxyHandle | undefined;\n if (opts.start !== false) {\n started = await this.startPoolProxy(providerId);\n }\n return { pool, started };\n }\n\n /** Back to per-account proxies (default). Stops pool process if running. */\n async disablePoolMulti(providerId: string): Promise<ProviderProxyPool> {\n this.requireProxyProvider(providerId);\n try {\n await this.stopPoolProxy(providerId);\n } catch {\n // ignore\n }\n return this.pools.disableMulti(providerId);\n }\n\n async setPoolMemberEnabled(\n providerId: string,\n account: string,\n enabled: boolean,\n ): Promise<ProviderProxyPool> {\n this.requireProxyProvider(providerId);\n const name = normalizeAccountName(account);\n await this.store.requireAccount(providerId, name);\n const pool = await this.pools.setMemberEnabled(providerId, name, enabled);\n // Hot-reload pool if multi + running\n if (pool.mode === 'multi' && pool.enabled) {\n const st = await this.poolProxyStatus(providerId);\n if (st.running) {\n await this.startPoolProxy(providerId);\n }\n }\n return pool;\n }\n\n async startPoolProxy(providerId: string): Promise<ProxyHandle> {\n const provider = this.requireProxyProvider(providerId);\n const pool = await this.getPool(providerId);\n if (pool.mode !== 'multi') {\n throw new AnyPickError(\n `Pool multi-mode is off for ${providerId} (default is single account). Enable with: anypick proxy pool enable ${providerId}`,\n 'POOL_NOT_ENABLED',\n );\n }\n const enabled = pool.members.filter((m) => m.enabled);\n if (enabled.length === 0) {\n throw new AnyPickError(\n `No enabled accounts in ${providerId} pool. Enable a member first.`,\n 'POOL_EMPTY',\n );\n }\n\n const host = pool.host ?? '127.0.0.1';\n assertLoopbackHost(host);\n const port = validatePort(pool.port ?? provider.defaultProxyPort ?? 8080);\n\n // Persist enabled + port\n await this.pools.set({\n ...pool,\n enabled: true,\n host,\n port,\n });\n\n // Use first enabled account's proxy process; for Gemini pass all auth dirs\n const primary = enabled[0];\n const config: AccountProxyConfig = {\n enabled: true,\n host,\n port,\n };\n\n // Ensure primary account proxy config matches pool port. The pool's auth\n // dirs stay out of it: they are absolute paths under the data root and this\n // record outlives both the data root (there is no ~/.rotate migration) and\n // the pool itself, after which the primary's own single-account proxy would\n // still be handed --auth-dirs, which wins over its snapshot dir.\n await this.store.setProxyConfig(providerId, primary.account, config);\n\n // Route pool runtime to shared dir for pid when multi\n const runtimeDir = poolRuntimeDir(this.store.root, providerId);\n await ensureDir(runtimeDir);\n\n if (!provider.startProxy) {\n throw new AnyPickError('PROXY_NOT_IMPLEMENTED', 'PROXY_NOT_IMPLEMENTED');\n }\n\n // Stop previous pool / primary proxy\n try {\n await this.stopPoolProxy(providerId);\n } catch {\n // ignore\n }\n try {\n await this.stopProxyInternal(provider, primary.account);\n } catch {\n // ignore\n }\n\n const priorState = await this.store.readProxyState(providerId, primary.account);\n const poolToken =\n priorState?.token && priorState.token.length > 0\n ? priorState.token\n : randomBytes(32).toString('hex');\n const quotaGuard = await this.quotaGuardPolicy();\n const ctx: ProxyContext = {\n providerId,\n accountName: primary.account,\n snapshotDir: accountSnapshotDir(this.store.root, providerId, primary.account),\n runtimeDir,\n config: {\n ...config,\n options: {\n pool: true,\n authDirs: enabled.map((m) => accountSnapshotDir(this.store.root, providerId, m.account)),\n quotaGuardAccountNames: enabled.map((m) => m.account),\n quotaGuard: {\n enabled: quotaGuard.enabled,\n cooldownMs: quotaGuard.cooldownMinutes * 60_000,\n },\n },\n },\n token: poolToken,\n };\n const handle = await provider.startProxy(ctx);\n await this.store.writeProxyState(providerId, primary.account, {\n accountName: primary.account,\n endpoint: handle.endpoint,\n compatibility: handle.compatibility ?? provider.proxyCompatibility,\n pid: handle.pid,\n logPath: handle.logPath,\n startedAt: new Date().toISOString(),\n token: poolToken,\n });\n this.recordLease(providerId, undefined, handle);\n handle.startedNow = true;\n return handle;\n }\n\n /** Restart only pools that are currently serving, after changing a pool-wide policy. */\n async restartRunningPools(): Promise<void> {\n for (const provider of this.registry.list().filter((entry) => providerCanProxy(entry))) {\n try {\n const pool = await this.getPool(provider.id);\n const status = await this.poolProxyStatus(provider.id);\n if (pool.mode === 'multi' && pool.enabled && status.running) {\n await this.startPoolProxy(provider.id);\n }\n } catch {\n // An unrelated provider must not prevent a setting from applying to its pool.\n }\n }\n }\n\n /** Secret-free audit events written by an enabled compatibility proxy pool. */\n async quotaGuardEvents(): Promise<QuotaGuardEvent[]> {\n const events: QuotaGuardEvent[] = [];\n for (const provider of this.registry.list().filter((entry) => providerCanProxy(entry))) {\n try {\n const pool = await this.getPool(provider.id);\n if (pool.mode !== 'multi') {\n continue;\n }\n const state = await readQuotaGuardState(\n `${poolRuntimeDir(this.store.root, provider.id)}/quota-guard.json`,\n );\n events.push(\n ...state.events.map((event) => ({\n ...event,\n providerId: event.providerId ?? provider.id,\n })),\n );\n } catch {\n // Runtime observability is best-effort and must never make a proxy unavailable.\n }\n }\n return events.toSorted((left, right) => right.createdAt.localeCompare(left.createdAt));\n }\n\n async stopPoolProxy(providerId: string): Promise<void> {\n const provider = this.requireProxyProvider(providerId);\n const pool = await this.pools.getOrDefault(providerId);\n const primary = pool.members.find((m) => m.enabled)?.account;\n const runtimeDir = poolRuntimeDir(this.store.root, providerId);\n if (provider.stopProxy && primary) {\n const config = await this.store.getProxyConfig(providerId, primary);\n await provider.stopProxy({\n providerId,\n accountName: primary,\n snapshotDir: accountSnapshotDir(this.store.root, providerId, primary),\n runtimeDir,\n config: { ...config, enabled: false },\n });\n }\n this.releaseLease(providerId, undefined);\n }\n\n async poolProxyStatus(providerId: string): Promise<ProxyStatus> {\n const provider = this.requireProxyProvider(providerId);\n const pool = await this.pools.getOrDefault(providerId);\n const primary = pool.members.find((m) => m.enabled)?.account;\n if (!primary || pool.mode !== 'multi') {\n return {\n enabled: pool.mode === 'multi' && pool.enabled,\n running: false,\n detail: pool.mode === 'single' ? 'single-account mode' : 'no enabled members',\n };\n }\n const runtimeDir = poolRuntimeDir(this.store.root, providerId);\n const config = await this.store.getProxyConfig(providerId, primary);\n if (provider.proxyStatus) {\n return provider.proxyStatus({\n providerId,\n accountName: primary,\n snapshotDir: accountSnapshotDir(this.store.root, providerId, primary),\n runtimeDir,\n config: {\n ...config,\n enabled: pool.enabled,\n host: pool.host ?? config.host,\n port: pool.port ?? config.port,\n },\n });\n }\n return {\n enabled: pool.enabled,\n running: false,\n };\n }\n\n // ── Proxy commands ──────────────────────────────────────────────\n\n requireProxyProvider(providerId: string): Provider {\n const provider = this.registry.get(providerId);\n if (!providerCanProxy(provider)) {\n throw new AnyPickError(\n `Provider \"${providerId}\" does not support a compatibility proxy.`,\n 'PROXY_UNSUPPORTED',\n );\n }\n return provider;\n }\n\n async enableProxy(\n providerId: string,\n name: string,\n opts: {\n port?: number;\n host?: string;\n start?: boolean;\n /** Provider options merge (e.g. opencode plan: zen|go). */\n options?: Record<string, unknown>;\n } = {},\n ): Promise<{ config: AccountProxyConfig; started?: ProxyHandle }> {\n const provider = this.requireProxyProvider(providerId);\n const accountName = normalizeAccountName(name);\n await this.store.requireAccount(providerId, accountName);\n\n const existing = await this.store.getProxyConfig(providerId, accountName);\n const port = await this.ports.resolve(provider, {\n requested: opts.port,\n existing: existing.port,\n providerId,\n accountName,\n });\n const config: AccountProxyConfig = {\n ...existing,\n enabled: true,\n port,\n host: opts.host ?? existing.host ?? '127.0.0.1',\n options: opts.options != null ? { ...existing.options, ...opts.options } : existing.options,\n };\n assertLoopbackHost(config.host ?? '127.0.0.1');\n await this.store.setProxyConfig(providerId, accountName, config);\n\n let started: ProxyHandle | undefined;\n const active = await this.store.getActive(providerId);\n const shouldStart = opts.start !== false && active === accountName;\n if (shouldStart) {\n started = await this.startProxyInternal(provider, accountName, config);\n }\n void this.syncCodexLiveConfig();\n\n return { config, started };\n }\n\n /** Restore a previously captured config without starting a process. Scoped\n * ephemeral runs use this to avoid leaving an account auto-proxy enabled. */\n async restoreProxyConfig(\n providerId: string,\n name: string,\n config: AccountProxyConfig,\n ): Promise<void> {\n const accountName = normalizeAccountName(name);\n await this.store.requireAccount(providerId, accountName);\n await this.store.setProxyConfig(providerId, accountName, config);\n }\n\n /**\n * Update proxy listen port/host without toggling enabled.\n * Restarts the proxy if it is currently running.\n */\n async configureProxy(\n providerId: string,\n name: string,\n opts: {\n port?: number;\n host?: string;\n restart?: boolean;\n /** Provider options merge (e.g. opencode plan: zen|go). */\n options?: Record<string, unknown>;\n } = {},\n ): Promise<{\n config: AccountProxyConfig;\n restarted?: ProxyHandle;\n wasRunning: boolean;\n }> {\n const provider = this.requireProxyProvider(providerId);\n const accountName = normalizeAccountName(name);\n await this.store.requireAccount(providerId, accountName);\n\n if (opts.port == null && opts.host == null && opts.options == null) {\n throw new AnyPickError(\n 'Pass --port and/or --host to configure the proxy.',\n 'PROXY_CONFIG_EMPTY',\n );\n }\n\n const existing = await this.store.getProxyConfig(providerId, accountName);\n let port: number;\n if (opts.port != null) {\n port = validatePort(opts.port);\n await this.ports.assertAvailable(port, providerId, accountName);\n } else if (existing.port != null) {\n port = existing.port;\n } else {\n port = await this.ports.allocateFrom(\n provider.defaultProxyPort ?? 8080,\n providerId,\n accountName,\n );\n }\n\n const config: AccountProxyConfig = {\n ...existing,\n port,\n host: opts.host ?? existing.host ?? '127.0.0.1',\n options: opts.options != null ? { ...existing.options, ...opts.options } : existing.options,\n };\n assertLoopbackHost(config.host ?? '127.0.0.1');\n await this.store.setProxyConfig(providerId, accountName, config);\n\n const before = await this.proxyStatus(providerId, accountName);\n const wasRunning = before.running;\n let restarted: ProxyHandle | undefined;\n if (wasRunning && opts.restart !== false) {\n await this.stopProxyInternal(provider, accountName);\n restarted = await this.startProxyInternal(provider, accountName, config);\n }\n void this.syncCodexLiveConfig();\n\n return { config, restarted, wasRunning };\n }\n\n async disableProxy(providerId: string, name: string): Promise<AccountProxyConfig> {\n const provider = this.requireProxyProvider(providerId);\n const accountName = normalizeAccountName(name);\n await this.store.requireAccount(providerId, accountName);\n\n const existing = await this.store.getProxyConfig(providerId, accountName);\n const config: AccountProxyConfig = { ...existing, enabled: false };\n await this.store.setProxyConfig(providerId, accountName, config);\n\n await this.stopProxyInternal(provider, accountName);\n void this.syncCodexLiveConfig();\n return config;\n }\n\n async startProxy(\n providerId: string,\n name?: string,\n opts: { port?: number; host?: string } = {},\n ): Promise<ProxyHandle> {\n const provider = this.requireProxyProvider(providerId);\n const accountName = name\n ? normalizeAccountName(name)\n : await this.requireActiveName(providerId);\n\n const account = await this.store.requireAccount(providerId, accountName);\n assertLoopbackHost(opts.host ?? account.proxy.host ?? '127.0.0.1');\n if (!account.proxy.enabled) {\n throw new AnyPickError(\n `Proxy is not enabled for ${providerId}/${accountName}. Run: anypick proxy enable ${providerId} ${accountName}`,\n 'PROXY_DISABLED',\n );\n }\n\n let config = account.proxy;\n if (opts.port != null || opts.host != null) {\n let port: number;\n if (opts.port != null) {\n port = validatePort(opts.port);\n await this.ports.assertAvailable(port, providerId, accountName);\n } else if (config.port != null) {\n port = config.port;\n } else {\n port = await this.ports.allocateFrom(\n provider.defaultProxyPort ?? 8080,\n providerId,\n accountName,\n );\n }\n config = {\n ...config,\n port,\n host: opts.host ?? config.host ?? '127.0.0.1',\n };\n await this.store.setProxyConfig(providerId, accountName, config);\n } else if (config.port == null) {\n // Legacy configs without a port: allocate and persist so restarts stay stable\n const port = await this.ports.resolve(provider, {\n providerId,\n accountName,\n });\n config = { ...config, port, host: config.host ?? '127.0.0.1' };\n await this.store.setProxyConfig(providerId, accountName, config);\n }\n\n const handle = await this.startProxyInternal(provider, accountName, config);\n void this.syncCodexLiveConfig();\n return handle;\n }\n\n async stopProxy(providerId: string, name?: string): Promise<void> {\n const provider = this.requireProxyProvider(providerId);\n const accountName = name\n ? normalizeAccountName(name)\n : await this.requireActiveName(providerId);\n await this.store.requireAccount(providerId, accountName);\n await this.stopProxyInternal(provider, accountName);\n void this.syncCodexLiveConfig();\n }\n\n async proxyStatus(providerId: string, name?: string): Promise<ProxyStatus> {\n const provider = this.requireProxyProvider(providerId);\n const accountName = name\n ? normalizeAccountName(name)\n : await this.requireActiveName(providerId);\n\n const account = await this.store.requireAccount(providerId, accountName);\n const ctx = this.buildProxyContext(providerId, accountName, account.proxy);\n const host = account.proxy.host ?? '127.0.0.1';\n const port = account.proxy.port ?? provider.defaultProxyPort ?? undefined;\n\n let status: ProxyStatus;\n if (provider.proxyStatus) {\n status = await provider.proxyStatus(ctx);\n } else {\n // Default: pid file + saved state\n const pid = await readPidFile(this.store.pidPath(providerId, accountName));\n const running = pid != null && isProcessRunning(pid);\n const state = await this.store.readProxyState(providerId, accountName);\n const logPath = this.store.logPath(providerId, accountName);\n\n status = {\n enabled: account.proxy.enabled,\n running,\n endpoint: running ? state?.endpoint : undefined,\n compatibility: running\n ? (state?.compatibility ?? provider.proxyCompatibility)\n : provider.proxyCompatibility,\n pid: running ? (pid ?? undefined) : undefined,\n logPath: (await pathExists(logPath)) ? logPath : undefined,\n detail: running ? undefined : account.proxy.enabled ? 'stopped' : 'disabled',\n };\n }\n\n // Always surface configured bind address (even when stopped). When the\n // provider selected a different port (for example after a collision),\n // proxy_state is authoritative while that exact process is alive. TUI and\n // client realignment must probe the endpoint the child actually owns.\n status.port = port;\n status.host = host;\n if (status.running && status.pid != null) {\n const runtimeState = await this.store.readProxyState(providerId, accountName);\n if (runtimeState?.pid === status.pid && runtimeState.endpoint) {\n status.endpoint = runtimeState.endpoint;\n status.port = portFromEndpoint(runtimeState.endpoint);\n try {\n status.host = new URL(runtimeState.endpoint).hostname;\n } catch {\n // Keep the configured host for malformed legacy state.\n }\n }\n }\n if (!status.endpoint && status.running && port != null) {\n status.endpoint = `http://${host}:${port}`;\n }\n return status;\n }\n\n async proxyLogs(providerId: string, name?: string, lines = 50): Promise<string> {\n const provider = this.requireProxyProvider(providerId);\n const accountName = name\n ? normalizeAccountName(name)\n : await this.requireActiveName(providerId);\n\n const account = await this.store.requireAccount(providerId, accountName);\n const ctx = this.buildProxyContext(providerId, accountName, account.proxy);\n\n if (provider.readProxyLogs) {\n return provider.readProxyLogs(ctx, lines);\n }\n\n const logPath = this.store.logPath(providerId, accountName);\n if (!(await pathExists(logPath))) {\n return '(no log file yet)';\n }\n const raw = await readFile(logPath, 'utf8');\n const all = raw.split(/\\r?\\n/);\n return all.slice(Math.max(0, all.length - lines)).join('\\n');\n }\n\n /**\n * Stream proxy logs live (tail -f style). Calls `onLine` for each new line\n * and resolves when `signal` aborts. Returns immediately if no log file yet.\n */\n async proxyLogsFollow(\n providerId: string,\n name: string | undefined,\n onLine: (line: string) => void,\n opts: { lines?: number; signal?: AbortSignal } = {},\n ): Promise<void> {\n const accountName = name\n ? normalizeAccountName(name)\n : await this.requireActiveName(providerId);\n const logPath = this.store.logPath(providerId, accountName);\n\n if (!(await pathExists(logPath))) {\n onLine('(waiting for log file…)');\n }\n\n // Print the current tail first so the user has context.\n if (opts.lines && (await pathExists(logPath))) {\n const raw = await readFile(logPath, 'utf8');\n const all = raw\n .split('\\n')\n .map((l) => l.replace(/\\r$/, ''))\n .filter(Boolean);\n for (const l of all.slice(Math.max(0, all.length - opts.lines))) {\n onLine(l);\n }\n }\n\n const onAbort = () => {};\n opts.signal?.addEventListener('abort', onAbort);\n\n try {\n await followFile(logPath, onLine, opts.signal);\n } finally {\n opts.signal?.removeEventListener('abort', onAbort);\n }\n }\n\n /**\n * List proxy-capable accounts (for `anypick proxy` / status).\n * If provider omitted → all proxy providers. If name omitted → active or all enabled.\n */\n async listProxyRows(providerId?: string): Promise<\n Array<{\n provider: string;\n name: string;\n active: boolean;\n status: ProxyStatus;\n }>\n > {\n const providers = providerId\n ? [this.requireProxyProvider(providerId)]\n : this.registry.list().filter((p) => providerCanProxy(p));\n\n const rows = [];\n for (const p of providers) {\n const active = await this.store.getActive(p.id);\n const accounts = await this.store.listAccounts(p.id);\n for (const a of accounts) {\n // Show active always; others only if proxy enabled or running\n const status = await this.proxyStatus(p.id, a.meta.name).catch(\n (): ProxyStatus => ({\n enabled: a.proxy.enabled,\n running: false,\n detail: 'unavailable',\n }),\n );\n if (a.meta.name === active || a.proxy.enabled || status.running) {\n rows.push({\n provider: p.id,\n name: a.meta.name,\n active: a.meta.name === active,\n status,\n });\n }\n }\n }\n return rows;\n }\n\n /**\n * Start proxies. No args → active account on each proxy provider (if enabled).\n */\n async startProxies(\n providerId?: string,\n name?: string,\n ): Promise<\n Array<{\n provider: string;\n name: string;\n ok: boolean;\n endpoint?: string;\n realignedClients?: string[];\n error?: string;\n }>\n > {\n const targets = await this.resolveProxyTargets(providerId, name, {\n requireEnabled: true,\n preferActive: !name,\n });\n const out: Array<{\n provider: string;\n name: string;\n ok: boolean;\n endpoint?: string;\n realignedClients?: string[];\n error?: string;\n }> = [];\n for (const t of targets) {\n try {\n const handle = await this.startProxy(t.provider, t.name);\n out.push({\n provider: t.provider,\n name: t.name,\n ok: true,\n endpoint: handle.endpoint,\n realignedClients: handle.realignedClients,\n });\n } catch (err) {\n out.push({\n provider: t.provider,\n name: t.name,\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n return out;\n }\n\n async stopProxies(\n providerId?: string,\n name?: string,\n ): Promise<Array<{ provider: string; name: string; ok: boolean; error?: string }>> {\n const targets = await this.resolveProxyTargets(providerId, name, {\n requireEnabled: false,\n preferActive: !name,\n runningOnly: !name && !providerId,\n });\n const out = [];\n for (const t of targets) {\n try {\n await this.stopProxy(t.provider, t.name);\n out.push({ provider: t.provider, name: t.name, ok: true });\n } catch (err) {\n out.push({\n provider: t.provider,\n name: t.name,\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n return out;\n }\n\n /** Transfer all currently running proxy leases to a long-lived supervisor. */\n async adoptRunningProxies(ownerPid = process.pid): Promise<number> {\n let adopted = 0;\n for (const row of await this.listProxyRows()) {\n const { status } = row;\n if (!status.running || status.pid == null || !status.endpoint) {\n continue;\n }\n this.recordLease(\n row.provider,\n row.name,\n {\n endpoint: status.endpoint,\n compatibility: status.compatibility,\n pid: status.pid,\n logPath: status.logPath,\n },\n ownerPid,\n );\n adopted += 1;\n }\n for (const provider of this.registry.list().filter((item) => providerCanProxy(item))) {\n try {\n const status = await this.poolProxyStatus(provider.id);\n if (!status.running || status.pid == null || !status.endpoint) {\n continue;\n }\n this.recordLease(\n provider.id,\n undefined,\n {\n endpoint: status.endpoint,\n compatibility: status.compatibility,\n pid: status.pid,\n logPath: status.logPath,\n },\n ownerPid,\n );\n adopted += 1;\n } catch {\n // Provider has no configured pool.\n }\n }\n return adopted;\n }\n\n // ── Internals (also used by AccountService for switch/stash/delete) ──\n\n /** Stop a proxy during account lifecycle ops (switch/stash/delete). */\n async stopProxyForAccount(provider: Provider, accountName: string): Promise<void> {\n await this.stopProxyInternal(provider, accountName);\n void this.syncCodexLiveConfig();\n }\n\n /** Start a proxy as part of account switch (when enabled). */\n async startProxyForAccount(\n provider: Provider,\n accountName: string,\n config: AccountProxyConfig,\n ): Promise<{ endpoint?: string; running: boolean; error?: string }> {\n if (!providerCanProxy(provider) || !config.enabled) {\n return { running: false };\n }\n try {\n const handle = await this.startProxyInternal(provider, accountName, config);\n void this.syncCodexLiveConfig();\n return {\n endpoint: handle.endpoint,\n running: true,\n };\n } catch (err) {\n return {\n running: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n private async resolveProxyTargets(\n providerId: string | undefined,\n name: string | undefined,\n opts: {\n requireEnabled: boolean;\n preferActive: boolean;\n runningOnly?: boolean;\n },\n ): Promise<Array<{ provider: string; name: string }>> {\n if (providerId && name) {\n this.requireProxyProvider(providerId);\n await this.store.requireAccount(providerId, normalizeAccountName(name));\n return [{ provider: providerId, name: normalizeAccountName(name) }];\n }\n\n if (providerId) {\n const p = this.requireProxyProvider(providerId);\n if (opts.preferActive) {\n const active = await this.store.getActive(p.id);\n if (active) {\n const acc = await this.store.requireAccount(p.id, active);\n if (!opts.requireEnabled || acc.proxy.enabled) {\n return [{ provider: p.id, name: active }];\n }\n }\n }\n const accounts = await this.store.listAccounts(p.id);\n return accounts\n .filter((a) => !opts.requireEnabled || a.proxy.enabled)\n .map((a) => ({ provider: p.id, name: a.meta.name }));\n }\n\n // All proxy providers\n const providers = this.registry.list().filter((p) => providerCanProxy(p));\n const targets: Array<{ provider: string; name: string }> = [];\n for (const p of providers) {\n if (opts.runningOnly) {\n const accounts = await this.store.listAccounts(p.id);\n for (const account of accounts) {\n const status = await this.proxyStatus(p.id, account.meta.name);\n if (status.running) {\n targets.push({ provider: p.id, name: account.meta.name });\n }\n }\n continue;\n }\n const active = await this.store.getActive(p.id);\n if (active) {\n const acc = await this.store.getAccount(p.id, active);\n if (!acc) {\n continue;\n }\n if (!opts.requireEnabled || acc.proxy.enabled) {\n targets.push({ provider: p.id, name: active });\n }\n }\n }\n return targets;\n }\n\n private async requireActiveName(providerId: string): Promise<string> {\n const active = await this.store.getActive(providerId);\n if (!active) {\n throw new AnyPickError(\n `No active account for \"${providerId}\". Pass an account name.`,\n 'NO_ACTIVE_ACCOUNT',\n );\n }\n return active;\n }\n\n private buildProxyContext(\n providerId: string,\n accountName: string,\n config: AccountProxyConfig,\n token?: string,\n ): ProxyContext {\n return {\n providerId,\n accountName,\n snapshotDir: accountSnapshotDir(this.store.root, providerId, accountName),\n runtimeDir: this.store.runtimeDir(providerId, accountName),\n config,\n token,\n };\n }\n\n private async startProxyInternal(\n provider: Provider,\n accountName: string,\n config: AccountProxyConfig,\n ): Promise<ProxyHandle> {\n return withMutationLock(this.store.root, `proxy/${provider.id}/${accountName}`, () =>\n this.startProxyInternalUnlocked(provider, accountName, config),\n );\n }\n\n private async startProxyInternalUnlocked(\n provider: Provider,\n accountName: string,\n config: AccountProxyConfig,\n ): Promise<ProxyHandle> {\n if (!provider.startProxy) {\n throw new AnyPickError(\n `Provider \"${provider.id}\" declares proxy support but does not implement startProxy().`,\n 'PROXY_NOT_IMPLEMENTED',\n );\n }\n\n let effective = withoutPoolOptions(config);\n const host = effective.host ?? '127.0.0.1';\n assertLoopbackHost(host);\n let port = effective.port ?? provider.defaultProxyPort ?? 8080;\n const pidPath = this.store.pidPath(provider.id, accountName);\n const existingPid = await readPidFile(pidPath);\n const previousState = await this.store.readProxyState(provider.id, accountName);\n\n // Per-instance high-entropy secret (PROXY-01). Reuse a prior token so a\n // process-reuse realign binds clients to the already-running child's secret.\n const proxyToken =\n previousState?.token && previousState.token.length > 0\n ? previousState.token\n : randomBytes(32).toString('hex');\n\n // Already healthy on our pid → reuse process, still realign clients (port/config drift)\n if (existingPid != null && isProcessRunning(existingPid) && port !== 0) {\n const candidates = [previousState?.endpoint, `http://${host}:${port}`].filter(\n (value, index, all): value is string => Boolean(value) && all.indexOf(value) === index,\n );\n for (const candidate of candidates) {\n try {\n const { waitForHttp } = await import('../utils/process');\n const ok = await waitForHttp(candidate, {\n timeoutMs: 800,\n requirePid: existingPid,\n });\n if (!ok) {\n continue;\n }\n const actual = new URL(candidate);\n const actualHost = actual.hostname === '::1' ? '[::1]' : actual.hostname;\n const actualPort = Number(actual.port);\n if (actualPort > 0 && (actualPort !== port || actualHost !== host)) {\n port = actualPort;\n effective = { ...effective, port, host: actualHost };\n await this.store.setProxyConfig(provider.id, accountName, effective);\n }\n const handle: ProxyHandle = {\n endpoint: candidate,\n compatibility: provider.proxyCompatibility,\n pid: existingPid,\n logPath: this.store.logPath(provider.id, accountName),\n startedNow: false,\n token: proxyToken,\n };\n await this.store.writeProxyState(provider.id, accountName, {\n accountName,\n endpoint: handle.endpoint,\n compatibility: handle.compatibility,\n pid: handle.pid,\n logPath: handle.logPath,\n startedAt: new Date().toISOString(),\n token: proxyToken,\n });\n handle.realignedClients = await this.realignBoundClients(\n provider.id,\n accountName,\n handle.endpoint,\n proxyToken,\n );\n this.recordLease(provider.id, accountName, handle);\n return handle;\n } catch {\n // Try the next known endpoint before replacing the child.\n }\n }\n // Only stop *our* pid file process (never foreign listeners)\n await this.stopProxyInternalUnlocked(provider, accountName);\n } else if (existingPid != null) {\n // Stale pid file\n await this.stopProxyInternalUnlocked(provider, accountName);\n }\n\n // Port taken (by anyone) → bump to next free port. Never kill foreign processes.\n if (port !== 0 && !(await isListenPortFree(port, host))) {\n const next = await this.ports.allocateFrom(port + 1, provider.id, accountName);\n effective = { ...effective, port: next, host };\n await this.store.setProxyConfig(provider.id, accountName, effective);\n port = next;\n } else if (effective.port == null) {\n effective = { ...effective, port, host };\n await this.store.setProxyConfig(provider.id, accountName, effective);\n }\n\n const ctx = this.buildProxyContext(provider.id, accountName, effective, proxyToken);\n const handle = await provider.startProxy(ctx);\n\n // Child died immediately — don't claim success on someone else's health endpoint\n if (handle.pid != null && !isProcessRunning(handle.pid)) {\n // Port race: try once more on next free port\n if (port !== 0) {\n const next = await this.ports.allocateFrom(port + 1, provider.id, accountName);\n effective = { ...effective, port: next, host };\n await this.store.setProxyConfig(provider.id, accountName, effective);\n const retry = await provider.startProxy(\n this.buildProxyContext(provider.id, accountName, effective, proxyToken),\n );\n if (retry.pid != null && isProcessRunning(retry.pid)) {\n await this.store.writeProxyState(provider.id, accountName, {\n accountName,\n endpoint: retry.endpoint,\n compatibility: retry.compatibility ?? provider.proxyCompatibility,\n pid: retry.pid,\n logPath: retry.logPath ?? this.store.logPath(provider.id, accountName),\n startedAt: new Date().toISOString(),\n token: proxyToken,\n });\n retry.startedNow = true;\n retry.token = proxyToken;\n this.recordLease(provider.id, accountName, retry);\n retry.realignedClients = await this.realignBoundClients(\n provider.id,\n accountName,\n retry.endpoint,\n proxyToken,\n );\n return retry;\n }\n }\n throw new AnyPickError(\n `Proxy for ${provider.id}/${accountName} failed to bind (tried port ${port}). Check: anypick proxy logs ${provider.id} ${accountName}`,\n 'PROXY_START_FAILED',\n );\n }\n\n await this.store.writeProxyState(provider.id, accountName, {\n accountName,\n endpoint: handle.endpoint,\n compatibility: handle.compatibility ?? provider.proxyCompatibility,\n pid: handle.pid,\n logPath: handle.logPath ?? this.store.logPath(provider.id, accountName),\n startedAt: new Date().toISOString(),\n token: proxyToken,\n });\n\n handle.startedNow = true;\n this.recordLease(provider.id, accountName, handle);\n\n handle.realignedClients = await this.realignBoundClients(\n provider.id,\n accountName,\n handle.endpoint,\n proxyToken,\n );\n return handle;\n }\n\n /** Rewrite bound clients' BASE_URL to the live proxy endpoint. */\n private async realignBoundClients(\n providerId: string,\n accountName: string,\n endpoint: string,\n token?: string,\n ): Promise<string[]> {\n if (!this.realign) {\n return [];\n }\n try {\n return await realignClientsToAccountProxy(\n this.realign,\n providerId,\n accountName,\n endpoint,\n token,\n );\n } catch {\n return [];\n }\n }\n\n private async stopProxyInternal(provider: Provider, accountName: string): Promise<void> {\n return withMutationLock(this.store.root, `proxy/${provider.id}/${accountName}`, () =>\n this.stopProxyInternalUnlocked(provider, accountName),\n );\n }\n\n private async stopProxyInternalUnlocked(provider: Provider, accountName: string): Promise<void> {\n const config = await this.store.getProxyConfig(provider.id, accountName);\n const ctx = this.buildProxyContext(provider.id, accountName, config);\n\n const pidPath = this.store.pidPath(provider.id, accountName);\n const before = await readPidRecord(pidPath);\n if (provider.stopProxy) {\n await provider.stopProxy(ctx);\n } else {\n // Generic pid-file stop if provider did not implement stopProxy\n const { stopPidFile } = await import('../utils/process');\n await stopPidFile(this.store.pidPath(provider.id, accountName));\n }\n\n // A provider may fail closed when it cannot verify PID ownership. Do not\n // erase state/leases in that case: an orphaned credential-bearing proxy is\n // safer to diagnose than to forget.\n if (before && isProcessRunning(before.pid)) {\n // In-process providers (including the test fake) share the CLI PID, so\n // PID liveness alone cannot tell whether their server has stopped.\n // Ask a provider-specific status probe when available; detached providers\n // still fail closed if their recorded process remains alive.\n const status = provider.proxyStatus ? await provider.proxyStatus(ctx) : undefined;\n if (!status || status.running) {\n throw new AnyPickError(\n `Could not verify that the ${provider.name} proxy stopped (pid ${before.pid}).`,\n {\n code: 'PROXY_STOP_UNVERIFIED',\n suggestions: ['Run anypick doctor to inspect the proxy record before retrying.'],\n },\n );\n }\n }\n\n await this.store.clearProxyState(provider.id, accountName);\n this.releaseLease(provider.id, accountName);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAsDA,SAAS,iBAAiB,UAA0B;CAClD,MAAM,IAAI,iBAAiB,KAAK,QAAQ;CACxC,OAAO,IAAI,OAAO,EAAE,EAAE,IAAI;AAC5B;;;;;;;;;AAUA,SAAS,mBAAmB,QAAgD;CAC1E,IAAI,CAAC,OAAO,SACV,OAAO,EAAE,GAAG,OAAO;CAErB,MAAM,EAAE,MAAM,OAAO,UAAU,WAAW,GAAG,YAAY,OAAO;CAChE,OAAO;EAAE,GAAG;EAAQ;CAAQ;AAC9B;;;;;AAMA,IAAa,eAAb,MAA0B;CAwBL;CACA;CAIA;CA5BnB;;;;;;;CAOA;;;;;;;;;;;CAWA;;CAEA;CAEA,YACE,OACA,UACA,OACA,SACA,QACA,mBAAqE,aAAa;EAChF,SAAS;EACT,iBAAiB;CACnB,IACA;EATiB,KAAA,QAAA;EACA,KAAA,WAAA;EAIA,KAAA,mBAAA;EAKjB,KAAK,QAAQ,SAAS,IAAI,UAAU,MAAM,MAAM,MAAM,EAAE;EACxD,KAAK,UAAU;EACf,KAAK,SAAS;EACd,KAAK,QAAQ,IAAI,mBAAmB,UAAU,KAAK;CACrD;;;;;CAMA;CAEA,uBAAuB,IAA+B;EACpD,KAAK,sBAAsB;CAC7B;CAEA,MAAc,sBAAqC;EACjD,IAAI;GACF,MAAM,KAAK,sBAAsB;EACnC,QAAQ,CAER;CACF;;;;;;CAOA,YACE,UACA,SACA,QACA,gBACoB;EACpB,IAAI,CAAC,KAAK,QACR;EAEF,IAAI;GACF,MAAM,WAAW,KAAK,OAAO,sBAAsB,UAAU,OAAO;GAGpE,MAAM,WACJ,mBACC,YAAY,SAAS,aAAa,OAAO,OAAO,iBAAiB,SAAS,QAAQ,IAC/E,SAAS,WACT,QAAQ;GACd,KAAK,OAAO,yBAAyB,UAAU,OAAO;GACtD,MAAM,QAAQ,KAAK,OAAO,OAAO;IAC/B;IACA;IACA,MAAM,iBAAiB,OAAO,QAAQ;IACtC,UAAU,OAAO;IACjB;IACA,YAAY,OAAO;GACrB,CAAC;GACD,OAAO,UAAU,MAAM;GACvB,OAAO,MAAM;EACf,QAAQ;GAEN;EACF;CACF;;CAGA,aAAqB,UAAkB,SAAwB;EAC7D,IAAI,CAAC,KAAK,QACR;EAEF,IAAI;GACF,KAAK,OAAO,yBAAyB,UAAU,OAAO;EACxD,QAAQ,CAER;CACF;CAEA,SAAS,IAAsB;EAC7B,OAAO,KAAK,SAAS,IAAI,EAAE;CAC7B;CAEA,gBAA4B;EAC1B,OAAO,KAAK,SAAS,KAAK;CAC5B;CAIA,MAAM,QAAQ,YAAgD;EAC5D,KAAK,qBAAqB,UAAU;EACpC,MAAM,WAAW,MAAM,KAAK,MAAM,aAAa,UAAU;EACzD,OAAO,KAAK,MAAM,YAChB,YACA,SAAS,KAAK,MAAM,EAAE,KAAK,IAAI,CACjC;CACF;;CAGA,MAAM,gBACJ,YACA,OAA0D,CAAC,GACE;EAC7D,MAAM,WAAW,KAAK,qBAAqB,UAAU;EACrD,MAAM,WAAW,MAAM,KAAK,MAAM,aAAa,UAAU;EACzD,IAAI,SAAS,WAAW,GACtB,MAAM,IAAI,aAAa,uBAAuB,WAAW,oBAAoB,aAAa;EAE5F,MAAM,OAAO,aAAa,KAAK,QAAQ,SAAS,oBAAoB,IAAI;EACxE,mBAAmB,KAAK,QAAQ,WAAW;EAC3C,MAAM,OAAO,MAAM,KAAK,MAAM,YAC5B,YACA,SAAS,KAAK,MAAM,EAAE,KAAK,IAAI,GAC/B;GAAE;GAAM,MAAM,KAAK,QAAQ;EAAY,CACzC;EACA,IAAI;EACJ,IAAI,KAAK,UAAU,OACjB,UAAU,MAAM,KAAK,eAAe,UAAU;EAEhD,OAAO;GAAE;GAAM;EAAQ;CACzB;;CAGA,MAAM,iBAAiB,YAAgD;EACrE,KAAK,qBAAqB,UAAU;EACpC,IAAI;GACF,MAAM,KAAK,cAAc,UAAU;EACrC,QAAQ,CAER;EACA,OAAO,KAAK,MAAM,aAAa,UAAU;CAC3C;CAEA,MAAM,qBACJ,YACA,SACA,SAC4B;EAC5B,KAAK,qBAAqB,UAAU;EACpC,MAAM,OAAO,qBAAqB,OAAO;EACzC,MAAM,KAAK,MAAM,eAAe,YAAY,IAAI;EAChD,MAAM,OAAO,MAAM,KAAK,MAAM,iBAAiB,YAAY,MAAM,OAAO;EAExE,IAAI,KAAK,SAAS,WAAW,KAAK;QAE5B,MADa,KAAK,gBAAgB,UAAU,EAAA,CACzC,SACL,MAAM,KAAK,eAAe,UAAU;EAAA;EAGxC,OAAO;CACT;CAEA,MAAM,eAAe,YAA0C;EAC7D,MAAM,WAAW,KAAK,qBAAqB,UAAU;EACrD,MAAM,OAAO,MAAM,KAAK,QAAQ,UAAU;EAC1C,IAAI,KAAK,SAAS,SAChB,MAAM,IAAI,aACR,8BAA8B,WAAW,uEAAuE,cAChH,kBACF;EAEF,MAAM,UAAU,KAAK,QAAQ,QAAQ,MAAM,EAAE,OAAO;EACpD,IAAI,QAAQ,WAAW,GACrB,MAAM,IAAI,aACR,0BAA0B,WAAW,gCACrC,YACF;EAGF,MAAM,OAAO,KAAK,QAAQ;EAC1B,mBAAmB,IAAI;EACvB,MAAM,OAAO,aAAa,KAAK,QAAQ,SAAS,oBAAoB,IAAI;EAGxE,MAAM,KAAK,MAAM,IAAI;GACnB,GAAG;GACH,SAAS;GACT;GACA;EACF,CAAC;EAGD,MAAM,UAAU,QAAQ;EACxB,MAAM,SAA6B;GACjC,SAAS;GACT;GACA;EACF;EAOA,MAAM,KAAK,MAAM,eAAe,YAAY,QAAQ,SAAS,MAAM;EAGnE,MAAM,aAAa,eAAe,KAAK,MAAM,MAAM,UAAU;EAC7D,MAAM,UAAU,UAAU;EAE1B,IAAI,CAAC,SAAS,YACZ,MAAM,IAAI,aAAa,yBAAyB,uBAAuB;EAIzE,IAAI;GACF,MAAM,KAAK,cAAc,UAAU;EACrC,QAAQ,CAER;EACA,IAAI;GACF,MAAM,KAAK,kBAAkB,UAAU,QAAQ,OAAO;EACxD,QAAQ,CAER;EAEA,MAAM,aAAa,MAAM,KAAK,MAAM,eAAe,YAAY,QAAQ,OAAO;EAC9E,MAAM,YACJ,YAAY,SAAS,WAAW,MAAM,SAAS,IAC3C,WAAW,QACX,YAAY,EAAE,CAAC,CAAC,SAAS,KAAK;EACpC,MAAM,aAAa,MAAM,KAAK,iBAAiB;EAC/C,MAAM,MAAoB;GACxB;GACA,aAAa,QAAQ;GACrB,aAAa,mBAAmB,KAAK,MAAM,MAAM,YAAY,QAAQ,OAAO;GAC5E;GACA,QAAQ;IACN,GAAG;IACH,SAAS;KACP,MAAM;KACN,UAAU,QAAQ,KAAK,MAAM,mBAAmB,KAAK,MAAM,MAAM,YAAY,EAAE,OAAO,CAAC;KACvF,wBAAwB,QAAQ,KAAK,MAAM,EAAE,OAAO;KACpD,YAAY;MACV,SAAS,WAAW;MACpB,YAAY,WAAW,kBAAkB;KAC3C;IACF;GACF;GACA,OAAO;EACT;EACA,MAAM,SAAS,MAAM,SAAS,WAAW,GAAG;EAC5C,MAAM,KAAK,MAAM,gBAAgB,YAAY,QAAQ,SAAS;GAC5D,aAAa,QAAQ;GACrB,UAAU,OAAO;GACjB,eAAe,OAAO,iBAAiB,SAAS;GAChD,KAAK,OAAO;GACZ,SAAS,OAAO;GAChB,4BAAW,IAAI,KAAK,EAAA,CAAE,YAAY;GAClC,OAAO;EACT,CAAC;EACD,KAAK,YAAY,YAAY,KAAA,GAAW,MAAM;EAC9C,OAAO,aAAa;EACpB,OAAO;CACT;;CAGA,MAAM,sBAAqC;EACzC,KAAK,MAAM,YAAY,KAAK,SAAS,KAAK,CAAC,CAAC,QAAQ,UAAU,iBAAiB,KAAK,CAAC,GACnF,IAAI;GACF,MAAM,OAAO,MAAM,KAAK,QAAQ,SAAS,EAAE;GAC3C,MAAM,SAAS,MAAM,KAAK,gBAAgB,SAAS,EAAE;GACrD,IAAI,KAAK,SAAS,WAAW,KAAK,WAAW,OAAO,SAClD,MAAM,KAAK,eAAe,SAAS,EAAE;EAEzC,QAAQ,CAER;CAEJ;;CAGA,MAAM,mBAA+C;EACnD,MAAM,SAA4B,CAAC;EACnC,KAAK,MAAM,YAAY,KAAK,SAAS,KAAK,CAAC,CAAC,QAAQ,UAAU,iBAAiB,KAAK,CAAC,GACnF,IAAI;GAEF,KAAI,MADe,KAAK,QAAQ,SAAS,EAAE,EAAA,CAClC,SAAS,SAChB;GAEF,MAAM,QAAQ,MAAM,oBAClB,GAAG,eAAe,KAAK,MAAM,MAAM,SAAS,EAAE,EAAE,kBAClD;GACA,OAAO,KACL,GAAG,MAAM,OAAO,KAAK,WAAW;IAC9B,GAAG;IACH,YAAY,MAAM,cAAc,SAAS;GAC3C,EAAE,CACJ;EACF,QAAQ,CAER;EAEF,OAAO,OAAO,UAAU,MAAM,UAAU,MAAM,UAAU,cAAc,KAAK,SAAS,CAAC;CACvF;CAEA,MAAM,cAAc,YAAmC;EACrD,MAAM,WAAW,KAAK,qBAAqB,UAAU;EAErD,MAAM,WAAU,MADG,KAAK,MAAM,aAAa,UAAU,EAAA,CAChC,QAAQ,MAAM,MAAM,EAAE,OAAO,CAAC,EAAE;EACrD,MAAM,aAAa,eAAe,KAAK,MAAM,MAAM,UAAU;EAC7D,IAAI,SAAS,aAAa,SAAS;GACjC,MAAM,SAAS,MAAM,KAAK,MAAM,eAAe,YAAY,OAAO;GAClE,MAAM,SAAS,UAAU;IACvB;IACA,aAAa;IACb,aAAa,mBAAmB,KAAK,MAAM,MAAM,YAAY,OAAO;IACpE;IACA,QAAQ;KAAE,GAAG;KAAQ,SAAS;IAAM;GACtC,CAAC;EACH;EACA,KAAK,aAAa,YAAY,KAAA,CAAS;CACzC;CAEA,MAAM,gBAAgB,YAA0C;EAC9D,MAAM,WAAW,KAAK,qBAAqB,UAAU;EACrD,MAAM,OAAO,MAAM,KAAK,MAAM,aAAa,UAAU;EACrD,MAAM,UAAU,KAAK,QAAQ,MAAM,MAAM,EAAE,OAAO,CAAC,EAAE;EACrD,IAAI,CAAC,WAAW,KAAK,SAAS,SAC5B,OAAO;GACL,SAAS,KAAK,SAAS,WAAW,KAAK;GACvC,SAAS;GACT,QAAQ,KAAK,SAAS,WAAW,wBAAwB;EAC3D;EAEF,MAAM,aAAa,eAAe,KAAK,MAAM,MAAM,UAAU;EAC7D,MAAM,SAAS,MAAM,KAAK,MAAM,eAAe,YAAY,OAAO;EAClE,IAAI,SAAS,aACX,OAAO,SAAS,YAAY;GAC1B;GACA,aAAa;GACb,aAAa,mBAAmB,KAAK,MAAM,MAAM,YAAY,OAAO;GACpE;GACA,QAAQ;IACN,GAAG;IACH,SAAS,KAAK;IACd,MAAM,KAAK,QAAQ,OAAO;IAC1B,MAAM,KAAK,QAAQ,OAAO;GAC5B;EACF,CAAC;EAEH,OAAO;GACL,SAAS,KAAK;GACd,SAAS;EACX;CACF;CAIA,qBAAqB,YAA8B;EACjD,MAAM,WAAW,KAAK,SAAS,IAAI,UAAU;EAC7C,IAAI,CAAC,iBAAiB,QAAQ,GAC5B,MAAM,IAAI,aACR,aAAa,WAAW,4CACxB,mBACF;EAEF,OAAO;CACT;CAEA,MAAM,YACJ,YACA,MACA,OAMI,CAAC,GAC2D;EAChE,MAAM,WAAW,KAAK,qBAAqB,UAAU;EACrD,MAAM,cAAc,qBAAqB,IAAI;EAC7C,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;EAEvD,MAAM,WAAW,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;EACxE,MAAM,OAAO,MAAM,KAAK,MAAM,QAAQ,UAAU;GAC9C,WAAW,KAAK;GAChB,UAAU,SAAS;GACnB;GACA;EACF,CAAC;EACD,MAAM,SAA6B;GACjC,GAAG;GACH,SAAS;GACT;GACA,MAAM,KAAK,QAAQ,SAAS,QAAQ;GACpC,SAAS,KAAK,WAAW,OAAO;IAAE,GAAG,SAAS;IAAS,GAAG,KAAK;GAAQ,IAAI,SAAS;EACtF;EACA,mBAAmB,OAAO,QAAQ,WAAW;EAC7C,MAAM,KAAK,MAAM,eAAe,YAAY,aAAa,MAAM;EAE/D,IAAI;EACJ,MAAM,SAAS,MAAM,KAAK,MAAM,UAAU,UAAU;EAEpD,IADoB,KAAK,UAAU,SAAS,WAAW,aAErD,UAAU,MAAM,KAAK,mBAAmB,UAAU,aAAa,MAAM;EAEvE,KAAU,oBAAoB;EAE9B,OAAO;GAAE;GAAQ;EAAQ;CAC3B;;;CAIA,MAAM,mBACJ,YACA,MACA,QACe;EACf,MAAM,cAAc,qBAAqB,IAAI;EAC7C,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;EACvD,MAAM,KAAK,MAAM,eAAe,YAAY,aAAa,MAAM;CACjE;;;;;CAMA,MAAM,eACJ,YACA,MACA,OAMI,CAAC,GAKJ;EACD,MAAM,WAAW,KAAK,qBAAqB,UAAU;EACrD,MAAM,cAAc,qBAAqB,IAAI;EAC7C,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;EAEvD,IAAI,KAAK,QAAQ,QAAQ,KAAK,QAAQ,QAAQ,KAAK,WAAW,MAC5D,MAAM,IAAI,aACR,qDACA,oBACF;EAGF,MAAM,WAAW,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;EACxE,IAAI;EACJ,IAAI,KAAK,QAAQ,MAAM;GACrB,OAAO,aAAa,KAAK,IAAI;GAC7B,MAAM,KAAK,MAAM,gBAAgB,MAAM,YAAY,WAAW;EAChE,OAAO,IAAI,SAAS,QAAQ,MAC1B,OAAO,SAAS;OAEhB,OAAO,MAAM,KAAK,MAAM,aACtB,SAAS,oBAAoB,MAC7B,YACA,WACF;EAGF,MAAM,SAA6B;GACjC,GAAG;GACH;GACA,MAAM,KAAK,QAAQ,SAAS,QAAQ;GACpC,SAAS,KAAK,WAAW,OAAO;IAAE,GAAG,SAAS;IAAS,GAAG,KAAK;GAAQ,IAAI,SAAS;EACtF;EACA,mBAAmB,OAAO,QAAQ,WAAW;EAC7C,MAAM,KAAK,MAAM,eAAe,YAAY,aAAa,MAAM;EAG/D,MAAM,cAAa,MADE,KAAK,YAAY,YAAY,WAAW,EAAA,CACnC;EAC1B,IAAI;EACJ,IAAI,cAAc,KAAK,YAAY,OAAO;GACxC,MAAM,KAAK,kBAAkB,UAAU,WAAW;GAClD,YAAY,MAAM,KAAK,mBAAmB,UAAU,aAAa,MAAM;EACzE;EACA,KAAU,oBAAoB;EAE9B,OAAO;GAAE;GAAQ;GAAW;EAAW;CACzC;CAEA,MAAM,aAAa,YAAoB,MAA2C;EAChF,MAAM,WAAW,KAAK,qBAAqB,UAAU;EACrD,MAAM,cAAc,qBAAqB,IAAI;EAC7C,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;EAGvD,MAAM,SAA6B;GAAE,GAAG,MADjB,KAAK,MAAM,eAAe,YAAY,WAAW;GACtB,SAAS;EAAM;EACjE,MAAM,KAAK,MAAM,eAAe,YAAY,aAAa,MAAM;EAE/D,MAAM,KAAK,kBAAkB,UAAU,WAAW;EAClD,KAAU,oBAAoB;EAC9B,OAAO;CACT;CAEA,MAAM,WACJ,YACA,MACA,OAAyC,CAAC,GACpB;EACtB,MAAM,WAAW,KAAK,qBAAqB,UAAU;EACrD,MAAM,cAAc,OAChB,qBAAqB,IAAI,IACzB,MAAM,KAAK,kBAAkB,UAAU;EAE3C,MAAM,UAAU,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;EACvE,mBAAmB,KAAK,QAAQ,QAAQ,MAAM,QAAQ,WAAW;EACjE,IAAI,CAAC,QAAQ,MAAM,SACjB,MAAM,IAAI,aACR,4BAA4B,WAAW,GAAG,YAAY,8BAA8B,WAAW,GAAG,eAClG,gBACF;EAGF,IAAI,SAAS,QAAQ;EACrB,IAAI,KAAK,QAAQ,QAAQ,KAAK,QAAQ,MAAM;GAC1C,IAAI;GACJ,IAAI,KAAK,QAAQ,MAAM;IACrB,OAAO,aAAa,KAAK,IAAI;IAC7B,MAAM,KAAK,MAAM,gBAAgB,MAAM,YAAY,WAAW;GAChE,OAAO,IAAI,OAAO,QAAQ,MACxB,OAAO,OAAO;QAEd,OAAO,MAAM,KAAK,MAAM,aACtB,SAAS,oBAAoB,MAC7B,YACA,WACF;GAEF,SAAS;IACP,GAAG;IACH;IACA,MAAM,KAAK,QAAQ,OAAO,QAAQ;GACpC;GACA,MAAM,KAAK,MAAM,eAAe,YAAY,aAAa,MAAM;EACjE,OAAO,IAAI,OAAO,QAAQ,MAAM;GAE9B,MAAM,OAAO,MAAM,KAAK,MAAM,QAAQ,UAAU;IAC9C;IACA;GACF,CAAC;GACD,SAAS;IAAE,GAAG;IAAQ;IAAM,MAAM,OAAO,QAAQ;GAAY;GAC7D,MAAM,KAAK,MAAM,eAAe,YAAY,aAAa,MAAM;EACjE;EAEA,MAAM,SAAS,MAAM,KAAK,mBAAmB,UAAU,aAAa,MAAM;EAC1E,KAAU,oBAAoB;EAC9B,OAAO;CACT;CAEA,MAAM,UAAU,YAAoB,MAA8B;EAChE,MAAM,WAAW,KAAK,qBAAqB,UAAU;EACrD,MAAM,cAAc,OAChB,qBAAqB,IAAI,IACzB,MAAM,KAAK,kBAAkB,UAAU;EAC3C,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;EACvD,MAAM,KAAK,kBAAkB,UAAU,WAAW;EAClD,KAAU,oBAAoB;CAChC;CAEA,MAAM,YAAY,YAAoB,MAAqC;EACzE,MAAM,WAAW,KAAK,qBAAqB,UAAU;EACrD,MAAM,cAAc,OAChB,qBAAqB,IAAI,IACzB,MAAM,KAAK,kBAAkB,UAAU;EAE3C,MAAM,UAAU,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;EACvE,MAAM,MAAM,KAAK,kBAAkB,YAAY,aAAa,QAAQ,KAAK;EACzE,MAAM,OAAO,QAAQ,MAAM,QAAQ;EACnC,MAAM,OAAO,QAAQ,MAAM,QAAQ,SAAS,oBAAoB,KAAA;EAEhE,IAAI;EACJ,IAAI,SAAS,aACX,SAAS,MAAM,SAAS,YAAY,GAAG;OAClC;GAEL,MAAM,MAAM,MAAM,YAAY,KAAK,MAAM,QAAQ,YAAY,WAAW,CAAC;GACzE,MAAM,UAAU,OAAO,QAAQ,iBAAiB,GAAG;GACnD,MAAM,QAAQ,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;GACrE,MAAM,UAAU,KAAK,MAAM,QAAQ,YAAY,WAAW;GAE1D,SAAS;IACP,SAAS,QAAQ,MAAM;IACvB;IACA,UAAU,UAAU,OAAO,WAAW,KAAA;IACtC,eAAe,UACV,OAAO,iBAAiB,SAAS,qBAClC,SAAS;IACb,KAAK,UAAW,OAAO,KAAA,IAAa,KAAA;IACpC,SAAU,MAAM,WAAW,OAAO,IAAK,UAAU,KAAA;IACjD,QAAQ,UAAU,KAAA,IAAY,QAAQ,MAAM,UAAU,YAAY;GACpE;EACF;EAMA,OAAO,OAAO;EACd,OAAO,OAAO;EACd,IAAI,OAAO,WAAW,OAAO,OAAO,MAAM;GACxC,MAAM,eAAe,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;GAC5E,IAAI,cAAc,QAAQ,OAAO,OAAO,aAAa,UAAU;IAC7D,OAAO,WAAW,aAAa;IAC/B,OAAO,OAAO,iBAAiB,aAAa,QAAQ;IACpD,IAAI;KACF,OAAO,OAAO,IAAI,IAAI,aAAa,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAER;GACF;EACF;EACA,IAAI,CAAC,OAAO,YAAY,OAAO,WAAW,QAAQ,MAChD,OAAO,WAAW,UAAU,KAAK,GAAG;EAEtC,OAAO;CACT;CAEA,MAAM,UAAU,YAAoB,MAAe,QAAQ,IAAqB;EAC9E,MAAM,WAAW,KAAK,qBAAqB,UAAU;EACrD,MAAM,cAAc,OAChB,qBAAqB,IAAI,IACzB,MAAM,KAAK,kBAAkB,UAAU;EAE3C,MAAM,UAAU,MAAM,KAAK,MAAM,eAAe,YAAY,WAAW;EACvE,MAAM,MAAM,KAAK,kBAAkB,YAAY,aAAa,QAAQ,KAAK;EAEzE,IAAI,SAAS,eACX,OAAO,SAAS,cAAc,KAAK,KAAK;EAG1C,MAAM,UAAU,KAAK,MAAM,QAAQ,YAAY,WAAW;EAC1D,IAAI,CAAE,MAAM,WAAW,OAAO,GAC5B,OAAO;EAGT,MAAM,OAAM,MADM,SAAS,SAAS,MAAM,EAAA,CAC1B,MAAM,OAAO;EAC7B,OAAO,IAAI,MAAM,KAAK,IAAI,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;CAC7D;;;;;CAMA,MAAM,gBACJ,YACA,MACA,QACA,OAAiD,CAAC,GACnC;EACf,MAAM,cAAc,OAChB,qBAAqB,IAAI,IACzB,MAAM,KAAK,kBAAkB,UAAU;EAC3C,MAAM,UAAU,KAAK,MAAM,QAAQ,YAAY,WAAW;EAE1D,IAAI,CAAE,MAAM,WAAW,OAAO,GAC5B,OAAO,yBAAyB;EAIlC,IAAI,KAAK,SAAU,MAAM,WAAW,OAAO,GAAI;GAE7C,MAAM,OAAM,MADM,SAAS,SAAS,MAAM,EAAA,CAEvC,MAAM,IAAI,CAAC,CACX,KAAK,MAAM,EAAE,QAAQ,OAAO,EAAE,CAAC,CAAC,CAChC,OAAO,OAAO;GACjB,KAAK,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG,IAAI,SAAS,KAAK,KAAK,CAAC,GAC5D,OAAO,CAAC;EAEZ;EAEA,MAAM,gBAAgB,CAAC;EACvB,KAAK,QAAQ,iBAAiB,SAAS,OAAO;EAE9C,IAAI;GACF,MAAM,WAAW,SAAS,QAAQ,KAAK,MAAM;EAC/C,UAAU;GACR,KAAK,QAAQ,oBAAoB,SAAS,OAAO;EACnD;CACF;;;;;CAMA,MAAM,cAAc,YAOlB;EACA,MAAM,YAAY,aACd,CAAC,KAAK,qBAAqB,UAAU,CAAC,IACtC,KAAK,SAAS,KAAK,CAAC,CAAC,QAAQ,MAAM,iBAAiB,CAAC,CAAC;EAE1D,MAAM,OAAO,CAAC;EACd,KAAK,MAAM,KAAK,WAAW;GACzB,MAAM,SAAS,MAAM,KAAK,MAAM,UAAU,EAAE,EAAE;GAC9C,MAAM,WAAW,MAAM,KAAK,MAAM,aAAa,EAAE,EAAE;GACnD,KAAK,MAAM,KAAK,UAAU;IAExB,MAAM,SAAS,MAAM,KAAK,YAAY,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,aACnC;KAClB,SAAS,EAAE,MAAM;KACjB,SAAS;KACT,QAAQ;IACV,EACF;IACA,IAAI,EAAE,KAAK,SAAS,UAAU,EAAE,MAAM,WAAW,OAAO,SACtD,KAAK,KAAK;KACR,UAAU,EAAE;KACZ,MAAM,EAAE,KAAK;KACb,QAAQ,EAAE,KAAK,SAAS;KACxB;IACF,CAAC;GAEL;EACF;EACA,OAAO;CACT;;;;CAKA,MAAM,aACJ,YACA,MAUA;EACA,MAAM,UAAU,MAAM,KAAK,oBAAoB,YAAY,MAAM;GAC/D,gBAAgB;GAChB,cAAc,CAAC;EACjB,CAAC;EACD,MAAM,MAOD,CAAC;EACN,KAAK,MAAM,KAAK,SACd,IAAI;GACF,MAAM,SAAS,MAAM,KAAK,WAAW,EAAE,UAAU,EAAE,IAAI;GACvD,IAAI,KAAK;IACP,UAAU,EAAE;IACZ,MAAM,EAAE;IACR,IAAI;IACJ,UAAU,OAAO;IACjB,kBAAkB,OAAO;GAC3B,CAAC;EACH,SAAS,KAAK;GACZ,IAAI,KAAK;IACP,UAAU,EAAE;IACZ,MAAM,EAAE;IACR,IAAI;IACJ,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;GACxD,CAAC;EACH;EAEF,OAAO;CACT;CAEA,MAAM,YACJ,YACA,MACiF;EACjF,MAAM,UAAU,MAAM,KAAK,oBAAoB,YAAY,MAAM;GAC/D,gBAAgB;GAChB,cAAc,CAAC;GACf,aAAa,CAAC,QAAQ,CAAC;EACzB,CAAC;EACD,MAAM,MAAM,CAAC;EACb,KAAK,MAAM,KAAK,SACd,IAAI;GACF,MAAM,KAAK,UAAU,EAAE,UAAU,EAAE,IAAI;GACvC,IAAI,KAAK;IAAE,UAAU,EAAE;IAAU,MAAM,EAAE;IAAM,IAAI;GAAK,CAAC;EAC3D,SAAS,KAAK;GACZ,IAAI,KAAK;IACP,UAAU,EAAE;IACZ,MAAM,EAAE;IACR,IAAI;IACJ,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;GACxD,CAAC;EACH;EAEF,OAAO;CACT;;CAGA,MAAM,oBAAoB,WAAW,QAAQ,KAAsB;EACjE,IAAI,UAAU;EACd,KAAK,MAAM,OAAO,MAAM,KAAK,cAAc,GAAG;GAC5C,MAAM,EAAE,WAAW;GACnB,IAAI,CAAC,OAAO,WAAW,OAAO,OAAO,QAAQ,CAAC,OAAO,UACnD;GAEF,KAAK,YACH,IAAI,UACJ,IAAI,MACJ;IACE,UAAU,OAAO;IACjB,eAAe,OAAO;IACtB,KAAK,OAAO;IACZ,SAAS,OAAO;GAClB,GACA,QACF;GACA,WAAW;EACb;EACA,KAAK,MAAM,YAAY,KAAK,SAAS,KAAK,CAAC,CAAC,QAAQ,SAAS,iBAAiB,IAAI,CAAC,GACjF,IAAI;GACF,MAAM,SAAS,MAAM,KAAK,gBAAgB,SAAS,EAAE;GACrD,IAAI,CAAC,OAAO,WAAW,OAAO,OAAO,QAAQ,CAAC,OAAO,UACnD;GAEF,KAAK,YACH,SAAS,IACT,KAAA,GACA;IACE,UAAU,OAAO;IACjB,eAAe,OAAO;IACtB,KAAK,OAAO;IACZ,SAAS,OAAO;GAClB,GACA,QACF;GACA,WAAW;EACb,QAAQ,CAER;EAEF,OAAO;CACT;;CAKA,MAAM,oBAAoB,UAAoB,aAAoC;EAChF,MAAM,KAAK,kBAAkB,UAAU,WAAW;EAClD,KAAU,oBAAoB;CAChC;;CAGA,MAAM,qBACJ,UACA,aACA,QACkE;EAClE,IAAI,CAAC,iBAAiB,QAAQ,KAAK,CAAC,OAAO,SACzC,OAAO,EAAE,SAAS,MAAM;EAE1B,IAAI;GACF,MAAM,SAAS,MAAM,KAAK,mBAAmB,UAAU,aAAa,MAAM;GAC1E,KAAU,oBAAoB;GAC9B,OAAO;IACL,UAAU,OAAO;IACjB,SAAS;GACX;EACF,SAAS,KAAK;GACZ,OAAO;IACL,SAAS;IACT,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;GACxD;EACF;CACF;CAEA,MAAc,oBACZ,YACA,MACA,MAKoD;EACpD,IAAI,cAAc,MAAM;GACtB,KAAK,qBAAqB,UAAU;GACpC,MAAM,KAAK,MAAM,eAAe,YAAY,qBAAqB,IAAI,CAAC;GACtE,OAAO,CAAC;IAAE,UAAU;IAAY,MAAM,qBAAqB,IAAI;GAAE,CAAC;EACpE;EAEA,IAAI,YAAY;GACd,MAAM,IAAI,KAAK,qBAAqB,UAAU;GAC9C,IAAI,KAAK,cAAc;IACrB,MAAM,SAAS,MAAM,KAAK,MAAM,UAAU,EAAE,EAAE;IAC9C,IAAI,QAAQ;KACV,MAAM,MAAM,MAAM,KAAK,MAAM,eAAe,EAAE,IAAI,MAAM;KACxD,IAAI,CAAC,KAAK,kBAAkB,IAAI,MAAM,SACpC,OAAO,CAAC;MAAE,UAAU,EAAE;MAAI,MAAM;KAAO,CAAC;IAE5C;GACF;GAEA,QAAO,MADgB,KAAK,MAAM,aAAa,EAAE,EAAE,EAAA,CAEhD,QAAQ,MAAM,CAAC,KAAK,kBAAkB,EAAE,MAAM,OAAO,CAAC,CACtD,KAAK,OAAO;IAAE,UAAU,EAAE;IAAI,MAAM,EAAE,KAAK;GAAK,EAAE;EACvD;EAGA,MAAM,YAAY,KAAK,SAAS,KAAK,CAAC,CAAC,QAAQ,MAAM,iBAAiB,CAAC,CAAC;EACxE,MAAM,UAAqD,CAAC;EAC5D,KAAK,MAAM,KAAK,WAAW;GACzB,IAAI,KAAK,aAAa;IACpB,MAAM,WAAW,MAAM,KAAK,MAAM,aAAa,EAAE,EAAE;IACnD,KAAK,MAAM,WAAW,UAEpB,KAAI,MADiB,KAAK,YAAY,EAAE,IAAI,QAAQ,KAAK,IAAI,EAAA,CAClD,SACT,QAAQ,KAAK;KAAE,UAAU,EAAE;KAAI,MAAM,QAAQ,KAAK;IAAK,CAAC;IAG5D;GACF;GACA,MAAM,SAAS,MAAM,KAAK,MAAM,UAAU,EAAE,EAAE;GAC9C,IAAI,QAAQ;IACV,MAAM,MAAM,MAAM,KAAK,MAAM,WAAW,EAAE,IAAI,MAAM;IACpD,IAAI,CAAC,KACH;IAEF,IAAI,CAAC,KAAK,kBAAkB,IAAI,MAAM,SACpC,QAAQ,KAAK;KAAE,UAAU,EAAE;KAAI,MAAM;IAAO,CAAC;GAEjD;EACF;EACA,OAAO;CACT;CAEA,MAAc,kBAAkB,YAAqC;EACnE,MAAM,SAAS,MAAM,KAAK,MAAM,UAAU,UAAU;EACpD,IAAI,CAAC,QACH,MAAM,IAAI,aACR,0BAA0B,WAAW,2BACrC,mBACF;EAEF,OAAO;CACT;CAEA,kBACE,YACA,aACA,QACA,OACc;EACd,OAAO;GACL;GACA;GACA,aAAa,mBAAmB,KAAK,MAAM,MAAM,YAAY,WAAW;GACxE,YAAY,KAAK,MAAM,WAAW,YAAY,WAAW;GACzD;GACA;EACF;CACF;CAEA,MAAc,mBACZ,UACA,aACA,QACsB;EACtB,OAAO,iBAAiB,KAAK,MAAM,MAAM,SAAS,SAAS,GAAG,GAAG,qBAC/D,KAAK,2BAA2B,UAAU,aAAa,MAAM,CAC/D;CACF;CAEA,MAAc,2BACZ,UACA,aACA,QACsB;EACtB,IAAI,CAAC,SAAS,YACZ,MAAM,IAAI,aACR,aAAa,SAAS,GAAG,gEACzB,uBACF;EAGF,IAAI,YAAY,mBAAmB,MAAM;EACzC,MAAM,OAAO,UAAU,QAAQ;EAC/B,mBAAmB,IAAI;EACvB,IAAI,OAAO,UAAU,QAAQ,SAAS,oBAAoB;EAE1D,MAAM,cAAc,MAAM,YADV,KAAK,MAAM,QAAQ,SAAS,IAAI,WACV,CAAO;EAC7C,MAAM,gBAAgB,MAAM,KAAK,MAAM,eAAe,SAAS,IAAI,WAAW;EAI9E,MAAM,aACJ,eAAe,SAAS,cAAc,MAAM,SAAS,IACjD,cAAc,QACd,YAAY,EAAE,CAAC,CAAC,SAAS,KAAK;EAGpC,IAAI,eAAe,QAAQ,iBAAiB,WAAW,KAAK,SAAS,GAAG;GACtE,MAAM,aAAa,CAAC,eAAe,UAAU,UAAU,KAAK,GAAG,MAAM,CAAC,CAAC,QACpE,OAAO,OAAO,QAAyB,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,MAAM,KACnF;GACA,KAAK,MAAM,aAAa,YACtB,IAAI;IACF,MAAM,EAAE,gBAAgB,MAAM,OAAO;IAKrC,IAAI,CAAC,MAJY,YAAY,WAAW;KACtC,WAAW;KACX,YAAY;IACd,CAAC,GAEC;IAEF,MAAM,SAAS,IAAI,IAAI,SAAS;IAChC,MAAM,aAAa,OAAO,aAAa,QAAQ,UAAU,OAAO;IAChE,MAAM,aAAa,OAAO,OAAO,IAAI;IACrC,IAAI,aAAa,MAAM,eAAe,QAAQ,eAAe,OAAO;KAClE,OAAO;KACP,YAAY;MAAE,GAAG;MAAW;MAAM,MAAM;KAAW;KACnD,MAAM,KAAK,MAAM,eAAe,SAAS,IAAI,aAAa,SAAS;IACrE;IACA,MAAM,SAAsB;KAC1B,UAAU;KACV,eAAe,SAAS;KACxB,KAAK;KACL,SAAS,KAAK,MAAM,QAAQ,SAAS,IAAI,WAAW;KACpD,YAAY;KACZ,OAAO;IACT;IACA,MAAM,KAAK,MAAM,gBAAgB,SAAS,IAAI,aAAa;KACzD;KACA,UAAU,OAAO;KACjB,eAAe,OAAO;KACtB,KAAK,OAAO;KACZ,SAAS,OAAO;KAChB,4BAAW,IAAI,KAAK,EAAA,CAAE,YAAY;KAClC,OAAO;IACT,CAAC;IACD,OAAO,mBAAmB,MAAM,KAAK,oBACnC,SAAS,IACT,aACA,OAAO,UACP,UACF;IACA,KAAK,YAAY,SAAS,IAAI,aAAa,MAAM;IACjD,OAAO;GACT,QAAQ,CAER;GAGF,MAAM,KAAK,0BAA0B,UAAU,WAAW;EAC5D,OAAO,IAAI,eAAe,MAExB,MAAM,KAAK,0BAA0B,UAAU,WAAW;EAI5D,IAAI,SAAS,KAAK,CAAE,MAAM,iBAAiB,MAAM,IAAI,GAAI;GACvD,MAAM,OAAO,MAAM,KAAK,MAAM,aAAa,OAAO,GAAG,SAAS,IAAI,WAAW;GAC7E,YAAY;IAAE,GAAG;IAAW,MAAM;IAAM;GAAK;GAC7C,MAAM,KAAK,MAAM,eAAe,SAAS,IAAI,aAAa,SAAS;GACnE,OAAO;EACT,OAAO,IAAI,UAAU,QAAQ,MAAM;GACjC,YAAY;IAAE,GAAG;IAAW;IAAM;GAAK;GACvC,MAAM,KAAK,MAAM,eAAe,SAAS,IAAI,aAAa,SAAS;EACrE;EAEA,MAAM,MAAM,KAAK,kBAAkB,SAAS,IAAI,aAAa,WAAW,UAAU;EAClF,MAAM,SAAS,MAAM,SAAS,WAAW,GAAG;EAG5C,IAAI,OAAO,OAAO,QAAQ,CAAC,iBAAiB,OAAO,GAAG,GAAG;GAEvD,IAAI,SAAS,GAAG;IACd,MAAM,OAAO,MAAM,KAAK,MAAM,aAAa,OAAO,GAAG,SAAS,IAAI,WAAW;IAC7E,YAAY;KAAE,GAAG;KAAW,MAAM;KAAM;IAAK;IAC7C,MAAM,KAAK,MAAM,eAAe,SAAS,IAAI,aAAa,SAAS;IACnE,MAAM,QAAQ,MAAM,SAAS,WAC3B,KAAK,kBAAkB,SAAS,IAAI,aAAa,WAAW,UAAU,CACxE;IACA,IAAI,MAAM,OAAO,QAAQ,iBAAiB,MAAM,GAAG,GAAG;KACpD,MAAM,KAAK,MAAM,gBAAgB,SAAS,IAAI,aAAa;MACzD;MACA,UAAU,MAAM;MAChB,eAAe,MAAM,iBAAiB,SAAS;MAC/C,KAAK,MAAM;MACX,SAAS,MAAM,WAAW,KAAK,MAAM,QAAQ,SAAS,IAAI,WAAW;MACrE,4BAAW,IAAI,KAAK,EAAA,CAAE,YAAY;MAClC,OAAO;KACT,CAAC;KACD,MAAM,aAAa;KACnB,MAAM,QAAQ;KACd,KAAK,YAAY,SAAS,IAAI,aAAa,KAAK;KAChD,MAAM,mBAAmB,MAAM,KAAK,oBAClC,SAAS,IACT,aACA,MAAM,UACN,UACF;KACA,OAAO;IACT;GACF;GACA,MAAM,IAAI,aACR,aAAa,SAAS,GAAG,GAAG,YAAY,8BAA8B,KAAK,+BAA+B,SAAS,GAAG,GAAG,eACzH,oBACF;EACF;EAEA,MAAM,KAAK,MAAM,gBAAgB,SAAS,IAAI,aAAa;GACzD;GACA,UAAU,OAAO;GACjB,eAAe,OAAO,iBAAiB,SAAS;GAChD,KAAK,OAAO;GACZ,SAAS,OAAO,WAAW,KAAK,MAAM,QAAQ,SAAS,IAAI,WAAW;GACtE,4BAAW,IAAI,KAAK,EAAA,CAAE,YAAY;GAClC,OAAO;EACT,CAAC;EAED,OAAO,aAAa;EACpB,KAAK,YAAY,SAAS,IAAI,aAAa,MAAM;EAEjD,OAAO,mBAAmB,MAAM,KAAK,oBACnC,SAAS,IACT,aACA,OAAO,UACP,UACF;EACA,OAAO;CACT;;CAGA,MAAc,oBACZ,YACA,aACA,UACA,OACmB;EACnB,IAAI,CAAC,KAAK,SACR,OAAO,CAAC;EAEV,IAAI;GACF,OAAO,MAAM,6BACX,KAAK,SACL,YACA,aACA,UACA,KACF;EACF,QAAQ;GACN,OAAO,CAAC;EACV;CACF;CAEA,MAAc,kBAAkB,UAAoB,aAAoC;EACtF,OAAO,iBAAiB,KAAK,MAAM,MAAM,SAAS,SAAS,GAAG,GAAG,qBAC/D,KAAK,0BAA0B,UAAU,WAAW,CACtD;CACF;CAEA,MAAc,0BAA0B,UAAoB,aAAoC;EAC9F,MAAM,SAAS,MAAM,KAAK,MAAM,eAAe,SAAS,IAAI,WAAW;EACvE,MAAM,MAAM,KAAK,kBAAkB,SAAS,IAAI,aAAa,MAAM;EAGnE,MAAM,SAAS,MAAM,cADL,KAAK,MAAM,QAAQ,SAAS,IAAI,WACb,CAAO;EAC1C,IAAI,SAAS,WACX,MAAM,SAAS,UAAU,GAAG;OACvB;GAEL,MAAM,EAAE,gBAAgB,MAAM,OAAO;GACrC,MAAM,YAAY,KAAK,MAAM,QAAQ,SAAS,IAAI,WAAW,CAAC;EAChE;EAKA,IAAI,UAAU,iBAAiB,OAAO,GAAG,GAAG;GAK1C,MAAM,SAAS,SAAS,cAAc,MAAM,SAAS,YAAY,GAAG,IAAI,KAAA;GACxE,IAAI,CAAC,UAAU,OAAO,SACpB,MAAM,IAAI,aACR,6BAA6B,SAAS,KAAK,sBAAsB,OAAO,IAAI,KAC5E;IACE,MAAM;IACN,aAAa,CAAC,iEAAiE;GACjF,CACF;EAEJ;EAEA,MAAM,KAAK,MAAM,gBAAgB,SAAS,IAAI,WAAW;EACzD,KAAK,aAAa,SAAS,IAAI,WAAW;CAC5C;AACF"}
@@ -0,0 +1,8 @@
1
+ import type { GlobalConfig, QuotaGuardPolicy } from '../types.js';
2
+ export declare const DEFAULT_QUOTA_GUARD_POLICY: QuotaGuardPolicy;
3
+ /**
4
+ * Quota Guard only governs multi-account compatibility proxies. It never
5
+ * changes a native tool login or sends a saved credential anywhere.
6
+ */
7
+ export declare function quotaGuardPolicy(config: GlobalConfig): QuotaGuardPolicy;
8
+ //# sourceMappingURL=quota-guard-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-guard-policy.d.ts","sourceRoot":"","sources":["../../src/core/quota-guard-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE/D,eAAO,MAAM,0BAA0B,EAAE,gBAGxC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CAavE"}
@@ -0,0 +1,21 @@
1
+ //#region src/core/quota-guard-policy.ts
2
+ var DEFAULT_QUOTA_GUARD_POLICY = {
3
+ enabled: false,
4
+ cooldownMinutes: 60
5
+ };
6
+ /**
7
+ * Quota Guard only governs multi-account compatibility proxies. It never
8
+ * changes a native tool login or sends a saved credential anywhere.
9
+ */
10
+ function quotaGuardPolicy(config) {
11
+ const raw = config.ui?.quotaGuard;
12
+ const cooldownMinutes = raw?.cooldownMinutes;
13
+ return {
14
+ enabled: raw?.enabled === true,
15
+ cooldownMinutes: typeof cooldownMinutes === "number" && Number.isInteger(cooldownMinutes) && cooldownMinutes >= 1 && cooldownMinutes <= 1440 ? cooldownMinutes : DEFAULT_QUOTA_GUARD_POLICY.cooldownMinutes
16
+ };
17
+ }
18
+ //#endregion
19
+ export { DEFAULT_QUOTA_GUARD_POLICY, quotaGuardPolicy };
20
+
21
+ //# sourceMappingURL=quota-guard-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-guard-policy.js","names":[],"sources":["../../src/core/quota-guard-policy.ts"],"sourcesContent":["import type { GlobalConfig, QuotaGuardPolicy } from '../types';\n\nexport const DEFAULT_QUOTA_GUARD_POLICY: QuotaGuardPolicy = {\n enabled: false,\n cooldownMinutes: 60,\n};\n\n/**\n * Quota Guard only governs multi-account compatibility proxies. It never\n * changes a native tool login or sends a saved credential anywhere.\n */\nexport function quotaGuardPolicy(config: GlobalConfig): QuotaGuardPolicy {\n const raw = config.ui?.quotaGuard;\n const cooldownMinutes = raw?.cooldownMinutes;\n return {\n enabled: raw?.enabled === true,\n cooldownMinutes:\n typeof cooldownMinutes === 'number' &&\n Number.isInteger(cooldownMinutes) &&\n cooldownMinutes >= 1 &&\n cooldownMinutes <= 24 * 60\n ? cooldownMinutes\n : DEFAULT_QUOTA_GUARD_POLICY.cooldownMinutes,\n };\n}\n"],"mappings":";AAEA,IAAa,6BAA+C;CAC1D,SAAS;CACT,iBAAiB;AACnB;;;;;AAMA,SAAgB,iBAAiB,QAAwC;CACvE,MAAM,MAAM,OAAO,IAAI;CACvB,MAAM,kBAAkB,KAAK;CAC7B,OAAO;EACL,SAAS,KAAK,YAAY;EAC1B,iBACE,OAAO,oBAAoB,YAC3B,OAAO,UAAU,eAAe,KAChC,mBAAmB,KACnB,mBAAmB,OACf,kBACA,2BAA2B;CACnC;AACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * When a proxy rebinds to a new port/endpoint, rewrite every bound client
3
+ * (settings.json / env) so ANTHROPIC_BASE_URL / OPENAI_BASE_URL stay in sync.
4
+ * User should never need `anypick use --current` just because the port bumped.
5
+ */
6
+ import type { BindingStore } from './binding-store.js';
7
+ import type { RuntimeService } from './runtime-service.js';
8
+ import type { ClientStateStore } from './client-state-store.js';
9
+ export interface RealignProxyClientsDeps {
10
+ bindings: BindingStore;
11
+ runtime: RuntimeService;
12
+ clientState?: ClientStateStore;
13
+ }
14
+ /**
15
+ * Find clients bound to provider/account (global + project bindings + client_state)
16
+ * and re-apply the live proxy endpoint into their native config.
17
+ */
18
+ export declare function realignClientsToAccountProxy(deps: RealignProxyClientsDeps, providerId: string, accountName: string, endpoint: string, token?: string): Promise<string[]>;
19
+ //# sourceMappingURL=realign-proxy-clients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realign-proxy-clients.d.ts","sourceRoot":"","sources":["../../src/core/realign-proxy-clients.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,uBAAuB,EAC7B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CA6CnB"}
@@ -0,0 +1,40 @@
1
+ import { modelRolesFromClientOptions } from "./model-roles.js";
2
+ //#region src/core/realign-proxy-clients.ts
3
+ /**
4
+ * Find clients bound to provider/account (global + project bindings + client_state)
5
+ * and re-apply the live proxy endpoint into their native config.
6
+ */
7
+ async function realignClientsToAccountProxy(deps, providerId, accountName, endpoint, token) {
8
+ const clients = /* @__PURE__ */ new Set();
9
+ for (const b of deps.bindings.listGlobal()) if (bindingMatchesAccount(b.spec.source, providerId, accountName)) clients.add(b.client);
10
+ if (deps.clientState) {
11
+ for (const st of await deps.clientState.list()) if (st.mode === "account" && st.accountRef?.provider === providerId && st.accountRef?.name === accountName) clients.add(st.clientId);
12
+ }
13
+ const updated = [];
14
+ for (const clientId of clients) try {
15
+ const global = deps.bindings.getGlobal(clientId);
16
+ const roles = modelRolesFromClientOptions(global?.spec.clientOptions);
17
+ const modelId = global?.spec.model.mode === "explicit" ? global.spec.model.id : roles?.default;
18
+ await deps.runtime.applyProxyEndpoint(clientId, {
19
+ endpoint,
20
+ apiKey: token ?? "anypick-proxy",
21
+ defaultModel: modelId,
22
+ modelRoles: roles,
23
+ accountRef: {
24
+ provider: providerId,
25
+ name: accountName
26
+ },
27
+ label: `proxy:${providerId}/${accountName}`
28
+ });
29
+ updated.push(clientId);
30
+ } catch {}
31
+ return updated;
32
+ }
33
+ function bindingMatchesAccount(source, providerId, accountName) {
34
+ if (source.kind === "account") return source.provider === providerId && source.name === accountName;
35
+ return false;
36
+ }
37
+ //#endregion
38
+ export { realignClientsToAccountProxy };
39
+
40
+ //# sourceMappingURL=realign-proxy-clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realign-proxy-clients.js","names":[],"sources":["../../src/core/realign-proxy-clients.ts"],"sourcesContent":["/**\n * When a proxy rebinds to a new port/endpoint, rewrite every bound client\n * (settings.json / env) so ANTHROPIC_BASE_URL / OPENAI_BASE_URL stay in sync.\n * User should never need `anypick use --current` just because the port bumped.\n */\n\nimport type { BindingStore } from './binding-store';\nimport type { RuntimeService } from './runtime-service';\nimport type { ClientStateStore } from './client-state-store';\nimport { modelRolesFromClientOptions } from './model-roles';\n\nexport interface RealignProxyClientsDeps {\n bindings: BindingStore;\n runtime: RuntimeService;\n clientState?: ClientStateStore;\n}\n\n/**\n * Find clients bound to provider/account (global + project bindings + client_state)\n * and re-apply the live proxy endpoint into their native config.\n */\nexport async function realignClientsToAccountProxy(\n deps: RealignProxyClientsDeps,\n providerId: string,\n accountName: string,\n endpoint: string,\n token?: string,\n): Promise<string[]> {\n const clients = new Set<string>();\n\n for (const b of deps.bindings.listGlobal()) {\n if (bindingMatchesAccount(b.spec.source, providerId, accountName)) {\n clients.add(b.client);\n }\n }\n // Project bindings are scoped to a project activation. Rewriting a native\n // global client config here would leak that project binding globally.\n\n if (deps.clientState) {\n for (const st of await deps.clientState.list()) {\n if (\n st.mode === 'account' &&\n st.accountRef?.provider === providerId &&\n st.accountRef?.name === accountName\n ) {\n clients.add(st.clientId);\n }\n }\n }\n\n const updated: string[] = [];\n for (const clientId of clients) {\n try {\n const global = deps.bindings.getGlobal(clientId);\n const roles = modelRolesFromClientOptions(global?.spec.clientOptions);\n const modelId =\n global?.spec.model.mode === 'explicit' ? global.spec.model.id : roles?.default;\n\n await deps.runtime.applyProxyEndpoint(clientId, {\n endpoint,\n apiKey: token ?? 'anypick-proxy',\n defaultModel: modelId,\n modelRoles: roles,\n accountRef: { provider: providerId, name: accountName },\n label: `proxy:${providerId}/${accountName}`,\n });\n updated.push(clientId);\n } catch {\n // Best-effort — one broken client should not block others\n }\n }\n return updated;\n}\n\nfunction bindingMatchesAccount(\n source: { kind: string; provider?: string; name?: string },\n providerId: string,\n accountName: string,\n): boolean {\n if (source.kind === 'account') {\n return source.provider === providerId && source.name === accountName;\n }\n // A single-account process must never rewrite clients bound to a provider\n // pool (or another account). Pool lifecycle owns its own client binding.\n return false;\n}\n"],"mappings":";;;;;;AAqBA,eAAsB,6BACpB,MACA,YACA,aACA,UACA,OACmB;CACnB,MAAM,0BAAU,IAAI,IAAY;CAEhC,KAAK,MAAM,KAAK,KAAK,SAAS,WAAW,GACvC,IAAI,sBAAsB,EAAE,KAAK,QAAQ,YAAY,WAAW,GAC9D,QAAQ,IAAI,EAAE,MAAM;CAMxB,IAAI,KAAK;OACF,MAAM,MAAM,MAAM,KAAK,YAAY,KAAK,GAC3C,IACE,GAAG,SAAS,aACZ,GAAG,YAAY,aAAa,cAC5B,GAAG,YAAY,SAAS,aAExB,QAAQ,IAAI,GAAG,QAAQ;CAAA;CAK7B,MAAM,UAAoB,CAAC;CAC3B,KAAK,MAAM,YAAY,SACrB,IAAI;EACF,MAAM,SAAS,KAAK,SAAS,UAAU,QAAQ;EAC/C,MAAM,QAAQ,4BAA4B,QAAQ,KAAK,aAAa;EACpE,MAAM,UACJ,QAAQ,KAAK,MAAM,SAAS,aAAa,OAAO,KAAK,MAAM,KAAK,OAAO;EAEzE,MAAM,KAAK,QAAQ,mBAAmB,UAAU;GAC9C;GACA,QAAQ,SAAS;GACjB,cAAc;GACd,YAAY;GACZ,YAAY;IAAE,UAAU;IAAY,MAAM;GAAY;GACtD,OAAO,SAAS,WAAW,GAAG;EAChC,CAAC;EACD,QAAQ,KAAK,QAAQ;CACvB,QAAQ,CAER;CAEF,OAAO;AACT;AAEA,SAAS,sBACP,QACA,YACA,aACS;CACT,IAAI,OAAO,SAAS,WAClB,OAAO,OAAO,aAAa,cAAc,OAAO,SAAS;CAI3D,OAAO;AACT"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Deterministic resource reference parsing (spec §15).
3
+ *
4
+ * Grammar:
5
+ * provider/account → account
6
+ * account/provider/account → account
7
+ * gateway-name → gateway
8
+ * gateway/gateway-name → gateway
9
+ * @preset-name → preset
10
+ * preset/preset-name → preset
11
+ *
12
+ * No cross-kind ambiguity. Fuzzy matching never used for direct execution.
13
+ */
14
+ import type { AccountPoolResourceRef, AccountResourceRef, ClientId, GatewayResourceRef, ProxyHubResourceRef, PresetResourceRef, ResourceRef } from '../types.js';
15
+ /** Known account-auth provider ids (file-snapshot providers). */
16
+ declare const DEFAULT_ACCOUNT_PROVIDERS: Set<string>;
17
+ export interface ParseRefContext {
18
+ /** Known account provider ids (default: builtin set). */
19
+ accountProviders?: ReadonlySet<string>;
20
+ /**
21
+ * Optional exact gateway existence check. When provided and plain input
22
+ * is not a gateway but an exact preset exists, throws NOT_FOUND with @suggestion.
23
+ */
24
+ gatewayExists?: (name: string) => boolean | Promise<boolean>;
25
+ presetExists?: (name: string) => boolean | Promise<boolean>;
26
+ }
27
+ /**
28
+ * Mutation scope covering a provider's live credential file *and* all of its
29
+ * saved snapshots.
30
+ *
31
+ * Deliberately coarser than one lock per account. Every snapshot mutation is
32
+ * reached through the single live auth file the provider owns on disk, so two
33
+ * activations pointing different clients at different accounts of the same
34
+ * provider are not independent — per-account locks would let them interleave
35
+ * two rewrites of that one file. Save/use/stash also resolve their target
36
+ * account *by identity* mid-operation, so the exact account is not knowable
37
+ * up front and could not be locked in a fixed order (ADR 0009).
38
+ */
39
+ export declare function providerScope(providerId: string): string;
40
+ /**
41
+ * Mutation scope an activation must hold for its resolved source. Account and
42
+ * pool sources both reach the provider's live auth, so they collapse onto
43
+ * `providerScope`, which is what the services lock — one lock file, so the
44
+ * nested service call re-enters instead of self-deadlocking.
45
+ */
46
+ export declare function mutationScopeForRef(ref: ResourceRef): string;
47
+ export declare function serializeRef(ref: ResourceRef): string;
48
+ export declare function displayRef(ref: ResourceRef): string;
49
+ export declare function accountRef(provider: string, name: string): AccountResourceRef;
50
+ export declare function gatewayRef(name: string): GatewayResourceRef;
51
+ export declare function proxyHubRef(name: string): ProxyHubResourceRef;
52
+ export declare function presetRef(name: string): PresetResourceRef;
53
+ export declare function accountPoolRef(provider: string): AccountPoolResourceRef;
54
+ /**
55
+ * Parse a source/preset reference string into a typed ResourceRef.
56
+ * Synchronous path — does not perform existence checks.
57
+ * Use resolveSourceRef for existence + preset suggestion.
58
+ */
59
+ export declare function parseRef(input: string, ctx?: ParseRefContext): ResourceRef;
60
+ /**
61
+ * Resolve a reference with optional existence checks.
62
+ * When a plain gateway name is missing but an exact preset exists,
63
+ * throws NOT_FOUND suggesting `@name` (never auto-resolves).
64
+ */
65
+ export declare function resolveSourceRef(input: string, ctx: ParseRefContext & {
66
+ gatewayExists: (name: string) => boolean | Promise<boolean>;
67
+ presetExists?: (name: string) => boolean | Promise<boolean>;
68
+ accountExists?: (provider: string, name: string) => boolean | Promise<boolean>;
69
+ }): Promise<ResourceRef>;
70
+ /**
71
+ * Optional native-account shorthand: `anypick use codex/personal`
72
+ * Valid only when provider is also a supported client and the account
73
+ * is a native source for that same client.
74
+ */
75
+ export declare function parseNativeAccountShorthand(input: string, opts: {
76
+ accountProviders: ReadonlySet<string>;
77
+ clientIds: ReadonlySet<string>;
78
+ }): {
79
+ client: ClientId;
80
+ source: AccountResourceRef;
81
+ } | null;
82
+ export declare function isKnownAccountProvider(id: string, providers?: ReadonlySet<string>): boolean;
83
+ export { DEFAULT_ACCOUNT_PROVIDERS };
84
+ //# sourceMappingURL=refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/core/refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACZ,MAAM,UAAU,CAAC;AAGlB,iEAAiE;AACjE,QAAA,MAAM,yBAAyB,aAA2D,CAAC;AAE3F,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAc5D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAiBrD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAiBnD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAE7E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAE3D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAE7D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAEzD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,CAEvE;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,eAAoB,GAAG,WAAW,CA2I9E;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,eAAe,GAAG;IACrB,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChF,GACA,OAAO,CAAC,WAAW,CAAC,CA2EtB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IACJ,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAChC,GACA;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAAG,IAAI,CA+BzD;AAED,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,MAAM,EACV,SAAS,GAAE,WAAW,CAAC,MAAM,CAA6B,GACzD,OAAO,CAET;AAED,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,250 @@
1
+ import { ExitCode, anypickError } from "../utils/errors.js";
2
+ //#region src/core/refs.ts
3
+ /** Known account-auth provider ids (file-snapshot providers). */
4
+ var DEFAULT_ACCOUNT_PROVIDERS = /* @__PURE__ */ new Set([
5
+ "codex",
6
+ "gemini",
7
+ "grok",
8
+ "kiro",
9
+ "opencode"
10
+ ]);
11
+ /**
12
+ * Mutation scope covering a provider's live credential file *and* all of its
13
+ * saved snapshots.
14
+ *
15
+ * Deliberately coarser than one lock per account. Every snapshot mutation is
16
+ * reached through the single live auth file the provider owns on disk, so two
17
+ * activations pointing different clients at different accounts of the same
18
+ * provider are not independent — per-account locks would let them interleave
19
+ * two rewrites of that one file. Save/use/stash also resolve their target
20
+ * account *by identity* mid-operation, so the exact account is not knowable
21
+ * up front and could not be locked in a fixed order (ADR 0009).
22
+ */
23
+ function providerScope(providerId) {
24
+ return `provider/${providerId}`;
25
+ }
26
+ /**
27
+ * Mutation scope an activation must hold for its resolved source. Account and
28
+ * pool sources both reach the provider's live auth, so they collapse onto
29
+ * `providerScope`, which is what the services lock — one lock file, so the
30
+ * nested service call re-enters instead of self-deadlocking.
31
+ */
32
+ function mutationScopeForRef(ref) {
33
+ switch (ref.kind) {
34
+ case "account":
35
+ case "account-pool": return providerScope(ref.provider);
36
+ case "gateway":
37
+ case "proxy-hub":
38
+ case "preset": return serializeRef(ref);
39
+ default: throw new Error(`Unknown resource ref: ${JSON.stringify(ref)}`);
40
+ }
41
+ }
42
+ function serializeRef(ref) {
43
+ switch (ref.kind) {
44
+ case "account": return `account/${ref.provider}/${ref.name}`;
45
+ case "gateway": return `gateway/${ref.name}`;
46
+ case "proxy-hub": return `hub/${ref.name}`;
47
+ case "preset": return `preset/${ref.name}`;
48
+ case "account-pool": return `pool/${ref.provider}`;
49
+ default: throw new Error(`Unknown resource ref: ${JSON.stringify(ref)}`);
50
+ }
51
+ }
52
+ function displayRef(ref) {
53
+ switch (ref.kind) {
54
+ case "account": return `${ref.provider}/${ref.name}`;
55
+ case "gateway": return ref.name;
56
+ case "proxy-hub": return `hub:${ref.name}`;
57
+ case "preset": return `@${ref.name}`;
58
+ case "account-pool": return `pool:${ref.provider}`;
59
+ default: throw new Error(`Unknown resource ref: ${JSON.stringify(ref)}`);
60
+ }
61
+ }
62
+ function accountRef(provider, name) {
63
+ return {
64
+ kind: "account",
65
+ provider,
66
+ name
67
+ };
68
+ }
69
+ function gatewayRef(name) {
70
+ return {
71
+ kind: "gateway",
72
+ name
73
+ };
74
+ }
75
+ function proxyHubRef(name) {
76
+ return {
77
+ kind: "proxy-hub",
78
+ name
79
+ };
80
+ }
81
+ function presetRef(name) {
82
+ return {
83
+ kind: "preset",
84
+ name
85
+ };
86
+ }
87
+ function accountPoolRef(provider) {
88
+ return {
89
+ kind: "account-pool",
90
+ provider
91
+ };
92
+ }
93
+ /**
94
+ * Parse a source/preset reference string into a typed ResourceRef.
95
+ * Synchronous path — does not perform existence checks.
96
+ * Use resolveSourceRef for existence + preset suggestion.
97
+ */
98
+ function parseRef(input, ctx = {}) {
99
+ const raw = input.trim();
100
+ if (!raw) throw anypickError("Empty resource reference.", "INVALID_REFERENCE", {
101
+ exitCode: ExitCode.INVALID_USAGE,
102
+ suggestions: [
103
+ "Accounts use provider/name: grok/work",
104
+ "Gateways use their saved name: openrouter-work",
105
+ "Presets use @name: @work-grok"
106
+ ]
107
+ });
108
+ const providers = ctx.accountProviders ?? DEFAULT_ACCOUNT_PROVIDERS;
109
+ if (raw.startsWith("@")) {
110
+ const name = raw.slice(1).trim();
111
+ if (!name) throw anypickError("Preset name is required after @.", "INVALID_REFERENCE", { exitCode: ExitCode.INVALID_USAGE });
112
+ return presetRef(name);
113
+ }
114
+ if (raw.startsWith("preset/")) {
115
+ const name = raw.slice(7).trim();
116
+ if (!name) throw anypickError("Preset name is required after preset/.", "INVALID_REFERENCE", { exitCode: ExitCode.INVALID_USAGE });
117
+ return presetRef(name);
118
+ }
119
+ if (raw.startsWith("hub:") || raw.startsWith("hub/")) {
120
+ const name = raw.startsWith("hub:") ? raw.slice(4).trim() : raw.slice(4).trim();
121
+ if (!name || name.includes("/") || name.includes(":")) throw anypickError(`Invalid Proxy Hub reference: ${raw}`, "INVALID_REFERENCE", { exitCode: ExitCode.INVALID_USAGE });
122
+ return proxyHubRef(name);
123
+ }
124
+ if (raw.startsWith("pool:") || raw.startsWith("pool/")) {
125
+ const provider = raw.startsWith("pool:") ? raw.slice(5).trim() : raw.slice(5).trim();
126
+ if (!provider || provider.includes("/") || provider.includes(":")) throw anypickError(`Invalid pool reference: ${raw}. Expected pool:provider (e.g. pool:gemini)`, "INVALID_REFERENCE", { exitCode: ExitCode.INVALID_USAGE });
127
+ if (!providers.has(provider)) throw anypickError(`Unknown account provider "${provider}" in pool reference: ${raw}`, "INVALID_REFERENCE", {
128
+ exitCode: ExitCode.INVALID_USAGE,
129
+ suggestions: [`Known: ${[...providers].toSorted().join(", ")}`]
130
+ });
131
+ return accountPoolRef(provider);
132
+ }
133
+ if (raw.startsWith("gateway/")) {
134
+ const name = raw.slice(8).trim();
135
+ if (!name || name.includes("/")) throw anypickError(`Invalid gateway reference: ${raw}`, "INVALID_REFERENCE", { exitCode: ExitCode.INVALID_USAGE });
136
+ return gatewayRef(name);
137
+ }
138
+ if (raw.startsWith("account/")) {
139
+ const rest = raw.slice(8);
140
+ const slash = rest.indexOf("/");
141
+ if (slash <= 0 || slash === rest.length - 1) throw anypickError(`Invalid account reference: ${raw}. Expected account/provider/name`, "INVALID_REFERENCE", { exitCode: ExitCode.INVALID_USAGE });
142
+ return accountRef(rest.slice(0, slash), rest.slice(slash + 1));
143
+ }
144
+ const slash = raw.indexOf("/");
145
+ if (slash > 0) {
146
+ const provider = raw.slice(0, slash);
147
+ const name = raw.slice(slash + 1);
148
+ if (providers.has(provider)) {
149
+ if (!name || name.includes("/")) throw anypickError(`Invalid account reference: ${raw}. Expected provider/account`, "INVALID_REFERENCE", { exitCode: ExitCode.INVALID_USAGE });
150
+ return accountRef(provider, name);
151
+ }
152
+ throw anypickError(`Unknown account provider "${provider}" in reference: ${raw}`, "INVALID_REFERENCE", {
153
+ exitCode: ExitCode.INVALID_USAGE,
154
+ suggestions: [
155
+ `Known account providers: ${[...providers].toSorted().join(", ")}`,
156
+ "Gateways use a plain name without /",
157
+ "Presets use @name"
158
+ ]
159
+ });
160
+ }
161
+ if (raw.includes("/") || raw.startsWith("@")) throw anypickError(`Invalid gateway name: ${raw}`, "INVALID_REFERENCE", { exitCode: ExitCode.INVALID_USAGE });
162
+ return gatewayRef(raw);
163
+ }
164
+ /**
165
+ * Resolve a reference with optional existence checks.
166
+ * When a plain gateway name is missing but an exact preset exists,
167
+ * throws NOT_FOUND suggesting `@name` (never auto-resolves).
168
+ */
169
+ async function resolveSourceRef(input, ctx) {
170
+ const ref = parseRef(input, ctx);
171
+ if (ref.kind === "gateway") {
172
+ if (!await ctx.gatewayExists(ref.name)) {
173
+ if (ctx.presetExists && await ctx.presetExists(ref.name)) throw anypickError(`Gateway \`${ref.name}\` was not found.\n\nA preset with that name exists.\nDid you mean:\n anypick use <client> --with @${ref.name}`, "RESOURCE_NOT_FOUND", {
174
+ exitCode: ExitCode.NOT_FOUND,
175
+ suggestions: [`anypick use <client> --with @${ref.name}`],
176
+ details: {
177
+ kind: "gateway",
178
+ name: ref.name,
179
+ presetSuggestion: ref.name
180
+ }
181
+ });
182
+ throw anypickError(`Gateway \`${ref.name}\` was not found.`, "GATEWAY_NOT_FOUND", {
183
+ exitCode: ExitCode.NOT_FOUND,
184
+ suggestions: [
185
+ "Accounts use provider/name:",
186
+ " anypick use claude --with grok/work",
187
+ "Gateways use their saved name:",
188
+ " anypick use claude --with openrouter-work",
189
+ "Presets use @name:",
190
+ " anypick use claude --with @work-grok"
191
+ ],
192
+ details: {
193
+ kind: "gateway",
194
+ name: ref.name
195
+ }
196
+ });
197
+ }
198
+ return ref;
199
+ }
200
+ if (ref.kind === "proxy-hub") {
201
+ if (ref.name !== "default") throw anypickError(`Proxy Hub \`${ref.name}\` was not found.`, "RESOURCE_NOT_FOUND", { exitCode: ExitCode.NOT_FOUND });
202
+ return ref;
203
+ }
204
+ if (ref.kind === "account" && ctx.accountExists) {
205
+ if (!await ctx.accountExists(ref.provider, ref.name)) throw anypickError(`Account \`${ref.provider}/${ref.name}\` was not found.`, "ACCOUNT_NOT_FOUND", {
206
+ exitCode: ExitCode.NOT_FOUND,
207
+ suggestions: [`anypick add account ${ref.provider} --current --name ${ref.name}`, `anypick list accounts`],
208
+ details: {
209
+ kind: "account",
210
+ provider: ref.provider,
211
+ name: ref.name
212
+ }
213
+ });
214
+ }
215
+ if (ref.kind === "preset" && ctx.presetExists) {
216
+ if (!await ctx.presetExists(ref.name)) throw anypickError(`Preset \`@${ref.name}\` was not found.`, "PRESET_NOT_FOUND", {
217
+ exitCode: ExitCode.NOT_FOUND,
218
+ suggestions: ["anypick list presets"],
219
+ details: {
220
+ kind: "preset",
221
+ name: ref.name
222
+ }
223
+ });
224
+ }
225
+ return ref;
226
+ }
227
+ /**
228
+ * Optional native-account shorthand: `anypick use codex/personal`
229
+ * Valid only when provider is also a supported client and the account
230
+ * is a native source for that same client.
231
+ */
232
+ function parseNativeAccountShorthand(input, opts) {
233
+ const raw = input.trim();
234
+ if (!raw || raw.startsWith("@") || raw.startsWith("account/") || raw.startsWith("gateway/") || raw.startsWith("preset/")) return null;
235
+ const slash = raw.indexOf("/");
236
+ if (slash <= 0) return null;
237
+ const provider = raw.slice(0, slash);
238
+ const name = raw.slice(slash + 1);
239
+ if (!name || name.includes("/")) return null;
240
+ if (!opts.accountProviders.has(provider)) return null;
241
+ if (!opts.clientIds.has(provider)) return null;
242
+ return {
243
+ client: provider,
244
+ source: accountRef(provider, name)
245
+ };
246
+ }
247
+ //#endregion
248
+ export { DEFAULT_ACCOUNT_PROVIDERS, accountPoolRef, accountRef, displayRef, gatewayRef, mutationScopeForRef, parseNativeAccountShorthand, parseRef, presetRef, providerScope, proxyHubRef, resolveSourceRef, serializeRef };
249
+
250
+ //# sourceMappingURL=refs.js.map