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,163 @@
1
+ import { pathExists, readJsonFile } from "../utils/fs.js";
2
+ import { listAuthEntries } from "./opencode-auth.js";
3
+ import { join } from "node:path";
4
+ import { readFile } from "node:fs/promises";
5
+ import { homedir } from "node:os";
6
+ import { createHash } from "node:crypto";
7
+ //#region src/providers/auth-fingerprint.ts
8
+ /**
9
+ * Stable fingerprints for "is this saved login currently live?"
10
+ *
11
+ * Email/display identity is not reliable:
12
+ * - Codex: two saved logins can share an email; account_id is the truth.
13
+ * - OpenCode: multi-provider API bags — identity strings drift; key material must match.
14
+ */
15
+ /** Live auth.json path for a known provider (mirrors each Provider class). */
16
+ function liveAuthPath(providerId, home = homedir()) {
17
+ switch (providerId) {
18
+ case "codex": return process.env.CODEX_AUTH_PATH ?? join(home, ".codex", "auth.json");
19
+ case "opencode":
20
+ if (process.env.OPENCODE_AUTH_PATH) return process.env.OPENCODE_AUTH_PATH;
21
+ if (process.env.OPENCODE_DATA_DIR) return join(process.env.OPENCODE_DATA_DIR, "auth.json");
22
+ return join(process.env.XDG_DATA_HOME ?? join(home, ".local", "share"), "opencode", "auth.json");
23
+ case "grok": return process.env.GROK_AUTH_PATH ?? join(home, ".grok", "auth.json");
24
+ default: return null;
25
+ }
26
+ }
27
+ async function fingerprintLiveAuth(providerId, home = homedir()) {
28
+ const path = liveAuthPath(providerId, home);
29
+ if (!path) return null;
30
+ return fingerprintAuthFile(providerId, path);
31
+ }
32
+ function sha8(s) {
33
+ return createHash("sha256").update(s).digest("hex").slice(0, 12);
34
+ }
35
+ /**
36
+ * Codex ~/.codex/auth.json → fingerprint of the *current session material*.
37
+ *
38
+ * Prefer refresh_token (unique per login session) over account_id.
39
+ * Matching only on account_id marks every saved copy of the same ChatGPT
40
+ * account as ● live (e.g. "live" + "vicen" with the same email).
41
+ */
42
+ function fingerprintCodexAuth(data) {
43
+ const tokens = data.tokens;
44
+ if (tokens && typeof tokens === "object") {
45
+ const t = tokens;
46
+ if (typeof t.refresh_token === "string" && t.refresh_token.trim()) {
47
+ const acct = typeof t.account_id === "string" && t.account_id.trim() ? t.account_id.trim() : "";
48
+ return acct ? `codex:rt:${sha8(t.refresh_token.trim())}:acct:${acct}` : `codex:rt:${sha8(t.refresh_token.trim())}`;
49
+ }
50
+ if (typeof t.access_token === "string" && t.access_token.trim()) return `codex:at:${sha8(t.access_token.trim())}`;
51
+ if (typeof t.account_id === "string" && t.account_id.trim()) return `codex:acct:${t.account_id.trim()}`;
52
+ }
53
+ if (typeof data.OPENAI_API_KEY === "string" && data.OPENAI_API_KEY.trim()) return `codex:key:${sha8(data.OPENAI_API_KEY.trim())}`;
54
+ if (typeof data.token === "string" && data.token.trim()) return `codex:tok:${sha8(data.token.trim())}`;
55
+ if (typeof data.email === "string" && data.email.trim()) return `codex:email:${data.email.trim().toLowerCase()}`;
56
+ return null;
57
+ }
58
+ /**
59
+ * Grok rotates its access key and expiry during normal refreshes. The refresh
60
+ * token identifies the durable login, so comparing the whole session JSON
61
+ * would turn a healthy active account into false drift.
62
+ */
63
+ function fingerprintGrokAuth(data) {
64
+ const parts = Object.values(data).filter((entry) => Boolean(entry) && typeof entry === "object").flatMap((session) => {
65
+ if (typeof session.refresh_token === "string" && session.refresh_token.trim()) return `rt:${sha8(session.refresh_token.trim())}`;
66
+ if (typeof session.key === "string" && session.key.trim()) return `key:${sha8(session.key.trim())}`;
67
+ return [];
68
+ }).toSorted();
69
+ return parts.length > 0 ? `grok:${parts.join("|")}` : null;
70
+ }
71
+ /** OpenCode auth.json → stable bag fingerprint (sorted provider:type:material). */
72
+ function fingerprintOpenCodeAuth(data) {
73
+ const entries = listAuthEntries(data);
74
+ if (entries.length === 0) return null;
75
+ const parts = [];
76
+ for (const { provider, entry } of entries) if (entry.type === "api" && entry.key) parts.push(`${provider}:api:${sha8(entry.key)}`);
77
+ else if (entry.type === "oauth") if (entry.accountId) parts.push(`${provider}:oauth:acct:${entry.accountId}`);
78
+ else if (entry.refresh) parts.push(`${provider}:oauth:rt:${sha8(entry.refresh)}`);
79
+ else if (entry.access) parts.push(`${provider}:oauth:at:${sha8(entry.access)}`);
80
+ else parts.push(`${provider}:oauth`);
81
+ else if (entry.type === "wellknown" && entry.token) parts.push(`${provider}:wk:${sha8(entry.token)}`);
82
+ else parts.push(`${provider}:${entry.type}`);
83
+ parts.sort();
84
+ return `opencode:${parts.join("|")}`;
85
+ }
86
+ /**
87
+ * Generic JSON auth fingerprint for unknown providers: hash of stable JSON.
88
+ * Prefer provider-specific fingerprints when available.
89
+ */
90
+ function fingerprintJsonAuth(data) {
91
+ if (data == null || typeof data !== "object") return null;
92
+ try {
93
+ return `json:${sha8(JSON.stringify(data))}`;
94
+ } catch {
95
+ return null;
96
+ }
97
+ }
98
+ function fingerprintAuthData(providerId, data) {
99
+ if (providerId === "codex") return fingerprintCodexAuth(data);
100
+ if (providerId === "opencode") return fingerprintOpenCodeAuth(data);
101
+ if (providerId === "grok") return fingerprintGrokAuth(data) ?? fingerprintJsonAuth(data);
102
+ if (typeof data.token === "string" && data.token.trim()) return `${providerId}:tok:${sha8(data.token.trim())}`;
103
+ if (typeof data.email === "string" && data.email.trim()) return `${providerId}:email:${data.email.trim().toLowerCase()}`;
104
+ return fingerprintJsonAuth(data);
105
+ }
106
+ async function fingerprintAuthFile(providerId, authPath) {
107
+ if (!await pathExists(authPath)) return null;
108
+ try {
109
+ return fingerprintAuthData(providerId, await readJsonFile(authPath));
110
+ } catch {
111
+ return null;
112
+ }
113
+ }
114
+ /** Snapshot dir → fingerprint (auth.json). */
115
+ async function fingerprintSnapshot(providerId, snapshotDir) {
116
+ return fingerprintAuthFile(providerId, join(snapshotDir, "auth.json"));
117
+ }
118
+ /**
119
+ * Default "is this snapshot the live login?" using stable material fingerprints.
120
+ * Providers that need richer file layouts implement their own
121
+ * `snapshotMatchesLive`; everyone else delegates here.
122
+ */
123
+ async function snapshotMatchesLiveDefault(providerId, snapshotDir) {
124
+ if (providerId === "codex") {
125
+ const live = await fingerprintLiveAuth("codex");
126
+ if (!live) return false;
127
+ const snap = await fingerprintSnapshot("codex", snapshotDir);
128
+ return snap != null && snap === live;
129
+ }
130
+ const live = await fingerprintLiveAuth(providerId);
131
+ if (!live) return false;
132
+ const snap = await fingerprintSnapshot(providerId, snapshotDir);
133
+ return snap != null && snap === live;
134
+ }
135
+ /**
136
+ * Compare a set of named auth files between a live location and a snapshot dir.
137
+ * Used by providers (e.g. Kiro) whose live auth lives outside the standard
138
+ * auth.json convention. Returns true only if every present live file has an
139
+ * identical counterpart in the snapshot (and vice-versa for present files).
140
+ */
141
+ async function snapshotMatchesLiveByFiles(liveFiles) {
142
+ let any = false;
143
+ for (const { livePath, snapshotPath } of liveFiles) {
144
+ const [live, snap] = await Promise.all([fileFingerprint(livePath), fileFingerprint(snapshotPath)]);
145
+ if (live == null && snap == null) continue;
146
+ if (live == null || snap == null || live !== snap) return false;
147
+ any = true;
148
+ }
149
+ return any;
150
+ }
151
+ async function fileFingerprint(p) {
152
+ if (!await pathExists(p)) return null;
153
+ try {
154
+ const buf = await readFile(p);
155
+ return createHash("sha256").update(buf).digest("hex").slice(0, 16);
156
+ } catch {
157
+ return null;
158
+ }
159
+ }
160
+ //#endregion
161
+ export { fingerprintAuthData, fingerprintAuthFile, fingerprintCodexAuth, fingerprintGrokAuth, fingerprintJsonAuth, fingerprintLiveAuth, fingerprintOpenCodeAuth, fingerprintSnapshot, liveAuthPath, snapshotMatchesLiveByFiles, snapshotMatchesLiveDefault };
162
+
163
+ //# sourceMappingURL=auth-fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-fingerprint.js","names":[],"sources":["../../src/providers/auth-fingerprint.ts"],"sourcesContent":["/**\n * Stable fingerprints for \"is this saved login currently live?\"\n *\n * Email/display identity is not reliable:\n * - Codex: two saved logins can share an email; account_id is the truth.\n * - OpenCode: multi-provider API bags — identity strings drift; key material must match.\n */\n\nimport { createHash } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { pathExists, readJsonFile } from '../utils/fs';\nimport { listAuthEntries } from './opencode-auth';\n\n/** Live auth.json path for a known provider (mirrors each Provider class). */\nexport function liveAuthPath(providerId: string, home = homedir()): string | null {\n switch (providerId) {\n case 'codex':\n return process.env.CODEX_AUTH_PATH ?? join(home, '.codex', 'auth.json');\n case 'opencode': {\n if (process.env.OPENCODE_AUTH_PATH) {\n return process.env.OPENCODE_AUTH_PATH;\n }\n if (process.env.OPENCODE_DATA_DIR) {\n return join(process.env.OPENCODE_DATA_DIR, 'auth.json');\n }\n const xdg = process.env.XDG_DATA_HOME ?? join(home, '.local', 'share');\n return join(xdg, 'opencode', 'auth.json');\n }\n case 'grok':\n return process.env.GROK_AUTH_PATH ?? join(home, '.grok', 'auth.json');\n default:\n return null;\n }\n}\n\nexport async function fingerprintLiveAuth(\n providerId: string,\n home = homedir(),\n): Promise<string | null> {\n const path = liveAuthPath(providerId, home);\n if (!path) {\n return null;\n }\n return fingerprintAuthFile(providerId, path);\n}\n\nfunction sha8(s: string): string {\n return createHash('sha256').update(s).digest('hex').slice(0, 12);\n}\n\n/**\n * Codex ~/.codex/auth.json → fingerprint of the *current session material*.\n *\n * Prefer refresh_token (unique per login session) over account_id.\n * Matching only on account_id marks every saved copy of the same ChatGPT\n * account as ● live (e.g. \"live\" + \"vicen\" with the same email).\n */\nexport function fingerprintCodexAuth(data: Record<string, unknown>): string | null {\n const tokens = data.tokens;\n if (tokens && typeof tokens === 'object') {\n const t = tokens as Record<string, unknown>;\n // Session material first — exact live match\n if (typeof t.refresh_token === 'string' && t.refresh_token.trim()) {\n const acct =\n typeof t.account_id === 'string' && t.account_id.trim() ? t.account_id.trim() : '';\n return acct\n ? `codex:rt:${sha8(t.refresh_token.trim())}:acct:${acct}`\n : `codex:rt:${sha8(t.refresh_token.trim())}`;\n }\n if (typeof t.access_token === 'string' && t.access_token.trim()) {\n return `codex:at:${sha8(t.access_token.trim())}`;\n }\n // Last resort: account only (cannot distinguish two snapshots of same user)\n if (typeof t.account_id === 'string' && t.account_id.trim()) {\n return `codex:acct:${t.account_id.trim()}`;\n }\n }\n if (typeof data.OPENAI_API_KEY === 'string' && data.OPENAI_API_KEY.trim()) {\n return `codex:key:${sha8(data.OPENAI_API_KEY.trim())}`;\n }\n // Test / FakeProvider shapes: { email, token }\n if (typeof data.token === 'string' && data.token.trim()) {\n return `codex:tok:${sha8(data.token.trim())}`;\n }\n if (typeof data.email === 'string' && data.email.trim()) {\n return `codex:email:${data.email.trim().toLowerCase()}`;\n }\n return null;\n}\n\n/**\n * Grok rotates its access key and expiry during normal refreshes. The refresh\n * token identifies the durable login, so comparing the whole session JSON\n * would turn a healthy active account into false drift.\n */\nexport function fingerprintGrokAuth(data: Record<string, unknown>): string | null {\n const parts = Object.values(data)\n .filter(\n (entry): entry is Record<string, unknown> => Boolean(entry) && typeof entry === 'object',\n )\n .flatMap((session) => {\n if (typeof session.refresh_token === 'string' && session.refresh_token.trim()) {\n return `rt:${sha8(session.refresh_token.trim())}`;\n }\n if (typeof session.key === 'string' && session.key.trim()) {\n return `key:${sha8(session.key.trim())}`;\n }\n return [];\n })\n .toSorted();\n return parts.length > 0 ? `grok:${parts.join('|')}` : null;\n}\n\n/** OpenCode auth.json → stable bag fingerprint (sorted provider:type:material). */\nexport function fingerprintOpenCodeAuth(data: Record<string, unknown>): string | null {\n const entries = listAuthEntries(data);\n if (entries.length === 0) {\n return null;\n }\n const parts: string[] = [];\n for (const { provider, entry } of entries) {\n if (entry.type === 'api' && entry.key) {\n parts.push(`${provider}:api:${sha8(entry.key)}`);\n } else if (entry.type === 'oauth') {\n if (entry.accountId) {\n parts.push(`${provider}:oauth:acct:${entry.accountId}`);\n } else if (entry.refresh) {\n parts.push(`${provider}:oauth:rt:${sha8(entry.refresh)}`);\n } else if (entry.access) {\n parts.push(`${provider}:oauth:at:${sha8(entry.access)}`);\n } else {\n parts.push(`${provider}:oauth`);\n }\n } else if (entry.type === 'wellknown' && entry.token) {\n parts.push(`${provider}:wk:${sha8(entry.token)}`);\n } else {\n parts.push(`${provider}:${entry.type}`);\n }\n }\n parts.sort();\n return `opencode:${parts.join('|')}`;\n}\n\n/**\n * Generic JSON auth fingerprint for unknown providers: hash of stable JSON.\n * Prefer provider-specific fingerprints when available.\n */\nexport function fingerprintJsonAuth(data: unknown): string | null {\n if (data == null || typeof data !== 'object') {\n return null;\n }\n try {\n return `json:${sha8(JSON.stringify(data))}`;\n } catch {\n return null;\n }\n}\n\nexport function fingerprintAuthData(\n providerId: string,\n data: Record<string, unknown>,\n): string | null {\n if (providerId === 'codex') {\n return fingerprintCodexAuth(data);\n }\n if (providerId === 'opencode') {\n return fingerprintOpenCodeAuth(data);\n }\n if (providerId === 'grok') {\n return fingerprintGrokAuth(data) ?? fingerprintJsonAuth(data);\n }\n // Grok / fakes / others: prefer known fields then full JSON\n if (typeof data.token === 'string' && data.token.trim()) {\n return `${providerId}:tok:${sha8(data.token.trim())}`;\n }\n if (typeof data.email === 'string' && data.email.trim()) {\n return `${providerId}:email:${data.email.trim().toLowerCase()}`;\n }\n return fingerprintJsonAuth(data);\n}\n\nexport async function fingerprintAuthFile(\n providerId: string,\n authPath: string,\n): Promise<string | null> {\n if (!(await pathExists(authPath))) {\n return null;\n }\n try {\n const data = await readJsonFile<Record<string, unknown>>(authPath);\n return fingerprintAuthData(providerId, data);\n } catch {\n return null;\n }\n}\n\n/** Snapshot dir → fingerprint (auth.json). */\nexport async function fingerprintSnapshot(\n providerId: string,\n snapshotDir: string,\n): Promise<string | null> {\n return fingerprintAuthFile(providerId, join(snapshotDir, 'auth.json'));\n}\n\n/** Extract ChatGPT account_id from a codex auth.json object or snapshot. */\nexport function codexAccountIdFromAuth(data: Record<string, unknown>): string | null {\n const tokens = data.tokens;\n if (tokens && typeof tokens === 'object') {\n const id = (tokens as Record<string, unknown>).account_id;\n if (typeof id === 'string' && id.trim()) {\n return id.trim();\n }\n }\n return null;\n}\n\nexport async function codexAccountIdFromSnapshot(snapshotDir: string): Promise<string | null> {\n const path = join(snapshotDir, 'auth.json');\n if (!(await pathExists(path))) {\n return null;\n }\n try {\n const data = await readJsonFile<Record<string, unknown>>(path);\n return codexAccountIdFromAuth(data);\n } catch {\n return null;\n }\n}\n\n/**\n * Default \"is this snapshot the live login?\" using stable material fingerprints.\n * Providers that need richer file layouts implement their own\n * `snapshotMatchesLive`; everyone else delegates here.\n */\nexport async function snapshotMatchesLiveDefault(\n providerId: string,\n snapshotDir: string,\n): Promise<boolean> {\n if (providerId === 'codex') {\n const live = await fingerprintLiveAuth('codex');\n if (!live) {\n return false;\n }\n const snap = await fingerprintSnapshot('codex', snapshotDir);\n return snap != null && snap === live;\n }\n const live = await fingerprintLiveAuth(providerId);\n if (!live) {\n return false;\n }\n const snap = await fingerprintSnapshot(providerId, snapshotDir);\n return snap != null && snap === live;\n}\n\n/**\n * Compare a set of named auth files between a live location and a snapshot dir.\n * Used by providers (e.g. Kiro) whose live auth lives outside the standard\n * auth.json convention. Returns true only if every present live file has an\n * identical counterpart in the snapshot (and vice-versa for present files).\n */\nexport async function snapshotMatchesLiveByFiles(\n liveFiles: { name: string; livePath: string; snapshotPath: string }[],\n): Promise<boolean> {\n let any = false;\n for (const { livePath, snapshotPath } of liveFiles) {\n const [live, snap] = await Promise.all([\n fileFingerprint(livePath),\n fileFingerprint(snapshotPath),\n ]);\n if (live == null && snap == null) {\n continue;\n }\n if (live == null || snap == null || live !== snap) {\n return false;\n }\n any = true;\n }\n return any;\n}\n\nasync function fileFingerprint(p: string): Promise<string | null> {\n if (!(await pathExists(p))) {\n return null;\n }\n try {\n const buf = await readFile(p);\n return createHash('sha256').update(buf).digest('hex').slice(0, 16);\n } catch {\n return null;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { Account, LiveAuthStatus, Provider, SnapshotMeta, SourceAdapter } from '../types.js';
2
+ export interface ClaudeCredentialStore {
3
+ read(): Promise<{
4
+ account: string;
5
+ credential: string;
6
+ } | null>;
7
+ write(account: string, credential: string): Promise<void>;
8
+ clear(account: string): Promise<void>;
9
+ }
10
+ interface ClaudeProviderOptions {
11
+ credentialStore?: ClaudeCredentialStore;
12
+ isOwnerRunning?: () => Promise<boolean>;
13
+ }
14
+ /**
15
+ * Claude Code keeps OAuth/API credentials in macOS Keychain and falls back to
16
+ * ~/.claude/.credentials.json on file-backed platforms. This store mirrors
17
+ * those two authorities without ever putting the secret in process argv.
18
+ */
19
+ export declare function createClaudeCredentialStore(home?: string): ClaudeCredentialStore;
20
+ export declare class ClaudeProvider implements Provider {
21
+ readonly id = "claude";
22
+ readonly name = "Anthropic Claude Code";
23
+ readonly shortName = "Claude";
24
+ readonly description = "Manages Claude Code native login credentials";
25
+ private readonly credentials;
26
+ private readonly isOwnerRunning;
27
+ constructor(home?: string, opts?: ClaudeProviderOptions);
28
+ sourceAdapter(account: Account): SourceAdapter;
29
+ detectLive(): Promise<LiveAuthStatus>;
30
+ backup(destDir: string): Promise<SnapshotMeta>;
31
+ preflightRestore(_srcDir: string): Promise<void>;
32
+ restoreOwnerStatus(_srcDir: string): Promise<{
33
+ name: string;
34
+ running: boolean;
35
+ }>;
36
+ restore(srcDir: string): Promise<void>;
37
+ clearLive(): Promise<void>;
38
+ describeSnapshot(srcDir: string): Promise<SnapshotMeta>;
39
+ snapshotMatchesLive(srcDir: string): Promise<boolean>;
40
+ }
41
+ export declare const claudeProvider: ClaudeProvider;
42
+ export {};
43
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAiB/F,MAAM,WAAW,qBAAqB;IACpC,IAAI,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAChE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,UAAU,qBAAqB;IAC7B,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,SAAY,GAAG,qBAAqB,CA2DnF;AAED,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,EAAE,YAAY;IACvB,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,SAAS,YAAY;IAC9B,QAAQ,CAAC,WAAW,kDAAkD;IAEtE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IAExD,YAAY,IAAI,SAAY,EAAE,IAAI,GAAE,qBAA0B,EAG7D;IAED,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CAE7C;IAEK,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC,CAU1C;IAEK,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAenD;IAEK,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOrD;IAEK,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAErF;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3C;IAEK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAK/B;IAEK,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAG5D;IAEK,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAY1D;CACF;AAkFD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -0,0 +1,191 @@
1
+ import { AnyPickError } from "../utils/errors.js";
2
+ import { pathExists, readJsonFile, writeJsonFile, writeTextFile } from "../utils/fs.js";
3
+ import { claudeAccountAdapter } from "../sources/account-adapters.js";
4
+ import { join } from "node:path";
5
+ import { readFile, rm } from "node:fs/promises";
6
+ import { homedir, userInfo } from "node:os";
7
+ import { createHash } from "node:crypto";
8
+ import { execFile } from "node:child_process";
9
+ import { promisify } from "node:util";
10
+ //#region src/providers/claude.ts
11
+ var execFileAsync = promisify(execFile);
12
+ var SECURITY_BIN = "/usr/bin/security";
13
+ var SECURITY_TIMEOUT_MS = 5e3;
14
+ var CLAUDE_KEYCHAIN_SERVICE = "Claude Code-credentials";
15
+ var SNAPSHOT_FILE = "credentials.json";
16
+ /**
17
+ * Claude Code keeps OAuth/API credentials in macOS Keychain and falls back to
18
+ * ~/.claude/.credentials.json on file-backed platforms. This store mirrors
19
+ * those two authorities without ever putting the secret in process argv.
20
+ */
21
+ function createClaudeCredentialStore(home = homedir()) {
22
+ const account = userInfo().username;
23
+ const file = process.env.ANYPICK_CLAUDE_CREDENTIALS_PATH ?? join(home, ".claude", ".credentials.json");
24
+ if (!(process.platform === "darwin" && process.env.ANYPICK_CLAUDE_NO_KEYCHAIN !== "1")) return {
25
+ async read() {
26
+ if (!await pathExists(file)) return null;
27
+ const credential = await readFile(file, "utf8");
28
+ return credential.trim() ? {
29
+ account,
30
+ credential
31
+ } : null;
32
+ },
33
+ async write(_account, credential) {
34
+ await writeTextFile(file, credential.endsWith("\n") ? credential : `${credential}\n`, 384);
35
+ },
36
+ async clear() {
37
+ await rm(file, { force: true });
38
+ }
39
+ };
40
+ return {
41
+ async read() {
42
+ try {
43
+ const { stdout } = await execFileAsync(SECURITY_BIN, [
44
+ "find-generic-password",
45
+ "-s",
46
+ CLAUDE_KEYCHAIN_SERVICE,
47
+ "-a",
48
+ account,
49
+ "-w"
50
+ ], {
51
+ encoding: "utf8",
52
+ timeout: SECURITY_TIMEOUT_MS,
53
+ maxBuffer: 1024 * 1024
54
+ });
55
+ const credential = stdout.trim();
56
+ return credential ? {
57
+ account,
58
+ credential
59
+ } : null;
60
+ } catch {
61
+ return null;
62
+ }
63
+ },
64
+ async write(keychainAccount, credential) {
65
+ const hex = Buffer.from(credential, "utf8").toString("hex");
66
+ await securityStdin(`add-generic-password -U -s ${quoteSecurityArgument(CLAUDE_KEYCHAIN_SERVICE)} -a ${quoteSecurityArgument(keychainAccount)} -X ${hex}\n`);
67
+ },
68
+ async clear(keychainAccount) {
69
+ await securityStdin(`delete-generic-password -s ${quoteSecurityArgument(CLAUDE_KEYCHAIN_SERVICE)} -a ${quoteSecurityArgument(keychainAccount)}\n`);
70
+ }
71
+ };
72
+ }
73
+ var ClaudeProvider = class {
74
+ id = "claude";
75
+ name = "Anthropic Claude Code";
76
+ shortName = "Claude";
77
+ description = "Manages Claude Code native login credentials";
78
+ credentials;
79
+ isOwnerRunning;
80
+ constructor(home = homedir(), opts = {}) {
81
+ this.credentials = opts.credentialStore ?? createClaudeCredentialStore(home);
82
+ this.isOwnerRunning = opts.isOwnerRunning ?? claudeCodeApplicationRunning;
83
+ }
84
+ sourceAdapter(account) {
85
+ return claudeAccountAdapter(account);
86
+ }
87
+ async detectLive() {
88
+ const current = await this.credentials.read();
89
+ if (!current) return { present: false };
90
+ return {
91
+ present: true,
92
+ identity: claudeCredentialIdentity(current.credential),
93
+ details: "Claude Code secure credential store"
94
+ };
95
+ }
96
+ async backup(destDir) {
97
+ const current = await this.credentials.read();
98
+ if (!current) throw new AnyPickError("No signed-in Claude Code account was found.", "NO_LIVE_AUTH");
99
+ await writeJsonFile(join(destDir, SNAPSHOT_FILE), {
100
+ version: 1,
101
+ account: current.account,
102
+ credential: current.credential
103
+ }, 384);
104
+ return { identity: claudeCredentialIdentity(current.credential) };
105
+ }
106
+ async preflightRestore(_srcDir) {
107
+ if (await this.isOwnerRunning()) throw new AnyPickError("Claude Code is still running.", {
108
+ code: "RESTORE_OWNER_RUNNING",
109
+ suggestions: ["Quit Claude Code completely, then retry the account switch."]
110
+ });
111
+ }
112
+ async restoreOwnerStatus(_srcDir) {
113
+ return {
114
+ name: "Claude Code",
115
+ running: await this.isOwnerRunning()
116
+ };
117
+ }
118
+ async restore(srcDir) {
119
+ const snapshot = await readClaudeSnapshot(srcDir);
120
+ await this.credentials.write(snapshot.account, snapshot.credential);
121
+ }
122
+ async clearLive() {
123
+ const current = await this.credentials.read();
124
+ if (current) await this.credentials.clear(current.account);
125
+ }
126
+ async describeSnapshot(srcDir) {
127
+ const snapshot = await readClaudeSnapshot(srcDir).catch(() => null);
128
+ return snapshot ? { identity: claudeCredentialIdentity(snapshot.credential) } : {};
129
+ }
130
+ async snapshotMatchesLive(srcDir) {
131
+ const [current, snapshot] = await Promise.all([this.credentials.read().catch(() => null), readClaudeSnapshot(srcDir).catch(() => null)]);
132
+ if (!current || !snapshot) return false;
133
+ return claudeCredentialFingerprint(current.credential) === claudeCredentialFingerprint(snapshot.credential);
134
+ }
135
+ };
136
+ async function readClaudeSnapshot(srcDir) {
137
+ const snapshot = await readJsonFile(join(srcDir, SNAPSHOT_FILE));
138
+ if (snapshot.version !== 1 || typeof snapshot.account !== "string" || !snapshot.account || typeof snapshot.credential !== "string" || !snapshot.credential) throw new Error("Claude Code credential snapshot is invalid.");
139
+ return snapshot;
140
+ }
141
+ function claudeCredentialIdentity(raw) {
142
+ try {
143
+ const root = JSON.parse(raw);
144
+ const oauth = root.claudeAiOauth;
145
+ for (const candidate of [root.email, oauth?.email]) if (typeof candidate === "string" && candidate.trim()) return candidate.trim();
146
+ const plan = oauth?.subscriptionType;
147
+ return typeof plan === "string" && plan.trim() ? `Claude ${plan.trim()}` : void 0;
148
+ } catch {
149
+ return;
150
+ }
151
+ }
152
+ function claudeCredentialFingerprint(raw) {
153
+ let stable = raw;
154
+ try {
155
+ const oauth = JSON.parse(raw).claudeAiOauth;
156
+ const refresh = oauth?.refreshToken ?? oauth?.refresh_token;
157
+ if (typeof refresh === "string" && refresh.trim()) stable = refresh.trim();
158
+ } catch {}
159
+ return createHash("sha256").update(stable).digest("hex");
160
+ }
161
+ async function claudeCodeApplicationRunning() {
162
+ if (process.platform !== "darwin") return false;
163
+ try {
164
+ const { stdout } = await execFileAsync("/bin/ps", ["-axo", "comm="], {
165
+ encoding: "utf8",
166
+ maxBuffer: 8 * 1024 * 1024
167
+ });
168
+ return stdout.split(/\r?\n/gu).some((line) => {
169
+ const executable = line.trim();
170
+ return executable === "claude" || executable.endsWith("/Claude.app/Contents/MacOS/Claude");
171
+ });
172
+ } catch {
173
+ return false;
174
+ }
175
+ }
176
+ function quoteSecurityArgument(value) {
177
+ return `'${value.replaceAll("\\", "\\\\").replaceAll("'", "'\\\\''")}'`;
178
+ }
179
+ function securityStdin(command) {
180
+ return new Promise((resolve, reject) => {
181
+ execFile(SECURITY_BIN, ["-i"], { timeout: SECURITY_TIMEOUT_MS }, (err) => {
182
+ if (err) reject(/* @__PURE__ */ new Error("macOS Keychain rejected the Claude Code credential update."));
183
+ else resolve();
184
+ }).stdin?.end(command);
185
+ });
186
+ }
187
+ var claudeProvider = new ClaudeProvider();
188
+ //#endregion
189
+ export { ClaudeProvider, claudeProvider, createClaudeCredentialStore };
190
+
191
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","names":[],"sources":["../../src/providers/claude.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { execFile } from 'node:child_process';\nimport { homedir, userInfo } from 'node:os';\nimport { join } from 'node:path';\nimport { promisify } from 'node:util';\nimport { readFile, rm } from 'node:fs/promises';\nimport type { Account, LiveAuthStatus, Provider, SnapshotMeta, SourceAdapter } from '../types';\nimport { claudeAccountAdapter } from '../sources/account-adapters';\nimport { AnyPickError } from '../utils/errors';\nimport { pathExists, readJsonFile, writeJsonFile, writeTextFile } from '../utils/fs';\n\nconst execFileAsync = promisify(execFile);\nconst SECURITY_BIN = '/usr/bin/security';\nconst SECURITY_TIMEOUT_MS = 5_000;\nconst CLAUDE_KEYCHAIN_SERVICE = 'Claude Code-credentials';\nconst SNAPSHOT_FILE = 'credentials.json';\n\ninterface ClaudeCredentialSnapshot {\n version: 1;\n account: string;\n credential: string;\n}\n\nexport interface ClaudeCredentialStore {\n read(): Promise<{ account: string; credential: string } | null>;\n write(account: string, credential: string): Promise<void>;\n clear(account: string): Promise<void>;\n}\n\ninterface ClaudeProviderOptions {\n credentialStore?: ClaudeCredentialStore;\n isOwnerRunning?: () => Promise<boolean>;\n}\n\n/**\n * Claude Code keeps OAuth/API credentials in macOS Keychain and falls back to\n * ~/.claude/.credentials.json on file-backed platforms. This store mirrors\n * those two authorities without ever putting the secret in process argv.\n */\nexport function createClaudeCredentialStore(home = homedir()): ClaudeCredentialStore {\n const account = userInfo().username;\n const file =\n process.env.ANYPICK_CLAUDE_CREDENTIALS_PATH ?? join(home, '.claude', '.credentials.json');\n const useKeychain =\n process.platform === 'darwin' && process.env.ANYPICK_CLAUDE_NO_KEYCHAIN !== '1';\n\n if (!useKeychain) {\n return {\n async read() {\n if (!(await pathExists(file))) {\n return null;\n }\n const credential = await readFile(file, 'utf8');\n return credential.trim() ? { account, credential } : null;\n },\n async write(_account, credential) {\n await writeTextFile(\n file,\n credential.endsWith('\\n') ? credential : `${credential}\\n`,\n 0o600,\n );\n },\n async clear() {\n await rm(file, { force: true });\n },\n };\n }\n\n return {\n async read() {\n try {\n const { stdout } = await execFileAsync(\n SECURITY_BIN,\n ['find-generic-password', '-s', CLAUDE_KEYCHAIN_SERVICE, '-a', account, '-w'],\n { encoding: 'utf8', timeout: SECURITY_TIMEOUT_MS, maxBuffer: 1024 * 1024 },\n );\n const credential = stdout.trim();\n return credential ? { account, credential } : null;\n } catch {\n return null;\n }\n },\n async write(keychainAccount, credential) {\n const hex = Buffer.from(credential, 'utf8').toString('hex');\n await securityStdin(\n `add-generic-password -U -s ${quoteSecurityArgument(CLAUDE_KEYCHAIN_SERVICE)} -a ${quoteSecurityArgument(\n keychainAccount,\n )} -X ${hex}\\n`,\n );\n },\n async clear(keychainAccount) {\n await securityStdin(\n `delete-generic-password -s ${quoteSecurityArgument(CLAUDE_KEYCHAIN_SERVICE)} -a ${quoteSecurityArgument(\n keychainAccount,\n )}\\n`,\n );\n },\n };\n}\n\nexport class ClaudeProvider implements Provider {\n readonly id = 'claude';\n readonly name = 'Anthropic Claude Code';\n readonly shortName = 'Claude';\n readonly description = 'Manages Claude Code native login credentials';\n\n private readonly credentials: ClaudeCredentialStore;\n private readonly isOwnerRunning: () => Promise<boolean>;\n\n constructor(home = homedir(), opts: ClaudeProviderOptions = {}) {\n this.credentials = opts.credentialStore ?? createClaudeCredentialStore(home);\n this.isOwnerRunning = opts.isOwnerRunning ?? claudeCodeApplicationRunning;\n }\n\n sourceAdapter(account: Account): SourceAdapter {\n return claudeAccountAdapter(account);\n }\n\n async detectLive(): Promise<LiveAuthStatus> {\n const current = await this.credentials.read();\n if (!current) {\n return { present: false };\n }\n return {\n present: true,\n identity: claudeCredentialIdentity(current.credential),\n details: 'Claude Code secure credential store',\n };\n }\n\n async backup(destDir: string): Promise<SnapshotMeta> {\n const current = await this.credentials.read();\n if (!current) {\n throw new AnyPickError('No signed-in Claude Code account was found.', 'NO_LIVE_AUTH');\n }\n await writeJsonFile(\n join(destDir, SNAPSHOT_FILE),\n {\n version: 1,\n account: current.account,\n credential: current.credential,\n } satisfies ClaudeCredentialSnapshot,\n 0o600,\n );\n return { identity: claudeCredentialIdentity(current.credential) };\n }\n\n async preflightRestore(_srcDir: string): Promise<void> {\n if (await this.isOwnerRunning()) {\n throw new AnyPickError('Claude Code is still running.', {\n code: 'RESTORE_OWNER_RUNNING',\n suggestions: ['Quit Claude Code completely, then retry the account switch.'],\n });\n }\n }\n\n async restoreOwnerStatus(_srcDir: string): Promise<{ name: string; running: boolean }> {\n return { name: 'Claude Code', running: await this.isOwnerRunning() };\n }\n\n async restore(srcDir: string): Promise<void> {\n const snapshot = await readClaudeSnapshot(srcDir);\n await this.credentials.write(snapshot.account, snapshot.credential);\n }\n\n async clearLive(): Promise<void> {\n const current = await this.credentials.read();\n if (current) {\n await this.credentials.clear(current.account);\n }\n }\n\n async describeSnapshot(srcDir: string): Promise<SnapshotMeta> {\n const snapshot = await readClaudeSnapshot(srcDir).catch(() => null);\n return snapshot ? { identity: claudeCredentialIdentity(snapshot.credential) } : {};\n }\n\n async snapshotMatchesLive(srcDir: string): Promise<boolean> {\n const [current, snapshot] = await Promise.all([\n this.credentials.read().catch(() => null),\n readClaudeSnapshot(srcDir).catch(() => null),\n ]);\n if (!current || !snapshot) {\n return false;\n }\n return (\n claudeCredentialFingerprint(current.credential) ===\n claudeCredentialFingerprint(snapshot.credential)\n );\n }\n}\n\nasync function readClaudeSnapshot(srcDir: string): Promise<ClaudeCredentialSnapshot> {\n const snapshot = await readJsonFile<ClaudeCredentialSnapshot>(join(srcDir, SNAPSHOT_FILE));\n if (\n snapshot.version !== 1 ||\n typeof snapshot.account !== 'string' ||\n !snapshot.account ||\n typeof snapshot.credential !== 'string' ||\n !snapshot.credential\n ) {\n throw new Error('Claude Code credential snapshot is invalid.');\n }\n return snapshot;\n}\n\nfunction claudeCredentialIdentity(raw: string): string | undefined {\n try {\n const root = JSON.parse(raw) as Record<string, unknown>;\n const oauth = root.claudeAiOauth as Record<string, unknown> | undefined;\n for (const candidate of [root.email, oauth?.email]) {\n if (typeof candidate === 'string' && candidate.trim()) {\n return candidate.trim();\n }\n }\n const plan = oauth?.subscriptionType;\n return typeof plan === 'string' && plan.trim() ? `Claude ${plan.trim()}` : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction claudeCredentialFingerprint(raw: string): string {\n let stable = raw;\n try {\n const root = JSON.parse(raw) as Record<string, unknown>;\n const oauth = root.claudeAiOauth as Record<string, unknown> | undefined;\n const refresh = oauth?.refreshToken ?? oauth?.refresh_token;\n if (typeof refresh === 'string' && refresh.trim()) {\n stable = refresh.trim();\n }\n } catch {\n // A future credential envelope is still safely comparable as opaque text.\n }\n return createHash('sha256').update(stable).digest('hex');\n}\n\nasync function claudeCodeApplicationRunning(): Promise<boolean> {\n if (process.platform !== 'darwin') {\n return false;\n }\n try {\n const { stdout } = await execFileAsync('/bin/ps', ['-axo', 'comm='], {\n encoding: 'utf8',\n maxBuffer: 8 * 1024 * 1024,\n });\n return stdout.split(/\\r?\\n/gu).some((line) => {\n const executable = line.trim();\n return executable === 'claude' || executable.endsWith('/Claude.app/Contents/MacOS/Claude');\n });\n } catch {\n return false;\n }\n}\n\nfunction quoteSecurityArgument(value: string): string {\n return `'${value.replaceAll('\\\\', '\\\\\\\\').replaceAll(\"'\", \"'\\\\\\\\''\")}'`;\n}\n\nfunction securityStdin(command: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = execFile(SECURITY_BIN, ['-i'], { timeout: SECURITY_TIMEOUT_MS }, (err) => {\n if (err) {\n reject(new Error('macOS Keychain rejected the Claude Code credential update.'));\n } else {\n resolve();\n }\n });\n child.stdin?.end(command);\n });\n}\n\nexport const claudeProvider = new ClaudeProvider();\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function hasCodexAuth(data: Record<string, unknown>): boolean;
2
+ export declare function codexAccountId(data: Record<string, unknown>): string | undefined;
3
+ /**
4
+ * Best-effort identity for display.
5
+ *
6
+ * Codex CLI writes ~/.codex/auth.json with either:
7
+ * - ChatGPT OAuth: `tokens.{id_token,access_token,refresh_token,account_id}` + auth_mode
8
+ * - API key: `OPENAI_API_KEY` string
9
+ *
10
+ * Email lives on id_token.email or access_token["https://api.openai.com/profile"].email.
11
+ */
12
+ export declare function extractCodexIdentity(data: Record<string, unknown>): string | undefined;
13
+ //# sourceMappingURL=codex-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-identity.d.ts","sourceRoot":"","sources":["../../src/providers/codex-identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAUnE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAShF;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CA8BtF"}
@@ -0,0 +1,69 @@
1
+ //#region src/providers/codex-identity.ts
2
+ function hasCodexAuth(data) {
3
+ if (typeof data.OPENAI_API_KEY === "string" && data.OPENAI_API_KEY.trim()) return true;
4
+ const tokens = data.tokens;
5
+ if (tokens && typeof tokens === "object") {
6
+ const t = tokens;
7
+ return Boolean(t.access_token || t.refresh_token || t.id_token);
8
+ }
9
+ return false;
10
+ }
11
+ function codexAccountId(data) {
12
+ const tokens = data.tokens;
13
+ if (tokens && typeof tokens === "object") {
14
+ const id = tokens.account_id;
15
+ if (typeof id === "string" && id.trim()) return id.trim();
16
+ }
17
+ }
18
+ /**
19
+ * Best-effort identity for display.
20
+ *
21
+ * Codex CLI writes ~/.codex/auth.json with either:
22
+ * - ChatGPT OAuth: `tokens.{id_token,access_token,refresh_token,account_id}` + auth_mode
23
+ * - API key: `OPENAI_API_KEY` string
24
+ *
25
+ * Email lives on id_token.email or access_token["https://api.openai.com/profile"].email.
26
+ */
27
+ function extractCodexIdentity(data) {
28
+ const tokens = data.tokens;
29
+ if (tokens && typeof tokens === "object") {
30
+ const t = tokens;
31
+ const fromId = claimsFromJwt(typeof t.id_token === "string" ? t.id_token : null);
32
+ const fromAccess = claimsFromJwt(typeof t.access_token === "string" ? t.access_token : null);
33
+ const email = stringClaim(fromId, "email") ?? stringClaim(fromAccess, "email") ?? nestedEmail(fromAccess, "https://api.openai.com/profile") ?? nestedEmail(fromId, "https://api.openai.com/profile");
34
+ if (email) return email;
35
+ const name = stringClaim(fromId, "name") ?? stringClaim(fromAccess, "name");
36
+ if (name) return name;
37
+ if (typeof t.account_id === "string" && t.account_id) return `chatgpt:${t.account_id.slice(0, 8)}`;
38
+ }
39
+ if (typeof data.OPENAI_API_KEY === "string" && data.OPENAI_API_KEY.trim()) return "API key";
40
+ }
41
+ function claimsFromJwt(token) {
42
+ if (!token) return null;
43
+ try {
44
+ const parts = token.split(".");
45
+ if (parts.length < 2 || !parts[1]) return null;
46
+ let b64 = parts[1].replace(/-/g, "+").replace(/_/g, "/");
47
+ const pad = b64.length % 4;
48
+ if (pad) b64 += "=".repeat(4 - pad);
49
+ return JSON.parse(Buffer.from(b64, "base64").toString("utf8"));
50
+ } catch {
51
+ return null;
52
+ }
53
+ }
54
+ function stringClaim(claims, key) {
55
+ if (!claims) return;
56
+ const v = claims[key];
57
+ return typeof v === "string" && v.trim() ? v.trim() : void 0;
58
+ }
59
+ function nestedEmail(claims, key) {
60
+ if (!claims) return;
61
+ const nest = claims[key];
62
+ if (!nest || typeof nest !== "object") return;
63
+ const email = nest.email;
64
+ return typeof email === "string" && email.trim() ? email.trim() : void 0;
65
+ }
66
+ //#endregion
67
+ export { codexAccountId, extractCodexIdentity, hasCodexAuth };
68
+
69
+ //# sourceMappingURL=codex-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-identity.js","names":[],"sources":["../../src/providers/codex-identity.ts"],"sourcesContent":["export function hasCodexAuth(data: Record<string, unknown>): boolean {\n if (typeof data.OPENAI_API_KEY === 'string' && data.OPENAI_API_KEY.trim()) {\n return true;\n }\n const tokens = data.tokens;\n if (tokens && typeof tokens === 'object') {\n const t = tokens as Record<string, unknown>;\n return Boolean(t.access_token || t.refresh_token || t.id_token);\n }\n return false;\n}\n\nexport function codexAccountId(data: Record<string, unknown>): string | undefined {\n const tokens = data.tokens;\n if (tokens && typeof tokens === 'object') {\n const id = (tokens as Record<string, unknown>).account_id;\n if (typeof id === 'string' && id.trim()) {\n return id.trim();\n }\n }\n return undefined;\n}\n\n/**\n * Best-effort identity for display.\n *\n * Codex CLI writes ~/.codex/auth.json with either:\n * - ChatGPT OAuth: `tokens.{id_token,access_token,refresh_token,account_id}` + auth_mode\n * - API key: `OPENAI_API_KEY` string\n *\n * Email lives on id_token.email or access_token[\"https://api.openai.com/profile\"].email.\n */\nexport function extractCodexIdentity(data: Record<string, unknown>): string | undefined {\n const tokens = data.tokens;\n if (tokens && typeof tokens === 'object') {\n const t = tokens as Record<string, unknown>;\n const fromId = claimsFromJwt(typeof t.id_token === 'string' ? t.id_token : null);\n const fromAccess = claimsFromJwt(typeof t.access_token === 'string' ? t.access_token : null);\n\n const email =\n stringClaim(fromId, 'email') ??\n stringClaim(fromAccess, 'email') ??\n nestedEmail(fromAccess, 'https://api.openai.com/profile') ??\n nestedEmail(fromId, 'https://api.openai.com/profile');\n if (email) {\n return email;\n }\n\n const name = stringClaim(fromId, 'name') ?? stringClaim(fromAccess, 'name');\n if (name) {\n return name;\n }\n\n if (typeof t.account_id === 'string' && t.account_id) {\n return `chatgpt:${t.account_id.slice(0, 8)}`;\n }\n }\n\n if (typeof data.OPENAI_API_KEY === 'string' && data.OPENAI_API_KEY.trim()) {\n return 'API key';\n }\n return undefined;\n}\n\nfunction claimsFromJwt(token: string | null): Record<string, unknown> | null {\n if (!token) {\n return null;\n }\n try {\n const parts = token.split('.');\n if (parts.length < 2 || !parts[1]) {\n return null;\n }\n // Accept base64url or standard base64 (with/without padding).\n let b64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n const pad = b64.length % 4;\n if (pad) {\n b64 += '='.repeat(4 - pad);\n }\n return JSON.parse(Buffer.from(b64, 'base64').toString('utf8')) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nfunction stringClaim(claims: Record<string, unknown> | null, key: string): string | undefined {\n if (!claims) {\n return undefined;\n }\n const v = claims[key];\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\nfunction nestedEmail(claims: Record<string, unknown> | null, key: string): string | undefined {\n if (!claims) {\n return undefined;\n }\n const nest = claims[key];\n if (!nest || typeof nest !== 'object') {\n return undefined;\n }\n const email = (nest as Record<string, unknown>).email;\n return typeof email === 'string' && email.trim() ? email.trim() : undefined;\n}\n"],"mappings":";AAAA,SAAgB,aAAa,MAAwC;CACnE,IAAI,OAAO,KAAK,mBAAmB,YAAY,KAAK,eAAe,KAAK,GACtE,OAAO;CAET,MAAM,SAAS,KAAK;CACpB,IAAI,UAAU,OAAO,WAAW,UAAU;EACxC,MAAM,IAAI;EACV,OAAO,QAAQ,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ;CAChE;CACA,OAAO;AACT;AAEA,SAAgB,eAAe,MAAmD;CAChF,MAAM,SAAS,KAAK;CACpB,IAAI,UAAU,OAAO,WAAW,UAAU;EACxC,MAAM,KAAM,OAAmC;EAC/C,IAAI,OAAO,OAAO,YAAY,GAAG,KAAK,GACpC,OAAO,GAAG,KAAK;CAEnB;AAEF;;;;;;;;;;AAWA,SAAgB,qBAAqB,MAAmD;CACtF,MAAM,SAAS,KAAK;CACpB,IAAI,UAAU,OAAO,WAAW,UAAU;EACxC,MAAM,IAAI;EACV,MAAM,SAAS,cAAc,OAAO,EAAE,aAAa,WAAW,EAAE,WAAW,IAAI;EAC/E,MAAM,aAAa,cAAc,OAAO,EAAE,iBAAiB,WAAW,EAAE,eAAe,IAAI;EAE3F,MAAM,QACJ,YAAY,QAAQ,OAAO,KAC3B,YAAY,YAAY,OAAO,KAC/B,YAAY,YAAY,gCAAgC,KACxD,YAAY,QAAQ,gCAAgC;EACtD,IAAI,OACF,OAAO;EAGT,MAAM,OAAO,YAAY,QAAQ,MAAM,KAAK,YAAY,YAAY,MAAM;EAC1E,IAAI,MACF,OAAO;EAGT,IAAI,OAAO,EAAE,eAAe,YAAY,EAAE,YACxC,OAAO,WAAW,EAAE,WAAW,MAAM,GAAG,CAAC;CAE7C;CAEA,IAAI,OAAO,KAAK,mBAAmB,YAAY,KAAK,eAAe,KAAK,GACtE,OAAO;AAGX;AAEA,SAAS,cAAc,OAAsD;CAC3E,IAAI,CAAC,OACH,OAAO;CAET,IAAI;EACF,MAAM,QAAQ,MAAM,MAAM,GAAG;EAC7B,IAAI,MAAM,SAAS,KAAK,CAAC,MAAM,IAC7B,OAAO;EAGT,IAAI,MAAM,MAAM,EAAE,CAAC,QAAQ,MAAM,GAAG,CAAC,CAAC,QAAQ,MAAM,GAAG;EACvD,MAAM,MAAM,IAAI,SAAS;EACzB,IAAI,KACF,OAAO,IAAI,OAAO,IAAI,GAAG;EAE3B,OAAO,KAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC;CAC/D,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,YAAY,QAAwC,KAAiC;CAC5F,IAAI,CAAC,QACH;CAEF,MAAM,IAAI,OAAO;CACjB,OAAO,OAAO,MAAM,YAAY,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,KAAA;AACxD;AAEA,SAAS,YAAY,QAAwC,KAAiC;CAC5F,IAAI,CAAC,QACH;CAEF,MAAM,OAAO,OAAO;CACpB,IAAI,CAAC,QAAQ,OAAO,SAAS,UAC3B;CAEF,MAAM,QAAS,KAAiC;CAChD,OAAO,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,KAAA;AACpE"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * ChatGPT / Codex OAuth token refresh (no browser).
3
+ *
4
+ * Endpoint + client_id match the official Codex CLI binary
5
+ * (https://auth.openai.com/oauth/token, app_EMoamEEZ73f0CkXaXp7hrann).
6
+ */
7
+ export declare const CODEX_OAUTH_TOKEN_URL: string;
8
+ export declare const CODEX_OAUTH_CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
9
+ export interface CodexAuthFile {
10
+ auth_mode?: string;
11
+ OPENAI_API_KEY?: string | null;
12
+ tokens?: {
13
+ id_token?: string;
14
+ access_token?: string;
15
+ refresh_token?: string;
16
+ account_id?: string;
17
+ [key: string]: unknown;
18
+ };
19
+ last_refresh?: string;
20
+ [key: string]: unknown;
21
+ }
22
+ export interface CodexRefreshResult {
23
+ auth: CodexAuthFile;
24
+ identity?: string;
25
+ }
26
+ /**
27
+ * Refresh Codex ChatGPT OAuth tokens in-memory from an auth.json object.
28
+ */
29
+ export declare function refreshCodexAuth(auth: CodexAuthFile, fetchFn?: typeof fetch): Promise<CodexRefreshResult>;
30
+ //# sourceMappingURL=codex-refresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-refresh.d.ts","sourceRoot":"","sources":["../../src/providers/codex-refresh.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,qBAAqB,QAC6D,CAAC;AAEhG,eAAO,MAAM,qBAAqB,iCAAiC,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAqD7B"}