@hoilab/ada-cli 0.84.22 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1114) hide show
  1. package/CHANGELOG.md +29 -2
  2. package/README.es.md +17 -6
  3. package/README.md +109 -11
  4. package/dist/ada-publico.d.ts +35 -0
  5. package/dist/ada-publico.d.ts.map +1 -0
  6. package/dist/ada-publico.js +40 -0
  7. package/dist/ada-publico.js.map +1 -0
  8. package/dist/cli/audit-command.d.ts +15 -0
  9. package/dist/cli/audit-command.d.ts.map +1 -0
  10. package/dist/cli/audit-command.js +280 -0
  11. package/dist/cli/audit-command.js.map +1 -0
  12. package/dist/cli/banco-command.d.ts +15 -0
  13. package/dist/cli/banco-command.d.ts.map +1 -0
  14. package/dist/cli/banco-command.js +213 -0
  15. package/dist/cli/banco-command.js.map +1 -0
  16. package/dist/cli/cleanse-command.d.ts +11 -0
  17. package/dist/cli/cleanse-command.d.ts.map +1 -0
  18. package/dist/cli/cleanse-command.js +101 -0
  19. package/dist/cli/cleanse-command.js.map +1 -0
  20. package/dist/cli/commit-command.d.ts +31 -0
  21. package/dist/cli/commit-command.d.ts.map +1 -0
  22. package/dist/cli/commit-command.js +158 -0
  23. package/dist/cli/commit-command.js.map +1 -0
  24. package/dist/cli/computer-command.d.ts +12 -0
  25. package/dist/cli/computer-command.d.ts.map +1 -0
  26. package/dist/cli/computer-command.js +141 -0
  27. package/dist/cli/computer-command.js.map +1 -0
  28. package/dist/cli/discover-command.d.ts +18 -0
  29. package/dist/cli/discover-command.d.ts.map +1 -0
  30. package/dist/cli/discover-command.js +108 -0
  31. package/dist/cli/discover-command.js.map +1 -0
  32. package/dist/cli/hashline-command.d.ts +11 -0
  33. package/dist/cli/hashline-command.d.ts.map +1 -0
  34. package/dist/cli/hashline-command.js +106 -0
  35. package/dist/cli/hashline-command.js.map +1 -0
  36. package/dist/cli/import-command.d.ts +35 -0
  37. package/dist/cli/import-command.d.ts.map +1 -0
  38. package/dist/cli/import-command.js +164 -0
  39. package/dist/cli/import-command.js.map +1 -0
  40. package/dist/cli/politica-command.d.ts +20 -0
  41. package/dist/cli/politica-command.d.ts.map +1 -0
  42. package/dist/cli/politica-command.js +93 -0
  43. package/dist/cli/politica-command.js.map +1 -0
  44. package/dist/cli/refine-command.d.ts +18 -0
  45. package/dist/cli/refine-command.d.ts.map +1 -0
  46. package/dist/cli/refine-command.js +101 -0
  47. package/dist/cli/refine-command.js.map +1 -0
  48. package/dist/cli/review-command.d.ts +24 -0
  49. package/dist/cli/review-command.d.ts.map +1 -0
  50. package/dist/cli/review-command.js +168 -0
  51. package/dist/cli/review-command.js.map +1 -0
  52. package/dist/cli/schedule-command.d.ts +17 -0
  53. package/dist/cli/schedule-command.d.ts.map +1 -0
  54. package/dist/cli/schedule-command.js +117 -0
  55. package/dist/cli/schedule-command.js.map +1 -0
  56. package/dist/cli/serve-command.d.ts +72 -0
  57. package/dist/cli/serve-command.d.ts.map +1 -0
  58. package/dist/cli/serve-command.js +568 -0
  59. package/dist/cli/serve-command.js.map +1 -0
  60. package/dist/cli/telegram-command.d.ts +18 -0
  61. package/dist/cli/telegram-command.d.ts.map +1 -0
  62. package/dist/cli/telegram-command.js +137 -0
  63. package/dist/cli/telegram-command.js.map +1 -0
  64. package/dist/cli/telemetria-command.d.ts +22 -0
  65. package/dist/cli/telemetria-command.d.ts.map +1 -0
  66. package/dist/cli/telemetria-command.js +127 -0
  67. package/dist/cli/telemetria-command.js.map +1 -0
  68. package/dist/cli/undo-command.d.ts +9 -0
  69. package/dist/cli/undo-command.d.ts.map +1 -0
  70. package/dist/cli/undo-command.js +56 -0
  71. package/dist/cli/undo-command.js.map +1 -0
  72. package/dist/cli/usage-command.d.ts +10 -0
  73. package/dist/cli/usage-command.d.ts.map +1 -0
  74. package/dist/cli/usage-command.js +209 -0
  75. package/dist/cli/usage-command.js.map +1 -0
  76. package/dist/cli/wiki-command.d.ts +9 -0
  77. package/dist/cli/wiki-command.d.ts.map +1 -0
  78. package/dist/cli/wiki-command.js +76 -0
  79. package/dist/cli/wiki-command.js.map +1 -0
  80. package/dist/cli.d.ts +6 -0
  81. package/dist/cli.d.ts.map +1 -1
  82. package/dist/cli.js +10 -11
  83. package/dist/cli.js.map +1 -1
  84. package/dist/config.d.ts +1 -1
  85. package/dist/config.d.ts.map +1 -1
  86. package/dist/config.js +1 -1
  87. package/dist/config.js.map +1 -1
  88. package/dist/core/ada.d.ts +58 -0
  89. package/dist/core/ada.d.ts.map +1 -0
  90. package/dist/core/ada.js +61 -0
  91. package/dist/core/ada.js.map +1 -0
  92. package/dist/core/advisor/guarda.d.ts +66 -0
  93. package/dist/core/advisor/guarda.d.ts.map +1 -0
  94. package/dist/core/advisor/guarda.js +191 -0
  95. package/dist/core/advisor/guarda.js.map +1 -0
  96. package/dist/core/advisor/runtime.d.ts +66 -0
  97. package/dist/core/advisor/runtime.d.ts.map +1 -0
  98. package/dist/core/advisor/runtime.js +121 -0
  99. package/dist/core/advisor/runtime.js.map +1 -0
  100. package/dist/core/advisor/sesion.d.ts +109 -0
  101. package/dist/core/advisor/sesion.d.ts.map +1 -0
  102. package/dist/core/advisor/sesion.js +139 -0
  103. package/dist/core/advisor/sesion.js.map +1 -0
  104. package/dist/core/agent-session.d.ts +30 -2
  105. package/dist/core/agent-session.d.ts.map +1 -1
  106. package/dist/core/agent-session.js +430 -22
  107. package/dist/core/agent-session.js.map +1 -1
  108. package/dist/core/agents/loader.d.ts +77 -0
  109. package/dist/core/agents/loader.d.ts.map +1 -0
  110. package/dist/core/agents/loader.js +154 -0
  111. package/dist/core/agents/loader.js.map +1 -0
  112. package/dist/core/aprobacion/generados.d.ts +37 -0
  113. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  114. package/dist/core/aprobacion/generados.js +85 -0
  115. package/dist/core/aprobacion/generados.js.map +1 -0
  116. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  117. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  118. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  119. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  120. package/dist/core/aprobacion/politica.d.ts +90 -0
  121. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  122. package/dist/core/aprobacion/politica.js +375 -0
  123. package/dist/core/aprobacion/politica.js.map +1 -0
  124. package/dist/core/arranque/atajos.d.ts +46 -0
  125. package/dist/core/arranque/atajos.d.ts.map +1 -0
  126. package/dist/core/arranque/atajos.js +113 -0
  127. package/dist/core/arranque/atajos.js.map +1 -0
  128. package/dist/core/audit/exportacion.d.ts +54 -0
  129. package/dist/core/audit/exportacion.d.ts.map +1 -0
  130. package/dist/core/audit/exportacion.js +265 -0
  131. package/dist/core/audit/exportacion.js.map +1 -0
  132. package/dist/core/audit/libro.d.ts +318 -0
  133. package/dist/core/audit/libro.d.ts.map +1 -0
  134. package/dist/core/audit/libro.js +508 -0
  135. package/dist/core/audit/libro.js.map +1 -0
  136. package/dist/core/audit/registro-sesion.d.ts +78 -0
  137. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  138. package/dist/core/audit/registro-sesion.js +202 -0
  139. package/dist/core/audit/registro-sesion.js.map +1 -0
  140. package/dist/core/audit/retencion.d.ts +82 -0
  141. package/dist/core/audit/retencion.d.ts.map +1 -0
  142. package/dist/core/audit/retencion.js +152 -0
  143. package/dist/core/audit/retencion.js.map +1 -0
  144. package/dist/core/audit/rutas.d.ts +23 -0
  145. package/dist/core/audit/rutas.d.ts.map +1 -0
  146. package/dist/core/audit/rutas.js +23 -0
  147. package/dist/core/audit/rutas.js.map +1 -0
  148. package/dist/core/auth-storage.d.ts +0 -3
  149. package/dist/core/auth-storage.d.ts.map +1 -1
  150. package/dist/core/auth-storage.js +17 -5
  151. package/dist/core/auth-storage.js.map +1 -1
  152. package/dist/core/banco/almacenamiento.d.ts +18 -0
  153. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  154. package/dist/core/banco/almacenamiento.js +50 -0
  155. package/dist/core/banco/almacenamiento.js.map +1 -0
  156. package/dist/core/banco/analisis.d.ts +37 -0
  157. package/dist/core/banco/analisis.d.ts.map +1 -0
  158. package/dist/core/banco/analisis.js +164 -0
  159. package/dist/core/banco/analisis.js.map +1 -0
  160. package/dist/core/banco/bloques.d.ts +39 -0
  161. package/dist/core/banco/bloques.d.ts.map +1 -0
  162. package/dist/core/banco/bloques.js +84 -0
  163. package/dist/core/banco/bloques.js.map +1 -0
  164. package/dist/core/banco/cargas.d.ts +84 -0
  165. package/dist/core/banco/cargas.d.ts.map +1 -0
  166. package/dist/core/banco/cargas.js +520 -0
  167. package/dist/core/banco/cargas.js.map +1 -0
  168. package/dist/core/banco/comparar.d.ts +29 -0
  169. package/dist/core/banco/comparar.d.ts.map +1 -0
  170. package/dist/core/banco/comparar.js +28 -0
  171. package/dist/core/banco/comparar.js.map +1 -0
  172. package/dist/core/banco/ejecutar.d.ts +44 -0
  173. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  174. package/dist/core/banco/ejecutar.js +183 -0
  175. package/dist/core/banco/ejecutar.js.map +1 -0
  176. package/dist/core/banco/generar.d.ts +24 -0
  177. package/dist/core/banco/generar.d.ts.map +1 -0
  178. package/dist/core/banco/generar.js +159 -0
  179. package/dist/core/banco/generar.js.map +1 -0
  180. package/dist/core/banco/mutaciones.d.ts +25 -0
  181. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  182. package/dist/core/banco/mutaciones.js +215 -0
  183. package/dist/core/banco/mutaciones.js.map +1 -0
  184. package/dist/core/banco/tipos.d.ts +121 -0
  185. package/dist/core/banco/tipos.d.ts.map +1 -0
  186. package/dist/core/banco/tipos.js +16 -0
  187. package/dist/core/banco/tipos.js.map +1 -0
  188. package/dist/core/blobs/almacen.d.ts +81 -0
  189. package/dist/core/blobs/almacen.d.ts.map +1 -0
  190. package/dist/core/blobs/almacen.js +198 -0
  191. package/dist/core/blobs/almacen.js.map +1 -0
  192. package/dist/core/blobs/broker.d.ts +103 -0
  193. package/dist/core/blobs/broker.d.ts.map +1 -0
  194. package/dist/core/blobs/broker.js +204 -0
  195. package/dist/core/blobs/broker.js.map +1 -0
  196. package/dist/core/blobs/index.d.ts +70 -0
  197. package/dist/core/blobs/index.d.ts.map +1 -0
  198. package/dist/core/blobs/index.js +232 -0
  199. package/dist/core/blobs/index.js.map +1 -0
  200. package/dist/core/blobs/payload.d.ts +55 -0
  201. package/dist/core/blobs/payload.d.ts.map +1 -0
  202. package/dist/core/blobs/payload.js +255 -0
  203. package/dist/core/blobs/payload.js.map +1 -0
  204. package/dist/core/blobs/proveedor.d.ts +85 -0
  205. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  206. package/dist/core/blobs/proveedor.js +196 -0
  207. package/dist/core/blobs/proveedor.js.map +1 -0
  208. package/dist/core/browser/cdp.d.ts +41 -0
  209. package/dist/core/browser/cdp.d.ts.map +1 -0
  210. package/dist/core/browser/cdp.js +119 -0
  211. package/dist/core/browser/cdp.js.map +1 -0
  212. package/dist/core/browser/politica.d.ts +51 -0
  213. package/dist/core/browser/politica.d.ts.map +1 -0
  214. package/dist/core/browser/politica.js +123 -0
  215. package/dist/core/browser/politica.js.map +1 -0
  216. package/dist/core/browser/sesion.d.ts +52 -0
  217. package/dist/core/browser/sesion.d.ts.map +1 -0
  218. package/dist/core/browser/sesion.js +176 -0
  219. package/dist/core/browser/sesion.js.map +1 -0
  220. package/dist/core/browser/tools.d.ts +16 -0
  221. package/dist/core/browser/tools.d.ts.map +1 -0
  222. package/dist/core/browser/tools.js +279 -0
  223. package/dist/core/browser/tools.js.map +1 -0
  224. package/dist/core/commit/diff.d.ts +56 -0
  225. package/dist/core/commit/diff.d.ts.map +1 -0
  226. package/dist/core/commit/diff.js +145 -0
  227. package/dist/core/commit/diff.js.map +1 -0
  228. package/dist/core/commit/mensaje.d.ts +80 -0
  229. package/dist/core/commit/mensaje.d.ts.map +1 -0
  230. package/dist/core/commit/mensaje.js +207 -0
  231. package/dist/core/commit/mensaje.js.map +1 -0
  232. package/dist/core/compactar/index.d.ts +52 -0
  233. package/dist/core/compactar/index.d.ts.map +1 -0
  234. package/dist/core/compactar/index.js +91 -0
  235. package/dist/core/compactar/index.js.map +1 -0
  236. package/dist/core/compactar/registro-denso.d.ts +160 -0
  237. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  238. package/dist/core/compactar/registro-denso.js +620 -0
  239. package/dist/core/compactar/registro-denso.js.map +1 -0
  240. package/dist/core/computer/captura.d.ts +35 -0
  241. package/dist/core/computer/captura.d.ts.map +1 -0
  242. package/dist/core/computer/captura.js +140 -0
  243. package/dist/core/computer/captura.js.map +1 -0
  244. package/dist/core/computer/driver.d.ts +130 -0
  245. package/dist/core/computer/driver.d.ts.map +1 -0
  246. package/dist/core/computer/driver.js +206 -0
  247. package/dist/core/computer/driver.js.map +1 -0
  248. package/dist/core/computer/motor/actions.d.ts +109 -0
  249. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  250. package/dist/core/computer/motor/actions.js +157 -0
  251. package/dist/core/computer/motor/actions.js.map +1 -0
  252. package/dist/core/computer/motor/bridge.d.ts +232 -0
  253. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  254. package/dist/core/computer/motor/bridge.js +2335 -0
  255. package/dist/core/computer/motor/bridge.js.map +1 -0
  256. package/dist/core/computer/motor/cdp.d.ts +107 -0
  257. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  258. package/dist/core/computer/motor/cdp.js +659 -0
  259. package/dist/core/computer/motor/cdp.js.map +1 -0
  260. package/dist/core/computer/motor/config.d.ts +23 -0
  261. package/dist/core/computer/motor/config.d.ts.map +1 -0
  262. package/dist/core/computer/motor/config.js +100 -0
  263. package/dist/core/computer/motor/config.js.map +1 -0
  264. package/dist/core/computer/motor/contract.d.ts +81 -0
  265. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  266. package/dist/core/computer/motor/contract.js +14 -0
  267. package/dist/core/computer/motor/contract.js.map +1 -0
  268. package/dist/core/computer/motor/note.d.ts +37 -0
  269. package/dist/core/computer/motor/note.d.ts.map +1 -0
  270. package/dist/core/computer/motor/note.js +162 -0
  271. package/dist/core/computer/motor/note.js.map +1 -0
  272. package/dist/core/computer/motor/outline.d.ts +155 -0
  273. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  274. package/dist/core/computer/motor/outline.js +590 -0
  275. package/dist/core/computer/motor/outline.js.map +1 -0
  276. package/dist/core/computer/motor/output.d.ts +18 -0
  277. package/dist/core/computer/motor/output.d.ts.map +1 -0
  278. package/dist/core/computer/motor/output.js +148 -0
  279. package/dist/core/computer/motor/output.js.map +1 -0
  280. package/dist/core/computer/motor/permissions.d.ts +41 -0
  281. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  282. package/dist/core/computer/motor/permissions.js +51 -0
  283. package/dist/core/computer/motor/permissions.js.map +1 -0
  284. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  285. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  286. package/dist/core/computer/motor/platform/architecture.js +21 -0
  287. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  288. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  289. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  290. package/dist/core/computer/motor/platform/coerce.js +17 -0
  291. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  292. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  293. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  294. package/dist/core/computer/motor/platform/index.js +79 -0
  295. package/dist/core/computer/motor/platform/index.js.map +1 -0
  296. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  297. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  298. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  299. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  300. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  301. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  302. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  303. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  304. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  305. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  307. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  308. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  309. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  311. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  312. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  313. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  314. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  315. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  316. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  317. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  318. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  319. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  320. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  321. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  322. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  323. package/dist/core/computer/motor/platform/types.js +2 -0
  324. package/dist/core/computer/motor/platform/types.js.map +1 -0
  325. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  326. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  327. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  328. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  329. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  330. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  331. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  332. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  333. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  334. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  335. package/dist/core/computer/motor/root-selection.js +28 -0
  336. package/dist/core/computer/motor/root-selection.js.map +1 -0
  337. package/dist/core/computer/motor/runtime.d.ts +50 -0
  338. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  339. package/dist/core/computer/motor/runtime.js +119 -0
  340. package/dist/core/computer/motor/runtime.js.map +1 -0
  341. package/dist/core/computer/motor/state.d.ts +68 -0
  342. package/dist/core/computer/motor/state.d.ts.map +1 -0
  343. package/dist/core/computer/motor/state.js +100 -0
  344. package/dist/core/computer/motor/state.js.map +1 -0
  345. package/dist/core/computer/motor/view.d.ts +6 -0
  346. package/dist/core/computer/motor/view.d.ts.map +1 -0
  347. package/dist/core/computer/motor/view.js +185 -0
  348. package/dist/core/computer/motor/view.js.map +1 -0
  349. package/dist/core/computer/motor-ada.d.ts +159 -0
  350. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  351. package/dist/core/computer/motor-ada.js +412 -0
  352. package/dist/core/computer/motor-ada.js.map +1 -0
  353. package/dist/core/computer/politica.d.ts +56 -0
  354. package/dist/core/computer/politica.d.ts.map +1 -0
  355. package/dist/core/computer/politica.js +163 -0
  356. package/dist/core/computer/politica.js.map +1 -0
  357. package/dist/core/computer/tools.d.ts +26 -0
  358. package/dist/core/computer/tools.d.ts.map +1 -0
  359. package/dist/core/computer/tools.js +399 -0
  360. package/dist/core/computer/tools.js.map +1 -0
  361. package/dist/core/context-breakdown.d.ts +80 -0
  362. package/dist/core/context-breakdown.d.ts.map +1 -0
  363. package/dist/core/context-breakdown.js +87 -0
  364. package/dist/core/context-breakdown.js.map +1 -0
  365. package/dist/core/credenciales/cliente.d.ts +60 -0
  366. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  367. package/dist/core/credenciales/cliente.js +81 -0
  368. package/dist/core/credenciales/cliente.js.map +1 -0
  369. package/dist/core/credenciales/pool.d.ts +96 -0
  370. package/dist/core/credenciales/pool.d.ts.map +1 -0
  371. package/dist/core/credenciales/pool.js +128 -0
  372. package/dist/core/credenciales/pool.js.map +1 -0
  373. package/dist/core/credenciales/reposo.d.ts +93 -0
  374. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  375. package/dist/core/credenciales/reposo.js +489 -0
  376. package/dist/core/credenciales/reposo.js.map +1 -0
  377. package/dist/core/credenciales/servidor.d.ts +55 -0
  378. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  379. package/dist/core/credenciales/servidor.js +205 -0
  380. package/dist/core/credenciales/servidor.js.map +1 -0
  381. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  382. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  383. package/dist/core/descubrimiento/comandos.js +76 -0
  384. package/dist/core/descubrimiento/comandos.js.map +1 -0
  385. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  386. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  387. package/dist/core/descubrimiento/mcp.js +130 -0
  388. package/dist/core/descubrimiento/mcp.js.map +1 -0
  389. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  390. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  391. package/dist/core/descubrimiento/reglas.js +134 -0
  392. package/dist/core/descubrimiento/reglas.js.map +1 -0
  393. package/dist/core/descubrimiento/skills.d.ts +57 -0
  394. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  395. package/dist/core/descubrimiento/skills.js +113 -0
  396. package/dist/core/descubrimiento/skills.js.map +1 -0
  397. package/dist/core/dificultad/clasificador.d.ts +133 -0
  398. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  399. package/dist/core/dificultad/clasificador.js +288 -0
  400. package/dist/core/dificultad/clasificador.js.map +1 -0
  401. package/dist/core/edicion/diario.d.ts +37 -0
  402. package/dist/core/edicion/diario.d.ts.map +1 -0
  403. package/dist/core/edicion/diario.js +51 -0
  404. package/dist/core/edicion/diario.js.map +1 -0
  405. package/dist/core/edicion/hashline.d.ts +71 -0
  406. package/dist/core/edicion/hashline.d.ts.map +1 -0
  407. package/dist/core/edicion/hashline.js +111 -0
  408. package/dist/core/edicion/hashline.js.map +1 -0
  409. package/dist/core/edicion/hueco.d.ts +64 -0
  410. package/dist/core/edicion/hueco.d.ts.map +1 -0
  411. package/dist/core/edicion/hueco.js +162 -0
  412. package/dist/core/edicion/hueco.js.map +1 -0
  413. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  414. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  415. package/dist/core/edicion/limpiar-carga.js +121 -0
  416. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  417. package/dist/core/edicion/observador.d.ts +80 -0
  418. package/dist/core/edicion/observador.d.ts.map +1 -0
  419. package/dist/core/edicion/observador.js +183 -0
  420. package/dist/core/edicion/observador.js.map +1 -0
  421. package/dist/core/edicion/parecido.d.ts +53 -0
  422. package/dist/core/edicion/parecido.d.ts.map +1 -0
  423. package/dist/core/edicion/parecido.js +145 -0
  424. package/dist/core/edicion/parecido.js.map +1 -0
  425. package/dist/core/edicion/parseo.d.ts +58 -0
  426. package/dist/core/edicion/parseo.d.ts.map +1 -0
  427. package/dist/core/edicion/parseo.js +124 -0
  428. package/dist/core/edicion/parseo.js.map +1 -0
  429. package/dist/core/edicion/reparacion.d.ts +67 -0
  430. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  431. package/dist/core/edicion/reparacion.js +202 -0
  432. package/dist/core/edicion/reparacion.js.map +1 -0
  433. package/dist/core/edicion/sangria.d.ts +121 -0
  434. package/dist/core/edicion/sangria.d.ts.map +1 -0
  435. package/dist/core/edicion/sangria.js +341 -0
  436. package/dist/core/edicion/sangria.js.map +1 -0
  437. package/dist/core/edicion/tipos.d.ts +58 -0
  438. package/dist/core/edicion/tipos.d.ts.map +1 -0
  439. package/dist/core/edicion/tipos.js +160 -0
  440. package/dist/core/edicion/tipos.js.map +1 -0
  441. package/dist/core/errores/proveedor.d.ts +53 -0
  442. package/dist/core/errores/proveedor.d.ts.map +1 -0
  443. package/dist/core/errores/proveedor.js +191 -0
  444. package/dist/core/errores/proveedor.js.map +1 -0
  445. package/dist/core/estructural/buscar.d.ts +61 -0
  446. package/dist/core/estructural/buscar.d.ts.map +1 -0
  447. package/dist/core/estructural/buscar.js +261 -0
  448. package/dist/core/estructural/buscar.js.map +1 -0
  449. package/dist/core/estructural/editar.d.ts +36 -0
  450. package/dist/core/estructural/editar.d.ts.map +1 -0
  451. package/dist/core/estructural/editar.js +123 -0
  452. package/dist/core/estructural/editar.js.map +1 -0
  453. package/dist/core/estructural/tools.d.ts +11 -0
  454. package/dist/core/estructural/tools.d.ts.map +1 -0
  455. package/dist/core/estructural/tools.js +100 -0
  456. package/dist/core/estructural/tools.js.map +1 -0
  457. package/dist/core/experimental.d.ts.map +1 -1
  458. package/dist/core/experimental.js +10 -1
  459. package/dist/core/experimental.js.map +1 -1
  460. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  461. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  462. package/dist/core/extensiones/suplantacion.js +61 -0
  463. package/dist/core/extensiones/suplantacion.js.map +1 -0
  464. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  465. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  466. package/dist/core/extensiones/vigilancia.js +217 -0
  467. package/dist/core/extensiones/vigilancia.js.map +1 -0
  468. package/dist/core/extensions/loader.d.ts.map +1 -1
  469. package/dist/core/extensions/loader.js +11 -1
  470. package/dist/core/extensions/loader.js.map +1 -1
  471. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  472. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  473. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  474. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  475. package/dist/core/harness/refine.d.ts +40 -0
  476. package/dist/core/harness/refine.d.ts.map +1 -0
  477. package/dist/core/harness/refine.js +109 -0
  478. package/dist/core/harness/refine.js.map +1 -0
  479. package/dist/core/harness/store.d.ts +75 -0
  480. package/dist/core/harness/store.d.ts.map +1 -0
  481. package/dist/core/harness/store.js +149 -0
  482. package/dist/core/harness/store.js.map +1 -0
  483. package/dist/core/hooks/contract.d.ts +85 -0
  484. package/dist/core/hooks/contract.d.ts.map +1 -0
  485. package/dist/core/hooks/contract.js +140 -0
  486. package/dist/core/hooks/contract.js.map +1 -0
  487. package/dist/core/hooks/runner.d.ts +42 -0
  488. package/dist/core/hooks/runner.d.ts.map +1 -0
  489. package/dist/core/hooks/runner.js +85 -0
  490. package/dist/core/hooks/runner.js.map +1 -0
  491. package/dist/core/hooks/session-hooks.d.ts +62 -0
  492. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  493. package/dist/core/hooks/session-hooks.js +84 -0
  494. package/dist/core/hooks/session-hooks.js.map +1 -0
  495. package/dist/core/importar/formatos.d.ts +69 -0
  496. package/dist/core/importar/formatos.d.ts.map +1 -0
  497. package/dist/core/importar/formatos.js +235 -0
  498. package/dist/core/importar/formatos.js.map +1 -0
  499. package/dist/core/interactivo/deteccion.d.ts +44 -0
  500. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  501. package/dist/core/interactivo/deteccion.js +82 -0
  502. package/dist/core/interactivo/deteccion.js.map +1 -0
  503. package/dist/core/interactivo/sesion.d.ts +50 -0
  504. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  505. package/dist/core/interactivo/sesion.js +156 -0
  506. package/dist/core/interactivo/sesion.js.map +1 -0
  507. package/dist/core/interactivo/tools.d.ts +21 -0
  508. package/dist/core/interactivo/tools.d.ts.map +1 -0
  509. package/dist/core/interactivo/tools.js +122 -0
  510. package/dist/core/interactivo/tools.js.map +1 -0
  511. package/dist/core/lectura/mapa.d.ts +70 -0
  512. package/dist/core/lectura/mapa.d.ts.map +1 -0
  513. package/dist/core/lectura/mapa.js +177 -0
  514. package/dist/core/lectura/mapa.js.map +1 -0
  515. package/dist/core/lectura/pdf.d.ts +49 -0
  516. package/dist/core/lectura/pdf.d.ts.map +1 -0
  517. package/dist/core/lectura/pdf.js +337 -0
  518. package/dist/core/lectura/pdf.js.map +1 -0
  519. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  520. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  521. package/dist/core/limpieza/comprobadores.js +311 -0
  522. package/dist/core/limpieza/comprobadores.js.map +1 -0
  523. package/dist/core/limpieza/parseo.d.ts +19 -0
  524. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  525. package/dist/core/limpieza/parseo.js +124 -0
  526. package/dist/core/limpieza/parseo.js.map +1 -0
  527. package/dist/core/limpieza/reparacion.d.ts +77 -0
  528. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  529. package/dist/core/limpieza/reparacion.js +254 -0
  530. package/dist/core/limpieza/reparacion.js.map +1 -0
  531. package/dist/core/limpieza/tipos.d.ts +56 -0
  532. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  533. package/dist/core/limpieza/tipos.js +9 -0
  534. package/dist/core/limpieza/tipos.js.map +1 -0
  535. package/dist/core/lsp/cliente.d.ts +52 -0
  536. package/dist/core/lsp/cliente.d.ts.map +1 -0
  537. package/dist/core/lsp/cliente.js +232 -0
  538. package/dist/core/lsp/cliente.js.map +1 -0
  539. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  540. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  541. package/dist/core/lsp/descubrimiento.js +152 -0
  542. package/dist/core/lsp/descubrimiento.js.map +1 -0
  543. package/dist/core/lsp/ediciones.d.ts +59 -0
  544. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  545. package/dist/core/lsp/ediciones.js +89 -0
  546. package/dist/core/lsp/ediciones.js.map +1 -0
  547. package/dist/core/lsp/extension.d.ts +28 -0
  548. package/dist/core/lsp/extension.d.ts.map +1 -0
  549. package/dist/core/lsp/extension.js +34 -0
  550. package/dist/core/lsp/extension.js.map +1 -0
  551. package/dist/core/lsp/tools.d.ts +45 -0
  552. package/dist/core/lsp/tools.d.ts.map +1 -0
  553. package/dist/core/lsp/tools.js +265 -0
  554. package/dist/core/lsp/tools.js.map +1 -0
  555. package/dist/core/mcp/client.d.ts +60 -0
  556. package/dist/core/mcp/client.d.ts.map +1 -0
  557. package/dist/core/mcp/client.js +139 -0
  558. package/dist/core/mcp/client.js.map +1 -0
  559. package/dist/core/mcp/manager.d.ts +86 -0
  560. package/dist/core/mcp/manager.d.ts.map +1 -0
  561. package/dist/core/mcp/manager.js +124 -0
  562. package/dist/core/mcp/manager.js.map +1 -0
  563. package/dist/core/mcp/tools.d.ts +15 -0
  564. package/dist/core/mcp/tools.d.ts.map +1 -0
  565. package/dist/core/mcp/tools.js +84 -0
  566. package/dist/core/mcp/tools.js.map +1 -0
  567. package/dist/core/memory-engine/audit-export.d.ts +12 -10
  568. package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
  569. package/dist/core/memory-engine/audit-export.js +15 -0
  570. package/dist/core/memory-engine/audit-export.js.map +1 -1
  571. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  572. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  573. package/dist/core/memory-engine/audit-indice.js +271 -0
  574. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  575. package/dist/core/memory-engine/audit.d.ts +18 -6
  576. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  577. package/dist/core/memory-engine/audit.js +25 -42
  578. package/dist/core/memory-engine/audit.js.map +1 -1
  579. package/dist/core/memory-engine/engine.d.ts +19 -1
  580. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  581. package/dist/core/memory-engine/engine.js +71 -5
  582. package/dist/core/memory-engine/engine.js.map +1 -1
  583. package/dist/core/memory-engine/observation-store.d.ts +0 -2
  584. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  585. package/dist/core/memory-engine/observation-store.js +4 -5
  586. package/dist/core/memory-engine/observation-store.js.map +1 -1
  587. package/dist/core/memory-engine/refinements.d.ts +51 -0
  588. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  589. package/dist/core/memory-engine/refinements.js +99 -0
  590. package/dist/core/memory-engine/refinements.js.map +1 -0
  591. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  592. package/dist/core/memory-engine/tools.js +27 -1
  593. package/dist/core/memory-engine/tools.js.map +1 -1
  594. package/dist/core/memory-engine/types.d.ts +2 -0
  595. package/dist/core/memory-engine/types.d.ts.map +1 -1
  596. package/dist/core/memory-engine/types.js.map +1 -1
  597. package/dist/core/model-resolver.d.ts.map +1 -1
  598. package/dist/core/model-resolver.js +7 -1
  599. package/dist/core/model-resolver.js.map +1 -1
  600. package/dist/core/muestreo-restringido.d.ts +49 -0
  601. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  602. package/dist/core/muestreo-restringido.js +65 -0
  603. package/dist/core/muestreo-restringido.js.map +1 -0
  604. package/dist/core/orphan-process-journal.d.ts +48 -0
  605. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  606. package/dist/core/orphan-process-journal.js +116 -0
  607. package/dist/core/orphan-process-journal.js.map +1 -0
  608. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  609. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  610. package/dist/core/privacidad/categorias-especiales.js +745 -0
  611. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  612. package/dist/core/privacidad/tapar.d.ts +48 -0
  613. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  614. package/dist/core/privacidad/tapar.js +66 -0
  615. package/dist/core/privacidad/tapar.js.map +1 -0
  616. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  617. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  618. package/dist/core/prompt-cache/diagnostics.js +100 -0
  619. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  620. package/dist/core/prompt-cache/index.d.ts +33 -0
  621. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  622. package/dist/core/prompt-cache/index.js +189 -0
  623. package/dist/core/prompt-cache/index.js.map +1 -0
  624. package/dist/core/prompt-cache/payload.d.ts +58 -0
  625. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  626. package/dist/core/prompt-cache/payload.js +122 -0
  627. package/dist/core/prompt-cache/payload.js.map +1 -0
  628. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  629. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  630. package/dist/core/prompt-cache/stabilize.js +137 -0
  631. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  632. package/dist/core/prompt-cache/stats.d.ts +55 -0
  633. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  634. package/dist/core/prompt-cache/stats.js +158 -0
  635. package/dist/core/prompt-cache/stats.js.map +1 -0
  636. package/dist/core/prompt-eleccion.d.ts +38 -0
  637. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  638. package/dist/core/prompt-eleccion.js +46 -0
  639. package/dist/core/prompt-eleccion.js.map +1 -0
  640. package/dist/core/prompts/montar.d.ts +75 -0
  641. package/dist/core/prompts/montar.d.ts.map +1 -0
  642. package/dist/core/prompts/montar.js +146 -0
  643. package/dist/core/prompts/montar.js.map +1 -0
  644. package/dist/core/prompts/plantilla.d.ts +54 -0
  645. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  646. package/dist/core/prompts/plantilla.js +153 -0
  647. package/dist/core/prompts/plantilla.js.map +1 -0
  648. package/dist/core/prompts/sistema.md +134 -0
  649. package/dist/core/provider-attribution.d.ts +24 -2
  650. package/dist/core/provider-attribution.d.ts.map +1 -1
  651. package/dist/core/provider-attribution.js +24 -42
  652. package/dist/core/provider-attribution.js.map +1 -1
  653. package/dist/core/remoto/destino.d.ts +38 -0
  654. package/dist/core/remoto/destino.d.ts.map +1 -0
  655. package/dist/core/remoto/destino.js +105 -0
  656. package/dist/core/remoto/destino.js.map +1 -0
  657. package/dist/core/remoto/ejecutor.d.ts +59 -0
  658. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  659. package/dist/core/remoto/ejecutor.js +225 -0
  660. package/dist/core/remoto/ejecutor.js.map +1 -0
  661. package/dist/core/remoto/ficheros.d.ts +29 -0
  662. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  663. package/dist/core/remoto/ficheros.js +90 -0
  664. package/dist/core/remoto/ficheros.js.map +1 -0
  665. package/dist/core/remoto/registro-extension.d.ts +15 -0
  666. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  667. package/dist/core/remoto/registro-extension.js +17 -0
  668. package/dist/core/remoto/registro-extension.js.map +1 -0
  669. package/dist/core/remoto/tools.d.ts +28 -0
  670. package/dist/core/remoto/tools.d.ts.map +1 -0
  671. package/dist/core/remoto/tools.js +31 -0
  672. package/dist/core/remoto/tools.js.map +1 -0
  673. package/dist/core/resource-loader.d.ts +8 -0
  674. package/dist/core/resource-loader.d.ts.map +1 -1
  675. package/dist/core/resource-loader.js +93 -1
  676. package/dist/core/resource-loader.js.map +1 -1
  677. package/dist/core/revision/hallazgo.d.ts +51 -0
  678. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  679. package/dist/core/revision/hallazgo.js +73 -0
  680. package/dist/core/revision/hallazgo.js.map +1 -0
  681. package/dist/core/revision/revisor.d.ts +81 -0
  682. package/dist/core/revision/revisor.d.ts.map +1 -0
  683. package/dist/core/revision/revisor.js +132 -0
  684. package/dist/core/revision/revisor.js.map +1 -0
  685. package/dist/core/revision/sarif.d.ts +30 -0
  686. package/dist/core/revision/sarif.d.ts.map +1 -0
  687. package/dist/core/revision/sarif.js +83 -0
  688. package/dist/core/revision/sarif.js.map +1 -0
  689. package/dist/core/scheduler/scheduler.d.ts +87 -0
  690. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  691. package/dist/core/scheduler/scheduler.js +178 -0
  692. package/dist/core/scheduler/scheduler.js.map +1 -0
  693. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  694. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  695. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  696. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  697. package/dist/core/settings-manager.d.ts +110 -6
  698. package/dist/core/settings-manager.d.ts.map +1 -1
  699. package/dist/core/settings-manager.js +53 -2
  700. package/dist/core/settings-manager.js.map +1 -1
  701. package/dist/core/slash-commands.d.ts.map +1 -1
  702. package/dist/core/slash-commands.js +3 -3
  703. package/dist/core/slash-commands.js.map +1 -1
  704. package/dist/core/system-prompt.d.ts +17 -0
  705. package/dist/core/system-prompt.d.ts.map +1 -1
  706. package/dist/core/system-prompt.js +13 -5
  707. package/dist/core/system-prompt.js.map +1 -1
  708. package/dist/core/telemetria/otlp.d.ts +122 -0
  709. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  710. package/dist/core/telemetria/otlp.js +373 -0
  711. package/dist/core/telemetria/otlp.js.map +1 -0
  712. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  713. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  714. package/dist/core/tools/coercion-argumentos.js +99 -0
  715. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  716. package/dist/core/tools/edit-diff.d.ts +0 -7
  717. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  718. package/dist/core/tools/edit-diff.js +232 -7
  719. package/dist/core/tools/edit-diff.js.map +1 -1
  720. package/dist/core/tools/edit.d.ts.map +1 -1
  721. package/dist/core/tools/edit.js +8 -1
  722. package/dist/core/tools/edit.js.map +1 -1
  723. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  724. package/dist/core/tools/file-mutation-queue.js +5 -0
  725. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  726. package/dist/core/tools/json-tolerante.d.ts +30 -0
  727. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  728. package/dist/core/tools/json-tolerante.js +70 -0
  729. package/dist/core/tools/json-tolerante.js.map +1 -0
  730. package/dist/core/tools/read.d.ts.map +1 -1
  731. package/dist/core/tools/read.js +17 -0
  732. package/dist/core/tools/read.js.map +1 -1
  733. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  734. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  735. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  736. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  737. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  738. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  739. package/dist/core/turno-vacio/detectar.js +66 -0
  740. package/dist/core/turno-vacio/detectar.js.map +1 -0
  741. package/dist/core/undo/journal.d.ts +57 -0
  742. package/dist/core/undo/journal.d.ts.map +1 -0
  743. package/dist/core/undo/journal.js +178 -0
  744. package/dist/core/undo/journal.js.map +1 -0
  745. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  746. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  747. package/dist/core/urls-internas/auditoria.js +42 -0
  748. package/dist/core/urls-internas/auditoria.js.map +1 -0
  749. package/dist/core/urls-internas/boveda.d.ts +13 -0
  750. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  751. package/dist/core/urls-internas/boveda.js +40 -0
  752. package/dist/core/urls-internas/boveda.js.map +1 -0
  753. package/dist/core/urls-internas/lector.d.ts +30 -0
  754. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  755. package/dist/core/urls-internas/lector.js +56 -0
  756. package/dist/core/urls-internas/lector.js.map +1 -0
  757. package/dist/core/urls-internas/memoria.d.ts +11 -0
  758. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  759. package/dist/core/urls-internas/memoria.js +25 -0
  760. package/dist/core/urls-internas/memoria.js.map +1 -0
  761. package/dist/core/urls-internas/parse.d.ts +28 -0
  762. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  763. package/dist/core/urls-internas/parse.js +32 -0
  764. package/dist/core/urls-internas/parse.js.map +1 -0
  765. package/dist/core/urls-internas/reglas.d.ts +10 -0
  766. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  767. package/dist/core/urls-internas/reglas.js +31 -0
  768. package/dist/core/urls-internas/reglas.js.map +1 -0
  769. package/dist/core/usage/aggregate.d.ts +68 -0
  770. package/dist/core/usage/aggregate.d.ts.map +1 -0
  771. package/dist/core/usage/aggregate.js +93 -0
  772. package/dist/core/usage/aggregate.js.map +1 -0
  773. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  774. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  775. package/dist/core/usage/cuota/anthropic.js +63 -0
  776. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  777. package/dist/core/usage/cuota/cache.d.ts +20 -0
  778. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  779. package/dist/core/usage/cuota/cache.js +36 -0
  780. package/dist/core/usage/cuota/cache.js.map +1 -0
  781. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  782. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  783. package/dist/core/usage/cuota/github-copilot.js +67 -0
  784. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  785. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  786. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  787. package/dist/core/usage/cuota/google-gemini.js +72 -0
  788. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  789. package/dist/core/usage/cuota/index.d.ts +25 -0
  790. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  791. package/dist/core/usage/cuota/index.js +50 -0
  792. package/dist/core/usage/cuota/index.js.map +1 -0
  793. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  794. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  795. package/dist/core/usage/cuota/openai-codex.js +59 -0
  796. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  797. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  798. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  799. package/dist/core/usage/cuota/openrouter.js +47 -0
  800. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  801. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  802. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  803. package/dist/core/usage/cuota/tipos.js +25 -0
  804. package/dist/core/usage/cuota/tipos.js.map +1 -0
  805. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  806. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  807. package/dist/core/web/busqueda-nativa.js +163 -0
  808. package/dist/core/web/busqueda-nativa.js.map +1 -0
  809. package/dist/core/web/destino.d.ts +58 -0
  810. package/dist/core/web/destino.d.ts.map +1 -0
  811. package/dist/core/web/destino.js +127 -0
  812. package/dist/core/web/destino.js.map +1 -0
  813. package/dist/core/web/proveedores/brave.d.ts +6 -0
  814. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  815. package/dist/core/web/proveedores/brave.js +20 -0
  816. package/dist/core/web/proveedores/brave.js.map +1 -0
  817. package/dist/core/web/proveedores/claves.d.ts +19 -0
  818. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  819. package/dist/core/web/proveedores/claves.js +36 -0
  820. package/dist/core/web/proveedores/claves.js.map +1 -0
  821. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  822. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  823. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  824. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  825. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  826. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  827. package/dist/core/web/proveedores/ecosia.js +72 -0
  828. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  829. package/dist/core/web/proveedores/exa.d.ts +6 -0
  830. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  831. package/dist/core/web/proveedores/exa.js +24 -0
  832. package/dist/core/web/proveedores/exa.js.map +1 -0
  833. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  834. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  835. package/dist/core/web/proveedores/mojeek.js +65 -0
  836. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  837. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  838. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  839. package/dist/core/web/proveedores/navegador.js +13 -0
  840. package/dist/core/web/proveedores/navegador.js.map +1 -0
  841. package/dist/core/web/proveedores/registro.d.ts +43 -0
  842. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  843. package/dist/core/web/proveedores/registro.js +49 -0
  844. package/dist/core/web/proveedores/registro.js.map +1 -0
  845. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  846. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  847. package/dist/core/web/proveedores/searxng.js +17 -0
  848. package/dist/core/web/proveedores/searxng.js.map +1 -0
  849. package/dist/core/web/proveedores/serper.d.ts +9 -0
  850. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  851. package/dist/core/web/proveedores/serper.js +19 -0
  852. package/dist/core/web/proveedores/serper.js.map +1 -0
  853. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  854. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  855. package/dist/core/web/proveedores/tavily.js +19 -0
  856. package/dist/core/web/proveedores/tavily.js.map +1 -0
  857. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  858. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  859. package/dist/core/web/proveedores/tipos.js +10 -0
  860. package/dist/core/web/proveedores/tipos.js.map +1 -0
  861. package/dist/core/web/registro-red.d.ts +43 -0
  862. package/dist/core/web/registro-red.d.ts.map +1 -0
  863. package/dist/core/web/registro-red.js +86 -0
  864. package/dist/core/web/registro-red.js.map +1 -0
  865. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  866. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  867. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  868. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  869. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  870. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  871. package/dist/core/web/scrapers/crates-io.js +29 -0
  872. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  873. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  874. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  875. package/dist/core/web/scrapers/docs-rs.js +35 -0
  876. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  877. package/dist/core/web/scrapers/github.d.ts +3 -0
  878. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  879. package/dist/core/web/scrapers/github.js +72 -0
  880. package/dist/core/web/scrapers/github.js.map +1 -0
  881. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  882. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  883. package/dist/core/web/scrapers/go-pkg.js +30 -0
  884. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  885. package/dist/core/web/scrapers/hex.d.ts +6 -0
  886. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  887. package/dist/core/web/scrapers/hex.js +27 -0
  888. package/dist/core/web/scrapers/hex.js.map +1 -0
  889. package/dist/core/web/scrapers/maven.d.ts +8 -0
  890. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  891. package/dist/core/web/scrapers/maven.js +41 -0
  892. package/dist/core/web/scrapers/maven.js.map +1 -0
  893. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  894. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  895. package/dist/core/web/scrapers/mdn.js +28 -0
  896. package/dist/core/web/scrapers/mdn.js.map +1 -0
  897. package/dist/core/web/scrapers/npm.d.ts +11 -0
  898. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  899. package/dist/core/web/scrapers/npm.js +57 -0
  900. package/dist/core/web/scrapers/npm.js.map +1 -0
  901. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  902. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  903. package/dist/core/web/scrapers/nuget.js +22 -0
  904. package/dist/core/web/scrapers/nuget.js.map +1 -0
  905. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  906. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  907. package/dist/core/web/scrapers/nvd.js +37 -0
  908. package/dist/core/web/scrapers/nvd.js.map +1 -0
  909. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  910. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  911. package/dist/core/web/scrapers/pypi.js +31 -0
  912. package/dist/core/web/scrapers/pypi.js.map +1 -0
  913. package/dist/core/web/scrapers/registro.d.ts +13 -0
  914. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  915. package/dist/core/web/scrapers/registro.js +65 -0
  916. package/dist/core/web/scrapers/registro.js.map +1 -0
  917. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  918. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  919. package/dist/core/web/scrapers/rubygems.js +23 -0
  920. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  921. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  922. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  923. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  924. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  925. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  926. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  927. package/dist/core/web/scrapers/tipos.js +23 -0
  928. package/dist/core/web/scrapers/tipos.js.map +1 -0
  929. package/dist/core/web/texto.d.ts +10 -0
  930. package/dist/core/web/texto.d.ts.map +1 -0
  931. package/dist/core/web/texto.js +26 -0
  932. package/dist/core/web/texto.js.map +1 -0
  933. package/dist/core/web/tools.d.ts +91 -0
  934. package/dist/core/web/tools.d.ts.map +1 -0
  935. package/dist/core/web/tools.js +304 -0
  936. package/dist/core/web/tools.js.map +1 -0
  937. package/dist/core/wiki/almacen.d.ts +33 -0
  938. package/dist/core/wiki/almacen.d.ts.map +1 -0
  939. package/dist/core/wiki/almacen.js +93 -0
  940. package/dist/core/wiki/almacen.js.map +1 -0
  941. package/dist/core/wiki/citas.d.ts +111 -0
  942. package/dist/core/wiki/citas.d.ts.map +1 -0
  943. package/dist/core/wiki/citas.js +146 -0
  944. package/dist/core/wiki/citas.js.map +1 -0
  945. package/dist/core/workflows/agent-runner.d.ts +2 -0
  946. package/dist/core/workflows/agent-runner.d.ts.map +1 -1
  947. package/dist/core/workflows/agent-runner.js +131 -44
  948. package/dist/core/workflows/agent-runner.js.map +1 -1
  949. package/dist/core/workflows/builtins.d.ts.map +1 -1
  950. package/dist/core/workflows/builtins.js +1 -0
  951. package/dist/core/workflows/builtins.js.map +1 -1
  952. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  953. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  954. package/dist/core/workflows/contrato/esquema.js +25 -0
  955. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  956. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  957. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  958. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  959. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  960. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  961. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  962. package/dist/core/workflows/contrato/validador.js +56 -0
  963. package/dist/core/workflows/contrato/validador.js.map +1 -0
  964. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  965. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  966. package/dist/core/workflows/contrato/yield.js +80 -0
  967. package/dist/core/workflows/contrato/yield.js.map +1 -0
  968. package/dist/core/workflows/goal-engine/engine.d.ts +17 -0
  969. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
  970. package/dist/core/workflows/goal-engine/engine.js +41 -0
  971. package/dist/core/workflows/goal-engine/engine.js.map +1 -1
  972. package/dist/core/workflows/index.d.ts +8 -0
  973. package/dist/core/workflows/index.d.ts.map +1 -1
  974. package/dist/core/workflows/index.js +4 -0
  975. package/dist/core/workflows/index.js.map +1 -1
  976. package/dist/core/workflows/manager.d.ts +10 -0
  977. package/dist/core/workflows/manager.d.ts.map +1 -1
  978. package/dist/core/workflows/manager.js +35 -11
  979. package/dist/core/workflows/manager.js.map +1 -1
  980. package/dist/core/workflows/runtime.d.ts +13 -0
  981. package/dist/core/workflows/runtime.d.ts.map +1 -1
  982. package/dist/core/workflows/runtime.js +80 -1
  983. package/dist/core/workflows/runtime.js.map +1 -1
  984. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  985. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  986. package/dist/core/workflows/save-as-skill.js +54 -0
  987. package/dist/core/workflows/save-as-skill.js.map +1 -0
  988. package/dist/core/workflows/types.d.ts +49 -0
  989. package/dist/core/workflows/types.d.ts.map +1 -1
  990. package/dist/core/workflows/types.js.map +1 -1
  991. package/dist/extensions/remoto/index.d.ts +22 -0
  992. package/dist/extensions/remoto/index.d.ts.map +1 -0
  993. package/dist/extensions/remoto/index.js +54 -0
  994. package/dist/extensions/remoto/index.js.map +1 -0
  995. package/dist/index.d.ts +1 -17
  996. package/dist/index.d.ts.map +1 -1
  997. package/dist/index.js +7 -16
  998. package/dist/index.js.map +1 -1
  999. package/dist/main.d.ts.map +1 -1
  1000. package/dist/main.js +6 -0
  1001. package/dist/main.js.map +1 -1
  1002. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1003. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1004. package/dist/modes/acp/acp-mode.js +190 -0
  1005. package/dist/modes/acp/acp-mode.js.map +1 -0
  1006. package/dist/modes/acp/events.d.ts +74 -0
  1007. package/dist/modes/acp/events.d.ts.map +1 -0
  1008. package/dist/modes/acp/events.js +116 -0
  1009. package/dist/modes/acp/events.js.map +1 -0
  1010. package/dist/modes/interactive/components/model-selector.d.ts +8 -1
  1011. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1012. package/dist/modes/interactive/components/model-selector.js +41 -7
  1013. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1014. package/dist/modes/interactive/components/settings-selector.d.ts +1 -2
  1015. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1016. package/dist/modes/interactive/components/settings-selector.js +9 -86
  1017. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1018. package/dist/modes/interactive/components/thinking-selector.d.ts +8 -1
  1019. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1020. package/dist/modes/interactive/components/thinking-selector.js +48 -17
  1021. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1022. package/dist/modes/interactive/interactive-mode.d.ts +3 -7
  1023. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1024. package/dist/modes/interactive/interactive-mode.js +137 -146
  1025. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1026. package/dist/modes/print-mode.d.ts.map +1 -1
  1027. package/dist/modes/print-mode.js +11 -0
  1028. package/dist/modes/print-mode.js.map +1 -1
  1029. package/dist/package-manager-cli.d.ts.map +1 -1
  1030. package/dist/package-manager-cli.js +27 -5
  1031. package/dist/package-manager-cli.js.map +1 -1
  1032. package/dist/server/attach.d.ts +56 -0
  1033. package/dist/server/attach.d.ts.map +1 -0
  1034. package/dist/server/attach.js +130 -0
  1035. package/dist/server/attach.js.map +1 -0
  1036. package/dist/server/extension-ops.d.ts +40 -0
  1037. package/dist/server/extension-ops.d.ts.map +1 -0
  1038. package/dist/server/extension-ops.js +146 -0
  1039. package/dist/server/extension-ops.js.map +1 -0
  1040. package/dist/server/pi-server-service.d.ts +85 -0
  1041. package/dist/server/pi-server-service.d.ts.map +1 -0
  1042. package/dist/server/pi-server-service.js +213 -0
  1043. package/dist/server/pi-server-service.js.map +1 -0
  1044. package/dist/server/scheduler-tick.d.ts +32 -0
  1045. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1046. package/dist/server/scheduler-tick.js +47 -0
  1047. package/dist/server/scheduler-tick.js.map +1 -0
  1048. package/dist/server/serve.d.ts +25 -0
  1049. package/dist/server/serve.d.ts.map +1 -0
  1050. package/dist/server/serve.js +83 -0
  1051. package/dist/server/serve.js.map +1 -0
  1052. package/dist/server/transcript.d.ts +38 -0
  1053. package/dist/server/transcript.d.ts.map +1 -0
  1054. package/dist/server/transcript.js +176 -0
  1055. package/dist/server/transcript.js.map +1 -0
  1056. package/dist/skills/skill-creator/SKILL.md +90 -0
  1057. package/dist/telegram/api.d.ts +75 -0
  1058. package/dist/telegram/api.d.ts.map +1 -0
  1059. package/dist/telegram/api.js +104 -0
  1060. package/dist/telegram/api.js.map +1 -0
  1061. package/dist/telegram/bridge.d.ts +85 -0
  1062. package/dist/telegram/bridge.d.ts.map +1 -0
  1063. package/dist/telegram/bridge.js +182 -0
  1064. package/dist/telegram/bridge.js.map +1 -0
  1065. package/dist/telegram/journal.d.ts +67 -0
  1066. package/dist/telegram/journal.d.ts.map +1 -0
  1067. package/dist/telegram/journal.js +119 -0
  1068. package/dist/telegram/journal.js.map +1 -0
  1069. package/dist/telegram/servidor.d.ts +15 -0
  1070. package/dist/telegram/servidor.d.ts.map +1 -0
  1071. package/dist/telegram/servidor.js +74 -0
  1072. package/dist/telegram/servidor.js.map +1 -0
  1073. package/dist/utils/shell.d.ts +11 -0
  1074. package/dist/utils/shell.d.ts.map +1 -1
  1075. package/dist/utils/shell.js +11 -0
  1076. package/dist/utils/shell.js.map +1 -1
  1077. package/dist/utils/version-check.d.ts.map +1 -1
  1078. package/dist/utils/version-check.js +29 -1
  1079. package/dist/utils/version-check.js.map +1 -1
  1080. package/docs/compaction.md +10 -10
  1081. package/docs/compliance.md +241 -0
  1082. package/docs/containerization.md +24 -24
  1083. package/docs/custom-provider.md +10 -10
  1084. package/docs/development.md +47 -10
  1085. package/docs/docs.json +14 -2
  1086. package/docs/environment-variables.md +20 -17
  1087. package/docs/extensions.md +51 -49
  1088. package/docs/index.md +15 -21
  1089. package/docs/json.md +3 -3
  1090. package/docs/keybindings.md +5 -5
  1091. package/docs/llama-cpp.md +7 -7
  1092. package/docs/models.md +12 -12
  1093. package/docs/packages.md +45 -45
  1094. package/docs/prompt-templates.md +5 -5
  1095. package/docs/providers.md +12 -12
  1096. package/docs/quickstart.md +39 -39
  1097. package/docs/rpc.md +12 -12
  1098. package/docs/sdk.md +38 -38
  1099. package/docs/security.md +26 -21
  1100. package/docs/session-format.md +7 -7
  1101. package/docs/sessions.md +14 -14
  1102. package/docs/settings.md +45 -20
  1103. package/docs/shell-aliases.md +2 -2
  1104. package/docs/skills.md +11 -11
  1105. package/docs/terminal-setup.md +14 -14
  1106. package/docs/termux.md +7 -7
  1107. package/docs/themes.md +11 -11
  1108. package/docs/tmux.md +4 -4
  1109. package/docs/tui.md +3 -3
  1110. package/docs/usage.md +54 -54
  1111. package/docs/windows.md +2 -2
  1112. package/examples/sdk/12-full-control.ts +9 -0
  1113. package/npm-shrinkwrap.json +35 -251
  1114. package/package.json +10 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registro-denso.js","sourceRoot":"","sources":["../../../src/core/compactar/registro-denso.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Registro denso: reescribir el historial que se va a compactar como una lista\n * de HECHOS extraídos literalmente de los turnos, en lugar de un resumen en\n * prosa escrito por el modelo.\n *\n * Por qué existe esto:\n *\n * 1. La prosa es cara por token. Un resumen de 4.000 caracteres de la sesión\n * real guardada en `test/fixtures/before-compaction.jsonl` gasta la mayor\n * parte de su presupuesto en conectores (\"The user wants to...\", \"Note\n * that...\") que no se pueden verificar contra nada.\n * 2. La prosa PUEDE INVENTAR. Un resumen generado por un modelo puede afirmar\n * que una prueba pasó cuando no pasó, y a partir de ese momento la sesión\n * entera trabaja sobre una mentira que nadie puede rastrear. Aquí cada línea\n * del registro sale de un turno concreto y `verificarProcedencia()` lo\n * comprueba carácter a carácter contra el mensaje de origen.\n * 3. Comprimir lo ya comprimido degrada en cascada: pedirle al modelo que\n * resuma su propio resumen pierde algo en cada vuelta. Aquí el registro\n * anterior se ABSORBE tal cual (`absorberRegistro`), no se vuelve a resumir.\n *\n * El precio, dicho claramente: no hay síntesis. Este registro no escribe\n * \"decidimos usar bcrypt porque sha1 es inseguro\"; escribe la petición del\n * usuario y el comando que se ejecutó, literales. A cambio, no puede mentir.\n */\n\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\n\n// ============================================================================\n// Tipos\n// ============================================================================\n\n/**\n * Clase de hecho. El orden importa poco; lo que importa es el peso (ver PESO),\n * que decide qué se cae primero cuando no hay presupuesto.\n */\nexport type ClaseHecho =\n\t/** Petición del usuario, literal. */\n\t| \"pet\"\n\t/** Comando de shell ejecutado. */\n\t| \"cmd\"\n\t/** Primera línea de la salida de una herramienta o comando. */\n\t| \"sal\"\n\t/** Resultado de herramienta marcado como error, o comando con exit != 0. */\n\t| \"err\"\n\t/** Fichero leído. */\n\t| \"lee\"\n\t/** Fichero escrito entero. */\n\t| \"esc\"\n\t/** Fichero editado. */\n\t| \"ed\"\n\t/** Otra herramienta invocada. */\n\t| \"her\"\n\t/** Texto del asistente (primera línea). */\n\t| \"dijo\";\n\nexport interface Hecho {\n\t/** Índice del mensaje de origen dentro del lote que se está comprimiendo. */\n\tturno: number;\n\tclase: ClaseHecho;\n\t/**\n\t * Texto literal. INVARIANTE: `nucleo(texto)` es siempre una subcadena de\n\t * `serializarTurno(mensajes[turno])` cuando `heredado` es falso. De ahí sale\n\t * la puerta de procedencia.\n\t */\n\ttexto: string;\n\t/**\n\t * Verdadero si el hecho viene de un registro anterior absorbido. Su\n\t * procedencia se fijó en la compactación que lo produjo; no se puede\n\t * comprobar contra los mensajes de ESTE lote (que ya no los contienen).\n\t */\n\theredado?: boolean;\n}\n\n/** Peso: más alto = se conserva más tiempo cuando falta presupuesto. */\nconst PESO: Record<ClaseHecho, number> = {\n\terr: 100,\n\tpet: 95,\n\ted: 90,\n\tesc: 90,\n\tcmd: 80,\n\tsal: 50,\n\ther: 40,\n\tlee: 30,\n\tdijo: 20,\n};\n\n/** Marca de truncado. Se quita antes de comparar con el origen (ver `nucleo`). */\nconst ELIPSIS = \"…\";\n\nconst MARCA_ABRE = \"<registro-denso>\";\nconst MARCA_CIERRA = \"</registro-denso>\";\n\n/**\n * Aviso de recorte de un registro YA ESCRITO. Solo se lee el total; el detalle\n * por clases describe la vuelta en que se escribió y no se reconstruye.\n */\nconst RE_OMITIDOS = /^\\[omitidos (\\d+) hechos? por presupuesto:/;\n\n/** Texto de un hecho sin la marca de truncado: lo que debe estar en el origen. */\nexport function nucleo(texto: string): string {\n\treturn texto.endsWith(ELIPSIS) ? texto.slice(0, -ELIPSIS.length) : texto;\n}\n\n// ============================================================================\n// Normalización\n// ============================================================================\n\n/**\n * Colapsa todos los espacios en blanco a un solo espacio y recorta.\n *\n * Es idempotente y distributiva sobre el salto de línea\n * (`aplanar(a + \"\\n\" + b) === aplanar(a) + \" \" + aplanar(b)` con a y b no\n * vacíos), que es justo lo que hace que \"primera línea aplanada\" siga siendo\n * un prefijo del turno aplanado entero. Sin esa propiedad la puerta de\n * procedencia daría falsos negativos en cuanto un comando llevara un salto.\n */\nfunction aplanar(texto: string): string {\n\treturn texto.replace(/\\s+/g, \" \").trim();\n}\n\nfunction recortar(texto: string, maxChars: number): string {\n\tconst plano = aplanar(texto);\n\tif (plano.length <= maxChars) return plano;\n\treturn plano.slice(0, maxChars) + ELIPSIS;\n}\n\n/** Texto de un contenido que puede ser cadena o bloques. */\nfunction textoDeContenido(contenido: unknown): string {\n\tif (typeof contenido === \"string\") return contenido;\n\tif (!Array.isArray(contenido)) return \"\";\n\tconst partes: string[] = [];\n\tfor (const bloque of contenido) {\n\t\tif (bloque && typeof bloque === \"object\" && (bloque as { type?: string }).type === \"text\") {\n\t\t\tconst t = (bloque as { text?: string }).text;\n\t\t\tif (typeof t === \"string\") partes.push(t);\n\t\t}\n\t}\n\treturn partes.join(\"\\n\");\n}\n\n/**\n * Texto canónico de un turno: TODO lo que se puede citar de él, aplanado.\n *\n * Incluye los argumentos de las tool calls dos veces (el JSON completo y cada\n * valor de cadena por separado) a propósito: `JSON.stringify` escapa los saltos\n * de línea, así que un comando multilínea no aparecería como subcadena del\n * JSON. Sin el valor crudo, `verificarProcedencia` rechazaría hechos correctos.\n */\nexport function serializarTurno(mensaje: AgentMessage): string {\n\tconst partes: string[] = [];\n\tconst msg = mensaje;\n\n\tswitch (msg.role) {\n\t\tcase \"user\":\n\t\tcase \"custom\":\n\t\t\tpartes.push(textoDeContenido(msg.content));\n\t\t\tbreak;\n\t\tcase \"toolResult\":\n\t\t\tpartes.push(textoDeContenido(msg.content));\n\t\t\tpartes.push(msg.toolName);\n\t\t\tbreak;\n\t\tcase \"assistant\": {\n\t\t\tfor (const bloque of msg.content) {\n\t\t\t\tif (bloque.type === \"text\") partes.push(bloque.text);\n\t\t\t\telse if (bloque.type === \"thinking\") partes.push(bloque.thinking);\n\t\t\t\telse if (bloque.type === \"toolCall\") {\n\t\t\t\t\tpartes.push(bloque.name);\n\t\t\t\t\tconst args = bloque.arguments as Record<string, unknown> | undefined;\n\t\t\t\t\tif (args) {\n\t\t\t\t\t\tpartes.push(JSON.stringify(args));\n\t\t\t\t\t\tfor (const valor of Object.values(args)) {\n\t\t\t\t\t\t\tif (typeof valor === \"string\") partes.push(valor);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"bashExecution\":\n\t\t\tpartes.push(msg.command);\n\t\t\tpartes.push(msg.output);\n\t\t\tbreak;\n\t\tcase \"branchSummary\":\n\t\tcase \"compactionSummary\":\n\t\t\tpartes.push(msg.summary);\n\t\t\tbreak;\n\t}\n\n\treturn aplanar(partes.join(\"\\n\"));\n}\n\n// ============================================================================\n// Extracción\n// ============================================================================\n\n// 160 y no 300: medido sobre la sesión real de `before-compaction.jsonl`, las\n// 12 peticiones del usuario a 300 caracteres se comían 900 de los 1073 tokens\n// del presupuesto y dejaban fuera 247 hechos. La petición recortada sigue\n// diciendo qué se pidió; las 140 caracteres de más solo decían cómo.\nconst MAX_PET = 160;\nconst MAX_CMD = 200;\nconst MAX_SAL = 160;\nconst MAX_DIJO = 140;\n/** Por encima de esto, la salida de una herramienta es contenido, no estado. */\nconst MAX_ESTADO = 100;\n\n/** Primera línea no vacía de un texto. */\nfunction primeraLinea(texto: string): string {\n\tfor (const linea of texto.split(\"\\n\")) {\n\t\tif (linea.trim().length > 0) return linea;\n\t}\n\treturn \"\";\n}\n\nfunction anadir(hechos: Hecho[], turno: number, clase: ClaseHecho, crudo: string, maxChars: number): void {\n\tconst texto = recortar(crudo, maxChars);\n\tif (nucleo(texto).length === 0) return;\n\thechos.push({ turno, clase, texto });\n}\n\nfunction hechosDeToolCall(hechos: Hecho[], turno: number, nombre: string, args: Record<string, unknown>): void {\n\tconst ruta = typeof args.path === \"string\" ? args.path : undefined;\n\tswitch (nombre) {\n\t\tcase \"read\":\n\t\t\tif (ruta) anadir(hechos, turno, \"lee\", ruta, MAX_CMD);\n\t\t\treturn;\n\t\tcase \"write\":\n\t\t\tif (ruta) anadir(hechos, turno, \"esc\", ruta, MAX_CMD);\n\t\t\treturn;\n\t\tcase \"edit\":\n\t\t\tif (ruta) anadir(hechos, turno, \"ed\", ruta, MAX_CMD);\n\t\t\treturn;\n\t\tcase \"bash\":\n\t\t\tif (typeof args.command === \"string\") anadir(hechos, turno, \"cmd\", args.command, MAX_CMD);\n\t\t\treturn;\n\t\tdefault: {\n\t\t\t// Para el resto de herramientas guardamos el nombre y el primer\n\t\t\t// argumento de cadena: suficiente para saber QUÉ se hizo sin pagar el\n\t\t\t// JSON entero. El nombre solo no distingue dos búsquedas distintas.\n\t\t\tconst primerValor = Object.values(args).find((v) => typeof v === \"string\") as string | undefined;\n\t\t\tanadir(hechos, turno, \"her\", primerValor ? `${nombre} ${primerValor}` : nombre, MAX_CMD);\n\t\t}\n\t}\n}\n\n/**\n * Extrae los hechos de un lote de mensajes.\n *\n * Devuelve `[]` cuando NO HAY nada que extraer (lote vacío, o solo mensajes sin\n * contenido citable). Eso es distinto de \"no puedo\": aquí siempre se puede,\n * porque no hay ni red ni modelo de por medio. Quien decide qué hacer con un\n * registro vacío es `compactarADenso`, que en ese caso devuelve `null` y deja\n * que la compactación en prosa haga su trabajo.\n */\nexport function extraerHechos(mensajes: AgentMessage[]): Hecho[] {\n\tconst hechos: Hecho[] = [];\n\n\tfor (let turno = 0; turno < mensajes.length; turno++) {\n\t\tconst msg = mensajes[turno];\n\t\tswitch (msg.role) {\n\t\t\tcase \"user\":\n\t\t\t\tanadir(hechos, turno, \"pet\", textoDeContenido(msg.content), MAX_PET);\n\t\t\t\tbreak;\n\t\t\tcase \"assistant\": {\n\t\t\t\tfor (const bloque of msg.content) {\n\t\t\t\t\tif (bloque.type === \"text\") {\n\t\t\t\t\t\tanadir(hechos, turno, \"dijo\", primeraLinea(bloque.text), MAX_DIJO);\n\t\t\t\t\t} else if (bloque.type === \"toolCall\") {\n\t\t\t\t\t\thechosDeToolCall(hechos, turno, bloque.name, (bloque.arguments as Record<string, unknown>) ?? {});\n\t\t\t\t\t}\n\t\t\t\t\t// El pensamiento no entra: no es un hecho, es deliberación.\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolResult\": {\n\t\t\t\tconst primera = primeraLinea(textoDeContenido(msg.content));\n\t\t\t\tif (msg.isError === true) {\n\t\t\t\t\tanadir(hechos, turno, \"err\", primera, MAX_SAL);\n\t\t\t\t} else if (aplanar(primera).length <= MAX_ESTADO) {\n\t\t\t\t\t// Solo la salida CORTA es un hecho (\"Switched to a new branch\n\t\t\t\t\t// 'refactor'\", \"(no output)\"). La primera línea de un `read` es la\n\t\t\t\t\t// primera línea del fichero: en la sesión real eran 3.545 tokens de\n\t\t\t\t\t// `import { ... }` que no dicen nada de lo que pasó, y la llamada que\n\t\t\t\t\t// los produjo ya está registrada.\n\t\t\t\t\tanadir(hechos, turno, \"sal\", primera, MAX_SAL);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"bashExecution\": {\n\t\t\t\tanadir(hechos, turno, \"cmd\", msg.command, MAX_CMD);\n\t\t\t\tconst fallo = typeof msg.exitCode === \"number\" && msg.exitCode !== 0;\n\t\t\t\tanadir(hechos, turno, fallo ? \"err\" : \"sal\", primeraLinea(msg.output), MAX_SAL);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"compactionSummary\":\n\t\t\tcase \"branchSummary\": {\n\t\t\t\t// Cascada: un resumen anterior que YA es un registro denso se\n\t\t\t\t// absorbe línea a línea. Si es prosa (compactación anterior a este\n\t\t\t\t// módulo, o de una extensión), se guarda su primera línea y nada\n\t\t\t\t// más: no vamos a fingir que sabemos de dónde salió cada frase.\n\t\t\t\tconst previos = absorberRegistro(msg.summary);\n\t\t\t\tif (previos) {\n\t\t\t\t\thechos.push(...previos);\n\t\t\t\t} else {\n\t\t\t\t\tanadir(hechos, turno, \"dijo\", primeraLinea(msg.summary), MAX_DIJO);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"custom\":\n\t\t\t\tanadir(hechos, turno, \"dijo\", primeraLinea(textoDeContenido(msg.content)), MAX_DIJO);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn hechos;\n}\n\n// ============================================================================\n// Formato y presupuesto\n// ============================================================================\n\n/** Estimación de tokens con la misma heurística que usa la compactación (chars/4). */\nexport function tokensDeTexto(texto: string): number {\n\treturn Math.ceil(texto.length / 4);\n}\n\n/**\n * Marca de raíz abreviada. La abreviatura vive solo en el texto formateado y\n * `absorberRegistro` la deshace, así que `Hecho.texto` sigue siendo literal en\n * memoria.\n *\n * Que sea reversible NO es gratis: depende de que ninguna línea del bloque\n * contenga este carácter por su cuenta, y `»` es comilla latina corriente en\n * español. Lo garantiza la guardia de `raizComun`, no el carácter en sí.\n */\nconst MARCA_RAIZ = \"»\";\n\n/**\n * Directorio cuya repetición más caracteres ahorra si se saca a una cabecera.\n *\n * Se parte del prefijo común de las rutas de FICHERO (`lee`/`esc`/`ed`, que son\n * homogéneas) y se prueban también sus directorios padre, quedándose con el que\n * más ahorra contando las apariciones en TODAS las líneas. Los padres importan:\n * en la sesión real de `before-compaction.jsonl` las rutas de fichero comparten\n * `…/pi-mono/packages/coding-agent/`, pero los 59 comandos empiezan por\n * `cd …/pi-mono && `, y solo el padre corto sirve para los dos.\n *\n * Primer intento: sacar el prefijo común de TODAS las rutas absolutas del lote.\n * Salía \"\" siempre — basta un `/dev/null` o un `/tmp/x` sueltos para que el\n * prefijo común se quede en \"/\" — y la abreviatura quedó de adorno, sin que\n * ninguna prueba lo notara. Lo cazó romper la función a propósito y ver que la\n * salida no cambiaba ni un byte.\n *\n * Devuelve \"\" cuando no compensa.\n */\nfunction raizComun(hechos: Hecho[]): string {\n\t// Si UN solo hecho lleva ya la marca, no hay abreviatura posible para NINGUNO:\n\t// `absorberRegistro` expande todas las marcas de la línea, así que una `»`\n\t// que venía en el texto literal se convertiría en la raíz. Con la petición\n\t// «lee el fichero \"main.ts\" y dime »qué hace» el hecho volvía de la cascada\n\t// como «... y dime /Users/x/proy/qué hace»: texto FABRICADO, y encima marcado\n\t// como heredado, que es justo lo que `verificarProcedencia` no comprueba.\n\t// La guardia por línea que había en `abreviar` no bastaba: protegía la línea\n\t// al escribir y la expansión al leer no la respetaba.\n\tif (hechos.some((h) => h.texto.includes(MARCA_RAIZ))) return \"\";\n\n\tconst rutas = hechos.filter((h) => h.clase === \"lee\" || h.clase === \"esc\" || h.clase === \"ed\").map((h) => h.texto);\n\tif (rutas.length < 3) return \"\";\n\n\tlet prefijo = rutas[0];\n\tfor (const ruta of rutas) {\n\t\tlet i = 0;\n\t\twhile (i < prefijo.length && i < ruta.length && prefijo[i] === ruta[i]) i++;\n\t\tprefijo = prefijo.slice(0, i);\n\t\tif (prefijo.length === 0) return \"\";\n\t}\n\n\tconst candidatos: string[] = [];\n\tfor (let corte = prefijo.lastIndexOf(\"/\"); corte > 0; corte = prefijo.lastIndexOf(\"/\", corte - 1)) {\n\t\tconst candidato = prefijo.slice(0, corte + 1);\n\t\tif (candidato.length >= 8) candidatos.push(candidato);\n\t}\n\n\tlet mejor = \"\";\n\tlet mejorAhorro = 0;\n\tfor (const candidato of candidatos) {\n\t\tlet apariciones = 0;\n\t\tfor (const hecho of hechos) apariciones += hecho.texto.split(candidato).length - 1;\n\t\t// Cada aparición se sustituye por un carácter, y la cabecera se paga una vez.\n\t\tconst ahorro = apariciones * (candidato.length - MARCA_RAIZ.length) - (candidato.length + 7);\n\t\tif (ahorro > mejorAhorro) {\n\t\t\tmejorAhorro = ahorro;\n\t\t\tmejor = candidato;\n\t\t}\n\t}\n\treturn mejor;\n}\n\n/**\n * Sustituye la raíz por su marca. `raizComun` ya ha garantizado que ningún\n * hecho del lote contiene la marca, así que la expansión de vuelta no puede ser\n * ambigua. La guardia por línea que había aquí daba esa garantía por línea y no\n * por bloque, que es donde se rompía (ver `raizComun`).\n */\nfunction abreviar(texto: string, raiz: string): string {\n\tif (!raiz) return texto;\n\treturn texto.split(raiz).join(MARCA_RAIZ);\n}\n\nfunction lineaDe(hecho: Hecho, raiz: string): string {\n\treturn `T${hecho.turno}${hecho.heredado ? \"*\" : \"\"} ${hecho.clase} ${abreviar(hecho.texto, raiz)}`;\n}\n\n/**\n * Quita duplicados exactos (misma clase y mismo texto).\n *\n * Ante un empate se conserva el que SÍ se puede verificar. En la cascada los\n * heredados van delante (`reescribirADenso` los antepone), así que \"conservar el\n * primero\" degradaba un hecho comprobable en uno que nadie puede comprobar: con\n * `resumenAnterior` conteniendo `T0 pet sigue` y un turno nuevo que vuelve a\n * decir «sigue» —cosa que pasa a diario— el registro se quedaba con la línea\n * heredada, y `verificarProcedencia` la devolvía por `heredados`, no por\n * `validos`. La puerta de procedencia se iba vaciando sola a cada compactación.\n */\nfunction deduplicar(hechos: Hecho[]): Hecho[] {\n\tconst posicion = new Map<string, number>();\n\tconst salida: Hecho[] = [];\n\tfor (const hecho of hechos) {\n\t\tconst clave = `${hecho.clase} ${hecho.texto}`;\n\t\tconst previa = posicion.get(clave);\n\t\tif (previa === undefined) {\n\t\t\tposicion.set(clave, salida.length);\n\t\t\tsalida.push(hecho);\n\t\t\tcontinue;\n\t\t}\n\t\t// Mismo texto: si el que guardamos es heredado y este no, se cambia por él.\n\t\t// Solo cambia el turno (y el `*`), nunca el texto, así que ninguna línea\n\t\t// aparece ni desaparece del registro por esto.\n\t\tif (salida[previa].heredado && !hecho.heredado) salida[previa] = hecho;\n\t}\n\treturn salida;\n}\n\nexport interface RegistroFormateado {\n\ttexto: string;\n\tincluidos: Hecho[];\n\tomitidos: Hecho[];\n}\n\n/**\n * Formatea los hechos como bloque de registro, respetando un presupuesto de\n * tokens.\n *\n * Cuando no caben todos se caen primero los de menor peso (lecturas, prosa del\n * asistente) y NUNCA en silencio: la última línea dice cuántos se han quitado y\n * de qué clase. Un registro recortado que no lo dijera se leería como \"esto es\n * todo lo que pasó\", que es exactamente el fallo que se lee como éxito.\n *\n * `omitidosPrevios` es la cuenta que YA declaraba el registro anterior de la\n * cascada, y se suma al total. Sin ese arrastre el aviso duraba una sola vuelta:\n * medido, la 1ª compactación decía \"[omitidos 49 hechos]\" y la 2ª —con\n * presupuesto de sobra, sin nada nuevo que quitar— salía sin aviso ninguno. El\n * registro volvía a leerse como \"esto es todo lo que pasó\" con 49 hechos ya\n * perdidos, que es justo lo que este aviso existe para impedir.\n */\nexport function formatearRegistro(hechos: Hecho[], presupuestoTokens: number, omitidosPrevios = 0): RegistroFormateado {\n\tconst unicos = deduplicar(hechos);\n\tconst raiz = raizComun(unicos);\n\tconst cabecera = raiz ? `#raiz ${raiz}\\n` : \"\";\n\n\t// Orden de sacrificio: peso ascendente y, a igualdad, los más antiguos primero.\n\tconst porSacrificar = [...unicos].sort((a, b) => PESO[a.clase] - PESO[b.clase] || a.turno - b.turno);\n\n\tconst fijos = tokensDeTexto(`${MARCA_ABRE}\\n${cabecera}${MARCA_CIERRA}\\n`);\n\tconst fuera = new Set<Hecho>();\n\n\t// El aviso de recorte se cuenta con su TEXTO REAL, no con un hueco de tamaño\n\t// fijo: con muchas clases omitidas mide 80 caracteres y no 45, y esa\n\t// diferencia se comió el presupuesto por un token en la primera versión.\n\tconst avisoDe = (omitidos: Hecho[]): string => {\n\t\tconst total = omitidos.length + omitidosPrevios;\n\t\tif (total === 0) return \"\";\n\t\tconst porClase = new Map<ClaseHecho, number>();\n\t\tfor (const h of omitidos) porClase.set(h.clase, (porClase.get(h.clase) ?? 0) + 1);\n\t\tconst detalle = [...porClase.entries()].sort((a, b) => b[1] - a[1]).map(([clase, n]) => `${clase} x${n}`);\n\t\t// El arrastre va como una entrada más del detalle, no como una frase\n\t\t// aparte: así el total de cabecera lo vuelve a leer `omitidosDeRegistro`\n\t\t// en la vuelta siguiente sin sumar dos veces lo mismo.\n\t\tif (omitidosPrevios > 0) detalle.push(`${omitidosPrevios} en compactaciones anteriores`);\n\t\treturn `[omitidos ${total} hechos por presupuesto: ${detalle.join(\", \")}]`;\n\t};\n\n\tlet incluidos = unicos;\n\tlet omitidos: Hecho[] = [];\n\tlet costeLineas = 0;\n\tfor (const h of unicos) costeLineas += tokensDeTexto(`${lineaDe(h, raiz)}\\n`);\n\n\tconst coste = () =>\n\t\tfijos + costeLineas + (omitidos.length + omitidosPrevios > 0 ? tokensDeTexto(`${avisoDe(omitidos)}\\n`) : 0);\n\n\tlet indice = 0;\n\twhile (coste() > presupuestoTokens && indice < porSacrificar.length) {\n\t\tconst victima = porSacrificar[indice];\n\t\tindice++;\n\t\tfuera.add(victima);\n\t\tcosteLineas -= tokensDeTexto(`${lineaDe(victima, raiz)}\\n`);\n\t\tomitidos = unicos.filter((h) => fuera.has(h));\n\t}\n\tincluidos = unicos.filter((h) => !fuera.has(h));\n\n\tconst lineas = incluidos.map((h) => lineaDe(h, raiz));\n\tif (raiz) lineas.unshift(`#raiz ${raiz}`);\n\tconst aviso = avisoDe(omitidos);\n\tif (aviso) lineas.push(aviso);\n\n\treturn {\n\t\ttexto: `${MARCA_ABRE}\\n${lineas.join(\"\\n\")}\\n${MARCA_CIERRA}`,\n\t\tincluidos,\n\t\tomitidos,\n\t};\n}\n\n// ============================================================================\n// Absorción (cascada)\n// ============================================================================\n\nconst RE_LINEA = /^T(\\d+)(\\*?) ([a-z]{2,4}) (.*)$/;\n\n/**\n * Límites `[abre, cierra]` del bloque de registro dentro de un texto, o `null`\n * si no hay bloque.\n *\n * Las marcas se buscan como LÍNEA COMPLETA, y la de apertura es la ÚLTIMA.\n * Buscarlas como subcadena (y la primera) leía el bloque equivocado en dos casos\n * reales:\n *\n * (a) El resumen persistido es «prosa + registro», y en la SIGUIENTE\n * compactación upstream se lo pasa entero al modelo dentro de\n * <previous-summary> pidiéndole un resumen actualizado. Si el modelo copia el\n * bloque en su prosa, esa copia va ANTES del registro de verdad y ganaba: se\n * heredaban hechos escritos por el modelo, que es exactamente lo que este\n * módulo existe para impedir — y como salen por `heredados`,\n * `verificarProcedencia` no los mira.\n * (b) Un hecho cuyo texto contiene \"</registro-denso>\" (basta con que el usuario\n * lo pegue) cerraba el bloque en mitad de la lista y las líneas siguientes se\n * perdían EN SILENCIO. Con 3 hechos se absorbía 1.\n *\n * Una línea de hecho siempre empieza por \"T<n> <clase> \", así que nunca es igual\n * a una marca entera: la comparación por línea las distingue sin heurística.\n */\nfunction localizarBloque(lineas: string[]): [number, number] | null {\n\tlet abre = -1;\n\tfor (let i = lineas.length - 1; i >= 0; i--) {\n\t\tif (lineas[i].trim() === MARCA_ABRE) {\n\t\t\tabre = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (abre < 0) return null;\n\tfor (let i = abre + 1; i < lineas.length; i++) {\n\t\tif (lineas[i].trim() === MARCA_CIERRA) return [abre, i];\n\t}\n\treturn null;\n}\n\n/**\n * Cuántos hechos declara haber perdido un registro YA ESCRITO. Devuelve 0 si el\n * texto no es un registro o si el registro no declara ninguna pérdida.\n *\n * Existe porque `absorberRegistro` solo recupera las líneas de hecho: el aviso\n * de recorte no es un hecho y se quedaba fuera, así que la cuenta de lo perdido\n * moría en la vuelta siguiente de la cascada. Ver `formatearRegistro`.\n */\nexport function omitidosDeRegistro(texto: string): number {\n\tconst lineas = texto.split(\"\\n\");\n\tconst limites = localizarBloque(lineas);\n\tif (!limites) return 0;\n\tfor (const linea of lineas.slice(limites[0] + 1, limites[1])) {\n\t\tconst m = linea.trim().match(RE_OMITIDOS);\n\t\tif (m) return Number.parseInt(m[1], 10);\n\t}\n\treturn 0;\n}\n\n/**\n * Lee un bloque de registro denso de un texto.\n *\n * Tres estados, no dos:\n * - `null` → NO ES un registro denso (prosa, o texto sin el bloque). \"No lo he\n * mirado\" no aplica aquí, pero \"esto no es lo mío\" sí, y no se puede\n * confundir con \"el registro estaba vacío\".\n * - `[]` → es un registro denso y NO TIENE hechos.\n * - `[...]` → los hechos, marcados como heredados.\n */\nexport function absorberRegistro(texto: string): Hecho[] | null {\n\tconst lineas = texto.split(\"\\n\");\n\tconst limites = localizarBloque(lineas);\n\tif (!limites) return null;\n\tconst [abre, cierra] = limites;\n\n\tconst hechos: Hecho[] = [];\n\tlet raiz = \"\";\n\tfor (const linea of lineas.slice(abre + 1, cierra)) {\n\t\tconst recortada = linea.trim();\n\t\tif (recortada.startsWith(\"#raiz \")) {\n\t\t\traiz = recortada.slice(\"#raiz \".length);\n\t\t\tcontinue;\n\t\t}\n\t\tconst m = recortada.match(RE_LINEA);\n\t\tif (!m) continue;\n\t\t// Se deshace la abreviatura AQUÍ: en memoria `texto` vuelve a ser literal,\n\t\t// que es lo que hace verificable un hecho heredado el día que alguien lo\n\t\t// compare contra su sesión de origen.\n\t\tconst bruto = m[4];\n\t\thechos.push({\n\t\t\tturno: Number.parseInt(m[1], 10),\n\t\t\tclase: m[3] as ClaseHecho,\n\t\t\ttexto: raiz ? bruto.split(MARCA_RAIZ).join(raiz) : bruto,\n\t\t\theredado: true,\n\t\t});\n\t}\n\treturn hechos;\n}\n\n// ============================================================================\n// Procedencia\n// ============================================================================\n\nexport interface Procedencia {\n\t/** Hechos cuyo texto aparece literalmente en su turno de origen. */\n\tvalidos: Hecho[];\n\t/** Hechos que NO aparecen en su turno, o cuyo turno no existe. Inventados. */\n\tinvalidos: Hecho[];\n\t/**\n\t * Hechos heredados de un registro anterior. NO son inválidos: su origen está\n\t * en un lote que ya no tenemos delante. Se cuentan aparte a propósito, para\n\t * no leer \"no lo puedo comprobar aquí\" como \"es válido\".\n\t */\n\theredados: Hecho[];\n}\n\n/**\n * Comprueba que cada hecho se puede rastrear a su turno.\n *\n * Esta es la puerta que impide que el registro invente: un hecho cuyo texto no\n * esté, carácter a carácter, en el mensaje que dice ser su origen, sale por\n * `invalidos`.\n */\nexport function verificarProcedencia(hechos: Hecho[], mensajes: AgentMessage[]): Procedencia {\n\tconst cache = new Map<number, string>();\n\tconst validos: Hecho[] = [];\n\tconst invalidos: Hecho[] = [];\n\tconst heredados: Hecho[] = [];\n\n\tfor (const hecho of hechos) {\n\t\tif (hecho.heredado) {\n\t\t\theredados.push(hecho);\n\t\t\tcontinue;\n\t\t}\n\t\tif (hecho.turno < 0 || hecho.turno >= mensajes.length) {\n\t\t\tinvalidos.push(hecho);\n\t\t\tcontinue;\n\t\t}\n\t\tlet canonico = cache.get(hecho.turno);\n\t\tif (canonico === undefined) {\n\t\t\tcanonico = serializarTurno(mensajes[hecho.turno]);\n\t\t\tcache.set(hecho.turno, canonico);\n\t\t}\n\t\tconst buscado = nucleo(hecho.texto);\n\t\t// Los hechos \"her\" llevan \"<nombre de herramienta> <primer argumento>\", y\n\t\t// esos dos trozos están en el turno pero no pegados. Se parte por el PRIMER\n\t\t// espacio y SOLO por él: partir por todos convertía la puerta en \"cada\n\t\t// palabra aparece en algún sitio del turno\", que es lo contrario de\n\t\t// verificar. Con la versión anterior, el hecho inventado\n\t\t// \"her borra secreto produccion\" pasaba como VÁLIDO contra un turno que\n\t\t// decía \"busca deploy en produccion y borra el fichero secreto\".\n\t\tconst corte = hecho.clase === \"her\" ? buscado.indexOf(\" \") : -1;\n\t\tconst ok =\n\t\t\tcanonico.includes(buscado) ||\n\t\t\t(corte > 0 && canonico.includes(buscado.slice(0, corte)) && canonico.includes(buscado.slice(corte + 1)));\n\t\t(ok ? validos : invalidos).push(hecho);\n\t}\n\n\treturn { validos, invalidos, heredados };\n}\n\n// ============================================================================\n// Reescritura completa\n// ============================================================================\n\n/**\n * Construye el registro denso de un lote, absorbiendo el registro anterior si\n * lo hay.\n *\n * `resumenAnterior` es el resumen de la compactación previa. Si ya era un\n * registro denso, sus líneas se conservan TAL CUAL (no se re-resumen): esa es\n * la diferencia entre encadenar compactaciones y degradarlas en cascada.\n */\nexport function reescribirADenso(\n\tmensajes: AgentMessage[],\n\tpresupuestoTokens: number,\n\tresumenAnterior?: string,\n): RegistroFormateado {\n\tconst previos = resumenAnterior ? (absorberRegistro(resumenAnterior) ?? []) : [];\n\tconst nuevos = extraerHechos(mensajes);\n\t// Lo que el registro anterior YA declaraba perdido se arrastra: esos hechos no\n\t// están en `previos` (nadie los escribió) y sin la cuenta nadie sabría que\n\t// faltan. Ver `formatearRegistro`.\n\tconst omitidosPrevios = resumenAnterior ? omitidosDeRegistro(resumenAnterior) : 0;\n\treturn formatearRegistro([...previos, ...nuevos], presupuestoTokens, omitidosPrevios);\n}\n"]}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Capturas de pantalla con las herramientas del sistema operativo.
