@hoilab/ada-cli 0.84.21 → 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 (1337) hide show
  1. package/CHANGELOG.md +49 -2
  2. package/README.es.md +174 -0
  3. package/README.md +203 -658
  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/args.d.ts +3 -0
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js +11 -0
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/audit-command.d.ts +15 -0
  13. package/dist/cli/audit-command.d.ts.map +1 -0
  14. package/dist/cli/audit-command.js +280 -0
  15. package/dist/cli/audit-command.js.map +1 -0
  16. package/dist/cli/banco-command.d.ts +15 -0
  17. package/dist/cli/banco-command.d.ts.map +1 -0
  18. package/dist/cli/banco-command.js +213 -0
  19. package/dist/cli/banco-command.js.map +1 -0
  20. package/dist/cli/cleanse-command.d.ts +11 -0
  21. package/dist/cli/cleanse-command.d.ts.map +1 -0
  22. package/dist/cli/cleanse-command.js +101 -0
  23. package/dist/cli/cleanse-command.js.map +1 -0
  24. package/dist/cli/commit-command.d.ts +31 -0
  25. package/dist/cli/commit-command.d.ts.map +1 -0
  26. package/dist/cli/commit-command.js +158 -0
  27. package/dist/cli/commit-command.js.map +1 -0
  28. package/dist/cli/computer-command.d.ts +12 -0
  29. package/dist/cli/computer-command.d.ts.map +1 -0
  30. package/dist/cli/computer-command.js +141 -0
  31. package/dist/cli/computer-command.js.map +1 -0
  32. package/dist/cli/discover-command.d.ts +18 -0
  33. package/dist/cli/discover-command.d.ts.map +1 -0
  34. package/dist/cli/discover-command.js +108 -0
  35. package/dist/cli/discover-command.js.map +1 -0
  36. package/dist/cli/file-processor.d.ts.map +1 -1
  37. package/dist/cli/file-processor.js +2 -1
  38. package/dist/cli/file-processor.js.map +1 -1
  39. package/dist/cli/hashline-command.d.ts +11 -0
  40. package/dist/cli/hashline-command.d.ts.map +1 -0
  41. package/dist/cli/hashline-command.js +106 -0
  42. package/dist/cli/hashline-command.js.map +1 -0
  43. package/dist/cli/home-screen.d.ts.map +1 -1
  44. package/dist/cli/home-screen.js +2 -2
  45. package/dist/cli/home-screen.js.map +1 -1
  46. package/dist/cli/import-command.d.ts +35 -0
  47. package/dist/cli/import-command.d.ts.map +1 -0
  48. package/dist/cli/import-command.js +164 -0
  49. package/dist/cli/import-command.js.map +1 -0
  50. package/dist/cli/politica-command.d.ts +20 -0
  51. package/dist/cli/politica-command.d.ts.map +1 -0
  52. package/dist/cli/politica-command.js +93 -0
  53. package/dist/cli/politica-command.js.map +1 -0
  54. package/dist/cli/refine-command.d.ts +18 -0
  55. package/dist/cli/refine-command.d.ts.map +1 -0
  56. package/dist/cli/refine-command.js +101 -0
  57. package/dist/cli/refine-command.js.map +1 -0
  58. package/dist/cli/review-command.d.ts +24 -0
  59. package/dist/cli/review-command.d.ts.map +1 -0
  60. package/dist/cli/review-command.js +168 -0
  61. package/dist/cli/review-command.js.map +1 -0
  62. package/dist/cli/schedule-command.d.ts +17 -0
  63. package/dist/cli/schedule-command.d.ts.map +1 -0
  64. package/dist/cli/schedule-command.js +117 -0
  65. package/dist/cli/schedule-command.js.map +1 -0
  66. package/dist/cli/serve-command.d.ts +72 -0
  67. package/dist/cli/serve-command.d.ts.map +1 -0
  68. package/dist/cli/serve-command.js +568 -0
  69. package/dist/cli/serve-command.js.map +1 -0
  70. package/dist/cli/startup-ui.d.ts.map +1 -1
  71. package/dist/cli/startup-ui.js +9 -3
  72. package/dist/cli/startup-ui.js.map +1 -1
  73. package/dist/cli/telegram-command.d.ts +18 -0
  74. package/dist/cli/telegram-command.d.ts.map +1 -0
  75. package/dist/cli/telegram-command.js +137 -0
  76. package/dist/cli/telegram-command.js.map +1 -0
  77. package/dist/cli/telemetria-command.d.ts +22 -0
  78. package/dist/cli/telemetria-command.d.ts.map +1 -0
  79. package/dist/cli/telemetria-command.js +127 -0
  80. package/dist/cli/telemetria-command.js.map +1 -0
  81. package/dist/cli/undo-command.d.ts +9 -0
  82. package/dist/cli/undo-command.d.ts.map +1 -0
  83. package/dist/cli/undo-command.js +56 -0
  84. package/dist/cli/undo-command.js.map +1 -0
  85. package/dist/cli/usage-command.d.ts +10 -0
  86. package/dist/cli/usage-command.d.ts.map +1 -0
  87. package/dist/cli/usage-command.js +209 -0
  88. package/dist/cli/usage-command.js.map +1 -0
  89. package/dist/cli/wiki-command.d.ts +9 -0
  90. package/dist/cli/wiki-command.d.ts.map +1 -0
  91. package/dist/cli/wiki-command.js +76 -0
  92. package/dist/cli/wiki-command.js.map +1 -0
  93. package/dist/cli.d.ts +6 -0
  94. package/dist/cli.d.ts.map +1 -1
  95. package/dist/cli.js +10 -11
  96. package/dist/cli.js.map +1 -1
  97. package/dist/config.d.ts +1 -1
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +3 -2
  100. package/dist/config.js.map +1 -1
  101. package/dist/core/ada.d.ts +58 -0
  102. package/dist/core/ada.d.ts.map +1 -0
  103. package/dist/core/ada.js +61 -0
  104. package/dist/core/ada.js.map +1 -0
  105. package/dist/core/advisor/guarda.d.ts +66 -0
  106. package/dist/core/advisor/guarda.d.ts.map +1 -0
  107. package/dist/core/advisor/guarda.js +191 -0
  108. package/dist/core/advisor/guarda.js.map +1 -0
  109. package/dist/core/advisor/runtime.d.ts +66 -0
  110. package/dist/core/advisor/runtime.d.ts.map +1 -0
  111. package/dist/core/advisor/runtime.js +121 -0
  112. package/dist/core/advisor/runtime.js.map +1 -0
  113. package/dist/core/advisor/sesion.d.ts +109 -0
  114. package/dist/core/advisor/sesion.d.ts.map +1 -0
  115. package/dist/core/advisor/sesion.js +139 -0
  116. package/dist/core/advisor/sesion.js.map +1 -0
  117. package/dist/core/agent-session.d.ts +85 -7
  118. package/dist/core/agent-session.d.ts.map +1 -1
  119. package/dist/core/agent-session.js +862 -78
  120. package/dist/core/agent-session.js.map +1 -1
  121. package/dist/core/agents/loader.d.ts +77 -0
  122. package/dist/core/agents/loader.d.ts.map +1 -0
  123. package/dist/core/agents/loader.js +154 -0
  124. package/dist/core/agents/loader.js.map +1 -0
  125. package/dist/core/aprobacion/generados.d.ts +37 -0
  126. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  127. package/dist/core/aprobacion/generados.js +85 -0
  128. package/dist/core/aprobacion/generados.js.map +1 -0
  129. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  130. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  131. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  132. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  133. package/dist/core/aprobacion/politica.d.ts +90 -0
  134. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  135. package/dist/core/aprobacion/politica.js +375 -0
  136. package/dist/core/aprobacion/politica.js.map +1 -0
  137. package/dist/core/arranque/atajos.d.ts +46 -0
  138. package/dist/core/arranque/atajos.d.ts.map +1 -0
  139. package/dist/core/arranque/atajos.js +113 -0
  140. package/dist/core/arranque/atajos.js.map +1 -0
  141. package/dist/core/audit/exportacion.d.ts +54 -0
  142. package/dist/core/audit/exportacion.d.ts.map +1 -0
  143. package/dist/core/audit/exportacion.js +265 -0
  144. package/dist/core/audit/exportacion.js.map +1 -0
  145. package/dist/core/audit/libro.d.ts +318 -0
  146. package/dist/core/audit/libro.d.ts.map +1 -0
  147. package/dist/core/audit/libro.js +508 -0
  148. package/dist/core/audit/libro.js.map +1 -0
  149. package/dist/core/audit/registro-sesion.d.ts +78 -0
  150. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  151. package/dist/core/audit/registro-sesion.js +202 -0
  152. package/dist/core/audit/registro-sesion.js.map +1 -0
  153. package/dist/core/audit/retencion.d.ts +82 -0
  154. package/dist/core/audit/retencion.d.ts.map +1 -0
  155. package/dist/core/audit/retencion.js +152 -0
  156. package/dist/core/audit/retencion.js.map +1 -0
  157. package/dist/core/audit/rutas.d.ts +23 -0
  158. package/dist/core/audit/rutas.d.ts.map +1 -0
  159. package/dist/core/audit/rutas.js +23 -0
  160. package/dist/core/audit/rutas.js.map +1 -0
  161. package/dist/core/auth-storage.d.ts +0 -3
  162. package/dist/core/auth-storage.d.ts.map +1 -1
  163. package/dist/core/auth-storage.js +21 -8
  164. package/dist/core/auth-storage.js.map +1 -1
  165. package/dist/core/banco/almacenamiento.d.ts +18 -0
  166. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  167. package/dist/core/banco/almacenamiento.js +50 -0
  168. package/dist/core/banco/almacenamiento.js.map +1 -0
  169. package/dist/core/banco/analisis.d.ts +37 -0
  170. package/dist/core/banco/analisis.d.ts.map +1 -0
  171. package/dist/core/banco/analisis.js +164 -0
  172. package/dist/core/banco/analisis.js.map +1 -0
  173. package/dist/core/banco/bloques.d.ts +39 -0
  174. package/dist/core/banco/bloques.d.ts.map +1 -0
  175. package/dist/core/banco/bloques.js +84 -0
  176. package/dist/core/banco/bloques.js.map +1 -0
  177. package/dist/core/banco/cargas.d.ts +84 -0
  178. package/dist/core/banco/cargas.d.ts.map +1 -0
  179. package/dist/core/banco/cargas.js +520 -0
  180. package/dist/core/banco/cargas.js.map +1 -0
  181. package/dist/core/banco/comparar.d.ts +29 -0
  182. package/dist/core/banco/comparar.d.ts.map +1 -0
  183. package/dist/core/banco/comparar.js +28 -0
  184. package/dist/core/banco/comparar.js.map +1 -0
  185. package/dist/core/banco/ejecutar.d.ts +44 -0
  186. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  187. package/dist/core/banco/ejecutar.js +183 -0
  188. package/dist/core/banco/ejecutar.js.map +1 -0
  189. package/dist/core/banco/generar.d.ts +24 -0
  190. package/dist/core/banco/generar.d.ts.map +1 -0
  191. package/dist/core/banco/generar.js +159 -0
  192. package/dist/core/banco/generar.js.map +1 -0
  193. package/dist/core/banco/mutaciones.d.ts +25 -0
  194. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  195. package/dist/core/banco/mutaciones.js +215 -0
  196. package/dist/core/banco/mutaciones.js.map +1 -0
  197. package/dist/core/banco/tipos.d.ts +121 -0
  198. package/dist/core/banco/tipos.d.ts.map +1 -0
  199. package/dist/core/banco/tipos.js +16 -0
  200. package/dist/core/banco/tipos.js.map +1 -0
  201. package/dist/core/blobs/almacen.d.ts +81 -0
  202. package/dist/core/blobs/almacen.d.ts.map +1 -0
  203. package/dist/core/blobs/almacen.js +198 -0
  204. package/dist/core/blobs/almacen.js.map +1 -0
  205. package/dist/core/blobs/broker.d.ts +103 -0
  206. package/dist/core/blobs/broker.d.ts.map +1 -0
  207. package/dist/core/blobs/broker.js +204 -0
  208. package/dist/core/blobs/broker.js.map +1 -0
  209. package/dist/core/blobs/index.d.ts +70 -0
  210. package/dist/core/blobs/index.d.ts.map +1 -0
  211. package/dist/core/blobs/index.js +232 -0
  212. package/dist/core/blobs/index.js.map +1 -0
  213. package/dist/core/blobs/payload.d.ts +55 -0
  214. package/dist/core/blobs/payload.d.ts.map +1 -0
  215. package/dist/core/blobs/payload.js +255 -0
  216. package/dist/core/blobs/payload.js.map +1 -0
  217. package/dist/core/blobs/proveedor.d.ts +85 -0
  218. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  219. package/dist/core/blobs/proveedor.js +196 -0
  220. package/dist/core/blobs/proveedor.js.map +1 -0
  221. package/dist/core/browser/cdp.d.ts +41 -0
  222. package/dist/core/browser/cdp.d.ts.map +1 -0
  223. package/dist/core/browser/cdp.js +119 -0
  224. package/dist/core/browser/cdp.js.map +1 -0
  225. package/dist/core/browser/politica.d.ts +51 -0
  226. package/dist/core/browser/politica.d.ts.map +1 -0
  227. package/dist/core/browser/politica.js +123 -0
  228. package/dist/core/browser/politica.js.map +1 -0
  229. package/dist/core/browser/sesion.d.ts +52 -0
  230. package/dist/core/browser/sesion.d.ts.map +1 -0
  231. package/dist/core/browser/sesion.js +176 -0
  232. package/dist/core/browser/sesion.js.map +1 -0
  233. package/dist/core/browser/tools.d.ts +16 -0
  234. package/dist/core/browser/tools.d.ts.map +1 -0
  235. package/dist/core/browser/tools.js +279 -0
  236. package/dist/core/browser/tools.js.map +1 -0
  237. package/dist/core/commit/diff.d.ts +56 -0
  238. package/dist/core/commit/diff.d.ts.map +1 -0
  239. package/dist/core/commit/diff.js +145 -0
  240. package/dist/core/commit/diff.js.map +1 -0
  241. package/dist/core/commit/mensaje.d.ts +80 -0
  242. package/dist/core/commit/mensaje.d.ts.map +1 -0
  243. package/dist/core/commit/mensaje.js +207 -0
  244. package/dist/core/commit/mensaje.js.map +1 -0
  245. package/dist/core/compactar/index.d.ts +52 -0
  246. package/dist/core/compactar/index.d.ts.map +1 -0
  247. package/dist/core/compactar/index.js +91 -0
  248. package/dist/core/compactar/index.js.map +1 -0
  249. package/dist/core/compactar/registro-denso.d.ts +160 -0
  250. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  251. package/dist/core/compactar/registro-denso.js +620 -0
  252. package/dist/core/compactar/registro-denso.js.map +1 -0
  253. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  254. package/dist/core/compaction/branch-summarization.js +3 -0
  255. package/dist/core/compaction/branch-summarization.js.map +1 -1
  256. package/dist/core/compaction/compaction.d.ts +4 -3
  257. package/dist/core/compaction/compaction.d.ts.map +1 -1
  258. package/dist/core/compaction/compaction.js +41 -32
  259. package/dist/core/compaction/compaction.js.map +1 -1
  260. package/dist/core/computer/captura.d.ts +35 -0
  261. package/dist/core/computer/captura.d.ts.map +1 -0
  262. package/dist/core/computer/captura.js +140 -0
  263. package/dist/core/computer/captura.js.map +1 -0
  264. package/dist/core/computer/driver.d.ts +130 -0
  265. package/dist/core/computer/driver.d.ts.map +1 -0
  266. package/dist/core/computer/driver.js +206 -0
  267. package/dist/core/computer/driver.js.map +1 -0
  268. package/dist/core/computer/motor/actions.d.ts +109 -0
  269. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  270. package/dist/core/computer/motor/actions.js +157 -0
  271. package/dist/core/computer/motor/actions.js.map +1 -0
  272. package/dist/core/computer/motor/bridge.d.ts +232 -0
  273. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  274. package/dist/core/computer/motor/bridge.js +2335 -0
  275. package/dist/core/computer/motor/bridge.js.map +1 -0
  276. package/dist/core/computer/motor/cdp.d.ts +107 -0
  277. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  278. package/dist/core/computer/motor/cdp.js +659 -0
  279. package/dist/core/computer/motor/cdp.js.map +1 -0
  280. package/dist/core/computer/motor/config.d.ts +23 -0
  281. package/dist/core/computer/motor/config.d.ts.map +1 -0
  282. package/dist/core/computer/motor/config.js +100 -0
  283. package/dist/core/computer/motor/config.js.map +1 -0
  284. package/dist/core/computer/motor/contract.d.ts +81 -0
  285. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  286. package/dist/core/computer/motor/contract.js +14 -0
  287. package/dist/core/computer/motor/contract.js.map +1 -0
  288. package/dist/core/computer/motor/note.d.ts +37 -0
  289. package/dist/core/computer/motor/note.d.ts.map +1 -0
  290. package/dist/core/computer/motor/note.js +162 -0
  291. package/dist/core/computer/motor/note.js.map +1 -0
  292. package/dist/core/computer/motor/outline.d.ts +155 -0
  293. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  294. package/dist/core/computer/motor/outline.js +590 -0
  295. package/dist/core/computer/motor/outline.js.map +1 -0
  296. package/dist/core/computer/motor/output.d.ts +18 -0
  297. package/dist/core/computer/motor/output.d.ts.map +1 -0
  298. package/dist/core/computer/motor/output.js +148 -0
  299. package/dist/core/computer/motor/output.js.map +1 -0
  300. package/dist/core/computer/motor/permissions.d.ts +41 -0
  301. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  302. package/dist/core/computer/motor/permissions.js +51 -0
  303. package/dist/core/computer/motor/permissions.js.map +1 -0
  304. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  305. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/architecture.js +21 -0
  307. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  308. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  309. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/coerce.js +17 -0
  311. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  312. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  313. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  314. package/dist/core/computer/motor/platform/index.js +79 -0
  315. package/dist/core/computer/motor/platform/index.js.map +1 -0
  316. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  317. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  318. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  319. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  320. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  321. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  322. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  323. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  324. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  325. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  326. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  327. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  328. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  329. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  330. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  331. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  332. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  333. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  334. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  335. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  336. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  337. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  338. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  339. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  340. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  341. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  342. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  343. package/dist/core/computer/motor/platform/types.js +2 -0
  344. package/dist/core/computer/motor/platform/types.js.map +1 -0
  345. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  346. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  347. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  348. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  349. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  350. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  351. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  352. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  353. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  354. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  355. package/dist/core/computer/motor/root-selection.js +28 -0
  356. package/dist/core/computer/motor/root-selection.js.map +1 -0
  357. package/dist/core/computer/motor/runtime.d.ts +50 -0
  358. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  359. package/dist/core/computer/motor/runtime.js +119 -0
  360. package/dist/core/computer/motor/runtime.js.map +1 -0
  361. package/dist/core/computer/motor/state.d.ts +68 -0
  362. package/dist/core/computer/motor/state.d.ts.map +1 -0
  363. package/dist/core/computer/motor/state.js +100 -0
  364. package/dist/core/computer/motor/state.js.map +1 -0
  365. package/dist/core/computer/motor/view.d.ts +6 -0
  366. package/dist/core/computer/motor/view.d.ts.map +1 -0
  367. package/dist/core/computer/motor/view.js +185 -0
  368. package/dist/core/computer/motor/view.js.map +1 -0
  369. package/dist/core/computer/motor-ada.d.ts +159 -0
  370. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  371. package/dist/core/computer/motor-ada.js +412 -0
  372. package/dist/core/computer/motor-ada.js.map +1 -0
  373. package/dist/core/computer/politica.d.ts +56 -0
  374. package/dist/core/computer/politica.d.ts.map +1 -0
  375. package/dist/core/computer/politica.js +163 -0
  376. package/dist/core/computer/politica.js.map +1 -0
  377. package/dist/core/computer/tools.d.ts +26 -0
  378. package/dist/core/computer/tools.d.ts.map +1 -0
  379. package/dist/core/computer/tools.js +399 -0
  380. package/dist/core/computer/tools.js.map +1 -0
  381. package/dist/core/context-breakdown.d.ts +80 -0
  382. package/dist/core/context-breakdown.d.ts.map +1 -0
  383. package/dist/core/context-breakdown.js +87 -0
  384. package/dist/core/context-breakdown.js.map +1 -0
  385. package/dist/core/credenciales/cliente.d.ts +60 -0
  386. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  387. package/dist/core/credenciales/cliente.js +81 -0
  388. package/dist/core/credenciales/cliente.js.map +1 -0
  389. package/dist/core/credenciales/pool.d.ts +96 -0
  390. package/dist/core/credenciales/pool.d.ts.map +1 -0
  391. package/dist/core/credenciales/pool.js +128 -0
  392. package/dist/core/credenciales/pool.js.map +1 -0
  393. package/dist/core/credenciales/reposo.d.ts +93 -0
  394. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  395. package/dist/core/credenciales/reposo.js +489 -0
  396. package/dist/core/credenciales/reposo.js.map +1 -0
  397. package/dist/core/credenciales/servidor.d.ts +55 -0
  398. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  399. package/dist/core/credenciales/servidor.js +205 -0
  400. package/dist/core/credenciales/servidor.js.map +1 -0
  401. package/dist/core/defaults.d.ts +1 -0
  402. package/dist/core/defaults.d.ts.map +1 -1
  403. package/dist/core/defaults.js +9 -0
  404. package/dist/core/defaults.js.map +1 -1
  405. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  406. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  407. package/dist/core/descubrimiento/comandos.js +76 -0
  408. package/dist/core/descubrimiento/comandos.js.map +1 -0
  409. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  410. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  411. package/dist/core/descubrimiento/mcp.js +130 -0
  412. package/dist/core/descubrimiento/mcp.js.map +1 -0
  413. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  414. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  415. package/dist/core/descubrimiento/reglas.js +134 -0
  416. package/dist/core/descubrimiento/reglas.js.map +1 -0
  417. package/dist/core/descubrimiento/skills.d.ts +57 -0
  418. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  419. package/dist/core/descubrimiento/skills.js +113 -0
  420. package/dist/core/descubrimiento/skills.js.map +1 -0
  421. package/dist/core/dificultad/clasificador.d.ts +133 -0
  422. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  423. package/dist/core/dificultad/clasificador.js +288 -0
  424. package/dist/core/dificultad/clasificador.js.map +1 -0
  425. package/dist/core/edicion/diario.d.ts +37 -0
  426. package/dist/core/edicion/diario.d.ts.map +1 -0
  427. package/dist/core/edicion/diario.js +51 -0
  428. package/dist/core/edicion/diario.js.map +1 -0
  429. package/dist/core/edicion/hashline.d.ts +71 -0
  430. package/dist/core/edicion/hashline.d.ts.map +1 -0
  431. package/dist/core/edicion/hashline.js +111 -0
  432. package/dist/core/edicion/hashline.js.map +1 -0
  433. package/dist/core/edicion/hueco.d.ts +64 -0
  434. package/dist/core/edicion/hueco.d.ts.map +1 -0
  435. package/dist/core/edicion/hueco.js +162 -0
  436. package/dist/core/edicion/hueco.js.map +1 -0
  437. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  438. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  439. package/dist/core/edicion/limpiar-carga.js +121 -0
  440. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  441. package/dist/core/edicion/observador.d.ts +80 -0
  442. package/dist/core/edicion/observador.d.ts.map +1 -0
  443. package/dist/core/edicion/observador.js +183 -0
  444. package/dist/core/edicion/observador.js.map +1 -0
  445. package/dist/core/edicion/parecido.d.ts +53 -0
  446. package/dist/core/edicion/parecido.d.ts.map +1 -0
  447. package/dist/core/edicion/parecido.js +145 -0
  448. package/dist/core/edicion/parecido.js.map +1 -0
  449. package/dist/core/edicion/parseo.d.ts +58 -0
  450. package/dist/core/edicion/parseo.d.ts.map +1 -0
  451. package/dist/core/edicion/parseo.js +124 -0
  452. package/dist/core/edicion/parseo.js.map +1 -0
  453. package/dist/core/edicion/reparacion.d.ts +67 -0
  454. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  455. package/dist/core/edicion/reparacion.js +202 -0
  456. package/dist/core/edicion/reparacion.js.map +1 -0
  457. package/dist/core/edicion/sangria.d.ts +121 -0
  458. package/dist/core/edicion/sangria.d.ts.map +1 -0
  459. package/dist/core/edicion/sangria.js +341 -0
  460. package/dist/core/edicion/sangria.js.map +1 -0
  461. package/dist/core/edicion/tipos.d.ts +58 -0
  462. package/dist/core/edicion/tipos.d.ts.map +1 -0
  463. package/dist/core/edicion/tipos.js +160 -0
  464. package/dist/core/edicion/tipos.js.map +1 -0
  465. package/dist/core/engine-personality.d.ts +12 -0
  466. package/dist/core/engine-personality.d.ts.map +1 -0
  467. package/dist/core/engine-personality.js +53 -0
  468. package/dist/core/engine-personality.js.map +1 -0
  469. package/dist/core/errores/proveedor.d.ts +53 -0
  470. package/dist/core/errores/proveedor.d.ts.map +1 -0
  471. package/dist/core/errores/proveedor.js +191 -0
  472. package/dist/core/errores/proveedor.js.map +1 -0
  473. package/dist/core/estructural/buscar.d.ts +61 -0
  474. package/dist/core/estructural/buscar.d.ts.map +1 -0
  475. package/dist/core/estructural/buscar.js +261 -0
  476. package/dist/core/estructural/buscar.js.map +1 -0
  477. package/dist/core/estructural/editar.d.ts +36 -0
  478. package/dist/core/estructural/editar.d.ts.map +1 -0
  479. package/dist/core/estructural/editar.js +123 -0
  480. package/dist/core/estructural/editar.js.map +1 -0
  481. package/dist/core/estructural/tools.d.ts +11 -0
  482. package/dist/core/estructural/tools.d.ts.map +1 -0
  483. package/dist/core/estructural/tools.js +100 -0
  484. package/dist/core/estructural/tools.js.map +1 -0
  485. package/dist/core/experimental.d.ts.map +1 -1
  486. package/dist/core/experimental.js +10 -1
  487. package/dist/core/experimental.js.map +1 -1
  488. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  489. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  490. package/dist/core/extensiones/suplantacion.js +61 -0
  491. package/dist/core/extensiones/suplantacion.js.map +1 -0
  492. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  493. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  494. package/dist/core/extensiones/vigilancia.js +217 -0
  495. package/dist/core/extensiones/vigilancia.js.map +1 -0
  496. package/dist/core/extensions/index.d.ts +1 -1
  497. package/dist/core/extensions/index.d.ts.map +1 -1
  498. package/dist/core/extensions/index.js.map +1 -1
  499. package/dist/core/extensions/loader.d.ts.map +1 -1
  500. package/dist/core/extensions/loader.js +21 -6
  501. package/dist/core/extensions/loader.js.map +1 -1
  502. package/dist/core/extensions/types.d.ts +23 -4
  503. package/dist/core/extensions/types.d.ts.map +1 -1
  504. package/dist/core/extensions/types.js.map +1 -1
  505. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  506. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  507. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  508. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  509. package/dist/core/harness/refine.d.ts +40 -0
  510. package/dist/core/harness/refine.d.ts.map +1 -0
  511. package/dist/core/harness/refine.js +109 -0
  512. package/dist/core/harness/refine.js.map +1 -0
  513. package/dist/core/harness/store.d.ts +75 -0
  514. package/dist/core/harness/store.d.ts.map +1 -0
  515. package/dist/core/harness/store.js +149 -0
  516. package/dist/core/harness/store.js.map +1 -0
  517. package/dist/core/hooks/contract.d.ts +85 -0
  518. package/dist/core/hooks/contract.d.ts.map +1 -0
  519. package/dist/core/hooks/contract.js +140 -0
  520. package/dist/core/hooks/contract.js.map +1 -0
  521. package/dist/core/hooks/runner.d.ts +42 -0
  522. package/dist/core/hooks/runner.d.ts.map +1 -0
  523. package/dist/core/hooks/runner.js +85 -0
  524. package/dist/core/hooks/runner.js.map +1 -0
  525. package/dist/core/hooks/session-hooks.d.ts +62 -0
  526. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  527. package/dist/core/hooks/session-hooks.js +84 -0
  528. package/dist/core/hooks/session-hooks.js.map +1 -0
  529. package/dist/core/importar/formatos.d.ts +69 -0
  530. package/dist/core/importar/formatos.d.ts.map +1 -0
  531. package/dist/core/importar/formatos.js +235 -0
  532. package/dist/core/importar/formatos.js.map +1 -0
  533. package/dist/core/interactivo/deteccion.d.ts +44 -0
  534. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  535. package/dist/core/interactivo/deteccion.js +82 -0
  536. package/dist/core/interactivo/deteccion.js.map +1 -0
  537. package/dist/core/interactivo/sesion.d.ts +50 -0
  538. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  539. package/dist/core/interactivo/sesion.js +156 -0
  540. package/dist/core/interactivo/sesion.js.map +1 -0
  541. package/dist/core/interactivo/tools.d.ts +21 -0
  542. package/dist/core/interactivo/tools.d.ts.map +1 -0
  543. package/dist/core/interactivo/tools.js +122 -0
  544. package/dist/core/interactivo/tools.js.map +1 -0
  545. package/dist/core/keybindings.d.ts.map +1 -1
  546. package/dist/core/keybindings.js +2 -1
  547. package/dist/core/keybindings.js.map +1 -1
  548. package/dist/core/lectura/mapa.d.ts +70 -0
  549. package/dist/core/lectura/mapa.d.ts.map +1 -0
  550. package/dist/core/lectura/mapa.js +177 -0
  551. package/dist/core/lectura/mapa.js.map +1 -0
  552. package/dist/core/lectura/pdf.d.ts +49 -0
  553. package/dist/core/lectura/pdf.d.ts.map +1 -0
  554. package/dist/core/lectura/pdf.js +337 -0
  555. package/dist/core/lectura/pdf.js.map +1 -0
  556. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  557. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  558. package/dist/core/limpieza/comprobadores.js +311 -0
  559. package/dist/core/limpieza/comprobadores.js.map +1 -0
  560. package/dist/core/limpieza/parseo.d.ts +19 -0
  561. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  562. package/dist/core/limpieza/parseo.js +124 -0
  563. package/dist/core/limpieza/parseo.js.map +1 -0
  564. package/dist/core/limpieza/reparacion.d.ts +77 -0
  565. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  566. package/dist/core/limpieza/reparacion.js +254 -0
  567. package/dist/core/limpieza/reparacion.js.map +1 -0
  568. package/dist/core/limpieza/tipos.d.ts +56 -0
  569. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  570. package/dist/core/limpieza/tipos.js +9 -0
  571. package/dist/core/limpieza/tipos.js.map +1 -0
  572. package/dist/core/lsp/cliente.d.ts +52 -0
  573. package/dist/core/lsp/cliente.d.ts.map +1 -0
  574. package/dist/core/lsp/cliente.js +232 -0
  575. package/dist/core/lsp/cliente.js.map +1 -0
  576. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  577. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  578. package/dist/core/lsp/descubrimiento.js +152 -0
  579. package/dist/core/lsp/descubrimiento.js.map +1 -0
  580. package/dist/core/lsp/ediciones.d.ts +59 -0
  581. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  582. package/dist/core/lsp/ediciones.js +89 -0
  583. package/dist/core/lsp/ediciones.js.map +1 -0
  584. package/dist/core/lsp/extension.d.ts +28 -0
  585. package/dist/core/lsp/extension.d.ts.map +1 -0
  586. package/dist/core/lsp/extension.js +34 -0
  587. package/dist/core/lsp/extension.js.map +1 -0
  588. package/dist/core/lsp/tools.d.ts +45 -0
  589. package/dist/core/lsp/tools.d.ts.map +1 -0
  590. package/dist/core/lsp/tools.js +265 -0
  591. package/dist/core/lsp/tools.js.map +1 -0
  592. package/dist/core/mcp/client.d.ts +60 -0
  593. package/dist/core/mcp/client.d.ts.map +1 -0
  594. package/dist/core/mcp/client.js +139 -0
  595. package/dist/core/mcp/client.js.map +1 -0
  596. package/dist/core/mcp/manager.d.ts +86 -0
  597. package/dist/core/mcp/manager.d.ts.map +1 -0
  598. package/dist/core/mcp/manager.js +124 -0
  599. package/dist/core/mcp/manager.js.map +1 -0
  600. package/dist/core/mcp/tools.d.ts +15 -0
  601. package/dist/core/mcp/tools.d.ts.map +1 -0
  602. package/dist/core/mcp/tools.js +84 -0
  603. package/dist/core/mcp/tools.js.map +1 -0
  604. package/dist/core/memory-engine/audit-export.d.ts +56 -0
  605. package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
  606. package/dist/core/memory-engine/audit-export.js +100 -0
  607. package/dist/core/memory-engine/audit-export.js.map +1 -0
  608. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  609. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  610. package/dist/core/memory-engine/audit-indice.js +271 -0
  611. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  612. package/dist/core/memory-engine/audit.d.ts +18 -6
  613. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  614. package/dist/core/memory-engine/audit.js +32 -50
  615. package/dist/core/memory-engine/audit.js.map +1 -1
  616. package/dist/core/memory-engine/engine.d.ts +21 -4
  617. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  618. package/dist/core/memory-engine/engine.js +219 -55
  619. package/dist/core/memory-engine/engine.js.map +1 -1
  620. package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
  621. package/dist/core/memory-engine/inverted-index.js +67 -10
  622. package/dist/core/memory-engine/inverted-index.js.map +1 -1
  623. package/dist/core/memory-engine/keychain.d.ts.map +1 -1
  624. package/dist/core/memory-engine/keychain.js +1 -6
  625. package/dist/core/memory-engine/keychain.js.map +1 -1
  626. package/dist/core/memory-engine/observation-store.d.ts +0 -1
  627. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  628. package/dist/core/memory-engine/observation-store.js +40 -12
  629. package/dist/core/memory-engine/observation-store.js.map +1 -1
  630. package/dist/core/memory-engine/refinements.d.ts +51 -0
  631. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  632. package/dist/core/memory-engine/refinements.js +99 -0
  633. package/dist/core/memory-engine/refinements.js.map +1 -0
  634. package/dist/core/memory-engine/scanner.d.ts.map +1 -1
  635. package/dist/core/memory-engine/scanner.js +25 -5
  636. package/dist/core/memory-engine/scanner.js.map +1 -1
  637. package/dist/core/memory-engine/security.d.ts.map +1 -1
  638. package/dist/core/memory-engine/security.js +131 -23
  639. package/dist/core/memory-engine/security.js.map +1 -1
  640. package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
  641. package/dist/core/memory-engine/session-indexer.js +8 -2
  642. package/dist/core/memory-engine/session-indexer.js.map +1 -1
  643. package/dist/core/memory-engine/tools.d.ts +2 -2
  644. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  645. package/dist/core/memory-engine/tools.js +41 -8
  646. package/dist/core/memory-engine/tools.js.map +1 -1
  647. package/dist/core/memory-engine/types.d.ts +2 -0
  648. package/dist/core/memory-engine/types.d.ts.map +1 -1
  649. package/dist/core/memory-engine/types.js.map +1 -1
  650. package/dist/core/memory-engine/vault.d.ts.map +1 -1
  651. package/dist/core/memory-engine/vault.js +2 -2
  652. package/dist/core/memory-engine/vault.js.map +1 -1
  653. package/dist/core/model-config.d.ts.map +1 -1
  654. package/dist/core/model-config.js +2 -1
  655. package/dist/core/model-config.js.map +1 -1
  656. package/dist/core/model-resolver.d.ts +1 -0
  657. package/dist/core/model-resolver.d.ts.map +1 -1
  658. package/dist/core/model-resolver.js +19 -7
  659. package/dist/core/model-resolver.js.map +1 -1
  660. package/dist/core/models-store.d.ts.map +1 -1
  661. package/dist/core/models-store.js +2 -1
  662. package/dist/core/models-store.js.map +1 -1
  663. package/dist/core/muestreo-restringido.d.ts +49 -0
  664. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  665. package/dist/core/muestreo-restringido.js +65 -0
  666. package/dist/core/muestreo-restringido.js.map +1 -0
  667. package/dist/core/orphan-process-journal.d.ts +48 -0
  668. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  669. package/dist/core/orphan-process-journal.js +116 -0
  670. package/dist/core/orphan-process-journal.js.map +1 -0
  671. package/dist/core/package-manager.d.ts.map +1 -1
  672. package/dist/core/package-manager.js +11 -6
  673. package/dist/core/package-manager.js.map +1 -1
  674. package/dist/core/pi-manifest.d.ts.map +1 -1
  675. package/dist/core/pi-manifest.js +2 -1
  676. package/dist/core/pi-manifest.js.map +1 -1
  677. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  678. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  679. package/dist/core/privacidad/categorias-especiales.js +745 -0
  680. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  681. package/dist/core/privacidad/tapar.d.ts +48 -0
  682. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  683. package/dist/core/privacidad/tapar.js +66 -0
  684. package/dist/core/privacidad/tapar.js.map +1 -0
  685. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  686. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  687. package/dist/core/prompt-cache/diagnostics.js +100 -0
  688. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  689. package/dist/core/prompt-cache/index.d.ts +33 -0
  690. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  691. package/dist/core/prompt-cache/index.js +189 -0
  692. package/dist/core/prompt-cache/index.js.map +1 -0
  693. package/dist/core/prompt-cache/payload.d.ts +58 -0
  694. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  695. package/dist/core/prompt-cache/payload.js +122 -0
  696. package/dist/core/prompt-cache/payload.js.map +1 -0
  697. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  698. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  699. package/dist/core/prompt-cache/stabilize.js +137 -0
  700. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  701. package/dist/core/prompt-cache/stats.d.ts +55 -0
  702. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  703. package/dist/core/prompt-cache/stats.js +158 -0
  704. package/dist/core/prompt-cache/stats.js.map +1 -0
  705. package/dist/core/prompt-eleccion.d.ts +38 -0
  706. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  707. package/dist/core/prompt-eleccion.js +46 -0
  708. package/dist/core/prompt-eleccion.js.map +1 -0
  709. package/dist/core/prompt-optimizer.d.ts +53 -0
  710. package/dist/core/prompt-optimizer.d.ts.map +1 -0
  711. package/dist/core/prompt-optimizer.js +138 -0
  712. package/dist/core/prompt-optimizer.js.map +1 -0
  713. package/dist/core/prompts/montar.d.ts +75 -0
  714. package/dist/core/prompts/montar.d.ts.map +1 -0
  715. package/dist/core/prompts/montar.js +146 -0
  716. package/dist/core/prompts/montar.js.map +1 -0
  717. package/dist/core/prompts/plantilla.d.ts +54 -0
  718. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  719. package/dist/core/prompts/plantilla.js +153 -0
  720. package/dist/core/prompts/plantilla.js.map +1 -0
  721. package/dist/core/prompts/sistema.md +134 -0
  722. package/dist/core/provider-attribution.d.ts +24 -2
  723. package/dist/core/provider-attribution.d.ts.map +1 -1
  724. package/dist/core/provider-attribution.js +24 -42
  725. package/dist/core/provider-attribution.js.map +1 -1
  726. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  727. package/dist/core/remote-catalog-provider.js +2 -1
  728. package/dist/core/remote-catalog-provider.js.map +1 -1
  729. package/dist/core/remoto/destino.d.ts +38 -0
  730. package/dist/core/remoto/destino.d.ts.map +1 -0
  731. package/dist/core/remoto/destino.js +105 -0
  732. package/dist/core/remoto/destino.js.map +1 -0
  733. package/dist/core/remoto/ejecutor.d.ts +59 -0
  734. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  735. package/dist/core/remoto/ejecutor.js +225 -0
  736. package/dist/core/remoto/ejecutor.js.map +1 -0
  737. package/dist/core/remoto/ficheros.d.ts +29 -0
  738. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  739. package/dist/core/remoto/ficheros.js +90 -0
  740. package/dist/core/remoto/ficheros.js.map +1 -0
  741. package/dist/core/remoto/registro-extension.d.ts +15 -0
  742. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  743. package/dist/core/remoto/registro-extension.js +17 -0
  744. package/dist/core/remoto/registro-extension.js.map +1 -0
  745. package/dist/core/remoto/tools.d.ts +28 -0
  746. package/dist/core/remoto/tools.d.ts.map +1 -0
  747. package/dist/core/remoto/tools.js +31 -0
  748. package/dist/core/remoto/tools.js.map +1 -0
  749. package/dist/core/resource-loader.d.ts +58 -0
  750. package/dist/core/resource-loader.d.ts.map +1 -1
  751. package/dist/core/resource-loader.js +326 -8
  752. package/dist/core/resource-loader.js.map +1 -1
  753. package/dist/core/revision/hallazgo.d.ts +51 -0
  754. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  755. package/dist/core/revision/hallazgo.js +73 -0
  756. package/dist/core/revision/hallazgo.js.map +1 -0
  757. package/dist/core/revision/revisor.d.ts +81 -0
  758. package/dist/core/revision/revisor.d.ts.map +1 -0
  759. package/dist/core/revision/revisor.js +132 -0
  760. package/dist/core/revision/revisor.js.map +1 -0
  761. package/dist/core/revision/sarif.d.ts +30 -0
  762. package/dist/core/revision/sarif.d.ts.map +1 -0
  763. package/dist/core/revision/sarif.js +83 -0
  764. package/dist/core/revision/sarif.js.map +1 -0
  765. package/dist/core/scheduler/scheduler.d.ts +87 -0
  766. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  767. package/dist/core/scheduler/scheduler.js +178 -0
  768. package/dist/core/scheduler/scheduler.js.map +1 -0
  769. package/dist/core/sdk.d.ts +8 -0
  770. package/dist/core/sdk.d.ts.map +1 -1
  771. package/dist/core/sdk.js +11 -1
  772. package/dist/core/sdk.js.map +1 -1
  773. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  774. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  775. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  776. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  777. package/dist/core/session-manager.d.ts.map +1 -1
  778. package/dist/core/session-manager.js +2 -1
  779. package/dist/core/session-manager.js.map +1 -1
  780. package/dist/core/settings-diagnostics.d.ts +9 -0
  781. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  782. package/dist/core/settings-diagnostics.js +21 -0
  783. package/dist/core/settings-diagnostics.js.map +1 -0
  784. package/dist/core/settings-manager.d.ts +156 -0
  785. package/dist/core/settings-manager.d.ts.map +1 -1
  786. package/dist/core/settings-manager.js +255 -10
  787. package/dist/core/settings-manager.js.map +1 -1
  788. package/dist/core/skills.d.ts.map +1 -1
  789. package/dist/core/skills.js +51 -33
  790. package/dist/core/skills.js.map +1 -1
  791. package/dist/core/slash-commands.d.ts.map +1 -1
  792. package/dist/core/slash-commands.js +2 -1
  793. package/dist/core/slash-commands.js.map +1 -1
  794. package/dist/core/system-prompt.d.ts +17 -0
  795. package/dist/core/system-prompt.d.ts.map +1 -1
  796. package/dist/core/system-prompt.js +13 -5
  797. package/dist/core/system-prompt.js.map +1 -1
  798. package/dist/core/telemetria/otlp.d.ts +122 -0
  799. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  800. package/dist/core/telemetria/otlp.js +373 -0
  801. package/dist/core/telemetria/otlp.js.map +1 -0
  802. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  803. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  804. package/dist/core/tools/coercion-argumentos.js +99 -0
  805. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  806. package/dist/core/tools/edit-diff.d.ts +0 -12
  807. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  808. package/dist/core/tools/edit-diff.js +234 -12
  809. package/dist/core/tools/edit-diff.js.map +1 -1
  810. package/dist/core/tools/edit.d.ts.map +1 -1
  811. package/dist/core/tools/edit.js +28 -5
  812. package/dist/core/tools/edit.js.map +1 -1
  813. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  814. package/dist/core/tools/file-mutation-queue.js +5 -0
  815. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  816. package/dist/core/tools/index.d.ts.map +1 -1
  817. package/dist/core/tools/index.js +2 -2
  818. package/dist/core/tools/index.js.map +1 -1
  819. package/dist/core/tools/json-tolerante.d.ts +30 -0
  820. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  821. package/dist/core/tools/json-tolerante.js +70 -0
  822. package/dist/core/tools/json-tolerante.js.map +1 -0
  823. package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
  824. package/dist/core/tools/project-memory-tool.js +4 -1
  825. package/dist/core/tools/project-memory-tool.js.map +1 -1
  826. package/dist/core/tools/read.d.ts.map +1 -1
  827. package/dist/core/tools/read.js +17 -0
  828. package/dist/core/tools/read.js.map +1 -1
  829. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  830. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  831. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  832. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  833. package/dist/core/trust-manager.d.ts.map +1 -1
  834. package/dist/core/trust-manager.js +2 -1
  835. package/dist/core/trust-manager.js.map +1 -1
  836. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  837. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  838. package/dist/core/turno-vacio/detectar.js +66 -0
  839. package/dist/core/turno-vacio/detectar.js.map +1 -0
  840. package/dist/core/undo/journal.d.ts +57 -0
  841. package/dist/core/undo/journal.d.ts.map +1 -0
  842. package/dist/core/undo/journal.js +178 -0
  843. package/dist/core/undo/journal.js.map +1 -0
  844. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  845. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  846. package/dist/core/urls-internas/auditoria.js +42 -0
  847. package/dist/core/urls-internas/auditoria.js.map +1 -0
  848. package/dist/core/urls-internas/boveda.d.ts +13 -0
  849. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  850. package/dist/core/urls-internas/boveda.js +40 -0
  851. package/dist/core/urls-internas/boveda.js.map +1 -0
  852. package/dist/core/urls-internas/lector.d.ts +30 -0
  853. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  854. package/dist/core/urls-internas/lector.js +56 -0
  855. package/dist/core/urls-internas/lector.js.map +1 -0
  856. package/dist/core/urls-internas/memoria.d.ts +11 -0
  857. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  858. package/dist/core/urls-internas/memoria.js +25 -0
  859. package/dist/core/urls-internas/memoria.js.map +1 -0
  860. package/dist/core/urls-internas/parse.d.ts +28 -0
  861. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  862. package/dist/core/urls-internas/parse.js +32 -0
  863. package/dist/core/urls-internas/parse.js.map +1 -0
  864. package/dist/core/urls-internas/reglas.d.ts +10 -0
  865. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  866. package/dist/core/urls-internas/reglas.js +31 -0
  867. package/dist/core/urls-internas/reglas.js.map +1 -0
  868. package/dist/core/usage/aggregate.d.ts +68 -0
  869. package/dist/core/usage/aggregate.d.ts.map +1 -0
  870. package/dist/core/usage/aggregate.js +93 -0
  871. package/dist/core/usage/aggregate.js.map +1 -0
  872. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  873. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  874. package/dist/core/usage/cuota/anthropic.js +63 -0
  875. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  876. package/dist/core/usage/cuota/cache.d.ts +20 -0
  877. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  878. package/dist/core/usage/cuota/cache.js +36 -0
  879. package/dist/core/usage/cuota/cache.js.map +1 -0
  880. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  881. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  882. package/dist/core/usage/cuota/github-copilot.js +67 -0
  883. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  884. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  885. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  886. package/dist/core/usage/cuota/google-gemini.js +72 -0
  887. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  888. package/dist/core/usage/cuota/index.d.ts +25 -0
  889. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  890. package/dist/core/usage/cuota/index.js +50 -0
  891. package/dist/core/usage/cuota/index.js.map +1 -0
  892. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  893. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  894. package/dist/core/usage/cuota/openai-codex.js +59 -0
  895. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  896. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  897. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  898. package/dist/core/usage/cuota/openrouter.js +47 -0
  899. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  900. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  901. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  902. package/dist/core/usage/cuota/tipos.js +25 -0
  903. package/dist/core/usage/cuota/tipos.js.map +1 -0
  904. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  905. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  906. package/dist/core/web/busqueda-nativa.js +163 -0
  907. package/dist/core/web/busqueda-nativa.js.map +1 -0
  908. package/dist/core/web/destino.d.ts +58 -0
  909. package/dist/core/web/destino.d.ts.map +1 -0
  910. package/dist/core/web/destino.js +127 -0
  911. package/dist/core/web/destino.js.map +1 -0
  912. package/dist/core/web/proveedores/brave.d.ts +6 -0
  913. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  914. package/dist/core/web/proveedores/brave.js +20 -0
  915. package/dist/core/web/proveedores/brave.js.map +1 -0
  916. package/dist/core/web/proveedores/claves.d.ts +19 -0
  917. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  918. package/dist/core/web/proveedores/claves.js +36 -0
  919. package/dist/core/web/proveedores/claves.js.map +1 -0
  920. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  921. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  922. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  923. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  924. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  925. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  926. package/dist/core/web/proveedores/ecosia.js +72 -0
  927. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  928. package/dist/core/web/proveedores/exa.d.ts +6 -0
  929. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  930. package/dist/core/web/proveedores/exa.js +24 -0
  931. package/dist/core/web/proveedores/exa.js.map +1 -0
  932. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  933. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  934. package/dist/core/web/proveedores/mojeek.js +65 -0
  935. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  936. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  937. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  938. package/dist/core/web/proveedores/navegador.js +13 -0
  939. package/dist/core/web/proveedores/navegador.js.map +1 -0
  940. package/dist/core/web/proveedores/registro.d.ts +43 -0
  941. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  942. package/dist/core/web/proveedores/registro.js +49 -0
  943. package/dist/core/web/proveedores/registro.js.map +1 -0
  944. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  945. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  946. package/dist/core/web/proveedores/searxng.js +17 -0
  947. package/dist/core/web/proveedores/searxng.js.map +1 -0
  948. package/dist/core/web/proveedores/serper.d.ts +9 -0
  949. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  950. package/dist/core/web/proveedores/serper.js +19 -0
  951. package/dist/core/web/proveedores/serper.js.map +1 -0
  952. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  953. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  954. package/dist/core/web/proveedores/tavily.js +19 -0
  955. package/dist/core/web/proveedores/tavily.js.map +1 -0
  956. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  957. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  958. package/dist/core/web/proveedores/tipos.js +10 -0
  959. package/dist/core/web/proveedores/tipos.js.map +1 -0
  960. package/dist/core/web/registro-red.d.ts +43 -0
  961. package/dist/core/web/registro-red.d.ts.map +1 -0
  962. package/dist/core/web/registro-red.js +86 -0
  963. package/dist/core/web/registro-red.js.map +1 -0
  964. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  965. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  966. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  967. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  968. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  969. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  970. package/dist/core/web/scrapers/crates-io.js +29 -0
  971. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  972. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  973. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  974. package/dist/core/web/scrapers/docs-rs.js +35 -0
  975. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  976. package/dist/core/web/scrapers/github.d.ts +3 -0
  977. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  978. package/dist/core/web/scrapers/github.js +72 -0
  979. package/dist/core/web/scrapers/github.js.map +1 -0
  980. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  981. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  982. package/dist/core/web/scrapers/go-pkg.js +30 -0
  983. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  984. package/dist/core/web/scrapers/hex.d.ts +6 -0
  985. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  986. package/dist/core/web/scrapers/hex.js +27 -0
  987. package/dist/core/web/scrapers/hex.js.map +1 -0
  988. package/dist/core/web/scrapers/maven.d.ts +8 -0
  989. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  990. package/dist/core/web/scrapers/maven.js +41 -0
  991. package/dist/core/web/scrapers/maven.js.map +1 -0
  992. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  993. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  994. package/dist/core/web/scrapers/mdn.js +28 -0
  995. package/dist/core/web/scrapers/mdn.js.map +1 -0
  996. package/dist/core/web/scrapers/npm.d.ts +11 -0
  997. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  998. package/dist/core/web/scrapers/npm.js +57 -0
  999. package/dist/core/web/scrapers/npm.js.map +1 -0
  1000. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  1001. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  1002. package/dist/core/web/scrapers/nuget.js +22 -0
  1003. package/dist/core/web/scrapers/nuget.js.map +1 -0
  1004. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  1005. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  1006. package/dist/core/web/scrapers/nvd.js +37 -0
  1007. package/dist/core/web/scrapers/nvd.js.map +1 -0
  1008. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  1009. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  1010. package/dist/core/web/scrapers/pypi.js +31 -0
  1011. package/dist/core/web/scrapers/pypi.js.map +1 -0
  1012. package/dist/core/web/scrapers/registro.d.ts +13 -0
  1013. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  1014. package/dist/core/web/scrapers/registro.js +65 -0
  1015. package/dist/core/web/scrapers/registro.js.map +1 -0
  1016. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  1017. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  1018. package/dist/core/web/scrapers/rubygems.js +23 -0
  1019. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  1020. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  1021. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  1022. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  1023. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  1024. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  1025. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  1026. package/dist/core/web/scrapers/tipos.js +23 -0
  1027. package/dist/core/web/scrapers/tipos.js.map +1 -0
  1028. package/dist/core/web/texto.d.ts +10 -0
  1029. package/dist/core/web/texto.d.ts.map +1 -0
  1030. package/dist/core/web/texto.js +26 -0
  1031. package/dist/core/web/texto.js.map +1 -0
  1032. package/dist/core/web/tools.d.ts +91 -0
  1033. package/dist/core/web/tools.d.ts.map +1 -0
  1034. package/dist/core/web/tools.js +304 -0
  1035. package/dist/core/web/tools.js.map +1 -0
  1036. package/dist/core/wiki/almacen.d.ts +33 -0
  1037. package/dist/core/wiki/almacen.d.ts.map +1 -0
  1038. package/dist/core/wiki/almacen.js +93 -0
  1039. package/dist/core/wiki/almacen.js.map +1 -0
  1040. package/dist/core/wiki/citas.d.ts +111 -0
  1041. package/dist/core/wiki/citas.d.ts.map +1 -0
  1042. package/dist/core/wiki/citas.js +146 -0
  1043. package/dist/core/wiki/citas.js.map +1 -0
  1044. package/dist/core/workflows/agent-runner.d.ts +88 -0
  1045. package/dist/core/workflows/agent-runner.d.ts.map +1 -0
  1046. package/dist/core/workflows/agent-runner.js +312 -0
  1047. package/dist/core/workflows/agent-runner.js.map +1 -0
  1048. package/dist/core/workflows/builtins.d.ts +41 -0
  1049. package/dist/core/workflows/builtins.d.ts.map +1 -0
  1050. package/dist/core/workflows/builtins.js +283 -0
  1051. package/dist/core/workflows/builtins.js.map +1 -0
  1052. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  1053. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  1054. package/dist/core/workflows/contrato/esquema.js +25 -0
  1055. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  1056. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  1057. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  1058. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  1059. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  1060. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  1061. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  1062. package/dist/core/workflows/contrato/validador.js +56 -0
  1063. package/dist/core/workflows/contrato/validador.js.map +1 -0
  1064. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  1065. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  1066. package/dist/core/workflows/contrato/yield.js +80 -0
  1067. package/dist/core/workflows/contrato/yield.js.map +1 -0
  1068. package/dist/core/workflows/goal-engine/engine.d.ts +151 -0
  1069. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
  1070. package/dist/core/workflows/goal-engine/engine.js +503 -0
  1071. package/dist/core/workflows/goal-engine/engine.js.map +1 -0
  1072. package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
  1073. package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
  1074. package/dist/core/workflows/goal-engine/errors.js +9 -0
  1075. package/dist/core/workflows/goal-engine/errors.js.map +1 -0
  1076. package/dist/core/workflows/goal-engine/index.d.ts +13 -0
  1077. package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
  1078. package/dist/core/workflows/goal-engine/index.js +8 -0
  1079. package/dist/core/workflows/goal-engine/index.js.map +1 -0
  1080. package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
  1081. package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
  1082. package/dist/core/workflows/goal-engine/persistence.js +145 -0
  1083. package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
  1084. package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
  1085. package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
  1086. package/dist/core/workflows/goal-engine/prompts.js +131 -0
  1087. package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
  1088. package/dist/core/workflows/goal-engine/state.d.ts +41 -0
  1089. package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
  1090. package/dist/core/workflows/goal-engine/state.js +397 -0
  1091. package/dist/core/workflows/goal-engine/state.js.map +1 -0
  1092. package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
  1093. package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
  1094. package/dist/core/workflows/goal-engine/tools.js +211 -0
  1095. package/dist/core/workflows/goal-engine/tools.js.map +1 -0
  1096. package/dist/core/workflows/goal-engine/types.d.ts +286 -0
  1097. package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
  1098. package/dist/core/workflows/goal-engine/types.js +17 -0
  1099. package/dist/core/workflows/goal-engine/types.js.map +1 -0
  1100. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
  1101. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
  1102. package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
  1103. package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
  1104. package/dist/core/workflows/graph-sync.d.ts +67 -0
  1105. package/dist/core/workflows/graph-sync.d.ts.map +1 -0
  1106. package/dist/core/workflows/graph-sync.js +188 -0
  1107. package/dist/core/workflows/graph-sync.js.map +1 -0
  1108. package/dist/core/workflows/graph.d.ts +143 -0
  1109. package/dist/core/workflows/graph.d.ts.map +1 -0
  1110. package/dist/core/workflows/graph.js +319 -0
  1111. package/dist/core/workflows/graph.js.map +1 -0
  1112. package/dist/core/workflows/index.d.ts +26 -0
  1113. package/dist/core/workflows/index.d.ts.map +1 -0
  1114. package/dist/core/workflows/index.js +18 -0
  1115. package/dist/core/workflows/index.js.map +1 -0
  1116. package/dist/core/workflows/journal.d.ts +68 -0
  1117. package/dist/core/workflows/journal.d.ts.map +1 -0
  1118. package/dist/core/workflows/journal.js +83 -0
  1119. package/dist/core/workflows/journal.js.map +1 -0
  1120. package/dist/core/workflows/manager.d.ts +122 -0
  1121. package/dist/core/workflows/manager.d.ts.map +1 -0
  1122. package/dist/core/workflows/manager.js +351 -0
  1123. package/dist/core/workflows/manager.js.map +1 -0
  1124. package/dist/core/workflows/resolve-script.d.ts +35 -0
  1125. package/dist/core/workflows/resolve-script.d.ts.map +1 -0
  1126. package/dist/core/workflows/resolve-script.js +66 -0
  1127. package/dist/core/workflows/resolve-script.js.map +1 -0
  1128. package/dist/core/workflows/runtime.d.ts +62 -0
  1129. package/dist/core/workflows/runtime.d.ts.map +1 -0
  1130. package/dist/core/workflows/runtime.js +380 -0
  1131. package/dist/core/workflows/runtime.js.map +1 -0
  1132. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  1133. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  1134. package/dist/core/workflows/save-as-skill.js +54 -0
  1135. package/dist/core/workflows/save-as-skill.js.map +1 -0
  1136. package/dist/core/workflows/shared-store.d.ts +31 -0
  1137. package/dist/core/workflows/shared-store.d.ts.map +1 -0
  1138. package/dist/core/workflows/shared-store.js +80 -0
  1139. package/dist/core/workflows/shared-store.js.map +1 -0
  1140. package/dist/core/workflows/subagent-host.d.ts +50 -0
  1141. package/dist/core/workflows/subagent-host.d.ts.map +1 -0
  1142. package/dist/core/workflows/subagent-host.js +225 -0
  1143. package/dist/core/workflows/subagent-host.js.map +1 -0
  1144. package/dist/core/workflows/tool-workflow.d.ts +22 -0
  1145. package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
  1146. package/dist/core/workflows/tool-workflow.js +120 -0
  1147. package/dist/core/workflows/tool-workflow.js.map +1 -0
  1148. package/dist/core/workflows/types.d.ts +191 -0
  1149. package/dist/core/workflows/types.d.ts.map +1 -0
  1150. package/dist/core/workflows/types.js +26 -0
  1151. package/dist/core/workflows/types.js.map +1 -0
  1152. package/dist/core/workflows/worktree.d.ts +42 -0
  1153. package/dist/core/workflows/worktree.d.ts.map +1 -0
  1154. package/dist/core/workflows/worktree.js +107 -0
  1155. package/dist/core/workflows/worktree.js.map +1 -0
  1156. package/dist/extensions/llama/index.d.ts.map +1 -1
  1157. package/dist/extensions/llama/index.js +2 -0
  1158. package/dist/extensions/llama/index.js.map +1 -1
  1159. package/dist/extensions/llama/provider.d.ts.map +1 -1
  1160. package/dist/extensions/llama/provider.js +6 -2
  1161. package/dist/extensions/llama/provider.js.map +1 -1
  1162. package/dist/extensions/remoto/index.d.ts +22 -0
  1163. package/dist/extensions/remoto/index.d.ts.map +1 -0
  1164. package/dist/extensions/remoto/index.js +54 -0
  1165. package/dist/extensions/remoto/index.js.map +1 -0
  1166. package/dist/index.d.ts +1 -13
  1167. package/dist/index.d.ts.map +1 -1
  1168. package/dist/index.js +7 -13
  1169. package/dist/index.js.map +1 -1
  1170. package/dist/main.d.ts +4 -0
  1171. package/dist/main.d.ts.map +1 -1
  1172. package/dist/main.js +26 -15
  1173. package/dist/main.js.map +1 -1
  1174. package/dist/migrations.d.ts.map +1 -1
  1175. package/dist/migrations.js +4 -3
  1176. package/dist/migrations.js.map +1 -1
  1177. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1178. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1179. package/dist/modes/acp/acp-mode.js +190 -0
  1180. package/dist/modes/acp/acp-mode.js.map +1 -0
  1181. package/dist/modes/acp/events.d.ts +74 -0
  1182. package/dist/modes/acp/events.d.ts.map +1 -0
  1183. package/dist/modes/acp/events.js +116 -0
  1184. package/dist/modes/acp/events.js.map +1 -0
  1185. package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
  1186. package/dist/modes/interactive/components/home-screen.js +2 -2
  1187. package/dist/modes/interactive/components/home-screen.js.map +1 -1
  1188. package/dist/modes/interactive/components/model-selector.d.ts +9 -3
  1189. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1190. package/dist/modes/interactive/components/model-selector.js +56 -12
  1191. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1192. package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
  1193. package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
  1194. package/dist/modes/interactive/components/prompt-optimization.js +46 -0
  1195. package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
  1196. package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
  1197. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1198. package/dist/modes/interactive/components/settings-selector.js +180 -56
  1199. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1200. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  1201. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  1202. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  1203. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  1204. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
  1205. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1206. package/dist/modes/interactive/components/thinking-selector.js +74 -17
  1207. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1208. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1209. package/dist/modes/interactive/external-editor.js +2 -1
  1210. package/dist/modes/interactive/external-editor.js.map +1 -1
  1211. package/dist/modes/interactive/interactive-mode.d.ts +21 -1
  1212. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1213. package/dist/modes/interactive/interactive-mode.js +709 -75
  1214. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1215. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1216. package/dist/modes/interactive/theme/theme.js +4 -3
  1217. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1218. package/dist/modes/json-event.d.ts +16 -13
  1219. package/dist/modes/json-event.d.ts.map +1 -1
  1220. package/dist/modes/json-event.js +20 -6
  1221. package/dist/modes/json-event.js.map +1 -1
  1222. package/dist/modes/print-mode.d.ts.map +1 -1
  1223. package/dist/modes/print-mode.js +11 -0
  1224. package/dist/modes/print-mode.js.map +1 -1
  1225. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1226. package/dist/modes/rpc/rpc-mode.js +173 -0
  1227. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1228. package/dist/modes/rpc/rpc-types.d.ts +29 -0
  1229. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1230. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1231. package/dist/package-manager-cli.d.ts.map +1 -1
  1232. package/dist/package-manager-cli.js +27 -5
  1233. package/dist/package-manager-cli.js.map +1 -1
  1234. package/dist/server/attach.d.ts +56 -0
  1235. package/dist/server/attach.d.ts.map +1 -0
  1236. package/dist/server/attach.js +130 -0
  1237. package/dist/server/attach.js.map +1 -0
  1238. package/dist/server/extension-ops.d.ts +40 -0
  1239. package/dist/server/extension-ops.d.ts.map +1 -0
  1240. package/dist/server/extension-ops.js +146 -0
  1241. package/dist/server/extension-ops.js.map +1 -0
  1242. package/dist/server/pi-server-service.d.ts +85 -0
  1243. package/dist/server/pi-server-service.d.ts.map +1 -0
  1244. package/dist/server/pi-server-service.js +213 -0
  1245. package/dist/server/pi-server-service.js.map +1 -0
  1246. package/dist/server/scheduler-tick.d.ts +32 -0
  1247. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1248. package/dist/server/scheduler-tick.js +47 -0
  1249. package/dist/server/scheduler-tick.js.map +1 -0
  1250. package/dist/server/serve.d.ts +25 -0
  1251. package/dist/server/serve.d.ts.map +1 -0
  1252. package/dist/server/serve.js +83 -0
  1253. package/dist/server/serve.js.map +1 -0
  1254. package/dist/server/transcript.d.ts +38 -0
  1255. package/dist/server/transcript.d.ts.map +1 -0
  1256. package/dist/server/transcript.js +176 -0
  1257. package/dist/server/transcript.js.map +1 -0
  1258. package/dist/skills/ada-engine/SKILL.md +153 -0
  1259. package/dist/skills/skill-creator/SKILL.md +90 -0
  1260. package/dist/telegram/api.d.ts +75 -0
  1261. package/dist/telegram/api.d.ts.map +1 -0
  1262. package/dist/telegram/api.js +104 -0
  1263. package/dist/telegram/api.js.map +1 -0
  1264. package/dist/telegram/bridge.d.ts +85 -0
  1265. package/dist/telegram/bridge.d.ts.map +1 -0
  1266. package/dist/telegram/bridge.js +182 -0
  1267. package/dist/telegram/bridge.js.map +1 -0
  1268. package/dist/telegram/journal.d.ts +67 -0
  1269. package/dist/telegram/journal.d.ts.map +1 -0
  1270. package/dist/telegram/journal.js +119 -0
  1271. package/dist/telegram/journal.js.map +1 -0
  1272. package/dist/telegram/servidor.d.ts +15 -0
  1273. package/dist/telegram/servidor.d.ts.map +1 -0
  1274. package/dist/telegram/servidor.js +74 -0
  1275. package/dist/telegram/servidor.js.map +1 -0
  1276. package/dist/utils/frontmatter.d.ts.map +1 -1
  1277. package/dist/utils/frontmatter.js +2 -1
  1278. package/dist/utils/frontmatter.js.map +1 -1
  1279. package/dist/utils/management-http.d.ts +5 -3
  1280. package/dist/utils/management-http.d.ts.map +1 -1
  1281. package/dist/utils/management-http.js +14 -10
  1282. package/dist/utils/management-http.js.map +1 -1
  1283. package/dist/utils/shell.d.ts +11 -0
  1284. package/dist/utils/shell.d.ts.map +1 -1
  1285. package/dist/utils/shell.js +11 -0
  1286. package/dist/utils/shell.js.map +1 -1
  1287. package/dist/utils/text.d.ts +8 -0
  1288. package/dist/utils/text.d.ts.map +1 -0
  1289. package/dist/utils/text.js +9 -0
  1290. package/dist/utils/text.js.map +1 -0
  1291. package/dist/utils/version-check.d.ts.map +1 -1
  1292. package/dist/utils/version-check.js +29 -1
  1293. package/dist/utils/version-check.js.map +1 -1
  1294. package/docs/compaction.md +25 -10
  1295. package/docs/compliance.md +241 -0
  1296. package/docs/containerization.md +24 -24
  1297. package/docs/custom-provider.md +15 -12
  1298. package/docs/development.md +47 -10
  1299. package/docs/docs.json +14 -2
  1300. package/docs/environment-variables.md +20 -17
  1301. package/docs/extensions.md +62 -51
  1302. package/docs/index.md +15 -21
  1303. package/docs/json.md +10 -5
  1304. package/docs/keybindings.md +5 -5
  1305. package/docs/llama-cpp.md +9 -7
  1306. package/docs/models.md +18 -12
  1307. package/docs/packages.md +45 -45
  1308. package/docs/prompt-templates.md +5 -5
  1309. package/docs/providers.md +12 -12
  1310. package/docs/quickstart.md +39 -39
  1311. package/docs/rpc.md +21 -15
  1312. package/docs/sdk.md +38 -38
  1313. package/docs/security.md +26 -21
  1314. package/docs/session-format.md +7 -7
  1315. package/docs/sessions.md +14 -14
  1316. package/docs/settings.md +47 -22
  1317. package/docs/shell-aliases.md +2 -2
  1318. package/docs/skills.md +14 -13
  1319. package/docs/terminal-setup.md +14 -14
  1320. package/docs/termux.md +7 -7
  1321. package/docs/themes.md +11 -11
  1322. package/docs/tmux.md +4 -4
  1323. package/docs/tui.md +3 -3
  1324. package/docs/usage.md +54 -54
  1325. package/docs/windows.md +2 -2
  1326. package/examples/extensions/border-status-editor.ts +1 -1
  1327. package/examples/extensions/git-checkpoint.ts +2 -2
  1328. package/examples/extensions/notify.ts +3 -1
  1329. package/examples/extensions/subagent/README.md +1 -1
  1330. package/examples/extensions/subagent/index.ts +6 -1
  1331. package/examples/extensions/titlebar-spinner.ts +1 -1
  1332. package/examples/rpc-extension-ui.ts +1 -1
  1333. package/examples/sdk/06-extensions.ts +1 -1
  1334. package/examples/sdk/12-full-control.ts +9 -0
  1335. package/examples/sdk/README.md +1 -1
  1336. package/npm-shrinkwrap.json +35 -261
  1337. package/package.json +9 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/core/lectura/pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG9E,MAAM,MAAM,YAAY,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAmMzC,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CA+B5D;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,CAmD/G","sourcesContent":["/**\n * Lectura de PDF sin dependencias: los flujos de contenido de un PDF van\n * comprimidos con Flate (zlib), y `node:zlib` viene de serie. omp lo resuelve\n * renderizando el documento en un navegador headless y haciéndole capturas:\n * infraestructura pesada que aquí no existe. Lo que se extrae es la CAPA DE\n * TEXTO, no una imagen del documento.\n *\n * LOS TRES ESTADOS, nunca dos — confundir dos de ellos es un fallo que se lee\n * como éxito:\n *\n * - `texto`: hay capa de texto y se extrajo. El caso normal.\n * - `sin-capa`: el PDF está BIEN FORMADO pero no trae texto (escaneado o\n * solo imágenes). NO es «fichero vacío»: decir eso sería\n * mentir sobre la causa, y el modelo se lo creería.\n * - `no-pudo`: cifrado, malformado o sin firma. No se sabe qué había.\n *\n * LÍMITES, dichos antes de descubrirlos nadie:\n * · No sigue el cross-reference table: recorre los objetos `N 0 obj …\n * stream…endstream` directamente. Para leer texto basta y evita toda la\n * maquinaria de xref (incluidos los xref streams comprimidos).\n * · Los operadores de posicionamiento fino (Tm, matrices) se aproximan:\n * salto de línea en Td/TD con componente vertical distinta de cero, T*,\n * BT; espacio cuando el kerning de TJ es muy negativo. El ORDEN del\n * texto se conserva; la GEOMETRÍA no. Para layout exacto, omp tiene el\n * navegador y nosotros no fingimos tenerlo.\n * · No descifra: un PDF con /Encrypt se reporta como `no-pudo`, nunca se\n * intenta a ciegas.\n */\n\nimport { open, readFile } from \"node:fs/promises\";\nimport { isAbsolute, join } from \"node:path\";\nimport { inflateSync } from \"node:zlib\";\nimport type { AgentToolResult, ToolDefinition } from \"../extensions/types.ts\";\nimport { truncateHead } from \"../tools/truncate.ts\";\n\nexport type ResultadoPdf =\n\t| { estado: \"texto\"; texto: string }\n\t| { estado: \"sin-capa\"; detalle: string }\n\t| { estado: \"no-pudo\"; motivo: string };\n\n/** Techo de seguridad: un PDF malicioso no decide cuánta CPU gasta el lector. */\nconst MAX_FLUJOS = 800;\nconst MAX_DECODIFICADO = 8 * 1024 * 1024;\n\ninterface Flujo {\n\tdiccionario: string;\n\tcontenido: string;\n}\n\nfunction flujosDe(crudo: string): Flujo[] {\n\tconst flujos: Flujo[] = [];\n\tlet idx = 0;\n\twhile (flujos.length < MAX_FLUJOS) {\n\t\tconst kw = crudo.indexOf(\"stream\", idx);\n\t\tif (kw === -1) break;\n\t\tconst cierreDict = crudo.lastIndexOf(\">>\", kw);\n\t\tconst aperturaDict = cierreDict === -1 ? -1 : crudo.lastIndexOf(\"<<\", cierreDict);\n\t\tif (aperturaDict === -1 || cierreDict < aperturaDict) {\n\t\t\tidx = kw + 6;\n\t\t\tcontinue;\n\t\t}\n\t\tlet p = kw + 6;\n\t\tif (crudo[p] === \"\\r\") p++;\n\t\tif (crudo[p] === \"\\n\") p++;\n\t\tconst fin = crudo.indexOf(\"endstream\", p);\n\t\tif (fin === -1) {\n\t\t\tidx = kw + 6;\n\t\t\tcontinue;\n\t\t}\n\t\tflujos.push({ diccionario: crudo.slice(aperturaDict, cierreDict + 2), contenido: crudo.slice(p, fin) });\n\t\tidx = fin + 9;\n\t}\n\treturn flujos;\n}\n\nfunction decodificar(flujos: Flujo[]): { decodificados: string[]; fallosInflado: number } {\n\tconst decodificados: string[] = [];\n\tlet fallosInflado = 0;\n\tlet presupuesto = MAX_DECODIFICADO;\n\tfor (const flujo of flujos) {\n\t\tif (presupuesto <= 0) break;\n\t\t// Una imagen también va en Flate e infla megas sin aportar texto: se\n\t\t// excluye ANTES de descomprimirla, no después.\n\t\tif (/\\/Subtype\\s*\\/Image/.test(flujo.diccionario)) continue;\n\t\ttry {\n\t\t\tconst bruto = Buffer.from(flujo.contenido, \"latin1\");\n\t\t\tconst datos = flujo.diccionario.includes(\"/FlateDecode\") ? inflateSync(bruto) : bruto;\n\t\t\tif (datos.length > presupuesto) continue;\n\t\t\tpresupuesto -= datos.length;\n\t\t\tconst texto = datos.toString(\"latin1\");\n\t\t\t// Solo quedan los flujos que SON de contenido: operadores de texto.\n\t\t\tif (/\\bBT\\b/.test(texto) && /\\b(Tj|TJ)\\b/.test(texto)) decodificados.push(texto);\n\t\t} catch {\n\t\t\tfallosInflado++;\n\t\t}\n\t}\n\treturn { decodificados, fallosInflado };\n}\n\n/**\n * Escáner de operadores de texto. Mantiene una línea en curso y corta en las\n * fronteras que de verdad separan líneas; dentro de una línea, los fragmentos\n * de un TJ se pegan sin inventar separadores.\n */\nfunction extraerTextoDeContenido(decodificado: string): string {\n\tconst lineas: string[] = [];\n\tlet lineaActual = \"\";\n\tlet ultimoNumero = Number.NaN;\n\n\tconst cortaLinea = (): void => {\n\t\tlineas.push(lineaActual);\n\t\tlineaActual = \"\";\n\t};\n\tconst emite = (s: string): void => {\n\t\tlineaActual += s;\n\t};\n\n\tlet i = 0;\n\tconst n = decodificado.length;\n\twhile (i < n) {\n\t\tconst c = decodificado[i];\n\t\tif (c === \"(\") {\n\t\t\ti++;\n\t\t\tlet literal = \"\";\n\t\t\tlet profundidad = 1;\n\t\t\twhile (i < n && profundidad > 0) {\n\t\t\t\tconst ch = decodificado[i];\n\t\t\t\tif (ch === \"\\\\\") {\n\t\t\t\t\tconst sig = decodificado[i + 1];\n\t\t\t\t\tif (sig === \"n\") literal += \"\\n\";\n\t\t\t\t\telse if (sig === \"r\") literal += \"\\r\";\n\t\t\t\t\telse if (sig === \"t\") literal += \"\\t\";\n\t\t\t\t\telse if (sig === \"b\" || sig === \"f\") literal += \" \";\n\t\t\t\t\telse if (sig >= \"0\" && sig <= \"7\") {\n\t\t\t\t\t\t// Octal \\ddd, hasta tres dígitos.\n\t\t\t\t\t\tlet octal = \"\";\n\t\t\t\t\t\tlet j = i + 1;\n\t\t\t\t\t\twhile (j < n && octal.length < 3 && decodificado[j] >= \"0\" && decodificado[j] <= \"7\") {\n\t\t\t\t\t\t\toctal += decodificado[j];\n\t\t\t\t\t\t\tj++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tliteral += String.fromCharCode(Number.parseInt(octal, 8));\n\t\t\t\t\t\ti = j;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (sig === \"\\r\") {\n\t\t\t\t\t\t// Continuación de línea: la barra se come junto al salto.\n\t\t\t\t\t\ti += decodificado[i + 2] === \"\\n\" ? 3 : 2;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (sig === \"\\n\") {\n\t\t\t\t\t\ti += 2;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else literal += sig ?? \"\";\n\t\t\t\t\ti += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (ch === \"(\") profundidad++;\n\t\t\t\telse if (ch === \")\") {\n\t\t\t\t\tprofundidad--;\n\t\t\t\t\tif (profundidad === 0) {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tliteral += ch;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\temite(literal);\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"<\" && decodificado[i + 1] !== \"<\") {\n\t\t\tconst fin = decodificado.indexOf(\">\", i);\n\t\t\tif (fin === -1) break;\n\t\t\tconst hex = decodificado.slice(i + 1, fin).replace(/[^0-9A-Fa-f]/g, \"\");\n\t\t\tlet literal = \"\";\n\t\t\tfor (let j = 0; j + 1 < hex.length; j += 2) {\n\t\t\t\tliteral += String.fromCharCode(Number.parseInt(hex.slice(j, j + 2), 16));\n\t\t\t}\n\t\t\temite(literal);\n\t\t\ti = fin + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"<\") {\n\t\t\t// Diccionario inline «<<»: no aporta operandos de texto.\n\t\t\ti += 2;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"[\" || c === \"]\") {\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"/\") {\n\t\t\t// Nombre: se consume entero para que sus letras no acaben en el texto.\n\t\t\tlet j = i + 1;\n\t\t\twhile (j < n && !/[\\s/[<>()]/.test(decodificado[j])) j++;\n\t\t\ti = j;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"-\" || c === \".\" || (c >= \"0\" && c <= \"9\")) {\n\t\t\tlet j = i + 1;\n\t\t\twhile (j < n && /[0-9.]/.test(decodificado[j])) j++;\n\t\t\tultimoNumero = Number.parseFloat(decodificado.slice(i, j));\n\t\t\t// Kerning muy negativo en TJ: así escriben varias herramientas el\n\t\t\t// espacio que no metieron como literal.\n\t\t\tif (ultimoNumero <= -150) emite(\" \");\n\t\t\ti = j;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!/\\s/.test(c)) {\n\t\t\tlet j = i;\n\t\t\twhile (j < n && !/\\s/.test(decodificado[j]) && !\"()[<>/\".includes(decodificado[j])) j++;\n\t\t\tconst op = decodificado.slice(i, j);\n\t\t\tif (op === \"'\" || op === '\"' || op === \"T*\" || op === \"BT\") {\n\t\t\t\tcortaLinea();\n\t\t\t} else if (op === \"Td\" || op === \"TD\") {\n\t\t\t\t// Solo si mueve en vertical: un desplazamiento horizontal seguido\n\t\t\t\t// NO parte la línea.\n\t\t\t\tif (!Number.isNaN(ultimoNumero) && Math.abs(ultimoNumero) > 0.01) cortaLinea();\n\t\t\t}\n\t\t\t// Tj/TJ no necesitan nada aquí: el literal ya se emitió al\n\t\t\t// parsearlo; el operador solo lo confirma.\n\t\t\tultimoNumero = Number.NaN;\n\t\t\ti = j;\n\t\t\tcontinue;\n\t\t}\n\t\ti++;\n\t}\n\tif (lineaActual.trim() !== \"\") lineas.push(lineaActual);\n\treturn lineas\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trim();\n}\n\nexport function extraerTextoPdf(buffer: Buffer): ResultadoPdf {\n\t// La firma `%PDF-` puede ir precedida de basura; cabecera amplia.\n\tif (!buffer.subarray(0, 1024).toString(\"latin1\").includes(\"%PDF-\")) {\n\t\treturn { estado: \"no-pudo\", motivo: \"no lleva la firma %PDF-\" };\n\t}\n\tconst crudo = buffer.toString(\"latin1\");\n\tif (/\\/Encrypt\\s+\\d+\\s+\\d+\\s+R/.test(crudo)) {\n\t\treturn { estado: \"no-pudo\", motivo: \"está cifrado y no se descifra a ciegas\" };\n\t}\n\tconst flujos = flujosDe(crudo);\n\tif (flujos.length === 0) {\n\t\treturn crudo.includes(\"/Page\")\n\t\t\t? { estado: \"sin-capa\", detalle: \"el PDF declara páginas pero ningún flujo de contenido legible\" }\n\t\t\t: { estado: \"no-pudo\", motivo: \"estructura no reconocida: ni flujos ni páginas\" };\n\t}\n\tconst { decodificados, fallosInflado } = decodificar(flujos);\n\tif (decodificados.length === 0) {\n\t\tif (fallosInflado > 0)\n\t\t\treturn { estado: \"no-pudo\", motivo: `${fallosInflado} flujo(s) no se pudieron descomprimir` };\n\t\treturn {\n\t\t\testado: \"sin-capa\",\n\t\t\tdetalle: \"los flujos existen pero ninguno contiene operadores de texto (PDF escaneado o de solo imágenes)\",\n\t\t};\n\t}\n\tconst partes = decodificados.map(extraerTextoDeContenido).filter((p) => p !== \"\");\n\tconst texto = partes\n\t\t.join(\"\\n\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trim();\n\tif (texto === \"\") return { estado: \"sin-capa\", detalle: \"los flujos de contenido no produjeron texto\" };\n\treturn { estado: \"texto\", texto };\n}\n\nconst CABECERA_TEXTO = \"[PDF: capa de texto extraída]\";\nconst CABECERA_SIN_CAPA =\n\t\"[PDF sin capa de texto: es un PDF escaneado o de solo imágenes. No está vacío; su contenido son imágenes y aquí no hay OCR.]\";\n\n/**\n * Envuelve la definición de `read` ya construida — mismo patrón que\n * `envolverReadConUrlsInternas`, y por la misma razón: `read.ts` es de\n * upstream y el presupuesto de sync está al tope. Si la ruta apunta a un PDF\n * real (firma `%PDF-`, nunca la extensión: los ficheros mienten), lo resuelve\n * aquí; si no, delega SIN haber leído más que la cabecera.\n */\nexport function envolverReadConPdf<TBase extends ToolDefinition<any, any, any>>(base: TBase, cwd: string): TBase {\n\treturn {\n\t\t...base,\n\t\tasync execute(toolCallId, params, signal, onUpdate, ctx): Promise<AgentToolResult<unknown>> {\n\t\t\tif (typeof params !== \"object\" || params === null || !(\"path\" in params)) {\n\t\t\t\treturn base.execute(toolCallId, params, signal, onUpdate, ctx);\n\t\t\t}\n\t\t\tconst rutaCruda: unknown = params.path;\n\t\t\tif (typeof rutaCruda !== \"string\" || rutaCruda === \"\" || rutaCruda.includes(\"://\")) {\n\t\t\t\treturn base.execute(toolCallId, params, signal, onUpdate, ctx);\n\t\t\t}\n\t\t\tconst absoluta = isAbsolute(rutaCruda) ? rutaCruda : join(cwd, rutaCruda);\n\t\t\ttry {\n\t\t\t\t// Solo la CABEZA antes de decidir: un binario de 500 MB no se lee\n\t\t\t\t// entero para descubrir que no es un PDF.\n\t\t\t\tconst manejador = await open(absoluta, \"r\");\n\t\t\t\tlet cabeza: Buffer;\n\t\t\t\ttry {\n\t\t\t\t\tcabeza = Buffer.alloc(1024);\n\t\t\t\t\tconst { bytesRead } = await manejador.read(cabeza, 0, cabeza.length, 0);\n\t\t\t\t\tif (!cabeza.subarray(0, bytesRead).toString(\"latin1\").includes(\"%PDF-\")) {\n\t\t\t\t\t\treturn base.execute(toolCallId, params, signal, onUpdate, ctx);\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tawait manejador.close();\n\t\t\t\t}\n\t\t\t\tconst buffer = await readFile(absoluta);\n\t\t\t\tconst resultado = extraerTextoPdf(buffer);\n\t\t\t\tif (resultado.estado === \"no-pudo\") {\n\t\t\t\t\tthrow new Error(`El PDF no se pudo leer: ${resultado.motivo}.`);\n\t\t\t\t}\n\t\t\t\tif (resultado.estado === \"sin-capa\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `${CABECERA_SIN_CAPA}\\nDetalle: ${resultado.detalle}` }],\n\t\t\t\t\t\tdetails: { pdf: resultado.estado },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst truncado = truncateHead(resultado.texto);\n\t\t\t\tlet texto = `${CABECERA_TEXTO}\\n${truncado.content}`;\n\t\t\t\tif (truncado.truncated) {\n\t\t\t\t\ttexto += `\\n[Truncado: ${truncado.outputLines} de ${truncado.totalLines} líneas del texto extraído.]`;\n\t\t\t\t}\n\t\t\t\treturn { content: [{ type: \"text\", text: texto }], details: { pdf: \"texto\" } };\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error && error.message.startsWith(\"El PDF no se pudo leer\")) throw error;\n\t\t\t\t// Que la falta de permisos o el directorio la cuente `read`\n\t\t\t\t// con SU mensaje, no el nuestro.\n\t\t\t\treturn base.execute(toolCallId, params, signal, onUpdate, ctx);\n\t\t\t}\n\t\t},\n\t};\n}\n"]}
