@hoilab/ada-cli 0.84.21 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1337) hide show
  1. package/CHANGELOG.md +49 -2
  2. package/README.es.md +174 -0
  3. package/README.md +203 -658
  4. package/dist/ada-publico.d.ts +35 -0
  5. package/dist/ada-publico.d.ts.map +1 -0
  6. package/dist/ada-publico.js +40 -0
  7. package/dist/ada-publico.js.map +1 -0
  8. package/dist/cli/args.d.ts +3 -0
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js +11 -0
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/audit-command.d.ts +15 -0
  13. package/dist/cli/audit-command.d.ts.map +1 -0
  14. package/dist/cli/audit-command.js +280 -0
  15. package/dist/cli/audit-command.js.map +1 -0
  16. package/dist/cli/banco-command.d.ts +15 -0
  17. package/dist/cli/banco-command.d.ts.map +1 -0
  18. package/dist/cli/banco-command.js +213 -0
  19. package/dist/cli/banco-command.js.map +1 -0
  20. package/dist/cli/cleanse-command.d.ts +11 -0
  21. package/dist/cli/cleanse-command.d.ts.map +1 -0
  22. package/dist/cli/cleanse-command.js +101 -0
  23. package/dist/cli/cleanse-command.js.map +1 -0
  24. package/dist/cli/commit-command.d.ts +31 -0
  25. package/dist/cli/commit-command.d.ts.map +1 -0
  26. package/dist/cli/commit-command.js +158 -0
  27. package/dist/cli/commit-command.js.map +1 -0
  28. package/dist/cli/computer-command.d.ts +12 -0
  29. package/dist/cli/computer-command.d.ts.map +1 -0
  30. package/dist/cli/computer-command.js +141 -0
  31. package/dist/cli/computer-command.js.map +1 -0
  32. package/dist/cli/discover-command.d.ts +18 -0
  33. package/dist/cli/discover-command.d.ts.map +1 -0
  34. package/dist/cli/discover-command.js +108 -0
  35. package/dist/cli/discover-command.js.map +1 -0
  36. package/dist/cli/file-processor.d.ts.map +1 -1
  37. package/dist/cli/file-processor.js +2 -1
  38. package/dist/cli/file-processor.js.map +1 -1
  39. package/dist/cli/hashline-command.d.ts +11 -0
  40. package/dist/cli/hashline-command.d.ts.map +1 -0
  41. package/dist/cli/hashline-command.js +106 -0
  42. package/dist/cli/hashline-command.js.map +1 -0
  43. package/dist/cli/home-screen.d.ts.map +1 -1
  44. package/dist/cli/home-screen.js +2 -2
  45. package/dist/cli/home-screen.js.map +1 -1
  46. package/dist/cli/import-command.d.ts +35 -0
  47. package/dist/cli/import-command.d.ts.map +1 -0
  48. package/dist/cli/import-command.js +164 -0
  49. package/dist/cli/import-command.js.map +1 -0
  50. package/dist/cli/politica-command.d.ts +20 -0
  51. package/dist/cli/politica-command.d.ts.map +1 -0
  52. package/dist/cli/politica-command.js +93 -0
  53. package/dist/cli/politica-command.js.map +1 -0
  54. package/dist/cli/refine-command.d.ts +18 -0
  55. package/dist/cli/refine-command.d.ts.map +1 -0
  56. package/dist/cli/refine-command.js +101 -0
  57. package/dist/cli/refine-command.js.map +1 -0
  58. package/dist/cli/review-command.d.ts +24 -0
  59. package/dist/cli/review-command.d.ts.map +1 -0
  60. package/dist/cli/review-command.js +168 -0
  61. package/dist/cli/review-command.js.map +1 -0
  62. package/dist/cli/schedule-command.d.ts +17 -0
  63. package/dist/cli/schedule-command.d.ts.map +1 -0
  64. package/dist/cli/schedule-command.js +117 -0
  65. package/dist/cli/schedule-command.js.map +1 -0
  66. package/dist/cli/serve-command.d.ts +72 -0
  67. package/dist/cli/serve-command.d.ts.map +1 -0
  68. package/dist/cli/serve-command.js +568 -0
  69. package/dist/cli/serve-command.js.map +1 -0
  70. package/dist/cli/startup-ui.d.ts.map +1 -1
  71. package/dist/cli/startup-ui.js +9 -3
  72. package/dist/cli/startup-ui.js.map +1 -1
  73. package/dist/cli/telegram-command.d.ts +18 -0
  74. package/dist/cli/telegram-command.d.ts.map +1 -0
  75. package/dist/cli/telegram-command.js +137 -0
  76. package/dist/cli/telegram-command.js.map +1 -0
  77. package/dist/cli/telemetria-command.d.ts +22 -0
  78. package/dist/cli/telemetria-command.d.ts.map +1 -0
  79. package/dist/cli/telemetria-command.js +127 -0
  80. package/dist/cli/telemetria-command.js.map +1 -0
  81. package/dist/cli/undo-command.d.ts +9 -0
  82. package/dist/cli/undo-command.d.ts.map +1 -0
  83. package/dist/cli/undo-command.js +56 -0
  84. package/dist/cli/undo-command.js.map +1 -0
  85. package/dist/cli/usage-command.d.ts +10 -0
  86. package/dist/cli/usage-command.d.ts.map +1 -0
  87. package/dist/cli/usage-command.js +209 -0
  88. package/dist/cli/usage-command.js.map +1 -0
  89. package/dist/cli/wiki-command.d.ts +9 -0
  90. package/dist/cli/wiki-command.d.ts.map +1 -0
  91. package/dist/cli/wiki-command.js +76 -0
  92. package/dist/cli/wiki-command.js.map +1 -0
  93. package/dist/cli.d.ts +6 -0
  94. package/dist/cli.d.ts.map +1 -1
  95. package/dist/cli.js +10 -11
  96. package/dist/cli.js.map +1 -1
  97. package/dist/config.d.ts +1 -1
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +3 -2
  100. package/dist/config.js.map +1 -1
  101. package/dist/core/ada.d.ts +58 -0
  102. package/dist/core/ada.d.ts.map +1 -0
  103. package/dist/core/ada.js +61 -0
  104. package/dist/core/ada.js.map +1 -0
  105. package/dist/core/advisor/guarda.d.ts +66 -0
  106. package/dist/core/advisor/guarda.d.ts.map +1 -0
  107. package/dist/core/advisor/guarda.js +191 -0
  108. package/dist/core/advisor/guarda.js.map +1 -0
  109. package/dist/core/advisor/runtime.d.ts +66 -0
  110. package/dist/core/advisor/runtime.d.ts.map +1 -0
  111. package/dist/core/advisor/runtime.js +121 -0
  112. package/dist/core/advisor/runtime.js.map +1 -0
  113. package/dist/core/advisor/sesion.d.ts +109 -0
  114. package/dist/core/advisor/sesion.d.ts.map +1 -0
  115. package/dist/core/advisor/sesion.js +139 -0
  116. package/dist/core/advisor/sesion.js.map +1 -0
  117. package/dist/core/agent-session.d.ts +85 -7
  118. package/dist/core/agent-session.d.ts.map +1 -1
  119. package/dist/core/agent-session.js +862 -78
  120. package/dist/core/agent-session.js.map +1 -1
  121. package/dist/core/agents/loader.d.ts +77 -0
  122. package/dist/core/agents/loader.d.ts.map +1 -0
  123. package/dist/core/agents/loader.js +154 -0
  124. package/dist/core/agents/loader.js.map +1 -0
  125. package/dist/core/aprobacion/generados.d.ts +37 -0
  126. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  127. package/dist/core/aprobacion/generados.js +85 -0
  128. package/dist/core/aprobacion/generados.js.map +1 -0
  129. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  130. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  131. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  132. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  133. package/dist/core/aprobacion/politica.d.ts +90 -0
  134. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  135. package/dist/core/aprobacion/politica.js +375 -0
  136. package/dist/core/aprobacion/politica.js.map +1 -0
  137. package/dist/core/arranque/atajos.d.ts +46 -0
  138. package/dist/core/arranque/atajos.d.ts.map +1 -0
  139. package/dist/core/arranque/atajos.js +113 -0
  140. package/dist/core/arranque/atajos.js.map +1 -0
  141. package/dist/core/audit/exportacion.d.ts +54 -0
  142. package/dist/core/audit/exportacion.d.ts.map +1 -0
  143. package/dist/core/audit/exportacion.js +265 -0
  144. package/dist/core/audit/exportacion.js.map +1 -0
  145. package/dist/core/audit/libro.d.ts +318 -0
  146. package/dist/core/audit/libro.d.ts.map +1 -0
  147. package/dist/core/audit/libro.js +508 -0
  148. package/dist/core/audit/libro.js.map +1 -0
  149. package/dist/core/audit/registro-sesion.d.ts +78 -0
  150. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  151. package/dist/core/audit/registro-sesion.js +202 -0
  152. package/dist/core/audit/registro-sesion.js.map +1 -0
  153. package/dist/core/audit/retencion.d.ts +82 -0
  154. package/dist/core/audit/retencion.d.ts.map +1 -0
  155. package/dist/core/audit/retencion.js +152 -0
  156. package/dist/core/audit/retencion.js.map +1 -0
  157. package/dist/core/audit/rutas.d.ts +23 -0
  158. package/dist/core/audit/rutas.d.ts.map +1 -0
  159. package/dist/core/audit/rutas.js +23 -0
  160. package/dist/core/audit/rutas.js.map +1 -0
  161. package/dist/core/auth-storage.d.ts +0 -3
  162. package/dist/core/auth-storage.d.ts.map +1 -1
  163. package/dist/core/auth-storage.js +21 -8
  164. package/dist/core/auth-storage.js.map +1 -1
  165. package/dist/core/banco/almacenamiento.d.ts +18 -0
  166. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  167. package/dist/core/banco/almacenamiento.js +50 -0
  168. package/dist/core/banco/almacenamiento.js.map +1 -0
  169. package/dist/core/banco/analisis.d.ts +37 -0
  170. package/dist/core/banco/analisis.d.ts.map +1 -0
  171. package/dist/core/banco/analisis.js +164 -0
  172. package/dist/core/banco/analisis.js.map +1 -0
  173. package/dist/core/banco/bloques.d.ts +39 -0
  174. package/dist/core/banco/bloques.d.ts.map +1 -0
  175. package/dist/core/banco/bloques.js +84 -0
  176. package/dist/core/banco/bloques.js.map +1 -0
  177. package/dist/core/banco/cargas.d.ts +84 -0
  178. package/dist/core/banco/cargas.d.ts.map +1 -0
  179. package/dist/core/banco/cargas.js +520 -0
  180. package/dist/core/banco/cargas.js.map +1 -0
  181. package/dist/core/banco/comparar.d.ts +29 -0
  182. package/dist/core/banco/comparar.d.ts.map +1 -0
  183. package/dist/core/banco/comparar.js +28 -0
  184. package/dist/core/banco/comparar.js.map +1 -0
  185. package/dist/core/banco/ejecutar.d.ts +44 -0
  186. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  187. package/dist/core/banco/ejecutar.js +183 -0
  188. package/dist/core/banco/ejecutar.js.map +1 -0
  189. package/dist/core/banco/generar.d.ts +24 -0
  190. package/dist/core/banco/generar.d.ts.map +1 -0
  191. package/dist/core/banco/generar.js +159 -0
  192. package/dist/core/banco/generar.js.map +1 -0
  193. package/dist/core/banco/mutaciones.d.ts +25 -0
  194. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  195. package/dist/core/banco/mutaciones.js +215 -0
  196. package/dist/core/banco/mutaciones.js.map +1 -0
  197. package/dist/core/banco/tipos.d.ts +121 -0
  198. package/dist/core/banco/tipos.d.ts.map +1 -0
  199. package/dist/core/banco/tipos.js +16 -0
  200. package/dist/core/banco/tipos.js.map +1 -0
  201. package/dist/core/blobs/almacen.d.ts +81 -0
  202. package/dist/core/blobs/almacen.d.ts.map +1 -0
  203. package/dist/core/blobs/almacen.js +198 -0
  204. package/dist/core/blobs/almacen.js.map +1 -0
  205. package/dist/core/blobs/broker.d.ts +103 -0
  206. package/dist/core/blobs/broker.d.ts.map +1 -0
  207. package/dist/core/blobs/broker.js +204 -0
  208. package/dist/core/blobs/broker.js.map +1 -0
  209. package/dist/core/blobs/index.d.ts +70 -0
  210. package/dist/core/blobs/index.d.ts.map +1 -0
  211. package/dist/core/blobs/index.js +232 -0
  212. package/dist/core/blobs/index.js.map +1 -0
  213. package/dist/core/blobs/payload.d.ts +55 -0
  214. package/dist/core/blobs/payload.d.ts.map +1 -0
  215. package/dist/core/blobs/payload.js +255 -0
  216. package/dist/core/blobs/payload.js.map +1 -0
  217. package/dist/core/blobs/proveedor.d.ts +85 -0
  218. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  219. package/dist/core/blobs/proveedor.js +196 -0
  220. package/dist/core/blobs/proveedor.js.map +1 -0
  221. package/dist/core/browser/cdp.d.ts +41 -0
  222. package/dist/core/browser/cdp.d.ts.map +1 -0
  223. package/dist/core/browser/cdp.js +119 -0
  224. package/dist/core/browser/cdp.js.map +1 -0
  225. package/dist/core/browser/politica.d.ts +51 -0
  226. package/dist/core/browser/politica.d.ts.map +1 -0
  227. package/dist/core/browser/politica.js +123 -0
  228. package/dist/core/browser/politica.js.map +1 -0
  229. package/dist/core/browser/sesion.d.ts +52 -0
  230. package/dist/core/browser/sesion.d.ts.map +1 -0
  231. package/dist/core/browser/sesion.js +176 -0
  232. package/dist/core/browser/sesion.js.map +1 -0
  233. package/dist/core/browser/tools.d.ts +16 -0
  234. package/dist/core/browser/tools.d.ts.map +1 -0
  235. package/dist/core/browser/tools.js +279 -0
  236. package/dist/core/browser/tools.js.map +1 -0
  237. package/dist/core/commit/diff.d.ts +56 -0
  238. package/dist/core/commit/diff.d.ts.map +1 -0
  239. package/dist/core/commit/diff.js +145 -0
  240. package/dist/core/commit/diff.js.map +1 -0
  241. package/dist/core/commit/mensaje.d.ts +80 -0
  242. package/dist/core/commit/mensaje.d.ts.map +1 -0
  243. package/dist/core/commit/mensaje.js +207 -0
  244. package/dist/core/commit/mensaje.js.map +1 -0
  245. package/dist/core/compactar/index.d.ts +52 -0
  246. package/dist/core/compactar/index.d.ts.map +1 -0
  247. package/dist/core/compactar/index.js +91 -0
  248. package/dist/core/compactar/index.js.map +1 -0
  249. package/dist/core/compactar/registro-denso.d.ts +160 -0
  250. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  251. package/dist/core/compactar/registro-denso.js +620 -0
  252. package/dist/core/compactar/registro-denso.js.map +1 -0
  253. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  254. package/dist/core/compaction/branch-summarization.js +3 -0
  255. package/dist/core/compaction/branch-summarization.js.map +1 -1
  256. package/dist/core/compaction/compaction.d.ts +4 -3
  257. package/dist/core/compaction/compaction.d.ts.map +1 -1
  258. package/dist/core/compaction/compaction.js +41 -32
  259. package/dist/core/compaction/compaction.js.map +1 -1
  260. package/dist/core/computer/captura.d.ts +35 -0
  261. package/dist/core/computer/captura.d.ts.map +1 -0
  262. package/dist/core/computer/captura.js +140 -0
  263. package/dist/core/computer/captura.js.map +1 -0
  264. package/dist/core/computer/driver.d.ts +130 -0
  265. package/dist/core/computer/driver.d.ts.map +1 -0
  266. package/dist/core/computer/driver.js +206 -0
  267. package/dist/core/computer/driver.js.map +1 -0
  268. package/dist/core/computer/motor/actions.d.ts +109 -0
  269. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  270. package/dist/core/computer/motor/actions.js +157 -0
  271. package/dist/core/computer/motor/actions.js.map +1 -0
  272. package/dist/core/computer/motor/bridge.d.ts +232 -0
  273. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  274. package/dist/core/computer/motor/bridge.js +2335 -0
  275. package/dist/core/computer/motor/bridge.js.map +1 -0
  276. package/dist/core/computer/motor/cdp.d.ts +107 -0
  277. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  278. package/dist/core/computer/motor/cdp.js +659 -0
  279. package/dist/core/computer/motor/cdp.js.map +1 -0
  280. package/dist/core/computer/motor/config.d.ts +23 -0
  281. package/dist/core/computer/motor/config.d.ts.map +1 -0
  282. package/dist/core/computer/motor/config.js +100 -0
  283. package/dist/core/computer/motor/config.js.map +1 -0
  284. package/dist/core/computer/motor/contract.d.ts +81 -0
  285. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  286. package/dist/core/computer/motor/contract.js +14 -0
  287. package/dist/core/computer/motor/contract.js.map +1 -0
  288. package/dist/core/computer/motor/note.d.ts +37 -0
  289. package/dist/core/computer/motor/note.d.ts.map +1 -0
  290. package/dist/core/computer/motor/note.js +162 -0
  291. package/dist/core/computer/motor/note.js.map +1 -0
  292. package/dist/core/computer/motor/outline.d.ts +155 -0
  293. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  294. package/dist/core/computer/motor/outline.js +590 -0
  295. package/dist/core/computer/motor/outline.js.map +1 -0
  296. package/dist/core/computer/motor/output.d.ts +18 -0
  297. package/dist/core/computer/motor/output.d.ts.map +1 -0
  298. package/dist/core/computer/motor/output.js +148 -0
  299. package/dist/core/computer/motor/output.js.map +1 -0
  300. package/dist/core/computer/motor/permissions.d.ts +41 -0
  301. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  302. package/dist/core/computer/motor/permissions.js +51 -0
  303. package/dist/core/computer/motor/permissions.js.map +1 -0
  304. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  305. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/architecture.js +21 -0
  307. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  308. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  309. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/coerce.js +17 -0
  311. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  312. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  313. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  314. package/dist/core/computer/motor/platform/index.js +79 -0
  315. package/dist/core/computer/motor/platform/index.js.map +1 -0
  316. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  317. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  318. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  319. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  320. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  321. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  322. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  323. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  324. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  325. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  326. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  327. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  328. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  329. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  330. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  331. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  332. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  333. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  334. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  335. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  336. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  337. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  338. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  339. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  340. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  341. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  342. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  343. package/dist/core/computer/motor/platform/types.js +2 -0
  344. package/dist/core/computer/motor/platform/types.js.map +1 -0
  345. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  346. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  347. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  348. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  349. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  350. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  351. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  352. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  353. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  354. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  355. package/dist/core/computer/motor/root-selection.js +28 -0
  356. package/dist/core/computer/motor/root-selection.js.map +1 -0
  357. package/dist/core/computer/motor/runtime.d.ts +50 -0
  358. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  359. package/dist/core/computer/motor/runtime.js +119 -0
  360. package/dist/core/computer/motor/runtime.js.map +1 -0
  361. package/dist/core/computer/motor/state.d.ts +68 -0
  362. package/dist/core/computer/motor/state.d.ts.map +1 -0
  363. package/dist/core/computer/motor/state.js +100 -0
  364. package/dist/core/computer/motor/state.js.map +1 -0
  365. package/dist/core/computer/motor/view.d.ts +6 -0
  366. package/dist/core/computer/motor/view.d.ts.map +1 -0
  367. package/dist/core/computer/motor/view.js +185 -0
  368. package/dist/core/computer/motor/view.js.map +1 -0
  369. package/dist/core/computer/motor-ada.d.ts +159 -0
  370. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  371. package/dist/core/computer/motor-ada.js +412 -0
  372. package/dist/core/computer/motor-ada.js.map +1 -0
  373. package/dist/core/computer/politica.d.ts +56 -0
  374. package/dist/core/computer/politica.d.ts.map +1 -0
  375. package/dist/core/computer/politica.js +163 -0
  376. package/dist/core/computer/politica.js.map +1 -0
  377. package/dist/core/computer/tools.d.ts +26 -0
  378. package/dist/core/computer/tools.d.ts.map +1 -0
  379. package/dist/core/computer/tools.js +399 -0
  380. package/dist/core/computer/tools.js.map +1 -0
  381. package/dist/core/context-breakdown.d.ts +80 -0
  382. package/dist/core/context-breakdown.d.ts.map +1 -0
  383. package/dist/core/context-breakdown.js +87 -0
  384. package/dist/core/context-breakdown.js.map +1 -0
  385. package/dist/core/credenciales/cliente.d.ts +60 -0
  386. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  387. package/dist/core/credenciales/cliente.js +81 -0
  388. package/dist/core/credenciales/cliente.js.map +1 -0
  389. package/dist/core/credenciales/pool.d.ts +96 -0
  390. package/dist/core/credenciales/pool.d.ts.map +1 -0
  391. package/dist/core/credenciales/pool.js +128 -0
  392. package/dist/core/credenciales/pool.js.map +1 -0
  393. package/dist/core/credenciales/reposo.d.ts +93 -0
  394. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  395. package/dist/core/credenciales/reposo.js +489 -0
  396. package/dist/core/credenciales/reposo.js.map +1 -0
  397. package/dist/core/credenciales/servidor.d.ts +55 -0
  398. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  399. package/dist/core/credenciales/servidor.js +205 -0
  400. package/dist/core/credenciales/servidor.js.map +1 -0
  401. package/dist/core/defaults.d.ts +1 -0
  402. package/dist/core/defaults.d.ts.map +1 -1
  403. package/dist/core/defaults.js +9 -0
  404. package/dist/core/defaults.js.map +1 -1
  405. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  406. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  407. package/dist/core/descubrimiento/comandos.js +76 -0
  408. package/dist/core/descubrimiento/comandos.js.map +1 -0
  409. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  410. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  411. package/dist/core/descubrimiento/mcp.js +130 -0
  412. package/dist/core/descubrimiento/mcp.js.map +1 -0
  413. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  414. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  415. package/dist/core/descubrimiento/reglas.js +134 -0
  416. package/dist/core/descubrimiento/reglas.js.map +1 -0
  417. package/dist/core/descubrimiento/skills.d.ts +57 -0
  418. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  419. package/dist/core/descubrimiento/skills.js +113 -0
  420. package/dist/core/descubrimiento/skills.js.map +1 -0
  421. package/dist/core/dificultad/clasificador.d.ts +133 -0
  422. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  423. package/dist/core/dificultad/clasificador.js +288 -0
  424. package/dist/core/dificultad/clasificador.js.map +1 -0
  425. package/dist/core/edicion/diario.d.ts +37 -0
  426. package/dist/core/edicion/diario.d.ts.map +1 -0
  427. package/dist/core/edicion/diario.js +51 -0
  428. package/dist/core/edicion/diario.js.map +1 -0
  429. package/dist/core/edicion/hashline.d.ts +71 -0
  430. package/dist/core/edicion/hashline.d.ts.map +1 -0
  431. package/dist/core/edicion/hashline.js +111 -0
  432. package/dist/core/edicion/hashline.js.map +1 -0
  433. package/dist/core/edicion/hueco.d.ts +64 -0
  434. package/dist/core/edicion/hueco.d.ts.map +1 -0
  435. package/dist/core/edicion/hueco.js +162 -0
  436. package/dist/core/edicion/hueco.js.map +1 -0
  437. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  438. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  439. package/dist/core/edicion/limpiar-carga.js +121 -0
  440. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  441. package/dist/core/edicion/observador.d.ts +80 -0
  442. package/dist/core/edicion/observador.d.ts.map +1 -0
  443. package/dist/core/edicion/observador.js +183 -0
  444. package/dist/core/edicion/observador.js.map +1 -0
  445. package/dist/core/edicion/parecido.d.ts +53 -0
  446. package/dist/core/edicion/parecido.d.ts.map +1 -0
  447. package/dist/core/edicion/parecido.js +145 -0
  448. package/dist/core/edicion/parecido.js.map +1 -0
  449. package/dist/core/edicion/parseo.d.ts +58 -0
  450. package/dist/core/edicion/parseo.d.ts.map +1 -0
  451. package/dist/core/edicion/parseo.js +124 -0
  452. package/dist/core/edicion/parseo.js.map +1 -0
  453. package/dist/core/edicion/reparacion.d.ts +67 -0
  454. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  455. package/dist/core/edicion/reparacion.js +202 -0
  456. package/dist/core/edicion/reparacion.js.map +1 -0
  457. package/dist/core/edicion/sangria.d.ts +121 -0
  458. package/dist/core/edicion/sangria.d.ts.map +1 -0
  459. package/dist/core/edicion/sangria.js +341 -0
  460. package/dist/core/edicion/sangria.js.map +1 -0
  461. package/dist/core/edicion/tipos.d.ts +58 -0
  462. package/dist/core/edicion/tipos.d.ts.map +1 -0
  463. package/dist/core/edicion/tipos.js +160 -0
  464. package/dist/core/edicion/tipos.js.map +1 -0
  465. package/dist/core/engine-personality.d.ts +12 -0
  466. package/dist/core/engine-personality.d.ts.map +1 -0
  467. package/dist/core/engine-personality.js +53 -0
  468. package/dist/core/engine-personality.js.map +1 -0
  469. package/dist/core/errores/proveedor.d.ts +53 -0
  470. package/dist/core/errores/proveedor.d.ts.map +1 -0
  471. package/dist/core/errores/proveedor.js +191 -0
  472. package/dist/core/errores/proveedor.js.map +1 -0
  473. package/dist/core/estructural/buscar.d.ts +61 -0
  474. package/dist/core/estructural/buscar.d.ts.map +1 -0
  475. package/dist/core/estructural/buscar.js +261 -0
  476. package/dist/core/estructural/buscar.js.map +1 -0
  477. package/dist/core/estructural/editar.d.ts +36 -0
  478. package/dist/core/estructural/editar.d.ts.map +1 -0
  479. package/dist/core/estructural/editar.js +123 -0
  480. package/dist/core/estructural/editar.js.map +1 -0
  481. package/dist/core/estructural/tools.d.ts +11 -0
  482. package/dist/core/estructural/tools.d.ts.map +1 -0
  483. package/dist/core/estructural/tools.js +100 -0
  484. package/dist/core/estructural/tools.js.map +1 -0
  485. package/dist/core/experimental.d.ts.map +1 -1
  486. package/dist/core/experimental.js +10 -1
  487. package/dist/core/experimental.js.map +1 -1
  488. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  489. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  490. package/dist/core/extensiones/suplantacion.js +61 -0
  491. package/dist/core/extensiones/suplantacion.js.map +1 -0
  492. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  493. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  494. package/dist/core/extensiones/vigilancia.js +217 -0
  495. package/dist/core/extensiones/vigilancia.js.map +1 -0
  496. package/dist/core/extensions/index.d.ts +1 -1
  497. package/dist/core/extensions/index.d.ts.map +1 -1
  498. package/dist/core/extensions/index.js.map +1 -1
  499. package/dist/core/extensions/loader.d.ts.map +1 -1
  500. package/dist/core/extensions/loader.js +21 -6
  501. package/dist/core/extensions/loader.js.map +1 -1
  502. package/dist/core/extensions/types.d.ts +23 -4
  503. package/dist/core/extensions/types.d.ts.map +1 -1
  504. package/dist/core/extensions/types.js.map +1 -1
  505. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  506. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  507. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  508. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  509. package/dist/core/harness/refine.d.ts +40 -0
  510. package/dist/core/harness/refine.d.ts.map +1 -0
  511. package/dist/core/harness/refine.js +109 -0
  512. package/dist/core/harness/refine.js.map +1 -0
  513. package/dist/core/harness/store.d.ts +75 -0
  514. package/dist/core/harness/store.d.ts.map +1 -0
  515. package/dist/core/harness/store.js +149 -0
  516. package/dist/core/harness/store.js.map +1 -0
  517. package/dist/core/hooks/contract.d.ts +85 -0
  518. package/dist/core/hooks/contract.d.ts.map +1 -0
  519. package/dist/core/hooks/contract.js +140 -0
  520. package/dist/core/hooks/contract.js.map +1 -0
  521. package/dist/core/hooks/runner.d.ts +42 -0
  522. package/dist/core/hooks/runner.d.ts.map +1 -0
  523. package/dist/core/hooks/runner.js +85 -0
  524. package/dist/core/hooks/runner.js.map +1 -0
  525. package/dist/core/hooks/session-hooks.d.ts +62 -0
  526. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  527. package/dist/core/hooks/session-hooks.js +84 -0
  528. package/dist/core/hooks/session-hooks.js.map +1 -0
  529. package/dist/core/importar/formatos.d.ts +69 -0
  530. package/dist/core/importar/formatos.d.ts.map +1 -0
  531. package/dist/core/importar/formatos.js +235 -0
  532. package/dist/core/importar/formatos.js.map +1 -0
  533. package/dist/core/interactivo/deteccion.d.ts +44 -0
  534. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  535. package/dist/core/interactivo/deteccion.js +82 -0
  536. package/dist/core/interactivo/deteccion.js.map +1 -0
  537. package/dist/core/interactivo/sesion.d.ts +50 -0
  538. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  539. package/dist/core/interactivo/sesion.js +156 -0
  540. package/dist/core/interactivo/sesion.js.map +1 -0
  541. package/dist/core/interactivo/tools.d.ts +21 -0
  542. package/dist/core/interactivo/tools.d.ts.map +1 -0
  543. package/dist/core/interactivo/tools.js +122 -0
  544. package/dist/core/interactivo/tools.js.map +1 -0
  545. package/dist/core/keybindings.d.ts.map +1 -1
  546. package/dist/core/keybindings.js +2 -1
  547. package/dist/core/keybindings.js.map +1 -1
  548. package/dist/core/lectura/mapa.d.ts +70 -0
  549. package/dist/core/lectura/mapa.d.ts.map +1 -0
  550. package/dist/core/lectura/mapa.js +177 -0
  551. package/dist/core/lectura/mapa.js.map +1 -0
  552. package/dist/core/lectura/pdf.d.ts +49 -0
  553. package/dist/core/lectura/pdf.d.ts.map +1 -0
  554. package/dist/core/lectura/pdf.js +337 -0
  555. package/dist/core/lectura/pdf.js.map +1 -0
  556. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  557. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  558. package/dist/core/limpieza/comprobadores.js +311 -0
  559. package/dist/core/limpieza/comprobadores.js.map +1 -0
  560. package/dist/core/limpieza/parseo.d.ts +19 -0
  561. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  562. package/dist/core/limpieza/parseo.js +124 -0
  563. package/dist/core/limpieza/parseo.js.map +1 -0
  564. package/dist/core/limpieza/reparacion.d.ts +77 -0
  565. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  566. package/dist/core/limpieza/reparacion.js +254 -0
  567. package/dist/core/limpieza/reparacion.js.map +1 -0
  568. package/dist/core/limpieza/tipos.d.ts +56 -0
  569. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  570. package/dist/core/limpieza/tipos.js +9 -0
  571. package/dist/core/limpieza/tipos.js.map +1 -0
  572. package/dist/core/lsp/cliente.d.ts +52 -0
  573. package/dist/core/lsp/cliente.d.ts.map +1 -0
  574. package/dist/core/lsp/cliente.js +232 -0
  575. package/dist/core/lsp/cliente.js.map +1 -0
  576. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  577. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  578. package/dist/core/lsp/descubrimiento.js +152 -0
  579. package/dist/core/lsp/descubrimiento.js.map +1 -0
  580. package/dist/core/lsp/ediciones.d.ts +59 -0
  581. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  582. package/dist/core/lsp/ediciones.js +89 -0
  583. package/dist/core/lsp/ediciones.js.map +1 -0
  584. package/dist/core/lsp/extension.d.ts +28 -0
  585. package/dist/core/lsp/extension.d.ts.map +1 -0
  586. package/dist/core/lsp/extension.js +34 -0
  587. package/dist/core/lsp/extension.js.map +1 -0
  588. package/dist/core/lsp/tools.d.ts +45 -0
  589. package/dist/core/lsp/tools.d.ts.map +1 -0
  590. package/dist/core/lsp/tools.js +265 -0
  591. package/dist/core/lsp/tools.js.map +1 -0
  592. package/dist/core/mcp/client.d.ts +60 -0
  593. package/dist/core/mcp/client.d.ts.map +1 -0
  594. package/dist/core/mcp/client.js +139 -0
  595. package/dist/core/mcp/client.js.map +1 -0
  596. package/dist/core/mcp/manager.d.ts +86 -0
  597. package/dist/core/mcp/manager.d.ts.map +1 -0
  598. package/dist/core/mcp/manager.js +124 -0
  599. package/dist/core/mcp/manager.js.map +1 -0
  600. package/dist/core/mcp/tools.d.ts +15 -0
  601. package/dist/core/mcp/tools.d.ts.map +1 -0
  602. package/dist/core/mcp/tools.js +84 -0
  603. package/dist/core/mcp/tools.js.map +1 -0
  604. package/dist/core/memory-engine/audit-export.d.ts +56 -0
  605. package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
  606. package/dist/core/memory-engine/audit-export.js +100 -0
  607. package/dist/core/memory-engine/audit-export.js.map +1 -0
  608. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  609. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  610. package/dist/core/memory-engine/audit-indice.js +271 -0
  611. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  612. package/dist/core/memory-engine/audit.d.ts +18 -6
  613. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  614. package/dist/core/memory-engine/audit.js +32 -50
  615. package/dist/core/memory-engine/audit.js.map +1 -1
  616. package/dist/core/memory-engine/engine.d.ts +21 -4
  617. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  618. package/dist/core/memory-engine/engine.js +219 -55
  619. package/dist/core/memory-engine/engine.js.map +1 -1
  620. package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
  621. package/dist/core/memory-engine/inverted-index.js +67 -10
  622. package/dist/core/memory-engine/inverted-index.js.map +1 -1
  623. package/dist/core/memory-engine/keychain.d.ts.map +1 -1
  624. package/dist/core/memory-engine/keychain.js +1 -6
  625. package/dist/core/memory-engine/keychain.js.map +1 -1
  626. package/dist/core/memory-engine/observation-store.d.ts +0 -1
  627. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  628. package/dist/core/memory-engine/observation-store.js +40 -12
  629. package/dist/core/memory-engine/observation-store.js.map +1 -1
  630. package/dist/core/memory-engine/refinements.d.ts +51 -0
  631. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  632. package/dist/core/memory-engine/refinements.js +99 -0
  633. package/dist/core/memory-engine/refinements.js.map +1 -0
  634. package/dist/core/memory-engine/scanner.d.ts.map +1 -1
  635. package/dist/core/memory-engine/scanner.js +25 -5
  636. package/dist/core/memory-engine/scanner.js.map +1 -1
  637. package/dist/core/memory-engine/security.d.ts.map +1 -1
  638. package/dist/core/memory-engine/security.js +131 -23
  639. package/dist/core/memory-engine/security.js.map +1 -1
  640. package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
  641. package/dist/core/memory-engine/session-indexer.js +8 -2
  642. package/dist/core/memory-engine/session-indexer.js.map +1 -1
  643. package/dist/core/memory-engine/tools.d.ts +2 -2
  644. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  645. package/dist/core/memory-engine/tools.js +41 -8
  646. package/dist/core/memory-engine/tools.js.map +1 -1
  647. package/dist/core/memory-engine/types.d.ts +2 -0
  648. package/dist/core/memory-engine/types.d.ts.map +1 -1
  649. package/dist/core/memory-engine/types.js.map +1 -1
  650. package/dist/core/memory-engine/vault.d.ts.map +1 -1
  651. package/dist/core/memory-engine/vault.js +2 -2
  652. package/dist/core/memory-engine/vault.js.map +1 -1
  653. package/dist/core/model-config.d.ts.map +1 -1
  654. package/dist/core/model-config.js +2 -1
  655. package/dist/core/model-config.js.map +1 -1
  656. package/dist/core/model-resolver.d.ts +1 -0
  657. package/dist/core/model-resolver.d.ts.map +1 -1
  658. package/dist/core/model-resolver.js +19 -7
  659. package/dist/core/model-resolver.js.map +1 -1
  660. package/dist/core/models-store.d.ts.map +1 -1
  661. package/dist/core/models-store.js +2 -1
  662. package/dist/core/models-store.js.map +1 -1
  663. package/dist/core/muestreo-restringido.d.ts +49 -0
  664. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  665. package/dist/core/muestreo-restringido.js +65 -0
  666. package/dist/core/muestreo-restringido.js.map +1 -0
  667. package/dist/core/orphan-process-journal.d.ts +48 -0
  668. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  669. package/dist/core/orphan-process-journal.js +116 -0
  670. package/dist/core/orphan-process-journal.js.map +1 -0
  671. package/dist/core/package-manager.d.ts.map +1 -1
  672. package/dist/core/package-manager.js +11 -6
  673. package/dist/core/package-manager.js.map +1 -1
  674. package/dist/core/pi-manifest.d.ts.map +1 -1
  675. package/dist/core/pi-manifest.js +2 -1
  676. package/dist/core/pi-manifest.js.map +1 -1
  677. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  678. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  679. package/dist/core/privacidad/categorias-especiales.js +745 -0
  680. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  681. package/dist/core/privacidad/tapar.d.ts +48 -0
  682. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  683. package/dist/core/privacidad/tapar.js +66 -0
  684. package/dist/core/privacidad/tapar.js.map +1 -0
  685. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  686. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  687. package/dist/core/prompt-cache/diagnostics.js +100 -0
  688. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  689. package/dist/core/prompt-cache/index.d.ts +33 -0
  690. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  691. package/dist/core/prompt-cache/index.js +189 -0
  692. package/dist/core/prompt-cache/index.js.map +1 -0
  693. package/dist/core/prompt-cache/payload.d.ts +58 -0
  694. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  695. package/dist/core/prompt-cache/payload.js +122 -0
  696. package/dist/core/prompt-cache/payload.js.map +1 -0
  697. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  698. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  699. package/dist/core/prompt-cache/stabilize.js +137 -0
  700. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  701. package/dist/core/prompt-cache/stats.d.ts +55 -0
  702. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  703. package/dist/core/prompt-cache/stats.js +158 -0
  704. package/dist/core/prompt-cache/stats.js.map +1 -0
  705. package/dist/core/prompt-eleccion.d.ts +38 -0
  706. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  707. package/dist/core/prompt-eleccion.js +46 -0
  708. package/dist/core/prompt-eleccion.js.map +1 -0
  709. package/dist/core/prompt-optimizer.d.ts +53 -0
  710. package/dist/core/prompt-optimizer.d.ts.map +1 -0
  711. package/dist/core/prompt-optimizer.js +138 -0
  712. package/dist/core/prompt-optimizer.js.map +1 -0
  713. package/dist/core/prompts/montar.d.ts +75 -0
  714. package/dist/core/prompts/montar.d.ts.map +1 -0
  715. package/dist/core/prompts/montar.js +146 -0
  716. package/dist/core/prompts/montar.js.map +1 -0
  717. package/dist/core/prompts/plantilla.d.ts +54 -0
  718. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  719. package/dist/core/prompts/plantilla.js +153 -0
  720. package/dist/core/prompts/plantilla.js.map +1 -0
  721. package/dist/core/prompts/sistema.md +134 -0
  722. package/dist/core/provider-attribution.d.ts +24 -2
  723. package/dist/core/provider-attribution.d.ts.map +1 -1
  724. package/dist/core/provider-attribution.js +24 -42
  725. package/dist/core/provider-attribution.js.map +1 -1
  726. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  727. package/dist/core/remote-catalog-provider.js +2 -1
  728. package/dist/core/remote-catalog-provider.js.map +1 -1
  729. package/dist/core/remoto/destino.d.ts +38 -0
  730. package/dist/core/remoto/destino.d.ts.map +1 -0
  731. package/dist/core/remoto/destino.js +105 -0
  732. package/dist/core/remoto/destino.js.map +1 -0
  733. package/dist/core/remoto/ejecutor.d.ts +59 -0
  734. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  735. package/dist/core/remoto/ejecutor.js +225 -0
  736. package/dist/core/remoto/ejecutor.js.map +1 -0
  737. package/dist/core/remoto/ficheros.d.ts +29 -0
  738. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  739. package/dist/core/remoto/ficheros.js +90 -0
  740. package/dist/core/remoto/ficheros.js.map +1 -0
  741. package/dist/core/remoto/registro-extension.d.ts +15 -0
  742. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  743. package/dist/core/remoto/registro-extension.js +17 -0
  744. package/dist/core/remoto/registro-extension.js.map +1 -0
  745. package/dist/core/remoto/tools.d.ts +28 -0
  746. package/dist/core/remoto/tools.d.ts.map +1 -0
  747. package/dist/core/remoto/tools.js +31 -0
  748. package/dist/core/remoto/tools.js.map +1 -0
  749. package/dist/core/resource-loader.d.ts +58 -0
  750. package/dist/core/resource-loader.d.ts.map +1 -1
  751. package/dist/core/resource-loader.js +326 -8
  752. package/dist/core/resource-loader.js.map +1 -1
  753. package/dist/core/revision/hallazgo.d.ts +51 -0
  754. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  755. package/dist/core/revision/hallazgo.js +73 -0
  756. package/dist/core/revision/hallazgo.js.map +1 -0
  757. package/dist/core/revision/revisor.d.ts +81 -0
  758. package/dist/core/revision/revisor.d.ts.map +1 -0
  759. package/dist/core/revision/revisor.js +132 -0
  760. package/dist/core/revision/revisor.js.map +1 -0
  761. package/dist/core/revision/sarif.d.ts +30 -0
  762. package/dist/core/revision/sarif.d.ts.map +1 -0
  763. package/dist/core/revision/sarif.js +83 -0
  764. package/dist/core/revision/sarif.js.map +1 -0
  765. package/dist/core/scheduler/scheduler.d.ts +87 -0
  766. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  767. package/dist/core/scheduler/scheduler.js +178 -0
  768. package/dist/core/scheduler/scheduler.js.map +1 -0
  769. package/dist/core/sdk.d.ts +8 -0
  770. package/dist/core/sdk.d.ts.map +1 -1
  771. package/dist/core/sdk.js +11 -1
  772. package/dist/core/sdk.js.map +1 -1
  773. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  774. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  775. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  776. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  777. package/dist/core/session-manager.d.ts.map +1 -1
  778. package/dist/core/session-manager.js +2 -1
  779. package/dist/core/session-manager.js.map +1 -1
  780. package/dist/core/settings-diagnostics.d.ts +9 -0
  781. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  782. package/dist/core/settings-diagnostics.js +21 -0
  783. package/dist/core/settings-diagnostics.js.map +1 -0
  784. package/dist/core/settings-manager.d.ts +156 -0
  785. package/dist/core/settings-manager.d.ts.map +1 -1
  786. package/dist/core/settings-manager.js +255 -10
  787. package/dist/core/settings-manager.js.map +1 -1
  788. package/dist/core/skills.d.ts.map +1 -1
  789. package/dist/core/skills.js +51 -33
  790. package/dist/core/skills.js.map +1 -1
  791. package/dist/core/slash-commands.d.ts.map +1 -1
  792. package/dist/core/slash-commands.js +2 -1
  793. package/dist/core/slash-commands.js.map +1 -1
  794. package/dist/core/system-prompt.d.ts +17 -0
  795. package/dist/core/system-prompt.d.ts.map +1 -1
  796. package/dist/core/system-prompt.js +13 -5
  797. package/dist/core/system-prompt.js.map +1 -1
  798. package/dist/core/telemetria/otlp.d.ts +122 -0
  799. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  800. package/dist/core/telemetria/otlp.js +373 -0
  801. package/dist/core/telemetria/otlp.js.map +1 -0
  802. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  803. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  804. package/dist/core/tools/coercion-argumentos.js +99 -0
  805. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  806. package/dist/core/tools/edit-diff.d.ts +0 -12
  807. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  808. package/dist/core/tools/edit-diff.js +234 -12
  809. package/dist/core/tools/edit-diff.js.map +1 -1
  810. package/dist/core/tools/edit.d.ts.map +1 -1
  811. package/dist/core/tools/edit.js +28 -5
  812. package/dist/core/tools/edit.js.map +1 -1
  813. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  814. package/dist/core/tools/file-mutation-queue.js +5 -0
  815. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  816. package/dist/core/tools/index.d.ts.map +1 -1
  817. package/dist/core/tools/index.js +2 -2
  818. package/dist/core/tools/index.js.map +1 -1
  819. package/dist/core/tools/json-tolerante.d.ts +30 -0
  820. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  821. package/dist/core/tools/json-tolerante.js +70 -0
  822. package/dist/core/tools/json-tolerante.js.map +1 -0
  823. package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
  824. package/dist/core/tools/project-memory-tool.js +4 -1
  825. package/dist/core/tools/project-memory-tool.js.map +1 -1
  826. package/dist/core/tools/read.d.ts.map +1 -1
  827. package/dist/core/tools/read.js +17 -0
  828. package/dist/core/tools/read.js.map +1 -1
  829. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  830. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  831. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  832. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  833. package/dist/core/trust-manager.d.ts.map +1 -1
  834. package/dist/core/trust-manager.js +2 -1
  835. package/dist/core/trust-manager.js.map +1 -1
  836. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  837. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  838. package/dist/core/turno-vacio/detectar.js +66 -0
  839. package/dist/core/turno-vacio/detectar.js.map +1 -0
  840. package/dist/core/undo/journal.d.ts +57 -0
  841. package/dist/core/undo/journal.d.ts.map +1 -0
  842. package/dist/core/undo/journal.js +178 -0
  843. package/dist/core/undo/journal.js.map +1 -0
  844. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  845. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  846. package/dist/core/urls-internas/auditoria.js +42 -0
  847. package/dist/core/urls-internas/auditoria.js.map +1 -0
  848. package/dist/core/urls-internas/boveda.d.ts +13 -0
  849. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  850. package/dist/core/urls-internas/boveda.js +40 -0
  851. package/dist/core/urls-internas/boveda.js.map +1 -0
  852. package/dist/core/urls-internas/lector.d.ts +30 -0
  853. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  854. package/dist/core/urls-internas/lector.js +56 -0
  855. package/dist/core/urls-internas/lector.js.map +1 -0
  856. package/dist/core/urls-internas/memoria.d.ts +11 -0
  857. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  858. package/dist/core/urls-internas/memoria.js +25 -0
  859. package/dist/core/urls-internas/memoria.js.map +1 -0
  860. package/dist/core/urls-internas/parse.d.ts +28 -0
  861. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  862. package/dist/core/urls-internas/parse.js +32 -0
  863. package/dist/core/urls-internas/parse.js.map +1 -0
  864. package/dist/core/urls-internas/reglas.d.ts +10 -0
  865. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  866. package/dist/core/urls-internas/reglas.js +31 -0
  867. package/dist/core/urls-internas/reglas.js.map +1 -0
  868. package/dist/core/usage/aggregate.d.ts +68 -0
  869. package/dist/core/usage/aggregate.d.ts.map +1 -0
  870. package/dist/core/usage/aggregate.js +93 -0
  871. package/dist/core/usage/aggregate.js.map +1 -0
  872. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  873. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  874. package/dist/core/usage/cuota/anthropic.js +63 -0
  875. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  876. package/dist/core/usage/cuota/cache.d.ts +20 -0
  877. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  878. package/dist/core/usage/cuota/cache.js +36 -0
  879. package/dist/core/usage/cuota/cache.js.map +1 -0
  880. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  881. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  882. package/dist/core/usage/cuota/github-copilot.js +67 -0
  883. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  884. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  885. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  886. package/dist/core/usage/cuota/google-gemini.js +72 -0
  887. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  888. package/dist/core/usage/cuota/index.d.ts +25 -0
  889. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  890. package/dist/core/usage/cuota/index.js +50 -0
  891. package/dist/core/usage/cuota/index.js.map +1 -0
  892. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  893. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  894. package/dist/core/usage/cuota/openai-codex.js +59 -0
  895. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  896. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  897. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  898. package/dist/core/usage/cuota/openrouter.js +47 -0
  899. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  900. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  901. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  902. package/dist/core/usage/cuota/tipos.js +25 -0
  903. package/dist/core/usage/cuota/tipos.js.map +1 -0
  904. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  905. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  906. package/dist/core/web/busqueda-nativa.js +163 -0
  907. package/dist/core/web/busqueda-nativa.js.map +1 -0
  908. package/dist/core/web/destino.d.ts +58 -0
  909. package/dist/core/web/destino.d.ts.map +1 -0
  910. package/dist/core/web/destino.js +127 -0
  911. package/dist/core/web/destino.js.map +1 -0
  912. package/dist/core/web/proveedores/brave.d.ts +6 -0
  913. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  914. package/dist/core/web/proveedores/brave.js +20 -0
  915. package/dist/core/web/proveedores/brave.js.map +1 -0
  916. package/dist/core/web/proveedores/claves.d.ts +19 -0
  917. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  918. package/dist/core/web/proveedores/claves.js +36 -0
  919. package/dist/core/web/proveedores/claves.js.map +1 -0
  920. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  921. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  922. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  923. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  924. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  925. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  926. package/dist/core/web/proveedores/ecosia.js +72 -0
  927. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  928. package/dist/core/web/proveedores/exa.d.ts +6 -0
  929. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  930. package/dist/core/web/proveedores/exa.js +24 -0
  931. package/dist/core/web/proveedores/exa.js.map +1 -0
  932. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  933. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  934. package/dist/core/web/proveedores/mojeek.js +65 -0
  935. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  936. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  937. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  938. package/dist/core/web/proveedores/navegador.js +13 -0
  939. package/dist/core/web/proveedores/navegador.js.map +1 -0
  940. package/dist/core/web/proveedores/registro.d.ts +43 -0
  941. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  942. package/dist/core/web/proveedores/registro.js +49 -0
  943. package/dist/core/web/proveedores/registro.js.map +1 -0
  944. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  945. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  946. package/dist/core/web/proveedores/searxng.js +17 -0
  947. package/dist/core/web/proveedores/searxng.js.map +1 -0
  948. package/dist/core/web/proveedores/serper.d.ts +9 -0
  949. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  950. package/dist/core/web/proveedores/serper.js +19 -0
  951. package/dist/core/web/proveedores/serper.js.map +1 -0
  952. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  953. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  954. package/dist/core/web/proveedores/tavily.js +19 -0
  955. package/dist/core/web/proveedores/tavily.js.map +1 -0
  956. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  957. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  958. package/dist/core/web/proveedores/tipos.js +10 -0
  959. package/dist/core/web/proveedores/tipos.js.map +1 -0
  960. package/dist/core/web/registro-red.d.ts +43 -0
  961. package/dist/core/web/registro-red.d.ts.map +1 -0
  962. package/dist/core/web/registro-red.js +86 -0
  963. package/dist/core/web/registro-red.js.map +1 -0
  964. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  965. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  966. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  967. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  968. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  969. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  970. package/dist/core/web/scrapers/crates-io.js +29 -0
  971. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  972. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  973. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  974. package/dist/core/web/scrapers/docs-rs.js +35 -0
  975. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  976. package/dist/core/web/scrapers/github.d.ts +3 -0
  977. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  978. package/dist/core/web/scrapers/github.js +72 -0
  979. package/dist/core/web/scrapers/github.js.map +1 -0
  980. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  981. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  982. package/dist/core/web/scrapers/go-pkg.js +30 -0
  983. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  984. package/dist/core/web/scrapers/hex.d.ts +6 -0
  985. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  986. package/dist/core/web/scrapers/hex.js +27 -0
  987. package/dist/core/web/scrapers/hex.js.map +1 -0
  988. package/dist/core/web/scrapers/maven.d.ts +8 -0
  989. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  990. package/dist/core/web/scrapers/maven.js +41 -0
  991. package/dist/core/web/scrapers/maven.js.map +1 -0
  992. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  993. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  994. package/dist/core/web/scrapers/mdn.js +28 -0
  995. package/dist/core/web/scrapers/mdn.js.map +1 -0
  996. package/dist/core/web/scrapers/npm.d.ts +11 -0
  997. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  998. package/dist/core/web/scrapers/npm.js +57 -0
  999. package/dist/core/web/scrapers/npm.js.map +1 -0
  1000. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  1001. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  1002. package/dist/core/web/scrapers/nuget.js +22 -0
  1003. package/dist/core/web/scrapers/nuget.js.map +1 -0
  1004. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  1005. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  1006. package/dist/core/web/scrapers/nvd.js +37 -0
  1007. package/dist/core/web/scrapers/nvd.js.map +1 -0
  1008. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  1009. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  1010. package/dist/core/web/scrapers/pypi.js +31 -0
  1011. package/dist/core/web/scrapers/pypi.js.map +1 -0
  1012. package/dist/core/web/scrapers/registro.d.ts +13 -0
  1013. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  1014. package/dist/core/web/scrapers/registro.js +65 -0
  1015. package/dist/core/web/scrapers/registro.js.map +1 -0
  1016. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  1017. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  1018. package/dist/core/web/scrapers/rubygems.js +23 -0
  1019. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  1020. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  1021. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  1022. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  1023. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  1024. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  1025. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  1026. package/dist/core/web/scrapers/tipos.js +23 -0
  1027. package/dist/core/web/scrapers/tipos.js.map +1 -0
  1028. package/dist/core/web/texto.d.ts +10 -0
  1029. package/dist/core/web/texto.d.ts.map +1 -0
  1030. package/dist/core/web/texto.js +26 -0
  1031. package/dist/core/web/texto.js.map +1 -0
  1032. package/dist/core/web/tools.d.ts +91 -0
  1033. package/dist/core/web/tools.d.ts.map +1 -0
  1034. package/dist/core/web/tools.js +304 -0
  1035. package/dist/core/web/tools.js.map +1 -0
  1036. package/dist/core/wiki/almacen.d.ts +33 -0
  1037. package/dist/core/wiki/almacen.d.ts.map +1 -0
  1038. package/dist/core/wiki/almacen.js +93 -0
  1039. package/dist/core/wiki/almacen.js.map +1 -0
  1040. package/dist/core/wiki/citas.d.ts +111 -0
  1041. package/dist/core/wiki/citas.d.ts.map +1 -0
  1042. package/dist/core/wiki/citas.js +146 -0
  1043. package/dist/core/wiki/citas.js.map +1 -0
  1044. package/dist/core/workflows/agent-runner.d.ts +88 -0
  1045. package/dist/core/workflows/agent-runner.d.ts.map +1 -0
  1046. package/dist/core/workflows/agent-runner.js +312 -0
  1047. package/dist/core/workflows/agent-runner.js.map +1 -0
  1048. package/dist/core/workflows/builtins.d.ts +41 -0
  1049. package/dist/core/workflows/builtins.d.ts.map +1 -0
  1050. package/dist/core/workflows/builtins.js +283 -0
  1051. package/dist/core/workflows/builtins.js.map +1 -0
  1052. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  1053. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  1054. package/dist/core/workflows/contrato/esquema.js +25 -0
  1055. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  1056. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  1057. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  1058. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  1059. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  1060. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  1061. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  1062. package/dist/core/workflows/contrato/validador.js +56 -0
  1063. package/dist/core/workflows/contrato/validador.js.map +1 -0
  1064. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  1065. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  1066. package/dist/core/workflows/contrato/yield.js +80 -0
  1067. package/dist/core/workflows/contrato/yield.js.map +1 -0
  1068. package/dist/core/workflows/goal-engine/engine.d.ts +151 -0
  1069. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
  1070. package/dist/core/workflows/goal-engine/engine.js +503 -0
  1071. package/dist/core/workflows/goal-engine/engine.js.map +1 -0
  1072. package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
  1073. package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
  1074. package/dist/core/workflows/goal-engine/errors.js +9 -0
  1075. package/dist/core/workflows/goal-engine/errors.js.map +1 -0
  1076. package/dist/core/workflows/goal-engine/index.d.ts +13 -0
  1077. package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
  1078. package/dist/core/workflows/goal-engine/index.js +8 -0
  1079. package/dist/core/workflows/goal-engine/index.js.map +1 -0
  1080. package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
  1081. package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
  1082. package/dist/core/workflows/goal-engine/persistence.js +145 -0
  1083. package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
  1084. package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
  1085. package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
  1086. package/dist/core/workflows/goal-engine/prompts.js +131 -0
  1087. package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
  1088. package/dist/core/workflows/goal-engine/state.d.ts +41 -0
  1089. package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
  1090. package/dist/core/workflows/goal-engine/state.js +397 -0
  1091. package/dist/core/workflows/goal-engine/state.js.map +1 -0
  1092. package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
  1093. package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
  1094. package/dist/core/workflows/goal-engine/tools.js +211 -0
  1095. package/dist/core/workflows/goal-engine/tools.js.map +1 -0
  1096. package/dist/core/workflows/goal-engine/types.d.ts +286 -0
  1097. package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
  1098. package/dist/core/workflows/goal-engine/types.js +17 -0
  1099. package/dist/core/workflows/goal-engine/types.js.map +1 -0
  1100. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
  1101. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
  1102. package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
  1103. package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
  1104. package/dist/core/workflows/graph-sync.d.ts +67 -0
  1105. package/dist/core/workflows/graph-sync.d.ts.map +1 -0
  1106. package/dist/core/workflows/graph-sync.js +188 -0
  1107. package/dist/core/workflows/graph-sync.js.map +1 -0
  1108. package/dist/core/workflows/graph.d.ts +143 -0
  1109. package/dist/core/workflows/graph.d.ts.map +1 -0
  1110. package/dist/core/workflows/graph.js +319 -0
  1111. package/dist/core/workflows/graph.js.map +1 -0
  1112. package/dist/core/workflows/index.d.ts +26 -0
  1113. package/dist/core/workflows/index.d.ts.map +1 -0
  1114. package/dist/core/workflows/index.js +18 -0
  1115. package/dist/core/workflows/index.js.map +1 -0
  1116. package/dist/core/workflows/journal.d.ts +68 -0
  1117. package/dist/core/workflows/journal.d.ts.map +1 -0
  1118. package/dist/core/workflows/journal.js +83 -0
  1119. package/dist/core/workflows/journal.js.map +1 -0
  1120. package/dist/core/workflows/manager.d.ts +122 -0
  1121. package/dist/core/workflows/manager.d.ts.map +1 -0
  1122. package/dist/core/workflows/manager.js +351 -0
  1123. package/dist/core/workflows/manager.js.map +1 -0
  1124. package/dist/core/workflows/resolve-script.d.ts +35 -0
  1125. package/dist/core/workflows/resolve-script.d.ts.map +1 -0
  1126. package/dist/core/workflows/resolve-script.js +66 -0
  1127. package/dist/core/workflows/resolve-script.js.map +1 -0
  1128. package/dist/core/workflows/runtime.d.ts +62 -0
  1129. package/dist/core/workflows/runtime.d.ts.map +1 -0
  1130. package/dist/core/workflows/runtime.js +380 -0
  1131. package/dist/core/workflows/runtime.js.map +1 -0
  1132. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  1133. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  1134. package/dist/core/workflows/save-as-skill.js +54 -0
  1135. package/dist/core/workflows/save-as-skill.js.map +1 -0
  1136. package/dist/core/workflows/shared-store.d.ts +31 -0
  1137. package/dist/core/workflows/shared-store.d.ts.map +1 -0
  1138. package/dist/core/workflows/shared-store.js +80 -0
  1139. package/dist/core/workflows/shared-store.js.map +1 -0
  1140. package/dist/core/workflows/subagent-host.d.ts +50 -0
  1141. package/dist/core/workflows/subagent-host.d.ts.map +1 -0
  1142. package/dist/core/workflows/subagent-host.js +225 -0
  1143. package/dist/core/workflows/subagent-host.js.map +1 -0
  1144. package/dist/core/workflows/tool-workflow.d.ts +22 -0
  1145. package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
  1146. package/dist/core/workflows/tool-workflow.js +120 -0
  1147. package/dist/core/workflows/tool-workflow.js.map +1 -0
  1148. package/dist/core/workflows/types.d.ts +191 -0
  1149. package/dist/core/workflows/types.d.ts.map +1 -0
  1150. package/dist/core/workflows/types.js +26 -0
  1151. package/dist/core/workflows/types.js.map +1 -0
  1152. package/dist/core/workflows/worktree.d.ts +42 -0
  1153. package/dist/core/workflows/worktree.d.ts.map +1 -0
  1154. package/dist/core/workflows/worktree.js +107 -0
  1155. package/dist/core/workflows/worktree.js.map +1 -0
  1156. package/dist/extensions/llama/index.d.ts.map +1 -1
  1157. package/dist/extensions/llama/index.js +2 -0
  1158. package/dist/extensions/llama/index.js.map +1 -1
  1159. package/dist/extensions/llama/provider.d.ts.map +1 -1
  1160. package/dist/extensions/llama/provider.js +6 -2
  1161. package/dist/extensions/llama/provider.js.map +1 -1
  1162. package/dist/extensions/remoto/index.d.ts +22 -0
  1163. package/dist/extensions/remoto/index.d.ts.map +1 -0
  1164. package/dist/extensions/remoto/index.js +54 -0
  1165. package/dist/extensions/remoto/index.js.map +1 -0
  1166. package/dist/index.d.ts +1 -13
  1167. package/dist/index.d.ts.map +1 -1
  1168. package/dist/index.js +7 -13
  1169. package/dist/index.js.map +1 -1
  1170. package/dist/main.d.ts +4 -0
  1171. package/dist/main.d.ts.map +1 -1
  1172. package/dist/main.js +26 -15
  1173. package/dist/main.js.map +1 -1
  1174. package/dist/migrations.d.ts.map +1 -1
  1175. package/dist/migrations.js +4 -3
  1176. package/dist/migrations.js.map +1 -1
  1177. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1178. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1179. package/dist/modes/acp/acp-mode.js +190 -0
  1180. package/dist/modes/acp/acp-mode.js.map +1 -0
  1181. package/dist/modes/acp/events.d.ts +74 -0
  1182. package/dist/modes/acp/events.d.ts.map +1 -0
  1183. package/dist/modes/acp/events.js +116 -0
  1184. package/dist/modes/acp/events.js.map +1 -0
  1185. package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
  1186. package/dist/modes/interactive/components/home-screen.js +2 -2
  1187. package/dist/modes/interactive/components/home-screen.js.map +1 -1
  1188. package/dist/modes/interactive/components/model-selector.d.ts +9 -3
  1189. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1190. package/dist/modes/interactive/components/model-selector.js +56 -12
  1191. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1192. package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
  1193. package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
  1194. package/dist/modes/interactive/components/prompt-optimization.js +46 -0
  1195. package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
  1196. package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
  1197. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1198. package/dist/modes/interactive/components/settings-selector.js +180 -56
  1199. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1200. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  1201. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  1202. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  1203. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  1204. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
  1205. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1206. package/dist/modes/interactive/components/thinking-selector.js +74 -17
  1207. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1208. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1209. package/dist/modes/interactive/external-editor.js +2 -1
  1210. package/dist/modes/interactive/external-editor.js.map +1 -1
  1211. package/dist/modes/interactive/interactive-mode.d.ts +21 -1
  1212. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1213. package/dist/modes/interactive/interactive-mode.js +709 -75
  1214. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1215. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1216. package/dist/modes/interactive/theme/theme.js +4 -3
  1217. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1218. package/dist/modes/json-event.d.ts +16 -13
  1219. package/dist/modes/json-event.d.ts.map +1 -1
  1220. package/dist/modes/json-event.js +20 -6
  1221. package/dist/modes/json-event.js.map +1 -1
  1222. package/dist/modes/print-mode.d.ts.map +1 -1
  1223. package/dist/modes/print-mode.js +11 -0
  1224. package/dist/modes/print-mode.js.map +1 -1
  1225. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1226. package/dist/modes/rpc/rpc-mode.js +173 -0
  1227. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1228. package/dist/modes/rpc/rpc-types.d.ts +29 -0
  1229. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1230. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1231. package/dist/package-manager-cli.d.ts.map +1 -1
  1232. package/dist/package-manager-cli.js +27 -5
  1233. package/dist/package-manager-cli.js.map +1 -1
  1234. package/dist/server/attach.d.ts +56 -0
  1235. package/dist/server/attach.d.ts.map +1 -0
  1236. package/dist/server/attach.js +130 -0
  1237. package/dist/server/attach.js.map +1 -0
  1238. package/dist/server/extension-ops.d.ts +40 -0
  1239. package/dist/server/extension-ops.d.ts.map +1 -0
  1240. package/dist/server/extension-ops.js +146 -0
  1241. package/dist/server/extension-ops.js.map +1 -0
  1242. package/dist/server/pi-server-service.d.ts +85 -0
  1243. package/dist/server/pi-server-service.d.ts.map +1 -0
  1244. package/dist/server/pi-server-service.js +213 -0
  1245. package/dist/server/pi-server-service.js.map +1 -0
  1246. package/dist/server/scheduler-tick.d.ts +32 -0
  1247. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1248. package/dist/server/scheduler-tick.js +47 -0
  1249. package/dist/server/scheduler-tick.js.map +1 -0
  1250. package/dist/server/serve.d.ts +25 -0
  1251. package/dist/server/serve.d.ts.map +1 -0
  1252. package/dist/server/serve.js +83 -0
  1253. package/dist/server/serve.js.map +1 -0
  1254. package/dist/server/transcript.d.ts +38 -0
  1255. package/dist/server/transcript.d.ts.map +1 -0
  1256. package/dist/server/transcript.js +176 -0
  1257. package/dist/server/transcript.js.map +1 -0
  1258. package/dist/skills/ada-engine/SKILL.md +153 -0
  1259. package/dist/skills/skill-creator/SKILL.md +90 -0
  1260. package/dist/telegram/api.d.ts +75 -0
  1261. package/dist/telegram/api.d.ts.map +1 -0
  1262. package/dist/telegram/api.js +104 -0
  1263. package/dist/telegram/api.js.map +1 -0
  1264. package/dist/telegram/bridge.d.ts +85 -0
  1265. package/dist/telegram/bridge.d.ts.map +1 -0
  1266. package/dist/telegram/bridge.js +182 -0
  1267. package/dist/telegram/bridge.js.map +1 -0
  1268. package/dist/telegram/journal.d.ts +67 -0
  1269. package/dist/telegram/journal.d.ts.map +1 -0
  1270. package/dist/telegram/journal.js +119 -0
  1271. package/dist/telegram/journal.js.map +1 -0
  1272. package/dist/telegram/servidor.d.ts +15 -0
  1273. package/dist/telegram/servidor.d.ts.map +1 -0
  1274. package/dist/telegram/servidor.js +74 -0
  1275. package/dist/telegram/servidor.js.map +1 -0
  1276. package/dist/utils/frontmatter.d.ts.map +1 -1
  1277. package/dist/utils/frontmatter.js +2 -1
  1278. package/dist/utils/frontmatter.js.map +1 -1
  1279. package/dist/utils/management-http.d.ts +5 -3
  1280. package/dist/utils/management-http.d.ts.map +1 -1
  1281. package/dist/utils/management-http.js +14 -10
  1282. package/dist/utils/management-http.js.map +1 -1
  1283. package/dist/utils/shell.d.ts +11 -0
  1284. package/dist/utils/shell.d.ts.map +1 -1
  1285. package/dist/utils/shell.js +11 -0
  1286. package/dist/utils/shell.js.map +1 -1
  1287. package/dist/utils/text.d.ts +8 -0
  1288. package/dist/utils/text.d.ts.map +1 -0
  1289. package/dist/utils/text.js +9 -0
  1290. package/dist/utils/text.js.map +1 -0
  1291. package/dist/utils/version-check.d.ts.map +1 -1
  1292. package/dist/utils/version-check.js +29 -1
  1293. package/dist/utils/version-check.js.map +1 -1
  1294. package/docs/compaction.md +25 -10
  1295. package/docs/compliance.md +241 -0
  1296. package/docs/containerization.md +24 -24
  1297. package/docs/custom-provider.md +15 -12
  1298. package/docs/development.md +47 -10
  1299. package/docs/docs.json +14 -2
  1300. package/docs/environment-variables.md +20 -17
  1301. package/docs/extensions.md +62 -51
  1302. package/docs/index.md +15 -21
  1303. package/docs/json.md +10 -5
  1304. package/docs/keybindings.md +5 -5
  1305. package/docs/llama-cpp.md +9 -7
  1306. package/docs/models.md +18 -12
  1307. package/docs/packages.md +45 -45
  1308. package/docs/prompt-templates.md +5 -5
  1309. package/docs/providers.md +12 -12
  1310. package/docs/quickstart.md +39 -39
  1311. package/docs/rpc.md +21 -15
  1312. package/docs/sdk.md +38 -38
  1313. package/docs/security.md +26 -21
  1314. package/docs/session-format.md +7 -7
  1315. package/docs/sessions.md +14 -14
  1316. package/docs/settings.md +47 -22
  1317. package/docs/shell-aliases.md +2 -2
  1318. package/docs/skills.md +14 -13
  1319. package/docs/terminal-setup.md +14 -14
  1320. package/docs/termux.md +7 -7
  1321. package/docs/themes.md +11 -11
  1322. package/docs/tmux.md +4 -4
  1323. package/docs/tui.md +3 -3
  1324. package/docs/usage.md +54 -54
  1325. package/docs/windows.md +2 -2
  1326. package/examples/extensions/border-status-editor.ts +1 -1
  1327. package/examples/extensions/git-checkpoint.ts +2 -2
  1328. package/examples/extensions/notify.ts +3 -1
  1329. package/examples/extensions/subagent/README.md +1 -1
  1330. package/examples/extensions/subagent/index.ts +6 -1
  1331. package/examples/extensions/titlebar-spinner.ts +1 -1
  1332. package/examples/rpc-extension-ui.ts +1 -1
  1333. package/examples/sdk/06-extensions.ts +1 -1
  1334. package/examples/sdk/12-full-control.ts +9 -0
  1335. package/examples/sdk/README.md +1 -1
  1336. package/npm-shrinkwrap.json +35 -261
  1337. package/package.json +9 -3
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Subagentes definidos por el usuario en Markdown.
3
+ *
4
+ * `~/.ada/agents/<nombre>.md` (usuario) y `<proyecto>/.ada/agents/<nombre>.md`
5
+ * (proyecto). El frontmatter configura el subagente y el cuerpo es su prompt.
6
+ *
7
+ * Dos cosas que este cargador hace y el contrato que copiamos no:
8
+ *
9
+ * 1. **Los booleanos se validan de verdad.** `readOnly` y `web` deciden si un
10
+ * agente puede escribir ficheros o sacar por la red lo que ha leído. Un
11
+ * `readOnly: "no"` que YAML entrega como cadena es truthy, y aceptarlo sin
12
+ * mirar convertiría una errata en un permiso. Se rechaza el fichero entero y
13
+ * se dice cuál es.
14
+ *
15
+ * 2. **Los de proyecto exigen confianza.** Un `.ada/agents/*.md` viene del
16
+ * repositorio, igual que una extensión: abrir un repo ajeno no puede
17
+ * definir un agente con `web: true` que lea el código y lo mande fuera.
18
+ */
19
+ import type { TSchema } from "typebox";
20
+ export interface AgenteDefinido {
21
+ nombre: string;
22
+ descripcion?: string;
23
+ /** El cuerpo del Markdown: el prompt de sistema del subagente. */
24
+ instrucciones: string;
25
+ model?: string;
26
+ tier?: string;
27
+ readOnly?: boolean;
28
+ web?: boolean;
29
+ isolation?: "none" | "worktree";
30
+ timeoutMs?: number;
31
+ /**
32
+ * Esquema de salida (JSON Schema) declarado en `outputSchema:` del
33
+ * frontmatter. El host lo usa para validar la salida del subagente y
34
+ * reintentar con el error concreto si no valida — ver contrato/validador.ts.
35
+ */
36
+ esquemaSalida?: TSchema;
37
+ alcance: "usuario" | "proyecto";
38
+ ruta: string;
39
+ }
40
+ export interface ProblemaAgente {
41
+ ruta: string;
42
+ motivo: string;
43
+ }
44
+ /** Analiza un fichero de agente. Lanza con un motivo legible si no vale. */
45
+ export declare function analizarAgente(contenido: string, ruta: string, alcance: "usuario" | "proyecto"): AgenteDefinido;
46
+ export interface OpcionesCarga {
47
+ agentDir: string;
48
+ cwd: string;
49
+ /** Los de proyecto solo cargan si el proyecto es de confianza. Ver cabecera. */
50
+ proyectoDeConfianza: boolean;
51
+ configDirName: string;
52
+ }
53
+ export interface CargaAgentes {
54
+ agentes: AgenteDefinido[];
55
+ problemas: ProblemaAgente[];
56
+ /** Cuántos de proyecto se ignoraron por falta de confianza. */
57
+ bloqueadosSinConfianza: number;
58
+ }
59
+ /**
60
+ * Carga los agentes de usuario y, si el proyecto es de confianza, los suyos.
61
+ *
62
+ * Los de proyecto pisan a los de usuario con el mismo nombre: quien abre un
63
+ * repositorio y decide confiar en él está pidiendo su configuración.
64
+ */
65
+ export declare function cargarAgentes(opciones: OpcionesCarga): CargaAgentes;
66
+ /** Traduce un agente definido a las opciones que entiende el runtime. */
67
+ export declare function aOpcionesDeAgente(agente: AgenteDefinido): {
68
+ instructions: string;
69
+ model?: string;
70
+ tier?: string;
71
+ readOnly?: boolean;
72
+ web?: boolean;
73
+ isolation?: "none" | "worktree";
74
+ timeoutMs?: number;
75
+ schema?: TSchema;
76
+ };
77
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/agents/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIvC,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,SAAS,GAAG,UAAU,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CACf;AAiBD,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,UAAU,GAAG,cAAc,CA2D/G;AA6BD,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,mBAAmB,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,gEAA+D;IAC/D,sBAAsB,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,YAAY,CAmBnE;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,CAWA","sourcesContent":["/**\n * Subagentes definidos por el usuario en Markdown.\n *\n * `~/.ada/agents/<nombre>.md` (usuario) y `<proyecto>/.ada/agents/<nombre>.md`\n * (proyecto). El frontmatter configura el subagente y el cuerpo es su prompt.\n *\n * Dos cosas que este cargador hace y el contrato que copiamos no:\n *\n * 1. **Los booleanos se validan de verdad.** `readOnly` y `web` deciden si un\n * agente puede escribir ficheros o sacar por la red lo que ha leído. Un\n * `readOnly: \"no\"` que YAML entrega como cadena es truthy, y aceptarlo sin\n * mirar convertiría una errata en un permiso. Se rechaza el fichero entero y\n * se dice cuál es.\n *\n * 2. **Los de proyecto exigen confianza.** Un `.ada/agents/*.md` viene del\n * repositorio, igual que una extensión: abrir un repo ajeno no puede\n * definir un agente con `web: true` que lea el código y lo mande fuera.\n */\n\nimport { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport type { TSchema } from \"typebox\";\nimport { parseFrontmatter } from \"../../utils/frontmatter.ts\";\nimport { esEsquemaValido } from \"../workflows/contrato/esquema.ts\";\n\nexport interface AgenteDefinido {\n\tnombre: string;\n\tdescripcion?: string;\n\t/** El cuerpo del Markdown: el prompt de sistema del subagente. */\n\tinstrucciones: string;\n\tmodel?: string;\n\ttier?: string;\n\treadOnly?: boolean;\n\tweb?: boolean;\n\tisolation?: \"none\" | \"worktree\";\n\ttimeoutMs?: number;\n\t/**\n\t * Esquema de salida (JSON Schema) declarado en `outputSchema:` del\n\t * frontmatter. El host lo usa para validar la salida del subagente y\n\t * reintentar con el error concreto si no valida — ver contrato/validador.ts.\n\t */\n\tesquemaSalida?: TSchema;\n\talcance: \"usuario\" | \"proyecto\";\n\truta: string;\n}\n\nexport interface ProblemaAgente {\n\truta: string;\n\tmotivo: string;\n}\n\nconst TIERS = new Set([\"small\", \"medium\", \"big\"]);\n\n/**\n * Booleano estricto.\n *\n * Devuelve `undefined` si el campo no está, y lanza si está y no es un booleano\n * de verdad. Ver el punto 1 de la cabecera: aquí un \"casi booleano\" es un\n * permiso mal concedido.\n */\nfunction booleanoEstricto(valor: unknown, campo: string): boolean | undefined {\n\tif (valor === undefined || valor === null) return undefined;\n\tif (typeof valor === \"boolean\") return valor;\n\tthrow new Error(`'${campo}' tiene que ser true o false, no ${JSON.stringify(valor)}`);\n}\n\n/** Analiza un fichero de agente. Lanza con un motivo legible si no vale. */\nexport function analizarAgente(contenido: string, ruta: string, alcance: \"usuario\" | \"proyecto\"): AgenteDefinido {\n\tconst { frontmatter, body } = parseFrontmatter<Record<string, unknown>>(contenido);\n\n\tconst nombreDeclarado = typeof frontmatter.name === \"string\" ? frontmatter.name.trim() : \"\";\n\t// El nombre del fichero manda si no se declara: es lo que el usuario escribe.\n\tconst nombre = nombreDeclarado || basename(ruta).replace(/\\.md$/i, \"\");\n\tif (!/^[a-z0-9][a-z0-9_-]*$/i.test(nombre)) {\n\t\tthrow new Error(`nombre inválido: '${nombre}' (solo letras, números, guion y guion bajo)`);\n\t}\n\tif (!body.trim()) {\n\t\tthrow new Error(\"el cuerpo está vacío: un agente sin instrucciones no hace nada\");\n\t}\n\n\tconst tier = typeof frontmatter.tier === \"string\" ? frontmatter.tier : undefined;\n\tif (tier && !TIERS.has(tier)) {\n\t\tthrow new Error(`tier desconocido: '${tier}' (small, medium o big)`);\n\t}\n\n\tconst isolation = typeof frontmatter.isolation === \"string\" ? frontmatter.isolation : undefined;\n\tif (isolation && isolation !== \"none\" && isolation !== \"worktree\") {\n\t\tthrow new Error(`isolation desconocido: '${isolation}' (none o worktree)`);\n\t}\n\n\tconst timeoutMs = frontmatter.timeoutMs;\n\tif (timeoutMs !== undefined && (typeof timeoutMs !== \"number\" || !Number.isFinite(timeoutMs) || timeoutMs <= 0)) {\n\t\tthrow new Error(`timeoutMs tiene que ser un número de milisegundos positivo`);\n\t}\n\n\tconst model = typeof frontmatter.model === \"string\" ? frontmatter.model.trim() : undefined;\n\tif (model === \"\") {\n\t\tthrow new Error(\"model está vacío: quítalo o pon 'proveedor/modelo'\");\n\t}\n\n\t// outputSchema declara el CONTRATO de salida: el host lo valida y reintenta\n\t// con el error concreto si no cumple (contrato/validador.ts). Un esquema\n\t// presente pero sin pinta de JSON Schema (`{}`, una lista, un string...) se\n\t// rechaza aquí — aceptarlo callado dejaría \"validar\" cualquier cosa.\n\tlet esquemaSalida: TSchema | undefined;\n\tif (frontmatter.outputSchema !== undefined) {\n\t\tif (!esEsquemaValido(frontmatter.outputSchema)) {\n\t\t\tthrow new Error(\"outputSchema no parece un JSON Schema válido (falta type/properties/anyOf/enum/...)\");\n\t\t}\n\t\tesquemaSalida = frontmatter.outputSchema;\n\t}\n\n\treturn {\n\t\tnombre,\n\t\tdescripcion: typeof frontmatter.description === \"string\" ? frontmatter.description : undefined,\n\t\tinstrucciones: body.trim(),\n\t\tmodel,\n\t\ttier,\n\t\treadOnly: booleanoEstricto(frontmatter.readOnly, \"readOnly\"),\n\t\tweb: booleanoEstricto(frontmatter.web, \"web\"),\n\t\tisolation: isolation as \"none\" | \"worktree\" | undefined,\n\t\ttimeoutMs: timeoutMs as number | undefined,\n\t\tesquemaSalida,\n\t\talcance,\n\t\truta,\n\t};\n}\n\nfunction leerDirectorio(\n\tdir: string,\n\talcance: \"usuario\" | \"proyecto\",\n\tagentes: Map<string, AgenteDefinido>,\n\tproblemas: ProblemaAgente[],\n): void {\n\tif (!existsSync(dir)) return;\n\tlet ficheros: string[];\n\ttry {\n\t\tficheros = readdirSync(dir).filter((f) => f.toLowerCase().endsWith(\".md\"));\n\t} catch (error) {\n\t\tproblemas.push({ ruta: dir, motivo: error instanceof Error ? error.message : String(error) });\n\t\treturn;\n\t}\n\tfor (const fichero of ficheros.sort()) {\n\t\tconst ruta = join(dir, fichero);\n\t\ttry {\n\t\t\tconst agente = analizarAgente(readFileSync(ruta, \"utf8\"), ruta, alcance);\n\t\t\tagentes.set(agente.nombre, agente);\n\t\t} catch (error) {\n\t\t\t// Un fichero roto no puede impedir que carguen los demás, pero SÍ se\n\t\t\t// cuenta: un agente que desaparece en silencio es peor que un error.\n\t\t\tproblemas.push({ ruta, motivo: error instanceof Error ? error.message : String(error) });\n\t\t}\n\t}\n}\n\nexport interface OpcionesCarga {\n\tagentDir: string;\n\tcwd: string;\n\t/** Los de proyecto solo cargan si el proyecto es de confianza. Ver cabecera. */\n\tproyectoDeConfianza: boolean;\n\tconfigDirName: string;\n}\n\nexport interface CargaAgentes {\n\tagentes: AgenteDefinido[];\n\tproblemas: ProblemaAgente[];\n\t/** Cuántos de proyecto se ignoraron por falta de confianza. */\n\tbloqueadosSinConfianza: number;\n}\n\n/**\n * Carga los agentes de usuario y, si el proyecto es de confianza, los suyos.\n *\n * Los de proyecto pisan a los de usuario con el mismo nombre: quien abre un\n * repositorio y decide confiar en él está pidiendo su configuración.\n */\nexport function cargarAgentes(opciones: OpcionesCarga): CargaAgentes {\n\tconst agentes = new Map<string, AgenteDefinido>();\n\tconst problemas: ProblemaAgente[] = [];\n\n\tleerDirectorio(join(opciones.agentDir, \"agents\"), \"usuario\", agentes, problemas);\n\n\tconst dirProyecto = join(opciones.cwd, opciones.configDirName, \"agents\");\n\tlet bloqueadosSinConfianza = 0;\n\tif (opciones.proyectoDeConfianza) {\n\t\tleerDirectorio(dirProyecto, \"proyecto\", agentes, problemas);\n\t} else if (existsSync(dirProyecto)) {\n\t\ttry {\n\t\t\tbloqueadosSinConfianza = readdirSync(dirProyecto).filter((f) => f.toLowerCase().endsWith(\".md\")).length;\n\t\t} catch {\n\t\t\tbloqueadosSinConfianza = 0;\n\t\t}\n\t}\n\n\treturn { agentes: [...agentes.values()], problemas, bloqueadosSinConfianza };\n}\n\n/** Traduce un agente definido a las opciones que entiende el runtime. */\nexport function aOpcionesDeAgente(agente: AgenteDefinido): {\n\tinstructions: string;\n\tmodel?: string;\n\ttier?: string;\n\treadOnly?: boolean;\n\tweb?: boolean;\n\tisolation?: \"none\" | \"worktree\";\n\ttimeoutMs?: number;\n\tschema?: TSchema;\n} {\n\treturn {\n\t\tinstructions: agente.instrucciones,\n\t\tmodel: agente.model,\n\t\ttier: agente.tier,\n\t\treadOnly: agente.readOnly,\n\t\tweb: agente.web,\n\t\tisolation: agente.isolation,\n\t\ttimeoutMs: agente.timeoutMs,\n\t\tschema: agente.esquemaSalida,\n\t};\n}\n"]}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Subagentes definidos por el usuario en Markdown.
3
+ *
4
+ * `~/.ada/agents/<nombre>.md` (usuario) y `<proyecto>/.ada/agents/<nombre>.md`
5
+ * (proyecto). El frontmatter configura el subagente y el cuerpo es su prompt.
6
+ *
7
+ * Dos cosas que este cargador hace y el contrato que copiamos no:
8
+ *
9
+ * 1. **Los booleanos se validan de verdad.** `readOnly` y `web` deciden si un
10
+ * agente puede escribir ficheros o sacar por la red lo que ha leído. Un
11
+ * `readOnly: "no"` que YAML entrega como cadena es truthy, y aceptarlo sin
12
+ * mirar convertiría una errata en un permiso. Se rechaza el fichero entero y
13
+ * se dice cuál es.
14
+ *
15
+ * 2. **Los de proyecto exigen confianza.** Un `.ada/agents/*.md` viene del
16
+ * repositorio, igual que una extensión: abrir un repo ajeno no puede
17
+ * definir un agente con `web: true` que lea el código y lo mande fuera.
18
+ */
19
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
20
+ import { basename, join } from "node:path";
21
+ import { parseFrontmatter } from "../../utils/frontmatter.js";
22
+ import { esEsquemaValido } from "../workflows/contrato/esquema.js";
23
+ const TIERS = new Set(["small", "medium", "big"]);
24
+ /**
25
+ * Booleano estricto.
26
+ *
27
+ * Devuelve `undefined` si el campo no está, y lanza si está y no es un booleano
28
+ * de verdad. Ver el punto 1 de la cabecera: aquí un "casi booleano" es un
29
+ * permiso mal concedido.
30
+ */
31
+ function booleanoEstricto(valor, campo) {
32
+ if (valor === undefined || valor === null)
33
+ return undefined;
34
+ if (typeof valor === "boolean")
35
+ return valor;
36
+ throw new Error(`'${campo}' tiene que ser true o false, no ${JSON.stringify(valor)}`);
37
+ }
38
+ /** Analiza un fichero de agente. Lanza con un motivo legible si no vale. */
39
+ export function analizarAgente(contenido, ruta, alcance) {
40
+ const { frontmatter, body } = parseFrontmatter(contenido);
41
+ const nombreDeclarado = typeof frontmatter.name === "string" ? frontmatter.name.trim() : "";
42
+ // El nombre del fichero manda si no se declara: es lo que el usuario escribe.
43
+ const nombre = nombreDeclarado || basename(ruta).replace(/\.md$/i, "");
44
+ if (!/^[a-z0-9][a-z0-9_-]*$/i.test(nombre)) {
45
+ throw new Error(`nombre inválido: '${nombre}' (solo letras, números, guion y guion bajo)`);
46
+ }
47
+ if (!body.trim()) {
48
+ throw new Error("el cuerpo está vacío: un agente sin instrucciones no hace nada");
49
+ }
50
+ const tier = typeof frontmatter.tier === "string" ? frontmatter.tier : undefined;
51
+ if (tier && !TIERS.has(tier)) {
52
+ throw new Error(`tier desconocido: '${tier}' (small, medium o big)`);
53
+ }
54
+ const isolation = typeof frontmatter.isolation === "string" ? frontmatter.isolation : undefined;
55
+ if (isolation && isolation !== "none" && isolation !== "worktree") {
56
+ throw new Error(`isolation desconocido: '${isolation}' (none o worktree)`);
57
+ }
58
+ const timeoutMs = frontmatter.timeoutMs;
59
+ if (timeoutMs !== undefined && (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs) || timeoutMs <= 0)) {
60
+ throw new Error(`timeoutMs tiene que ser un número de milisegundos positivo`);
61
+ }
62
+ const model = typeof frontmatter.model === "string" ? frontmatter.model.trim() : undefined;
63
+ if (model === "") {
64
+ throw new Error("model está vacío: quítalo o pon 'proveedor/modelo'");
65
+ }
66
+ // outputSchema declara el CONTRATO de salida: el host lo valida y reintenta
67
+ // con el error concreto si no cumple (contrato/validador.ts). Un esquema
68
+ // presente pero sin pinta de JSON Schema (`{}`, una lista, un string...) se
69
+ // rechaza aquí — aceptarlo callado dejaría "validar" cualquier cosa.
70
+ let esquemaSalida;
71
+ if (frontmatter.outputSchema !== undefined) {
72
+ if (!esEsquemaValido(frontmatter.outputSchema)) {
73
+ throw new Error("outputSchema no parece un JSON Schema válido (falta type/properties/anyOf/enum/...)");
74
+ }
75
+ esquemaSalida = frontmatter.outputSchema;
76
+ }
77
+ return {
78
+ nombre,
79
+ descripcion: typeof frontmatter.description === "string" ? frontmatter.description : undefined,
80
+ instrucciones: body.trim(),
81
+ model,
82
+ tier,
83
+ readOnly: booleanoEstricto(frontmatter.readOnly, "readOnly"),
84
+ web: booleanoEstricto(frontmatter.web, "web"),
85
+ isolation: isolation,
86
+ timeoutMs: timeoutMs,
87
+ esquemaSalida,
88
+ alcance,
89
+ ruta,
90
+ };
91
+ }
92
+ function leerDirectorio(dir, alcance, agentes, problemas) {
93
+ if (!existsSync(dir))
94
+ return;
95
+ let ficheros;
96
+ try {
97
+ ficheros = readdirSync(dir).filter((f) => f.toLowerCase().endsWith(".md"));
98
+ }
99
+ catch (error) {
100
+ problemas.push({ ruta: dir, motivo: error instanceof Error ? error.message : String(error) });
101
+ return;
102
+ }
103
+ for (const fichero of ficheros.sort()) {
104
+ const ruta = join(dir, fichero);
105
+ try {
106
+ const agente = analizarAgente(readFileSync(ruta, "utf8"), ruta, alcance);
107
+ agentes.set(agente.nombre, agente);
108
+ }
109
+ catch (error) {
110
+ // Un fichero roto no puede impedir que carguen los demás, pero SÍ se
111
+ // cuenta: un agente que desaparece en silencio es peor que un error.
112
+ problemas.push({ ruta, motivo: error instanceof Error ? error.message : String(error) });
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * Carga los agentes de usuario y, si el proyecto es de confianza, los suyos.
118
+ *
119
+ * Los de proyecto pisan a los de usuario con el mismo nombre: quien abre un
120
+ * repositorio y decide confiar en él está pidiendo su configuración.
121
+ */
122
+ export function cargarAgentes(opciones) {
123
+ const agentes = new Map();
124
+ const problemas = [];
125
+ leerDirectorio(join(opciones.agentDir, "agents"), "usuario", agentes, problemas);
126
+ const dirProyecto = join(opciones.cwd, opciones.configDirName, "agents");
127
+ let bloqueadosSinConfianza = 0;
128
+ if (opciones.proyectoDeConfianza) {
129
+ leerDirectorio(dirProyecto, "proyecto", agentes, problemas);
130
+ }
131
+ else if (existsSync(dirProyecto)) {
132
+ try {
133
+ bloqueadosSinConfianza = readdirSync(dirProyecto).filter((f) => f.toLowerCase().endsWith(".md")).length;
134
+ }
135
+ catch {
136
+ bloqueadosSinConfianza = 0;
137
+ }
138
+ }
139
+ return { agentes: [...agentes.values()], problemas, bloqueadosSinConfianza };
140
+ }
141
+ /** Traduce un agente definido a las opciones que entiende el runtime. */
142
+ export function aOpcionesDeAgente(agente) {
143
+ return {
144
+ instructions: agente.instrucciones,
145
+ model: agente.model,
146
+ tier: agente.tier,
147
+ readOnly: agente.readOnly,
148
+ web: agente.web,
149
+ isolation: agente.isolation,
150
+ timeoutMs: agente.timeoutMs,
151
+ schema: agente.esquemaSalida,
152
+ };
153
+ }
154
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/agents/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AA4BnE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAElD;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,KAAc,EAAE,KAAa,EAAuB;IAC7E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,oCAAoC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAAA,CACtF;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,IAAY,EAAE,OAA+B,EAAkB;IAChH,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAA0B,SAAS,CAAC,CAAC;IAEnF,MAAM,eAAe,GAAG,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,8EAA8E;IAC9E,MAAM,MAAM,GAAG,eAAe,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,sBAAqB,MAAM,+CAA8C,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,kEAAgE,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,yBAAyB,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,WAAW,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAChG,IAAI,SAAS,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,qBAAqB,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;IACxC,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC;QACjH,MAAM,IAAI,KAAK,CAAC,6DAA4D,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,uDAAoD,CAAC,CAAC;IACvE,CAAC;IAED,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAC5E,yEAAqE;IACrE,IAAI,aAAkC,CAAC;IACvC,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC5C,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,sFAAqF,CAAC,CAAC;QACxG,CAAC;QACD,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC;IAC1C,CAAC;IAED,OAAO;QACN,MAAM;QACN,WAAW,EAAE,OAAO,WAAW,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC9F,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE;QAC1B,KAAK;QACL,IAAI;QACJ,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC5D,GAAG,EAAE,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;QAC7C,SAAS,EAAE,SAA4C;QACvD,SAAS,EAAE,SAA+B;QAC1C,aAAa;QACb,OAAO;QACP,IAAI;KACJ,CAAC;AAAA,CACF;AAED,SAAS,cAAc,CACtB,GAAW,EACX,OAA+B,EAC/B,OAAoC,EACpC,SAA2B,EACpB;IACP,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO;IAC7B,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACJ,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9F,OAAO;IACR,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,uEAAqE;YACrE,qEAAqE;YACrE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;IACF,CAAC;AAAA,CACD;AAiBD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,QAAuB,EAAgB;IACpE,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAClD,MAAM,SAAS,GAAqB,EAAE,CAAC;IAEvC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAEjF,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACzE,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAC/B,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAClC,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACJ,sBAAsB,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACzG,CAAC;QAAC,MAAM,CAAC;YACR,sBAAsB,GAAG,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC;AAAA,CAC7E;AAED,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,MAAsB,EAStD;IACD,OAAO;QACN,YAAY,EAAE,MAAM,CAAC,aAAa;QAClC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,aAAa;KAC5B,CAAC;AAAA,CACF","sourcesContent":["/**\n * Subagentes definidos por el usuario en Markdown.\n *\n * `~/.ada/agents/<nombre>.md` (usuario) y `<proyecto>/.ada/agents/<nombre>.md`\n * (proyecto). El frontmatter configura el subagente y el cuerpo es su prompt.\n *\n * Dos cosas que este cargador hace y el contrato que copiamos no:\n *\n * 1. **Los booleanos se validan de verdad.** `readOnly` y `web` deciden si un\n * agente puede escribir ficheros o sacar por la red lo que ha leído. Un\n * `readOnly: \"no\"` que YAML entrega como cadena es truthy, y aceptarlo sin\n * mirar convertiría una errata en un permiso. Se rechaza el fichero entero y\n * se dice cuál es.\n *\n * 2. **Los de proyecto exigen confianza.** Un `.ada/agents/*.md` viene del\n * repositorio, igual que una extensión: abrir un repo ajeno no puede\n * definir un agente con `web: true` que lea el código y lo mande fuera.\n */\n\nimport { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport type { TSchema } from \"typebox\";\nimport { parseFrontmatter } from \"../../utils/frontmatter.ts\";\nimport { esEsquemaValido } from \"../workflows/contrato/esquema.ts\";\n\nexport interface AgenteDefinido {\n\tnombre: string;\n\tdescripcion?: string;\n\t/** El cuerpo del Markdown: el prompt de sistema del subagente. */\n\tinstrucciones: string;\n\tmodel?: string;\n\ttier?: string;\n\treadOnly?: boolean;\n\tweb?: boolean;\n\tisolation?: \"none\" | \"worktree\";\n\ttimeoutMs?: number;\n\t/**\n\t * Esquema de salida (JSON Schema) declarado en `outputSchema:` del\n\t * frontmatter. El host lo usa para validar la salida del subagente y\n\t * reintentar con el error concreto si no valida — ver contrato/validador.ts.\n\t */\n\tesquemaSalida?: TSchema;\n\talcance: \"usuario\" | \"proyecto\";\n\truta: string;\n}\n\nexport interface ProblemaAgente {\n\truta: string;\n\tmotivo: string;\n}\n\nconst TIERS = new Set([\"small\", \"medium\", \"big\"]);\n\n/**\n * Booleano estricto.\n *\n * Devuelve `undefined` si el campo no está, y lanza si está y no es un booleano\n * de verdad. Ver el punto 1 de la cabecera: aquí un \"casi booleano\" es un\n * permiso mal concedido.\n */\nfunction booleanoEstricto(valor: unknown, campo: string): boolean | undefined {\n\tif (valor === undefined || valor === null) return undefined;\n\tif (typeof valor === \"boolean\") return valor;\n\tthrow new Error(`'${campo}' tiene que ser true o false, no ${JSON.stringify(valor)}`);\n}\n\n/** Analiza un fichero de agente. Lanza con un motivo legible si no vale. */\nexport function analizarAgente(contenido: string, ruta: string, alcance: \"usuario\" | \"proyecto\"): AgenteDefinido {\n\tconst { frontmatter, body } = parseFrontmatter<Record<string, unknown>>(contenido);\n\n\tconst nombreDeclarado = typeof frontmatter.name === \"string\" ? frontmatter.name.trim() : \"\";\n\t// El nombre del fichero manda si no se declara: es lo que el usuario escribe.\n\tconst nombre = nombreDeclarado || basename(ruta).replace(/\\.md$/i, \"\");\n\tif (!/^[a-z0-9][a-z0-9_-]*$/i.test(nombre)) {\n\t\tthrow new Error(`nombre inválido: '${nombre}' (solo letras, números, guion y guion bajo)`);\n\t}\n\tif (!body.trim()) {\n\t\tthrow new Error(\"el cuerpo está vacío: un agente sin instrucciones no hace nada\");\n\t}\n\n\tconst tier = typeof frontmatter.tier === \"string\" ? frontmatter.tier : undefined;\n\tif (tier && !TIERS.has(tier)) {\n\t\tthrow new Error(`tier desconocido: '${tier}' (small, medium o big)`);\n\t}\n\n\tconst isolation = typeof frontmatter.isolation === \"string\" ? frontmatter.isolation : undefined;\n\tif (isolation && isolation !== \"none\" && isolation !== \"worktree\") {\n\t\tthrow new Error(`isolation desconocido: '${isolation}' (none o worktree)`);\n\t}\n\n\tconst timeoutMs = frontmatter.timeoutMs;\n\tif (timeoutMs !== undefined && (typeof timeoutMs !== \"number\" || !Number.isFinite(timeoutMs) || timeoutMs <= 0)) {\n\t\tthrow new Error(`timeoutMs tiene que ser un número de milisegundos positivo`);\n\t}\n\n\tconst model = typeof frontmatter.model === \"string\" ? frontmatter.model.trim() : undefined;\n\tif (model === \"\") {\n\t\tthrow new Error(\"model está vacío: quítalo o pon 'proveedor/modelo'\");\n\t}\n\n\t// outputSchema declara el CONTRATO de salida: el host lo valida y reintenta\n\t// con el error concreto si no cumple (contrato/validador.ts). Un esquema\n\t// presente pero sin pinta de JSON Schema (`{}`, una lista, un string...) se\n\t// rechaza aquí — aceptarlo callado dejaría \"validar\" cualquier cosa.\n\tlet esquemaSalida: TSchema | undefined;\n\tif (frontmatter.outputSchema !== undefined) {\n\t\tif (!esEsquemaValido(frontmatter.outputSchema)) {\n\t\t\tthrow new Error(\"outputSchema no parece un JSON Schema válido (falta type/properties/anyOf/enum/...)\");\n\t\t}\n\t\tesquemaSalida = frontmatter.outputSchema;\n\t}\n\n\treturn {\n\t\tnombre,\n\t\tdescripcion: typeof frontmatter.description === \"string\" ? frontmatter.description : undefined,\n\t\tinstrucciones: body.trim(),\n\t\tmodel,\n\t\ttier,\n\t\treadOnly: booleanoEstricto(frontmatter.readOnly, \"readOnly\"),\n\t\tweb: booleanoEstricto(frontmatter.web, \"web\"),\n\t\tisolation: isolation as \"none\" | \"worktree\" | undefined,\n\t\ttimeoutMs: timeoutMs as number | undefined,\n\t\tesquemaSalida,\n\t\talcance,\n\t\truta,\n\t};\n}\n\nfunction leerDirectorio(\n\tdir: string,\n\talcance: \"usuario\" | \"proyecto\",\n\tagentes: Map<string, AgenteDefinido>,\n\tproblemas: ProblemaAgente[],\n): void {\n\tif (!existsSync(dir)) return;\n\tlet ficheros: string[];\n\ttry {\n\t\tficheros = readdirSync(dir).filter((f) => f.toLowerCase().endsWith(\".md\"));\n\t} catch (error) {\n\t\tproblemas.push({ ruta: dir, motivo: error instanceof Error ? error.message : String(error) });\n\t\treturn;\n\t}\n\tfor (const fichero of ficheros.sort()) {\n\t\tconst ruta = join(dir, fichero);\n\t\ttry {\n\t\t\tconst agente = analizarAgente(readFileSync(ruta, \"utf8\"), ruta, alcance);\n\t\t\tagentes.set(agente.nombre, agente);\n\t\t} catch (error) {\n\t\t\t// Un fichero roto no puede impedir que carguen los demás, pero SÍ se\n\t\t\t// cuenta: un agente que desaparece en silencio es peor que un error.\n\t\t\tproblemas.push({ ruta, motivo: error instanceof Error ? error.message : String(error) });\n\t\t}\n\t}\n}\n\nexport interface OpcionesCarga {\n\tagentDir: string;\n\tcwd: string;\n\t/** Los de proyecto solo cargan si el proyecto es de confianza. Ver cabecera. */\n\tproyectoDeConfianza: boolean;\n\tconfigDirName: string;\n}\n\nexport interface CargaAgentes {\n\tagentes: AgenteDefinido[];\n\tproblemas: ProblemaAgente[];\n\t/** Cuántos de proyecto se ignoraron por falta de confianza. */\n\tbloqueadosSinConfianza: number;\n}\n\n/**\n * Carga los agentes de usuario y, si el proyecto es de confianza, los suyos.\n *\n * Los de proyecto pisan a los de usuario con el mismo nombre: quien abre un\n * repositorio y decide confiar en él está pidiendo su configuración.\n */\nexport function cargarAgentes(opciones: OpcionesCarga): CargaAgentes {\n\tconst agentes = new Map<string, AgenteDefinido>();\n\tconst problemas: ProblemaAgente[] = [];\n\n\tleerDirectorio(join(opciones.agentDir, \"agents\"), \"usuario\", agentes, problemas);\n\n\tconst dirProyecto = join(opciones.cwd, opciones.configDirName, \"agents\");\n\tlet bloqueadosSinConfianza = 0;\n\tif (opciones.proyectoDeConfianza) {\n\t\tleerDirectorio(dirProyecto, \"proyecto\", agentes, problemas);\n\t} else if (existsSync(dirProyecto)) {\n\t\ttry {\n\t\t\tbloqueadosSinConfianza = readdirSync(dirProyecto).filter((f) => f.toLowerCase().endsWith(\".md\")).length;\n\t\t} catch {\n\t\t\tbloqueadosSinConfianza = 0;\n\t\t}\n\t}\n\n\treturn { agentes: [...agentes.values()], problemas, bloqueadosSinConfianza };\n}\n\n/** Traduce un agente definido a las opciones que entiende el runtime. */\nexport function aOpcionesDeAgente(agente: AgenteDefinido): {\n\tinstructions: string;\n\tmodel?: string;\n\ttier?: string;\n\treadOnly?: boolean;\n\tweb?: boolean;\n\tisolation?: \"none\" | \"worktree\";\n\ttimeoutMs?: number;\n\tschema?: TSchema;\n} {\n\treturn {\n\t\tinstructions: agente.instrucciones,\n\t\tmodel: agente.model,\n\t\ttier: agente.tier,\n\t\treadOnly: agente.readOnly,\n\t\tweb: agente.web,\n\t\tisolation: agente.isolation,\n\t\ttimeoutMs: agente.timeoutMs,\n\t\tschema: agente.esquemaSalida,\n\t};\n}\n"]}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Ficheros generados: editarlos es trabajo que se pierde solo.
3
+ *
4
+ * Un agente que arregla un fallo dentro de `api.pb.go`, `schema.generated.ts` o
5
+ * un cliente de OpenAPI hace un trabajo que desaparece en el siguiente
6
+ * `make generate`. Y lo peor no es perderlo: es que entre medias el repositorio
7
+ * queda incoherente —la fuente dice una cosa y el generado otra— y el siguiente
8
+ * que mire no sabrá cuál manda.
9
+ *
10
+ * La detección mira la CABECERA, no el nombre. Un fichero llamado
11
+ * `generated.ts` puede estar escrito a mano y uno llamado `types.ts` puede
12
+ * salir de `protoc`. Lo que no miente es el marcador que los generadores
13
+ * escriben arriba.
14
+ *
15
+ * LOS PATRONES SON ESTRICTOS A PROPÓSITO, y esto es lo importante: oh-my-pi
16
+ * anota en su propia guarda que un patrón ancho como `/auto-generated/` da
17
+ * falsos positivos «incluido este mismo fichero». Un guardián que bloquea
18
+ * ficheros escritos a mano se desactiva el primer día, y con él se pierde la
19
+ * protección entera. Por eso solo cuentan las fórmulas que un generador escribe
20
+ * literalmente.
21
+ */
22
+ export interface MarcaDeGenerado {
23
+ /** La línea exacta que lo delata. Va en el mensaje: sin ella no es comprobable. */
24
+ linea: string;
25
+ numero: number;
26
+ }
27
+ /**
28
+ * ¿Este contenido dice de sí mismo que está generado?
29
+ *
30
+ * Devuelve la línea que lo delata, para poder enseñarla. Un «parece generado»
31
+ * sin la prueba delante es imposible de rebatir, y lo que no se puede rebatir
32
+ * se acaba desactivando.
33
+ */
34
+ export declare function marcaDeGenerado(contenido: string): MarcaDeGenerado | null;
35
+ /** El mensaje para el modelo cuando intenta escribir en uno. */
36
+ export declare function motivoDeGenerado(ruta: string, marca: MarcaDeGenerado): string;
37
+ //# sourceMappingURL=generados.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generados.d.ts","sourceRoot":"","sources":["../../../src/core/aprobacion/generados.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,eAAe;IAC/B,oFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAkCD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAYzE;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CAS7E","sourcesContent":["/**\n * Ficheros generados: editarlos es trabajo que se pierde solo.\n *\n * Un agente que arregla un fallo dentro de `api.pb.go`, `schema.generated.ts` o\n * un cliente de OpenAPI hace un trabajo que desaparece en el siguiente\n * `make generate`. Y lo peor no es perderlo: es que entre medias el repositorio\n * queda incoherente —la fuente dice una cosa y el generado otra— y el siguiente\n * que mire no sabrá cuál manda.\n *\n * La detección mira la CABECERA, no el nombre. Un fichero llamado\n * `generated.ts` puede estar escrito a mano y uno llamado `types.ts` puede\n * salir de `protoc`. Lo que no miente es el marcador que los generadores\n * escriben arriba.\n *\n * LOS PATRONES SON ESTRICTOS A PROPÓSITO, y esto es lo importante: oh-my-pi\n * anota en su propia guarda que un patrón ancho como `/auto-generated/` da\n * falsos positivos «incluido este mismo fichero». Un guardián que bloquea\n * ficheros escritos a mano se desactiva el primer día, y con él se pierde la\n * protección entera. Por eso solo cuentan las fórmulas que un generador escribe\n * literalmente.\n */\n\nexport interface MarcaDeGenerado {\n\t/** La línea exacta que lo delata. Va en el mensaje: sin ella no es comprobable. */\n\tlinea: string;\n\tnumero: number;\n}\n\n/**\n * Cuánto se mira: los primeros 1.024 bytes Y como mucho 40 líneas.\n *\n * El límite de BYTES es el que de verdad hace falta, y se descubrió con la\n * autoprueba: este mismo fichero se bloqueaba a sí mismo, porque su comentario\n * de cabecera explica los marcadores y menciona `@generated` sobre la línea 40.\n * Un generador escribe su marca en la primera línea o la segunda; un texto que\n * HABLA de generadores tarda párrafos en llegar. Mil bytes separan las dos\n * cosas.\n *\n * Es exactamente el falso positivo que oh-my-pi anota en su propia guarda.\n * Comprobado sobre los 424 ficheros de este paquete: se marcan CERO.\n */\nconst BYTES_DE_CABECERA = 1024;\nconst LINEAS_DE_CABECERA = 40;\n\n/**\n * Fórmulas que escriben los generadores. Nada de heurísticas anchas.\n *\n * `@generated` es la convención más extendida (Go, protobuf, Meta).\n * «Code generated by X. DO NOT EDIT.» es la de Go.\n * Las demás cubren swagger/openapi, sqlc, buf y compañía.\n */\nconst MARCADORES: RegExp[] = [\n\t/@generated\\b/i,\n\t/\\bcode\\s+generated\\s+by\\s+[\\w.\\-/]+/i,\n\t/\\bthis\\s+file\\s+(?:was|is)\\s+(?:auto(?:matically)?[\\s-]*)?generated\\b/i,\n\t/\\bgenerated\\s+by\\s+(?:protoc|sqlc|buf|swagger|openapi|grpc-gateway|mockery|stringer|prisma|drizzle-kit|graphql-codegen|napi-rs)\\b/i,\n\t/\\bdo\\s+not\\s+edit\\b[\\s\\S]{0,40}\\bgenerated\\b/i,\n\t/\\bgenerated\\b[\\s\\S]{0,40}\\bdo\\s+not\\s+edit\\b/i,\n];\n\n/**\n * ¿Este contenido dice de sí mismo que está generado?\n *\n * Devuelve la línea que lo delata, para poder enseñarla. Un «parece generado»\n * sin la prueba delante es imposible de rebatir, y lo que no se puede rebatir\n * se acaba desactivando.\n */\nexport function marcaDeGenerado(contenido: string): MarcaDeGenerado | null {\n\tconst lineas = contenido.slice(0, BYTES_DE_CABECERA).split(\"\\n\").slice(0, LINEAS_DE_CABECERA);\n\tfor (let i = 0; i < lineas.length; i++) {\n\t\tconst linea = lineas[i];\n\t\t// Solo cuenta dentro de un comentario o de una directiva de cabecera. En\n\t\t// el cuerpo del código, una cadena que diga \"@generated\" es un dato, no\n\t\t// una declaración sobre el fichero — y bloquear por eso sería justo el\n\t\t// falso positivo que vuelve inútil la guarda.\n\t\tif (!/^\\s*(?:\\/\\/|\\/\\*|\\*|#|--|<!--|;|%|\"\"\"|')/.test(linea)) continue;\n\t\tif (MARCADORES.some((p) => p.test(linea))) return { linea: linea.trim().slice(0, 160), numero: i + 1 };\n\t}\n\treturn null;\n}\n\n/** El mensaje para el modelo cuando intenta escribir en uno. */\nexport function motivoDeGenerado(ruta: string, marca: MarcaDeGenerado): string {\n\treturn [\n\t\t`Denegado: \\`${ruta}\\` es un fichero generado. Su línea ${marca.numero} lo dice:`,\n\t\t` ${marca.linea}`,\n\t\t\"Lo que escribas aquí desaparece en la siguiente regeneración, y hasta entonces la\",\n\t\t\"fuente y el generado dicen cosas distintas. Edita el origen (el .proto, el esquema,\",\n\t\t\"la plantilla o la configuración del generador) y vuelve a generar.\",\n\t\t\"Si de verdad hay que tocarlo a mano, pídeselo al usuario y que lo decida.\",\n\t].join(\"\\n\");\n}\n"]}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Ficheros generados: editarlos es trabajo que se pierde solo.
3
+ *
4
+ * Un agente que arregla un fallo dentro de `api.pb.go`, `schema.generated.ts` o
5
+ * un cliente de OpenAPI hace un trabajo que desaparece en el siguiente
6
+ * `make generate`. Y lo peor no es perderlo: es que entre medias el repositorio
7
+ * queda incoherente —la fuente dice una cosa y el generado otra— y el siguiente
8
+ * que mire no sabrá cuál manda.
9
+ *
10
+ * La detección mira la CABECERA, no el nombre. Un fichero llamado
11
+ * `generated.ts` puede estar escrito a mano y uno llamado `types.ts` puede
12
+ * salir de `protoc`. Lo que no miente es el marcador que los generadores
13
+ * escriben arriba.
14
+ *
15
+ * LOS PATRONES SON ESTRICTOS A PROPÓSITO, y esto es lo importante: oh-my-pi
16
+ * anota en su propia guarda que un patrón ancho como `/auto-generated/` da
17
+ * falsos positivos «incluido este mismo fichero». Un guardián que bloquea
18
+ * ficheros escritos a mano se desactiva el primer día, y con él se pierde la
19
+ * protección entera. Por eso solo cuentan las fórmulas que un generador escribe
20
+ * literalmente.
21
+ */
22
+ /**
23
+ * Cuánto se mira: los primeros 1.024 bytes Y como mucho 40 líneas.
24
+ *
25
+ * El límite de BYTES es el que de verdad hace falta, y se descubrió con la
26
+ * autoprueba: este mismo fichero se bloqueaba a sí mismo, porque su comentario
27
+ * de cabecera explica los marcadores y menciona `@generated` sobre la línea 40.
28
+ * Un generador escribe su marca en la primera línea o la segunda; un texto que
29
+ * HABLA de generadores tarda párrafos en llegar. Mil bytes separan las dos
30
+ * cosas.
31
+ *
32
+ * Es exactamente el falso positivo que oh-my-pi anota en su propia guarda.
33
+ * Comprobado sobre los 424 ficheros de este paquete: se marcan CERO.
34
+ */
35
+ const BYTES_DE_CABECERA = 1024;
36
+ const LINEAS_DE_CABECERA = 40;
37
+ /**
38
+ * Fórmulas que escriben los generadores. Nada de heurísticas anchas.
39
+ *
40
+ * `@generated` es la convención más extendida (Go, protobuf, Meta).
41
+ * «Code generated by X. DO NOT EDIT.» es la de Go.
42
+ * Las demás cubren swagger/openapi, sqlc, buf y compañía.
43
+ */
44
+ const MARCADORES = [
45
+ /@generated\b/i,
46
+ /\bcode\s+generated\s+by\s+[\w.\-/]+/i,
47
+ /\bthis\s+file\s+(?:was|is)\s+(?:auto(?:matically)?[\s-]*)?generated\b/i,
48
+ /\bgenerated\s+by\s+(?:protoc|sqlc|buf|swagger|openapi|grpc-gateway|mockery|stringer|prisma|drizzle-kit|graphql-codegen|napi-rs)\b/i,
49
+ /\bdo\s+not\s+edit\b[\s\S]{0,40}\bgenerated\b/i,
50
+ /\bgenerated\b[\s\S]{0,40}\bdo\s+not\s+edit\b/i,
51
+ ];
52
+ /**
53
+ * ¿Este contenido dice de sí mismo que está generado?
54
+ *
55
+ * Devuelve la línea que lo delata, para poder enseñarla. Un «parece generado»
56
+ * sin la prueba delante es imposible de rebatir, y lo que no se puede rebatir
57
+ * se acaba desactivando.
58
+ */
59
+ export function marcaDeGenerado(contenido) {
60
+ const lineas = contenido.slice(0, BYTES_DE_CABECERA).split("\n").slice(0, LINEAS_DE_CABECERA);
61
+ for (let i = 0; i < lineas.length; i++) {
62
+ const linea = lineas[i];
63
+ // Solo cuenta dentro de un comentario o de una directiva de cabecera. En
64
+ // el cuerpo del código, una cadena que diga "@generated" es un dato, no
65
+ // una declaración sobre el fichero — y bloquear por eso sería justo el
66
+ // falso positivo que vuelve inútil la guarda.
67
+ if (!/^\s*(?:\/\/|\/\*|\*|#|--|<!--|;|%|"""|')/.test(linea))
68
+ continue;
69
+ if (MARCADORES.some((p) => p.test(linea)))
70
+ return { linea: linea.trim().slice(0, 160), numero: i + 1 };
71
+ }
72
+ return null;
73
+ }
74
+ /** El mensaje para el modelo cuando intenta escribir en uno. */
75
+ export function motivoDeGenerado(ruta, marca) {
76
+ return [
77
+ `Denegado: \`${ruta}\` es un fichero generado. Su línea ${marca.numero} lo dice:`,
78
+ ` ${marca.linea}`,
79
+ "Lo que escribas aquí desaparece en la siguiente regeneración, y hasta entonces la",
80
+ "fuente y el generado dicen cosas distintas. Edita el origen (el .proto, el esquema,",
81
+ "la plantilla o la configuración del generador) y vuelve a generar.",
82
+ "Si de verdad hay que tocarlo a mano, pídeselo al usuario y que lo decida.",
83
+ ].join("\n");
84
+ }
85
+ //# sourceMappingURL=generados.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generados.js","sourceRoot":"","sources":["../../../src/core/aprobacion/generados.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH;;;;;;;;;;;;GAYG;AACH,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;;;;;GAMG;AACH,MAAM,UAAU,GAAa;IAC5B,eAAe;IACf,sCAAsC;IACtC,wEAAwE;IACxE,oIAAoI;IACpI,+CAA+C;IAC/C,+CAA+C;CAC/C,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB,EAA0B;IAC1E,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC9F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,yEAAyE;QACzE,yEAAwE;QACxE,2EAAuE;QACvE,+CAA8C;QAC9C,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QACtE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACxG,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAsB,EAAU;IAC9E,OAAO;QACN,eAAe,IAAI,wCAAuC,KAAK,CAAC,MAAM,WAAW;QACjF,OAAO,KAAK,CAAC,KAAK,EAAE;QACpB,qFAAmF;QACnF,qFAAqF;QACrF,qEAAoE;QACpE,4EAA2E;KAC3E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACb","sourcesContent":["/**\n * Ficheros generados: editarlos es trabajo que se pierde solo.\n *\n * Un agente que arregla un fallo dentro de `api.pb.go`, `schema.generated.ts` o\n * un cliente de OpenAPI hace un trabajo que desaparece en el siguiente\n * `make generate`. Y lo peor no es perderlo: es que entre medias el repositorio\n * queda incoherente —la fuente dice una cosa y el generado otra— y el siguiente\n * que mire no sabrá cuál manda.\n *\n * La detección mira la CABECERA, no el nombre. Un fichero llamado\n * `generated.ts` puede estar escrito a mano y uno llamado `types.ts` puede\n * salir de `protoc`. Lo que no miente es el marcador que los generadores\n * escriben arriba.\n *\n * LOS PATRONES SON ESTRICTOS A PROPÓSITO, y esto es lo importante: oh-my-pi\n * anota en su propia guarda que un patrón ancho como `/auto-generated/` da\n * falsos positivos «incluido este mismo fichero». Un guardián que bloquea\n * ficheros escritos a mano se desactiva el primer día, y con él se pierde la\n * protección entera. Por eso solo cuentan las fórmulas que un generador escribe\n * literalmente.\n */\n\nexport interface MarcaDeGenerado {\n\t/** La línea exacta que lo delata. Va en el mensaje: sin ella no es comprobable. */\n\tlinea: string;\n\tnumero: number;\n}\n\n/**\n * Cuánto se mira: los primeros 1.024 bytes Y como mucho 40 líneas.\n *\n * El límite de BYTES es el que de verdad hace falta, y se descubrió con la\n * autoprueba: este mismo fichero se bloqueaba a sí mismo, porque su comentario\n * de cabecera explica los marcadores y menciona `@generated` sobre la línea 40.\n * Un generador escribe su marca en la primera línea o la segunda; un texto que\n * HABLA de generadores tarda párrafos en llegar. Mil bytes separan las dos\n * cosas.\n *\n * Es exactamente el falso positivo que oh-my-pi anota en su propia guarda.\n * Comprobado sobre los 424 ficheros de este paquete: se marcan CERO.\n */\nconst BYTES_DE_CABECERA = 1024;\nconst LINEAS_DE_CABECERA = 40;\n\n/**\n * Fórmulas que escriben los generadores. Nada de heurísticas anchas.\n *\n * `@generated` es la convención más extendida (Go, protobuf, Meta).\n * «Code generated by X. DO NOT EDIT.» es la de Go.\n * Las demás cubren swagger/openapi, sqlc, buf y compañía.\n */\nconst MARCADORES: RegExp[] = [\n\t/@generated\\b/i,\n\t/\\bcode\\s+generated\\s+by\\s+[\\w.\\-/]+/i,\n\t/\\bthis\\s+file\\s+(?:was|is)\\s+(?:auto(?:matically)?[\\s-]*)?generated\\b/i,\n\t/\\bgenerated\\s+by\\s+(?:protoc|sqlc|buf|swagger|openapi|grpc-gateway|mockery|stringer|prisma|drizzle-kit|graphql-codegen|napi-rs)\\b/i,\n\t/\\bdo\\s+not\\s+edit\\b[\\s\\S]{0,40}\\bgenerated\\b/i,\n\t/\\bgenerated\\b[\\s\\S]{0,40}\\bdo\\s+not\\s+edit\\b/i,\n];\n\n/**\n * ¿Este contenido dice de sí mismo que está generado?\n *\n * Devuelve la línea que lo delata, para poder enseñarla. Un «parece generado»\n * sin la prueba delante es imposible de rebatir, y lo que no se puede rebatir\n * se acaba desactivando.\n */\nexport function marcaDeGenerado(contenido: string): MarcaDeGenerado | null {\n\tconst lineas = contenido.slice(0, BYTES_DE_CABECERA).split(\"\\n\").slice(0, LINEAS_DE_CABECERA);\n\tfor (let i = 0; i < lineas.length; i++) {\n\t\tconst linea = lineas[i];\n\t\t// Solo cuenta dentro de un comentario o de una directiva de cabecera. En\n\t\t// el cuerpo del código, una cadena que diga \"@generated\" es un dato, no\n\t\t// una declaración sobre el fichero — y bloquear por eso sería justo el\n\t\t// falso positivo que vuelve inútil la guarda.\n\t\tif (!/^\\s*(?:\\/\\/|\\/\\*|\\*|#|--|<!--|;|%|\"\"\"|')/.test(linea)) continue;\n\t\tif (MARCADORES.some((p) => p.test(linea))) return { linea: linea.trim().slice(0, 160), numero: i + 1 };\n\t}\n\treturn null;\n}\n\n/** El mensaje para el modelo cuando intenta escribir en uno. */\nexport function motivoDeGenerado(ruta: string, marca: MarcaDeGenerado): string {\n\treturn [\n\t\t`Denegado: \\`${ruta}\\` es un fichero generado. Su línea ${marca.numero} lo dice:`,\n\t\t` ${marca.linea}`,\n\t\t\"Lo que escribas aquí desaparece en la siguiente regeneración, y hasta entonces la\",\n\t\t\"fuente y el generado dicen cosas distintas. Edita el origen (el .proto, el esquema,\",\n\t\t\"la plantilla o la configuración del generador) y vuelve a generar.\",\n\t\t\"Si de verdad hay que tocarlo a mano, pídeselo al usuario y que lo decida.\",\n\t].join(\"\\n\");\n}\n"]}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * El tercer ámbito de configuración: el que el usuario NO puede editar.
3
+ *
4
+ * EL AGUJERO, medido: `settings-manager.ts:203` declara
5
+ * `type SettingsScope = "global" | "project"`, y los dos ficheros son
6
+ * `~/<config>/agent/settings.json` y `<proyecto>/<config>/settings.json`. Los
7
+ * dos los escribe el usuario. Así que la línea que el CISO puso para prohibir
8
+ * `yolo` la borra el propio usuario con un editor de texto y `yolo` vuelve a
9
+ * estar disponible. Lo mismo en oh-my-pi, prime-agent y pi.dev: dos ámbitos,
10
+ * los dos suyos.
11
+ *
12
+ * Una política que el sujeto de la política puede desactivar no es una
13
+ * política. Es una sugerencia con formato JSON.
14
+ *
15
+ * LA PROPIEDAD QUE LA HACE REAL, y es la única que importa: esta política
16
+ * **solo puede restringir**. Nunca amplía. Si el fichero de máquina dice
17
+ * `modoMaximo: "manual"` y el usuario pide `yolo`, sale `manual`; si dice
18
+ * `modoMaximo: "yolo"` y el usuario pide `manual`, sale `manual` igual. Un
19
+ * ámbito que pudiera subir permisos sería un agujero nuevo —quien escriba en
20
+ * `/etc` ya tiene la máquina, pero quien copie un fichero de política de otro
21
+ * sitio no debería poder ampliarle los permisos a nadie—.
22
+ *
23
+ * DÓNDE VIVE. En el sitio de cada sistema que exige administrador para
24
+ * escribir, que es lo que sostiene todo lo demás:
25
+ *
26
+ * macOS /Library/Application Support/Ada/politica.json
27
+ * Linux /etc/ada/politica.json
28
+ * Windows %ProgramData%\Ada\politica.json
29
+ *
30
+ * LO QUE NO RESUELVE, dicho antes de que lo descubra un cliente: un usuario con
31
+ * administrador en su propia máquina puede editar el fichero. Esto no defiende
32
+ * de eso y no puede: en un equipo gestionado, quien tiene root manda. Defiende
33
+ * del caso que sí ocurre en una empresa —un portátil corporativo donde el
34
+ * empleado no es administrador— y deja constancia en el libro de sesión de bajo
35
+ * qué política se decidió cada llamada.
36
+ *
37
+ * Y si el fichero resulta ser escribible por el usuario, se dice. Una política
38
+ * que se aplica pero no protege es peor que ninguna si se presenta como que
39
+ * protege: se sigue aplicando —solo puede restringir, así que aplicarla nunca
40
+ * empeora— pero el aviso sale por `stderr` y por `ada-cli audit`.
41
+ */
42
+ import type { ModoPermiso } from "./politica.ts";
43
+ export interface PoliticaDeMaquina {
44
+ /** Techo del modo de permisos. Nunca sube el del usuario, solo lo baja. */
45
+ modoMaximo?: ModoPermiso;
46
+ /** Tools denegadas para todo el equipo. Se suman a las del usuario. */
47
+ denegadas?: string[];
48
+ /** Qué contarle a quien se topa con el bloqueo. Va al mensaje del modelo. */
49
+ motivo?: string;
50
+ }
51
+ /** Qué se leyó y qué garantía tiene. Nunca «no hay» cuando es «no pude». */
52
+ export interface LecturaDePolitica {
53
+ politica: PoliticaDeMaquina | null;
54
+ ruta: string;
55
+ /**
56
+ * Tres estados y no dos:
57
+ * · `ausente` — no hay fichero. No hay política, y eso es una respuesta.
58
+ * · `aplicada` — leído y en vigor.
59
+ * · `ilegible` — existe y no se ha podido leer o entender. NO es «no hay».
60
+ */
61
+ estado: "ausente" | "aplicada" | "ilegible";
62
+ /** `true` si el usuario puede escribir el fichero: entonces no garantiza nada. */
63
+ editablePorElUsuario: boolean;
64
+ /** Explicación para el aviso. Vacía cuando no hay nada que decir. */
65
+ aviso: string;
66
+ }
67
+ /** El sitio de cada sistema que pide administrador para escribir. */
68
+ export declare function rutaDeLaPolitica(plataforma?: NodeJS.Platform, entorno?: NodeJS.ProcessEnv): string;
69
+ /**
70
+ * Lee la política de máquina.
71
+ *
72
+ * Un fichero que existe y no se entiende NO se trata como que no existe: eso
73
+ * convertiría un error de sintaxis del administrador en una vía silenciosa para
74
+ * quedarse sin política. Se devuelve `ilegible`, y quien decide lo baja a lo
75
+ * más restrictivo — igual que hace `nivelDesdeConfig` con un nivel desconocido.
76
+ */
77
+ export declare function leerPoliticaDeMaquina(ruta?: string): LecturaDePolitica;
78
+ /**
79
+ * Aplica el techo. **Solo baja.**
80
+ *
81
+ * `ilegible` cae a `manual`, el más restrictivo utilizable: un fichero de
82
+ * política que el administrador escribió mal no puede acabar dando MÁS permisos
83
+ * de los que él pretendía. `plan` no se usa como caída porque dejaría el agente
84
+ * sin poder actuar en absoluto por una coma mal puesta.
85
+ */
86
+ export declare function recortarModo(pedido: ModoPermiso, lectura: LecturaDePolitica): ModoPermiso;
87
+ export declare function politicaDeMaquina(): LecturaDePolitica;
88
+ /** Para las pruebas: vuelve a leer la próxima vez. */
89
+ export declare function olvidarPoliticaDeMaquina(): void;
90
+ //# sourceMappingURL=politica-de-maquina.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"politica-de-maquina.d.ts","sourceRoot":"","sources":["../../../src/core/aprobacion/politica-de-maquina.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKjD,MAAM,WAAW,iBAAiB;IACjC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,8EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oFAA4E;AAC5E,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5C,kFAAkF;IAClF,oBAAoB,EAAE,OAAO,CAAC;IAC9B,uEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;CACd;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,UAAU,GAAE,MAAM,CAAC,QAA2B,EAAE,OAAO,oBAAc,GAAG,MAAM,CAY9G;AAMD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,SAAqB,GAAG,iBAAiB,CAyElF;AA8BD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAQzF;AAWD,wBAAgB,iBAAiB,IAAI,iBAAiB,CAMrD;AAED,uDAAsD;AACtD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C","sourcesContent":["/**\n * El tercer ámbito de configuración: el que el usuario NO puede editar.\n *\n * EL AGUJERO, medido: `settings-manager.ts:203` declara\n * `type SettingsScope = \"global\" | \"project\"`, y los dos ficheros son\n * `~/<config>/agent/settings.json` y `<proyecto>/<config>/settings.json`. Los\n * dos los escribe el usuario. Así que la línea que el CISO puso para prohibir\n * `yolo` la borra el propio usuario con un editor de texto y `yolo` vuelve a\n * estar disponible. Lo mismo en oh-my-pi, prime-agent y pi.dev: dos ámbitos,\n * los dos suyos.\n *\n * Una política que el sujeto de la política puede desactivar no es una\n * política. Es una sugerencia con formato JSON.\n *\n * LA PROPIEDAD QUE LA HACE REAL, y es la única que importa: esta política\n * **solo puede restringir**. Nunca amplía. Si el fichero de máquina dice\n * `modoMaximo: \"manual\"` y el usuario pide `yolo`, sale `manual`; si dice\n * `modoMaximo: \"yolo\"` y el usuario pide `manual`, sale `manual` igual. Un\n * ámbito que pudiera subir permisos sería un agujero nuevo —quien escriba en\n * `/etc` ya tiene la máquina, pero quien copie un fichero de política de otro\n * sitio no debería poder ampliarle los permisos a nadie—.\n *\n * DÓNDE VIVE. En el sitio de cada sistema que exige administrador para\n * escribir, que es lo que sostiene todo lo demás:\n *\n * macOS /Library/Application Support/Ada/politica.json\n * Linux /etc/ada/politica.json\n * Windows %ProgramData%\\Ada\\politica.json\n *\n * LO QUE NO RESUELVE, dicho antes de que lo descubra un cliente: un usuario con\n * administrador en su propia máquina puede editar el fichero. Esto no defiende\n * de eso y no puede: en un equipo gestionado, quien tiene root manda. Defiende\n * del caso que sí ocurre en una empresa —un portátil corporativo donde el\n * empleado no es administrador— y deja constancia en el libro de sesión de bajo\n * qué política se decidió cada llamada.\n *\n * Y si el fichero resulta ser escribible por el usuario, se dice. Una política\n * que se aplica pero no protege es peor que ninguna si se presenta como que\n * protege: se sigue aplicando —solo puede restringir, así que aplicarla nunca\n * empeora— pero el aviso sale por `stderr` y por `ada-cli audit`.\n */\n\nimport { accessSync, constants, readFileSync, statSync } from \"node:fs\";\nimport { dirname, win32 } from \"node:path\";\nimport type { ModoPermiso } from \"./politica.ts\";\n\n/** De menos a más permisivo. El orden ES la semántica del techo. */\nconst ORDEN: readonly ModoPermiso[] = [\"plan\", \"manual\", \"auto\", \"yolo\"];\n\nexport interface PoliticaDeMaquina {\n\t/** Techo del modo de permisos. Nunca sube el del usuario, solo lo baja. */\n\tmodoMaximo?: ModoPermiso;\n\t/** Tools denegadas para todo el equipo. Se suman a las del usuario. */\n\tdenegadas?: string[];\n\t/** Qué contarle a quien se topa con el bloqueo. Va al mensaje del modelo. */\n\tmotivo?: string;\n}\n\n/** Qué se leyó y qué garantía tiene. Nunca «no hay» cuando es «no pude». */\nexport interface LecturaDePolitica {\n\tpolitica: PoliticaDeMaquina | null;\n\truta: string;\n\t/**\n\t * Tres estados y no dos:\n\t * · `ausente` — no hay fichero. No hay política, y eso es una respuesta.\n\t * · `aplicada` — leído y en vigor.\n\t * · `ilegible` — existe y no se ha podido leer o entender. NO es «no hay».\n\t */\n\testado: \"ausente\" | \"aplicada\" | \"ilegible\";\n\t/** `true` si el usuario puede escribir el fichero: entonces no garantiza nada. */\n\teditablePorElUsuario: boolean;\n\t/** Explicación para el aviso. Vacía cuando no hay nada que decir. */\n\taviso: string;\n}\n\n/** El sitio de cada sistema que pide administrador para escribir. */\nexport function rutaDeLaPolitica(plataforma: NodeJS.Platform = process.platform, entorno = process.env): string {\n\tif (plataforma === \"win32\") {\n\t\t// `win32.join` y no `join`: esta función recibe la plataforma como\n\t\t// parámetro, así que tiene que dar la ruta correcta también cuando se la\n\t\t// pregunta desde macOS o Linux. Con `join` a secas salía\n\t\t// `D:\\ProgramData/Ada/politica.json`, con los separadores mezclados.\n\t\treturn win32.join(entorno.ProgramData ?? \"C:\\\\ProgramData\", \"Ada\", \"politica.json\");\n\t}\n\tif (plataforma === \"darwin\") {\n\t\treturn \"/Library/Application Support/Ada/politica.json\";\n\t}\n\treturn \"/etc/ada/politica.json\";\n}\n\nfunction esModo(x: unknown): x is ModoPermiso {\n\treturn typeof x === \"string\" && (ORDEN as readonly string[]).includes(x);\n}\n\n/**\n * Lee la política de máquina.\n *\n * Un fichero que existe y no se entiende NO se trata como que no existe: eso\n * convertiría un error de sintaxis del administrador en una vía silenciosa para\n * quedarse sin política. Se devuelve `ilegible`, y quien decide lo baja a lo\n * más restrictivo — igual que hace `nivelDesdeConfig` con un nivel desconocido.\n */\nexport function leerPoliticaDeMaquina(ruta = rutaDeLaPolitica()): LecturaDePolitica {\n\tlet crudo: string;\n\ttry {\n\t\tcrudo = readFileSync(ruta, \"utf-8\");\n\t} catch (error) {\n\t\tconst codigo = (error as NodeJS.ErrnoException).code;\n\t\tif (codigo === \"ENOENT\") {\n\t\t\treturn { politica: null, ruta, estado: \"ausente\", editablePorElUsuario: false, aviso: \"\" };\n\t\t}\n\t\t// Existe pero no se deja leer —permisos, por ejemplo—. «No he podido\n\t\t// mirarlo» no es «no hay nada».\n\t\treturn {\n\t\t\tpolitica: null,\n\t\t\truta,\n\t\t\testado: \"ilegible\",\n\t\t\teditablePorElUsuario: false,\n\t\t\taviso: `hay una política de máquina en ${ruta} y no se ha podido leer (${codigo ?? \"error\"})`,\n\t\t};\n\t}\n\n\tlet objeto: unknown;\n\ttry {\n\t\tobjeto = JSON.parse(crudo);\n\t} catch {\n\t\treturn {\n\t\t\tpolitica: null,\n\t\t\truta,\n\t\t\testado: \"ilegible\",\n\t\t\teditablePorElUsuario: false,\n\t\t\taviso: `la política de máquina de ${ruta} no es JSON válido`,\n\t\t};\n\t}\n\tif (typeof objeto !== \"object\" || objeto === null) {\n\t\treturn {\n\t\t\tpolitica: null,\n\t\t\truta,\n\t\t\testado: \"ilegible\",\n\t\t\teditablePorElUsuario: false,\n\t\t\taviso: `la política de máquina de ${ruta} no es un objeto`,\n\t\t};\n\t}\n\n\tconst o = objeto as Record<string, unknown>;\n\t// Un `modoMaximo` que no se entiende es lo mismo que no poder leer el\n\t// fichero: si se ignorara, bastaría una errata para desactivar el techo.\n\tif (o.modoMaximo !== undefined && !esModo(o.modoMaximo)) {\n\t\treturn {\n\t\t\tpolitica: null,\n\t\t\truta,\n\t\t\testado: \"ilegible\",\n\t\t\teditablePorElUsuario: false,\n\t\t\taviso: `\"modoMaximo\" vale ${JSON.stringify(o.modoMaximo)} en ${ruta}, y no es ninguno de ${ORDEN.join(\", \")}`,\n\t\t};\n\t}\n\n\tconst politica: PoliticaDeMaquina = {\n\t\t...(esModo(o.modoMaximo) ? { modoMaximo: o.modoMaximo } : {}),\n\t\t...(Array.isArray(o.denegadas)\n\t\t\t? { denegadas: o.denegadas.filter((x): x is string => typeof x === \"string\") }\n\t\t\t: {}),\n\t\t...(typeof o.motivo === \"string\" ? { motivo: o.motivo } : {}),\n\t};\n\n\tconst editable = escribiblePorElUsuario(ruta);\n\treturn {\n\t\tpolitica,\n\t\truta,\n\t\testado: \"aplicada\",\n\t\teditablePorElUsuario: editable,\n\t\taviso: editable\n\t\t\t? `la política de máquina de ${ruta} la puede editar este usuario, así que no garantiza nada`\n\t\t\t: \"\",\n\t};\n}\n\n/**\n * ¿Puede este usuario reescribir el fichero de política?\n *\n * Se comprueba el fichero Y su directorio: poder escribir en el directorio\n * basta para sustituir el fichero entero, y mirar solo el fichero daría por\n * protegida una política que cualquiera puede reemplazar.\n */\nfunction escribiblePorElUsuario(ruta: string): boolean {\n\tconst puedeEscribir = (p: string): boolean => {\n\t\ttry {\n\t\t\taccessSync(p, constants.W_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t};\n\tif (puedeEscribir(ruta)) return true;\n\ttry {\n\t\t// `dirname` y no partir por \"/\" a mano: esta comprobación sí corre en la\n\t\t// máquina de verdad, y en Windows el separador es el otro.\n\t\tconst dir = dirname(ruta);\n\t\tstatSync(dir);\n\t\treturn puedeEscribir(dir);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Aplica el techo. **Solo baja.**\n *\n * `ilegible` cae a `manual`, el más restrictivo utilizable: un fichero de\n * política que el administrador escribió mal no puede acabar dando MÁS permisos\n * de los que él pretendía. `plan` no se usa como caída porque dejaría el agente\n * sin poder actuar en absoluto por una coma mal puesta.\n */\nexport function recortarModo(pedido: ModoPermiso, lectura: LecturaDePolitica): ModoPermiso {\n\tif (lectura.estado === \"ausente\") return pedido;\n\tif (lectura.estado === \"ilegible\") {\n\t\treturn ORDEN.indexOf(pedido) < ORDEN.indexOf(\"manual\") ? pedido : \"manual\";\n\t}\n\tconst techo = lectura.politica?.modoMaximo;\n\tif (!techo) return pedido;\n\treturn ORDEN.indexOf(pedido) <= ORDEN.indexOf(techo) ? pedido : techo;\n}\n\n/**\n * La política leída una vez por proceso.\n *\n * Se lee perezosamente —en la primera decisión, no al importar— porque el\n * arranque tiene puerta medida (`scripts/check-arranque.mjs`) y un `readFileSync`\n * en tiempo de importación se paga en cada `--version`.\n */\nlet cacheada: LecturaDePolitica | null = null;\n\nexport function politicaDeMaquina(): LecturaDePolitica {\n\tif (!cacheada) {\n\t\tcacheada = leerPoliticaDeMaquina();\n\t\tif (cacheada.aviso) console.error(`Ada: ${cacheada.aviso}.`);\n\t}\n\treturn cacheada;\n}\n\n/** Para las pruebas: vuelve a leer la próxima vez. */\nexport function olvidarPoliticaDeMaquina(): void {\n\tcacheada = null;\n}\n"]}