@hoilab/ada-cli 0.84.22 → 0.85.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 (1114) hide show
  1. package/CHANGELOG.md +29 -2
  2. package/README.es.md +17 -6
  3. package/README.md +109 -11
  4. package/dist/ada-publico.d.ts +35 -0
  5. package/dist/ada-publico.d.ts.map +1 -0
  6. package/dist/ada-publico.js +40 -0
  7. package/dist/ada-publico.js.map +1 -0
  8. package/dist/cli/audit-command.d.ts +15 -0
  9. package/dist/cli/audit-command.d.ts.map +1 -0
  10. package/dist/cli/audit-command.js +280 -0
  11. package/dist/cli/audit-command.js.map +1 -0
  12. package/dist/cli/banco-command.d.ts +15 -0
  13. package/dist/cli/banco-command.d.ts.map +1 -0
  14. package/dist/cli/banco-command.js +213 -0
  15. package/dist/cli/banco-command.js.map +1 -0
  16. package/dist/cli/cleanse-command.d.ts +11 -0
  17. package/dist/cli/cleanse-command.d.ts.map +1 -0
  18. package/dist/cli/cleanse-command.js +101 -0
  19. package/dist/cli/cleanse-command.js.map +1 -0
  20. package/dist/cli/commit-command.d.ts +31 -0
  21. package/dist/cli/commit-command.d.ts.map +1 -0
  22. package/dist/cli/commit-command.js +158 -0
  23. package/dist/cli/commit-command.js.map +1 -0
  24. package/dist/cli/computer-command.d.ts +12 -0
  25. package/dist/cli/computer-command.d.ts.map +1 -0
  26. package/dist/cli/computer-command.js +141 -0
  27. package/dist/cli/computer-command.js.map +1 -0
  28. package/dist/cli/discover-command.d.ts +18 -0
  29. package/dist/cli/discover-command.d.ts.map +1 -0
  30. package/dist/cli/discover-command.js +108 -0
  31. package/dist/cli/discover-command.js.map +1 -0
  32. package/dist/cli/hashline-command.d.ts +11 -0
  33. package/dist/cli/hashline-command.d.ts.map +1 -0
  34. package/dist/cli/hashline-command.js +106 -0
  35. package/dist/cli/hashline-command.js.map +1 -0
  36. package/dist/cli/import-command.d.ts +35 -0
  37. package/dist/cli/import-command.d.ts.map +1 -0
  38. package/dist/cli/import-command.js +164 -0
  39. package/dist/cli/import-command.js.map +1 -0
  40. package/dist/cli/politica-command.d.ts +20 -0
  41. package/dist/cli/politica-command.d.ts.map +1 -0
  42. package/dist/cli/politica-command.js +93 -0
  43. package/dist/cli/politica-command.js.map +1 -0
  44. package/dist/cli/refine-command.d.ts +18 -0
  45. package/dist/cli/refine-command.d.ts.map +1 -0
  46. package/dist/cli/refine-command.js +101 -0
  47. package/dist/cli/refine-command.js.map +1 -0
  48. package/dist/cli/review-command.d.ts +24 -0
  49. package/dist/cli/review-command.d.ts.map +1 -0
  50. package/dist/cli/review-command.js +168 -0
  51. package/dist/cli/review-command.js.map +1 -0
  52. package/dist/cli/schedule-command.d.ts +17 -0
  53. package/dist/cli/schedule-command.d.ts.map +1 -0
  54. package/dist/cli/schedule-command.js +117 -0
  55. package/dist/cli/schedule-command.js.map +1 -0
  56. package/dist/cli/serve-command.d.ts +72 -0
  57. package/dist/cli/serve-command.d.ts.map +1 -0
  58. package/dist/cli/serve-command.js +568 -0
  59. package/dist/cli/serve-command.js.map +1 -0
  60. package/dist/cli/telegram-command.d.ts +18 -0
  61. package/dist/cli/telegram-command.d.ts.map +1 -0
  62. package/dist/cli/telegram-command.js +137 -0
  63. package/dist/cli/telegram-command.js.map +1 -0
  64. package/dist/cli/telemetria-command.d.ts +22 -0
  65. package/dist/cli/telemetria-command.d.ts.map +1 -0
  66. package/dist/cli/telemetria-command.js +127 -0
  67. package/dist/cli/telemetria-command.js.map +1 -0
  68. package/dist/cli/undo-command.d.ts +9 -0
  69. package/dist/cli/undo-command.d.ts.map +1 -0
  70. package/dist/cli/undo-command.js +56 -0
  71. package/dist/cli/undo-command.js.map +1 -0
  72. package/dist/cli/usage-command.d.ts +10 -0
  73. package/dist/cli/usage-command.d.ts.map +1 -0
  74. package/dist/cli/usage-command.js +209 -0
  75. package/dist/cli/usage-command.js.map +1 -0
  76. package/dist/cli/wiki-command.d.ts +9 -0
  77. package/dist/cli/wiki-command.d.ts.map +1 -0
  78. package/dist/cli/wiki-command.js +76 -0
  79. package/dist/cli/wiki-command.js.map +1 -0
  80. package/dist/cli.d.ts +6 -0
  81. package/dist/cli.d.ts.map +1 -1
  82. package/dist/cli.js +10 -11
  83. package/dist/cli.js.map +1 -1
  84. package/dist/config.d.ts +1 -1
  85. package/dist/config.d.ts.map +1 -1
  86. package/dist/config.js +1 -1
  87. package/dist/config.js.map +1 -1
  88. package/dist/core/ada.d.ts +58 -0
  89. package/dist/core/ada.d.ts.map +1 -0
  90. package/dist/core/ada.js +61 -0
  91. package/dist/core/ada.js.map +1 -0
  92. package/dist/core/advisor/guarda.d.ts +66 -0
  93. package/dist/core/advisor/guarda.d.ts.map +1 -0
  94. package/dist/core/advisor/guarda.js +191 -0
  95. package/dist/core/advisor/guarda.js.map +1 -0
  96. package/dist/core/advisor/runtime.d.ts +66 -0
  97. package/dist/core/advisor/runtime.d.ts.map +1 -0
  98. package/dist/core/advisor/runtime.js +121 -0
  99. package/dist/core/advisor/runtime.js.map +1 -0
  100. package/dist/core/advisor/sesion.d.ts +109 -0
  101. package/dist/core/advisor/sesion.d.ts.map +1 -0
  102. package/dist/core/advisor/sesion.js +139 -0
  103. package/dist/core/advisor/sesion.js.map +1 -0
  104. package/dist/core/agent-session.d.ts +30 -2
  105. package/dist/core/agent-session.d.ts.map +1 -1
  106. package/dist/core/agent-session.js +430 -22
  107. package/dist/core/agent-session.js.map +1 -1
  108. package/dist/core/agents/loader.d.ts +77 -0
  109. package/dist/core/agents/loader.d.ts.map +1 -0
  110. package/dist/core/agents/loader.js +154 -0
  111. package/dist/core/agents/loader.js.map +1 -0
  112. package/dist/core/aprobacion/generados.d.ts +37 -0
  113. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  114. package/dist/core/aprobacion/generados.js +85 -0
  115. package/dist/core/aprobacion/generados.js.map +1 -0
  116. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  117. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  118. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  119. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  120. package/dist/core/aprobacion/politica.d.ts +90 -0
  121. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  122. package/dist/core/aprobacion/politica.js +375 -0
  123. package/dist/core/aprobacion/politica.js.map +1 -0
  124. package/dist/core/arranque/atajos.d.ts +46 -0
  125. package/dist/core/arranque/atajos.d.ts.map +1 -0
  126. package/dist/core/arranque/atajos.js +113 -0
  127. package/dist/core/arranque/atajos.js.map +1 -0
  128. package/dist/core/audit/exportacion.d.ts +54 -0
  129. package/dist/core/audit/exportacion.d.ts.map +1 -0
  130. package/dist/core/audit/exportacion.js +265 -0
  131. package/dist/core/audit/exportacion.js.map +1 -0
  132. package/dist/core/audit/libro.d.ts +318 -0
  133. package/dist/core/audit/libro.d.ts.map +1 -0
  134. package/dist/core/audit/libro.js +508 -0
  135. package/dist/core/audit/libro.js.map +1 -0
  136. package/dist/core/audit/registro-sesion.d.ts +78 -0
  137. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  138. package/dist/core/audit/registro-sesion.js +202 -0
  139. package/dist/core/audit/registro-sesion.js.map +1 -0
  140. package/dist/core/audit/retencion.d.ts +82 -0
  141. package/dist/core/audit/retencion.d.ts.map +1 -0
  142. package/dist/core/audit/retencion.js +152 -0
  143. package/dist/core/audit/retencion.js.map +1 -0
  144. package/dist/core/audit/rutas.d.ts +23 -0
  145. package/dist/core/audit/rutas.d.ts.map +1 -0
  146. package/dist/core/audit/rutas.js +23 -0
  147. package/dist/core/audit/rutas.js.map +1 -0
  148. package/dist/core/auth-storage.d.ts +0 -3
  149. package/dist/core/auth-storage.d.ts.map +1 -1
  150. package/dist/core/auth-storage.js +17 -5
  151. package/dist/core/auth-storage.js.map +1 -1
  152. package/dist/core/banco/almacenamiento.d.ts +18 -0
  153. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  154. package/dist/core/banco/almacenamiento.js +50 -0
  155. package/dist/core/banco/almacenamiento.js.map +1 -0
  156. package/dist/core/banco/analisis.d.ts +37 -0
  157. package/dist/core/banco/analisis.d.ts.map +1 -0
  158. package/dist/core/banco/analisis.js +164 -0
  159. package/dist/core/banco/analisis.js.map +1 -0
  160. package/dist/core/banco/bloques.d.ts +39 -0
  161. package/dist/core/banco/bloques.d.ts.map +1 -0
  162. package/dist/core/banco/bloques.js +84 -0
  163. package/dist/core/banco/bloques.js.map +1 -0
  164. package/dist/core/banco/cargas.d.ts +84 -0
  165. package/dist/core/banco/cargas.d.ts.map +1 -0
  166. package/dist/core/banco/cargas.js +520 -0
  167. package/dist/core/banco/cargas.js.map +1 -0
  168. package/dist/core/banco/comparar.d.ts +29 -0
  169. package/dist/core/banco/comparar.d.ts.map +1 -0
  170. package/dist/core/banco/comparar.js +28 -0
  171. package/dist/core/banco/comparar.js.map +1 -0
  172. package/dist/core/banco/ejecutar.d.ts +44 -0
  173. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  174. package/dist/core/banco/ejecutar.js +183 -0
  175. package/dist/core/banco/ejecutar.js.map +1 -0
  176. package/dist/core/banco/generar.d.ts +24 -0
  177. package/dist/core/banco/generar.d.ts.map +1 -0
  178. package/dist/core/banco/generar.js +159 -0
  179. package/dist/core/banco/generar.js.map +1 -0
  180. package/dist/core/banco/mutaciones.d.ts +25 -0
  181. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  182. package/dist/core/banco/mutaciones.js +215 -0
  183. package/dist/core/banco/mutaciones.js.map +1 -0
  184. package/dist/core/banco/tipos.d.ts +121 -0
  185. package/dist/core/banco/tipos.d.ts.map +1 -0
  186. package/dist/core/banco/tipos.js +16 -0
  187. package/dist/core/banco/tipos.js.map +1 -0
  188. package/dist/core/blobs/almacen.d.ts +81 -0
  189. package/dist/core/blobs/almacen.d.ts.map +1 -0
  190. package/dist/core/blobs/almacen.js +198 -0
  191. package/dist/core/blobs/almacen.js.map +1 -0
  192. package/dist/core/blobs/broker.d.ts +103 -0
  193. package/dist/core/blobs/broker.d.ts.map +1 -0
  194. package/dist/core/blobs/broker.js +204 -0
  195. package/dist/core/blobs/broker.js.map +1 -0
  196. package/dist/core/blobs/index.d.ts +70 -0
  197. package/dist/core/blobs/index.d.ts.map +1 -0
  198. package/dist/core/blobs/index.js +232 -0
  199. package/dist/core/blobs/index.js.map +1 -0
  200. package/dist/core/blobs/payload.d.ts +55 -0
  201. package/dist/core/blobs/payload.d.ts.map +1 -0
  202. package/dist/core/blobs/payload.js +255 -0
  203. package/dist/core/blobs/payload.js.map +1 -0
  204. package/dist/core/blobs/proveedor.d.ts +85 -0
  205. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  206. package/dist/core/blobs/proveedor.js +196 -0
  207. package/dist/core/blobs/proveedor.js.map +1 -0
  208. package/dist/core/browser/cdp.d.ts +41 -0
  209. package/dist/core/browser/cdp.d.ts.map +1 -0
  210. package/dist/core/browser/cdp.js +119 -0
  211. package/dist/core/browser/cdp.js.map +1 -0
  212. package/dist/core/browser/politica.d.ts +51 -0
  213. package/dist/core/browser/politica.d.ts.map +1 -0
  214. package/dist/core/browser/politica.js +123 -0
  215. package/dist/core/browser/politica.js.map +1 -0
  216. package/dist/core/browser/sesion.d.ts +52 -0
  217. package/dist/core/browser/sesion.d.ts.map +1 -0
  218. package/dist/core/browser/sesion.js +176 -0
  219. package/dist/core/browser/sesion.js.map +1 -0
  220. package/dist/core/browser/tools.d.ts +16 -0
  221. package/dist/core/browser/tools.d.ts.map +1 -0
  222. package/dist/core/browser/tools.js +279 -0
  223. package/dist/core/browser/tools.js.map +1 -0
  224. package/dist/core/commit/diff.d.ts +56 -0
  225. package/dist/core/commit/diff.d.ts.map +1 -0
  226. package/dist/core/commit/diff.js +145 -0
  227. package/dist/core/commit/diff.js.map +1 -0
  228. package/dist/core/commit/mensaje.d.ts +80 -0
  229. package/dist/core/commit/mensaje.d.ts.map +1 -0
  230. package/dist/core/commit/mensaje.js +207 -0
  231. package/dist/core/commit/mensaje.js.map +1 -0
  232. package/dist/core/compactar/index.d.ts +52 -0
  233. package/dist/core/compactar/index.d.ts.map +1 -0
  234. package/dist/core/compactar/index.js +91 -0
  235. package/dist/core/compactar/index.js.map +1 -0
  236. package/dist/core/compactar/registro-denso.d.ts +160 -0
  237. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  238. package/dist/core/compactar/registro-denso.js +620 -0
  239. package/dist/core/compactar/registro-denso.js.map +1 -0
  240. package/dist/core/computer/captura.d.ts +35 -0
  241. package/dist/core/computer/captura.d.ts.map +1 -0
  242. package/dist/core/computer/captura.js +140 -0
  243. package/dist/core/computer/captura.js.map +1 -0
  244. package/dist/core/computer/driver.d.ts +130 -0
  245. package/dist/core/computer/driver.d.ts.map +1 -0
  246. package/dist/core/computer/driver.js +206 -0
  247. package/dist/core/computer/driver.js.map +1 -0
  248. package/dist/core/computer/motor/actions.d.ts +109 -0
  249. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  250. package/dist/core/computer/motor/actions.js +157 -0
  251. package/dist/core/computer/motor/actions.js.map +1 -0
  252. package/dist/core/computer/motor/bridge.d.ts +232 -0
  253. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  254. package/dist/core/computer/motor/bridge.js +2335 -0
  255. package/dist/core/computer/motor/bridge.js.map +1 -0
  256. package/dist/core/computer/motor/cdp.d.ts +107 -0
  257. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  258. package/dist/core/computer/motor/cdp.js +659 -0
  259. package/dist/core/computer/motor/cdp.js.map +1 -0
  260. package/dist/core/computer/motor/config.d.ts +23 -0
  261. package/dist/core/computer/motor/config.d.ts.map +1 -0
  262. package/dist/core/computer/motor/config.js +100 -0
  263. package/dist/core/computer/motor/config.js.map +1 -0
  264. package/dist/core/computer/motor/contract.d.ts +81 -0
  265. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  266. package/dist/core/computer/motor/contract.js +14 -0
  267. package/dist/core/computer/motor/contract.js.map +1 -0
  268. package/dist/core/computer/motor/note.d.ts +37 -0
  269. package/dist/core/computer/motor/note.d.ts.map +1 -0
  270. package/dist/core/computer/motor/note.js +162 -0
  271. package/dist/core/computer/motor/note.js.map +1 -0
  272. package/dist/core/computer/motor/outline.d.ts +155 -0
  273. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  274. package/dist/core/computer/motor/outline.js +590 -0
  275. package/dist/core/computer/motor/outline.js.map +1 -0
  276. package/dist/core/computer/motor/output.d.ts +18 -0
  277. package/dist/core/computer/motor/output.d.ts.map +1 -0
  278. package/dist/core/computer/motor/output.js +148 -0
  279. package/dist/core/computer/motor/output.js.map +1 -0
  280. package/dist/core/computer/motor/permissions.d.ts +41 -0
  281. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  282. package/dist/core/computer/motor/permissions.js +51 -0
  283. package/dist/core/computer/motor/permissions.js.map +1 -0
  284. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  285. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  286. package/dist/core/computer/motor/platform/architecture.js +21 -0
  287. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  288. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  289. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  290. package/dist/core/computer/motor/platform/coerce.js +17 -0
  291. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  292. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  293. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  294. package/dist/core/computer/motor/platform/index.js +79 -0
  295. package/dist/core/computer/motor/platform/index.js.map +1 -0
  296. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  297. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  298. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  299. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  300. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  301. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  302. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  303. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  304. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  305. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  307. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  308. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  309. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  311. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  312. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  313. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  314. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  315. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  316. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  317. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  318. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  319. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  320. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  321. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  322. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  323. package/dist/core/computer/motor/platform/types.js +2 -0
  324. package/dist/core/computer/motor/platform/types.js.map +1 -0
  325. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  326. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  327. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  328. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  329. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  330. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  331. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  332. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  333. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  334. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  335. package/dist/core/computer/motor/root-selection.js +28 -0
  336. package/dist/core/computer/motor/root-selection.js.map +1 -0
  337. package/dist/core/computer/motor/runtime.d.ts +50 -0
  338. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  339. package/dist/core/computer/motor/runtime.js +119 -0
  340. package/dist/core/computer/motor/runtime.js.map +1 -0
  341. package/dist/core/computer/motor/state.d.ts +68 -0
  342. package/dist/core/computer/motor/state.d.ts.map +1 -0
  343. package/dist/core/computer/motor/state.js +100 -0
  344. package/dist/core/computer/motor/state.js.map +1 -0
  345. package/dist/core/computer/motor/view.d.ts +6 -0
  346. package/dist/core/computer/motor/view.d.ts.map +1 -0
  347. package/dist/core/computer/motor/view.js +185 -0
  348. package/dist/core/computer/motor/view.js.map +1 -0
  349. package/dist/core/computer/motor-ada.d.ts +159 -0
  350. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  351. package/dist/core/computer/motor-ada.js +412 -0
  352. package/dist/core/computer/motor-ada.js.map +1 -0
  353. package/dist/core/computer/politica.d.ts +56 -0
  354. package/dist/core/computer/politica.d.ts.map +1 -0
  355. package/dist/core/computer/politica.js +163 -0
  356. package/dist/core/computer/politica.js.map +1 -0
  357. package/dist/core/computer/tools.d.ts +26 -0
  358. package/dist/core/computer/tools.d.ts.map +1 -0
  359. package/dist/core/computer/tools.js +399 -0
  360. package/dist/core/computer/tools.js.map +1 -0
  361. package/dist/core/context-breakdown.d.ts +80 -0
  362. package/dist/core/context-breakdown.d.ts.map +1 -0
  363. package/dist/core/context-breakdown.js +87 -0
  364. package/dist/core/context-breakdown.js.map +1 -0
  365. package/dist/core/credenciales/cliente.d.ts +60 -0
  366. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  367. package/dist/core/credenciales/cliente.js +81 -0
  368. package/dist/core/credenciales/cliente.js.map +1 -0
  369. package/dist/core/credenciales/pool.d.ts +96 -0
  370. package/dist/core/credenciales/pool.d.ts.map +1 -0
  371. package/dist/core/credenciales/pool.js +128 -0
  372. package/dist/core/credenciales/pool.js.map +1 -0
  373. package/dist/core/credenciales/reposo.d.ts +93 -0
  374. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  375. package/dist/core/credenciales/reposo.js +489 -0
  376. package/dist/core/credenciales/reposo.js.map +1 -0
  377. package/dist/core/credenciales/servidor.d.ts +55 -0
  378. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  379. package/dist/core/credenciales/servidor.js +205 -0
  380. package/dist/core/credenciales/servidor.js.map +1 -0
  381. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  382. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  383. package/dist/core/descubrimiento/comandos.js +76 -0
  384. package/dist/core/descubrimiento/comandos.js.map +1 -0
  385. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  386. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  387. package/dist/core/descubrimiento/mcp.js +130 -0
  388. package/dist/core/descubrimiento/mcp.js.map +1 -0
  389. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  390. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  391. package/dist/core/descubrimiento/reglas.js +134 -0
  392. package/dist/core/descubrimiento/reglas.js.map +1 -0
  393. package/dist/core/descubrimiento/skills.d.ts +57 -0
  394. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  395. package/dist/core/descubrimiento/skills.js +113 -0
  396. package/dist/core/descubrimiento/skills.js.map +1 -0
  397. package/dist/core/dificultad/clasificador.d.ts +133 -0
  398. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  399. package/dist/core/dificultad/clasificador.js +288 -0
  400. package/dist/core/dificultad/clasificador.js.map +1 -0
  401. package/dist/core/edicion/diario.d.ts +37 -0
  402. package/dist/core/edicion/diario.d.ts.map +1 -0
  403. package/dist/core/edicion/diario.js +51 -0
  404. package/dist/core/edicion/diario.js.map +1 -0
  405. package/dist/core/edicion/hashline.d.ts +71 -0
  406. package/dist/core/edicion/hashline.d.ts.map +1 -0
  407. package/dist/core/edicion/hashline.js +111 -0
  408. package/dist/core/edicion/hashline.js.map +1 -0
  409. package/dist/core/edicion/hueco.d.ts +64 -0
  410. package/dist/core/edicion/hueco.d.ts.map +1 -0
  411. package/dist/core/edicion/hueco.js +162 -0
  412. package/dist/core/edicion/hueco.js.map +1 -0
  413. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  414. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  415. package/dist/core/edicion/limpiar-carga.js +121 -0
  416. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  417. package/dist/core/edicion/observador.d.ts +80 -0
  418. package/dist/core/edicion/observador.d.ts.map +1 -0
  419. package/dist/core/edicion/observador.js +183 -0
  420. package/dist/core/edicion/observador.js.map +1 -0
  421. package/dist/core/edicion/parecido.d.ts +53 -0
  422. package/dist/core/edicion/parecido.d.ts.map +1 -0
  423. package/dist/core/edicion/parecido.js +145 -0
  424. package/dist/core/edicion/parecido.js.map +1 -0
  425. package/dist/core/edicion/parseo.d.ts +58 -0
  426. package/dist/core/edicion/parseo.d.ts.map +1 -0
  427. package/dist/core/edicion/parseo.js +124 -0
  428. package/dist/core/edicion/parseo.js.map +1 -0
  429. package/dist/core/edicion/reparacion.d.ts +67 -0
  430. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  431. package/dist/core/edicion/reparacion.js +202 -0
  432. package/dist/core/edicion/reparacion.js.map +1 -0
  433. package/dist/core/edicion/sangria.d.ts +121 -0
  434. package/dist/core/edicion/sangria.d.ts.map +1 -0
  435. package/dist/core/edicion/sangria.js +341 -0
  436. package/dist/core/edicion/sangria.js.map +1 -0
  437. package/dist/core/edicion/tipos.d.ts +58 -0
  438. package/dist/core/edicion/tipos.d.ts.map +1 -0
  439. package/dist/core/edicion/tipos.js +160 -0
  440. package/dist/core/edicion/tipos.js.map +1 -0
  441. package/dist/core/errores/proveedor.d.ts +53 -0
  442. package/dist/core/errores/proveedor.d.ts.map +1 -0
  443. package/dist/core/errores/proveedor.js +191 -0
  444. package/dist/core/errores/proveedor.js.map +1 -0
  445. package/dist/core/estructural/buscar.d.ts +61 -0
  446. package/dist/core/estructural/buscar.d.ts.map +1 -0
  447. package/dist/core/estructural/buscar.js +261 -0
  448. package/dist/core/estructural/buscar.js.map +1 -0
  449. package/dist/core/estructural/editar.d.ts +36 -0
  450. package/dist/core/estructural/editar.d.ts.map +1 -0
  451. package/dist/core/estructural/editar.js +123 -0
  452. package/dist/core/estructural/editar.js.map +1 -0
  453. package/dist/core/estructural/tools.d.ts +11 -0
  454. package/dist/core/estructural/tools.d.ts.map +1 -0
  455. package/dist/core/estructural/tools.js +100 -0
  456. package/dist/core/estructural/tools.js.map +1 -0
  457. package/dist/core/experimental.d.ts.map +1 -1
  458. package/dist/core/experimental.js +10 -1
  459. package/dist/core/experimental.js.map +1 -1
  460. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  461. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  462. package/dist/core/extensiones/suplantacion.js +61 -0
  463. package/dist/core/extensiones/suplantacion.js.map +1 -0
  464. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  465. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  466. package/dist/core/extensiones/vigilancia.js +217 -0
  467. package/dist/core/extensiones/vigilancia.js.map +1 -0
  468. package/dist/core/extensions/loader.d.ts.map +1 -1
  469. package/dist/core/extensions/loader.js +11 -1
  470. package/dist/core/extensions/loader.js.map +1 -1
  471. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  472. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  473. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  474. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  475. package/dist/core/harness/refine.d.ts +40 -0
  476. package/dist/core/harness/refine.d.ts.map +1 -0
  477. package/dist/core/harness/refine.js +109 -0
  478. package/dist/core/harness/refine.js.map +1 -0
  479. package/dist/core/harness/store.d.ts +75 -0
  480. package/dist/core/harness/store.d.ts.map +1 -0
  481. package/dist/core/harness/store.js +149 -0
  482. package/dist/core/harness/store.js.map +1 -0
  483. package/dist/core/hooks/contract.d.ts +85 -0
  484. package/dist/core/hooks/contract.d.ts.map +1 -0
  485. package/dist/core/hooks/contract.js +140 -0
  486. package/dist/core/hooks/contract.js.map +1 -0
  487. package/dist/core/hooks/runner.d.ts +42 -0
  488. package/dist/core/hooks/runner.d.ts.map +1 -0
  489. package/dist/core/hooks/runner.js +85 -0
  490. package/dist/core/hooks/runner.js.map +1 -0
  491. package/dist/core/hooks/session-hooks.d.ts +62 -0
  492. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  493. package/dist/core/hooks/session-hooks.js +84 -0
  494. package/dist/core/hooks/session-hooks.js.map +1 -0
  495. package/dist/core/importar/formatos.d.ts +69 -0
  496. package/dist/core/importar/formatos.d.ts.map +1 -0
  497. package/dist/core/importar/formatos.js +235 -0
  498. package/dist/core/importar/formatos.js.map +1 -0
  499. package/dist/core/interactivo/deteccion.d.ts +44 -0
  500. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  501. package/dist/core/interactivo/deteccion.js +82 -0
  502. package/dist/core/interactivo/deteccion.js.map +1 -0
  503. package/dist/core/interactivo/sesion.d.ts +50 -0
  504. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  505. package/dist/core/interactivo/sesion.js +156 -0
  506. package/dist/core/interactivo/sesion.js.map +1 -0
  507. package/dist/core/interactivo/tools.d.ts +21 -0
  508. package/dist/core/interactivo/tools.d.ts.map +1 -0
  509. package/dist/core/interactivo/tools.js +122 -0
  510. package/dist/core/interactivo/tools.js.map +1 -0
  511. package/dist/core/lectura/mapa.d.ts +70 -0
  512. package/dist/core/lectura/mapa.d.ts.map +1 -0
  513. package/dist/core/lectura/mapa.js +177 -0
  514. package/dist/core/lectura/mapa.js.map +1 -0
  515. package/dist/core/lectura/pdf.d.ts +49 -0
  516. package/dist/core/lectura/pdf.d.ts.map +1 -0
  517. package/dist/core/lectura/pdf.js +337 -0
  518. package/dist/core/lectura/pdf.js.map +1 -0
  519. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  520. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  521. package/dist/core/limpieza/comprobadores.js +311 -0
  522. package/dist/core/limpieza/comprobadores.js.map +1 -0
  523. package/dist/core/limpieza/parseo.d.ts +19 -0
  524. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  525. package/dist/core/limpieza/parseo.js +124 -0
  526. package/dist/core/limpieza/parseo.js.map +1 -0
  527. package/dist/core/limpieza/reparacion.d.ts +77 -0
  528. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  529. package/dist/core/limpieza/reparacion.js +254 -0
  530. package/dist/core/limpieza/reparacion.js.map +1 -0
  531. package/dist/core/limpieza/tipos.d.ts +56 -0
  532. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  533. package/dist/core/limpieza/tipos.js +9 -0
  534. package/dist/core/limpieza/tipos.js.map +1 -0
  535. package/dist/core/lsp/cliente.d.ts +52 -0
  536. package/dist/core/lsp/cliente.d.ts.map +1 -0
  537. package/dist/core/lsp/cliente.js +232 -0
  538. package/dist/core/lsp/cliente.js.map +1 -0
  539. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  540. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  541. package/dist/core/lsp/descubrimiento.js +152 -0
  542. package/dist/core/lsp/descubrimiento.js.map +1 -0
  543. package/dist/core/lsp/ediciones.d.ts +59 -0
  544. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  545. package/dist/core/lsp/ediciones.js +89 -0
  546. package/dist/core/lsp/ediciones.js.map +1 -0
  547. package/dist/core/lsp/extension.d.ts +28 -0
  548. package/dist/core/lsp/extension.d.ts.map +1 -0
  549. package/dist/core/lsp/extension.js +34 -0
  550. package/dist/core/lsp/extension.js.map +1 -0
  551. package/dist/core/lsp/tools.d.ts +45 -0
  552. package/dist/core/lsp/tools.d.ts.map +1 -0
  553. package/dist/core/lsp/tools.js +265 -0
  554. package/dist/core/lsp/tools.js.map +1 -0
  555. package/dist/core/mcp/client.d.ts +60 -0
  556. package/dist/core/mcp/client.d.ts.map +1 -0
  557. package/dist/core/mcp/client.js +139 -0
  558. package/dist/core/mcp/client.js.map +1 -0
  559. package/dist/core/mcp/manager.d.ts +86 -0
  560. package/dist/core/mcp/manager.d.ts.map +1 -0
  561. package/dist/core/mcp/manager.js +124 -0
  562. package/dist/core/mcp/manager.js.map +1 -0
  563. package/dist/core/mcp/tools.d.ts +15 -0
  564. package/dist/core/mcp/tools.d.ts.map +1 -0
  565. package/dist/core/mcp/tools.js +84 -0
  566. package/dist/core/mcp/tools.js.map +1 -0
  567. package/dist/core/memory-engine/audit-export.d.ts +12 -10
  568. package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
  569. package/dist/core/memory-engine/audit-export.js +15 -0
  570. package/dist/core/memory-engine/audit-export.js.map +1 -1
  571. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  572. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  573. package/dist/core/memory-engine/audit-indice.js +271 -0
  574. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  575. package/dist/core/memory-engine/audit.d.ts +18 -6
  576. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  577. package/dist/core/memory-engine/audit.js +25 -42
  578. package/dist/core/memory-engine/audit.js.map +1 -1
  579. package/dist/core/memory-engine/engine.d.ts +19 -1
  580. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  581. package/dist/core/memory-engine/engine.js +71 -5
  582. package/dist/core/memory-engine/engine.js.map +1 -1
  583. package/dist/core/memory-engine/observation-store.d.ts +0 -2
  584. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  585. package/dist/core/memory-engine/observation-store.js +4 -5
  586. package/dist/core/memory-engine/observation-store.js.map +1 -1
  587. package/dist/core/memory-engine/refinements.d.ts +51 -0
  588. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  589. package/dist/core/memory-engine/refinements.js +99 -0
  590. package/dist/core/memory-engine/refinements.js.map +1 -0
  591. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  592. package/dist/core/memory-engine/tools.js +27 -1
  593. package/dist/core/memory-engine/tools.js.map +1 -1
  594. package/dist/core/memory-engine/types.d.ts +2 -0
  595. package/dist/core/memory-engine/types.d.ts.map +1 -1
  596. package/dist/core/memory-engine/types.js.map +1 -1
  597. package/dist/core/model-resolver.d.ts.map +1 -1
  598. package/dist/core/model-resolver.js +7 -1
  599. package/dist/core/model-resolver.js.map +1 -1
  600. package/dist/core/muestreo-restringido.d.ts +49 -0
  601. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  602. package/dist/core/muestreo-restringido.js +65 -0
  603. package/dist/core/muestreo-restringido.js.map +1 -0
  604. package/dist/core/orphan-process-journal.d.ts +48 -0
  605. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  606. package/dist/core/orphan-process-journal.js +116 -0
  607. package/dist/core/orphan-process-journal.js.map +1 -0
  608. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  609. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  610. package/dist/core/privacidad/categorias-especiales.js +745 -0
  611. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  612. package/dist/core/privacidad/tapar.d.ts +48 -0
  613. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  614. package/dist/core/privacidad/tapar.js +66 -0
  615. package/dist/core/privacidad/tapar.js.map +1 -0
  616. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  617. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  618. package/dist/core/prompt-cache/diagnostics.js +100 -0
  619. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  620. package/dist/core/prompt-cache/index.d.ts +33 -0
  621. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  622. package/dist/core/prompt-cache/index.js +189 -0
  623. package/dist/core/prompt-cache/index.js.map +1 -0
  624. package/dist/core/prompt-cache/payload.d.ts +58 -0
  625. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  626. package/dist/core/prompt-cache/payload.js +122 -0
  627. package/dist/core/prompt-cache/payload.js.map +1 -0
  628. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  629. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  630. package/dist/core/prompt-cache/stabilize.js +137 -0
  631. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  632. package/dist/core/prompt-cache/stats.d.ts +55 -0
  633. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  634. package/dist/core/prompt-cache/stats.js +158 -0
  635. package/dist/core/prompt-cache/stats.js.map +1 -0
  636. package/dist/core/prompt-eleccion.d.ts +38 -0
  637. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  638. package/dist/core/prompt-eleccion.js +46 -0
  639. package/dist/core/prompt-eleccion.js.map +1 -0
  640. package/dist/core/prompts/montar.d.ts +75 -0
  641. package/dist/core/prompts/montar.d.ts.map +1 -0
  642. package/dist/core/prompts/montar.js +146 -0
  643. package/dist/core/prompts/montar.js.map +1 -0
  644. package/dist/core/prompts/plantilla.d.ts +54 -0
  645. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  646. package/dist/core/prompts/plantilla.js +153 -0
  647. package/dist/core/prompts/plantilla.js.map +1 -0
  648. package/dist/core/prompts/sistema.md +134 -0
  649. package/dist/core/provider-attribution.d.ts +24 -2
  650. package/dist/core/provider-attribution.d.ts.map +1 -1
  651. package/dist/core/provider-attribution.js +24 -42
  652. package/dist/core/provider-attribution.js.map +1 -1
  653. package/dist/core/remoto/destino.d.ts +38 -0
  654. package/dist/core/remoto/destino.d.ts.map +1 -0
  655. package/dist/core/remoto/destino.js +105 -0
  656. package/dist/core/remoto/destino.js.map +1 -0
  657. package/dist/core/remoto/ejecutor.d.ts +59 -0
  658. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  659. package/dist/core/remoto/ejecutor.js +225 -0
  660. package/dist/core/remoto/ejecutor.js.map +1 -0
  661. package/dist/core/remoto/ficheros.d.ts +29 -0
  662. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  663. package/dist/core/remoto/ficheros.js +90 -0
  664. package/dist/core/remoto/ficheros.js.map +1 -0
  665. package/dist/core/remoto/registro-extension.d.ts +15 -0
  666. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  667. package/dist/core/remoto/registro-extension.js +17 -0
  668. package/dist/core/remoto/registro-extension.js.map +1 -0
  669. package/dist/core/remoto/tools.d.ts +28 -0
  670. package/dist/core/remoto/tools.d.ts.map +1 -0
  671. package/dist/core/remoto/tools.js +31 -0
  672. package/dist/core/remoto/tools.js.map +1 -0
  673. package/dist/core/resource-loader.d.ts +8 -0
  674. package/dist/core/resource-loader.d.ts.map +1 -1
  675. package/dist/core/resource-loader.js +93 -1
  676. package/dist/core/resource-loader.js.map +1 -1
  677. package/dist/core/revision/hallazgo.d.ts +51 -0
  678. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  679. package/dist/core/revision/hallazgo.js +73 -0
  680. package/dist/core/revision/hallazgo.js.map +1 -0
  681. package/dist/core/revision/revisor.d.ts +81 -0
  682. package/dist/core/revision/revisor.d.ts.map +1 -0
  683. package/dist/core/revision/revisor.js +132 -0
  684. package/dist/core/revision/revisor.js.map +1 -0
  685. package/dist/core/revision/sarif.d.ts +30 -0
  686. package/dist/core/revision/sarif.d.ts.map +1 -0
  687. package/dist/core/revision/sarif.js +83 -0
  688. package/dist/core/revision/sarif.js.map +1 -0
  689. package/dist/core/scheduler/scheduler.d.ts +87 -0
  690. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  691. package/dist/core/scheduler/scheduler.js +178 -0
  692. package/dist/core/scheduler/scheduler.js.map +1 -0
  693. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  694. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  695. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  696. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  697. package/dist/core/settings-manager.d.ts +110 -6
  698. package/dist/core/settings-manager.d.ts.map +1 -1
  699. package/dist/core/settings-manager.js +53 -2
  700. package/dist/core/settings-manager.js.map +1 -1
  701. package/dist/core/slash-commands.d.ts.map +1 -1
  702. package/dist/core/slash-commands.js +3 -3
  703. package/dist/core/slash-commands.js.map +1 -1
  704. package/dist/core/system-prompt.d.ts +17 -0
  705. package/dist/core/system-prompt.d.ts.map +1 -1
  706. package/dist/core/system-prompt.js +13 -5
  707. package/dist/core/system-prompt.js.map +1 -1
  708. package/dist/core/telemetria/otlp.d.ts +122 -0
  709. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  710. package/dist/core/telemetria/otlp.js +373 -0
  711. package/dist/core/telemetria/otlp.js.map +1 -0
  712. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  713. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  714. package/dist/core/tools/coercion-argumentos.js +99 -0
  715. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  716. package/dist/core/tools/edit-diff.d.ts +0 -7
  717. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  718. package/dist/core/tools/edit-diff.js +232 -7
  719. package/dist/core/tools/edit-diff.js.map +1 -1
  720. package/dist/core/tools/edit.d.ts.map +1 -1
  721. package/dist/core/tools/edit.js +8 -1
  722. package/dist/core/tools/edit.js.map +1 -1
  723. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  724. package/dist/core/tools/file-mutation-queue.js +5 -0
  725. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  726. package/dist/core/tools/json-tolerante.d.ts +30 -0
  727. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  728. package/dist/core/tools/json-tolerante.js +70 -0
  729. package/dist/core/tools/json-tolerante.js.map +1 -0
  730. package/dist/core/tools/read.d.ts.map +1 -1
  731. package/dist/core/tools/read.js +17 -0
  732. package/dist/core/tools/read.js.map +1 -1
  733. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  734. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  735. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  736. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  737. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  738. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  739. package/dist/core/turno-vacio/detectar.js +66 -0
  740. package/dist/core/turno-vacio/detectar.js.map +1 -0
  741. package/dist/core/undo/journal.d.ts +57 -0
  742. package/dist/core/undo/journal.d.ts.map +1 -0
  743. package/dist/core/undo/journal.js +178 -0
  744. package/dist/core/undo/journal.js.map +1 -0
  745. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  746. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  747. package/dist/core/urls-internas/auditoria.js +42 -0
  748. package/dist/core/urls-internas/auditoria.js.map +1 -0
  749. package/dist/core/urls-internas/boveda.d.ts +13 -0
  750. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  751. package/dist/core/urls-internas/boveda.js +40 -0
  752. package/dist/core/urls-internas/boveda.js.map +1 -0
  753. package/dist/core/urls-internas/lector.d.ts +30 -0
  754. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  755. package/dist/core/urls-internas/lector.js +56 -0
  756. package/dist/core/urls-internas/lector.js.map +1 -0
  757. package/dist/core/urls-internas/memoria.d.ts +11 -0
  758. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  759. package/dist/core/urls-internas/memoria.js +25 -0
  760. package/dist/core/urls-internas/memoria.js.map +1 -0
  761. package/dist/core/urls-internas/parse.d.ts +28 -0
  762. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  763. package/dist/core/urls-internas/parse.js +32 -0
  764. package/dist/core/urls-internas/parse.js.map +1 -0
  765. package/dist/core/urls-internas/reglas.d.ts +10 -0
  766. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  767. package/dist/core/urls-internas/reglas.js +31 -0
  768. package/dist/core/urls-internas/reglas.js.map +1 -0
  769. package/dist/core/usage/aggregate.d.ts +68 -0
  770. package/dist/core/usage/aggregate.d.ts.map +1 -0
  771. package/dist/core/usage/aggregate.js +93 -0
  772. package/dist/core/usage/aggregate.js.map +1 -0
  773. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  774. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  775. package/dist/core/usage/cuota/anthropic.js +63 -0
  776. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  777. package/dist/core/usage/cuota/cache.d.ts +20 -0
  778. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  779. package/dist/core/usage/cuota/cache.js +36 -0
  780. package/dist/core/usage/cuota/cache.js.map +1 -0
  781. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  782. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  783. package/dist/core/usage/cuota/github-copilot.js +67 -0
  784. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  785. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  786. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  787. package/dist/core/usage/cuota/google-gemini.js +72 -0
  788. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  789. package/dist/core/usage/cuota/index.d.ts +25 -0
  790. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  791. package/dist/core/usage/cuota/index.js +50 -0
  792. package/dist/core/usage/cuota/index.js.map +1 -0
  793. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  794. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  795. package/dist/core/usage/cuota/openai-codex.js +59 -0
  796. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  797. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  798. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  799. package/dist/core/usage/cuota/openrouter.js +47 -0
  800. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  801. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  802. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  803. package/dist/core/usage/cuota/tipos.js +25 -0
  804. package/dist/core/usage/cuota/tipos.js.map +1 -0
  805. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  806. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  807. package/dist/core/web/busqueda-nativa.js +163 -0
  808. package/dist/core/web/busqueda-nativa.js.map +1 -0
  809. package/dist/core/web/destino.d.ts +58 -0
  810. package/dist/core/web/destino.d.ts.map +1 -0
  811. package/dist/core/web/destino.js +127 -0
  812. package/dist/core/web/destino.js.map +1 -0
  813. package/dist/core/web/proveedores/brave.d.ts +6 -0
  814. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  815. package/dist/core/web/proveedores/brave.js +20 -0
  816. package/dist/core/web/proveedores/brave.js.map +1 -0
  817. package/dist/core/web/proveedores/claves.d.ts +19 -0
  818. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  819. package/dist/core/web/proveedores/claves.js +36 -0
  820. package/dist/core/web/proveedores/claves.js.map +1 -0
  821. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  822. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  823. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  824. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  825. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  826. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  827. package/dist/core/web/proveedores/ecosia.js +72 -0
  828. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  829. package/dist/core/web/proveedores/exa.d.ts +6 -0
  830. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  831. package/dist/core/web/proveedores/exa.js +24 -0
  832. package/dist/core/web/proveedores/exa.js.map +1 -0
  833. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  834. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  835. package/dist/core/web/proveedores/mojeek.js +65 -0
  836. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  837. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  838. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  839. package/dist/core/web/proveedores/navegador.js +13 -0
  840. package/dist/core/web/proveedores/navegador.js.map +1 -0
  841. package/dist/core/web/proveedores/registro.d.ts +43 -0
  842. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  843. package/dist/core/web/proveedores/registro.js +49 -0
  844. package/dist/core/web/proveedores/registro.js.map +1 -0
  845. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  846. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  847. package/dist/core/web/proveedores/searxng.js +17 -0
  848. package/dist/core/web/proveedores/searxng.js.map +1 -0
  849. package/dist/core/web/proveedores/serper.d.ts +9 -0
  850. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  851. package/dist/core/web/proveedores/serper.js +19 -0
  852. package/dist/core/web/proveedores/serper.js.map +1 -0
  853. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  854. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  855. package/dist/core/web/proveedores/tavily.js +19 -0
  856. package/dist/core/web/proveedores/tavily.js.map +1 -0
  857. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  858. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  859. package/dist/core/web/proveedores/tipos.js +10 -0
  860. package/dist/core/web/proveedores/tipos.js.map +1 -0
  861. package/dist/core/web/registro-red.d.ts +43 -0
  862. package/dist/core/web/registro-red.d.ts.map +1 -0
  863. package/dist/core/web/registro-red.js +86 -0
  864. package/dist/core/web/registro-red.js.map +1 -0
  865. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  866. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  867. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  868. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  869. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  870. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  871. package/dist/core/web/scrapers/crates-io.js +29 -0
  872. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  873. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  874. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  875. package/dist/core/web/scrapers/docs-rs.js +35 -0
  876. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  877. package/dist/core/web/scrapers/github.d.ts +3 -0
  878. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  879. package/dist/core/web/scrapers/github.js +72 -0
  880. package/dist/core/web/scrapers/github.js.map +1 -0
  881. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  882. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  883. package/dist/core/web/scrapers/go-pkg.js +30 -0
  884. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  885. package/dist/core/web/scrapers/hex.d.ts +6 -0
  886. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  887. package/dist/core/web/scrapers/hex.js +27 -0
  888. package/dist/core/web/scrapers/hex.js.map +1 -0
  889. package/dist/core/web/scrapers/maven.d.ts +8 -0
  890. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  891. package/dist/core/web/scrapers/maven.js +41 -0
  892. package/dist/core/web/scrapers/maven.js.map +1 -0
  893. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  894. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  895. package/dist/core/web/scrapers/mdn.js +28 -0
  896. package/dist/core/web/scrapers/mdn.js.map +1 -0
  897. package/dist/core/web/scrapers/npm.d.ts +11 -0
  898. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  899. package/dist/core/web/scrapers/npm.js +57 -0
  900. package/dist/core/web/scrapers/npm.js.map +1 -0
  901. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  902. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  903. package/dist/core/web/scrapers/nuget.js +22 -0
  904. package/dist/core/web/scrapers/nuget.js.map +1 -0
  905. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  906. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  907. package/dist/core/web/scrapers/nvd.js +37 -0
  908. package/dist/core/web/scrapers/nvd.js.map +1 -0
  909. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  910. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  911. package/dist/core/web/scrapers/pypi.js +31 -0
  912. package/dist/core/web/scrapers/pypi.js.map +1 -0
  913. package/dist/core/web/scrapers/registro.d.ts +13 -0
  914. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  915. package/dist/core/web/scrapers/registro.js +65 -0
  916. package/dist/core/web/scrapers/registro.js.map +1 -0
  917. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  918. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  919. package/dist/core/web/scrapers/rubygems.js +23 -0
  920. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  921. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  922. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  923. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  924. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  925. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  926. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  927. package/dist/core/web/scrapers/tipos.js +23 -0
  928. package/dist/core/web/scrapers/tipos.js.map +1 -0
  929. package/dist/core/web/texto.d.ts +10 -0
  930. package/dist/core/web/texto.d.ts.map +1 -0
  931. package/dist/core/web/texto.js +26 -0
  932. package/dist/core/web/texto.js.map +1 -0
  933. package/dist/core/web/tools.d.ts +91 -0
  934. package/dist/core/web/tools.d.ts.map +1 -0
  935. package/dist/core/web/tools.js +304 -0
  936. package/dist/core/web/tools.js.map +1 -0
  937. package/dist/core/wiki/almacen.d.ts +33 -0
  938. package/dist/core/wiki/almacen.d.ts.map +1 -0
  939. package/dist/core/wiki/almacen.js +93 -0
  940. package/dist/core/wiki/almacen.js.map +1 -0
  941. package/dist/core/wiki/citas.d.ts +111 -0
  942. package/dist/core/wiki/citas.d.ts.map +1 -0
  943. package/dist/core/wiki/citas.js +146 -0
  944. package/dist/core/wiki/citas.js.map +1 -0
  945. package/dist/core/workflows/agent-runner.d.ts +2 -0
  946. package/dist/core/workflows/agent-runner.d.ts.map +1 -1
  947. package/dist/core/workflows/agent-runner.js +131 -44
  948. package/dist/core/workflows/agent-runner.js.map +1 -1
  949. package/dist/core/workflows/builtins.d.ts.map +1 -1
  950. package/dist/core/workflows/builtins.js +1 -0
  951. package/dist/core/workflows/builtins.js.map +1 -1
  952. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  953. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  954. package/dist/core/workflows/contrato/esquema.js +25 -0
  955. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  956. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  957. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  958. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  959. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  960. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  961. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  962. package/dist/core/workflows/contrato/validador.js +56 -0
  963. package/dist/core/workflows/contrato/validador.js.map +1 -0
  964. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  965. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  966. package/dist/core/workflows/contrato/yield.js +80 -0
  967. package/dist/core/workflows/contrato/yield.js.map +1 -0
  968. package/dist/core/workflows/goal-engine/engine.d.ts +17 -0
  969. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
  970. package/dist/core/workflows/goal-engine/engine.js +41 -0
  971. package/dist/core/workflows/goal-engine/engine.js.map +1 -1
  972. package/dist/core/workflows/index.d.ts +8 -0
  973. package/dist/core/workflows/index.d.ts.map +1 -1
  974. package/dist/core/workflows/index.js +4 -0
  975. package/dist/core/workflows/index.js.map +1 -1
  976. package/dist/core/workflows/manager.d.ts +10 -0
  977. package/dist/core/workflows/manager.d.ts.map +1 -1
  978. package/dist/core/workflows/manager.js +35 -11
  979. package/dist/core/workflows/manager.js.map +1 -1
  980. package/dist/core/workflows/runtime.d.ts +13 -0
  981. package/dist/core/workflows/runtime.d.ts.map +1 -1
  982. package/dist/core/workflows/runtime.js +80 -1
  983. package/dist/core/workflows/runtime.js.map +1 -1
  984. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  985. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  986. package/dist/core/workflows/save-as-skill.js +54 -0
  987. package/dist/core/workflows/save-as-skill.js.map +1 -0
  988. package/dist/core/workflows/types.d.ts +49 -0
  989. package/dist/core/workflows/types.d.ts.map +1 -1
  990. package/dist/core/workflows/types.js.map +1 -1
  991. package/dist/extensions/remoto/index.d.ts +22 -0
  992. package/dist/extensions/remoto/index.d.ts.map +1 -0
  993. package/dist/extensions/remoto/index.js +54 -0
  994. package/dist/extensions/remoto/index.js.map +1 -0
  995. package/dist/index.d.ts +1 -17
  996. package/dist/index.d.ts.map +1 -1
  997. package/dist/index.js +7 -16
  998. package/dist/index.js.map +1 -1
  999. package/dist/main.d.ts.map +1 -1
  1000. package/dist/main.js +6 -0
  1001. package/dist/main.js.map +1 -1
  1002. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1003. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1004. package/dist/modes/acp/acp-mode.js +190 -0
  1005. package/dist/modes/acp/acp-mode.js.map +1 -0
  1006. package/dist/modes/acp/events.d.ts +74 -0
  1007. package/dist/modes/acp/events.d.ts.map +1 -0
  1008. package/dist/modes/acp/events.js +116 -0
  1009. package/dist/modes/acp/events.js.map +1 -0
  1010. package/dist/modes/interactive/components/model-selector.d.ts +8 -1
  1011. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1012. package/dist/modes/interactive/components/model-selector.js +41 -7
  1013. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1014. package/dist/modes/interactive/components/settings-selector.d.ts +1 -2
  1015. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1016. package/dist/modes/interactive/components/settings-selector.js +9 -86
  1017. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1018. package/dist/modes/interactive/components/thinking-selector.d.ts +8 -1
  1019. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1020. package/dist/modes/interactive/components/thinking-selector.js +48 -17
  1021. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1022. package/dist/modes/interactive/interactive-mode.d.ts +3 -7
  1023. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1024. package/dist/modes/interactive/interactive-mode.js +137 -146
  1025. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1026. package/dist/modes/print-mode.d.ts.map +1 -1
  1027. package/dist/modes/print-mode.js +11 -0
  1028. package/dist/modes/print-mode.js.map +1 -1
  1029. package/dist/package-manager-cli.d.ts.map +1 -1
  1030. package/dist/package-manager-cli.js +27 -5
  1031. package/dist/package-manager-cli.js.map +1 -1
  1032. package/dist/server/attach.d.ts +56 -0
  1033. package/dist/server/attach.d.ts.map +1 -0
  1034. package/dist/server/attach.js +130 -0
  1035. package/dist/server/attach.js.map +1 -0
  1036. package/dist/server/extension-ops.d.ts +40 -0
  1037. package/dist/server/extension-ops.d.ts.map +1 -0
  1038. package/dist/server/extension-ops.js +146 -0
  1039. package/dist/server/extension-ops.js.map +1 -0
  1040. package/dist/server/pi-server-service.d.ts +85 -0
  1041. package/dist/server/pi-server-service.d.ts.map +1 -0
  1042. package/dist/server/pi-server-service.js +213 -0
  1043. package/dist/server/pi-server-service.js.map +1 -0
  1044. package/dist/server/scheduler-tick.d.ts +32 -0
  1045. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1046. package/dist/server/scheduler-tick.js +47 -0
  1047. package/dist/server/scheduler-tick.js.map +1 -0
  1048. package/dist/server/serve.d.ts +25 -0
  1049. package/dist/server/serve.d.ts.map +1 -0
  1050. package/dist/server/serve.js +83 -0
  1051. package/dist/server/serve.js.map +1 -0
  1052. package/dist/server/transcript.d.ts +38 -0
  1053. package/dist/server/transcript.d.ts.map +1 -0
  1054. package/dist/server/transcript.js +176 -0
  1055. package/dist/server/transcript.js.map +1 -0
  1056. package/dist/skills/skill-creator/SKILL.md +90 -0
  1057. package/dist/telegram/api.d.ts +75 -0
  1058. package/dist/telegram/api.d.ts.map +1 -0
  1059. package/dist/telegram/api.js +104 -0
  1060. package/dist/telegram/api.js.map +1 -0
  1061. package/dist/telegram/bridge.d.ts +85 -0
  1062. package/dist/telegram/bridge.d.ts.map +1 -0
  1063. package/dist/telegram/bridge.js +182 -0
  1064. package/dist/telegram/bridge.js.map +1 -0
  1065. package/dist/telegram/journal.d.ts +67 -0
  1066. package/dist/telegram/journal.d.ts.map +1 -0
  1067. package/dist/telegram/journal.js +119 -0
  1068. package/dist/telegram/journal.js.map +1 -0
  1069. package/dist/telegram/servidor.d.ts +15 -0
  1070. package/dist/telegram/servidor.d.ts.map +1 -0
  1071. package/dist/telegram/servidor.js +74 -0
  1072. package/dist/telegram/servidor.js.map +1 -0
  1073. package/dist/utils/shell.d.ts +11 -0
  1074. package/dist/utils/shell.d.ts.map +1 -1
  1075. package/dist/utils/shell.js +11 -0
  1076. package/dist/utils/shell.js.map +1 -1
  1077. package/dist/utils/version-check.d.ts.map +1 -1
  1078. package/dist/utils/version-check.js +29 -1
  1079. package/dist/utils/version-check.js.map +1 -1
  1080. package/docs/compaction.md +10 -10
  1081. package/docs/compliance.md +241 -0
  1082. package/docs/containerization.md +24 -24
  1083. package/docs/custom-provider.md +10 -10
  1084. package/docs/development.md +47 -10
  1085. package/docs/docs.json +14 -2
  1086. package/docs/environment-variables.md +20 -17
  1087. package/docs/extensions.md +51 -49
  1088. package/docs/index.md +15 -21
  1089. package/docs/json.md +3 -3
  1090. package/docs/keybindings.md +5 -5
  1091. package/docs/llama-cpp.md +7 -7
  1092. package/docs/models.md +12 -12
  1093. package/docs/packages.md +45 -45
  1094. package/docs/prompt-templates.md +5 -5
  1095. package/docs/providers.md +12 -12
  1096. package/docs/quickstart.md +39 -39
  1097. package/docs/rpc.md +12 -12
  1098. package/docs/sdk.md +38 -38
  1099. package/docs/security.md +26 -21
  1100. package/docs/session-format.md +7 -7
  1101. package/docs/sessions.md +14 -14
  1102. package/docs/settings.md +45 -20
  1103. package/docs/shell-aliases.md +2 -2
  1104. package/docs/skills.md +11 -11
  1105. package/docs/terminal-setup.md +14 -14
  1106. package/docs/termux.md +7 -7
  1107. package/docs/themes.md +11 -11
  1108. package/docs/tmux.md +4 -4
  1109. package/docs/tui.md +3 -3
  1110. package/docs/usage.md +54 -54
  1111. package/docs/windows.md +2 -2
  1112. package/examples/sdk/12-full-control.ts +9 -0
  1113. package/npm-shrinkwrap.json +35 -251
  1114. package/package.json +10 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-gemini.d.ts","sourceRoot":"","sources":["../../../../src/core/usage/cuota/google-gemini.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAyC,MAAM,YAAY,CAAC;AAwDxF,eAAO,MAAM,qBAAqB,EAAE,cA0CnC,CAAC","sourcesContent":["/**\n * Cuota de Gemini (Google Code Assist / Antigravity) — dos llamadas: primero\n * `loadCodeAssist` para resolver el proyecto de Cloud, luego\n * `retrieveUserQuota` con ese proyecto. Si la credencial ya trae un\n * `projectId` guardado se usa ese y se ahorra la primera petición.\n */\n\nimport { type ConsultorCuota, ErrorConsultaCuota, type VentanaCuota } from \"./tipos.ts\";\n\nconst BASE_URL = \"https://cloudcode-pa.googleapis.com\";\nconst PROVEEDOR = \"google\";\n\ninterface CargaCodeAssist {\n\tcloudaicompanionProject?: string | { id?: string };\n}\n\ninterface CuboBruto {\n\tmodelId?: string;\n\tremainingFraction?: number;\n\tresetTime?: string;\n}\n\ninterface RespuestaCuota {\n\tbuckets?: CuboBruto[];\n}\n\nfunction proyectoDe(carga: CargaCodeAssist | undefined): string | undefined {\n\tconst p = carga?.cloudaicompanionProject;\n\tif (typeof p === \"string\") return p;\n\tif (p && typeof p === \"object\") return p.id;\n\treturn undefined;\n}\n\nasync function pedir<T>(\n\tfetchImpl: typeof fetch,\n\turl: string,\n\ttoken: string,\n\tcuerpo: unknown,\n\tseñal: AbortSignal | undefined,\n): Promise<T> {\n\tlet respuesta: Response;\n\ttry {\n\t\trespuesta = await fetchImpl(url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { authorization: `Bearer ${token}`, \"content-type\": \"application/json\" },\n\t\t\tbody: JSON.stringify(cuerpo),\n\t\t\tsignal: señal,\n\t\t});\n\t} catch (error) {\n\t\tthrow new ErrorConsultaCuota(PROVEEDOR, `no se pudo contactar con Google: ${String(error)}`, { cause: error });\n\t}\n\tif (!respuesta.ok) {\n\t\tthrow new ErrorConsultaCuota(PROVEEDOR, `Google respondió ${respuesta.status} ${respuesta.statusText}`);\n\t}\n\ttry {\n\t\treturn (await respuesta.json()) as T;\n\t} catch (error) {\n\t\tthrow new ErrorConsultaCuota(PROVEEDOR, `la respuesta de Google no es JSON válido: ${String(error)}`, {\n\t\t\tcause: error,\n\t\t});\n\t}\n}\n\nexport const consultorGoogleGemini: ConsultorCuota = {\n\tid: PROVEEDOR,\n\tsoporta: (credencial) => credencial.type === \"oauth\",\n\tasync consultar({ credencial, fetch: fetchImpl = fetch, señal }) {\n\t\tif (credencial.type !== \"oauth\") return null;\n\n\t\tconst proyectoGuardado = typeof credencial.projectId === \"string\" ? credencial.projectId : undefined;\n\t\tlet proyecto = proyectoGuardado;\n\t\tif (!proyecto) {\n\t\t\tconst carga = await pedir<CargaCodeAssist>(\n\t\t\t\tfetchImpl,\n\t\t\t\t`${BASE_URL}/v1internal:loadCodeAssist`,\n\t\t\t\tcredencial.access,\n\t\t\t\t{ metadata: { ideType: \"IDE_UNSPECIFIED\", platform: \"PLATFORM_UNSPECIFIED\", pluginType: \"GEMINI\" } },\n\t\t\t\tseñal,\n\t\t\t);\n\t\t\tproyecto = proyectoDe(carga);\n\t\t}\n\n\t\tconst cuota = await pedir<RespuestaCuota>(\n\t\t\tfetchImpl,\n\t\t\t`${BASE_URL}/v1internal:retrieveUserQuota`,\n\t\t\tcredencial.access,\n\t\t\tproyecto ? { project: proyecto } : {},\n\t\t\tseñal,\n\t\t);\n\n\t\tconst ventanas = (cuota.buckets ?? [])\n\t\t\t.filter((b): b is CuboBruto & { remainingFraction: number } => typeof b.remainingFraction === \"number\")\n\t\t\t.map((b): VentanaCuota => {\n\t\t\t\tconst restante = Math.min(Math.max(b.remainingFraction, 0), 1);\n\t\t\t\tconst seReiniciaBruto = b.resetTime ? Date.parse(b.resetTime) : Number.NaN;\n\t\t\t\treturn {\n\t\t\t\t\tetiqueta: b.modelId ?? \"Gemini\",\n\t\t\t\t\tusado: Math.round((1 - restante) * 1000) / 10,\n\t\t\t\t\tlimite: 100,\n\t\t\t\t\tseReinicia: Number.isFinite(seReiniciaBruto) ? seReiniciaBruto : null,\n\t\t\t\t\tunidad: \"porcentaje\",\n\t\t\t\t};\n\t\t\t});\n\t\treturn ventanas.length > 0 ? ventanas : null;\n\t},\n};\n"]}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Cuota de Gemini (Google Code Assist / Antigravity) — dos llamadas: primero