@@ -0,0 +1,337 @@
1
+ /**
2
+ * Lectura de PDF sin dependencias: los flujos de contenido de un PDF van
3
+ * comprimidos con Flate (zlib), y `node:zlib` viene de serie. omp lo resuelve
4
+ * renderizando el documento en un navegador headless y haciéndole capturas:
5
+ * infraestructura pesada que aquí no existe. Lo que se extrae es la CAPA DE
6
+ * TEXTO, no una imagen del documento.
7
+ *
8
+ * LOS TRES ESTADOS, nunca dos — confundir dos de ellos es un fallo que se lee
9
+ * como éxito:
10
+ *
11
+ * - `texto`: hay capa de texto y se extrajo. El caso normal.
12
+ * - `sin-capa`: el PDF está BIEN FORMADO pero no trae texto (escaneado o
13
+ * solo imágenes). NO es «fichero vacío»: decir eso sería
14
+ * mentir sobre la causa, y el modelo se lo creería.
15
+ * - `no-pudo`: cifrado, malformado o sin firma. No se sabe qué había.
16
+ *
17
+ * LÍMITES, dichos antes de descubrirlos nadie:
18
+ * · No sigue el cross-reference table: recorre los objetos `N 0 obj …
19
+ * stream…endstream` directamente. Para leer texto basta y evita toda la
20
+ * maquinaria de xref (incluidos los xref streams comprimidos).
21
+ * · Los operadores de posicionamiento fino (Tm, matrices) se aproximan:
22
+ * salto de línea en Td/TD con componente vertical distinta de cero, T*,
23
+ * BT; espacio cuando el kerning de TJ es muy negativo. El ORDEN del
24
+ * texto se conserva; la GEOMETRÍA no. Para layout exacto, omp tiene el
25
+ * navegador y nosotros no fingimos tenerlo.
26
+ * · No descifra: un PDF con /Encrypt se reporta como `no-pudo`, nunca se
27
+ * intenta a ciegas.
28
+ */
29
+ import { open, readFile } from "node:fs/promises";
30
+ import { isAbsolute, join } from "node:path";
31
+ import { inflateSync } from "node:zlib";
32
+ import { truncateHead } from "../tools/truncate.js";
33
+ /** Techo de seguridad: un PDF malicioso no decide cuánta CPU gasta el lector. */
34
+ const MAX_FLUJOS = 800;
35
+ const MAX_DECODIFICADO = 8 * 1024 * 1024;
36
+ function flujosDe(crudo) {
37
+ const flujos = [];
38
+ let idx = 0;
39
+ while (flujos.length < MAX_FLUJOS) {
40
+ const kw = crudo.indexOf("stream", idx);
41
+ if (kw === -1)
42
+ break;
43
+ const cierreDict = crudo.lastIndexOf(">>", kw);
44
+ const aperturaDict = cierreDict === -1 ? -1 : crudo.lastIndexOf("<<", cierreDict);
45
+ if (aperturaDict === -1 || cierreDict < aperturaDict) {
46
+ idx = kw + 6;
47
+ continue;
48
+ }
49
+ let p = kw + 6;
50
+ if (crudo[p] === "\r")
51
+ p++;
52
+ if (crudo[p] === "\n")
53
+ p++;
54
+ const fin = crudo.indexOf("endstream", p);
55
+ if (fin === -1) {
56
+ idx = kw + 6;
57
+ continue;
58
+ }
59
+ flujos.push({ diccionario: crudo.slice(aperturaDict, cierreDict + 2), contenido: crudo.slice(p, fin) });
60
+ idx = fin + 9;
61
+ }
62
+ return flujos;
63
+ }
64
+ function decodificar(flujos) {
65
+ const decodificados = [];
66
+ let fallosInflado = 0;
67
+ let presupuesto = MAX_DECODIFICADO;
68
+ for (const flujo of flujos) {
69
+ if (presupuesto <= 0)
70
+ break;
71
+ // Una imagen también va en Flate e infla megas sin aportar texto: se
72
+ // excluye ANTES de descomprimirla, no después.
73
+ if (/\/Subtype\s*\/Image/.test(flujo.diccionario))
74
+ continue;
75
+ try {
76
+ const bruto = Buffer.from(flujo.contenido, "latin1");
77
+ const datos = flujo.diccionario.includes("/FlateDecode") ? inflateSync(bruto) : bruto;
78
+ if (datos.length > presupuesto)
79
+ continue;
80
+ presupuesto -= datos.length;
81
+ const texto = datos.toString("latin1");
82
+ // Solo quedan los flujos que SON de contenido: operadores de texto.
83
+ if (/\bBT\b/.test(texto) && /\b(Tj|TJ)\b/.test(texto))
84
+ decodificados.push(texto);
85
+ }
86
+ catch {
87
+ fallosInflado++;
88
+ }
89
+ }
90
+ return { decodificados, fallosInflado };
91
+ }
92
+ /**
93
+ * Escáner de operadores de texto. Mantiene una línea en curso y corta en las
94
+ * fronteras que de verdad separan líneas; dentro de una línea, los fragmentos
95
+ * de un TJ se pegan sin inventar separadores.
96
+ */
97
+ function extraerTextoDeContenido(decodificado) {
98
+ const lineas = [];
99
+ let lineaActual = "";
100
+ let ultimoNumero = Number.NaN;
101
+ const cortaLinea = () => {
102
+ lineas.push(lineaActual);
103
+ lineaActual = "";
104
+ };
105
+ const emite = (s) => {
106
+ lineaActual += s;
107
+ };
108
+ let i = 0;
109
+ const n = decodificado.length;
110
+ while (i < n) {
111
+ const c = decodificado[i];
112
+ if (c === "(") {
113
+ i++;
114
+ let literal = "";
115
+ let profundidad = 1;
116
+ while (i < n && profundidad > 0) {
117
+ const ch = decodificado[i];
118
+ if (ch === "\\") {
119
+ const sig = decodificado[i + 1];
120
+ if (sig === "n")
121
+ literal += "\n";
122
+ else if (sig === "r")
123
+ literal += "\r";
124
+ else if (sig === "t")
125
+ literal += "\t";
126
+ else if (sig === "b" || sig === "f")
127
+ literal += " ";
128
+ else if (sig >= "0" && sig <= "7") {
129
+ // Octal \ddd, hasta tres dígitos.
130
+ let octal = "";
131
+ let j = i + 1;
132
+ while (j < n && octal.length < 3 && decodificado[j] >= "0" && decodificado[j] <= "7") {
133
+ octal += decodificado[j];
134
+ j++;
135
+ }
136
+ literal += String.fromCharCode(Number.parseInt(octal, 8));
137
+ i = j;
138
+ continue;
139
+ }
140
+ else if (sig === "\r") {
141
+ // Continuación de línea: la barra se come junto al salto.
142
+ i += decodificado[i + 2] === "\n" ? 3 : 2;
143
+ continue;
144
+ }
145
+ else if (sig === "\n") {
146
+ i += 2;
147
+ continue;
148
+ }
149
+ else
150
+ literal += sig ?? "";
151
+ i += 2;
152
+ continue;
153
+ }
154
+ if (ch === "(")
155
+ profundidad++;
156
+ else if (ch === ")") {
157
+ profundidad--;
158
+ if (profundidad === 0) {
159
+ i++;
160
+ break;
161
+ }
162
+ }
163
+ literal += ch;
164
+ i++;
165
+ }
166
+ emite(literal);
167
+ continue;
168
+ }
169
+ if (c === "<" && decodificado[i + 1] !== "<") {
170
+ const fin = decodificado.indexOf(">", i);
171
+ if (fin === -1)
172
+ break;
173
+ const hex = decodificado.slice(i + 1, fin).replace(/[^0-9A-Fa-f]/g, "");
174
+ let literal = "";
175
+ for (let j = 0; j + 1 < hex.length; j += 2) {
176
+ literal += String.fromCharCode(Number.parseInt(hex.slice(j, j + 2), 16));
177
+ }
178
+ emite(literal);
179
+ i = fin + 1;
180
+ continue;
181
+ }
182
+ if (c === "<") {
183
+ // Diccionario inline «<<»: no aporta operandos de texto.
184
+ i += 2;
185
+ continue;
186
+ }
187
+ if (c === "[" || c === "]") {
188
+ i++;
189
+ continue;
190
+ }
191
+ if (c === "/") {
192
+ // Nombre: se consume entero para que sus letras no acaben en el texto.
193
+ let j = i + 1;
194
+ while (j < n && !/[\s/[<>()]/.test(decodificado[j]))
195
+ j++;
196
+ i = j;
197
+ continue;
198
+ }
199
+ if (c === "-" || c === "." || (c >= "0" && c <= "9")) {
200
+ let j = i + 1;
201
+ while (j < n && /[0-9.]/.test(decodificado[j]))
202
+ j++;
203
+ ultimoNumero = Number.parseFloat(decodificado.slice(i, j));
204
+ // Kerning muy negativo en TJ: así escriben varias herramientas el
205
+ // espacio que no metieron como literal.
206
+ if (ultimoNumero <= -150)
207
+ emite(" ");
208
+ i = j;
209
+ continue;
210
+ }
211
+ if (!/\s/.test(c)) {
212
+ let j = i;
213
+ while (j < n && !/\s/.test(decodificado[j]) && !"()[<>/".includes(decodificado[j]))
214
+ j++;
215
+ const op = decodificado.slice(i, j);
216
+ if (op === "'" || op === '"' || op === "T*" || op === "BT") {
217
+ cortaLinea();
218
+ }
219
+ else if (op === "Td" || op === "TD") {
220
+ // Solo si mueve en vertical: un desplazamiento horizontal seguido
221
+ // NO parte la línea.
222
+ if (!Number.isNaN(ultimoNumero) && Math.abs(ultimoNumero) > 0.01)
223
+ cortaLinea();
224
+ }
225
+ // Tj/TJ no necesitan nada aquí: el literal ya se emitió al
226
+ // parsearlo; el operador solo lo confirma.
227
+ ultimoNumero = Number.NaN;
228
+ i = j;
229
+ continue;
230
+ }
231
+ i++;
232
+ }
233
+ if (lineaActual.trim() !== "")
234
+ lineas.push(lineaActual);
235
+ return lineas
236
+ .join("\n")
237
+ .replace(/\n{3,}/g, "\n\n")
238
+ .trim();
239
+ }
240
+ export function extraerTextoPdf(buffer) {
241
+ // La firma `%PDF-` puede ir precedida de basura; cabecera amplia.
242
+ if (!buffer.subarray(0, 1024).toString("latin1").includes("%PDF-")) {
243
+ return { estado: "no-pudo", motivo: "no lleva la firma %PDF-" };
244
+ }
245
+ const crudo = buffer.toString("latin1");
246
+ if (/\/Encrypt\s+\d+\s+\d+\s+R/.test(crudo)) {
247
+ return { estado: "no-pudo", motivo: "está cifrado y no se descifra a ciegas" };
248
+ }
249
+ const flujos = flujosDe(crudo);
250
+ if (flujos.length === 0) {
251
+ return crudo.includes("/Page")
252
+ ? { estado: "sin-capa", detalle: "el PDF declara páginas pero ningún flujo de contenido legible" }
253
+ : { estado: "no-pudo", motivo: "estructura no reconocida: ni flujos ni páginas" };
254
+ }
255
+ const { decodificados, fallosInflado } = decodificar(flujos);
256
+ if (decodificados.length === 0) {
257
+ if (fallosInflado > 0)
258
+ return { estado: "no-pudo", motivo: `${fallosInflado} flujo(s) no se pudieron descomprimir` };
259
+ return {
260
+ estado: "sin-capa",
261
+ detalle: "los flujos existen pero ninguno contiene operadores de texto (PDF escaneado o de solo imágenes)",
262
+ };
263
+ }
264
+ const partes = decodificados.map(extraerTextoDeContenido).filter((p) => p !== "");
265
+ const texto = partes
266
+ .join("\n\n")
267
+ .replace(/\n{3,}/g, "\n\n")
268
+ .trim();
269
+ if (texto === "")
270
+ return { estado: "sin-capa", detalle: "los flujos de contenido no produjeron texto" };
271
+ return { estado: "texto", texto };
272
+ }
273
+ const CABECERA_TEXTO = "[PDF: capa de texto extraída]";
274
+ const CABECERA_SIN_CAPA = "[PDF sin capa de texto: es un PDF escaneado o de solo imágenes. No está vacío; su contenido son imágenes y aquí no hay OCR.]";
275
+ /**
276
+ * Envuelve la definición de `read` ya construida — mismo patrón que
277
+ * `envolverReadConUrlsInternas`, y por la misma razón: `read.ts` es de
278
+ * upstream y el presupuesto de sync está al tope. Si la ruta apunta a un PDF
279
+ * real (firma `%PDF-`, nunca la extensión: los ficheros mienten), lo resuelve
280
+ * aquí; si no, delega SIN haber leído más que la cabecera.
281
+ */
282
+ export function envolverReadConPdf(base, cwd) {
283
+ return {
284
+ ...base,
285
+ async execute(toolCallId, params, signal, onUpdate, ctx) {
286
+ if (typeof params !== "object" || params === null || !("path" in params)) {
287
+ return base.execute(toolCallId, params, signal, onUpdate, ctx);
288
+ }
289
+ const rutaCruda = params.path;
290
+ if (typeof rutaCruda !== "string" || rutaCruda === "" || rutaCruda.includes("://")) {
291
+ return base.execute(toolCallId, params, signal, onUpdate, ctx);
292
+ }
293
+ const absoluta = isAbsolute(rutaCruda) ? rutaCruda : join(cwd, rutaCruda);
294
+ try {
295
+ // Solo la CABEZA antes de decidir: un binario de 500 MB no se lee
296
+ // entero para descubrir que no es un PDF.
297
+ const manejador = await open(absoluta, "r");
298
+ let cabeza;
299
+ try {
300
+ cabeza = Buffer.alloc(1024);
301
+ const { bytesRead } = await manejador.read(cabeza, 0, cabeza.length, 0);
302
+ if (!cabeza.subarray(0, bytesRead).toString("latin1").includes("%PDF-")) {
303
+ return base.execute(toolCallId, params, signal, onUpdate, ctx);
304
+ }
305
+ }
306
+ finally {
307
+ await manejador.close();
308
+ }
309
+ const buffer = await readFile(absoluta);
310
+ const resultado = extraerTextoPdf(buffer);
311
+ if (resultado.estado === "no-pudo") {
312
+ throw new Error(`El PDF no se pudo leer: ${resultado.motivo}.`);
313
+ }
314
+ if (resultado.estado === "sin-capa") {
315
+ return {
316
+ content: [{ type: "text", text: `${CABECERA_SIN_CAPA}\nDetalle: ${resultado.detalle}` }],
317
+ details: { pdf: resultado.estado },
318
+ };
319
+ }
320
+ const truncado = truncateHead(resultado.texto);
321
+ let texto = `${CABECERA_TEXTO}\n${truncado.content}`;
322
+ if (truncado.truncated) {
323
+ texto += `\n[Truncado: ${truncado.outputLines} de ${truncado.totalLines} líneas del texto extraído.]`;
324
+ }
325
+ return { content: [{ type: "text", text: texto }], details: { pdf: "texto" } };
326
+ }
327
+ catch (error) {
328
+ if (error instanceof Error && error.message.startsWith("El PDF no se pudo leer"))
329
+ throw error;
330
+ // Que la falta de permisos o el directorio la cuente `read`
331
+ // con SU mensaje, no el nuestro.
332
+ return base.execute(toolCallId, params, signal, onUpdate, ctx);
333
+ }
334
+ },
335
+ };
336
+ }
337
+ //# sourceMappingURL=pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/core/lectura/pdf.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Lectura de PDF sin dependencias: los flujos de contenido de un PDF van\n * comprimidos con Flate (zlib), y `node:zlib` viene de serie. omp lo resuelve\n * renderizando el documento en un navegador headless y haciéndole capturas:\n * infraestructura pesada que aquí no existe. Lo que se extrae es la CAPA DE\n * TEXTO, no una imagen del documento.\n *\n * LOS TRES ESTADOS, nunca dos — confundir dos de ellos es un fallo que se lee\n * como éxito:\n *\n * - `texto`: hay capa de texto y se extrajo. El caso normal.\n * - `sin-capa`: el PDF está BIEN FORMADO pero no trae texto (escaneado o\n * solo imágenes). NO es «fichero vacío»: decir eso sería\n * mentir sobre la causa, y el modelo se lo creería.\n * - `no-pudo`: cifrado, malformado o sin firma. No se sabe qué había.\n *\n * LÍMITES, dichos antes de descubrirlos nadie:\n * · No sigue el cross-reference table: recorre los objetos `N 0 obj …\n * stream…endstream` directamente. Para leer texto basta y evita toda la\n * maquinaria de xref (incluidos los xref streams comprimidos).\n * · Los operadores de posicionamiento fino (Tm, matrices) se aproximan:\n * salto de línea en Td/TD con componente vertical distinta de cero, T*,\n * BT; espacio cuando el kerning de TJ es muy negativo. El ORDEN del\n * texto se conserva; la GEOMETRÍA no. Para layout exacto, omp tiene el\n * navegador y nosotros no fingimos tenerlo.\n * · No descifra: un PDF con /Encrypt se reporta como `no-pudo`, nunca se\n * intenta a ciegas.\n */\n\nimport { open, readFile } from \"node:fs/promises\";\nimport { isAbsolute, join } from \"node:path\";\nimport { inflateSync } from \"node:zlib\";\nimport type { AgentToolResult, ToolDefinition } from \"../extensions/types.ts\";\nimport { truncateHead } from \"../tools/truncate.ts\";\n\nexport type ResultadoPdf =\n\t| { estado: \"texto\"; texto: string }\n\t| { estado: \"sin-capa\"; detalle: string }\n\t| { estado: \"no-pudo\"; motivo: string };\n\n/** Techo de seguridad: un PDF malicioso no decide cuánta CPU gasta el lector. */\nconst MAX_FLUJOS = 800;\nconst MAX_DECODIFICADO = 8 * 1024 * 1024;\n\ninterface Flujo {\n\tdiccionario: string;\n\tcontenido: string;\n}\n\nfunction flujosDe(crudo: string): Flujo[] {\n\tconst flujos: Flujo[] = [];\n\tlet idx = 0;\n\twhile (flujos.length < MAX_FLUJOS) {\n\t\tconst kw = crudo.indexOf(\"stream\", idx);\n\t\tif (kw === -1) break;\n\t\tconst cierreDict = crudo.lastIndexOf(\">>\", kw);\n\t\tconst aperturaDict = cierreDict === -1 ? -1 : crudo.lastIndexOf(\"<<\", cierreDict);\n\t\tif (aperturaDict === -1 || cierreDict < aperturaDict) {\n\t\t\tidx = kw + 6;\n\t\t\tcontinue;\n\t\t}\n\t\tlet p = kw + 6;\n\t\tif (crudo[p] === \"\\r\") p++;\n\t\tif (crudo[p] === \"\\n\") p++;\n\t\tconst fin = crudo.indexOf(\"endstream\", p);\n\t\tif (fin === -1) {\n\t\t\tidx = kw + 6;\n\t\t\tcontinue;\n\t\t}\n\t\tflujos.push({ diccionario: crudo.slice(aperturaDict, cierreDict + 2), contenido: crudo.slice(p, fin) });\n\t\tidx = fin + 9;\n\t}\n\treturn flujos;\n}\n\nfunction decodificar(flujos: Flujo[]): { decodificados: string[]; fallosInflado: number } {\n\tconst decodificados: string[] = [];\n\tlet fallosInflado = 0;\n\tlet presupuesto = MAX_DECODIFICADO;\n\tfor (const flujo of flujos) {\n\t\tif (presupuesto <= 0) break;\n\t\t// Una imagen también va en Flate e infla megas sin aportar texto: se\n\t\t// excluye ANTES de descomprimirla, no después.\n\t\tif (/\\/Subtype\\s*\\/Image/.test(flujo.diccionario)) continue;\n\t\ttry {\n\t\t\tconst bruto = Buffer.from(flujo.contenido, \"latin1\");\n\t\t\tconst datos = flujo.diccionario.includes(\"/FlateDecode\") ? inflateSync(bruto) : bruto;\n\t\t\tif (datos.length > presupuesto) continue;\n\t\t\tpresupuesto -= datos.length;\n\t\t\tconst texto = datos.toString(\"latin1\");\n\t\t\t// Solo quedan los flujos que SON de contenido: operadores de texto.\n\t\t\tif (/\\bBT\\b/.test(texto) && /\\b(Tj|TJ)\\b/.test(texto)) decodificados.push(texto);\n\t\t} catch {\n\t\t\tfallosInflado++;\n\t\t}\n\t}\n\treturn { decodificados, fallosInflado };\n}\n\n/**\n * Escáner de operadores de texto. Mantiene una línea en curso y corta en las\n * fronteras que de verdad separan líneas; dentro de una línea, los fragmentos\n * de un TJ se pegan sin inventar separadores.\n */\nfunction extraerTextoDeContenido(decodificado: string): string {\n\tconst lineas: string[] = [];\n\tlet lineaActual = \"\";\n\tlet ultimoNumero = Number.NaN;\n\n\tconst cortaLinea = (): void => {\n\t\tlineas.push(lineaActual);\n\t\tlineaActual = \"\";\n\t};\n\tconst emite = (s: string): void => {\n\t\tlineaActual += s;\n\t};\n\n\tlet i = 0;\n\tconst n = decodificado.length;\n\twhile (i < n) {\n\t\tconst c = decodificado[i];\n\t\tif (c === \"(\") {\n\t\t\ti++;\n\t\t\tlet literal = \"\";\n\t\t\tlet profundidad = 1;\n\t\t\twhile (i < n && profundidad > 0) {\n\t\t\t\tconst ch = decodificado[i];\n\t\t\t\tif (ch === \"\\\\\") {\n\t\t\t\t\tconst sig = decodificado[i + 1];\n\t\t\t\t\tif (sig === \"n\") literal += \"\\n\";\n\t\t\t\t\telse if (sig === \"r\") literal += \"\\r\";\n\t\t\t\t\telse if (sig === \"t\") literal += \"\\t\";\n\t\t\t\t\telse if (sig === \"b\" || sig === \"f\") literal += \" \";\n\t\t\t\t\telse if (sig >= \"0\" && sig <= \"7\") {\n\t\t\t\t\t\t// Octal \\ddd, hasta tres dígitos.\n\t\t\t\t\t\tlet octal = \"\";\n\t\t\t\t\t\tlet j = i + 1;\n\t\t\t\t\t\twhile (j < n && octal.length < 3 && decodificado[j] >= \"0\" && decodificado[j] <= \"7\") {\n\t\t\t\t\t\t\toctal += decodificado[j];\n\t\t\t\t\t\t\tj++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tliteral += String.fromCharCode(Number.parseInt(octal, 8));\n\t\t\t\t\t\ti = j;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (sig === \"\\r\") {\n\t\t\t\t\t\t// Continuación de línea: la barra se come junto al salto.\n\t\t\t\t\t\ti += decodificado[i + 2] === \"\\n\" ? 3 : 2;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (sig === \"\\n\") {\n\t\t\t\t\t\ti += 2;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else literal += sig ?? \"\";\n\t\t\t\t\ti += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (ch === \"(\") profundidad++;\n\t\t\t\telse if (ch === \")\") {\n\t\t\t\t\tprofundidad--;\n\t\t\t\t\tif (profundidad === 0) {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tliteral += ch;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\temite(literal);\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"<\" && decodificado[i + 1] !== \"<\") {\n\t\t\tconst fin = decodificado.indexOf(\">\", i);\n\t\t\tif (fin === -1) break;\n\t\t\tconst hex = decodificado.slice(i + 1, fin).replace(/[^0-9A-Fa-f]/g, \"\");\n\t\t\tlet literal = \"\";\n\t\t\tfor (let j = 0; j + 1 < hex.length; j += 2) {\n\t\t\t\tliteral += String.fromCharCode(Number.parseInt(hex.slice(j, j + 2), 16));\n\t\t\t}\n\t\t\temite(literal);\n\t\t\ti = fin + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"<\") {\n\t\t\t// Diccionario inline «<<»: no aporta operandos de texto.\n\t\t\ti += 2;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"[\" || c === \"]\") {\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"/\") {\n\t\t\t// Nombre: se consume entero para que sus letras no acaben en el texto.\n\t\t\tlet j = i + 1;\n\t\t\twhile (j < n && !/[\\s/[<>()]/.test(decodificado[j])) j++;\n\t\t\ti = j;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"-\" || c === \".\" || (c >= \"0\" && c <= \"9\")) {\n\t\t\tlet j = i + 1;\n\t\t\twhile (j < n && /[0-9.]/.test(decodificado[j])) j++;\n\t\t\tultimoNumero = Number.parseFloat(decodificado.slice(i, j));\n\t\t\t// Kerning muy negativo en TJ: así escriben varias herramientas el\n\t\t\t// espacio que no metieron como literal.\n\t\t\tif (ultimoNumero <= -150) emite(\" \");\n\t\t\ti = j;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!/\\s/.test(c)) {\n\t\t\tlet j = i;\n\t\t\twhile (j < n && !/\\s/.test(decodificado[j]) && !\"()[<>/\".includes(decodificado[j])) j++;\n\t\t\tconst op = decodificado.slice(i, j);\n\t\t\tif (op === \"'\" || op === '\"' || op === \"T*\" || op === \"BT\") {\n\t\t\t\tcortaLinea();\n\t\t\t} else if (op === \"Td\" || op === \"TD\") {\n\t\t\t\t// Solo si mueve en vertical: un desplazamiento horizontal seguido\n\t\t\t\t// NO parte la línea.\n\t\t\t\tif (!Number.isNaN(ultimoNumero) && Math.abs(ultimoNumero) > 0.01) cortaLinea();\n\t\t\t}\n\t\t\t// Tj/TJ no necesitan nada aquí: el literal ya se emitió al\n\t\t\t// parsearlo; el operador solo lo confirma.\n\t\t\tultimoNumero = Number.NaN;\n\t\t\ti = j;\n\t\t\tcontinue;\n\t\t}\n\t\ti++;\n\t}\n\tif (lineaActual.trim() !== \"\") lineas.push(lineaActual);\n\treturn lineas\n\t\t.join(\"\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trim();\n}\n\nexport function extraerTextoPdf(buffer: Buffer): ResultadoPdf {\n\t// La firma `%PDF-` puede ir precedida de basura; cabecera amplia.\n\tif (!buffer.subarray(0, 1024).toString(\"latin1\").includes(\"%PDF-\")) {\n\t\treturn { estado: \"no-pudo\", motivo: \"no lleva la firma %PDF-\" };\n\t}\n\tconst crudo = buffer.toString(\"latin1\");\n\tif (/\\/Encrypt\\s+\\d+\\s+\\d+\\s+R/.test(crudo)) {\n\t\treturn { estado: \"no-pudo\", motivo: \"está cifrado y no se descifra a ciegas\" };\n\t}\n\tconst flujos = flujosDe(crudo);\n\tif (flujos.length === 0) {\n\t\treturn crudo.includes(\"/Page\")\n\t\t\t? { estado: \"sin-capa\", detalle: \"el PDF declara páginas pero ningún flujo de contenido legible\" }\n\t\t\t: { estado: \"no-pudo\", motivo: \"estructura no reconocida: ni flujos ni páginas\" };\n\t}\n\tconst { decodificados, fallosInflado } = decodificar(flujos);\n\tif (decodificados.length === 0) {\n\t\tif (fallosInflado > 0)\n\t\t\treturn { estado: \"no-pudo\", motivo: `${fallosInflado} flujo(s) no se pudieron descomprimir` };\n\t\treturn {\n\t\t\testado: \"sin-capa\",\n\t\t\tdetalle: \"los flujos existen pero ninguno contiene operadores de texto (PDF escaneado o de solo imágenes)\",\n\t\t};\n\t}\n\tconst partes = decodificados.map(extraerTextoDeContenido).filter((p) => p !== \"\");\n\tconst texto = partes\n\t\t.join(\"\\n\\n\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trim();\n\tif (texto === \"\") return { estado: \"sin-capa\", detalle: \"los flujos de contenido no produjeron texto\" };\n\treturn { estado: \"texto\", texto };\n}\n\nconst CABECERA_TEXTO = \"[PDF: capa de texto extraída]\";\nconst CABECERA_SIN_CAPA =\n\t\"[PDF sin capa de texto: es un PDF escaneado o de solo imágenes. No está vacío; su contenido son imágenes y aquí no hay OCR.]\";\n\n/**\n * Envuelve la definición de `read` ya construida — mismo patrón que\n * `envolverReadConUrlsInternas`, y por la misma razón: `read.ts` es de\n * upstream y el presupuesto de sync está al tope. Si la ruta apunta a un PDF\n * real (firma `%PDF-`, nunca la extensión: los ficheros mienten), lo resuelve\n * aquí; si no, delega SIN haber leído más que la cabecera.\n */\nexport function envolverReadConPdf<TBase extends ToolDefinition<any, any, any>>(base: TBase, cwd: string): TBase {\n\treturn {\n\t\t...base,\n\t\tasync execute(toolCallId, params, signal, onUpdate, ctx): Promise<AgentToolResult<unknown>> {\n\t\t\tif (typeof params !== \"object\" || params === null || !(\"path\" in params)) {\n\t\t\t\treturn base.execute(toolCallId, params, signal, onUpdate, ctx);\n\t\t\t}\n\t\t\tconst rutaCruda: unknown = params.path;\n\t\t\tif (typeof rutaCruda !== \"string\" || rutaCruda === \"\" || rutaCruda.includes(\"://\")) {\n\t\t\t\treturn base.execute(toolCallId, params, signal, onUpdate, ctx);\n\t\t\t}\n\t\t\tconst absoluta = isAbsolute(rutaCruda) ? rutaCruda : join(cwd, rutaCruda);\n\t\t\ttry {\n\t\t\t\t// Solo la CABEZA antes de decidir: un binario de 500 MB no se lee\n\t\t\t\t// entero para descubrir que no es un PDF.\n\t\t\t\tconst manejador = await open(absoluta, \"r\");\n\t\t\t\tlet cabeza: Buffer;\n\t\t\t\ttry {\n\t\t\t\t\tcabeza = Buffer.alloc(1024);\n\t\t\t\t\tconst { bytesRead } = await manejador.read(cabeza, 0, cabeza.length, 0);\n\t\t\t\t\tif (!cabeza.subarray(0, bytesRead).toString(\"latin1\").includes(\"%PDF-\")) {\n\t\t\t\t\t\treturn base.execute(toolCallId, params, signal, onUpdate, ctx);\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tawait manejador.close();\n\t\t\t\t}\n\t\t\t\tconst buffer = await readFile(absoluta);\n\t\t\t\tconst resultado = extraerTextoPdf(buffer);\n\t\t\t\tif (resultado.estado === \"no-pudo\") {\n\t\t\t\t\tthrow new Error(`El PDF no se pudo leer: ${resultado.motivo}.`);\n\t\t\t\t}\n\t\t\t\tif (resultado.estado === \"sin-capa\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `${CABECERA_SIN_CAPA}\\nDetalle: ${resultado.detalle}` }],\n\t\t\t\t\t\tdetails: { pdf: resultado.estado },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst truncado = truncateHead(resultado.texto);\n\t\t\t\tlet texto = `${CABECERA_TEXTO}\\n${truncado.content}`;\n\t\t\t\tif (truncado.truncated) {\n\t\t\t\t\ttexto += `\\n[Truncado: ${truncado.outputLines} de ${truncado.totalLines} líneas del texto extraído.]`;\n\t\t\t\t}\n\t\t\t\treturn { content: [{ type: \"text\", text: texto }], details: { pdf: \"texto\" } };\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error && error.message.startsWith(\"El PDF no se pudo leer\")) throw error;\n\t\t\t\t// Que la falta de permisos o el directorio la cuente `read`\n\t\t\t\t// con SU mensaje, no el nuestro.\n\t\t\t\treturn base.execute(toolCallId, params, signal, onUpdate, ctx);\n\t\t\t}\n\t\t},\n\t};\n}\n"]}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Detección y ejecución de comprobadores — MIRANDO lo que hay en el
3
+ * proyecto, nunca inventando uno. `detectarComprobadores` documenta en
4
+ * `mirado` cada sitio que ha comprobado, se haya encontrado algo o no: es lo
5
+ * que distingue "no he mirado" de "he mirado y no hay nada" cuando no
6
+ * aparece ningún comprobador ejecutable.
7
+ */
8
+ import type { Comprobador, Deteccion, Diagnostico } from "./tipos.ts";
9
+ /**
10
+ * Mira qué hay en el proyecto y arma la lista de comprobadores ejecutables.
11
+ * Prioridad por lenguaje: la config específica (biome/eslint/tsconfig) gana
12
+ * sobre el script de package.json genérico, porque sabemos parsear su salida.
13
+ */
14
+ export declare function detectarComprobadores(cwd: string): Deteccion;
15
+ export interface ResultadoEjecucion {
16
+ diagnosticos: Diagnostico[];
17
+ /** Comprobadores que NO se pudieron ejecutar (ejecutable ausente, timeout…) — no confundir con "corrió limpio". */
18
+ fallidos: Array<{
19
+ id: string;
20
+ etiqueta: string;
21
+ motivo: string;
22
+ }>;
23
+ }
24
+ /** Ejecuta comprobadores en paralelo y agrega sus diagnósticos. */
25
+ export declare function ejecutarComprobadores(comprobadores: readonly Comprobador[]): Promise<ResultadoEjecucion>;
26
+ /** Re-ejecuta solo los comprobadores pedidos (por id) — la verificación tras un arreglo. */
27
+ export declare function ejecutarComprobadoresPorId(comprobadores: readonly Comprobador[], ids: ReadonlySet<string>): Promise<ResultadoEjecucion>;
28
+ //# sourceMappingURL=comprobadores.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comprobadores.d.ts","sourceRoot":"","sources":["../../../src/core/limpieza/comprobadores.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAoDrF;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAwK5D;AA2CD,MAAM,WAAW,kBAAkB;IAClC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,wHAAmH;IACnH,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClE;AAED,oEAAmE;AACnE,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkC9G;AAED,+FAA4F;AAC5F,wBAAgB,0BAA0B,CACzC,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GACtB,OAAO,CAAC,kBAAkB,CAAC,CAE7B","sourcesContent":["/**\n * Detección y ejecución de comprobadores — MIRANDO lo que hay en el\n * proyecto, nunca inventando uno. `detectarComprobadores` documenta en\n * `mirado` cada sitio que ha comprobado, se haya encontrado algo o no: es lo\n * que distingue \"no he mirado\" de \"he mirado y no hay nada\" cuando no\n * aparece ningún comprobador ejecutable.\n */\n\nimport { spawn, spawnSync } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { parsearBiomeGithub, parsearEslint, parsearGenerico, parsearTestFallido, parsearTsc } from \"./parseo.ts\";\nimport type { Comprobador, Deteccion, Diagnostico, SalidaComando } from \"./tipos.ts\";\n\nconst CONFIGS_ESLINT = [\n\t\"eslint.config.js\",\n\t\"eslint.config.mjs\",\n\t\"eslint.config.cjs\",\n\t\"eslint.config.ts\",\n\t\".eslintrc\",\n\t\".eslintrc.js\",\n\t\".eslintrc.cjs\",\n\t\".eslintrc.json\",\n];\n\n/** Busca un binario en `node_modules/.bin` subiendo directorios — la misma resolución que usa `npm run`. */\nfunction resolverBinLocal(desde: string, nombre: string): string | undefined {\n\tlet dir = desde;\n\tfor (;;) {\n\t\tconst candidato = join(dir, \"node_modules\", \".bin\", nombre);\n\t\tif (existsSync(candidato)) return candidato;\n\t\tconst padre = dirname(dir);\n\t\tif (padre === dir) return undefined;\n\t\tdir = padre;\n\t}\n}\n\n/** true si `nombre` resuelve en PATH — para herramientas ajenas a node (ruff, cargo, go). */\nfunction hayEnPath(nombre: string): boolean {\n\tconst r = spawnSync(process.platform === \"win32\" ? \"where\" : \"which\", [nombre], { stdio: \"ignore\" });\n\treturn r.status === 0;\n}\n\nfunction leerPackageJson(cwd: string): { scripts?: Record<string, string> } | undefined {\n\tconst ruta = join(cwd, \"package.json\");\n\tif (!existsSync(ruta)) return undefined;\n\ttry {\n\t\treturn JSON.parse(readFileSync(ruta, \"utf-8\"));\n\t} catch {\n\t\t// package.json ilegible: se trata como ausente, no se inventa nada a partir de él.\n\t\treturn undefined;\n\t}\n}\n\nfunction tienePyprojectRuff(cwd: string): boolean {\n\tconst ruta = join(cwd, \"pyproject.toml\");\n\tif (!existsSync(ruta)) return false;\n\ttry {\n\t\treturn readFileSync(ruta, \"utf-8\").includes(\"[tool.ruff]\");\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Mira qué hay en el proyecto y arma la lista de comprobadores ejecutables.\n * Prioridad por lenguaje: la config específica (biome/eslint/tsconfig) gana\n * sobre el script de package.json genérico, porque sabemos parsear su salida.\n */\nexport function detectarComprobadores(cwd: string): Deteccion {\n\tconst mirado: string[] = [];\n\tconst comprobadores: Comprobador[] = [];\n\tconst tiene = (id: string) => comprobadores.some((c) => c.id === id);\n\n\tconst pkg = leerPackageJson(cwd);\n\tmirado.push(`package.json (${existsSync(join(cwd, \"package.json\")) ? \"existe\" : \"no existe\"})`);\n\n\tconst biomeConfig = existsSync(join(cwd, \"biome.json\")) || existsSync(join(cwd, \"biome.jsonc\"));\n\tmirado.push(`biome.json / biome.jsonc (${biomeConfig ? \"encontrado\" : \"no encontrado\"})`);\n\tif (biomeConfig) {\n\t\tconst bin = resolverBinLocal(cwd, \"biome\");\n\t\tif (bin) {\n\t\t\tcomprobadores.push({\n\t\t\t\tid: \"lint\",\n\t\t\t\tetiqueta: \"lint (biome)\",\n\t\t\t\tcomando: bin,\n\t\t\t\targs: [\"lint\", \"--reporter=github\", \".\"],\n\t\t\t\tcwd,\n\t\t\t\tparsear: parsearBiomeGithub,\n\t\t\t\talcance: \"fichero\",\n\t\t\t});\n\t\t} else {\n\t\t\tmirado.push(\"biome: config encontrada pero no hay node_modules/.bin/biome en el árbol de directorios\");\n\t\t}\n\t}\n\n\tconst eslintConfig = CONFIGS_ESLINT.some((f) => existsSync(join(cwd, f)));\n\tmirado.push(`config de eslint (${eslintConfig ? \"encontrada\" : \"no encontrada\"})`);\n\tif (eslintConfig && !tiene(\"lint\")) {\n\t\tconst bin = resolverBinLocal(cwd, \"eslint\");\n\t\tif (bin) {\n\t\t\tcomprobadores.push({\n\t\t\t\tid: \"lint\",\n\t\t\t\tetiqueta: \"lint (eslint)\",\n\t\t\t\tcomando: bin,\n\t\t\t\targs: [\".\", \"--format\", \"json\"],\n\t\t\t\tcwd,\n\t\t\t\tparsear: parsearEslint,\n\t\t\t\talcance: \"fichero\",\n\t\t\t});\n\t\t} else {\n\t\t\tmirado.push(\"eslint: config encontrada pero no hay node_modules/.bin/eslint en el árbol de directorios\");\n\t\t}\n\t}\n\n\tif (pkg?.scripts?.lint && !tiene(\"lint\")) {\n\t\tmirado.push(\"package.json → scripts.lint (encontrado, sin config de biome/eslint reconocida)\");\n\t\tcomprobadores.push({\n\t\t\tid: \"lint\",\n\t\t\tetiqueta: \"lint (npm run lint)\",\n\t\t\tcomando: \"npm\",\n\t\t\targs: [\"run\", \"lint\", \"--silent\"],\n\t\t\tcwd,\n\t\t\tparsear: parsearGenerico,\n\t\t\talcance: \"fichero\",\n\t\t});\n\t}\n\n\tconst tsconfig = existsSync(join(cwd, \"tsconfig.json\"));\n\tmirado.push(`tsconfig.json (${tsconfig ? \"encontrado\" : \"no encontrado\"})`);\n\tif (tsconfig) {\n\t\tconst bin = resolverBinLocal(cwd, \"tsc\");\n\t\tif (bin) {\n\t\t\tcomprobadores.push({\n\t\t\t\tid: \"typecheck\",\n\t\t\t\tetiqueta: \"typecheck (tsc)\",\n\t\t\t\tcomando: bin,\n\t\t\t\targs: [\"--noEmit\", \"--pretty\", \"false\"],\n\t\t\t\tcwd,\n\t\t\t\tparsear: parsearTsc,\n\t\t\t\talcance: \"fichero\",\n\t\t\t});\n\t\t} else if (pkg?.scripts?.typecheck) {\n\t\t\tcomprobadores.push({\n\t\t\t\tid: \"typecheck\",\n\t\t\t\tetiqueta: \"typecheck (npm run typecheck)\",\n\t\t\t\tcomando: \"npm\",\n\t\t\t\targs: [\"run\", \"typecheck\", \"--silent\"],\n\t\t\t\tcwd,\n\t\t\t\tparsear: parsearGenerico,\n\t\t\t\talcance: \"fichero\",\n\t\t\t});\n\t\t} else {\n\t\t\tmirado.push(\"tsconfig.json: sin node_modules/.bin/tsc ni scripts.typecheck en package.json\");\n\t\t}\n\t} else if (pkg?.scripts?.typecheck) {\n\t\tmirado.push(\"package.json → scripts.typecheck (encontrado, sin tsconfig.json)\");\n\t\tcomprobadores.push({\n\t\t\tid: \"typecheck\",\n\t\t\tetiqueta: \"typecheck (npm run typecheck)\",\n\t\t\tcomando: \"npm\",\n\t\t\targs: [\"run\", \"typecheck\", \"--silent\"],\n\t\t\tcwd,\n\t\t\tparsear: parsearGenerico,\n\t\t\talcance: \"fichero\",\n\t\t});\n\t}\n\n\tif (pkg?.scripts?.test) {\n\t\tmirado.push(\"package.json → scripts.test (encontrado)\");\n\t\tcomprobadores.push({\n\t\t\tid: \"test\",\n\t\t\tetiqueta: \"test (npm test)\",\n\t\t\tcomando: \"npm\",\n\t\t\targs: [\"test\", \"--silent\"],\n\t\t\tcwd,\n\t\t\tparsear: (salida) => parsearTestFallido(salida),\n\t\t\talcance: \"proyecto\",\n\t\t});\n\t}\n\n\tconst ruffConfig =\n\t\texistsSync(join(cwd, \"ruff.toml\")) || existsSync(join(cwd, \".ruff.toml\")) || tienePyprojectRuff(cwd);\n\tmirado.push(`pyproject.toml [tool.ruff] / ruff.toml / .ruff.toml (${ruffConfig ? \"encontrado\" : \"no encontrado\"})`);\n\tif (ruffConfig) {\n\t\tif (hayEnPath(\"ruff\")) {\n\t\t\tcomprobadores.push({\n\t\t\t\tid: \"lint-py\",\n\t\t\t\tetiqueta: \"lint (ruff)\",\n\t\t\t\tcomando: \"ruff\",\n\t\t\t\targs: [\"check\", \".\"],\n\t\t\t\tcwd,\n\t\t\t\tparsear: parsearGenerico,\n\t\t\t\talcance: \"fichero\",\n\t\t\t});\n\t\t} else {\n\t\t\tmirado.push(\"ruff: config encontrada pero el ejecutable 'ruff' no está en PATH\");\n\t\t}\n\t}\n\n\tconst cargoToml = existsSync(join(cwd, \"Cargo.toml\"));\n\tmirado.push(`Cargo.toml (${cargoToml ? \"encontrado\" : \"no encontrado\"})`);\n\tif (cargoToml) {\n\t\tif (hayEnPath(\"cargo\")) {\n\t\t\tcomprobadores.push({\n\t\t\t\tid: \"lint-rs\",\n\t\t\t\tetiqueta: \"lint (cargo clippy)\",\n\t\t\t\tcomando: \"cargo\",\n\t\t\t\targs: [\"clippy\", \"--message-format=short\"],\n\t\t\t\tcwd,\n\t\t\t\tparsear: parsearGenerico,\n\t\t\t\talcance: \"fichero\",\n\t\t\t});\n\t\t} else {\n\t\t\tmirado.push(\"cargo clippy: Cargo.toml encontrado pero el ejecutable 'cargo' no está en PATH\");\n\t\t}\n\t}\n\n\tconst goMod = existsSync(join(cwd, \"go.mod\"));\n\tmirado.push(`go.mod (${goMod ? \"encontrado\" : \"no encontrado\"})`);\n\tif (goMod) {\n\t\tif (hayEnPath(\"go\")) {\n\t\t\tcomprobadores.push({\n\t\t\t\tid: \"vet-go\",\n\t\t\t\tetiqueta: \"vet (go vet)\",\n\t\t\t\tcomando: \"go\",\n\t\t\t\targs: [\"vet\", \"./...\"],\n\t\t\t\tcwd,\n\t\t\t\tparsear: parsearGenerico,\n\t\t\t\talcance: \"fichero\",\n\t\t\t});\n\t\t} else {\n\t\t\tmirado.push(\"go vet: go.mod encontrado pero el ejecutable 'go' no está en PATH\");\n\t\t}\n\t}\n\n\treturn { comprobadores, mirado };\n}\n\n/** Ejecuta un comando y distingue \"no pude ejecutarlo\" (ENOENT, timeout) de una ejecución real. */\nfunction ejecutarComando(\n\tcomprobador: Comprobador,\n\ttimeoutMs = 120_000,\n): Promise<{ ok: true; salida: SalidaComando } | { ok: false; motivo: string }> {\n\treturn new Promise((resolve) => {\n\t\tlet proc: ReturnType<typeof spawn>;\n\t\ttry {\n\t\t\tproc = spawn(comprobador.comando, comprobador.args, {\n\t\t\t\tcwd: comprobador.cwd,\n\t\t\t\tshell: false,\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tresolve({ ok: false, motivo: error instanceof Error ? error.message : String(error) });\n\t\t\treturn;\n\t\t}\n\t\tlet stdout = \"\";\n\t\tlet stderr = \"\";\n\t\tlet resuelto = false;\n\t\tconst temporizador = setTimeout(() => {\n\t\t\tproc.kill(\"SIGKILL\");\n\t\t\tacabar({ ok: false, motivo: `timeout tras ${timeoutMs}ms` });\n\t\t}, timeoutMs);\n\t\tconst acabar = (r: { ok: true; salida: SalidaComando } | { ok: false; motivo: string }) => {\n\t\t\tif (resuelto) return;\n\t\t\tresuelto = true;\n\t\t\tclearTimeout(temporizador);\n\t\t\tresolve(r);\n\t\t};\n\t\tproc.on(\"error\", (error) => acabar({ ok: false, motivo: error.message }));\n\t\tproc.stdout?.on(\"data\", (d) => {\n\t\t\tstdout += d;\n\t\t});\n\t\tproc.stderr?.on(\"data\", (d) => {\n\t\t\tstderr += d;\n\t\t});\n\t\tproc.on(\"close\", (code) => acabar({ ok: true, salida: { stdout, stderr, code: code ?? 0 } }));\n\t});\n}\n\nexport interface ResultadoEjecucion {\n\tdiagnosticos: Diagnostico[];\n\t/** Comprobadores que NO se pudieron ejecutar (ejecutable ausente, timeout…) — no confundir con \"corrió limpio\". */\n\tfallidos: Array<{ id: string; etiqueta: string; motivo: string }>;\n}\n\n/** Ejecuta comprobadores en paralelo y agrega sus diagnósticos. */\nexport async function ejecutarComprobadores(comprobadores: readonly Comprobador[]): Promise<ResultadoEjecucion> {\n\tconst diagnosticos: Diagnostico[] = [];\n\tconst fallidos: ResultadoEjecucion[\"fallidos\"] = [];\n\tawait Promise.all(\n\t\tcomprobadores.map(async (comprobador) => {\n\t\t\tconst r = await ejecutarComando(comprobador);\n\t\t\tif (!r.ok) {\n\t\t\t\tfallidos.push({ id: comprobador.id, etiqueta: comprobador.etiqueta, motivo: r.motivo });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst parciales = comprobador.parsear(r.salida, comprobador.cwd);\n\t\t\t// Salió con error pero el parser no le sacó NINGÚN diagnóstico: no es\n\t\t\t// que el proyecto esté limpio, es que el binario probablemente\n\t\t\t// crasheó (lib que falta, versión incompatible…) y su salida no\n\t\t\t// tiene el formato que el parser espera. Sin esto, un comprobador\n\t\t\t// roto se leía como \"proyecto limpio\" — exit code ignorado del todo.\n\t\t\t// ponytail: heurística, no perfecta — un linter que legítimamente\n\t\t\t// sale con código !=0 sin issues (convención rara) contaría como\n\t\t\t// fallido; el riesgo de leer \"limpio\" un binario roto es peor.\n\t\t\tif (parciales.length === 0 && r.salida.code !== 0) {\n\t\t\t\tconst cola = `${r.salida.stdout}\\n${r.salida.stderr}`.trim().split(\"\\n\").slice(-5).join(\"\\n\");\n\t\t\t\tfallidos.push({\n\t\t\t\t\tid: comprobador.id,\n\t\t\t\t\tetiqueta: comprobador.etiqueta,\n\t\t\t\t\tmotivo: `salió con código ${r.salida.code} sin diagnósticos reconocibles:\\n${cola}`,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (const parcial of parciales) {\n\t\t\t\tdiagnosticos.push({ ...parcial, comprobador: comprobador.id });\n\t\t\t}\n\t\t}),\n\t);\n\treturn { diagnosticos, fallidos };\n}\n\n/** Re-ejecuta solo los comprobadores pedidos (por id) — la verificación tras un arreglo. */\nexport function ejecutarComprobadoresPorId(\n\tcomprobadores: readonly Comprobador[],\n\tids: ReadonlySet<string>,\n): Promise<ResultadoEjecucion> {\n\treturn ejecutarComprobadores(comprobadores.filter((c) => ids.has(c.id)));\n}\n"]}