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,553 @@
1
+ import { ExitCode, anypickError } from "../utils/errors.js";
2
+ import { pathExists } from "../utils/fs.js";
3
+ import { proxyHubLogPath, proxyHubPidPath } from "./paths.js";
4
+ import { isListenPortFree, listenPidsOnPort, waitForHttp } from "../utils/process/health.js";
5
+ import { isProcessRunning, readPidRecord, spawnDetached, stopPidFile, writePidRecord } from "../utils/process/pid.js";
6
+ import { assertLoopbackHost } from "../utils/network.js";
7
+ import { withMutationLocks } from "./mutation-lock.js";
8
+ import { displayRef, providerScope, serializeRef } from "./refs.js";
9
+ import { accountAdapterFor, poolAdapterFor } from "../sources/account-adapters.js";
10
+ import { resolveAnyPickCliLaunch } from "../providers/opencode-cli-entry.js";
11
+ import { DEFAULT_PROXY_HUB } from "./proxy-hub-store.js";
12
+ import { assignDesktopAliases, expandHubRoutesWithDesktopAliases, loadNativeListSlots, orderHubModelsForDesktop } from "../clients/codex-desktop-catalog.js";
13
+ import { ProxyHubBackendRegistry } from "./proxy-hub-server.js";
14
+ import { compileProxyHubRoutes } from "./proxy-hub-routes.js";
15
+ import { readFile } from "node:fs/promises";
16
+ //#region src/core/proxy-hub-service.ts
17
+ /**
18
+ * Owns Hub configuration and route attachment. The server owns no persisted
19
+ * mutation: it reads these versioned, token-scoped manifests at its boundary.
20
+ */
21
+ var ProxyHubService = class {
22
+ root;
23
+ store;
24
+ deps;
25
+ previewCache = /* @__PURE__ */ new Map();
26
+ previewPending = /* @__PURE__ */ new Map();
27
+ constructor(root, store, deps) {
28
+ this.root = root;
29
+ this.store = store;
30
+ this.deps = deps;
31
+ }
32
+ /**
33
+ * Optional re-publisher for the live Codex config block, wired in app.ts so this
34
+ * service does not depend on Codex/Proxy services it was not constructed with.
35
+ */
36
+ codexLiveConfigSync;
37
+ setCodexLiveConfigSync(fn) {
38
+ this.codexLiveConfigSync = fn;
39
+ }
40
+ async syncCodexLiveConfig() {
41
+ try {
42
+ await this.codexLiveConfigSync?.();
43
+ } catch {}
44
+ }
45
+ async get(name = DEFAULT_PROXY_HUB) {
46
+ return this.store.getOrDefault(name);
47
+ }
48
+ async save(config) {
49
+ assertLoopbackHost(config.host);
50
+ if (!Number.isInteger(config.port) || config.port < 1 || config.port > 65535) throw anypickError("Proxy Hub port must be between 1 and 65535.", "INVALID_USAGE", { exitCode: ExitCode.INVALID_USAGE });
51
+ const uniqueSources = dedupeSources(config.sources);
52
+ await this.validateSources(uniqueSources.filter((source) => source.enabled));
53
+ const scopes = [`proxy/hub/${config.name}`, ...uniqueSources.map((source) => providerScope(source.ref.provider))];
54
+ return withMutationLocks(this.root, scopes, async () => {
55
+ const saved = this.store.save({
56
+ ...this.store.getOrDefault(config.name),
57
+ ...config,
58
+ sources: uniqueSources,
59
+ modelOwners: validOwners(config.modelOwners, uniqueSources)
60
+ });
61
+ this.previewCache.delete(config.name);
62
+ return saved;
63
+ });
64
+ }
65
+ async setSources(name, sources) {
66
+ const config = await this.get(name);
67
+ return this.save({
68
+ ...config,
69
+ sources
70
+ });
71
+ }
72
+ /**
73
+ * Drop a deleted saved account from Hub sources and model owners.
74
+ * AccountService calls this after the account row is gone so a removed
75
+ * login cannot keep blocking attach or linger in Hub Sources.
76
+ */
77
+ async forgetAccount(providerId, accountName, name = DEFAULT_PROXY_HUB) {
78
+ const config = await this.get(name);
79
+ const matches = (ref) => ref.kind === "account" && ref.provider === providerId && ref.name === accountName;
80
+ const sources = config.sources.filter((source) => !matches(source.ref));
81
+ const modelOwners = config.modelOwners.filter((owner) => !matches(owner.source));
82
+ if (sources.length === config.sources.length && modelOwners.length === config.modelOwners.length) return;
83
+ await this.save({
84
+ ...config,
85
+ sources,
86
+ modelOwners
87
+ });
88
+ }
89
+ async setModelOwner(name, model, source) {
90
+ return this.setModelOwners(name, [model], source);
91
+ }
92
+ /**
93
+ * Persist one explicit source choice for a set of colliding raw model ids.
94
+ * Discovery and the single config write share the Hub/provider lock set, so
95
+ * a stale Tray action can never assign a model to a source that stopped
96
+ * advertising it while the action was in flight.
97
+ */
98
+ async setModelOwners(name, models, source) {
99
+ const normalized = [...new Set(models.map((model) => model.trim()).filter(Boolean))];
100
+ if (normalized.length === 0) throw anypickError("At least one model id is required.", "INVALID_USAGE", { exitCode: ExitCode.INVALID_USAGE });
101
+ return this.withStableConfig(name, async (config) => {
102
+ if (source) {
103
+ const sourceId = serializeRef(source);
104
+ if (!config.sources.some((entry) => entry.enabled && serializeRef(entry.ref) === sourceId)) throw invalidModelOwner(normalized, source, "is not an enabled Hub source");
105
+ const preview = await this.previewWithConfig(config);
106
+ for (const model of normalized) {
107
+ const candidates = modelCandidates(preview, model);
108
+ if (candidates.length < 2 || !candidates.some((candidate) => serializeRef(candidate) === sourceId)) throw invalidModelOwner([model], source, "is no longer a candidate for that model conflict");
109
+ }
110
+ }
111
+ const replaced = new Set(normalized);
112
+ const owners = config.modelOwners.filter((owner) => !replaced.has(owner.model));
113
+ if (source) owners.push(...normalized.map((model) => ({
114
+ model,
115
+ source
116
+ })));
117
+ return this.save({
118
+ ...config,
119
+ modelOwners: owners
120
+ });
121
+ });
122
+ }
123
+ /** Refresh source catalogs through provider-owned in-process backends. */
124
+ async preview(name = DEFAULT_PROXY_HUB) {
125
+ return this.loadPreview(name, false);
126
+ }
127
+ /** Force provider-owned catalog discovery instead of accepting the 10 s preview cache. */
128
+ async refreshPreview(name = DEFAULT_PROXY_HUB) {
129
+ return this.loadPreview(name, true);
130
+ }
131
+ async loadPreview(name, force) {
132
+ const config = await this.get(name);
133
+ if (!force) {
134
+ const cached = this.cachedPreview(config);
135
+ if (cached) return cached;
136
+ }
137
+ const pending = this.previewPending.get(name);
138
+ if (pending) try {
139
+ const result = await pending;
140
+ if (!force) return result;
141
+ } catch (error) {
142
+ if (!force) throw error;
143
+ }
144
+ const work = this.withStableConfig(name, async (latest) => {
145
+ if (!force) {
146
+ const latestCached = this.cachedPreview(latest);
147
+ if (latestCached) return latestCached;
148
+ }
149
+ const preview = await this.previewWithConfig(latest);
150
+ this.previewCache.set(name, {
151
+ revision: latest.revision,
152
+ expiresAt: Date.now() + 1e4,
153
+ value: preview
154
+ });
155
+ return preview;
156
+ });
157
+ this.previewPending.set(name, work);
158
+ try {
159
+ return await work;
160
+ } finally {
161
+ if (this.previewPending.get(name) === work) this.previewPending.delete(name);
162
+ }
163
+ }
164
+ /** Read a bounded tail of the detached Hub process log. */
165
+ async logs(name = DEFAULT_PROXY_HUB, lines = 80) {
166
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(name)) throw anypickError("Invalid Proxy Hub log source.", "INVALID_USAGE", { exitCode: ExitCode.INVALID_USAGE });
167
+ const boundedLines = Number.isFinite(lines) ? Math.max(1, Math.min(200, Math.trunc(lines))) : 80;
168
+ const logPath = proxyHubLogPath(this.root, name);
169
+ if (!await pathExists(logPath)) return "";
170
+ const all = (await readFile(logPath, "utf8")).replace(/\r?\n$/u, "").split(/\r?\n/u);
171
+ if (all.length === 1 && all[0] === "") return "";
172
+ return all.slice(Math.max(0, all.length - boundedLines)).join("\n");
173
+ }
174
+ async previewWithConfig(config) {
175
+ const registry = new ProxyHubBackendRegistry(this.deps, () => {});
176
+ const catalogs = [];
177
+ const unavailable = [];
178
+ try {
179
+ for (const source of config.sources) {
180
+ if (!source.enabled) continue;
181
+ try {
182
+ const backend = await registry.open(source.ref);
183
+ const response = await fetch(`${backend.handle.endpoint}/v1/models?refresh=1`, {
184
+ headers: { authorization: `Bearer ${backend.token}` },
185
+ signal: AbortSignal.timeout(12e3)
186
+ });
187
+ if (!response.ok) throw new Error(`catalog returned ${response.status}`);
188
+ const models = modelsFromCatalog(await response.json());
189
+ if (models.length === 0) throw new Error("catalog returned no models");
190
+ const adapter = await this.adapterForSource(source.ref);
191
+ catalogs.push({
192
+ source: source.ref,
193
+ catalogId: adapter.capabilities.provider,
194
+ models
195
+ });
196
+ } catch {
197
+ unavailable.push({
198
+ source: source.ref,
199
+ reason: "catalog unavailable"
200
+ });
201
+ }
202
+ }
203
+ } finally {
204
+ await registry.close();
205
+ }
206
+ return {
207
+ config,
208
+ catalogs,
209
+ unavailable,
210
+ ...compileProxyHubRoutes(config, catalogs)
211
+ };
212
+ }
213
+ async attachRoute(routeId, client, protocol, name = DEFAULT_PROXY_HUB, requiredModels = []) {
214
+ const secret = await this.withStableConfig(name, async (config) => {
215
+ const preview = await this.previewWithConfig(config);
216
+ this.previewCache.set(name, {
217
+ revision: config.revision,
218
+ expiresAt: Date.now() + 1e4,
219
+ value: preview
220
+ });
221
+ if (preview.routes.length === 0) {
222
+ const detail = preview.unavailable.length > 0 ? preview.unavailable.map((entry) => `${displayRef(entry.source)}: ${entry.reason}`).join("; ") : "no uniquely routed models";
223
+ throw anypickError(preview.unavailable.length > 0 ? `Proxy Hub sources are not ready: ${detail}` : "Proxy Hub has no uniquely routed models. Add a source or resolve conflicts.", preview.unavailable.length > 0 ? "PROXY_START_FAILED" : "STATE_CONFLICT", preview.unavailable.length > 0 ? void 0 : { exitCode: ExitCode.CAPABILITY_CONFLICT });
224
+ }
225
+ const available = new Set(preview.routes.map((route) => route.model));
226
+ const missing = [...new Set(requiredModels.map((model) => model.trim()).filter(Boolean))].filter((model) => !available.has(model));
227
+ if (missing.length > 0) {
228
+ const unavailableHint = preview.unavailable.length > 0 ? ` Unavailable sources: ${preview.unavailable.map((entry) => displayRef(entry.source)).join(", ")}.` : "";
229
+ throw anypickError(`Proxy Hub cannot route selected model${missing.length === 1 ? "" : "s"}: ${missing.join(", ")}.${unavailableHint}`, "STATE_CONFLICT", { exitCode: ExitCode.CAPABILITY_CONFLICT });
230
+ }
231
+ await this.validateRoutesForClient(preview.routes, client);
232
+ let routes = preview.routes;
233
+ if (client === "codex") {
234
+ const nativeSlots = loadNativeListSlots();
235
+ const aliases = assignDesktopAliases(orderHubModelsForDesktop(preview.routes.map((route) => route.model), requiredModels), nativeSlots);
236
+ routes = expandHubRoutesWithDesktopAliases(preview.routes, aliases);
237
+ }
238
+ const manifest = {
239
+ version: 1,
240
+ hub: name,
241
+ revision: preview.config.revision,
242
+ client,
243
+ protocol,
244
+ routes
245
+ };
246
+ return this.store.attachRoute(routeId, manifest);
247
+ });
248
+ this.syncCodexLiveConfig();
249
+ return secret;
250
+ }
251
+ getAttachedRoute(routeId) {
252
+ return this.store.getRoute(routeId);
253
+ }
254
+ getAttachedRouteCount(name = DEFAULT_PROXY_HUB) {
255
+ return this.store.countRoutes(name);
256
+ }
257
+ async restoreRoute(routeId, previous) {
258
+ const name = previous?.manifest.hub ?? "default";
259
+ const current = this.store.getRoute(routeId);
260
+ const sources = previous?.manifest.routes ?? current?.manifest.routes ?? [];
261
+ await withMutationLocks(this.root, hubScopes(name, sources), async () => {
262
+ if (previous) this.store.attachRoute(routeId, previous.manifest, previous.token);
263
+ else this.store.detachRoute(routeId);
264
+ });
265
+ }
266
+ async detachRoute(routeId, name = DEFAULT_PROXY_HUB) {
267
+ const current = this.store.getRoute(routeId);
268
+ await withMutationLocks(this.root, hubScopes(name, current?.manifest.routes ?? []), async () => {
269
+ this.store.detachRoute(routeId);
270
+ });
271
+ this.syncCodexLiveConfig();
272
+ }
273
+ /** Start the singleton detached Hub process, reusing only a verified instance. */
274
+ async ensureRunning(name = DEFAULT_PROXY_HUB) {
275
+ const result = await withMutationLocks(this.root, [`proxy/hub/${name}`], async () => {
276
+ const config = await this.get(name);
277
+ return this.ensureRunningWithConfig(config);
278
+ });
279
+ this.syncCodexLiveConfig();
280
+ return result;
281
+ }
282
+ async ensureRunningWithConfig(config) {
283
+ const { name } = config;
284
+ if (!config.enabled) throw anypickError(`Proxy Hub hub:${name} is disabled.`, "PROXY_DISABLED");
285
+ if (!config.sources.some((source) => source.enabled)) throw anypickError(`Proxy Hub hub:${name} has no enabled sources. Add one before starting.`, "STATE_CONFLICT", {
286
+ exitCode: ExitCode.CAPABILITY_CONFLICT,
287
+ suggestions: ["In Tray, open Accounts → Model routing → Manage accounts, then enable a model account.", "If none are listed, add an OpenCode, Gemini, or Grok account under Manage."]
288
+ });
289
+ const endpoint = `http://${config.host}:${config.port}`;
290
+ const pidPath = proxyHubPidPath(this.root, name);
291
+ const logPath = proxyHubLogPath(this.root, name);
292
+ const existing = await readPidRecord(pidPath);
293
+ if (existing?.endpoint === endpoint && isProcessRunning(existing.pid)) {
294
+ if (await waitForHttp(`${endpoint}/health`, {
295
+ requirePid: existing.pid,
296
+ expectInstanceId: existing.instanceId,
297
+ timeoutMs: 8e3
298
+ })) {
299
+ this.store.saveRuntime({
300
+ name,
301
+ endpoint,
302
+ pid: existing.pid,
303
+ instanceId: existing.instanceId,
304
+ logPath,
305
+ startedAt: existing.createdAt
306
+ });
307
+ return {
308
+ endpoint,
309
+ startedNow: false,
310
+ pid: existing.pid,
311
+ instanceId: existing.instanceId
312
+ };
313
+ }
314
+ }
315
+ const adopted = await this.adoptLiveHub(config, endpoint, pidPath, logPath);
316
+ if (adopted) return adopted;
317
+ if (!await isListenPortFree(config.port, config.host)) throw anypickError(`Proxy Hub failed to bind ${config.host}:${config.port}: the port is already in use and is not a AnyPick Proxy Hub for hub:${name}.`, "PROXY_START_FAILED", { suggestions: [`Stop whatever is listening on ${config.host}:${config.port}, or change the hub port.`, `If an old anypick hub was left running: lsof -iTCP:${config.port} -sTCP:LISTEN then kill that pid.`] });
318
+ const launch = resolveAnyPickCliLaunch([
319
+ "proxy",
320
+ "serve",
321
+ "hub",
322
+ "--name",
323
+ name,
324
+ "--host",
325
+ config.host,
326
+ "--port",
327
+ String(config.port)
328
+ ]);
329
+ if (!await pathExists(launch.entry)) throw anypickError(`AnyPick CLI entry not found at ${launch.entry}. Run: pnpm build`, "PROXY_BINARY_MISSING");
330
+ const spawned = await spawnDetached(launch.command, launch.args, {
331
+ logPath,
332
+ pidPath,
333
+ endpoint,
334
+ provider: "proxy-hub",
335
+ account: name,
336
+ env: {
337
+ ...process.env,
338
+ ANYPICK_HOME: this.root,
339
+ ...launch.watch ? { ANYPICK_DEV_WATCH: process.env.ANYPICK_DEV_WATCH ?? "1" } : {}
340
+ }
341
+ });
342
+ if (!await waitForHttp(`${endpoint}/health`, {
343
+ requirePid: spawned.pid,
344
+ expectInstanceId: spawned.instanceId,
345
+ timeoutMs: launch.watch ? 15e3 : 5e3
346
+ }) || !isProcessRunning(spawned.pid)) {
347
+ if (isProcessRunning(spawned.pid)) try {
348
+ process.kill(spawned.pid, "SIGTERM");
349
+ } catch {}
350
+ const raced = await this.adoptLiveHub(config, endpoint, pidPath, logPath);
351
+ if (raced) return raced;
352
+ const tail = (await readFile(logPath, "utf8").catch(() => "")).trim().slice(-800);
353
+ throw anypickError(`Proxy Hub failed to bind ${config.host}:${config.port}.${tail ? `\n${tail}` : ""}`, "PROXY_START_FAILED");
354
+ }
355
+ this.store.saveRuntime({
356
+ name,
357
+ endpoint,
358
+ pid: spawned.pid,
359
+ instanceId: spawned.instanceId,
360
+ logPath,
361
+ startedAt: (/* @__PURE__ */ new Date()).toISOString()
362
+ });
363
+ return {
364
+ endpoint,
365
+ startedNow: true,
366
+ pid: spawned.pid,
367
+ instanceId: spawned.instanceId
368
+ };
369
+ }
370
+ /**
371
+ * Reclaim a live hub whose pid record was lost or points at a dead process.
372
+ * Identity comes from /health (service + hub name + instanceId), not from
373
+ * "something is listening on the port".
374
+ */
375
+ async adoptLiveHub(config, endpoint, pidPath, logPath) {
376
+ const health = await probeProxyHubHealth(endpoint, config.name);
377
+ if (!health) return null;
378
+ const pid = (await listenPidsOnPort(config.port, config.host)).find((candidate) => isProcessRunning(candidate));
379
+ if (pid == null) return null;
380
+ writePidRecord(pidPath, {
381
+ instanceId: health.instanceId,
382
+ pid,
383
+ endpoint,
384
+ provider: "proxy-hub",
385
+ account: config.name,
386
+ command: process.execPath
387
+ });
388
+ this.store.saveRuntime({
389
+ name: config.name,
390
+ endpoint,
391
+ pid,
392
+ instanceId: health.instanceId,
393
+ logPath,
394
+ startedAt: (/* @__PURE__ */ new Date()).toISOString()
395
+ });
396
+ return {
397
+ endpoint,
398
+ startedNow: false,
399
+ pid,
400
+ instanceId: health.instanceId
401
+ };
402
+ }
403
+ async stop(name = DEFAULT_PROXY_HUB) {
404
+ await withMutationLocks(this.root, [`proxy/hub/${name}`], async () => {
405
+ await stopPidFile(proxyHubPidPath(this.root, name), { processGroup: true });
406
+ this.store.clearRuntime(name);
407
+ });
408
+ this.syncCodexLiveConfig();
409
+ }
410
+ async status(name = DEFAULT_PROXY_HUB) {
411
+ const config = await this.get(name);
412
+ const runtime = this.store.getRuntime(name);
413
+ const cachedPreview = this.cachedPreview(config);
414
+ const routeModels = new Set(this.store.listRouteSecrets(name).flatMap((route) => route.manifest.routes.map((target) => target.model)));
415
+ const running = runtime?.pid != null && isRunning(runtime.pid);
416
+ return {
417
+ name,
418
+ enabled: config.enabled,
419
+ running,
420
+ endpoint: running ? runtime?.endpoint : void 0,
421
+ pid: running ? runtime?.pid : void 0,
422
+ sourceCount: config.sources.filter((source) => source.enabled).length,
423
+ modelCount: cachedPreview?.routes.length ?? routeModels.size,
424
+ conflictCount: cachedPreview == null ? 0 : proxyHubIssueCount(cachedPreview),
425
+ revision: config.revision,
426
+ detail: running ? void 0 : config.enabled ? "stopped" : "disabled"
427
+ };
428
+ }
429
+ async validateSources(sources) {
430
+ for (const source of sources) {
431
+ const provider = this.deps.accountRegistry.get(source.ref.provider);
432
+ if (!provider.createProxyHubBackend) throw anypickError(`${provider.name} cannot run behind Proxy Hub.`, "UNSUPPORTED_TRANSPORT", { exitCode: ExitCode.CAPABILITY_CONFLICT });
433
+ if (source.ref.kind === "account") {
434
+ if (!await this.deps.accounts.get(source.ref.provider, source.ref.name)) throw anypickError(`Account ${displayRef(source.ref)} was not found.`, "ACCOUNT_NOT_FOUND", { exitCode: ExitCode.NOT_FOUND });
435
+ } else {
436
+ const pool = await this.deps.pools.get(source.ref.provider);
437
+ if (!pool || pool.mode !== "multi") throw anypickError(`Proxy Hub source ${displayRef(source.ref)} needs an enabled multi-account pool.`, "POOL_NOT_ENABLED", { exitCode: ExitCode.CAPABILITY_CONFLICT });
438
+ }
439
+ }
440
+ }
441
+ cachedPreview(config) {
442
+ const cached = this.previewCache.get(config.name);
443
+ if (!cached || cached.revision !== config.revision || cached.expiresAt < Date.now()) return;
444
+ return cached.value;
445
+ }
446
+ /**
447
+ * Read a versioned config, acquire its complete sorted scope set, then prove
448
+ * it did not change before using it. A source edit that wins the small race
449
+ * is retried with its new provider scopes instead of running discovery while
450
+ * an unlisted provider account can mutate.
451
+ */
452
+ async withStableConfig(name, operation) {
453
+ for (let attempt = 0; attempt < 3; attempt += 1) {
454
+ const config = await this.get(name);
455
+ const result = await withMutationLocks(this.root, hubScopes(name, config.sources), async () => {
456
+ const latest = await this.get(name);
457
+ if (latest.revision !== config.revision) return { stable: false };
458
+ return {
459
+ stable: true,
460
+ value: await operation(latest)
461
+ };
462
+ });
463
+ if (result.stable) return result.value;
464
+ }
465
+ throw anypickError("Proxy Hub sources changed repeatedly. Please retry.", "STATE_CONFLICT");
466
+ }
467
+ async validateRoutesForClient(routes, client) {
468
+ for (const route of routes) {
469
+ const capability = (await this.adapterForSource(route.source)).transportFor(client);
470
+ if (capability !== "managed_builtin_proxy" && capability !== "managed_external_proxy") throw anypickError(`${displayRef(route.source)} cannot serve ${client} through Proxy Hub.`, "UNSUPPORTED_TRANSPORT", { exitCode: ExitCode.CAPABILITY_CONFLICT });
471
+ }
472
+ }
473
+ async adapterForSource(source) {
474
+ const provider = this.deps.accountRegistry.get(source.provider);
475
+ return source.kind === "account" ? this.adapterForAccount(source.provider, source.name, provider) : provider.poolSourceAdapter?.() ?? poolAdapterFor(source.provider, provider);
476
+ }
477
+ async adapterForAccount(providerId, accountName, provider) {
478
+ const account = await this.deps.accounts.get(providerId, accountName);
479
+ if (!account) throw anypickError(`Account ${providerId}/${accountName} was not found.`, "ACCOUNT_NOT_FOUND", { exitCode: ExitCode.NOT_FOUND });
480
+ return accountAdapterFor(provider, account);
481
+ }
482
+ };
483
+ /** Live hub identity from /health — used to re-attach after a lost pid file. */
484
+ async function probeProxyHubHealth(endpoint, hubName) {
485
+ try {
486
+ const res = await fetch(`${endpoint.replace(/\/$/u, "")}/health`, {
487
+ method: "GET",
488
+ signal: AbortSignal.timeout(800),
489
+ headers: { accept: "application/json" }
490
+ });
491
+ if (!res.ok) return null;
492
+ const body = await res.json();
493
+ if (body.ok === true && body.service === "anypick-proxy-hub" && body.hub === hubName && typeof body.instanceId === "string" && body.instanceId.length > 0) return { instanceId: body.instanceId };
494
+ return null;
495
+ } catch {
496
+ return null;
497
+ }
498
+ }
499
+ /** Count user decisions, not raw model rows, for compact status surfaces. */
500
+ function proxyHubIssueCount(preview) {
501
+ return new Set(preview.conflicts.map((conflict) => conflict.candidates.map(serializeRef).toSorted((left, right) => left.localeCompare(right)).join("\0"))).size + preview.sourceChoices.length;
502
+ }
503
+ function dedupeSources(sources) {
504
+ const byRef = /* @__PURE__ */ new Map();
505
+ for (const source of sources) byRef.set(serializeRef(source.ref), {
506
+ ref: source.ref,
507
+ enabled: source.enabled
508
+ });
509
+ return [...byRef.values()].toSorted((left, right) => serializeRef(left.ref).localeCompare(serializeRef(right.ref)));
510
+ }
511
+ function hubScopes(name, entries) {
512
+ return [`proxy/hub/${name}`, ...entries.map((entry) => providerScope("ref" in entry ? entry.ref.provider : entry.source.provider))];
513
+ }
514
+ function validOwners(owners, sources) {
515
+ const enabled = new Set(sources.filter((source) => source.enabled).map((source) => serializeRef(source.ref)));
516
+ const byModel = /* @__PURE__ */ new Map();
517
+ for (const owner of owners) {
518
+ const model = owner.model.trim();
519
+ if (model && enabled.has(serializeRef(owner.source))) byModel.set(model, {
520
+ model,
521
+ source: owner.source
522
+ });
523
+ }
524
+ return [...byModel.values()].toSorted((left, right) => left.model.localeCompare(right.model));
525
+ }
526
+ function modelCandidates(preview, model) {
527
+ const sources = /* @__PURE__ */ new Map();
528
+ for (const catalog of preview.catalogs) if (catalog.models.includes(model)) sources.set(serializeRef(catalog.source), catalog.source);
529
+ return [...sources.values()];
530
+ }
531
+ function invalidModelOwner(models, source, reason) {
532
+ return anypickError(`Cannot assign ${models.length === 1 ? models[0] : `${models.length} selected models`} to ${displayRef(source)}: it ${reason}. Refresh conflicts and try again.`, "STATE_CONFLICT", { exitCode: ExitCode.CAPABILITY_CONFLICT });
533
+ }
534
+ function modelsFromCatalog(value) {
535
+ if (Array.isArray(value)) return value.map((entry) => typeof entry === "string" ? entry : entry && typeof entry === "object" ? entry.id : void 0).filter((id) => typeof id === "string" && id.trim().length > 0);
536
+ if (!value || typeof value !== "object") return [];
537
+ const record = value;
538
+ const list = Array.isArray(record.data) ? record.data : Array.isArray(record.models) ? record.models : null;
539
+ if (!list) return [];
540
+ return list.map((entry) => typeof entry === "string" ? entry : entry && typeof entry === "object" ? entry.id : void 0).filter((id) => typeof id === "string" && id.trim().length > 0);
541
+ }
542
+ function isRunning(pid) {
543
+ try {
544
+ process.kill(pid, 0);
545
+ return true;
546
+ } catch {
547
+ return false;
548
+ }
549
+ }
550
+ //#endregion
551
+ export { ProxyHubService, proxyHubIssueCount };
552
+
553
+ //# sourceMappingURL=proxy-hub-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-hub-service.js","names":[],"sources":["../../src/core/proxy-hub-service.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\nimport type {\n ClientId,\n Protocol,\n ProxyHubConfig,\n ProxyHubModelOwner,\n ProxyHubRouteManifest,\n ProxyHubSource,\n ProxyHubSourceRef,\n ProxyHubStatus,\n} from '../types';\nimport {\n assignDesktopAliases,\n expandHubRoutesWithDesktopAliases,\n loadNativeListSlots,\n orderHubModelsForDesktop,\n} from '../clients/codex-desktop-catalog';\nimport { accountAdapterFor, poolAdapterFor } from '../sources/account-adapters';\nimport { assertLoopbackHost } from '../utils/network';\nimport { anypickError, ExitCode } from '../utils/errors';\nimport { withMutationLocks } from './mutation-lock';\nimport { displayRef, providerScope, serializeRef } from './refs';\nimport { ProxyHubBackendRegistry, type ProxyHubServerDeps } from './proxy-hub-server';\nimport { compileProxyHubRoutes, type CompiledProxyHubRoutes } from './proxy-hub-routes';\nimport { DEFAULT_PROXY_HUB, ProxyHubStore, type ProxyHubRouteSecret } from './proxy-hub-store';\nimport { proxyHubLogPath, proxyHubPidPath } from './paths';\nimport { pathExists } from '../utils/fs';\nimport {\n isListenPortFree,\n isProcessRunning,\n listenPidsOnPort,\n readPidRecord,\n spawnDetached,\n stopPidFile,\n waitForHttp,\n writePidRecord,\n} from '../utils/process';\nimport { resolveAnyPickCliLaunch } from '../providers/opencode-cli-entry';\n\nexport interface ProxyHubCatalogSnapshot {\n source: ProxyHubSourceRef;\n catalogId: string;\n models: string[];\n}\n\nexport interface ProxyHubPreview extends CompiledProxyHubRoutes {\n config: ProxyHubConfig;\n catalogs: ProxyHubCatalogSnapshot[];\n unavailable: Array<{ source: ProxyHubSourceRef; reason: string }>;\n}\n\n/**\n * Owns Hub configuration and route attachment. The server owns no persisted\n * mutation: it reads these versioned, token-scoped manifests at its boundary.\n */\nexport class ProxyHubService {\n private readonly previewCache = new Map<\n string,\n { revision: number; expiresAt: number; value: ProxyHubPreview }\n >();\n private readonly previewPending = new Map<string, Promise<ProxyHubPreview>>();\n\n constructor(\n private readonly root: string,\n private readonly store: ProxyHubStore,\n private readonly deps: ProxyHubServerDeps,\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 Codex/Proxy 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 Hub op.\n }\n }\n\n async get(name = DEFAULT_PROXY_HUB): Promise<ProxyHubConfig> {\n return this.store.getOrDefault(name);\n }\n\n async save(\n config: Omit<ProxyHubConfig, 'revision' | 'createdAt' | 'updatedAt'> &\n Partial<Pick<ProxyHubConfig, 'revision' | 'createdAt' | 'updatedAt'>>,\n ): Promise<ProxyHubConfig> {\n assertLoopbackHost(config.host);\n if (!Number.isInteger(config.port) || config.port < 1 || config.port > 65535) {\n throw anypickError('Proxy Hub port must be between 1 and 65535.', 'INVALID_USAGE', {\n exitCode: ExitCode.INVALID_USAGE,\n });\n }\n const uniqueSources = dedupeSources(config.sources);\n // Enabled sources must still resolve; disabled rows are config-only.\n // Deleted accounts are pruned on account delete via forgetAccount — they\n // should not linger as enabled hub sources.\n await this.validateSources(uniqueSources.filter((source) => source.enabled));\n const scopes = [\n `proxy/hub/${config.name}`,\n ...uniqueSources.map((source) => providerScope(source.ref.provider)),\n ];\n return withMutationLocks(this.root, scopes, async () => {\n const saved = this.store.save({\n ...this.store.getOrDefault(config.name),\n ...config,\n sources: uniqueSources,\n modelOwners: validOwners(config.modelOwners, uniqueSources),\n });\n this.previewCache.delete(config.name);\n return saved;\n });\n }\n\n async setSources(name: string, sources: ProxyHubSource[]): Promise<ProxyHubConfig> {\n const config = await this.get(name);\n return this.save({ ...config, sources });\n }\n\n /**\n * Drop a deleted saved account from Hub sources and model owners.\n * AccountService calls this after the account row is gone so a removed\n * login cannot keep blocking attach or linger in Hub Sources.\n */\n async forgetAccount(\n providerId: string,\n accountName: string,\n name = DEFAULT_PROXY_HUB,\n ): Promise<void> {\n const config = await this.get(name);\n const matches = (ref: { kind: string; provider?: string; name?: string }) =>\n ref.kind === 'account' && ref.provider === providerId && ref.name === accountName;\n const sources = config.sources.filter((source) => !matches(source.ref));\n const modelOwners = config.modelOwners.filter((owner) => !matches(owner.source));\n if (\n sources.length === config.sources.length &&\n modelOwners.length === config.modelOwners.length\n ) {\n return;\n }\n await this.save({ ...config, sources, modelOwners });\n }\n\n async setModelOwner(\n name: string,\n model: string,\n source: ProxyHubSourceRef | undefined,\n ): Promise<ProxyHubConfig> {\n return this.setModelOwners(name, [model], source);\n }\n\n /**\n * Persist one explicit source choice for a set of colliding raw model ids.\n * Discovery and the single config write share the Hub/provider lock set, so\n * a stale Tray action can never assign a model to a source that stopped\n * advertising it while the action was in flight.\n */\n async setModelOwners(\n name: string,\n models: readonly string[],\n source: ProxyHubSourceRef | undefined,\n ): Promise<ProxyHubConfig> {\n const normalized = [...new Set(models.map((model) => model.trim()).filter(Boolean))];\n if (normalized.length === 0) {\n throw anypickError('At least one model id is required.', 'INVALID_USAGE', {\n exitCode: ExitCode.INVALID_USAGE,\n });\n }\n\n return this.withStableConfig(name, async (config) => {\n if (source) {\n const sourceId = serializeRef(source);\n if (\n !config.sources.some((entry) => entry.enabled && serializeRef(entry.ref) === sourceId)\n ) {\n throw invalidModelOwner(normalized, source, 'is not an enabled Hub source');\n }\n\n // Compile candidate identity from the fresh catalogs, not from a label\n // or action payload supplied by the Tray helper.\n const preview = await this.previewWithConfig(config);\n for (const model of normalized) {\n const candidates = modelCandidates(preview, model);\n if (\n candidates.length < 2 ||\n !candidates.some((candidate) => serializeRef(candidate) === sourceId)\n ) {\n throw invalidModelOwner(\n [model],\n source,\n 'is no longer a candidate for that model conflict',\n );\n }\n }\n }\n\n const replaced = new Set(normalized);\n const owners = config.modelOwners.filter((owner) => !replaced.has(owner.model));\n if (source) {\n owners.push(...normalized.map((model) => ({ model, source })));\n }\n return this.save({ ...config, modelOwners: owners });\n });\n }\n\n /** Refresh source catalogs through provider-owned in-process backends. */\n async preview(name = DEFAULT_PROXY_HUB): Promise<ProxyHubPreview> {\n return this.loadPreview(name, false);\n }\n\n /** Force provider-owned catalog discovery instead of accepting the 10 s preview cache. */\n async refreshPreview(name = DEFAULT_PROXY_HUB): Promise<ProxyHubPreview> {\n return this.loadPreview(name, true);\n }\n\n private async loadPreview(name: string, force: boolean): Promise<ProxyHubPreview> {\n const config = await this.get(name);\n if (!force) {\n const cached = this.cachedPreview(config);\n if (cached) {\n return cached;\n }\n }\n const pending = this.previewPending.get(name);\n if (pending) {\n try {\n const result = await pending;\n if (!force) {\n return result;\n }\n } catch (error) {\n if (!force) {\n throw error;\n }\n }\n }\n const work = this.withStableConfig(name, async (latest) => {\n if (!force) {\n const latestCached = this.cachedPreview(latest);\n if (latestCached) {\n return latestCached;\n }\n }\n const preview = await this.previewWithConfig(latest);\n this.previewCache.set(name, {\n revision: latest.revision,\n expiresAt: Date.now() + 10_000,\n value: preview,\n });\n return preview;\n });\n this.previewPending.set(name, work);\n try {\n return await work;\n } finally {\n if (this.previewPending.get(name) === work) {\n this.previewPending.delete(name);\n }\n }\n }\n\n /** Read a bounded tail of the detached Hub process log. */\n async logs(name = DEFAULT_PROXY_HUB, lines = 80): Promise<string> {\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(name)) {\n throw anypickError('Invalid Proxy Hub log source.', 'INVALID_USAGE', {\n exitCode: ExitCode.INVALID_USAGE,\n });\n }\n const boundedLines = Number.isFinite(lines)\n ? Math.max(1, Math.min(200, Math.trunc(lines)))\n : 80;\n const logPath = proxyHubLogPath(this.root, name);\n if (!(await pathExists(logPath))) {\n return '';\n }\n const raw = await readFile(logPath, 'utf8');\n const all = raw.replace(/\\r?\\n$/u, '').split(/\\r?\\n/u);\n if (all.length === 1 && all[0] === '') {\n return '';\n }\n return all.slice(Math.max(0, all.length - boundedLines)).join('\\n');\n }\n\n private async previewWithConfig(config: ProxyHubConfig): Promise<ProxyHubPreview> {\n const registry = new ProxyHubBackendRegistry(this.deps, () => {});\n const catalogs: ProxyHubCatalogSnapshot[] = [];\n const unavailable: ProxyHubPreview['unavailable'] = [];\n try {\n for (const source of config.sources) {\n if (!source.enabled) {\n continue;\n }\n try {\n const backend = await registry.open(source.ref);\n // Request a fresh catalog so models the account gained upstream (a new\n // free tier, etc.) show in the picker instead of a cached list. Non-\n // OpenCode backends ignore the unknown query param and list as usual.\n const response = await fetch(`${backend.handle.endpoint}/v1/models?refresh=1`, {\n headers: { authorization: `Bearer ${backend.token}` },\n signal: AbortSignal.timeout(12_000),\n });\n if (!response.ok) {\n throw new Error(`catalog returned ${response.status}`);\n }\n const body: unknown = await response.json();\n const models = modelsFromCatalog(body);\n if (models.length === 0) {\n throw new Error('catalog returned no models');\n }\n const adapter = await this.adapterForSource(source.ref);\n catalogs.push({\n source: source.ref,\n catalogId: adapter.capabilities.provider,\n models,\n });\n } catch {\n unavailable.push({\n source: source.ref,\n // Catalog errors can originate in provider SDKs. This result crosses\n // CLI/TUI boundaries, so keep diagnostics safe and provider-neutral.\n reason: 'catalog unavailable',\n });\n }\n }\n } finally {\n await registry.close();\n }\n const compiled = compileProxyHubRoutes(config, catalogs);\n return { config, catalogs, unavailable, ...compiled };\n }\n\n async attachRoute(\n routeId: string,\n client: ClientId,\n protocol: Protocol,\n name = DEFAULT_PROXY_HUB,\n requiredModels: readonly string[] = [],\n ): Promise<ProxyHubRouteSecret> {\n const secret = await this.withStableConfig(name, async (config) => {\n // Hold the Hub scope throughout discovery and persistence: an updated\n // source set cannot race in after catalog discovery but before the route\n // manifest becomes visible to the public listener.\n const preview = await this.previewWithConfig(config);\n this.previewCache.set(name, {\n revision: config.revision,\n expiresAt: Date.now() + 10_000,\n value: preview,\n });\n // A stale enabled source (deleted account, dead catalog) must not block\n // attach when other sources still provide the models the client needs.\n // Only hard-fail when nothing usable remains, or required models are gone.\n if (preview.routes.length === 0) {\n const detail =\n preview.unavailable.length > 0\n ? preview.unavailable\n .map((entry) => `${displayRef(entry.source)}: ${entry.reason}`)\n .join('; ')\n : 'no uniquely routed models';\n throw anypickError(\n preview.unavailable.length > 0\n ? `Proxy Hub sources are not ready: ${detail}`\n : 'Proxy Hub has no uniquely routed models. Add a source or resolve conflicts.',\n preview.unavailable.length > 0 ? 'PROXY_START_FAILED' : 'STATE_CONFLICT',\n preview.unavailable.length > 0 ? undefined : { exitCode: ExitCode.CAPABILITY_CONFLICT },\n );\n }\n const available = new Set(preview.routes.map((route) => route.model));\n const missing = [\n ...new Set(requiredModels.map((model) => model.trim()).filter(Boolean)),\n ].filter((model) => !available.has(model));\n if (missing.length > 0) {\n const unavailableHint =\n preview.unavailable.length > 0\n ? ` Unavailable sources: ${preview.unavailable\n .map((entry) => displayRef(entry.source))\n .join(', ')}.`\n : '';\n throw anypickError(\n `Proxy Hub cannot route selected model${missing.length === 1 ? '' : 's'}: ${missing.join(', ')}.${unavailableHint}`,\n 'STATE_CONFLICT',\n { exitCode: ExitCode.CAPABILITY_CONFLICT },\n );\n }\n await this.validateRoutesForClient(preview.routes, client);\n // Codex Desktop only lists native GPT allowlist slugs. Expand the route\n // table so those slugs rewrite to real Hub models (upstreamModel).\n let routes = preview.routes;\n if (client === 'codex') {\n const nativeSlots = loadNativeListSlots();\n // requiredModels is Default + List 2–5 from the binding (activation\n // passes clientOptions.modelRoles). Order pins Desktop picker slots.\n const ordered = orderHubModelsForDesktop(\n preview.routes.map((route) => route.model),\n requiredModels,\n );\n const aliases = assignDesktopAliases(ordered, nativeSlots);\n routes = expandHubRoutesWithDesktopAliases(preview.routes, aliases);\n }\n const manifest: ProxyHubRouteManifest = {\n version: 1,\n hub: name,\n revision: preview.config.revision,\n client,\n protocol,\n routes,\n };\n return this.store.attachRoute(routeId, manifest);\n });\n void this.syncCodexLiveConfig();\n return secret;\n }\n\n getAttachedRoute(routeId: string): ProxyHubRouteSecret | null {\n return this.store.getRoute(routeId);\n }\n\n getAttachedRouteCount(name = DEFAULT_PROXY_HUB): number {\n return this.store.countRoutes(name);\n }\n\n async restoreRoute(routeId: string, previous: ProxyHubRouteSecret | null): Promise<void> {\n const name = previous?.manifest.hub ?? DEFAULT_PROXY_HUB;\n const current = this.store.getRoute(routeId);\n const sources = previous?.manifest.routes ?? current?.manifest.routes ?? [];\n await withMutationLocks(this.root, hubScopes(name, sources), async () => {\n if (previous) {\n this.store.attachRoute(routeId, previous.manifest, previous.token);\n } else {\n this.store.detachRoute(routeId);\n }\n });\n }\n\n async detachRoute(routeId: string, name = DEFAULT_PROXY_HUB): Promise<void> {\n const current = this.store.getRoute(routeId);\n await withMutationLocks(\n this.root,\n hubScopes(name, current?.manifest.routes ?? []),\n async () => {\n this.store.detachRoute(routeId);\n },\n );\n void this.syncCodexLiveConfig();\n }\n\n /** Start the singleton detached Hub process, reusing only a verified instance. */\n async ensureRunning(name = DEFAULT_PROXY_HUB): Promise<{\n endpoint: string;\n startedNow: boolean;\n pid: number;\n instanceId: string;\n }> {\n const result = await withMutationLocks(this.root, [`proxy/hub/${name}`], async () => {\n const config = await this.get(name);\n return this.ensureRunningWithConfig(config);\n });\n void this.syncCodexLiveConfig();\n return result;\n }\n\n private async ensureRunningWithConfig(config: ProxyHubConfig): Promise<{\n endpoint: string;\n startedNow: boolean;\n pid: number;\n instanceId: string;\n }> {\n const { name } = config;\n if (!config.enabled) {\n throw anypickError(`Proxy Hub hub:${name} is disabled.`, 'PROXY_DISABLED');\n }\n if (!config.sources.some((source) => source.enabled)) {\n throw anypickError(\n `Proxy Hub hub:${name} has no enabled sources. Add one before starting.`,\n 'STATE_CONFLICT',\n {\n exitCode: ExitCode.CAPABILITY_CONFLICT,\n suggestions: [\n 'In Tray, open Accounts → Model routing → Manage accounts, then enable a model account.',\n 'If none are listed, add an OpenCode, Gemini, or Grok account under Manage.',\n ],\n },\n );\n }\n const endpoint = `http://${config.host}:${config.port}`;\n const pidPath = proxyHubPidPath(this.root, name);\n const logPath = proxyHubLogPath(this.root, name);\n const existing = await readPidRecord(pidPath);\n if (existing?.endpoint === endpoint && isProcessRunning(existing.pid)) {\n // Dev hub may run under `tsx watch`: mid-reload the pid stays up while\n // /health is briefly down. Wait long enough to ride that gap before\n // treating the process as dead and fighting it for the port.\n const healthy = await waitForHttp(`${endpoint}/health`, {\n requirePid: existing.pid,\n expectInstanceId: existing.instanceId,\n timeoutMs: 8_000,\n });\n if (healthy) {\n this.store.saveRuntime({\n name,\n endpoint,\n pid: existing.pid,\n instanceId: existing.instanceId,\n logPath,\n startedAt: existing.createdAt,\n });\n return {\n endpoint,\n startedNow: false,\n pid: existing.pid,\n instanceId: existing.instanceId,\n };\n }\n }\n\n // Stale pid file is common after a crashed tray/dev restart: the hub child\n // keeps the port while the record points at a dead pid. Re-attach when the\n // live listener is still our hub (verified via /health), never by port alone.\n const adopted = await this.adoptLiveHub(config, endpoint, pidPath, logPath);\n if (adopted) {\n return adopted;\n }\n\n if (!(await isListenPortFree(config.port, config.host))) {\n throw anypickError(\n `Proxy Hub failed to bind ${config.host}:${config.port}: the port is already in use and is not a AnyPick Proxy Hub for hub:${name}.`,\n 'PROXY_START_FAILED',\n {\n suggestions: [\n `Stop whatever is listening on ${config.host}:${config.port}, or change the hub port.`,\n `If an old anypick hub was left running: lsof -iTCP:${config.port} -sTCP:LISTEN then kill that pid.`,\n ],\n },\n );\n }\n\n const launch = resolveAnyPickCliLaunch([\n 'proxy',\n 'serve',\n 'hub',\n '--name',\n name,\n '--host',\n config.host,\n '--port',\n String(config.port),\n ]);\n if (!(await pathExists(launch.entry))) {\n throw anypickError(\n `AnyPick CLI entry not found at ${launch.entry}. Run: pnpm build`,\n 'PROXY_BINARY_MISSING',\n );\n }\n const spawned = await spawnDetached(launch.command, launch.args, {\n logPath,\n pidPath,\n endpoint,\n provider: 'proxy-hub',\n account: name,\n env: {\n ...process.env,\n ANYPICK_HOME: this.root,\n // Child inherits watch policy for any nested re-exec.\n ...(launch.watch ? { ANYPICK_DEV_WATCH: process.env.ANYPICK_DEV_WATCH ?? '1' } : {}),\n },\n });\n // First bind under tsx watch can take longer than a cold dist start.\n const ready = await waitForHttp(`${endpoint}/health`, {\n requirePid: spawned.pid,\n expectInstanceId: spawned.instanceId,\n timeoutMs: launch.watch ? 15_000 : 5_000,\n });\n if (!ready || !isProcessRunning(spawned.pid)) {\n if (isProcessRunning(spawned.pid)) {\n try {\n process.kill(spawned.pid, 'SIGTERM');\n } catch {\n // The direct child is known, unlike an arbitrary pid record.\n }\n }\n // Race: another anypick process may have claimed the port first — adopt it.\n const raced = await this.adoptLiveHub(config, endpoint, pidPath, logPath);\n if (raced) {\n return raced;\n }\n const log = await readFile(logPath, 'utf8').catch(() => '');\n const tail = log.trim().slice(-800);\n throw anypickError(\n `Proxy Hub failed to bind ${config.host}:${config.port}.${tail ? `\\n${tail}` : ''}`,\n 'PROXY_START_FAILED',\n );\n }\n this.store.saveRuntime({\n name,\n endpoint,\n pid: spawned.pid,\n instanceId: spawned.instanceId,\n logPath,\n startedAt: new Date().toISOString(),\n });\n return { endpoint, startedNow: true, pid: spawned.pid, instanceId: spawned.instanceId };\n }\n\n /**\n * Reclaim a live hub whose pid record was lost or points at a dead process.\n * Identity comes from /health (service + hub name + instanceId), not from\n * \"something is listening on the port\".\n */\n private async adoptLiveHub(\n config: ProxyHubConfig,\n endpoint: string,\n pidPath: string,\n logPath: string,\n ): Promise<{ endpoint: string; startedNow: boolean; pid: number; instanceId: string } | null> {\n const health = await probeProxyHubHealth(endpoint, config.name);\n if (!health) {\n return null;\n }\n const listeners = await listenPidsOnPort(config.port, config.host);\n const pid = listeners.find((candidate) => isProcessRunning(candidate));\n if (pid == null) {\n return null;\n }\n writePidRecord(pidPath, {\n instanceId: health.instanceId,\n pid,\n endpoint,\n provider: 'proxy-hub',\n account: config.name,\n command: process.execPath,\n });\n this.store.saveRuntime({\n name: config.name,\n endpoint,\n pid,\n instanceId: health.instanceId,\n logPath,\n startedAt: new Date().toISOString(),\n });\n return { endpoint, startedNow: false, pid, instanceId: health.instanceId };\n }\n\n async stop(name = DEFAULT_PROXY_HUB): Promise<void> {\n await withMutationLocks(this.root, [`proxy/hub/${name}`], async () => {\n await stopPidFile(proxyHubPidPath(this.root, name), {\n processGroup: true,\n });\n this.store.clearRuntime(name);\n });\n void this.syncCodexLiveConfig();\n }\n\n async status(name = DEFAULT_PROXY_HUB): Promise<ProxyHubStatus> {\n const config = await this.get(name);\n const runtime = this.store.getRuntime(name);\n const cachedPreview = this.cachedPreview(config);\n const routeModels = new Set(\n this.store\n .listRouteSecrets(name)\n .flatMap((route) => route.manifest.routes.map((target) => target.model)),\n );\n const running = runtime?.pid != null && isRunning(runtime.pid);\n return {\n name,\n enabled: config.enabled,\n running,\n endpoint: running ? runtime?.endpoint : undefined,\n pid: running ? runtime?.pid : undefined,\n sourceCount: config.sources.filter((source) => source.enabled).length,\n modelCount: cachedPreview?.routes.length ?? routeModels.size,\n conflictCount: cachedPreview == null ? 0 : proxyHubIssueCount(cachedPreview),\n revision: config.revision,\n detail: running ? undefined : config.enabled ? 'stopped' : 'disabled',\n };\n }\n\n private async validateSources(sources: readonly ProxyHubSource[]): Promise<void> {\n for (const source of sources) {\n const provider = this.deps.accountRegistry.get(source.ref.provider);\n if (!provider.createProxyHubBackend) {\n throw anypickError(\n `${provider.name} cannot run behind Proxy Hub.`,\n 'UNSUPPORTED_TRANSPORT',\n { exitCode: ExitCode.CAPABILITY_CONFLICT },\n );\n }\n if (source.ref.kind === 'account') {\n const account = await this.deps.accounts.get(source.ref.provider, source.ref.name);\n if (!account) {\n throw anypickError(\n `Account ${displayRef(source.ref)} was not found.`,\n 'ACCOUNT_NOT_FOUND',\n {\n exitCode: ExitCode.NOT_FOUND,\n },\n );\n }\n } else {\n const pool = await this.deps.pools.get(source.ref.provider);\n if (!pool || pool.mode !== 'multi') {\n throw anypickError(\n `Proxy Hub source ${displayRef(source.ref)} needs an enabled multi-account pool.`,\n 'POOL_NOT_ENABLED',\n { exitCode: ExitCode.CAPABILITY_CONFLICT },\n );\n }\n }\n }\n }\n\n private cachedPreview(config: ProxyHubConfig): ProxyHubPreview | undefined {\n const cached = this.previewCache.get(config.name);\n if (!cached || cached.revision !== config.revision || cached.expiresAt < Date.now()) {\n return undefined;\n }\n return cached.value;\n }\n\n /**\n * Read a versioned config, acquire its complete sorted scope set, then prove\n * it did not change before using it. A source edit that wins the small race\n * is retried with its new provider scopes instead of running discovery while\n * an unlisted provider account can mutate.\n */\n private async withStableConfig<T>(\n name: string,\n operation: (config: ProxyHubConfig) => Promise<T>,\n ): Promise<T> {\n for (let attempt = 0; attempt < 3; attempt += 1) {\n const config = await this.get(name);\n const result = await withMutationLocks(\n this.root,\n hubScopes(name, config.sources),\n async () => {\n const latest = await this.get(name);\n if (latest.revision !== config.revision) {\n return { stable: false as const };\n }\n return { stable: true as const, value: await operation(latest) };\n },\n );\n if (result.stable) {\n return result.value;\n }\n }\n throw anypickError('Proxy Hub sources changed repeatedly. Please retry.', 'STATE_CONFLICT');\n }\n\n private async validateRoutesForClient(\n routes: readonly { source: ProxyHubSourceRef }[],\n client: ClientId,\n ): Promise<void> {\n for (const route of routes) {\n const adapter = await this.adapterForSource(route.source);\n const capability = adapter.transportFor(client);\n if (capability !== 'managed_builtin_proxy' && capability !== 'managed_external_proxy') {\n throw anypickError(\n `${displayRef(route.source)} cannot serve ${client} through Proxy Hub.`,\n 'UNSUPPORTED_TRANSPORT',\n { exitCode: ExitCode.CAPABILITY_CONFLICT },\n );\n }\n }\n }\n\n private async adapterForSource(source: ProxyHubSourceRef) {\n const provider = this.deps.accountRegistry.get(source.provider);\n return source.kind === 'account'\n ? this.adapterForAccount(source.provider, source.name, provider)\n : (provider.poolSourceAdapter?.() ?? poolAdapterFor(source.provider, provider));\n }\n\n private async adapterForAccount(\n providerId: string,\n accountName: string,\n provider: Parameters<typeof accountAdapterFor>[0],\n ) {\n const account = await this.deps.accounts.get(providerId, accountName);\n if (!account) {\n throw anypickError(\n `Account ${providerId}/${accountName} was not found.`,\n 'ACCOUNT_NOT_FOUND',\n {\n exitCode: ExitCode.NOT_FOUND,\n },\n );\n }\n return accountAdapterFor(provider, account);\n }\n}\n\n/** Live hub identity from /health — used to re-attach after a lost pid file. */\nasync function probeProxyHubHealth(\n endpoint: string,\n hubName: string,\n): Promise<{ instanceId: string } | null> {\n try {\n const res = await fetch(`${endpoint.replace(/\\/$/u, '')}/health`, {\n method: 'GET',\n signal: AbortSignal.timeout(800),\n headers: { accept: 'application/json' },\n });\n if (!res.ok) {\n return null;\n }\n const body = (await res.json()) as {\n ok?: unknown;\n service?: unknown;\n hub?: unknown;\n instanceId?: unknown;\n };\n if (\n body.ok === true &&\n body.service === 'anypick-proxy-hub' &&\n body.hub === hubName &&\n typeof body.instanceId === 'string' &&\n body.instanceId.length > 0\n ) {\n return { instanceId: body.instanceId };\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/** Count user decisions, not raw model rows, for compact status surfaces. */\nexport function proxyHubIssueCount(\n preview: Pick<ProxyHubPreview, 'conflicts' | 'sourceChoices'>,\n): number {\n const modelOverlapGroups = new Set(\n preview.conflicts.map((conflict) =>\n conflict.candidates\n .map(serializeRef)\n .toSorted((left, right) => left.localeCompare(right))\n .join('\\u0000'),\n ),\n );\n return modelOverlapGroups.size + preview.sourceChoices.length;\n}\n\nfunction dedupeSources(sources: readonly ProxyHubSource[]): ProxyHubSource[] {\n const byRef = new Map<string, ProxyHubSource>();\n for (const source of sources) {\n byRef.set(serializeRef(source.ref), { ref: source.ref, enabled: source.enabled });\n }\n return [...byRef.values()].toSorted((left, right) =>\n serializeRef(left.ref).localeCompare(serializeRef(right.ref)),\n );\n}\n\nfunction hubScopes(\n name: string,\n entries: readonly (ProxyHubSource | { source: ProxyHubSourceRef })[],\n): string[] {\n return [\n `proxy/hub/${name}`,\n ...entries.map((entry) =>\n providerScope('ref' in entry ? entry.ref.provider : entry.source.provider),\n ),\n ];\n}\n\nfunction validOwners(\n owners: readonly ProxyHubModelOwner[],\n sources: readonly ProxyHubSource[],\n): ProxyHubModelOwner[] {\n const enabled = new Set(\n sources.filter((source) => source.enabled).map((source) => serializeRef(source.ref)),\n );\n const byModel = new Map<string, ProxyHubModelOwner>();\n for (const owner of owners) {\n const model = owner.model.trim();\n if (model && enabled.has(serializeRef(owner.source))) {\n byModel.set(model, { model, source: owner.source });\n }\n }\n return [...byModel.values()].toSorted((left, right) => left.model.localeCompare(right.model));\n}\n\nfunction modelCandidates(preview: ProxyHubPreview, model: string): ProxyHubSourceRef[] {\n const sources = new Map<string, ProxyHubSourceRef>();\n for (const catalog of preview.catalogs) {\n if (catalog.models.includes(model)) {\n sources.set(serializeRef(catalog.source), catalog.source);\n }\n }\n return [...sources.values()];\n}\n\nfunction invalidModelOwner(models: readonly string[], source: ProxyHubSourceRef, reason: string) {\n const description = models.length === 1 ? models[0] : `${models.length} selected models`;\n return anypickError(\n `Cannot assign ${description} to ${displayRef(source)}: it ${reason}. Refresh conflicts and try again.`,\n 'STATE_CONFLICT',\n { exitCode: ExitCode.CAPABILITY_CONFLICT },\n );\n}\n\nfunction modelsFromCatalog(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value\n .map((entry) =>\n typeof entry === 'string'\n ? entry\n : entry && typeof entry === 'object'\n ? (entry as { id?: unknown }).id\n : undefined,\n )\n .filter((id): id is string => typeof id === 'string' && id.trim().length > 0);\n }\n if (!value || typeof value !== 'object') {\n return [];\n }\n const record = value as { data?: unknown; models?: unknown };\n // OpenAI-shaped `data` first; some vendors emit `models` instead.\n const list = Array.isArray(record.data)\n ? record.data\n : Array.isArray(record.models)\n ? record.models\n : null;\n if (!list) {\n return [];\n }\n return list\n .map((entry) =>\n typeof entry === 'string'\n ? entry\n : entry && typeof entry === 'object'\n ? (entry as { id?: unknown }).id\n : undefined,\n )\n .filter((id): id is string => typeof id === 'string' && id.trim().length > 0);\n}\n\nfunction isRunning(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n"],"mappings":"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"}