3
+ * `loadCodeAssist` para resolver el proyecto de Cloud, luego
4
+ * `retrieveUserQuota` con ese proyecto. Si la credencial ya trae un
5
+ * `projectId` guardado se usa ese y se ahorra la primera petición.
6
+ */
7
+ import { ErrorConsultaCuota } from "./tipos.js";
8
+ const BASE_URL = "https://cloudcode-pa.googleapis.com";
9
+ const PROVEEDOR = "google";
10
+ function proyectoDe(carga) {
11
+ const p = carga?.cloudaicompanionProject;
12
+ if (typeof p === "string")
13
+ return p;
14
+ if (p && typeof p === "object")
15
+ return p.id;
16
+ return undefined;
17
+ }
18
+ async function pedir(fetchImpl, url, token, cuerpo, señal) {
19
+ let respuesta;
20
+ try {
21
+ respuesta = await fetchImpl(url, {
22
+ method: "POST",
23
+ headers: { authorization: `Bearer ${token}`, "content-type": "application/json" },
24
+ body: JSON.stringify(cuerpo),
25
+ signal: señal,
26
+ });
27
+ }
28
+ catch (error) {
29
+ throw new ErrorConsultaCuota(PROVEEDOR, `no se pudo contactar con Google: ${String(error)}`, { cause: error });
30
+ }
31
+ if (!respuesta.ok) {
32
+ throw new ErrorConsultaCuota(PROVEEDOR, `Google respondió ${respuesta.status} ${respuesta.statusText}`);
33
+ }
34
+ try {
35
+ return (await respuesta.json());
36
+ }
37
+ catch (error) {
38
+ throw new ErrorConsultaCuota(PROVEEDOR, `la respuesta de Google no es JSON válido: ${String(error)}`, {
39
+ cause: error,
40
+ });
41
+ }
42
+ }
43
+ export const consultorGoogleGemini = {
44
+ id: PROVEEDOR,
45
+ soporta: (credencial) => credencial.type === "oauth",
46
+ async consultar({ credencial, fetch: fetchImpl = fetch, señal }) {
47
+ if (credencial.type !== "oauth")
48
+ return null;
49
+ const proyectoGuardado = typeof credencial.projectId === "string" ? credencial.projectId : undefined;
50
+ let proyecto = proyectoGuardado;
51
+ if (!proyecto) {
52
+ const carga = await pedir(fetchImpl, `${BASE_URL}/v1internal:loadCodeAssist`, credencial.access, { metadata: { ideType: "IDE_UNSPECIFIED", platform: "PLATFORM_UNSPECIFIED", pluginType: "GEMINI" } }, señal);
53
+ proyecto = proyectoDe(carga);
54
+ }
55
+ const cuota = await pedir(fetchImpl, `${BASE_URL}/v1internal:retrieveUserQuota`, credencial.access, proyecto ? { project: proyecto } : {}, señal);
56
+ const ventanas = (cuota.buckets ?? [])
57
+ .filter((b) => typeof b.remainingFraction === "number")
58
+ .map((b) => {
59
+ const restante = Math.min(Math.max(b.remainingFraction, 0), 1);
60
+ const seReiniciaBruto = b.resetTime ? Date.parse(b.resetTime) : Number.NaN;
61
+ return {
62
+ etiqueta: b.modelId ?? "Gemini",
63
+ usado: Math.round((1 - restante) * 1000) / 10,
64
+ limite: 100,
65
+ seReinicia: Number.isFinite(seReiniciaBruto) ? seReiniciaBruto : null,
66
+ unidad: "porcentaje",
67
+ };
68
+ });
69
+ return ventanas.length > 0 ? ventanas : null;
70
+ },
71
+ };
72
+ //# sourceMappingURL=google-gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-gemini.js","sourceRoot":"","sources":["../../../../src/core/usage/cuota/google-gemini.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAuB,kBAAkB,EAAqB,MAAM,YAAY,CAAC;AAExF,MAAM,QAAQ,GAAG,qCAAqC,CAAC;AACvD,MAAM,SAAS,GAAG,QAAQ,CAAC;AAgB3B,SAAS,UAAU,CAAC,KAAkC,EAAsB;IAC3E,MAAM,CAAC,GAAG,KAAK,EAAE,uBAAuB,CAAC;IACzC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5C,OAAO,SAAS,CAAC;AAAA,CACjB;AAED,KAAK,UAAU,KAAK,CACnB,SAAuB,EACvB,GAAW,EACX,KAAa,EACb,MAAe,EACf,MAA8B,EACjB;IACb,IAAI,SAAmB,CAAC;IACxB,IAAI,CAAC;QACJ,SAAS,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YACjF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC5B,MAAM,EAAE,MAAK;SACb,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,kBAAkB,CAAC,SAAS,EAAE,oCAAoC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,kBAAkB,CAAC,SAAS,EAAE,qBAAoB,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,CAAC;QACJ,OAAO,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,kBAAkB,CAAC,SAAS,EAAE,8CAA6C,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;YACrG,KAAK,EAAE,KAAK;SACZ,CAAC,CAAC;IACJ,CAAC;AAAA,CACD;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACpD,EAAE,EAAE,SAAS;IACb,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO;IACpD,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,MAAK,EAAE,EAAE;QAChE,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAE7C,MAAM,gBAAgB,GAAG,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACrG,IAAI,QAAQ,GAAG,gBAAgB,CAAC;QAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,MAAM,KAAK,CACxB,SAAS,EACT,GAAG,QAAQ,4BAA4B,EACvC,UAAU,CAAC,MAAM,EACjB,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EACpG,MAAK,CACL,CAAC;YACF,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,KAAK,CACxB,SAAS,EACT,GAAG,QAAQ,+BAA+B,EAC1C,UAAU,CAAC,MAAM,EACjB,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EACrC,MAAK,CACL,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,EAAkD,EAAE,CAAC,OAAO,CAAC,CAAC,iBAAiB,KAAK,QAAQ,CAAC;aACtG,GAAG,CAAC,CAAC,CAAC,EAAgB,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,eAAe,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC3E,OAAO;gBACN,QAAQ,EAAE,CAAC,CAAC,OAAO,IAAI,QAAQ;gBAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;gBAC7C,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;gBACrE,MAAM,EAAE,YAAY;aACpB,CAAC;QAAA,CACF,CAAC,CAAC;QACJ,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAAA,CAC7C;CACD,CAAC","sourcesContent":["/**\n * Cuota de Gemini (Google Code Assist / Antigravity) — dos llamadas: primero\n * `loadCodeAssist` para resolver el proyecto de Cloud, luego\n * `retrieveUserQuota` con ese proyecto. Si la credencial ya trae un\n * `projectId` guardado se usa ese y se ahorra la primera petición.\n */\n\nimport { type ConsultorCuota, ErrorConsultaCuota, type VentanaCuota } from \"./tipos.ts\";\n\nconst BASE_URL = \"https://cloudcode-pa.googleapis.com\";\nconst PROVEEDOR = \"google\";\n\ninterface CargaCodeAssist {\n\tcloudaicompanionProject?: string | { id?: string };\n}\n\ninterface CuboBruto {\n\tmodelId?: string;\n\tremainingFraction?: number;\n\tresetTime?: string;\n}\n\ninterface RespuestaCuota {\n\tbuckets?: CuboBruto[];\n}\n\nfunction proyectoDe(carga: CargaCodeAssist | undefined): string | undefined {\n\tconst p = carga?.cloudaicompanionProject;\n\tif (typeof p === \"string\") return p;\n\tif (p && typeof p === \"object\") return p.id;\n\treturn undefined;\n}\n\nasync function pedir<T>(\n\tfetchImpl: typeof fetch,\n\turl: string,\n\ttoken: string,\n\tcuerpo: unknown,\n\tseñal: AbortSignal | undefined,\n): Promise<T> {\n\tlet respuesta: Response;\n\ttry {\n\t\trespuesta = await fetchImpl(url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { authorization: `Bearer ${token}`, \"content-type\": \"application/json\" },\n\t\t\tbody: JSON.stringify(cuerpo),\n\t\t\tsignal: señal,\n\t\t});\n\t} catch (error) {\n\t\tthrow new ErrorConsultaCuota(PROVEEDOR, `no se pudo contactar con Google: ${String(error)}`, { cause: error });\n\t}\n\tif (!respuesta.ok) {\n\t\tthrow new ErrorConsultaCuota(PROVEEDOR, `Google respondió ${respuesta.status} ${respuesta.statusText}`);\n\t}\n\ttry {\n\t\treturn (await respuesta.json()) as T;\n\t} catch (error) {\n\t\tthrow new ErrorConsultaCuota(PROVEEDOR, `la respuesta de Google no es JSON válido: ${String(error)}`, {\n\t\t\tcause: error,\n\t\t});\n\t}\n}\n\nexport const consultorGoogleGemini: ConsultorCuota = {\n\tid: PROVEEDOR,\n\tsoporta: (credencial) => credencial.type === \"oauth\",\n\tasync consultar({ credencial, fetch: fetchImpl = fetch, señal }) {\n\t\tif (credencial.type !== \"oauth\") return null;\n\n\t\tconst proyectoGuardado = typeof credencial.projectId === \"string\" ? credencial.projectId : undefined;\n\t\tlet proyecto = proyectoGuardado;\n\t\tif (!proyecto) {\n\t\t\tconst carga = await pedir<CargaCodeAssist>(\n\t\t\t\tfetchImpl,\n\t\t\t\t`${BASE_URL}/v1internal:loadCodeAssist`,\n\t\t\t\tcredencial.access,\n\t\t\t\t{ metadata: { ideType: \"IDE_UNSPECIFIED\", platform: \"PLATFORM_UNSPECIFIED\", pluginType: \"GEMINI\" } },\n\t\t\t\tseñal,\n\t\t\t);\n\t\t\tproyecto = proyectoDe(carga);\n\t\t}\n\n\t\tconst cuota = await pedir<RespuestaCuota>(\n\t\t\tfetchImpl,\n\t\t\t`${BASE_URL}/v1internal:retrieveUserQuota`,\n\t\t\tcredencial.access,\n\t\t\tproyecto ? { project: proyecto } : {},\n\t\t\tseñal,\n\t\t);\n\n\t\tconst ventanas = (cuota.buckets ?? [])\n\t\t\t.filter((b): b is CuboBruto & { remainingFraction: number } => typeof b.remainingFraction === \"number\")\n\t\t\t.map((b): VentanaCuota => {\n\t\t\t\tconst restante = Math.min(Math.max(b.remainingFraction, 0), 1);\n\t\t\t\tconst seReiniciaBruto = b.resetTime ? Date.parse(b.resetTime) : Number.NaN;\n\t\t\t\treturn {\n\t\t\t\t\tetiqueta: b.modelId ?? \"Gemini\",\n\t\t\t\t\tusado: Math.round((1 - restante) * 1000) / 10,\n\t\t\t\t\tlimite: 100,\n\t\t\t\t\tseReinicia: Number.isFinite(seReiniciaBruto) ? seReiniciaBruto : null,\n\t\t\t\t\tunidad: \"porcentaje\",\n\t\t\t\t};\n\t\t\t});\n\t\treturn ventanas.length > 0 ? ventanas : null;\n\t},\n};\n"]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Registro de consultores de cuota, uno por proveedor.
3
+ *
4
+ * `ada-cli usage` (ver `../aggregate.ts`) dice lo GASTADO. Esto dice lo que
5
+ * QUEDA: se lo pregunta al proveedor, con la credencial que ya tiene
6
+ * guardada en `auth.json`, y cachea la respuesta unos minutos para no sumar
7
+ * una petición HTTP a cada turno.
8
+ */
9
+ import type { Credential } from "@earendil-works/pi-ai";
10
+ import type { ContextoConsulta, VentanaCuota } from "./tipos.ts";
11
+ export { limpiarCacheCuota } from "./cache.ts";
12
+ export { type ConsultorCuota, type ContextoConsulta, ErrorConsultaCuota, type UnidadCuota, type VentanaCuota, } from "./tipos.ts";
13
+ /** Proveedores para los que hay un consultor de cuota, en el orden en que se enseñan. */
14
+ export declare const PROVEEDORES_CON_CUOTA: readonly string[];
15
+ /**
16
+ * Cuánto queda del plan para un proveedor, con la credencial dada.
17
+ *
18
+ * `null` = no hay credencial, el proveedor no la reconoce, o el proveedor no
19
+ * publica cuota para ese tipo de credencial (p.ej. la API key de Anthropic).
20
+ * Lanza {@link ErrorConsultaCuota} si la consulta llega a intentarse y falla:
21
+ * eso NUNCA se reporta como `null`, o un fallo de red se leería como "sin
22
+ * límite".
23
+ */
24
+ export declare function consultarCuota(proveedor: string, credencial: Credential | undefined, opciones?: Omit<ContextoConsulta, "credencial">): Promise<VentanaCuota[] | null>;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/usage/cuota/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAOxD,OAAO,KAAK,EAAkB,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,GACjB,MAAM,YAAY,CAAC;AAUpB,0FAAyF;AACzF,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAA6B,CAAC;AAYjF;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CACnC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GAAG,SAAS,EAClC,QAAQ,GAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAM,GACjD,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAIhC","sourcesContent":["/**\n * Registro de consultores de cuota, uno por proveedor.\n *\n * `ada-cli usage` (ver `../aggregate.ts`) dice lo GASTADO. Esto dice lo que\n * QUEDA: se lo pregunta al proveedor, con la credencial que ya tiene\n * guardada en `auth.json`, y cachea la respuesta unos minutos para no sumar\n * una petición HTTP a cada turno.\n */\n\nimport type { Credential } from \"@earendil-works/pi-ai\";\nimport { consultorAnthropic } from \"./anthropic.ts\";\nimport { conCache } from \"./cache.ts\";\nimport { consultorGithubCopilot } from \"./github-copilot.ts\";\nimport { consultorGoogleGemini } from \"./google-gemini.ts\";\nimport { consultorOpenAiCodex } from \"./openai-codex.ts\";\nimport { consultorOpenRouter } from \"./openrouter.ts\";\nimport type { ConsultorCuota, ContextoConsulta, VentanaCuota } from \"./tipos.ts\";\n\nexport { limpiarCacheCuota } from \"./cache.ts\";\nexport {\n\ttype ConsultorCuota,\n\ttype ContextoConsulta,\n\tErrorConsultaCuota,\n\ttype UnidadCuota,\n\ttype VentanaCuota,\n} from \"./tipos.ts\";\n\nconst CONSULTORES: Record<string, ConsultorCuota> = {\n\tanthropic: consultorAnthropic,\n\topenrouter: consultorOpenRouter,\n\t\"openai-codex\": consultorOpenAiCodex,\n\t\"github-copilot\": consultorGithubCopilot,\n\tgoogle: consultorGoogleGemini,\n};\n\n/** Proveedores para los que hay un consultor de cuota, en el orden en que se enseñan. */\nexport const PROVEEDORES_CON_CUOTA: readonly string[] = Object.keys(CONSULTORES);\n\n/**\n * Los últimos caracteres del secreto bastan para distinguir dos credenciales\n * del mismo proveedor sin quedarse el secreto entero más tiempo del\n * necesario dentro de la clave de caché.\n */\nfunction claveCache(proveedor: string, credencial: Credential): string {\n\tconst identidad = credencial.type === \"oauth\" ? credencial.access : (credencial.key ?? \"\");\n\treturn `${proveedor}:${identidad.slice(-12)}`;\n}\n\n/**\n * Cuánto queda del plan para un proveedor, con la credencial dada.\n *\n * `null` = no hay credencial, el proveedor no la reconoce, o el proveedor no\n * publica cuota para ese tipo de credencial (p.ej. la API key de Anthropic).\n * Lanza {@link ErrorConsultaCuota} si la consulta llega a intentarse y falla:\n * eso NUNCA se reporta como `null`, o un fallo de red se leería como \"sin\n * límite\".\n */\nexport async function consultarCuota(\n\tproveedor: string,\n\tcredencial: Credential | undefined,\n\topciones: Omit<ContextoConsulta, \"credencial\"> = {},\n): Promise<VentanaCuota[] | null> {\n\tconst consultor = CONSULTORES[proveedor];\n\tif (!consultor || !credencial || !consultor.soporta(credencial)) return null;\n\treturn conCache(claveCache(proveedor, credencial), () => consultor.consultar({ ...opciones, credencial }));\n}\n"]}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Registro de consultores de cuota, uno por proveedor.
3
+ *
4
+ * `ada-cli usage` (ver `../aggregate.ts`) dice lo GASTADO. Esto dice lo que
5
+ * QUEDA: se lo pregunta al proveedor, con la credencial que ya tiene
6
+ * guardada en `auth.json`, y cachea la respuesta unos minutos para no sumar
7
+ * una petición HTTP a cada turno.
8
+ */
9
+ import { consultorAnthropic } from "./anthropic.js";
10
+ import { conCache } from "./cache.js";
11
+ import { consultorGithubCopilot } from "./github-copilot.js";
12
+ import { consultorGoogleGemini } from "./google-gemini.js";
13
+ import { consultorOpenAiCodex } from "./openai-codex.js";
14
+ import { consultorOpenRouter } from "./openrouter.js";
15
+ export { limpiarCacheCuota } from "./cache.js";
16
+ export { ErrorConsultaCuota, } from "./tipos.js";
17
+ const CONSULTORES = {
18
+ anthropic: consultorAnthropic,
19
+ openrouter: consultorOpenRouter,
20
+ "openai-codex": consultorOpenAiCodex,
21
+ "github-copilot": consultorGithubCopilot,
22
+ google: consultorGoogleGemini,
23
+ };
24
+ /** Proveedores para los que hay un consultor de cuota, en el orden en que se enseñan. */
25
+ export const PROVEEDORES_CON_CUOTA = Object.keys(CONSULTORES);
26
+ /**
27
+ * Los últimos caracteres del secreto bastan para distinguir dos credenciales
28
+ * del mismo proveedor sin quedarse el secreto entero más tiempo del
29
+ * necesario dentro de la clave de caché.
30
+ */
31
+ function claveCache(proveedor, credencial) {
32
+ const identidad = credencial.type === "oauth" ? credencial.access : (credencial.key ?? "");
33
+ return `${proveedor}:${identidad.slice(-12)}`;
34
+ }
35
+ /**
36
+ * Cuánto queda del plan para un proveedor, con la credencial dada.
37
+ *
38
+ * `null` = no hay credencial, el proveedor no la reconoce, o el proveedor no
39
+ * publica cuota para ese tipo de credencial (p.ej. la API key de Anthropic).
40
+ * Lanza {@link ErrorConsultaCuota} si la consulta llega a intentarse y falla:
41
+ * eso NUNCA se reporta como `null`, o un fallo de red se leería como "sin
42
+ * límite".
43
+ */
44
+ export async function consultarCuota(proveedor, credencial, opciones = {}) {
45
+ const consultor = CONSULTORES[proveedor];
46
+ if (!consultor || !credencial || !consultor.soporta(credencial))
47
+ return null;
48
+ return conCache(claveCache(proveedor, credencial), () => consultor.consultar({ ...opciones, credencial }));
49
+ }
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/usage/cuota/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAGN,kBAAkB,GAGlB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,GAAmC;IACnD,SAAS,EAAE,kBAAkB;IAC7B,UAAU,EAAE,mBAAmB;IAC/B,cAAc,EAAE,oBAAoB;IACpC,gBAAgB,EAAE,sBAAsB;IACxC,MAAM,EAAE,qBAAqB;CAC7B,CAAC;AAEF,0FAAyF;AACzF,MAAM,CAAC,MAAM,qBAAqB,GAAsB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAEjF;;;;GAIG;AACH,SAAS,UAAU,CAAC,SAAiB,EAAE,UAAsB,EAAU;IACtE,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC3F,OAAO,GAAG,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAAA,CAC9C;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,SAAiB,EACjB,UAAkC,EAClC,QAAQ,GAAyC,EAAE,EAClB;IACjC,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,OAAO,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AAAA,CAC3G","sourcesContent":["/**\n * Registro de consultores de cuota, uno por proveedor.\n *\n * `ada-cli usage` (ver `../aggregate.ts`) dice lo GASTADO. Esto dice lo que\n * QUEDA: se lo pregunta al proveedor, con la credencial que ya tiene\n * guardada en `auth.json`, y cachea la respuesta unos minutos para no sumar\n * una petición HTTP a cada turno.\n */\n\nimport type { Credential } from \"@earendil-works/pi-ai\";\nimport { consultorAnthropic } from \"./anthropic.ts\";\nimport { conCache } from \"./cache.ts\";\nimport { consultorGithubCopilot } from \"./github-copilot.ts\";\nimport { consultorGoogleGemini } from \"./google-gemini.ts\";\nimport { consultorOpenAiCodex } from \"./openai-codex.ts\";\nimport { consultorOpenRouter } from \"./openrouter.ts\";\nimport type { ConsultorCuota, ContextoConsulta, VentanaCuota } from \"./tipos.ts\";\n\nexport { limpiarCacheCuota } from \"./cache.ts\";\nexport {\n\ttype ConsultorCuota,\n\ttype ContextoConsulta,\n\tErrorConsultaCuota,\n\ttype UnidadCuota,\n\ttype VentanaCuota,\n} from \"./tipos.ts\";\n\nconst CONSULTORES: Record<string, ConsultorCuota> = {\n\tanthropic: consultorAnthropic,\n\topenrouter: consultorOpenRouter,\n\t\"openai-codex\": consultorOpenAiCodex,\n\t\"github-copilot\": consultorGithubCopilot,\n\tgoogle: consultorGoogleGemini,\n};\n\n/** Proveedores para los que hay un consultor de cuota, en el orden en que se enseñan. */\nexport const PROVEEDORES_CON_CUOTA: readonly string[] = Object.keys(CONSULTORES);\n\n/**\n * Los últimos caracteres del secreto bastan para distinguir dos credenciales\n * del mismo proveedor sin quedarse el secreto entero más tiempo del\n * necesario dentro de la clave de caché.\n */\nfunction claveCache(proveedor: string, credencial: Credential): string {\n\tconst identidad = credencial.type === \"oauth\" ? credencial.access : (credencial.key ?? \"\");\n\treturn `${proveedor}:${identidad.slice(-12)}`;\n}\n\n/**\n * Cuánto queda del plan para un proveedor, con la credencial dada.\n *\n * `null` = no hay credencial, el proveedor no la reconoce, o el proveedor no\n * publica cuota para ese tipo de credencial (p.ej. la API key de Anthropic).\n * Lanza {@link ErrorConsultaCuota} si la consulta llega a intentarse y falla:\n * eso NUNCA se reporta como `null`, o un fallo de red se leería como \"sin\n * límite\".\n */\nexport async function consultarCuota(\n\tproveedor: string,\n\tcredencial: Credential | undefined,\n\topciones: Omit<ContextoConsulta, \"credencial\"> = {},\n): Promise<VentanaCuota[] | null> {\n\tconst consultor = CONSULTORES[proveedor];\n\tif (!consultor || !credencial || !consultor.soporta(credencial)) return null;\n\treturn conCache(claveCache(proveedor, credencial), () => consultor.consultar({ ...opciones, credencial }));\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Cuota de OpenAI Codex (ChatGPT) — endpoint interno de cuenta, no la API de
3
+ * pago por token. Vive en `chatgpt.com`, no en `api.openai.com`: no hay
4
+ * override de `baseUrl` que valga aquí, un proxy de streaming lo devolvería
5
+ * en 404.
6
+ */
7
+ import { type ConsultorCuota } from "./tipos.ts";
8
+ export declare const consultorOpenAiCodex: ConsultorCuota;
9
+ //# sourceMappingURL=openai-codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-codex.d.ts","sourceRoot":"","sources":["../../../../src/core/usage/cuota/openai-codex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAyC,MAAM,YAAY,CAAC;AA4BxF,eAAO,MAAM,oBAAoB,EAAE,cA4ClC,CAAC","sourcesContent":["/**\n * Cuota de OpenAI Codex (ChatGPT) — endpoint interno de cuenta, no la API de\n * pago por token. Vive en `chatgpt.com`, no en `api.openai.com`: no hay\n * override de `baseUrl` que valga aquí, un proxy de streaming lo devolvería\n * en 404.\n */\n\nimport { type ConsultorCuota, ErrorConsultaCuota, type VentanaCuota } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://chatgpt.com/backend-api/wham/usage\";\n\ninterface VentanaBruta {\n\tused_percent?: number;\n\treset_at?: number;\n}\n\ninterface RespuestaCodex {\n\trate_limit?: {\n\t\tprimary_window?: VentanaBruta | null;\n\t\tsecondary_window?: VentanaBruta | null;\n\t} | null;\n}\n\nfunction aVentana(etiqueta: string, cubo: VentanaBruta | null | undefined): VentanaCuota | undefined {\n\tif (!cubo || typeof cubo.used_percent !== \"number\") return undefined;\n\tconst seReinicia = typeof cubo.reset_at === \"number\" && cubo.reset_at > 0 ? cubo.reset_at * 1000 : null;\n\treturn {\n\t\tetiqueta,\n\t\tusado: Math.min(Math.max(cubo.used_percent, 0), 100),\n\t\tlimite: 100,\n\t\tseReinicia,\n\t\tunidad: \"porcentaje\",\n\t};\n}\n\nexport const consultorOpenAiCodex: ConsultorCuota = {\n\tid: \"openai-codex\",\n\tsoporta: (credencial) => credencial.type === \"oauth\",\n\tasync consultar({ credencial, fetch: fetchImpl = fetch, señal }) {\n\t\tif (credencial.type !== \"oauth\") return null;\n\n\t\tconst headers: Record<string, string> = { authorization: `Bearer ${credencial.access}` };\n\t\tconst accountId = credencial.accountId;\n\t\tif (typeof accountId === \"string\" && accountId) headers[\"chatgpt-account-id\"] = accountId;\n\n\t\tlet respuesta: Response;\n\t\ttry {\n\t\t\trespuesta = await fetchImpl(ENDPOINT, { headers, signal: señal });\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"openai-codex\", `no se pudo contactar con OpenAI Codex: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tif (!respuesta.ok) {\n\t\t\tthrow new ErrorConsultaCuota(\n\t\t\t\t\"openai-codex\",\n\t\t\t\t`OpenAI Codex respondió ${respuesta.status} ${respuesta.statusText}`,\n\t\t\t);\n\t\t}\n\n\t\tlet datos: RespuestaCodex;\n\t\ttry {\n\t\t\tdatos = (await respuesta.json()) as RespuestaCodex;\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\n\t\t\t\t\"openai-codex\",\n\t\t\t\t`la respuesta de OpenAI Codex no es JSON válido: ${String(error)}`,\n\t\t\t\t{\n\t\t\t\t\tcause: error,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst ventanas = [\n\t\t\taVentana(\"Ventana principal\", datos.rate_limit?.primary_window),\n\t\t\taVentana(\"Ventana secundaria\", datos.rate_limit?.secondary_window),\n\t\t].filter((v): v is VentanaCuota => v !== undefined);\n\t\treturn ventanas.length > 0 ? ventanas : null;\n\t},\n};\n"]}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Cuota de OpenAI Codex (ChatGPT) — endpoint interno de cuenta, no la API de
3
+ * pago por token. Vive en `chatgpt.com`, no en `api.openai.com`: no hay
4
+ * override de `baseUrl` que valga aquí, un proxy de streaming lo devolvería
5
+ * en 404.
6
+ */
7
+ import { ErrorConsultaCuota } from "./tipos.js";
8
+ const ENDPOINT = "https://chatgpt.com/backend-api/wham/usage";
9
+ function aVentana(etiqueta, cubo) {
10
+ if (!cubo || typeof cubo.used_percent !== "number")
11
+ return undefined;
12
+ const seReinicia = typeof cubo.reset_at === "number" && cubo.reset_at > 0 ? cubo.reset_at * 1000 : null;
13
+ return {
14
+ etiqueta,
15
+ usado: Math.min(Math.max(cubo.used_percent, 0), 100),
16
+ limite: 100,
17
+ seReinicia,
18
+ unidad: "porcentaje",
19
+ };
20
+ }
21
+ export const consultorOpenAiCodex = {
22
+ id: "openai-codex",
23
+ soporta: (credencial) => credencial.type === "oauth",
24
+ async consultar({ credencial, fetch: fetchImpl = fetch, señal }) {
25
+ if (credencial.type !== "oauth")
26
+ return null;
27
+ const headers = { authorization: `Bearer ${credencial.access}` };
28
+ const accountId = credencial.accountId;
29
+ if (typeof accountId === "string" && accountId)
30
+ headers["chatgpt-account-id"] = accountId;
31
+ let respuesta;
32
+ try {
33
+ respuesta = await fetchImpl(ENDPOINT, { headers, signal: señal });
34
+ }
35
+ catch (error) {
36
+ throw new ErrorConsultaCuota("openai-codex", `no se pudo contactar con OpenAI Codex: ${String(error)}`, {
37
+ cause: error,
38
+ });
39
+ }
40
+ if (!respuesta.ok) {
41
+ throw new ErrorConsultaCuota("openai-codex", `OpenAI Codex respondió ${respuesta.status} ${respuesta.statusText}`);
42
+ }
43
+ let datos;
44
+ try {
45
+ datos = (await respuesta.json());
46
+ }
47
+ catch (error) {
48
+ throw new ErrorConsultaCuota("openai-codex", `la respuesta de OpenAI Codex no es JSON válido: ${String(error)}`, {
49
+ cause: error,
50
+ });
51
+ }
52
+ const ventanas = [
53
+ aVentana("Ventana principal", datos.rate_limit?.primary_window),
54
+ aVentana("Ventana secundaria", datos.rate_limit?.secondary_window),
55
+ ].filter((v) => v !== undefined);
56
+ return ventanas.length > 0 ? ventanas : null;
57
+ },
58
+ };
59
+ //# sourceMappingURL=openai-codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-codex.js","sourceRoot":"","sources":["../../../../src/core/usage/cuota/openai-codex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAuB,kBAAkB,EAAqB,MAAM,YAAY,CAAC;AAExF,MAAM,QAAQ,GAAG,4CAA4C,CAAC;AAc9D,SAAS,QAAQ,CAAC,QAAgB,EAAE,IAAqC,EAA4B;IACpG,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACrE,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACxG,OAAO;QACN,QAAQ;QACR,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;QACpD,MAAM,EAAE,GAAG;QACX,UAAU;QACV,MAAM,EAAE,YAAY;KACpB,CAAC;AAAA,CACF;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAmB;IACnD,EAAE,EAAE,cAAc;IAClB,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO;IACpD,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,MAAK,EAAE,EAAE;QAChE,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAE7C,MAAM,OAAO,GAA2B,EAAE,aAAa,EAAE,UAAU,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACzF,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;QACvC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS;YAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,SAAS,CAAC;QAE1F,IAAI,SAAmB,CAAC;QACxB,IAAI,CAAC;YACJ,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAK,EAAE,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,cAAc,EAAE,0CAA0C,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;gBACvG,KAAK,EAAE,KAAK;aACZ,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,IAAI,kBAAkB,CAC3B,cAAc,EACd,2BAA0B,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,EAAE,CACpE,CAAC;QACH,CAAC;QAED,IAAI,KAAqB,CAAC;QAC1B,IAAI,CAAC;YACJ,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAmB,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAC3B,cAAc,EACd,oDAAmD,MAAM,CAAC,KAAK,CAAC,EAAE,EAClE;gBACC,KAAK,EAAE,KAAK;aACZ,CACD,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG;YAChB,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC;YAC/D,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,UAAU,EAAE,gBAAgB,CAAC;SAClE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAAA,CAC7C;CACD,CAAC","sourcesContent":["/**\n * Cuota de OpenAI Codex (ChatGPT) — endpoint interno de cuenta, no la API de\n * pago por token. Vive en `chatgpt.com`, no en `api.openai.com`: no hay\n * override de `baseUrl` que valga aquí, un proxy de streaming lo devolvería\n * en 404.\n */\n\nimport { type ConsultorCuota, ErrorConsultaCuota, type VentanaCuota } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://chatgpt.com/backend-api/wham/usage\";\n\ninterface VentanaBruta {\n\tused_percent?: number;\n\treset_at?: number;\n}\n\ninterface RespuestaCodex {\n\trate_limit?: {\n\t\tprimary_window?: VentanaBruta | null;\n\t\tsecondary_window?: VentanaBruta | null;\n\t} | null;\n}\n\nfunction aVentana(etiqueta: string, cubo: VentanaBruta | null | undefined): VentanaCuota | undefined {\n\tif (!cubo || typeof cubo.used_percent !== \"number\") return undefined;\n\tconst seReinicia = typeof cubo.reset_at === \"number\" && cubo.reset_at > 0 ? cubo.reset_at * 1000 : null;\n\treturn {\n\t\tetiqueta,\n\t\tusado: Math.min(Math.max(cubo.used_percent, 0), 100),\n\t\tlimite: 100,\n\t\tseReinicia,\n\t\tunidad: \"porcentaje\",\n\t};\n}\n\nexport const consultorOpenAiCodex: ConsultorCuota = {\n\tid: \"openai-codex\",\n\tsoporta: (credencial) => credencial.type === \"oauth\",\n\tasync consultar({ credencial, fetch: fetchImpl = fetch, señal }) {\n\t\tif (credencial.type !== \"oauth\") return null;\n\n\t\tconst headers: Record<string, string> = { authorization: `Bearer ${credencial.access}` };\n\t\tconst accountId = credencial.accountId;\n\t\tif (typeof accountId === \"string\" && accountId) headers[\"chatgpt-account-id\"] = accountId;\n\n\t\tlet respuesta: Response;\n\t\ttry {\n\t\t\trespuesta = await fetchImpl(ENDPOINT, { headers, signal: señal });\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"openai-codex\", `no se pudo contactar con OpenAI Codex: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tif (!respuesta.ok) {\n\t\t\tthrow new ErrorConsultaCuota(\n\t\t\t\t\"openai-codex\",\n\t\t\t\t`OpenAI Codex respondió ${respuesta.status} ${respuesta.statusText}`,\n\t\t\t);\n\t\t}\n\n\t\tlet datos: RespuestaCodex;\n\t\ttry {\n\t\t\tdatos = (await respuesta.json()) as RespuestaCodex;\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\n\t\t\t\t\"openai-codex\",\n\t\t\t\t`la respuesta de OpenAI Codex no es JSON válido: ${String(error)}`,\n\t\t\t\t{\n\t\t\t\t\tcause: error,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst ventanas = [\n\t\t\taVentana(\"Ventana principal\", datos.rate_limit?.primary_window),\n\t\t\taVentana(\"Ventana secundaria\", datos.rate_limit?.secondary_window),\n\t\t].filter((v): v is VentanaCuota => v !== undefined);\n\t\treturn ventanas.length > 0 ? ventanas : null;\n\t},\n};\n"]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Cuota de OpenRouter — saldo de créditos, no una ventana de tiempo.
3
+ *
4
+ * `GET /credits` devuelve el total comprado y el total gastado. Una cuenta de
5
+ * pago-por-uso que nunca compró crédito no tiene techo: eso también es "no
6
+ * publica cuota", no "cero disponible".
7
+ */
8
+ import { type ConsultorCuota } from "./tipos.ts";
9
+ export declare const consultorOpenRouter: ConsultorCuota;
10
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../../src/core/usage/cuota/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,YAAY,CAAC;AAQrE,eAAO,MAAM,mBAAmB,EAAE,cAmCjC,CAAC","sourcesContent":["/**\n * Cuota de OpenRouter — saldo de créditos, no una ventana de tiempo.\n *\n * `GET /credits` devuelve el total comprado y el total gastado. Una cuenta de\n * pago-por-uso que nunca compró crédito no tiene techo: eso también es \"no\n * publica cuota\", no \"cero disponible\".\n */\n\nimport { type ConsultorCuota, ErrorConsultaCuota } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://openrouter.ai/api/v1/credits\";\n\ninterface RespuestaOpenRouter {\n\tdata?: { total_credits?: number; total_usage?: number };\n}\n\nexport const consultorOpenRouter: ConsultorCuota = {\n\tid: \"openrouter\",\n\tsoporta: (credencial) => credencial.type === \"api_key\" && Boolean(credencial.key),\n\tasync consultar({ credencial, fetch: fetchImpl = fetch, señal }) {\n\t\tif (credencial.type !== \"api_key\" || !credencial.key) return null;\n\n\t\tlet respuesta: Response;\n\t\ttry {\n\t\t\trespuesta = await fetchImpl(ENDPOINT, {\n\t\t\t\theaders: { authorization: `Bearer ${credencial.key}` },\n\t\t\t\tsignal: señal,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"openrouter\", `no se pudo contactar con OpenRouter: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tif (!respuesta.ok) {\n\t\t\tthrow new ErrorConsultaCuota(\"openrouter\", `OpenRouter respondió ${respuesta.status} ${respuesta.statusText}`);\n\t\t}\n\n\t\tlet datos: RespuestaOpenRouter;\n\t\ttry {\n\t\t\tdatos = (await respuesta.json()) as RespuestaOpenRouter;\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"openrouter\", `la respuesta de OpenRouter no es JSON válido: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\n\t\tconst limite = datos.data?.total_credits;\n\t\tconst usado = datos.data?.total_usage;\n\t\tif (typeof limite !== \"number\" || limite <= 0 || typeof usado !== \"number\") return null;\n\t\treturn [{ etiqueta: \"Saldo\", usado, limite, seReinicia: null, unidad: \"usd\" }];\n\t},\n};\n"]}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Cuota de OpenRouter — saldo de créditos, no una ventana de tiempo.
3
+ *
4
+ * `GET /credits` devuelve el total comprado y el total gastado. Una cuenta de
5
+ * pago-por-uso que nunca compró crédito no tiene techo: eso también es "no
6
+ * publica cuota", no "cero disponible".
7
+ */
8
+ import { ErrorConsultaCuota } from "./tipos.js";
9
+ const ENDPOINT = "https://openrouter.ai/api/v1/credits";
10
+ export const consultorOpenRouter = {
11
+ id: "openrouter",
12
+ soporta: (credencial) => credencial.type === "api_key" && Boolean(credencial.key),
13
+ async consultar({ credencial, fetch: fetchImpl = fetch, señal }) {
14
+ if (credencial.type !== "api_key" || !credencial.key)
15
+ return null;
16
+ let respuesta;
17
+ try {
18
+ respuesta = await fetchImpl(ENDPOINT, {
19
+ headers: { authorization: `Bearer ${credencial.key}` },
20
+ signal: señal,
21
+ });
22
+ }
23
+ catch (error) {
24
+ throw new ErrorConsultaCuota("openrouter", `no se pudo contactar con OpenRouter: ${String(error)}`, {
25
+ cause: error,
26
+ });
27
+ }
28
+ if (!respuesta.ok) {
29
+ throw new ErrorConsultaCuota("openrouter", `OpenRouter respondió ${respuesta.status} ${respuesta.statusText}`);
30
+ }
31
+ let datos;
32
+ try {
33
+ datos = (await respuesta.json());
34
+ }
35
+ catch (error) {
36
+ throw new ErrorConsultaCuota("openrouter", `la respuesta de OpenRouter no es JSON válido: ${String(error)}`, {
37
+ cause: error,
38
+ });
39
+ }
40
+ const limite = datos.data?.total_credits;
41
+ const usado = datos.data?.total_usage;
42
+ if (typeof limite !== "number" || limite <= 0 || typeof usado !== "number")
43
+ return null;
44
+ return [{ etiqueta: "Saldo", usado, limite, seReinicia: null, unidad: "usd" }];
45
+ },
46
+ };
47
+ //# sourceMappingURL=openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../../../src/core/usage/cuota/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAuB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErE,MAAM,QAAQ,GAAG,sCAAsC,CAAC;AAMxD,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IAClD,EAAE,EAAE,YAAY;IAChB,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;IACjF,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,MAAK,EAAE,EAAE;QAChE,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAElE,IAAI,SAAmB,CAAC;QACxB,IAAI,CAAC;YACJ,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;gBACrC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,UAAU,CAAC,GAAG,EAAE,EAAE;gBACtD,MAAM,EAAE,MAAK;aACb,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,YAAY,EAAE,wCAAwC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;gBACnG,KAAK,EAAE,KAAK;aACZ,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,IAAI,kBAAkB,CAAC,YAAY,EAAE,yBAAwB,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;QAChH,CAAC;QAED,IAAI,KAA0B,CAAC;QAC/B,IAAI,CAAC;YACJ,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAwB,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,YAAY,EAAE,kDAAiD,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC5G,KAAK,EAAE,KAAK;aACZ,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC;QACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACxF,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAAA,CAC/E;CACD,CAAC","sourcesContent":["/**\n * Cuota de OpenRouter — saldo de créditos, no una ventana de tiempo.\n *\n * `GET /credits` devuelve el total comprado y el total gastado. Una cuenta de\n * pago-por-uso que nunca compró crédito no tiene techo: eso también es \"no\n * publica cuota\", no \"cero disponible\".\n */\n\nimport { type ConsultorCuota, ErrorConsultaCuota } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://openrouter.ai/api/v1/credits\";\n\ninterface RespuestaOpenRouter {\n\tdata?: { total_credits?: number; total_usage?: number };\n}\n\nexport const consultorOpenRouter: ConsultorCuota = {\n\tid: \"openrouter\",\n\tsoporta: (credencial) => credencial.type === \"api_key\" && Boolean(credencial.key),\n\tasync consultar({ credencial, fetch: fetchImpl = fetch, señal }) {\n\t\tif (credencial.type !== \"api_key\" || !credencial.key) return null;\n\n\t\tlet respuesta: Response;\n\t\ttry {\n\t\t\trespuesta = await fetchImpl(ENDPOINT, {\n\t\t\t\theaders: { authorization: `Bearer ${credencial.key}` },\n\t\t\t\tsignal: señal,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"openrouter\", `no se pudo contactar con OpenRouter: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tif (!respuesta.ok) {\n\t\t\tthrow new ErrorConsultaCuota(\"openrouter\", `OpenRouter respondió ${respuesta.status} ${respuesta.statusText}`);\n\t\t}\n\n\t\tlet datos: RespuestaOpenRouter;\n\t\ttry {\n\t\t\tdatos = (await respuesta.json()) as RespuestaOpenRouter;\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"openrouter\", `la respuesta de OpenRouter no es JSON válido: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\n\t\tconst limite = datos.data?.total_credits;\n\t\tconst usado = datos.data?.total_usage;\n\t\tif (typeof limite !== \"number\" || limite <= 0 || typeof usado !== \"number\") return null;\n\t\treturn [{ etiqueta: \"Saldo\", usado, limite, seReinicia: null, unidad: \"usd\" }];\n\t},\n};\n"]}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Cuánto QUEDA del plan, por proveedor — no cuánto se ha gastado.
3
+ *
4
+ * `ada-cli usage` (ver `../aggregate.ts`) lee los JSONL de sesión y suma lo
5
+ * que ya se consumió. Eso no dice si a un equipo le quedan dos peticiones o
6
+ * dos mil: ese dato no vive en la sesión, vive en el proveedor, así que hay
7
+ * que preguntárselo a él.
8
+ */
9
+ import type { Credential } from "@earendil-works/pi-ai";
10
+ export type UnidadCuota = "porcentaje" | "peticiones" | "usd";
11
+ /** Una ventana de cuota ya lista para mostrar (p.ej. "5 horas" o "Semanal"). */
12
+ export interface VentanaCuota {
13
+ etiqueta: string;
14
+ usado: number;
15
+ limite: number;
16
+ /** Epoch ms en que se reinicia esta ventana; `null` si el proveedor no lo dice. */
17
+ seReinicia: number | null;
18
+ unidad: UnidadCuota;
19
+ }
20
+ /**
21
+ * La consulta a la cuota falló de verdad (red, HTTP, JSON roto).
22
+ *
23
+ * A propósito NO es lo mismo que "el proveedor no publica cuota"
24
+ * (`consultar` devuelve `null` para eso): confundir ambos casos hace que un
25
+ * fallo de red se enseñe como "sin límite", que es la mentira que esta pieza
26
+ * existe para evitar.
27
+ */
28
+ export declare class ErrorConsultaCuota extends Error {
29
+ readonly proveedor: string;
30
+ constructor(proveedor: string, mensaje: string, options?: ErrorOptions);
31
+ }
32
+ /** Lo mínimo para preguntarle a un proveedor: con qué credencial y por qué canal. */
33
+ export interface ContextoConsulta {
34
+ credencial: Credential;
35
+ fetch?: typeof fetch;
36
+ señal?: AbortSignal;
37
+ }
38
+ /** Un proveedor: cómo se llama y cómo se le pregunta cuánto queda. */
39
+ export interface ConsultorCuota {
40
+ id: string;
41
+ /** true si esta credencial es del tipo que este proveedor sabe consultar. */
42
+ soporta(credencial: Credential): boolean;
43
+ /**
44
+ * `null` = el proveedor no publica cuota para esta credencial (p.ej. la
45
+ * API key de pago-por-token de Anthropic no tiene techo que consultar).
46
+ * Lanza {@link ErrorConsultaCuota} si la consulta falla de verdad.
47
+ */
48
+ consultar(ctx: ContextoConsulta): Promise<VentanaCuota[] | null>;
49
+ }
50
+ //# sourceMappingURL=tipos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tipos.d.ts","sourceRoot":"","sources":["../../../../src/core/usage/cuota/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,KAAK,CAAC;AAE9D,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,WAAW,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,YAAY,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAIrE;CACD;AAED,wFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,MAAK,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,yEAAsE;AACtE,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;IACzC;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;CACjE","sourcesContent":["/**\n * Cuánto QUEDA del plan, por proveedor — no cuánto se ha gastado.\n *\n * `ada-cli usage` (ver `../aggregate.ts`) lee los JSONL de sesión y suma lo\n * que ya se consumió. Eso no dice si a un equipo le quedan dos peticiones o\n * dos mil: ese dato no vive en la sesión, vive en el proveedor, así que hay\n * que preguntárselo a él.\n */\n\nimport type { Credential } from \"@earendil-works/pi-ai\";\n\nexport type UnidadCuota = \"porcentaje\" | \"peticiones\" | \"usd\";\n\n/** Una ventana de cuota ya lista para mostrar (p.ej. \"5 horas\" o \"Semanal\"). */\nexport interface VentanaCuota {\n\tetiqueta: string;\n\tusado: number;\n\tlimite: number;\n\t/** Epoch ms en que se reinicia esta ventana; `null` si el proveedor no lo dice. */\n\tseReinicia: number | null;\n\tunidad: UnidadCuota;\n}\n\n/**\n * La consulta a la cuota falló de verdad (red, HTTP, JSON roto).\n *\n * A propósito NO es lo mismo que \"el proveedor no publica cuota\"\n * (`consultar` devuelve `null` para eso): confundir ambos casos hace que un\n * fallo de red se enseñe como \"sin límite\", que es la mentira que esta pieza\n * existe para evitar.\n */\nexport class ErrorConsultaCuota extends Error {\n\treadonly proveedor: string;\n\n\tconstructor(proveedor: string, mensaje: string, options?: ErrorOptions) {\n\t\tsuper(mensaje, options);\n\t\tthis.name = \"ErrorConsultaCuota\";\n\t\tthis.proveedor = proveedor;\n\t}\n}\n\n/** Lo mínimo para preguntarle a un proveedor: con qué credencial y por qué canal. */\nexport interface ContextoConsulta {\n\tcredencial: Credential;\n\tfetch?: typeof fetch;\n\tseñal?: AbortSignal;\n}\n\n/** Un proveedor: cómo se llama y cómo se le pregunta cuánto queda. */\nexport interface ConsultorCuota {\n\tid: string;\n\t/** true si esta credencial es del tipo que este proveedor sabe consultar. */\n\tsoporta(credencial: Credential): boolean;\n\t/**\n\t * `null` = el proveedor no publica cuota para esta credencial (p.ej. la\n\t * API key de pago-por-token de Anthropic no tiene techo que consultar).\n\t * Lanza {@link ErrorConsultaCuota} si la consulta falla de verdad.\n\t */\n\tconsultar(ctx: ContextoConsulta): Promise<VentanaCuota[] | null>;\n}\n"]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Cuánto QUEDA del plan, por proveedor — no cuánto se ha gastado.
3
+ *
4
+ * `ada-cli usage` (ver `../aggregate.ts`) lee los JSONL de sesión y suma lo
5
+ * que ya se consumió. Eso no dice si a un equipo le quedan dos peticiones o
6
+ * dos mil: ese dato no vive en la sesión, vive en el proveedor, así que hay
7
+ * que preguntárselo a él.
8
+ */
9
+ /**
10
+ * La consulta a la cuota falló de verdad (red, HTTP, JSON roto).
11
+ *
12
+ * A propósito NO es lo mismo que "el proveedor no publica cuota"
13
+ * (`consultar` devuelve `null` para eso): confundir ambos casos hace que un
14
+ * fallo de red se enseñe como "sin límite", que es la mentira que esta pieza
15
+ * existe para evitar.
16
+ */
17
+ export class ErrorConsultaCuota extends Error {
18
+ proveedor;
19
+ constructor(proveedor, mensaje, options) {
20
+ super(mensaje, options);
21
+ this.name = "ErrorConsultaCuota";
22
+ this.proveedor = proveedor;
23
+ }
24
+ }
25
+ //# sourceMappingURL=tipos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tipos.js","sourceRoot":"","sources":["../../../../src/core/usage/cuota/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACnC,SAAS,CAAS;IAE3B,YAAY,SAAiB,EAAE,OAAe,EAAE,OAAsB,EAAE;QACvE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAAA,CAC3B;CACD","sourcesContent":["/**\n * Cuánto QUEDA del plan, por proveedor — no cuánto se ha gastado.\n *\n * `ada-cli usage` (ver `../aggregate.ts`) lee los JSONL de sesión y suma lo\n * que ya se consumió. Eso no dice si a un equipo le quedan dos peticiones o\n * dos mil: ese dato no vive en la sesión, vive en el proveedor, así que hay\n * que preguntárselo a él.\n */\n\nimport type { Credential } from \"@earendil-works/pi-ai\";\n\nexport type UnidadCuota = \"porcentaje\" | \"peticiones\" | \"usd\";\n\n/** Una ventana de cuota ya lista para mostrar (p.ej. \"5 horas\" o \"Semanal\"). */\nexport interface VentanaCuota {\n\tetiqueta: string;\n\tusado: number;\n\tlimite: number;\n\t/** Epoch ms en que se reinicia esta ventana; `null` si el proveedor no lo dice. */\n\tseReinicia: number | null;\n\tunidad: UnidadCuota;\n}\n\n/**\n * La consulta a la cuota falló de verdad (red, HTTP, JSON roto).\n *\n * A propósito NO es lo mismo que \"el proveedor no publica cuota\"\n * (`consultar` devuelve `null` para eso): confundir ambos casos hace que un\n * fallo de red se enseñe como \"sin límite\", que es la mentira que esta pieza\n * existe para evitar.\n */\nexport class ErrorConsultaCuota extends Error {\n\treadonly proveedor: string;\n\n\tconstructor(proveedor: string, mensaje: string, options?: ErrorOptions) {\n\t\tsuper(mensaje, options);\n\t\tthis.name = \"ErrorConsultaCuota\";\n\t\tthis.proveedor = proveedor;\n\t}\n}\n\n/** Lo mínimo para preguntarle a un proveedor: con qué credencial y por qué canal. */\nexport interface ContextoConsulta {\n\tcredencial: Credential;\n\tfetch?: typeof fetch;\n\tseñal?: AbortSignal;\n}\n\n/** Un proveedor: cómo se llama y cómo se le pregunta cuánto queda. */\nexport interface ConsultorCuota {\n\tid: string;\n\t/** true si esta credencial es del tipo que este proveedor sabe consultar. */\n\tsoporta(credencial: Credential): boolean;\n\t/**\n\t * `null` = el proveedor no publica cuota para esta credencial (p.ej. la\n\t * API key de pago-por-token de Anthropic no tiene techo que consultar).\n\t * Lanza {@link ErrorConsultaCuota} si la consulta falla de verdad.\n\t */\n\tconsultar(ctx: ContextoConsulta): Promise<VentanaCuota[] | null>;\n}\n"]}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Búsqueda web con la credencial que el usuario YA tiene.
3
+ *
4
+ * Hasta ahora `web_search` exigía una clave de Serper aparte, así que la
5
+ * respuesta de fábrica era «Búsqueda web no configurada». Un agente de código
6
+ * que no puede mirar la documentación de una librería está cojo, y pedir una
7
+ * segunda cuenta para eso es una fricción que el usuario paga antes de haber
8
+ * visto ningún valor.
9
+ *
10
+ * Los modelos de Anthropic traen búsqueda de servidor (`web_search_20250305`).
11
+ * Si hay credencial de Anthropic —y la hay, porque es con lo que corre el
12
+ * agente— buscar puede funcionar sin configurar nada.
13
+ *
14
+ * Dos detalles que no son evidentes y que se descubrieron probándolo:
15
+ *
16
+ * 1. **Los resultados no llegan por el contenido del mensaje.** Nuestra capa de
17
+ * modelos normaliza la respuesta a texto/razonamiento/llamadas, y los
18
+ * bloques `web_search_tool_result` se pierden por el camino. Pedirle al
19
+ * modelo que los liste en el texto tampoco vale: se probó, y contesta la
20
+ * pregunta en vez de listar fuentes. Hay que leer el flujo crudo.
21
+ *
22
+ * 2. **Se lee sin tocar la capa de modelos**, pasando un `fetch` propio que
23
+ * duplica el cuerpo con `tee()`: una rama sigue al SDK intacta y la otra se
24
+ * analiza aquí. `agent-session.ts` y `packages/ai` son de upstream y el
25
+ * presupuesto de fork está en el tope; esto no cuesta ni un hunk.
26
+ */
27
+ /** Un resultado, ya normalizado. */
28
+ export interface ResultadoWeb {
29
+ titulo: string;
30
+ url: string;
31
+ /** Antigüedad tal y como la da el proveedor ("3 weeks ago", "June 8, 2026"). */
32
+ edad?: string;
33
+ }
34
+ /** Proveedores cuyo modelo sabe buscar por su cuenta. */
35
+ export declare function soportaBusquedaNativa(proveedor: string): boolean;
36
+ /**
37
+ * Añade la tool de búsqueda a la carga de la petición, sin pisar las que haya.
38
+ *
39
+ * Pura y separada para poder probarla: si esto machacara `tools`, el modelo se
40
+ * quedaría sin sus herramientas y el fallo aparecería en cualquier otro sitio.
41
+ */
42
+ export declare function conToolDeBusqueda(carga: unknown, maxUsos?: number): unknown;
43
+ /**
44
+ * Recorre cualquier estructura y recoge los resultados de búsqueda.
45
+ *
46
+ * Se busca por el campo `type` en vez de por la ruta exacta del evento a
47
+ * propósito: el formato de los eventos SSE puede cambiar de sitio los bloques,
48
+ * y un recolector que dependa de la ruta se rompe en silencio —devolviendo cero
49
+ * resultados, que se lee igual que «no hay nada»—.
50
+ */
51
+ export declare function recolectarResultados(valor: unknown, acumulado?: ResultadoWeb[]): ResultadoWeb[];
52
+ /** Quita repetidos por URL, conservando el orden de aparición. */
53
+ export declare function sinRepetidos(resultados: ResultadoWeb[]): ResultadoWeb[];
54
+ /**
55
+ * Envuelve un `fetch` para leer los resultados sin estorbar a quien lo usa.
56
+ *
57
+ * `tee()` da dos flujos: uno se devuelve intacto —el SDK tiene que recibir
58
+ * exactamente lo que habría recibido— y el otro se analiza aquí. Si el análisis
59
+ * falla, falla solo: una búsqueda sin fuentes es peor que una con fuentes, pero
60
+ * una sesión rota por el analizador es mucho peor que las dos.
61
+ */
62
+ export declare function fetchQueRecolecta(base: typeof fetch, destino: ResultadoWeb[]): typeof fetch;
63
+ /** Lo que hace falta para buscar, inyectado para poder probarlo sin red. */
64
+ export interface DependenciasBusqueda {
65
+ /** Ejecuta una consulta contra el modelo con las opciones dadas. */
66
+ completar: (consulta: string, opciones: {
67
+ fetch: typeof fetch;
68
+ onPayload: (c: unknown) => unknown;
69
+ }) => Promise<void>;
70
+ fetchBase?: typeof fetch;
71
+ maxResultados?: number;
72
+ }
73
+ /**
74
+ * Busca y devuelve las fuentes.
75
+ *
76
+ * No devuelve la síntesis del modelo a propósito: quien llama es el agente, que
77
+ * ya sabe leer. Lo que necesita de una búsqueda son URLs a las que ir con
78
+ * `web_fetch`, no un resumen de segunda mano que ya viene con la
79
+ * interpretación de otro modelo encima.
80
+ */
81
+ export declare function buscarConElModelo(consulta: string, deps: DependenciasBusqueda): Promise<ResultadoWeb[]>;
82
+ //# sourceMappingURL=busqueda-nativa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"busqueda-nativa.d.ts","sourceRoot":"","sources":["../../../src/core/web/busqueda-nativa.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,oCAAoC;AACpC,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAKD,yDAAyD;AACzD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,SAAI,GAAG,OAAO,CAKtE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,GAAE,YAAY,EAAO,GAAG,YAAY,EAAE,CAgBnG;AAED,mEAAkE;AAClE,wBAAgB,YAAY,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CASvE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,KAAK,CAgD3F;AAED,4EAA4E;AAC5E,MAAM,WAAW,oBAAoB;IACpC,oEAAoE;IACpE,SAAS,EAAE,CACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE;QAAE,KAAK,EAAE,OAAO,KAAK,CAAC;QAAC,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;KAAE,KACjE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAO7G","sourcesContent":["/**\n * Búsqueda web con la credencial que el usuario YA tiene.\n *\n * Hasta ahora `web_search` exigía una clave de Serper aparte, así que la\n * respuesta de fábrica era «Búsqueda web no configurada». Un agente de código\n * que no puede mirar la documentación de una librería está cojo, y pedir una\n * segunda cuenta para eso es una fricción que el usuario paga antes de haber\n * visto ningún valor.\n *\n * Los modelos de Anthropic traen búsqueda de servidor (`web_search_20250305`).\n * Si hay credencial de Anthropic —y la hay, porque es con lo que corre el\n * agente— buscar puede funcionar sin configurar nada.\n *\n * Dos detalles que no son evidentes y que se descubrieron probándolo:\n *\n * 1. **Los resultados no llegan por el contenido del mensaje.** Nuestra capa de\n * modelos normaliza la respuesta a texto/razonamiento/llamadas, y los\n * bloques `web_search_tool_result` se pierden por el camino. Pedirle al\n * modelo que los liste en el texto tampoco vale: se probó, y contesta la\n * pregunta en vez de listar fuentes. Hay que leer el flujo crudo.\n *\n * 2. **Se lee sin tocar la capa de modelos**, pasando un `fetch` propio que\n * duplica el cuerpo con `tee()`: una rama sigue al SDK intacta y la otra se\n * analiza aquí. `agent-session.ts` y `packages/ai` son de upstream y el\n * presupuesto de fork está en el tope; esto no cuesta ni un hunk.\n */\n\n/** Un resultado, ya normalizado. */\nexport interface ResultadoWeb {\n\ttitulo: string;\n\turl: string;\n\t/** Antigüedad tal y como la da el proveedor (\"3 weeks ago\", \"June 8, 2026\"). */\n\tedad?: string;\n}\n\n/** La tool de servidor de Anthropic. */\nconst TOOL_BUSQUEDA = \"web_search_20250305\";\n\n/** Proveedores cuyo modelo sabe buscar por su cuenta. */\nexport function soportaBusquedaNativa(proveedor: string): boolean {\n\treturn proveedor === \"anthropic\";\n}\n\n/**\n * Añade la tool de búsqueda a la carga de la petición, sin pisar las que haya.\n *\n * Pura y separada para poder probarla: si esto machacara `tools`, el modelo se\n * quedaría sin sus herramientas y el fallo aparecería en cualquier otro sitio.\n */\nexport function conToolDeBusqueda(carga: unknown, maxUsos = 5): unknown {\n\tif (!carga || typeof carga !== \"object\") return carga;\n\tconst p = carga as { tools?: unknown[] };\n\tp.tools = [...(p.tools ?? []), { type: TOOL_BUSQUEDA, name: \"web_search\", max_uses: maxUsos }];\n\treturn p;\n}\n\n/**\n * Recorre cualquier estructura y recoge los resultados de búsqueda.\n *\n * Se busca por el campo `type` en vez de por la ruta exacta del evento a\n * propósito: el formato de los eventos SSE puede cambiar de sitio los bloques,\n * y un recolector que dependa de la ruta se rompe en silencio —devolviendo cero\n * resultados, que se lee igual que «no hay nada»—.\n */\nexport function recolectarResultados(valor: unknown, acumulado: ResultadoWeb[] = []): ResultadoWeb[] {\n\tif (Array.isArray(valor)) {\n\t\tfor (const v of valor) recolectarResultados(v, acumulado);\n\t\treturn acumulado;\n\t}\n\tif (!valor || typeof valor !== \"object\") return acumulado;\n\tconst o = valor as Record<string, unknown>;\n\tif (o.type === \"web_search_result\" && typeof o.url === \"string\") {\n\t\tacumulado.push({\n\t\t\ttitulo: typeof o.title === \"string\" ? o.title : o.url,\n\t\t\turl: o.url,\n\t\t\tedad: typeof o.page_age === \"string\" ? o.page_age : undefined,\n\t\t});\n\t}\n\tfor (const v of Object.values(o)) recolectarResultados(v, acumulado);\n\treturn acumulado;\n}\n\n/** Quita repetidos por URL, conservando el orden de aparición. */\nexport function sinRepetidos(resultados: ResultadoWeb[]): ResultadoWeb[] {\n\tconst vistas = new Set<string>();\n\tconst unicos: ResultadoWeb[] = [];\n\tfor (const r of resultados) {\n\t\tif (vistas.has(r.url)) continue;\n\t\tvistas.add(r.url);\n\t\tunicos.push(r);\n\t}\n\treturn unicos;\n}\n\n/**\n * Envuelve un `fetch` para leer los resultados sin estorbar a quien lo usa.\n *\n * `tee()` da dos flujos: uno se devuelve intacto —el SDK tiene que recibir\n * exactamente lo que habría recibido— y el otro se analiza aquí. Si el análisis\n * falla, falla solo: una búsqueda sin fuentes es peor que una con fuentes, pero\n * una sesión rota por el analizador es mucho peor que las dos.\n */\nexport function fetchQueRecolecta(base: typeof fetch, destino: ResultadoWeb[]): typeof fetch {\n\treturn async (...args) => {\n\t\tconst respuesta = await base(...args);\n\t\tif (!respuesta.body) return respuesta;\n\t\tconst [paraElSdk, paraNosotros] = respuesta.body.tee();\n\n\t\tvoid (async () => {\n\t\t\tconst lector = paraNosotros.getReader();\n\t\t\tconst decodificador = new TextDecoder();\n\t\t\tlet pendiente = \"\";\n\t\t\ttry {\n\t\t\t\tfor (;;) {\n\t\t\t\t\tconst { done, value } = await lector.read();\n\t\t\t\t\tif (done) break;\n\t\t\t\t\tpendiente += decodificador.decode(value, { stream: true });\n\t\t\t\t\tconst lineas = pendiente.split(\"\\n\");\n\t\t\t\t\t// La última puede estar a medias: se queda para la próxima vuelta.\n\t\t\t\t\tpendiente = lineas.pop() ?? \"\";\n\t\t\t\t\tfor (const linea of lineas) {\n\t\t\t\t\t\tif (!linea.startsWith(\"data: \")) continue;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trecolectarResultados(JSON.parse(linea.slice(6)), destino);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// Una línea que no es JSON no dice nada del resto del flujo.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// El flujo puede acabar sin salto final, y entonces el último evento\n\t\t\t\t// se queda en `pendiente`. Perderlo silenciosamente equivaldría a\n\t\t\t\t// devolver una fuente menos sin que nadie lo note.\n\t\t\t\tif (pendiente.startsWith(\"data: \")) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trecolectarResultados(JSON.parse(pendiente.slice(6)), destino);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Una cola incompleta no es un error: es una cola incompleta.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// La rama de análisis nunca puede tumbar la petición.\n\t\t\t}\n\t\t})();\n\n\t\treturn new Response(paraElSdk, {\n\t\t\tstatus: respuesta.status,\n\t\t\tstatusText: respuesta.statusText,\n\t\t\theaders: respuesta.headers,\n\t\t});\n\t};\n}\n\n/** Lo que hace falta para buscar, inyectado para poder probarlo sin red. */\nexport interface DependenciasBusqueda {\n\t/** Ejecuta una consulta contra el modelo con las opciones dadas. */\n\tcompletar: (\n\t\tconsulta: string,\n\t\topciones: { fetch: typeof fetch; onPayload: (c: unknown) => unknown },\n\t) => Promise<void>;\n\tfetchBase?: typeof fetch;\n\tmaxResultados?: number;\n}\n\n/**\n * Busca y devuelve las fuentes.\n *\n * No devuelve la síntesis del modelo a propósito: quien llama es el agente, que\n * ya sabe leer. Lo que necesita de una búsqueda son URLs a las que ir con\n * `web_fetch`, no un resumen de segunda mano que ya viene con la\n * interpretación de otro modelo encima.\n */\nexport async function buscarConElModelo(consulta: string, deps: DependenciasBusqueda): Promise<ResultadoWeb[]> {\n\tconst encontrados: ResultadoWeb[] = [];\n\tawait deps.completar(consulta, {\n\t\tfetch: fetchQueRecolecta(deps.fetchBase ?? fetch, encontrados),\n\t\tonPayload: (carga) => conToolDeBusqueda(carga),\n\t});\n\treturn sinRepetidos(encontrados).slice(0, deps.maxResultados ?? 10);\n}\n"]}