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,128 @@
1
+ import { timingSafeEqual } from "node:crypto";
2
+ //#region src/providers/proxy-shared.ts
3
+ /**
4
+ * Shared plumbing for the built-in compatibility proxies (grok / gemini /
5
+ * opencode). These helpers are intentionally protocol-agnostic: each proxy
6
+ * server still owns its *request-translation* and *header-forwarding* rules
7
+ * (they differ per upstream protocol), but the low-level HTTP mechanics —
8
+ * body buffering and the hop-by-hop header set — are identical and live here so
9
+ * they are not copied across three servers.
10
+ */
11
+ /** Headers that must never be forwarded to/from an upstream (RFC 7230 §6.1). */
12
+ var HOP_BY_HOP = /* @__PURE__ */ new Set([
13
+ "connection",
14
+ "keep-alive",
15
+ "proxy-authenticate",
16
+ "proxy-authorization",
17
+ "te",
18
+ "trailers",
19
+ "transfer-encoding",
20
+ "upgrade",
21
+ "host",
22
+ "content-length"
23
+ ]);
24
+ /**
25
+ * Codex model-provider `base_url` is a prefix and calls `/responses`, while
26
+ * OpenAI SDK base URLs commonly call `/v1/responses`. Accept both spellings at
27
+ * the local boundary and keep one canonical `/v1/*` path internally.
28
+ */
29
+ function normalizeLocalApiUrl(url) {
30
+ const queryIndex = url.indexOf("?");
31
+ const path = queryIndex >= 0 ? url.slice(0, queryIndex) : url;
32
+ const query = queryIndex >= 0 ? url.slice(queryIndex) : "";
33
+ return path === "/responses" || path.startsWith("/responses/") || path === "/chat/completions" || path === "/models" || path.startsWith("/models/") || path === "/messages" || path.startsWith("/messages/") ? `/v1${path}${query}` : url;
34
+ }
35
+ /**
36
+ * Buffer a request body into a single Buffer. Enforces a 32 MiB cap so a
37
+ * malicious or runaway client cannot exhaust memory in a long-lived proxy.
38
+ */
39
+ function readBody(req, maxBytes = 32 * 1024 * 1024) {
40
+ return new Promise((resolve, reject) => {
41
+ const chunks = [];
42
+ let size = 0;
43
+ req.on("data", (c) => {
44
+ size += c.length;
45
+ if (size > maxBytes) {
46
+ reject(/* @__PURE__ */ new Error("Request body too large"));
47
+ req.destroy();
48
+ return;
49
+ }
50
+ chunks.push(Buffer.isBuffer(c) ? c : Buffer.from(c));
51
+ });
52
+ req.on("end", () => resolve(Buffer.concat(chunks)));
53
+ req.on("error", reject);
54
+ });
55
+ }
56
+ /**
57
+ * Install one idempotent graceful-shutdown path for a detached HTTP proxy.
58
+ * New requests stop immediately, idle keep-alive sockets are closed, and only
59
+ * genuinely stuck connections are destroyed after the grace period.
60
+ */
61
+ function installProxyShutdown(server, graceMs = 2500) {
62
+ let shuttingDown = false;
63
+ const shutdown = () => {
64
+ if (shuttingDown) return;
65
+ shuttingDown = true;
66
+ server.closeIdleConnections?.();
67
+ server.close(() => {
68
+ process.exitCode = 0;
69
+ });
70
+ setTimeout(() => {
71
+ server.closeAllConnections?.();
72
+ process.exit(0);
73
+ }, graceMs).unref();
74
+ };
75
+ process.once("SIGINT", shutdown);
76
+ process.once("SIGTERM", shutdown);
77
+ }
78
+ /**
79
+ * Constant-time compare of two secrets. Lengths are not equalized, but the
80
+ * comparison short-circuits only after the shorter buffer is exhausted, so a
81
+ * fixed expected token removes most timing signal. Rejects empty expected.
82
+ */
83
+ function safeEqual(a, b) {
84
+ const ab = Buffer.from(a);
85
+ const bb = Buffer.from(b);
86
+ if (ab.length !== bb.length) {
87
+ timingSafeEqual(ab, ab);
88
+ return false;
89
+ }
90
+ return timingSafeEqual(ab, bb);
91
+ }
92
+ /**
93
+ * Require the per-instance proxy secret on a credentialed route (PROXY-01).
94
+ *
95
+ * Accepts the secret via the client protocols' normal credential headers
96
+ * (`Authorization: Bearer <token>` or `x-api-key: <token>`), normalizes it to
97
+ * local authentication, and compares in constant time. On any mismatch the
98
+ * response is a `401` and the caller must NOT contact upstream. When
99
+ * `expectedToken` is empty/unset the proxy is misconfigured — fail closed.
100
+ *
101
+ * Returns `true` when the request is authenticated (caller may proceed).
102
+ */
103
+ function requireProxyAuth(req, res, expectedToken) {
104
+ if (!expectedToken) {
105
+ res.writeHead(401, { "content-type": "application/json; charset=utf-8" });
106
+ res.end(JSON.stringify({ error: {
107
+ type: "unauthorized",
108
+ message: "Proxy authentication is not configured."
109
+ } }));
110
+ return false;
111
+ }
112
+ const auth = req.headers["authorization"];
113
+ const xApiKey = req.headers["x-api-key"];
114
+ const provided = (typeof auth === "string" && auth.startsWith("Bearer ") ? auth.slice(7).trim() : typeof auth === "string" ? auth.trim() : "") || (typeof xApiKey === "string" ? xApiKey.trim() : "");
115
+ if (!provided || !safeEqual(provided, expectedToken)) {
116
+ res.writeHead(401, { "content-type": "application/json; charset=utf-8" });
117
+ res.end(JSON.stringify({ error: {
118
+ type: "unauthorized",
119
+ message: "Missing or invalid proxy token."
120
+ } }));
121
+ return false;
122
+ }
123
+ return true;
124
+ }
125
+ //#endregion
126
+ export { HOP_BY_HOP, installProxyShutdown, normalizeLocalApiUrl, readBody, requireProxyAuth };
127
+
128
+ //# sourceMappingURL=proxy-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-shared.js","names":[],"sources":["../../src/providers/proxy-shared.ts"],"sourcesContent":["/**\n * Shared plumbing for the built-in compatibility proxies (grok / gemini /\n * opencode). These helpers are intentionally protocol-agnostic: each proxy\n * server still owns its *request-translation* and *header-forwarding* rules\n * (they differ per upstream protocol), but the low-level HTTP mechanics —\n * body buffering and the hop-by-hop header set — are identical and live here so\n * they are not copied across three servers.\n */\n\nimport { timingSafeEqual } from 'node:crypto';\nimport type { IncomingMessage, Server, ServerResponse } from 'node:http';\n\n/** Headers that must never be forwarded to/from an upstream (RFC 7230 §6.1). */\nexport const HOP_BY_HOP = new Set([\n 'connection',\n 'keep-alive',\n 'proxy-authenticate',\n 'proxy-authorization',\n 'te',\n 'trailers',\n 'transfer-encoding',\n 'upgrade',\n 'host',\n 'content-length',\n]);\n\n/** True when `name` is a hop-by-hop header (case-insensitive). */\nexport function isHopByHop(name: string): boolean {\n return HOP_BY_HOP.has(name.toLowerCase());\n}\n\n/**\n * Codex model-provider `base_url` is a prefix and calls `/responses`, while\n * OpenAI SDK base URLs commonly call `/v1/responses`. Accept both spellings at\n * the local boundary and keep one canonical `/v1/*` path internally.\n */\nexport function normalizeLocalApiUrl(url: string): string {\n const queryIndex = url.indexOf('?');\n const path = queryIndex >= 0 ? url.slice(0, queryIndex) : url;\n const query = queryIndex >= 0 ? url.slice(queryIndex) : '';\n const rootApiPath =\n path === '/responses' ||\n path.startsWith('/responses/') ||\n path === '/chat/completions' ||\n path === '/models' ||\n path.startsWith('/models/') ||\n path === '/messages' ||\n path.startsWith('/messages/');\n return rootApiPath ? `/v1${path}${query}` : url;\n}\n\n/**\n * Buffer a request body into a single Buffer. Enforces a 32 MiB cap so a\n * malicious or runaway client cannot exhaust memory in a long-lived proxy.\n */\nexport function readBody(req: IncomingMessage, maxBytes = 32 * 1024 * 1024): Promise<Buffer> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let size = 0;\n req.on('data', (c: Buffer) => {\n size += c.length;\n if (size > maxBytes) {\n reject(new Error('Request body too large'));\n req.destroy();\n return;\n }\n chunks.push(Buffer.isBuffer(c) ? c : Buffer.from(c));\n });\n req.on('end', () => resolve(Buffer.concat(chunks)));\n req.on('error', reject);\n });\n}\n\n/**\n * Install one idempotent graceful-shutdown path for a detached HTTP proxy.\n * New requests stop immediately, idle keep-alive sockets are closed, and only\n * genuinely stuck connections are destroyed after the grace period.\n */\nexport function installProxyShutdown(server: Server, graceMs = 2500): void {\n let shuttingDown = false;\n const shutdown = () => {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n server.closeIdleConnections?.();\n server.close(() => {\n process.exitCode = 0;\n });\n const force = setTimeout(() => {\n server.closeAllConnections?.();\n process.exit(0);\n }, graceMs);\n force.unref();\n };\n process.once('SIGINT', shutdown);\n process.once('SIGTERM', shutdown);\n}\n\n/**\n * Constant-time compare of two secrets. Lengths are not equalized, but the\n * comparison short-circuits only after the shorter buffer is exhausted, so a\n * fixed expected token removes most timing signal. Rejects empty expected.\n */\nfunction safeEqual(a: string, b: string): boolean {\n const ab = Buffer.from(a);\n const bb = Buffer.from(b);\n if (ab.length !== bb.length) {\n // Still run a compare so timing does not reveal length mismatch early.\n timingSafeEqual(ab, ab);\n return false;\n }\n return timingSafeEqual(ab, bb);\n}\n\n/**\n * Require the per-instance proxy secret on a credentialed route (PROXY-01).\n *\n * Accepts the secret via the client protocols' normal credential headers\n * (`Authorization: Bearer <token>` or `x-api-key: <token>`), normalizes it to\n * local authentication, and compares in constant time. On any mismatch the\n * response is a `401` and the caller must NOT contact upstream. When\n * `expectedToken` is empty/unset the proxy is misconfigured — fail closed.\n *\n * Returns `true` when the request is authenticated (caller may proceed).\n */\nexport function requireProxyAuth(\n req: IncomingMessage,\n res: ServerResponse,\n expectedToken?: string,\n): boolean {\n if (!expectedToken) {\n res.writeHead(401, { 'content-type': 'application/json; charset=utf-8' });\n res.end(\n JSON.stringify({\n error: { type: 'unauthorized', message: 'Proxy authentication is not configured.' },\n }),\n );\n return false;\n }\n const auth = req.headers['authorization'];\n const xApiKey = req.headers['x-api-key'];\n const provided =\n (typeof auth === 'string' && auth.startsWith('Bearer ')\n ? auth.slice('Bearer '.length).trim()\n : typeof auth === 'string'\n ? auth.trim()\n : '') || (typeof xApiKey === 'string' ? xApiKey.trim() : '');\n if (!provided || !safeEqual(provided, expectedToken)) {\n res.writeHead(401, { 'content-type': 'application/json; charset=utf-8' });\n res.end(\n JSON.stringify({\n error: { type: 'unauthorized', message: 'Missing or invalid proxy token.' },\n }),\n );\n return false;\n }\n return true;\n}\n"],"mappings":";;;;;;;;;;;AAaA,IAAa,6BAAa,IAAI,IAAI;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;;;;;;AAYD,SAAgB,qBAAqB,KAAqB;CACxD,MAAM,aAAa,IAAI,QAAQ,GAAG;CAClC,MAAM,OAAO,cAAc,IAAI,IAAI,MAAM,GAAG,UAAU,IAAI;CAC1D,MAAM,QAAQ,cAAc,IAAI,IAAI,MAAM,UAAU,IAAI;CASxD,OAPE,SAAS,gBACT,KAAK,WAAW,aAAa,KAC7B,SAAS,uBACT,SAAS,aACT,KAAK,WAAW,UAAU,KAC1B,SAAS,eACT,KAAK,WAAW,YAAY,IACT,MAAM,OAAO,UAAU;AAC9C;;;;;AAMA,SAAgB,SAAS,KAAsB,WAAW,KAAK,OAAO,MAAuB;CAC3F,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,SAAmB,CAAC;EAC1B,IAAI,OAAO;EACX,IAAI,GAAG,SAAS,MAAc;GAC5B,QAAQ,EAAE;GACV,IAAI,OAAO,UAAU;IACnB,uBAAO,IAAI,MAAM,wBAAwB,CAAC;IAC1C,IAAI,QAAQ;IACZ;GACF;GACA,OAAO,KAAK,OAAO,SAAS,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,CAAC;EACrD,CAAC;EACD,IAAI,GAAG,aAAa,QAAQ,OAAO,OAAO,MAAM,CAAC,CAAC;EAClD,IAAI,GAAG,SAAS,MAAM;CACxB,CAAC;AACH;;;;;;AAOA,SAAgB,qBAAqB,QAAgB,UAAU,MAAY;CACzE,IAAI,eAAe;CACnB,MAAM,iBAAiB;EACrB,IAAI,cACF;EAEF,eAAe;EACf,OAAO,uBAAuB;EAC9B,OAAO,YAAY;GACjB,QAAQ,WAAW;EACrB,CAAC;EAKD,iBAJ+B;GAC7B,OAAO,sBAAsB;GAC7B,QAAQ,KAAK,CAAC;EAChB,GAAG,OACH,CAAA,CAAM,MAAM;CACd;CACA,QAAQ,KAAK,UAAU,QAAQ;CAC/B,QAAQ,KAAK,WAAW,QAAQ;AAClC;;;;;;AAOA,SAAS,UAAU,GAAW,GAAoB;CAChD,MAAM,KAAK,OAAO,KAAK,CAAC;CACxB,MAAM,KAAK,OAAO,KAAK,CAAC;CACxB,IAAI,GAAG,WAAW,GAAG,QAAQ;EAE3B,gBAAgB,IAAI,EAAE;EACtB,OAAO;CACT;CACA,OAAO,gBAAgB,IAAI,EAAE;AAC/B;;;;;;;;;;;;AAaA,SAAgB,iBACd,KACA,KACA,eACS;CACT,IAAI,CAAC,eAAe;EAClB,IAAI,UAAU,KAAK,EAAE,gBAAgB,kCAAkC,CAAC;EACxE,IAAI,IACF,KAAK,UAAU,EACb,OAAO;GAAE,MAAM;GAAgB,SAAS;EAA0C,EACpF,CAAC,CACH;EACA,OAAO;CACT;CACA,MAAM,OAAO,IAAI,QAAQ;CACzB,MAAM,UAAU,IAAI,QAAQ;CAC5B,MAAM,YACH,OAAO,SAAS,YAAY,KAAK,WAAW,SAAS,IAClD,KAAK,MAAM,CAAgB,CAAC,CAAC,KAAK,IAClC,OAAO,SAAS,WACd,KAAK,KAAK,IACV,QAAQ,OAAO,YAAY,WAAW,QAAQ,KAAK,IAAI;CAC/D,IAAI,CAAC,YAAY,CAAC,UAAU,UAAU,aAAa,GAAG;EACpD,IAAI,UAAU,KAAK,EAAE,gBAAgB,kCAAkC,CAAC;EACxE,IAAI,IACF,KAAK,UAAU,EACb,OAAO;GAAE,MAAM;GAAgB,SAAS;EAAkC,EAC5E,CAAC,CACH;EACA,OAAO;CACT;CACA,OAAO;AACT"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Runtime-only policy passed to a compatibility proxy. This is intentionally
3
+ * not an account setting: a pool can be stopped, restarted, or deleted without
4
+ * changing a user's native login.
5
+ */
6
+ export interface QuotaGuardOptions {
7
+ enabled: boolean;
8
+ cooldownMs: number;
9
+ /** Saved-account labels in the same order as the proxy credential ring. */
10
+ accountNames?: string[];
11
+ /** Owner-only, secret-free state below the pool runtime directory. */
12
+ statePath?: string;
13
+ providerId?: string;
14
+ }
15
+ export interface QuotaGuardEvent {
16
+ id: string;
17
+ createdAt: string;
18
+ providerId?: string;
19
+ from: string;
20
+ to?: string;
21
+ cooldownUntil: number;
22
+ }
23
+ export interface QuotaGuardState {
24
+ version: 1;
25
+ /** Last account that successfully took over. */
26
+ activeAccount?: string;
27
+ cooling: Record<string, number>;
28
+ events: QuotaGuardEvent[];
29
+ }
30
+ export declare function readQuotaGuardState(path: string | undefined): Promise<QuotaGuardState>;
31
+ /**
32
+ * Keeps account cooldowns across proxy restarts. It only accepts saved account
33
+ * names supplied by the pool and never writes credential material.
34
+ */
35
+ export declare class QuotaGuard {
36
+ private readonly options;
37
+ private state;
38
+ private write;
39
+ constructor(options: QuotaGuardOptions);
40
+ get enabled(): boolean;
41
+ ordered<T extends {
42
+ accountName?: string;
43
+ }>(candidates: readonly T[]): Promise<T[]>;
44
+ exhausted(from: string | undefined, to: string | undefined, retryAfterMs?: number): Promise<void>;
45
+ activate(account: string | undefined): Promise<void>;
46
+ private load;
47
+ private mutate;
48
+ }
49
+ //# sourceMappingURL=quota-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-guard.d.ts","sourceRoot":"","sources":["../../src/providers/quota-guard.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAID,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,CAW5F;AAED;;;GAGG;AACH,qBAAa,UAAU;IAIT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,KAAK,CAAqB;IAElC,YAA6B,OAAO,EAAE,iBAAiB,EAAI;IAE3D,IAAI,OAAO,IAAI,OAAO,CAErB;IAEK,OAAO,CAAC,CAAC,SAAS;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAkBxF;IAEK,SAAS,CACb,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAqBf;IAEK,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAUzD;YAEa,IAAI;YAWJ,MAAM;CASrB"}
@@ -0,0 +1,107 @@
1
+ import { pathExists, readJsonFile, writeJsonFile } from "../utils/fs.js";
2
+ //#region src/providers/quota-guard.ts
3
+ var MAX_EVENTS = 100;
4
+ async function readQuotaGuardState(path) {
5
+ if (!path || !await pathExists(path)) return emptyQuotaGuardState();
6
+ try {
7
+ return normalizeQuotaGuardState(await readJsonFile(path));
8
+ } catch {
9
+ return emptyQuotaGuardState();
10
+ }
11
+ }
12
+ /**
13
+ * Keeps account cooldowns across proxy restarts. It only accepts saved account
14
+ * names supplied by the pool and never writes credential material.
15
+ */
16
+ var QuotaGuard = class {
17
+ options;
18
+ state;
19
+ write = Promise.resolve();
20
+ constructor(options) {
21
+ this.options = options;
22
+ }
23
+ get enabled() {
24
+ return this.options.enabled;
25
+ }
26
+ async ordered(candidates) {
27
+ if (!this.enabled || candidates.length < 2) return [...candidates];
28
+ const state = await this.load();
29
+ const now = Date.now();
30
+ const eligible = candidates.filter((candidate) => {
31
+ const account = candidate.accountName;
32
+ return !account || (state.cooling[account] ?? 0) <= now;
33
+ });
34
+ if (eligible.length === 0) return [];
35
+ if (!state.activeAccount) return eligible;
36
+ const active = eligible.find((candidate) => candidate.accountName === state.activeAccount);
37
+ return active ? [active, ...eligible.filter((candidate) => candidate !== active)] : eligible;
38
+ }
39
+ async exhausted(from, to, retryAfterMs) {
40
+ if (!this.enabled || !from) return;
41
+ const cooldownMs = Math.max(1e3, retryAfterMs ?? this.options.cooldownMs);
42
+ const cooldownUntil = Date.now() + cooldownMs;
43
+ await this.mutate((state) => {
44
+ state.cooling[from] = cooldownUntil;
45
+ if (to) state.activeAccount = to;
46
+ state.events.unshift({
47
+ id: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`,
48
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
49
+ providerId: this.options.providerId,
50
+ from,
51
+ to,
52
+ cooldownUntil
53
+ });
54
+ state.events = state.events.slice(0, MAX_EVENTS);
55
+ });
56
+ }
57
+ async activate(account) {
58
+ if (!this.enabled || !account) return;
59
+ if ((await this.load()).activeAccount === account) return;
60
+ await this.mutate((state) => {
61
+ state.activeAccount = account;
62
+ });
63
+ }
64
+ async load() {
65
+ if (!this.state) {
66
+ this.state = await readQuotaGuardState(this.options.statePath);
67
+ const now = Date.now();
68
+ this.state.cooling = Object.fromEntries(Object.entries(this.state.cooling).filter(([, until]) => until > now));
69
+ }
70
+ return this.state;
71
+ }
72
+ async mutate(change) {
73
+ await (this.write = this.write.then(async () => {
74
+ const state = await this.load();
75
+ change(state);
76
+ if (this.options.statePath) await writeJsonFile(this.options.statePath, state);
77
+ }));
78
+ }
79
+ };
80
+ function emptyQuotaGuardState() {
81
+ return {
82
+ version: 1,
83
+ cooling: {},
84
+ events: []
85
+ };
86
+ }
87
+ function normalizeQuotaGuardState(value) {
88
+ if (!value || typeof value !== "object" || Array.isArray(value)) return emptyQuotaGuardState();
89
+ const record = value;
90
+ const cooling = record.cooling && typeof record.cooling === "object" && !Array.isArray(record.cooling) ? Object.fromEntries(Object.entries(record.cooling).filter(([account, until]) => account.length <= 128 && typeof until === "number" && until > 0)) : {};
91
+ const events = Array.isArray(record.events) ? record.events.filter(isQuotaGuardEvent).slice(0, MAX_EVENTS) : [];
92
+ return {
93
+ version: 1,
94
+ activeAccount: typeof record.activeAccount === "string" ? record.activeAccount : void 0,
95
+ cooling,
96
+ events
97
+ };
98
+ }
99
+ function isQuotaGuardEvent(value) {
100
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
101
+ const event = value;
102
+ return typeof event.id === "string" && typeof event.createdAt === "string" && typeof event.from === "string" && (event.to === void 0 || typeof event.to === "string") && typeof event.cooldownUntil === "number";
103
+ }
104
+ //#endregion
105
+ export { QuotaGuard, readQuotaGuardState };
106
+
107
+ //# sourceMappingURL=quota-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-guard.js","names":[],"sources":["../../src/providers/quota-guard.ts"],"sourcesContent":["import { pathExists, readJsonFile, writeJsonFile } from '../utils/fs';\n\n/**\n * Runtime-only policy passed to a compatibility proxy. This is intentionally\n * not an account setting: a pool can be stopped, restarted, or deleted without\n * changing a user's native login.\n */\nexport interface QuotaGuardOptions {\n enabled: boolean;\n cooldownMs: number;\n /** Saved-account labels in the same order as the proxy credential ring. */\n accountNames?: string[];\n /** Owner-only, secret-free state below the pool runtime directory. */\n statePath?: string;\n providerId?: string;\n}\n\nexport interface QuotaGuardEvent {\n id: string;\n createdAt: string;\n providerId?: string;\n from: string;\n to?: string;\n cooldownUntil: number;\n}\n\nexport interface QuotaGuardState {\n version: 1;\n /** Last account that successfully took over. */\n activeAccount?: string;\n cooling: Record<string, number>;\n events: QuotaGuardEvent[];\n}\n\nconst MAX_EVENTS = 100;\n\nexport async function readQuotaGuardState(path: string | undefined): Promise<QuotaGuardState> {\n if (!path || !(await pathExists(path))) {\n return emptyQuotaGuardState();\n }\n try {\n const value = await readJsonFile<unknown>(path);\n return normalizeQuotaGuardState(value);\n } catch {\n // A runtime audit file must never prevent a proxy from serving a request.\n return emptyQuotaGuardState();\n }\n}\n\n/**\n * Keeps account cooldowns across proxy restarts. It only accepts saved account\n * names supplied by the pool and never writes credential material.\n */\nexport class QuotaGuard {\n private state: QuotaGuardState | undefined;\n private write = Promise.resolve();\n\n constructor(private readonly options: QuotaGuardOptions) {}\n\n get enabled(): boolean {\n return this.options.enabled;\n }\n\n async ordered<T extends { accountName?: string }>(candidates: readonly T[]): Promise<T[]> {\n if (!this.enabled || candidates.length < 2) {\n return [...candidates];\n }\n const state = await this.load();\n const now = Date.now();\n const eligible = candidates.filter((candidate) => {\n const account = candidate.accountName;\n return !account || (state.cooling[account] ?? 0) <= now;\n });\n if (eligible.length === 0) {\n return [];\n }\n if (!state.activeAccount) {\n return eligible;\n }\n const active = eligible.find((candidate) => candidate.accountName === state.activeAccount);\n return active ? [active, ...eligible.filter((candidate) => candidate !== active)] : eligible;\n }\n\n async exhausted(\n from: string | undefined,\n to: string | undefined,\n retryAfterMs?: number,\n ): Promise<void> {\n if (!this.enabled || !from) {\n return;\n }\n const cooldownMs = Math.max(1_000, retryAfterMs ?? this.options.cooldownMs);\n const cooldownUntil = Date.now() + cooldownMs;\n await this.mutate((state) => {\n state.cooling[from] = cooldownUntil;\n if (to) {\n state.activeAccount = to;\n }\n state.events.unshift({\n id: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`,\n createdAt: new Date().toISOString(),\n providerId: this.options.providerId,\n from,\n to,\n cooldownUntil,\n });\n state.events = state.events.slice(0, MAX_EVENTS);\n });\n }\n\n async activate(account: string | undefined): Promise<void> {\n if (!this.enabled || !account) {\n return;\n }\n if ((await this.load()).activeAccount === account) {\n return;\n }\n await this.mutate((state) => {\n state.activeAccount = account;\n });\n }\n\n private async load(): Promise<QuotaGuardState> {\n if (!this.state) {\n this.state = await readQuotaGuardState(this.options.statePath);\n const now = Date.now();\n this.state.cooling = Object.fromEntries(\n Object.entries(this.state.cooling).filter(([, until]) => until > now),\n );\n }\n return this.state;\n }\n\n private async mutate(change: (state: QuotaGuardState) => void): Promise<void> {\n await (this.write = this.write.then(async () => {\n const state = await this.load();\n change(state);\n if (this.options.statePath) {\n await writeJsonFile(this.options.statePath, state);\n }\n }));\n }\n}\n\nfunction emptyQuotaGuardState(): QuotaGuardState {\n return { version: 1, cooling: {}, events: [] };\n}\n\nfunction normalizeQuotaGuardState(value: unknown): QuotaGuardState {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return emptyQuotaGuardState();\n }\n const record = value as Record<string, unknown>;\n const cooling =\n record.cooling && typeof record.cooling === 'object' && !Array.isArray(record.cooling)\n ? Object.fromEntries(\n Object.entries(record.cooling as Record<string, unknown>).filter(\n ([account, until]) => account.length <= 128 && typeof until === 'number' && until > 0,\n ) as Array<[string, number]>,\n )\n : {};\n const events = Array.isArray(record.events)\n ? record.events.filter(isQuotaGuardEvent).slice(0, MAX_EVENTS)\n : [];\n return {\n version: 1,\n activeAccount: typeof record.activeAccount === 'string' ? record.activeAccount : undefined,\n cooling,\n events,\n };\n}\n\nfunction isQuotaGuardEvent(value: unknown): value is QuotaGuardEvent {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const event = value as Record<string, unknown>;\n return (\n typeof event.id === 'string' &&\n typeof event.createdAt === 'string' &&\n typeof event.from === 'string' &&\n (event.to === undefined || typeof event.to === 'string') &&\n typeof event.cooldownUntil === 'number'\n );\n}\n"],"mappings":";;AAkCA,IAAM,aAAa;AAEnB,eAAsB,oBAAoB,MAAoD;CAC5F,IAAI,CAAC,QAAQ,CAAE,MAAM,WAAW,IAAI,GAClC,OAAO,qBAAqB;CAE9B,IAAI;EAEF,OAAO,yBAAyB,MADZ,aAAsB,IAAI,CACT;CACvC,QAAQ;EAEN,OAAO,qBAAqB;CAC9B;AACF;;;;;AAMA,IAAa,aAAb,MAAwB;CAIO;CAH7B;CACA,QAAgB,QAAQ,QAAQ;CAEhC,YAAY,SAA6C;EAA5B,KAAA,UAAA;CAA6B;CAE1D,IAAI,UAAmB;EACrB,OAAO,KAAK,QAAQ;CACtB;CAEA,MAAM,QAA4C,YAAwC;EACxF,IAAI,CAAC,KAAK,WAAW,WAAW,SAAS,GACvC,OAAO,CAAC,GAAG,UAAU;EAEvB,MAAM,QAAQ,MAAM,KAAK,KAAK;EAC9B,MAAM,MAAM,KAAK,IAAI;EACrB,MAAM,WAAW,WAAW,QAAQ,cAAc;GAChD,MAAM,UAAU,UAAU;GAC1B,OAAO,CAAC,YAAY,MAAM,QAAQ,YAAY,MAAM;EACtD,CAAC;EACD,IAAI,SAAS,WAAW,GACtB,OAAO,CAAC;EAEV,IAAI,CAAC,MAAM,eACT,OAAO;EAET,MAAM,SAAS,SAAS,MAAM,cAAc,UAAU,gBAAgB,MAAM,aAAa;EACzF,OAAO,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,cAAc,cAAc,MAAM,CAAC,IAAI;CACtF;CAEA,MAAM,UACJ,MACA,IACA,cACe;EACf,IAAI,CAAC,KAAK,WAAW,CAAC,MACpB;EAEF,MAAM,aAAa,KAAK,IAAI,KAAO,gBAAgB,KAAK,QAAQ,UAAU;EAC1E,MAAM,gBAAgB,KAAK,IAAI,IAAI;EACnC,MAAM,KAAK,QAAQ,UAAU;GAC3B,MAAM,QAAQ,QAAQ;GACtB,IAAI,IACF,MAAM,gBAAgB;GAExB,MAAM,OAAO,QAAQ;IACnB,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;IACvE,4BAAW,IAAI,KAAK,EAAA,CAAE,YAAY;IAClC,YAAY,KAAK,QAAQ;IACzB;IACA;IACA;GACF,CAAC;GACD,MAAM,SAAS,MAAM,OAAO,MAAM,GAAG,UAAU;EACjD,CAAC;CACH;CAEA,MAAM,SAAS,SAA4C;EACzD,IAAI,CAAC,KAAK,WAAW,CAAC,SACpB;EAEF,KAAK,MAAM,KAAK,KAAK,EAAA,CAAG,kBAAkB,SACxC;EAEF,MAAM,KAAK,QAAQ,UAAU;GAC3B,MAAM,gBAAgB;EACxB,CAAC;CACH;CAEA,MAAc,OAAiC;EAC7C,IAAI,CAAC,KAAK,OAAO;GACf,KAAK,QAAQ,MAAM,oBAAoB,KAAK,QAAQ,SAAS;GAC7D,MAAM,MAAM,KAAK,IAAI;GACrB,KAAK,MAAM,UAAU,OAAO,YAC1B,OAAO,QAAQ,KAAK,MAAM,OAAO,CAAC,CAAC,QAAQ,GAAG,WAAW,QAAQ,GAAG,CACtE;EACF;EACA,OAAO,KAAK;CACd;CAEA,MAAc,OAAO,QAAyD;EAC5E,OAAO,KAAK,QAAQ,KAAK,MAAM,KAAK,YAAY;GAC9C,MAAM,QAAQ,MAAM,KAAK,KAAK;GAC9B,OAAO,KAAK;GACZ,IAAI,KAAK,QAAQ,WACf,MAAM,cAAc,KAAK,QAAQ,WAAW,KAAK;EAErD,CAAC;CACH;AACF;AAEA,SAAS,uBAAwC;CAC/C,OAAO;EAAE,SAAS;EAAG,SAAS,CAAC;EAAG,QAAQ,CAAC;CAAE;AAC/C;AAEA,SAAS,yBAAyB,OAAiC;CACjE,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAC5D,OAAO,qBAAqB;CAE9B,MAAM,SAAS;CACf,MAAM,UACJ,OAAO,WAAW,OAAO,OAAO,YAAY,YAAY,CAAC,MAAM,QAAQ,OAAO,OAAO,IACjF,OAAO,YACL,OAAO,QAAQ,OAAO,OAAkC,CAAC,CAAC,QACvD,CAAC,SAAS,WAAW,QAAQ,UAAU,OAAO,OAAO,UAAU,YAAY,QAAQ,CACtF,CACF,IACA,CAAC;CACP,MAAM,SAAS,MAAM,QAAQ,OAAO,MAAM,IACtC,OAAO,OAAO,OAAO,iBAAiB,CAAC,CAAC,MAAM,GAAG,UAAU,IAC3D,CAAC;CACL,OAAO;EACL,SAAS;EACT,eAAe,OAAO,OAAO,kBAAkB,WAAW,OAAO,gBAAgB,KAAA;EACjF;EACA;CACF;AACF;AAEA,SAAS,kBAAkB,OAA0C;CACnE,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAC5D,OAAO;CAET,MAAM,QAAQ;CACd,OACE,OAAO,MAAM,OAAO,YACpB,OAAO,MAAM,cAAc,YAC3B,OAAO,MAAM,SAAS,aACrB,MAAM,OAAO,KAAA,KAAa,OAAO,MAAM,OAAO,aAC/C,OAAO,MAAM,kBAAkB;AAEnC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Protocol-neutral reasoning controls shared by the compatibility proxies.
3
+ *
4
+ * The public APIs use different names for the same intent:
5
+ * OpenAI uses `reasoning_effort` / `reasoning.effort`, Anthropic uses
6
+ * `output_config.effort` plus `thinking`, and Gemini uses `thinkingConfig`.
7
+ * Keep extraction and the necessarily lossy level mapping in one place so a
8
+ * proxy translation never silently drops the caller's intent.
9
+ */
10
+ export type ReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max';
11
+ export interface ReasoningIntent {
12
+ effort?: ReasoningEffort;
13
+ /** Explicit thinking switch. Undefined means the client did not specify it. */
14
+ enabled?: boolean;
15
+ /** Exact Anthropic manual thinking budget, when supplied. */
16
+ budgetTokens?: number;
17
+ /** The client requested a visible reasoning/thinking summary. */
18
+ includeSummary?: boolean;
19
+ }
20
+ export declare function normalizeReasoningEffort(value: unknown): ReasoningEffort | undefined;
21
+ export declare function reasoningFromOpenAI(request: Record<string, unknown>): ReasoningIntent;
22
+ export declare function reasoningFromAnthropic(request: Record<string, unknown>): ReasoningIntent;
23
+ /** Convert Anthropic controls to the closest OpenAI Chat effort value. */
24
+ export declare function anthropicToOpenAIEffort(request: Record<string, unknown>): Exclude<ReasoningEffort, 'max'> | undefined;
25
+ /** Convert OpenAI's extra levels to an Anthropic API effort value. */
26
+ export declare function openAIToAnthropicEffort(effort: ReasoningEffort | undefined): 'low' | 'medium' | 'high' | 'xhigh' | 'max' | undefined;
27
+ //# sourceMappingURL=reasoning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning.d.ts","sourceRoot":"","sources":["../../src/providers/reasoning.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAE/F,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAiBpF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAarF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAuBxF;AAED,0EAA0E;AAC1E,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,SAAS,CAuB7C;AAED,sEAAsE;AACtE,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,eAAe,GAAG,SAAS,GAClC,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAQzD"}
@@ -0,0 +1,61 @@
1
+ //#region src/providers/reasoning.ts
2
+ function normalizeReasoningEffort(value) {
3
+ if (typeof value !== "string") return;
4
+ const normalized = value.trim().toLowerCase();
5
+ switch (normalized) {
6
+ case "none":
7
+ case "minimal":
8
+ case "low":
9
+ case "medium":
10
+ case "high":
11
+ case "xhigh":
12
+ case "max": return normalized;
13
+ default: return;
14
+ }
15
+ }
16
+ function reasoningFromOpenAI(request) {
17
+ const reasoning = isRecord(request.reasoning) ? request.reasoning : void 0;
18
+ const effort = normalizeReasoningEffort(request.reasoning_effort) ?? normalizeReasoningEffort(reasoning?.effort) ?? normalizeReasoningEffort(request.effort);
19
+ const summary = reasoning?.summary ?? reasoning?.generate_summary;
20
+ return {
21
+ ...effort ? {
22
+ effort,
23
+ enabled: effort !== "none"
24
+ } : {},
25
+ ...summary === "auto" || summary === "concise" || summary === "detailed" ? { includeSummary: true } : {}
26
+ };
27
+ }
28
+ function reasoningFromAnthropic(request) {
29
+ const thinking = isRecord(request.thinking) ? request.thinking : void 0;
30
+ const effort = normalizeReasoningEffort((isRecord(request.output_config) ? request.output_config : void 0)?.effort);
31
+ const thinkingType = typeof thinking?.type === "string" ? thinking.type.toLowerCase() : void 0;
32
+ const budget = typeof thinking?.budget_tokens === "number" && Number.isFinite(thinking.budget_tokens) && thinking.budget_tokens >= 0 ? Math.trunc(thinking.budget_tokens) : void 0;
33
+ const enabled = thinkingType === "disabled" ? false : thinkingType === "enabled" || thinkingType === "adaptive" ? true : void 0;
34
+ return {
35
+ ...effort ? { effort } : {},
36
+ ...enabled != null ? { enabled } : {},
37
+ ...budget != null ? { budgetTokens: budget } : {},
38
+ ...enabled === true && thinking?.display !== "omitted" ? { includeSummary: true } : {}
39
+ };
40
+ }
41
+ /** Convert Anthropic controls to the closest OpenAI Chat effort value. */
42
+ function anthropicToOpenAIEffort(request) {
43
+ const intent = reasoningFromAnthropic(request);
44
+ if (intent.enabled === false) return "none";
45
+ if (intent.effort) return intent.effort === "max" ? "xhigh" : intent.effort;
46
+ if (intent.budgetTokens != null) {
47
+ const maxTokens = typeof request.max_tokens === "number" && request.max_tokens > 0 ? request.max_tokens : void 0;
48
+ const ratio = maxTokens ? intent.budgetTokens / maxTokens : void 0;
49
+ if (intent.budgetTokens <= 1024 || ratio != null && ratio <= .25) return "low";
50
+ if (ratio != null && ratio <= .6) return "medium";
51
+ return "high";
52
+ }
53
+ return intent.enabled ? "medium" : void 0;
54
+ }
55
+ function isRecord(value) {
56
+ return typeof value === "object" && value !== null && !Array.isArray(value);
57
+ }
58
+ //#endregion
59
+ export { anthropicToOpenAIEffort, normalizeReasoningEffort, reasoningFromAnthropic, reasoningFromOpenAI };
60
+
61
+ //# sourceMappingURL=reasoning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning.js","names":[],"sources":["../../src/providers/reasoning.ts"],"sourcesContent":["/**\n * Protocol-neutral reasoning controls shared by the compatibility proxies.\n *\n * The public APIs use different names for the same intent:\n * OpenAI uses `reasoning_effort` / `reasoning.effort`, Anthropic uses\n * `output_config.effort` plus `thinking`, and Gemini uses `thinkingConfig`.\n * Keep extraction and the necessarily lossy level mapping in one place so a\n * proxy translation never silently drops the caller's intent.\n */\n\nexport type ReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max';\n\nexport interface ReasoningIntent {\n effort?: ReasoningEffort;\n /** Explicit thinking switch. Undefined means the client did not specify it. */\n enabled?: boolean;\n /** Exact Anthropic manual thinking budget, when supplied. */\n budgetTokens?: number;\n /** The client requested a visible reasoning/thinking summary. */\n includeSummary?: boolean;\n}\n\nexport function normalizeReasoningEffort(value: unknown): ReasoningEffort | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n switch (normalized) {\n case 'none':\n case 'minimal':\n case 'low':\n case 'medium':\n case 'high':\n case 'xhigh':\n case 'max':\n return normalized;\n default:\n return undefined;\n }\n}\n\nexport function reasoningFromOpenAI(request: Record<string, unknown>): ReasoningIntent {\n const reasoning = isRecord(request.reasoning) ? request.reasoning : undefined;\n const effort =\n normalizeReasoningEffort(request.reasoning_effort) ??\n normalizeReasoningEffort(reasoning?.effort) ??\n normalizeReasoningEffort(request.effort);\n const summary = reasoning?.summary ?? reasoning?.generate_summary;\n return {\n ...(effort ? { effort, enabled: effort !== 'none' } : {}),\n ...(summary === 'auto' || summary === 'concise' || summary === 'detailed'\n ? { includeSummary: true }\n : {}),\n };\n}\n\nexport function reasoningFromAnthropic(request: Record<string, unknown>): ReasoningIntent {\n const thinking = isRecord(request.thinking) ? request.thinking : undefined;\n const outputConfig = isRecord(request.output_config) ? request.output_config : undefined;\n const effort = normalizeReasoningEffort(outputConfig?.effort);\n const thinkingType = typeof thinking?.type === 'string' ? thinking.type.toLowerCase() : undefined;\n const budget =\n typeof thinking?.budget_tokens === 'number' &&\n Number.isFinite(thinking.budget_tokens) &&\n thinking.budget_tokens >= 0\n ? Math.trunc(thinking.budget_tokens)\n : undefined;\n const enabled =\n thinkingType === 'disabled'\n ? false\n : thinkingType === 'enabled' || thinkingType === 'adaptive'\n ? true\n : undefined;\n return {\n ...(effort ? { effort } : {}),\n ...(enabled != null ? { enabled } : {}),\n ...(budget != null ? { budgetTokens: budget } : {}),\n ...(enabled === true && thinking?.display !== 'omitted' ? { includeSummary: true } : {}),\n };\n}\n\n/** Convert Anthropic controls to the closest OpenAI Chat effort value. */\nexport function anthropicToOpenAIEffort(\n request: Record<string, unknown>,\n): Exclude<ReasoningEffort, 'max'> | undefined {\n const intent = reasoningFromAnthropic(request);\n if (intent.enabled === false) {\n return 'none';\n }\n if (intent.effort) {\n return intent.effort === 'max' ? 'xhigh' : intent.effort;\n }\n if (intent.budgetTokens != null) {\n const maxTokens =\n typeof request.max_tokens === 'number' && request.max_tokens > 0\n ? request.max_tokens\n : undefined;\n const ratio = maxTokens ? intent.budgetTokens / maxTokens : undefined;\n if (intent.budgetTokens <= 1024 || (ratio != null && ratio <= 0.25)) {\n return 'low';\n }\n if (ratio != null && ratio <= 0.6) {\n return 'medium';\n }\n return 'high';\n }\n return intent.enabled ? 'medium' : undefined;\n}\n\n/** Convert OpenAI's extra levels to an Anthropic API effort value. */\nexport function openAIToAnthropicEffort(\n effort: ReasoningEffort | undefined,\n): 'low' | 'medium' | 'high' | 'xhigh' | 'max' | undefined {\n if (!effort) {\n return undefined;\n }\n if (effort === 'none' || effort === 'minimal') {\n return 'low';\n }\n return effort;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"],"mappings":";AAsBA,SAAgB,yBAAyB,OAA6C;CACpF,IAAI,OAAO,UAAU,UACnB;CAEF,MAAM,aAAa,MAAM,KAAK,CAAC,CAAC,YAAY;CAC5C,QAAQ,YAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,OACH,OAAO;EACT,SACE;CACJ;AACF;AAEA,SAAgB,oBAAoB,SAAmD;CACrF,MAAM,YAAY,SAAS,QAAQ,SAAS,IAAI,QAAQ,YAAY,KAAA;CACpE,MAAM,SACJ,yBAAyB,QAAQ,gBAAgB,KACjD,yBAAyB,WAAW,MAAM,KAC1C,yBAAyB,QAAQ,MAAM;CACzC,MAAM,UAAU,WAAW,WAAW,WAAW;CACjD,OAAO;EACL,GAAI,SAAS;GAAE;GAAQ,SAAS,WAAW;EAAO,IAAI,CAAC;EACvD,GAAI,YAAY,UAAU,YAAY,aAAa,YAAY,aAC3D,EAAE,gBAAgB,KAAK,IACvB,CAAC;CACP;AACF;AAEA,SAAgB,uBAAuB,SAAmD;CACxF,MAAM,WAAW,SAAS,QAAQ,QAAQ,IAAI,QAAQ,WAAW,KAAA;CAEjE,MAAM,SAAS,0BADM,SAAS,QAAQ,aAAa,IAAI,QAAQ,gBAAgB,KAAA,EAAA,EACzB,MAAM;CAC5D,MAAM,eAAe,OAAO,UAAU,SAAS,WAAW,SAAS,KAAK,YAAY,IAAI,KAAA;CACxF,MAAM,SACJ,OAAO,UAAU,kBAAkB,YACnC,OAAO,SAAS,SAAS,aAAa,KACtC,SAAS,iBAAiB,IACtB,KAAK,MAAM,SAAS,aAAa,IACjC,KAAA;CACN,MAAM,UACJ,iBAAiB,aACb,QACA,iBAAiB,aAAa,iBAAiB,aAC7C,OACA,KAAA;CACR,OAAO;EACL,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;EAC3B,GAAI,WAAW,OAAO,EAAE,QAAQ,IAAI,CAAC;EACrC,GAAI,UAAU,OAAO,EAAE,cAAc,OAAO,IAAI,CAAC;EACjD,GAAI,YAAY,QAAQ,UAAU,YAAY,YAAY,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACxF;AACF;;AAGA,SAAgB,wBACd,SAC6C;CAC7C,MAAM,SAAS,uBAAuB,OAAO;CAC7C,IAAI,OAAO,YAAY,OACrB,OAAO;CAET,IAAI,OAAO,QACT,OAAO,OAAO,WAAW,QAAQ,UAAU,OAAO;CAEpD,IAAI,OAAO,gBAAgB,MAAM;EAC/B,MAAM,YACJ,OAAO,QAAQ,eAAe,YAAY,QAAQ,aAAa,IAC3D,QAAQ,aACR,KAAA;EACN,MAAM,QAAQ,YAAY,OAAO,eAAe,YAAY,KAAA;EAC5D,IAAI,OAAO,gBAAgB,QAAS,SAAS,QAAQ,SAAS,KAC5D,OAAO;EAET,IAAI,SAAS,QAAQ,SAAS,IAC5B,OAAO;EAET,OAAO;CACT;CACA,OAAO,OAAO,UAAU,WAAW,KAAA;AACrC;AAeA,SAAS,SAAS,OAAkD;CAClE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E"}
@@ -0,0 +1,33 @@
1
+ export type UpstreamFailureKind = 'rate_limit' | 'auth' | 'transient' | 'server' | 'permanent';
2
+ export type LimitScope = 'ip' | 'credential' | 'model' | 'unknown';
3
+ export interface ClassifiedFailure {
4
+ kind: UpstreamFailureKind;
5
+ status?: number;
6
+ scope: LimitScope;
7
+ retryAfterMs?: number;
8
+ message?: string;
9
+ }
10
+ /**
11
+ * Billing exhaustion is credential-scoped, unlike an IP/model rate limit.
12
+ * Keep this deliberately narrow: a generic 403 can be a model entitlement or
13
+ * policy rejection and must not silently disable an otherwise healthy account.
14
+ */
15
+ export declare function isInsufficientBalanceFailure(status: number, bodyPreview?: string): boolean;
16
+ /**
17
+ * A 429 is normally shared by an IP, endpoint, or model. This deliberately
18
+ * returns true only for vendor responses that explicitly attribute exhaustion
19
+ * to an API key, project, account, billing balance, or quota allocation.
20
+ * Generic 429s must remain on the current account.
21
+ */
22
+ export declare function isCredentialQuotaFailure(status: number, headers: Headers, bodyPreview?: string): boolean;
23
+ export declare function parseRetryAfter(value: string | null | undefined, now?: number): number | undefined;
24
+ export declare function classifyUpstreamFailure(status: number, headers: Headers, bodyPreview?: string, now?: number): ClassifiedFailure;
25
+ export declare class CooldownRegistry {
26
+ private readonly now;
27
+ private readonly deadlines;
28
+ constructor(now?: () => number);
29
+ set(key: string, delayMs: number): void;
30
+ remainingMs(key: string): number;
31
+ get size(): number;
32
+ }
33
+ //# sourceMappingURL=upstream-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-policy.d.ts","sourceRoot":"","sources":["../../src/providers/upstream-policy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAC/F,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,OAAO,CAUtF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,WAAW,SAAK,GACf,OAAO,CAgBT;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,GAAG,SAAa,GACf,MAAM,GAAG,SAAS,CAcpB;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,WAAW,SAAK,EAChB,GAAG,SAAa,GACf,iBAAiB,CAuBnB;AAED,qBAAa,gBAAgB;IAEf,OAAO,CAAC,QAAQ,CAAC,GAAG;IADhC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,YAA6B,GAAG,GAAE,MAAM,MAAiB,EAAI;IAC7D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAItC;IACD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAW/B;IACD,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,97 @@
1
+ //#region src/providers/upstream-policy.ts
2
+ /**
3
+ * Billing exhaustion is credential-scoped, unlike an IP/model rate limit.
4
+ * Keep this deliberately narrow: a generic 403 can be a model entitlement or
5
+ * policy rejection and must not silently disable an otherwise healthy account.
6
+ */
7
+ function isInsufficientBalanceFailure(status, bodyPreview = "") {
8
+ if (status !== 402 && status !== 403) return false;
9
+ const text = bodyPreview.slice(0, 2e3).toLowerCase();
10
+ return /insufficient[_\s-]*(?:account[_\s-]*)?balance/.test(text) || /account[_\s-]*balance[^.]{0,80}insufficient/.test(text) || /balance[^.]{0,80}(?:depleted|exhausted)/.test(text);
11
+ }
12
+ /**
13
+ * A 429 is normally shared by an IP, endpoint, or model. This deliberately
14
+ * returns true only for vendor responses that explicitly attribute exhaustion
15
+ * to an API key, project, account, billing balance, or quota allocation.
16
+ * Generic 429s must remain on the current account.
17
+ */
18
+ function isCredentialQuotaFailure(status, headers, bodyPreview = "") {
19
+ if (status !== 429 && !isInsufficientBalanceFailure(status, bodyPreview)) return false;
20
+ const text = `${headers.get("x-goog-api-client") ?? ""} ${bodyPreview.slice(0, 2e3)}`.toLowerCase();
21
+ if (/freeusagelimit|free usage|\bip(?: address)?\b|per[-\s]?minute|rate limit/.test(text)) return false;
22
+ return /resource[_\s-]*exhausted/.test(text) || /(?:api[_\s-]*key|credential|project|account|billing)[^.]{0,100}(?:quota|balance|exhausted|limit)/.test(text) || /(?:quota|balance)[^.]{0,100}(?:exhausted|depleted|exceeded|insufficient)/.test(text);
23
+ }
24
+ function parseRetryAfter(value, now = Date.now()) {
25
+ if (!value) return;
26
+ const raw = value.trim();
27
+ if (/^[+-]?\d+(?:\.\d+)?$/.test(raw)) {
28
+ const seconds = Number(raw);
29
+ return Number.isFinite(seconds) && seconds >= 0 ? Math.floor(seconds * 1e3) : void 0;
30
+ }
31
+ const date = Date.parse(value);
32
+ if (!Number.isNaN(date) && date >= now) return date - now;
33
+ }
34
+ function classifyUpstreamFailure(status, headers, bodyPreview = "", now = Date.now()) {
35
+ const text = bodyPreview.slice(0, 2e3);
36
+ if (status === 429) {
37
+ const lower = text.toLowerCase();
38
+ return {
39
+ kind: "rate_limit",
40
+ status,
41
+ scope: /freeusagelimit|free usage|\bip\b/.test(lower) ? "ip" : "unknown",
42
+ retryAfterMs: parseRetryAfter(headers.get("retry-after"), now),
43
+ message: text || void 0
44
+ };
45
+ }
46
+ if (status === 401 || status === 403) return {
47
+ kind: "auth",
48
+ status,
49
+ scope: "credential",
50
+ message: text || void 0
51
+ };
52
+ if (status === 408 || status === 502 || status === 503 || status === 504) return {
53
+ kind: "transient",
54
+ status,
55
+ scope: "unknown",
56
+ message: text || void 0
57
+ };
58
+ if (status >= 500) return {
59
+ kind: "server",
60
+ status,
61
+ scope: "unknown",
62
+ message: text || void 0
63
+ };
64
+ return {
65
+ kind: "permanent",
66
+ status,
67
+ scope: "unknown",
68
+ message: text || void 0
69
+ };
70
+ }
71
+ var CooldownRegistry = class {
72
+ now;
73
+ deadlines = /* @__PURE__ */ new Map();
74
+ constructor(now = Date.now) {
75
+ this.now = now;
76
+ }
77
+ set(key, delayMs) {
78
+ if (delayMs > 0) this.deadlines.set(key, this.now() + delayMs);
79
+ }
80
+ remainingMs(key) {
81
+ const deadline = this.deadlines.get(key);
82
+ if (deadline === void 0) return 0;
83
+ const remaining = deadline - this.now();
84
+ if (remaining <= 0) {
85
+ this.deadlines.delete(key);
86
+ return 0;
87
+ }
88
+ return remaining;
89
+ }
90
+ get size() {
91
+ return this.deadlines.size;
92
+ }
93
+ };
94
+ //#endregion
95
+ export { CooldownRegistry, classifyUpstreamFailure, isCredentialQuotaFailure, isInsufficientBalanceFailure, parseRetryAfter };
96
+
97
+ //# sourceMappingURL=upstream-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-policy.js","names":[],"sources":["../../src/providers/upstream-policy.ts"],"sourcesContent":["export type UpstreamFailureKind = 'rate_limit' | 'auth' | 'transient' | 'server' | 'permanent';\nexport type LimitScope = 'ip' | 'credential' | 'model' | 'unknown';\n\nexport interface ClassifiedFailure {\n kind: UpstreamFailureKind;\n status?: number;\n scope: LimitScope;\n retryAfterMs?: number;\n message?: string;\n}\n\n/**\n * Billing exhaustion is credential-scoped, unlike an IP/model rate limit.\n * Keep this deliberately narrow: a generic 403 can be a model entitlement or\n * policy rejection and must not silently disable an otherwise healthy account.\n */\nexport function isInsufficientBalanceFailure(status: number, bodyPreview = ''): boolean {\n if (status !== 402 && status !== 403) {\n return false;\n }\n const text = bodyPreview.slice(0, 2000).toLowerCase();\n return (\n /insufficient[_\\s-]*(?:account[_\\s-]*)?balance/.test(text) ||\n /account[_\\s-]*balance[^.]{0,80}insufficient/.test(text) ||\n /balance[^.]{0,80}(?:depleted|exhausted)/.test(text)\n );\n}\n\n/**\n * A 429 is normally shared by an IP, endpoint, or model. This deliberately\n * returns true only for vendor responses that explicitly attribute exhaustion\n * to an API key, project, account, billing balance, or quota allocation.\n * Generic 429s must remain on the current account.\n */\nexport function isCredentialQuotaFailure(\n status: number,\n headers: Headers,\n bodyPreview = '',\n): boolean {\n if (status !== 429 && !isInsufficientBalanceFailure(status, bodyPreview)) {\n return false;\n }\n const text =\n `${headers.get('x-goog-api-client') ?? ''} ${bodyPreview.slice(0, 2000)}`.toLowerCase();\n if (/freeusagelimit|free usage|\\bip(?: address)?\\b|per[-\\s]?minute|rate limit/.test(text)) {\n return false;\n }\n return (\n /resource[_\\s-]*exhausted/.test(text) ||\n /(?:api[_\\s-]*key|credential|project|account|billing)[^.]{0,100}(?:quota|balance|exhausted|limit)/.test(\n text,\n ) ||\n /(?:quota|balance)[^.]{0,100}(?:exhausted|depleted|exceeded|insufficient)/.test(text)\n );\n}\n\nexport function parseRetryAfter(\n value: string | null | undefined,\n now = Date.now(),\n): number | undefined {\n if (!value) {\n return undefined;\n }\n const raw = value.trim();\n if (/^[+-]?\\d+(?:\\.\\d+)?$/.test(raw)) {\n const seconds = Number(raw);\n return Number.isFinite(seconds) && seconds >= 0 ? Math.floor(seconds * 1000) : undefined;\n }\n const date = Date.parse(value);\n if (!Number.isNaN(date) && date >= now) {\n return date - now;\n }\n return undefined;\n}\n\nexport function classifyUpstreamFailure(\n status: number,\n headers: Headers,\n bodyPreview = '',\n now = Date.now(),\n): ClassifiedFailure {\n const text = bodyPreview.slice(0, 2000);\n if (status === 429) {\n const lower = text.toLowerCase();\n const scope: LimitScope = /freeusagelimit|free usage|\\bip\\b/.test(lower) ? 'ip' : 'unknown';\n return {\n kind: 'rate_limit',\n status,\n scope,\n retryAfterMs: parseRetryAfter(headers.get('retry-after'), now),\n message: text || undefined,\n };\n }\n if (status === 401 || status === 403) {\n return { kind: 'auth', status, scope: 'credential', message: text || undefined };\n }\n if (status === 408 || status === 502 || status === 503 || status === 504) {\n return { kind: 'transient', status, scope: 'unknown', message: text || undefined };\n }\n if (status >= 500) {\n return { kind: 'server', status, scope: 'unknown', message: text || undefined };\n }\n return { kind: 'permanent', status, scope: 'unknown', message: text || undefined };\n}\n\nexport class CooldownRegistry {\n private readonly deadlines = new Map<string, number>();\n constructor(private readonly now: () => number = Date.now) {}\n set(key: string, delayMs: number): void {\n if (delayMs > 0) {\n this.deadlines.set(key, this.now() + delayMs);\n }\n }\n remainingMs(key: string): number {\n const deadline = this.deadlines.get(key);\n if (deadline === undefined) {\n return 0;\n }\n const remaining = deadline - this.now();\n if (remaining <= 0) {\n this.deadlines.delete(key);\n return 0;\n }\n return remaining;\n }\n get size(): number {\n return this.deadlines.size;\n }\n}\n"],"mappings":";;;;;;AAgBA,SAAgB,6BAA6B,QAAgB,cAAc,IAAa;CACtF,IAAI,WAAW,OAAO,WAAW,KAC/B,OAAO;CAET,MAAM,OAAO,YAAY,MAAM,GAAG,GAAI,CAAC,CAAC,YAAY;CACpD,OACE,gDAAgD,KAAK,IAAI,KACzD,8CAA8C,KAAK,IAAI,KACvD,0CAA0C,KAAK,IAAI;AAEvD;;;;;;;AAQA,SAAgB,yBACd,QACA,SACA,cAAc,IACL;CACT,IAAI,WAAW,OAAO,CAAC,6BAA6B,QAAQ,WAAW,GACrE,OAAO;CAET,MAAM,OACJ,GAAG,QAAQ,IAAI,mBAAmB,KAAK,GAAG,GAAG,YAAY,MAAM,GAAG,GAAI,IAAI,YAAY;CACxF,IAAI,2EAA2E,KAAK,IAAI,GACtF,OAAO;CAET,OACE,2BAA2B,KAAK,IAAI,KACpC,mGAAmG,KACjG,IACF,KACA,2EAA2E,KAAK,IAAI;AAExF;AAEA,SAAgB,gBACd,OACA,MAAM,KAAK,IAAI,GACK;CACpB,IAAI,CAAC,OACH;CAEF,MAAM,MAAM,MAAM,KAAK;CACvB,IAAI,uBAAuB,KAAK,GAAG,GAAG;EACpC,MAAM,UAAU,OAAO,GAAG;EAC1B,OAAO,OAAO,SAAS,OAAO,KAAK,WAAW,IAAI,KAAK,MAAM,UAAU,GAAI,IAAI,KAAA;CACjF;CACA,MAAM,OAAO,KAAK,MAAM,KAAK;CAC7B,IAAI,CAAC,OAAO,MAAM,IAAI,KAAK,QAAQ,KACjC,OAAO,OAAO;AAGlB;AAEA,SAAgB,wBACd,QACA,SACA,cAAc,IACd,MAAM,KAAK,IAAI,GACI;CACnB,MAAM,OAAO,YAAY,MAAM,GAAG,GAAI;CACtC,IAAI,WAAW,KAAK;EAClB,MAAM,QAAQ,KAAK,YAAY;EAE/B,OAAO;GACL,MAAM;GACN;GACA,OAJwB,mCAAmC,KAAK,KAAK,IAAI,OAAO;GAKhF,cAAc,gBAAgB,QAAQ,IAAI,aAAa,GAAG,GAAG;GAC7D,SAAS,QAAQ,KAAA;EACnB;CACF;CACA,IAAI,WAAW,OAAO,WAAW,KAC/B,OAAO;EAAE,MAAM;EAAQ;EAAQ,OAAO;EAAc,SAAS,QAAQ,KAAA;CAAU;CAEjF,IAAI,WAAW,OAAO,WAAW,OAAO,WAAW,OAAO,WAAW,KACnE,OAAO;EAAE,MAAM;EAAa;EAAQ,OAAO;EAAW,SAAS,QAAQ,KAAA;CAAU;CAEnF,IAAI,UAAU,KACZ,OAAO;EAAE,MAAM;EAAU;EAAQ,OAAO;EAAW,SAAS,QAAQ,KAAA;CAAU;CAEhF,OAAO;EAAE,MAAM;EAAa;EAAQ,OAAO;EAAW,SAAS,QAAQ,KAAA;CAAU;AACnF;AAEA,IAAa,mBAAb,MAA8B;CAEC;CAD7B,4BAA6B,IAAI,IAAoB;CACrD,YAAY,MAAqC,KAAK,KAAK;EAA9B,KAAA,MAAA;CAA+B;CAC5D,IAAI,KAAa,SAAuB;EACtC,IAAI,UAAU,GACZ,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO;CAEhD;CACA,YAAY,KAAqB;EAC/B,MAAM,WAAW,KAAK,UAAU,IAAI,GAAG;EACvC,IAAI,aAAa,KAAA,GACf,OAAO;EAET,MAAM,YAAY,WAAW,KAAK,IAAI;EACtC,IAAI,aAAa,GAAG;GAClB,KAAK,UAAU,OAAO,GAAG;GACzB,OAAO;EACT;EACA,OAAO;CACT;CACA,IAAI,OAAe;EACjB,OAAO,KAAK,UAAU;CACxB;AACF"}
@@ -0,0 +1,3 @@
1
+ /** Stable domain and extension type exports for `anypick/types`. */
2
+ export type * from './types.js';
3
+ //# sourceMappingURL=public-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-types.d.ts","sourceRoot":"","sources":["../src/public-types.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,mBAAmB,SAAS,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { AnyPick } from './core/app.js';
2
+ import type { AnyPickEventSink } from './core/events.js';
3
+ /** Options accepted by the supported programmatic application factory. */
4
+ export interface CreateAnyPickAppOptions {
5
+ /** Data root. Defaults to `~/.anypick` (or `ANYPICK_HOME`). */
6
+ root?: string;
7
+ /** Optional sanitized lifecycle-event sink owned by the caller. */
8
+ events?: AnyPickEventSink;
9
+ }
10
+ /**
11
+ * Open a fully initialized AnyPick application.
12
+ *
13
+ * The promise resolves only after schema migration, legacy migration, plugin
14
+ * loading, and startup recovery have completed. The returned facade excludes
15
+ * SQLite, stores, journals, and leases; call `close()` when finished.
16
+ */
17
+ export declare function createAnyPickApp(options?: CreateAnyPickAppOptions): Promise<AnyPick>;
18
+ export type { AnyPick } from './core/app.js';
19
+ //# sourceMappingURL=public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,OAAO,CAAC,CAG9F;AAED,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
package/dist/public.js ADDED
@@ -0,0 +1,16 @@
1
+ //#region src/public.ts
2
+ /**
3
+ * Open a fully initialized AnyPick application.
4
+ *
5
+ * The promise resolves only after schema migration, legacy migration, plugin
6
+ * loading, and startup recovery have completed. The returned facade excludes
7
+ * SQLite, stores, journals, and leases; call `close()` when finished.
8
+ */
9
+ async function createAnyPickApp(options = {}) {
10
+ const { createAppReady } = await import("./core/app.js");
11
+ return createAppReady(options);
12
+ }
13
+ //#endregion
14
+ export { createAnyPickApp };
15
+
16
+ //# sourceMappingURL=public.js.map