@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,137 @@
1
+ /**
2
+ * Estabilización del prefijo del prompt.
3
+ *
4
+ * Las cachés de prompt (DeepSeek, OpenAI, Anthropic) casan por PREFIJO: un byte
5
+ * distinto en la posición N invalida todo lo que va detrás. En DeepSeek el hit
6
+ * cuesta ~31x menos que el miss, así que el coste de un cambio no es
7
+ * proporcional a su tamaño sino a su POSICIÓN.
8
+ *
9
+ * Esto reordena el system prompt para que todo lo estable quede por delante y lo
10
+ * dinámico detrás de un separador, de modo que el sufijo invalidado sea lo más
11
+ * pequeño posible.
12
+ *
13
+ * Dos decisiones de diseño que no son obvias:
14
+ *
15
+ * 1. Los candidatos ANIDAN — el bloque de un context file contiene su propio
16
+ * contenido a secas. Por eso las ocurrencias se cuentan contra UNA instantánea
17
+ * inmutable del prompt original, no contra el texto que va quedando: recontar
18
+ * tras cada extracción daría resultados incoherentes. Cualquier candidato que
19
+ * no aparezca EXACTAMENTE una vez se deja en su sitio.
20
+ *
21
+ * 2. Hay guardia de integridad. Si tras reordenar desaparece cualquier marcador
22
+ * estructural (una etiqueta, un delimitador), se descarta la reescritura
23
+ * entera y se devuelve el original. Un reordenado con un bug que corrompe el
24
+ * prompt en silencio es mucho peor que no cachear.
25
+ */
26
+ /** Por debajo de esto un "candidato" es ruido que aparece en cualquier sitio. */
27
+ const MIN_CANDIDATE_LENGTH = 8;
28
+ /** Separador entre la zona estable y la dinámica. */
29
+ export const STABLE_SEPARATOR = "\n\n---\n\n";
30
+ /**
31
+ * Ficheros de contexto que se consideran estables.
32
+ *
33
+ * El tamaño NO es criterio: un fichero grande puede cambiar cada turno. Solo se
34
+ * suben ficheros de instrucciones cuyo contenido se sabe estable durante la
35
+ * sesión.
36
+ */
37
+ const STABLE_CONTEXT_FILES = /(^|\/)(agents(\.override)?\.md|claude\.md|gemini\.md|cursor\.md)$/i;
38
+ export function isStableContextFile(path) {
39
+ return STABLE_CONTEXT_FILES.test(path.replace(/\\/g, "/").toLowerCase());
40
+ }
41
+ /**
42
+ * Marcadores estructurales: etiquetas y delimitadores de bloque. Si el
43
+ * reordenado pierde alguno, algo se ha comido texto.
44
+ */
45
+ export function extractStructuralMarkers(text) {
46
+ const markers = [];
47
+ for (const match of text.matchAll(/<\/?[a-zA-Z][\w-]*>/g))
48
+ markers.push(match[0]);
49
+ for (const match of text.matchAll(/<!--\s*[A-Z_]+:(START|END)\s*-->/g))
50
+ markers.push(match[0]);
51
+ return markers.sort();
52
+ }
53
+ /** Construye los bloques candidatos a subir, en orden determinista. */
54
+ export function buildStableCandidates(input) {
55
+ const candidates = [];
56
+ const push = (value) => {
57
+ const trimmed = value?.trim();
58
+ if (trimmed && trimmed.length >= MIN_CANDIDATE_LENGTH)
59
+ candidates.push(trimmed);
60
+ };
61
+ push(input.customPrompt);
62
+ push(input.appendSystemPrompt);
63
+ for (const guideline of input.promptGuidelines ?? [])
64
+ push(`- ${guideline}`);
65
+ for (const file of input.contextFiles ?? []) {
66
+ if (!isStableContextFile(file.path))
67
+ continue;
68
+ // Dos formas: con cabecera de ruta y sin ella. El ensamblador puede usar
69
+ // cualquiera de las dos y solo una casará.
70
+ push(`## ${file.path}\n\n${file.content}`);
71
+ push(file.content);
72
+ }
73
+ return candidates;
74
+ }
75
+ /**
76
+ * Reordena el prompt: estable primero, dinámico después del separador.
77
+ *
78
+ * No-op seguro: si nada casa exactamente una vez, o si la guardia de integridad
79
+ * salta, devuelve el prompt original sin tocar.
80
+ */
81
+ export function stabilizeSystemPrompt(input) {
82
+ const original = input.prompt;
83
+ if (!original.trim())
84
+ return { prompt: original, lifted: 0, rolledBack: false };
85
+ const candidates = buildStableCandidates(input);
86
+ if (candidates.length === 0)
87
+ return { prompt: original, lifted: 0, rolledBack: false };
88
+ // Contar SIEMPRE contra la instantánea original: los candidatos anidan.
89
+ const snapshot = original;
90
+ const occurrencesOf = (needle) => {
91
+ let count = 0;
92
+ let from = 0;
93
+ while (true) {
94
+ const at = snapshot.indexOf(needle, from);
95
+ if (at === -1)
96
+ break;
97
+ count++;
98
+ from = at + needle.length;
99
+ if (count > 1)
100
+ break; // con saber que hay más de una basta
101
+ }
102
+ return count;
103
+ };
104
+ const stable = [];
105
+ let rest = original;
106
+ const seen = new Set();
107
+ for (const candidate of candidates) {
108
+ if (seen.has(candidate))
109
+ continue;
110
+ if (occurrencesOf(candidate) !== 1)
111
+ continue;
112
+ const at = rest.indexOf(candidate);
113
+ if (at === -1)
114
+ continue; // ya extraído dentro de otro candidato
115
+ seen.add(candidate);
116
+ stable.push(candidate);
117
+ rest = rest.slice(0, at) + rest.slice(at + candidate.length);
118
+ }
119
+ if (stable.length === 0)
120
+ return { prompt: original, lifted: 0, rolledBack: false };
121
+ const stableJoined = stable.join("\n\n");
122
+ // Ya estabilizado: sin esto una segunda pasada apilaría otro separador y el
123
+ // prefijo se movería en cada turno — exactamente lo contrario de lo que
124
+ // buscamos. La idempotencia no es elegancia aquí, es la propiedad.
125
+ if (original.startsWith(stableJoined + STABLE_SEPARATOR)) {
126
+ return { prompt: original, lifted: 0, rolledBack: false };
127
+ }
128
+ const rewritten = `${stableJoined}${STABLE_SEPARATOR}${rest.trim()}`;
129
+ // Guardia de integridad: ningún marcador estructural puede desaparecer.
130
+ const before = extractStructuralMarkers(original);
131
+ const after = extractStructuralMarkers(rewritten);
132
+ if (before.length !== after.length || before.some((m, i) => m !== after[i])) {
133
+ return { prompt: original, lifted: 0, rolledBack: true };
134
+ }
135
+ return { prompt: rewritten, lifted: stable.length, rolledBack: false };
136
+ }
137
+ //# sourceMappingURL=stabilize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stabilize.js","sourceRoot":"","sources":["../../../src/core/prompt-cache/stabilize.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Estabilización del prefijo del prompt.\n *\n * Las cachés de prompt (DeepSeek, OpenAI, Anthropic) casan por PREFIJO: un byte\n * distinto en la posición N invalida todo lo que va detrás. En DeepSeek el hit\n * cuesta ~31x menos que el miss, así que el coste de un cambio no es\n * proporcional a su tamaño sino a su POSICIÓN.\n *\n * Esto reordena el system prompt para que todo lo estable quede por delante y lo\n * dinámico detrás de un separador, de modo que el sufijo invalidado sea lo más\n * pequeño posible.\n *\n * Dos decisiones de diseño que no son obvias:\n *\n * 1. Los candidatos ANIDAN — el bloque de un context file contiene su propio\n * contenido a secas. Por eso las ocurrencias se cuentan contra UNA instantánea\n * inmutable del prompt original, no contra el texto que va quedando: recontar\n * tras cada extracción daría resultados incoherentes. Cualquier candidato que\n * no aparezca EXACTAMENTE una vez se deja en su sitio.\n *\n * 2. Hay guardia de integridad. Si tras reordenar desaparece cualquier marcador\n * estructural (una etiqueta, un delimitador), se descarta la reescritura\n * entera y se devuelve el original. Un reordenado con un bug que corrompe el\n * prompt en silencio es mucho peor que no cachear.\n */\n\n/** Por debajo de esto un \"candidato\" es ruido que aparece en cualquier sitio. */\nconst MIN_CANDIDATE_LENGTH = 8;\n\n/** Separador entre la zona estable y la dinámica. */\nexport const STABLE_SEPARATOR = \"\\n\\n---\\n\\n\";\n\n/**\n * Ficheros de contexto que se consideran estables.\n *\n * El tamaño NO es criterio: un fichero grande puede cambiar cada turno. Solo se\n * suben ficheros de instrucciones cuyo contenido se sabe estable durante la\n * sesión.\n */\nconst STABLE_CONTEXT_FILES = /(^|\\/)(agents(\\.override)?\\.md|claude\\.md|gemini\\.md|cursor\\.md)$/i;\n\nexport function isStableContextFile(path: string): boolean {\n\treturn STABLE_CONTEXT_FILES.test(path.replace(/\\\\/g, \"/\").toLowerCase());\n}\n\nexport interface StabilizeInput {\n\t/** El system prompt ya ensamblado. */\n\tprompt: string;\n\t/** Prompt de sistema propio del usuario, si lo hay. */\n\tcustomPrompt?: string;\n\t/** Bloques añadidos al final (incluye la personalidad del engine). */\n\tappendSystemPrompt?: string;\n\t/** Guidelines por tool. */\n\tpromptGuidelines?: string[];\n\t/** Ficheros de contexto cargados. */\n\tcontextFiles?: Array<{ path: string; content: string }>;\n}\n\nexport interface StabilizeResult {\n\tprompt: string;\n\t/** Cuántos bloques se subieron al prefijo estable. */\n\tlifted: number;\n\t/** True si la guardia de integridad descartó la reescritura. */\n\trolledBack: boolean;\n}\n\n/**\n * Marcadores estructurales: etiquetas y delimitadores de bloque. Si el\n * reordenado pierde alguno, algo se ha comido texto.\n */\nexport function extractStructuralMarkers(text: string): string[] {\n\tconst markers: string[] = [];\n\tfor (const match of text.matchAll(/<\\/?[a-zA-Z][\\w-]*>/g)) markers.push(match[0]);\n\tfor (const match of text.matchAll(/<!--\\s*[A-Z_]+:(START|END)\\s*-->/g)) markers.push(match[0]);\n\treturn markers.sort();\n}\n\n/** Construye los bloques candidatos a subir, en orden determinista. */\nexport function buildStableCandidates(input: StabilizeInput): string[] {\n\tconst candidates: string[] = [];\n\tconst push = (value: string | undefined) => {\n\t\tconst trimmed = value?.trim();\n\t\tif (trimmed && trimmed.length >= MIN_CANDIDATE_LENGTH) candidates.push(trimmed);\n\t};\n\n\tpush(input.customPrompt);\n\tpush(input.appendSystemPrompt);\n\tfor (const guideline of input.promptGuidelines ?? []) push(`- ${guideline}`);\n\tfor (const file of input.contextFiles ?? []) {\n\t\tif (!isStableContextFile(file.path)) continue;\n\t\t// Dos formas: con cabecera de ruta y sin ella. El ensamblador puede usar\n\t\t// cualquiera de las dos y solo una casará.\n\t\tpush(`## ${file.path}\\n\\n${file.content}`);\n\t\tpush(file.content);\n\t}\n\treturn candidates;\n}\n\n/**\n * Reordena el prompt: estable primero, dinámico después del separador.\n *\n * No-op seguro: si nada casa exactamente una vez, o si la guardia de integridad\n * salta, devuelve el prompt original sin tocar.\n */\nexport function stabilizeSystemPrompt(input: StabilizeInput): StabilizeResult {\n\tconst original = input.prompt;\n\tif (!original.trim()) return { prompt: original, lifted: 0, rolledBack: false };\n\n\tconst candidates = buildStableCandidates(input);\n\tif (candidates.length === 0) return { prompt: original, lifted: 0, rolledBack: false };\n\n\t// Contar SIEMPRE contra la instantánea original: los candidatos anidan.\n\tconst snapshot = original;\n\tconst occurrencesOf = (needle: string): number => {\n\t\tlet count = 0;\n\t\tlet from = 0;\n\t\twhile (true) {\n\t\t\tconst at = snapshot.indexOf(needle, from);\n\t\t\tif (at === -1) break;\n\t\t\tcount++;\n\t\t\tfrom = at + needle.length;\n\t\t\tif (count > 1) break; // con saber que hay más de una basta\n\t\t}\n\t\treturn count;\n\t};\n\n\tconst stable: string[] = [];\n\tlet rest = original;\n\tconst seen = new Set<string>();\n\tfor (const candidate of candidates) {\n\t\tif (seen.has(candidate)) continue;\n\t\tif (occurrencesOf(candidate) !== 1) continue;\n\t\tconst at = rest.indexOf(candidate);\n\t\tif (at === -1) continue; // ya extraído dentro de otro candidato\n\t\tseen.add(candidate);\n\t\tstable.push(candidate);\n\t\trest = rest.slice(0, at) + rest.slice(at + candidate.length);\n\t}\n\n\tif (stable.length === 0) return { prompt: original, lifted: 0, rolledBack: false };\n\n\tconst stableJoined = stable.join(\"\\n\\n\");\n\t// Ya estabilizado: sin esto una segunda pasada apilaría otro separador y el\n\t// prefijo se movería en cada turno — exactamente lo contrario de lo que\n\t// buscamos. La idempotencia no es elegancia aquí, es la propiedad.\n\tif (original.startsWith(stableJoined + STABLE_SEPARATOR)) {\n\t\treturn { prompt: original, lifted: 0, rolledBack: false };\n\t}\n\n\tconst rewritten = `${stableJoined}${STABLE_SEPARATOR}${rest.trim()}`;\n\n\t// Guardia de integridad: ningún marcador estructural puede desaparecer.\n\tconst before = extractStructuralMarkers(original);\n\tconst after = extractStructuralMarkers(rewritten);\n\tif (before.length !== after.length || before.some((m, i) => m !== after[i])) {\n\t\treturn { prompt: original, lifted: 0, rolledBack: true };\n\t}\n\n\treturn { prompt: rewritten, lifted: stable.length, rolledBack: false };\n}\n"]}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Lectura y persistencia de estadísticas de caché.
3
+ *
4
+ * Sin medición, todo lo demás es fe. Cada familia de proveedor reporta el uso de
5
+ * caché con nombres distintos, y algunos proxies los omiten — en cuyo caso hay
6
+ * que decirlo en vez de mostrar un 0% que parece un problema de caché cuando en
7
+ * realidad es un problema de telemetría.
8
+ */
9
+ export interface CacheUsage {
10
+ /** Tokens de entrada servidos desde caché. */
11
+ cacheRead: number;
12
+ /** Tokens escritos a la caché (Anthropic los cobra aparte). */
13
+ cacheWrite: number;
14
+ /** Total de tokens de entrada, incluyendo los cacheados. */
15
+ totalInput: number;
16
+ /** True si el proveedor no reportó campos de caché (≠ 0 aciertos). */
17
+ missingFields: boolean;
18
+ }
19
+ /**
20
+ * Normaliza el usage de cualquier familia de proveedor.
21
+ *
22
+ * Los nombres NO son intercambiables:
23
+ * - DeepSeek: `prompt_cache_hit_tokens` + `prompt_cache_miss_tokens` suman el total.
24
+ * - OpenAI: `prompt_tokens_details.cached_tokens` es un SUBCONJUNTO de `prompt_tokens`.
25
+ * - Anthropic: `input_tokens` EXCLUYE lo cacheado, así que hay que sumarlo.
26
+ * - Gemini: `cachedContentTokenCount` sobre `promptTokenCount`.
27
+ */
28
+ export declare function readCacheUsage(raw: unknown): CacheUsage;
29
+ export interface ModelCacheStats {
30
+ day: string;
31
+ requests: number;
32
+ hits: number;
33
+ cachedTokens: number;
34
+ totalTokens: number;
35
+ missingFieldRequests: number;
36
+ }
37
+ export declare function emptyStats(day: string): ModelCacheStats;
38
+ export declare function accumulate(stats: ModelCacheStats, usage: CacheUsage): ModelCacheStats;
39
+ /** Línea del footer: `DS cache 42/57·1.20M/1.85M 64.9%`. */
40
+ export declare function formatStats(label: string, stats: ModelCacheStats): string;
41
+ /** Persistencia con escritura debounced; el disco nunca bloquea una petición. */
42
+ export declare class CacheStatsStore {
43
+ private path;
44
+ private data;
45
+ private timer;
46
+ constructor(agentDir: string);
47
+ load(): Promise<void>;
48
+ record(modelKey: string, day: string, usage: CacheUsage): ModelCacheStats;
49
+ get(modelKey: string): ModelCacheStats | undefined;
50
+ all(): Record<string, ModelCacheStats>;
51
+ reset(modelKey?: string): void;
52
+ private schedulePersist;
53
+ flush(): Promise<void>;
54
+ }
55
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/core/prompt-cache/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,UAAU;IAC1B,+CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,gEAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,0EAAsE;IACtE,aAAa,EAAE,OAAO,CAAC;CACvB;AAQD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAyDvD;AAED,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAEvD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,CASrF;AAED,8DAA4D;AAC5D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CAMzE;AAOD,kFAAiF;AACjF,qBAAa,eAAe;IAC3B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAA0C;IACtD,OAAO,CAAC,KAAK,CAA8C;IAE3D,YAAY,QAAQ,EAAE,MAAM,EAE3B;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAO1B;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,CAOxE;IAED,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEjD;IAED,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAErC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAI7B;IAED,OAAO,CAAC,eAAe;IAMjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAW3B;CACD","sourcesContent":["/**\n * Lectura y persistencia de estadísticas de caché.\n *\n * Sin medición, todo lo demás es fe. Cada familia de proveedor reporta el uso de\n * caché con nombres distintos, y algunos proxies los omiten — en cuyo caso hay\n * que decirlo en vez de mostrar un 0% que parece un problema de caché cuando en\n * realidad es un problema de telemetría.\n */\n\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface CacheUsage {\n\t/** Tokens de entrada servidos desde caché. */\n\tcacheRead: number;\n\t/** Tokens escritos a la caché (Anthropic los cobra aparte). */\n\tcacheWrite: number;\n\t/** Total de tokens de entrada, incluyendo los cacheados. */\n\ttotalInput: number;\n\t/** True si el proveedor no reportó campos de caché (≠ 0 aciertos). */\n\tmissingFields: boolean;\n}\n\nconst ZERO: CacheUsage = { cacheRead: 0, cacheWrite: 0, totalInput: 0, missingFields: true };\n\nfunction num(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\n/**\n * Normaliza el usage de cualquier familia de proveedor.\n *\n * Los nombres NO son intercambiables:\n * - DeepSeek: `prompt_cache_hit_tokens` + `prompt_cache_miss_tokens` suman el total.\n * - OpenAI: `prompt_tokens_details.cached_tokens` es un SUBCONJUNTO de `prompt_tokens`.\n * - Anthropic: `input_tokens` EXCLUYE lo cacheado, así que hay que sumarlo.\n * - Gemini: `cachedContentTokenCount` sobre `promptTokenCount`.\n */\nexport function readCacheUsage(raw: unknown): CacheUsage {\n\tif (!raw || typeof raw !== \"object\") return { ...ZERO };\n\tconst u = raw as Record<string, unknown>;\n\n\t// DeepSeek\n\tif (\"prompt_cache_hit_tokens\" in u || \"prompt_cache_miss_tokens\" in u) {\n\t\tconst hit = num(u.prompt_cache_hit_tokens);\n\t\tconst miss = num(u.prompt_cache_miss_tokens);\n\t\treturn { cacheRead: hit, cacheWrite: 0, totalInput: hit + miss || num(u.prompt_tokens), missingFields: false };\n\t}\n\n\t// Anthropic: input_tokens NO incluye lo cacheado.\n\tif (\"cache_read_input_tokens\" in u || \"cache_creation_input_tokens\" in u) {\n\t\tconst read = num(u.cache_read_input_tokens);\n\t\tconst write = num(u.cache_creation_input_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\ttotalInput: num(u.input_tokens) + read + write,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// OpenAI: cached_tokens es subconjunto de prompt_tokens.\n\tconst details = (u.prompt_tokens_details ?? u.input_tokens_details) as Record<string, unknown> | undefined;\n\tif (details && typeof details === \"object\" && \"cached_tokens\" in details) {\n\t\tconst read = num(details.cached_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: num(u.cache_write_tokens),\n\t\t\ttotalInput: num(u.prompt_tokens) || num(u.input_tokens) || read,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// Gemini\n\tconst meta = u.usageMetadata as Record<string, unknown> | undefined;\n\tif (meta && typeof meta === \"object\" && \"cachedContentTokenCount\" in meta) {\n\t\tconst read = num(meta.cachedContentTokenCount);\n\t\treturn { cacheRead: read, cacheWrite: 0, totalInput: num(meta.promptTokenCount) || read, missingFields: false };\n\t}\n\n\t// Forma ya normalizada por el SDK.\n\tif (\"cacheRead\" in u || \"input\" in u) {\n\t\tconst read = num(u.cacheRead);\n\t\tconst write = num(u.cacheWrite);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\t// Suelo: el total nunca puede ser menor que lo cacheado, o saldrían\n\t\t\t// ratios por encima del 100% cuando un proxy omite el total.\n\t\t\ttotalInput: Math.max(num(u.input), read + write),\n\t\t\tmissingFields: !(\"cacheRead\" in u),\n\t\t};\n\t}\n\n\treturn { ...ZERO };\n}\n\nexport interface ModelCacheStats {\n\tday: string;\n\trequests: number;\n\thits: number;\n\tcachedTokens: number;\n\ttotalTokens: number;\n\tmissingFieldRequests: number;\n}\n\nexport function emptyStats(day: string): ModelCacheStats {\n\treturn { day, requests: 0, hits: 0, cachedTokens: 0, totalTokens: 0, missingFieldRequests: 0 };\n}\n\nexport function accumulate(stats: ModelCacheStats, usage: CacheUsage): ModelCacheStats {\n\treturn {\n\t\t...stats,\n\t\trequests: stats.requests + 1,\n\t\thits: stats.hits + (usage.cacheRead > 0 ? 1 : 0),\n\t\tcachedTokens: stats.cachedTokens + usage.cacheRead,\n\t\ttotalTokens: stats.totalTokens + usage.totalInput,\n\t\tmissingFieldRequests: stats.missingFieldRequests + (usage.missingFields ? 1 : 0),\n\t};\n}\n\n/** Línea del footer: `DS cache 42/57·1.20M/1.85M 64.9%`. */\nexport function formatStats(label: string, stats: ModelCacheStats): string {\n\tif (stats.requests === 0) return \"\";\n\tconst pct = stats.totalTokens > 0 ? ((stats.cachedTokens / stats.totalTokens) * 100).toFixed(1) : \"0.0\";\n\tconst m = (n: number) => `${(n / 1_000_000).toFixed(2)}M`;\n\tconst warn = stats.missingFieldRequests > 0 ? \" ⚠️ sin datos de caché\" : \"\";\n\treturn `${label} ${stats.hits}/${stats.requests}·${m(stats.cachedTokens)}/${m(stats.totalTokens)} ${pct}%${warn}`;\n}\n\ninterface StatsFile {\n\tversion: 1;\n\tbyModel: Record<string, ModelCacheStats>;\n}\n\n/** Persistencia con escritura debounced; el disco nunca bloquea una petición. */\nexport class CacheStatsStore {\n\tprivate path: string;\n\tprivate data: StatsFile = { version: 1, byModel: {} };\n\tprivate timer: ReturnType<typeof setTimeout> | null = null;\n\n\tconstructor(agentDir: string) {\n\t\tthis.path = join(agentDir, \"prompt-cache-stats.json\");\n\t}\n\n\tasync load(): Promise<void> {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(await readFile(this.path, \"utf-8\")) as StatsFile;\n\t\t\tif (parsed.version === 1 && parsed.byModel) this.data = parsed;\n\t\t} catch {\n\t\t\t// primer arranque / fichero corrupto: se empieza de cero\n\t\t}\n\t}\n\n\trecord(modelKey: string, day: string, usage: CacheUsage): ModelCacheStats {\n\t\tconst current = this.data.byModel[modelKey];\n\t\tconst base = current && current.day === day ? current : emptyStats(day);\n\t\tconst next = accumulate(base, usage);\n\t\tthis.data.byModel[modelKey] = next;\n\t\tthis.schedulePersist();\n\t\treturn next;\n\t}\n\n\tget(modelKey: string): ModelCacheStats | undefined {\n\t\treturn this.data.byModel[modelKey];\n\t}\n\n\tall(): Record<string, ModelCacheStats> {\n\t\treturn { ...this.data.byModel };\n\t}\n\n\treset(modelKey?: string): void {\n\t\tif (modelKey) delete this.data.byModel[modelKey];\n\t\telse this.data.byModel = {};\n\t\tthis.schedulePersist();\n\t}\n\n\tprivate schedulePersist(): void {\n\t\tif (this.timer) clearTimeout(this.timer);\n\t\tthis.timer = setTimeout(() => void this.flush(), 2000);\n\t\t(this.timer as unknown as { unref?: () => void }).unref?.();\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = null;\n\t\t}\n\t\ttry {\n\t\t\tawait mkdir(dirname(this.path), { recursive: true });\n\t\t\tawait writeFile(this.path, JSON.stringify(this.data), \"utf-8\");\n\t\t} catch {\n\t\t\t// las estadísticas nunca deben romper una sesión\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Lectura y persistencia de estadísticas de caché.
3
+ *
4
+ * Sin medición, todo lo demás es fe. Cada familia de proveedor reporta el uso de
5
+ * caché con nombres distintos, y algunos proxies los omiten — en cuyo caso hay
6
+ * que decirlo en vez de mostrar un 0% que parece un problema de caché cuando en
7
+ * realidad es un problema de telemetría.
8
+ */
9
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
10
+ import { dirname, join } from "node:path";
11
+ const ZERO = { cacheRead: 0, cacheWrite: 0, totalInput: 0, missingFields: true };
12
+ function num(value) {
13
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
14
+ }
15
+ /**
16
+ * Normaliza el usage de cualquier familia de proveedor.
17
+ *
18
+ * Los nombres NO son intercambiables:
19
+ * - DeepSeek: `prompt_cache_hit_tokens` + `prompt_cache_miss_tokens` suman el total.
20
+ * - OpenAI: `prompt_tokens_details.cached_tokens` es un SUBCONJUNTO de `prompt_tokens`.
21
+ * - Anthropic: `input_tokens` EXCLUYE lo cacheado, así que hay que sumarlo.
22
+ * - Gemini: `cachedContentTokenCount` sobre `promptTokenCount`.
23
+ */
24
+ export function readCacheUsage(raw) {
25
+ if (!raw || typeof raw !== "object")
26
+ return { ...ZERO };
27
+ const u = raw;
28
+ // DeepSeek
29
+ if ("prompt_cache_hit_tokens" in u || "prompt_cache_miss_tokens" in u) {
30
+ const hit = num(u.prompt_cache_hit_tokens);
31
+ const miss = num(u.prompt_cache_miss_tokens);
32
+ return { cacheRead: hit, cacheWrite: 0, totalInput: hit + miss || num(u.prompt_tokens), missingFields: false };
33
+ }
34
+ // Anthropic: input_tokens NO incluye lo cacheado.
35
+ if ("cache_read_input_tokens" in u || "cache_creation_input_tokens" in u) {
36
+ const read = num(u.cache_read_input_tokens);
37
+ const write = num(u.cache_creation_input_tokens);
38
+ return {
39
+ cacheRead: read,
40
+ cacheWrite: write,
41
+ totalInput: num(u.input_tokens) + read + write,
42
+ missingFields: false,
43
+ };
44
+ }
45
+ // OpenAI: cached_tokens es subconjunto de prompt_tokens.
46
+ const details = (u.prompt_tokens_details ?? u.input_tokens_details);
47
+ if (details && typeof details === "object" && "cached_tokens" in details) {
48
+ const read = num(details.cached_tokens);
49
+ return {
50
+ cacheRead: read,
51
+ cacheWrite: num(u.cache_write_tokens),
52
+ totalInput: num(u.prompt_tokens) || num(u.input_tokens) || read,
53
+ missingFields: false,
54
+ };
55
+ }
56
+ // Gemini
57
+ const meta = u.usageMetadata;
58
+ if (meta && typeof meta === "object" && "cachedContentTokenCount" in meta) {
59
+ const read = num(meta.cachedContentTokenCount);
60
+ return { cacheRead: read, cacheWrite: 0, totalInput: num(meta.promptTokenCount) || read, missingFields: false };
61
+ }
62
+ // Forma ya normalizada por el SDK.
63
+ if ("cacheRead" in u || "input" in u) {
64
+ const read = num(u.cacheRead);
65
+ const write = num(u.cacheWrite);
66
+ return {
67
+ cacheRead: read,
68
+ cacheWrite: write,
69
+ // Suelo: el total nunca puede ser menor que lo cacheado, o saldrían
70
+ // ratios por encima del 100% cuando un proxy omite el total.
71
+ totalInput: Math.max(num(u.input), read + write),
72
+ missingFields: !("cacheRead" in u),
73
+ };
74
+ }
75
+ return { ...ZERO };
76
+ }
77
+ export function emptyStats(day) {
78
+ return { day, requests: 0, hits: 0, cachedTokens: 0, totalTokens: 0, missingFieldRequests: 0 };
79
+ }
80
+ export function accumulate(stats, usage) {
81
+ return {
82
+ ...stats,
83
+ requests: stats.requests + 1,
84
+ hits: stats.hits + (usage.cacheRead > 0 ? 1 : 0),
85
+ cachedTokens: stats.cachedTokens + usage.cacheRead,
86
+ totalTokens: stats.totalTokens + usage.totalInput,
87
+ missingFieldRequests: stats.missingFieldRequests + (usage.missingFields ? 1 : 0),
88
+ };
89
+ }
90
+ /** Línea del footer: `DS cache 42/57·1.20M/1.85M 64.9%`. */
91
+ export function formatStats(label, stats) {
92
+ if (stats.requests === 0)
93
+ return "";
94
+ const pct = stats.totalTokens > 0 ? ((stats.cachedTokens / stats.totalTokens) * 100).toFixed(1) : "0.0";
95
+ const m = (n) => `${(n / 1_000_000).toFixed(2)}M`;
96
+ const warn = stats.missingFieldRequests > 0 ? " ⚠️ sin datos de caché" : "";
97
+ return `${label} ${stats.hits}/${stats.requests}·${m(stats.cachedTokens)}/${m(stats.totalTokens)} ${pct}%${warn}`;
98
+ }
99
+ /** Persistencia con escritura debounced; el disco nunca bloquea una petición. */
100
+ export class CacheStatsStore {
101
+ path;
102
+ data = { version: 1, byModel: {} };
103
+ timer = null;
104
+ constructor(agentDir) {
105
+ this.path = join(agentDir, "prompt-cache-stats.json");
106
+ }
107
+ async load() {
108
+ try {
109
+ const parsed = JSON.parse(await readFile(this.path, "utf-8"));
110
+ if (parsed.version === 1 && parsed.byModel)
111
+ this.data = parsed;
112
+ }
113
+ catch {
114
+ // primer arranque / fichero corrupto: se empieza de cero
115
+ }
116
+ }
117
+ record(modelKey, day, usage) {
118
+ const current = this.data.byModel[modelKey];
119
+ const base = current && current.day === day ? current : emptyStats(day);
120
+ const next = accumulate(base, usage);
121
+ this.data.byModel[modelKey] = next;
122
+ this.schedulePersist();
123
+ return next;
124
+ }
125
+ get(modelKey) {
126
+ return this.data.byModel[modelKey];
127
+ }
128
+ all() {
129
+ return { ...this.data.byModel };
130
+ }
131
+ reset(modelKey) {
132
+ if (modelKey)
133
+ delete this.data.byModel[modelKey];
134
+ else
135
+ this.data.byModel = {};
136
+ this.schedulePersist();
137
+ }
138
+ schedulePersist() {
139
+ if (this.timer)
140
+ clearTimeout(this.timer);
141
+ this.timer = setTimeout(() => void this.flush(), 2000);
142
+ this.timer.unref?.();
143
+ }
144
+ async flush() {
145
+ if (this.timer) {
146
+ clearTimeout(this.timer);
147
+ this.timer = null;
148
+ }
149
+ try {
150
+ await mkdir(dirname(this.path), { recursive: true });
151
+ await writeFile(this.path, JSON.stringify(this.data), "utf-8");
152
+ }
153
+ catch {
154
+ // las estadísticas nunca deben romper una sesión
155
+ }
156
+ }
157
+ }
158
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/core/prompt-cache/stats.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Lectura y persistencia de estadísticas de caché.\n *\n * Sin medición, todo lo demás es fe. Cada familia de proveedor reporta el uso de\n * caché con nombres distintos, y algunos proxies los omiten — en cuyo caso hay\n * que decirlo en vez de mostrar un 0% que parece un problema de caché cuando en\n * realidad es un problema de telemetría.\n */\n\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface CacheUsage {\n\t/** Tokens de entrada servidos desde caché. */\n\tcacheRead: number;\n\t/** Tokens escritos a la caché (Anthropic los cobra aparte). */\n\tcacheWrite: number;\n\t/** Total de tokens de entrada, incluyendo los cacheados. */\n\ttotalInput: number;\n\t/** True si el proveedor no reportó campos de caché (≠ 0 aciertos). */\n\tmissingFields: boolean;\n}\n\nconst ZERO: CacheUsage = { cacheRead: 0, cacheWrite: 0, totalInput: 0, missingFields: true };\n\nfunction num(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\n/**\n * Normaliza el usage de cualquier familia de proveedor.\n *\n * Los nombres NO son intercambiables:\n * - DeepSeek: `prompt_cache_hit_tokens` + `prompt_cache_miss_tokens` suman el total.\n * - OpenAI: `prompt_tokens_details.cached_tokens` es un SUBCONJUNTO de `prompt_tokens`.\n * - Anthropic: `input_tokens` EXCLUYE lo cacheado, así que hay que sumarlo.\n * - Gemini: `cachedContentTokenCount` sobre `promptTokenCount`.\n */\nexport function readCacheUsage(raw: unknown): CacheUsage {\n\tif (!raw || typeof raw !== \"object\") return { ...ZERO };\n\tconst u = raw as Record<string, unknown>;\n\n\t// DeepSeek\n\tif (\"prompt_cache_hit_tokens\" in u || \"prompt_cache_miss_tokens\" in u) {\n\t\tconst hit = num(u.prompt_cache_hit_tokens);\n\t\tconst miss = num(u.prompt_cache_miss_tokens);\n\t\treturn { cacheRead: hit, cacheWrite: 0, totalInput: hit + miss || num(u.prompt_tokens), missingFields: false };\n\t}\n\n\t// Anthropic: input_tokens NO incluye lo cacheado.\n\tif (\"cache_read_input_tokens\" in u || \"cache_creation_input_tokens\" in u) {\n\t\tconst read = num(u.cache_read_input_tokens);\n\t\tconst write = num(u.cache_creation_input_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\ttotalInput: num(u.input_tokens) + read + write,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// OpenAI: cached_tokens es subconjunto de prompt_tokens.\n\tconst details = (u.prompt_tokens_details ?? u.input_tokens_details) as Record<string, unknown> | undefined;\n\tif (details && typeof details === \"object\" && \"cached_tokens\" in details) {\n\t\tconst read = num(details.cached_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: num(u.cache_write_tokens),\n\t\t\ttotalInput: num(u.prompt_tokens) || num(u.input_tokens) || read,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// Gemini\n\tconst meta = u.usageMetadata as Record<string, unknown> | undefined;\n\tif (meta && typeof meta === \"object\" && \"cachedContentTokenCount\" in meta) {\n\t\tconst read = num(meta.cachedContentTokenCount);\n\t\treturn { cacheRead: read, cacheWrite: 0, totalInput: num(meta.promptTokenCount) || read, missingFields: false };\n\t}\n\n\t// Forma ya normalizada por el SDK.\n\tif (\"cacheRead\" in u || \"input\" in u) {\n\t\tconst read = num(u.cacheRead);\n\t\tconst write = num(u.cacheWrite);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\t// Suelo: el total nunca puede ser menor que lo cacheado, o saldrían\n\t\t\t// ratios por encima del 100% cuando un proxy omite el total.\n\t\t\ttotalInput: Math.max(num(u.input), read + write),\n\t\t\tmissingFields: !(\"cacheRead\" in u),\n\t\t};\n\t}\n\n\treturn { ...ZERO };\n}\n\nexport interface ModelCacheStats {\n\tday: string;\n\trequests: number;\n\thits: number;\n\tcachedTokens: number;\n\ttotalTokens: number;\n\tmissingFieldRequests: number;\n}\n\nexport function emptyStats(day: string): ModelCacheStats {\n\treturn { day, requests: 0, hits: 0, cachedTokens: 0, totalTokens: 0, missingFieldRequests: 0 };\n}\n\nexport function accumulate(stats: ModelCacheStats, usage: CacheUsage): ModelCacheStats {\n\treturn {\n\t\t...stats,\n\t\trequests: stats.requests + 1,\n\t\thits: stats.hits + (usage.cacheRead > 0 ? 1 : 0),\n\t\tcachedTokens: stats.cachedTokens + usage.cacheRead,\n\t\ttotalTokens: stats.totalTokens + usage.totalInput,\n\t\tmissingFieldRequests: stats.missingFieldRequests + (usage.missingFields ? 1 : 0),\n\t};\n}\n\n/** Línea del footer: `DS cache 42/57·1.20M/1.85M 64.9%`. */\nexport function formatStats(label: string, stats: ModelCacheStats): string {\n\tif (stats.requests === 0) return \"\";\n\tconst pct = stats.totalTokens > 0 ? ((stats.cachedTokens / stats.totalTokens) * 100).toFixed(1) : \"0.0\";\n\tconst m = (n: number) => `${(n / 1_000_000).toFixed(2)}M`;\n\tconst warn = stats.missingFieldRequests > 0 ? \" ⚠️ sin datos de caché\" : \"\";\n\treturn `${label} ${stats.hits}/${stats.requests}·${m(stats.cachedTokens)}/${m(stats.totalTokens)} ${pct}%${warn}`;\n}\n\ninterface StatsFile {\n\tversion: 1;\n\tbyModel: Record<string, ModelCacheStats>;\n}\n\n/** Persistencia con escritura debounced; el disco nunca bloquea una petición. */\nexport class CacheStatsStore {\n\tprivate path: string;\n\tprivate data: StatsFile = { version: 1, byModel: {} };\n\tprivate timer: ReturnType<typeof setTimeout> | null = null;\n\n\tconstructor(agentDir: string) {\n\t\tthis.path = join(agentDir, \"prompt-cache-stats.json\");\n\t}\n\n\tasync load(): Promise<void> {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(await readFile(this.path, \"utf-8\")) as StatsFile;\n\t\t\tif (parsed.version === 1 && parsed.byModel) this.data = parsed;\n\t\t} catch {\n\t\t\t// primer arranque / fichero corrupto: se empieza de cero\n\t\t}\n\t}\n\n\trecord(modelKey: string, day: string, usage: CacheUsage): ModelCacheStats {\n\t\tconst current = this.data.byModel[modelKey];\n\t\tconst base = current && current.day === day ? current : emptyStats(day);\n\t\tconst next = accumulate(base, usage);\n\t\tthis.data.byModel[modelKey] = next;\n\t\tthis.schedulePersist();\n\t\treturn next;\n\t}\n\n\tget(modelKey: string): ModelCacheStats | undefined {\n\t\treturn this.data.byModel[modelKey];\n\t}\n\n\tall(): Record<string, ModelCacheStats> {\n\t\treturn { ...this.data.byModel };\n\t}\n\n\treset(modelKey?: string): void {\n\t\tif (modelKey) delete this.data.byModel[modelKey];\n\t\telse this.data.byModel = {};\n\t\tthis.schedulePersist();\n\t}\n\n\tprivate schedulePersist(): void {\n\t\tif (this.timer) clearTimeout(this.timer);\n\t\tthis.timer = setTimeout(() => void this.flush(), 2000);\n\t\t(this.timer as unknown as { unref?: () => void }).unref?.();\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = null;\n\t\t}\n\t\ttry {\n\t\t\tawait mkdir(dirname(this.path), { recursive: true });\n\t\t\tawait writeFile(this.path, JSON.stringify(this.data), \"utf-8\");\n\t\t} catch {\n\t\t\t// las estadísticas nunca deben romper una sesión\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * La regla de elección de herramienta, en un solo sitio y construida con lo que
3
+ * de verdad está disponible.
4
+ *
5
+ * Antes vivía duplicada literalmente en `browser/tools.ts` y `computer/tools.ts`,
6
+ * y cada copia enrutaba a las cuatro familias — incluida la que su propio
7
+ * fichero no podía garantizar. Con el control del ordenador apagado, el prompt
8
+ * seguía diciendo "una aplicación de escritorio → computer_*" y esas tools no
9
+ * existían para el modelo. El agente las pedía, recibía un error opaco, y desde
10
+ * fuera parecía que "no sabe elegir herramienta".
11
+ *
12
+ * Una regla que nombra destinos inexistentes es peor que no tener regla: manda
13
+ * en la dirección equivocada con la autoridad del prompt de sistema.
14
+ */
15
+ export interface DestinosDisponibles {
16
+ /** Las tools `browser_*` están registradas. */
17
+ navegador: boolean;
18
+ /** Las tools `computer_*` están registradas. */
19
+ ordenador: boolean;
20
+ }
21
+ /**
22
+ * Devuelve la línea de enrutado, omitiendo lo que no existe.
23
+ *
24
+ * `web_fetch` y `bash` van siempre porque siempre están: son el suelo del
25
+ * agente. Los otros dos son opcionales y cada uno tiene su interruptor.
26
+ */
27
+ export declare function reglaDeEleccion(disponibles: DestinosDisponibles): string;
28
+ /**
29
+ * Qué decirle al agente sobre los navegadores cuando NO tiene tools de
30
+ * navegador.
31
+ *
32
+ * La política del control del ordenador impide teclear en un navegador, y su
33
+ * mensaje de error redirige a `browser_*`. Si esas tools están apagadas, esa
34
+ * redirección apunta al vacío y el agente se queda sin salida. Mejor decírselo
35
+ * antes: no es que deba usar otra cosa, es que no puede hacerlo.
36
+ */
37
+ export declare function avisoSinNavegador(): string;
38
+ //# sourceMappingURL=prompt-eleccion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-eleccion.d.ts","sourceRoot":"","sources":["../../src/core/prompt-eleccion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,mBAAmB;IACnC,gDAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,iDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAUxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C","sourcesContent":["/**\n * La regla de elección de herramienta, en un solo sitio y construida con lo que\n * de verdad está disponible.\n *\n * Antes vivía duplicada literalmente en `browser/tools.ts` y `computer/tools.ts`,\n * y cada copia enrutaba a las cuatro familias — incluida la que su propio\n * fichero no podía garantizar. Con el control del ordenador apagado, el prompt\n * seguía diciendo \"una aplicación de escritorio → computer_*\" y esas tools no\n * existían para el modelo. El agente las pedía, recibía un error opaco, y desde\n * fuera parecía que \"no sabe elegir herramienta\".\n *\n * Una regla que nombra destinos inexistentes es peor que no tener regla: manda\n * en la dirección equivocada con la autoridad del prompt de sistema.\n */\n\nexport interface DestinosDisponibles {\n\t/** Las tools `browser_*` están registradas. */\n\tnavegador: boolean;\n\t/** Las tools `computer_*` están registradas. */\n\tordenador: boolean;\n}\n\n/**\n * Devuelve la línea de enrutado, omitiendo lo que no existe.\n *\n * `web_fetch` y `bash` van siempre porque siempre están: son el suelo del\n * agente. Los otros dos son opcionales y cada uno tiene su interruptor.\n */\nexport function reglaDeEleccion(disponibles: DestinosDisponibles): string {\n\tconst destinos = [\"leer una URL sin tocar nada → web_fetch\"];\n\tif (disponibles.navegador) {\n\t\tdestinos.push(\"interactuar con una web, incluida tu app en localhost → browser_*\");\n\t}\n\tdestinos.push(\"ejecutar comandos, git o mover ficheros → bash\");\n\tif (disponibles.ordenador) {\n\t\tdestinos.push(\"una aplicación de escritorio que no sea navegador ni terminal → computer_*\");\n\t}\n\treturn `Elegir herramienta: ${destinos.join(\"; \")}.`;\n}\n\n/**\n * Qué decirle al agente sobre los navegadores cuando NO tiene tools de\n * navegador.\n *\n * La política del control del ordenador impide teclear en un navegador, y su\n * mensaje de error redirige a `browser_*`. Si esas tools están apagadas, esa\n * redirección apunta al vacío y el agente se queda sin salida. Mejor decírselo\n * antes: no es que deba usar otra cosa, es que no puede hacerlo.\n */\nexport function avisoSinNavegador(): string {\n\treturn (\n\t\t\"No tienes tools de navegador en esta sesión: no puedes manejar páginas web. \" +\n\t\t\"Para leer una URL usa web_fetch. Si la tarea necesita interactuar con una web, \" +\n\t\t\"díselo al usuario en vez de intentarlo por otra vía.\"\n\t);\n}\n"]}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * La regla de elección de herramienta, en un solo sitio y construida con lo que
3
+ * de verdad está disponible.
4
+ *
5
+ * Antes vivía duplicada literalmente en `browser/tools.ts` y `computer/tools.ts`,
6
+ * y cada copia enrutaba a las cuatro familias — incluida la que su propio
7
+ * fichero no podía garantizar. Con el control del ordenador apagado, el prompt
8
+ * seguía diciendo "una aplicación de escritorio → computer_*" y esas tools no
9
+ * existían para el modelo. El agente las pedía, recibía un error opaco, y desde
10
+ * fuera parecía que "no sabe elegir herramienta".
11
+ *
12
+ * Una regla que nombra destinos inexistentes es peor que no tener regla: manda
13
+ * en la dirección equivocada con la autoridad del prompt de sistema.
14
+ */
15
+ /**
16
+ * Devuelve la línea de enrutado, omitiendo lo que no existe.
17
+ *
18
+ * `web_fetch` y `bash` van siempre porque siempre están: son el suelo del
19
+ * agente. Los otros dos son opcionales y cada uno tiene su interruptor.
20
+ */
21
+ export function reglaDeEleccion(disponibles) {
22
+ const destinos = ["leer una URL sin tocar nada → web_fetch"];
23
+ if (disponibles.navegador) {
24
+ destinos.push("interactuar con una web, incluida tu app en localhost → browser_*");
25
+ }
26
+ destinos.push("ejecutar comandos, git o mover ficheros → bash");
27
+ if (disponibles.ordenador) {
28
+ destinos.push("una aplicación de escritorio que no sea navegador ni terminal → computer_*");
29
+ }
30
+ return `Elegir herramienta: ${destinos.join("; ")}.`;
31
+ }
32
+ /**
33
+ * Qué decirle al agente sobre los navegadores cuando NO tiene tools de
34
+ * navegador.
35
+ *
36
+ * La política del control del ordenador impide teclear en un navegador, y su
37
+ * mensaje de error redirige a `browser_*`. Si esas tools están apagadas, esa
38
+ * redirección apunta al vacío y el agente se queda sin salida. Mejor decírselo
39
+ * antes: no es que deba usar otra cosa, es que no puede hacerlo.
40
+ */
41
+ export function avisoSinNavegador() {
42
+ return ("No tienes tools de navegador en esta sesión: no puedes manejar páginas web. " +
43
+ "Para leer una URL usa web_fetch. Si la tarea necesita interactuar con una web, " +
44
+ "díselo al usuario en vez de intentarlo por otra vía.");
45
+ }
46
+ //# sourceMappingURL=prompt-eleccion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-eleccion.js","sourceRoot":"","sources":["../../src/core/prompt-eleccion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,WAAgC,EAAU;IACzE,MAAM,QAAQ,GAAG,CAAC,2CAAyC,CAAC,CAAC;IAC7D,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,qEAAmE,CAAC,CAAC;IACpF,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,kDAAgD,CAAC,CAAC;IAChE,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,+EAA4E,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,uBAAuB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAAA,CACrD;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,GAAW;IAC3C,OAAO,CACN,gFAA8E;QAC9E,iFAAiF;QACjF,wDAAsD,CACtD,CAAC;AAAA,CACF","sourcesContent":["/**\n * La regla de elección de herramienta, en un solo sitio y construida con lo que\n * de verdad está disponible.\n *\n * Antes vivía duplicada literalmente en `browser/tools.ts` y `computer/tools.ts`,\n * y cada copia enrutaba a las cuatro familias — incluida la que su propio\n * fichero no podía garantizar. Con el control del ordenador apagado, el prompt\n * seguía diciendo \"una aplicación de escritorio → computer_*\" y esas tools no\n * existían para el modelo. El agente las pedía, recibía un error opaco, y desde\n * fuera parecía que \"no sabe elegir herramienta\".\n *\n * Una regla que nombra destinos inexistentes es peor que no tener regla: manda\n * en la dirección equivocada con la autoridad del prompt de sistema.\n */\n\nexport interface DestinosDisponibles {\n\t/** Las tools `browser_*` están registradas. */\n\tnavegador: boolean;\n\t/** Las tools `computer_*` están registradas. */\n\tordenador: boolean;\n}\n\n/**\n * Devuelve la línea de enrutado, omitiendo lo que no existe.\n *\n * `web_fetch` y `bash` van siempre porque siempre están: son el suelo del\n * agente. Los otros dos son opcionales y cada uno tiene su interruptor.\n */\nexport function reglaDeEleccion(disponibles: DestinosDisponibles): string {\n\tconst destinos = [\"leer una URL sin tocar nada → web_fetch\"];\n\tif (disponibles.navegador) {\n\t\tdestinos.push(\"interactuar con una web, incluida tu app en localhost → browser_*\");\n\t}\n\tdestinos.push(\"ejecutar comandos, git o mover ficheros → bash\");\n\tif (disponibles.ordenador) {\n\t\tdestinos.push(\"una aplicación de escritorio que no sea navegador ni terminal → computer_*\");\n\t}\n\treturn `Elegir herramienta: ${destinos.join(\"; \")}.`;\n}\n\n/**\n * Qué decirle al agente sobre los navegadores cuando NO tiene tools de\n * navegador.\n *\n * La política del control del ordenador impide teclear en un navegador, y su\n * mensaje de error redirige a `browser_*`. Si esas tools están apagadas, esa\n * redirección apunta al vacío y el agente se queda sin salida. Mejor decírselo\n * antes: no es que deba usar otra cosa, es que no puede hacerlo.\n */\nexport function avisoSinNavegador(): string {\n\treturn (\n\t\t\"No tienes tools de navegador en esta sesión: no puedes manejar páginas web. \" +\n\t\t\"Para leer una URL usa web_fetch. Si la tarea necesita interactuar con una web, \" +\n\t\t\"díselo al usuario en vez de intentarlo por otra vía.\"\n\t);\n}\n"]}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Monta el prompt del sistema desde `sistema.md`.
3
+ *
4
+ * DE DÓNDE VIENE ESTO. El prompt de Ada era una cadena dentro de
5
+ * `system-prompt.ts` con dos directrices —«Be concise» y «Show file paths
6
+ * clearly»— más un bloque sobre dónde vive la documentación de Ada. Es decir:
7
+ * le explicábamos al modelo dónde están NUESTROS documentos y no le
8
+ * explicábamos cómo programar bien.
9
+ *
10
+ * Y había un dato peor, medido: de las TRECE capacidades construidas en cuatro
11
+ * tandas de trabajo (`lsp`, `ast_edit`, `hashline`, `remoto`, `web_search`,
12
+ * `computer`, `browser`, `audit`, `banco`, `cleanse`, `discover`, `review`,
13
+ * `ast_search`), **ninguna aparecía en el prompt**. De nuestras tools, solo UNA
14
+ * definía `promptSnippet`. El modelo veía el nombre y nada más: ni cuándo usar
15
+ * `lsp_references` antes de renombrar, ni que `ast_edit` es para codemods.
16
+ *
17
+ * Es capacidad construida y desenchufada en su forma más difícil de ver: la
18
+ * herramienta está registrada, así que NADA FALLA. Solo hay un agente peor de
19
+ * lo que debería, sin error que investigar.
20
+ *
21
+ * DOS DECISIONES QUE NO SON DE ESTILO:
22
+ *
23
+ * 1. **Si falta el `.md`, se LANZA.** Un `catch` que devolviera cadena vacía
24
+ * dejaría al agente sin prompt del sistema —sin doctrina, sin contrato de
25
+ * entrega, sin las reglas de cumplimiento— y arrancaría igual. Sería el
26
+ * fallo que se lee como éxito en el sitio más caro posible. Como `dist/` es
27
+ * superficie ciega para vitest (las pruebas leen `src/`, el paquete
28
+ * publicado lee `dist/`), esto además convierte un `copy-assets` olvidado en
29
+ * un arranque roto y visible en vez de en un agente silenciosamente tonto.
30
+ *
31
+ * 2. **Los nombres de herramienta salen del registro, no de la plantilla.** Si
32
+ * alguien renombra `ast_search`, la línea del prompt que lo menciona se
33
+ * queda mintiendo, y un prompt que nombra una tool inexistente le enseña al
34
+ * modelo a desconfiar de sus instrucciones. Aquí la lista se construye desde
35
+ * los nombres reales que recibe `montarPromptDelSistema`.
36
+ */
37
+ import { type Contexto } from "./plantilla.ts";
38
+ /** Qué sabe el montador sobre la sesión. Todo opcional salvo las tools. */
39
+ export interface EntradaDelPrompt {
40
+ /** Los nombres de tool REALES y activos de esta sesión. */
41
+ nombresDeHerramienta: readonly string[];
42
+ /** Frases de una línea por tool, si la tool las aporta. */
43
+ frasesDeHerramienta?: Readonly<Record<string, string>>;
44
+ personalidad?: string;
45
+ /**
46
+ * `true` cuando la política de aprobación está en modo plan.
47
+ *
48
+ * Existe porque el modo plan estaba impuesto SOLO en código: `decidir()`
49
+ * devuelve `denegada` con política `modo-plan` para toda escritura y toda
50
+ * ejecución, y el prompt no lo mencionaba. El modelo intentaba editar, se
51
+ * llevaba un rechazo que no esperaba, y gastaba turnos aprendiendo por
52
+ * golpes una regla que se le podía haber dicho: el guardián estaba
53
+ * construido y el modelo no lo conocía.
54
+ */
55
+ modoPlan?: boolean;
56
+ /**
57
+ * Tools que el usuario ha denegado (`permissions.denied`).
58
+ *
59
+ * No es lo mismo que «no activa»: una tool denegada SIGUE en el inventario y
60
+ * en el conjunto activo, y lo que la para es `decidir()`, que consulta el
61
+ * `deny` del usuario en el paso 3 —antes del modo— y contesta `denegada` con
62
+ * política `deny-de-usuario`. Filtrar solo por `nivelDe` dejaba a la sección
63
+ * de modo plan prometiendo, por ejemplo, `web_fetch` con `permissions.denied:
64
+ * ["web_fetch"]` en settings: el rechazo inesperado que esta sección existe
65
+ * para evitar, servido por la propia sección.
66
+ */
67
+ toolsDenegadas?: readonly string[];
68
+ }
69
+ /** El contexto que ve la plantilla. Público porque las pruebas lo comprueban. */
70
+ export declare function contextoDelPrompt(entrada: EntradaDelPrompt): Contexto;
71
+ /** Solo para pruebas: olvida la plantilla cacheada. */
72
+ export declare function __olvidarPlantillaParaPruebas(): void;
73
+ /** El prompt del sistema de Ada, con las secciones que la sesión merece. */
74
+ export declare function montarPromptDelSistema(entrada: EntradaDelPrompt): string;
75
+ //# sourceMappingURL=montar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"montar.d.ts","sourceRoot":"","sources":["../../../src/core/prompts/montar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAMH,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,gBAAgB,CAAC;AAI3D,6EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAChC,4DAA2D;IAC3D,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,4DAA2D;IAC3D,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAgDD,kFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,QAAQ,CAgCrE;AAsBD,uDAAuD;AACvD,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AAED,6EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAIxE","sourcesContent":["/**\n * Monta el prompt del sistema desde `sistema.md`.\n *\n * DE DÓNDE VIENE ESTO. El prompt de Ada era una cadena dentro de\n * `system-prompt.ts` con dos directrices —«Be concise» y «Show file paths\n * clearly»— más un bloque sobre dónde vive la documentación de Ada. Es decir:\n * le explicábamos al modelo dónde están NUESTROS documentos y no le\n * explicábamos cómo programar bien.\n *\n * Y había un dato peor, medido: de las TRECE capacidades construidas en cuatro\n * tandas de trabajo (`lsp`, `ast_edit`, `hashline`, `remoto`, `web_search`,\n * `computer`, `browser`, `audit`, `banco`, `cleanse`, `discover`, `review`,\n * `ast_search`), **ninguna aparecía en el prompt**. De nuestras tools, solo UNA\n * definía `promptSnippet`. El modelo veía el nombre y nada más: ni cuándo usar\n * `lsp_references` antes de renombrar, ni que `ast_edit` es para codemods.\n *\n * Es capacidad construida y desenchufada en su forma más difícil de ver: la\n * herramienta está registrada, así que NADA FALLA. Solo hay un agente peor de\n * lo que debería, sin error que investigar.\n *\n * DOS DECISIONES QUE NO SON DE ESTILO:\n *\n * 1. **Si falta el `.md`, se LANZA.** Un `catch` que devolviera cadena vacía\n * dejaría al agente sin prompt del sistema —sin doctrina, sin contrato de\n * entrega, sin las reglas de cumplimiento— y arrancaría igual. Sería el\n * fallo que se lee como éxito en el sitio más caro posible. Como `dist/` es\n * superficie ciega para vitest (las pruebas leen `src/`, el paquete\n * publicado lee `dist/`), esto además convierte un `copy-assets` olvidado en\n * un arranque roto y visible en vez de en un agente silenciosamente tonto.\n *\n * 2. **Los nombres de herramienta salen del registro, no de la plantilla.** Si\n * alguien renombra `ast_search`, la línea del prompt que lo menciona se\n * queda mintiendo, y un prompt que nombra una tool inexistente le enseña al\n * modelo a desconfiar de sus instrucciones. Aquí la lista se construye desde\n * los nombres reales que recibe `montarPromptDelSistema`.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { nivelDe } from \"../aprobacion/politica.ts\";\nimport { type Contexto, renderizar } from \"./plantilla.ts\";\n\nconst NOMBRE = \"sistema.md\";\n\n/** Qué sabe el montador sobre la sesión. Todo opcional salvo las tools. */\nexport interface EntradaDelPrompt {\n\t/** Los nombres de tool REALES y activos de esta sesión. */\n\tnombresDeHerramienta: readonly string[];\n\t/** Frases de una línea por tool, si la tool las aporta. */\n\tfrasesDeHerramienta?: Readonly<Record<string, string>>;\n\tpersonalidad?: string;\n\t/**\n\t * `true` cuando la política de aprobación está en modo plan.\n\t *\n\t * Existe porque el modo plan estaba impuesto SOLO en código: `decidir()`\n\t * devuelve `denegada` con política `modo-plan` para toda escritura y toda\n\t * ejecución, y el prompt no lo mencionaba. El modelo intentaba editar, se\n\t * llevaba un rechazo que no esperaba, y gastaba turnos aprendiendo por\n\t * golpes una regla que se le podía haber dicho: el guardián estaba\n\t * construido y el modelo no lo conocía.\n\t */\n\tmodoPlan?: boolean;\n\t/**\n\t * Tools que el usuario ha denegado (`permissions.denied`).\n\t *\n\t * No es lo mismo que «no activa»: una tool denegada SIGUE en el inventario y\n\t * en el conjunto activo, y lo que la para es `decidir()`, que consulta el\n\t * `deny` del usuario en el paso 3 —antes del modo— y contesta `denegada` con\n\t * política `deny-de-usuario`. Filtrar solo por `nivelDe` dejaba a la sección\n\t * de modo plan prometiendo, por ejemplo, `web_fetch` con `permissions.denied:\n\t * [\"web_fetch\"]` en settings: el rechazo inesperado que esta sección existe\n\t * para evitar, servido por la propia sección.\n\t */\n\ttoolsDenegadas?: readonly string[];\n}\n\n/**\n * Una línea por herramienta especializada, construida desde los nombres reales.\n *\n * Solo se listan las que el modelo confunde con `bash` — es donde la guía paga.\n * Enumerar `read` junto a veinte más diluye las que importan.\n */\nconst GUIA: ReadonlyArray<{ tool: string; linea: (n: string) => string }> = [\n\t{ tool: \"read\", linea: (n) => `File and directory reads → \\`${n}\\`, never \\`cat\\` or \\`ls\\` through the shell.` },\n\t{ tool: \"grep\", linea: (n) => `Regex search → \\`${n}\\`, never shell \\`grep\\`, \\`rg\\` or \\`awk\\`.` },\n\t{ tool: \"find\", linea: (n) => `Locating files by name or glob → \\`${n}\\`, never \\`find\\` or \\`fd\\`.` },\n\t{ tool: \"edit\", linea: (n) => `Surgical edits → \\`${n}\\`. Never rewrite a whole file to change a few lines.` },\n\t{ tool: \"write\", linea: (n) => `Creating or fully replacing a file → \\`${n}\\`.` },\n\t{\n\t\ttool: \"web_search\",\n\t\tlinea: (n) => `Anything you do not know and cannot read locally → \\`${n}\\`. Do not guess an API from memory.`,\n\t},\n];\n\n/**\n * La línea del modo plan que dice qué tools SIGUEN valiendo.\n *\n * Los nombres salen del conjunto REAL de tools activas filtrado por `nivelDe`,\n * el mismo clasificador que usa la política de aprobación: si alguien mueve una\n * tool de `LECTURA` a `ESCRITURA`, esta línea se mueve con ella. Escribirlos a\n * mano en la plantilla sería prometerle al modelo tools que quizá no tiene, y\n * un prompt que nombra una tool inexistente le enseña a desconfiar de sus\n * instrucciones.\n *\n * El filtro son las DOS condiciones que `decidir()` aplica antes de dejar pasar\n * una lectura en modo plan: nivel de lectura (paso 4) y no estar en el `deny`\n * del usuario (paso 3). Con solo la primera, `permissions.denied: [\"web_fetch\"]`\n * dejaba la línea prometiendo `web_fetch`.\n *\n * El caso vacío (`ada-cli --tools bash` en modo plan) no es decorativo: ahí el\n * agente no puede ni leer, y decirlo es mejor que dejar una lista en blanco que\n * el modelo interpretará como que puede con todo. Se calcula aquí en vez de con\n * un `{{#si}}` dentro del `{{#si modoPlan}}` porque anidar dos bloques del\n * mismo tipo borraba el resto de la sección en silencio (ver `plantilla.ts`).\n */\nfunction lineaDePlan(lectura: readonly string[]): string {\n\tif (lectura.length === 0) {\n\t\treturn \"No read-only tool is active in this session, so you cannot investigate either. Say exactly that and stop.\";\n\t}\n\treturn `Still available in this mode: ${lectura.map((n) => `\\`${n}\\``).join(\", \")}. Nothing else is.`;\n}\n\n/** El contexto que ve la plantilla. Público porque las pruebas lo comprueban. */\nexport function contextoDelPrompt(entrada: EntradaDelPrompt): Contexto {\n\tconst activas = new Set(entrada.nombresDeHerramienta);\n\tconst denegadas = new Set(entrada.toolsDenegadas ?? []);\n\tconst tiene = (prefijo: string) => [...activas].some((n) => n === prefijo || n.startsWith(`${prefijo}_`));\n\n\tconst herramientas: string[] = [];\n\tfor (const { tool, linea } of GUIA) {\n\t\tif (activas.has(tool)) herramientas.push(linea(tool));\n\t}\n\t// Y las que aportan su propia frase, que nadie más conoce.\n\tfor (const [nombre, frase] of Object.entries(entrada.frasesDeHerramienta ?? {})) {\n\t\tif (activas.has(nombre) && !GUIA.some((g) => g.tool === nombre)) {\n\t\t\therramientas.push(`\\`${nombre}\\`: ${frase}`);\n\t\t}\n\t}\n\n\treturn {\n\t\therramientas,\n\t\tpersonalidad: entrada.personalidad,\n\t\tmodoPlan: entrada.modoPlan === true,\n\t\tlineaHerramientasDePlan: lineaDePlan(\n\t\t\t[...activas].filter((n) => nivelDe(n) === \"lectura\" && !denegadas.has(n)).sort(),\n\t\t),\n\t\ttieneLsp: tiene(\"lsp\"),\n\t\ttieneEstructural: activas.has(\"ast_search\") || activas.has(\"ast_edit\"),\n\t\ttieneBash: activas.has(\"bash\"),\n\t\ttieneNavegador: tiene(\"browser\"),\n\t\ttieneEscritorio: tiene(\"computer\"),\n\t\t// El libro de auditoría no es una tool: es una propiedad del arnés, y\n\t\t// siempre está. Se declara explícito para que la plantilla no adivine.\n\t\ttieneAudit: true,\n\t};\n}\n\nlet cacheDeLaPlantilla: string | undefined;\n\n/** Lee `sistema.md` de junto a este módulo. Lanza si no está. */\nfunction leerPlantilla(): string {\n\tif (cacheDeLaPlantilla !== undefined) return cacheDeLaPlantilla;\n\tconst ruta = join(dirname(fileURLToPath(import.meta.url)), NOMBRE);\n\ttry {\n\t\tcacheDeLaPlantilla = readFileSync(ruta, \"utf-8\");\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`No se ha podido leer el prompt del sistema (${ruta}).\\n` +\n\t\t\t\t\"Arrancar sin él dejaría al agente sin doctrina, sin contrato de entrega y sin\\n\" +\n\t\t\t\t\"las reglas de cumplimiento, y lo haría en silencio. Si esto sale desde el\\n\" +\n\t\t\t\t\"paquete compilado, falta el paso `copy-assets` que lleva los .md a dist/.\\n\" +\n\t\t\t\t`Causa: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\treturn cacheDeLaPlantilla;\n}\n\n/** Solo para pruebas: olvida la plantilla cacheada. */\nexport function __olvidarPlantillaParaPruebas(): void {\n\tcacheDeLaPlantilla = undefined;\n}\n\n/** El prompt del sistema de Ada, con las secciones que la sesión merece. */\nexport function montarPromptDelSistema(entrada: EntradaDelPrompt): string {\n\treturn renderizar(leerPlantilla(), contextoDelPrompt(entrada), NOMBRE)\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trim();\n}\n"]}