3
+ *
4
+ * Es el CAMINO DE RESERVA. `computer_screenshot` captura primero por el motor,
5
+ * y no por gusto: en macOS la Grabación de pantalla se concede a una
6
+ * aplicación, y el helper del motor ya la tiene. Lo de aquí lo lanzaría nuestro
7
+ * proceso —node, dentro de la Terminal o del escritorio—, que es otra identidad
8
+ * y necesitaría su propio permiso, uno por cada sitio desde el que se use Ada.
9
+ * Comprobado: con el helper autorizado, `screencapture -x` desde node seguía
10
+ * devolviendo "could not create image from display".
11
+ *
12
+ * Sigue existiendo porque el motor captura una VENTANA, y a veces hace falta la
13
+ * pantalla entera — y porque en Linux y Windows no hay ese lío de identidades.
14
+ *
15
+ * (El motor ANTERIOR no tenía captura en absoluto: se publicó una tool que
16
+ * invocaba una acción inexistente y devolvía `unsupportedTool("screenshot")`.
17
+ * De ahí viene este fichero.)
18
+ */
19
+ export interface ResultadoCaptura {
20
+ /** PNG en base64, o `null` si no se pudo. */
21
+ imagen: string | null;
22
+ motivo?: string;
23
+ }
24
+ /**
25
+ * Captura la pantalla.
26
+ *
27
+ * Devuelve `null` con un motivo legible en vez de lanzar: que no haya una
28
+ * herramienta de captura instalada es un problema del entorno, no un fallo del
29
+ * agente, y merece un mensaje que diga qué instalar.
30
+ */
31
+ export declare function capturarPantalla(opciones?: {
32
+ plataforma?: string;
33
+ timeoutMs?: number;
34
+ }): Promise<ResultadoCaptura>;
35
+ //# sourceMappingURL=captura.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captura.d.ts","sourceRoot":"","sources":["../../../src/core/computer/captura.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAkEH,MAAM,WAAW,gBAAgB;IAChC,6CAA6C;IAC7C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACrC,QAAQ,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,OAAO,CAAC,gBAAgB,CAAC,CAsD3B","sourcesContent":["/**\n * Capturas de pantalla con las herramientas del sistema operativo.\n *\n * Es el CAMINO DE RESERVA. `computer_screenshot` captura primero por el motor,\n * y no por gusto: en macOS la Grabación de pantalla se concede a una\n * aplicación, y el helper del motor ya la tiene. Lo de aquí lo lanzaría nuestro\n * proceso —node, dentro de la Terminal o del escritorio—, que es otra identidad\n * y necesitaría su propio permiso, uno por cada sitio desde el que se use Ada.\n * Comprobado: con el helper autorizado, `screencapture -x` desde node seguía\n * devolviendo \"could not create image from display\".\n *\n * Sigue existiendo porque el motor captura una VENTANA, y a veces hace falta la\n * pantalla entera — y porque en Linux y Windows no hay ese lío de identidades.\n *\n * (El motor ANTERIOR no tenía captura en absoluto: se publicó una tool que\n * invocaba una acción inexistente y devolvía `unsupportedTool(\"screenshot\")`.\n * De ahí viene este fichero.)\n */\n\nimport { spawn } from \"node:child_process\";\nimport { mkdtempSync, readFileSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\n/** Qué comando captura la pantalla en cada sistema. */\nfunction comandoDeCaptura(plataforma: string, destino: string): Array<{ cmd: string; args: string[] }> {\n\tif (plataforma === \"darwin\") {\n\t\t// `-x` = sin sonido de obturador. Molestar al usuario con un clic cada\n\t\t// vez que el agente mira la pantalla sería insufrible.\n\t\treturn [{ cmd: \"screencapture\", args: [\"-x\", destino] }];\n\t}\n\tif (plataforma === \"win32\") {\n\t\treturn [\n\t\t\t{\n\t\t\t\tcmd: \"powershell\",\n\t\t\t\targs: [\n\t\t\t\t\t\"-NoProfile\",\n\t\t\t\t\t\"-Command\",\n\t\t\t\t\t`Add-Type -AssemblyName System.Windows.Forms,System.Drawing; ` +\n\t\t\t\t\t\t`$b=[System.Windows.Forms.SystemInformation]::VirtualScreen; ` +\n\t\t\t\t\t\t`$i=New-Object System.Drawing.Bitmap $b.Width,$b.Height; ` +\n\t\t\t\t\t\t`$g=[System.Drawing.Graphics]::FromImage($i); ` +\n\t\t\t\t\t\t`$g.CopyFromScreen($b.Location,[System.Drawing.Point]::Empty,$b.Size); ` +\n\t\t\t\t\t\t`$i.Save('${destino.replace(/\\\\/g, \"\\\\\\\\\")}',[System.Drawing.Imaging.ImageFormat]::Png)`,\n\t\t\t\t],\n\t\t\t},\n\t\t];\n\t}\n\t// Linux: se prueban en orden. Wayland primero, porque en una sesión Wayland\n\t// las herramientas de X11 fallan de forma confusa en vez de no existir.\n\treturn [\n\t\t{ cmd: \"grim\", args: [destino] },\n\t\t{ cmd: \"gnome-screenshot\", args: [\"-f\", destino] },\n\t\t{ cmd: \"spectacle\", args: [\"-b\", \"-n\", \"-o\", destino] },\n\t\t{ cmd: \"scrot\", args: [destino] },\n\t\t{ cmd: \"import\", args: [\"-window\", \"root\", destino] },\n\t];\n}\n\nfunction ejecutar(cmd: string, args: string[], timeoutMs: number): Promise<number> {\n\treturn new Promise((resolve) => {\n\t\tlet hijo: ReturnType<typeof spawn>;\n\t\ttry {\n\t\t\thijo = spawn(cmd, args, { stdio: \"ignore\" });\n\t\t} catch {\n\t\t\tresolve(-1);\n\t\t\treturn;\n\t\t}\n\t\tconst reloj = setTimeout(() => {\n\t\t\thijo.kill(\"SIGKILL\");\n\t\t\tresolve(124);\n\t\t}, timeoutMs);\n\t\thijo.on(\"error\", () => {\n\t\t\tclearTimeout(reloj);\n\t\t\tresolve(-1);\n\t\t});\n\t\thijo.on(\"close\", (c) => {\n\t\t\tclearTimeout(reloj);\n\t\t\tresolve(c ?? 0);\n\t\t});\n\t});\n}\n\nexport interface ResultadoCaptura {\n\t/** PNG en base64, o `null` si no se pudo. */\n\timagen: string | null;\n\tmotivo?: string;\n}\n\n/**\n * Captura la pantalla.\n *\n * Devuelve `null` con un motivo legible en vez de lanzar: que no haya una\n * herramienta de captura instalada es un problema del entorno, no un fallo del\n * agente, y merece un mensaje que diga qué instalar.\n */\nexport async function capturarPantalla(\n\topciones: { plataforma?: string; timeoutMs?: number } = {},\n): Promise<ResultadoCaptura> {\n\tconst plataforma = opciones.plataforma ?? process.platform;\n\tconst dir = mkdtempSync(join(tmpdir(), \"ada-captura-\"));\n\tconst destino = join(dir, \"pantalla.png\");\n\tconst intentos = comandoDeCaptura(plataforma, destino);\n\tconst fallidos: string[] = [];\n\n\ttry {\n\t\tfor (const { cmd, args } of intentos) {\n\t\t\tconst code = await ejecutar(cmd, args, opciones.timeoutMs ?? 20_000);\n\t\t\tif (code !== 0) {\n\t\t\t\tfallidos.push(cmd);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst datos = readFileSync(destino);\n\t\t\t\t// Un fichero vacío es un fallo silencioso: algunas herramientas\n\t\t\t\t// salen con 0 sin haber escrito nada cuando no hay display.\n\t\t\t\tif (datos.length === 0) {\n\t\t\t\t\tfallidos.push(`${cmd} (fichero vacío)`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\treturn { imagen: datos.toString(\"base64\") };\n\t\t\t} catch {\n\t\t\t\tfallidos.push(`${cmd} (sin fichero)`);\n\t\t\t}\n\t\t}\n\t\t// El motivo tiene que decir qué HACER. \"No se pudo capturar (probado:\n\t\t// screencapture)\" es cierto y no sirve de nada: en macOS la causa casi\n\t\t// siempre es el permiso de Grabación de pantalla, y sin nombrarlo el\n\t\t// agente se queda mirando. No se afirma como hecho —no lo hemos\n\t\t// comprobado desde aquí, y este fichero no habla con el motor a\n\t\t// propósito— pero sí se nombra lo primero que hay que mirar.\n\t\tconst queHacer =\n\t\t\tplataforma === \"linux\"\n\t\t\t\t? \"Instala una de estas: grim (Wayland), gnome-screenshot, spectacle, scrot o ImageMagick.\"\n\t\t\t\t: plataforma === \"darwin\"\n\t\t\t\t\t? // OJO: NO mandar aquí a 'ada-cli computer status'. Ese comando informa\n\t\t\t\t\t\t// del permiso del HELPER, que es otra aplicación y suele tenerlo. Diría\n\t\t\t\t\t\t// \"concedida\" contradiciendo este error, que es lo peor que puede hacer\n\t\t\t\t\t\t// un mensaje de ayuda. Quien necesita el permiso aquí es el proceso que\n\t\t\t\t\t\t// ejecuta Ada — la Terminal, o la app de escritorio.\n\t\t\t\t\t\t\"macOS le está negando la Grabación de pantalla al programa desde el que corre Ada (la Terminal, o la app de escritorio); el permiso del motor es aparte y no vale para esto. Concédeselo en Ajustes del Sistema → Privacidad y seguridad → Grabación de pantalla. Normalmente no hace falta: computer_screenshot captura por el motor, que sí lo tiene.\"\n\t\t\t\t\t: \"\";\n\t\treturn {\n\t\t\timagen: null,\n\t\t\tmotivo: `No se pudo capturar la pantalla. ${queHacer} Probado: ${fallidos.join(\", \") || \"nada\"}`.replace(\n\t\t\t\t\" \",\n\t\t\t\t\" \",\n\t\t\t),\n\t\t};\n\t} finally {\n\t\trmSync(dir, { recursive: true, force: true });\n\t}\n}\n"]}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Capturas de pantalla con las herramientas del sistema operativo.
3
+ *
4
+ * Es el CAMINO DE RESERVA. `computer_screenshot` captura primero por el motor,
5
+ * y no por gusto: en macOS la Grabación de pantalla se concede a una
6
+ * aplicación, y el helper del motor ya la tiene. Lo de aquí lo lanzaría nuestro
7
+ * proceso —node, dentro de la Terminal o del escritorio—, que es otra identidad
8
+ * y necesitaría su propio permiso, uno por cada sitio desde el que se use Ada.
9
+ * Comprobado: con el helper autorizado, `screencapture -x` desde node seguía
10
+ * devolviendo "could not create image from display".
11
+ *
12
+ * Sigue existiendo porque el motor captura una VENTANA, y a veces hace falta la
13
+ * pantalla entera — y porque en Linux y Windows no hay ese lío de identidades.
14
+ *
15
+ * (El motor ANTERIOR no tenía captura en absoluto: se publicó una tool que
16
+ * invocaba una acción inexistente y devolvía `unsupportedTool("screenshot")`.
17
+ * De ahí viene este fichero.)
18
+ */
19
+ import { spawn } from "node:child_process";
20
+ import { mkdtempSync, readFileSync, rmSync } from "node:fs";
21
+ import { tmpdir } from "node:os";
22
+ import { join } from "node:path";
23
+ /** Qué comando captura la pantalla en cada sistema. */
24
+ function comandoDeCaptura(plataforma, destino) {
25
+ if (plataforma === "darwin") {
26
+ // `-x` = sin sonido de obturador. Molestar al usuario con un clic cada
27
+ // vez que el agente mira la pantalla sería insufrible.
28
+ return [{ cmd: "screencapture", args: ["-x", destino] }];
29
+ }
30
+ if (plataforma === "win32") {
31
+ return [
32
+ {
33
+ cmd: "powershell",
34
+ args: [
35
+ "-NoProfile",
36
+ "-Command",
37
+ `Add-Type -AssemblyName System.Windows.Forms,System.Drawing; ` +
38
+ `$b=[System.Windows.Forms.SystemInformation]::VirtualScreen; ` +
39
+ `$i=New-Object System.Drawing.Bitmap $b.Width,$b.Height; ` +
40
+ `$g=[System.Drawing.Graphics]::FromImage($i); ` +
41
+ `$g.CopyFromScreen($b.Location,[System.Drawing.Point]::Empty,$b.Size); ` +
42
+ `$i.Save('${destino.replace(/\\/g, "\\\\")}',[System.Drawing.Imaging.ImageFormat]::Png)`,
43
+ ],
44
+ },
45
+ ];
46
+ }
47
+ // Linux: se prueban en orden. Wayland primero, porque en una sesión Wayland
48
+ // las herramientas de X11 fallan de forma confusa en vez de no existir.
49
+ return [
50
+ { cmd: "grim", args: [destino] },
51
+ { cmd: "gnome-screenshot", args: ["-f", destino] },
52
+ { cmd: "spectacle", args: ["-b", "-n", "-o", destino] },
53
+ { cmd: "scrot", args: [destino] },
54
+ { cmd: "import", args: ["-window", "root", destino] },
55
+ ];
56
+ }
57
+ function ejecutar(cmd, args, timeoutMs) {
58
+ return new Promise((resolve) => {
59
+ let hijo;
60
+ try {
61
+ hijo = spawn(cmd, args, { stdio: "ignore" });
62
+ }
63
+ catch {
64
+ resolve(-1);
65
+ return;
66
+ }
67
+ const reloj = setTimeout(() => {
68
+ hijo.kill("SIGKILL");
69
+ resolve(124);
70
+ }, timeoutMs);
71
+ hijo.on("error", () => {
72
+ clearTimeout(reloj);
73
+ resolve(-1);
74
+ });
75
+ hijo.on("close", (c) => {
76
+ clearTimeout(reloj);
77
+ resolve(c ?? 0);
78
+ });
79
+ });
80
+ }
81
+ /**
82
+ * Captura la pantalla.
83
+ *
84
+ * Devuelve `null` con un motivo legible en vez de lanzar: que no haya una
85
+ * herramienta de captura instalada es un problema del entorno, no un fallo del
86
+ * agente, y merece un mensaje que diga qué instalar.
87
+ */
88
+ export async function capturarPantalla(opciones = {}) {
89
+ const plataforma = opciones.plataforma ?? process.platform;
90
+ const dir = mkdtempSync(join(tmpdir(), "ada-captura-"));
91
+ const destino = join(dir, "pantalla.png");
92
+ const intentos = comandoDeCaptura(plataforma, destino);
93
+ const fallidos = [];
94
+ try {
95
+ for (const { cmd, args } of intentos) {
96
+ const code = await ejecutar(cmd, args, opciones.timeoutMs ?? 20_000);
97
+ if (code !== 0) {
98
+ fallidos.push(cmd);
99
+ continue;
100
+ }
101
+ try {
102
+ const datos = readFileSync(destino);
103
+ // Un fichero vacío es un fallo silencioso: algunas herramientas
104
+ // salen con 0 sin haber escrito nada cuando no hay display.
105
+ if (datos.length === 0) {
106
+ fallidos.push(`${cmd} (fichero vacío)`);
107
+ continue;
108
+ }
109
+ return { imagen: datos.toString("base64") };
110
+ }
111
+ catch {
112
+ fallidos.push(`${cmd} (sin fichero)`);
113
+ }
114
+ }
115
+ // El motivo tiene que decir qué HACER. "No se pudo capturar (probado:
116
+ // screencapture)" es cierto y no sirve de nada: en macOS la causa casi
117
+ // siempre es el permiso de Grabación de pantalla, y sin nombrarlo el
118
+ // agente se queda mirando. No se afirma como hecho —no lo hemos
119
+ // comprobado desde aquí, y este fichero no habla con el motor a
120
+ // propósito— pero sí se nombra lo primero que hay que mirar.
121
+ const queHacer = plataforma === "linux"
122
+ ? "Instala una de estas: grim (Wayland), gnome-screenshot, spectacle, scrot o ImageMagick."
123
+ : plataforma === "darwin"
124
+ ? // OJO: NO mandar aquí a 'ada-cli computer status'. Ese comando informa
125
+ // del permiso del HELPER, que es otra aplicación y suele tenerlo. Diría
126
+ // "concedida" contradiciendo este error, que es lo peor que puede hacer
127
+ // un mensaje de ayuda. Quien necesita el permiso aquí es el proceso que
128
+ // ejecuta Ada — la Terminal, o la app de escritorio.
129
+ "macOS le está negando la Grabación de pantalla al programa desde el que corre Ada (la Terminal, o la app de escritorio); el permiso del motor es aparte y no vale para esto. Concédeselo en Ajustes del Sistema → Privacidad y seguridad → Grabación de pantalla. Normalmente no hace falta: computer_screenshot captura por el motor, que sí lo tiene."
130
+ : "";
131
+ return {
132
+ imagen: null,
133
+ motivo: `No se pudo capturar la pantalla. ${queHacer} Probado: ${fallidos.join(", ") || "nada"}`.replace(" ", " "),
134
+ };
135
+ }
136
+ finally {
137
+ rmSync(dir, { recursive: true, force: true });
138
+ }
139
+ }
140
+ //# sourceMappingURL=captura.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captura.js","sourceRoot":"","sources":["../../../src/core/computer/captura.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Capturas de pantalla con las herramientas del sistema operativo.\n *\n * Es el CAMINO DE RESERVA. `computer_screenshot` captura primero por el motor,\n * y no por gusto: en macOS la Grabación de pantalla se concede a una\n * aplicación, y el helper del motor ya la tiene. Lo de aquí lo lanzaría nuestro\n * proceso —node, dentro de la Terminal o del escritorio—, que es otra identidad\n * y necesitaría su propio permiso, uno por cada sitio desde el que se use Ada.\n * Comprobado: con el helper autorizado, `screencapture -x` desde node seguía\n * devolviendo \"could not create image from display\".\n *\n * Sigue existiendo porque el motor captura una VENTANA, y a veces hace falta la\n * pantalla entera — y porque en Linux y Windows no hay ese lío de identidades.\n *\n * (El motor ANTERIOR no tenía captura en absoluto: se publicó una tool que\n * invocaba una acción inexistente y devolvía `unsupportedTool(\"screenshot\")`.\n * De ahí viene este fichero.)\n */\n\nimport { spawn } from \"node:child_process\";\nimport { mkdtempSync, readFileSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\n/** Qué comando captura la pantalla en cada sistema. */\nfunction comandoDeCaptura(plataforma: string, destino: string): Array<{ cmd: string; args: string[] }> {\n\tif (plataforma === \"darwin\") {\n\t\t// `-x` = sin sonido de obturador. Molestar al usuario con un clic cada\n\t\t// vez que el agente mira la pantalla sería insufrible.\n\t\treturn [{ cmd: \"screencapture\", args: [\"-x\", destino] }];\n\t}\n\tif (plataforma === \"win32\") {\n\t\treturn [\n\t\t\t{\n\t\t\t\tcmd: \"powershell\",\n\t\t\t\targs: [\n\t\t\t\t\t\"-NoProfile\",\n\t\t\t\t\t\"-Command\",\n\t\t\t\t\t`Add-Type -AssemblyName System.Windows.Forms,System.Drawing; ` +\n\t\t\t\t\t\t`$b=[System.Windows.Forms.SystemInformation]::VirtualScreen; ` +\n\t\t\t\t\t\t`$i=New-Object System.Drawing.Bitmap $b.Width,$b.Height; ` +\n\t\t\t\t\t\t`$g=[System.Drawing.Graphics]::FromImage($i); ` +\n\t\t\t\t\t\t`$g.CopyFromScreen($b.Location,[System.Drawing.Point]::Empty,$b.Size); ` +\n\t\t\t\t\t\t`$i.Save('${destino.replace(/\\\\/g, \"\\\\\\\\\")}',[System.Drawing.Imaging.ImageFormat]::Png)`,\n\t\t\t\t],\n\t\t\t},\n\t\t];\n\t}\n\t// Linux: se prueban en orden. Wayland primero, porque en una sesión Wayland\n\t// las herramientas de X11 fallan de forma confusa en vez de no existir.\n\treturn [\n\t\t{ cmd: \"grim\", args: [destino] },\n\t\t{ cmd: \"gnome-screenshot\", args: [\"-f\", destino] },\n\t\t{ cmd: \"spectacle\", args: [\"-b\", \"-n\", \"-o\", destino] },\n\t\t{ cmd: \"scrot\", args: [destino] },\n\t\t{ cmd: \"import\", args: [\"-window\", \"root\", destino] },\n\t];\n}\n\nfunction ejecutar(cmd: string, args: string[], timeoutMs: number): Promise<number> {\n\treturn new Promise((resolve) => {\n\t\tlet hijo: ReturnType<typeof spawn>;\n\t\ttry {\n\t\t\thijo = spawn(cmd, args, { stdio: \"ignore\" });\n\t\t} catch {\n\t\t\tresolve(-1);\n\t\t\treturn;\n\t\t}\n\t\tconst reloj = setTimeout(() => {\n\t\t\thijo.kill(\"SIGKILL\");\n\t\t\tresolve(124);\n\t\t}, timeoutMs);\n\t\thijo.on(\"error\", () => {\n\t\t\tclearTimeout(reloj);\n\t\t\tresolve(-1);\n\t\t});\n\t\thijo.on(\"close\", (c) => {\n\t\t\tclearTimeout(reloj);\n\t\t\tresolve(c ?? 0);\n\t\t});\n\t});\n}\n\nexport interface ResultadoCaptura {\n\t/** PNG en base64, o `null` si no se pudo. */\n\timagen: string | null;\n\tmotivo?: string;\n}\n\n/**\n * Captura la pantalla.\n *\n * Devuelve `null` con un motivo legible en vez de lanzar: que no haya una\n * herramienta de captura instalada es un problema del entorno, no un fallo del\n * agente, y merece un mensaje que diga qué instalar.\n */\nexport async function capturarPantalla(\n\topciones: { plataforma?: string; timeoutMs?: number } = {},\n): Promise<ResultadoCaptura> {\n\tconst plataforma = opciones.plataforma ?? process.platform;\n\tconst dir = mkdtempSync(join(tmpdir(), \"ada-captura-\"));\n\tconst destino = join(dir, \"pantalla.png\");\n\tconst intentos = comandoDeCaptura(plataforma, destino);\n\tconst fallidos: string[] = [];\n\n\ttry {\n\t\tfor (const { cmd, args } of intentos) {\n\t\t\tconst code = await ejecutar(cmd, args, opciones.timeoutMs ?? 20_000);\n\t\t\tif (code !== 0) {\n\t\t\t\tfallidos.push(cmd);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst datos = readFileSync(destino);\n\t\t\t\t// Un fichero vacío es un fallo silencioso: algunas herramientas\n\t\t\t\t// salen con 0 sin haber escrito nada cuando no hay display.\n\t\t\t\tif (datos.length === 0) {\n\t\t\t\t\tfallidos.push(`${cmd} (fichero vacío)`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\treturn { imagen: datos.toString(\"base64\") };\n\t\t\t} catch {\n\t\t\t\tfallidos.push(`${cmd} (sin fichero)`);\n\t\t\t}\n\t\t}\n\t\t// El motivo tiene que decir qué HACER. \"No se pudo capturar (probado:\n\t\t// screencapture)\" es cierto y no sirve de nada: en macOS la causa casi\n\t\t// siempre es el permiso de Grabación de pantalla, y sin nombrarlo el\n\t\t// agente se queda mirando. No se afirma como hecho —no lo hemos\n\t\t// comprobado desde aquí, y este fichero no habla con el motor a\n\t\t// propósito— pero sí se nombra lo primero que hay que mirar.\n\t\tconst queHacer =\n\t\t\tplataforma === \"linux\"\n\t\t\t\t? \"Instala una de estas: grim (Wayland), gnome-screenshot, spectacle, scrot o ImageMagick.\"\n\t\t\t\t: plataforma === \"darwin\"\n\t\t\t\t\t? // OJO: NO mandar aquí a 'ada-cli computer status'. Ese comando informa\n\t\t\t\t\t\t// del permiso del HELPER, que es otra aplicación y suele tenerlo. Diría\n\t\t\t\t\t\t// \"concedida\" contradiciendo este error, que es lo peor que puede hacer\n\t\t\t\t\t\t// un mensaje de ayuda. Quien necesita el permiso aquí es el proceso que\n\t\t\t\t\t\t// ejecuta Ada — la Terminal, o la app de escritorio.\n\t\t\t\t\t\t\"macOS le está negando la Grabación de pantalla al programa desde el que corre Ada (la Terminal, o la app de escritorio); el permiso del motor es aparte y no vale para esto. Concédeselo en Ajustes del Sistema → Privacidad y seguridad → Grabación de pantalla. Normalmente no hace falta: computer_screenshot captura por el motor, que sí lo tiene.\"\n\t\t\t\t\t: \"\";\n\t\treturn {\n\t\t\timagen: null,\n\t\t\tmotivo: `No se pudo capturar la pantalla. ${queHacer} Probado: ${fallidos.join(\", \") || \"nada\"}`.replace(\n\t\t\t\t\" \",\n\t\t\t\t\" \",\n\t\t\t),\n\t\t};\n\t} finally {\n\t\trmSync(dir, { recursive: true, force: true });\n\t}\n}\n"]}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Instalación, estado y permisos del motor de control del ordenador.
3
+ *
4
+ * El motor es nuestro fork de pi-computer-use, que vive en `motor/`. Este
5
+ * fichero es lo que usan el comando `ada-cli computer`, la ruta de API del
6
+ * escritorio y el panel de Ajustes — las tres superficies comparten esto para
7
+ * que el control del ordenador no sea una función solo del escritorio.
8
+ *
9
+ * Antes esto hablaba por CLI con `open-computer-use`. Aquel motor tenía seis
10
+ * acciones y le faltaban las dos que importan: esperar y buscar. El detalle del
11
+ * cambio está en `vendor/computer-use/PROCEDENCIA.md`.
12
+ */
13
+ /** Versión del fork. Sube cuando traigamos cambios de aguas arriba. */
14
+ export declare const VERSION_MOTOR = "0.5.0-ada.1";
15
+ /**
16
+ * Los dos permisos de macOS, por separado.
17
+ *
18
+ * Van separados porque son DOS paneles distintos de Ajustes del Sistema y hay
19
+ * que conceder los dos. Un único botón "conceder permisos" solo puede abrir uno
20
+ * de ellos, y deja al usuario creyendo que ya está.
21
+ */
22
+ export type PermisoMac = "accesibilidad" | "pantalla";
23
+ export interface EstadoMotor {
24
+ instalado: boolean;
25
+ version?: string;
26
+ /**
27
+ * `true` solo donde el sistema exige permisos explícitos — hoy, macOS.
28
+ *
29
+ * En Linux y Windows el motor funciona sin conceder nada. Sin esta
30
+ * distinción, la ausencia de las líneas de permisos se leería como
31
+ * "denegado" y la interfaz avisaría de un problema inventado en dos de las
32
+ * tres plataformas.
33
+ */
34
+ permisosRelevantes: boolean;
35
+ accesibilidad?: boolean;
36
+ grabacionPantalla?: boolean;
37
+ /**
38
+ * macOS dice que la Grabación de pantalla está concedida, pero al intentar
39
+ * capturar de verdad falla.
40
+ *
41
+ * Significa casi siempre que el permiso pertenece a OTRA identidad de
42
+ * aplicación — el caso típico al cambiar el identificador de paquete, o al
43
+ * venir de una versión anterior firmada distinto. Sin distinguirlo, la
44
+ * interfaz enseñaría "falta permiso" mientras el usuario ve el interruptor
45
+ * encendido en Ajustes, y no hay forma de salir de ahí.
46
+ */
47
+ pantallaDeOtraApp?: boolean;
48
+ /**
49
+ * No se pudo PREGUNTAR por los permisos (el demonio no contestó).
50
+ *
51
+ * Es distinto de "denegados", y confundirlos se ve en pantalla: sin esto, un
52
+ * timeout del demonio hacía que el panel dijera "macOS sigue negando
53
+ * permisos" y ofreciera los dos pasos para concederlos. El usuario iba a
54
+ * Ajustes del Sistema, veía los interruptores YA encendidos, y se quedaba sin
55
+ * saber qué hacer. El remedio de verdad es reintentar o reiniciar el motor.
56
+ */
57
+ consultaFallida?: boolean;
58
+ /**
59
+ * Qué panel de Ajustes se acaba de abrir, si se abrió alguno.
60
+ *
61
+ * Lo pone solo `pedirPermisos`. Sirve para dos cosas: que la interfaz pueda
62
+ * decir a cuál ha mandado al usuario, y que se pueda COMPROBAR que no se
63
+ * abre ninguno cuando no toca. Sin este campo, "no abrir el panel" y
64
+ * "abrirlo y que falle" se ven exactamente igual desde fuera — y una prueba
65
+ * que no distingue esos dos casos no prueba nada.
66
+ */
67
+ panelAbierto?: PermisoMac;
68
+ detalle?: string;
69
+ }
70
+ /**
71
+ * ¿Está el motor listo?
72
+ *
73
+ * Se comprueban el helper y los permisos por separado porque fallan por
74
+ * separado: el helper puede estar instalado y macOS seguir negando la
75
+ * Accesibilidad. Decir solo "no funciona" dejaría al usuario sin saber qué
76
+ * arreglar, y en macOS lo que falla casi siempre son los permisos.
77
+ */
78
+ export declare function estadoDelMotor(opciones?: OpcionesEstado): Promise<EstadoMotor>;
79
+ export interface OpcionesEstado {
80
+ plataforma?: string;
81
+ /**
82
+ * Dónde buscar el helper. Solo lo cambian las pruebas: la rama "no está
83
+ * instalado" decide qué botón enseña Ajustes, y en una máquina donde SÍ está
84
+ * instalado no habría forma de recorrerla.
85
+ */
86
+ rutaHelper?: string;
87
+ }
88
+ export interface ResultadoInstalacion {
89
+ ok: boolean;
90
+ salida: string;
91
+ }
92
+ /**
93
+ * Instala el helper nativo.
94
+ *
95
+ * En macOS lo instala como aplicación FIRMADA en `~/Applications`, porque los
96
+ * permisos de Accesibilidad se conceden a una aplicación, no a un binario
97
+ * suelto. La firma es local (ad-hoc): vale para uso propio, pero distribuir
98
+ * Ada a terceros pediría un certificado de Apple.
99
+ */
100
+ export declare function instalarMotor(opciones?: {
101
+ timeoutMs?: number;
102
+ }): Promise<ResultadoInstalacion>;
103
+ /**
104
+ * Pide los permisos del sistema.
105
+ *
106
+ * Abre el panel de Accesibilidad de macOS y relee el estado DESPUÉS: el usuario
107
+ * tarda en conceder, y dar por buenos unos permisos sin comprobarlos sería
108
+ * enseñar un punto verde falso.
109
+ *
110
+ * Ojo con una consecuencia del fork: al cambiar el identificador de paquete a
111
+ * `com.hoilab.ada-computer-use`, macOS lo trata como una aplicación NUEVA y
112
+ * pedirá permisos aunque el original los tuviera. Es lo correcto — es otra
113
+ * aplicación — pero conviene decírselo al usuario en vez de que parezca un
114
+ * fallo.
115
+ */
116
+ export declare function pedirPermisos(opciones?: OpcionesEstado & {
117
+ permiso?: PermisoMac;
118
+ }): Promise<EstadoMotor>;
119
+ /**
120
+ * Reléelo todo después de que el usuario haya concedido algo.
121
+ *
122
+ * Reinicia el helper ANTES de mirar, y esa es toda la gracia: macOS cachea los
123
+ * permisos POR PROCESO. Un helper que arrancó sin Accesibilidad sigue creyendo
124
+ * que no la tiene aunque acabes de concederla. Sin este reinicio, el usuario
125
+ * concede, pulsa "volver a comprobar", sigue en rojo, y concluye que está roto
126
+ * — cuando lo único que pasa es que nadie se lo ha preguntado de nuevo al
127
+ * sistema.
128
+ */
129
+ export declare function recomprobarPermisos(opciones?: OpcionesEstado): Promise<EstadoMotor>;
130
+ //# sourceMappingURL=driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../src/core/computer/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,wEAAuE;AACvE,eAAO,MAAM,aAAa,gBAAgB,CAAC;AAI3C;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,UAAU,CAAC;AAQtD,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAmDD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,QAAQ,GAAE,cAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiDxF;AAED,MAAM,WAAW,cAAc;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,QAAQ,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAOxG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,QAAQ,GAAE,cAAc,GAAG;IAAE,OAAO,CAAC,EAAE,UAAU,CAAA;CAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAqClH;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,GAAE,cAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CAS7F","sourcesContent":["/**\n * Instalación, estado y permisos del motor de control del ordenador.\n *\n * El motor es nuestro fork de pi-computer-use, que vive en `motor/`. Este\n * fichero es lo que usan el comando `ada-cli computer`, la ruta de API del\n * escritorio y el panel de Ajustes — las tres superficies comparten esto para\n * que el control del ordenador no sea una función solo del escritorio.\n *\n * Antes esto hablaba por CLI con `open-computer-use`. Aquel motor tenía seis\n * acciones y le faltaban las dos que importan: esperar y buscar. El detalle del\n * cambio está en `vendor/computer-use/PROCEDENCIA.md`.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { HELPER_APP_PATH, macosHelper } from \"./motor/platform/macos/helper.ts\";\n\n/** Versión del fork. Sube cuando traigamos cambios de aguas arriba. */\nexport const VERSION_MOTOR = \"0.5.0-ada.1\";\n\nconst MAX_SALIDA = 4 * 1024 * 1024;\n\n/**\n * Los dos permisos de macOS, por separado.\n *\n * Van separados porque son DOS paneles distintos de Ajustes del Sistema y hay\n * que conceder los dos. Un único botón \"conceder permisos\" solo puede abrir uno\n * de ellos, y deja al usuario creyendo que ya está.\n */\nexport type PermisoMac = \"accesibilidad\" | \"pantalla\";\n\n/** El nombre que entiende el helper para cada panel. */\nconst PANEL: Record<PermisoMac, string> = {\n\taccesibilidad: \"accessibility\",\n\tpantalla: \"screenRecording\",\n};\n\nexport interface EstadoMotor {\n\tinstalado: boolean;\n\tversion?: string;\n\t/**\n\t * `true` solo donde el sistema exige permisos explícitos — hoy, macOS.\n\t *\n\t * En Linux y Windows el motor funciona sin conceder nada. Sin esta\n\t * distinción, la ausencia de las líneas de permisos se leería como\n\t * \"denegado\" y la interfaz avisaría de un problema inventado en dos de las\n\t * tres plataformas.\n\t */\n\tpermisosRelevantes: boolean;\n\taccesibilidad?: boolean;\n\tgrabacionPantalla?: boolean;\n\t/**\n\t * macOS dice que la Grabación de pantalla está concedida, pero al intentar\n\t * capturar de verdad falla.\n\t *\n\t * Significa casi siempre que el permiso pertenece a OTRA identidad de\n\t * aplicación — el caso típico al cambiar el identificador de paquete, o al\n\t * venir de una versión anterior firmada distinto. Sin distinguirlo, la\n\t * interfaz enseñaría \"falta permiso\" mientras el usuario ve el interruptor\n\t * encendido en Ajustes, y no hay forma de salir de ahí.\n\t */\n\tpantallaDeOtraApp?: boolean;\n\t/**\n\t * No se pudo PREGUNTAR por los permisos (el demonio no contestó).\n\t *\n\t * Es distinto de \"denegados\", y confundirlos se ve en pantalla: sin esto, un\n\t * timeout del demonio hacía que el panel dijera \"macOS sigue negando\n\t * permisos\" y ofreciera los dos pasos para concederlos. El usuario iba a\n\t * Ajustes del Sistema, veía los interruptores YA encendidos, y se quedaba sin\n\t * saber qué hacer. El remedio de verdad es reintentar o reiniciar el motor.\n\t */\n\tconsultaFallida?: boolean;\n\t/**\n\t * Qué panel de Ajustes se acaba de abrir, si se abrió alguno.\n\t *\n\t * Lo pone solo `pedirPermisos`. Sirve para dos cosas: que la interfaz pueda\n\t * decir a cuál ha mandado al usuario, y que se pueda COMPROBAR que no se\n\t * abre ninguno cuando no toca. Sin este campo, \"no abrir el panel\" y\n\t * \"abrirlo y que falle\" se ven exactamente igual desde fuera — y una prueba\n\t * que no distingue esos dos casos no prueba nada.\n\t */\n\tpanelAbierto?: PermisoMac;\n\tdetalle?: string;\n}\n\nfunction ejecutar(cmd: string, args: string[], timeoutMs: number): Promise<{ code: number; salida: string }> {\n\treturn new Promise((resolve) => {\n\t\tlet hijo: ReturnType<typeof spawn>;\n\t\ttry {\n\t\t\thijo = spawn(cmd, args, { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n\t\t} catch (error) {\n\t\t\tresolve({ code: -1, salida: error instanceof Error ? error.message : String(error) });\n\t\t\treturn;\n\t\t}\n\t\tlet salida = \"\";\n\t\tlet resuelto = false;\n\t\tconst fin = (code: number) => {\n\t\t\tif (resuelto) return;\n\t\t\tresuelto = true;\n\t\t\tclearTimeout(reloj);\n\t\t\tresolve({ code, salida });\n\t\t};\n\t\tconst reloj = setTimeout(() => {\n\t\t\thijo.kill(\"SIGKILL\");\n\t\t\tfin(124);\n\t\t}, timeoutMs);\n\t\tconst recoger = (t: Buffer) => {\n\t\t\tif (salida.length < MAX_SALIDA) salida += t.toString(\"utf8\");\n\t\t};\n\t\thijo.stdout?.on(\"data\", recoger);\n\t\thijo.stderr?.on(\"data\", recoger);\n\t\thijo.on(\"error\", (e) => {\n\t\t\tsalida += e.message;\n\t\t\tfin(-1);\n\t\t});\n\t\thijo.on(\"close\", (c) => fin(c ?? 0));\n\t});\n}\n\n/** El script que instala y firma el helper nativo. */\nfunction rutaDelInstalador(): string {\n\t// `vendor/computer-use/scripts/` desde `src/core/computer/`.\n\treturn join(\n\t\tdirname(fileURLToPath(import.meta.url)),\n\t\t\"..\",\n\t\t\"..\",\n\t\t\"..\",\n\t\t\"vendor\",\n\t\t\"computer-use\",\n\t\t\"scripts\",\n\t\t\"setup-helper.mjs\",\n\t);\n}\n\n/**\n * ¿Está el motor listo?\n *\n * Se comprueban el helper y los permisos por separado porque fallan por\n * separado: el helper puede estar instalado y macOS seguir negando la\n * Accesibilidad. Decir solo \"no funciona\" dejaría al usuario sin saber qué\n * arreglar, y en macOS lo que falla casi siempre son los permisos.\n */\nexport async function estadoDelMotor(opciones: OpcionesEstado = {}): Promise<EstadoMotor> {\n\tconst plataforma = opciones.plataforma ?? process.platform;\n\tconst permisosRelevantes = plataforma === \"darwin\";\n\n\tif (!permisosRelevantes) {\n\t\t// Fuera de macOS no hay .app que comprobar; el helper es un binario suelto\n\t\t// y su ausencia se descubre al usarlo.\n\t\treturn { instalado: true, permisosRelevantes, version: VERSION_MOTOR };\n\t}\n\n\tconst rutaHelper = opciones.rutaHelper ?? HELPER_APP_PATH;\n\tif (!existsSync(rutaHelper)) {\n\t\treturn {\n\t\t\tinstalado: false,\n\t\t\tpermisosRelevantes,\n\t\t\tdetalle: `No está instalado el helper en ${rutaHelper}`,\n\t\t};\n\t}\n\n\ttry {\n\t\tawait macosHelper.ensureDaemon();\n\t\t// `checkPermissions`, no `diagnostics`: el primero hace una sonda VIVA de\n\t\t// ScreenCaptureKit; el segundo lee lo que dice la base de datos TCC. No es\n\t\t// lo mismo, y justo cuando difieren es cuando el usuario está atascado.\n\t\tconst p = await macosHelper.command<{\n\t\t\taccessibility?: boolean;\n\t\t\tscreenRecordingCapturable?: boolean;\n\t\t\tscreenRecordingPreflight?: boolean;\n\t\t}>(\"checkPermissions\", {});\n\t\tconst captura = p.screenRecordingCapturable === true;\n\t\tconst enTcc = p.screenRecordingPreflight === true;\n\t\treturn {\n\t\t\tinstalado: true,\n\t\t\tpermisosRelevantes,\n\t\t\tversion: VERSION_MOTOR,\n\t\t\taccesibilidad: p.accessibility === true,\n\t\t\tgrabacionPantalla: captura,\n\t\t\tpantallaDeOtraApp: enTcc && !captura,\n\t\t\tdetalle: `accesibilidad=${p.accessibility === true}, pantalla=${captura}${enTcc && !captura ? \" (concedida a otra app)\" : \"\"}`,\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\tinstalado: true,\n\t\t\tpermisosRelevantes,\n\t\t\tversion: VERSION_MOTOR,\n\t\t\tconsultaFallida: true,\n\t\t\tdetalle: error instanceof Error ? error.message : String(error),\n\t\t};\n\t}\n}\n\nexport interface OpcionesEstado {\n\tplataforma?: string;\n\t/**\n\t * Dónde buscar el helper. Solo lo cambian las pruebas: la rama \"no está\n\t * instalado\" decide qué botón enseña Ajustes, y en una máquina donde SÍ está\n\t * instalado no habría forma de recorrerla.\n\t */\n\trutaHelper?: string;\n}\n\nexport interface ResultadoInstalacion {\n\tok: boolean;\n\tsalida: string;\n}\n\n/**\n * Instala el helper nativo.\n *\n * En macOS lo instala como aplicación FIRMADA en `~/Applications`, porque los\n * permisos de Accesibilidad se conceden a una aplicación, no a un binario\n * suelto. La firma es local (ad-hoc): vale para uso propio, pero distribuir\n * Ada a terceros pediría un certificado de Apple.\n */\nexport async function instalarMotor(opciones: { timeoutMs?: number } = {}): Promise<ResultadoInstalacion> {\n\tconst instalador = rutaDelInstalador();\n\tif (!existsSync(instalador)) {\n\t\treturn { ok: false, salida: `No encuentro el instalador en ${instalador}` };\n\t}\n\tconst r = await ejecutar(\"node\", [instalador, \"--postinstall\"], opciones.timeoutMs ?? 300_000);\n\treturn { ok: r.code === 0, salida: r.salida.trim() };\n}\n\n/**\n * Pide los permisos del sistema.\n *\n * Abre el panel de Accesibilidad de macOS y relee el estado DESPUÉS: el usuario\n * tarda en conceder, y dar por buenos unos permisos sin comprobarlos sería\n * enseñar un punto verde falso.\n *\n * Ojo con una consecuencia del fork: al cambiar el identificador de paquete a\n * `com.hoilab.ada-computer-use`, macOS lo trata como una aplicación NUEVA y\n * pedirá permisos aunque el original los tuviera. Es lo correcto — es otra\n * aplicación — pero conviene decírselo al usuario en vez de que parezca un\n * fallo.\n */\nexport async function pedirPermisos(opciones: OpcionesEstado & { permiso?: PermisoMac } = {}): Promise<EstadoMotor> {\n\tconst plataforma = opciones.plataforma ?? process.platform;\n\tif (plataforma !== \"darwin\") return estadoDelMotor(opciones);\n\n\tconst antes = await estadoDelMotor(opciones);\n\tif (!antes.instalado) return antes;\n\n\t// Sin permiso explícito, el primero que falte. Así el CLI sigue siendo un\n\t// comando y la interfaz puede pedir uno concreto.\n\tconst permiso: PermisoMac = opciones.permiso ?? (antes.accesibilidad ? \"pantalla\" : \"accesibilidad\");\n\n\ttry {\n\t\t// PRIMERO registrar. Esto provoca la petición de Accesibilidad y un\n\t\t// intento real de captura, y el efecto que importa es que\n\t\t// `ada-computer-use.app` queda LISTADA en los dos paneles. Sin esto, el\n\t\t// usuario abre Ajustes y tiene que añadir la aplicación con el \"+\",\n\t\t// buscándola por la ruta. Con esto solo tiene que dar al interruptor.\n\t\tawait macosHelper.command(\"registerPermissions\", {}, { timeoutMs: 15_000 });\n\t} catch {\n\t\t// Que no se pueda registrar no impide abrir el panel; el usuario lo\n\t\t// tendrá más incómodo, no imposible.\n\t}\n\n\tlet abierto = true;\n\ttry {\n\t\tawait macosHelper.command(\"openPermissionPane\", { kind: PANEL[permiso] });\n\t} catch {\n\t\t// Si el helper no puede abrirlo, se abre por URL. Es lo que hacíamos\n\t\t// antes y funciona; solo que no deja la app listada.\n\t\tconst url =\n\t\t\tpermiso === \"accesibilidad\"\n\t\t\t\t? \"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility\"\n\t\t\t\t: \"x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture\";\n\t\tabierto = (await ejecutar(\"open\", [url], 15_000)).code === 0;\n\t}\n\n\treturn { ...(await estadoDelMotor(opciones)), panelAbierto: abierto ? permiso : undefined };\n}\n\n/**\n * Reléelo todo después de que el usuario haya concedido algo.\n *\n * Reinicia el helper ANTES de mirar, y esa es toda la gracia: macOS cachea los\n * permisos POR PROCESO. Un helper que arrancó sin Accesibilidad sigue creyendo\n * que no la tiene aunque acabes de concederla. Sin este reinicio, el usuario\n * concede, pulsa \"volver a comprobar\", sigue en rojo, y concluye que está roto\n * — cuando lo único que pasa es que nadie se lo ha preguntado de nuevo al\n * sistema.\n */\nexport async function recomprobarPermisos(opciones: OpcionesEstado = {}): Promise<EstadoMotor> {\n\tconst plataforma = opciones.plataforma ?? process.platform;\n\tif (plataforma !== \"darwin\") return estadoDelMotor(opciones);\n\ttry {\n\t\tawait macosHelper.restart();\n\t} catch {\n\t\t// Si no reinicia, se mira igual: un dato viejo es mejor que un error.\n\t}\n\treturn estadoDelMotor(opciones);\n}\n"]}